@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.
- package/dist/{app-config-BccpBUqJ.d.cts → app-config-DQhcrGDE.d.cts} +472 -85
- package/dist/{app-config-BccpBUqJ.d.ts → app-config-DQhcrGDE.d.ts} +472 -85
- package/dist/chunk-JSBRDJBE.js +30 -0
- package/dist/{chunk-GFFGDHST.js → chunk-TYPDQTE2.js} +1879 -42
- package/dist/index.cjs +1954 -41
- package/dist/index.d.cts +20 -5
- package/dist/index.d.ts +20 -5
- package/dist/index.js +87 -9
- package/dist/{observability-KCMTV7GO.js → observability-HQF4EUSV.js} +1 -0
- package/dist/server.cjs +2109 -45
- package/dist/server.d.cts +38 -16
- package/dist/server.d.ts +38 -16
- package/dist/server.js +250 -17
- package/dist/{where-sanitizer-WJ2W2QCE.js → where-sanitizer-3MNFMYA2.js} +2 -0
- package/package.json +3 -3
- package/dist/__tests__/access-features.test.d.ts +0 -2
- package/dist/__tests__/access-features.test.d.ts.map +0 -1
- package/dist/__tests__/access-features.test.js +0 -159
- package/dist/__tests__/access-features.test.js.map +0 -1
- package/dist/__tests__/access-parity.test.d.ts +0 -2
- package/dist/__tests__/access-parity.test.d.ts.map +0 -1
- package/dist/__tests__/access-parity.test.js +0 -338
- package/dist/__tests__/access-parity.test.js.map +0 -1
- package/dist/__tests__/access.test.d.ts +0 -2
- package/dist/__tests__/access.test.d.ts.map +0 -1
- package/dist/__tests__/access.test.js +0 -137
- package/dist/__tests__/access.test.js.map +0 -1
- package/dist/__tests__/admin-auth.test.d.ts +0 -2
- package/dist/__tests__/admin-auth.test.d.ts.map +0 -1
- package/dist/__tests__/admin-auth.test.js +0 -440
- package/dist/__tests__/admin-auth.test.js.map +0 -1
- package/dist/__tests__/app.test.d.ts +0 -2
- package/dist/__tests__/app.test.d.ts.map +0 -1
- package/dist/__tests__/app.test.js +0 -112
- package/dist/__tests__/app.test.js.map +0 -1
- package/dist/__tests__/audit.test.d.ts +0 -2
- package/dist/__tests__/audit.test.d.ts.map +0 -1
- package/dist/__tests__/audit.test.js +0 -125
- package/dist/__tests__/audit.test.js.map +0 -1
- package/dist/__tests__/auth-hydration.test.d.ts +0 -2
- package/dist/__tests__/auth-hydration.test.d.ts.map +0 -1
- package/dist/__tests__/auth-hydration.test.js +0 -90
- package/dist/__tests__/auth-hydration.test.js.map +0 -1
- package/dist/__tests__/auth-invite.test.d.ts +0 -2
- package/dist/__tests__/auth-invite.test.d.ts.map +0 -1
- package/dist/__tests__/auth-invite.test.js +0 -152
- package/dist/__tests__/auth-invite.test.js.map +0 -1
- package/dist/__tests__/auth-lockout.test.d.ts +0 -2
- package/dist/__tests__/auth-lockout.test.d.ts.map +0 -1
- package/dist/__tests__/auth-lockout.test.js +0 -154
- package/dist/__tests__/auth-lockout.test.js.map +0 -1
- package/dist/__tests__/auth-sessions.test.d.ts +0 -2
- package/dist/__tests__/auth-sessions.test.d.ts.map +0 -1
- package/dist/__tests__/auth-sessions.test.js +0 -118
- package/dist/__tests__/auth-sessions.test.js.map +0 -1
- package/dist/__tests__/config.test.d.ts +0 -2
- package/dist/__tests__/config.test.d.ts.map +0 -1
- package/dist/__tests__/config.test.js +0 -402
- package/dist/__tests__/config.test.js.map +0 -1
- package/dist/__tests__/define-field.test.d.ts +0 -2
- package/dist/__tests__/define-field.test.d.ts.map +0 -1
- package/dist/__tests__/define-field.test.js +0 -121
- package/dist/__tests__/define-field.test.js.map +0 -1
- package/dist/__tests__/deleteMany.test.d.ts +0 -2
- package/dist/__tests__/deleteMany.test.d.ts.map +0 -1
- package/dist/__tests__/deleteMany.test.js +0 -75
- package/dist/__tests__/deleteMany.test.js.map +0 -1
- package/dist/__tests__/depth.test.d.ts +0 -2
- package/dist/__tests__/depth.test.d.ts.map +0 -1
- package/dist/__tests__/depth.test.js +0 -115
- package/dist/__tests__/depth.test.js.map +0 -1
- package/dist/__tests__/dynamic-options.test.d.ts +0 -2
- package/dist/__tests__/dynamic-options.test.d.ts.map +0 -1
- package/dist/__tests__/dynamic-options.test.js +0 -168
- package/dist/__tests__/dynamic-options.test.js.map +0 -1
- package/dist/__tests__/email.service.test.d.ts +0 -2
- package/dist/__tests__/email.service.test.d.ts.map +0 -1
- package/dist/__tests__/email.service.test.js +0 -52
- package/dist/__tests__/email.service.test.js.map +0 -1
- package/dist/__tests__/field-inference.test-types.d.ts +0 -161
- package/dist/__tests__/field-inference.test-types.d.ts.map +0 -1
- package/dist/__tests__/field-inference.test-types.js +0 -87
- package/dist/__tests__/field-inference.test-types.js.map +0 -1
- package/dist/__tests__/fixtures/editorial-workflow.d.ts +0 -14
- package/dist/__tests__/fixtures/editorial-workflow.d.ts.map +0 -1
- package/dist/__tests__/fixtures/editorial-workflow.js +0 -12
- package/dist/__tests__/fixtures/editorial-workflow.js.map +0 -1
- package/dist/__tests__/hooks.test.d.ts +0 -2
- package/dist/__tests__/hooks.test.d.ts.map +0 -1
- package/dist/__tests__/hooks.test.js +0 -320
- package/dist/__tests__/hooks.test.js.map +0 -1
- package/dist/__tests__/mocks.d.ts +0 -75
- package/dist/__tests__/mocks.d.ts.map +0 -1
- package/dist/__tests__/mocks.js +0 -170
- package/dist/__tests__/mocks.js.map +0 -1
- package/dist/__tests__/observability.test.d.ts +0 -2
- package/dist/__tests__/observability.test.d.ts.map +0 -1
- package/dist/__tests__/observability.test.js +0 -233
- package/dist/__tests__/observability.test.js.map +0 -1
- package/dist/__tests__/openapi.test.d.ts +0 -2
- package/dist/__tests__/openapi.test.d.ts.map +0 -1
- package/dist/__tests__/openapi.test.js +0 -105
- package/dist/__tests__/openapi.test.js.map +0 -1
- package/dist/__tests__/parse-sort.test.d.ts +0 -2
- package/dist/__tests__/parse-sort.test.d.ts.map +0 -1
- package/dist/__tests__/parse-sort.test.js +0 -24
- package/dist/__tests__/parse-sort.test.js.map +0 -1
- package/dist/__tests__/preferences.test.d.ts +0 -2
- package/dist/__tests__/preferences.test.d.ts.map +0 -1
- package/dist/__tests__/preferences.test.js +0 -168
- package/dist/__tests__/preferences.test.js.map +0 -1
- package/dist/__tests__/router.test.d.ts +0 -2
- package/dist/__tests__/router.test.d.ts.map +0 -1
- package/dist/__tests__/router.test.js +0 -70
- package/dist/__tests__/router.test.js.map +0 -1
- package/dist/__tests__/search.test.d.ts +0 -2
- package/dist/__tests__/search.test.d.ts.map +0 -1
- package/dist/__tests__/search.test.js +0 -174
- package/dist/__tests__/search.test.js.map +0 -1
- package/dist/__tests__/upload-validation.test.d.ts +0 -2
- package/dist/__tests__/upload-validation.test.d.ts.map +0 -1
- package/dist/__tests__/upload-validation.test.js +0 -41
- package/dist/__tests__/upload-validation.test.js.map +0 -1
- package/dist/__tests__/where.test.d.ts +0 -2
- package/dist/__tests__/where.test.d.ts.map +0 -1
- package/dist/__tests__/where.test.js +0 -105
- package/dist/__tests__/where.test.js.map +0 -1
- package/dist/__tests__/workflow.test.d.ts +0 -2
- package/dist/__tests__/workflow.test.d.ts.map +0 -1
- package/dist/__tests__/workflow.test.js +0 -684
- package/dist/__tests__/workflow.test.js.map +0 -1
- package/dist/app-config-7G-3tF_I.d.cts +0 -2259
- package/dist/app-config-7G-3tF_I.d.ts +0 -2259
- package/dist/app-config-9hs8DRED.d.cts +0 -1718
- package/dist/app-config-9hs8DRED.d.ts +0 -1718
- package/dist/app-config-B3ByBjCN.d.cts +0 -2222
- package/dist/app-config-B3ByBjCN.d.ts +0 -2222
- package/dist/app-config-B5tYsZaH.d.cts +0 -2404
- package/dist/app-config-B5tYsZaH.d.ts +0 -2404
- package/dist/app-config-BEuyPktb.d.cts +0 -2556
- package/dist/app-config-BEuyPktb.d.ts +0 -2556
- package/dist/app-config-BIkjQWzU.d.cts +0 -2218
- package/dist/app-config-BIkjQWzU.d.ts +0 -2218
- package/dist/app-config-BcuZIpvL.d.cts +0 -1951
- package/dist/app-config-BcuZIpvL.d.ts +0 -1951
- package/dist/app-config-BfpeE3bF.d.cts +0 -2100
- package/dist/app-config-BfpeE3bF.d.ts +0 -2100
- package/dist/app-config-Bm9-2Am6.d.cts +0 -1875
- package/dist/app-config-Bm9-2Am6.d.ts +0 -1875
- package/dist/app-config-BqhrBrSM.d.cts +0 -1522
- package/dist/app-config-BqhrBrSM.d.ts +0 -1522
- package/dist/app-config-Bxg_DVxv.d.cts +0 -1413
- package/dist/app-config-Bxg_DVxv.d.ts +0 -1413
- package/dist/app-config-C0twGIaF.d.cts +0 -1597
- package/dist/app-config-C0twGIaF.d.ts +0 -1597
- package/dist/app-config-C0uxEU7Q.d.cts +0 -1874
- package/dist/app-config-C0uxEU7Q.d.ts +0 -1874
- package/dist/app-config-C3X5BAyK.d.cts +0 -1539
- package/dist/app-config-C3X5BAyK.d.ts +0 -1539
- package/dist/app-config-C9VJ6rTv.d.cts +0 -2092
- package/dist/app-config-C9VJ6rTv.d.ts +0 -2092
- package/dist/app-config-CBOn8IyZ.d.cts +0 -1838
- package/dist/app-config-CBOn8IyZ.d.ts +0 -1838
- package/dist/app-config-CCe-yq9q.d.cts +0 -2222
- package/dist/app-config-CCe-yq9q.d.ts +0 -2222
- package/dist/app-config-CJAGGPrk.d.cts +0 -1900
- package/dist/app-config-CJAGGPrk.d.ts +0 -1900
- package/dist/app-config-CPOs7THF.d.cts +0 -2217
- package/dist/app-config-CPOs7THF.d.ts +0 -2217
- package/dist/app-config-CYV70eoF.d.cts +0 -2100
- package/dist/app-config-CYV70eoF.d.ts +0 -2100
- package/dist/app-config-ChsrBB7p.d.cts +0 -2100
- package/dist/app-config-ChsrBB7p.d.ts +0 -2100
- package/dist/app-config-CiEDJm0e.d.cts +0 -1912
- package/dist/app-config-CiEDJm0e.d.ts +0 -1912
- package/dist/app-config-CstocO9M.d.cts +0 -1580
- package/dist/app-config-CstocO9M.d.ts +0 -1580
- package/dist/app-config-Ctp454zB.d.cts +0 -2214
- package/dist/app-config-Ctp454zB.d.ts +0 -2214
- package/dist/app-config-CwaU1de2.d.cts +0 -1868
- package/dist/app-config-CwaU1de2.d.ts +0 -1868
- package/dist/app-config-DCDh8Gbx.d.cts +0 -1926
- package/dist/app-config-DCDh8Gbx.d.ts +0 -1926
- package/dist/app-config-DCWinlNK.d.cts +0 -2091
- package/dist/app-config-DCWinlNK.d.ts +0 -2091
- package/dist/app-config-DIwvzbpe.d.cts +0 -1555
- package/dist/app-config-DIwvzbpe.d.ts +0 -1555
- package/dist/app-config-DJmNYgYh.d.cts +0 -2305
- package/dist/app-config-DJmNYgYh.d.ts +0 -2305
- package/dist/app-config-DO3laV58.d.cts +0 -2397
- package/dist/app-config-DO3laV58.d.ts +0 -2397
- package/dist/app-config-DVdSospO.d.cts +0 -1842
- package/dist/app-config-DVdSospO.d.ts +0 -1842
- package/dist/app-config-DZf_mmi9.d.cts +0 -2211
- package/dist/app-config-DZf_mmi9.d.ts +0 -2211
- package/dist/app-config-DbK2Tv6i.d.cts +0 -2080
- package/dist/app-config-DbK2Tv6i.d.ts +0 -2080
- package/dist/app-config-Dkndq5ni.d.cts +0 -1580
- package/dist/app-config-Dkndq5ni.d.ts +0 -1580
- package/dist/app-config-Dms6kvE-.d.cts +0 -2072
- package/dist/app-config-Dms6kvE-.d.ts +0 -2072
- package/dist/app-config-DqCipvSI.d.cts +0 -1411
- package/dist/app-config-DqCipvSI.d.ts +0 -1411
- package/dist/app-config-Dv5XACR4.d.cts +0 -2065
- package/dist/app-config-Dv5XACR4.d.ts +0 -2065
- package/dist/app-config-P-SF5nnR.d.cts +0 -1568
- package/dist/app-config-P-SF5nnR.d.ts +0 -1568
- package/dist/app-config-SkUoN5JU.d.cts +0 -2192
- package/dist/app-config-SkUoN5JU.d.ts +0 -2192
- package/dist/app-config-WzqpuZMr.d.cts +0 -2566
- package/dist/app-config-WzqpuZMr.d.ts +0 -2566
- package/dist/app-config-_kkj71CB.d.cts +0 -2010
- package/dist/app-config-_kkj71CB.d.ts +0 -2010
- package/dist/app-config-fEjRm1o9.d.cts +0 -2402
- package/dist/app-config-fEjRm1o9.d.ts +0 -2402
- package/dist/app-config-oU1EGHND.d.cts +0 -1538
- package/dist/app-config-oU1EGHND.d.ts +0 -1538
- package/dist/app-config-ouBRb6Bf.d.cts +0 -1716
- package/dist/app-config-ouBRb6Bf.d.ts +0 -1716
- package/dist/app-config-oz8H_MOX.d.cts +0 -2224
- package/dist/app-config-oz8H_MOX.d.ts +0 -2224
- package/dist/app-config-tITj_0sn.d.cts +0 -1926
- package/dist/app-config-tITj_0sn.d.ts +0 -1926
- package/dist/app-config-wnLtFu6c.d.cts +0 -1538
- package/dist/app-config-wnLtFu6c.d.ts +0 -1538
- package/dist/app-config-x-CnipcA.d.cts +0 -2072
- package/dist/app-config-x-CnipcA.d.ts +0 -2072
- package/dist/app.d.ts +0 -35
- package/dist/app.d.ts.map +0 -1
- package/dist/app.js +0 -164
- package/dist/app.js.map +0 -1
- package/dist/auth/access.d.ts +0 -5
- package/dist/auth/access.d.ts.map +0 -1
- package/dist/auth/access.js +0 -59
- package/dist/auth/access.js.map +0 -1
- package/dist/auth/jexl.d.ts +0 -13
- package/dist/auth/jexl.d.ts.map +0 -1
- package/dist/auth/jexl.js +0 -30
- package/dist/auth/jexl.js.map +0 -1
- package/dist/auth/lockout.d.ts +0 -11
- package/dist/auth/lockout.d.ts.map +0 -1
- package/dist/auth/lockout.js +0 -37
- package/dist/auth/lockout.js.map +0 -1
- package/dist/auth/password.d.ts +0 -10
- package/dist/auth/password.d.ts.map +0 -1
- package/dist/auth/password.js +0 -28
- package/dist/auth/password.js.map +0 -1
- package/dist/auth/sessions.d.ts +0 -39
- package/dist/auth/sessions.d.ts.map +0 -1
- package/dist/auth/sessions.js +0 -126
- package/dist/auth/sessions.js.map +0 -1
- package/dist/auth/token.d.ts +0 -23
- package/dist/auth/token.d.ts.map +0 -1
- package/dist/auth/token.js +0 -40
- package/dist/auth/token.js.map +0 -1
- package/dist/chunk-23NM4LDU.js +0 -2883
- package/dist/chunk-2TKDCCIR.js +0 -2622
- package/dist/chunk-2UXLA4YN.js +0 -3139
- package/dist/chunk-2WODKOUB.js +0 -1627
- package/dist/chunk-35NM2WPO.js +0 -1658
- package/dist/chunk-3CMG2BH2.js +0 -1618
- package/dist/chunk-3SFITPX4.js +0 -2628
- package/dist/chunk-3TRRTN6U.js +0 -3441
- package/dist/chunk-57FNM42D.js +0 -2392
- package/dist/chunk-5U2WRCNH.js +0 -3140
- package/dist/chunk-5ZIA5COH.js +0 -3414
- package/dist/chunk-6TWQ6GTD.js +0 -3480
- package/dist/chunk-AKYYGMFS.js +0 -3365
- package/dist/chunk-AQO4HI2Y.js +0 -3204
- package/dist/chunk-BAMX7YUC.js +0 -1815
- package/dist/chunk-BQV3QW3Y.js +0 -2588
- package/dist/chunk-CQVTQ67D.js +0 -2632
- package/dist/chunk-CUOPCOU2.js +0 -1644
- package/dist/chunk-DCY7QHRB.js +0 -1637
- package/dist/chunk-DFBLNYUH.js +0 -3402
- package/dist/chunk-EH3MJGB5.js +0 -2571
- package/dist/chunk-EJG6AMYB.js +0 -3537
- package/dist/chunk-ELHRRPKX.js +0 -2863
- package/dist/chunk-EOW4YMAV.js +0 -1637
- package/dist/chunk-G43REXPX.js +0 -3147
- package/dist/chunk-GFKBPBJJ.js +0 -3637
- package/dist/chunk-HRLSFTLR.js +0 -3061
- package/dist/chunk-JFA22YFB.js +0 -1625
- package/dist/chunk-K3ASMUKV.js +0 -2601
- package/dist/chunk-KEKOEAX6.js +0 -3139
- package/dist/chunk-L65PQYDP.js +0 -1536
- package/dist/chunk-LFGSRQLX.js +0 -3568
- package/dist/chunk-M3HKRN7E.js +0 -1665
- package/dist/chunk-MQZH7RQC.js +0 -1667
- package/dist/chunk-NNZRYF3U.js +0 -3537
- package/dist/chunk-PRQ2RF5C.js +0 -3485
- package/dist/chunk-PYE2JSY4.js +0 -3568
- package/dist/chunk-PZMDK3MH.js +0 -3203
- package/dist/chunk-QCXLDKZO.js +0 -3272
- package/dist/chunk-QTIAQBNH.js +0 -3097
- package/dist/chunk-ROECUARS.js +0 -2615
- package/dist/chunk-SM32ND5M.js +0 -3472
- package/dist/chunk-T2DGC4MD.js +0 -3008
- package/dist/chunk-T626OZMH.js +0 -2602
- package/dist/chunk-TEGRS6J7.js +0 -2609
- package/dist/chunk-TLU77TLE.js +0 -3203
- package/dist/chunk-UKUEKTAO.js +0 -513
- package/dist/chunk-VCYYBN5J.js +0 -1873
- package/dist/chunk-VM43G3IG.js +0 -506
- package/dist/chunk-VWJKFZQU.js +0 -3139
- package/dist/chunk-WF5A6PDJ.js +0 -1618
- package/dist/chunk-WVD7PORQ.js +0 -1672
- package/dist/chunk-XX7N64NL.js +0 -3550
- package/dist/chunk-XZLIBQSO.js +0 -2397
- package/dist/chunk-YEBCT77K.js +0 -3269
- package/dist/chunk-YSSHLGQ6.js +0 -3139
- package/dist/chunk-YXEKNN5X.js +0 -3085
- package/dist/chunk-Z7CFUYVP.js +0 -3653
- package/dist/chunk-ZISFMAEL.js +0 -3550
- package/dist/controllers/admin-auth.controller.d.ts +0 -71
- package/dist/controllers/admin-auth.controller.d.ts.map +0 -1
- package/dist/controllers/admin-auth.controller.js +0 -450
- package/dist/controllers/admin-auth.controller.js.map +0 -1
- package/dist/controllers/audit.controller.d.ts +0 -42
- package/dist/controllers/audit.controller.d.ts.map +0 -1
- package/dist/controllers/audit.controller.js +0 -149
- package/dist/controllers/audit.controller.js.map +0 -1
- package/dist/controllers/auth.controller.d.ts +0 -143
- package/dist/controllers/auth.controller.d.ts.map +0 -1
- package/dist/controllers/auth.controller.js +0 -572
- package/dist/controllers/auth.controller.js.map +0 -1
- package/dist/controllers/collection.controller.d.ts +0 -170
- package/dist/controllers/collection.controller.d.ts.map +0 -1
- package/dist/controllers/collection.controller.js +0 -1033
- package/dist/controllers/collection.controller.js.map +0 -1
- package/dist/controllers/global.controller.d.ts +0 -20
- package/dist/controllers/global.controller.d.ts.map +0 -1
- package/dist/controllers/global.controller.js +0 -182
- package/dist/controllers/global.controller.js.map +0 -1
- package/dist/controllers/media.controller.d.ts +0 -39
- package/dist/controllers/media.controller.d.ts.map +0 -1
- package/dist/controllers/media.controller.js +0 -178
- package/dist/controllers/media.controller.js.map +0 -1
- package/dist/controllers/preview.controller.d.ts +0 -37
- package/dist/controllers/preview.controller.d.ts.map +0 -1
- package/dist/controllers/preview.controller.js +0 -48
- package/dist/controllers/preview.controller.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/middleware/auth.d.ts +0 -19
- package/dist/middleware/auth.d.ts.map +0 -1
- package/dist/middleware/auth.js +0 -157
- package/dist/middleware/auth.js.map +0 -1
- package/dist/middleware/rate-limit.d.ts +0 -9
- package/dist/middleware/rate-limit.d.ts.map +0 -1
- package/dist/middleware/rate-limit.js +0 -75
- package/dist/middleware/rate-limit.js.map +0 -1
- package/dist/network.d.ts +0 -6
- package/dist/network.d.ts.map +0 -1
- package/dist/network.js +0 -70
- package/dist/network.js.map +0 -1
- package/dist/observability-CNM4QFE4.js +0 -34
- package/dist/observability-L5BORBB2.js +0 -34
- package/dist/observability.d.ts +0 -113
- package/dist/observability.d.ts.map +0 -1
- package/dist/observability.js +0 -497
- package/dist/observability.js.map +0 -1
- package/dist/router.d.ts +0 -8
- package/dist/router.d.ts.map +0 -1
- package/dist/router.js +0 -704
- package/dist/router.js.map +0 -1
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/services/audit.service.d.ts +0 -23
- package/dist/services/audit.service.d.ts.map +0 -1
- package/dist/services/audit.service.js +0 -39
- package/dist/services/audit.service.js.map +0 -1
- package/dist/services/defaults.service.d.ts +0 -8
- package/dist/services/defaults.service.d.ts.map +0 -1
- package/dist/services/defaults.service.js +0 -55
- package/dist/services/defaults.service.js.map +0 -1
- package/dist/services/email-template.d.ts +0 -46
- package/dist/services/email-template.d.ts.map +0 -1
- package/dist/services/email-template.js +0 -88
- package/dist/services/email-template.js.map +0 -1
- package/dist/services/email.service.d.ts +0 -34
- package/dist/services/email.service.d.ts.map +0 -1
- package/dist/services/email.service.js +0 -129
- package/dist/services/email.service.js.map +0 -1
- package/dist/services/media.service.d.ts +0 -20
- package/dist/services/media.service.d.ts.map +0 -1
- package/dist/services/media.service.js +0 -49
- package/dist/services/media.service.js.map +0 -1
- package/dist/services/population.service.d.ts +0 -20
- package/dist/services/population.service.d.ts.map +0 -1
- package/dist/services/population.service.js +0 -224
- package/dist/services/population.service.js.map +0 -1
- package/dist/types/access.d.ts +0 -48
- package/dist/types/access.d.ts.map +0 -1
- package/dist/types/access.js +0 -2
- package/dist/types/access.js.map +0 -1
- package/dist/types/adapters.d.ts +0 -152
- package/dist/types/adapters.d.ts.map +0 -1
- package/dist/types/adapters.js +0 -2
- package/dist/types/adapters.js.map +0 -1
- package/dist/types/admin-auth.d.ts +0 -132
- package/dist/types/admin-auth.d.ts.map +0 -1
- package/dist/types/admin-auth.js +0 -2
- package/dist/types/admin-auth.js.map +0 -1
- package/dist/types/admin.d.ts +0 -86
- package/dist/types/admin.d.ts.map +0 -1
- package/dist/types/admin.js +0 -2
- package/dist/types/admin.js.map +0 -1
- package/dist/types/app-config.d.ts +0 -279
- package/dist/types/app-config.d.ts.map +0 -1
- package/dist/types/app-config.js +0 -2
- package/dist/types/app-config.js.map +0 -1
- package/dist/types/documents.d.ts +0 -65
- package/dist/types/documents.d.ts.map +0 -1
- package/dist/types/documents.js +0 -2
- package/dist/types/documents.js.map +0 -1
- package/dist/types/hooks.d.ts +0 -122
- package/dist/types/hooks.d.ts.map +0 -1
- package/dist/types/hooks.js +0 -2
- package/dist/types/hooks.js.map +0 -1
- package/dist/types/index.d.ts +0 -13
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -13
- package/dist/types/index.js.map +0 -1
- package/dist/types/request.d.ts +0 -42
- package/dist/types/request.d.ts.map +0 -1
- package/dist/types/request.js +0 -2
- package/dist/types/request.js.map +0 -1
- package/dist/types/schema-config.d.ts +0 -443
- package/dist/types/schema-config.d.ts.map +0 -1
- package/dist/types/schema-config.js +0 -2
- package/dist/types/schema-config.js.map +0 -1
- package/dist/types/schema-core.d.ts +0 -628
- package/dist/types/schema-core.d.ts.map +0 -1
- package/dist/types/schema-core.js +0 -2
- package/dist/types/schema-core.js.map +0 -1
- package/dist/types/schema-inference.d.ts +0 -73
- package/dist/types/schema-inference.d.ts.map +0 -1
- package/dist/types/schema-inference.js +0 -2
- package/dist/types/schema-inference.js.map +0 -1
- package/dist/types/workflows.d.ts +0 -121
- package/dist/types/workflows.d.ts.map +0 -1
- package/dist/types/workflows.js +0 -7
- package/dist/types/workflows.js.map +0 -1
- package/dist/utils/access-control.d.ts +0 -35
- package/dist/utils/access-control.d.ts.map +0 -1
- package/dist/utils/access-control.js +0 -161
- package/dist/utils/access-control.js.map +0 -1
- package/dist/utils/admin-auth.d.ts +0 -5
- package/dist/utils/admin-auth.d.ts.map +0 -1
- package/dist/utils/admin-auth.js +0 -39
- package/dist/utils/admin-auth.js.map +0 -1
- package/dist/utils/block-references.d.ts +0 -10
- package/dist/utils/block-references.d.ts.map +0 -1
- package/dist/utils/block-references.js +0 -100
- package/dist/utils/block-references.js.map +0 -1
- package/dist/utils/collection-search.d.ts +0 -11
- package/dist/utils/collection-search.d.ts.map +0 -1
- package/dist/utils/collection-search.js +0 -204
- package/dist/utils/collection-search.js.map +0 -1
- package/dist/utils/config.d.ts +0 -8
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -336
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/hooks.d.ts +0 -41
- package/dist/utils/hooks.d.ts.map +0 -1
- package/dist/utils/hooks.js +0 -177
- package/dist/utils/hooks.js.map +0 -1
- package/dist/utils/openapi.d.ts +0 -6
- package/dist/utils/openapi.d.ts.map +0 -1
- package/dist/utils/openapi.js +0 -981
- package/dist/utils/openapi.js.map +0 -1
- package/dist/utils/parse-sort.d.ts +0 -43
- package/dist/utils/parse-sort.d.ts.map +0 -1
- package/dist/utils/parse-sort.js +0 -70
- package/dist/utils/parse-sort.js.map +0 -1
- package/dist/utils/parse-where.d.ts +0 -69
- package/dist/utils/parse-where.d.ts.map +0 -1
- package/dist/utils/parse-where.js +0 -202
- package/dist/utils/parse-where.js.map +0 -1
- package/dist/utils/readonly-db.d.ts +0 -9
- package/dist/utils/readonly-db.d.ts.map +0 -1
- package/dist/utils/readonly-db.js +0 -21
- package/dist/utils/readonly-db.js.map +0 -1
- package/dist/utils/swagger.d.ts +0 -11
- package/dist/utils/swagger.d.ts.map +0 -1
- package/dist/utils/swagger.js +0 -62
- package/dist/utils/swagger.js.map +0 -1
- package/dist/utils/upload-validation.d.ts +0 -23
- package/dist/utils/upload-validation.d.ts.map +0 -1
- package/dist/utils/upload-validation.js +0 -46
- package/dist/utils/upload-validation.js.map +0 -1
- package/dist/utils/where-sanitizer.d.ts +0 -10
- package/dist/utils/where-sanitizer.d.ts.map +0 -1
- package/dist/utils/where-sanitizer.js +0 -67
- package/dist/utils/where-sanitizer.js.map +0 -1
- package/dist/workflows.d.ts +0 -86
- package/dist/workflows.d.ts.map +0 -1
- package/dist/workflows.js +0 -405
- package/dist/workflows.js.map +0 -1
package/dist/server.d.cts
CHANGED
|
@@ -2,7 +2,7 @@ import * as hono_types from 'hono/types';
|
|
|
2
2
|
import * as hono from 'hono';
|
|
3
3
|
import { Context, Hono } from 'hono';
|
|
4
4
|
import { Logger } from 'pino';
|
|
5
|
-
import { D as DyrectedConfig,
|
|
5
|
+
import { D as DyrectedConfig, b4 as DyrectedObservabilityConfig, C as CollectionConfig, G as GlobalConfig } from './app-config-DQhcrGDE.cjs';
|
|
6
6
|
import { JWTPayload } from 'jose';
|
|
7
7
|
import { Tracer, Counter, Attributes, Histogram, Span } from '@opentelemetry/api';
|
|
8
8
|
import { PrometheusExporter } from '@opentelemetry/exporter-prometheus';
|
|
@@ -157,6 +157,12 @@ interface DyrectedContext {
|
|
|
157
157
|
declare function createDyrectedApp(rawConfig: DyrectedConfig | any): Promise<Hono<DyrectedContext, hono_types.BlankSchema, "/">>;
|
|
158
158
|
|
|
159
159
|
declare function serializeDetailForApi(detail?: any): any;
|
|
160
|
+
/**
|
|
161
|
+
* Serializes an operational view config for the Admin API.
|
|
162
|
+
* Function properties (action handlers) are stripped so the payload stays
|
|
163
|
+
* JSON-safe; access rules are resolved to static values the admin can evaluate.
|
|
164
|
+
*/
|
|
165
|
+
declare function serializeViewForApi(view: any, serializeAccess: (access: any) => Promise<any>): Promise<any>;
|
|
160
166
|
/**
|
|
161
167
|
* Register dynamic routes based on the provided configuration.
|
|
162
168
|
*/
|
|
@@ -374,25 +380,41 @@ declare class CollectionController {
|
|
|
374
380
|
}, 403, "json">) | (Response & hono.TypedResponse<{
|
|
375
381
|
[x: string]: hono_utils_types.JSONValue;
|
|
376
382
|
}, 201, "json">)>;
|
|
377
|
-
update(c: Context<DyrectedContext>): Promise<
|
|
383
|
+
update(c: Context<DyrectedContext>): Promise<Response>;
|
|
384
|
+
/**
|
|
385
|
+
* Core update pipeline shared by PATCH requests and operational actions:
|
|
386
|
+
* auth-field stripping, timestamps, access enforcement, field write access,
|
|
387
|
+
* beforeChange hooks, persistence (or workflow draft), audit logging,
|
|
388
|
+
* afterChange/afterRead hooks, and field read access on the response.
|
|
389
|
+
*/
|
|
390
|
+
private performUpdate;
|
|
391
|
+
/**
|
|
392
|
+
* Runs an operational view action (`defineAction`) against one or more documents.
|
|
393
|
+
* Declarative mutations are resolved server-side (`now()`, `input.*`, `doc.*`)
|
|
394
|
+
* and every write flows through the standard update pipeline so the
|
|
395
|
+
* collection's lifecycle hooks and audit trail still apply.
|
|
396
|
+
*/
|
|
397
|
+
runViewAction(c: Context<DyrectedContext>): Promise<(Response & hono.TypedResponse<{
|
|
378
398
|
message: string;
|
|
379
399
|
}, 500, "json">) | (Response & hono.TypedResponse<{
|
|
380
|
-
|
|
381
|
-
}, 400, "json">) | (Response & hono.TypedResponse<{
|
|
382
|
-
id: string;
|
|
383
|
-
externalSubject: string;
|
|
384
|
-
email: string;
|
|
385
|
-
name?: string | undefined;
|
|
386
|
-
roles: string[];
|
|
387
|
-
siteAccess?: string[] | undefined;
|
|
388
|
-
status?: "active" | "pending" | undefined;
|
|
389
|
-
}, hono_utils_http_status.ContentfulStatusCode, "json">) | (Response & hono.TypedResponse<{
|
|
400
|
+
error: true;
|
|
390
401
|
message: string;
|
|
391
402
|
}, 404, "json">) | (Response & hono.TypedResponse<{
|
|
392
403
|
error: true;
|
|
393
404
|
message: string;
|
|
394
|
-
},
|
|
395
|
-
|
|
405
|
+
}, 400, "json">) | (Response & hono.TypedResponse<{
|
|
406
|
+
error: true;
|
|
407
|
+
message: string;
|
|
408
|
+
}, 403, "json">) | (Response & hono.TypedResponse<never, any, "json">) | (Response & hono.TypedResponse<hono_utils_types.JSONValue, hono_utils_http_status.ContentfulStatusCode, "json">) | (Response & hono.TypedResponse<{
|
|
409
|
+
updated: number;
|
|
410
|
+
failed: number;
|
|
411
|
+
results: {
|
|
412
|
+
id: string;
|
|
413
|
+
ok: boolean;
|
|
414
|
+
status?: number | undefined;
|
|
415
|
+
doc?: hono_utils_types.JSONValue | undefined;
|
|
416
|
+
error?: hono_utils_types.JSONValue | undefined;
|
|
417
|
+
}[];
|
|
396
418
|
}, hono_utils_http_status.ContentfulStatusCode, "json">)>;
|
|
397
419
|
transition(c: Context<DyrectedContext>): Promise<(Response & hono.TypedResponse<{
|
|
398
420
|
message: string;
|
|
@@ -476,7 +498,7 @@ declare class CollectionController {
|
|
|
476
498
|
}, 403, "json">) | (Response & hono.TypedResponse<{
|
|
477
499
|
message: string;
|
|
478
500
|
}, 400, "json">) | (Response & hono.TypedResponse<{
|
|
479
|
-
[x: string]:
|
|
501
|
+
[x: string]: any;
|
|
480
502
|
}, hono_utils_http_status.ContentfulStatusCode, "json">)>;
|
|
481
503
|
}
|
|
482
504
|
|
|
@@ -576,4 +598,4 @@ declare class PreviewController {
|
|
|
576
598
|
}, 401, "json">)>;
|
|
577
599
|
}
|
|
578
600
|
|
|
579
|
-
export { AuthController, CollectionController, type DyrectedContext, type DyrectedObservabilityRuntime, GlobalController, MediaController, PreviewController, type RequestBodyCapture, type RequestTraceContext, type ResolvedObservabilityConfig, attachRequestMetrics, bindObservabilityRuntime, buildRequestLogger, captureRequestBody, createDyrectedApp, createObservabilityRuntime, createRequestSpan, endRequestSpan, getConfigLogger, getObservabilityRuntime, getRequestLogger, redactBody, redactHeaders, registerRoutes, renderPrometheusMetrics, resolveObservabilityConfig, serializeDetailForApi, shouldSampleRequest };
|
|
601
|
+
export { AuthController, CollectionController, type DyrectedContext, type DyrectedObservabilityRuntime, GlobalController, MediaController, PreviewController, type RequestBodyCapture, type RequestTraceContext, type ResolvedObservabilityConfig, attachRequestMetrics, bindObservabilityRuntime, buildRequestLogger, captureRequestBody, createDyrectedApp, createObservabilityRuntime, createRequestSpan, endRequestSpan, getConfigLogger, getObservabilityRuntime, getRequestLogger, redactBody, redactHeaders, registerRoutes, renderPrometheusMetrics, resolveObservabilityConfig, serializeDetailForApi, serializeViewForApi, shouldSampleRequest };
|
package/dist/server.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as hono_types from 'hono/types';
|
|
|
2
2
|
import * as hono from 'hono';
|
|
3
3
|
import { Context, Hono } from 'hono';
|
|
4
4
|
import { Logger } from 'pino';
|
|
5
|
-
import { D as DyrectedConfig,
|
|
5
|
+
import { D as DyrectedConfig, b4 as DyrectedObservabilityConfig, C as CollectionConfig, G as GlobalConfig } from './app-config-DQhcrGDE.js';
|
|
6
6
|
import { JWTPayload } from 'jose';
|
|
7
7
|
import { Tracer, Counter, Attributes, Histogram, Span } from '@opentelemetry/api';
|
|
8
8
|
import { PrometheusExporter } from '@opentelemetry/exporter-prometheus';
|
|
@@ -157,6 +157,12 @@ interface DyrectedContext {
|
|
|
157
157
|
declare function createDyrectedApp(rawConfig: DyrectedConfig | any): Promise<Hono<DyrectedContext, hono_types.BlankSchema, "/">>;
|
|
158
158
|
|
|
159
159
|
declare function serializeDetailForApi(detail?: any): any;
|
|
160
|
+
/**
|
|
161
|
+
* Serializes an operational view config for the Admin API.
|
|
162
|
+
* Function properties (action handlers) are stripped so the payload stays
|
|
163
|
+
* JSON-safe; access rules are resolved to static values the admin can evaluate.
|
|
164
|
+
*/
|
|
165
|
+
declare function serializeViewForApi(view: any, serializeAccess: (access: any) => Promise<any>): Promise<any>;
|
|
160
166
|
/**
|
|
161
167
|
* Register dynamic routes based on the provided configuration.
|
|
162
168
|
*/
|
|
@@ -374,25 +380,41 @@ declare class CollectionController {
|
|
|
374
380
|
}, 403, "json">) | (Response & hono.TypedResponse<{
|
|
375
381
|
[x: string]: hono_utils_types.JSONValue;
|
|
376
382
|
}, 201, "json">)>;
|
|
377
|
-
update(c: Context<DyrectedContext>): Promise<
|
|
383
|
+
update(c: Context<DyrectedContext>): Promise<Response>;
|
|
384
|
+
/**
|
|
385
|
+
* Core update pipeline shared by PATCH requests and operational actions:
|
|
386
|
+
* auth-field stripping, timestamps, access enforcement, field write access,
|
|
387
|
+
* beforeChange hooks, persistence (or workflow draft), audit logging,
|
|
388
|
+
* afterChange/afterRead hooks, and field read access on the response.
|
|
389
|
+
*/
|
|
390
|
+
private performUpdate;
|
|
391
|
+
/**
|
|
392
|
+
* Runs an operational view action (`defineAction`) against one or more documents.
|
|
393
|
+
* Declarative mutations are resolved server-side (`now()`, `input.*`, `doc.*`)
|
|
394
|
+
* and every write flows through the standard update pipeline so the
|
|
395
|
+
* collection's lifecycle hooks and audit trail still apply.
|
|
396
|
+
*/
|
|
397
|
+
runViewAction(c: Context<DyrectedContext>): Promise<(Response & hono.TypedResponse<{
|
|
378
398
|
message: string;
|
|
379
399
|
}, 500, "json">) | (Response & hono.TypedResponse<{
|
|
380
|
-
|
|
381
|
-
}, 400, "json">) | (Response & hono.TypedResponse<{
|
|
382
|
-
id: string;
|
|
383
|
-
externalSubject: string;
|
|
384
|
-
email: string;
|
|
385
|
-
name?: string | undefined;
|
|
386
|
-
roles: string[];
|
|
387
|
-
siteAccess?: string[] | undefined;
|
|
388
|
-
status?: "active" | "pending" | undefined;
|
|
389
|
-
}, hono_utils_http_status.ContentfulStatusCode, "json">) | (Response & hono.TypedResponse<{
|
|
400
|
+
error: true;
|
|
390
401
|
message: string;
|
|
391
402
|
}, 404, "json">) | (Response & hono.TypedResponse<{
|
|
392
403
|
error: true;
|
|
393
404
|
message: string;
|
|
394
|
-
},
|
|
395
|
-
|
|
405
|
+
}, 400, "json">) | (Response & hono.TypedResponse<{
|
|
406
|
+
error: true;
|
|
407
|
+
message: string;
|
|
408
|
+
}, 403, "json">) | (Response & hono.TypedResponse<never, any, "json">) | (Response & hono.TypedResponse<hono_utils_types.JSONValue, hono_utils_http_status.ContentfulStatusCode, "json">) | (Response & hono.TypedResponse<{
|
|
409
|
+
updated: number;
|
|
410
|
+
failed: number;
|
|
411
|
+
results: {
|
|
412
|
+
id: string;
|
|
413
|
+
ok: boolean;
|
|
414
|
+
status?: number | undefined;
|
|
415
|
+
doc?: hono_utils_types.JSONValue | undefined;
|
|
416
|
+
error?: hono_utils_types.JSONValue | undefined;
|
|
417
|
+
}[];
|
|
396
418
|
}, hono_utils_http_status.ContentfulStatusCode, "json">)>;
|
|
397
419
|
transition(c: Context<DyrectedContext>): Promise<(Response & hono.TypedResponse<{
|
|
398
420
|
message: string;
|
|
@@ -476,7 +498,7 @@ declare class CollectionController {
|
|
|
476
498
|
}, 403, "json">) | (Response & hono.TypedResponse<{
|
|
477
499
|
message: string;
|
|
478
500
|
}, 400, "json">) | (Response & hono.TypedResponse<{
|
|
479
|
-
[x: string]:
|
|
501
|
+
[x: string]: any;
|
|
480
502
|
}, hono_utils_http_status.ContentfulStatusCode, "json">)>;
|
|
481
503
|
}
|
|
482
504
|
|
|
@@ -576,4 +598,4 @@ declare class PreviewController {
|
|
|
576
598
|
}, 401, "json">)>;
|
|
577
599
|
}
|
|
578
600
|
|
|
579
|
-
export { AuthController, CollectionController, type DyrectedContext, type DyrectedObservabilityRuntime, GlobalController, MediaController, PreviewController, type RequestBodyCapture, type RequestTraceContext, type ResolvedObservabilityConfig, attachRequestMetrics, bindObservabilityRuntime, buildRequestLogger, captureRequestBody, createDyrectedApp, createObservabilityRuntime, createRequestSpan, endRequestSpan, getConfigLogger, getObservabilityRuntime, getRequestLogger, redactBody, redactHeaders, registerRoutes, renderPrometheusMetrics, resolveObservabilityConfig, serializeDetailForApi, shouldSampleRequest };
|
|
601
|
+
export { AuthController, CollectionController, type DyrectedContext, type DyrectedObservabilityRuntime, GlobalController, MediaController, PreviewController, type RequestBodyCapture, type RequestTraceContext, type ResolvedObservabilityConfig, attachRequestMetrics, bindObservabilityRuntime, buildRequestLogger, captureRequestBody, createDyrectedApp, createObservabilityRuntime, createRequestSpan, endRequestSpan, getConfigLogger, getObservabilityRuntime, getRequestLogger, redactBody, redactHeaders, registerRoutes, renderPrometheusMetrics, resolveObservabilityConfig, serializeDetailForApi, serializeViewForApi, shouldSampleRequest };
|
package/dist/server.js
CHANGED
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
mergeDynamicConfig,
|
|
22
22
|
normalizeConfig,
|
|
23
23
|
publishedStateName,
|
|
24
|
+
require_Jexl,
|
|
24
25
|
revokeAllAuthSessions,
|
|
25
26
|
revokeAuthSession,
|
|
26
27
|
runCollectionHooks,
|
|
@@ -29,7 +30,7 @@ import {
|
|
|
29
30
|
touchAuthSession,
|
|
30
31
|
transitionWorkflow,
|
|
31
32
|
verifyCollectionToken
|
|
32
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-TYPDQTE2.js";
|
|
33
34
|
import {
|
|
34
35
|
attachRequestMetrics,
|
|
35
36
|
bindObservabilityRuntime,
|
|
@@ -47,6 +48,9 @@ import {
|
|
|
47
48
|
resolveObservabilityConfig,
|
|
48
49
|
shouldSampleRequest
|
|
49
50
|
} from "./chunk-FRSJJO27.js";
|
|
51
|
+
import {
|
|
52
|
+
__toESM
|
|
53
|
+
} from "./chunk-JSBRDJBE.js";
|
|
50
54
|
|
|
51
55
|
// src/app.ts
|
|
52
56
|
import { Hono } from "hono";
|
|
@@ -97,7 +101,7 @@ var DefaultsService = class {
|
|
|
97
101
|
};
|
|
98
102
|
|
|
99
103
|
// src/services/population.service.ts
|
|
100
|
-
|
|
104
|
+
var import_jexl = __toESM(require_Jexl(), 1);
|
|
101
105
|
var PopulationService = class {
|
|
102
106
|
db;
|
|
103
107
|
collections;
|
|
@@ -255,7 +259,7 @@ var PopulationService = class {
|
|
|
255
259
|
);
|
|
256
260
|
} else if (previewUrlPattern.includes("+") || previewUrlPattern.includes("?") || previewUrlPattern.includes("==") || previewUrlPattern.includes("siteUrl")) {
|
|
257
261
|
try {
|
|
258
|
-
resolvedUrl =
|
|
262
|
+
resolvedUrl = import_jexl.default.evalSync(
|
|
259
263
|
previewUrlPattern,
|
|
260
264
|
docWithDefaults
|
|
261
265
|
);
|
|
@@ -434,12 +438,12 @@ function validateUpload(file, config) {
|
|
|
434
438
|
}
|
|
435
439
|
|
|
436
440
|
// src/auth/jexl.ts
|
|
437
|
-
|
|
441
|
+
var import_jexl2 = __toESM(require_Jexl(), 1);
|
|
438
442
|
async function evaluateAccess(expression, context) {
|
|
439
443
|
if (expression === void 0 || expression === null) return false;
|
|
440
444
|
if (typeof expression === "boolean") return expression;
|
|
441
445
|
try {
|
|
442
|
-
const result = await
|
|
446
|
+
const result = await import_jexl2.default.eval(expression, context);
|
|
443
447
|
if (result && typeof result === "object" && !Array.isArray(result)) {
|
|
444
448
|
return result;
|
|
445
449
|
}
|
|
@@ -853,6 +857,45 @@ function mergeWhereConstraint(where, constraint) {
|
|
|
853
857
|
return where ? { AND: [where, constraint] } : constraint;
|
|
854
858
|
}
|
|
855
859
|
|
|
860
|
+
// src/utils/action-mutation.ts
|
|
861
|
+
function resolveActionMutation(mutation, ctx) {
|
|
862
|
+
if (!mutation) return {};
|
|
863
|
+
return resolveValue(mutation, ctx);
|
|
864
|
+
}
|
|
865
|
+
function resolveValue(value, ctx) {
|
|
866
|
+
if (typeof value === "string") return resolveExpression(value, ctx);
|
|
867
|
+
if (Array.isArray(value)) return value.map((item) => resolveValue(item, ctx));
|
|
868
|
+
if (isPlainObject(value)) {
|
|
869
|
+
const out = {};
|
|
870
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
871
|
+
out[key] = resolveValue(entry, ctx);
|
|
872
|
+
}
|
|
873
|
+
return out;
|
|
874
|
+
}
|
|
875
|
+
return value;
|
|
876
|
+
}
|
|
877
|
+
function resolveExpression(expression, ctx) {
|
|
878
|
+
if (expression === "now()") return (/* @__PURE__ */ new Date()).toISOString();
|
|
879
|
+
const inputPath = expression.match(/^input\.([A-Za-z0-9_.-]+)$/)?.[1];
|
|
880
|
+
if (inputPath !== void 0) return getPath(ctx.input, inputPath);
|
|
881
|
+
const docPath = expression.match(/^doc\.([A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)*)$/)?.[1];
|
|
882
|
+
if (docPath !== void 0) return getPath(ctx.doc, docPath);
|
|
883
|
+
const userPath = expression.match(/^user\.([A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)*)$/)?.[1];
|
|
884
|
+
if (userPath !== void 0 && ctx.user) return getPath(ctx.user, userPath);
|
|
885
|
+
return expression;
|
|
886
|
+
}
|
|
887
|
+
function getPath(source, path) {
|
|
888
|
+
let cursor = source;
|
|
889
|
+
for (const segment of path.split(".")) {
|
|
890
|
+
if (!cursor || typeof cursor !== "object") return void 0;
|
|
891
|
+
cursor = cursor[segment];
|
|
892
|
+
}
|
|
893
|
+
return cursor;
|
|
894
|
+
}
|
|
895
|
+
function isPlainObject(value) {
|
|
896
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
897
|
+
}
|
|
898
|
+
|
|
856
899
|
// src/controllers/collection.controller.ts
|
|
857
900
|
var CollectionController = class {
|
|
858
901
|
collection;
|
|
@@ -978,7 +1021,7 @@ var CollectionController = class {
|
|
|
978
1021
|
if (this.collection.admin?.filterable === false) {
|
|
979
1022
|
where = void 0;
|
|
980
1023
|
} else {
|
|
981
|
-
const { sanitizeWhereClause } = await import("./where-sanitizer-
|
|
1024
|
+
const { sanitizeWhereClause } = await import("./where-sanitizer-3MNFMYA2.js");
|
|
982
1025
|
where = sanitizeWhereClause(where, this.collection.fields);
|
|
983
1026
|
if (Object.keys(where).length === 0) {
|
|
984
1027
|
where = void 0;
|
|
@@ -1526,12 +1569,24 @@ var CollectionController = class {
|
|
|
1526
1569
|
externalSubject: member.id
|
|
1527
1570
|
});
|
|
1528
1571
|
}
|
|
1529
|
-
const readonlyDb = createReadonlyDb(db);
|
|
1530
1572
|
const id = c.req.param("id");
|
|
1531
1573
|
if (!id) return c.json({ message: "Missing ID" }, 400);
|
|
1532
1574
|
const body = await c.req.json();
|
|
1575
|
+
return this.performUpdate(c, id, body);
|
|
1576
|
+
}
|
|
1577
|
+
/**
|
|
1578
|
+
* Core update pipeline shared by PATCH requests and operational actions:
|
|
1579
|
+
* auth-field stripping, timestamps, access enforcement, field write access,
|
|
1580
|
+
* beforeChange hooks, persistence (or workflow draft), audit logging,
|
|
1581
|
+
* afterChange/afterRead hooks, and field read access on the response.
|
|
1582
|
+
*/
|
|
1583
|
+
async performUpdate(c, id, rawData) {
|
|
1584
|
+
const config = c.get("config");
|
|
1585
|
+
const db = config.db;
|
|
1586
|
+
if (!db) return c.json({ message: "Database not configured" }, 500);
|
|
1587
|
+
const readonlyDb = createReadonlyDb(db);
|
|
1533
1588
|
const user = c.get("user");
|
|
1534
|
-
let data = { ...
|
|
1589
|
+
let data = { ...rawData };
|
|
1535
1590
|
if (this.collection.auth) {
|
|
1536
1591
|
delete data.password;
|
|
1537
1592
|
delete data.oldPassword;
|
|
@@ -1651,6 +1706,119 @@ var CollectionController = class {
|
|
|
1651
1706
|
);
|
|
1652
1707
|
return c.json(accessibleDoc);
|
|
1653
1708
|
}
|
|
1709
|
+
/**
|
|
1710
|
+
* Runs an operational view action (`defineAction`) against one or more documents.
|
|
1711
|
+
* Declarative mutations are resolved server-side (`now()`, `input.*`, `doc.*`)
|
|
1712
|
+
* and every write flows through the standard update pipeline so the
|
|
1713
|
+
* collection's lifecycle hooks and audit trail still apply.
|
|
1714
|
+
*/
|
|
1715
|
+
async runViewAction(c) {
|
|
1716
|
+
const config = c.get("config");
|
|
1717
|
+
const db = config.db;
|
|
1718
|
+
if (!db) return c.json({ message: "Database not configured" }, 500);
|
|
1719
|
+
if (!this.collection.views?.length) {
|
|
1720
|
+
return c.json({ error: true, message: `Collection ${this.collection.slug} has no views` }, 404);
|
|
1721
|
+
}
|
|
1722
|
+
const actionName = c.req.param("action");
|
|
1723
|
+
const viewSlugParam = c.req.param("viewSlug");
|
|
1724
|
+
let action;
|
|
1725
|
+
for (const view2 of this.collection.views) {
|
|
1726
|
+
if (viewSlugParam && view2.slug !== viewSlugParam) continue;
|
|
1727
|
+
const match = view2.actions?.find((candidate) => candidate.name === actionName);
|
|
1728
|
+
if (match) {
|
|
1729
|
+
action = match;
|
|
1730
|
+
break;
|
|
1731
|
+
}
|
|
1732
|
+
}
|
|
1733
|
+
if (!action) {
|
|
1734
|
+
return c.json(
|
|
1735
|
+
{ error: true, message: `Action "${actionName}" was not found${viewSlugParam ? ` in view "${viewSlugParam}"` : ""}` },
|
|
1736
|
+
404
|
|
1737
|
+
);
|
|
1738
|
+
}
|
|
1739
|
+
const body = await c.req.json().catch(() => ({}));
|
|
1740
|
+
const requestedIds = Array.isArray(body?.ids) ? body.ids.filter((value) => typeof value === "string") : typeof body?.id === "string" ? [body.id] : [];
|
|
1741
|
+
if (!requestedIds.length) {
|
|
1742
|
+
return c.json(
|
|
1743
|
+
{ error: true, message: "Provide an `id` or an `ids` array of documents to act on." },
|
|
1744
|
+
400
|
|
1745
|
+
);
|
|
1746
|
+
}
|
|
1747
|
+
const input = body?.input ?? {};
|
|
1748
|
+
const user = c.get("user");
|
|
1749
|
+
const accessArgs = { user, req: this.toHookRequestContext(c) };
|
|
1750
|
+
const view = viewSlugParam ? this.collection.views.find((candidate) => candidate.slug === viewSlugParam) : void 0;
|
|
1751
|
+
if (view?.access) {
|
|
1752
|
+
const allowed = await resolveBooleanAccess(config, view.access.update ?? view.access.read ?? true, {
|
|
1753
|
+
...accessArgs,
|
|
1754
|
+
data: input
|
|
1755
|
+
});
|
|
1756
|
+
if (!allowed) {
|
|
1757
|
+
return c.json({ error: true, message: `Access denied: view "${view.slug}"` }, 403);
|
|
1758
|
+
}
|
|
1759
|
+
}
|
|
1760
|
+
if (action.access) {
|
|
1761
|
+
const actionAccess = await resolveBooleanAccess(config, action.access.update ?? true, {
|
|
1762
|
+
...accessArgs,
|
|
1763
|
+
data: input
|
|
1764
|
+
});
|
|
1765
|
+
if (!actionAccess) {
|
|
1766
|
+
return c.json({ error: true, message: `Access denied: action "${action.name}"` }, 403);
|
|
1767
|
+
}
|
|
1768
|
+
}
|
|
1769
|
+
const results = [];
|
|
1770
|
+
for (const id of requestedIds) {
|
|
1771
|
+
const targetDoc = await db.findOne({ collection: this.collection.slug, id });
|
|
1772
|
+
if (!targetDoc) {
|
|
1773
|
+
results.push({ id, ok: false, status: 404, error: "Not Found" });
|
|
1774
|
+
continue;
|
|
1775
|
+
}
|
|
1776
|
+
let resolvedData;
|
|
1777
|
+
if (typeof action.handler === "function") {
|
|
1778
|
+
try {
|
|
1779
|
+
const handlerResult = await action.handler({
|
|
1780
|
+
doc: targetDoc,
|
|
1781
|
+
docs: [targetDoc],
|
|
1782
|
+
user: user ?? null,
|
|
1783
|
+
input,
|
|
1784
|
+
collection: { slug: this.collection.slug, label: this.collection.labels?.singular ?? this.collection.slug }
|
|
1785
|
+
});
|
|
1786
|
+
resolvedData = handlerResult ?? {};
|
|
1787
|
+
} catch (error) {
|
|
1788
|
+
results.push({ id, ok: false, status: 500, error: error instanceof Error ? error.message : String(error) });
|
|
1789
|
+
continue;
|
|
1790
|
+
}
|
|
1791
|
+
} else {
|
|
1792
|
+
resolvedData = resolveActionMutation(action.mutation, {
|
|
1793
|
+
doc: targetDoc,
|
|
1794
|
+
input,
|
|
1795
|
+
user: user ?? null
|
|
1796
|
+
});
|
|
1797
|
+
}
|
|
1798
|
+
const response = await this.performUpdate(c, id, resolvedData);
|
|
1799
|
+
const ok = response.ok;
|
|
1800
|
+
let payload;
|
|
1801
|
+
try {
|
|
1802
|
+
payload = await response.clone().json();
|
|
1803
|
+
} catch {
|
|
1804
|
+
payload = void 0;
|
|
1805
|
+
}
|
|
1806
|
+
results.push({ id, ok, status: response.status, ...ok ? { doc: payload } : { error: payload } });
|
|
1807
|
+
}
|
|
1808
|
+
if (requestedIds.length === 1) {
|
|
1809
|
+
const single = results[0];
|
|
1810
|
+
if (!single.ok) {
|
|
1811
|
+
return c.json(single.error ?? { error: true, message: "Action failed" }, single.status ?? 500);
|
|
1812
|
+
}
|
|
1813
|
+
return c.json(single.doc);
|
|
1814
|
+
}
|
|
1815
|
+
const failed = results.filter((result) => !result.ok).length;
|
|
1816
|
+
return c.json({
|
|
1817
|
+
updated: results.length - failed,
|
|
1818
|
+
failed,
|
|
1819
|
+
results
|
|
1820
|
+
});
|
|
1821
|
+
}
|
|
1654
1822
|
async transition(c) {
|
|
1655
1823
|
const config = c.get("config");
|
|
1656
1824
|
if (!config.db) return c.json({ message: "Database not configured" }, 500);
|
|
@@ -2032,9 +2200,23 @@ var CollectionController = class {
|
|
|
2032
2200
|
400
|
|
2033
2201
|
);
|
|
2034
2202
|
}
|
|
2035
|
-
|
|
2203
|
+
let rawAggregates;
|
|
2204
|
+
let groupBy;
|
|
2205
|
+
if ("aggregates" in body && typeof body.aggregates === "object" && body.aggregates !== null && !Array.isArray(body.aggregates)) {
|
|
2206
|
+
rawAggregates = body.aggregates;
|
|
2207
|
+
if (typeof body.groupBy === "string" && body.groupBy.trim()) {
|
|
2208
|
+
groupBy = body.groupBy.trim();
|
|
2209
|
+
}
|
|
2210
|
+
} else {
|
|
2211
|
+
rawAggregates = body;
|
|
2212
|
+
const queryGroupBy = c.req.query("groupBy");
|
|
2213
|
+
if (typeof queryGroupBy === "string" && queryGroupBy.trim()) {
|
|
2214
|
+
groupBy = queryGroupBy.trim();
|
|
2215
|
+
}
|
|
2216
|
+
}
|
|
2217
|
+
const { sanitizeWhereClause } = await import("./where-sanitizer-3MNFMYA2.js");
|
|
2036
2218
|
const sanitizedAggregates = {};
|
|
2037
|
-
for (const [key, op] of Object.entries(
|
|
2219
|
+
for (const [key, op] of Object.entries(rawAggregates)) {
|
|
2038
2220
|
if (!op || typeof op !== "object" || Array.isArray(op)) {
|
|
2039
2221
|
return c.json(
|
|
2040
2222
|
{
|
|
@@ -2059,7 +2241,8 @@ var CollectionController = class {
|
|
|
2059
2241
|
}
|
|
2060
2242
|
const result = await db.aggregate({
|
|
2061
2243
|
collection: this.collection.slug,
|
|
2062
|
-
aggregates: sanitizedAggregates
|
|
2244
|
+
aggregates: sanitizedAggregates,
|
|
2245
|
+
...groupBy ? { groupBy } : {}
|
|
2063
2246
|
});
|
|
2064
2247
|
return c.json(result);
|
|
2065
2248
|
}
|
|
@@ -4373,6 +4556,47 @@ function serializeDetailForApi(detail) {
|
|
|
4373
4556
|
if (!detail || !Array.isArray(detail)) return void 0;
|
|
4374
4557
|
return detail.map(serializeDetailItemForApi);
|
|
4375
4558
|
}
|
|
4559
|
+
async function serializeViewForApi(view, serializeAccess) {
|
|
4560
|
+
if (!view) return view;
|
|
4561
|
+
const serializeAccessConfig = async (access) => {
|
|
4562
|
+
if (!access) return void 0;
|
|
4563
|
+
const serialized = {};
|
|
4564
|
+
for (const key of ["read", "create", "update", "delete"]) {
|
|
4565
|
+
if (access[key] !== void 0) serialized[key] = await serializeAccess(access[key]);
|
|
4566
|
+
}
|
|
4567
|
+
return serialized;
|
|
4568
|
+
};
|
|
4569
|
+
return {
|
|
4570
|
+
slug: view.slug,
|
|
4571
|
+
label: view.label,
|
|
4572
|
+
icon: view.icon,
|
|
4573
|
+
layout: view.layout ?? "table",
|
|
4574
|
+
filter: view.filter,
|
|
4575
|
+
groupBy: view.groupBy,
|
|
4576
|
+
dateField: view.dateField,
|
|
4577
|
+
startDateField: view.startDateField,
|
|
4578
|
+
endDateField: view.endDateField,
|
|
4579
|
+
columns: view.columns,
|
|
4580
|
+
sort: view.sort,
|
|
4581
|
+
metrics: view.metrics,
|
|
4582
|
+
features: view.features,
|
|
4583
|
+
actionOrder: view.actionOrder,
|
|
4584
|
+
actions: await Promise.all(
|
|
4585
|
+
(view.actions || []).map(async (action) => ({
|
|
4586
|
+
name: action.name,
|
|
4587
|
+
label: action.label,
|
|
4588
|
+
icon: action.icon,
|
|
4589
|
+
type: action.type ?? "row",
|
|
4590
|
+
confirm: action.confirm,
|
|
4591
|
+
fields: action.fields?.map(serializeFieldForApi),
|
|
4592
|
+
mutation: action.mutation,
|
|
4593
|
+
// Self-hosted handlers are intentionally omitted: they never leave the server.
|
|
4594
|
+
access: action.access ? await serializeAccessConfig(action.access) : void 0
|
|
4595
|
+
}))
|
|
4596
|
+
),
|
|
4597
|
+
access: view.access ? await serializeAccessConfig(view.access) : void 0
|
|
4598
|
+
};
|
|
4599
|
+
}
|
|
4376
4600
|
function registerRoutes(app, config) {
|
|
4377
4601
|
const optionsCache = /* @__PURE__ */ new Map();
|
|
4378
4602
|
app.get("/api/schemas", optionalAuth(config), async (c) => {
|
|
@@ -4433,6 +4657,8 @@ function registerRoutes(app, config) {
|
|
|
4433
4657
|
auth: !!col.auth,
|
|
4434
4658
|
audit: !!col.audit,
|
|
4435
4659
|
drafts: !!col.drafts,
|
|
4660
|
+
defaultView: col.defaultView ?? col.admin?.defaultView,
|
|
4661
|
+
views: await Promise.all((col.views || []).map((view) => serializeViewForApi(view, serializeAccess))),
|
|
4436
4662
|
admin: col.admin,
|
|
4437
4663
|
detail: serializeDetailForApi(col.detail),
|
|
4438
4664
|
workflow: col.workflow ? {
|
|
@@ -4507,9 +4733,9 @@ function registerRoutes(app, config) {
|
|
|
4507
4733
|
const { collection: colSlug, field: fieldName } = c.req.param();
|
|
4508
4734
|
const siteId = c.req.header("X-Site-Id");
|
|
4509
4735
|
const requestConfig = siteId && config.onSchemaFetch ? mergeDynamicConfig(config, await config.onSchemaFetch(siteId)) : config;
|
|
4510
|
-
|
|
4736
|
+
const collections = [...requestConfig.collections];
|
|
4511
4737
|
const user = c.get("user");
|
|
4512
|
-
|
|
4738
|
+
const collection = collections.find((col) => col.slug === colSlug);
|
|
4513
4739
|
let field;
|
|
4514
4740
|
if (collection) {
|
|
4515
4741
|
const accessExpr = collection.access?.read;
|
|
@@ -4635,13 +4861,12 @@ function registerRoutes(app, config) {
|
|
|
4635
4861
|
app.get("/api/docs", (c) => {
|
|
4636
4862
|
return c.html(getSwaggerHtml());
|
|
4637
4863
|
});
|
|
4638
|
-
app.get("/api/preferences/:key",
|
|
4864
|
+
app.get("/api/preferences/:key", optionalAuth(config), async (c) => {
|
|
4639
4865
|
const db = config.db;
|
|
4640
4866
|
const user = c.get("user");
|
|
4641
4867
|
const key = c.req.param("key");
|
|
4642
4868
|
const scope = c.req.query("scope");
|
|
4643
4869
|
if (!db) return c.json({ message: "Database not configured" }, 500);
|
|
4644
|
-
if (!user?.collection || !user.sub) return c.json({ error: true, message: "Authentication required." }, 401);
|
|
4645
4870
|
if (!key) return c.json({ error: true, message: "Preference key is required." }, 400);
|
|
4646
4871
|
const getGlobalPreference = async () => {
|
|
4647
4872
|
const globalDoc = await db.findOne({
|
|
@@ -4650,12 +4875,15 @@ function registerRoutes(app, config) {
|
|
|
4650
4875
|
});
|
|
4651
4876
|
return globalDoc ? globalDoc.value : null;
|
|
4652
4877
|
};
|
|
4653
|
-
if (scope === "global") {
|
|
4878
|
+
if (scope === "global" || !user?.collection || !user.sub) {
|
|
4654
4879
|
const globalValue2 = await getGlobalPreference();
|
|
4655
4880
|
return c.json({ key, value: globalValue2 });
|
|
4656
4881
|
}
|
|
4657
4882
|
const doc = await db.findOne({ collection: user.collection, id: user.sub });
|
|
4658
|
-
if (!doc)
|
|
4883
|
+
if (!doc) {
|
|
4884
|
+
const globalValue2 = await getGlobalPreference();
|
|
4885
|
+
return c.json({ key, value: globalValue2 });
|
|
4886
|
+
}
|
|
4659
4887
|
const preferences = typeof doc.__preferences === "object" && doc.__preferences !== null ? doc.__preferences : {};
|
|
4660
4888
|
if (key in preferences) {
|
|
4661
4889
|
return c.json({ key, value: preferences[key] ?? null });
|
|
@@ -4794,6 +5022,10 @@ function registerRoutes(app, config) {
|
|
|
4794
5022
|
app.post(`${path}/media`, (c) => controller.create(c));
|
|
4795
5023
|
app.delete(`${path}/delete-many`, (c) => controller.deleteMany(c));
|
|
4796
5024
|
app.post(`${path}/aggregate`, (c) => controller.aggregate(c));
|
|
5025
|
+
if (collection.views?.length) {
|
|
5026
|
+
app.post(`${path}/views/:viewSlug/actions/:action`, optionalAuth(config), (c) => controller.runViewAction(c));
|
|
5027
|
+
app.post(`${path}/actions/:action`, optionalAuth(config), (c) => controller.runViewAction(c));
|
|
5028
|
+
}
|
|
4797
5029
|
if (collection.audit) {
|
|
4798
5030
|
app.get(`${path}/__audit`, (c) => auditController.findForCollection(c, collection));
|
|
4799
5031
|
}
|
|
@@ -5256,5 +5488,6 @@ export {
|
|
|
5256
5488
|
renderPrometheusMetrics,
|
|
5257
5489
|
resolveObservabilityConfig,
|
|
5258
5490
|
serializeDetailForApi,
|
|
5491
|
+
serializeViewForApi,
|
|
5259
5492
|
shouldSampleRequest
|
|
5260
5493
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dyrected/core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.10.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
},
|
|
59
59
|
"description": "Core engine and schema handling for Dyrected CMS",
|
|
60
60
|
"scripts": {
|
|
61
|
-
"build": "tsup src/index.ts src/server.ts --format cjs,esm --dts",
|
|
62
|
-
"dev": "tsup src/index.ts src/server.ts --format cjs,esm --watch --dts",
|
|
61
|
+
"build": "NODE_OPTIONS=--max-old-space-size=4096 tsup src/index.ts src/server.ts --format cjs,esm --dts",
|
|
62
|
+
"dev": "NODE_OPTIONS=--max-old-space-size=4096 tsup src/index.ts src/server.ts --format cjs,esm --watch --dts",
|
|
63
63
|
"lint": "eslint src/**/*.ts",
|
|
64
64
|
"test": "vitest"
|
|
65
65
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"access-features.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/access-features.test.ts"],"names":[],"mappings":""}
|