@strapi/admin 5.44.0 → 5.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/dist/admin/admin/src/components/Table.js.map +1 -1
  2. package/dist/admin/admin/src/components/Table.mjs.map +1 -1
  3. package/dist/admin/admin/src/constants.js +49 -0
  4. package/dist/admin/admin/src/constants.js.map +1 -1
  5. package/dist/admin/admin/src/constants.mjs +49 -0
  6. package/dist/admin/admin/src/constants.mjs.map +1 -1
  7. package/dist/admin/admin/src/core/apis/router.js +4 -4
  8. package/dist/admin/admin/src/core/apis/router.js.map +1 -1
  9. package/dist/admin/admin/src/core/apis/router.mjs +4 -4
  10. package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
  11. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  12. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  13. package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView/components → components/Tokens}/FormApiTokenContainer.js +48 -11
  14. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js.map +1 -0
  15. package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView/components → components/Tokens}/FormApiTokenContainer.mjs +49 -12
  16. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs.map +1 -0
  17. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +1 -1
  18. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  19. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +1 -1
  20. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
  21. package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.js +1 -1
  22. package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.js.map +1 -1
  23. package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.mjs +1 -1
  24. package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.mjs.map +1 -1
  25. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +21 -1
  26. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  27. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +21 -1
  28. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
  29. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +1 -1
  30. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
  31. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +1 -1
  32. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
  33. package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js +33 -0
  34. package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js.map +1 -1
  35. package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.mjs +14 -1
  36. package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.mjs.map +1 -1
  37. package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView → components/Tokens}/utils/getDateOfExpiration.js +1 -1
  38. package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.js.map +1 -0
  39. package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView → components/Tokens}/utils/getDateOfExpiration.mjs +1 -1
  40. package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.mjs.map +1 -0
  41. package/dist/admin/admin/src/pages/Settings/constants.js +182 -151
  42. package/dist/admin/admin/src/pages/Settings/constants.js.map +1 -1
  43. package/dist/admin/admin/src/pages/Settings/constants.mjs +182 -151
  44. package/dist/admin/admin/src/pages/Settings/constants.mjs.map +1 -1
  45. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.js +17 -0
  46. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.js.map +1 -0
  47. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.mjs +15 -0
  48. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.mjs.map +1 -0
  49. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js +314 -0
  50. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js.map +1 -0
  51. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.mjs +292 -0
  52. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.mjs.map +1 -0
  53. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js +70 -0
  54. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js.map +1 -0
  55. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.mjs +49 -0
  56. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.mjs.map +1 -0
  57. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js +254 -0
  58. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js.map +1 -0
  59. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.mjs +231 -0
  60. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.mjs.map +1 -0
  61. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +42 -33
  62. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
  63. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs +43 -34
  64. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
  65. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +3 -2
  66. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  67. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +3 -2
  68. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
  69. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +23 -12
  70. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
  71. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs +23 -12
  72. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs.map +1 -1
  73. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js +124 -35
  74. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
  75. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs +126 -37
  76. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs.map +1 -1
  77. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +24 -9
  78. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
  79. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs +24 -9
  80. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs.map +1 -1
  81. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js +5 -3
  82. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
  83. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs +5 -3
  84. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs.map +1 -1
  85. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +171 -36
  86. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
  87. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +172 -37
  88. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
  89. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +5 -3
  90. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
  91. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs +5 -3
  92. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
  93. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js +59 -1
  94. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
  95. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs +40 -1
  96. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs.map +1 -1
  97. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.js +89 -0
  98. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.js.map +1 -0
  99. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.mjs +86 -0
  100. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.mjs.map +1 -0
  101. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.js +35 -9
  102. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.js.map +1 -1
  103. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.mjs +35 -10
  104. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.mjs.map +1 -1
  105. package/dist/admin/admin/src/render.js +6 -3
  106. package/dist/admin/admin/src/render.js.map +1 -1
  107. package/dist/admin/admin/src/render.mjs +6 -3
  108. package/dist/admin/admin/src/render.mjs.map +1 -1
  109. package/dist/admin/admin/src/router.js +4 -4
  110. package/dist/admin/admin/src/router.js.map +1 -1
  111. package/dist/admin/admin/src/router.mjs +1 -1
  112. package/dist/admin/admin/src/router.mjs.map +1 -1
  113. package/dist/admin/admin/src/services/apiTokens.js +85 -2
  114. package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
  115. package/dist/admin/admin/src/services/apiTokens.mjs +80 -3
  116. package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
  117. package/dist/admin/admin/src/translations/en.json.js +16 -1
  118. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  119. package/dist/admin/admin/src/translations/en.json.mjs +16 -1
  120. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  121. package/dist/admin/admin/src/utils/getFetchClient.js +4 -1
  122. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  123. package/dist/admin/admin/src/utils/getFetchClient.mjs +4 -1
  124. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  125. package/dist/admin/admin/tests/server.js +99 -21
  126. package/dist/admin/admin/tests/server.js.map +1 -1
  127. package/dist/admin/admin/tests/server.mjs +99 -21
  128. package/dist/admin/admin/tests/server.mjs.map +1 -1
  129. package/dist/admin/src/constants.d.ts +26 -0
  130. package/dist/admin/src/core/apis/router.d.ts +1 -1
  131. package/dist/admin/src/features/Tracking.d.ts +2 -1
  132. package/dist/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.d.ts +24 -0
  133. package/dist/admin/src/pages/Settings/components/Tokens/Table.d.ts +2 -1
  134. package/dist/admin/src/pages/Settings/components/Tokens/constants.d.ts +17 -0
  135. package/dist/admin/src/pages/Settings/constants.d.ts +1 -1
  136. package/dist/admin/src/pages/Settings/pages/AdminTokens/CreateView.d.ts +1 -0
  137. package/dist/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.d.ts +2 -0
  138. package/dist/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.d.ts +13 -0
  139. package/dist/admin/src/pages/Settings/pages/AdminTokens/ListView.d.ts +2 -0
  140. package/dist/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.d.ts +4 -3
  141. package/dist/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.d.ts +3 -1
  142. package/dist/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.d.ts +1 -0
  143. package/dist/admin/src/pages/Settings/pages/Roles/components/Permissions.d.ts +5 -0
  144. package/dist/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.d.ts +8 -7
  145. package/dist/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.d.ts +27 -0
  146. package/dist/admin/src/pages/Settings/pages/Roles/utils/updateValues.d.ts +8 -2
  147. package/dist/admin/src/services/apiTokens.d.ts +5 -2
  148. package/dist/admin/src/types/permissions.d.ts +1 -1
  149. package/dist/server/server/src/bootstrap.js +37 -5
  150. package/dist/server/server/src/bootstrap.js.map +1 -1
  151. package/dist/server/server/src/bootstrap.mjs +37 -5
  152. package/dist/server/server/src/bootstrap.mjs.map +1 -1
  153. package/dist/server/server/src/config/admin-actions.js +48 -0
  154. package/dist/server/server/src/config/admin-actions.js.map +1 -1
  155. package/dist/server/server/src/config/admin-actions.mjs +48 -0
  156. package/dist/server/server/src/config/admin-actions.mjs.map +1 -1
  157. package/dist/server/server/src/content-types/Permission.js +10 -1
  158. package/dist/server/server/src/content-types/Permission.js.map +1 -1
  159. package/dist/server/server/src/content-types/Permission.mjs +10 -1
  160. package/dist/server/server/src/content-types/Permission.mjs.map +1 -1
  161. package/dist/server/server/src/content-types/User.js +8 -0
  162. package/dist/server/server/src/content-types/User.js.map +1 -1
  163. package/dist/server/server/src/content-types/User.mjs +8 -0
  164. package/dist/server/server/src/content-types/User.mjs.map +1 -1
  165. package/dist/server/server/src/content-types/api-token.js +27 -1
  166. package/dist/server/server/src/content-types/api-token.js.map +1 -1
  167. package/dist/server/server/src/content-types/api-token.mjs +27 -1
  168. package/dist/server/server/src/content-types/api-token.mjs.map +1 -1
  169. package/dist/server/server/src/controllers/admin-token.js +194 -0
  170. package/dist/server/server/src/controllers/admin-token.js.map +1 -0
  171. package/dist/server/server/src/controllers/admin-token.mjs +192 -0
  172. package/dist/server/server/src/controllers/admin-token.mjs.map +1 -0
  173. package/dist/server/server/src/controllers/api-token.js +48 -47
  174. package/dist/server/server/src/controllers/api-token.js.map +1 -1
  175. package/dist/server/server/src/controllers/api-token.mjs +48 -47
  176. package/dist/server/server/src/controllers/api-token.mjs.map +1 -1
  177. package/dist/server/server/src/controllers/index.js +2 -0
  178. package/dist/server/server/src/controllers/index.js.map +1 -1
  179. package/dist/server/server/src/controllers/index.mjs +2 -0
  180. package/dist/server/server/src/controllers/index.mjs.map +1 -1
  181. package/dist/server/server/src/domain/permission/index.js +2 -1
  182. package/dist/server/server/src/domain/permission/index.js.map +1 -1
  183. package/dist/server/server/src/domain/permission/index.mjs +2 -1
  184. package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
  185. package/dist/server/server/src/policies/index.js +2 -0
  186. package/dist/server/server/src/policies/index.js.map +1 -1
  187. package/dist/server/server/src/policies/index.mjs +2 -0
  188. package/dist/server/server/src/policies/index.mjs.map +1 -1
  189. package/dist/server/server/src/policies/isAdminTokensEnabled.js +16 -0
  190. package/dist/server/server/src/policies/isAdminTokensEnabled.js.map +1 -0
  191. package/dist/server/server/src/policies/isAdminTokensEnabled.mjs +14 -0
  192. package/dist/server/server/src/policies/isAdminTokensEnabled.mjs.map +1 -0
  193. package/dist/server/server/src/register.js +4 -2
  194. package/dist/server/server/src/register.js.map +1 -1
  195. package/dist/server/server/src/register.mjs +4 -2
  196. package/dist/server/server/src/register.mjs.map +1 -1
  197. package/dist/server/server/src/routes/admin-tokens.js +140 -0
  198. package/dist/server/server/src/routes/admin-tokens.js.map +1 -0
  199. package/dist/server/server/src/routes/admin-tokens.mjs +138 -0
  200. package/dist/server/server/src/routes/admin-tokens.mjs.map +1 -0
  201. package/dist/server/server/src/routes/index.js +2 -0
  202. package/dist/server/server/src/routes/index.js.map +1 -1
  203. package/dist/server/server/src/routes/index.mjs +2 -0
  204. package/dist/server/server/src/routes/index.mjs.map +1 -1
  205. package/dist/server/server/src/services/api-token.js +805 -101
  206. package/dist/server/server/src/services/api-token.js.map +1 -1
  207. package/dist/server/server/src/services/api-token.mjs +800 -101
  208. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  209. package/dist/server/server/src/services/constants.js +2 -0
  210. package/dist/server/server/src/services/constants.js.map +1 -1
  211. package/dist/server/server/src/services/constants.mjs +2 -0
  212. package/dist/server/server/src/services/constants.mjs.map +1 -1
  213. package/dist/server/server/src/services/homepage.js +1 -1
  214. package/dist/server/server/src/services/homepage.js.map +1 -1
  215. package/dist/server/server/src/services/homepage.mjs +1 -1
  216. package/dist/server/server/src/services/homepage.mjs.map +1 -1
  217. package/dist/server/server/src/services/index.js +2 -1
  218. package/dist/server/server/src/services/index.js.map +1 -1
  219. package/dist/server/server/src/services/index.mjs +3 -2
  220. package/dist/server/server/src/services/index.mjs.map +1 -1
  221. package/dist/server/server/src/services/permission/engine.js +6 -0
  222. package/dist/server/server/src/services/permission/engine.js.map +1 -1
  223. package/dist/server/server/src/services/permission/engine.mjs +6 -0
  224. package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
  225. package/dist/server/server/src/services/permission/queries.js +11 -2
  226. package/dist/server/server/src/services/permission/queries.js.map +1 -1
  227. package/dist/server/server/src/services/permission/queries.mjs +12 -3
  228. package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
  229. package/dist/server/server/src/services/role.js +3 -0
  230. package/dist/server/server/src/services/role.js.map +1 -1
  231. package/dist/server/server/src/services/role.mjs +3 -0
  232. package/dist/server/server/src/services/role.mjs.map +1 -1
  233. package/dist/server/server/src/strategies/admin-token.js +110 -0
  234. package/dist/server/server/src/strategies/admin-token.js.map +1 -0
  235. package/dist/server/server/src/strategies/admin-token.mjs +104 -0
  236. package/dist/server/server/src/strategies/admin-token.mjs.map +1 -0
  237. package/dist/server/server/src/strategies/api-token-utils.js +56 -0
  238. package/dist/server/server/src/strategies/api-token-utils.js.map +1 -0
  239. package/dist/server/server/src/strategies/api-token-utils.mjs +52 -0
  240. package/dist/server/server/src/strategies/api-token-utils.mjs.map +1 -0
  241. package/dist/server/server/src/strategies/content-api-token.js +104 -0
  242. package/dist/server/server/src/strategies/content-api-token.js.map +1 -0
  243. package/dist/server/server/src/strategies/content-api-token.mjs +98 -0
  244. package/dist/server/server/src/strategies/content-api-token.mjs.map +1 -0
  245. package/dist/server/server/src/validation/admin-tokens.js +28 -0
  246. package/dist/server/server/src/validation/admin-tokens.js.map +1 -0
  247. package/dist/server/server/src/validation/admin-tokens.mjs +25 -0
  248. package/dist/server/server/src/validation/admin-tokens.mjs.map +1 -0
  249. package/dist/server/server/src/validation/api-tokens.js +5 -2
  250. package/dist/server/server/src/validation/api-tokens.js.map +1 -1
  251. package/dist/server/server/src/validation/api-tokens.mjs +5 -2
  252. package/dist/server/server/src/validation/api-tokens.mjs.map +1 -1
  253. package/dist/server/server/src/validation/project-settings.js +15 -16
  254. package/dist/server/server/src/validation/project-settings.js.map +1 -1
  255. package/dist/server/server/src/validation/project-settings.mjs +4 -5
  256. package/dist/server/server/src/validation/project-settings.mjs.map +1 -1
  257. package/dist/server/src/bootstrap.d.ts.map +1 -1
  258. package/dist/server/src/config/admin-actions.d.ts.map +1 -1
  259. package/dist/server/src/content-types/Permission.d.ts +9 -0
  260. package/dist/server/src/content-types/Permission.d.ts.map +1 -1
  261. package/dist/server/src/content-types/User.d.ts +8 -0
  262. package/dist/server/src/content-types/User.d.ts.map +1 -1
  263. package/dist/server/src/content-types/api-token.d.ts +23 -0
  264. package/dist/server/src/content-types/api-token.d.ts.map +1 -1
  265. package/dist/server/src/content-types/index.d.ts +40 -0
  266. package/dist/server/src/content-types/index.d.ts.map +1 -1
  267. package/dist/server/src/controllers/admin-token.d.ts +12 -0
  268. package/dist/server/src/controllers/admin-token.d.ts.map +1 -0
  269. package/dist/server/src/controllers/api-token.d.ts +0 -1
  270. package/dist/server/src/controllers/api-token.d.ts.map +1 -1
  271. package/dist/server/src/controllers/index.d.ts +9 -1
  272. package/dist/server/src/controllers/index.d.ts.map +1 -1
  273. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  274. package/dist/server/src/index.d.ts +56 -2
  275. package/dist/server/src/index.d.ts.map +1 -1
  276. package/dist/server/src/policies/index.d.ts +5 -0
  277. package/dist/server/src/policies/index.d.ts.map +1 -1
  278. package/dist/server/src/policies/isAdminTokensEnabled.d.ts +7 -0
  279. package/dist/server/src/policies/isAdminTokensEnabled.d.ts.map +1 -0
  280. package/dist/server/src/register.d.ts.map +1 -1
  281. package/dist/server/src/routes/admin-tokens.d.ts +15 -0
  282. package/dist/server/src/routes/admin-tokens.d.ts.map +1 -0
  283. package/dist/server/src/routes/index.d.ts.map +1 -1
  284. package/dist/server/src/services/api-token.d.ts +136 -12
  285. package/dist/server/src/services/api-token.d.ts.map +1 -1
  286. package/dist/server/src/services/constants.d.ts +13 -11
  287. package/dist/server/src/services/constants.d.ts.map +1 -1
  288. package/dist/server/src/services/index.d.ts +2 -2
  289. package/dist/server/src/services/index.d.ts.map +1 -1
  290. package/dist/server/src/services/permission/engine.d.ts +5 -0
  291. package/dist/server/src/services/permission/engine.d.ts.map +1 -1
  292. package/dist/server/src/services/permission/queries.d.ts.map +1 -1
  293. package/dist/server/src/services/permission.d.ts +1 -0
  294. package/dist/server/src/services/permission.d.ts.map +1 -1
  295. package/dist/server/src/services/role.d.ts.map +1 -1
  296. package/dist/server/src/strategies/admin-token.d.ts +51 -0
  297. package/dist/server/src/strategies/admin-token.d.ts.map +1 -0
  298. package/dist/server/src/strategies/api-token-utils.d.ts +13 -0
  299. package/dist/server/src/strategies/api-token-utils.d.ts.map +1 -0
  300. package/dist/server/src/strategies/{api-token.d.ts → content-api-token.d.ts} +10 -11
  301. package/dist/server/src/strategies/content-api-token.d.ts.map +1 -0
  302. package/dist/server/src/strategies/index.d.ts +2 -1
  303. package/dist/server/src/strategies/index.d.ts.map +1 -1
  304. package/dist/server/src/validation/admin-tokens.d.ts +75 -0
  305. package/dist/server/src/validation/admin-tokens.d.ts.map +1 -0
  306. package/dist/server/src/validation/api-tokens.d.ts +4 -2
  307. package/dist/server/src/validation/api-tokens.d.ts.map +1 -1
  308. package/dist/server/src/validation/project-settings.d.ts +10 -10
  309. package/dist/server/src/validation/project-settings.d.ts.map +1 -1
  310. package/dist/shared/contracts/admin-token.d.ts +122 -0
  311. package/dist/shared/contracts/admin-token.d.ts.map +1 -0
  312. package/dist/shared/contracts/api-token.d.ts +6 -95
  313. package/dist/shared/contracts/api-token.d.ts.map +1 -1
  314. package/dist/shared/contracts/content-api-token.d.ts +97 -0
  315. package/dist/shared/contracts/content-api-token.d.ts.map +1 -0
  316. package/dist/shared/contracts/shared.d.ts +1 -0
  317. package/dist/shared/contracts/shared.d.ts.map +1 -1
  318. package/package.json +7 -7
  319. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.js.map +0 -1
  320. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.mjs.map +0 -1
  321. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.js +0 -37
  322. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.js.map +0 -1
  323. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.mjs +0 -16
  324. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.mjs.map +0 -1
  325. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/getDateOfExpiration.js.map +0 -1
  326. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/getDateOfExpiration.mjs.map +0 -1
  327. package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.d.ts +0 -20
  328. package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.d.ts +0 -17
  329. package/dist/server/server/src/strategies/api-token.js +0 -144
  330. package/dist/server/server/src/strategies/api-token.js.map +0 -1
  331. package/dist/server/server/src/strategies/api-token.mjs +0 -138
  332. package/dist/server/server/src/strategies/api-token.mjs.map +0 -1
  333. package/dist/server/src/strategies/api-token.d.ts.map +0 -1
  334. /package/dist/admin/src/pages/Settings/{pages/ApiTokens/EditView → components/Tokens}/utils/getDateOfExpiration.d.ts +0 -0
@@ -0,0 +1,231 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { LinkButton, EmptyStateLayout } from '@strapi/design-system';
4
+ import { Plus } from '@strapi/icons';
5
+ import { EmptyDocuments } from '@strapi/icons/symbols';
6
+ import * as qs from 'qs';
7
+ import { useIntl } from 'react-intl';
8
+ import { useNavigate, Link } from 'react-router-dom';
9
+ import { Layouts } from '../../../../components/Layouts/Layout.mjs';
10
+ import { Page } from '../../../../components/PageHelpers.mjs';
11
+ import { useTypedSelector } from '../../../../core/store/hooks.mjs';
12
+ import { useNotification } from '../../../../features/Notifications.mjs';
13
+ import { useTracking } from '../../../../features/Tracking.mjs';
14
+ import { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler.mjs';
15
+ import { useOnce } from '../../../../hooks/useOnce.mjs';
16
+ import { useRBAC } from '../../../../hooks/useRBAC.mjs';
17
+ import { useGetAdminTokensQuery, useDeleteAdminTokenMutation } from '../../../../services/apiTokens.mjs';
18
+ import { API_TOKEN_TYPE } from '../../components/Tokens/constants.mjs';
19
+ import { Table } from '../../components/Tokens/Table.mjs';
20
+
21
+ const TABLE_HEADERS = [
22
+ {
23
+ name: 'name',
24
+ label: {
25
+ id: 'Settings.adminTokens.ListView.headers.name',
26
+ defaultMessage: 'Name'
27
+ },
28
+ sortable: true
29
+ },
30
+ {
31
+ name: 'description',
32
+ label: {
33
+ id: 'Settings.adminTokens.ListView.headers.description',
34
+ defaultMessage: 'Description'
35
+ },
36
+ sortable: false
37
+ },
38
+ {
39
+ name: 'createdAt',
40
+ label: {
41
+ id: 'Settings.adminTokens.ListView.headers.createdAt',
42
+ defaultMessage: 'Created at'
43
+ },
44
+ sortable: false
45
+ },
46
+ {
47
+ name: 'lastUsedAt',
48
+ label: {
49
+ id: 'Settings.adminTokens.ListView.headers.lastUsedAt',
50
+ defaultMessage: 'Last used'
51
+ },
52
+ sortable: false
53
+ },
54
+ {
55
+ name: 'adminUserOwner',
56
+ label: {
57
+ id: 'Settings.adminTokens.ListView.headers.owner',
58
+ defaultMessage: 'Owner'
59
+ },
60
+ sortable: false
61
+ }
62
+ ];
63
+ const ListView = ()=>{
64
+ const { formatMessage } = useIntl();
65
+ const { toggleNotification } = useNotification();
66
+ const permissions = useTypedSelector((state)=>state.admin_app.permissions.settings?.['admin-tokens']);
67
+ const { allowedActions: { canRead, canCreate, canDelete, canUpdate } } = useRBAC(permissions);
68
+ const navigate = useNavigate();
69
+ const { trackUsage } = useTracking();
70
+ const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
71
+ React.useEffect(()=>{
72
+ navigate({
73
+ search: qs.stringify({
74
+ sort: 'name:ASC'
75
+ }, {
76
+ encode: false
77
+ })
78
+ }, {
79
+ replace: true
80
+ });
81
+ }, [
82
+ navigate
83
+ ]);
84
+ const headers = TABLE_HEADERS.map((header)=>({
85
+ ...header,
86
+ label: formatMessage(header.label)
87
+ }));
88
+ useOnce(()=>{
89
+ trackUsage('willAccessTokenList', {
90
+ tokenType: API_TOKEN_TYPE
91
+ });
92
+ });
93
+ const { data: adminTokens = [], isLoading, error } = useGetAdminTokensQuery();
94
+ React.useEffect(()=>{
95
+ if (error) {
96
+ toggleNotification({
97
+ type: 'danger',
98
+ message: formatAPIError(error)
99
+ });
100
+ }
101
+ }, [
102
+ error,
103
+ formatAPIError,
104
+ toggleNotification
105
+ ]);
106
+ React.useEffect(()=>{
107
+ trackUsage('didAccessTokenList', {
108
+ number: adminTokens.length,
109
+ tokenType: API_TOKEN_TYPE
110
+ });
111
+ }, [
112
+ adminTokens,
113
+ trackUsage
114
+ ]);
115
+ const [deleteToken] = useDeleteAdminTokenMutation();
116
+ const handleDelete = async (id)=>{
117
+ try {
118
+ const res = await deleteToken(id);
119
+ if ('error' in res) {
120
+ toggleNotification({
121
+ type: 'danger',
122
+ message: formatAPIError(res.error)
123
+ });
124
+ return;
125
+ }
126
+ trackUsage('didDeleteToken');
127
+ } catch {
128
+ toggleNotification({
129
+ type: 'danger',
130
+ message: formatMessage({
131
+ id: 'notification.error',
132
+ defaultMessage: 'Something went wrong'
133
+ })
134
+ });
135
+ }
136
+ };
137
+ return /*#__PURE__*/ jsxs(Fragment, {
138
+ children: [
139
+ /*#__PURE__*/ jsx(Page.Title, {
140
+ children: formatMessage({
141
+ id: 'Settings.PageTitle',
142
+ defaultMessage: 'Settings - {name}'
143
+ }, {
144
+ name: 'Admin Tokens'
145
+ })
146
+ }),
147
+ /*#__PURE__*/ jsx(Layouts.Header, {
148
+ title: formatMessage({
149
+ id: 'Settings.adminTokens.title',
150
+ defaultMessage: 'Admin Tokens'
151
+ }),
152
+ subtitle: formatMessage({
153
+ id: 'Settings.adminTokens.description',
154
+ defaultMessage: 'List of generated tokens to programmatically access the admin features'
155
+ }),
156
+ primaryAction: canCreate && /*#__PURE__*/ jsx(LinkButton, {
157
+ tag: Link,
158
+ "data-testid": "create-admin-token-button",
159
+ startIcon: /*#__PURE__*/ jsx(Plus, {}),
160
+ size: "S",
161
+ onClick: ()=>trackUsage('willAddTokenFromList', {
162
+ tokenType: API_TOKEN_TYPE
163
+ }),
164
+ to: "/settings/admin-tokens/create",
165
+ children: formatMessage({
166
+ id: 'Settings.adminTokens.create',
167
+ defaultMessage: 'Create new Admin Token'
168
+ })
169
+ })
170
+ }),
171
+ !canRead ? /*#__PURE__*/ jsx(Page.NoPermissions, {}) : /*#__PURE__*/ jsx(Page.Main, {
172
+ "aria-busy": isLoading,
173
+ children: /*#__PURE__*/ jsxs(Layouts.Content, {
174
+ children: [
175
+ adminTokens.length > 0 && /*#__PURE__*/ jsx(Table, {
176
+ permissions: {
177
+ canRead,
178
+ canDelete,
179
+ canUpdate
180
+ },
181
+ headers: headers,
182
+ isLoading: isLoading,
183
+ onConfirmDelete: handleDelete,
184
+ tokens: adminTokens,
185
+ tokenType: API_TOKEN_TYPE,
186
+ showOwner: true
187
+ }),
188
+ canCreate && adminTokens.length === 0 ? /*#__PURE__*/ jsx(EmptyStateLayout, {
189
+ icon: /*#__PURE__*/ jsx(EmptyDocuments, {
190
+ width: "16rem"
191
+ }),
192
+ content: formatMessage({
193
+ id: 'Settings.adminTokens.addFirstToken',
194
+ defaultMessage: 'Create your first Admin Token'
195
+ }),
196
+ action: /*#__PURE__*/ jsx(LinkButton, {
197
+ tag: Link,
198
+ variant: "secondary",
199
+ startIcon: /*#__PURE__*/ jsx(Plus, {}),
200
+ to: "/settings/admin-tokens/create",
201
+ children: formatMessage({
202
+ id: 'Settings.adminTokens.create',
203
+ defaultMessage: 'Create new Admin Token'
204
+ })
205
+ })
206
+ }) : null,
207
+ !canCreate && adminTokens.length === 0 ? /*#__PURE__*/ jsx(EmptyStateLayout, {
208
+ icon: /*#__PURE__*/ jsx(EmptyDocuments, {
209
+ width: "16rem"
210
+ }),
211
+ content: formatMessage({
212
+ id: 'Settings.adminTokens.emptyStateLayout',
213
+ defaultMessage: "You don't have any content yet..."
214
+ })
215
+ }) : null
216
+ ]
217
+ })
218
+ })
219
+ ]
220
+ });
221
+ };
222
+ const ProtectedListView = ()=>{
223
+ const permissions = useTypedSelector((state)=>state.admin_app.permissions.settings?.['admin-tokens']?.main);
224
+ return /*#__PURE__*/ jsx(Page.Protect, {
225
+ permissions: permissions,
226
+ children: /*#__PURE__*/ jsx(ListView, {})
227
+ });
228
+ };
229
+
230
+ export { ListView, ProtectedListView };
231
+ //# sourceMappingURL=ListView.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListView.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/AdminTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { EmptyStateLayout, LinkButton } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useOnce } from '../../../../hooks/useOnce';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport {\n useDeleteAdminTokenMutation,\n useGetAdminTokensQuery,\n} from '../../../../services/apiTokens';\nimport { API_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nimport type { Data } from '@strapi/types';\n\nconst TABLE_HEADERS = [\n {\n name: 'name',\n label: {\n id: 'Settings.adminTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.adminTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.adminTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.adminTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n {\n name: 'adminUserOwner',\n label: {\n id: 'Settings.adminTokens.ListView.headers.owner',\n defaultMessage: 'Owner',\n },\n sortable: false,\n },\n];\n\nexport const ListView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['admin-tokens']\n );\n const {\n allowedActions: { canRead, canCreate, canDelete, canUpdate },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) }, { replace: true });\n }, [navigate]);\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: API_TOKEN_TYPE,\n });\n });\n\n const { data: adminTokens = [], isLoading, error } = useGetAdminTokensQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n trackUsage('didAccessTokenList', { number: adminTokens.length, tokenType: API_TOKEN_TYPE });\n }, [adminTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAdminTokenMutation();\n\n const handleDelete = async (id: Data.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n trackUsage('didDeleteToken');\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'Admin Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.adminTokens.title', defaultMessage: 'Admin Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.adminTokens.description',\n defaultMessage: 'List of generated tokens to programmatically access the admin features',\n })}\n primaryAction={\n canCreate && (\n <LinkButton\n tag={Link}\n data-testid=\"create-admin-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() => trackUsage('willAddTokenFromList', { tokenType: API_TOKEN_TYPE })}\n to=\"/settings/admin-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.adminTokens.create',\n defaultMessage: 'Create new Admin Token',\n })}\n </LinkButton>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <Layouts.Content>\n {adminTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={adminTokens}\n tokenType={API_TOKEN_TYPE}\n showOwner\n />\n )}\n {canCreate && adminTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.adminTokens.addFirstToken',\n defaultMessage: 'Create your first Admin Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/admin-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.adminTokens.create',\n defaultMessage: 'Create new Admin Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && adminTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.adminTokens.emptyStateLayout',\n defaultMessage: \"You don't have any content yet...\",\n })}\n />\n ) : null}\n </Layouts.Content>\n </Page.Main>\n )}\n </>\n );\n};\n\nexport const ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['admin-tokens']?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n"],"names":["TABLE_HEADERS","name","label","id","defaultMessage","sortable","ListView","formatMessage","useIntl","toggleNotification","useNotification","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canCreate","canDelete","canUpdate","useRBAC","navigate","useNavigate","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","React","useEffect","search","qs","stringify","sort","encode","replace","headers","map","header","useOnce","tokenType","API_TOKEN_TYPE","data","adminTokens","isLoading","error","useGetAdminTokensQuery","type","message","number","length","deleteToken","useDeleteAdminTokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","Page","Title","Layouts","Header","title","subtitle","primaryAction","LinkButton","tag","Link","data-testid","startIcon","Plus","size","onClick","to","NoPermissions","Main","aria-busy","Content","Table","onConfirmDelete","tokens","showOwner","EmptyStateLayout","icon","EmptyDocuments","width","content","action","variant","ProtectedListView","main","Protect"],"mappings":"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"}
@@ -17,12 +17,11 @@ var apiTokens = require('../../../../../services/apiTokens.js');
17
17
  var contentApi = require('../../../../../services/contentApi.js');
18
18
  var baseQuery = require('../../../../../utils/baseQuery.js');
19
19
  var constants = require('../../../components/Tokens/constants.js');
20
+ var FormApiTokenContainer = require('../../../components/Tokens/FormApiTokenContainer.js');
20
21
  var FormHead = require('../../../components/Tokens/FormHead.js');
21
22
  var TokenBox = require('../../../components/Tokens/TokenBox.js');
22
23
  var apiTokenPermissions = require('./apiTokenPermissions.js');
23
- var FormApiTokenContainer = require('./components/FormApiTokenContainer.js');
24
24
  var Permissions = require('./components/Permissions.js');
25
- var constants$1 = require('./constants.js');
26
25
  var reducer = require('./reducer.js');
27
26
 
28
27
  function _interopNamespaceDefault(e) {
@@ -52,10 +51,10 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
52
51
  const { toggleNotification } = Notifications.useNotification();
53
52
  const { state: locationState } = reactRouterDom.useLocation();
54
53
  const permissions = hooks.useTypedSelector((state)=>state.admin_app.permissions);
55
- const [apiToken, setApiToken] = React__namespace.useState(locationState?.apiToken?.accessKey ? {
54
+ const [apiToken, setApiToken] = React__namespace.useState(locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== '' ? {
56
55
  ...locationState.apiToken
57
56
  } : null);
58
- const [showToken, setShowToken] = React__namespace.useState(Boolean(locationState?.apiToken?.accessKey));
57
+ const [showToken, setShowToken] = React__namespace.useState(locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== '');
59
58
  const hideTimerRef = React__namespace.useRef(null);
60
59
  const { trackUsage } = Tracking.useTracking();
61
60
  const { allowedActions: { canCreate, canUpdate, canRegenerate } } = useRBAC.useRBAC(permissions.settings?.['api-tokens']);
@@ -63,7 +62,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
63
62
  const match = reactRouterDom.useMatch('/settings/api-tokens/:id');
64
63
  const id = match?.params?.id;
65
64
  const isCreating = id === 'create';
66
- const { _unstableFormatAPIError: formatAPIError, _unstableFormatValidationErrors: formatValidtionErrors } = useAPIErrorHandler.useAPIErrorHandler();
65
+ const { _unstableFormatAPIError: formatAPIError, _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler.useAPIErrorHandler();
67
66
  const navigate = reactRouterDom.useNavigate();
68
67
  const contentAPIPermissionsQuery = contentApi.useGetPermissionsQuery();
69
68
  const contentAPIRoutesQuery = contentApi.useGetRoutesQuery();
@@ -115,7 +114,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
115
114
  contentAPIRoutesQuery.data
116
115
  ]);
117
116
  React__namespace.useEffect(()=>{
118
- if (apiToken) {
117
+ if (apiToken !== null) {
119
118
  if (apiToken.type === 'read-only') {
120
119
  dispatch({
121
120
  type: 'ON_CHANGE_READ_ONLY'
@@ -129,7 +128,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
129
128
  if (apiToken.type === 'custom') {
130
129
  dispatch({
131
130
  type: 'UPDATE_PERMISSIONS',
132
- value: apiToken?.permissions
131
+ value: apiToken.permissions
133
132
  });
134
133
  }
135
134
  }
@@ -162,21 +161,23 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
162
161
  React__namespace.useEffect(()=>{
163
162
  if (data) {
164
163
  setApiToken(data);
165
- if (data.type === 'read-only') {
166
- dispatch({
167
- type: 'ON_CHANGE_READ_ONLY'
168
- });
169
- }
170
- if (data.type === 'full-access') {
171
- dispatch({
172
- type: 'SELECT_ALL_ACTIONS'
173
- });
174
- }
175
- if (data.type === 'custom') {
176
- dispatch({
177
- type: 'UPDATE_PERMISSIONS',
178
- value: data?.permissions
179
- });
164
+ if (data.kind === 'content-api') {
165
+ if (data.type === 'read-only') {
166
+ dispatch({
167
+ type: 'ON_CHANGE_READ_ONLY'
168
+ });
169
+ }
170
+ if (data.type === 'full-access') {
171
+ dispatch({
172
+ type: 'SELECT_ALL_ACTIONS'
173
+ });
174
+ }
175
+ if (data.type === 'custom') {
176
+ dispatch({
177
+ type: 'UPDATE_PERMISSIONS',
178
+ value: data.permissions
179
+ });
180
+ }
180
181
  }
181
182
  }
182
183
  }, [
@@ -201,6 +202,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
201
202
  ]);
202
203
  const [createToken] = apiTokens.useCreateAPITokenMutation();
203
204
  const [updateToken] = apiTokens.useUpdateAPITokenMutation();
205
+ const buildLifespan = (raw)=>raw && raw !== '0' ? parseInt(raw.toString(), 10) : null;
204
206
  const handleSubmit = async (body, formik)=>{
205
207
  trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {
206
208
  tokenType: constants.API_TOKEN_TYPE
@@ -208,14 +210,15 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
208
210
  try {
209
211
  if (isCreating) {
210
212
  const res = await createToken({
211
- ...body,
212
- // lifespan must be "null" for unlimited (0 would mean instantly expired and isn't accepted)
213
- lifespan: body?.lifespan && body.lifespan !== '0' ? parseInt(body.lifespan.toString(), 10) : null,
213
+ name: body.name,
214
+ description: body.description,
215
+ type: body.type,
216
+ lifespan: buildLifespan(body.lifespan),
214
217
  permissions: body.type === 'custom' ? state.selectedActions : null
215
218
  });
216
219
  if ('error' in res) {
217
220
  if (baseQuery.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
218
- formik.setErrors(formatValidtionErrors(res.error));
221
+ formik.setErrors(formatValidationErrors(res.error));
219
222
  } else {
220
223
  toggleNotification({
221
224
  type: 'danger',
@@ -232,7 +235,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
232
235
  })
233
236
  });
234
237
  trackUsage('didCreateToken', {
235
- type: res.data.type,
238
+ kind: 'content-api',
236
239
  tokenType: constants.API_TOKEN_TYPE
237
240
  });
238
241
  navigate(`../api-tokens/${res.data.id.toString()}`, {
@@ -251,7 +254,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
251
254
  });
252
255
  if ('error' in res) {
253
256
  if (baseQuery.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
254
- formik.setErrors(formatValidtionErrors(res.error));
257
+ formik.setErrors(formatValidationErrors(res.error));
255
258
  } else {
256
259
  toggleNotification({
257
260
  type: 'danger',
@@ -268,6 +271,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
268
271
  })
269
272
  });
270
273
  trackUsage('didEditToken', {
274
+ kind: res.data.kind,
271
275
  type: res.data.type,
272
276
  tokenType: constants.API_TOKEN_TYPE
273
277
  });
@@ -317,7 +321,8 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
317
321
  setSelectedAction
318
322
  };
319
323
  const canEditInputs = canUpdate && !isCreating || canCreate && isCreating;
320
- const canShowToken = !!apiToken?.accessKey;
324
+ const canShowToken = apiToken?.accessKey !== undefined && apiToken.accessKey !== '';
325
+ const initialType = apiToken !== null && apiToken.kind === 'content-api' ? apiToken.type : undefined;
321
326
  if (isLoading) {
322
327
  return /*#__PURE__*/ jsxRuntime.jsx(PageHelpers.Page.Loading, {});
323
328
  }
@@ -334,12 +339,12 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
334
339
  })
335
340
  }),
336
341
  /*#__PURE__*/ jsxRuntime.jsx(formik.Formik, {
337
- validationSchema: constants$1.schema,
342
+ validationSchema: constants.apiTokenInformationSchema,
338
343
  validateOnChange: false,
339
344
  initialValues: {
340
345
  name: apiToken?.name || '',
341
346
  description: apiToken?.description || '',
342
- type: apiToken?.type,
347
+ type: initialType,
343
348
  lifespan: apiToken?.lifespan
344
349
  },
345
350
  enableReinitialize: true,
@@ -351,9 +356,12 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
351
356
  return /*#__PURE__*/ jsxRuntime.jsxs(formik.Form, {
352
357
  children: [
353
358
  /*#__PURE__*/ jsxRuntime.jsx(FormHead.FormHead, {
354
- title: {
359
+ title: isCreating ? {
355
360
  id: 'Settings.apiTokens.createPage.title',
356
361
  defaultMessage: 'Create API Token'
362
+ } : {
363
+ id: 'Settings.apiTokens.createPage.title',
364
+ defaultMessage: 'Edit API Token'
357
365
  },
358
366
  token: apiToken,
359
367
  setToken: setApiToken,
@@ -371,7 +379,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
371
379
  alignItems: "stretch",
372
380
  gap: 6,
373
381
  children: [
374
- apiToken?.accessKey && showToken && /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
382
+ apiToken?.accessKey !== undefined && apiToken.accessKey !== '' && showToken === true && /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
375
383
  children: /*#__PURE__*/ jsxRuntime.jsx(TokenBox.ApiTokenBox, {
376
384
  token: apiToken.accessKey,
377
385
  tokenType: constants.API_TOKEN_TYPE
@@ -384,6 +392,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
384
392
  isCreating: isCreating,
385
393
  values: values,
386
394
  apiToken: apiToken,
395
+ kind: "content-api",
387
396
  onDispatch: dispatch,
388
397
  setHasChangedPermissions: setHasChangedPermissions
389
398
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"EditViewPage.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex } from '@strapi/design-system';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../../components/Layouts/Layout';\nimport { Page } from '../../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useTracking } from '../../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../hooks/useRBAC';\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 { ApiTokenBox } from '../../../components/Tokens/TokenBox';\n\nimport {\n ApiTokenPermissionsContextValue,\n ApiTokenPermissionsProvider,\n} from './apiTokenPermissions';\nimport { FormApiTokenContainer } from './components/FormApiTokenContainer';\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 const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { state: locationState } = useLocation();\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\n const [showToken, setShowToken] = React.useState(Boolean(locationState?.apiToken?.accessKey));\n const hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const { trackUsage } = useTracking();\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['api-tokens']);\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const match = useMatch('/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 navigate = useNavigate();\n\n const contentAPIPermissionsQuery = useGetPermissionsQuery();\n const contentAPIRoutesQuery = useGetRoutesQuery();\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: 'danger',\n message: formatAPIError(contentAPIPermissionsQuery.error),\n });\n }\n }, [contentAPIPermissionsQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.error) {\n toggleNotification({\n type: 'danger',\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: 'danger',\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 React.useEffect(() => {\n // Only set up timer when token is shown\n if (showToken) {\n hideTimerRef.current = setTimeout(() => {\n setShowToken(false);\n }, 30000); // 30 seconds\n\n // Cleanup on unmount or when showToken changes\n return () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n }\n }, [showToken]);\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 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:\n body?.lifespan && body.lifespan !== '0' ? parseInt(body.lifespan.toString(), 10) : 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: 'danger',\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 navigate(`../api-tokens/${res.data.id.toString()}`, {\n state: { apiToken: res.data },\n replace: true,\n });\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: 'danger',\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: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\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 toggleToken = () => {\n setShowToken((prev) => !prev);\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\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 const canShowToken = !!apiToken?.accessKey;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\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 title={{\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }}\n token={apiToken}\n setToken={setApiToken}\n toggleToken={toggleToken}\n showToken={showToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n canShowToken={canShowToken}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {apiToken?.accessKey && showToken && (\n <>\n <ApiTokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\n </>\n )}\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 </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n </Page.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 <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["EditView","formatMessage","useIntl","toggleNotification","useNotification","state","locationState","useLocation","permissions","useTypedSelector","admin_app","apiToken","setApiToken","React","useState","accessKey","showToken","setShowToken","Boolean","hideTimerRef","useRef","trackUsage","useTracking","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","settings","dispatch","useReducer","reducer","initialState","match","useMatch","id","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidtionErrors","useAPIErrorHandler","navigate","useNavigate","contentAPIPermissionsQuery","useGetPermissionsQuery","contentAPIRoutesQuery","useGetRoutesQuery","useEffect","error","type","message","data","value","tokenType","API_TOKEN_TYPE","isLoading","useGetAPITokenQuery","skip","current","setTimeout","clearTimeout","createToken","useCreateAPITokenMutation","updateToken","useUpdateAPITokenMutation","handleSubmit","body","formik","res","lifespan","parseInt","toString","selectedActions","isBaseQueryError","name","setErrors","defaultMessage","replace","description","hasChangedPermissions","setHasChangedPermissions","handleChangeCheckbox","target","handleChangeSelectAllCheckbox","setSelectedAction","toggleToken","prev","providerValue","onChange","onChangeSelectAll","canEditInputs","canShowToken","_jsx","Page","Loading","ApiTokenPermissionsProvider","_jsxs","Main","Title","Formik","validationSchema","schema","validateOnChange","initialValues","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","setFieldValue","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","_Fragment","ApiTokenBox","FormApiTokenContainer","onDispatch","Permissions","disabled","ProtectedEditView","read","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"EditViewPage.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex } from '@strapi/design-system';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../../components/Layouts/Layout';\nimport { Page } from '../../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useTracking } from '../../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../hooks/useRBAC';\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, apiTokenInformationSchema } from '../../../components/Tokens/constants';\nimport { FormApiTokenContainer } from '../../../components/Tokens/FormApiTokenContainer';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { ApiTokenBox } from '../../../components/Tokens/TokenBox';\n\nimport {\n ApiTokenPermissionsContextValue,\n ApiTokenPermissionsProvider,\n} from './apiTokenPermissions';\nimport { Permissions } from './components/Permissions';\nimport { initialState, reducer } from './reducer';\n\nimport type { ContentApiApiToken, Get } 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 const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { state: locationState } = useLocation();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ContentApiApiToken | null>(\n locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== ''\n ? {\n ...locationState.apiToken,\n }\n : null\n );\n\n const [showToken, setShowToken] = React.useState(\n locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== ''\n );\n const hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const { trackUsage } = useTracking();\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['api-tokens']);\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const match = useMatch('/settings/api-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const navigate = useNavigate();\n\n const contentAPIPermissionsQuery = useGetPermissionsQuery();\n const contentAPIRoutesQuery = useGetRoutesQuery();\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: 'danger',\n message: formatAPIError(contentAPIPermissionsQuery.error),\n });\n }\n }, [contentAPIPermissionsQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.error) {\n toggleNotification({\n type: 'danger',\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 !== null) {\n if (apiToken.type === 'read-only') {\n dispatch({ type: 'ON_CHANGE_READ_ONLY' });\n }\n if (apiToken.type === 'full-access') {\n dispatch({ type: 'SELECT_ALL_ACTIONS' });\n }\n if (apiToken.type === 'custom') {\n dispatch({ type: 'UPDATE_PERMISSIONS', value: apiToken.permissions });\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: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (data) {\n setApiToken(data);\n\n if (data.kind === 'content-api') {\n if (data.type === 'read-only') {\n dispatch({ type: 'ON_CHANGE_READ_ONLY' });\n }\n if (data.type === 'full-access') {\n dispatch({ type: 'SELECT_ALL_ACTIONS' });\n }\n if (data.type === 'custom') {\n dispatch({ type: 'UPDATE_PERMISSIONS', value: data.permissions });\n }\n }\n }\n }, [data]);\n\n React.useEffect(() => {\n // Only set up timer when token is shown\n if (showToken) {\n hideTimerRef.current = setTimeout(() => {\n setShowToken(false);\n }, 30000); // 30 seconds\n\n // Cleanup on unmount or when showToken changes\n return () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n }\n }, [showToken]);\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: ContentApiApiToken['type'] | undefined;\n }\n\n const buildLifespan = (raw: FormValues['lifespan']): number | null =>\n raw && raw !== '0' ? parseInt(raw.toString(), 10) : null;\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n try {\n if (isCreating) {\n const res = await createToken({\n name: body.name,\n description: body.description,\n type: body.type!,\n lifespan: buildLifespan(body.lifespan),\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(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\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 kind: 'content-api',\n tokenType: API_TOKEN_TYPE,\n });\n\n navigate(`../api-tokens/${res.data.id.toString()}`, {\n state: { apiToken: res.data },\n replace: true,\n });\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(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\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 kind: res.data.kind,\n type: (res.data as ContentApiApiToken).type,\n tokenType: API_TOKEN_TYPE,\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\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 toggleToken = () => {\n setShowToken((prev) => !prev);\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\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 const canShowToken = apiToken?.accessKey !== undefined && apiToken.accessKey !== '';\n\n const initialType =\n apiToken !== null && apiToken.kind === 'content-api' ? apiToken.type : undefined;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Formik\n validationSchema={apiTokenInformationSchema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: initialType,\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 title={\n isCreating\n ? {\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }\n : {\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Edit API Token',\n }\n }\n token={apiToken}\n setToken={setApiToken}\n toggleToken={toggleToken}\n showToken={showToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n canShowToken={canShowToken}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {apiToken?.accessKey !== undefined &&\n apiToken.accessKey !== '' &&\n showToken === true && (\n <>\n <ApiTokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\n </>\n )}\n\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n kind=\"content-api\"\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n </Page.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 <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["EditView","formatMessage","useIntl","toggleNotification","useNotification","state","locationState","useLocation","permissions","useTypedSelector","admin_app","apiToken","setApiToken","React","useState","accessKey","undefined","showToken","setShowToken","hideTimerRef","useRef","trackUsage","useTracking","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","settings","dispatch","useReducer","reducer","initialState","match","useMatch","id","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","navigate","useNavigate","contentAPIPermissionsQuery","useGetPermissionsQuery","contentAPIRoutesQuery","useGetRoutesQuery","useEffect","error","type","message","data","value","tokenType","API_TOKEN_TYPE","isLoading","useGetAPITokenQuery","skip","kind","current","setTimeout","clearTimeout","createToken","useCreateAPITokenMutation","updateToken","useUpdateAPITokenMutation","buildLifespan","raw","parseInt","toString","handleSubmit","body","formik","res","name","description","lifespan","selectedActions","isBaseQueryError","setErrors","defaultMessage","replace","hasChangedPermissions","setHasChangedPermissions","handleChangeCheckbox","target","handleChangeSelectAllCheckbox","setSelectedAction","toggleToken","prev","providerValue","onChange","onChangeSelectAll","canEditInputs","canShowToken","initialType","_jsx","Page","Loading","ApiTokenPermissionsProvider","_jsxs","Main","Title","Formik","validationSchema","apiTokenInformationSchema","validateOnChange","initialValues","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","setFieldValue","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","_Fragment","ApiTokenBox","FormApiTokenContainer","onDispatch","Permissions","disabled","ProtectedEditView","read","Protect"],"mappings":"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"}