@strapi/admin 5.0.0-beta.1 → 5.0.0-beta.11

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 (1115) hide show
  1. package/dist/admin/AdminSeatInfo-88MFOtJf.mjs +92 -0
  2. package/dist/admin/AdminSeatInfo-88MFOtJf.mjs.map +1 -0
  3. package/dist/admin/AdminSeatInfo-bN561B3v.js +96 -0
  4. package/dist/admin/AdminSeatInfo-bN561B3v.js.map +1 -0
  5. package/dist/admin/ApplicationInfoPage-QuYJM0kA.js +658 -0
  6. package/dist/admin/ApplicationInfoPage-QuYJM0kA.js.map +1 -0
  7. package/dist/admin/ApplicationInfoPage-e-khXcZQ.mjs +631 -0
  8. package/dist/admin/ApplicationInfoPage-e-khXcZQ.mjs.map +1 -0
  9. package/dist/admin/AuthResponse-PxLid1A-.js +81 -0
  10. package/dist/admin/AuthResponse-PxLid1A-.js.map +1 -0
  11. package/dist/admin/AuthResponse-pxi-Fo2T.mjs +57 -0
  12. package/dist/admin/AuthResponse-pxi-Fo2T.mjs.map +1 -0
  13. package/dist/admin/AuthenticatedLayout-040fsD08.js +1193 -0
  14. package/dist/admin/AuthenticatedLayout-040fsD08.js.map +1 -0
  15. package/dist/admin/AuthenticatedLayout-Ou5qhSr4.mjs +1161 -0
  16. package/dist/admin/AuthenticatedLayout-Ou5qhSr4.mjs.map +1 -0
  17. package/dist/admin/ContentBox-3MRTNw0X.js +43 -0
  18. package/dist/admin/ContentBox-3MRTNw0X.js.map +1 -0
  19. package/dist/admin/ContentBox-9LBDzws0.mjs +41 -0
  20. package/dist/admin/ContentBox-9LBDzws0.mjs.map +1 -0
  21. package/dist/admin/CreateActionEE-Yfp4hs7a.mjs +49 -0
  22. package/dist/admin/CreateActionEE-Yfp4hs7a.mjs.map +1 -0
  23. package/dist/admin/CreateActionEE-uqyKLxwI.js +76 -0
  24. package/dist/admin/CreateActionEE-uqyKLxwI.js.map +1 -0
  25. package/dist/admin/CreatePage-P0Nz_ayl.mjs +13 -0
  26. package/dist/admin/CreatePage-P0Nz_ayl.mjs.map +1 -0
  27. package/dist/admin/CreatePage-SkKjFqP6.mjs +243 -0
  28. package/dist/admin/CreatePage-SkKjFqP6.mjs.map +1 -0
  29. package/dist/admin/CreatePage-mQUbZZJv.js +18 -0
  30. package/dist/admin/CreatePage-mQUbZZJv.js.map +1 -0
  31. package/dist/admin/CreatePage-taYHLGep.js +269 -0
  32. package/dist/admin/CreatePage-taYHLGep.js.map +1 -0
  33. package/dist/admin/CreateView-ClT1OHUe.mjs +13 -0
  34. package/dist/admin/CreateView-ClT1OHUe.mjs.map +1 -0
  35. package/dist/admin/CreateView-PuVH0YQf.mjs +13 -0
  36. package/dist/admin/CreateView-PuVH0YQf.mjs.map +1 -0
  37. package/dist/admin/CreateView-iUA3lEYs.js +17 -0
  38. package/dist/admin/CreateView-iUA3lEYs.js.map +1 -0
  39. package/dist/admin/CreateView-oRYdhduP.js +17 -0
  40. package/dist/admin/CreateView-oRYdhduP.js.map +1 -0
  41. package/dist/admin/EditPage-SVzJI-dH.mjs +271 -0
  42. package/dist/admin/EditPage-SVzJI-dH.mjs.map +1 -0
  43. package/dist/admin/EditPage-_caeCOYK.js +297 -0
  44. package/dist/admin/EditPage-_caeCOYK.js.map +1 -0
  45. package/dist/admin/EditPage-arCsYBox.mjs +737 -0
  46. package/dist/admin/EditPage-arCsYBox.mjs.map +1 -0
  47. package/dist/admin/EditPage-bDO4OJc8.mjs +322 -0
  48. package/dist/admin/EditPage-bDO4OJc8.mjs.map +1 -0
  49. package/dist/admin/EditPage-q_7kn0JT.js +351 -0
  50. package/dist/admin/EditPage-q_7kn0JT.js.map +1 -0
  51. package/dist/admin/EditPage-rxs9-apI.js +762 -0
  52. package/dist/admin/EditPage-rxs9-apI.js.map +1 -0
  53. package/dist/admin/EditView-nfJOf2A4.mjs +332 -0
  54. package/dist/admin/EditView-nfJOf2A4.mjs.map +1 -0
  55. package/dist/admin/EditView-tAF5eQf_.js +358 -0
  56. package/dist/admin/EditView-tAF5eQf_.js.map +1 -0
  57. package/dist/admin/EditViewPage-KAIuwIw2.mjs +817 -0
  58. package/dist/admin/EditViewPage-KAIuwIw2.mjs.map +1 -0
  59. package/dist/admin/EditViewPage-O3dTB0ur.js +849 -0
  60. package/dist/admin/EditViewPage-O3dTB0ur.js.map +1 -0
  61. package/dist/admin/EventsTable-726AT6mO.js +36 -0
  62. package/dist/admin/EventsTable-726AT6mO.js.map +1 -0
  63. package/dist/admin/EventsTable-Bv-PH0PC.mjs +32 -0
  64. package/dist/admin/EventsTable-Bv-PH0PC.mjs.map +1 -0
  65. package/dist/admin/HomePage-3JDMO4LG.js +15 -0
  66. package/dist/admin/HomePage-3JDMO4LG.js.map +1 -0
  67. package/dist/admin/HomePage-QFIF1udT.js +604 -0
  68. package/dist/admin/HomePage-QFIF1udT.js.map +1 -0
  69. package/dist/admin/HomePage-pgsuFIh7.mjs +579 -0
  70. package/dist/admin/HomePage-pgsuFIh7.mjs.map +1 -0
  71. package/dist/admin/HomePage-rPlX1rrg.mjs +11 -0
  72. package/dist/admin/HomePage-rPlX1rrg.mjs.map +1 -0
  73. package/dist/admin/InstalledPluginsPage-XP8i3w5T.js +122 -0
  74. package/dist/admin/InstalledPluginsPage-XP8i3w5T.js.map +1 -0
  75. package/dist/admin/InstalledPluginsPage-uHFuUx41.mjs +97 -0
  76. package/dist/admin/InstalledPluginsPage-uHFuUx41.mjs.map +1 -0
  77. package/dist/admin/Layout-6zLg6LxH.mjs +215 -0
  78. package/dist/admin/Layout-6zLg6LxH.mjs.map +1 -0
  79. package/dist/admin/Layout-PemM8Wd3.js +242 -0
  80. package/dist/admin/Layout-PemM8Wd3.js.map +1 -0
  81. package/dist/admin/ListPage-2nnKxEVE.mjs +310 -0
  82. package/dist/admin/ListPage-2nnKxEVE.mjs.map +1 -0
  83. package/dist/admin/ListPage-43lsZ_Bp.js +515 -0
  84. package/dist/admin/ListPage-43lsZ_Bp.js.map +1 -0
  85. package/dist/admin/ListPage-6iZqugjj.js +335 -0
  86. package/dist/admin/ListPage-6iZqugjj.js.map +1 -0
  87. package/dist/admin/ListPage-SY0bk22Q.mjs +531 -0
  88. package/dist/admin/ListPage-SY0bk22Q.mjs.map +1 -0
  89. package/dist/admin/ListPage-Tra1QVDy.js +293 -0
  90. package/dist/admin/ListPage-Tra1QVDy.js.map +1 -0
  91. package/dist/admin/ListPage-WvDXi585.mjs +487 -0
  92. package/dist/admin/ListPage-WvDXi585.mjs.map +1 -0
  93. package/dist/admin/ListPage-c83R7AzC.js +15 -0
  94. package/dist/admin/ListPage-c83R7AzC.js.map +1 -0
  95. package/dist/admin/ListPage-jhOQGhI7.mjs +268 -0
  96. package/dist/admin/ListPage-jhOQGhI7.mjs.map +1 -0
  97. package/dist/admin/ListPage-liMIiZMU.mjs +11 -0
  98. package/dist/admin/ListPage-liMIiZMU.mjs.map +1 -0
  99. package/dist/admin/ListPage-lpSNR8MY.js +559 -0
  100. package/dist/admin/ListPage-lpSNR8MY.js.map +1 -0
  101. package/dist/admin/ListView-QVoBfZkP.js +237 -0
  102. package/dist/admin/ListView-QVoBfZkP.js.map +1 -0
  103. package/dist/admin/ListView-QlFkFf_V.mjs +211 -0
  104. package/dist/admin/ListView-QlFkFf_V.mjs.map +1 -0
  105. package/dist/admin/ListView-mObmenTh.mjs +200 -0
  106. package/dist/admin/ListView-mObmenTh.mjs.map +1 -0
  107. package/dist/admin/ListView-wx2Wg7AQ.js +226 -0
  108. package/dist/admin/ListView-wx2Wg7AQ.js.map +1 -0
  109. package/dist/admin/Login-9bc4EDrd.js +35 -0
  110. package/dist/admin/Login-9bc4EDrd.js.map +1 -0
  111. package/dist/admin/Login-qvyDXOZp.mjs +31 -0
  112. package/dist/admin/Login-qvyDXOZp.mjs.map +1 -0
  113. package/dist/admin/MagicLinkEE-gwhEOSq0.mjs +27 -0
  114. package/dist/admin/MagicLinkEE-gwhEOSq0.mjs.map +1 -0
  115. package/dist/admin/MagicLinkEE-wa0KdGZM.js +31 -0
  116. package/dist/admin/MagicLinkEE-wa0KdGZM.js.map +1 -0
  117. package/dist/admin/MarketplacePage-3Z3e-oDS.mjs +971 -0
  118. package/dist/admin/MarketplacePage-3Z3e-oDS.mjs.map +1 -0
  119. package/dist/admin/MarketplacePage-e9h-T9Yf.js +1001 -0
  120. package/dist/admin/MarketplacePage-e9h-T9Yf.js.map +1 -0
  121. package/dist/admin/Ornaments-jAwgQeK0.mjs +209 -0
  122. package/dist/admin/Ornaments-jAwgQeK0.mjs.map +1 -0
  123. package/dist/admin/Ornaments-sFPQPOtb.js +214 -0
  124. package/dist/admin/Ornaments-sFPQPOtb.js.map +1 -0
  125. package/dist/admin/Permissions-CE17oEnM.js +2022 -0
  126. package/dist/admin/Permissions-CE17oEnM.js.map +1 -0
  127. package/dist/admin/Permissions-VlgWwFsK.mjs +1986 -0
  128. package/dist/admin/Permissions-VlgWwFsK.mjs.map +1 -0
  129. package/dist/admin/PrivateRoute-SKQvazOx.js +22 -0
  130. package/dist/admin/PrivateRoute-SKQvazOx.js.map +1 -0
  131. package/dist/admin/PrivateRoute-nUWu4Q7I.mjs +20 -0
  132. package/dist/admin/PrivateRoute-nUWu4Q7I.mjs.map +1 -0
  133. package/dist/admin/ProfilePage-oTScHwyK.mjs +387 -0
  134. package/dist/admin/ProfilePage-oTScHwyK.mjs.map +1 -0
  135. package/dist/admin/ProfilePage-pllDh5dd.js +415 -0
  136. package/dist/admin/ProfilePage-pllDh5dd.js.map +1 -0
  137. package/dist/admin/PurchaseAuditLogs-6_ie0YzN.mjs +49 -0
  138. package/dist/admin/PurchaseAuditLogs-6_ie0YzN.mjs.map +1 -0
  139. package/dist/admin/PurchaseAuditLogs-I3m6LuoA.js +53 -0
  140. package/dist/admin/PurchaseAuditLogs-I3m6LuoA.js.map +1 -0
  141. package/dist/admin/PurchaseSingleSignOn--iKPscMp.mjs +52 -0
  142. package/dist/admin/PurchaseSingleSignOn--iKPscMp.mjs.map +1 -0
  143. package/dist/admin/PurchaseSingleSignOn-HBKmhjTH.js +56 -0
  144. package/dist/admin/PurchaseSingleSignOn-HBKmhjTH.js.map +1 -0
  145. package/dist/admin/SSOProviders-QBcyB9VI.js +60 -0
  146. package/dist/admin/SSOProviders-QBcyB9VI.js.map +1 -0
  147. package/dist/admin/SSOProviders-nMmBLr8g.mjs +58 -0
  148. package/dist/admin/SSOProviders-nMmBLr8g.mjs.map +1 -0
  149. package/dist/admin/SelectRoles-ZAZ-5C7_.js +115 -0
  150. package/dist/admin/SelectRoles-ZAZ-5C7_.js.map +1 -0
  151. package/dist/admin/SelectRoles-nihoDXHG.mjs +111 -0
  152. package/dist/admin/SelectRoles-nihoDXHG.mjs.map +1 -0
  153. package/dist/admin/SingleSignOnPage-WY9MZfnN.mjs +231 -0
  154. package/dist/admin/SingleSignOnPage-WY9MZfnN.mjs.map +1 -0
  155. package/dist/admin/SingleSignOnPage-tOX6gKDJ.js +256 -0
  156. package/dist/admin/SingleSignOnPage-tOX6gKDJ.js.map +1 -0
  157. package/dist/admin/Table-S0UNrz__.mjs +183 -0
  158. package/dist/admin/Table-S0UNrz__.mjs.map +1 -0
  159. package/dist/admin/Table-YODk-_Dd.js +205 -0
  160. package/dist/admin/Table-YODk-_Dd.js.map +1 -0
  161. package/dist/admin/Theme-QO8ntQqL.js +1240 -0
  162. package/dist/admin/Theme-QO8ntQqL.js.map +1 -0
  163. package/dist/admin/Theme-vNSAMTAv.mjs +1174 -0
  164. package/dist/admin/Theme-vNSAMTAv.mjs.map +1 -0
  165. package/dist/admin/TokenTypeSelect-0lJpg-Og.js +402 -0
  166. package/dist/admin/TokenTypeSelect-0lJpg-Og.js.map +1 -0
  167. package/dist/admin/TokenTypeSelect-TLOZ5MAR.mjs +374 -0
  168. package/dist/admin/TokenTypeSelect-TLOZ5MAR.mjs.map +1 -0
  169. package/dist/admin/UseCasePage-ehZx7Rwd.mjs +129 -0
  170. package/dist/admin/UseCasePage-ehZx7Rwd.mjs.map +1 -0
  171. package/dist/admin/UseCasePage-uJRpPeQz.js +155 -0
  172. package/dist/admin/UseCasePage-uJRpPeQz.js.map +1 -0
  173. package/dist/admin/admin-B6AW0Kov.mjs +318 -0
  174. package/dist/admin/admin-B6AW0Kov.mjs.map +1 -0
  175. package/dist/admin/admin-p0djr5G6.js +338 -0
  176. package/dist/admin/admin-p0djr5G6.js.map +1 -0
  177. package/dist/admin/apiTokens-YMUmHnrH.mjs +57 -0
  178. package/dist/admin/apiTokens-YMUmHnrH.mjs.map +1 -0
  179. package/dist/admin/apiTokens-YxfAnO7_.js +63 -0
  180. package/dist/admin/apiTokens-YxfAnO7_.js.map +1 -0
  181. package/dist/admin/ar-74XpZHjA.js +853 -0
  182. package/dist/admin/ar-74XpZHjA.js.map +1 -0
  183. package/dist/admin/ar-gTQs8p7A.mjs +832 -0
  184. package/dist/admin/ar-gTQs8p7A.mjs.map +1 -0
  185. package/dist/admin/ca-A-U5stlG.mjs +520 -0
  186. package/dist/admin/ca-A-U5stlG.mjs.map +1 -0
  187. package/dist/admin/ca-tfhzbe_0.js +538 -0
  188. package/dist/admin/ca-tfhzbe_0.js.map +1 -0
  189. package/dist/admin/constants-lyc5iHQ_.mjs +51 -0
  190. package/dist/admin/constants-lyc5iHQ_.mjs.map +1 -0
  191. package/dist/admin/constants-qyti_7np.js +55 -0
  192. package/dist/admin/constants-qyti_7np.js.map +1 -0
  193. package/dist/admin/cs-iYqoHUVt.mjs +166 -0
  194. package/dist/admin/cs-iYqoHUVt.mjs.map +1 -0
  195. package/dist/admin/cs-sS-228vY.js +179 -0
  196. package/dist/admin/cs-sS-228vY.js.map +1 -0
  197. package/dist/admin/de-og0YSnla.js +532 -0
  198. package/dist/admin/de-og0YSnla.js.map +1 -0
  199. package/dist/admin/de-uZBjRd6a.mjs +514 -0
  200. package/dist/admin/de-uZBjRd6a.mjs.map +1 -0
  201. package/dist/admin/dk-GtDhDxRc.js +452 -0
  202. package/dist/admin/dk-GtDhDxRc.js.map +1 -0
  203. package/dist/admin/dk-nXAO32DE.mjs +434 -0
  204. package/dist/admin/dk-nXAO32DE.mjs.map +1 -0
  205. package/dist/admin/ee.js +12 -0
  206. package/dist/admin/ee.js.map +1 -0
  207. package/dist/admin/ee.mjs +3 -0
  208. package/dist/admin/ee.mjs.map +1 -0
  209. package/dist/admin/en-GunF9CPV.mjs +786 -0
  210. package/dist/admin/en-GunF9CPV.mjs.map +1 -0
  211. package/dist/admin/en-Wdy8NEIO.js +807 -0
  212. package/dist/admin/en-Wdy8NEIO.js.map +1 -0
  213. package/dist/admin/es-TQtY4G8X.js +615 -0
  214. package/dist/admin/es-TQtY4G8X.js.map +1 -0
  215. package/dist/admin/es-i0dEHPPQ.mjs +595 -0
  216. package/dist/admin/es-i0dEHPPQ.mjs.map +1 -0
  217. package/dist/admin/eu-SRdPRyQu.js +645 -0
  218. package/dist/admin/eu-SRdPRyQu.js.map +1 -0
  219. package/dist/admin/eu-wFmYHERY.mjs +625 -0
  220. package/dist/admin/eu-wFmYHERY.mjs.map +1 -0
  221. package/dist/admin/fr-GW5-kEO9.js +571 -0
  222. package/dist/admin/fr-GW5-kEO9.js.map +1 -0
  223. package/dist/admin/fr-OI7VyC_k.mjs +550 -0
  224. package/dist/admin/fr-OI7VyC_k.mjs.map +1 -0
  225. package/dist/admin/gu-z6qqOLRh.js +438 -0
  226. package/dist/admin/gu-z6qqOLRh.js.map +1 -0
  227. package/dist/admin/gu-zSaMc-a6.mjs +429 -0
  228. package/dist/admin/gu-zSaMc-a6.mjs.map +1 -0
  229. package/dist/admin/he-CLdZZ_n1.js +329 -0
  230. package/dist/admin/he-CLdZZ_n1.js.map +1 -0
  231. package/dist/admin/he-YzAGShlQ.mjs +315 -0
  232. package/dist/admin/he-YzAGShlQ.mjs.map +1 -0
  233. package/dist/admin/hi-3pMoYe6q.js +537 -0
  234. package/dist/admin/hi-3pMoYe6q.js.map +1 -0
  235. package/dist/admin/hi-ZQ4t6UdY.mjs +519 -0
  236. package/dist/admin/hi-ZQ4t6UdY.mjs.map +1 -0
  237. package/dist/admin/hu-O1FJoY8c.mjs +625 -0
  238. package/dist/admin/hu-O1FJoY8c.mjs.map +1 -0
  239. package/dist/admin/hu-VxIqV1X0.js +645 -0
  240. package/dist/admin/hu-VxIqV1X0.js.map +1 -0
  241. package/dist/admin/id-Lb_0kPQU.mjs +290 -0
  242. package/dist/admin/id-Lb_0kPQU.mjs.map +1 -0
  243. package/dist/admin/id-cUUpuxZO.js +303 -0
  244. package/dist/admin/id-cUUpuxZO.js.map +1 -0
  245. package/dist/admin/index-7Wlj8eA7.mjs +5445 -0
  246. package/dist/admin/index-7Wlj8eA7.mjs.map +1 -0
  247. package/dist/admin/index-PPLoirnr.js +5524 -0
  248. package/dist/admin/index-PPLoirnr.js.map +1 -0
  249. package/dist/admin/index.js +33 -27
  250. package/dist/admin/index.js.map +1 -1
  251. package/dist/admin/index.mjs +3 -3
  252. package/dist/admin/it-136monzD.mjs +299 -0
  253. package/dist/admin/it-136monzD.mjs.map +1 -0
  254. package/dist/admin/it-m8H0rXTP.js +312 -0
  255. package/dist/admin/it-m8H0rXTP.js.map +1 -0
  256. package/dist/admin/ja-0-FUC0T4.mjs +434 -0
  257. package/dist/admin/ja-0-FUC0T4.mjs.map +1 -0
  258. package/dist/admin/ja-jhqUhh7F.js +452 -0
  259. package/dist/admin/ja-jhqUhh7F.js.map +1 -0
  260. package/dist/admin/ko-Fq49QS3z.js +451 -0
  261. package/dist/admin/ko-Fq49QS3z.js.map +1 -0
  262. package/dist/admin/ko-H3Y8GpnD.mjs +433 -0
  263. package/dist/admin/ko-H3Y8GpnD.mjs.map +1 -0
  264. package/dist/admin/ml-NPdcpJoN.mjs +519 -0
  265. package/dist/admin/ml-NPdcpJoN.mjs.map +1 -0
  266. package/dist/admin/ml-mLJM4sQP.js +537 -0
  267. package/dist/admin/ml-mLJM4sQP.js.map +1 -0
  268. package/dist/admin/ms-NDmpSkMY.js +213 -0
  269. package/dist/admin/ms-NDmpSkMY.js.map +1 -0
  270. package/dist/admin/ms-v9c434YI.mjs +200 -0
  271. package/dist/admin/ms-v9c434YI.mjs.map +1 -0
  272. package/dist/admin/nl-RREi1JAg.js +641 -0
  273. package/dist/admin/nl-RREi1JAg.js.map +1 -0
  274. package/dist/admin/nl-qHmOt3d1.mjs +621 -0
  275. package/dist/admin/nl-qHmOt3d1.mjs.map +1 -0
  276. package/dist/admin/no-2wT9Jd9n.js +313 -0
  277. package/dist/admin/no-2wT9Jd9n.js.map +1 -0
  278. package/dist/admin/no-XGZQN-Ji.mjs +300 -0
  279. package/dist/admin/no-XGZQN-Ji.mjs.map +1 -0
  280. package/dist/admin/pl-Id5YX-Pw.mjs +519 -0
  281. package/dist/admin/pl-Id5YX-Pw.mjs.map +1 -0
  282. package/dist/admin/pl-kU2npCRO.js +537 -0
  283. package/dist/admin/pl-kU2npCRO.js.map +1 -0
  284. package/dist/admin/pt-BR-0o0Gf-P8.mjs +588 -0
  285. package/dist/admin/pt-BR-0o0Gf-P8.mjs.map +1 -0
  286. package/dist/admin/pt-BR-R-dMJxPL.js +608 -0
  287. package/dist/admin/pt-BR-R-dMJxPL.js.map +1 -0
  288. package/dist/admin/pt-IygqsPYv.js +212 -0
  289. package/dist/admin/pt-IygqsPYv.js.map +1 -0
  290. package/dist/admin/pt-f52AXrxz.mjs +200 -0
  291. package/dist/admin/pt-f52AXrxz.mjs.map +1 -0
  292. package/dist/admin/ru-5TBoMH_2.js +766 -0
  293. package/dist/admin/ru-5TBoMH_2.js.map +1 -0
  294. package/dist/admin/ru-FpmG9SEf.mjs +745 -0
  295. package/dist/admin/ru-FpmG9SEf.mjs.map +1 -0
  296. package/dist/admin/sa-KUwV8aRB.mjs +519 -0
  297. package/dist/admin/sa-KUwV8aRB.mjs.map +1 -0
  298. package/dist/admin/sa-KmwTiEO5.js +537 -0
  299. package/dist/admin/sa-KmwTiEO5.js.map +1 -0
  300. package/dist/admin/selectors-RspXIUtJ.js +8 -0
  301. package/dist/admin/selectors-RspXIUtJ.js.map +1 -0
  302. package/dist/admin/selectors-jiFpk43E.mjs +6 -0
  303. package/dist/admin/selectors-jiFpk43E.mjs.map +1 -0
  304. package/dist/admin/sk-IV2uPmXo.js +503 -0
  305. package/dist/admin/sk-IV2uPmXo.js.map +1 -0
  306. package/dist/admin/sk-g_1C955P.mjs +483 -0
  307. package/dist/admin/sk-g_1C955P.mjs.map +1 -0
  308. package/dist/admin/src/StrapiApp.d.ts +27 -83
  309. package/dist/admin/src/components/ConfirmDialog.d.ts +17 -7
  310. package/dist/admin/src/components/Context.d.ts +6 -0
  311. package/dist/admin/src/components/Filters.d.ts +10 -9
  312. package/dist/admin/src/components/Form.d.ts +18 -4
  313. package/dist/admin/src/components/FormInputs/Boolean.d.ts +2 -2
  314. package/dist/admin/src/components/FormInputs/Checkbox.d.ts +2 -2
  315. package/dist/admin/src/components/FormInputs/Date.d.ts +2 -2
  316. package/dist/admin/src/components/FormInputs/DateTime.d.ts +2 -2
  317. package/dist/admin/src/components/FormInputs/Email.d.ts +2 -1
  318. package/dist/admin/src/components/FormInputs/Enumeration.d.ts +2 -1
  319. package/dist/admin/src/components/FormInputs/Json.d.ts +3 -4
  320. package/dist/admin/src/components/FormInputs/Number.d.ts +2 -2
  321. package/dist/admin/src/components/FormInputs/Password.d.ts +2 -1
  322. package/dist/admin/src/components/FormInputs/Renderer.d.ts +2 -8
  323. package/dist/admin/src/components/FormInputs/String.d.ts +2 -4
  324. package/dist/admin/src/components/FormInputs/Textarea.d.ts +2 -1
  325. package/dist/admin/src/components/FormInputs/Time.d.ts +2 -2
  326. package/dist/admin/src/components/FormInputs/types.d.ts +1 -0
  327. package/dist/admin/src/components/Layouts/ActionLayout.d.ts +7 -0
  328. package/dist/admin/src/components/Layouts/ContentLayout.d.ts +6 -0
  329. package/dist/admin/src/components/Layouts/GridLayout.d.ts +17 -0
  330. package/dist/admin/src/components/Layouts/HeaderLayout.d.ts +19 -0
  331. package/dist/admin/src/components/Layouts/Layout.d.ts +18 -0
  332. package/dist/admin/src/components/MainNav/MainNav.d.ts +3 -0
  333. package/dist/admin/src/components/MainNav/NavBrand.d.ts +1 -0
  334. package/dist/admin/src/components/MainNav/NavLink.d.ts +24 -0
  335. package/dist/admin/src/components/MainNav/NavUser.d.ts +7 -0
  336. package/dist/admin/src/components/PageHelpers.d.ts +5 -1
  337. package/dist/admin/src/components/Table.d.ts +1 -1
  338. package/dist/admin/src/constants.d.ts +3 -3
  339. package/dist/admin/src/core/apis/rbac.d.ts +24 -0
  340. package/dist/admin/src/core/apis/router.d.ts +73 -0
  341. package/dist/admin/src/core/store/configure.d.ts +4 -21
  342. package/dist/admin/src/core/store/hooks.d.ts +3 -24
  343. package/dist/admin/src/ee.d.ts +5 -0
  344. package/dist/admin/src/features/Auth.d.ts +14 -3
  345. package/dist/admin/src/features/BackButton.d.ts +1 -1
  346. package/dist/admin/src/features/StrapiApp.d.ts +4 -1
  347. package/dist/admin/src/features/Tracking.d.ts +1 -1
  348. package/dist/admin/src/hooks/useAPIErrorHandler.d.ts +2 -4
  349. package/dist/admin/src/hooks/useAdminRoles.d.ts +2 -2
  350. package/dist/admin/src/hooks/useContentTypes.d.ts +3 -3
  351. package/dist/admin/src/hooks/useFetchClient.d.ts +4 -10
  352. package/dist/admin/src/hooks/useFocusInputField.d.ts +2 -5
  353. package/dist/admin/src/hooks/useMenu.d.ts +1 -1
  354. package/dist/admin/src/hooks/useRBAC.d.ts +33 -1
  355. package/dist/admin/src/hooks/useSettingsMenu.d.ts +2 -2
  356. package/dist/admin/src/index.d.ts +19 -7
  357. package/dist/admin/src/layouts/UnauthenticatedLayout.d.ts +4 -1
  358. package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -2
  359. package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.d.ts +9 -0
  360. package/dist/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.d.ts +6 -50
  361. package/dist/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.d.ts +1 -1
  362. package/dist/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.d.ts +4 -1
  363. package/dist/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.d.ts +1 -4
  364. package/dist/admin/src/pages/Settings/pages/Roles/components/HiddenAction.d.ts +2 -1
  365. package/dist/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.d.ts +2 -4
  366. package/dist/admin/src/pages/Settings/pages/Roles/components/RoleRow.d.ts +1 -1
  367. package/dist/admin/src/pages/Settings/pages/Roles/utils/constants.d.ts +3 -3
  368. package/dist/admin/src/pages/Settings/pages/Users/components/CreateActionCE.d.ts +2 -1
  369. package/dist/admin/src/pages/Settings/pages/Webhooks/components/Events.d.ts +2 -3
  370. package/dist/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.d.ts +2 -2
  371. package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
  372. package/dist/admin/src/render.d.ts +1 -0
  373. package/dist/admin/src/router.d.ts +7 -0
  374. package/dist/admin/src/selectors.d.ts +2 -16
  375. package/dist/admin/src/services/admin.d.ts +5 -5
  376. package/dist/admin/src/services/api.d.ts +11 -9
  377. package/dist/admin/src/services/apiTokens.d.ts +1 -1
  378. package/dist/admin/src/services/auth.d.ts +14 -12
  379. package/dist/admin/src/services/contentApi.d.ts +2 -2
  380. package/dist/admin/src/services/contentManager.d.ts +6 -2
  381. package/dist/admin/src/services/transferTokens.d.ts +2 -2
  382. package/dist/admin/src/services/users.d.ts +8 -8
  383. package/dist/admin/src/services/webhooks.d.ts +2 -2
  384. package/dist/admin/src/types/adminConfiguration.d.ts +90 -0
  385. package/dist/admin/src/utils/baseQuery.d.ts +10 -9
  386. package/dist/admin/src/utils/getFetchClient.d.ts +40 -10
  387. package/dist/admin/src/utils/normalizeAPIError.d.ts +2 -5
  388. package/dist/admin/src/utils/once.d.ts +1 -0
  389. package/dist/admin/src/utils/urls.d.ts +7 -1
  390. package/dist/admin/src/utils/users.d.ts +4 -4
  391. package/dist/admin/sv-Uv9nW9cN.js +640 -0
  392. package/dist/admin/sv-Uv9nW9cN.js.map +1 -0
  393. package/dist/admin/sv-lzyY1dsz.mjs +620 -0
  394. package/dist/admin/sv-lzyY1dsz.mjs.map +1 -0
  395. package/dist/admin/test.js +180 -2656
  396. package/dist/admin/test.js.map +1 -1
  397. package/dist/admin/test.mjs +176 -2652
  398. package/dist/admin/test.mjs.map +1 -1
  399. package/dist/admin/tests/mockData.d.ts +0 -1065
  400. package/dist/admin/tests/store.d.ts +0 -169
  401. package/dist/admin/tests/utils.d.ts +1 -177
  402. package/dist/admin/th-7LJ9Y8EL.mjs +284 -0
  403. package/dist/admin/th-7LJ9Y8EL.mjs.map +1 -0
  404. package/dist/admin/th-SXQwWjv6.js +297 -0
  405. package/dist/admin/th-SXQwWjv6.js.map +1 -0
  406. package/dist/admin/tr-09v-DLMg.mjs +581 -0
  407. package/dist/admin/tr-09v-DLMg.mjs.map +1 -0
  408. package/dist/admin/tr-RBQM-Vq5.js +601 -0
  409. package/dist/admin/tr-RBQM-Vq5.js.map +1 -0
  410. package/dist/admin/transferTokens-CNI0TFdA.mjs +69 -0
  411. package/dist/admin/transferTokens-CNI0TFdA.mjs.map +1 -0
  412. package/dist/admin/transferTokens-HcVXmOrq.js +76 -0
  413. package/dist/admin/transferTokens-HcVXmOrq.js.map +1 -0
  414. package/dist/admin/uk-38IblmOr.mjs +201 -0
  415. package/dist/admin/uk-38IblmOr.mjs.map +1 -0
  416. package/dist/admin/uk-5T4XFIKm.js +214 -0
  417. package/dist/admin/uk-5T4XFIKm.js.map +1 -0
  418. package/dist/admin/useAdminRoles-dbTJQETQ.mjs +28 -0
  419. package/dist/admin/useAdminRoles-dbTJQETQ.mjs.map +1 -0
  420. package/dist/admin/useAdminRoles-pDH2JAWH.js +50 -0
  421. package/dist/admin/useAdminRoles-pDH2JAWH.js.map +1 -0
  422. package/dist/admin/useEnterprise-DUs6BYlP.js +50 -0
  423. package/dist/admin/useEnterprise-DUs6BYlP.js.map +1 -0
  424. package/dist/admin/useEnterprise-jpsYZWzn.mjs +28 -0
  425. package/dist/admin/useEnterprise-jpsYZWzn.mjs.map +1 -0
  426. package/dist/admin/useLicenseLimitNotification-Nh_v-hN2.mjs +80 -0
  427. package/dist/admin/useLicenseLimitNotification-Nh_v-hN2.mjs.map +1 -0
  428. package/dist/admin/useLicenseLimitNotification-ZwMojvCa.js +105 -0
  429. package/dist/admin/useLicenseLimitNotification-ZwMojvCa.js.map +1 -0
  430. package/dist/admin/useLicenseLimits-FtmLXkwK.js +45 -0
  431. package/dist/admin/useLicenseLimits-FtmLXkwK.js.map +1 -0
  432. package/dist/admin/useLicenseLimits-Jy6E6qc2.mjs +23 -0
  433. package/dist/admin/useLicenseLimits-Jy6E6qc2.mjs.map +1 -0
  434. package/dist/admin/useWebhooks-bgdpL7W6.mjs +93 -0
  435. package/dist/admin/useWebhooks-bgdpL7W6.mjs.map +1 -0
  436. package/dist/admin/useWebhooks-opYGugiT.js +95 -0
  437. package/dist/admin/useWebhooks-opYGugiT.js.map +1 -0
  438. package/dist/admin/users-R5A0kUOV.js +33 -0
  439. package/dist/admin/users-R5A0kUOV.js.map +1 -0
  440. package/dist/admin/users-a4KTyEyc.mjs +30 -0
  441. package/dist/admin/users-a4KTyEyc.mjs.map +1 -0
  442. package/dist/admin/validation-208-EpBG.mjs +43 -0
  443. package/dist/admin/validation-208-EpBG.mjs.map +1 -0
  444. package/dist/admin/validation-YRSMzskg.js +65 -0
  445. package/dist/admin/validation-YRSMzskg.js.map +1 -0
  446. package/dist/admin/vi-mj-Smy3d.js +200 -0
  447. package/dist/admin/vi-mj-Smy3d.js.map +1 -0
  448. package/dist/admin/vi-ryNZtXtk.mjs +187 -0
  449. package/dist/admin/vi-ryNZtXtk.mjs.map +1 -0
  450. package/dist/admin/zh-6qF5HCOo.js +642 -0
  451. package/dist/admin/zh-6qF5HCOo.js.map +1 -0
  452. package/dist/admin/zh-Hans-HlxDUeVA.mjs +716 -0
  453. package/dist/admin/zh-Hans-HlxDUeVA.mjs.map +1 -0
  454. package/dist/admin/zh-Hans-eWSoi9-X.js +737 -0
  455. package/dist/admin/zh-Hans-eWSoi9-X.js.map +1 -0
  456. package/dist/admin/zh-WEteLuNm.mjs +622 -0
  457. package/dist/admin/zh-WEteLuNm.mjs.map +1 -0
  458. package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +2 -2
  459. package/dist/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.d.ts +2 -1
  460. package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
  461. package/dist/ee/admin/src/utils/cookies.d.ts +2 -0
  462. package/dist/ee/server/index.js +1254 -3011
  463. package/dist/ee/server/index.js.map +1 -1
  464. package/dist/ee/server/index.mjs +1259 -3013
  465. package/dist/ee/server/index.mjs.map +1 -1
  466. package/dist/package.json.d.ts +34 -46
  467. package/dist/server/index.js +170 -146
  468. package/dist/server/index.js.map +1 -1
  469. package/dist/server/index.mjs +147 -140
  470. package/dist/server/index.mjs.map +1 -1
  471. package/dist/server/src/bootstrap.d.ts.map +1 -1
  472. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  473. package/dist/server/src/controllers/webhooks.d.ts.map +1 -1
  474. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  475. package/dist/server/src/middlewares/rateLimit.d.ts.map +1 -1
  476. package/dist/server/src/register.d.ts.map +1 -1
  477. package/dist/server/src/routes/serve-admin-panel.d.ts.map +1 -1
  478. package/dist/server/src/services/index.d.ts +7 -2
  479. package/dist/server/src/services/index.d.ts.map +1 -1
  480. package/dist/server/src/services/metrics.d.ts +8 -6
  481. package/dist/server/src/services/metrics.d.ts.map +1 -1
  482. package/dist/server/src/services/passport.d.ts.map +1 -1
  483. package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
  484. package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
  485. package/dist/server/src/services/permission/sections-builder/handlers.d.ts.map +1 -1
  486. package/dist/server/src/services/transfer/token.d.ts.map +1 -1
  487. package/dist/server/src/validation/project-settings.d.ts +52 -6
  488. package/dist/server/src/validation/project-settings.d.ts.map +1 -1
  489. package/dist/shared/contracts/admin.d.ts +7 -1
  490. package/dist/shared/contracts/admin.d.ts.map +1 -1
  491. package/dist/shared/contracts/content-types.d.ts +5 -0
  492. package/dist/shared/contracts/content-types.d.ts.map +1 -0
  493. package/dist/shared/contracts/webhooks.d.ts +5 -5
  494. package/dist/shared/contracts/webhooks.d.ts.map +1 -1
  495. package/package.json +35 -47
  496. package/strapi-server.js +1 -0
  497. package/dist/admin/AdminSeatInfo-Gp4BFR1_.js +0 -105
  498. package/dist/admin/AdminSeatInfo-Gp4BFR1_.js.map +0 -1
  499. package/dist/admin/AdminSeatInfo-dDgFBcLY.mjs +0 -101
  500. package/dist/admin/AdminSeatInfo-dDgFBcLY.mjs.map +0 -1
  501. package/dist/admin/ApplicationInfoPage-GQLKLk5T.mjs +0 -670
  502. package/dist/admin/ApplicationInfoPage-GQLKLk5T.mjs.map +0 -1
  503. package/dist/admin/ApplicationInfoPage-e_sOqQMh.js +0 -698
  504. package/dist/admin/ApplicationInfoPage-e_sOqQMh.js.map +0 -1
  505. package/dist/admin/AuthResponse-gf-zZkxm.mjs +0 -43
  506. package/dist/admin/AuthResponse-gf-zZkxm.mjs.map +0 -1
  507. package/dist/admin/AuthResponse-l5QiAAK7.js +0 -70
  508. package/dist/admin/AuthResponse-l5QiAAK7.js.map +0 -1
  509. package/dist/admin/AuthenticatedLayout-3fYM18Xy.mjs +0 -1115
  510. package/dist/admin/AuthenticatedLayout-3fYM18Xy.mjs.map +0 -1
  511. package/dist/admin/AuthenticatedLayout-gGQYIisy.js +0 -1148
  512. package/dist/admin/AuthenticatedLayout-gGQYIisy.js.map +0 -1
  513. package/dist/admin/ComponentConfigurationPage-0kf7a5LK.mjs +0 -237
  514. package/dist/admin/ComponentConfigurationPage-0kf7a5LK.mjs.map +0 -1
  515. package/dist/admin/ComponentConfigurationPage-U7RcNJFs.js +0 -262
  516. package/dist/admin/ComponentConfigurationPage-U7RcNJFs.js.map +0 -1
  517. package/dist/admin/ComponentIcon-AkrHxAkm.mjs +0 -158
  518. package/dist/admin/ComponentIcon-AkrHxAkm.mjs.map +0 -1
  519. package/dist/admin/ComponentIcon-wcNWpdCz.js +0 -180
  520. package/dist/admin/ComponentIcon-wcNWpdCz.js.map +0 -1
  521. package/dist/admin/ContentBox-PbS25I_4.mjs +0 -40
  522. package/dist/admin/ContentBox-PbS25I_4.mjs.map +0 -1
  523. package/dist/admin/ContentBox-xqJCP2BC.js +0 -46
  524. package/dist/admin/ContentBox-xqJCP2BC.js.map +0 -1
  525. package/dist/admin/CreateActionEE-HO-FmNjw.js +0 -61
  526. package/dist/admin/CreateActionEE-HO-FmNjw.js.map +0 -1
  527. package/dist/admin/CreateActionEE-OscS6KZj.mjs +0 -53
  528. package/dist/admin/CreateActionEE-OscS6KZj.mjs.map +0 -1
  529. package/dist/admin/CreatePage-1a_Nb-RK.mjs +0 -248
  530. package/dist/admin/CreatePage-1a_Nb-RK.mjs.map +0 -1
  531. package/dist/admin/CreatePage-8rG8fSZv.mjs +0 -245
  532. package/dist/admin/CreatePage-8rG8fSZv.mjs.map +0 -1
  533. package/dist/admin/CreatePage-B0kLot_Q.js +0 -18
  534. package/dist/admin/CreatePage-B0kLot_Q.js.map +0 -1
  535. package/dist/admin/CreatePage-c92hDTE3.mjs +0 -13
  536. package/dist/admin/CreatePage-c92hDTE3.mjs.map +0 -1
  537. package/dist/admin/CreatePage-h9gJgINE.js +0 -274
  538. package/dist/admin/CreatePage-h9gJgINE.js.map +0 -1
  539. package/dist/admin/CreatePage-pN8WcSWM.js +0 -272
  540. package/dist/admin/CreatePage-pN8WcSWM.js.map +0 -1
  541. package/dist/admin/CreateView-Gd7sLphf.js +0 -17
  542. package/dist/admin/CreateView-Gd7sLphf.js.map +0 -1
  543. package/dist/admin/CreateView-PIPvgwa8.mjs +0 -13
  544. package/dist/admin/CreateView-PIPvgwa8.mjs.map +0 -1
  545. package/dist/admin/CreateView-kVD9MjAf.js +0 -17
  546. package/dist/admin/CreateView-kVD9MjAf.js.map +0 -1
  547. package/dist/admin/CreateView-nXkGgZTO.mjs +0 -13
  548. package/dist/admin/CreateView-nXkGgZTO.mjs.map +0 -1
  549. package/dist/admin/EditConfigurationPage-YAS-MAtE.js +0 -155
  550. package/dist/admin/EditConfigurationPage-YAS-MAtE.js.map +0 -1
  551. package/dist/admin/EditConfigurationPage-jugWslla.mjs +0 -130
  552. package/dist/admin/EditConfigurationPage-jugWslla.mjs.map +0 -1
  553. package/dist/admin/EditPage-6pGLGlrZ.mjs +0 -794
  554. package/dist/admin/EditPage-6pGLGlrZ.mjs.map +0 -1
  555. package/dist/admin/EditPage-I99-ASjb.mjs +0 -325
  556. package/dist/admin/EditPage-I99-ASjb.mjs.map +0 -1
  557. package/dist/admin/EditPage-NrM8ZRAf.mjs +0 -303
  558. package/dist/admin/EditPage-NrM8ZRAf.mjs.map +0 -1
  559. package/dist/admin/EditPage-ci9fcWte.js +0 -327
  560. package/dist/admin/EditPage-ci9fcWte.js.map +0 -1
  561. package/dist/admin/EditPage-fT6nuOwT.mjs +0 -260
  562. package/dist/admin/EditPage-fT6nuOwT.mjs.map +0 -1
  563. package/dist/admin/EditPage-hEDFGDcC.js +0 -822
  564. package/dist/admin/EditPage-hEDFGDcC.js.map +0 -1
  565. package/dist/admin/EditPage-m5HVhxC-.js +0 -286
  566. package/dist/admin/EditPage-m5HVhxC-.js.map +0 -1
  567. package/dist/admin/EditPage-um8Yysr-.js +0 -354
  568. package/dist/admin/EditPage-um8Yysr-.js.map +0 -1
  569. package/dist/admin/EditView-79rujo0b.mjs +0 -336
  570. package/dist/admin/EditView-79rujo0b.mjs.map +0 -1
  571. package/dist/admin/EditView-zEf-a-YM.js +0 -362
  572. package/dist/admin/EditView-zEf-a-YM.js.map +0 -1
  573. package/dist/admin/EditViewPage-BJdNfzBZ.mjs +0 -198
  574. package/dist/admin/EditViewPage-BJdNfzBZ.mjs.map +0 -1
  575. package/dist/admin/EditViewPage-Y67V7K7l.js +0 -226
  576. package/dist/admin/EditViewPage-Y67V7K7l.js.map +0 -1
  577. package/dist/admin/EditViewPage-iuq_KY3C.mjs +0 -846
  578. package/dist/admin/EditViewPage-iuq_KY3C.mjs.map +0 -1
  579. package/dist/admin/EditViewPage-vrE8FNb1.js +0 -879
  580. package/dist/admin/EditViewPage-vrE8FNb1.js.map +0 -1
  581. package/dist/admin/EventsTable-LOh2EX0N.mjs +0 -32
  582. package/dist/admin/EventsTable-LOh2EX0N.mjs.map +0 -1
  583. package/dist/admin/EventsTable-bm16Pj4a.js +0 -36
  584. package/dist/admin/EventsTable-bm16Pj4a.js.map +0 -1
  585. package/dist/admin/FieldTypeIcon-SCwhXPf6.mjs +0 -50
  586. package/dist/admin/FieldTypeIcon-SCwhXPf6.mjs.map +0 -1
  587. package/dist/admin/FieldTypeIcon-u9dTaLwb.js +0 -52
  588. package/dist/admin/FieldTypeIcon-u9dTaLwb.js.map +0 -1
  589. package/dist/admin/Filters-5FAHd62q.js +0 -511
  590. package/dist/admin/Filters-5FAHd62q.js.map +0 -1
  591. package/dist/admin/Filters-hYfcsahl.mjs +0 -489
  592. package/dist/admin/Filters-hYfcsahl.mjs.map +0 -1
  593. package/dist/admin/Form-7gccxUtH.mjs +0 -739
  594. package/dist/admin/Form-7gccxUtH.mjs.map +0 -1
  595. package/dist/admin/Form-m0qUJusG.js +0 -767
  596. package/dist/admin/Form-m0qUJusG.js.map +0 -1
  597. package/dist/admin/History-UVk6YZaL.js +0 -456
  598. package/dist/admin/History-UVk6YZaL.js.map +0 -1
  599. package/dist/admin/History-gNttF1-u.mjs +0 -430
  600. package/dist/admin/History-gNttF1-u.mjs.map +0 -1
  601. package/dist/admin/HomePage-2q7ngwX4.mjs +0 -11
  602. package/dist/admin/HomePage-2q7ngwX4.mjs.map +0 -1
  603. package/dist/admin/HomePage-_eHszm7N.mjs +0 -521
  604. package/dist/admin/HomePage-_eHszm7N.mjs.map +0 -1
  605. package/dist/admin/HomePage-jwm3AAzI.js +0 -530
  606. package/dist/admin/HomePage-jwm3AAzI.js.map +0 -1
  607. package/dist/admin/HomePage-ozwWqZdZ.js +0 -15
  608. package/dist/admin/HomePage-ozwWqZdZ.js.map +0 -1
  609. package/dist/admin/InputRenderer-tdeZayqM.js +0 -5345
  610. package/dist/admin/InputRenderer-tdeZayqM.js.map +0 -1
  611. package/dist/admin/InputRenderer-uXGu-VvL.mjs +0 -5304
  612. package/dist/admin/InputRenderer-uXGu-VvL.mjs.map +0 -1
  613. package/dist/admin/InstalledPluginsPage-rGp1BINi.mjs +0 -101
  614. package/dist/admin/InstalledPluginsPage-rGp1BINi.mjs.map +0 -1
  615. package/dist/admin/InstalledPluginsPage-relNbZiA.js +0 -126
  616. package/dist/admin/InstalledPluginsPage-relNbZiA.js.map +0 -1
  617. package/dist/admin/Layout-JSg7Wwnx.mjs +0 -89
  618. package/dist/admin/Layout-JSg7Wwnx.mjs.map +0 -1
  619. package/dist/admin/Layout-gqm-mRb2.mjs +0 -209
  620. package/dist/admin/Layout-gqm-mRb2.mjs.map +0 -1
  621. package/dist/admin/Layout-rp7YlCuF.js +0 -237
  622. package/dist/admin/Layout-rp7YlCuF.js.map +0 -1
  623. package/dist/admin/Layout-tPXv8ts4.js +0 -97
  624. package/dist/admin/Layout-tPXv8ts4.js.map +0 -1
  625. package/dist/admin/ListConfigurationPage-1JkDop6y.mjs +0 -651
  626. package/dist/admin/ListConfigurationPage-1JkDop6y.mjs.map +0 -1
  627. package/dist/admin/ListConfigurationPage-egv99PTx.js +0 -679
  628. package/dist/admin/ListConfigurationPage-egv99PTx.js.map +0 -1
  629. package/dist/admin/ListPage-5VIwPlnG.js +0 -520
  630. package/dist/admin/ListPage-5VIwPlnG.js.map +0 -1
  631. package/dist/admin/ListPage-85XB15gk.js +0 -305
  632. package/dist/admin/ListPage-85XB15gk.js.map +0 -1
  633. package/dist/admin/ListPage-NG7c9Zx-.js +0 -313
  634. package/dist/admin/ListPage-NG7c9Zx-.js.map +0 -1
  635. package/dist/admin/ListPage-Wf8HxliA.js +0 -15
  636. package/dist/admin/ListPage-Wf8HxliA.js.map +0 -1
  637. package/dist/admin/ListPage-Y0vGfxO1.mjs +0 -492
  638. package/dist/admin/ListPage-Y0vGfxO1.mjs.map +0 -1
  639. package/dist/admin/ListPage-_1MCPNWC.mjs +0 -11
  640. package/dist/admin/ListPage-_1MCPNWC.mjs.map +0 -1
  641. package/dist/admin/ListPage-bdblB4wE.mjs +0 -338
  642. package/dist/admin/ListPage-bdblB4wE.mjs.map +0 -1
  643. package/dist/admin/ListPage-d0uTS6lH.js +0 -363
  644. package/dist/admin/ListPage-d0uTS6lH.js.map +0 -1
  645. package/dist/admin/ListPage-e0975Wh-.js +0 -568
  646. package/dist/admin/ListPage-e0975Wh-.js.map +0 -1
  647. package/dist/admin/ListPage-eMKRFxzM.mjs +0 -288
  648. package/dist/admin/ListPage-eMKRFxzM.mjs.map +0 -1
  649. package/dist/admin/ListPage-tFqx6zb_.mjs +0 -540
  650. package/dist/admin/ListPage-tFqx6zb_.mjs.map +0 -1
  651. package/dist/admin/ListPage-v07yRAHk.mjs +0 -277
  652. package/dist/admin/ListPage-v07yRAHk.mjs.map +0 -1
  653. package/dist/admin/ListView-9shnR2xp.mjs +0 -212
  654. package/dist/admin/ListView-9shnR2xp.mjs.map +0 -1
  655. package/dist/admin/ListView-IaEe1_Uy.js +0 -238
  656. package/dist/admin/ListView-IaEe1_Uy.js.map +0 -1
  657. package/dist/admin/ListView-_EZZ571X.js +0 -228
  658. package/dist/admin/ListView-_EZZ571X.js.map +0 -1
  659. package/dist/admin/ListView-z9G1Eash.mjs +0 -202
  660. package/dist/admin/ListView-z9G1Eash.mjs.map +0 -1
  661. package/dist/admin/ListViewPage-FE12IpwT.mjs +0 -925
  662. package/dist/admin/ListViewPage-FE12IpwT.mjs.map +0 -1
  663. package/dist/admin/ListViewPage-u5WSF93L.js +0 -957
  664. package/dist/admin/ListViewPage-u5WSF93L.js.map +0 -1
  665. package/dist/admin/Login-9iKNSYCJ.mjs +0 -31
  666. package/dist/admin/Login-9iKNSYCJ.mjs.map +0 -1
  667. package/dist/admin/Login-ug0ICazL.js +0 -39
  668. package/dist/admin/Login-ug0ICazL.js.map +0 -1
  669. package/dist/admin/MagicLinkEE-3a4aj5bM.mjs +0 -27
  670. package/dist/admin/MagicLinkEE-3a4aj5bM.mjs.map +0 -1
  671. package/dist/admin/MagicLinkEE-TlpYCgSF.js +0 -31
  672. package/dist/admin/MagicLinkEE-TlpYCgSF.js.map +0 -1
  673. package/dist/admin/MarketplacePage-BBs4GMeX.mjs +0 -1014
  674. package/dist/admin/MarketplacePage-BBs4GMeX.mjs.map +0 -1
  675. package/dist/admin/MarketplacePage-GuZItQkJ.js +0 -1045
  676. package/dist/admin/MarketplacePage-GuZItQkJ.js.map +0 -1
  677. package/dist/admin/NoContentTypePage-MI-TNgDm.mjs +0 -50
  678. package/dist/admin/NoContentTypePage-MI-TNgDm.mjs.map +0 -1
  679. package/dist/admin/NoContentTypePage-WM9PSeKc.js +0 -54
  680. package/dist/admin/NoContentTypePage-WM9PSeKc.js.map +0 -1
  681. package/dist/admin/NoPermissionsPage-K6eIf5zl.mjs +0 -23
  682. package/dist/admin/NoPermissionsPage-K6eIf5zl.mjs.map +0 -1
  683. package/dist/admin/NoPermissionsPage-PP92ItBk.js +0 -27
  684. package/dist/admin/NoPermissionsPage-PP92ItBk.js.map +0 -1
  685. package/dist/admin/NotAllowed-9d8xvtvI.mjs +0 -36
  686. package/dist/admin/NotAllowed-9d8xvtvI.mjs.map +0 -1
  687. package/dist/admin/NotAllowed-FmDlK9I3.js +0 -42
  688. package/dist/admin/NotAllowed-FmDlK9I3.js.map +0 -1
  689. package/dist/admin/Ornaments-fHu7120M.js +0 -214
  690. package/dist/admin/Ornaments-fHu7120M.js.map +0 -1
  691. package/dist/admin/Ornaments-izqdN6fh.mjs +0 -209
  692. package/dist/admin/Ornaments-izqdN6fh.mjs.map +0 -1
  693. package/dist/admin/Permissions-jsl-R7bI.js +0 -2082
  694. package/dist/admin/Permissions-jsl-R7bI.js.map +0 -1
  695. package/dist/admin/Permissions-v99MLjbi.mjs +0 -2046
  696. package/dist/admin/Permissions-v99MLjbi.mjs.map +0 -1
  697. package/dist/admin/PrivateRoute-AFoVG5Bk.js +0 -22
  698. package/dist/admin/PrivateRoute-AFoVG5Bk.js.map +0 -1
  699. package/dist/admin/PrivateRoute-XiRz2oSq.mjs +0 -20
  700. package/dist/admin/PrivateRoute-XiRz2oSq.mjs.map +0 -1
  701. package/dist/admin/ProfilePage-HjJiMiTt.mjs +0 -391
  702. package/dist/admin/ProfilePage-HjJiMiTt.mjs.map +0 -1
  703. package/dist/admin/ProfilePage-wGM1mvXn.js +0 -419
  704. package/dist/admin/ProfilePage-wGM1mvXn.js.map +0 -1
  705. package/dist/admin/PurchaseAuditLogs-Rrl9r1j8.mjs +0 -48
  706. package/dist/admin/PurchaseAuditLogs-Rrl9r1j8.mjs.map +0 -1
  707. package/dist/admin/PurchaseAuditLogs-couRts7-.js +0 -52
  708. package/dist/admin/PurchaseAuditLogs-couRts7-.js.map +0 -1
  709. package/dist/admin/PurchaseReviewWorkflows--btlOW_J.mjs +0 -51
  710. package/dist/admin/PurchaseReviewWorkflows--btlOW_J.mjs.map +0 -1
  711. package/dist/admin/PurchaseReviewWorkflows-iyB5BJRO.js +0 -55
  712. package/dist/admin/PurchaseReviewWorkflows-iyB5BJRO.js.map +0 -1
  713. package/dist/admin/PurchaseSingleSignOn-L8l1HqSb.mjs +0 -51
  714. package/dist/admin/PurchaseSingleSignOn-L8l1HqSb.mjs.map +0 -1
  715. package/dist/admin/PurchaseSingleSignOn-oXrB5aDz.js +0 -55
  716. package/dist/admin/PurchaseSingleSignOn-oXrB5aDz.js.map +0 -1
  717. package/dist/admin/ReviewWorkflowsColumn-NUu47oVz.mjs +0 -34
  718. package/dist/admin/ReviewWorkflowsColumn-NUu47oVz.mjs.map +0 -1
  719. package/dist/admin/ReviewWorkflowsColumn-uIqJfjyd.js +0 -39
  720. package/dist/admin/ReviewWorkflowsColumn-uIqJfjyd.js.map +0 -1
  721. package/dist/admin/SSOProviders-JTam8pNP.js +0 -64
  722. package/dist/admin/SSOProviders-JTam8pNP.js.map +0 -1
  723. package/dist/admin/SSOProviders-f1OPn1AH.mjs +0 -58
  724. package/dist/admin/SSOProviders-f1OPn1AH.mjs.map +0 -1
  725. package/dist/admin/SelectRoles-5vr-vXOm.js +0 -114
  726. package/dist/admin/SelectRoles-5vr-vXOm.js.map +0 -1
  727. package/dist/admin/SelectRoles-ytHc3di2.mjs +0 -106
  728. package/dist/admin/SelectRoles-ytHc3di2.mjs.map +0 -1
  729. package/dist/admin/SingleSignOnPage-1Wqj_7y-.js +0 -263
  730. package/dist/admin/SingleSignOnPage-1Wqj_7y-.js.map +0 -1
  731. package/dist/admin/SingleSignOnPage-7oJES3UH.mjs +0 -238
  732. package/dist/admin/SingleSignOnPage-7oJES3UH.mjs.map +0 -1
  733. package/dist/admin/Table-LQhGojNx.mjs +0 -165
  734. package/dist/admin/Table-LQhGojNx.mjs.map +0 -1
  735. package/dist/admin/Table-M5UsBfFs.js +0 -190
  736. package/dist/admin/Table-M5UsBfFs.js.map +0 -1
  737. package/dist/admin/TokenTypeSelect-5o9mvFd7.mjs +0 -357
  738. package/dist/admin/TokenTypeSelect-5o9mvFd7.mjs.map +0 -1
  739. package/dist/admin/TokenTypeSelect-ZBDI26vJ.js +0 -385
  740. package/dist/admin/TokenTypeSelect-ZBDI26vJ.js.map +0 -1
  741. package/dist/admin/UseCasePage-e7rn-aW-.mjs +0 -146
  742. package/dist/admin/UseCasePage-e7rn-aW-.mjs.map +0 -1
  743. package/dist/admin/UseCasePage-q3u-xs7F.js +0 -175
  744. package/dist/admin/UseCasePage-q3u-xs7F.js.map +0 -1
  745. package/dist/admin/apiTokens-_gKUBKPQ.js +0 -62
  746. package/dist/admin/apiTokens-_gKUBKPQ.js.map +0 -1
  747. package/dist/admin/apiTokens-nD8zbNlc.mjs +0 -56
  748. package/dist/admin/apiTokens-nD8zbNlc.mjs.map +0 -1
  749. package/dist/admin/ar-i6ait0_Z.js +0 -939
  750. package/dist/admin/ar-i6ait0_Z.js.map +0 -1
  751. package/dist/admin/ar-lYsknZVT.mjs +0 -918
  752. package/dist/admin/ar-lYsknZVT.mjs.map +0 -1
  753. package/dist/admin/ca-1Cl4eOmr.js +0 -727
  754. package/dist/admin/ca-1Cl4eOmr.js.map +0 -1
  755. package/dist/admin/ca-ruPjUw52.mjs +0 -709
  756. package/dist/admin/ca-ruPjUw52.mjs.map +0 -1
  757. package/dist/admin/constants-6E1OwHx7.js +0 -197
  758. package/dist/admin/constants-6E1OwHx7.js.map +0 -1
  759. package/dist/admin/constants-AdKxCt0x.mjs +0 -52
  760. package/dist/admin/constants-AdKxCt0x.mjs.map +0 -1
  761. package/dist/admin/constants-D6NLEhwu.mjs +0 -172
  762. package/dist/admin/constants-D6NLEhwu.mjs.map +0 -1
  763. package/dist/admin/constants-DxpaZFhM.mjs +0 -10
  764. package/dist/admin/constants-DxpaZFhM.mjs.map +0 -1
  765. package/dist/admin/constants-ZZWbRAQT.js +0 -60
  766. package/dist/admin/constants-ZZWbRAQT.js.map +0 -1
  767. package/dist/admin/constants-wsN7Fj5H.js +0 -14
  768. package/dist/admin/constants-wsN7Fj5H.js.map +0 -1
  769. package/dist/admin/cs-MneRs5g8.js +0 -294
  770. package/dist/admin/cs-MneRs5g8.js.map +0 -1
  771. package/dist/admin/cs-cEW7Jgll.mjs +0 -281
  772. package/dist/admin/cs-cEW7Jgll.mjs.map +0 -1
  773. package/dist/admin/de-vPJQw5Tm.js +0 -719
  774. package/dist/admin/de-vPJQw5Tm.js.map +0 -1
  775. package/dist/admin/de-xZr3TXsT.mjs +0 -701
  776. package/dist/admin/de-xZr3TXsT.mjs.map +0 -1
  777. package/dist/admin/dk-_Fh6kypZ.js +0 -637
  778. package/dist/admin/dk-_Fh6kypZ.js.map +0 -1
  779. package/dist/admin/dk-nqK-ugFb.mjs +0 -619
  780. package/dist/admin/dk-nqK-ugFb.mjs.map +0 -1
  781. package/dist/admin/en-X84kQxpg.js +0 -1068
  782. package/dist/admin/en-X84kQxpg.js.map +0 -1
  783. package/dist/admin/en-qxG24n4z.mjs +0 -1047
  784. package/dist/admin/en-qxG24n4z.mjs.map +0 -1
  785. package/dist/admin/es-6dicYJQA.mjs +0 -779
  786. package/dist/admin/es-6dicYJQA.mjs.map +0 -1
  787. package/dist/admin/es-FC_8jlK7.js +0 -799
  788. package/dist/admin/es-FC_8jlK7.js.map +0 -1
  789. package/dist/admin/eu-Pzqod2VF.js +0 -835
  790. package/dist/admin/eu-Pzqod2VF.js.map +0 -1
  791. package/dist/admin/eu-l9nvfvQj.mjs +0 -815
  792. package/dist/admin/eu-l9nvfvQj.mjs.map +0 -1
  793. package/dist/admin/fr-8h2tzs3Z.js +0 -765
  794. package/dist/admin/fr-8h2tzs3Z.js.map +0 -1
  795. package/dist/admin/fr-97oVHDGZ.mjs +0 -744
  796. package/dist/admin/fr-97oVHDGZ.mjs.map +0 -1
  797. package/dist/admin/gu-YXP9LW1p.mjs +0 -617
  798. package/dist/admin/gu-YXP9LW1p.mjs.map +0 -1
  799. package/dist/admin/gu-fkXeW5oU.js +0 -626
  800. package/dist/admin/gu-fkXeW5oU.js.map +0 -1
  801. package/dist/admin/he-Rnd0orlz.mjs +0 -315
  802. package/dist/admin/he-Rnd0orlz.mjs.map +0 -1
  803. package/dist/admin/he-YNZzVWgP.js +0 -329
  804. package/dist/admin/he-YNZzVWgP.js.map +0 -1
  805. package/dist/admin/hi-42LJgJV1.mjs +0 -707
  806. package/dist/admin/hi-42LJgJV1.mjs.map +0 -1
  807. package/dist/admin/hi-ubgoUzQ0.js +0 -725
  808. package/dist/admin/hi-ubgoUzQ0.js.map +0 -1
  809. package/dist/admin/hu-oHJgjivB.js +0 -835
  810. package/dist/admin/hu-oHJgjivB.js.map +0 -1
  811. package/dist/admin/hu-xsansjmF.mjs +0 -815
  812. package/dist/admin/hu-xsansjmF.mjs.map +0 -1
  813. package/dist/admin/id-JurRr0gC.mjs +0 -438
  814. package/dist/admin/id-JurRr0gC.mjs.map +0 -1
  815. package/dist/admin/id-T2ge96wh.js +0 -451
  816. package/dist/admin/id-T2ge96wh.js.map +0 -1
  817. package/dist/admin/index-1NFAbkxM.mjs +0 -5927
  818. package/dist/admin/index-1NFAbkxM.mjs.map +0 -1
  819. package/dist/admin/index-mQQPK-ix.js +0 -6023
  820. package/dist/admin/index-mQQPK-ix.js.map +0 -1
  821. package/dist/admin/it-890_w-P3.mjs +0 -449
  822. package/dist/admin/it-890_w-P3.mjs.map +0 -1
  823. package/dist/admin/it-uWPMs24z.js +0 -462
  824. package/dist/admin/it-uWPMs24z.js.map +0 -1
  825. package/dist/admin/ja-F61alnK1.mjs +0 -618
  826. package/dist/admin/ja-F61alnK1.mjs.map +0 -1
  827. package/dist/admin/ja-pw-zE8MH.js +0 -636
  828. package/dist/admin/ja-pw-zE8MH.js.map +0 -1
  829. package/dist/admin/ko-DfQWK5T3.mjs +0 -616
  830. package/dist/admin/ko-DfQWK5T3.mjs.map +0 -1
  831. package/dist/admin/ko-XhK2FY3_.js +0 -634
  832. package/dist/admin/ko-XhK2FY3_.js.map +0 -1
  833. package/dist/admin/ml-EVaVYywL.mjs +0 -707
  834. package/dist/admin/ml-EVaVYywL.mjs.map +0 -1
  835. package/dist/admin/ml-hT2VI8JA.js +0 -725
  836. package/dist/admin/ml-hT2VI8JA.js.map +0 -1
  837. package/dist/admin/ms-CzgcVrsY.mjs +0 -332
  838. package/dist/admin/ms-CzgcVrsY.mjs.map +0 -1
  839. package/dist/admin/ms-DoMJCZ42.js +0 -345
  840. package/dist/admin/ms-DoMJCZ42.js.map +0 -1
  841. package/dist/admin/nl-LLi_sx9P.js +0 -831
  842. package/dist/admin/nl-LLi_sx9P.js.map +0 -1
  843. package/dist/admin/nl-XNqQYx_K.mjs +0 -811
  844. package/dist/admin/nl-XNqQYx_K.mjs.map +0 -1
  845. package/dist/admin/no-JwA1Lt4Y.mjs +0 -300
  846. package/dist/admin/no-JwA1Lt4Y.mjs.map +0 -1
  847. package/dist/admin/no-wmtVIVuz.js +0 -313
  848. package/dist/admin/no-wmtVIVuz.js.map +0 -1
  849. package/dist/admin/pl-05ncDTwZ.js +0 -724
  850. package/dist/admin/pl-05ncDTwZ.js.map +0 -1
  851. package/dist/admin/pl-euPz4n1g.mjs +0 -706
  852. package/dist/admin/pl-euPz4n1g.mjs.map +0 -1
  853. package/dist/admin/pt-BR-vpbGYSYw.mjs +0 -777
  854. package/dist/admin/pt-BR-vpbGYSYw.mjs.map +0 -1
  855. package/dist/admin/pt-BR-xA4J5pi2.js +0 -797
  856. package/dist/admin/pt-BR-xA4J5pi2.js.map +0 -1
  857. package/dist/admin/pt-RlnkaSdF.mjs +0 -287
  858. package/dist/admin/pt-RlnkaSdF.mjs.map +0 -1
  859. package/dist/admin/pt-yArB6nEx.js +0 -299
  860. package/dist/admin/pt-yArB6nEx.js.map +0 -1
  861. package/dist/admin/reducers-IQWvK_9L.mjs +0 -4617
  862. package/dist/admin/reducers-IQWvK_9L.mjs.map +0 -1
  863. package/dist/admin/reducers-wZUQqmNX.js +0 -4764
  864. package/dist/admin/reducers-wZUQqmNX.js.map +0 -1
  865. package/dist/admin/ru-4bDDGI3o.js +0 -996
  866. package/dist/admin/ru-4bDDGI3o.js.map +0 -1
  867. package/dist/admin/ru-tyoEF5X6.mjs +0 -975
  868. package/dist/admin/ru-tyoEF5X6.mjs.map +0 -1
  869. package/dist/admin/sa-OOEUNg5o.js +0 -725
  870. package/dist/admin/sa-OOEUNg5o.js.map +0 -1
  871. package/dist/admin/sa-s-WVHU-Y.mjs +0 -707
  872. package/dist/admin/sa-s-WVHU-Y.mjs.map +0 -1
  873. package/dist/admin/selectors-PTHjHMQi.js +0 -8
  874. package/dist/admin/selectors-PTHjHMQi.js.map +0 -1
  875. package/dist/admin/selectors-nn3C3YKE.mjs +0 -6
  876. package/dist/admin/selectors-nn3C3YKE.mjs.map +0 -1
  877. package/dist/admin/sk-1sQSF-r2.js +0 -693
  878. package/dist/admin/sk-1sQSF-r2.js.map +0 -1
  879. package/dist/admin/sk-5bIrjuCN.mjs +0 -673
  880. package/dist/admin/sk-5bIrjuCN.mjs.map +0 -1
  881. package/dist/admin/src/components/InjectionZone.d.ts +0 -59
  882. package/dist/admin/src/content-manager/components/ComponentIcon.d.ts +0 -8
  883. package/dist/admin/src/content-manager/components/ConfigurationForm/EditFieldForm.d.ts +0 -9
  884. package/dist/admin/src/content-manager/components/ConfigurationForm/Fields.d.ts +0 -21
  885. package/dist/admin/src/content-manager/components/ConfigurationForm/Form.d.ts +0 -32
  886. package/dist/admin/src/content-manager/components/DragPreviews/CardDragPreview.d.ts +0 -7
  887. package/dist/admin/src/content-manager/components/DragPreviews/ComponentDragPreview.d.ts +0 -6
  888. package/dist/admin/src/content-manager/components/DragPreviews/RelationDragPreview.d.ts +0 -11
  889. package/dist/admin/src/content-manager/components/FieldTypeIcon.d.ts +0 -9
  890. package/dist/admin/src/content-manager/components/LeftMenu.d.ts +0 -2
  891. package/dist/admin/src/content-manager/constants/attributes.d.ts +0 -14
  892. package/dist/admin/src/content-manager/constants/collections.d.ts +0 -3
  893. package/dist/admin/src/content-manager/constants/dragAndDrop.d.ts +0 -8
  894. package/dist/admin/src/content-manager/exports.d.ts +0 -10
  895. package/dist/admin/src/content-manager/features/DocumentRBAC.d.ts +0 -36
  896. package/dist/admin/src/content-manager/history/components/HistoryAction.d.ts +0 -3
  897. package/dist/admin/src/content-manager/history/components/VersionContent.d.ts +0 -2
  898. package/dist/admin/src/content-manager/history/components/VersionHeader.d.ts +0 -5
  899. package/dist/admin/src/content-manager/history/components/VersionsList.d.ts +0 -2
  900. package/dist/admin/src/content-manager/history/pages/History.d.ts +0 -25
  901. package/dist/admin/src/content-manager/history/routes.d.ts +0 -11
  902. package/dist/admin/src/content-manager/history/services/historyVersion.d.ts +0 -7
  903. package/dist/admin/src/content-manager/hooks/useContentManagerInitData.d.ts +0 -15
  904. package/dist/admin/src/content-manager/hooks/useContentTypeSchema.d.ts +0 -24
  905. package/dist/admin/src/content-manager/hooks/useDocument.d.ts +0 -89
  906. package/dist/admin/src/content-manager/hooks/useDocumentActions.d.ts +0 -102
  907. package/dist/admin/src/content-manager/hooks/useDocumentLayout.d.ts +0 -138
  908. package/dist/admin/src/content-manager/hooks/useDragAndDrop.d.ts +0 -51
  909. package/dist/admin/src/content-manager/hooks/useKeyboardDragAndDrop.d.ts +0 -14
  910. package/dist/admin/src/content-manager/hooks/useLazyComponents.d.ts +0 -13
  911. package/dist/admin/src/content-manager/hooks/useSyncRbac.d.ts +0 -15
  912. package/dist/admin/src/content-manager/layout.d.ts +0 -16
  913. package/dist/admin/src/content-manager/modules/rbac.d.ts +0 -14
  914. package/dist/admin/src/content-manager/modules/reducers.d.ts +0 -4
  915. package/dist/admin/src/content-manager/pages/ComponentConfigurationPage.d.ts +0 -3
  916. package/dist/admin/src/content-manager/pages/EditConfigurationPage.d.ts +0 -3
  917. package/dist/admin/src/content-manager/pages/EditView/EditViewPage.d.ts +0 -3
  918. package/dist/admin/src/content-manager/pages/EditView/components/DocumentActions.d.ts +0 -69
  919. package/dist/admin/src/content-manager/pages/EditView/components/DocumentStatus.d.ts +0 -16
  920. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +0 -3
  921. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.d.ts +0 -3
  922. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.d.ts +0 -3
  923. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.d.ts +0 -3
  924. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.d.ts +0 -3
  925. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.d.ts +0 -3
  926. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.d.ts +0 -3
  927. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.d.ts +0 -6
  928. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +0 -61
  929. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.d.ts +0 -10
  930. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.d.ts +0 -10
  931. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +0 -10
  932. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Modifiers.d.ts +0 -16
  933. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.d.ts +0 -11
  934. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.d.ts +0 -9
  935. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.d.ts +0 -8
  936. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.d.ts +0 -13
  937. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.d.ts +0 -6
  938. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/utils/links.d.ts +0 -10
  939. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/utils/types.d.ts +0 -10
  940. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Component/Initializer.d.ts +0 -9
  941. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Component/Input.d.ts +0 -9
  942. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Component/NonRepeatable.d.ts +0 -6
  943. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Component/Repeatable.d.ts +0 -6
  944. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/ComponentContext.d.ts +0 -42
  945. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.d.ts +0 -11
  946. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/ComponentCard.d.ts +0 -9
  947. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.d.ts +0 -17
  948. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.d.ts +0 -9
  949. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +0 -14
  950. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.d.ts +0 -12
  951. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +0 -13
  952. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/NotAllowed.d.ts +0 -7
  953. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Relations.d.ts +0 -26
  954. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/UID.d.ts +0 -9
  955. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/Editor.d.ts +0 -18
  956. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +0 -59
  957. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/Field.d.ts +0 -11
  958. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.d.ts +0 -5
  959. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.d.ts +0 -7
  960. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.d.ts +0 -17
  961. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +0 -54
  962. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.d.ts +0 -5
  963. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.d.ts +0 -4
  964. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.d.ts +0 -16
  965. package/dist/admin/src/content-manager/pages/EditView/components/FormLayout.d.ts +0 -5
  966. package/dist/admin/src/content-manager/pages/EditView/components/Header.d.ts +0 -35
  967. package/dist/admin/src/content-manager/pages/EditView/components/InputRenderer.d.ts +0 -14
  968. package/dist/admin/src/content-manager/pages/EditView/components/Panels.d.ts +0 -10
  969. package/dist/admin/src/content-manager/pages/EditView/utils/data.d.ts +0 -20
  970. package/dist/admin/src/content-manager/pages/EditView/utils/forms.d.ts +0 -9
  971. package/dist/admin/src/content-manager/pages/ListConfiguration/ListConfigurationPage.d.ts +0 -10
  972. package/dist/admin/src/content-manager/pages/ListConfiguration/components/DraggableCard.d.ts +0 -12
  973. package/dist/admin/src/content-manager/pages/ListConfiguration/components/EditFieldForm.d.ts +0 -8
  974. package/dist/admin/src/content-manager/pages/ListConfiguration/components/Header.d.ts +0 -8
  975. package/dist/admin/src/content-manager/pages/ListConfiguration/components/Settings.d.ts +0 -5
  976. package/dist/admin/src/content-manager/pages/ListConfiguration/components/SortDisplayedFields.d.ts +0 -6
  977. package/dist/admin/src/content-manager/pages/ListView/ListViewPage.d.ts +0 -3
  978. package/dist/admin/src/content-manager/pages/ListView/components/AutoCloneFailureModal.d.ts +0 -8
  979. package/dist/admin/src/content-manager/pages/ListView/components/BulkActions/Actions.d.ts +0 -52
  980. package/dist/admin/src/content-manager/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.d.ts +0 -15
  981. package/dist/admin/src/content-manager/pages/ListView/components/BulkActions/PublishAction.d.ts +0 -31
  982. package/dist/admin/src/content-manager/pages/ListView/components/Filters.d.ts +0 -8
  983. package/dist/admin/src/content-manager/pages/ListView/components/InjectionZoneList.d.ts +0 -7
  984. package/dist/admin/src/content-manager/pages/ListView/components/TableActions.d.ts +0 -8
  985. package/dist/admin/src/content-manager/pages/ListView/components/TableCells/CellContent.d.ts +0 -9
  986. package/dist/admin/src/content-manager/pages/ListView/components/TableCells/CellValue.d.ts +0 -8
  987. package/dist/admin/src/content-manager/pages/ListView/components/TableCells/Components.d.ts +0 -12
  988. package/dist/admin/src/content-manager/pages/ListView/components/TableCells/Media.d.ts +0 -23
  989. package/dist/admin/src/content-manager/pages/ListView/components/TableCells/Relations.d.ts +0 -12
  990. package/dist/admin/src/content-manager/pages/ListView/components/ViewSettingsMenu.d.ts +0 -10
  991. package/dist/admin/src/content-manager/pages/NoContentTypePage.d.ts +0 -2
  992. package/dist/admin/src/content-manager/pages/NoPermissionsPage.d.ts +0 -2
  993. package/dist/admin/src/content-manager/router.d.ts +0 -5
  994. package/dist/admin/src/content-manager/services/api.d.ts +0 -3
  995. package/dist/admin/src/content-manager/services/components.d.ts +0 -6
  996. package/dist/admin/src/content-manager/services/contentTypes.d.ts +0 -18
  997. package/dist/admin/src/content-manager/services/documents.d.ts +0 -94
  998. package/dist/admin/src/content-manager/services/init.d.ts +0 -10
  999. package/dist/admin/src/content-manager/services/relations.d.ts +0 -49
  1000. package/dist/admin/src/content-manager/services/uid.d.ts +0 -32
  1001. package/dist/admin/src/content-manager/utils/api.d.ts +0 -19
  1002. package/dist/admin/src/content-manager/utils/attributes.d.ts +0 -19
  1003. package/dist/admin/src/content-manager/utils/relations.d.ts +0 -12
  1004. package/dist/admin/src/content-manager/utils/translations.d.ts +0 -2
  1005. package/dist/admin/src/content-manager/utils/validation.d.ts +0 -7
  1006. package/dist/admin/src/core/apis/content-manager.d.ts +0 -126
  1007. package/dist/admin/src/hooks/useInjectionZone.d.ts +0 -2
  1008. package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollabsableContentType.d.ts +0 -11
  1009. package/dist/admin/src/pages/Settings/pages/PurchaseReviewWorkflows.d.ts +0 -2
  1010. package/dist/admin/src/utils/getYupInnerErrors.d.ts +0 -7
  1011. package/dist/admin/src/utils/hashAdminUserEmail.d.ts +0 -6
  1012. package/dist/admin/sv-JVgQU2PS.mjs +0 -810
  1013. package/dist/admin/sv-JVgQU2PS.mjs.map +0 -1
  1014. package/dist/admin/sv-d0rqYiHZ.js +0 -830
  1015. package/dist/admin/sv-d0rqYiHZ.js.map +0 -1
  1016. package/dist/admin/th-er8qvbeL.mjs +0 -420
  1017. package/dist/admin/th-er8qvbeL.mjs.map +0 -1
  1018. package/dist/admin/th-mqExIzdv.js +0 -433
  1019. package/dist/admin/th-mqExIzdv.js.map +0 -1
  1020. package/dist/admin/tr-aYPucbUC.js +0 -788
  1021. package/dist/admin/tr-aYPucbUC.js.map +0 -1
  1022. package/dist/admin/tr-b2vrBJ49.mjs +0 -768
  1023. package/dist/admin/tr-b2vrBJ49.mjs.map +0 -1
  1024. package/dist/admin/transferTokens-P5z1yVh2.js +0 -65
  1025. package/dist/admin/transferTokens-P5z1yVh2.js.map +0 -1
  1026. package/dist/admin/transferTokens-PlBVZdw3.mjs +0 -59
  1027. package/dist/admin/transferTokens-PlBVZdw3.mjs.map +0 -1
  1028. package/dist/admin/uk-1c7KIaI6.js +0 -346
  1029. package/dist/admin/uk-1c7KIaI6.js.map +0 -1
  1030. package/dist/admin/uk-RfkbT49M.mjs +0 -333
  1031. package/dist/admin/uk-RfkbT49M.mjs.map +0 -1
  1032. package/dist/admin/useAdminRoles-BG7b996L.mjs +0 -28
  1033. package/dist/admin/useAdminRoles-BG7b996L.mjs.map +0 -1
  1034. package/dist/admin/useAdminRoles-THWXour6.js +0 -50
  1035. package/dist/admin/useAdminRoles-THWXour6.js.map +0 -1
  1036. package/dist/admin/useContentTypes-PEGh0Cg-.mjs +0 -51
  1037. package/dist/admin/useContentTypes-PEGh0Cg-.mjs.map +0 -1
  1038. package/dist/admin/useContentTypes-RoSvxizj.js +0 -73
  1039. package/dist/admin/useContentTypes-RoSvxizj.js.map +0 -1
  1040. package/dist/admin/useDebounce-OnUygPz6.mjs +0 -17
  1041. package/dist/admin/useDebounce-OnUygPz6.mjs.map +0 -1
  1042. package/dist/admin/useDebounce-tz5EMJbt.js +0 -39
  1043. package/dist/admin/useDebounce-tz5EMJbt.js.map +0 -1
  1044. package/dist/admin/useDocumentLayout-4trWL6Jz.mjs +0 -732
  1045. package/dist/admin/useDocumentLayout-4trWL6Jz.mjs.map +0 -1
  1046. package/dist/admin/useDocumentLayout-V_N5dUwQ.js +0 -764
  1047. package/dist/admin/useDocumentLayout-V_N5dUwQ.js.map +0 -1
  1048. package/dist/admin/useLicenseLimitNotification-9DqSZuyc.mjs +0 -80
  1049. package/dist/admin/useLicenseLimitNotification-9DqSZuyc.mjs.map +0 -1
  1050. package/dist/admin/useLicenseLimitNotification-SiWQ5LGo.js +0 -105
  1051. package/dist/admin/useLicenseLimitNotification-SiWQ5LGo.js.map +0 -1
  1052. package/dist/admin/useReviewWorkflows-0ty4mwQd.js +0 -29
  1053. package/dist/admin/useReviewWorkflows-0ty4mwQd.js.map +0 -1
  1054. package/dist/admin/useReviewWorkflows-HwyFyit7.mjs +0 -27
  1055. package/dist/admin/useReviewWorkflows-HwyFyit7.mjs.map +0 -1
  1056. package/dist/admin/useSyncRbac-LNOzRXJ5.mjs +0 -45
  1057. package/dist/admin/useSyncRbac-LNOzRXJ5.mjs.map +0 -1
  1058. package/dist/admin/useSyncRbac-vkWgDJTE.js +0 -67
  1059. package/dist/admin/useSyncRbac-vkWgDJTE.js.map +0 -1
  1060. package/dist/admin/useWebhooks-DmGNXCdi.js +0 -93
  1061. package/dist/admin/useWebhooks-DmGNXCdi.js.map +0 -1
  1062. package/dist/admin/useWebhooks-dOVyaYlw.mjs +0 -91
  1063. package/dist/admin/useWebhooks-dOVyaYlw.mjs.map +0 -1
  1064. package/dist/admin/validateWorkflow-99y3bkNx.js +0 -1077
  1065. package/dist/admin/validateWorkflow-99y3bkNx.js.map +0 -1
  1066. package/dist/admin/validateWorkflow-ubLwZqCK.mjs +0 -1033
  1067. package/dist/admin/validateWorkflow-ubLwZqCK.mjs.map +0 -1
  1068. package/dist/admin/validation-cpJKCQz1.mjs +0 -43
  1069. package/dist/admin/validation-cpJKCQz1.mjs.map +0 -1
  1070. package/dist/admin/validation-lIVymZ0n.js +0 -65
  1071. package/dist/admin/validation-lIVymZ0n.js.map +0 -1
  1072. package/dist/admin/vi-Rg9es0FD.js +0 -301
  1073. package/dist/admin/vi-Rg9es0FD.js.map +0 -1
  1074. package/dist/admin/vi-pyngavdo.mjs +0 -288
  1075. package/dist/admin/vi-pyngavdo.mjs.map +0 -1
  1076. package/dist/admin/zh-Hans-Gbpdme1Q.mjs +0 -939
  1077. package/dist/admin/zh-Hans-Gbpdme1Q.mjs.map +0 -1
  1078. package/dist/admin/zh-Hans-SgnidiuG.js +0 -960
  1079. package/dist/admin/zh-Hans-SgnidiuG.js.map +0 -1
  1080. package/dist/admin/zh-ONWhjzCj.js +0 -839
  1081. package/dist/admin/zh-ONWhjzCj.js.map +0 -1
  1082. package/dist/admin/zh-fMjW2qMl.mjs +0 -819
  1083. package/dist/admin/zh-fMjW2qMl.mjs.map +0 -1
  1084. package/dist/ee/admin/src/content-manager/pages/EditView/components/AssigneeSelect.d.ts +0 -2
  1085. package/dist/ee/admin/src/content-manager/pages/EditView/components/ReviewWorkflowsPanel.d.ts +0 -3
  1086. package/dist/ee/admin/src/content-manager/pages/EditView/components/StageSelect.d.ts +0 -1
  1087. package/dist/ee/admin/src/content-manager/pages/EditView/components/constants.d.ts +0 -2
  1088. package/dist/ee/admin/src/content-manager/pages/ListSettingsView/constants.d.ts +0 -7
  1089. package/dist/ee/admin/src/content-manager/pages/ListView/components/AssigneeFilter.d.ts +0 -7
  1090. package/dist/ee/admin/src/content-manager/pages/ListView/components/ReviewWorkflowsAssigneeEE.d.ts +0 -7
  1091. package/dist/ee/admin/src/content-manager/pages/ListView/components/ReviewWorkflowsColumn.d.ts +0 -2
  1092. package/dist/ee/admin/src/content-manager/pages/ListView/components/ReviewWorkflowsStageEE.d.ts +0 -7
  1093. package/dist/ee/admin/src/content-manager/pages/ListView/components/StageFilter.d.ts +0 -8
  1094. package/dist/ee/admin/src/content-manager/pages/ListView/constants.d.ts +0 -69
  1095. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/CreatePage.d.ts +0 -1
  1096. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/EditPage.d.ts +0 -1
  1097. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/ListPage.d.ts +0 -2
  1098. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/actions.d.ts +0 -86
  1099. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage.d.ts +0 -2
  1100. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/Layout.d.ts +0 -12
  1101. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/LimitsModal.d.ts +0 -15
  1102. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/Stage.d.ts +0 -10
  1103. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/StageDragPreview.d.ts +0 -4
  1104. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/Stages.d.ts +0 -7
  1105. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/WorkflowAttributes.d.ts +0 -4
  1106. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/constants.d.ts +0 -20
  1107. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows.d.ts +0 -15
  1108. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/reducer.d.ts +0 -38
  1109. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/selectors.d.ts +0 -62
  1110. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/utils/colors.d.ts +0 -8
  1111. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/utils/validateWorkflow.d.ts +0 -5
  1112. package/dist/ee/admin/src/services/reviewWorkflows.d.ts +0 -39
  1113. package/dist/shared/contracts/review-workflows.d.ts +0 -83
  1114. package/dist/shared/contracts/review-workflows.d.ts.map +0 -1
  1115. /package/dist/admin/src/{content-manager/hooks → hooks}/usePrev.d.ts +0 -0
@@ -1,24 +1,19 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
2
  const path = require("path");
4
3
  const fse = require("fs-extra");
5
4
  const koaStatic = require("koa-static");
6
- require("@strapi/types");
7
5
  const fp = require("lodash/fp");
8
6
  const dateFns = require("date-fns");
9
7
  const utils$1 = require("@strapi/utils");
10
- const semver = require("semver");
11
- const localProvider = require("@strapi/provider-audit-logs-local");
12
- const nodeSchedule = require("node-schedule");
8
+ require("@strapi/types");
13
9
  const _ = require("lodash");
14
10
  const passportLocal = require("passport-local");
15
11
  const passport$2 = require("koa-passport");
16
12
  const compose = require("koa-compose");
13
+ const nodeSchedule = require("node-schedule");
17
14
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
18
15
  const fse__default = /* @__PURE__ */ _interopDefault(fse);
19
16
  const koaStatic__default = /* @__PURE__ */ _interopDefault(koaStatic);
20
- const semver__default = /* @__PURE__ */ _interopDefault(semver);
21
- const localProvider__default = /* @__PURE__ */ _interopDefault(localProvider);
22
17
  const ___default = /* @__PURE__ */ _interopDefault(_);
23
18
  const passport__default = /* @__PURE__ */ _interopDefault(passport$2);
24
19
  const compose__default = /* @__PURE__ */ _interopDefault(compose);
@@ -104,9 +99,9 @@ const authenticate$2 = async (ctx) => {
104
99
  ability: userAbility
105
100
  };
106
101
  };
107
- const name$1 = "admin";
102
+ const name = "admin";
108
103
  const adminAuthStrategy = {
109
- name: name$1,
104
+ name,
110
105
  authenticate: authenticate$2
111
106
  };
112
107
  const DAY_IN_MS = 24 * 60 * 60 * 1e3;
@@ -227,7 +222,7 @@ const apiTokenAuthStrategy = {
227
222
  verify
228
223
  };
229
224
  const executeCERegister = ({ strapi: strapi2 }) => {
230
- const passportMiddleware = strapi2.admin?.services.passport.init();
225
+ const passportMiddleware = strapi2.service("admin::passport").init();
231
226
  strapi2.server.api("admin").use(passportMiddleware);
232
227
  strapi2.get("auth").register("admin", adminAuthStrategy);
233
228
  strapi2.get("auth").register("content-api", apiTokenAuthStrategy);
@@ -235,138 +230,354 @@ const executeCERegister = ({ strapi: strapi2 }) => {
235
230
  registerAdminPanelRoute({ strapi: strapi2 });
236
231
  }
237
232
  };
238
- async function migrateAuditLogsTable({ oldContentTypes, contentTypes }) {
239
- const oldName = oldContentTypes?.["admin::audit-log"]?.collectionName;
240
- const newName = contentTypes["admin::audit-log"]?.collectionName;
241
- const hasRenamedAuditLogsTable = oldName === "audit_logs" && newName === "strapi_audit_logs";
242
- if (!hasRenamedAuditLogsTable) {
243
- return;
244
- }
245
- const hasAuditLogsTable = await strapi.db.getSchemaConnection().hasTable("audit_logs");
246
- const hasLinkTable = await strapi.db.getSchemaConnection().hasTable("audit_logs_user_links");
247
- if (!hasAuditLogsTable || !hasLinkTable) {
248
- return;
249
- }
250
- const auditLogsColumnInfo = await strapi.db.connection("audit_logs").columnInfo();
251
- const linkColumnInfo = await strapi.db.connection("audit_logs_user_links").columnInfo();
252
- if (!auditLogsColumnInfo.action || !auditLogsColumnInfo.date || !auditLogsColumnInfo.payload || !linkColumnInfo.audit_log_id || !linkColumnInfo.user_id) {
253
- return;
233
+ const register = async ({ strapi: strapi2 }) => {
234
+ await executeCERegister({ strapi: strapi2 });
235
+ };
236
+ const actions$1 = [
237
+ {
238
+ uid: "marketplace.read",
239
+ displayName: "Access the marketplace",
240
+ pluginName: "admin",
241
+ section: "settings",
242
+ category: "plugins and marketplace",
243
+ subCategory: "marketplace"
244
+ },
245
+ {
246
+ uid: "webhooks.create",
247
+ displayName: "Create",
248
+ pluginName: "admin",
249
+ section: "settings",
250
+ category: "webhooks"
251
+ },
252
+ {
253
+ uid: "webhooks.read",
254
+ displayName: "Read",
255
+ pluginName: "admin",
256
+ section: "settings",
257
+ category: "webhooks"
258
+ },
259
+ {
260
+ uid: "webhooks.update",
261
+ displayName: "Update",
262
+ pluginName: "admin",
263
+ section: "settings",
264
+ category: "webhooks"
265
+ },
266
+ {
267
+ uid: "webhooks.delete",
268
+ displayName: "Delete",
269
+ pluginName: "admin",
270
+ section: "settings",
271
+ category: "webhooks"
272
+ },
273
+ {
274
+ uid: "users.create",
275
+ displayName: "Create (invite)",
276
+ pluginName: "admin",
277
+ section: "settings",
278
+ category: "users and roles",
279
+ subCategory: "users"
280
+ },
281
+ {
282
+ uid: "users.read",
283
+ displayName: "Read",
284
+ pluginName: "admin",
285
+ section: "settings",
286
+ category: "users and roles",
287
+ subCategory: "users"
288
+ },
289
+ {
290
+ uid: "users.update",
291
+ displayName: "Update",
292
+ pluginName: "admin",
293
+ section: "settings",
294
+ category: "users and roles",
295
+ subCategory: "users"
296
+ },
297
+ {
298
+ uid: "users.delete",
299
+ displayName: "Delete",
300
+ pluginName: "admin",
301
+ section: "settings",
302
+ category: "users and roles",
303
+ subCategory: "users"
304
+ },
305
+ {
306
+ uid: "roles.create",
307
+ displayName: "Create",
308
+ pluginName: "admin",
309
+ section: "settings",
310
+ category: "users and roles",
311
+ subCategory: "roles"
312
+ },
313
+ {
314
+ uid: "roles.read",
315
+ displayName: "Read",
316
+ pluginName: "admin",
317
+ section: "settings",
318
+ category: "users and roles",
319
+ subCategory: "roles"
320
+ },
321
+ {
322
+ uid: "roles.update",
323
+ displayName: "Update",
324
+ pluginName: "admin",
325
+ section: "settings",
326
+ category: "users and roles",
327
+ subCategory: "roles"
328
+ },
329
+ {
330
+ uid: "roles.delete",
331
+ displayName: "Delete",
332
+ pluginName: "admin",
333
+ section: "settings",
334
+ category: "users and roles",
335
+ subCategory: "roles"
336
+ },
337
+ {
338
+ uid: "api-tokens.access",
339
+ displayName: "Access the API tokens settings page",
340
+ pluginName: "admin",
341
+ section: "settings",
342
+ category: "api tokens",
343
+ subCategory: "api Tokens"
344
+ },
345
+ {
346
+ uid: "api-tokens.create",
347
+ displayName: "Create (generate)",
348
+ pluginName: "admin",
349
+ section: "settings",
350
+ category: "api tokens",
351
+ subCategory: "general"
352
+ },
353
+ {
354
+ uid: "api-tokens.read",
355
+ displayName: "Read",
356
+ pluginName: "admin",
357
+ section: "settings",
358
+ category: "api tokens",
359
+ subCategory: "general"
360
+ },
361
+ {
362
+ uid: "api-tokens.update",
363
+ displayName: "Update",
364
+ pluginName: "admin",
365
+ section: "settings",
366
+ category: "api tokens",
367
+ subCategory: "general"
368
+ },
369
+ {
370
+ uid: "api-tokens.regenerate",
371
+ displayName: "Regenerate",
372
+ pluginName: "admin",
373
+ section: "settings",
374
+ category: "api tokens",
375
+ subCategory: "general"
376
+ },
377
+ {
378
+ uid: "api-tokens.delete",
379
+ displayName: "Delete (revoke)",
380
+ pluginName: "admin",
381
+ section: "settings",
382
+ category: "api tokens",
383
+ subCategory: "general"
384
+ },
385
+ {
386
+ uid: "project-settings.update",
387
+ displayName: "Update the project level settings",
388
+ pluginName: "admin",
389
+ section: "settings",
390
+ category: "project"
391
+ },
392
+ {
393
+ uid: "project-settings.read",
394
+ displayName: "Read the project level settings",
395
+ pluginName: "admin",
396
+ section: "settings",
397
+ category: "project"
398
+ },
399
+ {
400
+ uid: "transfer.tokens.access",
401
+ displayName: "Access the transfer tokens settings page",
402
+ pluginName: "admin",
403
+ section: "settings",
404
+ category: "transfer tokens",
405
+ subCategory: "transfer tokens"
406
+ },
407
+ {
408
+ uid: "transfer.tokens.create",
409
+ displayName: "Create (generate)",
410
+ pluginName: "admin",
411
+ section: "settings",
412
+ category: "transfer tokens",
413
+ subCategory: "general"
414
+ },
415
+ {
416
+ uid: "transfer.tokens.read",
417
+ displayName: "Read",
418
+ pluginName: "admin",
419
+ section: "settings",
420
+ category: "transfer tokens",
421
+ subCategory: "general"
422
+ },
423
+ {
424
+ uid: "transfer.tokens.update",
425
+ displayName: "Update",
426
+ pluginName: "admin",
427
+ section: "settings",
428
+ category: "transfer tokens",
429
+ subCategory: "general"
430
+ },
431
+ {
432
+ uid: "transfer.tokens.regenerate",
433
+ displayName: "Regenerate",
434
+ pluginName: "admin",
435
+ section: "settings",
436
+ category: "transfer tokens",
437
+ subCategory: "general"
438
+ },
439
+ {
440
+ uid: "transfer.tokens.delete",
441
+ displayName: "Delete (revoke)",
442
+ pluginName: "admin",
443
+ section: "settings",
444
+ category: "transfer tokens",
445
+ subCategory: "general"
254
446
  }
255
- await strapi.db.getSchemaConnection().renameTable("audit_logs", "strapi_audit_logs");
256
- await strapi.db.getSchemaConnection().renameTable("audit_logs_user_links", "strapi_audit_logs_user_links");
257
- }
258
- const WORKFLOW_MODEL_UID = "admin::workflow";
259
- const STAGE_MODEL_UID = "admin::workflow-stage";
260
- const STAGE_TRANSITION_UID = "admin::review-workflows.stage.transition";
261
- const STAGE_DEFAULT_COLOR = "#4945FF";
262
- const ENTITY_STAGE_ATTRIBUTE = "strapi_stage";
263
- const ENTITY_ASSIGNEE_ATTRIBUTE = "strapi_assignee";
264
- const MAX_WORKFLOWS = 200;
265
- const MAX_STAGES_PER_WORKFLOW = 200;
266
- const ERRORS = {
267
- WORKFLOW_WITHOUT_STAGES: "A workflow must have at least one stage.",
268
- WORKFLOWS_LIMIT: "You’ve reached the limit of workflows in your plan. Delete a workflow or contact Sales to enable more workflows.",
269
- STAGES_LIMIT: "You’ve reached the limit of stages for this workflow in your plan. Try deleting some stages or contact Sales to enable more stages.",
270
- DUPLICATED_STAGE_NAME: "Stage names must be unique."
271
- };
272
- const WORKFLOW_POPULATE = {
273
- stages: {
274
- populate: {
275
- permissions: {
276
- fields: ["action", "actionParameters"],
277
- populate: {
278
- role: { fields: ["id", "name"] }
447
+ ];
448
+ const adminActions = {
449
+ actions: actions$1
450
+ };
451
+ const conditions = [
452
+ {
453
+ displayName: "Is creator",
454
+ name: "is-creator",
455
+ plugin: "admin",
456
+ handler: (user2) => ({ "createdBy.id": user2.id })
457
+ },
458
+ {
459
+ displayName: "Has same role as creator",
460
+ name: "has-same-role-as-creator",
461
+ plugin: "admin",
462
+ handler: (user2) => ({
463
+ "createdBy.roles": {
464
+ $elemMatch: {
465
+ id: {
466
+ $in: user2.roles.map((r) => r.id)
467
+ }
279
468
  }
280
469
  }
281
- }
470
+ })
282
471
  }
472
+ ];
473
+ const adminConditions = {
474
+ conditions
283
475
  };
284
- async function migrateReviewWorkflowStagesColor({ oldContentTypes, contentTypes }) {
285
- const hadColor = !!oldContentTypes?.["admin::workflow-stage"]?.attributes?.color;
286
- const hasColor = !!contentTypes?.["admin::workflow-stage"]?.attributes?.color;
287
- if (!hadColor && hasColor) {
288
- await strapi.db.query("admin::workflow-stage").updateMany({
289
- data: {
290
- color: STAGE_DEFAULT_COLOR
291
- }
292
- });
293
- }
294
- }
295
- const getService = (name2, { strapi: strapi2 } = { strapi: global.strapi }) => {
296
- return strapi2.service(`admin::${name2}`);
476
+ const defaultAdminAuthSettings = {
477
+ providers: {
478
+ autoRegister: false,
479
+ defaultRole: null,
480
+ ssoLockedRoles: null
481
+ }
297
482
  };
298
- async function migrateReviewWorkflowStagesRoles({ oldContentTypes, contentTypes }) {
299
- const stageUID = "admin::workflow-stage";
300
- const hadRolePermissions = !!oldContentTypes?.[stageUID]?.attributes?.permissions;
301
- const hasRolePermissions = !!contentTypes?.[stageUID]?.attributes?.permissions;
302
- if (!hadRolePermissions && hasRolePermissions) {
303
- const roleUID = "admin::role";
304
- strapi.log.info(
305
- `Migrating all existing review workflow stages to have RBAC permissions for all ${roleUID}.`
306
- );
307
- const stagePermissionsService = getService("stage-permissions");
308
- const stages2 = await strapi.db.query(stageUID).findMany();
309
- const roles2 = await strapi.db.query(roleUID).findMany();
310
- const groupedPermissions = {};
311
- roles2.map((role2) => role2.id).forEach((roleId) => {
312
- stages2.map((stage) => stage.id).forEach((stageId) => {
313
- if (!groupedPermissions[stageId]) {
314
- groupedPermissions[stageId] = [];
315
- }
316
- groupedPermissions[stageId].push({
317
- roleId,
318
- fromStage: stageId,
319
- action: STAGE_TRANSITION_UID
320
- });
321
- });
322
- });
323
- for (const [stageId, permissions] of Object.entries(groupedPermissions)) {
324
- const numericalStageId = Number(stageId);
325
- if (Number.isNaN(numericalStageId)) {
326
- strapi.log.warn(
327
- `Unable to apply ${roleUID} migration for ${stageUID} with id ${stageId}. The stage does not have a numerical id.`
328
- );
329
- continue;
483
+ const registerPermissionActions = async () => {
484
+ await getService$1("permission").actionProvider.registerMany(adminActions.actions);
485
+ };
486
+ const registerAdminConditions = async () => {
487
+ await getService$1("permission").conditionProvider.registerMany(adminConditions.conditions);
488
+ };
489
+ const registerModelHooks = () => {
490
+ const { sendDidChangeInterfaceLanguage } = getService$1("metrics");
491
+ strapi.db.lifecycles.subscribe({
492
+ models: ["admin::user"],
493
+ afterCreate: sendDidChangeInterfaceLanguage,
494
+ afterDelete: sendDidChangeInterfaceLanguage,
495
+ afterUpdate({ params }) {
496
+ if (params.data.preferedLanguage) {
497
+ sendDidChangeInterfaceLanguage();
330
498
  }
331
- const stagePermissions2 = await stagePermissionsService.registerMany(permissions);
332
- await strapi.db.query(STAGE_MODEL_UID).update({
333
- where: { id: numericalStageId },
334
- data: {
335
- permissions: stagePermissions2.flat().map((permission2) => permission2.id)
336
- }
337
- });
338
499
  }
500
+ });
501
+ };
502
+ const syncAuthSettings = async () => {
503
+ const adminStore = await strapi.store({ type: "core", name: "admin" });
504
+ const adminAuthSettings = await adminStore.get({ key: "auth" });
505
+ const newAuthSettings = fp.merge(defaultAdminAuthSettings, adminAuthSettings);
506
+ const roleExists = await getService$1("role").exists({
507
+ id: newAuthSettings.providers.defaultRole
508
+ });
509
+ if (!roleExists) {
510
+ newAuthSettings.providers.defaultRole = null;
339
511
  }
340
- }
341
- const name = "Default";
342
- const defaultWorkflow = {
343
- name
344
- };
345
- async function migrateReviewWorkflowName({ oldContentTypes, contentTypes }) {
346
- const hadName = !!oldContentTypes?.[WORKFLOW_MODEL_UID]?.attributes?.name;
347
- const hasName = !!contentTypes?.[WORKFLOW_MODEL_UID]?.attributes?.name;
348
- if (!hadName && hasName) {
349
- await strapi.db.query(WORKFLOW_MODEL_UID).updateMany({
350
- where: {
351
- name: { $null: true }
352
- },
353
- data: {
354
- name: defaultWorkflow.name
355
- }
356
- });
512
+ await adminStore.set({ key: "auth", value: newAuthSettings });
513
+ };
514
+ const syncAPITokensPermissions = async () => {
515
+ const validPermissions = strapi.contentAPI.permissions.providers.action.keys();
516
+ const permissionsInDB = await utils$1.async.pipe(
517
+ strapi.db.query("admin::api-token-permission").findMany,
518
+ fp.map("action")
519
+ )();
520
+ const unknownPermissions = fp.uniq(fp.difference(permissionsInDB, validPermissions));
521
+ if (unknownPermissions.length > 0) {
522
+ await strapi.db.query("admin::api-token-permission").deleteMany({ where: { action: { $in: unknownPermissions } } });
357
523
  }
358
- }
359
- async function migrateWorkflowsContentTypes({ oldContentTypes, contentTypes }) {
360
- const hadContentTypes = !!oldContentTypes?.[WORKFLOW_MODEL_UID]?.attributes?.contentTypes;
361
- const hasContentTypes = !!contentTypes?.[WORKFLOW_MODEL_UID]?.attributes?.contentTypes;
362
- if (!hadContentTypes && hasContentTypes) {
363
- await strapi.db.query(WORKFLOW_MODEL_UID).updateMany({ data: { contentTypes: [] } });
364
- const contentTypes2 = fp.pipe([fp.pickBy(fp.get("options.reviewWorkflows")), fp.keys])(oldContentTypes);
365
- if (contentTypes2.length) {
366
- await strapi.db.query(WORKFLOW_MODEL_UID).update({ where: { id: { $notNull: true } }, data: { contentTypes: contentTypes2 } });
524
+ };
525
+ const executeCEBootstrap = async ({ strapi: strapi2 }) => {
526
+ await registerAdminConditions();
527
+ await registerPermissionActions();
528
+ registerModelHooks();
529
+ const permissionService = getService$1("permission");
530
+ const userService = getService$1("user");
531
+ const roleService = getService$1("role");
532
+ const apiTokenService = getService$1("api-token");
533
+ const transferService = getService$1("transfer");
534
+ const tokenService = getService$1("token");
535
+ await roleService.createRolesIfNoneExist();
536
+ await roleService.resetSuperAdminPermissions();
537
+ await roleService.displayWarningIfNoSuperAdmin();
538
+ await permissionService.cleanPermissionsInDatabase();
539
+ await userService.displayWarningIfUsersDontHaveRole();
540
+ await syncAuthSettings();
541
+ await syncAPITokensPermissions();
542
+ await getService$1("metrics").sendUpdateProjectInformation(strapi2);
543
+ getService$1("metrics").startCron(strapi2);
544
+ apiTokenService.checkSaltIsDefined();
545
+ transferService.token.checkSaltIsDefined();
546
+ tokenService.checkSecretIsDefined();
547
+ };
548
+ const getService = (name2, { strapi: strapi2 } = { strapi: global.strapi }) => {
549
+ return strapi2.service(`admin::${name2}`);
550
+ };
551
+ const actions = {
552
+ sso: [
553
+ {
554
+ uid: "provider-login.read",
555
+ displayName: "Read",
556
+ pluginName: "admin",
557
+ section: "settings",
558
+ category: "single sign on",
559
+ subCategory: "options"
560
+ },
561
+ {
562
+ uid: "provider-login.update",
563
+ displayName: "Update",
564
+ pluginName: "admin",
565
+ section: "settings",
566
+ category: "single sign on",
567
+ subCategory: "options"
367
568
  }
368
- }
369
- }
569
+ ],
570
+ auditLogs: [
571
+ {
572
+ uid: "audit-logs.read",
573
+ displayName: "Read",
574
+ pluginName: "admin",
575
+ section: "settings",
576
+ category: "audit logs",
577
+ subCategory: "options"
578
+ }
579
+ ]
580
+ };
370
581
  const transformTableName = (table) => {
371
582
  if (typeof table === "string") {
372
583
  return { name: table };
@@ -403,1292 +614,213 @@ async function getPersistedTables({ strapi: strapi2 }) {
403
614
  });
404
615
  return (persistedTables || []).map(transformTableName);
405
616
  }
406
- async function setPersistedTables({ strapi: strapi2 }, tableNames) {
407
- await strapi2.store.set({
408
- type: "core",
409
- key: "persisted_tables",
410
- value: tableNames
411
- });
412
- }
413
617
  const persistTablesWithPrefix = async (tableNamePrefix) => {
414
618
  const tableNameRegex = new RegExp(`^${tableNamePrefix}.*`);
415
619
  const tableNames = await findTables({ strapi }, tableNameRegex);
416
620
  await addPersistTables({ strapi }, tableNames);
417
621
  };
418
- const removePersistedTablesWithSuffix = async (tableNameSuffix) => {
419
- const tableNameRegex = new RegExp(`.*${tableNameSuffix}$`);
420
- const persistedTables = await getPersistedTables({ strapi });
421
- const filteredPersistedTables = persistedTables.filter((table) => {
422
- return !tableNameRegex.test(table.name);
423
- });
424
- if (filteredPersistedTables.length === persistedTables.length) {
425
- return;
622
+ const bootstrap = async (args) => {
623
+ const { actionProvider } = getService("permission");
624
+ if (strapi.ee.features.isEnabled("sso")) {
625
+ await actionProvider.registerMany(actions.sso);
626
+ }
627
+ if (strapi.ee.features.isEnabled("audit-logs")) {
628
+ await persistTablesWithPrefix("strapi_audit_logs");
629
+ await actionProvider.registerMany(actions.auditLogs);
426
630
  }
427
- await setPersistedTables({ strapi }, filteredPersistedTables);
631
+ await getService("seat-enforcement").seatEnforcementWorkflow();
632
+ await executeCEBootstrap(args);
428
633
  };
429
- const persistTables = async (tables) => {
430
- await addPersistTables({ strapi }, tables);
634
+ const executeCEDestroy = async () => {
635
+ const { conditionProvider, actionProvider } = getService$1("permission");
636
+ await conditionProvider.clear();
637
+ await actionProvider.clear();
431
638
  };
432
- function checkVersionThreshold(startVersion, currentVersion, thresholdVersion) {
433
- return semver__default.default.gte(currentVersion, thresholdVersion) && semver__default.default.lt(startVersion, thresholdVersion);
434
- }
435
- async function migrateStageAttribute({ oldContentTypes, contentTypes }) {
436
- const getRWVersion = fp.getOr("0.0.0", `${STAGE_MODEL_UID}.options.version`);
437
- const oldRWVersion = getRWVersion(oldContentTypes);
438
- const currentRWVersion = getRWVersion(contentTypes);
439
- const migrationNeeded = checkVersionThreshold(oldRWVersion, currentRWVersion, "1.1.0");
440
- if (migrationNeeded) {
441
- const oldAttributeTableName = "strapi_review_workflows_stage";
442
- const newAttributeTableName = "strapi_stage";
443
- const tables = await findTables({ strapi }, new RegExp(oldAttributeTableName));
444
- await utils$1.async.map(tables, async (tableName) => {
445
- const newTableName = tableName.replace(oldAttributeTableName, newAttributeTableName);
446
- const alreadyHasNextTable = await strapi.db.connection.schema.hasTable(newTableName);
447
- if (alreadyHasNextTable) {
448
- const dataInTable = await strapi.db.connection(newTableName).select().limit(1);
449
- if (!dataInTable.length) {
450
- await strapi.db.connection.schema.dropTable(newTableName);
451
- }
452
- }
453
- try {
454
- await strapi.db.connection.schema.renameTable(tableName, newTableName);
455
- } catch (e) {
456
- strapi.log.warn(
457
- `An error occurred during the migration of ${tableName} table to ${newTableName}.
458
- If ${newTableName} already exists, migration can't be done automatically.`
459
- );
460
- strapi.log.warn(e.message);
461
- }
462
- });
639
+ const destroy = async ({ strapi: strapi2 }) => {
640
+ await executeCEDestroy();
641
+ };
642
+ const adminContentTypes = {};
643
+ const isSsoLocked = async (user2) => {
644
+ if (!strapi.ee.features.isEnabled("sso")) {
645
+ return false;
463
646
  }
464
- }
465
- const getVisibleContentTypesUID = fp.pipe([
466
- // Pick only content-types visible in the content-manager and option is not false
467
- fp.pickBy(
468
- (value) => fp.getOr(true, "pluginOptions.content-manager.visible", value) && !fp.getOr(false, "options.noStageAttribute", value)
469
- ),
470
- // Get UIDs
471
- fp.keys
472
- ]);
473
- const hasStageAttribute = fp.has(["attributes", ENTITY_STAGE_ATTRIBUTE]);
474
- const getWorkflowContentTypeFilter = ({ strapi: strapi2 }, contentType) => {
475
- if (strapi2.db.dialect.supportsOperator("$jsonSupersetOf")) {
476
- return { $jsonSupersetOf: JSON.stringify([contentType]) };
477
- }
478
- return { $contains: `"${contentType}"` };
479
- };
480
- const clampMaxWorkflows = fp.clamp(1, MAX_WORKFLOWS);
481
- const clampMaxStagesPerWorkflow = fp.clamp(1, MAX_STAGES_PER_WORKFLOW);
482
- async function migrateDeletedCTInWorkflows({ oldContentTypes, contentTypes }) {
483
- const deletedContentTypes = fp.difference(fp.keys(oldContentTypes), fp.keys(contentTypes)) ?? [];
484
- if (deletedContentTypes.length) {
485
- await utils$1.async.map(deletedContentTypes, async (deletedContentTypeUID) => {
486
- const workflow2 = await strapi.db.query(WORKFLOW_MODEL_UID).findOne({
487
- select: ["id", "contentTypes"],
488
- where: {
489
- contentTypes: getWorkflowContentTypeFilter({ strapi }, deletedContentTypeUID)
490
- }
491
- });
492
- if (workflow2) {
493
- await strapi.db.query(WORKFLOW_MODEL_UID).update({
494
- where: { id: workflow2.id },
495
- data: {
496
- contentTypes: workflow2.contentTypes.filter(
497
- (contentTypeUID) => contentTypeUID !== deletedContentTypeUID
498
- )
499
- }
500
- });
501
- }
502
- });
647
+ if (!user2) {
648
+ throw new Error("Missing user object");
503
649
  }
504
- }
505
- const DEFAULT_RETENTION_DAYS = 90;
506
- const defaultEvents = [
507
- "entry.create",
508
- "entry.update",
509
- "entry.delete",
510
- "entry.publish",
511
- "entry.unpublish",
512
- "media.create",
513
- "media.update",
514
- "media.delete",
515
- "media-folder.create",
516
- "media-folder.update",
517
- "media-folder.delete",
518
- "user.create",
519
- "user.update",
520
- "user.delete",
521
- "admin.auth.success",
522
- "admin.logout",
523
- "content-type.create",
524
- "content-type.update",
525
- "content-type.delete",
526
- "component.create",
527
- "component.update",
528
- "component.delete",
529
- "role.create",
530
- "role.update",
531
- "role.delete",
532
- "permission.create",
533
- "permission.update",
534
- "permission.delete"
535
- ];
536
- const getSanitizedUser = (user2) => {
537
- let displayName = user2.email;
538
- if (user2.username) {
539
- displayName = user2.username;
540
- } else if (user2.firstname && user2.lastname) {
541
- displayName = `${user2.firstname} ${user2.lastname}`;
650
+ const adminStore = await strapi.store({ type: "core", name: "admin" });
651
+ const { providers } = await adminStore.get({ key: "auth" });
652
+ const lockedRoles = providers.ssoLockedRoles ?? [];
653
+ if (fp.isEmpty(lockedRoles)) {
654
+ return false;
542
655
  }
543
- return {
544
- id: user2.id,
545
- email: user2.email,
546
- displayName
547
- };
548
- };
549
- const getEventMap = (defaultEvents2) => {
550
- const getDefaultPayload = (...args) => args[0];
551
- return defaultEvents2.reduce((acc, event) => {
552
- acc[event] = getDefaultPayload;
553
- return acc;
554
- }, {});
656
+ const roles2 = (
657
+ // If the roles are pre-loaded for the given user, then use them
658
+ user2.roles ?? // Otherwise, try to load the role based on the given user ID
659
+ await strapi.db.query("admin::user").load(user2, "roles", { roles: { fields: ["id"] } }) ?? // If the query fails somehow, default to an empty array
660
+ []
661
+ );
662
+ const isLocked = lockedRoles.some(
663
+ (lockedId) => (
664
+ // lockedRoles will be a string to avoid issues with frontend and bigints
665
+ roles2.some((role2) => lockedId === role2.id.toString())
666
+ )
667
+ );
668
+ return isLocked;
555
669
  };
556
- const getRetentionDays = (strapi2) => {
557
- const licenseRetentionDays = strapi2.ee.features.get("audit-logs")?.options.retentionDays;
558
- const userRetentionDays = strapi2.config.get("admin.auditLogs.retentionDays");
559
- if (licenseRetentionDays == null) {
560
- return userRetentionDays ?? DEFAULT_RETENTION_DAYS;
561
- }
562
- if (userRetentionDays && userRetentionDays < licenseRetentionDays) {
563
- return userRetentionDays;
670
+ const { ApplicationError: ApplicationError$2 } = utils$1.errors;
671
+ const forgotPassword = async ({ email: email2 } = {}) => {
672
+ const user2 = await strapi.db.query("admin::user").findOne({ where: { email: email2, isActive: true } });
673
+ if (!user2 || await isSsoLocked(user2)) {
674
+ return;
564
675
  }
565
- return licenseRetentionDays;
566
- };
567
- const createAuditLogsService = (strapi2) => {
568
- const state = {};
569
- const eventMap = getEventMap(defaultEvents);
570
- const processEvent = (name2, ...args) => {
571
- const requestState = strapi2.requestContext.get()?.state;
572
- const isUsingAdminAuth = requestState?.auth?.strategy.name === "admin";
573
- const user2 = requestState?.user;
574
- if (!isUsingAdminAuth || !user2) {
575
- return null;
576
- }
577
- const getPayload = eventMap[name2];
578
- if (!getPayload) {
579
- return null;
580
- }
581
- const ignoredUids = ["plugin::upload.file", "plugin::upload.folder"];
582
- if (ignoredUids.includes(args[0]?.uid)) {
583
- return null;
676
+ const resetPasswordToken = getService("token").createToken();
677
+ await getService("user").updateById(user2.id, { resetPasswordToken });
678
+ const url = `${strapi.config.get(
679
+ "admin.absoluteUrl"
680
+ )}/auth/reset-password?code=${resetPasswordToken}`;
681
+ return strapi.plugin("email").service("email").sendTemplatedEmail(
682
+ {
683
+ to: user2.email,
684
+ from: strapi.config.get("admin.forgotPassword.from"),
685
+ replyTo: strapi.config.get("admin.forgotPassword.replyTo")
686
+ },
687
+ strapi.config.get("admin.forgotPassword.emailTemplate"),
688
+ {
689
+ url,
690
+ user: ___default.default.pick(user2, ["email", "firstname", "lastname", "username"])
584
691
  }
585
- return {
586
- action: name2,
587
- date: (/* @__PURE__ */ new Date()).toISOString(),
588
- payload: getPayload(...args) || {},
589
- userId: user2.id
590
- };
591
- };
592
- async function handleEvent(name2, ...args) {
593
- const processedEvent = processEvent(name2, ...args);
594
- if (processedEvent) {
595
- await strapi2.db.transaction(({ onCommit }) => {
596
- onCommit(() => state.provider.saveEvent(processedEvent));
597
- });
692
+ ).catch((err) => {
693
+ strapi.log.error(err);
694
+ });
695
+ };
696
+ const resetPassword = async ({ resetPasswordToken, password: password2 } = {}) => {
697
+ const matchingUser = await strapi.db.query("admin::user").findOne({ where: { resetPasswordToken, isActive: true } });
698
+ if (!matchingUser || await isSsoLocked(matchingUser)) {
699
+ throw new ApplicationError$2();
700
+ }
701
+ return getService("user").updateById(matchingUser.id, {
702
+ password: password2,
703
+ resetPasswordToken: null
704
+ });
705
+ };
706
+ const auth = {
707
+ forgotPassword,
708
+ resetPassword
709
+ };
710
+ const createLocalStrategy = (strapi2, middleware) => {
711
+ return new passportLocal.Strategy(
712
+ {
713
+ usernameField: "email",
714
+ passwordField: "password",
715
+ session: false
716
+ },
717
+ (email2, password2, done) => {
718
+ return getService$1("auth").checkCredentials({ email: fp.toLower(email2), password: password2 }).then(async ([error, user2, message]) => {
719
+ if (middleware) {
720
+ return middleware([error, user2, message], done);
721
+ }
722
+ return done(error, user2, message);
723
+ }).catch((error) => done(error));
598
724
  }
725
+ );
726
+ };
727
+ const authEventsMapper = {
728
+ onConnectionSuccess: "admin.auth.success",
729
+ onConnectionError: "admin.auth.error"
730
+ };
731
+ const valueIsFunctionType = ([, value]) => fp.isFunction(value);
732
+ const keyIsValidEventName = ([key]) => {
733
+ return Object.keys(strapi.service("admin::passport").authEventsMapper).includes(key);
734
+ };
735
+ const getPassportStrategies$1 = () => [createLocalStrategy(strapi)];
736
+ const registerAuthEvents = () => {
737
+ const { events = {} } = strapi.config.get("admin.auth", {});
738
+ const { authEventsMapper: authEventsMapper2 } = strapi.service("admin::passport");
739
+ const eventList = Object.entries(events).filter(keyIsValidEventName).filter(valueIsFunctionType);
740
+ for (const [eventName, handler] of eventList) {
741
+ strapi.eventHub.on(authEventsMapper2[eventName], handler);
599
742
  }
600
- return {
601
- async register() {
602
- if (!state.eeEnableUnsubscribe) {
603
- state.eeEnableUnsubscribe = strapi2.eventHub.on("ee.enable", () => {
604
- this.destroy();
605
- this.register();
606
- });
607
- }
608
- if (!state.eeUpdateUnsubscribe) {
609
- state.eeUpdateUnsubscribe = strapi2.eventHub.on("ee.update", () => {
610
- this.destroy();
611
- this.register();
612
- });
613
- }
614
- state.eeDisableUnsubscribe = strapi2.eventHub.on("ee.disable", () => {
615
- this.destroy();
616
- });
617
- state.provider = await localProvider__default.default.register({ strapi: strapi2 });
618
- if (!strapi2.ee.features.isEnabled("audit-logs")) {
619
- return this;
743
+ };
744
+ const init = () => {
745
+ strapi.service("admin::passport").getPassportStrategies().forEach((strategy) => passport__default.default.use(strategy));
746
+ registerAuthEvents();
747
+ return passport__default.default.initialize();
748
+ };
749
+ const passport$1 = { init, getPassportStrategies: getPassportStrategies$1, authEventsMapper };
750
+ const createProviderRegistry = () => {
751
+ const registry = /* @__PURE__ */ new Map();
752
+ Object.assign(registry, {
753
+ register(provider) {
754
+ if (strapi.isLoaded) {
755
+ throw new Error(`You can't register new provider after the bootstrap`);
620
756
  }
621
- state.eventHubUnsubscribe = strapi2.eventHub.subscribe(handleEvent.bind(this));
622
- const retentionDays = getRetentionDays(strapi2);
623
- state.deleteExpiredJob = nodeSchedule.scheduleJob("0 0 * * *", () => {
624
- const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1e3);
625
- state.provider.deleteExpiredEvents(expirationDate);
626
- });
627
- return this;
757
+ this.set(provider.uid, provider);
628
758
  },
629
- async findMany(query) {
630
- const { results, pagination } = await state.provider.findMany(query);
631
- const sanitizedResults = results.map((result) => {
632
- const { user: user2, ...rest } = result;
633
- return {
634
- ...rest,
635
- user: user2 ? getSanitizedUser(user2) : null
636
- };
759
+ registerMany(providers) {
760
+ providers.forEach((provider) => {
761
+ this.register(provider);
637
762
  });
638
- return {
639
- results: sanitizedResults,
640
- pagination
641
- };
642
- },
643
- async findOne(id) {
644
- const result = await state.provider.findOne(id);
645
- if (!result) {
646
- return null;
647
- }
648
- const { user: user2, ...rest } = result;
649
- return {
650
- ...rest,
651
- user: user2 ? getSanitizedUser(user2) : null
652
- };
653
- },
654
- unsubscribe() {
655
- if (state.eeDisableUnsubscribe) {
656
- state.eeDisableUnsubscribe();
657
- }
658
- if (state.eventHubUnsubscribe) {
659
- state.eventHubUnsubscribe();
660
- }
661
- if (state.deleteExpiredJob) {
662
- state.deleteExpiredJob.cancel();
663
- }
664
- return this;
665
763
  },
666
- destroy() {
667
- return this.unsubscribe();
668
- }
669
- };
670
- };
671
- function contentTypeMiddleware(strapi2) {
672
- const moveReviewWorkflowOption = (ctx) => {
673
- const { reviewWorkflows: reviewWorkflows2, ...contentType } = ctx.request.body.contentType;
674
- if (typeof reviewWorkflows2 === "boolean") {
675
- ctx.request.body.contentType = fp.set("options.reviewWorkflows", reviewWorkflows2, contentType);
676
- }
677
- };
678
- strapi2.server.router.use("/content-type-builder/content-types/:uid?", (ctx, next) => {
679
- if (ctx.method === "PUT" || ctx.method === "POST") {
680
- moveReviewWorkflowOption(ctx);
764
+ getAll() {
765
+ return Array.from(this.values());
681
766
  }
682
- return next();
683
767
  });
684
- }
685
- const reviewWorkflowsMiddlewares = {
686
- contentTypeMiddleware
768
+ return registry;
687
769
  };
688
- const register = async ({ strapi: strapi2 }) => {
689
- const auditLogsIsEnabled = strapi2.config.get("admin.auditLogs.enabled", true);
690
- if (auditLogsIsEnabled) {
691
- strapi2.hook("strapi::content-types.beforeSync").register(migrateAuditLogsTable);
692
- const auditLogsService = createAuditLogsService(strapi2);
693
- strapi2.add("audit-logs", auditLogsService);
694
- await auditLogsService.register();
695
- }
696
- if (strapi2.ee.features.isEnabled("review-workflows")) {
697
- strapi2.hook("strapi::content-types.beforeSync").register(migrateStageAttribute);
698
- strapi2.hook("strapi::content-types.afterSync").register(migrateReviewWorkflowStagesColor).register(migrateReviewWorkflowStagesRoles).register(migrateReviewWorkflowName).register(migrateWorkflowsContentTypes).register(migrateDeletedCTInWorkflows);
699
- const reviewWorkflowService = getService("review-workflows");
700
- reviewWorkflowsMiddlewares.contentTypeMiddleware(strapi2);
701
- await reviewWorkflowService.register(strapi2.ee.features.get("review-workflows"));
770
+ const providerRegistry = createProviderRegistry();
771
+ const errorMessage = "SSO is disabled. Its functionnalities cannot be accessed.";
772
+ const getStrategyCallbackURL = (providerName) => {
773
+ if (!strapi.ee.features.isEnabled("sso")) {
774
+ throw new Error(errorMessage);
702
775
  }
703
- await executeCERegister({ strapi: strapi2 });
776
+ return `/admin/connect/${providerName}`;
704
777
  };
705
- const workflow = {
706
- schema: {
707
- collectionName: "strapi_workflows",
708
- info: {
709
- name: "Workflow",
710
- description: "",
711
- singularName: "workflow",
712
- pluralName: "workflows",
713
- displayName: "Workflow"
714
- },
715
- options: {},
716
- pluginOptions: {
717
- "content-manager": {
718
- visible: false
719
- },
720
- "content-type-builder": {
721
- visible: false
722
- }
723
- },
724
- attributes: {
725
- name: {
726
- type: "string",
727
- required: true,
728
- unique: true
729
- },
730
- stages: {
731
- type: "relation",
732
- target: "admin::workflow-stage",
733
- relation: "oneToMany",
734
- mappedBy: "workflow"
735
- },
736
- contentTypes: {
737
- type: "json",
738
- required: true,
739
- default: []
740
- }
741
- }
778
+ const syncProviderRegistryWithConfig = () => {
779
+ if (!strapi.ee.features.isEnabled("sso")) {
780
+ throw new Error(errorMessage);
742
781
  }
782
+ const { providers = [] } = strapi.config.get("admin.auth", {});
783
+ providerRegistry.registerMany(providers);
743
784
  };
744
- const workflowStage = {
745
- schema: {
746
- collectionName: "strapi_workflows_stages",
747
- info: {
748
- name: "Workflow Stage",
749
- description: "",
750
- singularName: "workflow-stage",
751
- pluralName: "workflow-stages",
752
- displayName: "Stages"
753
- },
754
- options: {
755
- version: "1.1.0"
756
- },
757
- pluginOptions: {
758
- "content-manager": {
759
- visible: false
760
- },
761
- "content-type-builder": {
762
- visible: false
763
- }
764
- },
765
- attributes: {
766
- name: {
767
- type: "string",
768
- configurable: false
769
- },
770
- color: {
771
- type: "string",
772
- configurable: false,
773
- default: STAGE_DEFAULT_COLOR
774
- },
775
- workflow: {
776
- type: "relation",
777
- target: "admin::workflow",
778
- relation: "manyToOne",
779
- inversedBy: "stages",
780
- configurable: false
781
- },
782
- permissions: {
783
- type: "relation",
784
- target: "admin::permission",
785
- relation: "manyToMany",
786
- configurable: false
787
- }
788
- }
785
+ const SSOAuthEventsMapper = {
786
+ onSSOAutoRegistration: "admin.auth.autoRegistration"
787
+ };
788
+ const sso$1 = {
789
+ providerRegistry,
790
+ getStrategyCallbackURL,
791
+ syncProviderRegistryWithConfig,
792
+ authEventsMapper: { ...passport$1.authEventsMapper, ...SSOAuthEventsMapper }
793
+ };
794
+ const { UnauthorizedError } = utils$1.errors;
795
+ const localStrategyMiddleware = async ([error, user2, message], done) => {
796
+ if (user2 && !error && await isSsoLocked(user2)) {
797
+ return done(
798
+ new UnauthorizedError("Login not allowed, please contact your administrator", {
799
+ code: "LOGIN_NOT_ALLOWED"
800
+ }),
801
+ user2,
802
+ message
803
+ );
789
804
  }
805
+ return done(error, user2, message);
790
806
  };
791
- const index$3 = {
792
- workflow,
793
- "workflow-stage": workflowStage
794
- };
795
- const actions$1 = [
796
- {
797
- uid: "marketplace.read",
798
- displayName: "Access the marketplace",
799
- pluginName: "admin",
800
- section: "settings",
801
- category: "plugins and marketplace",
802
- subCategory: "marketplace"
803
- },
804
- {
805
- uid: "webhooks.create",
806
- displayName: "Create",
807
- pluginName: "admin",
808
- section: "settings",
809
- category: "webhooks"
810
- },
811
- {
812
- uid: "webhooks.read",
813
- displayName: "Read",
814
- pluginName: "admin",
815
- section: "settings",
816
- category: "webhooks"
817
- },
818
- {
819
- uid: "webhooks.update",
820
- displayName: "Update",
821
- pluginName: "admin",
822
- section: "settings",
823
- category: "webhooks"
824
- },
825
- {
826
- uid: "webhooks.delete",
827
- displayName: "Delete",
828
- pluginName: "admin",
829
- section: "settings",
830
- category: "webhooks"
831
- },
832
- {
833
- uid: "users.create",
834
- displayName: "Create (invite)",
835
- pluginName: "admin",
836
- section: "settings",
837
- category: "users and roles",
838
- subCategory: "users"
839
- },
840
- {
841
- uid: "users.read",
842
- displayName: "Read",
843
- pluginName: "admin",
844
- section: "settings",
845
- category: "users and roles",
846
- subCategory: "users"
847
- },
848
- {
849
- uid: "users.update",
850
- displayName: "Update",
851
- pluginName: "admin",
852
- section: "settings",
853
- category: "users and roles",
854
- subCategory: "users"
855
- },
856
- {
857
- uid: "users.delete",
858
- displayName: "Delete",
859
- pluginName: "admin",
860
- section: "settings",
861
- category: "users and roles",
862
- subCategory: "users"
863
- },
864
- {
865
- uid: "roles.create",
866
- displayName: "Create",
867
- pluginName: "admin",
868
- section: "settings",
869
- category: "users and roles",
870
- subCategory: "roles"
871
- },
872
- {
873
- uid: "roles.read",
874
- displayName: "Read",
875
- pluginName: "admin",
876
- section: "settings",
877
- category: "users and roles",
878
- subCategory: "roles"
879
- },
880
- {
881
- uid: "roles.update",
882
- displayName: "Update",
883
- pluginName: "admin",
884
- section: "settings",
885
- category: "users and roles",
886
- subCategory: "roles"
887
- },
888
- {
889
- uid: "roles.delete",
890
- displayName: "Delete",
891
- pluginName: "admin",
892
- section: "settings",
893
- category: "users and roles",
894
- subCategory: "roles"
895
- },
896
- {
897
- uid: "api-tokens.access",
898
- displayName: "Access the API tokens settings page",
899
- pluginName: "admin",
900
- section: "settings",
901
- category: "api tokens",
902
- subCategory: "api Tokens"
903
- },
904
- {
905
- uid: "api-tokens.create",
906
- displayName: "Create (generate)",
907
- pluginName: "admin",
908
- section: "settings",
909
- category: "api tokens",
910
- subCategory: "general"
911
- },
912
- {
913
- uid: "api-tokens.read",
914
- displayName: "Read",
915
- pluginName: "admin",
916
- section: "settings",
917
- category: "api tokens",
918
- subCategory: "general"
919
- },
920
- {
921
- uid: "api-tokens.update",
922
- displayName: "Update",
923
- pluginName: "admin",
924
- section: "settings",
925
- category: "api tokens",
926
- subCategory: "general"
927
- },
928
- {
929
- uid: "api-tokens.regenerate",
930
- displayName: "Regenerate",
931
- pluginName: "admin",
932
- section: "settings",
933
- category: "api tokens",
934
- subCategory: "general"
935
- },
936
- {
937
- uid: "api-tokens.delete",
938
- displayName: "Delete (revoke)",
939
- pluginName: "admin",
940
- section: "settings",
941
- category: "api tokens",
942
- subCategory: "general"
943
- },
944
- {
945
- uid: "project-settings.update",
946
- displayName: "Update the project level settings",
947
- pluginName: "admin",
948
- section: "settings",
949
- category: "project"
950
- },
951
- {
952
- uid: "project-settings.read",
953
- displayName: "Read the project level settings",
954
- pluginName: "admin",
955
- section: "settings",
956
- category: "project"
957
- },
958
- {
959
- uid: "transfer.tokens.access",
960
- displayName: "Access the transfer tokens settings page",
961
- pluginName: "admin",
962
- section: "settings",
963
- category: "transfer tokens",
964
- subCategory: "transfer tokens"
965
- },
966
- {
967
- uid: "transfer.tokens.create",
968
- displayName: "Create (generate)",
969
- pluginName: "admin",
970
- section: "settings",
971
- category: "transfer tokens",
972
- subCategory: "general"
973
- },
974
- {
975
- uid: "transfer.tokens.read",
976
- displayName: "Read",
977
- pluginName: "admin",
978
- section: "settings",
979
- category: "transfer tokens",
980
- subCategory: "general"
981
- },
982
- {
983
- uid: "transfer.tokens.update",
984
- displayName: "Update",
985
- pluginName: "admin",
986
- section: "settings",
987
- category: "transfer tokens",
988
- subCategory: "general"
989
- },
990
- {
991
- uid: "transfer.tokens.regenerate",
992
- displayName: "Regenerate",
993
- pluginName: "admin",
994
- section: "settings",
995
- category: "transfer tokens",
996
- subCategory: "general"
997
- },
998
- {
999
- uid: "transfer.tokens.delete",
1000
- displayName: "Delete (revoke)",
1001
- pluginName: "admin",
1002
- section: "settings",
1003
- category: "transfer tokens",
1004
- subCategory: "general"
1005
- }
1006
- ];
1007
- const adminActions = {
1008
- actions: actions$1
1009
- };
1010
- const conditions = [
1011
- {
1012
- displayName: "Is creator",
1013
- name: "is-creator",
1014
- plugin: "admin",
1015
- handler: (user2) => ({ "createdBy.id": user2.id })
1016
- },
1017
- {
1018
- displayName: "Has same role as creator",
1019
- name: "has-same-role-as-creator",
1020
- plugin: "admin",
1021
- handler: (user2) => ({
1022
- "createdBy.roles": {
1023
- $elemMatch: {
1024
- id: {
1025
- $in: user2.roles.map((r) => r.id)
1026
- }
1027
- }
1028
- }
1029
- })
1030
- }
1031
- ];
1032
- const adminConditions = {
1033
- conditions
1034
- };
1035
- const defaultAdminAuthSettings = {
1036
- providers: {
1037
- autoRegister: false,
1038
- defaultRole: null,
1039
- ssoLockedRoles: null
1040
- }
1041
- };
1042
- const registerPermissionActions = async () => {
1043
- await getService$1("permission").actionProvider.registerMany(adminActions.actions);
1044
- };
1045
- const registerAdminConditions = async () => {
1046
- await getService$1("permission").conditionProvider.registerMany(adminConditions.conditions);
1047
- };
1048
- const registerModelHooks = () => {
1049
- const { sendDidChangeInterfaceLanguage } = getService$1("metrics");
1050
- strapi.db.lifecycles.subscribe({
1051
- models: ["admin::user"],
1052
- afterCreate: sendDidChangeInterfaceLanguage,
1053
- afterDelete: sendDidChangeInterfaceLanguage,
1054
- afterUpdate({ params }) {
1055
- if (params.data.preferedLanguage) {
1056
- sendDidChangeInterfaceLanguage();
1057
- }
1058
- }
1059
- });
1060
- };
1061
- const syncAuthSettings = async () => {
1062
- const adminStore = await strapi.store({ type: "core", name: "admin" });
1063
- const adminAuthSettings = await adminStore.get({ key: "auth" });
1064
- const newAuthSettings = fp.merge(defaultAdminAuthSettings, adminAuthSettings);
1065
- const roleExists = await getService$1("role").exists({
1066
- id: newAuthSettings.providers.defaultRole
1067
- });
1068
- if (!roleExists) {
1069
- newAuthSettings.providers.defaultRole = null;
1070
- }
1071
- await adminStore.set({ key: "auth", value: newAuthSettings });
1072
- };
1073
- const syncAPITokensPermissions = async () => {
1074
- const validPermissions = strapi.contentAPI.permissions.providers.action.keys();
1075
- const permissionsInDB = await utils$1.async.pipe(
1076
- strapi.db.query("admin::api-token-permission").findMany,
1077
- fp.map("action")
1078
- )();
1079
- const unknownPermissions = fp.uniq(fp.difference(permissionsInDB, validPermissions));
1080
- if (unknownPermissions.length > 0) {
1081
- await strapi.db.query("admin::api-token-permission").deleteMany({ where: { action: { $in: unknownPermissions } } });
1082
- }
1083
- };
1084
- const executeCEBootstrap = async ({ strapi: strapi2 }) => {
1085
- await registerAdminConditions();
1086
- await registerPermissionActions();
1087
- registerModelHooks();
1088
- const permissionService = getService$1("permission");
1089
- const userService = getService$1("user");
1090
- const roleService = getService$1("role");
1091
- const apiTokenService = getService$1("api-token");
1092
- const transferService = getService$1("transfer");
1093
- const tokenService = getService$1("token");
1094
- await roleService.createRolesIfNoneExist();
1095
- await roleService.resetSuperAdminPermissions();
1096
- await roleService.displayWarningIfNoSuperAdmin();
1097
- await permissionService.cleanPermissionsInDatabase();
1098
- await userService.displayWarningIfUsersDontHaveRole();
1099
- await syncAuthSettings();
1100
- await syncAPITokensPermissions();
1101
- getService$1("metrics").sendUpdateProjectInformation(strapi2);
1102
- getService$1("metrics").startCron(strapi2);
1103
- apiTokenService.checkSaltIsDefined();
1104
- transferService.token.checkSaltIsDefined();
1105
- tokenService.checkSecretIsDefined();
1106
- };
1107
- const actions = {
1108
- sso: [
1109
- {
1110
- uid: "provider-login.read",
1111
- displayName: "Read",
1112
- pluginName: "admin",
1113
- section: "settings",
1114
- category: "single sign on",
1115
- subCategory: "options"
1116
- },
1117
- {
1118
- uid: "provider-login.update",
1119
- displayName: "Update",
1120
- pluginName: "admin",
1121
- section: "settings",
1122
- category: "single sign on",
1123
- subCategory: "options"
1124
- }
1125
- ],
1126
- auditLogs: [
1127
- {
1128
- uid: "audit-logs.read",
1129
- displayName: "Read",
1130
- pluginName: "admin",
1131
- section: "settings",
1132
- category: "audit logs",
1133
- subCategory: "options"
1134
- }
1135
- ],
1136
- reviewWorkflows: [
1137
- {
1138
- uid: "review-workflows.create",
1139
- displayName: "Create",
1140
- pluginName: "admin",
1141
- section: "settings",
1142
- category: "review workflows",
1143
- subCategory: "options"
1144
- },
1145
- {
1146
- uid: "review-workflows.read",
1147
- displayName: "Read",
1148
- pluginName: "admin",
1149
- section: "settings",
1150
- category: "review workflows",
1151
- subCategory: "options"
1152
- },
1153
- {
1154
- uid: "review-workflows.update",
1155
- displayName: "Update",
1156
- pluginName: "admin",
1157
- section: "settings",
1158
- category: "review workflows",
1159
- subCategory: "options"
1160
- },
1161
- {
1162
- uid: "review-workflows.delete",
1163
- displayName: "Delete",
1164
- pluginName: "admin",
1165
- section: "settings",
1166
- category: "review workflows",
1167
- subCategory: "options"
1168
- },
1169
- {
1170
- uid: "review-workflows.stage.transition",
1171
- displayName: "Change stage",
1172
- pluginName: "admin",
1173
- section: "internal"
1174
- }
1175
- ]
1176
- };
1177
- const bootstrap = async (args) => {
1178
- const { actionProvider } = getService("permission");
1179
- if (strapi.ee.features.isEnabled("sso")) {
1180
- await actionProvider.registerMany(actions.sso);
1181
- }
1182
- if (strapi.ee.features.isEnabled("audit-logs")) {
1183
- await persistTablesWithPrefix("strapi_audit_logs");
1184
- await actionProvider.registerMany(actions.auditLogs);
1185
- }
1186
- if (strapi.ee.features.isEnabled("review-workflows")) {
1187
- await persistTablesWithPrefix("strapi_workflows");
1188
- const { bootstrap: rwBootstrap } = getService("review-workflows");
1189
- await rwBootstrap();
1190
- await actionProvider.registerMany(actions.reviewWorkflows);
1191
- getService("review-workflows-decorator");
1192
- await getService("review-workflows-weekly-metrics").registerCron();
1193
- }
1194
- await getService("seat-enforcement").seatEnforcementWorkflow();
1195
- await executeCEBootstrap(args);
1196
- };
1197
- const executeCEDestroy = async () => {
1198
- const { conditionProvider, actionProvider } = getService$1("permission");
1199
- await conditionProvider.clear();
1200
- await actionProvider.clear();
1201
- };
1202
- const destroy = async ({ strapi: strapi2 }) => {
1203
- if (strapi2.ee.features.isEnabled("audit-logs")) {
1204
- strapi2.get("audit-logs").destroy();
1205
- }
1206
- await executeCEDestroy();
1207
- };
1208
- const enableFeatureMiddleware = (featureName) => (ctx, next) => {
1209
- if (strapi.ee.features.isEnabled(featureName)) {
1210
- return next();
1211
- }
1212
- ctx.status = 404;
1213
- };
1214
- const sso$1 = {
1215
- type: "admin",
1216
- routes: [
1217
- {
1218
- method: "GET",
1219
- path: "/providers",
1220
- handler: "authentication.getProviders",
1221
- config: {
1222
- middlewares: [enableFeatureMiddleware("sso")],
1223
- auth: false
1224
- }
1225
- },
1226
- {
1227
- method: "GET",
1228
- path: "/connect/:provider",
1229
- handler: "authentication.providerLogin",
1230
- config: {
1231
- middlewares: [enableFeatureMiddleware("sso")],
1232
- auth: false
1233
- }
1234
- },
1235
- {
1236
- method: "POST",
1237
- path: "/connect/:provider",
1238
- handler: "authentication.providerLogin",
1239
- config: {
1240
- middlewares: [enableFeatureMiddleware("sso")],
1241
- auth: false
1242
- }
1243
- },
1244
- {
1245
- method: "GET",
1246
- path: "/providers/options",
1247
- handler: "authentication.getProviderLoginOptions",
1248
- config: {
1249
- middlewares: [enableFeatureMiddleware("sso")],
1250
- policies: [
1251
- "admin::isAuthenticatedAdmin",
1252
- { name: "admin::hasPermissions", config: { actions: ["admin::provider-login.read"] } }
1253
- ]
1254
- }
1255
- },
1256
- {
1257
- method: "PUT",
1258
- path: "/providers/options",
1259
- handler: "authentication.updateProviderLoginOptions",
1260
- config: {
1261
- middlewares: [enableFeatureMiddleware("sso")],
1262
- policies: [
1263
- "admin::isAuthenticatedAdmin",
1264
- { name: "admin::hasPermissions", config: { actions: ["admin::provider-login.update"] } }
1265
- ]
1266
- }
1267
- },
1268
- {
1269
- method: "GET",
1270
- path: "/providers/isSSOLocked",
1271
- handler: "user.isSSOLocked",
1272
- config: {
1273
- middlewares: [enableFeatureMiddleware("sso")],
1274
- policies: ["admin::isAuthenticatedAdmin"]
1275
- }
1276
- }
1277
- ]
1278
- };
1279
- const licenseLimit = {
1280
- type: "admin",
1281
- routes: [
1282
- // License limit infos
1283
- {
1284
- method: "GET",
1285
- path: "/license-limit-information",
1286
- handler: "admin.licenseLimitInformation",
1287
- config: {
1288
- policies: [
1289
- "admin::isAuthenticatedAdmin",
1290
- {
1291
- name: "admin::hasPermissions",
1292
- config: {
1293
- actions: [
1294
- "admin::users.create",
1295
- "admin::users.read",
1296
- "admin::users.update",
1297
- "admin::users.delete"
1298
- ]
1299
- }
1300
- }
1301
- ]
1302
- }
1303
- }
1304
- ]
1305
- };
1306
- const auditLogs$1 = {
1307
- type: "admin",
1308
- routes: [
1309
- {
1310
- method: "GET",
1311
- path: "/audit-logs",
1312
- handler: "auditLogs.findMany",
1313
- config: {
1314
- middlewares: [enableFeatureMiddleware("audit-logs")],
1315
- policies: [
1316
- "admin::isAuthenticatedAdmin",
1317
- {
1318
- name: "admin::hasPermissions",
1319
- config: {
1320
- actions: ["admin::audit-logs.read"]
1321
- }
1322
- }
1323
- ]
1324
- }
1325
- },
1326
- {
1327
- method: "GET",
1328
- path: "/audit-logs/:id",
1329
- handler: "auditLogs.findOne",
1330
- config: {
1331
- middlewares: [enableFeatureMiddleware("audit-logs")],
1332
- policies: [
1333
- "admin::isAuthenticatedAdmin",
1334
- {
1335
- name: "admin::hasPermissions",
1336
- config: {
1337
- actions: ["admin::audit-logs.read"]
1338
- }
1339
- }
1340
- ]
1341
- }
1342
- }
1343
- ]
1344
- };
1345
- const reviewWorkflows$1 = {
1346
- type: "admin",
1347
- routes: [
1348
- // Review workflow
1349
- {
1350
- method: "POST",
1351
- path: "/review-workflows/workflows",
1352
- handler: "workflows.create",
1353
- config: {
1354
- middlewares: [enableFeatureMiddleware("review-workflows")],
1355
- policies: [
1356
- "admin::isAuthenticatedAdmin",
1357
- {
1358
- name: "admin::hasPermissions",
1359
- config: {
1360
- actions: ["admin::review-workflows.create"]
1361
- }
1362
- }
1363
- ]
1364
- }
1365
- },
1366
- {
1367
- method: "PUT",
1368
- path: "/review-workflows/workflows/:id",
1369
- handler: "workflows.update",
1370
- config: {
1371
- middlewares: [enableFeatureMiddleware("review-workflows")],
1372
- policies: [
1373
- "admin::isAuthenticatedAdmin",
1374
- {
1375
- name: "admin::hasPermissions",
1376
- config: {
1377
- actions: ["admin::review-workflows.update"]
1378
- }
1379
- }
1380
- ]
1381
- }
1382
- },
1383
- {
1384
- method: "DELETE",
1385
- path: "/review-workflows/workflows/:id",
1386
- handler: "workflows.delete",
1387
- config: {
1388
- middlewares: [enableFeatureMiddleware("review-workflows")],
1389
- policies: [
1390
- "admin::isAuthenticatedAdmin",
1391
- {
1392
- name: "admin::hasPermissions",
1393
- config: {
1394
- actions: ["admin::review-workflows.delete"]
1395
- }
1396
- }
1397
- ]
1398
- }
1399
- },
1400
- {
1401
- method: "GET",
1402
- path: "/review-workflows/workflows",
1403
- handler: "workflows.find",
1404
- config: {
1405
- middlewares: [enableFeatureMiddleware("review-workflows")],
1406
- policies: [
1407
- "admin::isAuthenticatedAdmin",
1408
- {
1409
- name: "admin::hasPermissions",
1410
- config: {
1411
- actions: ["admin::review-workflows.read"]
1412
- }
1413
- }
1414
- ]
1415
- }
1416
- },
1417
- {
1418
- method: "GET",
1419
- path: "/review-workflows/workflows/:id",
1420
- handler: "workflows.findById",
1421
- config: {
1422
- middlewares: [enableFeatureMiddleware("review-workflows")],
1423
- policies: [
1424
- "admin::isAuthenticatedAdmin",
1425
- {
1426
- name: "admin::hasPermissions",
1427
- config: {
1428
- actions: ["admin::review-workflows.read"]
1429
- }
1430
- }
1431
- ]
1432
- }
1433
- },
1434
- {
1435
- method: "GET",
1436
- path: "/review-workflows/workflows/:workflow_id/stages",
1437
- handler: "stages.find",
1438
- config: {
1439
- middlewares: [enableFeatureMiddleware("review-workflows")],
1440
- policies: [
1441
- "admin::isAuthenticatedAdmin",
1442
- {
1443
- name: "admin::hasPermissions",
1444
- config: {
1445
- actions: ["admin::review-workflows.read"]
1446
- }
1447
- }
1448
- ]
1449
- }
1450
- },
1451
- {
1452
- method: "GET",
1453
- path: "/review-workflows/workflows/:workflow_id/stages/:id",
1454
- handler: "stages.findById",
1455
- config: {
1456
- middlewares: [enableFeatureMiddleware("review-workflows")],
1457
- policies: [
1458
- "admin::isAuthenticatedAdmin",
1459
- {
1460
- name: "admin::hasPermissions",
1461
- config: {
1462
- actions: ["admin::review-workflows.read"]
1463
- }
1464
- }
1465
- ]
1466
- }
1467
- },
1468
- {
1469
- method: "PUT",
1470
- path: "/content-manager/(collection|single)-types/:model_uid/:id/stage",
1471
- handler: "stages.updateEntity",
1472
- config: {
1473
- middlewares: [enableFeatureMiddleware("review-workflows")],
1474
- policies: ["admin::isAuthenticatedAdmin"]
1475
- }
1476
- },
1477
- {
1478
- method: "GET",
1479
- path: "/content-manager/(collection|single)-types/:model_uid/:id/stages",
1480
- handler: "stages.listAvailableStages",
1481
- config: {
1482
- middlewares: [enableFeatureMiddleware("review-workflows")],
1483
- policies: ["admin::isAuthenticatedAdmin"]
1484
- }
1485
- },
1486
- {
1487
- method: "PUT",
1488
- path: "/content-manager/(collection|single)-types/:model_uid/:id/assignee",
1489
- handler: "assignees.updateEntity",
1490
- config: {
1491
- middlewares: [enableFeatureMiddleware("review-workflows")],
1492
- policies: [
1493
- "admin::isAuthenticatedAdmin",
1494
- {
1495
- name: "admin::hasPermissions",
1496
- config: {
1497
- actions: ["admin::users.read", "admin::review-workflows.read"]
1498
- }
1499
- }
1500
- ]
1501
- }
1502
- }
1503
- ]
1504
- };
1505
- const index$2 = {
1506
- sso: sso$1,
1507
- "license-limit": licenseLimit,
1508
- "audit-logs": auditLogs$1,
1509
- "review-workflows": reviewWorkflows$1
1510
- };
1511
- const isSsoLocked = async (user2) => {
1512
- if (!strapi.ee.features.isEnabled("sso")) {
1513
- return false;
1514
- }
1515
- if (!user2) {
1516
- throw new Error("Missing user object");
1517
- }
1518
- const adminStore = await strapi.store({ type: "core", name: "admin" });
1519
- const { providers } = await adminStore.get({ key: "auth" });
1520
- const lockedRoles = providers.ssoLockedRoles ?? [];
1521
- if (fp.isEmpty(lockedRoles)) {
1522
- return false;
1523
- }
1524
- const roles2 = (
1525
- // If the roles are pre-loaded for the given user, then use them
1526
- user2.roles ?? // Otherwise, try to load the role based on the given user ID
1527
- await strapi.db.query("admin::user").load(user2, "roles", { roles: { fields: ["id"] } }) ?? // If the query fails somehow, default to an empty array
1528
- []
1529
- );
1530
- const isLocked = lockedRoles.some(
1531
- (lockedId) => (
1532
- // lockedRoles will be a string to avoid issues with frontend and bigints
1533
- roles2.some((role2) => lockedId === role2.id.toString())
1534
- )
1535
- );
1536
- return isLocked;
1537
- };
1538
- const { ApplicationError: ApplicationError$6 } = utils$1.errors;
1539
- const forgotPassword = async ({ email: email2 } = {}) => {
1540
- const user2 = await strapi.db.query("admin::user").findOne({ where: { email: email2, isActive: true } });
1541
- if (!user2 || await isSsoLocked(user2)) {
1542
- return;
1543
- }
1544
- const resetPasswordToken = getService("token").createToken();
1545
- await getService("user").updateById(user2.id, { resetPasswordToken });
1546
- const url = `${strapi.config.get(
1547
- "admin.absoluteUrl"
1548
- )}/auth/reset-password?code=${resetPasswordToken}`;
1549
- return strapi.plugin("email").service("email").sendTemplatedEmail(
1550
- {
1551
- to: user2.email,
1552
- from: strapi.config.get("admin.forgotPassword.from"),
1553
- replyTo: strapi.config.get("admin.forgotPassword.replyTo")
1554
- },
1555
- strapi.config.get("admin.forgotPassword.emailTemplate"),
1556
- {
1557
- url,
1558
- user: ___default.default.pick(user2, ["email", "firstname", "lastname", "username"])
1559
- }
1560
- ).catch((err) => {
1561
- strapi.log.error(err);
1562
- });
1563
- };
1564
- const resetPassword = async ({ resetPasswordToken, password: password2 } = {}) => {
1565
- const matchingUser = await strapi.db.query("admin::user").findOne({ where: { resetPasswordToken, isActive: true } });
1566
- if (!matchingUser || await isSsoLocked(matchingUser)) {
1567
- throw new ApplicationError$6();
1568
- }
1569
- return getService("user").updateById(matchingUser.id, {
1570
- password: password2,
1571
- resetPasswordToken: null
1572
- });
1573
- };
1574
- const auth = {
1575
- forgotPassword,
1576
- resetPassword
1577
- };
1578
- const createLocalStrategy = (strapi2, middleware) => {
1579
- return new passportLocal.Strategy(
1580
- {
1581
- usernameField: "email",
1582
- passwordField: "password",
1583
- session: false
1584
- },
1585
- (email2, password2, done) => {
1586
- return getService$1("auth").checkCredentials({ email: fp.toLower(email2), password: password2 }).then(async ([error, user2, message]) => {
1587
- if (middleware) {
1588
- return middleware([error, user2, message], done);
1589
- }
1590
- return done(error, user2, message);
1591
- }).catch((error) => done(error));
1592
- }
1593
- );
1594
- };
1595
- const authEventsMapper = {
1596
- onConnectionSuccess: "admin.auth.success",
1597
- onConnectionError: "admin.auth.error"
1598
- };
1599
- const valueIsFunctionType = ([, value]) => fp.isFunction(value);
1600
- const keyIsValidEventName = ([key]) => {
1601
- return Object.keys(strapi.admin.services.passport.authEventsMapper).includes(key);
1602
- };
1603
- const getPassportStrategies$1 = () => [createLocalStrategy(strapi)];
1604
- const registerAuthEvents = () => {
1605
- const { events = {} } = strapi.config.get("admin.auth", {});
1606
- const { authEventsMapper: authEventsMapper2 } = strapi.admin.services.passport;
1607
- const eventList = Object.entries(events).filter(keyIsValidEventName).filter(valueIsFunctionType);
1608
- for (const [eventName, handler] of eventList) {
1609
- strapi.eventHub.on(authEventsMapper2[eventName], handler);
1610
- }
1611
- };
1612
- const init = () => {
1613
- strapi.admin.services.passport.getPassportStrategies().forEach((strategy) => passport__default.default.use(strategy));
1614
- registerAuthEvents();
1615
- return passport__default.default.initialize();
1616
- };
1617
- const passport$1 = { init, getPassportStrategies: getPassportStrategies$1, authEventsMapper };
1618
- const createProviderRegistry = () => {
1619
- const registry = /* @__PURE__ */ new Map();
1620
- Object.assign(registry, {
1621
- register(provider) {
1622
- if (strapi.isLoaded) {
1623
- throw new Error(`You can't register new provider after the bootstrap`);
1624
- }
1625
- this.set(provider.uid, provider);
1626
- },
1627
- registerMany(providers) {
1628
- providers.forEach((provider) => {
1629
- this.register(provider);
1630
- });
1631
- },
1632
- getAll() {
1633
- return Array.from(this.values());
1634
- }
1635
- });
1636
- return registry;
1637
- };
1638
- const providerRegistry = createProviderRegistry();
1639
- const errorMessage = "SSO is disabled. Its functionnalities cannot be accessed.";
1640
- const getStrategyCallbackURL = (providerName) => {
1641
- if (!strapi.ee.features.isEnabled("sso")) {
1642
- throw new Error(errorMessage);
1643
- }
1644
- return `/admin/connect/${providerName}`;
1645
- };
1646
- const syncProviderRegistryWithConfig = () => {
1647
- if (!strapi.ee.features.isEnabled("sso")) {
1648
- throw new Error(errorMessage);
1649
- }
1650
- const { providers = [] } = strapi.config.get("admin.auth", {});
1651
- providerRegistry.registerMany(providers);
1652
- };
1653
- const SSOAuthEventsMapper = {
1654
- onSSOAutoRegistration: "admin.auth.autoRegistration"
1655
- };
1656
- const sso = {
1657
- providerRegistry,
1658
- getStrategyCallbackURL,
1659
- syncProviderRegistryWithConfig,
1660
- authEventsMapper: { ...passport$1.authEventsMapper, ...SSOAuthEventsMapper }
1661
- };
1662
- const { UnauthorizedError } = utils$1.errors;
1663
- const localStrategyMiddleware = async ([error, user2, message], done) => {
1664
- if (user2 && !error && await isSsoLocked(user2)) {
1665
- return done(
1666
- new UnauthorizedError("Login not allowed, please contact your administrator", {
1667
- code: "LOGIN_NOT_ALLOWED"
1668
- }),
1669
- user2,
1670
- message
1671
- );
1672
- }
1673
- return done(error, user2, message);
1674
- };
1675
- const getPassportStrategies = () => {
1676
- if (!strapi.ee.features.isEnabled("sso")) {
1677
- return [createLocalStrategy(strapi)];
1678
- }
1679
- const localStrategy = createLocalStrategy(strapi, localStrategyMiddleware);
1680
- if (!strapi.isLoaded) {
1681
- sso.syncProviderRegistryWithConfig();
1682
- }
1683
- const providers = sso.providerRegistry.getAll();
1684
- const strategies = providers.map((provider) => provider.createStrategy(strapi));
1685
- return [localStrategy, ...strategies];
807
+ const getPassportStrategies = () => {
808
+ if (!strapi.ee.features.isEnabled("sso")) {
809
+ return [createLocalStrategy(strapi)];
810
+ }
811
+ const localStrategy = createLocalStrategy(strapi, localStrategyMiddleware);
812
+ if (!strapi.isLoaded) {
813
+ sso$1.syncProviderRegistryWithConfig();
814
+ }
815
+ const providers = sso$1.providerRegistry.getAll();
816
+ const strategies = providers.map((provider) => provider.createStrategy(strapi));
817
+ return [localStrategy, ...strategies];
1686
818
  };
1687
819
  const passport = {
1688
820
  getPassportStrategies,
1689
- ...sso
821
+ ...sso$1
1690
822
  };
1691
- const { ApplicationError: ApplicationError$5 } = utils$1.errors;
823
+ const { ApplicationError: ApplicationError$1 } = utils$1.errors;
1692
824
  const ssoCheckRolesIdForDeletion = async (ids) => {
1693
825
  const adminStore = await strapi.store({ type: "core", name: "admin" });
1694
826
  const {
@@ -1696,7 +828,7 @@ const ssoCheckRolesIdForDeletion = async (ids) => {
1696
828
  } = await adminStore.get({ key: "auth" });
1697
829
  for (const roleId of ids) {
1698
830
  if (defaultRole && fp.toString(defaultRole) === fp.toString(roleId)) {
1699
- throw new ApplicationError$5(
831
+ throw new ApplicationError$1(
1700
832
  "This role is used as the default SSO role. Make sure to change this configuration before deleting the role"
1701
833
  );
1702
834
  }
@@ -1709,7 +841,7 @@ const { SUPER_ADMIN_CODE: SUPER_ADMIN_CODE$2 } = constants;
1709
841
  const hasSuperAdminRole = (user2) => {
1710
842
  return user2.roles.filter((role2) => role2.code === SUPER_ADMIN_CODE$2).length > 0;
1711
843
  };
1712
- const { ValidationError: ValidationError$3 } = utils$1.errors;
844
+ const { ValidationError: ValidationError$1 } = utils$1.errors;
1713
845
  const { SUPER_ADMIN_CODE: SUPER_ADMIN_CODE$1 } = constants;
1714
846
  const updateEEDisabledUsersList = async (id, input) => {
1715
847
  const disabledUsers = await getService("seat-enforcement").getDisabledUserList();
@@ -1754,13 +886,13 @@ const updateById = async (id, attributes) => {
1754
886
  const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
1755
887
  const willRemoveSuperAdminRole = !utils$1.arrays.includesString(attributes.roles, superAdminRole.id);
1756
888
  if (lastAdminUser && willRemoveSuperAdminRole) {
1757
- throw new ValidationError$3("You must have at least one user with super admin role.");
889
+ throw new ValidationError$1("You must have at least one user with super admin role.");
1758
890
  }
1759
891
  }
1760
892
  if (attributes.isActive === false) {
1761
893
  const lastAdminUser = await isLastSuperAdminUser(id);
1762
894
  if (lastAdminUser) {
1763
- throw new ValidationError$3("You must have at least one user with super admin role.");
895
+ throw new ValidationError$1("You must have at least one user with super admin role.");
1764
896
  }
1765
897
  }
1766
898
  if (___default.default.has(attributes, "password")) {
@@ -1799,7 +931,7 @@ const deleteById = async (id) => {
1799
931
  if (userToDelete.roles.some((r) => r.code === SUPER_ADMIN_CODE$1)) {
1800
932
  const superAdminRole = await getService("role").getSuperAdminWithUsersCount();
1801
933
  if (superAdminRole.usersCount === 1) {
1802
- throw new ValidationError$3("You must have at least one user with super admin role.");
934
+ throw new ValidationError$1("You must have at least one user with super admin role.");
1803
935
  }
1804
936
  }
1805
937
  }
@@ -1817,7 +949,7 @@ const deleteByIds = async (ids) => {
1817
949
  }
1818
950
  });
1819
951
  if (superAdminRole.usersCount === nbOfSuperAdminToDelete) {
1820
- throw new ValidationError$3("You must have at least one user with super admin role.");
952
+ throw new ValidationError$1("You must have at least one user with super admin role.");
1821
953
  }
1822
954
  const deletedUsers = [];
1823
955
  for (const id of ids) {
@@ -1860,7 +992,7 @@ const user$1 = {
1860
992
  updateById
1861
993
  };
1862
994
  const getSSOProvidersList = async () => {
1863
- const { providerRegistry: providerRegistry2 } = strapi.admin.services.passport;
995
+ const { providerRegistry: providerRegistry2 } = strapi.service("admin::passport");
1864
996
  return providerRegistry2.getAll().map(({ uid }) => uid);
1865
997
  };
1866
998
  const sendUpdateProjectInformation = async (strapi2) => {
@@ -1877,7 +1009,7 @@ const sendUpdateProjectInformation = async (strapi2) => {
1877
1009
  if (strapi2.ee.features.isEnabled("cms-content-releases")) {
1878
1010
  const numberOfContentReleases = await strapi2.db.query("plugin::content-releases.release").count();
1879
1011
  const numberOfPublishedContentReleases = await strapi2.db.query("plugin::content-releases.release").count({
1880
- where: { $not: { releasedAt: null } }
1012
+ filters: { releasedAt: { $notNull: true } }
1881
1013
  });
1882
1014
  groupProperties = fp.assign(groupProperties, {
1883
1015
  numberOfContentReleases,
@@ -1963,976 +1095,27 @@ const seatEnforcementWorkflow = async () => {
1963
1095
  const adminSeats = strapi.ee.seats;
1964
1096
  if (fp.isNil(adminSeats)) {
1965
1097
  return;
1966
- }
1967
- await syncDisabledUserRecords();
1968
- const currentActiveUserCount = await getService("user").getCurrentActiveUserCount();
1969
- const adminSeatsLeft = adminSeats - currentActiveUserCount;
1970
- if (adminSeatsLeft > 0) {
1971
- await enableMaximumUserCount(adminSeatsLeft);
1972
- } else if (adminSeatsLeft < 0) {
1973
- await disableUsersAboveLicenseLimit(-adminSeatsLeft);
1974
- }
1975
- };
1976
- const seatEnforcement = {
1977
- seatEnforcementWorkflow,
1978
- getDisabledUserList
1979
- };
1980
- const workflowsContentTypesFactory = ({ strapi: strapi2 }) => {
1981
- const contentManagerContentTypeService = strapi2.plugin("content-manager").service("content-types");
1982
- const stagesService = getService("stages", { strapi: strapi2 });
1983
- const updateContentTypeConfig = async (uid, reviewWorkflowOption) => {
1984
- const modelConfig = await contentManagerContentTypeService.findConfiguration(uid);
1985
- await contentManagerContentTypeService.updateConfiguration(
1986
- { uid },
1987
- { options: fp.merge(modelConfig.options, { reviewWorkflows: reviewWorkflowOption }) }
1988
- );
1989
- };
1990
- return {
1991
- /**
1992
- * Migrates entities stages. Used when a content type is assigned to a workflow.
1993
- * @param {*} options
1994
- * @param {Array<string>} options.srcContentTypes - The content types assigned to the previous workflow
1995
- * @param {Array<string>} options.destContentTypes - The content types assigned to the new workflow
1996
- * @param {Workflow.Stage} options.stageId - The new stage to assign the entities to
1997
- */
1998
- async migrate({ srcContentTypes = [], destContentTypes, stageId }) {
1999
- const workflowsService = getService("workflows", { strapi: strapi2 });
2000
- const { created, deleted } = diffContentTypes(srcContentTypes, destContentTypes);
2001
- await utils$1.async.map(
2002
- created,
2003
- async (uid) => {
2004
- const srcWorkflows = await workflowsService._getAssignedWorkflows(uid, {});
2005
- if (srcWorkflows.length) {
2006
- await stagesService.updateEntitiesStage(uid, { toStageId: stageId });
2007
- await utils$1.async.map(
2008
- srcWorkflows,
2009
- (srcWorkflow) => this.transferContentTypes(srcWorkflow, uid)
2010
- );
2011
- }
2012
- await updateContentTypeConfig(uid, true);
2013
- return stagesService.updateEntitiesStage(uid, {
2014
- fromStageId: null,
2015
- toStageId: stageId
2016
- });
2017
- },
2018
- // transferContentTypes can cause race conditions if called in parallel when updating the same workflow
2019
- { concurrency: 1 }
2020
- );
2021
- await utils$1.async.map(deleted, async (uid) => {
2022
- await updateContentTypeConfig(uid, false);
2023
- await stagesService.deleteAllEntitiesStage(uid, {});
2024
- });
2025
- },
2026
- /**
2027
- * Filters the content types assigned to a workflow
2028
- * @param {Workflow} srcWorkflow - The workflow to transfer from
2029
- * @param {string} uid - The content type uid
2030
- */
2031
- async transferContentTypes(srcWorkflow, uid) {
2032
- await strapi2.db.query(WORKFLOW_MODEL_UID).update({
2033
- where: {
2034
- id: srcWorkflow.id
2035
- },
2036
- data: {
2037
- contentTypes: srcWorkflow.contentTypes.filter((contentType) => contentType !== uid)
2038
- }
2039
- });
2040
- }
2041
- };
2042
- };
2043
- const diffContentTypes = (srcContentTypes, destContentTypes) => {
2044
- const created = fp.difference(destContentTypes, srcContentTypes);
2045
- const deleted = fp.difference(srcContentTypes, destContentTypes);
2046
- return { created, deleted };
2047
- };
2048
- const { ApplicationError: ApplicationError$4 } = utils$1.errors;
2049
- const processFilters = ({ strapi: strapi2 }, filters = {}) => {
2050
- const processedFilters = { ...filters };
2051
- if (fp.isString(filters.contentTypes)) {
2052
- processedFilters.contentTypes = getWorkflowContentTypeFilter({ strapi: strapi2 }, filters.contentTypes);
2053
- }
2054
- return processedFilters;
2055
- };
2056
- const processPopulate = (populate) => {
2057
- if (!populate) {
2058
- return populate;
2059
- }
2060
- return WORKFLOW_POPULATE;
2061
- };
2062
- const workflows$1 = ({ strapi: strapi2 }) => {
2063
- const workflowsContentTypes = workflowsContentTypesFactory({ strapi: strapi2 });
2064
- const workflowsValidationService = getService("review-workflows-validation", { strapi: strapi2 });
2065
- const metrics2 = getService("review-workflows-metrics", { strapi: strapi2 });
2066
- return {
2067
- /**
2068
- * Returns all the workflows matching the user-defined filters.
2069
- * @param {object} opts - Options for the query.
2070
- * @param {object} opts.filters - Filters object.
2071
- * @returns {Promise<object[]>} - List of workflows that match the user's filters.
2072
- */
2073
- async find(opts = {}) {
2074
- const filters = processFilters({ strapi: strapi2 }, opts.filters);
2075
- const populate = processPopulate(opts.populate);
2076
- const query = strapi2.get("query-params").transform(WORKFLOW_MODEL_UID, {
2077
- ...opts,
2078
- filters,
2079
- populate
2080
- });
2081
- return strapi2.db.query(WORKFLOW_MODEL_UID).findMany(query);
2082
- },
2083
- /**
2084
- * Returns the workflow with the specified ID.
2085
- * @param {string} id - ID of the requested workflow.
2086
- * @param {object} opts - Options for the query.
2087
- * @returns {Promise<object>} - Workflow object matching the requested ID.
2088
- */
2089
- findById(id, opts = {}) {
2090
- const populate = processPopulate(opts.populate);
2091
- const query = strapi2.get("query-params").transform(WORKFLOW_MODEL_UID, { populate });
2092
- return strapi2.db.query(WORKFLOW_MODEL_UID).findOne({
2093
- ...query,
2094
- where: { id }
2095
- });
2096
- },
2097
- /**
2098
- * Creates a new workflow.
2099
- * @param {object} opts - Options for creating the new workflow.
2100
- * @returns {Promise<object>} - Workflow object that was just created.
2101
- * @throws {ValidationError} - If the workflow has no stages.
2102
- */
2103
- async create(opts) {
2104
- let createOpts = { ...opts, populate: WORKFLOW_POPULATE };
2105
- workflowsValidationService.validateWorkflowStages(opts.data.stages);
2106
- await workflowsValidationService.validateWorkflowCount(1);
2107
- return strapi2.db.transaction(async () => {
2108
- const stages2 = await getService("stages", { strapi: strapi2 }).createMany(opts.data.stages);
2109
- const mapIds = fp.map(fp.get("id"));
2110
- createOpts = fp.set("data.stages", mapIds(stages2), createOpts);
2111
- if (opts.data.contentTypes) {
2112
- await workflowsContentTypes.migrate({
2113
- destContentTypes: opts.data.contentTypes,
2114
- stageId: stages2[0].id
2115
- });
2116
- }
2117
- metrics2.sendDidCreateWorkflow();
2118
- return strapi2.db.query(WORKFLOW_MODEL_UID).create(strapi2.get("query-params").transform(WORKFLOW_MODEL_UID, createOpts));
2119
- });
2120
- },
2121
- /**
2122
- * Updates an existing workflow.
2123
- * @param {object} workflow - The existing workflow to update.
2124
- * @param {object} opts - Options for updating the workflow.
2125
- * @returns {Promise<object>} - Workflow object that was just updated.
2126
- * @throws {ApplicationError} - If the supplied stage ID does not belong to the workflow.
2127
- */
2128
- async update(workflow2, opts) {
2129
- const stageService = getService("stages", { strapi: strapi2 });
2130
- let updateOpts = { ...opts, populate: { ...WORKFLOW_POPULATE } };
2131
- let updatedStageIds;
2132
- await workflowsValidationService.validateWorkflowCount();
2133
- return strapi2.db.transaction(async () => {
2134
- if (opts.data.stages) {
2135
- workflowsValidationService.validateWorkflowStages(opts.data.stages);
2136
- opts.data.stages.forEach(
2137
- (stage) => this.assertStageBelongsToWorkflow(stage.id, workflow2)
2138
- );
2139
- updatedStageIds = await stageService.replaceStages(workflow2.stages, opts.data.stages, workflow2.contentTypes).then((stages2) => stages2.map((stage) => stage.id));
2140
- updateOpts = fp.set("data.stages", updatedStageIds, updateOpts);
2141
- }
2142
- if (opts.data.contentTypes) {
2143
- await workflowsContentTypes.migrate({
2144
- srcContentTypes: workflow2.contentTypes,
2145
- destContentTypes: opts.data.contentTypes,
2146
- stageId: updatedStageIds ? updatedStageIds[0] : workflow2.stages[0].id
2147
- });
2148
- }
2149
- metrics2.sendDidEditWorkflow();
2150
- const query = strapi2.get("query-params").transform(WORKFLOW_MODEL_UID, updateOpts);
2151
- return strapi2.db.query(WORKFLOW_MODEL_UID).update({
2152
- ...query,
2153
- where: { id: workflow2.id }
2154
- });
2155
- });
2156
- },
2157
- /**
2158
- * Deletes an existing workflow.
2159
- * Also deletes all the workflow stages and migrate all assigned the content types.
2160
- * @param {*} workflow
2161
- * @param {*} opts
2162
- * @returns
2163
- */
2164
- async delete(workflow2, opts) {
2165
- const stageService = getService("stages", { strapi: strapi2 });
2166
- const workflowCount = await this.count();
2167
- if (workflowCount <= 1) {
2168
- throw new ApplicationError$4("Can not delete the last workflow");
2169
- }
2170
- return strapi2.db.transaction(async () => {
2171
- await stageService.deleteMany(workflow2.stages);
2172
- await workflowsContentTypes.migrate({
2173
- srcContentTypes: workflow2.contentTypes,
2174
- destContentTypes: []
2175
- });
2176
- const query = strapi2.get("query-params").transform(WORKFLOW_MODEL_UID, opts);
2177
- return strapi2.db.query(WORKFLOW_MODEL_UID).delete({
2178
- ...query,
2179
- where: { id: workflow2.id }
2180
- });
2181
- });
2182
- },
2183
- /**
2184
- * Returns the total count of workflows.
2185
- * @returns {Promise<number>} - Total count of workflows.
2186
- */
2187
- count() {
2188
- return strapi2.db.query(WORKFLOW_MODEL_UID).count();
2189
- },
2190
- /**
2191
- * Finds the assigned workflow for a given content type ID.
2192
- * @param {string} uid - Content type ID to find the assigned workflow for.
2193
- * @param {object} opts - Options for the query.
2194
- * @returns {Promise<object|null>} - Assigned workflow object if found, or null.
2195
- */
2196
- async getAssignedWorkflow(uid, opts = {}) {
2197
- const workflows2 = await this._getAssignedWorkflows(uid, opts);
2198
- return workflows2.length > 0 ? workflows2[0] : null;
2199
- },
2200
- /**
2201
- * Finds all the assigned workflows for a given content type ID.
2202
- * Normally, there should only be one workflow assigned to a content type.
2203
- * However, edge cases can occur where a content type is assigned to multiple workflows.
2204
- * @param {string} uid - Content type ID to find the assigned workflows for.
2205
- * @param {object} opts - Options for the query.
2206
- * @returns {Promise<object[]>} - List of assigned workflow objects.
2207
- */
2208
- async _getAssignedWorkflows(uid, opts = {}) {
2209
- return this.find({
2210
- ...opts,
2211
- filters: { contentTypes: getWorkflowContentTypeFilter({ strapi: strapi2 }, uid) }
2212
- });
2213
- },
2214
- /**
2215
- * Asserts that a content type has an assigned workflow.
2216
- * @param {string} uid - Content type ID to verify the assignment of.
2217
- * @returns {Promise<object>} - Workflow object associated with the content type ID.
2218
- * @throws {ApplicationError} - If no assigned workflow is found for the content type ID.
2219
- */
2220
- async assertContentTypeBelongsToWorkflow(uid) {
2221
- const workflow2 = await this.getAssignedWorkflow(uid, {
2222
- populate: "stages"
2223
- });
2224
- if (!workflow2) {
2225
- throw new ApplicationError$4(`Review workflows is not activated on Content Type ${uid}.`);
2226
- }
2227
- return workflow2;
2228
- },
2229
- /**
2230
- * Asserts that a stage belongs to a given workflow.
2231
- * @param {string} stageId - ID of stage to check.
2232
- * @param {object} workflow - Workflow object to check against.
2233
- * @returns
2234
- * @throws {ApplicationError} - If the stage does not belong to the specified workflow.
2235
- */
2236
- assertStageBelongsToWorkflow(stageId, workflow2) {
2237
- if (!stageId) {
2238
- return;
2239
- }
2240
- const belongs = workflow2.stages.some((stage) => stage.id === stageId);
2241
- if (!belongs) {
2242
- throw new ApplicationError$4(`Stage does not belong to workflow "${workflow2.name}"`);
2243
- }
2244
- }
2245
- };
2246
- };
2247
- const { ApplicationError: ApplicationError$3, ValidationError: ValidationError$2 } = utils$1.errors;
2248
- const sanitizedStageFields = ["id", "name", "workflow", "color"];
2249
- const sanitizeStageFields = fp.pick(sanitizedStageFields);
2250
- const stages$1 = ({ strapi: strapi2 }) => {
2251
- const metrics2 = getService("review-workflows-metrics", { strapi: strapi2 });
2252
- const stagePermissionsService = getService("stage-permissions", { strapi: strapi2 });
2253
- const workflowsValidationService = getService("review-workflows-validation", { strapi: strapi2 });
2254
- return {
2255
- find({ workflowId, populate }) {
2256
- return strapi2.db.query(STAGE_MODEL_UID).findMany({
2257
- where: { workflow: workflowId },
2258
- populate
2259
- });
2260
- },
2261
- findById(id, { populate } = {}) {
2262
- return strapi2.db.query(STAGE_MODEL_UID).findOne({
2263
- where: { id },
2264
- populate
2265
- });
2266
- },
2267
- async createMany(stagesList, { fields } = {}) {
2268
- const params = { select: fields ?? "*" };
2269
- const stages2 = await Promise.all(
2270
- stagesList.map(
2271
- (stage) => strapi2.db.query(STAGE_MODEL_UID).create({
2272
- data: sanitizeStageFields(stage),
2273
- ...params
2274
- })
2275
- )
2276
- );
2277
- await utils$1.async.reduce(stagesList)(async (_2, stage, idx) => {
2278
- if (!stage.permissions || stage.permissions.length === 0) {
2279
- return;
2280
- }
2281
- const stagePermissions2 = stage.permissions;
2282
- const stageId = stages2[idx].id;
2283
- const permissions = await utils$1.async.map(
2284
- stagePermissions2,
2285
- // Register each stage permission
2286
- (permission2) => stagePermissionsService.register({
2287
- roleId: permission2.role,
2288
- action: permission2.action,
2289
- fromStage: stageId
2290
- })
2291
- );
2292
- await strapi2.db.query(STAGE_MODEL_UID).update({
2293
- where: { id: stageId },
2294
- data: {
2295
- permissions: permissions.flat().map((p) => p.id)
2296
- }
2297
- });
2298
- }, []);
2299
- metrics2.sendDidCreateStage();
2300
- return stages2;
2301
- },
2302
- async update(srcStage, destStage) {
2303
- let stagePermissions2 = srcStage?.permissions ?? [];
2304
- const stageId = destStage.id;
2305
- if (destStage.permissions) {
2306
- await this.deleteStagePermissions([srcStage]);
2307
- const permissions = await utils$1.async.map(
2308
- destStage.permissions,
2309
- (permission2) => stagePermissionsService.register({
2310
- roleId: permission2.role,
2311
- action: permission2.action,
2312
- fromStage: stageId
2313
- })
2314
- );
2315
- stagePermissions2 = permissions.flat().map((p) => p.id);
2316
- }
2317
- const stage = await strapi2.db.query(STAGE_MODEL_UID).update({
2318
- where: { id: stageId },
2319
- data: {
2320
- ...destStage,
2321
- permissions: stagePermissions2
2322
- }
2323
- });
2324
- metrics2.sendDidEditStage();
2325
- return stage;
2326
- },
2327
- async delete(stage) {
2328
- await this.deleteStagePermissions([stage]);
2329
- const deletedStage = await strapi2.db.query(STAGE_MODEL_UID).delete({
2330
- where: { id: stage.id }
2331
- });
2332
- metrics2.sendDidDeleteStage();
2333
- return deletedStage;
2334
- },
2335
- async deleteMany(stages2) {
2336
- await this.deleteStagePermissions(stages2);
2337
- return strapi2.db.query(STAGE_MODEL_UID).deleteMany({
2338
- where: { id: { $in: stages2.map((s) => s.id) } }
2339
- });
2340
- },
2341
- async deleteStagePermissions(stages2) {
2342
- const permissions = stages2.map((s) => s.permissions || []).flat();
2343
- await stagePermissionsService.unregister(permissions || []);
2344
- },
2345
- count({ workflowId } = {}) {
2346
- const opts = {};
2347
- if (workflowId) {
2348
- opts.where = {
2349
- workflow: workflowId
2350
- };
2351
- }
2352
- return strapi2.db.query(STAGE_MODEL_UID).count(opts);
2353
- },
2354
- async replaceStages(srcStages, destStages, contentTypesToMigrate = []) {
2355
- const { created, updated, deleted } = getDiffBetweenStages(srcStages, destStages);
2356
- assertAtLeastOneStageRemain(srcStages || [], { created, deleted });
2357
- return strapi2.db.transaction(async ({ trx }) => {
2358
- const createdStages = await this.createMany(created, { fields: ["id"] });
2359
- const createdStagesIds = fp.map("id", createdStages);
2360
- await utils$1.async.map(updated, (destStage) => {
2361
- const srcStage = srcStages.find((s) => s.id === destStage.id);
2362
- return this.update(srcStage, destStage);
2363
- });
2364
- await utils$1.async.map(deleted, async (stage) => {
2365
- const nearestStage = findNearestMatchingStage(
2366
- [...srcStages, ...createdStages],
2367
- srcStages.findIndex((s) => s.id === stage.id),
2368
- (targetStage) => {
2369
- return !deleted.find((s) => s.id === targetStage.id);
2370
- }
2371
- );
2372
- await utils$1.async.map(contentTypesToMigrate, (contentTypeUID) => {
2373
- this.updateEntitiesStage(contentTypeUID, {
2374
- fromStageId: stage.id,
2375
- toStageId: nearestStage.id,
2376
- trx
2377
- });
2378
- });
2379
- return this.delete(stage);
2380
- });
2381
- return destStages.map((stage) => ({
2382
- ...stage,
2383
- id: stage.id ?? createdStagesIds.shift()
2384
- }));
2385
- });
2386
- },
2387
- /**
2388
- * Update the stage of an entity
2389
- *
2390
- * @param {object} entityInfo
2391
- * @param {number} entityInfo.id - Entity id
2392
- * @param {string} entityInfo.modelUID - the content-type of the entity
2393
- * @param {number} stageId - The id of the stage to assign to the entity
2394
- */
2395
- async updateEntity(entityInfo, stageId) {
2396
- const stage = await this.findById(stageId);
2397
- await workflowsValidationService.validateWorkflowCount();
2398
- if (!stage) {
2399
- throw new ApplicationError$3(`Selected stage does not exist`);
2400
- }
2401
- const entity = await strapi2.db.query(entityInfo.modelUID).update({
2402
- where: {
2403
- id: entityInfo.id
2404
- },
2405
- data: { [ENTITY_STAGE_ATTRIBUTE]: stageId },
2406
- populate: [ENTITY_STAGE_ATTRIBUTE]
2407
- });
2408
- metrics2.sendDidChangeEntryStage();
2409
- return entity;
2410
- },
2411
- /**
2412
- * Updates entity stages of a content type:
2413
- * - If fromStageId is undefined, all entities with an existing stage will be assigned the new stage
2414
- * - If fromStageId is null, all entities without a stage will be assigned the new stage
2415
- * - If fromStageId is a number, all entities with that stage will be assigned the new stage
2416
- *
2417
- * For performance reasons we use knex queries directly.
2418
- *
2419
- * @param {string} contentTypeUID
2420
- * @param {number | undefined | null} fromStageId
2421
- * @param {number} toStageId
2422
- * @param {import('knex').Knex.Transaction} trx
2423
- * @returns
2424
- */
2425
- async updateEntitiesStage(contentTypeUID, { fromStageId, toStageId }) {
2426
- const { attributes, tableName } = strapi2.db.metadata.get(contentTypeUID);
2427
- const joinTable = attributes[ENTITY_STAGE_ATTRIBUTE].joinTable;
2428
- const joinColumn = joinTable.joinColumn.name;
2429
- const invJoinColumn = joinTable.inverseJoinColumn.name;
2430
- await workflowsValidationService.validateWorkflowCount();
2431
- return strapi2.db.transaction(async ({ trx }) => {
2432
- if (fromStageId === void 0) {
2433
- return strapi2.db.getConnection().from(joinTable.name).update({ [invJoinColumn]: toStageId }).transacting(trx);
2434
- }
2435
- const selectStatement = strapi2.db.getConnection().select({ [joinColumn]: "t1.id", [invJoinColumn]: toStageId }).from(`${tableName} as t1`).leftJoin(`${joinTable.name} as t2`, `t1.id`, `t2.${joinColumn}`).where(`t2.${invJoinColumn}`, fromStageId).toSQL();
2436
- return strapi2.db.getConnection(joinTable.name).insert(
2437
- strapi2.db.connection.raw(
2438
- `(${joinColumn}, ${invJoinColumn}) ${selectStatement.sql}`,
2439
- selectStatement.bindings
2440
- )
2441
- ).transacting(trx);
2442
- });
2443
- },
2444
- /**
2445
- * Deletes all entity stages of a content type
2446
- * @param {string} contentTypeUID
2447
- * @returns
2448
- */
2449
- async deleteAllEntitiesStage(contentTypeUID) {
2450
- const { attributes } = strapi2.db.metadata.get(contentTypeUID);
2451
- const joinTable = attributes[ENTITY_STAGE_ATTRIBUTE].joinTable;
2452
- return strapi2.db.transaction(
2453
- async ({ trx }) => strapi2.db.getConnection().from(joinTable.name).delete().transacting(trx)
2454
- );
2455
- }
2456
- };
2457
- };
2458
- function getDiffBetweenStages(sourceStages, comparisonStages) {
2459
- const result = comparisonStages.reduce(
2460
- // ...
2461
- (acc, stageToCompare) => {
2462
- const srcStage = sourceStages.find((stage) => stage.id === stageToCompare.id);
2463
- if (!srcStage) {
2464
- acc.created.push(stageToCompare);
2465
- } else if (!fp.isEqual(
2466
- fp.pick(["name", "color", "permissions"], srcStage),
2467
- fp.pick(["name", "color", "permissions"], stageToCompare)
2468
- )) {
2469
- acc.updated.push(stageToCompare);
2470
- }
2471
- return acc;
2472
- },
2473
- { created: [], updated: [] }
2474
- );
2475
- result.deleted = sourceStages.filter(
2476
- (srcStage) => !comparisonStages.some((cmpStage) => cmpStage.id === srcStage.id)
2477
- );
2478
- return result;
2479
- }
2480
- function assertAtLeastOneStageRemain(workflowStages, diffStages) {
2481
- const remainingStagesCount = workflowStages.length - diffStages.deleted.length + diffStages.created.length;
2482
- if (remainingStagesCount < 1) {
2483
- throw new ValidationError$2(ERRORS.WORKFLOW_WITHOUT_STAGES);
2484
- }
2485
- }
2486
- function findNearestMatchingStage(stages2, startIndex, condition) {
2487
- for (let i = startIndex; i >= 0; i -= 1) {
2488
- if (condition(stages2[i])) {
2489
- return stages2[i];
2490
- }
2491
- }
2492
- const remainingArray = stages2.slice(startIndex + 1);
2493
- const nearestObject = remainingArray.filter(condition)[0];
2494
- return nearestObject;
2495
- }
2496
- const { ApplicationError: ApplicationError$2 } = utils$1.errors;
2497
- const validActions = [STAGE_TRANSITION_UID];
2498
- const stagePermissions = ({ strapi: strapi2 }) => {
2499
- const roleService = getService("role");
2500
- const permissionService = getService("permission");
2501
- return {
2502
- async register({ roleId, action, fromStage }) {
2503
- if (!validActions.includes(action)) {
2504
- throw new ApplicationError$2(`Invalid action ${action}`);
2505
- }
2506
- const permissions = await roleService.addPermissions(roleId, [
2507
- {
2508
- action,
2509
- actionParameters: {
2510
- from: fromStage
2511
- }
2512
- }
2513
- ]);
2514
- return permissions;
2515
- },
2516
- async registerMany(permissions) {
2517
- return utils$1.async.map(permissions, this.register);
2518
- },
2519
- async unregister(permissions) {
2520
- const permissionIds = permissions.map(fp.prop("id"));
2521
- await permissionService.deleteByIds(permissionIds);
2522
- },
2523
- can(action, fromStage) {
2524
- const requestState = strapi2.requestContext.get()?.state;
2525
- if (!requestState) {
2526
- return false;
2527
- }
2528
- const userRoles = requestState.user?.roles;
2529
- if (userRoles?.some((role2) => role2.code === "strapi-super-admin")) {
2530
- return true;
2531
- }
2532
- return requestState.userAbility.can({
2533
- name: action,
2534
- params: { from: fromStage }
2535
- });
2536
- }
2537
- };
2538
- };
2539
- const { ApplicationError: ApplicationError$1 } = utils$1.errors;
2540
- const assignees$1 = ({ strapi: strapi2 }) => {
2541
- const metrics2 = getService("review-workflows-metrics", { strapi: strapi2 });
2542
- return {
2543
- async findEntityAssigneeId(id, model) {
2544
- const entity = await strapi2.db.query(model).findOne({
2545
- where: { id },
2546
- populate: [ENTITY_ASSIGNEE_ATTRIBUTE],
2547
- select: []
2548
- });
2549
- return entity?.[ENTITY_ASSIGNEE_ATTRIBUTE]?.id ?? null;
2550
- },
2551
- /**
2552
- * Update the assignee of an entity
2553
- */
2554
- async updateEntityAssignee(id, model, assigneeId) {
2555
- if (fp.isNil(assigneeId)) {
2556
- return this.deleteEntityAssignee(id, model);
2557
- }
2558
- const userExists = await getService("user", { strapi: strapi2 }).exists({ id: assigneeId });
2559
- if (!userExists) {
2560
- throw new ApplicationError$1(`Selected user does not exist`);
2561
- }
2562
- metrics2.sendDidEditAssignee(await this.findEntityAssigneeId(id, model), assigneeId);
2563
- return strapi2.db.query(model).update({
2564
- where: { id },
2565
- data: { [ENTITY_ASSIGNEE_ATTRIBUTE]: assigneeId },
2566
- populate: [ENTITY_ASSIGNEE_ATTRIBUTE],
2567
- select: []
2568
- });
2569
- },
2570
- async deleteEntityAssignee(id, model) {
2571
- metrics2.sendDidEditAssignee(await this.findEntityAssigneeId(id, model), null);
2572
- return strapi2.db.query(model).update({
2573
- where: { id },
2574
- data: { [ENTITY_ASSIGNEE_ATTRIBUTE]: null },
2575
- populate: [ENTITY_ASSIGNEE_ATTRIBUTE],
2576
- select: []
2577
- });
2578
- }
2579
- };
2580
- };
2581
- const defaultStages = [
2582
- {
2583
- name: "To do",
2584
- color: "#4945FF"
2585
- },
2586
- {
2587
- name: "Ready to review",
2588
- color: "#9736E8"
2589
- },
2590
- {
2591
- name: "In progress",
2592
- color: "#EE5E52"
2593
- },
2594
- {
2595
- name: "Reviewed",
2596
- color: "#328048"
2597
- }
2598
- ];
2599
- const WORKFLOW_UPDATE_STAGE = "review-workflows.updateEntryStage";
2600
- const webhookEvents = {
2601
- WORKFLOW_UPDATE_STAGE
2602
- };
2603
- const MAX_DB_TABLE_NAME_LEN = 63;
2604
- const MAX_JOIN_TABLE_NAME_SUFFIX = 1 + ENTITY_STAGE_ATTRIBUTE.length + "_links_inv_fk".length;
2605
- const MAX_CONTENT_TYPE_NAME_LEN = MAX_DB_TABLE_NAME_LEN - MAX_JOIN_TABLE_NAME_SUFFIX;
2606
- const DEFAULT_OPTIONS = {
2607
- numberOfWorkflows: MAX_WORKFLOWS,
2608
- stagesPerWorkflow: MAX_STAGES_PER_WORKFLOW
2609
- };
2610
- async function initDefaultWorkflow({ workflowsService, stagesService }) {
2611
- const wfCount = await workflowsService.count();
2612
- const stagesCount = await stagesService.count();
2613
- if (wfCount === 0 && stagesCount === 0) {
2614
- const workflow2 = {
2615
- ...defaultWorkflow,
2616
- contentTypes: [],
2617
- stages: defaultStages
2618
- };
2619
- await workflowsService.create({ data: workflow2 });
2620
- }
2621
- }
2622
- const setRelation = (attributeName, target) => (contentType) => {
2623
- Object.assign(contentType.attributes, {
2624
- [attributeName]: {
2625
- writable: true,
2626
- private: false,
2627
- configurable: false,
2628
- visible: false,
2629
- useJoinTable: true,
2630
- // We want a join table to persist data when downgrading to CE
2631
- type: "relation",
2632
- relation: "oneToOne",
2633
- target
2634
- }
2635
- });
2636
- return contentType;
2637
- };
2638
- const setStageAttribute = setRelation(ENTITY_STAGE_ATTRIBUTE, STAGE_MODEL_UID);
2639
- const setAssigneeAttribute = setRelation(ENTITY_ASSIGNEE_ATTRIBUTE, "admin::user");
2640
- const setReviewWorkflowAttributes = (contentType) => {
2641
- setStageAttribute(contentType);
2642
- setAssigneeAttribute(contentType);
2643
- };
2644
- function extendReviewWorkflowContentTypes({ strapi: strapi2 }) {
2645
- const extendContentType = (contentTypeUID) => {
2646
- const assertContentTypeCompatibility = (contentType) => contentType.collectionName.length <= MAX_CONTENT_TYPE_NAME_LEN;
2647
- const incompatibleContentTypeAlert = (contentType) => {
2648
- strapi2.log.warn(
2649
- `Review Workflow cannot be activated for the content type with the name '${contentType.info.displayName}' because the name exceeds the maximum length of ${MAX_CONTENT_TYPE_NAME_LEN} characters.`
2650
- );
2651
- return contentType;
2652
- };
2653
- const extendContentTypeIfCompatible = fp.cond([
2654
- [assertContentTypeCompatibility, setReviewWorkflowAttributes],
2655
- [fp.stubTrue, incompatibleContentTypeAlert]
2656
- ]);
2657
- strapi2.get("content-types").extend(contentTypeUID, extendContentTypeIfCompatible);
2658
- };
2659
- fp.pipe([
2660
- getVisibleContentTypesUID,
2661
- // Iterate over UIDs to extend the content-type
2662
- fp.forEach(extendContentType)
2663
- ])(strapi2.contentTypes);
2664
- }
2665
- function persistStagesJoinTables({ strapi: strapi2 }) {
2666
- return async ({ contentTypes }) => {
2667
- const getStageTableToPersist = (contentTypeUID) => {
2668
- const { attributes, tableName } = strapi2.db.metadata.get(contentTypeUID);
2669
- const joinTableName = attributes[ENTITY_STAGE_ATTRIBUTE].joinTable.name;
2670
- return { name: joinTableName, dependsOn: [{ name: tableName }] };
2671
- };
2672
- const joinTablesToPersist = fp.pipe([
2673
- getVisibleContentTypesUID,
2674
- fp.filter((uid) => hasStageAttribute(contentTypes[uid])),
2675
- fp.map(getStageTableToPersist)
2676
- ])(contentTypes);
2677
- await removePersistedTablesWithSuffix("_strapi_stage_links");
2678
- await persistTables(joinTablesToPersist);
2679
- };
2680
- }
2681
- const registerWebhookEvents = async ({ strapi: strapi2 }) => Object.entries(webhookEvents).forEach(
2682
- ([eventKey, event]) => strapi2.webhookStore.addAllowedEvent(eventKey, event)
2683
- );
2684
- const reviewWorkflows = ({ strapi: strapi2 }) => {
2685
- const workflowsService = getService("workflows", { strapi: strapi2 });
2686
- const stagesService = getService("stages", { strapi: strapi2 });
2687
- const workflowsValidationService = getService("review-workflows-validation", { strapi: strapi2 });
2688
- return {
2689
- async bootstrap() {
2690
- await registerWebhookEvents({ strapi: strapi2 });
2691
- await initDefaultWorkflow({ workflowsService, stagesService, strapi: strapi2 });
2692
- },
2693
- async register({ options } = { options: {} }) {
2694
- extendReviewWorkflowContentTypes({ strapi: strapi2 });
2695
- strapi2.hook("strapi::content-types.afterSync").register(persistStagesJoinTables({ strapi: strapi2 }));
2696
- const reviewWorkflowsOptions = fp.defaultsDeep(DEFAULT_OPTIONS, options);
2697
- workflowsValidationService.register(reviewWorkflowsOptions);
2698
- }
2699
- };
2700
- };
2701
- const { ValidationError: ValidationError$1 } = utils$1.errors;
2702
- const reviewWorkflowsValidation = ({ strapi: strapi2 }) => {
2703
- return {
2704
- limits: {
2705
- numberOfWorkflows: MAX_WORKFLOWS,
2706
- stagesPerWorkflow: MAX_STAGES_PER_WORKFLOW
2707
- },
2708
- register({ numberOfWorkflows, stagesPerWorkflow }) {
2709
- if (!Object.isFrozen(this.limits)) {
2710
- this.limits.numberOfWorkflows = clampMaxWorkflows(
2711
- numberOfWorkflows || this.limits.numberOfWorkflows
2712
- );
2713
- this.limits.stagesPerWorkflow = clampMaxStagesPerWorkflow(
2714
- stagesPerWorkflow || this.limits.stagesPerWorkflow
2715
- );
2716
- Object.freeze(this.limits);
2717
- }
2718
- },
2719
- /**
2720
- * Validates the stages of a workflow.
2721
- * @param {Array} stages - Array of stages to be validated.
2722
- * @throws {ValidationError} - If the workflow has no stages or exceeds the limit.
2723
- */
2724
- validateWorkflowStages(stages2) {
2725
- if (!stages2 || stages2.length === 0) {
2726
- throw new ValidationError$1(ERRORS.WORKFLOW_WITHOUT_STAGES);
2727
- }
2728
- if (stages2.length > this.limits.stagesPerWorkflow) {
2729
- throw new ValidationError$1(ERRORS.STAGES_LIMIT);
2730
- }
2731
- const stageNames = stages2.map((stage) => stage.name);
2732
- if (fp.uniq(stageNames).length !== stageNames.length) {
2733
- throw new ValidationError$1(ERRORS.DUPLICATED_STAGE_NAME);
2734
- }
2735
- },
2736
- async validateWorkflowCountStages(workflowId, countAddedStages = 0) {
2737
- const stagesService = getService("stages", { strapi: strapi2 });
2738
- const countWorkflowStages = await stagesService.count({ workflowId });
2739
- if (countWorkflowStages + countAddedStages > this.limits.stagesPerWorkflow) {
2740
- throw new ValidationError$1(ERRORS.STAGES_LIMIT);
2741
- }
2742
- },
2743
- /**
2744
- * Validates the count of existing and added workflows.
2745
- * @param {number} [countAddedWorkflows=0] - The count of workflows to be added.
2746
- * @throws {ValidationError} - If the total count of workflows exceeds the limit.
2747
- * @returns {Promise<void>} - A Promise that resolves when the validation is completed.
2748
- */
2749
- async validateWorkflowCount(countAddedWorkflows = 0) {
2750
- const workflowsService = getService("workflows", { strapi: strapi2 });
2751
- const countWorkflows = await workflowsService.count();
2752
- if (countWorkflows + countAddedWorkflows > this.limits.numberOfWorkflows) {
2753
- throw new ValidationError$1(ERRORS.WORKFLOWS_LIMIT);
2754
- }
2755
- }
2756
- };
2757
- };
2758
- const getDataWithStage = async (workflow2, data) => {
2759
- if (!fp.isNil(ENTITY_STAGE_ATTRIBUTE)) {
2760
- return { ...data, [ENTITY_STAGE_ATTRIBUTE]: workflow2.stages[0].id };
2761
- }
2762
- return data;
2763
- };
2764
- const getEntityStage = async (uid, id) => {
2765
- const entity = await strapi.db.query(uid).findOne({
2766
- where: { id },
2767
- populate: {
2768
- [ENTITY_STAGE_ATTRIBUTE]: {
2769
- populate: {
2770
- workflow: true
2771
- }
2772
- }
2773
- }
2774
- });
2775
- return entity?.[ENTITY_STAGE_ATTRIBUTE] ?? {};
2776
- };
2777
- const decorator = (service) => ({
2778
- async create(uid, opts = {}) {
2779
- const workflow2 = await getService("workflows").getAssignedWorkflow(uid, {
2780
- populate: "stages"
2781
- });
2782
- if (!workflow2) {
2783
- return service.create.call(this, uid, opts);
2784
- }
2785
- const data = await getDataWithStage(workflow2, opts.data);
2786
- return service.create.call(this, uid, { ...opts, data });
2787
- },
2788
- async update(uid, entityId, opts = {}) {
2789
- const data = { ...opts.data };
2790
- if (fp.isNil(data[ENTITY_STAGE_ATTRIBUTE])) {
2791
- delete data[ENTITY_STAGE_ATTRIBUTE];
2792
- return service.update.call(this, uid, entityId, { ...opts, data });
2793
- }
2794
- const previousStage = await getEntityStage(uid, entityId);
2795
- const updatedEntity = await service.update.call(this, uid, entityId, { ...opts, data });
2796
- const updatedStage = updatedEntity[ENTITY_STAGE_ATTRIBUTE];
2797
- if (updatedStage && previousStage?.id && previousStage.id !== updatedStage.id) {
2798
- const model = strapi.getModel(uid);
2799
- strapi.eventHub.emit(WORKFLOW_UPDATE_STAGE, {
2800
- model: model.modelName,
2801
- uid: model.uid,
2802
- entity: {
2803
- id: entityId
2804
- },
2805
- workflow: {
2806
- id: previousStage.workflow.id,
2807
- stages: {
2808
- from: {
2809
- id: previousStage.id,
2810
- name: previousStage.name
2811
- },
2812
- to: {
2813
- id: updatedStage.id,
2814
- name: updatedStage.name
2815
- }
2816
- }
2817
- }
2818
- });
2819
- }
2820
- return updatedEntity;
2821
- }
2822
- });
2823
- const reviewWorkflowsDecorator = () => ({
2824
- decorator
2825
- });
2826
- const sendDidCreateStage = async () => {
2827
- strapi.telemetry.send("didCreateStage", {});
2828
- };
2829
- const sendDidEditStage = async () => {
2830
- strapi.telemetry.send("didEditStage", {});
2831
- };
2832
- const sendDidDeleteStage = async () => {
2833
- strapi.telemetry.send("didDeleteStage", {});
2834
- };
2835
- const sendDidChangeEntryStage = async () => {
2836
- strapi.telemetry.send("didChangeEntryStage", {});
2837
- };
2838
- const sendDidCreateWorkflow = async () => {
2839
- strapi.telemetry.send("didCreateWorkflow", {});
2840
- };
2841
- const sendDidEditWorkflow = async () => {
2842
- strapi.telemetry.send("didEditWorkflow", {});
2843
- };
2844
- const sendDidEditAssignee = async (fromId, toId) => {
2845
- strapi.telemetry.send("didEditAssignee", { from: fromId, to: toId });
2846
- };
2847
- const sendDidSendReviewWorkflowPropertiesOnceAWeek = async (numberOfActiveWorkflows, avgStagesCount, maxStagesCount, activatedContentTypes) => {
2848
- strapi.telemetry.send("didSendReviewWorkflowPropertiesOnceAWeek", {
2849
- groupProperties: {
2850
- numberOfActiveWorkflows,
2851
- avgStagesCount,
2852
- maxStagesCount,
2853
- activatedContentTypes
2854
- }
2855
- });
1098
+ }
1099
+ await syncDisabledUserRecords();
1100
+ const currentActiveUserCount = await getService("user").getCurrentActiveUserCount();
1101
+ const adminSeatsLeft = adminSeats - currentActiveUserCount;
1102
+ if (adminSeatsLeft > 0) {
1103
+ await enableMaximumUserCount(adminSeatsLeft);
1104
+ } else if (adminSeatsLeft < 0) {
1105
+ await disableUsersAboveLicenseLimit(-adminSeatsLeft);
1106
+ }
2856
1107
  };
2857
- const reviewWorkflowsMetrics = {
2858
- sendDidCreateStage,
2859
- sendDidEditStage,
2860
- sendDidDeleteStage,
2861
- sendDidChangeEntryStage,
2862
- sendDidCreateWorkflow,
2863
- sendDidEditWorkflow,
2864
- sendDidSendReviewWorkflowPropertiesOnceAWeek,
2865
- sendDidEditAssignee
2866
- };
2867
- const ONE_WEEK = 7 * 24 * 60 * 60 * 1e3;
2868
- const getWeeklyCronScheduleAt = (date) => `${date.getSeconds()} ${date.getMinutes()} ${date.getHours()} * * ${date.getDay()}`;
2869
- const reviewWorkflowsWeeklyMetrics = ({ strapi: strapi2 }) => {
2870
- const metrics2 = getService("review-workflows-metrics", { strapi: strapi2 });
2871
- const workflowsService = getService("workflows", { strapi: strapi2 });
2872
- const getMetricsStoreValue = async () => {
2873
- const value = await strapi2.store.get({ type: "plugin", name: "ee", key: "metrics" });
2874
- return fp.defaultTo({}, value);
2875
- };
2876
- const setMetricsStoreValue = (value) => strapi2.store.set({ type: "plugin", name: "ee", key: "metrics", value });
2877
- return {
2878
- async computeMetrics() {
2879
- const workflows2 = await workflowsService.find({ populate: "stages" });
2880
- const stagesCount = fp.flow(
2881
- fp.map("stages"),
2882
- // Number of stages per workflow
2883
- fp.map(fp.size)
2884
- )(workflows2);
2885
- const contentTypesCount = fp.flow(
2886
- fp.map("contentTypes"),
2887
- // Number of content types per workflow
2888
- fp.map(fp.size)
2889
- )(workflows2);
2890
- return {
2891
- numberOfActiveWorkflows: fp.size(workflows2),
2892
- avgStagesCount: fp.mean(stagesCount),
2893
- maxStagesCount: fp.max(stagesCount),
2894
- activatedContentTypes: fp.sum(contentTypesCount)
2895
- };
2896
- },
2897
- async sendMetrics() {
2898
- const computedMetrics = await this.computeMetrics();
2899
- metrics2.sendDidSendReviewWorkflowPropertiesOnceAWeek(computedMetrics);
2900
- const metricsInfoStored = await getMetricsStoreValue();
2901
- await setMetricsStoreValue({ ...metricsInfoStored, lastWeeklyUpdate: (/* @__PURE__ */ new Date()).getTime() });
2902
- },
2903
- async ensureWeeklyStoredCronSchedule() {
2904
- const metricsInfoStored = await getMetricsStoreValue();
2905
- const { weeklySchedule: currentSchedule, lastWeeklyUpdate } = metricsInfoStored;
2906
- const now = /* @__PURE__ */ new Date();
2907
- let weeklySchedule = currentSchedule;
2908
- if (!currentSchedule || !lastWeeklyUpdate || lastWeeklyUpdate + ONE_WEEK < now.getTime()) {
2909
- weeklySchedule = getWeeklyCronScheduleAt(dateFns.add(now, { seconds: 10 }));
2910
- await setMetricsStoreValue({ ...metricsInfoStored, weeklySchedule });
2911
- }
2912
- return weeklySchedule;
2913
- },
2914
- async registerCron() {
2915
- const weeklySchedule = await this.ensureWeeklyStoredCronSchedule();
2916
- strapi2.cron.add({ [weeklySchedule]: this.sendMetrics.bind(this) });
2917
- }
2918
- };
1108
+ const seatEnforcement = {
1109
+ seatEnforcementWorkflow,
1110
+ getDisabledUserList
2919
1111
  };
2920
- const index$1 = {
1112
+ const services = {
2921
1113
  auth,
2922
1114
  passport,
2923
1115
  role: role$1,
2924
1116
  user: user$1,
2925
1117
  metrics,
2926
- "seat-enforcement": seatEnforcement,
2927
- workflows: workflows$1,
2928
- stages: stages$1,
2929
- "stage-permissions": stagePermissions,
2930
- assignees: assignees$1,
2931
- "review-workflows": reviewWorkflows,
2932
- "review-workflows-validation": reviewWorkflowsValidation,
2933
- "review-workflows-decorator": reviewWorkflowsDecorator,
2934
- "review-workflows-metrics": reviewWorkflowsMetrics,
2935
- "review-workflows-weekly-metrics": reviewWorkflowsWeeklyMetrics
1118
+ "seat-enforcement": seatEnforcement
2936
1119
  };
2937
1120
  const providerOptionsUpdateSchema = utils$1.yup.object().shape({
2938
1121
  autoRegister: utils$1.yup.boolean().required(),
@@ -2942,14 +1125,14 @@ const providerOptionsUpdateSchema = utils$1.yup.object().shape({
2942
1125
  if (roleId === null) {
2943
1126
  return true;
2944
1127
  }
2945
- return strapi.admin.services.role.exists({ id: roleId });
1128
+ return strapi.service("admin::role").exists({ id: roleId });
2946
1129
  }),
2947
1130
  ssoLockedRoles: utils$1.yup.array().nullable().of(
2948
1131
  utils$1.yup.strapiID().test(
2949
1132
  "is-valid-role",
2950
1133
  "You must submit a valid role for the SSO Locked roles",
2951
1134
  (roleId) => {
2952
- return strapi.admin.services.role.exists({ id: roleId });
1135
+ return strapi.service("admin::role").exists({ id: roleId });
2953
1136
  }
2954
1137
  )
2955
1138
  )
@@ -3064,7 +1247,7 @@ const providerAuthenticationFlow = compose__default.default([
3064
1247
  ]);
3065
1248
  const authentication = {
3066
1249
  async getProviders(ctx) {
3067
- const { providerRegistry: providerRegistry2 } = strapi.admin.services.passport;
1250
+ const { providerRegistry: providerRegistry2 } = strapi.service("admin::passport");
3068
1251
  ctx.body = providerRegistry2.getAll().map(toProviderDTO);
3069
1252
  },
3070
1253
  async getProviderLoginOptions(ctx) {
@@ -3092,7 +1275,7 @@ const authentication = {
3092
1275
  const {
3093
1276
  params: { provider: providerName }
3094
1277
  } = ctx;
3095
- const { providerRegistry: providerRegistry2 } = strapi.admin.services.passport;
1278
+ const { providerRegistry: providerRegistry2 } = strapi.service("admin::passport");
3096
1279
  if (!providerRegistry2.has(providerName)) {
3097
1280
  throw new ValidationError(`Invalid provider supplied: ${providerName}`);
3098
1281
  }
@@ -3109,9 +1292,9 @@ const rolesDeleteSchema = utils$1.yup.object().shape({
3109
1292
  "Roles deletion checks have failed",
3110
1293
  async function rolesDeletionChecks(ids) {
3111
1294
  try {
3112
- await strapi.admin.services.role.checkRolesIdForDeletion(ids);
1295
+ await strapi.service("admin::role").checkRolesIdForDeletion(ids);
3113
1296
  if (strapi.ee.features.isEnabled("sso")) {
3114
- await strapi.admin.services.role.ssoCheckRolesIdForDeletion(ids);
1297
+ await strapi.service("admin::role").ssoCheckRolesIdForDeletion(ids);
3115
1298
  }
3116
1299
  } catch (e) {
3117
1300
  return this.createError({ path: "ids", message: e.message });
@@ -3125,9 +1308,9 @@ const roleDeleteSchema = utils$1.yup.strapiID().required().test(
3125
1308
  "Role deletion checks have failed",
3126
1309
  async function noAdminSingleDelete(id) {
3127
1310
  try {
3128
- await strapi.admin.services.role.checkRolesIdForDeletion([id]);
1311
+ await strapi.service("admin::role").checkRolesIdForDeletion([id]);
3129
1312
  if (strapi.ee.features.isEnabled("sso")) {
3130
- await strapi.admin.services.role.ssoCheckRolesIdForDeletion([id]);
1313
+ await strapi.service("admin::role").ssoCheckRolesIdForDeletion([id]);
3131
1314
  }
3132
1315
  } catch (e) {
3133
1316
  return this.createError({ path: "id", message: e.message });
@@ -3253,687 +1436,747 @@ const checkFieldsAreCorrectlyNested = (fields) => {
3253
1436
  if (failed)
3254
1437
  break;
3255
1438
  }
3256
- return !failed;
1439
+ return !failed;
1440
+ };
1441
+ const checkFieldsDontHaveDuplicates = (fields) => {
1442
+ if (___default.default.isNil(fields)) {
1443
+ return true;
1444
+ }
1445
+ if (!Array.isArray(fields)) {
1446
+ return false;
1447
+ }
1448
+ return ___default.default.uniq(fields).length === fields.length;
1449
+ };
1450
+ const getActionFromProvider = (actionId) => {
1451
+ return getService$1("permission").actionProvider.get(actionId);
1452
+ };
1453
+ const email = utils$1.yup.string().email().lowercase();
1454
+ const firstname = utils$1.yup.string().trim().min(1);
1455
+ const lastname = utils$1.yup.string();
1456
+ const username = utils$1.yup.string().min(1);
1457
+ const password = utils$1.yup.string().min(8).matches(/[a-z]/, "${path} must contain at least one lowercase character").matches(/[A-Z]/, "${path} must contain at least one uppercase character").matches(/\d/, "${path} must contain at least one number");
1458
+ const roles = utils$1.yup.array(utils$1.yup.strapiID()).min(1);
1459
+ const isAPluginName = utils$1.yup.string().test("is-a-plugin-name", "is not a plugin name", function(value) {
1460
+ return [void 0, "admin", ...Object.keys(strapi.plugins)].includes(value) ? true : this.createError({ path: this.path, message: `${this.path} is not an existing plugin` });
1461
+ });
1462
+ const arrayOfConditionNames = utils$1.yup.array().of(utils$1.yup.string()).test("is-an-array-of-conditions", "is not a plugin name", function(value) {
1463
+ const ids = strapi.service("admin::permission").conditionProvider.keys();
1464
+ return ___default.default.isUndefined(value) || ___default.default.difference(value, ids).length === 0 ? true : this.createError({ path: this.path, message: `contains conditions that don't exist` });
1465
+ });
1466
+ const permissionsAreEquals = (a, b) => a.action === b.action && (a.subject === b.subject || ___default.default.isNil(a.subject) && ___default.default.isNil(b.subject));
1467
+ const checkNoDuplicatedPermissions = (permissions) => !Array.isArray(permissions) || permissions.every(
1468
+ (permA, i) => permissions.slice(i + 1).every((permB) => !permissionsAreEquals(permA, permB))
1469
+ );
1470
+ const checkNilFields = (action) => function(fields) {
1471
+ if (fp.isNil(action)) {
1472
+ return true;
1473
+ }
1474
+ return actionDomain.appliesToProperty("fields", action) || fp.isNil(fields);
1475
+ };
1476
+ const fieldsPropertyValidation = (action) => utils$1.yup.array().of(utils$1.yup.string()).nullable().test(
1477
+ "field-nested",
1478
+ "Fields format are incorrect (bad nesting).",
1479
+ checkFieldsAreCorrectlyNested
1480
+ ).test(
1481
+ "field-nested",
1482
+ "Fields format are incorrect (duplicates).",
1483
+ checkFieldsDontHaveDuplicates
1484
+ ).test(
1485
+ "fields-restriction",
1486
+ "The permission at ${path} must have fields set to null or undefined",
1487
+ // @ts-expect-error yup types
1488
+ checkNilFields(action)
1489
+ );
1490
+ const permission = utils$1.yup.object().shape({
1491
+ action: utils$1.yup.string().required().test("action-validity", "action is not an existing permission action", function(actionId) {
1492
+ if (fp.isNil(actionId)) {
1493
+ return true;
1494
+ }
1495
+ return !!getActionFromProvider(actionId);
1496
+ }),
1497
+ actionParameters: utils$1.yup.object().nullable(),
1498
+ subject: utils$1.yup.string().nullable().test("subject-validity", "Invalid subject submitted", function(subject) {
1499
+ const action = getActionFromProvider(this.options.parent.action);
1500
+ if (!action) {
1501
+ return true;
1502
+ }
1503
+ if (fp.isNil(action.subjects)) {
1504
+ return fp.isNil(subject);
1505
+ }
1506
+ if (fp.isArray(action.subjects)) {
1507
+ return action.subjects.includes(subject);
1508
+ }
1509
+ return false;
1510
+ }),
1511
+ properties: utils$1.yup.object().test("properties-structure", "Invalid property set at ${path}", function(properties) {
1512
+ const action = getActionFromProvider(this.options.parent.action);
1513
+ const hasNoProperties = fp.isEmpty(properties) || fp.isNil(properties);
1514
+ if (!fp.has("options.applyToProperties", action)) {
1515
+ return hasNoProperties;
1516
+ }
1517
+ if (hasNoProperties) {
1518
+ return true;
1519
+ }
1520
+ const { applyToProperties } = action.options;
1521
+ if (!fp.isArray(applyToProperties)) {
1522
+ return false;
1523
+ }
1524
+ return Object.keys(properties).every((property) => applyToProperties.includes(property));
1525
+ }).test(
1526
+ "fields-property",
1527
+ "Invalid fields property at ${path}",
1528
+ async function(properties = {}) {
1529
+ const action = getActionFromProvider(this.options.parent.action);
1530
+ if (!action || !properties) {
1531
+ return true;
1532
+ }
1533
+ if (!actionDomain.appliesToProperty("fields", action)) {
1534
+ return true;
1535
+ }
1536
+ try {
1537
+ await fieldsPropertyValidation(action).validate(properties.fields, {
1538
+ strict: true,
1539
+ abortEarly: false
1540
+ });
1541
+ return true;
1542
+ } catch (e) {
1543
+ throw this.createError({
1544
+ message: e.message,
1545
+ path: `${this.path}.fields`
1546
+ });
1547
+ }
1548
+ }
1549
+ ),
1550
+ conditions: utils$1.yup.array().of(utils$1.yup.string())
1551
+ }).noUnknown();
1552
+ const updatePermissions = utils$1.yup.object().shape({
1553
+ permissions: utils$1.yup.array().required().of(permission).test(
1554
+ "duplicated-permissions",
1555
+ "Some permissions are duplicated (same action and subject)",
1556
+ checkNoDuplicatedPermissions
1557
+ )
1558
+ }).required().noUnknown();
1559
+ const validators = {
1560
+ email,
1561
+ firstname,
1562
+ lastname,
1563
+ username,
1564
+ password,
1565
+ roles,
1566
+ isAPluginName,
1567
+ arrayOfConditionNames,
1568
+ permission,
1569
+ updatePermissions
1570
+ };
1571
+ const userCreationSchema = utils$1.yup.object().shape({
1572
+ email: validators.email.required(),
1573
+ firstname: validators.firstname.required(),
1574
+ lastname: validators.lastname,
1575
+ roles: validators.roles.min(1),
1576
+ preferedLanguage: utils$1.yup.string().nullable()
1577
+ }).noUnknown();
1578
+ const profileUpdateSchema = utils$1.yup.object().shape({
1579
+ email: validators.email.notNull(),
1580
+ firstname: validators.firstname.notNull(),
1581
+ lastname: validators.lastname.nullable(),
1582
+ username: validators.username.nullable(),
1583
+ password: validators.password.notNull(),
1584
+ currentPassword: utils$1.yup.string().when(
1585
+ "password",
1586
+ (password2, schema) => !fp.isUndefined(password2) ? schema.required() : schema
1587
+ ).notNull(),
1588
+ preferedLanguage: utils$1.yup.string().nullable()
1589
+ }).noUnknown();
1590
+ const userUpdateSchema = utils$1.yup.object().shape({
1591
+ email: validators.email.notNull(),
1592
+ firstname: validators.firstname.notNull(),
1593
+ lastname: validators.lastname.nullable(),
1594
+ username: validators.username.nullable(),
1595
+ password: validators.password.notNull(),
1596
+ isActive: utils$1.yup.bool().notNull(),
1597
+ roles: validators.roles.min(1).notNull()
1598
+ }).noUnknown();
1599
+ const usersDeleteSchema = utils$1.yup.object().shape({
1600
+ ids: utils$1.yup.array().of(utils$1.yup.strapiID()).min(1).required()
1601
+ }).noUnknown();
1602
+ utils$1.validateYupSchema(userCreationSchema);
1603
+ utils$1.validateYupSchema(profileUpdateSchema);
1604
+ const validateUserUpdateInput = utils$1.validateYupSchema(userUpdateSchema);
1605
+ utils$1.validateYupSchema(usersDeleteSchema);
1606
+ const schemas = {
1607
+ userCreationSchema,
1608
+ usersDeleteSchema,
1609
+ userUpdateSchema
1610
+ };
1611
+ const ssoUserCreationInputExtension = utils$1.yup.object().shape({
1612
+ useSSORegistration: utils$1.yup.boolean()
1613
+ }).noUnknown();
1614
+ const validateUserCreationInput = (data) => {
1615
+ let schema = schemas.userCreationSchema;
1616
+ if (strapi.ee.features.isEnabled("sso")) {
1617
+ schema = schema.concat(ssoUserCreationInputExtension);
1618
+ }
1619
+ return utils$1.validateYupSchema(schema)(data);
1620
+ };
1621
+ const { ApplicationError, ForbiddenError } = utils$1.errors;
1622
+ const pickUserCreationAttributes = fp.pick(["firstname", "lastname", "email", "roles"]);
1623
+ const hasAdminSeatsAvaialble = async () => {
1624
+ if (!strapi.EE) {
1625
+ return true;
1626
+ }
1627
+ const permittedSeats = strapi.ee.seats;
1628
+ if (fp.isNil(permittedSeats)) {
1629
+ return true;
1630
+ }
1631
+ const userCount = await strapi.service("admin::user").getCurrentActiveUserCount();
1632
+ if (userCount < permittedSeats) {
1633
+ return true;
1634
+ }
1635
+ };
1636
+ const user = {
1637
+ async create(ctx) {
1638
+ if (!await hasAdminSeatsAvaialble()) {
1639
+ throw new ForbiddenError("License seat limit reached. You cannot create a new user");
1640
+ }
1641
+ const { body } = ctx.request;
1642
+ const cleanData = { ...body, email: ___default.default.get(body, `email`, ``).toLowerCase() };
1643
+ await validateUserCreationInput(cleanData);
1644
+ const attributes = pickUserCreationAttributes(cleanData);
1645
+ const { useSSORegistration } = cleanData;
1646
+ const userAlreadyExists = await getService("user").exists({ email: attributes.email });
1647
+ if (userAlreadyExists) {
1648
+ throw new ApplicationError("Email already taken");
1649
+ }
1650
+ if (useSSORegistration) {
1651
+ Object.assign(attributes, { registrationToken: null, isActive: true });
1652
+ }
1653
+ const createdUser = await getService("user").create(attributes);
1654
+ const userInfo = getService("user").sanitizeUser(createdUser);
1655
+ Object.assign(userInfo, { registrationToken: createdUser.registrationToken });
1656
+ ctx.created({ data: userInfo });
1657
+ },
1658
+ async update(ctx) {
1659
+ const { id } = ctx.params;
1660
+ const { body: input } = ctx.request;
1661
+ await validateUserUpdateInput(input);
1662
+ if (___default.default.has(input, "email")) {
1663
+ const uniqueEmailCheck = await getService("user").exists({
1664
+ id: { $ne: id },
1665
+ email: input.email
1666
+ });
1667
+ if (uniqueEmailCheck) {
1668
+ throw new ApplicationError("A user with this email address already exists");
1669
+ }
1670
+ }
1671
+ const user2 = await getService("user").findOne(id, null);
1672
+ if (!await hasAdminSeatsAvaialble() && !user2.isActive && input.isActive) {
1673
+ throw new ForbiddenError("License seat limit reached. You cannot active this user");
1674
+ }
1675
+ const updatedUser = await getService("user").updateById(id, input);
1676
+ if (!updatedUser) {
1677
+ return ctx.notFound("User does not exist");
1678
+ }
1679
+ ctx.body = {
1680
+ data: getService("user").sanitizeUser(updatedUser)
1681
+ };
1682
+ },
1683
+ async isSSOLocked(ctx) {
1684
+ const { user: user2 } = ctx.state;
1685
+ const isSSOLocked = await isSsoLocked(user2);
1686
+ ctx.body = {
1687
+ data: {
1688
+ isSSOLocked
1689
+ }
1690
+ };
1691
+ }
3257
1692
  };
3258
- const checkFieldsDontHaveDuplicates = (fields) => {
3259
- if (___default.default.isNil(fields)) {
3260
- return true;
3261
- }
3262
- if (!Array.isArray(fields)) {
3263
- return false;
1693
+ const admin = {
1694
+ // NOTE: Overrides CE admin controller
1695
+ async getProjectType() {
1696
+ const flags = strapi.config.get("admin.flags", {});
1697
+ try {
1698
+ return { data: { isEE: strapi.EE, features: strapi.ee.features.list(), flags } };
1699
+ } catch (err) {
1700
+ return { data: { isEE: false, features: [], flags } };
1701
+ }
1702
+ },
1703
+ async licenseLimitInformation() {
1704
+ const permittedSeats = strapi.ee.seats;
1705
+ let shouldNotify = false;
1706
+ let licenseLimitStatus = null;
1707
+ let enforcementUserCount;
1708
+ const currentActiveUserCount = await getService("user").getCurrentActiveUserCount();
1709
+ const eeDisabledUsers = await getService("seat-enforcement").getDisabledUserList();
1710
+ if (eeDisabledUsers) {
1711
+ enforcementUserCount = currentActiveUserCount + eeDisabledUsers.length;
1712
+ } else {
1713
+ enforcementUserCount = currentActiveUserCount;
1714
+ }
1715
+ if (!fp.isNil(permittedSeats) && enforcementUserCount > permittedSeats) {
1716
+ shouldNotify = true;
1717
+ licenseLimitStatus = "OVER_LIMIT";
1718
+ }
1719
+ if (!fp.isNil(permittedSeats) && enforcementUserCount === permittedSeats) {
1720
+ shouldNotify = true;
1721
+ licenseLimitStatus = "AT_LIMIT";
1722
+ }
1723
+ const data = {
1724
+ enforcementUserCount,
1725
+ currentActiveUserCount,
1726
+ permittedSeats,
1727
+ shouldNotify,
1728
+ shouldStopCreate: fp.isNil(permittedSeats) ? false : currentActiveUserCount >= permittedSeats,
1729
+ licenseLimitStatus,
1730
+ isHostedOnStrapiCloud: utils$1.env("STRAPI_HOSTING", null) === "strapi.cloud",
1731
+ features: strapi.ee.features.list() ?? []
1732
+ };
1733
+ return { data };
3264
1734
  }
3265
- return ___default.default.uniq(fields).length === fields.length;
3266
1735
  };
3267
- const getActionFromProvider = (actionId) => {
3268
- return getService$1("permission").actionProvider.get(actionId);
1736
+ const controllers = {
1737
+ authentication,
1738
+ role,
1739
+ user,
1740
+ admin
3269
1741
  };
3270
- const email = utils$1.yup.string().email().lowercase();
3271
- const firstname = utils$1.yup.string().trim().min(1);
3272
- const lastname = utils$1.yup.string();
3273
- const username = utils$1.yup.string().min(1);
3274
- const password = utils$1.yup.string().min(8).matches(/[a-z]/, "${path} must contain at least one lowercase character").matches(/[A-Z]/, "${path} must contain at least one uppercase character").matches(/\d/, "${path} must contain at least one number");
3275
- const roles = utils$1.yup.array(utils$1.yup.strapiID()).min(1);
3276
- const isAPluginName = utils$1.yup.string().test("is-a-plugin-name", "is not a plugin name", function(value) {
3277
- return [void 0, "admin", ...Object.keys(strapi.plugins)].includes(value) ? true : this.createError({ path: this.path, message: `${this.path} is not an existing plugin` });
3278
- });
3279
- const arrayOfConditionNames = utils$1.yup.array().of(utils$1.yup.string()).test("is-an-array-of-conditions", "is not a plugin name", function(value) {
3280
- const ids = strapi.admin.services.permission.conditionProvider.keys();
3281
- return ___default.default.isUndefined(value) || ___default.default.difference(value, ids).length === 0 ? true : this.createError({ path: this.path, message: `contains conditions that don't exist` });
3282
- });
3283
- const permissionsAreEquals = (a, b) => a.action === b.action && (a.subject === b.subject || ___default.default.isNil(a.subject) && ___default.default.isNil(b.subject));
3284
- const checkNoDuplicatedPermissions = (permissions) => !Array.isArray(permissions) || permissions.every(
3285
- (permA, i) => permissions.slice(i + 1).every((permB) => !permissionsAreEquals(permA, permB))
3286
- );
3287
- const checkNilFields = (action) => function(fields) {
3288
- if (fp.isNil(action)) {
3289
- return true;
1742
+ const enableFeatureMiddleware = (featureName) => (ctx, next) => {
1743
+ if (strapi.ee.features.isEnabled(featureName)) {
1744
+ return next();
3290
1745
  }
3291
- return actionDomain.appliesToProperty("fields", action) || fp.isNil(fields);
1746
+ ctx.status = 404;
3292
1747
  };
3293
- const fieldsPropertyValidation = (action) => utils$1.yup.array().of(utils$1.yup.string()).nullable().test(
3294
- "field-nested",
3295
- "Fields format are incorrect (bad nesting).",
3296
- checkFieldsAreCorrectlyNested
3297
- ).test(
3298
- "field-nested",
3299
- "Fields format are incorrect (duplicates).",
3300
- checkFieldsDontHaveDuplicates
3301
- ).test(
3302
- "fields-restriction",
3303
- "The permission at ${path} must have fields set to null or undefined",
3304
- // @ts-expect-error yup types
3305
- checkNilFields(action)
3306
- );
3307
- const permission = utils$1.yup.object().shape({
3308
- action: utils$1.yup.string().required().test("action-validity", "action is not an existing permission action", function(actionId) {
3309
- if (fp.isNil(actionId)) {
3310
- return true;
3311
- }
3312
- return !!getActionFromProvider(actionId);
3313
- }),
3314
- actionParameters: utils$1.yup.object().nullable(),
3315
- subject: utils$1.yup.string().nullable().test("subject-validity", "Invalid subject submitted", function(subject) {
3316
- const action = getActionFromProvider(this.options.parent.action);
3317
- if (!action) {
3318
- return true;
3319
- }
3320
- if (fp.isNil(action.subjects)) {
3321
- return fp.isNil(subject);
3322
- }
3323
- if (fp.isArray(action.subjects)) {
3324
- return action.subjects.includes(subject);
3325
- }
3326
- return false;
3327
- }),
3328
- properties: utils$1.yup.object().test("properties-structure", "Invalid property set at ${path}", function(properties) {
3329
- const action = getActionFromProvider(this.options.parent.action);
3330
- const hasNoProperties = fp.isEmpty(properties) || fp.isNil(properties);
3331
- if (!fp.has("options.applyToProperties", action)) {
3332
- return hasNoProperties;
3333
- }
3334
- if (hasNoProperties) {
3335
- return true;
3336
- }
3337
- const { applyToProperties } = action.options;
3338
- if (!fp.isArray(applyToProperties)) {
3339
- return false;
1748
+ const sso = {
1749
+ type: "admin",
1750
+ routes: [
1751
+ {
1752
+ method: "GET",
1753
+ path: "/providers",
1754
+ handler: "authentication.getProviders",
1755
+ config: {
1756
+ middlewares: [enableFeatureMiddleware("sso")],
1757
+ auth: false
1758
+ }
1759
+ },
1760
+ {
1761
+ method: "GET",
1762
+ path: "/connect/:provider",
1763
+ handler: "authentication.providerLogin",
1764
+ config: {
1765
+ middlewares: [enableFeatureMiddleware("sso")],
1766
+ auth: false
1767
+ }
1768
+ },
1769
+ {
1770
+ method: "POST",
1771
+ path: "/connect/:provider",
1772
+ handler: "authentication.providerLogin",
1773
+ config: {
1774
+ middlewares: [enableFeatureMiddleware("sso")],
1775
+ auth: false
1776
+ }
1777
+ },
1778
+ {
1779
+ method: "GET",
1780
+ path: "/providers/options",
1781
+ handler: "authentication.getProviderLoginOptions",
1782
+ config: {
1783
+ middlewares: [enableFeatureMiddleware("sso")],
1784
+ policies: [
1785
+ "admin::isAuthenticatedAdmin",
1786
+ { name: "admin::hasPermissions", config: { actions: ["admin::provider-login.read"] } }
1787
+ ]
1788
+ }
1789
+ },
1790
+ {
1791
+ method: "PUT",
1792
+ path: "/providers/options",
1793
+ handler: "authentication.updateProviderLoginOptions",
1794
+ config: {
1795
+ middlewares: [enableFeatureMiddleware("sso")],
1796
+ policies: [
1797
+ "admin::isAuthenticatedAdmin",
1798
+ { name: "admin::hasPermissions", config: { actions: ["admin::provider-login.update"] } }
1799
+ ]
1800
+ }
1801
+ },
1802
+ {
1803
+ method: "GET",
1804
+ path: "/providers/isSSOLocked",
1805
+ handler: "user.isSSOLocked",
1806
+ config: {
1807
+ middlewares: [enableFeatureMiddleware("sso")],
1808
+ policies: ["admin::isAuthenticatedAdmin"]
1809
+ }
3340
1810
  }
3341
- return Object.keys(properties).every((property) => applyToProperties.includes(property));
3342
- }).test(
3343
- "fields-property",
3344
- "Invalid fields property at ${path}",
3345
- async function(properties = {}) {
3346
- const action = getActionFromProvider(this.options.parent.action);
3347
- if (!action || !properties) {
3348
- return true;
1811
+ ]
1812
+ };
1813
+ const licenseLimit = {
1814
+ type: "admin",
1815
+ routes: [
1816
+ // License limit infos
1817
+ {
1818
+ method: "GET",
1819
+ path: "/license-limit-information",
1820
+ handler: "admin.licenseLimitInformation",
1821
+ config: {
1822
+ policies: [
1823
+ "admin::isAuthenticatedAdmin",
1824
+ {
1825
+ name: "admin::hasPermissions",
1826
+ config: {
1827
+ actions: [
1828
+ "admin::users.create",
1829
+ "admin::users.read",
1830
+ "admin::users.update",
1831
+ "admin::users.delete"
1832
+ ]
1833
+ }
1834
+ }
1835
+ ]
3349
1836
  }
3350
- if (!actionDomain.appliesToProperty("fields", action)) {
3351
- return true;
1837
+ }
1838
+ ]
1839
+ };
1840
+ const routes = {
1841
+ sso,
1842
+ "license-limit": licenseLimit
1843
+ };
1844
+ const auditLogsRoutes = {
1845
+ type: "admin",
1846
+ routes: [
1847
+ {
1848
+ method: "GET",
1849
+ path: "/audit-logs",
1850
+ handler: "audit-logs.findMany",
1851
+ config: {
1852
+ middlewares: [enableFeatureMiddleware("audit-logs")],
1853
+ policies: [
1854
+ "admin::isAuthenticatedAdmin",
1855
+ {
1856
+ name: "admin::hasPermissions",
1857
+ config: {
1858
+ actions: ["admin::audit-logs.read"]
1859
+ }
1860
+ }
1861
+ ]
3352
1862
  }
3353
- try {
3354
- await fieldsPropertyValidation(action).validate(properties.fields, {
3355
- strict: true,
3356
- abortEarly: false
3357
- });
3358
- return true;
3359
- } catch (e) {
3360
- throw this.createError({
3361
- message: e.message,
3362
- path: `${this.path}.fields`
3363
- });
1863
+ },
1864
+ {
1865
+ method: "GET",
1866
+ path: "/audit-logs/:id",
1867
+ handler: "audit-logs.findOne",
1868
+ config: {
1869
+ middlewares: [enableFeatureMiddleware("audit-logs")],
1870
+ policies: [
1871
+ "admin::isAuthenticatedAdmin",
1872
+ {
1873
+ name: "admin::hasPermissions",
1874
+ config: {
1875
+ actions: ["admin::audit-logs.read"]
1876
+ }
1877
+ }
1878
+ ]
3364
1879
  }
3365
1880
  }
3366
- ),
3367
- conditions: utils$1.yup.array().of(utils$1.yup.string())
3368
- }).noUnknown();
3369
- const updatePermissions = utils$1.yup.object().shape({
3370
- permissions: utils$1.yup.array().required().of(permission).test(
3371
- "duplicated-permissions",
3372
- "Some permissions are duplicated (same action and subject)",
3373
- checkNoDuplicatedPermissions
3374
- )
3375
- }).required().noUnknown();
3376
- const validators = {
3377
- email,
3378
- firstname,
3379
- lastname,
3380
- username,
3381
- password,
3382
- roles,
3383
- isAPluginName,
3384
- arrayOfConditionNames,
3385
- permission,
3386
- updatePermissions
3387
- };
3388
- const userCreationSchema = utils$1.yup.object().shape({
3389
- email: validators.email.required(),
3390
- firstname: validators.firstname.required(),
3391
- lastname: validators.lastname,
3392
- roles: validators.roles.min(1),
3393
- preferedLanguage: utils$1.yup.string().nullable()
3394
- }).noUnknown();
3395
- const profileUpdateSchema = utils$1.yup.object().shape({
3396
- email: validators.email.notNull(),
3397
- firstname: validators.firstname.notNull(),
3398
- lastname: validators.lastname.nullable(),
3399
- username: validators.username.nullable(),
3400
- password: validators.password.notNull(),
3401
- currentPassword: utils$1.yup.string().when(
3402
- "password",
3403
- (password2, schema) => !fp.isUndefined(password2) ? schema.required() : schema
3404
- ).notNull(),
3405
- preferedLanguage: utils$1.yup.string().nullable()
3406
- }).noUnknown();
3407
- const userUpdateSchema = utils$1.yup.object().shape({
3408
- email: validators.email.notNull(),
3409
- firstname: validators.firstname.notNull(),
3410
- lastname: validators.lastname.nullable(),
3411
- username: validators.username.nullable(),
3412
- password: validators.password.notNull(),
3413
- isActive: utils$1.yup.bool().notNull(),
3414
- roles: validators.roles.min(1).notNull()
3415
- }).noUnknown();
3416
- const usersDeleteSchema = utils$1.yup.object().shape({
3417
- ids: utils$1.yup.array().of(utils$1.yup.strapiID()).min(1).required()
3418
- }).noUnknown();
3419
- utils$1.validateYupSchema(userCreationSchema);
3420
- utils$1.validateYupSchema(profileUpdateSchema);
3421
- const validateUserUpdateInput = utils$1.validateYupSchema(userUpdateSchema);
3422
- utils$1.validateYupSchema(usersDeleteSchema);
3423
- const schemas = {
3424
- userCreationSchema,
3425
- usersDeleteSchema,
3426
- userUpdateSchema
1881
+ ]
3427
1882
  };
3428
- const ssoUserCreationInputExtension = utils$1.yup.object().shape({
3429
- useSSORegistration: utils$1.yup.boolean()
3430
- }).noUnknown();
3431
- const validateUserCreationInput = (data) => {
3432
- let schema = schemas.userCreationSchema;
3433
- if (strapi.ee.features.isEnabled("sso")) {
3434
- schema = schema.concat(ssoUserCreationInputExtension);
1883
+ const ALLOWED_SORT_STRINGS = ["action:ASC", "action:DESC", "date:ASC", "date:DESC"];
1884
+ const validateFindManySchema = utils$1.yup.object().shape({
1885
+ page: utils$1.yup.number().integer().min(1),
1886
+ pageSize: utils$1.yup.number().integer().min(1).max(100),
1887
+ sort: utils$1.yup.mixed().oneOf(ALLOWED_SORT_STRINGS)
1888
+ }).required();
1889
+ const validateFindMany = utils$1.validateYupSchema(validateFindManySchema, { strict: false });
1890
+ const auditLogsController = {
1891
+ async findMany(ctx) {
1892
+ const { query } = ctx.request;
1893
+ await validateFindMany(query);
1894
+ const auditLogs = strapi.get("audit-logs");
1895
+ const body = await auditLogs.findMany(query);
1896
+ ctx.body = body;
1897
+ },
1898
+ async findOne(ctx) {
1899
+ const { id } = ctx.params;
1900
+ const auditLogs = strapi.get("audit-logs");
1901
+ const body = await auditLogs.findOne(id);
1902
+ ctx.body = body;
1903
+ strapi.telemetry.send("didWatchAnAuditLog");
3435
1904
  }
3436
- return utils$1.validateYupSchema(schema)(data);
3437
1905
  };
3438
- const { ApplicationError, ForbiddenError } = utils$1.errors;
3439
- const pickUserCreationAttributes = fp.pick(["firstname", "lastname", "email", "roles"]);
3440
- const hasAdminSeatsAvaialble = async () => {
3441
- if (!strapi.EE) {
3442
- return true;
3443
- }
3444
- const permittedSeats = strapi.ee.seats;
3445
- if (fp.isNil(permittedSeats)) {
3446
- return true;
3447
- }
3448
- const userCount = await strapi.service("admin::user").getCurrentActiveUserCount();
3449
- if (userCount < permittedSeats) {
3450
- return true;
1906
+ const getSanitizedUser = (user2) => {
1907
+ let displayName = user2.email;
1908
+ if (user2.username) {
1909
+ displayName = user2.username;
1910
+ } else if (user2.firstname && user2.lastname) {
1911
+ displayName = `${user2.firstname} ${user2.lastname}`;
3451
1912
  }
1913
+ return {
1914
+ id: user2.id,
1915
+ email: user2.email,
1916
+ displayName
1917
+ };
3452
1918
  };
3453
- const user = {
3454
- async create(ctx) {
3455
- if (!await hasAdminSeatsAvaialble()) {
3456
- throw new ForbiddenError("License seat limit reached. You cannot create a new user");
3457
- }
3458
- const { body } = ctx.request;
3459
- const cleanData = { ...body, email: ___default.default.get(body, `email`, ``).toLowerCase() };
3460
- await validateUserCreationInput(cleanData);
3461
- const attributes = pickUserCreationAttributes(cleanData);
3462
- const { useSSORegistration } = cleanData;
3463
- const userAlreadyExists = await getService("user").exists({ email: attributes.email });
3464
- if (userAlreadyExists) {
3465
- throw new ApplicationError("Email already taken");
3466
- }
3467
- if (useSSORegistration) {
3468
- Object.assign(attributes, { registrationToken: null, isActive: true });
3469
- }
3470
- const createdUser = await getService("user").create(attributes);
3471
- const userInfo = getService("user").sanitizeUser(createdUser);
3472
- Object.assign(userInfo, { registrationToken: createdUser.registrationToken });
3473
- ctx.created({ data: userInfo });
3474
- },
3475
- async update(ctx) {
3476
- const { id } = ctx.params;
3477
- const { body: input } = ctx.request;
3478
- await validateUserUpdateInput(input);
3479
- if (___default.default.has(input, "email")) {
3480
- const uniqueEmailCheck = await getService("user").exists({
3481
- id: { $ne: id },
3482
- email: input.email
1919
+ const createAuditLogsService = (strapi2) => {
1920
+ return {
1921
+ async saveEvent(event) {
1922
+ const { userId, ...rest } = event;
1923
+ const auditLog2 = { ...rest, user: userId };
1924
+ await strapi2.db?.query("admin::audit-log").create({ data: auditLog2 });
1925
+ return this;
1926
+ },
1927
+ async findMany(query) {
1928
+ const { results, pagination } = await strapi2.db?.query("admin::audit-log").findPage({
1929
+ populate: ["user"],
1930
+ select: ["action", "date", "payload"],
1931
+ ...strapi2.get("query-params").transform("admin::audit-log", query)
3483
1932
  });
3484
- if (uniqueEmailCheck) {
3485
- throw new ApplicationError("A user with this email address already exists");
1933
+ const sanitizedResults = results.map((result) => {
1934
+ const { user: user2, ...rest } = result;
1935
+ return {
1936
+ ...rest,
1937
+ user: user2 ? getSanitizedUser(user2) : null
1938
+ };
1939
+ });
1940
+ return {
1941
+ results: sanitizedResults,
1942
+ pagination
1943
+ };
1944
+ },
1945
+ async findOne(id) {
1946
+ const result = await strapi2.db?.query("admin::audit-log").findOne({
1947
+ where: { id },
1948
+ populate: ["user"],
1949
+ select: ["action", "date", "payload"]
1950
+ });
1951
+ if (!result) {
1952
+ return null;
3486
1953
  }
1954
+ const { user: user2, ...rest } = result;
1955
+ return {
1956
+ ...rest,
1957
+ user: user2 ? getSanitizedUser(user2) : null
1958
+ };
1959
+ },
1960
+ deleteExpiredEvents(expirationDate) {
1961
+ return strapi2.db?.query("admin::audit-log").deleteMany({
1962
+ where: {
1963
+ date: {
1964
+ $lt: expirationDate.toISOString()
1965
+ }
1966
+ }
1967
+ });
3487
1968
  }
3488
- const user2 = await getService("user").findOne(id, null);
3489
- if (!await hasAdminSeatsAvaialble() && !user2.isActive && input.isActive) {
3490
- throw new ForbiddenError("License seat limit reached. You cannot active this user");
3491
- }
3492
- const updatedUser = await getService("user").updateById(id, input);
3493
- if (!updatedUser) {
3494
- return ctx.notFound("User does not exist");
3495
- }
3496
- ctx.body = {
3497
- data: getService("user").sanitizeUser(updatedUser)
3498
- };
3499
- },
3500
- async isSSOLocked(ctx) {
3501
- const { user: user2 } = ctx.state;
3502
- const isSSOLocked = await isSsoLocked(user2);
3503
- ctx.body = {
3504
- data: {
3505
- isSSOLocked
3506
- }
3507
- };
3508
- }
1969
+ };
1970
+ };
1971
+ const DEFAULT_RETENTION_DAYS = 90;
1972
+ const defaultEvents = [
1973
+ "entry.create",
1974
+ "entry.update",
1975
+ "entry.delete",
1976
+ "entry.publish",
1977
+ "entry.unpublish",
1978
+ "media.create",
1979
+ "media.update",
1980
+ "media.delete",
1981
+ "media-folder.create",
1982
+ "media-folder.update",
1983
+ "media-folder.delete",
1984
+ "user.create",
1985
+ "user.update",
1986
+ "user.delete",
1987
+ "admin.auth.success",
1988
+ "admin.logout",
1989
+ "content-type.create",
1990
+ "content-type.update",
1991
+ "content-type.delete",
1992
+ "component.create",
1993
+ "component.update",
1994
+ "component.delete",
1995
+ "role.create",
1996
+ "role.update",
1997
+ "role.delete",
1998
+ "permission.create",
1999
+ "permission.update",
2000
+ "permission.delete"
2001
+ ];
2002
+ const getEventMap = (defaultEvents2) => {
2003
+ const getDefaultPayload = (...args) => args[0];
2004
+ return defaultEvents2.reduce((acc, event) => {
2005
+ acc[event] = getDefaultPayload;
2006
+ return acc;
2007
+ }, {});
3509
2008
  };
3510
- const ALLOWED_SORT_STRINGS = ["action:ASC", "action:DESC", "date:ASC", "date:DESC"];
3511
- const validateFindManySchema = utils$1.yup.object().shape({
3512
- page: utils$1.yup.number().integer().min(1),
3513
- pageSize: utils$1.yup.number().integer().min(1).max(100),
3514
- sort: utils$1.yup.mixed().oneOf(ALLOWED_SORT_STRINGS)
3515
- }).required();
3516
- const validateFindMany = utils$1.validateYupSchema(validateFindManySchema, { strict: false });
3517
- const auditLogs = {
3518
- async findMany(ctx) {
3519
- const { query } = ctx.request;
3520
- await validateFindMany(query);
3521
- const auditLogs2 = strapi.get("audit-logs");
3522
- const body = await auditLogs2.findMany(query);
3523
- ctx.body = body;
3524
- },
3525
- async findOne(ctx) {
3526
- const { id } = ctx.params;
3527
- const auditLogs2 = strapi.get("audit-logs");
3528
- const body = await auditLogs2.findOne(id);
3529
- ctx.body = body;
3530
- strapi.telemetry.send("didWatchAnAuditLog");
2009
+ const getRetentionDays = (strapi2) => {
2010
+ const featureConfig = strapi2.ee.features.get("audit-logs");
2011
+ const licenseRetentionDays = typeof featureConfig === "object" && featureConfig?.options.retentionDays;
2012
+ const userRetentionDays = strapi2.config.get("admin.auditLogs.retentionDays");
2013
+ if (licenseRetentionDays == null) {
2014
+ return userRetentionDays ?? DEFAULT_RETENTION_DAYS;
3531
2015
  }
3532
- };
3533
- const admin = {
3534
- // NOTE: Overrides CE admin controller
3535
- async getProjectType() {
3536
- const flags = strapi.config.get("admin.flags", {});
3537
- try {
3538
- return { data: { isEE: strapi.EE, features: strapi.ee.features.list(), flags } };
3539
- } catch (err) {
3540
- return { data: { isEE: false, features: [], flags } };
3541
- }
3542
- },
3543
- async licenseLimitInformation() {
3544
- const permittedSeats = strapi.ee.seats;
3545
- let shouldNotify = false;
3546
- let licenseLimitStatus = null;
3547
- let enforcementUserCount;
3548
- const currentActiveUserCount = await getService("user").getCurrentActiveUserCount();
3549
- const eeDisabledUsers = await getService("seat-enforcement").getDisabledUserList();
3550
- if (eeDisabledUsers) {
3551
- enforcementUserCount = currentActiveUserCount + eeDisabledUsers.length;
3552
- } else {
3553
- enforcementUserCount = currentActiveUserCount;
3554
- }
3555
- if (!fp.isNil(permittedSeats) && enforcementUserCount > permittedSeats) {
3556
- shouldNotify = true;
3557
- licenseLimitStatus = "OVER_LIMIT";
3558
- }
3559
- if (!fp.isNil(permittedSeats) && enforcementUserCount === permittedSeats) {
3560
- shouldNotify = true;
3561
- licenseLimitStatus = "AT_LIMIT";
3562
- }
3563
- const data = {
3564
- enforcementUserCount,
3565
- currentActiveUserCount,
3566
- permittedSeats,
3567
- shouldNotify,
3568
- shouldStopCreate: fp.isNil(permittedSeats) ? false : currentActiveUserCount >= permittedSeats,
3569
- licenseLimitStatus,
3570
- isHostedOnStrapiCloud: utils$1.env("STRAPI_HOSTING", null) === "strapi.cloud",
3571
- features: strapi.ee.features.list() ?? []
3572
- };
3573
- return { data };
2016
+ if (userRetentionDays && userRetentionDays < licenseRetentionDays) {
2017
+ return userRetentionDays;
3574
2018
  }
2019
+ return licenseRetentionDays;
3575
2020
  };
3576
- const stageObject = utils$1.yup.object().shape({
3577
- id: utils$1.yup.number().integer().min(1),
3578
- name: utils$1.yup.string().max(255).required(),
3579
- color: utils$1.yup.string().matches(/^#(?:[0-9a-fA-F]{3}){1,2}$/i),
3580
- // hex color
3581
- permissions: utils$1.yup.array().of(
3582
- utils$1.yup.object().shape({
3583
- role: utils$1.yup.number().integer().min(1).required(),
3584
- action: utils$1.yup.string().oneOf([STAGE_TRANSITION_UID]).required(),
3585
- actionParameters: utils$1.yup.object().shape({
3586
- from: utils$1.yup.number().integer().min(1).required(),
3587
- to: utils$1.yup.number().integer().min(1)
3588
- })
3589
- })
3590
- )
3591
- });
3592
- const validateUpdateStageOnEntitySchema = utils$1.yup.object().shape({
3593
- id: utils$1.yup.number().integer().min(1).required()
3594
- }).required();
3595
- const validateContentTypes = utils$1.yup.array().of(
3596
- // @ts-expect-error yup types
3597
- utils$1.yup.string().test({
3598
- name: "content-type-exists",
3599
- message: (value) => `Content type ${value.originalValue} does not exist`,
3600
- test(uid) {
3601
- return strapi.getModel(uid);
2021
+ const createAuditLogsLifecycleService = (strapi2) => {
2022
+ const state = {};
2023
+ const auditLogsService = strapi2.get("audit-logs");
2024
+ const eventMap = getEventMap(defaultEvents);
2025
+ const processEvent = (name2, ...args) => {
2026
+ const requestState = strapi2.requestContext.get()?.state;
2027
+ const isUsingAdminAuth = requestState?.route.info.type === "admin";
2028
+ const user2 = requestState?.user;
2029
+ if (!isUsingAdminAuth || !user2) {
2030
+ return null;
3602
2031
  }
3603
- }).test({
3604
- name: "content-type-review-workflow-enabled",
3605
- message: (value) => `Content type ${value.originalValue} does not have review workflow enabled`,
3606
- test(uid) {
3607
- const model = strapi.getModel(uid);
3608
- return hasStageAttribute(model);
2032
+ const getPayload = eventMap[name2];
2033
+ if (!getPayload) {
2034
+ return null;
3609
2035
  }
3610
- })
3611
- );
3612
- const validateWorkflowCreateSchema = utils$1.yup.object().shape({
3613
- name: utils$1.yup.string().max(255).min(1, "Workflow name can not be empty").required(),
3614
- stages: utils$1.yup.array().of(stageObject).uniqueProperty("name", "Stage name must be unique").min(1, "Can not create a workflow without stages").max(200, "Can not have more than 200 stages").required("Can not create a workflow without stages"),
3615
- contentTypes: validateContentTypes
3616
- });
3617
- const validateWorkflowUpdateSchema = utils$1.yup.object().shape({
3618
- name: utils$1.yup.string().max(255).min(1, "Workflow name can not be empty"),
3619
- stages: utils$1.yup.array().of(stageObject).uniqueProperty("name", "Stage name must be unique").min(1, "Can not update a workflow without stages").max(200, "Can not have more than 200 stages"),
3620
- contentTypes: validateContentTypes
3621
- });
3622
- const validateUpdateAssigneeOnEntitySchema = utils$1.yup.object().shape({
3623
- id: utils$1.yup.number().integer().min(1).nullable()
3624
- }).required();
3625
- const validateWorkflowCreate = utils$1.validateYupSchema(validateWorkflowCreateSchema);
3626
- const validateUpdateStageOnEntity = utils$1.validateYupSchema(validateUpdateStageOnEntitySchema);
3627
- const validateUpdateAssigneeOnEntity = utils$1.validateYupSchema(
3628
- validateUpdateAssigneeOnEntitySchema
3629
- );
3630
- const validateWorkflowUpdate = utils$1.validateYupSchema(validateWorkflowUpdateSchema);
3631
- function getWorkflowsPermissionChecker({ strapi: strapi2 }, userAbility) {
3632
- return strapi2.plugin("content-manager").service("permission-checker").create({ userAbility, model: WORKFLOW_MODEL_UID });
3633
- }
3634
- function formatWorkflowToAdmin(workflow2) {
3635
- if (!workflow2)
3636
- return;
3637
- if (!workflow2.stages)
3638
- return workflow2;
3639
- const transformPermissions = fp.map(fp.update("role", fp.property("id")));
3640
- const transformStages = fp.map(fp.update("permissions", transformPermissions));
3641
- return fp.update("stages", transformStages, workflow2);
3642
- }
3643
- const workflows = {
3644
- /**
3645
- * Create a new workflow
3646
- * @param {import('koa').BaseContext} ctx - koa context
3647
- */
3648
- async create(ctx) {
3649
- const { body, query } = ctx.request;
3650
- const { sanitizeCreateInput, sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker(
3651
- { strapi },
3652
- ctx.state.userAbility
3653
- );
3654
- const { populate } = await sanitizedQuery.create(query);
3655
- const workflowBody = await validateWorkflowCreate(body.data);
3656
- const workflowService = getService("workflows");
3657
- const createdWorkflow = await workflowService.create({
3658
- data: await sanitizeCreateInput(workflowBody),
3659
- populate
3660
- }).then(formatWorkflowToAdmin);
3661
- ctx.body = {
3662
- data: await sanitizeOutput(createdWorkflow)
3663
- };
3664
- },
3665
- /**
3666
- * Update a workflow
3667
- * @param {import('koa').BaseContext} ctx - koa context
3668
- */
3669
- async update(ctx) {
3670
- const { id } = ctx.params;
3671
- const { body, query } = ctx.request;
3672
- const workflowService = getService("workflows");
3673
- const { sanitizeUpdateInput, sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker(
3674
- { strapi },
3675
- ctx.state.userAbility
3676
- );
3677
- const { populate } = await sanitizedQuery.update(query);
3678
- const workflowBody = await validateWorkflowUpdate(body.data);
3679
- const workflow2 = await workflowService.findById(id, { populate: WORKFLOW_POPULATE });
3680
- if (!workflow2) {
3681
- return ctx.notFound();
2036
+ const ignoredUids = ["plugin::upload.file", "plugin::upload.folder"];
2037
+ if (ignoredUids.includes(args[0]?.uid)) {
2038
+ return null;
3682
2039
  }
3683
- const getPermittedFieldToUpdate = sanitizeUpdateInput(workflow2);
3684
- const dataToUpdate = await getPermittedFieldToUpdate(workflowBody);
3685
- const updatedWorkflow = await workflowService.update(workflow2, {
3686
- data: dataToUpdate,
3687
- populate
3688
- }).then(formatWorkflowToAdmin);
3689
- ctx.body = {
3690
- data: await sanitizeOutput(updatedWorkflow)
2040
+ return {
2041
+ action: name2,
2042
+ date: (/* @__PURE__ */ new Date()).toISOString(),
2043
+ payload: getPayload(...args) || {},
2044
+ userId: user2.id
3691
2045
  };
3692
- },
3693
- /**
3694
- * Delete a workflow
3695
- * @param {import('koa').BaseContext} ctx - koa context
3696
- */
3697
- async delete(ctx) {
3698
- const { id } = ctx.params;
3699
- const { query } = ctx.request;
3700
- const workflowService = getService("workflows");
3701
- const { sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker(
3702
- { strapi },
3703
- ctx.state.userAbility
3704
- );
3705
- const { populate } = await sanitizedQuery.delete(query);
3706
- const workflow2 = await workflowService.findById(id, { populate: WORKFLOW_POPULATE });
3707
- if (!workflow2) {
3708
- return ctx.notFound("Workflow doesn't exist");
2046
+ };
2047
+ const handleEvent = async (name2, ...args) => {
2048
+ const processedEvent = processEvent(name2, ...args);
2049
+ if (processedEvent) {
2050
+ await strapi2.db.transaction(({ onCommit }) => {
2051
+ onCommit(() => auditLogsService.saveEvent(processedEvent));
2052
+ });
3709
2053
  }
3710
- const deletedWorkflow = await workflowService.delete(workflow2, { populate }).then(formatWorkflowToAdmin);
3711
- ctx.body = {
3712
- data: await sanitizeOutput(deletedWorkflow)
3713
- };
3714
- },
3715
- /**
3716
- * List all workflows
3717
- * @param {import('koa').BaseContext} ctx - koa context
3718
- */
3719
- async find(ctx) {
3720
- const { query } = ctx.request;
3721
- const workflowService = getService("workflows");
3722
- const { sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker(
3723
- { strapi },
3724
- ctx.state.userAbility
3725
- );
3726
- const { populate, filters, sort } = await sanitizedQuery.read(query);
3727
- const [workflows2, workflowCount] = await Promise.all([
3728
- workflowService.find({ populate, filters, sort }).then(fp.map(formatWorkflowToAdmin)),
3729
- workflowService.count()
3730
- ]);
3731
- ctx.body = {
3732
- data: await utils$1.async.map(workflows2, sanitizeOutput),
3733
- meta: {
3734
- workflowCount
2054
+ };
2055
+ return {
2056
+ async register() {
2057
+ if (!state.eeEnableUnsubscribe) {
2058
+ state.eeEnableUnsubscribe = strapi2.eventHub.on("ee.enable", () => {
2059
+ this.destroy();
2060
+ this.register();
2061
+ });
3735
2062
  }
3736
- };
3737
- },
3738
- /**
3739
- * Get one workflow based on its id contained in request parameters
3740
- * Returns count of workflows in meta, used to prevent workflow edition when
3741
- * max workflow count is reached for the current plan
3742
- * @param {import('koa').BaseContext} ctx - koa context
3743
- */
3744
- async findById(ctx) {
3745
- const { id } = ctx.params;
3746
- const { query } = ctx.request;
3747
- const { sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker(
3748
- { strapi },
3749
- ctx.state.userAbility
3750
- );
3751
- const { populate } = await sanitizedQuery.read(query);
3752
- const workflowService = getService("workflows");
3753
- const [workflow2, workflowCount] = await Promise.all([
3754
- workflowService.findById(id, { populate }).then(formatWorkflowToAdmin),
3755
- workflowService.count()
3756
- ]);
3757
- ctx.body = {
3758
- data: await sanitizeOutput(workflow2),
3759
- meta: { workflowCount }
3760
- };
3761
- }
3762
- };
3763
- function sanitizeStage({ strapi: strapi2 }, userAbility) {
3764
- const permissionChecker = strapi2.plugin("content-manager").service("permission-checker").create({ userAbility, model: STAGE_MODEL_UID });
3765
- return (entity) => permissionChecker.sanitizeOutput(entity);
3766
- }
3767
- const stages = {
3768
- /**
3769
- * List all stages
3770
- * @param {import('koa').BaseContext} ctx - koa context
3771
- */
3772
- async find(ctx) {
3773
- const { workflow_id: workflowId } = ctx.params;
3774
- const { populate } = ctx.query;
3775
- const stagesService = getService("stages");
3776
- const sanitizer = sanitizeStage({ strapi }, ctx.state.userAbility);
3777
- const stages2 = await stagesService.find({
3778
- workflowId,
3779
- populate
3780
- });
3781
- ctx.body = {
3782
- data: await utils$1.async.map(stages2, sanitizer)
3783
- };
3784
- },
3785
- /**
3786
- * Get one stage
3787
- * @param {import('koa').BaseContext} ctx - koa context
3788
- */
3789
- async findById(ctx) {
3790
- const { id, workflow_id: workflowId } = ctx.params;
3791
- const { populate } = ctx.query;
3792
- const stagesService = getService("stages");
3793
- const sanitizer = sanitizeStage({ strapi }, ctx.state.userAbility);
3794
- const stage = await stagesService.findById(id, {
3795
- workflowId,
3796
- populate
3797
- });
3798
- ctx.body = {
3799
- data: await sanitizer(stage)
3800
- };
3801
- },
3802
- /**
3803
- * Updates an entity's stage.
3804
- * @async
3805
- * @param {Object} ctx - The Koa context object.
3806
- * @param {Object} ctx.params - An object containing the parameters from the request URL.
3807
- * @param {string} ctx.params.model_uid - The model UID of the entity.
3808
- * @param {string} ctx.params.id - The ID of the entity to update.
3809
- * @param {Object} ctx.request.body.data - Optional data object containing the new stage ID for the entity.
3810
- * @param {string} ctx.request.body.data.id - The ID of the new stage for the entity.
3811
- * @throws {ApplicationError} If review workflows is not activated on the specified model UID.
3812
- * @throws {ValidationError} If the `data` object in the request body fails to pass validation.
3813
- * @returns {Promise<void>} A promise that resolves when the entity's stage has been updated.
3814
- */
3815
- async updateEntity(ctx) {
3816
- const stagesService = getService("stages");
3817
- const stagePermissions2 = getService("stage-permissions");
3818
- const workflowService = getService("workflows");
3819
- const { model_uid: modelUID, id } = ctx.params;
3820
- const { body } = ctx.request;
3821
- const { sanitizeOutput } = strapi.plugin("content-manager").service("permission-checker").create({ userAbility: ctx.state.userAbility, model: modelUID });
3822
- const entity = await strapi.db.query(modelUID).findOne({
3823
- where: { id },
3824
- populate: [ENTITY_STAGE_ATTRIBUTE]
3825
- });
3826
- if (!entity) {
3827
- ctx.throw(404, "Entity not found");
3828
- }
3829
- const canTransition = stagePermissions2.can(
3830
- STAGE_TRANSITION_UID,
3831
- entity[ENTITY_STAGE_ATTRIBUTE]?.id
3832
- );
3833
- if (!canTransition) {
3834
- ctx.throw(403, "Forbidden stage transition");
3835
- }
3836
- const { id: stageId } = await validateUpdateStageOnEntity(
3837
- { id: Number(body?.data?.id) },
3838
- "You should pass an id to the body of the put request."
3839
- );
3840
- const workflow2 = await workflowService.assertContentTypeBelongsToWorkflow(modelUID);
3841
- workflowService.assertStageBelongsToWorkflow(stageId, workflow2);
3842
- const updatedEntity = await stagesService.updateEntity({ id: entity.id, modelUID }, stageId);
3843
- ctx.body = { data: await sanitizeOutput(updatedEntity) };
3844
- },
3845
- /**
3846
- * List all the stages that are available for a user to transition an entity to.
3847
- * If the user has permission to change the current stage of the entity every other stage in the workflow is returned
3848
- * @async
3849
- * @param {*} ctx
3850
- * @param {string} ctx.params.model_uid - The model UID of the entity.
3851
- * @param {string} ctx.params.id - The ID of the entity.
3852
- * @throws {ApplicationError} If review workflows is not activated on the specified model UID.
3853
- */
3854
- async listAvailableStages(ctx) {
3855
- const stagePermissions2 = getService("stage-permissions");
3856
- const workflowService = getService("workflows");
3857
- const { model_uid: modelUID, id } = ctx.params;
3858
- if (strapi.plugin("content-manager").service("permission-checker").create({ userAbility: ctx.state.userAbility, model: modelUID }).cannot.read()) {
3859
- return ctx.forbidden();
3860
- }
3861
- const entity = await strapi.db.query(modelUID).findOne({
3862
- where: { id },
3863
- populate: [ENTITY_STAGE_ATTRIBUTE]
3864
- });
3865
- if (!entity) {
3866
- ctx.throw(404, "Entity not found");
2063
+ if (!state.eeUpdateUnsubscribe) {
2064
+ state.eeUpdateUnsubscribe = strapi2.eventHub.on("ee.update", () => {
2065
+ this.destroy();
2066
+ this.register();
2067
+ });
2068
+ }
2069
+ state.eeDisableUnsubscribe = strapi2.eventHub.on("ee.disable", () => {
2070
+ this.destroy();
2071
+ });
2072
+ if (!strapi2.ee.features.isEnabled("audit-logs")) {
2073
+ return this;
2074
+ }
2075
+ state.eventHubUnsubscribe = strapi2.eventHub.subscribe(handleEvent);
2076
+ const retentionDays = getRetentionDays(strapi2);
2077
+ state.deleteExpiredJob = nodeSchedule.scheduleJob("0 0 * * *", () => {
2078
+ const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1e3);
2079
+ auditLogsService.deleteExpiredEvents(expirationDate);
2080
+ });
2081
+ return this;
2082
+ },
2083
+ unsubscribe() {
2084
+ if (state.eeDisableUnsubscribe) {
2085
+ state.eeDisableUnsubscribe();
2086
+ }
2087
+ if (state.eventHubUnsubscribe) {
2088
+ state.eventHubUnsubscribe();
2089
+ }
2090
+ if (state.deleteExpiredJob) {
2091
+ state.deleteExpiredJob.cancel();
2092
+ }
2093
+ return this;
2094
+ },
2095
+ destroy() {
2096
+ return this.unsubscribe();
3867
2097
  }
3868
- const entityStageId = entity[ENTITY_STAGE_ATTRIBUTE]?.id;
3869
- const canTransition = stagePermissions2.can(STAGE_TRANSITION_UID, entityStageId);
3870
- const [workflowCount, { stages: workflowStages }] = await Promise.all([
3871
- workflowService.count(),
3872
- workflowService.getAssignedWorkflow(modelUID, {
3873
- populate: "stages"
3874
- })
3875
- ]);
3876
- const meta = {
3877
- stageCount: workflowStages.length,
3878
- workflowCount
3879
- };
3880
- if (!canTransition) {
3881
- ctx.body = {
3882
- data: [],
3883
- meta
3884
- };
3885
- return;
2098
+ };
2099
+ };
2100
+ const auditLog = {
2101
+ schema: {
2102
+ kind: "collectionType",
2103
+ collectionName: "strapi_audit_logs",
2104
+ info: {
2105
+ singularName: "audit-log",
2106
+ pluralName: "audit-logs",
2107
+ displayName: "Audit Log"
2108
+ },
2109
+ options: {
2110
+ timestamps: false
2111
+ },
2112
+ pluginOptions: {
2113
+ "content-manager": {
2114
+ visible: false
2115
+ },
2116
+ "content-type-builder": {
2117
+ visible: false
2118
+ }
2119
+ },
2120
+ attributes: {
2121
+ action: {
2122
+ type: "string",
2123
+ required: true
2124
+ },
2125
+ date: {
2126
+ type: "datetime",
2127
+ required: true
2128
+ },
2129
+ user: {
2130
+ type: "relation",
2131
+ relation: "oneToOne",
2132
+ target: "admin::user"
2133
+ },
2134
+ payload: {
2135
+ type: "json"
2136
+ }
3886
2137
  }
3887
- const data = workflowStages.filter((stage) => stage.id !== entityStageId);
3888
- ctx.body = {
3889
- data,
3890
- meta
3891
- };
3892
2138
  }
3893
2139
  };
3894
- const assignees = {
3895
- /**
3896
- * Updates an entity's assignee.
3897
- * @async
3898
- * @param {Object} ctx - The Koa context object.
3899
- * @param {Object} ctx.params - An object containing the parameters from the request URL.
3900
- * @param {string} ctx.params.model_uid - The model UID of the entity.
3901
- * @param {string} ctx.params.id - The ID of the entity to update.
3902
- * @param {Object} ctx.request.body.data - Optional data object containing the new assignee ID for the entity.
3903
- * @param {string} ctx.request.body.data.id - The ID of the new assignee for the entity.
3904
- * @throws {ApplicationError} If review workflows is not activated on the specified model UID.
3905
- * @throws {ValidationError} If the `data` object in the request body fails to pass validation.
3906
- * @returns {Promise<void>} A promise that resolves when the entity's assignee has been updated.
3907
- */
3908
- async updateEntity(ctx) {
3909
- const assigneeService = getService("assignees");
3910
- const workflowService = getService("workflows");
3911
- const { model_uid: model, id } = ctx.params;
3912
- const { sanitizeOutput } = strapi.plugin("content-manager").service("permission-checker").create({ userAbility: ctx.state.userAbility, model });
3913
- const { id: assigneeId } = await validateUpdateAssigneeOnEntity(
3914
- ctx.request?.body?.data,
3915
- "You should pass a valid id to the body of the put request."
3916
- );
3917
- await workflowService.assertContentTypeBelongsToWorkflow(model);
3918
- const entity = await assigneeService.updateEntityAssignee(id, model, assigneeId);
3919
- ctx.body = { data: await sanitizeOutput(entity) };
2140
+ const getAdminEE = () => {
2141
+ const eeAdmin = {
2142
+ register,
2143
+ bootstrap,
2144
+ destroy,
2145
+ contentTypes: {
2146
+ // Always register the audit-log content type to prevent data loss
2147
+ "audit-log": auditLog,
2148
+ ...adminContentTypes
2149
+ },
2150
+ services,
2151
+ controllers,
2152
+ routes
2153
+ };
2154
+ if (strapi.config.get("admin.auditLogs.enabled", true) && strapi.ee.features.isEnabled("audit-logs")) {
2155
+ return {
2156
+ ...eeAdmin,
2157
+ controllers: {
2158
+ ...eeAdmin.controllers,
2159
+ "audit-logs": auditLogsController
2160
+ },
2161
+ routes: {
2162
+ ...eeAdmin.routes,
2163
+ "audit-logs": auditLogsRoutes
2164
+ },
2165
+ async register({ strapi: strapi2 }) {
2166
+ await eeAdmin.register({ strapi: strapi2 });
2167
+ strapi2.add("audit-logs", createAuditLogsService(strapi2));
2168
+ const auditLogsLifecycle = createAuditLogsLifecycleService(strapi2);
2169
+ strapi2.add("audit-logs-lifecycle", auditLogsLifecycle);
2170
+ await auditLogsLifecycle.register();
2171
+ },
2172
+ async destroy({ strapi: strapi2 }) {
2173
+ strapi2.get("audit-logs-lifecycle").destroy();
2174
+ await eeAdmin.destroy({ strapi: strapi2 });
2175
+ }
2176
+ };
3920
2177
  }
2178
+ return eeAdmin;
3921
2179
  };
3922
- const index = {
3923
- authentication,
3924
- role,
3925
- user,
3926
- auditLogs,
3927
- admin,
3928
- workflows,
3929
- stages,
3930
- assignees
3931
- };
3932
- exports.bootstrap = bootstrap;
3933
- exports.contentTypes = index$3;
3934
- exports.controllers = index;
3935
- exports.destroy = destroy;
3936
- exports.register = register;
3937
- exports.routes = index$2;
3938
- exports.services = index$1;
2180
+ const index = getAdminEE();
2181
+ module.exports = index;
3939
2182
  //# sourceMappingURL=index.js.map