@strapi/core 0.0.0-experimental.4e03c41e8e44fa7b77c41c3e0edd86c7f1fc9c52 → 0.0.0-experimental.4e8289da194e4249b943687480ee5bc44df3a99b

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.

Potentially problematic release.


This version of @strapi/core might be problematic. Click here for more details.

Files changed (128) hide show
  1. package/dist/Strapi.d.ts.map +1 -1
  2. package/dist/Strapi.js +2 -0
  3. package/dist/Strapi.js.map +1 -1
  4. package/dist/Strapi.mjs +2 -0
  5. package/dist/Strapi.mjs.map +1 -1
  6. package/dist/core-api/routes/index.d.ts +22 -4
  7. package/dist/core-api/routes/index.d.ts.map +1 -1
  8. package/dist/core-api/routes/index.js +8 -131
  9. package/dist/core-api/routes/index.js.map +1 -1
  10. package/dist/core-api/routes/index.mjs +8 -131
  11. package/dist/core-api/routes/index.mjs.map +1 -1
  12. package/dist/domain/module/index.d.ts.map +1 -1
  13. package/dist/domain/module/index.js +0 -3
  14. package/dist/domain/module/index.js.map +1 -1
  15. package/dist/domain/module/index.mjs +0 -3
  16. package/dist/domain/module/index.mjs.map +1 -1
  17. package/dist/ee/index.d.ts +6 -0
  18. package/dist/ee/index.d.ts.map +1 -1
  19. package/dist/ee/index.js +29 -3
  20. package/dist/ee/index.js.map +1 -1
  21. package/dist/ee/index.mjs +30 -4
  22. package/dist/ee/index.mjs.map +1 -1
  23. package/dist/ee/license.d.ts +3 -1
  24. package/dist/ee/license.d.ts.map +1 -1
  25. package/dist/ee/license.js +6 -1
  26. package/dist/ee/license.js.map +1 -1
  27. package/dist/ee/license.mjs +6 -2
  28. package/dist/ee/license.mjs.map +1 -1
  29. package/dist/factories.d.ts +1 -3
  30. package/dist/factories.d.ts.map +1 -1
  31. package/dist/factories.js +2 -10
  32. package/dist/factories.js.map +1 -1
  33. package/dist/factories.mjs +3 -10
  34. package/dist/factories.mjs.map +1 -1
  35. package/dist/index.js +1 -1
  36. package/dist/index.mjs +1 -1
  37. package/dist/package.json.js +15 -14
  38. package/dist/package.json.js.map +1 -1
  39. package/dist/package.json.mjs +15 -14
  40. package/dist/package.json.mjs.map +1 -1
  41. package/dist/services/core-store.d.ts +2 -2
  42. package/dist/services/core-store.d.ts.map +1 -1
  43. package/dist/services/core-store.js.map +1 -1
  44. package/dist/services/core-store.mjs.map +1 -1
  45. package/dist/services/document-service/entries.d.ts.map +1 -1
  46. package/dist/services/document-service/entries.js +42 -0
  47. package/dist/services/document-service/entries.js.map +1 -1
  48. package/dist/services/document-service/entries.mjs +43 -1
  49. package/dist/services/document-service/entries.mjs.map +1 -1
  50. package/dist/services/document-service/internationalization.d.ts +6 -1
  51. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  52. package/dist/services/document-service/internationalization.js +32 -0
  53. package/dist/services/document-service/internationalization.js.map +1 -1
  54. package/dist/services/document-service/internationalization.mjs +32 -1
  55. package/dist/services/document-service/internationalization.mjs.map +1 -1
  56. package/dist/services/document-service/repository.d.ts.map +1 -1
  57. package/dist/services/document-service/repository.js +5 -4
  58. package/dist/services/document-service/repository.js.map +1 -1
  59. package/dist/services/document-service/repository.mjs +6 -5
  60. package/dist/services/document-service/repository.mjs.map +1 -1
  61. package/dist/services/entity-validator/index.d.ts.map +1 -1
  62. package/dist/services/entity-validator/index.js +9 -0
  63. package/dist/services/entity-validator/index.js.map +1 -1
  64. package/dist/services/entity-validator/index.mjs +9 -0
  65. package/dist/services/entity-validator/index.mjs.map +1 -1
  66. package/dist/services/entity-validator/validators.d.ts +1 -0
  67. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  68. package/dist/services/entity-validator/validators.js +3 -0
  69. package/dist/services/entity-validator/validators.js.map +1 -1
  70. package/dist/services/entity-validator/validators.mjs +3 -0
  71. package/dist/services/entity-validator/validators.mjs.map +1 -1
  72. package/dist/services/server/register-routes.js +2 -22
  73. package/dist/services/server/register-routes.js.map +1 -1
  74. package/dist/services/server/register-routes.mjs +2 -22
  75. package/dist/services/server/register-routes.mjs.map +1 -1
  76. package/dist/services/server/routing.d.ts +0 -10
  77. package/dist/services/server/routing.d.ts.map +1 -1
  78. package/dist/services/server/routing.js +1 -7
  79. package/dist/services/server/routing.js.map +1 -1
  80. package/dist/services/server/routing.mjs +1 -7
  81. package/dist/services/server/routing.mjs.map +1 -1
  82. package/dist/services/utils/conditional-fields.d.ts +3 -0
  83. package/dist/services/utils/conditional-fields.d.ts.map +1 -0
  84. package/dist/services/utils/conditional-fields.js +22 -0
  85. package/dist/services/utils/conditional-fields.js.map +1 -0
  86. package/dist/services/utils/conditional-fields.mjs +20 -0
  87. package/dist/services/utils/conditional-fields.mjs.map +1 -0
  88. package/dist/utils/fetch.d.ts +5 -1
  89. package/dist/utils/fetch.d.ts.map +1 -1
  90. package/dist/utils/fetch.js +8 -4
  91. package/dist/utils/fetch.js.map +1 -1
  92. package/dist/utils/fetch.mjs +8 -4
  93. package/dist/utils/fetch.mjs.map +1 -1
  94. package/dist/utils/transform-content-types-to-models.d.ts +197 -0
  95. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  96. package/package.json +15 -14
  97. package/dist/core-api/routes/validation/attributes.d.ts +0 -91
  98. package/dist/core-api/routes/validation/attributes.d.ts.map +0 -1
  99. package/dist/core-api/routes/validation/attributes.js +0 -583
  100. package/dist/core-api/routes/validation/attributes.js.map +0 -1
  101. package/dist/core-api/routes/validation/attributes.mjs +0 -580
  102. package/dist/core-api/routes/validation/attributes.mjs.map +0 -1
  103. package/dist/core-api/routes/validation/common.d.ts +0 -103
  104. package/dist/core-api/routes/validation/common.d.ts.map +0 -1
  105. package/dist/core-api/routes/validation/common.js +0 -95
  106. package/dist/core-api/routes/validation/common.js.map +0 -1
  107. package/dist/core-api/routes/validation/common.mjs +0 -93
  108. package/dist/core-api/routes/validation/common.mjs.map +0 -1
  109. package/dist/core-api/routes/validation/component.d.ts +0 -42
  110. package/dist/core-api/routes/validation/component.d.ts.map +0 -1
  111. package/dist/core-api/routes/validation/component.js +0 -59
  112. package/dist/core-api/routes/validation/component.js.map +0 -1
  113. package/dist/core-api/routes/validation/component.mjs +0 -57
  114. package/dist/core-api/routes/validation/component.mjs.map +0 -1
  115. package/dist/core-api/routes/validation/constants.d.ts +0 -2
  116. package/dist/core-api/routes/validation/constants.d.ts.map +0 -1
  117. package/dist/core-api/routes/validation/constants.js +0 -13
  118. package/dist/core-api/routes/validation/constants.js.map +0 -1
  119. package/dist/core-api/routes/validation/constants.mjs +0 -11
  120. package/dist/core-api/routes/validation/constants.mjs.map +0 -1
  121. package/dist/core-api/routes/validation/content-type.d.ts +0 -171
  122. package/dist/core-api/routes/validation/content-type.d.ts.map +0 -1
  123. package/dist/core-api/routes/validation/content-type.js +0 -246
  124. package/dist/core-api/routes/validation/content-type.js.map +0 -1
  125. package/dist/core-api/routes/validation/content-type.mjs +0 -244
  126. package/dist/core-api/routes/validation/content-type.mjs.map +0 -1
  127. package/dist/core-api/routes/validation/index.d.ts +0 -5
  128. package/dist/core-api/routes/validation/index.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/core-api/routes/index.ts"],"sourcesContent":["import type { Core, Schema } from '@strapi/types';\n\nimport type { QueryParam } from './validation/content-type';\n\nimport { contentTypes, contentTypes as contentTypeUtils } from '@strapi/utils';\nimport { z } from 'zod';\n\nimport { CoreContentTypeRouteValidator } from './validation';\n\nexport const createRoutes = ({\n strapi,\n contentType,\n}: {\n strapi: Core.Strapi;\n contentType: Schema.ContentType;\n}) => {\n if (contentTypeUtils.isSingleType(contentType)) {\n return getSingleTypeRoutes(contentType, strapi);\n }\n\n return getCollectionTypeRoutes(contentType, strapi);\n};\n\nconst getSingleTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.singularName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.singularName}`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.singularName}`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n };\n};\n\nconst getCollectionTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.pluralName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams([\n 'fields',\n 'filters',\n '_q',\n 'pagination',\n 'sort',\n 'populate',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.documents }),\n config: {},\n },\n findOne: {\n method: 'GET',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.findOne`,\n request: {\n params: { id: validator.documentID },\n query: validator.queryParams([\n 'fields',\n 'populate',\n 'filters',\n 'sort',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.document }),\n },\n create: {\n method: 'POST',\n path: `/${info.pluralName}`,\n handler: `${uid}.create`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.body },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n },\n delete: {\n method: 'DELETE',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n },\n response: z.object({ data: validator.document }),\n },\n };\n};\n\nconst getConditionalQueryParams = (schema: Schema.ContentType) => {\n const isLocalized = strapi.plugin('i18n').service('content-types').isLocalizedContentType(schema);\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(schema);\n\n return [\n ...(isLocalized ? ['locale'] : []),\n ...(hasDraftAndPublish ? ['status'] : []),\n ] as QueryParam[];\n};\n"],"names":["createRoutes","strapi","contentType","contentTypeUtils","isSingleType","getSingleTypeRoutes","getCollectionTypeRoutes","schema","uid","info","validator","CoreContentTypeRouteValidator","conditionalQueryParams","getConditionalQueryParams","find","method","path","singularName","handler","request","query","queryParams","response","z","object","data","document","config","update","body","partialBody","delete","pluralName","documents","findOne","params","id","documentID","create","isLocalized","plugin","service","isLocalizedContentType","hasDraftAndPublish","contentTypes"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/core-api/routes/index.ts"],"sourcesContent":["import { contentTypes as contentTypeUtils } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\n\nexport const createRoutes = ({ contentType }: { contentType: Schema.ContentType }) => {\n if (contentTypeUtils.isSingleType(contentType)) {\n return getSingleTypeRoutes(contentType);\n }\n\n return getCollectionTypeRoutes(contentType);\n};\n\nconst getSingleTypeRoutes = ({ uid, info }: Schema.ContentType) => {\n return {\n find: {\n method: 'GET',\n path: `/${info.singularName}`,\n handler: `${uid}.find`,\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.singularName}`,\n handler: `${uid}.update`,\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.singularName}`,\n handler: `${uid}.delete`,\n config: {},\n },\n };\n};\n\nconst getCollectionTypeRoutes = ({ uid, info }: Schema.ContentType) => {\n return {\n find: {\n method: 'GET',\n path: `/${info.pluralName}`,\n handler: `${uid}.find`,\n config: {},\n },\n findOne: {\n method: 'GET',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.findOne`,\n config: {},\n },\n create: {\n method: 'POST',\n path: `/${info.pluralName}`,\n handler: `${uid}.create`,\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.update`,\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.delete`,\n config: {},\n },\n };\n};\n"],"names":["createRoutes","contentType","contentTypeUtils","isSingleType","getSingleTypeRoutes","getCollectionTypeRoutes","uid","info","find","method","path","singularName","handler","config","update","delete","pluralName","findOne","create"],"mappings":";;;;AAGaA,MAAAA,YAAAA,GAAe,CAAC,EAAEC,WAAW,EAAuC,GAAA;IAC/E,IAAIC,wBAAAA,CAAiBC,YAAY,CAACF,WAAc,CAAA,EAAA;AAC9C,QAAA,OAAOG,mBAAoBH,CAAAA,WAAAA,CAAAA;AAC7B;AAEA,IAAA,OAAOI,uBAAwBJ,CAAAA,WAAAA,CAAAA;AACjC;AAEA,MAAMG,sBAAsB,CAAC,EAAEE,GAAG,EAAEC,IAAI,EAAsB,GAAA;IAC5D,OAAO;QACLC,IAAM,EAAA;YACJC,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKI,CAAAA,YAAY,CAAC,CAAC;AAC7BC,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,KAAK,CAAC;AACtBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAC,MAAQ,EAAA;YACNL,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKI,CAAAA,YAAY,CAAC,CAAC;AAC7BC,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAE,MAAQ,EAAA;YACNN,MAAQ,EAAA,QAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKI,CAAAA,YAAY,CAAC,CAAC;AAC7BC,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV;AACF,KAAA;AACF,CAAA;AAEA,MAAMR,0BAA0B,CAAC,EAAEC,GAAG,EAAEC,IAAI,EAAsB,GAAA;IAChE,OAAO;QACLC,IAAM,EAAA;YACJC,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKS,CAAAA,UAAU,CAAC,CAAC;AAC3BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,KAAK,CAAC;AACtBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAI,OAAS,EAAA;YACPR,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,KAAKS,UAAU,CAAC,IAAI,CAAC;AAC/BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,QAAQ,CAAC;AACzBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAK,MAAQ,EAAA;YACNT,MAAQ,EAAA,MAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKS,CAAAA,UAAU,CAAC,CAAC;AAC3BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAC,MAAQ,EAAA;YACNL,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,KAAKS,UAAU,CAAC,IAAI,CAAC;AAC/BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAE,MAAQ,EAAA;YACNN,MAAQ,EAAA,QAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,KAAKS,UAAU,CAAC,IAAI,CAAC;AAC/BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV;AACF,KAAA;AACF,CAAA;;;;"}
@@ -1,190 +1,67 @@
1
1
  import { contentTypes } from '@strapi/utils';
2
- import { z } from 'zod';
3
- import { CoreContentTypeRouteValidator } from './validation/content-type.mjs';
4
2
 
5
- const createRoutes = ({ strapi: strapi1, contentType })=>{
3
+ const createRoutes = ({ contentType })=>{
6
4
  if (contentTypes.isSingleType(contentType)) {
7
- return getSingleTypeRoutes(contentType, strapi1);
5
+ return getSingleTypeRoutes(contentType);
8
6
  }
9
- return getCollectionTypeRoutes(contentType, strapi1);
7
+ return getCollectionTypeRoutes(contentType);
10
8
  };
11
- const getSingleTypeRoutes = (schema, strapi1)=>{
12
- const { uid, info } = schema;
13
- const validator = new CoreContentTypeRouteValidator(strapi1, uid);
14
- const conditionalQueryParams = getConditionalQueryParams(schema);
9
+ const getSingleTypeRoutes = ({ uid, info })=>{
15
10
  return {
16
11
  find: {
17
12
  method: 'GET',
18
13
  path: `/${info.singularName}`,
19
14
  handler: `${uid}.find`,
20
- request: {
21
- query: validator.queryParams([
22
- 'fields',
23
- 'populate',
24
- 'filters',
25
- ...conditionalQueryParams
26
- ])
27
- },
28
- response: z.object({
29
- data: validator.document
30
- }),
31
15
  config: {}
32
16
  },
33
17
  update: {
34
18
  method: 'PUT',
35
19
  path: `/${info.singularName}`,
36
20
  handler: `${uid}.update`,
37
- request: {
38
- query: validator.queryParams([
39
- 'fields',
40
- 'populate',
41
- ...conditionalQueryParams
42
- ]),
43
- body: {
44
- 'application/json': validator.partialBody
45
- }
46
- },
47
- response: z.object({
48
- data: validator.document
49
- }),
50
21
  config: {}
51
22
  },
52
23
  delete: {
53
24
  method: 'DELETE',
54
25
  path: `/${info.singularName}`,
55
26
  handler: `${uid}.delete`,
56
- request: {
57
- query: validator.queryParams([
58
- 'fields',
59
- 'populate',
60
- ...conditionalQueryParams
61
- ])
62
- },
63
- response: z.object({
64
- data: validator.document
65
- }),
66
27
  config: {}
67
28
  }
68
29
  };
69
30
  };
70
- const getCollectionTypeRoutes = (schema, strapi1)=>{
71
- const { uid, info } = schema;
72
- const validator = new CoreContentTypeRouteValidator(strapi1, uid);
73
- const conditionalQueryParams = getConditionalQueryParams(schema);
31
+ const getCollectionTypeRoutes = ({ uid, info })=>{
74
32
  return {
75
33
  find: {
76
34
  method: 'GET',
77
35
  path: `/${info.pluralName}`,
78
36
  handler: `${uid}.find`,
79
- request: {
80
- query: validator.queryParams([
81
- 'fields',
82
- 'filters',
83
- '_q',
84
- 'pagination',
85
- 'sort',
86
- 'populate',
87
- ...conditionalQueryParams
88
- ])
89
- },
90
- response: z.object({
91
- data: validator.documents
92
- }),
93
37
  config: {}
94
38
  },
95
39
  findOne: {
96
40
  method: 'GET',
97
41
  path: `/${info.pluralName}/:id`,
98
42
  handler: `${uid}.findOne`,
99
- request: {
100
- params: {
101
- id: validator.documentID
102
- },
103
- query: validator.queryParams([
104
- 'fields',
105
- 'populate',
106
- 'filters',
107
- 'sort',
108
- ...conditionalQueryParams
109
- ])
110
- },
111
- response: z.object({
112
- data: validator.document
113
- })
43
+ config: {}
114
44
  },
115
45
  create: {
116
46
  method: 'POST',
117
47
  path: `/${info.pluralName}`,
118
48
  handler: `${uid}.create`,
119
- request: {
120
- query: validator.queryParams([
121
- 'fields',
122
- 'populate',
123
- ...conditionalQueryParams
124
- ]),
125
- body: {
126
- 'application/json': validator.body
127
- }
128
- },
129
- response: z.object({
130
- data: validator.document
131
- }),
132
49
  config: {}
133
50
  },
134
51
  update: {
135
52
  method: 'PUT',
136
53
  path: `/${info.pluralName}/:id`,
137
54
  handler: `${uid}.update`,
138
- request: {
139
- query: validator.queryParams([
140
- 'fields',
141
- 'populate',
142
- ...conditionalQueryParams
143
- ]),
144
- params: {
145
- id: validator.documentID
146
- },
147
- body: {
148
- 'application/json': validator.partialBody
149
- }
150
- },
151
- response: z.object({
152
- data: validator.document
153
- })
55
+ config: {}
154
56
  },
155
57
  delete: {
156
58
  method: 'DELETE',
157
59
  path: `/${info.pluralName}/:id`,
158
60
  handler: `${uid}.delete`,
159
- request: {
160
- query: validator.queryParams([
161
- 'fields',
162
- 'populate',
163
- 'filters',
164
- ...conditionalQueryParams
165
- ]),
166
- params: {
167
- id: validator.documentID
168
- }
169
- },
170
- response: z.object({
171
- data: validator.document
172
- })
61
+ config: {}
173
62
  }
174
63
  };
175
64
  };
176
- const getConditionalQueryParams = (schema)=>{
177
- const isLocalized = strapi.plugin('i18n').service('content-types').isLocalizedContentType(schema);
178
- const hasDraftAndPublish = contentTypes.hasDraftAndPublish(schema);
179
- return [
180
- ...isLocalized ? [
181
- 'locale'
182
- ] : [],
183
- ...hasDraftAndPublish ? [
184
- 'status'
185
- ] : []
186
- ];
187
- };
188
65
 
189
66
  export { createRoutes };
190
67
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/core-api/routes/index.ts"],"sourcesContent":["import type { Core, Schema } from '@strapi/types';\n\nimport type { QueryParam } from './validation/content-type';\n\nimport { contentTypes, contentTypes as contentTypeUtils } from '@strapi/utils';\nimport { z } from 'zod';\n\nimport { CoreContentTypeRouteValidator } from './validation';\n\nexport const createRoutes = ({\n strapi,\n contentType,\n}: {\n strapi: Core.Strapi;\n contentType: Schema.ContentType;\n}) => {\n if (contentTypeUtils.isSingleType(contentType)) {\n return getSingleTypeRoutes(contentType, strapi);\n }\n\n return getCollectionTypeRoutes(contentType, strapi);\n};\n\nconst getSingleTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.singularName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.singularName}`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.singularName}`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n };\n};\n\nconst getCollectionTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.pluralName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams([\n 'fields',\n 'filters',\n '_q',\n 'pagination',\n 'sort',\n 'populate',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.documents }),\n config: {},\n },\n findOne: {\n method: 'GET',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.findOne`,\n request: {\n params: { id: validator.documentID },\n query: validator.queryParams([\n 'fields',\n 'populate',\n 'filters',\n 'sort',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.document }),\n },\n create: {\n method: 'POST',\n path: `/${info.pluralName}`,\n handler: `${uid}.create`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.body },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n },\n delete: {\n method: 'DELETE',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n },\n response: z.object({ data: validator.document }),\n },\n };\n};\n\nconst getConditionalQueryParams = (schema: Schema.ContentType) => {\n const isLocalized = strapi.plugin('i18n').service('content-types').isLocalizedContentType(schema);\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(schema);\n\n return [\n ...(isLocalized ? ['locale'] : []),\n ...(hasDraftAndPublish ? ['status'] : []),\n ] as QueryParam[];\n};\n"],"names":["createRoutes","strapi","contentType","contentTypeUtils","isSingleType","getSingleTypeRoutes","getCollectionTypeRoutes","schema","uid","info","validator","CoreContentTypeRouteValidator","conditionalQueryParams","getConditionalQueryParams","find","method","path","singularName","handler","request","query","queryParams","response","z","object","data","document","config","update","body","partialBody","delete","pluralName","documents","findOne","params","id","documentID","create","isLocalized","plugin","service","isLocalizedContentType","hasDraftAndPublish","contentTypes"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/core-api/routes/index.ts"],"sourcesContent":["import { contentTypes as contentTypeUtils } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\n\nexport const createRoutes = ({ contentType }: { contentType: Schema.ContentType }) => {\n if (contentTypeUtils.isSingleType(contentType)) {\n return getSingleTypeRoutes(contentType);\n }\n\n return getCollectionTypeRoutes(contentType);\n};\n\nconst getSingleTypeRoutes = ({ uid, info }: Schema.ContentType) => {\n return {\n find: {\n method: 'GET',\n path: `/${info.singularName}`,\n handler: `${uid}.find`,\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.singularName}`,\n handler: `${uid}.update`,\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.singularName}`,\n handler: `${uid}.delete`,\n config: {},\n },\n };\n};\n\nconst getCollectionTypeRoutes = ({ uid, info }: Schema.ContentType) => {\n return {\n find: {\n method: 'GET',\n path: `/${info.pluralName}`,\n handler: `${uid}.find`,\n config: {},\n },\n findOne: {\n method: 'GET',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.findOne`,\n config: {},\n },\n create: {\n method: 'POST',\n path: `/${info.pluralName}`,\n handler: `${uid}.create`,\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.update`,\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.delete`,\n config: {},\n },\n };\n};\n"],"names":["createRoutes","contentType","contentTypeUtils","isSingleType","getSingleTypeRoutes","getCollectionTypeRoutes","uid","info","find","method","path","singularName","handler","config","update","delete","pluralName","findOne","create"],"mappings":";;AAGaA,MAAAA,YAAAA,GAAe,CAAC,EAAEC,WAAW,EAAuC,GAAA;IAC/E,IAAIC,YAAAA,CAAiBC,YAAY,CAACF,WAAc,CAAA,EAAA;AAC9C,QAAA,OAAOG,mBAAoBH,CAAAA,WAAAA,CAAAA;AAC7B;AAEA,IAAA,OAAOI,uBAAwBJ,CAAAA,WAAAA,CAAAA;AACjC;AAEA,MAAMG,sBAAsB,CAAC,EAAEE,GAAG,EAAEC,IAAI,EAAsB,GAAA;IAC5D,OAAO;QACLC,IAAM,EAAA;YACJC,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKI,CAAAA,YAAY,CAAC,CAAC;AAC7BC,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,KAAK,CAAC;AACtBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAC,MAAQ,EAAA;YACNL,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKI,CAAAA,YAAY,CAAC,CAAC;AAC7BC,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAE,MAAQ,EAAA;YACNN,MAAQ,EAAA,QAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKI,CAAAA,YAAY,CAAC,CAAC;AAC7BC,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV;AACF,KAAA;AACF,CAAA;AAEA,MAAMR,0BAA0B,CAAC,EAAEC,GAAG,EAAEC,IAAI,EAAsB,GAAA;IAChE,OAAO;QACLC,IAAM,EAAA;YACJC,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKS,CAAAA,UAAU,CAAC,CAAC;AAC3BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,KAAK,CAAC;AACtBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAI,OAAS,EAAA;YACPR,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,KAAKS,UAAU,CAAC,IAAI,CAAC;AAC/BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,QAAQ,CAAC;AACzBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAK,MAAQ,EAAA;YACNT,MAAQ,EAAA,MAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKS,CAAAA,UAAU,CAAC,CAAC;AAC3BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAC,MAAQ,EAAA;YACNL,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,KAAKS,UAAU,CAAC,IAAI,CAAC;AAC/BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAE,MAAQ,EAAA;YACNN,MAAQ,EAAA,QAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,KAAKS,UAAU,CAAC,IAAI,CAAC;AAC/BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV;AACF,KAAA;AACF,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/module/index.ts"],"names":[],"mappings":"AAAA,OAAU,EAAE,KAAK,YAAY,EAAW,MAAM,QAAQ,CAAC;AAEvD,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAWvD,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1D,WAAW,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC,iBAAiB,CAAC;IACnE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACvD,OAAO,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC;IACpD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC;IAChD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,UAAU,EAAE,CAAC,cAAc,EAAE,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC;IAChE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7C,UAAU,EAAE,CAAC,cAAc,EAAE,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC;IAChE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;CAC9C;AAiBD,eAAO,MAAM,YAAY,cACZ,MAAM,aACN,SAAS,UACZ,KAAK,MAAM,KAClB,MAwFF,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/module/index.ts"],"names":[],"mappings":"AAAA,OAAU,EAAE,KAAK,YAAY,EAAW,MAAM,QAAQ,CAAC;AAEvD,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAWvD,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1D,WAAW,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC,iBAAiB,CAAC;IACnE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACvD,OAAO,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC;IACpD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC;IAChD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,UAAU,EAAE,CAAC,cAAc,EAAE,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC;IAChE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7C,UAAU,EAAE,CAAC,cAAc,EAAE,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC;IAChE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;CAC9C;AAiBD,eAAO,MAAM,YAAY,cACZ,MAAM,aACN,SAAS,UACZ,KAAK,MAAM,KAClB,MAqFF,CAAC"}
@@ -67,9 +67,6 @@ const createModule = (namespace, rawModule, strapi)=>{
67
67
  get routes () {
68
68
  return rawModule.routes ?? {};
69
69
  },
70
- set routes (routes){
71
- rawModule.routes = routes;
72
- },
73
70
  config (path, defaultValue) {
74
71
  const pathArray = _.flatten([
75
72
  namespace,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/domain/module/index.ts"],"sourcesContent":["import _, { type PropertyPath, flatten } from 'lodash';\nimport { yup } from '@strapi/utils';\nimport type { Core, UID, Struct } from '@strapi/types';\n\nimport { removeNamespace } from '../../registries/namespace';\nimport { validateModule } from './validation';\n\ninterface LifecyclesState {\n bootstrap?: boolean;\n register?: boolean;\n destroy?: boolean;\n}\n\nexport interface RawModule {\n config?: Record<string, unknown>;\n routes?: Core.Module['routes'];\n controllers?: Core.Module['controllers'];\n services?: Core.Module['services'];\n contentTypes?: Core.Module['contentTypes'];\n policies?: Core.Module['policies'];\n middlewares?: Core.Module['middlewares'];\n bootstrap?: (params: { strapi: Core.Strapi }) => Promise<void>;\n register?: (params: { strapi: Core.Strapi }) => Promise<void>;\n destroy?: (params: { strapi: Core.Strapi }) => Promise<void>;\n}\n\nexport interface Module {\n bootstrap: () => Promise<void>;\n register: () => Promise<void>;\n destroy: () => Promise<void>;\n load: () => void;\n routes: Core.Module['routes'];\n config<T = unknown>(key: PropertyPath, defaultVal?: T): T; // TODO: this mirrors ConfigProvider.get, we should use it directly\n contentType: (ctName: UID.ContentType) => Struct.ContentTypeSchema;\n contentTypes: Record<string, Struct.ContentTypeSchema>;\n service: (serviceName: UID.Service) => Core.Service;\n services: Record<string, Core.Service>;\n policy: (policyName: UID.Policy) => Core.Policy;\n policies: Record<string, Core.Policy>;\n middleware: (middlewareName: UID.Middleware) => Core.Middleware;\n middlewares: Record<string, Core.Middleware>;\n controller: (controllerName: UID.Controller) => Core.Controller;\n controllers: Record<string, Core.Controller>;\n}\n\n// Removes the namespace from a map with keys prefixed with a namespace\nconst removeNamespacedKeys = <T extends Record<string, unknown>>(map: T, namespace: string) => {\n return _.mapKeys(map, (value, key) => removeNamespace(key, namespace));\n};\n\nconst defaultModule = {\n config: {},\n routes: [],\n controllers: {},\n services: {},\n contentTypes: {},\n policies: {},\n middlewares: {},\n};\n\nexport const createModule = (\n namespace: string,\n rawModule: RawModule,\n strapi: Core.Strapi\n): Module => {\n _.defaults(rawModule, defaultModule);\n\n try {\n validateModule(rawModule);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`strapi-server.js is invalid for '${namespace}'.\\n${e.errors.join('\\n')}`);\n }\n }\n\n const called: LifecyclesState = {};\n return {\n async bootstrap() {\n if (called.bootstrap) {\n throw new Error(`Bootstrap for ${namespace} has already been called`);\n }\n called.bootstrap = true;\n await (rawModule.bootstrap && rawModule.bootstrap({ strapi }));\n },\n async register() {\n if (called.register) {\n throw new Error(`Register for ${namespace} has already been called`);\n }\n called.register = true;\n await (rawModule.register && rawModule.register({ strapi }));\n },\n async destroy() {\n if (called.destroy) {\n throw new Error(`Destroy for ${namespace} has already been called`);\n }\n called.destroy = true;\n await (rawModule.destroy && rawModule.destroy({ strapi }));\n },\n load() {\n strapi.get('content-types').add(namespace, rawModule.contentTypes);\n strapi.get('services').add(namespace, rawModule.services);\n strapi.get('policies').add(namespace, rawModule.policies);\n strapi.get('middlewares').add(namespace, rawModule.middlewares);\n strapi.get('controllers').add(namespace, rawModule.controllers);\n strapi.get('config').set(namespace, rawModule.config);\n },\n get routes() {\n return rawModule.routes ?? {};\n },\n set routes(routes: Record<string, Core.Router>) {\n rawModule.routes = routes;\n },\n config(path: PropertyPath, defaultValue: unknown) {\n const pathArray = flatten([namespace, path]);\n return strapi.get('config').get(pathArray, defaultValue);\n },\n contentType(ctName: UID.ContentType) {\n return strapi.get('content-types').get(`${namespace}.${ctName}`);\n },\n get contentTypes() {\n const contentTypes = strapi.get('content-types').getAll(namespace);\n return removeNamespacedKeys(contentTypes, namespace);\n },\n service(serviceName: UID.Service) {\n return strapi.get('services').get(`${namespace}.${serviceName}`);\n },\n get services() {\n const services = strapi.get('services').getAll(namespace);\n return removeNamespacedKeys(services, namespace);\n },\n policy(policyName: UID.Policy) {\n return strapi.get('policies').get(`${namespace}.${policyName}`);\n },\n get policies() {\n const policies = strapi.get('policies').getAll(namespace);\n return removeNamespacedKeys(policies, namespace);\n },\n middleware(middlewareName: UID.Middleware) {\n return strapi.get('middlewares').get(`${namespace}.${middlewareName}`);\n },\n get middlewares() {\n const middlewares = strapi.get('middlewares').getAll(namespace);\n return removeNamespacedKeys(middlewares, namespace);\n },\n controller(controllerName: UID.Controller) {\n return strapi.get('controllers').get(`${namespace}.${controllerName}`);\n },\n get controllers() {\n const controllers = strapi.get('controllers').getAll(namespace);\n return removeNamespacedKeys(controllers, namespace);\n },\n };\n};\n"],"names":["removeNamespacedKeys","map","namespace","_","mapKeys","value","key","removeNamespace","defaultModule","config","routes","controllers","services","contentTypes","policies","middlewares","createModule","rawModule","strapi","defaults","validateModule","e","yup","ValidationError","Error","errors","join","called","bootstrap","register","destroy","load","get","add","set","path","defaultValue","pathArray","flatten","contentType","ctName","getAll","service","serviceName","policy","policyName","middleware","middlewareName","controller","controllerName"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/domain/module/index.ts"],"sourcesContent":["import _, { type PropertyPath, flatten } from 'lodash';\nimport { yup } from '@strapi/utils';\nimport type { Core, UID, Struct } from '@strapi/types';\n\nimport { removeNamespace } from '../../registries/namespace';\nimport { validateModule } from './validation';\n\ninterface LifecyclesState {\n bootstrap?: boolean;\n register?: boolean;\n destroy?: boolean;\n}\n\nexport interface RawModule {\n config?: Record<string, unknown>;\n routes?: Core.Module['routes'];\n controllers?: Core.Module['controllers'];\n services?: Core.Module['services'];\n contentTypes?: Core.Module['contentTypes'];\n policies?: Core.Module['policies'];\n middlewares?: Core.Module['middlewares'];\n bootstrap?: (params: { strapi: Core.Strapi }) => Promise<void>;\n register?: (params: { strapi: Core.Strapi }) => Promise<void>;\n destroy?: (params: { strapi: Core.Strapi }) => Promise<void>;\n}\n\nexport interface Module {\n bootstrap: () => Promise<void>;\n register: () => Promise<void>;\n destroy: () => Promise<void>;\n load: () => void;\n routes: Core.Module['routes'];\n config<T = unknown>(key: PropertyPath, defaultVal?: T): T; // TODO: this mirrors ConfigProvider.get, we should use it directly\n contentType: (ctName: UID.ContentType) => Struct.ContentTypeSchema;\n contentTypes: Record<string, Struct.ContentTypeSchema>;\n service: (serviceName: UID.Service) => Core.Service;\n services: Record<string, Core.Service>;\n policy: (policyName: UID.Policy) => Core.Policy;\n policies: Record<string, Core.Policy>;\n middleware: (middlewareName: UID.Middleware) => Core.Middleware;\n middlewares: Record<string, Core.Middleware>;\n controller: (controllerName: UID.Controller) => Core.Controller;\n controllers: Record<string, Core.Controller>;\n}\n\n// Removes the namespace from a map with keys prefixed with a namespace\nconst removeNamespacedKeys = <T extends Record<string, unknown>>(map: T, namespace: string) => {\n return _.mapKeys(map, (value, key) => removeNamespace(key, namespace));\n};\n\nconst defaultModule = {\n config: {},\n routes: [],\n controllers: {},\n services: {},\n contentTypes: {},\n policies: {},\n middlewares: {},\n};\n\nexport const createModule = (\n namespace: string,\n rawModule: RawModule,\n strapi: Core.Strapi\n): Module => {\n _.defaults(rawModule, defaultModule);\n\n try {\n validateModule(rawModule);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`strapi-server.js is invalid for '${namespace}'.\\n${e.errors.join('\\n')}`);\n }\n }\n\n const called: LifecyclesState = {};\n return {\n async bootstrap() {\n if (called.bootstrap) {\n throw new Error(`Bootstrap for ${namespace} has already been called`);\n }\n called.bootstrap = true;\n await (rawModule.bootstrap && rawModule.bootstrap({ strapi }));\n },\n async register() {\n if (called.register) {\n throw new Error(`Register for ${namespace} has already been called`);\n }\n called.register = true;\n await (rawModule.register && rawModule.register({ strapi }));\n },\n async destroy() {\n if (called.destroy) {\n throw new Error(`Destroy for ${namespace} has already been called`);\n }\n called.destroy = true;\n await (rawModule.destroy && rawModule.destroy({ strapi }));\n },\n load() {\n strapi.get('content-types').add(namespace, rawModule.contentTypes);\n strapi.get('services').add(namespace, rawModule.services);\n strapi.get('policies').add(namespace, rawModule.policies);\n strapi.get('middlewares').add(namespace, rawModule.middlewares);\n strapi.get('controllers').add(namespace, rawModule.controllers);\n strapi.get('config').set(namespace, rawModule.config);\n },\n get routes() {\n return rawModule.routes ?? {};\n },\n config(path: PropertyPath, defaultValue: unknown) {\n const pathArray = flatten([namespace, path]);\n return strapi.get('config').get(pathArray, defaultValue);\n },\n contentType(ctName: UID.ContentType) {\n return strapi.get('content-types').get(`${namespace}.${ctName}`);\n },\n get contentTypes() {\n const contentTypes = strapi.get('content-types').getAll(namespace);\n return removeNamespacedKeys(contentTypes, namespace);\n },\n service(serviceName: UID.Service) {\n return strapi.get('services').get(`${namespace}.${serviceName}`);\n },\n get services() {\n const services = strapi.get('services').getAll(namespace);\n return removeNamespacedKeys(services, namespace);\n },\n policy(policyName: UID.Policy) {\n return strapi.get('policies').get(`${namespace}.${policyName}`);\n },\n get policies() {\n const policies = strapi.get('policies').getAll(namespace);\n return removeNamespacedKeys(policies, namespace);\n },\n middleware(middlewareName: UID.Middleware) {\n return strapi.get('middlewares').get(`${namespace}.${middlewareName}`);\n },\n get middlewares() {\n const middlewares = strapi.get('middlewares').getAll(namespace);\n return removeNamespacedKeys(middlewares, namespace);\n },\n controller(controllerName: UID.Controller) {\n return strapi.get('controllers').get(`${namespace}.${controllerName}`);\n },\n get controllers() {\n const controllers = strapi.get('controllers').getAll(namespace);\n return removeNamespacedKeys(controllers, namespace);\n },\n };\n};\n"],"names":["removeNamespacedKeys","map","namespace","_","mapKeys","value","key","removeNamespace","defaultModule","config","routes","controllers","services","contentTypes","policies","middlewares","createModule","rawModule","strapi","defaults","validateModule","e","yup","ValidationError","Error","errors","join","called","bootstrap","register","destroy","load","get","add","set","path","defaultValue","pathArray","flatten","contentType","ctName","getAll","service","serviceName","policy","policyName","middleware","middlewareName","controller","controllerName"],"mappings":";;;;;;;AA6CA;AACA,MAAMA,oBAAAA,GAAuB,CAAoCC,GAAQC,EAAAA,WAAAA,GAAAA;IACvE,OAAOC,CAAAA,CAAEC,OAAO,CAACH,GAAAA,EAAK,CAACI,KAAOC,EAAAA,GAAAA,GAAQC,0BAAgBD,GAAKJ,EAAAA,WAAAA,CAAAA,CAAAA;AAC7D,CAAA;AAEA,MAAMM,aAAgB,GAAA;AACpBC,IAAAA,MAAAA,EAAQ,EAAC;AACTC,IAAAA,MAAAA,EAAQ,EAAE;AACVC,IAAAA,WAAAA,EAAa,EAAC;AACdC,IAAAA,QAAAA,EAAU,EAAC;AACXC,IAAAA,YAAAA,EAAc,EAAC;AACfC,IAAAA,QAAAA,EAAU,EAAC;AACXC,IAAAA,WAAAA,EAAa;AACf,CAAA;AAEaC,MAAAA,YAAAA,GAAe,CAC1Bd,SAAAA,EACAe,SACAC,EAAAA,MAAAA,GAAAA;IAEAf,CAAEgB,CAAAA,QAAQ,CAACF,SAAWT,EAAAA,aAAAA,CAAAA;IAEtB,IAAI;QACFY,yBAAeH,CAAAA,SAAAA,CAAAA;AACjB,KAAA,CAAE,OAAOI,CAAG,EAAA;QACV,IAAIA,CAAAA,YAAaC,eAAIC,CAAAA,eAAe,EAAE;AACpC,YAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,iCAAiC,EAAEtB,SAAU,CAAA,IAAI,EAAEmB,CAAAA,CAAEI,MAAM,CAACC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC3F;AACF;AAEA,IAAA,MAAMC,SAA0B,EAAC;IACjC,OAAO;QACL,MAAMC,SAAAA,CAAAA,GAAAA;YACJ,IAAID,MAAAA,CAAOC,SAAS,EAAE;AACpB,gBAAA,MAAM,IAAIJ,KAAM,CAAA,CAAC,cAAc,EAAEtB,SAAAA,CAAU,wBAAwB,CAAC,CAAA;AACtE;AACAyB,YAAAA,MAAAA,CAAOC,SAAS,GAAG,IAAA;AACnB,YAAA,OAAOX,SAAUW,CAAAA,SAAS,IAAIX,SAAAA,CAAUW,SAAS,CAAC;AAAEV,gBAAAA;aAAQ,CAAA,CAAA;AAC9D,SAAA;QACA,MAAMW,QAAAA,CAAAA,GAAAA;YACJ,IAAIF,MAAAA,CAAOE,QAAQ,EAAE;AACnB,gBAAA,MAAM,IAAIL,KAAM,CAAA,CAAC,aAAa,EAAEtB,SAAAA,CAAU,wBAAwB,CAAC,CAAA;AACrE;AACAyB,YAAAA,MAAAA,CAAOE,QAAQ,GAAG,IAAA;AAClB,YAAA,OAAOZ,SAAUY,CAAAA,QAAQ,IAAIZ,SAAAA,CAAUY,QAAQ,CAAC;AAAEX,gBAAAA;aAAQ,CAAA,CAAA;AAC5D,SAAA;QACA,MAAMY,OAAAA,CAAAA,GAAAA;YACJ,IAAIH,MAAAA,CAAOG,OAAO,EAAE;AAClB,gBAAA,MAAM,IAAIN,KAAM,CAAA,CAAC,YAAY,EAAEtB,SAAAA,CAAU,wBAAwB,CAAC,CAAA;AACpE;AACAyB,YAAAA,MAAAA,CAAOG,OAAO,GAAG,IAAA;AACjB,YAAA,OAAOb,SAAUa,CAAAA,OAAO,IAAIb,SAAAA,CAAUa,OAAO,CAAC;AAAEZ,gBAAAA;aAAQ,CAAA,CAAA;AAC1D,SAAA;AACAa,QAAAA,IAAAA,CAAAA,GAAAA;AACEb,YAAAA,MAAAA,CAAOc,GAAG,CAAC,eAAA,CAAA,CAAiBC,GAAG,CAAC/B,SAAAA,EAAWe,UAAUJ,YAAY,CAAA;AACjEK,YAAAA,MAAAA,CAAOc,GAAG,CAAC,UAAA,CAAA,CAAYC,GAAG,CAAC/B,SAAAA,EAAWe,UAAUL,QAAQ,CAAA;AACxDM,YAAAA,MAAAA,CAAOc,GAAG,CAAC,UAAA,CAAA,CAAYC,GAAG,CAAC/B,SAAAA,EAAWe,UAAUH,QAAQ,CAAA;AACxDI,YAAAA,MAAAA,CAAOc,GAAG,CAAC,aAAA,CAAA,CAAeC,GAAG,CAAC/B,SAAAA,EAAWe,UAAUF,WAAW,CAAA;AAC9DG,YAAAA,MAAAA,CAAOc,GAAG,CAAC,aAAA,CAAA,CAAeC,GAAG,CAAC/B,SAAAA,EAAWe,UAAUN,WAAW,CAAA;AAC9DO,YAAAA,MAAAA,CAAOc,GAAG,CAAC,QAAA,CAAA,CAAUE,GAAG,CAAChC,SAAAA,EAAWe,UAAUR,MAAM,CAAA;AACtD,SAAA;AACA,QAAA,IAAIC,MAAS,CAAA,GAAA;YACX,OAAOO,SAAAA,CAAUP,MAAM,IAAI,EAAC;AAC9B,SAAA;QACAD,MAAO0B,CAAAA,CAAAA,IAAkB,EAAEC,YAAqB,EAAA;AAC9C,YAAA,MAAMC,YAAYC,SAAQ,CAAA;AAACpC,gBAAAA,SAAAA;AAAWiC,gBAAAA;AAAK,aAAA,CAAA;AAC3C,YAAA,OAAOjB,OAAOc,GAAG,CAAC,QAAUA,CAAAA,CAAAA,GAAG,CAACK,SAAWD,EAAAA,YAAAA,CAAAA;AAC7C,SAAA;AACAG,QAAAA,WAAAA,CAAAA,CAAYC,MAAuB,EAAA;AACjC,YAAA,OAAOtB,MAAOc,CAAAA,GAAG,CAAC,eAAA,CAAA,CAAiBA,GAAG,CAAC,CAAC,EAAE9B,SAAU,CAAA,CAAC,EAAEsC,MAAAA,CAAO,CAAC,CAAA;AACjE,SAAA;AACA,QAAA,IAAI3B,YAAe,CAAA,GAAA;AACjB,YAAA,MAAMA,eAAeK,MAAOc,CAAAA,GAAG,CAAC,eAAA,CAAA,CAAiBS,MAAM,CAACvC,SAAAA,CAAAA;AACxD,YAAA,OAAOF,qBAAqBa,YAAcX,EAAAA,SAAAA,CAAAA;AAC5C,SAAA;AACAwC,QAAAA,OAAAA,CAAAA,CAAQC,WAAwB,EAAA;AAC9B,YAAA,OAAOzB,MAAOc,CAAAA,GAAG,CAAC,UAAA,CAAA,CAAYA,GAAG,CAAC,CAAC,EAAE9B,SAAU,CAAA,CAAC,EAAEyC,WAAAA,CAAY,CAAC,CAAA;AACjE,SAAA;AACA,QAAA,IAAI/B,QAAW,CAAA,GAAA;AACb,YAAA,MAAMA,WAAWM,MAAOc,CAAAA,GAAG,CAAC,UAAA,CAAA,CAAYS,MAAM,CAACvC,SAAAA,CAAAA;AAC/C,YAAA,OAAOF,qBAAqBY,QAAUV,EAAAA,SAAAA,CAAAA;AACxC,SAAA;AACA0C,QAAAA,MAAAA,CAAAA,CAAOC,UAAsB,EAAA;AAC3B,YAAA,OAAO3B,MAAOc,CAAAA,GAAG,CAAC,UAAA,CAAA,CAAYA,GAAG,CAAC,CAAC,EAAE9B,SAAU,CAAA,CAAC,EAAE2C,UAAAA,CAAW,CAAC,CAAA;AAChE,SAAA;AACA,QAAA,IAAI/B,QAAW,CAAA,GAAA;AACb,YAAA,MAAMA,WAAWI,MAAOc,CAAAA,GAAG,CAAC,UAAA,CAAA,CAAYS,MAAM,CAACvC,SAAAA,CAAAA;AAC/C,YAAA,OAAOF,qBAAqBc,QAAUZ,EAAAA,SAAAA,CAAAA;AACxC,SAAA;AACA4C,QAAAA,UAAAA,CAAAA,CAAWC,cAA8B,EAAA;AACvC,YAAA,OAAO7B,MAAOc,CAAAA,GAAG,CAAC,aAAA,CAAA,CAAeA,GAAG,CAAC,CAAC,EAAE9B,SAAU,CAAA,CAAC,EAAE6C,cAAAA,CAAe,CAAC,CAAA;AACvE,SAAA;AACA,QAAA,IAAIhC,WAAc,CAAA,GAAA;AAChB,YAAA,MAAMA,cAAcG,MAAOc,CAAAA,GAAG,CAAC,aAAA,CAAA,CAAeS,MAAM,CAACvC,SAAAA,CAAAA;AACrD,YAAA,OAAOF,qBAAqBe,WAAab,EAAAA,SAAAA,CAAAA;AAC3C,SAAA;AACA8C,QAAAA,UAAAA,CAAAA,CAAWC,cAA8B,EAAA;AACvC,YAAA,OAAO/B,MAAOc,CAAAA,GAAG,CAAC,aAAA,CAAA,CAAeA,GAAG,CAAC,CAAC,EAAE9B,SAAU,CAAA,CAAC,EAAE+C,cAAAA,CAAe,CAAC,CAAA;AACvE,SAAA;AACA,QAAA,IAAItC,WAAc,CAAA,GAAA;AAChB,YAAA,MAAMA,cAAcO,MAAOc,CAAAA,GAAG,CAAC,aAAA,CAAA,CAAeS,MAAM,CAACvC,SAAAA,CAAAA;AACrD,YAAA,OAAOF,qBAAqBW,WAAaT,EAAAA,SAAAA,CAAAA;AAC3C;AACF,KAAA;AACF;;;;"}
@@ -65,9 +65,6 @@ const createModule = (namespace, rawModule, strapi)=>{
65
65
  get routes () {
66
66
  return rawModule.routes ?? {};
67
67
  },
68
- set routes (routes){
69
- rawModule.routes = routes;
70
- },
71
68
  config (path, defaultValue) {
72
69
  const pathArray = flatten([
73
70
  namespace,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/domain/module/index.ts"],"sourcesContent":["import _, { type PropertyPath, flatten } from 'lodash';\nimport { yup } from '@strapi/utils';\nimport type { Core, UID, Struct } from '@strapi/types';\n\nimport { removeNamespace } from '../../registries/namespace';\nimport { validateModule } from './validation';\n\ninterface LifecyclesState {\n bootstrap?: boolean;\n register?: boolean;\n destroy?: boolean;\n}\n\nexport interface RawModule {\n config?: Record<string, unknown>;\n routes?: Core.Module['routes'];\n controllers?: Core.Module['controllers'];\n services?: Core.Module['services'];\n contentTypes?: Core.Module['contentTypes'];\n policies?: Core.Module['policies'];\n middlewares?: Core.Module['middlewares'];\n bootstrap?: (params: { strapi: Core.Strapi }) => Promise<void>;\n register?: (params: { strapi: Core.Strapi }) => Promise<void>;\n destroy?: (params: { strapi: Core.Strapi }) => Promise<void>;\n}\n\nexport interface Module {\n bootstrap: () => Promise<void>;\n register: () => Promise<void>;\n destroy: () => Promise<void>;\n load: () => void;\n routes: Core.Module['routes'];\n config<T = unknown>(key: PropertyPath, defaultVal?: T): T; // TODO: this mirrors ConfigProvider.get, we should use it directly\n contentType: (ctName: UID.ContentType) => Struct.ContentTypeSchema;\n contentTypes: Record<string, Struct.ContentTypeSchema>;\n service: (serviceName: UID.Service) => Core.Service;\n services: Record<string, Core.Service>;\n policy: (policyName: UID.Policy) => Core.Policy;\n policies: Record<string, Core.Policy>;\n middleware: (middlewareName: UID.Middleware) => Core.Middleware;\n middlewares: Record<string, Core.Middleware>;\n controller: (controllerName: UID.Controller) => Core.Controller;\n controllers: Record<string, Core.Controller>;\n}\n\n// Removes the namespace from a map with keys prefixed with a namespace\nconst removeNamespacedKeys = <T extends Record<string, unknown>>(map: T, namespace: string) => {\n return _.mapKeys(map, (value, key) => removeNamespace(key, namespace));\n};\n\nconst defaultModule = {\n config: {},\n routes: [],\n controllers: {},\n services: {},\n contentTypes: {},\n policies: {},\n middlewares: {},\n};\n\nexport const createModule = (\n namespace: string,\n rawModule: RawModule,\n strapi: Core.Strapi\n): Module => {\n _.defaults(rawModule, defaultModule);\n\n try {\n validateModule(rawModule);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`strapi-server.js is invalid for '${namespace}'.\\n${e.errors.join('\\n')}`);\n }\n }\n\n const called: LifecyclesState = {};\n return {\n async bootstrap() {\n if (called.bootstrap) {\n throw new Error(`Bootstrap for ${namespace} has already been called`);\n }\n called.bootstrap = true;\n await (rawModule.bootstrap && rawModule.bootstrap({ strapi }));\n },\n async register() {\n if (called.register) {\n throw new Error(`Register for ${namespace} has already been called`);\n }\n called.register = true;\n await (rawModule.register && rawModule.register({ strapi }));\n },\n async destroy() {\n if (called.destroy) {\n throw new Error(`Destroy for ${namespace} has already been called`);\n }\n called.destroy = true;\n await (rawModule.destroy && rawModule.destroy({ strapi }));\n },\n load() {\n strapi.get('content-types').add(namespace, rawModule.contentTypes);\n strapi.get('services').add(namespace, rawModule.services);\n strapi.get('policies').add(namespace, rawModule.policies);\n strapi.get('middlewares').add(namespace, rawModule.middlewares);\n strapi.get('controllers').add(namespace, rawModule.controllers);\n strapi.get('config').set(namespace, rawModule.config);\n },\n get routes() {\n return rawModule.routes ?? {};\n },\n set routes(routes: Record<string, Core.Router>) {\n rawModule.routes = routes;\n },\n config(path: PropertyPath, defaultValue: unknown) {\n const pathArray = flatten([namespace, path]);\n return strapi.get('config').get(pathArray, defaultValue);\n },\n contentType(ctName: UID.ContentType) {\n return strapi.get('content-types').get(`${namespace}.${ctName}`);\n },\n get contentTypes() {\n const contentTypes = strapi.get('content-types').getAll(namespace);\n return removeNamespacedKeys(contentTypes, namespace);\n },\n service(serviceName: UID.Service) {\n return strapi.get('services').get(`${namespace}.${serviceName}`);\n },\n get services() {\n const services = strapi.get('services').getAll(namespace);\n return removeNamespacedKeys(services, namespace);\n },\n policy(policyName: UID.Policy) {\n return strapi.get('policies').get(`${namespace}.${policyName}`);\n },\n get policies() {\n const policies = strapi.get('policies').getAll(namespace);\n return removeNamespacedKeys(policies, namespace);\n },\n middleware(middlewareName: UID.Middleware) {\n return strapi.get('middlewares').get(`${namespace}.${middlewareName}`);\n },\n get middlewares() {\n const middlewares = strapi.get('middlewares').getAll(namespace);\n return removeNamespacedKeys(middlewares, namespace);\n },\n controller(controllerName: UID.Controller) {\n return strapi.get('controllers').get(`${namespace}.${controllerName}`);\n },\n get controllers() {\n const controllers = strapi.get('controllers').getAll(namespace);\n return removeNamespacedKeys(controllers, namespace);\n },\n };\n};\n"],"names":["removeNamespacedKeys","map","namespace","_","mapKeys","value","key","removeNamespace","defaultModule","config","routes","controllers","services","contentTypes","policies","middlewares","createModule","rawModule","strapi","defaults","validateModule","e","yup","ValidationError","Error","errors","join","called","bootstrap","register","destroy","load","get","add","set","path","defaultValue","pathArray","flatten","contentType","ctName","getAll","service","serviceName","policy","policyName","middleware","middlewareName","controller","controllerName"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/domain/module/index.ts"],"sourcesContent":["import _, { type PropertyPath, flatten } from 'lodash';\nimport { yup } from '@strapi/utils';\nimport type { Core, UID, Struct } from '@strapi/types';\n\nimport { removeNamespace } from '../../registries/namespace';\nimport { validateModule } from './validation';\n\ninterface LifecyclesState {\n bootstrap?: boolean;\n register?: boolean;\n destroy?: boolean;\n}\n\nexport interface RawModule {\n config?: Record<string, unknown>;\n routes?: Core.Module['routes'];\n controllers?: Core.Module['controllers'];\n services?: Core.Module['services'];\n contentTypes?: Core.Module['contentTypes'];\n policies?: Core.Module['policies'];\n middlewares?: Core.Module['middlewares'];\n bootstrap?: (params: { strapi: Core.Strapi }) => Promise<void>;\n register?: (params: { strapi: Core.Strapi }) => Promise<void>;\n destroy?: (params: { strapi: Core.Strapi }) => Promise<void>;\n}\n\nexport interface Module {\n bootstrap: () => Promise<void>;\n register: () => Promise<void>;\n destroy: () => Promise<void>;\n load: () => void;\n routes: Core.Module['routes'];\n config<T = unknown>(key: PropertyPath, defaultVal?: T): T; // TODO: this mirrors ConfigProvider.get, we should use it directly\n contentType: (ctName: UID.ContentType) => Struct.ContentTypeSchema;\n contentTypes: Record<string, Struct.ContentTypeSchema>;\n service: (serviceName: UID.Service) => Core.Service;\n services: Record<string, Core.Service>;\n policy: (policyName: UID.Policy) => Core.Policy;\n policies: Record<string, Core.Policy>;\n middleware: (middlewareName: UID.Middleware) => Core.Middleware;\n middlewares: Record<string, Core.Middleware>;\n controller: (controllerName: UID.Controller) => Core.Controller;\n controllers: Record<string, Core.Controller>;\n}\n\n// Removes the namespace from a map with keys prefixed with a namespace\nconst removeNamespacedKeys = <T extends Record<string, unknown>>(map: T, namespace: string) => {\n return _.mapKeys(map, (value, key) => removeNamespace(key, namespace));\n};\n\nconst defaultModule = {\n config: {},\n routes: [],\n controllers: {},\n services: {},\n contentTypes: {},\n policies: {},\n middlewares: {},\n};\n\nexport const createModule = (\n namespace: string,\n rawModule: RawModule,\n strapi: Core.Strapi\n): Module => {\n _.defaults(rawModule, defaultModule);\n\n try {\n validateModule(rawModule);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`strapi-server.js is invalid for '${namespace}'.\\n${e.errors.join('\\n')}`);\n }\n }\n\n const called: LifecyclesState = {};\n return {\n async bootstrap() {\n if (called.bootstrap) {\n throw new Error(`Bootstrap for ${namespace} has already been called`);\n }\n called.bootstrap = true;\n await (rawModule.bootstrap && rawModule.bootstrap({ strapi }));\n },\n async register() {\n if (called.register) {\n throw new Error(`Register for ${namespace} has already been called`);\n }\n called.register = true;\n await (rawModule.register && rawModule.register({ strapi }));\n },\n async destroy() {\n if (called.destroy) {\n throw new Error(`Destroy for ${namespace} has already been called`);\n }\n called.destroy = true;\n await (rawModule.destroy && rawModule.destroy({ strapi }));\n },\n load() {\n strapi.get('content-types').add(namespace, rawModule.contentTypes);\n strapi.get('services').add(namespace, rawModule.services);\n strapi.get('policies').add(namespace, rawModule.policies);\n strapi.get('middlewares').add(namespace, rawModule.middlewares);\n strapi.get('controllers').add(namespace, rawModule.controllers);\n strapi.get('config').set(namespace, rawModule.config);\n },\n get routes() {\n return rawModule.routes ?? {};\n },\n config(path: PropertyPath, defaultValue: unknown) {\n const pathArray = flatten([namespace, path]);\n return strapi.get('config').get(pathArray, defaultValue);\n },\n contentType(ctName: UID.ContentType) {\n return strapi.get('content-types').get(`${namespace}.${ctName}`);\n },\n get contentTypes() {\n const contentTypes = strapi.get('content-types').getAll(namespace);\n return removeNamespacedKeys(contentTypes, namespace);\n },\n service(serviceName: UID.Service) {\n return strapi.get('services').get(`${namespace}.${serviceName}`);\n },\n get services() {\n const services = strapi.get('services').getAll(namespace);\n return removeNamespacedKeys(services, namespace);\n },\n policy(policyName: UID.Policy) {\n return strapi.get('policies').get(`${namespace}.${policyName}`);\n },\n get policies() {\n const policies = strapi.get('policies').getAll(namespace);\n return removeNamespacedKeys(policies, namespace);\n },\n middleware(middlewareName: UID.Middleware) {\n return strapi.get('middlewares').get(`${namespace}.${middlewareName}`);\n },\n get middlewares() {\n const middlewares = strapi.get('middlewares').getAll(namespace);\n return removeNamespacedKeys(middlewares, namespace);\n },\n controller(controllerName: UID.Controller) {\n return strapi.get('controllers').get(`${namespace}.${controllerName}`);\n },\n get controllers() {\n const controllers = strapi.get('controllers').getAll(namespace);\n return removeNamespacedKeys(controllers, namespace);\n },\n };\n};\n"],"names":["removeNamespacedKeys","map","namespace","_","mapKeys","value","key","removeNamespace","defaultModule","config","routes","controllers","services","contentTypes","policies","middlewares","createModule","rawModule","strapi","defaults","validateModule","e","yup","ValidationError","Error","errors","join","called","bootstrap","register","destroy","load","get","add","set","path","defaultValue","pathArray","flatten","contentType","ctName","getAll","service","serviceName","policy","policyName","middleware","middlewareName","controller","controllerName"],"mappings":"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"}
@@ -4,9 +4,15 @@ declare const _default: Readonly<{
4
4
  checkLicense: ({ strapi }: {
5
5
  strapi: Core.Strapi;
6
6
  }) => Promise<void>;
7
+ getTrialEndDate: ({ strapi, }: {
8
+ strapi: Core.Strapi;
9
+ }) => Promise<{
10
+ trialEndsAt: string;
11
+ } | null>;
7
12
  readonly isEE: boolean;
8
13
  readonly seats: number | undefined;
9
14
  readonly type: string | undefined;
15
+ readonly isTrial: boolean;
10
16
  features: Readonly<{
11
17
  list: () => {
12
18
  [key: string]: any;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ee/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;;;;;;;;;;;;;;;;;;iCA0Pb,MAAM;;;AAnBnC,wBAqBG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ee/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;iCAqSb,MAAM;;;AAxBnC,wBA0BG"}
package/dist/ee/index.js CHANGED
@@ -1,20 +1,27 @@
1
1
  'use strict';
2
2
 
3
3
  var fp = require('lodash/fp');
4
+ var fetch = require('../utils/fetch.js');
4
5
  var license = require('./license.js');
5
6
  var cron = require('../utils/cron.js');
6
7
 
7
8
  const ONE_MINUTE = 1000 * 60;
8
9
  const ee = {
9
10
  enabled: false,
10
- licenseInfo: {}
11
+ licenseInfo: {
12
+ isTrial: false
13
+ }
11
14
  };
12
15
  const disable = (message)=>{
13
16
  // Prevent emitting ee.disable if it was already disabled
14
17
  const shouldEmitEvent = ee.enabled !== false;
15
18
  ee.logger?.warn(`${message} Switching to CE.`);
16
- // Only keep the license key for potential re-enabling during a later check
17
- ee.licenseInfo = fp.pick('licenseKey', ee.licenseInfo);
19
+ // Only keep the license key and isTrial for potential re-enabling during a later check
20
+ ee.licenseInfo = fp.pick([
21
+ 'licenseKey',
22
+ 'isTrial'
23
+ ], ee.licenseInfo);
24
+ ee.licenseInfo.isTrial = false;
18
25
  ee.enabled = false;
19
26
  if (shouldEmitEvent) {
20
27
  // Notify EE features that they should be disabled
@@ -163,6 +170,21 @@ const checkLicense = async ({ strapi: strapi1 })=>{
163
170
  validateInfo();
164
171
  }
165
172
  };
173
+ const getTrialEndDate = async ({ strapi: strapi1 })=>{
174
+ const silentFetch = fetch.createStrapiFetch(strapi1, {
175
+ logs: false
176
+ });
177
+ const res = await silentFetch(`${license.LICENSE_REGISTRY_URI}/api/licenses/${ee.licenseInfo.licenseKey}/trial-countdown`, {
178
+ method: 'GET',
179
+ headers: {
180
+ 'Content-Type': 'application/json'
181
+ }
182
+ }).catch(()=>{
183
+ throw new license.LicenseCheckError('Could not proceed to retrieve the trial time left for your license.', true);
184
+ });
185
+ const data = await res.json();
186
+ return data;
187
+ };
166
188
  const list = ()=>{
167
189
  return ee.licenseInfo.features?.map((feature)=>typeof feature === 'object' ? feature : {
168
190
  name: feature
@@ -172,6 +194,7 @@ const get = (featureName)=>list().find((feature)=>feature.name === featureName);
172
194
  var index = Object.freeze({
173
195
  init,
174
196
  checkLicense,
197
+ getTrialEndDate,
175
198
  get isEE () {
176
199
  return ee.enabled;
177
200
  },
@@ -181,6 +204,9 @@ var index = Object.freeze({
181
204
  get type () {
182
205
  return ee.licenseInfo.type;
183
206
  },
207
+ get isTrial () {
208
+ return ee.licenseInfo.isTrial;
209
+ },
184
210
  features: Object.freeze({
185
211
  list,
186
212
  get,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/ee/index.ts"],"sourcesContent":["import { pick, isEqual } from 'lodash/fp';\nimport type { Logger } from '@strapi/logger';\nimport type { Core } from '@strapi/types';\n\nimport { readLicense, verifyLicense, fetchLicense, LicenseCheckError } from './license';\nimport { shiftCronExpression } from '../utils/cron';\n\nconst ONE_MINUTE = 1000 * 60;\n\ninterface EE {\n enabled: boolean;\n licenseInfo: {\n licenseKey?: string;\n features?: Array<{ name: string; [key: string]: any } | string>;\n expireAt?: string;\n seats?: number;\n type?: string;\n };\n logger?: Logger;\n}\n\nconst ee: EE = {\n enabled: false,\n licenseInfo: {},\n};\n\nconst disable = (message: string) => {\n // Prevent emitting ee.disable if it was already disabled\n const shouldEmitEvent = ee.enabled !== false;\n\n ee.logger?.warn(`${message} Switching to CE.`);\n // Only keep the license key for potential re-enabling during a later check\n ee.licenseInfo = pick('licenseKey', ee.licenseInfo);\n\n ee.enabled = false;\n\n if (shouldEmitEvent) {\n // Notify EE features that they should be disabled\n strapi.eventHub.emit('ee.disable');\n }\n};\n\nconst enable = () => {\n // Prevent emitting ee.enable if it was already enabled\n const shouldEmitEvent = ee.enabled !== true;\n\n ee.enabled = true;\n\n if (shouldEmitEvent) {\n // Notify EE features that they should be disabled\n strapi.eventHub.emit('ee.enable');\n }\n};\n\nlet initialized = false;\n\n/**\n * Optimistically enable EE if the format of the license is valid, only run once.\n */\nconst init = (licenseDir: string, logger?: Logger) => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n ee.logger = logger;\n\n if (process.env.STRAPI_DISABLE_EE?.toLowerCase() === 'true') {\n return;\n }\n\n try {\n const license = process.env.STRAPI_LICENSE || readLicense(licenseDir);\n\n if (license) {\n ee.licenseInfo = verifyLicense(license);\n enable();\n }\n } catch (error) {\n if (error instanceof Error) {\n disable(error.message);\n } else {\n disable('Invalid license.');\n }\n }\n};\n\n/**\n * Contact the license registry to update the license to its latest state.\n *\n * Store the result in database to avoid unecessary requests, and will fallback to that in case of a network failure.\n */\nconst onlineUpdate = async ({ strapi }: { strapi: Core.Strapi }) => {\n const { get, commit, rollback } = (await strapi.db?.transaction()) as any;\n const transaction = get();\n\n try {\n const storedInfo = await strapi.db\n ?.queryBuilder('strapi::core-store')\n .where({ key: 'ee_information' })\n .select('value')\n .first()\n .transacting(transaction)\n .forUpdate()\n .execute()\n .then((result: any) => (result ? JSON.parse(result.value) : result));\n\n const shouldContactRegistry = (storedInfo?.lastCheckAt ?? 0) < Date.now() - ONE_MINUTE;\n const result: {\n license?: string | null;\n error?: string;\n lastCheckAt?: number;\n } = { lastCheckAt: Date.now() };\n\n const fallback = (error: Error) => {\n if (error instanceof LicenseCheckError && error.shouldFallback && storedInfo?.license) {\n ee.logger?.warn(\n `${error.message} The last stored one will be used as a potential fallback.`\n );\n return storedInfo.license;\n }\n\n result.error = error.message;\n disable(error.message);\n };\n\n if (!ee?.licenseInfo?.licenseKey) {\n throw new Error('Missing license key.');\n }\n\n const license = shouldContactRegistry\n ? await fetchLicense({ strapi }, ee.licenseInfo.licenseKey, strapi.config.get('uuid')).catch(\n fallback\n )\n : storedInfo.license;\n\n if (license) {\n try {\n // Verify license and check if its info changed\n const newLicenseInfo = verifyLicense(license);\n const licenseInfoChanged =\n !isEqual(newLicenseInfo.features, ee.licenseInfo.features) ||\n newLicenseInfo.seats !== ee.licenseInfo.seats ||\n newLicenseInfo.type !== ee.licenseInfo.type;\n\n // Store the new license info\n ee.licenseInfo = newLicenseInfo;\n const wasEnabled = ee.enabled;\n validateInfo();\n\n // Notify EE features\n if (licenseInfoChanged && wasEnabled) {\n strapi.eventHub.emit('ee.update');\n }\n } catch (error) {\n if (error instanceof Error) {\n disable(error.message);\n } else {\n disable('Invalid license.');\n }\n }\n } else if (!shouldContactRegistry) {\n disable(storedInfo.error);\n }\n\n if (shouldContactRegistry) {\n result.license = license ?? null;\n const query = strapi.db.queryBuilder('strapi::core-store').transacting(transaction);\n\n if (!storedInfo) {\n query.insert({ key: 'ee_information', value: JSON.stringify(result) });\n } else {\n query.update({ value: JSON.stringify(result) }).where({ key: 'ee_information' });\n }\n\n await query.execute();\n }\n\n await commit();\n } catch (error) {\n // Example of errors: SQLite does not support FOR UPDATE\n await rollback();\n }\n};\n\nconst validateInfo = () => {\n if (typeof ee.licenseInfo.expireAt === 'undefined') {\n throw new Error('Missing license key.');\n }\n\n const expirationTime = new Date(ee.licenseInfo.expireAt).getTime();\n\n if (expirationTime < new Date().getTime()) {\n return disable('License expired.');\n }\n\n enable();\n};\n\nconst checkLicense = async ({ strapi }: { strapi: Core.Strapi }) => {\n const shouldStayOffline =\n ee.licenseInfo.type === 'gold' &&\n // This env variable support is temporarily used to ease the migration between online vs offline\n process.env.STRAPI_DISABLE_LICENSE_PING?.toLowerCase() === 'true';\n\n if (!shouldStayOffline) {\n await onlineUpdate({ strapi });\n\n strapi.cron.add({\n onlineUpdate: {\n task: () => onlineUpdate({ strapi }),\n options: shiftCronExpression('0 0 */12 * * *'),\n },\n });\n } else {\n if (!ee.licenseInfo.expireAt) {\n return disable('Your license does not have offline support.');\n }\n\n validateInfo();\n }\n};\n\nconst list = () => {\n return (\n ee.licenseInfo.features?.map((feature) =>\n typeof feature === 'object' ? feature : { name: feature }\n ) || []\n );\n};\n\nconst get = (featureName: string) => list().find((feature) => feature.name === featureName);\n\nexport default Object.freeze({\n init,\n checkLicense,\n\n get isEE() {\n return ee.enabled;\n },\n\n get seats() {\n return ee.licenseInfo.seats;\n },\n\n get type() {\n return ee.licenseInfo.type;\n },\n\n features: Object.freeze({\n list,\n get,\n isEnabled: (featureName: string) => get(featureName) !== undefined,\n }),\n});\n"],"names":["ONE_MINUTE","ee","enabled","licenseInfo","disable","message","shouldEmitEvent","logger","warn","pick","strapi","eventHub","emit","enable","initialized","init","licenseDir","process","env","STRAPI_DISABLE_EE","toLowerCase","license","STRAPI_LICENSE","readLicense","verifyLicense","error","Error","onlineUpdate","get","commit","rollback","db","transaction","storedInfo","queryBuilder","where","key","select","first","transacting","forUpdate","execute","then","result","JSON","parse","value","shouldContactRegistry","lastCheckAt","Date","now","fallback","LicenseCheckError","shouldFallback","licenseKey","fetchLicense","config","catch","newLicenseInfo","licenseInfoChanged","isEqual","features","seats","type","wasEnabled","validateInfo","query","insert","stringify","update","expireAt","expirationTime","getTime","checkLicense","shouldStayOffline","STRAPI_DISABLE_LICENSE_PING","cron","add","task","options","shiftCronExpression","list","map","feature","name","featureName","find","Object","freeze","isEE","isEnabled","undefined"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/ee/index.ts"],"sourcesContent":["import { pick, isEqual } from 'lodash/fp';\nimport type { Logger } from '@strapi/logger';\nimport type { Core } from '@strapi/types';\nimport { createStrapiFetch } from '../utils/fetch';\nimport {\n readLicense,\n verifyLicense,\n fetchLicense,\n LicenseCheckError,\n LICENSE_REGISTRY_URI,\n} from './license';\nimport { shiftCronExpression } from '../utils/cron';\n\nconst ONE_MINUTE = 1000 * 60;\n\ninterface EE {\n enabled: boolean;\n licenseInfo: {\n licenseKey?: string;\n features?: Array<{ name: string; [key: string]: any } | string>;\n expireAt?: string;\n seats?: number;\n type?: string;\n isTrial: boolean;\n };\n logger?: Logger;\n}\n\nconst ee: EE = {\n enabled: false,\n licenseInfo: {\n isTrial: false,\n },\n};\n\nconst disable = (message: string) => {\n // Prevent emitting ee.disable if it was already disabled\n const shouldEmitEvent = ee.enabled !== false;\n\n ee.logger?.warn(`${message} Switching to CE.`);\n // Only keep the license key and isTrial for potential re-enabling during a later check\n ee.licenseInfo = pick(['licenseKey', 'isTrial'], ee.licenseInfo);\n\n ee.licenseInfo.isTrial = false;\n\n ee.enabled = false;\n\n if (shouldEmitEvent) {\n // Notify EE features that they should be disabled\n strapi.eventHub.emit('ee.disable');\n }\n};\n\nconst enable = () => {\n // Prevent emitting ee.enable if it was already enabled\n const shouldEmitEvent = ee.enabled !== true;\n\n ee.enabled = true;\n\n if (shouldEmitEvent) {\n // Notify EE features that they should be disabled\n strapi.eventHub.emit('ee.enable');\n }\n};\n\nlet initialized = false;\n\n/**\n * Optimistically enable EE if the format of the license is valid, only run once.\n */\nconst init = (licenseDir: string, logger?: Logger) => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n ee.logger = logger;\n\n if (process.env.STRAPI_DISABLE_EE?.toLowerCase() === 'true') {\n return;\n }\n\n try {\n const license = process.env.STRAPI_LICENSE || readLicense(licenseDir);\n\n if (license) {\n ee.licenseInfo = verifyLicense(license);\n enable();\n }\n } catch (error) {\n if (error instanceof Error) {\n disable(error.message);\n } else {\n disable('Invalid license.');\n }\n }\n};\n\n/**\n * Contact the license registry to update the license to its latest state.\n *\n * Store the result in database to avoid unecessary requests, and will fallback to that in case of a network failure.\n */\nconst onlineUpdate = async ({ strapi }: { strapi: Core.Strapi }) => {\n const { get, commit, rollback } = (await strapi.db?.transaction()) as any;\n const transaction = get();\n\n try {\n const storedInfo = await strapi.db\n ?.queryBuilder('strapi::core-store')\n .where({ key: 'ee_information' })\n .select('value')\n .first()\n .transacting(transaction)\n .forUpdate()\n .execute()\n .then((result: any) => (result ? JSON.parse(result.value) : result));\n\n const shouldContactRegistry = (storedInfo?.lastCheckAt ?? 0) < Date.now() - ONE_MINUTE;\n const result: {\n license?: string | null;\n error?: string;\n lastCheckAt?: number;\n } = { lastCheckAt: Date.now() };\n\n const fallback = (error: Error) => {\n if (error instanceof LicenseCheckError && error.shouldFallback && storedInfo?.license) {\n ee.logger?.warn(\n `${error.message} The last stored one will be used as a potential fallback.`\n );\n return storedInfo.license;\n }\n\n result.error = error.message;\n disable(error.message);\n };\n\n if (!ee?.licenseInfo?.licenseKey) {\n throw new Error('Missing license key.');\n }\n\n const license = shouldContactRegistry\n ? await fetchLicense({ strapi }, ee.licenseInfo.licenseKey, strapi.config.get('uuid')).catch(\n fallback\n )\n : storedInfo.license;\n\n if (license) {\n try {\n // Verify license and check if its info changed\n const newLicenseInfo = verifyLicense(license);\n const licenseInfoChanged =\n !isEqual(newLicenseInfo.features, ee.licenseInfo.features) ||\n newLicenseInfo.seats !== ee.licenseInfo.seats ||\n newLicenseInfo.type !== ee.licenseInfo.type;\n\n // Store the new license info\n ee.licenseInfo = newLicenseInfo;\n const wasEnabled = ee.enabled;\n validateInfo();\n\n // Notify EE features\n if (licenseInfoChanged && wasEnabled) {\n strapi.eventHub.emit('ee.update');\n }\n } catch (error) {\n if (error instanceof Error) {\n disable(error.message);\n } else {\n disable('Invalid license.');\n }\n }\n } else if (!shouldContactRegistry) {\n disable(storedInfo.error);\n }\n\n if (shouldContactRegistry) {\n result.license = license ?? null;\n const query = strapi.db.queryBuilder('strapi::core-store').transacting(transaction);\n\n if (!storedInfo) {\n query.insert({ key: 'ee_information', value: JSON.stringify(result) });\n } else {\n query.update({ value: JSON.stringify(result) }).where({ key: 'ee_information' });\n }\n\n await query.execute();\n }\n\n await commit();\n } catch (error) {\n // Example of errors: SQLite does not support FOR UPDATE\n await rollback();\n }\n};\n\nconst validateInfo = () => {\n if (typeof ee.licenseInfo.expireAt === 'undefined') {\n throw new Error('Missing license key.');\n }\n\n const expirationTime = new Date(ee.licenseInfo.expireAt).getTime();\n\n if (expirationTime < new Date().getTime()) {\n return disable('License expired.');\n }\n\n enable();\n};\n\nconst checkLicense = async ({ strapi }: { strapi: Core.Strapi }) => {\n const shouldStayOffline =\n ee.licenseInfo.type === 'gold' &&\n // This env variable support is temporarily used to ease the migration between online vs offline\n process.env.STRAPI_DISABLE_LICENSE_PING?.toLowerCase() === 'true';\n\n if (!shouldStayOffline) {\n await onlineUpdate({ strapi });\n\n strapi.cron.add({\n onlineUpdate: {\n task: () => onlineUpdate({ strapi }),\n options: shiftCronExpression('0 0 */12 * * *'),\n },\n });\n } else {\n if (!ee.licenseInfo.expireAt) {\n return disable('Your license does not have offline support.');\n }\n\n validateInfo();\n }\n};\n\nconst getTrialEndDate = async ({\n strapi,\n}: {\n strapi: Core.Strapi;\n}): Promise<{ trialEndsAt: string } | null> => {\n const silentFetch = createStrapiFetch(strapi, {\n logs: false,\n });\n\n const res = await silentFetch(\n `${LICENSE_REGISTRY_URI}/api/licenses/${ee.licenseInfo.licenseKey}/trial-countdown`,\n {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n }\n ).catch(() => {\n throw new LicenseCheckError(\n 'Could not proceed to retrieve the trial time left for your license.',\n true\n );\n });\n\n const data = await res.json();\n\n return data;\n};\n\nconst list = () => {\n return (\n ee.licenseInfo.features?.map((feature) =>\n typeof feature === 'object' ? feature : { name: feature }\n ) || []\n );\n};\n\nconst get = (featureName: string) => list().find((feature) => feature.name === featureName);\n\nexport default Object.freeze({\n init,\n checkLicense,\n getTrialEndDate,\n\n get isEE() {\n return ee.enabled;\n },\n\n get seats() {\n return ee.licenseInfo.seats;\n },\n\n get type() {\n return ee.licenseInfo.type;\n },\n\n get isTrial() {\n return ee.licenseInfo.isTrial;\n },\n\n features: Object.freeze({\n list,\n get,\n isEnabled: (featureName: string) => get(featureName) !== undefined,\n }),\n});\n"],"names":["ONE_MINUTE","ee","enabled","licenseInfo","isTrial","disable","message","shouldEmitEvent","logger","warn","pick","strapi","eventHub","emit","enable","initialized","init","licenseDir","process","env","STRAPI_DISABLE_EE","toLowerCase","license","STRAPI_LICENSE","readLicense","verifyLicense","error","Error","onlineUpdate","get","commit","rollback","db","transaction","storedInfo","queryBuilder","where","key","select","first","transacting","forUpdate","execute","then","result","JSON","parse","value","shouldContactRegistry","lastCheckAt","Date","now","fallback","LicenseCheckError","shouldFallback","licenseKey","fetchLicense","config","catch","newLicenseInfo","licenseInfoChanged","isEqual","features","seats","type","wasEnabled","validateInfo","query","insert","stringify","update","expireAt","expirationTime","getTime","checkLicense","shouldStayOffline","STRAPI_DISABLE_LICENSE_PING","cron","add","task","options","shiftCronExpression","getTrialEndDate","silentFetch","createStrapiFetch","logs","res","LICENSE_REGISTRY_URI","method","headers","data","json","list","map","feature","name","featureName","find","Object","freeze","isEE","isEnabled","undefined"],"mappings":"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"}