@strapi/core 5.0.0-alpha.5 → 5.0.0-alpha.8

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 (467) hide show
  1. package/dist/Strapi.d.ts +33 -33
  2. package/dist/Strapi.d.ts.map +1 -1
  3. package/dist/Strapi.js +5 -1
  4. package/dist/Strapi.js.map +1 -1
  5. package/dist/Strapi.mjs +5 -1
  6. package/dist/Strapi.mjs.map +1 -1
  7. package/dist/configuration/index.js.map +1 -1
  8. package/dist/configuration/index.mjs.map +1 -1
  9. package/dist/container.d.ts +2 -2
  10. package/dist/container.d.ts.map +1 -1
  11. package/dist/container.js.map +1 -1
  12. package/dist/container.mjs.map +1 -1
  13. package/dist/core-api/controller/collection-type.d.ts +3 -3
  14. package/dist/core-api/controller/collection-type.d.ts.map +1 -1
  15. package/dist/core-api/controller/collection-type.js.map +1 -1
  16. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  17. package/dist/core-api/controller/index.d.ts +3 -3
  18. package/dist/core-api/controller/index.d.ts.map +1 -1
  19. package/dist/core-api/controller/index.js +5 -5
  20. package/dist/core-api/controller/index.js.map +1 -1
  21. package/dist/core-api/controller/index.mjs +6 -6
  22. package/dist/core-api/controller/index.mjs.map +1 -1
  23. package/dist/core-api/controller/single-type.d.ts +3 -3
  24. package/dist/core-api/controller/single-type.d.ts.map +1 -1
  25. package/dist/core-api/controller/single-type.js.map +1 -1
  26. package/dist/core-api/controller/single-type.mjs.map +1 -1
  27. package/dist/core-api/controller/transform.d.ts +2 -2
  28. package/dist/core-api/controller/transform.d.ts.map +1 -1
  29. package/dist/core-api/controller/transform.js +2 -5
  30. package/dist/core-api/controller/transform.js.map +1 -1
  31. package/dist/core-api/controller/transform.mjs +2 -5
  32. package/dist/core-api/controller/transform.mjs.map +1 -1
  33. package/dist/core-api/service/collection-type.d.ts +10 -10
  34. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  35. package/dist/core-api/service/collection-type.js.map +1 -1
  36. package/dist/core-api/service/collection-type.mjs.map +1 -1
  37. package/dist/core-api/service/index.d.ts +3 -3
  38. package/dist/core-api/service/index.d.ts.map +1 -1
  39. package/dist/core-api/service/index.js.map +1 -1
  40. package/dist/core-api/service/index.mjs.map +1 -1
  41. package/dist/core-api/service/single-type.d.ts +4 -4
  42. package/dist/core-api/service/single-type.d.ts.map +1 -1
  43. package/dist/core-api/service/single-type.js.map +1 -1
  44. package/dist/core-api/service/single-type.mjs.map +1 -1
  45. package/dist/domain/content-type/index.d.ts +1 -1
  46. package/dist/domain/content-type/index.d.ts.map +1 -1
  47. package/dist/domain/module/index.d.ts +24 -23
  48. package/dist/domain/module/index.d.ts.map +1 -1
  49. package/dist/domain/module/index.js +2 -1
  50. package/dist/domain/module/index.js.map +1 -1
  51. package/dist/domain/module/index.mjs +3 -2
  52. package/dist/domain/module/index.mjs.map +1 -1
  53. package/dist/ee/index.d.ts +2 -2
  54. package/dist/ee/index.d.ts.map +1 -1
  55. package/dist/ee/index.js.map +1 -1
  56. package/dist/ee/index.mjs.map +1 -1
  57. package/dist/ee/license.d.ts +2 -2
  58. package/dist/ee/license.d.ts.map +1 -1
  59. package/dist/ee/license.js.map +1 -1
  60. package/dist/ee/license.mjs.map +1 -1
  61. package/dist/factories.d.ts +10 -10
  62. package/dist/factories.d.ts.map +1 -1
  63. package/dist/factories.js +6 -2
  64. package/dist/factories.js.map +1 -1
  65. package/dist/factories.mjs +6 -2
  66. package/dist/factories.mjs.map +1 -1
  67. package/dist/loaders/admin.d.ts +2 -2
  68. package/dist/loaders/admin.d.ts.map +1 -1
  69. package/dist/loaders/admin.js.map +1 -1
  70. package/dist/loaders/admin.mjs.map +1 -1
  71. package/dist/loaders/apis.d.ts +2 -2
  72. package/dist/loaders/apis.d.ts.map +1 -1
  73. package/dist/loaders/apis.js.map +1 -1
  74. package/dist/loaders/apis.mjs.map +1 -1
  75. package/dist/loaders/components.d.ts +2 -2
  76. package/dist/loaders/components.d.ts.map +1 -1
  77. package/dist/loaders/components.js.map +1 -1
  78. package/dist/loaders/components.mjs.map +1 -1
  79. package/dist/loaders/index.d.ts +2 -2
  80. package/dist/loaders/index.d.ts.map +1 -1
  81. package/dist/loaders/index.js.map +1 -1
  82. package/dist/loaders/index.mjs.map +1 -1
  83. package/dist/loaders/middlewares.d.ts +2 -2
  84. package/dist/loaders/middlewares.d.ts.map +1 -1
  85. package/dist/loaders/middlewares.js.map +1 -1
  86. package/dist/loaders/middlewares.mjs.map +1 -1
  87. package/dist/loaders/plugins/get-enabled-plugins.d.ts +2 -2
  88. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  89. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  90. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  91. package/dist/loaders/plugins/index.d.ts +2 -2
  92. package/dist/loaders/plugins/index.d.ts.map +1 -1
  93. package/dist/loaders/plugins/index.js.map +1 -1
  94. package/dist/loaders/plugins/index.mjs.map +1 -1
  95. package/dist/loaders/policies.d.ts +2 -2
  96. package/dist/loaders/policies.d.ts.map +1 -1
  97. package/dist/loaders/policies.js.map +1 -1
  98. package/dist/loaders/policies.mjs.map +1 -1
  99. package/dist/loaders/sanitizers.d.ts +2 -2
  100. package/dist/loaders/sanitizers.d.ts.map +1 -1
  101. package/dist/loaders/sanitizers.js.map +1 -1
  102. package/dist/loaders/sanitizers.mjs.map +1 -1
  103. package/dist/loaders/src-index.d.ts +2 -2
  104. package/dist/loaders/src-index.d.ts.map +1 -1
  105. package/dist/loaders/src-index.js.map +1 -1
  106. package/dist/loaders/src-index.mjs.map +1 -1
  107. package/dist/loaders/validators.d.ts +2 -2
  108. package/dist/loaders/validators.d.ts.map +1 -1
  109. package/dist/loaders/validators.js.map +1 -1
  110. package/dist/loaders/validators.mjs.map +1 -1
  111. package/dist/middlewares/body.d.ts +2 -2
  112. package/dist/middlewares/body.d.ts.map +1 -1
  113. package/dist/middlewares/body.js.map +1 -1
  114. package/dist/middlewares/body.mjs.map +1 -1
  115. package/dist/middlewares/compression.d.ts +2 -2
  116. package/dist/middlewares/compression.d.ts.map +1 -1
  117. package/dist/middlewares/compression.js.map +1 -1
  118. package/dist/middlewares/compression.mjs.map +1 -1
  119. package/dist/middlewares/cors.d.ts +2 -2
  120. package/dist/middlewares/cors.d.ts.map +1 -1
  121. package/dist/middlewares/cors.js.map +1 -1
  122. package/dist/middlewares/cors.mjs.map +1 -1
  123. package/dist/middlewares/errors.d.ts +2 -2
  124. package/dist/middlewares/errors.d.ts.map +1 -1
  125. package/dist/middlewares/errors.js.map +1 -1
  126. package/dist/middlewares/errors.mjs.map +1 -1
  127. package/dist/middlewares/favicon.d.ts +2 -2
  128. package/dist/middlewares/favicon.d.ts.map +1 -1
  129. package/dist/middlewares/favicon.js.map +1 -1
  130. package/dist/middlewares/favicon.mjs.map +1 -1
  131. package/dist/middlewares/index.d.ts +2 -2
  132. package/dist/middlewares/index.d.ts.map +1 -1
  133. package/dist/middlewares/index.js.map +1 -1
  134. package/dist/middlewares/index.mjs.map +1 -1
  135. package/dist/middlewares/ip.d.ts +2 -2
  136. package/dist/middlewares/ip.d.ts.map +1 -1
  137. package/dist/middlewares/ip.js.map +1 -1
  138. package/dist/middlewares/ip.mjs.map +1 -1
  139. package/dist/middlewares/logger.d.ts +2 -2
  140. package/dist/middlewares/logger.d.ts.map +1 -1
  141. package/dist/middlewares/logger.js.map +1 -1
  142. package/dist/middlewares/logger.mjs.map +1 -1
  143. package/dist/middlewares/powered-by.d.ts +2 -2
  144. package/dist/middlewares/powered-by.d.ts.map +1 -1
  145. package/dist/middlewares/powered-by.js.map +1 -1
  146. package/dist/middlewares/powered-by.mjs.map +1 -1
  147. package/dist/middlewares/public.d.ts +2 -2
  148. package/dist/middlewares/public.d.ts.map +1 -1
  149. package/dist/middlewares/public.js.map +1 -1
  150. package/dist/middlewares/public.mjs.map +1 -1
  151. package/dist/middlewares/query.d.ts +2 -2
  152. package/dist/middlewares/query.d.ts.map +1 -1
  153. package/dist/middlewares/query.js.map +1 -1
  154. package/dist/middlewares/query.mjs.map +1 -1
  155. package/dist/middlewares/response-time.d.ts +2 -2
  156. package/dist/middlewares/response-time.d.ts.map +1 -1
  157. package/dist/middlewares/response-time.js.map +1 -1
  158. package/dist/middlewares/response-time.mjs.map +1 -1
  159. package/dist/middlewares/responses.d.ts +3 -3
  160. package/dist/middlewares/responses.d.ts.map +1 -1
  161. package/dist/middlewares/responses.js.map +1 -1
  162. package/dist/middlewares/responses.mjs.map +1 -1
  163. package/dist/middlewares/security.d.ts +2 -2
  164. package/dist/middlewares/security.d.ts.map +1 -1
  165. package/dist/middlewares/security.js.map +1 -1
  166. package/dist/middlewares/security.mjs.map +1 -1
  167. package/dist/middlewares/session.d.ts +2 -2
  168. package/dist/middlewares/session.d.ts.map +1 -1
  169. package/dist/middlewares/session.js.map +1 -1
  170. package/dist/middlewares/session.mjs.map +1 -1
  171. package/dist/registries/apis.d.ts +2 -2
  172. package/dist/registries/apis.d.ts.map +1 -1
  173. package/dist/registries/apis.js.map +1 -1
  174. package/dist/registries/apis.mjs.map +1 -1
  175. package/dist/registries/components.d.ts +6 -6
  176. package/dist/registries/components.d.ts.map +1 -1
  177. package/dist/registries/components.js.map +1 -1
  178. package/dist/registries/components.mjs.map +1 -1
  179. package/dist/registries/config.d.ts +2 -2
  180. package/dist/registries/config.d.ts.map +1 -1
  181. package/dist/registries/config.js +15 -3
  182. package/dist/registries/config.js.map +1 -1
  183. package/dist/registries/config.mjs +16 -4
  184. package/dist/registries/config.mjs.map +1 -1
  185. package/dist/registries/content-types.d.ts +5 -5
  186. package/dist/registries/content-types.d.ts.map +1 -1
  187. package/dist/registries/content-types.js.map +1 -1
  188. package/dist/registries/content-types.mjs.map +1 -1
  189. package/dist/registries/controllers.d.ts +10 -10
  190. package/dist/registries/controllers.d.ts.map +1 -1
  191. package/dist/registries/controllers.js.map +1 -1
  192. package/dist/registries/controllers.mjs.map +1 -1
  193. package/dist/registries/custom-fields.d.ts +3 -3
  194. package/dist/registries/custom-fields.d.ts.map +1 -1
  195. package/dist/registries/custom-fields.js.map +1 -1
  196. package/dist/registries/custom-fields.mjs.map +1 -1
  197. package/dist/registries/middlewares.d.ts +6 -6
  198. package/dist/registries/middlewares.d.ts.map +1 -1
  199. package/dist/registries/middlewares.js.map +1 -1
  200. package/dist/registries/middlewares.mjs.map +1 -1
  201. package/dist/registries/modules.d.ts +2 -2
  202. package/dist/registries/modules.d.ts.map +1 -1
  203. package/dist/registries/modules.js.map +1 -1
  204. package/dist/registries/modules.mjs.map +1 -1
  205. package/dist/registries/plugins.d.ts +5 -5
  206. package/dist/registries/plugins.d.ts.map +1 -1
  207. package/dist/registries/plugins.js.map +1 -1
  208. package/dist/registries/plugins.mjs.map +1 -1
  209. package/dist/registries/policies.d.ts +23 -11
  210. package/dist/registries/policies.d.ts.map +1 -1
  211. package/dist/registries/policies.js +64 -18
  212. package/dist/registries/policies.js.map +1 -1
  213. package/dist/registries/policies.mjs +65 -19
  214. package/dist/registries/policies.mjs.map +1 -1
  215. package/dist/registries/services.d.ts +8 -8
  216. package/dist/registries/services.d.ts.map +1 -1
  217. package/dist/registries/services.js.map +1 -1
  218. package/dist/registries/services.mjs.map +1 -1
  219. package/dist/services/auth/index.d.ts +4 -4
  220. package/dist/services/auth/index.d.ts.map +1 -1
  221. package/dist/services/auth/index.js.map +1 -1
  222. package/dist/services/auth/index.mjs.map +1 -1
  223. package/dist/services/content-api/index.d.ts +21 -3
  224. package/dist/services/content-api/index.d.ts.map +1 -1
  225. package/dist/services/content-api/index.js +27 -1
  226. package/dist/services/content-api/index.js.map +1 -1
  227. package/dist/services/content-api/index.mjs +27 -1
  228. package/dist/services/content-api/index.mjs.map +1 -1
  229. package/dist/services/content-api/permissions/index.d.ts +3 -3
  230. package/dist/services/content-api/permissions/index.d.ts.map +1 -1
  231. package/dist/services/content-api/permissions/index.js.map +1 -1
  232. package/dist/services/content-api/permissions/index.mjs.map +1 -1
  233. package/dist/services/cron.d.ts +2 -2
  234. package/dist/services/cron.d.ts.map +1 -1
  235. package/dist/services/cron.js.map +1 -1
  236. package/dist/services/cron.mjs.map +1 -1
  237. package/dist/services/custom-fields.d.ts +2 -2
  238. package/dist/services/custom-fields.d.ts.map +1 -1
  239. package/dist/services/custom-fields.js.map +1 -1
  240. package/dist/services/custom-fields.mjs.map +1 -1
  241. package/dist/services/document-service/common.d.ts +2 -2
  242. package/dist/services/document-service/common.d.ts.map +1 -1
  243. package/dist/services/document-service/common.js.map +1 -1
  244. package/dist/services/document-service/common.mjs.map +1 -1
  245. package/dist/services/document-service/document-engine.d.ts +2 -0
  246. package/dist/services/document-service/document-engine.d.ts.map +1 -0
  247. package/dist/services/document-service/draft-and-publish.d.ts +7 -7
  248. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  249. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  250. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  251. package/dist/services/document-service/index.d.ts +2 -2
  252. package/dist/services/document-service/index.d.ts.map +1 -1
  253. package/dist/services/document-service/index.js.map +1 -1
  254. package/dist/services/document-service/index.mjs.map +1 -1
  255. package/dist/services/document-service/internationalization.d.ts +5 -5
  256. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  257. package/dist/services/document-service/internationalization.js.map +1 -1
  258. package/dist/services/document-service/internationalization.mjs.map +1 -1
  259. package/dist/services/document-service/repository.d.ts.map +1 -1
  260. package/dist/services/document-service/repository.js +5 -3
  261. package/dist/services/document-service/repository.js.map +1 -1
  262. package/dist/services/document-service/repository.mjs +6 -4
  263. package/dist/services/document-service/repository.mjs.map +1 -1
  264. package/dist/services/document-service/transform/fields.d.ts +2 -2
  265. package/dist/services/document-service/transform/fields.d.ts.map +1 -1
  266. package/dist/services/document-service/transform/fields.js.map +1 -1
  267. package/dist/services/document-service/transform/fields.mjs.map +1 -1
  268. package/dist/services/document-service/transform/id-map.d.ts +3 -3
  269. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  270. package/dist/services/document-service/transform/id-map.js.map +1 -1
  271. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  272. package/dist/services/document-service/transform/id-transform.d.ts +2 -2
  273. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  274. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  275. package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
  276. package/dist/services/document-service/transform/populate.d.ts +2 -2
  277. package/dist/services/document-service/transform/populate.d.ts.map +1 -1
  278. package/dist/services/document-service/transform/populate.js +1 -1
  279. package/dist/services/document-service/transform/populate.js.map +1 -1
  280. package/dist/services/document-service/transform/populate.mjs +1 -1
  281. package/dist/services/document-service/transform/populate.mjs.map +1 -1
  282. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +2 -2
  283. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  284. package/dist/services/document-service/transform/relations/extract/data-ids.js +1 -1
  285. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  286. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +1 -1
  287. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  288. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts +2 -2
  289. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  290. package/dist/services/document-service/transform/relations/transform/data-ids.js +1 -1
  291. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  292. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +1 -1
  293. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  294. package/dist/services/document-service/transform/relations/transform/output-ids.d.ts +2 -0
  295. package/dist/services/document-service/transform/relations/transform/output-ids.d.ts.map +1 -0
  296. package/dist/services/document-service/transform/relations/utils/dp.d.ts +3 -3
  297. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  298. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  299. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
  300. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +4 -4
  301. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  302. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
  303. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
  304. package/dist/services/document-service/transform/types.d.ts +3 -3
  305. package/dist/services/document-service/transform/types.d.ts.map +1 -1
  306. package/dist/services/document-service/utils/populate.d.ts +2 -2
  307. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  308. package/dist/services/document-service/utils/populate.js.map +1 -1
  309. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  310. package/dist/services/entity-service/attributes/index.d.ts +4 -4
  311. package/dist/services/entity-service/attributes/index.d.ts.map +1 -1
  312. package/dist/services/entity-service/attributes/index.js.map +1 -1
  313. package/dist/services/entity-service/attributes/index.mjs.map +1 -1
  314. package/dist/services/entity-service/attributes/transforms.d.ts +3 -3
  315. package/dist/services/entity-service/attributes/transforms.d.ts.map +1 -1
  316. package/dist/services/entity-service/attributes/transforms.js.map +1 -1
  317. package/dist/services/entity-service/attributes/transforms.mjs.map +1 -1
  318. package/dist/services/entity-service/components.d.ts +87 -12
  319. package/dist/services/entity-service/components.d.ts.map +1 -1
  320. package/dist/services/entity-service/components.js.map +1 -1
  321. package/dist/services/entity-service/components.mjs.map +1 -1
  322. package/dist/services/entity-service/index.d.ts +4 -4
  323. package/dist/services/entity-service/index.d.ts.map +1 -1
  324. package/dist/services/entity-service/index.js +14 -15
  325. package/dist/services/entity-service/index.js.map +1 -1
  326. package/dist/services/entity-service/index.mjs +15 -16
  327. package/dist/services/entity-service/index.mjs.map +1 -1
  328. package/dist/services/entity-service/params.d.ts +5 -5
  329. package/dist/services/entity-service/params.d.ts.map +1 -1
  330. package/dist/services/entity-service/params.js.map +1 -1
  331. package/dist/services/entity-service/params.mjs.map +1 -1
  332. package/dist/services/entity-validator/index.d.ts +2 -2
  333. package/dist/services/entity-validator/index.d.ts.map +1 -1
  334. package/dist/services/entity-validator/index.js +7 -2
  335. package/dist/services/entity-validator/index.js.map +1 -1
  336. package/dist/services/entity-validator/index.mjs +7 -2
  337. package/dist/services/entity-validator/index.mjs.map +1 -1
  338. package/dist/services/entity-validator/validators.d.ts +18 -18
  339. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  340. package/dist/services/entity-validator/validators.js +6 -1
  341. package/dist/services/entity-validator/validators.js.map +1 -1
  342. package/dist/services/entity-validator/validators.mjs +6 -1
  343. package/dist/services/entity-validator/validators.mjs.map +1 -1
  344. package/dist/services/features.d.ts +3 -3
  345. package/dist/services/features.d.ts.map +1 -1
  346. package/dist/services/features.js.map +1 -1
  347. package/dist/services/features.mjs.map +1 -1
  348. package/dist/services/fs.d.ts +2 -2
  349. package/dist/services/fs.d.ts.map +1 -1
  350. package/dist/services/fs.js.map +1 -1
  351. package/dist/services/fs.mjs.map +1 -1
  352. package/dist/services/metrics/admin-user-hash.d.ts +2 -2
  353. package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
  354. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  355. package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
  356. package/dist/services/metrics/index.d.ts +2 -2
  357. package/dist/services/metrics/index.d.ts.map +1 -1
  358. package/dist/services/metrics/index.js.map +1 -1
  359. package/dist/services/metrics/index.mjs.map +1 -1
  360. package/dist/services/metrics/middleware.d.ts +2 -2
  361. package/dist/services/metrics/middleware.d.ts.map +1 -1
  362. package/dist/services/metrics/middleware.js.map +1 -1
  363. package/dist/services/metrics/middleware.mjs.map +1 -1
  364. package/dist/services/metrics/sender.d.ts +3 -3
  365. package/dist/services/metrics/sender.d.ts.map +1 -1
  366. package/dist/services/metrics/sender.js.map +1 -1
  367. package/dist/services/metrics/sender.mjs.map +1 -1
  368. package/dist/services/query-params.d.ts +7 -0
  369. package/dist/services/query-params.d.ts.map +1 -0
  370. package/dist/services/query-params.js +12 -0
  371. package/dist/services/query-params.js.map +1 -0
  372. package/dist/services/query-params.mjs +13 -0
  373. package/dist/services/query-params.mjs.map +1 -0
  374. package/dist/services/server/admin-api.d.ts +3 -3
  375. package/dist/services/server/admin-api.d.ts.map +1 -1
  376. package/dist/services/server/admin-api.js.map +1 -1
  377. package/dist/services/server/admin-api.mjs.map +1 -1
  378. package/dist/services/server/api.d.ts +3 -3
  379. package/dist/services/server/api.d.ts.map +1 -1
  380. package/dist/services/server/api.js.map +1 -1
  381. package/dist/services/server/api.mjs.map +1 -1
  382. package/dist/services/server/compose-endpoint.d.ts +2 -2
  383. package/dist/services/server/compose-endpoint.d.ts.map +1 -1
  384. package/dist/services/server/compose-endpoint.js +1 -2
  385. package/dist/services/server/compose-endpoint.js.map +1 -1
  386. package/dist/services/server/compose-endpoint.mjs +2 -3
  387. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  388. package/dist/services/server/content-api.d.ts +3 -3
  389. package/dist/services/server/content-api.d.ts.map +1 -1
  390. package/dist/services/server/content-api.js.map +1 -1
  391. package/dist/services/server/content-api.mjs.map +1 -1
  392. package/dist/services/server/http-server.d.ts +2 -2
  393. package/dist/services/server/http-server.d.ts.map +1 -1
  394. package/dist/services/server/http-server.js.map +1 -1
  395. package/dist/services/server/http-server.mjs.map +1 -1
  396. package/dist/services/server/index.d.ts +2 -2
  397. package/dist/services/server/index.d.ts.map +1 -1
  398. package/dist/services/server/index.js +1 -2
  399. package/dist/services/server/index.js.map +1 -1
  400. package/dist/services/server/index.mjs +1 -2
  401. package/dist/services/server/index.mjs.map +1 -1
  402. package/dist/services/server/middleware.d.ts +4 -4
  403. package/dist/services/server/middleware.d.ts.map +1 -1
  404. package/dist/services/server/middleware.js.map +1 -1
  405. package/dist/services/server/middleware.mjs.map +1 -1
  406. package/dist/services/server/policy.d.ts +3 -3
  407. package/dist/services/server/policy.d.ts.map +1 -1
  408. package/dist/services/server/policy.js +4 -4
  409. package/dist/services/server/policy.js.map +1 -1
  410. package/dist/services/server/policy.mjs +4 -4
  411. package/dist/services/server/policy.mjs.map +1 -1
  412. package/dist/services/server/register-middlewares.d.ts +2 -2
  413. package/dist/services/server/register-middlewares.d.ts.map +1 -1
  414. package/dist/services/server/register-middlewares.js.map +1 -1
  415. package/dist/services/server/register-middlewares.mjs.map +1 -1
  416. package/dist/services/server/register-routes.d.ts +2 -2
  417. package/dist/services/server/register-routes.d.ts.map +1 -1
  418. package/dist/services/server/register-routes.js.map +1 -1
  419. package/dist/services/server/register-routes.mjs.map +1 -1
  420. package/dist/services/server/routing.d.ts +4 -4
  421. package/dist/services/server/routing.d.ts.map +1 -1
  422. package/dist/services/server/routing.js.map +1 -1
  423. package/dist/services/server/routing.mjs.map +1 -1
  424. package/dist/services/utils/dynamic-zones.d.ts.map +1 -1
  425. package/dist/services/utils/dynamic-zones.js +2 -1
  426. package/dist/services/utils/dynamic-zones.js.map +1 -1
  427. package/dist/services/utils/dynamic-zones.mjs +2 -1
  428. package/dist/services/utils/dynamic-zones.mjs.map +1 -1
  429. package/dist/services/webhook-runner.js.map +1 -1
  430. package/dist/services/webhook-runner.mjs.map +1 -1
  431. package/dist/utils/convert-custom-field-type.d.ts +2 -2
  432. package/dist/utils/convert-custom-field-type.d.ts.map +1 -1
  433. package/dist/utils/convert-custom-field-type.js.map +1 -1
  434. package/dist/utils/convert-custom-field-type.mjs.map +1 -1
  435. package/dist/utils/fetch.d.ts +3 -3
  436. package/dist/utils/fetch.d.ts.map +1 -1
  437. package/dist/utils/fetch.js.map +1 -1
  438. package/dist/utils/fetch.mjs.map +1 -1
  439. package/dist/utils/get-dirs.d.ts +3 -3
  440. package/dist/utils/get-dirs.d.ts.map +1 -1
  441. package/dist/utils/get-dirs.js.map +1 -1
  442. package/dist/utils/get-dirs.mjs.map +1 -1
  443. package/dist/utils/is-initialized.d.ts +2 -2
  444. package/dist/utils/is-initialized.d.ts.map +1 -1
  445. package/dist/utils/is-initialized.js.map +1 -1
  446. package/dist/utils/is-initialized.mjs.map +1 -1
  447. package/dist/utils/open-browser.d.ts +2 -2
  448. package/dist/utils/open-browser.d.ts.map +1 -1
  449. package/dist/utils/open-browser.js.map +1 -1
  450. package/dist/utils/open-browser.mjs.map +1 -1
  451. package/dist/utils/signals.d.ts +2 -2
  452. package/dist/utils/signals.d.ts.map +1 -1
  453. package/dist/utils/signals.js.map +1 -1
  454. package/dist/utils/signals.mjs.map +1 -1
  455. package/dist/utils/startup-logger.d.ts +2 -2
  456. package/dist/utils/startup-logger.d.ts.map +1 -1
  457. package/dist/utils/startup-logger.js.map +1 -1
  458. package/dist/utils/startup-logger.mjs.map +1 -1
  459. package/dist/utils/transform-content-types-to-models.d.ts +34 -84
  460. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  461. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  462. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  463. package/dist/utils/update-notifier/index.d.ts +2 -2
  464. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  465. package/dist/utils/update-notifier/index.js.map +1 -1
  466. package/dist/utils/update-notifier/index.mjs.map +1 -1
  467. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"services.mjs","sources":["../../src/registries/services.ts"],"sourcesContent":["import { pickBy, has } from 'lodash/fp';\nimport type { Strapi, Common } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\nexport type ServiceFactory = (params: { strapi: Strapi }) => Common.Service | Common.Service;\nexport type ServiceFactoryMap = Record<string, ServiceFactory>;\nexport type ServiceMap = Record<string, Common.Service>;\nexport type ServiceExtendFn = (service: Common.Service) => Common.Service;\n\nconst servicesRegistry = (strapi: Strapi) => {\n const services: ServiceFactoryMap = {};\n const instantiatedServices: ServiceMap = {};\n\n return {\n /**\n * Returns this list of registered services uids\n */\n keys() {\n return Object.keys(services);\n },\n\n /**\n * Returns the instance of a service. Instantiate the service if not already done\n */\n get(uid: Common.UID.Service) {\n if (instantiatedServices[uid]) {\n return instantiatedServices[uid];\n }\n\n const service = services[uid];\n if (service) {\n instantiatedServices[uid] = typeof service === 'function' ? service({ strapi }) : service;\n return instantiatedServices[uid];\n }\n },\n\n /**\n * Returns a map with all the services in a namespace\n */\n getAll(namespace: string): ServiceMap {\n const filteredServices = pickBy((_, uid) => hasNamespace(uid, namespace))(services);\n\n // create lazy accessor to avoid instantiating the services;\n const map = {};\n for (const uid of Object.keys(filteredServices)) {\n Object.defineProperty(map, uid, {\n enumerable: true,\n get: () => {\n return this.get(uid as Common.UID.Service);\n },\n });\n }\n\n return map;\n },\n\n /**\n * Registers a service\n */\n set(uid: string, service: ServiceFactory) {\n services[uid] = service;\n delete instantiatedServices[uid];\n return this;\n },\n\n /**\n * Registers a map of services for a specific namespace\n */\n add(namespace: string, newServices: ServiceFactoryMap) {\n for (const serviceName of Object.keys(newServices)) {\n const service = newServices[serviceName];\n const uid = addNamespace(serviceName, namespace);\n\n if (has(uid, services)) {\n throw new Error(`Service ${uid} has already been registered.`);\n }\n services[uid] = service;\n }\n\n return this;\n },\n\n /**\n * Wraps a service to extend it\n */\n extend(uid: Common.UID.Service, extendFn: ServiceExtendFn) {\n const currentService = this.get(uid);\n\n if (!currentService) {\n throw new Error(`Service ${uid} doesn't exist`);\n }\n\n const newService = extendFn(currentService);\n instantiatedServices[uid] = newService;\n\n return this;\n },\n };\n};\n\nexport default servicesRegistry;\n"],"names":[],"mappings":";;AASM,MAAA,mBAAmB,CAAC,WAAmB;AAC3C,QAAM,WAA8B,CAAA;AACpC,QAAM,uBAAmC,CAAA;AAElC,SAAA;AAAA;AAAA;AAAA;AAAA,IAIL,OAAO;AACE,aAAA,OAAO,KAAK,QAAQ;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAyB;AACvB,UAAA,qBAAqB,GAAG,GAAG;AAC7B,eAAO,qBAAqB,GAAG;AAAA,MACjC;AAEM,YAAA,UAAU,SAAS,GAAG;AAC5B,UAAI,SAAS;AACU,6BAAA,GAAG,IAAI,OAAO,YAAY,aAAa,QAAQ,EAAE,QAAQ,IAAI;AAClF,eAAO,qBAAqB,GAAG;AAAA,MACjC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,WAA+B;AAC9B,YAAA,mBAAmB,OAAO,CAAC,GAAG,QAAQ,aAAa,KAAK,SAAS,CAAC,EAAE,QAAQ;AAGlF,YAAM,MAAM,CAAA;AACZ,iBAAW,OAAO,OAAO,KAAK,gBAAgB,GAAG;AACxC,eAAA,eAAe,KAAK,KAAK;AAAA,UAC9B,YAAY;AAAA,UACZ,KAAK,MAAM;AACF,mBAAA,KAAK,IAAI,GAAyB;AAAA,UAC3C;AAAA,QAAA,CACD;AAAA,MACH;AAEO,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAa,SAAyB;AACxC,eAAS,GAAG,IAAI;AAChB,aAAO,qBAAqB,GAAG;AACxB,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,WAAmB,aAAgC;AACrD,iBAAW,eAAe,OAAO,KAAK,WAAW,GAAG;AAC5C,cAAA,UAAU,YAAY,WAAW;AACjC,cAAA,MAAM,aAAa,aAAa,SAAS;AAE3C,YAAA,IAAI,KAAK,QAAQ,GAAG;AACtB,gBAAM,IAAI,MAAM,WAAW,GAAG,+BAA+B;AAAA,QAC/D;AACA,iBAAS,GAAG,IAAI;AAAA,MAClB;AAEO,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,KAAyB,UAA2B;AACnD,YAAA,iBAAiB,KAAK,IAAI,GAAG;AAEnC,UAAI,CAAC,gBAAgB;AACnB,cAAM,IAAI,MAAM,WAAW,GAAG,gBAAgB;AAAA,MAChD;AAEM,YAAA,aAAa,SAAS,cAAc;AAC1C,2BAAqB,GAAG,IAAI;AAErB,aAAA;AAAA,IACT;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"services.mjs","sources":["../../src/registries/services.ts"],"sourcesContent":["import { pickBy, has } from 'lodash/fp';\nimport type { Core, UID } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\nexport type ServiceFactory = (params: { strapi: Core.Strapi }) => Core.Service | Core.Service;\nexport type ServiceFactoryMap = Record<string, ServiceFactory>;\nexport type ServiceMap = Record<string, Core.Service>;\nexport type ServiceExtendFn = (service: Core.Service) => Core.Service;\n\nconst servicesRegistry = (strapi: Core.Strapi) => {\n const services: ServiceFactoryMap = {};\n const instantiatedServices: ServiceMap = {};\n\n return {\n /**\n * Returns this list of registered services uids\n */\n keys() {\n return Object.keys(services);\n },\n\n /**\n * Returns the instance of a service. Instantiate the service if not already done\n */\n get(uid: UID.Service) {\n if (instantiatedServices[uid]) {\n return instantiatedServices[uid];\n }\n\n const service = services[uid];\n if (service) {\n instantiatedServices[uid] = typeof service === 'function' ? service({ strapi }) : service;\n return instantiatedServices[uid];\n }\n },\n\n /**\n * Returns a map with all the services in a namespace\n */\n getAll(namespace: string): ServiceMap {\n const filteredServices = pickBy((_, uid) => hasNamespace(uid, namespace))(services);\n\n // create lazy accessor to avoid instantiating the services;\n const map = {};\n for (const uid of Object.keys(filteredServices)) {\n Object.defineProperty(map, uid, {\n enumerable: true,\n get: () => {\n return this.get(uid as UID.Service);\n },\n });\n }\n\n return map;\n },\n\n /**\n * Registers a service\n */\n set(uid: string, service: ServiceFactory) {\n services[uid] = service;\n delete instantiatedServices[uid];\n return this;\n },\n\n /**\n * Registers a map of services for a specific namespace\n */\n add(namespace: string, newServices: ServiceFactoryMap) {\n for (const serviceName of Object.keys(newServices)) {\n const service = newServices[serviceName];\n const uid = addNamespace(serviceName, namespace);\n\n if (has(uid, services)) {\n throw new Error(`Service ${uid} has already been registered.`);\n }\n services[uid] = service;\n }\n\n return this;\n },\n\n /**\n * Wraps a service to extend it\n */\n extend(uid: UID.Service, extendFn: ServiceExtendFn) {\n const currentService = this.get(uid);\n\n if (!currentService) {\n throw new Error(`Service ${uid} doesn't exist`);\n }\n\n const newService = extendFn(currentService);\n instantiatedServices[uid] = newService;\n\n return this;\n },\n };\n};\n\nexport default servicesRegistry;\n"],"names":[],"mappings":";;AASM,MAAA,mBAAmB,CAAC,WAAwB;AAChD,QAAM,WAA8B,CAAA;AACpC,QAAM,uBAAmC,CAAA;AAElC,SAAA;AAAA;AAAA;AAAA;AAAA,IAIL,OAAO;AACE,aAAA,OAAO,KAAK,QAAQ;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAkB;AAChB,UAAA,qBAAqB,GAAG,GAAG;AAC7B,eAAO,qBAAqB,GAAG;AAAA,MACjC;AAEM,YAAA,UAAU,SAAS,GAAG;AAC5B,UAAI,SAAS;AACU,6BAAA,GAAG,IAAI,OAAO,YAAY,aAAa,QAAQ,EAAE,QAAQ,IAAI;AAClF,eAAO,qBAAqB,GAAG;AAAA,MACjC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,WAA+B;AAC9B,YAAA,mBAAmB,OAAO,CAAC,GAAG,QAAQ,aAAa,KAAK,SAAS,CAAC,EAAE,QAAQ;AAGlF,YAAM,MAAM,CAAA;AACZ,iBAAW,OAAO,OAAO,KAAK,gBAAgB,GAAG;AACxC,eAAA,eAAe,KAAK,KAAK;AAAA,UAC9B,YAAY;AAAA,UACZ,KAAK,MAAM;AACF,mBAAA,KAAK,IAAI,GAAkB;AAAA,UACpC;AAAA,QAAA,CACD;AAAA,MACH;AAEO,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAa,SAAyB;AACxC,eAAS,GAAG,IAAI;AAChB,aAAO,qBAAqB,GAAG;AACxB,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,WAAmB,aAAgC;AACrD,iBAAW,eAAe,OAAO,KAAK,WAAW,GAAG;AAC5C,cAAA,UAAU,YAAY,WAAW;AACjC,cAAA,MAAM,aAAa,aAAa,SAAS;AAE3C,YAAA,IAAI,KAAK,QAAQ,GAAG;AACtB,gBAAM,IAAI,MAAM,WAAW,GAAG,+BAA+B;AAAA,QAC/D;AACA,iBAAS,GAAG,IAAI;AAAA,MAClB;AAEO,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,KAAkB,UAA2B;AAC5C,YAAA,iBAAiB,KAAK,IAAI,GAAG;AAEnC,UAAI,CAAC,gBAAgB;AACnB,cAAM,IAAI,MAAM,WAAW,GAAG,gBAAgB;AAAA,MAChD;AAEM,YAAA,aAAa,SAAS,cAAc;AAC1C,2BAAqB,GAAG,IAAI;AAErB,aAAA;AAAA,IACT;AAAA,EAAA;AAEJ;"}
@@ -1,4 +1,4 @@
1
- import type { Common } from '@strapi/types';
1
+ import type { Core } from '@strapi/types';
2
2
  import type { ParameterizedContext } from 'koa';
3
3
  interface AuthenticationResponse {
4
4
  authenticated?: boolean;
@@ -14,12 +14,12 @@ interface AuthenticationInfo {
14
14
  interface Strategy {
15
15
  name: string;
16
16
  authenticate: (ctx: ParameterizedContext) => Promise<AuthenticationResponse>;
17
- verify?: (auth: AuthenticationInfo, config: Common.RouteConfig['auth']) => Promise<any>;
17
+ verify?: (auth: AuthenticationInfo, config: Core.RouteConfig['auth']) => Promise<any>;
18
18
  }
19
19
  interface Authentication {
20
20
  register: (type: string, strategy: Strategy) => Authentication;
21
- authenticate: Common.MiddlewareHandler;
22
- verify: (auth: AuthenticationInfo, config?: Common.RouteConfig['auth']) => Promise<any>;
21
+ authenticate: Core.MiddlewareHandler;
22
+ verify: (auth: AuthenticationInfo, config?: Core.RouteConfig['auth']) => Promise<any>;
23
23
  }
24
24
  declare const createAuthentication: () => Authentication;
25
25
  export default createAuthentication;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/auth/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,KAAK,CAAC;AAEhD,UAAU,sBAAsB;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CACtB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC7E,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACzF;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,cAAc,CAAC;IAC/D,YAAY,EAAE,MAAM,CAAC,iBAAiB,CAAC;IACvC,MAAM,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACzF;AAcD,QAAA,MAAM,oBAAoB,QAAO,cA4FhC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/auth/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,KAAK,CAAC;AAEhD,UAAU,sBAAsB;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CACtB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC7E,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACvF;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,cAAc,CAAC;IAC/D,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC;IACrC,MAAM,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACvF;AAcD,QAAA,MAAM,oBAAoB,QAAO,cA4FhC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/services/auth/index.ts"],"sourcesContent":["import assert from 'assert/strict';\nimport { has } from 'lodash/fp';\n\nimport { errors } from '@strapi/utils';\nimport type { Common } from '@strapi/types';\nimport type { ParameterizedContext } from 'koa';\n\ninterface AuthenticationResponse {\n authenticated?: boolean;\n credentials?: unknown;\n ability?: unknown;\n error?: Error | null;\n}\n\ninterface AuthenticationInfo {\n strategy: Strategy;\n credentials: unknown;\n ability: unknown;\n}\n\ninterface Strategy {\n name: string;\n authenticate: (ctx: ParameterizedContext) => Promise<AuthenticationResponse>;\n verify?: (auth: AuthenticationInfo, config: Common.RouteConfig['auth']) => Promise<any>;\n}\n\ninterface Authentication {\n register: (type: string, strategy: Strategy) => Authentication;\n authenticate: Common.MiddlewareHandler;\n verify: (auth: AuthenticationInfo, config?: Common.RouteConfig['auth']) => Promise<any>;\n}\n\nconst INVALID_STRATEGY_MSG =\n 'Invalid auth strategy. Expecting an object with properties {name: string, authenticate: function, verify: function}';\n\nconst validStrategy = (strategy: Strategy) => {\n assert(has('authenticate', strategy), INVALID_STRATEGY_MSG);\n assert(typeof strategy.authenticate === 'function', INVALID_STRATEGY_MSG);\n\n if (has('verify', strategy)) {\n assert(typeof strategy.verify === 'function', INVALID_STRATEGY_MSG);\n }\n};\n\nconst createAuthentication = (): Authentication => {\n const strategies: Record<string, Strategy[]> = {};\n\n return {\n register(type, strategy) {\n validStrategy(strategy);\n\n if (!strategies[type]) {\n strategies[type] = [];\n }\n\n strategies[type].push(strategy);\n\n return this;\n },\n\n async authenticate(ctx, next) {\n const route: Common.Route = ctx.state.route;\n\n // use route strategy\n const config = route?.config?.auth;\n\n if (config === false) {\n return next();\n }\n\n const routeStrategies = route.info.type ? strategies[route.info.type] : [];\n const configStrategies = (config?.strategies ?? routeStrategies ?? []) as Array<\n string | Strategy\n >;\n\n const strategiesToUse: Strategy[] = configStrategies.reduce(\n (acc, strategy: string | Strategy) => {\n // Resolve by strategy name\n if (typeof strategy === 'string') {\n const routeStrategy = routeStrategies.find((rs) => rs.name === strategy);\n\n if (routeStrategy) {\n acc.push(routeStrategy);\n }\n }\n\n // Use the given strategy as is\n else if (typeof strategy === 'object') {\n validStrategy(strategy);\n\n acc.push(strategy);\n }\n\n return acc;\n },\n [] as Strategy[]\n );\n\n for (const strategy of strategiesToUse) {\n const result = await strategy.authenticate(ctx);\n\n const { authenticated = false, credentials, ability = null, error = null } = result || {};\n\n if (error !== null) {\n return ctx.unauthorized(error);\n }\n\n if (authenticated) {\n ctx.state.isAuthenticated = true;\n ctx.state.auth = {\n strategy,\n credentials,\n ability,\n };\n\n return next();\n }\n }\n\n return ctx.unauthorized('Missing or invalid credentials');\n },\n\n async verify(auth, config = {}) {\n if (config === false) {\n return;\n }\n\n if (!auth) {\n throw new errors.UnauthorizedError();\n }\n\n if (typeof auth.strategy.verify === 'function') {\n return auth.strategy.verify(auth, config);\n }\n },\n };\n};\n\nexport default createAuthentication;\n"],"names":["assert","has","errors"],"mappings":";;;;;;AAgCA,MAAM,uBACJ;AAEF,MAAM,gBAAgB,CAAC,aAAuB;AAC5CA,kBAAAA,QAAOC,EAAAA,IAAI,gBAAgB,QAAQ,GAAG,oBAAoB;AAC1DD,kBAAAA,QAAO,OAAO,SAAS,iBAAiB,YAAY,oBAAoB;AAEpE,MAAAC,EAAA,IAAI,UAAU,QAAQ,GAAG;AAC3BD,oBAAAA,QAAO,OAAO,SAAS,WAAW,YAAY,oBAAoB;AAAA,EACpE;AACF;AAEA,MAAM,uBAAuB,MAAsB;AACjD,QAAM,aAAyC,CAAA;AAExC,SAAA;AAAA,IACL,SAAS,MAAM,UAAU;AACvB,oBAAc,QAAQ;AAElB,UAAA,CAAC,WAAW,IAAI,GAAG;AACV,mBAAA,IAAI,IAAI;MACrB;AAEW,iBAAA,IAAI,EAAE,KAAK,QAAQ;AAEvB,aAAA;AAAA,IACT;AAAA,IAEA,MAAM,aAAa,KAAK,MAAM;AACtB,YAAA,QAAsB,IAAI,MAAM;AAGhC,YAAA,SAAS,OAAO,QAAQ;AAE9B,UAAI,WAAW,OAAO;AACpB,eAAO,KAAK;AAAA,MACd;AAEM,YAAA,kBAAkB,MAAM,KAAK,OAAO,WAAW,MAAM,KAAK,IAAI,IAAI;AACxE,YAAM,mBAAoB,QAAQ,cAAc,mBAAmB,CAAA;AAInE,YAAM,kBAA8B,iBAAiB;AAAA,QACnD,CAAC,KAAK,aAAgC;AAEhC,cAAA,OAAO,aAAa,UAAU;AAChC,kBAAM,gBAAgB,gBAAgB,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAEvE,gBAAI,eAAe;AACjB,kBAAI,KAAK,aAAa;AAAA,YACxB;AAAA,UAAA,WAIO,OAAO,aAAa,UAAU;AACrC,0BAAc,QAAQ;AAEtB,gBAAI,KAAK,QAAQ;AAAA,UACnB;AAEO,iBAAA;AAAA,QACT;AAAA,QACA,CAAC;AAAA,MAAA;AAGH,iBAAW,YAAY,iBAAiB;AACtC,cAAM,SAAS,MAAM,SAAS,aAAa,GAAG;AAExC,cAAA,EAAE,gBAAgB,OAAO,aAAa,UAAU,MAAM,QAAQ,KAAA,IAAS,UAAU;AAEvF,YAAI,UAAU,MAAM;AACX,iBAAA,IAAI,aAAa,KAAK;AAAA,QAC/B;AAEA,YAAI,eAAe;AACjB,cAAI,MAAM,kBAAkB;AAC5B,cAAI,MAAM,OAAO;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAGF,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAEO,aAAA,IAAI,aAAa,gCAAgC;AAAA,IAC1D;AAAA,IAEA,MAAM,OAAO,MAAM,SAAS,IAAI;AAC9B,UAAI,WAAW,OAAO;AACpB;AAAA,MACF;AAEA,UAAI,CAAC,MAAM;AACH,cAAA,IAAIE,YAAAA,OAAO;MACnB;AAEA,UAAI,OAAO,KAAK,SAAS,WAAW,YAAY;AAC9C,eAAO,KAAK,SAAS,OAAO,MAAM,MAAM;AAAA,MAC1C;AAAA,IACF;AAAA,EAAA;AAEJ;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/services/auth/index.ts"],"sourcesContent":["import assert from 'assert/strict';\nimport { has } from 'lodash/fp';\n\nimport { errors } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport type { ParameterizedContext } from 'koa';\n\ninterface AuthenticationResponse {\n authenticated?: boolean;\n credentials?: unknown;\n ability?: unknown;\n error?: Error | null;\n}\n\ninterface AuthenticationInfo {\n strategy: Strategy;\n credentials: unknown;\n ability: unknown;\n}\n\ninterface Strategy {\n name: string;\n authenticate: (ctx: ParameterizedContext) => Promise<AuthenticationResponse>;\n verify?: (auth: AuthenticationInfo, config: Core.RouteConfig['auth']) => Promise<any>;\n}\n\ninterface Authentication {\n register: (type: string, strategy: Strategy) => Authentication;\n authenticate: Core.MiddlewareHandler;\n verify: (auth: AuthenticationInfo, config?: Core.RouteConfig['auth']) => Promise<any>;\n}\n\nconst INVALID_STRATEGY_MSG =\n 'Invalid auth strategy. Expecting an object with properties {name: string, authenticate: function, verify: function}';\n\nconst validStrategy = (strategy: Strategy) => {\n assert(has('authenticate', strategy), INVALID_STRATEGY_MSG);\n assert(typeof strategy.authenticate === 'function', INVALID_STRATEGY_MSG);\n\n if (has('verify', strategy)) {\n assert(typeof strategy.verify === 'function', INVALID_STRATEGY_MSG);\n }\n};\n\nconst createAuthentication = (): Authentication => {\n const strategies: Record<string, Strategy[]> = {};\n\n return {\n register(type, strategy) {\n validStrategy(strategy);\n\n if (!strategies[type]) {\n strategies[type] = [];\n }\n\n strategies[type].push(strategy);\n\n return this;\n },\n\n async authenticate(ctx, next) {\n const route: Core.Route = ctx.state.route;\n\n // use route strategy\n const config = route?.config?.auth;\n\n if (config === false) {\n return next();\n }\n\n const routeStrategies = route.info.type ? strategies[route.info.type] : [];\n const configStrategies = (config?.strategies ?? routeStrategies ?? []) as Array<\n string | Strategy\n >;\n\n const strategiesToUse: Strategy[] = configStrategies.reduce(\n (acc, strategy: string | Strategy) => {\n // Resolve by strategy name\n if (typeof strategy === 'string') {\n const routeStrategy = routeStrategies.find((rs) => rs.name === strategy);\n\n if (routeStrategy) {\n acc.push(routeStrategy);\n }\n }\n\n // Use the given strategy as is\n else if (typeof strategy === 'object') {\n validStrategy(strategy);\n\n acc.push(strategy);\n }\n\n return acc;\n },\n [] as Strategy[]\n );\n\n for (const strategy of strategiesToUse) {\n const result = await strategy.authenticate(ctx);\n\n const { authenticated = false, credentials, ability = null, error = null } = result || {};\n\n if (error !== null) {\n return ctx.unauthorized(error);\n }\n\n if (authenticated) {\n ctx.state.isAuthenticated = true;\n ctx.state.auth = {\n strategy,\n credentials,\n ability,\n };\n\n return next();\n }\n }\n\n return ctx.unauthorized('Missing or invalid credentials');\n },\n\n async verify(auth, config = {}) {\n if (config === false) {\n return;\n }\n\n if (!auth) {\n throw new errors.UnauthorizedError();\n }\n\n if (typeof auth.strategy.verify === 'function') {\n return auth.strategy.verify(auth, config);\n }\n },\n };\n};\n\nexport default createAuthentication;\n"],"names":["assert","has","errors"],"mappings":";;;;;;AAgCA,MAAM,uBACJ;AAEF,MAAM,gBAAgB,CAAC,aAAuB;AAC5CA,kBAAAA,QAAOC,EAAAA,IAAI,gBAAgB,QAAQ,GAAG,oBAAoB;AAC1DD,kBAAAA,QAAO,OAAO,SAAS,iBAAiB,YAAY,oBAAoB;AAEpE,MAAAC,EAAA,IAAI,UAAU,QAAQ,GAAG;AAC3BD,oBAAAA,QAAO,OAAO,SAAS,WAAW,YAAY,oBAAoB;AAAA,EACpE;AACF;AAEA,MAAM,uBAAuB,MAAsB;AACjD,QAAM,aAAyC,CAAA;AAExC,SAAA;AAAA,IACL,SAAS,MAAM,UAAU;AACvB,oBAAc,QAAQ;AAElB,UAAA,CAAC,WAAW,IAAI,GAAG;AACV,mBAAA,IAAI,IAAI;MACrB;AAEW,iBAAA,IAAI,EAAE,KAAK,QAAQ;AAEvB,aAAA;AAAA,IACT;AAAA,IAEA,MAAM,aAAa,KAAK,MAAM;AACtB,YAAA,QAAoB,IAAI,MAAM;AAG9B,YAAA,SAAS,OAAO,QAAQ;AAE9B,UAAI,WAAW,OAAO;AACpB,eAAO,KAAK;AAAA,MACd;AAEM,YAAA,kBAAkB,MAAM,KAAK,OAAO,WAAW,MAAM,KAAK,IAAI,IAAI;AACxE,YAAM,mBAAoB,QAAQ,cAAc,mBAAmB,CAAA;AAInE,YAAM,kBAA8B,iBAAiB;AAAA,QACnD,CAAC,KAAK,aAAgC;AAEhC,cAAA,OAAO,aAAa,UAAU;AAChC,kBAAM,gBAAgB,gBAAgB,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAEvE,gBAAI,eAAe;AACjB,kBAAI,KAAK,aAAa;AAAA,YACxB;AAAA,UAAA,WAIO,OAAO,aAAa,UAAU;AACrC,0BAAc,QAAQ;AAEtB,gBAAI,KAAK,QAAQ;AAAA,UACnB;AAEO,iBAAA;AAAA,QACT;AAAA,QACA,CAAC;AAAA,MAAA;AAGH,iBAAW,YAAY,iBAAiB;AACtC,cAAM,SAAS,MAAM,SAAS,aAAa,GAAG;AAExC,cAAA,EAAE,gBAAgB,OAAO,aAAa,UAAU,MAAM,QAAQ,KAAA,IAAS,UAAU;AAEvF,YAAI,UAAU,MAAM;AACX,iBAAA,IAAI,aAAa,KAAK;AAAA,QAC/B;AAEA,YAAI,eAAe;AACjB,cAAI,MAAM,kBAAkB;AAC5B,cAAI,MAAM,OAAO;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAGF,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAEO,aAAA,IAAI,aAAa,gCAAgC;AAAA,IAC1D;AAAA,IAEA,MAAM,OAAO,MAAM,SAAS,IAAI;AAC9B,UAAI,WAAW,OAAO;AACpB;AAAA,MACF;AAEA,UAAI,CAAC,MAAM;AACH,cAAA,IAAIE,YAAAA,OAAO;MACnB;AAEA,UAAI,OAAO,KAAK,SAAS,WAAW,YAAY;AAC9C,eAAO,KAAK,SAAS,OAAO,MAAM,MAAM;AAAA,MAC1C;AAAA,IACF;AAAA,EAAA;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/services/auth/index.ts"],"sourcesContent":["import assert from 'assert/strict';\nimport { has } from 'lodash/fp';\n\nimport { errors } from '@strapi/utils';\nimport type { Common } from '@strapi/types';\nimport type { ParameterizedContext } from 'koa';\n\ninterface AuthenticationResponse {\n authenticated?: boolean;\n credentials?: unknown;\n ability?: unknown;\n error?: Error | null;\n}\n\ninterface AuthenticationInfo {\n strategy: Strategy;\n credentials: unknown;\n ability: unknown;\n}\n\ninterface Strategy {\n name: string;\n authenticate: (ctx: ParameterizedContext) => Promise<AuthenticationResponse>;\n verify?: (auth: AuthenticationInfo, config: Common.RouteConfig['auth']) => Promise<any>;\n}\n\ninterface Authentication {\n register: (type: string, strategy: Strategy) => Authentication;\n authenticate: Common.MiddlewareHandler;\n verify: (auth: AuthenticationInfo, config?: Common.RouteConfig['auth']) => Promise<any>;\n}\n\nconst INVALID_STRATEGY_MSG =\n 'Invalid auth strategy. Expecting an object with properties {name: string, authenticate: function, verify: function}';\n\nconst validStrategy = (strategy: Strategy) => {\n assert(has('authenticate', strategy), INVALID_STRATEGY_MSG);\n assert(typeof strategy.authenticate === 'function', INVALID_STRATEGY_MSG);\n\n if (has('verify', strategy)) {\n assert(typeof strategy.verify === 'function', INVALID_STRATEGY_MSG);\n }\n};\n\nconst createAuthentication = (): Authentication => {\n const strategies: Record<string, Strategy[]> = {};\n\n return {\n register(type, strategy) {\n validStrategy(strategy);\n\n if (!strategies[type]) {\n strategies[type] = [];\n }\n\n strategies[type].push(strategy);\n\n return this;\n },\n\n async authenticate(ctx, next) {\n const route: Common.Route = ctx.state.route;\n\n // use route strategy\n const config = route?.config?.auth;\n\n if (config === false) {\n return next();\n }\n\n const routeStrategies = route.info.type ? strategies[route.info.type] : [];\n const configStrategies = (config?.strategies ?? routeStrategies ?? []) as Array<\n string | Strategy\n >;\n\n const strategiesToUse: Strategy[] = configStrategies.reduce(\n (acc, strategy: string | Strategy) => {\n // Resolve by strategy name\n if (typeof strategy === 'string') {\n const routeStrategy = routeStrategies.find((rs) => rs.name === strategy);\n\n if (routeStrategy) {\n acc.push(routeStrategy);\n }\n }\n\n // Use the given strategy as is\n else if (typeof strategy === 'object') {\n validStrategy(strategy);\n\n acc.push(strategy);\n }\n\n return acc;\n },\n [] as Strategy[]\n );\n\n for (const strategy of strategiesToUse) {\n const result = await strategy.authenticate(ctx);\n\n const { authenticated = false, credentials, ability = null, error = null } = result || {};\n\n if (error !== null) {\n return ctx.unauthorized(error);\n }\n\n if (authenticated) {\n ctx.state.isAuthenticated = true;\n ctx.state.auth = {\n strategy,\n credentials,\n ability,\n };\n\n return next();\n }\n }\n\n return ctx.unauthorized('Missing or invalid credentials');\n },\n\n async verify(auth, config = {}) {\n if (config === false) {\n return;\n }\n\n if (!auth) {\n throw new errors.UnauthorizedError();\n }\n\n if (typeof auth.strategy.verify === 'function') {\n return auth.strategy.verify(auth, config);\n }\n },\n };\n};\n\nexport default createAuthentication;\n"],"names":[],"mappings":";;;AAgCA,MAAM,uBACJ;AAEF,MAAM,gBAAgB,CAAC,aAAuB;AAC5C,SAAO,IAAI,gBAAgB,QAAQ,GAAG,oBAAoB;AAC1D,SAAO,OAAO,SAAS,iBAAiB,YAAY,oBAAoB;AAEpE,MAAA,IAAI,UAAU,QAAQ,GAAG;AAC3B,WAAO,OAAO,SAAS,WAAW,YAAY,oBAAoB;AAAA,EACpE;AACF;AAEA,MAAM,uBAAuB,MAAsB;AACjD,QAAM,aAAyC,CAAA;AAExC,SAAA;AAAA,IACL,SAAS,MAAM,UAAU;AACvB,oBAAc,QAAQ;AAElB,UAAA,CAAC,WAAW,IAAI,GAAG;AACV,mBAAA,IAAI,IAAI;MACrB;AAEW,iBAAA,IAAI,EAAE,KAAK,QAAQ;AAEvB,aAAA;AAAA,IACT;AAAA,IAEA,MAAM,aAAa,KAAK,MAAM;AACtB,YAAA,QAAsB,IAAI,MAAM;AAGhC,YAAA,SAAS,OAAO,QAAQ;AAE9B,UAAI,WAAW,OAAO;AACpB,eAAO,KAAK;AAAA,MACd;AAEM,YAAA,kBAAkB,MAAM,KAAK,OAAO,WAAW,MAAM,KAAK,IAAI,IAAI;AACxE,YAAM,mBAAoB,QAAQ,cAAc,mBAAmB,CAAA;AAInE,YAAM,kBAA8B,iBAAiB;AAAA,QACnD,CAAC,KAAK,aAAgC;AAEhC,cAAA,OAAO,aAAa,UAAU;AAChC,kBAAM,gBAAgB,gBAAgB,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAEvE,gBAAI,eAAe;AACjB,kBAAI,KAAK,aAAa;AAAA,YACxB;AAAA,UAAA,WAIO,OAAO,aAAa,UAAU;AACrC,0BAAc,QAAQ;AAEtB,gBAAI,KAAK,QAAQ;AAAA,UACnB;AAEO,iBAAA;AAAA,QACT;AAAA,QACA,CAAC;AAAA,MAAA;AAGH,iBAAW,YAAY,iBAAiB;AACtC,cAAM,SAAS,MAAM,SAAS,aAAa,GAAG;AAExC,cAAA,EAAE,gBAAgB,OAAO,aAAa,UAAU,MAAM,QAAQ,KAAA,IAAS,UAAU;AAEvF,YAAI,UAAU,MAAM;AACX,iBAAA,IAAI,aAAa,KAAK;AAAA,QAC/B;AAEA,YAAI,eAAe;AACjB,cAAI,MAAM,kBAAkB;AAC5B,cAAI,MAAM,OAAO;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAGF,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAEO,aAAA,IAAI,aAAa,gCAAgC;AAAA,IAC1D;AAAA,IAEA,MAAM,OAAO,MAAM,SAAS,IAAI;AAC9B,UAAI,WAAW,OAAO;AACpB;AAAA,MACF;AAEA,UAAI,CAAC,MAAM;AACH,cAAA,IAAI,OAAO;MACnB;AAEA,UAAI,OAAO,KAAK,SAAS,WAAW,YAAY;AAC9C,eAAO,KAAK,SAAS,OAAO,MAAM,MAAM;AAAA,MAC1C;AAAA,IACF;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/services/auth/index.ts"],"sourcesContent":["import assert from 'assert/strict';\nimport { has } from 'lodash/fp';\n\nimport { errors } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport type { ParameterizedContext } from 'koa';\n\ninterface AuthenticationResponse {\n authenticated?: boolean;\n credentials?: unknown;\n ability?: unknown;\n error?: Error | null;\n}\n\ninterface AuthenticationInfo {\n strategy: Strategy;\n credentials: unknown;\n ability: unknown;\n}\n\ninterface Strategy {\n name: string;\n authenticate: (ctx: ParameterizedContext) => Promise<AuthenticationResponse>;\n verify?: (auth: AuthenticationInfo, config: Core.RouteConfig['auth']) => Promise<any>;\n}\n\ninterface Authentication {\n register: (type: string, strategy: Strategy) => Authentication;\n authenticate: Core.MiddlewareHandler;\n verify: (auth: AuthenticationInfo, config?: Core.RouteConfig['auth']) => Promise<any>;\n}\n\nconst INVALID_STRATEGY_MSG =\n 'Invalid auth strategy. Expecting an object with properties {name: string, authenticate: function, verify: function}';\n\nconst validStrategy = (strategy: Strategy) => {\n assert(has('authenticate', strategy), INVALID_STRATEGY_MSG);\n assert(typeof strategy.authenticate === 'function', INVALID_STRATEGY_MSG);\n\n if (has('verify', strategy)) {\n assert(typeof strategy.verify === 'function', INVALID_STRATEGY_MSG);\n }\n};\n\nconst createAuthentication = (): Authentication => {\n const strategies: Record<string, Strategy[]> = {};\n\n return {\n register(type, strategy) {\n validStrategy(strategy);\n\n if (!strategies[type]) {\n strategies[type] = [];\n }\n\n strategies[type].push(strategy);\n\n return this;\n },\n\n async authenticate(ctx, next) {\n const route: Core.Route = ctx.state.route;\n\n // use route strategy\n const config = route?.config?.auth;\n\n if (config === false) {\n return next();\n }\n\n const routeStrategies = route.info.type ? strategies[route.info.type] : [];\n const configStrategies = (config?.strategies ?? routeStrategies ?? []) as Array<\n string | Strategy\n >;\n\n const strategiesToUse: Strategy[] = configStrategies.reduce(\n (acc, strategy: string | Strategy) => {\n // Resolve by strategy name\n if (typeof strategy === 'string') {\n const routeStrategy = routeStrategies.find((rs) => rs.name === strategy);\n\n if (routeStrategy) {\n acc.push(routeStrategy);\n }\n }\n\n // Use the given strategy as is\n else if (typeof strategy === 'object') {\n validStrategy(strategy);\n\n acc.push(strategy);\n }\n\n return acc;\n },\n [] as Strategy[]\n );\n\n for (const strategy of strategiesToUse) {\n const result = await strategy.authenticate(ctx);\n\n const { authenticated = false, credentials, ability = null, error = null } = result || {};\n\n if (error !== null) {\n return ctx.unauthorized(error);\n }\n\n if (authenticated) {\n ctx.state.isAuthenticated = true;\n ctx.state.auth = {\n strategy,\n credentials,\n ability,\n };\n\n return next();\n }\n }\n\n return ctx.unauthorized('Missing or invalid credentials');\n },\n\n async verify(auth, config = {}) {\n if (config === false) {\n return;\n }\n\n if (!auth) {\n throw new errors.UnauthorizedError();\n }\n\n if (typeof auth.strategy.verify === 'function') {\n return auth.strategy.verify(auth, config);\n }\n },\n };\n};\n\nexport default createAuthentication;\n"],"names":[],"mappings":";;;AAgCA,MAAM,uBACJ;AAEF,MAAM,gBAAgB,CAAC,aAAuB;AAC5C,SAAO,IAAI,gBAAgB,QAAQ,GAAG,oBAAoB;AAC1D,SAAO,OAAO,SAAS,iBAAiB,YAAY,oBAAoB;AAEpE,MAAA,IAAI,UAAU,QAAQ,GAAG;AAC3B,WAAO,OAAO,SAAS,WAAW,YAAY,oBAAoB;AAAA,EACpE;AACF;AAEA,MAAM,uBAAuB,MAAsB;AACjD,QAAM,aAAyC,CAAA;AAExC,SAAA;AAAA,IACL,SAAS,MAAM,UAAU;AACvB,oBAAc,QAAQ;AAElB,UAAA,CAAC,WAAW,IAAI,GAAG;AACV,mBAAA,IAAI,IAAI;MACrB;AAEW,iBAAA,IAAI,EAAE,KAAK,QAAQ;AAEvB,aAAA;AAAA,IACT;AAAA,IAEA,MAAM,aAAa,KAAK,MAAM;AACtB,YAAA,QAAoB,IAAI,MAAM;AAG9B,YAAA,SAAS,OAAO,QAAQ;AAE9B,UAAI,WAAW,OAAO;AACpB,eAAO,KAAK;AAAA,MACd;AAEM,YAAA,kBAAkB,MAAM,KAAK,OAAO,WAAW,MAAM,KAAK,IAAI,IAAI;AACxE,YAAM,mBAAoB,QAAQ,cAAc,mBAAmB,CAAA;AAInE,YAAM,kBAA8B,iBAAiB;AAAA,QACnD,CAAC,KAAK,aAAgC;AAEhC,cAAA,OAAO,aAAa,UAAU;AAChC,kBAAM,gBAAgB,gBAAgB,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAEvE,gBAAI,eAAe;AACjB,kBAAI,KAAK,aAAa;AAAA,YACxB;AAAA,UAAA,WAIO,OAAO,aAAa,UAAU;AACrC,0BAAc,QAAQ;AAEtB,gBAAI,KAAK,QAAQ;AAAA,UACnB;AAEO,iBAAA;AAAA,QACT;AAAA,QACA,CAAC;AAAA,MAAA;AAGH,iBAAW,YAAY,iBAAiB;AACtC,cAAM,SAAS,MAAM,SAAS,aAAa,GAAG;AAExC,cAAA,EAAE,gBAAgB,OAAO,aAAa,UAAU,MAAM,QAAQ,KAAA,IAAS,UAAU;AAEvF,YAAI,UAAU,MAAM;AACX,iBAAA,IAAI,aAAa,KAAK;AAAA,QAC/B;AAEA,YAAI,eAAe;AACjB,cAAI,MAAM,kBAAkB;AAC5B,cAAI,MAAM,OAAO;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAGF,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAEO,aAAA,IAAI,aAAa,gCAAgC;AAAA,IAC1D;AAAA,IAEA,MAAM,OAAO,MAAM,SAAS,IAAI;AAC9B,UAAI,WAAW,OAAO;AACpB;AAAA,MACF;AAEA,UAAI,CAAC,MAAM;AACH,cAAA,IAAI,OAAO;MACnB;AAEA,UAAI,OAAO,KAAK,SAAS,WAAW,YAAY;AAC9C,eAAO,KAAK,SAAS,OAAO,MAAM,MAAM;AAAA,MAC1C;AAAA,IACF;AAAA,EAAA;AAEJ;"}
@@ -1,8 +1,9 @@
1
- import type { Strapi, Common } from '@strapi/types';
1
+ import { sanitize, validate } from '@strapi/utils';
2
+ import type { Core } from '@strapi/types';
2
3
  /**
3
4
  * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)
4
5
  */
5
- declare const createContentAPI: (strapi: Strapi) => {
6
+ declare const createContentAPI: (strapi: Core.Strapi) => {
6
7
  permissions: {
7
8
  engine: import("@strapi/permissions/dist/engine").Engine;
8
9
  providers: {
@@ -48,7 +49,24 @@ declare const createContentAPI: (strapi: Strapi) => {
48
49
  controllers: Record<string, string[]>;
49
50
  }>;
50
51
  };
51
- getRoutesMap: () => Promise<Record<string, Common.Route[]>>;
52
+ getRoutesMap: () => Promise<Record<string, Core.Route[]>>;
53
+ sanitize: {
54
+ input: sanitize.SanitizeFunc;
55
+ output: sanitize.SanitizeFunc;
56
+ query: (query: Record<string, unknown>, schema: import("@strapi/utils/dist/types").Model, { auth }?: sanitize.Options | undefined) => Promise<Record<string, unknown>>;
57
+ filters: sanitize.SanitizeFunc;
58
+ sort: sanitize.SanitizeFunc;
59
+ fields: sanitize.SanitizeFunc;
60
+ populate: sanitize.SanitizeFunc;
61
+ };
62
+ validate: {
63
+ input: validate.ValidateFunc;
64
+ query: (query: Record<string, unknown>, schema: import("@strapi/utils/dist/types").Model, { auth }?: validate.Options | undefined) => Promise<void>;
65
+ filters: validate.ValidateFunc;
66
+ sort: validate.ValidateFunc;
67
+ fields: validate.ValidateFunc;
68
+ populate: validate.ValidateFunc;
69
+ };
52
70
  };
53
71
  export default createContentAPI;
54
72
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/content-api/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAepD;;GAEG;AACH,QAAA,MAAM,gBAAgB,WAAY,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDvC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/content-api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EAAE,IAAI,EAAO,MAAM,eAAe,CAAC;AAgB/C;;GAEG;AACH,QAAA,MAAM,gBAAgB,WAAY,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgF5C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  const _ = require("lodash");
3
+ const strapiUtils = require("@strapi/utils");
3
4
  const index = require("./permissions/index.js");
4
5
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
5
6
  const ___default = /* @__PURE__ */ _interopDefault(_);
@@ -50,9 +51,34 @@ const createContentAPI = (strapi) => {
50
51
  });
51
52
  return routesMap;
52
53
  };
54
+ const sanitizer = strapiUtils.sanitize.createAPISanitizers({
55
+ getModel(uid) {
56
+ return strapi.getModel(uid);
57
+ },
58
+ // NOTE: use lazy access to allow registration of sanitizers after the creation of the container
59
+ get sanitizers() {
60
+ return {
61
+ input: strapi.sanitizers.get("content-api.input"),
62
+ output: strapi.sanitizers.get("content-api.output")
63
+ };
64
+ }
65
+ });
66
+ const validator = strapiUtils.validate.createAPIValidators({
67
+ getModel(uid) {
68
+ return strapi.getModel(uid);
69
+ },
70
+ // NOTE: use lazy access to allow registration of validators after the creation of the container
71
+ get validators() {
72
+ return {
73
+ input: strapi.validators.get("content-api.input")
74
+ };
75
+ }
76
+ });
53
77
  return {
54
78
  permissions: index(strapi),
55
- getRoutesMap
79
+ getRoutesMap,
80
+ sanitize: sanitizer,
81
+ validate: validator
56
82
  };
57
83
  };
58
84
  module.exports = createContentAPI;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/services/content-api/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Strapi, Common } from '@strapi/types';\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Common.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Common.Route) => route.info.type === 'content-api';\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Strapi) => {\n const getRoutesMap = async () => {\n const routesMap: Record<string, Common.Route[]> = {};\n\n _.forEach(strapi.api, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return routesMap;\n };\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n };\n};\n\nexport default createContentAPI;\n"],"names":["_","instantiatePermissionsUtilities"],"mappings":";;;;;AAIA,MAAM,0BAA0B,CAAC,eAAuB,CAAC,UAAwB;AAC/E,QAAM,SAAS,MAAM,UAAU,MAAM,OAAO;AAC5C,QAAM,OAAO,WAAW,SAAY,GAAG,MAAM,GAAG,MAAM,IAAI,KAAK,IAAI,UAAU,GAAG,MAAM,IAAI;AAEnF,SAAA;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EAAA;AAEJ;AAEA,MAAM,mBAAmB,CAAC,UAAwB,MAAM,KAAK,SAAS;AAKhE,MAAA,mBAAmB,CAAC,WAAmB;AAC3C,QAAM,eAAe,YAAY;AAC/B,UAAM,YAA4C,CAAA;AAElDA,eAAA,QAAE,QAAQ,OAAO,KAAK,CAAC,KAAK,YAAY;AACtC,YAAM,SAASA,WAAAA,QAAE,QAAQ,IAAI,QAAQ,CAAC,UAAU;AAC9C,YAAI,YAAY,OAAO;AACrB,iBAAO,MAAM;AAAA,QACf;AAEO,eAAA;AAAA,MAAA,CACR,EAAE,OAAO,gBAAgB;AAEtB,UAAA,OAAO,WAAW,GAAG;AACvB;AAAA,MACF;AAEA,YAAM,YAAY,OAAO,OAAO,IAAI,iBAAiB;AACrD,gBAAU,QAAQ,OAAO,EAAE,IAAI,OAAO,IAAI,CAAC,WAAW;AAAA,QACpD,GAAG;AAAA,QACH,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI;AAAA,MAC/B,EAAA;AAAA,IAAA,CACH;AAEDA,eAAA,QAAE,QAAQ,OAAO,SAAS,CAAC,QAAQ,eAAe;AAC1C,YAAA,kBAAkB,wBAAwB,UAAU;AAE1D,UAAI,MAAM,QAAQ,OAAO,MAAM,GAAG;AAChC,eAAO,OAAO,OAAO,IAAI,eAAe,EAAE,OAAO,gBAAgB;AAAA,MACnE;AAEA,YAAM,SAASA,WAAA,QAAE,QAAQ,OAAO,QAAQ,CAAC,UAAU,MAAM,OAAO,IAAI,eAAe,CAAC,EAAE;AAAA,QACpF;AAAA,MAAA;AAGE,UAAA,OAAO,WAAW,GAAG;AACvB;AAAA,MACF;AAEA,YAAM,YAAY,OAAO,OAAO,IAAI,iBAAiB;AACrD,gBAAU,WAAW,UAAU,EAAE,IAAI,OAAO,IAAI,CAAC,WAAW;AAAA,QAC1D,GAAG;AAAA,QACH,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI;AAAA,MAC/B,EAAA;AAAA,IAAA,CACH;AAEM,WAAA;AAAA,EAAA;AAGF,SAAA;AAAA,IACL,aAAaC,MAAgC,MAAM;AAAA,IACnD;AAAA,EAAA;AAEJ;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/services/content-api/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { sanitize, validate } from '@strapi/utils';\n\nimport type { Core, UID } from '@strapi/types';\n\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Core.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Core.Route) => route.info.type === 'content-api';\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Core.Strapi) => {\n const getRoutesMap = async () => {\n const routesMap: Record<string, Core.Route[]> = {};\n\n _.forEach(strapi.api, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return routesMap;\n };\n\n const sanitizer = sanitize.createAPISanitizers({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of sanitizers after the creation of the container\n get sanitizers() {\n return {\n input: strapi.sanitizers.get('content-api.input'),\n output: strapi.sanitizers.get('content-api.output'),\n };\n },\n });\n\n const validator = validate.createAPIValidators({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of validators after the creation of the container\n get validators() {\n return {\n input: strapi.validators.get('content-api.input'),\n };\n },\n });\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n sanitize: sanitizer,\n validate: validator,\n };\n};\n\nexport default createContentAPI;\n"],"names":["_","sanitize","validate","instantiatePermissionsUtilities"],"mappings":";;;;;;AAOA,MAAM,0BAA0B,CAAC,eAAuB,CAAC,UAAsB;AAC7E,QAAM,SAAS,MAAM,UAAU,MAAM,OAAO;AAC5C,QAAM,OAAO,WAAW,SAAY,GAAG,MAAM,GAAG,MAAM,IAAI,KAAK,IAAI,UAAU,GAAG,MAAM,IAAI;AAEnF,SAAA;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EAAA;AAEJ;AAEA,MAAM,mBAAmB,CAAC,UAAsB,MAAM,KAAK,SAAS;AAK9D,MAAA,mBAAmB,CAAC,WAAwB;AAChD,QAAM,eAAe,YAAY;AAC/B,UAAM,YAA0C,CAAA;AAEhDA,eAAA,QAAE,QAAQ,OAAO,KAAK,CAAC,KAAK,YAAY;AACtC,YAAM,SAASA,WAAAA,QAAE,QAAQ,IAAI,QAAQ,CAAC,UAAU;AAC9C,YAAI,YAAY,OAAO;AACrB,iBAAO,MAAM;AAAA,QACf;AAEO,eAAA;AAAA,MAAA,CACR,EAAE,OAAO,gBAAgB;AAEtB,UAAA,OAAO,WAAW,GAAG;AACvB;AAAA,MACF;AAEA,YAAM,YAAY,OAAO,OAAO,IAAI,iBAAiB;AACrD,gBAAU,QAAQ,OAAO,EAAE,IAAI,OAAO,IAAI,CAAC,WAAW;AAAA,QACpD,GAAG;AAAA,QACH,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI;AAAA,MAC/B,EAAA;AAAA,IAAA,CACH;AAEDA,eAAA,QAAE,QAAQ,OAAO,SAAS,CAAC,QAAQ,eAAe;AAC1C,YAAA,kBAAkB,wBAAwB,UAAU;AAE1D,UAAI,MAAM,QAAQ,OAAO,MAAM,GAAG;AAChC,eAAO,OAAO,OAAO,IAAI,eAAe,EAAE,OAAO,gBAAgB;AAAA,MACnE;AAEA,YAAM,SAASA,WAAA,QAAE,QAAQ,OAAO,QAAQ,CAAC,UAAU,MAAM,OAAO,IAAI,eAAe,CAAC,EAAE;AAAA,QACpF;AAAA,MAAA;AAGE,UAAA,OAAO,WAAW,GAAG;AACvB;AAAA,MACF;AAEA,YAAM,YAAY,OAAO,OAAO,IAAI,iBAAiB;AACrD,gBAAU,WAAW,UAAU,EAAE,IAAI,OAAO,IAAI,CAAC,WAAW;AAAA,QAC1D,GAAG;AAAA,QACH,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI;AAAA,MAC/B,EAAA;AAAA,IAAA,CACH;AAEM,WAAA;AAAA,EAAA;AAGH,QAAA,YAAYC,qBAAS,oBAAoB;AAAA,IAC7C,SAAS,KAAa;AACb,aAAA,OAAO,SAAS,GAAiB;AAAA,IAC1C;AAAA;AAAA,IAEA,IAAI,aAAa;AACR,aAAA;AAAA,QACL,OAAO,OAAO,WAAW,IAAI,mBAAmB;AAAA,QAChD,QAAQ,OAAO,WAAW,IAAI,oBAAoB;AAAA,MAAA;AAAA,IAEtD;AAAA,EAAA,CACD;AAEK,QAAA,YAAYC,qBAAS,oBAAoB;AAAA,IAC7C,SAAS,KAAa;AACb,aAAA,OAAO,SAAS,GAAiB;AAAA,IAC1C;AAAA;AAAA,IAEA,IAAI,aAAa;AACR,aAAA;AAAA,QACL,OAAO,OAAO,WAAW,IAAI,mBAAmB;AAAA,MAAA;AAAA,IAEpD;AAAA,EAAA,CACD;AAEM,SAAA;AAAA,IACL,aAAaC,MAAgC,MAAM;AAAA,IACnD;AAAA,IACA,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAEd;;"}
@@ -1,4 +1,5 @@
1
1
  import _ from "lodash";
2
+ import { sanitize, validate } from "@strapi/utils";
2
3
  import instantiatePermissionsUtilities from "./permissions/index.mjs";
3
4
  const transformRoutePrefixFor = (pluginName) => (route) => {
4
5
  const prefix = route.config && route.config.prefix;
@@ -47,9 +48,34 @@ const createContentAPI = (strapi) => {
47
48
  });
48
49
  return routesMap;
49
50
  };
51
+ const sanitizer = sanitize.createAPISanitizers({
52
+ getModel(uid) {
53
+ return strapi.getModel(uid);
54
+ },
55
+ // NOTE: use lazy access to allow registration of sanitizers after the creation of the container
56
+ get sanitizers() {
57
+ return {
58
+ input: strapi.sanitizers.get("content-api.input"),
59
+ output: strapi.sanitizers.get("content-api.output")
60
+ };
61
+ }
62
+ });
63
+ const validator = validate.createAPIValidators({
64
+ getModel(uid) {
65
+ return strapi.getModel(uid);
66
+ },
67
+ // NOTE: use lazy access to allow registration of validators after the creation of the container
68
+ get validators() {
69
+ return {
70
+ input: strapi.validators.get("content-api.input")
71
+ };
72
+ }
73
+ });
50
74
  return {
51
75
  permissions: instantiatePermissionsUtilities(strapi),
52
- getRoutesMap
76
+ getRoutesMap,
77
+ sanitize: sanitizer,
78
+ validate: validator
53
79
  };
54
80
  };
55
81
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/services/content-api/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Strapi, Common } from '@strapi/types';\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Common.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Common.Route) => route.info.type === 'content-api';\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Strapi) => {\n const getRoutesMap = async () => {\n const routesMap: Record<string, Common.Route[]> = {};\n\n _.forEach(strapi.api, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return routesMap;\n };\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n };\n};\n\nexport default createContentAPI;\n"],"names":[],"mappings":";;AAIA,MAAM,0BAA0B,CAAC,eAAuB,CAAC,UAAwB;AAC/E,QAAM,SAAS,MAAM,UAAU,MAAM,OAAO;AAC5C,QAAM,OAAO,WAAW,SAAY,GAAG,MAAM,GAAG,MAAM,IAAI,KAAK,IAAI,UAAU,GAAG,MAAM,IAAI;AAEnF,SAAA;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EAAA;AAEJ;AAEA,MAAM,mBAAmB,CAAC,UAAwB,MAAM,KAAK,SAAS;AAKhE,MAAA,mBAAmB,CAAC,WAAmB;AAC3C,QAAM,eAAe,YAAY;AAC/B,UAAM,YAA4C,CAAA;AAElD,MAAE,QAAQ,OAAO,KAAK,CAAC,KAAK,YAAY;AACtC,YAAM,SAAS,EAAE,QAAQ,IAAI,QAAQ,CAAC,UAAU;AAC9C,YAAI,YAAY,OAAO;AACrB,iBAAO,MAAM;AAAA,QACf;AAEO,eAAA;AAAA,MAAA,CACR,EAAE,OAAO,gBAAgB;AAEtB,UAAA,OAAO,WAAW,GAAG;AACvB;AAAA,MACF;AAEA,YAAM,YAAY,OAAO,OAAO,IAAI,iBAAiB;AACrD,gBAAU,QAAQ,OAAO,EAAE,IAAI,OAAO,IAAI,CAAC,WAAW;AAAA,QACpD,GAAG;AAAA,QACH,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI;AAAA,MAC/B,EAAA;AAAA,IAAA,CACH;AAED,MAAE,QAAQ,OAAO,SAAS,CAAC,QAAQ,eAAe;AAC1C,YAAA,kBAAkB,wBAAwB,UAAU;AAE1D,UAAI,MAAM,QAAQ,OAAO,MAAM,GAAG;AAChC,eAAO,OAAO,OAAO,IAAI,eAAe,EAAE,OAAO,gBAAgB;AAAA,MACnE;AAEA,YAAM,SAAS,EAAE,QAAQ,OAAO,QAAQ,CAAC,UAAU,MAAM,OAAO,IAAI,eAAe,CAAC,EAAE;AAAA,QACpF;AAAA,MAAA;AAGE,UAAA,OAAO,WAAW,GAAG;AACvB;AAAA,MACF;AAEA,YAAM,YAAY,OAAO,OAAO,IAAI,iBAAiB;AACrD,gBAAU,WAAW,UAAU,EAAE,IAAI,OAAO,IAAI,CAAC,WAAW;AAAA,QAC1D,GAAG;AAAA,QACH,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI;AAAA,MAC/B,EAAA;AAAA,IAAA,CACH;AAEM,WAAA;AAAA,EAAA;AAGF,SAAA;AAAA,IACL,aAAa,gCAAgC,MAAM;AAAA,IACnD;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/services/content-api/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { sanitize, validate } from '@strapi/utils';\n\nimport type { Core, UID } from '@strapi/types';\n\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Core.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Core.Route) => route.info.type === 'content-api';\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Core.Strapi) => {\n const getRoutesMap = async () => {\n const routesMap: Record<string, Core.Route[]> = {};\n\n _.forEach(strapi.api, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return routesMap;\n };\n\n const sanitizer = sanitize.createAPISanitizers({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of sanitizers after the creation of the container\n get sanitizers() {\n return {\n input: strapi.sanitizers.get('content-api.input'),\n output: strapi.sanitizers.get('content-api.output'),\n };\n },\n });\n\n const validator = validate.createAPIValidators({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of validators after the creation of the container\n get validators() {\n return {\n input: strapi.validators.get('content-api.input'),\n };\n },\n });\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n sanitize: sanitizer,\n validate: validator,\n };\n};\n\nexport default createContentAPI;\n"],"names":[],"mappings":";;;AAOA,MAAM,0BAA0B,CAAC,eAAuB,CAAC,UAAsB;AAC7E,QAAM,SAAS,MAAM,UAAU,MAAM,OAAO;AAC5C,QAAM,OAAO,WAAW,SAAY,GAAG,MAAM,GAAG,MAAM,IAAI,KAAK,IAAI,UAAU,GAAG,MAAM,IAAI;AAEnF,SAAA;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EAAA;AAEJ;AAEA,MAAM,mBAAmB,CAAC,UAAsB,MAAM,KAAK,SAAS;AAK9D,MAAA,mBAAmB,CAAC,WAAwB;AAChD,QAAM,eAAe,YAAY;AAC/B,UAAM,YAA0C,CAAA;AAEhD,MAAE,QAAQ,OAAO,KAAK,CAAC,KAAK,YAAY;AACtC,YAAM,SAAS,EAAE,QAAQ,IAAI,QAAQ,CAAC,UAAU;AAC9C,YAAI,YAAY,OAAO;AACrB,iBAAO,MAAM;AAAA,QACf;AAEO,eAAA;AAAA,MAAA,CACR,EAAE,OAAO,gBAAgB;AAEtB,UAAA,OAAO,WAAW,GAAG;AACvB;AAAA,MACF;AAEA,YAAM,YAAY,OAAO,OAAO,IAAI,iBAAiB;AACrD,gBAAU,QAAQ,OAAO,EAAE,IAAI,OAAO,IAAI,CAAC,WAAW;AAAA,QACpD,GAAG;AAAA,QACH,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI;AAAA,MAC/B,EAAA;AAAA,IAAA,CACH;AAED,MAAE,QAAQ,OAAO,SAAS,CAAC,QAAQ,eAAe;AAC1C,YAAA,kBAAkB,wBAAwB,UAAU;AAE1D,UAAI,MAAM,QAAQ,OAAO,MAAM,GAAG;AAChC,eAAO,OAAO,OAAO,IAAI,eAAe,EAAE,OAAO,gBAAgB;AAAA,MACnE;AAEA,YAAM,SAAS,EAAE,QAAQ,OAAO,QAAQ,CAAC,UAAU,MAAM,OAAO,IAAI,eAAe,CAAC,EAAE;AAAA,QACpF;AAAA,MAAA;AAGE,UAAA,OAAO,WAAW,GAAG;AACvB;AAAA,MACF;AAEA,YAAM,YAAY,OAAO,OAAO,IAAI,iBAAiB;AACrD,gBAAU,WAAW,UAAU,EAAE,IAAI,OAAO,IAAI,CAAC,WAAW;AAAA,QAC1D,GAAG;AAAA,QACH,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI;AAAA,MAC/B,EAAA;AAAA,IAAA,CACH;AAEM,WAAA;AAAA,EAAA;AAGH,QAAA,YAAY,SAAS,oBAAoB;AAAA,IAC7C,SAAS,KAAa;AACb,aAAA,OAAO,SAAS,GAAiB;AAAA,IAC1C;AAAA;AAAA,IAEA,IAAI,aAAa;AACR,aAAA;AAAA,QACL,OAAO,OAAO,WAAW,IAAI,mBAAmB;AAAA,QAChD,QAAQ,OAAO,WAAW,IAAI,oBAAoB;AAAA,MAAA;AAAA,IAEtD;AAAA,EAAA,CACD;AAEK,QAAA,YAAY,SAAS,oBAAoB;AAAA,IAC7C,SAAS,KAAa;AACb,aAAA,OAAO,SAAS,GAAiB;AAAA,IAC1C;AAAA;AAAA,IAEA,IAAI,aAAa;AACR,aAAA;AAAA,QACL,OAAO,OAAO,WAAW,IAAI,mBAAmB;AAAA,MAAA;AAAA,IAEpD;AAAA,EAAA,CACD;AAEM,SAAA;AAAA,IACL,aAAa,gCAAgC,MAAM;AAAA,IACnD;AAAA,IACA,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAEd;"}
@@ -1,9 +1,9 @@
1
- import type { Strapi } from '@strapi/types';
1
+ import type { Core } from '@strapi/types';
2
2
  /**
3
3
  * Create instances of providers and permission engine for the core content-API service.
4
- * Also, expose utilities to get informations about available actions and such.
4
+ * Also, expose utilities to get information about available actions and such.
5
5
  */
6
- declare const _default: (strapi: Strapi) => {
6
+ declare const _default: (strapi: Core.Strapi) => {
7
7
  engine: import("@strapi/permissions/dist/engine").Engine;
8
8
  providers: {
9
9
  action: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/content-api/permissions/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAU,MAAM,eAAe,CAAC;AA8BpD;;;GAGG;iCACqB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAkBT,OAAO,MAAM,EAAE,MAAM,EAAE,CAAC;;;AAlB7C,wBAqHE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/content-api/permissions/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AA8B1C;;;GAGG;iCACqB,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAkBd,OAAO,MAAM,EAAE,MAAM,EAAE,CAAC;;;AAlB7C,wBAmHE"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/services/content-api/permissions/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Strapi, Common } from '@strapi/types';\nimport { createActionProvider, createConditionProvider } from './providers';\nimport createPermissionEngine from './engine';\n\nconst typeSymbol = Symbol.for('__type__');\n\ninterface ValidatePermissionHandler {\n (params: { permission: { action: string } }): boolean;\n}\n\n/**\n * Creates an handler that checks if the permission's action exists in the action registry\n */\nconst createValidatePermissionHandler =\n (actionProvider: ReturnType<typeof createActionProvider>): ValidatePermissionHandler =>\n ({ permission }) => {\n const action = actionProvider.get(permission.action);\n\n // If the action isn't registered into the action provider, then ignore the permission and warn the user\n if (!action) {\n strapi.log.debug(\n `Unknown action \"${permission.action}\" supplied when registering a new permission`\n );\n\n return false;\n }\n\n return true;\n };\n\n/**\n * Create instances of providers and permission engine for the core content-API service.\n * Also, expose utilities to get informations about available actions and such.\n */\nexport default (strapi: Strapi) => {\n // NOTE: Here we define both an action and condition provider,\n // but at the moment, we're only using the action one.\n const providers = {\n action: createActionProvider(),\n condition: createConditionProvider(),\n };\n\n /**\n * Get a tree representation of the available Content API actions\n * based on the methods of the Content API controllers.\n *\n * @note Only actions bound to a content-API route are returned.\n */\n const getActionsMap = () => {\n const actionMap: Record<\n string,\n {\n controllers: Record<string, string[]>;\n }\n > = {};\n\n /**\n * Check if a controller's action is bound to the\n * content-api by looking at a potential __type__ symbol\n */\n const isContentApi = (action: Common.ControllerHandler & { [s: symbol]: any }) => {\n if (!_.has(action, typeSymbol)) {\n return false;\n }\n\n return action[typeSymbol].includes('content-api');\n };\n\n /**\n * Register actions from a specific API source into the result tree\n */\n const registerAPIsActions = (\n apis: Record<string, Common.Plugin | Common.Module>,\n source: 'api' | 'plugin'\n ) => {\n _.forEach(apis, (api, apiName) => {\n const controllers = _.reduce(\n api.controllers,\n (acc, controller, controllerName) => {\n const contentApiActions = _.pickBy(controller, isContentApi);\n\n if (_.isEmpty(contentApiActions)) {\n return acc;\n }\n\n acc[controllerName] = Object.keys(contentApiActions);\n\n return acc;\n },\n {} as Record<string, string[]>\n );\n\n if (!_.isEmpty(controllers)) {\n actionMap[`${source}::${apiName}`] = { controllers };\n }\n });\n };\n\n registerAPIsActions(strapi.api, 'api');\n registerAPIsActions(strapi.plugins, 'plugin');\n\n return actionMap;\n };\n\n /**\n * Register all the content-API's controllers actions into the action provider.\n * This method make use of the {@link getActionsMap} to generate the list of actions to register.\n *\n * @return {void}\n */\n const registerActions = async () => {\n const actionsMap = getActionsMap();\n\n // For each API\n for (const [api, value] of Object.entries(actionsMap)) {\n const { controllers } = value;\n\n // Register controllers methods as actions\n for (const [controller, actions] of Object.entries(controllers)) {\n // Register each action individually\n await Promise.all(\n actions.map((action) => {\n const actionUID = `${api}.${controller}.${action}`;\n\n return providers.action.register(actionUID, {\n api,\n controller,\n action,\n uid: actionUID,\n });\n })\n );\n }\n }\n };\n\n // Create an instance of a content-API permission engine\n // and binds a custom validation handler to it\n const engine = createPermissionEngine({ providers });\n\n engine.on(\n 'before-format::validate.permission',\n createValidatePermissionHandler(providers.action)\n );\n\n return {\n engine,\n providers,\n registerActions,\n getActionsMap,\n };\n};\n"],"names":["action","strapi","createActionProvider","createConditionProvider","_","engine","createPermissionEngine"],"mappings":";;;;;;;AAKA,MAAM,aAAa,OAAO,IAAI,UAAU;AASxC,MAAM,kCACJ,CAAC,mBACD,CAAC,EAAE,iBAAiB;AAClB,QAAMA,UAAS,eAAe,IAAI,WAAW,MAAM;AAGnD,MAAI,CAACA,SAAQ;AACX,WAAO,IAAI;AAAA,MACT,mBAAmB,WAAW,MAAM;AAAA,IAAA;AAG/B,WAAA;AAAA,EACT;AAEO,SAAA;AACT;AAMF,MAAe,kCAAA,CAACC,YAAmB;AAGjC,QAAM,YAAY;AAAA,IAChB,QAAQC,OAAqB;AAAA,IAC7B,WAAWC,UAAwB;AAAA,EAAA;AASrC,QAAM,gBAAgB,MAAM;AAC1B,UAAM,YAKF,CAAA;AAME,UAAA,eAAe,CAACH,YAA4D;AAChF,UAAI,CAACI,WAAAA,QAAE,IAAIJ,SAAQ,UAAU,GAAG;AACvB,eAAA;AAAA,MACT;AAEA,aAAOA,QAAO,UAAU,EAAE,SAAS,aAAa;AAAA,IAAA;AAM5C,UAAA,sBAAsB,CAC1B,MACA,WACG;AACHI,iBAAAA,QAAE,QAAQ,MAAM,CAAC,KAAK,YAAY;AAChC,cAAM,cAAcA,WAAAA,QAAE;AAAA,UACpB,IAAI;AAAA,UACJ,CAAC,KAAK,YAAY,mBAAmB;AACnC,kBAAM,oBAAoBA,WAAA,QAAE,OAAO,YAAY,YAAY;AAEvD,gBAAAA,WAAA,QAAE,QAAQ,iBAAiB,GAAG;AACzB,qBAAA;AAAA,YACT;AAEA,gBAAI,cAAc,IAAI,OAAO,KAAK,iBAAiB;AAE5C,mBAAA;AAAA,UACT;AAAA,UACA,CAAC;AAAA,QAAA;AAGH,YAAI,CAACA,WAAA,QAAE,QAAQ,WAAW,GAAG;AAC3B,oBAAU,GAAG,MAAM,KAAK,OAAO,EAAE,IAAI,EAAE;QACzC;AAAA,MAAA,CACD;AAAA,IAAA;AAGiBH,wBAAAA,QAAO,KAAK,KAAK;AACjBA,wBAAAA,QAAO,SAAS,QAAQ;AAErC,WAAA;AAAA,EAAA;AAST,QAAM,kBAAkB,YAAY;AAClC,UAAM,aAAa;AAGnB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AAC/C,YAAA,EAAE,YAAgB,IAAA;AAGxB,iBAAW,CAAC,YAAY,OAAO,KAAK,OAAO,QAAQ,WAAW,GAAG;AAE/D,cAAM,QAAQ;AAAA,UACZ,QAAQ,IAAI,CAACD,YAAW;AACtB,kBAAM,YAAY,GAAG,GAAG,IAAI,UAAU,IAAIA,OAAM;AAEzC,mBAAA,UAAU,OAAO,SAAS,WAAW;AAAA,cAC1C;AAAA,cACA;AAAA,cACA,QAAAA;AAAA,cACA,KAAK;AAAA,YAAA,CACN;AAAA,UAAA,CACF;AAAA,QAAA;AAAA,MAEL;AAAA,IACF;AAAA,EAAA;AAKF,QAAMK,WAASC,OAAuB,EAAE,UAAW,CAAA;AAE5CD,WAAA;AAAA,IACL;AAAA,IACA,gCAAgC,UAAU,MAAM;AAAA,EAAA;AAG3C,SAAA;AAAA,IAAA,QACLA;AAAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/services/content-api/permissions/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Core } from '@strapi/types';\nimport { createActionProvider, createConditionProvider } from './providers';\nimport createPermissionEngine from './engine';\n\nconst typeSymbol = Symbol.for('__type__');\n\ninterface ValidatePermissionHandler {\n (params: { permission: { action: string } }): boolean;\n}\n\n/**\n * Creates a handler that checks if the permission's action exists in the action registry\n */\nconst createValidatePermissionHandler =\n (actionProvider: ReturnType<typeof createActionProvider>): ValidatePermissionHandler =>\n ({ permission }) => {\n const action = actionProvider.get(permission.action);\n\n // If the action isn't registered into the action provider, then ignore the permission and warn the user\n if (!action) {\n strapi.log.debug(\n `Unknown action \"${permission.action}\" supplied when registering a new permission`\n );\n\n return false;\n }\n\n return true;\n };\n\n/**\n * Create instances of providers and permission engine for the core content-API service.\n * Also, expose utilities to get information about available actions and such.\n */\nexport default (strapi: Core.Strapi) => {\n // NOTE: Here we define both an action and condition provider,\n // but at the moment, we're only using the action one.\n const providers = {\n action: createActionProvider(),\n condition: createConditionProvider(),\n };\n\n /**\n * Get a tree representation of the available Content API actions\n * based on the methods of the Content API controllers.\n *\n * @note Only actions bound to a content-API route are returned.\n */\n const getActionsMap = () => {\n const actionMap: Record<\n string,\n {\n controllers: Record<string, string[]>;\n }\n > = {};\n\n /**\n * Check if a controller's action is bound to the\n * content-api by looking at a potential __type__ symbol\n */\n const isContentApi = (action: Core.ControllerHandler & { [s: symbol]: any }) => {\n if (!_.has(action, typeSymbol)) {\n return false;\n }\n\n return action[typeSymbol].includes('content-api');\n };\n\n /**\n * Register actions from a specific API source into the result tree\n */\n const registerAPIsActions = (\n apis: Record<string, Core.Plugin | Core.Module>,\n source: 'api' | 'plugin'\n ) => {\n _.forEach(apis, (api, apiName) => {\n const controllers = _.reduce(\n api.controllers,\n (acc, controller, controllerName) => {\n const contentApiActions = _.pickBy(controller, isContentApi);\n\n if (_.isEmpty(contentApiActions)) {\n return acc;\n }\n\n acc[controllerName] = Object.keys(contentApiActions);\n\n return acc;\n },\n {} as Record<string, string[]>\n );\n\n if (!_.isEmpty(controllers)) {\n actionMap[`${source}::${apiName}`] = { controllers };\n }\n });\n };\n\n registerAPIsActions(strapi.api, 'api');\n registerAPIsActions(strapi.plugins, 'plugin');\n\n return actionMap;\n };\n\n /**\n * Register all the content-API controllers actions into the action provider.\n * This method make use of the {@link getActionsMap} to generate the list of actions to register.\n */\n const registerActions = async () => {\n const actionsMap = getActionsMap();\n\n // For each API\n for (const [api, value] of Object.entries(actionsMap)) {\n const { controllers } = value;\n\n // Register controllers methods as actions\n for (const [controller, actions] of Object.entries(controllers)) {\n // Register each action individually\n await Promise.all(\n actions.map((action) => {\n const actionUID = `${api}.${controller}.${action}`;\n\n return providers.action.register(actionUID, {\n api,\n controller,\n action,\n uid: actionUID,\n });\n })\n );\n }\n }\n };\n\n // Create an instance of a content-API permission engine\n // and binds a custom validation handler to it\n const engine = createPermissionEngine({ providers });\n\n engine.on(\n 'before-format::validate.permission',\n createValidatePermissionHandler(providers.action)\n );\n\n return {\n engine,\n providers,\n registerActions,\n getActionsMap,\n };\n};\n"],"names":["action","strapi","createActionProvider","createConditionProvider","_","engine","createPermissionEngine"],"mappings":";;;;;;;AAKA,MAAM,aAAa,OAAO,IAAI,UAAU;AASxC,MAAM,kCACJ,CAAC,mBACD,CAAC,EAAE,iBAAiB;AAClB,QAAMA,UAAS,eAAe,IAAI,WAAW,MAAM;AAGnD,MAAI,CAACA,SAAQ;AACX,WAAO,IAAI;AAAA,MACT,mBAAmB,WAAW,MAAM;AAAA,IAAA;AAG/B,WAAA;AAAA,EACT;AAEO,SAAA;AACT;AAMF,MAAe,kCAAA,CAACC,YAAwB;AAGtC,QAAM,YAAY;AAAA,IAChB,QAAQC,OAAqB;AAAA,IAC7B,WAAWC,UAAwB;AAAA,EAAA;AASrC,QAAM,gBAAgB,MAAM;AAC1B,UAAM,YAKF,CAAA;AAME,UAAA,eAAe,CAACH,YAA0D;AAC9E,UAAI,CAACI,WAAAA,QAAE,IAAIJ,SAAQ,UAAU,GAAG;AACvB,eAAA;AAAA,MACT;AAEA,aAAOA,QAAO,UAAU,EAAE,SAAS,aAAa;AAAA,IAAA;AAM5C,UAAA,sBAAsB,CAC1B,MACA,WACG;AACHI,iBAAAA,QAAE,QAAQ,MAAM,CAAC,KAAK,YAAY;AAChC,cAAM,cAAcA,WAAAA,QAAE;AAAA,UACpB,IAAI;AAAA,UACJ,CAAC,KAAK,YAAY,mBAAmB;AACnC,kBAAM,oBAAoBA,WAAA,QAAE,OAAO,YAAY,YAAY;AAEvD,gBAAAA,WAAA,QAAE,QAAQ,iBAAiB,GAAG;AACzB,qBAAA;AAAA,YACT;AAEA,gBAAI,cAAc,IAAI,OAAO,KAAK,iBAAiB;AAE5C,mBAAA;AAAA,UACT;AAAA,UACA,CAAC;AAAA,QAAA;AAGH,YAAI,CAACA,WAAA,QAAE,QAAQ,WAAW,GAAG;AAC3B,oBAAU,GAAG,MAAM,KAAK,OAAO,EAAE,IAAI,EAAE;QACzC;AAAA,MAAA,CACD;AAAA,IAAA;AAGiBH,wBAAAA,QAAO,KAAK,KAAK;AACjBA,wBAAAA,QAAO,SAAS,QAAQ;AAErC,WAAA;AAAA,EAAA;AAOT,QAAM,kBAAkB,YAAY;AAClC,UAAM,aAAa;AAGnB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AAC/C,YAAA,EAAE,YAAgB,IAAA;AAGxB,iBAAW,CAAC,YAAY,OAAO,KAAK,OAAO,QAAQ,WAAW,GAAG;AAE/D,cAAM,QAAQ;AAAA,UACZ,QAAQ,IAAI,CAACD,YAAW;AACtB,kBAAM,YAAY,GAAG,GAAG,IAAI,UAAU,IAAIA,OAAM;AAEzC,mBAAA,UAAU,OAAO,SAAS,WAAW;AAAA,cAC1C;AAAA,cACA;AAAA,cACA,QAAAA;AAAA,cACA,KAAK;AAAA,YAAA,CACN;AAAA,UAAA,CACF;AAAA,QAAA;AAAA,MAEL;AAAA,IACF;AAAA,EAAA;AAKF,QAAMK,WAASC,OAAuB,EAAE,UAAW,CAAA;AAE5CD,WAAA;AAAA,IACL;AAAA,IACA,gCAAgC,UAAU,MAAM;AAAA,EAAA;AAG3C,SAAA;AAAA,IAAA,QACLA;AAAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../src/services/content-api/permissions/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Strapi, Common } from '@strapi/types';\nimport { createActionProvider, createConditionProvider } from './providers';\nimport createPermissionEngine from './engine';\n\nconst typeSymbol = Symbol.for('__type__');\n\ninterface ValidatePermissionHandler {\n (params: { permission: { action: string } }): boolean;\n}\n\n/**\n * Creates an handler that checks if the permission's action exists in the action registry\n */\nconst createValidatePermissionHandler =\n (actionProvider: ReturnType<typeof createActionProvider>): ValidatePermissionHandler =>\n ({ permission }) => {\n const action = actionProvider.get(permission.action);\n\n // If the action isn't registered into the action provider, then ignore the permission and warn the user\n if (!action) {\n strapi.log.debug(\n `Unknown action \"${permission.action}\" supplied when registering a new permission`\n );\n\n return false;\n }\n\n return true;\n };\n\n/**\n * Create instances of providers and permission engine for the core content-API service.\n * Also, expose utilities to get informations about available actions and such.\n */\nexport default (strapi: Strapi) => {\n // NOTE: Here we define both an action and condition provider,\n // but at the moment, we're only using the action one.\n const providers = {\n action: createActionProvider(),\n condition: createConditionProvider(),\n };\n\n /**\n * Get a tree representation of the available Content API actions\n * based on the methods of the Content API controllers.\n *\n * @note Only actions bound to a content-API route are returned.\n */\n const getActionsMap = () => {\n const actionMap: Record<\n string,\n {\n controllers: Record<string, string[]>;\n }\n > = {};\n\n /**\n * Check if a controller's action is bound to the\n * content-api by looking at a potential __type__ symbol\n */\n const isContentApi = (action: Common.ControllerHandler & { [s: symbol]: any }) => {\n if (!_.has(action, typeSymbol)) {\n return false;\n }\n\n return action[typeSymbol].includes('content-api');\n };\n\n /**\n * Register actions from a specific API source into the result tree\n */\n const registerAPIsActions = (\n apis: Record<string, Common.Plugin | Common.Module>,\n source: 'api' | 'plugin'\n ) => {\n _.forEach(apis, (api, apiName) => {\n const controllers = _.reduce(\n api.controllers,\n (acc, controller, controllerName) => {\n const contentApiActions = _.pickBy(controller, isContentApi);\n\n if (_.isEmpty(contentApiActions)) {\n return acc;\n }\n\n acc[controllerName] = Object.keys(contentApiActions);\n\n return acc;\n },\n {} as Record<string, string[]>\n );\n\n if (!_.isEmpty(controllers)) {\n actionMap[`${source}::${apiName}`] = { controllers };\n }\n });\n };\n\n registerAPIsActions(strapi.api, 'api');\n registerAPIsActions(strapi.plugins, 'plugin');\n\n return actionMap;\n };\n\n /**\n * Register all the content-API's controllers actions into the action provider.\n * This method make use of the {@link getActionsMap} to generate the list of actions to register.\n *\n * @return {void}\n */\n const registerActions = async () => {\n const actionsMap = getActionsMap();\n\n // For each API\n for (const [api, value] of Object.entries(actionsMap)) {\n const { controllers } = value;\n\n // Register controllers methods as actions\n for (const [controller, actions] of Object.entries(controllers)) {\n // Register each action individually\n await Promise.all(\n actions.map((action) => {\n const actionUID = `${api}.${controller}.${action}`;\n\n return providers.action.register(actionUID, {\n api,\n controller,\n action,\n uid: actionUID,\n });\n })\n );\n }\n }\n };\n\n // Create an instance of a content-API permission engine\n // and binds a custom validation handler to it\n const engine = createPermissionEngine({ providers });\n\n engine.on(\n 'before-format::validate.permission',\n createValidatePermissionHandler(providers.action)\n );\n\n return {\n engine,\n providers,\n registerActions,\n getActionsMap,\n };\n};\n"],"names":["strapi"],"mappings":";;;;AAKA,MAAM,aAAa,OAAO,IAAI,UAAU;AASxC,MAAM,kCACJ,CAAC,mBACD,CAAC,EAAE,iBAAiB;AAClB,QAAM,SAAS,eAAe,IAAI,WAAW,MAAM;AAGnD,MAAI,CAAC,QAAQ;AACX,WAAO,IAAI;AAAA,MACT,mBAAmB,WAAW,MAAM;AAAA,IAAA;AAG/B,WAAA;AAAA,EACT;AAEO,SAAA;AACT;AAMF,MAAe,kCAAA,CAACA,YAAmB;AAGjC,QAAM,YAAY;AAAA,IAChB,QAAQ,qBAAqB;AAAA,IAC7B,WAAW,wBAAwB;AAAA,EAAA;AASrC,QAAM,gBAAgB,MAAM;AAC1B,UAAM,YAKF,CAAA;AAME,UAAA,eAAe,CAAC,WAA4D;AAChF,UAAI,CAAC,EAAE,IAAI,QAAQ,UAAU,GAAG;AACvB,eAAA;AAAA,MACT;AAEA,aAAO,OAAO,UAAU,EAAE,SAAS,aAAa;AAAA,IAAA;AAM5C,UAAA,sBAAsB,CAC1B,MACA,WACG;AACH,QAAE,QAAQ,MAAM,CAAC,KAAK,YAAY;AAChC,cAAM,cAAc,EAAE;AAAA,UACpB,IAAI;AAAA,UACJ,CAAC,KAAK,YAAY,mBAAmB;AACnC,kBAAM,oBAAoB,EAAE,OAAO,YAAY,YAAY;AAEvD,gBAAA,EAAE,QAAQ,iBAAiB,GAAG;AACzB,qBAAA;AAAA,YACT;AAEA,gBAAI,cAAc,IAAI,OAAO,KAAK,iBAAiB;AAE5C,mBAAA;AAAA,UACT;AAAA,UACA,CAAC;AAAA,QAAA;AAGH,YAAI,CAAC,EAAE,QAAQ,WAAW,GAAG;AAC3B,oBAAU,GAAG,MAAM,KAAK,OAAO,EAAE,IAAI,EAAE;QACzC;AAAA,MAAA,CACD;AAAA,IAAA;AAGiBA,wBAAAA,QAAO,KAAK,KAAK;AACjBA,wBAAAA,QAAO,SAAS,QAAQ;AAErC,WAAA;AAAA,EAAA;AAST,QAAM,kBAAkB,YAAY;AAClC,UAAM,aAAa;AAGnB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AAC/C,YAAA,EAAE,YAAgB,IAAA;AAGxB,iBAAW,CAAC,YAAY,OAAO,KAAK,OAAO,QAAQ,WAAW,GAAG;AAE/D,cAAM,QAAQ;AAAA,UACZ,QAAQ,IAAI,CAAC,WAAW;AACtB,kBAAM,YAAY,GAAG,GAAG,IAAI,UAAU,IAAI,MAAM;AAEzC,mBAAA,UAAU,OAAO,SAAS,WAAW;AAAA,cAC1C;AAAA,cACA;AAAA,cACA;AAAA,cACA,KAAK;AAAA,YAAA,CACN;AAAA,UAAA,CACF;AAAA,QAAA;AAAA,MAEL;AAAA,IACF;AAAA,EAAA;AAKF,QAAM,SAAS,uBAAuB,EAAE,UAAW,CAAA;AAE5C,SAAA;AAAA,IACL;AAAA,IACA,gCAAgC,UAAU,MAAM;AAAA,EAAA;AAG3C,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/services/content-api/permissions/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Core } from '@strapi/types';\nimport { createActionProvider, createConditionProvider } from './providers';\nimport createPermissionEngine from './engine';\n\nconst typeSymbol = Symbol.for('__type__');\n\ninterface ValidatePermissionHandler {\n (params: { permission: { action: string } }): boolean;\n}\n\n/**\n * Creates a handler that checks if the permission's action exists in the action registry\n */\nconst createValidatePermissionHandler =\n (actionProvider: ReturnType<typeof createActionProvider>): ValidatePermissionHandler =>\n ({ permission }) => {\n const action = actionProvider.get(permission.action);\n\n // If the action isn't registered into the action provider, then ignore the permission and warn the user\n if (!action) {\n strapi.log.debug(\n `Unknown action \"${permission.action}\" supplied when registering a new permission`\n );\n\n return false;\n }\n\n return true;\n };\n\n/**\n * Create instances of providers and permission engine for the core content-API service.\n * Also, expose utilities to get information about available actions and such.\n */\nexport default (strapi: Core.Strapi) => {\n // NOTE: Here we define both an action and condition provider,\n // but at the moment, we're only using the action one.\n const providers = {\n action: createActionProvider(),\n condition: createConditionProvider(),\n };\n\n /**\n * Get a tree representation of the available Content API actions\n * based on the methods of the Content API controllers.\n *\n * @note Only actions bound to a content-API route are returned.\n */\n const getActionsMap = () => {\n const actionMap: Record<\n string,\n {\n controllers: Record<string, string[]>;\n }\n > = {};\n\n /**\n * Check if a controller's action is bound to the\n * content-api by looking at a potential __type__ symbol\n */\n const isContentApi = (action: Core.ControllerHandler & { [s: symbol]: any }) => {\n if (!_.has(action, typeSymbol)) {\n return false;\n }\n\n return action[typeSymbol].includes('content-api');\n };\n\n /**\n * Register actions from a specific API source into the result tree\n */\n const registerAPIsActions = (\n apis: Record<string, Core.Plugin | Core.Module>,\n source: 'api' | 'plugin'\n ) => {\n _.forEach(apis, (api, apiName) => {\n const controllers = _.reduce(\n api.controllers,\n (acc, controller, controllerName) => {\n const contentApiActions = _.pickBy(controller, isContentApi);\n\n if (_.isEmpty(contentApiActions)) {\n return acc;\n }\n\n acc[controllerName] = Object.keys(contentApiActions);\n\n return acc;\n },\n {} as Record<string, string[]>\n );\n\n if (!_.isEmpty(controllers)) {\n actionMap[`${source}::${apiName}`] = { controllers };\n }\n });\n };\n\n registerAPIsActions(strapi.api, 'api');\n registerAPIsActions(strapi.plugins, 'plugin');\n\n return actionMap;\n };\n\n /**\n * Register all the content-API controllers actions into the action provider.\n * This method make use of the {@link getActionsMap} to generate the list of actions to register.\n */\n const registerActions = async () => {\n const actionsMap = getActionsMap();\n\n // For each API\n for (const [api, value] of Object.entries(actionsMap)) {\n const { controllers } = value;\n\n // Register controllers methods as actions\n for (const [controller, actions] of Object.entries(controllers)) {\n // Register each action individually\n await Promise.all(\n actions.map((action) => {\n const actionUID = `${api}.${controller}.${action}`;\n\n return providers.action.register(actionUID, {\n api,\n controller,\n action,\n uid: actionUID,\n });\n })\n );\n }\n }\n };\n\n // Create an instance of a content-API permission engine\n // and binds a custom validation handler to it\n const engine = createPermissionEngine({ providers });\n\n engine.on(\n 'before-format::validate.permission',\n createValidatePermissionHandler(providers.action)\n );\n\n return {\n engine,\n providers,\n registerActions,\n getActionsMap,\n };\n};\n"],"names":["strapi"],"mappings":";;;;AAKA,MAAM,aAAa,OAAO,IAAI,UAAU;AASxC,MAAM,kCACJ,CAAC,mBACD,CAAC,EAAE,iBAAiB;AAClB,QAAM,SAAS,eAAe,IAAI,WAAW,MAAM;AAGnD,MAAI,CAAC,QAAQ;AACX,WAAO,IAAI;AAAA,MACT,mBAAmB,WAAW,MAAM;AAAA,IAAA;AAG/B,WAAA;AAAA,EACT;AAEO,SAAA;AACT;AAMF,MAAe,kCAAA,CAACA,YAAwB;AAGtC,QAAM,YAAY;AAAA,IAChB,QAAQ,qBAAqB;AAAA,IAC7B,WAAW,wBAAwB;AAAA,EAAA;AASrC,QAAM,gBAAgB,MAAM;AAC1B,UAAM,YAKF,CAAA;AAME,UAAA,eAAe,CAAC,WAA0D;AAC9E,UAAI,CAAC,EAAE,IAAI,QAAQ,UAAU,GAAG;AACvB,eAAA;AAAA,MACT;AAEA,aAAO,OAAO,UAAU,EAAE,SAAS,aAAa;AAAA,IAAA;AAM5C,UAAA,sBAAsB,CAC1B,MACA,WACG;AACH,QAAE,QAAQ,MAAM,CAAC,KAAK,YAAY;AAChC,cAAM,cAAc,EAAE;AAAA,UACpB,IAAI;AAAA,UACJ,CAAC,KAAK,YAAY,mBAAmB;AACnC,kBAAM,oBAAoB,EAAE,OAAO,YAAY,YAAY;AAEvD,gBAAA,EAAE,QAAQ,iBAAiB,GAAG;AACzB,qBAAA;AAAA,YACT;AAEA,gBAAI,cAAc,IAAI,OAAO,KAAK,iBAAiB;AAE5C,mBAAA;AAAA,UACT;AAAA,UACA,CAAC;AAAA,QAAA;AAGH,YAAI,CAAC,EAAE,QAAQ,WAAW,GAAG;AAC3B,oBAAU,GAAG,MAAM,KAAK,OAAO,EAAE,IAAI,EAAE;QACzC;AAAA,MAAA,CACD;AAAA,IAAA;AAGiBA,wBAAAA,QAAO,KAAK,KAAK;AACjBA,wBAAAA,QAAO,SAAS,QAAQ;AAErC,WAAA;AAAA,EAAA;AAOT,QAAM,kBAAkB,YAAY;AAClC,UAAM,aAAa;AAGnB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AAC/C,YAAA,EAAE,YAAgB,IAAA;AAGxB,iBAAW,CAAC,YAAY,OAAO,KAAK,OAAO,QAAQ,WAAW,GAAG;AAE/D,cAAM,QAAQ;AAAA,UACZ,QAAQ,IAAI,CAAC,WAAW;AACtB,kBAAM,YAAY,GAAG,GAAG,IAAI,UAAU,IAAI,MAAM;AAEzC,mBAAA,UAAU,OAAO,SAAS,WAAW;AAAA,cAC1C;AAAA,cACA;AAAA,cACA;AAAA,cACA,KAAK;AAAA,YAAA,CACN;AAAA,UAAA,CACF;AAAA,QAAA;AAAA,MAEL;AAAA,IACF;AAAA,EAAA;AAKF,QAAM,SAAS,uBAAuB,EAAE,UAAW,CAAA;AAE5C,SAAA;AAAA,IACL;AAAA,IACA,gCAAgC,UAAU,MAAM;AAAA,EAAA;AAG3C,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
@@ -1,12 +1,12 @@
1
1
  import { Job } from 'node-schedule';
2
- import type { Strapi } from '@strapi/types';
2
+ import type { Core } from '@strapi/types';
3
3
  interface JobSpec {
4
4
  job: Job;
5
5
  options: string | number | Date;
6
6
  name: string | null;
7
7
  }
8
8
  type TaskFn = ({ strapi }: {
9
- strapi: Strapi;
9
+ strapi: Core.Strapi;
10
10
  }, ...args: unknown[]) => Promise<unknown>;
11
11
  type Task = TaskFn | {
12
12
  task: TaskFn;
@@ -1 +1 @@
1
- {"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/services/cron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,UAAU,OAAO;IACf,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAChC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,KAAK,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEvF,KAAK,IAAI,GACL,MAAM,GACN;IACE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN,UAAU,KAAK;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,QAAA,MAAM,iBAAiB;gBAKR,KAAK;iBAoCH,MAAM;;;;;CAgCtB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/services/cron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,UAAU,OAAO;IACf,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAChC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,KAAK,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE5F,KAAK,IAAI,GACL,MAAM,GACN;IACE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN,UAAU,KAAK;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,QAAA,MAAM,iBAAiB;gBAKR,KAAK;iBAoCH,MAAM;;;;;CAgCtB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cron.js","sources":["../../src/services/cron.ts"],"sourcesContent":["import { Job } from 'node-schedule';\nimport { isFunction } from 'lodash/fp';\nimport type { Strapi } from '@strapi/types';\n\ninterface JobSpec {\n job: Job;\n options: string | number | Date;\n name: string | null;\n}\n\ntype TaskFn = ({ strapi }: { strapi: Strapi }, ...args: unknown[]) => Promise<unknown>;\n\ntype Task =\n | TaskFn\n | {\n task: TaskFn;\n options: string;\n };\n\ninterface Tasks {\n [key: string]: Task;\n}\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: string | number | Date;\n let taskName: string | null;\n if (isFunction(taskValue)) {\n // don't use task name if key is the rule\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (isFunction(taskValue.task)) {\n // set task name if key is not the rule\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const fnWithStrapi = (...args: unknown[]) => fn({ strapi }, ...args);\n\n // const job = new Job(null, fnWithStrapi);\n const job = new Job(fnWithStrapi);\n jobsSpecs.push({ job, options, name: taskName });\n\n if (running) {\n job.schedule(options);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) {\n throw new Error('You must provide a name to remove a cron job.');\n }\n\n jobsSpecs\n .filter(({ name: jobSpecName }) => jobSpecName === name)\n .forEach(({ job }) => job.cancel());\n\n jobsSpecs = jobsSpecs.filter(({ name: jobSpecName }) => jobSpecName !== name);\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job, options }) => job.schedule(options));\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.cancel());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs = [];\n return this;\n },\n jobs: jobsSpecs,\n };\n};\n\nexport default createCronService;\n"],"names":["isFunction","Job"],"mappings":";;;AAuBA,MAAM,oBAAoB,MAAM;AAC9B,MAAI,YAAuB,CAAA;AAC3B,MAAI,UAAU;AAEP,SAAA;AAAA,IACL,IAAI,QAAe,IAAI;AACrB,iBAAW,kBAAkB,OAAO,KAAK,KAAK,GAAG;AACzC,cAAA,YAAY,MAAM,cAAc;AAElC,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAAA,EAAAA,WAAW,SAAS,GAAG;AAEd,qBAAA;AACN,eAAA,UAAU,KAAK,KAAK;AACf,oBAAA;AAAA,QACD,WAAAA,EAAA,WAAW,UAAU,IAAI,GAAG;AAE1B,qBAAA;AACN,eAAA,UAAU,KAAK,KAAK,SAAS;AAClC,oBAAU,UAAU;AAAA,QAAA,OACf;AACL,gBAAM,IAAI;AAAA,YACR,sCAAsC,cAAc;AAAA,UAAA;AAAA,QAExD;AAEM,cAAA,eAAe,IAAI,SAAoB,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;AAG7D,cAAA,MAAM,IAAIC,iBAAI,YAAY;AAChC,kBAAU,KAAK,EAAE,KAAK,SAAS,MAAM,UAAU;AAE/C,YAAI,SAAS;AACX,cAAI,SAAS,OAAO;AAAA,QACtB;AAAA,MACF;AACO,aAAA;AAAA,IACT;AAAA,IAEA,OAAO,MAAc;AACnB,UAAI,CAAC,MAAM;AACH,cAAA,IAAI,MAAM,+CAA+C;AAAA,MACjE;AAEA,gBACG,OAAO,CAAC,EAAE,MAAM,YAAA,MAAkB,gBAAgB,IAAI,EACtD,QAAQ,CAAC,EAAE,IAAA,MAAU,IAAI,OAAQ,CAAA;AAExB,kBAAA,UAAU,OAAO,CAAC,EAAE,MAAM,YAAY,MAAM,gBAAgB,IAAI;AACrE,aAAA;AAAA,IACT;AAAA,IAEA,QAAQ;AACI,gBAAA,QAAQ,CAAC,EAAE,KAAK,QAAc,MAAA,IAAI,SAAS,OAAO,CAAC;AACnD,gBAAA;AACH,aAAA;AAAA,IACT;AAAA,IAEA,OAAO;AACL,gBAAU,QAAQ,CAAC,EAAE,IAAU,MAAA,IAAI,QAAQ;AACjC,gBAAA;AACH,aAAA;AAAA,IACT;AAAA,IAEA,UAAU;AACR,WAAK,KAAK;AACV,kBAAY,CAAA;AACL,aAAA;AAAA,IACT;AAAA,IACA,MAAM;AAAA,EAAA;AAEV;;"}
1
+ {"version":3,"file":"cron.js","sources":["../../src/services/cron.ts"],"sourcesContent":["import { Job } from 'node-schedule';\nimport { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\ninterface JobSpec {\n job: Job;\n options: string | number | Date;\n name: string | null;\n}\n\ntype TaskFn = ({ strapi }: { strapi: Core.Strapi }, ...args: unknown[]) => Promise<unknown>;\n\ntype Task =\n | TaskFn\n | {\n task: TaskFn;\n options: string;\n };\n\ninterface Tasks {\n [key: string]: Task;\n}\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: string | number | Date;\n let taskName: string | null;\n if (isFunction(taskValue)) {\n // don't use task name if key is the rule\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (isFunction(taskValue.task)) {\n // set task name if key is not the rule\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const fnWithStrapi = (...args: unknown[]) => fn({ strapi }, ...args);\n\n // const job = new Job(null, fnWithStrapi);\n const job = new Job(fnWithStrapi);\n jobsSpecs.push({ job, options, name: taskName });\n\n if (running) {\n job.schedule(options);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) {\n throw new Error('You must provide a name to remove a cron job.');\n }\n\n jobsSpecs\n .filter(({ name: jobSpecName }) => jobSpecName === name)\n .forEach(({ job }) => job.cancel());\n\n jobsSpecs = jobsSpecs.filter(({ name: jobSpecName }) => jobSpecName !== name);\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job, options }) => job.schedule(options));\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.cancel());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs = [];\n return this;\n },\n jobs: jobsSpecs,\n };\n};\n\nexport default createCronService;\n"],"names":["isFunction","Job"],"mappings":";;;AAuBA,MAAM,oBAAoB,MAAM;AAC9B,MAAI,YAAuB,CAAA;AAC3B,MAAI,UAAU;AAEP,SAAA;AAAA,IACL,IAAI,QAAe,IAAI;AACrB,iBAAW,kBAAkB,OAAO,KAAK,KAAK,GAAG;AACzC,cAAA,YAAY,MAAM,cAAc;AAElC,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAAA,EAAAA,WAAW,SAAS,GAAG;AAEd,qBAAA;AACN,eAAA,UAAU,KAAK,KAAK;AACf,oBAAA;AAAA,QACD,WAAAA,EAAA,WAAW,UAAU,IAAI,GAAG;AAE1B,qBAAA;AACN,eAAA,UAAU,KAAK,KAAK,SAAS;AAClC,oBAAU,UAAU;AAAA,QAAA,OACf;AACL,gBAAM,IAAI;AAAA,YACR,sCAAsC,cAAc;AAAA,UAAA;AAAA,QAExD;AAEM,cAAA,eAAe,IAAI,SAAoB,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;AAG7D,cAAA,MAAM,IAAIC,iBAAI,YAAY;AAChC,kBAAU,KAAK,EAAE,KAAK,SAAS,MAAM,UAAU;AAE/C,YAAI,SAAS;AACX,cAAI,SAAS,OAAO;AAAA,QACtB;AAAA,MACF;AACO,aAAA;AAAA,IACT;AAAA,IAEA,OAAO,MAAc;AACnB,UAAI,CAAC,MAAM;AACH,cAAA,IAAI,MAAM,+CAA+C;AAAA,MACjE;AAEA,gBACG,OAAO,CAAC,EAAE,MAAM,YAAA,MAAkB,gBAAgB,IAAI,EACtD,QAAQ,CAAC,EAAE,IAAA,MAAU,IAAI,OAAQ,CAAA;AAExB,kBAAA,UAAU,OAAO,CAAC,EAAE,MAAM,YAAY,MAAM,gBAAgB,IAAI;AACrE,aAAA;AAAA,IACT;AAAA,IAEA,QAAQ;AACI,gBAAA,QAAQ,CAAC,EAAE,KAAK,QAAc,MAAA,IAAI,SAAS,OAAO,CAAC;AACnD,gBAAA;AACH,aAAA;AAAA,IACT;AAAA,IAEA,OAAO;AACL,gBAAU,QAAQ,CAAC,EAAE,IAAU,MAAA,IAAI,QAAQ;AACjC,gBAAA;AACH,aAAA;AAAA,IACT;AAAA,IAEA,UAAU;AACR,WAAK,KAAK;AACV,kBAAY,CAAA;AACL,aAAA;AAAA,IACT;AAAA,IACA,MAAM;AAAA,EAAA;AAEV;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"cron.mjs","sources":["../../src/services/cron.ts"],"sourcesContent":["import { Job } from 'node-schedule';\nimport { isFunction } from 'lodash/fp';\nimport type { Strapi } from '@strapi/types';\n\ninterface JobSpec {\n job: Job;\n options: string | number | Date;\n name: string | null;\n}\n\ntype TaskFn = ({ strapi }: { strapi: Strapi }, ...args: unknown[]) => Promise<unknown>;\n\ntype Task =\n | TaskFn\n | {\n task: TaskFn;\n options: string;\n };\n\ninterface Tasks {\n [key: string]: Task;\n}\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: string | number | Date;\n let taskName: string | null;\n if (isFunction(taskValue)) {\n // don't use task name if key is the rule\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (isFunction(taskValue.task)) {\n // set task name if key is not the rule\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const fnWithStrapi = (...args: unknown[]) => fn({ strapi }, ...args);\n\n // const job = new Job(null, fnWithStrapi);\n const job = new Job(fnWithStrapi);\n jobsSpecs.push({ job, options, name: taskName });\n\n if (running) {\n job.schedule(options);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) {\n throw new Error('You must provide a name to remove a cron job.');\n }\n\n jobsSpecs\n .filter(({ name: jobSpecName }) => jobSpecName === name)\n .forEach(({ job }) => job.cancel());\n\n jobsSpecs = jobsSpecs.filter(({ name: jobSpecName }) => jobSpecName !== name);\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job, options }) => job.schedule(options));\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.cancel());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs = [];\n return this;\n },\n jobs: jobsSpecs,\n };\n};\n\nexport default createCronService;\n"],"names":[],"mappings":";;AAuBA,MAAM,oBAAoB,MAAM;AAC9B,MAAI,YAAuB,CAAA;AAC3B,MAAI,UAAU;AAEP,SAAA;AAAA,IACL,IAAI,QAAe,IAAI;AACrB,iBAAW,kBAAkB,OAAO,KAAK,KAAK,GAAG;AACzC,cAAA,YAAY,MAAM,cAAc;AAElC,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA,WAAW,SAAS,GAAG;AAEd,qBAAA;AACN,eAAA,UAAU,KAAK,KAAK;AACf,oBAAA;AAAA,QACD,WAAA,WAAW,UAAU,IAAI,GAAG;AAE1B,qBAAA;AACN,eAAA,UAAU,KAAK,KAAK,SAAS;AAClC,oBAAU,UAAU;AAAA,QAAA,OACf;AACL,gBAAM,IAAI;AAAA,YACR,sCAAsC,cAAc;AAAA,UAAA;AAAA,QAExD;AAEM,cAAA,eAAe,IAAI,SAAoB,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;AAG7D,cAAA,MAAM,IAAI,IAAI,YAAY;AAChC,kBAAU,KAAK,EAAE,KAAK,SAAS,MAAM,UAAU;AAE/C,YAAI,SAAS;AACX,cAAI,SAAS,OAAO;AAAA,QACtB;AAAA,MACF;AACO,aAAA;AAAA,IACT;AAAA,IAEA,OAAO,MAAc;AACnB,UAAI,CAAC,MAAM;AACH,cAAA,IAAI,MAAM,+CAA+C;AAAA,MACjE;AAEA,gBACG,OAAO,CAAC,EAAE,MAAM,YAAA,MAAkB,gBAAgB,IAAI,EACtD,QAAQ,CAAC,EAAE,IAAA,MAAU,IAAI,OAAQ,CAAA;AAExB,kBAAA,UAAU,OAAO,CAAC,EAAE,MAAM,YAAY,MAAM,gBAAgB,IAAI;AACrE,aAAA;AAAA,IACT;AAAA,IAEA,QAAQ;AACI,gBAAA,QAAQ,CAAC,EAAE,KAAK,QAAc,MAAA,IAAI,SAAS,OAAO,CAAC;AACnD,gBAAA;AACH,aAAA;AAAA,IACT;AAAA,IAEA,OAAO;AACL,gBAAU,QAAQ,CAAC,EAAE,IAAU,MAAA,IAAI,QAAQ;AACjC,gBAAA;AACH,aAAA;AAAA,IACT;AAAA,IAEA,UAAU;AACR,WAAK,KAAK;AACV,kBAAY,CAAA;AACL,aAAA;AAAA,IACT;AAAA,IACA,MAAM;AAAA,EAAA;AAEV;"}
1
+ {"version":3,"file":"cron.mjs","sources":["../../src/services/cron.ts"],"sourcesContent":["import { Job } from 'node-schedule';\nimport { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\ninterface JobSpec {\n job: Job;\n options: string | number | Date;\n name: string | null;\n}\n\ntype TaskFn = ({ strapi }: { strapi: Core.Strapi }, ...args: unknown[]) => Promise<unknown>;\n\ntype Task =\n | TaskFn\n | {\n task: TaskFn;\n options: string;\n };\n\ninterface Tasks {\n [key: string]: Task;\n}\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: string | number | Date;\n let taskName: string | null;\n if (isFunction(taskValue)) {\n // don't use task name if key is the rule\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (isFunction(taskValue.task)) {\n // set task name if key is not the rule\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const fnWithStrapi = (...args: unknown[]) => fn({ strapi }, ...args);\n\n // const job = new Job(null, fnWithStrapi);\n const job = new Job(fnWithStrapi);\n jobsSpecs.push({ job, options, name: taskName });\n\n if (running) {\n job.schedule(options);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) {\n throw new Error('You must provide a name to remove a cron job.');\n }\n\n jobsSpecs\n .filter(({ name: jobSpecName }) => jobSpecName === name)\n .forEach(({ job }) => job.cancel());\n\n jobsSpecs = jobsSpecs.filter(({ name: jobSpecName }) => jobSpecName !== name);\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job, options }) => job.schedule(options));\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.cancel());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs = [];\n return this;\n },\n jobs: jobsSpecs,\n };\n};\n\nexport default createCronService;\n"],"names":[],"mappings":";;AAuBA,MAAM,oBAAoB,MAAM;AAC9B,MAAI,YAAuB,CAAA;AAC3B,MAAI,UAAU;AAEP,SAAA;AAAA,IACL,IAAI,QAAe,IAAI;AACrB,iBAAW,kBAAkB,OAAO,KAAK,KAAK,GAAG;AACzC,cAAA,YAAY,MAAM,cAAc;AAElC,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA,WAAW,SAAS,GAAG;AAEd,qBAAA;AACN,eAAA,UAAU,KAAK,KAAK;AACf,oBAAA;AAAA,QACD,WAAA,WAAW,UAAU,IAAI,GAAG;AAE1B,qBAAA;AACN,eAAA,UAAU,KAAK,KAAK,SAAS;AAClC,oBAAU,UAAU;AAAA,QAAA,OACf;AACL,gBAAM,IAAI;AAAA,YACR,sCAAsC,cAAc;AAAA,UAAA;AAAA,QAExD;AAEM,cAAA,eAAe,IAAI,SAAoB,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;AAG7D,cAAA,MAAM,IAAI,IAAI,YAAY;AAChC,kBAAU,KAAK,EAAE,KAAK,SAAS,MAAM,UAAU;AAE/C,YAAI,SAAS;AACX,cAAI,SAAS,OAAO;AAAA,QACtB;AAAA,MACF;AACO,aAAA;AAAA,IACT;AAAA,IAEA,OAAO,MAAc;AACnB,UAAI,CAAC,MAAM;AACH,cAAA,IAAI,MAAM,+CAA+C;AAAA,MACjE;AAEA,gBACG,OAAO,CAAC,EAAE,MAAM,YAAA,MAAkB,gBAAgB,IAAI,EACtD,QAAQ,CAAC,EAAE,IAAA,MAAU,IAAI,OAAQ,CAAA;AAExB,kBAAA,UAAU,OAAO,CAAC,EAAE,MAAM,YAAY,MAAM,gBAAgB,IAAI;AACrE,aAAA;AAAA,IACT;AAAA,IAEA,QAAQ;AACI,gBAAA,QAAQ,CAAC,EAAE,KAAK,QAAc,MAAA,IAAI,SAAS,OAAO,CAAC;AACnD,gBAAA;AACH,aAAA;AAAA,IACT;AAAA,IAEA,OAAO;AACL,gBAAU,QAAQ,CAAC,EAAE,IAAU,MAAA,IAAI,QAAQ;AACjC,gBAAA;AACH,aAAA;AAAA,IACT;AAAA,IAEA,UAAU;AACR,WAAK,KAAK;AACV,kBAAY,CAAA;AACL,aAAA;AAAA,IACT;AAAA,IACA,MAAM;AAAA,EAAA;AAEV;"}
@@ -1,4 +1,4 @@
1
- import type { Strapi, CustomFields } from '@strapi/types';
2
- declare const createCustomFields: (strapi: Strapi) => CustomFields.CustomFields;
1
+ import type { Core, Modules } from '@strapi/types';
2
+ declare const createCustomFields: (strapi: Core.Strapi) => Modules.CustomFields.CustomFields;
3
3
  export default createCustomFields;
4
4
  //# sourceMappingURL=custom-fields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"custom-fields.d.ts","sourceRoot":"","sources":["../../src/services/custom-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE1D,QAAA,MAAM,kBAAkB,WAAY,MAAM,KAAG,yBAM5C,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"custom-fields.d.ts","sourceRoot":"","sources":["../../src/services/custom-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEnD,QAAA,MAAM,kBAAkB,WAAY,KAAK,MAAM,KAAG,QAAQ,YAAY,CAAC,YAMtE,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"custom-fields.js","sources":["../../src/services/custom-fields.ts"],"sourcesContent":["import type { Strapi, CustomFields } from '@strapi/types';\n\nconst createCustomFields = (strapi: Strapi): CustomFields.CustomFields => {\n return {\n register(customField) {\n strapi.get('custom-fields').add(customField);\n },\n };\n};\n\nexport default createCustomFields;\n"],"names":[],"mappings":";AAEM,MAAA,qBAAqB,CAAC,WAA8C;AACjE,SAAA;AAAA,IACL,SAAS,aAAa;AACpB,aAAO,IAAI,eAAe,EAAE,IAAI,WAAW;AAAA,IAC7C;AAAA,EAAA;AAEJ;;"}
1
+ {"version":3,"file":"custom-fields.js","sources":["../../src/services/custom-fields.ts"],"sourcesContent":["import type { Core, Modules } from '@strapi/types';\n\nconst createCustomFields = (strapi: Core.Strapi): Modules.CustomFields.CustomFields => {\n return {\n register(customField) {\n strapi.get('custom-fields').add(customField);\n },\n };\n};\n\nexport default createCustomFields;\n"],"names":[],"mappings":";AAEM,MAAA,qBAAqB,CAAC,WAA2D;AAC9E,SAAA;AAAA,IACL,SAAS,aAAa;AACpB,aAAO,IAAI,eAAe,EAAE,IAAI,WAAW;AAAA,IAC7C;AAAA,EAAA;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"custom-fields.mjs","sources":["../../src/services/custom-fields.ts"],"sourcesContent":["import type { Strapi, CustomFields } from '@strapi/types';\n\nconst createCustomFields = (strapi: Strapi): CustomFields.CustomFields => {\n return {\n register(customField) {\n strapi.get('custom-fields').add(customField);\n },\n };\n};\n\nexport default createCustomFields;\n"],"names":[],"mappings":"AAEM,MAAA,qBAAqB,CAAC,WAA8C;AACjE,SAAA;AAAA,IACL,SAAS,aAAa;AACpB,aAAO,IAAI,eAAe,EAAE,IAAI,WAAW;AAAA,IAC7C;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"custom-fields.mjs","sources":["../../src/services/custom-fields.ts"],"sourcesContent":["import type { Core, Modules } from '@strapi/types';\n\nconst createCustomFields = (strapi: Core.Strapi): Modules.CustomFields.CustomFields => {\n return {\n register(customField) {\n strapi.get('custom-fields').add(customField);\n },\n };\n};\n\nexport default createCustomFields;\n"],"names":[],"mappings":"AAEM,MAAA,qBAAqB,CAAC,WAA2D;AAC9E,SAAA;AAAA,IACL,SAAS,aAAa;AACpB,aAAO,IAAI,eAAe,EAAE,IAAI,WAAW;AAAA,IAC7C;AAAA,EAAA;AAEJ;"}
@@ -1,4 +1,4 @@
1
- import type { Common, Documents } from '@strapi/types';
2
- export type RepositoryFactoryMethod = (uid: Common.UID.CollectionType) => Documents.ServiceInstance;
1
+ import type { UID, Modules } from '@strapi/types';
2
+ export type RepositoryFactoryMethod = <TCollectionTypeUID extends UID.CollectionType>(uid: TCollectionTypeUID) => Modules.Documents.ServiceInstance<TCollectionTypeUID>;
3
3
  export declare const wrapInTransaction: (fn: (...args: any) => any) => (...args: any[]) => Promise<any>;
4
4
  //# sourceMappingURL=common.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEvD,MAAM,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,eAAe,CAAC;AAEpG,eAAO,MAAM,iBAAiB,iBAAkB,GAAG,KAAK,GAAG,eACxC,GAAG,EAAE,iBACvB,CAAC"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,MAAM,uBAAuB,GAAG,CAAC,kBAAkB,SAAS,GAAG,CAAC,cAAc,EAClF,GAAG,EAAE,kBAAkB,KACpB,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;AAE3D,eAAO,MAAM,iBAAiB,iBAAkB,GAAG,KAAK,GAAG,eACxC,GAAG,EAAE,iBACvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sources":["../../../src/services/document-service/common.ts"],"sourcesContent":["import type { Common, Documents } from '@strapi/types';\n\nexport type RepositoryFactoryMethod = (uid: Common.UID.CollectionType) => Documents.ServiceInstance;\n\nexport const wrapInTransaction = (fn: (...args: any) => any) => {\n return (...args: any[]) => strapi.db.transaction?.(() => fn(...args));\n};\n"],"names":[],"mappings":";;AAIa,MAAA,oBAAoB,CAAC,OAA8B;AACvD,SAAA,IAAI,SAAgB,OAAO,GAAG,cAAc,MAAM,GAAG,GAAG,IAAI,CAAC;AACtE;;"}
1
+ {"version":3,"file":"common.js","sources":["../../../src/services/document-service/common.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\n\nexport type RepositoryFactoryMethod = <TCollectionTypeUID extends UID.CollectionType>(\n uid: TCollectionTypeUID\n) => Modules.Documents.ServiceInstance<TCollectionTypeUID>;\n\nexport const wrapInTransaction = (fn: (...args: any) => any) => {\n return (...args: any[]) => strapi.db.transaction?.(() => fn(...args));\n};\n"],"names":[],"mappings":";;AAMa,MAAA,oBAAoB,CAAC,OAA8B;AACvD,SAAA,IAAI,SAAgB,OAAO,GAAG,cAAc,MAAM,GAAG,GAAG,IAAI,CAAC;AACtE;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"common.mjs","sources":["../../../src/services/document-service/common.ts"],"sourcesContent":["import type { Common, Documents } from '@strapi/types';\n\nexport type RepositoryFactoryMethod = (uid: Common.UID.CollectionType) => Documents.ServiceInstance;\n\nexport const wrapInTransaction = (fn: (...args: any) => any) => {\n return (...args: any[]) => strapi.db.transaction?.(() => fn(...args));\n};\n"],"names":[],"mappings":"AAIa,MAAA,oBAAoB,CAAC,OAA8B;AACvD,SAAA,IAAI,SAAgB,OAAO,GAAG,cAAc,MAAM,GAAG,GAAG,IAAI,CAAC;AACtE;"}
1
+ {"version":3,"file":"common.mjs","sources":["../../../src/services/document-service/common.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\n\nexport type RepositoryFactoryMethod = <TCollectionTypeUID extends UID.CollectionType>(\n uid: TCollectionTypeUID\n) => Modules.Documents.ServiceInstance<TCollectionTypeUID>;\n\nexport const wrapInTransaction = (fn: (...args: any) => any) => {\n return (...args: any[]) => strapi.db.transaction?.(() => fn(...args));\n};\n"],"names":[],"mappings":"AAMa,MAAA,oBAAoB,CAAC,OAA8B;AACvD,SAAA,IAAI,SAAgB,OAAO,GAAG,cAAc,MAAM,GAAG,GAAG,IAAI,CAAC;AACtE;"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=document-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-engine.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/document-engine.ts"],"names":[],"mappings":""}
@@ -1,10 +1,10 @@
1
1
  /// <reference types="lodash" />
2
- import { Schema, Documents } from '@strapi/types';
3
- declare const setStatusToDraftCurry: import("lodash").CurriedFunction2<Schema.SingleType | Schema.CollectionType, Documents.Params.All, Documents.Params.All>;
4
- declare const defaultToDraftCurry: import("lodash").CurriedFunction1<Documents.Params.All, Documents.Params.All>;
5
- declare const defaultStatusCurry: import("lodash").CurriedFunction2<Schema.SingleType | Schema.CollectionType, Documents.Params.All, Documents.Params.All>;
6
- declare const filterDataPublishedAtCurry: import("lodash").CurriedFunction1<Documents.Params.All, Documents.Params.All>;
7
- declare const statusToLookupCurry: import("lodash").CurriedFunction2<Schema.SingleType | Schema.CollectionType, Documents.Params.All, Documents.Params.All>;
8
- declare const statusToDataCurry: import("lodash").CurriedFunction2<Schema.SingleType | Schema.CollectionType, Documents.Params.All, Documents.Params.All>;
2
+ import { Modules, Struct } from '@strapi/types';
3
+ declare const setStatusToDraftCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
4
+ declare const defaultToDraftCurry: import("lodash").CurriedFunction1<Modules.Documents.Params.All, Modules.Documents.Params.All>;
5
+ declare const defaultStatusCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
6
+ declare const filterDataPublishedAtCurry: import("lodash").CurriedFunction1<Modules.Documents.Params.All, Modules.Documents.Params.All>;
7
+ declare const statusToLookupCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
8
+ declare const statusToDataCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
9
9
  export { setStatusToDraftCurry as setStatusToDraft, defaultToDraftCurry as defaultToDraft, defaultStatusCurry as defaultStatus, filterDataPublishedAtCurry as filterDataPublishedAt, statusToLookupCurry as statusToLookup, statusToDataCurry as statusToData, };
10
10
  //# sourceMappingURL=draft-and-publish.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"draft-and-publish.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/draft-and-publish.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAwGlD,QAAA,MAAM,qBAAqB,0HAA0B,CAAC;AACtD,QAAA,MAAM,mBAAmB,+EAAwB,CAAC;AAClD,QAAA,MAAM,kBAAkB,0HAAuB,CAAC;AAChD,QAAA,MAAM,0BAA0B,+EAA+B,CAAC;AAChE,QAAA,MAAM,mBAAmB,0HAAwB,CAAC;AAClD,QAAA,MAAM,iBAAiB,0HAAsB,CAAC;AAE9C,OAAO,EACL,qBAAqB,IAAI,gBAAgB,EACzC,mBAAmB,IAAI,cAAc,EACrC,kBAAkB,IAAI,aAAa,EACnC,0BAA0B,IAAI,qBAAqB,EACnD,mBAAmB,IAAI,cAAc,EACrC,iBAAiB,IAAI,YAAY,GAClC,CAAC"}
1
+ {"version":3,"file":"draft-and-publish.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/draft-and-publish.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAwGhD,QAAA,MAAM,qBAAqB,sJAA0B,CAAC;AACtD,QAAA,MAAM,mBAAmB,+FAAwB,CAAC;AAClD,QAAA,MAAM,kBAAkB,sJAAuB,CAAC;AAChD,QAAA,MAAM,0BAA0B,+FAA+B,CAAC;AAChE,QAAA,MAAM,mBAAmB,sJAAwB,CAAC;AAClD,QAAA,MAAM,iBAAiB,sJAAsB,CAAC;AAE9C,OAAO,EACL,qBAAqB,IAAI,gBAAgB,EACzC,mBAAmB,IAAI,cAAc,EACrC,kBAAkB,IAAI,aAAa,EACnC,0BAA0B,IAAI,qBAAqB,EACnD,mBAAmB,IAAI,cAAc,EACrC,iBAAiB,IAAI,YAAY,GAClC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"draft-and-publish.js","sources":["../../../src/services/document-service/draft-and-publish.ts"],"sourcesContent":["import { assoc, curry } from 'lodash/fp';\n\nimport { Schema, Documents } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\ntype ParamsTransform = (params: Documents.Params.All) => Documents.Params.All;\n\ntype TransformWithContentType = (\n contentType: Schema.SingleType | Schema.CollectionType,\n params: Documents.Params.All\n) => Documents.Params.All;\n\n/**\n * DP enabled -> set status to draft\n * DP disabled -> Used mostly for parsing relations, so there is not a need for a default.\n */\nconst setStatusToDraft: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType) && params.status) {\n return params;\n }\n\n return assoc('status', 'draft', params);\n};\n\n/**\n * Adds a default status of `draft` to the params\n */\nconst defaultToDraft: ParamsTransform = (params) => {\n // Default to draft if no status is provided or it's invalid\n if (!params.status || params.status !== 'published') {\n return assoc('status', 'draft', params);\n }\n\n return params;\n};\n\n/**\n * DP disabled -> ignore status\n * DP enabled -> set status to draft if no status is provided or it's invalid\n */\nconst defaultStatus: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType)) {\n return params;\n }\n\n // Default to draft if no status is provided or it's invalid\n if (!params.status || params.status !== 'published') {\n return defaultToDraft(params);\n }\n\n return params;\n};\n\n/**\n * In mutating actions we don't want user to set the publishedAt attribute.\n */\nconst filterDataPublishedAt: ParamsTransform = (params) => {\n if (params?.data?.publishedAt) {\n return assoc(['data', 'publishedAt'], null, params);\n }\n\n return params;\n};\n\n/**\n * Add status lookup query to the params\n */\nconst statusToLookup: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType)) {\n return params;\n }\n\n const lookup = params.lookup || {};\n\n switch (params?.status) {\n case 'published':\n return assoc(['lookup', 'publishedAt'], { $notNull: true }, params);\n case 'draft':\n return assoc(['lookup', 'publishedAt'], { $null: true }, params);\n default:\n break;\n }\n\n return assoc('lookup', lookup, params);\n};\n\n/**\n * Translate publication status parameter into the data that will be saved\n */\nconst statusToData: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType)) {\n return assoc(['data', 'publishedAt'], new Date(), params);\n }\n\n switch (params?.status) {\n case 'published':\n return assoc(['data', 'publishedAt'], new Date(), params);\n case 'draft':\n return assoc(['data', 'publishedAt'], null, params);\n default:\n break;\n }\n\n return params;\n};\n\nconst setStatusToDraftCurry = curry(setStatusToDraft);\nconst defaultToDraftCurry = curry(defaultToDraft);\nconst defaultStatusCurry = curry(defaultStatus);\nconst filterDataPublishedAtCurry = curry(filterDataPublishedAt);\nconst statusToLookupCurry = curry(statusToLookup);\nconst statusToDataCurry = curry(statusToData);\n\nexport {\n setStatusToDraftCurry as setStatusToDraft,\n defaultToDraftCurry as defaultToDraft,\n defaultStatusCurry as defaultStatus,\n filterDataPublishedAtCurry as filterDataPublishedAt,\n statusToLookupCurry as statusToLookup,\n statusToDataCurry as statusToData,\n};\n"],"names":["contentTypes","assoc","curry"],"mappings":";;;;AAgBA,MAAM,mBAA6C,CAAC,aAAa,WAAW;AAC1E,MAAI,CAACA,YAAa,aAAA,mBAAmB,WAAW,KAAK,OAAO,QAAQ;AAC3D,WAAA;AAAA,EACT;AAEO,SAAAC,QAAM,UAAU,SAAS,MAAM;AACxC;AAKA,MAAM,iBAAkC,CAAC,WAAW;AAElD,MAAI,CAAC,OAAO,UAAU,OAAO,WAAW,aAAa;AAC5C,WAAAA,QAAM,UAAU,SAAS,MAAM;AAAA,EACxC;AAEO,SAAA;AACT;AAMA,MAAM,gBAA0C,CAAC,aAAa,WAAW;AACvE,MAAI,CAACD,YAAA,aAAa,mBAAmB,WAAW,GAAG;AAC1C,WAAA;AAAA,EACT;AAGA,MAAI,CAAC,OAAO,UAAU,OAAO,WAAW,aAAa;AACnD,WAAO,eAAe,MAAM;AAAA,EAC9B;AAEO,SAAA;AACT;AAKA,MAAM,wBAAyC,CAAC,WAAW;AACrD,MAAA,QAAQ,MAAM,aAAa;AAC7B,WAAOC,EAAAA,MAAM,CAAC,QAAQ,aAAa,GAAG,MAAM,MAAM;AAAA,EACpD;AAEO,SAAA;AACT;AAKA,MAAM,iBAA2C,CAAC,aAAa,WAAW;AACxE,MAAI,CAACD,YAAA,aAAa,mBAAmB,WAAW,GAAG;AAC1C,WAAA;AAAA,EACT;AAEM,QAAA,SAAS,OAAO,UAAU;AAEhC,UAAQ,QAAQ,QAAQ;AAAA,IACtB,KAAK;AACI,aAAAC,EAAA,MAAM,CAAC,UAAU,aAAa,GAAG,EAAE,UAAU,QAAQ,MAAM;AAAA,IACpE,KAAK;AACI,aAAAA,EAAA,MAAM,CAAC,UAAU,aAAa,GAAG,EAAE,OAAO,QAAQ,MAAM;AAAA,EAGnE;AAEO,SAAAA,QAAM,UAAU,QAAQ,MAAM;AACvC;AAKA,MAAM,eAAyC,CAAC,aAAa,WAAW;AACtE,MAAI,CAACD,YAAA,aAAa,mBAAmB,WAAW,GAAG;AAC1C,WAAAC,EAAAA,MAAM,CAAC,QAAQ,aAAa,GAAO,oBAAA,KAAA,GAAQ,MAAM;AAAA,EAC1D;AAEA,UAAQ,QAAQ,QAAQ;AAAA,IACtB,KAAK;AACI,aAAAA,EAAAA,MAAM,CAAC,QAAQ,aAAa,GAAO,oBAAA,KAAA,GAAQ,MAAM;AAAA,IAC1D,KAAK;AACH,aAAOA,EAAAA,MAAM,CAAC,QAAQ,aAAa,GAAG,MAAM,MAAM;AAAA,EAGtD;AAEO,SAAA;AACT;AAEM,MAAA,wBAAwBC,QAAM,gBAAgB;AAC9C,MAAA,sBAAsBA,QAAM,cAAc;AAC1C,MAAA,qBAAqBA,QAAM,aAAa;AACxC,MAAA,6BAA6BA,QAAM,qBAAqB;AACxD,MAAA,sBAAsBA,QAAM,cAAc;AAC1C,MAAA,oBAAoBA,QAAM,YAAY;;;;;;;"}
1
+ {"version":3,"file":"draft-and-publish.js","sources":["../../../src/services/document-service/draft-and-publish.ts"],"sourcesContent":["import { assoc, curry } from 'lodash/fp';\n\nimport { Modules, Struct } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\ntype ParamsTransform = (params: Modules.Documents.Params.All) => Modules.Documents.Params.All;\n\ntype TransformWithContentType = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Modules.Documents.Params.All;\n\n/**\n * DP enabled -> set status to draft\n * DP disabled -> Used mostly for parsing relations, so there is not a need for a default.\n */\nconst setStatusToDraft: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType) && params.status) {\n return params;\n }\n\n return assoc('status', 'draft', params);\n};\n\n/**\n * Adds a default status of `draft` to the params\n */\nconst defaultToDraft: ParamsTransform = (params) => {\n // Default to draft if no status is provided or it's invalid\n if (!params.status || params.status !== 'published') {\n return assoc('status', 'draft', params);\n }\n\n return params;\n};\n\n/**\n * DP disabled -> ignore status\n * DP enabled -> set status to draft if no status is provided or it's invalid\n */\nconst defaultStatus: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType)) {\n return params;\n }\n\n // Default to draft if no status is provided or it's invalid\n if (!params.status || params.status !== 'published') {\n return defaultToDraft(params);\n }\n\n return params;\n};\n\n/**\n * In mutating actions we don't want user to set the publishedAt attribute.\n */\nconst filterDataPublishedAt: ParamsTransform = (params) => {\n if (params?.data?.publishedAt) {\n return assoc(['data', 'publishedAt'], null, params);\n }\n\n return params;\n};\n\n/**\n * Add status lookup query to the params\n */\nconst statusToLookup: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType)) {\n return params;\n }\n\n const lookup = params.lookup || {};\n\n switch (params?.status) {\n case 'published':\n return assoc(['lookup', 'publishedAt'], { $notNull: true }, params);\n case 'draft':\n return assoc(['lookup', 'publishedAt'], { $null: true }, params);\n default:\n break;\n }\n\n return assoc('lookup', lookup, params);\n};\n\n/**\n * Translate publication status parameter into the data that will be saved\n */\nconst statusToData: TransformWithContentType = (contentType, params) => {\n if (!contentTypes.hasDraftAndPublish(contentType)) {\n return assoc(['data', 'publishedAt'], new Date(), params);\n }\n\n switch (params?.status) {\n case 'published':\n return assoc(['data', 'publishedAt'], new Date(), params);\n case 'draft':\n return assoc(['data', 'publishedAt'], null, params);\n default:\n break;\n }\n\n return params;\n};\n\nconst setStatusToDraftCurry = curry(setStatusToDraft);\nconst defaultToDraftCurry = curry(defaultToDraft);\nconst defaultStatusCurry = curry(defaultStatus);\nconst filterDataPublishedAtCurry = curry(filterDataPublishedAt);\nconst statusToLookupCurry = curry(statusToLookup);\nconst statusToDataCurry = curry(statusToData);\n\nexport {\n setStatusToDraftCurry as setStatusToDraft,\n defaultToDraftCurry as defaultToDraft,\n defaultStatusCurry as defaultStatus,\n filterDataPublishedAtCurry as filterDataPublishedAt,\n statusToLookupCurry as statusToLookup,\n statusToDataCurry as statusToData,\n};\n"],"names":["contentTypes","assoc","curry"],"mappings":";;;;AAgBA,MAAM,mBAA6C,CAAC,aAAa,WAAW;AAC1E,MAAI,CAACA,YAAa,aAAA,mBAAmB,WAAW,KAAK,OAAO,QAAQ;AAC3D,WAAA;AAAA,EACT;AAEO,SAAAC,QAAM,UAAU,SAAS,MAAM;AACxC;AAKA,MAAM,iBAAkC,CAAC,WAAW;AAElD,MAAI,CAAC,OAAO,UAAU,OAAO,WAAW,aAAa;AAC5C,WAAAA,QAAM,UAAU,SAAS,MAAM;AAAA,EACxC;AAEO,SAAA;AACT;AAMA,MAAM,gBAA0C,CAAC,aAAa,WAAW;AACvE,MAAI,CAACD,YAAA,aAAa,mBAAmB,WAAW,GAAG;AAC1C,WAAA;AAAA,EACT;AAGA,MAAI,CAAC,OAAO,UAAU,OAAO,WAAW,aAAa;AACnD,WAAO,eAAe,MAAM;AAAA,EAC9B;AAEO,SAAA;AACT;AAKA,MAAM,wBAAyC,CAAC,WAAW;AACrD,MAAA,QAAQ,MAAM,aAAa;AAC7B,WAAOC,EAAAA,MAAM,CAAC,QAAQ,aAAa,GAAG,MAAM,MAAM;AAAA,EACpD;AAEO,SAAA;AACT;AAKA,MAAM,iBAA2C,CAAC,aAAa,WAAW;AACxE,MAAI,CAACD,YAAA,aAAa,mBAAmB,WAAW,GAAG;AAC1C,WAAA;AAAA,EACT;AAEM,QAAA,SAAS,OAAO,UAAU;AAEhC,UAAQ,QAAQ,QAAQ;AAAA,IACtB,KAAK;AACI,aAAAC,EAAA,MAAM,CAAC,UAAU,aAAa,GAAG,EAAE,UAAU,QAAQ,MAAM;AAAA,IACpE,KAAK;AACI,aAAAA,EAAA,MAAM,CAAC,UAAU,aAAa,GAAG,EAAE,OAAO,QAAQ,MAAM;AAAA,EAGnE;AAEO,SAAAA,QAAM,UAAU,QAAQ,MAAM;AACvC;AAKA,MAAM,eAAyC,CAAC,aAAa,WAAW;AACtE,MAAI,CAACD,YAAA,aAAa,mBAAmB,WAAW,GAAG;AAC1C,WAAAC,EAAAA,MAAM,CAAC,QAAQ,aAAa,GAAO,oBAAA,KAAA,GAAQ,MAAM;AAAA,EAC1D;AAEA,UAAQ,QAAQ,QAAQ;AAAA,IACtB,KAAK;AACI,aAAAA,EAAAA,MAAM,CAAC,QAAQ,aAAa,GAAO,oBAAA,KAAA,GAAQ,MAAM;AAAA,IAC1D,KAAK;AACH,aAAOA,EAAAA,MAAM,CAAC,QAAQ,aAAa,GAAG,MAAM,MAAM;AAAA,EAGtD;AAEO,SAAA;AACT;AAEM,MAAA,wBAAwBC,QAAM,gBAAgB;AAC9C,MAAA,sBAAsBA,QAAM,cAAc;AAC1C,MAAA,qBAAqBA,QAAM,aAAa;AACxC,MAAA,6BAA6BA,QAAM,qBAAqB;AACxD,MAAA,sBAAsBA,QAAM,cAAc;AAC1C,MAAA,oBAAoBA,QAAM,YAAY;;;;;;;"}