@strapi/core 0.0.0-experimental.9a7831c04ba07c03200a7d90706d832f63c0f3a9 → 0.0.0-experimental.9b368058b6f2b1a6af59c16e70b760d267c37afb

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 (828) hide show
  1. package/dist/Strapi.d.ts +1 -0
  2. package/dist/Strapi.d.ts.map +1 -1
  3. package/dist/Strapi.js +448 -403
  4. package/dist/Strapi.js.map +1 -1
  5. package/dist/Strapi.mjs +447 -402
  6. package/dist/Strapi.mjs.map +1 -1
  7. package/dist/compile.js +23 -14
  8. package/dist/compile.js.map +1 -1
  9. package/dist/compile.mjs +22 -14
  10. package/dist/compile.mjs.map +1 -1
  11. package/dist/configuration/config-loader.js +110 -97
  12. package/dist/configuration/config-loader.js.map +1 -1
  13. package/dist/configuration/config-loader.mjs +109 -96
  14. package/dist/configuration/config-loader.mjs.map +1 -1
  15. package/dist/configuration/get-dirs.js +31 -29
  16. package/dist/configuration/get-dirs.js.map +1 -1
  17. package/dist/configuration/get-dirs.mjs +30 -30
  18. package/dist/configuration/get-dirs.mjs.map +1 -1
  19. package/dist/configuration/index.d.ts +1 -0
  20. package/dist/configuration/index.d.ts.map +1 -1
  21. package/dist/configuration/index.js +85 -73
  22. package/dist/configuration/index.js.map +1 -1
  23. package/dist/configuration/index.mjs +84 -69
  24. package/dist/configuration/index.mjs.map +1 -1
  25. package/dist/configuration/urls.d.ts.map +1 -1
  26. package/dist/configuration/urls.js +74 -61
  27. package/dist/configuration/urls.js.map +1 -1
  28. package/dist/configuration/urls.mjs +73 -62
  29. package/dist/configuration/urls.mjs.map +1 -1
  30. package/dist/constants.d.ts +3 -0
  31. package/dist/constants.d.ts.map +1 -0
  32. package/dist/constants.js +6 -0
  33. package/dist/constants.js.map +1 -0
  34. package/dist/constants.mjs +4 -0
  35. package/dist/constants.mjs.map +1 -0
  36. package/dist/container.js +27 -23
  37. package/dist/container.js.map +1 -1
  38. package/dist/container.mjs +26 -24
  39. package/dist/container.mjs.map +1 -1
  40. package/dist/core-api/controller/collection-type.js +77 -76
  41. package/dist/core-api/controller/collection-type.js.map +1 -1
  42. package/dist/core-api/controller/collection-type.mjs +76 -77
  43. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  44. package/dist/core-api/controller/index.d.ts.map +1 -1
  45. package/dist/core-api/controller/index.js +64 -48
  46. package/dist/core-api/controller/index.js.map +1 -1
  47. package/dist/core-api/controller/index.mjs +63 -49
  48. package/dist/core-api/controller/index.mjs.map +1 -1
  49. package/dist/core-api/controller/single-type.js +41 -40
  50. package/dist/core-api/controller/single-type.js.map +1 -1
  51. package/dist/core-api/controller/single-type.mjs +40 -41
  52. package/dist/core-api/controller/single-type.mjs.map +1 -1
  53. package/dist/core-api/controller/transform.d.ts +3 -2
  54. package/dist/core-api/controller/transform.d.ts.map +1 -1
  55. package/dist/core-api/controller/transform.js +83 -64
  56. package/dist/core-api/controller/transform.js.map +1 -1
  57. package/dist/core-api/controller/transform.mjs +82 -65
  58. package/dist/core-api/controller/transform.mjs.map +1 -1
  59. package/dist/core-api/routes/index.d.ts +4 -22
  60. package/dist/core-api/routes/index.d.ts.map +1 -1
  61. package/dist/core-api/routes/index.js +205 -61
  62. package/dist/core-api/routes/index.js.map +1 -1
  63. package/dist/core-api/routes/index.mjs +185 -62
  64. package/dist/core-api/routes/index.mjs.map +1 -1
  65. package/dist/core-api/routes/validation/attributes.d.ts +244 -0
  66. package/dist/core-api/routes/validation/attributes.d.ts.map +1 -0
  67. package/dist/core-api/routes/validation/attributes.js +560 -0
  68. package/dist/core-api/routes/validation/attributes.js.map +1 -0
  69. package/dist/core-api/routes/validation/attributes.mjs +521 -0
  70. package/dist/core-api/routes/validation/attributes.mjs.map +1 -0
  71. package/dist/core-api/routes/validation/common.d.ts +105 -0
  72. package/dist/core-api/routes/validation/common.d.ts.map +1 -0
  73. package/dist/core-api/routes/validation/common.js +116 -0
  74. package/dist/core-api/routes/validation/common.js.map +1 -0
  75. package/dist/core-api/routes/validation/common.mjs +95 -0
  76. package/dist/core-api/routes/validation/common.mjs.map +1 -0
  77. package/dist/core-api/routes/validation/component.d.ts +34 -0
  78. package/dist/core-api/routes/validation/component.d.ts.map +1 -0
  79. package/dist/core-api/routes/validation/component.js +45 -0
  80. package/dist/core-api/routes/validation/component.js.map +1 -0
  81. package/dist/core-api/routes/validation/component.mjs +43 -0
  82. package/dist/core-api/routes/validation/component.mjs.map +1 -0
  83. package/dist/core-api/routes/validation/constants.d.ts +8 -0
  84. package/dist/core-api/routes/validation/constants.d.ts.map +1 -0
  85. package/dist/core-api/routes/validation/constants.js +18 -0
  86. package/dist/core-api/routes/validation/constants.js.map +1 -0
  87. package/dist/core-api/routes/validation/constants.mjs +16 -0
  88. package/dist/core-api/routes/validation/constants.mjs.map +1 -0
  89. package/dist/core-api/routes/validation/content-type.d.ts +128 -0
  90. package/dist/core-api/routes/validation/content-type.d.ts.map +1 -0
  91. package/dist/core-api/routes/validation/content-type.js +201 -0
  92. package/dist/core-api/routes/validation/content-type.js.map +1 -0
  93. package/dist/core-api/routes/validation/content-type.mjs +180 -0
  94. package/dist/core-api/routes/validation/content-type.mjs.map +1 -0
  95. package/dist/core-api/routes/validation/index.d.ts +5 -0
  96. package/dist/core-api/routes/validation/index.d.ts.map +1 -0
  97. package/dist/core-api/routes/validation/mappers.d.ts +105 -0
  98. package/dist/core-api/routes/validation/mappers.d.ts.map +1 -0
  99. package/dist/core-api/routes/validation/mappers.js +273 -0
  100. package/dist/core-api/routes/validation/mappers.js.map +1 -0
  101. package/dist/core-api/routes/validation/mappers.mjs +249 -0
  102. package/dist/core-api/routes/validation/mappers.mjs.map +1 -0
  103. package/dist/core-api/routes/validation/utils.d.ts +47 -0
  104. package/dist/core-api/routes/validation/utils.d.ts.map +1 -0
  105. package/dist/core-api/routes/validation/utils.js +128 -0
  106. package/dist/core-api/routes/validation/utils.js.map +1 -0
  107. package/dist/core-api/routes/validation/utils.mjs +106 -0
  108. package/dist/core-api/routes/validation/utils.mjs.map +1 -0
  109. package/dist/core-api/service/collection-type.js +73 -60
  110. package/dist/core-api/service/collection-type.js.map +1 -1
  111. package/dist/core-api/service/collection-type.mjs +72 -62
  112. package/dist/core-api/service/collection-type.mjs.map +1 -1
  113. package/dist/core-api/service/core-service.js +9 -8
  114. package/dist/core-api/service/core-service.js.map +1 -1
  115. package/dist/core-api/service/core-service.mjs +8 -9
  116. package/dist/core-api/service/core-service.mjs.map +1 -1
  117. package/dist/core-api/service/index.js +13 -13
  118. package/dist/core-api/service/index.js.map +1 -1
  119. package/dist/core-api/service/index.mjs +12 -14
  120. package/dist/core-api/service/index.mjs.map +1 -1
  121. package/dist/core-api/service/pagination.js +69 -43
  122. package/dist/core-api/service/pagination.js.map +1 -1
  123. package/dist/core-api/service/pagination.mjs +68 -47
  124. package/dist/core-api/service/pagination.mjs.map +1 -1
  125. package/dist/core-api/service/single-type.js +43 -39
  126. package/dist/core-api/service/single-type.js.map +1 -1
  127. package/dist/core-api/service/single-type.mjs +42 -41
  128. package/dist/core-api/service/single-type.mjs.map +1 -1
  129. package/dist/domain/content-type/index.d.ts.map +1 -1
  130. package/dist/domain/content-type/index.js +110 -99
  131. package/dist/domain/content-type/index.js.map +1 -1
  132. package/dist/domain/content-type/index.mjs +109 -99
  133. package/dist/domain/content-type/index.mjs.map +1 -1
  134. package/dist/domain/content-type/validator.js +84 -69
  135. package/dist/domain/content-type/validator.js.map +1 -1
  136. package/dist/domain/content-type/validator.mjs +83 -68
  137. package/dist/domain/content-type/validator.mjs.map +1 -1
  138. package/dist/domain/module/index.d.ts.map +1 -1
  139. package/dist/domain/module/index.js +112 -100
  140. package/dist/domain/module/index.js.map +1 -1
  141. package/dist/domain/module/index.mjs +111 -99
  142. package/dist/domain/module/index.mjs.map +1 -1
  143. package/dist/domain/module/validation.js +25 -20
  144. package/dist/domain/module/validation.js.map +1 -1
  145. package/dist/domain/module/validation.mjs +24 -21
  146. package/dist/domain/module/validation.mjs.map +1 -1
  147. package/dist/ee/index.d.ts +7 -0
  148. package/dist/ee/index.d.ts.map +1 -1
  149. package/dist/ee/index.js +197 -137
  150. package/dist/ee/index.js.map +1 -1
  151. package/dist/ee/index.mjs +196 -139
  152. package/dist/ee/index.mjs.map +1 -1
  153. package/dist/ee/license.d.ts +3 -1
  154. package/dist/ee/license.d.ts.map +1 -1
  155. package/dist/ee/license.js +105 -75
  156. package/dist/ee/license.js.map +1 -1
  157. package/dist/ee/license.mjs +103 -76
  158. package/dist/ee/license.mjs.map +1 -1
  159. package/dist/factories.d.ts +3 -1
  160. package/dist/factories.d.ts.map +1 -1
  161. package/dist/factories.js +80 -67
  162. package/dist/factories.js.map +1 -1
  163. package/dist/factories.mjs +77 -70
  164. package/dist/factories.mjs.map +1 -1
  165. package/dist/index.js +29 -26
  166. package/dist/index.js.map +1 -1
  167. package/dist/index.mjs +29 -29
  168. package/dist/index.mjs.map +1 -1
  169. package/dist/loaders/admin.d.ts.map +1 -1
  170. package/dist/loaders/admin.js +21 -20
  171. package/dist/loaders/admin.js.map +1 -1
  172. package/dist/loaders/admin.mjs +20 -20
  173. package/dist/loaders/admin.mjs.map +1 -1
  174. package/dist/loaders/apis.js +143 -120
  175. package/dist/loaders/apis.js.map +1 -1
  176. package/dist/loaders/apis.mjs +142 -119
  177. package/dist/loaders/apis.mjs.map +1 -1
  178. package/dist/loaders/components.js +33 -34
  179. package/dist/loaders/components.js.map +1 -1
  180. package/dist/loaders/components.mjs +32 -34
  181. package/dist/loaders/components.mjs.map +1 -1
  182. package/dist/loaders/index.js +22 -20
  183. package/dist/loaders/index.js.map +1 -1
  184. package/dist/loaders/index.mjs +21 -21
  185. package/dist/loaders/index.mjs.map +1 -1
  186. package/dist/loaders/middlewares.js +29 -25
  187. package/dist/loaders/middlewares.js.map +1 -1
  188. package/dist/loaders/middlewares.mjs +28 -25
  189. package/dist/loaders/middlewares.mjs.map +1 -1
  190. package/dist/loaders/plugins/get-enabled-plugins.js +126 -131
  191. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  192. package/dist/loaders/plugins/get-enabled-plugins.mjs +125 -108
  193. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  194. package/dist/loaders/plugins/get-user-plugins-config.js +25 -24
  195. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  196. package/dist/loaders/plugins/get-user-plugins-config.mjs +24 -23
  197. package/dist/loaders/plugins/get-user-plugins-config.mjs.map +1 -1
  198. package/dist/loaders/plugins/index.js +132 -122
  199. package/dist/loaders/plugins/index.js.map +1 -1
  200. package/dist/loaders/plugins/index.mjs +121 -112
  201. package/dist/loaders/plugins/index.mjs.map +1 -1
  202. package/dist/loaders/policies.js +24 -20
  203. package/dist/loaders/policies.js.map +1 -1
  204. package/dist/loaders/policies.mjs +23 -20
  205. package/dist/loaders/policies.mjs.map +1 -1
  206. package/dist/loaders/sanitizers.js +10 -4
  207. package/dist/loaders/sanitizers.js.map +1 -1
  208. package/dist/loaders/sanitizers.mjs +9 -6
  209. package/dist/loaders/sanitizers.mjs.map +1 -1
  210. package/dist/loaders/src-index.js +35 -27
  211. package/dist/loaders/src-index.js.map +1 -1
  212. package/dist/loaders/src-index.mjs +34 -29
  213. package/dist/loaders/src-index.mjs.map +1 -1
  214. package/dist/loaders/validators.js +9 -4
  215. package/dist/loaders/validators.js.map +1 -1
  216. package/dist/loaders/validators.mjs +8 -6
  217. package/dist/loaders/validators.mjs.map +1 -1
  218. package/dist/middlewares/body.d.ts.map +1 -1
  219. package/dist/middlewares/body.js +58 -54
  220. package/dist/middlewares/body.js.map +1 -1
  221. package/dist/middlewares/body.mjs +57 -51
  222. package/dist/middlewares/body.mjs.map +1 -1
  223. package/dist/middlewares/compression.js +6 -6
  224. package/dist/middlewares/compression.js.map +1 -1
  225. package/dist/middlewares/compression.mjs +5 -5
  226. package/dist/middlewares/compression.mjs.map +1 -1
  227. package/dist/middlewares/cors.d.ts +9 -1
  228. package/dist/middlewares/cors.d.ts.map +1 -1
  229. package/dist/middlewares/cors.js +81 -48
  230. package/dist/middlewares/cors.js.map +1 -1
  231. package/dist/middlewares/cors.mjs +78 -46
  232. package/dist/middlewares/cors.mjs.map +1 -1
  233. package/dist/middlewares/errors.js +32 -30
  234. package/dist/middlewares/errors.js.map +1 -1
  235. package/dist/middlewares/errors.mjs +31 -31
  236. package/dist/middlewares/errors.mjs.map +1 -1
  237. package/dist/middlewares/favicon.js +27 -17
  238. package/dist/middlewares/favicon.js.map +1 -1
  239. package/dist/middlewares/favicon.mjs +26 -16
  240. package/dist/middlewares/favicon.mjs.map +1 -1
  241. package/dist/middlewares/index.js +32 -30
  242. package/dist/middlewares/index.js.map +1 -1
  243. package/dist/middlewares/index.mjs +31 -31
  244. package/dist/middlewares/index.mjs.map +1 -1
  245. package/dist/middlewares/ip.js +6 -6
  246. package/dist/middlewares/ip.js.map +1 -1
  247. package/dist/middlewares/ip.mjs +5 -5
  248. package/dist/middlewares/ip.mjs.map +1 -1
  249. package/dist/middlewares/logger.js +10 -9
  250. package/dist/middlewares/logger.js.map +1 -1
  251. package/dist/middlewares/logger.mjs +9 -10
  252. package/dist/middlewares/logger.mjs.map +1 -1
  253. package/dist/middlewares/powered-by.js +13 -9
  254. package/dist/middlewares/powered-by.js.map +1 -1
  255. package/dist/middlewares/powered-by.mjs +12 -10
  256. package/dist/middlewares/powered-by.mjs.map +1 -1
  257. package/dist/middlewares/public.js +33 -29
  258. package/dist/middlewares/public.js.map +1 -1
  259. package/dist/middlewares/public.mjs +32 -28
  260. package/dist/middlewares/public.mjs.map +1 -1
  261. package/dist/middlewares/query.js +35 -32
  262. package/dist/middlewares/query.js.map +1 -1
  263. package/dist/middlewares/query.mjs +34 -31
  264. package/dist/middlewares/query.mjs.map +1 -1
  265. package/dist/middlewares/response-time.js +10 -9
  266. package/dist/middlewares/response-time.js.map +1 -1
  267. package/dist/middlewares/response-time.mjs +9 -10
  268. package/dist/middlewares/response-time.mjs.map +1 -1
  269. package/dist/middlewares/responses.js +14 -12
  270. package/dist/middlewares/responses.js.map +1 -1
  271. package/dist/middlewares/responses.mjs +13 -13
  272. package/dist/middlewares/responses.mjs.map +1 -1
  273. package/dist/middlewares/security.js +109 -71
  274. package/dist/middlewares/security.js.map +1 -1
  275. package/dist/middlewares/security.mjs +108 -70
  276. package/dist/middlewares/security.mjs.map +1 -1
  277. package/dist/middlewares/session.js +26 -25
  278. package/dist/middlewares/session.js.map +1 -1
  279. package/dist/middlewares/session.mjs +25 -24
  280. package/dist/middlewares/session.mjs.map +1 -1
  281. package/dist/migrations/database/5.0.0-discard-drafts.d.ts +2 -2
  282. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
  283. package/dist/migrations/database/5.0.0-discard-drafts.js +152 -90
  284. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  285. package/dist/migrations/database/5.0.0-discard-drafts.mjs +151 -92
  286. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
  287. package/dist/migrations/draft-publish.d.ts +1 -1
  288. package/dist/migrations/draft-publish.d.ts.map +1 -1
  289. package/dist/migrations/draft-publish.js +61 -34
  290. package/dist/migrations/draft-publish.js.map +1 -1
  291. package/dist/migrations/draft-publish.mjs +60 -36
  292. package/dist/migrations/draft-publish.mjs.map +1 -1
  293. package/dist/migrations/first-published-at.d.ts +4 -0
  294. package/dist/migrations/first-published-at.d.ts.map +1 -0
  295. package/dist/migrations/first-published-at.js +51 -0
  296. package/dist/migrations/first-published-at.js.map +1 -0
  297. package/dist/migrations/first-published-at.mjs +49 -0
  298. package/dist/migrations/first-published-at.mjs.map +1 -0
  299. package/dist/migrations/i18n.js +62 -45
  300. package/dist/migrations/i18n.js.map +1 -1
  301. package/dist/migrations/i18n.mjs +61 -47
  302. package/dist/migrations/i18n.mjs.map +1 -1
  303. package/dist/migrations/index.d.ts.map +1 -1
  304. package/dist/migrations/index.js +29 -10
  305. package/dist/migrations/index.js.map +1 -1
  306. package/dist/migrations/index.mjs +28 -12
  307. package/dist/migrations/index.mjs.map +1 -1
  308. package/dist/package.json.js +187 -0
  309. package/dist/package.json.js.map +1 -0
  310. package/dist/package.json.mjs +164 -0
  311. package/dist/package.json.mjs.map +1 -0
  312. package/dist/providers/admin.js +27 -17
  313. package/dist/providers/admin.js.map +1 -1
  314. package/dist/providers/admin.mjs +26 -19
  315. package/dist/providers/admin.mjs.map +1 -1
  316. package/dist/providers/coreStore.js +13 -8
  317. package/dist/providers/coreStore.js.map +1 -1
  318. package/dist/providers/coreStore.mjs +12 -10
  319. package/dist/providers/coreStore.mjs.map +1 -1
  320. package/dist/providers/cron.js +19 -16
  321. package/dist/providers/cron.js.map +1 -1
  322. package/dist/providers/cron.mjs +18 -18
  323. package/dist/providers/cron.mjs.map +1 -1
  324. package/dist/providers/index.d.ts.map +1 -1
  325. package/dist/providers/index.js +20 -9
  326. package/dist/providers/index.js.map +1 -1
  327. package/dist/providers/index.mjs +19 -10
  328. package/dist/providers/index.mjs.map +1 -1
  329. package/dist/providers/provider.js +4 -3
  330. package/dist/providers/provider.js.map +1 -1
  331. package/dist/providers/provider.mjs +3 -4
  332. package/dist/providers/provider.mjs.map +1 -1
  333. package/dist/providers/registries.js +37 -32
  334. package/dist/providers/registries.js.map +1 -1
  335. package/dist/providers/registries.mjs +36 -34
  336. package/dist/providers/registries.mjs.map +1 -1
  337. package/dist/providers/session-manager.d.ts +3 -0
  338. package/dist/providers/session-manager.d.ts.map +1 -0
  339. package/dist/providers/session-manager.js +23 -0
  340. package/dist/providers/session-manager.js.map +1 -0
  341. package/dist/providers/session-manager.mjs +21 -0
  342. package/dist/providers/session-manager.mjs.map +1 -0
  343. package/dist/providers/telemetry.js +19 -16
  344. package/dist/providers/telemetry.js.map +1 -1
  345. package/dist/providers/telemetry.mjs +18 -18
  346. package/dist/providers/telemetry.mjs.map +1 -1
  347. package/dist/providers/webhooks.js +28 -26
  348. package/dist/providers/webhooks.js.map +1 -1
  349. package/dist/providers/webhooks.mjs +27 -28
  350. package/dist/providers/webhooks.mjs.map +1 -1
  351. package/dist/registries/apis.js +23 -20
  352. package/dist/registries/apis.js.map +1 -1
  353. package/dist/registries/apis.mjs +22 -22
  354. package/dist/registries/apis.mjs.map +1 -1
  355. package/dist/registries/components.js +35 -37
  356. package/dist/registries/components.js.map +1 -1
  357. package/dist/registries/components.mjs +34 -39
  358. package/dist/registries/components.mjs.map +1 -1
  359. package/dist/registries/content-types.js +54 -59
  360. package/dist/registries/content-types.js.map +1 -1
  361. package/dist/registries/content-types.mjs +53 -61
  362. package/dist/registries/content-types.mjs.map +1 -1
  363. package/dist/registries/controllers.js +70 -71
  364. package/dist/registries/controllers.js.map +1 -1
  365. package/dist/registries/controllers.mjs +69 -73
  366. package/dist/registries/controllers.mjs.map +1 -1
  367. package/dist/registries/custom-fields.js +75 -65
  368. package/dist/registries/custom-fields.js.map +1 -1
  369. package/dist/registries/custom-fields.mjs +74 -67
  370. package/dist/registries/custom-fields.mjs.map +1 -1
  371. package/dist/registries/hooks.js +46 -49
  372. package/dist/registries/hooks.js.map +1 -1
  373. package/dist/registries/hooks.mjs +45 -51
  374. package/dist/registries/hooks.mjs.map +1 -1
  375. package/dist/registries/middlewares.js +49 -51
  376. package/dist/registries/middlewares.js.map +1 -1
  377. package/dist/registries/middlewares.mjs +48 -53
  378. package/dist/registries/middlewares.mjs.map +1 -1
  379. package/dist/registries/models.js +14 -13
  380. package/dist/registries/models.js.map +1 -1
  381. package/dist/registries/models.mjs +13 -14
  382. package/dist/registries/models.mjs.map +1 -1
  383. package/dist/registries/modules.js +39 -36
  384. package/dist/registries/modules.js.map +1 -1
  385. package/dist/registries/modules.mjs +38 -38
  386. package/dist/registries/modules.mjs.map +1 -1
  387. package/dist/registries/namespace.js +21 -20
  388. package/dist/registries/namespace.js.map +1 -1
  389. package/dist/registries/namespace.mjs +20 -23
  390. package/dist/registries/namespace.mjs.map +1 -1
  391. package/dist/registries/plugins.js +23 -20
  392. package/dist/registries/plugins.js.map +1 -1
  393. package/dist/registries/plugins.mjs +22 -22
  394. package/dist/registries/plugins.mjs.map +1 -1
  395. package/dist/registries/policies.js +103 -96
  396. package/dist/registries/policies.js.map +1 -1
  397. package/dist/registries/policies.mjs +102 -98
  398. package/dist/registries/policies.mjs.map +1 -1
  399. package/dist/registries/sanitizers.js +23 -22
  400. package/dist/registries/sanitizers.js.map +1 -1
  401. package/dist/registries/sanitizers.mjs +22 -22
  402. package/dist/registries/sanitizers.mjs.map +1 -1
  403. package/dist/registries/services.js +71 -71
  404. package/dist/registries/services.js.map +1 -1
  405. package/dist/registries/services.mjs +70 -73
  406. package/dist/registries/services.mjs.map +1 -1
  407. package/dist/registries/validators.js +23 -22
  408. package/dist/registries/validators.js.map +1 -1
  409. package/dist/registries/validators.mjs +22 -22
  410. package/dist/registries/validators.mjs.map +1 -1
  411. package/dist/services/auth/index.js +74 -74
  412. package/dist/services/auth/index.js.map +1 -1
  413. package/dist/services/auth/index.mjs +73 -74
  414. package/dist/services/auth/index.mjs.map +1 -1
  415. package/dist/services/config.js +47 -43
  416. package/dist/services/config.js.map +1 -1
  417. package/dist/services/config.mjs +46 -44
  418. package/dist/services/config.mjs.map +1 -1
  419. package/dist/services/content-api/index.d.ts +1 -1
  420. package/dist/services/content-api/index.d.ts.map +1 -1
  421. package/dist/services/content-api/index.js +80 -79
  422. package/dist/services/content-api/index.js.map +1 -1
  423. package/dist/services/content-api/index.mjs +79 -79
  424. package/dist/services/content-api/index.mjs.map +1 -1
  425. package/dist/services/content-api/permissions/engine.js +8 -5
  426. package/dist/services/content-api/permissions/engine.js.map +1 -1
  427. package/dist/services/content-api/permissions/engine.mjs +7 -5
  428. package/dist/services/content-api/permissions/engine.mjs.map +1 -1
  429. package/dist/services/content-api/permissions/index.js +101 -81
  430. package/dist/services/content-api/permissions/index.js.map +1 -1
  431. package/dist/services/content-api/permissions/index.mjs +100 -81
  432. package/dist/services/content-api/permissions/index.mjs.map +1 -1
  433. package/dist/services/content-api/permissions/providers/action.js +17 -14
  434. package/dist/services/content-api/permissions/providers/action.js.map +1 -1
  435. package/dist/services/content-api/permissions/providers/action.mjs +16 -16
  436. package/dist/services/content-api/permissions/providers/action.mjs.map +1 -1
  437. package/dist/services/content-api/permissions/providers/condition.js +17 -14
  438. package/dist/services/content-api/permissions/providers/condition.js.map +1 -1
  439. package/dist/services/content-api/permissions/providers/condition.mjs +16 -16
  440. package/dist/services/content-api/permissions/providers/condition.mjs.map +1 -1
  441. package/dist/services/content-source-maps.d.ts +13 -0
  442. package/dist/services/content-source-maps.d.ts.map +1 -0
  443. package/dist/services/content-source-maps.js +108 -0
  444. package/dist/services/content-source-maps.js.map +1 -0
  445. package/dist/services/content-source-maps.mjs +106 -0
  446. package/dist/services/content-source-maps.mjs.map +1 -0
  447. package/dist/services/core-store.d.ts +2 -2
  448. package/dist/services/core-store.d.ts.map +1 -1
  449. package/dist/services/core-store.js +115 -95
  450. package/dist/services/core-store.js.map +1 -1
  451. package/dist/services/core-store.mjs +114 -97
  452. package/dist/services/core-store.mjs.map +1 -1
  453. package/dist/services/cron.js +74 -65
  454. package/dist/services/cron.js.map +1 -1
  455. package/dist/services/cron.mjs +73 -67
  456. package/dist/services/cron.mjs.map +1 -1
  457. package/dist/services/custom-fields.js +9 -7
  458. package/dist/services/custom-fields.js.map +1 -1
  459. package/dist/services/custom-fields.mjs +8 -9
  460. package/dist/services/custom-fields.mjs.map +1 -1
  461. package/dist/services/document-service/attributes/index.js +23 -18
  462. package/dist/services/document-service/attributes/index.js.map +1 -1
  463. package/dist/services/document-service/attributes/index.mjs +22 -19
  464. package/dist/services/document-service/attributes/index.mjs.map +1 -1
  465. package/dist/services/document-service/attributes/transforms.js +16 -15
  466. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  467. package/dist/services/document-service/attributes/transforms.mjs +15 -15
  468. package/dist/services/document-service/attributes/transforms.mjs.map +1 -1
  469. package/dist/services/document-service/common.js +5 -4
  470. package/dist/services/document-service/common.js.map +1 -1
  471. package/dist/services/document-service/common.mjs +4 -5
  472. package/dist/services/document-service/common.mjs.map +1 -1
  473. package/dist/services/document-service/components.d.ts +31 -1
  474. package/dist/services/document-service/components.d.ts.map +1 -1
  475. package/dist/services/document-service/components.js +363 -256
  476. package/dist/services/document-service/components.js.map +1 -1
  477. package/dist/services/document-service/components.mjs +359 -261
  478. package/dist/services/document-service/components.mjs.map +1 -1
  479. package/dist/services/document-service/draft-and-publish.d.ts +1 -1
  480. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  481. package/dist/services/document-service/draft-and-publish.js +88 -48
  482. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  483. package/dist/services/document-service/draft-and-publish.mjs +87 -54
  484. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  485. package/dist/services/document-service/entries.d.ts.map +1 -1
  486. package/dist/services/document-service/entries.js +151 -91
  487. package/dist/services/document-service/entries.js.map +1 -1
  488. package/dist/services/document-service/entries.mjs +150 -92
  489. package/dist/services/document-service/entries.mjs.map +1 -1
  490. package/dist/services/document-service/events.d.ts +1 -1
  491. package/dist/services/document-service/events.d.ts.map +1 -1
  492. package/dist/services/document-service/events.js +52 -40
  493. package/dist/services/document-service/events.js.map +1 -1
  494. package/dist/services/document-service/events.mjs +51 -41
  495. package/dist/services/document-service/events.mjs.map +1 -1
  496. package/dist/services/document-service/first-published-at.d.ts +7 -0
  497. package/dist/services/document-service/first-published-at.d.ts.map +1 -0
  498. package/dist/services/document-service/first-published-at.js +31 -0
  499. package/dist/services/document-service/first-published-at.js.map +1 -0
  500. package/dist/services/document-service/first-published-at.mjs +28 -0
  501. package/dist/services/document-service/first-published-at.mjs.map +1 -0
  502. package/dist/services/document-service/index.js +53 -33
  503. package/dist/services/document-service/index.js.map +1 -1
  504. package/dist/services/document-service/index.mjs +52 -34
  505. package/dist/services/document-service/index.mjs.map +1 -1
  506. package/dist/services/document-service/internationalization.d.ts +6 -1
  507. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  508. package/dist/services/document-service/internationalization.js +94 -46
  509. package/dist/services/document-service/internationalization.js.map +1 -1
  510. package/dist/services/document-service/internationalization.mjs +92 -50
  511. package/dist/services/document-service/internationalization.mjs.map +1 -1
  512. package/dist/services/document-service/middlewares/errors.js +23 -19
  513. package/dist/services/document-service/middlewares/errors.js.map +1 -1
  514. package/dist/services/document-service/middlewares/errors.mjs +22 -20
  515. package/dist/services/document-service/middlewares/errors.mjs.map +1 -1
  516. package/dist/services/document-service/middlewares/middleware-manager.js +46 -44
  517. package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -1
  518. package/dist/services/document-service/middlewares/middleware-manager.mjs +45 -45
  519. package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -1
  520. package/dist/services/document-service/params.js +11 -5
  521. package/dist/services/document-service/params.js.map +1 -1
  522. package/dist/services/document-service/params.mjs +10 -6
  523. package/dist/services/document-service/params.mjs.map +1 -1
  524. package/dist/services/document-service/repository.d.ts.map +1 -1
  525. package/dist/services/document-service/repository.js +362 -319
  526. package/dist/services/document-service/repository.js.map +1 -1
  527. package/dist/services/document-service/repository.mjs +361 -320
  528. package/dist/services/document-service/repository.mjs.map +1 -1
  529. package/dist/services/document-service/transform/data.js +22 -12
  530. package/dist/services/document-service/transform/data.js.map +1 -1
  531. package/dist/services/document-service/transform/data.mjs +21 -13
  532. package/dist/services/document-service/transform/data.mjs.map +1 -1
  533. package/dist/services/document-service/transform/fields.js +26 -17
  534. package/dist/services/document-service/transform/fields.js.map +1 -1
  535. package/dist/services/document-service/transform/fields.mjs +25 -18
  536. package/dist/services/document-service/transform/fields.mjs.map +1 -1
  537. package/dist/services/document-service/transform/id-map.d.ts +1 -1
  538. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  539. package/dist/services/document-service/transform/id-map.js +115 -77
  540. package/dist/services/document-service/transform/id-map.js.map +1 -1
  541. package/dist/services/document-service/transform/id-map.mjs +114 -78
  542. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  543. package/dist/services/document-service/transform/id-transform.d.ts +1 -1
  544. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  545. package/dist/services/document-service/transform/id-transform.js +37 -29
  546. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  547. package/dist/services/document-service/transform/id-transform.mjs +36 -30
  548. package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
  549. package/dist/services/document-service/transform/populate.js +23 -18
  550. package/dist/services/document-service/transform/populate.js.map +1 -1
  551. package/dist/services/document-service/transform/populate.mjs +22 -19
  552. package/dist/services/document-service/transform/populate.mjs.map +1 -1
  553. package/dist/services/document-service/transform/query.js +11 -6
  554. package/dist/services/document-service/transform/query.js.map +1 -1
  555. package/dist/services/document-service/transform/query.mjs +10 -7
  556. package/dist/services/document-service/transform/query.mjs.map +1 -1
  557. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +1 -1
  558. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  559. package/dist/services/document-service/transform/relations/extract/data-ids.js +71 -48
  560. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  561. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +70 -49
  562. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  563. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  564. package/dist/services/document-service/transform/relations/transform/data-ids.js +97 -63
  565. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  566. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +96 -64
  567. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  568. package/dist/services/document-service/transform/relations/transform/default-locale.js +47 -29
  569. package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -1
  570. package/dist/services/document-service/transform/relations/transform/default-locale.mjs +46 -30
  571. package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -1
  572. package/dist/services/document-service/transform/relations/utils/dp.d.ts +1 -1
  573. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  574. package/dist/services/document-service/transform/relations/utils/dp.js +52 -26
  575. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  576. package/dist/services/document-service/transform/relations/utils/dp.mjs +51 -27
  577. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
  578. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +1 -1
  579. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  580. package/dist/services/document-service/transform/relations/utils/i18n.js +20 -18
  581. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
  582. package/dist/services/document-service/transform/relations/utils/i18n.mjs +19 -21
  583. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
  584. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
  585. package/dist/services/document-service/transform/relations/utils/map-relation.js +116 -77
  586. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  587. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +115 -79
  588. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  589. package/dist/services/document-service/utils/bidirectional-relations.d.ts +95 -0
  590. package/dist/services/document-service/utils/bidirectional-relations.d.ts.map +1 -0
  591. package/dist/services/document-service/utils/bidirectional-relations.js +148 -0
  592. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -0
  593. package/dist/services/document-service/utils/bidirectional-relations.mjs +145 -0
  594. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -0
  595. package/dist/services/document-service/utils/clean-component-join-table.d.ts +7 -0
  596. package/dist/services/document-service/utils/clean-component-join-table.d.ts.map +1 -0
  597. package/dist/services/document-service/utils/populate.d.ts +1 -1
  598. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  599. package/dist/services/document-service/utils/populate.js +66 -42
  600. package/dist/services/document-service/utils/populate.js.map +1 -1
  601. package/dist/services/document-service/utils/populate.mjs +65 -43
  602. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  603. package/dist/services/document-service/utils/unidirectional-relations.d.ts +19 -2
  604. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  605. package/dist/services/document-service/utils/unidirectional-relations.js +124 -62
  606. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
  607. package/dist/services/document-service/utils/unidirectional-relations.mjs +123 -64
  608. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
  609. package/dist/services/entity-service/index.js +230 -161
  610. package/dist/services/entity-service/index.js.map +1 -1
  611. package/dist/services/entity-service/index.mjs +229 -160
  612. package/dist/services/entity-service/index.mjs.map +1 -1
  613. package/dist/services/entity-validator/blocks-validator.js +135 -103
  614. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  615. package/dist/services/entity-validator/blocks-validator.mjs +134 -104
  616. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  617. package/dist/services/entity-validator/index.d.ts +1 -1
  618. package/dist/services/entity-validator/index.d.ts.map +1 -1
  619. package/dist/services/entity-validator/index.js +370 -366
  620. package/dist/services/entity-validator/index.js.map +1 -1
  621. package/dist/services/entity-validator/index.mjs +366 -363
  622. package/dist/services/entity-validator/index.mjs.map +1 -1
  623. package/dist/services/entity-validator/validators.d.ts +1 -0
  624. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  625. package/dist/services/entity-validator/validators.js +270 -209
  626. package/dist/services/entity-validator/validators.js.map +1 -1
  627. package/dist/services/entity-validator/validators.mjs +269 -215
  628. package/dist/services/entity-validator/validators.mjs.map +1 -1
  629. package/dist/services/errors.js +65 -65
  630. package/dist/services/errors.js.map +1 -1
  631. package/dist/services/errors.mjs +64 -66
  632. package/dist/services/errors.mjs.map +1 -1
  633. package/dist/services/event-hub.js +82 -69
  634. package/dist/services/event-hub.js.map +1 -1
  635. package/dist/services/event-hub.mjs +81 -71
  636. package/dist/services/event-hub.mjs.map +1 -1
  637. package/dist/services/features.js +19 -14
  638. package/dist/services/features.js.map +1 -1
  639. package/dist/services/features.mjs +18 -15
  640. package/dist/services/features.mjs.map +1 -1
  641. package/dist/services/fs.js +41 -40
  642. package/dist/services/fs.js.map +1 -1
  643. package/dist/services/fs.mjs +40 -39
  644. package/dist/services/fs.mjs.map +1 -1
  645. package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
  646. package/dist/services/metrics/admin-user-hash.js +13 -11
  647. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  648. package/dist/services/metrics/admin-user-hash.mjs +12 -10
  649. package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
  650. package/dist/services/metrics/index.d.ts +1 -1
  651. package/dist/services/metrics/index.d.ts.map +1 -1
  652. package/dist/services/metrics/index.js +48 -40
  653. package/dist/services/metrics/index.js.map +1 -1
  654. package/dist/services/metrics/index.mjs +47 -42
  655. package/dist/services/metrics/index.mjs.map +1 -1
  656. package/dist/services/metrics/is-truthy.js +13 -6
  657. package/dist/services/metrics/is-truthy.js.map +1 -1
  658. package/dist/services/metrics/is-truthy.mjs +12 -6
  659. package/dist/services/metrics/is-truthy.mjs.map +1 -1
  660. package/dist/services/metrics/middleware.d.ts +2 -1
  661. package/dist/services/metrics/middleware.d.ts.map +1 -1
  662. package/dist/services/metrics/middleware.js +37 -22
  663. package/dist/services/metrics/middleware.js.map +1 -1
  664. package/dist/services/metrics/middleware.mjs +36 -24
  665. package/dist/services/metrics/middleware.mjs.map +1 -1
  666. package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
  667. package/dist/services/metrics/rate-limiter.js +24 -19
  668. package/dist/services/metrics/rate-limiter.js.map +1 -1
  669. package/dist/services/metrics/rate-limiter.mjs +23 -21
  670. package/dist/services/metrics/rate-limiter.mjs.map +1 -1
  671. package/dist/services/metrics/sender.d.ts.map +1 -1
  672. package/dist/services/metrics/sender.js +79 -69
  673. package/dist/services/metrics/sender.js.map +1 -1
  674. package/dist/services/metrics/sender.mjs +78 -64
  675. package/dist/services/metrics/sender.mjs.map +1 -1
  676. package/dist/services/query-params.js +13 -10
  677. package/dist/services/query-params.js.map +1 -1
  678. package/dist/services/query-params.mjs +12 -12
  679. package/dist/services/query-params.mjs.map +1 -1
  680. package/dist/services/reloader.js +35 -32
  681. package/dist/services/reloader.js.map +1 -1
  682. package/dist/services/reloader.mjs +34 -33
  683. package/dist/services/reloader.mjs.map +1 -1
  684. package/dist/services/request-context.js +11 -8
  685. package/dist/services/request-context.js.map +1 -1
  686. package/dist/services/request-context.mjs +10 -10
  687. package/dist/services/request-context.mjs.map +1 -1
  688. package/dist/services/server/admin-api.js +11 -10
  689. package/dist/services/server/admin-api.js.map +1 -1
  690. package/dist/services/server/admin-api.mjs +10 -11
  691. package/dist/services/server/admin-api.mjs.map +1 -1
  692. package/dist/services/server/api.js +33 -27
  693. package/dist/services/server/api.js.map +1 -1
  694. package/dist/services/server/api.mjs +32 -26
  695. package/dist/services/server/api.mjs.map +1 -1
  696. package/dist/services/server/compose-endpoint.js +116 -105
  697. package/dist/services/server/compose-endpoint.js.map +1 -1
  698. package/dist/services/server/compose-endpoint.mjs +115 -105
  699. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  700. package/dist/services/server/content-api.js +11 -9
  701. package/dist/services/server/content-api.js.map +1 -1
  702. package/dist/services/server/content-api.mjs +10 -10
  703. package/dist/services/server/content-api.mjs.map +1 -1
  704. package/dist/services/server/http-server.js +48 -44
  705. package/dist/services/server/http-server.js.map +1 -1
  706. package/dist/services/server/http-server.mjs +47 -43
  707. package/dist/services/server/http-server.mjs.map +1 -1
  708. package/dist/services/server/index.js +85 -82
  709. package/dist/services/server/index.js.map +1 -1
  710. package/dist/services/server/index.mjs +84 -81
  711. package/dist/services/server/index.mjs.map +1 -1
  712. package/dist/services/server/koa.js +49 -47
  713. package/dist/services/server/koa.js.map +1 -1
  714. package/dist/services/server/koa.mjs +48 -44
  715. package/dist/services/server/koa.mjs.map +1 -1
  716. package/dist/services/server/middleware.js +86 -82
  717. package/dist/services/server/middleware.js.map +1 -1
  718. package/dist/services/server/middleware.mjs +85 -82
  719. package/dist/services/server/middleware.mjs.map +1 -1
  720. package/dist/services/server/policy.js +24 -17
  721. package/dist/services/server/policy.js.map +1 -1
  722. package/dist/services/server/policy.mjs +23 -18
  723. package/dist/services/server/policy.mjs.map +1 -1
  724. package/dist/services/server/register-middlewares.js +68 -61
  725. package/dist/services/server/register-middlewares.js.map +1 -1
  726. package/dist/services/server/register-middlewares.mjs +67 -63
  727. package/dist/services/server/register-middlewares.mjs.map +1 -1
  728. package/dist/services/server/register-routes.js +109 -66
  729. package/dist/services/server/register-routes.js.map +1 -1
  730. package/dist/services/server/register-routes.mjs +108 -66
  731. package/dist/services/server/register-routes.mjs.map +1 -1
  732. package/dist/services/server/routing.d.ts +10 -0
  733. package/dist/services/server/routing.d.ts.map +1 -1
  734. package/dist/services/server/routing.js +100 -81
  735. package/dist/services/server/routing.js.map +1 -1
  736. package/dist/services/server/routing.mjs +99 -81
  737. package/dist/services/server/routing.mjs.map +1 -1
  738. package/dist/services/session-manager.d.ts +167 -0
  739. package/dist/services/session-manager.d.ts.map +1 -0
  740. package/dist/services/session-manager.js +529 -0
  741. package/dist/services/session-manager.js.map +1 -0
  742. package/dist/services/session-manager.mjs +526 -0
  743. package/dist/services/session-manager.mjs.map +1 -0
  744. package/dist/services/utils/conditional-fields.d.ts +3 -0
  745. package/dist/services/utils/conditional-fields.d.ts.map +1 -0
  746. package/dist/services/utils/conditional-fields.js +22 -0
  747. package/dist/services/utils/conditional-fields.js.map +1 -0
  748. package/dist/services/utils/conditional-fields.mjs +20 -0
  749. package/dist/services/utils/conditional-fields.mjs.map +1 -0
  750. package/dist/services/utils/dynamic-zones.js +13 -14
  751. package/dist/services/utils/dynamic-zones.js.map +1 -1
  752. package/dist/services/utils/dynamic-zones.mjs +12 -16
  753. package/dist/services/utils/dynamic-zones.mjs.map +1 -1
  754. package/dist/services/webhook-runner.js +124 -122
  755. package/dist/services/webhook-runner.js.map +1 -1
  756. package/dist/services/webhook-runner.mjs +123 -121
  757. package/dist/services/webhook-runner.mjs.map +1 -1
  758. package/dist/services/webhook-store.js +132 -99
  759. package/dist/services/webhook-store.js.map +1 -1
  760. package/dist/services/webhook-store.mjs +131 -101
  761. package/dist/services/webhook-store.mjs.map +1 -1
  762. package/dist/services/worker-queue.js +44 -49
  763. package/dist/services/worker-queue.js.map +1 -1
  764. package/dist/services/worker-queue.mjs +43 -49
  765. package/dist/services/worker-queue.mjs.map +1 -1
  766. package/dist/utils/convert-custom-field-type.js +17 -20
  767. package/dist/utils/convert-custom-field-type.js.map +1 -1
  768. package/dist/utils/convert-custom-field-type.mjs +16 -21
  769. package/dist/utils/convert-custom-field-type.mjs.map +1 -1
  770. package/dist/utils/cron.js +64 -30
  771. package/dist/utils/cron.js.map +1 -1
  772. package/dist/utils/cron.mjs +63 -31
  773. package/dist/utils/cron.mjs.map +1 -1
  774. package/dist/utils/fetch.d.ts +5 -1
  775. package/dist/utils/fetch.d.ts.map +1 -1
  776. package/dist/utils/fetch.js +28 -18
  777. package/dist/utils/fetch.js.map +1 -1
  778. package/dist/utils/fetch.mjs +27 -19
  779. package/dist/utils/fetch.mjs.map +1 -1
  780. package/dist/utils/filepath-to-prop-path.js +20 -28
  781. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  782. package/dist/utils/filepath-to-prop-path.mjs +19 -26
  783. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  784. package/dist/utils/is-initialized.js +21 -12
  785. package/dist/utils/is-initialized.js.map +1 -1
  786. package/dist/utils/is-initialized.mjs +20 -13
  787. package/dist/utils/is-initialized.mjs.map +1 -1
  788. package/dist/utils/lifecycles.js +6 -5
  789. package/dist/utils/lifecycles.js.map +1 -1
  790. package/dist/utils/lifecycles.mjs +5 -6
  791. package/dist/utils/lifecycles.mjs.map +1 -1
  792. package/dist/utils/load-config-file.js +40 -38
  793. package/dist/utils/load-config-file.js.map +1 -1
  794. package/dist/utils/load-config-file.mjs +39 -36
  795. package/dist/utils/load-config-file.mjs.map +1 -1
  796. package/dist/utils/load-files.js +40 -35
  797. package/dist/utils/load-files.js.map +1 -1
  798. package/dist/utils/load-files.mjs +39 -32
  799. package/dist/utils/load-files.mjs.map +1 -1
  800. package/dist/utils/open-browser.js +8 -8
  801. package/dist/utils/open-browser.js.map +1 -1
  802. package/dist/utils/open-browser.mjs +7 -7
  803. package/dist/utils/open-browser.mjs.map +1 -1
  804. package/dist/utils/resolve-working-dirs.js +23 -10
  805. package/dist/utils/resolve-working-dirs.js.map +1 -1
  806. package/dist/utils/resolve-working-dirs.mjs +22 -9
  807. package/dist/utils/resolve-working-dirs.mjs.map +1 -1
  808. package/dist/utils/signals.js +20 -14
  809. package/dist/utils/signals.js.map +1 -1
  810. package/dist/utils/signals.mjs +19 -15
  811. package/dist/utils/signals.mjs.map +1 -1
  812. package/dist/utils/startup-logger.d.ts.map +1 -1
  813. package/dist/utils/startup-logger.js +107 -78
  814. package/dist/utils/startup-logger.js.map +1 -1
  815. package/dist/utils/startup-logger.mjs +106 -75
  816. package/dist/utils/startup-logger.mjs.map +1 -1
  817. package/dist/utils/transform-content-types-to-models.d.ts +225 -0
  818. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  819. package/dist/utils/transform-content-types-to-models.js +350 -261
  820. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  821. package/dist/utils/transform-content-types-to-models.mjs +349 -269
  822. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  823. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  824. package/dist/utils/update-notifier/index.js +68 -73
  825. package/dist/utils/update-notifier/index.js.map +1 -1
  826. package/dist/utils/update-notifier/index.mjs +67 -67
  827. package/dist/utils/update-notifier/index.mjs.map +1 -1
  828. package/package.json +31 -27
@@ -0,0 +1,529 @@
1
+ 'use strict';
2
+
3
+ var crypto = require('crypto');
4
+ var jwt = require('jsonwebtoken');
5
+ var constants = require('../constants.js');
6
+
7
+ class DatabaseSessionProvider {
8
+ async create(session) {
9
+ const result = await this.db.query(this.contentType).create({
10
+ data: session
11
+ });
12
+ return result;
13
+ }
14
+ async findBySessionId(sessionId) {
15
+ const result = await this.db.query(this.contentType).findOne({
16
+ where: {
17
+ sessionId
18
+ }
19
+ });
20
+ return result;
21
+ }
22
+ async updateBySessionId(sessionId, data) {
23
+ await this.db.query(this.contentType).update({
24
+ where: {
25
+ sessionId
26
+ },
27
+ data
28
+ });
29
+ }
30
+ async deleteBySessionId(sessionId) {
31
+ await this.db.query(this.contentType).delete({
32
+ where: {
33
+ sessionId
34
+ }
35
+ });
36
+ }
37
+ async deleteExpired() {
38
+ await this.db.query(this.contentType).deleteMany({
39
+ where: {
40
+ absoluteExpiresAt: {
41
+ $lt: new Date()
42
+ }
43
+ }
44
+ });
45
+ }
46
+ async deleteBy(criteria) {
47
+ await this.db.query(this.contentType).deleteMany({
48
+ where: {
49
+ ...criteria.userId ? {
50
+ userId: criteria.userId
51
+ } : {},
52
+ ...criteria.origin ? {
53
+ origin: criteria.origin
54
+ } : {},
55
+ ...criteria.deviceId ? {
56
+ deviceId: criteria.deviceId
57
+ } : {}
58
+ }
59
+ });
60
+ }
61
+ constructor(db, contentType){
62
+ this.db = db;
63
+ this.contentType = contentType;
64
+ }
65
+ }
66
+ class OriginSessionManager {
67
+ async generateRefreshToken(userId, deviceId, options) {
68
+ return this.sessionManager.generateRefreshToken(userId, deviceId, this.origin, options);
69
+ }
70
+ async generateAccessToken(refreshToken) {
71
+ return this.sessionManager.generateAccessToken(refreshToken, this.origin);
72
+ }
73
+ async rotateRefreshToken(refreshToken) {
74
+ return this.sessionManager.rotateRefreshToken(refreshToken, this.origin);
75
+ }
76
+ validateAccessToken(token) {
77
+ return this.sessionManager.validateAccessToken(token, this.origin);
78
+ }
79
+ async validateRefreshToken(token) {
80
+ return this.sessionManager.validateRefreshToken(token, this.origin);
81
+ }
82
+ async invalidateRefreshToken(userId, deviceId) {
83
+ return this.sessionManager.invalidateRefreshToken(this.origin, userId, deviceId);
84
+ }
85
+ /**
86
+ * Returns true when a session exists and is not expired for this origin.
87
+ * If the session exists but is expired, it will be deleted as part of this check.
88
+ */ async isSessionActive(sessionId) {
89
+ return this.sessionManager.isSessionActive(sessionId, this.origin);
90
+ }
91
+ constructor(sessionManager, origin){
92
+ this.sessionManager = sessionManager;
93
+ this.origin = origin;
94
+ }
95
+ }
96
+ class SessionManager {
97
+ /**
98
+ * Define configuration for a specific origin
99
+ */ defineOrigin(origin, config) {
100
+ this.originConfigs.set(origin, config);
101
+ }
102
+ /**
103
+ * Check if an origin is defined
104
+ */ hasOrigin(origin) {
105
+ return this.originConfigs.has(origin);
106
+ }
107
+ /**
108
+ * Get configuration for a specific origin, throw error if not defined
109
+ */ getConfigForOrigin(origin) {
110
+ const originConfig = this.originConfigs.get(origin);
111
+ if (originConfig) {
112
+ return originConfig;
113
+ }
114
+ throw new Error(`SessionManager: Origin '${origin}' is not defined. Please define it using defineOrigin('${origin}', config).`);
115
+ }
116
+ /**
117
+ * Get the appropriate JWT key based on the algorithm
118
+ */ getJwtKey(config, algorithm, operation) {
119
+ const isAsymmetric = algorithm.startsWith('RS') || algorithm.startsWith('ES') || algorithm.startsWith('PS');
120
+ if (isAsymmetric) {
121
+ // For asymmetric algorithms, check if user has provided proper key configuration
122
+ if (operation === 'sign') {
123
+ const privateKey = config.jwtOptions?.privateKey;
124
+ if (privateKey) {
125
+ return privateKey;
126
+ }
127
+ throw new Error(`SessionManager: Private key is required for asymmetric algorithm ${algorithm}. Please configure admin.auth.options.privateKey.`);
128
+ } else {
129
+ const publicKey = config.jwtOptions?.publicKey;
130
+ if (publicKey) {
131
+ return publicKey;
132
+ }
133
+ throw new Error(`SessionManager: Public key is required for asymmetric algorithm ${algorithm}. Please configure admin.auth.options.publicKey.`);
134
+ }
135
+ } else {
136
+ if (!config.jwtSecret) {
137
+ throw new Error(`SessionManager: Secret key is required for symmetric algorithm ${algorithm}`);
138
+ }
139
+ return config.jwtSecret;
140
+ }
141
+ }
142
+ generateSessionId() {
143
+ return crypto.randomBytes(16).toString('hex');
144
+ }
145
+ async maybeCleanupExpired() {
146
+ this.cleanupInvocationCounter += 1;
147
+ if (this.cleanupInvocationCounter >= this.cleanupEveryCalls) {
148
+ this.cleanupInvocationCounter = 0;
149
+ await this.provider.deleteExpired();
150
+ }
151
+ }
152
+ /**
153
+ * Get the cleanup every calls threshold
154
+ */ get cleanupThreshold() {
155
+ return this.cleanupEveryCalls;
156
+ }
157
+ async generateRefreshToken(userId, deviceId, origin, options) {
158
+ if (!origin || typeof origin !== 'string') {
159
+ throw new Error('SessionManager: Origin parameter is required and must be a non-empty string');
160
+ }
161
+ await this.maybeCleanupExpired();
162
+ const config = this.getConfigForOrigin(origin);
163
+ const algorithm = config.algorithm || constants.DEFAULT_ALGORITHM;
164
+ const jwtKey = this.getJwtKey(config, algorithm, 'sign');
165
+ const sessionId = this.generateSessionId();
166
+ const tokenType = options?.type ?? 'refresh';
167
+ const isRefresh = tokenType === 'refresh';
168
+ const idleLifespan = isRefresh ? config.idleRefreshTokenLifespan : config.idleSessionLifespan;
169
+ const maxLifespan = isRefresh ? config.maxRefreshTokenLifespan : config.maxSessionLifespan;
170
+ const now = Date.now();
171
+ const expiresAt = new Date(now + idleLifespan * 1000);
172
+ const absoluteExpiresAt = new Date(now + maxLifespan * 1000);
173
+ // Create the root record first so createdAt can be used for signing.
174
+ const record = await this.provider.create({
175
+ userId,
176
+ sessionId,
177
+ ...deviceId && {
178
+ deviceId
179
+ },
180
+ origin,
181
+ childId: null,
182
+ type: tokenType,
183
+ status: 'active',
184
+ expiresAt,
185
+ absoluteExpiresAt
186
+ });
187
+ const issuedAtSeconds = Math.floor(new Date(record.createdAt ?? new Date()).getTime() / 1000);
188
+ const expiresAtSeconds = Math.floor(new Date(record.expiresAt).getTime() / 1000);
189
+ const payload = {
190
+ userId,
191
+ sessionId,
192
+ type: 'refresh',
193
+ iat: issuedAtSeconds,
194
+ exp: expiresAtSeconds
195
+ };
196
+ // Filter out conflicting options that are already handled by the payload or used for key selection
197
+ const jwtOptions = config.jwtOptions || {};
198
+ const { expiresIn, privateKey, publicKey, ...jwtSignOptions } = jwtOptions;
199
+ const token = jwt.sign(payload, jwtKey, {
200
+ algorithm,
201
+ noTimestamp: true,
202
+ ...jwtSignOptions
203
+ });
204
+ return {
205
+ token,
206
+ sessionId,
207
+ absoluteExpiresAt: absoluteExpiresAt.toISOString()
208
+ };
209
+ }
210
+ validateAccessToken(token, origin) {
211
+ if (!origin || typeof origin !== 'string') {
212
+ throw new Error('SessionManager: Origin parameter is required and must be a non-empty string');
213
+ }
214
+ try {
215
+ const config = this.getConfigForOrigin(origin);
216
+ const algorithm = config.algorithm || constants.DEFAULT_ALGORITHM;
217
+ const jwtKey = this.getJwtKey(config, algorithm, 'verify');
218
+ const payload = jwt.verify(token, jwtKey, {
219
+ algorithms: [
220
+ algorithm
221
+ ],
222
+ ...config.jwtOptions
223
+ });
224
+ // Ensure this is an access token
225
+ if (!payload || payload.type !== 'access') {
226
+ return {
227
+ isValid: false,
228
+ payload: null
229
+ };
230
+ }
231
+ return {
232
+ isValid: true,
233
+ payload
234
+ };
235
+ } catch (err) {
236
+ return {
237
+ isValid: false,
238
+ payload: null
239
+ };
240
+ }
241
+ }
242
+ async validateRefreshToken(token, origin) {
243
+ if (!origin || typeof origin !== 'string') {
244
+ throw new Error('SessionManager: Origin parameter is required and must be a non-empty string');
245
+ }
246
+ try {
247
+ const config = this.getConfigForOrigin(origin);
248
+ const algorithm = config.algorithm || constants.DEFAULT_ALGORITHM;
249
+ const jwtKey = this.getJwtKey(config, algorithm, 'verify');
250
+ const verifyOptions = {
251
+ algorithms: [
252
+ algorithm
253
+ ],
254
+ ...config.jwtOptions
255
+ };
256
+ const payload = jwt.verify(token, jwtKey, verifyOptions);
257
+ if (payload.type !== 'refresh') {
258
+ return {
259
+ isValid: false
260
+ };
261
+ }
262
+ const session = await this.provider.findBySessionId(payload.sessionId);
263
+ if (!session) {
264
+ return {
265
+ isValid: false
266
+ };
267
+ }
268
+ const now = new Date();
269
+ if (new Date(session.expiresAt) <= now) {
270
+ return {
271
+ isValid: false
272
+ };
273
+ }
274
+ // Absolute family expiry check
275
+ if (session.absoluteExpiresAt && new Date(session.absoluteExpiresAt) <= now) {
276
+ return {
277
+ isValid: false
278
+ };
279
+ }
280
+ // Only 'active' sessions are eligible to create access tokens.
281
+ if (session.status !== 'active') {
282
+ return {
283
+ isValid: false
284
+ };
285
+ }
286
+ if (session.userId !== payload.userId) {
287
+ return {
288
+ isValid: false
289
+ };
290
+ }
291
+ return {
292
+ isValid: true,
293
+ userId: payload.userId,
294
+ sessionId: payload.sessionId
295
+ };
296
+ } catch (error) {
297
+ if (error instanceof jwt.JsonWebTokenError) {
298
+ return {
299
+ isValid: false
300
+ };
301
+ }
302
+ throw error;
303
+ }
304
+ }
305
+ async invalidateRefreshToken(origin, userId, deviceId) {
306
+ await this.provider.deleteBy({
307
+ userId,
308
+ origin,
309
+ deviceId
310
+ });
311
+ }
312
+ async generateAccessToken(refreshToken, origin) {
313
+ if (!origin || typeof origin !== 'string') {
314
+ throw new Error('SessionManager: Origin parameter is required and must be a non-empty string');
315
+ }
316
+ const validation = await this.validateRefreshToken(refreshToken, origin);
317
+ if (!validation.isValid) {
318
+ return {
319
+ error: 'invalid_refresh_token'
320
+ };
321
+ }
322
+ const payload = {
323
+ userId: String(validation.userId),
324
+ sessionId: validation.sessionId,
325
+ type: 'access'
326
+ };
327
+ const config = this.getConfigForOrigin(origin);
328
+ const algorithm = config.algorithm || constants.DEFAULT_ALGORITHM;
329
+ const jwtKey = this.getJwtKey(config, algorithm, 'sign');
330
+ // Filter out conflicting options that are already handled by the payload or used for key selection
331
+ const jwtOptions = config.jwtOptions || {};
332
+ const { expiresIn, privateKey, publicKey, ...jwtSignOptions } = jwtOptions;
333
+ const token = jwt.sign(payload, jwtKey, {
334
+ algorithm,
335
+ expiresIn: config.accessTokenLifespan,
336
+ ...jwtSignOptions
337
+ });
338
+ return {
339
+ token
340
+ };
341
+ }
342
+ async rotateRefreshToken(refreshToken, origin) {
343
+ if (!origin || typeof origin !== 'string') {
344
+ throw new Error('SessionManager: Origin parameter is required and must be a non-empty string');
345
+ }
346
+ try {
347
+ const config = this.getConfigForOrigin(origin);
348
+ const algorithm = config.algorithm || constants.DEFAULT_ALGORITHM;
349
+ const jwtKey = this.getJwtKey(config, algorithm, 'verify');
350
+ const payload = jwt.verify(refreshToken, jwtKey, {
351
+ algorithms: [
352
+ algorithm
353
+ ],
354
+ ...config.jwtOptions
355
+ });
356
+ if (!payload || payload.type !== 'refresh') {
357
+ return {
358
+ error: 'invalid_refresh_token'
359
+ };
360
+ }
361
+ const current = await this.provider.findBySessionId(payload.sessionId);
362
+ if (!current) {
363
+ return {
364
+ error: 'invalid_refresh_token'
365
+ };
366
+ }
367
+ // If parent already has a child, return the same child token
368
+ if (current.childId) {
369
+ const child = await this.provider.findBySessionId(current.childId);
370
+ if (child) {
371
+ const childIat = Math.floor(new Date(child.createdAt ?? new Date()).getTime() / 1000);
372
+ const childExp = Math.floor(new Date(child.expiresAt).getTime() / 1000);
373
+ const childPayload = {
374
+ userId: child.userId,
375
+ sessionId: child.sessionId,
376
+ type: 'refresh',
377
+ iat: childIat,
378
+ exp: childExp
379
+ };
380
+ // Filter out conflicting options that are already handled by the payload
381
+ const { expiresIn, ...jwtSignOptions } = config.jwtOptions || {};
382
+ const childToken = jwt.sign(childPayload, jwtKey, {
383
+ algorithm,
384
+ noTimestamp: true,
385
+ ...jwtSignOptions
386
+ });
387
+ let absoluteExpiresAt;
388
+ if (child.absoluteExpiresAt) {
389
+ absoluteExpiresAt = typeof child.absoluteExpiresAt === 'string' ? child.absoluteExpiresAt : child.absoluteExpiresAt.toISOString();
390
+ } else {
391
+ absoluteExpiresAt = new Date(0).toISOString();
392
+ }
393
+ return {
394
+ token: childToken,
395
+ sessionId: child.sessionId,
396
+ absoluteExpiresAt,
397
+ type: child.type ?? 'refresh'
398
+ };
399
+ }
400
+ }
401
+ const now = Date.now();
402
+ const tokenType = current.type ?? 'refresh';
403
+ const idleLifespan = tokenType === 'refresh' ? config.idleRefreshTokenLifespan : config.idleSessionLifespan;
404
+ // Enforce idle window since creation of the current token
405
+ if (current.createdAt && now - new Date(current.createdAt).getTime() > idleLifespan * 1000) {
406
+ return {
407
+ error: 'idle_window_elapsed'
408
+ };
409
+ }
410
+ // Enforce max family window using absoluteExpiresAt
411
+ const absolute = current.absoluteExpiresAt ? new Date(current.absoluteExpiresAt).getTime() : now;
412
+ if (absolute <= now) {
413
+ return {
414
+ error: 'max_window_elapsed'
415
+ };
416
+ }
417
+ // Create child token
418
+ const childSessionId = this.generateSessionId();
419
+ const childExpiresAt = new Date(now + idleLifespan * 1000);
420
+ const childRecord = await this.provider.create({
421
+ userId: current.userId,
422
+ sessionId: childSessionId,
423
+ ...current.deviceId && {
424
+ deviceId: current.deviceId
425
+ },
426
+ origin: current.origin,
427
+ childId: null,
428
+ type: tokenType,
429
+ status: 'active',
430
+ expiresAt: childExpiresAt,
431
+ absoluteExpiresAt: current.absoluteExpiresAt ?? new Date(absolute)
432
+ });
433
+ const childIat = Math.floor(new Date(childRecord.createdAt ?? new Date()).getTime() / 1000);
434
+ const childExp = Math.floor(new Date(childRecord.expiresAt).getTime() / 1000);
435
+ const payloadOut = {
436
+ userId: current.userId,
437
+ sessionId: childSessionId,
438
+ type: 'refresh',
439
+ iat: childIat,
440
+ exp: childExp
441
+ };
442
+ // Filter out conflicting options that are already handled by the payload
443
+ const { expiresIn, ...jwtSignOptions } = config.jwtOptions || {};
444
+ const childToken = jwt.sign(payloadOut, jwtKey, {
445
+ algorithm,
446
+ noTimestamp: true,
447
+ ...jwtSignOptions
448
+ });
449
+ await this.provider.updateBySessionId(current.sessionId, {
450
+ status: 'rotated',
451
+ childId: childSessionId
452
+ });
453
+ let absoluteExpiresAt;
454
+ if (childRecord.absoluteExpiresAt) {
455
+ absoluteExpiresAt = typeof childRecord.absoluteExpiresAt === 'string' ? childRecord.absoluteExpiresAt : childRecord.absoluteExpiresAt.toISOString();
456
+ } else {
457
+ absoluteExpiresAt = new Date(absolute).toISOString();
458
+ }
459
+ return {
460
+ token: childToken,
461
+ sessionId: childSessionId,
462
+ absoluteExpiresAt,
463
+ type: tokenType
464
+ };
465
+ } catch {
466
+ return {
467
+ error: 'invalid_refresh_token'
468
+ };
469
+ }
470
+ }
471
+ /**
472
+ * Returns true when a session exists and is not expired.
473
+ * If the session exists but is expired, it will be deleted as part of this check.
474
+ */ async isSessionActive(sessionId, origin) {
475
+ const session = await this.provider.findBySessionId(sessionId);
476
+ if (!session) {
477
+ return false;
478
+ }
479
+ if (session.origin !== origin) {
480
+ return false;
481
+ }
482
+ if (new Date(session.expiresAt) <= new Date()) {
483
+ // Clean up expired session eagerly
484
+ await this.provider.deleteBySessionId(sessionId);
485
+ return false;
486
+ }
487
+ return true;
488
+ }
489
+ constructor(provider){
490
+ // Store origin-specific configurations
491
+ this.originConfigs = new Map();
492
+ // Run expired cleanup only every N calls to avoid extra queries
493
+ this.cleanupInvocationCounter = 0;
494
+ this.cleanupEveryCalls = 50;
495
+ this.provider = provider;
496
+ }
497
+ }
498
+ const createDatabaseProvider = (db, contentType)=>{
499
+ return new DatabaseSessionProvider(db, contentType);
500
+ };
501
+ const createSessionManager = ({ db })=>{
502
+ const provider = createDatabaseProvider(db, 'admin::session');
503
+ const sessionManager = new SessionManager(provider);
504
+ // Add callable functionality
505
+ const fluentApi = (origin)=>{
506
+ if (!origin || typeof origin !== 'string') {
507
+ throw new Error('SessionManager: Origin parameter is required and must be a non-empty string');
508
+ }
509
+ return new OriginSessionManager(sessionManager, origin);
510
+ };
511
+ // Attach only the public SessionManagerService API to the callable
512
+ const api = fluentApi;
513
+ api.generateSessionId = sessionManager.generateSessionId.bind(sessionManager);
514
+ api.defineOrigin = sessionManager.defineOrigin.bind(sessionManager);
515
+ api.hasOrigin = sessionManager.hasOrigin.bind(sessionManager);
516
+ // Note: isSessionActive is origin-scoped and exposed on OriginSessionManager only
517
+ // Forward the cleanupThreshold getter (used in tests)
518
+ Object.defineProperty(api, 'cleanupThreshold', {
519
+ get () {
520
+ return sessionManager.cleanupThreshold;
521
+ },
522
+ enumerable: true
523
+ });
524
+ return api;
525
+ };
526
+
527
+ exports.createDatabaseProvider = createDatabaseProvider;
528
+ exports.createSessionManager = createSessionManager;
529
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sources":["../../src/services/session-manager.ts"],"sourcesContent":["import crypto from 'crypto';\nimport jwt from 'jsonwebtoken';\nimport type { VerifyOptions, Algorithm } from 'jsonwebtoken';\nimport type { Database } from '@strapi/database';\nimport { DEFAULT_ALGORITHM } from '../constants';\n\nexport interface SessionProvider {\n create(session: SessionData): Promise<SessionData>;\n findBySessionId(sessionId: string): Promise<SessionData | null>;\n updateBySessionId(sessionId: string, data: Partial<SessionData>): Promise<void>;\n deleteBySessionId(sessionId: string): Promise<void>;\n deleteExpired(): Promise<void>;\n deleteBy(criteria: { userId?: string; origin?: string; deviceId?: string }): Promise<void>;\n}\n\nexport interface SessionData {\n id?: string;\n userId: string; // User ID stored as string (key-value store)\n sessionId: string;\n deviceId?: string; // Optional for origins that don't need device tracking\n origin: string;\n childId?: string | null;\n\n type?: 'refresh' | 'session';\n status?: 'active' | 'rotated' | 'revoked';\n expiresAt: Date;\n absoluteExpiresAt?: Date | null;\n createdAt?: Date;\n updatedAt?: Date;\n}\n\nexport interface RefreshTokenPayload {\n userId: string;\n sessionId: string;\n type: 'refresh';\n exp: number;\n iat: number;\n}\n\nexport interface AccessTokenPayload {\n userId: string;\n sessionId: string;\n type: 'access';\n exp: number;\n iat: number;\n}\n\nexport type TokenPayload = RefreshTokenPayload | AccessTokenPayload;\n\nexport interface ValidateRefreshTokenResult {\n isValid: boolean;\n userId?: string;\n sessionId?: string;\n error?:\n | 'invalid_token'\n | 'token_expired'\n | 'session_not_found'\n | 'session_expired'\n | 'wrong_token_type';\n}\n\nclass DatabaseSessionProvider implements SessionProvider {\n private db: Database;\n\n private contentType: string;\n\n constructor(db: Database, contentType: string) {\n this.db = db;\n this.contentType = contentType;\n }\n\n async create(session: SessionData): Promise<SessionData> {\n const result = await this.db.query(this.contentType).create({\n data: session,\n });\n return result as SessionData;\n }\n\n async findBySessionId(sessionId: string): Promise<SessionData | null> {\n const result = await this.db.query(this.contentType).findOne({\n where: { sessionId },\n });\n return result as SessionData | null;\n }\n\n async updateBySessionId(sessionId: string, data: Partial<SessionData>): Promise<void> {\n await this.db.query(this.contentType).update({ where: { sessionId }, data });\n }\n\n async deleteBySessionId(sessionId: string): Promise<void> {\n await this.db.query(this.contentType).delete({\n where: { sessionId },\n });\n }\n\n async deleteExpired(): Promise<void> {\n await this.db.query(this.contentType).deleteMany({\n where: { absoluteExpiresAt: { $lt: new Date() } },\n });\n }\n\n async deleteBy(criteria: { userId?: string; origin?: string; deviceId?: string }): Promise<void> {\n await this.db.query(this.contentType).deleteMany({\n where: {\n ...(criteria.userId ? { userId: criteria.userId } : {}),\n ...(criteria.origin ? { origin: criteria.origin } : {}),\n ...(criteria.deviceId ? { deviceId: criteria.deviceId } : {}),\n },\n });\n }\n}\n\nexport interface SessionManagerConfig {\n jwtSecret?: string;\n accessTokenLifespan: number;\n maxRefreshTokenLifespan: number;\n idleRefreshTokenLifespan: number;\n maxSessionLifespan: number;\n idleSessionLifespan: number;\n algorithm?: Algorithm;\n jwtOptions?: Record<string, unknown>;\n}\n\nclass OriginSessionManager {\n constructor(\n private sessionManager: SessionManager,\n private origin: string\n ) {}\n\n async generateRefreshToken(\n userId: string,\n deviceId: string | undefined,\n options?: { type?: 'refresh' | 'session' }\n ): Promise<{ token: string; sessionId: string; absoluteExpiresAt: string }> {\n return this.sessionManager.generateRefreshToken(userId, deviceId, this.origin, options);\n }\n\n async generateAccessToken(refreshToken: string): Promise<{ token: string } | { error: string }> {\n return this.sessionManager.generateAccessToken(refreshToken, this.origin);\n }\n\n async rotateRefreshToken(refreshToken: string): Promise<\n | {\n token: string;\n sessionId: string;\n absoluteExpiresAt: string;\n type: 'refresh' | 'session';\n }\n | { error: string }\n > {\n return this.sessionManager.rotateRefreshToken(refreshToken, this.origin);\n }\n\n validateAccessToken(\n token: string\n ): { isValid: true; payload: AccessTokenPayload } | { isValid: false; payload: null } {\n return this.sessionManager.validateAccessToken(token, this.origin);\n }\n\n async validateRefreshToken(token: string): Promise<ValidateRefreshTokenResult> {\n return this.sessionManager.validateRefreshToken(token, this.origin);\n }\n\n async invalidateRefreshToken(userId: string, deviceId?: string): Promise<void> {\n return this.sessionManager.invalidateRefreshToken(this.origin, userId, deviceId);\n }\n\n /**\n * Returns true when a session exists and is not expired for this origin.\n * If the session exists but is expired, it will be deleted as part of this check.\n */\n async isSessionActive(sessionId: string): Promise<boolean> {\n return this.sessionManager.isSessionActive(sessionId, this.origin);\n }\n}\n\nclass SessionManager {\n private provider: SessionProvider;\n\n // Store origin-specific configurations\n private originConfigs: Map<string, SessionManagerConfig> = new Map();\n\n // Run expired cleanup only every N calls to avoid extra queries\n private cleanupInvocationCounter: number = 0;\n\n private readonly cleanupEveryCalls: number = 50;\n\n constructor(provider: SessionProvider) {\n this.provider = provider;\n }\n\n /**\n * Define configuration for a specific origin\n */\n defineOrigin(origin: string, config: SessionManagerConfig): void {\n this.originConfigs.set(origin, config);\n }\n\n /**\n * Check if an origin is defined\n */\n hasOrigin(origin: string): boolean {\n return this.originConfigs.has(origin);\n }\n\n /**\n * Get configuration for a specific origin, throw error if not defined\n */\n private getConfigForOrigin(origin: string): SessionManagerConfig {\n const originConfig = this.originConfigs.get(origin);\n if (originConfig) {\n return originConfig;\n }\n throw new Error(\n `SessionManager: Origin '${origin}' is not defined. Please define it using defineOrigin('${origin}', config).`\n );\n }\n\n /**\n * Get the appropriate JWT key based on the algorithm\n */\n private getJwtKey(\n config: SessionManagerConfig,\n algorithm: Algorithm,\n operation: 'sign' | 'verify'\n ): string {\n const isAsymmetric =\n algorithm.startsWith('RS') || algorithm.startsWith('ES') || algorithm.startsWith('PS');\n\n if (isAsymmetric) {\n // For asymmetric algorithms, check if user has provided proper key configuration\n if (operation === 'sign') {\n const privateKey = config.jwtOptions?.privateKey as string;\n if (privateKey) {\n return privateKey;\n }\n throw new Error(\n `SessionManager: Private key is required for asymmetric algorithm ${algorithm}. Please configure admin.auth.options.privateKey.`\n );\n } else {\n const publicKey = config.jwtOptions?.publicKey as string;\n if (publicKey) {\n return publicKey;\n }\n throw new Error(\n `SessionManager: Public key is required for asymmetric algorithm ${algorithm}. Please configure admin.auth.options.publicKey.`\n );\n }\n } else {\n if (!config.jwtSecret) {\n throw new Error(\n `SessionManager: Secret key is required for symmetric algorithm ${algorithm}`\n );\n }\n return config.jwtSecret;\n }\n }\n\n generateSessionId(): string {\n return crypto.randomBytes(16).toString('hex');\n }\n\n private async maybeCleanupExpired(): Promise<void> {\n this.cleanupInvocationCounter += 1;\n if (this.cleanupInvocationCounter >= this.cleanupEveryCalls) {\n this.cleanupInvocationCounter = 0;\n\n await this.provider.deleteExpired();\n }\n }\n\n /**\n * Get the cleanup every calls threshold\n */\n get cleanupThreshold(): number {\n return this.cleanupEveryCalls;\n }\n\n async generateRefreshToken(\n userId: string,\n deviceId: string | undefined,\n origin: string,\n options?: { type?: 'refresh' | 'session' }\n ): Promise<{ token: string; sessionId: string; absoluteExpiresAt: string }> {\n if (!origin || typeof origin !== 'string') {\n throw new Error(\n 'SessionManager: Origin parameter is required and must be a non-empty string'\n );\n }\n\n await this.maybeCleanupExpired();\n\n const config = this.getConfigForOrigin(origin);\n const algorithm = config.algorithm || DEFAULT_ALGORITHM;\n const jwtKey = this.getJwtKey(config, algorithm, 'sign');\n const sessionId = this.generateSessionId();\n const tokenType = options?.type ?? 'refresh';\n const isRefresh = tokenType === 'refresh';\n\n const idleLifespan = isRefresh ? config.idleRefreshTokenLifespan : config.idleSessionLifespan;\n\n const maxLifespan = isRefresh ? config.maxRefreshTokenLifespan : config.maxSessionLifespan;\n\n const now = Date.now();\n const expiresAt = new Date(now + idleLifespan * 1000);\n const absoluteExpiresAt = new Date(now + maxLifespan * 1000);\n\n // Create the root record first so createdAt can be used for signing.\n const record = await this.provider.create({\n userId,\n sessionId,\n ...(deviceId && { deviceId }),\n origin,\n childId: null,\n type: tokenType,\n status: 'active',\n expiresAt,\n absoluteExpiresAt,\n });\n\n const issuedAtSeconds = Math.floor(new Date(record.createdAt ?? new Date()).getTime() / 1000);\n const expiresAtSeconds = Math.floor(new Date(record.expiresAt).getTime() / 1000);\n\n const payload: RefreshTokenPayload = {\n userId,\n sessionId,\n type: 'refresh',\n iat: issuedAtSeconds,\n exp: expiresAtSeconds,\n };\n\n // Filter out conflicting options that are already handled by the payload or used for key selection\n const jwtOptions = config.jwtOptions || {};\n const { expiresIn, privateKey, publicKey, ...jwtSignOptions } = jwtOptions;\n\n const token = jwt.sign(payload, jwtKey, {\n algorithm,\n noTimestamp: true,\n ...jwtSignOptions,\n });\n\n return {\n token,\n sessionId,\n absoluteExpiresAt: absoluteExpiresAt.toISOString(),\n };\n }\n\n validateAccessToken(\n token: string,\n origin: string\n ): { isValid: true; payload: AccessTokenPayload } | { isValid: false; payload: null } {\n if (!origin || typeof origin !== 'string') {\n throw new Error(\n 'SessionManager: Origin parameter is required and must be a non-empty string'\n );\n }\n\n try {\n const config = this.getConfigForOrigin(origin);\n const algorithm = config.algorithm || DEFAULT_ALGORITHM;\n const jwtKey = this.getJwtKey(config, algorithm, 'verify');\n const payload = jwt.verify(token, jwtKey, {\n algorithms: [algorithm],\n ...config.jwtOptions,\n }) as TokenPayload;\n\n // Ensure this is an access token\n if (!payload || payload.type !== 'access') {\n return { isValid: false, payload: null };\n }\n\n return { isValid: true, payload };\n } catch (err) {\n return { isValid: false, payload: null };\n }\n }\n\n async validateRefreshToken(token: string, origin: string): Promise<ValidateRefreshTokenResult> {\n if (!origin || typeof origin !== 'string') {\n throw new Error(\n 'SessionManager: Origin parameter is required and must be a non-empty string'\n );\n }\n\n try {\n const config = this.getConfigForOrigin(origin);\n const algorithm = config.algorithm || DEFAULT_ALGORITHM;\n const jwtKey = this.getJwtKey(config, algorithm, 'verify');\n const verifyOptions: VerifyOptions = {\n algorithms: [algorithm],\n ...config.jwtOptions,\n };\n\n const payload = jwt.verify(token, jwtKey, verifyOptions) as RefreshTokenPayload;\n\n if (payload.type !== 'refresh') {\n return { isValid: false };\n }\n\n const session = await this.provider.findBySessionId(payload.sessionId);\n if (!session) {\n return { isValid: false };\n }\n\n const now = new Date();\n if (new Date(session.expiresAt) <= now) {\n return { isValid: false };\n }\n\n // Absolute family expiry check\n if (session.absoluteExpiresAt && new Date(session.absoluteExpiresAt) <= now) {\n return { isValid: false };\n }\n\n // Only 'active' sessions are eligible to create access tokens.\n if (session.status !== 'active') {\n return { isValid: false };\n }\n\n if (session.userId !== payload.userId) {\n return { isValid: false };\n }\n\n return {\n isValid: true,\n userId: payload.userId,\n sessionId: payload.sessionId,\n };\n } catch (error: any) {\n if (error instanceof jwt.JsonWebTokenError) {\n return { isValid: false };\n }\n\n throw error;\n }\n }\n\n async invalidateRefreshToken(origin: string, userId: string, deviceId?: string): Promise<void> {\n await this.provider.deleteBy({ userId, origin, deviceId });\n }\n\n async generateAccessToken(\n refreshToken: string,\n origin: string\n ): Promise<{ token: string } | { error: string }> {\n if (!origin || typeof origin !== 'string') {\n throw new Error(\n 'SessionManager: Origin parameter is required and must be a non-empty string'\n );\n }\n\n const validation = await this.validateRefreshToken(refreshToken, origin);\n\n if (!validation.isValid) {\n return { error: 'invalid_refresh_token' };\n }\n\n const payload: Omit<AccessTokenPayload, 'iat' | 'exp'> = {\n userId: String(validation.userId!),\n sessionId: validation.sessionId!,\n type: 'access',\n };\n\n const config = this.getConfigForOrigin(origin);\n const algorithm = config.algorithm || DEFAULT_ALGORITHM;\n const jwtKey = this.getJwtKey(config, algorithm, 'sign');\n // Filter out conflicting options that are already handled by the payload or used for key selection\n const jwtOptions = config.jwtOptions || {};\n const { expiresIn, privateKey, publicKey, ...jwtSignOptions } = jwtOptions;\n\n const token = jwt.sign(payload, jwtKey, {\n algorithm,\n expiresIn: config.accessTokenLifespan,\n ...jwtSignOptions,\n });\n\n return { token };\n }\n\n async rotateRefreshToken(\n refreshToken: string,\n origin: string\n ): Promise<\n | {\n token: string;\n sessionId: string;\n absoluteExpiresAt: string;\n type: 'refresh' | 'session';\n }\n | { error: string }\n > {\n if (!origin || typeof origin !== 'string') {\n throw new Error(\n 'SessionManager: Origin parameter is required and must be a non-empty string'\n );\n }\n\n try {\n const config = this.getConfigForOrigin(origin);\n const algorithm = config.algorithm || DEFAULT_ALGORITHM;\n const jwtKey = this.getJwtKey(config, algorithm, 'verify');\n const payload = jwt.verify(refreshToken, jwtKey, {\n algorithms: [algorithm],\n ...config.jwtOptions,\n }) as RefreshTokenPayload;\n\n if (!payload || payload.type !== 'refresh') {\n return { error: 'invalid_refresh_token' };\n }\n\n const current = await this.provider.findBySessionId(payload.sessionId);\n if (!current) {\n return { error: 'invalid_refresh_token' };\n }\n\n // If parent already has a child, return the same child token\n if (current.childId) {\n const child = await this.provider.findBySessionId(current.childId);\n\n if (child) {\n const childIat = Math.floor(new Date(child.createdAt ?? new Date()).getTime() / 1000);\n const childExp = Math.floor(new Date(child.expiresAt).getTime() / 1000);\n\n const childPayload: RefreshTokenPayload = {\n userId: child.userId,\n sessionId: child.sessionId,\n type: 'refresh',\n iat: childIat,\n exp: childExp,\n };\n\n // Filter out conflicting options that are already handled by the payload\n const { expiresIn, ...jwtSignOptions } = config.jwtOptions || {};\n\n const childToken = jwt.sign(childPayload, jwtKey, {\n algorithm,\n noTimestamp: true,\n ...jwtSignOptions,\n });\n\n let absoluteExpiresAt;\n if (child.absoluteExpiresAt) {\n absoluteExpiresAt =\n typeof child.absoluteExpiresAt === 'string'\n ? child.absoluteExpiresAt\n : child.absoluteExpiresAt.toISOString();\n } else {\n absoluteExpiresAt = new Date(0).toISOString();\n }\n\n return {\n token: childToken,\n sessionId: child.sessionId,\n absoluteExpiresAt,\n type: child.type ?? 'refresh',\n };\n }\n }\n\n const now = Date.now();\n const tokenType = current.type ?? 'refresh';\n const idleLifespan =\n tokenType === 'refresh' ? config.idleRefreshTokenLifespan : config.idleSessionLifespan;\n\n // Enforce idle window since creation of the current token\n if (current.createdAt && now - new Date(current.createdAt).getTime() > idleLifespan * 1000) {\n return { error: 'idle_window_elapsed' };\n }\n\n // Enforce max family window using absoluteExpiresAt\n const absolute = current.absoluteExpiresAt\n ? new Date(current.absoluteExpiresAt).getTime()\n : now;\n if (absolute <= now) {\n return { error: 'max_window_elapsed' };\n }\n\n // Create child token\n const childSessionId = this.generateSessionId();\n const childExpiresAt = new Date(now + idleLifespan * 1000);\n\n const childRecord = await this.provider.create({\n userId: current.userId,\n sessionId: childSessionId,\n ...(current.deviceId && { deviceId: current.deviceId }),\n origin: current.origin,\n childId: null,\n type: tokenType,\n status: 'active',\n expiresAt: childExpiresAt,\n absoluteExpiresAt: current.absoluteExpiresAt ?? new Date(absolute),\n });\n\n const childIat = Math.floor(new Date(childRecord.createdAt ?? new Date()).getTime() / 1000);\n const childExp = Math.floor(new Date(childRecord.expiresAt).getTime() / 1000);\n const payloadOut: RefreshTokenPayload = {\n userId: current.userId,\n sessionId: childSessionId,\n type: 'refresh',\n iat: childIat,\n exp: childExp,\n };\n // Filter out conflicting options that are already handled by the payload\n const { expiresIn, ...jwtSignOptions } = config.jwtOptions || {};\n\n const childToken = jwt.sign(payloadOut, jwtKey, {\n algorithm,\n noTimestamp: true,\n ...jwtSignOptions,\n });\n\n await this.provider.updateBySessionId(current.sessionId, {\n status: 'rotated',\n childId: childSessionId,\n });\n\n let absoluteExpiresAt;\n if (childRecord.absoluteExpiresAt) {\n absoluteExpiresAt =\n typeof childRecord.absoluteExpiresAt === 'string'\n ? childRecord.absoluteExpiresAt\n : childRecord.absoluteExpiresAt.toISOString();\n } else {\n absoluteExpiresAt = new Date(absolute).toISOString();\n }\n\n return {\n token: childToken,\n sessionId: childSessionId,\n absoluteExpiresAt,\n type: tokenType,\n };\n } catch {\n return { error: 'invalid_refresh_token' };\n }\n }\n\n /**\n * Returns true when a session exists and is not expired.\n * If the session exists but is expired, it will be deleted as part of this check.\n */\n async isSessionActive(sessionId: string, origin: string): Promise<boolean> {\n const session = await this.provider.findBySessionId(sessionId);\n if (!session) {\n return false;\n }\n\n if (session.origin !== origin) {\n return false;\n }\n\n if (new Date(session.expiresAt) <= new Date()) {\n // Clean up expired session eagerly\n await this.provider.deleteBySessionId(sessionId);\n\n return false;\n }\n\n return true;\n }\n}\n\nconst createDatabaseProvider = (db: Database, contentType: string): SessionProvider => {\n return new DatabaseSessionProvider(db, contentType);\n};\n\nconst createSessionManager = ({\n db,\n}: {\n db: Database;\n}): SessionManager & ((origin: string) => OriginSessionManager) => {\n const provider = createDatabaseProvider(db, 'admin::session');\n const sessionManager = new SessionManager(provider);\n\n // Add callable functionality\n const fluentApi = (origin: string): OriginSessionManager => {\n if (!origin || typeof origin !== 'string') {\n throw new Error(\n 'SessionManager: Origin parameter is required and must be a non-empty string'\n );\n }\n return new OriginSessionManager(sessionManager, origin);\n };\n\n // Attach only the public SessionManagerService API to the callable\n const api = fluentApi as unknown as any;\n api.generateSessionId = sessionManager.generateSessionId.bind(sessionManager);\n api.defineOrigin = sessionManager.defineOrigin.bind(sessionManager);\n api.hasOrigin = sessionManager.hasOrigin.bind(sessionManager);\n // Note: isSessionActive is origin-scoped and exposed on OriginSessionManager only\n\n // Forward the cleanupThreshold getter (used in tests)\n Object.defineProperty(api, 'cleanupThreshold', {\n get() {\n return sessionManager.cleanupThreshold;\n },\n enumerable: true,\n });\n\n return api as SessionManager & ((origin: string) => OriginSessionManager);\n};\n\nexport { createSessionManager, createDatabaseProvider };\n"],"names":["DatabaseSessionProvider","create","session","result","db","query","contentType","data","findBySessionId","sessionId","findOne","where","updateBySessionId","update","deleteBySessionId","delete","deleteExpired","deleteMany","absoluteExpiresAt","$lt","Date","deleteBy","criteria","userId","origin","deviceId","constructor","OriginSessionManager","generateRefreshToken","options","sessionManager","generateAccessToken","refreshToken","rotateRefreshToken","validateAccessToken","token","validateRefreshToken","invalidateRefreshToken","isSessionActive","SessionManager","defineOrigin","config","originConfigs","set","hasOrigin","has","getConfigForOrigin","originConfig","get","Error","algorithm","operation","isAsymmetric","startsWith","privateKey","jwtOptions","publicKey","jwtSecret","generateSessionId","crypto","randomBytes","toString","maybeCleanupExpired","cleanupInvocationCounter","cleanupEveryCalls","provider","cleanupThreshold","DEFAULT_ALGORITHM","jwtKey","getJwtKey","tokenType","type","isRefresh","idleLifespan","idleRefreshTokenLifespan","idleSessionLifespan","maxLifespan","maxRefreshTokenLifespan","maxSessionLifespan","now","expiresAt","record","childId","status","issuedAtSeconds","Math","floor","createdAt","getTime","expiresAtSeconds","payload","iat","exp","expiresIn","jwtSignOptions","jwt","sign","noTimestamp","toISOString","verify","algorithms","isValid","err","verifyOptions","error","JsonWebTokenError","validation","String","accessTokenLifespan","current","child","childIat","childExp","childPayload","childToken","absolute","childSessionId","childExpiresAt","childRecord","payloadOut","Map","createDatabaseProvider","createSessionManager","fluentApi","api","bind","Object","defineProperty","enumerable"],"mappings":"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"}