@strapi/admin 5.29.0 → 5.30.1

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 (375) hide show
  1. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  2. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  3. package/dist/admin/admin/src/components/ContentBox.js.map +1 -1
  4. package/dist/admin/admin/src/components/ContentBox.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/DescriptionComponentRenderer.js.map +1 -1
  6. package/dist/admin/admin/src/components/DescriptionComponentRenderer.mjs.map +1 -1
  7. package/dist/admin/admin/src/components/Filters.js +1 -1
  8. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  9. package/dist/admin/admin/src/components/Filters.mjs +1 -1
  10. package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
  11. package/dist/admin/admin/src/components/Form.js +8 -3
  12. package/dist/admin/admin/src/components/Form.js.map +1 -1
  13. package/dist/admin/admin/src/components/Form.mjs +8 -3
  14. package/dist/admin/admin/src/components/Form.mjs.map +1 -1
  15. package/dist/admin/admin/src/components/FormInputs/Enumeration.js +1 -1
  16. package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
  17. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +1 -1
  18. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
  19. package/dist/admin/admin/src/components/FormInputs/Number.js +1 -1
  20. package/dist/admin/admin/src/components/FormInputs/Number.js.map +1 -1
  21. package/dist/admin/admin/src/components/FormInputs/Number.mjs +1 -1
  22. package/dist/admin/admin/src/components/FormInputs/Number.mjs.map +1 -1
  23. package/dist/admin/admin/src/components/FormInputs/Renderer.js.map +1 -1
  24. package/dist/admin/admin/src/components/FormInputs/Renderer.mjs.map +1 -1
  25. package/dist/admin/admin/src/components/FormInputs/String.js +2 -1
  26. package/dist/admin/admin/src/components/FormInputs/String.js.map +1 -1
  27. package/dist/admin/admin/src/components/FormInputs/String.mjs +2 -1
  28. package/dist/admin/admin/src/components/FormInputs/String.mjs.map +1 -1
  29. package/dist/admin/admin/src/components/FormInputs/Time.js.map +1 -1
  30. package/dist/admin/admin/src/components/FormInputs/Time.mjs.map +1 -1
  31. package/dist/admin/admin/src/components/GapDropZone.js.map +1 -1
  32. package/dist/admin/admin/src/components/GapDropZone.mjs.map +1 -1
  33. package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -1
  34. package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -1
  35. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js.map +1 -1
  36. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs.map +1 -1
  37. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
  38. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -1
  39. package/dist/admin/admin/src/components/Layouts/GridLayout.js.map +1 -1
  40. package/dist/admin/admin/src/components/Layouts/GridLayout.mjs.map +1 -1
  41. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +8 -4
  42. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
  43. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +8 -4
  44. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
  45. package/dist/admin/admin/src/components/NpsSurvey.js +5 -3
  46. package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
  47. package/dist/admin/admin/src/components/NpsSurvey.mjs +5 -3
  48. package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
  49. package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
  50. package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
  51. package/dist/admin/admin/src/components/PrivateRoute.js.map +1 -1
  52. package/dist/admin/admin/src/components/PrivateRoute.mjs.map +1 -1
  53. package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
  54. package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
  55. package/dist/admin/admin/src/components/ResizeIndicator.js.map +1 -1
  56. package/dist/admin/admin/src/components/ResizeIndicator.mjs.map +1 -1
  57. package/dist/admin/admin/src/components/Table.js +1 -1
  58. package/dist/admin/admin/src/components/Table.js.map +1 -1
  59. package/dist/admin/admin/src/components/Table.mjs +1 -1
  60. package/dist/admin/admin/src/components/Table.mjs.map +1 -1
  61. package/dist/admin/admin/src/components/Theme.js +34 -1
  62. package/dist/admin/admin/src/components/Theme.js.map +1 -1
  63. package/dist/admin/admin/src/components/Theme.mjs +34 -1
  64. package/dist/admin/admin/src/components/Theme.mjs.map +1 -1
  65. package/dist/admin/admin/src/components/Widgets.js.map +1 -1
  66. package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
  67. package/dist/admin/admin/src/core/apis/CustomFields.js.map +1 -1
  68. package/dist/admin/admin/src/core/apis/CustomFields.mjs.map +1 -1
  69. package/dist/admin/admin/src/core/apis/Plugin.js +0 -1
  70. package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
  71. package/dist/admin/admin/src/core/apis/Plugin.mjs +0 -1
  72. package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
  73. package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
  74. package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
  75. package/dist/admin/admin/src/core/apis/rbac.js.map +1 -1
  76. package/dist/admin/admin/src/core/apis/rbac.mjs.map +1 -1
  77. package/dist/admin/admin/src/core/apis/router.js.map +1 -1
  78. package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
  79. package/dist/admin/admin/src/features/BackButton.js.map +1 -1
  80. package/dist/admin/admin/src/features/BackButton.mjs.map +1 -1
  81. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  82. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  83. package/dist/admin/admin/src/features/Widgets.js.map +1 -1
  84. package/dist/admin/admin/src/features/Widgets.mjs.map +1 -1
  85. package/dist/admin/admin/src/hooks/usePersistentState.js.map +1 -1
  86. package/dist/admin/admin/src/hooks/usePersistentState.mjs.map +1 -1
  87. package/dist/admin/admin/src/hooks/useRBAC.js.map +1 -1
  88. package/dist/admin/admin/src/hooks/useRBAC.mjs.map +1 -1
  89. package/dist/admin/admin/src/pages/Auth/components/Login.js +1 -1
  90. package/dist/admin/admin/src/pages/Auth/components/Login.js.map +1 -1
  91. package/dist/admin/admin/src/pages/Auth/components/Login.mjs +1 -1
  92. package/dist/admin/admin/src/pages/Auth/components/Login.mjs.map +1 -1
  93. package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
  94. package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
  95. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  96. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  97. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js +2 -2
  98. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js.map +1 -1
  99. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs +2 -2
  100. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs.map +1 -1
  101. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.js.map +1 -1
  102. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs.map +1 -1
  103. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.js.map +1 -1
  104. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.mjs.map +1 -1
  105. package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.js.map +1 -1
  106. package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.mjs.map +1 -1
  107. package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.js.map +1 -1
  108. package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.mjs.map +1 -1
  109. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  110. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  111. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +8 -1
  112. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  113. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +9 -2
  114. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
  115. package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.js.map +1 -1
  116. package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.mjs.map +1 -1
  117. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  118. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
  119. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenName.js +1 -0
  120. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenName.js.map +1 -1
  121. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenName.mjs +1 -0
  122. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenName.mjs.map +1 -1
  123. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
  124. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
  125. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
  126. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
  127. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js.map +1 -1
  128. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs.map +1 -1
  129. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +2 -0
  130. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  131. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +2 -0
  132. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
  133. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  134. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  135. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js +1 -0
  136. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
  137. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs +1 -0
  138. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
  139. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/utils/files.js.map +1 -1
  140. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/utils/files.mjs.map +1 -1
  141. package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js.map +1 -1
  142. package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.mjs.map +1 -1
  143. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +10 -2
  144. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
  145. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs +10 -2
  146. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
  147. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +9 -2
  148. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
  149. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs +9 -2
  150. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs.map +1 -1
  151. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js.map +1 -1
  152. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.mjs.map +1 -1
  153. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
  154. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs.map +1 -1
  155. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
  156. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs.map +1 -1
  157. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
  158. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs.map +1 -1
  159. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
  160. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs.map +1 -1
  161. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
  162. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
  163. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
  164. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
  165. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RoleForm.js +2 -1
  166. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RoleForm.js.map +1 -1
  167. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RoleForm.mjs +2 -1
  168. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RoleForm.mjs.map +1 -1
  169. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js.map +1 -1
  170. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.mjs.map +1 -1
  171. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/permissions.js.map +1 -1
  172. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/permissions.mjs.map +1 -1
  173. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
  174. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
  175. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js +2 -0
  176. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js.map +1 -1
  177. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.mjs +2 -0
  178. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.mjs.map +1 -1
  179. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js +9 -2
  180. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
  181. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs +9 -2
  182. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
  183. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +3 -1
  184. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  185. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs +3 -1
  186. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
  187. package/dist/admin/admin/src/pages/Settings/pages/Users/components/MagicLinkCE.js.map +1 -1
  188. package/dist/admin/admin/src/pages/Settings/pages/Users/components/MagicLinkCE.mjs.map +1 -1
  189. package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.js.map +1 -1
  190. package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.mjs.map +1 -1
  191. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.js.map +1 -1
  192. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.mjs.map +1 -1
  193. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js.map +1 -1
  194. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.mjs.map +1 -1
  195. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +1 -1
  196. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
  197. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs +1 -1
  198. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs.map +1 -1
  199. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js +9 -2
  200. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
  201. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs +9 -2
  202. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
  203. package/dist/admin/admin/src/pages/UseCasePage.js +1 -0
  204. package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
  205. package/dist/admin/admin/src/pages/UseCasePage.mjs +1 -0
  206. package/dist/admin/admin/src/pages/UseCasePage.mjs.map +1 -1
  207. package/dist/admin/admin/src/services/api.js +2 -1
  208. package/dist/admin/admin/src/services/api.js.map +1 -1
  209. package/dist/admin/admin/src/services/api.mjs +2 -1
  210. package/dist/admin/admin/src/services/api.mjs.map +1 -1
  211. package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
  212. package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
  213. package/dist/admin/admin/src/services/transferTokens.js.map +1 -1
  214. package/dist/admin/admin/src/services/transferTokens.mjs.map +1 -1
  215. package/dist/admin/admin/src/services/users.js.map +1 -1
  216. package/dist/admin/admin/src/services/users.mjs.map +1 -1
  217. package/dist/admin/admin/src/services/webhooks.js.map +1 -1
  218. package/dist/admin/admin/src/services/webhooks.mjs.map +1 -1
  219. package/dist/admin/admin/src/translations/en.json.js +4 -0
  220. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  221. package/dist/admin/admin/src/translations/en.json.mjs +4 -0
  222. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  223. package/dist/admin/admin/src/utils/cookies.js.map +1 -1
  224. package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
  225. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  226. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  227. package/dist/admin/admin/src/utils/getPrefixedId.js.map +1 -1
  228. package/dist/admin/admin/src/utils/getPrefixedId.mjs.map +1 -1
  229. package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
  230. package/dist/admin/admin/src/utils/rulesEngine.mjs.map +1 -1
  231. package/dist/admin/admin/src/utils/urls.js.map +1 -1
  232. package/dist/admin/admin/src/utils/urls.mjs.map +1 -1
  233. package/dist/admin/admin/src/utils/users.js.map +1 -1
  234. package/dist/admin/admin/src/utils/users.mjs.map +1 -1
  235. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js.map +1 -1
  236. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.mjs.map +1 -1
  237. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js.map +1 -1
  238. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.mjs.map +1 -1
  239. package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.js.map +1 -1
  240. package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.mjs.map +1 -1
  241. package/dist/admin/ee/admin/src/pages/AuthResponse.js.map +1 -1
  242. package/dist/admin/ee/admin/src/pages/AuthResponse.mjs.map +1 -1
  243. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
  244. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
  245. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +3 -3
  246. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
  247. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +3 -3
  248. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
  249. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js.map +1 -1
  250. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.mjs.map +1 -1
  251. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.js.map +1 -1
  252. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.mjs.map +1 -1
  253. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js.map +1 -1
  254. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs.map +1 -1
  255. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLinkEE.js.map +1 -1
  256. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLinkEE.mjs.map +1 -1
  257. package/dist/admin/ee/admin/src/services/ai.js +14 -1
  258. package/dist/admin/ee/admin/src/services/ai.js.map +1 -1
  259. package/dist/admin/ee/admin/src/services/ai.mjs +14 -2
  260. package/dist/admin/ee/admin/src/services/ai.mjs.map +1 -1
  261. package/dist/admin/ee/admin/src/services/auditLogs.js.map +1 -1
  262. package/dist/admin/ee/admin/src/services/auditLogs.mjs.map +1 -1
  263. package/dist/admin/ee.js +1 -0
  264. package/dist/admin/ee.js.map +1 -1
  265. package/dist/admin/ee.mjs +1 -1
  266. package/dist/admin/src/components/Form.d.ts +1 -1
  267. package/dist/admin/src/core/store/configure.d.ts +2 -2
  268. package/dist/admin/src/core/store/hooks.d.ts +2 -2
  269. package/dist/admin/src/ee.d.ts +1 -1
  270. package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
  271. package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
  272. package/dist/admin/src/selectors.d.ts +2 -2
  273. package/dist/admin/src/services/admin.d.ts +6 -6
  274. package/dist/admin/src/services/api.d.ts +1 -1
  275. package/dist/admin/src/services/apiTokens.d.ts +1 -1
  276. package/dist/admin/src/services/auth.d.ts +13 -13
  277. package/dist/admin/src/services/contentApi.d.ts +1 -1
  278. package/dist/admin/src/services/contentManager.d.ts +1 -1
  279. package/dist/admin/src/services/homepage.d.ts +3 -3
  280. package/dist/admin/src/services/transferTokens.d.ts +1 -1
  281. package/dist/admin/src/services/users.d.ts +8 -8
  282. package/dist/admin/src/services/webhooks.d.ts +2 -2
  283. package/dist/admin/tests/utils.d.ts +1 -1
  284. package/dist/ee/admin/src/services/ai.d.ts +6 -3
  285. package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
  286. package/dist/ee/server/src/ai/containers/ai.d.ts +11 -0
  287. package/dist/ee/server/src/ai/containers/ai.d.ts.map +1 -0
  288. package/dist/ee/server/src/ai/controllers/ai.d.ts +1 -0
  289. package/dist/ee/server/src/ai/controllers/ai.d.ts.map +1 -1
  290. package/dist/ee/server/src/ai/routes/ai.d.ts.map +1 -1
  291. package/dist/ee/server/src/index.d.ts +1 -0
  292. package/dist/ee/server/src/index.d.ts.map +1 -1
  293. package/dist/server/ee/server/src/ai/containers/ai.js +18 -0
  294. package/dist/server/ee/server/src/ai/containers/ai.js.map +1 -0
  295. package/dist/server/ee/server/src/ai/containers/ai.mjs +16 -0
  296. package/dist/server/ee/server/src/ai/containers/ai.mjs.map +1 -0
  297. package/dist/server/ee/server/src/ai/controllers/ai.js +6 -0
  298. package/dist/server/ee/server/src/ai/controllers/ai.js.map +1 -1
  299. package/dist/server/ee/server/src/ai/controllers/ai.mjs +6 -0
  300. package/dist/server/ee/server/src/ai/controllers/ai.mjs.map +1 -1
  301. package/dist/server/ee/server/src/ai/routes/ai.js +11 -0
  302. package/dist/server/ee/server/src/ai/routes/ai.js.map +1 -1
  303. package/dist/server/ee/server/src/ai/routes/ai.mjs +11 -0
  304. package/dist/server/ee/server/src/ai/routes/ai.mjs.map +1 -1
  305. package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
  306. package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
  307. package/dist/server/ee/server/src/controllers/authentication-utils/constants.js.map +1 -1
  308. package/dist/server/ee/server/src/controllers/authentication-utils/constants.mjs.map +1 -1
  309. package/dist/server/ee/server/src/controllers/authentication-utils/utils.js.map +1 -1
  310. package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs.map +1 -1
  311. package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
  312. package/dist/server/ee/server/src/controllers/authentication.mjs.map +1 -1
  313. package/dist/server/ee/server/src/controllers/user.js.map +1 -1
  314. package/dist/server/ee/server/src/controllers/user.mjs.map +1 -1
  315. package/dist/server/ee/server/src/index.js +7 -0
  316. package/dist/server/ee/server/src/index.js.map +1 -1
  317. package/dist/server/ee/server/src/index.mjs +7 -0
  318. package/dist/server/ee/server/src/index.mjs.map +1 -1
  319. package/dist/server/ee/server/src/services/auth.js.map +1 -1
  320. package/dist/server/ee/server/src/services/auth.mjs.map +1 -1
  321. package/dist/server/ee/server/src/services/passport/sso.js.map +1 -1
  322. package/dist/server/ee/server/src/services/passport/sso.mjs.map +1 -1
  323. package/dist/server/ee/server/src/utils/index.js.map +1 -1
  324. package/dist/server/ee/server/src/utils/index.mjs.map +1 -1
  325. package/dist/server/server/src/controllers/transfer/index.js.map +1 -1
  326. package/dist/server/server/src/controllers/transfer/index.mjs.map +1 -1
  327. package/dist/server/server/src/controllers/user.js +10 -0
  328. package/dist/server/server/src/controllers/user.js.map +1 -1
  329. package/dist/server/server/src/controllers/user.mjs +10 -0
  330. package/dist/server/server/src/controllers/user.mjs.map +1 -1
  331. package/dist/server/server/src/domain/action/index.js.map +1 -1
  332. package/dist/server/server/src/domain/action/index.mjs.map +1 -1
  333. package/dist/server/server/src/domain/condition/index.js.map +1 -1
  334. package/dist/server/server/src/domain/condition/index.mjs.map +1 -1
  335. package/dist/server/server/src/domain/permission/index.js.map +1 -1
  336. package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
  337. package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
  338. package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
  339. package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
  340. package/dist/server/server/src/routes/serve-admin-panel.mjs.map +1 -1
  341. package/dist/server/server/src/services/api-token.js.map +1 -1
  342. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  343. package/dist/server/server/src/services/auth.js.map +1 -1
  344. package/dist/server/server/src/services/auth.mjs.map +1 -1
  345. package/dist/server/server/src/services/content-type.js.map +1 -1
  346. package/dist/server/server/src/services/content-type.mjs.map +1 -1
  347. package/dist/server/server/src/services/encryption.js.map +1 -1
  348. package/dist/server/server/src/services/encryption.mjs.map +1 -1
  349. package/dist/server/server/src/services/homepage.js.map +1 -1
  350. package/dist/server/server/src/services/homepage.mjs.map +1 -1
  351. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
  352. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
  353. package/dist/server/server/src/services/permission/permissions-manager/validate.js.map +1 -1
  354. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs.map +1 -1
  355. package/dist/server/server/src/services/role.js.map +1 -1
  356. package/dist/server/server/src/services/role.mjs.map +1 -1
  357. package/dist/server/server/src/services/transfer/token.js.map +1 -1
  358. package/dist/server/server/src/services/transfer/token.mjs.map +1 -1
  359. package/dist/server/server/src/services/user.js +30 -0
  360. package/dist/server/server/src/services/user.js.map +1 -1
  361. package/dist/server/server/src/services/user.mjs +30 -0
  362. package/dist/server/server/src/services/user.mjs.map +1 -1
  363. package/dist/server/server/src/utils/index.js.map +1 -1
  364. package/dist/server/server/src/utils/index.mjs.map +1 -1
  365. package/dist/server/server/src/validation/action-provider.js.map +1 -1
  366. package/dist/server/server/src/validation/action-provider.mjs.map +1 -1
  367. package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.js.map +1 -1
  368. package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.mjs.map +1 -1
  369. package/dist/server/server/src/validation/common-validators.js.map +1 -1
  370. package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
  371. package/dist/server/src/controllers/user.d.ts.map +1 -1
  372. package/dist/server/src/services/user.d.ts.map +1 -1
  373. package/dist/shared/contracts/ai.d.ts +16 -0
  374. package/dist/shared/contracts/ai.d.ts.map +1 -1
  375. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","sources":["../../../../../../../ee/server/src/ai/controllers/ai.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport path from 'path';\nimport fs from 'fs';\nimport crypto from 'crypto';\nimport type { AdminUser } from '../../../../../shared/contracts/shared';\nimport { GetAiToken } from '../../../../../shared/contracts/ai';\n\nexport default {\n async getAiToken(ctx: Context) {\n const ERROR_PREFIX = 'AI token request failed:';\n const USER_ERROR_MESSAGE = 'AI token request failed. Check server logs for details.';\n\n try {\n // Security check: Ensure user is authenticated and has proper permissions\n if (!ctx.state.user) {\n return ctx.unauthorized('Authentication required');\n }\n\n // Check if EE features are enabled first\n if (!strapi.ee?.isEE) {\n strapi.log.error(`${ERROR_PREFIX} Enterprise Edition features are not enabled`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get the EE license\n // First try environment variable, then try reading from file\n let eeLicense = process.env.STRAPI_LICENSE;\n\n if (!eeLicense) {\n try {\n const licensePath = path.join(strapi.dirs.app.root, 'license.txt');\n eeLicense = fs.readFileSync(licensePath).toString();\n } catch (error) {\n // License file doesn't exist or can't be read\n }\n }\n\n if (!eeLicense) {\n strapi.log.error(\n `${ERROR_PREFIX} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';\n\n if (!aiServerUrl) {\n strapi.log.error(\n `${ERROR_PREFIX} AI server URL not configured. Please set STRAPI_AI_URL environment variable.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get the current user\n const user = ctx.state.user as AdminUser;\n\n // Create a secure user identifier using only user ID\n const userIdentifier = user.id.toString();\n\n // Get project ID\n const projectId = strapi.config.get('uuid');\n if (!projectId) {\n strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n strapi.log.http('Contacting AI Server for token generation');\n\n try {\n // Call the AI server's getAiJWT endpoint\n const response = await fetch(`${aiServerUrl}/auth/getAiJWT`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n // No authorization header needed for public endpoint\n // Add request ID for tracing\n 'X-Request-Id': crypto.randomUUID(),\n },\n body: JSON.stringify({\n eeLicense,\n userIdentifier,\n projectId,\n }),\n });\n\n if (!response.ok) {\n let errorData;\n let errorText;\n try {\n errorText = await response.text();\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: errorText || 'Failed to parse error response' };\n }\n\n strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {\n status: response.status,\n statusText: response.statusText,\n error: errorData,\n errorText,\n projectId,\n });\n\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n let data;\n try {\n data = (await response.json()) as {\n jwt: string;\n expiresAt?: string;\n };\n } catch (parseError) {\n strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n if (!data.jwt) {\n strapi.log.error(`${ERROR_PREFIX} Invalid response: missing JWT token`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n strapi.log.info('AI token generated successfully', {\n userId: user.id,\n expiresAt: data.expiresAt,\n });\n\n // Return the AI JWT with metadata\n // Note: Token expires in 1 hour, client should handle refresh\n ctx.body = {\n data: {\n token: data.jwt,\n expiresAt: data.expiresAt, // 1 hour from generation\n },\n } satisfies GetAiToken.Response;\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === 'AbortError') {\n strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n throw fetchError;\n }\n } catch (error) {\n strapi.log.error(\n `${ERROR_PREFIX} ${error instanceof Error ? error.message : 'Unknown error'}`,\n error\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n },\n async getAiUsage(ctx: Context) {\n const ERROR_PREFIX = 'AI usage data request failed:';\n const USER_ERROR_MESSAGE = 'AI usage data request failed. Check server logs for details.';\n // Security check: Ensure user is authenticated and has proper permissions\n if (!ctx.state.user) {\n return ctx.unauthorized('Authentication required');\n }\n\n // Check if EE features are enabled first\n if (!strapi.ee?.isEE) {\n strapi.log.error(`${ERROR_PREFIX} Enterprise Edition features are not enabled`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get the EE license\n // First try environment variable, then try reading from file\n let eeLicense = process.env.STRAPI_LICENSE;\n\n if (!eeLicense) {\n try {\n const licensePath = path.join(strapi.dirs.app.root, 'license.txt');\n eeLicense = fs.readFileSync(licensePath).toString();\n } catch (error) {\n // License file doesn't exist or can't be read\n }\n }\n\n if (!eeLicense) {\n strapi.log.error(\n `${ERROR_PREFIX} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';\n\n if (!aiServerUrl) {\n strapi.log.error(\n `${ERROR_PREFIX} AI server URL not configured. Please set STRAPI_AI_URL or STRAPI_AI_URL environment variable.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get project ID\n const projectId = strapi.config.get('uuid');\n if (!projectId) {\n strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n try {\n // Call the AI server's getAiJWT endpoint\n const response = await fetch(`${aiServerUrl}/cms/ai-data`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n // No authorization header needed for public endpoint\n // Add request ID for tracing\n 'X-Request-Id': crypto.randomUUID(),\n },\n body: JSON.stringify({\n eeKey: eeLicense,\n projectId,\n }),\n });\n\n if (!response.ok) {\n let errorData;\n let errorText;\n try {\n errorText = await response.text();\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: errorText || 'Failed to parse error response' };\n }\n\n strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {\n status: response.status,\n statusText: response.statusText,\n error: errorData,\n errorText,\n projectId,\n });\n\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n let data;\n try {\n data = (await response.json()) as {\n data: {\n cmsAiCreditsUsed: number;\n };\n subscription: {\n subscriptionId: string;\n planPriceId: string;\n subscriptionStatus: string;\n isActiveSubscription: boolean;\n cmsAiEnabled: boolean;\n cmsAiCreditsBase: number;\n cmsAiCreditsMaxUsage: number;\n currentTermStart: string;\n currentTermEnd: string;\n };\n };\n } catch (parseError) {\n strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n ctx.body = {\n ...data.data,\n subscription: data.subscription,\n };\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === 'AbortError') {\n strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n throw fetchError;\n }\n },\n};\n"],"names":["getAiToken","ctx","ERROR_PREFIX","USER_ERROR_MESSAGE","state","user","unauthorized","strapi","ee","isEE","log","error","internalServerError","eeLicense","process","env","STRAPI_LICENSE","licensePath","path","join","dirs","app","root","fs","readFileSync","toString","aiServerUrl","STRAPI_AI_URL","userIdentifier","id","projectId","config","get","http","response","fetch","method","headers","crypto","randomUUID","body","JSON","stringify","ok","errorData","errorText","text","parse","status","statusText","data","json","parseError","jwt","info","userId","expiresAt","token","fetchError","Error","name","message","getAiUsage","eeKey","subscription"],"mappings":"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"}
1
+ {"version":3,"file":"ai.js","sources":["../../../../../../../ee/server/src/ai/controllers/ai.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport path from 'path';\nimport fs from 'fs';\nimport crypto from 'crypto';\nimport type { AdminUser } from '../../../../../shared/contracts/shared';\nimport { GetAiToken } from '../../../../../shared/contracts/ai';\nimport { getService } from '../../utils';\n\nexport default {\n async getAiToken(ctx: Context) {\n const ERROR_PREFIX = 'AI token request failed:';\n const USER_ERROR_MESSAGE = 'AI token request failed. Check server logs for details.';\n\n try {\n // Security check: Ensure user is authenticated and has proper permissions\n if (!ctx.state.user) {\n return ctx.unauthorized('Authentication required');\n }\n\n // Check if EE features are enabled first\n if (!strapi.ee?.isEE) {\n strapi.log.error(`${ERROR_PREFIX} Enterprise Edition features are not enabled`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get the EE license\n // First try environment variable, then try reading from file\n let eeLicense = process.env.STRAPI_LICENSE;\n\n if (!eeLicense) {\n try {\n const licensePath = path.join(strapi.dirs.app.root, 'license.txt');\n eeLicense = fs.readFileSync(licensePath).toString();\n } catch (error) {\n // License file doesn't exist or can't be read\n }\n }\n\n if (!eeLicense) {\n strapi.log.error(\n `${ERROR_PREFIX} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';\n\n if (!aiServerUrl) {\n strapi.log.error(\n `${ERROR_PREFIX} AI server URL not configured. Please set STRAPI_AI_URL environment variable.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get the current user\n const user = ctx.state.user as AdminUser;\n\n // Create a secure user identifier using only user ID\n const userIdentifier = user.id.toString();\n\n // Get project ID\n const projectId = strapi.config.get('uuid');\n if (!projectId) {\n strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n strapi.log.http('Contacting AI Server for token generation');\n\n try {\n // Call the AI server's getAiJWT endpoint\n const response = await fetch(`${aiServerUrl}/auth/getAiJWT`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n // No authorization header needed for public endpoint\n // Add request ID for tracing\n 'X-Request-Id': crypto.randomUUID(),\n },\n body: JSON.stringify({\n eeLicense,\n userIdentifier,\n projectId,\n }),\n });\n\n if (!response.ok) {\n let errorData;\n let errorText;\n try {\n errorText = await response.text();\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: errorText || 'Failed to parse error response' };\n }\n\n strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {\n status: response.status,\n statusText: response.statusText,\n error: errorData,\n errorText,\n projectId,\n });\n\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n let data;\n try {\n data = (await response.json()) as {\n jwt: string;\n expiresAt?: string;\n };\n } catch (parseError) {\n strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n if (!data.jwt) {\n strapi.log.error(`${ERROR_PREFIX} Invalid response: missing JWT token`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n strapi.log.info('AI token generated successfully', {\n userId: user.id,\n expiresAt: data.expiresAt,\n });\n\n // Return the AI JWT with metadata\n // Note: Token expires in 1 hour, client should handle refresh\n ctx.body = {\n data: {\n token: data.jwt,\n expiresAt: data.expiresAt, // 1 hour from generation\n },\n } satisfies GetAiToken.Response;\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === 'AbortError') {\n strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n throw fetchError;\n }\n } catch (error) {\n strapi.log.error(\n `${ERROR_PREFIX} ${error instanceof Error ? error.message : 'Unknown error'}`,\n error\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n },\n async getAiUsage(ctx: Context) {\n const ERROR_PREFIX = 'AI usage data request failed:';\n const USER_ERROR_MESSAGE = 'AI usage data request failed. Check server logs for details.';\n // Security check: Ensure user is authenticated and has proper permissions\n if (!ctx.state.user) {\n return ctx.unauthorized('Authentication required');\n }\n\n // Check if EE features are enabled first\n if (!strapi.ee?.isEE) {\n strapi.log.error(`${ERROR_PREFIX} Enterprise Edition features are not enabled`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get the EE license\n // First try environment variable, then try reading from file\n let eeLicense = process.env.STRAPI_LICENSE;\n\n if (!eeLicense) {\n try {\n const licensePath = path.join(strapi.dirs.app.root, 'license.txt');\n eeLicense = fs.readFileSync(licensePath).toString();\n } catch (error) {\n // License file doesn't exist or can't be read\n }\n }\n\n if (!eeLicense) {\n strapi.log.error(\n `${ERROR_PREFIX} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';\n\n if (!aiServerUrl) {\n strapi.log.error(\n `${ERROR_PREFIX} AI server URL not configured. Please set STRAPI_AI_URL or STRAPI_AI_URL environment variable.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get project ID\n const projectId = strapi.config.get('uuid');\n if (!projectId) {\n strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n try {\n // Call the AI server's getAiJWT endpoint\n const response = await fetch(`${aiServerUrl}/cms/ai-data`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n // No authorization header needed for public endpoint\n // Add request ID for tracing\n 'X-Request-Id': crypto.randomUUID(),\n },\n body: JSON.stringify({\n eeKey: eeLicense,\n projectId,\n }),\n });\n\n if (!response.ok) {\n let errorData;\n let errorText;\n try {\n errorText = await response.text();\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: errorText || 'Failed to parse error response' };\n }\n\n strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {\n status: response.status,\n statusText: response.statusText,\n error: errorData,\n errorText,\n projectId,\n });\n\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n let data;\n try {\n data = (await response.json()) as {\n data: {\n cmsAiCreditsUsed: number;\n };\n subscription: {\n subscriptionId: string;\n planPriceId: string;\n subscriptionStatus: string;\n isActiveSubscription: boolean;\n cmsAiEnabled: boolean;\n cmsAiCreditsBase: number;\n cmsAiCreditsMaxUsage: number;\n currentTermStart: string;\n currentTermEnd: string;\n };\n };\n } catch (parseError) {\n strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n ctx.body = {\n ...data.data,\n subscription: data.subscription,\n };\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === 'AbortError') {\n strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n throw fetchError;\n }\n },\n async getAIFeatureConfig(ctx: Context) {\n const aiFeatureConfig = await strapi.get('ai').getAIFeatureConfig();\n\n ctx.body = {\n data: aiFeatureConfig,\n };\n },\n};\n"],"names":["getAiToken","ctx","ERROR_PREFIX","USER_ERROR_MESSAGE","state","user","unauthorized","strapi","ee","isEE","log","error","internalServerError","eeLicense","process","env","STRAPI_LICENSE","licensePath","path","join","dirs","app","root","fs","readFileSync","toString","aiServerUrl","STRAPI_AI_URL","userIdentifier","id","projectId","config","get","http","response","fetch","method","headers","crypto","randomUUID","body","JSON","stringify","ok","errorData","errorText","text","parse","status","statusText","data","json","parseError","jwt","info","userId","expiresAt","token","fetchError","Error","name","message","getAiUsage","eeKey","subscription","getAIFeatureConfig","aiFeatureConfig"],"mappings":"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"}
@@ -209,6 +209,12 @@ var aiController = {
209
209
  }
210
210
  throw fetchError;
211
211
  }
212
+ },
213
+ async getAIFeatureConfig (ctx) {
214
+ const aiFeatureConfig = await strapi.get('ai').getAIFeatureConfig();
215
+ ctx.body = {
216
+ data: aiFeatureConfig
217
+ };
212
218
  }
213
219
  };
214
220
 
@@ -1 +1 @@
1
- {"version":3,"file":"ai.mjs","sources":["../../../../../../../ee/server/src/ai/controllers/ai.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport path from 'path';\nimport fs from 'fs';\nimport crypto from 'crypto';\nimport type { AdminUser } from '../../../../../shared/contracts/shared';\nimport { GetAiToken } from '../../../../../shared/contracts/ai';\n\nexport default {\n async getAiToken(ctx: Context) {\n const ERROR_PREFIX = 'AI token request failed:';\n const USER_ERROR_MESSAGE = 'AI token request failed. Check server logs for details.';\n\n try {\n // Security check: Ensure user is authenticated and has proper permissions\n if (!ctx.state.user) {\n return ctx.unauthorized('Authentication required');\n }\n\n // Check if EE features are enabled first\n if (!strapi.ee?.isEE) {\n strapi.log.error(`${ERROR_PREFIX} Enterprise Edition features are not enabled`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get the EE license\n // First try environment variable, then try reading from file\n let eeLicense = process.env.STRAPI_LICENSE;\n\n if (!eeLicense) {\n try {\n const licensePath = path.join(strapi.dirs.app.root, 'license.txt');\n eeLicense = fs.readFileSync(licensePath).toString();\n } catch (error) {\n // License file doesn't exist or can't be read\n }\n }\n\n if (!eeLicense) {\n strapi.log.error(\n `${ERROR_PREFIX} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';\n\n if (!aiServerUrl) {\n strapi.log.error(\n `${ERROR_PREFIX} AI server URL not configured. Please set STRAPI_AI_URL environment variable.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get the current user\n const user = ctx.state.user as AdminUser;\n\n // Create a secure user identifier using only user ID\n const userIdentifier = user.id.toString();\n\n // Get project ID\n const projectId = strapi.config.get('uuid');\n if (!projectId) {\n strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n strapi.log.http('Contacting AI Server for token generation');\n\n try {\n // Call the AI server's getAiJWT endpoint\n const response = await fetch(`${aiServerUrl}/auth/getAiJWT`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n // No authorization header needed for public endpoint\n // Add request ID for tracing\n 'X-Request-Id': crypto.randomUUID(),\n },\n body: JSON.stringify({\n eeLicense,\n userIdentifier,\n projectId,\n }),\n });\n\n if (!response.ok) {\n let errorData;\n let errorText;\n try {\n errorText = await response.text();\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: errorText || 'Failed to parse error response' };\n }\n\n strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {\n status: response.status,\n statusText: response.statusText,\n error: errorData,\n errorText,\n projectId,\n });\n\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n let data;\n try {\n data = (await response.json()) as {\n jwt: string;\n expiresAt?: string;\n };\n } catch (parseError) {\n strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n if (!data.jwt) {\n strapi.log.error(`${ERROR_PREFIX} Invalid response: missing JWT token`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n strapi.log.info('AI token generated successfully', {\n userId: user.id,\n expiresAt: data.expiresAt,\n });\n\n // Return the AI JWT with metadata\n // Note: Token expires in 1 hour, client should handle refresh\n ctx.body = {\n data: {\n token: data.jwt,\n expiresAt: data.expiresAt, // 1 hour from generation\n },\n } satisfies GetAiToken.Response;\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === 'AbortError') {\n strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n throw fetchError;\n }\n } catch (error) {\n strapi.log.error(\n `${ERROR_PREFIX} ${error instanceof Error ? error.message : 'Unknown error'}`,\n error\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n },\n async getAiUsage(ctx: Context) {\n const ERROR_PREFIX = 'AI usage data request failed:';\n const USER_ERROR_MESSAGE = 'AI usage data request failed. Check server logs for details.';\n // Security check: Ensure user is authenticated and has proper permissions\n if (!ctx.state.user) {\n return ctx.unauthorized('Authentication required');\n }\n\n // Check if EE features are enabled first\n if (!strapi.ee?.isEE) {\n strapi.log.error(`${ERROR_PREFIX} Enterprise Edition features are not enabled`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get the EE license\n // First try environment variable, then try reading from file\n let eeLicense = process.env.STRAPI_LICENSE;\n\n if (!eeLicense) {\n try {\n const licensePath = path.join(strapi.dirs.app.root, 'license.txt');\n eeLicense = fs.readFileSync(licensePath).toString();\n } catch (error) {\n // License file doesn't exist or can't be read\n }\n }\n\n if (!eeLicense) {\n strapi.log.error(\n `${ERROR_PREFIX} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';\n\n if (!aiServerUrl) {\n strapi.log.error(\n `${ERROR_PREFIX} AI server URL not configured. Please set STRAPI_AI_URL or STRAPI_AI_URL environment variable.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get project ID\n const projectId = strapi.config.get('uuid');\n if (!projectId) {\n strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n try {\n // Call the AI server's getAiJWT endpoint\n const response = await fetch(`${aiServerUrl}/cms/ai-data`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n // No authorization header needed for public endpoint\n // Add request ID for tracing\n 'X-Request-Id': crypto.randomUUID(),\n },\n body: JSON.stringify({\n eeKey: eeLicense,\n projectId,\n }),\n });\n\n if (!response.ok) {\n let errorData;\n let errorText;\n try {\n errorText = await response.text();\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: errorText || 'Failed to parse error response' };\n }\n\n strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {\n status: response.status,\n statusText: response.statusText,\n error: errorData,\n errorText,\n projectId,\n });\n\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n let data;\n try {\n data = (await response.json()) as {\n data: {\n cmsAiCreditsUsed: number;\n };\n subscription: {\n subscriptionId: string;\n planPriceId: string;\n subscriptionStatus: string;\n isActiveSubscription: boolean;\n cmsAiEnabled: boolean;\n cmsAiCreditsBase: number;\n cmsAiCreditsMaxUsage: number;\n currentTermStart: string;\n currentTermEnd: string;\n };\n };\n } catch (parseError) {\n strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n ctx.body = {\n ...data.data,\n subscription: data.subscription,\n };\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === 'AbortError') {\n strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n throw fetchError;\n }\n },\n};\n"],"names":["getAiToken","ctx","ERROR_PREFIX","USER_ERROR_MESSAGE","state","user","unauthorized","strapi","ee","isEE","log","error","internalServerError","eeLicense","process","env","STRAPI_LICENSE","licensePath","path","join","dirs","app","root","fs","readFileSync","toString","aiServerUrl","STRAPI_AI_URL","userIdentifier","id","projectId","config","get","http","response","fetch","method","headers","crypto","randomUUID","body","JSON","stringify","ok","errorData","errorText","text","parse","status","statusText","data","json","parseError","jwt","info","userId","expiresAt","token","fetchError","Error","name","message","getAiUsage","eeKey","subscription"],"mappings":"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"}
1
+ {"version":3,"file":"ai.mjs","sources":["../../../../../../../ee/server/src/ai/controllers/ai.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport path from 'path';\nimport fs from 'fs';\nimport crypto from 'crypto';\nimport type { AdminUser } from '../../../../../shared/contracts/shared';\nimport { GetAiToken } from '../../../../../shared/contracts/ai';\nimport { getService } from '../../utils';\n\nexport default {\n async getAiToken(ctx: Context) {\n const ERROR_PREFIX = 'AI token request failed:';\n const USER_ERROR_MESSAGE = 'AI token request failed. Check server logs for details.';\n\n try {\n // Security check: Ensure user is authenticated and has proper permissions\n if (!ctx.state.user) {\n return ctx.unauthorized('Authentication required');\n }\n\n // Check if EE features are enabled first\n if (!strapi.ee?.isEE) {\n strapi.log.error(`${ERROR_PREFIX} Enterprise Edition features are not enabled`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get the EE license\n // First try environment variable, then try reading from file\n let eeLicense = process.env.STRAPI_LICENSE;\n\n if (!eeLicense) {\n try {\n const licensePath = path.join(strapi.dirs.app.root, 'license.txt');\n eeLicense = fs.readFileSync(licensePath).toString();\n } catch (error) {\n // License file doesn't exist or can't be read\n }\n }\n\n if (!eeLicense) {\n strapi.log.error(\n `${ERROR_PREFIX} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';\n\n if (!aiServerUrl) {\n strapi.log.error(\n `${ERROR_PREFIX} AI server URL not configured. Please set STRAPI_AI_URL environment variable.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get the current user\n const user = ctx.state.user as AdminUser;\n\n // Create a secure user identifier using only user ID\n const userIdentifier = user.id.toString();\n\n // Get project ID\n const projectId = strapi.config.get('uuid');\n if (!projectId) {\n strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n strapi.log.http('Contacting AI Server for token generation');\n\n try {\n // Call the AI server's getAiJWT endpoint\n const response = await fetch(`${aiServerUrl}/auth/getAiJWT`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n // No authorization header needed for public endpoint\n // Add request ID for tracing\n 'X-Request-Id': crypto.randomUUID(),\n },\n body: JSON.stringify({\n eeLicense,\n userIdentifier,\n projectId,\n }),\n });\n\n if (!response.ok) {\n let errorData;\n let errorText;\n try {\n errorText = await response.text();\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: errorText || 'Failed to parse error response' };\n }\n\n strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {\n status: response.status,\n statusText: response.statusText,\n error: errorData,\n errorText,\n projectId,\n });\n\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n let data;\n try {\n data = (await response.json()) as {\n jwt: string;\n expiresAt?: string;\n };\n } catch (parseError) {\n strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n if (!data.jwt) {\n strapi.log.error(`${ERROR_PREFIX} Invalid response: missing JWT token`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n strapi.log.info('AI token generated successfully', {\n userId: user.id,\n expiresAt: data.expiresAt,\n });\n\n // Return the AI JWT with metadata\n // Note: Token expires in 1 hour, client should handle refresh\n ctx.body = {\n data: {\n token: data.jwt,\n expiresAt: data.expiresAt, // 1 hour from generation\n },\n } satisfies GetAiToken.Response;\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === 'AbortError') {\n strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n throw fetchError;\n }\n } catch (error) {\n strapi.log.error(\n `${ERROR_PREFIX} ${error instanceof Error ? error.message : 'Unknown error'}`,\n error\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n },\n async getAiUsage(ctx: Context) {\n const ERROR_PREFIX = 'AI usage data request failed:';\n const USER_ERROR_MESSAGE = 'AI usage data request failed. Check server logs for details.';\n // Security check: Ensure user is authenticated and has proper permissions\n if (!ctx.state.user) {\n return ctx.unauthorized('Authentication required');\n }\n\n // Check if EE features are enabled first\n if (!strapi.ee?.isEE) {\n strapi.log.error(`${ERROR_PREFIX} Enterprise Edition features are not enabled`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get the EE license\n // First try environment variable, then try reading from file\n let eeLicense = process.env.STRAPI_LICENSE;\n\n if (!eeLicense) {\n try {\n const licensePath = path.join(strapi.dirs.app.root, 'license.txt');\n eeLicense = fs.readFileSync(licensePath).toString();\n } catch (error) {\n // License file doesn't exist or can't be read\n }\n }\n\n if (!eeLicense) {\n strapi.log.error(\n `${ERROR_PREFIX} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';\n\n if (!aiServerUrl) {\n strapi.log.error(\n `${ERROR_PREFIX} AI server URL not configured. Please set STRAPI_AI_URL or STRAPI_AI_URL environment variable.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get project ID\n const projectId = strapi.config.get('uuid');\n if (!projectId) {\n strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n try {\n // Call the AI server's getAiJWT endpoint\n const response = await fetch(`${aiServerUrl}/cms/ai-data`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n // No authorization header needed for public endpoint\n // Add request ID for tracing\n 'X-Request-Id': crypto.randomUUID(),\n },\n body: JSON.stringify({\n eeKey: eeLicense,\n projectId,\n }),\n });\n\n if (!response.ok) {\n let errorData;\n let errorText;\n try {\n errorText = await response.text();\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: errorText || 'Failed to parse error response' };\n }\n\n strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {\n status: response.status,\n statusText: response.statusText,\n error: errorData,\n errorText,\n projectId,\n });\n\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n let data;\n try {\n data = (await response.json()) as {\n data: {\n cmsAiCreditsUsed: number;\n };\n subscription: {\n subscriptionId: string;\n planPriceId: string;\n subscriptionStatus: string;\n isActiveSubscription: boolean;\n cmsAiEnabled: boolean;\n cmsAiCreditsBase: number;\n cmsAiCreditsMaxUsage: number;\n currentTermStart: string;\n currentTermEnd: string;\n };\n };\n } catch (parseError) {\n strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n ctx.body = {\n ...data.data,\n subscription: data.subscription,\n };\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === 'AbortError') {\n strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n throw fetchError;\n }\n },\n async getAIFeatureConfig(ctx: Context) {\n const aiFeatureConfig = await strapi.get('ai').getAIFeatureConfig();\n\n ctx.body = {\n data: aiFeatureConfig,\n };\n },\n};\n"],"names":["getAiToken","ctx","ERROR_PREFIX","USER_ERROR_MESSAGE","state","user","unauthorized","strapi","ee","isEE","log","error","internalServerError","eeLicense","process","env","STRAPI_LICENSE","licensePath","path","join","dirs","app","root","fs","readFileSync","toString","aiServerUrl","STRAPI_AI_URL","userIdentifier","id","projectId","config","get","http","response","fetch","method","headers","crypto","randomUUID","body","JSON","stringify","ok","errorData","errorText","text","parse","status","statusText","data","json","parseError","jwt","info","userId","expiresAt","token","fetchError","Error","name","message","getAiUsage","eeKey","subscription","getAIFeatureConfig","aiFeatureConfig"],"mappings":"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"}
@@ -24,6 +24,17 @@ var aiRoutes = {
24
24
  'admin::isAuthenticatedAdmin'
25
25
  ]
26
26
  }
27
+ },
28
+ // get ai feature settings
29
+ {
30
+ method: 'GET',
31
+ path: '/ai-feature-config',
32
+ handler: 'ai.getAIFeatureConfig',
33
+ config: {
34
+ policies: [
35
+ 'admin::isAuthenticatedAdmin'
36
+ ]
37
+ }
27
38
  }
28
39
  ]
29
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","sources":["../../../../../../../ee/server/src/ai/routes/ai.ts"],"sourcesContent":["export default {\n type: 'admin',\n routes: [\n // ai data usage\n {\n method: 'GET',\n path: '/ai-usage',\n handler: 'ai.getAiUsage',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n // get ai token\n {\n method: 'GET',\n path: '/ai-token',\n handler: 'ai.getAiToken',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n ],\n};\n"],"names":["type","routes","method","path","handler","config","policies"],"mappings":";;AAAA,eAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;;AAEN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,eAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;;AAEA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,eAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH,CAAE;;;;"}
1
+ {"version":3,"file":"ai.js","sources":["../../../../../../../ee/server/src/ai/routes/ai.ts"],"sourcesContent":["export default {\n type: 'admin',\n routes: [\n // ai data usage\n {\n method: 'GET',\n path: '/ai-usage',\n handler: 'ai.getAiUsage',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n // get ai token\n {\n method: 'GET',\n path: '/ai-token',\n handler: 'ai.getAiToken',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n // get ai feature settings\n {\n method: 'GET',\n path: '/ai-feature-config',\n handler: 'ai.getAIFeatureConfig',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n ],\n};\n"],"names":["type","routes","method","path","handler","config","policies"],"mappings":";;AAAA,eAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;;AAEN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,eAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;;AAEA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,eAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;;AAEA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,oBAAA;YACNC,OAAS,EAAA,uBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH,CAAE;;;;"}
@@ -22,6 +22,17 @@ var aiRoutes = {
22
22
  'admin::isAuthenticatedAdmin'
23
23
  ]
24
24
  }
25
+ },
26
+ // get ai feature settings
27
+ {
28
+ method: 'GET',
29
+ path: '/ai-feature-config',
30
+ handler: 'ai.getAIFeatureConfig',
31
+ config: {
32
+ policies: [
33
+ 'admin::isAuthenticatedAdmin'
34
+ ]
35
+ }
25
36
  }
26
37
  ]
27
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ai.mjs","sources":["../../../../../../../ee/server/src/ai/routes/ai.ts"],"sourcesContent":["export default {\n type: 'admin',\n routes: [\n // ai data usage\n {\n method: 'GET',\n path: '/ai-usage',\n handler: 'ai.getAiUsage',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n // get ai token\n {\n method: 'GET',\n path: '/ai-token',\n handler: 'ai.getAiToken',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n ],\n};\n"],"names":["type","routes","method","path","handler","config","policies"],"mappings":"AAAA,eAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;;AAEN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,eAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;;AAEA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,eAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH,CAAE;;;;"}
1
+ {"version":3,"file":"ai.mjs","sources":["../../../../../../../ee/server/src/ai/routes/ai.ts"],"sourcesContent":["export default {\n type: 'admin',\n routes: [\n // ai data usage\n {\n method: 'GET',\n path: '/ai-usage',\n handler: 'ai.getAiUsage',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n // get ai token\n {\n method: 'GET',\n path: '/ai-token',\n handler: 'ai.getAiToken',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n // get ai feature settings\n {\n method: 'GET',\n path: '/ai-feature-config',\n handler: 'ai.getAIFeatureConfig',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n ],\n};\n"],"names":["type","routes","method","path","handler","config","policies"],"mappings":"AAAA,eAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;;AAEN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,eAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;;AAEA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,eAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;;AAEA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,oBAAA;YACNC,OAAS,EAAA,uBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH,CAAE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"audit-logs.js","sources":["../../../../../../../ee/server/src/audit-logs/services/audit-logs.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\ninterface Event {\n action: string;\n date: Date;\n userId: string | number;\n payload: Record<string, unknown>;\n}\n\ninterface Log extends Omit<Event, 'userId'> {\n user: string | number;\n}\n\nconst getSanitizedUser = (user: any) => {\n let displayName = user.email;\n\n if (user.username) {\n displayName = user.username;\n } else if (user.firstname && user.lastname) {\n displayName = `${user.firstname} ${user.lastname}`;\n }\n\n return {\n id: user.id,\n email: user.email,\n displayName,\n };\n};\n\n/**\n * @description\n * Manages audit logs interaction with the database. Accessible via strapi.get('audit-logs')\n */\nconst createAuditLogsService = (strapi: Core.Strapi) => {\n return {\n async saveEvent(event: Event) {\n const { userId, ...rest } = event;\n\n const auditLog: Log = { ...rest, user: userId };\n\n // Save to database\n await strapi.db?.query('admin::audit-log').create({ data: auditLog });\n\n return this;\n },\n\n async findMany(query: unknown) {\n const { results, pagination } = await strapi.db?.query('admin::audit-log').findPage({\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n ...strapi.get('query-params').transform('admin::audit-log', query),\n });\n\n const sanitizedResults = results.map((result: any) => {\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n });\n\n return {\n results: sanitizedResults,\n pagination,\n };\n },\n\n async findOne(id: unknown) {\n const result: any = await strapi.db?.query('admin::audit-log').findOne({\n where: { id },\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n });\n\n if (!result) {\n return null;\n }\n\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n },\n\n deleteExpiredEvents(expirationDate: Date) {\n return strapi.db?.query('admin::audit-log').deleteMany({\n where: {\n date: {\n $lt: expirationDate.toISOString(),\n },\n },\n });\n },\n };\n};\n\nexport { createAuditLogsService };\n"],"names":["getSanitizedUser","user","displayName","email","username","firstname","lastname","id","createAuditLogsService","strapi","saveEvent","event","userId","rest","auditLog","db","query","create","data","findMany","results","pagination","findPage","populate","select","get","transform","sanitizedResults","map","result","findOne","where","deleteExpiredEvents","expirationDate","deleteMany","date","$lt","toISOString"],"mappings":"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"}
1
+ {"version":3,"file":"audit-logs.js","sources":["../../../../../../../ee/server/src/audit-logs/services/audit-logs.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\ninterface Event {\n action: string;\n date: Date;\n userId: string | number;\n payload: Record<string, unknown>;\n}\n\ninterface Log extends Omit<Event, 'userId'> {\n user: string | number;\n}\n\nconst getSanitizedUser = (user: any) => {\n let displayName = user.email;\n\n if (user.username) {\n displayName = user.username;\n } else if (user.firstname && user.lastname) {\n displayName = `${user.firstname} ${user.lastname}`;\n }\n\n return {\n id: user.id,\n email: user.email,\n displayName,\n };\n};\n\n/**\n * @description\n * Manages audit logs interaction with the database. Accessible via strapi.get('audit-logs')\n */\nconst createAuditLogsService = (strapi: Core.Strapi) => {\n return {\n async saveEvent(event: Event) {\n const { userId, ...rest } = event;\n\n const auditLog: Log = { ...rest, user: userId };\n\n // Save to database\n await strapi.db?.query('admin::audit-log').create({ data: auditLog });\n\n return this;\n },\n\n async findMany(query: unknown) {\n const { results, pagination } = await strapi.db?.query('admin::audit-log').findPage({\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n ...strapi.get('query-params').transform('admin::audit-log', query),\n });\n\n const sanitizedResults = results.map((result: any) => {\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n });\n\n return {\n results: sanitizedResults,\n pagination,\n };\n },\n\n async findOne(id: unknown) {\n const result: any = await strapi.db?.query('admin::audit-log').findOne({\n where: { id },\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n });\n\n if (!result) {\n return null;\n }\n\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n },\n\n deleteExpiredEvents(expirationDate: Date) {\n return strapi.db?.query('admin::audit-log').deleteMany({\n where: {\n date: {\n $lt: expirationDate.toISOString(),\n },\n },\n });\n },\n };\n};\n\nexport { createAuditLogsService };\n"],"names":["getSanitizedUser","user","displayName","email","username","firstname","lastname","id","createAuditLogsService","strapi","saveEvent","event","userId","rest","auditLog","db","query","create","data","findMany","results","pagination","findPage","populate","select","get","transform","sanitizedResults","map","result","findOne","where","deleteExpiredEvents","expirationDate","deleteMany","date","$lt","toISOString"],"mappings":";;AAaA,MAAMA,mBAAmB,CAACC,IAAAA,GAAAA;IACxB,IAAIC,WAAAA,GAAcD,KAAKE,KAAK;IAE5B,IAAIF,IAAAA,CAAKG,QAAQ,EAAE;AACjBF,QAAAA,WAAAA,GAAcD,KAAKG,QAAQ;AAC7B,KAAA,MAAO,IAAIH,IAAKI,CAAAA,SAAS,IAAIJ,IAAAA,CAAKK,QAAQ,EAAE;QAC1CJ,WAAc,GAAA,CAAA,EAAGD,KAAKI,SAAS,CAAC,CAAC,EAAEJ,IAAAA,CAAKK,QAAQ,CAAE,CAAA;AACpD;IAEA,OAAO;AACLC,QAAAA,EAAAA,EAAIN,KAAKM,EAAE;AACXJ,QAAAA,KAAAA,EAAOF,KAAKE,KAAK;AACjBD,QAAAA;AACF,KAAA;AACF,CAAA;AAEA;;;IAIA,MAAMM,yBAAyB,CAACC,MAAAA,GAAAA;IAC9B,OAAO;AACL,QAAA,MAAMC,WAAUC,KAAY,EAAA;AAC1B,YAAA,MAAM,EAAEC,MAAM,EAAE,GAAGC,MAAM,GAAGF,KAAAA;AAE5B,YAAA,MAAMG,QAAgB,GAAA;AAAE,gBAAA,GAAGD,IAAI;gBAAEZ,IAAMW,EAAAA;AAAO,aAAA;;AAG9C,YAAA,MAAMH,MAAOM,CAAAA,EAAE,EAAEC,KAAAA,CAAM,oBAAoBC,MAAO,CAAA;gBAAEC,IAAMJ,EAAAA;AAAS,aAAA,CAAA;AAEnE,YAAA,OAAO,IAAI;AACb,SAAA;AAEA,QAAA,MAAMK,UAASH,KAAc,EAAA;AAC3B,YAAA,MAAM,EAAEI,OAAO,EAAEC,UAAU,EAAE,GAAG,MAAMZ,MAAAA,CAAOM,EAAE,EAAEC,KAAM,CAAA,kBAAA,CAAA,CAAoBM,QAAS,CAAA;gBAClFC,QAAU,EAAA;AAAC,oBAAA;AAAO,iBAAA;gBAClBC,MAAQ,EAAA;AAAC,oBAAA,QAAA;AAAU,oBAAA,MAAA;AAAQ,oBAAA;AAAU,iBAAA;AACrC,gBAAA,GAAGf,OAAOgB,GAAG,CAAC,gBAAgBC,SAAS,CAAC,oBAAoBV,KAAM;AACpE,aAAA,CAAA;AAEA,YAAA,MAAMW,gBAAmBP,GAAAA,OAAAA,CAAQQ,GAAG,CAAC,CAACC,MAAAA,GAAAA;AACpC,gBAAA,MAAM,EAAE5B,IAAI,EAAE,GAAGY,MAAM,GAAGgB,MAAAA;gBAC1B,OAAO;AACL,oBAAA,GAAGhB,IAAI;oBACPZ,IAAMA,EAAAA,IAAAA,GAAOD,iBAAiBC,IAAQ,CAAA,GAAA;AACxC,iBAAA;AACF,aAAA,CAAA;YAEA,OAAO;gBACLmB,OAASO,EAAAA,gBAAAA;AACTN,gBAAAA;AACF,aAAA;AACF,SAAA;AAEA,QAAA,MAAMS,SAAQvB,EAAW,EAAA;AACvB,YAAA,MAAMsB,SAAc,MAAMpB,MAAAA,CAAOM,EAAE,EAAEC,KAAAA,CAAM,oBAAoBc,OAAQ,CAAA;gBACrEC,KAAO,EAAA;AAAExB,oBAAAA;AAAG,iBAAA;gBACZgB,QAAU,EAAA;AAAC,oBAAA;AAAO,iBAAA;gBAClBC,MAAQ,EAAA;AAAC,oBAAA,QAAA;AAAU,oBAAA,MAAA;AAAQ,oBAAA;AAAU;AACvC,aAAA,CAAA;AAEA,YAAA,IAAI,CAACK,MAAQ,EAAA;gBACX,OAAO,IAAA;AACT;AAEA,YAAA,MAAM,EAAE5B,IAAI,EAAE,GAAGY,MAAM,GAAGgB,MAAAA;YAC1B,OAAO;AACL,gBAAA,GAAGhB,IAAI;gBACPZ,IAAMA,EAAAA,IAAAA,GAAOD,iBAAiBC,IAAQ,CAAA,GAAA;AACxC,aAAA;AACF,SAAA;AAEA+B,QAAAA,mBAAAA,CAAAA,CAAoBC,cAAoB,EAAA;AACtC,YAAA,OAAOxB,MAAOM,CAAAA,EAAE,EAAEC,KAAAA,CAAM,oBAAoBkB,UAAW,CAAA;gBACrDH,KAAO,EAAA;oBACLI,IAAM,EAAA;AACJC,wBAAAA,GAAAA,EAAKH,eAAeI,WAAW;AACjC;AACF;AACF,aAAA,CAAA;AACF;AACF,KAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"audit-logs.mjs","sources":["../../../../../../../ee/server/src/audit-logs/services/audit-logs.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\ninterface Event {\n action: string;\n date: Date;\n userId: string | number;\n payload: Record<string, unknown>;\n}\n\ninterface Log extends Omit<Event, 'userId'> {\n user: string | number;\n}\n\nconst getSanitizedUser = (user: any) => {\n let displayName = user.email;\n\n if (user.username) {\n displayName = user.username;\n } else if (user.firstname && user.lastname) {\n displayName = `${user.firstname} ${user.lastname}`;\n }\n\n return {\n id: user.id,\n email: user.email,\n displayName,\n };\n};\n\n/**\n * @description\n * Manages audit logs interaction with the database. Accessible via strapi.get('audit-logs')\n */\nconst createAuditLogsService = (strapi: Core.Strapi) => {\n return {\n async saveEvent(event: Event) {\n const { userId, ...rest } = event;\n\n const auditLog: Log = { ...rest, user: userId };\n\n // Save to database\n await strapi.db?.query('admin::audit-log').create({ data: auditLog });\n\n return this;\n },\n\n async findMany(query: unknown) {\n const { results, pagination } = await strapi.db?.query('admin::audit-log').findPage({\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n ...strapi.get('query-params').transform('admin::audit-log', query),\n });\n\n const sanitizedResults = results.map((result: any) => {\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n });\n\n return {\n results: sanitizedResults,\n pagination,\n };\n },\n\n async findOne(id: unknown) {\n const result: any = await strapi.db?.query('admin::audit-log').findOne({\n where: { id },\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n });\n\n if (!result) {\n return null;\n }\n\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n },\n\n deleteExpiredEvents(expirationDate: Date) {\n return strapi.db?.query('admin::audit-log').deleteMany({\n where: {\n date: {\n $lt: expirationDate.toISOString(),\n },\n },\n });\n },\n };\n};\n\nexport { createAuditLogsService };\n"],"names":["getSanitizedUser","user","displayName","email","username","firstname","lastname","id","createAuditLogsService","strapi","saveEvent","event","userId","rest","auditLog","db","query","create","data","findMany","results","pagination","findPage","populate","select","get","transform","sanitizedResults","map","result","findOne","where","deleteExpiredEvents","expirationDate","deleteMany","date","$lt","toISOString"],"mappings":"AAaA,MAAMA,mBAAmB,CAACC,IAAAA,GAAAA;IACxB,IAAIC,WAAAA,GAAcD,KAAKE,KAAK;IAE5B,IAAIF,IAAAA,CAAKG,QAAQ,EAAE;AACjBF,QAAAA,WAAAA,GAAcD,KAAKG,QAAQ;AAC7B,KAAA,MAAO,IAAIH,IAAKI,CAAAA,SAAS,IAAIJ,IAAAA,CAAKK,QAAQ,EAAE;QAC1CJ,WAAc,GAAA,CAAC,EAAED,IAAAA,CAAKI,SAAS,CAAC,CAAC,EAAEJ,IAAAA,CAAKK,QAAQ,CAAC,CAAC;AACpD;IAEA,OAAO;AACLC,QAAAA,EAAAA,EAAIN,KAAKM,EAAE;AACXJ,QAAAA,KAAAA,EAAOF,KAAKE,KAAK;AACjBD,QAAAA;AACF,KAAA;AACF,CAAA;AAEA;;;IAIA,MAAMM,yBAAyB,CAACC,MAAAA,GAAAA;IAC9B,OAAO;AACL,QAAA,MAAMC,WAAUC,KAAY,EAAA;AAC1B,YAAA,MAAM,EAAEC,MAAM,EAAE,GAAGC,MAAM,GAAGF,KAAAA;AAE5B,YAAA,MAAMG,QAAgB,GAAA;AAAE,gBAAA,GAAGD,IAAI;gBAAEZ,IAAMW,EAAAA;AAAO,aAAA;;AAG9C,YAAA,MAAMH,MAAOM,CAAAA,EAAE,EAAEC,KAAAA,CAAM,oBAAoBC,MAAO,CAAA;gBAAEC,IAAMJ,EAAAA;AAAS,aAAA,CAAA;AAEnE,YAAA,OAAO,IAAI;AACb,SAAA;AAEA,QAAA,MAAMK,UAASH,KAAc,EAAA;AAC3B,YAAA,MAAM,EAAEI,OAAO,EAAEC,UAAU,EAAE,GAAG,MAAMZ,MAAAA,CAAOM,EAAE,EAAEC,KAAM,CAAA,kBAAA,CAAA,CAAoBM,QAAS,CAAA;gBAClFC,QAAU,EAAA;AAAC,oBAAA;AAAO,iBAAA;gBAClBC,MAAQ,EAAA;AAAC,oBAAA,QAAA;AAAU,oBAAA,MAAA;AAAQ,oBAAA;AAAU,iBAAA;AACrC,gBAAA,GAAGf,OAAOgB,GAAG,CAAC,gBAAgBC,SAAS,CAAC,oBAAoBV,KAAM;AACpE,aAAA,CAAA;AAEA,YAAA,MAAMW,gBAAmBP,GAAAA,OAAAA,CAAQQ,GAAG,CAAC,CAACC,MAAAA,GAAAA;AACpC,gBAAA,MAAM,EAAE5B,IAAI,EAAE,GAAGY,MAAM,GAAGgB,MAAAA;gBAC1B,OAAO;AACL,oBAAA,GAAGhB,IAAI;oBACPZ,IAAMA,EAAAA,IAAAA,GAAOD,iBAAiBC,IAAQ,CAAA,GAAA;AACxC,iBAAA;AACF,aAAA,CAAA;YAEA,OAAO;gBACLmB,OAASO,EAAAA,gBAAAA;AACTN,gBAAAA;AACF,aAAA;AACF,SAAA;AAEA,QAAA,MAAMS,SAAQvB,EAAW,EAAA;AACvB,YAAA,MAAMsB,SAAc,MAAMpB,MAAAA,CAAOM,EAAE,EAAEC,KAAAA,CAAM,oBAAoBc,OAAQ,CAAA;gBACrEC,KAAO,EAAA;AAAExB,oBAAAA;AAAG,iBAAA;gBACZgB,QAAU,EAAA;AAAC,oBAAA;AAAO,iBAAA;gBAClBC,MAAQ,EAAA;AAAC,oBAAA,QAAA;AAAU,oBAAA,MAAA;AAAQ,oBAAA;AAAU;AACvC,aAAA,CAAA;AAEA,YAAA,IAAI,CAACK,MAAQ,EAAA;gBACX,OAAO,IAAA;AACT;AAEA,YAAA,MAAM,EAAE5B,IAAI,EAAE,GAAGY,MAAM,GAAGgB,MAAAA;YAC1B,OAAO;AACL,gBAAA,GAAGhB,IAAI;gBACPZ,IAAMA,EAAAA,IAAAA,GAAOD,iBAAiBC,IAAQ,CAAA,GAAA;AACxC,aAAA;AACF,SAAA;AAEA+B,QAAAA,mBAAAA,CAAAA,CAAoBC,cAAoB,EAAA;AACtC,YAAA,OAAOxB,MAAOM,CAAAA,EAAE,EAAEC,KAAAA,CAAM,oBAAoBkB,UAAW,CAAA;gBACrDH,KAAO,EAAA;oBACLI,IAAM,EAAA;AACJC,wBAAAA,GAAAA,EAAKH,eAAeI,WAAW;AACjC;AACF;AACF,aAAA,CAAA;AACF;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"audit-logs.mjs","sources":["../../../../../../../ee/server/src/audit-logs/services/audit-logs.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\ninterface Event {\n action: string;\n date: Date;\n userId: string | number;\n payload: Record<string, unknown>;\n}\n\ninterface Log extends Omit<Event, 'userId'> {\n user: string | number;\n}\n\nconst getSanitizedUser = (user: any) => {\n let displayName = user.email;\n\n if (user.username) {\n displayName = user.username;\n } else if (user.firstname && user.lastname) {\n displayName = `${user.firstname} ${user.lastname}`;\n }\n\n return {\n id: user.id,\n email: user.email,\n displayName,\n };\n};\n\n/**\n * @description\n * Manages audit logs interaction with the database. Accessible via strapi.get('audit-logs')\n */\nconst createAuditLogsService = (strapi: Core.Strapi) => {\n return {\n async saveEvent(event: Event) {\n const { userId, ...rest } = event;\n\n const auditLog: Log = { ...rest, user: userId };\n\n // Save to database\n await strapi.db?.query('admin::audit-log').create({ data: auditLog });\n\n return this;\n },\n\n async findMany(query: unknown) {\n const { results, pagination } = await strapi.db?.query('admin::audit-log').findPage({\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n ...strapi.get('query-params').transform('admin::audit-log', query),\n });\n\n const sanitizedResults = results.map((result: any) => {\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n });\n\n return {\n results: sanitizedResults,\n pagination,\n };\n },\n\n async findOne(id: unknown) {\n const result: any = await strapi.db?.query('admin::audit-log').findOne({\n where: { id },\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n });\n\n if (!result) {\n return null;\n }\n\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n },\n\n deleteExpiredEvents(expirationDate: Date) {\n return strapi.db?.query('admin::audit-log').deleteMany({\n where: {\n date: {\n $lt: expirationDate.toISOString(),\n },\n },\n });\n },\n };\n};\n\nexport { createAuditLogsService };\n"],"names":["getSanitizedUser","user","displayName","email","username","firstname","lastname","id","createAuditLogsService","strapi","saveEvent","event","userId","rest","auditLog","db","query","create","data","findMany","results","pagination","findPage","populate","select","get","transform","sanitizedResults","map","result","findOne","where","deleteExpiredEvents","expirationDate","deleteMany","date","$lt","toISOString"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../../../../ee/server/src/controllers/authentication-utils/constants.ts"],"sourcesContent":["export const PROVIDER_REDIRECT_BASE = '/auth/login';\nexport const PROVIDER_REDIRECT_SUCCESS = `${PROVIDER_REDIRECT_BASE}/success`;\nexport const PROVIDER_REDIRECT_ERROR = `${PROVIDER_REDIRECT_BASE}/error`;\n\nexport default {\n PROVIDER_REDIRECT_BASE,\n PROVIDER_REDIRECT_SUCCESS,\n PROVIDER_REDIRECT_ERROR,\n};\n"],"names":["PROVIDER_REDIRECT_BASE","PROVIDER_REDIRECT_SUCCESS","PROVIDER_REDIRECT_ERROR"],"mappings":";;AAAO,MAAMA,yBAAyB;MACzBC,yBAA4B,GAAA,CAAC,EAAED,sBAAuB,CAAA,QAAQ;MAC9DE,uBAA0B,GAAA,CAAC,EAAEF,sBAAuB,CAAA,MAAM;;;;;;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../../../../../ee/server/src/controllers/authentication-utils/constants.ts"],"sourcesContent":["export const PROVIDER_REDIRECT_BASE = '/auth/login';\nexport const PROVIDER_REDIRECT_SUCCESS = `${PROVIDER_REDIRECT_BASE}/success`;\nexport const PROVIDER_REDIRECT_ERROR = `${PROVIDER_REDIRECT_BASE}/error`;\n\nexport default {\n PROVIDER_REDIRECT_BASE,\n PROVIDER_REDIRECT_SUCCESS,\n PROVIDER_REDIRECT_ERROR,\n};\n"],"names":["PROVIDER_REDIRECT_BASE","PROVIDER_REDIRECT_SUCCESS","PROVIDER_REDIRECT_ERROR"],"mappings":";;AAAO,MAAMA,yBAAyB;MACzBC,yBAA4B,GAAA,CAAA,EAAGD,sBAAuB,CAAA,QAAQ;MAC9DE,uBAA0B,GAAA,CAAA,EAAGF,sBAAuB,CAAA,MAAM;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","sources":["../../../../../../../ee/server/src/controllers/authentication-utils/constants.ts"],"sourcesContent":["export const PROVIDER_REDIRECT_BASE = '/auth/login';\nexport const PROVIDER_REDIRECT_SUCCESS = `${PROVIDER_REDIRECT_BASE}/success`;\nexport const PROVIDER_REDIRECT_ERROR = `${PROVIDER_REDIRECT_BASE}/error`;\n\nexport default {\n PROVIDER_REDIRECT_BASE,\n PROVIDER_REDIRECT_SUCCESS,\n PROVIDER_REDIRECT_ERROR,\n};\n"],"names":["PROVIDER_REDIRECT_BASE","PROVIDER_REDIRECT_SUCCESS","PROVIDER_REDIRECT_ERROR"],"mappings":"AAAO,MAAMA,yBAAyB;MACzBC,yBAA4B,GAAA,CAAC,EAAED,sBAAuB,CAAA,QAAQ;MAC9DE,uBAA0B,GAAA,CAAC,EAAEF,sBAAuB,CAAA,MAAM;;;;"}
1
+ {"version":3,"file":"constants.mjs","sources":["../../../../../../../ee/server/src/controllers/authentication-utils/constants.ts"],"sourcesContent":["export const PROVIDER_REDIRECT_BASE = '/auth/login';\nexport const PROVIDER_REDIRECT_SUCCESS = `${PROVIDER_REDIRECT_BASE}/success`;\nexport const PROVIDER_REDIRECT_ERROR = `${PROVIDER_REDIRECT_BASE}/error`;\n\nexport default {\n PROVIDER_REDIRECT_BASE,\n PROVIDER_REDIRECT_SUCCESS,\n PROVIDER_REDIRECT_ERROR,\n};\n"],"names":["PROVIDER_REDIRECT_BASE","PROVIDER_REDIRECT_SUCCESS","PROVIDER_REDIRECT_ERROR"],"mappings":"AAAO,MAAMA,yBAAyB;MACzBC,yBAA4B,GAAA,CAAA,EAAGD,sBAAuB,CAAA,QAAQ;MAC9DE,uBAA0B,GAAA,CAAA,EAAGF,sBAAuB,CAAA,MAAM;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../../../ee/server/src/controllers/authentication-utils/utils.ts"],"sourcesContent":["import { mapValues } from 'lodash/fp';\nimport { PROVIDER_REDIRECT_ERROR, PROVIDER_REDIRECT_SUCCESS } from './constants';\n\nconst PROVIDER_URLS_MAP = {\n success: PROVIDER_REDIRECT_SUCCESS,\n error: PROVIDER_REDIRECT_ERROR,\n};\n\nexport const getAdminStore = async () => strapi.store({ type: 'core', name: 'admin' });\n\nexport const getPrefixedRedirectUrls = () => {\n const { url: adminUrl } = strapi.config.get('admin') as any;\n const prefixUrl = (url: string) => `${adminUrl || '/admin'}${url}`;\n\n return mapValues(prefixUrl, PROVIDER_URLS_MAP);\n};\n\nexport default {\n getAdminStore,\n getPrefixedRedirectUrls,\n};\n"],"names":["PROVIDER_URLS_MAP","success","PROVIDER_REDIRECT_SUCCESS","error","PROVIDER_REDIRECT_ERROR","getAdminStore","strapi","store","type","name","getPrefixedRedirectUrls","url","adminUrl","config","get","prefixUrl","mapValues"],"mappings":";;;;;;;AAGA,MAAMA,iBAAoB,GAAA;IACxBC,OAASC,EAAAA,mCAAAA;IACTC,KAAOC,EAAAA;AACT,CAAA;AAEaC,MAAAA,aAAAA,GAAgB,UAAYC,MAAAA,CAAOC,KAAK,CAAC;QAAEC,IAAM,EAAA,MAAA;QAAQC,IAAM,EAAA;KAAW;MAE1EC,uBAA0B,GAAA,IAAA;IACrC,MAAM,EAAEC,KAAKC,QAAQ,EAAE,GAAGN,MAAOO,CAAAA,MAAM,CAACC,GAAG,CAAC,OAAA,CAAA;IAC5C,MAAMC,SAAAA,GAAY,CAACJ,GAAgB,GAAA,CAAC,EAAEC,QAAY,IAAA,QAAA,CAAS,EAAED,GAAAA,CAAI,CAAC;AAElE,IAAA,OAAOK,aAAUD,SAAWf,EAAAA,iBAAAA,CAAAA;AAC9B;AAEA,YAAe;AACbK,IAAAA,aAAAA;AACAK,IAAAA;AACF,CAAE;;;;;;"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../../../ee/server/src/controllers/authentication-utils/utils.ts"],"sourcesContent":["import { mapValues } from 'lodash/fp';\nimport { PROVIDER_REDIRECT_ERROR, PROVIDER_REDIRECT_SUCCESS } from './constants';\n\nconst PROVIDER_URLS_MAP = {\n success: PROVIDER_REDIRECT_SUCCESS,\n error: PROVIDER_REDIRECT_ERROR,\n};\n\nexport const getAdminStore = async () => strapi.store({ type: 'core', name: 'admin' });\n\nexport const getPrefixedRedirectUrls = () => {\n const { url: adminUrl } = strapi.config.get('admin') as any;\n const prefixUrl = (url: string) => `${adminUrl || '/admin'}${url}`;\n\n return mapValues(prefixUrl, PROVIDER_URLS_MAP);\n};\n\nexport default {\n getAdminStore,\n getPrefixedRedirectUrls,\n};\n"],"names":["PROVIDER_URLS_MAP","success","PROVIDER_REDIRECT_SUCCESS","error","PROVIDER_REDIRECT_ERROR","getAdminStore","strapi","store","type","name","getPrefixedRedirectUrls","url","adminUrl","config","get","prefixUrl","mapValues"],"mappings":";;;;;;;AAGA,MAAMA,iBAAoB,GAAA;IACxBC,OAASC,EAAAA,mCAAAA;IACTC,KAAOC,EAAAA;AACT,CAAA;AAEaC,MAAAA,aAAAA,GAAgB,UAAYC,MAAAA,CAAOC,KAAK,CAAC;QAAEC,IAAM,EAAA,MAAA;QAAQC,IAAM,EAAA;KAAW;MAE1EC,uBAA0B,GAAA,IAAA;IACrC,MAAM,EAAEC,KAAKC,QAAQ,EAAE,GAAGN,MAAOO,CAAAA,MAAM,CAACC,GAAG,CAAC,OAAA,CAAA;AAC5C,IAAA,MAAMC,YAAY,CAACJ,GAAAA,GAAgB,CAAGC,EAAAA,QAAAA,IAAY,WAAWD,GAAK,CAAA,CAAA;AAElE,IAAA,OAAOK,aAAUD,SAAWf,EAAAA,iBAAAA,CAAAA;AAC9B;AAEA,YAAe;AACbK,IAAAA,aAAAA;AACAK,IAAAA;AACF,CAAE;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../../../../../../../ee/server/src/controllers/authentication-utils/utils.ts"],"sourcesContent":["import { mapValues } from 'lodash/fp';\nimport { PROVIDER_REDIRECT_ERROR, PROVIDER_REDIRECT_SUCCESS } from './constants';\n\nconst PROVIDER_URLS_MAP = {\n success: PROVIDER_REDIRECT_SUCCESS,\n error: PROVIDER_REDIRECT_ERROR,\n};\n\nexport const getAdminStore = async () => strapi.store({ type: 'core', name: 'admin' });\n\nexport const getPrefixedRedirectUrls = () => {\n const { url: adminUrl } = strapi.config.get('admin') as any;\n const prefixUrl = (url: string) => `${adminUrl || '/admin'}${url}`;\n\n return mapValues(prefixUrl, PROVIDER_URLS_MAP);\n};\n\nexport default {\n getAdminStore,\n getPrefixedRedirectUrls,\n};\n"],"names":["PROVIDER_URLS_MAP","success","PROVIDER_REDIRECT_SUCCESS","error","PROVIDER_REDIRECT_ERROR","getAdminStore","strapi","store","type","name","getPrefixedRedirectUrls","url","adminUrl","config","get","prefixUrl","mapValues"],"mappings":";;;AAGA,MAAMA,iBAAoB,GAAA;IACxBC,OAASC,EAAAA,yBAAAA;IACTC,KAAOC,EAAAA;AACT,CAAA;AAEaC,MAAAA,aAAAA,GAAgB,UAAYC,MAAAA,CAAOC,KAAK,CAAC;QAAEC,IAAM,EAAA,MAAA;QAAQC,IAAM,EAAA;KAAW;MAE1EC,uBAA0B,GAAA,IAAA;IACrC,MAAM,EAAEC,KAAKC,QAAQ,EAAE,GAAGN,MAAOO,CAAAA,MAAM,CAACC,GAAG,CAAC,OAAA,CAAA;IAC5C,MAAMC,SAAAA,GAAY,CAACJ,GAAgB,GAAA,CAAC,EAAEC,QAAY,IAAA,QAAA,CAAS,EAAED,GAAAA,CAAI,CAAC;AAElE,IAAA,OAAOK,UAAUD,SAAWf,EAAAA,iBAAAA,CAAAA;AAC9B;AAEA,YAAe;AACbK,IAAAA,aAAAA;AACAK,IAAAA;AACF,CAAE;;;;"}
1
+ {"version":3,"file":"utils.mjs","sources":["../../../../../../../ee/server/src/controllers/authentication-utils/utils.ts"],"sourcesContent":["import { mapValues } from 'lodash/fp';\nimport { PROVIDER_REDIRECT_ERROR, PROVIDER_REDIRECT_SUCCESS } from './constants';\n\nconst PROVIDER_URLS_MAP = {\n success: PROVIDER_REDIRECT_SUCCESS,\n error: PROVIDER_REDIRECT_ERROR,\n};\n\nexport const getAdminStore = async () => strapi.store({ type: 'core', name: 'admin' });\n\nexport const getPrefixedRedirectUrls = () => {\n const { url: adminUrl } = strapi.config.get('admin') as any;\n const prefixUrl = (url: string) => `${adminUrl || '/admin'}${url}`;\n\n return mapValues(prefixUrl, PROVIDER_URLS_MAP);\n};\n\nexport default {\n getAdminStore,\n getPrefixedRedirectUrls,\n};\n"],"names":["PROVIDER_URLS_MAP","success","PROVIDER_REDIRECT_SUCCESS","error","PROVIDER_REDIRECT_ERROR","getAdminStore","strapi","store","type","name","getPrefixedRedirectUrls","url","adminUrl","config","get","prefixUrl","mapValues"],"mappings":";;;AAGA,MAAMA,iBAAoB,GAAA;IACxBC,OAASC,EAAAA,yBAAAA;IACTC,KAAOC,EAAAA;AACT,CAAA;AAEaC,MAAAA,aAAAA,GAAgB,UAAYC,MAAAA,CAAOC,KAAK,CAAC;QAAEC,IAAM,EAAA,MAAA;QAAQC,IAAM,EAAA;KAAW;MAE1EC,uBAA0B,GAAA,IAAA;IACrC,MAAM,EAAEC,KAAKC,QAAQ,EAAE,GAAGN,MAAOO,CAAAA,MAAM,CAACC,GAAG,CAAC,OAAA,CAAA;AAC5C,IAAA,MAAMC,YAAY,CAACJ,GAAAA,GAAgB,CAAGC,EAAAA,QAAAA,IAAY,WAAWD,GAAK,CAAA,CAAA;AAElE,IAAA,OAAOK,UAAUD,SAAWf,EAAAA,iBAAAA,CAAAA;AAC9B;AAEA,YAAe;AACbK,IAAAA,aAAAA;AACAK,IAAAA;AACF,CAAE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authentication.js","sources":["../../../../../../ee/server/src/controllers/authentication.ts"],"sourcesContent":["import type { Context, Next } from 'koa';\n\nimport { pick } from 'lodash/fp';\nimport compose from 'koa-compose';\nimport { errors } from '@strapi/utils';\nimport { validateProviderOptionsUpdate } from '../validation/authentication';\nimport { middlewares, utils } from './authentication-utils';\n\nconst toProviderDTO = pick(['uid', 'displayName', 'icon']);\nconst toProviderLoginOptionsDTO = pick(['autoRegister', 'defaultRole', 'ssoLockedRoles']);\n\nconst { ValidationError } = errors;\n\nconst providerAuthenticationFlow = compose([\n middlewares.authenticate,\n middlewares.redirectWithAuth,\n]);\n\nexport default {\n async getProviders(ctx: Context) {\n const { providerRegistry } = strapi.service('admin::passport');\n\n ctx.body = providerRegistry.getAll().map(toProviderDTO);\n },\n\n async getProviderLoginOptions(ctx: Context) {\n const adminStore = await utils.getAdminStore();\n const { providers: providersOptions } = (await adminStore.get({ key: 'auth' })) as any;\n\n ctx.body = {\n data: toProviderLoginOptionsDTO(providersOptions),\n };\n },\n\n async updateProviderLoginOptions(ctx: Context) {\n const {\n request: { body },\n } = ctx;\n\n await validateProviderOptionsUpdate(body);\n\n const adminStore = await utils.getAdminStore();\n const currentAuthOptions = (await adminStore.get({ key: 'auth' })) as any;\n const newAuthOptions = { ...currentAuthOptions, providers: body };\n await adminStore.set({ key: 'auth', value: newAuthOptions });\n\n strapi.telemetry.send('didUpdateSSOSettings');\n\n ctx.body = {\n data: toProviderLoginOptionsDTO(newAuthOptions.providers),\n };\n },\n\n providerLogin(ctx: Context, next: Next) {\n const {\n params: { provider: providerName },\n } = ctx;\n\n const { providerRegistry } = strapi.service('admin::passport');\n\n if (!providerRegistry.has(providerName)) {\n throw new ValidationError(`Invalid provider supplied: ${providerName}`);\n }\n\n return providerAuthenticationFlow(ctx, next);\n },\n};\n"],"names":["toProviderDTO","pick","toProviderLoginOptionsDTO","ValidationError","errors","providerAuthenticationFlow","compose","middlewares","authenticate","redirectWithAuth","getProviders","ctx","providerRegistry","strapi","service","body","getAll","map","getProviderLoginOptions","adminStore","utils","getAdminStore","providers","providersOptions","get","key","data","updateProviderLoginOptions","request","validateProviderOptionsUpdate","currentAuthOptions","newAuthOptions","set","value","telemetry","send","providerLogin","next","params","provider","providerName","has"],"mappings":";;;;;;;;;AAQA,MAAMA,gBAAgBC,OAAK,CAAA;AAAC,IAAA,KAAA;AAAO,IAAA,aAAA;AAAe,IAAA;AAAO,CAAA,CAAA;AACzD,MAAMC,4BAA4BD,OAAK,CAAA;AAAC,IAAA,cAAA;AAAgB,IAAA,aAAA;AAAe,IAAA;AAAiB,CAAA,CAAA;AAExF,MAAM,EAAEE,eAAe,EAAE,GAAGC,cAAAA;AAE5B,MAAMC,6BAA6BC,OAAQ,CAAA;AACzCC,IAAAA,mBAAAA,CAAYC,YAAY;AACxBD,IAAAA,mBAAAA,CAAYE;AACb,CAAA,CAAA;AAED,qBAAe;AACb,IAAA,MAAMC,cAAaC,GAAY,EAAA;AAC7B,QAAA,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;AAE5CH,QAAAA,GAAAA,CAAII,IAAI,GAAGH,gBAAAA,CAAiBI,MAAM,EAAA,CAAGC,GAAG,CAACjB,aAAAA,CAAAA;AAC3C,KAAA;AAEA,IAAA,MAAMkB,yBAAwBP,GAAY,EAAA;QACxC,MAAMQ,UAAAA,GAAa,MAAMC,aAAAA,CAAMC,aAAa,EAAA;QAC5C,MAAM,EAAEC,WAAWC,gBAAgB,EAAE,GAAI,MAAMJ,UAAAA,CAAWK,GAAG,CAAC;YAAEC,GAAK,EAAA;AAAO,SAAA,CAAA;AAE5Ed,QAAAA,GAAAA,CAAII,IAAI,GAAG;AACTW,YAAAA,IAAAA,EAAMxB,yBAA0BqB,CAAAA,gBAAAA;AAClC,SAAA;AACF,KAAA;AAEA,IAAA,MAAMI,4BAA2BhB,GAAY,EAAA;AAC3C,QAAA,MAAM,EACJiB,OAAS,EAAA,EAAEb,IAAI,EAAE,EAClB,GAAGJ,GAAAA;AAEJ,QAAA,MAAMkB,8CAA8Bd,CAAAA,IAAAA,CAAAA;QAEpC,MAAMI,UAAAA,GAAa,MAAMC,aAAAA,CAAMC,aAAa,EAAA;AAC5C,QAAA,MAAMS,kBAAsB,GAAA,MAAMX,UAAWK,CAAAA,GAAG,CAAC;YAAEC,GAAK,EAAA;AAAO,SAAA,CAAA;AAC/D,QAAA,MAAMM,cAAiB,GAAA;AAAE,YAAA,GAAGD,kBAAkB;YAAER,SAAWP,EAAAA;AAAK,SAAA;QAChE,MAAMI,UAAAA,CAAWa,GAAG,CAAC;YAAEP,GAAK,EAAA,MAAA;YAAQQ,KAAOF,EAAAA;AAAe,SAAA,CAAA;QAE1DlB,MAAOqB,CAAAA,SAAS,CAACC,IAAI,CAAC,sBAAA,CAAA;AAEtBxB,QAAAA,GAAAA,CAAII,IAAI,GAAG;YACTW,IAAMxB,EAAAA,yBAAAA,CAA0B6B,eAAeT,SAAS;AAC1D,SAAA;AACF,KAAA;IAEAc,aAAczB,CAAAA,CAAAA,GAAY,EAAE0B,IAAU,EAAA;AACpC,QAAA,MAAM,EACJC,MAAQ,EAAA,EAAEC,UAAUC,YAAY,EAAE,EACnC,GAAG7B,GAAAA;AAEJ,QAAA,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;AAE5C,QAAA,IAAI,CAACF,gBAAAA,CAAiB6B,GAAG,CAACD,YAAe,CAAA,EAAA;AACvC,YAAA,MAAM,IAAIrC,eAAgB,CAAA,CAAC,2BAA2B,EAAEqC,aAAa,CAAC,CAAA;AACxE;AAEA,QAAA,OAAOnC,2BAA2BM,GAAK0B,EAAAA,IAAAA,CAAAA;AACzC;AACF,CAAE;;;;"}
1
+ {"version":3,"file":"authentication.js","sources":["../../../../../../ee/server/src/controllers/authentication.ts"],"sourcesContent":["import type { Context, Next } from 'koa';\n\nimport { pick } from 'lodash/fp';\nimport compose from 'koa-compose';\nimport { errors } from '@strapi/utils';\nimport { validateProviderOptionsUpdate } from '../validation/authentication';\nimport { middlewares, utils } from './authentication-utils';\n\nconst toProviderDTO = pick(['uid', 'displayName', 'icon']);\nconst toProviderLoginOptionsDTO = pick(['autoRegister', 'defaultRole', 'ssoLockedRoles']);\n\nconst { ValidationError } = errors;\n\nconst providerAuthenticationFlow = compose([\n middlewares.authenticate,\n middlewares.redirectWithAuth,\n]);\n\nexport default {\n async getProviders(ctx: Context) {\n const { providerRegistry } = strapi.service('admin::passport');\n\n ctx.body = providerRegistry.getAll().map(toProviderDTO);\n },\n\n async getProviderLoginOptions(ctx: Context) {\n const adminStore = await utils.getAdminStore();\n const { providers: providersOptions } = (await adminStore.get({ key: 'auth' })) as any;\n\n ctx.body = {\n data: toProviderLoginOptionsDTO(providersOptions),\n };\n },\n\n async updateProviderLoginOptions(ctx: Context) {\n const {\n request: { body },\n } = ctx;\n\n await validateProviderOptionsUpdate(body);\n\n const adminStore = await utils.getAdminStore();\n const currentAuthOptions = (await adminStore.get({ key: 'auth' })) as any;\n const newAuthOptions = { ...currentAuthOptions, providers: body };\n await adminStore.set({ key: 'auth', value: newAuthOptions });\n\n strapi.telemetry.send('didUpdateSSOSettings');\n\n ctx.body = {\n data: toProviderLoginOptionsDTO(newAuthOptions.providers),\n };\n },\n\n providerLogin(ctx: Context, next: Next) {\n const {\n params: { provider: providerName },\n } = ctx;\n\n const { providerRegistry } = strapi.service('admin::passport');\n\n if (!providerRegistry.has(providerName)) {\n throw new ValidationError(`Invalid provider supplied: ${providerName}`);\n }\n\n return providerAuthenticationFlow(ctx, next);\n },\n};\n"],"names":["toProviderDTO","pick","toProviderLoginOptionsDTO","ValidationError","errors","providerAuthenticationFlow","compose","middlewares","authenticate","redirectWithAuth","getProviders","ctx","providerRegistry","strapi","service","body","getAll","map","getProviderLoginOptions","adminStore","utils","getAdminStore","providers","providersOptions","get","key","data","updateProviderLoginOptions","request","validateProviderOptionsUpdate","currentAuthOptions","newAuthOptions","set","value","telemetry","send","providerLogin","next","params","provider","providerName","has"],"mappings":";;;;;;;;;AAQA,MAAMA,gBAAgBC,OAAK,CAAA;AAAC,IAAA,KAAA;AAAO,IAAA,aAAA;AAAe,IAAA;AAAO,CAAA,CAAA;AACzD,MAAMC,4BAA4BD,OAAK,CAAA;AAAC,IAAA,cAAA;AAAgB,IAAA,aAAA;AAAe,IAAA;AAAiB,CAAA,CAAA;AAExF,MAAM,EAAEE,eAAe,EAAE,GAAGC,cAAAA;AAE5B,MAAMC,6BAA6BC,OAAQ,CAAA;AACzCC,IAAAA,mBAAAA,CAAYC,YAAY;AACxBD,IAAAA,mBAAAA,CAAYE;AACb,CAAA,CAAA;AAED,qBAAe;AACb,IAAA,MAAMC,cAAaC,GAAY,EAAA;AAC7B,QAAA,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;AAE5CH,QAAAA,GAAAA,CAAII,IAAI,GAAGH,gBAAAA,CAAiBI,MAAM,EAAA,CAAGC,GAAG,CAACjB,aAAAA,CAAAA;AAC3C,KAAA;AAEA,IAAA,MAAMkB,yBAAwBP,GAAY,EAAA;QACxC,MAAMQ,UAAAA,GAAa,MAAMC,aAAAA,CAAMC,aAAa,EAAA;QAC5C,MAAM,EAAEC,WAAWC,gBAAgB,EAAE,GAAI,MAAMJ,UAAAA,CAAWK,GAAG,CAAC;YAAEC,GAAK,EAAA;AAAO,SAAA,CAAA;AAE5Ed,QAAAA,GAAAA,CAAII,IAAI,GAAG;AACTW,YAAAA,IAAAA,EAAMxB,yBAA0BqB,CAAAA,gBAAAA;AAClC,SAAA;AACF,KAAA;AAEA,IAAA,MAAMI,4BAA2BhB,GAAY,EAAA;AAC3C,QAAA,MAAM,EACJiB,OAAS,EAAA,EAAEb,IAAI,EAAE,EAClB,GAAGJ,GAAAA;AAEJ,QAAA,MAAMkB,8CAA8Bd,CAAAA,IAAAA,CAAAA;QAEpC,MAAMI,UAAAA,GAAa,MAAMC,aAAAA,CAAMC,aAAa,EAAA;AAC5C,QAAA,MAAMS,kBAAsB,GAAA,MAAMX,UAAWK,CAAAA,GAAG,CAAC;YAAEC,GAAK,EAAA;AAAO,SAAA,CAAA;AAC/D,QAAA,MAAMM,cAAiB,GAAA;AAAE,YAAA,GAAGD,kBAAkB;YAAER,SAAWP,EAAAA;AAAK,SAAA;QAChE,MAAMI,UAAAA,CAAWa,GAAG,CAAC;YAAEP,GAAK,EAAA,MAAA;YAAQQ,KAAOF,EAAAA;AAAe,SAAA,CAAA;QAE1DlB,MAAOqB,CAAAA,SAAS,CAACC,IAAI,CAAC,sBAAA,CAAA;AAEtBxB,QAAAA,GAAAA,CAAII,IAAI,GAAG;YACTW,IAAMxB,EAAAA,yBAAAA,CAA0B6B,eAAeT,SAAS;AAC1D,SAAA;AACF,KAAA;IAEAc,aAAczB,CAAAA,CAAAA,GAAY,EAAE0B,IAAU,EAAA;AACpC,QAAA,MAAM,EACJC,MAAQ,EAAA,EAAEC,UAAUC,YAAY,EAAE,EACnC,GAAG7B,GAAAA;AAEJ,QAAA,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;AAE5C,QAAA,IAAI,CAACF,gBAAAA,CAAiB6B,GAAG,CAACD,YAAe,CAAA,EAAA;AACvC,YAAA,MAAM,IAAIrC,eAAAA,CAAgB,CAAC,2BAA2B,EAAEqC,YAAc,CAAA,CAAA,CAAA;AACxE;AAEA,QAAA,OAAOnC,2BAA2BM,GAAK0B,EAAAA,IAAAA,CAAAA;AACzC;AACF,CAAE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authentication.mjs","sources":["../../../../../../ee/server/src/controllers/authentication.ts"],"sourcesContent":["import type { Context, Next } from 'koa';\n\nimport { pick } from 'lodash/fp';\nimport compose from 'koa-compose';\nimport { errors } from '@strapi/utils';\nimport { validateProviderOptionsUpdate } from '../validation/authentication';\nimport { middlewares, utils } from './authentication-utils';\n\nconst toProviderDTO = pick(['uid', 'displayName', 'icon']);\nconst toProviderLoginOptionsDTO = pick(['autoRegister', 'defaultRole', 'ssoLockedRoles']);\n\nconst { ValidationError } = errors;\n\nconst providerAuthenticationFlow = compose([\n middlewares.authenticate,\n middlewares.redirectWithAuth,\n]);\n\nexport default {\n async getProviders(ctx: Context) {\n const { providerRegistry } = strapi.service('admin::passport');\n\n ctx.body = providerRegistry.getAll().map(toProviderDTO);\n },\n\n async getProviderLoginOptions(ctx: Context) {\n const adminStore = await utils.getAdminStore();\n const { providers: providersOptions } = (await adminStore.get({ key: 'auth' })) as any;\n\n ctx.body = {\n data: toProviderLoginOptionsDTO(providersOptions),\n };\n },\n\n async updateProviderLoginOptions(ctx: Context) {\n const {\n request: { body },\n } = ctx;\n\n await validateProviderOptionsUpdate(body);\n\n const adminStore = await utils.getAdminStore();\n const currentAuthOptions = (await adminStore.get({ key: 'auth' })) as any;\n const newAuthOptions = { ...currentAuthOptions, providers: body };\n await adminStore.set({ key: 'auth', value: newAuthOptions });\n\n strapi.telemetry.send('didUpdateSSOSettings');\n\n ctx.body = {\n data: toProviderLoginOptionsDTO(newAuthOptions.providers),\n };\n },\n\n providerLogin(ctx: Context, next: Next) {\n const {\n params: { provider: providerName },\n } = ctx;\n\n const { providerRegistry } = strapi.service('admin::passport');\n\n if (!providerRegistry.has(providerName)) {\n throw new ValidationError(`Invalid provider supplied: ${providerName}`);\n }\n\n return providerAuthenticationFlow(ctx, next);\n },\n};\n"],"names":["toProviderDTO","pick","toProviderLoginOptionsDTO","ValidationError","errors","providerAuthenticationFlow","compose","middlewares","authenticate","redirectWithAuth","getProviders","ctx","providerRegistry","strapi","service","body","getAll","map","getProviderLoginOptions","adminStore","utils","getAdminStore","providers","providersOptions","get","key","data","updateProviderLoginOptions","request","validateProviderOptionsUpdate","currentAuthOptions","newAuthOptions","set","value","telemetry","send","providerLogin","next","params","provider","providerName","has"],"mappings":";;;;;;;AAQA,MAAMA,gBAAgBC,IAAK,CAAA;AAAC,IAAA,KAAA;AAAO,IAAA,aAAA;AAAe,IAAA;AAAO,CAAA,CAAA;AACzD,MAAMC,4BAA4BD,IAAK,CAAA;AAAC,IAAA,cAAA;AAAgB,IAAA,aAAA;AAAe,IAAA;AAAiB,CAAA,CAAA;AAExF,MAAM,EAAEE,eAAe,EAAE,GAAGC,MAAAA;AAE5B,MAAMC,6BAA6BC,OAAQ,CAAA;AACzCC,IAAAA,WAAAA,CAAYC,YAAY;AACxBD,IAAAA,WAAAA,CAAYE;AACb,CAAA,CAAA;AAED,qBAAe;AACb,IAAA,MAAMC,cAAaC,GAAY,EAAA;AAC7B,QAAA,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;AAE5CH,QAAAA,GAAAA,CAAII,IAAI,GAAGH,gBAAAA,CAAiBI,MAAM,EAAA,CAAGC,GAAG,CAACjB,aAAAA,CAAAA;AAC3C,KAAA;AAEA,IAAA,MAAMkB,yBAAwBP,GAAY,EAAA;QACxC,MAAMQ,UAAAA,GAAa,MAAMC,KAAAA,CAAMC,aAAa,EAAA;QAC5C,MAAM,EAAEC,WAAWC,gBAAgB,EAAE,GAAI,MAAMJ,UAAAA,CAAWK,GAAG,CAAC;YAAEC,GAAK,EAAA;AAAO,SAAA,CAAA;AAE5Ed,QAAAA,GAAAA,CAAII,IAAI,GAAG;AACTW,YAAAA,IAAAA,EAAMxB,yBAA0BqB,CAAAA,gBAAAA;AAClC,SAAA;AACF,KAAA;AAEA,IAAA,MAAMI,4BAA2BhB,GAAY,EAAA;AAC3C,QAAA,MAAM,EACJiB,OAAS,EAAA,EAAEb,IAAI,EAAE,EAClB,GAAGJ,GAAAA;AAEJ,QAAA,MAAMkB,6BAA8Bd,CAAAA,IAAAA,CAAAA;QAEpC,MAAMI,UAAAA,GAAa,MAAMC,KAAAA,CAAMC,aAAa,EAAA;AAC5C,QAAA,MAAMS,kBAAsB,GAAA,MAAMX,UAAWK,CAAAA,GAAG,CAAC;YAAEC,GAAK,EAAA;AAAO,SAAA,CAAA;AAC/D,QAAA,MAAMM,cAAiB,GAAA;AAAE,YAAA,GAAGD,kBAAkB;YAAER,SAAWP,EAAAA;AAAK,SAAA;QAChE,MAAMI,UAAAA,CAAWa,GAAG,CAAC;YAAEP,GAAK,EAAA,MAAA;YAAQQ,KAAOF,EAAAA;AAAe,SAAA,CAAA;QAE1DlB,MAAOqB,CAAAA,SAAS,CAACC,IAAI,CAAC,sBAAA,CAAA;AAEtBxB,QAAAA,GAAAA,CAAII,IAAI,GAAG;YACTW,IAAMxB,EAAAA,yBAAAA,CAA0B6B,eAAeT,SAAS;AAC1D,SAAA;AACF,KAAA;IAEAc,aAAczB,CAAAA,CAAAA,GAAY,EAAE0B,IAAU,EAAA;AACpC,QAAA,MAAM,EACJC,MAAQ,EAAA,EAAEC,UAAUC,YAAY,EAAE,EACnC,GAAG7B,GAAAA;AAEJ,QAAA,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;AAE5C,QAAA,IAAI,CAACF,gBAAAA,CAAiB6B,GAAG,CAACD,YAAe,CAAA,EAAA;AACvC,YAAA,MAAM,IAAIrC,eAAgB,CAAA,CAAC,2BAA2B,EAAEqC,aAAa,CAAC,CAAA;AACxE;AAEA,QAAA,OAAOnC,2BAA2BM,GAAK0B,EAAAA,IAAAA,CAAAA;AACzC;AACF,CAAE;;;;"}
1
+ {"version":3,"file":"authentication.mjs","sources":["../../../../../../ee/server/src/controllers/authentication.ts"],"sourcesContent":["import type { Context, Next } from 'koa';\n\nimport { pick } from 'lodash/fp';\nimport compose from 'koa-compose';\nimport { errors } from '@strapi/utils';\nimport { validateProviderOptionsUpdate } from '../validation/authentication';\nimport { middlewares, utils } from './authentication-utils';\n\nconst toProviderDTO = pick(['uid', 'displayName', 'icon']);\nconst toProviderLoginOptionsDTO = pick(['autoRegister', 'defaultRole', 'ssoLockedRoles']);\n\nconst { ValidationError } = errors;\n\nconst providerAuthenticationFlow = compose([\n middlewares.authenticate,\n middlewares.redirectWithAuth,\n]);\n\nexport default {\n async getProviders(ctx: Context) {\n const { providerRegistry } = strapi.service('admin::passport');\n\n ctx.body = providerRegistry.getAll().map(toProviderDTO);\n },\n\n async getProviderLoginOptions(ctx: Context) {\n const adminStore = await utils.getAdminStore();\n const { providers: providersOptions } = (await adminStore.get({ key: 'auth' })) as any;\n\n ctx.body = {\n data: toProviderLoginOptionsDTO(providersOptions),\n };\n },\n\n async updateProviderLoginOptions(ctx: Context) {\n const {\n request: { body },\n } = ctx;\n\n await validateProviderOptionsUpdate(body);\n\n const adminStore = await utils.getAdminStore();\n const currentAuthOptions = (await adminStore.get({ key: 'auth' })) as any;\n const newAuthOptions = { ...currentAuthOptions, providers: body };\n await adminStore.set({ key: 'auth', value: newAuthOptions });\n\n strapi.telemetry.send('didUpdateSSOSettings');\n\n ctx.body = {\n data: toProviderLoginOptionsDTO(newAuthOptions.providers),\n };\n },\n\n providerLogin(ctx: Context, next: Next) {\n const {\n params: { provider: providerName },\n } = ctx;\n\n const { providerRegistry } = strapi.service('admin::passport');\n\n if (!providerRegistry.has(providerName)) {\n throw new ValidationError(`Invalid provider supplied: ${providerName}`);\n }\n\n return providerAuthenticationFlow(ctx, next);\n },\n};\n"],"names":["toProviderDTO","pick","toProviderLoginOptionsDTO","ValidationError","errors","providerAuthenticationFlow","compose","middlewares","authenticate","redirectWithAuth","getProviders","ctx","providerRegistry","strapi","service","body","getAll","map","getProviderLoginOptions","adminStore","utils","getAdminStore","providers","providersOptions","get","key","data","updateProviderLoginOptions","request","validateProviderOptionsUpdate","currentAuthOptions","newAuthOptions","set","value","telemetry","send","providerLogin","next","params","provider","providerName","has"],"mappings":";;;;;;;AAQA,MAAMA,gBAAgBC,IAAK,CAAA;AAAC,IAAA,KAAA;AAAO,IAAA,aAAA;AAAe,IAAA;AAAO,CAAA,CAAA;AACzD,MAAMC,4BAA4BD,IAAK,CAAA;AAAC,IAAA,cAAA;AAAgB,IAAA,aAAA;AAAe,IAAA;AAAiB,CAAA,CAAA;AAExF,MAAM,EAAEE,eAAe,EAAE,GAAGC,MAAAA;AAE5B,MAAMC,6BAA6BC,OAAQ,CAAA;AACzCC,IAAAA,WAAAA,CAAYC,YAAY;AACxBD,IAAAA,WAAAA,CAAYE;AACb,CAAA,CAAA;AAED,qBAAe;AACb,IAAA,MAAMC,cAAaC,GAAY,EAAA;AAC7B,QAAA,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;AAE5CH,QAAAA,GAAAA,CAAII,IAAI,GAAGH,gBAAAA,CAAiBI,MAAM,EAAA,CAAGC,GAAG,CAACjB,aAAAA,CAAAA;AAC3C,KAAA;AAEA,IAAA,MAAMkB,yBAAwBP,GAAY,EAAA;QACxC,MAAMQ,UAAAA,GAAa,MAAMC,KAAAA,CAAMC,aAAa,EAAA;QAC5C,MAAM,EAAEC,WAAWC,gBAAgB,EAAE,GAAI,MAAMJ,UAAAA,CAAWK,GAAG,CAAC;YAAEC,GAAK,EAAA;AAAO,SAAA,CAAA;AAE5Ed,QAAAA,GAAAA,CAAII,IAAI,GAAG;AACTW,YAAAA,IAAAA,EAAMxB,yBAA0BqB,CAAAA,gBAAAA;AAClC,SAAA;AACF,KAAA;AAEA,IAAA,MAAMI,4BAA2BhB,GAAY,EAAA;AAC3C,QAAA,MAAM,EACJiB,OAAS,EAAA,EAAEb,IAAI,EAAE,EAClB,GAAGJ,GAAAA;AAEJ,QAAA,MAAMkB,6BAA8Bd,CAAAA,IAAAA,CAAAA;QAEpC,MAAMI,UAAAA,GAAa,MAAMC,KAAAA,CAAMC,aAAa,EAAA;AAC5C,QAAA,MAAMS,kBAAsB,GAAA,MAAMX,UAAWK,CAAAA,GAAG,CAAC;YAAEC,GAAK,EAAA;AAAO,SAAA,CAAA;AAC/D,QAAA,MAAMM,cAAiB,GAAA;AAAE,YAAA,GAAGD,kBAAkB;YAAER,SAAWP,EAAAA;AAAK,SAAA;QAChE,MAAMI,UAAAA,CAAWa,GAAG,CAAC;YAAEP,GAAK,EAAA,MAAA;YAAQQ,KAAOF,EAAAA;AAAe,SAAA,CAAA;QAE1DlB,MAAOqB,CAAAA,SAAS,CAACC,IAAI,CAAC,sBAAA,CAAA;AAEtBxB,QAAAA,GAAAA,CAAII,IAAI,GAAG;YACTW,IAAMxB,EAAAA,yBAAAA,CAA0B6B,eAAeT,SAAS;AAC1D,SAAA;AACF,KAAA;IAEAc,aAAczB,CAAAA,CAAAA,GAAY,EAAE0B,IAAU,EAAA;AACpC,QAAA,MAAM,EACJC,MAAQ,EAAA,EAAEC,UAAUC,YAAY,EAAE,EACnC,GAAG7B,GAAAA;AAEJ,QAAA,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;AAE5C,QAAA,IAAI,CAACF,gBAAAA,CAAiB6B,GAAG,CAACD,YAAe,CAAA,EAAA;AACvC,YAAA,MAAM,IAAIrC,eAAAA,CAAgB,CAAC,2BAA2B,EAAEqC,YAAc,CAAA,CAAA,CAAA;AACxE;AAEA,QAAA,OAAOnC,2BAA2BM,GAAK0B,EAAAA,IAAAA,CAAAA;AACzC;AACF,CAAE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sources":["../../../../../../ee/server/src/controllers/user.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport _ from 'lodash';\nimport { pick, isNil } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\nimport { validateUserCreationInput } from '../validation/user';\nimport { validateUserUpdateInput } from '../../../../server/src/validation/user';\nimport { getService } from '../utils';\nimport { isSsoLocked } from '../utils/sso-lock';\n\nconst { ApplicationError, ForbiddenError } = errors;\n\nconst pickUserCreationAttributes = pick(['firstname', 'lastname', 'email', 'roles']);\n\nconst hasAdminSeatsAvaialble = async () => {\n if (!strapi.EE) {\n return true;\n }\n\n const permittedSeats = strapi.ee.seats as any;\n if (isNil(permittedSeats)) {\n return true;\n }\n\n const userCount = await strapi.service('admin::user').getCurrentActiveUserCount();\n\n if (userCount < permittedSeats) {\n return true;\n }\n};\n\nexport default {\n async create(ctx: Context) {\n if (!(await hasAdminSeatsAvaialble())) {\n throw new ForbiddenError('License seat limit reached. You cannot create a new user');\n }\n\n const { body } = ctx.request;\n const cleanData = { ...body, email: _.get(body, `email`, ``).toLowerCase() };\n\n await validateUserCreationInput(cleanData);\n\n const attributes = pickUserCreationAttributes(cleanData);\n const { useSSORegistration } = cleanData;\n\n const userAlreadyExists = await getService('user').exists({ email: attributes.email });\n\n if (userAlreadyExists) {\n throw new ApplicationError('Email already taken');\n }\n\n if (useSSORegistration) {\n Object.assign(attributes, { registrationToken: null, isActive: true });\n }\n\n const createdUser = await getService('user').create(attributes);\n const userInfo = getService('user').sanitizeUser(createdUser);\n\n // Note: We need to assign manually the registrationToken to the\n // final user payload so that it's not removed in the sanitation process.\n Object.assign(userInfo, { registrationToken: createdUser.registrationToken });\n\n ctx.created({ data: userInfo });\n },\n\n async update(ctx: Context) {\n const { id } = ctx.params;\n const { body: input } = ctx.request;\n\n await validateUserUpdateInput(input);\n\n if (_.has(input, 'email')) {\n const uniqueEmailCheck = await getService('user').exists({\n id: { $ne: id },\n email: input.email,\n });\n\n if (uniqueEmailCheck) {\n throw new ApplicationError('A user with this email address already exists');\n }\n }\n\n const user = await getService('user').findOne(id, null);\n\n if (!(await hasAdminSeatsAvaialble()) && !user.isActive && input.isActive) {\n throw new ForbiddenError('License seat limit reached. You cannot active this user');\n }\n\n const updatedUser = await getService('user').updateById(id, input);\n\n if (!updatedUser) {\n return ctx.notFound('User does not exist');\n }\n\n ctx.body = {\n data: getService('user').sanitizeUser(updatedUser),\n };\n },\n\n async isSSOLocked(ctx: Context) {\n const { user } = ctx.state;\n const isSSOLocked = await isSsoLocked(user);\n\n ctx.body = {\n data: {\n isSSOLocked,\n },\n };\n },\n};\n"],"names":["ApplicationError","ForbiddenError","errors","pickUserCreationAttributes","pick","hasAdminSeatsAvaialble","strapi","EE","permittedSeats","ee","seats","isNil","userCount","service","getCurrentActiveUserCount","create","ctx","body","request","cleanData","email","_","get","toLowerCase","validateUserCreationInput","attributes","useSSORegistration","userAlreadyExists","getService","exists","Object","assign","registrationToken","isActive","createdUser","userInfo","sanitizeUser","created","data","update","id","params","input","validateUserUpdateInput","has","uniqueEmailCheck","$ne","user","findOne","updatedUser","updateById","notFound","isSSOLocked","state","isSsoLocked"],"mappings":"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"}
1
+ {"version":3,"file":"user.js","sources":["../../../../../../ee/server/src/controllers/user.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport _ from 'lodash';\nimport { pick, isNil } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\nimport { validateUserCreationInput } from '../validation/user';\nimport { validateUserUpdateInput } from '../../../../server/src/validation/user';\nimport { getService } from '../utils';\nimport { isSsoLocked } from '../utils/sso-lock';\n\nconst { ApplicationError, ForbiddenError } = errors;\n\nconst pickUserCreationAttributes = pick(['firstname', 'lastname', 'email', 'roles']);\n\nconst hasAdminSeatsAvaialble = async () => {\n if (!strapi.EE) {\n return true;\n }\n\n const permittedSeats = strapi.ee.seats as any;\n if (isNil(permittedSeats)) {\n return true;\n }\n\n const userCount = await strapi.service('admin::user').getCurrentActiveUserCount();\n\n if (userCount < permittedSeats) {\n return true;\n }\n};\n\nexport default {\n async create(ctx: Context) {\n if (!(await hasAdminSeatsAvaialble())) {\n throw new ForbiddenError('License seat limit reached. You cannot create a new user');\n }\n\n const { body } = ctx.request;\n const cleanData = { ...body, email: _.get(body, `email`, ``).toLowerCase() };\n\n await validateUserCreationInput(cleanData);\n\n const attributes = pickUserCreationAttributes(cleanData);\n const { useSSORegistration } = cleanData;\n\n const userAlreadyExists = await getService('user').exists({ email: attributes.email });\n\n if (userAlreadyExists) {\n throw new ApplicationError('Email already taken');\n }\n\n if (useSSORegistration) {\n Object.assign(attributes, { registrationToken: null, isActive: true });\n }\n\n const createdUser = await getService('user').create(attributes);\n const userInfo = getService('user').sanitizeUser(createdUser);\n\n // Note: We need to assign manually the registrationToken to the\n // final user payload so that it's not removed in the sanitation process.\n Object.assign(userInfo, { registrationToken: createdUser.registrationToken });\n\n ctx.created({ data: userInfo });\n },\n\n async update(ctx: Context) {\n const { id } = ctx.params;\n const { body: input } = ctx.request;\n\n await validateUserUpdateInput(input);\n\n if (_.has(input, 'email')) {\n const uniqueEmailCheck = await getService('user').exists({\n id: { $ne: id },\n email: input.email,\n });\n\n if (uniqueEmailCheck) {\n throw new ApplicationError('A user with this email address already exists');\n }\n }\n\n const user = await getService('user').findOne(id, null);\n\n if (!(await hasAdminSeatsAvaialble()) && !user.isActive && input.isActive) {\n throw new ForbiddenError('License seat limit reached. You cannot active this user');\n }\n\n const updatedUser = await getService('user').updateById(id, input);\n\n if (!updatedUser) {\n return ctx.notFound('User does not exist');\n }\n\n ctx.body = {\n data: getService('user').sanitizeUser(updatedUser),\n };\n },\n\n async isSSOLocked(ctx: Context) {\n const { user } = ctx.state;\n const isSSOLocked = await isSsoLocked(user);\n\n ctx.body = {\n data: {\n isSSOLocked,\n },\n };\n },\n};\n"],"names":["ApplicationError","ForbiddenError","errors","pickUserCreationAttributes","pick","hasAdminSeatsAvaialble","strapi","EE","permittedSeats","ee","seats","isNil","userCount","service","getCurrentActiveUserCount","create","ctx","body","request","cleanData","email","_","get","toLowerCase","validateUserCreationInput","attributes","useSSORegistration","userAlreadyExists","getService","exists","Object","assign","registrationToken","isActive","createdUser","userInfo","sanitizeUser","created","data","update","id","params","input","validateUserUpdateInput","has","uniqueEmailCheck","$ne","user","findOne","updatedUser","updateById","notFound","isSSOLocked","state","isSsoLocked"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"user.mjs","sources":["../../../../../../ee/server/src/controllers/user.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport _ from 'lodash';\nimport { pick, isNil } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\nimport { validateUserCreationInput } from '../validation/user';\nimport { validateUserUpdateInput } from '../../../../server/src/validation/user';\nimport { getService } from '../utils';\nimport { isSsoLocked } from '../utils/sso-lock';\n\nconst { ApplicationError, ForbiddenError } = errors;\n\nconst pickUserCreationAttributes = pick(['firstname', 'lastname', 'email', 'roles']);\n\nconst hasAdminSeatsAvaialble = async () => {\n if (!strapi.EE) {\n return true;\n }\n\n const permittedSeats = strapi.ee.seats as any;\n if (isNil(permittedSeats)) {\n return true;\n }\n\n const userCount = await strapi.service('admin::user').getCurrentActiveUserCount();\n\n if (userCount < permittedSeats) {\n return true;\n }\n};\n\nexport default {\n async create(ctx: Context) {\n if (!(await hasAdminSeatsAvaialble())) {\n throw new ForbiddenError('License seat limit reached. You cannot create a new user');\n }\n\n const { body } = ctx.request;\n const cleanData = { ...body, email: _.get(body, `email`, ``).toLowerCase() };\n\n await validateUserCreationInput(cleanData);\n\n const attributes = pickUserCreationAttributes(cleanData);\n const { useSSORegistration } = cleanData;\n\n const userAlreadyExists = await getService('user').exists({ email: attributes.email });\n\n if (userAlreadyExists) {\n throw new ApplicationError('Email already taken');\n }\n\n if (useSSORegistration) {\n Object.assign(attributes, { registrationToken: null, isActive: true });\n }\n\n const createdUser = await getService('user').create(attributes);\n const userInfo = getService('user').sanitizeUser(createdUser);\n\n // Note: We need to assign manually the registrationToken to the\n // final user payload so that it's not removed in the sanitation process.\n Object.assign(userInfo, { registrationToken: createdUser.registrationToken });\n\n ctx.created({ data: userInfo });\n },\n\n async update(ctx: Context) {\n const { id } = ctx.params;\n const { body: input } = ctx.request;\n\n await validateUserUpdateInput(input);\n\n if (_.has(input, 'email')) {\n const uniqueEmailCheck = await getService('user').exists({\n id: { $ne: id },\n email: input.email,\n });\n\n if (uniqueEmailCheck) {\n throw new ApplicationError('A user with this email address already exists');\n }\n }\n\n const user = await getService('user').findOne(id, null);\n\n if (!(await hasAdminSeatsAvaialble()) && !user.isActive && input.isActive) {\n throw new ForbiddenError('License seat limit reached. You cannot active this user');\n }\n\n const updatedUser = await getService('user').updateById(id, input);\n\n if (!updatedUser) {\n return ctx.notFound('User does not exist');\n }\n\n ctx.body = {\n data: getService('user').sanitizeUser(updatedUser),\n };\n },\n\n async isSSOLocked(ctx: Context) {\n const { user } = ctx.state;\n const isSSOLocked = await isSsoLocked(user);\n\n ctx.body = {\n data: {\n isSSOLocked,\n },\n };\n },\n};\n"],"names":["ApplicationError","ForbiddenError","errors","pickUserCreationAttributes","pick","hasAdminSeatsAvaialble","strapi","EE","permittedSeats","ee","seats","isNil","userCount","service","getCurrentActiveUserCount","create","ctx","body","request","cleanData","email","_","get","toLowerCase","validateUserCreationInput","attributes","useSSORegistration","userAlreadyExists","getService","exists","Object","assign","registrationToken","isActive","createdUser","userInfo","sanitizeUser","created","data","update","id","params","input","validateUserUpdateInput","has","uniqueEmailCheck","$ne","user","findOne","updatedUser","updateById","notFound","isSSOLocked","state","isSsoLocked"],"mappings":"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"}
1
+ {"version":3,"file":"user.mjs","sources":["../../../../../../ee/server/src/controllers/user.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport _ from 'lodash';\nimport { pick, isNil } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\nimport { validateUserCreationInput } from '../validation/user';\nimport { validateUserUpdateInput } from '../../../../server/src/validation/user';\nimport { getService } from '../utils';\nimport { isSsoLocked } from '../utils/sso-lock';\n\nconst { ApplicationError, ForbiddenError } = errors;\n\nconst pickUserCreationAttributes = pick(['firstname', 'lastname', 'email', 'roles']);\n\nconst hasAdminSeatsAvaialble = async () => {\n if (!strapi.EE) {\n return true;\n }\n\n const permittedSeats = strapi.ee.seats as any;\n if (isNil(permittedSeats)) {\n return true;\n }\n\n const userCount = await strapi.service('admin::user').getCurrentActiveUserCount();\n\n if (userCount < permittedSeats) {\n return true;\n }\n};\n\nexport default {\n async create(ctx: Context) {\n if (!(await hasAdminSeatsAvaialble())) {\n throw new ForbiddenError('License seat limit reached. You cannot create a new user');\n }\n\n const { body } = ctx.request;\n const cleanData = { ...body, email: _.get(body, `email`, ``).toLowerCase() };\n\n await validateUserCreationInput(cleanData);\n\n const attributes = pickUserCreationAttributes(cleanData);\n const { useSSORegistration } = cleanData;\n\n const userAlreadyExists = await getService('user').exists({ email: attributes.email });\n\n if (userAlreadyExists) {\n throw new ApplicationError('Email already taken');\n }\n\n if (useSSORegistration) {\n Object.assign(attributes, { registrationToken: null, isActive: true });\n }\n\n const createdUser = await getService('user').create(attributes);\n const userInfo = getService('user').sanitizeUser(createdUser);\n\n // Note: We need to assign manually the registrationToken to the\n // final user payload so that it's not removed in the sanitation process.\n Object.assign(userInfo, { registrationToken: createdUser.registrationToken });\n\n ctx.created({ data: userInfo });\n },\n\n async update(ctx: Context) {\n const { id } = ctx.params;\n const { body: input } = ctx.request;\n\n await validateUserUpdateInput(input);\n\n if (_.has(input, 'email')) {\n const uniqueEmailCheck = await getService('user').exists({\n id: { $ne: id },\n email: input.email,\n });\n\n if (uniqueEmailCheck) {\n throw new ApplicationError('A user with this email address already exists');\n }\n }\n\n const user = await getService('user').findOne(id, null);\n\n if (!(await hasAdminSeatsAvaialble()) && !user.isActive && input.isActive) {\n throw new ForbiddenError('License seat limit reached. You cannot active this user');\n }\n\n const updatedUser = await getService('user').updateById(id, input);\n\n if (!updatedUser) {\n return ctx.notFound('User does not exist');\n }\n\n ctx.body = {\n data: getService('user').sanitizeUser(updatedUser),\n };\n },\n\n async isSSOLocked(ctx: Context) {\n const { user } = ctx.state;\n const isSSOLocked = await isSsoLocked(user);\n\n ctx.body = {\n data: {\n isSSOLocked,\n },\n };\n },\n};\n"],"names":["ApplicationError","ForbiddenError","errors","pickUserCreationAttributes","pick","hasAdminSeatsAvaialble","strapi","EE","permittedSeats","ee","seats","isNil","userCount","service","getCurrentActiveUserCount","create","ctx","body","request","cleanData","email","_","get","toLowerCase","validateUserCreationInput","attributes","useSSORegistration","userAlreadyExists","getService","exists","Object","assign","registrationToken","isActive","createdUser","userInfo","sanitizeUser","created","data","update","id","params","input","validateUserUpdateInput","has","uniqueEmailCheck","$ne","user","findOne","updatedUser","updateById","notFound","isSSOLocked","state","isSsoLocked"],"mappings":"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"}
@@ -14,6 +14,7 @@ var lifecycles = require('./audit-logs/services/lifecycles.js');
14
14
  var auditLog = require('./audit-logs/content-types/audit-log.js');
15
15
  var ai$1 = require('./ai/routes/ai.js');
16
16
  var ai = require('./ai/controllers/ai.js');
17
+ var ai$2 = require('./ai/containers/ai.js');
17
18
 
18
19
  const getAdminEE = ()=>{
19
20
  const eeAdmin = {
@@ -56,6 +57,12 @@ const getAdminEE = ()=>{
56
57
  await eeAdmin.register({
57
58
  strapi: strapi1
58
59
  });
60
+ // Register internal ai service
61
+ if (isAIEnabled) {
62
+ strapi1.add('ai', ai$2.createAIContainer({
63
+ strapi: strapi1
64
+ }));
65
+ }
59
66
  if (isAuditLogsEnabled) {
60
67
  // Register an internal audit logs service
61
68
  strapi1.add('audit-logs', auditLogs$2.createAuditLogsService(strapi1));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../ee/server/src/index.ts"],"sourcesContent":["import register from './register';\nimport bootstrap from './bootstrap';\nimport destroy from './destroy';\nimport adminContentTypes from './content-types';\nimport services from './services';\nimport controllers from './controllers';\nimport routes from './routes';\nimport auditLogsRoutes from './audit-logs/routes/audit-logs';\nimport auditLogsController from './audit-logs/controllers/audit-logs';\nimport { createAuditLogsService } from './audit-logs/services/audit-logs';\nimport { createAuditLogsLifecycleService } from './audit-logs/services/lifecycles';\nimport { auditLog } from './audit-logs/content-types/audit-log';\nimport aiRoutes from './ai/routes/ai';\nimport aiController from './ai/controllers/ai';\nimport type { Core } from '@strapi/types';\n\nconst getAdminEE = () => {\n const eeAdmin = {\n register,\n bootstrap,\n destroy,\n contentTypes: {\n // Always register the audit-log content type to prevent data loss\n 'audit-log': auditLog,\n ...adminContentTypes,\n },\n services,\n controllers,\n routes,\n };\n\n const isAIEnabled =\n strapi.config.get('admin.ai.enabled', true) && strapi.ee.features.isEnabled('cms-ai');\n const isAuditLogsEnabled =\n strapi.config.get('admin.auditLogs.enabled', true) &&\n strapi.ee.features.isEnabled('audit-logs');\n return {\n ...eeAdmin,\n controllers: {\n ...eeAdmin.controllers,\n ...(isAuditLogsEnabled ? { 'audit-logs': auditLogsController } : {}),\n ...(isAIEnabled ? { ai: aiController } : {}),\n },\n routes: {\n ...eeAdmin.routes,\n ...(isAuditLogsEnabled ? { 'audit-logs': auditLogsRoutes } : {}),\n ...(isAIEnabled ? { ai: aiRoutes } : {}),\n },\n async register({ strapi }: { strapi: Core.Strapi }) {\n // Run the the default registration\n await eeAdmin.register({ strapi });\n if (isAuditLogsEnabled) {\n // Register an internal audit logs service\n strapi.add('audit-logs', createAuditLogsService(strapi));\n // Register an internal audit logs lifecycle service\n const auditLogsLifecycle = createAuditLogsLifecycleService(strapi);\n strapi.add('audit-logs-lifecycle', auditLogsLifecycle);\n\n await auditLogsLifecycle.register();\n }\n },\n async destroy({ strapi }: { strapi: Core.Strapi }) {\n if (isAuditLogsEnabled) {\n strapi.get('audit-logs-lifecycle').destroy();\n }\n await eeAdmin.destroy({ strapi });\n },\n };\n};\n\nexport default getAdminEE;\n"],"names":["getAdminEE","eeAdmin","register","bootstrap","destroy","contentTypes","auditLog","adminContentTypes","services","controllers","routes","isAIEnabled","strapi","config","get","ee","features","isEnabled","isAuditLogsEnabled","auditLogsController","ai","aiController","auditLogsRoutes","aiRoutes","add","createAuditLogsService","auditLogsLifecycle","createAuditLogsLifecycleService"],"mappings":";;;;;;;;;;;;;;;;;AAgBA,MAAMA,UAAa,GAAA,IAAA;AACjB,IAAA,MAAMC,OAAU,GAAA;AACdC,QAAAA,QAAAA;AACAC,QAAAA,SAAAA;AACAC,QAAAA,OAAAA;QACAC,YAAc,EAAA;;YAEZ,WAAaC,EAAAA,iBAAAA;AACb,YAAA,GAAGC;AACL,SAAA;AACAC,kBAAAA,OAAAA;AACAC,qBAAAA,OAAAA;AACAC,gBAAAA;AACF,KAAA;AAEA,IAAA,MAAMC,WACJC,GAAAA,MAAAA,CAAOC,MAAM,CAACC,GAAG,CAAC,kBAAA,EAAoB,IAASF,CAAAA,IAAAA,MAAAA,CAAOG,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,QAAA,CAAA;AAC9E,IAAA,MAAMC,kBACJN,GAAAA,MAAAA,CAAOC,MAAM,CAACC,GAAG,CAAC,yBAAA,EAA2B,IAC7CF,CAAAA,IAAAA,MAAAA,CAAOG,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,YAAA,CAAA;IAC/B,OAAO;AACL,QAAA,GAAGhB,OAAO;QACVQ,WAAa,EAAA;AACX,YAAA,GAAGR,QAAQQ,WAAW;AACtB,YAAA,GAAIS,kBAAqB,GAAA;gBAAE,YAAcC,EAAAA;AAAoB,aAAA,GAAI,EAAE;AACnE,YAAA,GAAIR,WAAc,GAAA;gBAAES,EAAIC,EAAAA;AAAa,aAAA,GAAI;AAC3C,SAAA;QACAX,MAAQ,EAAA;AACN,YAAA,GAAGT,QAAQS,MAAM;AACjB,YAAA,GAAIQ,kBAAqB,GAAA;gBAAE,YAAcI,EAAAA;AAAgB,aAAA,GAAI,EAAE;AAC/D,YAAA,GAAIX,WAAc,GAAA;gBAAES,EAAIG,EAAAA;AAAS,aAAA,GAAI;AACvC,SAAA;AACA,QAAA,MAAMrB,QAAS,CAAA,CAAA,EAAEU,MAAAA,EAAAA,OAAM,EAA2B,EAAA;;YAEhD,MAAMX,OAAAA,CAAQC,QAAQ,CAAC;gBAAEU,MAAAA,EAAAA;AAAO,aAAA,CAAA;AAChC,YAAA,IAAIM,kBAAoB,EAAA;;gBAEtBN,OAAOY,CAAAA,GAAG,CAAC,YAAA,EAAcC,kCAAuBb,CAAAA,OAAAA,CAAAA,CAAAA;;AAEhD,gBAAA,MAAMc,qBAAqBC,0CAAgCf,CAAAA,OAAAA,CAAAA;gBAC3DA,OAAOY,CAAAA,GAAG,CAAC,sBAAwBE,EAAAA,kBAAAA,CAAAA;AAEnC,gBAAA,MAAMA,mBAAmBxB,QAAQ,EAAA;AACnC;AACF,SAAA;AACA,QAAA,MAAME,OAAQ,CAAA,CAAA,EAAEQ,MAAAA,EAAAA,OAAM,EAA2B,EAAA;AAC/C,YAAA,IAAIM,kBAAoB,EAAA;gBACtBN,OAAOE,CAAAA,GAAG,CAAC,sBAAA,CAAA,CAAwBV,OAAO,EAAA;AAC5C;YACA,MAAMH,OAAAA,CAAQG,OAAO,CAAC;gBAAEQ,MAAAA,EAAAA;AAAO,aAAA,CAAA;AACjC;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../ee/server/src/index.ts"],"sourcesContent":["import register from './register';\nimport bootstrap from './bootstrap';\nimport destroy from './destroy';\nimport adminContentTypes from './content-types';\nimport services from './services';\nimport controllers from './controllers';\nimport routes from './routes';\nimport auditLogsRoutes from './audit-logs/routes/audit-logs';\nimport auditLogsController from './audit-logs/controllers/audit-logs';\nimport { createAuditLogsService } from './audit-logs/services/audit-logs';\nimport { createAuditLogsLifecycleService } from './audit-logs/services/lifecycles';\nimport { auditLog } from './audit-logs/content-types/audit-log';\nimport aiRoutes from './ai/routes/ai';\nimport aiController from './ai/controllers/ai';\nimport type { Core } from '@strapi/types';\nimport { createAIContainer } from './ai/containers/ai';\n\nconst getAdminEE = () => {\n const eeAdmin = {\n register,\n bootstrap,\n destroy,\n contentTypes: {\n // Always register the audit-log content type to prevent data loss\n 'audit-log': auditLog,\n ...adminContentTypes,\n },\n services,\n controllers,\n routes,\n };\n\n const isAIEnabled =\n strapi.config.get('admin.ai.enabled', true) && strapi.ee.features.isEnabled('cms-ai');\n\n const isAuditLogsEnabled =\n strapi.config.get('admin.auditLogs.enabled', true) &&\n strapi.ee.features.isEnabled('audit-logs');\n return {\n ...eeAdmin,\n controllers: {\n ...eeAdmin.controllers,\n ...(isAuditLogsEnabled ? { 'audit-logs': auditLogsController } : {}),\n ...(isAIEnabled ? { ai: aiController } : {}),\n },\n routes: {\n ...eeAdmin.routes,\n ...(isAuditLogsEnabled ? { 'audit-logs': auditLogsRoutes } : {}),\n ...(isAIEnabled ? { ai: aiRoutes } : {}),\n },\n async register({ strapi }: { strapi: Core.Strapi }) {\n // Run the the default registration\n await eeAdmin.register({ strapi });\n\n // Register internal ai service\n if (isAIEnabled) {\n strapi.add('ai', createAIContainer({ strapi }));\n }\n\n if (isAuditLogsEnabled) {\n // Register an internal audit logs service\n strapi.add('audit-logs', createAuditLogsService(strapi));\n // Register an internal audit logs lifecycle service\n const auditLogsLifecycle = createAuditLogsLifecycleService(strapi);\n strapi.add('audit-logs-lifecycle', auditLogsLifecycle);\n\n await auditLogsLifecycle.register();\n }\n },\n async destroy({ strapi }: { strapi: Core.Strapi }) {\n if (isAuditLogsEnabled) {\n strapi.get('audit-logs-lifecycle').destroy();\n }\n await eeAdmin.destroy({ strapi });\n },\n };\n};\n\nexport default getAdminEE;\n"],"names":["getAdminEE","eeAdmin","register","bootstrap","destroy","contentTypes","auditLog","adminContentTypes","services","controllers","routes","isAIEnabled","strapi","config","get","ee","features","isEnabled","isAuditLogsEnabled","auditLogsController","ai","aiController","auditLogsRoutes","aiRoutes","add","createAIContainer","createAuditLogsService","auditLogsLifecycle","createAuditLogsLifecycleService"],"mappings":";;;;;;;;;;;;;;;;;;AAiBA,MAAMA,UAAa,GAAA,IAAA;AACjB,IAAA,MAAMC,OAAU,GAAA;AACdC,QAAAA,QAAAA;AACAC,QAAAA,SAAAA;AACAC,QAAAA,OAAAA;QACAC,YAAc,EAAA;;YAEZ,WAAaC,EAAAA,iBAAAA;AACb,YAAA,GAAGC;AACL,SAAA;AACAC,kBAAAA,OAAAA;AACAC,qBAAAA,OAAAA;AACAC,gBAAAA;AACF,KAAA;AAEA,IAAA,MAAMC,WACJC,GAAAA,MAAAA,CAAOC,MAAM,CAACC,GAAG,CAAC,kBAAA,EAAoB,IAASF,CAAAA,IAAAA,MAAAA,CAAOG,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,QAAA,CAAA;AAE9E,IAAA,MAAMC,kBACJN,GAAAA,MAAAA,CAAOC,MAAM,CAACC,GAAG,CAAC,yBAAA,EAA2B,IAC7CF,CAAAA,IAAAA,MAAAA,CAAOG,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,YAAA,CAAA;IAC/B,OAAO;AACL,QAAA,GAAGhB,OAAO;QACVQ,WAAa,EAAA;AACX,YAAA,GAAGR,QAAQQ,WAAW;AACtB,YAAA,GAAIS,kBAAqB,GAAA;gBAAE,YAAcC,EAAAA;AAAoB,aAAA,GAAI,EAAE;AACnE,YAAA,GAAIR,WAAc,GAAA;gBAAES,EAAIC,EAAAA;AAAa,aAAA,GAAI;AAC3C,SAAA;QACAX,MAAQ,EAAA;AACN,YAAA,GAAGT,QAAQS,MAAM;AACjB,YAAA,GAAIQ,kBAAqB,GAAA;gBAAE,YAAcI,EAAAA;AAAgB,aAAA,GAAI,EAAE;AAC/D,YAAA,GAAIX,WAAc,GAAA;gBAAES,EAAIG,EAAAA;AAAS,aAAA,GAAI;AACvC,SAAA;AACA,QAAA,MAAMrB,QAAS,CAAA,CAAA,EAAEU,MAAAA,EAAAA,OAAM,EAA2B,EAAA;;YAEhD,MAAMX,OAAAA,CAAQC,QAAQ,CAAC;gBAAEU,MAAAA,EAAAA;AAAO,aAAA,CAAA;;AAGhC,YAAA,IAAID,WAAa,EAAA;gBACfC,OAAOY,CAAAA,GAAG,CAAC,IAAA,EAAMC,sBAAkB,CAAA;oBAAEb,MAAAA,EAAAA;AAAO,iBAAA,CAAA,CAAA;AAC9C;AAEA,YAAA,IAAIM,kBAAoB,EAAA;;gBAEtBN,OAAOY,CAAAA,GAAG,CAAC,YAAA,EAAcE,kCAAuBd,CAAAA,OAAAA,CAAAA,CAAAA;;AAEhD,gBAAA,MAAMe,qBAAqBC,0CAAgChB,CAAAA,OAAAA,CAAAA;gBAC3DA,OAAOY,CAAAA,GAAG,CAAC,sBAAwBG,EAAAA,kBAAAA,CAAAA;AAEnC,gBAAA,MAAMA,mBAAmBzB,QAAQ,EAAA;AACnC;AACF,SAAA;AACA,QAAA,MAAME,OAAQ,CAAA,CAAA,EAAEQ,MAAAA,EAAAA,OAAM,EAA2B,EAAA;AAC/C,YAAA,IAAIM,kBAAoB,EAAA;gBACtBN,OAAOE,CAAAA,GAAG,CAAC,sBAAA,CAAA,CAAwBV,OAAO,EAAA;AAC5C;YACA,MAAMH,OAAAA,CAAQG,OAAO,CAAC;gBAAEQ,MAAAA,EAAAA;AAAO,aAAA,CAAA;AACjC;AACF,KAAA;AACF;;;;"}
@@ -12,6 +12,7 @@ import { createAuditLogsLifecycleService } from './audit-logs/services/lifecycle
12
12
  import { auditLog } from './audit-logs/content-types/audit-log.mjs';
13
13
  import aiRoutes from './ai/routes/ai.mjs';
14
14
  import aiController from './ai/controllers/ai.mjs';
15
+ import { createAIContainer } from './ai/containers/ai.mjs';
15
16
 
16
17
  const getAdminEE = ()=>{
17
18
  const eeAdmin = {
@@ -54,6 +55,12 @@ const getAdminEE = ()=>{
54
55
  await eeAdmin.register({
55
56
  strapi: strapi1
56
57
  });
58
+ // Register internal ai service
59
+ if (isAIEnabled) {
60
+ strapi1.add('ai', createAIContainer({
61
+ strapi: strapi1
62
+ }));
63
+ }
57
64
  if (isAuditLogsEnabled) {
58
65
  // Register an internal audit logs service
59
66
  strapi1.add('audit-logs', createAuditLogsService(strapi1));
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../ee/server/src/index.ts"],"sourcesContent":["import register from './register';\nimport bootstrap from './bootstrap';\nimport destroy from './destroy';\nimport adminContentTypes from './content-types';\nimport services from './services';\nimport controllers from './controllers';\nimport routes from './routes';\nimport auditLogsRoutes from './audit-logs/routes/audit-logs';\nimport auditLogsController from './audit-logs/controllers/audit-logs';\nimport { createAuditLogsService } from './audit-logs/services/audit-logs';\nimport { createAuditLogsLifecycleService } from './audit-logs/services/lifecycles';\nimport { auditLog } from './audit-logs/content-types/audit-log';\nimport aiRoutes from './ai/routes/ai';\nimport aiController from './ai/controllers/ai';\nimport type { Core } from '@strapi/types';\n\nconst getAdminEE = () => {\n const eeAdmin = {\n register,\n bootstrap,\n destroy,\n contentTypes: {\n // Always register the audit-log content type to prevent data loss\n 'audit-log': auditLog,\n ...adminContentTypes,\n },\n services,\n controllers,\n routes,\n };\n\n const isAIEnabled =\n strapi.config.get('admin.ai.enabled', true) && strapi.ee.features.isEnabled('cms-ai');\n const isAuditLogsEnabled =\n strapi.config.get('admin.auditLogs.enabled', true) &&\n strapi.ee.features.isEnabled('audit-logs');\n return {\n ...eeAdmin,\n controllers: {\n ...eeAdmin.controllers,\n ...(isAuditLogsEnabled ? { 'audit-logs': auditLogsController } : {}),\n ...(isAIEnabled ? { ai: aiController } : {}),\n },\n routes: {\n ...eeAdmin.routes,\n ...(isAuditLogsEnabled ? { 'audit-logs': auditLogsRoutes } : {}),\n ...(isAIEnabled ? { ai: aiRoutes } : {}),\n },\n async register({ strapi }: { strapi: Core.Strapi }) {\n // Run the the default registration\n await eeAdmin.register({ strapi });\n if (isAuditLogsEnabled) {\n // Register an internal audit logs service\n strapi.add('audit-logs', createAuditLogsService(strapi));\n // Register an internal audit logs lifecycle service\n const auditLogsLifecycle = createAuditLogsLifecycleService(strapi);\n strapi.add('audit-logs-lifecycle', auditLogsLifecycle);\n\n await auditLogsLifecycle.register();\n }\n },\n async destroy({ strapi }: { strapi: Core.Strapi }) {\n if (isAuditLogsEnabled) {\n strapi.get('audit-logs-lifecycle').destroy();\n }\n await eeAdmin.destroy({ strapi });\n },\n };\n};\n\nexport default getAdminEE;\n"],"names":["getAdminEE","eeAdmin","register","bootstrap","destroy","contentTypes","auditLog","adminContentTypes","services","controllers","routes","isAIEnabled","strapi","config","get","ee","features","isEnabled","isAuditLogsEnabled","auditLogsController","ai","aiController","auditLogsRoutes","aiRoutes","add","createAuditLogsService","auditLogsLifecycle","createAuditLogsLifecycleService"],"mappings":";;;;;;;;;;;;;;;AAgBA,MAAMA,UAAa,GAAA,IAAA;AACjB,IAAA,MAAMC,OAAU,GAAA;AACdC,QAAAA,QAAAA;AACAC,QAAAA,SAAAA;AACAC,QAAAA,OAAAA;QACAC,YAAc,EAAA;;YAEZ,WAAaC,EAAAA,QAAAA;AACb,YAAA,GAAGC;AACL,SAAA;AACAC,QAAAA,QAAAA;AACAC,QAAAA,WAAAA;AACAC,QAAAA;AACF,KAAA;AAEA,IAAA,MAAMC,WACJC,GAAAA,MAAAA,CAAOC,MAAM,CAACC,GAAG,CAAC,kBAAA,EAAoB,IAASF,CAAAA,IAAAA,MAAAA,CAAOG,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,QAAA,CAAA;AAC9E,IAAA,MAAMC,kBACJN,GAAAA,MAAAA,CAAOC,MAAM,CAACC,GAAG,CAAC,yBAAA,EAA2B,IAC7CF,CAAAA,IAAAA,MAAAA,CAAOG,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,YAAA,CAAA;IAC/B,OAAO;AACL,QAAA,GAAGhB,OAAO;QACVQ,WAAa,EAAA;AACX,YAAA,GAAGR,QAAQQ,WAAW;AACtB,YAAA,GAAIS,kBAAqB,GAAA;gBAAE,YAAcC,EAAAA;AAAoB,aAAA,GAAI,EAAE;AACnE,YAAA,GAAIR,WAAc,GAAA;gBAAES,EAAIC,EAAAA;AAAa,aAAA,GAAI;AAC3C,SAAA;QACAX,MAAQ,EAAA;AACN,YAAA,GAAGT,QAAQS,MAAM;AACjB,YAAA,GAAIQ,kBAAqB,GAAA;gBAAE,YAAcI,EAAAA;AAAgB,aAAA,GAAI,EAAE;AAC/D,YAAA,GAAIX,WAAc,GAAA;gBAAES,EAAIG,EAAAA;AAAS,aAAA,GAAI;AACvC,SAAA;AACA,QAAA,MAAMrB,QAAS,CAAA,CAAA,EAAEU,MAAAA,EAAAA,OAAM,EAA2B,EAAA;;YAEhD,MAAMX,OAAAA,CAAQC,QAAQ,CAAC;gBAAEU,MAAAA,EAAAA;AAAO,aAAA,CAAA;AAChC,YAAA,IAAIM,kBAAoB,EAAA;;gBAEtBN,OAAOY,CAAAA,GAAG,CAAC,YAAA,EAAcC,sBAAuBb,CAAAA,OAAAA,CAAAA,CAAAA;;AAEhD,gBAAA,MAAMc,qBAAqBC,+BAAgCf,CAAAA,OAAAA,CAAAA;gBAC3DA,OAAOY,CAAAA,GAAG,CAAC,sBAAwBE,EAAAA,kBAAAA,CAAAA;AAEnC,gBAAA,MAAMA,mBAAmBxB,QAAQ,EAAA;AACnC;AACF,SAAA;AACA,QAAA,MAAME,OAAQ,CAAA,CAAA,EAAEQ,MAAAA,EAAAA,OAAM,EAA2B,EAAA;AAC/C,YAAA,IAAIM,kBAAoB,EAAA;gBACtBN,OAAOE,CAAAA,GAAG,CAAC,sBAAA,CAAA,CAAwBV,OAAO,EAAA;AAC5C;YACA,MAAMH,OAAAA,CAAQG,OAAO,CAAC;gBAAEQ,MAAAA,EAAAA;AAAO,aAAA,CAAA;AACjC;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../ee/server/src/index.ts"],"sourcesContent":["import register from './register';\nimport bootstrap from './bootstrap';\nimport destroy from './destroy';\nimport adminContentTypes from './content-types';\nimport services from './services';\nimport controllers from './controllers';\nimport routes from './routes';\nimport auditLogsRoutes from './audit-logs/routes/audit-logs';\nimport auditLogsController from './audit-logs/controllers/audit-logs';\nimport { createAuditLogsService } from './audit-logs/services/audit-logs';\nimport { createAuditLogsLifecycleService } from './audit-logs/services/lifecycles';\nimport { auditLog } from './audit-logs/content-types/audit-log';\nimport aiRoutes from './ai/routes/ai';\nimport aiController from './ai/controllers/ai';\nimport type { Core } from '@strapi/types';\nimport { createAIContainer } from './ai/containers/ai';\n\nconst getAdminEE = () => {\n const eeAdmin = {\n register,\n bootstrap,\n destroy,\n contentTypes: {\n // Always register the audit-log content type to prevent data loss\n 'audit-log': auditLog,\n ...adminContentTypes,\n },\n services,\n controllers,\n routes,\n };\n\n const isAIEnabled =\n strapi.config.get('admin.ai.enabled', true) && strapi.ee.features.isEnabled('cms-ai');\n\n const isAuditLogsEnabled =\n strapi.config.get('admin.auditLogs.enabled', true) &&\n strapi.ee.features.isEnabled('audit-logs');\n return {\n ...eeAdmin,\n controllers: {\n ...eeAdmin.controllers,\n ...(isAuditLogsEnabled ? { 'audit-logs': auditLogsController } : {}),\n ...(isAIEnabled ? { ai: aiController } : {}),\n },\n routes: {\n ...eeAdmin.routes,\n ...(isAuditLogsEnabled ? { 'audit-logs': auditLogsRoutes } : {}),\n ...(isAIEnabled ? { ai: aiRoutes } : {}),\n },\n async register({ strapi }: { strapi: Core.Strapi }) {\n // Run the the default registration\n await eeAdmin.register({ strapi });\n\n // Register internal ai service\n if (isAIEnabled) {\n strapi.add('ai', createAIContainer({ strapi }));\n }\n\n if (isAuditLogsEnabled) {\n // Register an internal audit logs service\n strapi.add('audit-logs', createAuditLogsService(strapi));\n // Register an internal audit logs lifecycle service\n const auditLogsLifecycle = createAuditLogsLifecycleService(strapi);\n strapi.add('audit-logs-lifecycle', auditLogsLifecycle);\n\n await auditLogsLifecycle.register();\n }\n },\n async destroy({ strapi }: { strapi: Core.Strapi }) {\n if (isAuditLogsEnabled) {\n strapi.get('audit-logs-lifecycle').destroy();\n }\n await eeAdmin.destroy({ strapi });\n },\n };\n};\n\nexport default getAdminEE;\n"],"names":["getAdminEE","eeAdmin","register","bootstrap","destroy","contentTypes","auditLog","adminContentTypes","services","controllers","routes","isAIEnabled","strapi","config","get","ee","features","isEnabled","isAuditLogsEnabled","auditLogsController","ai","aiController","auditLogsRoutes","aiRoutes","add","createAIContainer","createAuditLogsService","auditLogsLifecycle","createAuditLogsLifecycleService"],"mappings":";;;;;;;;;;;;;;;;AAiBA,MAAMA,UAAa,GAAA,IAAA;AACjB,IAAA,MAAMC,OAAU,GAAA;AACdC,QAAAA,QAAAA;AACAC,QAAAA,SAAAA;AACAC,QAAAA,OAAAA;QACAC,YAAc,EAAA;;YAEZ,WAAaC,EAAAA,QAAAA;AACb,YAAA,GAAGC;AACL,SAAA;AACAC,QAAAA,QAAAA;AACAC,QAAAA,WAAAA;AACAC,QAAAA;AACF,KAAA;AAEA,IAAA,MAAMC,WACJC,GAAAA,MAAAA,CAAOC,MAAM,CAACC,GAAG,CAAC,kBAAA,EAAoB,IAASF,CAAAA,IAAAA,MAAAA,CAAOG,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,QAAA,CAAA;AAE9E,IAAA,MAAMC,kBACJN,GAAAA,MAAAA,CAAOC,MAAM,CAACC,GAAG,CAAC,yBAAA,EAA2B,IAC7CF,CAAAA,IAAAA,MAAAA,CAAOG,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,YAAA,CAAA;IAC/B,OAAO;AACL,QAAA,GAAGhB,OAAO;QACVQ,WAAa,EAAA;AACX,YAAA,GAAGR,QAAQQ,WAAW;AACtB,YAAA,GAAIS,kBAAqB,GAAA;gBAAE,YAAcC,EAAAA;AAAoB,aAAA,GAAI,EAAE;AACnE,YAAA,GAAIR,WAAc,GAAA;gBAAES,EAAIC,EAAAA;AAAa,aAAA,GAAI;AAC3C,SAAA;QACAX,MAAQ,EAAA;AACN,YAAA,GAAGT,QAAQS,MAAM;AACjB,YAAA,GAAIQ,kBAAqB,GAAA;gBAAE,YAAcI,EAAAA;AAAgB,aAAA,GAAI,EAAE;AAC/D,YAAA,GAAIX,WAAc,GAAA;gBAAES,EAAIG,EAAAA;AAAS,aAAA,GAAI;AACvC,SAAA;AACA,QAAA,MAAMrB,QAAS,CAAA,CAAA,EAAEU,MAAAA,EAAAA,OAAM,EAA2B,EAAA;;YAEhD,MAAMX,OAAAA,CAAQC,QAAQ,CAAC;gBAAEU,MAAAA,EAAAA;AAAO,aAAA,CAAA;;AAGhC,YAAA,IAAID,WAAa,EAAA;gBACfC,OAAOY,CAAAA,GAAG,CAAC,IAAA,EAAMC,iBAAkB,CAAA;oBAAEb,MAAAA,EAAAA;AAAO,iBAAA,CAAA,CAAA;AAC9C;AAEA,YAAA,IAAIM,kBAAoB,EAAA;;gBAEtBN,OAAOY,CAAAA,GAAG,CAAC,YAAA,EAAcE,sBAAuBd,CAAAA,OAAAA,CAAAA,CAAAA;;AAEhD,gBAAA,MAAMe,qBAAqBC,+BAAgChB,CAAAA,OAAAA,CAAAA;gBAC3DA,OAAOY,CAAAA,GAAG,CAAC,sBAAwBG,EAAAA,kBAAAA,CAAAA;AAEnC,gBAAA,MAAMA,mBAAmBzB,QAAQ,EAAA;AACnC;AACF,SAAA;AACA,QAAA,MAAME,OAAQ,CAAA,CAAA,EAAEQ,MAAAA,EAAAA,OAAM,EAA2B,EAAA;AAC/C,YAAA,IAAIM,kBAAoB,EAAA;gBACtBN,OAAOE,CAAAA,GAAG,CAAC,sBAAA,CAAA,CAAwBV,OAAO,EAAA;AAC5C;YACA,MAAMH,OAAAA,CAAQG,OAAO,CAAC;gBAAEQ,MAAAA,EAAAA;AAAO,aAAA,CAAA;AACjC;AACF,KAAA;AACF;;;;"}