@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,314 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var designSystem = require('@strapi/design-system');
6
+ var formik = require('formik');
7
+ var reactIntl = require('react-intl');
8
+ var reactRouterDom = require('react-router-dom');
9
+ var Layout = require('../../../../../components/Layouts/Layout.js');
10
+ var PageHelpers = require('../../../../../components/PageHelpers.js');
11
+ var hooks = require('../../../../../core/store/hooks.js');
12
+ var Auth = require('../../../../../features/Auth.js');
13
+ var Notifications = require('../../../../../features/Notifications.js');
14
+ var Tracking = require('../../../../../features/Tracking.js');
15
+ var useAPIErrorHandler = require('../../../../../hooks/useAPIErrorHandler.js');
16
+ var useRBAC = require('../../../../../hooks/useRBAC.js');
17
+ var apiTokens = require('../../../../../services/apiTokens.js');
18
+ var baseQuery = require('../../../../../utils/baseQuery.js');
19
+ var constants = require('../../../components/Tokens/constants.js');
20
+ var FormApiTokenContainer = require('../../../components/Tokens/FormApiTokenContainer.js');
21
+ var FormHead = require('../../../components/Tokens/FormHead.js');
22
+ var TokenBox = require('../../../components/Tokens/TokenBox.js');
23
+ var AdminPermissions = require('./components/AdminPermissions.js');
24
+
25
+ function _interopNamespaceDefault(e) {
26
+ var n = Object.create(null);
27
+ if (e) {
28
+ Object.keys(e).forEach(function (k) {
29
+ if (k !== 'default') {
30
+ var d = Object.getOwnPropertyDescriptor(e, k);
31
+ Object.defineProperty(n, k, d.get ? d : {
32
+ enumerable: true,
33
+ get: function () { return e[k]; }
34
+ });
35
+ }
36
+ });
37
+ }
38
+ n.default = e;
39
+ return Object.freeze(n);
40
+ }
41
+
42
+ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
43
+
44
+ const getOwnerId = (owner)=>{
45
+ if (owner === undefined || owner === null) return null;
46
+ return typeof owner === 'object' ? owner.id : owner;
47
+ };
48
+ const isCurrentUserTokenOwner = (apiToken, currentUserId)=>{
49
+ if (apiToken === null || apiToken.kind !== 'admin') return true;
50
+ const ownerId = getOwnerId(apiToken.adminUserOwner);
51
+ if (ownerId === null) return true;
52
+ return currentUserId !== undefined && ownerId === currentUserId;
53
+ };
54
+ const EditView = ()=>{
55
+ const { formatMessage } = reactIntl.useIntl();
56
+ const { toggleNotification } = Notifications.useNotification();
57
+ const { state: locationState } = reactRouterDom.useLocation();
58
+ const permissions = hooks.useTypedSelector((state)=>state.admin_app.permissions);
59
+ const [apiToken, setApiToken] = React__namespace.useState(locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== '' ? {
60
+ ...locationState.apiToken
61
+ } : null);
62
+ const [showToken, setShowToken] = React__namespace.useState(locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== '');
63
+ const hideTimerRef = React__namespace.useRef(null);
64
+ const adminPermissionsRef = React__namespace.useRef(null);
65
+ const { trackUsage } = Tracking.useTracking();
66
+ const currentUser = Auth.useAuth('EditView', (state)=>state.user);
67
+ const { allowedActions: { canCreate, canUpdate, canRegenerate } } = useRBAC.useRBAC(permissions.settings?.['admin-tokens']);
68
+ const match = reactRouterDom.useMatch('/settings/admin-tokens/:id');
69
+ const id = match?.params?.id;
70
+ const isCreating = id === 'create';
71
+ const { _unstableFormatAPIError: formatAPIError, _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler.useAPIErrorHandler();
72
+ const navigate = reactRouterDom.useNavigate();
73
+ React__namespace.useEffect(()=>{
74
+ trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {
75
+ tokenType: constants.API_TOKEN_TYPE
76
+ });
77
+ }, [
78
+ isCreating,
79
+ trackUsage
80
+ ]);
81
+ const { data, error, isLoading } = apiTokens.useGetAdminTokenQuery(id, {
82
+ skip: !id || isCreating,
83
+ refetchOnMountOrArgChange: true
84
+ });
85
+ React__namespace.useEffect(()=>{
86
+ if (error) {
87
+ toggleNotification({
88
+ type: 'danger',
89
+ message: formatAPIError(error)
90
+ });
91
+ }
92
+ }, [
93
+ error,
94
+ formatAPIError,
95
+ toggleNotification
96
+ ]);
97
+ React__namespace.useEffect(()=>{
98
+ if (data) {
99
+ setApiToken(data);
100
+ }
101
+ }, [
102
+ data
103
+ ]);
104
+ React__namespace.useEffect(()=>{
105
+ if (showToken) {
106
+ hideTimerRef.current = setTimeout(()=>{
107
+ setShowToken(false);
108
+ }, 30000); // 30 seconds
109
+ return ()=>{
110
+ if (hideTimerRef.current) {
111
+ clearTimeout(hideTimerRef.current);
112
+ hideTimerRef.current = null;
113
+ }
114
+ };
115
+ }
116
+ }, [
117
+ showToken
118
+ ]);
119
+ const [createToken] = apiTokens.useCreateAdminTokenMutation();
120
+ const [updateToken] = apiTokens.useUpdateAdminTokenMutation();
121
+ const buildLifespan = (raw)=>raw && raw !== '0' ? parseInt(raw.toString(), 10) : null;
122
+ const handleSubmit = async (body, formik)=>{
123
+ trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {
124
+ tokenType: constants.API_TOKEN_TYPE
125
+ });
126
+ const adminPermissionsToSend = adminPermissionsRef.current?.getPermissions().permissionsToSend ?? [];
127
+ try {
128
+ if (isCreating) {
129
+ const res = await createToken({
130
+ name: body.name,
131
+ description: body.description,
132
+ lifespan: buildLifespan(body.lifespan),
133
+ adminPermissions: adminPermissionsToSend
134
+ });
135
+ if ('error' in res) {
136
+ if (baseQuery.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
137
+ formik.setErrors(formatValidationErrors(res.error));
138
+ } else {
139
+ toggleNotification({
140
+ type: 'danger',
141
+ message: formatAPIError(res.error)
142
+ });
143
+ }
144
+ return;
145
+ }
146
+ toggleNotification({
147
+ type: 'success',
148
+ message: formatMessage({
149
+ id: 'notification.success.adminTokenCreated',
150
+ defaultMessage: 'Admin Token successfully created'
151
+ })
152
+ });
153
+ trackUsage('didCreateToken', {
154
+ kind: 'admin',
155
+ tokenType: constants.API_TOKEN_TYPE
156
+ });
157
+ adminPermissionsRef.current?.setFormAfterSubmit();
158
+ navigate(`../admin-tokens/${res.data.id.toString()}`, {
159
+ state: {
160
+ apiToken: res.data
161
+ },
162
+ replace: true
163
+ });
164
+ } else {
165
+ const res = await updateToken({
166
+ id: id,
167
+ name: body.name,
168
+ description: body.description,
169
+ adminPermissions: adminPermissionsToSend
170
+ });
171
+ if ('error' in res) {
172
+ if (baseQuery.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
173
+ formik.setErrors(formatValidationErrors(res.error));
174
+ } else {
175
+ toggleNotification({
176
+ type: 'danger',
177
+ message: formatAPIError(res.error)
178
+ });
179
+ }
180
+ return;
181
+ }
182
+ toggleNotification({
183
+ type: 'success',
184
+ message: formatMessage({
185
+ id: 'notification.success.adminTokenEdited',
186
+ defaultMessage: 'Admin Token successfully edited'
187
+ })
188
+ });
189
+ trackUsage('didEditToken', {
190
+ kind: 'admin',
191
+ tokenType: constants.API_TOKEN_TYPE
192
+ });
193
+ adminPermissionsRef.current?.setFormAfterSubmit();
194
+ }
195
+ } catch {
196
+ toggleNotification({
197
+ type: 'danger',
198
+ message: formatMessage({
199
+ id: 'notification.error',
200
+ defaultMessage: 'Something went wrong'
201
+ })
202
+ });
203
+ }
204
+ };
205
+ const toggleToken = ()=>{
206
+ setShowToken((prev)=>!prev);
207
+ if (hideTimerRef.current) {
208
+ clearTimeout(hideTimerRef.current);
209
+ hideTimerRef.current = null;
210
+ }
211
+ };
212
+ const canEditInputs = canUpdate && !isCreating || canCreate && isCreating;
213
+ const canShowToken = apiToken?.accessKey !== undefined && apiToken.accessKey !== '';
214
+ const canRegenerateToken = canRegenerate && isCurrentUserTokenOwner(apiToken, currentUser?.id);
215
+ const initialAdminPermissions = apiToken !== null && apiToken.kind === 'admin' ? apiToken.adminPermissions ?? [] : [];
216
+ const ownerUserId = apiToken !== null && apiToken.kind === 'admin' ? getOwnerId(apiToken.adminUserOwner) : null;
217
+ if (isLoading || !isCreating && apiToken === null) {
218
+ return /*#__PURE__*/ jsxRuntime.jsx(PageHelpers.Page.Loading, {});
219
+ }
220
+ return /*#__PURE__*/ jsxRuntime.jsxs(PageHelpers.Page.Main, {
221
+ children: [
222
+ /*#__PURE__*/ jsxRuntime.jsx(PageHelpers.Page.Title, {
223
+ children: formatMessage({
224
+ id: 'Settings.PageTitle',
225
+ defaultMessage: 'Settings - {name}'
226
+ }, {
227
+ name: 'Admin Tokens'
228
+ })
229
+ }),
230
+ /*#__PURE__*/ jsxRuntime.jsx(formik.Formik, {
231
+ validationSchema: constants.apiTokenInformationSchema,
232
+ validateOnChange: false,
233
+ initialValues: {
234
+ name: apiToken?.name || '',
235
+ description: apiToken?.description || '',
236
+ type: undefined,
237
+ lifespan: apiToken?.lifespan
238
+ },
239
+ enableReinitialize: true,
240
+ onSubmit: (body, actions)=>handleSubmit(body, actions),
241
+ children: ({ errors, handleChange, isSubmitting, values })=>/*#__PURE__*/ jsxRuntime.jsxs(formik.Form, {
242
+ children: [
243
+ /*#__PURE__*/ jsxRuntime.jsx(FormHead.FormHead, {
244
+ title: isCreating ? {
245
+ id: 'Settings.adminTokens.createPage.title',
246
+ defaultMessage: 'Create Admin Token'
247
+ } : {
248
+ id: 'Settings.adminTokens.editPage.title',
249
+ defaultMessage: 'Edit Admin Token'
250
+ },
251
+ token: apiToken,
252
+ setToken: setApiToken,
253
+ toggleToken: toggleToken,
254
+ showToken: showToken,
255
+ canEditInputs: canEditInputs,
256
+ canRegenerate: canRegenerateToken,
257
+ canShowToken: canShowToken,
258
+ isSubmitting: isSubmitting,
259
+ regenerateUrl: "/admin/admin-tokens/"
260
+ }),
261
+ /*#__PURE__*/ jsxRuntime.jsx(Layout.Layouts.Content, {
262
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
263
+ direction: "column",
264
+ alignItems: "stretch",
265
+ gap: 6,
266
+ children: [
267
+ apiToken?.accessKey !== undefined && apiToken.accessKey !== '' && showToken === true && /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
268
+ children: /*#__PURE__*/ jsxRuntime.jsx(TokenBox.ApiTokenBox, {
269
+ token: apiToken.accessKey,
270
+ tokenType: constants.API_TOKEN_TYPE
271
+ })
272
+ }),
273
+ /*#__PURE__*/ jsxRuntime.jsx(FormApiTokenContainer.FormApiTokenContainer, {
274
+ errors: errors,
275
+ onChange: handleChange,
276
+ canEditInputs: canEditInputs,
277
+ isCreating: isCreating,
278
+ values: values,
279
+ apiToken: apiToken,
280
+ kind: "admin",
281
+ onDispatch: ()=>{},
282
+ setHasChangedPermissions: ()=>{}
283
+ }),
284
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
285
+ shadow: "filterShadow",
286
+ hasRadius: true,
287
+ children: /*#__PURE__*/ jsxRuntime.jsx(AdminPermissions.AdminPermissions, {
288
+ ref: adminPermissionsRef,
289
+ disabled: !canEditInputs,
290
+ initialAdminPermissions: initialAdminPermissions,
291
+ tokenId: !isCreating && id ? id : undefined,
292
+ ownerUserId: ownerUserId
293
+ })
294
+ })
295
+ ]
296
+ })
297
+ })
298
+ ]
299
+ })
300
+ })
301
+ ]
302
+ });
303
+ };
304
+ const ProtectedEditView = ()=>{
305
+ const permissions = hooks.useTypedSelector((state)=>state.admin_app.permissions.settings?.['admin-tokens']?.read);
306
+ return /*#__PURE__*/ jsxRuntime.jsx(PageHelpers.Page.Protect, {
307
+ permissions: permissions,
308
+ children: /*#__PURE__*/ jsxRuntime.jsx(EditView, {})
309
+ });
310
+ };
311
+
312
+ exports.EditView = EditView;
313
+ exports.ProtectedEditView = ProtectedEditView;
314
+ //# sourceMappingURL=EditViewPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditViewPage.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Box } 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 { useAuth } from '../../../../../features/Auth';\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useTracking } from '../../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../hooks/useRBAC';\nimport {\n useCreateAdminTokenMutation,\n useGetAdminTokenQuery,\n useUpdateAdminTokenMutation,\n} from '../../../../../services/apiTokens';\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 { AdminPermissions } from './components/AdminPermissions';\n\nimport type { AdminApiToken, Get } from '../../../../../../../shared/contracts/admin-token';\nimport type { ApiToken } from '../../../../../../../shared/contracts/api-token';\nimport type { AuthContextValue } from '../../../../../features/Auth';\nimport type { PermissionsAPI } from '../../Roles/components/Permissions';\nimport type { Data } from '@strapi/types';\n\nconst getOwnerId = (owner: AdminApiToken['adminUserOwner']): Data.ID | null => {\n if (owner === undefined || owner === null) return null;\n return typeof owner === 'object' ? owner.id : owner;\n};\n\nconst isCurrentUserTokenOwner = (\n apiToken: ApiToken | null,\n currentUserId: Data.ID | undefined\n): boolean => {\n if (apiToken === null || apiToken.kind !== 'admin') return true;\n const ownerId = getOwnerId(apiToken.adminUserOwner);\n if (ownerId === null) return true;\n return currentUserId !== undefined && ownerId === currentUserId;\n};\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 !== undefined && locationState?.apiToken?.accessKey !== ''\n ? { ...locationState.apiToken }\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 adminPermissionsRef = React.useRef<PermissionsAPI>(null);\n const { trackUsage } = useTracking();\n const currentUser = useAuth('EditView', (state: AuthContextValue) => state.user);\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['admin-tokens']);\n const match = useMatch('/settings/admin-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 React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAdminTokenQuery(id!, {\n skip: !id || isCreating,\n refetchOnMountOrArgChange: true,\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 }, [data]);\n\n React.useEffect(() => {\n if (showToken) {\n hideTimerRef.current = setTimeout(() => {\n setShowToken(false);\n }, 30000); // 30 seconds\n\n return () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n }\n }, [showToken]);\n\n const [createToken] = useCreateAdminTokenMutation();\n const [updateToken] = useUpdateAdminTokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n 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 const adminPermissionsToSend =\n adminPermissionsRef.current?.getPermissions().permissionsToSend ?? [];\n\n try {\n if (isCreating) {\n const res = await createToken({\n name: body.name,\n description: body.description,\n lifespan: buildLifespan(body.lifespan),\n adminPermissions: adminPermissionsToSend,\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.adminTokenCreated',\n defaultMessage: 'Admin Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n kind: 'admin',\n tokenType: API_TOKEN_TYPE,\n });\n\n adminPermissionsRef.current?.setFormAfterSubmit();\n\n navigate(`../admin-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 adminPermissions: adminPermissionsToSend,\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.adminTokenEdited',\n defaultMessage: 'Admin Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n kind: 'admin',\n tokenType: API_TOKEN_TYPE,\n });\n\n adminPermissionsRef.current?.setFormAfterSubmit();\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 toggleToken = () => {\n setShowToken((prev) => !prev);\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const canShowToken = apiToken?.accessKey !== undefined && apiToken.accessKey !== '';\n const canRegenerateToken = canRegenerate && isCurrentUserTokenOwner(apiToken, currentUser?.id);\n\n const initialAdminPermissions =\n apiToken !== null && apiToken.kind === 'admin' ? (apiToken.adminPermissions ?? []) : [];\n\n const ownerUserId =\n apiToken !== null && apiToken.kind === 'admin' ? getOwnerId(apiToken.adminUserOwner) : null;\n\n if (isLoading || (!isCreating && apiToken === null)) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'Admin 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: undefined,\n lifespan: apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body as FormValues, actions)}\n >\n {({ errors, handleChange, isSubmitting, values }) => (\n <Form>\n <FormHead\n title={\n isCreating\n ? {\n id: 'Settings.adminTokens.createPage.title',\n defaultMessage: 'Create Admin Token',\n }\n : {\n id: 'Settings.adminTokens.editPage.title',\n defaultMessage: 'Edit Admin Token',\n }\n }\n token={apiToken}\n setToken={setApiToken}\n toggleToken={toggleToken}\n showToken={showToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerateToken}\n canShowToken={canShowToken}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/admin-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=\"admin\"\n onDispatch={() => {}}\n setHasChangedPermissions={() => {}}\n />\n\n <Box shadow=\"filterShadow\" hasRadius>\n <AdminPermissions\n ref={adminPermissionsRef}\n disabled={!canEditInputs}\n initialAdminPermissions={initialAdminPermissions}\n tokenId={!isCreating && id ? id : undefined}\n ownerUserId={ownerUserId}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </Form>\n )}\n </Formik>\n </Page.Main>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['admin-tokens']?.read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["getOwnerId","owner","undefined","id","isCurrentUserTokenOwner","apiToken","currentUserId","kind","ownerId","adminUserOwner","EditView","formatMessage","useIntl","toggleNotification","useNotification","state","locationState","useLocation","permissions","useTypedSelector","admin_app","setApiToken","React","useState","accessKey","showToken","setShowToken","hideTimerRef","useRef","adminPermissionsRef","trackUsage","useTracking","currentUser","useAuth","user","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","settings","match","useMatch","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","navigate","useNavigate","useEffect","tokenType","API_TOKEN_TYPE","data","error","isLoading","useGetAdminTokenQuery","skip","refetchOnMountOrArgChange","type","message","current","setTimeout","clearTimeout","createToken","useCreateAdminTokenMutation","updateToken","useUpdateAdminTokenMutation","buildLifespan","raw","parseInt","toString","handleSubmit","body","formik","adminPermissionsToSend","getPermissions","permissionsToSend","res","name","description","lifespan","adminPermissions","isBaseQueryError","setErrors","defaultMessage","setFormAfterSubmit","replace","toggleToken","prev","canEditInputs","canShowToken","canRegenerateToken","initialAdminPermissions","ownerUserId","_jsx","Page","Loading","_jsxs","Main","Title","Formik","validationSchema","apiTokenInformationSchema","validateOnChange","initialValues","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","_Fragment","ApiTokenBox","FormApiTokenContainer","onChange","onDispatch","setHasChangedPermissions","Box","shadow","hasRadius","AdminPermissions","ref","disabled","tokenId","ProtectedEditView","read","Protect"],"mappings":"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"}
@@ -0,0 +1,292 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { Flex, Box } from '@strapi/design-system';
4
+ import { Formik, Form } from 'formik';
5
+ import { useIntl } from 'react-intl';
6
+ import { useLocation, useMatch, useNavigate } from 'react-router-dom';
7
+ import { Layouts } from '../../../../../components/Layouts/Layout.mjs';
8
+ import { Page } from '../../../../../components/PageHelpers.mjs';
9
+ import { useTypedSelector } from '../../../../../core/store/hooks.mjs';
10
+ import { useAuth } from '../../../../../features/Auth.mjs';
11
+ import { useNotification } from '../../../../../features/Notifications.mjs';
12
+ import { useTracking } from '../../../../../features/Tracking.mjs';
13
+ import { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler.mjs';
14
+ import { useRBAC } from '../../../../../hooks/useRBAC.mjs';
15
+ import { useGetAdminTokenQuery, useCreateAdminTokenMutation, useUpdateAdminTokenMutation } from '../../../../../services/apiTokens.mjs';
16
+ import { isBaseQueryError } from '../../../../../utils/baseQuery.mjs';
17
+ import { API_TOKEN_TYPE, apiTokenInformationSchema } from '../../../components/Tokens/constants.mjs';
18
+ import { FormApiTokenContainer } from '../../../components/Tokens/FormApiTokenContainer.mjs';
19
+ import { FormHead } from '../../../components/Tokens/FormHead.mjs';
20
+ import { ApiTokenBox } from '../../../components/Tokens/TokenBox.mjs';
21
+ import { AdminPermissions } from './components/AdminPermissions.mjs';
22
+
23
+ const getOwnerId = (owner)=>{
24
+ if (owner === undefined || owner === null) return null;
25
+ return typeof owner === 'object' ? owner.id : owner;
26
+ };
27
+ const isCurrentUserTokenOwner = (apiToken, currentUserId)=>{
28
+ if (apiToken === null || apiToken.kind !== 'admin') return true;
29
+ const ownerId = getOwnerId(apiToken.adminUserOwner);
30
+ if (ownerId === null) return true;
31
+ return currentUserId !== undefined && ownerId === currentUserId;
32
+ };
33
+ const EditView = ()=>{
34
+ const { formatMessage } = useIntl();
35
+ const { toggleNotification } = useNotification();
36
+ const { state: locationState } = useLocation();
37
+ const permissions = useTypedSelector((state)=>state.admin_app.permissions);
38
+ const [apiToken, setApiToken] = React.useState(locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== '' ? {
39
+ ...locationState.apiToken
40
+ } : null);
41
+ const [showToken, setShowToken] = React.useState(locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== '');
42
+ const hideTimerRef = React.useRef(null);
43
+ const adminPermissionsRef = React.useRef(null);
44
+ const { trackUsage } = useTracking();
45
+ const currentUser = useAuth('EditView', (state)=>state.user);
46
+ const { allowedActions: { canCreate, canUpdate, canRegenerate } } = useRBAC(permissions.settings?.['admin-tokens']);
47
+ const match = useMatch('/settings/admin-tokens/:id');
48
+ const id = match?.params?.id;
49
+ const isCreating = id === 'create';
50
+ const { _unstableFormatAPIError: formatAPIError, _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
51
+ const navigate = useNavigate();
52
+ React.useEffect(()=>{
53
+ trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {
54
+ tokenType: API_TOKEN_TYPE
55
+ });
56
+ }, [
57
+ isCreating,
58
+ trackUsage
59
+ ]);
60
+ const { data, error, isLoading } = useGetAdminTokenQuery(id, {
61
+ skip: !id || isCreating,
62
+ refetchOnMountOrArgChange: true
63
+ });
64
+ React.useEffect(()=>{
65
+ if (error) {
66
+ toggleNotification({
67
+ type: 'danger',
68
+ message: formatAPIError(error)
69
+ });
70
+ }
71
+ }, [
72
+ error,
73
+ formatAPIError,
74
+ toggleNotification
75
+ ]);
76
+ React.useEffect(()=>{
77
+ if (data) {
78
+ setApiToken(data);
79
+ }
80
+ }, [
81
+ data
82
+ ]);
83
+ React.useEffect(()=>{
84
+ if (showToken) {
85
+ hideTimerRef.current = setTimeout(()=>{
86
+ setShowToken(false);
87
+ }, 30000); // 30 seconds
88
+ return ()=>{
89
+ if (hideTimerRef.current) {
90
+ clearTimeout(hideTimerRef.current);
91
+ hideTimerRef.current = null;
92
+ }
93
+ };
94
+ }
95
+ }, [
96
+ showToken
97
+ ]);
98
+ const [createToken] = useCreateAdminTokenMutation();
99
+ const [updateToken] = useUpdateAdminTokenMutation();
100
+ const buildLifespan = (raw)=>raw && raw !== '0' ? parseInt(raw.toString(), 10) : null;
101
+ const handleSubmit = async (body, formik)=>{
102
+ trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {
103
+ tokenType: API_TOKEN_TYPE
104
+ });
105
+ const adminPermissionsToSend = adminPermissionsRef.current?.getPermissions().permissionsToSend ?? [];
106
+ try {
107
+ if (isCreating) {
108
+ const res = await createToken({
109
+ name: body.name,
110
+ description: body.description,
111
+ lifespan: buildLifespan(body.lifespan),
112
+ adminPermissions: adminPermissionsToSend
113
+ });
114
+ if ('error' in res) {
115
+ if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
116
+ formik.setErrors(formatValidationErrors(res.error));
117
+ } else {
118
+ toggleNotification({
119
+ type: 'danger',
120
+ message: formatAPIError(res.error)
121
+ });
122
+ }
123
+ return;
124
+ }
125
+ toggleNotification({
126
+ type: 'success',
127
+ message: formatMessage({
128
+ id: 'notification.success.adminTokenCreated',
129
+ defaultMessage: 'Admin Token successfully created'
130
+ })
131
+ });
132
+ trackUsage('didCreateToken', {
133
+ kind: 'admin',
134
+ tokenType: API_TOKEN_TYPE
135
+ });
136
+ adminPermissionsRef.current?.setFormAfterSubmit();
137
+ navigate(`../admin-tokens/${res.data.id.toString()}`, {
138
+ state: {
139
+ apiToken: res.data
140
+ },
141
+ replace: true
142
+ });
143
+ } else {
144
+ const res = await updateToken({
145
+ id: id,
146
+ name: body.name,
147
+ description: body.description,
148
+ adminPermissions: adminPermissionsToSend
149
+ });
150
+ if ('error' in res) {
151
+ if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
152
+ formik.setErrors(formatValidationErrors(res.error));
153
+ } else {
154
+ toggleNotification({
155
+ type: 'danger',
156
+ message: formatAPIError(res.error)
157
+ });
158
+ }
159
+ return;
160
+ }
161
+ toggleNotification({
162
+ type: 'success',
163
+ message: formatMessage({
164
+ id: 'notification.success.adminTokenEdited',
165
+ defaultMessage: 'Admin Token successfully edited'
166
+ })
167
+ });
168
+ trackUsage('didEditToken', {
169
+ kind: 'admin',
170
+ tokenType: API_TOKEN_TYPE
171
+ });
172
+ adminPermissionsRef.current?.setFormAfterSubmit();
173
+ }
174
+ } catch {
175
+ toggleNotification({
176
+ type: 'danger',
177
+ message: formatMessage({
178
+ id: 'notification.error',
179
+ defaultMessage: 'Something went wrong'
180
+ })
181
+ });
182
+ }
183
+ };
184
+ const toggleToken = ()=>{
185
+ setShowToken((prev)=>!prev);
186
+ if (hideTimerRef.current) {
187
+ clearTimeout(hideTimerRef.current);
188
+ hideTimerRef.current = null;
189
+ }
190
+ };
191
+ const canEditInputs = canUpdate && !isCreating || canCreate && isCreating;
192
+ const canShowToken = apiToken?.accessKey !== undefined && apiToken.accessKey !== '';
193
+ const canRegenerateToken = canRegenerate && isCurrentUserTokenOwner(apiToken, currentUser?.id);
194
+ const initialAdminPermissions = apiToken !== null && apiToken.kind === 'admin' ? apiToken.adminPermissions ?? [] : [];
195
+ const ownerUserId = apiToken !== null && apiToken.kind === 'admin' ? getOwnerId(apiToken.adminUserOwner) : null;
196
+ if (isLoading || !isCreating && apiToken === null) {
197
+ return /*#__PURE__*/ jsx(Page.Loading, {});
198
+ }
199
+ return /*#__PURE__*/ jsxs(Page.Main, {
200
+ children: [
201
+ /*#__PURE__*/ jsx(Page.Title, {
202
+ children: formatMessage({
203
+ id: 'Settings.PageTitle',
204
+ defaultMessage: 'Settings - {name}'
205
+ }, {
206
+ name: 'Admin Tokens'
207
+ })
208
+ }),
209
+ /*#__PURE__*/ jsx(Formik, {
210
+ validationSchema: apiTokenInformationSchema,
211
+ validateOnChange: false,
212
+ initialValues: {
213
+ name: apiToken?.name || '',
214
+ description: apiToken?.description || '',
215
+ type: undefined,
216
+ lifespan: apiToken?.lifespan
217
+ },
218
+ enableReinitialize: true,
219
+ onSubmit: (body, actions)=>handleSubmit(body, actions),
220
+ children: ({ errors, handleChange, isSubmitting, values })=>/*#__PURE__*/ jsxs(Form, {
221
+ children: [
222
+ /*#__PURE__*/ jsx(FormHead, {
223
+ title: isCreating ? {
224
+ id: 'Settings.adminTokens.createPage.title',
225
+ defaultMessage: 'Create Admin Token'
226
+ } : {
227
+ id: 'Settings.adminTokens.editPage.title',
228
+ defaultMessage: 'Edit Admin Token'
229
+ },
230
+ token: apiToken,
231
+ setToken: setApiToken,
232
+ toggleToken: toggleToken,
233
+ showToken: showToken,
234
+ canEditInputs: canEditInputs,
235
+ canRegenerate: canRegenerateToken,
236
+ canShowToken: canShowToken,
237
+ isSubmitting: isSubmitting,
238
+ regenerateUrl: "/admin/admin-tokens/"
239
+ }),
240
+ /*#__PURE__*/ jsx(Layouts.Content, {
241
+ children: /*#__PURE__*/ jsxs(Flex, {
242
+ direction: "column",
243
+ alignItems: "stretch",
244
+ gap: 6,
245
+ children: [
246
+ apiToken?.accessKey !== undefined && apiToken.accessKey !== '' && showToken === true && /*#__PURE__*/ jsx(Fragment, {
247
+ children: /*#__PURE__*/ jsx(ApiTokenBox, {
248
+ token: apiToken.accessKey,
249
+ tokenType: API_TOKEN_TYPE
250
+ })
251
+ }),
252
+ /*#__PURE__*/ jsx(FormApiTokenContainer, {
253
+ errors: errors,
254
+ onChange: handleChange,
255
+ canEditInputs: canEditInputs,
256
+ isCreating: isCreating,
257
+ values: values,
258
+ apiToken: apiToken,
259
+ kind: "admin",
260
+ onDispatch: ()=>{},
261
+ setHasChangedPermissions: ()=>{}
262
+ }),
263
+ /*#__PURE__*/ jsx(Box, {
264
+ shadow: "filterShadow",
265
+ hasRadius: true,
266
+ children: /*#__PURE__*/ jsx(AdminPermissions, {
267
+ ref: adminPermissionsRef,
268
+ disabled: !canEditInputs,
269
+ initialAdminPermissions: initialAdminPermissions,
270
+ tokenId: !isCreating && id ? id : undefined,
271
+ ownerUserId: ownerUserId
272
+ })
273
+ })
274
+ ]
275
+ })
276
+ })
277
+ ]
278
+ })
279
+ })
280
+ ]
281
+ });
282
+ };
283
+ const ProtectedEditView = ()=>{
284
+ const permissions = useTypedSelector((state)=>state.admin_app.permissions.settings?.['admin-tokens']?.read);
285
+ return /*#__PURE__*/ jsx(Page.Protect, {
286
+ permissions: permissions,
287
+ children: /*#__PURE__*/ jsx(EditView, {})
288
+ });
289
+ };
290
+
291
+ export { EditView, ProtectedEditView };
292
+ //# sourceMappingURL=EditViewPage.mjs.map