@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
@@ -7,14 +7,14 @@ var apiTokens = require('../validation/api-tokens.js');
7
7
 
8
8
  const { ApplicationError } = utils.errors;
9
9
  var apiToken = {
10
+ // -------------------------------------------------------------------------
11
+ // Create
12
+ // -------------------------------------------------------------------------
10
13
  async create (ctx) {
11
14
  const { body } = ctx.request;
12
- const apiTokenService = index.getService('api-token');
13
- /**
14
- * We trim both field to avoid having issues with either:
15
- * - having a space at the end or start of the value.
16
- * - having only spaces as value;
17
- */ const attributes = {
15
+ const apiTokenService = index.getService('api-token-content-api');
16
+ const attributes = {
17
+ kind: 'content-api',
18
18
  name: fp.trim(body.name),
19
19
  description: fp.trim(body.description),
20
20
  type: body.type,
@@ -28,16 +28,19 @@ var apiToken = {
28
28
  if (alreadyExists) {
29
29
  throw new ApplicationError('Name already taken');
30
30
  }
31
- const apiToken = await apiTokenService.create(attributes);
31
+ const apiToken = await apiTokenService.create(attributes, ctx.state.user);
32
32
  ctx.created({
33
33
  data: apiToken
34
34
  });
35
35
  },
36
+ // -------------------------------------------------------------------------
37
+ // Regenerate
38
+ // -------------------------------------------------------------------------
36
39
  async regenerate (ctx) {
37
40
  const { id } = ctx.params;
38
- const apiTokenService = index.getService('api-token');
39
- const apiTokenExists = await apiTokenService.getById(id);
40
- if (!apiTokenExists) {
41
+ const apiTokenService = index.getService('api-token-content-api');
42
+ const token = await apiTokenService.getById(id);
43
+ if (!token) {
41
44
  ctx.notFound('API Token not found');
42
45
  return;
43
46
  }
@@ -46,76 +49,74 @@ var apiToken = {
46
49
  data: accessToken
47
50
  });
48
51
  },
52
+ // -------------------------------------------------------------------------
53
+ // List — always content-api
54
+ // -------------------------------------------------------------------------
49
55
  async list (ctx) {
50
- const apiTokenService = index.getService('api-token');
51
- const apiTokens = await apiTokenService.list();
56
+ const apiTokenService = index.getService('api-token-content-api');
57
+ const apiTokens = await apiTokenService.list(ctx.state.user);
52
58
  ctx.send({
53
59
  data: apiTokens
54
60
  });
55
61
  },
62
+ // -------------------------------------------------------------------------
63
+ // Revoke
64
+ // -------------------------------------------------------------------------
56
65
  async revoke (ctx) {
57
66
  const { id } = ctx.params;
58
- const apiTokenService = index.getService('api-token');
67
+ const apiTokenService = index.getService('api-token-content-api');
59
68
  const apiToken = await apiTokenService.revoke(id);
60
69
  ctx.deleted({
61
70
  data: apiToken
62
71
  });
63
72
  },
73
+ // -------------------------------------------------------------------------
74
+ // Get — always expose the decrypted key (content-api back-compat)
75
+ // -------------------------------------------------------------------------
64
76
  async get (ctx) {
65
77
  const { id } = ctx.params;
66
- const apiTokenService = index.getService('api-token');
67
- const apiToken = await apiTokenService.getById(id);
68
- if (!apiToken) {
78
+ const apiTokenService = index.getService('api-token-content-api');
79
+ const token = await apiTokenService.getById(id);
80
+ if (!token) {
69
81
  ctx.notFound('API Token not found');
70
82
  return;
71
83
  }
84
+ const withKey = await apiTokenService.getById(id, {
85
+ includeDecryptedKey: true
86
+ });
72
87
  ctx.send({
73
- data: apiToken
88
+ data: withKey ?? token
74
89
  });
75
90
  },
91
+ // -------------------------------------------------------------------------
92
+ // Update
93
+ // -------------------------------------------------------------------------
76
94
  async update (ctx) {
77
95
  const { body } = ctx.request;
78
96
  const { id } = ctx.params;
79
- const apiTokenService = index.getService('api-token');
80
- const attributes = body;
81
- /**
82
- * We trim both field to avoid having issues with either:
83
- * - having a space at the end or start of the value.
84
- * - having only spaces as value;
85
- */ if (fp.has('name', attributes)) {
86
- attributes.name = fp.trim(body.name);
97
+ const apiTokenService = index.getService('api-token-content-api');
98
+ const mutableBody = body;
99
+ if (fp.has('name', mutableBody)) {
100
+ mutableBody.name = fp.trim(body.name ?? '');
87
101
  }
88
- if (fp.has('description', attributes) || attributes.description === null) {
89
- attributes.description = fp.trim(body.description);
102
+ if (fp.has('description', mutableBody) || mutableBody.description === null) {
103
+ mutableBody.description = fp.trim(body.description ?? '');
90
104
  }
91
- await apiTokens.validateApiTokenUpdateInput(attributes);
92
- const apiTokenExists = await apiTokenService.getById(id);
93
- if (!apiTokenExists) {
105
+ await apiTokens.validateApiTokenUpdateInput(body);
106
+ const existingToken = await apiTokenService.getById(id);
107
+ if (!existingToken) {
94
108
  return ctx.notFound('API Token not found');
95
109
  }
96
- if (fp.has('name', attributes)) {
97
- const nameAlreadyTaken = await apiTokenService.getByName(attributes.name);
98
- /**
99
- * We cast the ids as string as the one coming from the ctx isn't cast
100
- * as a Number in case it is supposed to be an integer. It remains
101
- * as a string. This way we avoid issues with integers in the db.
102
- */ if (!!nameAlreadyTaken && !utils.strings.isEqual(nameAlreadyTaken.id, id)) {
110
+ if (fp.has('name', body)) {
111
+ const nameAlreadyTaken = await apiTokenService.getByName(body.name);
112
+ if (nameAlreadyTaken !== null && !utils.strings.isEqual(nameAlreadyTaken.id, id)) {
103
113
  throw new ApplicationError('Name already taken');
104
114
  }
105
115
  }
106
- const apiToken = await apiTokenService.update(id, attributes);
116
+ const apiToken = await apiTokenService.update(id, body);
107
117
  ctx.send({
108
118
  data: apiToken
109
119
  });
110
- },
111
- async getLayout (ctx) {
112
- const apiTokenService = index.getService('api-token');
113
- // TODO
114
- // @ts-expect-error remove this controller if not used
115
- const layout = await apiTokenService.getApiTokenLayout();
116
- ctx.send({
117
- data: layout
118
- });
119
120
  }
120
121
  };
121
122
 
@@ -1 +1 @@
1
- {"version":3,"file":"api-token.js","sources":["../../../../../server/src/controllers/api-token.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport { strings, errors } from '@strapi/utils';\nimport { trim, has } from 'lodash/fp';\nimport { getService } from '../utils';\nimport {\n validateApiTokenCreationInput,\n validateApiTokenUpdateInput,\n} from '../validation/api-tokens';\n\nimport { Create, List, Revoke, Get, Update } from '../../../shared/contracts/api-token';\n\nconst { ApplicationError } = errors;\n\nexport default {\n async create(ctx: Context) {\n const { body } = ctx.request as Create.Request;\n const apiTokenService = getService('api-token');\n\n /**\n * We trim both field to avoid having issues with either:\n * - having a space at the end or start of the value.\n * - having only spaces as value;\n */\n const attributes = {\n name: trim(body.name),\n description: trim(body.description),\n type: body.type,\n permissions: body.permissions,\n lifespan: body.lifespan,\n };\n\n await validateApiTokenCreationInput(attributes);\n\n const alreadyExists = await apiTokenService.exists({ name: attributes.name });\n if (alreadyExists) {\n throw new ApplicationError('Name already taken');\n }\n\n const apiToken = await apiTokenService.create(attributes);\n ctx.created({ data: apiToken } satisfies Create.Response);\n },\n\n async regenerate(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token');\n\n const apiTokenExists = await apiTokenService.getById(id);\n if (!apiTokenExists) {\n ctx.notFound('API Token not found');\n return;\n }\n\n const accessToken = await apiTokenService.regenerate(id);\n\n ctx.created({ data: accessToken });\n },\n\n async list(ctx: Context) {\n const apiTokenService = getService('api-token');\n const apiTokens = await apiTokenService.list();\n\n ctx.send({ data: apiTokens } satisfies List.Response);\n },\n\n async revoke(ctx: Context) {\n const { id } = ctx.params as Revoke.Params;\n const apiTokenService = getService('api-token');\n const apiToken = await apiTokenService.revoke(id);\n\n ctx.deleted({ data: apiToken } satisfies Revoke.Response);\n },\n\n async get(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token');\n const apiToken = await apiTokenService.getById(id);\n\n if (!apiToken) {\n ctx.notFound('API Token not found');\n return;\n }\n\n ctx.send({ data: apiToken } satisfies Get.Response);\n },\n\n async update(ctx: Context) {\n const { body } = ctx.request as Update.Request;\n const { id } = ctx.params as Update.Params;\n const apiTokenService = getService('api-token');\n\n const attributes = body;\n /**\n * We trim both field to avoid having issues with either:\n * - having a space at the end or start of the value.\n * - having only spaces as value;\n */\n if (has('name', attributes)) {\n attributes.name = trim(body.name);\n }\n\n if (has('description', attributes) || attributes.description === null) {\n attributes.description = trim(body.description);\n }\n\n await validateApiTokenUpdateInput(attributes);\n\n const apiTokenExists = await apiTokenService.getById(id);\n if (!apiTokenExists) {\n return ctx.notFound('API Token not found');\n }\n\n if (has('name', attributes)) {\n const nameAlreadyTaken = await apiTokenService.getByName(attributes.name);\n\n /**\n * We cast the ids as string as the one coming from the ctx isn't cast\n * as a Number in case it is supposed to be an integer. It remains\n * as a string. This way we avoid issues with integers in the db.\n */\n if (!!nameAlreadyTaken && !strings.isEqual(nameAlreadyTaken.id, id)) {\n throw new ApplicationError('Name already taken');\n }\n }\n\n const apiToken = await apiTokenService.update(id, attributes);\n ctx.send({ data: apiToken } satisfies Update.Response);\n },\n\n async getLayout(ctx: Context) {\n const apiTokenService = getService('api-token');\n // TODO\n // @ts-expect-error remove this controller if not used\n const layout = await apiTokenService.getApiTokenLayout();\n\n ctx.send({ data: layout });\n },\n};\n"],"names":["ApplicationError","errors","create","ctx","body","request","apiTokenService","getService","attributes","name","trim","description","type","permissions","lifespan","validateApiTokenCreationInput","alreadyExists","exists","apiToken","created","data","regenerate","id","params","apiTokenExists","getById","notFound","accessToken","list","apiTokens","send","revoke","deleted","get","update","has","validateApiTokenUpdateInput","nameAlreadyTaken","getByName","strings","isEqual","getLayout","layout","getApiTokenLayout"],"mappings":"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"}
1
+ {"version":3,"file":"api-token.js","sources":["../../../../../server/src/controllers/api-token.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport { strings, errors } from '@strapi/utils';\nimport { trim, has } from 'lodash/fp';\nimport { getService } from '../utils';\nimport {\n validateApiTokenCreationInput,\n validateApiTokenUpdateInput,\n} from '../validation/api-tokens';\n\nimport { Create, List, Revoke, Get, Update } from '../../../shared/contracts/api-token';\n\nconst { ApplicationError } = errors;\n\nexport default {\n // -------------------------------------------------------------------------\n // Create\n // -------------------------------------------------------------------------\n async create(ctx: Context) {\n const { body } = ctx.request as Create.Request;\n const apiTokenService = getService('api-token-content-api');\n\n const attributes = {\n kind: 'content-api' as const,\n name: trim(body.name),\n description: trim(body.description),\n type: body.type,\n permissions: body.permissions,\n lifespan: body.lifespan,\n };\n\n await validateApiTokenCreationInput(attributes);\n\n const alreadyExists = await apiTokenService.exists({ name: attributes.name });\n if (alreadyExists) {\n throw new ApplicationError('Name already taken');\n }\n\n const apiToken = await apiTokenService.create(attributes, ctx.state.user);\n ctx.created({ data: apiToken } satisfies Create.Response);\n },\n\n // -------------------------------------------------------------------------\n // Regenerate\n // -------------------------------------------------------------------------\n async regenerate(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token-content-api');\n\n const token = await apiTokenService.getById(id);\n if (!token) {\n ctx.notFound('API Token not found');\n return;\n }\n\n const accessToken = await apiTokenService.regenerate(id);\n ctx.created({ data: accessToken });\n },\n\n // -------------------------------------------------------------------------\n // List — always content-api\n // -------------------------------------------------------------------------\n async list(ctx: Context) {\n const apiTokenService = getService('api-token-content-api');\n const apiTokens = await apiTokenService.list(ctx.state.user);\n\n ctx.send({ data: apiTokens } satisfies List.Response);\n },\n\n // -------------------------------------------------------------------------\n // Revoke\n // -------------------------------------------------------------------------\n async revoke(ctx: Context) {\n const { id } = ctx.params as Revoke.Params;\n const apiTokenService = getService('api-token-content-api');\n const apiToken = await apiTokenService.revoke(id);\n\n ctx.deleted({ data: apiToken } satisfies Revoke.Response);\n },\n\n // -------------------------------------------------------------------------\n // Get — always expose the decrypted key (content-api back-compat)\n // -------------------------------------------------------------------------\n async get(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token-content-api');\n\n const token = await apiTokenService.getById(id);\n if (!token) {\n ctx.notFound('API Token not found');\n return;\n }\n\n const withKey = await apiTokenService.getById(id, { includeDecryptedKey: true });\n ctx.send({ data: withKey ?? token } satisfies Get.Response);\n },\n\n // -------------------------------------------------------------------------\n // Update\n // -------------------------------------------------------------------------\n async update(ctx: Context) {\n const { body } = ctx.request as Update.Request;\n const { id } = ctx.params as Update.Params;\n const apiTokenService = getService('api-token-content-api');\n\n const mutableBody = body as Record<string, unknown>;\n if (has('name', mutableBody)) {\n mutableBody.name = trim(body.name ?? '');\n }\n if (has('description', mutableBody) || mutableBody.description === null) {\n mutableBody.description = trim(body.description ?? '');\n }\n\n await validateApiTokenUpdateInput(body);\n\n const existingToken = await apiTokenService.getById(id);\n if (!existingToken) {\n return ctx.notFound('API Token not found');\n }\n\n if (has('name', body)) {\n const nameAlreadyTaken = await apiTokenService.getByName(body.name!);\n if (nameAlreadyTaken !== null && !strings.isEqual(nameAlreadyTaken.id, id)) {\n throw new ApplicationError('Name already taken');\n }\n }\n\n const apiToken = await apiTokenService.update(id, body);\n ctx.send({ data: apiToken } satisfies Update.Response);\n },\n};\n"],"names":["ApplicationError","errors","create","ctx","body","request","apiTokenService","getService","attributes","kind","name","trim","description","type","permissions","lifespan","validateApiTokenCreationInput","alreadyExists","exists","apiToken","state","user","created","data","regenerate","id","params","token","getById","notFound","accessToken","list","apiTokens","send","revoke","deleted","get","withKey","includeDecryptedKey","update","mutableBody","has","validateApiTokenUpdateInput","existingToken","nameAlreadyTaken","getByName","strings","isEqual"],"mappings":"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"}
@@ -5,14 +5,14 @@ import { validateApiTokenUpdateInput, validateApiTokenCreationInput } from '../v
5
5
 
6
6
  const { ApplicationError } = errors;
7
7
  var apiToken = {
8
+ // -------------------------------------------------------------------------
9
+ // Create
10
+ // -------------------------------------------------------------------------
8
11
  async create (ctx) {
9
12
  const { body } = ctx.request;
10
- const apiTokenService = getService('api-token');
11
- /**
12
- * We trim both field to avoid having issues with either:
13
- * - having a space at the end or start of the value.
14
- * - having only spaces as value;
15
- */ const attributes = {
13
+ const apiTokenService = getService('api-token-content-api');
14
+ const attributes = {
15
+ kind: 'content-api',
16
16
  name: trim(body.name),
17
17
  description: trim(body.description),
18
18
  type: body.type,
@@ -26,16 +26,19 @@ var apiToken = {
26
26
  if (alreadyExists) {
27
27
  throw new ApplicationError('Name already taken');
28
28
  }
29
- const apiToken = await apiTokenService.create(attributes);
29
+ const apiToken = await apiTokenService.create(attributes, ctx.state.user);
30
30
  ctx.created({
31
31
  data: apiToken
32
32
  });
33
33
  },
34
+ // -------------------------------------------------------------------------
35
+ // Regenerate
36
+ // -------------------------------------------------------------------------
34
37
  async regenerate (ctx) {
35
38
  const { id } = ctx.params;
36
- const apiTokenService = getService('api-token');
37
- const apiTokenExists = await apiTokenService.getById(id);
38
- if (!apiTokenExists) {
39
+ const apiTokenService = getService('api-token-content-api');
40
+ const token = await apiTokenService.getById(id);
41
+ if (!token) {
39
42
  ctx.notFound('API Token not found');
40
43
  return;
41
44
  }
@@ -44,76 +47,74 @@ var apiToken = {
44
47
  data: accessToken
45
48
  });
46
49
  },
50
+ // -------------------------------------------------------------------------
51
+ // List — always content-api
52
+ // -------------------------------------------------------------------------
47
53
  async list (ctx) {
48
- const apiTokenService = getService('api-token');
49
- const apiTokens = await apiTokenService.list();
54
+ const apiTokenService = getService('api-token-content-api');
55
+ const apiTokens = await apiTokenService.list(ctx.state.user);
50
56
  ctx.send({
51
57
  data: apiTokens
52
58
  });
53
59
  },
60
+ // -------------------------------------------------------------------------
61
+ // Revoke
62
+ // -------------------------------------------------------------------------
54
63
  async revoke (ctx) {
55
64
  const { id } = ctx.params;
56
- const apiTokenService = getService('api-token');
65
+ const apiTokenService = getService('api-token-content-api');
57
66
  const apiToken = await apiTokenService.revoke(id);
58
67
  ctx.deleted({
59
68
  data: apiToken
60
69
  });
61
70
  },
71
+ // -------------------------------------------------------------------------
72
+ // Get — always expose the decrypted key (content-api back-compat)
73
+ // -------------------------------------------------------------------------
62
74
  async get (ctx) {
63
75
  const { id } = ctx.params;
64
- const apiTokenService = getService('api-token');
65
- const apiToken = await apiTokenService.getById(id);
66
- if (!apiToken) {
76
+ const apiTokenService = getService('api-token-content-api');
77
+ const token = await apiTokenService.getById(id);
78
+ if (!token) {
67
79
  ctx.notFound('API Token not found');
68
80
  return;
69
81
  }
82
+ const withKey = await apiTokenService.getById(id, {
83
+ includeDecryptedKey: true
84
+ });
70
85
  ctx.send({
71
- data: apiToken
86
+ data: withKey ?? token
72
87
  });
73
88
  },
89
+ // -------------------------------------------------------------------------
90
+ // Update
91
+ // -------------------------------------------------------------------------
74
92
  async update (ctx) {
75
93
  const { body } = ctx.request;
76
94
  const { id } = ctx.params;
77
- const apiTokenService = getService('api-token');
78
- const attributes = body;
79
- /**
80
- * We trim both field to avoid having issues with either:
81
- * - having a space at the end or start of the value.
82
- * - having only spaces as value;
83
- */ if (has('name', attributes)) {
84
- attributes.name = trim(body.name);
95
+ const apiTokenService = getService('api-token-content-api');
96
+ const mutableBody = body;
97
+ if (has('name', mutableBody)) {
98
+ mutableBody.name = trim(body.name ?? '');
85
99
  }
86
- if (has('description', attributes) || attributes.description === null) {
87
- attributes.description = trim(body.description);
100
+ if (has('description', mutableBody) || mutableBody.description === null) {
101
+ mutableBody.description = trim(body.description ?? '');
88
102
  }
89
- await validateApiTokenUpdateInput(attributes);
90
- const apiTokenExists = await apiTokenService.getById(id);
91
- if (!apiTokenExists) {
103
+ await validateApiTokenUpdateInput(body);
104
+ const existingToken = await apiTokenService.getById(id);
105
+ if (!existingToken) {
92
106
  return ctx.notFound('API Token not found');
93
107
  }
94
- if (has('name', attributes)) {
95
- const nameAlreadyTaken = await apiTokenService.getByName(attributes.name);
96
- /**
97
- * We cast the ids as string as the one coming from the ctx isn't cast
98
- * as a Number in case it is supposed to be an integer. It remains
99
- * as a string. This way we avoid issues with integers in the db.
100
- */ if (!!nameAlreadyTaken && !strings.isEqual(nameAlreadyTaken.id, id)) {
108
+ if (has('name', body)) {
109
+ const nameAlreadyTaken = await apiTokenService.getByName(body.name);
110
+ if (nameAlreadyTaken !== null && !strings.isEqual(nameAlreadyTaken.id, id)) {
101
111
  throw new ApplicationError('Name already taken');
102
112
  }
103
113
  }
104
- const apiToken = await apiTokenService.update(id, attributes);
114
+ const apiToken = await apiTokenService.update(id, body);
105
115
  ctx.send({
106
116
  data: apiToken
107
117
  });
108
- },
109
- async getLayout (ctx) {
110
- const apiTokenService = getService('api-token');
111
- // TODO
112
- // @ts-expect-error remove this controller if not used
113
- const layout = await apiTokenService.getApiTokenLayout();
114
- ctx.send({
115
- data: layout
116
- });
117
118
  }
118
119
  };
119
120
 
@@ -1 +1 @@
1
- {"version":3,"file":"api-token.mjs","sources":["../../../../../server/src/controllers/api-token.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport { strings, errors } from '@strapi/utils';\nimport { trim, has } from 'lodash/fp';\nimport { getService } from '../utils';\nimport {\n validateApiTokenCreationInput,\n validateApiTokenUpdateInput,\n} from '../validation/api-tokens';\n\nimport { Create, List, Revoke, Get, Update } from '../../../shared/contracts/api-token';\n\nconst { ApplicationError } = errors;\n\nexport default {\n async create(ctx: Context) {\n const { body } = ctx.request as Create.Request;\n const apiTokenService = getService('api-token');\n\n /**\n * We trim both field to avoid having issues with either:\n * - having a space at the end or start of the value.\n * - having only spaces as value;\n */\n const attributes = {\n name: trim(body.name),\n description: trim(body.description),\n type: body.type,\n permissions: body.permissions,\n lifespan: body.lifespan,\n };\n\n await validateApiTokenCreationInput(attributes);\n\n const alreadyExists = await apiTokenService.exists({ name: attributes.name });\n if (alreadyExists) {\n throw new ApplicationError('Name already taken');\n }\n\n const apiToken = await apiTokenService.create(attributes);\n ctx.created({ data: apiToken } satisfies Create.Response);\n },\n\n async regenerate(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token');\n\n const apiTokenExists = await apiTokenService.getById(id);\n if (!apiTokenExists) {\n ctx.notFound('API Token not found');\n return;\n }\n\n const accessToken = await apiTokenService.regenerate(id);\n\n ctx.created({ data: accessToken });\n },\n\n async list(ctx: Context) {\n const apiTokenService = getService('api-token');\n const apiTokens = await apiTokenService.list();\n\n ctx.send({ data: apiTokens } satisfies List.Response);\n },\n\n async revoke(ctx: Context) {\n const { id } = ctx.params as Revoke.Params;\n const apiTokenService = getService('api-token');\n const apiToken = await apiTokenService.revoke(id);\n\n ctx.deleted({ data: apiToken } satisfies Revoke.Response);\n },\n\n async get(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token');\n const apiToken = await apiTokenService.getById(id);\n\n if (!apiToken) {\n ctx.notFound('API Token not found');\n return;\n }\n\n ctx.send({ data: apiToken } satisfies Get.Response);\n },\n\n async update(ctx: Context) {\n const { body } = ctx.request as Update.Request;\n const { id } = ctx.params as Update.Params;\n const apiTokenService = getService('api-token');\n\n const attributes = body;\n /**\n * We trim both field to avoid having issues with either:\n * - having a space at the end or start of the value.\n * - having only spaces as value;\n */\n if (has('name', attributes)) {\n attributes.name = trim(body.name);\n }\n\n if (has('description', attributes) || attributes.description === null) {\n attributes.description = trim(body.description);\n }\n\n await validateApiTokenUpdateInput(attributes);\n\n const apiTokenExists = await apiTokenService.getById(id);\n if (!apiTokenExists) {\n return ctx.notFound('API Token not found');\n }\n\n if (has('name', attributes)) {\n const nameAlreadyTaken = await apiTokenService.getByName(attributes.name);\n\n /**\n * We cast the ids as string as the one coming from the ctx isn't cast\n * as a Number in case it is supposed to be an integer. It remains\n * as a string. This way we avoid issues with integers in the db.\n */\n if (!!nameAlreadyTaken && !strings.isEqual(nameAlreadyTaken.id, id)) {\n throw new ApplicationError('Name already taken');\n }\n }\n\n const apiToken = await apiTokenService.update(id, attributes);\n ctx.send({ data: apiToken } satisfies Update.Response);\n },\n\n async getLayout(ctx: Context) {\n const apiTokenService = getService('api-token');\n // TODO\n // @ts-expect-error remove this controller if not used\n const layout = await apiTokenService.getApiTokenLayout();\n\n ctx.send({ data: layout });\n },\n};\n"],"names":["ApplicationError","errors","create","ctx","body","request","apiTokenService","getService","attributes","name","trim","description","type","permissions","lifespan","validateApiTokenCreationInput","alreadyExists","exists","apiToken","created","data","regenerate","id","params","apiTokenExists","getById","notFound","accessToken","list","apiTokens","send","revoke","deleted","get","update","has","validateApiTokenUpdateInput","nameAlreadyTaken","getByName","strings","isEqual","getLayout","layout","getApiTokenLayout"],"mappings":"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"}
1
+ {"version":3,"file":"api-token.mjs","sources":["../../../../../server/src/controllers/api-token.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport { strings, errors } from '@strapi/utils';\nimport { trim, has } from 'lodash/fp';\nimport { getService } from '../utils';\nimport {\n validateApiTokenCreationInput,\n validateApiTokenUpdateInput,\n} from '../validation/api-tokens';\n\nimport { Create, List, Revoke, Get, Update } from '../../../shared/contracts/api-token';\n\nconst { ApplicationError } = errors;\n\nexport default {\n // -------------------------------------------------------------------------\n // Create\n // -------------------------------------------------------------------------\n async create(ctx: Context) {\n const { body } = ctx.request as Create.Request;\n const apiTokenService = getService('api-token-content-api');\n\n const attributes = {\n kind: 'content-api' as const,\n name: trim(body.name),\n description: trim(body.description),\n type: body.type,\n permissions: body.permissions,\n lifespan: body.lifespan,\n };\n\n await validateApiTokenCreationInput(attributes);\n\n const alreadyExists = await apiTokenService.exists({ name: attributes.name });\n if (alreadyExists) {\n throw new ApplicationError('Name already taken');\n }\n\n const apiToken = await apiTokenService.create(attributes, ctx.state.user);\n ctx.created({ data: apiToken } satisfies Create.Response);\n },\n\n // -------------------------------------------------------------------------\n // Regenerate\n // -------------------------------------------------------------------------\n async regenerate(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token-content-api');\n\n const token = await apiTokenService.getById(id);\n if (!token) {\n ctx.notFound('API Token not found');\n return;\n }\n\n const accessToken = await apiTokenService.regenerate(id);\n ctx.created({ data: accessToken });\n },\n\n // -------------------------------------------------------------------------\n // List — always content-api\n // -------------------------------------------------------------------------\n async list(ctx: Context) {\n const apiTokenService = getService('api-token-content-api');\n const apiTokens = await apiTokenService.list(ctx.state.user);\n\n ctx.send({ data: apiTokens } satisfies List.Response);\n },\n\n // -------------------------------------------------------------------------\n // Revoke\n // -------------------------------------------------------------------------\n async revoke(ctx: Context) {\n const { id } = ctx.params as Revoke.Params;\n const apiTokenService = getService('api-token-content-api');\n const apiToken = await apiTokenService.revoke(id);\n\n ctx.deleted({ data: apiToken } satisfies Revoke.Response);\n },\n\n // -------------------------------------------------------------------------\n // Get — always expose the decrypted key (content-api back-compat)\n // -------------------------------------------------------------------------\n async get(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token-content-api');\n\n const token = await apiTokenService.getById(id);\n if (!token) {\n ctx.notFound('API Token not found');\n return;\n }\n\n const withKey = await apiTokenService.getById(id, { includeDecryptedKey: true });\n ctx.send({ data: withKey ?? token } satisfies Get.Response);\n },\n\n // -------------------------------------------------------------------------\n // Update\n // -------------------------------------------------------------------------\n async update(ctx: Context) {\n const { body } = ctx.request as Update.Request;\n const { id } = ctx.params as Update.Params;\n const apiTokenService = getService('api-token-content-api');\n\n const mutableBody = body as Record<string, unknown>;\n if (has('name', mutableBody)) {\n mutableBody.name = trim(body.name ?? '');\n }\n if (has('description', mutableBody) || mutableBody.description === null) {\n mutableBody.description = trim(body.description ?? '');\n }\n\n await validateApiTokenUpdateInput(body);\n\n const existingToken = await apiTokenService.getById(id);\n if (!existingToken) {\n return ctx.notFound('API Token not found');\n }\n\n if (has('name', body)) {\n const nameAlreadyTaken = await apiTokenService.getByName(body.name!);\n if (nameAlreadyTaken !== null && !strings.isEqual(nameAlreadyTaken.id, id)) {\n throw new ApplicationError('Name already taken');\n }\n }\n\n const apiToken = await apiTokenService.update(id, body);\n ctx.send({ data: apiToken } satisfies Update.Response);\n },\n};\n"],"names":["ApplicationError","errors","create","ctx","body","request","apiTokenService","getService","attributes","kind","name","trim","description","type","permissions","lifespan","validateApiTokenCreationInput","alreadyExists","exists","apiToken","state","user","created","data","regenerate","id","params","token","getById","notFound","accessToken","list","apiTokens","send","revoke","deleted","get","withKey","includeDecryptedKey","update","mutableBody","has","validateApiTokenUpdateInput","existingToken","nameAlreadyTaken","getByName","strings","isEqual"],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
 
3
3
  var admin = require('./admin.js');
4
4
  var apiToken = require('./api-token.js');
5
+ var adminToken = require('./admin-token.js');
5
6
  var authenticatedUser = require('./authenticated-user.js');
6
7
  var authentication = require('./authentication.js');
7
8
  var permission = require('./permission.js');
@@ -16,6 +17,7 @@ var ai = require('../ai/controllers/ai.js');
16
17
  var controllers = {
17
18
  admin,
18
19
  'api-token': apiToken,
20
+ 'admin-token': adminToken,
19
21
  'authenticated-user': authenticatedUser,
20
22
  authentication,
21
23
  permission,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../server/src/controllers/index.ts"],"sourcesContent":["import type {} from 'koa-body';\n\nimport admin from './admin';\nimport apiToken from './api-token';\nimport authenticatedUser from './authenticated-user';\nimport authentication from './authentication';\nimport permission from './permission';\nimport role from './role';\nimport transfer from './transfer';\nimport user from './user';\nimport webhooks from './webhooks';\nimport contentApi from './content-api';\nimport homepage from './homepage';\nimport ai from '../ai/controllers/ai';\n\nexport default {\n admin,\n 'api-token': apiToken,\n 'authenticated-user': authenticatedUser,\n authentication,\n permission,\n role,\n transfer,\n user,\n webhooks,\n 'content-api': contentApi,\n homepage,\n ai,\n};\n"],"names":["admin","apiToken","authenticatedUser","authentication","permission","role","transfer","user","webhooks","contentApi","homepage","ai"],"mappings":";;;;;;;;;;;;;;;AAeA,kBAAe;AACbA,IAAAA,KAAAA;IACA,WAAA,EAAaC,QAAAA;IACb,oBAAA,EAAsBC,iBAAAA;AACtBC,IAAAA,cAAAA;AACAC,IAAAA,UAAAA;AACAC,IAAAA,IAAAA;AACAC,cAAAA,KAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,QAAAA;IACA,aAAA,EAAeC,UAAAA;AACfC,IAAAA,QAAAA;AACAC,IAAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../server/src/controllers/index.ts"],"sourcesContent":["import type {} from 'koa-body';\n\nimport admin from './admin';\nimport apiToken from './api-token';\nimport adminToken from './admin-token';\nimport authenticatedUser from './authenticated-user';\nimport authentication from './authentication';\nimport permission from './permission';\nimport role from './role';\nimport transfer from './transfer';\nimport user from './user';\nimport webhooks from './webhooks';\nimport contentApi from './content-api';\nimport homepage from './homepage';\nimport ai from '../ai/controllers/ai';\n\nexport default {\n admin,\n 'api-token': apiToken,\n 'admin-token': adminToken,\n 'authenticated-user': authenticatedUser,\n authentication,\n permission,\n role,\n transfer,\n user,\n webhooks,\n 'content-api': contentApi,\n homepage,\n ai,\n};\n"],"names":["admin","apiToken","adminToken","authenticatedUser","authentication","permission","role","transfer","user","webhooks","contentApi","homepage","ai"],"mappings":";;;;;;;;;;;;;;;;AAgBA,kBAAe;AACbA,IAAAA,KAAAA;IACA,WAAA,EAAaC,QAAAA;IACb,aAAA,EAAeC,UAAAA;IACf,oBAAA,EAAsBC,iBAAAA;AACtBC,IAAAA,cAAAA;AACAC,IAAAA,UAAAA;AACAC,IAAAA,IAAAA;AACAC,cAAAA,KAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,QAAAA;IACA,aAAA,EAAeC,UAAAA;AACfC,IAAAA,QAAAA;AACAC,IAAAA;AACF,CAAA;;;;"}
@@ -1,5 +1,6 @@
1
1
  import admin from './admin.mjs';
2
2
  import apiToken from './api-token.mjs';
3
+ import adminToken from './admin-token.mjs';
3
4
  import authenticatedUser from './authenticated-user.mjs';
4
5
  import authentication from './authentication.mjs';
5
6
  import permission from './permission.mjs';
@@ -14,6 +15,7 @@ import ai from '../ai/controllers/ai.mjs';
14
15
  var controllers = {
15
16
  admin,
16
17
  'api-token': apiToken,
18
+ 'admin-token': adminToken,
17
19
  'authenticated-user': authenticatedUser,
18
20
  authentication,
19
21
  permission,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../server/src/controllers/index.ts"],"sourcesContent":["import type {} from 'koa-body';\n\nimport admin from './admin';\nimport apiToken from './api-token';\nimport authenticatedUser from './authenticated-user';\nimport authentication from './authentication';\nimport permission from './permission';\nimport role from './role';\nimport transfer from './transfer';\nimport user from './user';\nimport webhooks from './webhooks';\nimport contentApi from './content-api';\nimport homepage from './homepage';\nimport ai from '../ai/controllers/ai';\n\nexport default {\n admin,\n 'api-token': apiToken,\n 'authenticated-user': authenticatedUser,\n authentication,\n permission,\n role,\n transfer,\n user,\n webhooks,\n 'content-api': contentApi,\n homepage,\n ai,\n};\n"],"names":["admin","apiToken","authenticatedUser","authentication","permission","role","transfer","user","webhooks","contentApi","homepage","ai"],"mappings":";;;;;;;;;;;;;AAeA,kBAAe;AACbA,IAAAA,KAAAA;IACA,WAAA,EAAaC,QAAAA;IACb,oBAAA,EAAsBC,iBAAAA;AACtBC,IAAAA,cAAAA;AACAC,IAAAA,UAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,QAAAA;IACA,aAAA,EAAeC,UAAAA;AACfC,IAAAA,QAAAA;AACAC,IAAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../server/src/controllers/index.ts"],"sourcesContent":["import type {} from 'koa-body';\n\nimport admin from './admin';\nimport apiToken from './api-token';\nimport adminToken from './admin-token';\nimport authenticatedUser from './authenticated-user';\nimport authentication from './authentication';\nimport permission from './permission';\nimport role from './role';\nimport transfer from './transfer';\nimport user from './user';\nimport webhooks from './webhooks';\nimport contentApi from './content-api';\nimport homepage from './homepage';\nimport ai from '../ai/controllers/ai';\n\nexport default {\n admin,\n 'api-token': apiToken,\n 'admin-token': adminToken,\n 'authenticated-user': authenticatedUser,\n authentication,\n permission,\n role,\n transfer,\n user,\n webhooks,\n 'content-api': contentApi,\n homepage,\n ai,\n};\n"],"names":["admin","apiToken","adminToken","authenticatedUser","authentication","permission","role","transfer","user","webhooks","contentApi","homepage","ai"],"mappings":";;;;;;;;;;;;;;AAgBA,kBAAe;AACbA,IAAAA,KAAAA;IACA,WAAA,EAAaC,QAAAA;IACb,aAAA,EAAeC,UAAAA;IACf,oBAAA,EAAsBC,iBAAAA;AACtBC,IAAAA,cAAAA;AACAC,IAAAA,UAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,QAAAA;IACA,aAAA,EAAeC,UAAAA;AACfC,IAAAA,QAAAA;AACAC,IAAAA;AACF,CAAA;;;;"}
@@ -11,7 +11,8 @@ const permissionFields = [
11
11
  'subject',
12
12
  'properties',
13
13
  'conditions',
14
- 'role'
14
+ 'role',
15
+ 'apiToken'
15
16
  ];
16
17
  const sanitizedPermissionFields = [
17
18
  'id',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../server/src/domain/permission/index.ts"],"sourcesContent":["import type { Utils } from '@strapi/types';\n\nimport { providerFactory } from '@strapi/utils';\nimport {\n pipe,\n set,\n pick,\n eq,\n omit,\n remove,\n get,\n uniq,\n isArray,\n map,\n curry,\n merge,\n} from 'lodash/fp';\nimport { Permission } from '../../../../shared/contracts/shared';\nimport { SanitizedPermission } from '../../../../shared/contracts/roles';\n\nexport type CreatePermissionPayload = Utils.Object.PartialBy<\n Permission,\n 'actionParameters' | 'conditions' | 'properties' | 'subject' | 'id' | 'createdAt' | 'updatedAt'\n>;\n\ntype Provider = ReturnType<typeof providerFactory>;\n\nexport const permissionFields = [\n 'id',\n 'action',\n 'actionParameters',\n 'subject',\n 'properties',\n 'conditions',\n 'role',\n];\nexport const sanitizedPermissionFields = [\n 'id',\n 'action',\n 'actionParameters',\n 'subject',\n 'properties',\n 'conditions',\n] as const;\n\nexport const sanitizePermissionFields: (p: Permission) => SanitizedPermission =\n pick(sanitizedPermissionFields);\n\n/**\n * Creates a permission with default values\n */\nconst getDefaultPermission = () => ({\n actionParameters: {},\n conditions: [],\n properties: {},\n subject: null,\n});\n\n/**\n * Returns a new permission with the given condition\n * @param condition - The condition to add\n * @param permission - The permission on which we want to add the condition\n * @return\n */\nexport const addCondition = curry((condition: string, permission: Permission): Permission => {\n const { conditions } = permission;\n const newConditions = Array.isArray(conditions)\n ? uniq(conditions.concat(condition))\n : [condition];\n\n return set('conditions', newConditions, permission);\n});\n\n/**\n * Returns a new permission without the given condition\n * @param condition - The condition to remove\n * @param permission - The permission on which we want to remove the condition\n */\nexport const removeCondition = curry((condition: string, permission: Permission): Permission => {\n return set('conditions', remove(eq(condition), permission.conditions), permission);\n});\n\n/**\n * Gets a property or a part of a property from a permission.\n * @param property - The property to get\n * @param permission - The permission on which we want to access the property\n */\nexport const getProperty = curry(\n (property: string, permission: Permission): Permission =>\n get(`properties.${property}`, permission)\n);\n\n/**\n * Set a value for a given property on a new permission object\n * @param property - The name of the property\n * @param value - The value of the property\n * @param permission - The permission on which we want to set the property\n */\nexport const setProperty = (\n property: string,\n value: unknown,\n permission: Permission\n): Permission => {\n return set(`properties.${property}`, value, permission);\n};\n\n/**\n * Returns a new permission without the given property name set\n * @param property - The name of the property to delete\n * @param permission - The permission on which we want to remove the property\n */\nexport const deleteProperty = <TProperty extends string>(\n property: TProperty,\n permission: Permission\n) => omit(`properties.${property}`, permission) as Omit<Permission, TProperty>;\n\n/**\n * Creates a new {@link Permission} object from raw attributes. Set default values for certain fields\n * @param attributes\n */\nexport const create = (attributes: CreatePermissionPayload) => {\n return pipe(pick(permissionFields), merge(getDefaultPermission()))(attributes) as Permission;\n};\n\n/**\n * Using the given condition provider, check and remove invalid condition from the permission's condition array.\n * @param provider - The condition provider used to do the checks\n * @param permission - The condition to sanitize\n */\nexport const sanitizeConditions = curry(\n (provider: Provider, permission: Permission): Permission => {\n if (!isArray(permission.conditions)) {\n return permission;\n }\n\n return permission.conditions\n .filter((condition: string) => !provider.has(condition))\n .reduce(\n (perm: Permission, condition: string) => removeCondition(condition, perm),\n permission\n );\n }\n);\n\n/**\n * Transform raw attributes into valid permissions using the create domain function.\n * @param payload - Can either be a single object of attributes or an array of those objects.\n */\n\nfunction toPermission<T extends CreatePermissionPayload>(payload: T[]): Permission[];\nfunction toPermission<T extends CreatePermissionPayload>(payload: T): Permission;\nfunction toPermission<T extends CreatePermissionPayload>(\n payload: T[] | T\n): Permission[] | Permission {\n if (isArray(payload)) {\n return map((value) => create(value), payload);\n }\n\n return create(payload);\n}\n\nexport { toPermission };\n\nexport default {\n addCondition,\n removeCondition,\n create,\n deleteProperty,\n permissionFields,\n getProperty,\n sanitizedPermissionFields,\n sanitizeConditions,\n sanitizePermissionFields,\n setProperty,\n toPermission,\n};\n"],"names":["permissionFields","sanitizedPermissionFields","sanitizePermissionFields","pick","getDefaultPermission","actionParameters","conditions","properties","subject","addCondition","curry","condition","permission","newConditions","Array","isArray","uniq","concat","set","removeCondition","remove","eq","getProperty","property","get","setProperty","value","deleteProperty","omit","create","attributes","pipe","merge","sanitizeConditions","provider","filter","has","reduce","perm","toPermission","payload","map"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../server/src/domain/permission/index.ts"],"sourcesContent":["import type { Utils } from '@strapi/types';\n\nimport { providerFactory } from '@strapi/utils';\nimport {\n pipe,\n set,\n pick,\n eq,\n omit,\n remove,\n get,\n uniq,\n isArray,\n map,\n curry,\n merge,\n} from 'lodash/fp';\nimport { Permission } from '../../../../shared/contracts/shared';\nimport { SanitizedPermission } from '../../../../shared/contracts/roles';\n\nexport type CreatePermissionPayload = Utils.Object.PartialBy<\n Permission,\n 'actionParameters' | 'conditions' | 'properties' | 'subject' | 'id' | 'createdAt' | 'updatedAt'\n>;\n\ntype Provider = ReturnType<typeof providerFactory>;\n\nexport const permissionFields = [\n 'id',\n 'action',\n 'actionParameters',\n 'subject',\n 'properties',\n 'conditions',\n 'role',\n 'apiToken',\n];\nexport const sanitizedPermissionFields = [\n 'id',\n 'action',\n 'actionParameters',\n 'subject',\n 'properties',\n 'conditions',\n] as const;\n\nexport const sanitizePermissionFields: (p: Permission) => SanitizedPermission =\n pick(sanitizedPermissionFields);\n\n/**\n * Creates a permission with default values\n */\nconst getDefaultPermission = () => ({\n actionParameters: {},\n conditions: [],\n properties: {},\n subject: null,\n});\n\n/**\n * Returns a new permission with the given condition\n * @param condition - The condition to add\n * @param permission - The permission on which we want to add the condition\n * @return\n */\nexport const addCondition = curry((condition: string, permission: Permission): Permission => {\n const { conditions } = permission;\n const newConditions = Array.isArray(conditions)\n ? uniq(conditions.concat(condition))\n : [condition];\n\n return set('conditions', newConditions, permission);\n});\n\n/**\n * Returns a new permission without the given condition\n * @param condition - The condition to remove\n * @param permission - The permission on which we want to remove the condition\n */\nexport const removeCondition = curry((condition: string, permission: Permission): Permission => {\n return set('conditions', remove(eq(condition), permission.conditions), permission);\n});\n\n/**\n * Gets a property or a part of a property from a permission.\n * @param property - The property to get\n * @param permission - The permission on which we want to access the property\n */\nexport const getProperty = curry(\n (property: string, permission: Permission): Permission =>\n get(`properties.${property}`, permission)\n);\n\n/**\n * Set a value for a given property on a new permission object\n * @param property - The name of the property\n * @param value - The value of the property\n * @param permission - The permission on which we want to set the property\n */\nexport const setProperty = (\n property: string,\n value: unknown,\n permission: Permission\n): Permission => {\n return set(`properties.${property}`, value, permission);\n};\n\n/**\n * Returns a new permission without the given property name set\n * @param property - The name of the property to delete\n * @param permission - The permission on which we want to remove the property\n */\nexport const deleteProperty = <TProperty extends string>(\n property: TProperty,\n permission: Permission\n) => omit(`properties.${property}`, permission) as Omit<Permission, TProperty>;\n\n/**\n * Creates a new {@link Permission} object from raw attributes. Set default values for certain fields\n * @param attributes\n */\nexport const create = (attributes: CreatePermissionPayload) => {\n return pipe(pick(permissionFields), merge(getDefaultPermission()))(attributes) as Permission;\n};\n\n/**\n * Using the given condition provider, check and remove invalid condition from the permission's condition array.\n * @param provider - The condition provider used to do the checks\n * @param permission - The condition to sanitize\n */\nexport const sanitizeConditions = curry(\n (provider: Provider, permission: Permission): Permission => {\n if (!isArray(permission.conditions)) {\n return permission;\n }\n\n return permission.conditions\n .filter((condition: string) => !provider.has(condition))\n .reduce(\n (perm: Permission, condition: string) => removeCondition(condition, perm),\n permission\n );\n }\n);\n\n/**\n * Transform raw attributes into valid permissions using the create domain function.\n * @param payload - Can either be a single object of attributes or an array of those objects.\n */\n\nfunction toPermission<T extends CreatePermissionPayload>(payload: T[]): Permission[];\nfunction toPermission<T extends CreatePermissionPayload>(payload: T): Permission;\nfunction toPermission<T extends CreatePermissionPayload>(\n payload: T[] | T\n): Permission[] | Permission {\n if (isArray(payload)) {\n return map((value) => create(value), payload);\n }\n\n return create(payload);\n}\n\nexport { toPermission };\n\nexport default {\n addCondition,\n removeCondition,\n create,\n deleteProperty,\n permissionFields,\n getProperty,\n sanitizedPermissionFields,\n sanitizeConditions,\n sanitizePermissionFields,\n setProperty,\n toPermission,\n};\n"],"names":["permissionFields","sanitizedPermissionFields","sanitizePermissionFields","pick","getDefaultPermission","actionParameters","conditions","properties","subject","addCondition","curry","condition","permission","newConditions","Array","isArray","uniq","concat","set","removeCondition","remove","eq","getProperty","property","get","setProperty","value","deleteProperty","omit","create","attributes","pipe","merge","sanitizeConditions","provider","filter","has","reduce","perm","toPermission","payload","map"],"mappings":"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"}
@@ -7,7 +7,8 @@ const permissionFields = [
7
7
  'subject',
8
8
  'properties',
9
9
  'conditions',
10
- 'role'
10
+ 'role',
11
+ 'apiToken'
11
12
  ];
12
13
  const sanitizedPermissionFields = [
13
14
  'id',
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../../server/src/domain/permission/index.ts"],"sourcesContent":["import type { Utils } from '@strapi/types';\n\nimport { providerFactory } from '@strapi/utils';\nimport {\n pipe,\n set,\n pick,\n eq,\n omit,\n remove,\n get,\n uniq,\n isArray,\n map,\n curry,\n merge,\n} from 'lodash/fp';\nimport { Permission } from '../../../../shared/contracts/shared';\nimport { SanitizedPermission } from '../../../../shared/contracts/roles';\n\nexport type CreatePermissionPayload = Utils.Object.PartialBy<\n Permission,\n 'actionParameters' | 'conditions' | 'properties' | 'subject' | 'id' | 'createdAt' | 'updatedAt'\n>;\n\ntype Provider = ReturnType<typeof providerFactory>;\n\nexport const permissionFields = [\n 'id',\n 'action',\n 'actionParameters',\n 'subject',\n 'properties',\n 'conditions',\n 'role',\n];\nexport const sanitizedPermissionFields = [\n 'id',\n 'action',\n 'actionParameters',\n 'subject',\n 'properties',\n 'conditions',\n] as const;\n\nexport const sanitizePermissionFields: (p: Permission) => SanitizedPermission =\n pick(sanitizedPermissionFields);\n\n/**\n * Creates a permission with default values\n */\nconst getDefaultPermission = () => ({\n actionParameters: {},\n conditions: [],\n properties: {},\n subject: null,\n});\n\n/**\n * Returns a new permission with the given condition\n * @param condition - The condition to add\n * @param permission - The permission on which we want to add the condition\n * @return\n */\nexport const addCondition = curry((condition: string, permission: Permission): Permission => {\n const { conditions } = permission;\n const newConditions = Array.isArray(conditions)\n ? uniq(conditions.concat(condition))\n : [condition];\n\n return set('conditions', newConditions, permission);\n});\n\n/**\n * Returns a new permission without the given condition\n * @param condition - The condition to remove\n * @param permission - The permission on which we want to remove the condition\n */\nexport const removeCondition = curry((condition: string, permission: Permission): Permission => {\n return set('conditions', remove(eq(condition), permission.conditions), permission);\n});\n\n/**\n * Gets a property or a part of a property from a permission.\n * @param property - The property to get\n * @param permission - The permission on which we want to access the property\n */\nexport const getProperty = curry(\n (property: string, permission: Permission): Permission =>\n get(`properties.${property}`, permission)\n);\n\n/**\n * Set a value for a given property on a new permission object\n * @param property - The name of the property\n * @param value - The value of the property\n * @param permission - The permission on which we want to set the property\n */\nexport const setProperty = (\n property: string,\n value: unknown,\n permission: Permission\n): Permission => {\n return set(`properties.${property}`, value, permission);\n};\n\n/**\n * Returns a new permission without the given property name set\n * @param property - The name of the property to delete\n * @param permission - The permission on which we want to remove the property\n */\nexport const deleteProperty = <TProperty extends string>(\n property: TProperty,\n permission: Permission\n) => omit(`properties.${property}`, permission) as Omit<Permission, TProperty>;\n\n/**\n * Creates a new {@link Permission} object from raw attributes. Set default values for certain fields\n * @param attributes\n */\nexport const create = (attributes: CreatePermissionPayload) => {\n return pipe(pick(permissionFields), merge(getDefaultPermission()))(attributes) as Permission;\n};\n\n/**\n * Using the given condition provider, check and remove invalid condition from the permission's condition array.\n * @param provider - The condition provider used to do the checks\n * @param permission - The condition to sanitize\n */\nexport const sanitizeConditions = curry(\n (provider: Provider, permission: Permission): Permission => {\n if (!isArray(permission.conditions)) {\n return permission;\n }\n\n return permission.conditions\n .filter((condition: string) => !provider.has(condition))\n .reduce(\n (perm: Permission, condition: string) => removeCondition(condition, perm),\n permission\n );\n }\n);\n\n/**\n * Transform raw attributes into valid permissions using the create domain function.\n * @param payload - Can either be a single object of attributes or an array of those objects.\n */\n\nfunction toPermission<T extends CreatePermissionPayload>(payload: T[]): Permission[];\nfunction toPermission<T extends CreatePermissionPayload>(payload: T): Permission;\nfunction toPermission<T extends CreatePermissionPayload>(\n payload: T[] | T\n): Permission[] | Permission {\n if (isArray(payload)) {\n return map((value) => create(value), payload);\n }\n\n return create(payload);\n}\n\nexport { toPermission };\n\nexport default {\n addCondition,\n removeCondition,\n create,\n deleteProperty,\n permissionFields,\n getProperty,\n sanitizedPermissionFields,\n sanitizeConditions,\n sanitizePermissionFields,\n setProperty,\n toPermission,\n};\n"],"names":["permissionFields","sanitizedPermissionFields","sanitizePermissionFields","pick","getDefaultPermission","actionParameters","conditions","properties","subject","addCondition","curry","condition","permission","newConditions","Array","isArray","uniq","concat","set","removeCondition","remove","eq","getProperty","property","get","setProperty","value","deleteProperty","omit","create","attributes","pipe","merge","sanitizeConditions","provider","filter","has","reduce","perm","toPermission","payload","map"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../../server/src/domain/permission/index.ts"],"sourcesContent":["import type { Utils } from '@strapi/types';\n\nimport { providerFactory } from '@strapi/utils';\nimport {\n pipe,\n set,\n pick,\n eq,\n omit,\n remove,\n get,\n uniq,\n isArray,\n map,\n curry,\n merge,\n} from 'lodash/fp';\nimport { Permission } from '../../../../shared/contracts/shared';\nimport { SanitizedPermission } from '../../../../shared/contracts/roles';\n\nexport type CreatePermissionPayload = Utils.Object.PartialBy<\n Permission,\n 'actionParameters' | 'conditions' | 'properties' | 'subject' | 'id' | 'createdAt' | 'updatedAt'\n>;\n\ntype Provider = ReturnType<typeof providerFactory>;\n\nexport const permissionFields = [\n 'id',\n 'action',\n 'actionParameters',\n 'subject',\n 'properties',\n 'conditions',\n 'role',\n 'apiToken',\n];\nexport const sanitizedPermissionFields = [\n 'id',\n 'action',\n 'actionParameters',\n 'subject',\n 'properties',\n 'conditions',\n] as const;\n\nexport const sanitizePermissionFields: (p: Permission) => SanitizedPermission =\n pick(sanitizedPermissionFields);\n\n/**\n * Creates a permission with default values\n */\nconst getDefaultPermission = () => ({\n actionParameters: {},\n conditions: [],\n properties: {},\n subject: null,\n});\n\n/**\n * Returns a new permission with the given condition\n * @param condition - The condition to add\n * @param permission - The permission on which we want to add the condition\n * @return\n */\nexport const addCondition = curry((condition: string, permission: Permission): Permission => {\n const { conditions } = permission;\n const newConditions = Array.isArray(conditions)\n ? uniq(conditions.concat(condition))\n : [condition];\n\n return set('conditions', newConditions, permission);\n});\n\n/**\n * Returns a new permission without the given condition\n * @param condition - The condition to remove\n * @param permission - The permission on which we want to remove the condition\n */\nexport const removeCondition = curry((condition: string, permission: Permission): Permission => {\n return set('conditions', remove(eq(condition), permission.conditions), permission);\n});\n\n/**\n * Gets a property or a part of a property from a permission.\n * @param property - The property to get\n * @param permission - The permission on which we want to access the property\n */\nexport const getProperty = curry(\n (property: string, permission: Permission): Permission =>\n get(`properties.${property}`, permission)\n);\n\n/**\n * Set a value for a given property on a new permission object\n * @param property - The name of the property\n * @param value - The value of the property\n * @param permission - The permission on which we want to set the property\n */\nexport const setProperty = (\n property: string,\n value: unknown,\n permission: Permission\n): Permission => {\n return set(`properties.${property}`, value, permission);\n};\n\n/**\n * Returns a new permission without the given property name set\n * @param property - The name of the property to delete\n * @param permission - The permission on which we want to remove the property\n */\nexport const deleteProperty = <TProperty extends string>(\n property: TProperty,\n permission: Permission\n) => omit(`properties.${property}`, permission) as Omit<Permission, TProperty>;\n\n/**\n * Creates a new {@link Permission} object from raw attributes. Set default values for certain fields\n * @param attributes\n */\nexport const create = (attributes: CreatePermissionPayload) => {\n return pipe(pick(permissionFields), merge(getDefaultPermission()))(attributes) as Permission;\n};\n\n/**\n * Using the given condition provider, check and remove invalid condition from the permission's condition array.\n * @param provider - The condition provider used to do the checks\n * @param permission - The condition to sanitize\n */\nexport const sanitizeConditions = curry(\n (provider: Provider, permission: Permission): Permission => {\n if (!isArray(permission.conditions)) {\n return permission;\n }\n\n return permission.conditions\n .filter((condition: string) => !provider.has(condition))\n .reduce(\n (perm: Permission, condition: string) => removeCondition(condition, perm),\n permission\n );\n }\n);\n\n/**\n * Transform raw attributes into valid permissions using the create domain function.\n * @param payload - Can either be a single object of attributes or an array of those objects.\n */\n\nfunction toPermission<T extends CreatePermissionPayload>(payload: T[]): Permission[];\nfunction toPermission<T extends CreatePermissionPayload>(payload: T): Permission;\nfunction toPermission<T extends CreatePermissionPayload>(\n payload: T[] | T\n): Permission[] | Permission {\n if (isArray(payload)) {\n return map((value) => create(value), payload);\n }\n\n return create(payload);\n}\n\nexport { toPermission };\n\nexport default {\n addCondition,\n removeCondition,\n create,\n deleteProperty,\n permissionFields,\n getProperty,\n sanitizedPermissionFields,\n sanitizeConditions,\n sanitizePermissionFields,\n setProperty,\n toPermission,\n};\n"],"names":["permissionFields","sanitizedPermissionFields","sanitizePermissionFields","pick","getDefaultPermission","actionParameters","conditions","properties","subject","addCondition","curry","condition","permission","newConditions","Array","isArray","uniq","concat","set","removeCondition","remove","eq","getProperty","property","get","setProperty","value","deleteProperty","omit","create","attributes","pipe","merge","sanitizeConditions","provider","filter","has","reduce","perm","toPermission","payload","map"],"mappings":"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"}
@@ -2,11 +2,13 @@
2
2
 
3
3
  var isAuthenticatedAdmin = require('./isAuthenticatedAdmin.js');
4
4
  var hasPermissions = require('./hasPermissions.js');
5
+ var isAdminTokensEnabled = require('./isAdminTokensEnabled.js');
5
6
  var isTelemetryEnabled = require('./isTelemetryEnabled.js');
6
7
 
7
8
  var policies = {
8
9
  isAuthenticatedAdmin,
9
10
  hasPermissions,
11
+ isAdminTokensEnabled,
10
12
  isTelemetryEnabled
11
13
  };
12
14
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../server/src/policies/index.ts"],"sourcesContent":["import isAuthenticatedAdmin from './isAuthenticatedAdmin';\nimport hasPermissions from './hasPermissions';\nimport isTelemetryEnabled from './isTelemetryEnabled';\n\nexport default { isAuthenticatedAdmin, hasPermissions, isTelemetryEnabled };\n"],"names":["isAuthenticatedAdmin","hasPermissions","isTelemetryEnabled"],"mappings":";;;;;;AAIA,eAAe;AAAEA,IAAAA,oBAAAA;AAAsBC,IAAAA,cAAAA;AAAgBC,IAAAA;AAAmB,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../server/src/policies/index.ts"],"sourcesContent":["import isAuthenticatedAdmin from './isAuthenticatedAdmin';\nimport hasPermissions from './hasPermissions';\nimport isAdminTokensEnabled from './isAdminTokensEnabled';\nimport isTelemetryEnabled from './isTelemetryEnabled';\n\nexport default { isAuthenticatedAdmin, hasPermissions, isAdminTokensEnabled, isTelemetryEnabled };\n"],"names":["isAuthenticatedAdmin","hasPermissions","isAdminTokensEnabled","isTelemetryEnabled"],"mappings":";;;;;;;AAKA,eAAe;AAAEA,IAAAA,oBAAAA;AAAsBC,IAAAA,cAAAA;AAAgBC,IAAAA,oBAAAA;AAAsBC,IAAAA;AAAmB,CAAA;;;;"}