@dyrected/core 2.8.3 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (500) hide show
  1. package/dist/{app-config-BccpBUqJ.d.cts → app-config-DQhcrGDE.d.cts} +472 -85
  2. package/dist/{app-config-BccpBUqJ.d.ts → app-config-DQhcrGDE.d.ts} +472 -85
  3. package/dist/chunk-JSBRDJBE.js +30 -0
  4. package/dist/{chunk-GFFGDHST.js → chunk-TYPDQTE2.js} +1879 -42
  5. package/dist/index.cjs +1954 -41
  6. package/dist/index.d.cts +20 -5
  7. package/dist/index.d.ts +20 -5
  8. package/dist/index.js +87 -9
  9. package/dist/{observability-KCMTV7GO.js → observability-HQF4EUSV.js} +1 -0
  10. package/dist/server.cjs +2109 -45
  11. package/dist/server.d.cts +38 -16
  12. package/dist/server.d.ts +38 -16
  13. package/dist/server.js +250 -17
  14. package/dist/{where-sanitizer-WJ2W2QCE.js → where-sanitizer-3MNFMYA2.js} +2 -0
  15. package/package.json +3 -3
  16. package/dist/__tests__/access-features.test.d.ts +0 -2
  17. package/dist/__tests__/access-features.test.d.ts.map +0 -1
  18. package/dist/__tests__/access-features.test.js +0 -159
  19. package/dist/__tests__/access-features.test.js.map +0 -1
  20. package/dist/__tests__/access-parity.test.d.ts +0 -2
  21. package/dist/__tests__/access-parity.test.d.ts.map +0 -1
  22. package/dist/__tests__/access-parity.test.js +0 -338
  23. package/dist/__tests__/access-parity.test.js.map +0 -1
  24. package/dist/__tests__/access.test.d.ts +0 -2
  25. package/dist/__tests__/access.test.d.ts.map +0 -1
  26. package/dist/__tests__/access.test.js +0 -137
  27. package/dist/__tests__/access.test.js.map +0 -1
  28. package/dist/__tests__/admin-auth.test.d.ts +0 -2
  29. package/dist/__tests__/admin-auth.test.d.ts.map +0 -1
  30. package/dist/__tests__/admin-auth.test.js +0 -440
  31. package/dist/__tests__/admin-auth.test.js.map +0 -1
  32. package/dist/__tests__/app.test.d.ts +0 -2
  33. package/dist/__tests__/app.test.d.ts.map +0 -1
  34. package/dist/__tests__/app.test.js +0 -112
  35. package/dist/__tests__/app.test.js.map +0 -1
  36. package/dist/__tests__/audit.test.d.ts +0 -2
  37. package/dist/__tests__/audit.test.d.ts.map +0 -1
  38. package/dist/__tests__/audit.test.js +0 -125
  39. package/dist/__tests__/audit.test.js.map +0 -1
  40. package/dist/__tests__/auth-hydration.test.d.ts +0 -2
  41. package/dist/__tests__/auth-hydration.test.d.ts.map +0 -1
  42. package/dist/__tests__/auth-hydration.test.js +0 -90
  43. package/dist/__tests__/auth-hydration.test.js.map +0 -1
  44. package/dist/__tests__/auth-invite.test.d.ts +0 -2
  45. package/dist/__tests__/auth-invite.test.d.ts.map +0 -1
  46. package/dist/__tests__/auth-invite.test.js +0 -152
  47. package/dist/__tests__/auth-invite.test.js.map +0 -1
  48. package/dist/__tests__/auth-lockout.test.d.ts +0 -2
  49. package/dist/__tests__/auth-lockout.test.d.ts.map +0 -1
  50. package/dist/__tests__/auth-lockout.test.js +0 -154
  51. package/dist/__tests__/auth-lockout.test.js.map +0 -1
  52. package/dist/__tests__/auth-sessions.test.d.ts +0 -2
  53. package/dist/__tests__/auth-sessions.test.d.ts.map +0 -1
  54. package/dist/__tests__/auth-sessions.test.js +0 -118
  55. package/dist/__tests__/auth-sessions.test.js.map +0 -1
  56. package/dist/__tests__/config.test.d.ts +0 -2
  57. package/dist/__tests__/config.test.d.ts.map +0 -1
  58. package/dist/__tests__/config.test.js +0 -402
  59. package/dist/__tests__/config.test.js.map +0 -1
  60. package/dist/__tests__/define-field.test.d.ts +0 -2
  61. package/dist/__tests__/define-field.test.d.ts.map +0 -1
  62. package/dist/__tests__/define-field.test.js +0 -121
  63. package/dist/__tests__/define-field.test.js.map +0 -1
  64. package/dist/__tests__/deleteMany.test.d.ts +0 -2
  65. package/dist/__tests__/deleteMany.test.d.ts.map +0 -1
  66. package/dist/__tests__/deleteMany.test.js +0 -75
  67. package/dist/__tests__/deleteMany.test.js.map +0 -1
  68. package/dist/__tests__/depth.test.d.ts +0 -2
  69. package/dist/__tests__/depth.test.d.ts.map +0 -1
  70. package/dist/__tests__/depth.test.js +0 -115
  71. package/dist/__tests__/depth.test.js.map +0 -1
  72. package/dist/__tests__/dynamic-options.test.d.ts +0 -2
  73. package/dist/__tests__/dynamic-options.test.d.ts.map +0 -1
  74. package/dist/__tests__/dynamic-options.test.js +0 -168
  75. package/dist/__tests__/dynamic-options.test.js.map +0 -1
  76. package/dist/__tests__/email.service.test.d.ts +0 -2
  77. package/dist/__tests__/email.service.test.d.ts.map +0 -1
  78. package/dist/__tests__/email.service.test.js +0 -52
  79. package/dist/__tests__/email.service.test.js.map +0 -1
  80. package/dist/__tests__/field-inference.test-types.d.ts +0 -161
  81. package/dist/__tests__/field-inference.test-types.d.ts.map +0 -1
  82. package/dist/__tests__/field-inference.test-types.js +0 -87
  83. package/dist/__tests__/field-inference.test-types.js.map +0 -1
  84. package/dist/__tests__/fixtures/editorial-workflow.d.ts +0 -14
  85. package/dist/__tests__/fixtures/editorial-workflow.d.ts.map +0 -1
  86. package/dist/__tests__/fixtures/editorial-workflow.js +0 -12
  87. package/dist/__tests__/fixtures/editorial-workflow.js.map +0 -1
  88. package/dist/__tests__/hooks.test.d.ts +0 -2
  89. package/dist/__tests__/hooks.test.d.ts.map +0 -1
  90. package/dist/__tests__/hooks.test.js +0 -320
  91. package/dist/__tests__/hooks.test.js.map +0 -1
  92. package/dist/__tests__/mocks.d.ts +0 -75
  93. package/dist/__tests__/mocks.d.ts.map +0 -1
  94. package/dist/__tests__/mocks.js +0 -170
  95. package/dist/__tests__/mocks.js.map +0 -1
  96. package/dist/__tests__/observability.test.d.ts +0 -2
  97. package/dist/__tests__/observability.test.d.ts.map +0 -1
  98. package/dist/__tests__/observability.test.js +0 -233
  99. package/dist/__tests__/observability.test.js.map +0 -1
  100. package/dist/__tests__/openapi.test.d.ts +0 -2
  101. package/dist/__tests__/openapi.test.d.ts.map +0 -1
  102. package/dist/__tests__/openapi.test.js +0 -105
  103. package/dist/__tests__/openapi.test.js.map +0 -1
  104. package/dist/__tests__/parse-sort.test.d.ts +0 -2
  105. package/dist/__tests__/parse-sort.test.d.ts.map +0 -1
  106. package/dist/__tests__/parse-sort.test.js +0 -24
  107. package/dist/__tests__/parse-sort.test.js.map +0 -1
  108. package/dist/__tests__/preferences.test.d.ts +0 -2
  109. package/dist/__tests__/preferences.test.d.ts.map +0 -1
  110. package/dist/__tests__/preferences.test.js +0 -168
  111. package/dist/__tests__/preferences.test.js.map +0 -1
  112. package/dist/__tests__/router.test.d.ts +0 -2
  113. package/dist/__tests__/router.test.d.ts.map +0 -1
  114. package/dist/__tests__/router.test.js +0 -70
  115. package/dist/__tests__/router.test.js.map +0 -1
  116. package/dist/__tests__/search.test.d.ts +0 -2
  117. package/dist/__tests__/search.test.d.ts.map +0 -1
  118. package/dist/__tests__/search.test.js +0 -174
  119. package/dist/__tests__/search.test.js.map +0 -1
  120. package/dist/__tests__/upload-validation.test.d.ts +0 -2
  121. package/dist/__tests__/upload-validation.test.d.ts.map +0 -1
  122. package/dist/__tests__/upload-validation.test.js +0 -41
  123. package/dist/__tests__/upload-validation.test.js.map +0 -1
  124. package/dist/__tests__/where.test.d.ts +0 -2
  125. package/dist/__tests__/where.test.d.ts.map +0 -1
  126. package/dist/__tests__/where.test.js +0 -105
  127. package/dist/__tests__/where.test.js.map +0 -1
  128. package/dist/__tests__/workflow.test.d.ts +0 -2
  129. package/dist/__tests__/workflow.test.d.ts.map +0 -1
  130. package/dist/__tests__/workflow.test.js +0 -684
  131. package/dist/__tests__/workflow.test.js.map +0 -1
  132. package/dist/app-config-7G-3tF_I.d.cts +0 -2259
  133. package/dist/app-config-7G-3tF_I.d.ts +0 -2259
  134. package/dist/app-config-9hs8DRED.d.cts +0 -1718
  135. package/dist/app-config-9hs8DRED.d.ts +0 -1718
  136. package/dist/app-config-B3ByBjCN.d.cts +0 -2222
  137. package/dist/app-config-B3ByBjCN.d.ts +0 -2222
  138. package/dist/app-config-B5tYsZaH.d.cts +0 -2404
  139. package/dist/app-config-B5tYsZaH.d.ts +0 -2404
  140. package/dist/app-config-BEuyPktb.d.cts +0 -2556
  141. package/dist/app-config-BEuyPktb.d.ts +0 -2556
  142. package/dist/app-config-BIkjQWzU.d.cts +0 -2218
  143. package/dist/app-config-BIkjQWzU.d.ts +0 -2218
  144. package/dist/app-config-BcuZIpvL.d.cts +0 -1951
  145. package/dist/app-config-BcuZIpvL.d.ts +0 -1951
  146. package/dist/app-config-BfpeE3bF.d.cts +0 -2100
  147. package/dist/app-config-BfpeE3bF.d.ts +0 -2100
  148. package/dist/app-config-Bm9-2Am6.d.cts +0 -1875
  149. package/dist/app-config-Bm9-2Am6.d.ts +0 -1875
  150. package/dist/app-config-BqhrBrSM.d.cts +0 -1522
  151. package/dist/app-config-BqhrBrSM.d.ts +0 -1522
  152. package/dist/app-config-Bxg_DVxv.d.cts +0 -1413
  153. package/dist/app-config-Bxg_DVxv.d.ts +0 -1413
  154. package/dist/app-config-C0twGIaF.d.cts +0 -1597
  155. package/dist/app-config-C0twGIaF.d.ts +0 -1597
  156. package/dist/app-config-C0uxEU7Q.d.cts +0 -1874
  157. package/dist/app-config-C0uxEU7Q.d.ts +0 -1874
  158. package/dist/app-config-C3X5BAyK.d.cts +0 -1539
  159. package/dist/app-config-C3X5BAyK.d.ts +0 -1539
  160. package/dist/app-config-C9VJ6rTv.d.cts +0 -2092
  161. package/dist/app-config-C9VJ6rTv.d.ts +0 -2092
  162. package/dist/app-config-CBOn8IyZ.d.cts +0 -1838
  163. package/dist/app-config-CBOn8IyZ.d.ts +0 -1838
  164. package/dist/app-config-CCe-yq9q.d.cts +0 -2222
  165. package/dist/app-config-CCe-yq9q.d.ts +0 -2222
  166. package/dist/app-config-CJAGGPrk.d.cts +0 -1900
  167. package/dist/app-config-CJAGGPrk.d.ts +0 -1900
  168. package/dist/app-config-CPOs7THF.d.cts +0 -2217
  169. package/dist/app-config-CPOs7THF.d.ts +0 -2217
  170. package/dist/app-config-CYV70eoF.d.cts +0 -2100
  171. package/dist/app-config-CYV70eoF.d.ts +0 -2100
  172. package/dist/app-config-ChsrBB7p.d.cts +0 -2100
  173. package/dist/app-config-ChsrBB7p.d.ts +0 -2100
  174. package/dist/app-config-CiEDJm0e.d.cts +0 -1912
  175. package/dist/app-config-CiEDJm0e.d.ts +0 -1912
  176. package/dist/app-config-CstocO9M.d.cts +0 -1580
  177. package/dist/app-config-CstocO9M.d.ts +0 -1580
  178. package/dist/app-config-Ctp454zB.d.cts +0 -2214
  179. package/dist/app-config-Ctp454zB.d.ts +0 -2214
  180. package/dist/app-config-CwaU1de2.d.cts +0 -1868
  181. package/dist/app-config-CwaU1de2.d.ts +0 -1868
  182. package/dist/app-config-DCDh8Gbx.d.cts +0 -1926
  183. package/dist/app-config-DCDh8Gbx.d.ts +0 -1926
  184. package/dist/app-config-DCWinlNK.d.cts +0 -2091
  185. package/dist/app-config-DCWinlNK.d.ts +0 -2091
  186. package/dist/app-config-DIwvzbpe.d.cts +0 -1555
  187. package/dist/app-config-DIwvzbpe.d.ts +0 -1555
  188. package/dist/app-config-DJmNYgYh.d.cts +0 -2305
  189. package/dist/app-config-DJmNYgYh.d.ts +0 -2305
  190. package/dist/app-config-DO3laV58.d.cts +0 -2397
  191. package/dist/app-config-DO3laV58.d.ts +0 -2397
  192. package/dist/app-config-DVdSospO.d.cts +0 -1842
  193. package/dist/app-config-DVdSospO.d.ts +0 -1842
  194. package/dist/app-config-DZf_mmi9.d.cts +0 -2211
  195. package/dist/app-config-DZf_mmi9.d.ts +0 -2211
  196. package/dist/app-config-DbK2Tv6i.d.cts +0 -2080
  197. package/dist/app-config-DbK2Tv6i.d.ts +0 -2080
  198. package/dist/app-config-Dkndq5ni.d.cts +0 -1580
  199. package/dist/app-config-Dkndq5ni.d.ts +0 -1580
  200. package/dist/app-config-Dms6kvE-.d.cts +0 -2072
  201. package/dist/app-config-Dms6kvE-.d.ts +0 -2072
  202. package/dist/app-config-DqCipvSI.d.cts +0 -1411
  203. package/dist/app-config-DqCipvSI.d.ts +0 -1411
  204. package/dist/app-config-Dv5XACR4.d.cts +0 -2065
  205. package/dist/app-config-Dv5XACR4.d.ts +0 -2065
  206. package/dist/app-config-P-SF5nnR.d.cts +0 -1568
  207. package/dist/app-config-P-SF5nnR.d.ts +0 -1568
  208. package/dist/app-config-SkUoN5JU.d.cts +0 -2192
  209. package/dist/app-config-SkUoN5JU.d.ts +0 -2192
  210. package/dist/app-config-WzqpuZMr.d.cts +0 -2566
  211. package/dist/app-config-WzqpuZMr.d.ts +0 -2566
  212. package/dist/app-config-_kkj71CB.d.cts +0 -2010
  213. package/dist/app-config-_kkj71CB.d.ts +0 -2010
  214. package/dist/app-config-fEjRm1o9.d.cts +0 -2402
  215. package/dist/app-config-fEjRm1o9.d.ts +0 -2402
  216. package/dist/app-config-oU1EGHND.d.cts +0 -1538
  217. package/dist/app-config-oU1EGHND.d.ts +0 -1538
  218. package/dist/app-config-ouBRb6Bf.d.cts +0 -1716
  219. package/dist/app-config-ouBRb6Bf.d.ts +0 -1716
  220. package/dist/app-config-oz8H_MOX.d.cts +0 -2224
  221. package/dist/app-config-oz8H_MOX.d.ts +0 -2224
  222. package/dist/app-config-tITj_0sn.d.cts +0 -1926
  223. package/dist/app-config-tITj_0sn.d.ts +0 -1926
  224. package/dist/app-config-wnLtFu6c.d.cts +0 -1538
  225. package/dist/app-config-wnLtFu6c.d.ts +0 -1538
  226. package/dist/app-config-x-CnipcA.d.cts +0 -2072
  227. package/dist/app-config-x-CnipcA.d.ts +0 -2072
  228. package/dist/app.d.ts +0 -35
  229. package/dist/app.d.ts.map +0 -1
  230. package/dist/app.js +0 -164
  231. package/dist/app.js.map +0 -1
  232. package/dist/auth/access.d.ts +0 -5
  233. package/dist/auth/access.d.ts.map +0 -1
  234. package/dist/auth/access.js +0 -59
  235. package/dist/auth/access.js.map +0 -1
  236. package/dist/auth/jexl.d.ts +0 -13
  237. package/dist/auth/jexl.d.ts.map +0 -1
  238. package/dist/auth/jexl.js +0 -30
  239. package/dist/auth/jexl.js.map +0 -1
  240. package/dist/auth/lockout.d.ts +0 -11
  241. package/dist/auth/lockout.d.ts.map +0 -1
  242. package/dist/auth/lockout.js +0 -37
  243. package/dist/auth/lockout.js.map +0 -1
  244. package/dist/auth/password.d.ts +0 -10
  245. package/dist/auth/password.d.ts.map +0 -1
  246. package/dist/auth/password.js +0 -28
  247. package/dist/auth/password.js.map +0 -1
  248. package/dist/auth/sessions.d.ts +0 -39
  249. package/dist/auth/sessions.d.ts.map +0 -1
  250. package/dist/auth/sessions.js +0 -126
  251. package/dist/auth/sessions.js.map +0 -1
  252. package/dist/auth/token.d.ts +0 -23
  253. package/dist/auth/token.d.ts.map +0 -1
  254. package/dist/auth/token.js +0 -40
  255. package/dist/auth/token.js.map +0 -1
  256. package/dist/chunk-23NM4LDU.js +0 -2883
  257. package/dist/chunk-2TKDCCIR.js +0 -2622
  258. package/dist/chunk-2UXLA4YN.js +0 -3139
  259. package/dist/chunk-2WODKOUB.js +0 -1627
  260. package/dist/chunk-35NM2WPO.js +0 -1658
  261. package/dist/chunk-3CMG2BH2.js +0 -1618
  262. package/dist/chunk-3SFITPX4.js +0 -2628
  263. package/dist/chunk-3TRRTN6U.js +0 -3441
  264. package/dist/chunk-57FNM42D.js +0 -2392
  265. package/dist/chunk-5U2WRCNH.js +0 -3140
  266. package/dist/chunk-5ZIA5COH.js +0 -3414
  267. package/dist/chunk-6TWQ6GTD.js +0 -3480
  268. package/dist/chunk-AKYYGMFS.js +0 -3365
  269. package/dist/chunk-AQO4HI2Y.js +0 -3204
  270. package/dist/chunk-BAMX7YUC.js +0 -1815
  271. package/dist/chunk-BQV3QW3Y.js +0 -2588
  272. package/dist/chunk-CQVTQ67D.js +0 -2632
  273. package/dist/chunk-CUOPCOU2.js +0 -1644
  274. package/dist/chunk-DCY7QHRB.js +0 -1637
  275. package/dist/chunk-DFBLNYUH.js +0 -3402
  276. package/dist/chunk-EH3MJGB5.js +0 -2571
  277. package/dist/chunk-EJG6AMYB.js +0 -3537
  278. package/dist/chunk-ELHRRPKX.js +0 -2863
  279. package/dist/chunk-EOW4YMAV.js +0 -1637
  280. package/dist/chunk-G43REXPX.js +0 -3147
  281. package/dist/chunk-GFKBPBJJ.js +0 -3637
  282. package/dist/chunk-HRLSFTLR.js +0 -3061
  283. package/dist/chunk-JFA22YFB.js +0 -1625
  284. package/dist/chunk-K3ASMUKV.js +0 -2601
  285. package/dist/chunk-KEKOEAX6.js +0 -3139
  286. package/dist/chunk-L65PQYDP.js +0 -1536
  287. package/dist/chunk-LFGSRQLX.js +0 -3568
  288. package/dist/chunk-M3HKRN7E.js +0 -1665
  289. package/dist/chunk-MQZH7RQC.js +0 -1667
  290. package/dist/chunk-NNZRYF3U.js +0 -3537
  291. package/dist/chunk-PRQ2RF5C.js +0 -3485
  292. package/dist/chunk-PYE2JSY4.js +0 -3568
  293. package/dist/chunk-PZMDK3MH.js +0 -3203
  294. package/dist/chunk-QCXLDKZO.js +0 -3272
  295. package/dist/chunk-QTIAQBNH.js +0 -3097
  296. package/dist/chunk-ROECUARS.js +0 -2615
  297. package/dist/chunk-SM32ND5M.js +0 -3472
  298. package/dist/chunk-T2DGC4MD.js +0 -3008
  299. package/dist/chunk-T626OZMH.js +0 -2602
  300. package/dist/chunk-TEGRS6J7.js +0 -2609
  301. package/dist/chunk-TLU77TLE.js +0 -3203
  302. package/dist/chunk-UKUEKTAO.js +0 -513
  303. package/dist/chunk-VCYYBN5J.js +0 -1873
  304. package/dist/chunk-VM43G3IG.js +0 -506
  305. package/dist/chunk-VWJKFZQU.js +0 -3139
  306. package/dist/chunk-WF5A6PDJ.js +0 -1618
  307. package/dist/chunk-WVD7PORQ.js +0 -1672
  308. package/dist/chunk-XX7N64NL.js +0 -3550
  309. package/dist/chunk-XZLIBQSO.js +0 -2397
  310. package/dist/chunk-YEBCT77K.js +0 -3269
  311. package/dist/chunk-YSSHLGQ6.js +0 -3139
  312. package/dist/chunk-YXEKNN5X.js +0 -3085
  313. package/dist/chunk-Z7CFUYVP.js +0 -3653
  314. package/dist/chunk-ZISFMAEL.js +0 -3550
  315. package/dist/controllers/admin-auth.controller.d.ts +0 -71
  316. package/dist/controllers/admin-auth.controller.d.ts.map +0 -1
  317. package/dist/controllers/admin-auth.controller.js +0 -450
  318. package/dist/controllers/admin-auth.controller.js.map +0 -1
  319. package/dist/controllers/audit.controller.d.ts +0 -42
  320. package/dist/controllers/audit.controller.d.ts.map +0 -1
  321. package/dist/controllers/audit.controller.js +0 -149
  322. package/dist/controllers/audit.controller.js.map +0 -1
  323. package/dist/controllers/auth.controller.d.ts +0 -143
  324. package/dist/controllers/auth.controller.d.ts.map +0 -1
  325. package/dist/controllers/auth.controller.js +0 -572
  326. package/dist/controllers/auth.controller.js.map +0 -1
  327. package/dist/controllers/collection.controller.d.ts +0 -170
  328. package/dist/controllers/collection.controller.d.ts.map +0 -1
  329. package/dist/controllers/collection.controller.js +0 -1033
  330. package/dist/controllers/collection.controller.js.map +0 -1
  331. package/dist/controllers/global.controller.d.ts +0 -20
  332. package/dist/controllers/global.controller.d.ts.map +0 -1
  333. package/dist/controllers/global.controller.js +0 -182
  334. package/dist/controllers/global.controller.js.map +0 -1
  335. package/dist/controllers/media.controller.d.ts +0 -39
  336. package/dist/controllers/media.controller.d.ts.map +0 -1
  337. package/dist/controllers/media.controller.js +0 -178
  338. package/dist/controllers/media.controller.js.map +0 -1
  339. package/dist/controllers/preview.controller.d.ts +0 -37
  340. package/dist/controllers/preview.controller.d.ts.map +0 -1
  341. package/dist/controllers/preview.controller.js +0 -48
  342. package/dist/controllers/preview.controller.js.map +0 -1
  343. package/dist/index.d.ts.map +0 -1
  344. package/dist/index.js.map +0 -1
  345. package/dist/middleware/auth.d.ts +0 -19
  346. package/dist/middleware/auth.d.ts.map +0 -1
  347. package/dist/middleware/auth.js +0 -157
  348. package/dist/middleware/auth.js.map +0 -1
  349. package/dist/middleware/rate-limit.d.ts +0 -9
  350. package/dist/middleware/rate-limit.d.ts.map +0 -1
  351. package/dist/middleware/rate-limit.js +0 -75
  352. package/dist/middleware/rate-limit.js.map +0 -1
  353. package/dist/network.d.ts +0 -6
  354. package/dist/network.d.ts.map +0 -1
  355. package/dist/network.js +0 -70
  356. package/dist/network.js.map +0 -1
  357. package/dist/observability-CNM4QFE4.js +0 -34
  358. package/dist/observability-L5BORBB2.js +0 -34
  359. package/dist/observability.d.ts +0 -113
  360. package/dist/observability.d.ts.map +0 -1
  361. package/dist/observability.js +0 -497
  362. package/dist/observability.js.map +0 -1
  363. package/dist/router.d.ts +0 -8
  364. package/dist/router.d.ts.map +0 -1
  365. package/dist/router.js +0 -704
  366. package/dist/router.js.map +0 -1
  367. package/dist/server.d.ts.map +0 -1
  368. package/dist/server.js.map +0 -1
  369. package/dist/services/audit.service.d.ts +0 -23
  370. package/dist/services/audit.service.d.ts.map +0 -1
  371. package/dist/services/audit.service.js +0 -39
  372. package/dist/services/audit.service.js.map +0 -1
  373. package/dist/services/defaults.service.d.ts +0 -8
  374. package/dist/services/defaults.service.d.ts.map +0 -1
  375. package/dist/services/defaults.service.js +0 -55
  376. package/dist/services/defaults.service.js.map +0 -1
  377. package/dist/services/email-template.d.ts +0 -46
  378. package/dist/services/email-template.d.ts.map +0 -1
  379. package/dist/services/email-template.js +0 -88
  380. package/dist/services/email-template.js.map +0 -1
  381. package/dist/services/email.service.d.ts +0 -34
  382. package/dist/services/email.service.d.ts.map +0 -1
  383. package/dist/services/email.service.js +0 -129
  384. package/dist/services/email.service.js.map +0 -1
  385. package/dist/services/media.service.d.ts +0 -20
  386. package/dist/services/media.service.d.ts.map +0 -1
  387. package/dist/services/media.service.js +0 -49
  388. package/dist/services/media.service.js.map +0 -1
  389. package/dist/services/population.service.d.ts +0 -20
  390. package/dist/services/population.service.d.ts.map +0 -1
  391. package/dist/services/population.service.js +0 -224
  392. package/dist/services/population.service.js.map +0 -1
  393. package/dist/types/access.d.ts +0 -48
  394. package/dist/types/access.d.ts.map +0 -1
  395. package/dist/types/access.js +0 -2
  396. package/dist/types/access.js.map +0 -1
  397. package/dist/types/adapters.d.ts +0 -152
  398. package/dist/types/adapters.d.ts.map +0 -1
  399. package/dist/types/adapters.js +0 -2
  400. package/dist/types/adapters.js.map +0 -1
  401. package/dist/types/admin-auth.d.ts +0 -132
  402. package/dist/types/admin-auth.d.ts.map +0 -1
  403. package/dist/types/admin-auth.js +0 -2
  404. package/dist/types/admin-auth.js.map +0 -1
  405. package/dist/types/admin.d.ts +0 -86
  406. package/dist/types/admin.d.ts.map +0 -1
  407. package/dist/types/admin.js +0 -2
  408. package/dist/types/admin.js.map +0 -1
  409. package/dist/types/app-config.d.ts +0 -279
  410. package/dist/types/app-config.d.ts.map +0 -1
  411. package/dist/types/app-config.js +0 -2
  412. package/dist/types/app-config.js.map +0 -1
  413. package/dist/types/documents.d.ts +0 -65
  414. package/dist/types/documents.d.ts.map +0 -1
  415. package/dist/types/documents.js +0 -2
  416. package/dist/types/documents.js.map +0 -1
  417. package/dist/types/hooks.d.ts +0 -122
  418. package/dist/types/hooks.d.ts.map +0 -1
  419. package/dist/types/hooks.js +0 -2
  420. package/dist/types/hooks.js.map +0 -1
  421. package/dist/types/index.d.ts +0 -13
  422. package/dist/types/index.d.ts.map +0 -1
  423. package/dist/types/index.js +0 -13
  424. package/dist/types/index.js.map +0 -1
  425. package/dist/types/request.d.ts +0 -42
  426. package/dist/types/request.d.ts.map +0 -1
  427. package/dist/types/request.js +0 -2
  428. package/dist/types/request.js.map +0 -1
  429. package/dist/types/schema-config.d.ts +0 -443
  430. package/dist/types/schema-config.d.ts.map +0 -1
  431. package/dist/types/schema-config.js +0 -2
  432. package/dist/types/schema-config.js.map +0 -1
  433. package/dist/types/schema-core.d.ts +0 -628
  434. package/dist/types/schema-core.d.ts.map +0 -1
  435. package/dist/types/schema-core.js +0 -2
  436. package/dist/types/schema-core.js.map +0 -1
  437. package/dist/types/schema-inference.d.ts +0 -73
  438. package/dist/types/schema-inference.d.ts.map +0 -1
  439. package/dist/types/schema-inference.js +0 -2
  440. package/dist/types/schema-inference.js.map +0 -1
  441. package/dist/types/workflows.d.ts +0 -121
  442. package/dist/types/workflows.d.ts.map +0 -1
  443. package/dist/types/workflows.js +0 -7
  444. package/dist/types/workflows.js.map +0 -1
  445. package/dist/utils/access-control.d.ts +0 -35
  446. package/dist/utils/access-control.d.ts.map +0 -1
  447. package/dist/utils/access-control.js +0 -161
  448. package/dist/utils/access-control.js.map +0 -1
  449. package/dist/utils/admin-auth.d.ts +0 -5
  450. package/dist/utils/admin-auth.d.ts.map +0 -1
  451. package/dist/utils/admin-auth.js +0 -39
  452. package/dist/utils/admin-auth.js.map +0 -1
  453. package/dist/utils/block-references.d.ts +0 -10
  454. package/dist/utils/block-references.d.ts.map +0 -1
  455. package/dist/utils/block-references.js +0 -100
  456. package/dist/utils/block-references.js.map +0 -1
  457. package/dist/utils/collection-search.d.ts +0 -11
  458. package/dist/utils/collection-search.d.ts.map +0 -1
  459. package/dist/utils/collection-search.js +0 -204
  460. package/dist/utils/collection-search.js.map +0 -1
  461. package/dist/utils/config.d.ts +0 -8
  462. package/dist/utils/config.d.ts.map +0 -1
  463. package/dist/utils/config.js +0 -336
  464. package/dist/utils/config.js.map +0 -1
  465. package/dist/utils/hooks.d.ts +0 -41
  466. package/dist/utils/hooks.d.ts.map +0 -1
  467. package/dist/utils/hooks.js +0 -177
  468. package/dist/utils/hooks.js.map +0 -1
  469. package/dist/utils/openapi.d.ts +0 -6
  470. package/dist/utils/openapi.d.ts.map +0 -1
  471. package/dist/utils/openapi.js +0 -981
  472. package/dist/utils/openapi.js.map +0 -1
  473. package/dist/utils/parse-sort.d.ts +0 -43
  474. package/dist/utils/parse-sort.d.ts.map +0 -1
  475. package/dist/utils/parse-sort.js +0 -70
  476. package/dist/utils/parse-sort.js.map +0 -1
  477. package/dist/utils/parse-where.d.ts +0 -69
  478. package/dist/utils/parse-where.d.ts.map +0 -1
  479. package/dist/utils/parse-where.js +0 -202
  480. package/dist/utils/parse-where.js.map +0 -1
  481. package/dist/utils/readonly-db.d.ts +0 -9
  482. package/dist/utils/readonly-db.d.ts.map +0 -1
  483. package/dist/utils/readonly-db.js +0 -21
  484. package/dist/utils/readonly-db.js.map +0 -1
  485. package/dist/utils/swagger.d.ts +0 -11
  486. package/dist/utils/swagger.d.ts.map +0 -1
  487. package/dist/utils/swagger.js +0 -62
  488. package/dist/utils/swagger.js.map +0 -1
  489. package/dist/utils/upload-validation.d.ts +0 -23
  490. package/dist/utils/upload-validation.d.ts.map +0 -1
  491. package/dist/utils/upload-validation.js +0 -46
  492. package/dist/utils/upload-validation.js.map +0 -1
  493. package/dist/utils/where-sanitizer.d.ts +0 -10
  494. package/dist/utils/where-sanitizer.d.ts.map +0 -1
  495. package/dist/utils/where-sanitizer.js +0 -67
  496. package/dist/utils/where-sanitizer.js.map +0 -1
  497. package/dist/workflows.d.ts +0 -86
  498. package/dist/workflows.d.ts.map +0 -1
  499. package/dist/workflows.js +0 -405
  500. package/dist/workflows.js.map +0 -1
@@ -1,981 +0,0 @@
1
- function getCollectionLabels(collection) {
2
- return (collection.labels || { singular: collection.slug, plural: collection.slug });
3
- }
4
- function getCollectionTag(collection) {
5
- return `Collection: ${getCollectionLabels(collection).plural}`;
6
- }
7
- function getGlobalTag(global) {
8
- return `Global: ${global.label || global.slug}`;
9
- }
10
- /**
11
- * Generate an OpenAPI 3.0 specification based on the Dyrected configuration.
12
- */
13
- export function generateOpenApi(config) {
14
- const spec = {
15
- openapi: "3.0.0",
16
- info: {
17
- title: "Dyrected API",
18
- version: "1.0.0",
19
- description: "Automatically generated OpenAPI specification for the Dyrected project.",
20
- },
21
- components: {
22
- schemas: {
23
- WorkflowMetadata: {
24
- type: "object",
25
- required: ["state", "revision"],
26
- properties: {
27
- state: { type: "string" },
28
- revision: { type: "integer", minimum: 1 },
29
- publishedRevision: { type: "integer", minimum: 1 },
30
- publishedAt: { type: "string", format: "date-time" },
31
- publishedBy: { type: "string" },
32
- availableTransitions: { type: "array", items: { type: "string" } },
33
- },
34
- },
35
- WorkflowTransitionRequest: {
36
- type: "object",
37
- properties: {
38
- expectedRevision: { type: "integer", minimum: 1 },
39
- comment: { type: "string" },
40
- },
41
- },
42
- WorkflowHistoryEntry: {
43
- type: "object",
44
- required: [
45
- "collection",
46
- "documentId",
47
- "transition",
48
- "from",
49
- "to",
50
- "revision",
51
- "createdAt",
52
- ],
53
- properties: {
54
- id: { type: "string" },
55
- collection: { type: "string" },
56
- documentId: { type: "string" },
57
- transition: { type: "string" },
58
- from: { type: "string" },
59
- to: { type: "string" },
60
- revision: { type: "integer" },
61
- comment: { type: "string", nullable: true },
62
- actorId: { type: "string", nullable: true },
63
- createdAt: { type: "string", format: "date-time" },
64
- },
65
- },
66
- AuditEntry: {
67
- type: "object",
68
- required: ["collection", "operation", "timestamp"],
69
- properties: {
70
- id: { type: "string" },
71
- collection: { type: "string" },
72
- documentId: { type: "string", nullable: true },
73
- operation: { type: "string" },
74
- user: { type: "string", nullable: true },
75
- timestamp: { type: "string", format: "date-time" },
76
- changes: {
77
- oneOf: [
78
- { type: "string" },
79
- { type: "object", additionalProperties: true },
80
- { type: "null" },
81
- ],
82
- },
83
- },
84
- },
85
- Error: {
86
- type: "object",
87
- properties: {
88
- message: { type: "string" },
89
- errors: {
90
- type: "array",
91
- items: { type: "object", additionalProperties: true },
92
- },
93
- },
94
- },
95
- AuthCredentials: {
96
- type: "object",
97
- required: ["email", "password"],
98
- properties: {
99
- email: { type: "string", format: "email" },
100
- password: { type: "string" },
101
- },
102
- },
103
- TokenResponse: {
104
- type: "object",
105
- properties: {
106
- token: { type: "string" },
107
- user: { type: "object", additionalProperties: true },
108
- },
109
- },
110
- },
111
- securitySchemes: {
112
- ApiKeyAuth: {
113
- type: "apiKey",
114
- in: "header",
115
- name: "x-api-key",
116
- },
117
- },
118
- },
119
- paths: {},
120
- security: [{ ApiKeyAuth: [] }],
121
- };
122
- spec.paths["/api/schemas"] = {
123
- get: {
124
- tags: ["System"],
125
- summary: "Get the serialized Dyrected schema",
126
- security: [],
127
- responses: {
128
- 200: { description: "Collection and global schema definitions" },
129
- },
130
- },
131
- };
132
- spec.paths["/api/openapi.json"] = {
133
- get: {
134
- tags: ["System"],
135
- summary: "Get the OpenAPI specification",
136
- security: [],
137
- responses: { 200: { description: "OpenAPI 3.0 document" } },
138
- },
139
- };
140
- spec.paths["/api/docs"] = {
141
- get: {
142
- tags: ["System"],
143
- summary: "Open interactive API documentation",
144
- security: [],
145
- responses: { 200: { description: "Swagger UI HTML" } },
146
- },
147
- };
148
- spec.paths["/api/dyrected/options/{collection}/{field}"] = {
149
- get: {
150
- tags: ["System"],
151
- summary: "Resolve dynamic field options",
152
- parameters: [
153
- {
154
- name: "collection",
155
- in: "path",
156
- required: true,
157
- schema: { type: "string" },
158
- },
159
- {
160
- name: "field",
161
- in: "path",
162
- required: true,
163
- schema: { type: "string" },
164
- },
165
- ],
166
- responses: { 200: { description: "Resolved option items" } },
167
- },
168
- };
169
- spec.paths["/api/preferences/{key}"] = {
170
- get: {
171
- tags: ["Preferences"],
172
- summary: "Get an authenticated user preference",
173
- parameters: [
174
- { name: "key", in: "path", required: true, schema: { type: "string" } },
175
- ],
176
- responses: { 200: { description: "Preference value" } },
177
- },
178
- put: {
179
- tags: ["Preferences"],
180
- summary: "Set an authenticated user preference",
181
- parameters: [
182
- { name: "key", in: "path", required: true, schema: { type: "string" } },
183
- ],
184
- requestBody: {
185
- required: true,
186
- content: { "application/json": { schema: { type: "object" } } },
187
- },
188
- responses: { 200: { description: "Updated preference" } },
189
- },
190
- };
191
- spec.paths["/api/preview-token"] = {
192
- post: {
193
- tags: ["Preview"],
194
- summary: "Create a preview token",
195
- responses: { 200: { description: "Short-lived preview token" } },
196
- },
197
- };
198
- spec.paths["/api/preview-data"] = {
199
- get: {
200
- tags: ["Preview"],
201
- summary: "Resolve preview data from a token",
202
- security: [],
203
- parameters: [
204
- {
205
- name: "token",
206
- in: "query",
207
- required: true,
208
- schema: { type: "string" },
209
- },
210
- ],
211
- responses: { 200: { description: "Preview document data" } },
212
- },
213
- };
214
- spec.paths["/api/audit"] = {
215
- get: {
216
- tags: ["Audit"],
217
- summary: "Get audit entries across all readable audited collections",
218
- parameters: [
219
- {
220
- name: "limit",
221
- in: "query",
222
- schema: { type: "integer", default: 50, maximum: 100 },
223
- },
224
- { name: "page", in: "query", schema: { type: "integer", default: 1 } },
225
- {
226
- name: "where",
227
- in: "query",
228
- schema: { type: "string" },
229
- description: "JSON filter",
230
- },
231
- {
232
- name: "sort",
233
- in: "query",
234
- schema: { type: "string", default: "-timestamp" },
235
- },
236
- ],
237
- responses: {
238
- 200: {
239
- description: "Audit entries",
240
- content: {
241
- "application/json": {
242
- schema: {
243
- type: "object",
244
- properties: {
245
- docs: {
246
- type: "array",
247
- items: { $ref: "#/components/schemas/AuditEntry" },
248
- },
249
- total: { type: "integer" },
250
- limit: { type: "integer" },
251
- page: { type: "integer" },
252
- },
253
- },
254
- },
255
- },
256
- },
257
- },
258
- },
259
- };
260
- // 1. Generate Schemas for Collections
261
- for (const collection of config.collections) {
262
- spec.components.schemas[collection.slug] = collectionToSchema(collection);
263
- }
264
- // 2. Generate Schemas for Globals
265
- for (const global of config.globals) {
266
- spec.components.schemas[global.slug] = globalToSchema(global);
267
- }
268
- // 3. Generate Paths for Collections
269
- for (const collection of config.collections) {
270
- const slug = collection.slug;
271
- const path = `/api/collections/${slug}`;
272
- const labels = getCollectionLabels(collection);
273
- const collectionTag = getCollectionTag(collection);
274
- spec.paths[path] = {
275
- get: {
276
- tags: [collectionTag],
277
- summary: `Find ${labels.plural}`,
278
- parameters: [
279
- {
280
- name: "limit",
281
- in: "query",
282
- schema: { type: "integer", default: 10 },
283
- },
284
- {
285
- name: "page",
286
- in: "query",
287
- schema: { type: "integer", default: 1 },
288
- },
289
- {
290
- name: "where",
291
- in: "query",
292
- schema: { type: "string" },
293
- description: "JSON filter",
294
- },
295
- {
296
- name: "search",
297
- in: "query",
298
- schema: { type: "string" },
299
- description: "Free-text search across configured searchable fields",
300
- },
301
- {
302
- name: "sort",
303
- in: "query",
304
- schema: { type: "string" },
305
- description: "Sort field (e.g. -createdAt)",
306
- },
307
- ],
308
- responses: {
309
- 200: {
310
- description: "Success",
311
- content: {
312
- "application/json": {
313
- schema: {
314
- type: "object",
315
- properties: {
316
- docs: {
317
- type: "array",
318
- items: { $ref: `#/components/schemas/${slug}` },
319
- },
320
- total: { type: "integer" },
321
- limit: { type: "integer" },
322
- page: { type: "integer" },
323
- },
324
- },
325
- },
326
- },
327
- },
328
- },
329
- },
330
- post: {
331
- tags: [collectionTag],
332
- summary: `Create ${labels.singular}`,
333
- requestBody: {
334
- required: true,
335
- content: {
336
- "application/json": {
337
- schema: { $ref: `#/components/schemas/${slug}` },
338
- },
339
- },
340
- },
341
- responses: {
342
- 201: {
343
- description: "Created",
344
- content: {
345
- "application/json": {
346
- schema: { $ref: `#/components/schemas/${slug}` },
347
- },
348
- },
349
- },
350
- },
351
- },
352
- };
353
- spec.paths[`${path}/{id}`] = {
354
- get: {
355
- tags: [collectionTag],
356
- summary: `Get a single ${labels.singular}`,
357
- parameters: [
358
- {
359
- name: "id",
360
- in: "path",
361
- required: true,
362
- schema: { type: "string" },
363
- },
364
- ],
365
- responses: {
366
- 200: {
367
- description: "Success",
368
- content: {
369
- "application/json": {
370
- schema: { $ref: `#/components/schemas/${slug}` },
371
- },
372
- },
373
- },
374
- },
375
- },
376
- patch: {
377
- tags: [collectionTag],
378
- summary: `Update ${labels.singular}`,
379
- parameters: [
380
- {
381
- name: "id",
382
- in: "path",
383
- required: true,
384
- schema: { type: "string" },
385
- },
386
- ],
387
- requestBody: {
388
- required: true,
389
- content: {
390
- "application/json": {
391
- schema: { $ref: `#/components/schemas/${slug}` },
392
- },
393
- },
394
- },
395
- responses: {
396
- 200: {
397
- description: "Updated",
398
- content: {
399
- "application/json": {
400
- schema: { $ref: `#/components/schemas/${slug}` },
401
- },
402
- },
403
- },
404
- },
405
- },
406
- delete: {
407
- tags: [collectionTag],
408
- summary: `Delete ${labels.singular}`,
409
- parameters: [
410
- {
411
- name: "id",
412
- in: "path",
413
- required: true,
414
- schema: { type: "string" },
415
- },
416
- ],
417
- responses: {
418
- 204: { description: "Deleted" },
419
- },
420
- },
421
- };
422
- spec.paths[`${path}/delete-many`] = {
423
- delete: {
424
- tags: [collectionTag],
425
- summary: `Delete multiple ${labels.plural}`,
426
- requestBody: {
427
- required: true,
428
- content: {
429
- "application/json": {
430
- schema: {
431
- type: "object",
432
- required: ["ids"],
433
- properties: {
434
- ids: { type: "array", items: { type: "string" } },
435
- },
436
- },
437
- },
438
- },
439
- },
440
- responses: { 200: { description: "Deleted and failed document IDs" } },
441
- },
442
- };
443
- if (collection.audit) {
444
- spec.paths[`${path}/__audit`] = {
445
- get: {
446
- tags: [collectionTag],
447
- summary: `Get ${labels.singular} audit entries`,
448
- parameters: [
449
- {
450
- name: "limit",
451
- in: "query",
452
- schema: { type: "integer", default: 50, maximum: 100 },
453
- },
454
- {
455
- name: "page",
456
- in: "query",
457
- schema: { type: "integer", default: 1 },
458
- },
459
- {
460
- name: "where",
461
- in: "query",
462
- schema: { type: "string" },
463
- description: "JSON filter",
464
- },
465
- {
466
- name: "sort",
467
- in: "query",
468
- schema: { type: "string", default: "-timestamp" },
469
- },
470
- ],
471
- responses: {
472
- 200: {
473
- description: "Audit entries for this collection",
474
- content: {
475
- "application/json": {
476
- schema: {
477
- type: "object",
478
- properties: {
479
- docs: {
480
- type: "array",
481
- items: { $ref: "#/components/schemas/AuditEntry" },
482
- },
483
- total: { type: "integer" },
484
- limit: { type: "integer" },
485
- page: { type: "integer" },
486
- },
487
- },
488
- },
489
- },
490
- },
491
- 403: { description: "Collection read access denied" },
492
- 404: { description: "Audit is not enabled for this collection" },
493
- },
494
- },
495
- };
496
- }
497
- if (collection.upload) {
498
- spec.paths[`${path}/media`] = {
499
- get: {
500
- tags: [collectionTag],
501
- summary: `List ${labels.plural}`,
502
- responses: { 200: { description: "Paginated media documents" } },
503
- },
504
- post: {
505
- tags: [collectionTag],
506
- summary: `Upload ${labels.singular}`,
507
- requestBody: {
508
- required: true,
509
- content: {
510
- "multipart/form-data": {
511
- schema: {
512
- type: "object",
513
- required: ["file"],
514
- properties: { file: { type: "string", format: "binary" } },
515
- },
516
- },
517
- },
518
- },
519
- responses: { 201: { description: "Uploaded media document" } },
520
- },
521
- };
522
- spec.paths[`${path}/media/{filename}`] = {
523
- get: {
524
- tags: [collectionTag],
525
- summary: `Serve ${labels.singular} bytes`,
526
- parameters: [
527
- {
528
- name: "filename",
529
- in: "path",
530
- required: true,
531
- schema: { type: "string" },
532
- },
533
- ],
534
- security: [],
535
- responses: {
536
- 200: { description: "Stored file" },
537
- 404: { description: "File not found" },
538
- },
539
- },
540
- };
541
- }
542
- if (collection.auth) {
543
- const publicAuthPost = (summary) => ({
544
- tags: [collectionTag],
545
- summary,
546
- security: [],
547
- requestBody: {
548
- required: true,
549
- content: {
550
- "application/json": {
551
- schema: { type: "object", additionalProperties: true },
552
- },
553
- },
554
- },
555
- responses: {
556
- 200: { description: "Success" },
557
- 400: { description: "Invalid request" },
558
- },
559
- });
560
- spec.paths[`${path}/login`] = {
561
- post: {
562
- ...publicAuthPost(`Log in to ${labels.plural}`),
563
- requestBody: {
564
- required: true,
565
- content: {
566
- "application/json": {
567
- schema: { $ref: "#/components/schemas/AuthCredentials" },
568
- },
569
- },
570
- },
571
- responses: {
572
- 200: {
573
- description: "Authenticated",
574
- content: {
575
- "application/json": {
576
- schema: { $ref: "#/components/schemas/TokenResponse" },
577
- },
578
- },
579
- },
580
- 401: { description: "Invalid credentials" },
581
- },
582
- },
583
- };
584
- spec.paths[`${path}/logout`] = {
585
- post: {
586
- tags: [collectionTag],
587
- summary: `Log out of ${labels.plural}`,
588
- parameters: [
589
- {
590
- name: "allSessions",
591
- in: "query",
592
- required: false,
593
- schema: { type: "boolean" },
594
- description: "Revoke every active session for this account instead of only the current one.",
595
- },
596
- ],
597
- responses: { 200: { description: "Logged out" } },
598
- },
599
- };
600
- spec.paths[`${path}/init`] = {
601
- get: {
602
- tags: [collectionTag],
603
- summary: `Get ${labels.plural} initialization state`,
604
- security: [],
605
- responses: { 200: { description: "Initialization state" } },
606
- },
607
- };
608
- spec.paths[`${path}/first-user`] = {
609
- post: publicAuthPost(`Register the first ${labels.singular}`),
610
- };
611
- spec.paths[`${path}/me`] = {
612
- get: {
613
- tags: [collectionTag],
614
- summary: `Get the current ${labels.singular}`,
615
- responses: { 200: { description: "Authenticated user" } },
616
- },
617
- };
618
- spec.paths[`${path}/refresh-token`] = {
619
- post: {
620
- tags: [collectionTag],
621
- summary: "Refresh an authentication token",
622
- responses: {
623
- 200: {
624
- description: "Refreshed token for the current active session",
625
- },
626
- },
627
- },
628
- };
629
- spec.paths[`${path}/forgot-password`] = {
630
- post: publicAuthPost("Request a password reset"),
631
- };
632
- spec.paths[`${path}/reset-password`] = {
633
- post: publicAuthPost("Reset a password"),
634
- };
635
- spec.paths[`${path}/invite`] = {
636
- post: {
637
- tags: [collectionTag],
638
- summary: `Invite a ${labels.singular}`,
639
- responses: { 200: { description: "Invitation sent" } },
640
- },
641
- };
642
- spec.paths[`${path}/accept-invite`] = {
643
- post: publicAuthPost("Accept an invitation"),
644
- };
645
- spec.paths[`${path}/{id}/change-password`] = {
646
- post: {
647
- tags: [collectionTag],
648
- summary: `Change a ${labels.singular} password`,
649
- parameters: [
650
- {
651
- name: "id",
652
- in: "path",
653
- required: true,
654
- schema: { type: "string" },
655
- },
656
- ],
657
- responses: {
658
- 200: {
659
- description: "Password changed and active sessions revoked",
660
- },
661
- },
662
- },
663
- };
664
- }
665
- if (collection.workflow) {
666
- spec.paths[`${path}/{id}/transitions/{transition}`] = {
667
- post: {
668
- tags: [collectionTag],
669
- summary: `Transition ${labels.singular} workflow`,
670
- parameters: [
671
- {
672
- name: "id",
673
- in: "path",
674
- required: true,
675
- schema: { type: "string" },
676
- },
677
- {
678
- name: "transition",
679
- in: "path",
680
- required: true,
681
- schema: {
682
- type: "string",
683
- enum: collection.workflow.transitions.map((item) => item.name),
684
- },
685
- },
686
- ],
687
- requestBody: {
688
- content: {
689
- "application/json": {
690
- schema: {
691
- $ref: "#/components/schemas/WorkflowTransitionRequest",
692
- },
693
- },
694
- },
695
- },
696
- responses: {
697
- 200: {
698
- description: "Transition applied",
699
- content: {
700
- "application/json": {
701
- schema: { $ref: `#/components/schemas/${slug}` },
702
- },
703
- },
704
- },
705
- 400: { description: "Required transition input is missing" },
706
- 403: { description: "Transition capability denied" },
707
- 409: { description: "Invalid state or stale revision" },
708
- },
709
- },
710
- };
711
- spec.paths[`${path}/{id}/workflow-history`] = {
712
- get: {
713
- tags: [collectionTag],
714
- summary: `Get ${labels.singular} workflow history`,
715
- parameters: [
716
- {
717
- name: "id",
718
- in: "path",
719
- required: true,
720
- schema: { type: "string" },
721
- },
722
- {
723
- name: "limit",
724
- in: "query",
725
- schema: { type: "integer", default: 50, maximum: 100 },
726
- },
727
- ],
728
- responses: {
729
- 200: {
730
- description: "Workflow transition history",
731
- content: {
732
- "application/json": {
733
- schema: {
734
- type: "object",
735
- properties: {
736
- docs: {
737
- type: "array",
738
- items: {
739
- $ref: "#/components/schemas/WorkflowHistoryEntry",
740
- },
741
- },
742
- total: { type: "integer" },
743
- limit: { type: "integer" },
744
- page: { type: "integer" },
745
- },
746
- },
747
- },
748
- },
749
- },
750
- 403: { description: "Collection read access denied" },
751
- },
752
- },
753
- };
754
- }
755
- }
756
- // 4. Generate Paths for Globals
757
- for (const global of config.globals) {
758
- const slug = global.slug;
759
- const path = `/api/globals/${slug}`;
760
- const globalTag = getGlobalTag(global);
761
- spec.paths[path] = {
762
- get: {
763
- tags: [globalTag],
764
- summary: `Get ${global.label || slug}`,
765
- responses: {
766
- 200: {
767
- description: "Success",
768
- content: {
769
- "application/json": {
770
- schema: { $ref: `#/components/schemas/${slug}` },
771
- },
772
- },
773
- },
774
- },
775
- },
776
- patch: {
777
- tags: [globalTag],
778
- summary: `Update ${global.label || slug}`,
779
- requestBody: {
780
- required: true,
781
- content: {
782
- "application/json": {
783
- schema: { $ref: `#/components/schemas/${slug}` },
784
- },
785
- },
786
- },
787
- responses: {
788
- 200: {
789
- description: "Updated",
790
- content: {
791
- "application/json": {
792
- schema: { $ref: `#/components/schemas/${slug}` },
793
- },
794
- },
795
- },
796
- },
797
- },
798
- };
799
- }
800
- // 5. Generate the storage-backed file serving path.
801
- if (config.storage) {
802
- spec.paths["/api/media/{filename}"] = {
803
- get: {
804
- tags: ["Media"],
805
- summary: "Serve a stored file",
806
- security: [],
807
- parameters: [
808
- {
809
- name: "filename",
810
- in: "path",
811
- required: true,
812
- schema: { type: "string" },
813
- },
814
- ],
815
- responses: {
816
- 200: { description: "Stored file bytes" },
817
- 404: { description: "File not found" },
818
- },
819
- },
820
- };
821
- }
822
- return spec;
823
- }
824
- function collectionToSchema(collection) {
825
- const { properties, required } = fieldsToProperties(collection.fields);
826
- return {
827
- type: "object",
828
- properties: {
829
- id: { type: "string" },
830
- createdAt: { type: "string", format: "date-time" },
831
- updatedAt: { type: "string", format: "date-time" },
832
- ...(collection.workflow
833
- ? { _workflow: { $ref: "#/components/schemas/WorkflowMetadata" } }
834
- : {}),
835
- ...properties,
836
- },
837
- required: ["id", ...required],
838
- };
839
- }
840
- function globalToSchema(global) {
841
- const { properties, required } = fieldsToProperties(global.fields);
842
- return {
843
- type: "object",
844
- properties,
845
- required,
846
- };
847
- }
848
- function fieldsToProperties(fields) {
849
- const props = {};
850
- const required = [];
851
- for (const field of fields) {
852
- if (field.type === "row") {
853
- const nested = fieldsToProperties(field.fields || []);
854
- Object.assign(props, nested.properties);
855
- required.push(...nested.required);
856
- continue;
857
- }
858
- if (!field.name)
859
- continue;
860
- props[field.name] = fieldToSchema(field);
861
- if (field.required) {
862
- required.push(field.name);
863
- }
864
- }
865
- return { properties: props, required };
866
- }
867
- function fieldToSchema(field) {
868
- let schema;
869
- switch (field.type) {
870
- case "text":
871
- case "textarea":
872
- case "email":
873
- schema = { type: "string" };
874
- break;
875
- case "url":
876
- schema = {
877
- oneOf: [
878
- { type: "string" },
879
- { type: "object", additionalProperties: true },
880
- ],
881
- };
882
- break;
883
- case "icon":
884
- schema = { type: "string" };
885
- break;
886
- case "number":
887
- schema = { type: "number" };
888
- break;
889
- case "boolean":
890
- schema = { type: "boolean" };
891
- break;
892
- case "date":
893
- schema = { type: "string", format: "date" };
894
- break;
895
- case "datetime":
896
- schema = { type: "string", format: "date-time" };
897
- break;
898
- case "time":
899
- schema = { type: "string", format: "time" };
900
- break;
901
- case "select":
902
- case "radio":
903
- schema = {
904
- type: "string",
905
- enum: Array.isArray(field.options)
906
- ? field.options.map((o) => (typeof o === "string" ? o : o.value))
907
- : undefined,
908
- };
909
- break;
910
- case "multiSelect":
911
- schema = {
912
- type: "array",
913
- items: {
914
- type: "string",
915
- enum: Array.isArray(field.options)
916
- ? field.options.map((o) => (typeof o === "string" ? o : o.value))
917
- : undefined,
918
- },
919
- };
920
- break;
921
- case "relationship":
922
- case "image": {
923
- const valueSchema = {
924
- type: "string",
925
- description: `ID of a ${field.relationTo} record`,
926
- };
927
- schema = field.hasMany
928
- ? { type: "array", items: valueSchema }
929
- : valueSchema;
930
- break;
931
- }
932
- case "join":
933
- schema = {
934
- type: "array",
935
- readOnly: true,
936
- items: { type: "object", additionalProperties: true },
937
- };
938
- break;
939
- case "object": {
940
- const { properties, required } = fieldsToProperties(field.fields || []);
941
- schema = { type: "object", properties, required };
942
- break;
943
- }
944
- case "array": {
945
- const { properties, required } = fieldsToProperties(field.fields || []);
946
- schema = {
947
- type: "array",
948
- items: { type: "object", properties, required },
949
- };
950
- break;
951
- }
952
- case "json":
953
- case "richText":
954
- schema = { type: "object", additionalProperties: true };
955
- break;
956
- case "blocks":
957
- schema = {
958
- type: "array",
959
- items: {
960
- oneOf: field.blocks?.map((block) => {
961
- const { properties, required } = fieldsToProperties(block.fields);
962
- return {
963
- type: "object",
964
- properties: {
965
- blockType: { type: "string", enum: [block.slug] },
966
- ...properties,
967
- },
968
- required: ["blockType", ...required],
969
- };
970
- }),
971
- },
972
- };
973
- break;
974
- default:
975
- schema = { type: "string" };
976
- }
977
- if (field.label)
978
- schema.description = field.label;
979
- return schema;
980
- }
981
- //# sourceMappingURL=openapi.js.map