@strapi/core 0.0.0-next.dad3c50630ca4fd9eccdcbe549ee632fc572e23d → 0.0.0-next.df5dd4b92e1b046c04ff00d00d76c88ea51b57d4

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 (710) hide show
  1. package/dist/Strapi.js +426 -408
  2. package/dist/Strapi.js.map +1 -1
  3. package/dist/Strapi.mjs +426 -408
  4. package/dist/Strapi.mjs.map +1 -1
  5. package/dist/compile.js +23 -14
  6. package/dist/compile.js.map +1 -1
  7. package/dist/compile.mjs +22 -14
  8. package/dist/compile.mjs.map +1 -1
  9. package/dist/configuration/config-loader.js +110 -96
  10. package/dist/configuration/config-loader.js.map +1 -1
  11. package/dist/configuration/config-loader.mjs +109 -95
  12. package/dist/configuration/config-loader.mjs.map +1 -1
  13. package/dist/configuration/get-dirs.js +31 -29
  14. package/dist/configuration/get-dirs.js.map +1 -1
  15. package/dist/configuration/get-dirs.mjs +30 -30
  16. package/dist/configuration/get-dirs.mjs.map +1 -1
  17. package/dist/configuration/index.d.ts +1 -0
  18. package/dist/configuration/index.d.ts.map +1 -1
  19. package/dist/configuration/index.js +85 -78
  20. package/dist/configuration/index.js.map +1 -1
  21. package/dist/configuration/index.mjs +84 -74
  22. package/dist/configuration/index.mjs.map +1 -1
  23. package/dist/configuration/urls.d.ts.map +1 -1
  24. package/dist/configuration/urls.js +74 -61
  25. package/dist/configuration/urls.js.map +1 -1
  26. package/dist/configuration/urls.mjs +73 -62
  27. package/dist/configuration/urls.mjs.map +1 -1
  28. package/dist/container.js +27 -23
  29. package/dist/container.js.map +1 -1
  30. package/dist/container.mjs +26 -24
  31. package/dist/container.mjs.map +1 -1
  32. package/dist/core-api/controller/collection-type.js +77 -76
  33. package/dist/core-api/controller/collection-type.js.map +1 -1
  34. package/dist/core-api/controller/collection-type.mjs +76 -77
  35. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  36. package/dist/core-api/controller/index.js +63 -48
  37. package/dist/core-api/controller/index.js.map +1 -1
  38. package/dist/core-api/controller/index.mjs +62 -49
  39. package/dist/core-api/controller/index.mjs.map +1 -1
  40. package/dist/core-api/controller/single-type.js +41 -40
  41. package/dist/core-api/controller/single-type.js.map +1 -1
  42. package/dist/core-api/controller/single-type.mjs +40 -41
  43. package/dist/core-api/controller/single-type.mjs.map +1 -1
  44. package/dist/core-api/controller/transform.js +72 -63
  45. package/dist/core-api/controller/transform.js.map +1 -1
  46. package/dist/core-api/controller/transform.mjs +71 -64
  47. package/dist/core-api/controller/transform.mjs.map +1 -1
  48. package/dist/core-api/routes/index.js +64 -62
  49. package/dist/core-api/routes/index.js.map +1 -1
  50. package/dist/core-api/routes/index.mjs +62 -62
  51. package/dist/core-api/routes/index.mjs.map +1 -1
  52. package/dist/core-api/service/collection-type.js +73 -60
  53. package/dist/core-api/service/collection-type.js.map +1 -1
  54. package/dist/core-api/service/collection-type.mjs +72 -62
  55. package/dist/core-api/service/collection-type.mjs.map +1 -1
  56. package/dist/core-api/service/core-service.js +9 -8
  57. package/dist/core-api/service/core-service.js.map +1 -1
  58. package/dist/core-api/service/core-service.mjs +8 -9
  59. package/dist/core-api/service/core-service.mjs.map +1 -1
  60. package/dist/core-api/service/index.js +13 -13
  61. package/dist/core-api/service/index.js.map +1 -1
  62. package/dist/core-api/service/index.mjs +12 -14
  63. package/dist/core-api/service/index.mjs.map +1 -1
  64. package/dist/core-api/service/pagination.js +69 -43
  65. package/dist/core-api/service/pagination.js.map +1 -1
  66. package/dist/core-api/service/pagination.mjs +68 -47
  67. package/dist/core-api/service/pagination.mjs.map +1 -1
  68. package/dist/core-api/service/single-type.js +43 -38
  69. package/dist/core-api/service/single-type.js.map +1 -1
  70. package/dist/core-api/service/single-type.mjs +42 -40
  71. package/dist/core-api/service/single-type.mjs.map +1 -1
  72. package/dist/domain/content-type/index.js +95 -100
  73. package/dist/domain/content-type/index.js.map +1 -1
  74. package/dist/domain/content-type/index.mjs +94 -100
  75. package/dist/domain/content-type/index.mjs.map +1 -1
  76. package/dist/domain/content-type/validator.js +84 -69
  77. package/dist/domain/content-type/validator.js.map +1 -1
  78. package/dist/domain/content-type/validator.mjs +83 -68
  79. package/dist/domain/content-type/validator.mjs.map +1 -1
  80. package/dist/domain/module/index.js +109 -100
  81. package/dist/domain/module/index.js.map +1 -1
  82. package/dist/domain/module/index.mjs +108 -99
  83. package/dist/domain/module/index.mjs.map +1 -1
  84. package/dist/domain/module/validation.js +25 -20
  85. package/dist/domain/module/validation.js.map +1 -1
  86. package/dist/domain/module/validation.mjs +24 -21
  87. package/dist/domain/module/validation.mjs.map +1 -1
  88. package/dist/ee/index.d.ts +7 -0
  89. package/dist/ee/index.d.ts.map +1 -1
  90. package/dist/ee/index.js +197 -137
  91. package/dist/ee/index.js.map +1 -1
  92. package/dist/ee/index.mjs +196 -139
  93. package/dist/ee/index.mjs.map +1 -1
  94. package/dist/ee/license.d.ts +3 -1
  95. package/dist/ee/license.d.ts.map +1 -1
  96. package/dist/ee/license.js +105 -75
  97. package/dist/ee/license.js.map +1 -1
  98. package/dist/ee/license.mjs +103 -76
  99. package/dist/ee/license.mjs.map +1 -1
  100. package/dist/factories.js +72 -67
  101. package/dist/factories.js.map +1 -1
  102. package/dist/factories.mjs +71 -71
  103. package/dist/factories.mjs.map +1 -1
  104. package/dist/index.js +29 -26
  105. package/dist/index.js.map +1 -1
  106. package/dist/index.mjs +29 -29
  107. package/dist/index.mjs.map +1 -1
  108. package/dist/loaders/admin.d.ts.map +1 -1
  109. package/dist/loaders/admin.js +21 -20
  110. package/dist/loaders/admin.js.map +1 -1
  111. package/dist/loaders/admin.mjs +20 -20
  112. package/dist/loaders/admin.mjs.map +1 -1
  113. package/dist/loaders/apis.js +143 -120
  114. package/dist/loaders/apis.js.map +1 -1
  115. package/dist/loaders/apis.mjs +142 -119
  116. package/dist/loaders/apis.mjs.map +1 -1
  117. package/dist/loaders/components.js +33 -34
  118. package/dist/loaders/components.js.map +1 -1
  119. package/dist/loaders/components.mjs +32 -34
  120. package/dist/loaders/components.mjs.map +1 -1
  121. package/dist/loaders/index.js +22 -20
  122. package/dist/loaders/index.js.map +1 -1
  123. package/dist/loaders/index.mjs +21 -21
  124. package/dist/loaders/index.mjs.map +1 -1
  125. package/dist/loaders/middlewares.js +29 -25
  126. package/dist/loaders/middlewares.js.map +1 -1
  127. package/dist/loaders/middlewares.mjs +28 -25
  128. package/dist/loaders/middlewares.mjs.map +1 -1
  129. package/dist/loaders/plugins/get-enabled-plugins.js +126 -131
  130. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  131. package/dist/loaders/plugins/get-enabled-plugins.mjs +125 -108
  132. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  133. package/dist/loaders/plugins/get-user-plugins-config.js +25 -24
  134. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  135. package/dist/loaders/plugins/get-user-plugins-config.mjs +24 -23
  136. package/dist/loaders/plugins/get-user-plugins-config.mjs.map +1 -1
  137. package/dist/loaders/plugins/index.js +132 -121
  138. package/dist/loaders/plugins/index.js.map +1 -1
  139. package/dist/loaders/plugins/index.mjs +121 -112
  140. package/dist/loaders/plugins/index.mjs.map +1 -1
  141. package/dist/loaders/policies.js +24 -20
  142. package/dist/loaders/policies.js.map +1 -1
  143. package/dist/loaders/policies.mjs +23 -20
  144. package/dist/loaders/policies.mjs.map +1 -1
  145. package/dist/loaders/sanitizers.js +10 -4
  146. package/dist/loaders/sanitizers.js.map +1 -1
  147. package/dist/loaders/sanitizers.mjs +9 -6
  148. package/dist/loaders/sanitizers.mjs.map +1 -1
  149. package/dist/loaders/src-index.js +35 -27
  150. package/dist/loaders/src-index.js.map +1 -1
  151. package/dist/loaders/src-index.mjs +34 -29
  152. package/dist/loaders/src-index.mjs.map +1 -1
  153. package/dist/loaders/validators.js +9 -4
  154. package/dist/loaders/validators.js.map +1 -1
  155. package/dist/loaders/validators.mjs +8 -6
  156. package/dist/loaders/validators.mjs.map +1 -1
  157. package/dist/middlewares/body.d.ts.map +1 -1
  158. package/dist/middlewares/body.js +58 -54
  159. package/dist/middlewares/body.js.map +1 -1
  160. package/dist/middlewares/body.mjs +57 -51
  161. package/dist/middlewares/body.mjs.map +1 -1
  162. package/dist/middlewares/compression.js +6 -6
  163. package/dist/middlewares/compression.js.map +1 -1
  164. package/dist/middlewares/compression.mjs +5 -5
  165. package/dist/middlewares/compression.mjs.map +1 -1
  166. package/dist/middlewares/cors.js +59 -48
  167. package/dist/middlewares/cors.js.map +1 -1
  168. package/dist/middlewares/cors.mjs +58 -47
  169. package/dist/middlewares/cors.mjs.map +1 -1
  170. package/dist/middlewares/errors.js +32 -30
  171. package/dist/middlewares/errors.js.map +1 -1
  172. package/dist/middlewares/errors.mjs +31 -31
  173. package/dist/middlewares/errors.mjs.map +1 -1
  174. package/dist/middlewares/favicon.js +27 -17
  175. package/dist/middlewares/favicon.js.map +1 -1
  176. package/dist/middlewares/favicon.mjs +26 -16
  177. package/dist/middlewares/favicon.mjs.map +1 -1
  178. package/dist/middlewares/index.js +32 -30
  179. package/dist/middlewares/index.js.map +1 -1
  180. package/dist/middlewares/index.mjs +31 -31
  181. package/dist/middlewares/index.mjs.map +1 -1
  182. package/dist/middlewares/ip.js +6 -6
  183. package/dist/middlewares/ip.js.map +1 -1
  184. package/dist/middlewares/ip.mjs +5 -5
  185. package/dist/middlewares/ip.mjs.map +1 -1
  186. package/dist/middlewares/logger.js +10 -9
  187. package/dist/middlewares/logger.js.map +1 -1
  188. package/dist/middlewares/logger.mjs +9 -10
  189. package/dist/middlewares/logger.mjs.map +1 -1
  190. package/dist/middlewares/powered-by.js +13 -9
  191. package/dist/middlewares/powered-by.js.map +1 -1
  192. package/dist/middlewares/powered-by.mjs +12 -10
  193. package/dist/middlewares/powered-by.mjs.map +1 -1
  194. package/dist/middlewares/public.js +33 -29
  195. package/dist/middlewares/public.js.map +1 -1
  196. package/dist/middlewares/public.mjs +32 -28
  197. package/dist/middlewares/public.mjs.map +1 -1
  198. package/dist/middlewares/query.js +35 -32
  199. package/dist/middlewares/query.js.map +1 -1
  200. package/dist/middlewares/query.mjs +34 -31
  201. package/dist/middlewares/query.mjs.map +1 -1
  202. package/dist/middlewares/response-time.js +10 -9
  203. package/dist/middlewares/response-time.js.map +1 -1
  204. package/dist/middlewares/response-time.mjs +9 -10
  205. package/dist/middlewares/response-time.mjs.map +1 -1
  206. package/dist/middlewares/responses.js +14 -12
  207. package/dist/middlewares/responses.js.map +1 -1
  208. package/dist/middlewares/responses.mjs +13 -13
  209. package/dist/middlewares/responses.mjs.map +1 -1
  210. package/dist/middlewares/security.js +109 -71
  211. package/dist/middlewares/security.js.map +1 -1
  212. package/dist/middlewares/security.mjs +108 -70
  213. package/dist/middlewares/security.mjs.map +1 -1
  214. package/dist/middlewares/session.js +26 -25
  215. package/dist/middlewares/session.js.map +1 -1
  216. package/dist/middlewares/session.mjs +25 -24
  217. package/dist/middlewares/session.mjs.map +1 -1
  218. package/dist/migrations/database/5.0.0-discard-drafts.d.ts +2 -2
  219. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
  220. package/dist/migrations/database/5.0.0-discard-drafts.js +152 -90
  221. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  222. package/dist/migrations/database/5.0.0-discard-drafts.mjs +151 -92
  223. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
  224. package/dist/migrations/draft-publish.d.ts +1 -1
  225. package/dist/migrations/draft-publish.d.ts.map +1 -1
  226. package/dist/migrations/draft-publish.js +61 -34
  227. package/dist/migrations/draft-publish.js.map +1 -1
  228. package/dist/migrations/draft-publish.mjs +60 -36
  229. package/dist/migrations/draft-publish.mjs.map +1 -1
  230. package/dist/migrations/i18n.js +62 -45
  231. package/dist/migrations/i18n.js.map +1 -1
  232. package/dist/migrations/i18n.mjs +61 -47
  233. package/dist/migrations/i18n.mjs.map +1 -1
  234. package/dist/migrations/index.js +24 -10
  235. package/dist/migrations/index.js.map +1 -1
  236. package/dist/migrations/index.mjs +23 -12
  237. package/dist/migrations/index.mjs.map +1 -1
  238. package/dist/package.json.js +182 -0
  239. package/dist/package.json.js.map +1 -0
  240. package/dist/package.json.mjs +159 -0
  241. package/dist/package.json.mjs.map +1 -0
  242. package/dist/providers/admin.js +27 -17
  243. package/dist/providers/admin.js.map +1 -1
  244. package/dist/providers/admin.mjs +26 -19
  245. package/dist/providers/admin.mjs.map +1 -1
  246. package/dist/providers/coreStore.js +13 -8
  247. package/dist/providers/coreStore.js.map +1 -1
  248. package/dist/providers/coreStore.mjs +12 -10
  249. package/dist/providers/coreStore.mjs.map +1 -1
  250. package/dist/providers/cron.js +19 -16
  251. package/dist/providers/cron.js.map +1 -1
  252. package/dist/providers/cron.mjs +18 -18
  253. package/dist/providers/cron.mjs.map +1 -1
  254. package/dist/providers/index.js +18 -9
  255. package/dist/providers/index.js.map +1 -1
  256. package/dist/providers/index.mjs +17 -10
  257. package/dist/providers/index.mjs.map +1 -1
  258. package/dist/providers/provider.js +4 -3
  259. package/dist/providers/provider.js.map +1 -1
  260. package/dist/providers/provider.mjs +3 -4
  261. package/dist/providers/provider.mjs.map +1 -1
  262. package/dist/providers/registries.js +37 -32
  263. package/dist/providers/registries.js.map +1 -1
  264. package/dist/providers/registries.mjs +36 -34
  265. package/dist/providers/registries.mjs.map +1 -1
  266. package/dist/providers/telemetry.js +19 -16
  267. package/dist/providers/telemetry.js.map +1 -1
  268. package/dist/providers/telemetry.mjs +18 -18
  269. package/dist/providers/telemetry.mjs.map +1 -1
  270. package/dist/providers/webhooks.js +28 -26
  271. package/dist/providers/webhooks.js.map +1 -1
  272. package/dist/providers/webhooks.mjs +27 -28
  273. package/dist/providers/webhooks.mjs.map +1 -1
  274. package/dist/registries/apis.js +23 -20
  275. package/dist/registries/apis.js.map +1 -1
  276. package/dist/registries/apis.mjs +22 -22
  277. package/dist/registries/apis.mjs.map +1 -1
  278. package/dist/registries/components.js +35 -37
  279. package/dist/registries/components.js.map +1 -1
  280. package/dist/registries/components.mjs +34 -39
  281. package/dist/registries/components.mjs.map +1 -1
  282. package/dist/registries/content-types.js +54 -59
  283. package/dist/registries/content-types.js.map +1 -1
  284. package/dist/registries/content-types.mjs +53 -61
  285. package/dist/registries/content-types.mjs.map +1 -1
  286. package/dist/registries/controllers.js +70 -71
  287. package/dist/registries/controllers.js.map +1 -1
  288. package/dist/registries/controllers.mjs +69 -73
  289. package/dist/registries/controllers.mjs.map +1 -1
  290. package/dist/registries/custom-fields.js +75 -65
  291. package/dist/registries/custom-fields.js.map +1 -1
  292. package/dist/registries/custom-fields.mjs +74 -67
  293. package/dist/registries/custom-fields.mjs.map +1 -1
  294. package/dist/registries/hooks.js +46 -49
  295. package/dist/registries/hooks.js.map +1 -1
  296. package/dist/registries/hooks.mjs +45 -51
  297. package/dist/registries/hooks.mjs.map +1 -1
  298. package/dist/registries/middlewares.js +49 -51
  299. package/dist/registries/middlewares.js.map +1 -1
  300. package/dist/registries/middlewares.mjs +48 -53
  301. package/dist/registries/middlewares.mjs.map +1 -1
  302. package/dist/registries/models.js +14 -13
  303. package/dist/registries/models.js.map +1 -1
  304. package/dist/registries/models.mjs +13 -14
  305. package/dist/registries/models.mjs.map +1 -1
  306. package/dist/registries/modules.js +39 -36
  307. package/dist/registries/modules.js.map +1 -1
  308. package/dist/registries/modules.mjs +38 -38
  309. package/dist/registries/modules.mjs.map +1 -1
  310. package/dist/registries/namespace.js +21 -20
  311. package/dist/registries/namespace.js.map +1 -1
  312. package/dist/registries/namespace.mjs +20 -23
  313. package/dist/registries/namespace.mjs.map +1 -1
  314. package/dist/registries/plugins.js +23 -20
  315. package/dist/registries/plugins.js.map +1 -1
  316. package/dist/registries/plugins.mjs +22 -22
  317. package/dist/registries/plugins.mjs.map +1 -1
  318. package/dist/registries/policies.js +103 -96
  319. package/dist/registries/policies.js.map +1 -1
  320. package/dist/registries/policies.mjs +102 -98
  321. package/dist/registries/policies.mjs.map +1 -1
  322. package/dist/registries/sanitizers.js +23 -22
  323. package/dist/registries/sanitizers.js.map +1 -1
  324. package/dist/registries/sanitizers.mjs +22 -22
  325. package/dist/registries/sanitizers.mjs.map +1 -1
  326. package/dist/registries/services.js +71 -71
  327. package/dist/registries/services.js.map +1 -1
  328. package/dist/registries/services.mjs +70 -73
  329. package/dist/registries/services.mjs.map +1 -1
  330. package/dist/registries/validators.js +23 -22
  331. package/dist/registries/validators.js.map +1 -1
  332. package/dist/registries/validators.mjs +22 -22
  333. package/dist/registries/validators.mjs.map +1 -1
  334. package/dist/services/auth/index.js +74 -74
  335. package/dist/services/auth/index.js.map +1 -1
  336. package/dist/services/auth/index.mjs +73 -74
  337. package/dist/services/auth/index.mjs.map +1 -1
  338. package/dist/services/config.js +47 -43
  339. package/dist/services/config.js.map +1 -1
  340. package/dist/services/config.mjs +46 -44
  341. package/dist/services/config.mjs.map +1 -1
  342. package/dist/services/content-api/index.js +80 -79
  343. package/dist/services/content-api/index.js.map +1 -1
  344. package/dist/services/content-api/index.mjs +79 -79
  345. package/dist/services/content-api/index.mjs.map +1 -1
  346. package/dist/services/content-api/permissions/engine.js +8 -5
  347. package/dist/services/content-api/permissions/engine.js.map +1 -1
  348. package/dist/services/content-api/permissions/engine.mjs +7 -5
  349. package/dist/services/content-api/permissions/engine.mjs.map +1 -1
  350. package/dist/services/content-api/permissions/index.js +101 -81
  351. package/dist/services/content-api/permissions/index.js.map +1 -1
  352. package/dist/services/content-api/permissions/index.mjs +100 -81
  353. package/dist/services/content-api/permissions/index.mjs.map +1 -1
  354. package/dist/services/content-api/permissions/providers/action.js +17 -14
  355. package/dist/services/content-api/permissions/providers/action.js.map +1 -1
  356. package/dist/services/content-api/permissions/providers/action.mjs +16 -16
  357. package/dist/services/content-api/permissions/providers/action.mjs.map +1 -1
  358. package/dist/services/content-api/permissions/providers/condition.js +17 -14
  359. package/dist/services/content-api/permissions/providers/condition.js.map +1 -1
  360. package/dist/services/content-api/permissions/providers/condition.mjs +16 -16
  361. package/dist/services/content-api/permissions/providers/condition.mjs.map +1 -1
  362. package/dist/services/core-store.d.ts +2 -2
  363. package/dist/services/core-store.d.ts.map +1 -1
  364. package/dist/services/core-store.js +115 -95
  365. package/dist/services/core-store.js.map +1 -1
  366. package/dist/services/core-store.mjs +114 -97
  367. package/dist/services/core-store.mjs.map +1 -1
  368. package/dist/services/cron.js +74 -64
  369. package/dist/services/cron.js.map +1 -1
  370. package/dist/services/cron.mjs +73 -66
  371. package/dist/services/cron.mjs.map +1 -1
  372. package/dist/services/custom-fields.js +9 -7
  373. package/dist/services/custom-fields.js.map +1 -1
  374. package/dist/services/custom-fields.mjs +8 -9
  375. package/dist/services/custom-fields.mjs.map +1 -1
  376. package/dist/services/document-service/attributes/index.js +23 -18
  377. package/dist/services/document-service/attributes/index.js.map +1 -1
  378. package/dist/services/document-service/attributes/index.mjs +22 -19
  379. package/dist/services/document-service/attributes/index.mjs.map +1 -1
  380. package/dist/services/document-service/attributes/transforms.js +16 -15
  381. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  382. package/dist/services/document-service/attributes/transforms.mjs +15 -15
  383. package/dist/services/document-service/attributes/transforms.mjs.map +1 -1
  384. package/dist/services/document-service/common.js +5 -4
  385. package/dist/services/document-service/common.js.map +1 -1
  386. package/dist/services/document-service/common.mjs +4 -5
  387. package/dist/services/document-service/common.mjs.map +1 -1
  388. package/dist/services/document-service/components.js +255 -257
  389. package/dist/services/document-service/components.js.map +1 -1
  390. package/dist/services/document-service/components.mjs +254 -262
  391. package/dist/services/document-service/components.mjs.map +1 -1
  392. package/dist/services/document-service/draft-and-publish.d.ts +1 -1
  393. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  394. package/dist/services/document-service/draft-and-publish.js +88 -48
  395. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  396. package/dist/services/document-service/draft-and-publish.mjs +87 -54
  397. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  398. package/dist/services/document-service/entries.d.ts.map +1 -1
  399. package/dist/services/document-service/entries.js +151 -91
  400. package/dist/services/document-service/entries.js.map +1 -1
  401. package/dist/services/document-service/entries.mjs +150 -92
  402. package/dist/services/document-service/entries.mjs.map +1 -1
  403. package/dist/services/document-service/events.d.ts +1 -1
  404. package/dist/services/document-service/events.d.ts.map +1 -1
  405. package/dist/services/document-service/events.js +52 -40
  406. package/dist/services/document-service/events.js.map +1 -1
  407. package/dist/services/document-service/events.mjs +51 -41
  408. package/dist/services/document-service/events.mjs.map +1 -1
  409. package/dist/services/document-service/index.js +53 -33
  410. package/dist/services/document-service/index.js.map +1 -1
  411. package/dist/services/document-service/index.mjs +52 -34
  412. package/dist/services/document-service/index.mjs.map +1 -1
  413. package/dist/services/document-service/internationalization.js +62 -46
  414. package/dist/services/document-service/internationalization.js.map +1 -1
  415. package/dist/services/document-service/internationalization.mjs +61 -50
  416. package/dist/services/document-service/internationalization.mjs.map +1 -1
  417. package/dist/services/document-service/middlewares/errors.js +23 -19
  418. package/dist/services/document-service/middlewares/errors.js.map +1 -1
  419. package/dist/services/document-service/middlewares/errors.mjs +22 -20
  420. package/dist/services/document-service/middlewares/errors.mjs.map +1 -1
  421. package/dist/services/document-service/middlewares/middleware-manager.js +46 -44
  422. package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -1
  423. package/dist/services/document-service/middlewares/middleware-manager.mjs +45 -45
  424. package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -1
  425. package/dist/services/document-service/params.js +11 -5
  426. package/dist/services/document-service/params.js.map +1 -1
  427. package/dist/services/document-service/params.mjs +10 -6
  428. package/dist/services/document-service/params.mjs.map +1 -1
  429. package/dist/services/document-service/repository.d.ts.map +1 -1
  430. package/dist/services/document-service/repository.js +353 -321
  431. package/dist/services/document-service/repository.js.map +1 -1
  432. package/dist/services/document-service/repository.mjs +352 -322
  433. package/dist/services/document-service/repository.mjs.map +1 -1
  434. package/dist/services/document-service/transform/data.js +22 -12
  435. package/dist/services/document-service/transform/data.js.map +1 -1
  436. package/dist/services/document-service/transform/data.mjs +21 -13
  437. package/dist/services/document-service/transform/data.mjs.map +1 -1
  438. package/dist/services/document-service/transform/fields.js +26 -17
  439. package/dist/services/document-service/transform/fields.js.map +1 -1
  440. package/dist/services/document-service/transform/fields.mjs +25 -18
  441. package/dist/services/document-service/transform/fields.mjs.map +1 -1
  442. package/dist/services/document-service/transform/id-map.d.ts +1 -1
  443. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  444. package/dist/services/document-service/transform/id-map.js +115 -75
  445. package/dist/services/document-service/transform/id-map.js.map +1 -1
  446. package/dist/services/document-service/transform/id-map.mjs +114 -76
  447. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  448. package/dist/services/document-service/transform/id-transform.d.ts +1 -1
  449. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  450. package/dist/services/document-service/transform/id-transform.js +37 -29
  451. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  452. package/dist/services/document-service/transform/id-transform.mjs +36 -30
  453. package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
  454. package/dist/services/document-service/transform/populate.js +23 -18
  455. package/dist/services/document-service/transform/populate.js.map +1 -1
  456. package/dist/services/document-service/transform/populate.mjs +22 -19
  457. package/dist/services/document-service/transform/populate.mjs.map +1 -1
  458. package/dist/services/document-service/transform/query.js +11 -6
  459. package/dist/services/document-service/transform/query.js.map +1 -1
  460. package/dist/services/document-service/transform/query.mjs +10 -7
  461. package/dist/services/document-service/transform/query.mjs.map +1 -1
  462. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +1 -1
  463. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  464. package/dist/services/document-service/transform/relations/extract/data-ids.js +70 -54
  465. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  466. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +69 -55
  467. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  468. package/dist/services/document-service/transform/relations/transform/data-ids.js +96 -71
  469. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  470. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +95 -72
  471. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  472. package/dist/services/document-service/transform/relations/transform/default-locale.js +47 -29
  473. package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -1
  474. package/dist/services/document-service/transform/relations/transform/default-locale.mjs +46 -30
  475. package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -1
  476. package/dist/services/document-service/transform/relations/utils/dp.d.ts +1 -1
  477. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  478. package/dist/services/document-service/transform/relations/utils/dp.js +52 -26
  479. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  480. package/dist/services/document-service/transform/relations/utils/dp.mjs +51 -27
  481. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
  482. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +1 -1
  483. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  484. package/dist/services/document-service/transform/relations/utils/i18n.js +20 -18
  485. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
  486. package/dist/services/document-service/transform/relations/utils/i18n.mjs +19 -21
  487. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
  488. package/dist/services/document-service/transform/relations/utils/map-relation.js +116 -70
  489. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  490. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +115 -72
  491. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  492. package/dist/services/document-service/utils/bidirectional-relations.d.ts +95 -0
  493. package/dist/services/document-service/utils/bidirectional-relations.d.ts.map +1 -0
  494. package/dist/services/document-service/utils/bidirectional-relations.js +148 -0
  495. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -0
  496. package/dist/services/document-service/utils/bidirectional-relations.mjs +145 -0
  497. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -0
  498. package/dist/services/document-service/utils/populate.d.ts +1 -1
  499. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  500. package/dist/services/document-service/utils/populate.js +66 -42
  501. package/dist/services/document-service/utils/populate.js.map +1 -1
  502. package/dist/services/document-service/utils/populate.mjs +65 -43
  503. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  504. package/dist/services/document-service/utils/unidirectional-relations.d.ts +1 -1
  505. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  506. package/dist/services/document-service/utils/unidirectional-relations.js +110 -62
  507. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
  508. package/dist/services/document-service/utils/unidirectional-relations.mjs +109 -64
  509. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
  510. package/dist/services/entity-service/index.js +230 -161
  511. package/dist/services/entity-service/index.js.map +1 -1
  512. package/dist/services/entity-service/index.mjs +229 -160
  513. package/dist/services/entity-service/index.mjs.map +1 -1
  514. package/dist/services/entity-validator/blocks-validator.js +135 -103
  515. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  516. package/dist/services/entity-validator/blocks-validator.mjs +134 -104
  517. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  518. package/dist/services/entity-validator/index.d.ts +1 -1
  519. package/dist/services/entity-validator/index.d.ts.map +1 -1
  520. package/dist/services/entity-validator/index.js +362 -367
  521. package/dist/services/entity-validator/index.js.map +1 -1
  522. package/dist/services/entity-validator/index.mjs +358 -364
  523. package/dist/services/entity-validator/index.mjs.map +1 -1
  524. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  525. package/dist/services/entity-validator/validators.js +270 -209
  526. package/dist/services/entity-validator/validators.js.map +1 -1
  527. package/dist/services/entity-validator/validators.mjs +269 -215
  528. package/dist/services/entity-validator/validators.mjs.map +1 -1
  529. package/dist/services/errors.js +65 -65
  530. package/dist/services/errors.js.map +1 -1
  531. package/dist/services/errors.mjs +64 -66
  532. package/dist/services/errors.mjs.map +1 -1
  533. package/dist/services/event-hub.js +82 -69
  534. package/dist/services/event-hub.js.map +1 -1
  535. package/dist/services/event-hub.mjs +81 -71
  536. package/dist/services/event-hub.mjs.map +1 -1
  537. package/dist/services/features.js +19 -14
  538. package/dist/services/features.js.map +1 -1
  539. package/dist/services/features.mjs +18 -15
  540. package/dist/services/features.mjs.map +1 -1
  541. package/dist/services/fs.js +41 -40
  542. package/dist/services/fs.js.map +1 -1
  543. package/dist/services/fs.mjs +40 -39
  544. package/dist/services/fs.mjs.map +1 -1
  545. package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
  546. package/dist/services/metrics/admin-user-hash.js +13 -11
  547. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  548. package/dist/services/metrics/admin-user-hash.mjs +12 -10
  549. package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
  550. package/dist/services/metrics/index.js +46 -39
  551. package/dist/services/metrics/index.js.map +1 -1
  552. package/dist/services/metrics/index.mjs +45 -41
  553. package/dist/services/metrics/index.mjs.map +1 -1
  554. package/dist/services/metrics/is-truthy.js +13 -6
  555. package/dist/services/metrics/is-truthy.js.map +1 -1
  556. package/dist/services/metrics/is-truthy.mjs +12 -6
  557. package/dist/services/metrics/is-truthy.mjs.map +1 -1
  558. package/dist/services/metrics/middleware.d.ts.map +1 -1
  559. package/dist/services/metrics/middleware.js +37 -22
  560. package/dist/services/metrics/middleware.js.map +1 -1
  561. package/dist/services/metrics/middleware.mjs +36 -24
  562. package/dist/services/metrics/middleware.mjs.map +1 -1
  563. package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
  564. package/dist/services/metrics/rate-limiter.js +24 -19
  565. package/dist/services/metrics/rate-limiter.js.map +1 -1
  566. package/dist/services/metrics/rate-limiter.mjs +23 -21
  567. package/dist/services/metrics/rate-limiter.mjs.map +1 -1
  568. package/dist/services/metrics/sender.d.ts.map +1 -1
  569. package/dist/services/metrics/sender.js +78 -69
  570. package/dist/services/metrics/sender.js.map +1 -1
  571. package/dist/services/metrics/sender.mjs +77 -64
  572. package/dist/services/metrics/sender.mjs.map +1 -1
  573. package/dist/services/query-params.js +13 -10
  574. package/dist/services/query-params.js.map +1 -1
  575. package/dist/services/query-params.mjs +12 -12
  576. package/dist/services/query-params.mjs.map +1 -1
  577. package/dist/services/reloader.js +35 -32
  578. package/dist/services/reloader.js.map +1 -1
  579. package/dist/services/reloader.mjs +34 -33
  580. package/dist/services/reloader.mjs.map +1 -1
  581. package/dist/services/request-context.js +11 -8
  582. package/dist/services/request-context.js.map +1 -1
  583. package/dist/services/request-context.mjs +10 -10
  584. package/dist/services/request-context.mjs.map +1 -1
  585. package/dist/services/server/admin-api.js +11 -10
  586. package/dist/services/server/admin-api.js.map +1 -1
  587. package/dist/services/server/admin-api.mjs +10 -11
  588. package/dist/services/server/admin-api.mjs.map +1 -1
  589. package/dist/services/server/api.js +33 -27
  590. package/dist/services/server/api.js.map +1 -1
  591. package/dist/services/server/api.mjs +32 -26
  592. package/dist/services/server/api.mjs.map +1 -1
  593. package/dist/services/server/compose-endpoint.js +116 -105
  594. package/dist/services/server/compose-endpoint.js.map +1 -1
  595. package/dist/services/server/compose-endpoint.mjs +115 -105
  596. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  597. package/dist/services/server/content-api.js +11 -9
  598. package/dist/services/server/content-api.js.map +1 -1
  599. package/dist/services/server/content-api.mjs +10 -10
  600. package/dist/services/server/content-api.mjs.map +1 -1
  601. package/dist/services/server/http-server.js +48 -44
  602. package/dist/services/server/http-server.js.map +1 -1
  603. package/dist/services/server/http-server.mjs +47 -43
  604. package/dist/services/server/http-server.mjs.map +1 -1
  605. package/dist/services/server/index.js +85 -82
  606. package/dist/services/server/index.js.map +1 -1
  607. package/dist/services/server/index.mjs +84 -81
  608. package/dist/services/server/index.mjs.map +1 -1
  609. package/dist/services/server/koa.js +49 -47
  610. package/dist/services/server/koa.js.map +1 -1
  611. package/dist/services/server/koa.mjs +48 -44
  612. package/dist/services/server/koa.mjs.map +1 -1
  613. package/dist/services/server/middleware.js +86 -82
  614. package/dist/services/server/middleware.js.map +1 -1
  615. package/dist/services/server/middleware.mjs +85 -82
  616. package/dist/services/server/middleware.mjs.map +1 -1
  617. package/dist/services/server/policy.js +24 -17
  618. package/dist/services/server/policy.js.map +1 -1
  619. package/dist/services/server/policy.mjs +23 -18
  620. package/dist/services/server/policy.mjs.map +1 -1
  621. package/dist/services/server/register-middlewares.js +68 -61
  622. package/dist/services/server/register-middlewares.js.map +1 -1
  623. package/dist/services/server/register-middlewares.mjs +67 -63
  624. package/dist/services/server/register-middlewares.mjs.map +1 -1
  625. package/dist/services/server/register-routes.js +90 -67
  626. package/dist/services/server/register-routes.js.map +1 -1
  627. package/dist/services/server/register-routes.mjs +89 -67
  628. package/dist/services/server/register-routes.mjs.map +1 -1
  629. package/dist/services/server/routing.js +94 -81
  630. package/dist/services/server/routing.js.map +1 -1
  631. package/dist/services/server/routing.mjs +93 -81
  632. package/dist/services/server/routing.mjs.map +1 -1
  633. package/dist/services/utils/dynamic-zones.js +13 -14
  634. package/dist/services/utils/dynamic-zones.js.map +1 -1
  635. package/dist/services/utils/dynamic-zones.mjs +12 -16
  636. package/dist/services/utils/dynamic-zones.mjs.map +1 -1
  637. package/dist/services/webhook-runner.js +124 -122
  638. package/dist/services/webhook-runner.js.map +1 -1
  639. package/dist/services/webhook-runner.mjs +123 -121
  640. package/dist/services/webhook-runner.mjs.map +1 -1
  641. package/dist/services/webhook-store.js +132 -99
  642. package/dist/services/webhook-store.js.map +1 -1
  643. package/dist/services/webhook-store.mjs +131 -101
  644. package/dist/services/webhook-store.mjs.map +1 -1
  645. package/dist/services/worker-queue.js +44 -49
  646. package/dist/services/worker-queue.js.map +1 -1
  647. package/dist/services/worker-queue.mjs +43 -49
  648. package/dist/services/worker-queue.mjs.map +1 -1
  649. package/dist/utils/convert-custom-field-type.js +17 -20
  650. package/dist/utils/convert-custom-field-type.js.map +1 -1
  651. package/dist/utils/convert-custom-field-type.mjs +16 -21
  652. package/dist/utils/convert-custom-field-type.mjs.map +1 -1
  653. package/dist/utils/cron.js +64 -30
  654. package/dist/utils/cron.js.map +1 -1
  655. package/dist/utils/cron.mjs +63 -31
  656. package/dist/utils/cron.mjs.map +1 -1
  657. package/dist/utils/fetch.d.ts +5 -1
  658. package/dist/utils/fetch.d.ts.map +1 -1
  659. package/dist/utils/fetch.js +28 -18
  660. package/dist/utils/fetch.js.map +1 -1
  661. package/dist/utils/fetch.mjs +27 -19
  662. package/dist/utils/fetch.mjs.map +1 -1
  663. package/dist/utils/filepath-to-prop-path.js +20 -28
  664. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  665. package/dist/utils/filepath-to-prop-path.mjs +19 -26
  666. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  667. package/dist/utils/is-initialized.js +21 -12
  668. package/dist/utils/is-initialized.js.map +1 -1
  669. package/dist/utils/is-initialized.mjs +20 -13
  670. package/dist/utils/is-initialized.mjs.map +1 -1
  671. package/dist/utils/lifecycles.js +6 -5
  672. package/dist/utils/lifecycles.js.map +1 -1
  673. package/dist/utils/lifecycles.mjs +5 -6
  674. package/dist/utils/lifecycles.mjs.map +1 -1
  675. package/dist/utils/load-config-file.js +40 -38
  676. package/dist/utils/load-config-file.js.map +1 -1
  677. package/dist/utils/load-config-file.mjs +39 -36
  678. package/dist/utils/load-config-file.mjs.map +1 -1
  679. package/dist/utils/load-files.js +40 -34
  680. package/dist/utils/load-files.js.map +1 -1
  681. package/dist/utils/load-files.mjs +39 -31
  682. package/dist/utils/load-files.mjs.map +1 -1
  683. package/dist/utils/open-browser.js +8 -8
  684. package/dist/utils/open-browser.js.map +1 -1
  685. package/dist/utils/open-browser.mjs +7 -7
  686. package/dist/utils/open-browser.mjs.map +1 -1
  687. package/dist/utils/resolve-working-dirs.js +23 -10
  688. package/dist/utils/resolve-working-dirs.js.map +1 -1
  689. package/dist/utils/resolve-working-dirs.mjs +22 -9
  690. package/dist/utils/resolve-working-dirs.mjs.map +1 -1
  691. package/dist/utils/signals.js +20 -14
  692. package/dist/utils/signals.js.map +1 -1
  693. package/dist/utils/signals.mjs +19 -15
  694. package/dist/utils/signals.mjs.map +1 -1
  695. package/dist/utils/startup-logger.js +107 -83
  696. package/dist/utils/startup-logger.js.map +1 -1
  697. package/dist/utils/startup-logger.mjs +106 -80
  698. package/dist/utils/startup-logger.mjs.map +1 -1
  699. package/dist/utils/transform-content-types-to-models.d.ts +1 -0
  700. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  701. package/dist/utils/transform-content-types-to-models.js +350 -261
  702. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  703. package/dist/utils/transform-content-types-to-models.mjs +349 -269
  704. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  705. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  706. package/dist/utils/update-notifier/index.js +68 -73
  707. package/dist/utils/update-notifier/index.js.map +1 -1
  708. package/dist/utils/update-notifier/index.mjs +67 -67
  709. package/dist/utils/update-notifier/index.mjs.map +1 -1
  710. package/package.json +25 -26
package/dist/ee/index.mjs CHANGED
@@ -1,159 +1,216 @@
1
- import { pick, isEqual } from "lodash/fp";
2
- import { readLicense, verifyLicense, LicenseCheckError, fetchLicense } from "./license.mjs";
3
- import { shiftCronExpression } from "../utils/cron.mjs";
4
- const ONE_MINUTE = 1e3 * 60;
1
+ import { pick, isEqual } from 'lodash/fp';
2
+ import { createStrapiFetch } from '../utils/fetch.mjs';
3
+ import { readLicense, verifyLicense, LICENSE_REGISTRY_URI, LicenseCheckError, fetchLicense } from './license.mjs';
4
+ import { shiftCronExpression } from '../utils/cron.mjs';
5
+
6
+ const ONE_MINUTE = 1000 * 60;
5
7
  const ee = {
6
- enabled: false,
7
- licenseInfo: {}
8
+ enabled: false,
9
+ licenseInfo: {
10
+ isTrial: false
11
+ }
8
12
  };
9
- const disable = (message) => {
10
- const shouldEmitEvent = ee.enabled !== false;
11
- ee.logger?.warn(`${message} Switching to CE.`);
12
- ee.licenseInfo = pick("licenseKey", ee.licenseInfo);
13
- ee.enabled = false;
14
- if (shouldEmitEvent) {
15
- strapi.eventHub.emit("ee.disable");
16
- }
13
+ const disable = (message)=>{
14
+ // Prevent emitting ee.disable if it was already disabled
15
+ const shouldEmitEvent = ee.enabled !== false;
16
+ ee.logger?.warn(`${message} Switching to CE.`);
17
+ // Only keep the license key and isTrial for potential re-enabling during a later check
18
+ ee.licenseInfo = pick([
19
+ 'licenseKey',
20
+ 'isTrial'
21
+ ], ee.licenseInfo);
22
+ ee.licenseInfo.isTrial = false;
23
+ ee.enabled = false;
24
+ if (shouldEmitEvent) {
25
+ // Notify EE features that they should be disabled
26
+ strapi.eventHub.emit('ee.disable');
27
+ }
17
28
  };
18
- const enable = () => {
19
- const shouldEmitEvent = ee.enabled !== true;
20
- ee.enabled = true;
21
- if (shouldEmitEvent) {
22
- strapi.eventHub.emit("ee.enable");
23
- }
29
+ const enable = ()=>{
30
+ // Prevent emitting ee.enable if it was already enabled
31
+ const shouldEmitEvent = ee.enabled !== true;
32
+ ee.enabled = true;
33
+ if (shouldEmitEvent) {
34
+ // Notify EE features that they should be disabled
35
+ strapi.eventHub.emit('ee.enable');
36
+ }
24
37
  };
25
38
  let initialized = false;
26
- const init = (licenseDir, logger) => {
27
- if (initialized) {
28
- return;
29
- }
30
- initialized = true;
31
- ee.logger = logger;
32
- if (process.env.STRAPI_DISABLE_EE?.toLowerCase() === "true") {
33
- return;
34
- }
35
- try {
36
- const license = process.env.STRAPI_LICENSE || readLicense(licenseDir);
37
- if (license) {
38
- ee.licenseInfo = verifyLicense(license);
39
- enable();
39
+ /**
40
+ * Optimistically enable EE if the format of the license is valid, only run once.
41
+ */ const init = (licenseDir, logger)=>{
42
+ if (initialized) {
43
+ return;
40
44
  }
41
- } catch (error) {
42
- if (error instanceof Error) {
43
- disable(error.message);
44
- } else {
45
- disable("Invalid license.");
46
- }
47
- }
48
- };
49
- const onlineUpdate = async ({ strapi: strapi2 }) => {
50
- const { get: get2, commit, rollback } = await strapi2.db?.transaction();
51
- const transaction = get2();
52
- try {
53
- const storedInfo = await strapi2.db?.queryBuilder("strapi::core-store").where({ key: "ee_information" }).select("value").first().transacting(transaction).forUpdate().execute().then((result2) => result2 ? JSON.parse(result2.value) : result2);
54
- const shouldContactRegistry = (storedInfo?.lastCheckAt ?? 0) < Date.now() - ONE_MINUTE;
55
- const result = { lastCheckAt: Date.now() };
56
- const fallback = (error) => {
57
- if (error instanceof LicenseCheckError && error.shouldFallback && storedInfo?.license) {
58
- ee.logger?.warn(
59
- `${error.message} The last stored one will be used as a potential fallback.`
60
- );
61
- return storedInfo.license;
62
- }
63
- result.error = error.message;
64
- disable(error.message);
65
- };
66
- if (!ee?.licenseInfo?.licenseKey) {
67
- throw new Error("Missing license key.");
45
+ initialized = true;
46
+ ee.logger = logger;
47
+ if (process.env.STRAPI_DISABLE_EE?.toLowerCase() === 'true') {
48
+ return;
68
49
  }
69
- const license = shouldContactRegistry ? await fetchLicense({ strapi: strapi2 }, ee.licenseInfo.licenseKey, strapi2.config.get("uuid")).catch(
70
- fallback
71
- ) : storedInfo.license;
72
- if (license) {
73
- try {
74
- const newLicenseInfo = verifyLicense(license);
75
- const licenseInfoChanged = !isEqual(newLicenseInfo.features, ee.licenseInfo.features) || newLicenseInfo.seats !== ee.licenseInfo.seats || newLicenseInfo.type !== ee.licenseInfo.type;
76
- ee.licenseInfo = newLicenseInfo;
77
- const wasEnabled = ee.enabled;
78
- validateInfo();
79
- if (licenseInfoChanged && wasEnabled) {
80
- strapi2.eventHub.emit("ee.update");
50
+ try {
51
+ const license = process.env.STRAPI_LICENSE || readLicense(licenseDir);
52
+ if (license) {
53
+ ee.licenseInfo = verifyLicense(license);
54
+ enable();
81
55
  }
82
- } catch (error) {
56
+ } catch (error) {
83
57
  if (error instanceof Error) {
84
- disable(error.message);
58
+ disable(error.message);
85
59
  } else {
86
- disable("Invalid license.");
60
+ disable('Invalid license.');
61
+ }
62
+ }
63
+ };
64
+ /**
65
+ * Contact the license registry to update the license to its latest state.
66
+ *
67
+ * Store the result in database to avoid unecessary requests, and will fallback to that in case of a network failure.
68
+ */ const onlineUpdate = async ({ strapi: strapi1 })=>{
69
+ const { get, commit, rollback } = await strapi1.db?.transaction();
70
+ const transaction = get();
71
+ try {
72
+ const storedInfo = await strapi1.db?.queryBuilder('strapi::core-store').where({
73
+ key: 'ee_information'
74
+ }).select('value').first().transacting(transaction).forUpdate().execute().then((result)=>result ? JSON.parse(result.value) : result);
75
+ const shouldContactRegistry = (storedInfo?.lastCheckAt ?? 0) < Date.now() - ONE_MINUTE;
76
+ const result = {
77
+ lastCheckAt: Date.now()
78
+ };
79
+ const fallback = (error)=>{
80
+ if (error instanceof LicenseCheckError && error.shouldFallback && storedInfo?.license) {
81
+ ee.logger?.warn(`${error.message} The last stored one will be used as a potential fallback.`);
82
+ return storedInfo.license;
83
+ }
84
+ result.error = error.message;
85
+ disable(error.message);
86
+ };
87
+ if (!ee?.licenseInfo?.licenseKey) {
88
+ throw new Error('Missing license key.');
89
+ }
90
+ const license = shouldContactRegistry ? await fetchLicense({
91
+ strapi: strapi1
92
+ }, ee.licenseInfo.licenseKey, strapi1.config.get('uuid')).catch(fallback) : storedInfo.license;
93
+ if (license) {
94
+ try {
95
+ // Verify license and check if its info changed
96
+ const newLicenseInfo = verifyLicense(license);
97
+ const licenseInfoChanged = !isEqual(newLicenseInfo.features, ee.licenseInfo.features) || newLicenseInfo.seats !== ee.licenseInfo.seats || newLicenseInfo.type !== ee.licenseInfo.type;
98
+ // Store the new license info
99
+ ee.licenseInfo = newLicenseInfo;
100
+ const wasEnabled = ee.enabled;
101
+ validateInfo();
102
+ // Notify EE features
103
+ if (licenseInfoChanged && wasEnabled) {
104
+ strapi1.eventHub.emit('ee.update');
105
+ }
106
+ } catch (error) {
107
+ if (error instanceof Error) {
108
+ disable(error.message);
109
+ } else {
110
+ disable('Invalid license.');
111
+ }
112
+ }
113
+ } else if (!shouldContactRegistry) {
114
+ disable(storedInfo.error);
87
115
  }
88
- }
89
- } else if (!shouldContactRegistry) {
90
- disable(storedInfo.error);
116
+ if (shouldContactRegistry) {
117
+ result.license = license ?? null;
118
+ const query = strapi1.db.queryBuilder('strapi::core-store').transacting(transaction);
119
+ if (!storedInfo) {
120
+ query.insert({
121
+ key: 'ee_information',
122
+ value: JSON.stringify(result)
123
+ });
124
+ } else {
125
+ query.update({
126
+ value: JSON.stringify(result)
127
+ }).where({
128
+ key: 'ee_information'
129
+ });
130
+ }
131
+ await query.execute();
132
+ }
133
+ await commit();
134
+ } catch (error) {
135
+ // Example of errors: SQLite does not support FOR UPDATE
136
+ await rollback();
137
+ }
138
+ };
139
+ const validateInfo = ()=>{
140
+ if (typeof ee.licenseInfo.expireAt === 'undefined') {
141
+ throw new Error('Missing license key.');
91
142
  }
92
- if (shouldContactRegistry) {
93
- result.license = license ?? null;
94
- const query = strapi2.db.queryBuilder("strapi::core-store").transacting(transaction);
95
- if (!storedInfo) {
96
- query.insert({ key: "ee_information", value: JSON.stringify(result) });
97
- } else {
98
- query.update({ value: JSON.stringify(result) }).where({ key: "ee_information" });
99
- }
100
- await query.execute();
143
+ const expirationTime = new Date(ee.licenseInfo.expireAt).getTime();
144
+ if (expirationTime < new Date().getTime()) {
145
+ return disable('License expired.');
101
146
  }
102
- await commit();
103
- } catch (error) {
104
- await rollback();
105
- }
147
+ enable();
106
148
  };
107
- const validateInfo = () => {
108
- if (typeof ee.licenseInfo.expireAt === "undefined") {
109
- throw new Error("Missing license key.");
110
- }
111
- const expirationTime = new Date(ee.licenseInfo.expireAt).getTime();
112
- if (expirationTime < (/* @__PURE__ */ new Date()).getTime()) {
113
- return disable("License expired.");
114
- }
115
- enable();
149
+ const checkLicense = async ({ strapi: strapi1 })=>{
150
+ const shouldStayOffline = ee.licenseInfo.type === 'gold' && // This env variable support is temporarily used to ease the migration between online vs offline
151
+ process.env.STRAPI_DISABLE_LICENSE_PING?.toLowerCase() === 'true';
152
+ if (!shouldStayOffline) {
153
+ await onlineUpdate({
154
+ strapi: strapi1
155
+ });
156
+ strapi1.cron.add({
157
+ onlineUpdate: {
158
+ task: ()=>onlineUpdate({
159
+ strapi: strapi1
160
+ }),
161
+ options: shiftCronExpression('0 0 */12 * * *')
162
+ }
163
+ });
164
+ } else {
165
+ if (!ee.licenseInfo.expireAt) {
166
+ return disable('Your license does not have offline support.');
167
+ }
168
+ validateInfo();
169
+ }
116
170
  };
117
- const checkLicense = async ({ strapi: strapi2 }) => {
118
- const shouldStayOffline = ee.licenseInfo.type === "gold" && // This env variable support is temporarily used to ease the migration between online vs offline
119
- process.env.STRAPI_DISABLE_LICENSE_PING?.toLowerCase() === "true";
120
- if (!shouldStayOffline) {
121
- await onlineUpdate({ strapi: strapi2 });
122
- strapi2.cron.add({
123
- onlineUpdate: {
124
- task: () => onlineUpdate({ strapi: strapi2 }),
125
- options: shiftCronExpression("0 0 */12 * * *")
126
- }
171
+ const getTrialEndDate = async ({ strapi: strapi1 })=>{
172
+ const silentFetch = createStrapiFetch(strapi1, {
173
+ logs: false
127
174
  });
128
- } else {
129
- if (!ee.licenseInfo.expireAt) {
130
- return disable("Your license does not have offline support.");
131
- }
132
- validateInfo();
133
- }
175
+ const res = await silentFetch(`${LICENSE_REGISTRY_URI}/api/licenses/${ee.licenseInfo.licenseKey}/trial-countdown`, {
176
+ method: 'GET',
177
+ headers: {
178
+ 'Content-Type': 'application/json'
179
+ }
180
+ }).catch(()=>{
181
+ throw new LicenseCheckError('Could not proceed to retrieve the trial time left for your license.', true);
182
+ });
183
+ const data = await res.json();
184
+ return data;
134
185
  };
135
- const list = () => {
136
- return ee.licenseInfo.features?.map(
137
- (feature) => typeof feature === "object" ? feature : { name: feature }
138
- ) || [];
186
+ const list = ()=>{
187
+ return ee.licenseInfo.features?.map((feature)=>typeof feature === 'object' ? feature : {
188
+ name: feature
189
+ }) || [];
139
190
  };
140
- const get = (featureName) => list().find((feature) => feature.name === featureName);
141
- const index = Object.freeze({
142
- init,
143
- checkLicense,
144
- get isEE() {
145
- return ee.enabled;
146
- },
147
- get seats() {
148
- return ee.licenseInfo.seats;
149
- },
150
- features: Object.freeze({
151
- list,
152
- get,
153
- isEnabled: (featureName) => get(featureName) !== void 0
154
- })
191
+ const get = (featureName)=>list().find((feature)=>feature.name === featureName);
192
+ var index = Object.freeze({
193
+ init,
194
+ checkLicense,
195
+ getTrialEndDate,
196
+ get isEE () {
197
+ return ee.enabled;
198
+ },
199
+ get seats () {
200
+ return ee.licenseInfo.seats;
201
+ },
202
+ get type () {
203
+ return ee.licenseInfo.type;
204
+ },
205
+ get isTrial () {
206
+ return ee.licenseInfo.isTrial;
207
+ },
208
+ features: Object.freeze({
209
+ list,
210
+ get,
211
+ isEnabled: (featureName)=>get(featureName) !== undefined
212
+ })
155
213
  });
156
- export {
157
- index as default
158
- };
214
+
215
+ export { index as default };
159
216
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","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 features: Object.freeze({\n list,\n get,\n isEnabled: (featureName: string) => get(featureName) !== undefined,\n }),\n});\n"],"names":["strapi","get","result"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","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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"}
@@ -1,6 +1,7 @@
1
1
  import type { Core } from '@strapi/types';
2
2
  interface LicenseInfo {
3
3
  type: 'bronze' | 'silver' | 'gold';
4
+ isTrial: boolean;
4
5
  expireAt?: string;
5
6
  seats?: number;
6
7
  features?: Array<{
@@ -8,6 +9,7 @@ interface LicenseInfo {
8
9
  options?: Record<string, unknown>;
9
10
  }>;
10
11
  }
12
+ declare const LICENSE_REGISTRY_URI = "https://license.strapi.io";
11
13
  declare class LicenseCheckError extends Error {
12
14
  shouldFallback: boolean;
13
15
  constructor(message: string, shouldFallback?: boolean);
@@ -17,5 +19,5 @@ declare const verifyLicense: (license: string) => LicenseInfo;
17
19
  declare const fetchLicense: ({ strapi }: {
18
20
  strapi: Core.Strapi;
19
21
  }, key: string, projectId: string) => Promise<any>;
20
- export { readLicense, verifyLicense, fetchLicense, LicenseCheckError };
22
+ export { readLicense, verifyLicense, fetchLicense, LicenseCheckError, LICENSE_REGISTRY_URI };
21
23
  //# sourceMappingURL=license.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../src/ee/license.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,UAAU,WAAW;IACnB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CACvE;AAkBD,cAAM,iBAAkB,SAAQ,KAAK;IACnC,cAAc,UAAS;gBAEX,OAAO,EAAE,MAAM,EAAE,cAAc,UAAQ;CAKpD;AAED,QAAA,MAAM,WAAW,cAAe,MAAM,uBASrC,CAAC;AAEF,QAAA,MAAM,aAAa,YAAa,MAAM,gBA2BrC,CAAC;AAMF,QAAA,MAAM,YAAY,eACJ;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,OAC9B,MAAM,aACA,MAAM,iBA4BlB,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../src/ee/license.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,UAAU,WAAW;IACnB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CACvE;AAiBD,QAAA,MAAM,oBAAoB,8BAA8B,CAAC;AAIzD,cAAM,iBAAkB,SAAQ,KAAK;IACnC,cAAc,UAAS;gBAEX,OAAO,EAAE,MAAM,EAAE,cAAc,UAAQ;CAKpD;AAED,QAAA,MAAM,WAAW,cAAe,MAAM,uBASrC,CAAC;AAEF,QAAA,MAAM,aAAa,YAAa,MAAM,gBA+BrC,CAAC;AAMF,QAAA,MAAM,YAAY,eACJ;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,OAC9B,MAAM,aACA,MAAM,iBAkClB,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,89 +1,119 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const fs = require("fs");
4
- const path = require("path");
5
- const crypto = require("crypto");
6
- const strapiUtils = require("@strapi/utils");
7
- const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
8
- const fs__default = /* @__PURE__ */ _interopDefault(fs);
9
- const crypto__default = /* @__PURE__ */ _interopDefault(crypto);
1
+ 'use strict';
2
+
3
+ var fs = require('fs');
4
+ var path = require('path');
5
+ var crypto = require('crypto');
6
+ var strapiUtils = require('@strapi/utils');
7
+
10
8
  const DEFAULT_FEATURES = {
11
- bronze: [],
12
- silver: [],
13
- gold: [
14
- { name: "sso" },
15
- // Set a null retention duration to allow the user to override it
16
- // The default of 90 days is set in the audit logs service
17
- { name: "audit-logs", options: { retentionDays: null } },
18
- { name: "review-workflows" },
19
- { name: "cms-content-releases" },
20
- { name: "cms-content-history", options: { retentionDays: 99999 } }
21
- ]
9
+ bronze: [],
10
+ silver: [],
11
+ gold: [
12
+ {
13
+ name: 'sso'
14
+ },
15
+ // Set a null retention duration to allow the user to override it
16
+ // The default of 90 days is set in the audit logs service
17
+ {
18
+ name: 'audit-logs',
19
+ options: {
20
+ retentionDays: null
21
+ }
22
+ },
23
+ {
24
+ name: 'review-workflows'
25
+ },
26
+ {
27
+ name: 'cms-content-releases'
28
+ },
29
+ {
30
+ name: 'cms-content-history',
31
+ options: {
32
+ retentionDays: 99999
33
+ }
34
+ },
35
+ {
36
+ name: 'cms-advanced-preview'
37
+ }
38
+ ]
22
39
  };
23
- const publicKey = fs__default.default.readFileSync(path.resolve(__dirname, "../../resources/key.pub"));
40
+ const LICENSE_REGISTRY_URI = 'https://license.strapi.io';
41
+ const publicKey = fs.readFileSync(path.resolve(__dirname, '../../resources/key.pub'));
24
42
  class LicenseCheckError extends Error {
25
- shouldFallback = false;
26
- constructor(message, shouldFallback = false) {
27
- super(message);
28
- this.shouldFallback = shouldFallback;
29
- }
43
+ constructor(message, shouldFallback = false){
44
+ super(message);
45
+ this.shouldFallback = false;
46
+ this.shouldFallback = shouldFallback;
47
+ }
30
48
  }
31
- const readLicense = (directory) => {
32
- try {
33
- const path$1 = path.join(directory, "license.txt");
34
- return fs__default.default.readFileSync(path$1).toString();
35
- } catch (error) {
36
- if (typeof error === "object" && error !== null && "code" in error && error.code !== "ENOENT") {
37
- throw Error("License file not readable, review its format and access rules.");
49
+ const readLicense = (directory)=>{
50
+ try {
51
+ const path$1 = path.join(directory, 'license.txt');
52
+ return fs.readFileSync(path$1).toString();
53
+ } catch (error) {
54
+ if (typeof error === 'object' && error !== null && 'code' in error && error.code !== 'ENOENT') {
55
+ throw Error('License file not readable, review its format and access rules.');
56
+ }
38
57
  }
39
- }
40
58
  };
41
- const verifyLicense = (license) => {
42
- const [signature, base64Content] = Buffer.from(license, "base64").toString().split("\n");
43
- if (!signature || !base64Content) {
44
- throw new Error("Invalid license.");
45
- }
46
- const stringifiedContent = Buffer.from(base64Content, "base64").toString();
47
- const verify = crypto__default.default.createVerify("RSA-SHA256");
48
- verify.update(stringifiedContent);
49
- verify.end();
50
- const verified = verify.verify(publicKey, signature, "base64");
51
- if (!verified) {
52
- throw new Error("Invalid license.");
53
- }
54
- const licenseInfo = JSON.parse(stringifiedContent);
55
- if (!licenseInfo.features) {
56
- licenseInfo.features = DEFAULT_FEATURES[licenseInfo.type];
57
- }
58
- Object.freeze(licenseInfo.features);
59
- return licenseInfo;
59
+ const verifyLicense = (license)=>{
60
+ const [signature, base64Content] = Buffer.from(license, 'base64').toString().split('\n');
61
+ if (!signature || !base64Content) {
62
+ throw new Error('Invalid license.');
63
+ }
64
+ const stringifiedContent = Buffer.from(base64Content, 'base64').toString();
65
+ const verify = crypto.createVerify('RSA-SHA256');
66
+ verify.update(stringifiedContent);
67
+ verify.end();
68
+ const verified = verify.verify(publicKey, signature, 'base64');
69
+ if (!verified) {
70
+ throw new Error('Invalid license.');
71
+ }
72
+ const licenseInfo = JSON.parse(stringifiedContent);
73
+ if (!licenseInfo.features) {
74
+ licenseInfo.features = DEFAULT_FEATURES[licenseInfo.type];
75
+ }
76
+ if (!licenseInfo.isTrial) {
77
+ licenseInfo.isTrial = false;
78
+ }
79
+ Object.freeze(licenseInfo.features);
80
+ return licenseInfo;
60
81
  };
61
- const throwError = () => {
62
- throw new LicenseCheckError("Could not proceed to the online validation of your license.", true);
82
+ const throwError = ()=>{
83
+ throw new LicenseCheckError('Could not proceed to the online validation of your license.', true);
63
84
  };
64
- const fetchLicense = async ({ strapi }, key, projectId) => {
65
- const response = await strapi.fetch(`https://license.strapi.io/api/licenses/validate`, {
66
- method: "POST",
67
- headers: { "Content-Type": "application/json" },
68
- body: JSON.stringify({ key, projectId, deviceId: strapiUtils.machineID() })
69
- }).catch(throwError);
70
- const contentType = response.headers.get("Content-Type");
71
- if (contentType?.includes("application/json")) {
72
- const { data, error } = await response.json();
73
- switch (response.status) {
74
- case 200:
75
- return data.license;
76
- case 400:
77
- throw new LicenseCheckError(error.message);
78
- case 404:
79
- throw new LicenseCheckError("The license used does not exists.");
80
- default:
85
+ const fetchLicense = async ({ strapi }, key, projectId)=>{
86
+ const { installId: installIdFromPackageJson } = strapi.config;
87
+ const response = await strapi.fetch(`${LICENSE_REGISTRY_URI}/api/licenses/validate`, {
88
+ method: 'POST',
89
+ headers: {
90
+ 'Content-Type': 'application/json'
91
+ },
92
+ body: JSON.stringify({
93
+ key,
94
+ projectId,
95
+ deviceId: strapiUtils.generateInstallId(projectId, installIdFromPackageJson)
96
+ })
97
+ }).catch(throwError);
98
+ const contentType = response.headers.get('Content-Type');
99
+ if (contentType?.includes('application/json')) {
100
+ const { data, error } = await response.json();
101
+ switch(response.status){
102
+ case 200:
103
+ return data.license;
104
+ case 400:
105
+ throw new LicenseCheckError(error.message);
106
+ case 404:
107
+ throw new LicenseCheckError('The license used does not exists.');
108
+ default:
109
+ throwError();
110
+ }
111
+ } else {
81
112
  throwError();
82
113
  }
83
- } else {
84
- throwError();
85
- }
86
114
  };
115
+
116
+ exports.LICENSE_REGISTRY_URI = LICENSE_REGISTRY_URI;
87
117
  exports.LicenseCheckError = LicenseCheckError;
88
118
  exports.fetchLicense = fetchLicense;
89
119
  exports.readLicense = readLicense;