@strapi/admin 5.48.1 → 5.49.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 (317) hide show
  1. package/dist/admin/admin/src/StrapiApp.js +33 -20
  2. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  3. package/dist/admin/admin/src/StrapiApp.mjs +6 -1
  4. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/ConfirmDialog.js +3 -2
  6. package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
  7. package/dist/admin/admin/src/components/Context.js +4 -3
  8. package/dist/admin/admin/src/components/Context.js.map +1 -1
  9. package/dist/admin/admin/src/components/DescriptionComponentRenderer.js +8 -4
  10. package/dist/admin/admin/src/components/DescriptionComponentRenderer.js.map +1 -1
  11. package/dist/admin/admin/src/components/Filters.js +3 -2
  12. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  13. package/dist/admin/admin/src/components/Form.js +9 -5
  14. package/dist/admin/admin/src/components/Form.js.map +1 -1
  15. package/dist/admin/admin/src/components/FormInputs/Date.js +3 -2
  16. package/dist/admin/admin/src/components/FormInputs/Date.js.map +1 -1
  17. package/dist/admin/admin/src/components/FormInputs/Json.js +3 -2
  18. package/dist/admin/admin/src/components/FormInputs/Json.js.map +1 -1
  19. package/dist/admin/admin/src/components/GapDropZone.js +3 -2
  20. package/dist/admin/admin/src/components/GapDropZone.js.map +1 -1
  21. package/dist/admin/admin/src/components/GuidedTour/Context.js +3 -2
  22. package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
  23. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js +3 -2
  24. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
  25. package/dist/admin/admin/src/components/GuidedTour/Tours.js +9 -3
  26. package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
  27. package/dist/admin/admin/src/components/GuidedTour/Tours.mjs +6 -1
  28. package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -1
  29. package/dist/admin/admin/src/components/LanguageProvider.js +5 -1
  30. package/dist/admin/admin/src/components/LanguageProvider.js.map +1 -1
  31. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +3 -2
  32. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
  33. package/dist/admin/admin/src/components/LeftMenu.js +3 -2
  34. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  35. package/dist/admin/admin/src/components/NpsSurvey.js +4 -3
  36. package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
  37. package/dist/admin/admin/src/components/PageHelpers.js +3 -2
  38. package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
  39. package/dist/admin/admin/src/components/Pagination.js +3 -2
  40. package/dist/admin/admin/src/components/Pagination.js.map +1 -1
  41. package/dist/admin/admin/src/components/PluginsInitializer.js +3 -2
  42. package/dist/admin/admin/src/components/PluginsInitializer.js.map +1 -1
  43. package/dist/admin/admin/src/components/RelativeTime.js +3 -2
  44. package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
  45. package/dist/admin/admin/src/components/ResizeIndicator.js +3 -2
  46. package/dist/admin/admin/src/components/ResizeIndicator.js.map +1 -1
  47. package/dist/admin/admin/src/components/SearchInput.js +3 -2
  48. package/dist/admin/admin/src/components/SearchInput.js.map +1 -1
  49. package/dist/admin/admin/src/components/Table.js +3 -2
  50. package/dist/admin/admin/src/components/Table.js.map +1 -1
  51. package/dist/admin/admin/src/components/Theme.js +3 -2
  52. package/dist/admin/admin/src/components/Theme.js.map +1 -1
  53. package/dist/admin/admin/src/components/WidgetRoot.js +9 -5
  54. package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
  55. package/dist/admin/admin/src/core/apis/CustomFields.js +14 -10
  56. package/dist/admin/admin/src/core/apis/CustomFields.js.map +1 -1
  57. package/dist/admin/admin/src/core/apis/Widgets.js +8 -4
  58. package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
  59. package/dist/admin/admin/src/core/apis/router.js +20 -16
  60. package/dist/admin/admin/src/core/apis/router.js.map +1 -1
  61. package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
  62. package/dist/admin/admin/src/features/Auth.js +78 -6
  63. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  64. package/dist/admin/admin/src/features/Auth.mjs +77 -6
  65. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  66. package/dist/admin/admin/src/features/BackButton.js +3 -2
  67. package/dist/admin/admin/src/features/BackButton.js.map +1 -1
  68. package/dist/admin/admin/src/features/Configuration.js +3 -2
  69. package/dist/admin/admin/src/features/Configuration.js.map +1 -1
  70. package/dist/admin/admin/src/features/Notifications.js +3 -2
  71. package/dist/admin/admin/src/features/Notifications.js.map +1 -1
  72. package/dist/admin/admin/src/features/Tracking.js +7 -3
  73. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  74. package/dist/admin/admin/src/features/Widgets.js +3 -2
  75. package/dist/admin/admin/src/features/Widgets.js.map +1 -1
  76. package/dist/admin/admin/src/hooks/useAPIErrorHandler.js +3 -2
  77. package/dist/admin/admin/src/hooks/useAPIErrorHandler.js.map +1 -1
  78. package/dist/admin/admin/src/hooks/useAdminRoles.js +3 -2
  79. package/dist/admin/admin/src/hooks/useAdminRoles.js.map +1 -1
  80. package/dist/admin/admin/src/hooks/useControllableState.js +3 -2
  81. package/dist/admin/admin/src/hooks/useControllableState.js.map +1 -1
  82. package/dist/admin/admin/src/hooks/useDebounce.js +3 -2
  83. package/dist/admin/admin/src/hooks/useDebounce.js.map +1 -1
  84. package/dist/admin/admin/src/hooks/useDeviceType.js +3 -2
  85. package/dist/admin/admin/src/hooks/useDeviceType.js.map +1 -1
  86. package/dist/admin/admin/src/hooks/useElementOnScreen.js +3 -2
  87. package/dist/admin/admin/src/hooks/useElementOnScreen.js.map +1 -1
  88. package/dist/admin/admin/src/hooks/useEnterprise.js +3 -2
  89. package/dist/admin/admin/src/hooks/useEnterprise.js.map +1 -1
  90. package/dist/admin/admin/src/hooks/useFetchClient.js +3 -2
  91. package/dist/admin/admin/src/hooks/useFetchClient.js.map +1 -1
  92. package/dist/admin/admin/src/hooks/useForceUpdate.js +3 -2
  93. package/dist/admin/admin/src/hooks/useForceUpdate.js.map +1 -1
  94. package/dist/admin/admin/src/hooks/useIdleSessionLogout.js +85 -15
  95. package/dist/admin/admin/src/hooks/useIdleSessionLogout.js.map +1 -1
  96. package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs +82 -14
  97. package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs.map +1 -1
  98. package/dist/admin/admin/src/hooks/useIsMounted.js +3 -2
  99. package/dist/admin/admin/src/hooks/useIsMounted.js.map +1 -1
  100. package/dist/admin/admin/src/hooks/useMediaQuery.js +3 -2
  101. package/dist/admin/admin/src/hooks/useMediaQuery.js.map +1 -1
  102. package/dist/admin/admin/src/hooks/useMenu.js +7 -3
  103. package/dist/admin/admin/src/hooks/useMenu.js.map +1 -1
  104. package/dist/admin/admin/src/hooks/useOnce.js +3 -2
  105. package/dist/admin/admin/src/hooks/useOnce.js.map +1 -1
  106. package/dist/admin/admin/src/hooks/useRBAC.js +7 -3
  107. package/dist/admin/admin/src/hooks/useRBAC.js.map +1 -1
  108. package/dist/admin/admin/src/hooks/useSettingsMenu.js +7 -3
  109. package/dist/admin/admin/src/hooks/useSettingsMenu.js.map +1 -1
  110. package/dist/admin/admin/src/hooks/useThrottledCallback.js +5 -1
  111. package/dist/admin/admin/src/hooks/useThrottledCallback.js.map +1 -1
  112. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +11 -5
  113. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  114. package/dist/admin/admin/src/pages/Auth/components/ForgotPassword.js +3 -2
  115. package/dist/admin/admin/src/pages/Auth/components/ForgotPassword.js.map +1 -1
  116. package/dist/admin/admin/src/pages/Auth/components/Login.js +8 -4
  117. package/dist/admin/admin/src/pages/Auth/components/Login.js.map +1 -1
  118. package/dist/admin/admin/src/pages/Auth/components/Oops.js +3 -2
  119. package/dist/admin/admin/src/pages/Auth/components/Oops.js.map +1 -1
  120. package/dist/admin/admin/src/pages/Auth/components/Register.js +9 -5
  121. package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
  122. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js +4 -3
  123. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
  124. package/dist/admin/admin/src/pages/Home/HomePage.js +3 -2
  125. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  126. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js +8 -4
  127. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js.map +1 -1
  128. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js +7 -3
  129. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
  130. package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js +7 -3
  131. package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js.map +1 -1
  132. package/dist/admin/admin/src/pages/ProfilePage.js +8 -4
  133. package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
  134. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +3 -2
  135. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  136. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +3 -2
  137. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  138. package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js +3 -2
  139. package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js.map +1 -1
  140. package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.js +3 -2
  141. package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.js.map +1 -1
  142. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js +3 -2
  143. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js.map +1 -1
  144. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js +3 -2
  145. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js.map +1 -1
  146. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js +4 -3
  147. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js.map +1 -1
  148. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +3 -2
  149. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
  150. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +7 -2
  151. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
  152. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +5 -1
  153. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
  154. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.js +6 -2
  155. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.js.map +1 -1
  156. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +4 -3
  157. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  158. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +3 -2
  159. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  160. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js +7 -3
  161. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
  162. package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js +3 -2
  163. package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js.map +1 -1
  164. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +4 -3
  165. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
  166. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +4 -3
  167. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
  168. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js +3 -2
  169. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js.map +1 -1
  170. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +10 -6
  171. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
  172. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.js +3 -2
  173. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.js.map +1 -1
  174. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js +13 -7
  175. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
  176. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +15 -9
  177. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
  178. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js +9 -5
  179. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
  180. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +33 -25
  181. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
  182. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +10 -6
  183. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
  184. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js +3 -2
  185. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
  186. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/difference.js +9 -3
  187. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/difference.js.map +1 -1
  188. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js +8 -3
  189. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js.map +1 -1
  190. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/layouts.js +6 -2
  191. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/layouts.js.map +1 -1
  192. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateConditionsToFalse.js +8 -3
  193. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateConditionsToFalse.js.map +1 -1
  194. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +4 -3
  195. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
  196. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js +4 -3
  197. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js.map +1 -1
  198. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js +9 -5
  199. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
  200. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +4 -3
  201. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  202. package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js +3 -2
  203. package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js.map +1 -1
  204. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js +4 -3
  205. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
  206. package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js +3 -2
  207. package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js.map +1 -1
  208. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.js +3 -2
  209. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.js.map +1 -1
  210. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js +3 -2
  211. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js.map +1 -1
  212. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +3 -2
  213. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
  214. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js +4 -3
  215. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
  216. package/dist/admin/admin/src/pages/UseCasePage.js +3 -2
  217. package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
  218. package/dist/admin/admin/src/utils/getFetchClient.js +7 -2
  219. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  220. package/dist/admin/admin/src/utils/locales.js +3 -2
  221. package/dist/admin/admin/src/utils/locales.js.map +1 -1
  222. package/dist/admin/admin/src/utils/objects.js +9 -4
  223. package/dist/admin/admin/src/utils/objects.js.map +1 -1
  224. package/dist/admin/admin/src/utils/rulesEngine.js +5 -1
  225. package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
  226. package/dist/admin/admin/src/utils/urls.js +5 -1
  227. package/dist/admin/admin/src/utils/urls.js.map +1 -1
  228. package/dist/admin/admin/tests/utils.js +3 -2
  229. package/dist/admin/admin/tests/utils.js.map +1 -1
  230. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js +7 -3
  231. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js.map +1 -1
  232. package/dist/admin/ee/admin/src/hooks/useLicenseLimits.js +3 -2
  233. package/dist/admin/ee/admin/src/hooks/useLicenseLimits.js.map +1 -1
  234. package/dist/admin/ee/admin/src/pages/AuthResponse.js +3 -2
  235. package/dist/admin/ee/admin/src/pages/AuthResponse.js.map +1 -1
  236. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js +3 -2
  237. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js.map +1 -1
  238. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js +3 -2
  239. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js.map +1 -1
  240. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.js +5 -1
  241. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.js.map +1 -1
  242. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +3 -2
  243. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
  244. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js +7 -3
  245. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js.map +1 -1
  246. package/dist/admin/src/StrapiApp.d.ts +7 -1
  247. package/dist/admin/src/core/apis/router.d.ts +1 -2
  248. package/dist/admin/src/hooks/useIdleSessionLogout.d.ts +66 -12
  249. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +5 -1
  250. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
  251. package/dist/server/ee/server/src/controllers/authentication.js +5 -1
  252. package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
  253. package/dist/server/ee/server/src/controllers/user.js +6 -2
  254. package/dist/server/ee/server/src/controllers/user.js.map +1 -1
  255. package/dist/server/ee/server/src/services/auth.js +5 -1
  256. package/dist/server/ee/server/src/services/auth.js.map +1 -1
  257. package/dist/server/ee/server/src/services/user.js +8 -4
  258. package/dist/server/ee/server/src/services/user.js.map +1 -1
  259. package/dist/server/index.js +6 -2
  260. package/dist/server/index.js.map +1 -1
  261. package/dist/server/server/src/ai/services/ai.js +10 -4
  262. package/dist/server/server/src/ai/services/ai.js.map +1 -1
  263. package/dist/server/server/src/controllers/admin.js +9 -4
  264. package/dist/server/server/src/controllers/admin.js.map +1 -1
  265. package/dist/server/server/src/controllers/authentication.js +7 -2
  266. package/dist/server/server/src/controllers/authentication.js.map +1 -1
  267. package/dist/server/server/src/controllers/user.js +3 -2
  268. package/dist/server/server/src/controllers/user.js.map +1 -1
  269. package/dist/server/server/src/controllers/webhooks.js +7 -2
  270. package/dist/server/server/src/controllers/webhooks.js.map +1 -1
  271. package/dist/server/server/src/middlewares/rateLimit.js +7 -2
  272. package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
  273. package/dist/server/server/src/policies/hasPermissions.js +7 -3
  274. package/dist/server/server/src/policies/hasPermissions.js.map +1 -1
  275. package/dist/server/server/src/routes/serve-admin-panel.js +8 -3
  276. package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
  277. package/dist/server/server/src/services/api-token.js +7 -3
  278. package/dist/server/server/src/services/api-token.js.map +1 -1
  279. package/dist/server/server/src/services/auth.js +8 -3
  280. package/dist/server/server/src/services/auth.js.map +1 -1
  281. package/dist/server/server/src/services/content-type.js +6 -2
  282. package/dist/server/server/src/services/content-type.js.map +1 -1
  283. package/dist/server/server/src/services/encryption.js +8 -4
  284. package/dist/server/server/src/services/encryption.js.map +1 -1
  285. package/dist/server/server/src/services/passport.js +6 -2
  286. package/dist/server/server/src/services/passport.js.map +1 -1
  287. package/dist/server/server/src/services/permission/engine.js +5 -1
  288. package/dist/server/server/src/services/permission/engine.js.map +1 -1
  289. package/dist/server/server/src/services/permission/permissions-manager/index.js +5 -1
  290. package/dist/server/server/src/services/permission/permissions-manager/index.js.map +1 -1
  291. package/dist/server/server/src/services/permission/permissions-manager/query-builders.js +14 -10
  292. package/dist/server/server/src/services/permission/permissions-manager/query-builders.js.map +1 -1
  293. package/dist/server/server/src/services/permission/queries.js +5 -1
  294. package/dist/server/server/src/services/permission/queries.js.map +1 -1
  295. package/dist/server/server/src/services/project-settings.js +6 -2
  296. package/dist/server/server/src/services/project-settings.js.map +1 -1
  297. package/dist/server/server/src/services/role.js +8 -4
  298. package/dist/server/server/src/services/role.js.map +1 -1
  299. package/dist/server/server/src/services/token.js +7 -2
  300. package/dist/server/server/src/services/token.js.map +1 -1
  301. package/dist/server/server/src/services/transfer/permission.js +5 -1
  302. package/dist/server/server/src/services/transfer/permission.js.map +1 -1
  303. package/dist/server/server/src/services/transfer/token.js +10 -5
  304. package/dist/server/server/src/services/transfer/token.js.map +1 -1
  305. package/dist/server/server/src/services/user.js +10 -6
  306. package/dist/server/server/src/services/user.js.map +1 -1
  307. package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.js +5 -1
  308. package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.js.map +1 -1
  309. package/dist/server/server/src/validation/common-functions/check-fields-dont-have-duplicates.js +6 -2
  310. package/dist/server/server/src/validation/common-functions/check-fields-dont-have-duplicates.js.map +1 -1
  311. package/dist/server/server/src/validation/common-validators.js +6 -2
  312. package/dist/server/server/src/validation/common-validators.js.map +1 -1
  313. package/dist/server/server/src/validation/policies/hasPermissions.js +6 -2
  314. package/dist/server/server/src/validation/policies/hasPermissions.js.map +1 -1
  315. package/dist/server/shared/utils/session-auth.js +5 -1
  316. package/dist/server/shared/utils/session-auth.js.map +1 -1
  317. package/package.json +7 -7
@@ -2,6 +2,10 @@
2
2
 
3
3
  var crypto = require('crypto');
4
4
 
5
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
6
+
7
+ var crypto__default = /*#__PURE__*/_interopDefault(crypto);
8
+
5
9
  const IV_LENGTH = 16; // 16 bytes for AES-GCM IV
6
10
  const ENCRYPTION_VERSION = 'v1';
7
11
  const getHashedKey = ()=>{
@@ -11,7 +15,7 @@ const getHashedKey = ()=>{
11
15
  strapi.log.warn('Encryption key is missing from admin.secrets.encryptionKey configuration');
12
16
  return null;
13
17
  }
14
- return crypto.createHash('sha256').update(rawKey).digest(); // Always 32 bytes
18
+ return crypto__default.default.createHash('sha256').update(rawKey).digest(); // Always 32 bytes
15
19
  };
16
20
  /**
17
21
  * Encrypts a value string using AES-256-GCM.
@@ -19,8 +23,8 @@ const getHashedKey = ()=>{
19
23
  */ const encrypt = (value)=>{
20
24
  const key = getHashedKey();
21
25
  if (!key) return null;
22
- const iv = crypto.randomBytes(IV_LENGTH);
23
- const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
26
+ const iv = crypto__default.default.randomBytes(IV_LENGTH);
27
+ const cipher = crypto__default.default.createCipheriv('aes-256-gcm', key, iv);
24
28
  let encrypted = cipher.update(value, 'utf8', 'hex');
25
29
  encrypted += cipher.final('hex');
26
30
  const authTag = cipher.getAuthTag();
@@ -44,7 +48,7 @@ const getHashedKey = ()=>{
44
48
  const encryptedText = Buffer.from(encryptedHex, 'hex');
45
49
  const authTag = Buffer.from(tagHex, 'hex');
46
50
  try {
47
- const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv);
51
+ const decipher = crypto__default.default.createDecipheriv('aes-256-gcm', key, iv);
48
52
  decipher.setAuthTag(authTag);
49
53
  let decrypted = decipher.update(encryptedText, undefined, 'utf8');
50
54
  decrypted += decipher.final('utf8');
@@ -1 +1 @@
1
- {"version":3,"file":"encryption.js","sources":["../../../../../server/src/services/encryption.ts"],"sourcesContent":["import crypto from 'crypto';\nimport type { Core } from '@strapi/types';\n\nconst IV_LENGTH = 16; // 16 bytes for AES-GCM IV\nconst ENCRYPTION_VERSION = 'v1';\n\nconst getHashedKey = (): Buffer | null => {\n const secrets = strapi.config.get<Core.Config.Admin['secrets']>('admin.secrets');\n const rawKey: string | undefined = secrets?.encryptionKey;\n if (!rawKey) {\n strapi.log.warn('Encryption key is missing from admin.secrets.encryptionKey configuration');\n return null;\n }\n\n return crypto.createHash('sha256').update(rawKey).digest(); // Always 32 bytes\n};\n\n/**\n * Encrypts a value string using AES-256-GCM.\n * Returns a string prefixed with the encryption version and includes IV, encrypted content, and auth tag (all hex-encoded).\n */\nconst encrypt = (value: string) => {\n const key = getHashedKey();\n if (!key) return null;\n\n const iv = crypto.randomBytes(IV_LENGTH);\n const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);\n\n let encrypted = cipher.update(value, 'utf8', 'hex');\n encrypted += cipher.final('hex');\n\n const authTag = cipher.getAuthTag();\n\n return `${ENCRYPTION_VERSION}:${iv.toString('hex')}:${encrypted}:${authTag.toString('hex')}`;\n};\n\n/**\n * Decrypts a value encrypted by encrypt().\n * Supports versioned formats like v1:iv:encrypted:authTag\n */\nconst decrypt = (encryptedValue: string) => {\n const [version, ...rest] = encryptedValue.split(':');\n\n if (version !== ENCRYPTION_VERSION) {\n throw new Error(`Unsupported encryption version: ${version}`);\n }\n\n const [ivHex, encryptedHex, tagHex] = rest;\n if (!ivHex || !encryptedHex || !tagHex) {\n throw new Error('Invalid encrypted value format');\n }\n\n const key = getHashedKey();\n if (!key) return null;\n\n const iv = Buffer.from(ivHex, 'hex');\n const encryptedText = Buffer.from(encryptedHex, 'hex');\n const authTag = Buffer.from(tagHex, 'hex');\n\n try {\n const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv);\n decipher.setAuthTag(authTag);\n\n let decrypted = decipher.update(encryptedText, undefined, 'utf8');\n decrypted += decipher.final('utf8');\n\n return decrypted;\n } catch (err) {\n strapi.log.warn(\n '[decrypt] Unable to decrypt value — encryption key may have changed or data is corrupted.'\n );\n return null;\n }\n};\n\nexport default {\n encrypt,\n decrypt,\n};\n"],"names":["IV_LENGTH","ENCRYPTION_VERSION","getHashedKey","secrets","strapi","config","get","rawKey","encryptionKey","log","warn","crypto","createHash","update","digest","encrypt","value","key","iv","randomBytes","cipher","createCipheriv","encrypted","final","authTag","getAuthTag","toString","decrypt","encryptedValue","version","rest","split","Error","ivHex","encryptedHex","tagHex","Buffer","from","encryptedText","decipher","createDecipheriv","setAuthTag","decrypted","undefined","err"],"mappings":";;;;AAGA,MAAMA,SAAAA,GAAY;AAClB,MAAMC,kBAAAA,GAAqB,IAAA;AAE3B,MAAMC,YAAAA,GAAe,IAAA;AACnB,IAAA,MAAMC,OAAAA,GAAUC,MAAAA,CAAOC,MAAM,CAACC,GAAG,CAA+B,eAAA,CAAA;AAChE,IAAA,MAAMC,SAA6BJ,OAAAA,EAASK,aAAAA;AAC5C,IAAA,IAAI,CAACD,MAAAA,EAAQ;QACXH,MAAAA,CAAOK,GAAG,CAACC,IAAI,CAAC,0EAAA,CAAA;QAChB,OAAO,IAAA;AACT,IAAA;IAEA,OAAOC,MAAAA,CAAOC,UAAU,CAAC,QAAA,CAAA,CAAUC,MAAM,CAACN,MAAAA,CAAAA,CAAQO,MAAM,EAAA,CAAA;AAC1D,CAAA;AAEA;;;IAIA,MAAMC,UAAU,CAACC,KAAAA,GAAAA;AACf,IAAA,MAAMC,GAAAA,GAAMf,YAAAA,EAAAA;IACZ,IAAI,CAACe,KAAK,OAAO,IAAA;IAEjB,MAAMC,EAAAA,GAAKP,MAAAA,CAAOQ,WAAW,CAACnB,SAAAA,CAAAA;AAC9B,IAAA,MAAMoB,MAAAA,GAAST,MAAAA,CAAOU,cAAc,CAAC,eAAeJ,GAAAA,EAAKC,EAAAA,CAAAA;AAEzD,IAAA,IAAII,SAAAA,GAAYF,MAAAA,CAAOP,MAAM,CAACG,OAAO,MAAA,EAAQ,KAAA,CAAA;IAC7CM,SAAAA,IAAaF,MAAAA,CAAOG,KAAK,CAAC,KAAA,CAAA;IAE1B,MAAMC,OAAAA,GAAUJ,OAAOK,UAAU,EAAA;AAEjC,IAAA,OAAO,GAAGxB,kBAAAA,CAAmB,CAAC,EAAEiB,EAAAA,CAAGQ,QAAQ,CAAC,KAAA,CAAA,CAAO,CAAC,EAAEJ,UAAU,CAAC,EAAEE,OAAAA,CAAQE,QAAQ,CAAC,KAAA,CAAA,CAAA,CAAQ;AAC9F,CAAA;AAEA;;;IAIA,MAAMC,UAAU,CAACC,cAAAA,GAAAA;AACf,IAAA,MAAM,CAACC,OAAAA,EAAS,GAAGC,KAAK,GAAGF,cAAAA,CAAeG,KAAK,CAAC,GAAA,CAAA;AAEhD,IAAA,IAAIF,YAAY5B,kBAAAA,EAAoB;AAClC,QAAA,MAAM,IAAI+B,KAAAA,CAAM,CAAC,gCAAgC,EAAEH,OAAAA,CAAAA,CAAS,CAAA;AAC9D,IAAA;AAEA,IAAA,MAAM,CAACI,KAAAA,EAAOC,YAAAA,EAAcC,MAAAA,CAAO,GAAGL,IAAAA;AACtC,IAAA,IAAI,CAACG,KAAAA,IAAS,CAACC,YAAAA,IAAgB,CAACC,MAAAA,EAAQ;AACtC,QAAA,MAAM,IAAIH,KAAAA,CAAM,gCAAA,CAAA;AAClB,IAAA;AAEA,IAAA,MAAMf,GAAAA,GAAMf,YAAAA,EAAAA;IACZ,IAAI,CAACe,KAAK,OAAO,IAAA;AAEjB,IAAA,MAAMC,EAAAA,GAAKkB,MAAAA,CAAOC,IAAI,CAACJ,KAAAA,EAAO,KAAA,CAAA;AAC9B,IAAA,MAAMK,aAAAA,GAAgBF,MAAAA,CAAOC,IAAI,CAACH,YAAAA,EAAc,KAAA,CAAA;AAChD,IAAA,MAAMV,OAAAA,GAAUY,MAAAA,CAAOC,IAAI,CAACF,MAAAA,EAAQ,KAAA,CAAA;IAEpC,IAAI;AACF,QAAA,MAAMI,QAAAA,GAAW5B,MAAAA,CAAO6B,gBAAgB,CAAC,eAAevB,GAAAA,EAAKC,EAAAA,CAAAA;AAC7DqB,QAAAA,QAAAA,CAASE,UAAU,CAACjB,OAAAA,CAAAA;AAEpB,QAAA,IAAIkB,SAAAA,GAAYH,QAAAA,CAAS1B,MAAM,CAACyB,eAAeK,SAAAA,EAAW,MAAA,CAAA;QAC1DD,SAAAA,IAAaH,QAAAA,CAAShB,KAAK,CAAC,MAAA,CAAA;QAE5B,OAAOmB,SAAAA;AACT,IAAA,CAAA,CAAE,OAAOE,GAAAA,EAAK;QACZxC,MAAAA,CAAOK,GAAG,CAACC,IAAI,CACb,2FAAA,CAAA;QAEF,OAAO,IAAA;AACT,IAAA;AACF,CAAA;AAEA,iBAAe;AACbK,IAAAA,OAAAA;AACAY,IAAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"encryption.js","sources":["../../../../../server/src/services/encryption.ts"],"sourcesContent":["import crypto from 'crypto';\nimport type { Core } from '@strapi/types';\n\nconst IV_LENGTH = 16; // 16 bytes for AES-GCM IV\nconst ENCRYPTION_VERSION = 'v1';\n\nconst getHashedKey = (): Buffer | null => {\n const secrets = strapi.config.get<Core.Config.Admin['secrets']>('admin.secrets');\n const rawKey: string | undefined = secrets?.encryptionKey;\n if (!rawKey) {\n strapi.log.warn('Encryption key is missing from admin.secrets.encryptionKey configuration');\n return null;\n }\n\n return crypto.createHash('sha256').update(rawKey).digest(); // Always 32 bytes\n};\n\n/**\n * Encrypts a value string using AES-256-GCM.\n * Returns a string prefixed with the encryption version and includes IV, encrypted content, and auth tag (all hex-encoded).\n */\nconst encrypt = (value: string) => {\n const key = getHashedKey();\n if (!key) return null;\n\n const iv = crypto.randomBytes(IV_LENGTH);\n const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);\n\n let encrypted = cipher.update(value, 'utf8', 'hex');\n encrypted += cipher.final('hex');\n\n const authTag = cipher.getAuthTag();\n\n return `${ENCRYPTION_VERSION}:${iv.toString('hex')}:${encrypted}:${authTag.toString('hex')}`;\n};\n\n/**\n * Decrypts a value encrypted by encrypt().\n * Supports versioned formats like v1:iv:encrypted:authTag\n */\nconst decrypt = (encryptedValue: string) => {\n const [version, ...rest] = encryptedValue.split(':');\n\n if (version !== ENCRYPTION_VERSION) {\n throw new Error(`Unsupported encryption version: ${version}`);\n }\n\n const [ivHex, encryptedHex, tagHex] = rest;\n if (!ivHex || !encryptedHex || !tagHex) {\n throw new Error('Invalid encrypted value format');\n }\n\n const key = getHashedKey();\n if (!key) return null;\n\n const iv = Buffer.from(ivHex, 'hex');\n const encryptedText = Buffer.from(encryptedHex, 'hex');\n const authTag = Buffer.from(tagHex, 'hex');\n\n try {\n const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv);\n decipher.setAuthTag(authTag);\n\n let decrypted = decipher.update(encryptedText, undefined, 'utf8');\n decrypted += decipher.final('utf8');\n\n return decrypted;\n } catch (err) {\n strapi.log.warn(\n '[decrypt] Unable to decrypt value — encryption key may have changed or data is corrupted.'\n );\n return null;\n }\n};\n\nexport default {\n encrypt,\n decrypt,\n};\n"],"names":["IV_LENGTH","ENCRYPTION_VERSION","getHashedKey","secrets","strapi","config","get","rawKey","encryptionKey","log","warn","crypto","createHash","update","digest","encrypt","value","key","iv","randomBytes","cipher","createCipheriv","encrypted","final","authTag","getAuthTag","toString","decrypt","encryptedValue","version","rest","split","Error","ivHex","encryptedHex","tagHex","Buffer","from","encryptedText","decipher","createDecipheriv","setAuthTag","decrypted","undefined","err"],"mappings":"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"}
@@ -4,6 +4,10 @@ var passport$1 = require('koa-passport');
4
4
  var fp = require('lodash/fp');
5
5
  var localStrategy = require('./passport/local-strategy.js');
6
6
 
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var passport__default = /*#__PURE__*/_interopDefault(passport$1);
10
+
7
11
  const authEventsMapper = {
8
12
  onConnectionSuccess: 'admin.auth.success',
9
13
  onConnectionError: 'admin.auth.error'
@@ -26,9 +30,9 @@ const registerAuthEvents = ()=>{
26
30
  }
27
31
  };
28
32
  const init = ()=>{
29
- strapi.service('admin::passport').getPassportStrategies().forEach((strategy)=>passport$1.use(strategy));
33
+ strapi.service('admin::passport').getPassportStrategies().forEach((strategy)=>passport__default.default.use(strategy));
30
34
  registerAuthEvents();
31
- return passport$1.initialize();
35
+ return passport__default.default.initialize();
32
36
  };
33
37
  var passport = {
34
38
  init,
@@ -1 +1 @@
1
- {"version":3,"file":"passport.js","sources":["../../../../../server/src/services/passport.ts"],"sourcesContent":["import passport from 'koa-passport';\nimport type { Strategy } from 'passport-local';\nimport { isFunction } from 'lodash/fp';\n\nimport createLocalStrategy from './passport/local-strategy';\n\nconst authEventsMapper = {\n onConnectionSuccess: 'admin.auth.success',\n onConnectionError: 'admin.auth.error',\n};\n\nconst valueIsFunctionType = ([, value]: [any, any]) => isFunction(value);\nconst keyIsValidEventName = ([key]: any) => {\n return Object.keys(strapi.service('admin::passport').authEventsMapper).includes(key);\n};\n\nconst getPassportStrategies = () => [createLocalStrategy(strapi)] as Strategy[];\n\nconst registerAuthEvents = () => {\n // @ts-expect-error - TODO: migrate auth service to TS\n const { events = {} } = strapi.config.get('admin.auth', {});\n const { authEventsMapper } = strapi.service('admin::passport');\n\n const eventList = Object.entries(events).filter(keyIsValidEventName).filter(valueIsFunctionType);\n\n for (const [eventName, handler] of eventList) {\n // TODO - TS: ensure the handler is an EventHub.Listener\n strapi.eventHub.on(authEventsMapper[eventName], handler as any);\n }\n};\n\nconst init = () => {\n strapi\n .service('admin::passport')\n .getPassportStrategies()\n .forEach((strategy: Strategy) => passport.use(strategy));\n\n registerAuthEvents();\n\n return passport.initialize();\n};\n\nexport default { init, getPassportStrategies, authEventsMapper };\n"],"names":["authEventsMapper","onConnectionSuccess","onConnectionError","valueIsFunctionType","value","isFunction","keyIsValidEventName","key","Object","keys","strapi","service","includes","getPassportStrategies","createLocalStrategy","registerAuthEvents","events","config","get","eventList","entries","filter","eventName","handler","eventHub","on","init","forEach","strategy","passport","use","initialize"],"mappings":";;;;;;AAMA,MAAMA,gBAAAA,GAAmB;IACvBC,mBAAAA,EAAqB,oBAAA;IACrBC,iBAAAA,EAAmB;AACrB,CAAA;AAEA,MAAMC,mBAAAA,GAAsB,CAAC,GAAGC,KAAAA,CAAkB,GAAKC,aAAAA,CAAWD,KAAAA,CAAAA;AAClE,MAAME,mBAAAA,GAAsB,CAAC,CAACC,GAAAA,CAAS,GAAA;IACrC,OAAOC,MAAAA,CAAOC,IAAI,CAACC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA,CAAmBX,gBAAgB,CAAA,CAAEY,QAAQ,CAACL,GAAAA,CAAAA;AAClF,CAAA;AAEA,MAAMM,wBAAwB,IAAM;QAACC,aAAAA,CAAoBJ,MAAAA;AAAQ,KAAA;AAEjE,MAAMK,kBAAAA,GAAqB,IAAA;;AAEzB,IAAA,MAAM,EAAEC,MAAAA,GAAS,EAAE,EAAE,GAAGN,MAAAA,CAAOO,MAAM,CAACC,GAAG,CAAC,YAAA,EAAc,EAAC,CAAA;AACzD,IAAA,MAAM,EAAElB,gBAAgB,EAAE,GAAGU,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;IAE5C,MAAMQ,SAAAA,GAAYX,OAAOY,OAAO,CAACJ,QAAQK,MAAM,CAACf,mBAAAA,CAAAA,CAAqBe,MAAM,CAAClB,mBAAAA,CAAAA;AAE5E,IAAA,KAAK,MAAM,CAACmB,SAAAA,EAAWC,OAAAA,CAAQ,IAAIJ,SAAAA,CAAW;;AAE5CT,QAAAA,MAAAA,CAAOc,QAAQ,CAACC,EAAE,CAACzB,gBAAgB,CAACsB,UAAU,EAAEC,OAAAA,CAAAA;AAClD,IAAA;AACF,CAAA;AAEA,MAAMG,IAAAA,GAAO,IAAA;IACXhB,MAAAA,CACGC,OAAO,CAAC,iBAAA,CAAA,CACRE,qBAAqB,EAAA,CACrBc,OAAO,CAAC,CAACC,QAAAA,GAAuBC,UAAAA,CAASC,GAAG,CAACF,QAAAA,CAAAA,CAAAA;AAEhDb,IAAAA,kBAAAA,EAAAA;AAEA,IAAA,OAAOc,WAASE,UAAU,EAAA;AAC5B,CAAA;AAEA,eAAe;AAAEL,IAAAA,IAAAA;AAAMb,IAAAA,qBAAAA;AAAuBb,IAAAA;AAAiB,CAAA;;;;"}
1
+ {"version":3,"file":"passport.js","sources":["../../../../../server/src/services/passport.ts"],"sourcesContent":["import passport from 'koa-passport';\nimport type { Strategy } from 'passport-local';\nimport { isFunction } from 'lodash/fp';\n\nimport createLocalStrategy from './passport/local-strategy';\n\nconst authEventsMapper = {\n onConnectionSuccess: 'admin.auth.success',\n onConnectionError: 'admin.auth.error',\n};\n\nconst valueIsFunctionType = ([, value]: [any, any]) => isFunction(value);\nconst keyIsValidEventName = ([key]: any) => {\n return Object.keys(strapi.service('admin::passport').authEventsMapper).includes(key);\n};\n\nconst getPassportStrategies = () => [createLocalStrategy(strapi)] as Strategy[];\n\nconst registerAuthEvents = () => {\n // @ts-expect-error - TODO: migrate auth service to TS\n const { events = {} } = strapi.config.get('admin.auth', {});\n const { authEventsMapper } = strapi.service('admin::passport');\n\n const eventList = Object.entries(events).filter(keyIsValidEventName).filter(valueIsFunctionType);\n\n for (const [eventName, handler] of eventList) {\n // TODO - TS: ensure the handler is an EventHub.Listener\n strapi.eventHub.on(authEventsMapper[eventName], handler as any);\n }\n};\n\nconst init = () => {\n strapi\n .service('admin::passport')\n .getPassportStrategies()\n .forEach((strategy: Strategy) => passport.use(strategy));\n\n registerAuthEvents();\n\n return passport.initialize();\n};\n\nexport default { init, getPassportStrategies, authEventsMapper };\n"],"names":["authEventsMapper","onConnectionSuccess","onConnectionError","valueIsFunctionType","value","isFunction","keyIsValidEventName","key","Object","keys","strapi","service","includes","getPassportStrategies","createLocalStrategy","registerAuthEvents","events","config","get","eventList","entries","filter","eventName","handler","eventHub","on","init","forEach","strategy","passport","use","initialize"],"mappings":";;;;;;;;;;AAMA,MAAMA,gBAAAA,GAAmB;IACvBC,mBAAAA,EAAqB,oBAAA;IACrBC,iBAAAA,EAAmB;AACrB,CAAA;AAEA,MAAMC,mBAAAA,GAAsB,CAAC,GAAGC,KAAAA,CAAkB,GAAKC,aAAAA,CAAWD,KAAAA,CAAAA;AAClE,MAAME,mBAAAA,GAAsB,CAAC,CAACC,GAAAA,CAAS,GAAA;IACrC,OAAOC,MAAAA,CAAOC,IAAI,CAACC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA,CAAmBX,gBAAgB,CAAA,CAAEY,QAAQ,CAACL,GAAAA,CAAAA;AAClF,CAAA;AAEA,MAAMM,wBAAwB,IAAM;QAACC,aAAAA,CAAoBJ,MAAAA;AAAQ,KAAA;AAEjE,MAAMK,kBAAAA,GAAqB,IAAA;;AAEzB,IAAA,MAAM,EAAEC,MAAAA,GAAS,EAAE,EAAE,GAAGN,MAAAA,CAAOO,MAAM,CAACC,GAAG,CAAC,YAAA,EAAc,EAAC,CAAA;AACzD,IAAA,MAAM,EAAElB,gBAAgB,EAAE,GAAGU,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;IAE5C,MAAMQ,SAAAA,GAAYX,OAAOY,OAAO,CAACJ,QAAQK,MAAM,CAACf,mBAAAA,CAAAA,CAAqBe,MAAM,CAAClB,mBAAAA,CAAAA;AAE5E,IAAA,KAAK,MAAM,CAACmB,SAAAA,EAAWC,OAAAA,CAAQ,IAAIJ,SAAAA,CAAW;;AAE5CT,QAAAA,MAAAA,CAAOc,QAAQ,CAACC,EAAE,CAACzB,gBAAgB,CAACsB,UAAU,EAAEC,OAAAA,CAAAA;AAClD,IAAA;AACF,CAAA;AAEA,MAAMG,IAAAA,GAAO,IAAA;IACXhB,MAAAA,CACGC,OAAO,CAAC,iBAAA,CAAA,CACRE,qBAAqB,EAAA,CACrBc,OAAO,CAAC,CAACC,QAAAA,GAAuBC,yBAAAA,CAASC,GAAG,CAACF,QAAAA,CAAAA,CAAAA;AAEhDb,IAAAA,kBAAAA,EAAAA;AAEA,IAAA,OAAOc,0BAASE,UAAU,EAAA;AAC5B,CAAA;AAEA,eAAe;AAAEL,IAAAA,IAAAA;AAAMb,IAAAA,qBAAAA;AAAuBb,IAAAA;AAAiB,CAAA;;;;"}
@@ -5,9 +5,13 @@ var permissions = require('@strapi/permissions');
5
5
  var index = require('../../domain/permission/index.js');
6
6
  var index$1 = require('../../utils/index.js');
7
7
 
8
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
+
10
+ var permissions__default = /*#__PURE__*/_interopDefault(permissions);
11
+
8
12
  var createPermissionEngine = ((params)=>{
9
13
  const { providers } = params;
10
- const engine = permissions.engine.new({
14
+ const engine = permissions__default.default.engine.new({
11
15
  providers
12
16
  })/**
13
17
  * Validate the permission's action exists in the action registry
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sources":["../../../../../../server/src/services/permission/engine.ts"],"sourcesContent":["import { curry, isArray, isEmpty, difference } from 'lodash/fp';\nimport permissions, { type engine } from '@strapi/permissions';\nimport type { Ability } from '@casl/ability';\nimport permissionDomain from '../../domain/permission';\nimport { getService } from '../../utils';\nimport { Action } from '../../domain/action';\nimport type { AdminUser, Permission } from '../../../../shared/contracts/shared';\n\nexport default (params: { providers: engine.EngineParams['providers'] }) => {\n const { providers } = params;\n\n const engine = permissions.engine\n .new({ providers })\n /**\n * Validate the permission's action exists in the action registry\n */\n .on('before-format::validate.permission', ({ permission }) => {\n const action = providers.action.get(permission.action);\n\n // If the action isn't registered into the action provider, then ignore the permission\n if (!action) {\n strapi.log.debug(\n `Unknown action \"${permission.action}\" supplied when registering a new permission in engine`\n );\n return false;\n }\n })\n\n /**\n * Remove invalid properties from the permission based on the action (applyToProperties)\n */\n .on('format.permission', (permission: Permission) => {\n const action = providers.action.get(permission.action) as Action;\n const properties = permission.properties || {};\n\n // Only keep the properties allowed by the action (action.applyToProperties)\n const propertiesName = Object.keys(properties);\n const invalidProperties = difference(\n propertiesName,\n // @ts-expect-error - applyToProperties is defined inside the options of an action\n action.applyToProperties || propertiesName\n );\n\n const permissionWithSanitizedProperties = invalidProperties.reduce(\n // @ts-expect-error - fix reduce, property should be a string but it's actually the permission object\n (property) => permissionDomain.deleteProperty(property, permission) as Permission,\n permission\n );\n\n return permissionWithSanitizedProperties;\n })\n\n /**\n * Ignore the permission if the fields property is an empty array (access to no field)\n */\n .on('after-format::validate.permission', ({ permission }) => {\n const { fields } = permission.properties;\n\n if (isArray(fields) && isEmpty(fields)) {\n return false;\n }\n });\n\n return {\n get hooks() {\n return engine.hooks;\n },\n\n /**\n * Generate an ability based on the given user (using associated roles & permissions)\n * @param user\n */\n async generateUserAbility(user: AdminUser): Promise<Ability> {\n const permissions = (await getService('permission').findUserPermissions(user)) as any;\n\n return engine.generateAbility(permissions, user);\n },\n\n /**\n * Generate an ability based on an admin token's stored permissions, scoped to the owner.\n * Token permissions are already validated and ceiling-clamped at write time.\n */\n async generateTokenAbility(tokenPermissions: Permission[], owner: AdminUser): Promise<Ability> {\n return engine.generateAbility(tokenPermissions as any, owner);\n },\n\n /**\n * Check many permissions based on an ability\n */\n checkMany: curry((ability: Ability, permissions: Permission[]) => {\n // @ts-expect-error - Permissions does not contain any field property\n return permissions.map(({ action, subject, field }) => ability.can(action, subject, field));\n }),\n };\n};\n"],"names":["params","providers","engine","permissions","new","on","permission","action","get","strapi","log","debug","properties","propertiesName","Object","keys","invalidProperties","difference","applyToProperties","permissionWithSanitizedProperties","reduce","property","permissionDomain","deleteProperty","fields","isArray","isEmpty","hooks","generateUserAbility","user","getService","findUserPermissions","generateAbility","generateTokenAbility","tokenPermissions","owner","checkMany","curry","ability","map","subject","field","can"],"mappings":";;;;;;;AAQA,6BAAe,CAAA,CAACA,MAAAA,GAAAA;IACd,MAAM,EAAEC,SAAS,EAAE,GAAGD,MAAAA;AAEtB,IAAA,MAAME,MAAAA,GAASC,WAAAA,CAAYD,MAAM,CAC9BE,GAAG,CAAC;AAAEH,QAAAA;KAAU,CACjB;;AAEC,SACAI,EAAE,CAAC,oCAAA,EAAsC,CAAC,EAAEC,UAAU,EAAE,GAAA;AACvD,QAAA,MAAMC,SAASN,SAAAA,CAAUM,MAAM,CAACC,GAAG,CAACF,WAAWC,MAAM,CAAA;;AAGrD,QAAA,IAAI,CAACA,MAAAA,EAAQ;YACXE,MAAAA,CAAOC,GAAG,CAACC,KAAK,CACd,CAAC,gBAAgB,EAAEL,UAAAA,CAAWC,MAAM,CAAC,sDAAsD,CAAC,CAAA;YAE9F,OAAO,KAAA;AACT,QAAA;IACF,CAAA,CAEA;;SAGCF,EAAE,CAAC,mBAAA,EAAqB,CAACC,UAAAA,GAAAA;AACxB,QAAA,MAAMC,SAASN,SAAAA,CAAUM,MAAM,CAACC,GAAG,CAACF,WAAWC,MAAM,CAAA;AACrD,QAAA,MAAMK,UAAAA,GAAaN,UAAAA,CAAWM,UAAU,IAAI,EAAC;;QAG7C,MAAMC,cAAAA,GAAiBC,MAAAA,CAAOC,IAAI,CAACH,UAAAA,CAAAA;QACnC,MAAMI,iBAAAA,GAAoBC,aAAAA,CACxBJ,cAAAA;AAEAN,QAAAA,MAAAA,CAAOW,iBAAiB,IAAIL,cAAAA,CAAAA;AAG9B,QAAA,MAAMM,iCAAAA,GAAoCH,iBAAAA,CAAkBI,MAAM;AAEhE,QAAA,CAACC,QAAAA,GAAaC,aAAAA,CAAiBC,cAAc,CAACF,UAAUf,UAAAA,CAAAA,EACxDA,UAAAA,CAAAA;QAGF,OAAOa,iCAAAA;IACT,CAAA,CAEA;;AAEC,SACAd,EAAE,CAAC,mCAAA,EAAqC,CAAC,EAAEC,UAAU,EAAE,GAAA;AACtD,QAAA,MAAM,EAAEkB,MAAM,EAAE,GAAGlB,WAAWM,UAAU;QAExC,IAAIa,UAAAA,CAAQD,MAAAA,CAAAA,IAAWE,UAAAA,CAAQF,MAAAA,CAAAA,EAAS;YACtC,OAAO,KAAA;AACT,QAAA;AACF,IAAA,CAAA,CAAA;IAEF,OAAO;AACL,QAAA,IAAIG,KAAAA,CAAAA,GAAQ;AACV,YAAA,OAAOzB,OAAOyB,KAAK;AACrB,QAAA,CAAA;AAEA;;;QAIA,MAAMC,qBAAoBC,IAAe,EAAA;AACvC,YAAA,MAAM1B,WAAAA,GAAe,MAAM2B,kBAAAA,CAAW,YAAA,CAAA,CAAcC,mBAAmB,CAACF,IAAAA,CAAAA;YAExE,OAAO3B,MAAAA,CAAO8B,eAAe,CAAC7B,WAAAA,EAAa0B,IAAAA,CAAAA;AAC7C,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMI,oBAAAA,CAAAA,CAAqBC,gBAA8B,EAAEC,KAAgB,EAAA;YACzE,OAAOjC,MAAAA,CAAO8B,eAAe,CAACE,gBAAAA,EAAyBC,KAAAA,CAAAA;AACzD,QAAA,CAAA;AAEA;;QAGAC,SAAAA,EAAWC,QAAAA,CAAM,CAACC,OAAAA,EAAkBnC,WAAAA,GAAAA;;AAElC,YAAA,OAAOA,YAAYoC,GAAG,CAAC,CAAC,EAAEhC,MAAM,EAAEiC,OAAO,EAAEC,KAAK,EAAE,GAAKH,OAAAA,CAAQI,GAAG,CAACnC,QAAQiC,OAAAA,EAASC,KAAAA,CAAAA,CAAAA;AACtF,QAAA,CAAA;AACF,KAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"engine.js","sources":["../../../../../../server/src/services/permission/engine.ts"],"sourcesContent":["import { curry, isArray, isEmpty, difference } from 'lodash/fp';\nimport permissions, { type engine } from '@strapi/permissions';\nimport type { Ability } from '@casl/ability';\nimport permissionDomain from '../../domain/permission';\nimport { getService } from '../../utils';\nimport { Action } from '../../domain/action';\nimport type { AdminUser, Permission } from '../../../../shared/contracts/shared';\n\nexport default (params: { providers: engine.EngineParams['providers'] }) => {\n const { providers } = params;\n\n const engine = permissions.engine\n .new({ providers })\n /**\n * Validate the permission's action exists in the action registry\n */\n .on('before-format::validate.permission', ({ permission }) => {\n const action = providers.action.get(permission.action);\n\n // If the action isn't registered into the action provider, then ignore the permission\n if (!action) {\n strapi.log.debug(\n `Unknown action \"${permission.action}\" supplied when registering a new permission in engine`\n );\n return false;\n }\n })\n\n /**\n * Remove invalid properties from the permission based on the action (applyToProperties)\n */\n .on('format.permission', (permission: Permission) => {\n const action = providers.action.get(permission.action) as Action;\n const properties = permission.properties || {};\n\n // Only keep the properties allowed by the action (action.applyToProperties)\n const propertiesName = Object.keys(properties);\n const invalidProperties = difference(\n propertiesName,\n // @ts-expect-error - applyToProperties is defined inside the options of an action\n action.applyToProperties || propertiesName\n );\n\n const permissionWithSanitizedProperties = invalidProperties.reduce(\n // @ts-expect-error - fix reduce, property should be a string but it's actually the permission object\n (property) => permissionDomain.deleteProperty(property, permission) as Permission,\n permission\n );\n\n return permissionWithSanitizedProperties;\n })\n\n /**\n * Ignore the permission if the fields property is an empty array (access to no field)\n */\n .on('after-format::validate.permission', ({ permission }) => {\n const { fields } = permission.properties;\n\n if (isArray(fields) && isEmpty(fields)) {\n return false;\n }\n });\n\n return {\n get hooks() {\n return engine.hooks;\n },\n\n /**\n * Generate an ability based on the given user (using associated roles & permissions)\n * @param user\n */\n async generateUserAbility(user: AdminUser): Promise<Ability> {\n const permissions = (await getService('permission').findUserPermissions(user)) as any;\n\n return engine.generateAbility(permissions, user);\n },\n\n /**\n * Generate an ability based on an admin token's stored permissions, scoped to the owner.\n * Token permissions are already validated and ceiling-clamped at write time.\n */\n async generateTokenAbility(tokenPermissions: Permission[], owner: AdminUser): Promise<Ability> {\n return engine.generateAbility(tokenPermissions as any, owner);\n },\n\n /**\n * Check many permissions based on an ability\n */\n checkMany: curry((ability: Ability, permissions: Permission[]) => {\n // @ts-expect-error - Permissions does not contain any field property\n return permissions.map(({ action, subject, field }) => ability.can(action, subject, field));\n }),\n };\n};\n"],"names":["params","providers","engine","permissions","new","on","permission","action","get","strapi","log","debug","properties","propertiesName","Object","keys","invalidProperties","difference","applyToProperties","permissionWithSanitizedProperties","reduce","property","permissionDomain","deleteProperty","fields","isArray","isEmpty","hooks","generateUserAbility","user","getService","findUserPermissions","generateAbility","generateTokenAbility","tokenPermissions","owner","checkMany","curry","ability","map","subject","field","can"],"mappings":";;;;;;;;;;;AAQA,6BAAe,CAAA,CAACA,MAAAA,GAAAA;IACd,MAAM,EAAEC,SAAS,EAAE,GAAGD,MAAAA;AAEtB,IAAA,MAAME,MAAAA,GAASC,4BAAAA,CAAYD,MAAM,CAC9BE,GAAG,CAAC;AAAEH,QAAAA;KAAU,CACjB;;AAEC,SACAI,EAAE,CAAC,oCAAA,EAAsC,CAAC,EAAEC,UAAU,EAAE,GAAA;AACvD,QAAA,MAAMC,SAASN,SAAAA,CAAUM,MAAM,CAACC,GAAG,CAACF,WAAWC,MAAM,CAAA;;AAGrD,QAAA,IAAI,CAACA,MAAAA,EAAQ;YACXE,MAAAA,CAAOC,GAAG,CAACC,KAAK,CACd,CAAC,gBAAgB,EAAEL,UAAAA,CAAWC,MAAM,CAAC,sDAAsD,CAAC,CAAA;YAE9F,OAAO,KAAA;AACT,QAAA;IACF,CAAA,CAEA;;SAGCF,EAAE,CAAC,mBAAA,EAAqB,CAACC,UAAAA,GAAAA;AACxB,QAAA,MAAMC,SAASN,SAAAA,CAAUM,MAAM,CAACC,GAAG,CAACF,WAAWC,MAAM,CAAA;AACrD,QAAA,MAAMK,UAAAA,GAAaN,UAAAA,CAAWM,UAAU,IAAI,EAAC;;QAG7C,MAAMC,cAAAA,GAAiBC,MAAAA,CAAOC,IAAI,CAACH,UAAAA,CAAAA;QACnC,MAAMI,iBAAAA,GAAoBC,aAAAA,CACxBJ,cAAAA;AAEAN,QAAAA,MAAAA,CAAOW,iBAAiB,IAAIL,cAAAA,CAAAA;AAG9B,QAAA,MAAMM,iCAAAA,GAAoCH,iBAAAA,CAAkBI,MAAM;AAEhE,QAAA,CAACC,QAAAA,GAAaC,aAAAA,CAAiBC,cAAc,CAACF,UAAUf,UAAAA,CAAAA,EACxDA,UAAAA,CAAAA;QAGF,OAAOa,iCAAAA;IACT,CAAA,CAEA;;AAEC,SACAd,EAAE,CAAC,mCAAA,EAAqC,CAAC,EAAEC,UAAU,EAAE,GAAA;AACtD,QAAA,MAAM,EAAEkB,MAAM,EAAE,GAAGlB,WAAWM,UAAU;QAExC,IAAIa,UAAAA,CAAQD,MAAAA,CAAAA,IAAWE,UAAAA,CAAQF,MAAAA,CAAAA,EAAS;YACtC,OAAO,KAAA;AACT,QAAA;AACF,IAAA,CAAA,CAAA;IAEF,OAAO;AACL,QAAA,IAAIG,KAAAA,CAAAA,GAAQ;AACV,YAAA,OAAOzB,OAAOyB,KAAK;AACrB,QAAA,CAAA;AAEA;;;QAIA,MAAMC,qBAAoBC,IAAe,EAAA;AACvC,YAAA,MAAM1B,WAAAA,GAAe,MAAM2B,kBAAAA,CAAW,YAAA,CAAA,CAAcC,mBAAmB,CAACF,IAAAA,CAAAA;YAExE,OAAO3B,MAAAA,CAAO8B,eAAe,CAAC7B,WAAAA,EAAa0B,IAAAA,CAAAA;AAC7C,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMI,oBAAAA,CAAAA,CAAqBC,gBAA8B,EAAEC,KAAgB,EAAA;YACzE,OAAOjC,MAAAA,CAAO8B,eAAe,CAACE,gBAAAA,EAAyBC,KAAAA,CAAAA;AACzD,QAAA,CAAA;AAEA;;QAGAC,SAAAA,EAAWC,QAAAA,CAAM,CAACC,OAAAA,EAAkBnC,WAAAA,GAAAA;;AAElC,YAAA,OAAOA,YAAYoC,GAAG,CAAC,CAAC,EAAEhC,MAAM,EAAEiC,OAAO,EAAEC,KAAK,EAAE,GAAKH,OAAAA,CAAQI,GAAG,CAACnC,QAAQiC,OAAAA,EAASC,KAAAA,CAAAA,CAAAA;AACtF,QAAA,CAAA;AACF,KAAA;AACF,CAAA;;;;"}
@@ -7,6 +7,10 @@ var sanitize = require('./sanitize.js');
7
7
  var validate = require('./validate.js');
8
8
  var queryBuilders = require('./query-builders.js');
9
9
 
10
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
+
12
+ var ___default = /*#__PURE__*/_interopDefault(_);
13
+
10
14
  var index = (({ ability: ability$1, action, model })=>({
11
15
  ability: ability$1,
12
16
  action,
@@ -21,7 +25,7 @@ var index = (({ ability: ability$1, action, model })=>({
21
25
  return this.sanitizeInput(data, options);
22
26
  },
23
27
  getQuery (queryAction = action) {
24
- if (_.isUndefined(queryAction)) {
28
+ if (___default.default.isUndefined(queryAction)) {
25
29
  throw new Error('Action must be defined to build a permission query');
26
30
  }
27
31
  return queryBuilders.buildStrapiQuery(queryBuilders.buildCaslQuery(ability$1, queryAction, model));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../../server/src/services/permission/permissions-manager/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { cloneDeep, isPlainObject } from 'lodash/fp';\nimport { subject as asSubject } from '@casl/ability';\nimport createSanitizeHelpers from './sanitize';\nimport createValidateHelpers from './validate';\n\nimport { buildStrapiQuery, buildCaslQuery } from './query-builders';\n\nexport default ({ ability, action, model }: any) => ({\n ability,\n action,\n model,\n\n get isAllowed(): unknown {\n return this.ability.can(action, model);\n },\n\n toSubject(target: any, subjectType = model) {\n return asSubject(subjectType, target);\n },\n\n pickPermittedFieldsOf(data: unknown, options = {}) {\n return this.sanitizeInput(data, options);\n },\n\n getQuery(queryAction = action) {\n if (_.isUndefined(queryAction)) {\n throw new Error('Action must be defined to build a permission query');\n }\n\n return buildStrapiQuery(buildCaslQuery(ability, queryAction, model));\n },\n\n // eslint-disable-next-line @typescript-eslint/default-param-last\n addPermissionsQueryTo(query = {} as any, action: unknown) {\n const newQuery = cloneDeep(query);\n const permissionQuery = this.getQuery(action) ?? undefined;\n\n if (isPlainObject(query.filters)) {\n newQuery.filters = permissionQuery\n ? { $and: [query.filters, permissionQuery] }\n : query.filters;\n } else {\n newQuery.filters = permissionQuery;\n }\n\n return newQuery;\n },\n\n ...createSanitizeHelpers({ action, ability, model }),\n ...createValidateHelpers({ action, ability, model }),\n});\n"],"names":["ability","action","model","isAllowed","can","toSubject","target","subjectType","asSubject","pickPermittedFieldsOf","data","options","sanitizeInput","getQuery","queryAction","_","isUndefined","Error","buildStrapiQuery","buildCaslQuery","addPermissionsQueryTo","query","newQuery","cloneDeep","permissionQuery","undefined","isPlainObject","filters","$and","createSanitizeHelpers","createValidateHelpers"],"mappings":";;;;;;;;;AAQA,YAAe,CAAA,CAAC,WAAEA,SAAO,EAAEC,MAAM,EAAEC,KAAK,EAAO,IAAM;AACnDF,iBAAAA,SAAAA;AACAC,QAAAA,MAAAA;AACAC,QAAAA,KAAAA;AAEA,QAAA,IAAIC,SAAAA,CAAAA,GAAqB;AACvB,YAAA,OAAO,IAAI,CAACH,OAAO,CAACI,GAAG,CAACH,MAAAA,EAAQC,KAAAA,CAAAA;AAClC,QAAA,CAAA;QAEAG,SAAAA,CAAAA,CAAUC,MAAW,EAAEC,WAAAA,GAAcL,KAAK,EAAA;AACxC,YAAA,OAAOM,gBAAUD,WAAAA,EAAaD,MAAAA,CAAAA;AAChC,QAAA,CAAA;AAEAG,QAAAA,qBAAAA,CAAAA,CAAsBC,IAAa,EAAEC,OAAAA,GAAU,EAAE,EAAA;AAC/C,YAAA,OAAO,IAAI,CAACC,aAAa,CAACF,IAAAA,EAAMC,OAAAA,CAAAA;AAClC,QAAA,CAAA;AAEAE,QAAAA,QAAAA,CAAAA,CAASC,cAAcb,MAAM,EAAA;YAC3B,IAAIc,CAAAA,CAAEC,WAAW,CAACF,WAAAA,CAAAA,EAAc;AAC9B,gBAAA,MAAM,IAAIG,KAAAA,CAAM,oDAAA,CAAA;AAClB,YAAA;YAEA,OAAOC,8BAAAA,CAAiBC,4BAAAA,CAAenB,SAAAA,EAASc,WAAAA,EAAaZ,KAAAA,CAAAA,CAAAA;AAC/D,QAAA,CAAA;;AAGAkB,QAAAA,qBAAAA,CAAAA,CAAsBC,KAAAA,GAAQ,EAAS,EAAEpB,MAAe,EAAA;AACtD,YAAA,MAAMqB,WAAWC,YAAAA,CAAUF,KAAAA,CAAAA;AAC3B,YAAA,MAAMG,eAAAA,GAAkB,IAAI,CAACX,QAAQ,CAACZ,MAAAA,CAAAA,IAAWwB,SAAAA;YAEjD,IAAIC,gBAAAA,CAAcL,KAAAA,CAAMM,OAAO,CAAA,EAAG;gBAChCL,QAAAA,CAASK,OAAO,GAAGH,eAAAA,GACf;oBAAEI,IAAAA,EAAM;AAACP,wBAAAA,KAAAA,CAAMM,OAAO;AAAEH,wBAAAA;AAAgB;AAAC,iBAAA,GACzCH,MAAMM,OAAO;YACnB,CAAA,MAAO;AACLL,gBAAAA,QAAAA,CAASK,OAAO,GAAGH,eAAAA;AACrB,YAAA;YAEA,OAAOF,QAAAA;AACT,QAAA,CAAA;AAEA,QAAA,GAAGO,QAAAA,CAAsB;AAAE5B,YAAAA,MAAAA;AAAQD,qBAAAA,SAAAA;AAASE,YAAAA;SAAM,CAAE;AACpD,QAAA,GAAG4B,QAAAA,CAAsB;AAAE7B,YAAAA,MAAAA;AAAQD,qBAAAA,SAAAA;AAASE,YAAAA;SAAM;AACpD,KAAA,CAAC;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../../server/src/services/permission/permissions-manager/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { cloneDeep, isPlainObject } from 'lodash/fp';\nimport { subject as asSubject } from '@casl/ability';\nimport createSanitizeHelpers from './sanitize';\nimport createValidateHelpers from './validate';\n\nimport { buildStrapiQuery, buildCaslQuery } from './query-builders';\n\nexport default ({ ability, action, model }: any) => ({\n ability,\n action,\n model,\n\n get isAllowed(): unknown {\n return this.ability.can(action, model);\n },\n\n toSubject(target: any, subjectType = model) {\n return asSubject(subjectType, target);\n },\n\n pickPermittedFieldsOf(data: unknown, options = {}) {\n return this.sanitizeInput(data, options);\n },\n\n getQuery(queryAction = action) {\n if (_.isUndefined(queryAction)) {\n throw new Error('Action must be defined to build a permission query');\n }\n\n return buildStrapiQuery(buildCaslQuery(ability, queryAction, model));\n },\n\n // eslint-disable-next-line @typescript-eslint/default-param-last\n addPermissionsQueryTo(query = {} as any, action: unknown) {\n const newQuery = cloneDeep(query);\n const permissionQuery = this.getQuery(action) ?? undefined;\n\n if (isPlainObject(query.filters)) {\n newQuery.filters = permissionQuery\n ? { $and: [query.filters, permissionQuery] }\n : query.filters;\n } else {\n newQuery.filters = permissionQuery;\n }\n\n return newQuery;\n },\n\n ...createSanitizeHelpers({ action, ability, model }),\n ...createValidateHelpers({ action, ability, model }),\n});\n"],"names":["ability","action","model","isAllowed","can","toSubject","target","subjectType","asSubject","pickPermittedFieldsOf","data","options","sanitizeInput","getQuery","queryAction","_","isUndefined","Error","buildStrapiQuery","buildCaslQuery","addPermissionsQueryTo","query","newQuery","cloneDeep","permissionQuery","undefined","isPlainObject","filters","$and","createSanitizeHelpers","createValidateHelpers"],"mappings":";;;;;;;;;;;;;AAQA,YAAe,CAAA,CAAC,WAAEA,SAAO,EAAEC,MAAM,EAAEC,KAAK,EAAO,IAAM;AACnDF,iBAAAA,SAAAA;AACAC,QAAAA,MAAAA;AACAC,QAAAA,KAAAA;AAEA,QAAA,IAAIC,SAAAA,CAAAA,GAAqB;AACvB,YAAA,OAAO,IAAI,CAACH,OAAO,CAACI,GAAG,CAACH,MAAAA,EAAQC,KAAAA,CAAAA;AAClC,QAAA,CAAA;QAEAG,SAAAA,CAAAA,CAAUC,MAAW,EAAEC,WAAAA,GAAcL,KAAK,EAAA;AACxC,YAAA,OAAOM,gBAAUD,WAAAA,EAAaD,MAAAA,CAAAA;AAChC,QAAA,CAAA;AAEAG,QAAAA,qBAAAA,CAAAA,CAAsBC,IAAa,EAAEC,OAAAA,GAAU,EAAE,EAAA;AAC/C,YAAA,OAAO,IAAI,CAACC,aAAa,CAACF,IAAAA,EAAMC,OAAAA,CAAAA;AAClC,QAAA,CAAA;AAEAE,QAAAA,QAAAA,CAAAA,CAASC,cAAcb,MAAM,EAAA;YAC3B,IAAIc,kBAAAA,CAAEC,WAAW,CAACF,WAAAA,CAAAA,EAAc;AAC9B,gBAAA,MAAM,IAAIG,KAAAA,CAAM,oDAAA,CAAA;AAClB,YAAA;YAEA,OAAOC,8BAAAA,CAAiBC,4BAAAA,CAAenB,SAAAA,EAASc,WAAAA,EAAaZ,KAAAA,CAAAA,CAAAA;AAC/D,QAAA,CAAA;;AAGAkB,QAAAA,qBAAAA,CAAAA,CAAsBC,KAAAA,GAAQ,EAAS,EAAEpB,MAAe,EAAA;AACtD,YAAA,MAAMqB,WAAWC,YAAAA,CAAUF,KAAAA,CAAAA;AAC3B,YAAA,MAAMG,eAAAA,GAAkB,IAAI,CAACX,QAAQ,CAACZ,MAAAA,CAAAA,IAAWwB,SAAAA;YAEjD,IAAIC,gBAAAA,CAAcL,KAAAA,CAAMM,OAAO,CAAA,EAAG;gBAChCL,QAAAA,CAASK,OAAO,GAAGH,eAAAA,GACf;oBAAEI,IAAAA,EAAM;AAACP,wBAAAA,KAAAA,CAAMM,OAAO;AAAEH,wBAAAA;AAAgB;AAAC,iBAAA,GACzCH,MAAMM,OAAO;YACnB,CAAA,MAAO;AACLL,gBAAAA,QAAAA,CAASK,OAAO,GAAGH,eAAAA;AACrB,YAAA;YAEA,OAAOF,QAAAA;AACT,QAAA,CAAA;AAEA,QAAA,GAAGO,QAAAA,CAAsB;AAAE5B,YAAAA,MAAAA;AAAQD,qBAAAA,SAAAA;AAASE,YAAAA;SAAM,CAAE;AACpD,QAAA,GAAG4B,QAAAA,CAAsB;AAAE7B,YAAAA,MAAAA;AAAQD,qBAAAA,SAAAA;AAASE,YAAAA;SAAM;AACpD,KAAA,CAAC;;;;"}
@@ -3,6 +3,10 @@
3
3
  var _ = require('lodash');
4
4
  var extra = require('@casl/ability/extra');
5
5
 
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var ___default = /*#__PURE__*/_interopDefault(_);
9
+
6
10
  // TODO: migration
7
11
  const operatorsMap = {
8
12
  $in: '$in',
@@ -19,7 +23,7 @@ const operatorsMap = {
19
23
  $not: '$not'
20
24
  };
21
25
  const mapKey = (key)=>{
22
- if (_.isString(key) && key.startsWith('$') && key in operatorsMap) {
26
+ if (___default.default.isString(key) && key.startsWith('$') && key in operatorsMap) {
23
27
  return operatorsMap[key];
24
28
  }
25
29
  return key;
@@ -32,25 +36,25 @@ const buildStrapiQuery = (caslQuery)=>{
32
36
  return unwrapDeep(caslQuery);
33
37
  };
34
38
  const unwrapDeep = (obj)=>{
35
- if (!_.isPlainObject(obj) && !_.isArray(obj)) {
39
+ if (!___default.default.isPlainObject(obj) && !___default.default.isArray(obj)) {
36
40
  return obj;
37
41
  }
38
- if (_.isArray(obj)) {
42
+ if (___default.default.isArray(obj)) {
39
43
  return obj.map((v)=>unwrapDeep(v));
40
44
  }
41
- return _.reduce(obj, (acc, v, k)=>{
45
+ return ___default.default.reduce(obj, (acc, v, k)=>{
42
46
  const key = mapKey(k);
43
- if (_.isPlainObject(v)) {
47
+ if (___default.default.isPlainObject(v)) {
44
48
  if ('$elemMatch' in v) {
45
- _.setWith(acc, key, unwrapDeep(v.$elemMatch));
49
+ ___default.default.setWith(acc, key, unwrapDeep(v.$elemMatch));
46
50
  } else {
47
- _.setWith(acc, key, unwrapDeep(v));
51
+ ___default.default.setWith(acc, key, unwrapDeep(v));
48
52
  }
49
- } else if (_.isArray(v)) {
53
+ } else if (___default.default.isArray(v)) {
50
54
  // prettier-ignore
51
- _.setWith(acc, key, v.map((v)=>unwrapDeep(v)));
55
+ ___default.default.setWith(acc, key, v.map((v)=>unwrapDeep(v)));
52
56
  } else {
53
- _.setWith(acc, key, v);
57
+ ___default.default.setWith(acc, key, v);
54
58
  }
55
59
  return acc;
56
60
  }, {});
@@ -1 +1 @@
1
- {"version":3,"file":"query-builders.js","sources":["../../../../../../../server/src/services/permission/permissions-manager/query-builders.ts"],"sourcesContent":["// TODO: migration\nimport _ from 'lodash';\nimport { rulesToQuery } from '@casl/ability/extra';\n\nconst operatorsMap = {\n $in: '$in',\n $nin: '$notIn',\n $exists: '$notNull',\n $gte: '$gte',\n $gt: '$gt',\n $lte: '$lte',\n $lt: '$lt',\n $eq: '$eq',\n $ne: '$ne',\n $and: '$and',\n $or: '$or',\n $not: '$not',\n} as const;\n\nconst mapKey = (key: keyof typeof operatorsMap) => {\n if (_.isString(key) && key.startsWith('$') && key in operatorsMap) {\n return operatorsMap[key];\n }\n return key;\n};\n\nconst buildCaslQuery = (ability: unknown, action: unknown, model: unknown) => {\n // @ts-expect-error casl types\n return rulesToQuery(ability, action, model, (o) => o.conditions);\n};\n\nconst buildStrapiQuery = (caslQuery: unknown) => {\n return unwrapDeep(caslQuery);\n};\n\nconst unwrapDeep = (obj: any): unknown => {\n if (!_.isPlainObject(obj) && !_.isArray(obj)) {\n return obj;\n }\n if (_.isArray(obj)) {\n return obj.map((v: unknown) => unwrapDeep(v));\n }\n\n return _.reduce(\n obj,\n (acc, v, k: any) => {\n const key = mapKey(k);\n\n if (_.isPlainObject(v)) {\n if ('$elemMatch' in v) {\n _.setWith(acc, key, unwrapDeep(v.$elemMatch));\n } else {\n _.setWith(acc, key, unwrapDeep(v));\n }\n } else if (_.isArray(v)) {\n // prettier-ignore\n _.setWith(acc, key, v.map(v => unwrapDeep(v)));\n } else {\n _.setWith(acc, key, v);\n }\n\n return acc;\n },\n {}\n );\n};\n\nexport { buildCaslQuery, buildStrapiQuery };\n"],"names":["operatorsMap","$in","$nin","$exists","$gte","$gt","$lte","$lt","$eq","$ne","$and","$or","$not","mapKey","key","_","isString","startsWith","buildCaslQuery","ability","action","model","rulesToQuery","o","conditions","buildStrapiQuery","caslQuery","unwrapDeep","obj","isPlainObject","isArray","map","v","reduce","acc","k","setWith","$elemMatch"],"mappings":";;;;;AAAA;AAIA,MAAMA,YAAAA,GAAe;IACnBC,GAAAA,EAAK,KAAA;IACLC,IAAAA,EAAM,QAAA;IACNC,OAAAA,EAAS,UAAA;IACTC,IAAAA,EAAM,MAAA;IACNC,GAAAA,EAAK,KAAA;IACLC,IAAAA,EAAM,MAAA;IACNC,GAAAA,EAAK,KAAA;IACLC,GAAAA,EAAK,KAAA;IACLC,GAAAA,EAAK,KAAA;IACLC,IAAAA,EAAM,MAAA;IACNC,GAAAA,EAAK,KAAA;IACLC,IAAAA,EAAM;AACR,CAAA;AAEA,MAAMC,SAAS,CAACC,GAAAA,GAAAA;IACd,IAAIC,CAAAA,CAAEC,QAAQ,CAACF,GAAAA,CAAAA,IAAQA,IAAIG,UAAU,CAAC,GAAA,CAAA,IAAQH,GAAAA,IAAOd,YAAAA,EAAc;QACjE,OAAOA,YAAY,CAACc,GAAAA,CAAI;AAC1B,IAAA;IACA,OAAOA,GAAAA;AACT,CAAA;AAEA,MAAMI,cAAAA,GAAiB,CAACC,OAAAA,EAAkBC,MAAAA,EAAiBC,KAAAA,GAAAA;;AAEzD,IAAA,OAAOC,mBAAaH,OAAAA,EAASC,MAAAA,EAAQC,OAAO,CAACE,CAAAA,GAAMA,EAAEC,UAAU,CAAA;AACjE;AAEA,MAAMC,mBAAmB,CAACC,SAAAA,GAAAA;AACxB,IAAA,OAAOC,UAAAA,CAAWD,SAAAA,CAAAA;AACpB;AAEA,MAAMC,aAAa,CAACC,GAAAA,GAAAA;IAClB,IAAI,CAACb,EAAEc,aAAa,CAACD,QAAQ,CAACb,CAAAA,CAAEe,OAAO,CAACF,GAAAA,CAAAA,EAAM;QAC5C,OAAOA,GAAAA;AACT,IAAA;IACA,IAAIb,CAAAA,CAAEe,OAAO,CAACF,GAAAA,CAAAA,EAAM;AAClB,QAAA,OAAOA,GAAAA,CAAIG,GAAG,CAAC,CAACC,IAAeL,UAAAA,CAAWK,CAAAA,CAAAA,CAAAA;AAC5C,IAAA;AAEA,IAAA,OAAOjB,EAAEkB,MAAM,CACbL,GAAAA,EACA,CAACM,KAAKF,CAAAA,EAAGG,CAAAA,GAAAA;AACP,QAAA,MAAMrB,MAAMD,MAAAA,CAAOsB,CAAAA,CAAAA;QAEnB,IAAIpB,CAAAA,CAAEc,aAAa,CAACG,CAAAA,CAAAA,EAAI;AACtB,YAAA,IAAI,gBAAgBA,CAAAA,EAAG;AACrBjB,gBAAAA,CAAAA,CAAEqB,OAAO,CAACF,GAAAA,EAAKpB,GAAAA,EAAKa,UAAAA,CAAWK,EAAEK,UAAU,CAAA,CAAA;YAC7C,CAAA,MAAO;AACLtB,gBAAAA,CAAAA,CAAEqB,OAAO,CAACF,GAAAA,EAAKpB,GAAAA,EAAKa,UAAAA,CAAWK,CAAAA,CAAAA,CAAAA;AACjC,YAAA;AACF,QAAA,CAAA,MAAO,IAAIjB,CAAAA,CAAEe,OAAO,CAACE,CAAAA,CAAAA,EAAI;;YAEvBjB,CAAAA,CAAEqB,OAAO,CAACF,GAAAA,EAAKpB,GAAAA,EAAKkB,EAAED,GAAG,CAACC,CAAAA,CAAAA,GAAKL,UAAAA,CAAWK,CAAAA,CAAAA,CAAAA,CAAAA;QAC5C,CAAA,MAAO;YACLjB,CAAAA,CAAEqB,OAAO,CAACF,GAAAA,EAAKpB,GAAAA,EAAKkB,CAAAA,CAAAA;AACtB,QAAA;QAEA,OAAOE,GAAAA;AACT,IAAA,CAAA,EACA,EAAC,CAAA;AAEL,CAAA;;;;;"}
1
+ {"version":3,"file":"query-builders.js","sources":["../../../../../../../server/src/services/permission/permissions-manager/query-builders.ts"],"sourcesContent":["// TODO: migration\nimport _ from 'lodash';\nimport { rulesToQuery } from '@casl/ability/extra';\n\nconst operatorsMap = {\n $in: '$in',\n $nin: '$notIn',\n $exists: '$notNull',\n $gte: '$gte',\n $gt: '$gt',\n $lte: '$lte',\n $lt: '$lt',\n $eq: '$eq',\n $ne: '$ne',\n $and: '$and',\n $or: '$or',\n $not: '$not',\n} as const;\n\nconst mapKey = (key: keyof typeof operatorsMap) => {\n if (_.isString(key) && key.startsWith('$') && key in operatorsMap) {\n return operatorsMap[key];\n }\n return key;\n};\n\nconst buildCaslQuery = (ability: unknown, action: unknown, model: unknown) => {\n // @ts-expect-error casl types\n return rulesToQuery(ability, action, model, (o) => o.conditions);\n};\n\nconst buildStrapiQuery = (caslQuery: unknown) => {\n return unwrapDeep(caslQuery);\n};\n\nconst unwrapDeep = (obj: any): unknown => {\n if (!_.isPlainObject(obj) && !_.isArray(obj)) {\n return obj;\n }\n if (_.isArray(obj)) {\n return obj.map((v: unknown) => unwrapDeep(v));\n }\n\n return _.reduce(\n obj,\n (acc, v, k: any) => {\n const key = mapKey(k);\n\n if (_.isPlainObject(v)) {\n if ('$elemMatch' in v) {\n _.setWith(acc, key, unwrapDeep(v.$elemMatch));\n } else {\n _.setWith(acc, key, unwrapDeep(v));\n }\n } else if (_.isArray(v)) {\n // prettier-ignore\n _.setWith(acc, key, v.map(v => unwrapDeep(v)));\n } else {\n _.setWith(acc, key, v);\n }\n\n return acc;\n },\n {}\n );\n};\n\nexport { buildCaslQuery, buildStrapiQuery };\n"],"names":["operatorsMap","$in","$nin","$exists","$gte","$gt","$lte","$lt","$eq","$ne","$and","$or","$not","mapKey","key","_","isString","startsWith","buildCaslQuery","ability","action","model","rulesToQuery","o","conditions","buildStrapiQuery","caslQuery","unwrapDeep","obj","isPlainObject","isArray","map","v","reduce","acc","k","setWith","$elemMatch"],"mappings":";;;;;;;;;AAAA;AAIA,MAAMA,YAAAA,GAAe;IACnBC,GAAAA,EAAK,KAAA;IACLC,IAAAA,EAAM,QAAA;IACNC,OAAAA,EAAS,UAAA;IACTC,IAAAA,EAAM,MAAA;IACNC,GAAAA,EAAK,KAAA;IACLC,IAAAA,EAAM,MAAA;IACNC,GAAAA,EAAK,KAAA;IACLC,GAAAA,EAAK,KAAA;IACLC,GAAAA,EAAK,KAAA;IACLC,IAAAA,EAAM,MAAA;IACNC,GAAAA,EAAK,KAAA;IACLC,IAAAA,EAAM;AACR,CAAA;AAEA,MAAMC,SAAS,CAACC,GAAAA,GAAAA;IACd,IAAIC,kBAAAA,CAAEC,QAAQ,CAACF,GAAAA,CAAAA,IAAQA,IAAIG,UAAU,CAAC,GAAA,CAAA,IAAQH,GAAAA,IAAOd,YAAAA,EAAc;QACjE,OAAOA,YAAY,CAACc,GAAAA,CAAI;AAC1B,IAAA;IACA,OAAOA,GAAAA;AACT,CAAA;AAEA,MAAMI,cAAAA,GAAiB,CAACC,OAAAA,EAAkBC,MAAAA,EAAiBC,KAAAA,GAAAA;;AAEzD,IAAA,OAAOC,mBAAaH,OAAAA,EAASC,MAAAA,EAAQC,OAAO,CAACE,CAAAA,GAAMA,EAAEC,UAAU,CAAA;AACjE;AAEA,MAAMC,mBAAmB,CAACC,SAAAA,GAAAA;AACxB,IAAA,OAAOC,UAAAA,CAAWD,SAAAA,CAAAA;AACpB;AAEA,MAAMC,aAAa,CAACC,GAAAA,GAAAA;IAClB,IAAI,CAACb,mBAAEc,aAAa,CAACD,QAAQ,CAACb,kBAAAA,CAAEe,OAAO,CAACF,GAAAA,CAAAA,EAAM;QAC5C,OAAOA,GAAAA;AACT,IAAA;IACA,IAAIb,kBAAAA,CAAEe,OAAO,CAACF,GAAAA,CAAAA,EAAM;AAClB,QAAA,OAAOA,GAAAA,CAAIG,GAAG,CAAC,CAACC,IAAeL,UAAAA,CAAWK,CAAAA,CAAAA,CAAAA;AAC5C,IAAA;AAEA,IAAA,OAAOjB,mBAAEkB,MAAM,CACbL,GAAAA,EACA,CAACM,KAAKF,CAAAA,EAAGG,CAAAA,GAAAA;AACP,QAAA,MAAMrB,MAAMD,MAAAA,CAAOsB,CAAAA,CAAAA;QAEnB,IAAIpB,kBAAAA,CAAEc,aAAa,CAACG,CAAAA,CAAAA,EAAI;AACtB,YAAA,IAAI,gBAAgBA,CAAAA,EAAG;AACrBjB,gBAAAA,kBAAAA,CAAEqB,OAAO,CAACF,GAAAA,EAAKpB,GAAAA,EAAKa,UAAAA,CAAWK,EAAEK,UAAU,CAAA,CAAA;YAC7C,CAAA,MAAO;AACLtB,gBAAAA,kBAAAA,CAAEqB,OAAO,CAACF,GAAAA,EAAKpB,GAAAA,EAAKa,UAAAA,CAAWK,CAAAA,CAAAA,CAAAA;AACjC,YAAA;AACF,QAAA,CAAA,MAAO,IAAIjB,kBAAAA,CAAEe,OAAO,CAACE,CAAAA,CAAAA,EAAI;;YAEvBjB,kBAAAA,CAAEqB,OAAO,CAACF,GAAAA,EAAKpB,GAAAA,EAAKkB,EAAED,GAAG,CAACC,CAAAA,CAAAA,GAAKL,UAAAA,CAAWK,CAAAA,CAAAA,CAAAA,CAAAA;QAC5C,CAAA,MAAO;YACLjB,kBAAAA,CAAEqB,OAAO,CAACF,GAAAA,EAAKpB,GAAAA,EAAKkB,CAAAA,CAAAA;AACtB,QAAA;QAEA,OAAOE,GAAAA;AACT,IAAA,CAAA,EACA,EAAC,CAAA;AAEL,CAAA;;;;;"}
@@ -5,6 +5,10 @@ var pmap = require('p-map');
5
5
  var index = require('../../utils/index.js');
6
6
  var index$1 = require('../../domain/permission/index.js');
7
7
 
8
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
+
10
+ var pmap__default = /*#__PURE__*/_interopDefault(pmap);
11
+
8
12
  /**
9
13
  * Delete permissions of roles in database
10
14
  * @param rolesIds ids of roles
@@ -153,7 +157,7 @@ const filterPermissionsToRemove = async (permissions)=>{
153
157
  // Execute all the queries, update the database
154
158
  await Promise.all([
155
159
  deleteByIds(permissionsIdToRemove),
156
- pmap(permissionsNeedingToBeUpdated, updatePromiseProvider, {
160
+ pmap__default.default(permissionsNeedingToBeUpdated, updatePromiseProvider, {
157
161
  concurrency: 100,
158
162
  stopOnError: true
159
163
  })
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sources":["../../../../../../server/src/services/permission/queries.ts"],"sourcesContent":["import { isNil, isArray, prop, xor, eq, differenceWith } from 'lodash/fp';\nimport pmap from 'p-map';\nimport type { Data } from '@strapi/types';\nimport { getService } from '../../utils';\nimport permissionDomain, { CreatePermissionPayload } from '../../domain/permission';\nimport type { AdminUser, Permission } from '../../../../shared/contracts/shared';\nimport { Action } from '../../domain/action';\n\n/**\n * Delete permissions of roles in database\n * @param rolesIds ids of roles\n */\nexport const deleteByRolesIds = async (rolesIds: Data.ID[]): Promise<void> => {\n const permissionsToDelete = await strapi.db.query('admin::permission').findMany({\n select: ['id'],\n where: {\n role: { id: rolesIds },\n },\n });\n\n if (permissionsToDelete.length > 0) {\n await deleteByIds(permissionsToDelete.map(prop('id')));\n }\n};\n\n/**\n * Delete permissions\n * @param ids ids of permissions\n */\nexport const deleteByIds = async (ids: Data.ID[]): Promise<void> => {\n const result: unknown[] = [];\n for (const id of ids) {\n const queryResult = await strapi.db.query('admin::permission').delete({ where: { id } });\n result.push(queryResult);\n }\n strapi.eventHub.emit('permission.delete', { permissions: result });\n};\n\n/**\n * Create many permissions\n * @param permissions\n */\nexport const createMany = async (permissions: CreatePermissionPayload[]): Promise<Permission[]> => {\n const createdPermissions: CreatePermissionPayload[] = [];\n for (const permission of permissions) {\n const newPerm = await strapi.db.query('admin::permission').create({ data: permission });\n createdPermissions.push(newPerm);\n }\n\n const permissionsToReturn = permissionDomain.toPermission(createdPermissions);\n strapi.eventHub.emit('permission.create', { permissions: permissionsToReturn });\n\n return permissionsToReturn;\n};\n\n/**\n * Update a permission\n * @param params\n * @param attributes\n */\nconst update = async (params: unknown, attributes: Partial<Permission>) => {\n const updatedPermission = (await strapi.db\n .query('admin::permission')\n .update({ where: params, data: attributes })) as Permission;\n\n const permissionToReturn = permissionDomain.toPermission(updatedPermission);\n strapi.eventHub.emit('permission.update', { permissions: permissionToReturn });\n\n return permissionToReturn;\n};\n\n/**\n * Find assigned permissions in the database\n * @param params query params to find the permissions\n */\nexport const findMany = async (params = {}): Promise<Permission[]> => {\n const rawPermissions = await strapi.db.query('admin::permission').findMany(params);\n\n return permissionDomain.toPermission(rawPermissions);\n};\n\n/**\n * Find all permissions for a user\n * @param user - user\n */\nexport const findUserPermissions = async (user: AdminUser): Promise<Permission[]> => {\n return findMany({ where: { role: { users: { id: user.id } } } });\n};\n\nconst filterPermissionsToRemove = async (permissions: Permission[]) => {\n const { actionProvider } = getService('permission');\n\n const permissionsToRemove: Permission[] = [];\n\n for (const permission of permissions) {\n const { subjects, options = {} as Action['options'] } =\n (actionProvider.get(permission.action) as Action) || {};\n const { applyToProperties } = options;\n\n const invalidProperties = await Promise.all(\n (applyToProperties || []).map(async (property) => {\n const applies = await actionProvider.appliesToProperty(\n property,\n permission.action,\n permission.subject\n );\n\n return applies && isNil(permissionDomain.getProperty(property, permission));\n })\n );\n\n const isRegisteredAction = actionProvider.has(permission.action);\n const hasInvalidProperties = isArray(applyToProperties) && invalidProperties.every(eq(true));\n const isInvalidSubject = isArray(subjects) && !subjects.includes(permission.subject as string);\n\n // If the permission has an invalid action, an invalid subject or invalid properties, then add it to the toBeRemoved collection\n if (!isRegisteredAction || isInvalidSubject || hasInvalidProperties) {\n permissionsToRemove.push(permission);\n }\n }\n\n return permissionsToRemove;\n};\n\n/**\n * Removes permissions in database that don't exist anymore\n */\nexport const cleanPermissionsInDatabase = async (): Promise<void> => {\n const pageSize = 200;\n\n const contentTypeService = getService('content-type');\n\n const total = await strapi.db.query('admin::permission').count();\n const pageCount = Math.ceil(total / pageSize);\n\n for (let page = 0; page < pageCount; page += 1) {\n // 1. Find invalid permissions and collect their ID to delete them later\n const results = (await strapi.db.query('admin::permission').findMany({\n limit: pageSize,\n offset: page * pageSize,\n populate: ['role', 'apiToken'],\n })) as Permission[];\n\n const permissions = permissionDomain.toPermission(results);\n const permissionsToRemove = await filterPermissionsToRemove(permissions);\n\n // Also remove orphaned permissions (no role AND no apiToken)\n const orphanedPermissions = permissions.filter(\n (permission: any) => !permission.role && !permission.apiToken\n );\n\n const permissionsIdToRemove = Array.from(\n new Set([...permissionsToRemove, ...orphanedPermissions].map((p) => p.id))\n );\n\n // 2. Clean permissions' fields (add required ones, remove the non-existing ones)\n const remainingPermissions = permissions.filter(\n (permission: Permission) => !permissionsIdToRemove.includes(permission.id)\n );\n\n const permissionsWithCleanFields = contentTypeService.cleanPermissionFields(\n remainingPermissions\n ) as Permission[];\n\n // Update only the ones that need to be updated\n const permissionsNeedingToBeUpdated = differenceWith(\n (a: Permission, b: Permission) => {\n return a.id === b.id && xor(a.properties.fields, b.properties.fields).length === 0;\n },\n permissionsWithCleanFields,\n remainingPermissions\n );\n\n const updatePromiseProvider = (permission: Permission) => {\n return update({ id: permission.id }, permission);\n };\n\n // Execute all the queries, update the database\n await Promise.all([\n deleteByIds(permissionsIdToRemove),\n pmap(permissionsNeedingToBeUpdated, updatePromiseProvider, {\n concurrency: 100,\n stopOnError: true,\n }),\n ]);\n }\n};\n\nexport default {\n createMany,\n findMany,\n deleteByRolesIds,\n deleteByIds,\n findUserPermissions,\n cleanPermissionsInDatabase,\n};\n"],"names":["deleteByRolesIds","rolesIds","permissionsToDelete","strapi","db","query","findMany","select","where","role","id","length","deleteByIds","map","prop","ids","result","queryResult","delete","push","eventHub","emit","permissions","createMany","createdPermissions","permission","newPerm","create","data","permissionsToReturn","permissionDomain","toPermission","update","params","attributes","updatedPermission","permissionToReturn","rawPermissions","findUserPermissions","user","users","filterPermissionsToRemove","actionProvider","getService","permissionsToRemove","subjects","options","get","action","applyToProperties","invalidProperties","Promise","all","property","applies","appliesToProperty","subject","isNil","getProperty","isRegisteredAction","has","hasInvalidProperties","isArray","every","eq","isInvalidSubject","includes","cleanPermissionsInDatabase","pageSize","contentTypeService","total","count","pageCount","Math","ceil","page","results","limit","offset","populate","orphanedPermissions","filter","apiToken","permissionsIdToRemove","Array","from","Set","p","remainingPermissions","permissionsWithCleanFields","cleanPermissionFields","permissionsNeedingToBeUpdated","differenceWith","a","b","xor","properties","fields","updatePromiseProvider","pmap","concurrency","stopOnError"],"mappings":"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"}
1
+ {"version":3,"file":"queries.js","sources":["../../../../../../server/src/services/permission/queries.ts"],"sourcesContent":["import { isNil, isArray, prop, xor, eq, differenceWith } from 'lodash/fp';\nimport pmap from 'p-map';\nimport type { Data } from '@strapi/types';\nimport { getService } from '../../utils';\nimport permissionDomain, { CreatePermissionPayload } from '../../domain/permission';\nimport type { AdminUser, Permission } from '../../../../shared/contracts/shared';\nimport { Action } from '../../domain/action';\n\n/**\n * Delete permissions of roles in database\n * @param rolesIds ids of roles\n */\nexport const deleteByRolesIds = async (rolesIds: Data.ID[]): Promise<void> => {\n const permissionsToDelete = await strapi.db.query('admin::permission').findMany({\n select: ['id'],\n where: {\n role: { id: rolesIds },\n },\n });\n\n if (permissionsToDelete.length > 0) {\n await deleteByIds(permissionsToDelete.map(prop('id')));\n }\n};\n\n/**\n * Delete permissions\n * @param ids ids of permissions\n */\nexport const deleteByIds = async (ids: Data.ID[]): Promise<void> => {\n const result: unknown[] = [];\n for (const id of ids) {\n const queryResult = await strapi.db.query('admin::permission').delete({ where: { id } });\n result.push(queryResult);\n }\n strapi.eventHub.emit('permission.delete', { permissions: result });\n};\n\n/**\n * Create many permissions\n * @param permissions\n */\nexport const createMany = async (permissions: CreatePermissionPayload[]): Promise<Permission[]> => {\n const createdPermissions: CreatePermissionPayload[] = [];\n for (const permission of permissions) {\n const newPerm = await strapi.db.query('admin::permission').create({ data: permission });\n createdPermissions.push(newPerm);\n }\n\n const permissionsToReturn = permissionDomain.toPermission(createdPermissions);\n strapi.eventHub.emit('permission.create', { permissions: permissionsToReturn });\n\n return permissionsToReturn;\n};\n\n/**\n * Update a permission\n * @param params\n * @param attributes\n */\nconst update = async (params: unknown, attributes: Partial<Permission>) => {\n const updatedPermission = (await strapi.db\n .query('admin::permission')\n .update({ where: params, data: attributes })) as Permission;\n\n const permissionToReturn = permissionDomain.toPermission(updatedPermission);\n strapi.eventHub.emit('permission.update', { permissions: permissionToReturn });\n\n return permissionToReturn;\n};\n\n/**\n * Find assigned permissions in the database\n * @param params query params to find the permissions\n */\nexport const findMany = async (params = {}): Promise<Permission[]> => {\n const rawPermissions = await strapi.db.query('admin::permission').findMany(params);\n\n return permissionDomain.toPermission(rawPermissions);\n};\n\n/**\n * Find all permissions for a user\n * @param user - user\n */\nexport const findUserPermissions = async (user: AdminUser): Promise<Permission[]> => {\n return findMany({ where: { role: { users: { id: user.id } } } });\n};\n\nconst filterPermissionsToRemove = async (permissions: Permission[]) => {\n const { actionProvider } = getService('permission');\n\n const permissionsToRemove: Permission[] = [];\n\n for (const permission of permissions) {\n const { subjects, options = {} as Action['options'] } =\n (actionProvider.get(permission.action) as Action) || {};\n const { applyToProperties } = options;\n\n const invalidProperties = await Promise.all(\n (applyToProperties || []).map(async (property) => {\n const applies = await actionProvider.appliesToProperty(\n property,\n permission.action,\n permission.subject\n );\n\n return applies && isNil(permissionDomain.getProperty(property, permission));\n })\n );\n\n const isRegisteredAction = actionProvider.has(permission.action);\n const hasInvalidProperties = isArray(applyToProperties) && invalidProperties.every(eq(true));\n const isInvalidSubject = isArray(subjects) && !subjects.includes(permission.subject as string);\n\n // If the permission has an invalid action, an invalid subject or invalid properties, then add it to the toBeRemoved collection\n if (!isRegisteredAction || isInvalidSubject || hasInvalidProperties) {\n permissionsToRemove.push(permission);\n }\n }\n\n return permissionsToRemove;\n};\n\n/**\n * Removes permissions in database that don't exist anymore\n */\nexport const cleanPermissionsInDatabase = async (): Promise<void> => {\n const pageSize = 200;\n\n const contentTypeService = getService('content-type');\n\n const total = await strapi.db.query('admin::permission').count();\n const pageCount = Math.ceil(total / pageSize);\n\n for (let page = 0; page < pageCount; page += 1) {\n // 1. Find invalid permissions and collect their ID to delete them later\n const results = (await strapi.db.query('admin::permission').findMany({\n limit: pageSize,\n offset: page * pageSize,\n populate: ['role', 'apiToken'],\n })) as Permission[];\n\n const permissions = permissionDomain.toPermission(results);\n const permissionsToRemove = await filterPermissionsToRemove(permissions);\n\n // Also remove orphaned permissions (no role AND no apiToken)\n const orphanedPermissions = permissions.filter(\n (permission: any) => !permission.role && !permission.apiToken\n );\n\n const permissionsIdToRemove = Array.from(\n new Set([...permissionsToRemove, ...orphanedPermissions].map((p) => p.id))\n );\n\n // 2. Clean permissions' fields (add required ones, remove the non-existing ones)\n const remainingPermissions = permissions.filter(\n (permission: Permission) => !permissionsIdToRemove.includes(permission.id)\n );\n\n const permissionsWithCleanFields = contentTypeService.cleanPermissionFields(\n remainingPermissions\n ) as Permission[];\n\n // Update only the ones that need to be updated\n const permissionsNeedingToBeUpdated = differenceWith(\n (a: Permission, b: Permission) => {\n return a.id === b.id && xor(a.properties.fields, b.properties.fields).length === 0;\n },\n permissionsWithCleanFields,\n remainingPermissions\n );\n\n const updatePromiseProvider = (permission: Permission) => {\n return update({ id: permission.id }, permission);\n };\n\n // Execute all the queries, update the database\n await Promise.all([\n deleteByIds(permissionsIdToRemove),\n pmap(permissionsNeedingToBeUpdated, updatePromiseProvider, {\n concurrency: 100,\n stopOnError: true,\n }),\n ]);\n }\n};\n\nexport default {\n createMany,\n findMany,\n deleteByRolesIds,\n deleteByIds,\n findUserPermissions,\n cleanPermissionsInDatabase,\n};\n"],"names":["deleteByRolesIds","rolesIds","permissionsToDelete","strapi","db","query","findMany","select","where","role","id","length","deleteByIds","map","prop","ids","result","queryResult","delete","push","eventHub","emit","permissions","createMany","createdPermissions","permission","newPerm","create","data","permissionsToReturn","permissionDomain","toPermission","update","params","attributes","updatedPermission","permissionToReturn","rawPermissions","findUserPermissions","user","users","filterPermissionsToRemove","actionProvider","getService","permissionsToRemove","subjects","options","get","action","applyToProperties","invalidProperties","Promise","all","property","applies","appliesToProperty","subject","isNil","getProperty","isRegisteredAction","has","hasInvalidProperties","isArray","every","eq","isInvalidSubject","includes","cleanPermissionsInDatabase","pageSize","contentTypeService","total","count","pageCount","Math","ceil","page","results","limit","offset","populate","orphanedPermissions","filter","apiToken","permissionsIdToRemove","Array","from","Set","p","remainingPermissions","permissionsWithCleanFields","cleanPermissionFields","permissionsNeedingToBeUpdated","differenceWith","a","b","xor","properties","fields","updatePromiseProvider","pmap","concurrency","stopOnError"],"mappings":"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"}
@@ -3,6 +3,10 @@
3
3
  var fs = require('fs');
4
4
  var _ = require('lodash');
5
5
 
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var fs__default = /*#__PURE__*/_interopDefault(fs);
9
+
6
10
  const PROJECT_SETTINGS_FILE_INPUTS = [
7
11
  'menuLogo',
8
12
  'authLogo'
@@ -15,7 +19,7 @@ const parseFilesData = async (files)=>{
15
19
  if (!file) {
16
20
  return;
17
21
  }
18
- const getStream = ()=>fs.createReadStream(file.filepath);
22
+ const getStream = ()=>fs__default.default.createReadStream(file.filepath);
19
23
  // Add formated data for the upload provider
20
24
  formatedFilesData[inputName] = await strapi.plugin('upload').service('upload').formatFileInfo({
21
25
  filename: file.originalFilename,
@@ -72,7 +76,7 @@ const getProjectSettings = async ()=>{
72
76
  };
73
77
  const uploadFiles = async (files = {})=>{
74
78
  // Call the provider upload function for each file
75
- return Promise.all(Object.values(files).filter((file)=>file?.stream instanceof fs.ReadStream).map((file)=>strapi.plugin('upload').provider.uploadStream(file)));
79
+ return Promise.all(Object.values(files).filter((file)=>file?.stream instanceof fs__default.default.ReadStream).map((file)=>strapi.plugin('upload').provider.uploadStream(file)));
76
80
  };
77
81
  const deleteOldFiles = async ({ previousSettings, newSettings })=>{
78
82
  return Promise.all(PROJECT_SETTINGS_FILE_INPUTS.map(async (inputName)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"project-settings.js","sources":["../../../../../server/src/services/project-settings.ts"],"sourcesContent":["import fs from 'fs';\nimport { pick } from 'lodash';\nimport { GetProjectSettings, UpdateProjectSettings } from '../../../shared/contracts/admin';\n\nconst PROJECT_SETTINGS_FILE_INPUTS = ['menuLogo', 'authLogo'] as const;\n\ninterface UploadFile {\n name: string;\n path: string;\n type: string;\n size: number;\n stream: fs.ReadStream;\n tmpPath: string;\n hash: string;\n url: string;\n width: number;\n height: number;\n ext: string;\n provider: unknown;\n}\n\ntype FormattedFiles = Partial<\n Record<keyof UpdateProjectSettings.Request['files'], Partial<UploadFile>>\n>;\n\nconst parseFilesData = async (files: UpdateProjectSettings.Request['files']) => {\n const formatedFilesData: FormattedFiles = {};\n\n await Promise.all(\n PROJECT_SETTINGS_FILE_INPUTS.map(async (inputName) => {\n const file = files[inputName];\n\n // Skip empty file inputs\n if (!file) {\n return;\n }\n\n const getStream = () => fs.createReadStream(file.filepath);\n\n // Add formated data for the upload provider\n formatedFilesData[inputName] = await strapi\n .plugin('upload')\n .service('upload')\n .formatFileInfo({\n filename: file.originalFilename,\n type: file.mimetype,\n size: file.size,\n });\n\n // Add image dimensions\n Object.assign(\n formatedFilesData[inputName]!,\n await strapi.plugin('upload').service('image-manipulation').getDimensions({ getStream })\n );\n\n // Add file path, and stream\n Object.assign(formatedFilesData[inputName]!, {\n stream: getStream(),\n tmpPath: file.filepath,\n // TODO\n // @ts-expect-error define the correct return type\n provider: strapi.config.get('plugin::upload').provider,\n });\n })\n );\n\n return formatedFilesData;\n};\n\nconst getProjectSettings = async (): Promise<GetProjectSettings.Response> => {\n const store = strapi.store({ type: 'core', name: 'admin' });\n\n // Returns an object with file inputs names as key and null as value\n const defaultProjectSettings = PROJECT_SETTINGS_FILE_INPUTS.reduce((prev: any, cur: any) => {\n prev[cur] = null;\n return prev;\n }, {});\n\n const projectSettings = {\n ...defaultProjectSettings,\n // @ts-expect-error spread can be applied to return value\n ...(await store.get({ key: 'project-settings' })),\n };\n\n // Filter file input fields\n PROJECT_SETTINGS_FILE_INPUTS.forEach((inputName) => {\n if (!projectSettings[inputName]) {\n return;\n }\n\n projectSettings[inputName] = pick(projectSettings[inputName], [\n 'name',\n 'url',\n 'width',\n 'height',\n 'ext',\n 'size',\n ]);\n });\n\n return projectSettings;\n};\n\nconst uploadFiles = async (files: LogoFiles = {}) => {\n // Call the provider upload function for each file\n return Promise.all(\n Object.values(files)\n .filter((file) => file?.stream instanceof fs.ReadStream)\n .map((file) => strapi.plugin('upload').provider.uploadStream(file))\n );\n};\n\nconst deleteOldFiles = async ({ previousSettings, newSettings }: any) => {\n return Promise.all(\n PROJECT_SETTINGS_FILE_INPUTS.map(async (inputName) => {\n // Skip if the store doesn't contain project settings\n if (!previousSettings) {\n return;\n }\n\n // Skip if there was no previous file\n if (!previousSettings[inputName]) {\n return;\n }\n\n // Skip if the file was not changed\n if (\n newSettings[inputName] &&\n previousSettings[inputName].hash === newSettings[inputName].hash\n ) {\n return;\n }\n\n // Skip if the file was not uploaded with the current provider\n // TODO\n // @ts-expect-error define the correct return type\n if (strapi.config.get('plugin::upload').provider !== previousSettings[inputName].provider) {\n return;\n }\n\n // There was a previous file and an new file was uploaded\n // Remove the previous file\n strapi.plugin('upload').provider.delete(previousSettings[inputName]);\n })\n );\n};\n\ntype LogoFiles = { [K in keyof FormattedFiles]: FormattedFiles[K] | null };\n\nconst updateProjectSettings = async (\n newSettings: Omit<UpdateProjectSettings.Request['body'], 'menuLogo' | 'authLogo'> & LogoFiles\n) => {\n const store = strapi.store({ type: 'core', name: 'admin' });\n const previousSettings = (await store.get({ key: 'project-settings' })) as any;\n const files = pick(newSettings, PROJECT_SETTINGS_FILE_INPUTS);\n\n await uploadFiles(files);\n\n PROJECT_SETTINGS_FILE_INPUTS.forEach((inputName) => {\n // If the user input exists but is not a formdata \"file\" remove it\n if (newSettings[inputName] !== undefined && !(typeof newSettings[inputName] === 'object')) {\n newSettings[inputName] = null;\n return;\n }\n\n // If the user input is undefined reuse previous setting (do not update field)\n if (!newSettings[inputName] && previousSettings) {\n newSettings[inputName] = previousSettings[inputName];\n return;\n }\n\n // Update the file\n newSettings[inputName] = pick(newSettings[inputName], [\n 'name',\n 'hash',\n 'url',\n 'width',\n 'height',\n 'ext',\n 'size',\n 'provider',\n ]);\n });\n\n // No await to proceed asynchronously\n deleteOldFiles({ previousSettings, newSettings });\n\n await store.set({\n key: 'project-settings',\n value: { ...previousSettings, ...newSettings },\n });\n\n return getProjectSettings();\n};\n\nexport { deleteOldFiles, parseFilesData, getProjectSettings, updateProjectSettings };\n"],"names":["PROJECT_SETTINGS_FILE_INPUTS","parseFilesData","files","formatedFilesData","Promise","all","map","inputName","file","getStream","fs","createReadStream","filepath","strapi","plugin","service","formatFileInfo","filename","originalFilename","type","mimetype","size","Object","assign","getDimensions","stream","tmpPath","provider","config","get","getProjectSettings","store","name","defaultProjectSettings","reduce","prev","cur","projectSettings","key","forEach","pick","uploadFiles","values","filter","ReadStream","uploadStream","deleteOldFiles","previousSettings","newSettings","hash","delete","updateProjectSettings","undefined","set","value"],"mappings":"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"}
1
+ {"version":3,"file":"project-settings.js","sources":["../../../../../server/src/services/project-settings.ts"],"sourcesContent":["import fs from 'fs';\nimport { pick } from 'lodash';\nimport { GetProjectSettings, UpdateProjectSettings } from '../../../shared/contracts/admin';\n\nconst PROJECT_SETTINGS_FILE_INPUTS = ['menuLogo', 'authLogo'] as const;\n\ninterface UploadFile {\n name: string;\n path: string;\n type: string;\n size: number;\n stream: fs.ReadStream;\n tmpPath: string;\n hash: string;\n url: string;\n width: number;\n height: number;\n ext: string;\n provider: unknown;\n}\n\ntype FormattedFiles = Partial<\n Record<keyof UpdateProjectSettings.Request['files'], Partial<UploadFile>>\n>;\n\nconst parseFilesData = async (files: UpdateProjectSettings.Request['files']) => {\n const formatedFilesData: FormattedFiles = {};\n\n await Promise.all(\n PROJECT_SETTINGS_FILE_INPUTS.map(async (inputName) => {\n const file = files[inputName];\n\n // Skip empty file inputs\n if (!file) {\n return;\n }\n\n const getStream = () => fs.createReadStream(file.filepath);\n\n // Add formated data for the upload provider\n formatedFilesData[inputName] = await strapi\n .plugin('upload')\n .service('upload')\n .formatFileInfo({\n filename: file.originalFilename,\n type: file.mimetype,\n size: file.size,\n });\n\n // Add image dimensions\n Object.assign(\n formatedFilesData[inputName]!,\n await strapi.plugin('upload').service('image-manipulation').getDimensions({ getStream })\n );\n\n // Add file path, and stream\n Object.assign(formatedFilesData[inputName]!, {\n stream: getStream(),\n tmpPath: file.filepath,\n // TODO\n // @ts-expect-error define the correct return type\n provider: strapi.config.get('plugin::upload').provider,\n });\n })\n );\n\n return formatedFilesData;\n};\n\nconst getProjectSettings = async (): Promise<GetProjectSettings.Response> => {\n const store = strapi.store({ type: 'core', name: 'admin' });\n\n // Returns an object with file inputs names as key and null as value\n const defaultProjectSettings = PROJECT_SETTINGS_FILE_INPUTS.reduce((prev: any, cur: any) => {\n prev[cur] = null;\n return prev;\n }, {});\n\n const projectSettings = {\n ...defaultProjectSettings,\n // @ts-expect-error spread can be applied to return value\n ...(await store.get({ key: 'project-settings' })),\n };\n\n // Filter file input fields\n PROJECT_SETTINGS_FILE_INPUTS.forEach((inputName) => {\n if (!projectSettings[inputName]) {\n return;\n }\n\n projectSettings[inputName] = pick(projectSettings[inputName], [\n 'name',\n 'url',\n 'width',\n 'height',\n 'ext',\n 'size',\n ]);\n });\n\n return projectSettings;\n};\n\nconst uploadFiles = async (files: LogoFiles = {}) => {\n // Call the provider upload function for each file\n return Promise.all(\n Object.values(files)\n .filter((file) => file?.stream instanceof fs.ReadStream)\n .map((file) => strapi.plugin('upload').provider.uploadStream(file))\n );\n};\n\nconst deleteOldFiles = async ({ previousSettings, newSettings }: any) => {\n return Promise.all(\n PROJECT_SETTINGS_FILE_INPUTS.map(async (inputName) => {\n // Skip if the store doesn't contain project settings\n if (!previousSettings) {\n return;\n }\n\n // Skip if there was no previous file\n if (!previousSettings[inputName]) {\n return;\n }\n\n // Skip if the file was not changed\n if (\n newSettings[inputName] &&\n previousSettings[inputName].hash === newSettings[inputName].hash\n ) {\n return;\n }\n\n // Skip if the file was not uploaded with the current provider\n // TODO\n // @ts-expect-error define the correct return type\n if (strapi.config.get('plugin::upload').provider !== previousSettings[inputName].provider) {\n return;\n }\n\n // There was a previous file and an new file was uploaded\n // Remove the previous file\n strapi.plugin('upload').provider.delete(previousSettings[inputName]);\n })\n );\n};\n\ntype LogoFiles = { [K in keyof FormattedFiles]: FormattedFiles[K] | null };\n\nconst updateProjectSettings = async (\n newSettings: Omit<UpdateProjectSettings.Request['body'], 'menuLogo' | 'authLogo'> & LogoFiles\n) => {\n const store = strapi.store({ type: 'core', name: 'admin' });\n const previousSettings = (await store.get({ key: 'project-settings' })) as any;\n const files = pick(newSettings, PROJECT_SETTINGS_FILE_INPUTS);\n\n await uploadFiles(files);\n\n PROJECT_SETTINGS_FILE_INPUTS.forEach((inputName) => {\n // If the user input exists but is not a formdata \"file\" remove it\n if (newSettings[inputName] !== undefined && !(typeof newSettings[inputName] === 'object')) {\n newSettings[inputName] = null;\n return;\n }\n\n // If the user input is undefined reuse previous setting (do not update field)\n if (!newSettings[inputName] && previousSettings) {\n newSettings[inputName] = previousSettings[inputName];\n return;\n }\n\n // Update the file\n newSettings[inputName] = pick(newSettings[inputName], [\n 'name',\n 'hash',\n 'url',\n 'width',\n 'height',\n 'ext',\n 'size',\n 'provider',\n ]);\n });\n\n // No await to proceed asynchronously\n deleteOldFiles({ previousSettings, newSettings });\n\n await store.set({\n key: 'project-settings',\n value: { ...previousSettings, ...newSettings },\n });\n\n return getProjectSettings();\n};\n\nexport { deleteOldFiles, parseFilesData, getProjectSettings, updateProjectSettings };\n"],"names":["PROJECT_SETTINGS_FILE_INPUTS","parseFilesData","files","formatedFilesData","Promise","all","map","inputName","file","getStream","fs","createReadStream","filepath","strapi","plugin","service","formatFileInfo","filename","originalFilename","type","mimetype","size","Object","assign","getDimensions","stream","tmpPath","provider","config","get","getProjectSettings","store","name","defaultProjectSettings","reduce","prev","cur","projectSettings","key","forEach","pick","uploadFiles","values","filter","ReadStream","uploadStream","deleteOldFiles","previousSettings","newSettings","hash","delete","updateProjectSettings","undefined","set","value"],"mappings":"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"}
@@ -8,6 +8,10 @@ var permission = require('../validation/permission.js');
8
8
  var constants$1 = require('./constants.js');
9
9
  var index = require('../utils/index.js');
10
10
 
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ var ___default = /*#__PURE__*/_interopDefault(_);
14
+
11
15
  /* eslint-disable @typescript-eslint/no-explicit-any */ // TODO: TS - Use database parameters interface when they are ready
12
16
  const { SUPER_ADMIN_CODE, CONTENT_TYPE_SECTION } = constants$1;
13
17
  const { createAsyncSeriesWaterfallHook } = utils.hooks;
@@ -50,7 +54,7 @@ const jsonClean = (data)=>JSON.parse(JSON.stringify(data));
50
54
  if (alreadyExists) {
51
55
  throw new ApplicationError(`The name must be unique and a role with name \`${attributes.name}\` already exists.`);
52
56
  }
53
- const autoGeneratedCode = `${_.kebabCase(attributes.name)}-${utils.dates.timestampCode()}`;
57
+ const autoGeneratedCode = `${___default.default.kebabCase(attributes.name)}-${utils.dates.timestampCode()}`;
54
58
  const rolesWithCode = {
55
59
  ...attributes,
56
60
  code: attributes.code || autoGeneratedCode
@@ -111,10 +115,10 @@ const jsonClean = (data)=>JSON.parse(JSON.stringify(data));
111
115
  * @param params query params to find the role to update
112
116
  * @param attributes A partial role object
113
117
  */ const update = async (params, attributes)=>{
114
- const sanitizedAttributes = _.omit(attributes, [
118
+ const sanitizedAttributes = ___default.default.omit(attributes, [
115
119
  'code'
116
120
  ]);
117
- if (_.has(params, 'id') && _.has(sanitizedAttributes, 'name')) {
121
+ if (___default.default.has(params, 'id') && ___default.default.has(sanitizedAttributes, 'name')) {
118
122
  const alreadyExists = await exists({
119
123
  name: sanitizedAttributes.name,
120
124
  id: {
@@ -380,7 +384,7 @@ const isContentTypeAction = (action)=>action.section === CONTENT_TYPE_SECTION;
380
384
  /**
381
385
  * Check if a user object includes the super admin role
382
386
  */ const hasSuperAdminRole = (user)=>{
383
- const roles = _.get(user, 'roles', []);
387
+ const roles = ___default.default.get(user, 'roles', []);
384
388
  return roles.map(fp.prop('code')).includes(SUPER_ADMIN_CODE);
385
389
  };
386
390
  const constants = {