@strapi/admin 4.20.2 → 4.20.4

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 (232) hide show
  1. package/dist/_chunks/{AdminSeatInfo-zkOV49A8.js → AdminSeatInfo-9cSpeWWp.js} +3 -3
  2. package/dist/_chunks/{AdminSeatInfo-zkOV49A8.js.map → AdminSeatInfo-9cSpeWWp.js.map} +1 -1
  3. package/dist/_chunks/{AdminSeatInfo-VkSqB0Dg.mjs → AdminSeatInfo-IZMiKB-_.mjs} +3 -3
  4. package/dist/_chunks/{AdminSeatInfo-VkSqB0Dg.mjs.map → AdminSeatInfo-IZMiKB-_.mjs.map} +1 -1
  5. package/dist/_chunks/{AuthenticatedApp-3CV5_xCk.mjs → AuthenticatedApp-FKtpxGn5.mjs} +23 -23
  6. package/dist/_chunks/{AuthenticatedApp-3CV5_xCk.mjs.map → AuthenticatedApp-FKtpxGn5.mjs.map} +1 -1
  7. package/dist/_chunks/{AuthenticatedApp-ejf761Rx.js → AuthenticatedApp-VMottKnI.js} +23 -23
  8. package/dist/_chunks/{AuthenticatedApp-ejf761Rx.js.map → AuthenticatedApp-VMottKnI.js.map} +1 -1
  9. package/dist/_chunks/{CreateActionEE-Ho3OwfvE.mjs → CreateActionEE-oYq0Ptw4.mjs} +2 -2
  10. package/dist/_chunks/{CreateActionEE-Ho3OwfvE.mjs.map → CreateActionEE-oYq0Ptw4.mjs.map} +1 -1
  11. package/dist/_chunks/{CreateActionEE-dhaq5sbW.js → CreateActionEE-saIAShnR.js} +2 -2
  12. package/dist/_chunks/{CreateActionEE-dhaq5sbW.js.map → CreateActionEE-saIAShnR.js.map} +1 -1
  13. package/dist/_chunks/{CreatePage-nN8IugS8.js → CreatePage-5SwBLUfK.js} +3 -3
  14. package/dist/_chunks/{CreatePage-nN8IugS8.js.map → CreatePage-5SwBLUfK.js.map} +1 -1
  15. package/dist/_chunks/{CreatePage-P61DuWG4.mjs → CreatePage-8azm2joF.mjs} +6 -6
  16. package/dist/_chunks/{CreatePage-P61DuWG4.mjs.map → CreatePage-8azm2joF.mjs.map} +1 -1
  17. package/dist/_chunks/{CreatePage-GzdH4LbW.js → CreatePage-MACIPS8o.js} +8 -8
  18. package/dist/_chunks/{CreatePage-GzdH4LbW.js.map → CreatePage-MACIPS8o.js.map} +1 -1
  19. package/dist/_chunks/{CreatePage-N1PnEsIi.mjs → CreatePage-U5i8fNmY.mjs} +3 -3
  20. package/dist/_chunks/{CreatePage-N1PnEsIi.mjs.map → CreatePage-U5i8fNmY.mjs.map} +1 -1
  21. package/dist/_chunks/{CreatePage-cBK-eOPh.mjs → CreatePage-Ygam32G2.mjs} +8 -8
  22. package/dist/_chunks/{CreatePage-cBK-eOPh.mjs.map → CreatePage-Ygam32G2.mjs.map} +1 -1
  23. package/dist/_chunks/{CreatePage-1jL64Mb6.js → CreatePage-c5fVtthX.js} +6 -6
  24. package/dist/_chunks/{CreatePage-1jL64Mb6.js.map → CreatePage-c5fVtthX.js.map} +1 -1
  25. package/dist/_chunks/{CreateView-UlLxS0SX.mjs → CreateView-BZiXWQwU.mjs} +6 -6
  26. package/dist/_chunks/{CreateView-UlLxS0SX.mjs.map → CreateView-BZiXWQwU.mjs.map} +1 -1
  27. package/dist/_chunks/{CreateView-OtqjuCLO.mjs → CreateView-_ROGDfSe.mjs} +6 -6
  28. package/dist/_chunks/{CreateView-OtqjuCLO.mjs.map → CreateView-_ROGDfSe.mjs.map} +1 -1
  29. package/dist/_chunks/{CreateView-E885m_yD.js → CreateView-my4tNhs8.js} +6 -6
  30. package/dist/_chunks/{CreateView-E885m_yD.js.map → CreateView-my4tNhs8.js.map} +1 -1
  31. package/dist/_chunks/{CreateView-G5U_zViI.js → CreateView-y5qpDsf7.js} +6 -6
  32. package/dist/_chunks/{CreateView-G5U_zViI.js.map → CreateView-y5qpDsf7.js.map} +1 -1
  33. package/dist/_chunks/{EditPage-v8aj7VWT.mjs → EditPage-2dZ7Didb.mjs} +6 -6
  34. package/dist/_chunks/{EditPage-v8aj7VWT.mjs.map → EditPage-2dZ7Didb.mjs.map} +1 -1
  35. package/dist/_chunks/{EditPage-SV0aTUxB.js → EditPage-5JMBEHOq.js} +6 -6
  36. package/dist/_chunks/{EditPage-SV0aTUxB.js.map → EditPage-5JMBEHOq.js.map} +1 -1
  37. package/dist/_chunks/{EditPage-6kwStQrU.mjs → EditPage-A5pZLHyM.mjs} +4 -4
  38. package/dist/_chunks/{EditPage-6kwStQrU.mjs.map → EditPage-A5pZLHyM.mjs.map} +1 -1
  39. package/dist/_chunks/{EditPage-WSsPZ1Z8.mjs → EditPage-PXkhvYbn.mjs} +6 -6
  40. package/dist/_chunks/{EditPage-WSsPZ1Z8.mjs.map → EditPage-PXkhvYbn.mjs.map} +1 -1
  41. package/dist/_chunks/{EditPage-bVTACdA1.js → EditPage-Qu27zt5G.js} +9 -9
  42. package/dist/_chunks/{EditPage-bVTACdA1.js.map → EditPage-Qu27zt5G.js.map} +1 -1
  43. package/dist/_chunks/{EditPage-lVhEDrOc.mjs → EditPage-lD4OQN1_.mjs} +9 -9
  44. package/dist/_chunks/{EditPage-lVhEDrOc.mjs.map → EditPage-lD4OQN1_.mjs.map} +1 -1
  45. package/dist/_chunks/{EditPage-0gYeskSg.js → EditPage-sFUIJLxL.js} +4 -4
  46. package/dist/_chunks/{EditPage-0gYeskSg.js.map → EditPage-sFUIJLxL.js.map} +1 -1
  47. package/dist/_chunks/{EditPage-eW3Cczmp.js → EditPage-xD9UGfCa.js} +6 -6
  48. package/dist/_chunks/{EditPage-eW3Cczmp.js.map → EditPage-xD9UGfCa.js.map} +1 -1
  49. package/dist/_chunks/{EditView-9LzBDlKi.mjs → EditView-ArtwB2hE.mjs} +7 -5
  50. package/dist/_chunks/EditView-ArtwB2hE.mjs.map +1 -0
  51. package/dist/_chunks/{EditView-LfuDLid0.js → EditView-x-J2N1ej.js} +7 -5
  52. package/dist/_chunks/EditView-x-J2N1ej.js.map +1 -0
  53. package/dist/_chunks/{EditViewPage-8n2AZ7YX.mjs → EditViewPage-7rQGA5pS.mjs} +7 -7
  54. package/dist/_chunks/{EditViewPage-8n2AZ7YX.mjs.map → EditViewPage-7rQGA5pS.mjs.map} +1 -1
  55. package/dist/_chunks/{EditViewPage-FpEY5mPY.js → EditViewPage-kioXXfuP.js} +7 -7
  56. package/dist/_chunks/{EditViewPage-FpEY5mPY.js.map → EditViewPage-kioXXfuP.js.map} +1 -1
  57. package/dist/_chunks/{EventsTable-O66id4Eg.js → EventsTable-tQN7Kxkg.js} +24 -12
  58. package/dist/_chunks/EventsTable-tQN7Kxkg.js.map +1 -0
  59. package/dist/_chunks/{EventsTable-hwwD5TyQ.mjs → EventsTable-yJP3KCo9.mjs} +25 -13
  60. package/dist/_chunks/EventsTable-yJP3KCo9.mjs.map +1 -0
  61. package/dist/_chunks/{HomePage-6_B1jj3V.mjs → HomePage-6Ua7KUdf.mjs} +6 -6
  62. package/dist/_chunks/{HomePage-6_B1jj3V.mjs.map → HomePage-6Ua7KUdf.mjs.map} +1 -1
  63. package/dist/_chunks/{HomePage-H0PM_ncf.js → HomePage-Rhag1CPK.js} +6 -6
  64. package/dist/_chunks/{HomePage-H0PM_ncf.js.map → HomePage-Rhag1CPK.js.map} +1 -1
  65. package/dist/_chunks/{HomePage-QusuS2eI.js → HomePage-gFS-q0IU.js} +5 -5
  66. package/dist/_chunks/{HomePage-QusuS2eI.js.map → HomePage-gFS-q0IU.js.map} +1 -1
  67. package/dist/_chunks/{HomePage-qAFOalu_.mjs → HomePage-xDNIroqJ.mjs} +5 -5
  68. package/dist/_chunks/{HomePage-qAFOalu_.mjs.map → HomePage-xDNIroqJ.mjs.map} +1 -1
  69. package/dist/_chunks/{InformationBoxEE-vn_u-K8I.mjs → InformationBoxEE-FT-zOby4.mjs} +3 -3
  70. package/dist/_chunks/{InformationBoxEE-vn_u-K8I.mjs.map → InformationBoxEE-FT-zOby4.mjs.map} +1 -1
  71. package/dist/_chunks/{InformationBoxEE-xK3NdlR6.js → InformationBoxEE-LXF_HZCc.js} +3 -3
  72. package/dist/_chunks/{InformationBoxEE-xK3NdlR6.js.map → InformationBoxEE-LXF_HZCc.js.map} +1 -1
  73. package/dist/_chunks/{InstalledPluginsPage-3kMUuR6W.js → InstalledPluginsPage-86OzWsBR.js} +3 -3
  74. package/dist/_chunks/{InstalledPluginsPage-3kMUuR6W.js.map → InstalledPluginsPage-86OzWsBR.js.map} +1 -1
  75. package/dist/_chunks/{InstalledPluginsPage-ussdZ2v_.mjs → InstalledPluginsPage-PxcyuL3K.mjs} +3 -3
  76. package/dist/_chunks/{InstalledPluginsPage-ussdZ2v_.mjs.map → InstalledPluginsPage-PxcyuL3K.mjs.map} +1 -1
  77. package/dist/_chunks/{Layout-B0-H9OuC.js → Layout-wbTGXdLJ.js} +2 -2
  78. package/dist/_chunks/{Layout-B0-H9OuC.js.map → Layout-wbTGXdLJ.js.map} +1 -1
  79. package/dist/_chunks/{Layout-yxE0n8WS.mjs → Layout-wyY8eyNA.mjs} +2 -2
  80. package/dist/_chunks/{Layout-yxE0n8WS.mjs.map → Layout-wyY8eyNA.mjs.map} +1 -1
  81. package/dist/_chunks/{ListPage-yUsCF8ZV.js → ListPage-9mrFiaQm.js} +6 -6
  82. package/dist/_chunks/{ListPage-yUsCF8ZV.js.map → ListPage-9mrFiaQm.js.map} +1 -1
  83. package/dist/_chunks/{ListPage-7K1X0pX6.mjs → ListPage-By4B7n1l.mjs} +7 -7
  84. package/dist/_chunks/{ListPage-7K1X0pX6.mjs.map → ListPage-By4B7n1l.mjs.map} +1 -1
  85. package/dist/_chunks/{ListPage-IYnn3ati.mjs → ListPage-IgWMe693.mjs} +2 -2
  86. package/dist/_chunks/{ListPage-IYnn3ati.mjs.map → ListPage-IgWMe693.mjs.map} +1 -1
  87. package/dist/_chunks/{ListPage-dFBewK6l.mjs → ListPage-XqGIbYt6.mjs} +8 -8
  88. package/dist/_chunks/{ListPage-dFBewK6l.mjs.map → ListPage-XqGIbYt6.mjs.map} +1 -1
  89. package/dist/_chunks/{ListPage-yB1N85Sy.js → ListPage-ZVGJxWN_.js} +3 -3
  90. package/dist/_chunks/{ListPage-yB1N85Sy.js.map → ListPage-ZVGJxWN_.js.map} +1 -1
  91. package/dist/_chunks/{ListPage-ObcNzrqu.js → ListPage-cqCdPKED.js} +7 -7
  92. package/dist/_chunks/{ListPage-ObcNzrqu.js.map → ListPage-cqCdPKED.js.map} +1 -1
  93. package/dist/_chunks/{ListPage-gXAXkKs7.mjs → ListPage-iIZOJJjA.mjs} +4 -4
  94. package/dist/_chunks/{ListPage-gXAXkKs7.mjs.map → ListPage-iIZOJJjA.mjs.map} +1 -1
  95. package/dist/_chunks/{ListPage-Li-qQ_Az.js → ListPage-kpat6sMn.js} +4 -4
  96. package/dist/_chunks/{ListPage-Li-qQ_Az.js.map → ListPage-kpat6sMn.js.map} +1 -1
  97. package/dist/_chunks/{ListPage-_xv5sj1P.mjs → ListPage-q0rdi9bm.mjs} +3 -3
  98. package/dist/_chunks/{ListPage-_xv5sj1P.mjs.map → ListPage-q0rdi9bm.mjs.map} +1 -1
  99. package/dist/_chunks/{ListPage-_49KJ63c.js → ListPage-qXBhxPx4.js} +2 -2
  100. package/dist/_chunks/{ListPage-_49KJ63c.js.map → ListPage-qXBhxPx4.js.map} +1 -1
  101. package/dist/_chunks/{ListPage-1Suvn_gX.js → ListPage-sYLIB3vd.js} +8 -8
  102. package/dist/_chunks/{ListPage-1Suvn_gX.js.map → ListPage-sYLIB3vd.js.map} +1 -1
  103. package/dist/_chunks/{ListPage-DRXhn5QO.mjs → ListPage-yzNNJ5yr.mjs} +6 -6
  104. package/dist/_chunks/{ListPage-DRXhn5QO.mjs.map → ListPage-yzNNJ5yr.mjs.map} +1 -1
  105. package/dist/_chunks/{ListView-9yeqZz0_.mjs → ListView-415zGylf.mjs} +3 -3
  106. package/dist/_chunks/{ListView-9yeqZz0_.mjs.map → ListView-415zGylf.mjs.map} +1 -1
  107. package/dist/_chunks/{ListView-TeeSjfsJ.js → ListView-Wsc3wuC5.js} +3 -3
  108. package/dist/_chunks/{ListView-TeeSjfsJ.js.map → ListView-Wsc3wuC5.js.map} +1 -1
  109. package/dist/_chunks/{ListView-G_KtoKW3.mjs → ListView-hm684P4o.mjs} +3 -3
  110. package/dist/_chunks/{ListView-G_KtoKW3.mjs.map → ListView-hm684P4o.mjs.map} +1 -1
  111. package/dist/_chunks/{ListView-P-N6xcZ9.js → ListView-xfceGGWI.js} +3 -3
  112. package/dist/_chunks/{ListView-P-N6xcZ9.js.map → ListView-xfceGGWI.js.map} +1 -1
  113. package/dist/_chunks/{Login-3jiby8MZ.mjs → Login-fV4bsRFM.mjs} +2 -2
  114. package/dist/_chunks/{Login-3jiby8MZ.mjs.map → Login-fV4bsRFM.mjs.map} +1 -1
  115. package/dist/_chunks/{Login-JPCycboU.js → Login-viM76hOb.js} +2 -2
  116. package/dist/_chunks/{Login-JPCycboU.js.map → Login-viM76hOb.js.map} +1 -1
  117. package/dist/_chunks/{MagicLinkEE-ZnqFvBBH.mjs → MagicLinkEE-EtaFlZcG.mjs} +4 -4
  118. package/dist/_chunks/{MagicLinkEE-ZnqFvBBH.mjs.map → MagicLinkEE-EtaFlZcG.mjs.map} +1 -1
  119. package/dist/_chunks/{MagicLinkEE-9TDtAXSL.js → MagicLinkEE-F_2xYiNa.js} +4 -4
  120. package/dist/_chunks/{MagicLinkEE-9TDtAXSL.js.map → MagicLinkEE-F_2xYiNa.js.map} +1 -1
  121. package/dist/_chunks/{MarketplacePage-FPfkKYfJ.js → MarketplacePage-3VoQKeo4.js} +3 -3
  122. package/dist/_chunks/{MarketplacePage-FPfkKYfJ.js.map → MarketplacePage-3VoQKeo4.js.map} +1 -1
  123. package/dist/_chunks/{MarketplacePage-2meU0W44.mjs → MarketplacePage-jFLa-9Tv.mjs} +3 -3
  124. package/dist/_chunks/{MarketplacePage-2meU0W44.mjs.map → MarketplacePage-jFLa-9Tv.mjs.map} +1 -1
  125. package/dist/_chunks/{Permissions-bu1M85v6.mjs → Permissions-9WfQZ8_F.mjs} +2 -2
  126. package/dist/_chunks/{Permissions-bu1M85v6.mjs.map → Permissions-9WfQZ8_F.mjs.map} +1 -1
  127. package/dist/_chunks/{Permissions-ZdV2SxPi.js → Permissions-F2PDn9xj.js} +2 -2
  128. package/dist/_chunks/{Permissions-ZdV2SxPi.js.map → Permissions-F2PDn9xj.js.map} +1 -1
  129. package/dist/_chunks/{ProfilePage-t39GrAP0.js → ProfilePage-ZUob15tz.js} +3 -3
  130. package/dist/_chunks/{ProfilePage-t39GrAP0.js.map → ProfilePage-ZUob15tz.js.map} +1 -1
  131. package/dist/_chunks/{ProfilePage-fULMhF5t.mjs → ProfilePage-rqXKHHyl.mjs} +3 -3
  132. package/dist/_chunks/{ProfilePage-fULMhF5t.mjs.map → ProfilePage-rqXKHHyl.mjs.map} +1 -1
  133. package/dist/_chunks/{ReviewWorkflowsColumn-MQf4q8iG.mjs → ReviewWorkflowsColumn-bazWGZp9.mjs} +2 -2
  134. package/dist/_chunks/{ReviewWorkflowsColumn-MQf4q8iG.mjs.map → ReviewWorkflowsColumn-bazWGZp9.mjs.map} +1 -1
  135. package/dist/_chunks/{ReviewWorkflowsColumn-6jWqKkzr.js → ReviewWorkflowsColumn-p4XT5o2U.js} +2 -2
  136. package/dist/_chunks/{ReviewWorkflowsColumn-6jWqKkzr.js.map → ReviewWorkflowsColumn-p4XT5o2U.js.map} +1 -1
  137. package/dist/_chunks/{SelectRoles-KfyB7RvW.js → SelectRoles-ZOi4rQNz.js} +3 -3
  138. package/dist/_chunks/{SelectRoles-KfyB7RvW.js.map → SelectRoles-ZOi4rQNz.js.map} +1 -1
  139. package/dist/_chunks/{SelectRoles-lPpmNTlf.mjs → SelectRoles-gwJ489xE.mjs} +3 -3
  140. package/dist/_chunks/{SelectRoles-lPpmNTlf.mjs.map → SelectRoles-gwJ489xE.mjs.map} +1 -1
  141. package/dist/_chunks/{SettingsPage-bkHKMPzo.mjs → SettingsPage-FmUuUwzq.mjs} +21 -21
  142. package/dist/_chunks/{SettingsPage-bkHKMPzo.mjs.map → SettingsPage-FmUuUwzq.mjs.map} +1 -1
  143. package/dist/_chunks/{SettingsPage-xk4okCzu.js → SettingsPage-gVcDV5ak.js} +21 -21
  144. package/dist/_chunks/{SettingsPage-xk4okCzu.js.map → SettingsPage-gVcDV5ak.js.map} +1 -1
  145. package/dist/_chunks/{SingleSignOnPage-MuZ70ps0.js → SingleSignOnPage-MgEcw5vB.js} +3 -3
  146. package/dist/_chunks/{SingleSignOnPage-MuZ70ps0.js.map → SingleSignOnPage-MgEcw5vB.js.map} +1 -1
  147. package/dist/_chunks/{SingleSignOnPage-WlXv_0dv.mjs → SingleSignOnPage-WbZZR0tX.mjs} +3 -3
  148. package/dist/_chunks/{SingleSignOnPage-WlXv_0dv.mjs.map → SingleSignOnPage-WbZZR0tX.mjs.map} +1 -1
  149. package/dist/_chunks/{TokenTypeSelect-FQxzMIdN.mjs → TokenTypeSelect-5Ftt7gUK.mjs} +2 -2
  150. package/dist/_chunks/{TokenTypeSelect-FQxzMIdN.mjs.map → TokenTypeSelect-5Ftt7gUK.mjs.map} +1 -1
  151. package/dist/_chunks/{TokenTypeSelect-PEZjki-x.js → TokenTypeSelect-YXOIDDGa.js} +2 -2
  152. package/dist/_chunks/{TokenTypeSelect-PEZjki-x.js.map → TokenTypeSelect-YXOIDDGa.js.map} +1 -1
  153. package/dist/_chunks/{apiTokens-OV2CZdTf.js → apiTokens-7DkHvpGO.js} +2 -2
  154. package/dist/_chunks/{apiTokens-OV2CZdTf.js.map → apiTokens-7DkHvpGO.js.map} +1 -1
  155. package/dist/_chunks/{apiTokens-gx8gea11.mjs → apiTokens-irhyMv7m.mjs} +2 -2
  156. package/dist/_chunks/{apiTokens-gx8gea11.mjs.map → apiTokens-irhyMv7m.mjs.map} +1 -1
  157. package/dist/_chunks/{constants-MNFms9Q8.js → constants-6iCQwI-9.js} +2 -2
  158. package/dist/_chunks/{constants-MNFms9Q8.js.map → constants-6iCQwI-9.js.map} +1 -1
  159. package/dist/_chunks/{constants-vMqDjbVk.mjs → constants-8-320B44.mjs} +2 -2
  160. package/dist/_chunks/{constants-vMqDjbVk.mjs.map → constants-8-320B44.mjs.map} +1 -1
  161. package/dist/_chunks/{constants-85hctDLn.js → constants-GARR3cYH.js} +6 -6
  162. package/dist/_chunks/{constants-85hctDLn.js.map → constants-GARR3cYH.js.map} +1 -1
  163. package/dist/_chunks/{constants-ud210-tv.mjs → constants-TZ6t2aUw.mjs} +4 -4
  164. package/dist/_chunks/{constants-ud210-tv.mjs.map → constants-TZ6t2aUw.mjs.map} +1 -1
  165. package/dist/_chunks/{constants-Zb3s9JFR.js → constants-Y8nh5K2J.js} +2 -2
  166. package/dist/_chunks/{constants-Zb3s9JFR.js.map → constants-Y8nh5K2J.js.map} +1 -1
  167. package/dist/_chunks/{constants-GugydtTv.mjs → constants-cWopus7R.mjs} +2 -2
  168. package/dist/_chunks/{constants-GugydtTv.mjs.map → constants-cWopus7R.mjs.map} +1 -1
  169. package/dist/_chunks/{constants-8fSObLqU.mjs → constants-ci91UBPw.mjs} +6 -6
  170. package/dist/_chunks/{constants-8fSObLqU.mjs.map → constants-ci91UBPw.mjs.map} +1 -1
  171. package/dist/_chunks/{constants-Fb7UtSFw.js → constants-yy0XD177.js} +4 -4
  172. package/dist/_chunks/{constants-Fb7UtSFw.js.map → constants-yy0XD177.js.map} +1 -1
  173. package/dist/_chunks/{index-o73uUVeI.js → index-FHnaHjSM.js} +14 -11
  174. package/dist/_chunks/index-FHnaHjSM.js.map +1 -0
  175. package/dist/_chunks/{index-4xPDm1sd.mjs → index-Sr5PWLEf.mjs} +14 -11
  176. package/dist/_chunks/index-Sr5PWLEf.mjs.map +1 -0
  177. package/dist/_chunks/{reviewWorkflows-oDNsMMFz.mjs → reviewWorkflows-Lf__WK8E.mjs} +2 -2
  178. package/dist/_chunks/{reviewWorkflows-oDNsMMFz.mjs.map → reviewWorkflows-Lf__WK8E.mjs.map} +1 -1
  179. package/dist/_chunks/{reviewWorkflows-Qjqtzijf.js → reviewWorkflows-csFsWJYs.js} +2 -2
  180. package/dist/_chunks/{reviewWorkflows-Qjqtzijf.js.map → reviewWorkflows-csFsWJYs.js.map} +1 -1
  181. package/dist/_chunks/{transferTokens-t04ovaFa.js → transferTokens-Wn5Ixusu.js} +2 -2
  182. package/dist/_chunks/{transferTokens-t04ovaFa.js.map → transferTokens-Wn5Ixusu.js.map} +1 -1
  183. package/dist/_chunks/{transferTokens-L_oQLixd.mjs → transferTokens-nVplpXze.mjs} +2 -2
  184. package/dist/_chunks/{transferTokens-L_oQLixd.mjs.map → transferTokens-nVplpXze.mjs.map} +1 -1
  185. package/dist/_chunks/{useAdminRoles-knOHLRBm.mjs → useAdminRoles-DlSzAd-1.mjs} +2 -2
  186. package/dist/_chunks/{useAdminRoles-knOHLRBm.mjs.map → useAdminRoles-DlSzAd-1.mjs.map} +1 -1
  187. package/dist/_chunks/{useAdminRoles-yLVXT42V.js → useAdminRoles-ganYae89.js} +2 -2
  188. package/dist/_chunks/{useAdminRoles-yLVXT42V.js.map → useAdminRoles-ganYae89.js.map} +1 -1
  189. package/dist/_chunks/{useContentTypes-95SN-dF8.js → useContentTypes-DTqkkGy_.js} +2 -2
  190. package/dist/_chunks/{useContentTypes-95SN-dF8.js.map → useContentTypes-DTqkkGy_.js.map} +1 -1
  191. package/dist/_chunks/{useContentTypes-L8J6b7Nz.mjs → useContentTypes-qmvH8G01.mjs} +2 -2
  192. package/dist/_chunks/{useContentTypes-L8J6b7Nz.mjs.map → useContentTypes-qmvH8G01.mjs.map} +1 -1
  193. package/dist/_chunks/{useLicenseLimitNotification-dyhTFMP9.js → useLicenseLimitNotification-4e6mQbbM.js} +2 -2
  194. package/dist/_chunks/{useLicenseLimitNotification-dyhTFMP9.js.map → useLicenseLimitNotification-4e6mQbbM.js.map} +1 -1
  195. package/dist/_chunks/{useLicenseLimitNotification-CC3T0E1n.mjs → useLicenseLimitNotification-A_JEdOP4.mjs} +2 -2
  196. package/dist/_chunks/{useLicenseLimitNotification-CC3T0E1n.mjs.map → useLicenseLimitNotification-A_JEdOP4.mjs.map} +1 -1
  197. package/dist/_chunks/{useReviewWorkflows-Qy5riNG2.js → useReviewWorkflows-6jJL-HLH.js} +2 -2
  198. package/dist/_chunks/{useReviewWorkflows-Qy5riNG2.js.map → useReviewWorkflows-6jJL-HLH.js.map} +1 -1
  199. package/dist/_chunks/{useReviewWorkflows-xNAKv8as.mjs → useReviewWorkflows-sodMM24w.mjs} +2 -2
  200. package/dist/_chunks/{useReviewWorkflows-xNAKv8as.mjs.map → useReviewWorkflows-sodMM24w.mjs.map} +1 -1
  201. package/dist/_chunks/{useWebhooks-_teNEb-d.mjs → useWebhooks-854ZWFz4.mjs} +2 -2
  202. package/dist/_chunks/{useWebhooks-_teNEb-d.mjs.map → useWebhooks-854ZWFz4.mjs.map} +1 -1
  203. package/dist/_chunks/{useWebhooks-Q3t4mJdN.js → useWebhooks-I5pui8ds.js} +2 -2
  204. package/dist/_chunks/{useWebhooks-Q3t4mJdN.js.map → useWebhooks-I5pui8ds.js.map} +1 -1
  205. package/dist/_chunks/{validateWorkflow-uxUzrJnR.mjs → validateWorkflow-Y1LKUNt8.mjs} +2 -2
  206. package/dist/_chunks/{validateWorkflow-uxUzrJnR.mjs.map → validateWorkflow-Y1LKUNt8.mjs.map} +1 -1
  207. package/dist/_chunks/{validateWorkflow-dHek9T6e.js → validateWorkflow-qc34E4Tb.js} +2 -2
  208. package/dist/_chunks/{validateWorkflow-dHek9T6e.js.map → validateWorkflow-qc34E4Tb.js.map} +1 -1
  209. package/dist/admin/index.js +1 -1
  210. package/dist/admin/index.mjs +1 -1
  211. package/dist/ee/server/index.js +63 -18
  212. package/dist/ee/server/index.js.map +1 -1
  213. package/dist/ee/server/index.mjs +64 -19
  214. package/dist/ee/server/index.mjs.map +1 -1
  215. package/dist/server/index.js +23 -10
  216. package/dist/server/index.js.map +1 -1
  217. package/dist/server/index.mjs +24 -11
  218. package/dist/server/index.mjs.map +1 -1
  219. package/dist/server/src/bootstrap.d.ts.map +1 -1
  220. package/dist/server/src/services/api-token.d.ts.map +1 -1
  221. package/dist/server/src/services/transfer/token.d.ts.map +1 -1
  222. package/dist/shared/contracts/api-token.d.ts +1 -1
  223. package/dist/shared/contracts/api-token.d.ts.map +1 -1
  224. package/dist/shared/contracts/transfer.d.ts +2 -2
  225. package/dist/shared/contracts/transfer.d.ts.map +1 -1
  226. package/package.json +15 -15
  227. package/dist/_chunks/EditView-9LzBDlKi.mjs.map +0 -1
  228. package/dist/_chunks/EditView-LfuDLid0.js.map +0 -1
  229. package/dist/_chunks/EventsTable-O66id4Eg.js.map +0 -1
  230. package/dist/_chunks/EventsTable-hwwD5TyQ.mjs.map +0 -1
  231. package/dist/_chunks/index-4xPDm1sd.mjs.map +0 -1
  232. package/dist/_chunks/index-o73uUVeI.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"EditViewPage-8n2AZ7YX.mjs","sources":["../../admin/src/services/contentApi.ts","../../admin/src/pages/Settings/pages/ApiTokens/EditView/apiTokenPermissions.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/LoadingView.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/ActionBoundRoutes.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollabsableContentType.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/ContentTypesSection.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/Permissions.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/constants.ts","../../admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.ts","../../admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.ts","../../admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import { adminApi } from './api';\n\nimport type { List as ListContentApiPermissions } from '../../../shared/contracts/content-api/permissions';\nimport type { List as ListContentApiRoutes } from '../../../shared/contracts/content-api/routes';\n\nconst contentApiService = adminApi.injectEndpoints({\n endpoints: (builder) => ({\n getPermissions: builder.query<ListContentApiPermissions.Response['data'], void>({\n query: () => '/admin/content-api/permissions',\n transformResponse: (response: ListContentApiPermissions.Response) => response.data,\n }),\n getRoutes: builder.query<ListContentApiRoutes.Response['data'], void>({\n query: () => '/admin/content-api/routes',\n transformResponse: (response: ListContentApiRoutes.Response) => response.data,\n }),\n }),\n overrideExisting: false,\n});\n\nconst { useGetPermissionsQuery, useGetRoutesQuery } = contentApiService;\n\nexport { useGetPermissionsQuery, useGetRoutesQuery };\n","/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\n\nimport { List as ListContentApiPermissions } from '../../../../../../../shared/contracts/content-api/permissions';\nimport { List as ListContentApiRoutes } from '../../../../../../../shared/contracts/content-api/routes';\n\nexport interface PseudoEvent {\n target: { value: string };\n}\n\ninterface ApiTokenPermissionsContextValue {\n value: {\n selectedAction: string | null;\n routes: ListContentApiRoutes.Response['data'];\n selectedActions: string[];\n data: {\n allActionsIds: string[];\n permissions: ListContentApiPermissions.Response['data'][];\n };\n onChange: ({ target: { value } }: PseudoEvent) => void;\n onChangeSelectAll: ({\n target: { value },\n }: {\n target: { value: { action: string; actionId: string }[] };\n }) => void;\n setSelectedAction: ({ target: { value } }: PseudoEvent) => void;\n };\n}\n\ninterface ApiTokenPermissionsContextProviderProps extends ApiTokenPermissionsContextValue {\n children: React.ReactNode | React.ReactNode[];\n}\n\nconst [ApiTokenPermissionsContextProvider, useApiTokenPermissionsContext] =\n createContext<ApiTokenPermissionsContextValue>('ApiTokenPermissionsContext');\n\nconst ApiTokenPermissionsProvider = ({\n children,\n ...rest\n}: ApiTokenPermissionsContextProviderProps) => {\n return (\n <ApiTokenPermissionsContextProvider {...rest}>{children}</ApiTokenPermissionsContextProvider>\n );\n};\n\nconst useApiTokenPermissions = () => useApiTokenPermissionsContext('useApiTokenPermissions');\n\nexport { ApiTokenPermissionsProvider, useApiTokenPermissions };\nexport type { ApiTokenPermissionsContextValue, ApiTokenPermissionsContextProviderProps };\n","import * as React from 'react';\n\nimport { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { FormikErrors } from 'formik';\nimport { useIntl } from 'react-intl';\n\nimport { LifeSpanInput } from '../../../../components/Tokens/LifeSpanInput';\nimport { TokenDescription } from '../../../../components/Tokens/TokenDescription';\nimport { TokenName } from '../../../../components/Tokens/TokenName';\nimport { TokenTypeSelect } from '../../../../components/Tokens/TokenTypeSelect';\n\nimport type { ApiToken } from '../../../../../../../../shared/contracts/api-token';\n\ninterface FormApiTokenContainerProps {\n errors?: FormikErrors<Pick<ApiToken, 'name' | 'description' | 'lifespan' | 'type'>>;\n onChange: ({ target: { name, value } }: { target: { name: string; value: string } }) => void;\n canEditInputs: boolean;\n values?: Partial<Pick<ApiToken, 'name' | 'description' | 'lifespan' | 'type'>>;\n isCreating: boolean;\n apiToken?: null | Partial<ApiToken>;\n onDispatch: React.Dispatch<any>;\n setHasChangedPermissions: (hasChanged: boolean) => void;\n}\n\nexport const FormApiTokenContainer = ({\n errors = {},\n onChange,\n canEditInputs,\n isCreating,\n values = {},\n apiToken = {},\n onDispatch,\n setHasChangedPermissions,\n}: FormApiTokenContainerProps) => {\n const { formatMessage } = useIntl();\n\n const handleChangeSelectApiTokenType = ({ target: { value } }: { target: { value: string } }) => {\n setHasChangedPermissions(false);\n\n if (value === 'full-access') {\n onDispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (value === 'read-only') {\n onDispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n };\n\n const typeOptions = [\n {\n value: 'read-only',\n label: {\n id: 'Settings.tokens.types.read-only',\n defaultMessage: 'Read-only',\n },\n },\n {\n value: 'full-access',\n label: {\n id: 'Settings.tokens.types.full-access',\n defaultMessage: 'Full access',\n },\n },\n {\n value: 'custom',\n label: {\n id: 'Settings.tokens.types.custom',\n defaultMessage: 'Custom',\n },\n },\n ];\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem key=\"name\" col={6} xs={12}>\n <TokenName\n error={errors['name']}\n value={values['name']}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </GridItem>\n <GridItem key=\"description\" col={6} xs={12}>\n <TokenDescription\n error={errors['description']}\n value={values['description']}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </GridItem>\n <GridItem key=\"lifespan\" col={6} xs={12}>\n <LifeSpanInput\n isCreating={isCreating}\n error={errors['lifespan']}\n value={values['lifespan']}\n onChange={onChange}\n token={apiToken}\n />\n </GridItem>\n\n <GridItem key=\"type\" col={6} xs={12}>\n <TokenTypeSelect\n value={values['type']}\n error={errors['type']}\n label={{\n id: 'Settings.tokens.form.type',\n defaultMessage: 'Token type',\n }}\n onChange={(value) => {\n // @ts-expect-error – DS Select supports numbers & strings, will be removed in V2\n handleChangeSelectApiTokenType({ target: { value } });\n\n // @ts-expect-error – DS Select supports numbers & strings, will be removed in V2\n onChange({ target: { name: 'type', value } });\n }}\n options={typeOptions}\n canEditInputs={canEditInputs}\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n","import { Button, ContentLayout, HeaderLayout, Main } from '@strapi/design-system';\nimport {\n LoadingIndicatorPage,\n SettingsPageTitle,\n useFocusWhenNavigate,\n} from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\ninterface LoadingViewProps {\n apiTokenName?: string | null;\n}\n\nexport const LoadingView = ({ apiTokenName = null }: LoadingViewProps) => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main aria-busy=\"true\">\n <SettingsPageTitle name=\"API Tokens\" />\n <HeaderLayout\n primaryAction={\n <Button disabled startIcon={<Check />} type=\"button\" size=\"L\">\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n title={\n apiTokenName ||\n formatMessage({\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n })\n }\n />\n <ContentLayout>\n <LoadingIndicatorPage />\n </ContentLayout>\n </Main>\n );\n};\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport map from 'lodash/map';\nimport tail from 'lodash/tail';\nimport { useIntl } from 'react-intl';\nimport styled, { DefaultTheme } from 'styled-components';\n\ntype HttpVerb = 'POST' | 'GET' | 'PUT' | 'DELETE';\n\ntype MethodColor = {\n text: keyof DefaultTheme['colors'];\n border: keyof DefaultTheme['colors'];\n background: keyof DefaultTheme['colors'];\n};\n\nconst getMethodColor = (verb: HttpVerb): MethodColor => {\n switch (verb) {\n case 'POST': {\n return {\n text: 'success600',\n border: 'success200',\n background: 'success100',\n };\n }\n case 'GET': {\n return {\n text: 'secondary600',\n border: 'secondary200',\n background: 'secondary100',\n };\n }\n case 'PUT': {\n return {\n text: 'warning600',\n border: 'warning200',\n background: 'warning100',\n };\n }\n case 'DELETE': {\n return {\n text: 'danger600',\n border: 'danger200',\n background: 'danger100',\n };\n }\n default: {\n return {\n text: 'neutral600',\n border: 'neutral200',\n background: 'neutral100',\n };\n }\n }\n};\n\nconst MethodBox = styled(Box)`\n margin: -1px;\n border-radius: ${({ theme }) => theme.spaces[1]} 0 0 ${({ theme }) => theme.spaces[1]};\n`;\n\ninterface BoundRouteProps {\n route: {\n handler: string;\n method: HttpVerb;\n path: string;\n };\n}\n\nexport const BoundRoute = ({\n route = {\n handler: 'Nocontroller.error',\n method: 'GET',\n path: '/there-is-no-path',\n },\n}: BoundRouteProps) => {\n const { formatMessage } = useIntl();\n\n const { method, handler: title, path } = route;\n const formattedRoute = path ? tail(path.split('/')) : [];\n const [controller = '', action = ''] = title ? title.split('.') : [];\n const colors = getMethodColor(route.method);\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.BoundRoute.title',\n defaultMessage: 'Bound route to',\n })}\n &nbsp;\n <span>{controller}</span>\n <Typography variant=\"delta\" textColor=\"primary600\">\n .{action}\n </Typography>\n </Typography>\n <Flex hasRadius background=\"neutral0\" borderColor=\"neutral200\" gap={0}>\n <MethodBox background={colors.background} borderColor={colors.border} padding={2}>\n <Typography fontWeight=\"bold\" textColor={colors.text}>\n {method}\n </Typography>\n </MethodBox>\n <Box paddingLeft={2} paddingRight={2}>\n {map(formattedRoute, (value) => (\n <Typography key={value} textColor={value.includes(':') ? 'neutral600' : 'neutral900'}>\n /{value}\n </Typography>\n ))}\n </Box>\n </Flex>\n </Flex>\n );\n};\n","import { Flex, GridItem, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useApiTokenPermissions } from '../apiTokenPermissions';\n\nimport { BoundRoute } from './BoundRoute';\n\nexport const ActionBoundRoutes = () => {\n const {\n value: { selectedAction, routes },\n } = useApiTokenPermissions();\n const { formatMessage } = useIntl();\n const actionSection = selectedAction?.split('.')[0];\n\n return (\n <GridItem\n col={5}\n background=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n style={{ minHeight: '100%' }}\n >\n {selectedAction ? (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {actionSection &&\n actionSection in routes &&\n routes[actionSection].map((route) => {\n return route.config.auth?.scope?.includes(selectedAction) ||\n route.handler === selectedAction ? (\n <BoundRoute key={route.handler} route={route} />\n ) : null;\n })}\n </Flex>\n ) : (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.header.title',\n defaultMessage: 'Advanced settings',\n })}\n </Typography>\n <Typography as=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.header.hint',\n defaultMessage:\n \"Select the application's actions or the plugin's actions and click on the cog icon to display the bound route\",\n })}\n </Typography>\n </Flex>\n )}\n </GridItem>\n );\n};\n","import * as React from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Checkbox,\n Flex,\n Grid,\n GridItem,\n Typography,\n} from '@strapi/design-system';\nimport { Cog } from '@strapi/icons';\nimport capitalize from 'lodash/capitalize';\nimport { useIntl } from 'react-intl';\nimport styled, { css } from 'styled-components';\n\nimport { ContentApiPermission } from '../../../../../../../../shared/contracts/content-api/permissions';\nimport { useApiTokenPermissions } from '../apiTokenPermissions';\n\nconst activeCheckboxWrapperStyles = css`\n background: ${(props) => props.theme.colors.primary100};\n svg {\n opacity: 1;\n }\n`;\n\nconst CheckboxWrapper = styled(Box)<{ isActive: boolean }>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n svg {\n opacity: 0;\n path {\n fill: ${(props) => props.theme.colors.primary600};\n }\n }\n\n /* Show active style both on hover and when the action is selected */\n ${(props) => props.isActive && activeCheckboxWrapperStyles}\n &:hover {\n ${activeCheckboxWrapperStyles}\n }\n`;\n\nconst Border = styled.div`\n flex: 1;\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\ninterface CollapsableContentTypeProps {\n controllers?: ContentApiPermission['controllers'];\n label: ContentApiPermission['label'];\n orderNumber?: number;\n disabled?: boolean;\n onExpanded?: (orderNumber: number) => void;\n indexExpandendCollapsedContent: number | null;\n}\n\nexport const CollapsableContentType = ({\n controllers = [],\n label,\n orderNumber = 0,\n disabled = false,\n onExpanded = () => null,\n indexExpandendCollapsedContent = null,\n}: CollapsableContentTypeProps) => {\n const {\n value: { onChangeSelectAll, onChange, selectedActions, setSelectedAction, selectedAction },\n } = useApiTokenPermissions();\n const [expanded, setExpanded] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const handleExpandedAccordion = () => {\n setExpanded((s) => !s);\n onExpanded(orderNumber);\n };\n\n React.useEffect(() => {\n if (\n indexExpandendCollapsedContent !== null &&\n indexExpandendCollapsedContent !== orderNumber &&\n expanded\n ) {\n setExpanded(false);\n }\n }, [indexExpandendCollapsedContent, orderNumber, expanded]);\n\n const isActionSelected = (actionId: string) => actionId === selectedAction;\n\n return (\n <Accordion\n expanded={expanded}\n onToggle={handleExpandedAccordion}\n variant={orderNumber % 2 ? 'primary' : 'secondary'}\n >\n <AccordionToggle title={capitalize(label)} />\n <AccordionContent>\n {controllers?.map((controller) => {\n const allActionsSelected = controller.actions.every((action) =>\n selectedActions.includes(action.actionId)\n );\n\n const someActionsSelected = controller.actions.some((action) =>\n selectedActions.includes(action.actionId)\n );\n\n return (\n <Box key={`${label}.${controller?.controller}`}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\" padding={4}>\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {controller?.controller}\n </Typography>\n </Box>\n <Border />\n <Box paddingLeft={4}>\n <Checkbox\n value={allActionsSelected}\n indeterminate={!allActionsSelected && someActionsSelected}\n onValueChange={() => {\n onChangeSelectAll({ target: { value: [...controller.actions] } });\n }}\n disabled={disabled}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Grid gap={4} padding={4}>\n {controller?.actions &&\n controller?.actions.map((action) => {\n return (\n <GridItem col={6} key={action.actionId}>\n <CheckboxWrapper\n isActive={isActionSelected(action.actionId)}\n padding={2}\n hasRadius\n >\n <Checkbox\n value={selectedActions.includes(action.actionId)}\n name={action.actionId}\n onValueChange={() => {\n onChange({ target: { value: action.actionId } });\n }}\n disabled={disabled}\n >\n {action.action}\n </Checkbox>\n <button\n type=\"button\"\n data-testid=\"action-cog\"\n onClick={() =>\n setSelectedAction({ target: { value: action.actionId } })\n }\n style={{ display: 'inline-flex', alignItems: 'center' }}\n >\n <Cog />\n </button>\n </CheckboxWrapper>\n </GridItem>\n );\n })}\n </Grid>\n </Box>\n );\n })}\n </AccordionContent>\n </Accordion>\n );\n};\n","import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\n\nimport { ContentApiPermission } from '../../../../../../../../shared/contracts/content-api/permissions';\n\nimport { CollapsableContentType } from './CollabsableContentType';\n\ninterface ContentTypesSectionProps {\n section: ContentApiPermission[] | null;\n}\n\nexport const ContentTypesSection = ({ section = null, ...props }: ContentTypesSectionProps) => {\n const [indexExpandedCollpsedContent, setIndexExpandedCollpsedContent] = React.useState<\n null | number\n >(null);\n const handleExpandedCollpsedContentIndex = (index: number) =>\n setIndexExpandedCollpsedContent(index);\n\n return (\n <Box padding={4} background=\"neutral0\">\n {section &&\n section.map((api, index) => (\n <CollapsableContentType\n key={api.apiId}\n label={api.label}\n controllers={api.controllers}\n orderNumber={index}\n indexExpandendCollapsedContent={indexExpandedCollpsedContent}\n onExpanded={handleExpandedCollpsedContentIndex}\n {...props}\n />\n ))}\n </Box>\n );\n};\n","import { Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useApiTokenPermissions } from '../apiTokenPermissions';\n\nimport { ActionBoundRoutes } from './ActionBoundRoutes';\nimport { ContentTypesSection } from './ContentTypesSection';\n\nexport const Permissions = ({ ...props }) => {\n const {\n value: { data },\n } = useApiTokenPermissions();\n const { formatMessage } = useIntl();\n\n return (\n <Grid gap={0} shadow=\"filterShadow\" hasRadius background=\"neutral0\">\n <GridItem col={7} paddingTop={6} paddingBottom={6} paddingLeft={7} paddingRight={7}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.title',\n defaultMessage: 'Permissions',\n })}\n </Typography>\n <Typography as=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.description',\n defaultMessage: 'Only actions bound by a route are listed below.',\n })}\n </Typography>\n </Flex>\n {data?.permissions && <ContentTypesSection section={data?.permissions} {...props} />}\n </GridItem>\n <ActionBoundRoutes />\n </Grid>\n );\n};\n","import { translatedErrors } from '@strapi/helper-plugin';\nimport * as yup from 'yup';\n\nexport const schema = yup.object().shape({\n name: yup.string().max(100).required(translatedErrors.required),\n type: yup\n .string()\n .oneOf(['read-only', 'full-access', 'custom'])\n .required(translatedErrors.required),\n description: yup.string().nullable(),\n lifespan: yup.number().integer().min(0).nullable().defined(translatedErrors.required),\n});\n","import { ContentApiPermission } from '../../../../../../../../shared/contracts/content-api/permissions';\n\ninterface Layout {\n allActionsIds: string[];\n permissions: {\n apiId: string;\n label: string;\n controllers: { controller: string; actions: { action: string; actionId: string }[] }[];\n }[];\n}\n\nexport const transformPermissionsData = (data: ContentApiPermission) => {\n const layout: Layout = {\n allActionsIds: [],\n permissions: [],\n };\n\n layout.permissions = Object.entries(data).map(([apiId, permission]) => ({\n apiId,\n label: apiId.split('::')[1],\n controllers: Object.keys(permission.controllers)\n .map((controller) => ({\n controller,\n actions:\n controller in permission.controllers\n ? permission.controllers[controller]\n .map((action: ContentApiPermission['controllers']) => {\n const actionId = `${apiId}.${controller}.${action}`;\n\n if (apiId.includes('api::')) {\n layout.allActionsIds.push(actionId);\n }\n\n return {\n action,\n actionId,\n };\n })\n .flat()\n : [],\n }))\n .flat(),\n }));\n\n return layout;\n};\n","/* eslint-disable consistent-return */\nimport produce from 'immer';\nimport pull from 'lodash/pull';\n\nimport { ContentApiPermission } from '../../../../../../../shared/contracts/content-api/permissions';\n\nimport { ApiTokenPermissionsContextValue } from './apiTokenPermissions';\nimport { transformPermissionsData } from './utils/transformPermissionsData';\n\ntype InitialState = Pick<\n ApiTokenPermissionsContextValue['value'],\n 'data' | 'routes' | 'selectedAction' | 'selectedActions'\n>;\n\ninterface ActionOnChange {\n type: 'ON_CHANGE';\n value: string;\n}\n\ninterface ActionSelectAllInPermission {\n type: 'SELECT_ALL_IN_PERMISSION';\n value: { action: string; actionId: string }[];\n}\n\ninterface ActionSelectAllActions {\n type: 'SELECT_ALL_ACTIONS';\n}\n\ninterface ActionOnChangeReadOnly {\n type: 'ON_CHANGE_READ_ONLY';\n}\n\ninterface ActionUpdatePermissionsLayout {\n type: 'UPDATE_PERMISSIONS_LAYOUT';\n value: ContentApiPermission;\n}\n\ninterface ActionUpdateRoutes {\n type: 'UPDATE_ROUTES';\n value: ApiTokenPermissionsContextValue['value']['routes'] | undefined;\n}\n\ninterface ActionUpdatePermissions {\n type: 'UPDATE_PERMISSIONS';\n value: any[];\n}\n\ninterface ActionSetSelectedAction {\n type: 'SET_SELECTED_ACTION';\n value: string;\n}\n\ntype Action =\n | ActionOnChange\n | ActionSelectAllInPermission\n | ActionSelectAllActions\n | ActionOnChangeReadOnly\n | ActionUpdatePermissionsLayout\n | ActionUpdateRoutes\n | ActionUpdatePermissions\n | ActionSetSelectedAction;\n\nexport const initialState: InitialState = {\n data: {\n allActionsIds: [],\n permissions: [],\n },\n routes: {},\n selectedAction: '',\n selectedActions: [],\n};\n\nexport const reducer = (state: InitialState, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE': {\n if (draftState.selectedActions.includes(action.value)) {\n pull(draftState.selectedActions, action.value);\n } else {\n draftState.selectedActions.push(action.value);\n }\n break;\n }\n case 'SELECT_ALL_IN_PERMISSION': {\n const areAllSelected = action.value.every((item) =>\n draftState.selectedActions.includes(item.actionId)\n );\n\n if (areAllSelected) {\n action.value.forEach((item) => {\n pull(draftState.selectedActions, item.actionId);\n });\n } else {\n action.value.forEach((item) => {\n draftState.selectedActions.push(item.actionId);\n });\n }\n break;\n }\n\n case 'SELECT_ALL_ACTIONS': {\n draftState.selectedActions = [...draftState.data.allActionsIds];\n\n break;\n }\n case 'ON_CHANGE_READ_ONLY': {\n const onlyReadOnlyActions = draftState.data.allActionsIds.filter(\n (actionId) => actionId.includes('find') || actionId.includes('findOne')\n );\n draftState.selectedActions = [...onlyReadOnlyActions];\n break;\n }\n case 'UPDATE_PERMISSIONS_LAYOUT': {\n draftState.data = transformPermissionsData(action.value);\n break;\n }\n case 'UPDATE_ROUTES': {\n draftState.routes = { ...action.value };\n break;\n }\n case 'UPDATE_PERMISSIONS': {\n draftState.selectedActions = [...action.value];\n break;\n }\n case 'SET_SELECTED_ACTION': {\n draftState.selectedAction = action.value;\n break;\n }\n default:\n return draftState;\n }\n });\n","import * as React from 'react';\n\nimport { ContentLayout, Flex, Main } from '@strapi/design-system';\nimport {\n CheckPagePermissions,\n Form,\n SettingsPageTitle,\n useAPIErrorHandler,\n useFocusWhenNavigate,\n useGuidedTour,\n useNotification,\n useOverlayBlocker,\n useRBAC,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useHistory, useRouteMatch } from 'react-router-dom';\n\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport {\n useCreateAPITokenMutation,\n useGetAPITokenQuery,\n useUpdateAPITokenMutation,\n} from '../../../../../services/apiTokens';\nimport { useGetPermissionsQuery, useGetRoutesQuery } from '../../../../../services/contentApi';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { API_TOKEN_TYPE } from '../../../components/Tokens/constants';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { TokenBox } from '../../../components/Tokens/TokenBox';\n\nimport {\n ApiTokenPermissionsContextValue,\n ApiTokenPermissionsProvider,\n} from './apiTokenPermissions';\nimport { FormApiTokenContainer } from './components/FormApiTokenContainer';\nimport { LoadingView } from './components/LoadingView';\nimport { Permissions } from './components/Permissions';\nimport { schema } from './constants';\nimport { initialState, reducer } from './reducer';\n\nimport type { Get, ApiToken } from '../../../../../../../shared/contracts/api-token';\n\n/**\n * TODO: this could definitely be refactored to avoid using redux and instead just use the\n * server response as the source of the truth for the data.\n */\nexport const EditView = () => {\n useFocusWhenNavigate();\n const { formatMessage } = useIntl();\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { state: locationState } = useLocation<{ apiToken: ApiToken }>();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ApiToken | null>(\n locationState?.apiToken?.accessKey\n ? {\n ...locationState.apiToken,\n }\n : null\n );\n const { trackUsage } = useTracking();\n const { setCurrentStep } = useGuidedTour();\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['api-tokens']);\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const match = useRouteMatch<{ id: string }>('/settings/api-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidtionErrors,\n } = useAPIErrorHandler();\n\n const history = useHistory();\n\n const contentAPIPermissionsQuery = useGetPermissionsQuery();\n const contentAPIRoutesQuery = useGetRoutesQuery();\n\n /**\n * Separate effects otherwise we could end\n * up duplicating the same notification.\n */\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(contentAPIPermissionsQuery.error),\n });\n }\n }, [contentAPIPermissionsQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(contentAPIRoutesQuery.error),\n });\n }\n }, [contentAPIRoutesQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.data) {\n dispatch({\n type: 'UPDATE_PERMISSIONS_LAYOUT',\n value: contentAPIPermissionsQuery.data,\n });\n }\n }, [contentAPIPermissionsQuery.data]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.data) {\n dispatch({\n type: 'UPDATE_ROUTES',\n value: contentAPIRoutesQuery.data,\n });\n }\n }, [contentAPIRoutesQuery.data]);\n\n React.useEffect(() => {\n if (apiToken) {\n if (apiToken.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (apiToken.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (apiToken.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: apiToken?.permissions,\n });\n }\n }\n }, [apiToken]);\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAPITokenQuery(id!, {\n skip: !id || isCreating || !!apiToken,\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (data) {\n setApiToken(data);\n\n if (data.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (data.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (data.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: data?.permissions,\n });\n }\n }\n }, [data]);\n\n const [createToken] = useCreateAPITokenMutation();\n const [updateToken] = useUpdateAPITokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n type: Get.Response['data']['type'] | undefined;\n }\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n // @ts-expect-error context assertation\n lockApp();\n\n try {\n if (isCreating) {\n const res = await createToken({\n ...body,\n // in case a token has a lifespan of \"unlimited\" the API only accepts zero as a number\n lifespan: body.lifespan === '0' ? parseInt(body.lifespan) : null,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokencreated',\n defaultMessage: 'API Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n\n history.replace(`/settings/api-tokens/${res.data.id}`, { apiToken: res.data });\n setCurrentStep('apiTokens.success');\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n type: body.type,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokenedited',\n defaultMessage: 'API Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n }\n } catch {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n },\n });\n } finally {\n // @ts-expect-error context assertation\n unlockApp();\n }\n };\n\n const [hasChangedPermissions, setHasChangedPermissions] = React.useState(false);\n\n const handleChangeCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChange']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'ON_CHANGE',\n value,\n });\n };\n\n const handleChangeSelectAllCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChangeSelectAll']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'SELECT_ALL_IN_PERMISSION',\n value,\n });\n };\n\n const setSelectedAction = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['setSelectedAction']>[0]) => {\n dispatch({\n type: 'SET_SELECTED_ACTION',\n value,\n });\n };\n\n const providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n\n if (isLoading) {\n return <LoadingView apiTokenName={apiToken?.name} />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Main>\n <SettingsPageTitle name=\"API Tokens\" />\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: apiToken?.type,\n lifespan: apiToken?.lifespan ? apiToken.lifespan.toString() : apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values, setFieldValue }) => {\n if (hasChangedPermissions && values?.type !== 'custom') {\n setFieldValue('type', 'custom');\n }\n\n return (\n <Form>\n <FormHead\n backUrl=\"/settings/api-tokens\"\n title={{\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }}\n token={apiToken}\n setToken={setApiToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {Boolean(apiToken?.name) && (\n <TokenBox token={apiToken?.accessKey} tokenType={API_TOKEN_TYPE} />\n )}\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </ContentLayout>\n </Form>\n );\n }}\n </Formik>\n </Main>\n </ApiTokenPermissionsProvider>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].read\n );\n\n return (\n <CheckPagePermissions permissions={permissions}>\n <EditView />\n </CheckPagePermissions>\n );\n};\n"],"names":["state"],"mappings":"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"}
1
+ {"version":3,"file":"EditViewPage-7rQGA5pS.mjs","sources":["../../admin/src/services/contentApi.ts","../../admin/src/pages/Settings/pages/ApiTokens/EditView/apiTokenPermissions.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/LoadingView.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/ActionBoundRoutes.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollabsableContentType.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/ContentTypesSection.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/Permissions.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/constants.ts","../../admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.ts","../../admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.ts","../../admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import { adminApi } from './api';\n\nimport type { List as ListContentApiPermissions } from '../../../shared/contracts/content-api/permissions';\nimport type { List as ListContentApiRoutes } from '../../../shared/contracts/content-api/routes';\n\nconst contentApiService = adminApi.injectEndpoints({\n endpoints: (builder) => ({\n getPermissions: builder.query<ListContentApiPermissions.Response['data'], void>({\n query: () => '/admin/content-api/permissions',\n transformResponse: (response: ListContentApiPermissions.Response) => response.data,\n }),\n getRoutes: builder.query<ListContentApiRoutes.Response['data'], void>({\n query: () => '/admin/content-api/routes',\n transformResponse: (response: ListContentApiRoutes.Response) => response.data,\n }),\n }),\n overrideExisting: false,\n});\n\nconst { useGetPermissionsQuery, useGetRoutesQuery } = contentApiService;\n\nexport { useGetPermissionsQuery, useGetRoutesQuery };\n","/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\n\nimport { List as ListContentApiPermissions } from '../../../../../../../shared/contracts/content-api/permissions';\nimport { List as ListContentApiRoutes } from '../../../../../../../shared/contracts/content-api/routes';\n\nexport interface PseudoEvent {\n target: { value: string };\n}\n\ninterface ApiTokenPermissionsContextValue {\n value: {\n selectedAction: string | null;\n routes: ListContentApiRoutes.Response['data'];\n selectedActions: string[];\n data: {\n allActionsIds: string[];\n permissions: ListContentApiPermissions.Response['data'][];\n };\n onChange: ({ target: { value } }: PseudoEvent) => void;\n onChangeSelectAll: ({\n target: { value },\n }: {\n target: { value: { action: string; actionId: string }[] };\n }) => void;\n setSelectedAction: ({ target: { value } }: PseudoEvent) => void;\n };\n}\n\ninterface ApiTokenPermissionsContextProviderProps extends ApiTokenPermissionsContextValue {\n children: React.ReactNode | React.ReactNode[];\n}\n\nconst [ApiTokenPermissionsContextProvider, useApiTokenPermissionsContext] =\n createContext<ApiTokenPermissionsContextValue>('ApiTokenPermissionsContext');\n\nconst ApiTokenPermissionsProvider = ({\n children,\n ...rest\n}: ApiTokenPermissionsContextProviderProps) => {\n return (\n <ApiTokenPermissionsContextProvider {...rest}>{children}</ApiTokenPermissionsContextProvider>\n );\n};\n\nconst useApiTokenPermissions = () => useApiTokenPermissionsContext('useApiTokenPermissions');\n\nexport { ApiTokenPermissionsProvider, useApiTokenPermissions };\nexport type { ApiTokenPermissionsContextValue, ApiTokenPermissionsContextProviderProps };\n","import * as React from 'react';\n\nimport { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { FormikErrors } from 'formik';\nimport { useIntl } from 'react-intl';\n\nimport { LifeSpanInput } from '../../../../components/Tokens/LifeSpanInput';\nimport { TokenDescription } from '../../../../components/Tokens/TokenDescription';\nimport { TokenName } from '../../../../components/Tokens/TokenName';\nimport { TokenTypeSelect } from '../../../../components/Tokens/TokenTypeSelect';\n\nimport type { ApiToken } from '../../../../../../../../shared/contracts/api-token';\n\ninterface FormApiTokenContainerProps {\n errors?: FormikErrors<Pick<ApiToken, 'name' | 'description' | 'lifespan' | 'type'>>;\n onChange: ({ target: { name, value } }: { target: { name: string; value: string } }) => void;\n canEditInputs: boolean;\n values?: Partial<Pick<ApiToken, 'name' | 'description' | 'lifespan' | 'type'>>;\n isCreating: boolean;\n apiToken?: null | Partial<ApiToken>;\n onDispatch: React.Dispatch<any>;\n setHasChangedPermissions: (hasChanged: boolean) => void;\n}\n\nexport const FormApiTokenContainer = ({\n errors = {},\n onChange,\n canEditInputs,\n isCreating,\n values = {},\n apiToken = {},\n onDispatch,\n setHasChangedPermissions,\n}: FormApiTokenContainerProps) => {\n const { formatMessage } = useIntl();\n\n const handleChangeSelectApiTokenType = ({ target: { value } }: { target: { value: string } }) => {\n setHasChangedPermissions(false);\n\n if (value === 'full-access') {\n onDispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (value === 'read-only') {\n onDispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n };\n\n const typeOptions = [\n {\n value: 'read-only',\n label: {\n id: 'Settings.tokens.types.read-only',\n defaultMessage: 'Read-only',\n },\n },\n {\n value: 'full-access',\n label: {\n id: 'Settings.tokens.types.full-access',\n defaultMessage: 'Full access',\n },\n },\n {\n value: 'custom',\n label: {\n id: 'Settings.tokens.types.custom',\n defaultMessage: 'Custom',\n },\n },\n ];\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem key=\"name\" col={6} xs={12}>\n <TokenName\n error={errors['name']}\n value={values['name']}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </GridItem>\n <GridItem key=\"description\" col={6} xs={12}>\n <TokenDescription\n error={errors['description']}\n value={values['description']}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </GridItem>\n <GridItem key=\"lifespan\" col={6} xs={12}>\n <LifeSpanInput\n isCreating={isCreating}\n error={errors['lifespan']}\n value={values['lifespan']}\n onChange={onChange}\n token={apiToken}\n />\n </GridItem>\n\n <GridItem key=\"type\" col={6} xs={12}>\n <TokenTypeSelect\n value={values['type']}\n error={errors['type']}\n label={{\n id: 'Settings.tokens.form.type',\n defaultMessage: 'Token type',\n }}\n onChange={(value) => {\n // @ts-expect-error – DS Select supports numbers & strings, will be removed in V2\n handleChangeSelectApiTokenType({ target: { value } });\n\n // @ts-expect-error – DS Select supports numbers & strings, will be removed in V2\n onChange({ target: { name: 'type', value } });\n }}\n options={typeOptions}\n canEditInputs={canEditInputs}\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n","import { Button, ContentLayout, HeaderLayout, Main } from '@strapi/design-system';\nimport {\n LoadingIndicatorPage,\n SettingsPageTitle,\n useFocusWhenNavigate,\n} from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\ninterface LoadingViewProps {\n apiTokenName?: string | null;\n}\n\nexport const LoadingView = ({ apiTokenName = null }: LoadingViewProps) => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main aria-busy=\"true\">\n <SettingsPageTitle name=\"API Tokens\" />\n <HeaderLayout\n primaryAction={\n <Button disabled startIcon={<Check />} type=\"button\" size=\"L\">\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n title={\n apiTokenName ||\n formatMessage({\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n })\n }\n />\n <ContentLayout>\n <LoadingIndicatorPage />\n </ContentLayout>\n </Main>\n );\n};\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport map from 'lodash/map';\nimport tail from 'lodash/tail';\nimport { useIntl } from 'react-intl';\nimport styled, { DefaultTheme } from 'styled-components';\n\ntype HttpVerb = 'POST' | 'GET' | 'PUT' | 'DELETE';\n\ntype MethodColor = {\n text: keyof DefaultTheme['colors'];\n border: keyof DefaultTheme['colors'];\n background: keyof DefaultTheme['colors'];\n};\n\nconst getMethodColor = (verb: HttpVerb): MethodColor => {\n switch (verb) {\n case 'POST': {\n return {\n text: 'success600',\n border: 'success200',\n background: 'success100',\n };\n }\n case 'GET': {\n return {\n text: 'secondary600',\n border: 'secondary200',\n background: 'secondary100',\n };\n }\n case 'PUT': {\n return {\n text: 'warning600',\n border: 'warning200',\n background: 'warning100',\n };\n }\n case 'DELETE': {\n return {\n text: 'danger600',\n border: 'danger200',\n background: 'danger100',\n };\n }\n default: {\n return {\n text: 'neutral600',\n border: 'neutral200',\n background: 'neutral100',\n };\n }\n }\n};\n\nconst MethodBox = styled(Box)`\n margin: -1px;\n border-radius: ${({ theme }) => theme.spaces[1]} 0 0 ${({ theme }) => theme.spaces[1]};\n`;\n\ninterface BoundRouteProps {\n route: {\n handler: string;\n method: HttpVerb;\n path: string;\n };\n}\n\nexport const BoundRoute = ({\n route = {\n handler: 'Nocontroller.error',\n method: 'GET',\n path: '/there-is-no-path',\n },\n}: BoundRouteProps) => {\n const { formatMessage } = useIntl();\n\n const { method, handler: title, path } = route;\n const formattedRoute = path ? tail(path.split('/')) : [];\n const [controller = '', action = ''] = title ? title.split('.') : [];\n const colors = getMethodColor(route.method);\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.BoundRoute.title',\n defaultMessage: 'Bound route to',\n })}\n &nbsp;\n <span>{controller}</span>\n <Typography variant=\"delta\" textColor=\"primary600\">\n .{action}\n </Typography>\n </Typography>\n <Flex hasRadius background=\"neutral0\" borderColor=\"neutral200\" gap={0}>\n <MethodBox background={colors.background} borderColor={colors.border} padding={2}>\n <Typography fontWeight=\"bold\" textColor={colors.text}>\n {method}\n </Typography>\n </MethodBox>\n <Box paddingLeft={2} paddingRight={2}>\n {map(formattedRoute, (value) => (\n <Typography key={value} textColor={value.includes(':') ? 'neutral600' : 'neutral900'}>\n /{value}\n </Typography>\n ))}\n </Box>\n </Flex>\n </Flex>\n );\n};\n","import { Flex, GridItem, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useApiTokenPermissions } from '../apiTokenPermissions';\n\nimport { BoundRoute } from './BoundRoute';\n\nexport const ActionBoundRoutes = () => {\n const {\n value: { selectedAction, routes },\n } = useApiTokenPermissions();\n const { formatMessage } = useIntl();\n const actionSection = selectedAction?.split('.')[0];\n\n return (\n <GridItem\n col={5}\n background=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n style={{ minHeight: '100%' }}\n >\n {selectedAction ? (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {actionSection &&\n actionSection in routes &&\n routes[actionSection].map((route) => {\n return route.config.auth?.scope?.includes(selectedAction) ||\n route.handler === selectedAction ? (\n <BoundRoute key={route.handler} route={route} />\n ) : null;\n })}\n </Flex>\n ) : (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.header.title',\n defaultMessage: 'Advanced settings',\n })}\n </Typography>\n <Typography as=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.header.hint',\n defaultMessage:\n \"Select the application's actions or the plugin's actions and click on the cog icon to display the bound route\",\n })}\n </Typography>\n </Flex>\n )}\n </GridItem>\n );\n};\n","import * as React from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Checkbox,\n Flex,\n Grid,\n GridItem,\n Typography,\n} from '@strapi/design-system';\nimport { Cog } from '@strapi/icons';\nimport capitalize from 'lodash/capitalize';\nimport { useIntl } from 'react-intl';\nimport styled, { css } from 'styled-components';\n\nimport { ContentApiPermission } from '../../../../../../../../shared/contracts/content-api/permissions';\nimport { useApiTokenPermissions } from '../apiTokenPermissions';\n\nconst activeCheckboxWrapperStyles = css`\n background: ${(props) => props.theme.colors.primary100};\n svg {\n opacity: 1;\n }\n`;\n\nconst CheckboxWrapper = styled(Box)<{ isActive: boolean }>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n svg {\n opacity: 0;\n path {\n fill: ${(props) => props.theme.colors.primary600};\n }\n }\n\n /* Show active style both on hover and when the action is selected */\n ${(props) => props.isActive && activeCheckboxWrapperStyles}\n &:hover {\n ${activeCheckboxWrapperStyles}\n }\n`;\n\nconst Border = styled.div`\n flex: 1;\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\ninterface CollapsableContentTypeProps {\n controllers?: ContentApiPermission['controllers'];\n label: ContentApiPermission['label'];\n orderNumber?: number;\n disabled?: boolean;\n onExpanded?: (orderNumber: number) => void;\n indexExpandendCollapsedContent: number | null;\n}\n\nexport const CollapsableContentType = ({\n controllers = [],\n label,\n orderNumber = 0,\n disabled = false,\n onExpanded = () => null,\n indexExpandendCollapsedContent = null,\n}: CollapsableContentTypeProps) => {\n const {\n value: { onChangeSelectAll, onChange, selectedActions, setSelectedAction, selectedAction },\n } = useApiTokenPermissions();\n const [expanded, setExpanded] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const handleExpandedAccordion = () => {\n setExpanded((s) => !s);\n onExpanded(orderNumber);\n };\n\n React.useEffect(() => {\n if (\n indexExpandendCollapsedContent !== null &&\n indexExpandendCollapsedContent !== orderNumber &&\n expanded\n ) {\n setExpanded(false);\n }\n }, [indexExpandendCollapsedContent, orderNumber, expanded]);\n\n const isActionSelected = (actionId: string) => actionId === selectedAction;\n\n return (\n <Accordion\n expanded={expanded}\n onToggle={handleExpandedAccordion}\n variant={orderNumber % 2 ? 'primary' : 'secondary'}\n >\n <AccordionToggle title={capitalize(label)} />\n <AccordionContent>\n {controllers?.map((controller) => {\n const allActionsSelected = controller.actions.every((action) =>\n selectedActions.includes(action.actionId)\n );\n\n const someActionsSelected = controller.actions.some((action) =>\n selectedActions.includes(action.actionId)\n );\n\n return (\n <Box key={`${label}.${controller?.controller}`}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\" padding={4}>\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {controller?.controller}\n </Typography>\n </Box>\n <Border />\n <Box paddingLeft={4}>\n <Checkbox\n value={allActionsSelected}\n indeterminate={!allActionsSelected && someActionsSelected}\n onValueChange={() => {\n onChangeSelectAll({ target: { value: [...controller.actions] } });\n }}\n disabled={disabled}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Grid gap={4} padding={4}>\n {controller?.actions &&\n controller?.actions.map((action) => {\n return (\n <GridItem col={6} key={action.actionId}>\n <CheckboxWrapper\n isActive={isActionSelected(action.actionId)}\n padding={2}\n hasRadius\n >\n <Checkbox\n value={selectedActions.includes(action.actionId)}\n name={action.actionId}\n onValueChange={() => {\n onChange({ target: { value: action.actionId } });\n }}\n disabled={disabled}\n >\n {action.action}\n </Checkbox>\n <button\n type=\"button\"\n data-testid=\"action-cog\"\n onClick={() =>\n setSelectedAction({ target: { value: action.actionId } })\n }\n style={{ display: 'inline-flex', alignItems: 'center' }}\n >\n <Cog />\n </button>\n </CheckboxWrapper>\n </GridItem>\n );\n })}\n </Grid>\n </Box>\n );\n })}\n </AccordionContent>\n </Accordion>\n );\n};\n","import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\n\nimport { ContentApiPermission } from '../../../../../../../../shared/contracts/content-api/permissions';\n\nimport { CollapsableContentType } from './CollabsableContentType';\n\ninterface ContentTypesSectionProps {\n section: ContentApiPermission[] | null;\n}\n\nexport const ContentTypesSection = ({ section = null, ...props }: ContentTypesSectionProps) => {\n const [indexExpandedCollpsedContent, setIndexExpandedCollpsedContent] = React.useState<\n null | number\n >(null);\n const handleExpandedCollpsedContentIndex = (index: number) =>\n setIndexExpandedCollpsedContent(index);\n\n return (\n <Box padding={4} background=\"neutral0\">\n {section &&\n section.map((api, index) => (\n <CollapsableContentType\n key={api.apiId}\n label={api.label}\n controllers={api.controllers}\n orderNumber={index}\n indexExpandendCollapsedContent={indexExpandedCollpsedContent}\n onExpanded={handleExpandedCollpsedContentIndex}\n {...props}\n />\n ))}\n </Box>\n );\n};\n","import { Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useApiTokenPermissions } from '../apiTokenPermissions';\n\nimport { ActionBoundRoutes } from './ActionBoundRoutes';\nimport { ContentTypesSection } from './ContentTypesSection';\n\nexport const Permissions = ({ ...props }) => {\n const {\n value: { data },\n } = useApiTokenPermissions();\n const { formatMessage } = useIntl();\n\n return (\n <Grid gap={0} shadow=\"filterShadow\" hasRadius background=\"neutral0\">\n <GridItem col={7} paddingTop={6} paddingBottom={6} paddingLeft={7} paddingRight={7}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.title',\n defaultMessage: 'Permissions',\n })}\n </Typography>\n <Typography as=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.description',\n defaultMessage: 'Only actions bound by a route are listed below.',\n })}\n </Typography>\n </Flex>\n {data?.permissions && <ContentTypesSection section={data?.permissions} {...props} />}\n </GridItem>\n <ActionBoundRoutes />\n </Grid>\n );\n};\n","import { translatedErrors } from '@strapi/helper-plugin';\nimport * as yup from 'yup';\n\nexport const schema = yup.object().shape({\n name: yup.string().max(100).required(translatedErrors.required),\n type: yup\n .string()\n .oneOf(['read-only', 'full-access', 'custom'])\n .required(translatedErrors.required),\n description: yup.string().nullable(),\n lifespan: yup.number().integer().min(0).nullable().defined(translatedErrors.required),\n});\n","import { ContentApiPermission } from '../../../../../../../../shared/contracts/content-api/permissions';\n\ninterface Layout {\n allActionsIds: string[];\n permissions: {\n apiId: string;\n label: string;\n controllers: { controller: string; actions: { action: string; actionId: string }[] }[];\n }[];\n}\n\nexport const transformPermissionsData = (data: ContentApiPermission) => {\n const layout: Layout = {\n allActionsIds: [],\n permissions: [],\n };\n\n layout.permissions = Object.entries(data).map(([apiId, permission]) => ({\n apiId,\n label: apiId.split('::')[1],\n controllers: Object.keys(permission.controllers)\n .map((controller) => ({\n controller,\n actions:\n controller in permission.controllers\n ? permission.controllers[controller]\n .map((action: ContentApiPermission['controllers']) => {\n const actionId = `${apiId}.${controller}.${action}`;\n\n if (apiId.includes('api::')) {\n layout.allActionsIds.push(actionId);\n }\n\n return {\n action,\n actionId,\n };\n })\n .flat()\n : [],\n }))\n .flat(),\n }));\n\n return layout;\n};\n","/* eslint-disable consistent-return */\nimport produce from 'immer';\nimport pull from 'lodash/pull';\n\nimport { ContentApiPermission } from '../../../../../../../shared/contracts/content-api/permissions';\n\nimport { ApiTokenPermissionsContextValue } from './apiTokenPermissions';\nimport { transformPermissionsData } from './utils/transformPermissionsData';\n\ntype InitialState = Pick<\n ApiTokenPermissionsContextValue['value'],\n 'data' | 'routes' | 'selectedAction' | 'selectedActions'\n>;\n\ninterface ActionOnChange {\n type: 'ON_CHANGE';\n value: string;\n}\n\ninterface ActionSelectAllInPermission {\n type: 'SELECT_ALL_IN_PERMISSION';\n value: { action: string; actionId: string }[];\n}\n\ninterface ActionSelectAllActions {\n type: 'SELECT_ALL_ACTIONS';\n}\n\ninterface ActionOnChangeReadOnly {\n type: 'ON_CHANGE_READ_ONLY';\n}\n\ninterface ActionUpdatePermissionsLayout {\n type: 'UPDATE_PERMISSIONS_LAYOUT';\n value: ContentApiPermission;\n}\n\ninterface ActionUpdateRoutes {\n type: 'UPDATE_ROUTES';\n value: ApiTokenPermissionsContextValue['value']['routes'] | undefined;\n}\n\ninterface ActionUpdatePermissions {\n type: 'UPDATE_PERMISSIONS';\n value: any[];\n}\n\ninterface ActionSetSelectedAction {\n type: 'SET_SELECTED_ACTION';\n value: string;\n}\n\ntype Action =\n | ActionOnChange\n | ActionSelectAllInPermission\n | ActionSelectAllActions\n | ActionOnChangeReadOnly\n | ActionUpdatePermissionsLayout\n | ActionUpdateRoutes\n | ActionUpdatePermissions\n | ActionSetSelectedAction;\n\nexport const initialState: InitialState = {\n data: {\n allActionsIds: [],\n permissions: [],\n },\n routes: {},\n selectedAction: '',\n selectedActions: [],\n};\n\nexport const reducer = (state: InitialState, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE': {\n if (draftState.selectedActions.includes(action.value)) {\n pull(draftState.selectedActions, action.value);\n } else {\n draftState.selectedActions.push(action.value);\n }\n break;\n }\n case 'SELECT_ALL_IN_PERMISSION': {\n const areAllSelected = action.value.every((item) =>\n draftState.selectedActions.includes(item.actionId)\n );\n\n if (areAllSelected) {\n action.value.forEach((item) => {\n pull(draftState.selectedActions, item.actionId);\n });\n } else {\n action.value.forEach((item) => {\n draftState.selectedActions.push(item.actionId);\n });\n }\n break;\n }\n\n case 'SELECT_ALL_ACTIONS': {\n draftState.selectedActions = [...draftState.data.allActionsIds];\n\n break;\n }\n case 'ON_CHANGE_READ_ONLY': {\n const onlyReadOnlyActions = draftState.data.allActionsIds.filter(\n (actionId) => actionId.includes('find') || actionId.includes('findOne')\n );\n draftState.selectedActions = [...onlyReadOnlyActions];\n break;\n }\n case 'UPDATE_PERMISSIONS_LAYOUT': {\n draftState.data = transformPermissionsData(action.value);\n break;\n }\n case 'UPDATE_ROUTES': {\n draftState.routes = { ...action.value };\n break;\n }\n case 'UPDATE_PERMISSIONS': {\n draftState.selectedActions = [...action.value];\n break;\n }\n case 'SET_SELECTED_ACTION': {\n draftState.selectedAction = action.value;\n break;\n }\n default:\n return draftState;\n }\n });\n","import * as React from 'react';\n\nimport { ContentLayout, Flex, Main } from '@strapi/design-system';\nimport {\n CheckPagePermissions,\n Form,\n SettingsPageTitle,\n useAPIErrorHandler,\n useFocusWhenNavigate,\n useGuidedTour,\n useNotification,\n useOverlayBlocker,\n useRBAC,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useHistory, useRouteMatch } from 'react-router-dom';\n\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport {\n useCreateAPITokenMutation,\n useGetAPITokenQuery,\n useUpdateAPITokenMutation,\n} from '../../../../../services/apiTokens';\nimport { useGetPermissionsQuery, useGetRoutesQuery } from '../../../../../services/contentApi';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { API_TOKEN_TYPE } from '../../../components/Tokens/constants';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { TokenBox } from '../../../components/Tokens/TokenBox';\n\nimport {\n ApiTokenPermissionsContextValue,\n ApiTokenPermissionsProvider,\n} from './apiTokenPermissions';\nimport { FormApiTokenContainer } from './components/FormApiTokenContainer';\nimport { LoadingView } from './components/LoadingView';\nimport { Permissions } from './components/Permissions';\nimport { schema } from './constants';\nimport { initialState, reducer } from './reducer';\n\nimport type { Get, ApiToken } from '../../../../../../../shared/contracts/api-token';\n\n/**\n * TODO: this could definitely be refactored to avoid using redux and instead just use the\n * server response as the source of the truth for the data.\n */\nexport const EditView = () => {\n useFocusWhenNavigate();\n const { formatMessage } = useIntl();\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { state: locationState } = useLocation<{ apiToken: ApiToken }>();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ApiToken | null>(\n locationState?.apiToken?.accessKey\n ? {\n ...locationState.apiToken,\n }\n : null\n );\n const { trackUsage } = useTracking();\n const { setCurrentStep } = useGuidedTour();\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['api-tokens']);\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const match = useRouteMatch<{ id: string }>('/settings/api-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidtionErrors,\n } = useAPIErrorHandler();\n\n const history = useHistory();\n\n const contentAPIPermissionsQuery = useGetPermissionsQuery();\n const contentAPIRoutesQuery = useGetRoutesQuery();\n\n /**\n * Separate effects otherwise we could end\n * up duplicating the same notification.\n */\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(contentAPIPermissionsQuery.error),\n });\n }\n }, [contentAPIPermissionsQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(contentAPIRoutesQuery.error),\n });\n }\n }, [contentAPIRoutesQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.data) {\n dispatch({\n type: 'UPDATE_PERMISSIONS_LAYOUT',\n value: contentAPIPermissionsQuery.data,\n });\n }\n }, [contentAPIPermissionsQuery.data]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.data) {\n dispatch({\n type: 'UPDATE_ROUTES',\n value: contentAPIRoutesQuery.data,\n });\n }\n }, [contentAPIRoutesQuery.data]);\n\n React.useEffect(() => {\n if (apiToken) {\n if (apiToken.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (apiToken.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (apiToken.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: apiToken?.permissions,\n });\n }\n }\n }, [apiToken]);\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAPITokenQuery(id!, {\n skip: !id || isCreating || !!apiToken,\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (data) {\n setApiToken(data);\n\n if (data.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (data.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (data.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: data?.permissions,\n });\n }\n }\n }, [data]);\n\n const [createToken] = useCreateAPITokenMutation();\n const [updateToken] = useUpdateAPITokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n type: Get.Response['data']['type'] | undefined;\n }\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n // @ts-expect-error context assertation\n lockApp();\n\n try {\n if (isCreating) {\n const res = await createToken({\n ...body,\n // lifespan must be \"null\" for unlimited (0 would mean instantly expired and isn't accepted)\n lifespan: body?.lifespan || null,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokencreated',\n defaultMessage: 'API Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n\n history.replace(`/settings/api-tokens/${res.data.id}`, { apiToken: res.data });\n setCurrentStep('apiTokens.success');\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n type: body.type,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokenedited',\n defaultMessage: 'API Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n }\n } catch {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n },\n });\n } finally {\n // @ts-expect-error context assertation\n unlockApp();\n }\n };\n\n const [hasChangedPermissions, setHasChangedPermissions] = React.useState(false);\n\n const handleChangeCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChange']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'ON_CHANGE',\n value,\n });\n };\n\n const handleChangeSelectAllCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChangeSelectAll']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'SELECT_ALL_IN_PERMISSION',\n value,\n });\n };\n\n const setSelectedAction = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['setSelectedAction']>[0]) => {\n dispatch({\n type: 'SET_SELECTED_ACTION',\n value,\n });\n };\n\n const providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n\n if (isLoading) {\n return <LoadingView apiTokenName={apiToken?.name} />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Main>\n <SettingsPageTitle name=\"API Tokens\" />\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: apiToken?.type,\n lifespan: apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values, setFieldValue }) => {\n if (hasChangedPermissions && values?.type !== 'custom') {\n setFieldValue('type', 'custom');\n }\n\n return (\n <Form>\n <FormHead\n backUrl=\"/settings/api-tokens\"\n title={{\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }}\n token={apiToken}\n setToken={setApiToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {Boolean(apiToken?.name) && (\n <TokenBox token={apiToken?.accessKey} tokenType={API_TOKEN_TYPE} />\n )}\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </ContentLayout>\n </Form>\n );\n }}\n </Formik>\n </Main>\n </ApiTokenPermissionsProvider>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].read\n );\n\n return (\n <CheckPagePermissions permissions={permissions}>\n <EditView />\n </CheckPagePermissions>\n );\n};\n"],"names":["state"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAM,oBAAoB,SAAS,gBAAgB;AAAA,EACjD,WAAW,CAAC,aAAa;AAAA,IACvB,gBAAgB,QAAQ,MAAwD;AAAA,MAC9E,OAAO,MAAM;AAAA,MACb,mBAAmB,CAAC,aAAiD,SAAS;AAAA,IAAA,CAC/E;AAAA,IACD,WAAW,QAAQ,MAAmD;AAAA,MACpE,OAAO,MAAM;AAAA,MACb,mBAAmB,CAAC,aAA4C,SAAS;AAAA,IAAA,CAC1E;AAAA,EAAA;AAAA,EAEH,kBAAkB;AACpB,CAAC;AAED,MAAM,EAAE,wBAAwB,kBAAA,IAAsB;ACiBtD,MAAM,CAAC,oCAAoC,6BAA6B,IACtE,cAA+C,4BAA4B;AAE7E,MAAM,8BAA8B,CAAC;AAAA,EACnC;AAAA,EACA,GAAG;AACL,MAA+C;AAC7C,SACG,oBAAA,oCAAA,EAAoC,GAAG,MAAO,SAAS,CAAA;AAE5D;AAEA,MAAM,yBAAyB,MAAM,8BAA8B,wBAAwB;ACxBpF,MAAM,wBAAwB,CAAC;AAAA,EACpC,SAAS,CAAC;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS,CAAC;AAAA,EACV,WAAW,CAAC;AAAA,EACZ;AAAA,EACA;AACF,MAAkC;AAC1B,QAAA,EAAE,kBAAkB;AAE1B,QAAM,iCAAiC,CAAC,EAAE,QAAQ,EAAE,cAA6C;AAC/F,6BAAyB,KAAK;AAE9B,QAAI,UAAU,eAAe;AAChB,iBAAA;AAAA,QACT,MAAM;AAAA,MAAA,CACP;AAAA,IACH;AACA,QAAI,UAAU,aAAa;AACd,iBAAA;AAAA,QACT,MAAM;AAAA,MAAA,CACP;AAAA,IACH;AAAA,EAAA;AAGF,QAAM,cAAc;AAAA,IAClB;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EAAA;AAIA,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,YAAW;AAAA,MACX,WAAS;AAAA,MACT,QAAO;AAAA,MACP,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MAEd,+BAAC,MAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,QAAA,oBAAC,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,QACA,qBAAC,MAAK,EAAA,KAAK,GACT,UAAA;AAAA,UAAA,oBAAC,UAAoB,EAAA,KAAK,GAAG,IAAI,IAC/B,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO,OAAO,MAAM;AAAA,cACpB,OAAO,OAAO,MAAM;AAAA,cACpB;AAAA,cACA;AAAA,YAAA;AAAA,eALU,MAOd;AAAA,UACC,oBAAA,UAAA,EAA2B,KAAK,GAAG,IAAI,IACtC,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO,OAAO,aAAa;AAAA,cAC3B,OAAO,OAAO,aAAa;AAAA,cAC3B;AAAA,cACA;AAAA,YAAA;AAAA,eALU,aAOd;AAAA,UACC,oBAAA,UAAA,EAAwB,KAAK,GAAG,IAAI,IACnC,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA,OAAO,OAAO,UAAU;AAAA,cACxB,OAAO,OAAO,UAAU;AAAA,cACxB;AAAA,cACA,OAAO;AAAA,YAAA;AAAA,eANG,UAQd;AAAA,UAEC,oBAAA,UAAA,EAAoB,KAAK,GAAG,IAAI,IAC/B,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO,OAAO,MAAM;AAAA,cACpB,OAAO,OAAO,MAAM;AAAA,cACpB,OAAO;AAAA,gBACL,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAClB;AAAA,cACA,UAAU,CAAC,UAAU;AAEnB,+CAA+B,EAAE,QAAQ,EAAE,MAAA,EAAS,CAAA;AAGpD,yBAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,SAAS;AAAA,cAC9C;AAAA,cACA,SAAS;AAAA,cACT;AAAA,YAAA;AAAA,eAhBU,MAkBd;AAAA,QAAA,GACF;AAAA,MAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAGN;ACjIO,MAAM,cAAc,CAAC,EAAE,eAAe,WAA6B;AAClE,QAAA,EAAE,kBAAkB;AACL;AAGnB,SAAA,qBAAC,MAAK,EAAA,aAAU,QACd,UAAA;AAAA,IAAC,oBAAA,mBAAA,EAAkB,MAAK,aAAa,CAAA;AAAA,IACrC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,mCACG,QAAO,EAAA,UAAQ,MAAC,WAAW,oBAAC,SAAM,GAAI,MAAK,UAAS,MAAK,KACvD,wBAAc,EAAE,IAAI,eAAe,gBAAgB,OAAQ,CAAA,GAC9D;AAAA,QAEF,OACE,gBACA,cAAc;AAAA,UACZ,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IAEL;AAAA,IACC,oBAAA,eAAA,EACC,UAAC,oBAAA,sBAAA,CAAqB,CAAA,GACxB;AAAA,EACF,EAAA,CAAA;AAEJ;ACvBA,MAAM,iBAAiB,CAAC,SAAgC;AACtD,UAAQ,MAAM;AAAA,IACZ,KAAK,QAAQ;AACJ,aAAA;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,IACA,KAAK,OAAO;AACH,aAAA;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,IACA,KAAK,OAAO;AACH,aAAA;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,IACA,KAAK,UAAU;AACN,aAAA;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,IACA,SAAS;AACA,aAAA;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,EACF;AACF;AAEA,MAAM,YAAY,OAAO,GAAG;AAAA;AAAA,mBAET,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,CAAC,CAAC;AAAA;AAWhF,MAAM,aAAa,CAAC;AAAA,EACzB,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AACF,MAAuB;AACf,QAAA,EAAE,kBAAkB;AAE1B,QAAM,EAAE,QAAQ,SAAS,OAAO,SAAS;AACnC,QAAA,iBAAiB,OAAO,KAAK,KAAK,MAAM,GAAG,CAAC,IAAI;AAChD,QAAA,CAAC,aAAa,IAAI,SAAS,EAAE,IAAI,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAA;AAC5D,QAAA,SAAS,eAAe,MAAM,MAAM;AAE1C,8BACG,MAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,IAAA,qBAAC,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAA;AAAA,MAAc,cAAA;AAAA,QACb,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAAA,CACjB;AAAA,MAAE;AAAA,MAEH,oBAAC,UAAM,UAAW,WAAA,CAAA;AAAA,MACjB,qBAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,cAAa,UAAA;AAAA,QAAA;AAAA,QAC/C;AAAA,MAAA,GACJ;AAAA,IAAA,GACF;AAAA,IACA,qBAAC,QAAK,WAAS,MAAC,YAAW,YAAW,aAAY,cAAa,KAAK,GAClE,UAAA;AAAA,MAAA,oBAAC,aAAU,YAAY,OAAO,YAAY,aAAa,OAAO,QAAQ,SAAS,GAC7E,UAAA,oBAAC,cAAW,YAAW,QAAO,WAAW,OAAO,MAC7C,iBACH,CAAA,GACF;AAAA,0BACC,KAAI,EAAA,aAAa,GAAG,cAAc,GAChC,cAAI,gBAAgB,CAAC,UACpB,qBAAC,cAAuB,WAAW,MAAM,SAAS,GAAG,IAAI,eAAe,cAAc,UAAA;AAAA,QAAA;AAAA,QAClF;AAAA,MAAA,KADa,KAEjB,CACD,GACH;AAAA,IAAA,GACF;AAAA,EACF,EAAA,CAAA;AAEJ;ACzGO,MAAM,oBAAoB,MAAM;AAC/B,QAAA;AAAA,IACJ,OAAO,EAAE,gBAAgB,OAAO;AAAA,MAC9B,uBAAuB;AACrB,QAAA,EAAE,kBAAkB;AAC1B,QAAM,gBAAgB,gBAAgB,MAAM,GAAG,EAAE,CAAC;AAGhD,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,YAAW;AAAA,MACX,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MACd,OAAO,EAAE,WAAW,OAAO;AAAA,MAE1B,2BACE,oBAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAA,iBACC,iBAAiB,UACjB,OAAO,aAAa,EAAE,IAAI,CAAC,UAAU;AACnC,eAAO,MAAM,OAAO,MAAM,OAAO,SAAS,cAAc,KACtD,MAAM,YAAY,iBACjB,oBAAA,YAAA,EAA+B,MAAf,GAAA,MAAM,OAAuB,IAC5C;AAAA,MACL,CAAA,GACL,IAEC,qBAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,QAAA,oBAAC,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,4BACC,YAAW,EAAA,IAAG,KAAI,WAAU,cAC1B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBACE;AAAA,QACH,CAAA,GACH;AAAA,MAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAIR;ACjCA,MAAM,8BAA8B;AAAA,gBACpB,CAAC,UAAU,MAAM,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAMxD,MAAM,kBAAkB,OAAO,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQpB,CAAC,UAAU,MAAM,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,IAKlD,CAAC,UAAU,MAAM,YAAY,2BAA2B;AAAA;AAAA,MAEtD,2BAA2B;AAAA;AAAA;AAIjC,MAAM,SAAS,OAAO;AAAA;AAAA;AAAA,0BAGI,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAYzD,MAAM,yBAAyB,CAAC;AAAA,EACrC,cAAc,CAAC;AAAA,EACf;AAAA,EACA,cAAc;AAAA,EACd,WAAW;AAAA,EACX,aAAa,MAAM;AAAA,EACnB,iCAAiC;AACnC,MAAmC;AAC3B,QAAA;AAAA,IACJ,OAAO,EAAE,mBAAmB,UAAU,iBAAiB,mBAAmB,eAAe;AAAA,MACvF,uBAAuB;AAC3B,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS,KAAK;AAC9C,QAAA,EAAE,kBAAkB;AAE1B,QAAM,0BAA0B,MAAM;AACxB,gBAAA,CAAC,MAAM,CAAC,CAAC;AACrB,eAAW,WAAW;AAAA,EAAA;AAGxB,QAAM,UAAU,MAAM;AACpB,QACE,mCAAmC,QACnC,mCAAmC,eACnC,UACA;AACA,kBAAY,KAAK;AAAA,IACnB;AAAA,EACC,GAAA,CAAC,gCAAgC,aAAa,QAAQ,CAAC;AAEpD,QAAA,mBAAmB,CAAC,aAAqB,aAAa;AAG1D,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,UAAU;AAAA,MACV,SAAS,cAAc,IAAI,YAAY;AAAA,MAEvC,UAAA;AAAA,QAAA,oBAAC,iBAAgB,EAAA,OAAO,WAAW,KAAK,EAAG,CAAA;AAAA,QAC1C,oBAAA,kBAAA,EACE,UAAa,aAAA,IAAI,CAAC,eAAe;AAC1B,gBAAA,qBAAqB,WAAW,QAAQ;AAAA,YAAM,CAAC,WACnD,gBAAgB,SAAS,OAAO,QAAQ;AAAA,UAAA;AAGpC,gBAAA,sBAAsB,WAAW,QAAQ;AAAA,YAAK,CAAC,WACnD,gBAAgB,SAAS,OAAO,QAAQ;AAAA,UAAA;AAG1C,sCACG,KACC,EAAA,UAAA;AAAA,YAAA,qBAAC,QAAK,gBAAe,iBAAgB,YAAW,UAAS,SAAS,GAChE,UAAA;AAAA,cAAC,oBAAA,KAAA,EAAI,cAAc,GACjB,UAAC,oBAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,cACnC,UAAY,YAAA,WACf,CAAA,GACF;AAAA,kCACC,QAAO,EAAA;AAAA,cACR,oBAAC,KAAI,EAAA,aAAa,GAChB,UAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,kBACP,eAAe,CAAC,sBAAsB;AAAA,kBACtC,eAAe,MAAM;AACD,sCAAA,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,WAAW,OAAO,EAAE,EAAA,CAAG;AAAA,kBAClE;AAAA,kBACA;AAAA,kBAEC,wBAAc,EAAE,IAAI,wBAAwB,gBAAgB,cAAc;AAAA,gBAAA;AAAA,cAAA,GAE/E;AAAA,YAAA,GACF;AAAA,YACC,oBAAA,MAAA,EAAK,KAAK,GAAG,SAAS,GACpB,UAAY,YAAA,WACX,YAAY,QAAQ,IAAI,CAAC,WAAW;AAEhC,qBAAA,oBAAC,UAAS,EAAA,KAAK,GACb,UAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,UAAU,iBAAiB,OAAO,QAAQ;AAAA,kBAC1C,SAAS;AAAA,kBACT,WAAS;AAAA,kBAET,UAAA;AAAA,oBAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO,gBAAgB,SAAS,OAAO,QAAQ;AAAA,wBAC/C,MAAM,OAAO;AAAA,wBACb,eAAe,MAAM;AACnB,mCAAS,EAAE,QAAQ,EAAE,OAAO,OAAO,YAAY;AAAA,wBACjD;AAAA,wBACA;AAAA,wBAEC,UAAO,OAAA;AAAA,sBAAA;AAAA,oBACV;AAAA,oBACA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,eAAY;AAAA,wBACZ,SAAS,MACP,kBAAkB,EAAE,QAAQ,EAAE,OAAO,OAAO,SAAS,GAAG;AAAA,wBAE1D,OAAO,EAAE,SAAS,eAAe,YAAY,SAAS;AAAA,wBAEtD,8BAAC,KAAI,EAAA;AAAA,sBAAA;AAAA,oBACP;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA,KAzBmB,OAAO,QA2B9B;AAAA,YAEH,CAAA,GACL;AAAA,UAAA,EAAA,GAvDQ,GAAG,KAAK,IAAI,YAAY,UAAU,EAwD5C;AAAA,QAEH,CAAA,GACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;ACjKO,MAAM,sBAAsB,CAAC,EAAE,UAAU,MAAM,GAAG,YAAsC;AAC7F,QAAM,CAAC,8BAA8B,+BAA+B,IAAI,MAAM,SAE5E,IAAI;AACN,QAAM,qCAAqC,CAAC,UAC1C,gCAAgC,KAAK;AAGrC,SAAA,oBAAC,KAAI,EAAA,SAAS,GAAG,YAAW,YACzB,UAAA,WACC,QAAQ,IAAI,CAAC,KAAK,UAChB;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,OAAO,IAAI;AAAA,MACX,aAAa,IAAI;AAAA,MACjB,aAAa;AAAA,MACb,gCAAgC;AAAA,MAChC,YAAY;AAAA,MACX,GAAG;AAAA,IAAA;AAAA,IANC,IAAI;AAAA,EAQZ,CAAA,EACL,CAAA;AAEJ;AC3BO,MAAM,cAAc,CAAC,EAAE,GAAG,YAAY;AACrC,QAAA;AAAA,IACJ,OAAO,EAAE,KAAK;AAAA,MACZ,uBAAuB;AACrB,QAAA,EAAE,kBAAkB;AAGxB,SAAA,qBAAC,QAAK,KAAK,GAAG,QAAO,gBAAe,WAAS,MAAC,YAAW,YACvD,UAAA;AAAA,IAAC,qBAAA,UAAA,EAAS,KAAK,GAAG,YAAY,GAAG,eAAe,GAAG,aAAa,GAAG,cAAc,GAC/E,UAAA;AAAA,MAAA,qBAAC,QAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,QAAA,oBAAC,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,4BACC,YAAW,EAAA,IAAG,KAAI,WAAU,cAC1B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,MAAA,GACF;AAAA,MACC,MAAM,eAAgB,oBAAA,qBAAA,EAAoB,SAAS,MAAM,aAAc,GAAG,OAAO;AAAA,IAAA,GACpF;AAAA,wBACC,mBAAkB,EAAA;AAAA,EACrB,EAAA,CAAA;AAEJ;ACjCO,MAAM,SAAS,IAAI,OAAO,EAAE,MAAM;AAAA,EACvC,MAAM,IAAI,SAAS,IAAI,GAAG,EAAE,SAAS,iBAAiB,QAAQ;AAAA,EAC9D,MAAM,IACH,OAAO,EACP,MAAM,CAAC,aAAa,eAAe,QAAQ,CAAC,EAC5C,SAAS,iBAAiB,QAAQ;AAAA,EACrC,aAAa,IAAI,OAAO,EAAE,SAAS;AAAA,EACnC,UAAU,IAAI,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,SAAW,EAAA,QAAQ,iBAAiB,QAAQ;AACtF,CAAC;ACAY,MAAA,2BAA2B,CAAC,SAA+B;AACtE,QAAM,SAAiB;AAAA,IACrB,eAAe,CAAC;AAAA,IAChB,aAAa,CAAC;AAAA,EAAA;AAGT,SAAA,cAAc,OAAO,QAAQ,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,UAAU,OAAO;AAAA,IACtE;AAAA,IACA,OAAO,MAAM,MAAM,IAAI,EAAE,CAAC;AAAA,IAC1B,aAAa,OAAO,KAAK,WAAW,WAAW,EAC5C,IAAI,CAAC,gBAAgB;AAAA,MACpB;AAAA,MACA,SACE,cAAc,WAAW,cACrB,WAAW,YAAY,UAAU,EAC9B,IAAI,CAAC,WAAgD;AACpD,cAAM,WAAW,GAAG,KAAK,IAAI,UAAU,IAAI,MAAM;AAE7C,YAAA,MAAM,SAAS,OAAO,GAAG;AACpB,iBAAA,cAAc,KAAK,QAAQ;AAAA,QACpC;AAEO,eAAA;AAAA,UACL;AAAA,UACA;AAAA,QAAA;AAAA,MACF,CACD,EACA,KAAK,IACR,CAAC;AAAA,IAAA,EACP,EACD,KAAK;AAAA,EACR,EAAA;AAEK,SAAA;AACT;ACiBO,MAAM,eAA6B;AAAA,EACxC,MAAM;AAAA,IACJ,eAAe,CAAC;AAAA,IAChB,aAAa,CAAC;AAAA,EAChB;AAAA,EACA,QAAQ,CAAC;AAAA,EACT,gBAAgB;AAAA,EAChB,iBAAiB,CAAC;AACpB;AAEO,MAAM,UAAU,CAAC,OAAqB,WAC3C,QAAQ,OAAO,CAAC,eAAe;AAC7B,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,aAAa;AAChB,UAAI,WAAW,gBAAgB,SAAS,OAAO,KAAK,GAAG;AAChD,aAAA,WAAW,iBAAiB,OAAO,KAAK;AAAA,MAAA,OACxC;AACM,mBAAA,gBAAgB,KAAK,OAAO,KAAK;AAAA,MAC9C;AACA;AAAA,IACF;AAAA,IACA,KAAK,4BAA4B;AACzB,YAAA,iBAAiB,OAAO,MAAM;AAAA,QAAM,CAAC,SACzC,WAAW,gBAAgB,SAAS,KAAK,QAAQ;AAAA,MAAA;AAGnD,UAAI,gBAAgB;AACX,eAAA,MAAM,QAAQ,CAAC,SAAS;AACxB,eAAA,WAAW,iBAAiB,KAAK,QAAQ;AAAA,QAAA,CAC/C;AAAA,MAAA,OACI;AACE,eAAA,MAAM,QAAQ,CAAC,SAAS;AAClB,qBAAA,gBAAgB,KAAK,KAAK,QAAQ;AAAA,QAAA,CAC9C;AAAA,MACH;AACA;AAAA,IACF;AAAA,IAEA,KAAK,sBAAsB;AACzB,iBAAW,kBAAkB,CAAC,GAAG,WAAW,KAAK,aAAa;AAE9D;AAAA,IACF;AAAA,IACA,KAAK,uBAAuB;AACpB,YAAA,sBAAsB,WAAW,KAAK,cAAc;AAAA,QACxD,CAAC,aAAa,SAAS,SAAS,MAAM,KAAK,SAAS,SAAS,SAAS;AAAA,MAAA;AAE7D,iBAAA,kBAAkB,CAAC,GAAG,mBAAmB;AACpD;AAAA,IACF;AAAA,IACA,KAAK,6BAA6B;AACrB,iBAAA,OAAO,yBAAyB,OAAO,KAAK;AACvD;AAAA,IACF;AAAA,IACA,KAAK,iBAAiB;AACpB,iBAAW,SAAS,EAAE,GAAG,OAAO,MAAM;AACtC;AAAA,IACF;AAAA,IACA,KAAK,sBAAsB;AACzB,iBAAW,kBAAkB,CAAC,GAAG,OAAO,KAAK;AAC7C;AAAA,IACF;AAAA,IACA,KAAK,uBAAuB;AAC1B,iBAAW,iBAAiB,OAAO;AACnC;AAAA,IACF;AAAA,IACA;AACS,aAAA;AAAA,EACX;AACF,CAAC;ACpFI,MAAM,WAAW,MAAM;AACP;AACf,QAAA,EAAE,kBAAkB;AAC1B,QAAM,qBAAqB;AAC3B,QAAM,EAAE,SAAS,UAAU,IAAI,kBAAkB;AACjD,QAAM,EAAE,OAAO,cAAc,IAAI,YAAoC;AACrE,QAAM,cAAc,iBAAiB,CAACA,WAAUA,OAAM,UAAU,WAAW;AAC3E,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM;AAAA,IACpC,eAAe,UAAU,YACrB;AAAA,MACE,GAAG,cAAc;AAAA,IAAA,IAEnB;AAAA,EAAA;AAEA,QAAA,EAAE,eAAe;AACjB,QAAA,EAAE,mBAAmB;AACrB,QAAA;AAAA,IACJ,gBAAgB,EAAE,WAAW,WAAW,cAAc;AAAA,EACpD,IAAA,QAAQ,YAAY,WAAW,YAAY,CAAC;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,WAAW,SAAS,YAAY;AAC1D,QAAA,QAAQ,cAA8B,0BAA0B;AAChE,QAAA,KAAK,OAAO,QAAQ;AAC1B,QAAM,aAAa,OAAO;AACpB,QAAA;AAAA,IACJ,yBAAyB;AAAA,IACzB,iCAAiC;AAAA,MAC/B,mBAAmB;AAEvB,QAAM,UAAU;AAEhB,QAAM,6BAA6B;AACnC,QAAM,wBAAwB;AAM9B,QAAM,UAAU,MAAM;AACpB,QAAI,2BAA2B,OAAO;AACjB,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,2BAA2B,KAAK;AAAA,MAAA,CACzD;AAAA,IACH;AAAA,KACC,CAAC,2BAA2B,OAAO,gBAAgB,kBAAkB,CAAC;AAEzE,QAAM,UAAU,MAAM;AACpB,QAAI,sBAAsB,OAAO;AACZ,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,sBAAsB,KAAK;AAAA,MAAA,CACpD;AAAA,IACH;AAAA,KACC,CAAC,sBAAsB,OAAO,gBAAgB,kBAAkB,CAAC;AAEpE,QAAM,UAAU,MAAM;AACpB,QAAI,2BAA2B,MAAM;AAC1B,eAAA;AAAA,QACP,MAAM;AAAA,QACN,OAAO,2BAA2B;AAAA,MAAA,CACnC;AAAA,IACH;AAAA,EAAA,GACC,CAAC,2BAA2B,IAAI,CAAC;AAEpC,QAAM,UAAU,MAAM;AACpB,QAAI,sBAAsB,MAAM;AACrB,eAAA;AAAA,QACP,MAAM;AAAA,QACN,OAAO,sBAAsB;AAAA,MAAA,CAC9B;AAAA,IACH;AAAA,EAAA,GACC,CAAC,sBAAsB,IAAI,CAAC;AAE/B,QAAM,UAAU,MAAM;AACpB,QAAI,UAAU;AACR,UAAA,SAAS,SAAS,aAAa;AACxB,iBAAA;AAAA,UACP,MAAM;AAAA,QAAA,CACP;AAAA,MACH;AACI,UAAA,SAAS,SAAS,eAAe;AAC1B,iBAAA;AAAA,UACP,MAAM;AAAA,QAAA,CACP;AAAA,MACH;AACI,UAAA,SAAS,SAAS,UAAU;AACrB,iBAAA;AAAA,UACP,MAAM;AAAA,UACN,OAAO,UAAU;AAAA,QAAA,CAClB;AAAA,MACH;AAAA,IACF;AAAA,EAAA,GACC,CAAC,QAAQ,CAAC;AAEb,QAAM,UAAU,MAAM;AACT,eAAA,aAAa,wBAAwB,wBAAwB;AAAA,MACtE,WAAW;AAAA,IAAA,CACZ;AAAA,EAAA,GACA,CAAC,YAAY,UAAU,CAAC;AAE3B,QAAM,EAAE,MAAM,OAAO,UAAU,IAAI,oBAAoB,IAAK;AAAA,IAC1D,MAAM,CAAC,MAAM,cAAc,CAAC,CAAC;AAAA,EAAA,CAC9B;AAED,QAAM,UAAU,MAAM;AACpB,QAAI,OAAO;AACU,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,KAAK;AAAA,MAAA,CAC9B;AAAA,IACH;AAAA,EACC,GAAA,CAAC,OAAO,gBAAgB,kBAAkB,CAAC;AAE9C,QAAM,UAAU,MAAM;AACpB,QAAI,MAAM;AACR,kBAAY,IAAI;AAEZ,UAAA,KAAK,SAAS,aAAa;AACpB,iBAAA;AAAA,UACP,MAAM;AAAA,QAAA,CACP;AAAA,MACH;AACI,UAAA,KAAK,SAAS,eAAe;AACtB,iBAAA;AAAA,UACP,MAAM;AAAA,QAAA,CACP;AAAA,MACH;AACI,UAAA,KAAK,SAAS,UAAU;AACjB,iBAAA;AAAA,UACP,MAAM;AAAA,UACN,OAAO,MAAM;AAAA,QAAA,CACd;AAAA,MACH;AAAA,IACF;AAAA,EAAA,GACC,CAAC,IAAI,CAAC;AAEH,QAAA,CAAC,WAAW,IAAI;AAChB,QAAA,CAAC,WAAW,IAAI;AAOhB,QAAA,eAAe,OAAO,MAAkB,WAAsC;AACvE,eAAA,aAAa,oBAAoB,iBAAiB;AAAA,MAC3D,WAAW;AAAA,IAAA,CACZ;AAGO;AAEJ,QAAA;AACF,UAAI,YAAY;AACR,cAAA,MAAM,MAAM,YAAY;AAAA,UAC5B,GAAG;AAAA;AAAA,UAEH,UAAU,MAAM,YAAY;AAAA,UAC5B,aAAa,KAAK,SAAS,WAAW,MAAM,kBAAkB;AAAA,QAAA,CAC/D;AAED,YAAI,WAAW,KAAK;AAClB,cAAI,iBAAiB,IAAI,KAAK,KAAK,IAAI,MAAM,SAAS,mBAAmB;AACvE,mBAAO,UAAU,sBAAsB,IAAI,KAAK,CAAC;AAAA,UAAA,OAC5C;AACc,+BAAA;AAAA,cACjB,MAAM;AAAA,cACN,SAAS,eAAe,IAAI,KAAK;AAAA,YAAA,CAClC;AAAA,UACH;AAEA;AAAA,QACF;AAEmB,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,cAAc;AAAA,YACrB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,QAAA,CACF;AAED,mBAAW,kBAAkB;AAAA,UAC3B,MAAM,IAAI,KAAK;AAAA,UACf,WAAW;AAAA,QAAA,CACZ;AAEO,gBAAA,QAAQ,wBAAwB,IAAI,KAAK,EAAE,IAAI,EAAE,UAAU,IAAI,KAAM,CAAA;AAC7E,uBAAe,mBAAmB;AAAA,MAAA,OAC7B;AACC,cAAA,MAAM,MAAM,YAAY;AAAA,UAC5B;AAAA,UACA,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,MAAM,KAAK;AAAA,UACX,aAAa,KAAK,SAAS,WAAW,MAAM,kBAAkB;AAAA,QAAA,CAC/D;AAED,YAAI,WAAW,KAAK;AAClB,cAAI,iBAAiB,IAAI,KAAK,KAAK,IAAI,MAAM,SAAS,mBAAmB;AACvE,mBAAO,UAAU,sBAAsB,IAAI,KAAK,CAAC;AAAA,UAAA,OAC5C;AACc,+BAAA;AAAA,cACjB,MAAM;AAAA,cACN,SAAS,eAAe,IAAI,KAAK;AAAA,YAAA,CAClC;AAAA,UACH;AAEA;AAAA,QACF;AAEmB,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,cAAc;AAAA,YACrB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,QAAA,CACF;AAED,mBAAW,gBAAgB;AAAA,UACzB,MAAM,IAAI,KAAK;AAAA,UACf,WAAW;AAAA,QAAA,CACZ;AAAA,MACH;AAAA,IAAA,QACM;AACa,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS;AAAA,UACP,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,MAAA,CACD;AAAA,IAAA,UACD;AAEU;IACZ;AAAA,EAAA;AAGF,QAAM,CAAC,uBAAuB,wBAAwB,IAAI,MAAM,SAAS,KAAK;AAE9E,QAAM,uBAAuB,CAAC;AAAA,IAC5B,QAAQ,EAAE,MAAM;AAAA,EAAA,MACyD;AACzE,6BAAyB,IAAI;AACpB,aAAA;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IAAA,CACD;AAAA,EAAA;AAGH,QAAM,gCAAgC,CAAC;AAAA,IACrC,QAAQ,EAAE,MAAM;AAAA,EAAA,MACkE;AAClF,6BAAyB,IAAI;AACpB,aAAA;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IAAA,CACD;AAAA,EAAA;AAGH,QAAM,oBAAoB,CAAC;AAAA,IACzB,QAAQ,EAAE,MAAM;AAAA,EAAA,MACkE;AACzE,aAAA;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IAAA,CACD;AAAA,EAAA;AAGH,QAAM,gBAAgB;AAAA,IACpB,GAAG;AAAA,IACH,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB;AAAA,EAAA;AAGF,QAAM,gBAAiB,aAAa,CAAC,cAAgB,aAAa;AAElE,MAAI,WAAW;AACb,WAAQ,oBAAA,aAAA,EAAY,cAAc,UAAU,KAAM,CAAA;AAAA,EACpD;AAEA,SACG,oBAAA,6BAAA,EAA4B,OAAO,eAClC,+BAAC,MACC,EAAA,UAAA;AAAA,IAAC,oBAAA,mBAAA,EAAkB,MAAK,aAAa,CAAA;AAAA,IACrC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,kBAAkB;AAAA,QAClB,kBAAkB;AAAA,QAClB,eAAe;AAAA,UACb,MAAM,UAAU,QAAQ;AAAA,UACxB,aAAa,UAAU,eAAe;AAAA,UACtC,MAAM,UAAU;AAAA,UAChB,UAAU,UAAU;AAAA,QACtB;AAAA,QACA,oBAAkB;AAAA,QAClB,UAAU,CAAC,MAAM,YAAY,aAAa,MAAM,OAAO;AAAA,QAEtD,WAAC,EAAE,QAAQ,cAAc,cAAc,QAAQ,oBAAoB;AAC9D,cAAA,yBAAyB,QAAQ,SAAS,UAAU;AACtD,0BAAc,QAAQ,QAAQ;AAAA,UAChC;AAEA,sCACG,MACC,EAAA,UAAA;AAAA,YAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,OAAO;AAAA,kBACL,IAAI;AAAA,kBACJ,gBAAgB;AAAA,gBAClB;AAAA,gBACA,OAAO;AAAA,gBACP,UAAU;AAAA,gBACV;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,eAAc;AAAA,cAAA;AAAA,YAChB;AAAA,YAEA,oBAAC,iBACC,UAAC,qBAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAA;AAAA,cAAQ,QAAA,UAAU,IAAI,KACrB,oBAAC,YAAS,OAAO,UAAU,WAAW,WAAW,eAAgB,CAAA;AAAA,cAEnE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC;AAAA,kBACA,UAAU;AAAA,kBACV;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,YAAY;AAAA,kBACZ;AAAA,gBAAA;AAAA,cACF;AAAA,cACA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,UACE,CAAC,iBACD,QAAQ,SAAS,eACjB,QAAQ,SAAS;AAAA,gBAAA;AAAA,cAErB;AAAA,YAAA,EAAA,CACF,EACF,CAAA;AAAA,UACF,EAAA,CAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IACF;AAAA,EAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEO,MAAM,oBAAoB,MAAM;AACrC,QAAM,cAAc;AAAA,IAClB,CAAC,UAAU,MAAM,UAAU,YAAY,WAAW,YAAY,EAAE;AAAA,EAAA;AAGlE,SACG,oBAAA,sBAAA,EAAqB,aACpB,UAAA,oBAAC,YAAS,EACZ,CAAA;AAEJ;"}
@@ -7,10 +7,10 @@ const helperPlugin = require("@strapi/helper-plugin");
7
7
  const formik = require("formik");
8
8
  const reactIntl = require("react-intl");
9
9
  const reactRouterDom = require("react-router-dom");
10
- const index = require("./index-o73uUVeI.js");
11
- const apiTokens = require("./apiTokens-OV2CZdTf.js");
10
+ const index = require("./index-FHnaHjSM.js");
11
+ const apiTokens = require("./apiTokens-7DkHvpGO.js");
12
12
  const constants = require("./constants-RMqZXSqh.js");
13
- const TokenTypeSelect = require("./TokenTypeSelect-PEZjki-x.js");
13
+ const TokenTypeSelect = require("./TokenTypeSelect-YXOIDDGa.js");
14
14
  const reactContext = require("@radix-ui/react-context");
15
15
  const Icons = require("@strapi/icons");
16
16
  const map = require("lodash/map");
@@ -753,8 +753,8 @@ const EditView = () => {
753
753
  if (isCreating) {
754
754
  const res = await createToken({
755
755
  ...body,
756
- // in case a token has a lifespan of "unlimited" the API only accepts zero as a number
757
- lifespan: body.lifespan === "0" ? parseInt(body.lifespan) : null,
756
+ // lifespan must be "null" for unlimited (0 would mean instantly expired and isn't accepted)
757
+ lifespan: body?.lifespan || null,
758
758
  permissions: body.type === "custom" ? state.selectedActions : null
759
759
  });
760
760
  if ("error" in res) {
@@ -872,7 +872,7 @@ const EditView = () => {
872
872
  name: apiToken?.name || "",
873
873
  description: apiToken?.description || "",
874
874
  type: apiToken?.type,
875
- lifespan: apiToken?.lifespan ? apiToken.lifespan.toString() : apiToken?.lifespan
875
+ lifespan: apiToken?.lifespan
876
876
  },
877
877
  enableReinitialize: true,
878
878
  onSubmit: (body, actions) => handleSubmit(body, actions),
@@ -933,4 +933,4 @@ const ProtectedEditView = () => {
933
933
  };
934
934
  exports.EditView = EditView;
935
935
  exports.ProtectedEditView = ProtectedEditView;
936
- //# sourceMappingURL=EditViewPage-FpEY5mPY.js.map
936
+ //# sourceMappingURL=EditViewPage-kioXXfuP.js.map