@sixb/core 0.1.8 → 0.1.10
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/actions/index.js +77 -89
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/run-dispatch.d.ts.map +1 -1
- package/dist/actions/types/context.d.ts +2 -0
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/actions/validation.d.ts +1 -1
- package/dist/actions/validation.d.ts.map +1 -1
- package/dist/actions/worker.js +33 -37
- package/dist/actions/worker.js.map +2 -2
- package/dist/agents/adapters.d.ts +3 -3
- package/dist/agents/{context.d.ts → context/entries.d.ts} +3 -3
- package/dist/agents/context/entries.d.ts.map +1 -0
- package/dist/agents/context/index.d.ts +4 -0
- package/dist/agents/context/index.d.ts.map +1 -0
- package/dist/agents/context/index.js +19 -0
- package/dist/agents/{streams.js.map → context/index.js.map} +1 -1
- package/dist/agents/context-model.d.ts +1 -1
- package/dist/agents/context-model.d.ts.map +1 -1
- package/dist/agents/context-resolution.d.ts +1 -1
- package/dist/agents/context-resolution.d.ts.map +1 -1
- package/dist/agents/index.d.ts +4 -4
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +193 -204
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/message.d.ts +1 -1
- package/dist/agents/message.d.ts.map +1 -1
- package/dist/agents/model-loop.d.ts +2 -0
- package/dist/agents/model-loop.d.ts.map +1 -1
- package/dist/agents/request.d.ts +1 -1
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/streams/index.d.ts +4 -0
- package/dist/agents/streams/index.d.ts.map +1 -0
- package/dist/agents/streams/index.js +20 -0
- package/dist/{chunk-y64skrwp.js.map → agents/streams/index.js.map} +1 -1
- package/dist/agents/streams/internal.d.ts +3 -0
- package/dist/agents/streams/internal.d.ts.map +1 -0
- package/dist/agents/streams/internal.js +40 -0
- package/dist/agents/{context.js.map → streams/internal.js.map} +1 -1
- package/dist/agents/{streams.d.ts → streams/protocol.d.ts} +5 -5
- package/dist/agents/streams/protocol.d.ts.map +1 -0
- package/dist/agents/types.d.ts +1 -1
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/auth/index.d.ts +0 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +96 -108
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/strategy.js +8 -9
- package/dist/auth/strategy.js.map +1 -1
- package/dist/authorization/index.js +51 -56
- package/dist/authorization/index.js.map +1 -1
- package/dist/blob-storage/browser.js +15 -17
- package/dist/blob-storage/browser.js.map +1 -1
- package/dist/blob-storage/index.js +36 -38
- package/dist/blob-storage/index.js.map +1 -1
- package/dist/bootstrap/discovery.d.ts +14 -1
- package/dist/bootstrap/discovery.d.ts.map +1 -1
- package/dist/bootstrap/index.d.ts +2 -2
- package/dist/bootstrap/index.d.ts.map +1 -1
- package/dist/bootstrap/index.js +80 -88
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/broker/in-memory.d.ts +8 -2
- package/dist/broker/in-memory.d.ts.map +1 -1
- package/dist/broker/index.d.ts +4 -2
- package/dist/broker/index.d.ts.map +1 -1
- package/dist/broker/index.js +12 -10
- package/dist/broker/index.js.map +1 -1
- package/dist/broker/retention.d.ts +4 -0
- package/dist/broker/retention.d.ts.map +1 -0
- package/dist/broker/subscriber.d.ts +10 -0
- package/dist/broker/subscriber.d.ts.map +1 -0
- package/dist/broker/types.d.ts +14 -1
- package/dist/broker/types.d.ts.map +1 -1
- package/dist/chunk-0y39rgsb.js +43 -0
- package/dist/{chunk-c15dr03f.js.map → chunk-0y39rgsb.js.map} +2 -2
- package/dist/{chunk-k522z7v6.js → chunk-17kfctj6.js} +16 -11
- package/dist/chunk-17kfctj6.js.map +10 -0
- package/dist/{chunk-ajnan18g.js → chunk-1824gssz.js} +74 -106
- package/dist/chunk-1824gssz.js.map +12 -0
- package/dist/chunk-28ja2cjs.js +602 -0
- package/dist/chunk-28ja2cjs.js.map +18 -0
- package/dist/{chunk-5gd7tpv6.js → chunk-2c4j899j.js} +4 -4
- package/dist/chunk-2c4j899j.js.map +11 -0
- package/dist/{chunk-rv2hkwwa.js → chunk-358caqf5.js} +157 -180
- package/dist/chunk-358caqf5.js.map +12 -0
- package/dist/{chunk-fvt9rjsa.js → chunk-38zv5rkr.js} +4 -4
- package/dist/{chunk-fvt9rjsa.js.map → chunk-38zv5rkr.js.map} +1 -1
- package/dist/{chunk-w3e09qqk.js → chunk-39tqv9hz.js} +24 -24
- package/dist/{chunk-w3e09qqk.js.map → chunk-39tqv9hz.js.map} +2 -2
- package/dist/{chunk-04b07a9q.js → chunk-3bh94gbw.js} +13 -13
- package/dist/{chunk-04b07a9q.js.map → chunk-3bh94gbw.js.map} +2 -2
- package/dist/{chunk-s5y30bc9.js → chunk-3qms4nax.js} +52 -50
- package/dist/{chunk-s5y30bc9.js.map → chunk-3qms4nax.js.map} +5 -5
- package/dist/{chunk-nf4r78r4.js → chunk-5a4a52tq.js} +4 -4
- package/dist/{chunk-nf4r78r4.js.map → chunk-5a4a52tq.js.map} +2 -2
- package/dist/{chunk-wtf06et8.js → chunk-5c7ga8zz.js} +54 -177
- package/dist/chunk-5c7ga8zz.js.map +12 -0
- package/dist/{chunk-rte5sm3z.js → chunk-5hz0fnca.js} +23 -23
- package/dist/{chunk-rte5sm3z.js.map → chunk-5hz0fnca.js.map} +2 -2
- package/dist/{chunk-xajtptbw.js → chunk-5p1v802y.js} +1401 -445
- package/dist/chunk-5p1v802y.js.map +44 -0
- package/dist/chunk-653vwrzr.js +39 -0
- package/dist/chunk-653vwrzr.js.map +10 -0
- package/dist/{chunk-qw9gvjv5.js → chunk-72w2pxk7.js} +13 -13
- package/dist/{chunk-qw9gvjv5.js.map → chunk-72w2pxk7.js.map} +2 -2
- package/dist/chunk-7apz6hg4.js +50 -0
- package/dist/{chunk-jq43kdvk.js.map → chunk-7apz6hg4.js.map} +2 -2
- package/dist/chunk-7bs40fe1.js +218 -0
- package/dist/{chunk-p1rzczbt.js.map → chunk-7bs40fe1.js.map} +3 -3
- package/dist/chunk-7zgecwy1.js +113 -0
- package/dist/chunk-7zgecwy1.js.map +10 -0
- package/dist/{chunk-xhy826cz.js → chunk-85cd7e8c.js} +8 -7
- package/dist/chunk-85cd7e8c.js.map +10 -0
- package/dist/{chunk-pc7ys28c.js → chunk-860dwwy0.js} +29 -29
- package/dist/{chunk-pc7ys28c.js.map → chunk-860dwwy0.js.map} +2 -2
- package/dist/chunk-8vj0rjgs.js +165 -0
- package/dist/chunk-8vj0rjgs.js.map +15 -0
- package/dist/{chunk-7y0f6rf1.js → chunk-92vk7gta.js} +58 -58
- package/dist/chunk-92vk7gta.js.map +10 -0
- package/dist/{chunk-rafagrwr.js → chunk-93csa55g.js} +45 -17
- package/dist/chunk-93csa55g.js.map +11 -0
- package/dist/{chunk-aa2pen2v.js → chunk-976rxdpx.js} +188 -175
- package/dist/{chunk-aa2pen2v.js.map → chunk-976rxdpx.js.map} +2 -2
- package/dist/{chunk-d8qkxt2v.js → chunk-98cw09sw.js} +7 -7
- package/dist/chunk-98cw09sw.js.map +10 -0
- package/dist/{chunk-n4khvw9n.js → chunk-9qsh3p5y.js} +17 -17
- package/dist/{chunk-n4khvw9n.js.map → chunk-9qsh3p5y.js.map} +2 -2
- package/dist/{chunk-4a849fr1.js → chunk-9tc8dxmn.js} +1 -1
- package/dist/{chunk-9nbmsvn5.js → chunk-9vx5e9g1.js} +9 -9
- package/dist/{chunk-9nbmsvn5.js.map → chunk-9vx5e9g1.js.map} +2 -2
- package/dist/{chunk-8m5ejdpn.js → chunk-9x8dybsb.js} +5 -5
- package/dist/chunk-9x8dybsb.js.map +10 -0
- package/dist/chunk-aa6z4a19.js +358 -0
- package/dist/chunk-aa6z4a19.js.map +12 -0
- package/dist/{chunk-3xep5cjx.js → chunk-agbbygvh.js} +104 -86
- package/dist/chunk-agbbygvh.js.map +15 -0
- package/dist/{chunk-2dw777qw.js → chunk-ap0g1g74.js} +37 -82
- package/dist/{chunk-2dw777qw.js.map → chunk-ap0g1g74.js.map} +3 -4
- package/dist/{chunk-v4en4jc2.js → chunk-awbhdqyc.js} +7 -7
- package/dist/{chunk-v4en4jc2.js.map → chunk-awbhdqyc.js.map} +2 -2
- package/dist/{chunk-w9tg6yyb.js → chunk-b0ec55a1.js} +54 -37
- package/dist/chunk-b0ec55a1.js.map +12 -0
- package/dist/{chunk-ka3a2ft3.js → chunk-b19g04jk.js} +12 -12
- package/dist/{chunk-ka3a2ft3.js.map → chunk-b19g04jk.js.map} +2 -2
- package/dist/{chunk-gbejpkex.js → chunk-bn138h9w.js} +27 -28
- package/dist/{chunk-gbejpkex.js.map → chunk-bn138h9w.js.map} +3 -3
- package/dist/{chunk-nx7k8tpr.js → chunk-br3k6qbf.js} +23 -23
- package/dist/{chunk-nx7k8tpr.js.map → chunk-br3k6qbf.js.map} +2 -2
- package/dist/{chunk-dbc80ad7.js → chunk-c5rkjrgp.js} +28 -28
- package/dist/{chunk-dbc80ad7.js.map → chunk-c5rkjrgp.js.map} +2 -2
- package/dist/{chunk-dktq02ne.js → chunk-cqr3acm1.js} +4 -4
- package/dist/{chunk-dktq02ne.js.map → chunk-cqr3acm1.js.map} +2 -2
- package/dist/chunk-d62kjtbg.js +7 -0
- package/dist/{chunk-zcnhxkvd.js.map → chunk-d62kjtbg.js.map} +2 -2
- package/dist/{chunk-74drx9gd.js → chunk-dfm066qg.js} +10 -10
- package/dist/{chunk-74drx9gd.js.map → chunk-dfm066qg.js.map} +2 -2
- package/dist/{chunk-5e3pq99w.js → chunk-dmn70ztd.js} +30 -30
- package/dist/chunk-dmn70ztd.js.map +11 -0
- package/dist/{chunk-p1x242ad.js → chunk-dz5h08xv.js} +175 -175
- package/dist/{chunk-p1x242ad.js.map → chunk-dz5h08xv.js.map} +2 -2
- package/dist/{chunk-p2vqaxkc.js → chunk-e0d1rzef.js} +27 -22
- package/dist/{chunk-p2vqaxkc.js.map → chunk-e0d1rzef.js.map} +3 -3
- package/dist/{chunk-5sz8ta9r.js → chunk-e1c18xjx.js} +52 -52
- package/dist/{chunk-5sz8ta9r.js.map → chunk-e1c18xjx.js.map} +2 -2
- package/dist/{chunk-19jp6g9d.js → chunk-f0rwz2vh.js} +54 -33
- package/dist/chunk-f0rwz2vh.js.map +11 -0
- package/dist/{chunk-2xns679x.js → chunk-f4w3yp4f.js} +171 -36
- package/dist/chunk-f4w3yp4f.js.map +12 -0
- package/dist/{chunk-979ww6b3.js → chunk-fb3feg1e.js} +29 -29
- package/dist/{chunk-979ww6b3.js.map → chunk-fb3feg1e.js.map} +2 -2
- package/dist/{chunk-f26bck4t.js → chunk-ftv470j8.js} +393 -355
- package/dist/{chunk-f26bck4t.js.map → chunk-ftv470j8.js.map} +7 -7
- package/dist/{chunk-4sm0aznx.js → chunk-g00bfdq6.js} +254 -256
- package/dist/{chunk-4sm0aznx.js.map → chunk-g00bfdq6.js.map} +3 -3
- package/dist/{chunk-p03r0h5s.js → chunk-g53f0e4j.js} +76 -202
- package/dist/chunk-g53f0e4j.js.map +15 -0
- package/dist/chunk-g6cke204.js +124 -0
- package/dist/chunk-g6cke204.js.map +10 -0
- package/dist/{chunk-q0k9nc5a.js → chunk-g7knyczr.js} +98 -98
- package/dist/{chunk-q0k9nc5a.js.map → chunk-g7knyczr.js.map} +2 -2
- package/dist/{chunk-51fjndv0.js → chunk-gfdh9kqa.js} +4 -4
- package/dist/{chunk-51fjndv0.js.map → chunk-gfdh9kqa.js.map} +2 -2
- package/dist/{chunk-8tsf6dmc.js → chunk-gqh45d2n.js} +244 -205
- package/dist/chunk-gqh45d2n.js.map +15 -0
- package/dist/chunk-h3v76ams.js +32 -0
- package/dist/{chunk-08m3b6w8.js.map → chunk-h3v76ams.js.map} +2 -2
- package/dist/{chunk-jecn6t54.js → chunk-jgwb25gc.js} +74 -74
- package/dist/{chunk-jecn6t54.js.map → chunk-jgwb25gc.js.map} +2 -2
- package/dist/{chunk-wdage1eb.js → chunk-jmfet9r4.js} +6 -6
- package/dist/{chunk-wdage1eb.js.map → chunk-jmfet9r4.js.map} +2 -2
- package/dist/{chunk-k34z5rvh.js → chunk-kfee1h52.js} +132 -48
- package/dist/chunk-kfee1h52.js.map +13 -0
- package/dist/{chunk-2ab72m2h.js → chunk-m2ca93my.js} +3 -3
- package/dist/{chunk-2ab72m2h.js.map → chunk-m2ca93my.js.map} +2 -2
- package/dist/{chunk-4jjp5k14.js → chunk-mmagke4x.js} +6 -6
- package/dist/{chunk-4jjp5k14.js.map → chunk-mmagke4x.js.map} +2 -2
- package/dist/{chunk-359jm1jw.js → chunk-mrp7k0pw.js} +20 -20
- package/dist/{chunk-359jm1jw.js.map → chunk-mrp7k0pw.js.map} +2 -2
- package/dist/{chunk-h0k55pc7.js → chunk-ms2tmn1k.js} +139 -139
- package/dist/{chunk-h0k55pc7.js.map → chunk-ms2tmn1k.js.map} +2 -2
- package/dist/{chunk-h5vqbfmd.js → chunk-nmbxcaqx.js} +117 -117
- package/dist/{chunk-h5vqbfmd.js.map → chunk-nmbxcaqx.js.map} +3 -3
- package/dist/{chunk-n2w475r0.js → chunk-nt99sxd6.js} +82 -82
- package/dist/{chunk-n2w475r0.js.map → chunk-nt99sxd6.js.map} +3 -3
- package/dist/{chunk-v1xppd0y.js → chunk-p5vcsw9c.js} +60 -60
- package/dist/{chunk-v1xppd0y.js.map → chunk-p5vcsw9c.js.map} +2 -2
- package/dist/{chunk-sbzzr4kx.js → chunk-p6a4npdx.js} +1260 -1289
- package/dist/chunk-p6a4npdx.js.map +58 -0
- package/dist/{chunk-trxxmgnf.js → chunk-pqajwytd.js} +10 -10
- package/dist/{chunk-trxxmgnf.js.map → chunk-pqajwytd.js.map} +3 -3
- package/dist/{chunk-nn0tekr1.js → chunk-pr2h4bv4.js} +33 -33
- package/dist/{chunk-nn0tekr1.js.map → chunk-pr2h4bv4.js.map} +2 -2
- package/dist/{chunk-xwnf87e1.js → chunk-q5gz3g2j.js} +64 -64
- package/dist/{chunk-xwnf87e1.js.map → chunk-q5gz3g2j.js.map} +2 -2
- package/dist/{chunk-5ntny1qx.js → chunk-qf954wje.js} +6 -6
- package/dist/{chunk-5ntny1qx.js.map → chunk-qf954wje.js.map} +2 -2
- package/dist/chunk-qma80ych.js +30 -0
- package/dist/chunk-qma80ych.js.map +11 -0
- package/dist/{chunk-mth82m8t.js → chunk-qyeptdyv.js} +171 -77
- package/dist/chunk-qyeptdyv.js.map +15 -0
- package/dist/{chunk-b49dgvsj.js → chunk-r2y23egw.js} +3 -3
- package/dist/{chunk-b49dgvsj.js.map → chunk-r2y23egw.js.map} +2 -2
- package/dist/{chunk-mwsxn98e.js → chunk-r7fj830t.js} +253 -200
- package/dist/chunk-r7fj830t.js.map +36 -0
- package/dist/{chunk-4rh2m6zg.js → chunk-rb1xx120.js} +13 -13
- package/dist/{chunk-4rh2m6zg.js.map → chunk-rb1xx120.js.map} +2 -2
- package/dist/{chunk-gzasd5b6.js → chunk-rtk71jzp.js} +22 -22
- package/dist/{chunk-gzasd5b6.js.map → chunk-rtk71jzp.js.map} +2 -2
- package/dist/chunk-s3csryxe.js +152 -0
- package/dist/chunk-s3csryxe.js.map +11 -0
- package/dist/chunk-s670k14v.js +60 -0
- package/dist/{chunk-407j3msh.js.map → chunk-s670k14v.js.map} +2 -2
- package/dist/chunk-skz0hst3.js +788 -0
- package/dist/chunk-skz0hst3.js.map +19 -0
- package/dist/{chunk-3z1qec12.js → chunk-t1f4f1ve.js} +107 -64
- package/dist/{chunk-3z1qec12.js.map → chunk-t1f4f1ve.js.map} +3 -3
- package/dist/chunk-v2vcg0w6.js +151 -0
- package/dist/chunk-v2vcg0w6.js.map +11 -0
- package/dist/{chunk-r8jrnexe.js → chunk-v4jbb3rs.js} +4 -4
- package/dist/{chunk-r8jrnexe.js.map → chunk-v4jbb3rs.js.map} +2 -2
- package/dist/{chunk-w1tvjszy.js → chunk-vsj3mdfj.js} +8 -8
- package/dist/{chunk-w1tvjszy.js.map → chunk-vsj3mdfj.js.map} +2 -2
- package/dist/{chunk-9dzba0f2.js → chunk-wjasrj67.js} +8 -8
- package/dist/{chunk-9dzba0f2.js.map → chunk-wjasrj67.js.map} +2 -2
- package/dist/{chunk-1evzqhks.js → chunk-wr8qp979.js} +6 -6
- package/dist/{chunk-1evzqhks.js.map → chunk-wr8qp979.js.map} +2 -2
- package/dist/{chunk-n6jxh8sw.js → chunk-wy0qdqfm.js} +18 -18
- package/dist/{chunk-n6jxh8sw.js.map → chunk-wy0qdqfm.js.map} +2 -2
- package/dist/{chunk-z4ccwbkz.js → chunk-x9v4cx1d.js} +1 -1
- package/dist/{chunk-ry24jbr1.js → chunk-yv79ncbv.js} +10 -10
- package/dist/{chunk-ry24jbr1.js.map → chunk-yv79ncbv.js.map} +2 -2
- package/dist/{chunk-yp8ee62z.js → chunk-z30bv4ga.js} +35 -35
- package/dist/{chunk-yp8ee62z.js.map → chunk-z30bv4ga.js.map} +2 -2
- package/dist/{chunk-8ydjhh27.js → chunk-z3y411fq.js} +11 -7
- package/dist/{chunk-8ydjhh27.js.map → chunk-z3y411fq.js.map} +3 -3
- package/dist/{chunk-9t8f5xfx.js → chunk-z5rnrmz1.js} +10 -10
- package/dist/{chunk-9t8f5xfx.js.map → chunk-z5rnrmz1.js.map} +2 -2
- package/dist/{chunk-96swp2wd.js → chunk-z667z3sg.js} +3 -3
- package/dist/{chunk-96swp2wd.js.map → chunk-z667z3sg.js.map} +2 -2
- package/dist/{chunk-4yqmp43v.js → chunk-z8fx5cgb.js} +12 -12
- package/dist/{chunk-4yqmp43v.js.map → chunk-z8fx5cgb.js.map} +2 -2
- package/dist/{chunk-yt8wphsx.js → chunk-zvx7h87b.js} +3 -3
- package/dist/{chunk-yt8wphsx.js.map → chunk-zvx7h87b.js.map} +2 -2
- package/dist/connectors/connections/authorizations.d.ts.map +1 -1
- package/dist/connectors/connections/contracts.d.ts +3 -0
- package/dist/connectors/connections/contracts.d.ts.map +1 -1
- package/dist/connectors/connections/internal.js +9 -10
- package/dist/connectors/connections/internal.js.map +1 -1
- package/dist/connectors/connections/request.d.ts +3 -1
- package/dist/connectors/connections/request.d.ts.map +1 -1
- package/dist/connectors/connections/runs.d.ts.map +1 -1
- package/dist/connectors/connections/tokens.d.ts.map +1 -1
- package/dist/connectors/connections/validation.d.ts +5 -1
- package/dist/connectors/connections/validation.d.ts.map +1 -1
- package/dist/connectors/types.d.ts +19 -4
- package/dist/connectors/types.d.ts.map +1 -1
- package/dist/datasets/write.js +8 -12
- package/dist/datasets/write.js.map +1 -1
- package/dist/edits/index.js +7 -8
- package/dist/edits/index.js.map +1 -1
- package/dist/error-reporting/internal.js +22 -24
- package/dist/error-reporting/internal.js.map +1 -1
- package/dist/errors/internal.d.ts +1 -1
- package/dist/errors/internal.d.ts.map +1 -1
- package/dist/errors/internal.js +22 -24
- package/dist/errors/internal.js.map +1 -1
- package/dist/errors/redaction.d.ts +8 -0
- package/dist/errors/redaction.d.ts.map +1 -0
- package/dist/errors/types.d.ts +4 -0
- package/dist/errors/types.d.ts.map +1 -1
- package/dist/events/execution.d.ts +1 -1
- package/dist/events/execution.d.ts.map +1 -1
- package/dist/events/index.js +60 -63
- package/dist/events/index.js.map +1 -1
- package/dist/events/scope.js +4 -5
- package/dist/events/scope.js.map +1 -1
- package/dist/events/selectors/index.js +9 -10
- package/dist/events/selectors/index.js.map +1 -1
- package/dist/events/service.d.ts +2 -2
- package/dist/events/service.d.ts.map +1 -1
- package/dist/execution/agent.d.ts +3 -3
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +71 -82
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/durable.d.ts +1 -0
- package/dist/execution/durable.d.ts.map +1 -1
- package/dist/execution/primitive.d.ts +2 -0
- package/dist/execution/primitive.d.ts.map +1 -1
- package/dist/execution/primitive.js +64 -71
- package/dist/execution/primitive.js.map +3 -3
- package/dist/execution/request.d.ts +1 -0
- package/dist/execution/request.d.ts.map +1 -1
- package/dist/execution/request.js +66 -75
- package/dist/execution/request.js.map +3 -3
- package/dist/http/index.js +10 -11
- package/dist/http/index.js.map +1 -1
- package/dist/index.d.ts +17 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +457 -477
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/changes.d.ts +5 -0
- package/dist/lake-storage/changes.d.ts.map +1 -0
- package/dist/lake-storage/in-memory.d.ts +2 -1
- package/dist/lake-storage/in-memory.d.ts.map +1 -1
- package/dist/lake-storage/index.d.ts +2 -1
- package/dist/lake-storage/index.d.ts.map +1 -1
- package/dist/lake-storage/index.js +40 -42
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/lake-storage/types.d.ts +36 -0
- package/dist/lake-storage/types.d.ts.map +1 -1
- package/dist/logging/index.d.ts +3 -4
- package/dist/logging/index.d.ts.map +1 -1
- package/dist/logging/index.js +18 -40
- package/dist/logging/index.js.map +1 -1
- package/dist/logging/internal.d.ts +5 -0
- package/dist/logging/internal.d.ts.map +1 -0
- package/dist/logging/internal.js +43 -0
- package/dist/logging/internal.js.map +9 -0
- package/dist/materialization/index.d.ts +1 -1
- package/dist/materialization/index.d.ts.map +1 -1
- package/dist/materialization/index.js +46 -49
- package/dist/materialization/index.js.map +1 -1
- package/dist/materialization/model.d.ts +12 -1
- package/dist/materialization/model.d.ts.map +1 -1
- package/dist/materializer/index.d.ts +1 -1
- package/dist/materializer/index.d.ts.map +1 -1
- package/dist/materializer/index.js +137 -145
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/materializer.d.ts +5 -1
- package/dist/materializer/materializer.d.ts.map +1 -1
- package/dist/materializer/projections/entry-validator.d.ts +2 -1
- package/dist/materializer/projections/entry-validator.d.ts.map +1 -1
- package/dist/materializer/projections/replace.d.ts.map +1 -1
- package/dist/materializer/projections/source-materialization.d.ts +4 -3
- package/dist/materializer/projections/source-materialization.d.ts.map +1 -1
- package/dist/materializer/shared/normalize.d.ts +2 -1
- package/dist/materializer/shared/normalize.d.ts.map +1 -1
- package/dist/models/errors.d.ts +4 -0
- package/dist/models/errors.d.ts.map +1 -1
- package/dist/models/execution/binding.d.ts +9 -0
- package/dist/models/execution/binding.d.ts.map +1 -0
- package/dist/models/execution/errors.d.ts +9 -0
- package/dist/models/execution/errors.d.ts.map +1 -0
- package/dist/models/execution/index.d.ts +11 -0
- package/dist/models/execution/index.d.ts.map +1 -0
- package/dist/models/execution/index.js +55 -0
- package/dist/models/execution/index.js.map +9 -0
- package/dist/models/execution/model-call-accounting.d.ts +17 -0
- package/dist/models/execution/model-call-accounting.d.ts.map +1 -0
- package/dist/models/execution/model-call-admission.d.ts +47 -0
- package/dist/models/execution/model-call-admission.d.ts.map +1 -0
- package/dist/models/execution/model-call-limits.d.ts +15 -0
- package/dist/models/execution/model-call-limits.d.ts.map +1 -0
- package/dist/models/execution/model-call-recorder.d.ts +40 -0
- package/dist/models/execution/model-call-recorder.d.ts.map +1 -0
- package/dist/models/execution/model-call-recovery.d.ts +12 -0
- package/dist/models/execution/model-call-recovery.d.ts.map +1 -0
- package/dist/models/execution/recovery-queue.d.ts +5 -0
- package/dist/models/execution/recovery-queue.d.ts.map +1 -0
- package/dist/models/execution/types.d.ts +44 -0
- package/dist/models/execution/types.d.ts.map +1 -0
- package/dist/models/execution/usage.d.ts +5 -0
- package/dist/models/execution/usage.d.ts.map +1 -0
- package/dist/models/execution.d.ts +6 -0
- package/dist/models/execution.d.ts.map +1 -0
- package/dist/models/generation-types.d.ts +40 -0
- package/dist/models/generation-types.d.ts.map +1 -0
- package/dist/models/index.d.ts +1 -0
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +42 -43
- package/dist/models/index.js.map +1 -1
- package/dist/models/language-model.d.ts +3 -0
- package/dist/models/language-model.d.ts.map +1 -1
- package/dist/models/output.d.ts +5 -0
- package/dist/models/output.d.ts.map +1 -0
- package/dist/models/resolve.d.ts +4 -0
- package/dist/models/resolve.d.ts.map +1 -0
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +75 -87
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/query/index.js +67 -76
- package/dist/objects/query/index.js.map +1 -1
- package/dist/ontology/index.d.ts +1 -2
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +62 -113
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/internal.d.ts +7 -0
- package/dist/ontology/internal.d.ts.map +1 -1
- package/dist/ontology/internal.js +65 -116
- package/dist/ontology/internal.js.map +3 -4
- package/dist/pipelines/index.js +57 -66
- package/dist/pipelines/index.js.map +1 -1
- package/dist/pipelines/run-dispatch.d.ts.map +1 -1
- package/dist/projections/internal.js +56 -67
- package/dist/projections/internal.js.map +1 -1
- package/dist/projections/run-dispatch.d.ts.map +1 -1
- package/dist/query.d.ts +0 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +11 -15
- package/dist/query.js.map +1 -1
- package/dist/queues/in-memory.d.ts +7 -3
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/queues/index.d.ts +2 -1
- package/dist/queues/index.d.ts.map +1 -1
- package/dist/queues/index.js +6 -7
- package/dist/queues/index.js.map +1 -1
- package/dist/queues/indexed-heap.d.ts +15 -0
- package/dist/queues/indexed-heap.d.ts.map +1 -0
- package/dist/queues/types.d.ts +3 -20
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/rules/internal.js +4 -5
- package/dist/rules/internal.js.map +1 -1
- package/dist/runtime/create.d.ts +2 -1
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +2 -1
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/internal.js +13 -14
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/ontology-mutations.d.ts +3 -1
- package/dist/runtime/ontology-mutations.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +2 -0
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/sandboxes/errors.d.ts +4 -0
- package/dist/sandboxes/errors.d.ts.map +1 -1
- package/dist/sandboxes/index.d.ts +2 -2
- package/dist/sandboxes/index.d.ts.map +1 -1
- package/dist/sandboxes/index.js +14 -13
- package/dist/sandboxes/index.js.map +1 -1
- package/dist/sandboxes/sandbox.d.ts +35 -7
- package/dist/sandboxes/sandbox.d.ts.map +1 -1
- package/dist/scheduler/index.js +9 -10
- package/dist/scheduler/index.js.map +1 -1
- package/dist/schedules/index.js +31 -33
- package/dist/schedules/index.js.map +1 -1
- package/dist/shares/internal.js +46 -54
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/action-runs/failure.js +7 -9
- package/dist/storage/action-runs/failure.js.map +1 -1
- package/dist/storage/action-runs/provider.js +4 -8
- package/dist/storage/action-runs/provider.js.map +1 -1
- package/dist/storage/agents/in-memory.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +26 -30
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +0 -3
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/attribution.d.ts +4 -0
- package/dist/storage/ai-cost/attribution.d.ts.map +1 -0
- package/dist/storage/ai-cost/groups.d.ts +3 -0
- package/dist/storage/ai-cost/groups.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.d.ts +1 -0
- package/dist/storage/ai-cost/provider.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.js +30 -143
- package/dist/storage/ai-cost/provider.js.map +3 -4
- package/dist/storage/ai-cost/types.d.ts +15 -0
- package/dist/storage/ai-cost/types.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +14 -16
- package/dist/storage/ai-limits/enforcement.js.map +1 -1
- package/dist/storage/ai-limits/provider.js +56 -57
- package/dist/storage/ai-limits/provider.js.map +1 -1
- package/dist/storage/auth/in-memory.d.ts +1 -1
- package/dist/storage/auth/in-memory.d.ts.map +1 -1
- package/dist/storage/connector-connections/in-memory.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider/runs.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider.js +35 -37
- package/dist/storage/connector-connections/provider.js.map +3 -3
- package/dist/storage/connector-connections/types.d.ts +3 -2
- package/dist/storage/connector-connections/types.d.ts.map +1 -1
- package/dist/storage/executions/in-memory.d.ts.map +1 -1
- package/dist/storage/executions/provider.d.ts +2 -1
- package/dist/storage/executions/provider.d.ts.map +1 -1
- package/dist/storage/executions/provider.js +14 -11
- package/dist/storage/executions/provider.js.map +3 -3
- package/dist/storage/executions/types.d.ts +6 -2
- package/dist/storage/executions/types.d.ts.map +1 -1
- package/dist/storage/executions/validation.d.ts +2 -0
- package/dist/storage/executions/validation.d.ts.map +1 -1
- package/dist/storage/in-memory/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +7 -8
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +221 -256
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.d.ts +10 -0
- package/dist/storage/internal.d.ts.map +1 -0
- package/dist/storage/internal.js +47 -0
- package/dist/storage/internal.js.map +9 -0
- package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/shared-state.d.ts +15 -2
- package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/source-roots.d.ts +6 -0
- package/dist/storage/ontology/in-memory/source-roots.d.ts.map +1 -0
- package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
- package/dist/storage/ontology/index.d.ts +1 -1
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/provider.d.ts +16 -0
- package/dist/storage/ontology/provider.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +107 -109
- package/dist/storage/ontology/provider.js.map +1 -1
- package/dist/storage/ontology/sources.d.ts +13 -4
- package/dist/storage/ontology/sources.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +18 -19
- package/dist/storage/operation-scope.js.map +1 -1
- package/dist/storage/pipeline-runs/provider.js +4 -6
- package/dist/storage/pipeline-runs/provider.js.map +1 -1
- package/dist/storage/projection-runs/lifecycle.d.ts.map +1 -1
- package/dist/storage/projection-runs/provider.js +66 -70
- package/dist/storage/projection-runs/provider.js.map +1 -1
- package/dist/storage/projection-runs/types.d.ts +2 -0
- package/dist/storage/projection-runs/types.d.ts.map +1 -1
- package/dist/storage/share-grants/provider.js +17 -19
- package/dist/storage/share-grants/provider.js.map +1 -1
- package/dist/storage/share-sessions/provider.js +14 -15
- package/dist/storage/share-sessions/provider.js.map +1 -1
- package/dist/storage/sync-runs/provider.js +4 -6
- package/dist/storage/sync-runs/provider.js.map +1 -1
- package/dist/storage/webhook-runs/provider.js +4 -6
- package/dist/storage/webhook-runs/provider.js.map +1 -1
- package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +13 -21
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/storage/workflow-runs/types.d.ts +0 -3
- package/dist/storage/workflow-runs/types.d.ts.map +1 -1
- package/dist/syncs/index.js +56 -65
- package/dist/syncs/index.js.map +1 -1
- package/dist/syncs/run-dispatch.d.ts.map +1 -1
- package/dist/testing/action-execution.d.ts +4 -1
- package/dist/testing/action-execution.d.ts.map +1 -1
- package/dist/testing/agent-execution.d.ts +1 -0
- package/dist/testing/agent-execution.d.ts.map +1 -1
- package/dist/testing/agent-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-model-call-groups-contract.d.ts.map +1 -1
- package/dist/testing/broker-contract.d.ts.map +1 -1
- package/dist/testing/connector-connection-storage-contract.d.ts.map +1 -1
- package/dist/testing/execution-storage-contract.d.ts.map +1 -1
- package/dist/testing/execution.d.ts +1 -0
- package/dist/testing/execution.d.ts.map +1 -1
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2282 -1662
- package/dist/testing/index.js.map +16 -15
- package/dist/testing/lake-changes-contract.d.ts +6 -0
- package/dist/testing/lake-changes-contract.d.ts.map +1 -0
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
- package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
- package/dist/testing/workflow-execution.d.ts +1 -0
- package/dist/testing/workflow-execution.d.ts.map +1 -1
- package/dist/webhooks/connections.d.ts +6 -0
- package/dist/webhooks/connections.d.ts.map +1 -0
- package/dist/webhooks/index.d.ts +1 -1
- package/dist/webhooks/index.d.ts.map +1 -1
- package/dist/webhooks/internal.d.ts +2 -0
- package/dist/webhooks/internal.d.ts.map +1 -1
- package/dist/webhooks/internal.js +98 -61
- package/dist/webhooks/internal.js.map +4 -3
- package/dist/webhooks/registry.d.ts +1 -1
- package/dist/webhooks/registry.d.ts.map +1 -1
- package/dist/webhooks/types.d.ts +15 -4
- package/dist/webhooks/types.d.ts.map +1 -1
- package/dist/workers/index.js +11 -13
- package/dist/workers/index.js.map +2 -2
- package/dist/workflows/failure.d.ts +2 -0
- package/dist/workflows/failure.d.ts.map +1 -1
- package/dist/workflows/index.js +136 -147
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/request.d.ts.map +1 -1
- package/dist/workflows/run-dispatch.d.ts +3 -2
- package/dist/workflows/run-dispatch.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +2 -0
- package/dist/workflows/types.d.ts.map +1 -1
- package/package.json +48 -30
- package/src/actions/run-dispatch.ts +2 -6
- package/src/actions/types/context.ts +2 -0
- package/src/actions/validation.ts +2 -1
- package/src/agents/adapters.ts +4 -9
- package/src/agents/{context.ts → context/entries.ts} +4 -4
- package/src/agents/context/index.ts +15 -0
- package/src/agents/context-model.ts +1 -1
- package/src/agents/context-resolution.ts +1 -1
- package/src/agents/index.ts +4 -4
- package/src/agents/message.ts +1 -1
- package/src/agents/model-loop.ts +8 -0
- package/src/agents/request.ts +11 -26
- package/src/agents/streams/index.ts +18 -0
- package/src/agents/streams/internal.ts +19 -0
- package/src/agents/{streams.ts → streams/protocol.ts} +5 -5
- package/src/agents/types.ts +1 -1
- package/src/agents/validation.ts +3 -7
- package/src/auth/index.ts +0 -1
- package/src/bootstrap/discovery.ts +81 -24
- package/src/bootstrap/index.ts +8 -1
- package/src/broker/in-memory.ts +104 -39
- package/src/broker/index.ts +4 -1
- package/src/broker/retention.ts +28 -0
- package/src/broker/subscriber.ts +21 -0
- package/src/broker/types.ts +15 -1
- package/src/connectors/builders.ts +0 -6
- package/src/connectors/connections/authorizations.ts +11 -5
- package/src/connectors/connections/contracts.ts +3 -0
- package/src/connectors/connections/request.ts +56 -22
- package/src/connectors/connections/runs.ts +1 -0
- package/src/connectors/connections/tokens.ts +4 -0
- package/src/connectors/connections/validation.ts +91 -5
- package/src/connectors/types.ts +19 -4
- package/src/errors/internal.ts +90 -10
- package/src/errors/redaction.ts +98 -0
- package/src/errors/types.ts +4 -0
- package/src/events/execution.ts +2 -2
- package/src/events/service.ts +3 -3
- package/src/execution/agent.ts +5 -3
- package/src/execution/durable.ts +11 -1
- package/src/execution/primitive.ts +5 -1
- package/src/execution/request.ts +3 -0
- package/src/index.ts +30 -20
- package/src/lake-storage/changes.ts +43 -0
- package/src/lake-storage/in-memory.ts +73 -0
- package/src/lake-storage/index.ts +4 -0
- package/src/lake-storage/types.ts +40 -0
- package/src/logging/index.ts +2 -33
- package/src/logging/internal.ts +43 -0
- package/src/logging/service.ts +1 -1
- package/src/materialization/index.ts +2 -0
- package/src/materialization/model.ts +14 -1
- package/src/materializer/index.ts +2 -0
- package/src/materializer/materializer.ts +10 -0
- package/src/materializer/projections/entry-validator.ts +19 -1
- package/src/materializer/projections/replace.ts +36 -1
- package/src/materializer/projections/source-materialization.ts +26 -6
- package/src/materializer/shared/normalize.ts +1 -1
- package/src/models/errors.ts +12 -0
- package/src/models/execution/binding.ts +29 -0
- package/src/models/execution/errors.ts +18 -0
- package/src/models/execution/index.ts +26 -0
- package/src/models/execution/model-call-accounting.ts +211 -0
- package/src/models/execution/model-call-admission.ts +127 -0
- package/src/models/execution/model-call-limits.ts +135 -0
- package/src/models/execution/model-call-recorder.ts +235 -0
- package/src/models/execution/model-call-recovery.ts +125 -0
- package/src/models/execution/recovery-queue.ts +31 -0
- package/src/models/execution/types.ts +58 -0
- package/src/models/execution/usage.ts +23 -0
- package/src/models/execution.ts +207 -0
- package/src/models/generation-types.ts +50 -0
- package/src/models/index.ts +8 -0
- package/src/models/language-model.ts +3 -0
- package/src/models/output.ts +45 -0
- package/src/models/resolve.ts +27 -0
- package/src/objects/execution.ts +1 -1
- package/src/ontology/index.ts +1 -2
- package/src/ontology/internal.ts +35 -0
- package/src/pipelines/run-dispatch.ts +21 -1
- package/src/projections/run-dispatch.ts +31 -68
- package/src/query.ts +0 -1
- package/src/queues/in-memory.ts +105 -62
- package/src/queues/index.ts +4 -2
- package/src/queues/indexed-heap.ts +74 -0
- package/src/queues/types.ts +6 -25
- package/src/runtime/create.ts +2 -1
- package/src/runtime/host.ts +2 -15
- package/src/runtime/ontology-mutations.ts +4 -0
- package/src/runtime/sixb.ts +4 -0
- package/src/sandboxes/errors.ts +5 -0
- package/src/sandboxes/index.ts +3 -0
- package/src/sandboxes/sandbox.ts +35 -7
- package/src/storage/agents/in-memory.ts +0 -3
- package/src/storage/agents/types.ts +0 -3
- package/src/storage/ai-cost/analytics.ts +1 -1
- package/src/storage/ai-cost/attribution.ts +15 -0
- package/src/storage/ai-cost/groups.ts +5 -1
- package/src/storage/ai-cost/provider.ts +1 -0
- package/src/storage/ai-cost/types.ts +7 -0
- package/src/storage/auth/in-memory.ts +1 -1
- package/src/storage/connector-connections/in-memory.ts +3 -1
- package/src/storage/connector-connections/provider/runs.ts +3 -1
- package/src/storage/connector-connections/types.ts +3 -2
- package/src/storage/executions/in-memory.ts +4 -9
- package/src/storage/executions/provider.ts +4 -0
- package/src/storage/executions/types.ts +6 -2
- package/src/storage/executions/validation.ts +32 -0
- package/src/storage/in-memory/index.ts +16 -1
- package/src/storage/index.ts +4 -29
- package/src/storage/internal.ts +20 -0
- package/src/storage/ontology/in-memory/materializations-state.ts +5 -18
- package/src/storage/ontology/in-memory/materializations.ts +73 -92
- package/src/storage/ontology/in-memory/shared-state.ts +26 -1
- package/src/storage/ontology/in-memory/source-roots.ts +123 -0
- package/src/storage/ontology/in-memory/sources.ts +78 -23
- package/src/storage/ontology/index.ts +1 -0
- package/src/storage/ontology/provider.ts +70 -0
- package/src/storage/ontology/sources.ts +14 -3
- package/src/storage/projection-runs/lifecycle.ts +5 -2
- package/src/storage/projection-runs/types.ts +4 -3
- package/src/storage/workflow-runs/in-memory.ts +0 -2
- package/src/storage/workflow-runs/types.ts +0 -3
- package/src/syncs/run-dispatch.ts +19 -1
- package/src/testing/action-execution.ts +9 -2
- package/src/testing/agent-execution.ts +3 -0
- package/src/testing/agent-storage-contract.ts +0 -5
- package/src/testing/ai-model-call-groups-contract.ts +74 -2
- package/src/testing/broker-contract.ts +95 -0
- package/src/testing/connector-connection-storage-contract.ts +18 -1
- package/src/testing/execution-storage-contract.ts +59 -1
- package/src/testing/execution.ts +6 -0
- package/src/testing/index.ts +1 -0
- package/src/testing/lake-changes-contract.ts +240 -0
- package/src/testing/materializer-storage-contract.ts +172 -1
- package/src/testing/ontology-storage-contract.ts +7 -0
- package/src/testing/projection-run-storage-contract.ts +34 -0
- package/src/testing/workflow-execution.ts +4 -0
- package/src/webhooks/connections.ts +56 -0
- package/src/webhooks/index.ts +2 -0
- package/src/webhooks/internal.ts +2 -0
- package/src/webhooks/registry.ts +3 -4
- package/src/webhooks/types.ts +17 -4
- package/src/workflows/failure.ts +62 -1
- package/src/workflows/request.ts +0 -9
- package/src/workflows/run-dispatch.ts +42 -32
- package/src/workflows/types.ts +2 -0
- package/src/workflows/validation.ts +1 -1
- package/dist/agents/context.d.ts.map +0 -1
- package/dist/agents/context.js +0 -23
- package/dist/agents/streams.d.ts.map +0 -1
- package/dist/agents/streams.js +0 -55
- package/dist/chunk-08m3b6w8.js +0 -32
- package/dist/chunk-19jp6g9d.js.map +0 -11
- package/dist/chunk-2xns679x.js.map +0 -11
- package/dist/chunk-3xep5cjx.js.map +0 -15
- package/dist/chunk-407j3msh.js +0 -60
- package/dist/chunk-4qfkag59.js +0 -1568
- package/dist/chunk-4qfkag59.js.map +0 -20
- package/dist/chunk-5e3pq99w.js.map +0 -11
- package/dist/chunk-5gd7tpv6.js.map +0 -11
- package/dist/chunk-7y0f6rf1.js.map +0 -10
- package/dist/chunk-8m5ejdpn.js.map +0 -10
- package/dist/chunk-8tsf6dmc.js.map +0 -15
- package/dist/chunk-ajnan18g.js.map +0 -12
- package/dist/chunk-c15dr03f.js +0 -43
- package/dist/chunk-d8qkxt2v.js.map +0 -10
- package/dist/chunk-jq43kdvk.js +0 -50
- package/dist/chunk-k34z5rvh.js.map +0 -11
- package/dist/chunk-k522z7v6.js.map +0 -10
- package/dist/chunk-mth82m8t.js.map +0 -14
- package/dist/chunk-mwsxn98e.js.map +0 -36
- package/dist/chunk-p03r0h5s.js.map +0 -16
- package/dist/chunk-p1rzczbt.js +0 -218
- package/dist/chunk-rafagrwr.js.map +0 -11
- package/dist/chunk-rv2hkwwa.js.map +0 -14
- package/dist/chunk-sbzzr4kx.js.map +0 -63
- package/dist/chunk-tpnd31c1.js +0 -242
- package/dist/chunk-tpnd31c1.js.map +0 -11
- package/dist/chunk-w9tg6yyb.js.map +0 -12
- package/dist/chunk-wtf06et8.js.map +0 -14
- package/dist/chunk-xajtptbw.js.map +0 -40
- package/dist/chunk-xhy826cz.js.map +0 -10
- package/dist/chunk-y64skrwp.js +0 -19
- package/dist/chunk-zcnhxkvd.js +0 -7
- package/dist/logging/types.js +0 -27
- package/dist/logging/types.js.map +0 -9
- /package/dist/{chunk-zqqz8052.js → chunk-7n30ybym.js} +0 -0
- /package/dist/{chunk-zqqz8052.js.map → chunk-7n30ybym.js.map} +0 -0
- /package/dist/{chunk-4a849fr1.js.map → chunk-9tc8dxmn.js.map} +0 -0
- /package/dist/{chunk-j1sbhm7p.js → chunk-ey1nk510.js} +0 -0
- /package/dist/{chunk-j1sbhm7p.js.map → chunk-ey1nk510.js.map} +0 -0
- /package/dist/{chunk-z4ccwbkz.js.map → chunk-x9v4cx1d.js.map} +0 -0
|
@@ -1,32 +1,77 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
getInvalidJsonValueReason2
|
|
4
|
+
} from "./chunk-wy0qdqfm.js";
|
|
5
5
|
|
|
6
6
|
// src/broker/errors.ts
|
|
7
|
-
class
|
|
7
|
+
class BrokerError2 extends Error {
|
|
8
8
|
name = "BrokerError";
|
|
9
9
|
constructor(message, options) {
|
|
10
10
|
super(`[Broker] ${message}`, options);
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
class
|
|
14
|
+
class BrokerCursorExpiredError2 extends BrokerError2 {
|
|
15
15
|
name = "BrokerCursorExpiredError";
|
|
16
16
|
}
|
|
17
|
+
// src/broker/retention.ts
|
|
18
|
+
function createStreamRetentionResolver2(configuration = {}) {
|
|
19
|
+
const overrides = new Map;
|
|
20
|
+
for (const [id, retention] of Object.entries(configuration)) {
|
|
21
|
+
if (!id.trim())
|
|
22
|
+
throw new BrokerError2("Retention stream id must not be empty");
|
|
23
|
+
const limits = {};
|
|
24
|
+
for (const field of ["maxAgeMs", "maxRecords", "maxBytes"]) {
|
|
25
|
+
const value = retention[field];
|
|
26
|
+
if (value === undefined)
|
|
27
|
+
continue;
|
|
28
|
+
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
29
|
+
throw new BrokerError2(`Retention ${field} for stream '${id}' must be a positive safe integer`);
|
|
30
|
+
}
|
|
31
|
+
limits[field] = value;
|
|
32
|
+
}
|
|
33
|
+
overrides.set(id, limits);
|
|
34
|
+
}
|
|
35
|
+
return (stream) => {
|
|
36
|
+
const retention = overrides.get(stream.id);
|
|
37
|
+
return retention ? { ...stream, retention: { ...stream.retention, ...retention } } : stream;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// src/broker/subscriber.ts
|
|
42
|
+
async function waitForSubscriber2(result, signal) {
|
|
43
|
+
let onAbort;
|
|
44
|
+
try {
|
|
45
|
+
await new Promise((resolve, reject) => {
|
|
46
|
+
onAbort = resolve;
|
|
47
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
48
|
+
Promise.resolve(result).then(() => resolve(), reject);
|
|
49
|
+
if (signal.aborted)
|
|
50
|
+
resolve();
|
|
51
|
+
});
|
|
52
|
+
} finally {
|
|
53
|
+
if (onAbort)
|
|
54
|
+
signal.removeEventListener("abort", onAbort);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
17
58
|
// src/broker/in-memory.ts
|
|
18
59
|
function cloneValidatedPayload(value) {
|
|
19
60
|
return JSON.parse(JSON.stringify(value));
|
|
20
61
|
}
|
|
21
62
|
|
|
22
|
-
class
|
|
63
|
+
class InMemoryBroker2 {
|
|
23
64
|
scope = "process";
|
|
24
65
|
streams = new Map;
|
|
25
66
|
subscriptions = new Set;
|
|
67
|
+
resolveStream;
|
|
68
|
+
constructor(options = {}) {
|
|
69
|
+
this.resolveStream = createStreamRetentionResolver2(options.streamRetention);
|
|
70
|
+
}
|
|
26
71
|
async ensureStream(params) {
|
|
27
72
|
assertProjectId(params.projectId);
|
|
28
73
|
assertStream(params.stream);
|
|
29
|
-
this.getOrCreateStream(params.projectId, params.stream);
|
|
74
|
+
this.getOrCreateStream(params.projectId, this.resolveStream(params.stream));
|
|
30
75
|
}
|
|
31
76
|
async append(params) {
|
|
32
77
|
assertProjectId(params.projectId);
|
|
@@ -61,7 +106,7 @@ class InMemoryBroker {
|
|
|
61
106
|
storedStream.retainedBytes += stored.reduce((total, record) => total + record.byteSize, 0);
|
|
62
107
|
this.applyRetention(storedStream);
|
|
63
108
|
const records = stored.map(toBrokerRecord);
|
|
64
|
-
this.notify(params.projectId, params.streamId
|
|
109
|
+
this.notify(params.projectId, params.streamId);
|
|
65
110
|
return records;
|
|
66
111
|
}
|
|
67
112
|
async read(params) {
|
|
@@ -116,25 +161,24 @@ class InMemoryBroker {
|
|
|
116
161
|
const storedStream = this.getEnsuredStream(params.projectId, params.streamId);
|
|
117
162
|
this.applyRetention(storedStream);
|
|
118
163
|
this.assertCursorInRetainedRange(storedStream, params.afterCursor);
|
|
164
|
+
const startMode = params.afterCursor !== undefined ? undefined : params.from ?? "latest";
|
|
119
165
|
const subscription = {
|
|
120
166
|
projectId: params.projectId,
|
|
121
167
|
streamId: params.streamId,
|
|
122
168
|
names: params.names,
|
|
123
169
|
keys: params.keys,
|
|
124
|
-
handler
|
|
170
|
+
handler,
|
|
171
|
+
cursor: params.afterCursor ?? (startMode === "earliest" ? BigInt(storedStream.records[0]?.cursor ?? storedStream.nextSequence) - 1n : storedStream.nextSequence - 1n).toString(),
|
|
172
|
+
pumping: false,
|
|
173
|
+
controller: new AbortController
|
|
125
174
|
};
|
|
126
175
|
this.subscriptions.add(subscription);
|
|
127
|
-
const startMode = params.afterCursor !== undefined ? undefined : params.from ?? "latest";
|
|
128
176
|
if (params.afterCursor !== undefined || startMode === "earliest") {
|
|
129
|
-
|
|
130
|
-
afterCursor: params.afterCursor,
|
|
131
|
-
names: params.names,
|
|
132
|
-
keys: params.keys
|
|
133
|
-
}).records;
|
|
134
|
-
this.deliver(subscription, initial);
|
|
177
|
+
this.deliver(subscription);
|
|
135
178
|
}
|
|
136
179
|
return () => {
|
|
137
180
|
this.subscriptions.delete(subscription);
|
|
181
|
+
subscription.controller.abort();
|
|
138
182
|
};
|
|
139
183
|
}
|
|
140
184
|
getOrCreateStream(projectId, stream) {
|
|
@@ -155,7 +199,7 @@ class InMemoryBroker {
|
|
|
155
199
|
getEnsuredStream(projectId, streamId) {
|
|
156
200
|
const storedStream = this.streams.get(streamKey(projectId, streamId));
|
|
157
201
|
if (!storedStream) {
|
|
158
|
-
throw new
|
|
202
|
+
throw new BrokerError2(`stream '${streamId}' has not been ensured for project '${projectId}'. Call ensureStream() before append or subscribe.`);
|
|
159
203
|
}
|
|
160
204
|
return storedStream;
|
|
161
205
|
}
|
|
@@ -214,7 +258,7 @@ class InMemoryBroker {
|
|
|
214
258
|
const firstRecord = storedStream.records[0];
|
|
215
259
|
const firstAvailableSequence = firstRecord === undefined ? storedStream.nextSequence : BigInt(firstRecord.cursor);
|
|
216
260
|
if (requestedNextSequence < firstAvailableSequence) {
|
|
217
|
-
throw new
|
|
261
|
+
throw new BrokerCursorExpiredError2(`afterCursor '${afterCursor}' is outside the retained range for stream '${storedStream.definition.id}'. ` + `The next requested cursor sequence is '${requestedNextSequence}', but the earliest ` + `available cursor sequence is '${firstAvailableSequence}'.`);
|
|
218
262
|
}
|
|
219
263
|
}
|
|
220
264
|
assertTailCursorInRetainedRange(storedStream, beforeCursor) {
|
|
@@ -223,27 +267,50 @@ class InMemoryBroker {
|
|
|
223
267
|
}
|
|
224
268
|
const firstAvailableSequence = BigInt(storedStream.records[0].cursor);
|
|
225
269
|
if (BigInt(beforeCursor) < firstAvailableSequence) {
|
|
226
|
-
throw new
|
|
270
|
+
throw new BrokerCursorExpiredError2(`beforeCursor '${beforeCursor}' is outside the retained range for stream '${storedStream.definition.id}'. ` + `The earliest available cursor sequence is '${firstAvailableSequence}'.`);
|
|
227
271
|
}
|
|
228
272
|
}
|
|
229
|
-
notify(projectId, streamId
|
|
273
|
+
notify(projectId, streamId) {
|
|
230
274
|
for (const subscription of this.subscriptions) {
|
|
231
275
|
if (subscription.projectId !== projectId || subscription.streamId !== streamId) {
|
|
232
276
|
continue;
|
|
233
277
|
}
|
|
234
|
-
this.deliver(subscription
|
|
235
|
-
names: subscription.names,
|
|
236
|
-
keys: subscription.keys
|
|
237
|
-
}).records);
|
|
278
|
+
this.deliver(subscription);
|
|
238
279
|
}
|
|
239
280
|
}
|
|
240
|
-
deliver(subscription
|
|
241
|
-
if (
|
|
281
|
+
deliver(subscription) {
|
|
282
|
+
if (subscription.pumping)
|
|
242
283
|
return;
|
|
284
|
+
subscription.pumping = true;
|
|
285
|
+
this.pump(subscription).catch((error) => {
|
|
286
|
+
this.subscriptions.delete(subscription);
|
|
287
|
+
subscription.controller.abort();
|
|
288
|
+
console.error("[InMemoryBroker] Subscription stopped:", error);
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
async pump(subscription) {
|
|
292
|
+
while (this.subscriptions.has(subscription)) {
|
|
293
|
+
const stream = this.getEnsuredStream(subscription.projectId, subscription.streamId);
|
|
294
|
+
this.applyRetention(stream);
|
|
295
|
+
this.assertCursorInRetainedRange(stream, subscription.cursor);
|
|
296
|
+
const page = this.readForward(stream.records, {
|
|
297
|
+
afterCursor: subscription.cursor,
|
|
298
|
+
names: subscription.names,
|
|
299
|
+
keys: subscription.keys,
|
|
300
|
+
limit: 100
|
|
301
|
+
});
|
|
302
|
+
if (page.records.length === 0) {
|
|
303
|
+
subscription.cursor = page.cursor ?? subscription.cursor;
|
|
304
|
+
subscription.pumping = false;
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
try {
|
|
308
|
+
await waitForSubscriber2(subscription.handler(page.records), subscription.controller.signal);
|
|
309
|
+
} catch {}
|
|
310
|
+
if (!this.subscriptions.has(subscription))
|
|
311
|
+
return;
|
|
312
|
+
subscription.cursor = page.cursor ?? subscription.cursor;
|
|
243
313
|
}
|
|
244
|
-
try {
|
|
245
|
-
subscription.handler(records);
|
|
246
|
-
} catch {}
|
|
247
314
|
}
|
|
248
315
|
readForward(records, filters) {
|
|
249
316
|
const names = filters.names && filters.names.length > 0 ? new Set(filters.names) : undefined;
|
|
@@ -252,11 +319,9 @@ class InMemoryBroker {
|
|
|
252
319
|
const result = [];
|
|
253
320
|
let cursor = filters.afterCursor;
|
|
254
321
|
let stoppedAt = records.length;
|
|
255
|
-
|
|
322
|
+
const start = afterCursor === undefined ? 0 : cursorBoundary(records, afterCursor, true);
|
|
323
|
+
for (let index = start;index < records.length; index += 1) {
|
|
256
324
|
const record = records[index];
|
|
257
|
-
if (afterCursor !== undefined && BigInt(record.cursor) <= afterCursor) {
|
|
258
|
-
continue;
|
|
259
|
-
}
|
|
260
325
|
cursor = record.cursor;
|
|
261
326
|
if (!matchesFilters(record, names, keys)) {
|
|
262
327
|
continue;
|
|
@@ -270,7 +335,7 @@ class InMemoryBroker {
|
|
|
270
335
|
return {
|
|
271
336
|
records: result,
|
|
272
337
|
cursor,
|
|
273
|
-
hasMore: records
|
|
338
|
+
hasMore: hasMatchingRecord(records, stoppedAt, records.length, names, keys)
|
|
274
339
|
};
|
|
275
340
|
}
|
|
276
341
|
readBackward(records, filters) {
|
|
@@ -280,11 +345,9 @@ class InMemoryBroker {
|
|
|
280
345
|
const reversed = [];
|
|
281
346
|
let cursor = filters.beforeCursor;
|
|
282
347
|
let stoppedAt = -1;
|
|
283
|
-
|
|
348
|
+
const start = beforeCursor === undefined ? records.length - 1 : cursorBoundary(records, beforeCursor, false) - 1;
|
|
349
|
+
for (let index = start;index >= 0; index -= 1) {
|
|
284
350
|
const record = records[index];
|
|
285
|
-
if (beforeCursor !== undefined && BigInt(record.cursor) >= beforeCursor) {
|
|
286
|
-
continue;
|
|
287
|
-
}
|
|
288
351
|
cursor = record.cursor;
|
|
289
352
|
if (!matchesFilters(record, names, keys)) {
|
|
290
353
|
continue;
|
|
@@ -298,7 +361,7 @@ class InMemoryBroker {
|
|
|
298
361
|
return {
|
|
299
362
|
records: reversed.reverse(),
|
|
300
363
|
cursor,
|
|
301
|
-
hasMore: stoppedAt >= 0 && records
|
|
364
|
+
hasMore: stoppedAt >= 0 && hasMatchingRecord(records, 0, stoppedAt + 1, names, keys)
|
|
302
365
|
};
|
|
303
366
|
}
|
|
304
367
|
}
|
|
@@ -323,23 +386,23 @@ function utf8Bytes(value) {
|
|
|
323
386
|
}
|
|
324
387
|
function assertProjectId(projectId) {
|
|
325
388
|
if (projectId.trim().length === 0) {
|
|
326
|
-
throw new
|
|
389
|
+
throw new BrokerError2("projectId must be a non-empty string");
|
|
327
390
|
}
|
|
328
391
|
}
|
|
329
392
|
function assertStream(stream) {
|
|
330
393
|
if (stream.id.trim().length === 0) {
|
|
331
|
-
throw new
|
|
394
|
+
throw new BrokerError2("stream.id must be a non-empty string");
|
|
332
395
|
}
|
|
333
396
|
}
|
|
334
397
|
function assertStreamId(streamId) {
|
|
335
398
|
if (streamId.trim().length === 0) {
|
|
336
|
-
throw new
|
|
399
|
+
throw new BrokerError2("streamId must be a non-empty string");
|
|
337
400
|
}
|
|
338
401
|
}
|
|
339
402
|
function assertBrokerPayload(payload) {
|
|
340
|
-
const reason =
|
|
403
|
+
const reason = getInvalidJsonValueReason2(payload, "record.payload");
|
|
341
404
|
if (reason) {
|
|
342
|
-
throw new
|
|
405
|
+
throw new BrokerError2(`record.payload must be a JSON value; ${reason}`);
|
|
343
406
|
}
|
|
344
407
|
}
|
|
345
408
|
function assertCursor(cursor) {
|
|
@@ -348,17 +411,38 @@ function assertCursor(cursor) {
|
|
|
348
411
|
}
|
|
349
412
|
try {
|
|
350
413
|
if (BigInt(cursor) < 0n) {
|
|
351
|
-
throw new
|
|
414
|
+
throw new BrokerError2("cursor must be non-negative");
|
|
352
415
|
}
|
|
353
416
|
} catch (error) {
|
|
354
|
-
if (error instanceof
|
|
417
|
+
if (error instanceof BrokerError2) {
|
|
355
418
|
throw error;
|
|
356
419
|
}
|
|
357
|
-
throw new
|
|
420
|
+
throw new BrokerError2("cursor must be a numeric in-memory broker cursor", {
|
|
358
421
|
cause: error
|
|
359
422
|
});
|
|
360
423
|
}
|
|
361
424
|
}
|
|
362
|
-
|
|
425
|
+
function cursorBoundary(records, cursor, after) {
|
|
426
|
+
let low = 0;
|
|
427
|
+
let high = records.length;
|
|
428
|
+
while (low < high) {
|
|
429
|
+
const middle = Math.floor((low + high) / 2);
|
|
430
|
+
const value = BigInt(records[middle].cursor);
|
|
431
|
+
if (value < cursor || after && value === cursor) {
|
|
432
|
+
low = middle + 1;
|
|
433
|
+
} else {
|
|
434
|
+
high = middle;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
return low;
|
|
438
|
+
}
|
|
439
|
+
function hasMatchingRecord(records, start, end, names, keys) {
|
|
440
|
+
for (let i = start;i < end; i++) {
|
|
441
|
+
if (matchesFilters(records[i], names, keys))
|
|
442
|
+
return true;
|
|
443
|
+
}
|
|
444
|
+
return false;
|
|
445
|
+
}
|
|
446
|
+
export { BrokerError2, BrokerCursorExpiredError2, createStreamRetentionResolver2, waitForSubscriber2, InMemoryBroker2 };
|
|
363
447
|
|
|
364
|
-
//# debugId=
|
|
448
|
+
//# debugId=D0E76D00D94E88F864756E2164756E21
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/broker/errors.ts", "../src/broker/retention.ts", "../src/broker/subscriber.ts", "../src/broker/in-memory.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"export class BrokerError extends Error {\n readonly name: string = \"BrokerError\"\n\n constructor(message: string, options?: ErrorOptions) {\n super(`[Broker] ${message}`, options)\n }\n}\n\n/**\n * Raised when retention has removed the cursor a consumer wants to resume\n * from. Transports use this provider-independent type to request a reset.\n */\nexport class BrokerCursorExpiredError extends BrokerError {\n override readonly name = \"BrokerCursorExpiredError\"\n}\n",
|
|
6
|
+
"import { BrokerError } from \"./errors\"\nimport type { BrokerRetention, BrokerStreamDefinition, BrokerStreamRetention } from \"./types\"\n\n/** Provider utility: snapshot and validate configuration before opening any connections. */\nexport function createStreamRetentionResolver(\n configuration: BrokerStreamRetention = {}\n): (stream: BrokerStreamDefinition) => BrokerStreamDefinition {\n const overrides = new Map<string, BrokerRetention>()\n for (const [id, retention] of Object.entries(configuration)) {\n if (!id.trim()) throw new BrokerError(\"Retention stream id must not be empty\")\n const limits: Partial<Record<keyof BrokerRetention, number>> = {}\n for (const field of [\"maxAgeMs\", \"maxRecords\", \"maxBytes\"] as const) {\n const value = retention[field]\n if (value === undefined) continue\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new BrokerError(\n `Retention ${field} for stream '${id}' must be a positive safe integer`\n )\n }\n limits[field] = value\n }\n overrides.set(id, limits)\n }\n return (stream) => {\n const retention = overrides.get(stream.id)\n return retention ? { ...stream, retention: { ...stream.retention, ...retention } } : stream\n }\n}\n",
|
|
7
|
+
"/**\n * Await one observer delivery, or detach it on unsubscribe. The observer's owner\n * remains responsible for cancellation/draining. Rejections are observed even\n * after detaching; each completed delivery removes its abort listener.\n *\n * Do not race every batch against one permanent stop promise: that retains a\n * promise reaction per batch for the subscription's entire lifetime.\n */\nexport async function waitForSubscriber(result: unknown, signal: AbortSignal): Promise<void> {\n let onAbort: (() => void) | undefined\n try {\n await new Promise<void>((resolve, reject) => {\n onAbort = resolve\n signal.addEventListener(\"abort\", onAbort, { once: true })\n Promise.resolve(result).then(() => resolve(), reject)\n if (signal.aborted) resolve()\n })\n } finally {\n if (onAbort) signal.removeEventListener(\"abort\", onAbort)\n }\n}\n",
|
|
8
|
+
"import { getInvalidJsonValueReason, type JsonValue } from \"../json\"\nimport { BrokerCursorExpiredError, BrokerError } from \"./errors\"\nimport { createStreamRetentionResolver } from \"./retention\"\nimport { waitForSubscriber } from \"./subscriber\"\nimport type {\n Broker,\n BrokerPage,\n BrokerRecord,\n BrokerRecordInput,\n BrokerStreamDefinition,\n BrokerStreamRetention,\n} from \"./types\"\n\n// Payloads are validated by assertBrokerPayload above the call site, so we can\n// skip the redundant validity walk that cloneJsonValue performs.\nfunction cloneValidatedPayload(value: JsonValue): JsonValue {\n return JSON.parse(JSON.stringify(value)) as JsonValue\n}\n\n// Records stored internally carry a numeric publishedAtMs alongside the public\n// ISO publishedAt string so retention sweeps can avoid Date.parse on every\n// record on every append/read.\ninterface StoredRecord extends BrokerRecord {\n readonly publishedAtMs: number\n readonly byteSize: number\n}\n\ninterface StoredStream {\n definition: BrokerStreamDefinition\n nextSequence: bigint\n records: StoredRecord[]\n retainedBytes: number\n}\n\ninterface Subscription {\n readonly projectId: string\n readonly streamId: string\n readonly names?: readonly string[]\n readonly keys?: readonly string[]\n readonly handler: (records: readonly BrokerRecord[]) => unknown\n cursor: string\n pumping: boolean\n readonly controller: AbortController\n}\n\nexport interface InMemoryBrokerOptions {\n readonly streamRetention?: BrokerStreamRetention\n}\n\nexport class InMemoryBroker implements Broker {\n readonly scope = \"process\" as const\n private readonly streams = new Map<string, StoredStream>()\n private readonly subscriptions = new Set<Subscription>()\n private readonly resolveStream: ReturnType<typeof createStreamRetentionResolver>\n\n constructor(options: InMemoryBrokerOptions = {}) {\n this.resolveStream = createStreamRetentionResolver(options.streamRetention)\n }\n\n async ensureStream(params: { projectId: string; stream: BrokerStreamDefinition }): Promise<void> {\n assertProjectId(params.projectId)\n assertStream(params.stream)\n this.getOrCreateStream(params.projectId, this.resolveStream(params.stream))\n }\n\n async append(params: {\n projectId: string\n streamId: string\n records: readonly BrokerRecordInput[]\n }): Promise<readonly BrokerRecord[]> {\n assertProjectId(params.projectId)\n assertStreamId(params.streamId)\n\n if (params.records.length === 0) {\n return []\n }\n\n for (const record of params.records) {\n assertBrokerPayload(record.payload)\n }\n\n const storedStream = this.getEnsuredStream(params.projectId, params.streamId)\n const stored: StoredRecord[] = []\n\n for (const record of params.records) {\n const cursor = storedStream.nextSequence.toString()\n storedStream.nextSequence += 1n\n const publishedAtMs = Date.now()\n const storedRecord = {\n streamId: params.streamId,\n cursor,\n name: record.name,\n key: record.key,\n payload: cloneValidatedPayload(record.payload as JsonValue),\n publishedAt: new Date(publishedAtMs).toISOString(),\n publishedAtMs,\n }\n stored.push({\n ...storedRecord,\n byteSize: utf8Bytes(JSON.stringify(storedRecord)),\n })\n }\n\n storedStream.records.push(...stored)\n storedStream.retainedBytes += stored.reduce((total, record) => total + record.byteSize, 0)\n this.applyRetention(storedStream)\n const records = stored.map(toBrokerRecord)\n this.notify(params.projectId, params.streamId)\n return records\n }\n\n async read(params: {\n projectId: string\n streamId: string\n afterCursor?: string\n limit?: number\n names?: readonly string[]\n keys?: readonly string[]\n }): Promise<BrokerPage> {\n assertProjectId(params.projectId)\n assertStreamId(params.streamId)\n assertCursor(params.afterCursor)\n\n if (params.limit !== undefined && params.limit <= 0) {\n return { records: [], cursor: params.afterCursor, hasMore: false }\n }\n\n const storedStream = this.streams.get(streamKey(params.projectId, params.streamId))\n if (!storedStream) {\n return { records: [], cursor: params.afterCursor, hasMore: false }\n }\n\n this.applyRetention(storedStream)\n this.assertCursorInRetainedRange(storedStream, params.afterCursor)\n return this.readForward(storedStream.records, {\n afterCursor: params.afterCursor,\n limit: params.limit,\n names: params.names,\n keys: params.keys,\n })\n }\n\n async tail(params: {\n projectId: string\n streamId: string\n beforeCursor?: string\n limit?: number\n names?: readonly string[]\n keys?: readonly string[]\n }): Promise<BrokerPage> {\n assertProjectId(params.projectId)\n assertStreamId(params.streamId)\n assertCursor(params.beforeCursor)\n\n if (params.limit !== undefined && params.limit <= 0) {\n return { records: [], cursor: params.beforeCursor, hasMore: false }\n }\n\n const storedStream = this.streams.get(streamKey(params.projectId, params.streamId))\n if (!storedStream) {\n return { records: [], cursor: params.beforeCursor, hasMore: false }\n }\n\n this.applyRetention(storedStream)\n this.assertTailCursorInRetainedRange(storedStream, params.beforeCursor)\n return this.readBackward(storedStream.records, params)\n }\n\n async latestCursor(params: { projectId: string; streamId: string }): Promise<string | undefined> {\n assertProjectId(params.projectId)\n assertStreamId(params.streamId)\n\n const storedStream = this.streams.get(streamKey(params.projectId, params.streamId))\n if (!storedStream) {\n return undefined\n }\n\n this.applyRetention(storedStream)\n return storedStream.records.at(-1)?.cursor\n }\n\n async subscribe(\n params: {\n projectId: string\n streamId: string\n from?: \"latest\" | \"earliest\"\n afterCursor?: string\n names?: readonly string[]\n keys?: readonly string[]\n },\n handler: (records: readonly BrokerRecord[]) => unknown\n ): Promise<() => void> {\n assertProjectId(params.projectId)\n assertStreamId(params.streamId)\n assertCursor(params.afterCursor)\n const storedStream = this.getEnsuredStream(params.projectId, params.streamId)\n\n // Retention may have trimmed past the caller's cursor. Reject that here rather than let\n // `readForward` skip silently to the oldest retained record: a resuming subscriber would be\n // fast-forwarded over the gap and would believe it had seen everything. `read` and `tail`\n // already reject it, and so does the Redis provider, so this keeps the three consistent.\n // Checked before the subscription is registered so a throw cannot leave one behind.\n this.applyRetention(storedStream)\n this.assertCursorInRetainedRange(storedStream, params.afterCursor)\n\n const startMode = params.afterCursor !== undefined ? undefined : (params.from ?? \"latest\")\n const subscription: Subscription = {\n projectId: params.projectId,\n streamId: params.streamId,\n names: params.names,\n keys: params.keys,\n handler,\n cursor:\n params.afterCursor ??\n (startMode === \"earliest\"\n ? BigInt(storedStream.records[0]?.cursor ?? storedStream.nextSequence) - 1n\n : storedStream.nextSequence - 1n\n ).toString(),\n pumping: false,\n controller: new AbortController(),\n }\n this.subscriptions.add(subscription)\n\n if (params.afterCursor !== undefined || startMode === \"earliest\") {\n this.deliver(subscription)\n }\n\n return () => {\n this.subscriptions.delete(subscription)\n subscription.controller.abort()\n }\n }\n\n private getOrCreateStream(projectId: string, stream: BrokerStreamDefinition): StoredStream {\n const key = streamKey(projectId, stream.id)\n let storedStream = this.streams.get(key)\n if (!storedStream) {\n storedStream = {\n definition: stream,\n nextSequence: 1n,\n records: [],\n retainedBytes: 0,\n }\n this.streams.set(key, storedStream)\n }\n this.applyRetention(storedStream)\n return storedStream\n }\n\n private getEnsuredStream(projectId: string, streamId: string): StoredStream {\n const storedStream = this.streams.get(streamKey(projectId, streamId))\n if (!storedStream) {\n throw new BrokerError(\n `stream '${streamId}' has not been ensured for project '${projectId}'. Call ensureStream() before append or subscribe.`\n )\n }\n return storedStream\n }\n\n private applyRetention(storedStream: StoredStream): void {\n const { retention } = storedStream.definition\n if (!retention) {\n return\n }\n\n let removeCount = 0\n const records = storedStream.records\n\n if (retention.maxAgeMs !== undefined) {\n if (retention.maxAgeMs <= 0) {\n removeCount = records.length\n } else {\n const oldestAllowed = Date.now() - retention.maxAgeMs\n // Records are appended in chronological order, so we only need to find\n // the first record that is still in range and slice off the prefix —\n // avoids walking the entire retained set on every sweep.\n let firstInRange = 0\n while (\n firstInRange < records.length &&\n records[firstInRange].publishedAtMs < oldestAllowed\n ) {\n firstInRange += 1\n }\n removeCount = Math.max(removeCount, firstInRange)\n }\n }\n\n if (retention.maxRecords !== undefined) {\n if (retention.maxRecords <= 0) {\n removeCount = records.length\n } else if (records.length - removeCount > retention.maxRecords) {\n removeCount = records.length - retention.maxRecords\n }\n }\n\n if (retention.maxBytes !== undefined) {\n if (retention.maxBytes <= 0) {\n removeCount = records.length\n } else {\n let bytes = storedStream.retainedBytes\n for (let index = 0; index < removeCount; index += 1) {\n bytes -= records[index]!.byteSize\n }\n while (removeCount < records.length && bytes > retention.maxBytes) {\n bytes -= records[removeCount]!.byteSize\n removeCount += 1\n }\n }\n }\n\n if (removeCount > 0) {\n for (let index = 0; index < removeCount; index += 1) {\n storedStream.retainedBytes -= records[index]!.byteSize\n }\n storedStream.records = records.slice(removeCount)\n }\n }\n\n private assertCursorInRetainedRange(\n storedStream: StoredStream,\n afterCursor: string | undefined\n ): void {\n if (afterCursor === undefined) {\n return\n }\n\n const requestedNextSequence = BigInt(afterCursor) + 1n\n const firstRecord = storedStream.records[0]\n const firstAvailableSequence =\n firstRecord === undefined ? storedStream.nextSequence : BigInt(firstRecord.cursor)\n\n if (requestedNextSequence < firstAvailableSequence) {\n throw new BrokerCursorExpiredError(\n `afterCursor '${afterCursor}' is outside the retained range for stream '${storedStream.definition.id}'. ` +\n `The next requested cursor sequence is '${requestedNextSequence}', but the earliest ` +\n `available cursor sequence is '${firstAvailableSequence}'.`\n )\n }\n }\n\n private assertTailCursorInRetainedRange(\n storedStream: StoredStream,\n beforeCursor: string | undefined\n ): void {\n if (beforeCursor === undefined || storedStream.records.length === 0) {\n return\n }\n const firstAvailableSequence = BigInt(storedStream.records[0]!.cursor)\n if (BigInt(beforeCursor) < firstAvailableSequence) {\n throw new BrokerCursorExpiredError(\n `beforeCursor '${beforeCursor}' is outside the retained range for stream '${storedStream.definition.id}'. ` +\n `The earliest available cursor sequence is '${firstAvailableSequence}'.`\n )\n }\n }\n\n private notify(projectId: string, streamId: string): void {\n for (const subscription of this.subscriptions) {\n if (subscription.projectId !== projectId || subscription.streamId !== streamId) {\n continue\n }\n this.deliver(subscription)\n }\n }\n\n private deliver(subscription: Subscription): void {\n if (subscription.pumping) return\n subscription.pumping = true\n // Only the retained stream holds the backlog, never a second queue of cloned batches.\n void this.pump(subscription).catch((error) => {\n this.subscriptions.delete(subscription)\n subscription.controller.abort()\n console.error(\"[InMemoryBroker] Subscription stopped:\", error)\n })\n }\n\n private async pump(subscription: Subscription): Promise<void> {\n while (this.subscriptions.has(subscription)) {\n const stream = this.getEnsuredStream(subscription.projectId, subscription.streamId)\n this.applyRetention(stream)\n this.assertCursorInRetainedRange(stream, subscription.cursor)\n const page = this.readForward(stream.records, {\n afterCursor: subscription.cursor,\n names: subscription.names,\n keys: subscription.keys,\n limit: 100,\n })\n if (page.records.length === 0) {\n subscription.cursor = page.cursor ?? subscription.cursor\n // Clear synchronously: an append must not miss the wake-up between return and finally.\n subscription.pumping = false\n return\n }\n try {\n await waitForSubscriber(subscription.handler(page.records), subscription.controller.signal)\n } catch {\n // Preserve observer error isolation, including rejected async callbacks.\n }\n if (!this.subscriptions.has(subscription)) return\n subscription.cursor = page.cursor ?? subscription.cursor\n }\n }\n\n private readForward(\n records: readonly StoredRecord[],\n filters: {\n afterCursor?: string\n limit?: number\n names?: readonly string[]\n keys?: readonly string[]\n }\n ): BrokerPage {\n const names = filters.names && filters.names.length > 0 ? new Set(filters.names) : undefined\n const keys = filters.keys && filters.keys.length > 0 ? new Set(filters.keys) : undefined\n const afterCursor = filters.afterCursor ? BigInt(filters.afterCursor) : undefined\n const result: BrokerRecord[] = []\n let cursor = filters.afterCursor\n let stoppedAt = records.length\n\n const start = afterCursor === undefined ? 0 : cursorBoundary(records, afterCursor, true)\n for (let index = start; index < records.length; index += 1) {\n const record = records[index]!\n cursor = record.cursor\n if (!matchesFilters(record, names, keys)) {\n continue\n }\n result.push(toBrokerRecord(record))\n if (filters.limit !== undefined && result.length >= filters.limit) {\n stoppedAt = index + 1\n break\n }\n }\n\n return {\n records: result,\n cursor,\n hasMore: hasMatchingRecord(records, stoppedAt, records.length, names, keys),\n }\n }\n\n private readBackward(\n records: readonly StoredRecord[],\n filters: {\n beforeCursor?: string\n limit?: number\n names?: readonly string[]\n keys?: readonly string[]\n }\n ): BrokerPage {\n const names = filters.names && filters.names.length > 0 ? new Set(filters.names) : undefined\n const keys = filters.keys && filters.keys.length > 0 ? new Set(filters.keys) : undefined\n const beforeCursor = filters.beforeCursor ? BigInt(filters.beforeCursor) : undefined\n const reversed: BrokerRecord[] = []\n let cursor = filters.beforeCursor\n let stoppedAt = -1\n\n const start =\n beforeCursor === undefined\n ? records.length - 1\n : cursorBoundary(records, beforeCursor, false) - 1\n for (let index = start; index >= 0; index -= 1) {\n const record = records[index]!\n cursor = record.cursor\n if (!matchesFilters(record, names, keys)) {\n continue\n }\n reversed.push(toBrokerRecord(record))\n if (filters.limit !== undefined && reversed.length >= filters.limit) {\n stoppedAt = index - 1\n break\n }\n }\n\n return {\n records: reversed.reverse(),\n cursor,\n hasMore: stoppedAt >= 0 && hasMatchingRecord(records, 0, stoppedAt + 1, names, keys),\n }\n }\n}\n\nfunction matchesFilters(\n record: BrokerRecord,\n names: ReadonlySet<string> | undefined,\n keys: ReadonlySet<string> | undefined\n): boolean {\n return (\n (!names || (!!record.name && names.has(record.name))) &&\n (!keys || (!!record.key && keys.has(record.key)))\n )\n}\n\nfunction streamKey(projectId: string, streamId: string): string {\n return `${projectId}\\0${streamId}`\n}\n\nfunction toBrokerRecord(record: StoredRecord): BrokerRecord {\n return {\n streamId: record.streamId,\n cursor: record.cursor,\n name: record.name,\n key: record.key,\n payload: record.payload,\n publishedAt: record.publishedAt,\n }\n}\n\nfunction utf8Bytes(value: string): number {\n return new TextEncoder().encode(value).byteLength\n}\n\nfunction assertProjectId(projectId: string): void {\n if (projectId.trim().length === 0) {\n throw new BrokerError(\"projectId must be a non-empty string\")\n }\n}\n\nfunction assertStream(stream: BrokerStreamDefinition): void {\n if (stream.id.trim().length === 0) {\n throw new BrokerError(\"stream.id must be a non-empty string\")\n }\n}\n\nfunction assertStreamId(streamId: string): void {\n if (streamId.trim().length === 0) {\n throw new BrokerError(\"streamId must be a non-empty string\")\n }\n}\n\nfunction assertBrokerPayload(payload: unknown): void {\n const reason = getInvalidJsonValueReason(payload, \"record.payload\")\n if (reason) {\n throw new BrokerError(`record.payload must be a JSON value; ${reason}`)\n }\n}\n\nfunction assertCursor(cursor: string | undefined): void {\n if (cursor === undefined) {\n return\n }\n\n try {\n if (BigInt(cursor) < 0n) {\n throw new BrokerError(\"cursor must be non-negative\")\n }\n } catch (error) {\n if (error instanceof BrokerError) {\n throw error\n }\n throw new BrokerError(\"cursor must be a numeric in-memory broker cursor\", {\n cause: error,\n })\n }\n}\n\nfunction cursorBoundary(records: readonly StoredRecord[], cursor: bigint, after: boolean): number {\n // Retained cursors remain sorted even after retention removes older records.\n let low = 0\n let high = records.length\n while (low < high) {\n const middle = Math.floor((low + high) / 2)\n const value = BigInt(records[middle]!.cursor)\n if (value < cursor || (after && value === cursor)) {\n low = middle + 1\n } else {\n high = middle\n }\n }\n return low\n}\n\nfunction hasMatchingRecord(\n records: readonly StoredRecord[],\n start: number,\n end: number,\n names?: ReadonlySet<string>,\n keys?: ReadonlySet<string>\n): boolean {\n for (let i = start; i < end; i++) {\n if (matchesFilters(records[i]!, names, keys)) return true\n }\n return false\n}\n"
|
|
9
|
+
],
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "D0E76D00D94E88F864756E2164756E21",
|
|
12
|
+
"names": []
|
|
13
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
// src/rules/dependencies.ts
|
|
3
|
-
function
|
|
3
|
+
function deriveRuleEventDependencies2(rule) {
|
|
4
4
|
const dependencies = [
|
|
5
5
|
{
|
|
6
6
|
type: "object.created",
|
|
@@ -54,6 +54,6 @@ function collectLinkPredicateIds(predicate, target, seen) {
|
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
export {
|
|
57
|
+
export { deriveRuleEventDependencies2 };
|
|
58
58
|
|
|
59
|
-
//# debugId=
|
|
59
|
+
//# debugId=BB76E1214CE52C6A64756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { RuleDefinition, RuleEventDependency, RulePredicate } from \"./types\"\n\n/**\n * Derive the event surface that can change whether a rule is active.\n *\n * Every object-scoped rule depends on object mutations for its subject type.\n * Link predicates also depend on link mutations for the referenced links.\n */\nexport function deriveRuleEventDependencies(rule: RuleDefinition): readonly RuleEventDependency[] {\n const dependencies: RuleEventDependency[] = [\n {\n type: \"object.created\",\n objectTypeId: rule.subject.objectTypeId,\n },\n {\n type: \"object.updated\",\n objectTypeId: rule.subject.objectTypeId,\n },\n {\n type: \"object.deleted\",\n objectTypeId: rule.subject.objectTypeId,\n },\n ]\n\n const linkIds: string[] = []\n const seenLinkIds = new Set<string>()\n collectLinkPredicateIds(rule.predicate, linkIds, seenLinkIds)\n\n for (const linkId of linkIds) {\n dependencies.push(\n {\n type: \"link.created\",\n sourceTypeId: rule.subject.objectTypeId,\n linkId,\n },\n {\n type: \"link.updated\",\n sourceTypeId: rule.subject.objectTypeId,\n linkId,\n },\n {\n type: \"link.deleted\",\n sourceTypeId: rule.subject.objectTypeId,\n linkId,\n }\n )\n }\n\n return dependencies\n}\n\n/** Collect unique link ids in first-seen order so dependency output is stable. */\nfunction collectLinkPredicateIds(\n predicate: RulePredicate,\n target: string[],\n seen: Set<string>\n): void {\n if (predicate.kind === \"link\") {\n if (!seen.has(predicate.linkId)) {\n seen.add(predicate.linkId)\n target.push(predicate.linkId)\n }\n return\n }\n\n if (predicate.kind === \"not\") {\n collectLinkPredicateIds(predicate.predicate, target, seen)\n return\n }\n\n if (predicate.kind === \"all\" || predicate.kind === \"any\") {\n for (const child of predicate.predicates) {\n collectLinkPredicateIds(child, target, seen)\n }\n }\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": ";;AAQO,SAAS,
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;AAQO,SAAS,4BAA2B,CAAC,MAAsD;AAAA,EAChG,MAAM,eAAsC;AAAA,IAC1C;AAAA,MACE,MAAM;AAAA,MACN,cAAc,KAAK,QAAQ;AAAA,IAC7B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,cAAc,KAAK,QAAQ;AAAA,IAC7B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,cAAc,KAAK,QAAQ;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAM,UAAoB,CAAC;AAAA,EAC3B,MAAM,cAAc,IAAI;AAAA,EACxB,wBAAwB,KAAK,WAAW,SAAS,WAAW;AAAA,EAE5D,WAAW,UAAU,SAAS;AAAA,IAC5B,aAAa,KACX;AAAA,MACE,MAAM;AAAA,MACN,cAAc,KAAK,QAAQ;AAAA,MAC3B;AAAA,IACF,GACA;AAAA,MACE,MAAM;AAAA,MACN,cAAc,KAAK,QAAQ;AAAA,MAC3B;AAAA,IACF,GACA;AAAA,MACE,MAAM;AAAA,MACN,cAAc,KAAK,QAAQ;AAAA,MAC3B;AAAA,IACF,CACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAIT,SAAS,uBAAuB,CAC9B,WACA,QACA,MACM;AAAA,EACN,IAAI,UAAU,SAAS,QAAQ;AAAA,IAC7B,IAAI,CAAC,KAAK,IAAI,UAAU,MAAM,GAAG;AAAA,MAC/B,KAAK,IAAI,UAAU,MAAM;AAAA,MACzB,OAAO,KAAK,UAAU,MAAM;AAAA,IAC9B;AAAA,IACA;AAAA,EACF;AAAA,EAEA,IAAI,UAAU,SAAS,OAAO;AAAA,IAC5B,wBAAwB,UAAU,WAAW,QAAQ,IAAI;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,IAAI,UAAU,SAAS,SAAS,UAAU,SAAS,OAAO;AAAA,IACxD,WAAW,SAAS,UAAU,YAAY;AAAA,MACxC,wBAAwB,OAAO,QAAQ,IAAI;AAAA,IAC7C;AAAA,EACF;AAAA;",
|
|
8
|
+
"debugId": "BB76E1214CE52C6A64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
findPrimitiveRunExecution
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ey1nk510.js";
|
|
5
5
|
|
|
6
6
|
// src/storage/pipeline-runs/errors.ts
|
|
7
|
-
class
|
|
7
|
+
class PipelineRunError2 extends Error {
|
|
8
8
|
name = "PipelineRunError";
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
// src/storage/pipeline-runs/provider.ts
|
|
12
|
-
async function
|
|
12
|
+
async function assertPipelineRunExecution2(input) {
|
|
13
13
|
const execution = await findPrimitiveRunExecution({
|
|
14
14
|
executions: input.executions,
|
|
15
15
|
projectId: input.projectId,
|
|
@@ -18,10 +18,10 @@ async function assertPipelineRunExecution(input) {
|
|
|
18
18
|
sourceTypes: ["execution", "schedule", "event"]
|
|
19
19
|
});
|
|
20
20
|
if (!execution) {
|
|
21
|
-
throw new
|
|
21
|
+
throw new PipelineRunError2(`[Sixb] Execution '${input.executionId}' does not authorize Pipeline run '${input.runId}'.`);
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
export {
|
|
25
|
+
export { PipelineRunError2, assertPipelineRunExecution2 };
|
|
26
26
|
|
|
27
|
-
//# debugId=
|
|
27
|
+
//# debugId=541A905468003F0364756E2164756E21
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"/**\n * Base error for pipeline-run storage operations.\n */\nexport class PipelineRunError extends Error {\n readonly name = \"PipelineRunError\"\n}\n",
|
|
6
6
|
"import type { ExecutionStorage } from \"../executions\"\nimport { findPrimitiveRunExecution } from \"../executions/run-link\"\nimport { PipelineRunError } from \"./errors\"\n\n/** Validate the semantic link between a durable Pipeline run and its immutable execution. */\nexport async function assertPipelineRunExecution(input: {\n readonly executions: ExecutionStorage\n readonly projectId: string\n readonly executionId: string\n readonly runId: string\n readonly pipelineId: string\n}): Promise<void> {\n const execution = await findPrimitiveRunExecution({\n executions: input.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n primitive: { kind: \"pipeline\", id: input.pipelineId, runId: input.runId },\n sourceTypes: [\"execution\", \"schedule\", \"event\"],\n })\n if (!execution) {\n throw new PipelineRunError(\n `[Sixb] Execution '${input.executionId}' does not authorize Pipeline run '${input.runId}'.`\n )\n }\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": ";;;;;;AAGO,MAAM,
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": ";;;;;;AAGO,MAAM,0BAAyB,MAAM;AAAA,EACjC,OAAO;AAClB;;;ACAA,eAAsB,2BAA0B,CAAC,OAM/B;AAAA,EAChB,MAAM,YAAY,MAAM,0BAA0B;AAAA,IAChD,YAAY,MAAM;AAAA,IAClB,WAAW,MAAM;AAAA,IACjB,aAAa,MAAM;AAAA,IACnB,WAAW,EAAE,MAAM,YAAY,IAAI,MAAM,YAAY,OAAO,MAAM,MAAM;AAAA,IACxE,aAAa,CAAC,aAAa,YAAY,OAAO;AAAA,EAChD,CAAC;AAAA,EACD,IAAI,CAAC,WAAW;AAAA,IACd,MAAM,IAAI,kBACR,qBAAqB,MAAM,iDAAiD,MAAM,SACpF;AAAA,EACF;AAAA;",
|
|
9
|
+
"debugId": "541A905468003F0364756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
getDatasetRowValidationError2
|
|
4
|
+
} from "./chunk-860dwwy0.js";
|
|
5
5
|
import {
|
|
6
|
-
|
|
7
|
-
} from "./chunk-
|
|
6
|
+
getDatasetMergeChangeValidationError2
|
|
7
|
+
} from "./chunk-9qsh3p5y.js";
|
|
8
8
|
import {
|
|
9
|
-
|
|
10
|
-
} from "./chunk-
|
|
9
|
+
isFileRef2
|
|
10
|
+
} from "./chunk-h3v76ams.js";
|
|
11
11
|
import {
|
|
12
12
|
isPlainRecord
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-wy0qdqfm.js";
|
|
14
14
|
|
|
15
15
|
// src/datasets/write.ts
|
|
16
|
-
async function
|
|
16
|
+
async function writeDataset2(input) {
|
|
17
17
|
const { lakeStorage, dataset, signal } = input;
|
|
18
18
|
let abortWrite;
|
|
19
19
|
let rowsRead = 0;
|
|
@@ -27,18 +27,18 @@ async function writeDataset(input) {
|
|
|
27
27
|
throwIfAborted(signal);
|
|
28
28
|
const reconcileSnapshot = dataset.sequenceBy !== undefined && input.mode === "snapshot";
|
|
29
29
|
if (input.mode === "merge" || reconcileSnapshot) {
|
|
30
|
-
const
|
|
30
|
+
const session = await lakeStorage.beginMerge({
|
|
31
31
|
dataset,
|
|
32
32
|
expectedLatestVersionId: input.expectedLatestVersionId,
|
|
33
33
|
producer: input.producer
|
|
34
34
|
});
|
|
35
|
-
abortWrite = () =>
|
|
35
|
+
abortWrite = () => session.abort();
|
|
36
36
|
throwIfAborted(signal);
|
|
37
|
-
const
|
|
37
|
+
const values = await input.readValues();
|
|
38
38
|
throwIfAborted(signal);
|
|
39
|
-
await
|
|
39
|
+
await session.writeChanges(validatedValues(input, values, async (value, itemIndex) => reconcileSnapshot ? { kind: "upsert", row: await validateRow(value, input, itemIndex) } : validateMergeChange(value, input, itemIndex), onRead));
|
|
40
40
|
throwIfAborted(signal);
|
|
41
|
-
const result = await
|
|
41
|
+
const result = await session.commit({
|
|
42
42
|
commitMessage: input.commitMessage,
|
|
43
43
|
createInitialVersion: reconcileSnapshot,
|
|
44
44
|
retryOnConflict: dataset.sequenceBy !== undefined,
|
|
@@ -57,9 +57,9 @@ async function writeDataset(input) {
|
|
|
57
57
|
await session.writeRows(validatedValues(input, values, (value, itemIndex) => validateRow(value, input, itemIndex), onRead));
|
|
58
58
|
throwIfAborted(signal);
|
|
59
59
|
if (rowsRead === 0 && input.mode === "append") {
|
|
60
|
-
const
|
|
60
|
+
const version = await lakeStorage.getLatestVersion(dataset.id);
|
|
61
61
|
await session.abort();
|
|
62
|
-
return { outcome: "unchanged", version
|
|
62
|
+
return { outcome: "unchanged", version, rowsRead };
|
|
63
63
|
}
|
|
64
64
|
const { outcome, ...version } = await session.commit({
|
|
65
65
|
expectedLatestVersionId: input.expectedLatestVersionId,
|
|
@@ -93,7 +93,7 @@ async function validateRow(value, input, itemIndex) {
|
|
|
93
93
|
if (!isPlainRecord(value)) {
|
|
94
94
|
throw new Error(`${sourceLabel(input)} returned an invalid row at item ${itemIndex}. Dataset rows must be plain objects.`);
|
|
95
95
|
}
|
|
96
|
-
const validationError =
|
|
96
|
+
const validationError = getDatasetRowValidationError2(value, input.dataset);
|
|
97
97
|
if (validationError) {
|
|
98
98
|
throw new Error(`${sourceLabel(input)} returned an invalid row at item ${itemIndex}. ${validationError}`);
|
|
99
99
|
}
|
|
@@ -101,7 +101,7 @@ async function validateRow(value, input, itemIndex) {
|
|
|
101
101
|
return value;
|
|
102
102
|
}
|
|
103
103
|
async function validateMergeChange(value, input, itemIndex) {
|
|
104
|
-
const validationError =
|
|
104
|
+
const validationError = getDatasetMergeChangeValidationError2(value, input.dataset);
|
|
105
105
|
if (validationError) {
|
|
106
106
|
throw new Error(`${sourceLabel(input)} returned an invalid merge change at item ${itemIndex}. ${validationError}`);
|
|
107
107
|
}
|
|
@@ -115,7 +115,7 @@ async function verifyRowFileRefs(row, input, itemIndex) {
|
|
|
115
115
|
if (column.type !== "fileRef")
|
|
116
116
|
continue;
|
|
117
117
|
const value = row[column.name];
|
|
118
|
-
if (
|
|
118
|
+
if (isFileRef2(value))
|
|
119
119
|
await verifyFileRef(value, input, column.name, itemIndex);
|
|
120
120
|
}
|
|
121
121
|
}
|
|
@@ -142,6 +142,6 @@ function throwIfAborted(signal) {
|
|
|
142
142
|
throw error;
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
export {
|
|
145
|
+
export { writeDataset2 };
|
|
146
146
|
|
|
147
|
-
//# debugId=
|
|
147
|
+
//# debugId=403BB5EF31615BCA64756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { BlobStorage, FileRef } from \"../blob-storage\"\nimport { isFileRef } from \"../blob-storage\"\nimport { isPlainRecord } from \"../json\"\nimport type { DatasetMergeCommitResult } from \"../lake-storage/merge\"\nimport { getDatasetMergeChangeValidationError } from \"../lake-storage/merge-validation\"\nimport type {\n DatasetProducer,\n DatasetRow,\n DatasetWriteMode,\n LakeStorage,\n} from \"../lake-storage/types\"\nimport type { MergeChange } from \"./changes\"\nimport type { DatasetDefinition } from \"./types\"\nimport { getDatasetRowValidationError } from \"./validation\"\n\nexport interface DatasetWriteValue {\n readonly value: unknown\n}\n\nexport interface WriteDatasetInput<TValue extends DatasetWriteValue = DatasetWriteValue> {\n readonly lakeStorage: LakeStorage\n readonly blobStorage: Pick<BlobStorage, \"stat\">\n readonly dataset: DatasetDefinition\n readonly mode: DatasetWriteMode | \"merge\"\n readonly signal: AbortSignal\n /** Lazy so a merge's latest-version guard is checked before fetching source data. */\n readValues(): Promise<Iterable<TValue> | AsyncIterable<TValue>>\n readonly producer?: DatasetProducer\n readonly expectedLatestVersionId?: string\n readonly commitMessage?: string\n /** Diagnostic label for the caller, including its component prefix. */\n readonly sourceLabel?: string\n /** Progress includes validated values even if the operation subsequently fails. */\n onRead?(rowsRead: number): void\n /** Attach caller-owned source provenance to a validation failure. */\n mapValidationError?(error: unknown, value: TValue, itemIndex: number): unknown\n}\n\nexport type WriteDatasetResult = DatasetMergeCommitResult & { readonly rowsRead: number }\n\n/**\n * Validate, stage, and commit one dataset write using existing lake sessions.\n *\n * The caller owns fetching/cancelling its source, execution bookkeeping, and publishing the\n * dataset-update notification for a `created` result. This operation returns immediately after\n * the lake commit; it does not wait for downstream pipelines or projections.\n */\nexport async function writeDataset<TValue extends DatasetWriteValue>(\n input: WriteDatasetInput<TValue>\n): Promise<WriteDatasetResult> {\n const { lakeStorage, dataset, signal } = input\n let abortWrite: (() => Promise<void>) | undefined\n let rowsRead = 0\n const onRead = () => {\n rowsRead += 1\n input.onRead?.(rowsRead)\n }\n\n throwIfAborted(signal)\n await lakeStorage.createDataset(dataset)\n try {\n throwIfAborted(signal)\n const reconcileSnapshot = dataset.sequenceBy !== undefined && input.mode === \"snapshot\"\n if (input.mode === \"merge\" || reconcileSnapshot) {\n const session = await lakeStorage.beginMerge({\n dataset,\n expectedLatestVersionId: input.expectedLatestVersionId,\n producer: input.producer,\n })\n abortWrite = () => session.abort()\n throwIfAborted(signal)\n const values = await input.readValues()\n throwIfAborted(signal)\n await session.writeChanges(\n validatedValues(\n input,\n values,\n async (value, itemIndex) =>\n reconcileSnapshot\n ? { kind: \"upsert\" as const, row: await validateRow(value, input, itemIndex) }\n : validateMergeChange(value, input, itemIndex),\n onRead\n )\n )\n throwIfAborted(signal)\n const result = await session.commit({\n commitMessage: input.commitMessage,\n createInitialVersion: reconcileSnapshot,\n retryOnConflict: dataset.sequenceBy !== undefined,\n signal,\n })\n return { ...result, rowsRead }\n }\n\n const values = await input.readValues()\n throwIfAborted(signal)\n const session = await lakeStorage.beginWrite({\n dataset,\n mode: input.mode,\n producer: input.producer,\n })\n abortWrite = () => session.abort()\n await session.writeRows(\n validatedValues(\n input,\n values,\n (value, itemIndex) => validateRow(value, input, itemIndex),\n onRead\n )\n )\n throwIfAborted(signal)\n\n // Preserve sync semantics: an empty append must not invent an initial dataset version.\n if (rowsRead === 0 && input.mode === \"append\") {\n const version = await lakeStorage.getLatestVersion(dataset.id)\n await session.abort()\n return { outcome: \"unchanged\", version, rowsRead }\n }\n\n const { outcome, ...version } = await session.commit({\n expectedLatestVersionId: input.expectedLatestVersionId,\n commitMessage: input.commitMessage,\n })\n return { outcome, version, rowsRead }\n } catch (error) {\n // Cleanup must not replace the source, validation, cancellation, or commit failure.\n await abortWrite?.().catch(() => {})\n throw error\n }\n}\n\nasync function* validatedValues<TValue extends DatasetWriteValue, TResult>(\n input: WriteDatasetInput<TValue>,\n values: Iterable<TValue> | AsyncIterable<TValue>,\n validate: (value: unknown, itemIndex: number) => Promise<TResult>,\n onRead: () => void\n): AsyncIterable<TResult> {\n let itemIndex = 0\n for await (const sourceValue of values) {\n throwIfAborted(input.signal)\n itemIndex += 1\n let value: TResult\n try {\n value = await validate(sourceValue.value, itemIndex)\n } catch (error) {\n throw input.mapValidationError\n ? input.mapValidationError(error, sourceValue, itemIndex)\n : error\n }\n onRead()\n yield value\n }\n}\n\nfunction sourceLabel(input: Pick<WriteDatasetInput, \"dataset\" | \"sourceLabel\">): string {\n return input.sourceLabel ?? `[Sixb] Dataset '${input.dataset.id}' writer`\n}\n\nasync function validateRow(\n value: unknown,\n input: WriteDatasetInput,\n itemIndex: number\n): Promise<DatasetRow> {\n if (!isPlainRecord(value)) {\n throw new Error(\n `${sourceLabel(input)} returned an invalid row at item ${itemIndex}. Dataset rows must be plain objects.`\n )\n }\n const validationError = getDatasetRowValidationError(value, input.dataset)\n if (validationError) {\n throw new Error(\n `${sourceLabel(input)} returned an invalid row at item ${itemIndex}. ${validationError}`\n )\n }\n await verifyRowFileRefs(value, input, itemIndex)\n return value\n}\n\nasync function validateMergeChange(\n value: unknown,\n input: WriteDatasetInput,\n itemIndex: number\n): Promise<MergeChange<DatasetRow, DatasetRow>> {\n const validationError = getDatasetMergeChangeValidationError(value, input.dataset)\n if (validationError) {\n throw new Error(\n `${sourceLabel(input)} returned an invalid merge change at item ${itemIndex}. ${validationError}`\n )\n }\n const change = value as MergeChange<DatasetRow, DatasetRow>\n if (change.kind === \"upsert\") await verifyRowFileRefs(change.row, input, itemIndex)\n return change\n}\n\nasync function verifyRowFileRefs(\n row: DatasetRow,\n input: WriteDatasetInput,\n itemIndex: number\n): Promise<void> {\n for (const column of input.dataset.schema.columns) {\n if (column.type !== \"fileRef\") continue\n const value = row[column.name]\n if (isFileRef(value)) await verifyFileRef(value, input, column.name, itemIndex)\n }\n}\n\nasync function verifyFileRef(\n fileRef: FileRef,\n input: WriteDatasetInput,\n columnName: string,\n itemIndex: number\n): Promise<void> {\n const blobInfo = await input.blobStorage.stat(fileRef.blobId)\n const context = `${sourceLabel(input)} returned row ${itemIndex} with dataset '${input.dataset.id}' column '${columnName}'`\n if (!blobInfo) {\n throw new Error(`${context} referencing unknown blob '${fileRef.blobId}'.`)\n }\n if (blobInfo.digest !== fileRef.digest) {\n throw new Error(\n `${context} referencing blob '${fileRef.blobId}' with digest '${fileRef.digest}', but blob storage has '${blobInfo.digest}'.`\n )\n }\n if (blobInfo.sizeBytes !== fileRef.sizeBytes) {\n throw new Error(\n `${context} referencing blob '${fileRef.blobId}' with size ${fileRef.sizeBytes}, but blob storage has ${blobInfo.sizeBytes}.`\n )\n }\n}\n\nfunction throwIfAborted(signal: AbortSignal): void {\n if (!signal.aborted) return\n if (signal.reason instanceof Error) throw signal.reason\n const error = new Error(\n typeof signal.reason === \"string\" && signal.reason.length > 0\n ? signal.reason\n : \"[Sixb] Dataset write was cancelled.\"\n )\n error.name = \"AbortError\"\n throw error\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": ";;;;;;;;;;;;;;;AA+CA,eAAsB,
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;AA+CA,eAAsB,aAA8C,CAClE,OAC6B;AAAA,EAC7B,QAAQ,aAAa,SAAS,WAAW;AAAA,EACzC,IAAI;AAAA,EACJ,IAAI,WAAW;AAAA,EACf,MAAM,SAAS,MAAM;AAAA,IACnB,YAAY;AAAA,IACZ,MAAM,SAAS,QAAQ;AAAA;AAAA,EAGzB,eAAe,MAAM;AAAA,EACrB,MAAM,YAAY,cAAc,OAAO;AAAA,EACvC,IAAI;AAAA,IACF,eAAe,MAAM;AAAA,IACrB,MAAM,oBAAoB,QAAQ,eAAe,aAAa,MAAM,SAAS;AAAA,IAC7E,IAAI,MAAM,SAAS,WAAW,mBAAmB;AAAA,MAC/C,MAAM,UAAU,MAAM,YAAY,WAAW;AAAA,QAC3C;AAAA,QACA,yBAAyB,MAAM;AAAA,QAC/B,UAAU,MAAM;AAAA,MAClB,CAAC;AAAA,MACD,aAAa,MAAM,QAAQ,MAAM;AAAA,MACjC,eAAe,MAAM;AAAA,MACrB,MAAM,SAAS,MAAM,MAAM,WAAW;AAAA,MACtC,eAAe,MAAM;AAAA,MACrB,MAAM,QAAQ,aACZ,gBACE,OACA,QACA,OAAO,OAAO,cACZ,oBACI,EAAE,MAAM,UAAmB,KAAK,MAAM,YAAY,OAAO,OAAO,SAAS,EAAE,IAC3E,oBAAoB,OAAO,OAAO,SAAS,GACjD,MACF,CACF;AAAA,MACA,eAAe,MAAM;AAAA,MACrB,MAAM,SAAS,MAAM,QAAQ,OAAO;AAAA,QAClC,eAAe,MAAM;AAAA,QACrB,sBAAsB;AAAA,QACtB,iBAAiB,QAAQ,eAAe;AAAA,QACxC;AAAA,MACF,CAAC;AAAA,MACD,OAAO,KAAK,QAAQ,SAAS;AAAA,IAC/B;AAAA,IAEA,MAAM,SAAS,MAAM,MAAM,WAAW;AAAA,IACtC,eAAe,MAAM;AAAA,IACrB,MAAM,UAAU,MAAM,YAAY,WAAW;AAAA,MAC3C;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,UAAU,MAAM;AAAA,IAClB,CAAC;AAAA,IACD,aAAa,MAAM,QAAQ,MAAM;AAAA,IACjC,MAAM,QAAQ,UACZ,gBACE,OACA,QACA,CAAC,OAAO,cAAc,YAAY,OAAO,OAAO,SAAS,GACzD,MACF,CACF;AAAA,IACA,eAAe,MAAM;AAAA,IAGrB,IAAI,aAAa,KAAK,MAAM,SAAS,UAAU;AAAA,MAC7C,MAAM,UAAU,MAAM,YAAY,iBAAiB,QAAQ,EAAE;AAAA,MAC7D,MAAM,QAAQ,MAAM;AAAA,MACpB,OAAO,EAAE,SAAS,aAAa,SAAS,SAAS;AAAA,IACnD;AAAA,IAEA,QAAQ,YAAY,YAAY,MAAM,QAAQ,OAAO;AAAA,MACnD,yBAAyB,MAAM;AAAA,MAC/B,eAAe,MAAM;AAAA,IACvB,CAAC;AAAA,IACD,OAAO,EAAE,SAAS,SAAS,SAAS;AAAA,IACpC,OAAO,OAAO;AAAA,IAEd,MAAM,aAAa,EAAE,MAAM,MAAM,EAAE;AAAA,IACnC,MAAM;AAAA;AAAA;AAIV,gBAAgB,eAA0D,CACxE,OACA,QACA,UACA,QACwB;AAAA,EACxB,IAAI,YAAY;AAAA,EAChB,iBAAiB,eAAe,QAAQ;AAAA,IACtC,eAAe,MAAM,MAAM;AAAA,IAC3B,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,QAAQ,MAAM,SAAS,YAAY,OAAO,SAAS;AAAA,MACnD,OAAO,OAAO;AAAA,MACd,MAAM,MAAM,qBACR,MAAM,mBAAmB,OAAO,aAAa,SAAS,IACtD;AAAA;AAAA,IAEN,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA;AAGF,SAAS,WAAW,CAAC,OAAmE;AAAA,EACtF,OAAO,MAAM,eAAe,mBAAmB,MAAM,QAAQ;AAAA;AAG/D,eAAe,WAAW,CACxB,OACA,OACA,WACqB;AAAA,EACrB,IAAI,CAAC,cAAc,KAAK,GAAG;AAAA,IACzB,MAAM,IAAI,MACR,GAAG,YAAY,KAAK,qCAAqC,gDAC3D;AAAA,EACF;AAAA,EACA,MAAM,kBAAkB,8BAA6B,OAAO,MAAM,OAAO;AAAA,EACzE,IAAI,iBAAiB;AAAA,IACnB,MAAM,IAAI,MACR,GAAG,YAAY,KAAK,qCAAqC,cAAc,iBACzE;AAAA,EACF;AAAA,EACA,MAAM,kBAAkB,OAAO,OAAO,SAAS;AAAA,EAC/C,OAAO;AAAA;AAGT,eAAe,mBAAmB,CAChC,OACA,OACA,WAC8C;AAAA,EAC9C,MAAM,kBAAkB,sCAAqC,OAAO,MAAM,OAAO;AAAA,EACjF,IAAI,iBAAiB;AAAA,IACnB,MAAM,IAAI,MACR,GAAG,YAAY,KAAK,8CAA8C,cAAc,iBAClF;AAAA,EACF;AAAA,EACA,MAAM,SAAS;AAAA,EACf,IAAI,OAAO,SAAS;AAAA,IAAU,MAAM,kBAAkB,OAAO,KAAK,OAAO,SAAS;AAAA,EAClF,OAAO;AAAA;AAGT,eAAe,iBAAiB,CAC9B,KACA,OACA,WACe;AAAA,EACf,WAAW,UAAU,MAAM,QAAQ,OAAO,SAAS;AAAA,IACjD,IAAI,OAAO,SAAS;AAAA,MAAW;AAAA,IAC/B,MAAM,QAAQ,IAAI,OAAO;AAAA,IACzB,IAAI,WAAU,KAAK;AAAA,MAAG,MAAM,cAAc,OAAO,OAAO,OAAO,MAAM,SAAS;AAAA,EAChF;AAAA;AAGF,eAAe,aAAa,CAC1B,SACA,OACA,YACA,WACe;AAAA,EACf,MAAM,WAAW,MAAM,MAAM,YAAY,KAAK,QAAQ,MAAM;AAAA,EAC5D,MAAM,UAAU,GAAG,YAAY,KAAK,kBAAkB,2BAA2B,MAAM,QAAQ,eAAe;AAAA,EAC9G,IAAI,CAAC,UAAU;AAAA,IACb,MAAM,IAAI,MAAM,GAAG,qCAAqC,QAAQ,UAAU;AAAA,EAC5E;AAAA,EACA,IAAI,SAAS,WAAW,QAAQ,QAAQ;AAAA,IACtC,MAAM,IAAI,MACR,GAAG,6BAA6B,QAAQ,wBAAwB,QAAQ,kCAAkC,SAAS,UACrH;AAAA,EACF;AAAA,EACA,IAAI,SAAS,cAAc,QAAQ,WAAW;AAAA,IAC5C,MAAM,IAAI,MACR,GAAG,6BAA6B,QAAQ,qBAAqB,QAAQ,mCAAmC,SAAS,YACnH;AAAA,EACF;AAAA;AAGF,SAAS,cAAc,CAAC,QAA2B;AAAA,EACjD,IAAI,CAAC,OAAO;AAAA,IAAS;AAAA,EACrB,IAAI,OAAO,kBAAkB;AAAA,IAAO,MAAM,OAAO;AAAA,EACjD,MAAM,QAAQ,IAAI,MAChB,OAAO,OAAO,WAAW,YAAY,OAAO,OAAO,SAAS,IACxD,OAAO,SACP,qCACN;AAAA,EACA,MAAM,OAAO;AAAA,EACb,MAAM;AAAA;",
|
|
8
|
+
"debugId": "403BB5EF31615BCA64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|