@strapi/admin 5.42.1 → 5.44.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.
- package/dist/admin/admin/src/StrapiApp.js +17 -4
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs +18 -5
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/Form.js +29 -18
- package/dist/admin/admin/src/components/Form.js.map +1 -1
- package/dist/admin/admin/src/components/Form.mjs +29 -18
- package/dist/admin/admin/src/components/Form.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Date.js +2 -2
- package/dist/admin/admin/src/components/FormInputs/Date.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Date.mjs +2 -2
- package/dist/admin/admin/src/components/FormInputs/Date.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Context.js +3 -2
- package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Context.mjs +3 -2
- package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/Layout.js +1 -0
- package/dist/admin/admin/src/components/Layouts/Layout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/Layout.mjs +1 -0
- package/dist/admin/admin/src/components/Layouts/Layout.mjs.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.js +1 -1
- package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.mjs +1 -1
- package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
- package/dist/admin/admin/src/components/Table.js +28 -15
- package/dist/admin/admin/src/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Table.mjs +29 -16
- package/dist/admin/admin/src/components/Table.mjs.map +1 -1
- package/dist/admin/admin/src/components/Widgets.js +52 -0
- package/dist/admin/admin/src/components/Widgets.js.map +1 -1
- package/dist/admin/admin/src/components/Widgets.mjs +54 -3
- package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/core/store/configure.js +3 -1
- package/dist/admin/admin/src/core/store/configure.js.map +1 -1
- package/dist/admin/admin/src/core/store/configure.mjs +3 -1
- package/dist/admin/admin/src/core/store/configure.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/usePersistentState.js +9 -4
- package/dist/admin/admin/src/hooks/usePersistentState.js.map +1 -1
- package/dist/admin/admin/src/hooks/usePersistentState.mjs +10 -6
- package/dist/admin/admin/src/hooks/usePersistentState.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js +4 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs +4 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
- package/dist/admin/admin/src/render.js +2 -0
- package/dist/admin/admin/src/render.js.map +1 -1
- package/dist/admin/admin/src/render.mjs +2 -0
- package/dist/admin/admin/src/render.mjs.map +1 -1
- package/dist/admin/admin/src/services/api.js +2 -2
- package/dist/admin/admin/src/services/api.js.map +1 -1
- package/dist/admin/admin/src/services/api.mjs +2 -2
- package/dist/admin/admin/src/services/api.mjs.map +1 -1
- package/dist/admin/admin/src/translations/ar.json.js +4 -1
- package/dist/admin/admin/src/translations/ar.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ar.json.mjs +4 -1
- package/dist/admin/admin/src/translations/ar.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/cs.json.js +736 -13
- package/dist/admin/admin/src/translations/cs.json.js.map +1 -1
- package/dist/admin/admin/src/translations/cs.json.mjs +728 -14
- package/dist/admin/admin/src/translations/cs.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/de.json.js +4 -1
- package/dist/admin/admin/src/translations/de.json.js.map +1 -1
- package/dist/admin/admin/src/translations/de.json.mjs +4 -1
- package/dist/admin/admin/src/translations/de.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +4 -1
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +4 -1
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/es.json.js +4 -1
- package/dist/admin/admin/src/translations/es.json.js.map +1 -1
- package/dist/admin/admin/src/translations/es.json.mjs +4 -1
- package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.js +4 -1
- package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.mjs +4 -1
- package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/it.json.js +4 -1
- package/dist/admin/admin/src/translations/it.json.js.map +1 -1
- package/dist/admin/admin/src/translations/it.json.mjs +4 -1
- package/dist/admin/admin/src/translations/it.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/nl.json.js +394 -89
- package/dist/admin/admin/src/translations/nl.json.js.map +1 -1
- package/dist/admin/admin/src/translations/nl.json.mjs +393 -90
- package/dist/admin/admin/src/translations/nl.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/ru.json.js +32 -19
- package/dist/admin/admin/src/translations/ru.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ru.json.mjs +32 -19
- package/dist/admin/admin/src/translations/ru.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/zh-Hans.json.js +4 -1
- package/dist/admin/admin/src/translations/zh-Hans.json.js.map +1 -1
- package/dist/admin/admin/src/translations/zh-Hans.json.mjs +4 -1
- package/dist/admin/admin/src/translations/zh-Hans.json.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +29 -3
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +29 -3
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.js +1 -1
- package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.mjs +2 -2
- package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +2 -2
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/services/ai.js +7 -7
- package/dist/admin/ee/admin/src/services/ai.js.map +1 -1
- package/dist/admin/ee/admin/src/services/ai.mjs +6 -6
- package/dist/admin/ee/admin/src/services/ai.mjs.map +1 -1
- package/dist/admin/ee.js +2 -2
- package/dist/admin/ee.mjs +1 -1
- package/dist/admin/index.js +1 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/components/Widgets.d.ts +2 -1
- package/dist/admin/src/core/store/configure.d.ts +2 -2
- package/dist/admin/src/core/store/hooks.d.ts +2 -2
- package/dist/admin/src/ee.d.ts +1 -1
- package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
- package/dist/admin/src/hooks/usePersistentState.d.ts +2 -1
- package/dist/admin/src/index.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
- package/dist/admin/src/selectors.d.ts +2 -2
- package/dist/admin/src/services/admin.d.ts +6 -6
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/apiTokens.d.ts +1 -1
- package/dist/admin/src/services/auth.d.ts +11 -11
- package/dist/admin/src/services/contentApi.d.ts +1 -1
- package/dist/admin/src/services/contentManager.d.ts +1 -1
- package/dist/admin/src/services/homepage.d.ts +3 -3
- package/dist/admin/src/services/transferTokens.d.ts +1 -1
- package/dist/admin/src/services/users.d.ts +8 -8
- package/dist/admin/src/services/webhooks.d.ts +2 -2
- package/dist/admin/src/utils/getFetchClient.d.ts +14 -1
- package/dist/admin/tests/utils.d.ts +1 -1
- package/dist/ee/admin/src/services/ai.d.ts +6 -6
- package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
- package/dist/ee/server/src/index.d.ts +0 -16
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/server/ee/server/src/index.js +0 -16
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +0 -16
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/server/src/ai/controllers/ai.js +52 -0
- package/dist/server/server/src/ai/controllers/ai.js.map +1 -0
- package/dist/server/server/src/ai/controllers/ai.mjs +50 -0
- package/dist/server/server/src/ai/controllers/ai.mjs.map +1 -0
- package/dist/server/{ee/server → server}/src/ai/routes/ai.js +1 -2
- package/dist/server/server/src/ai/routes/ai.js.map +1 -0
- package/dist/server/{ee/server → server}/src/ai/routes/ai.mjs +1 -2
- package/dist/server/server/src/ai/routes/ai.mjs.map +1 -0
- package/dist/server/{ee/server/src/ai/containers → server/src/ai/services}/ai.js +107 -32
- package/dist/server/server/src/ai/services/ai.js.map +1 -0
- package/dist/server/{ee/server/src/ai/containers → server/src/ai/services}/ai.mjs +107 -32
- package/dist/server/server/src/ai/services/ai.mjs.map +1 -0
- package/dist/server/server/src/controllers/index.js +3 -1
- package/dist/server/server/src/controllers/index.js.map +1 -1
- package/dist/server/server/src/controllers/index.mjs +3 -1
- package/dist/server/server/src/controllers/index.mjs.map +1 -1
- package/dist/server/server/src/register.js +4 -0
- package/dist/server/server/src/register.js.map +1 -1
- package/dist/server/server/src/register.mjs +4 -0
- package/dist/server/server/src/register.mjs.map +1 -1
- package/dist/server/server/src/routes/index.js +3 -1
- package/dist/server/server/src/routes/index.js.map +1 -1
- package/dist/server/server/src/routes/index.mjs +3 -1
- package/dist/server/server/src/routes/index.mjs.map +1 -1
- package/dist/{ee/server → server}/src/ai/controllers/ai.d.ts +1 -1
- package/dist/server/src/ai/controllers/ai.d.ts.map +1 -0
- package/dist/server/src/ai/routes/ai.d.ts.map +1 -0
- package/dist/server/src/ai/services/ai.d.ts +30 -0
- package/dist/server/src/ai/services/ai.d.ts.map +1 -0
- package/dist/server/src/controllers/index.d.ts +5 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +5 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/shared/contracts/ai.d.ts +3 -3
- package/package.json +11 -11
- package/dist/ee/server/src/ai/containers/ai.d.ts +0 -15
- package/dist/ee/server/src/ai/containers/ai.d.ts.map +0 -1
- package/dist/ee/server/src/ai/controllers/ai.d.ts.map +0 -1
- package/dist/ee/server/src/ai/routes/ai.d.ts.map +0 -1
- package/dist/server/ee/server/src/ai/containers/ai.js.map +0 -1
- package/dist/server/ee/server/src/ai/containers/ai.mjs.map +0 -1
- package/dist/server/ee/server/src/ai/controllers/ai.js +0 -121
- package/dist/server/ee/server/src/ai/controllers/ai.js.map +0 -1
- package/dist/server/ee/server/src/ai/controllers/ai.mjs +0 -119
- package/dist/server/ee/server/src/ai/controllers/ai.mjs.map +0 -1
- package/dist/server/ee/server/src/ai/routes/ai.js.map +0 -1
- package/dist/server/ee/server/src/ai/routes/ai.mjs.map +0 -1
- /package/dist/{ee/server → server}/src/ai/routes/ai.d.ts +0 -0
|
@@ -2,42 +2,70 @@ import crypto from 'crypto';
|
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
const
|
|
5
|
+
const createAiAdminService = ({ strapi })=>{
|
|
6
|
+
/**
|
|
7
|
+
* In-memory cache for AI tokens
|
|
8
|
+
* Key format: `${projectId}:${userId}`
|
|
9
|
+
*/ const aiTokenCache = new Map();
|
|
10
|
+
const isEnabled = ()=>{
|
|
11
|
+
const configEnabled = strapi.config.get('admin.ai.enabled', true) === true;
|
|
12
|
+
const licenseEnabled = strapi.ee?.features?.isEnabled('cms-ai') === true;
|
|
13
|
+
return configEnabled && licenseEnabled;
|
|
14
|
+
};
|
|
15
|
+
const getAiFeatureConfig = async ()=>{
|
|
16
|
+
if (!isEnabled()) {
|
|
17
|
+
return {
|
|
18
|
+
isAiI18nConfigured: false,
|
|
19
|
+
isAiMediaLibraryConfigured: false
|
|
20
|
+
};
|
|
21
|
+
}
|
|
11
22
|
const i18nSettings = await strapi.plugin('i18n').service('settings').getSettings();
|
|
12
23
|
const uploadSettings = await strapi.plugin('upload').service('upload').getSettings();
|
|
13
24
|
return {
|
|
14
|
-
|
|
15
|
-
|
|
25
|
+
isAiI18nConfigured: Boolean(i18nSettings?.aiLocalizations),
|
|
26
|
+
isAiMediaLibraryConfigured: Boolean(uploadSettings?.aiMetadata)
|
|
16
27
|
};
|
|
17
28
|
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Resolves the shared context required by both getAiToken and getAiUsage:
|
|
31
|
+
* EE license, project ID, and AI server URL.
|
|
32
|
+
*/ const resolveAiContext = (errorPrefix)=>{
|
|
33
|
+
if (!isEnabled()) {
|
|
34
|
+
strapi.log.error(`${errorPrefix} AI is not enabled`);
|
|
35
|
+
throw new Error(`${errorPrefix.replace(/:$/, '')}. Check server logs for details.`);
|
|
36
|
+
}
|
|
21
37
|
if (!strapi.ee?.isEE) {
|
|
22
|
-
strapi.log.error(`${
|
|
23
|
-
throw new Error('
|
|
38
|
+
strapi.log.error(`${errorPrefix} Enterprise Edition features are not enabled`);
|
|
39
|
+
throw new Error(`${errorPrefix.replace(/:$/, '')}. Check server logs for details.`);
|
|
24
40
|
}
|
|
25
|
-
// Get the EE license
|
|
26
|
-
// First try environment variable, then try reading from file
|
|
27
41
|
let eeLicense = process.env.STRAPI_LICENSE;
|
|
28
42
|
if (!eeLicense) {
|
|
29
43
|
try {
|
|
30
44
|
const licensePath = path.join(strapi.dirs.app.root, 'license.txt');
|
|
31
45
|
eeLicense = fs.readFileSync(licensePath).toString();
|
|
32
|
-
} catch
|
|
46
|
+
} catch {
|
|
33
47
|
// License file doesn't exist or can't be read
|
|
34
48
|
}
|
|
35
49
|
}
|
|
36
50
|
if (!eeLicense) {
|
|
37
|
-
strapi.log.error(`${
|
|
38
|
-
throw new Error('
|
|
51
|
+
strapi.log.error(`${errorPrefix} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`);
|
|
52
|
+
throw new Error(`${errorPrefix.replace(/:$/, '')}. Check server logs for details.`);
|
|
53
|
+
}
|
|
54
|
+
const projectId = strapi.config.get('uuid');
|
|
55
|
+
if (!projectId) {
|
|
56
|
+
strapi.log.error(`${errorPrefix} Project ID not configured`);
|
|
57
|
+
throw new Error(`${errorPrefix.replace(/:$/, '')}. Check server logs for details.`);
|
|
39
58
|
}
|
|
40
59
|
const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';
|
|
60
|
+
return {
|
|
61
|
+
eeLicense,
|
|
62
|
+
projectId,
|
|
63
|
+
aiServerUrl
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
const getAiToken = async ()=>{
|
|
67
|
+
const ERROR_PREFIX = 'AI token request failed:';
|
|
68
|
+
const { eeLicense, projectId, aiServerUrl } = resolveAiContext(ERROR_PREFIX);
|
|
41
69
|
// Get the current user
|
|
42
70
|
const user = strapi.requestContext.get()?.state?.user;
|
|
43
71
|
if (!user) {
|
|
@@ -46,18 +74,12 @@ const createAIContainer = ({ strapi })=>{
|
|
|
46
74
|
}
|
|
47
75
|
// Create a secure user identifier using only user ID
|
|
48
76
|
const userIdentifier = user.id.toString();
|
|
49
|
-
// Get project ID
|
|
50
|
-
const projectId = strapi.config.get('uuid');
|
|
51
|
-
if (!projectId) {
|
|
52
|
-
strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);
|
|
53
|
-
throw new Error('AI token request failed. Check server logs for details.');
|
|
54
|
-
}
|
|
55
77
|
// Check cache for existing valid token
|
|
56
78
|
const cacheKey = `${projectId}:${userIdentifier}`;
|
|
57
79
|
const cachedToken = aiTokenCache.get(cacheKey);
|
|
58
80
|
if (cachedToken) {
|
|
59
81
|
const now = Date.now();
|
|
60
|
-
// Check if token is still valid (with buffer so it has time to
|
|
82
|
+
// Check if token is still valid (with buffer so it has time to be used)
|
|
61
83
|
const bufferMs = 2 * 60 * 1000; // 2 minutes
|
|
62
84
|
if (cachedToken.expiresAtMs && cachedToken.expiresAtMs - bufferMs > now) {
|
|
63
85
|
strapi.log.info('Using cached AI token');
|
|
@@ -71,13 +93,10 @@ const createAIContainer = ({ strapi })=>{
|
|
|
71
93
|
}
|
|
72
94
|
strapi.log.http('Contacting AI Server for token generation');
|
|
73
95
|
try {
|
|
74
|
-
// Call the AI server's getAiJWT endpoint
|
|
75
96
|
const response = await fetch(`${aiServerUrl}/auth/getAiJWT`, {
|
|
76
97
|
method: 'POST',
|
|
77
98
|
headers: {
|
|
78
99
|
'Content-Type': 'application/json',
|
|
79
|
-
// No authorization header needed for public endpoint
|
|
80
|
-
// Add request ID for tracing
|
|
81
100
|
'X-Request-Id': crypto.randomUUID()
|
|
82
101
|
},
|
|
83
102
|
body: JSON.stringify({
|
|
@@ -130,7 +149,6 @@ const createAIContainer = ({ strapi })=>{
|
|
|
130
149
|
expiresAtMs
|
|
131
150
|
});
|
|
132
151
|
}
|
|
133
|
-
// Return the AI JWT with metadata
|
|
134
152
|
// Note: Token expires in 1 hour, client should handle refresh
|
|
135
153
|
return {
|
|
136
154
|
token: data.jwt,
|
|
@@ -144,11 +162,68 @@ const createAIContainer = ({ strapi })=>{
|
|
|
144
162
|
throw fetchError;
|
|
145
163
|
}
|
|
146
164
|
};
|
|
165
|
+
const getAiUsage = async ()=>{
|
|
166
|
+
const ERROR_PREFIX = 'AI usage data request failed:';
|
|
167
|
+
const { eeLicense, projectId, aiServerUrl } = resolveAiContext(ERROR_PREFIX);
|
|
168
|
+
strapi.log.http('Contacting AI Server for usage data');
|
|
169
|
+
try {
|
|
170
|
+
const response = await fetch(`${aiServerUrl}/cms/ai-data`, {
|
|
171
|
+
method: 'POST',
|
|
172
|
+
headers: {
|
|
173
|
+
'Content-Type': 'application/json',
|
|
174
|
+
'X-Request-Id': crypto.randomUUID()
|
|
175
|
+
},
|
|
176
|
+
body: JSON.stringify({
|
|
177
|
+
eeKey: eeLicense,
|
|
178
|
+
projectId
|
|
179
|
+
})
|
|
180
|
+
});
|
|
181
|
+
if (!response.ok) {
|
|
182
|
+
let errorData;
|
|
183
|
+
let errorText;
|
|
184
|
+
try {
|
|
185
|
+
errorText = await response.text();
|
|
186
|
+
errorData = JSON.parse(errorText);
|
|
187
|
+
} catch {
|
|
188
|
+
errorData = {
|
|
189
|
+
error: errorText || 'Failed to parse error response'
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {
|
|
193
|
+
status: response.status,
|
|
194
|
+
statusText: response.statusText,
|
|
195
|
+
error: errorData,
|
|
196
|
+
errorText,
|
|
197
|
+
projectId
|
|
198
|
+
});
|
|
199
|
+
throw new Error('AI usage data request failed. Check server logs for details.');
|
|
200
|
+
}
|
|
201
|
+
let data;
|
|
202
|
+
try {
|
|
203
|
+
data = await response.json();
|
|
204
|
+
} catch (parseError) {
|
|
205
|
+
strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);
|
|
206
|
+
throw new Error('AI usage data request failed. Check server logs for details.');
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
...data.data,
|
|
210
|
+
subscription: data.subscription
|
|
211
|
+
};
|
|
212
|
+
} catch (fetchError) {
|
|
213
|
+
if (fetchError instanceof Error && fetchError.name === 'AbortError') {
|
|
214
|
+
strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);
|
|
215
|
+
throw new Error('AI usage data request failed. Check server logs for details.');
|
|
216
|
+
}
|
|
217
|
+
throw fetchError;
|
|
218
|
+
}
|
|
219
|
+
};
|
|
147
220
|
return {
|
|
148
|
-
|
|
149
|
-
|
|
221
|
+
isEnabled,
|
|
222
|
+
getAiFeatureConfig,
|
|
223
|
+
getAiToken,
|
|
224
|
+
getAiUsage
|
|
150
225
|
};
|
|
151
226
|
};
|
|
152
227
|
|
|
153
|
-
export {
|
|
228
|
+
export { createAiAdminService };
|
|
154
229
|
//# sourceMappingURL=ai.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.mjs","sources":["../../../../../../server/src/ai/services/ai.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport crypto from 'crypto';\nimport fs from 'fs';\nimport path from 'path';\nimport { AdminUser } from '../../../../shared/contracts/shared';\n\nconst createAiAdminService = ({ strapi }: { strapi: Core.Strapi }) => {\n /**\n * In-memory cache for AI tokens\n * Key format: `${projectId}:${userId}`\n */\n const aiTokenCache = new Map<\n string,\n {\n token: string;\n expiresAt?: string;\n expiresAtMs?: number;\n }\n >();\n\n const isEnabled = (): boolean => {\n const configEnabled = strapi.config.get('admin.ai.enabled', true) === true;\n const licenseEnabled = strapi.ee?.features?.isEnabled('cms-ai') === true;\n return configEnabled && licenseEnabled;\n };\n\n const getAiFeatureConfig = async () => {\n if (!isEnabled()) {\n return {\n isAiI18nConfigured: false,\n isAiMediaLibraryConfigured: false,\n };\n }\n\n const i18nSettings = await strapi.plugin('i18n').service('settings').getSettings();\n const uploadSettings = await strapi.plugin('upload').service('upload').getSettings();\n\n return {\n isAiI18nConfigured: Boolean(i18nSettings?.aiLocalizations),\n isAiMediaLibraryConfigured: Boolean(uploadSettings?.aiMetadata),\n };\n };\n\n /**\n * Resolves the shared context required by both getAiToken and getAiUsage:\n * EE license, project ID, and AI server URL.\n */\n const resolveAiContext = (errorPrefix: string) => {\n if (!isEnabled()) {\n strapi.log.error(`${errorPrefix} AI is not enabled`);\n throw new Error(`${errorPrefix.replace(/:$/, '')}. Check server logs for details.`);\n }\n\n if (!strapi.ee?.isEE) {\n strapi.log.error(`${errorPrefix} Enterprise Edition features are not enabled`);\n throw new Error(`${errorPrefix.replace(/:$/, '')}. Check server logs for details.`);\n }\n\n let eeLicense = process.env.STRAPI_LICENSE;\n\n if (!eeLicense) {\n try {\n const licensePath = path.join(strapi.dirs.app.root, 'license.txt');\n eeLicense = fs.readFileSync(licensePath).toString();\n } catch {\n // License file doesn't exist or can't be read\n }\n }\n\n if (!eeLicense) {\n strapi.log.error(\n `${errorPrefix} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`\n );\n throw new Error(`${errorPrefix.replace(/:$/, '')}. Check server logs for details.`);\n }\n\n const projectId = strapi.config.get('uuid');\n if (!projectId) {\n strapi.log.error(`${errorPrefix} Project ID not configured`);\n throw new Error(`${errorPrefix.replace(/:$/, '')}. Check server logs for details.`);\n }\n\n const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';\n\n return { eeLicense, projectId, aiServerUrl };\n };\n\n const getAiToken = async () => {\n const ERROR_PREFIX = 'AI token request failed:';\n\n const { eeLicense, projectId, aiServerUrl } = resolveAiContext(ERROR_PREFIX);\n\n // Get the current user\n const user = strapi.requestContext.get()?.state?.user as AdminUser | undefined;\n if (!user) {\n strapi.log.error(`${ERROR_PREFIX} No authenticated user in request context`);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n // Create a secure user identifier using only user ID\n const userIdentifier = user.id.toString();\n\n // Check cache for existing valid token\n const cacheKey = `${projectId}:${userIdentifier}`;\n const cachedToken = aiTokenCache.get(cacheKey);\n\n if (cachedToken) {\n const now = Date.now();\n // Check if token is still valid (with buffer so it has time to be used)\n const bufferMs = 2 * 60 * 1000; // 2 minutes\n\n if (cachedToken.expiresAtMs && cachedToken.expiresAtMs - bufferMs > now) {\n strapi.log.info('Using cached AI token');\n\n return {\n token: cachedToken.token,\n expiresAt: cachedToken.expiresAt,\n };\n }\n\n // Token expired or will expire soon, remove from cache\n aiTokenCache.delete(cacheKey);\n }\n\n strapi.log.http('Contacting AI Server for token generation');\n\n try {\n const response = await fetch(`${aiServerUrl}/auth/getAiJWT`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-Request-Id': crypto.randomUUID(),\n },\n body: JSON.stringify({\n eeLicense,\n userIdentifier,\n projectId,\n }),\n });\n\n if (!response.ok) {\n let errorData;\n let errorText;\n try {\n errorText = await response.text();\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: errorText || 'Failed to parse error response' };\n }\n\n strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {\n status: response.status,\n statusText: response.statusText,\n error: errorData,\n errorText,\n projectId,\n });\n\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n let data;\n try {\n data = (await response.json()) as {\n jwt: string;\n expiresAt?: string;\n };\n } catch (parseError) {\n strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n if (!data.jwt) {\n strapi.log.error(`${ERROR_PREFIX} Invalid response: missing JWT token`);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n strapi.log.info('AI token generated successfully', {\n userId: user.id,\n expiresAt: data.expiresAt,\n });\n\n // Cache the token if it has an expiration time\n if (data.expiresAt) {\n const expiresAtMs = new Date(data.expiresAt).getTime();\n aiTokenCache.set(cacheKey, {\n token: data.jwt,\n expiresAt: data.expiresAt,\n expiresAtMs,\n });\n }\n\n // Note: Token expires in 1 hour, client should handle refresh\n return {\n token: data.jwt,\n expiresAt: data.expiresAt,\n };\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === 'AbortError') {\n strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n throw fetchError;\n }\n };\n\n const getAiUsage = async () => {\n const ERROR_PREFIX = 'AI usage data request failed:';\n\n const { eeLicense, projectId, aiServerUrl } = resolveAiContext(ERROR_PREFIX);\n\n strapi.log.http('Contacting AI Server for usage data');\n\n try {\n const response = await fetch(`${aiServerUrl}/cms/ai-data`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-Request-Id': crypto.randomUUID(),\n },\n body: JSON.stringify({\n eeKey: eeLicense,\n projectId,\n }),\n });\n\n if (!response.ok) {\n let errorData;\n let errorText;\n try {\n errorText = await response.text();\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: errorText || 'Failed to parse error response' };\n }\n\n strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {\n status: response.status,\n statusText: response.statusText,\n error: errorData,\n errorText,\n projectId,\n });\n\n throw new Error('AI usage data request failed. Check server logs for details.');\n }\n\n let data;\n try {\n data = (await response.json()) as {\n data: { cmsAiCreditsUsed: number };\n subscription: {\n subscriptionId: string;\n planPriceId: string;\n subscriptionStatus: string;\n isActiveSubscription: boolean;\n cmsAiEnabled: boolean;\n cmsAiCreditsBase: number;\n cmsAiCreditsMaxUsage: number;\n currentTermStart: string;\n currentTermEnd: string;\n };\n };\n } catch (parseError) {\n strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);\n throw new Error('AI usage data request failed. Check server logs for details.');\n }\n\n return {\n ...data.data,\n subscription: data.subscription,\n };\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === 'AbortError') {\n strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);\n throw new Error('AI usage data request failed. Check server logs for details.');\n }\n\n throw fetchError;\n }\n };\n\n return {\n isEnabled,\n getAiFeatureConfig,\n getAiToken,\n getAiUsage,\n };\n};\n\nexport { createAiAdminService };\n"],"names":["createAiAdminService","strapi","aiTokenCache","Map","isEnabled","configEnabled","config","get","licenseEnabled","ee","features","getAiFeatureConfig","isAiI18nConfigured","isAiMediaLibraryConfigured","i18nSettings","plugin","service","getSettings","uploadSettings","Boolean","aiLocalizations","aiMetadata","resolveAiContext","errorPrefix","log","error","Error","replace","isEE","eeLicense","process","env","STRAPI_LICENSE","licensePath","path","join","dirs","app","root","fs","readFileSync","toString","projectId","aiServerUrl","STRAPI_AI_URL","getAiToken","ERROR_PREFIX","user","requestContext","state","userIdentifier","id","cacheKey","cachedToken","now","Date","bufferMs","expiresAtMs","info","token","expiresAt","delete","http","response","fetch","method","headers","crypto","randomUUID","body","JSON","stringify","ok","errorData","errorText","text","parse","status","statusText","data","json","parseError","jwt","userId","getTime","set","fetchError","name","getAiUsage","eeKey","subscription"],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ var user = require('./user.js');
|
|
|
11
11
|
var webhooks = require('./webhooks.js');
|
|
12
12
|
var contentApi = require('./content-api.js');
|
|
13
13
|
var homepage = require('./homepage.js');
|
|
14
|
+
var ai = require('../ai/controllers/ai.js');
|
|
14
15
|
|
|
15
16
|
var controllers = {
|
|
16
17
|
admin,
|
|
@@ -23,7 +24,8 @@ var controllers = {
|
|
|
23
24
|
user,
|
|
24
25
|
webhooks,
|
|
25
26
|
'content-api': contentApi,
|
|
26
|
-
homepage
|
|
27
|
+
homepage,
|
|
28
|
+
ai
|
|
27
29
|
};
|
|
28
30
|
|
|
29
31
|
module.exports = controllers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../server/src/controllers/index.ts"],"sourcesContent":["import type {} from 'koa-body';\n\nimport admin from './admin';\nimport apiToken from './api-token';\nimport authenticatedUser from './authenticated-user';\nimport authentication from './authentication';\nimport permission from './permission';\nimport role from './role';\nimport transfer from './transfer';\nimport user from './user';\nimport webhooks from './webhooks';\nimport contentApi from './content-api';\nimport homepage from './homepage';\n\nexport default {\n admin,\n 'api-token': apiToken,\n 'authenticated-user': authenticatedUser,\n authentication,\n permission,\n role,\n transfer,\n user,\n webhooks,\n 'content-api': contentApi,\n homepage,\n};\n"],"names":["admin","apiToken","authenticatedUser","authentication","permission","role","transfer","user","webhooks","contentApi","homepage"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../server/src/controllers/index.ts"],"sourcesContent":["import type {} from 'koa-body';\n\nimport admin from './admin';\nimport apiToken from './api-token';\nimport authenticatedUser from './authenticated-user';\nimport authentication from './authentication';\nimport permission from './permission';\nimport role from './role';\nimport transfer from './transfer';\nimport user from './user';\nimport webhooks from './webhooks';\nimport contentApi from './content-api';\nimport homepage from './homepage';\nimport ai from '../ai/controllers/ai';\n\nexport default {\n admin,\n 'api-token': apiToken,\n 'authenticated-user': authenticatedUser,\n authentication,\n permission,\n role,\n transfer,\n user,\n webhooks,\n 'content-api': contentApi,\n homepage,\n ai,\n};\n"],"names":["admin","apiToken","authenticatedUser","authentication","permission","role","transfer","user","webhooks","contentApi","homepage","ai"],"mappings":";;;;;;;;;;;;;;;AAeA,kBAAe;AACbA,IAAAA,KAAAA;IACA,WAAA,EAAaC,QAAAA;IACb,oBAAA,EAAsBC,iBAAAA;AACtBC,IAAAA,cAAAA;AACAC,IAAAA,UAAAA;AACAC,IAAAA,IAAAA;AACAC,cAAAA,KAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,QAAAA;IACA,aAAA,EAAeC,UAAAA;AACfC,IAAAA,QAAAA;AACAC,IAAAA;AACF,CAAA;;;;"}
|
|
@@ -9,6 +9,7 @@ import user from './user.mjs';
|
|
|
9
9
|
import webhooks from './webhooks.mjs';
|
|
10
10
|
import contentApi from './content-api.mjs';
|
|
11
11
|
import homepage from './homepage.mjs';
|
|
12
|
+
import ai from '../ai/controllers/ai.mjs';
|
|
12
13
|
|
|
13
14
|
var controllers = {
|
|
14
15
|
admin,
|
|
@@ -21,7 +22,8 @@ var controllers = {
|
|
|
21
22
|
user,
|
|
22
23
|
webhooks,
|
|
23
24
|
'content-api': contentApi,
|
|
24
|
-
homepage
|
|
25
|
+
homepage,
|
|
26
|
+
ai
|
|
25
27
|
};
|
|
26
28
|
|
|
27
29
|
export { controllers as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../server/src/controllers/index.ts"],"sourcesContent":["import type {} from 'koa-body';\n\nimport admin from './admin';\nimport apiToken from './api-token';\nimport authenticatedUser from './authenticated-user';\nimport authentication from './authentication';\nimport permission from './permission';\nimport role from './role';\nimport transfer from './transfer';\nimport user from './user';\nimport webhooks from './webhooks';\nimport contentApi from './content-api';\nimport homepage from './homepage';\n\nexport default {\n admin,\n 'api-token': apiToken,\n 'authenticated-user': authenticatedUser,\n authentication,\n permission,\n role,\n transfer,\n user,\n webhooks,\n 'content-api': contentApi,\n homepage,\n};\n"],"names":["admin","apiToken","authenticatedUser","authentication","permission","role","transfer","user","webhooks","contentApi","homepage"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../server/src/controllers/index.ts"],"sourcesContent":["import type {} from 'koa-body';\n\nimport admin from './admin';\nimport apiToken from './api-token';\nimport authenticatedUser from './authenticated-user';\nimport authentication from './authentication';\nimport permission from './permission';\nimport role from './role';\nimport transfer from './transfer';\nimport user from './user';\nimport webhooks from './webhooks';\nimport contentApi from './content-api';\nimport homepage from './homepage';\nimport ai from '../ai/controllers/ai';\n\nexport default {\n admin,\n 'api-token': apiToken,\n 'authenticated-user': authenticatedUser,\n authentication,\n permission,\n role,\n transfer,\n user,\n webhooks,\n 'content-api': contentApi,\n homepage,\n ai,\n};\n"],"names":["admin","apiToken","authenticatedUser","authentication","permission","role","transfer","user","webhooks","contentApi","homepage","ai"],"mappings":";;;;;;;;;;;;;AAeA,kBAAe;AACbA,IAAAA,KAAAA;IACA,WAAA,EAAaC,QAAAA;IACb,oBAAA,EAAsBC,iBAAAA;AACtBC,IAAAA,cAAAA;AACAC,IAAAA,UAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,QAAAA;IACA,aAAA,EAAeC,UAAAA;AACfC,IAAAA,QAAAA;AACAC,IAAAA;AACF,CAAA;;;;"}
|
|
@@ -3,12 +3,16 @@
|
|
|
3
3
|
var serveAdminPanel = require('./routes/serve-admin-panel.js');
|
|
4
4
|
var admin = require('./strategies/admin.js');
|
|
5
5
|
var apiToken = require('./strategies/api-token.js');
|
|
6
|
+
var ai = require('./ai/services/ai.js');
|
|
6
7
|
|
|
7
8
|
var register = (({ strapi })=>{
|
|
8
9
|
const passportMiddleware = strapi.service('admin::passport').init();
|
|
9
10
|
strapi.server.api('admin').use(passportMiddleware);
|
|
10
11
|
strapi.get('auth').register('admin', admin.default);
|
|
11
12
|
strapi.get('auth').register('content-api', apiToken.default);
|
|
13
|
+
strapi.add('ai.admin', ()=>ai.createAiAdminService({
|
|
14
|
+
strapi
|
|
15
|
+
}));
|
|
12
16
|
const shouldServeAdminPanel = strapi.config.get('admin.serveAdminPanel');
|
|
13
17
|
if (shouldServeAdminPanel) {
|
|
14
18
|
serveAdminPanel({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sources":["../../../../server/src/register.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport registerAdminPanelRoute from './routes/serve-admin-panel';\nimport adminAuthStrategy from './strategies/admin';\nimport apiTokenAuthStrategy from './strategies/api-token';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const passportMiddleware = strapi.service('admin::passport').init();\n\n strapi.server.api('admin').use(passportMiddleware);\n strapi.get('auth').register('admin', adminAuthStrategy);\n strapi.get('auth').register('content-api', apiTokenAuthStrategy);\n\n const shouldServeAdminPanel = strapi.config.get('admin.serveAdminPanel');\n\n if (shouldServeAdminPanel) {\n registerAdminPanelRoute({ strapi });\n }\n};\n"],"names":["strapi","passportMiddleware","service","init","server","api","use","get","register","adminAuthStrategy","apiTokenAuthStrategy","shouldServeAdminPanel","config","registerAdminPanelRoute"],"mappings":"
|
|
1
|
+
{"version":3,"file":"register.js","sources":["../../../../server/src/register.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport registerAdminPanelRoute from './routes/serve-admin-panel';\nimport adminAuthStrategy from './strategies/admin';\nimport apiTokenAuthStrategy from './strategies/api-token';\nimport { createAiAdminService } from './ai/services/ai';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const passportMiddleware = strapi.service('admin::passport').init();\n\n strapi.server.api('admin').use(passportMiddleware);\n strapi.get('auth').register('admin', adminAuthStrategy);\n strapi.get('auth').register('content-api', apiTokenAuthStrategy);\n\n strapi.add('ai.admin', () => createAiAdminService({ strapi }));\n\n const shouldServeAdminPanel = strapi.config.get('admin.serveAdminPanel');\n\n if (shouldServeAdminPanel) {\n registerAdminPanelRoute({ strapi });\n }\n};\n"],"names":["strapi","passportMiddleware","service","init","server","api","use","get","register","adminAuthStrategy","apiTokenAuthStrategy","add","createAiAdminService","shouldServeAdminPanel","config","registerAdminPanelRoute"],"mappings":";;;;;;;AAMA,eAAe,CAAA,CAAC,EAAEA,MAAM,EAA2B,GAAA;AACjD,IAAA,MAAMC,kBAAAA,GAAqBD,MAAAA,CAAOE,OAAO,CAAC,mBAAmBC,IAAI,EAAA;AAEjEH,IAAAA,MAAAA,CAAOI,MAAM,CAACC,GAAG,CAAC,OAAA,CAAA,CAASC,GAAG,CAACL,kBAAAA,CAAAA;AAC/BD,IAAAA,MAAAA,CAAOO,GAAG,CAAC,MAAA,CAAA,CAAQC,QAAQ,CAAC,OAAA,EAASC,aAAAA,CAAAA;AACrCT,IAAAA,MAAAA,CAAOO,GAAG,CAAC,MAAA,CAAA,CAAQC,QAAQ,CAAC,aAAA,EAAeE,gBAAAA,CAAAA;AAE3CV,IAAAA,MAAAA,CAAOW,GAAG,CAAC,UAAA,EAAY,IAAMC,uBAAAA,CAAqB;AAAEZ,YAAAA;AAAO,SAAA,CAAA,CAAA;AAE3D,IAAA,MAAMa,qBAAAA,GAAwBb,MAAAA,CAAOc,MAAM,CAACP,GAAG,CAAC,uBAAA,CAAA;AAEhD,IAAA,IAAIM,qBAAAA,EAAuB;QACzBE,eAAAA,CAAwB;AAAEf,YAAAA;AAAO,SAAA,CAAA;AACnC,IAAA;AACF,CAAA;;;;"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import registerAdminPanelRoute from './routes/serve-admin-panel.mjs';
|
|
2
2
|
import adminAuthStrategy from './strategies/admin.mjs';
|
|
3
3
|
import apiTokenAuthStrategy from './strategies/api-token.mjs';
|
|
4
|
+
import { createAiAdminService } from './ai/services/ai.mjs';
|
|
4
5
|
|
|
5
6
|
var register = (({ strapi })=>{
|
|
6
7
|
const passportMiddleware = strapi.service('admin::passport').init();
|
|
7
8
|
strapi.server.api('admin').use(passportMiddleware);
|
|
8
9
|
strapi.get('auth').register('admin', adminAuthStrategy);
|
|
9
10
|
strapi.get('auth').register('content-api', apiTokenAuthStrategy);
|
|
11
|
+
strapi.add('ai.admin', ()=>createAiAdminService({
|
|
12
|
+
strapi
|
|
13
|
+
}));
|
|
10
14
|
const shouldServeAdminPanel = strapi.config.get('admin.serveAdminPanel');
|
|
11
15
|
if (shouldServeAdminPanel) {
|
|
12
16
|
registerAdminPanelRoute({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.mjs","sources":["../../../../server/src/register.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport registerAdminPanelRoute from './routes/serve-admin-panel';\nimport adminAuthStrategy from './strategies/admin';\nimport apiTokenAuthStrategy from './strategies/api-token';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const passportMiddleware = strapi.service('admin::passport').init();\n\n strapi.server.api('admin').use(passportMiddleware);\n strapi.get('auth').register('admin', adminAuthStrategy);\n strapi.get('auth').register('content-api', apiTokenAuthStrategy);\n\n const shouldServeAdminPanel = strapi.config.get('admin.serveAdminPanel');\n\n if (shouldServeAdminPanel) {\n registerAdminPanelRoute({ strapi });\n }\n};\n"],"names":["strapi","passportMiddleware","service","init","server","api","use","get","register","adminAuthStrategy","apiTokenAuthStrategy","shouldServeAdminPanel","config","registerAdminPanelRoute"],"mappings":"
|
|
1
|
+
{"version":3,"file":"register.mjs","sources":["../../../../server/src/register.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport registerAdminPanelRoute from './routes/serve-admin-panel';\nimport adminAuthStrategy from './strategies/admin';\nimport apiTokenAuthStrategy from './strategies/api-token';\nimport { createAiAdminService } from './ai/services/ai';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const passportMiddleware = strapi.service('admin::passport').init();\n\n strapi.server.api('admin').use(passportMiddleware);\n strapi.get('auth').register('admin', adminAuthStrategy);\n strapi.get('auth').register('content-api', apiTokenAuthStrategy);\n\n strapi.add('ai.admin', () => createAiAdminService({ strapi }));\n\n const shouldServeAdminPanel = strapi.config.get('admin.serveAdminPanel');\n\n if (shouldServeAdminPanel) {\n registerAdminPanelRoute({ strapi });\n }\n};\n"],"names":["strapi","passportMiddleware","service","init","server","api","use","get","register","adminAuthStrategy","apiTokenAuthStrategy","add","createAiAdminService","shouldServeAdminPanel","config","registerAdminPanelRoute"],"mappings":";;;;;AAMA,eAAe,CAAA,CAAC,EAAEA,MAAM,EAA2B,GAAA;AACjD,IAAA,MAAMC,kBAAAA,GAAqBD,MAAAA,CAAOE,OAAO,CAAC,mBAAmBC,IAAI,EAAA;AAEjEH,IAAAA,MAAAA,CAAOI,MAAM,CAACC,GAAG,CAAC,OAAA,CAAA,CAASC,GAAG,CAACL,kBAAAA,CAAAA;AAC/BD,IAAAA,MAAAA,CAAOO,GAAG,CAAC,MAAA,CAAA,CAAQC,QAAQ,CAAC,OAAA,EAASC,iBAAAA,CAAAA;AACrCT,IAAAA,MAAAA,CAAOO,GAAG,CAAC,MAAA,CAAA,CAAQC,QAAQ,CAAC,aAAA,EAAeE,oBAAAA,CAAAA;AAE3CV,IAAAA,MAAAA,CAAOW,GAAG,CAAC,UAAA,EAAY,IAAMC,oBAAAA,CAAqB;AAAEZ,YAAAA;AAAO,SAAA,CAAA,CAAA;AAE3D,IAAA,MAAMa,qBAAAA,GAAwBb,MAAAA,CAAOc,MAAM,CAACP,GAAG,CAAC,uBAAA,CAAA;AAEhD,IAAA,IAAIM,qBAAAA,EAAuB;QACzBE,uBAAAA,CAAwB;AAAEf,YAAAA;AAAO,SAAA,CAAA;AACnC,IAAA;AACF,CAAA;;;;"}
|
|
@@ -10,6 +10,7 @@ var apiTokens = require('./api-tokens.js');
|
|
|
10
10
|
var contentApi = require('./content-api.js');
|
|
11
11
|
var transfer = require('./transfer.js');
|
|
12
12
|
var homepage = require('./homepage.js');
|
|
13
|
+
var ai = require('../ai/routes/ai.js');
|
|
13
14
|
|
|
14
15
|
const routes = {
|
|
15
16
|
admin: {
|
|
@@ -24,7 +25,8 @@ const routes = {
|
|
|
24
25
|
...apiTokens,
|
|
25
26
|
...contentApi,
|
|
26
27
|
...transfer,
|
|
27
|
-
...homepage
|
|
28
|
+
...homepage,
|
|
29
|
+
...ai.routes
|
|
28
30
|
]
|
|
29
31
|
}
|
|
30
32
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../server/src/routes/index.ts"],"sourcesContent":["import admin from './admin';\nimport authentication from './authentication';\nimport permissions from './permissions';\nimport users from './users';\nimport roles from './roles';\nimport webhooks from './webhooks';\nimport apiTokens from './api-tokens';\nimport contentApi from './content-api';\nimport transfer from './transfer';\nimport homepage from './homepage';\n\nconst routes = {\n admin: {\n type: 'admin',\n routes: [\n ...admin,\n ...authentication,\n ...permissions,\n ...users,\n ...roles,\n ...webhooks,\n ...apiTokens,\n ...contentApi,\n ...transfer,\n ...homepage,\n ],\n },\n};\n\nexport default routes;\n"],"names":["routes","admin","type","authentication","permissions","users","roles","webhooks","apiTokens","contentApi","transfer","homepage"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../server/src/routes/index.ts"],"sourcesContent":["import admin from './admin';\nimport authentication from './authentication';\nimport permissions from './permissions';\nimport users from './users';\nimport roles from './roles';\nimport webhooks from './webhooks';\nimport apiTokens from './api-tokens';\nimport contentApi from './content-api';\nimport transfer from './transfer';\nimport homepage from './homepage';\nimport aiRoutes from '../ai/routes/ai';\n\nconst routes = {\n admin: {\n type: 'admin',\n routes: [\n ...admin,\n ...authentication,\n ...permissions,\n ...users,\n ...roles,\n ...webhooks,\n ...apiTokens,\n ...contentApi,\n ...transfer,\n ...homepage,\n ...aiRoutes.routes,\n ],\n },\n};\n\nexport default routes;\n"],"names":["routes","admin","type","authentication","permissions","users","roles","webhooks","apiTokens","contentApi","transfer","homepage","aiRoutes"],"mappings":";;;;;;;;;;;;;;AAYA,MAAMA,MAAAA,GAAS;IACbC,KAAAA,EAAO;QACLC,IAAAA,EAAM,OAAA;QACNF,MAAAA,EAAQ;AACHC,YAAAA,GAAAA,KAAAA;AACAE,YAAAA,GAAAA,cAAAA;AACAC,YAAAA,GAAAA,WAAAA;AACAC,YAAAA,GAAAA,KAAAA;AACAC,YAAAA,GAAAA,KAAAA;AACAC,YAAAA,GAAAA,QAAAA;AACAC,YAAAA,GAAAA,SAAAA;AACAC,YAAAA,GAAAA,UAAAA;AACAC,YAAAA,GAAAA,QAAAA;AACAC,YAAAA,GAAAA,QAAAA;AACAC,YAAAA,GAAAA,EAAAA,CAASZ;AACb;AACH;AACF;;;;"}
|
|
@@ -8,6 +8,7 @@ import apiTokens from './api-tokens.mjs';
|
|
|
8
8
|
import contentApi from './content-api.mjs';
|
|
9
9
|
import transfer from './transfer.mjs';
|
|
10
10
|
import homepage from './homepage.mjs';
|
|
11
|
+
import aiRoutes from '../ai/routes/ai.mjs';
|
|
11
12
|
|
|
12
13
|
const routes = {
|
|
13
14
|
admin: {
|
|
@@ -22,7 +23,8 @@ const routes = {
|
|
|
22
23
|
...apiTokens,
|
|
23
24
|
...contentApi,
|
|
24
25
|
...transfer,
|
|
25
|
-
...homepage
|
|
26
|
+
...homepage,
|
|
27
|
+
...aiRoutes.routes
|
|
26
28
|
]
|
|
27
29
|
}
|
|
28
30
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../server/src/routes/index.ts"],"sourcesContent":["import admin from './admin';\nimport authentication from './authentication';\nimport permissions from './permissions';\nimport users from './users';\nimport roles from './roles';\nimport webhooks from './webhooks';\nimport apiTokens from './api-tokens';\nimport contentApi from './content-api';\nimport transfer from './transfer';\nimport homepage from './homepage';\n\nconst routes = {\n admin: {\n type: 'admin',\n routes: [\n ...admin,\n ...authentication,\n ...permissions,\n ...users,\n ...roles,\n ...webhooks,\n ...apiTokens,\n ...contentApi,\n ...transfer,\n ...homepage,\n ],\n },\n};\n\nexport default routes;\n"],"names":["routes","admin","type","authentication","permissions","users","roles","webhooks","apiTokens","contentApi","transfer","homepage"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../server/src/routes/index.ts"],"sourcesContent":["import admin from './admin';\nimport authentication from './authentication';\nimport permissions from './permissions';\nimport users from './users';\nimport roles from './roles';\nimport webhooks from './webhooks';\nimport apiTokens from './api-tokens';\nimport contentApi from './content-api';\nimport transfer from './transfer';\nimport homepage from './homepage';\nimport aiRoutes from '../ai/routes/ai';\n\nconst routes = {\n admin: {\n type: 'admin',\n routes: [\n ...admin,\n ...authentication,\n ...permissions,\n ...users,\n ...roles,\n ...webhooks,\n ...apiTokens,\n ...contentApi,\n ...transfer,\n ...homepage,\n ...aiRoutes.routes,\n ],\n },\n};\n\nexport default routes;\n"],"names":["routes","admin","type","authentication","permissions","users","roles","webhooks","apiTokens","contentApi","transfer","homepage","aiRoutes"],"mappings":";;;;;;;;;;;;AAYA,MAAMA,MAAAA,GAAS;IACbC,KAAAA,EAAO;QACLC,IAAAA,EAAM,OAAA;QACNF,MAAAA,EAAQ;AACHC,YAAAA,GAAAA,KAAAA;AACAE,YAAAA,GAAAA,cAAAA;AACAC,YAAAA,GAAAA,WAAAA;AACAC,YAAAA,GAAAA,KAAAA;AACAC,YAAAA,GAAAA,KAAAA;AACAC,YAAAA,GAAAA,QAAAA;AACAC,YAAAA,GAAAA,SAAAA;AACAC,YAAAA,GAAAA,UAAAA;AACAC,YAAAA,GAAAA,QAAAA;AACAC,YAAAA,GAAAA,QAAAA;AACAC,YAAAA,GAAAA,QAAAA,CAASZ;AACb;AACH;AACF;;;;"}
|
|
@@ -2,7 +2,7 @@ import type { Context } from 'koa';
|
|
|
2
2
|
declare const _default: {
|
|
3
3
|
getAiToken(ctx: Context): Promise<Context | undefined>;
|
|
4
4
|
getAiUsage(ctx: Context): Promise<Context | undefined>;
|
|
5
|
-
|
|
5
|
+
getAiFeatureConfig(ctx: Context): Promise<Context | undefined>;
|
|
6
6
|
};
|
|
7
7
|
export default _default;
|
|
8
8
|
//# sourceMappingURL=ai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../../../server/src/ai/controllers/ai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;;oBAIX,OAAO;oBAwBP,OAAO;4BAeC,OAAO;;AAxCvC,wBA0DE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../../../server/src/ai/routes/ai.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,wBA4BE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Core } from '@strapi/types';
|
|
2
|
+
declare const createAiAdminService: ({ strapi }: {
|
|
3
|
+
strapi: Core.Strapi;
|
|
4
|
+
}) => {
|
|
5
|
+
isEnabled: () => boolean;
|
|
6
|
+
getAiFeatureConfig: () => Promise<{
|
|
7
|
+
isAiI18nConfigured: boolean;
|
|
8
|
+
isAiMediaLibraryConfigured: boolean;
|
|
9
|
+
}>;
|
|
10
|
+
getAiToken: () => Promise<{
|
|
11
|
+
token: string;
|
|
12
|
+
expiresAt: string | undefined;
|
|
13
|
+
}>;
|
|
14
|
+
getAiUsage: () => Promise<{
|
|
15
|
+
subscription: {
|
|
16
|
+
subscriptionId: string;
|
|
17
|
+
planPriceId: string;
|
|
18
|
+
subscriptionStatus: string;
|
|
19
|
+
isActiveSubscription: boolean;
|
|
20
|
+
cmsAiEnabled: boolean;
|
|
21
|
+
cmsAiCreditsBase: number;
|
|
22
|
+
cmsAiCreditsMaxUsage: number;
|
|
23
|
+
currentTermStart: string;
|
|
24
|
+
currentTermEnd: string;
|
|
25
|
+
};
|
|
26
|
+
cmsAiCreditsUsed: number;
|
|
27
|
+
}>;
|
|
28
|
+
};
|
|
29
|
+
export { createAiAdminService };
|
|
30
|
+
//# sourceMappingURL=ai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../../../server/src/ai/services/ai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAM1C,QAAA,MAAM,oBAAoB,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;qBAczC,OAAO;;;;;;;;;;;4BAyOH,MAAM;yBACT,MAAM;gCACC,MAAM;kCACJ,OAAO;0BACf,OAAO;8BACH,MAAM;kCACF,MAAM;8BACV,MAAM;4BACR,MAAM;;0BAVE,MAAM;;CAsCzC,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -149,6 +149,11 @@ declare const _default: {
|
|
|
149
149
|
};
|
|
150
150
|
}>;
|
|
151
151
|
};
|
|
152
|
+
ai: {
|
|
153
|
+
getAiToken(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
|
|
154
|
+
getAiUsage(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
|
|
155
|
+
getAiFeatureConfig(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
|
|
156
|
+
};
|
|
152
157
|
};
|
|
153
158
|
export default _default;
|
|
154
159
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,wBAaE"}
|
|
@@ -370,6 +370,11 @@ declare let admin: {
|
|
|
370
370
|
};
|
|
371
371
|
}>;
|
|
372
372
|
};
|
|
373
|
+
ai: {
|
|
374
|
+
getAiToken(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
|
|
375
|
+
getAiUsage(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
|
|
376
|
+
getAiFeatureConfig(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
|
|
377
|
+
};
|
|
373
378
|
};
|
|
374
379
|
contentTypes: {
|
|
375
380
|
permission: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";AAeA,QAAA,IAAI,KAAK
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";AAeA,QAAA,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWR,CAAC;AAUF,eAAe,KAAK,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../server/src/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../server/src/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;qCAMd;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;AAAnD,wBAcE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/index.ts"],"names":[],"mappings":";AAYA,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiBX,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -41,15 +41,15 @@ export declare namespace GetAiUsage {
|
|
|
41
41
|
/**
|
|
42
42
|
* GET /ai-feature-config - Get AI feature config
|
|
43
43
|
*/
|
|
44
|
-
export declare namespace
|
|
44
|
+
export declare namespace GetAiFeatureConfig {
|
|
45
45
|
interface Request {
|
|
46
46
|
query: {};
|
|
47
47
|
body: {};
|
|
48
48
|
}
|
|
49
49
|
interface Response {
|
|
50
50
|
data: {
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
isAiI18nConfigured: boolean;
|
|
52
|
+
isAiMediaLibraryConfigured: boolean;
|
|
53
53
|
};
|
|
54
54
|
error?: errors.ApplicationError;
|
|
55
55
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/admin",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.44.0",
|
|
4
4
|
"description": "Strapi Admin",
|
|
5
5
|
"homepage": "https://strapi.io",
|
|
6
6
|
"bugs": {
|
|
@@ -91,14 +91,14 @@
|
|
|
91
91
|
"@reduxjs/toolkit": "1.9.7",
|
|
92
92
|
"@strapi/design-system": "2.2.0",
|
|
93
93
|
"@strapi/icons": "2.2.0",
|
|
94
|
-
"@strapi/permissions": "5.
|
|
95
|
-
"@strapi/types": "5.
|
|
96
|
-
"@strapi/typescript-utils": "5.
|
|
97
|
-
"@strapi/utils": "5.
|
|
94
|
+
"@strapi/permissions": "5.44.0",
|
|
95
|
+
"@strapi/types": "5.44.0",
|
|
96
|
+
"@strapi/typescript-utils": "5.44.0",
|
|
97
|
+
"@strapi/utils": "5.44.0",
|
|
98
98
|
"@testing-library/dom": "10.4.1",
|
|
99
99
|
"@testing-library/react": "16.3.0",
|
|
100
100
|
"@testing-library/user-event": "14.6.1",
|
|
101
|
-
"axios": "1.15.
|
|
101
|
+
"axios": "1.15.1",
|
|
102
102
|
"bcryptjs": "2.4.3",
|
|
103
103
|
"boxen": "5.1.2",
|
|
104
104
|
"chalk": "^4.1.2",
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"fast-deep-equal": "3.1.3",
|
|
110
110
|
"formik": "2.4.5",
|
|
111
111
|
"fractional-indexing": "3.2.0",
|
|
112
|
-
"fs-extra": "11.
|
|
112
|
+
"fs-extra": "11.3.4",
|
|
113
113
|
"highlight.js": "^10.4.1",
|
|
114
114
|
"immer": "9.0.21",
|
|
115
115
|
"inquirer": "9.3.8",
|
|
@@ -141,17 +141,17 @@
|
|
|
141
141
|
"rimraf": "6.1.3",
|
|
142
142
|
"sanitize-html": "2.13.0",
|
|
143
143
|
"scheduler": "0.23.0",
|
|
144
|
-
"semver": "7.
|
|
144
|
+
"semver": "7.7.4",
|
|
145
145
|
"sift": "16.0.1",
|
|
146
146
|
"sonner": "2.0.7",
|
|
147
|
-
"typescript": "5.4.
|
|
147
|
+
"typescript": "5.4.5",
|
|
148
148
|
"use-context-selector": "1.4.1",
|
|
149
149
|
"yup": "0.32.9",
|
|
150
150
|
"zod": "3.25.67"
|
|
151
151
|
},
|
|
152
152
|
"devDependencies": {
|
|
153
|
-
"@strapi/admin-test-utils": "5.
|
|
154
|
-
"@strapi/data-transfer": "5.
|
|
153
|
+
"@strapi/admin-test-utils": "5.44.0",
|
|
154
|
+
"@strapi/data-transfer": "5.44.0",
|
|
155
155
|
"@types/codemirror5": "npm:@types/codemirror@^5.60.15",
|
|
156
156
|
"@types/fs-extra": "11.0.4",
|
|
157
157
|
"@types/invariant": "2.2.36",
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { Core } from '@strapi/types';
|
|
2
|
-
declare const createAIContainer: ({ strapi }: {
|
|
3
|
-
strapi: Core.Strapi;
|
|
4
|
-
}) => {
|
|
5
|
-
getAIFeatureConfig: () => Promise<{
|
|
6
|
-
isAIi18nConfigured: boolean;
|
|
7
|
-
isAIMediaLibraryConfigured: boolean;
|
|
8
|
-
}>;
|
|
9
|
-
getAiToken: () => Promise<{
|
|
10
|
-
token: string;
|
|
11
|
-
expiresAt: string | undefined;
|
|
12
|
-
}>;
|
|
13
|
-
};
|
|
14
|
-
export { createAIContainer };
|
|
15
|
-
//# sourceMappingURL=ai.d.ts.map
|