@dyrected/core 2.8.3 → 2.9.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-gEQJFvnN.d.cts} +212 -85
- package/dist/{app-config-BccpBUqJ.d.ts → app-config-gEQJFvnN.d.ts} +212 -85
- package/dist/chunk-JSBRDJBE.js +30 -0
- package/dist/{chunk-GFFGDHST.js → chunk-XRIONGRY.js} +1769 -12
- package/dist/index.cjs +1813 -6
- package/dist/index.d.cts +19 -4
- package/dist/index.d.ts +19 -4
- package/dist/index.js +56 -4
- package/dist/{observability-KCMTV7GO.js → observability-HQF4EUSV.js} +1 -0
- package/dist/server.cjs +1979 -13
- package/dist/server.d.cts +37 -15
- package/dist/server.d.ts +37 -15
- package/dist/server.js +230 -15
- 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, b2 as DyrectedObservabilityConfig, C as CollectionConfig, G as GlobalConfig } from './app-config-gEQJFvnN.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;
|
|
@@ -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, b2 as DyrectedObservabilityConfig, C as CollectionConfig, G as GlobalConfig } from './app-config-gEQJFvnN.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;
|
|
@@ -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-XRIONGRY.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,7 +2200,7 @@ var CollectionController = class {
|
|
|
2032
2200
|
400
|
|
2033
2201
|
);
|
|
2034
2202
|
}
|
|
2035
|
-
const { sanitizeWhereClause } = await import("./where-sanitizer-
|
|
2203
|
+
const { sanitizeWhereClause } = await import("./where-sanitizer-3MNFMYA2.js");
|
|
2036
2204
|
const sanitizedAggregates = {};
|
|
2037
2205
|
for (const [key, op] of Object.entries(body)) {
|
|
2038
2206
|
if (!op || typeof op !== "object" || Array.isArray(op)) {
|
|
@@ -4373,6 +4541,45 @@ function serializeDetailForApi(detail) {
|
|
|
4373
4541
|
if (!detail || !Array.isArray(detail)) return void 0;
|
|
4374
4542
|
return detail.map(serializeDetailItemForApi);
|
|
4375
4543
|
}
|
|
4544
|
+
async function serializeViewForApi(view, serializeAccess) {
|
|
4545
|
+
if (!view) return view;
|
|
4546
|
+
const serializeAccessConfig = async (access) => {
|
|
4547
|
+
if (!access) return void 0;
|
|
4548
|
+
const serialized = {};
|
|
4549
|
+
for (const key of ["read", "create", "update", "delete"]) {
|
|
4550
|
+
if (access[key] !== void 0) serialized[key] = await serializeAccess(access[key]);
|
|
4551
|
+
}
|
|
4552
|
+
return serialized;
|
|
4553
|
+
};
|
|
4554
|
+
return {
|
|
4555
|
+
slug: view.slug,
|
|
4556
|
+
label: view.label,
|
|
4557
|
+
icon: view.icon,
|
|
4558
|
+
layout: view.layout ?? "table",
|
|
4559
|
+
filter: view.filter,
|
|
4560
|
+
groupBy: view.groupBy,
|
|
4561
|
+
dateField: view.dateField,
|
|
4562
|
+
startDateField: view.startDateField,
|
|
4563
|
+
endDateField: view.endDateField,
|
|
4564
|
+
columns: view.columns,
|
|
4565
|
+
sort: view.sort,
|
|
4566
|
+
metrics: view.metrics,
|
|
4567
|
+
actions: await Promise.all(
|
|
4568
|
+
(view.actions || []).map(async (action) => ({
|
|
4569
|
+
name: action.name,
|
|
4570
|
+
label: action.label,
|
|
4571
|
+
icon: action.icon,
|
|
4572
|
+
type: action.type ?? "row",
|
|
4573
|
+
confirm: action.confirm,
|
|
4574
|
+
fields: action.fields?.map(serializeFieldForApi),
|
|
4575
|
+
mutation: action.mutation,
|
|
4576
|
+
// Self-hosted handlers are intentionally omitted: they never leave the server.
|
|
4577
|
+
access: action.access ? await serializeAccessConfig(action.access) : void 0
|
|
4578
|
+
}))
|
|
4579
|
+
),
|
|
4580
|
+
access: view.access ? await serializeAccessConfig(view.access) : void 0
|
|
4581
|
+
};
|
|
4582
|
+
}
|
|
4376
4583
|
function registerRoutes(app, config) {
|
|
4377
4584
|
const optionsCache = /* @__PURE__ */ new Map();
|
|
4378
4585
|
app.get("/api/schemas", optionalAuth(config), async (c) => {
|
|
@@ -4433,6 +4640,7 @@ function registerRoutes(app, config) {
|
|
|
4433
4640
|
auth: !!col.auth,
|
|
4434
4641
|
audit: !!col.audit,
|
|
4435
4642
|
drafts: !!col.drafts,
|
|
4643
|
+
views: await Promise.all((col.views || []).map((view) => serializeViewForApi(view, serializeAccess))),
|
|
4436
4644
|
admin: col.admin,
|
|
4437
4645
|
detail: serializeDetailForApi(col.detail),
|
|
4438
4646
|
workflow: col.workflow ? {
|
|
@@ -4507,9 +4715,9 @@ function registerRoutes(app, config) {
|
|
|
4507
4715
|
const { collection: colSlug, field: fieldName } = c.req.param();
|
|
4508
4716
|
const siteId = c.req.header("X-Site-Id");
|
|
4509
4717
|
const requestConfig = siteId && config.onSchemaFetch ? mergeDynamicConfig(config, await config.onSchemaFetch(siteId)) : config;
|
|
4510
|
-
|
|
4718
|
+
const collections = [...requestConfig.collections];
|
|
4511
4719
|
const user = c.get("user");
|
|
4512
|
-
|
|
4720
|
+
const collection = collections.find((col) => col.slug === colSlug);
|
|
4513
4721
|
let field;
|
|
4514
4722
|
if (collection) {
|
|
4515
4723
|
const accessExpr = collection.access?.read;
|
|
@@ -4635,13 +4843,12 @@ function registerRoutes(app, config) {
|
|
|
4635
4843
|
app.get("/api/docs", (c) => {
|
|
4636
4844
|
return c.html(getSwaggerHtml());
|
|
4637
4845
|
});
|
|
4638
|
-
app.get("/api/preferences/:key",
|
|
4846
|
+
app.get("/api/preferences/:key", optionalAuth(config), async (c) => {
|
|
4639
4847
|
const db = config.db;
|
|
4640
4848
|
const user = c.get("user");
|
|
4641
4849
|
const key = c.req.param("key");
|
|
4642
4850
|
const scope = c.req.query("scope");
|
|
4643
4851
|
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
4852
|
if (!key) return c.json({ error: true, message: "Preference key is required." }, 400);
|
|
4646
4853
|
const getGlobalPreference = async () => {
|
|
4647
4854
|
const globalDoc = await db.findOne({
|
|
@@ -4650,12 +4857,15 @@ function registerRoutes(app, config) {
|
|
|
4650
4857
|
});
|
|
4651
4858
|
return globalDoc ? globalDoc.value : null;
|
|
4652
4859
|
};
|
|
4653
|
-
if (scope === "global") {
|
|
4860
|
+
if (scope === "global" || !user?.collection || !user.sub) {
|
|
4654
4861
|
const globalValue2 = await getGlobalPreference();
|
|
4655
4862
|
return c.json({ key, value: globalValue2 });
|
|
4656
4863
|
}
|
|
4657
4864
|
const doc = await db.findOne({ collection: user.collection, id: user.sub });
|
|
4658
|
-
if (!doc)
|
|
4865
|
+
if (!doc) {
|
|
4866
|
+
const globalValue2 = await getGlobalPreference();
|
|
4867
|
+
return c.json({ key, value: globalValue2 });
|
|
4868
|
+
}
|
|
4659
4869
|
const preferences = typeof doc.__preferences === "object" && doc.__preferences !== null ? doc.__preferences : {};
|
|
4660
4870
|
if (key in preferences) {
|
|
4661
4871
|
return c.json({ key, value: preferences[key] ?? null });
|
|
@@ -4794,6 +5004,10 @@ function registerRoutes(app, config) {
|
|
|
4794
5004
|
app.post(`${path}/media`, (c) => controller.create(c));
|
|
4795
5005
|
app.delete(`${path}/delete-many`, (c) => controller.deleteMany(c));
|
|
4796
5006
|
app.post(`${path}/aggregate`, (c) => controller.aggregate(c));
|
|
5007
|
+
if (collection.views?.length) {
|
|
5008
|
+
app.post(`${path}/views/:viewSlug/actions/:action`, optionalAuth(config), (c) => controller.runViewAction(c));
|
|
5009
|
+
app.post(`${path}/actions/:action`, optionalAuth(config), (c) => controller.runViewAction(c));
|
|
5010
|
+
}
|
|
4797
5011
|
if (collection.audit) {
|
|
4798
5012
|
app.get(`${path}/__audit`, (c) => auditController.findForCollection(c, collection));
|
|
4799
5013
|
}
|
|
@@ -5256,5 +5470,6 @@ export {
|
|
|
5256
5470
|
renderPrometheusMetrics,
|
|
5257
5471
|
resolveObservabilityConfig,
|
|
5258
5472
|
serializeDetailForApi,
|
|
5473
|
+
serializeViewForApi,
|
|
5259
5474
|
shouldSampleRequest
|
|
5260
5475
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dyrected/core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.9.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":""}
|