@strapi/admin 5.57.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 (190) hide show
  1. package/dist/admin/admin/src/components/FormInputs/Boolean.js +3 -2
  2. package/dist/admin/admin/src/components/FormInputs/Boolean.js.map +1 -1
  3. package/dist/admin/admin/src/components/FormInputs/Boolean.mjs +3 -2
  4. package/dist/admin/admin/src/components/FormInputs/Boolean.mjs.map +1 -1
  5. package/dist/admin/admin/src/constants.js +14 -0
  6. package/dist/admin/admin/src/constants.js.map +1 -1
  7. package/dist/admin/admin/src/constants.mjs +14 -0
  8. package/dist/admin/admin/src/constants.mjs.map +1 -1
  9. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js +6 -12
  10. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
  11. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs +6 -12
  12. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs.map +1 -1
  13. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +10 -2
  14. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  15. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +10 -2
  16. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  17. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +6 -56
  18. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  19. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +6 -56
  20. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  21. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js +217 -0
  22. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js.map +1 -0
  23. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs +195 -0
  24. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs.map +1 -0
  25. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js +185 -0
  26. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js.map +1 -0
  27. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs +162 -0
  28. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs.map +1 -0
  29. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js +342 -0
  30. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js.map +1 -0
  31. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs +320 -0
  32. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs.map +1 -0
  33. package/dist/admin/admin/src/services/admin.js +11 -1
  34. package/dist/admin/admin/src/services/admin.js.map +1 -1
  35. package/dist/admin/admin/src/services/admin.mjs +11 -2
  36. package/dist/admin/admin/src/services/admin.mjs.map +1 -1
  37. package/dist/admin/admin/src/translations/en.json.js +71 -4
  38. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  39. package/dist/admin/admin/src/translations/en.json.mjs +71 -4
  40. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  41. package/dist/admin/admin/src/utils/browserStrapi.js +1 -1
  42. package/dist/admin/admin/src/utils/browserStrapi.js.map +1 -1
  43. package/dist/admin/admin/src/utils/browserStrapi.mjs +1 -1
  44. package/dist/admin/admin/src/utils/browserStrapi.mjs.map +1 -1
  45. package/dist/admin/admin/src/utils/getFetchClient.js +24 -0
  46. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  47. package/dist/admin/admin/src/utils/getFetchClient.mjs +24 -1
  48. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  49. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +52 -22
  50. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
  51. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +53 -23
  52. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
  53. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js +16 -29
  54. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js.map +1 -1
  55. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs +18 -31
  56. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs.map +1 -1
  57. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js +473 -0
  58. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js.map +1 -0
  59. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs +471 -0
  60. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs.map +1 -0
  61. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +2 -0
  62. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
  63. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +2 -0
  64. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
  65. package/dist/admin/index.js +1 -0
  66. package/dist/admin/index.js.map +1 -1
  67. package/dist/admin/index.mjs +1 -1
  68. package/dist/admin/shared/utils/get-project-type.js +49 -0
  69. package/dist/admin/shared/utils/get-project-type.js.map +1 -0
  70. package/dist/admin/shared/utils/get-project-type.mjs +46 -0
  71. package/dist/admin/shared/utils/get-project-type.mjs.map +1 -0
  72. package/dist/admin/src/constants.d.ts +10 -0
  73. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.d.ts +1 -1
  74. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.d.ts +12 -0
  75. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.d.ts +14 -0
  76. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.d.ts +2 -0
  77. package/dist/admin/src/services/admin.d.ts +2 -2
  78. package/dist/admin/src/types/permissions.d.ts +1 -0
  79. package/dist/admin/src/utils/getFetchClient.d.ts +25 -0
  80. package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +29 -0
  81. package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.d.ts +6 -1
  82. package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.d.ts +2 -0
  83. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +2 -0
  84. package/dist/ee/server/src/audit-logs/entitlements.d.ts +8 -0
  85. package/dist/ee/server/src/audit-logs/entitlements.d.ts.map +1 -0
  86. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +16 -0
  87. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
  88. package/dist/ee/server/src/controllers/admin.d.ts +36 -10
  89. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  90. package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -1
  91. package/dist/ee/server/src/controllers/index.d.ts +36 -10
  92. package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
  93. package/dist/ee/server/src/index.d.ts +36 -10
  94. package/dist/ee/server/src/index.d.ts.map +1 -1
  95. package/dist/server/ee/server/src/audit-logs/entitlements.js +25 -0
  96. package/dist/server/ee/server/src/audit-logs/entitlements.js.map +1 -0
  97. package/dist/server/ee/server/src/audit-logs/entitlements.mjs +23 -0
  98. package/dist/server/ee/server/src/audit-logs/entitlements.mjs.map +1 -0
  99. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +20 -8
  100. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
  101. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +19 -9
  102. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
  103. package/dist/server/ee/server/src/controllers/admin.js +76 -3
  104. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  105. package/dist/server/ee/server/src/controllers/admin.mjs +76 -3
  106. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  107. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +28 -10
  108. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
  109. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs +28 -10
  110. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs.map +1 -1
  111. package/dist/server/ee/server/src/index.js +2 -0
  112. package/dist/server/ee/server/src/index.js.map +1 -1
  113. package/dist/server/ee/server/src/index.mjs +2 -0
  114. package/dist/server/ee/server/src/index.mjs.map +1 -1
  115. package/dist/server/server/src/audit-logs/auth.js +72 -0
  116. package/dist/server/server/src/audit-logs/auth.js.map +1 -0
  117. package/dist/server/server/src/audit-logs/auth.mjs +67 -0
  118. package/dist/server/server/src/audit-logs/auth.mjs.map +1 -0
  119. package/dist/server/server/src/config/admin-actions.js +7 -0
  120. package/dist/server/server/src/config/admin-actions.js.map +1 -1
  121. package/dist/server/server/src/config/admin-actions.mjs +7 -0
  122. package/dist/server/server/src/config/admin-actions.mjs.map +1 -1
  123. package/dist/server/server/src/controllers/admin.js +6 -0
  124. package/dist/server/server/src/controllers/admin.js.map +1 -1
  125. package/dist/server/server/src/controllers/admin.mjs +6 -0
  126. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  127. package/dist/server/server/src/controllers/authentication.js +34 -8
  128. package/dist/server/server/src/controllers/authentication.js.map +1 -1
  129. package/dist/server/server/src/controllers/authentication.mjs +34 -8
  130. package/dist/server/server/src/controllers/authentication.mjs.map +1 -1
  131. package/dist/server/server/src/register.js +4 -0
  132. package/dist/server/server/src/register.js.map +1 -1
  133. package/dist/server/server/src/register.mjs +4 -0
  134. package/dist/server/server/src/register.mjs.map +1 -1
  135. package/dist/server/server/src/routes/admin.js +18 -0
  136. package/dist/server/server/src/routes/admin.js.map +1 -1
  137. package/dist/server/server/src/routes/admin.mjs +18 -0
  138. package/dist/server/server/src/routes/admin.mjs.map +1 -1
  139. package/dist/server/server/src/services/auth.js +4 -2
  140. package/dist/server/server/src/services/auth.js.map +1 -1
  141. package/dist/server/server/src/services/auth.mjs +4 -3
  142. package/dist/server/server/src/services/auth.mjs.map +1 -1
  143. package/dist/server/server/src/services/debug-dump.js +173 -0
  144. package/dist/server/server/src/services/debug-dump.js.map +1 -0
  145. package/dist/server/server/src/services/debug-dump.mjs +166 -0
  146. package/dist/server/server/src/services/debug-dump.mjs.map +1 -0
  147. package/dist/server/server/src/services/index.js +3 -1
  148. package/dist/server/server/src/services/index.js.map +1 -1
  149. package/dist/server/server/src/services/index.mjs +3 -1
  150. package/dist/server/server/src/services/index.mjs.map +1 -1
  151. package/dist/server/server/src/utils/debug-dump/redact.js +197 -0
  152. package/dist/server/server/src/utils/debug-dump/redact.js.map +1 -0
  153. package/dist/server/server/src/utils/debug-dump/redact.mjs +194 -0
  154. package/dist/server/server/src/utils/debug-dump/redact.mjs.map +1 -0
  155. package/dist/server/shared/utils/get-project-type.js +49 -0
  156. package/dist/server/shared/utils/get-project-type.js.map +1 -0
  157. package/dist/server/shared/utils/get-project-type.mjs +46 -0
  158. package/dist/server/shared/utils/get-project-type.mjs.map +1 -0
  159. package/dist/server/src/audit-logs/auth.d.ts +72 -0
  160. package/dist/server/src/audit-logs/auth.d.ts.map +1 -0
  161. package/dist/server/src/config/admin-actions.d.ts.map +1 -1
  162. package/dist/server/src/controllers/admin.d.ts +3 -0
  163. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  164. package/dist/server/src/controllers/authentication.d.ts.map +1 -1
  165. package/dist/server/src/controllers/index.d.ts +3 -0
  166. package/dist/server/src/controllers/index.d.ts.map +1 -1
  167. package/dist/server/src/index.d.ts +8 -0
  168. package/dist/server/src/index.d.ts.map +1 -1
  169. package/dist/server/src/register.d.ts.map +1 -1
  170. package/dist/server/src/routes/admin.d.ts.map +1 -1
  171. package/dist/server/src/services/auth.d.ts +6 -0
  172. package/dist/server/src/services/auth.d.ts.map +1 -1
  173. package/dist/server/src/services/debug-dump.d.ts +9 -0
  174. package/dist/server/src/services/debug-dump.d.ts.map +1 -0
  175. package/dist/server/src/services/index.d.ts +5 -0
  176. package/dist/server/src/services/index.d.ts.map +1 -1
  177. package/dist/server/src/utils/debug-dump/redact.d.ts +8 -0
  178. package/dist/server/src/utils/debug-dump/redact.d.ts.map +1 -0
  179. package/dist/shared/contracts/admin.d.ts +106 -0
  180. package/dist/shared/contracts/admin.d.ts.map +1 -1
  181. package/dist/shared/utils/__tests__/get-project-type.test.d.ts +1 -0
  182. package/dist/shared/utils/__tests__/get-project-type.test.d.ts.map +1 -0
  183. package/dist/shared/utils/get-project-type.d.ts +37 -0
  184. package/dist/shared/utils/get-project-type.d.ts.map +1 -0
  185. package/package.json +8 -8
  186. package/dist/admin/admin/src/utils/getProjectType.js +0 -22
  187. package/dist/admin/admin/src/utils/getProjectType.js.map +0 -1
  188. package/dist/admin/admin/src/utils/getProjectType.mjs +0 -20
  189. package/dist/admin/admin/src/utils/getProjectType.mjs.map +0 -1
  190. package/dist/admin/src/utils/getProjectType.d.ts +0 -16
@@ -0,0 +1,320 @@
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { Flex, Typography, Box, Button } from '@strapi/design-system';
4
+ import { PaperPlane, Book, ExternalLink } from '@strapi/icons';
5
+ import { GitHub, Discord } from '@strapi/icons/symbols';
6
+ import { useIntl } from 'react-intl';
7
+ import { styled } from 'styled-components';
8
+ import { getLicensedPlan } from '../../../../../../../shared/utils/get-project-type.mjs';
9
+ import { useTypedSelector } from '../../../../../core/store/hooks.mjs';
10
+ import { useRBAC } from '../../../../../hooks/useRBAC.mjs';
11
+ import { useGetLicenseLimitsQuery } from '../../../../../services/admin.mjs';
12
+ import { DiagnosticSnapshotModal } from './DiagnosticSnapshotModal.mjs';
13
+
14
+ /**
15
+ * Tints every tile icon with the same brand-neutral colour, including the GitHub and Discord
16
+ * marks. Those two are single-path glyphs carrying a hardcoded brand fill (`#24292F`, `#5865F2`),
17
+ * and a `fill` prop only reaches the `<svg>`, which the path's own attribute overrides — but a CSS
18
+ * declaration outranks that presentation attribute, so this wins for all icons uniformly.
19
+ */ const TileIcon = styled.span`
20
+ display: inline-flex;
21
+
22
+ svg,
23
+ svg path {
24
+ fill: ${({ theme })=>theme.colors.primary600};
25
+ }
26
+ `;
27
+ /**
28
+ * The tiles share the card with the diagnostic-snapshot panel, so they only get about half the
29
+ * card's width. A viewport breakpoint therefore fires far too late — the tiles are already
30
+ * cramped while the window is still "large". Sizing off the tile panel itself instead means the
31
+ * 2 -> 1 column switch happens when *these* tiles run out of room, whatever the window is doing.
32
+ */ const TileGrid = styled.div`
33
+ display: flex;
34
+ flex-wrap: wrap;
35
+ gap: ${({ theme })=>theme.spaces[4]};
36
+
37
+ /* The 50% basis caps the row at two tiles however wide the card gets, and min-width is what
38
+ forces the wrap to a single column. Both are measured against this element, so the switch is
39
+ driven by the space the tiles actually have rather than by the viewport. A container query
40
+ would say the same thing more directly, but jsdom cannot parse @container and it breaks the
41
+ admin suite's stylesheet parse (same reason FormLayout in content-manager avoids it). */
42
+ > * {
43
+ flex: 1 1 calc(50% - ${({ theme })=>theme.spaces[4]} / 2);
44
+ min-width: 16rem;
45
+ }
46
+ `;
47
+ const SupportLinkTile = ({ href, icon: Icon, title, description })=>{
48
+ const { formatMessage } = useIntl();
49
+ return /*#__PURE__*/ jsxs(Box, {
50
+ tag: "a",
51
+ href: href,
52
+ target: "_blank",
53
+ rel: "noopener noreferrer",
54
+ // Without this the accessible name is the title and description concatenated, so the tile
55
+ // announces as e.g. "Documentation Guides and API reference" and collides with the
56
+ // same-named Settings nav link. Labelling it also tells screen readers it opens a new tab.
57
+ "aria-label": formatMessage({
58
+ id: 'Settings.application.support.tile-label',
59
+ defaultMessage: 'Open {title} in a new tab'
60
+ }, {
61
+ title: formatMessage(title)
62
+ }),
63
+ display: "block",
64
+ hasRadius: true,
65
+ borderColor: "neutral200",
66
+ padding: 4,
67
+ // The tile is the link, so the anchor's own underline and link colour must not bleed onto
68
+ // the text inside it; every colour below comes from a theme token so both themes match.
69
+ style: {
70
+ textDecoration: 'none'
71
+ },
72
+ children: [
73
+ /*#__PURE__*/ jsxs(Flex, {
74
+ justifyContent: "space-between",
75
+ alignItems: "center",
76
+ children: [
77
+ /*#__PURE__*/ jsx(TileIcon, {
78
+ children: /*#__PURE__*/ jsx(Icon, {
79
+ width: "2rem",
80
+ height: "2rem",
81
+ "aria-hidden": true
82
+ })
83
+ }),
84
+ /*#__PURE__*/ jsx(ExternalLink, {
85
+ fill: "neutral400",
86
+ "aria-hidden": true
87
+ })
88
+ ]
89
+ }),
90
+ /*#__PURE__*/ jsxs(Flex, {
91
+ direction: "column",
92
+ alignItems: "start",
93
+ gap: 1,
94
+ paddingTop: 3,
95
+ children: [
96
+ /*#__PURE__*/ jsx(Typography, {
97
+ fontWeight: "bold",
98
+ textColor: "neutral800",
99
+ children: formatMessage(title)
100
+ }),
101
+ /*#__PURE__*/ jsx(Typography, {
102
+ variant: "pi",
103
+ textColor: "neutral600",
104
+ children: formatMessage(description)
105
+ })
106
+ ]
107
+ })
108
+ ]
109
+ });
110
+ };
111
+ /* -------------------------------------------------------------------------------------------------
112
+ * SupportCard
113
+ * -----------------------------------------------------------------------------------------------*/ const DOCUMENTATION_TILE = {
114
+ id: 'documentation',
115
+ href: 'https://docs.strapi.io',
116
+ icon: Book,
117
+ title: {
118
+ id: 'Settings.application.support.documentation.title',
119
+ defaultMessage: 'Documentation'
120
+ },
121
+ description: {
122
+ id: 'Settings.application.support.documentation.description',
123
+ defaultMessage: 'Guides and API reference'
124
+ }
125
+ };
126
+ const GITHUB_ISSUES_TILE = {
127
+ id: 'github-issues',
128
+ href: 'https://github.com/strapi/strapi/issues',
129
+ icon: GitHub,
130
+ title: {
131
+ id: 'Settings.application.support.github-issues.title',
132
+ defaultMessage: 'GitHub issues'
133
+ },
134
+ description: {
135
+ id: 'Settings.application.support.github-issues.description',
136
+ defaultMessage: 'Report a bug'
137
+ }
138
+ };
139
+ const GITHUB_DISCUSSIONS_TILE = {
140
+ id: 'github-discussions',
141
+ href: 'https://github.com/strapi/strapi/discussions',
142
+ icon: GitHub,
143
+ title: {
144
+ id: 'Settings.application.support.github-discussions.title',
145
+ defaultMessage: 'GitHub discussions'
146
+ },
147
+ description: {
148
+ id: 'Settings.application.support.github-discussions.description',
149
+ defaultMessage: 'Ask a question or propose an idea'
150
+ }
151
+ };
152
+ const DISCORD_TILE = {
153
+ id: 'discord',
154
+ href: 'https://discord.strapi.io',
155
+ icon: Discord,
156
+ title: {
157
+ id: 'Settings.application.support.discord.title',
158
+ defaultMessage: 'Discord'
159
+ },
160
+ description: {
161
+ id: 'Settings.application.support.discord.description',
162
+ defaultMessage: 'Talk to the community in real time'
163
+ }
164
+ };
165
+ const SUPPORT_PORTAL_TILE = {
166
+ id: 'support-portal',
167
+ href: 'https://support.strapi.io',
168
+ icon: PaperPlane,
169
+ title: {
170
+ id: 'Settings.application.support.support-portal.title',
171
+ defaultMessage: 'Support portal'
172
+ },
173
+ description: {
174
+ id: 'Settings.application.support.support-portal.description',
175
+ defaultMessage: 'Open a ticket with the Strapi support'
176
+ }
177
+ };
178
+ const CE_TILES = [
179
+ DOCUMENTATION_TILE,
180
+ GITHUB_ISSUES_TILE,
181
+ GITHUB_DISCUSSIONS_TILE,
182
+ DISCORD_TILE
183
+ ];
184
+ const EE_TILES = [
185
+ SUPPORT_PORTAL_TILE,
186
+ DOCUMENTATION_TILE,
187
+ GITHUB_ISSUES_TILE,
188
+ DISCORD_TILE
189
+ ];
190
+ const SupportCard = ()=>{
191
+ const { formatMessage } = useIntl();
192
+ const [isSnapshotModalOpen, setIsSnapshotModalOpen] = React.useState(false);
193
+ const debugDumpPermissions = useTypedSelector((state)=>state.admin_app.permissions.settings?.['debug-dump']?.main);
194
+ const { allowedActions: { canRead } } = useRBAC(debugDumpPermissions);
195
+ // Keyed on the licensed plan rather than `isEE` so a customer whose license has lapsed keeps
196
+ // the Strapi support portal link, which is exactly what they need at that moment. This only
197
+ // ever swaps which support links are shown; it gates no feature.
198
+ // The authenticated license-limit-information endpoint is EE-only, so a CE instance gets a
199
+ // 404 here; treat that (or any other error/missing data) the same as "no license" (Community).
200
+ // Until the first response, there is no telling which plan this is: painting the Community
201
+ // fallback and then swapping it out would name the wrong plan for a moment.
202
+ const { data: licenseLimitsData, isLoading: isLicenseLoading } = useGetLicenseLimitsQuery();
203
+ const licenseStatus = licenseLimitsData?.data?.licenseStatus ?? 'none';
204
+ const planPriceId = licenseLimitsData?.data?.planPriceId ?? undefined;
205
+ const isTrial = licenseLimitsData?.data?.isTrial ?? false;
206
+ const licensedPlan = getLicensedPlan({
207
+ licenseStatus,
208
+ type: licenseLimitsData?.data?.type,
209
+ planPriceId
210
+ });
211
+ // A trial resolves to a paid plan name, but a trial does not come with Strapi support, so
212
+ // it gets the community channels instead of the support portal.
213
+ const hasStrapiSupport = licensedPlan !== 'Community' && !isTrial;
214
+ const tiles = hasStrapiSupport ? EE_TILES : CE_TILES;
215
+ return /*#__PURE__*/ jsxs(Fragment, {
216
+ children: [
217
+ /*#__PURE__*/ jsxs(Flex, {
218
+ direction: "column",
219
+ alignItems: "stretch",
220
+ gap: 4,
221
+ hasRadius: true,
222
+ background: "neutral0",
223
+ shadow: "tableShadow",
224
+ paddingTop: 6,
225
+ paddingBottom: 6,
226
+ paddingRight: 7,
227
+ paddingLeft: 7,
228
+ children: [
229
+ /*#__PURE__*/ jsxs(Flex, {
230
+ direction: "column",
231
+ alignItems: "start",
232
+ gap: 1,
233
+ children: [
234
+ /*#__PURE__*/ jsx(Typography, {
235
+ variant: "delta",
236
+ tag: "h3",
237
+ children: formatMessage({
238
+ id: 'Settings.application.support.title',
239
+ defaultMessage: 'Support'
240
+ })
241
+ }),
242
+ !isLicenseLoading && /*#__PURE__*/ jsx(Typography, {
243
+ variant: "pi",
244
+ textColor: "neutral600",
245
+ children: formatMessage(hasStrapiSupport ? {
246
+ id: 'Settings.application.support.subtitle.enterprise',
247
+ defaultMessage: 'Contact support, report a bug, or contribute to the Strapi community.'
248
+ } : {
249
+ id: 'Settings.application.support.subtitle.community',
250
+ defaultMessage: 'Ask a question, report a bug, or contribute to the Strapi community.'
251
+ })
252
+ })
253
+ ]
254
+ }),
255
+ !isLicenseLoading && /*#__PURE__*/ jsxs(Flex, {
256
+ alignItems: "stretch",
257
+ gap: 7,
258
+ children: [
259
+ /*#__PURE__*/ jsx(Box, {
260
+ flex: "1 1 0%",
261
+ children: /*#__PURE__*/ jsx(TileGrid, {
262
+ children: tiles.map((tile)=>/*#__PURE__*/ jsx(SupportLinkTile, {
263
+ ...tile
264
+ }, tile.id))
265
+ })
266
+ }),
267
+ canRead && /*#__PURE__*/ jsxs(Fragment, {
268
+ children: [
269
+ /*#__PURE__*/ jsx(Box, {
270
+ background: "neutral150",
271
+ width: "0.1rem"
272
+ }),
273
+ /*#__PURE__*/ jsxs(Flex, {
274
+ direction: "column",
275
+ alignItems: "start",
276
+ gap: 3,
277
+ flex: "1 1 0%",
278
+ children: [
279
+ /*#__PURE__*/ jsx(Typography, {
280
+ variant: "sigma",
281
+ textColor: "neutral600",
282
+ children: formatMessage({
283
+ id: 'Settings.application.support.diagnostic-snapshot.label',
284
+ defaultMessage: 'diagnostic snapshot'
285
+ })
286
+ }),
287
+ /*#__PURE__*/ jsx(Typography, {
288
+ children: formatMessage(hasStrapiSupport ? {
289
+ id: 'Settings.application.support.diagnostic-snapshot.description.enterprise',
290
+ defaultMessage: 'Reporting a bug? A diagnostic snapshot describes how this project is built so it can be reproduced.'
291
+ } : {
292
+ id: 'Settings.application.support.diagnostic-snapshot.description.community',
293
+ defaultMessage: "Reporting a bug? Generate a snapshot of your app's structure so the issue can be reproduced."
294
+ })
295
+ }),
296
+ /*#__PURE__*/ jsx(Button, {
297
+ onClick: ()=>setIsSnapshotModalOpen(true),
298
+ children: formatMessage({
299
+ id: 'Settings.application.support.diagnostic-snapshot.generate',
300
+ defaultMessage: 'Generate snapshot'
301
+ })
302
+ })
303
+ ]
304
+ })
305
+ ]
306
+ })
307
+ ]
308
+ })
309
+ ]
310
+ }),
311
+ /*#__PURE__*/ jsx(DiagnosticSnapshotModal, {
312
+ isOpen: isSnapshotModalOpen,
313
+ onClose: ()=>setIsSnapshotModalOpen(false)
314
+ })
315
+ ]
316
+ });
317
+ };
318
+
319
+ export { SupportCard };
320
+ //# sourceMappingURL=SupportCard.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SupportCard.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Typography } from '@strapi/design-system';\nimport { Book, ExternalLink, PaperPlane } from '@strapi/icons';\nimport { Discord, GitHub } from '@strapi/icons/symbols';\nimport { useIntl, type MessageDescriptor } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getLicensedPlan } from '../../../../../../../shared/utils/get-project-type';\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { useRBAC } from '../../../../../hooks/useRBAC';\nimport { useGetLicenseLimitsQuery } from '../../../../../services/admin';\n\nimport { DiagnosticSnapshotModal } from './DiagnosticSnapshotModal';\n\n/* -------------------------------------------------------------------------------------------------\n * SupportLinkTile\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SupportLinkTileConfig {\n id: string;\n href: string;\n icon: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n title: MessageDescriptor;\n description: MessageDescriptor;\n}\n\n/**\n * Tints every tile icon with the same brand-neutral colour, including the GitHub and Discord\n * marks. Those two are single-path glyphs carrying a hardcoded brand fill (`#24292F`, `#5865F2`),\n * and a `fill` prop only reaches the `<svg>`, which the path's own attribute overrides — but a CSS\n * declaration outranks that presentation attribute, so this wins for all icons uniformly.\n */\nconst TileIcon = styled.span`\n display: inline-flex;\n\n svg,\n svg path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n`;\n\n/**\n * The tiles share the card with the diagnostic-snapshot panel, so they only get about half the\n * card's width. A viewport breakpoint therefore fires far too late — the tiles are already\n * cramped while the window is still \"large\". Sizing off the tile panel itself instead means the\n * 2 -> 1 column switch happens when *these* tiles run out of room, whatever the window is doing.\n */\nconst TileGrid = styled.div`\n display: flex;\n flex-wrap: wrap;\n gap: ${({ theme }) => theme.spaces[4]};\n\n /* The 50% basis caps the row at two tiles however wide the card gets, and min-width is what\n forces the wrap to a single column. Both are measured against this element, so the switch is\n driven by the space the tiles actually have rather than by the viewport. A container query\n would say the same thing more directly, but jsdom cannot parse @container and it breaks the\n admin suite's stylesheet parse (same reason FormLayout in content-manager avoids it). */\n > * {\n flex: 1 1 calc(50% - ${({ theme }) => theme.spaces[4]} / 2);\n min-width: 16rem;\n }\n`;\n\nconst SupportLinkTile = ({ href, icon: Icon, title, description }: SupportLinkTileConfig) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box\n tag=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n // Without this the accessible name is the title and description concatenated, so the tile\n // announces as e.g. \"Documentation Guides and API reference\" and collides with the\n // same-named Settings nav link. Labelling it also tells screen readers it opens a new tab.\n aria-label={formatMessage(\n {\n id: 'Settings.application.support.tile-label',\n defaultMessage: 'Open {title} in a new tab',\n },\n { title: formatMessage(title) }\n )}\n display=\"block\"\n hasRadius\n borderColor=\"neutral200\"\n padding={4}\n // The tile is the link, so the anchor's own underline and link colour must not bleed onto\n // the text inside it; every colour below comes from a theme token so both themes match.\n style={{ textDecoration: 'none' }}\n >\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <TileIcon>\n <Icon width=\"2rem\" height=\"2rem\" aria-hidden />\n </TileIcon>\n <ExternalLink fill=\"neutral400\" aria-hidden />\n </Flex>\n <Flex direction=\"column\" alignItems=\"start\" gap={1} paddingTop={3}>\n <Typography fontWeight=\"bold\" textColor=\"neutral800\">\n {formatMessage(title)}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(description)}\n </Typography>\n </Flex>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SupportCard\n * -----------------------------------------------------------------------------------------------*/\n\nconst DOCUMENTATION_TILE: SupportLinkTileConfig = {\n id: 'documentation',\n href: 'https://docs.strapi.io',\n icon: Book,\n title: {\n id: 'Settings.application.support.documentation.title',\n defaultMessage: 'Documentation',\n },\n description: {\n id: 'Settings.application.support.documentation.description',\n defaultMessage: 'Guides and API reference',\n },\n};\n\nconst GITHUB_ISSUES_TILE: SupportLinkTileConfig = {\n id: 'github-issues',\n href: 'https://github.com/strapi/strapi/issues',\n icon: GitHub,\n title: {\n id: 'Settings.application.support.github-issues.title',\n defaultMessage: 'GitHub issues',\n },\n description: {\n id: 'Settings.application.support.github-issues.description',\n defaultMessage: 'Report a bug',\n },\n};\n\nconst GITHUB_DISCUSSIONS_TILE: SupportLinkTileConfig = {\n id: 'github-discussions',\n href: 'https://github.com/strapi/strapi/discussions',\n icon: GitHub,\n title: {\n id: 'Settings.application.support.github-discussions.title',\n defaultMessage: 'GitHub discussions',\n },\n description: {\n id: 'Settings.application.support.github-discussions.description',\n defaultMessage: 'Ask a question or propose an idea',\n },\n};\n\nconst DISCORD_TILE: SupportLinkTileConfig = {\n id: 'discord',\n href: 'https://discord.strapi.io',\n icon: Discord,\n title: { id: 'Settings.application.support.discord.title', defaultMessage: 'Discord' },\n description: {\n id: 'Settings.application.support.discord.description',\n defaultMessage: 'Talk to the community in real time',\n },\n};\n\nconst SUPPORT_PORTAL_TILE: SupportLinkTileConfig = {\n id: 'support-portal',\n href: 'https://support.strapi.io',\n icon: PaperPlane,\n title: {\n id: 'Settings.application.support.support-portal.title',\n defaultMessage: 'Support portal',\n },\n description: {\n id: 'Settings.application.support.support-portal.description',\n defaultMessage: 'Open a ticket with the Strapi support',\n },\n};\n\nconst CE_TILES: SupportLinkTileConfig[] = [\n DOCUMENTATION_TILE,\n GITHUB_ISSUES_TILE,\n GITHUB_DISCUSSIONS_TILE,\n DISCORD_TILE,\n];\n\nconst EE_TILES: SupportLinkTileConfig[] = [\n SUPPORT_PORTAL_TILE,\n DOCUMENTATION_TILE,\n GITHUB_ISSUES_TILE,\n DISCORD_TILE,\n];\n\nconst SupportCard = () => {\n const { formatMessage } = useIntl();\n const [isSnapshotModalOpen, setIsSnapshotModalOpen] = React.useState(false);\n\n const debugDumpPermissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['debug-dump']?.main\n );\n const {\n allowedActions: { canRead },\n } = useRBAC(debugDumpPermissions);\n\n // Keyed on the licensed plan rather than `isEE` so a customer whose license has lapsed keeps\n // the Strapi support portal link, which is exactly what they need at that moment. This only\n // ever swaps which support links are shown; it gates no feature.\n // The authenticated license-limit-information endpoint is EE-only, so a CE instance gets a\n // 404 here; treat that (or any other error/missing data) the same as \"no license\" (Community).\n // Until the first response, there is no telling which plan this is: painting the Community\n // fallback and then swapping it out would name the wrong plan for a moment.\n const { data: licenseLimitsData, isLoading: isLicenseLoading } = useGetLicenseLimitsQuery();\n const licenseStatus = licenseLimitsData?.data?.licenseStatus ?? 'none';\n const planPriceId = licenseLimitsData?.data?.planPriceId ?? undefined;\n const isTrial = licenseLimitsData?.data?.isTrial ?? false;\n const licensedPlan = getLicensedPlan({\n licenseStatus,\n type: licenseLimitsData?.data?.type,\n planPriceId,\n });\n // A trial resolves to a paid plan name, but a trial does not come with Strapi support, so\n // it gets the community channels instead of the support portal.\n const hasStrapiSupport = licensedPlan !== 'Community' && !isTrial;\n const tiles = hasStrapiSupport ? EE_TILES : CE_TILES;\n\n return (\n <>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1}>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({ id: 'Settings.application.support.title', defaultMessage: 'Support' })}\n </Typography>\n {!isLicenseLoading && (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n hasStrapiSupport\n ? {\n id: 'Settings.application.support.subtitle.enterprise',\n defaultMessage:\n 'Contact support, report a bug, or contribute to the Strapi community.',\n }\n : {\n id: 'Settings.application.support.subtitle.community',\n defaultMessage:\n 'Ask a question, report a bug, or contribute to the Strapi community.',\n }\n )}\n </Typography>\n )}\n </Flex>\n {!isLicenseLoading && (\n <Flex alignItems=\"stretch\" gap={7}>\n <Box flex=\"1 1 0%\">\n <TileGrid>\n {tiles.map((tile) => (\n <SupportLinkTile key={tile.id} {...tile} />\n ))}\n </TileGrid>\n </Box>\n {canRead && (\n <>\n <Box background=\"neutral150\" width=\"0.1rem\" />\n <Flex direction=\"column\" alignItems=\"start\" gap={3} flex=\"1 1 0%\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.support.diagnostic-snapshot.label',\n defaultMessage: 'diagnostic snapshot',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n hasStrapiSupport\n ? {\n id: 'Settings.application.support.diagnostic-snapshot.description.enterprise',\n defaultMessage:\n 'Reporting a bug? A diagnostic snapshot describes how this project is built so it can be reproduced.',\n }\n : {\n id: 'Settings.application.support.diagnostic-snapshot.description.community',\n defaultMessage:\n \"Reporting a bug? Generate a snapshot of your app's structure so the issue can be reproduced.\",\n }\n )}\n </Typography>\n <Button onClick={() => setIsSnapshotModalOpen(true)}>\n {formatMessage({\n id: 'Settings.application.support.diagnostic-snapshot.generate',\n defaultMessage: 'Generate snapshot',\n })}\n </Button>\n </Flex>\n </>\n )}\n </Flex>\n )}\n </Flex>\n <DiagnosticSnapshotModal\n isOpen={isSnapshotModalOpen}\n onClose={() => setIsSnapshotModalOpen(false)}\n />\n </>\n );\n};\n\nexport { SupportCard };\n"],"names":["TileIcon","styled","span","theme","colors","primary600","TileGrid","div","spaces","SupportLinkTile","href","icon","Icon","title","description","formatMessage","useIntl","_jsxs","Box","tag","target","rel","aria-label","id","defaultMessage","display","hasRadius","borderColor","padding","style","textDecoration","Flex","justifyContent","alignItems","_jsx","width","height","aria-hidden","ExternalLink","fill","direction","gap","paddingTop","Typography","fontWeight","textColor","variant","DOCUMENTATION_TILE","Book","GITHUB_ISSUES_TILE","GitHub","GITHUB_DISCUSSIONS_TILE","DISCORD_TILE","Discord","SUPPORT_PORTAL_TILE","PaperPlane","CE_TILES","EE_TILES","SupportCard","isSnapshotModalOpen","setIsSnapshotModalOpen","React","useState","debugDumpPermissions","useTypedSelector","state","admin_app","permissions","settings","main","allowedActions","canRead","useRBAC","data","licenseLimitsData","isLoading","isLicenseLoading","useGetLicenseLimitsQuery","licenseStatus","planPriceId","undefined","isTrial","licensedPlan","getLicensedPlan","type","hasStrapiSupport","tiles","_Fragment","background","shadow","paddingBottom","paddingRight","paddingLeft","flex","map","tile","Button","onClick","DiagnosticSnapshotModal","isOpen","onClose"],"mappings":"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"}
@@ -112,11 +112,20 @@ const admin = api.adminApi.enhanceEndpoints({
112
112
  providesTags: [
113
113
  'GuidedTourMeta'
114
114
  ]
115
+ }),
116
+ getDebugDump: builder.query({
117
+ query: ()=>({
118
+ url: '/admin/debug-dump',
119
+ method: 'GET'
120
+ }),
121
+ transformResponse (res) {
122
+ return res.data;
123
+ }
115
124
  })
116
125
  }),
117
126
  overrideExisting: false
118
127
  });
119
- const { useInitQuery, useTelemetryPropertiesQuery, useInformationQuery, useProjectSettingsQuery, useUpdateProjectSettingsMutation, useGetPluginsQuery, useGetLicenseLimitsQuery, useGetLicenseTrialTimeLeftQuery, useGetGuidedTourMetaQuery } = admin;
128
+ const { useInitQuery, useTelemetryPropertiesQuery, useInformationQuery, useProjectSettingsQuery, useUpdateProjectSettingsMutation, useGetPluginsQuery, useGetLicenseLimitsQuery, useGetLicenseTrialTimeLeftQuery, useGetGuidedTourMetaQuery, useLazyGetDebugDumpQuery } = admin;
120
129
 
121
130
  exports.useGetGuidedTourMetaQuery = useGetGuidedTourMetaQuery;
122
131
  exports.useGetLicenseLimitsQuery = useGetLicenseLimitsQuery;
@@ -124,6 +133,7 @@ exports.useGetLicenseTrialTimeLeftQuery = useGetLicenseTrialTimeLeftQuery;
124
133
  exports.useGetPluginsQuery = useGetPluginsQuery;
125
134
  exports.useInformationQuery = useInformationQuery;
126
135
  exports.useInitQuery = useInitQuery;
136
+ exports.useLazyGetDebugDumpQuery = useLazyGetDebugDumpQuery;
127
137
  exports.useProjectSettingsQuery = useProjectSettingsQuery;
128
138
  exports.useTelemetryPropertiesQuery = useTelemetryPropertiesQuery;
129
139
  exports.useUpdateProjectSettingsMutation = useUpdateProjectSettingsMutation;
@@ -1 +1 @@
1
- {"version":3,"file":"admin.js","sources":["../../../../../admin/src/services/admin.ts"],"sourcesContent":["import {\n type TelemetryProperties,\n type Init,\n type Information,\n type GetProjectSettings,\n type UpdateProjectSettings,\n type Plugins,\n type GetLicenseLimitInformation,\n GetGuidedTourMeta,\n} from '../../../shared/contracts/admin';\nimport { prefixFileUrlWithBackendUrl } from '../utils/urls';\n\nimport { adminApi } from './api';\n\ninterface ConfigurationLogo {\n custom?: {\n name?: string;\n url?: string;\n };\n default: string;\n}\n\nconst admin = adminApi\n .enhanceEndpoints({\n addTagTypes: ['ProjectSettings', 'LicenseLimits', 'LicenseTrialTimeLeft'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n init: builder.query<Init.Response['data'], void>({\n query: () => ({\n url: '/admin/init',\n method: 'GET',\n }),\n transformResponse(res: Init.Response) {\n return res.data;\n },\n providesTags: ['ProjectSettings'],\n }),\n information: builder.query<Information.Response['data'], void>({\n query: () => ({\n url: '/admin/information',\n method: 'GET',\n }),\n transformResponse(res: Information.Response) {\n return res.data;\n },\n }),\n telemetryProperties: builder.query<TelemetryProperties.Response['data'], void>({\n query: () => ({\n url: '/admin/telemetry-properties',\n method: 'GET',\n config: {\n validateStatus: (status: number) => status < 500,\n },\n }),\n transformResponse(res: TelemetryProperties.Response) {\n return res.data;\n },\n }),\n projectSettings: builder.query<\n { authLogo?: ConfigurationLogo['custom']; menuLogo?: ConfigurationLogo['custom'] },\n void\n >({\n query: () => ({\n url: '/admin/project-settings',\n method: 'GET',\n }),\n providesTags: ['ProjectSettings'],\n transformResponse(data: GetProjectSettings.Response) {\n return {\n authLogo: data.authLogo\n ? {\n name: data.authLogo.name,\n url: prefixFileUrlWithBackendUrl(data.authLogo.url),\n }\n : undefined,\n menuLogo: data.menuLogo\n ? {\n name: data.menuLogo.name,\n url: prefixFileUrlWithBackendUrl(data.menuLogo.url),\n }\n : undefined,\n };\n },\n }),\n updateProjectSettings: builder.mutation<UpdateProjectSettings.Response, FormData>({\n query: (data) => ({\n url: '/admin/project-settings',\n method: 'POST',\n data,\n config: {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n },\n }),\n invalidatesTags: ['ProjectSettings'],\n }),\n getPlugins: builder.query<Plugins.Response, void>({\n query: () => ({\n url: '/admin/plugins',\n method: 'GET',\n }),\n }),\n getLicenseLimits: builder.query<GetLicenseLimitInformation.Response, void>({\n query: () => ({\n url: '/admin/license-limit-information',\n method: 'GET',\n }),\n providesTags: ['LicenseLimits'],\n }),\n getLicenseTrialTimeLeft: builder.query<{ trialEndsAt: string }, void>({\n query: () => ({\n url: '/admin/license-trial-time-left',\n method: 'GET',\n }),\n providesTags: ['LicenseTrialTimeLeft'],\n }),\n getGuidedTourMeta: builder.query<GetGuidedTourMeta.Response, void>({\n query: () => ({\n url: '/admin/guided-tour-meta',\n method: 'GET',\n }),\n providesTags: ['GuidedTourMeta'],\n }),\n }),\n overrideExisting: false,\n });\n\nconst {\n useInitQuery,\n useTelemetryPropertiesQuery,\n useInformationQuery,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n useGetPluginsQuery,\n useGetLicenseLimitsQuery,\n useGetLicenseTrialTimeLeftQuery,\n useGetGuidedTourMetaQuery,\n} = admin;\n\nexport {\n useInitQuery,\n useTelemetryPropertiesQuery,\n useInformationQuery,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n useGetPluginsQuery,\n useGetLicenseLimitsQuery,\n useGetLicenseTrialTimeLeftQuery,\n useGetGuidedTourMetaQuery,\n};\n\nexport type { ConfigurationLogo };\n"],"names":["admin","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","init","query","url","method","transformResponse","res","data","providesTags","information","telemetryProperties","config","validateStatus","status","projectSettings","authLogo","name","prefixFileUrlWithBackendUrl","undefined","menuLogo","updateProjectSettings","mutation","headers","invalidatesTags","getPlugins","getLicenseLimits","getLicenseTrialTimeLeft","getGuidedTourMeta","overrideExisting","useInitQuery","useTelemetryPropertiesQuery","useInformationQuery","useProjectSettingsQuery","useUpdateProjectSettingsMutation","useGetPluginsQuery","useGetLicenseLimitsQuery","useGetLicenseTrialTimeLeftQuery","useGetGuidedTourMetaQuery"],"mappings":"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"}
1
+ {"version":3,"file":"admin.js","sources":["../../../../../admin/src/services/admin.ts"],"sourcesContent":["import {\n type TelemetryProperties,\n type Init,\n type Information,\n type GetProjectSettings,\n type UpdateProjectSettings,\n type Plugins,\n type GetLicenseLimitInformation,\n GetGuidedTourMeta,\n type DebugDump,\n} from '../../../shared/contracts/admin';\nimport { prefixFileUrlWithBackendUrl } from '../utils/urls';\n\nimport { adminApi } from './api';\n\ninterface ConfigurationLogo {\n custom?: {\n name?: string;\n url?: string;\n };\n default: string;\n}\n\nconst admin = adminApi\n .enhanceEndpoints({\n addTagTypes: ['ProjectSettings', 'LicenseLimits', 'LicenseTrialTimeLeft'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n init: builder.query<Init.Response['data'], void>({\n query: () => ({\n url: '/admin/init',\n method: 'GET',\n }),\n transformResponse(res: Init.Response) {\n return res.data;\n },\n providesTags: ['ProjectSettings'],\n }),\n information: builder.query<Information.Response['data'], void>({\n query: () => ({\n url: '/admin/information',\n method: 'GET',\n }),\n transformResponse(res: Information.Response) {\n return res.data;\n },\n }),\n telemetryProperties: builder.query<TelemetryProperties.Response['data'], void>({\n query: () => ({\n url: '/admin/telemetry-properties',\n method: 'GET',\n config: {\n validateStatus: (status: number) => status < 500,\n },\n }),\n transformResponse(res: TelemetryProperties.Response) {\n return res.data;\n },\n }),\n projectSettings: builder.query<\n { authLogo?: ConfigurationLogo['custom']; menuLogo?: ConfigurationLogo['custom'] },\n void\n >({\n query: () => ({\n url: '/admin/project-settings',\n method: 'GET',\n }),\n providesTags: ['ProjectSettings'],\n transformResponse(data: GetProjectSettings.Response) {\n return {\n authLogo: data.authLogo\n ? {\n name: data.authLogo.name,\n url: prefixFileUrlWithBackendUrl(data.authLogo.url),\n }\n : undefined,\n menuLogo: data.menuLogo\n ? {\n name: data.menuLogo.name,\n url: prefixFileUrlWithBackendUrl(data.menuLogo.url),\n }\n : undefined,\n };\n },\n }),\n updateProjectSettings: builder.mutation<UpdateProjectSettings.Response, FormData>({\n query: (data) => ({\n url: '/admin/project-settings',\n method: 'POST',\n data,\n config: {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n },\n }),\n invalidatesTags: ['ProjectSettings'],\n }),\n getPlugins: builder.query<Plugins.Response, void>({\n query: () => ({\n url: '/admin/plugins',\n method: 'GET',\n }),\n }),\n getLicenseLimits: builder.query<GetLicenseLimitInformation.Response, void>({\n query: () => ({\n url: '/admin/license-limit-information',\n method: 'GET',\n }),\n providesTags: ['LicenseLimits'],\n }),\n getLicenseTrialTimeLeft: builder.query<{ trialEndsAt: string }, void>({\n query: () => ({\n url: '/admin/license-trial-time-left',\n method: 'GET',\n }),\n providesTags: ['LicenseTrialTimeLeft'],\n }),\n getGuidedTourMeta: builder.query<GetGuidedTourMeta.Response, void>({\n query: () => ({\n url: '/admin/guided-tour-meta',\n method: 'GET',\n }),\n providesTags: ['GuidedTourMeta'],\n }),\n getDebugDump: builder.query<DebugDump.Response['data'], void>({\n query: () => ({\n url: '/admin/debug-dump',\n method: 'GET',\n }),\n transformResponse(res: DebugDump.Response) {\n return res.data;\n },\n }),\n }),\n overrideExisting: false,\n });\n\nconst {\n useInitQuery,\n useTelemetryPropertiesQuery,\n useInformationQuery,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n useGetPluginsQuery,\n useGetLicenseLimitsQuery,\n useGetLicenseTrialTimeLeftQuery,\n useGetGuidedTourMetaQuery,\n useLazyGetDebugDumpQuery,\n} = admin;\n\nexport {\n useInitQuery,\n useTelemetryPropertiesQuery,\n useInformationQuery,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n useGetPluginsQuery,\n useGetLicenseLimitsQuery,\n useGetLicenseTrialTimeLeftQuery,\n useGetGuidedTourMetaQuery,\n useLazyGetDebugDumpQuery,\n};\n\nexport type { ConfigurationLogo };\n"],"names":["admin","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","init","query","url","method","transformResponse","res","data","providesTags","information","telemetryProperties","config","validateStatus","status","projectSettings","authLogo","name","prefixFileUrlWithBackendUrl","undefined","menuLogo","updateProjectSettings","mutation","headers","invalidatesTags","getPlugins","getLicenseLimits","getLicenseTrialTimeLeft","getGuidedTourMeta","getDebugDump","overrideExisting","useInitQuery","useTelemetryPropertiesQuery","useInformationQuery","useProjectSettingsQuery","useUpdateProjectSettingsMutation","useGetPluginsQuery","useGetLicenseLimitsQuery","useGetLicenseTrialTimeLeftQuery","useGetGuidedTourMetaQuery","useLazyGetDebugDumpQuery"],"mappings":"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"}
@@ -110,11 +110,20 @@ const admin = adminApi.enhanceEndpoints({
110
110
  providesTags: [
111
111
  'GuidedTourMeta'
112
112
  ]
113
+ }),
114
+ getDebugDump: builder.query({
115
+ query: ()=>({
116
+ url: '/admin/debug-dump',
117
+ method: 'GET'
118
+ }),
119
+ transformResponse (res) {
120
+ return res.data;
121
+ }
113
122
  })
114
123
  }),
115
124
  overrideExisting: false
116
125
  });
117
- const { useInitQuery, useTelemetryPropertiesQuery, useInformationQuery, useProjectSettingsQuery, useUpdateProjectSettingsMutation, useGetPluginsQuery, useGetLicenseLimitsQuery, useGetLicenseTrialTimeLeftQuery, useGetGuidedTourMetaQuery } = admin;
126
+ const { useInitQuery, useTelemetryPropertiesQuery, useInformationQuery, useProjectSettingsQuery, useUpdateProjectSettingsMutation, useGetPluginsQuery, useGetLicenseLimitsQuery, useGetLicenseTrialTimeLeftQuery, useGetGuidedTourMetaQuery, useLazyGetDebugDumpQuery } = admin;
118
127
 
119
- export { useGetGuidedTourMetaQuery, useGetLicenseLimitsQuery, useGetLicenseTrialTimeLeftQuery, useGetPluginsQuery, useInformationQuery, useInitQuery, useProjectSettingsQuery, useTelemetryPropertiesQuery, useUpdateProjectSettingsMutation };
128
+ export { useGetGuidedTourMetaQuery, useGetLicenseLimitsQuery, useGetLicenseTrialTimeLeftQuery, useGetPluginsQuery, useInformationQuery, useInitQuery, useLazyGetDebugDumpQuery, useProjectSettingsQuery, useTelemetryPropertiesQuery, useUpdateProjectSettingsMutation };
120
129
  //# sourceMappingURL=admin.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin.mjs","sources":["../../../../../admin/src/services/admin.ts"],"sourcesContent":["import {\n type TelemetryProperties,\n type Init,\n type Information,\n type GetProjectSettings,\n type UpdateProjectSettings,\n type Plugins,\n type GetLicenseLimitInformation,\n GetGuidedTourMeta,\n} from '../../../shared/contracts/admin';\nimport { prefixFileUrlWithBackendUrl } from '../utils/urls';\n\nimport { adminApi } from './api';\n\ninterface ConfigurationLogo {\n custom?: {\n name?: string;\n url?: string;\n };\n default: string;\n}\n\nconst admin = adminApi\n .enhanceEndpoints({\n addTagTypes: ['ProjectSettings', 'LicenseLimits', 'LicenseTrialTimeLeft'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n init: builder.query<Init.Response['data'], void>({\n query: () => ({\n url: '/admin/init',\n method: 'GET',\n }),\n transformResponse(res: Init.Response) {\n return res.data;\n },\n providesTags: ['ProjectSettings'],\n }),\n information: builder.query<Information.Response['data'], void>({\n query: () => ({\n url: '/admin/information',\n method: 'GET',\n }),\n transformResponse(res: Information.Response) {\n return res.data;\n },\n }),\n telemetryProperties: builder.query<TelemetryProperties.Response['data'], void>({\n query: () => ({\n url: '/admin/telemetry-properties',\n method: 'GET',\n config: {\n validateStatus: (status: number) => status < 500,\n },\n }),\n transformResponse(res: TelemetryProperties.Response) {\n return res.data;\n },\n }),\n projectSettings: builder.query<\n { authLogo?: ConfigurationLogo['custom']; menuLogo?: ConfigurationLogo['custom'] },\n void\n >({\n query: () => ({\n url: '/admin/project-settings',\n method: 'GET',\n }),\n providesTags: ['ProjectSettings'],\n transformResponse(data: GetProjectSettings.Response) {\n return {\n authLogo: data.authLogo\n ? {\n name: data.authLogo.name,\n url: prefixFileUrlWithBackendUrl(data.authLogo.url),\n }\n : undefined,\n menuLogo: data.menuLogo\n ? {\n name: data.menuLogo.name,\n url: prefixFileUrlWithBackendUrl(data.menuLogo.url),\n }\n : undefined,\n };\n },\n }),\n updateProjectSettings: builder.mutation<UpdateProjectSettings.Response, FormData>({\n query: (data) => ({\n url: '/admin/project-settings',\n method: 'POST',\n data,\n config: {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n },\n }),\n invalidatesTags: ['ProjectSettings'],\n }),\n getPlugins: builder.query<Plugins.Response, void>({\n query: () => ({\n url: '/admin/plugins',\n method: 'GET',\n }),\n }),\n getLicenseLimits: builder.query<GetLicenseLimitInformation.Response, void>({\n query: () => ({\n url: '/admin/license-limit-information',\n method: 'GET',\n }),\n providesTags: ['LicenseLimits'],\n }),\n getLicenseTrialTimeLeft: builder.query<{ trialEndsAt: string }, void>({\n query: () => ({\n url: '/admin/license-trial-time-left',\n method: 'GET',\n }),\n providesTags: ['LicenseTrialTimeLeft'],\n }),\n getGuidedTourMeta: builder.query<GetGuidedTourMeta.Response, void>({\n query: () => ({\n url: '/admin/guided-tour-meta',\n method: 'GET',\n }),\n providesTags: ['GuidedTourMeta'],\n }),\n }),\n overrideExisting: false,\n });\n\nconst {\n useInitQuery,\n useTelemetryPropertiesQuery,\n useInformationQuery,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n useGetPluginsQuery,\n useGetLicenseLimitsQuery,\n useGetLicenseTrialTimeLeftQuery,\n useGetGuidedTourMetaQuery,\n} = admin;\n\nexport {\n useInitQuery,\n useTelemetryPropertiesQuery,\n useInformationQuery,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n useGetPluginsQuery,\n useGetLicenseLimitsQuery,\n useGetLicenseTrialTimeLeftQuery,\n useGetGuidedTourMetaQuery,\n};\n\nexport type { ConfigurationLogo };\n"],"names":["admin","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","init","query","url","method","transformResponse","res","data","providesTags","information","telemetryProperties","config","validateStatus","status","projectSettings","authLogo","name","prefixFileUrlWithBackendUrl","undefined","menuLogo","updateProjectSettings","mutation","headers","invalidatesTags","getPlugins","getLicenseLimits","getLicenseTrialTimeLeft","getGuidedTourMeta","overrideExisting","useInitQuery","useTelemetryPropertiesQuery","useInformationQuery","useProjectSettingsQuery","useUpdateProjectSettingsMutation","useGetPluginsQuery","useGetLicenseLimitsQuery","useGetLicenseTrialTimeLeftQuery","useGetGuidedTourMetaQuery"],"mappings":"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"}
1
+ {"version":3,"file":"admin.mjs","sources":["../../../../../admin/src/services/admin.ts"],"sourcesContent":["import {\n type TelemetryProperties,\n type Init,\n type Information,\n type GetProjectSettings,\n type UpdateProjectSettings,\n type Plugins,\n type GetLicenseLimitInformation,\n GetGuidedTourMeta,\n type DebugDump,\n} from '../../../shared/contracts/admin';\nimport { prefixFileUrlWithBackendUrl } from '../utils/urls';\n\nimport { adminApi } from './api';\n\ninterface ConfigurationLogo {\n custom?: {\n name?: string;\n url?: string;\n };\n default: string;\n}\n\nconst admin = adminApi\n .enhanceEndpoints({\n addTagTypes: ['ProjectSettings', 'LicenseLimits', 'LicenseTrialTimeLeft'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n init: builder.query<Init.Response['data'], void>({\n query: () => ({\n url: '/admin/init',\n method: 'GET',\n }),\n transformResponse(res: Init.Response) {\n return res.data;\n },\n providesTags: ['ProjectSettings'],\n }),\n information: builder.query<Information.Response['data'], void>({\n query: () => ({\n url: '/admin/information',\n method: 'GET',\n }),\n transformResponse(res: Information.Response) {\n return res.data;\n },\n }),\n telemetryProperties: builder.query<TelemetryProperties.Response['data'], void>({\n query: () => ({\n url: '/admin/telemetry-properties',\n method: 'GET',\n config: {\n validateStatus: (status: number) => status < 500,\n },\n }),\n transformResponse(res: TelemetryProperties.Response) {\n return res.data;\n },\n }),\n projectSettings: builder.query<\n { authLogo?: ConfigurationLogo['custom']; menuLogo?: ConfigurationLogo['custom'] },\n void\n >({\n query: () => ({\n url: '/admin/project-settings',\n method: 'GET',\n }),\n providesTags: ['ProjectSettings'],\n transformResponse(data: GetProjectSettings.Response) {\n return {\n authLogo: data.authLogo\n ? {\n name: data.authLogo.name,\n url: prefixFileUrlWithBackendUrl(data.authLogo.url),\n }\n : undefined,\n menuLogo: data.menuLogo\n ? {\n name: data.menuLogo.name,\n url: prefixFileUrlWithBackendUrl(data.menuLogo.url),\n }\n : undefined,\n };\n },\n }),\n updateProjectSettings: builder.mutation<UpdateProjectSettings.Response, FormData>({\n query: (data) => ({\n url: '/admin/project-settings',\n method: 'POST',\n data,\n config: {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n },\n }),\n invalidatesTags: ['ProjectSettings'],\n }),\n getPlugins: builder.query<Plugins.Response, void>({\n query: () => ({\n url: '/admin/plugins',\n method: 'GET',\n }),\n }),\n getLicenseLimits: builder.query<GetLicenseLimitInformation.Response, void>({\n query: () => ({\n url: '/admin/license-limit-information',\n method: 'GET',\n }),\n providesTags: ['LicenseLimits'],\n }),\n getLicenseTrialTimeLeft: builder.query<{ trialEndsAt: string }, void>({\n query: () => ({\n url: '/admin/license-trial-time-left',\n method: 'GET',\n }),\n providesTags: ['LicenseTrialTimeLeft'],\n }),\n getGuidedTourMeta: builder.query<GetGuidedTourMeta.Response, void>({\n query: () => ({\n url: '/admin/guided-tour-meta',\n method: 'GET',\n }),\n providesTags: ['GuidedTourMeta'],\n }),\n getDebugDump: builder.query<DebugDump.Response['data'], void>({\n query: () => ({\n url: '/admin/debug-dump',\n method: 'GET',\n }),\n transformResponse(res: DebugDump.Response) {\n return res.data;\n },\n }),\n }),\n overrideExisting: false,\n });\n\nconst {\n useInitQuery,\n useTelemetryPropertiesQuery,\n useInformationQuery,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n useGetPluginsQuery,\n useGetLicenseLimitsQuery,\n useGetLicenseTrialTimeLeftQuery,\n useGetGuidedTourMetaQuery,\n useLazyGetDebugDumpQuery,\n} = admin;\n\nexport {\n useInitQuery,\n useTelemetryPropertiesQuery,\n useInformationQuery,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n useGetPluginsQuery,\n useGetLicenseLimitsQuery,\n useGetLicenseTrialTimeLeftQuery,\n useGetGuidedTourMetaQuery,\n useLazyGetDebugDumpQuery,\n};\n\nexport type { ConfigurationLogo };\n"],"names":["admin","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","init","query","url","method","transformResponse","res","data","providesTags","information","telemetryProperties","config","validateStatus","status","projectSettings","authLogo","name","prefixFileUrlWithBackendUrl","undefined","menuLogo","updateProjectSettings","mutation","headers","invalidatesTags","getPlugins","getLicenseLimits","getLicenseTrialTimeLeft","getGuidedTourMeta","getDebugDump","overrideExisting","useInitQuery","useTelemetryPropertiesQuery","useInformationQuery","useProjectSettingsQuery","useUpdateProjectSettingsMutation","useGetPluginsQuery","useGetLicenseLimitsQuery","useGetLicenseTrialTimeLeftQuery","useGetGuidedTourMetaQuery","useLazyGetDebugDumpQuery"],"mappings":"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"}
@@ -135,6 +135,9 @@ var en = {
135
135
  "Settings.adminTokens.editPage.title": "Edit Admin Token",
136
136
  "Settings.adminTokens.emptyStateLayout": "You don't have any content yet...",
137
137
  "Settings.adminTokens.title": "Admin Tokens",
138
+ "Settings.application.admin-seats": "Admin seats",
139
+ "Settings.application.ai-usage": "AI Usage",
140
+ "Settings.application.ai-usage.overage-rate": "+$1.50 per 100 credits above plan limit",
138
141
  "Settings.application.customization": "Customization",
139
142
  "Settings.application.customization.auth-logo.carousel-hint": "Replace the logo in the authentication pages",
140
143
  "Settings.application.customization.carousel-hint": "Change the admin panel logo (Max dimension: {dimension}x{dimension}, Max file size: {size}KB)",
@@ -166,20 +169,82 @@ var en = {
166
169
  "Settings.application.customization.modal.upload.next": "Next",
167
170
  "Settings.application.customization.size-details": "Max dimension: {dimension}×{dimension}, Max file size: {size}KB",
168
171
  "Settings.application.description": "Administration panel’s global information",
169
- "Settings.application.ee.admin-seats.add-seats": "Manage subscription",
170
- "Settings.application.ee.admin-seats.support": "Contact sales",
171
172
  "Settings.application.ee.admin-seats.at-limit-tooltip": "At limit: add seats to invite more users",
172
173
  "Settings.application.ee.admin-seats.count": "<text>{enforcementUserCount}</text>/{permittedSeats}",
173
174
  "Settings.application.get-help": "Get help",
174
- "Settings.application.link-pricing": "See all pricing plans",
175
175
  "Settings.application.link-upgrade": "Upgrade your admin panel",
176
176
  "Settings.application.node-version": "node version",
177
- "Settings.application.plan-title": "current plan",
177
+ "Settings.application.plan.current": "current plan",
178
+ "Settings.application.plan.manage-subscription": "Manage subscription",
179
+ "Settings.application.plan.see-all-plans": "See all plans",
180
+ "Settings.application.plan.title": "Plan",
181
+ "Settings.application.plan.view-subscription": "View subscription",
178
182
  "Settings.application.strapi-version": "Strapi version",
179
183
  "Settings.application.strapiVersion": "Strapi version",
184
+ "Settings.application.support.diagnostic-snapshot.description.community": "Reporting a bug? Generate a snapshot of your app's structure so the issue can be reproduced.",
185
+ "Settings.application.support.diagnostic-snapshot.description.enterprise": "Reporting a bug? A diagnostic snapshot describes how this project is built so it can be reproduced.",
186
+ "Settings.application.support.diagnostic-snapshot.generate": "Generate snapshot",
187
+ "Settings.application.support.diagnostic-snapshot.label": "diagnostic snapshot",
188
+ "Settings.application.support.discord.description": "Talk to the community in real time",
189
+ "Settings.application.support.discord.title": "Discord",
190
+ "Settings.application.support.documentation.description": "Guides and API reference",
191
+ "Settings.application.support.documentation.title": "Documentation",
192
+ "Settings.application.support.github-discussions.description": "Ask a question or propose an idea",
193
+ "Settings.application.support.github-discussions.title": "GitHub discussions",
194
+ "Settings.application.support.github-issues.description": "Report a bug",
195
+ "Settings.application.support.github-issues.title": "GitHub issues",
196
+ "Settings.application.support.subtitle.community": "Ask a question, report a bug, or contribute to the Strapi community.",
197
+ "Settings.application.support.subtitle.enterprise": "Contact support, report a bug, or contribute to the Strapi community.",
198
+ "Settings.application.support.support-portal.description": "Open a ticket with the Strapi support",
199
+ "Settings.application.support.support-portal.title": "Support portal",
200
+ "Settings.application.support.tile-label": "Open {title} in a new tab",
201
+ "Settings.application.support.title": "Support",
180
202
  "Settings.application.title": "Overview",
203
+ "Settings.debug-dump.copied": "Copied to clipboard",
204
+ "Settings.debug-dump.copy": "Copy",
205
+ "Settings.debug-dump.copy-failed": "Could not copy to clipboard",
206
+ "Settings.debug-dump.download": "Download",
207
+ "Settings.debug-dump.error": "Failed to generate the debug dump. Check the server logs and try again.",
208
+ "Settings.debug-dump.generating": "Generating diagnostic snapshot",
209
+ "Settings.debug-dump.payload-label": "payload",
210
+ "Settings.debug-dump.snapshot-modal.description": "This snapshot describes how your project is built so a third party can reproduce the bug locally. It does not contain any of your app's content and no credentials.",
211
+ "Settings.debug-dump.snapshot-modal.title": "Diagnostic snapshot",
181
212
  "Settings.error": "Error",
182
213
  "Settings.global": "Global Settings",
214
+ "Settings.license.checkin.never": "Not yet",
215
+ "Settings.license.entitlements": "plan entitlements",
216
+ "Settings.license.feature": "Feature",
217
+ "Settings.license.feature.audit-logs": "Audit Logs",
218
+ "Settings.license.feature.cms-advanced-preview": "Live Preview",
219
+ "Settings.license.feature.cms-content-history": "Content History",
220
+ "Settings.license.feature.cms-content-releases": "Releases",
221
+ "Settings.license.feature.review-workflows": "Review Workflows",
222
+ "Settings.license.feature.sso": "Single Sign-On",
223
+ "Settings.license.last-check": "Last license validity check {relative}",
224
+ "Settings.license.limit": "Limit",
225
+ "Settings.license.limit.count": "{value, number}",
226
+ "Settings.license.limit.days": "{days, plural, one {# day retention} other {# days retention}}",
227
+ "Settings.license.limit.maximumReleases": "Releases",
228
+ "Settings.license.limit.numberOfWorkflows": "Workflows",
229
+ "Settings.license.limit.retentionDays": "Retention",
230
+ "Settings.license.limit.stagesPerWorkflow": "Stages per workflow",
231
+ "Settings.license.limit.years": "~{years, plural, one {# year} other {# years}}",
232
+ "Settings.license.no": "No",
233
+ "Settings.license.registry.cached": "Couldn't reach the license registry. Showing the last license we retrieved.",
234
+ "Settings.license.registry.rejected": "The license registry could not validate this license.",
235
+ "Settings.license.registry.unreachable": "Couldn't reach the license registry.",
236
+ "Settings.license.renewal-date": "renewal date",
237
+ "Settings.license.status": "license status",
238
+ "Settings.license.status-tooltip": "Strapi checks the license status every 12 hours and on every build.",
239
+ "Settings.license.status.active": "Active",
240
+ "Settings.license.status.expired": "Expired",
241
+ "Settings.license.status.in-trial": "In Trial",
242
+ "Settings.license.status.unknown": "Unknown",
243
+ "Settings.license.subscription": "Subscription ID",
244
+ "Settings.license.trial-end-date": "trial end date",
245
+ "Settings.license.unlimited": "Unlimited",
246
+ "Settings.license.valid-until": "License valid until {date}",
247
+ "Settings.license.yes": "Yes",
183
248
  "Settings.permissions": "Administration panel",
184
249
  "Settings.permissions.auditLogs.action": "Action",
185
250
  "Settings.permissions.auditLogs.admin-user.create": "Create user",
@@ -189,6 +254,8 @@ var en = {
189
254
  "Settings.permissions.auditLogs.admin-user.password-reset.create": "Request password reset",
190
255
  "Settings.permissions.auditLogs.admin-user.password.update": "Update password",
191
256
  "Settings.permissions.auditLogs.admin-user.update": "Update user",
257
+ "Settings.permissions.auditLogs.admin.auth.autoRegistration": "SSO auto-registration",
258
+ "Settings.permissions.auditLogs.admin.auth.error": "Failed admin login",
192
259
  "Settings.permissions.auditLogs.admin.auth.success": "Admin login",
193
260
  "Settings.permissions.auditLogs.admin.logout": "Admin logout",
194
261
  "Settings.permissions.auditLogs.audit-log.export": "Export audit logs",
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}