@strapi/admin 5.56.0 → 5.58.0

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