@strapi/core 5.48.1 → 5.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/dist/Strapi.d.ts.map +1 -1
  2. package/dist/Strapi.js +11 -5
  3. package/dist/Strapi.js.map +1 -1
  4. package/dist/Strapi.mjs +2 -1
  5. package/dist/Strapi.mjs.map +1 -1
  6. package/dist/ai.d.ts +2 -0
  7. package/dist/ai.d.ts.map +1 -0
  8. package/dist/ai.js +8 -0
  9. package/dist/ai.js.map +1 -0
  10. package/dist/ai.mjs +3 -0
  11. package/dist/ai.mjs.map +1 -0
  12. package/dist/configuration/config-loader.d.ts.map +1 -1
  13. package/dist/configuration/config-loader.js +11 -6
  14. package/dist/configuration/config-loader.js.map +1 -1
  15. package/dist/configuration/get-dirs.d.ts.map +1 -1
  16. package/dist/configuration/index.d.ts +0 -3
  17. package/dist/configuration/index.d.ts.map +1 -1
  18. package/dist/configuration/index.js +22 -18
  19. package/dist/configuration/index.js.map +1 -1
  20. package/dist/configuration/index.mjs +0 -3
  21. package/dist/configuration/index.mjs.map +1 -1
  22. package/dist/configuration/server-config.d.ts +11 -0
  23. package/dist/configuration/server-config.d.ts.map +1 -0
  24. package/dist/configuration/server-config.js +16 -0
  25. package/dist/configuration/server-config.js.map +1 -0
  26. package/dist/configuration/server-config.mjs +14 -0
  27. package/dist/configuration/server-config.mjs.map +1 -0
  28. package/dist/configuration/urls.d.ts.map +1 -1
  29. package/dist/configuration/urls.js +11 -7
  30. package/dist/configuration/urls.js.map +1 -1
  31. package/dist/core-api/controller/collection-type.d.ts.map +1 -1
  32. package/dist/core-api/controller/single-type.d.ts.map +1 -1
  33. package/dist/core-api/controller/transform.d.ts.map +1 -1
  34. package/dist/core-api/routes/index.d.ts.map +1 -1
  35. package/dist/core-api/routes/index.js +3 -2
  36. package/dist/core-api/routes/index.js.map +1 -1
  37. package/dist/core-api/routes/validation/attributes.d.ts.map +1 -1
  38. package/dist/core-api/routes/validation/common.js +3 -2
  39. package/dist/core-api/routes/validation/common.js.map +1 -1
  40. package/dist/core-api/routes/validation/content-type.js +3 -2
  41. package/dist/core-api/routes/validation/content-type.js.map +1 -1
  42. package/dist/core-api/routes/validation/mappers.d.ts.map +1 -1
  43. package/dist/core-api/routes/validation/mappers.js +3 -2
  44. package/dist/core-api/routes/validation/mappers.js.map +1 -1
  45. package/dist/core-api/routes/validation/utils.d.ts.map +1 -1
  46. package/dist/core-api/routes/validation/utils.js +3 -2
  47. package/dist/core-api/routes/validation/utils.js.map +1 -1
  48. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  49. package/dist/core-api/service/pagination.d.ts.map +1 -1
  50. package/dist/core-api/service/single-type.d.ts.map +1 -1
  51. package/dist/domain/content-type/index.d.ts.map +1 -1
  52. package/dist/domain/content-type/index.js +9 -5
  53. package/dist/domain/content-type/index.js.map +1 -1
  54. package/dist/domain/content-type/validator.d.ts.map +1 -1
  55. package/dist/domain/content-type/validator.js +6 -2
  56. package/dist/domain/content-type/validator.js.map +1 -1
  57. package/dist/domain/module/index.d.ts.map +1 -1
  58. package/dist/domain/module/index.js +6 -2
  59. package/dist/domain/module/index.js.map +1 -1
  60. package/dist/domain/module/validation.d.ts.map +1 -1
  61. package/dist/ee/index.d.ts +2 -1
  62. package/dist/ee/index.d.ts.map +1 -1
  63. package/dist/ee/license.d.ts.map +1 -1
  64. package/dist/ee/license.js +8 -3
  65. package/dist/ee/license.js.map +1 -1
  66. package/dist/factories.d.ts.map +1 -1
  67. package/dist/index.d.ts +5 -1
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +2 -0
  70. package/dist/index.js.map +1 -1
  71. package/dist/index.mjs +2 -0
  72. package/dist/index.mjs.map +1 -1
  73. package/dist/loaders/admin.js +5 -1
  74. package/dist/loaders/admin.js.map +1 -1
  75. package/dist/loaders/apis.js +16 -11
  76. package/dist/loaders/apis.js.map +1 -1
  77. package/dist/loaders/components.js +6 -2
  78. package/dist/loaders/components.js.map +1 -1
  79. package/dist/loaders/middlewares.js +6 -2
  80. package/dist/loaders/middlewares.js.map +1 -1
  81. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  82. package/dist/loaders/plugins/get-enabled-plugins.js +5 -1
  83. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  84. package/dist/loaders/plugins/get-user-plugins-config.js +6 -2
  85. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  86. package/dist/loaders/plugins/index.js +8 -4
  87. package/dist/loaders/plugins/index.js.map +1 -1
  88. package/dist/loaders/policies.js +6 -2
  89. package/dist/loaders/policies.js.map +1 -1
  90. package/dist/loaders/sanitizers.d.ts.map +1 -1
  91. package/dist/loaders/src-index.d.ts.map +1 -1
  92. package/dist/loaders/validators.d.ts.map +1 -1
  93. package/dist/mcp.d.ts +4 -0
  94. package/dist/mcp.d.ts.map +1 -0
  95. package/dist/mcp.js +12 -0
  96. package/dist/mcp.js.map +1 -0
  97. package/dist/mcp.mjs +4 -0
  98. package/dist/mcp.mjs.map +1 -0
  99. package/dist/middlewares/body.d.ts.map +1 -1
  100. package/dist/middlewares/body.js +9 -4
  101. package/dist/middlewares/body.js.map +1 -1
  102. package/dist/middlewares/body.mjs +1 -1
  103. package/dist/middlewares/body.mjs.map +1 -1
  104. package/dist/middlewares/compression.js +5 -1
  105. package/dist/middlewares/compression.js.map +1 -1
  106. package/dist/middlewares/cors.d.ts.map +1 -1
  107. package/dist/middlewares/cors.js +5 -1
  108. package/dist/middlewares/cors.js.map +1 -1
  109. package/dist/middlewares/errors.d.ts +5 -0
  110. package/dist/middlewares/errors.d.ts.map +1 -1
  111. package/dist/middlewares/errors.js.map +1 -1
  112. package/dist/middlewares/errors.mjs.map +1 -1
  113. package/dist/middlewares/favicon.d.ts +0 -1
  114. package/dist/middlewares/favicon.d.ts.map +1 -1
  115. package/dist/middlewares/favicon.js +5 -1
  116. package/dist/middlewares/favicon.js.map +1 -1
  117. package/dist/middlewares/ip.js +5 -1
  118. package/dist/middlewares/ip.js.map +1 -1
  119. package/dist/middlewares/public.js +5 -1
  120. package/dist/middlewares/public.js.map +1 -1
  121. package/dist/middlewares/query.js +6 -2
  122. package/dist/middlewares/query.js.map +1 -1
  123. package/dist/middlewares/security.js +5 -1
  124. package/dist/middlewares/security.js.map +1 -1
  125. package/dist/migrations/database/5.0.0-discard-drafts.js +5 -1
  126. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  127. package/dist/migrations/draft-publish.d.ts.map +1 -1
  128. package/dist/migrations/first-published-at.d.ts.map +1 -1
  129. package/dist/migrations/first-published-at.js +5 -1
  130. package/dist/migrations/first-published-at.js.map +1 -1
  131. package/dist/migrations/i18n.d.ts.map +1 -1
  132. package/dist/migrations/index.d.ts.map +1 -1
  133. package/dist/package.json.js +18 -21
  134. package/dist/package.json.js.map +1 -1
  135. package/dist/package.json.mjs +18 -21
  136. package/dist/package.json.mjs.map +1 -1
  137. package/dist/providers/provider.d.ts.map +1 -1
  138. package/dist/registries/apis.d.ts.map +1 -1
  139. package/dist/registries/components.d.ts +1 -1
  140. package/dist/registries/components.d.ts.map +1 -1
  141. package/dist/registries/content-types.d.ts +2 -3
  142. package/dist/registries/content-types.d.ts.map +1 -1
  143. package/dist/registries/controllers.d.ts +3 -3
  144. package/dist/registries/controllers.d.ts.map +1 -1
  145. package/dist/registries/custom-fields.d.ts.map +1 -1
  146. package/dist/registries/hooks.d.ts +3 -4
  147. package/dist/registries/hooks.d.ts.map +1 -1
  148. package/dist/registries/middlewares.d.ts +2 -3
  149. package/dist/registries/middlewares.d.ts.map +1 -1
  150. package/dist/registries/models.d.ts +1 -1
  151. package/dist/registries/modules.d.ts.map +1 -1
  152. package/dist/registries/namespace.d.ts.map +1 -1
  153. package/dist/registries/plugins.d.ts.map +1 -1
  154. package/dist/registries/policies.d.ts +1 -2
  155. package/dist/registries/policies.d.ts.map +1 -1
  156. package/dist/registries/sanitizers.d.ts +2 -2
  157. package/dist/registries/sanitizers.js +7 -3
  158. package/dist/registries/sanitizers.js.map +1 -1
  159. package/dist/registries/services.d.ts +3 -3
  160. package/dist/registries/services.d.ts.map +1 -1
  161. package/dist/registries/validators.d.ts +2 -2
  162. package/dist/registries/validators.js +7 -3
  163. package/dist/registries/validators.js.map +1 -1
  164. package/dist/services/ai.d.ts.map +1 -1
  165. package/dist/services/auth/index.js +7 -3
  166. package/dist/services/auth/index.js.map +1 -1
  167. package/dist/services/config.d.ts.map +1 -1
  168. package/dist/services/content-api/index.d.ts +4 -4
  169. package/dist/services/content-api/index.d.ts.map +1 -1
  170. package/dist/services/content-api/index.js +10 -6
  171. package/dist/services/content-api/index.js.map +1 -1
  172. package/dist/services/content-api/permissions/engine.d.ts.map +1 -1
  173. package/dist/services/content-api/permissions/engine.js +5 -1
  174. package/dist/services/content-api/permissions/engine.js.map +1 -1
  175. package/dist/services/content-api/permissions/index.d.ts +2 -2
  176. package/dist/services/content-api/permissions/index.d.ts.map +1 -1
  177. package/dist/services/content-api/permissions/index.js +10 -6
  178. package/dist/services/content-api/permissions/index.js.map +1 -1
  179. package/dist/services/content-api/permissions/providers/action.d.ts +1 -1
  180. package/dist/services/content-api/permissions/providers/action.d.ts.map +1 -1
  181. package/dist/services/content-api/permissions/providers/condition.d.ts +1 -1
  182. package/dist/services/content-api/permissions/providers/condition.d.ts.map +1 -1
  183. package/dist/services/content-source-maps.d.ts.map +1 -1
  184. package/dist/services/core-store.d.ts.map +1 -1
  185. package/dist/services/cron.d.ts +5 -5
  186. package/dist/services/custom-fields.d.ts.map +1 -1
  187. package/dist/services/document-service/attributes/index.d.ts +0 -1
  188. package/dist/services/document-service/attributes/index.d.ts.map +1 -1
  189. package/dist/services/document-service/attributes/transforms.js +5 -1
  190. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  191. package/dist/services/document-service/common.d.ts.map +1 -1
  192. package/dist/services/document-service/components.d.ts +2 -2
  193. package/dist/services/document-service/components.d.ts.map +1 -1
  194. package/dist/services/document-service/components.js +14 -10
  195. package/dist/services/document-service/components.js.map +1 -1
  196. package/dist/services/document-service/components.mjs.map +1 -1
  197. package/dist/services/document-service/draft-and-publish.d.ts +0 -1
  198. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  199. package/dist/services/document-service/draft-and-publish.js +1 -1
  200. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  201. package/dist/services/document-service/draft-and-publish.mjs +1 -1
  202. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  203. package/dist/services/document-service/entries.d.ts.map +1 -1
  204. package/dist/services/document-service/entries.js +6 -2
  205. package/dist/services/document-service/entries.js.map +1 -1
  206. package/dist/services/document-service/entries.mjs +7 -3
  207. package/dist/services/document-service/entries.mjs.map +1 -1
  208. package/dist/services/document-service/events.d.ts.map +1 -1
  209. package/dist/services/document-service/first-published-at.d.ts.map +1 -1
  210. package/dist/services/document-service/index.d.ts.map +1 -1
  211. package/dist/services/document-service/internationalization.d.ts +0 -1
  212. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  213. package/dist/services/document-service/internationalization.js.map +1 -1
  214. package/dist/services/document-service/internationalization.mjs.map +1 -1
  215. package/dist/services/document-service/middlewares/middleware-manager.d.ts.map +1 -1
  216. package/dist/services/document-service/params.d.ts +1 -1
  217. package/dist/services/document-service/params.d.ts.map +1 -1
  218. package/dist/services/document-service/publication-filter.d.ts +1 -1
  219. package/dist/services/document-service/publication-filter.d.ts.map +1 -1
  220. package/dist/services/document-service/transform/data.d.ts +2 -0
  221. package/dist/services/document-service/transform/data.d.ts.map +1 -1
  222. package/dist/services/document-service/transform/data.js +7 -1
  223. package/dist/services/document-service/transform/data.js.map +1 -1
  224. package/dist/services/document-service/transform/data.mjs +7 -2
  225. package/dist/services/document-service/transform/data.mjs.map +1 -1
  226. package/dist/services/document-service/transform/fields.d.ts.map +1 -1
  227. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  228. package/dist/services/document-service/transform/id-map.js +7 -4
  229. package/dist/services/document-service/transform/id-map.js.map +1 -1
  230. package/dist/services/document-service/transform/id-map.mjs +7 -4
  231. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  232. package/dist/services/document-service/transform/id-transform.d.ts +0 -1
  233. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  234. package/dist/services/document-service/transform/populate.d.ts.map +1 -1
  235. package/dist/services/document-service/transform/query.d.ts +0 -1
  236. package/dist/services/document-service/transform/query.d.ts.map +1 -1
  237. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  238. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  239. package/dist/services/document-service/transform/relations/transform/default-locale.d.ts.map +1 -1
  240. package/dist/services/document-service/transform/relations/utils/data.d.ts.map +1 -1
  241. package/dist/services/document-service/transform/relations/utils/dp.d.ts +1 -1
  242. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  243. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  244. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts +0 -1
  245. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
  246. package/dist/services/document-service/transform/relations/utils/xto-one.d.ts.map +1 -1
  247. package/dist/services/document-service/utils/bidirectional-relations.d.ts.map +1 -1
  248. package/dist/services/document-service/utils/bidirectional-relations.js +7 -2
  249. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -1
  250. package/dist/services/document-service/utils/bidirectional-relations.mjs +7 -2
  251. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -1
  252. package/dist/services/document-service/utils/clean-component-join-table.d.ts.map +1 -1
  253. package/dist/services/document-service/utils/ordered-parallel.d.ts.map +1 -1
  254. package/dist/services/document-service/utils/populate.d.ts +1 -1
  255. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  256. package/dist/services/document-service/utils/populate.js.map +1 -1
  257. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  258. package/dist/services/document-service/utils/self-referential-relations.d.ts.map +1 -1
  259. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  260. package/dist/services/entity-service/index.d.ts.map +1 -1
  261. package/dist/services/entity-service/index.js +9 -4
  262. package/dist/services/entity-service/index.js.map +1 -1
  263. package/dist/services/entity-validator/index.d.ts.map +1 -1
  264. package/dist/services/entity-validator/index.js +9 -4
  265. package/dist/services/entity-validator/index.js.map +1 -1
  266. package/dist/services/entity-validator/index.mjs.map +1 -1
  267. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  268. package/dist/services/entity-validator/validators.js +10 -6
  269. package/dist/services/entity-validator/validators.js.map +1 -1
  270. package/dist/services/errors.d.ts.map +1 -1
  271. package/dist/services/errors.js +7 -3
  272. package/dist/services/errors.js.map +1 -1
  273. package/dist/services/features.d.ts.map +1 -1
  274. package/dist/services/fs.d.ts.map +1 -1
  275. package/dist/services/fs.js +10 -5
  276. package/dist/services/fs.js.map +1 -1
  277. package/dist/services/mcp/authentication.d.ts.map +1 -1
  278. package/dist/services/mcp/handlers/handlePost.d.ts.map +1 -1
  279. package/dist/services/mcp/index.d.ts.map +1 -1
  280. package/dist/services/mcp/internal/McpCapabilityRegistry.d.ts +2 -2
  281. package/dist/services/mcp/internal/McpServerFactory.d.ts.map +1 -1
  282. package/dist/services/mcp/internal/syncMcpSessionCapabilities.d.ts.map +1 -1
  283. package/dist/services/mcp/metrics/metrics.d.ts.map +1 -1
  284. package/dist/services/mcp/metrics/normalizeMcpCapability.d.ts.map +1 -1
  285. package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.d.ts.map +1 -1
  286. package/dist/services/mcp/middleware/oauthDiscoveryFallback.d.ts.map +1 -1
  287. package/dist/services/mcp/prompt-registry.d.ts +31 -3
  288. package/dist/services/mcp/prompt-registry.d.ts.map +1 -1
  289. package/dist/services/mcp/prompt-registry.js +31 -0
  290. package/dist/services/mcp/prompt-registry.js.map +1 -1
  291. package/dist/services/mcp/prompt-registry.mjs +31 -1
  292. package/dist/services/mcp/prompt-registry.mjs.map +1 -1
  293. package/dist/services/mcp/resource-registry.d.ts +31 -1
  294. package/dist/services/mcp/resource-registry.d.ts.map +1 -1
  295. package/dist/services/mcp/resource-registry.js +31 -0
  296. package/dist/services/mcp/resource-registry.js.map +1 -1
  297. package/dist/services/mcp/resource-registry.mjs +31 -1
  298. package/dist/services/mcp/resource-registry.mjs.map +1 -1
  299. package/dist/services/mcp/routes.d.ts +1 -1
  300. package/dist/services/mcp/routes.d.ts.map +1 -1
  301. package/dist/services/mcp/tool-registry.d.ts +36 -9
  302. package/dist/services/mcp/tool-registry.d.ts.map +1 -1
  303. package/dist/services/mcp/tool-registry.js +35 -3
  304. package/dist/services/mcp/tool-registry.js.map +1 -1
  305. package/dist/services/mcp/tool-registry.mjs +35 -3
  306. package/dist/services/mcp/tool-registry.mjs.map +1 -1
  307. package/dist/services/mcp/tools/log.d.ts +15 -85
  308. package/dist/services/mcp/tools/log.d.ts.map +1 -1
  309. package/dist/services/mcp/utils/createSafeCapabilityRegistration.d.ts.map +1 -1
  310. package/dist/services/mcp/utils/safeHandlerWrapper.d.ts.map +1 -1
  311. package/dist/services/mcp/utils/sendJsonRpcError.d.ts +0 -1
  312. package/dist/services/mcp/utils/sendJsonRpcError.d.ts.map +1 -1
  313. package/dist/services/mcp/utils/withTimeout.d.ts.map +1 -1
  314. package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
  315. package/dist/services/metrics/admin-user-hash.js +5 -1
  316. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  317. package/dist/services/metrics/index.d.ts.map +1 -1
  318. package/dist/services/metrics/is-truthy.d.ts.map +1 -1
  319. package/dist/services/metrics/is-truthy.js +5 -1
  320. package/dist/services/metrics/is-truthy.js.map +1 -1
  321. package/dist/services/metrics/middleware.d.ts.map +1 -1
  322. package/dist/services/metrics/rate-limiter.d.ts +2 -1
  323. package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
  324. package/dist/services/metrics/sender.d.ts.map +1 -1
  325. package/dist/services/metrics/sender.js +17 -9
  326. package/dist/services/metrics/sender.js.map +1 -1
  327. package/dist/services/query-params.d.ts.map +1 -1
  328. package/dist/services/reloader.d.ts.map +1 -1
  329. package/dist/services/request-context.d.ts.map +1 -1
  330. package/dist/services/server/admin-api.d.ts +3 -5
  331. package/dist/services/server/admin-api.d.ts.map +1 -1
  332. package/dist/services/server/api.d.ts +3 -4
  333. package/dist/services/server/api.d.ts.map +1 -1
  334. package/dist/services/server/api.js +5 -1
  335. package/dist/services/server/api.js.map +1 -1
  336. package/dist/services/server/compose-endpoint.d.ts.map +1 -1
  337. package/dist/services/server/compose-endpoint.js +5 -1
  338. package/dist/services/server/compose-endpoint.js.map +1 -1
  339. package/dist/services/server/content-api.d.ts +3 -5
  340. package/dist/services/server/content-api.d.ts.map +1 -1
  341. package/dist/services/server/http-server.d.ts +0 -1
  342. package/dist/services/server/http-server.d.ts.map +1 -1
  343. package/dist/services/server/http-server.js +5 -1
  344. package/dist/services/server/http-server.js.map +1 -1
  345. package/dist/services/server/index.d.ts.map +1 -1
  346. package/dist/services/server/index.js +5 -1
  347. package/dist/services/server/index.js.map +1 -1
  348. package/dist/services/server/koa-methods.d.ts +107 -0
  349. package/dist/services/server/koa-methods.d.ts.map +1 -0
  350. package/dist/services/server/koa-methods.js +24 -0
  351. package/dist/services/server/koa-methods.js.map +1 -0
  352. package/dist/services/server/koa-methods.mjs +22 -0
  353. package/dist/services/server/koa-methods.mjs.map +1 -0
  354. package/dist/services/server/koa.d.ts +0 -9
  355. package/dist/services/server/koa.d.ts.map +1 -1
  356. package/dist/services/server/koa.js +14 -10
  357. package/dist/services/server/koa.js.map +1 -1
  358. package/dist/services/server/koa.mjs +7 -9
  359. package/dist/services/server/koa.mjs.map +1 -1
  360. package/dist/services/server/middleware.d.ts.map +1 -1
  361. package/dist/services/server/middleware.js +5 -1
  362. package/dist/services/server/middleware.js.map +1 -1
  363. package/dist/services/server/openapi.d.ts.map +1 -1
  364. package/dist/services/server/openapi.js +11 -6
  365. package/dist/services/server/openapi.js.map +1 -1
  366. package/dist/services/server/policy.d.ts.map +1 -1
  367. package/dist/services/server/register-middlewares.d.ts.map +1 -1
  368. package/dist/services/server/register-routes.d.ts.map +1 -1
  369. package/dist/services/server/register-routes.js +8 -4
  370. package/dist/services/server/register-routes.js.map +1 -1
  371. package/dist/services/server/routing.d.ts +0 -2
  372. package/dist/services/server/routing.d.ts.map +1 -1
  373. package/dist/services/server/routing.js +5 -1
  374. package/dist/services/server/routing.js.map +1 -1
  375. package/dist/services/session-manager.d.ts +20 -0
  376. package/dist/services/session-manager.d.ts.map +1 -1
  377. package/dist/services/session-manager.js +71 -9
  378. package/dist/services/session-manager.js.map +1 -1
  379. package/dist/services/session-manager.mjs +57 -0
  380. package/dist/services/session-manager.mjs.map +1 -1
  381. package/dist/services/webhook-runner.js +7 -2
  382. package/dist/services/webhook-runner.js.map +1 -1
  383. package/dist/services/webhook-store.d.ts.map +1 -1
  384. package/dist/services/worker-queue.js +5 -1
  385. package/dist/services/worker-queue.js.map +1 -1
  386. package/dist/utils/convert-custom-field-type.d.ts.map +1 -1
  387. package/dist/utils/cron.d.ts.map +1 -1
  388. package/dist/utils/fetch.d.ts.map +1 -1
  389. package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
  390. package/dist/utils/filepath-to-prop-path.js +13 -8
  391. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  392. package/dist/utils/is-initialized.d.ts.map +1 -1
  393. package/dist/utils/load-config-file.d.ts.map +1 -1
  394. package/dist/utils/load-config-file.js +7 -2
  395. package/dist/utils/load-config-file.js.map +1 -1
  396. package/dist/utils/load-files.d.ts +1 -1
  397. package/dist/utils/load-files.d.ts.map +1 -1
  398. package/dist/utils/load-files.js +12 -6
  399. package/dist/utils/load-files.js.map +1 -1
  400. package/dist/utils/open-browser.d.ts +0 -1
  401. package/dist/utils/open-browser.d.ts.map +1 -1
  402. package/dist/utils/open-browser.js +5 -1
  403. package/dist/utils/open-browser.js.map +1 -1
  404. package/dist/utils/resolve-working-dirs.d.ts.map +1 -1
  405. package/dist/utils/resolve-working-dirs.js +6 -2
  406. package/dist/utils/resolve-working-dirs.js.map +1 -1
  407. package/dist/utils/signals.d.ts.map +1 -1
  408. package/dist/utils/startup-logger.d.ts.map +1 -1
  409. package/dist/utils/startup-logger.js +27 -21
  410. package/dist/utils/startup-logger.js.map +1 -1
  411. package/dist/utils/transform-content-types-to-models.d.ts +3 -3
  412. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  413. package/dist/utils/transform-content-types-to-models.js +10 -5
  414. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  415. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  416. package/dist/utils/update-notifier/index.js +21 -8
  417. package/dist/utils/update-notifier/index.js.map +1 -1
  418. package/dist/utils/update-notifier/index.mjs +6 -1
  419. package/dist/utils/update-notifier/index.mjs.map +1 -1
  420. package/package.json +18 -21
@@ -1 +1 @@
1
- {"version":3,"file":"openapi.js","sources":["../../../src/services/server/openapi.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport * as openapi from '@strapi/openapi';\nimport type { Core } from '@strapi/types';\n\ntype OpenAPIConfig = Core.Config.OpenAPI;\ntype OpenAPIRouteType = keyof OpenAPIConfig;\ntype OpenAPIEndpointConfig = NonNullable<OpenAPIConfig[OpenAPIRouteType]>;\ntype OpenAPIAccess =\n | NonNullable<NonNullable<OpenAPIConfig['content-api']>['access']>\n | NonNullable<NonNullable<OpenAPIConfig['admin']>['access']>;\n\nconst SUPPORTED_ACCESS = {\n 'content-api': ['disabled', 'public'],\n admin: ['disabled', 'authenticated'],\n} as const satisfies Record<OpenAPIRouteType, readonly OpenAPIAccess[]>;\n\ninterface ResolvedEndpointConfig {\n type: OpenAPIRouteType;\n access: OpenAPIAccess;\n routePath: string;\n routerPrefix?: string;\n fullPath: string;\n cacheEnabled: boolean;\n cacheMaxAgeMs: number;\n absoluteCachePath: string;\n}\n\nconst DEFAULTS = {\n routePath: '/openapi.json',\n access: 'disabled' as const,\n cacheEnabled: true,\n cacheMaxAgeMs: 60_000,\n cacheRelativeFilePaths: {\n 'content-api': '.strapi/openapi/content-api.json',\n admin: '.strapi/openapi/admin.json',\n } as Record<OpenAPIRouteType, string>,\n};\n\nconst normalizePath = (value: string) => {\n if (!value) {\n return DEFAULTS.routePath;\n }\n\n return value.startsWith('/') ? value : `/${value}`;\n};\n\nconst joinPaths = (basePath: string, routePath: string) => {\n const normalizedBasePath = normalizePath(basePath || '/');\n const normalizedRoutePath = normalizePath(routePath || DEFAULTS.routePath);\n\n const trimmedBasePath = normalizedBasePath === '/' ? '' : normalizedBasePath.replace(/\\/+$/, '');\n\n return `${trimmedBasePath}${normalizedRoutePath}` || '/';\n};\n\nconst stripBasePrefix = (routePath: string, basePath: string) => {\n const normalizedBasePath = normalizePath(basePath || '/');\n const normalizedRoutePath = normalizePath(routePath || DEFAULTS.routePath);\n\n if (normalizedBasePath === '/') {\n return normalizedRoutePath;\n }\n\n if (normalizedRoutePath === normalizedBasePath) {\n return '/';\n }\n\n if (normalizedRoutePath.startsWith(`${normalizedBasePath}/`)) {\n const strippedPath = normalizedRoutePath.slice(normalizedBasePath.length);\n return normalizePath(strippedPath);\n }\n\n return normalizedRoutePath;\n};\n\nconst resolveEndpointConfig = (\n strapi: Core.Strapi,\n rawConfig: OpenAPIEndpointConfig | undefined,\n type: OpenAPIRouteType\n): ResolvedEndpointConfig => {\n const apiPrefix = strapi.config.get('api.rest.prefix', '/api');\n const adminPath = strapi.config.get('admin.path', '/admin');\n const basePath = type === 'content-api' ? apiPrefix : adminPath;\n\n const configuredPath = rawConfig?.route?.path ?? DEFAULTS.routePath;\n const routePath = stripBasePrefix(configuredPath, basePath);\n const routerPrefix = type === 'admin' ? normalizePath(basePath) : undefined;\n const fullPath =\n type === 'content-api'\n ? joinPaths(normalizePath(apiPrefix), routePath)\n : joinPaths(routerPrefix!, routePath);\n const access = rawConfig?.access ?? DEFAULTS.access;\n const supportedAccess = SUPPORTED_ACCESS[type];\n\n if (!(supportedAccess as readonly OpenAPIAccess[]).includes(access)) {\n throw new Error(\n `Invalid OpenAPI access \"${access}\" for \"${type}\". Expected one of: ${supportedAccess.join(', ')}`\n );\n }\n\n const cacheEnabled = rawConfig?.cache?.enabled ?? DEFAULTS.cacheEnabled;\n const cacheMaxAgeMs = rawConfig?.cache?.maxAgeMs ?? DEFAULTS.cacheMaxAgeMs;\n const configuredCachePath = rawConfig?.cache?.filePath ?? DEFAULTS.cacheRelativeFilePaths[type];\n const absoluteCachePath = path.isAbsolute(configuredCachePath)\n ? configuredCachePath\n : path.resolve(strapi.dirs.app.root, configuredCachePath);\n\n return {\n type,\n access,\n routePath,\n routerPrefix,\n fullPath,\n cacheEnabled,\n cacheMaxAgeMs,\n absoluteCachePath,\n };\n};\n\n/**\n * Build the route `config` (auth + policies) for an endpoint.\n *\n * - `admin`: requires an authenticated admin via the `admin::isAuthenticatedAdmin`\n * policy.\n * Granular per-permission RBAC is intentionally left for a later iteration.\n * - `content-api`: only supports public access for now, which disables auth so\n * anyone can read the spec.\n */\nconst buildRouteConfig = (config: ResolvedEndpointConfig): Record<string, unknown> => {\n if (config.type === 'admin') {\n return { policies: ['admin::isAuthenticatedAdmin'] };\n }\n\n return { auth: false };\n};\n\nconst resolveOpenAPIConfig = (strapi: Core.Strapi) => {\n const rawConfig = strapi.config.get('server.openapi', {}) as OpenAPIConfig;\n\n return [\n resolveEndpointConfig(strapi, rawConfig['content-api'], 'content-api'),\n resolveEndpointConfig(strapi, rawConfig.admin, 'admin'),\n ].filter((config) => config.access !== 'disabled');\n};\n\nconst readCache = async (cachePath: string, maxAgeMs: number) => {\n if (maxAgeMs < 0) {\n return null;\n }\n\n try {\n const stat = await fs.stat(cachePath);\n const ageMs = Date.now() - stat.mtimeMs;\n\n if (ageMs > maxAgeMs) {\n return null;\n }\n\n return await fs.readJson(cachePath);\n } catch {\n return null;\n }\n};\n\nconst writeCache = async (cachePath: string, document: unknown) => {\n await fs.outputJson(cachePath, document, { spaces: 2 });\n};\n\nconst generateDocument = (strapi: Core.Strapi, type: OpenAPIRouteType) => {\n return openapi.generate(strapi, { type }).document;\n};\n\nexport const registerOpenAPIRoute = (strapi: Core.Strapi) => {\n const configs = resolveOpenAPIConfig(strapi);\n\n if (!configs.length) {\n return;\n }\n\n const fullPathSet = new Set<string>();\n\n for (const config of configs) {\n if (fullPathSet.has(config.fullPath)) {\n throw new Error(`Duplicate OpenAPI endpoint path detected: \"${config.fullPath}\"`);\n }\n\n fullPathSet.add(config.fullPath);\n }\n\n const routers = configs.map((config) => {\n const handler: Core.MiddlewareHandler = async (ctx) => {\n try {\n if (config.cacheEnabled) {\n const cachedDocument = await readCache(config.absoluteCachePath, config.cacheMaxAgeMs);\n\n if (cachedDocument) {\n ctx.set('Content-Type', 'application/json');\n ctx.body = cachedDocument;\n return;\n }\n }\n\n const document = generateDocument(strapi, config.type);\n\n if (config.cacheEnabled) {\n await writeCache(config.absoluteCachePath, document);\n }\n\n ctx.set('Content-Type', 'application/json');\n ctx.body = document;\n } catch (error) {\n strapi.log.error(error);\n ctx.internalServerError('Failed to generate OpenAPI document');\n }\n };\n\n return {\n type: config.type,\n ...(config.routerPrefix ? { prefix: config.routerPrefix } : {}),\n routes: [\n {\n method: 'GET' as const,\n path: config.routePath,\n handler,\n info: {\n type: config.type,\n },\n config: buildRouteConfig(config),\n },\n ],\n };\n });\n\n routers.forEach((router) => strapi.server.routes(router));\n};\n"],"names":["SUPPORTED_ACCESS","admin","DEFAULTS","routePath","access","cacheEnabled","cacheMaxAgeMs","cacheRelativeFilePaths","normalizePath","value","startsWith","joinPaths","basePath","normalizedBasePath","normalizedRoutePath","trimmedBasePath","replace","stripBasePrefix","strippedPath","slice","length","resolveEndpointConfig","strapi","rawConfig","type","apiPrefix","config","get","adminPath","configuredPath","route","path","routerPrefix","undefined","fullPath","supportedAccess","includes","Error","join","cache","enabled","maxAgeMs","configuredCachePath","filePath","absoluteCachePath","isAbsolute","resolve","dirs","app","root","buildRouteConfig","policies","auth","resolveOpenAPIConfig","filter","readCache","cachePath","stat","fs","ageMs","Date","now","mtimeMs","readJson","writeCache","document","outputJson","spaces","generateDocument","openapi","generate","registerOpenAPIRoute","configs","fullPathSet","Set","has","add","routers","map","handler","ctx","cachedDocument","set","body","error","log","internalServerError","prefix","routes","method","info","forEach","router","server"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAYA,MAAMA,gBAAAA,GAAmB;IACvB,aAAA,EAAe;AAAC,QAAA,UAAA;AAAY,QAAA;AAAS,KAAA;IACrCC,KAAAA,EAAO;AAAC,QAAA,UAAA;AAAY,QAAA;AAAgB;AACtC,CAAA;AAaA,MAAMC,QAAAA,GAAW;IACfC,SAAAA,EAAW,eAAA;IACXC,MAAAA,EAAQ,UAAA;IACRC,YAAAA,EAAc,IAAA;IACdC,aAAAA,EAAe,KAAA;IACfC,sBAAAA,EAAwB;QACtB,aAAA,EAAe,kCAAA;QACfN,KAAAA,EAAO;AACT;AACF,CAAA;AAEA,MAAMO,gBAAgB,CAACC,KAAAA,GAAAA;AACrB,IAAA,IAAI,CAACA,KAAAA,EAAO;AACV,QAAA,OAAOP,SAASC,SAAS;AAC3B,IAAA;IAEA,OAAOM,KAAAA,CAAMC,UAAU,CAAC,GAAA,CAAA,GAAOD,QAAQ,CAAC,CAAC,EAAEA,KAAAA,CAAAA,CAAO;AACpD,CAAA;AAEA,MAAME,SAAAA,GAAY,CAACC,QAAAA,EAAkBT,SAAAA,GAAAA;IACnC,MAAMU,kBAAAA,GAAqBL,cAAcI,QAAAA,IAAY,GAAA,CAAA;AACrD,IAAA,MAAME,mBAAAA,GAAsBN,aAAAA,CAAcL,SAAAA,IAAaD,QAAAA,CAASC,SAAS,CAAA;AAEzE,IAAA,MAAMY,kBAAkBF,kBAAAA,KAAuB,GAAA,GAAM,KAAKA,kBAAAA,CAAmBG,OAAO,CAAC,MAAA,EAAQ,EAAA,CAAA;IAE7F,OAAO,CAAA,EAAGD,eAAAA,CAAAA,EAAkBD,mBAAAA,CAAAA,CAAqB,IAAI,GAAA;AACvD,CAAA;AAEA,MAAMG,eAAAA,GAAkB,CAACd,SAAAA,EAAmBS,QAAAA,GAAAA;IAC1C,MAAMC,kBAAAA,GAAqBL,cAAcI,QAAAA,IAAY,GAAA,CAAA;AACrD,IAAA,MAAME,mBAAAA,GAAsBN,aAAAA,CAAcL,SAAAA,IAAaD,QAAAA,CAASC,SAAS,CAAA;AAEzE,IAAA,IAAIU,uBAAuB,GAAA,EAAK;QAC9B,OAAOC,mBAAAA;AACT,IAAA;AAEA,IAAA,IAAIA,wBAAwBD,kBAAAA,EAAoB;QAC9C,OAAO,GAAA;AACT,IAAA;AAEA,IAAA,IAAIC,oBAAoBJ,UAAU,CAAC,GAAGG,kBAAAA,CAAmB,CAAC,CAAC,CAAA,EAAG;AAC5D,QAAA,MAAMK,YAAAA,GAAeJ,mBAAAA,CAAoBK,KAAK,CAACN,mBAAmBO,MAAM,CAAA;AACxE,QAAA,OAAOZ,aAAAA,CAAcU,YAAAA,CAAAA;AACvB,IAAA;IAEA,OAAOJ,mBAAAA;AACT,CAAA;AAEA,MAAMO,qBAAAA,GAAwB,CAC5BC,MAAAA,EACAC,SAAAA,EACAC,IAAAA,GAAAA;AAEA,IAAA,MAAMC,YAAYH,MAAAA,CAAOI,MAAM,CAACC,GAAG,CAAC,iBAAA,EAAmB,MAAA,CAAA;AACvD,IAAA,MAAMC,YAAYN,MAAAA,CAAOI,MAAM,CAACC,GAAG,CAAC,YAAA,EAAc,QAAA,CAAA;IAClD,MAAMf,QAAAA,GAAWY,IAAAA,KAAS,aAAA,GAAgBC,SAAAA,GAAYG,SAAAA;AAEtD,IAAA,MAAMC,cAAAA,GAAiBN,SAAAA,EAAWO,KAAAA,EAAOC,IAAAA,IAAQ7B,SAASC,SAAS;IACnE,MAAMA,SAAAA,GAAYc,gBAAgBY,cAAAA,EAAgBjB,QAAAA,CAAAA;AAClD,IAAA,MAAMoB,YAAAA,GAAeR,IAAAA,KAAS,OAAA,GAAUhB,aAAAA,CAAcI,QAAAA,CAAAA,GAAYqB,SAAAA;IAClE,MAAMC,QAAAA,GACJV,SAAS,aAAA,GACLb,SAAAA,CAAUH,cAAciB,SAAAA,CAAAA,EAAYtB,SAAAA,CAAAA,GACpCQ,UAAUqB,YAAAA,EAAe7B,SAAAA,CAAAA;AAC/B,IAAA,MAAMC,MAAAA,GAASmB,SAAAA,EAAWnB,MAAAA,IAAUF,QAAAA,CAASE,MAAM;IACnD,MAAM+B,eAAAA,GAAkBnC,gBAAgB,CAACwB,IAAAA,CAAK;AAE9C,IAAA,IAAI,CAAEW,eAAAA,CAA6CC,QAAQ,CAAChC,MAAAA,CAAAA,EAAS;AACnE,QAAA,MAAM,IAAIiC,KAAAA,CACR,CAAC,wBAAwB,EAAEjC,MAAAA,CAAO,OAAO,EAAEoB,IAAAA,CAAK,oBAAoB,EAAEW,eAAAA,CAAgBG,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;AAEtG,IAAA;AAEA,IAAA,MAAMjC,YAAAA,GAAekB,SAAAA,EAAWgB,KAAAA,EAAOC,OAAAA,IAAWtC,SAASG,YAAY;AACvE,IAAA,MAAMC,aAAAA,GAAgBiB,SAAAA,EAAWgB,KAAAA,EAAOE,QAAAA,IAAYvC,SAASI,aAAa;AAC1E,IAAA,MAAMoC,sBAAsBnB,SAAAA,EAAWgB,KAAAA,EAAOI,YAAYzC,QAAAA,CAASK,sBAAsB,CAACiB,IAAAA,CAAK;AAC/F,IAAA,MAAMoB,iBAAAA,GAAoBb,IAAAA,CAAKc,UAAU,CAACH,uBACtCA,mBAAAA,GACAX,IAAAA,CAAKe,OAAO,CAACxB,OAAOyB,IAAI,CAACC,GAAG,CAACC,IAAI,EAAEP,mBAAAA,CAAAA;IAEvC,OAAO;AACLlB,QAAAA,IAAAA;AACApB,QAAAA,MAAAA;AACAD,QAAAA,SAAAA;AACA6B,QAAAA,YAAAA;AACAE,QAAAA,QAAAA;AACA7B,QAAAA,YAAAA;AACAC,QAAAA,aAAAA;AACAsC,QAAAA;AACF,KAAA;AACF,CAAA;AAEA;;;;;;;;IASA,MAAMM,mBAAmB,CAACxB,MAAAA,GAAAA;IACxB,IAAIA,MAAAA,CAAOF,IAAI,KAAK,OAAA,EAAS;QAC3B,OAAO;YAAE2B,QAAAA,EAAU;AAAC,gBAAA;AAA8B;AAAC,SAAA;AACrD,IAAA;IAEA,OAAO;QAAEC,IAAAA,EAAM;AAAM,KAAA;AACvB,CAAA;AAEA,MAAMC,uBAAuB,CAAC/B,MAAAA,GAAAA;AAC5B,IAAA,MAAMC,YAAYD,MAAAA,CAAOI,MAAM,CAACC,GAAG,CAAC,kBAAkB,EAAC,CAAA;IAEvD,OAAO;AACLN,QAAAA,qBAAAA,CAAsBC,MAAAA,EAAQC,SAAS,CAAC,aAAA,CAAc,EAAE,aAAA,CAAA;QACxDF,qBAAAA,CAAsBC,MAAAA,EAAQC,SAAAA,CAAUtB,KAAK,EAAE,OAAA;AAChD,KAAA,CAACqD,MAAM,CAAC,CAAC5B,MAAAA,GAAWA,MAAAA,CAAOtB,MAAM,KAAK,UAAA,CAAA;AACzC,CAAA;AAEA,MAAMmD,SAAAA,GAAY,OAAOC,SAAAA,EAAmBf,QAAAA,GAAAA;AAC1C,IAAA,IAAIA,WAAW,CAAA,EAAG;QAChB,OAAO,IAAA;AACT,IAAA;IAEA,IAAI;AACF,QAAA,MAAMgB,IAAAA,GAAO,MAAMC,GAAAA,CAAGD,IAAI,CAACD,SAAAA,CAAAA;AAC3B,QAAA,MAAMG,KAAAA,GAAQC,IAAAA,CAAKC,GAAG,EAAA,GAAKJ,KAAKK,OAAO;AAEvC,QAAA,IAAIH,QAAQlB,QAAAA,EAAU;YACpB,OAAO,IAAA;AACT,QAAA;QAEA,OAAO,MAAMiB,GAAAA,CAAGK,QAAQ,CAACP,SAAAA,CAAAA;AAC3B,IAAA,CAAA,CAAE,OAAM;QACN,OAAO,IAAA;AACT,IAAA;AACF,CAAA;AAEA,MAAMQ,UAAAA,GAAa,OAAOR,SAAAA,EAAmBS,QAAAA,GAAAA;AAC3C,IAAA,MAAMP,GAAAA,CAAGQ,UAAU,CAACV,SAAAA,EAAWS,QAAAA,EAAU;QAAEE,MAAAA,EAAQ;AAAE,KAAA,CAAA;AACvD,CAAA;AAEA,MAAMC,gBAAAA,GAAmB,CAAC9C,MAAAA,EAAqBE,IAAAA,GAAAA;IAC7C,OAAO6C,kBAAAA,CAAQC,QAAQ,CAAChD,MAAAA,EAAQ;AAAEE,QAAAA;AAAK,KAAA,CAAA,CAAGyC,QAAQ;AACpD,CAAA;AAEO,MAAMM,uBAAuB,CAACjD,MAAAA,GAAAA;AACnC,IAAA,MAAMkD,UAAUnB,oBAAAA,CAAqB/B,MAAAA,CAAAA;IAErC,IAAI,CAACkD,OAAAA,CAAQpD,MAAM,EAAE;AACnB,QAAA;AACF,IAAA;AAEA,IAAA,MAAMqD,cAAc,IAAIC,GAAAA,EAAAA;IAExB,KAAK,MAAMhD,UAAU8C,OAAAA,CAAS;AAC5B,QAAA,IAAIC,WAAAA,CAAYE,GAAG,CAACjD,MAAAA,CAAOQ,QAAQ,CAAA,EAAG;YACpC,MAAM,IAAIG,MAAM,CAAC,2CAA2C,EAAEX,MAAAA,CAAOQ,QAAQ,CAAC,CAAC,CAAC,CAAA;AAClF,QAAA;QAEAuC,WAAAA,CAAYG,GAAG,CAAClD,MAAAA,CAAOQ,QAAQ,CAAA;AACjC,IAAA;AAEA,IAAA,MAAM2C,OAAAA,GAAUL,OAAAA,CAAQM,GAAG,CAAC,CAACpD,MAAAA,GAAAA;AAC3B,QAAA,MAAMqD,UAAkC,OAAOC,GAAAA,GAAAA;YAC7C,IAAI;gBACF,IAAItD,MAAAA,CAAOrB,YAAY,EAAE;AACvB,oBAAA,MAAM4E,iBAAiB,MAAM1B,SAAAA,CAAU7B,OAAOkB,iBAAiB,EAAElB,OAAOpB,aAAa,CAAA;AAErF,oBAAA,IAAI2E,cAAAA,EAAgB;wBAClBD,GAAAA,CAAIE,GAAG,CAAC,cAAA,EAAgB,kBAAA,CAAA;AACxBF,wBAAAA,GAAAA,CAAIG,IAAI,GAAGF,cAAAA;AACX,wBAAA;AACF,oBAAA;AACF,gBAAA;AAEA,gBAAA,MAAMhB,QAAAA,GAAWG,gBAAAA,CAAiB9C,MAAAA,EAAQI,MAAAA,CAAOF,IAAI,CAAA;gBAErD,IAAIE,MAAAA,CAAOrB,YAAY,EAAE;oBACvB,MAAM2D,UAAAA,CAAWtC,MAAAA,CAAOkB,iBAAiB,EAAEqB,QAAAA,CAAAA;AAC7C,gBAAA;gBAEAe,GAAAA,CAAIE,GAAG,CAAC,cAAA,EAAgB,kBAAA,CAAA;AACxBF,gBAAAA,GAAAA,CAAIG,IAAI,GAAGlB,QAAAA;AACb,YAAA,CAAA,CAAE,OAAOmB,KAAAA,EAAO;gBACd9D,MAAAA,CAAO+D,GAAG,CAACD,KAAK,CAACA,KAAAA,CAAAA;AACjBJ,gBAAAA,GAAAA,CAAIM,mBAAmB,CAAC,qCAAA,CAAA;AAC1B,YAAA;AACF,QAAA,CAAA;QAEA,OAAO;AACL9D,YAAAA,IAAAA,EAAME,OAAOF,IAAI;YACjB,GAAIE,MAAAA,CAAOM,YAAY,GAAG;AAAEuD,gBAAAA,MAAAA,EAAQ7D,OAAOM;AAAa,aAAA,GAAI,EAAE;YAC9DwD,MAAAA,EAAQ;AACN,gBAAA;oBACEC,MAAAA,EAAQ,KAAA;AACR1D,oBAAAA,IAAAA,EAAML,OAAOvB,SAAS;AACtB4E,oBAAAA,OAAAA;oBACAW,IAAAA,EAAM;AACJlE,wBAAAA,IAAAA,EAAME,OAAOF;AACf,qBAAA;AACAE,oBAAAA,MAAAA,EAAQwB,gBAAAA,CAAiBxB,MAAAA;AAC3B;AACD;AACH,SAAA;AACF,IAAA,CAAA,CAAA;IAEAmD,OAAAA,CAAQc,OAAO,CAAC,CAACC,MAAAA,GAAWtE,OAAOuE,MAAM,CAACL,MAAM,CAACI,MAAAA,CAAAA,CAAAA;AACnD;;;;"}
1
+ {"version":3,"file":"openapi.js","sources":["../../../src/services/server/openapi.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport * as openapi from '@strapi/openapi';\nimport type { Core } from '@strapi/types';\n\ntype OpenAPIConfig = Core.Config.OpenAPI;\ntype OpenAPIRouteType = keyof OpenAPIConfig;\ntype OpenAPIEndpointConfig = NonNullable<OpenAPIConfig[OpenAPIRouteType]>;\ntype OpenAPIAccess =\n | NonNullable<NonNullable<OpenAPIConfig['content-api']>['access']>\n | NonNullable<NonNullable<OpenAPIConfig['admin']>['access']>;\n\nconst SUPPORTED_ACCESS = {\n 'content-api': ['disabled', 'public'],\n admin: ['disabled', 'authenticated'],\n} as const satisfies Record<OpenAPIRouteType, readonly OpenAPIAccess[]>;\n\ninterface ResolvedEndpointConfig {\n type: OpenAPIRouteType;\n access: OpenAPIAccess;\n routePath: string;\n routerPrefix?: string;\n fullPath: string;\n cacheEnabled: boolean;\n cacheMaxAgeMs: number;\n absoluteCachePath: string;\n}\n\nconst DEFAULTS = {\n routePath: '/openapi.json',\n access: 'disabled' as const,\n cacheEnabled: true,\n cacheMaxAgeMs: 60_000,\n cacheRelativeFilePaths: {\n 'content-api': '.strapi/openapi/content-api.json',\n admin: '.strapi/openapi/admin.json',\n } as Record<OpenAPIRouteType, string>,\n};\n\nconst normalizePath = (value: string) => {\n if (!value) {\n return DEFAULTS.routePath;\n }\n\n return value.startsWith('/') ? value : `/${value}`;\n};\n\nconst joinPaths = (basePath: string, routePath: string) => {\n const normalizedBasePath = normalizePath(basePath || '/');\n const normalizedRoutePath = normalizePath(routePath || DEFAULTS.routePath);\n\n const trimmedBasePath = normalizedBasePath === '/' ? '' : normalizedBasePath.replace(/\\/+$/, '');\n\n return `${trimmedBasePath}${normalizedRoutePath}` || '/';\n};\n\nconst stripBasePrefix = (routePath: string, basePath: string) => {\n const normalizedBasePath = normalizePath(basePath || '/');\n const normalizedRoutePath = normalizePath(routePath || DEFAULTS.routePath);\n\n if (normalizedBasePath === '/') {\n return normalizedRoutePath;\n }\n\n if (normalizedRoutePath === normalizedBasePath) {\n return '/';\n }\n\n if (normalizedRoutePath.startsWith(`${normalizedBasePath}/`)) {\n const strippedPath = normalizedRoutePath.slice(normalizedBasePath.length);\n return normalizePath(strippedPath);\n }\n\n return normalizedRoutePath;\n};\n\nconst resolveEndpointConfig = (\n strapi: Core.Strapi,\n rawConfig: OpenAPIEndpointConfig | undefined,\n type: OpenAPIRouteType\n): ResolvedEndpointConfig => {\n const apiPrefix = strapi.config.get('api.rest.prefix', '/api');\n const adminPath = strapi.config.get('admin.path', '/admin');\n const basePath = type === 'content-api' ? apiPrefix : adminPath;\n\n const configuredPath = rawConfig?.route?.path ?? DEFAULTS.routePath;\n const routePath = stripBasePrefix(configuredPath, basePath);\n const routerPrefix = type === 'admin' ? normalizePath(basePath) : undefined;\n const fullPath =\n type === 'content-api'\n ? joinPaths(normalizePath(apiPrefix), routePath)\n : joinPaths(routerPrefix!, routePath);\n const access = rawConfig?.access ?? DEFAULTS.access;\n const supportedAccess = SUPPORTED_ACCESS[type];\n\n if (!(supportedAccess as readonly OpenAPIAccess[]).includes(access)) {\n throw new Error(\n `Invalid OpenAPI access \"${access}\" for \"${type}\". Expected one of: ${supportedAccess.join(', ')}`\n );\n }\n\n const cacheEnabled = rawConfig?.cache?.enabled ?? DEFAULTS.cacheEnabled;\n const cacheMaxAgeMs = rawConfig?.cache?.maxAgeMs ?? DEFAULTS.cacheMaxAgeMs;\n const configuredCachePath = rawConfig?.cache?.filePath ?? DEFAULTS.cacheRelativeFilePaths[type];\n const absoluteCachePath = path.isAbsolute(configuredCachePath)\n ? configuredCachePath\n : path.resolve(strapi.dirs.app.root, configuredCachePath);\n\n return {\n type,\n access,\n routePath,\n routerPrefix,\n fullPath,\n cacheEnabled,\n cacheMaxAgeMs,\n absoluteCachePath,\n };\n};\n\n/**\n * Build the route `config` (auth + policies) for an endpoint.\n *\n * - `admin`: requires an authenticated admin via the `admin::isAuthenticatedAdmin`\n * policy.\n * Granular per-permission RBAC is intentionally left for a later iteration.\n * - `content-api`: only supports public access for now, which disables auth so\n * anyone can read the spec.\n */\nconst buildRouteConfig = (config: ResolvedEndpointConfig): Record<string, unknown> => {\n if (config.type === 'admin') {\n return { policies: ['admin::isAuthenticatedAdmin'] };\n }\n\n return { auth: false };\n};\n\nconst resolveOpenAPIConfig = (strapi: Core.Strapi) => {\n const rawConfig = strapi.config.get('server.openapi', {}) as OpenAPIConfig;\n\n return [\n resolveEndpointConfig(strapi, rawConfig['content-api'], 'content-api'),\n resolveEndpointConfig(strapi, rawConfig.admin, 'admin'),\n ].filter((config) => config.access !== 'disabled');\n};\n\nconst readCache = async (cachePath: string, maxAgeMs: number) => {\n if (maxAgeMs < 0) {\n return null;\n }\n\n try {\n const stat = await fs.stat(cachePath);\n const ageMs = Date.now() - stat.mtimeMs;\n\n if (ageMs > maxAgeMs) {\n return null;\n }\n\n return await fs.readJson(cachePath);\n } catch {\n return null;\n }\n};\n\nconst writeCache = async (cachePath: string, document: unknown) => {\n await fs.outputJson(cachePath, document, { spaces: 2 });\n};\n\nconst generateDocument = (strapi: Core.Strapi, type: OpenAPIRouteType) => {\n return openapi.generate(strapi, { type }).document;\n};\n\nexport const registerOpenAPIRoute = (strapi: Core.Strapi) => {\n const configs = resolveOpenAPIConfig(strapi);\n\n if (!configs.length) {\n return;\n }\n\n const fullPathSet = new Set<string>();\n\n for (const config of configs) {\n if (fullPathSet.has(config.fullPath)) {\n throw new Error(`Duplicate OpenAPI endpoint path detected: \"${config.fullPath}\"`);\n }\n\n fullPathSet.add(config.fullPath);\n }\n\n const routers = configs.map((config) => {\n const handler: Core.MiddlewareHandler = async (ctx) => {\n try {\n if (config.cacheEnabled) {\n const cachedDocument = await readCache(config.absoluteCachePath, config.cacheMaxAgeMs);\n\n if (cachedDocument) {\n ctx.set('Content-Type', 'application/json');\n ctx.body = cachedDocument;\n return;\n }\n }\n\n const document = generateDocument(strapi, config.type);\n\n if (config.cacheEnabled) {\n await writeCache(config.absoluteCachePath, document);\n }\n\n ctx.set('Content-Type', 'application/json');\n ctx.body = document;\n } catch (error) {\n strapi.log.error(error);\n ctx.internalServerError('Failed to generate OpenAPI document');\n }\n };\n\n return {\n type: config.type,\n ...(config.routerPrefix ? { prefix: config.routerPrefix } : {}),\n routes: [\n {\n method: 'GET' as const,\n path: config.routePath,\n handler,\n info: {\n type: config.type,\n },\n config: buildRouteConfig(config),\n },\n ],\n };\n });\n\n routers.forEach((router) => strapi.server.routes(router));\n};\n"],"names":["SUPPORTED_ACCESS","admin","DEFAULTS","routePath","access","cacheEnabled","cacheMaxAgeMs","cacheRelativeFilePaths","normalizePath","value","startsWith","joinPaths","basePath","normalizedBasePath","normalizedRoutePath","trimmedBasePath","replace","stripBasePrefix","strippedPath","slice","length","resolveEndpointConfig","strapi","rawConfig","type","apiPrefix","config","get","adminPath","configuredPath","route","path","routerPrefix","undefined","fullPath","supportedAccess","includes","Error","join","cache","enabled","maxAgeMs","configuredCachePath","filePath","absoluteCachePath","isAbsolute","resolve","dirs","app","root","buildRouteConfig","policies","auth","resolveOpenAPIConfig","filter","readCache","cachePath","stat","fs","ageMs","Date","now","mtimeMs","readJson","writeCache","document","outputJson","spaces","generateDocument","openapi","generate","registerOpenAPIRoute","configs","fullPathSet","Set","has","add","routers","map","handler","ctx","cachedDocument","set","body","error","log","internalServerError","prefix","routes","method","info","forEach","router","server"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/services/server/policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,QAAA,MAAM,yBAAyB,UAAW,KAAK,KAAK,UAAU,KAAK,MAAM,2BAmBxE,CAAC;AAEF,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/services/server/policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,QAAA,MAAM,yBAAyB,GAAI,OAAO,IAAI,CAAC,KAAK,EAAE,QAAQ,IAAI,CAAC,MAAM,2BAmBxE,CAAC;AAEF,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-middlewares.d.ts","sourceRoot":"","sources":["../../../src/services/server/register-middlewares.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAiD1C;;GAEG;AACH,QAAA,MAAM,8BAA8B,WAAkB,KAAK,MAAM,kBAchE,CAAC;AAkCF,eAAe,8BAA8B,CAAC"}
1
+ {"version":3,"file":"register-middlewares.d.ts","sourceRoot":"","sources":["../../../src/services/server/register-middlewares.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAiD1C;;GAEG;AACH,QAAA,MAAM,8BAA8B,GAAU,QAAQ,IAAI,CAAC,MAAM,kBAchE,CAAC;AAkCF,eAAe,8BAA8B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-routes.d.ts","sourceRoot":"","sources":["../../../src/services/server/register-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAiB1C;;GAEG;iCACqB,KAAK,MAAM;AAAnC,wBAKE"}
1
+ {"version":3,"file":"register-routes.d.ts","sourceRoot":"","sources":["../../../src/services/server/register-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAiB1C;;GAEG;yBACa,QAAQ,IAAI,CAAC,MAAM;AAAnC,wBAKE"}
@@ -3,10 +3,14 @@
3
3
  var _ = require('lodash');
4
4
  var openapi = require('./openapi.js');
5
5
 
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var ___default = /*#__PURE__*/_interopDefault(_);
9
+
6
10
  const createRouteScopeGenerator = (namespace)=>(route)=>{
7
11
  const prefix = namespace.endsWith('::') ? namespace : `${namespace}.`;
8
12
  if (typeof route.handler === 'string') {
9
- _.defaultsDeep(route, {
13
+ ___default.default.defaultsDeep(route, {
10
14
  config: {
11
15
  auth: {
12
16
  scope: [
@@ -33,7 +37,7 @@ const createRouteScopeGenerator = (namespace)=>(route)=>{
33
37
  // Instantiate function-like routers
34
38
  // Mutate admin.routes in-place and make sure router factories are instantiated correctly
35
39
  strapi.admin.routes = instantiateRouterInputs(strapi.admin.routes, strapi);
36
- _.forEach(strapi.admin.routes, (router)=>{
40
+ ___default.default.forEach(strapi.admin.routes, (router)=>{
37
41
  router.type = router.type || 'admin';
38
42
  router.prefix = router.prefix || `/admin`;
39
43
  router.routes.forEach((route)=>{
@@ -69,7 +73,7 @@ const createRouteScopeGenerator = (namespace)=>(route)=>{
69
73
  // Instantiate function-like routers
70
74
  // Mutate plugin.routes in-place and make sure router factories are instantiated correctly
71
75
  plugin.routes = instantiateRouterInputs(plugin.routes, strapi);
72
- _.forEach(plugin.routes, (router)=>{
76
+ ___default.default.forEach(plugin.routes, (router)=>{
73
77
  router.type = router.type ?? 'admin';
74
78
  router.prefix = router.prefix ?? `/${pluginName}`;
75
79
  router.routes.forEach((route)=>{
@@ -92,7 +96,7 @@ const createRouteScopeGenerator = (namespace)=>(route)=>{
92
96
  const generateRouteScope = createRouteScopeGenerator(`api::${apiName}`);
93
97
  // Mutate api.routes in-place and make sure router factories are instantiated correctly
94
98
  api.routes = instantiateRouterInputs(api.routes, strapi);
95
- _.forEach(api.routes, (router)=>{
99
+ ___default.default.forEach(api.routes, (router)=>{
96
100
  // TODO: remove once auth setup
97
101
  // pass meta down to compose endpoint
98
102
  router.type = 'content-api';
@@ -1 +1 @@
1
- {"version":3,"file":"register-routes.js","sources":["../../../src/services/server/register-routes.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Core } from '@strapi/types';\nimport { registerOpenAPIRoute } from './openapi';\n\nconst createRouteScopeGenerator = (namespace: string) => (route: Core.RouteInput) => {\n const prefix = namespace.endsWith('::') ? namespace : `${namespace}.`;\n\n if (typeof route.handler === 'string') {\n _.defaultsDeep(route, {\n config: {\n auth: {\n scope: [`${route.handler.startsWith(prefix) ? '' : prefix}${route.handler}`],\n },\n },\n });\n }\n};\n\n/**\n * Register all routes\n */\nexport default (strapi: Core.Strapi) => {\n registerAdminRoutes(strapi);\n registerAPIRoutes(strapi);\n registerPluginRoutes(strapi);\n registerOpenAPIRoute(strapi);\n};\n\n/**\n * Register admin routes\n * @param {import('../../').Strapi} strapi\n */\nconst registerAdminRoutes = (strapi: Core.Strapi) => {\n const generateRouteScope = createRouteScopeGenerator(`admin::`);\n\n // Instantiate function-like routers\n // Mutate admin.routes in-place and make sure router factories are instantiated correctly\n strapi.admin.routes = instantiateRouterInputs(strapi.admin.routes, strapi);\n\n _.forEach(strapi.admin.routes, (router) => {\n router.type = router.type || 'admin';\n router.prefix = router.prefix || `/admin`;\n router.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName: 'admin' };\n });\n strapi.server.routes(router);\n });\n};\n\n/**\n * Register plugin routes\n * @param {import('../../').Strapi} strapi\n */\nconst registerPluginRoutes = (strapi: Core.Strapi) => {\n for (const pluginName of Object.keys(strapi.plugins)) {\n const plugin = strapi.plugins[pluginName];\n\n const generateRouteScope = createRouteScopeGenerator(`plugin::${pluginName}`);\n\n if (Array.isArray(plugin.routes)) {\n plugin.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName };\n });\n strapi.contentAPI.applyExtraParamsToRoutes(plugin.routes);\n\n strapi.server.routes({\n type: 'admin',\n prefix: `/${pluginName}`,\n routes: plugin.routes,\n });\n } else {\n // Instantiate function-like routers\n // Mutate plugin.routes in-place and make sure router factories are instantiated correctly\n plugin.routes = instantiateRouterInputs(plugin.routes, strapi);\n\n _.forEach(plugin.routes, (router) => {\n router.type = router.type ?? 'admin';\n router.prefix = router.prefix ?? `/${pluginName}`;\n router.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName };\n });\n strapi.contentAPI.applyExtraParamsToRoutes(router.routes ?? []);\n\n strapi.server.routes(router);\n });\n }\n }\n};\n\n/**\n * Register api routes\n */\nconst registerAPIRoutes = (strapi: Core.Strapi) => {\n for (const apiName of Object.keys(strapi.apis)) {\n const api = strapi.api(apiName);\n\n const generateRouteScope = createRouteScopeGenerator(`api::${apiName}`);\n\n // Mutate api.routes in-place and make sure router factories are instantiated correctly\n api.routes = instantiateRouterInputs(api.routes, strapi);\n\n _.forEach(api.routes, (router) => {\n // TODO: remove once auth setup\n // pass meta down to compose endpoint\n router.type = 'content-api';\n router.routes?.forEach((route) => {\n generateRouteScope(route);\n route.info = { apiName };\n });\n strapi.contentAPI.applyExtraParamsToRoutes(router.routes ?? []);\n\n return strapi.server.routes(router);\n });\n }\n};\n\nconst instantiateRouterInputs = (\n routers: Record<string, Core.RouterConfig>,\n strapi: Core.Strapi\n): Record<string, Core.Router> => {\n const entries = Object.entries(routers);\n\n return entries.reduce((record, [key, inputOrCallback]) => {\n const isCallback = typeof inputOrCallback === 'function';\n\n return { ...record, [key]: isCallback ? inputOrCallback({ strapi }) : inputOrCallback };\n }, {});\n};\n"],"names":["createRouteScopeGenerator","namespace","route","prefix","endsWith","handler","_","defaultsDeep","config","auth","scope","startsWith","strapi","registerAdminRoutes","registerAPIRoutes","registerPluginRoutes","registerOpenAPIRoute","generateRouteScope","admin","routes","instantiateRouterInputs","forEach","router","type","info","pluginName","server","Object","keys","plugins","plugin","Array","isArray","contentAPI","applyExtraParamsToRoutes","apiName","apis","api","routers","entries","reduce","record","key","inputOrCallback","isCallback"],"mappings":"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"}
1
+ {"version":3,"file":"register-routes.js","sources":["../../../src/services/server/register-routes.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Core } from '@strapi/types';\nimport { registerOpenAPIRoute } from './openapi';\n\nconst createRouteScopeGenerator = (namespace: string) => (route: Core.RouteInput) => {\n const prefix = namespace.endsWith('::') ? namespace : `${namespace}.`;\n\n if (typeof route.handler === 'string') {\n _.defaultsDeep(route, {\n config: {\n auth: {\n scope: [`${route.handler.startsWith(prefix) ? '' : prefix}${route.handler}`],\n },\n },\n });\n }\n};\n\n/**\n * Register all routes\n */\nexport default (strapi: Core.Strapi) => {\n registerAdminRoutes(strapi);\n registerAPIRoutes(strapi);\n registerPluginRoutes(strapi);\n registerOpenAPIRoute(strapi);\n};\n\n/**\n * Register admin routes\n * @param {import('../../').Strapi} strapi\n */\nconst registerAdminRoutes = (strapi: Core.Strapi) => {\n const generateRouteScope = createRouteScopeGenerator(`admin::`);\n\n // Instantiate function-like routers\n // Mutate admin.routes in-place and make sure router factories are instantiated correctly\n strapi.admin.routes = instantiateRouterInputs(strapi.admin.routes, strapi);\n\n _.forEach(strapi.admin.routes, (router) => {\n router.type = router.type || 'admin';\n router.prefix = router.prefix || `/admin`;\n router.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName: 'admin' };\n });\n strapi.server.routes(router);\n });\n};\n\n/**\n * Register plugin routes\n * @param {import('../../').Strapi} strapi\n */\nconst registerPluginRoutes = (strapi: Core.Strapi) => {\n for (const pluginName of Object.keys(strapi.plugins)) {\n const plugin = strapi.plugins[pluginName];\n\n const generateRouteScope = createRouteScopeGenerator(`plugin::${pluginName}`);\n\n if (Array.isArray(plugin.routes)) {\n plugin.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName };\n });\n strapi.contentAPI.applyExtraParamsToRoutes(plugin.routes);\n\n strapi.server.routes({\n type: 'admin',\n prefix: `/${pluginName}`,\n routes: plugin.routes,\n });\n } else {\n // Instantiate function-like routers\n // Mutate plugin.routes in-place and make sure router factories are instantiated correctly\n plugin.routes = instantiateRouterInputs(plugin.routes, strapi);\n\n _.forEach(plugin.routes, (router) => {\n router.type = router.type ?? 'admin';\n router.prefix = router.prefix ?? `/${pluginName}`;\n router.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName };\n });\n strapi.contentAPI.applyExtraParamsToRoutes(router.routes ?? []);\n\n strapi.server.routes(router);\n });\n }\n }\n};\n\n/**\n * Register api routes\n */\nconst registerAPIRoutes = (strapi: Core.Strapi) => {\n for (const apiName of Object.keys(strapi.apis)) {\n const api = strapi.api(apiName);\n\n const generateRouteScope = createRouteScopeGenerator(`api::${apiName}`);\n\n // Mutate api.routes in-place and make sure router factories are instantiated correctly\n api.routes = instantiateRouterInputs(api.routes, strapi);\n\n _.forEach(api.routes, (router) => {\n // TODO: remove once auth setup\n // pass meta down to compose endpoint\n router.type = 'content-api';\n router.routes?.forEach((route) => {\n generateRouteScope(route);\n route.info = { apiName };\n });\n strapi.contentAPI.applyExtraParamsToRoutes(router.routes ?? []);\n\n return strapi.server.routes(router);\n });\n }\n};\n\nconst instantiateRouterInputs = (\n routers: Record<string, Core.RouterConfig>,\n strapi: Core.Strapi\n): Record<string, Core.Router> => {\n const entries = Object.entries(routers);\n\n return entries.reduce((record, [key, inputOrCallback]) => {\n const isCallback = typeof inputOrCallback === 'function';\n\n return { ...record, [key]: isCallback ? inputOrCallback({ strapi }) : inputOrCallback };\n }, {});\n};\n"],"names":["createRouteScopeGenerator","namespace","route","prefix","endsWith","handler","_","defaultsDeep","config","auth","scope","startsWith","strapi","registerAdminRoutes","registerAPIRoutes","registerPluginRoutes","registerOpenAPIRoute","generateRouteScope","admin","routes","instantiateRouterInputs","forEach","router","type","info","pluginName","server","Object","keys","plugins","plugin","Array","isArray","contentAPI","applyExtraParamsToRoutes","apiName","apis","api","routers","entries","reduce","record","key","inputOrCallback","isCallback"],"mappings":"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"}
@@ -1,5 +1,3 @@
1
- /// <reference types="koa" />
2
- /// <reference types="koa__router" />
3
1
  import Router from '@koa/router';
4
2
  import { yup } from '@strapi/utils';
5
3
  import type { Core } from '@strapi/types';
@@ -1 +1 @@
1
- {"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../../src/services/server/routing.ts"],"names":[],"mappings":";;AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAkE1C,QAAA,MAAM,mBAAmB,gBAAiB,KAAK,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAYxD,CAAC;AAEF,QAAA,MAAM,kBAAkB,WAAY,KAAK,MAAM,SAAQ;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;wBAmB3C,WAAW,GAAG,KAAK,UAAU,EAAE,UAAU,MAAM;CAkB3E,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../../src/services/server/routing.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAkE1C,QAAA,MAAM,mBAAmB,GAAI,aAAa,IAAI,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAYxD,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,OAAM;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO;wBAmBhD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,MAAM;CAkB3E,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -5,6 +5,10 @@ var fp = require('lodash/fp');
5
5
  var strapiUtils = require('@strapi/utils');
6
6
  var composeEndpoint = require('./compose-endpoint.js');
7
7
 
8
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
+
10
+ var Router__default = /*#__PURE__*/_interopDefault(Router);
11
+
8
12
  const policyOrMiddlewareSchema = strapiUtils.yup.lazy((value)=>{
9
13
  if (typeof value === 'string') {
10
14
  return strapiUtils.yup.string().required();
@@ -90,7 +94,7 @@ const createRouteManager = (strapi, opts = {})=>{
90
94
  if (Array.isArray(routes)) {
91
95
  routes.forEach((route)=>createRoute(route, router));
92
96
  } else if (routes.routes) {
93
- const subRouter = new Router({
97
+ const subRouter = new Router__default.default({
94
98
  prefix: routes.prefix
95
99
  });
96
100
  routes.routes.forEach((route)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"routing.js","sources":["../../../src/services/server/routing.ts"],"sourcesContent":["import Router from '@koa/router';\nimport { has } from 'lodash/fp';\nimport { yup } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport createEndpointComposer from './compose-endpoint';\n\nconst policyOrMiddlewareSchema = yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (typeof value === 'function') {\n return yup.mixed().isFunction();\n }\n\n return yup.object({\n name: yup.string().required(),\n options: yup.object().notRequired(), // any options\n });\n});\n\nconst routeSchema = yup.object({\n method: yup.string().oneOf(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'ALL']).required(),\n path: yup.string().required(),\n handler: yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (Array.isArray(value)) {\n return yup.array().required();\n }\n\n return yup.mixed().isFunction().required();\n }),\n request: yup\n .object({\n params: yup.object().notRequired(),\n query: yup.object().notRequired(),\n body: yup.object().notRequired(),\n })\n .notRequired(),\n response: yup.object().notRequired(),\n config: yup\n .object({\n auth: yup.lazy((value) => {\n if (value === false) {\n return yup.boolean().required();\n }\n\n return yup.object({\n scope: yup.array().of(yup.string()).required(),\n });\n }),\n policies: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n middlewares: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n })\n .notRequired(),\n});\n\nconst validateRouteConfig = (routeConfig: Core.RouteInput) => {\n try {\n return routeSchema.validateSync(routeConfig, {\n strict: true,\n abortEarly: false,\n stripUnknown: true,\n });\n } catch (error) {\n if (error instanceof yup.ValidationError) {\n throw new Error(`Invalid route config ${error.message}`);\n }\n }\n};\n\nconst createRouteManager = (strapi: Core.Strapi, opts: { type?: string } = {}) => {\n const { type } = opts;\n\n const composeEndpoint = createEndpointComposer(strapi);\n\n const createRoute = (route: Core.RouteInput, router: Router) => {\n validateRouteConfig(route);\n\n // NOTE: the router type is used to tag controller actions and for authentication / authorization so we need to pass this info down to the route level\n const routeWithInfo = Object.assign(route, {\n info: {\n ...(route.info ?? {}),\n type: type ?? 'api',\n },\n });\n\n composeEndpoint(routeWithInfo, { router });\n };\n\n const addRoutes = (routes: Core.Router | Core.RouteInput[], router: Router) => {\n if (Array.isArray(routes)) {\n routes.forEach((route) => createRoute(route, router));\n } else if (routes.routes) {\n const subRouter = new Router({ prefix: routes.prefix });\n\n routes.routes.forEach((route) => {\n const hasPrefix = has('prefix', route.config);\n createRoute(route, hasPrefix ? router : subRouter);\n });\n\n return router.use(subRouter.routes(), subRouter.allowedMethods());\n }\n };\n\n return {\n addRoutes,\n };\n};\n\nexport { validateRouteConfig, createRouteManager };\n"],"names":["policyOrMiddlewareSchema","yup","lazy","value","string","required","mixed","isFunction","object","name","options","notRequired","routeSchema","method","oneOf","path","handler","Array","isArray","array","request","params","query","body","response","config","auth","boolean","scope","of","policies","middlewares","validateRouteConfig","routeConfig","validateSync","strict","abortEarly","stripUnknown","error","ValidationError","Error","message","createRouteManager","strapi","opts","type","composeEndpoint","createEndpointComposer","createRoute","route","router","routeWithInfo","Object","assign","info","addRoutes","routes","forEach","subRouter","Router","prefix","hasPrefix","has","use","allowedMethods"],"mappings":";;;;;;;AAOA,MAAMA,wBAAAA,GAA2BC,eAAAA,CAAIC,IAAI,CAAC,CAACC,KAAAA,GAAAA;IACzC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAOF,eAAAA,CAAIG,MAAM,EAAA,CAAGC,QAAQ,EAAA;AAC9B,IAAA;IAEA,IAAI,OAAOF,UAAU,UAAA,EAAY;QAC/B,OAAOF,eAAAA,CAAIK,KAAK,EAAA,CAAGC,UAAU,EAAA;AAC/B,IAAA;IAEA,OAAON,eAAAA,CAAIO,MAAM,CAAC;QAChBC,IAAAA,EAAMR,eAAAA,CAAIG,MAAM,EAAA,CAAGC,QAAQ,EAAA;QAC3BK,OAAAA,EAAST,eAAAA,CAAIO,MAAM,EAAA,CAAGG,WAAW;AACnC,KAAA,CAAA;AACF,CAAA,CAAA;AAEA,MAAMC,WAAAA,GAAcX,eAAAA,CAAIO,MAAM,CAAC;AAC7BK,IAAAA,MAAAA,EAAQZ,eAAAA,CAAIG,MAAM,EAAA,CAAGU,KAAK,CAAC;AAAC,QAAA,KAAA;AAAO,QAAA,MAAA;AAAQ,QAAA,KAAA;AAAO,QAAA,OAAA;AAAS,QAAA,QAAA;AAAU,QAAA;AAAM,KAAA,CAAA,CAAET,QAAQ,EAAA;IACrFU,IAAAA,EAAMd,eAAAA,CAAIG,MAAM,EAAA,CAAGC,QAAQ,EAAA;IAC3BW,OAAAA,EAASf,eAAAA,CAAIC,IAAI,CAAC,CAACC,KAAAA,GAAAA;QACjB,IAAI,OAAOA,UAAU,QAAA,EAAU;YAC7B,OAAOF,eAAAA,CAAIG,MAAM,EAAA,CAAGC,QAAQ,EAAA;AAC9B,QAAA;QAEA,IAAIY,KAAAA,CAAMC,OAAO,CAACf,KAAAA,CAAAA,EAAQ;YACxB,OAAOF,eAAAA,CAAIkB,KAAK,EAAA,CAAGd,QAAQ,EAAA;AAC7B,QAAA;AAEA,QAAA,OAAOJ,eAAAA,CAAIK,KAAK,EAAA,CAAGC,UAAU,GAAGF,QAAQ,EAAA;AAC1C,IAAA,CAAA,CAAA;IACAe,OAAAA,EAASnB,eAAAA,CACNO,MAAM,CAAC;QACNa,MAAAA,EAAQpB,eAAAA,CAAIO,MAAM,EAAA,CAAGG,WAAW,EAAA;QAChCW,KAAAA,EAAOrB,eAAAA,CAAIO,MAAM,EAAA,CAAGG,WAAW,EAAA;QAC/BY,IAAAA,EAAMtB,eAAAA,CAAIO,MAAM,EAAA,CAAGG,WAAW;AAChC,KAAA,CAAA,CACCA,WAAW,EAAA;IACda,QAAAA,EAAUvB,eAAAA,CAAIO,MAAM,EAAA,CAAGG,WAAW,EAAA;IAClCc,MAAAA,EAAQxB,eAAAA,CACLO,MAAM,CAAC;QACNkB,IAAAA,EAAMzB,eAAAA,CAAIC,IAAI,CAAC,CAACC,KAAAA,GAAAA;AACd,YAAA,IAAIA,UAAU,KAAA,EAAO;gBACnB,OAAOF,eAAAA,CAAI0B,OAAO,EAAA,CAAGtB,QAAQ,EAAA;AAC/B,YAAA;YAEA,OAAOJ,eAAAA,CAAIO,MAAM,CAAC;gBAChBoB,KAAAA,EAAO3B,eAAAA,CAAIkB,KAAK,EAAA,CAAGU,EAAE,CAAC5B,eAAAA,CAAIG,MAAM,IAAIC,QAAQ;AAC9C,aAAA,CAAA;AACF,QAAA,CAAA,CAAA;QACAyB,QAAAA,EAAU7B,eAAAA,CACPkB,KAAK,EACN;SACCU,EAAE,CAAC7B,0BACHW,WAAW,EAAA;QACdoB,WAAAA,EAAa9B,eAAAA,CACVkB,KAAK,EACN;SACCU,EAAE,CAAC7B,0BACHW,WAAW;AAChB,KAAA,CAAA,CACCA,WAAW;AAChB,CAAA,CAAA;AAEA,MAAMqB,sBAAsB,CAACC,WAAAA,GAAAA;IAC3B,IAAI;QACF,OAAOrB,WAAAA,CAAYsB,YAAY,CAACD,WAAAA,EAAa;YAC3CE,MAAAA,EAAQ,IAAA;YACRC,UAAAA,EAAY,KAAA;YACZC,YAAAA,EAAc;AAChB,SAAA,CAAA;AACF,IAAA,CAAA,CAAE,OAAOC,KAAAA,EAAO;QACd,IAAIA,KAAAA,YAAiBrC,eAAAA,CAAIsC,eAAe,EAAE;AACxC,YAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,qBAAqB,EAAEF,KAAAA,CAAMG,OAAO,CAAA,CAAE,CAAA;AACzD,QAAA;AACF,IAAA;AACF;AAEA,MAAMC,kBAAAA,GAAqB,CAACC,MAAAA,EAAqBC,IAAAA,GAA0B,EAAE,GAAA;IAC3E,MAAM,EAAEC,IAAI,EAAE,GAAGD,IAAAA;AAEjB,IAAA,MAAME,oBAAkBC,eAAAA,CAAuBJ,MAAAA,CAAAA;IAE/C,MAAMK,WAAAA,GAAc,CAACC,KAAAA,EAAwBC,MAAAA,GAAAA;QAC3ClB,mBAAAA,CAAoBiB,KAAAA,CAAAA;;AAGpB,QAAA,MAAME,aAAAA,GAAgBC,MAAAA,CAAOC,MAAM,CAACJ,KAAAA,EAAO;YACzCK,IAAAA,EAAM;AACJ,gBAAA,GAAIL,KAAAA,CAAMK,IAAI,IAAI,EAAE;AACpBT,gBAAAA,IAAAA,EAAMA,IAAAA,IAAQ;AAChB;AACF,SAAA,CAAA;AAEAC,QAAAA,iBAAAA,CAAgBK,aAAAA,EAAe;AAAED,YAAAA;AAAO,SAAA,CAAA;AAC1C,IAAA,CAAA;IAEA,MAAMK,SAAAA,GAAY,CAACC,MAAAA,EAAyCN,MAAAA,GAAAA;QAC1D,IAAIjC,KAAAA,CAAMC,OAAO,CAACsC,MAAAA,CAAAA,EAAS;AACzBA,YAAAA,MAAAA,CAAOC,OAAO,CAAC,CAACR,KAAAA,GAAUD,YAAYC,KAAAA,EAAOC,MAAAA,CAAAA,CAAAA;QAC/C,CAAA,MAAO,IAAIM,MAAAA,CAAOA,MAAM,EAAE;YACxB,MAAME,SAAAA,GAAY,IAAIC,MAAAA,CAAO;AAAEC,gBAAAA,MAAAA,EAAQJ,OAAOI;AAAO,aAAA,CAAA;AAErDJ,YAAAA,MAAAA,CAAOA,MAAM,CAACC,OAAO,CAAC,CAACR,KAAAA,GAAAA;AACrB,gBAAA,MAAMY,SAAAA,GAAYC,MAAAA,CAAI,QAAA,EAAUb,KAAAA,CAAMxB,MAAM,CAAA;gBAC5CuB,WAAAA,CAAYC,KAAAA,EAAOY,YAAYX,MAAAA,GAASQ,SAAAA,CAAAA;AAC1C,YAAA,CAAA,CAAA;AAEA,YAAA,OAAOR,OAAOa,GAAG,CAACL,UAAUF,MAAM,EAAA,EAAIE,UAAUM,cAAc,EAAA,CAAA;AAChE,QAAA;AACF,IAAA,CAAA;IAEA,OAAO;AACLT,QAAAA;AACF,KAAA;AACF;;;;;"}
1
+ {"version":3,"file":"routing.js","sources":["../../../src/services/server/routing.ts"],"sourcesContent":["import Router from '@koa/router';\nimport { has } from 'lodash/fp';\nimport { yup } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport createEndpointComposer from './compose-endpoint';\n\nconst policyOrMiddlewareSchema = yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (typeof value === 'function') {\n return yup.mixed().isFunction();\n }\n\n return yup.object({\n name: yup.string().required(),\n options: yup.object().notRequired(), // any options\n });\n});\n\nconst routeSchema = yup.object({\n method: yup.string().oneOf(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'ALL']).required(),\n path: yup.string().required(),\n handler: yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (Array.isArray(value)) {\n return yup.array().required();\n }\n\n return yup.mixed().isFunction().required();\n }),\n request: yup\n .object({\n params: yup.object().notRequired(),\n query: yup.object().notRequired(),\n body: yup.object().notRequired(),\n })\n .notRequired(),\n response: yup.object().notRequired(),\n config: yup\n .object({\n auth: yup.lazy((value) => {\n if (value === false) {\n return yup.boolean().required();\n }\n\n return yup.object({\n scope: yup.array().of(yup.string()).required(),\n });\n }),\n policies: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n middlewares: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n })\n .notRequired(),\n});\n\nconst validateRouteConfig = (routeConfig: Core.RouteInput) => {\n try {\n return routeSchema.validateSync(routeConfig, {\n strict: true,\n abortEarly: false,\n stripUnknown: true,\n });\n } catch (error) {\n if (error instanceof yup.ValidationError) {\n throw new Error(`Invalid route config ${error.message}`);\n }\n }\n};\n\nconst createRouteManager = (strapi: Core.Strapi, opts: { type?: string } = {}) => {\n const { type } = opts;\n\n const composeEndpoint = createEndpointComposer(strapi);\n\n const createRoute = (route: Core.RouteInput, router: Router) => {\n validateRouteConfig(route);\n\n // NOTE: the router type is used to tag controller actions and for authentication / authorization so we need to pass this info down to the route level\n const routeWithInfo = Object.assign(route, {\n info: {\n ...(route.info ?? {}),\n type: type ?? 'api',\n },\n });\n\n composeEndpoint(routeWithInfo, { router });\n };\n\n const addRoutes = (routes: Core.Router | Core.RouteInput[], router: Router) => {\n if (Array.isArray(routes)) {\n routes.forEach((route) => createRoute(route, router));\n } else if (routes.routes) {\n const subRouter = new Router({ prefix: routes.prefix });\n\n routes.routes.forEach((route) => {\n const hasPrefix = has('prefix', route.config);\n createRoute(route, hasPrefix ? router : subRouter);\n });\n\n return router.use(subRouter.routes(), subRouter.allowedMethods());\n }\n };\n\n return {\n addRoutes,\n };\n};\n\nexport { validateRouteConfig, createRouteManager };\n"],"names":["policyOrMiddlewareSchema","yup","lazy","value","string","required","mixed","isFunction","object","name","options","notRequired","routeSchema","method","oneOf","path","handler","Array","isArray","array","request","params","query","body","response","config","auth","boolean","scope","of","policies","middlewares","validateRouteConfig","routeConfig","validateSync","strict","abortEarly","stripUnknown","error","ValidationError","Error","message","createRouteManager","strapi","opts","type","composeEndpoint","createEndpointComposer","createRoute","route","router","routeWithInfo","Object","assign","info","addRoutes","routes","forEach","subRouter","Router","prefix","hasPrefix","has","use","allowedMethods"],"mappings":"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"}
@@ -3,6 +3,11 @@ import type { Database } from '@strapi/database';
3
3
  export interface SessionProvider {
4
4
  create(session: SessionData): Promise<SessionData>;
5
5
  findBySessionId(sessionId: string): Promise<SessionData | null>;
6
+ findByUser(criteria: {
7
+ userId: string;
8
+ origin: string;
9
+ status?: SessionData['status'];
10
+ }): Promise<SessionData[]>;
6
11
  updateBySessionId(sessionId: string, data: Partial<SessionData>): Promise<void>;
7
12
  deleteBySessionId(sessionId: string): Promise<void>;
8
13
  deleteExpired(): Promise<void>;
@@ -21,6 +26,7 @@ export interface SessionData {
21
26
  childId?: string | null;
22
27
  type?: 'refresh' | 'session';
23
28
  status?: 'active' | 'rotated' | 'revoked';
29
+ metadata?: Record<string, unknown> | null;
24
30
  expiresAt: Date;
25
31
  absoluteExpiresAt?: Date | null;
26
32
  createdAt?: Date;
@@ -63,6 +69,7 @@ declare class OriginSessionManager {
63
69
  constructor(sessionManager: SessionManager, origin: string);
64
70
  generateRefreshToken(userId: string, deviceId: string | undefined, options?: {
65
71
  type?: 'refresh' | 'session';
72
+ metadata?: Record<string, unknown>;
66
73
  }): Promise<{
67
74
  token: string;
68
75
  sessionId: string;
@@ -90,6 +97,16 @@ declare class OriginSessionManager {
90
97
  };
91
98
  validateRefreshToken(token: string): Promise<ValidateRefreshTokenResult>;
92
99
  invalidateRefreshToken(userId: string, deviceId?: string): Promise<void>;
100
+ /**
101
+ * Lists the active sessions of a user for this origin. Rotated/expired records
102
+ * are excluded so each live login family yields a single entry.
103
+ */
104
+ listSessions(userId: string): Promise<SessionData[]>;
105
+ /**
106
+ * Revokes a single session by id, but only if it belongs to the given user and origin.
107
+ * Returns true when a matching session was found and deleted.
108
+ */
109
+ revokeSessionById(userId: string, sessionId: string): Promise<boolean>;
93
110
  /**
94
111
  * Returns true when a session exists and is not expired for this origin.
95
112
  * If the session exists but is expired, it will be deleted as part of this check.
@@ -126,6 +143,7 @@ declare class SessionManager {
126
143
  get cleanupThreshold(): number;
127
144
  generateRefreshToken(userId: string, deviceId: string | undefined, origin: string, options?: {
128
145
  type?: 'refresh' | 'session';
146
+ metadata?: Record<string, unknown>;
129
147
  }): Promise<{
130
148
  token: string;
131
149
  sessionId: string;
@@ -140,6 +158,8 @@ declare class SessionManager {
140
158
  };
141
159
  validateRefreshToken(token: string, origin: string): Promise<ValidateRefreshTokenResult>;
142
160
  invalidateRefreshToken(origin: string, userId: string, deviceId?: string): Promise<void>;
161
+ listSessions(origin: string, userId: string): Promise<SessionData[]>;
162
+ revokeSessionById(origin: string, userId: string, sessionId: string): Promise<boolean>;
143
163
  generateAccessToken(refreshToken: string, origin: string): Promise<{
144
164
  token: string;
145
165
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/services/session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/services/session-manager.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,11 @@ var crypto = require('crypto');
4
4
  var jwt = require('jsonwebtoken');
5
5
  var constants = require('../constants.js');
6
6
 
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var crypto__default = /*#__PURE__*/_interopDefault(crypto);
10
+ var jwt__default = /*#__PURE__*/_interopDefault(jwt);
11
+
7
12
  class DatabaseSessionProvider {
8
13
  async create(session) {
9
14
  const result = await this.db.query(this.contentType).create({
@@ -19,6 +24,21 @@ class DatabaseSessionProvider {
19
24
  });
20
25
  return result;
21
26
  }
27
+ async findByUser(criteria) {
28
+ const results = await this.db.query(this.contentType).findMany({
29
+ where: {
30
+ userId: criteria.userId,
31
+ origin: criteria.origin,
32
+ ...criteria.status ? {
33
+ status: criteria.status
34
+ } : {}
35
+ },
36
+ orderBy: {
37
+ createdAt: 'DESC'
38
+ }
39
+ });
40
+ return results;
41
+ }
22
42
  async updateBySessionId(sessionId, data) {
23
43
  await this.db.query(this.contentType).update({
24
44
  where: {
@@ -83,6 +103,18 @@ class OriginSessionManager {
83
103
  return this.sessionManager.invalidateRefreshToken(this.origin, userId, deviceId);
84
104
  }
85
105
  /**
106
+ * Lists the active sessions of a user for this origin. Rotated/expired records
107
+ * are excluded so each live login family yields a single entry.
108
+ */ async listSessions(userId) {
109
+ return this.sessionManager.listSessions(this.origin, userId);
110
+ }
111
+ /**
112
+ * Revokes a single session by id, but only if it belongs to the given user and origin.
113
+ * Returns true when a matching session was found and deleted.
114
+ */ async revokeSessionById(userId, sessionId) {
115
+ return this.sessionManager.revokeSessionById(this.origin, userId, sessionId);
116
+ }
117
+ /**
86
118
  * Returns true when a session exists and is not expired for this origin.
87
119
  * If the session exists but is expired, it will be deleted as part of this check.
88
120
  */ async isSessionActive(sessionId) {
@@ -140,7 +172,7 @@ class SessionManager {
140
172
  }
141
173
  }
142
174
  generateSessionId() {
143
- return crypto.randomBytes(16).toString('hex');
175
+ return crypto__default.default.randomBytes(16).toString('hex');
144
176
  }
145
177
  async maybeCleanupExpired() {
146
178
  this.cleanupInvocationCounter += 1;
@@ -181,6 +213,9 @@ class SessionManager {
181
213
  childId: null,
182
214
  type: tokenType,
183
215
  status: 'active',
216
+ ...options?.metadata ? {
217
+ metadata: options.metadata
218
+ } : {},
184
219
  expiresAt,
185
220
  absoluteExpiresAt
186
221
  });
@@ -196,7 +231,7 @@ class SessionManager {
196
231
  // Filter out conflicting options that are already handled by the payload or used for key selection
197
232
  const jwtOptions = config.jwtOptions || {};
198
233
  const { expiresIn, privateKey, publicKey, ...jwtSignOptions } = jwtOptions;
199
- const token = jwt.sign(payload, jwtKey, {
234
+ const token = jwt__default.default.sign(payload, jwtKey, {
200
235
  algorithm,
201
236
  noTimestamp: true,
202
237
  ...jwtSignOptions
@@ -215,7 +250,7 @@ class SessionManager {
215
250
  const config = this.getConfigForOrigin(origin);
216
251
  const algorithm = config.algorithm || constants.DEFAULT_ALGORITHM;
217
252
  const jwtKey = this.getJwtKey(config, algorithm, 'verify');
218
- const payload = jwt.verify(token, jwtKey, {
253
+ const payload = jwt__default.default.verify(token, jwtKey, {
219
254
  algorithms: [
220
255
  algorithm
221
256
  ],
@@ -253,7 +288,7 @@ class SessionManager {
253
288
  ],
254
289
  ...config.jwtOptions
255
290
  };
256
- const payload = jwt.verify(token, jwtKey, verifyOptions);
291
+ const payload = jwt__default.default.verify(token, jwtKey, verifyOptions);
257
292
  if (payload.type !== 'refresh') {
258
293
  return {
259
294
  isValid: false
@@ -294,7 +329,7 @@ class SessionManager {
294
329
  sessionId: payload.sessionId
295
330
  };
296
331
  } catch (error) {
297
- if (error instanceof jwt.JsonWebTokenError) {
332
+ if (error instanceof jwt__default.default.JsonWebTokenError) {
298
333
  return {
299
334
  isValid: false
300
335
  };
@@ -309,6 +344,28 @@ class SessionManager {
309
344
  deviceId
310
345
  });
311
346
  }
347
+ async listSessions(origin, userId) {
348
+ if (!origin || typeof origin !== 'string') {
349
+ throw new Error('SessionManager: Origin parameter is required and must be a non-empty string');
350
+ }
351
+ return this.provider.findByUser({
352
+ userId,
353
+ origin,
354
+ status: 'active'
355
+ });
356
+ }
357
+ async revokeSessionById(origin, userId, sessionId) {
358
+ if (!origin || typeof origin !== 'string') {
359
+ throw new Error('SessionManager: Origin parameter is required and must be a non-empty string');
360
+ }
361
+ const session = await this.provider.findBySessionId(sessionId);
362
+ // Only allow revoking a session that belongs to the requesting user and origin.
363
+ if (session?.userId !== userId || session?.origin !== origin) {
364
+ return false;
365
+ }
366
+ await this.provider.deleteBySessionId(sessionId);
367
+ return true;
368
+ }
312
369
  async generateAccessToken(refreshToken, origin) {
313
370
  if (!origin || typeof origin !== 'string') {
314
371
  throw new Error('SessionManager: Origin parameter is required and must be a non-empty string');
@@ -330,7 +387,7 @@ class SessionManager {
330
387
  // Filter out conflicting options that are already handled by the payload or used for key selection
331
388
  const jwtOptions = config.jwtOptions || {};
332
389
  const { expiresIn, privateKey, publicKey, ...jwtSignOptions } = jwtOptions;
333
- const token = jwt.sign(payload, jwtKey, {
390
+ const token = jwt__default.default.sign(payload, jwtKey, {
334
391
  algorithm,
335
392
  expiresIn: config.accessTokenLifespan,
336
393
  ...jwtSignOptions
@@ -347,7 +404,7 @@ class SessionManager {
347
404
  const config = this.getConfigForOrigin(origin);
348
405
  const algorithm = config.algorithm || constants.DEFAULT_ALGORITHM;
349
406
  const jwtKey = this.getJwtKey(config, algorithm, 'verify');
350
- const payload = jwt.verify(refreshToken, jwtKey, {
407
+ const payload = jwt__default.default.verify(refreshToken, jwtKey, {
351
408
  algorithms: [
352
409
  algorithm
353
410
  ],
@@ -379,7 +436,7 @@ class SessionManager {
379
436
  };
380
437
  // Filter out conflicting options that are already handled by the payload
381
438
  const { expiresIn, ...jwtSignOptions } = config.jwtOptions || {};
382
- const childToken = jwt.sign(childPayload, jwtKey, {
439
+ const childToken = jwt__default.default.sign(childPayload, jwtKey, {
383
440
  algorithm,
384
441
  noTimestamp: true,
385
442
  ...jwtSignOptions
@@ -427,6 +484,11 @@ class SessionManager {
427
484
  childId: null,
428
485
  type: tokenType,
429
486
  status: 'active',
487
+ // Preserve origin-defined metadata (e.g. deviceName, loginAt) across rotation so the
488
+ // active record always reflects the original session details.
489
+ ...current.metadata ? {
490
+ metadata: current.metadata
491
+ } : {},
430
492
  expiresAt: childExpiresAt,
431
493
  absoluteExpiresAt: current.absoluteExpiresAt ?? new Date(absolute)
432
494
  });
@@ -441,7 +503,7 @@ class SessionManager {
441
503
  };
442
504
  // Filter out conflicting options that are already handled by the payload
443
505
  const { expiresIn, ...jwtSignOptions } = config.jwtOptions || {};
444
- const childToken = jwt.sign(payloadOut, jwtKey, {
506
+ const childToken = jwt__default.default.sign(payloadOut, jwtKey, {
445
507
  algorithm,
446
508
  noTimestamp: true,
447
509
  ...jwtSignOptions