@strapi/admin 5.25.0 → 5.26.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/App.js +6 -2
- package/dist/admin/admin/src/App.js.map +1 -1
- package/dist/admin/admin/src/App.mjs +7 -3
- package/dist/admin/admin/src/App.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Context.js +11 -1
- package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Context.mjs +11 -1
- package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js +160 -23
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs +162 -25
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js +28 -9
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs +30 -11
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js +2 -1
- package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs +2 -1
- package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js +2 -1
- package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs +2 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js +2 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs +2 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useAIAvailability.js +13 -0
- package/dist/admin/admin/src/hooks/useAIAvailability.js.map +1 -0
- package/dist/admin/admin/src/hooks/useAIAvailability.mjs +11 -0
- package/dist/admin/admin/src/hooks/useAIAvailability.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Home/HomePage.js +1 -0
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs +1 -0
- package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +12 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +12 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
- package/dist/admin/admin/src/render.js +6 -1
- package/dist/admin/admin/src/render.js.map +1 -1
- package/dist/admin/admin/src/render.mjs +6 -1
- package/dist/admin/admin/src/render.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +2 -0
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +2 -0
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/ee/admin/src/components/GlobalNotifications.js +11 -0
- package/dist/admin/ee/admin/src/components/GlobalNotifications.js.map +1 -0
- package/dist/admin/ee/admin/src/components/GlobalNotifications.mjs +9 -0
- package/dist/admin/ee/admin/src/components/GlobalNotifications.mjs.map +1 -0
- package/dist/admin/ee/admin/src/hooks/useAIAvailability.js +11 -0
- package/dist/admin/ee/admin/src/hooks/useAIAvailability.js.map +1 -0
- package/dist/admin/ee/admin/src/hooks/useAIAvailability.mjs +9 -0
- package/dist/admin/ee/admin/src/hooks/useAIAvailability.mjs.map +1 -0
- package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.js +82 -0
- package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.js.map +1 -0
- package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.mjs +80 -0
- package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.mjs.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +102 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +100 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -0
- package/dist/admin/ee/admin/src/services/ai.js +30 -0
- package/dist/admin/ee/admin/src/services/ai.js.map +1 -0
- package/dist/admin/ee/admin/src/services/ai.mjs +26 -0
- package/dist/admin/ee/admin/src/services/ai.mjs.map +1 -0
- package/dist/admin/ee.js +4 -0
- package/dist/admin/ee.js.map +1 -1
- package/dist/admin/ee.mjs +2 -0
- package/dist/admin/ee.mjs.map +1 -1
- package/dist/admin/index.js +2 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -0
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/components/GuidedTour/Context.d.ts +7 -0
- package/dist/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.d.ts +7 -16
- package/dist/admin/src/components/GuidedTour/Tours.d.ts +1 -22
- package/dist/admin/src/ee.d.ts +2 -0
- package/dist/admin/src/features/Tracking.d.ts +21 -2
- package/dist/admin/src/hooks/useAIAvailability.d.ts +5 -0
- package/dist/admin/src/index.d.ts +2 -0
- package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -2
- package/dist/admin/src/services/admin.d.ts +1 -0
- package/dist/ee/admin/src/components/GlobalNotifications.d.ts +1 -0
- package/dist/ee/admin/src/hooks/useAIAvailability.d.ts +1 -0
- package/dist/ee/admin/src/hooks/useAIUsageWarning.d.ts +5 -0
- package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +1 -1
- package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.d.ts +1 -0
- package/dist/ee/admin/src/services/ai.d.ts +9 -0
- package/dist/ee/server/src/ai/controllers/ai.d.ts +7 -0
- package/dist/ee/server/src/ai/controllers/ai.d.ts.map +1 -0
- package/dist/ee/server/src/ai/routes/ai.d.ts +13 -0
- package/dist/ee/server/src/ai/routes/ai.d.ts.map +1 -0
- package/dist/ee/server/src/controllers/admin.d.ts +3 -0
- package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/index.d.ts +3 -0
- package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +15 -187
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/server/ee/server/src/ai/controllers/ai.js +218 -0
- package/dist/server/ee/server/src/ai/controllers/ai.js.map +1 -0
- package/dist/server/ee/server/src/ai/controllers/ai.mjs +216 -0
- package/dist/server/ee/server/src/ai/controllers/ai.mjs.map +1 -0
- package/dist/server/ee/server/src/ai/routes/ai.js +32 -0
- package/dist/server/ee/server/src/ai/routes/ai.js.map +1 -0
- package/dist/server/ee/server/src/ai/routes/ai.mjs +30 -0
- package/dist/server/ee/server/src/ai/routes/ai.mjs.map +1 -0
- package/dist/server/ee/server/src/controllers/admin.js +4 -1
- package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs +4 -1
- package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/ee/server/src/index.js +37 -23
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +37 -23
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/server/src/controllers/admin.js +5 -1
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs +5 -1
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/src/controllers/admin.d.ts +2 -0
- package/dist/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +2 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +2 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/shared/contracts/admin.d.ts +1 -0
- package/dist/shared/contracts/admin.d.ts.map +1 -1
- package/dist/shared/contracts/ai.d.ts +40 -0
- package/dist/shared/contracts/ai.d.ts.map +1 -0
- package/dist/shared/contracts/users.d.ts +16 -0
- package/dist/shared/contracts/users.d.ts.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../../../../ee/server/src/ai/routes/ai.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,wBAsBE"}
|
|
@@ -9,6 +9,7 @@ declare const _default: {
|
|
|
9
9
|
}[];
|
|
10
10
|
flags: {};
|
|
11
11
|
type: string | null | undefined;
|
|
12
|
+
ai: {};
|
|
12
13
|
};
|
|
13
14
|
} | {
|
|
14
15
|
data: {
|
|
@@ -17,6 +18,7 @@ declare const _default: {
|
|
|
17
18
|
flags: {};
|
|
18
19
|
isTrial?: undefined;
|
|
19
20
|
type?: undefined;
|
|
21
|
+
ai?: undefined;
|
|
20
22
|
};
|
|
21
23
|
}>;
|
|
22
24
|
licenseLimitInformation(): Promise<{
|
|
@@ -28,6 +30,7 @@ declare const _default: {
|
|
|
28
30
|
shouldStopCreate: boolean;
|
|
29
31
|
licenseLimitStatus: string | null;
|
|
30
32
|
isHostedOnStrapiCloud: boolean;
|
|
33
|
+
aiLicenseKey: unknown;
|
|
31
34
|
type: string | null | undefined;
|
|
32
35
|
isTrial: boolean;
|
|
33
36
|
features: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../../../ee/server/src/controllers/admin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../../../ee/server/src/controllers/admin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,wBAgEE"}
|
|
@@ -27,6 +27,7 @@ declare const _default: {
|
|
|
27
27
|
}[];
|
|
28
28
|
flags: {};
|
|
29
29
|
type: string | null | undefined;
|
|
30
|
+
ai: {};
|
|
30
31
|
};
|
|
31
32
|
} | {
|
|
32
33
|
data: {
|
|
@@ -35,6 +36,7 @@ declare const _default: {
|
|
|
35
36
|
flags: {};
|
|
36
37
|
isTrial?: undefined;
|
|
37
38
|
type?: undefined;
|
|
39
|
+
ai?: undefined;
|
|
38
40
|
};
|
|
39
41
|
}>;
|
|
40
42
|
licenseLimitInformation(): Promise<{
|
|
@@ -46,6 +48,7 @@ declare const _default: {
|
|
|
46
48
|
shouldStopCreate: boolean;
|
|
47
49
|
licenseLimitStatus: string | null;
|
|
48
50
|
isHostedOnStrapiCloud: boolean;
|
|
51
|
+
aiLicenseKey: unknown;
|
|
49
52
|
type: string | null | undefined;
|
|
50
53
|
isTrial: boolean;
|
|
51
54
|
features: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../ee/server/src/controllers/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../ee/server/src/controllers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,wBAKE"}
|
|
@@ -1,99 +1,15 @@
|
|
|
1
1
|
/// <reference types="koa" />
|
|
2
2
|
import type { Core } from '@strapi/types';
|
|
3
3
|
declare const getAdminEE: () => {
|
|
4
|
-
register: ({ strapi }: {
|
|
5
|
-
strapi: Core.Strapi;
|
|
6
|
-
}) => Promise<void>;
|
|
7
|
-
bootstrap: (args: any) => Promise<void>;
|
|
8
|
-
destroy: ({ strapi }: {
|
|
9
|
-
strapi: Core.Strapi;
|
|
10
|
-
}) => Promise<void>;
|
|
11
|
-
contentTypes: {
|
|
12
|
-
'audit-log': {
|
|
13
|
-
schema: {
|
|
14
|
-
kind: string;
|
|
15
|
-
collectionName: string;
|
|
16
|
-
info: {
|
|
17
|
-
singularName: string;
|
|
18
|
-
pluralName: string;
|
|
19
|
-
displayName: string;
|
|
20
|
-
};
|
|
21
|
-
options: {
|
|
22
|
-
timestamps: boolean;
|
|
23
|
-
};
|
|
24
|
-
pluginOptions: {
|
|
25
|
-
'content-manager': {
|
|
26
|
-
visible: boolean;
|
|
27
|
-
};
|
|
28
|
-
'content-type-builder': {
|
|
29
|
-
visible: boolean;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
attributes: {
|
|
33
|
-
action: {
|
|
34
|
-
type: string;
|
|
35
|
-
required: boolean;
|
|
36
|
-
};
|
|
37
|
-
date: {
|
|
38
|
-
type: string;
|
|
39
|
-
required: boolean;
|
|
40
|
-
};
|
|
41
|
-
user: {
|
|
42
|
-
type: string;
|
|
43
|
-
relation: string;
|
|
44
|
-
target: string;
|
|
45
|
-
};
|
|
46
|
-
payload: {
|
|
47
|
-
type: string;
|
|
48
|
-
};
|
|
49
|
-
};
|
|
50
|
-
};
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
|
-
services: {
|
|
54
|
-
auth: {
|
|
55
|
-
forgotPassword: ({ email }?: any) => Promise<any>;
|
|
56
|
-
resetPassword: ({ resetPasswordToken, password }?: any) => Promise<any>;
|
|
57
|
-
};
|
|
58
|
-
passport: {
|
|
59
|
-
providerRegistry: Map<any, any>;
|
|
60
|
-
getStrategyCallbackURL: (providerName: string) => string;
|
|
61
|
-
syncProviderRegistryWithConfig: () => void;
|
|
62
|
-
authEventsMapper: {
|
|
63
|
-
onSSOAutoRegistration: string;
|
|
64
|
-
onConnectionSuccess: string;
|
|
65
|
-
onConnectionError: string;
|
|
66
|
-
};
|
|
67
|
-
getPassportStrategies: () => any[];
|
|
68
|
-
};
|
|
69
|
-
role: {
|
|
70
|
-
ssoCheckRolesIdForDeletion: (ids: any) => Promise<void>;
|
|
71
|
-
};
|
|
72
|
-
user: {
|
|
73
|
-
updateEEDisabledUsersList: (id: string, input: any) => Promise<void>;
|
|
74
|
-
removeFromEEDisabledUsersList: (ids: unknown) => Promise<void>;
|
|
75
|
-
getCurrentActiveUserCount: () => Promise<number>;
|
|
76
|
-
deleteByIds: (ids: any) => Promise<any[]>;
|
|
77
|
-
deleteById: (id: unknown) => Promise<any>;
|
|
78
|
-
updateById: (id: any, attributes: any) => Promise<any>;
|
|
79
|
-
};
|
|
80
|
-
metrics: {
|
|
81
|
-
startCron: (strapi: Core.Strapi) => void;
|
|
82
|
-
getSSOProvidersList: () => Promise<any>;
|
|
83
|
-
sendUpdateProjectInformation: (strapi: Core.Strapi) => Promise<void>;
|
|
84
|
-
};
|
|
85
|
-
'seat-enforcement': {
|
|
86
|
-
seatEnforcementWorkflow: () => Promise<void>;
|
|
87
|
-
getDisabledUserList: () => Promise<unknown>;
|
|
88
|
-
};
|
|
89
|
-
'persist-tables': {
|
|
90
|
-
persistTablesWithPrefix: (tableNamePrefix: string) => Promise<void>;
|
|
91
|
-
removePersistedTablesWithSuffix: (tableNameSuffix: string) => Promise<void>;
|
|
92
|
-
persistTables: (tables: (string | import("./services/persist-tables").PersistedTable)[]) => Promise<void>;
|
|
93
|
-
findTables: typeof import("./services/persist-tables").findTables;
|
|
94
|
-
};
|
|
95
|
-
};
|
|
96
4
|
controllers: {
|
|
5
|
+
ai?: {
|
|
6
|
+
getAiToken(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
|
|
7
|
+
getAiUsage(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
|
|
8
|
+
} | undefined;
|
|
9
|
+
'audit-logs'?: {
|
|
10
|
+
findMany(ctx: import("koa").Context): Promise<void>;
|
|
11
|
+
findOne(ctx: import("koa").Context): Promise<void>;
|
|
12
|
+
} | undefined;
|
|
97
13
|
authentication: {
|
|
98
14
|
getProviders(ctx: import("koa").Context): Promise<void>;
|
|
99
15
|
getProviderLoginOptions(ctx: import("koa").Context): Promise<void>;
|
|
@@ -121,6 +37,7 @@ declare const getAdminEE: () => {
|
|
|
121
37
|
}[];
|
|
122
38
|
flags: {};
|
|
123
39
|
type: string | null | undefined;
|
|
40
|
+
ai: {};
|
|
124
41
|
};
|
|
125
42
|
} | {
|
|
126
43
|
data: {
|
|
@@ -129,6 +46,7 @@ declare const getAdminEE: () => {
|
|
|
129
46
|
flags: {};
|
|
130
47
|
isTrial?: undefined;
|
|
131
48
|
type?: undefined;
|
|
49
|
+
ai?: undefined;
|
|
132
50
|
};
|
|
133
51
|
}>;
|
|
134
52
|
licenseLimitInformation(): Promise<{
|
|
@@ -140,6 +58,7 @@ declare const getAdminEE: () => {
|
|
|
140
58
|
shouldStopCreate: boolean;
|
|
141
59
|
licenseLimitStatus: string | null;
|
|
142
60
|
isHostedOnStrapiCloud: boolean;
|
|
61
|
+
aiLicenseKey: unknown;
|
|
143
62
|
type: string | null | undefined;
|
|
144
63
|
isTrial: boolean;
|
|
145
64
|
features: {
|
|
@@ -151,34 +70,7 @@ declare const getAdminEE: () => {
|
|
|
151
70
|
};
|
|
152
71
|
};
|
|
153
72
|
routes: {
|
|
154
|
-
|
|
155
|
-
type: string;
|
|
156
|
-
routes: ({
|
|
157
|
-
method: string;
|
|
158
|
-
path: string;
|
|
159
|
-
handler: string;
|
|
160
|
-
config: {
|
|
161
|
-
middlewares: Core.MiddlewareHandler[];
|
|
162
|
-
auth: boolean;
|
|
163
|
-
policies?: undefined;
|
|
164
|
-
};
|
|
165
|
-
} | {
|
|
166
|
-
method: string;
|
|
167
|
-
path: string;
|
|
168
|
-
handler: string;
|
|
169
|
-
config: {
|
|
170
|
-
middlewares: Core.MiddlewareHandler[];
|
|
171
|
-
policies: (string | {
|
|
172
|
-
name: string;
|
|
173
|
-
config: {
|
|
174
|
-
actions: string[];
|
|
175
|
-
};
|
|
176
|
-
})[];
|
|
177
|
-
auth?: undefined;
|
|
178
|
-
};
|
|
179
|
-
})[];
|
|
180
|
-
};
|
|
181
|
-
'license-limit': {
|
|
73
|
+
ai?: {
|
|
182
74
|
type: string;
|
|
183
75
|
routes: {
|
|
184
76
|
method: string;
|
|
@@ -188,72 +80,8 @@ declare const getAdminEE: () => {
|
|
|
188
80
|
policies: string[];
|
|
189
81
|
};
|
|
190
82
|
}[];
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
} | {
|
|
194
|
-
controllers: {
|
|
195
|
-
'audit-logs': {
|
|
196
|
-
findMany(ctx: import("koa").Context): Promise<void>;
|
|
197
|
-
findOne(ctx: import("koa").Context): Promise<void>;
|
|
198
|
-
};
|
|
199
|
-
authentication: {
|
|
200
|
-
getProviders(ctx: import("koa").Context): Promise<void>;
|
|
201
|
-
getProviderLoginOptions(ctx: import("koa").Context): Promise<void>;
|
|
202
|
-
updateProviderLoginOptions(ctx: import("koa").Context): Promise<void>;
|
|
203
|
-
providerLogin(ctx: import("koa").Context, next: import("koa").Next): any;
|
|
204
|
-
};
|
|
205
|
-
role: {
|
|
206
|
-
create(ctx: import("koa").Context): Promise<void>;
|
|
207
|
-
deleteOne(ctx: import("koa").Context): Promise<any>;
|
|
208
|
-
deleteMany(ctx: import("koa").Context): Promise<any>;
|
|
209
|
-
};
|
|
210
|
-
user: {
|
|
211
|
-
create(ctx: import("koa").Context): Promise<void>;
|
|
212
|
-
update(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
|
|
213
|
-
isSSOLocked(ctx: import("koa").Context): Promise<void>;
|
|
214
|
-
};
|
|
215
|
-
admin: {
|
|
216
|
-
getProjectType(): Promise<{
|
|
217
|
-
data: {
|
|
218
|
-
isEE: boolean | undefined;
|
|
219
|
-
isTrial: boolean;
|
|
220
|
-
features: {
|
|
221
|
-
[key: string]: any;
|
|
222
|
-
name: string;
|
|
223
|
-
}[];
|
|
224
|
-
flags: {};
|
|
225
|
-
type: string | null | undefined;
|
|
226
|
-
};
|
|
227
|
-
} | {
|
|
228
|
-
data: {
|
|
229
|
-
isEE: boolean;
|
|
230
|
-
features: never[];
|
|
231
|
-
flags: {};
|
|
232
|
-
isTrial?: undefined;
|
|
233
|
-
type?: undefined;
|
|
234
|
-
};
|
|
235
|
-
}>;
|
|
236
|
-
licenseLimitInformation(): Promise<{
|
|
237
|
-
data: {
|
|
238
|
-
enforcementUserCount: any;
|
|
239
|
-
currentActiveUserCount: any;
|
|
240
|
-
permittedSeats: number | null | undefined;
|
|
241
|
-
shouldNotify: boolean;
|
|
242
|
-
shouldStopCreate: boolean;
|
|
243
|
-
licenseLimitStatus: string | null;
|
|
244
|
-
isHostedOnStrapiCloud: boolean;
|
|
245
|
-
type: string | null | undefined;
|
|
246
|
-
isTrial: boolean;
|
|
247
|
-
features: {
|
|
248
|
-
[key: string]: any;
|
|
249
|
-
name: string;
|
|
250
|
-
}[];
|
|
251
|
-
};
|
|
252
|
-
}>;
|
|
253
|
-
};
|
|
254
|
-
};
|
|
255
|
-
routes: {
|
|
256
|
-
'audit-logs': {
|
|
83
|
+
} | undefined;
|
|
84
|
+
'audit-logs'?: {
|
|
257
85
|
type: string;
|
|
258
86
|
routes: {
|
|
259
87
|
method: string;
|
|
@@ -269,7 +97,7 @@ declare const getAdminEE: () => {
|
|
|
269
97
|
})[];
|
|
270
98
|
};
|
|
271
99
|
}[];
|
|
272
|
-
};
|
|
100
|
+
} | undefined;
|
|
273
101
|
sso: {
|
|
274
102
|
type: string;
|
|
275
103
|
routes: ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../ee/server/src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../ee/server/src/index.ts"],"names":[],"mappings":";AAcA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAgCe;QAAE,MAAM,EAAE,KAAK,MAAM,CAAA;KAAE;wBAaxB;QAAE,MAAM,EAAE,KAAK,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOpD,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var path = require('path');
|
|
4
|
+
var fs = require('fs');
|
|
5
|
+
var crypto = require('crypto');
|
|
6
|
+
|
|
7
|
+
var aiController = {
|
|
8
|
+
async getAiToken (ctx) {
|
|
9
|
+
const ERROR_PREFIX = 'AI token request failed:';
|
|
10
|
+
const USER_ERROR_MESSAGE = 'AI token request failed. Check server logs for details.';
|
|
11
|
+
try {
|
|
12
|
+
// Security check: Ensure user is authenticated and has proper permissions
|
|
13
|
+
if (!ctx.state.user) {
|
|
14
|
+
return ctx.unauthorized('Authentication required');
|
|
15
|
+
}
|
|
16
|
+
// Check if EE features are enabled first
|
|
17
|
+
if (!strapi.ee?.isEE) {
|
|
18
|
+
strapi.log.error(`${ERROR_PREFIX} Enterprise Edition features are not enabled`);
|
|
19
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
20
|
+
}
|
|
21
|
+
// Get the EE license
|
|
22
|
+
// First try environment variable, then try reading from file
|
|
23
|
+
let eeLicense = process.env.STRAPI_LICENSE;
|
|
24
|
+
if (!eeLicense) {
|
|
25
|
+
try {
|
|
26
|
+
const licensePath = path.join(strapi.dirs.app.root, 'license.txt');
|
|
27
|
+
eeLicense = fs.readFileSync(licensePath).toString();
|
|
28
|
+
} catch (error) {
|
|
29
|
+
// License file doesn't exist or can't be read
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (!eeLicense) {
|
|
33
|
+
strapi.log.error(`${ERROR_PREFIX} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`);
|
|
34
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
35
|
+
}
|
|
36
|
+
const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';
|
|
37
|
+
if (!aiServerUrl) {
|
|
38
|
+
strapi.log.error(`${ERROR_PREFIX} AI server URL not configured. Please set STRAPI_AI_URL environment variable.`);
|
|
39
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
40
|
+
}
|
|
41
|
+
// Get the current user
|
|
42
|
+
const user = ctx.state.user;
|
|
43
|
+
// Create a secure user identifier using only user ID
|
|
44
|
+
const userIdentifier = user.id.toString();
|
|
45
|
+
// Get project ID
|
|
46
|
+
const projectId = strapi.config.get('uuid');
|
|
47
|
+
if (!projectId) {
|
|
48
|
+
strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);
|
|
49
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
50
|
+
}
|
|
51
|
+
strapi.log.http('Contacting AI Server for token generation');
|
|
52
|
+
try {
|
|
53
|
+
// Call the AI server's getAiJWT endpoint
|
|
54
|
+
const response = await fetch(`${aiServerUrl}/auth/getAiJWT`, {
|
|
55
|
+
method: 'POST',
|
|
56
|
+
headers: {
|
|
57
|
+
'Content-Type': 'application/json',
|
|
58
|
+
// No authorization header needed for public endpoint
|
|
59
|
+
// Add request ID for tracing
|
|
60
|
+
'X-Request-Id': crypto.randomUUID()
|
|
61
|
+
},
|
|
62
|
+
body: JSON.stringify({
|
|
63
|
+
eeLicense,
|
|
64
|
+
userIdentifier,
|
|
65
|
+
projectId
|
|
66
|
+
})
|
|
67
|
+
});
|
|
68
|
+
if (!response.ok) {
|
|
69
|
+
let errorData;
|
|
70
|
+
let errorText;
|
|
71
|
+
try {
|
|
72
|
+
errorText = await response.text();
|
|
73
|
+
errorData = JSON.parse(errorText);
|
|
74
|
+
} catch {
|
|
75
|
+
errorData = {
|
|
76
|
+
error: errorText || 'Failed to parse error response'
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {
|
|
80
|
+
status: response.status,
|
|
81
|
+
statusText: response.statusText,
|
|
82
|
+
error: errorData,
|
|
83
|
+
errorText,
|
|
84
|
+
projectId
|
|
85
|
+
});
|
|
86
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
87
|
+
}
|
|
88
|
+
let data;
|
|
89
|
+
try {
|
|
90
|
+
data = await response.json();
|
|
91
|
+
} catch (parseError) {
|
|
92
|
+
strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);
|
|
93
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
94
|
+
}
|
|
95
|
+
if (!data.jwt) {
|
|
96
|
+
strapi.log.error(`${ERROR_PREFIX} Invalid response: missing JWT token`);
|
|
97
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
98
|
+
}
|
|
99
|
+
strapi.log.info('AI token generated successfully', {
|
|
100
|
+
userId: user.id,
|
|
101
|
+
expiresAt: data.expiresAt
|
|
102
|
+
});
|
|
103
|
+
// Return the AI JWT with metadata
|
|
104
|
+
// Note: Token expires in 1 hour, client should handle refresh
|
|
105
|
+
ctx.body = {
|
|
106
|
+
data: {
|
|
107
|
+
token: data.jwt,
|
|
108
|
+
expiresAt: data.expiresAt
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
} catch (fetchError) {
|
|
112
|
+
if (fetchError instanceof Error && fetchError.name === 'AbortError') {
|
|
113
|
+
strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);
|
|
114
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
115
|
+
}
|
|
116
|
+
throw fetchError;
|
|
117
|
+
}
|
|
118
|
+
} catch (error) {
|
|
119
|
+
strapi.log.error(`${ERROR_PREFIX} ${error instanceof Error ? error.message : 'Unknown error'}`, error);
|
|
120
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
async getAiUsage (ctx) {
|
|
124
|
+
const ERROR_PREFIX = 'AI usage data request failed:';
|
|
125
|
+
const USER_ERROR_MESSAGE = 'AI usage data request failed. Check server logs for details.';
|
|
126
|
+
// Security check: Ensure user is authenticated and has proper permissions
|
|
127
|
+
if (!ctx.state.user) {
|
|
128
|
+
return ctx.unauthorized('Authentication required');
|
|
129
|
+
}
|
|
130
|
+
// Check if EE features are enabled first
|
|
131
|
+
if (!strapi.ee?.isEE) {
|
|
132
|
+
strapi.log.error(`${ERROR_PREFIX} Enterprise Edition features are not enabled`);
|
|
133
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
134
|
+
}
|
|
135
|
+
// Get the EE license
|
|
136
|
+
// First try environment variable, then try reading from file
|
|
137
|
+
let eeLicense = process.env.STRAPI_LICENSE;
|
|
138
|
+
if (!eeLicense) {
|
|
139
|
+
try {
|
|
140
|
+
const licensePath = path.join(strapi.dirs.app.root, 'license.txt');
|
|
141
|
+
eeLicense = fs.readFileSync(licensePath).toString();
|
|
142
|
+
} catch (error) {
|
|
143
|
+
// License file doesn't exist or can't be read
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (!eeLicense) {
|
|
147
|
+
strapi.log.error(`${ERROR_PREFIX} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`);
|
|
148
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
149
|
+
}
|
|
150
|
+
const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';
|
|
151
|
+
if (!aiServerUrl) {
|
|
152
|
+
strapi.log.error(`${ERROR_PREFIX} AI server URL not configured. Please set STRAPI_AI_URL or STRAPI_AI_URL environment variable.`);
|
|
153
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
154
|
+
}
|
|
155
|
+
// Get project ID
|
|
156
|
+
const projectId = strapi.config.get('uuid');
|
|
157
|
+
if (!projectId) {
|
|
158
|
+
strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);
|
|
159
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
// Call the AI server's getAiJWT endpoint
|
|
163
|
+
const response = await fetch(`${aiServerUrl}/cms/ai-data`, {
|
|
164
|
+
method: 'POST',
|
|
165
|
+
headers: {
|
|
166
|
+
'Content-Type': 'application/json',
|
|
167
|
+
// No authorization header needed for public endpoint
|
|
168
|
+
// Add request ID for tracing
|
|
169
|
+
'X-Request-Id': crypto.randomUUID()
|
|
170
|
+
},
|
|
171
|
+
body: JSON.stringify({
|
|
172
|
+
eeKey: eeLicense,
|
|
173
|
+
projectId
|
|
174
|
+
})
|
|
175
|
+
});
|
|
176
|
+
if (!response.ok) {
|
|
177
|
+
let errorData;
|
|
178
|
+
let errorText;
|
|
179
|
+
try {
|
|
180
|
+
errorText = await response.text();
|
|
181
|
+
errorData = JSON.parse(errorText);
|
|
182
|
+
} catch {
|
|
183
|
+
errorData = {
|
|
184
|
+
error: errorText || 'Failed to parse error response'
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {
|
|
188
|
+
status: response.status,
|
|
189
|
+
statusText: response.statusText,
|
|
190
|
+
error: errorData,
|
|
191
|
+
errorText,
|
|
192
|
+
projectId
|
|
193
|
+
});
|
|
194
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
195
|
+
}
|
|
196
|
+
let data;
|
|
197
|
+
try {
|
|
198
|
+
data = await response.json();
|
|
199
|
+
} catch (parseError) {
|
|
200
|
+
strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);
|
|
201
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
202
|
+
}
|
|
203
|
+
ctx.body = {
|
|
204
|
+
...data.data,
|
|
205
|
+
subscription: data.subscription
|
|
206
|
+
};
|
|
207
|
+
} catch (fetchError) {
|
|
208
|
+
if (fetchError instanceof Error && fetchError.name === 'AbortError') {
|
|
209
|
+
strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);
|
|
210
|
+
return ctx.internalServerError(USER_ERROR_MESSAGE);
|
|
211
|
+
}
|
|
212
|
+
throw fetchError;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
module.exports = aiController;
|
|
218
|
+
//# sourceMappingURL=ai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.js","sources":["../../../../../../../ee/server/src/ai/controllers/ai.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport path from 'path';\nimport fs from 'fs';\nimport crypto from 'crypto';\nimport type { AdminUser } from '../../../../../shared/contracts/shared';\nimport { GetAiToken } from '../../../../../shared/contracts/ai';\n\nexport default {\n async getAiToken(ctx: Context) {\n const ERROR_PREFIX = 'AI token request failed:';\n const USER_ERROR_MESSAGE = 'AI token request failed. Check server logs for details.';\n\n try {\n // Security check: Ensure user is authenticated and has proper permissions\n if (!ctx.state.user) {\n return ctx.unauthorized('Authentication required');\n }\n\n // Check if EE features are enabled first\n if (!strapi.ee?.isEE) {\n strapi.log.error(`${ERROR_PREFIX} Enterprise Edition features are not enabled`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get the EE license\n // First try environment variable, then try reading from file\n let eeLicense = process.env.STRAPI_LICENSE;\n\n if (!eeLicense) {\n try {\n const licensePath = path.join(strapi.dirs.app.root, 'license.txt');\n eeLicense = fs.readFileSync(licensePath).toString();\n } catch (error) {\n // License file doesn't exist or can't be read\n }\n }\n\n if (!eeLicense) {\n strapi.log.error(\n `${ERROR_PREFIX} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';\n\n if (!aiServerUrl) {\n strapi.log.error(\n `${ERROR_PREFIX} AI server URL not configured. Please set STRAPI_AI_URL environment variable.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get the current user\n const user = ctx.state.user as AdminUser;\n\n // Create a secure user identifier using only user ID\n const userIdentifier = user.id.toString();\n\n // Get project ID\n const projectId = strapi.config.get('uuid');\n if (!projectId) {\n strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n strapi.log.http('Contacting AI Server for token generation');\n\n try {\n // Call the AI server's getAiJWT endpoint\n const response = await fetch(`${aiServerUrl}/auth/getAiJWT`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n // No authorization header needed for public endpoint\n // Add request ID for tracing\n 'X-Request-Id': crypto.randomUUID(),\n },\n body: JSON.stringify({\n eeLicense,\n userIdentifier,\n projectId,\n }),\n });\n\n if (!response.ok) {\n let errorData;\n let errorText;\n try {\n errorText = await response.text();\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: errorText || 'Failed to parse error response' };\n }\n\n strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {\n status: response.status,\n statusText: response.statusText,\n error: errorData,\n errorText,\n projectId,\n });\n\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n let data;\n try {\n data = (await response.json()) as {\n jwt: string;\n expiresAt?: string;\n };\n } catch (parseError) {\n strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n if (!data.jwt) {\n strapi.log.error(`${ERROR_PREFIX} Invalid response: missing JWT token`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n strapi.log.info('AI token generated successfully', {\n userId: user.id,\n expiresAt: data.expiresAt,\n });\n\n // Return the AI JWT with metadata\n // Note: Token expires in 1 hour, client should handle refresh\n ctx.body = {\n data: {\n token: data.jwt,\n expiresAt: data.expiresAt, // 1 hour from generation\n },\n } satisfies GetAiToken.Response;\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === 'AbortError') {\n strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n throw fetchError;\n }\n } catch (error) {\n strapi.log.error(\n `${ERROR_PREFIX} ${error instanceof Error ? error.message : 'Unknown error'}`,\n error\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n },\n async getAiUsage(ctx: Context) {\n const ERROR_PREFIX = 'AI usage data request failed:';\n const USER_ERROR_MESSAGE = 'AI usage data request failed. Check server logs for details.';\n // Security check: Ensure user is authenticated and has proper permissions\n if (!ctx.state.user) {\n return ctx.unauthorized('Authentication required');\n }\n\n // Check if EE features are enabled first\n if (!strapi.ee?.isEE) {\n strapi.log.error(`${ERROR_PREFIX} Enterprise Edition features are not enabled`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get the EE license\n // First try environment variable, then try reading from file\n let eeLicense = process.env.STRAPI_LICENSE;\n\n if (!eeLicense) {\n try {\n const licensePath = path.join(strapi.dirs.app.root, 'license.txt');\n eeLicense = fs.readFileSync(licensePath).toString();\n } catch (error) {\n // License file doesn't exist or can't be read\n }\n }\n\n if (!eeLicense) {\n strapi.log.error(\n `${ERROR_PREFIX} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';\n\n if (!aiServerUrl) {\n strapi.log.error(\n `${ERROR_PREFIX} AI server URL not configured. Please set STRAPI_AI_URL or STRAPI_AI_URL environment variable.`\n );\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n // Get project ID\n const projectId = strapi.config.get('uuid');\n if (!projectId) {\n strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n try {\n // Call the AI server's getAiJWT endpoint\n const response = await fetch(`${aiServerUrl}/cms/ai-data`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n // No authorization header needed for public endpoint\n // Add request ID for tracing\n 'X-Request-Id': crypto.randomUUID(),\n },\n body: JSON.stringify({\n eeKey: eeLicense,\n projectId,\n }),\n });\n\n if (!response.ok) {\n let errorData;\n let errorText;\n try {\n errorText = await response.text();\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: errorText || 'Failed to parse error response' };\n }\n\n strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {\n status: response.status,\n statusText: response.statusText,\n error: errorData,\n errorText,\n projectId,\n });\n\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n let data;\n try {\n data = (await response.json()) as {\n data: {\n cmsAiCreditsUsed: number;\n };\n subscription: {\n subscriptionId: string;\n planPriceId: string;\n subscriptionStatus: string;\n isActiveSubscription: boolean;\n cmsAiEnabled: boolean;\n cmsAiCreditsBase: number;\n cmsAiCreditsMaxUsage: number;\n currentTermStart: string;\n currentTermEnd: string;\n };\n };\n } catch (parseError) {\n strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n ctx.body = {\n ...data.data,\n subscription: data.subscription,\n };\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === 'AbortError') {\n strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);\n return ctx.internalServerError(USER_ERROR_MESSAGE);\n }\n\n throw fetchError;\n }\n },\n};\n"],"names":["getAiToken","ctx","ERROR_PREFIX","USER_ERROR_MESSAGE","state","user","unauthorized","strapi","ee","isEE","log","error","internalServerError","eeLicense","process","env","STRAPI_LICENSE","licensePath","path","join","dirs","app","root","fs","readFileSync","toString","aiServerUrl","STRAPI_AI_URL","userIdentifier","id","projectId","config","get","http","response","fetch","method","headers","crypto","randomUUID","body","JSON","stringify","ok","errorData","errorText","text","parse","status","statusText","data","json","parseError","jwt","info","userId","expiresAt","token","fetchError","Error","name","message","getAiUsage","eeKey","subscription"],"mappings":"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"}
|