@strapi/admin 5.56.0 → 5.58.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 (465) hide show
  1. package/dist/admin/admin/src/components/Filters.js +1 -1
  2. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  3. package/dist/admin/admin/src/components/Filters.mjs +1 -1
  4. package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/FormInputs/Boolean.js +3 -2
  6. package/dist/admin/admin/src/components/FormInputs/Boolean.js.map +1 -1
  7. package/dist/admin/admin/src/components/FormInputs/Boolean.mjs +3 -2
  8. package/dist/admin/admin/src/components/FormInputs/Boolean.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/FormInputs/Enumeration.js +2 -2
  10. package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
  11. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -2
  12. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/MediaLibraryBanner.js +38 -2
  14. package/dist/admin/admin/src/components/MediaLibraryBanner.js.map +1 -1
  15. package/dist/admin/admin/src/components/MediaLibraryBanner.mjs +18 -2
  16. package/dist/admin/admin/src/components/MediaLibraryBanner.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/RelativeTime.js +9 -0
  18. package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
  19. package/dist/admin/admin/src/components/RelativeTime.mjs +10 -1
  20. package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/TopBanners.js +52 -0
  22. package/dist/admin/admin/src/components/TopBanners.js.map +1 -0
  23. package/dist/admin/admin/src/components/TopBanners.mjs +30 -0
  24. package/dist/admin/admin/src/components/TopBanners.mjs.map +1 -0
  25. package/dist/admin/admin/src/constants.js +14 -0
  26. package/dist/admin/admin/src/constants.js.map +1 -1
  27. package/dist/admin/admin/src/constants.mjs +14 -0
  28. package/dist/admin/admin/src/constants.mjs.map +1 -1
  29. package/dist/admin/admin/src/features/Tracking.js +28 -8
  30. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  31. package/dist/admin/admin/src/features/Tracking.mjs +29 -10
  32. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  33. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +4 -20
  34. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  35. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +4 -20
  36. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  37. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js +59 -0
  38. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js.map +1 -0
  39. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs +37 -0
  40. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs.map +1 -0
  41. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js +6 -12
  42. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
  43. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs +6 -12
  44. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs.map +1 -1
  45. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +10 -2
  46. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  47. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +10 -2
  48. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  49. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +6 -56
  50. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  51. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +6 -56
  52. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  53. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js +217 -0
  54. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js.map +1 -0
  55. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs +195 -0
  56. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs.map +1 -0
  57. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js +185 -0
  58. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js.map +1 -0
  59. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs +162 -0
  60. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs.map +1 -0
  61. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js +342 -0
  62. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js.map +1 -0
  63. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs +320 -0
  64. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs.map +1 -0
  65. package/dist/admin/admin/src/services/admin.js +11 -1
  66. package/dist/admin/admin/src/services/admin.js.map +1 -1
  67. package/dist/admin/admin/src/services/admin.mjs +11 -2
  68. package/dist/admin/admin/src/services/admin.mjs.map +1 -1
  69. package/dist/admin/admin/src/translations/en.json.js +76 -4
  70. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  71. package/dist/admin/admin/src/translations/en.json.mjs +76 -4
  72. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  73. package/dist/admin/admin/src/utils/browserStrapi.js +1 -1
  74. package/dist/admin/admin/src/utils/browserStrapi.js.map +1 -1
  75. package/dist/admin/admin/src/utils/browserStrapi.mjs +1 -1
  76. package/dist/admin/admin/src/utils/browserStrapi.mjs.map +1 -1
  77. package/dist/admin/admin/src/utils/getFetchClient.js +27 -3
  78. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  79. package/dist/admin/admin/src/utils/getFetchClient.mjs +26 -3
  80. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  81. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +52 -22
  82. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
  83. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +53 -23
  84. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
  85. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js +16 -29
  86. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js.map +1 -1
  87. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs +18 -31
  88. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs.map +1 -1
  89. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js +473 -0
  90. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js.map +1 -0
  91. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs +471 -0
  92. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs.map +1 -0
  93. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +8 -1
  94. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
  95. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +8 -1
  96. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
  97. package/dist/admin/index.js +1 -0
  98. package/dist/admin/index.js.map +1 -1
  99. package/dist/admin/index.mjs +1 -1
  100. package/dist/admin/shared/utils/get-project-type.js +49 -0
  101. package/dist/admin/shared/utils/get-project-type.js.map +1 -0
  102. package/dist/admin/shared/utils/get-project-type.mjs +46 -0
  103. package/dist/admin/shared/utils/get-project-type.mjs.map +1 -0
  104. package/dist/admin/src/components/MediaLibraryBanner.d.ts +10 -1
  105. package/dist/admin/src/components/TopBanners.d.ts +8 -0
  106. package/dist/admin/src/constants.d.ts +10 -0
  107. package/dist/admin/src/features/Tracking.d.ts +12 -1
  108. package/dist/admin/src/layouts/useAuthenticatedAccessTracking.d.ts +6 -0
  109. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.d.ts +1 -1
  110. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.d.ts +12 -0
  111. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.d.ts +14 -0
  112. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.d.ts +2 -0
  113. package/dist/admin/src/services/admin.d.ts +2 -2
  114. package/dist/admin/src/types/permissions.d.ts +1 -0
  115. package/dist/admin/src/utils/getFetchClient.d.ts +25 -0
  116. package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +29 -0
  117. package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.d.ts +6 -1
  118. package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.d.ts +2 -0
  119. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +7 -0
  120. package/dist/ee/server/src/audit-logs/entitlements.d.ts +8 -0
  121. package/dist/ee/server/src/audit-logs/entitlements.d.ts.map +1 -0
  122. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +16 -0
  123. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
  124. package/dist/ee/server/src/controllers/admin.d.ts +36 -10
  125. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  126. package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -1
  127. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts +8 -2
  128. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts.map +1 -1
  129. package/dist/ee/server/src/controllers/authentication.d.ts.map +1 -1
  130. package/dist/ee/server/src/controllers/index.d.ts +36 -10
  131. package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
  132. package/dist/ee/server/src/controllers/user.d.ts.map +1 -1
  133. package/dist/ee/server/src/index.d.ts +40 -11
  134. package/dist/ee/server/src/index.d.ts.map +1 -1
  135. package/dist/ee/server/src/services/index.d.ts +4 -1
  136. package/dist/ee/server/src/services/index.d.ts.map +1 -1
  137. package/dist/ee/server/src/services/metrics.d.ts.map +1 -1
  138. package/dist/ee/server/src/services/persist-tables.d.ts.map +1 -1
  139. package/dist/ee/server/src/services/seat-enforcement.d.ts +3 -1
  140. package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -1
  141. package/dist/server/ee/server/src/audit-logs/entitlements.js +25 -0
  142. package/dist/server/ee/server/src/audit-logs/entitlements.js.map +1 -0
  143. package/dist/server/ee/server/src/audit-logs/entitlements.mjs +23 -0
  144. package/dist/server/ee/server/src/audit-logs/entitlements.mjs.map +1 -0
  145. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +20 -8
  146. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
  147. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +19 -9
  148. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
  149. package/dist/server/ee/server/src/controllers/admin.js +79 -7
  150. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  151. package/dist/server/ee/server/src/controllers/admin.mjs +79 -7
  152. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  153. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +28 -10
  154. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
  155. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs +28 -10
  156. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs.map +1 -1
  157. package/dist/server/ee/server/src/controllers/authentication-utils/utils.js +2 -2
  158. package/dist/server/ee/server/src/controllers/authentication-utils/utils.js.map +1 -1
  159. package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs +2 -2
  160. package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs.map +1 -1
  161. package/dist/server/ee/server/src/controllers/authentication.js +11 -11
  162. package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
  163. package/dist/server/ee/server/src/controllers/authentication.mjs +11 -11
  164. package/dist/server/ee/server/src/controllers/authentication.mjs.map +1 -1
  165. package/dist/server/ee/server/src/controllers/user.js +7 -8
  166. package/dist/server/ee/server/src/controllers/user.js.map +1 -1
  167. package/dist/server/ee/server/src/controllers/user.mjs +8 -9
  168. package/dist/server/ee/server/src/controllers/user.mjs.map +1 -1
  169. package/dist/server/ee/server/src/index.js +2 -0
  170. package/dist/server/ee/server/src/index.js.map +1 -1
  171. package/dist/server/ee/server/src/index.mjs +2 -0
  172. package/dist/server/ee/server/src/index.mjs.map +1 -1
  173. package/dist/server/ee/server/src/services/metrics.js +9 -7
  174. package/dist/server/ee/server/src/services/metrics.js.map +1 -1
  175. package/dist/server/ee/server/src/services/metrics.mjs +9 -7
  176. package/dist/server/ee/server/src/services/metrics.mjs.map +1 -1
  177. package/dist/server/ee/server/src/services/persist-tables.js +3 -4
  178. package/dist/server/ee/server/src/services/persist-tables.js.map +1 -1
  179. package/dist/server/ee/server/src/services/persist-tables.mjs +3 -4
  180. package/dist/server/ee/server/src/services/persist-tables.mjs.map +1 -1
  181. package/dist/server/ee/server/src/services/role.js +2 -2
  182. package/dist/server/ee/server/src/services/role.js.map +1 -1
  183. package/dist/server/ee/server/src/services/role.mjs +1 -1
  184. package/dist/server/ee/server/src/services/role.mjs.map +1 -1
  185. package/dist/server/ee/server/src/services/seat-enforcement.js +20 -20
  186. package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
  187. package/dist/server/ee/server/src/services/seat-enforcement.mjs +20 -20
  188. package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
  189. package/dist/server/ee/server/src/services/user.js +1 -2
  190. package/dist/server/ee/server/src/services/user.js.map +1 -1
  191. package/dist/server/ee/server/src/services/user.mjs +2 -3
  192. package/dist/server/ee/server/src/services/user.mjs.map +1 -1
  193. package/dist/server/ee/server/src/utils/sso-lock.js +2 -2
  194. package/dist/server/ee/server/src/utils/sso-lock.js.map +1 -1
  195. package/dist/server/ee/server/src/utils/sso-lock.mjs +1 -1
  196. package/dist/server/ee/server/src/utils/sso-lock.mjs.map +1 -1
  197. package/dist/server/server/src/audit-logs/admin-users.js +3 -3
  198. package/dist/server/server/src/audit-logs/admin-users.js.map +1 -1
  199. package/dist/server/server/src/audit-logs/admin-users.mjs +2 -2
  200. package/dist/server/server/src/audit-logs/admin-users.mjs.map +1 -1
  201. package/dist/server/server/src/audit-logs/auth.js +72 -0
  202. package/dist/server/server/src/audit-logs/auth.js.map +1 -0
  203. package/dist/server/server/src/audit-logs/auth.mjs +67 -0
  204. package/dist/server/server/src/audit-logs/auth.mjs.map +1 -0
  205. package/dist/server/server/src/audit-logs/tokens.js +3 -3
  206. package/dist/server/server/src/audit-logs/tokens.js.map +1 -1
  207. package/dist/server/server/src/audit-logs/tokens.mjs +2 -2
  208. package/dist/server/server/src/audit-logs/tokens.mjs.map +1 -1
  209. package/dist/server/server/src/audit-logs/webhooks.js +2 -2
  210. package/dist/server/server/src/audit-logs/webhooks.js.map +1 -1
  211. package/dist/server/server/src/audit-logs/webhooks.mjs +1 -1
  212. package/dist/server/server/src/audit-logs/webhooks.mjs.map +1 -1
  213. package/dist/server/server/src/bootstrap.js +6 -4
  214. package/dist/server/server/src/bootstrap.js.map +1 -1
  215. package/dist/server/server/src/bootstrap.mjs +6 -4
  216. package/dist/server/server/src/bootstrap.mjs.map +1 -1
  217. package/dist/server/server/src/config/admin-actions.js +7 -0
  218. package/dist/server/server/src/config/admin-actions.js.map +1 -1
  219. package/dist/server/server/src/config/admin-actions.mjs +7 -0
  220. package/dist/server/server/src/config/admin-actions.mjs.map +1 -1
  221. package/dist/server/server/src/controllers/admin-token.js +8 -8
  222. package/dist/server/server/src/controllers/admin-token.js.map +1 -1
  223. package/dist/server/server/src/controllers/admin-token.mjs +4 -4
  224. package/dist/server/server/src/controllers/admin-token.mjs.map +1 -1
  225. package/dist/server/server/src/controllers/admin.js +9 -5
  226. package/dist/server/server/src/controllers/admin.js.map +1 -1
  227. package/dist/server/server/src/controllers/admin.mjs +8 -4
  228. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  229. package/dist/server/server/src/controllers/api-token.js +8 -8
  230. package/dist/server/server/src/controllers/api-token.js.map +1 -1
  231. package/dist/server/server/src/controllers/api-token.mjs +4 -4
  232. package/dist/server/server/src/controllers/api-token.mjs.map +1 -1
  233. package/dist/server/server/src/controllers/authentication.js +34 -8
  234. package/dist/server/server/src/controllers/authentication.js.map +1 -1
  235. package/dist/server/server/src/controllers/authentication.mjs +34 -8
  236. package/dist/server/server/src/controllers/authentication.mjs.map +1 -1
  237. package/dist/server/server/src/controllers/formatters/conditions.js +2 -2
  238. package/dist/server/server/src/controllers/formatters/conditions.js.map +1 -1
  239. package/dist/server/server/src/controllers/formatters/conditions.mjs +2 -2
  240. package/dist/server/server/src/controllers/formatters/conditions.mjs.map +1 -1
  241. package/dist/server/server/src/controllers/transfer/index.js +2 -2
  242. package/dist/server/server/src/controllers/transfer/index.js.map +1 -1
  243. package/dist/server/server/src/controllers/transfer/index.mjs +2 -2
  244. package/dist/server/server/src/controllers/transfer/index.mjs.map +1 -1
  245. package/dist/server/server/src/controllers/transfer/token.js +8 -8
  246. package/dist/server/server/src/controllers/transfer/token.js.map +1 -1
  247. package/dist/server/server/src/controllers/transfer/token.mjs +4 -4
  248. package/dist/server/server/src/controllers/transfer/token.mjs.map +1 -1
  249. package/dist/server/server/src/domain/action/index.js +18 -16
  250. package/dist/server/server/src/domain/action/index.js.map +1 -1
  251. package/dist/server/server/src/domain/action/index.mjs +16 -14
  252. package/dist/server/server/src/domain/action/index.mjs.map +1 -1
  253. package/dist/server/server/src/domain/action/provider.mjs +4 -4
  254. package/dist/server/server/src/domain/action/provider.mjs.map +1 -1
  255. package/dist/server/server/src/domain/condition/index.js +7 -4
  256. package/dist/server/server/src/domain/condition/index.js.map +1 -1
  257. package/dist/server/server/src/domain/condition/index.mjs +7 -4
  258. package/dist/server/server/src/domain/condition/index.mjs.map +1 -1
  259. package/dist/server/server/src/domain/permission/index.js +24 -15
  260. package/dist/server/server/src/domain/permission/index.js.map +1 -1
  261. package/dist/server/server/src/domain/permission/index.mjs +21 -12
  262. package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
  263. package/dist/server/server/src/middlewares/rateLimit.js +5 -5
  264. package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
  265. package/dist/server/server/src/middlewares/rateLimit.mjs +4 -4
  266. package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
  267. package/dist/server/server/src/register.js +10 -0
  268. package/dist/server/server/src/register.js.map +1 -1
  269. package/dist/server/server/src/register.mjs +10 -0
  270. package/dist/server/server/src/register.mjs.map +1 -1
  271. package/dist/server/server/src/routes/admin.js +18 -0
  272. package/dist/server/server/src/routes/admin.js.map +1 -1
  273. package/dist/server/server/src/routes/admin.mjs +18 -0
  274. package/dist/server/server/src/routes/admin.mjs.map +1 -1
  275. package/dist/server/server/src/services/action.js +1 -2
  276. package/dist/server/server/src/services/action.js.map +1 -1
  277. package/dist/server/server/src/services/action.mjs +1 -2
  278. package/dist/server/server/src/services/action.mjs.map +1 -1
  279. package/dist/server/server/src/services/api-token.js +61 -49
  280. package/dist/server/server/src/services/api-token.js.map +1 -1
  281. package/dist/server/server/src/services/api-token.mjs +53 -41
  282. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  283. package/dist/server/server/src/services/auth.js +4 -2
  284. package/dist/server/server/src/services/auth.js.map +1 -1
  285. package/dist/server/server/src/services/auth.mjs +4 -3
  286. package/dist/server/server/src/services/auth.mjs.map +1 -1
  287. package/dist/server/server/src/services/condition.js +2 -2
  288. package/dist/server/server/src/services/condition.js.map +1 -1
  289. package/dist/server/server/src/services/condition.mjs +1 -1
  290. package/dist/server/server/src/services/condition.mjs.map +1 -1
  291. package/dist/server/server/src/services/content-type.js +5 -4
  292. package/dist/server/server/src/services/content-type.js.map +1 -1
  293. package/dist/server/server/src/services/content-type.mjs +8 -7
  294. package/dist/server/server/src/services/content-type.mjs.map +1 -1
  295. package/dist/server/server/src/services/debug-dump.js +173 -0
  296. package/dist/server/server/src/services/debug-dump.js.map +1 -0
  297. package/dist/server/server/src/services/debug-dump.mjs +166 -0
  298. package/dist/server/server/src/services/debug-dump.mjs.map +1 -0
  299. package/dist/server/server/src/services/homepage.js +2 -1
  300. package/dist/server/server/src/services/homepage.js.map +1 -1
  301. package/dist/server/server/src/services/homepage.mjs +2 -1
  302. package/dist/server/server/src/services/homepage.mjs.map +1 -1
  303. package/dist/server/server/src/services/index.js +3 -1
  304. package/dist/server/server/src/services/index.js.map +1 -1
  305. package/dist/server/server/src/services/index.mjs +3 -1
  306. package/dist/server/server/src/services/index.mjs.map +1 -1
  307. package/dist/server/server/src/services/passport/local-strategy.js +2 -2
  308. package/dist/server/server/src/services/passport/local-strategy.js.map +1 -1
  309. package/dist/server/server/src/services/passport/local-strategy.mjs +1 -1
  310. package/dist/server/server/src/services/passport/local-strategy.mjs.map +1 -1
  311. package/dist/server/server/src/services/passport.js +1 -2
  312. package/dist/server/server/src/services/passport.js.map +1 -1
  313. package/dist/server/server/src/services/passport.mjs +1 -2
  314. package/dist/server/server/src/services/passport.mjs.map +1 -1
  315. package/dist/server/server/src/services/permission/engine.js +4 -4
  316. package/dist/server/server/src/services/permission/engine.js.map +1 -1
  317. package/dist/server/server/src/services/permission/engine.mjs +2 -2
  318. package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
  319. package/dist/server/server/src/services/permission/permissions-manager/index.js +2 -3
  320. package/dist/server/server/src/services/permission/permissions-manager/index.js.map +1 -1
  321. package/dist/server/server/src/services/permission/permissions-manager/index.mjs +1 -2
  322. package/dist/server/server/src/services/permission/permissions-manager/index.mjs.map +1 -1
  323. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js +6 -6
  324. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js.map +1 -1
  325. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs +4 -4
  326. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs.map +1 -1
  327. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js +47 -41
  328. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
  329. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs +44 -38
  330. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
  331. package/dist/server/server/src/services/permission/permissions-manager/validate.js +30 -26
  332. package/dist/server/server/src/services/permission/permissions-manager/validate.js.map +1 -1
  333. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs +28 -24
  334. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs.map +1 -1
  335. package/dist/server/server/src/services/permission/queries.js +9 -9
  336. package/dist/server/server/src/services/permission/queries.js.map +1 -1
  337. package/dist/server/server/src/services/permission/queries.mjs +9 -9
  338. package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
  339. package/dist/server/server/src/services/permission/rename-fields.js +118 -0
  340. package/dist/server/server/src/services/permission/rename-fields.js.map +1 -0
  341. package/dist/server/server/src/services/permission/rename-fields.mjs +116 -0
  342. package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -0
  343. package/dist/server/server/src/services/permission/sections-builder/index.js +2 -2
  344. package/dist/server/server/src/services/permission/sections-builder/index.js.map +1 -1
  345. package/dist/server/server/src/services/permission/sections-builder/index.mjs +2 -2
  346. package/dist/server/server/src/services/permission/sections-builder/index.mjs.map +1 -1
  347. package/dist/server/server/src/services/permission/sections-builder/section.js +1 -2
  348. package/dist/server/server/src/services/permission/sections-builder/section.js.map +1 -1
  349. package/dist/server/server/src/services/permission/sections-builder/section.mjs +1 -2
  350. package/dist/server/server/src/services/permission/sections-builder/section.mjs.map +1 -1
  351. package/dist/server/server/src/services/permission/sections-builder/utils.js +6 -6
  352. package/dist/server/server/src/services/permission/sections-builder/utils.js.map +1 -1
  353. package/dist/server/server/src/services/permission/sections-builder/utils.mjs +4 -4
  354. package/dist/server/server/src/services/permission/sections-builder/utils.mjs.map +1 -1
  355. package/dist/server/server/src/services/role.js +20 -19
  356. package/dist/server/server/src/services/role.js.map +1 -1
  357. package/dist/server/server/src/services/role.mjs +20 -19
  358. package/dist/server/server/src/services/role.mjs.map +1 -1
  359. package/dist/server/server/src/services/transfer/token.js +20 -16
  360. package/dist/server/server/src/services/transfer/token.js.map +1 -1
  361. package/dist/server/server/src/services/transfer/token.mjs +14 -10
  362. package/dist/server/server/src/services/transfer/token.mjs.map +1 -1
  363. package/dist/server/server/src/services/user.js +2 -3
  364. package/dist/server/server/src/services/user.js.map +1 -1
  365. package/dist/server/server/src/services/user.mjs +3 -4
  366. package/dist/server/server/src/services/user.mjs.map +1 -1
  367. package/dist/server/server/src/strategies/api-token-utils.js +2 -3
  368. package/dist/server/server/src/strategies/api-token-utils.js.map +1 -1
  369. package/dist/server/server/src/strategies/api-token-utils.mjs +2 -3
  370. package/dist/server/server/src/strategies/api-token-utils.mjs.map +1 -1
  371. package/dist/server/server/src/strategies/content-api-token.js +3 -3
  372. package/dist/server/server/src/strategies/content-api-token.js.map +1 -1
  373. package/dist/server/server/src/strategies/content-api-token.mjs +1 -1
  374. package/dist/server/server/src/strategies/content-api-token.mjs.map +1 -1
  375. package/dist/server/server/src/strategies/data-transfer.js +4 -4
  376. package/dist/server/server/src/strategies/data-transfer.js.map +1 -1
  377. package/dist/server/server/src/strategies/data-transfer.mjs +3 -3
  378. package/dist/server/server/src/strategies/data-transfer.mjs.map +1 -1
  379. package/dist/server/server/src/utils/debug-dump/redact.js +197 -0
  380. package/dist/server/server/src/utils/debug-dump/redact.js.map +1 -0
  381. package/dist/server/server/src/utils/debug-dump/redact.mjs +194 -0
  382. package/dist/server/server/src/utils/debug-dump/redact.mjs.map +1 -0
  383. package/dist/server/server/src/validation/common-validators.js +9 -10
  384. package/dist/server/server/src/validation/common-validators.js.map +1 -1
  385. package/dist/server/server/src/validation/common-validators.mjs +13 -14
  386. package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
  387. package/dist/server/server/src/validation/user.js +1 -2
  388. package/dist/server/server/src/validation/user.js.map +1 -1
  389. package/dist/server/server/src/validation/user.mjs +1 -2
  390. package/dist/server/server/src/validation/user.mjs.map +1 -1
  391. package/dist/server/shared/utils/get-project-type.js +49 -0
  392. package/dist/server/shared/utils/get-project-type.js.map +1 -0
  393. package/dist/server/shared/utils/get-project-type.mjs +46 -0
  394. package/dist/server/shared/utils/get-project-type.mjs.map +1 -0
  395. package/dist/server/src/audit-logs/auth.d.ts +72 -0
  396. package/dist/server/src/audit-logs/auth.d.ts.map +1 -0
  397. package/dist/server/src/audit-logs/tokens.d.ts.map +1 -1
  398. package/dist/server/src/bootstrap.d.ts.map +1 -1
  399. package/dist/server/src/config/admin-actions.d.ts.map +1 -1
  400. package/dist/server/src/controllers/admin-token.d.ts.map +1 -1
  401. package/dist/server/src/controllers/admin.d.ts +3 -0
  402. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  403. package/dist/server/src/controllers/api-token.d.ts.map +1 -1
  404. package/dist/server/src/controllers/authentication.d.ts.map +1 -1
  405. package/dist/server/src/controllers/formatters/conditions.d.ts +1 -1
  406. package/dist/server/src/controllers/formatters/conditions.d.ts.map +1 -1
  407. package/dist/server/src/controllers/homepage.d.ts +1 -1
  408. package/dist/server/src/controllers/index.d.ts +4 -1
  409. package/dist/server/src/controllers/index.d.ts.map +1 -1
  410. package/dist/server/src/controllers/transfer/index.d.ts.map +1 -1
  411. package/dist/server/src/controllers/transfer/token.d.ts.map +1 -1
  412. package/dist/server/src/domain/action/index.d.ts +1 -0
  413. package/dist/server/src/domain/action/index.d.ts.map +1 -1
  414. package/dist/server/src/domain/condition/index.d.ts +2 -2
  415. package/dist/server/src/domain/condition/index.d.ts.map +1 -1
  416. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  417. package/dist/server/src/index.d.ts +11 -3
  418. package/dist/server/src/index.d.ts.map +1 -1
  419. package/dist/server/src/middlewares/index.d.ts.map +1 -1
  420. package/dist/server/src/middlewares/rateLimit.d.ts.map +1 -1
  421. package/dist/server/src/register.d.ts.map +1 -1
  422. package/dist/server/src/routes/admin.d.ts.map +1 -1
  423. package/dist/server/src/services/action.d.ts.map +1 -1
  424. package/dist/server/src/services/api-token.d.ts.map +1 -1
  425. package/dist/server/src/services/auth.d.ts +6 -0
  426. package/dist/server/src/services/auth.d.ts.map +1 -1
  427. package/dist/server/src/services/condition.d.ts.map +1 -1
  428. package/dist/server/src/services/content-type.d.ts.map +1 -1
  429. package/dist/server/src/services/debug-dump.d.ts +9 -0
  430. package/dist/server/src/services/debug-dump.d.ts.map +1 -0
  431. package/dist/server/src/services/homepage.d.ts +1 -1
  432. package/dist/server/src/services/homepage.d.ts.map +1 -1
  433. package/dist/server/src/services/index.d.ts +7 -2
  434. package/dist/server/src/services/index.d.ts.map +1 -1
  435. package/dist/server/src/services/passport/local-strategy.d.ts.map +1 -1
  436. package/dist/server/src/services/passport.d.ts.map +1 -1
  437. package/dist/server/src/services/permission/engine.d.ts.map +1 -1
  438. package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts.map +1 -1
  439. package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
  440. package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
  441. package/dist/server/src/services/permission/queries.d.ts.map +1 -1
  442. package/dist/server/src/services/permission/rename-fields.d.ts +21 -0
  443. package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -0
  444. package/dist/server/src/services/permission/sections-builder/section.d.ts.map +1 -1
  445. package/dist/server/src/services/permission/sections-builder/utils.d.ts +1 -1
  446. package/dist/server/src/services/permission/sections-builder/utils.d.ts.map +1 -1
  447. package/dist/server/src/services/role.d.ts +1 -1
  448. package/dist/server/src/services/role.d.ts.map +1 -1
  449. package/dist/server/src/services/transfer/token.d.ts.map +1 -1
  450. package/dist/server/src/strategies/content-api-token.d.ts.map +1 -1
  451. package/dist/server/src/utils/debug-dump/redact.d.ts +8 -0
  452. package/dist/server/src/utils/debug-dump/redact.d.ts.map +1 -0
  453. package/dist/server/src/validation/user.d.ts.map +1 -1
  454. package/dist/shared/contracts/admin.d.ts +106 -0
  455. package/dist/shared/contracts/admin.d.ts.map +1 -1
  456. package/dist/shared/utils/__tests__/get-project-type.test.d.ts +1 -0
  457. package/dist/shared/utils/__tests__/get-project-type.test.d.ts.map +1 -0
  458. package/dist/shared/utils/get-project-type.d.ts +37 -0
  459. package/dist/shared/utils/get-project-type.d.ts.map +1 -0
  460. package/package.json +10 -10
  461. package/dist/admin/admin/src/utils/getProjectType.js +0 -22
  462. package/dist/admin/admin/src/utils/getProjectType.js.map +0 -1
  463. package/dist/admin/admin/src/utils/getProjectType.mjs +0 -20
  464. package/dist/admin/admin/src/utils/getProjectType.mjs.map +0 -1
  465. package/dist/admin/src/utils/getProjectType.d.ts +0 -16
@@ -0,0 +1,166 @@
1
+ import os from 'os';
2
+ import path from 'path';
3
+ import { scrub } from '../utils/debug-dump/redact.mjs';
4
+ import { getLicensedPlan } from '../../../shared/utils/get-project-type.mjs';
5
+
6
+ // Only these process.env keys are ever emitted (never the whole environment).
7
+ const ENV_ALLOWLIST = [
8
+ 'NODE_ENV',
9
+ 'STRAPI_HOSTING',
10
+ 'STRAPI_DISABLE_LICENSE_PING',
11
+ 'STRAPI_DISABLE_EE'
12
+ ];
13
+ // Sensitive config subtrees masked wholesale (in addition to the key/value scrubber).
14
+ const SENSITIVE_CONFIG_PATHS = [
15
+ 'server.app.keys',
16
+ 'database.connection.connection',
17
+ 'admin.auth.secret',
18
+ 'admin.apiToken.salt',
19
+ 'admin.transfer.token.salt',
20
+ 'admin.secrets',
21
+ 'plugin::email.providerOptions',
22
+ 'plugin::email.settings',
23
+ 'plugin::upload.providerOptions'
24
+ ];
25
+ const debugDumpService = ({ strapi })=>({
26
+ async generate () {
27
+ const appRoot = strapi.config.get('dirs.app.root', '');
28
+ const homeDir = os.homedir();
29
+ const packageJson = strapi.config.get('info', {}) ?? {};
30
+ // The config provider (packages/core/core/src/services/config.ts) spreads the config it was
31
+ // built with onto itself, next to its get/set/has methods, and `get('')` does not return the
32
+ // root. Module config (plugin::*, api::*) is stored later with config.set, so it is never an
33
+ // own property of the provider. Take the top-level names from both places and read every
34
+ // value through config.get, which always sees the live tree.
35
+ const configNames = new Set([
36
+ ...Object.keys(strapi.config).filter((key)=>![
37
+ 'get',
38
+ 'set',
39
+ 'has'
40
+ ].includes(key)),
41
+ ...Object.keys(strapi.get('modules').getAll())
42
+ ]);
43
+ const rawConfig = {};
44
+ for (const name of configNames){
45
+ const value = strapi.config.get(name);
46
+ if (value !== undefined) {
47
+ rawConfig[name] = value;
48
+ }
49
+ }
50
+ const fullConfig = scrub(rawConfig, {
51
+ appRoot,
52
+ homeDir,
53
+ extraPaths: SENSITIVE_CONFIG_PATHS
54
+ });
55
+ const env = {};
56
+ for (const key of ENV_ALLOWLIST){
57
+ env[key] = process.env[key];
58
+ }
59
+ let uploadPrivate = false;
60
+ try {
61
+ uploadPrivate = await strapi.plugin('upload').provider.isPrivate();
62
+ } catch {
63
+ uploadPrivate = false;
64
+ }
65
+ const retained = strapi.ee.retainedLicense;
66
+ // getInfo() makes a SQLite path relative to the working directory, which can still climb
67
+ // into a home directory (`../../home/<user>/...`). Resolve it and relativize it like every
68
+ // other path in the dump, so it reads `<app>/...` or `<home>/...`.
69
+ const databaseInfo = strapi.db.getInfo();
70
+ if (databaseInfo.client === 'sqlite' && databaseInfo.displayName) {
71
+ databaseInfo.displayName = scrub(path.resolve(process.cwd(), databaseInfo.displayName), {
72
+ appRoot,
73
+ homeDir
74
+ });
75
+ }
76
+ const payload = {
77
+ dumpVersion: 1,
78
+ generatedAt: new Date().toISOString(),
79
+ strapi: {
80
+ version: strapi.config.get('info.strapi', null),
81
+ edition: strapi.EE ? 'EE' : 'CE',
82
+ // `edition` is the edition actually running, so a lapsed license reports CE. The plan
83
+ // still comes off the license, otherwise a dump from an expired Enterprise instance is
84
+ // indistinguishable from a project that never had a license, which is exactly the case
85
+ // Support is most likely to receive one for. `licenseStatus` below tells them apart.
86
+ projectType: getLicensedPlan({
87
+ licenseStatus: strapi.ee.licenseStatus,
88
+ type: strapi.ee.type ?? retained?.type,
89
+ planPriceId: strapi.ee.planPriceId ?? retained?.planPriceId
90
+ }),
91
+ environment: strapi.config.get('environment', ''),
92
+ autoReload: strapi.config.get('autoReload', false)
93
+ },
94
+ system: {
95
+ nodeVersion: process.version,
96
+ os: {
97
+ type: os.type(),
98
+ platform: os.platform(),
99
+ arch: os.arch(),
100
+ release: os.release()
101
+ },
102
+ isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud'
103
+ },
104
+ database: databaseInfo,
105
+ plugins: Object.keys(strapi.plugins),
106
+ providers: {
107
+ // A local provider is wired by its absolute path, so these go through scrub() too
108
+ upload: {
109
+ name: scrub(strapi.config.get('plugin::upload.provider', 'local'), {
110
+ appRoot,
111
+ homeDir
112
+ }),
113
+ isPrivate: uploadPrivate
114
+ },
115
+ email: {
116
+ name: scrub(strapi.config.get('plugin::email.provider', undefined), {
117
+ appRoot,
118
+ homeDir
119
+ })
120
+ }
121
+ },
122
+ contentModel: {
123
+ counts: {
124
+ contentTypes: Object.keys(strapi.contentTypes).length,
125
+ components: Object.keys(strapi.components).length
126
+ },
127
+ contentTypes: scrub(Object.values(strapi.contentTypes), {
128
+ appRoot,
129
+ homeDir
130
+ }),
131
+ components: scrub(Object.values(strapi.components), {
132
+ appRoot,
133
+ homeDir
134
+ })
135
+ },
136
+ customizations: strapi.getCustomizations(),
137
+ config: fullConfig,
138
+ packageJson: scrub(packageJson, {
139
+ appRoot,
140
+ homeDir
141
+ }),
142
+ env
143
+ };
144
+ // Emitted whenever this instance has ever had a license, not only while one is usable, so
145
+ // an expired license still reports its plan, seats and subscription. `disable()` wipes
146
+ // `licenseInfo` and keeps a display-only snapshot in `retainedLicense`, so read through to
147
+ // it the same way `licenseLimitInformation` does.
148
+ if (strapi.EE || retained) {
149
+ payload.license = {
150
+ licenseStatus: strapi.ee.licenseStatus,
151
+ type: strapi.ee.type ?? retained?.type ?? null,
152
+ // Live only, like the license endpoint: disable() clears it, so an ended trial is not one.
153
+ isTrial: strapi.ee.isTrial,
154
+ expireAt: strapi.ee.expireAt ?? retained?.expireAt ?? null,
155
+ seats: strapi.ee.seats ?? retained?.seats ?? null,
156
+ subscriptionId: strapi.ee.subscriptionId ?? retained?.subscriptionId ?? null,
157
+ features: strapi.EE ? strapi.ee.features.list() : retained?.features ?? [],
158
+ entitlements: strapi.EE ? strapi.ee.entitlements.list() : strapi.ee.entitlements.listRetained()
159
+ };
160
+ }
161
+ return payload;
162
+ }
163
+ });
164
+
165
+ export { debugDumpService as default };
166
+ //# sourceMappingURL=debug-dump.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-dump.mjs","sources":["../../../../../server/src/services/debug-dump.ts"],"sourcesContent":["import os from 'os';\nimport path from 'path';\nimport type { Core } from '@strapi/types';\nimport { scrub } from '../utils/debug-dump/redact';\nimport type { DebugDumpPayload } from '../../../shared/contracts/admin';\nimport { getLicensedPlan } from '../../../shared/utils/get-project-type';\n\n// Only these process.env keys are ever emitted (never the whole environment).\nconst ENV_ALLOWLIST = [\n 'NODE_ENV',\n 'STRAPI_HOSTING',\n 'STRAPI_DISABLE_LICENSE_PING',\n 'STRAPI_DISABLE_EE',\n] as const;\n\n// Sensitive config subtrees masked wholesale (in addition to the key/value scrubber).\nconst SENSITIVE_CONFIG_PATHS = [\n 'server.app.keys',\n 'database.connection.connection',\n 'admin.auth.secret',\n 'admin.apiToken.salt',\n 'admin.transfer.token.salt',\n 'admin.secrets',\n 'plugin::email.providerOptions',\n 'plugin::email.settings',\n 'plugin::upload.providerOptions',\n];\n\nconst debugDumpService = ({ strapi }: { strapi: Core.Strapi }) => ({\n async generate(): Promise<DebugDumpPayload> {\n const appRoot: string = strapi.config.get('dirs.app.root', '') as string;\n const homeDir = os.homedir();\n\n const packageJson = (strapi.config.get('info', {}) ?? {}) as Record<string, unknown>;\n\n // The config provider (packages/core/core/src/services/config.ts) spreads the config it was\n // built with onto itself, next to its get/set/has methods, and `get('')` does not return the\n // root. Module config (plugin::*, api::*) is stored later with config.set, so it is never an\n // own property of the provider. Take the top-level names from both places and read every\n // value through config.get, which always sees the live tree.\n const configNames = new Set([\n ...Object.keys(strapi.config).filter((key) => !['get', 'set', 'has'].includes(key)),\n ...Object.keys(strapi.get('modules').getAll()),\n ]);\n const rawConfig: Record<string, unknown> = {};\n for (const name of configNames) {\n const value = strapi.config.get(name);\n if (value !== undefined) {\n rawConfig[name] = value;\n }\n }\n const fullConfig = scrub(rawConfig, {\n appRoot,\n homeDir,\n extraPaths: SENSITIVE_CONFIG_PATHS,\n }) as Record<string, unknown>;\n\n const env: Record<string, string | undefined> = {};\n for (const key of ENV_ALLOWLIST) {\n env[key] = process.env[key];\n }\n\n let uploadPrivate = false;\n try {\n uploadPrivate = await strapi.plugin('upload').provider.isPrivate();\n } catch {\n uploadPrivate = false;\n }\n\n const retained = strapi.ee.retainedLicense;\n\n // getInfo() makes a SQLite path relative to the working directory, which can still climb\n // into a home directory (`../../home/<user>/...`). Resolve it and relativize it like every\n // other path in the dump, so it reads `<app>/...` or `<home>/...`.\n const databaseInfo = strapi.db.getInfo();\n if (databaseInfo.client === 'sqlite' && databaseInfo.displayName) {\n databaseInfo.displayName = scrub(path.resolve(process.cwd(), databaseInfo.displayName), {\n appRoot,\n homeDir,\n }) as string;\n }\n\n const payload: DebugDumpPayload = {\n dumpVersion: 1,\n generatedAt: new Date().toISOString(),\n strapi: {\n version: strapi.config.get('info.strapi', null) as string | null,\n edition: strapi.EE ? 'EE' : 'CE',\n // `edition` is the edition actually running, so a lapsed license reports CE. The plan\n // still comes off the license, otherwise a dump from an expired Enterprise instance is\n // indistinguishable from a project that never had a license, which is exactly the case\n // Support is most likely to receive one for. `licenseStatus` below tells them apart.\n projectType: getLicensedPlan({\n licenseStatus: strapi.ee.licenseStatus,\n type: strapi.ee.type ?? retained?.type,\n planPriceId: strapi.ee.planPriceId ?? retained?.planPriceId,\n }),\n environment: strapi.config.get('environment', '') as string,\n autoReload: strapi.config.get('autoReload', false) as boolean,\n },\n system: {\n nodeVersion: process.version,\n os: { type: os.type(), platform: os.platform(), arch: os.arch(), release: os.release() },\n isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud',\n },\n database: databaseInfo,\n plugins: Object.keys(strapi.plugins),\n providers: {\n // A local provider is wired by its absolute path, so these go through scrub() too\n upload: {\n name: scrub(strapi.config.get('plugin::upload.provider', 'local'), {\n appRoot,\n homeDir,\n }) as string,\n isPrivate: uploadPrivate,\n },\n email: {\n name: scrub(strapi.config.get('plugin::email.provider', undefined), {\n appRoot,\n homeDir,\n }) as string | undefined,\n },\n },\n contentModel: {\n counts: {\n contentTypes: Object.keys(strapi.contentTypes).length,\n components: Object.keys(strapi.components).length,\n },\n contentTypes: scrub(Object.values(strapi.contentTypes), { appRoot, homeDir }) as unknown[],\n components: scrub(Object.values(strapi.components), { appRoot, homeDir }) as unknown[],\n },\n customizations: strapi.getCustomizations(),\n config: fullConfig,\n packageJson: scrub(packageJson, { appRoot, homeDir }) as Record<string, unknown>,\n env,\n };\n\n // Emitted whenever this instance has ever had a license, not only while one is usable, so\n // an expired license still reports its plan, seats and subscription. `disable()` wipes\n // `licenseInfo` and keeps a display-only snapshot in `retainedLicense`, so read through to\n // it the same way `licenseLimitInformation` does.\n if (strapi.EE || retained) {\n payload.license = {\n licenseStatus: strapi.ee.licenseStatus,\n type: strapi.ee.type ?? retained?.type ?? null,\n // Live only, like the license endpoint: disable() clears it, so an ended trial is not one.\n isTrial: strapi.ee.isTrial,\n expireAt: strapi.ee.expireAt ?? retained?.expireAt ?? null,\n seats: strapi.ee.seats ?? retained?.seats ?? null,\n subscriptionId: strapi.ee.subscriptionId ?? retained?.subscriptionId ?? null,\n features: strapi.EE ? strapi.ee.features.list() : (retained?.features ?? []),\n entitlements: strapi.EE\n ? strapi.ee.entitlements.list()\n : strapi.ee.entitlements.listRetained(),\n };\n }\n\n return payload;\n },\n});\n\nexport default debugDumpService;\n"],"names":["ENV_ALLOWLIST","SENSITIVE_CONFIG_PATHS","debugDumpService","strapi","generate","appRoot","config","get","homeDir","os","homedir","packageJson","configNames","Set","Object","keys","filter","key","includes","getAll","rawConfig","name","value","undefined","fullConfig","scrub","extraPaths","env","process","uploadPrivate","plugin","provider","isPrivate","retained","ee","retainedLicense","databaseInfo","db","getInfo","client","displayName","path","resolve","cwd","payload","dumpVersion","generatedAt","Date","toISOString","version","edition","EE","projectType","getLicensedPlan","licenseStatus","type","planPriceId","environment","autoReload","system","nodeVersion","platform","arch","release","isHostedOnStrapiCloud","STRAPI_HOSTING","database","plugins","providers","upload","email","contentModel","counts","contentTypes","length","components","values","customizations","getCustomizations","license","isTrial","expireAt","seats","subscriptionId","features","list","entitlements","listRetained"],"mappings":"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"}
@@ -17,7 +17,8 @@ const homepageService = ({ strapi })=>{
17
17
  });
18
18
  const countApiTokens = await index.getService('api-token-admin').countAll();
19
19
  const countAdmins = await index.getService('user').count();
20
- const countLocales = await strapi.plugin('i18n')?.service('locales')?.count() ?? null;
20
+ // null tells the homepage no localization plugin is installed, unlike 0 locales
21
+ const countLocales = strapi.localization.isEnabled() === true ? (await strapi.localization.getLocales()).length : null;
21
22
  const countsAssets = await strapi.db.query('plugin::upload.file').count();
22
23
  const countWebhooks = await strapi.db.query('strapi::webhook').count();
23
24
  const componentCategories = new Set(Object.values(strapi.components).map((component)=>component.category));
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.js","sources":["../../../../../server/src/services/homepage.ts"],"sourcesContent":["import { Core } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n HomepageLayout,\n HomepageLayoutSchema,\n HomepageLayoutWrite,\n HomepageLayoutWriteSchema,\n} from '../controllers/validation/schema';\n\nconst DEFAULT_WIDTH = 6 as const;\nconst keyFor = (userId: number) => `homepage-layout:${userId}`;\n\nconst isContentTypeVisible = (model: any) =>\n model?.pluginOptions?.['content-type-builder']?.visible !== false;\n\nexport const homepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const adminStore = strapi.store({ type: 'core', name: 'admin' });\n const getKeyStatistics = async () => {\n const contentTypes = Object.entries(strapi.contentTypes).filter(([, contentType]) => {\n return isContentTypeVisible(contentType);\n });\n\n const countApiTokens = await getService('api-token-admin').countAll();\n const countAdmins = await getService('user').count();\n const countLocales = (await strapi.plugin('i18n')?.service('locales')?.count()) ?? null;\n const countsAssets = await strapi.db.query('plugin::upload.file').count();\n const countWebhooks = await strapi.db.query('strapi::webhook').count();\n\n const componentCategories = new Set(\n Object.values(strapi.components).map((component) => component.category)\n );\n const components = Array.from(componentCategories);\n\n return {\n assets: countsAssets,\n contentTypes: contentTypes.length,\n components: components.length,\n locales: countLocales,\n admins: countAdmins,\n webhooks: countWebhooks,\n apiTokens: countApiTokens,\n };\n };\n\n const getHomepageLayout = async (userId: number): Promise<HomepageLayout | null> => {\n const key = keyFor(userId);\n const value = await adminStore.get({ key });\n if (!value) {\n // nothing saved yet\n return null;\n }\n\n return HomepageLayoutSchema.parse(value);\n };\n\n const updateHomepageLayout = async (userId: number, input: unknown): Promise<HomepageLayout> => {\n const write: HomepageLayoutWrite = HomepageLayoutWriteSchema.parse(input);\n\n const key = keyFor(userId);\n\n const currentRaw = await adminStore.get({ key });\n const current: HomepageLayout | null = currentRaw\n ? HomepageLayoutSchema.parse(currentRaw)\n : null;\n\n const widgetsNext = write.widgets ?? current?.widgets ?? [];\n\n // Normalize widths (fill defaults where missing)\n const normalizedWidgets = widgetsNext.map((w) => {\n const prev = current?.widgets.find((cw) => cw.uid === w.uid);\n return {\n uid: w.uid,\n width: w.width ?? prev?.width ?? DEFAULT_WIDTH,\n };\n });\n\n const next: HomepageLayout = {\n version: write.version ?? 1,\n widgets: normalizedWidgets,\n updatedAt: write.updatedAt ?? new Date().toISOString(),\n };\n\n await adminStore.set({ key, value: next });\n return next;\n };\n return {\n getKeyStatistics,\n getHomepageLayout,\n updateHomepageLayout,\n };\n};\n"],"names":["DEFAULT_WIDTH","keyFor","userId","isContentTypeVisible","model","pluginOptions","visible","homepageService","strapi","adminStore","store","type","name","getKeyStatistics","contentTypes","Object","entries","filter","contentType","countApiTokens","getService","countAll","countAdmins","count","countLocales","plugin","service","countsAssets","db","query","countWebhooks","componentCategories","Set","values","components","map","component","category","Array","from","assets","length","locales","admins","webhooks","apiTokens","getHomepageLayout","key","value","get","HomepageLayoutSchema","parse","updateHomepageLayout","input","write","HomepageLayoutWriteSchema","currentRaw","current","widgetsNext","widgets","normalizedWidgets","w","prev","find","cw","uid","width","next","version","updatedAt","Date","toISOString","set"],"mappings":"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"}
1
+ {"version":3,"file":"homepage.js","sources":["../../../../../server/src/services/homepage.ts"],"sourcesContent":["import { Core } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n HomepageLayout,\n HomepageLayoutSchema,\n HomepageLayoutWrite,\n HomepageLayoutWriteSchema,\n} from '../controllers/validation/schema';\n\nconst DEFAULT_WIDTH = 6 as const;\nconst keyFor = (userId: number) => `homepage-layout:${userId}`;\n\nconst isContentTypeVisible = (model: any) =>\n model?.pluginOptions?.['content-type-builder']?.visible !== false;\n\nexport const homepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const adminStore = strapi.store({ type: 'core', name: 'admin' });\n const getKeyStatistics = async () => {\n const contentTypes = Object.entries(strapi.contentTypes).filter(([, contentType]) => {\n return isContentTypeVisible(contentType);\n });\n\n const countApiTokens = await getService('api-token-admin').countAll();\n const countAdmins = await getService('user').count();\n // null tells the homepage no localization plugin is installed, unlike 0 locales\n const countLocales =\n strapi.localization.isEnabled() === true\n ? (await strapi.localization.getLocales()).length\n : null;\n const countsAssets = await strapi.db.query('plugin::upload.file').count();\n const countWebhooks = await strapi.db.query('strapi::webhook').count();\n\n const componentCategories = new Set(\n Object.values(strapi.components).map((component) => component.category)\n );\n const components = Array.from(componentCategories);\n\n return {\n assets: countsAssets,\n contentTypes: contentTypes.length,\n components: components.length,\n locales: countLocales,\n admins: countAdmins,\n webhooks: countWebhooks,\n apiTokens: countApiTokens,\n };\n };\n\n const getHomepageLayout = async (userId: number): Promise<HomepageLayout | null> => {\n const key = keyFor(userId);\n const value = await adminStore.get({ key });\n if (!value) {\n // nothing saved yet\n return null;\n }\n\n return HomepageLayoutSchema.parse(value);\n };\n\n const updateHomepageLayout = async (userId: number, input: unknown): Promise<HomepageLayout> => {\n const write: HomepageLayoutWrite = HomepageLayoutWriteSchema.parse(input);\n\n const key = keyFor(userId);\n\n const currentRaw = await adminStore.get({ key });\n const current: HomepageLayout | null = currentRaw\n ? HomepageLayoutSchema.parse(currentRaw)\n : null;\n\n const widgetsNext = write.widgets ?? current?.widgets ?? [];\n\n // Normalize widths (fill defaults where missing)\n const normalizedWidgets = widgetsNext.map((w) => {\n const prev = current?.widgets.find((cw) => cw.uid === w.uid);\n return {\n uid: w.uid,\n width: w.width ?? prev?.width ?? DEFAULT_WIDTH,\n };\n });\n\n const next: HomepageLayout = {\n version: write.version ?? 1,\n widgets: normalizedWidgets,\n updatedAt: write.updatedAt ?? new Date().toISOString(),\n };\n\n await adminStore.set({ key, value: next });\n return next;\n };\n return {\n getKeyStatistics,\n getHomepageLayout,\n updateHomepageLayout,\n };\n};\n"],"names":["DEFAULT_WIDTH","keyFor","userId","isContentTypeVisible","model","pluginOptions","visible","homepageService","strapi","adminStore","store","type","name","getKeyStatistics","contentTypes","Object","entries","filter","contentType","countApiTokens","getService","countAll","countAdmins","count","countLocales","localization","isEnabled","getLocales","length","countsAssets","db","query","countWebhooks","componentCategories","Set","values","components","map","component","category","Array","from","assets","locales","admins","webhooks","apiTokens","getHomepageLayout","key","value","get","HomepageLayoutSchema","parse","updateHomepageLayout","input","write","HomepageLayoutWriteSchema","currentRaw","current","widgetsNext","widgets","normalizedWidgets","w","prev","find","cw","uid","width","next","version","updatedAt","Date","toISOString","set"],"mappings":"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"}
@@ -15,7 +15,8 @@ const homepageService = ({ strapi })=>{
15
15
  });
16
16
  const countApiTokens = await getService('api-token-admin').countAll();
17
17
  const countAdmins = await getService('user').count();
18
- const countLocales = await strapi.plugin('i18n')?.service('locales')?.count() ?? null;
18
+ // null tells the homepage no localization plugin is installed, unlike 0 locales
19
+ const countLocales = strapi.localization.isEnabled() === true ? (await strapi.localization.getLocales()).length : null;
19
20
  const countsAssets = await strapi.db.query('plugin::upload.file').count();
20
21
  const countWebhooks = await strapi.db.query('strapi::webhook').count();
21
22
  const componentCategories = new Set(Object.values(strapi.components).map((component)=>component.category));
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.mjs","sources":["../../../../../server/src/services/homepage.ts"],"sourcesContent":["import { Core } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n HomepageLayout,\n HomepageLayoutSchema,\n HomepageLayoutWrite,\n HomepageLayoutWriteSchema,\n} from '../controllers/validation/schema';\n\nconst DEFAULT_WIDTH = 6 as const;\nconst keyFor = (userId: number) => `homepage-layout:${userId}`;\n\nconst isContentTypeVisible = (model: any) =>\n model?.pluginOptions?.['content-type-builder']?.visible !== false;\n\nexport const homepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const adminStore = strapi.store({ type: 'core', name: 'admin' });\n const getKeyStatistics = async () => {\n const contentTypes = Object.entries(strapi.contentTypes).filter(([, contentType]) => {\n return isContentTypeVisible(contentType);\n });\n\n const countApiTokens = await getService('api-token-admin').countAll();\n const countAdmins = await getService('user').count();\n const countLocales = (await strapi.plugin('i18n')?.service('locales')?.count()) ?? null;\n const countsAssets = await strapi.db.query('plugin::upload.file').count();\n const countWebhooks = await strapi.db.query('strapi::webhook').count();\n\n const componentCategories = new Set(\n Object.values(strapi.components).map((component) => component.category)\n );\n const components = Array.from(componentCategories);\n\n return {\n assets: countsAssets,\n contentTypes: contentTypes.length,\n components: components.length,\n locales: countLocales,\n admins: countAdmins,\n webhooks: countWebhooks,\n apiTokens: countApiTokens,\n };\n };\n\n const getHomepageLayout = async (userId: number): Promise<HomepageLayout | null> => {\n const key = keyFor(userId);\n const value = await adminStore.get({ key });\n if (!value) {\n // nothing saved yet\n return null;\n }\n\n return HomepageLayoutSchema.parse(value);\n };\n\n const updateHomepageLayout = async (userId: number, input: unknown): Promise<HomepageLayout> => {\n const write: HomepageLayoutWrite = HomepageLayoutWriteSchema.parse(input);\n\n const key = keyFor(userId);\n\n const currentRaw = await adminStore.get({ key });\n const current: HomepageLayout | null = currentRaw\n ? HomepageLayoutSchema.parse(currentRaw)\n : null;\n\n const widgetsNext = write.widgets ?? current?.widgets ?? [];\n\n // Normalize widths (fill defaults where missing)\n const normalizedWidgets = widgetsNext.map((w) => {\n const prev = current?.widgets.find((cw) => cw.uid === w.uid);\n return {\n uid: w.uid,\n width: w.width ?? prev?.width ?? DEFAULT_WIDTH,\n };\n });\n\n const next: HomepageLayout = {\n version: write.version ?? 1,\n widgets: normalizedWidgets,\n updatedAt: write.updatedAt ?? new Date().toISOString(),\n };\n\n await adminStore.set({ key, value: next });\n return next;\n };\n return {\n getKeyStatistics,\n getHomepageLayout,\n updateHomepageLayout,\n };\n};\n"],"names":["DEFAULT_WIDTH","keyFor","userId","isContentTypeVisible","model","pluginOptions","visible","homepageService","strapi","adminStore","store","type","name","getKeyStatistics","contentTypes","Object","entries","filter","contentType","countApiTokens","getService","countAll","countAdmins","count","countLocales","plugin","service","countsAssets","db","query","countWebhooks","componentCategories","Set","values","components","map","component","category","Array","from","assets","length","locales","admins","webhooks","apiTokens","getHomepageLayout","key","value","get","HomepageLayoutSchema","parse","updateHomepageLayout","input","write","HomepageLayoutWriteSchema","currentRaw","current","widgetsNext","widgets","normalizedWidgets","w","prev","find","cw","uid","width","next","version","updatedAt","Date","toISOString","set"],"mappings":"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"}
1
+ {"version":3,"file":"homepage.mjs","sources":["../../../../../server/src/services/homepage.ts"],"sourcesContent":["import { Core } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n HomepageLayout,\n HomepageLayoutSchema,\n HomepageLayoutWrite,\n HomepageLayoutWriteSchema,\n} from '../controllers/validation/schema';\n\nconst DEFAULT_WIDTH = 6 as const;\nconst keyFor = (userId: number) => `homepage-layout:${userId}`;\n\nconst isContentTypeVisible = (model: any) =>\n model?.pluginOptions?.['content-type-builder']?.visible !== false;\n\nexport const homepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const adminStore = strapi.store({ type: 'core', name: 'admin' });\n const getKeyStatistics = async () => {\n const contentTypes = Object.entries(strapi.contentTypes).filter(([, contentType]) => {\n return isContentTypeVisible(contentType);\n });\n\n const countApiTokens = await getService('api-token-admin').countAll();\n const countAdmins = await getService('user').count();\n // null tells the homepage no localization plugin is installed, unlike 0 locales\n const countLocales =\n strapi.localization.isEnabled() === true\n ? (await strapi.localization.getLocales()).length\n : null;\n const countsAssets = await strapi.db.query('plugin::upload.file').count();\n const countWebhooks = await strapi.db.query('strapi::webhook').count();\n\n const componentCategories = new Set(\n Object.values(strapi.components).map((component) => component.category)\n );\n const components = Array.from(componentCategories);\n\n return {\n assets: countsAssets,\n contentTypes: contentTypes.length,\n components: components.length,\n locales: countLocales,\n admins: countAdmins,\n webhooks: countWebhooks,\n apiTokens: countApiTokens,\n };\n };\n\n const getHomepageLayout = async (userId: number): Promise<HomepageLayout | null> => {\n const key = keyFor(userId);\n const value = await adminStore.get({ key });\n if (!value) {\n // nothing saved yet\n return null;\n }\n\n return HomepageLayoutSchema.parse(value);\n };\n\n const updateHomepageLayout = async (userId: number, input: unknown): Promise<HomepageLayout> => {\n const write: HomepageLayoutWrite = HomepageLayoutWriteSchema.parse(input);\n\n const key = keyFor(userId);\n\n const currentRaw = await adminStore.get({ key });\n const current: HomepageLayout | null = currentRaw\n ? HomepageLayoutSchema.parse(currentRaw)\n : null;\n\n const widgetsNext = write.widgets ?? current?.widgets ?? [];\n\n // Normalize widths (fill defaults where missing)\n const normalizedWidgets = widgetsNext.map((w) => {\n const prev = current?.widgets.find((cw) => cw.uid === w.uid);\n return {\n uid: w.uid,\n width: w.width ?? prev?.width ?? DEFAULT_WIDTH,\n };\n });\n\n const next: HomepageLayout = {\n version: write.version ?? 1,\n widgets: normalizedWidgets,\n updatedAt: write.updatedAt ?? new Date().toISOString(),\n };\n\n await adminStore.set({ key, value: next });\n return next;\n };\n return {\n getKeyStatistics,\n getHomepageLayout,\n updateHomepageLayout,\n };\n};\n"],"names":["DEFAULT_WIDTH","keyFor","userId","isContentTypeVisible","model","pluginOptions","visible","homepageService","strapi","adminStore","store","type","name","getKeyStatistics","contentTypes","Object","entries","filter","contentType","countApiTokens","getService","countAll","countAdmins","count","countLocales","localization","isEnabled","getLocales","length","countsAssets","db","query","countWebhooks","componentCategories","Set","values","components","map","component","category","Array","from","assets","locales","admins","webhooks","apiTokens","getHomepageLayout","key","value","get","HomepageLayoutSchema","parse","updateHomepageLayout","input","write","HomepageLayoutWriteSchema","currentRaw","current","widgetsNext","widgets","normalizedWidgets","w","prev","find","cw","uid","width","next","version","updatedAt","Date","toISOString","set"],"mappings":"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"}
@@ -16,6 +16,7 @@ var apiToken = require('./api-token.js');
16
16
  var index = require('./transfer/index.js');
17
17
  var projectSettings = require('./project-settings.js');
18
18
  var homepage = require('./homepage.js');
19
+ var debugDump = require('./debug-dump.js');
19
20
 
20
21
  function _interopNamespaceDefaultOnly (e) { return Object.freeze({ __proto__: null, default: e }); }
21
22
 
@@ -43,7 +44,8 @@ var services = {
43
44
  transfer: index,
44
45
  'project-settings': projectSettings,
45
46
  encryption,
46
- homepage: homepage.homepageService
47
+ homepage: homepage.homepageService,
48
+ 'debug-dump': debugDump
47
49
  };
48
50
 
49
51
  module.exports = services;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../server/src/services/index.ts"],"sourcesContent":["// NOTE: Make sure to use default export for services overwritten in EE\nimport auth from './auth';\nimport user from './user';\nimport role from './role';\nimport passport from './passport';\nimport metrics from './metrics';\nimport encryption from './encryption';\nimport * as token from './token';\nimport * as permission from './permission';\nimport * as contentType from './content-type';\nimport * as constants from './constants';\nimport * as condition from './condition';\nimport * as action from './action';\nimport { createTokenService } from './api-token';\nimport * as transfer from './transfer';\nimport * as projectSettings from './project-settings';\nimport { homepageService } from './homepage';\n\nconst contentApiTokenService = createTokenService('content-api');\nconst adminTokenService = createTokenService('admin');\n\n// TODO: TS - Export services one by one as this export is cjs\nexport default {\n auth,\n user,\n role,\n passport,\n token,\n permission,\n metrics,\n 'content-type': contentType,\n constants,\n condition,\n action,\n /** @deprecated Use 'api-token-content-api' instead */\n 'api-token': contentApiTokenService,\n 'api-token-content-api': contentApiTokenService,\n 'api-token-admin': adminTokenService,\n transfer,\n 'project-settings': projectSettings,\n encryption,\n homepage: homepageService,\n};\n"],"names":["contentApiTokenService","createTokenService","adminTokenService","auth","user","role","passport","token","permission","metrics","contentType","constants","condition","action","transfer","projectSettings","encryption","homepage","homepageService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAkBA,MAAMA,yBAAyBC,2BAAAA,CAAmB,aAAA,CAAA;AAClD,MAAMC,oBAAoBD,2BAAAA,CAAmB,OAAA,CAAA;AAE7C;AACA,eAAe;AACbE,UAAAA,YAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,KAAAA;AACAC,IAAAA,UAAAA;AACAC,IAAAA,OAAAA;IACA,cAAA,EAAgBC,WAAAA;AAChBC,eAAAA,oBAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,MAAAA;AACA,2DACA,WAAA,EAAab,sBAAAA;IACb,uBAAA,EAAyBA,sBAAAA;IACzB,iBAAA,EAAmBE,iBAAAA;AACnBY,cAAAA,KAAAA;IACA,kBAAA,EAAoBC,eAAAA;AACpBC,IAAAA,UAAAA;IACAC,QAAAA,EAAUC;AACZ,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../server/src/services/index.ts"],"sourcesContent":["// NOTE: Make sure to use default export for services overwritten in EE\nimport auth from './auth';\nimport user from './user';\nimport role from './role';\nimport passport from './passport';\nimport metrics from './metrics';\nimport encryption from './encryption';\nimport * as token from './token';\nimport * as permission from './permission';\nimport * as contentType from './content-type';\nimport * as constants from './constants';\nimport * as condition from './condition';\nimport * as action from './action';\nimport { createTokenService } from './api-token';\nimport * as transfer from './transfer';\nimport * as projectSettings from './project-settings';\nimport { homepageService } from './homepage';\nimport debugDump from './debug-dump';\n\nconst contentApiTokenService = createTokenService('content-api');\nconst adminTokenService = createTokenService('admin');\n\n// TODO: TS - Export services one by one as this export is cjs\nexport default {\n auth,\n user,\n role,\n passport,\n token,\n permission,\n metrics,\n 'content-type': contentType,\n constants,\n condition,\n action,\n /** @deprecated Use 'api-token-content-api' instead */\n 'api-token': contentApiTokenService,\n 'api-token-content-api': contentApiTokenService,\n 'api-token-admin': adminTokenService,\n transfer,\n 'project-settings': projectSettings,\n encryption,\n homepage: homepageService,\n 'debug-dump': debugDump,\n};\n"],"names":["contentApiTokenService","createTokenService","adminTokenService","auth","user","role","passport","token","permission","metrics","contentType","constants","condition","action","transfer","projectSettings","encryption","homepage","homepageService","debugDump"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAmBA,MAAMA,yBAAyBC,2BAAAA,CAAmB,aAAA,CAAA;AAClD,MAAMC,oBAAoBD,2BAAAA,CAAmB,OAAA,CAAA;AAE7C;AACA,eAAe;AACbE,UAAAA,YAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,KAAAA;AACAC,IAAAA,UAAAA;AACAC,IAAAA,OAAAA;IACA,cAAA,EAAgBC,WAAAA;AAChBC,eAAAA,oBAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,MAAAA;AACA,2DACA,WAAA,EAAab,sBAAAA;IACb,uBAAA,EAAyBA,sBAAAA;IACzB,iBAAA,EAAmBE,iBAAAA;AACnBY,cAAAA,KAAAA;IACA,kBAAA,EAAoBC,eAAAA;AACpBC,IAAAA,UAAAA;IACAC,QAAAA,EAAUC,wBAAAA;IACV,YAAA,EAAcC;AAChB,CAAA;;;;"}
@@ -14,6 +14,7 @@ import { createTokenService } from './api-token.mjs';
14
14
  import * as index from './transfer/index.mjs';
15
15
  import * as projectSettings from './project-settings.mjs';
16
16
  import { homepageService } from './homepage.mjs';
17
+ import debugDumpService from './debug-dump.mjs';
17
18
 
18
19
  // NOTE: Make sure to use default export for services overwritten in EE
19
20
  const contentApiTokenService = createTokenService('content-api');
@@ -37,7 +38,8 @@ var services = {
37
38
  transfer: index,
38
39
  'project-settings': projectSettings,
39
40
  encryption,
40
- homepage: homepageService
41
+ homepage: homepageService,
42
+ 'debug-dump': debugDumpService
41
43
  };
42
44
 
43
45
  export { services as default };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../server/src/services/index.ts"],"sourcesContent":["// NOTE: Make sure to use default export for services overwritten in EE\nimport auth from './auth';\nimport user from './user';\nimport role from './role';\nimport passport from './passport';\nimport metrics from './metrics';\nimport encryption from './encryption';\nimport * as token from './token';\nimport * as permission from './permission';\nimport * as contentType from './content-type';\nimport * as constants from './constants';\nimport * as condition from './condition';\nimport * as action from './action';\nimport { createTokenService } from './api-token';\nimport * as transfer from './transfer';\nimport * as projectSettings from './project-settings';\nimport { homepageService } from './homepage';\n\nconst contentApiTokenService = createTokenService('content-api');\nconst adminTokenService = createTokenService('admin');\n\n// TODO: TS - Export services one by one as this export is cjs\nexport default {\n auth,\n user,\n role,\n passport,\n token,\n permission,\n metrics,\n 'content-type': contentType,\n constants,\n condition,\n action,\n /** @deprecated Use 'api-token-content-api' instead */\n 'api-token': contentApiTokenService,\n 'api-token-content-api': contentApiTokenService,\n 'api-token-admin': adminTokenService,\n transfer,\n 'project-settings': projectSettings,\n encryption,\n homepage: homepageService,\n};\n"],"names":["contentApiTokenService","createTokenService","adminTokenService","auth","user","role","passport","token","permission","metrics","contentType","constants","condition","action","transfer","projectSettings","encryption","homepage","homepageService"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAkBA,MAAMA,yBAAyBC,kBAAAA,CAAmB,aAAA,CAAA;AAClD,MAAMC,oBAAoBD,kBAAAA,CAAmB,OAAA,CAAA;AAE7C;AACA,eAAe;AACbE,IAAAA,IAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,KAAAA;AACAC,IAAAA,UAAAA;AACAC,IAAAA,OAAAA;IACA,cAAA,EAAgBC,WAAAA;AAChBC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,MAAAA;AACA,2DACA,WAAA,EAAab,sBAAAA;IACb,uBAAA,EAAyBA,sBAAAA;IACzB,iBAAA,EAAmBE,iBAAAA;AACnBY,cAAAA,KAAAA;IACA,kBAAA,EAAoBC,eAAAA;AACpBC,IAAAA,UAAAA;IACAC,QAAAA,EAAUC;AACZ,CAAA;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../server/src/services/index.ts"],"sourcesContent":["// NOTE: Make sure to use default export for services overwritten in EE\nimport auth from './auth';\nimport user from './user';\nimport role from './role';\nimport passport from './passport';\nimport metrics from './metrics';\nimport encryption from './encryption';\nimport * as token from './token';\nimport * as permission from './permission';\nimport * as contentType from './content-type';\nimport * as constants from './constants';\nimport * as condition from './condition';\nimport * as action from './action';\nimport { createTokenService } from './api-token';\nimport * as transfer from './transfer';\nimport * as projectSettings from './project-settings';\nimport { homepageService } from './homepage';\nimport debugDump from './debug-dump';\n\nconst contentApiTokenService = createTokenService('content-api');\nconst adminTokenService = createTokenService('admin');\n\n// TODO: TS - Export services one by one as this export is cjs\nexport default {\n auth,\n user,\n role,\n passport,\n token,\n permission,\n metrics,\n 'content-type': contentType,\n constants,\n condition,\n action,\n /** @deprecated Use 'api-token-content-api' instead */\n 'api-token': contentApiTokenService,\n 'api-token-content-api': contentApiTokenService,\n 'api-token-admin': adminTokenService,\n transfer,\n 'project-settings': projectSettings,\n encryption,\n homepage: homepageService,\n 'debug-dump': debugDump,\n};\n"],"names":["contentApiTokenService","createTokenService","adminTokenService","auth","user","role","passport","token","permission","metrics","contentType","constants","condition","action","transfer","projectSettings","encryption","homepage","homepageService","debugDump"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAmBA,MAAMA,yBAAyBC,kBAAAA,CAAmB,aAAA,CAAA;AAClD,MAAMC,oBAAoBD,kBAAAA,CAAmB,OAAA,CAAA;AAE7C;AACA,eAAe;AACbE,IAAAA,IAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,KAAAA;AACAC,IAAAA,UAAAA;AACAC,IAAAA,OAAAA;IACA,cAAA,EAAgBC,WAAAA;AAChBC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,MAAAA;AACA,2DACA,WAAA,EAAab,sBAAAA;IACb,uBAAA,EAAyBA,sBAAAA;IACzB,iBAAA,EAAmBE,iBAAAA;AACnBY,cAAAA,KAAAA;IACA,kBAAA,EAAoBC,eAAAA;AACpBC,IAAAA,UAAAA;IACAC,QAAAA,EAAUC,eAAAA;IACV,YAAA,EAAcC;AAChB,CAAA;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var fp = require('lodash/fp');
3
+ var _ = require('lodash');
4
4
  var passportLocal = require('passport-local');
5
5
  var index = require('../../utils/index.js');
6
6
 
@@ -11,7 +11,7 @@ const createLocalStrategy = (strapi, middleware)=>{
11
11
  session: false
12
12
  }, (email, password, done)=>{
13
13
  return index.getService('auth').checkCredentials({
14
- email: fp.toLower(email),
14
+ email: _.toLower(email),
15
15
  password
16
16
  }).then(async ([error, user, message])=>{
17
17
  if (middleware) {
@@ -1 +1 @@
1
- {"version":3,"file":"local-strategy.js","sources":["../../../../../../server/src/services/passport/local-strategy.ts"],"sourcesContent":["import { toLower } from 'lodash/fp';\nimport { Strategy as LocalStrategy } from 'passport-local';\nimport type { Core } from '@strapi/types';\nimport { getService } from '../../utils';\n\nconst createLocalStrategy = (strapi: Core.Strapi, middleware?: any) => {\n return new LocalStrategy(\n {\n usernameField: 'email',\n passwordField: 'password',\n session: false,\n },\n (email: string, password: string, done: any) => {\n return getService('auth')\n .checkCredentials({ email: toLower(email), password })\n .then(async ([error, user, message]) => {\n if (middleware) {\n return middleware([error, user, message], done);\n }\n\n return done(error, user, message);\n })\n .catch((error) => done(error));\n }\n );\n};\n\nexport default createLocalStrategy;\n"],"names":["createLocalStrategy","strapi","middleware","LocalStrategy","usernameField","passwordField","session","email","password","done","getService","checkCredentials","toLower","then","error","user","message","catch"],"mappings":";;;;;;AAKA,MAAMA,mBAAAA,GAAsB,CAACC,MAAAA,EAAqBC,UAAAA,GAAAA;AAChD,IAAA,OAAO,IAAIC,sBAAAA,CACT;QACEC,aAAAA,EAAe,OAAA;QACfC,aAAAA,EAAe,UAAA;QACfC,OAAAA,EAAS;KACX,EACA,CAACC,OAAeC,QAAAA,EAAkBC,IAAAA,GAAAA;QAChC,OAAOC,gBAAAA,CAAW,MAAA,CAAA,CACfC,gBAAgB,CAAC;AAAEJ,YAAAA,KAAAA,EAAOK,UAAAA,CAAQL,KAAAA,CAAAA;AAAQC,YAAAA;AAAS,SAAA,CAAA,CACnDK,IAAI,CAAC,OAAO,CAACC,KAAAA,EAAOC,MAAMC,OAAAA,CAAQ,GAAA;AACjC,YAAA,IAAId,UAAAA,EAAY;AACd,gBAAA,OAAOA,UAAAA,CAAW;AAACY,oBAAAA,KAAAA;AAAOC,oBAAAA,IAAAA;AAAMC,oBAAAA;iBAAQ,EAAEP,IAAAA,CAAAA;AAC5C,YAAA;YAEA,OAAOA,IAAAA,CAAKK,OAAOC,IAAAA,EAAMC,OAAAA,CAAAA;AAC3B,QAAA,CAAA,CAAA,CACCC,KAAK,CAAC,CAACH,KAAAA,GAAUL,IAAAA,CAAKK,KAAAA,CAAAA,CAAAA;AAC3B,IAAA,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"local-strategy.js","sources":["../../../../../../server/src/services/passport/local-strategy.ts"],"sourcesContent":["import { toLower } from 'lodash';\n\nimport { Strategy as LocalStrategy } from 'passport-local';\nimport type { Core } from '@strapi/types';\nimport { getService } from '../../utils';\n\nconst createLocalStrategy = (strapi: Core.Strapi, middleware?: any) => {\n return new LocalStrategy(\n {\n usernameField: 'email',\n passwordField: 'password',\n session: false,\n },\n (email: string, password: string, done: any) => {\n return getService('auth')\n .checkCredentials({ email: toLower(email), password })\n .then(async ([error, user, message]) => {\n if (middleware) {\n return middleware([error, user, message], done);\n }\n\n return done(error, user, message);\n })\n .catch((error) => done(error));\n }\n );\n};\n\nexport default createLocalStrategy;\n"],"names":["createLocalStrategy","strapi","middleware","LocalStrategy","usernameField","passwordField","session","email","password","done","getService","checkCredentials","toLower","then","error","user","message","catch"],"mappings":";;;;;;AAMA,MAAMA,mBAAAA,GAAsB,CAACC,MAAAA,EAAqBC,UAAAA,GAAAA;AAChD,IAAA,OAAO,IAAIC,sBAAAA,CACT;QACEC,aAAAA,EAAe,OAAA;QACfC,aAAAA,EAAe,UAAA;QACfC,OAAAA,EAAS;KACX,EACA,CAACC,OAAeC,QAAAA,EAAkBC,IAAAA,GAAAA;QAChC,OAAOC,gBAAAA,CAAW,MAAA,CAAA,CACfC,gBAAgB,CAAC;AAAEJ,YAAAA,KAAAA,EAAOK,SAAAA,CAAQL,KAAAA,CAAAA;AAAQC,YAAAA;AAAS,SAAA,CAAA,CACnDK,IAAI,CAAC,OAAO,CAACC,KAAAA,EAAOC,MAAMC,OAAAA,CAAQ,GAAA;AACjC,YAAA,IAAId,UAAAA,EAAY;AACd,gBAAA,OAAOA,UAAAA,CAAW;AAACY,oBAAAA,KAAAA;AAAOC,oBAAAA,IAAAA;AAAMC,oBAAAA;iBAAQ,EAAEP,IAAAA,CAAAA;AAC5C,YAAA;YAEA,OAAOA,IAAAA,CAAKK,OAAOC,IAAAA,EAAMC,OAAAA,CAAAA;AAC3B,QAAA,CAAA,CAAA,CACCC,KAAK,CAAC,CAACH,KAAAA,GAAUL,IAAAA,CAAKK,KAAAA,CAAAA,CAAAA;AAC3B,IAAA,CAAA,CAAA;AAEJ;;;;"}
@@ -1,4 +1,4 @@
1
- import { toLower } from 'lodash/fp';
1
+ import { toLower } from 'lodash';
2
2
  import { Strategy } from 'passport-local';
3
3
  import { getService } from '../../utils/index.mjs';
4
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"local-strategy.mjs","sources":["../../../../../../server/src/services/passport/local-strategy.ts"],"sourcesContent":["import { toLower } from 'lodash/fp';\nimport { Strategy as LocalStrategy } from 'passport-local';\nimport type { Core } from '@strapi/types';\nimport { getService } from '../../utils';\n\nconst createLocalStrategy = (strapi: Core.Strapi, middleware?: any) => {\n return new LocalStrategy(\n {\n usernameField: 'email',\n passwordField: 'password',\n session: false,\n },\n (email: string, password: string, done: any) => {\n return getService('auth')\n .checkCredentials({ email: toLower(email), password })\n .then(async ([error, user, message]) => {\n if (middleware) {\n return middleware([error, user, message], done);\n }\n\n return done(error, user, message);\n })\n .catch((error) => done(error));\n }\n );\n};\n\nexport default createLocalStrategy;\n"],"names":["createLocalStrategy","strapi","middleware","LocalStrategy","usernameField","passwordField","session","email","password","done","getService","checkCredentials","toLower","then","error","user","message","catch"],"mappings":";;;;AAKA,MAAMA,mBAAAA,GAAsB,CAACC,MAAAA,EAAqBC,UAAAA,GAAAA;AAChD,IAAA,OAAO,IAAIC,QAAAA,CACT;QACEC,aAAAA,EAAe,OAAA;QACfC,aAAAA,EAAe,UAAA;QACfC,OAAAA,EAAS;KACX,EACA,CAACC,OAAeC,QAAAA,EAAkBC,IAAAA,GAAAA;QAChC,OAAOC,UAAAA,CAAW,MAAA,CAAA,CACfC,gBAAgB,CAAC;AAAEJ,YAAAA,KAAAA,EAAOK,OAAAA,CAAQL,KAAAA,CAAAA;AAAQC,YAAAA;AAAS,SAAA,CAAA,CACnDK,IAAI,CAAC,OAAO,CAACC,KAAAA,EAAOC,MAAMC,OAAAA,CAAQ,GAAA;AACjC,YAAA,IAAId,UAAAA,EAAY;AACd,gBAAA,OAAOA,UAAAA,CAAW;AAACY,oBAAAA,KAAAA;AAAOC,oBAAAA,IAAAA;AAAMC,oBAAAA;iBAAQ,EAAEP,IAAAA,CAAAA;AAC5C,YAAA;YAEA,OAAOA,IAAAA,CAAKK,OAAOC,IAAAA,EAAMC,OAAAA,CAAAA;AAC3B,QAAA,CAAA,CAAA,CACCC,KAAK,CAAC,CAACH,KAAAA,GAAUL,IAAAA,CAAKK,KAAAA,CAAAA,CAAAA;AAC3B,IAAA,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"local-strategy.mjs","sources":["../../../../../../server/src/services/passport/local-strategy.ts"],"sourcesContent":["import { toLower } from 'lodash';\n\nimport { Strategy as LocalStrategy } from 'passport-local';\nimport type { Core } from '@strapi/types';\nimport { getService } from '../../utils';\n\nconst createLocalStrategy = (strapi: Core.Strapi, middleware?: any) => {\n return new LocalStrategy(\n {\n usernameField: 'email',\n passwordField: 'password',\n session: false,\n },\n (email: string, password: string, done: any) => {\n return getService('auth')\n .checkCredentials({ email: toLower(email), password })\n .then(async ([error, user, message]) => {\n if (middleware) {\n return middleware([error, user, message], done);\n }\n\n return done(error, user, message);\n })\n .catch((error) => done(error));\n }\n );\n};\n\nexport default createLocalStrategy;\n"],"names":["createLocalStrategy","strapi","middleware","LocalStrategy","usernameField","passwordField","session","email","password","done","getService","checkCredentials","toLower","then","error","user","message","catch"],"mappings":";;;;AAMA,MAAMA,mBAAAA,GAAsB,CAACC,MAAAA,EAAqBC,UAAAA,GAAAA;AAChD,IAAA,OAAO,IAAIC,QAAAA,CACT;QACEC,aAAAA,EAAe,OAAA;QACfC,aAAAA,EAAe,UAAA;QACfC,OAAAA,EAAS;KACX,EACA,CAACC,OAAeC,QAAAA,EAAkBC,IAAAA,GAAAA;QAChC,OAAOC,UAAAA,CAAW,MAAA,CAAA,CACfC,gBAAgB,CAAC;AAAEJ,YAAAA,KAAAA,EAAOK,OAAAA,CAAQL,KAAAA,CAAAA;AAAQC,YAAAA;AAAS,SAAA,CAAA,CACnDK,IAAI,CAAC,OAAO,CAACC,KAAAA,EAAOC,MAAMC,OAAAA,CAAQ,GAAA;AACjC,YAAA,IAAId,UAAAA,EAAY;AACd,gBAAA,OAAOA,UAAAA,CAAW;AAACY,oBAAAA,KAAAA;AAAOC,oBAAAA,IAAAA;AAAMC,oBAAAA;iBAAQ,EAAEP,IAAAA,CAAAA;AAC5C,YAAA;YAEA,OAAOA,IAAAA,CAAKK,OAAOC,IAAAA,EAAMC,OAAAA,CAAAA;AAC3B,QAAA,CAAA,CAAA,CACCC,KAAK,CAAC,CAACH,KAAAA,GAAUL,IAAAA,CAAKK,KAAAA,CAAAA,CAAAA;AAC3B,IAAA,CAAA,CAAA;AAEJ;;;;"}
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  var passport$1 = require('koa-passport');
4
- var fp = require('lodash/fp');
5
4
  var localStrategy = require('./passport/local-strategy.js');
6
5
 
7
6
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -12,7 +11,7 @@ const authEventsMapper = {
12
11
  onConnectionSuccess: 'admin.auth.success',
13
12
  onConnectionError: 'admin.auth.error'
14
13
  };
15
- const valueIsFunctionType = ([, value])=>fp.isFunction(value);
14
+ const valueIsFunctionType = ([, value])=>typeof value === 'function';
16
15
  const keyIsValidEventName = ([key])=>{
17
16
  return Object.keys(strapi.service('admin::passport').authEventsMapper).includes(key);
18
17
  };
@@ -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,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;;;;"}
1
+ {"version":3,"file":"passport.js","sources":["../../../../../server/src/services/passport.ts"],"sourcesContent":["import passport from 'koa-passport';\nimport type { Strategy } from 'passport-local';\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]) => typeof value === 'function';\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","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":";;;;;;;;;AAKA,MAAMA,gBAAAA,GAAmB;IACvBC,mBAAAA,EAAqB,oBAAA;IACrBC,iBAAAA,EAAmB;AACrB,CAAA;AAEA,MAAMC,sBAAsB,CAAC,GAAGC,KAAAA,CAAkB,GAAK,OAAOA,KAAAA,KAAU,UAAA;AACxE,MAAMC,mBAAAA,GAAsB,CAAC,CAACC,GAAAA,CAAS,GAAA;IACrC,OAAOC,MAAAA,CAAOC,IAAI,CAACC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA,CAAmBV,gBAAgB,CAAA,CAAEW,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,EAAEjB,gBAAgB,EAAE,GAAGS,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;IAE5C,MAAMQ,SAAAA,GAAYX,OAAOY,OAAO,CAACJ,QAAQK,MAAM,CAACf,mBAAAA,CAAAA,CAAqBe,MAAM,CAACjB,mBAAAA,CAAAA;AAE5E,IAAA,KAAK,MAAM,CAACkB,SAAAA,EAAWC,OAAAA,CAAQ,IAAIJ,SAAAA,CAAW;;AAE5CT,QAAAA,MAAAA,CAAOc,QAAQ,CAACC,EAAE,CAACxB,gBAAgB,CAACqB,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;AAAuBZ,IAAAA;AAAiB,CAAA;;;;"}
@@ -1,12 +1,11 @@
1
1
  import passport$1 from 'koa-passport';
2
- import { isFunction } from 'lodash/fp';
3
2
  import createLocalStrategy from './passport/local-strategy.mjs';
4
3
 
5
4
  const authEventsMapper = {
6
5
  onConnectionSuccess: 'admin.auth.success',
7
6
  onConnectionError: 'admin.auth.error'
8
7
  };
9
- const valueIsFunctionType = ([, value])=>isFunction(value);
8
+ const valueIsFunctionType = ([, value])=>typeof value === 'function';
10
9
  const keyIsValidEventName = ([key])=>{
11
10
  return Object.keys(strapi.service('admin::passport').authEventsMapper).includes(key);
12
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"passport.mjs","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,UAAAA,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,mBAAAA,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.mjs","sources":["../../../../../server/src/services/passport.ts"],"sourcesContent":["import passport from 'koa-passport';\nimport type { Strategy } from 'passport-local';\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]) => typeof value === 'function';\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","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":";;;AAKA,MAAMA,gBAAAA,GAAmB;IACvBC,mBAAAA,EAAqB,oBAAA;IACrBC,iBAAAA,EAAmB;AACrB,CAAA;AAEA,MAAMC,sBAAsB,CAAC,GAAGC,KAAAA,CAAkB,GAAK,OAAOA,KAAAA,KAAU,UAAA;AACxE,MAAMC,mBAAAA,GAAsB,CAAC,CAACC,GAAAA,CAAS,GAAA;IACrC,OAAOC,MAAAA,CAAOC,IAAI,CAACC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA,CAAmBV,gBAAgB,CAAA,CAAEW,QAAQ,CAACL,GAAAA,CAAAA;AAClF,CAAA;AAEA,MAAMM,wBAAwB,IAAM;QAACC,mBAAAA,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,EAAEjB,gBAAgB,EAAE,GAAGS,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;IAE5C,MAAMQ,SAAAA,GAAYX,OAAOY,OAAO,CAACJ,QAAQK,MAAM,CAACf,mBAAAA,CAAAA,CAAqBe,MAAM,CAACjB,mBAAAA,CAAAA;AAE5E,IAAA,KAAK,MAAM,CAACkB,SAAAA,EAAWC,OAAAA,CAAQ,IAAIJ,SAAAA,CAAW;;AAE5CT,QAAAA,MAAAA,CAAOc,QAAQ,CAACC,EAAE,CAACxB,gBAAgB,CAACqB,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;AAAuBZ,IAAAA;AAAiB,CAAA;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var fp = require('lodash/fp');
3
+ var _ = require('lodash');
4
4
  var permissions = require('@strapi/permissions');
5
5
  var index = require('../../domain/permission/index.js');
6
6
  var index$1 = require('../../utils/index.js');
@@ -25,7 +25,7 @@ var createPermissionEngine = ((params)=>{
25
25
  const properties = permission.properties || {};
26
26
  // Only keep the properties allowed by the action (action.applyToProperties)
27
27
  const propertiesName = Object.keys(properties);
28
- const invalidProperties = fp.difference(propertiesName, // @ts-expect-error - applyToProperties is defined inside the options of an action
28
+ const invalidProperties = _.difference(propertiesName, // @ts-expect-error - applyToProperties is defined inside the options of an action
29
29
  action.applyToProperties || propertiesName);
30
30
  const permissionWithSanitizedProperties = invalidProperties.reduce(// @ts-expect-error - fix reduce, property should be a string but it's actually the permission object
31
31
  (property)=>index.default.deleteProperty(property, permission), permission);
@@ -34,7 +34,7 @@ var createPermissionEngine = ((params)=>{
34
34
  * Ignore the permission if the fields property is an empty array (access to no field)
35
35
  */ .on('after-format::validate.permission', ({ permission })=>{
36
36
  const { fields } = permission.properties;
37
- if (fp.isArray(fields) && fp.isEmpty(fields)) {
37
+ if (Array.isArray(fields) && _.isEmpty(fields)) {
38
38
  return false;
39
39
  }
40
40
  });
@@ -57,7 +57,7 @@ var createPermissionEngine = ((params)=>{
57
57
  },
58
58
  /**
59
59
  * Check many permissions based on an ability
60
- */ checkMany: fp.curry((ability, permissions)=>{
60
+ */ checkMany: _.curry((ability, permissions)=>{
61
61
  // @ts-expect-error - Permissions does not contain any field property
62
62
  return permissions.map(({ action, subject, field })=>ability.can(action, subject, field));
63
63
  })
@@ -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 { 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 engineInstance = 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 engineInstance.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 engineInstance.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 engineInstance.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","engineInstance","engine","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","permissions","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;IAEtB,MAAME,cAAAA,GAAiBC,kBAAAA,CACpBC,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,eAAeyB,KAAK;AAC7B,QAAA,CAAA;AAEA;;;QAIA,MAAMC,qBAAoBC,IAAe,EAAA;AACvC,YAAA,MAAMC,WAAAA,GAAe,MAAMC,kBAAAA,CAAW,YAAA,CAAA,CAAcC,mBAAmB,CAACH,IAAAA,CAAAA;YAExE,OAAO3B,cAAAA,CAAe+B,eAAe,CAACH,WAAAA,EAAaD,IAAAA,CAAAA;AACrD,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMK,oBAAAA,CAAAA,CAAqBC,gBAA8B,EAAEC,KAAgB,EAAA;YACzE,OAAOlC,cAAAA,CAAe+B,eAAe,CAACE,gBAAAA,EAAyBC,KAAAA,CAAAA;AACjE,QAAA,CAAA;AAEA;;QAGAC,SAAAA,EAAWC,QAAAA,CAAM,CAACC,OAAAA,EAAkBT,WAAAA,GAAAA;;AAElC,YAAA,OAAOA,YAAYU,GAAG,CAAC,CAAC,EAAEjC,MAAM,EAAEkC,OAAO,EAAEC,KAAK,EAAE,GAAKH,OAAAA,CAAQI,GAAG,CAACpC,QAAQkC,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, isEmpty, difference } from 'lodash';\n\nimport { 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 engineInstance = 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 (Array.isArray(fields) && isEmpty(fields)) {\n return false;\n }\n });\n\n return {\n get hooks() {\n return engineInstance.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 engineInstance.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 engineInstance.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","engineInstance","engine","new","on","permission","action","get","strapi","log","debug","properties","propertiesName","Object","keys","invalidProperties","difference","applyToProperties","permissionWithSanitizedProperties","reduce","property","permissionDomain","deleteProperty","fields","Array","isArray","isEmpty","hooks","generateUserAbility","user","permissions","getService","findUserPermissions","generateAbility","generateTokenAbility","tokenPermissions","owner","checkMany","curry","ability","map","subject","field","can"],"mappings":";;;;;;;AASA,6BAAe,CAAA,CAACA,MAAAA,GAAAA;IACd,MAAM,EAAEC,SAAS,EAAE,GAAGD,MAAAA;IAEtB,MAAME,cAAAA,GAAiBC,kBAAAA,CACpBC,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,YAAAA,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;AAExC,QAAA,IAAIa,KAAAA,CAAMC,OAAO,CAACF,MAAAA,CAAAA,IAAWG,UAAQH,MAAAA,CAAAA,EAAS;YAC5C,OAAO,KAAA;AACT,QAAA;AACF,IAAA,CAAA,CAAA;IAEF,OAAO;AACL,QAAA,IAAII,KAAAA,CAAAA,GAAQ;AACV,YAAA,OAAO1B,eAAe0B,KAAK;AAC7B,QAAA,CAAA;AAEA;;;QAIA,MAAMC,qBAAoBC,IAAe,EAAA;AACvC,YAAA,MAAMC,WAAAA,GAAe,MAAMC,kBAAAA,CAAW,YAAA,CAAA,CAAcC,mBAAmB,CAACH,IAAAA,CAAAA;YAExE,OAAO5B,cAAAA,CAAegC,eAAe,CAACH,WAAAA,EAAaD,IAAAA,CAAAA;AACrD,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMK,oBAAAA,CAAAA,CAAqBC,gBAA8B,EAAEC,KAAgB,EAAA;YACzE,OAAOnC,cAAAA,CAAegC,eAAe,CAACE,gBAAAA,EAAyBC,KAAAA,CAAAA;AACjE,QAAA,CAAA;AAEA;;QAGAC,SAAAA,EAAWC,OAAAA,CAAM,CAACC,OAAAA,EAAkBT,WAAAA,GAAAA;;AAElC,YAAA,OAAOA,YAAYU,GAAG,CAAC,CAAC,EAAElC,MAAM,EAAEmC,OAAO,EAAEC,KAAK,EAAE,GAAKH,OAAAA,CAAQI,GAAG,CAACrC,QAAQmC,OAAAA,EAASC,KAAAA,CAAAA,CAAAA;AACtF,QAAA,CAAA;AACF,KAAA;AACF,CAAA;;;;"}
@@ -1,4 +1,4 @@
1
- import { difference, isArray, isEmpty, curry } from 'lodash/fp';
1
+ import { difference, isEmpty, curry } from 'lodash';
2
2
  import { engine } from '@strapi/permissions';
3
3
  import permissionDomain from '../../domain/permission/index.mjs';
4
4
  import { getService } from '../../utils/index.mjs';
@@ -32,7 +32,7 @@ var createPermissionEngine = ((params)=>{
32
32
  * Ignore the permission if the fields property is an empty array (access to no field)
33
33
  */ .on('after-format::validate.permission', ({ permission })=>{
34
34
  const { fields } = permission.properties;
35
- if (isArray(fields) && isEmpty(fields)) {
35
+ if (Array.isArray(fields) && isEmpty(fields)) {
36
36
  return false;
37
37
  }
38
38
  });