@strapi/admin 5.24.2 → 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.
Files changed (166) hide show
  1. package/dist/admin/admin/src/App.js +6 -2
  2. package/dist/admin/admin/src/App.js.map +1 -1
  3. package/dist/admin/admin/src/App.mjs +7 -3
  4. package/dist/admin/admin/src/App.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/GuidedTour/Context.js +11 -1
  6. package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
  7. package/dist/admin/admin/src/components/GuidedTour/Context.mjs +11 -1
  8. package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js +160 -23
  10. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js.map +1 -1
  11. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs +162 -25
  12. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js +28 -9
  14. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
  15. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs +30 -11
  16. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js +2 -1
  18. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js.map +1 -1
  19. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs +2 -1
  20. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/NpsSurvey.js +2 -1
  22. package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
  23. package/dist/admin/admin/src/components/NpsSurvey.mjs +2 -1
  24. package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
  25. package/dist/admin/admin/src/features/Tracking.js +2 -1
  26. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  27. package/dist/admin/admin/src/features/Tracking.mjs +2 -1
  28. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  29. package/dist/admin/admin/src/hooks/useAIAvailability.js +13 -0
  30. package/dist/admin/admin/src/hooks/useAIAvailability.js.map +1 -0
  31. package/dist/admin/admin/src/hooks/useAIAvailability.mjs +11 -0
  32. package/dist/admin/admin/src/hooks/useAIAvailability.mjs.map +1 -0
  33. package/dist/admin/admin/src/pages/Home/HomePage.js +1 -0
  34. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  35. package/dist/admin/admin/src/pages/Home/HomePage.mjs +1 -0
  36. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  37. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +12 -1
  38. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  39. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +12 -1
  40. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  41. package/dist/admin/admin/src/render.js +6 -1
  42. package/dist/admin/admin/src/render.js.map +1 -1
  43. package/dist/admin/admin/src/render.mjs +6 -1
  44. package/dist/admin/admin/src/render.mjs.map +1 -1
  45. package/dist/admin/admin/src/services/homepage.js +15 -1
  46. package/dist/admin/admin/src/services/homepage.js.map +1 -1
  47. package/dist/admin/admin/src/services/homepage.mjs +14 -2
  48. package/dist/admin/admin/src/services/homepage.mjs.map +1 -1
  49. package/dist/admin/admin/src/translations/en.json.js +2 -0
  50. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  51. package/dist/admin/admin/src/translations/en.json.mjs +2 -0
  52. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  53. package/dist/admin/ee/admin/src/components/GlobalNotifications.js +11 -0
  54. package/dist/admin/ee/admin/src/components/GlobalNotifications.js.map +1 -0
  55. package/dist/admin/ee/admin/src/components/GlobalNotifications.mjs +9 -0
  56. package/dist/admin/ee/admin/src/components/GlobalNotifications.mjs.map +1 -0
  57. package/dist/admin/ee/admin/src/hooks/useAIAvailability.js +11 -0
  58. package/dist/admin/ee/admin/src/hooks/useAIAvailability.js.map +1 -0
  59. package/dist/admin/ee/admin/src/hooks/useAIAvailability.mjs +9 -0
  60. package/dist/admin/ee/admin/src/hooks/useAIAvailability.mjs.map +1 -0
  61. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.js +82 -0
  62. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.js.map +1 -0
  63. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.mjs +80 -0
  64. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.mjs.map +1 -0
  65. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +102 -0
  66. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -0
  67. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +100 -0
  68. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -0
  69. package/dist/admin/ee/admin/src/services/ai.js +30 -0
  70. package/dist/admin/ee/admin/src/services/ai.js.map +1 -0
  71. package/dist/admin/ee/admin/src/services/ai.mjs +26 -0
  72. package/dist/admin/ee/admin/src/services/ai.mjs.map +1 -0
  73. package/dist/admin/ee.js +4 -0
  74. package/dist/admin/ee.js.map +1 -1
  75. package/dist/admin/ee.mjs +2 -0
  76. package/dist/admin/ee.mjs.map +1 -1
  77. package/dist/admin/index.js +2 -0
  78. package/dist/admin/index.js.map +1 -1
  79. package/dist/admin/index.mjs +1 -0
  80. package/dist/admin/index.mjs.map +1 -1
  81. package/dist/admin/src/components/GuidedTour/Context.d.ts +7 -0
  82. package/dist/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.d.ts +7 -16
  83. package/dist/admin/src/components/GuidedTour/Tours.d.ts +1 -22
  84. package/dist/admin/src/ee.d.ts +2 -0
  85. package/dist/admin/src/features/Tracking.d.ts +21 -2
  86. package/dist/admin/src/hooks/useAIAvailability.d.ts +5 -0
  87. package/dist/admin/src/index.d.ts +2 -0
  88. package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -2
  89. package/dist/admin/src/services/admin.d.ts +1 -0
  90. package/dist/admin/src/services/homepage.d.ts +3 -2
  91. package/dist/ee/admin/src/components/GlobalNotifications.d.ts +1 -0
  92. package/dist/ee/admin/src/hooks/useAIAvailability.d.ts +1 -0
  93. package/dist/ee/admin/src/hooks/useAIUsageWarning.d.ts +5 -0
  94. package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +1 -1
  95. package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.d.ts +1 -0
  96. package/dist/ee/admin/src/services/ai.d.ts +9 -0
  97. package/dist/ee/server/src/ai/controllers/ai.d.ts +7 -0
  98. package/dist/ee/server/src/ai/controllers/ai.d.ts.map +1 -0
  99. package/dist/ee/server/src/ai/routes/ai.d.ts +13 -0
  100. package/dist/ee/server/src/ai/routes/ai.d.ts.map +1 -0
  101. package/dist/ee/server/src/controllers/admin.d.ts +3 -0
  102. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  103. package/dist/ee/server/src/controllers/index.d.ts +3 -0
  104. package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
  105. package/dist/ee/server/src/index.d.ts +15 -187
  106. package/dist/ee/server/src/index.d.ts.map +1 -1
  107. package/dist/server/ee/server/src/ai/controllers/ai.js +218 -0
  108. package/dist/server/ee/server/src/ai/controllers/ai.js.map +1 -0
  109. package/dist/server/ee/server/src/ai/controllers/ai.mjs +216 -0
  110. package/dist/server/ee/server/src/ai/controllers/ai.mjs.map +1 -0
  111. package/dist/server/ee/server/src/ai/routes/ai.js +32 -0
  112. package/dist/server/ee/server/src/ai/routes/ai.js.map +1 -0
  113. package/dist/server/ee/server/src/ai/routes/ai.mjs +30 -0
  114. package/dist/server/ee/server/src/ai/routes/ai.mjs.map +1 -0
  115. package/dist/server/ee/server/src/controllers/admin.js +4 -1
  116. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  117. package/dist/server/ee/server/src/controllers/admin.mjs +4 -1
  118. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  119. package/dist/server/ee/server/src/index.js +37 -23
  120. package/dist/server/ee/server/src/index.js.map +1 -1
  121. package/dist/server/ee/server/src/index.mjs +37 -23
  122. package/dist/server/ee/server/src/index.mjs.map +1 -1
  123. package/dist/server/server/src/controllers/admin.js +5 -1
  124. package/dist/server/server/src/controllers/admin.js.map +1 -1
  125. package/dist/server/server/src/controllers/admin.mjs +5 -1
  126. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  127. package/dist/server/server/src/controllers/homepage.js +17 -0
  128. package/dist/server/server/src/controllers/homepage.js.map +1 -1
  129. package/dist/server/server/src/controllers/homepage.mjs +17 -0
  130. package/dist/server/server/src/controllers/homepage.mjs.map +1 -1
  131. package/dist/server/server/src/controllers/validation/schema.js +30 -0
  132. package/dist/server/server/src/controllers/validation/schema.js.map +1 -0
  133. package/dist/server/server/src/controllers/validation/schema.mjs +26 -0
  134. package/dist/server/server/src/controllers/validation/schema.mjs.map +1 -0
  135. package/dist/server/server/src/routes/homepage.js +20 -0
  136. package/dist/server/server/src/routes/homepage.js.map +1 -1
  137. package/dist/server/server/src/routes/homepage.mjs +20 -0
  138. package/dist/server/server/src/routes/homepage.mjs.map +1 -1
  139. package/dist/server/server/src/services/homepage.js +48 -1
  140. package/dist/server/server/src/services/homepage.js.map +1 -1
  141. package/dist/server/server/src/services/homepage.mjs +48 -1
  142. package/dist/server/server/src/services/homepage.mjs.map +1 -1
  143. package/dist/server/src/controllers/admin.d.ts +2 -0
  144. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  145. package/dist/server/src/controllers/homepage.d.ts +8 -0
  146. package/dist/server/src/controllers/homepage.d.ts.map +1 -1
  147. package/dist/server/src/controllers/index.d.ts +22 -0
  148. package/dist/server/src/controllers/index.d.ts.map +1 -1
  149. package/dist/server/src/controllers/validation/schema.d.ts +61 -0
  150. package/dist/server/src/controllers/validation/schema.d.ts.map +1 -0
  151. package/dist/server/src/index.d.ts +38 -0
  152. package/dist/server/src/index.d.ts.map +1 -1
  153. package/dist/server/src/routes/homepage.d.ts.map +1 -1
  154. package/dist/server/src/services/homepage.d.ts +3 -0
  155. package/dist/server/src/services/homepage.d.ts.map +1 -1
  156. package/dist/server/src/services/index.d.ts +16 -0
  157. package/dist/server/src/services/index.d.ts.map +1 -1
  158. package/dist/shared/contracts/admin.d.ts +1 -0
  159. package/dist/shared/contracts/admin.d.ts.map +1 -1
  160. package/dist/shared/contracts/ai.d.ts +40 -0
  161. package/dist/shared/contracts/ai.d.ts.map +1 -0
  162. package/dist/shared/contracts/homepage.d.ts +27 -0
  163. package/dist/shared/contracts/homepage.d.ts.map +1 -1
  164. package/dist/shared/contracts/users.d.ts +16 -0
  165. package/dist/shared/contracts/users.d.ts.map +1 -1
  166. package/package.json +9 -9
@@ -50,6 +50,8 @@ export { useClipboard } from './hooks/useClipboard';
50
50
  export { useElementOnScreen } from './hooks/useElementOnScreen';
51
51
  export { useAdminUsers } from './services/users';
52
52
  export { useGetCountDocumentsQuery } from './services/homepage';
53
+ /** @internal */
54
+ export { useAIAvailability } from './hooks/useAIAvailability';
53
55
  /**
54
56
  * Types
55
57
  */
@@ -78,8 +78,8 @@ interface MarketplaceResponse<TData extends Plugin | Provider> {
78
78
  declare function useMarketplaceData({ npmPackageType, debouncedSearch, query, tabQuery, strapiVersion, }: UseMarketplaceDataParams): {
79
79
  pluginsResponse: MarketplaceResponse<Plugin> | null | undefined;
80
80
  providersResponse: MarketplaceResponse<Provider> | undefined;
81
- pluginsStatus: "error" | "loading" | "success" | "idle";
82
- providersStatus: "error" | "loading" | "success" | "idle";
81
+ pluginsStatus: "success" | "loading" | "error" | "idle";
82
+ providersStatus: "success" | "loading" | "error" | "idle";
83
83
  possibleCollections: {};
84
84
  possibleCategories: {};
85
85
  pagination: {
@@ -15,6 +15,7 @@ declare const useInitQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks
15
15
  useTypescriptOnServer: boolean;
16
16
  useTypescriptOnAdmin: boolean;
17
17
  isHostedOnStrapiCloud: boolean;
18
+ aiLicenseKey?: string | undefined;
18
19
  numberOfAllContentTypes: number;
19
20
  numberOfComponents: number;
20
21
  numberOfDynamicZones: number;
@@ -1,3 +1,4 @@
1
+ import * as Homepage from '../../../shared/contracts/homepage';
1
2
  declare const useGetKeyStatisticsQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("..").QueryArguments, unknown, import("..").BaseQueryError>, "GuidedTourMeta" | "HomepageKeyStatistics" | "CountDocuments", {
2
3
  assets: number;
3
4
  contentTypes: number;
@@ -10,5 +11,5 @@ declare const useGetKeyStatisticsQuery: import("@reduxjs/toolkit/dist/query/reac
10
11
  draft: number;
11
12
  published: number;
12
13
  modified: number;
13
- }, "adminApi">>;
14
- export { useGetKeyStatisticsQuery, useGetCountDocumentsQuery };
14
+ }, "adminApi">>, useGetHomepageLayoutQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("..").QueryArguments, unknown, import("..").BaseQueryError>, "GuidedTourMeta" | "HomepageKeyStatistics" | "CountDocuments", Homepage.Homepage.Layout, "adminApi">>, useUpdateHomepageLayoutMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<Homepage.Homepage.LayoutWrite, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("..").QueryArguments, unknown, import("..").BaseQueryError>, "GuidedTourMeta" | "HomepageKeyStatistics" | "CountDocuments", Homepage.Homepage.Layout, "adminApi">>;
15
+ export { useGetKeyStatisticsQuery, useGetCountDocumentsQuery, useGetHomepageLayoutQuery, useUpdateHomepageLayoutMutation, };
@@ -0,0 +1 @@
1
+ export declare const GlobalNotifications: () => null;
@@ -0,0 +1 @@
1
+ export declare const useAIAvailability: () => boolean;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Triggers a warning notification if AI usage is above a threshold (default 80%).
3
+ * @param threshold - Usage percentage (0-1) at which to warn. Default: 0.8 (80%)
4
+ */
5
+ export declare function useAIUsageWarning(threshold?: number): void;
@@ -14,7 +14,7 @@ declare function useLicenseLimits({ enabled }?: UseLicenseLimitsArgs): {
14
14
  type: string;
15
15
  isTrial: boolean;
16
16
  } | undefined;
17
- getFeature: <T>(name: "review-workflows" | "sso" | "cms-content-history" | "audit-logs" | "cms-content-releases") => Record<string, T> | undefined;
17
+ getFeature: <T>(name: "review-workflows" | "sso" | "audit-logs" | "cms-content-releases" | "cms-content-history") => Record<string, T> | undefined;
18
18
  isError: boolean;
19
19
  isLoading: boolean;
20
20
  isTrial: boolean;
@@ -0,0 +1 @@
1
+ export declare const AIUsage: () => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,9 @@
1
+ import { GetAiUsage } from '../../../../shared/contracts/ai';
2
+ declare const useGetAIUsageQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("src").QueryArguments, unknown, import("src").BaseQueryError>, "GuidedTourMeta" | "HomepageKeyStatistics", GetAiUsage.Response, "adminApi">>, useGetAiTokenQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("src").QueryArguments, unknown, import("src").BaseQueryError>, "GuidedTourMeta" | "HomepageKeyStatistics", {
3
+ token: string;
4
+ expiresAt?: string | undefined;
5
+ }, "adminApi">>, useLazyGetAiTokenQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseLazyQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("src").QueryArguments, unknown, import("src").BaseQueryError>, "GuidedTourMeta" | "HomepageKeyStatistics", {
6
+ token: string;
7
+ expiresAt?: string | undefined;
8
+ }, "adminApi">>;
9
+ export { useGetAIUsageQuery, useGetAiTokenQuery, useLazyGetAiTokenQuery };
@@ -0,0 +1,7 @@
1
+ import type { Context } from 'koa';
2
+ declare const _default: {
3
+ getAiToken(ctx: Context): Promise<Context | undefined>;
4
+ getAiUsage(ctx: Context): Promise<Context | undefined>;
5
+ };
6
+ export default _default;
7
+ //# sourceMappingURL=ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../../../../ee/server/src/ai/controllers/ai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;;oBAQX,OAAO;oBA+IP,OAAO;;AAhJ/B,wBA2QE"}
@@ -0,0 +1,13 @@
1
+ declare const _default: {
2
+ type: string;
3
+ routes: {
4
+ method: string;
5
+ path: string;
6
+ handler: string;
7
+ config: {
8
+ policies: string[];
9
+ };
10
+ }[];
11
+ };
12
+ export default _default;
13
+ //# sourceMappingURL=ai.d.ts.map
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,wBA6DE"}
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,wBAKE"}
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
- sso: {
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":";AAYA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBA8BiB;QAAE,MAAM,EAAE,KAAK,MAAM,CAAA;KAAE;wBAWxB;QAAE,MAAM,EAAE,KAAK,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQtD,CAAC;AAEF,eAAe,UAAU,CAAC"}
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