@strapi/admin 5.57.0 → 5.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) 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/ConfirmDialog.js +10 -9
  4. package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
  5. package/dist/admin/admin/src/components/ConfirmDialog.mjs +10 -9
  6. package/dist/admin/admin/src/components/ConfirmDialog.mjs.map +1 -1
  7. package/dist/admin/admin/src/components/Filters.js +57 -12
  8. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  9. package/dist/admin/admin/src/components/Filters.mjs +57 -12
  10. package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
  11. package/dist/admin/admin/src/components/Form.js +3 -1
  12. package/dist/admin/admin/src/components/Form.js.map +1 -1
  13. package/dist/admin/admin/src/components/Form.mjs +3 -1
  14. package/dist/admin/admin/src/components/Form.mjs.map +1 -1
  15. package/dist/admin/admin/src/components/FormInputs/Boolean.js +3 -2
  16. package/dist/admin/admin/src/components/FormInputs/Boolean.js.map +1 -1
  17. package/dist/admin/admin/src/components/FormInputs/Boolean.mjs +3 -2
  18. package/dist/admin/admin/src/components/FormInputs/Boolean.mjs.map +1 -1
  19. package/dist/admin/admin/src/components/FormInputs/Enumeration.js +2 -1
  20. package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
  21. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -1
  22. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
  23. package/dist/admin/admin/src/components/LeftMenu.js +5 -1
  24. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  25. package/dist/admin/admin/src/components/LeftMenu.mjs +5 -1
  26. package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
  27. package/dist/admin/admin/src/components/PageHelpers.js +2 -1
  28. package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
  29. package/dist/admin/admin/src/components/PageHelpers.mjs +2 -1
  30. package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
  31. package/dist/admin/admin/src/components/Pagination.js +7 -6
  32. package/dist/admin/admin/src/components/Pagination.js.map +1 -1
  33. package/dist/admin/admin/src/components/Pagination.mjs +7 -6
  34. package/dist/admin/admin/src/components/Pagination.mjs.map +1 -1
  35. package/dist/admin/admin/src/components/RelativeTime.js +2 -1
  36. package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
  37. package/dist/admin/admin/src/components/RelativeTime.mjs +2 -1
  38. package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
  39. package/dist/admin/admin/src/components/SubNav.js +6 -12
  40. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  41. package/dist/admin/admin/src/components/SubNav.mjs +7 -13
  42. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  43. package/dist/admin/admin/src/components/Table.js +3 -1
  44. package/dist/admin/admin/src/components/Table.js.map +1 -1
  45. package/dist/admin/admin/src/components/Table.mjs +3 -1
  46. package/dist/admin/admin/src/components/Table.mjs.map +1 -1
  47. package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
  48. package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
  49. package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
  50. package/dist/admin/admin/src/components/WidgetRoot.mjs.map +1 -1
  51. package/dist/admin/admin/src/constants.js +14 -0
  52. package/dist/admin/admin/src/constants.js.map +1 -1
  53. package/dist/admin/admin/src/constants.mjs +14 -0
  54. package/dist/admin/admin/src/constants.mjs.map +1 -1
  55. package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
  56. package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
  57. package/dist/admin/admin/src/features/Auth.js +2 -1
  58. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  59. package/dist/admin/admin/src/features/Auth.mjs +2 -1
  60. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  61. package/dist/admin/admin/src/features/StrapiApp.js.map +1 -1
  62. package/dist/admin/admin/src/features/StrapiApp.mjs.map +1 -1
  63. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  64. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  65. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js +6 -12
  66. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
  67. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs +6 -12
  68. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs.map +1 -1
  69. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
  70. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs.map +1 -1
  71. package/dist/admin/admin/src/pages/ProfilePage.js +2 -2
  72. package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
  73. package/dist/admin/admin/src/pages/ProfilePage.mjs +2 -2
  74. package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
  75. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +10 -2
  76. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  77. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +10 -2
  78. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  79. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js +4 -1
  80. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js.map +1 -1
  81. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs +4 -1
  82. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs.map +1 -1
  83. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +3 -1
  84. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  85. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +3 -1
  86. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
  87. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js +2 -1
  88. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js.map +1 -1
  89. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs +2 -1
  90. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs.map +1 -1
  91. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +6 -5
  92. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
  93. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs +6 -5
  94. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs.map +1 -1
  95. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +2 -1
  96. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
  97. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs +2 -1
  98. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
  99. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js +4 -4
  100. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js.map +1 -1
  101. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs +4 -4
  102. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs.map +1 -1
  103. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +7 -58
  104. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  105. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +7 -58
  106. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  107. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js +217 -0
  108. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js.map +1 -0
  109. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs +195 -0
  110. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs.map +1 -0
  111. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
  112. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
  113. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js +185 -0
  114. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js.map +1 -0
  115. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs +162 -0
  116. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs.map +1 -0
  117. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js +342 -0
  118. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js.map +1 -0
  119. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs +320 -0
  120. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs.map +1 -0
  121. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +9 -4
  122. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
  123. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs +9 -4
  124. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs.map +1 -1
  125. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js +15 -9
  126. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
  127. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs +15 -9
  128. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs.map +1 -1
  129. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +5 -2
  130. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
  131. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs +5 -2
  132. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs.map +1 -1
  133. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js +2 -1
  134. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
  135. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs +2 -1
  136. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs.map +1 -1
  137. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +2 -1
  138. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
  139. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +2 -1
  140. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
  141. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +2 -1
  142. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
  143. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs +2 -1
  144. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
  145. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
  146. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs.map +1 -1
  147. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +3 -1
  148. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
  149. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +3 -1
  150. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
  151. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
  152. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
  153. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  154. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
  155. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
  156. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.mjs.map +1 -1
  157. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js +4 -1
  158. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js.map +1 -1
  159. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs +4 -1
  160. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs.map +1 -1
  161. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +18 -3
  162. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
  163. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs +18 -3
  164. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs.map +1 -1
  165. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
  166. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
  167. package/dist/admin/admin/src/router.js.map +1 -1
  168. package/dist/admin/admin/src/router.mjs.map +1 -1
  169. package/dist/admin/admin/src/services/admin.js +11 -1
  170. package/dist/admin/admin/src/services/admin.js.map +1 -1
  171. package/dist/admin/admin/src/services/admin.mjs +11 -2
  172. package/dist/admin/admin/src/services/admin.mjs.map +1 -1
  173. package/dist/admin/admin/src/services/users.js.map +1 -1
  174. package/dist/admin/admin/src/services/users.mjs.map +1 -1
  175. package/dist/admin/admin/src/translations/en.json.js +71 -4
  176. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  177. package/dist/admin/admin/src/translations/en.json.mjs +71 -4
  178. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  179. package/dist/admin/admin/src/translations/eu.json.js +1 -1
  180. package/dist/admin/admin/src/translations/eu.json.mjs +1 -1
  181. package/dist/admin/admin/src/utils/browserStrapi.js +1 -1
  182. package/dist/admin/admin/src/utils/browserStrapi.js.map +1 -1
  183. package/dist/admin/admin/src/utils/browserStrapi.mjs +1 -1
  184. package/dist/admin/admin/src/utils/browserStrapi.mjs.map +1 -1
  185. package/dist/admin/admin/src/utils/cookies.js +7 -6
  186. package/dist/admin/admin/src/utils/cookies.js.map +1 -1
  187. package/dist/admin/admin/src/utils/cookies.mjs +7 -6
  188. package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
  189. package/dist/admin/admin/src/utils/getFetchClient.js +24 -0
  190. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  191. package/dist/admin/admin/src/utils/getFetchClient.mjs +24 -1
  192. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  193. package/dist/admin/admin/tests/utils.js +2 -1
  194. package/dist/admin/admin/tests/utils.js.map +1 -1
  195. package/dist/admin/admin/tests/utils.mjs +2 -1
  196. package/dist/admin/admin/tests/utils.mjs.map +1 -1
  197. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +52 -22
  198. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
  199. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +53 -23
  200. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
  201. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js +16 -29
  202. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js.map +1 -1
  203. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs +18 -31
  204. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs.map +1 -1
  205. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js +473 -0
  206. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js.map +1 -0
  207. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs +471 -0
  208. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs.map +1 -0
  209. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +2 -0
  210. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
  211. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +2 -0
  212. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
  213. package/dist/admin/index.js +1 -0
  214. package/dist/admin/index.js.map +1 -1
  215. package/dist/admin/index.mjs +1 -1
  216. package/dist/admin/shared/utils/auth-cookie-path.js +13 -10
  217. package/dist/admin/shared/utils/auth-cookie-path.js.map +1 -1
  218. package/dist/admin/shared/utils/auth-cookie-path.mjs +13 -10
  219. package/dist/admin/shared/utils/auth-cookie-path.mjs.map +1 -1
  220. package/dist/admin/shared/utils/get-project-type.js +49 -0
  221. package/dist/admin/shared/utils/get-project-type.js.map +1 -0
  222. package/dist/admin/shared/utils/get-project-type.mjs +46 -0
  223. package/dist/admin/shared/utils/get-project-type.mjs.map +1 -0
  224. package/dist/admin/src/components/Filters.d.ts +1 -1
  225. package/dist/admin/src/components/Form.d.ts +1 -1
  226. package/dist/admin/src/constants.d.ts +10 -0
  227. package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.d.ts +1 -1
  228. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.d.ts +1 -1
  229. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.d.ts +12 -0
  230. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.d.ts +14 -0
  231. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.d.ts +2 -0
  232. package/dist/admin/src/services/admin.d.ts +2 -2
  233. package/dist/admin/src/types/permissions.d.ts +1 -0
  234. package/dist/admin/src/utils/cookies.d.ts +7 -6
  235. package/dist/admin/src/utils/getFetchClient.d.ts +25 -0
  236. package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +29 -0
  237. package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.d.ts +6 -1
  238. package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.d.ts +2 -0
  239. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +2 -0
  240. package/dist/ee/server/src/audit-logs/entitlements.d.ts +8 -0
  241. package/dist/ee/server/src/audit-logs/entitlements.d.ts.map +1 -0
  242. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +16 -0
  243. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
  244. package/dist/ee/server/src/controllers/admin.d.ts +36 -10
  245. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  246. package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -1
  247. package/dist/ee/server/src/controllers/index.d.ts +36 -10
  248. package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
  249. package/dist/ee/server/src/index.d.ts +36 -10
  250. package/dist/ee/server/src/index.d.ts.map +1 -1
  251. package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -1
  252. package/dist/ee/server/src/validation/role.d.ts.map +1 -1
  253. package/dist/server/ee/server/src/audit-logs/entitlements.js +25 -0
  254. package/dist/server/ee/server/src/audit-logs/entitlements.js.map +1 -0
  255. package/dist/server/ee/server/src/audit-logs/entitlements.mjs +23 -0
  256. package/dist/server/ee/server/src/audit-logs/entitlements.mjs.map +1 -0
  257. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +20 -8
  258. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
  259. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +19 -9
  260. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
  261. package/dist/server/ee/server/src/audit-logs/utils/csv.js +3 -3
  262. package/dist/server/ee/server/src/audit-logs/utils/csv.js.map +1 -1
  263. package/dist/server/ee/server/src/audit-logs/utils/csv.mjs +3 -3
  264. package/dist/server/ee/server/src/audit-logs/utils/csv.mjs.map +1 -1
  265. package/dist/server/ee/server/src/controllers/admin.js +76 -3
  266. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  267. package/dist/server/ee/server/src/controllers/admin.mjs +76 -3
  268. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  269. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +28 -10
  270. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
  271. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs +28 -10
  272. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs.map +1 -1
  273. package/dist/server/ee/server/src/index.js +2 -0
  274. package/dist/server/ee/server/src/index.js.map +1 -1
  275. package/dist/server/ee/server/src/index.mjs +2 -0
  276. package/dist/server/ee/server/src/index.mjs.map +1 -1
  277. package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
  278. package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
  279. package/dist/server/ee/server/src/validation/role.js +4 -2
  280. package/dist/server/ee/server/src/validation/role.js.map +1 -1
  281. package/dist/server/ee/server/src/validation/role.mjs +4 -2
  282. package/dist/server/ee/server/src/validation/role.mjs.map +1 -1
  283. package/dist/server/server/src/ai/services/ai.js.map +1 -1
  284. package/dist/server/server/src/ai/services/ai.mjs.map +1 -1
  285. package/dist/server/server/src/audit-logs/auth.js +72 -0
  286. package/dist/server/server/src/audit-logs/auth.js.map +1 -0
  287. package/dist/server/server/src/audit-logs/auth.mjs +67 -0
  288. package/dist/server/server/src/audit-logs/auth.mjs.map +1 -0
  289. package/dist/server/server/src/config/admin-actions.js +7 -0
  290. package/dist/server/server/src/config/admin-actions.js.map +1 -1
  291. package/dist/server/server/src/config/admin-actions.mjs +7 -0
  292. package/dist/server/server/src/config/admin-actions.mjs.map +1 -1
  293. package/dist/server/server/src/controllers/admin.js +17 -12
  294. package/dist/server/server/src/controllers/admin.js.map +1 -1
  295. package/dist/server/server/src/controllers/admin.mjs +17 -12
  296. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  297. package/dist/server/server/src/controllers/authentication.js +34 -8
  298. package/dist/server/server/src/controllers/authentication.js.map +1 -1
  299. package/dist/server/server/src/controllers/authentication.mjs +34 -8
  300. package/dist/server/server/src/controllers/authentication.mjs.map +1 -1
  301. package/dist/server/server/src/domain/permission/index.js.map +1 -1
  302. package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
  303. package/dist/server/server/src/register.js +4 -0
  304. package/dist/server/server/src/register.js.map +1 -1
  305. package/dist/server/server/src/register.mjs +4 -0
  306. package/dist/server/server/src/register.mjs.map +1 -1
  307. package/dist/server/server/src/routes/admin.js +18 -0
  308. package/dist/server/server/src/routes/admin.js.map +1 -1
  309. package/dist/server/server/src/routes/admin.mjs +18 -0
  310. package/dist/server/server/src/routes/admin.mjs.map +1 -1
  311. package/dist/server/server/src/services/api-token.js +4 -8
  312. package/dist/server/server/src/services/api-token.js.map +1 -1
  313. package/dist/server/server/src/services/api-token.mjs +4 -8
  314. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  315. package/dist/server/server/src/services/auth.js +4 -2
  316. package/dist/server/server/src/services/auth.js.map +1 -1
  317. package/dist/server/server/src/services/auth.mjs +4 -3
  318. package/dist/server/server/src/services/auth.mjs.map +1 -1
  319. package/dist/server/server/src/services/constants.js +4 -0
  320. package/dist/server/server/src/services/constants.js.map +1 -1
  321. package/dist/server/server/src/services/constants.mjs +4 -0
  322. package/dist/server/server/src/services/constants.mjs.map +1 -1
  323. package/dist/server/server/src/services/debug-dump.js +173 -0
  324. package/dist/server/server/src/services/debug-dump.js.map +1 -0
  325. package/dist/server/server/src/services/debug-dump.mjs +166 -0
  326. package/dist/server/server/src/services/debug-dump.mjs.map +1 -0
  327. package/dist/server/server/src/services/index.js +3 -1
  328. package/dist/server/server/src/services/index.js.map +1 -1
  329. package/dist/server/server/src/services/index.mjs +3 -1
  330. package/dist/server/server/src/services/index.mjs.map +1 -1
  331. package/dist/server/server/src/services/permission/rename-fields.js.map +1 -1
  332. package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -1
  333. package/dist/server/server/src/services/permission/sections-builder/handlers.js.map +1 -1
  334. package/dist/server/server/src/services/permission/sections-builder/handlers.mjs.map +1 -1
  335. package/dist/server/server/src/services/role.js +8 -5
  336. package/dist/server/server/src/services/role.js.map +1 -1
  337. package/dist/server/server/src/services/role.mjs +8 -5
  338. package/dist/server/server/src/services/role.mjs.map +1 -1
  339. package/dist/server/server/src/utils/debug-dump/redact.js +197 -0
  340. package/dist/server/server/src/utils/debug-dump/redact.js.map +1 -0
  341. package/dist/server/server/src/utils/debug-dump/redact.mjs +194 -0
  342. package/dist/server/server/src/utils/debug-dump/redact.mjs.map +1 -0
  343. package/dist/server/server/src/validation/admin-tokens.js +4 -4
  344. package/dist/server/server/src/validation/admin-tokens.js.map +1 -1
  345. package/dist/server/server/src/validation/admin-tokens.mjs +4 -4
  346. package/dist/server/server/src/validation/admin-tokens.mjs.map +1 -1
  347. package/dist/server/server/src/validation/api-tokens.js +4 -4
  348. package/dist/server/server/src/validation/api-tokens.js.map +1 -1
  349. package/dist/server/server/src/validation/api-tokens.mjs +4 -4
  350. package/dist/server/server/src/validation/api-tokens.mjs.map +1 -1
  351. package/dist/server/server/src/validation/role.js +6 -4
  352. package/dist/server/server/src/validation/role.js.map +1 -1
  353. package/dist/server/server/src/validation/role.mjs +6 -4
  354. package/dist/server/server/src/validation/role.mjs.map +1 -1
  355. package/dist/server/server/src/validation/transfer/token.js +4 -4
  356. package/dist/server/server/src/validation/transfer/token.js.map +1 -1
  357. package/dist/server/server/src/validation/transfer/token.mjs +4 -4
  358. package/dist/server/server/src/validation/transfer/token.mjs.map +1 -1
  359. package/dist/server/shared/utils/auth-cookie-path.js +13 -10
  360. package/dist/server/shared/utils/auth-cookie-path.js.map +1 -1
  361. package/dist/server/shared/utils/auth-cookie-path.mjs +13 -10
  362. package/dist/server/shared/utils/auth-cookie-path.mjs.map +1 -1
  363. package/dist/server/shared/utils/get-project-type.js +49 -0
  364. package/dist/server/shared/utils/get-project-type.js.map +1 -0
  365. package/dist/server/shared/utils/get-project-type.mjs +46 -0
  366. package/dist/server/shared/utils/get-project-type.mjs.map +1 -0
  367. package/dist/server/shared/utils/session-auth.js +70 -3
  368. package/dist/server/shared/utils/session-auth.js.map +1 -1
  369. package/dist/server/shared/utils/session-auth.mjs +70 -4
  370. package/dist/server/shared/utils/session-auth.mjs.map +1 -1
  371. package/dist/server/src/ai/services/ai.d.ts.map +1 -1
  372. package/dist/server/src/audit-logs/auth.d.ts +72 -0
  373. package/dist/server/src/audit-logs/auth.d.ts.map +1 -0
  374. package/dist/server/src/config/admin-actions.d.ts.map +1 -1
  375. package/dist/server/src/controllers/admin.d.ts +3 -0
  376. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  377. package/dist/server/src/controllers/authentication.d.ts.map +1 -1
  378. package/dist/server/src/controllers/index.d.ts +3 -0
  379. package/dist/server/src/controllers/index.d.ts.map +1 -1
  380. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  381. package/dist/server/src/index.d.ts +8 -0
  382. package/dist/server/src/index.d.ts.map +1 -1
  383. package/dist/server/src/register.d.ts.map +1 -1
  384. package/dist/server/src/routes/admin.d.ts.map +1 -1
  385. package/dist/server/src/services/auth.d.ts +6 -0
  386. package/dist/server/src/services/auth.d.ts.map +1 -1
  387. package/dist/server/src/services/constants.d.ts +2 -0
  388. package/dist/server/src/services/constants.d.ts.map +1 -1
  389. package/dist/server/src/services/debug-dump.d.ts +9 -0
  390. package/dist/server/src/services/debug-dump.d.ts.map +1 -0
  391. package/dist/server/src/services/index.d.ts +5 -0
  392. package/dist/server/src/services/index.d.ts.map +1 -1
  393. package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -1
  394. package/dist/server/src/services/permission/sections-builder/handlers.d.ts.map +1 -1
  395. package/dist/server/src/services/role.d.ts.map +1 -1
  396. package/dist/server/src/utils/debug-dump/redact.d.ts +8 -0
  397. package/dist/server/src/utils/debug-dump/redact.d.ts.map +1 -0
  398. package/dist/server/src/validation/role.d.ts.map +1 -1
  399. package/dist/shared/contracts/admin.d.ts +106 -0
  400. package/dist/shared/contracts/admin.d.ts.map +1 -1
  401. package/dist/shared/contracts/transfer.d.ts.map +1 -1
  402. package/dist/shared/utils/__tests__/get-project-type.test.d.ts +1 -0
  403. package/dist/shared/utils/__tests__/get-project-type.test.d.ts.map +1 -0
  404. package/dist/shared/utils/auth-cookie-path.d.ts +13 -10
  405. package/dist/shared/utils/auth-cookie-path.d.ts.map +1 -1
  406. package/dist/shared/utils/get-project-type.d.ts +37 -0
  407. package/dist/shared/utils/get-project-type.d.ts.map +1 -0
  408. package/dist/shared/utils/session-auth.d.ts +16 -0
  409. package/dist/shared/utils/session-auth.d.ts.map +1 -1
  410. package/package.json +8 -8
  411. package/dist/admin/admin/src/utils/getProjectType.js +0 -22
  412. package/dist/admin/admin/src/utils/getProjectType.js.map +0 -1
  413. package/dist/admin/admin/src/utils/getProjectType.mjs +0 -20
  414. package/dist/admin/admin/src/utils/getProjectType.mjs.map +0 -1
  415. package/dist/admin/src/utils/getProjectType.d.ts +0 -16
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LicenseInfo.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.tsx"],"sourcesContent":["import {\n Divider,\n Flex,\n Status,\n Table,\n Tbody,\n Td,\n Th,\n Thead,\n Tooltip,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Check, ClockCounterClockwise, Cross, Information, WarningCircle } from '@strapi/icons';\nimport { useIntl, type MessageDescriptor } from 'react-intl';\n\nimport { PlanDetail } from '../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard';\nimport { useGetLicenseTrialTimeLeftQuery } from '../../../../../../../../admin/src/services/admin';\nimport { getLicensedPlan } from '../../../../../../../../shared/utils/get-project-type';\nimport { useLicenseLimits } from '../../../../../hooks/useLicenseLimits';\n\nimport { AdminSeatInfoEE } from './AdminSeatInfo';\nimport { AIUsage } from './AIUsage';\n\nimport type { GetLicenseLimitInformation } from '../../../../../../../../shared/contracts/admin';\n\n// Feature key -> display label. Labels themselves resolve through i18n; only the\n// mapping of known license feature keys lives here.\nconst FEATURE_LABELS: Record<string, MessageDescriptor> = {\n sso: { id: 'Settings.license.feature.sso', defaultMessage: 'Single Sign-On' },\n 'cms-advanced-preview': {\n id: 'Settings.license.feature.cms-advanced-preview',\n defaultMessage: 'Live Preview',\n },\n 'cms-content-releases': {\n id: 'Settings.license.feature.cms-content-releases',\n defaultMessage: 'Releases',\n },\n 'review-workflows': {\n id: 'Settings.license.feature.review-workflows',\n defaultMessage: 'Review Workflows',\n },\n 'cms-content-history': {\n id: 'Settings.license.feature.cms-content-history',\n defaultMessage: 'Content History',\n },\n 'audit-logs': { id: 'Settings.license.feature.audit-logs', defaultMessage: 'Audit Logs' },\n};\n\n// Entitlement limit key -> display label. Only used when a feature has more than one limit and\n// each value needs to be told apart; a single limit is rendered on its own, unlabelled.\nconst LIMIT_LABELS: Record<string, MessageDescriptor> = {\n numberOfWorkflows: {\n id: 'Settings.license.limit.numberOfWorkflows',\n defaultMessage: 'Workflows',\n },\n stagesPerWorkflow: {\n id: 'Settings.license.limit.stagesPerWorkflow',\n defaultMessage: 'Stages per workflow',\n },\n maximumReleases: { id: 'Settings.license.limit.maximumReleases', defaultMessage: 'Releases' },\n retentionDays: { id: 'Settings.license.limit.retentionDays', defaultMessage: 'Retention' },\n};\n\ntype License = NonNullable<GetLicenseLimitInformation.Response['data']>;\ntype PlanEntitlement = License['planEntitlements'][number];\ntype Limit = PlanEntitlement['limits'][number];\n\ntype StatusBadge = {\n variant: 'success' | 'danger' | 'warning' | 'alternative';\n label: MessageDescriptor;\n};\n\n/**\n * Shown instead of `Active` while a trial is running. Deliberately keyed on an active\n * licence: once a trial lapses the licence stops validating and `isTrial` goes false, so\n * \"In Trial\" would be claiming a subscription the instance no longer has.\n */\nconst TRIAL_BADGE: StatusBadge = {\n variant: 'alternative',\n label: { id: 'Settings.license.status.in-trial', defaultMessage: 'In Trial' },\n};\n\nconst STATUS_BADGE: Record<License['licenseStatus'], StatusBadge> = {\n active: {\n variant: 'success',\n label: { id: 'Settings.license.status.active', defaultMessage: 'Active' },\n },\n expired: {\n variant: 'danger',\n label: { id: 'Settings.license.status.expired', defaultMessage: 'Expired' },\n },\n unknown: {\n variant: 'warning',\n label: { id: 'Settings.license.status.unknown', defaultMessage: 'Unknown' },\n },\n // A license-gated component only mounts for EE instances, so `none` should never occur here\n // in practice. Fall back to the same treatment as `unknown` rather than rendering nothing.\n none: {\n variant: 'warning',\n label: { id: 'Settings.license.status.unknown', defaultMessage: 'Unknown' },\n },\n};\n\n/**\n * Absolute dates are rendered as `yyyy/mm/dd` rather than through `formatDate`, so the\n * value is unambiguous in every locale (a locale-ordered `03/04` could be either March 4th\n * or April 3rd). Relative values, like the last license check, stay relative per the design.\n */\nconst formatAbsoluteDate = (value: string | number): string => {\n const date = new Date(value);\n\n if (Number.isNaN(date.getTime())) {\n return '';\n }\n\n // UTC, not the local calendar: license dates are UTC-midnight instants, which local getters\n // turn into the previous day anywhere west of UTC.\n const month = `${date.getUTCMonth() + 1}`.padStart(2, '0');\n const day = `${date.getUTCDate()}`.padStart(2, '0');\n\n return `${date.getUTCFullYear()}/${month}/${day}`;\n};\n\nconst LicenseInfoEE = () => {\n const { formatMessage, formatRelativeTime } = useIntl();\n const { license, isLoading, isError } = useLicenseLimits();\n const { data: trialTimeLeft } = useGetLicenseTrialTimeLeftQuery(undefined, {\n skip: !license?.isTrial,\n });\n\n if (isLoading) {\n return null;\n }\n\n if (isError || !license) {\n return null;\n }\n\n const {\n licenseMode,\n licenseStatus,\n renewalDate,\n subscriptionId,\n lastRegistrySyncAt,\n expireAt,\n isTrial,\n planEntitlements,\n usingCachedLicense,\n registrySyncError,\n registrySyncErrorKind,\n } = license;\n\n const licensedPlan = getLicensedPlan({\n licenseStatus,\n type: license.type,\n planPriceId: license.planPriceId,\n });\n const isGrowth = licensedPlan === 'Growth';\n\n // Retention is shown in days (the design lists \"30 days retention\" / \"90 days\n // retention\"); only sentinel-sized values collapse to years, so a licence with\n // e.g. 1500 days does not read as a meaningless number.\n const formatDays = (value: number): string => {\n if (value >= 365) {\n return formatMessage(\n {\n id: 'Settings.license.limit.years',\n defaultMessage: '~{years, plural, one {# year} other {# years}}',\n },\n { years: Math.round(value / 365) }\n );\n }\n return formatMessage(\n {\n id: 'Settings.license.limit.days',\n defaultMessage: '{days, plural, one {# day retention} other {# days retention}}',\n },\n { days: value }\n );\n };\n\n const formatLimitValue = (limit: Limit): string => {\n if (limit.value === null) {\n return formatMessage({ id: 'Settings.license.unlimited', defaultMessage: 'Unlimited' });\n }\n if (limit.unit === 'days') {\n return formatDays(limit.value);\n }\n return formatMessage(\n { id: 'Settings.license.limit.count', defaultMessage: '{value, number}' },\n { value: limit.value }\n );\n };\n\n // Shown relative (\"2 hours ago\") rather than as an absolute timestamp, matching how the rest of\n // the admin surfaces recency.\n const formatLastCheck = (timestamp: number | null): string => {\n if (typeof timestamp !== 'number') {\n return formatMessage({ id: 'Settings.license.checkin.never', defaultMessage: 'Not yet' });\n }\n const diffMs = timestamp - Date.now();\n // Minutes decide the unit: rounding hours first turned 31 minutes into \"1 hour ago\".\n const diffMinutes = Math.round(diffMs / (60 * 1000));\n if (Math.abs(diffMinutes) < 60) {\n return formatRelativeTime(diffMinutes, 'minute', { numeric: 'auto' });\n }\n return formatRelativeTime(Math.round(diffMs / (60 * 60 * 1000)), 'hour', { numeric: 'auto' });\n };\n\n const currentPlanValue = licenseMode === 'offline' ? `${licensedPlan} - offline` : licensedPlan;\n\n const dateLabel: MessageDescriptor = isTrial\n ? { id: 'Settings.license.trial-end-date', defaultMessage: 'trial end date' }\n : { id: 'Settings.license.renewal-date', defaultMessage: 'renewal date' };\n\n const rawDateValue = isTrial ? (trialTimeLeft?.trialEndsAt ?? null) : renewalDate;\n\n const formattedDate = rawDateValue ? formatAbsoluteDate(rawDateValue) : null;\n\n const statusBadge =\n licenseStatus === 'active' && isTrial ? TRIAL_BADGE : STATUS_BADGE[licenseStatus];\n\n /**\n * `unknown` covers two very different situations that used to render identically: we could\n * not reach the registry (the licence is probably fine, we are running on the cached copy),\n * or the registry answered and refused the licence. Only the second one needs the customer\n * to do something, so say which it is.\n */\n const registryNotice: MessageDescriptor | null = usingCachedLicense\n ? {\n id: 'Settings.license.registry.cached',\n defaultMessage:\n \"Couldn't reach the license registry. Showing the last license we retrieved.\",\n }\n : // An instance that has never reached the registry has nothing cached, so\n // `usingCachedLicense` is false even though the cause was an outage rather than a\n // refusal. Read the recorded kind instead of inferring the cause from the cache.\n registrySyncErrorKind === 'unreachable' && licenseStatus !== 'active'\n ? {\n id: 'Settings.license.registry.unreachable',\n defaultMessage: \"Couldn't reach the license registry.\",\n }\n : registrySyncError && licenseStatus !== 'active'\n ? {\n id: 'Settings.license.registry.rejected',\n defaultMessage: 'The license registry could not validate this license.',\n }\n : null;\n\n const checkinLine =\n licenseMode === 'offline'\n ? expireAt\n ? formatMessage(\n { id: 'Settings.license.valid-until', defaultMessage: 'License valid until {date}' },\n { date: formatAbsoluteDate(expireAt) }\n )\n : null\n : formatMessage(\n {\n id: 'Settings.license.last-check',\n defaultMessage: 'Last license validity check {relative}',\n },\n { relative: formatLastCheck(lastRegistrySyncAt) }\n );\n\n const renderLimitCell = (entitlement: PlanEntitlement) => {\n const { available, limits } = entitlement;\n\n if (limits.length === 0) {\n return available ? (\n <Check\n aria-label={formatMessage({ id: 'Settings.license.yes', defaultMessage: 'Yes' })}\n fill=\"success600\"\n />\n ) : (\n <Cross\n aria-label={formatMessage({ id: 'Settings.license.no', defaultMessage: 'No' })}\n fill=\"danger600\"\n />\n );\n }\n\n if (limits.length === 1) {\n return <Typography>{formatLimitValue(limits[0])}</Typography>;\n }\n\n return (\n <Flex direction=\"column\" alignItems=\"end\" gap={1}>\n {limits.map((limit) => (\n <Typography key={limit.key} variant=\"pi\">\n {LIMIT_LABELS[limit.key]\n ? `${formatMessage(LIMIT_LABELS[limit.key])}: ${formatLimitValue(limit)}`\n : formatLimitValue(limit)}\n </Typography>\n ))}\n </Flex>\n );\n };\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex alignItems=\"flex-start\" gap={5} tag=\"dl\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={5} flex=\"1\">\n <PlanDetail\n label={{ id: 'Settings.application.plan.current', defaultMessage: 'current plan' }}\n value={currentPlanValue}\n />\n {!isGrowth && formattedDate && <PlanDetail label={dateLabel} value={formattedDate} />}\n {/* Not gated on Growth: Enterprise licences can carry a seat limit too. A licence\n without one (including an older licence the registry has not re-issued yet) has a\n null `permittedSeats`, and the component already renders nothing in that case. */}\n <AdminSeatInfoEE />\n {/* Any plan with AI, as before this moved onto the Plan card (AIUsage renders nothing\n without it). The `ai.enabled` gate is kept: without it an instance with AI\n disabled requests usage it cannot have. */}\n {window.strapi.ai?.enabled !== false && <AIUsage isTrial={isTrial} />}\n </Flex>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={5} flex=\"1\">\n <Flex direction=\"column\" alignItems=\"start\" gap={2}>\n <Flex gap={2} alignItems=\"center\" tag=\"dt\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.license.status',\n defaultMessage: 'license status',\n })}\n </Typography>\n <Tooltip\n label={formatMessage({\n id: 'Settings.license.status-tooltip',\n defaultMessage:\n 'Strapi checks the license status every 12 hours and on every build.',\n })}\n >\n <Information width=\"1.4rem\" height=\"1.4rem\" fill=\"neutral500\" />\n </Tooltip>\n </Flex>\n <Flex direction=\"column\" alignItems=\"start\" gap={2} tag=\"dd\">\n <Status size=\"S\" variant={statusBadge.variant}>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {formatMessage(statusBadge.label)}\n </Typography>\n </Status>\n {checkinLine && (\n <Flex gap={1} alignItems=\"center\">\n <ClockCounterClockwise width=\"1.2rem\" height=\"1.2rem\" fill=\"neutral500\" />\n <Typography variant=\"pi\" textColor=\"neutral500\">\n {checkinLine}\n </Typography>\n </Flex>\n )}\n {registryNotice && (\n <Flex gap={1} alignItems=\"center\">\n <WarningCircle width=\"1.2rem\" height=\"1.2rem\" fill=\"warning600\" />\n <Typography variant=\"pi\" textColor=\"warning600\">\n {formatMessage(registryNotice)}\n </Typography>\n </Flex>\n )}\n </Flex>\n </Flex>\n {isGrowth && formattedDate && <PlanDetail label={dateLabel} value={formattedDate} />}\n {subscriptionId && (\n <PlanDetail\n label={{ id: 'Settings.license.subscription', defaultMessage: 'Subscription ID' }}\n value={subscriptionId}\n />\n )}\n </Flex>\n </Flex>\n\n {planEntitlements.length > 0 && (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Divider />\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.license.entitlements',\n defaultMessage: 'plan entitlements',\n })}\n </Typography>\n <Table colCount={2} rowCount={planEntitlements.length}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\">\n {formatMessage({ id: 'Settings.license.feature', defaultMessage: 'Feature' })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({ id: 'Settings.license.limit', defaultMessage: 'Limit' })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {planEntitlements.map((entitlement) => {\n const label = FEATURE_LABELS[entitlement.feature];\n\n return (\n <Tr key={entitlement.feature}>\n <Td>\n <Typography>{label ? formatMessage(label) : entitlement.feature}</Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\">{renderLimitCell(entitlement)}</Flex>\n </Td>\n </Tr>\n );\n })}\n </Tbody>\n </Table>\n </Flex>\n )}\n </Flex>\n );\n};\n\nexport { LicenseInfoEE };\n"],"names":["FEATURE_LABELS","sso","id","defaultMessage","LIMIT_LABELS","numberOfWorkflows","stagesPerWorkflow","maximumReleases","retentionDays","TRIAL_BADGE","variant","label","STATUS_BADGE","active","expired","unknown","none","formatAbsoluteDate","value","date","Date","Number","isNaN","getTime","month","getUTCMonth","padStart","day","getUTCDate","getUTCFullYear","LicenseInfoEE","formatMessage","formatRelativeTime","useIntl","license","isLoading","isError","useLicenseLimits","data","trialTimeLeft","useGetLicenseTrialTimeLeftQuery","undefined","skip","isTrial","licenseMode","licenseStatus","renewalDate","subscriptionId","lastRegistrySyncAt","expireAt","planEntitlements","usingCachedLicense","registrySyncError","registrySyncErrorKind","licensedPlan","getLicensedPlan","type","planPriceId","isGrowth","formatDays","years","Math","round","days","formatLimitValue","limit","unit","formatLastCheck","timestamp","diffMs","now","diffMinutes","abs","numeric","currentPlanValue","dateLabel","rawDateValue","trialEndsAt","formattedDate","statusBadge","registryNotice","checkinLine","relative","renderLimitCell","entitlement","available","limits","length","_jsx","Check","aria-label","fill","Cross","Typography","Flex","direction","alignItems","gap","map","key","_jsxs","tag","flex","PlanDetail","AdminSeatInfoEE","window","strapi","ai","enabled","AIUsage","textColor","Tooltip","Information","width","height","Status","size","fontWeight","ClockCounterClockwise","WarningCircle","Divider","Table","colCount","rowCount","Thead","Tr","Th","VisuallyHidden","Tbody","feature","Td","justifyContent"],"mappings":"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"}
@@ -0,0 +1,471 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { Flex, Typography, Tooltip, Status, Divider, Table, Thead, Tr, Th, VisuallyHidden, Tbody, Td } from '@strapi/design-system';
3
+ import { Information, ClockCounterClockwise, WarningCircle, Check, Cross } from '@strapi/icons';
4
+ import { useIntl } from 'react-intl';
5
+ import { PlanDetail } from '../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs';
6
+ import { useGetLicenseTrialTimeLeftQuery } from '../../../../../../../../admin/src/services/admin.mjs';
7
+ import { getLicensedPlan } from '../../../../../../../../shared/utils/get-project-type.mjs';
8
+ import { useLicenseLimits } from '../../../../../hooks/useLicenseLimits.mjs';
9
+ import { AdminSeatInfoEE } from './AdminSeatInfo.mjs';
10
+ import { AIUsage } from './AIUsage.mjs';
11
+
12
+ // Feature key -> display label. Labels themselves resolve through i18n; only the
13
+ // mapping of known license feature keys lives here.
14
+ const FEATURE_LABELS = {
15
+ sso: {
16
+ id: 'Settings.license.feature.sso',
17
+ defaultMessage: 'Single Sign-On'
18
+ },
19
+ 'cms-advanced-preview': {
20
+ id: 'Settings.license.feature.cms-advanced-preview',
21
+ defaultMessage: 'Live Preview'
22
+ },
23
+ 'cms-content-releases': {
24
+ id: 'Settings.license.feature.cms-content-releases',
25
+ defaultMessage: 'Releases'
26
+ },
27
+ 'review-workflows': {
28
+ id: 'Settings.license.feature.review-workflows',
29
+ defaultMessage: 'Review Workflows'
30
+ },
31
+ 'cms-content-history': {
32
+ id: 'Settings.license.feature.cms-content-history',
33
+ defaultMessage: 'Content History'
34
+ },
35
+ 'audit-logs': {
36
+ id: 'Settings.license.feature.audit-logs',
37
+ defaultMessage: 'Audit Logs'
38
+ }
39
+ };
40
+ // Entitlement limit key -> display label. Only used when a feature has more than one limit and
41
+ // each value needs to be told apart; a single limit is rendered on its own, unlabelled.
42
+ const LIMIT_LABELS = {
43
+ numberOfWorkflows: {
44
+ id: 'Settings.license.limit.numberOfWorkflows',
45
+ defaultMessage: 'Workflows'
46
+ },
47
+ stagesPerWorkflow: {
48
+ id: 'Settings.license.limit.stagesPerWorkflow',
49
+ defaultMessage: 'Stages per workflow'
50
+ },
51
+ maximumReleases: {
52
+ id: 'Settings.license.limit.maximumReleases',
53
+ defaultMessage: 'Releases'
54
+ },
55
+ retentionDays: {
56
+ id: 'Settings.license.limit.retentionDays',
57
+ defaultMessage: 'Retention'
58
+ }
59
+ };
60
+ /**
61
+ * Shown instead of `Active` while a trial is running. Deliberately keyed on an active
62
+ * licence: once a trial lapses the licence stops validating and `isTrial` goes false, so
63
+ * "In Trial" would be claiming a subscription the instance no longer has.
64
+ */ const TRIAL_BADGE = {
65
+ variant: 'alternative',
66
+ label: {
67
+ id: 'Settings.license.status.in-trial',
68
+ defaultMessage: 'In Trial'
69
+ }
70
+ };
71
+ const STATUS_BADGE = {
72
+ active: {
73
+ variant: 'success',
74
+ label: {
75
+ id: 'Settings.license.status.active',
76
+ defaultMessage: 'Active'
77
+ }
78
+ },
79
+ expired: {
80
+ variant: 'danger',
81
+ label: {
82
+ id: 'Settings.license.status.expired',
83
+ defaultMessage: 'Expired'
84
+ }
85
+ },
86
+ unknown: {
87
+ variant: 'warning',
88
+ label: {
89
+ id: 'Settings.license.status.unknown',
90
+ defaultMessage: 'Unknown'
91
+ }
92
+ },
93
+ // A license-gated component only mounts for EE instances, so `none` should never occur here
94
+ // in practice. Fall back to the same treatment as `unknown` rather than rendering nothing.
95
+ none: {
96
+ variant: 'warning',
97
+ label: {
98
+ id: 'Settings.license.status.unknown',
99
+ defaultMessage: 'Unknown'
100
+ }
101
+ }
102
+ };
103
+ /**
104
+ * Absolute dates are rendered as `yyyy/mm/dd` rather than through `formatDate`, so the
105
+ * value is unambiguous in every locale (a locale-ordered `03/04` could be either March 4th
106
+ * or April 3rd). Relative values, like the last license check, stay relative per the design.
107
+ */ const formatAbsoluteDate = (value)=>{
108
+ const date = new Date(value);
109
+ if (Number.isNaN(date.getTime())) {
110
+ return '';
111
+ }
112
+ // UTC, not the local calendar: license dates are UTC-midnight instants, which local getters
113
+ // turn into the previous day anywhere west of UTC.
114
+ const month = `${date.getUTCMonth() + 1}`.padStart(2, '0');
115
+ const day = `${date.getUTCDate()}`.padStart(2, '0');
116
+ return `${date.getUTCFullYear()}/${month}/${day}`;
117
+ };
118
+ const LicenseInfoEE = ()=>{
119
+ const { formatMessage, formatRelativeTime } = useIntl();
120
+ const { license, isLoading, isError } = useLicenseLimits();
121
+ const { data: trialTimeLeft } = useGetLicenseTrialTimeLeftQuery(undefined, {
122
+ skip: !license?.isTrial
123
+ });
124
+ if (isLoading) {
125
+ return null;
126
+ }
127
+ if (isError || !license) {
128
+ return null;
129
+ }
130
+ const { licenseMode, licenseStatus, renewalDate, subscriptionId, lastRegistrySyncAt, expireAt, isTrial, planEntitlements, usingCachedLicense, registrySyncError, registrySyncErrorKind } = license;
131
+ const licensedPlan = getLicensedPlan({
132
+ licenseStatus,
133
+ type: license.type,
134
+ planPriceId: license.planPriceId
135
+ });
136
+ const isGrowth = licensedPlan === 'Growth';
137
+ // Retention is shown in days (the design lists "30 days retention" / "90 days
138
+ // retention"); only sentinel-sized values collapse to years, so a licence with
139
+ // e.g. 1500 days does not read as a meaningless number.
140
+ const formatDays = (value)=>{
141
+ if (value >= 365) {
142
+ return formatMessage({
143
+ id: 'Settings.license.limit.years',
144
+ defaultMessage: '~{years, plural, one {# year} other {# years}}'
145
+ }, {
146
+ years: Math.round(value / 365)
147
+ });
148
+ }
149
+ return formatMessage({
150
+ id: 'Settings.license.limit.days',
151
+ defaultMessage: '{days, plural, one {# day retention} other {# days retention}}'
152
+ }, {
153
+ days: value
154
+ });
155
+ };
156
+ const formatLimitValue = (limit)=>{
157
+ if (limit.value === null) {
158
+ return formatMessage({
159
+ id: 'Settings.license.unlimited',
160
+ defaultMessage: 'Unlimited'
161
+ });
162
+ }
163
+ if (limit.unit === 'days') {
164
+ return formatDays(limit.value);
165
+ }
166
+ return formatMessage({
167
+ id: 'Settings.license.limit.count',
168
+ defaultMessage: '{value, number}'
169
+ }, {
170
+ value: limit.value
171
+ });
172
+ };
173
+ // Shown relative ("2 hours ago") rather than as an absolute timestamp, matching how the rest of
174
+ // the admin surfaces recency.
175
+ const formatLastCheck = (timestamp)=>{
176
+ if (typeof timestamp !== 'number') {
177
+ return formatMessage({
178
+ id: 'Settings.license.checkin.never',
179
+ defaultMessage: 'Not yet'
180
+ });
181
+ }
182
+ const diffMs = timestamp - Date.now();
183
+ // Minutes decide the unit: rounding hours first turned 31 minutes into "1 hour ago".
184
+ const diffMinutes = Math.round(diffMs / (60 * 1000));
185
+ if (Math.abs(diffMinutes) < 60) {
186
+ return formatRelativeTime(diffMinutes, 'minute', {
187
+ numeric: 'auto'
188
+ });
189
+ }
190
+ return formatRelativeTime(Math.round(diffMs / (60 * 60 * 1000)), 'hour', {
191
+ numeric: 'auto'
192
+ });
193
+ };
194
+ const currentPlanValue = licenseMode === 'offline' ? `${licensedPlan} - offline` : licensedPlan;
195
+ const dateLabel = isTrial ? {
196
+ id: 'Settings.license.trial-end-date',
197
+ defaultMessage: 'trial end date'
198
+ } : {
199
+ id: 'Settings.license.renewal-date',
200
+ defaultMessage: 'renewal date'
201
+ };
202
+ const rawDateValue = isTrial ? trialTimeLeft?.trialEndsAt ?? null : renewalDate;
203
+ const formattedDate = rawDateValue ? formatAbsoluteDate(rawDateValue) : null;
204
+ const statusBadge = licenseStatus === 'active' && isTrial ? TRIAL_BADGE : STATUS_BADGE[licenseStatus];
205
+ /**
206
+ * `unknown` covers two very different situations that used to render identically: we could
207
+ * not reach the registry (the licence is probably fine, we are running on the cached copy),
208
+ * or the registry answered and refused the licence. Only the second one needs the customer
209
+ * to do something, so say which it is.
210
+ */ const registryNotice = usingCachedLicense ? {
211
+ id: 'Settings.license.registry.cached',
212
+ defaultMessage: "Couldn't reach the license registry. Showing the last license we retrieved."
213
+ } : // `usingCachedLicense` is false even though the cause was an outage rather than a
214
+ // refusal. Read the recorded kind instead of inferring the cause from the cache.
215
+ registrySyncErrorKind === 'unreachable' && licenseStatus !== 'active' ? {
216
+ id: 'Settings.license.registry.unreachable',
217
+ defaultMessage: "Couldn't reach the license registry."
218
+ } : registrySyncError && licenseStatus !== 'active' ? {
219
+ id: 'Settings.license.registry.rejected',
220
+ defaultMessage: 'The license registry could not validate this license.'
221
+ } : null;
222
+ const checkinLine = licenseMode === 'offline' ? expireAt ? formatMessage({
223
+ id: 'Settings.license.valid-until',
224
+ defaultMessage: 'License valid until {date}'
225
+ }, {
226
+ date: formatAbsoluteDate(expireAt)
227
+ }) : null : formatMessage({
228
+ id: 'Settings.license.last-check',
229
+ defaultMessage: 'Last license validity check {relative}'
230
+ }, {
231
+ relative: formatLastCheck(lastRegistrySyncAt)
232
+ });
233
+ const renderLimitCell = (entitlement)=>{
234
+ const { available, limits } = entitlement;
235
+ if (limits.length === 0) {
236
+ return available ? /*#__PURE__*/ jsx(Check, {
237
+ "aria-label": formatMessage({
238
+ id: 'Settings.license.yes',
239
+ defaultMessage: 'Yes'
240
+ }),
241
+ fill: "success600"
242
+ }) : /*#__PURE__*/ jsx(Cross, {
243
+ "aria-label": formatMessage({
244
+ id: 'Settings.license.no',
245
+ defaultMessage: 'No'
246
+ }),
247
+ fill: "danger600"
248
+ });
249
+ }
250
+ if (limits.length === 1) {
251
+ return /*#__PURE__*/ jsx(Typography, {
252
+ children: formatLimitValue(limits[0])
253
+ });
254
+ }
255
+ return /*#__PURE__*/ jsx(Flex, {
256
+ direction: "column",
257
+ alignItems: "end",
258
+ gap: 1,
259
+ children: limits.map((limit)=>/*#__PURE__*/ jsx(Typography, {
260
+ variant: "pi",
261
+ children: LIMIT_LABELS[limit.key] ? `${formatMessage(LIMIT_LABELS[limit.key])}: ${formatLimitValue(limit)}` : formatLimitValue(limit)
262
+ }, limit.key))
263
+ });
264
+ };
265
+ return /*#__PURE__*/ jsxs(Flex, {
266
+ direction: "column",
267
+ alignItems: "stretch",
268
+ gap: 6,
269
+ children: [
270
+ /*#__PURE__*/ jsxs(Flex, {
271
+ alignItems: "flex-start",
272
+ gap: 5,
273
+ tag: "dl",
274
+ children: [
275
+ /*#__PURE__*/ jsxs(Flex, {
276
+ direction: "column",
277
+ alignItems: "stretch",
278
+ gap: 5,
279
+ flex: "1",
280
+ children: [
281
+ /*#__PURE__*/ jsx(PlanDetail, {
282
+ label: {
283
+ id: 'Settings.application.plan.current',
284
+ defaultMessage: 'current plan'
285
+ },
286
+ value: currentPlanValue
287
+ }),
288
+ !isGrowth && formattedDate && /*#__PURE__*/ jsx(PlanDetail, {
289
+ label: dateLabel,
290
+ value: formattedDate
291
+ }),
292
+ /*#__PURE__*/ jsx(AdminSeatInfoEE, {}),
293
+ window.strapi.ai?.enabled !== false && /*#__PURE__*/ jsx(AIUsage, {
294
+ isTrial: isTrial
295
+ })
296
+ ]
297
+ }),
298
+ /*#__PURE__*/ jsxs(Flex, {
299
+ direction: "column",
300
+ alignItems: "stretch",
301
+ gap: 5,
302
+ flex: "1",
303
+ children: [
304
+ /*#__PURE__*/ jsxs(Flex, {
305
+ direction: "column",
306
+ alignItems: "start",
307
+ gap: 2,
308
+ children: [
309
+ /*#__PURE__*/ jsxs(Flex, {
310
+ gap: 2,
311
+ alignItems: "center",
312
+ tag: "dt",
313
+ children: [
314
+ /*#__PURE__*/ jsx(Typography, {
315
+ variant: "sigma",
316
+ textColor: "neutral600",
317
+ children: formatMessage({
318
+ id: 'Settings.license.status',
319
+ defaultMessage: 'license status'
320
+ })
321
+ }),
322
+ /*#__PURE__*/ jsx(Tooltip, {
323
+ label: formatMessage({
324
+ id: 'Settings.license.status-tooltip',
325
+ defaultMessage: 'Strapi checks the license status every 12 hours and on every build.'
326
+ }),
327
+ children: /*#__PURE__*/ jsx(Information, {
328
+ width: "1.4rem",
329
+ height: "1.4rem",
330
+ fill: "neutral500"
331
+ })
332
+ })
333
+ ]
334
+ }),
335
+ /*#__PURE__*/ jsxs(Flex, {
336
+ direction: "column",
337
+ alignItems: "start",
338
+ gap: 2,
339
+ tag: "dd",
340
+ children: [
341
+ /*#__PURE__*/ jsx(Status, {
342
+ size: "S",
343
+ variant: statusBadge.variant,
344
+ children: /*#__PURE__*/ jsx(Typography, {
345
+ variant: "omega",
346
+ fontWeight: "bold",
347
+ children: formatMessage(statusBadge.label)
348
+ })
349
+ }),
350
+ checkinLine && /*#__PURE__*/ jsxs(Flex, {
351
+ gap: 1,
352
+ alignItems: "center",
353
+ children: [
354
+ /*#__PURE__*/ jsx(ClockCounterClockwise, {
355
+ width: "1.2rem",
356
+ height: "1.2rem",
357
+ fill: "neutral500"
358
+ }),
359
+ /*#__PURE__*/ jsx(Typography, {
360
+ variant: "pi",
361
+ textColor: "neutral500",
362
+ children: checkinLine
363
+ })
364
+ ]
365
+ }),
366
+ registryNotice && /*#__PURE__*/ jsxs(Flex, {
367
+ gap: 1,
368
+ alignItems: "center",
369
+ children: [
370
+ /*#__PURE__*/ jsx(WarningCircle, {
371
+ width: "1.2rem",
372
+ height: "1.2rem",
373
+ fill: "warning600"
374
+ }),
375
+ /*#__PURE__*/ jsx(Typography, {
376
+ variant: "pi",
377
+ textColor: "warning600",
378
+ children: formatMessage(registryNotice)
379
+ })
380
+ ]
381
+ })
382
+ ]
383
+ })
384
+ ]
385
+ }),
386
+ isGrowth && formattedDate && /*#__PURE__*/ jsx(PlanDetail, {
387
+ label: dateLabel,
388
+ value: formattedDate
389
+ }),
390
+ subscriptionId && /*#__PURE__*/ jsx(PlanDetail, {
391
+ label: {
392
+ id: 'Settings.license.subscription',
393
+ defaultMessage: 'Subscription ID'
394
+ },
395
+ value: subscriptionId
396
+ })
397
+ ]
398
+ })
399
+ ]
400
+ }),
401
+ planEntitlements.length > 0 && /*#__PURE__*/ jsxs(Flex, {
402
+ direction: "column",
403
+ alignItems: "stretch",
404
+ gap: 4,
405
+ children: [
406
+ /*#__PURE__*/ jsx(Divider, {}),
407
+ /*#__PURE__*/ jsx(Typography, {
408
+ variant: "sigma",
409
+ textColor: "neutral600",
410
+ children: formatMessage({
411
+ id: 'Settings.license.entitlements',
412
+ defaultMessage: 'plan entitlements'
413
+ })
414
+ }),
415
+ /*#__PURE__*/ jsxs(Table, {
416
+ colCount: 2,
417
+ rowCount: planEntitlements.length,
418
+ children: [
419
+ /*#__PURE__*/ jsx(Thead, {
420
+ children: /*#__PURE__*/ jsxs(Tr, {
421
+ children: [
422
+ /*#__PURE__*/ jsx(Th, {
423
+ children: /*#__PURE__*/ jsx(Typography, {
424
+ variant: "sigma",
425
+ children: formatMessage({
426
+ id: 'Settings.license.feature',
427
+ defaultMessage: 'Feature'
428
+ })
429
+ })
430
+ }),
431
+ /*#__PURE__*/ jsx(Th, {
432
+ children: /*#__PURE__*/ jsx(VisuallyHidden, {
433
+ children: formatMessage({
434
+ id: 'Settings.license.limit',
435
+ defaultMessage: 'Limit'
436
+ })
437
+ })
438
+ })
439
+ ]
440
+ })
441
+ }),
442
+ /*#__PURE__*/ jsx(Tbody, {
443
+ children: planEntitlements.map((entitlement)=>{
444
+ const label = FEATURE_LABELS[entitlement.feature];
445
+ return /*#__PURE__*/ jsxs(Tr, {
446
+ children: [
447
+ /*#__PURE__*/ jsx(Td, {
448
+ children: /*#__PURE__*/ jsx(Typography, {
449
+ children: label ? formatMessage(label) : entitlement.feature
450
+ })
451
+ }),
452
+ /*#__PURE__*/ jsx(Td, {
453
+ children: /*#__PURE__*/ jsx(Flex, {
454
+ justifyContent: "flex-end",
455
+ children: renderLimitCell(entitlement)
456
+ })
457
+ })
458
+ ]
459
+ }, entitlement.feature);
460
+ })
461
+ })
462
+ ]
463
+ })
464
+ ]
465
+ })
466
+ ]
467
+ });
468
+ };
469
+
470
+ export { LicenseInfoEE };
471
+ //# sourceMappingURL=LicenseInfo.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LicenseInfo.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.tsx"],"sourcesContent":["import {\n Divider,\n Flex,\n Status,\n Table,\n Tbody,\n Td,\n Th,\n Thead,\n Tooltip,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Check, ClockCounterClockwise, Cross, Information, WarningCircle } from '@strapi/icons';\nimport { useIntl, type MessageDescriptor } from 'react-intl';\n\nimport { PlanDetail } from '../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard';\nimport { useGetLicenseTrialTimeLeftQuery } from '../../../../../../../../admin/src/services/admin';\nimport { getLicensedPlan } from '../../../../../../../../shared/utils/get-project-type';\nimport { useLicenseLimits } from '../../../../../hooks/useLicenseLimits';\n\nimport { AdminSeatInfoEE } from './AdminSeatInfo';\nimport { AIUsage } from './AIUsage';\n\nimport type { GetLicenseLimitInformation } from '../../../../../../../../shared/contracts/admin';\n\n// Feature key -> display label. Labels themselves resolve through i18n; only the\n// mapping of known license feature keys lives here.\nconst FEATURE_LABELS: Record<string, MessageDescriptor> = {\n sso: { id: 'Settings.license.feature.sso', defaultMessage: 'Single Sign-On' },\n 'cms-advanced-preview': {\n id: 'Settings.license.feature.cms-advanced-preview',\n defaultMessage: 'Live Preview',\n },\n 'cms-content-releases': {\n id: 'Settings.license.feature.cms-content-releases',\n defaultMessage: 'Releases',\n },\n 'review-workflows': {\n id: 'Settings.license.feature.review-workflows',\n defaultMessage: 'Review Workflows',\n },\n 'cms-content-history': {\n id: 'Settings.license.feature.cms-content-history',\n defaultMessage: 'Content History',\n },\n 'audit-logs': { id: 'Settings.license.feature.audit-logs', defaultMessage: 'Audit Logs' },\n};\n\n// Entitlement limit key -> display label. Only used when a feature has more than one limit and\n// each value needs to be told apart; a single limit is rendered on its own, unlabelled.\nconst LIMIT_LABELS: Record<string, MessageDescriptor> = {\n numberOfWorkflows: {\n id: 'Settings.license.limit.numberOfWorkflows',\n defaultMessage: 'Workflows',\n },\n stagesPerWorkflow: {\n id: 'Settings.license.limit.stagesPerWorkflow',\n defaultMessage: 'Stages per workflow',\n },\n maximumReleases: { id: 'Settings.license.limit.maximumReleases', defaultMessage: 'Releases' },\n retentionDays: { id: 'Settings.license.limit.retentionDays', defaultMessage: 'Retention' },\n};\n\ntype License = NonNullable<GetLicenseLimitInformation.Response['data']>;\ntype PlanEntitlement = License['planEntitlements'][number];\ntype Limit = PlanEntitlement['limits'][number];\n\ntype StatusBadge = {\n variant: 'success' | 'danger' | 'warning' | 'alternative';\n label: MessageDescriptor;\n};\n\n/**\n * Shown instead of `Active` while a trial is running. Deliberately keyed on an active\n * licence: once a trial lapses the licence stops validating and `isTrial` goes false, so\n * \"In Trial\" would be claiming a subscription the instance no longer has.\n */\nconst TRIAL_BADGE: StatusBadge = {\n variant: 'alternative',\n label: { id: 'Settings.license.status.in-trial', defaultMessage: 'In Trial' },\n};\n\nconst STATUS_BADGE: Record<License['licenseStatus'], StatusBadge> = {\n active: {\n variant: 'success',\n label: { id: 'Settings.license.status.active', defaultMessage: 'Active' },\n },\n expired: {\n variant: 'danger',\n label: { id: 'Settings.license.status.expired', defaultMessage: 'Expired' },\n },\n unknown: {\n variant: 'warning',\n label: { id: 'Settings.license.status.unknown', defaultMessage: 'Unknown' },\n },\n // A license-gated component only mounts for EE instances, so `none` should never occur here\n // in practice. Fall back to the same treatment as `unknown` rather than rendering nothing.\n none: {\n variant: 'warning',\n label: { id: 'Settings.license.status.unknown', defaultMessage: 'Unknown' },\n },\n};\n\n/**\n * Absolute dates are rendered as `yyyy/mm/dd` rather than through `formatDate`, so the\n * value is unambiguous in every locale (a locale-ordered `03/04` could be either March 4th\n * or April 3rd). Relative values, like the last license check, stay relative per the design.\n */\nconst formatAbsoluteDate = (value: string | number): string => {\n const date = new Date(value);\n\n if (Number.isNaN(date.getTime())) {\n return '';\n }\n\n // UTC, not the local calendar: license dates are UTC-midnight instants, which local getters\n // turn into the previous day anywhere west of UTC.\n const month = `${date.getUTCMonth() + 1}`.padStart(2, '0');\n const day = `${date.getUTCDate()}`.padStart(2, '0');\n\n return `${date.getUTCFullYear()}/${month}/${day}`;\n};\n\nconst LicenseInfoEE = () => {\n const { formatMessage, formatRelativeTime } = useIntl();\n const { license, isLoading, isError } = useLicenseLimits();\n const { data: trialTimeLeft } = useGetLicenseTrialTimeLeftQuery(undefined, {\n skip: !license?.isTrial,\n });\n\n if (isLoading) {\n return null;\n }\n\n if (isError || !license) {\n return null;\n }\n\n const {\n licenseMode,\n licenseStatus,\n renewalDate,\n subscriptionId,\n lastRegistrySyncAt,\n expireAt,\n isTrial,\n planEntitlements,\n usingCachedLicense,\n registrySyncError,\n registrySyncErrorKind,\n } = license;\n\n const licensedPlan = getLicensedPlan({\n licenseStatus,\n type: license.type,\n planPriceId: license.planPriceId,\n });\n const isGrowth = licensedPlan === 'Growth';\n\n // Retention is shown in days (the design lists \"30 days retention\" / \"90 days\n // retention\"); only sentinel-sized values collapse to years, so a licence with\n // e.g. 1500 days does not read as a meaningless number.\n const formatDays = (value: number): string => {\n if (value >= 365) {\n return formatMessage(\n {\n id: 'Settings.license.limit.years',\n defaultMessage: '~{years, plural, one {# year} other {# years}}',\n },\n { years: Math.round(value / 365) }\n );\n }\n return formatMessage(\n {\n id: 'Settings.license.limit.days',\n defaultMessage: '{days, plural, one {# day retention} other {# days retention}}',\n },\n { days: value }\n );\n };\n\n const formatLimitValue = (limit: Limit): string => {\n if (limit.value === null) {\n return formatMessage({ id: 'Settings.license.unlimited', defaultMessage: 'Unlimited' });\n }\n if (limit.unit === 'days') {\n return formatDays(limit.value);\n }\n return formatMessage(\n { id: 'Settings.license.limit.count', defaultMessage: '{value, number}' },\n { value: limit.value }\n );\n };\n\n // Shown relative (\"2 hours ago\") rather than as an absolute timestamp, matching how the rest of\n // the admin surfaces recency.\n const formatLastCheck = (timestamp: number | null): string => {\n if (typeof timestamp !== 'number') {\n return formatMessage({ id: 'Settings.license.checkin.never', defaultMessage: 'Not yet' });\n }\n const diffMs = timestamp - Date.now();\n // Minutes decide the unit: rounding hours first turned 31 minutes into \"1 hour ago\".\n const diffMinutes = Math.round(diffMs / (60 * 1000));\n if (Math.abs(diffMinutes) < 60) {\n return formatRelativeTime(diffMinutes, 'minute', { numeric: 'auto' });\n }\n return formatRelativeTime(Math.round(diffMs / (60 * 60 * 1000)), 'hour', { numeric: 'auto' });\n };\n\n const currentPlanValue = licenseMode === 'offline' ? `${licensedPlan} - offline` : licensedPlan;\n\n const dateLabel: MessageDescriptor = isTrial\n ? { id: 'Settings.license.trial-end-date', defaultMessage: 'trial end date' }\n : { id: 'Settings.license.renewal-date', defaultMessage: 'renewal date' };\n\n const rawDateValue = isTrial ? (trialTimeLeft?.trialEndsAt ?? null) : renewalDate;\n\n const formattedDate = rawDateValue ? formatAbsoluteDate(rawDateValue) : null;\n\n const statusBadge =\n licenseStatus === 'active' && isTrial ? TRIAL_BADGE : STATUS_BADGE[licenseStatus];\n\n /**\n * `unknown` covers two very different situations that used to render identically: we could\n * not reach the registry (the licence is probably fine, we are running on the cached copy),\n * or the registry answered and refused the licence. Only the second one needs the customer\n * to do something, so say which it is.\n */\n const registryNotice: MessageDescriptor | null = usingCachedLicense\n ? {\n id: 'Settings.license.registry.cached',\n defaultMessage:\n \"Couldn't reach the license registry. Showing the last license we retrieved.\",\n }\n : // An instance that has never reached the registry has nothing cached, so\n // `usingCachedLicense` is false even though the cause was an outage rather than a\n // refusal. Read the recorded kind instead of inferring the cause from the cache.\n registrySyncErrorKind === 'unreachable' && licenseStatus !== 'active'\n ? {\n id: 'Settings.license.registry.unreachable',\n defaultMessage: \"Couldn't reach the license registry.\",\n }\n : registrySyncError && licenseStatus !== 'active'\n ? {\n id: 'Settings.license.registry.rejected',\n defaultMessage: 'The license registry could not validate this license.',\n }\n : null;\n\n const checkinLine =\n licenseMode === 'offline'\n ? expireAt\n ? formatMessage(\n { id: 'Settings.license.valid-until', defaultMessage: 'License valid until {date}' },\n { date: formatAbsoluteDate(expireAt) }\n )\n : null\n : formatMessage(\n {\n id: 'Settings.license.last-check',\n defaultMessage: 'Last license validity check {relative}',\n },\n { relative: formatLastCheck(lastRegistrySyncAt) }\n );\n\n const renderLimitCell = (entitlement: PlanEntitlement) => {\n const { available, limits } = entitlement;\n\n if (limits.length === 0) {\n return available ? (\n <Check\n aria-label={formatMessage({ id: 'Settings.license.yes', defaultMessage: 'Yes' })}\n fill=\"success600\"\n />\n ) : (\n <Cross\n aria-label={formatMessage({ id: 'Settings.license.no', defaultMessage: 'No' })}\n fill=\"danger600\"\n />\n );\n }\n\n if (limits.length === 1) {\n return <Typography>{formatLimitValue(limits[0])}</Typography>;\n }\n\n return (\n <Flex direction=\"column\" alignItems=\"end\" gap={1}>\n {limits.map((limit) => (\n <Typography key={limit.key} variant=\"pi\">\n {LIMIT_LABELS[limit.key]\n ? `${formatMessage(LIMIT_LABELS[limit.key])}: ${formatLimitValue(limit)}`\n : formatLimitValue(limit)}\n </Typography>\n ))}\n </Flex>\n );\n };\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex alignItems=\"flex-start\" gap={5} tag=\"dl\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={5} flex=\"1\">\n <PlanDetail\n label={{ id: 'Settings.application.plan.current', defaultMessage: 'current plan' }}\n value={currentPlanValue}\n />\n {!isGrowth && formattedDate && <PlanDetail label={dateLabel} value={formattedDate} />}\n {/* Not gated on Growth: Enterprise licences can carry a seat limit too. A licence\n without one (including an older licence the registry has not re-issued yet) has a\n null `permittedSeats`, and the component already renders nothing in that case. */}\n <AdminSeatInfoEE />\n {/* Any plan with AI, as before this moved onto the Plan card (AIUsage renders nothing\n without it). The `ai.enabled` gate is kept: without it an instance with AI\n disabled requests usage it cannot have. */}\n {window.strapi.ai?.enabled !== false && <AIUsage isTrial={isTrial} />}\n </Flex>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={5} flex=\"1\">\n <Flex direction=\"column\" alignItems=\"start\" gap={2}>\n <Flex gap={2} alignItems=\"center\" tag=\"dt\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.license.status',\n defaultMessage: 'license status',\n })}\n </Typography>\n <Tooltip\n label={formatMessage({\n id: 'Settings.license.status-tooltip',\n defaultMessage:\n 'Strapi checks the license status every 12 hours and on every build.',\n })}\n >\n <Information width=\"1.4rem\" height=\"1.4rem\" fill=\"neutral500\" />\n </Tooltip>\n </Flex>\n <Flex direction=\"column\" alignItems=\"start\" gap={2} tag=\"dd\">\n <Status size=\"S\" variant={statusBadge.variant}>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {formatMessage(statusBadge.label)}\n </Typography>\n </Status>\n {checkinLine && (\n <Flex gap={1} alignItems=\"center\">\n <ClockCounterClockwise width=\"1.2rem\" height=\"1.2rem\" fill=\"neutral500\" />\n <Typography variant=\"pi\" textColor=\"neutral500\">\n {checkinLine}\n </Typography>\n </Flex>\n )}\n {registryNotice && (\n <Flex gap={1} alignItems=\"center\">\n <WarningCircle width=\"1.2rem\" height=\"1.2rem\" fill=\"warning600\" />\n <Typography variant=\"pi\" textColor=\"warning600\">\n {formatMessage(registryNotice)}\n </Typography>\n </Flex>\n )}\n </Flex>\n </Flex>\n {isGrowth && formattedDate && <PlanDetail label={dateLabel} value={formattedDate} />}\n {subscriptionId && (\n <PlanDetail\n label={{ id: 'Settings.license.subscription', defaultMessage: 'Subscription ID' }}\n value={subscriptionId}\n />\n )}\n </Flex>\n </Flex>\n\n {planEntitlements.length > 0 && (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Divider />\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.license.entitlements',\n defaultMessage: 'plan entitlements',\n })}\n </Typography>\n <Table colCount={2} rowCount={planEntitlements.length}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\">\n {formatMessage({ id: 'Settings.license.feature', defaultMessage: 'Feature' })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({ id: 'Settings.license.limit', defaultMessage: 'Limit' })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {planEntitlements.map((entitlement) => {\n const label = FEATURE_LABELS[entitlement.feature];\n\n return (\n <Tr key={entitlement.feature}>\n <Td>\n <Typography>{label ? formatMessage(label) : entitlement.feature}</Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\">{renderLimitCell(entitlement)}</Flex>\n </Td>\n </Tr>\n );\n })}\n </Tbody>\n </Table>\n </Flex>\n )}\n </Flex>\n );\n};\n\nexport { LicenseInfoEE };\n"],"names":["FEATURE_LABELS","sso","id","defaultMessage","LIMIT_LABELS","numberOfWorkflows","stagesPerWorkflow","maximumReleases","retentionDays","TRIAL_BADGE","variant","label","STATUS_BADGE","active","expired","unknown","none","formatAbsoluteDate","value","date","Date","Number","isNaN","getTime","month","getUTCMonth","padStart","day","getUTCDate","getUTCFullYear","LicenseInfoEE","formatMessage","formatRelativeTime","useIntl","license","isLoading","isError","useLicenseLimits","data","trialTimeLeft","useGetLicenseTrialTimeLeftQuery","undefined","skip","isTrial","licenseMode","licenseStatus","renewalDate","subscriptionId","lastRegistrySyncAt","expireAt","planEntitlements","usingCachedLicense","registrySyncError","registrySyncErrorKind","licensedPlan","getLicensedPlan","type","planPriceId","isGrowth","formatDays","years","Math","round","days","formatLimitValue","limit","unit","formatLastCheck","timestamp","diffMs","now","diffMinutes","abs","numeric","currentPlanValue","dateLabel","rawDateValue","trialEndsAt","formattedDate","statusBadge","registryNotice","checkinLine","relative","renderLimitCell","entitlement","available","limits","length","_jsx","Check","aria-label","fill","Cross","Typography","Flex","direction","alignItems","gap","map","key","_jsxs","tag","flex","PlanDetail","AdminSeatInfoEE","window","strapi","ai","enabled","AIUsage","textColor","Tooltip","Information","width","height","Status","size","fontWeight","ClockCounterClockwise","WarningCircle","Divider","Table","colCount","rowCount","Thead","Tr","Th","VisuallyHidden","Tbody","feature","Td","justifyContent"],"mappings":"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"}
@@ -16,6 +16,8 @@ const actionTypes = {
16
16
  'user.update': 'Update user',
17
17
  'user.delete': 'Delete user',
18
18
  'admin.auth.success': 'Admin login',
19
+ 'admin.auth.error': 'Failed admin login',
20
+ 'admin.auth.autoRegistration': 'SSO auto-registration',
19
21
  'admin.logout': 'Admin logout',
20
22
  'content-type.create': 'Create content type',
21
23
  'content-type.update': 'Update content type',