@strapi/content-type-builder 5.28.0 → 5.30.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 (41) hide show
  1. package/dist/admin/components/AIChat/Chat.js +1 -0
  2. package/dist/admin/components/AIChat/Chat.js.map +1 -1
  3. package/dist/admin/components/AIChat/Chat.mjs +1 -0
  4. package/dist/admin/components/AIChat/Chat.mjs.map +1 -1
  5. package/dist/admin/components/AIChat/UploadFigmaModal.js +2 -1
  6. package/dist/admin/components/AIChat/UploadFigmaModal.js.map +1 -1
  7. package/dist/admin/components/AIChat/UploadFigmaModal.mjs +2 -1
  8. package/dist/admin/components/AIChat/UploadFigmaModal.mjs.map +1 -1
  9. package/dist/admin/components/AttributeRow.js +7 -1
  10. package/dist/admin/components/AttributeRow.js.map +1 -1
  11. package/dist/admin/components/AttributeRow.mjs +7 -1
  12. package/dist/admin/components/AttributeRow.mjs.map +1 -1
  13. package/dist/admin/components/CheckboxWithNumberField.js +2 -1
  14. package/dist/admin/components/CheckboxWithNumberField.js.map +1 -1
  15. package/dist/admin/components/CheckboxWithNumberField.mjs +2 -1
  16. package/dist/admin/components/CheckboxWithNumberField.mjs.map +1 -1
  17. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js +3 -3
  18. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js.map +1 -1
  19. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs +3 -3
  20. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs.map +1 -1
  21. package/dist/admin/components/List.js +3 -1
  22. package/dist/admin/components/List.js.map +1 -1
  23. package/dist/admin/components/List.mjs +5 -3
  24. package/dist/admin/components/List.mjs.map +1 -1
  25. package/dist/admin/components/PluralName.js +2 -1
  26. package/dist/admin/components/PluralName.js.map +1 -1
  27. package/dist/admin/components/PluralName.mjs +2 -1
  28. package/dist/admin/components/PluralName.mjs.map +1 -1
  29. package/dist/admin/components/SingularName.js +2 -1
  30. package/dist/admin/components/SingularName.js.map +1 -1
  31. package/dist/admin/components/SingularName.mjs +2 -1
  32. package/dist/admin/components/SingularName.mjs.map +1 -1
  33. package/dist/server/register.js +30 -89
  34. package/dist/server/register.js.map +1 -1
  35. package/dist/server/register.mjs +30 -89
  36. package/dist/server/register.mjs.map +1 -1
  37. package/dist/server/src/index.d.ts +3 -1
  38. package/dist/server/src/index.d.ts.map +1 -1
  39. package/dist/server/src/register.d.ts +4 -9
  40. package/dist/server/src/register.d.ts.map +1 -1
  41. package/package.json +5 -5
@@ -1,97 +1,38 @@
1
1
  'use strict';
2
2
 
3
- /**
4
- * This file ensures that the Strapi security middleware's Content Security Policy (CSP)
5
- * allows images and media from both the default sources ("'self'", 'data:', 'blob:')
6
- * and the required S3 domains for AI features. It checks for existing 'img-src' and 'media-src'
7
- * directives and adds the S3 domains if not present. If no directives exist but useDefaults is true,
8
- * it adds the defaults plus the S3 domains. This guarantees that all required sources are allowed
9
- * without overwriting user configuration.
10
- */ var register = (async ()=>{
11
- const s3Domains = [
12
- 'strapi-ai-staging.s3.us-east-1.amazonaws.com',
13
- 'strapi-ai-production.s3.us-east-1.amazonaws.com'
14
- ];
15
- const defaults = [
16
- "'self'",
17
- 'data:',
18
- 'blob:'
19
- ];
20
- const middlewares = strapi.config.get('middlewares');
21
- const configuredMiddlewares = middlewares.map((m)=>{
22
- // Handle case where middleware is a string 'strapi::security'
23
- if (typeof m === 'string' && m === 'strapi::security') {
24
- return {
25
- name: 'strapi::security',
26
- config: {
27
- contentSecurityPolicy: {
28
- useDefaults: true,
29
- directives: {
30
- 'img-src': Array.from(new Set([
31
- ...defaults,
32
- ...s3Domains
33
- ])),
34
- 'media-src': Array.from(new Set([
35
- ...defaults,
36
- ...s3Domains
37
- ]))
38
- }
3
+ var utils = require('@strapi/utils');
4
+
5
+ var register = (async ({ strapi })=>{
6
+ const aiEnabledConfig = strapi.config.get('admin.ai.enabled') !== false;
7
+ const isAIEnabled = aiEnabledConfig && strapi.ee.features.isEnabled('cms-ai');
8
+ if (isAIEnabled) {
9
+ const s3Domains = [
10
+ 'strapi-ai-staging.s3.us-east-1.amazonaws.com',
11
+ 'strapi-ai-production.s3.us-east-1.amazonaws.com'
12
+ ];
13
+ const defaultImgSrc = utils.CSP_DEFAULTS['img-src'];
14
+ const defaultMediaSrc = utils.CSP_DEFAULTS['media-src'];
15
+ // Extend the security middleware configuration to include S3 domains + defaults
16
+ const middlewares = strapi.config.get('middlewares');
17
+ const configuredMiddlewares = utils.extendMiddlewareConfiguration(middlewares, {
18
+ name: 'strapi::security',
19
+ config: {
20
+ contentSecurityPolicy: {
21
+ directives: {
22
+ 'img-src': [
23
+ ...defaultImgSrc,
24
+ ...s3Domains
25
+ ],
26
+ 'media-src': [
27
+ ...defaultMediaSrc,
28
+ ...s3Domains
29
+ ]
39
30
  }
40
31
  }
41
- };
42
- }
43
- // Handle case where middleware is an object with name 'strapi::security'
44
- if (typeof m === 'object' && m.name === 'strapi::security') {
45
- const config = m.config || {};
46
- const csp = config.contentSecurityPolicy || {};
47
- const directives = csp.directives || {};
48
- // img-src
49
- let imgSrc = directives['img-src'];
50
- if (!imgSrc && csp.useDefaults) {
51
- imgSrc = [
52
- ...defaults
53
- ];
54
- }
55
- if (!imgSrc) {
56
- imgSrc = [];
57
- }
58
- imgSrc = Array.from(new Set([
59
- ...imgSrc,
60
- ...s3Domains
61
- ]));
62
- // media-src
63
- let mediaSrc = directives['media-src'];
64
- if (!mediaSrc && csp.useDefaults) {
65
- mediaSrc = [
66
- ...defaults
67
- ];
68
32
  }
69
- if (!mediaSrc) {
70
- mediaSrc = [];
71
- }
72
- mediaSrc = Array.from(new Set([
73
- ...mediaSrc,
74
- ...s3Domains
75
- ]));
76
- // Set back
77
- return {
78
- ...m,
79
- config: {
80
- ...config,
81
- contentSecurityPolicy: {
82
- ...csp,
83
- directives: {
84
- ...directives,
85
- 'img-src': imgSrc,
86
- 'media-src': mediaSrc
87
- }
88
- }
89
- }
90
- };
91
- }
92
- return m;
93
- });
94
- strapi.config.set('middlewares', configuredMiddlewares);
33
+ });
34
+ strapi.config.set('middlewares', configuredMiddlewares);
35
+ }
95
36
  });
96
37
 
97
38
  module.exports = register;
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sources":["../../server/src/register.ts"],"sourcesContent":["/**\n * This file ensures that the Strapi security middleware's Content Security Policy (CSP)\n * allows images and media from both the default sources (\"'self'\", 'data:', 'blob:')\n * and the required S3 domains for AI features. It checks for existing 'img-src' and 'media-src'\n * directives and adds the S3 domains if not present. If no directives exist but useDefaults is true,\n * it adds the defaults plus the S3 domains. This guarantees that all required sources are allowed\n * without overwriting user configuration.\n */\nexport default async () => {\n const s3Domains = [\n 'strapi-ai-staging.s3.us-east-1.amazonaws.com',\n 'strapi-ai-production.s3.us-east-1.amazonaws.com',\n ];\n const defaults = [\"'self'\", 'data:', 'blob:'];\n const middlewares = strapi.config.get('middlewares') as (\n | string\n | { name?: string; config?: any }\n )[];\n\n const configuredMiddlewares = middlewares.map((m) => {\n // Handle case where middleware is a string 'strapi::security'\n if (typeof m === 'string' && m === 'strapi::security') {\n return {\n name: 'strapi::security',\n config: {\n contentSecurityPolicy: {\n useDefaults: true,\n directives: {\n 'img-src': Array.from(new Set([...defaults, ...s3Domains])),\n 'media-src': Array.from(new Set([...defaults, ...s3Domains])),\n },\n },\n },\n };\n }\n // Handle case where middleware is an object with name 'strapi::security'\n if (typeof m === 'object' && m.name === 'strapi::security') {\n const config = m.config || {};\n const csp = config.contentSecurityPolicy || {};\n const directives = csp.directives || {};\n // img-src\n let imgSrc = directives['img-src'];\n if (!imgSrc && csp.useDefaults) {\n imgSrc = [...defaults];\n }\n if (!imgSrc) {\n imgSrc = [];\n }\n imgSrc = Array.from(new Set([...imgSrc, ...s3Domains]));\n // media-src\n let mediaSrc = directives['media-src'];\n if (!mediaSrc && csp.useDefaults) {\n mediaSrc = [...defaults];\n }\n if (!mediaSrc) {\n mediaSrc = [];\n }\n mediaSrc = Array.from(new Set([...mediaSrc, ...s3Domains]));\n // Set back\n return {\n ...m,\n config: {\n ...config,\n contentSecurityPolicy: {\n ...csp,\n directives: {\n ...directives,\n 'img-src': imgSrc,\n 'media-src': mediaSrc,\n },\n },\n },\n };\n }\n return m;\n });\n\n strapi.config.set('middlewares', configuredMiddlewares);\n};\n"],"names":["s3Domains","defaults","middlewares","strapi","config","get","configuredMiddlewares","map","m","name","contentSecurityPolicy","useDefaults","directives","Array","from","Set","csp","imgSrc","mediaSrc","set"],"mappings":"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"}
1
+ {"version":3,"file":"register.js","sources":["../../server/src/register.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { CSP_DEFAULTS, extendMiddlewareConfiguration } from '@strapi/utils';\n\nexport default async ({ strapi }: { strapi: Core.Strapi }) => {\n const aiEnabledConfig = strapi.config.get('admin.ai.enabled') !== false;\n const isAIEnabled = aiEnabledConfig && strapi.ee.features.isEnabled('cms-ai');\n\n if (isAIEnabled) {\n const s3Domains = [\n 'strapi-ai-staging.s3.us-east-1.amazonaws.com',\n 'strapi-ai-production.s3.us-east-1.amazonaws.com',\n ];\n\n const defaultImgSrc = CSP_DEFAULTS['img-src'];\n const defaultMediaSrc = CSP_DEFAULTS['media-src'];\n\n // Extend the security middleware configuration to include S3 domains + defaults\n const middlewares = strapi.config.get('middlewares') as (\n | string\n | { name?: string; config?: any }\n )[];\n\n const configuredMiddlewares = extendMiddlewareConfiguration(middlewares, {\n name: 'strapi::security',\n config: {\n contentSecurityPolicy: {\n directives: {\n 'img-src': [...defaultImgSrc, ...s3Domains],\n 'media-src': [...defaultMediaSrc, ...s3Domains],\n },\n },\n },\n });\n\n strapi.config.set('middlewares', configuredMiddlewares);\n }\n};\n"],"names":["strapi","aiEnabledConfig","config","get","isAIEnabled","ee","features","isEnabled","s3Domains","defaultImgSrc","CSP_DEFAULTS","defaultMediaSrc","middlewares","configuredMiddlewares","extendMiddlewareConfiguration","name","contentSecurityPolicy","directives","set"],"mappings":";;;;AAGA,eAAe,CAAA,OAAO,EAAEA,MAAM,EAA2B,GAAA;AACvD,IAAA,MAAMC,kBAAkBD,MAAOE,CAAAA,MAAM,CAACC,GAAG,CAAC,kBAAwB,CAAA,KAAA,KAAA;IAClE,MAAMC,WAAAA,GAAcH,mBAAmBD,MAAOK,CAAAA,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,QAAA,CAAA;AAEpE,IAAA,IAAIH,WAAa,EAAA;AACf,QAAA,MAAMI,SAAY,GAAA;AAChB,YAAA,8CAAA;AACA,YAAA;AACD,SAAA;QAED,MAAMC,aAAAA,GAAgBC,kBAAY,CAAC,SAAU,CAAA;QAC7C,MAAMC,eAAAA,GAAkBD,kBAAY,CAAC,WAAY,CAAA;;AAGjD,QAAA,MAAME,WAAcZ,GAAAA,MAAAA,CAAOE,MAAM,CAACC,GAAG,CAAC,aAAA,CAAA;QAKtC,MAAMU,qBAAAA,GAAwBC,oCAA8BF,WAAa,EAAA;YACvEG,IAAM,EAAA,kBAAA;YACNb,MAAQ,EAAA;gBACNc,qBAAuB,EAAA;oBACrBC,UAAY,EAAA;wBACV,SAAW,EAAA;AAAIR,4BAAAA,GAAAA,aAAAA;AAAkBD,4BAAAA,GAAAA;AAAU,yBAAA;wBAC3C,WAAa,EAAA;AAAIG,4BAAAA,GAAAA,eAAAA;AAAoBH,4BAAAA,GAAAA;AAAU;AACjD;AACF;AACF;AACF,SAAA,CAAA;AAEAR,QAAAA,MAAAA,CAAOE,MAAM,CAACgB,GAAG,CAAC,aAAeL,EAAAA,qBAAAA,CAAAA;AACnC;AACF,CAAA;;;;"}
@@ -1,95 +1,36 @@
1
- /**
2
- * This file ensures that the Strapi security middleware's Content Security Policy (CSP)
3
- * allows images and media from both the default sources ("'self'", 'data:', 'blob:')
4
- * and the required S3 domains for AI features. It checks for existing 'img-src' and 'media-src'
5
- * directives and adds the S3 domains if not present. If no directives exist but useDefaults is true,
6
- * it adds the defaults plus the S3 domains. This guarantees that all required sources are allowed
7
- * without overwriting user configuration.
8
- */ var register = (async ()=>{
9
- const s3Domains = [
10
- 'strapi-ai-staging.s3.us-east-1.amazonaws.com',
11
- 'strapi-ai-production.s3.us-east-1.amazonaws.com'
12
- ];
13
- const defaults = [
14
- "'self'",
15
- 'data:',
16
- 'blob:'
17
- ];
18
- const middlewares = strapi.config.get('middlewares');
19
- const configuredMiddlewares = middlewares.map((m)=>{
20
- // Handle case where middleware is a string 'strapi::security'
21
- if (typeof m === 'string' && m === 'strapi::security') {
22
- return {
23
- name: 'strapi::security',
24
- config: {
25
- contentSecurityPolicy: {
26
- useDefaults: true,
27
- directives: {
28
- 'img-src': Array.from(new Set([
29
- ...defaults,
30
- ...s3Domains
31
- ])),
32
- 'media-src': Array.from(new Set([
33
- ...defaults,
34
- ...s3Domains
35
- ]))
36
- }
1
+ import { CSP_DEFAULTS, extendMiddlewareConfiguration } from '@strapi/utils';
2
+
3
+ var register = (async ({ strapi })=>{
4
+ const aiEnabledConfig = strapi.config.get('admin.ai.enabled') !== false;
5
+ const isAIEnabled = aiEnabledConfig && strapi.ee.features.isEnabled('cms-ai');
6
+ if (isAIEnabled) {
7
+ const s3Domains = [
8
+ 'strapi-ai-staging.s3.us-east-1.amazonaws.com',
9
+ 'strapi-ai-production.s3.us-east-1.amazonaws.com'
10
+ ];
11
+ const defaultImgSrc = CSP_DEFAULTS['img-src'];
12
+ const defaultMediaSrc = CSP_DEFAULTS['media-src'];
13
+ // Extend the security middleware configuration to include S3 domains + defaults
14
+ const middlewares = strapi.config.get('middlewares');
15
+ const configuredMiddlewares = extendMiddlewareConfiguration(middlewares, {
16
+ name: 'strapi::security',
17
+ config: {
18
+ contentSecurityPolicy: {
19
+ directives: {
20
+ 'img-src': [
21
+ ...defaultImgSrc,
22
+ ...s3Domains
23
+ ],
24
+ 'media-src': [
25
+ ...defaultMediaSrc,
26
+ ...s3Domains
27
+ ]
37
28
  }
38
29
  }
39
- };
40
- }
41
- // Handle case where middleware is an object with name 'strapi::security'
42
- if (typeof m === 'object' && m.name === 'strapi::security') {
43
- const config = m.config || {};
44
- const csp = config.contentSecurityPolicy || {};
45
- const directives = csp.directives || {};
46
- // img-src
47
- let imgSrc = directives['img-src'];
48
- if (!imgSrc && csp.useDefaults) {
49
- imgSrc = [
50
- ...defaults
51
- ];
52
- }
53
- if (!imgSrc) {
54
- imgSrc = [];
55
- }
56
- imgSrc = Array.from(new Set([
57
- ...imgSrc,
58
- ...s3Domains
59
- ]));
60
- // media-src
61
- let mediaSrc = directives['media-src'];
62
- if (!mediaSrc && csp.useDefaults) {
63
- mediaSrc = [
64
- ...defaults
65
- ];
66
30
  }
67
- if (!mediaSrc) {
68
- mediaSrc = [];
69
- }
70
- mediaSrc = Array.from(new Set([
71
- ...mediaSrc,
72
- ...s3Domains
73
- ]));
74
- // Set back
75
- return {
76
- ...m,
77
- config: {
78
- ...config,
79
- contentSecurityPolicy: {
80
- ...csp,
81
- directives: {
82
- ...directives,
83
- 'img-src': imgSrc,
84
- 'media-src': mediaSrc
85
- }
86
- }
87
- }
88
- };
89
- }
90
- return m;
91
- });
92
- strapi.config.set('middlewares', configuredMiddlewares);
31
+ });
32
+ strapi.config.set('middlewares', configuredMiddlewares);
33
+ }
93
34
  });
94
35
 
95
36
  export { register as default };
@@ -1 +1 @@
1
- {"version":3,"file":"register.mjs","sources":["../../server/src/register.ts"],"sourcesContent":["/**\n * This file ensures that the Strapi security middleware's Content Security Policy (CSP)\n * allows images and media from both the default sources (\"'self'\", 'data:', 'blob:')\n * and the required S3 domains for AI features. It checks for existing 'img-src' and 'media-src'\n * directives and adds the S3 domains if not present. If no directives exist but useDefaults is true,\n * it adds the defaults plus the S3 domains. This guarantees that all required sources are allowed\n * without overwriting user configuration.\n */\nexport default async () => {\n const s3Domains = [\n 'strapi-ai-staging.s3.us-east-1.amazonaws.com',\n 'strapi-ai-production.s3.us-east-1.amazonaws.com',\n ];\n const defaults = [\"'self'\", 'data:', 'blob:'];\n const middlewares = strapi.config.get('middlewares') as (\n | string\n | { name?: string; config?: any }\n )[];\n\n const configuredMiddlewares = middlewares.map((m) => {\n // Handle case where middleware is a string 'strapi::security'\n if (typeof m === 'string' && m === 'strapi::security') {\n return {\n name: 'strapi::security',\n config: {\n contentSecurityPolicy: {\n useDefaults: true,\n directives: {\n 'img-src': Array.from(new Set([...defaults, ...s3Domains])),\n 'media-src': Array.from(new Set([...defaults, ...s3Domains])),\n },\n },\n },\n };\n }\n // Handle case where middleware is an object with name 'strapi::security'\n if (typeof m === 'object' && m.name === 'strapi::security') {\n const config = m.config || {};\n const csp = config.contentSecurityPolicy || {};\n const directives = csp.directives || {};\n // img-src\n let imgSrc = directives['img-src'];\n if (!imgSrc && csp.useDefaults) {\n imgSrc = [...defaults];\n }\n if (!imgSrc) {\n imgSrc = [];\n }\n imgSrc = Array.from(new Set([...imgSrc, ...s3Domains]));\n // media-src\n let mediaSrc = directives['media-src'];\n if (!mediaSrc && csp.useDefaults) {\n mediaSrc = [...defaults];\n }\n if (!mediaSrc) {\n mediaSrc = [];\n }\n mediaSrc = Array.from(new Set([...mediaSrc, ...s3Domains]));\n // Set back\n return {\n ...m,\n config: {\n ...config,\n contentSecurityPolicy: {\n ...csp,\n directives: {\n ...directives,\n 'img-src': imgSrc,\n 'media-src': mediaSrc,\n },\n },\n },\n };\n }\n return m;\n });\n\n strapi.config.set('middlewares', configuredMiddlewares);\n};\n"],"names":["s3Domains","defaults","middlewares","strapi","config","get","configuredMiddlewares","map","m","name","contentSecurityPolicy","useDefaults","directives","Array","from","Set","csp","imgSrc","mediaSrc","set"],"mappings":"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"}
1
+ {"version":3,"file":"register.mjs","sources":["../../server/src/register.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { CSP_DEFAULTS, extendMiddlewareConfiguration } from '@strapi/utils';\n\nexport default async ({ strapi }: { strapi: Core.Strapi }) => {\n const aiEnabledConfig = strapi.config.get('admin.ai.enabled') !== false;\n const isAIEnabled = aiEnabledConfig && strapi.ee.features.isEnabled('cms-ai');\n\n if (isAIEnabled) {\n const s3Domains = [\n 'strapi-ai-staging.s3.us-east-1.amazonaws.com',\n 'strapi-ai-production.s3.us-east-1.amazonaws.com',\n ];\n\n const defaultImgSrc = CSP_DEFAULTS['img-src'];\n const defaultMediaSrc = CSP_DEFAULTS['media-src'];\n\n // Extend the security middleware configuration to include S3 domains + defaults\n const middlewares = strapi.config.get('middlewares') as (\n | string\n | { name?: string; config?: any }\n )[];\n\n const configuredMiddlewares = extendMiddlewareConfiguration(middlewares, {\n name: 'strapi::security',\n config: {\n contentSecurityPolicy: {\n directives: {\n 'img-src': [...defaultImgSrc, ...s3Domains],\n 'media-src': [...defaultMediaSrc, ...s3Domains],\n },\n },\n },\n });\n\n strapi.config.set('middlewares', configuredMiddlewares);\n }\n};\n"],"names":["strapi","aiEnabledConfig","config","get","isAIEnabled","ee","features","isEnabled","s3Domains","defaultImgSrc","CSP_DEFAULTS","defaultMediaSrc","middlewares","configuredMiddlewares","extendMiddlewareConfiguration","name","contentSecurityPolicy","directives","set"],"mappings":";;AAGA,eAAe,CAAA,OAAO,EAAEA,MAAM,EAA2B,GAAA;AACvD,IAAA,MAAMC,kBAAkBD,MAAOE,CAAAA,MAAM,CAACC,GAAG,CAAC,kBAAwB,CAAA,KAAA,KAAA;IAClE,MAAMC,WAAAA,GAAcH,mBAAmBD,MAAOK,CAAAA,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,QAAA,CAAA;AAEpE,IAAA,IAAIH,WAAa,EAAA;AACf,QAAA,MAAMI,SAAY,GAAA;AAChB,YAAA,8CAAA;AACA,YAAA;AACD,SAAA;QAED,MAAMC,aAAAA,GAAgBC,YAAY,CAAC,SAAU,CAAA;QAC7C,MAAMC,eAAAA,GAAkBD,YAAY,CAAC,WAAY,CAAA;;AAGjD,QAAA,MAAME,WAAcZ,GAAAA,MAAAA,CAAOE,MAAM,CAACC,GAAG,CAAC,aAAA,CAAA;QAKtC,MAAMU,qBAAAA,GAAwBC,8BAA8BF,WAAa,EAAA;YACvEG,IAAM,EAAA,kBAAA;YACNb,MAAQ,EAAA;gBACNc,qBAAuB,EAAA;oBACrBC,UAAY,EAAA;wBACV,SAAW,EAAA;AAAIR,4BAAAA,GAAAA,aAAAA;AAAkBD,4BAAAA,GAAAA;AAAU,yBAAA;wBAC3C,WAAa,EAAA;AAAIG,4BAAAA,GAAAA,eAAAA;AAAoBH,4BAAAA,GAAAA;AAAU;AACjD;AACF;AACF;AACF,SAAA,CAAA;AAEAR,QAAAA,MAAAA,CAAOE,MAAM,CAACgB,GAAG,CAAC,aAAeL,EAAAA,qBAAAA,CAAAA;AACnC;AACF,CAAA;;;;"}
@@ -7,7 +7,9 @@ declare const _default: () => {
7
7
  bootstrap: ({ strapi }: {
8
8
  strapi: import("@strapi/types/dist/core").Strapi;
9
9
  }) => Promise<void>;
10
- register: () => Promise<void>;
10
+ register: ({ strapi }: {
11
+ strapi: import("@strapi/types/dist/core").Strapi;
12
+ }) => Promise<void>;
11
13
  services: {
12
14
  'content-types': typeof import("./services/content-types");
13
15
  components: typeof import("./services/components");
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASvB,wBAOG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASvB,wBAOG"}
@@ -1,11 +1,6 @@
1
- /**
2
- * This file ensures that the Strapi security middleware's Content Security Policy (CSP)
3
- * allows images and media from both the default sources ("'self'", 'data:', 'blob:')
4
- * and the required S3 domains for AI features. It checks for existing 'img-src' and 'media-src'
5
- * directives and adds the S3 domains if not present. If no directives exist but useDefaults is true,
6
- * it adds the defaults plus the S3 domains. This guarantees that all required sources are allowed
7
- * without overwriting user configuration.
8
- */
9
- declare const _default: () => Promise<void>;
1
+ import type { Core } from '@strapi/types';
2
+ declare const _default: ({ strapi }: {
3
+ strapi: Core.Strapi;
4
+ }) => Promise<void>;
10
5
  export default _default;
11
6
  //# sourceMappingURL=register.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../server/src/register.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;;AACH,wBAsEE"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../server/src/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;qCAGR;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;AAAzD,wBAiCE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/content-type-builder",
3
- "version": "5.28.0",
3
+ "version": "5.30.0",
4
4
  "description": "Create and manage content types",
5
5
  "repository": {
6
6
  "type": "git",
@@ -68,9 +68,9 @@
68
68
  "@reduxjs/toolkit": "1.9.7",
69
69
  "@sindresorhus/slugify": "1.1.0",
70
70
  "@strapi/design-system": "2.0.0-rc.30",
71
- "@strapi/generators": "5.28.0",
71
+ "@strapi/generators": "5.30.0",
72
72
  "@strapi/icons": "2.0.0-rc.30",
73
- "@strapi/utils": "5.28.0",
73
+ "@strapi/utils": "5.30.0",
74
74
  "ai": "5.0.26",
75
75
  "date-fns": "2.30.0",
76
76
  "fs-extra": "11.2.0",
@@ -88,8 +88,8 @@
88
88
  "zod": "3.25.67"
89
89
  },
90
90
  "devDependencies": {
91
- "@strapi/admin": "5.28.0",
92
- "@strapi/types": "5.28.0",
91
+ "@strapi/admin": "5.30.0",
92
+ "@strapi/types": "5.30.0",
93
93
  "@testing-library/dom": "10.1.0",
94
94
  "@testing-library/react": "15.0.7",
95
95
  "@testing-library/user-event": "14.5.2",