@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
@@ -1 +1 @@
1
- {"version":3,"file":"Table.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/Table.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Typography,\n useCollator,\n Dialog,\n LinkButton,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ApiToken } from '../../../../../../shared/contracts/api-token';\nimport { SanitizedTransferToken } from '../../../../../../shared/contracts/transfer';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { RelativeTime } from '../../../../components/RelativeTime';\nimport { Table as TableImpl } from '../../../../components/Table';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\n\nimport type { Data } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Table\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableProps\n extends Pick<TableImpl.Props<SanitizedTransferToken | ApiToken>, 'headers' | 'isLoading'> {\n onConfirmDelete: (id: Data.ID) => void;\n permissions: {\n canRead: boolean;\n canDelete: boolean;\n canUpdate: boolean;\n };\n tokens: SanitizedTransferToken[] | ApiToken[];\n tokenType: 'api-token' | 'transfer-token';\n}\n\nconst Table = ({\n permissions,\n headers = [],\n isLoading = false,\n tokens = [],\n onConfirmDelete,\n tokenType,\n}: TableProps) => {\n const [{ query }] = useQueryParams<{ sort?: string }>();\n const { formatMessage, locale } = useIntl();\n const [, sortOrder] = query && query.sort ? query.sort.split(':') : [undefined, 'ASC'];\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const formatter = useCollator(locale);\n\n const sortedTokens = [...tokens].sort((a, b) => {\n return sortOrder === 'DESC'\n ? formatter.compare(b.name, a.name)\n : formatter.compare(a.name, b.name);\n });\n\n const { canDelete, canUpdate, canRead } = permissions;\n\n const handleRowClick = (id: Data.ID) => () => {\n if (canRead) {\n trackUsage('willEditTokenFromList', {\n tokenType,\n });\n navigate(id.toString());\n }\n };\n\n return (\n <TableImpl.Root headers={headers} rows={sortedTokens} isLoading={isLoading}>\n <TableImpl.Content>\n <TableImpl.Head>\n {headers.map((header) => (\n <TableImpl.HeaderCell key={header.name} {...header} />\n ))}\n </TableImpl.Head>\n <TableImpl.Empty />\n <TableImpl.Loading />\n <TableImpl.Body>\n {sortedTokens.map((token) => {\n const GuidedTourTooltip =\n token.name === 'Read Only' ? tours.apiTokens.ManageAPIToken : React.Fragment;\n return (\n <TableImpl.Row key={token.id} onClick={handleRowClick(token.id)}>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {token.name}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" ellipsis>\n {token.description}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n <Typography textColor=\"neutral800\">\n {/* @ts-expect-error One of the tokens doesn't have createdAt */}\n <RelativeTime timestamp={new Date(token.createdAt)} />\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n {token.lastUsedAt && (\n <Typography textColor=\"neutral800\">\n <RelativeTime\n timestamp={new Date(token.lastUsedAt)}\n customIntervals={[\n {\n unit: 'hours',\n threshold: 1,\n text: formatMessage({\n id: 'Settings.apiTokens.lastHour',\n defaultMessage: 'last hour',\n }),\n },\n ]}\n />\n </Typography>\n )}\n </TableImpl.Cell>\n {canUpdate || canRead || canDelete ? (\n <TableImpl.Cell>\n <Flex justifyContent=\"end\">\n <GuidedTourTooltip>\n {canUpdate && <UpdateButton tokenName={token.name} tokenId={token.id} />}\n </GuidedTourTooltip>\n {canDelete && (\n <DeleteButton\n tokenName={token.name}\n onClickDelete={() => onConfirmDelete?.(token.id)}\n tokenType={tokenType}\n />\n )}\n </Flex>\n </TableImpl.Cell>\n ) : null}\n </TableImpl.Row>\n );\n })}\n </TableImpl.Body>\n </TableImpl.Content>\n </TableImpl.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CRUD Buttons\n * -----------------------------------------------------------------------------------------------*/\n\nconst MESSAGES_MAP = {\n edit: {\n id: 'app.component.table.edit',\n defaultMessage: 'Edit {target}',\n },\n read: {\n id: 'app.component.table.read',\n defaultMessage: 'Read {target}',\n },\n};\n\ninterface DefaultButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n buttonType?: 'edit' | 'read';\n children: React.ReactNode;\n}\n\nconst DefaultButton = ({\n tokenName,\n tokenId,\n buttonType = 'edit',\n children,\n}: DefaultButtonProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LinkButtonStyled\n tag={NavLink}\n to={tokenId.toString()}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n title={formatMessage(MESSAGES_MAP[buttonType], { target: tokenName })}\n variant=\"ghost\"\n size=\"S\"\n >\n {children}\n </LinkButtonStyled>\n );\n};\n\nconst LinkButtonStyled = styled(LinkButton)`\n padding: 0.7rem;\n\n & > span {\n display: flex;\n }\n`;\n\ninterface DeleteButtonProps extends Pick<ButtonProps, 'tokenName'>, Pick<TableProps, 'tokenType'> {\n onClickDelete: () => void;\n}\n\nconst DeleteButton = ({ tokenName, onClickDelete, tokenType }: DeleteButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const handleClickDelete = () => {\n trackUsage('willDeleteToken', {\n tokenType,\n });\n onClickDelete();\n };\n\n return (\n <Dialog.Root>\n <Box<'div'> paddingLeft={1} onClick={(e) => e.stopPropagation()}>\n <Dialog.Trigger>\n <IconButton\n label={formatMessage(\n {\n id: 'global.delete-target',\n defaultMessage: 'Delete {target}',\n },\n { target: `${tokenName}` }\n )}\n name=\"delete\"\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleClickDelete} />\n </Box>\n </Dialog.Root>\n );\n};\n\ninterface ButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n}\n\nconst UpdateButton = ({ tokenName, tokenId }: ButtonProps) => {\n return (\n <DefaultButton tokenName={tokenName} tokenId={tokenId}>\n <Pencil />\n </DefaultButton>\n );\n};\n\nexport { Table };\nexport type { TableProps };\n"],"names":["Table","permissions","headers","isLoading","tokens","onConfirmDelete","tokenType","query","useQueryParams","formatMessage","locale","useIntl","sortOrder","sort","split","undefined","navigate","useNavigate","trackUsage","useTracking","formatter","useCollator","sortedTokens","a","b","compare","name","canDelete","canUpdate","canRead","handleRowClick","id","toString","_jsx","TableImpl","Root","rows","_jsxs","Content","Head","map","header","HeaderCell","Empty","Loading","Body","token","GuidedTourTooltip","tours","apiTokens","ManageAPIToken","React","Fragment","Row","onClick","Cell","maxWidth","Typography","textColor","fontWeight","ellipsis","description","RelativeTime","timestamp","Date","createdAt","lastUsedAt","customIntervals","unit","threshold","text","defaultMessage","Flex","justifyContent","UpdateButton","tokenName","tokenId","DeleteButton","onClickDelete","MESSAGES_MAP","edit","read","DefaultButton","buttonType","children","LinkButtonStyled","tag","NavLink","to","e","stopPropagation","title","target","variant","size","styled","LinkButton","handleClickDelete","Dialog","Box","paddingLeft","Trigger","IconButton","label","Trash","ConfirmDialog","onConfirm","Pencil"],"mappings":"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"}
1
+ {"version":3,"file":"Table.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/Table.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Typography,\n useCollator,\n Dialog,\n LinkButton,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ApiToken } from '../../../../../../shared/contracts/api-token';\nimport { SanitizedTransferToken } from '../../../../../../shared/contracts/transfer';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { RelativeTime } from '../../../../components/RelativeTime';\nimport { Table as TableImpl } from '../../../../components/Table';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\n\nimport type { AdminTokenOwner } from '../../../../../../shared/contracts/shared';\nimport type { Data } from '@strapi/types';\n\nconst formatAdminUserName = (\n owner: Pick<AdminTokenOwner, 'firstname' | 'lastname' | 'email' | 'username'>\n): string => {\n const full = [owner.firstname, owner.lastname].filter(Boolean).join(' ');\n return full || owner.username || owner.email || '';\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Table\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableProps\n extends Pick<TableImpl.Props<SanitizedTransferToken | ApiToken>, 'headers' | 'isLoading'> {\n onConfirmDelete: (id: Data.ID) => void;\n permissions: {\n canRead: boolean;\n canDelete: boolean;\n canUpdate: boolean;\n };\n tokens: SanitizedTransferToken[] | ApiToken[];\n tokenType: 'api-token' | 'transfer-token';\n showOwner?: boolean;\n}\n\nconst Table = ({\n permissions,\n headers = [],\n isLoading = false,\n tokens = [],\n onConfirmDelete,\n tokenType,\n showOwner = false,\n}: TableProps) => {\n const [{ query }] = useQueryParams<{ sort?: string }>();\n const { formatMessage, locale } = useIntl();\n const [, sortOrder] = query && query.sort ? query.sort.split(':') : [undefined, 'ASC'];\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const formatter = useCollator(locale);\n\n const sortedTokens = [...tokens].sort((a, b) => {\n return sortOrder === 'DESC'\n ? formatter.compare(b.name, a.name)\n : formatter.compare(a.name, b.name);\n });\n\n const { canDelete, canUpdate, canRead } = permissions;\n\n const handleRowClick = (id: Data.ID) => () => {\n if (canRead) {\n trackUsage('willEditTokenFromList', {\n tokenType,\n });\n navigate(id.toString());\n }\n };\n\n return (\n <TableImpl.Root headers={headers} rows={sortedTokens} isLoading={isLoading}>\n <TableImpl.Content>\n <TableImpl.Head>\n {headers.map((header) => (\n <TableImpl.HeaderCell key={header.name} {...header} />\n ))}\n </TableImpl.Head>\n <TableImpl.Empty />\n <TableImpl.Loading />\n <TableImpl.Body>\n {sortedTokens.map((token) => {\n const GuidedTourTooltip =\n token.name === 'Read Only' ? tours.apiTokens.ManageAPIToken : React.Fragment;\n return (\n <TableImpl.Row key={token.id} onClick={handleRowClick(token.id)}>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {token.name}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" ellipsis>\n {token.description}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n <Typography textColor=\"neutral800\">\n {/* @ts-expect-error One of the tokens doesn't have createdAt */}\n <RelativeTime timestamp={new Date(token.createdAt)} />\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n {token.lastUsedAt && (\n <Typography textColor=\"neutral800\">\n <RelativeTime\n timestamp={new Date(token.lastUsedAt)}\n customIntervals={[\n {\n unit: 'hours',\n threshold: 1,\n text: formatMessage({\n id: 'Settings.apiTokens.lastHour',\n defaultMessage: 'last hour',\n }),\n },\n ]}\n />\n </Typography>\n )}\n </TableImpl.Cell>\n {showOwner === true &&\n (() => {\n const apiToken = token as ApiToken;\n const owner = apiToken.kind === 'admin' ? apiToken.adminUserOwner : undefined;\n const ownerName =\n owner !== undefined && owner !== null && typeof owner === 'object'\n ? formatAdminUserName(owner)\n : '';\n return (\n <TableImpl.Cell maxWidth=\"20rem\">\n <Typography textColor=\"neutral800\" ellipsis>\n {ownerName}\n </Typography>\n </TableImpl.Cell>\n );\n })()}\n {canUpdate || canRead || canDelete ? (\n <TableImpl.Cell>\n <Flex justifyContent=\"end\">\n <GuidedTourTooltip>\n {canUpdate && <UpdateButton tokenName={token.name} tokenId={token.id} />}\n </GuidedTourTooltip>\n {canDelete && (\n <DeleteButton\n tokenName={token.name}\n onClickDelete={() => onConfirmDelete?.(token.id)}\n tokenType={tokenType}\n />\n )}\n </Flex>\n </TableImpl.Cell>\n ) : null}\n </TableImpl.Row>\n );\n })}\n </TableImpl.Body>\n </TableImpl.Content>\n </TableImpl.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CRUD Buttons\n * -----------------------------------------------------------------------------------------------*/\n\nconst MESSAGES_MAP = {\n edit: {\n id: 'app.component.table.edit',\n defaultMessage: 'Edit {target}',\n },\n read: {\n id: 'app.component.table.read',\n defaultMessage: 'Read {target}',\n },\n};\n\ninterface DefaultButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n buttonType?: 'edit' | 'read';\n children: React.ReactNode;\n}\n\nconst DefaultButton = ({\n tokenName,\n tokenId,\n buttonType = 'edit',\n children,\n}: DefaultButtonProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LinkButtonStyled\n tag={NavLink}\n to={tokenId.toString()}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n title={formatMessage(MESSAGES_MAP[buttonType], { target: tokenName })}\n variant=\"ghost\"\n size=\"S\"\n >\n {children}\n </LinkButtonStyled>\n );\n};\n\nconst LinkButtonStyled = styled(LinkButton)`\n padding: 0.7rem;\n\n & > span {\n display: flex;\n }\n`;\n\ninterface DeleteButtonProps extends Pick<ButtonProps, 'tokenName'>, Pick<TableProps, 'tokenType'> {\n onClickDelete: () => void;\n}\n\nconst DeleteButton = ({ tokenName, onClickDelete, tokenType }: DeleteButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const handleClickDelete = () => {\n trackUsage('willDeleteToken', {\n tokenType,\n });\n onClickDelete();\n };\n\n return (\n <Dialog.Root>\n <Box<'div'> paddingLeft={1} onClick={(e) => e.stopPropagation()}>\n <Dialog.Trigger>\n <IconButton\n label={formatMessage(\n {\n id: 'global.delete-target',\n defaultMessage: 'Delete {target}',\n },\n { target: `${tokenName}` }\n )}\n name=\"delete\"\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleClickDelete} />\n </Box>\n </Dialog.Root>\n );\n};\n\ninterface ButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n}\n\nconst UpdateButton = ({ tokenName, tokenId }: ButtonProps) => {\n return (\n <DefaultButton tokenName={tokenName} tokenId={tokenId}>\n <Pencil />\n </DefaultButton>\n );\n};\n\nexport { Table };\nexport type { TableProps };\n"],"names":["formatAdminUserName","owner","full","firstname","lastname","filter","Boolean","join","username","email","Table","permissions","headers","isLoading","tokens","onConfirmDelete","tokenType","showOwner","query","useQueryParams","formatMessage","locale","useIntl","sortOrder","sort","split","undefined","navigate","useNavigate","trackUsage","useTracking","formatter","useCollator","sortedTokens","a","b","compare","name","canDelete","canUpdate","canRead","handleRowClick","id","toString","_jsx","TableImpl","Root","rows","_jsxs","Content","Head","map","header","HeaderCell","Empty","Loading","Body","token","GuidedTourTooltip","tours","apiTokens","ManageAPIToken","React","Fragment","Row","onClick","Cell","maxWidth","Typography","textColor","fontWeight","ellipsis","description","RelativeTime","timestamp","Date","createdAt","lastUsedAt","customIntervals","unit","threshold","text","defaultMessage","apiToken","kind","adminUserOwner","ownerName","Flex","justifyContent","UpdateButton","tokenName","tokenId","DeleteButton","onClickDelete","MESSAGES_MAP","edit","read","DefaultButton","buttonType","children","LinkButtonStyled","tag","NavLink","to","e","stopPropagation","title","target","variant","size","styled","LinkButton","handleClickDelete","Dialog","Box","paddingLeft","Trigger","IconButton","label","Trash","ConfirmDialog","onConfirm","Pencil"],"mappings":"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"}
@@ -12,7 +12,14 @@ import { Table as Table$1 } from '../../../../components/Table.mjs';
12
12
  import { useTracking } from '../../../../features/Tracking.mjs';
13
13
  import { useQueryParams } from '../../../../hooks/useQueryParams.mjs';
14
14
 
15
- const Table = ({ permissions, headers = [], isLoading = false, tokens = [], onConfirmDelete, tokenType })=>{
15
+ const formatAdminUserName = (owner)=>{
16
+ const full = [
17
+ owner.firstname,
18
+ owner.lastname
19
+ ].filter(Boolean).join(' ');
20
+ return full || owner.username || owner.email || '';
21
+ };
22
+ const Table = ({ permissions, headers = [], isLoading = false, tokens = [], onConfirmDelete, tokenType, showOwner = false })=>{
16
23
  const [{ query }] = useQueryParams();
17
24
  const { formatMessage, locale } = useIntl();
18
25
  const [, sortOrder] = query && query.sort ? query.sort.split(':') : [
@@ -98,6 +105,19 @@ const Table = ({ permissions, headers = [], isLoading = false, tokens = [], onCo
98
105
  })
99
106
  })
100
107
  }),
108
+ showOwner === true && (()=>{
109
+ const apiToken = token;
110
+ const owner = apiToken.kind === 'admin' ? apiToken.adminUserOwner : undefined;
111
+ const ownerName = owner !== undefined && owner !== null && typeof owner === 'object' ? formatAdminUserName(owner) : '';
112
+ return /*#__PURE__*/ jsx(Table$1.Cell, {
113
+ maxWidth: "20rem",
114
+ children: /*#__PURE__*/ jsx(Typography, {
115
+ textColor: "neutral800",
116
+ ellipsis: true,
117
+ children: ownerName
118
+ })
119
+ });
120
+ })(),
101
121
  canUpdate || canRead || canDelete ? /*#__PURE__*/ jsx(Table$1.Cell, {
102
122
  children: /*#__PURE__*/ jsxs(Flex, {
103
123
  justifyContent: "end",
@@ -1 +1 @@
1
- {"version":3,"file":"Table.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/Table.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Typography,\n useCollator,\n Dialog,\n LinkButton,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ApiToken } from '../../../../../../shared/contracts/api-token';\nimport { SanitizedTransferToken } from '../../../../../../shared/contracts/transfer';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { RelativeTime } from '../../../../components/RelativeTime';\nimport { Table as TableImpl } from '../../../../components/Table';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\n\nimport type { Data } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Table\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableProps\n extends Pick<TableImpl.Props<SanitizedTransferToken | ApiToken>, 'headers' | 'isLoading'> {\n onConfirmDelete: (id: Data.ID) => void;\n permissions: {\n canRead: boolean;\n canDelete: boolean;\n canUpdate: boolean;\n };\n tokens: SanitizedTransferToken[] | ApiToken[];\n tokenType: 'api-token' | 'transfer-token';\n}\n\nconst Table = ({\n permissions,\n headers = [],\n isLoading = false,\n tokens = [],\n onConfirmDelete,\n tokenType,\n}: TableProps) => {\n const [{ query }] = useQueryParams<{ sort?: string }>();\n const { formatMessage, locale } = useIntl();\n const [, sortOrder] = query && query.sort ? query.sort.split(':') : [undefined, 'ASC'];\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const formatter = useCollator(locale);\n\n const sortedTokens = [...tokens].sort((a, b) => {\n return sortOrder === 'DESC'\n ? formatter.compare(b.name, a.name)\n : formatter.compare(a.name, b.name);\n });\n\n const { canDelete, canUpdate, canRead } = permissions;\n\n const handleRowClick = (id: Data.ID) => () => {\n if (canRead) {\n trackUsage('willEditTokenFromList', {\n tokenType,\n });\n navigate(id.toString());\n }\n };\n\n return (\n <TableImpl.Root headers={headers} rows={sortedTokens} isLoading={isLoading}>\n <TableImpl.Content>\n <TableImpl.Head>\n {headers.map((header) => (\n <TableImpl.HeaderCell key={header.name} {...header} />\n ))}\n </TableImpl.Head>\n <TableImpl.Empty />\n <TableImpl.Loading />\n <TableImpl.Body>\n {sortedTokens.map((token) => {\n const GuidedTourTooltip =\n token.name === 'Read Only' ? tours.apiTokens.ManageAPIToken : React.Fragment;\n return (\n <TableImpl.Row key={token.id} onClick={handleRowClick(token.id)}>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {token.name}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" ellipsis>\n {token.description}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n <Typography textColor=\"neutral800\">\n {/* @ts-expect-error One of the tokens doesn't have createdAt */}\n <RelativeTime timestamp={new Date(token.createdAt)} />\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n {token.lastUsedAt && (\n <Typography textColor=\"neutral800\">\n <RelativeTime\n timestamp={new Date(token.lastUsedAt)}\n customIntervals={[\n {\n unit: 'hours',\n threshold: 1,\n text: formatMessage({\n id: 'Settings.apiTokens.lastHour',\n defaultMessage: 'last hour',\n }),\n },\n ]}\n />\n </Typography>\n )}\n </TableImpl.Cell>\n {canUpdate || canRead || canDelete ? (\n <TableImpl.Cell>\n <Flex justifyContent=\"end\">\n <GuidedTourTooltip>\n {canUpdate && <UpdateButton tokenName={token.name} tokenId={token.id} />}\n </GuidedTourTooltip>\n {canDelete && (\n <DeleteButton\n tokenName={token.name}\n onClickDelete={() => onConfirmDelete?.(token.id)}\n tokenType={tokenType}\n />\n )}\n </Flex>\n </TableImpl.Cell>\n ) : null}\n </TableImpl.Row>\n );\n })}\n </TableImpl.Body>\n </TableImpl.Content>\n </TableImpl.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CRUD Buttons\n * -----------------------------------------------------------------------------------------------*/\n\nconst MESSAGES_MAP = {\n edit: {\n id: 'app.component.table.edit',\n defaultMessage: 'Edit {target}',\n },\n read: {\n id: 'app.component.table.read',\n defaultMessage: 'Read {target}',\n },\n};\n\ninterface DefaultButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n buttonType?: 'edit' | 'read';\n children: React.ReactNode;\n}\n\nconst DefaultButton = ({\n tokenName,\n tokenId,\n buttonType = 'edit',\n children,\n}: DefaultButtonProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LinkButtonStyled\n tag={NavLink}\n to={tokenId.toString()}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n title={formatMessage(MESSAGES_MAP[buttonType], { target: tokenName })}\n variant=\"ghost\"\n size=\"S\"\n >\n {children}\n </LinkButtonStyled>\n );\n};\n\nconst LinkButtonStyled = styled(LinkButton)`\n padding: 0.7rem;\n\n & > span {\n display: flex;\n }\n`;\n\ninterface DeleteButtonProps extends Pick<ButtonProps, 'tokenName'>, Pick<TableProps, 'tokenType'> {\n onClickDelete: () => void;\n}\n\nconst DeleteButton = ({ tokenName, onClickDelete, tokenType }: DeleteButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const handleClickDelete = () => {\n trackUsage('willDeleteToken', {\n tokenType,\n });\n onClickDelete();\n };\n\n return (\n <Dialog.Root>\n <Box<'div'> paddingLeft={1} onClick={(e) => e.stopPropagation()}>\n <Dialog.Trigger>\n <IconButton\n label={formatMessage(\n {\n id: 'global.delete-target',\n defaultMessage: 'Delete {target}',\n },\n { target: `${tokenName}` }\n )}\n name=\"delete\"\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleClickDelete} />\n </Box>\n </Dialog.Root>\n );\n};\n\ninterface ButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n}\n\nconst UpdateButton = ({ tokenName, tokenId }: ButtonProps) => {\n return (\n <DefaultButton tokenName={tokenName} tokenId={tokenId}>\n <Pencil />\n </DefaultButton>\n );\n};\n\nexport { Table };\nexport type { TableProps };\n"],"names":["Table","permissions","headers","isLoading","tokens","onConfirmDelete","tokenType","query","useQueryParams","formatMessage","locale","useIntl","sortOrder","sort","split","undefined","navigate","useNavigate","trackUsage","useTracking","formatter","useCollator","sortedTokens","a","b","compare","name","canDelete","canUpdate","canRead","handleRowClick","id","toString","_jsx","TableImpl","Root","rows","_jsxs","Content","Head","map","header","HeaderCell","Empty","Loading","Body","token","GuidedTourTooltip","tours","apiTokens","ManageAPIToken","React","Fragment","Row","onClick","Cell","maxWidth","Typography","textColor","fontWeight","ellipsis","description","RelativeTime","timestamp","Date","createdAt","lastUsedAt","customIntervals","unit","threshold","text","defaultMessage","Flex","justifyContent","UpdateButton","tokenName","tokenId","DeleteButton","onClickDelete","MESSAGES_MAP","edit","read","DefaultButton","buttonType","children","LinkButtonStyled","tag","NavLink","to","e","stopPropagation","title","target","variant","size","styled","LinkButton","handleClickDelete","Dialog","Box","paddingLeft","Trigger","IconButton","label","Trash","ConfirmDialog","onConfirm","Pencil"],"mappings":"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"}
1
+ {"version":3,"file":"Table.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/Table.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Typography,\n useCollator,\n Dialog,\n LinkButton,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ApiToken } from '../../../../../../shared/contracts/api-token';\nimport { SanitizedTransferToken } from '../../../../../../shared/contracts/transfer';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { RelativeTime } from '../../../../components/RelativeTime';\nimport { Table as TableImpl } from '../../../../components/Table';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\n\nimport type { AdminTokenOwner } from '../../../../../../shared/contracts/shared';\nimport type { Data } from '@strapi/types';\n\nconst formatAdminUserName = (\n owner: Pick<AdminTokenOwner, 'firstname' | 'lastname' | 'email' | 'username'>\n): string => {\n const full = [owner.firstname, owner.lastname].filter(Boolean).join(' ');\n return full || owner.username || owner.email || '';\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Table\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableProps\n extends Pick<TableImpl.Props<SanitizedTransferToken | ApiToken>, 'headers' | 'isLoading'> {\n onConfirmDelete: (id: Data.ID) => void;\n permissions: {\n canRead: boolean;\n canDelete: boolean;\n canUpdate: boolean;\n };\n tokens: SanitizedTransferToken[] | ApiToken[];\n tokenType: 'api-token' | 'transfer-token';\n showOwner?: boolean;\n}\n\nconst Table = ({\n permissions,\n headers = [],\n isLoading = false,\n tokens = [],\n onConfirmDelete,\n tokenType,\n showOwner = false,\n}: TableProps) => {\n const [{ query }] = useQueryParams<{ sort?: string }>();\n const { formatMessage, locale } = useIntl();\n const [, sortOrder] = query && query.sort ? query.sort.split(':') : [undefined, 'ASC'];\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const formatter = useCollator(locale);\n\n const sortedTokens = [...tokens].sort((a, b) => {\n return sortOrder === 'DESC'\n ? formatter.compare(b.name, a.name)\n : formatter.compare(a.name, b.name);\n });\n\n const { canDelete, canUpdate, canRead } = permissions;\n\n const handleRowClick = (id: Data.ID) => () => {\n if (canRead) {\n trackUsage('willEditTokenFromList', {\n tokenType,\n });\n navigate(id.toString());\n }\n };\n\n return (\n <TableImpl.Root headers={headers} rows={sortedTokens} isLoading={isLoading}>\n <TableImpl.Content>\n <TableImpl.Head>\n {headers.map((header) => (\n <TableImpl.HeaderCell key={header.name} {...header} />\n ))}\n </TableImpl.Head>\n <TableImpl.Empty />\n <TableImpl.Loading />\n <TableImpl.Body>\n {sortedTokens.map((token) => {\n const GuidedTourTooltip =\n token.name === 'Read Only' ? tours.apiTokens.ManageAPIToken : React.Fragment;\n return (\n <TableImpl.Row key={token.id} onClick={handleRowClick(token.id)}>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {token.name}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" ellipsis>\n {token.description}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n <Typography textColor=\"neutral800\">\n {/* @ts-expect-error One of the tokens doesn't have createdAt */}\n <RelativeTime timestamp={new Date(token.createdAt)} />\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n {token.lastUsedAt && (\n <Typography textColor=\"neutral800\">\n <RelativeTime\n timestamp={new Date(token.lastUsedAt)}\n customIntervals={[\n {\n unit: 'hours',\n threshold: 1,\n text: formatMessage({\n id: 'Settings.apiTokens.lastHour',\n defaultMessage: 'last hour',\n }),\n },\n ]}\n />\n </Typography>\n )}\n </TableImpl.Cell>\n {showOwner === true &&\n (() => {\n const apiToken = token as ApiToken;\n const owner = apiToken.kind === 'admin' ? apiToken.adminUserOwner : undefined;\n const ownerName =\n owner !== undefined && owner !== null && typeof owner === 'object'\n ? formatAdminUserName(owner)\n : '';\n return (\n <TableImpl.Cell maxWidth=\"20rem\">\n <Typography textColor=\"neutral800\" ellipsis>\n {ownerName}\n </Typography>\n </TableImpl.Cell>\n );\n })()}\n {canUpdate || canRead || canDelete ? (\n <TableImpl.Cell>\n <Flex justifyContent=\"end\">\n <GuidedTourTooltip>\n {canUpdate && <UpdateButton tokenName={token.name} tokenId={token.id} />}\n </GuidedTourTooltip>\n {canDelete && (\n <DeleteButton\n tokenName={token.name}\n onClickDelete={() => onConfirmDelete?.(token.id)}\n tokenType={tokenType}\n />\n )}\n </Flex>\n </TableImpl.Cell>\n ) : null}\n </TableImpl.Row>\n );\n })}\n </TableImpl.Body>\n </TableImpl.Content>\n </TableImpl.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CRUD Buttons\n * -----------------------------------------------------------------------------------------------*/\n\nconst MESSAGES_MAP = {\n edit: {\n id: 'app.component.table.edit',\n defaultMessage: 'Edit {target}',\n },\n read: {\n id: 'app.component.table.read',\n defaultMessage: 'Read {target}',\n },\n};\n\ninterface DefaultButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n buttonType?: 'edit' | 'read';\n children: React.ReactNode;\n}\n\nconst DefaultButton = ({\n tokenName,\n tokenId,\n buttonType = 'edit',\n children,\n}: DefaultButtonProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LinkButtonStyled\n tag={NavLink}\n to={tokenId.toString()}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n title={formatMessage(MESSAGES_MAP[buttonType], { target: tokenName })}\n variant=\"ghost\"\n size=\"S\"\n >\n {children}\n </LinkButtonStyled>\n );\n};\n\nconst LinkButtonStyled = styled(LinkButton)`\n padding: 0.7rem;\n\n & > span {\n display: flex;\n }\n`;\n\ninterface DeleteButtonProps extends Pick<ButtonProps, 'tokenName'>, Pick<TableProps, 'tokenType'> {\n onClickDelete: () => void;\n}\n\nconst DeleteButton = ({ tokenName, onClickDelete, tokenType }: DeleteButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const handleClickDelete = () => {\n trackUsage('willDeleteToken', {\n tokenType,\n });\n onClickDelete();\n };\n\n return (\n <Dialog.Root>\n <Box<'div'> paddingLeft={1} onClick={(e) => e.stopPropagation()}>\n <Dialog.Trigger>\n <IconButton\n label={formatMessage(\n {\n id: 'global.delete-target',\n defaultMessage: 'Delete {target}',\n },\n { target: `${tokenName}` }\n )}\n name=\"delete\"\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleClickDelete} />\n </Box>\n </Dialog.Root>\n );\n};\n\ninterface ButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n}\n\nconst UpdateButton = ({ tokenName, tokenId }: ButtonProps) => {\n return (\n <DefaultButton tokenName={tokenName} tokenId={tokenId}>\n <Pencil />\n </DefaultButton>\n );\n};\n\nexport { Table };\nexport type { TableProps };\n"],"names":["formatAdminUserName","owner","full","firstname","lastname","filter","Boolean","join","username","email","Table","permissions","headers","isLoading","tokens","onConfirmDelete","tokenType","showOwner","query","useQueryParams","formatMessage","locale","useIntl","sortOrder","sort","split","undefined","navigate","useNavigate","trackUsage","useTracking","formatter","useCollator","sortedTokens","a","b","compare","name","canDelete","canUpdate","canRead","handleRowClick","id","toString","_jsx","TableImpl","Root","rows","_jsxs","Content","Head","map","header","HeaderCell","Empty","Loading","Body","token","GuidedTourTooltip","tours","apiTokens","ManageAPIToken","React","Fragment","Row","onClick","Cell","maxWidth","Typography","textColor","fontWeight","ellipsis","description","RelativeTime","timestamp","Date","createdAt","lastUsedAt","customIntervals","unit","threshold","text","defaultMessage","apiToken","kind","adminUserOwner","ownerName","Flex","justifyContent","UpdateButton","tokenName","tokenId","DeleteButton","onClickDelete","MESSAGES_MAP","edit","read","DefaultButton","buttonType","children","LinkButtonStyled","tag","NavLink","to","e","stopPropagation","title","target","variant","size","styled","LinkButton","handleClickDelete","Dialog","Box","paddingLeft","Trigger","IconButton","label","Trash","ConfirmDialog","onConfirm","Pencil"],"mappings":"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"}
@@ -70,7 +70,7 @@ const ApiTokenBox = ({ token, tokenType })=>{
70
70
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
71
71
  children: formatMessage({
72
72
  id: 'Settings.apiTokens.copy.lastWarning',
73
- defaultMessage: 'Copy your API token'
73
+ defaultMessage: 'Copy your token'
74
74
  })
75
75
  })
76
76
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"TokenBox.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/TokenBox.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Flex, Box, Typography, Button } from '@strapi/design-system';\nimport { Duplicate, Key } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ContentBox } from '../../../../components/ContentBox';\nimport { useGuidedTour } from '../../../../components/GuidedTour/Context';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from '../../../../components/GuidedTour/utils/constants';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useClipboard } from '../../../../hooks/useClipboard';\n\ninterface TokenBoxProps {\n token?: string;\n tokenType: 'transfer-token' | 'api-token';\n}\n\nconst TypographyWordBreak = styled(Typography)`\n word-break: break-all;\n`;\n\nexport const ApiTokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n const dispatch = useGuidedTour('TokenBox', (s) => s.dispatch);\n\n const { copy } = useClipboard();\n\n const handleCopyToken = async (token: TokenBoxProps['token']) => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.apiTokens.copyToken],\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <>\n <Flex\n shadow=\"tableShadow\"\n direction=\"column\"\n alignItems=\"start\"\n hasRadius\n padding={6}\n background=\"neutral0\"\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1} paddingBottom={4}>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.tokens.copy.title',\n defaultMessage: 'Token',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'Settings.apiTokens.copy.lastWarning',\n defaultMessage: 'Copy your API token',\n })}\n </Typography>\n </Flex>\n <Box background=\"neutral100\" hasRadius padding={2} borderColor=\"neutral150\">\n <TypographyWordBreak fontWeight=\"semiBold\" variant=\"pi\">\n {token}\n </TypographyWordBreak>\n </Box>\n <tours.apiTokens.CopyAPIToken>\n <Button\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n handleCopyToken(token);\n }}\n marginTop={6}\n >\n {formatMessage({ id: 'Settings.tokens.copy.copy', defaultMessage: 'Copy' })}\n </Button>\n </tours.apiTokens.CopyAPIToken>\n </Flex>\n </>\n );\n};\n\nexport const TokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <ContentBox\n endAction={\n token && (\n <span style={{ alignSelf: 'start' }}>\n <IconButton\n label={formatMessage({\n id: 'app.component.CopyToClipboard.label',\n defaultMessage: 'Copy to clipboard',\n })}\n onClick={handleClick(token)}\n variant=\"ghost\"\n type=\"button\"\n style={{ padding: 0, height: '1.6rem' }}\n >\n <Duplicate />\n </IconButton>\n </span>\n )\n }\n title={\n token ||\n formatMessage({\n id: 'Settings.tokens.copy.editTitle',\n defaultMessage: 'This token isn’t accessible anymore.',\n })\n }\n subtitle={\n token\n ? formatMessage(\n tokenType === 'api-token'\n ? {\n id: 'Settings.tokens.copy.subtitle',\n defaultMessage: 'Copy this token for use elsewhere',\n }\n : {\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage:\n 'Make sure to copy this token, you won’t be able to see it again!',\n }\n )\n : formatMessage({\n id: 'Settings.tokens.copy.editMessage',\n defaultMessage: 'For security reasons, you can only see your token once.',\n })\n }\n icon={<Key />}\n iconBackground=\"neutral100\"\n />\n );\n};\n"],"names":["TypographyWordBreak","styled","Typography","ApiTokenBox","token","tokenType","formatMessage","useIntl","toggleNotification","useNotification","trackUsage","useTracking","dispatch","useGuidedTour","s","copy","useClipboard","handleCopyToken","didCopy","type","payload","GUIDED_TOUR_REQUIRED_ACTIONS","apiTokens","copyToken","message","id","_jsx","_Fragment","_jsxs","Flex","shadow","direction","alignItems","hasRadius","padding","background","gap","paddingBottom","fontWeight","defaultMessage","Box","borderColor","variant","tours","CopyAPIToken","Button","startIcon","Duplicate","onClick","e","preventDefault","marginTop","TokenBox","handleClick","ContentBox","endAction","span","style","alignSelf","IconButton","label","height","title","subtitle","icon","Key","iconBackground"],"mappings":"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"}
1
+ {"version":3,"file":"TokenBox.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/TokenBox.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Flex, Box, Typography, Button } from '@strapi/design-system';\nimport { Duplicate, Key } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ContentBox } from '../../../../components/ContentBox';\nimport { useGuidedTour } from '../../../../components/GuidedTour/Context';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from '../../../../components/GuidedTour/utils/constants';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useClipboard } from '../../../../hooks/useClipboard';\n\ninterface TokenBoxProps {\n token?: string;\n tokenType: 'transfer-token' | 'api-token';\n}\n\nconst TypographyWordBreak = styled(Typography)`\n word-break: break-all;\n`;\n\nexport const ApiTokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n const dispatch = useGuidedTour('TokenBox', (s) => s.dispatch);\n\n const { copy } = useClipboard();\n\n const handleCopyToken = async (token: TokenBoxProps['token']) => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.apiTokens.copyToken],\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <>\n <Flex\n shadow=\"tableShadow\"\n direction=\"column\"\n alignItems=\"start\"\n hasRadius\n padding={6}\n background=\"neutral0\"\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1} paddingBottom={4}>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.tokens.copy.title',\n defaultMessage: 'Token',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'Settings.apiTokens.copy.lastWarning',\n defaultMessage: 'Copy your token',\n })}\n </Typography>\n </Flex>\n <Box background=\"neutral100\" hasRadius padding={2} borderColor=\"neutral150\">\n <TypographyWordBreak fontWeight=\"semiBold\" variant=\"pi\">\n {token}\n </TypographyWordBreak>\n </Box>\n <tours.apiTokens.CopyAPIToken>\n <Button\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n handleCopyToken(token);\n }}\n marginTop={6}\n >\n {formatMessage({ id: 'Settings.tokens.copy.copy', defaultMessage: 'Copy' })}\n </Button>\n </tours.apiTokens.CopyAPIToken>\n </Flex>\n </>\n );\n};\n\nexport const TokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <ContentBox\n endAction={\n token && (\n <span style={{ alignSelf: 'start' }}>\n <IconButton\n label={formatMessage({\n id: 'app.component.CopyToClipboard.label',\n defaultMessage: 'Copy to clipboard',\n })}\n onClick={handleClick(token)}\n variant=\"ghost\"\n type=\"button\"\n style={{ padding: 0, height: '1.6rem' }}\n >\n <Duplicate />\n </IconButton>\n </span>\n )\n }\n title={\n token ||\n formatMessage({\n id: 'Settings.tokens.copy.editTitle',\n defaultMessage: 'This token isn’t accessible anymore.',\n })\n }\n subtitle={\n token\n ? formatMessage(\n tokenType === 'api-token'\n ? {\n id: 'Settings.tokens.copy.subtitle',\n defaultMessage: 'Copy this token for use elsewhere',\n }\n : {\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage:\n 'Make sure to copy this token, you won’t be able to see it again!',\n }\n )\n : formatMessage({\n id: 'Settings.tokens.copy.editMessage',\n defaultMessage: 'For security reasons, you can only see your token once.',\n })\n }\n icon={<Key />}\n iconBackground=\"neutral100\"\n />\n );\n};\n"],"names":["TypographyWordBreak","styled","Typography","ApiTokenBox","token","tokenType","formatMessage","useIntl","toggleNotification","useNotification","trackUsage","useTracking","dispatch","useGuidedTour","s","copy","useClipboard","handleCopyToken","didCopy","type","payload","GUIDED_TOUR_REQUIRED_ACTIONS","apiTokens","copyToken","message","id","_jsx","_Fragment","_jsxs","Flex","shadow","direction","alignItems","hasRadius","padding","background","gap","paddingBottom","fontWeight","defaultMessage","Box","borderColor","variant","tours","CopyAPIToken","Button","startIcon","Duplicate","onClick","e","preventDefault","marginTop","TokenBox","handleClick","ContentBox","endAction","span","style","alignSelf","IconButton","label","height","title","subtitle","icon","Key","iconBackground"],"mappings":"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"}
@@ -68,7 +68,7 @@ const ApiTokenBox = ({ token, tokenType })=>{
68
68
  /*#__PURE__*/ jsx(Typography, {
69
69
  children: formatMessage({
70
70
  id: 'Settings.apiTokens.copy.lastWarning',
71
- defaultMessage: 'Copy your API token'
71
+ defaultMessage: 'Copy your token'
72
72
  })
73
73
  })
74
74
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"TokenBox.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/TokenBox.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Flex, Box, Typography, Button } from '@strapi/design-system';\nimport { Duplicate, Key } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ContentBox } from '../../../../components/ContentBox';\nimport { useGuidedTour } from '../../../../components/GuidedTour/Context';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from '../../../../components/GuidedTour/utils/constants';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useClipboard } from '../../../../hooks/useClipboard';\n\ninterface TokenBoxProps {\n token?: string;\n tokenType: 'transfer-token' | 'api-token';\n}\n\nconst TypographyWordBreak = styled(Typography)`\n word-break: break-all;\n`;\n\nexport const ApiTokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n const dispatch = useGuidedTour('TokenBox', (s) => s.dispatch);\n\n const { copy } = useClipboard();\n\n const handleCopyToken = async (token: TokenBoxProps['token']) => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.apiTokens.copyToken],\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <>\n <Flex\n shadow=\"tableShadow\"\n direction=\"column\"\n alignItems=\"start\"\n hasRadius\n padding={6}\n background=\"neutral0\"\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1} paddingBottom={4}>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.tokens.copy.title',\n defaultMessage: 'Token',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'Settings.apiTokens.copy.lastWarning',\n defaultMessage: 'Copy your API token',\n })}\n </Typography>\n </Flex>\n <Box background=\"neutral100\" hasRadius padding={2} borderColor=\"neutral150\">\n <TypographyWordBreak fontWeight=\"semiBold\" variant=\"pi\">\n {token}\n </TypographyWordBreak>\n </Box>\n <tours.apiTokens.CopyAPIToken>\n <Button\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n handleCopyToken(token);\n }}\n marginTop={6}\n >\n {formatMessage({ id: 'Settings.tokens.copy.copy', defaultMessage: 'Copy' })}\n </Button>\n </tours.apiTokens.CopyAPIToken>\n </Flex>\n </>\n );\n};\n\nexport const TokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <ContentBox\n endAction={\n token && (\n <span style={{ alignSelf: 'start' }}>\n <IconButton\n label={formatMessage({\n id: 'app.component.CopyToClipboard.label',\n defaultMessage: 'Copy to clipboard',\n })}\n onClick={handleClick(token)}\n variant=\"ghost\"\n type=\"button\"\n style={{ padding: 0, height: '1.6rem' }}\n >\n <Duplicate />\n </IconButton>\n </span>\n )\n }\n title={\n token ||\n formatMessage({\n id: 'Settings.tokens.copy.editTitle',\n defaultMessage: 'This token isn’t accessible anymore.',\n })\n }\n subtitle={\n token\n ? formatMessage(\n tokenType === 'api-token'\n ? {\n id: 'Settings.tokens.copy.subtitle',\n defaultMessage: 'Copy this token for use elsewhere',\n }\n : {\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage:\n 'Make sure to copy this token, you won’t be able to see it again!',\n }\n )\n : formatMessage({\n id: 'Settings.tokens.copy.editMessage',\n defaultMessage: 'For security reasons, you can only see your token once.',\n })\n }\n icon={<Key />}\n iconBackground=\"neutral100\"\n />\n );\n};\n"],"names":["TypographyWordBreak","styled","Typography","ApiTokenBox","token","tokenType","formatMessage","useIntl","toggleNotification","useNotification","trackUsage","useTracking","dispatch","useGuidedTour","s","copy","useClipboard","handleCopyToken","didCopy","type","payload","GUIDED_TOUR_REQUIRED_ACTIONS","apiTokens","copyToken","message","id","_jsx","_Fragment","_jsxs","Flex","shadow","direction","alignItems","hasRadius","padding","background","gap","paddingBottom","fontWeight","defaultMessage","Box","borderColor","variant","tours","CopyAPIToken","Button","startIcon","Duplicate","onClick","e","preventDefault","marginTop","TokenBox","handleClick","ContentBox","endAction","span","style","alignSelf","IconButton","label","height","title","subtitle","icon","Key","iconBackground"],"mappings":"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"}
1
+ {"version":3,"file":"TokenBox.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/TokenBox.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Flex, Box, Typography, Button } from '@strapi/design-system';\nimport { Duplicate, Key } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ContentBox } from '../../../../components/ContentBox';\nimport { useGuidedTour } from '../../../../components/GuidedTour/Context';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from '../../../../components/GuidedTour/utils/constants';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useClipboard } from '../../../../hooks/useClipboard';\n\ninterface TokenBoxProps {\n token?: string;\n tokenType: 'transfer-token' | 'api-token';\n}\n\nconst TypographyWordBreak = styled(Typography)`\n word-break: break-all;\n`;\n\nexport const ApiTokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n const dispatch = useGuidedTour('TokenBox', (s) => s.dispatch);\n\n const { copy } = useClipboard();\n\n const handleCopyToken = async (token: TokenBoxProps['token']) => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.apiTokens.copyToken],\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <>\n <Flex\n shadow=\"tableShadow\"\n direction=\"column\"\n alignItems=\"start\"\n hasRadius\n padding={6}\n background=\"neutral0\"\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1} paddingBottom={4}>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.tokens.copy.title',\n defaultMessage: 'Token',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'Settings.apiTokens.copy.lastWarning',\n defaultMessage: 'Copy your token',\n })}\n </Typography>\n </Flex>\n <Box background=\"neutral100\" hasRadius padding={2} borderColor=\"neutral150\">\n <TypographyWordBreak fontWeight=\"semiBold\" variant=\"pi\">\n {token}\n </TypographyWordBreak>\n </Box>\n <tours.apiTokens.CopyAPIToken>\n <Button\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n handleCopyToken(token);\n }}\n marginTop={6}\n >\n {formatMessage({ id: 'Settings.tokens.copy.copy', defaultMessage: 'Copy' })}\n </Button>\n </tours.apiTokens.CopyAPIToken>\n </Flex>\n </>\n );\n};\n\nexport const TokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <ContentBox\n endAction={\n token && (\n <span style={{ alignSelf: 'start' }}>\n <IconButton\n label={formatMessage({\n id: 'app.component.CopyToClipboard.label',\n defaultMessage: 'Copy to clipboard',\n })}\n onClick={handleClick(token)}\n variant=\"ghost\"\n type=\"button\"\n style={{ padding: 0, height: '1.6rem' }}\n >\n <Duplicate />\n </IconButton>\n </span>\n )\n }\n title={\n token ||\n formatMessage({\n id: 'Settings.tokens.copy.editTitle',\n defaultMessage: 'This token isn’t accessible anymore.',\n })\n }\n subtitle={\n token\n ? formatMessage(\n tokenType === 'api-token'\n ? {\n id: 'Settings.tokens.copy.subtitle',\n defaultMessage: 'Copy this token for use elsewhere',\n }\n : {\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage:\n 'Make sure to copy this token, you won’t be able to see it again!',\n }\n )\n : formatMessage({\n id: 'Settings.tokens.copy.editMessage',\n defaultMessage: 'For security reasons, you can only see your token once.',\n })\n }\n icon={<Key />}\n iconBackground=\"neutral100\"\n />\n );\n};\n"],"names":["TypographyWordBreak","styled","Typography","ApiTokenBox","token","tokenType","formatMessage","useIntl","toggleNotification","useNotification","trackUsage","useTracking","dispatch","useGuidedTour","s","copy","useClipboard","handleCopyToken","didCopy","type","payload","GUIDED_TOUR_REQUIRED_ACTIONS","apiTokens","copyToken","message","id","_jsx","_Fragment","_jsxs","Flex","shadow","direction","alignItems","hasRadius","padding","background","gap","paddingBottom","fontWeight","defaultMessage","Box","borderColor","variant","tours","CopyAPIToken","Button","startIcon","Duplicate","onClick","e","preventDefault","marginTop","TokenBox","handleClick","ContentBox","endAction","span","style","alignSelf","IconButton","label","height","title","subtitle","icon","Key","iconBackground"],"mappings":"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"}
@@ -1,8 +1,41 @@
1
1
  'use strict';
2
2
 
3
+ var yup = require('yup');
4
+ var translatedErrors = require('../../../../utils/translatedErrors.js');
5
+
6
+ function _interopNamespaceDefault(e) {
7
+ var n = Object.create(null);
8
+ if (e) {
9
+ Object.keys(e).forEach(function (k) {
10
+ if (k !== 'default') {
11
+ var d = Object.getOwnPropertyDescriptor(e, k);
12
+ Object.defineProperty(n, k, d.get ? d : {
13
+ enumerable: true,
14
+ get: function () { return e[k]; }
15
+ });
16
+ }
17
+ });
18
+ }
19
+ n.default = e;
20
+ return Object.freeze(n);
21
+ }
22
+
23
+ var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
24
+
3
25
  const API_TOKEN_TYPE = 'api-token';
4
26
  const TRANSFER_TOKEN_TYPE = 'transfer-token';
27
+ const apiTokenInformationSchema = yup__namespace.object().shape({
28
+ name: yup__namespace.string().max(100).required(translatedErrors.translatedErrors.required.id),
29
+ type: yup__namespace.string().oneOf([
30
+ 'read-only',
31
+ 'full-access',
32
+ 'custom'
33
+ ]).optional(),
34
+ description: yup__namespace.string().nullable(),
35
+ lifespan: yup__namespace.number().integer().min(0).nullable().defined(translatedErrors.translatedErrors.required.id)
36
+ });
5
37
 
6
38
  exports.API_TOKEN_TYPE = API_TOKEN_TYPE;
7
39
  exports.TRANSFER_TOKEN_TYPE = TRANSFER_TOKEN_TYPE;
40
+ exports.apiTokenInformationSchema = apiTokenInformationSchema;
8
41
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/constants.ts"],"sourcesContent":["export const API_TOKEN_TYPE = 'api-token';\nexport const TRANSFER_TOKEN_TYPE = 'transfer-token';\n"],"names":["API_TOKEN_TYPE","TRANSFER_TOKEN_TYPE"],"mappings":";;AAAO,MAAMA,iBAAiB;AACvB,MAAMC,sBAAsB;;;;;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/constants.ts"],"sourcesContent":["import * as yup from 'yup';\n\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nexport const API_TOKEN_TYPE = 'api-token';\nexport const TRANSFER_TOKEN_TYPE = 'transfer-token';\n\nexport const apiTokenInformationSchema = yup.object().shape({\n name: yup.string().max(100).required(translatedErrors.required.id),\n type: yup.string().oneOf(['read-only', 'full-access', 'custom']).optional(),\n description: yup.string().nullable(),\n lifespan: yup.number().integer().min(0).nullable().defined(translatedErrors.required.id),\n});\n"],"names":["API_TOKEN_TYPE","TRANSFER_TOKEN_TYPE","apiTokenInformationSchema","yup","object","shape","name","string","max","required","translatedErrors","id","type","oneOf","optional","description","nullable","lifespan","number","integer","min","defined"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAIO,MAAMA,iBAAiB;AACvB,MAAMC,sBAAsB;MAEtBC,yBAAAA,GAA4BC,cAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;IAC1DC,IAAAA,EAAMH,cAAAA,CAAII,MAAM,EAAA,CAAGC,GAAG,CAAC,GAAA,CAAA,CAAKC,QAAQ,CAACC,iCAAAA,CAAiBD,QAAQ,CAACE,EAAE,CAAA;AACjEC,IAAAA,IAAAA,EAAMT,cAAAA,CAAII,MAAM,EAAA,CAAGM,KAAK,CAAC;AAAC,QAAA,WAAA;AAAa,QAAA,aAAA;AAAe,QAAA;AAAS,KAAA,CAAA,CAAEC,QAAQ,EAAA;IACzEC,WAAAA,EAAaZ,cAAAA,CAAII,MAAM,EAAA,CAAGS,QAAQ,EAAA;AAClCC,IAAAA,QAAAA,EAAUd,cAAAA,CAAIe,MAAM,EAAA,CAAGC,OAAO,GAAGC,GAAG,CAAC,CAAA,CAAA,CAAGJ,QAAQ,GAAGK,OAAO,CAACX,iCAAAA,CAAiBD,QAAQ,CAACE,EAAE;AACzF,CAAA;;;;;;"}
@@ -1,5 +1,18 @@
1
+ import * as yup from 'yup';
2
+ import { translatedErrors as errorsTrads } from '../../../../utils/translatedErrors.mjs';
3
+
1
4
  const API_TOKEN_TYPE = 'api-token';
2
5
  const TRANSFER_TOKEN_TYPE = 'transfer-token';
6
+ const apiTokenInformationSchema = yup.object().shape({
7
+ name: yup.string().max(100).required(errorsTrads.required.id),
8
+ type: yup.string().oneOf([
9
+ 'read-only',
10
+ 'full-access',
11
+ 'custom'
12
+ ]).optional(),
13
+ description: yup.string().nullable(),
14
+ lifespan: yup.number().integer().min(0).nullable().defined(errorsTrads.required.id)
15
+ });
3
16
 
4
- export { API_TOKEN_TYPE, TRANSFER_TOKEN_TYPE };
17
+ export { API_TOKEN_TYPE, TRANSFER_TOKEN_TYPE, apiTokenInformationSchema };
5
18
  //# sourceMappingURL=constants.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/constants.ts"],"sourcesContent":["export const API_TOKEN_TYPE = 'api-token';\nexport const TRANSFER_TOKEN_TYPE = 'transfer-token';\n"],"names":["API_TOKEN_TYPE","TRANSFER_TOKEN_TYPE"],"mappings":"AAAO,MAAMA,iBAAiB;AACvB,MAAMC,sBAAsB;;;;"}
1
+ {"version":3,"file":"constants.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/constants.ts"],"sourcesContent":["import * as yup from 'yup';\n\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nexport const API_TOKEN_TYPE = 'api-token';\nexport const TRANSFER_TOKEN_TYPE = 'transfer-token';\n\nexport const apiTokenInformationSchema = yup.object().shape({\n name: yup.string().max(100).required(translatedErrors.required.id),\n type: yup.string().oneOf(['read-only', 'full-access', 'custom']).optional(),\n description: yup.string().nullable(),\n lifespan: yup.number().integer().min(0).nullable().defined(translatedErrors.required.id),\n});\n"],"names":["API_TOKEN_TYPE","TRANSFER_TOKEN_TYPE","apiTokenInformationSchema","yup","object","shape","name","string","max","required","translatedErrors","id","type","oneOf","optional","description","nullable","lifespan","number","integer","min","defined"],"mappings":";;;AAIO,MAAMA,iBAAiB;AACvB,MAAMC,sBAAsB;MAEtBC,yBAAAA,GAA4BC,GAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;IAC1DC,IAAAA,EAAMH,GAAAA,CAAII,MAAM,EAAA,CAAGC,GAAG,CAAC,GAAA,CAAA,CAAKC,QAAQ,CAACC,WAAAA,CAAiBD,QAAQ,CAACE,EAAE,CAAA;AACjEC,IAAAA,IAAAA,EAAMT,GAAAA,CAAII,MAAM,EAAA,CAAGM,KAAK,CAAC;AAAC,QAAA,WAAA;AAAa,QAAA,aAAA;AAAe,QAAA;AAAS,KAAA,CAAA,CAAEC,QAAQ,EAAA;IACzEC,WAAAA,EAAaZ,GAAAA,CAAII,MAAM,EAAA,CAAGS,QAAQ,EAAA;AAClCC,IAAAA,QAAAA,EAAUd,GAAAA,CAAIe,MAAM,EAAA,CAAGC,OAAO,GAAGC,GAAG,CAAC,CAAA,CAAA,CAAGJ,QAAQ,GAAGK,OAAO,CAACX,WAAAA,CAAiBD,QAAQ,CAACE,EAAE;AACzF,CAAA;;;;"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  var dateFns = require('date-fns');
4
4
  var locales = require('date-fns/locale');
5
- var locales$1 = require('../../../../../../utils/locales.js');
5
+ var locales$1 = require('../../../../../utils/locales.js');
6
6
 
7
7
  function _interopNamespaceDefault(e) {
8
8
  var n = Object.create(null);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDateOfExpiration.js","sources":["../../../../../../../../../admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.ts"],"sourcesContent":["import { addDays, format } from 'date-fns';\nimport * as locales from 'date-fns/locale';\n\nimport { getDateFnsLocaleName } from '../../../../../utils/locales';\n\nexport const getDateOfExpiration = (\n createdAt: string,\n duration: number | null,\n language: string = 'en'\n) => {\n if (duration && typeof duration === 'number') {\n const durationInDays = duration / 24 / 60 / 60 / 1000;\n\n return format(addDays(new Date(createdAt), durationInDays), 'PPP', {\n locale: locales[getDateFnsLocaleName(language)],\n });\n }\n\n return 'Unlimited';\n};\n"],"names":["getDateOfExpiration","createdAt","duration","language","durationInDays","format","addDays","Date","locale","locales","getDateFnsLocaleName"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;MAKaA,mBAAAA,GAAsB,CACjCC,SAAAA,EACAC,QAAAA,EACAC,WAAmB,IAAI,GAAA;IAEvB,IAAID,QAAAA,IAAY,OAAOA,QAAAA,KAAa,QAAA,EAAU;AAC5C,QAAA,MAAME,cAAAA,GAAiBF,QAAAA,GAAW,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,IAAA;AAEjD,QAAA,OAAOG,eAAOC,eAAAA,CAAQ,IAAIC,IAAAA,CAAKN,SAAAA,CAAAA,EAAYG,iBAAiB,KAAA,EAAO;YACjEI,MAAAA,EAAQC,kBAAO,CAACC,8BAAAA,CAAqBP,QAAAA,CAAAA;AACvC,SAAA,CAAA;AACF,IAAA;IAEA,OAAO,WAAA;AACT;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { format, addDays } from 'date-fns';
2
2
  import * as locales from 'date-fns/locale';
3
- import { getDateFnsLocaleName } from '../../../../../../utils/locales.mjs';
3
+ import { getDateFnsLocaleName } from '../../../../../utils/locales.mjs';
4
4
 
5
5
  const getDateOfExpiration = (createdAt, duration, language = 'en')=>{
6
6
  if (duration && typeof duration === 'number') {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDateOfExpiration.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.ts"],"sourcesContent":["import { addDays, format } from 'date-fns';\nimport * as locales from 'date-fns/locale';\n\nimport { getDateFnsLocaleName } from '../../../../../utils/locales';\n\nexport const getDateOfExpiration = (\n createdAt: string,\n duration: number | null,\n language: string = 'en'\n) => {\n if (duration && typeof duration === 'number') {\n const durationInDays = duration / 24 / 60 / 60 / 1000;\n\n return format(addDays(new Date(createdAt), durationInDays), 'PPP', {\n locale: locales[getDateFnsLocaleName(language)],\n });\n }\n\n return 'Unlimited';\n};\n"],"names":["getDateOfExpiration","createdAt","duration","language","durationInDays","format","addDays","Date","locale","locales","getDateFnsLocaleName"],"mappings":";;;;MAKaA,mBAAAA,GAAsB,CACjCC,SAAAA,EACAC,QAAAA,EACAC,WAAmB,IAAI,GAAA;IAEvB,IAAID,QAAAA,IAAY,OAAOA,QAAAA,KAAa,QAAA,EAAU;AAC5C,QAAA,MAAME,cAAAA,GAAiBF,QAAAA,GAAW,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,IAAA;AAEjD,QAAA,OAAOG,OAAOC,OAAAA,CAAQ,IAAIC,IAAAA,CAAKN,SAAAA,CAAAA,EAAYG,iBAAiB,KAAA,EAAO;YACjEI,MAAAA,EAAQC,OAAO,CAACC,oBAAAA,CAAqBP,QAAAA,CAAAA;AACvC,SAAA,CAAA;AACF,IAAA;IAEA,OAAO,WAAA;AACT;;;;"}