@moqtap/codec 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +100 -99
- package/dist/{chunk-RZHAPEXO.js → chunk-2A57DRXV.js} +36 -10
- package/dist/{chunk-PJRA2TQ5.js → chunk-2UTVXWFF.js} +388 -254
- package/dist/{chunk-IV2H5CFI.cjs → chunk-3XKO6PCR.cjs} +461 -322
- package/dist/{chunk-RVJAGE4S.cjs → chunk-4BDEU3D4.cjs} +415 -304
- package/dist/{chunk-XUUCOLWU.cjs → chunk-4HBKHNU2.cjs} +374 -329
- package/dist/{chunk-4RIXXEII.js → chunk-4IVZZOY3.js} +451 -312
- package/dist/{chunk-ZSPO2GF2.cjs → chunk-5O764MBD.cjs} +1320 -842
- package/dist/chunk-7KBAWOBA.js +1212 -0
- package/dist/{chunk-JSQM2MG3.js → chunk-7QOPNSDF.js} +44 -12
- package/dist/{chunk-SYHW3FLI.cjs → chunk-7RE6KSIY.cjs} +28 -8
- package/dist/{chunk-YG5KJESI.js → chunk-AY6IAHUM.js} +28 -8
- package/dist/{chunk-EFM5T7OM.js → chunk-BLQDWOSG.js} +36 -10
- package/dist/{chunk-KFTCU2P6.js → chunk-C6KUWLQC.js} +0 -3
- package/dist/{chunk-UYXTY6ZQ.cjs → chunk-E65QKRSN.cjs} +20 -12
- package/dist/{chunk-BISI45MN.cjs → chunk-EAHE3IOG.cjs} +44 -12
- package/dist/{chunk-IV2HRJVT.js → chunk-GCBFHZW6.js} +405 -294
- package/dist/{chunk-GXEW4COZ.cjs → chunk-H5NSL4MO.cjs} +36 -10
- package/dist/chunk-HZHSO7EW.cjs +1212 -0
- package/dist/{chunk-BPNL5YFQ.cjs → chunk-IILNSDEQ.cjs} +74 -46
- package/dist/{chunk-4XYGE53S.cjs → chunk-J3XCPBW3.cjs} +36 -10
- package/dist/{chunk-6AEHWULA.cjs → chunk-JKOEJZ5B.cjs} +28 -8
- package/dist/{chunk-FWISIR26.cjs → chunk-JL3NEW3O.cjs} +47 -4
- package/dist/{chunk-G7GI7LJA.js → chunk-LORZMJJB.js} +36 -10
- package/dist/{chunk-DUBCL3WF.cjs → chunk-LV5C6MEC.cjs} +36 -10
- package/dist/{chunk-ENURAVHI.cjs → chunk-MYXAD5JC.cjs} +44 -12
- package/dist/{chunk-FXZ2MYKJ.js → chunk-MZ7HUCGJ.js} +20 -12
- package/dist/{chunk-RWQ43Z4F.cjs → chunk-MZ7VU52O.cjs} +0 -3
- package/dist/{chunk-G26SJ6XS.cjs → chunk-OKG2HT25.cjs} +1193 -928
- package/dist/{chunk-IBVM4DMJ.cjs → chunk-PKEOQSSZ.cjs} +374 -329
- package/dist/{chunk-LH4NTURO.js → chunk-Q46ZURKX.js} +989 -602
- package/dist/{chunk-UR6JKS56.js → chunk-Q7IGWV3P.js} +41 -9
- package/dist/{chunk-ST24APEO.js → chunk-RW4UG7CN.js} +751 -682
- package/dist/{chunk-DWK5ZQZ4.js → chunk-RZTLQAKF.js} +28 -8
- package/dist/{chunk-UNS34PTA.cjs → chunk-S6IPIN66.cjs} +44 -12
- package/dist/{chunk-K4OLITS2.cjs → chunk-SDWRXXOO.cjs} +401 -267
- package/dist/{chunk-CXDHOMHG.js → chunk-SHMA4PBY.js} +476 -431
- package/dist/{chunk-U2B3B42P.js → chunk-U3ZVLT5L.js} +1176 -540
- package/dist/{chunk-HSVYF6XX.cjs → chunk-UJU63EFY.cjs} +1524 -1137
- package/dist/{chunk-A27S7HW7.js → chunk-VOU7PNHI.js} +47 -4
- package/dist/{chunk-E6E3NQYU.js → chunk-WRHGCVYN.js} +44 -12
- package/dist/chunk-XNWYLVGU.cjs +1854 -0
- package/dist/{chunk-NUX5BHWO.js → chunk-XS77RBY7.js} +1160 -895
- package/dist/{chunk-4YJANAXU.cjs → chunk-XZE5R57R.cjs} +829 -760
- package/dist/{chunk-NGVE2RZT.js → chunk-Y6KCSM3V.js} +476 -431
- package/dist/{chunk-TLYNOOQP.cjs → chunk-YTPZZI2M.cjs} +41 -9
- package/dist/{chunk-7DUBLRXC.js → chunk-YWRCSQBA.js} +44 -12
- package/dist/{chunk-MFAP7R6L.js → chunk-Z3VKP3PJ.js} +70 -42
- package/dist/{chunk-ZBKE2QRQ.js → chunk-Z6U26IRI.js} +1107 -629
- package/dist/codec-25u4_1HS.d.ts +35 -0
- package/dist/codec-3Ppy_5Gd.d.ts +23 -0
- package/dist/codec-BB0U8MF2.d.cts +34 -0
- package/dist/codec-BHHfBTnV.d.ts +34 -0
- package/dist/codec-BN6jk0Td.d.cts +30 -0
- package/dist/codec-BU0gaSZm.d.ts +29 -0
- package/dist/codec-C-Yk2RNa.d.ts +30 -0
- package/dist/codec-CFWQY9Lj.d.cts +18 -0
- package/dist/codec-COy4uuPO.d.cts +29 -0
- package/dist/codec-CewFCsEy.d.ts +18 -0
- package/dist/codec-Ck7ZwFF1.d.cts +35 -0
- package/dist/codec-D2QVSH9D.d.ts +30 -0
- package/dist/codec-DDUBJGn0.d.cts +23 -0
- package/dist/codec-DNfml-se.d.ts +27 -0
- package/dist/codec-DoOGjjDq.d.cts +29 -0
- package/dist/codec-J7ekOSMc.d.ts +29 -0
- package/dist/codec-R9TJCq-E.d.cts +31 -0
- package/dist/codec-ZwV-Njt6.d.ts +23 -0
- package/dist/codec-j819z_hL.d.cts +23 -0
- package/dist/codec-w8z2j_uo.d.cts +27 -0
- package/dist/codec-wtt6WF1K.d.ts +31 -0
- package/dist/codec-z6_2PSzi.d.cts +30 -0
- package/dist/draft10-session.cjs +2 -2
- package/dist/draft10-session.d.cts +6 -6
- package/dist/draft10-session.d.ts +6 -6
- package/dist/draft10-session.js +1 -1
- package/dist/draft10.cjs +8 -4
- package/dist/draft10.d.cts +23 -11
- package/dist/draft10.d.ts +23 -11
- package/dist/draft10.js +16 -12
- package/dist/draft11-session.cjs +2 -2
- package/dist/draft11-session.d.cts +6 -6
- package/dist/draft11-session.d.ts +6 -6
- package/dist/draft11-session.js +1 -1
- package/dist/draft11.cjs +8 -4
- package/dist/draft11.d.cts +21 -11
- package/dist/draft11.d.ts +21 -11
- package/dist/draft11.js +16 -12
- package/dist/draft12-session.cjs +2 -2
- package/dist/draft12-session.d.cts +6 -6
- package/dist/draft12-session.d.ts +6 -6
- package/dist/draft12-session.js +1 -1
- package/dist/draft12.cjs +8 -4
- package/dist/draft12.d.cts +23 -13
- package/dist/draft12.d.ts +23 -13
- package/dist/draft12.js +16 -12
- package/dist/draft13-session.cjs +2 -2
- package/dist/draft13-session.d.cts +6 -6
- package/dist/draft13-session.d.ts +6 -6
- package/dist/draft13-session.js +1 -1
- package/dist/draft13.cjs +8 -4
- package/dist/draft13.d.cts +23 -13
- package/dist/draft13.d.ts +23 -13
- package/dist/draft13.js +16 -12
- package/dist/draft14-session.cjs +2 -2
- package/dist/draft14-session.d.cts +6 -6
- package/dist/draft14-session.d.ts +6 -6
- package/dist/draft14-session.js +1 -1
- package/dist/draft14.cjs +14 -4
- package/dist/draft14.d.cts +67 -11
- package/dist/draft14.d.ts +67 -11
- package/dist/draft14.js +13 -3
- package/dist/draft15-session.cjs +2 -2
- package/dist/draft15-session.d.cts +6 -6
- package/dist/draft15-session.d.ts +6 -6
- package/dist/draft15-session.js +1 -1
- package/dist/draft15.cjs +8 -4
- package/dist/draft15.d.cts +56 -11
- package/dist/draft15.d.ts +56 -11
- package/dist/draft15.js +16 -12
- package/dist/draft16-session.cjs +2 -2
- package/dist/draft16-session.d.cts +6 -6
- package/dist/draft16-session.d.ts +6 -6
- package/dist/draft16-session.js +1 -1
- package/dist/draft16.cjs +8 -4
- package/dist/draft16.d.cts +45 -11
- package/dist/draft16.d.ts +45 -11
- package/dist/draft16.js +16 -12
- package/dist/draft17-session.cjs +2 -2
- package/dist/draft17-session.d.cts +7 -7
- package/dist/draft17-session.d.ts +7 -7
- package/dist/draft17-session.js +1 -1
- package/dist/draft17.cjs +8 -4
- package/dist/draft17.d.cts +21 -8
- package/dist/draft17.d.ts +21 -8
- package/dist/draft17.js +16 -12
- package/dist/draft7-session.cjs +3 -3
- package/dist/draft7-session.d.cts +6 -5
- package/dist/draft7-session.d.ts +6 -5
- package/dist/draft7-session.js +2 -2
- package/dist/draft7.cjs +83 -14
- package/dist/draft7.d.cts +59 -64
- package/dist/draft7.d.ts +59 -64
- package/dist/draft7.js +89 -20
- package/dist/draft8-session.cjs +2 -2
- package/dist/draft8-session.d.cts +6 -6
- package/dist/draft8-session.d.ts +6 -6
- package/dist/draft8-session.js +1 -1
- package/dist/draft8.cjs +8 -4
- package/dist/draft8.d.cts +23 -11
- package/dist/draft8.d.ts +23 -11
- package/dist/draft8.js +7 -3
- package/dist/draft9-session.cjs +2 -2
- package/dist/draft9-session.d.cts +6 -6
- package/dist/draft9-session.d.ts +6 -6
- package/dist/draft9-session.js +1 -1
- package/dist/draft9.cjs +8 -4
- package/dist/draft9.d.cts +23 -11
- package/dist/draft9.d.ts +23 -11
- package/dist/draft9.js +7 -3
- package/dist/index.cjs +52 -73
- package/dist/index.d.cts +41 -60
- package/dist/index.d.ts +55 -82
- package/dist/index.js +89 -93
- package/dist/{session-types-CJIFbTPd.d.ts → session-types-C7UONex5.d.cts} +28 -27
- package/dist/{session-types-Cbq8IGCP.d.cts → session-types-X-IYEGoG.d.ts} +28 -27
- package/dist/session.cjs +47 -14
- package/dist/session.d.cts +28 -9
- package/dist/session.d.ts +32 -9
- package/dist/session.js +59 -32
- package/dist/{types-4VxSL2Ho.d.ts → types--Q7_DcvP.d.cts} +49 -39
- package/dist/{types-4VxSL2Ho.d.cts → types--Q7_DcvP.d.ts} +49 -39
- package/dist/{types-Cw4WE9dh.d.ts → types-0IWbU9Z_.d.cts} +44 -36
- package/dist/{types-Cw4WE9dh.d.cts → types-0IWbU9Z_.d.ts} +44 -36
- package/dist/{types-D5gNQiDj.d.ts → types-B3g5G9KP.d.cts} +44 -36
- package/dist/{types-D5gNQiDj.d.cts → types-B3g5G9KP.d.ts} +44 -36
- package/dist/{types-B2afJZM-.d.cts → types-BFpFNM_m.d.cts} +60 -32
- package/dist/{types-B2afJZM-.d.ts → types-BFpFNM_m.d.ts} +60 -32
- package/dist/{types-ERexTpT8.d.ts → types-Br7fm2mf.d.cts} +51 -26
- package/dist/{types-ERexTpT8.d.cts → types-Br7fm2mf.d.ts} +51 -26
- package/dist/{types-Bg6QYNVt.d.cts → types-C2qKTRR_.d.cts} +55 -45
- package/dist/{types-Bg6QYNVt.d.ts → types-C2qKTRR_.d.ts} +55 -45
- package/dist/{types-BTFeKYCb.d.ts → types-DEaypVsD.d.cts} +133 -58
- package/dist/{types-BTFeKYCb.d.cts → types-DEaypVsD.d.ts} +133 -58
- package/dist/types-Dl4IaAHR.d.cts +282 -0
- package/dist/types-Dl4IaAHR.d.ts +282 -0
- package/dist/{types-C_1HrqBl.d.cts → types-DrQpTW1G.d.cts} +63 -50
- package/dist/{types-C_1HrqBl.d.ts → types-DrQpTW1G.d.ts} +63 -50
- package/dist/types-DuIO7cWK.d.cts +25 -0
- package/dist/types-DuIO7cWK.d.ts +25 -0
- package/dist/{types-DqCDFqgB.d.ts → types-DuxfOYiO.d.cts} +50 -31
- package/dist/{types-DqCDFqgB.d.cts → types-DuxfOYiO.d.ts} +50 -31
- package/dist/{types-r-CasCf1.d.cts → types-jV1yDDBA.d.cts} +43 -36
- package/dist/{types-r-CasCf1.d.ts → types-jV1yDDBA.d.ts} +43 -36
- package/package.json +15 -15
- package/src/core/buffer-reader.ts +69 -53
- package/src/core/buffer-writer.ts +55 -46
- package/src/core/errors.ts +1 -1
- package/src/core/hex.ts +21 -17
- package/src/core/session-types.ts +61 -59
- package/src/core/types.ts +18 -361
- package/src/drafts/draft07/codec.ts +1058 -933
- package/src/drafts/draft07/data-streams.ts +116 -116
- package/src/drafts/draft07/index.ts +124 -89
- package/src/drafts/draft07/messages.ts +76 -42
- package/src/drafts/draft07/rules.ts +107 -101
- package/src/drafts/draft07/session-fsm.ts +315 -287
- package/src/drafts/draft07/session.ts +8 -6
- package/src/drafts/draft07/types.ts +406 -72
- package/src/drafts/draft07/varint.ts +40 -12
- package/src/drafts/draft08/codec.ts +985 -944
- package/src/drafts/draft08/data-streams.ts +178 -174
- package/src/drafts/draft08/index.ts +10 -9
- package/src/drafts/draft08/messages.ts +59 -59
- package/src/drafts/draft08/rules.ts +73 -73
- package/src/drafts/draft08/session-fsm.ts +335 -303
- package/src/drafts/draft08/session.ts +6 -7
- package/src/drafts/draft08/types.ts +380 -384
- package/src/drafts/draft09/codec.ts +977 -936
- package/src/drafts/draft09/data-streams.ts +163 -159
- package/src/drafts/draft09/index.ts +10 -9
- package/src/drafts/draft09/messages.ts +59 -59
- package/src/drafts/draft09/rules.ts +73 -73
- package/src/drafts/draft09/session-fsm.ts +335 -303
- package/src/drafts/draft09/session.ts +6 -7
- package/src/drafts/draft09/types.ts +380 -384
- package/src/drafts/draft10/codec.ts +977 -936
- package/src/drafts/draft10/data-streams.ts +163 -159
- package/src/drafts/draft10/index.ts +10 -9
- package/src/drafts/draft10/messages.ts +59 -59
- package/src/drafts/draft10/rules.ts +73 -73
- package/src/drafts/draft10/session-fsm.ts +335 -303
- package/src/drafts/draft10/session.ts +6 -7
- package/src/drafts/draft10/types.ts +380 -384
- package/src/drafts/draft11/codec.ts +1054 -979
- package/src/drafts/draft11/data-streams.ts +189 -142
- package/src/drafts/draft11/index.ts +10 -9
- package/src/drafts/draft11/messages.ts +60 -59
- package/src/drafts/draft11/rules.ts +73 -73
- package/src/drafts/draft11/session-fsm.ts +359 -333
- package/src/drafts/draft11/session.ts +6 -7
- package/src/drafts/draft11/types.ts +385 -381
- package/src/drafts/draft12/codec.ts +1178 -1113
- package/src/drafts/draft12/data-streams.ts +192 -143
- package/src/drafts/draft12/index.ts +10 -9
- package/src/drafts/draft12/messages.ts +67 -66
- package/src/drafts/draft12/rules.ts +79 -79
- package/src/drafts/draft12/session-fsm.ts +384 -358
- package/src/drafts/draft12/session.ts +6 -7
- package/src/drafts/draft12/types.ts +424 -419
- package/src/drafts/draft13/codec.ts +1296 -1197
- package/src/drafts/draft13/data-streams.ts +194 -143
- package/src/drafts/draft13/index.ts +10 -9
- package/src/drafts/draft13/messages.ts +73 -68
- package/src/drafts/draft13/rules.ts +81 -81
- package/src/drafts/draft13/session-fsm.ts +392 -366
- package/src/drafts/draft13/session.ts +6 -7
- package/src/drafts/draft13/types.ts +447 -438
- package/src/drafts/draft14/codec.ts +1347 -1034
- package/src/drafts/draft14/data-streams.ts +429 -396
- package/src/drafts/draft14/index.ts +17 -9
- package/src/drafts/draft14/messages.ts +65 -65
- package/src/drafts/draft14/rules.ts +81 -81
- package/src/drafts/draft14/session-fsm.ts +415 -405
- package/src/drafts/draft14/session.ts +6 -7
- package/src/drafts/draft14/types.ts +451 -381
- package/src/drafts/draft15/codec.ts +1138 -969
- package/src/drafts/draft15/data-streams.ts +428 -364
- package/src/drafts/draft15/index.ts +10 -9
- package/src/drafts/draft15/messages.ts +54 -53
- package/src/drafts/draft15/rules.ts +67 -67
- package/src/drafts/draft15/session-fsm.ts +319 -299
- package/src/drafts/draft15/session.ts +6 -7
- package/src/drafts/draft15/types.ts +357 -339
- package/src/drafts/draft16/codec.ts +1242 -957
- package/src/drafts/draft16/data-streams.ts +433 -371
- package/src/drafts/draft16/index.ts +10 -9
- package/src/drafts/draft16/messages.ts +56 -55
- package/src/drafts/draft16/rules.ts +69 -69
- package/src/drafts/draft16/session-fsm.ts +319 -299
- package/src/drafts/draft16/session.ts +6 -7
- package/src/drafts/draft16/types.ts +386 -357
- package/src/drafts/draft17/codec.ts +1209 -962
- package/src/drafts/draft17/data-streams.ts +593 -366
- package/src/drafts/draft17/index.ts +9 -7
- package/src/drafts/draft17/messages.ts +43 -42
- package/src/drafts/draft17/rules.ts +58 -58
- package/src/drafts/draft17/session-fsm.ts +248 -216
- package/src/drafts/draft17/session.ts +5 -5
- package/src/drafts/draft17/types.ts +337 -313
- package/src/index.ts +85 -274
- package/src/session.ts +62 -23
- package/dist/chunk-7IVGHMKJ.cjs +0 -866
- package/dist/chunk-FUFTMAQD.cjs +0 -1218
- package/dist/chunk-TMNGRIPL.js +0 -866
- package/dist/codec-95k8CAu5.d.cts +0 -35
- package/dist/codec-AFuOxfsO.d.ts +0 -60
- package/dist/codec-B-UJ5Iow.d.cts +0 -75
- package/dist/codec-BC5jfvMb.d.ts +0 -35
- package/dist/codec-BECYPfY8.d.ts +0 -35
- package/dist/codec-BsPU1vNC.d.ts +0 -39
- package/dist/codec-BvpuF-6u.d.cts +0 -39
- package/dist/codec-C8jZI5Cx.d.cts +0 -39
- package/dist/codec-CAevkgf5.d.cts +0 -33
- package/dist/codec-CSUqCrRs.d.ts +0 -39
- package/dist/codec-C_HMXNK_.d.ts +0 -33
- package/dist/codec-CpuvYTSV.d.cts +0 -86
- package/dist/codec-D0x8-SCw.d.cts +0 -35
- package/dist/codec-D7ARhpG1.d.ts +0 -75
- package/dist/codec-DNAUGshO.d.cts +0 -60
- package/dist/codec-DPx_QNn0.d.ts +0 -31
- package/dist/codec-DRhCx_hw.d.ts +0 -86
- package/dist/codec-Db7YPe3l.d.ts +0 -31
- package/dist/codec-axkJpb7D.d.cts +0 -31
- package/dist/codec-ujAbFaep.d.cts +0 -31
- package/dist/core/buffer-reader.d.ts +0 -15
- package/dist/core/buffer-reader.d.ts.map +0 -1
- package/dist/core/buffer-reader.js +0 -98
- package/dist/core/buffer-reader.js.map +0 -1
- package/dist/core/buffer-writer.d.ts +0 -16
- package/dist/core/buffer-writer.d.ts.map +0 -1
- package/dist/core/buffer-writer.js +0 -86
- package/dist/core/buffer-writer.js.map +0 -1
- package/dist/core/errors.d.ts +0 -2
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -2
- package/dist/core/errors.js.map +0 -1
- package/dist/core/hex.d.ts +0 -5
- package/dist/core/hex.d.ts.map +0 -1
- package/dist/core/hex.js +0 -17
- package/dist/core/hex.js.map +0 -1
- package/dist/core/session-types.d.ts +0 -99
- package/dist/core/session-types.d.ts.map +0 -1
- package/dist/core/session-types.js +0 -2
- package/dist/core/session-types.js.map +0 -1
- package/dist/core/types.d.ts +0 -235
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -11
- package/dist/core/types.js.map +0 -1
- package/dist/drafts/draft07/announce-fsm.d.ts +0 -2
- package/dist/drafts/draft07/announce-fsm.d.ts.map +0 -1
- package/dist/drafts/draft07/announce-fsm.js +0 -2
- package/dist/drafts/draft07/announce-fsm.js.map +0 -1
- package/dist/drafts/draft07/codec.d.ts +0 -17
- package/dist/drafts/draft07/codec.d.ts.map +0 -1
- package/dist/drafts/draft07/codec.js +0 -722
- package/dist/drafts/draft07/codec.js.map +0 -1
- package/dist/drafts/draft07/data-streams.d.ts +0 -9
- package/dist/drafts/draft07/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft07/data-streams.js +0 -228
- package/dist/drafts/draft07/data-streams.js.map +0 -1
- package/dist/drafts/draft07/index.d.ts +0 -14
- package/dist/drafts/draft07/index.d.ts.map +0 -1
- package/dist/drafts/draft07/index.js +0 -18
- package/dist/drafts/draft07/index.js.map +0 -1
- package/dist/drafts/draft07/messages.d.ts +0 -32
- package/dist/drafts/draft07/messages.d.ts.map +0 -1
- package/dist/drafts/draft07/messages.js +0 -42
- package/dist/drafts/draft07/messages.js.map +0 -1
- package/dist/drafts/draft07/parameters.d.ts +0 -4
- package/dist/drafts/draft07/parameters.d.ts.map +0 -1
- package/dist/drafts/draft07/parameters.js +0 -10
- package/dist/drafts/draft07/parameters.js.map +0 -1
- package/dist/drafts/draft07/rules.d.ts +0 -8
- package/dist/drafts/draft07/rules.d.ts.map +0 -1
- package/dist/drafts/draft07/rules.js +0 -95
- package/dist/drafts/draft07/rules.js.map +0 -1
- package/dist/drafts/draft07/session-fsm.d.ts +0 -38
- package/dist/drafts/draft07/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft07/session-fsm.js +0 -354
- package/dist/drafts/draft07/session-fsm.js.map +0 -1
- package/dist/drafts/draft07/session.d.ts +0 -4
- package/dist/drafts/draft07/session.d.ts.map +0 -1
- package/dist/drafts/draft07/session.js +0 -5
- package/dist/drafts/draft07/session.js.map +0 -1
- package/dist/drafts/draft07/subscription-fsm.d.ts +0 -2
- package/dist/drafts/draft07/subscription-fsm.d.ts.map +0 -1
- package/dist/drafts/draft07/subscription-fsm.js +0 -2
- package/dist/drafts/draft07/subscription-fsm.js.map +0 -1
- package/dist/drafts/draft07/types.d.ts +0 -61
- package/dist/drafts/draft07/types.d.ts.map +0 -1
- package/dist/drafts/draft07/types.js +0 -4
- package/dist/drafts/draft07/types.js.map +0 -1
- package/dist/drafts/draft07/varint.d.ts +0 -4
- package/dist/drafts/draft07/varint.d.ts.map +0 -1
- package/dist/drafts/draft07/varint.js +0 -22
- package/dist/drafts/draft07/varint.js.map +0 -1
- package/dist/drafts/draft08/codec.d.ts +0 -29
- package/dist/drafts/draft08/codec.d.ts.map +0 -1
- package/dist/drafts/draft08/codec.js +0 -729
- package/dist/drafts/draft08/codec.js.map +0 -1
- package/dist/drafts/draft08/data-streams.d.ts +0 -12
- package/dist/drafts/draft08/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft08/data-streams.js +0 -345
- package/dist/drafts/draft08/data-streams.js.map +0 -1
- package/dist/drafts/draft08/index.d.ts +0 -9
- package/dist/drafts/draft08/index.d.ts.map +0 -1
- package/dist/drafts/draft08/index.js +0 -7
- package/dist/drafts/draft08/index.js.map +0 -1
- package/dist/drafts/draft08/messages.d.ts +0 -34
- package/dist/drafts/draft08/messages.d.ts.map +0 -1
- package/dist/drafts/draft08/messages.js +0 -66
- package/dist/drafts/draft08/messages.js.map +0 -1
- package/dist/drafts/draft08/rules.d.ts +0 -8
- package/dist/drafts/draft08/rules.d.ts.map +0 -1
- package/dist/drafts/draft08/rules.js +0 -83
- package/dist/drafts/draft08/rules.js.map +0 -1
- package/dist/drafts/draft08/session-fsm.d.ts +0 -47
- package/dist/drafts/draft08/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft08/session-fsm.js +0 -483
- package/dist/drafts/draft08/session-fsm.js.map +0 -1
- package/dist/drafts/draft08/session.d.ts +0 -5
- package/dist/drafts/draft08/session.d.ts.map +0 -1
- package/dist/drafts/draft08/session.js +0 -5
- package/dist/drafts/draft08/session.js.map +0 -1
- package/dist/drafts/draft08/types.d.ts +0 -268
- package/dist/drafts/draft08/types.d.ts.map +0 -1
- package/dist/drafts/draft08/types.js +0 -4
- package/dist/drafts/draft08/types.js.map +0 -1
- package/dist/drafts/draft09/codec.d.ts +0 -21
- package/dist/drafts/draft09/codec.d.ts.map +0 -1
- package/dist/drafts/draft09/codec.js +0 -721
- package/dist/drafts/draft09/codec.js.map +0 -1
- package/dist/drafts/draft09/data-streams.d.ts +0 -12
- package/dist/drafts/draft09/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft09/data-streams.js +0 -307
- package/dist/drafts/draft09/data-streams.js.map +0 -1
- package/dist/drafts/draft09/index.d.ts +0 -9
- package/dist/drafts/draft09/index.d.ts.map +0 -1
- package/dist/drafts/draft09/index.js +0 -7
- package/dist/drafts/draft09/index.js.map +0 -1
- package/dist/drafts/draft09/messages.d.ts +0 -34
- package/dist/drafts/draft09/messages.d.ts.map +0 -1
- package/dist/drafts/draft09/messages.js +0 -66
- package/dist/drafts/draft09/messages.js.map +0 -1
- package/dist/drafts/draft09/rules.d.ts +0 -8
- package/dist/drafts/draft09/rules.d.ts.map +0 -1
- package/dist/drafts/draft09/rules.js +0 -83
- package/dist/drafts/draft09/rules.js.map +0 -1
- package/dist/drafts/draft09/session-fsm.d.ts +0 -47
- package/dist/drafts/draft09/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft09/session-fsm.js +0 -483
- package/dist/drafts/draft09/session-fsm.js.map +0 -1
- package/dist/drafts/draft09/session.d.ts +0 -5
- package/dist/drafts/draft09/session.d.ts.map +0 -1
- package/dist/drafts/draft09/session.js +0 -5
- package/dist/drafts/draft09/session.js.map +0 -1
- package/dist/drafts/draft09/types.d.ts +0 -268
- package/dist/drafts/draft09/types.d.ts.map +0 -1
- package/dist/drafts/draft09/types.js +0 -4
- package/dist/drafts/draft09/types.js.map +0 -1
- package/dist/drafts/draft10/codec.d.ts +0 -21
- package/dist/drafts/draft10/codec.d.ts.map +0 -1
- package/dist/drafts/draft10/codec.js +0 -721
- package/dist/drafts/draft10/codec.js.map +0 -1
- package/dist/drafts/draft10/data-streams.d.ts +0 -12
- package/dist/drafts/draft10/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft10/data-streams.js +0 -307
- package/dist/drafts/draft10/data-streams.js.map +0 -1
- package/dist/drafts/draft10/index.d.ts +0 -9
- package/dist/drafts/draft10/index.d.ts.map +0 -1
- package/dist/drafts/draft10/index.js +0 -7
- package/dist/drafts/draft10/index.js.map +0 -1
- package/dist/drafts/draft10/messages.d.ts +0 -34
- package/dist/drafts/draft10/messages.d.ts.map +0 -1
- package/dist/drafts/draft10/messages.js +0 -66
- package/dist/drafts/draft10/messages.js.map +0 -1
- package/dist/drafts/draft10/rules.d.ts +0 -8
- package/dist/drafts/draft10/rules.d.ts.map +0 -1
- package/dist/drafts/draft10/rules.js +0 -83
- package/dist/drafts/draft10/rules.js.map +0 -1
- package/dist/drafts/draft10/session-fsm.d.ts +0 -47
- package/dist/drafts/draft10/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft10/session-fsm.js +0 -483
- package/dist/drafts/draft10/session-fsm.js.map +0 -1
- package/dist/drafts/draft10/session.d.ts +0 -5
- package/dist/drafts/draft10/session.d.ts.map +0 -1
- package/dist/drafts/draft10/session.js +0 -5
- package/dist/drafts/draft10/session.js.map +0 -1
- package/dist/drafts/draft10/types.d.ts +0 -268
- package/dist/drafts/draft10/types.d.ts.map +0 -1
- package/dist/drafts/draft10/types.js +0 -4
- package/dist/drafts/draft10/types.js.map +0 -1
- package/dist/drafts/draft11/codec.d.ts +0 -25
- package/dist/drafts/draft11/codec.d.ts.map +0 -1
- package/dist/drafts/draft11/codec.js +0 -775
- package/dist/drafts/draft11/codec.js.map +0 -1
- package/dist/drafts/draft11/data-streams.d.ts +0 -10
- package/dist/drafts/draft11/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft11/data-streams.js +0 -253
- package/dist/drafts/draft11/data-streams.js.map +0 -1
- package/dist/drafts/draft11/index.d.ts +0 -9
- package/dist/drafts/draft11/index.d.ts.map +0 -1
- package/dist/drafts/draft11/index.js +0 -7
- package/dist/drafts/draft11/index.js.map +0 -1
- package/dist/drafts/draft11/messages.d.ts +0 -33
- package/dist/drafts/draft11/messages.d.ts.map +0 -1
- package/dist/drafts/draft11/messages.js +0 -65
- package/dist/drafts/draft11/messages.js.map +0 -1
- package/dist/drafts/draft11/rules.d.ts +0 -8
- package/dist/drafts/draft11/rules.d.ts.map +0 -1
- package/dist/drafts/draft11/rules.js +0 -88
- package/dist/drafts/draft11/rules.js.map +0 -1
- package/dist/drafts/draft11/session-fsm.d.ts +0 -52
- package/dist/drafts/draft11/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft11/session-fsm.js +0 -530
- package/dist/drafts/draft11/session-fsm.js.map +0 -1
- package/dist/drafts/draft11/session.d.ts +0 -5
- package/dist/drafts/draft11/session.d.ts.map +0 -1
- package/dist/drafts/draft11/session.js +0 -5
- package/dist/drafts/draft11/session.js.map +0 -1
- package/dist/drafts/draft11/types.d.ts +0 -266
- package/dist/drafts/draft11/types.d.ts.map +0 -1
- package/dist/drafts/draft11/types.js +0 -4
- package/dist/drafts/draft11/types.js.map +0 -1
- package/dist/drafts/draft12/codec.d.ts +0 -27
- package/dist/drafts/draft12/codec.d.ts.map +0 -1
- package/dist/drafts/draft12/codec.js +0 -918
- package/dist/drafts/draft12/codec.js.map +0 -1
- package/dist/drafts/draft12/data-streams.d.ts +0 -10
- package/dist/drafts/draft12/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft12/data-streams.js +0 -254
- package/dist/drafts/draft12/data-streams.js.map +0 -1
- package/dist/drafts/draft12/index.d.ts +0 -9
- package/dist/drafts/draft12/index.d.ts.map +0 -1
- package/dist/drafts/draft12/index.js +0 -7
- package/dist/drafts/draft12/index.js.map +0 -1
- package/dist/drafts/draft12/messages.d.ts +0 -37
- package/dist/drafts/draft12/messages.d.ts.map +0 -1
- package/dist/drafts/draft12/messages.js +0 -77
- package/dist/drafts/draft12/messages.js.map +0 -1
- package/dist/drafts/draft12/rules.d.ts +0 -8
- package/dist/drafts/draft12/rules.d.ts.map +0 -1
- package/dist/drafts/draft12/rules.js +0 -94
- package/dist/drafts/draft12/rules.js.map +0 -1
- package/dist/drafts/draft12/session-fsm.d.ts +0 -55
- package/dist/drafts/draft12/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft12/session-fsm.js +0 -569
- package/dist/drafts/draft12/session-fsm.js.map +0 -1
- package/dist/drafts/draft12/session.d.ts +0 -5
- package/dist/drafts/draft12/session.d.ts.map +0 -1
- package/dist/drafts/draft12/session.js +0 -5
- package/dist/drafts/draft12/session.js.map +0 -1
- package/dist/drafts/draft12/types.d.ts +0 -294
- package/dist/drafts/draft12/types.d.ts.map +0 -1
- package/dist/drafts/draft12/types.js +0 -4
- package/dist/drafts/draft12/types.js.map +0 -1
- package/dist/drafts/draft13/codec.d.ts +0 -27
- package/dist/drafts/draft13/codec.d.ts.map +0 -1
- package/dist/drafts/draft13/codec.js +0 -1000
- package/dist/drafts/draft13/codec.js.map +0 -1
- package/dist/drafts/draft13/data-streams.d.ts +0 -10
- package/dist/drafts/draft13/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft13/data-streams.js +0 -254
- package/dist/drafts/draft13/data-streams.js.map +0 -1
- package/dist/drafts/draft13/index.d.ts +0 -9
- package/dist/drafts/draft13/index.d.ts.map +0 -1
- package/dist/drafts/draft13/index.js +0 -7
- package/dist/drafts/draft13/index.js.map +0 -1
- package/dist/drafts/draft13/messages.d.ts +0 -38
- package/dist/drafts/draft13/messages.d.ts.map +0 -1
- package/dist/drafts/draft13/messages.js +0 -79
- package/dist/drafts/draft13/messages.js.map +0 -1
- package/dist/drafts/draft13/rules.d.ts +0 -8
- package/dist/drafts/draft13/rules.d.ts.map +0 -1
- package/dist/drafts/draft13/rules.js +0 -96
- package/dist/drafts/draft13/rules.js.map +0 -1
- package/dist/drafts/draft13/session-fsm.d.ts +0 -56
- package/dist/drafts/draft13/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft13/session-fsm.js +0 -581
- package/dist/drafts/draft13/session-fsm.js.map +0 -1
- package/dist/drafts/draft13/session.d.ts +0 -5
- package/dist/drafts/draft13/session.d.ts.map +0 -1
- package/dist/drafts/draft13/session.js +0 -5
- package/dist/drafts/draft13/session.js.map +0 -1
- package/dist/drafts/draft13/types.d.ts +0 -310
- package/dist/drafts/draft13/types.d.ts.map +0 -1
- package/dist/drafts/draft13/types.js +0 -4
- package/dist/drafts/draft13/types.js.map +0 -1
- package/dist/drafts/draft14/codec.d.ts +0 -34
- package/dist/drafts/draft14/codec.d.ts.map +0 -1
- package/dist/drafts/draft14/codec.js +0 -752
- package/dist/drafts/draft14/codec.js.map +0 -1
- package/dist/drafts/draft14/data-streams.d.ts +0 -56
- package/dist/drafts/draft14/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft14/data-streams.js +0 -729
- package/dist/drafts/draft14/data-streams.js.map +0 -1
- package/dist/drafts/draft14/index.d.ts +0 -9
- package/dist/drafts/draft14/index.d.ts.map +0 -1
- package/dist/drafts/draft14/index.js +0 -7
- package/dist/drafts/draft14/index.js.map +0 -1
- package/dist/drafts/draft14/messages.d.ts +0 -36
- package/dist/drafts/draft14/messages.d.ts.map +0 -1
- package/dist/drafts/draft14/messages.js +0 -71
- package/dist/drafts/draft14/messages.js.map +0 -1
- package/dist/drafts/draft14/rules.d.ts +0 -8
- package/dist/drafts/draft14/rules.d.ts.map +0 -1
- package/dist/drafts/draft14/rules.js +0 -101
- package/dist/drafts/draft14/rules.js.map +0 -1
- package/dist/drafts/draft14/session-fsm.d.ts +0 -58
- package/dist/drafts/draft14/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft14/session-fsm.js +0 -648
- package/dist/drafts/draft14/session-fsm.js.map +0 -1
- package/dist/drafts/draft14/session.d.ts +0 -5
- package/dist/drafts/draft14/session.d.ts.map +0 -1
- package/dist/drafts/draft14/session.js +0 -5
- package/dist/drafts/draft14/session.js.map +0 -1
- package/dist/drafts/draft14/types.d.ts +0 -263
- package/dist/drafts/draft14/types.d.ts.map +0 -1
- package/dist/drafts/draft14/types.js +0 -4
- package/dist/drafts/draft14/types.js.map +0 -1
- package/dist/drafts/draft15/codec.d.ts +0 -33
- package/dist/drafts/draft15/codec.d.ts.map +0 -1
- package/dist/drafts/draft15/codec.js +0 -742
- package/dist/drafts/draft15/codec.js.map +0 -1
- package/dist/drafts/draft15/data-streams.d.ts +0 -45
- package/dist/drafts/draft15/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft15/data-streams.js +0 -675
- package/dist/drafts/draft15/data-streams.js.map +0 -1
- package/dist/drafts/draft15/index.d.ts +0 -9
- package/dist/drafts/draft15/index.d.ts.map +0 -1
- package/dist/drafts/draft15/index.js +0 -7
- package/dist/drafts/draft15/index.js.map +0 -1
- package/dist/drafts/draft15/messages.d.ts +0 -31
- package/dist/drafts/draft15/messages.d.ts.map +0 -1
- package/dist/drafts/draft15/messages.js +0 -59
- package/dist/drafts/draft15/messages.js.map +0 -1
- package/dist/drafts/draft15/rules.d.ts +0 -8
- package/dist/drafts/draft15/rules.d.ts.map +0 -1
- package/dist/drafts/draft15/rules.js +0 -83
- package/dist/drafts/draft15/rules.js.map +0 -1
- package/dist/drafts/draft15/session-fsm.d.ts +0 -48
- package/dist/drafts/draft15/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft15/session-fsm.js +0 -479
- package/dist/drafts/draft15/session-fsm.js.map +0 -1
- package/dist/drafts/draft15/session.d.ts +0 -5
- package/dist/drafts/draft15/session.d.ts.map +0 -1
- package/dist/drafts/draft15/session.js +0 -5
- package/dist/drafts/draft15/session.js.map +0 -1
- package/dist/drafts/draft15/types.d.ts +0 -232
- package/dist/drafts/draft15/types.d.ts.map +0 -1
- package/dist/drafts/draft15/types.js +0 -4
- package/dist/drafts/draft15/types.js.map +0 -1
- package/dist/drafts/draft16/codec.d.ts +0 -29
- package/dist/drafts/draft16/codec.d.ts.map +0 -1
- package/dist/drafts/draft16/codec.js +0 -747
- package/dist/drafts/draft16/codec.js.map +0 -1
- package/dist/drafts/draft16/data-streams.d.ts +0 -34
- package/dist/drafts/draft16/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft16/data-streams.js +0 -667
- package/dist/drafts/draft16/data-streams.js.map +0 -1
- package/dist/drafts/draft16/index.d.ts +0 -9
- package/dist/drafts/draft16/index.d.ts.map +0 -1
- package/dist/drafts/draft16/index.js +0 -7
- package/dist/drafts/draft16/index.js.map +0 -1
- package/dist/drafts/draft16/messages.d.ts +0 -32
- package/dist/drafts/draft16/messages.d.ts.map +0 -1
- package/dist/drafts/draft16/messages.js +0 -62
- package/dist/drafts/draft16/messages.js.map +0 -1
- package/dist/drafts/draft16/rules.d.ts +0 -8
- package/dist/drafts/draft16/rules.d.ts.map +0 -1
- package/dist/drafts/draft16/rules.js +0 -84
- package/dist/drafts/draft16/rules.js.map +0 -1
- package/dist/drafts/draft16/session-fsm.d.ts +0 -48
- package/dist/drafts/draft16/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft16/session-fsm.js +0 -474
- package/dist/drafts/draft16/session-fsm.js.map +0 -1
- package/dist/drafts/draft16/session.d.ts +0 -5
- package/dist/drafts/draft16/session.d.ts.map +0 -1
- package/dist/drafts/draft16/session.js +0 -5
- package/dist/drafts/draft16/session.js.map +0 -1
- package/dist/drafts/draft16/types.d.ts +0 -238
- package/dist/drafts/draft16/types.d.ts.map +0 -1
- package/dist/drafts/draft16/types.js +0 -4
- package/dist/drafts/draft16/types.js.map +0 -1
- package/dist/drafts/draft17/codec.d.ts +0 -29
- package/dist/drafts/draft17/codec.d.ts.map +0 -1
- package/dist/drafts/draft17/codec.js +0 -799
- package/dist/drafts/draft17/codec.js.map +0 -1
- package/dist/drafts/draft17/data-streams.d.ts +0 -13
- package/dist/drafts/draft17/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft17/data-streams.js +0 -633
- package/dist/drafts/draft17/data-streams.js.map +0 -1
- package/dist/drafts/draft17/index.d.ts +0 -8
- package/dist/drafts/draft17/index.d.ts.map +0 -1
- package/dist/drafts/draft17/index.js +0 -6
- package/dist/drafts/draft17/index.js.map +0 -1
- package/dist/drafts/draft17/messages.d.ts +0 -25
- package/dist/drafts/draft17/messages.d.ts.map +0 -1
- package/dist/drafts/draft17/messages.js +0 -48
- package/dist/drafts/draft17/messages.js.map +0 -1
- package/dist/drafts/draft17/rules.d.ts +0 -8
- package/dist/drafts/draft17/rules.d.ts.map +0 -1
- package/dist/drafts/draft17/rules.js +0 -71
- package/dist/drafts/draft17/rules.js.map +0 -1
- package/dist/drafts/draft17/session-fsm.d.ts +0 -45
- package/dist/drafts/draft17/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft17/session-fsm.js +0 -328
- package/dist/drafts/draft17/session-fsm.js.map +0 -1
- package/dist/drafts/draft17/session.d.ts +0 -5
- package/dist/drafts/draft17/session.d.ts.map +0 -1
- package/dist/drafts/draft17/session.js +0 -6
- package/dist/drafts/draft17/session.js.map +0 -1
- package/dist/drafts/draft17/types.d.ts +0 -219
- package/dist/drafts/draft17/types.d.ts.map +0 -1
- package/dist/drafts/draft17/types.js +0 -3
- package/dist/drafts/draft17/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js.map +0 -1
- package/dist/types-QNXoxC9Y.d.cts +0 -236
- package/dist/types-QNXoxC9Y.d.ts +0 -236
- package/src/drafts/draft07/announce-fsm.ts +0 -2
- package/src/drafts/draft07/parameters.ts +0 -12
- package/src/drafts/draft07/subscription-fsm.ts +0 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { BufferReader } from
|
|
2
|
-
import { BufferWriter } from
|
|
3
|
-
import type { DecodeResult } from
|
|
4
|
-
import { DecodeError } from
|
|
1
|
+
import { BufferReader } from '../../core/buffer-reader.js'
|
|
2
|
+
import { BufferWriter } from '../../core/buffer-writer.js'
|
|
3
|
+
import type { DecodeResult } from '../../core/types.js'
|
|
4
|
+
import { DecodeError } from '../../core/types.js'
|
|
5
5
|
import type {
|
|
6
6
|
DatagramObject,
|
|
7
7
|
DataStreamEvent,
|
|
@@ -12,55 +12,55 @@ import type {
|
|
|
12
12
|
ObjectPayload,
|
|
13
13
|
SubgroupStream,
|
|
14
14
|
SubgroupStreamHeader,
|
|
15
|
-
} from
|
|
15
|
+
} from './types.js'
|
|
16
16
|
|
|
17
17
|
// ─── Data Stream Encoding/Decoding ─────────────────────────────────────────────
|
|
18
18
|
|
|
19
19
|
// Draft-15 subgroup stream types use 0x10-0x1D range.
|
|
20
20
|
// For MVP, we use 0x10 (subgroupId=0, no extensions, no endOfGroup, priority present).
|
|
21
|
-
const _SUBGROUP_STREAM_TYPE_SIMPLE = 0x10n
|
|
21
|
+
const _SUBGROUP_STREAM_TYPE_SIMPLE = 0x10n
|
|
22
22
|
// Draft-15 fetch stream type
|
|
23
|
-
const FETCH_STREAM_TYPE = 0x05n
|
|
23
|
+
const FETCH_STREAM_TYPE = 0x05n
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* Encode a subgroup stream header + objects.
|
|
27
27
|
* Uses the headerType from the stream to reproduce the exact wire type byte.
|
|
28
28
|
*/
|
|
29
29
|
export function encodeSubgroupStream(stream: SubgroupStream): Uint8Array {
|
|
30
|
-
const w = new BufferWriter()
|
|
31
|
-
const streamType = stream.headerType
|
|
32
|
-
w.writeVarInt(BigInt(streamType))
|
|
30
|
+
const w = new BufferWriter()
|
|
31
|
+
const streamType = stream.headerType
|
|
32
|
+
w.writeVarInt(BigInt(streamType))
|
|
33
33
|
|
|
34
|
-
const extensionsPresent = (streamType & 0x01) !== 0
|
|
35
|
-
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
36
|
-
const hasPriority = streamType < 0x30
|
|
34
|
+
const extensionsPresent = (streamType & 0x01) !== 0
|
|
35
|
+
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
36
|
+
const hasPriority = streamType < 0x30
|
|
37
37
|
|
|
38
|
-
w.writeVarInt(stream.trackAlias)
|
|
39
|
-
w.writeVarInt(stream.groupId)
|
|
38
|
+
w.writeVarInt(stream.trackAlias)
|
|
39
|
+
w.writeVarInt(stream.groupId)
|
|
40
40
|
if (hasSubgroupField) {
|
|
41
|
-
w.writeVarInt(stream.subgroupId)
|
|
41
|
+
w.writeVarInt(stream.subgroupId)
|
|
42
42
|
}
|
|
43
43
|
if (hasPriority) {
|
|
44
|
-
w.writeUint8(stream.publisherPriority)
|
|
44
|
+
w.writeUint8(stream.publisherPriority)
|
|
45
45
|
}
|
|
46
46
|
// Objects: delta-encoded object IDs
|
|
47
|
-
let prevObjectId = -1n
|
|
47
|
+
let prevObjectId = -1n
|
|
48
48
|
for (const obj of stream.objects) {
|
|
49
|
-
const delta = prevObjectId < 0n ? obj.objectId : obj.objectId - prevObjectId - 1n
|
|
50
|
-
w.writeVarInt(delta)
|
|
49
|
+
const delta = prevObjectId < 0n ? obj.objectId : obj.objectId - prevObjectId - 1n
|
|
50
|
+
w.writeVarInt(delta)
|
|
51
51
|
if (extensionsPresent) {
|
|
52
|
-
w.writeVarInt(BigInt(obj.extensionData.length))
|
|
53
|
-
if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData)
|
|
52
|
+
w.writeVarInt(BigInt(obj.extensionData.length))
|
|
53
|
+
if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData)
|
|
54
54
|
}
|
|
55
|
-
w.writeVarInt(obj.payloadLength)
|
|
55
|
+
w.writeVarInt(obj.payloadLength)
|
|
56
56
|
if (obj.payloadLength === 0) {
|
|
57
|
-
w.writeVarInt(obj.status ?? 0n)
|
|
57
|
+
w.writeVarInt(obj.status ?? 0n)
|
|
58
58
|
} else {
|
|
59
|
-
w.writeBytes(obj.payload)
|
|
59
|
+
w.writeBytes(obj.payload)
|
|
60
60
|
}
|
|
61
|
-
prevObjectId = obj.objectId
|
|
61
|
+
prevObjectId = obj.objectId
|
|
62
62
|
}
|
|
63
|
-
return w.finish()
|
|
63
|
+
return w.finish()
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
/**
|
|
@@ -68,61 +68,69 @@ export function encodeSubgroupStream(stream: SubgroupStream): Uint8Array {
|
|
|
68
68
|
* Uses type 0x00: Object ID present, priority present, no extensions, no EOG, payload.
|
|
69
69
|
*/
|
|
70
70
|
export function encodeDatagram(dg: DatagramObject): Uint8Array {
|
|
71
|
-
const w = new BufferWriter()
|
|
71
|
+
const w = new BufferWriter()
|
|
72
72
|
// Determine datagram type byte from fields
|
|
73
|
-
const dgType = dg.datagramType
|
|
74
|
-
w.writeVarInt(BigInt(dgType))
|
|
75
|
-
w.writeVarInt(dg.trackAlias)
|
|
76
|
-
w.writeVarInt(dg.groupId)
|
|
73
|
+
const dgType = dg.datagramType
|
|
74
|
+
w.writeVarInt(BigInt(dgType))
|
|
75
|
+
w.writeVarInt(dg.trackAlias)
|
|
76
|
+
w.writeVarInt(dg.groupId)
|
|
77
77
|
|
|
78
78
|
// Datagram type flags:
|
|
79
|
-
// bit
|
|
79
|
+
// bit 0 (0x01): extensions present
|
|
80
80
|
// bit 1 (0x02): end-of-group
|
|
81
|
+
// bit 2 (0x04): object_id ABSENT when set
|
|
81
82
|
// bit 5 (0x20): status (replaces payload)
|
|
82
|
-
const
|
|
83
|
-
const
|
|
83
|
+
const extensionsPresent = (dgType & 0x01) !== 0
|
|
84
|
+
const objectIdAbsent = (dgType & 0x04) !== 0
|
|
85
|
+
const isStatus = (dgType & 0x20) !== 0
|
|
84
86
|
|
|
85
87
|
if (!objectIdAbsent) {
|
|
86
|
-
w.writeVarInt(dg.objectId)
|
|
88
|
+
w.writeVarInt(dg.objectId)
|
|
89
|
+
}
|
|
90
|
+
w.writeUint8(dg.publisherPriority)
|
|
91
|
+
|
|
92
|
+
if (extensionsPresent) {
|
|
93
|
+
const extData = dg.extensionData ?? new Uint8Array(0)
|
|
94
|
+
w.writeVarInt(BigInt(extData.length))
|
|
95
|
+
if (extData.length > 0) w.writeBytes(extData)
|
|
87
96
|
}
|
|
88
|
-
w.writeUint8(dg.publisherPriority);
|
|
89
97
|
|
|
90
98
|
if (isStatus) {
|
|
91
|
-
w.writeVarInt(dg.objectStatus ?? 0n)
|
|
99
|
+
w.writeVarInt(dg.objectStatus ?? 0n)
|
|
92
100
|
} else {
|
|
93
|
-
w.writeBytes(dg.payload)
|
|
101
|
+
w.writeBytes(dg.payload)
|
|
94
102
|
}
|
|
95
|
-
return w.finish()
|
|
103
|
+
return w.finish()
|
|
96
104
|
}
|
|
97
105
|
|
|
98
106
|
/**
|
|
99
107
|
* Encode a fetch stream header + objects.
|
|
100
108
|
*/
|
|
101
109
|
export function encodeFetchStream(stream: FetchStream): Uint8Array {
|
|
102
|
-
const w = new BufferWriter()
|
|
103
|
-
w.writeVarInt(FETCH_STREAM_TYPE)
|
|
104
|
-
w.writeVarInt(stream.requestId)
|
|
110
|
+
const w = new BufferWriter()
|
|
111
|
+
w.writeVarInt(FETCH_STREAM_TYPE)
|
|
112
|
+
w.writeVarInt(stream.requestId)
|
|
105
113
|
for (const obj of stream.objects) {
|
|
106
|
-
w.writeUint8(obj.serializationFlags)
|
|
107
|
-
const flags = obj.serializationFlags
|
|
108
|
-
if (flags & 0x08) w.writeVarInt(obj.groupId)
|
|
114
|
+
w.writeUint8(obj.serializationFlags)
|
|
115
|
+
const flags = obj.serializationFlags
|
|
116
|
+
if (flags & 0x08) w.writeVarInt(obj.groupId)
|
|
109
117
|
// subgroup encoding: bits 0-1
|
|
110
|
-
const subgroupEncoding = flags & 0x03
|
|
111
|
-
if (subgroupEncoding === 0x03) w.writeVarInt(obj.subgroupId)
|
|
112
|
-
if (flags & 0x04) w.writeVarInt(obj.objectId)
|
|
113
|
-
if (flags & 0x10) w.writeUint8(obj.publisherPriority)
|
|
118
|
+
const subgroupEncoding = flags & 0x03
|
|
119
|
+
if (subgroupEncoding === 0x03) w.writeVarInt(obj.subgroupId)
|
|
120
|
+
if (flags & 0x04) w.writeVarInt(obj.objectId)
|
|
121
|
+
if (flags & 0x10) w.writeUint8(obj.publisherPriority)
|
|
114
122
|
if (flags & 0x20) {
|
|
115
|
-
w.writeVarInt(BigInt(obj.extensionData.length))
|
|
116
|
-
if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData)
|
|
123
|
+
w.writeVarInt(BigInt(obj.extensionData.length))
|
|
124
|
+
if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData)
|
|
117
125
|
}
|
|
118
|
-
w.writeVarInt(obj.payloadLength)
|
|
126
|
+
w.writeVarInt(obj.payloadLength)
|
|
119
127
|
if (obj.payloadLength === 0) {
|
|
120
|
-
w.writeVarInt(obj.status ?? 0n)
|
|
128
|
+
w.writeVarInt(obj.status ?? 0n)
|
|
121
129
|
} else {
|
|
122
|
-
w.writeBytes(obj.payload)
|
|
130
|
+
w.writeBytes(obj.payload)
|
|
123
131
|
}
|
|
124
132
|
}
|
|
125
|
-
return w.finish()
|
|
133
|
+
return w.finish()
|
|
126
134
|
}
|
|
127
135
|
|
|
128
136
|
/**
|
|
@@ -130,100 +138,113 @@ export function encodeFetchStream(stream: FetchStream): Uint8Array {
|
|
|
130
138
|
*/
|
|
131
139
|
export function decodeSubgroupStream(bytes: Uint8Array): DecodeResult<SubgroupStream> {
|
|
132
140
|
try {
|
|
133
|
-
const r = new BufferReader(bytes)
|
|
134
|
-
const streamType = Number(r.readVarInt())
|
|
141
|
+
const r = new BufferReader(bytes)
|
|
142
|
+
const streamType = Number(r.readVarInt())
|
|
135
143
|
|
|
136
|
-
//
|
|
144
|
+
// Draft-15 valid subgroup types: 0x10-0x17, 0x30-0x37
|
|
145
|
+
// bit 0: extensions, bit 1: end-of-group, bit 2: explicit subgroup_id
|
|
137
146
|
if (
|
|
138
|
-
!((streamType >= 0x10 && streamType <=
|
|
139
|
-
(streamType & 0x06) === 0x06 // reserved SUBGROUP_ID_MODE (bits 2:1 = 0b11)
|
|
147
|
+
!((streamType >= 0x10 && streamType <= 0x17) || (streamType >= 0x30 && streamType <= 0x37))
|
|
140
148
|
) {
|
|
141
149
|
return {
|
|
142
150
|
ok: false,
|
|
143
151
|
error: new DecodeError(
|
|
144
|
-
|
|
145
|
-
`Expected subgroup stream type 0x10-
|
|
152
|
+
'CONSTRAINT_VIOLATION',
|
|
153
|
+
`Expected subgroup stream type 0x10-0x17/0x30-0x37, got 0x${streamType.toString(16)}`,
|
|
146
154
|
0,
|
|
147
155
|
),
|
|
148
|
-
}
|
|
156
|
+
}
|
|
149
157
|
}
|
|
150
158
|
|
|
151
159
|
// Decode type flags
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
const
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
160
|
+
// Draft-15 bit layout:
|
|
161
|
+
// bit 0: extensions present
|
|
162
|
+
// bit 1: end-of-group
|
|
163
|
+
// bit 2: explicit subgroup_id field present
|
|
164
|
+
// bit 5 (0x20): no priority (>= 0x30)
|
|
165
|
+
const extensionsPresent = (streamType & 0x01) !== 0
|
|
166
|
+
const endOfGroup = (streamType & 0x02) !== 0
|
|
167
|
+
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
168
|
+
const hasPriority = streamType < 0x30
|
|
169
|
+
|
|
170
|
+
const trackAlias = r.readVarInt()
|
|
171
|
+
const groupId = r.readVarInt()
|
|
172
|
+
|
|
173
|
+
let subgroupId = 0n
|
|
161
174
|
if (hasSubgroupField) {
|
|
162
|
-
subgroupId = r.readVarInt()
|
|
175
|
+
subgroupId = r.readVarInt()
|
|
163
176
|
}
|
|
164
177
|
|
|
165
|
-
let publisherPriority = 128
|
|
178
|
+
let publisherPriority = 128 // default
|
|
166
179
|
if (hasPriority) {
|
|
167
|
-
publisherPriority = r.readUint8()
|
|
180
|
+
publisherPriority = r.readUint8()
|
|
168
181
|
}
|
|
169
182
|
|
|
170
|
-
const objects: ObjectPayload[] = []
|
|
171
|
-
let prevObjectId = -1n
|
|
172
|
-
let firstObject = true
|
|
183
|
+
const objects: ObjectPayload[] = []
|
|
184
|
+
let prevObjectId = -1n
|
|
185
|
+
let firstObject = true
|
|
173
186
|
|
|
174
187
|
while (r.remaining > 0) {
|
|
175
|
-
const byteOffset = r.offset
|
|
176
|
-
const delta = r.readVarInt()
|
|
177
|
-
let objectId: bigint
|
|
188
|
+
const byteOffset = r.offset
|
|
189
|
+
const delta = r.readVarInt()
|
|
190
|
+
let objectId: bigint
|
|
178
191
|
if (firstObject) {
|
|
179
|
-
objectId = delta
|
|
180
|
-
|
|
181
|
-
subgroupId = objectId;
|
|
182
|
-
}
|
|
183
|
-
firstObject = false;
|
|
192
|
+
objectId = delta
|
|
193
|
+
firstObject = false
|
|
184
194
|
} else {
|
|
185
|
-
objectId = prevObjectId + 1n + delta
|
|
195
|
+
objectId = prevObjectId + 1n + delta
|
|
186
196
|
}
|
|
187
|
-
let extensionData = new Uint8Array(0)
|
|
197
|
+
let extensionData = new Uint8Array(0)
|
|
188
198
|
if (extensionsPresent) {
|
|
189
|
-
const extLen = Number(r.readVarInt())
|
|
190
|
-
extensionData = extLen > 0 ? r.
|
|
199
|
+
const extLen = Number(r.readVarInt())
|
|
200
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0)
|
|
191
201
|
}
|
|
192
|
-
const payloadLength = Number(r.readVarInt())
|
|
193
|
-
let payload: Uint8Array
|
|
194
|
-
let status: bigint | undefined
|
|
195
|
-
let payloadByteOffset: number
|
|
202
|
+
const payloadLength = Number(r.readVarInt())
|
|
203
|
+
let payload: Uint8Array
|
|
204
|
+
let status: bigint | undefined
|
|
205
|
+
let payloadByteOffset: number
|
|
196
206
|
if (payloadLength === 0) {
|
|
197
207
|
// When payload_length is 0, an object status varint follows
|
|
198
|
-
status = r.readVarInt()
|
|
199
|
-
payloadByteOffset = r.offset
|
|
200
|
-
payload = new Uint8Array(0)
|
|
208
|
+
status = r.readVarInt()
|
|
209
|
+
payloadByteOffset = r.offset
|
|
210
|
+
payload = new Uint8Array(0)
|
|
201
211
|
} else {
|
|
202
|
-
payloadByteOffset = r.offset
|
|
203
|
-
payload = r.
|
|
212
|
+
payloadByteOffset = r.offset
|
|
213
|
+
payload = r.readBytesView(payloadLength)
|
|
204
214
|
}
|
|
205
|
-
const obj: ObjectPayload = {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
215
|
+
const obj: ObjectPayload = {
|
|
216
|
+
type: 'object',
|
|
217
|
+
byteOffset,
|
|
218
|
+
payloadByteOffset,
|
|
219
|
+
objectId,
|
|
220
|
+
payloadLength,
|
|
221
|
+
extensionData,
|
|
222
|
+
payload,
|
|
223
|
+
}
|
|
224
|
+
if (status !== undefined) (obj as unknown as Record<string, unknown>).status = status
|
|
225
|
+
objects.push(obj)
|
|
226
|
+
prevObjectId = objectId
|
|
209
227
|
}
|
|
210
228
|
|
|
229
|
+
const result: SubgroupStream = {
|
|
230
|
+
type: 'subgroup',
|
|
231
|
+
headerType: streamType,
|
|
232
|
+
trackAlias,
|
|
233
|
+
groupId,
|
|
234
|
+
subgroupId,
|
|
235
|
+
publisherPriority,
|
|
236
|
+
objects,
|
|
237
|
+
}
|
|
238
|
+
if (endOfGroup) (result as unknown as Record<string, unknown>).endOfGroup = true
|
|
239
|
+
|
|
211
240
|
return {
|
|
212
241
|
ok: true,
|
|
213
|
-
value:
|
|
214
|
-
type: "subgroup",
|
|
215
|
-
headerType: streamType,
|
|
216
|
-
trackAlias,
|
|
217
|
-
groupId,
|
|
218
|
-
subgroupId,
|
|
219
|
-
publisherPriority,
|
|
220
|
-
objects,
|
|
221
|
-
},
|
|
242
|
+
value: result,
|
|
222
243
|
bytesRead: r.offset,
|
|
223
|
-
}
|
|
244
|
+
}
|
|
224
245
|
} catch (e) {
|
|
225
|
-
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
226
|
-
throw e
|
|
246
|
+
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
247
|
+
throw e
|
|
227
248
|
}
|
|
228
249
|
}
|
|
229
250
|
|
|
@@ -232,37 +253,45 @@ export function decodeSubgroupStream(bytes: Uint8Array): DecodeResult<SubgroupSt
|
|
|
232
253
|
*/
|
|
233
254
|
export function decodeDatagram(bytes: Uint8Array): DecodeResult<DatagramObject> {
|
|
234
255
|
try {
|
|
235
|
-
const r = new BufferReader(bytes)
|
|
236
|
-
const dgType = Number(r.readVarInt())
|
|
256
|
+
const r = new BufferReader(bytes)
|
|
257
|
+
const dgType = Number(r.readVarInt())
|
|
237
258
|
|
|
238
259
|
// Datagram type flags:
|
|
239
|
-
// bit
|
|
260
|
+
// bit 0 (0x01): extensions present
|
|
240
261
|
// bit 1 (0x02): end-of-group
|
|
262
|
+
// bit 2 (0x04): object_id ABSENT when set
|
|
241
263
|
// bit 5 (0x20): status (replaces payload with status varint)
|
|
242
|
-
const
|
|
243
|
-
const
|
|
244
|
-
const
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
const
|
|
248
|
-
|
|
264
|
+
const extensionsPresent = (dgType & 0x01) !== 0
|
|
265
|
+
const objectIdAbsent = (dgType & 0x04) !== 0
|
|
266
|
+
const endOfGroup = (dgType & 0x02) !== 0
|
|
267
|
+
const isStatus = (dgType & 0x20) !== 0
|
|
268
|
+
|
|
269
|
+
const trackAlias = r.readVarInt()
|
|
270
|
+
const groupId = r.readVarInt()
|
|
271
|
+
let objectId = 0n
|
|
249
272
|
if (!objectIdAbsent) {
|
|
250
|
-
objectId = r.readVarInt()
|
|
273
|
+
objectId = r.readVarInt()
|
|
274
|
+
}
|
|
275
|
+
const publisherPriority = r.readUint8()
|
|
276
|
+
|
|
277
|
+
let extensionData: Uint8Array | undefined
|
|
278
|
+
if (extensionsPresent) {
|
|
279
|
+
const extLen = Number(r.readVarInt())
|
|
280
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0)
|
|
251
281
|
}
|
|
252
|
-
const publisherPriority = r.readUint8();
|
|
253
282
|
|
|
254
|
-
let objectStatus: bigint | undefined
|
|
255
|
-
let payload: Uint8Array
|
|
283
|
+
let objectStatus: bigint | undefined
|
|
284
|
+
let payload: Uint8Array
|
|
256
285
|
if (isStatus) {
|
|
257
|
-
objectStatus = r.readVarInt()
|
|
258
|
-
payload = new Uint8Array(0)
|
|
286
|
+
objectStatus = r.readVarInt()
|
|
287
|
+
payload = new Uint8Array(0)
|
|
259
288
|
} else {
|
|
260
|
-
payload = r.
|
|
289
|
+
payload = r.readBytesView(r.remaining)
|
|
261
290
|
}
|
|
262
|
-
const payloadLength = payload.byteLength
|
|
291
|
+
const payloadLength = payload.byteLength
|
|
263
292
|
|
|
264
293
|
const result: DatagramObject = {
|
|
265
|
-
type:
|
|
294
|
+
type: 'datagram',
|
|
266
295
|
datagramType: dgType,
|
|
267
296
|
trackAlias,
|
|
268
297
|
groupId,
|
|
@@ -270,16 +299,18 @@ export function decodeDatagram(bytes: Uint8Array): DecodeResult<DatagramObject>
|
|
|
270
299
|
publisherPriority,
|
|
271
300
|
payloadLength,
|
|
272
301
|
payload,
|
|
273
|
-
}
|
|
302
|
+
}
|
|
274
303
|
|
|
275
|
-
if (endOfGroup) (result as unknown as Record<string, unknown>).endOfGroup = true
|
|
304
|
+
if (endOfGroup) (result as unknown as Record<string, unknown>).endOfGroup = true
|
|
276
305
|
if (objectStatus !== undefined)
|
|
277
|
-
(result as unknown as Record<string, unknown>).objectStatus = objectStatus
|
|
306
|
+
(result as unknown as Record<string, unknown>).objectStatus = objectStatus
|
|
307
|
+
if (extensionData !== undefined)
|
|
308
|
+
(result as unknown as Record<string, unknown>).extensionData = extensionData
|
|
278
309
|
|
|
279
|
-
return { ok: true, value: result, bytesRead: r.offset }
|
|
310
|
+
return { ok: true, value: result, bytesRead: r.offset }
|
|
280
311
|
} catch (e) {
|
|
281
|
-
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
282
|
-
throw e
|
|
312
|
+
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
313
|
+
throw e
|
|
283
314
|
}
|
|
284
315
|
}
|
|
285
316
|
|
|
@@ -288,131 +319,131 @@ export function decodeDatagram(bytes: Uint8Array): DecodeResult<DatagramObject>
|
|
|
288
319
|
*/
|
|
289
320
|
export function decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream> {
|
|
290
321
|
try {
|
|
291
|
-
const r = new BufferReader(bytes)
|
|
292
|
-
const streamType = r.readVarInt()
|
|
322
|
+
const r = new BufferReader(bytes)
|
|
323
|
+
const streamType = r.readVarInt()
|
|
293
324
|
if (streamType !== FETCH_STREAM_TYPE) {
|
|
294
325
|
return {
|
|
295
326
|
ok: false,
|
|
296
327
|
error: new DecodeError(
|
|
297
|
-
|
|
328
|
+
'CONSTRAINT_VIOLATION',
|
|
298
329
|
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
299
330
|
0,
|
|
300
331
|
),
|
|
301
|
-
}
|
|
332
|
+
}
|
|
302
333
|
}
|
|
303
|
-
const requestId = r.readVarInt()
|
|
304
|
-
const objects: FetchObjectPayload[] = []
|
|
334
|
+
const requestId = r.readVarInt()
|
|
335
|
+
const objects: FetchObjectPayload[] = []
|
|
305
336
|
|
|
306
|
-
let prevGroupId = 0n
|
|
307
|
-
let prevSubgroupId = 0n
|
|
308
|
-
let prevObjectId = 0n
|
|
309
|
-
let prevPriority = 128
|
|
310
|
-
let first = true
|
|
337
|
+
let prevGroupId = 0n
|
|
338
|
+
let prevSubgroupId = 0n
|
|
339
|
+
let prevObjectId = 0n
|
|
340
|
+
let prevPriority = 128
|
|
341
|
+
let first = true
|
|
311
342
|
|
|
312
343
|
while (r.remaining > 0) {
|
|
313
|
-
const byteOffset = r.offset
|
|
314
|
-
const flags = r.readUint8()
|
|
315
|
-
const subgroupEncoding = flags & 0x03
|
|
316
|
-
const objectIdPresent = (flags & 0x04) !== 0
|
|
317
|
-
const groupIdPresent = (flags & 0x08) !== 0
|
|
318
|
-
const priorityPresent = (flags & 0x10) !== 0
|
|
319
|
-
const extensionsPresent = (flags & 0x20) !== 0
|
|
344
|
+
const byteOffset = r.offset
|
|
345
|
+
const flags = r.readUint8()
|
|
346
|
+
const subgroupEncoding = flags & 0x03
|
|
347
|
+
const objectIdPresent = (flags & 0x04) !== 0
|
|
348
|
+
const groupIdPresent = (flags & 0x08) !== 0
|
|
349
|
+
const priorityPresent = (flags & 0x10) !== 0
|
|
350
|
+
const extensionsPresent = (flags & 0x20) !== 0
|
|
320
351
|
|
|
321
352
|
if (flags & 0xc0) {
|
|
322
353
|
return {
|
|
323
354
|
ok: false,
|
|
324
355
|
error: new DecodeError(
|
|
325
|
-
|
|
326
|
-
|
|
356
|
+
'CONSTRAINT_VIOLATION',
|
|
357
|
+
'Reserved bits set in fetch object flags',
|
|
327
358
|
r.offset,
|
|
328
359
|
),
|
|
329
|
-
}
|
|
360
|
+
}
|
|
330
361
|
}
|
|
331
362
|
|
|
332
|
-
let groupId = prevGroupId
|
|
363
|
+
let groupId = prevGroupId
|
|
333
364
|
if (groupIdPresent) {
|
|
334
|
-
groupId = r.readVarInt()
|
|
365
|
+
groupId = r.readVarInt()
|
|
335
366
|
} else if (first) {
|
|
336
367
|
return {
|
|
337
368
|
ok: false,
|
|
338
369
|
error: new DecodeError(
|
|
339
|
-
|
|
340
|
-
|
|
370
|
+
'CONSTRAINT_VIOLATION',
|
|
371
|
+
'First fetch object must include groupId',
|
|
341
372
|
r.offset,
|
|
342
373
|
),
|
|
343
|
-
}
|
|
374
|
+
}
|
|
344
375
|
}
|
|
345
376
|
|
|
346
|
-
let subgroupId: bigint
|
|
377
|
+
let subgroupId: bigint
|
|
347
378
|
if (subgroupEncoding === 0x00) {
|
|
348
|
-
subgroupId = 0n
|
|
379
|
+
subgroupId = 0n
|
|
349
380
|
} else if (subgroupEncoding === 0x01) {
|
|
350
381
|
if (first) {
|
|
351
382
|
return {
|
|
352
383
|
ok: false,
|
|
353
384
|
error: new DecodeError(
|
|
354
|
-
|
|
355
|
-
|
|
385
|
+
'CONSTRAINT_VIOLATION',
|
|
386
|
+
'First fetch object cannot reference prior subgroupId',
|
|
356
387
|
r.offset,
|
|
357
388
|
),
|
|
358
|
-
}
|
|
389
|
+
}
|
|
359
390
|
}
|
|
360
|
-
subgroupId = prevSubgroupId
|
|
391
|
+
subgroupId = prevSubgroupId
|
|
361
392
|
} else if (subgroupEncoding === 0x02) {
|
|
362
393
|
if (first) {
|
|
363
394
|
return {
|
|
364
395
|
ok: false,
|
|
365
396
|
error: new DecodeError(
|
|
366
|
-
|
|
367
|
-
|
|
397
|
+
'CONSTRAINT_VIOLATION',
|
|
398
|
+
'First fetch object cannot reference prior subgroupId',
|
|
368
399
|
r.offset,
|
|
369
400
|
),
|
|
370
|
-
}
|
|
401
|
+
}
|
|
371
402
|
}
|
|
372
|
-
subgroupId = prevSubgroupId + 1n
|
|
403
|
+
subgroupId = prevSubgroupId + 1n
|
|
373
404
|
} else {
|
|
374
|
-
subgroupId = r.readVarInt()
|
|
405
|
+
subgroupId = r.readVarInt()
|
|
375
406
|
}
|
|
376
407
|
|
|
377
|
-
let objectId = prevObjectId + 1n
|
|
408
|
+
let objectId = prevObjectId + 1n
|
|
378
409
|
if (objectIdPresent) {
|
|
379
|
-
objectId = r.readVarInt()
|
|
410
|
+
objectId = r.readVarInt()
|
|
380
411
|
} else if (first) {
|
|
381
412
|
return {
|
|
382
413
|
ok: false,
|
|
383
414
|
error: new DecodeError(
|
|
384
|
-
|
|
385
|
-
|
|
415
|
+
'CONSTRAINT_VIOLATION',
|
|
416
|
+
'First fetch object must include objectId',
|
|
386
417
|
r.offset,
|
|
387
418
|
),
|
|
388
|
-
}
|
|
419
|
+
}
|
|
389
420
|
}
|
|
390
421
|
|
|
391
422
|
if (priorityPresent) {
|
|
392
|
-
prevPriority = r.readUint8()
|
|
423
|
+
prevPriority = r.readUint8()
|
|
393
424
|
}
|
|
394
425
|
|
|
395
|
-
let extensionData = new Uint8Array(0)
|
|
426
|
+
let extensionData = new Uint8Array(0)
|
|
396
427
|
if (extensionsPresent) {
|
|
397
|
-
const extLen = Number(r.readVarInt())
|
|
398
|
-
extensionData = extLen > 0 ? r.
|
|
428
|
+
const extLen = Number(r.readVarInt())
|
|
429
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0)
|
|
399
430
|
}
|
|
400
431
|
|
|
401
|
-
const payloadLength = Number(r.readVarInt())
|
|
402
|
-
let payload: Uint8Array
|
|
403
|
-
let status: bigint | undefined
|
|
404
|
-
let payloadByteOffset: number
|
|
432
|
+
const payloadLength = Number(r.readVarInt())
|
|
433
|
+
let payload: Uint8Array
|
|
434
|
+
let status: bigint | undefined
|
|
435
|
+
let payloadByteOffset: number
|
|
405
436
|
if (payloadLength > 0) {
|
|
406
|
-
payloadByteOffset = r.offset
|
|
407
|
-
payload = r.
|
|
437
|
+
payloadByteOffset = r.offset
|
|
438
|
+
payload = r.readBytesView(payloadLength)
|
|
408
439
|
} else {
|
|
409
|
-
status = r.readVarInt()
|
|
410
|
-
payloadByteOffset = r.offset
|
|
411
|
-
payload = new Uint8Array(0)
|
|
440
|
+
status = r.readVarInt()
|
|
441
|
+
payloadByteOffset = r.offset
|
|
442
|
+
payload = new Uint8Array(0)
|
|
412
443
|
}
|
|
413
444
|
|
|
414
445
|
const obj: FetchObjectPayload = {
|
|
415
|
-
type:
|
|
446
|
+
type: 'object',
|
|
416
447
|
byteOffset,
|
|
417
448
|
payloadByteOffset,
|
|
418
449
|
serializationFlags: flags,
|
|
@@ -423,24 +454,24 @@ export function decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream>
|
|
|
423
454
|
payloadLength,
|
|
424
455
|
extensionData,
|
|
425
456
|
payload,
|
|
426
|
-
}
|
|
427
|
-
if (status !== undefined) (obj as unknown as Record<string, unknown>).status = status
|
|
428
|
-
objects.push(obj)
|
|
429
|
-
|
|
430
|
-
prevGroupId = groupId
|
|
431
|
-
prevSubgroupId = subgroupId
|
|
432
|
-
prevObjectId = objectId
|
|
433
|
-
first = false
|
|
457
|
+
}
|
|
458
|
+
if (status !== undefined) (obj as unknown as Record<string, unknown>).status = status
|
|
459
|
+
objects.push(obj)
|
|
460
|
+
|
|
461
|
+
prevGroupId = groupId
|
|
462
|
+
prevSubgroupId = subgroupId
|
|
463
|
+
prevObjectId = objectId
|
|
464
|
+
first = false
|
|
434
465
|
}
|
|
435
466
|
|
|
436
467
|
return {
|
|
437
468
|
ok: true,
|
|
438
|
-
value: { type:
|
|
469
|
+
value: { type: 'fetch', requestId, objects },
|
|
439
470
|
bytesRead: r.offset,
|
|
440
|
-
}
|
|
471
|
+
}
|
|
441
472
|
} catch (e) {
|
|
442
|
-
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
443
|
-
throw e
|
|
473
|
+
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
474
|
+
throw e
|
|
444
475
|
}
|
|
445
476
|
}
|
|
446
477
|
|
|
@@ -448,19 +479,19 @@ export function decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream>
|
|
|
448
479
|
* Decode a data stream, dispatching by stream type.
|
|
449
480
|
*/
|
|
450
481
|
export function decodeDataStream(
|
|
451
|
-
streamType:
|
|
482
|
+
streamType: 'subgroup' | 'datagram' | 'fetch',
|
|
452
483
|
bytes: Uint8Array,
|
|
453
484
|
): DecodeResult<Draft15DataStream> {
|
|
454
485
|
switch (streamType) {
|
|
455
|
-
case
|
|
456
|
-
return decodeSubgroupStream(bytes)
|
|
457
|
-
case
|
|
458
|
-
return decodeDatagram(bytes)
|
|
459
|
-
case
|
|
460
|
-
return decodeFetchStream(bytes)
|
|
486
|
+
case 'subgroup':
|
|
487
|
+
return decodeSubgroupStream(bytes)
|
|
488
|
+
case 'datagram':
|
|
489
|
+
return decodeDatagram(bytes)
|
|
490
|
+
case 'fetch':
|
|
491
|
+
return decodeFetchStream(bytes)
|
|
461
492
|
default: {
|
|
462
|
-
const _exhaustive: never = streamType
|
|
463
|
-
throw new Error(`Unknown stream type: ${_exhaustive}`)
|
|
493
|
+
const _exhaustive: never = streamType
|
|
494
|
+
throw new Error(`Unknown stream type: ${_exhaustive}`)
|
|
464
495
|
}
|
|
465
496
|
}
|
|
466
497
|
}
|
|
@@ -474,117 +505,131 @@ export function createSubgroupStreamDecoder(): TransformStream<
|
|
|
474
505
|
Uint8Array,
|
|
475
506
|
SubgroupStreamHeader | ObjectPayload
|
|
476
507
|
> {
|
|
477
|
-
let buffer = new Uint8Array(0)
|
|
478
|
-
let
|
|
479
|
-
let
|
|
480
|
-
let
|
|
481
|
-
let
|
|
482
|
-
let
|
|
508
|
+
let buffer = new Uint8Array(0)
|
|
509
|
+
let offset = 0
|
|
510
|
+
let headerEmitted = false
|
|
511
|
+
let prevObjectId = -1n
|
|
512
|
+
let firstObject = true
|
|
513
|
+
let _subgroupIsFirstObjId = false
|
|
514
|
+
let _extensionsPresent = false
|
|
483
515
|
|
|
484
516
|
return new TransformStream<Uint8Array, SubgroupStreamHeader | ObjectPayload>({
|
|
485
517
|
transform(chunk, controller) {
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
518
|
+
if (offset > 0) {
|
|
519
|
+
buffer = buffer.subarray(offset)
|
|
520
|
+
offset = 0
|
|
521
|
+
}
|
|
522
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length)
|
|
523
|
+
newBuffer.set(buffer, 0)
|
|
524
|
+
newBuffer.set(chunk, buffer.length)
|
|
525
|
+
buffer = newBuffer
|
|
490
526
|
|
|
491
527
|
if (!headerEmitted) {
|
|
492
528
|
try {
|
|
493
|
-
const r = new BufferReader(buffer)
|
|
494
|
-
const streamType = Number(r.readVarInt())
|
|
529
|
+
const r = new BufferReader(buffer.subarray(offset))
|
|
530
|
+
const streamType = Number(r.readVarInt())
|
|
495
531
|
|
|
496
532
|
if (
|
|
497
533
|
!(
|
|
498
|
-
(streamType >= 0x10 && streamType <=
|
|
499
|
-
(streamType >= 0x30 && streamType <=
|
|
534
|
+
(streamType >= 0x10 && streamType <= 0x17) ||
|
|
535
|
+
(streamType >= 0x30 && streamType <= 0x37)
|
|
500
536
|
)
|
|
501
537
|
) {
|
|
502
538
|
controller.error(
|
|
503
539
|
new DecodeError(
|
|
504
|
-
|
|
540
|
+
'CONSTRAINT_VIOLATION',
|
|
505
541
|
`Expected subgroup stream type, got 0x${streamType.toString(16)}`,
|
|
506
542
|
0,
|
|
507
543
|
),
|
|
508
|
-
)
|
|
509
|
-
return
|
|
544
|
+
)
|
|
545
|
+
return
|
|
510
546
|
}
|
|
511
547
|
|
|
512
|
-
_extensionsPresent = (streamType & 0x01) !== 0
|
|
513
|
-
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
514
|
-
|
|
515
|
-
|
|
548
|
+
_extensionsPresent = (streamType & 0x01) !== 0
|
|
549
|
+
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
550
|
+
// Draft-15: bit 1 = end_of_group (not subgroupIsFirstObjId)
|
|
551
|
+
_subgroupIsFirstObjId = false
|
|
552
|
+
const hasPriority = streamType < 0x30
|
|
516
553
|
|
|
517
|
-
const trackAlias = r.readVarInt()
|
|
518
|
-
const groupId = r.readVarInt()
|
|
554
|
+
const trackAlias = r.readVarInt()
|
|
555
|
+
const groupId = r.readVarInt()
|
|
519
556
|
|
|
520
|
-
let subgroupId = 0n
|
|
557
|
+
let subgroupId = 0n
|
|
521
558
|
if (hasSubgroupField) {
|
|
522
|
-
subgroupId = r.readVarInt()
|
|
559
|
+
subgroupId = r.readVarInt()
|
|
523
560
|
}
|
|
524
561
|
|
|
525
|
-
let publisherPriority = 128
|
|
562
|
+
let publisherPriority = 128
|
|
526
563
|
if (hasPriority) {
|
|
527
|
-
publisherPriority = r.readUint8()
|
|
564
|
+
publisherPriority = r.readUint8()
|
|
528
565
|
}
|
|
529
566
|
|
|
530
567
|
controller.enqueue({
|
|
531
|
-
type:
|
|
568
|
+
type: 'subgroup_header',
|
|
532
569
|
trackAlias,
|
|
533
570
|
groupId,
|
|
534
571
|
subgroupId,
|
|
535
572
|
publisherPriority,
|
|
536
|
-
})
|
|
537
|
-
headerEmitted = true
|
|
538
|
-
|
|
573
|
+
})
|
|
574
|
+
headerEmitted = true
|
|
575
|
+
offset += r.offset
|
|
539
576
|
} catch (e) {
|
|
540
|
-
if (e instanceof DecodeError && e.code ===
|
|
541
|
-
return
|
|
577
|
+
if (e instanceof DecodeError && e.code === 'UNEXPECTED_END') {
|
|
578
|
+
return
|
|
542
579
|
}
|
|
543
|
-
controller.error(e)
|
|
544
|
-
return
|
|
580
|
+
controller.error(e)
|
|
581
|
+
return
|
|
545
582
|
}
|
|
546
583
|
}
|
|
547
584
|
|
|
548
585
|
// Parse objects with delta-encoded IDs
|
|
549
|
-
while (buffer.length
|
|
586
|
+
while (offset < buffer.length) {
|
|
550
587
|
try {
|
|
551
|
-
const r = new BufferReader(buffer)
|
|
552
|
-
const byteOffset = r.offset
|
|
553
|
-
const delta = r.readVarInt()
|
|
554
|
-
let objectId: bigint
|
|
588
|
+
const r = new BufferReader(buffer.subarray(offset))
|
|
589
|
+
const byteOffset = r.offset
|
|
590
|
+
const delta = r.readVarInt()
|
|
591
|
+
let objectId: bigint
|
|
555
592
|
if (firstObject) {
|
|
556
|
-
objectId = delta
|
|
557
|
-
firstObject = false
|
|
593
|
+
objectId = delta
|
|
594
|
+
firstObject = false
|
|
558
595
|
} else {
|
|
559
|
-
objectId = prevObjectId + 1n + delta
|
|
596
|
+
objectId = prevObjectId + 1n + delta
|
|
560
597
|
}
|
|
561
|
-
let extensionData = new Uint8Array(0)
|
|
598
|
+
let extensionData = new Uint8Array(0)
|
|
562
599
|
if (_extensionsPresent) {
|
|
563
|
-
const extLen = Number(r.readVarInt())
|
|
564
|
-
extensionData = extLen > 0 ? r.
|
|
600
|
+
const extLen = Number(r.readVarInt())
|
|
601
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0)
|
|
565
602
|
}
|
|
566
|
-
const payloadLength = Number(r.readVarInt())
|
|
567
|
-
const payloadByteOffset = r.offset
|
|
568
|
-
const payload = payloadLength > 0 ? r.
|
|
569
|
-
controller.enqueue({
|
|
570
|
-
|
|
571
|
-
|
|
603
|
+
const payloadLength = Number(r.readVarInt())
|
|
604
|
+
const payloadByteOffset = r.offset
|
|
605
|
+
const payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0)
|
|
606
|
+
controller.enqueue({
|
|
607
|
+
type: 'object',
|
|
608
|
+
byteOffset,
|
|
609
|
+
payloadByteOffset,
|
|
610
|
+
objectId,
|
|
611
|
+
payloadLength,
|
|
612
|
+
extensionData,
|
|
613
|
+
payload,
|
|
614
|
+
})
|
|
615
|
+
offset += r.offset
|
|
616
|
+
prevObjectId = objectId
|
|
572
617
|
} catch (e) {
|
|
573
|
-
if (e instanceof DecodeError && e.code ===
|
|
574
|
-
break
|
|
618
|
+
if (e instanceof DecodeError && e.code === 'UNEXPECTED_END') {
|
|
619
|
+
break
|
|
575
620
|
}
|
|
576
|
-
controller.error(e)
|
|
577
|
-
return
|
|
621
|
+
controller.error(e)
|
|
622
|
+
return
|
|
578
623
|
}
|
|
579
624
|
}
|
|
580
625
|
},
|
|
581
626
|
|
|
582
627
|
flush(controller) {
|
|
583
|
-
if (buffer.length
|
|
584
|
-
controller.error(new DecodeError(
|
|
628
|
+
if (offset < buffer.length) {
|
|
629
|
+
controller.error(new DecodeError('UNEXPECTED_END', 'Stream ended with incomplete data', 0))
|
|
585
630
|
}
|
|
586
631
|
},
|
|
587
|
-
})
|
|
632
|
+
})
|
|
588
633
|
}
|
|
589
634
|
|
|
590
635
|
/**
|
|
@@ -594,127 +639,145 @@ export function createFetchStreamDecoder(): TransformStream<
|
|
|
594
639
|
Uint8Array,
|
|
595
640
|
FetchStreamHeader | ObjectPayload
|
|
596
641
|
> {
|
|
597
|
-
let buffer = new Uint8Array(0)
|
|
598
|
-
let
|
|
642
|
+
let buffer = new Uint8Array(0)
|
|
643
|
+
let offset = 0
|
|
644
|
+
let headerEmitted = false
|
|
599
645
|
|
|
600
646
|
return new TransformStream<Uint8Array, FetchStreamHeader | ObjectPayload>({
|
|
601
647
|
transform(chunk, controller) {
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
648
|
+
if (offset > 0) {
|
|
649
|
+
buffer = buffer.subarray(offset)
|
|
650
|
+
offset = 0
|
|
651
|
+
}
|
|
652
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length)
|
|
653
|
+
newBuffer.set(buffer, 0)
|
|
654
|
+
newBuffer.set(chunk, buffer.length)
|
|
655
|
+
buffer = newBuffer
|
|
606
656
|
|
|
607
657
|
if (!headerEmitted) {
|
|
608
658
|
try {
|
|
609
|
-
const r = new BufferReader(buffer)
|
|
610
|
-
const streamType = r.readVarInt()
|
|
659
|
+
const r = new BufferReader(buffer.subarray(offset))
|
|
660
|
+
const streamType = r.readVarInt()
|
|
611
661
|
if (streamType !== FETCH_STREAM_TYPE) {
|
|
612
662
|
controller.error(
|
|
613
663
|
new DecodeError(
|
|
614
|
-
|
|
664
|
+
'CONSTRAINT_VIOLATION',
|
|
615
665
|
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
616
666
|
0,
|
|
617
667
|
),
|
|
618
|
-
)
|
|
619
|
-
return
|
|
668
|
+
)
|
|
669
|
+
return
|
|
620
670
|
}
|
|
621
|
-
const requestId = r.readVarInt()
|
|
622
|
-
controller.enqueue({ type:
|
|
623
|
-
headerEmitted = true
|
|
624
|
-
|
|
671
|
+
const requestId = r.readVarInt()
|
|
672
|
+
controller.enqueue({ type: 'fetch_header', requestId })
|
|
673
|
+
headerEmitted = true
|
|
674
|
+
offset += r.offset
|
|
625
675
|
} catch (e) {
|
|
626
|
-
if (e instanceof DecodeError && e.code ===
|
|
627
|
-
return
|
|
676
|
+
if (e instanceof DecodeError && e.code === 'UNEXPECTED_END') {
|
|
677
|
+
return
|
|
628
678
|
}
|
|
629
|
-
controller.error(e)
|
|
630
|
-
return
|
|
679
|
+
controller.error(e)
|
|
680
|
+
return
|
|
631
681
|
}
|
|
632
682
|
}
|
|
633
683
|
|
|
634
684
|
// Parse fetch objects with serialization flags
|
|
635
685
|
// Simplified: just read flags + explicit fields
|
|
636
|
-
while (buffer.length
|
|
686
|
+
while (offset < buffer.length) {
|
|
637
687
|
try {
|
|
638
|
-
const r = new BufferReader(buffer)
|
|
639
|
-
const flags = r.readUint8()
|
|
640
|
-
const objectIdPresent = (flags & 0x04) !== 0
|
|
641
|
-
const groupIdPresent = (flags & 0x08) !== 0
|
|
642
|
-
const priorityPresent = (flags & 0x10) !== 0
|
|
643
|
-
const extensionsPresent = (flags & 0x20) !== 0
|
|
644
|
-
const subgroupEncoding = flags & 0x03
|
|
645
|
-
|
|
646
|
-
if (groupIdPresent) r.readVarInt()
|
|
647
|
-
if (subgroupEncoding === 0x03) r.readVarInt()
|
|
648
|
-
let objectId = 0n
|
|
649
|
-
if (objectIdPresent) objectId = r.readVarInt()
|
|
650
|
-
if (priorityPresent) r.readUint8()
|
|
651
|
-
let extensionData = new Uint8Array(0)
|
|
688
|
+
const r = new BufferReader(buffer.subarray(offset))
|
|
689
|
+
const flags = r.readUint8()
|
|
690
|
+
const objectIdPresent = (flags & 0x04) !== 0
|
|
691
|
+
const groupIdPresent = (flags & 0x08) !== 0
|
|
692
|
+
const priorityPresent = (flags & 0x10) !== 0
|
|
693
|
+
const extensionsPresent = (flags & 0x20) !== 0
|
|
694
|
+
const subgroupEncoding = flags & 0x03
|
|
695
|
+
|
|
696
|
+
if (groupIdPresent) r.readVarInt() // groupId — consumed
|
|
697
|
+
if (subgroupEncoding === 0x03) r.readVarInt() // subgroupId — consumed
|
|
698
|
+
let objectId = 0n
|
|
699
|
+
if (objectIdPresent) objectId = r.readVarInt()
|
|
700
|
+
if (priorityPresent) r.readUint8() // priority — consumed
|
|
701
|
+
let extensionData = new Uint8Array(0)
|
|
652
702
|
if (extensionsPresent) {
|
|
653
|
-
const extLen = Number(r.readVarInt())
|
|
654
|
-
extensionData = extLen > 0 ? r.
|
|
703
|
+
const extLen = Number(r.readVarInt())
|
|
704
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0)
|
|
655
705
|
}
|
|
656
|
-
const payloadLength = Number(r.readVarInt())
|
|
657
|
-
const payloadByteOffset = r.offset
|
|
658
|
-
const payload = payloadLength > 0 ? r.
|
|
659
|
-
controller.enqueue({
|
|
660
|
-
|
|
706
|
+
const payloadLength = Number(r.readVarInt())
|
|
707
|
+
const payloadByteOffset = r.offset
|
|
708
|
+
const payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0)
|
|
709
|
+
controller.enqueue({
|
|
710
|
+
type: 'object',
|
|
711
|
+
objectId,
|
|
712
|
+
payloadLength,
|
|
713
|
+
extensionData,
|
|
714
|
+
payload,
|
|
715
|
+
byteOffset: 0,
|
|
716
|
+
payloadByteOffset,
|
|
717
|
+
})
|
|
718
|
+
offset += r.offset
|
|
661
719
|
} catch (e) {
|
|
662
|
-
if (e instanceof DecodeError && e.code ===
|
|
663
|
-
break
|
|
720
|
+
if (e instanceof DecodeError && e.code === 'UNEXPECTED_END') {
|
|
721
|
+
break
|
|
664
722
|
}
|
|
665
|
-
controller.error(e)
|
|
666
|
-
return
|
|
723
|
+
controller.error(e)
|
|
724
|
+
return
|
|
667
725
|
}
|
|
668
726
|
}
|
|
669
727
|
},
|
|
670
728
|
|
|
671
729
|
flush(controller) {
|
|
672
|
-
if (buffer.length
|
|
673
|
-
controller.error(new DecodeError(
|
|
730
|
+
if (offset < buffer.length) {
|
|
731
|
+
controller.error(new DecodeError('UNEXPECTED_END', 'Stream ended with incomplete data', 0))
|
|
674
732
|
}
|
|
675
733
|
},
|
|
676
|
-
})
|
|
734
|
+
})
|
|
677
735
|
}
|
|
678
736
|
|
|
679
737
|
/**
|
|
680
738
|
* Create a unified auto-detecting data stream decoder.
|
|
681
739
|
*/
|
|
682
740
|
export function createDataStreamDecoder(): TransformStream<Uint8Array, DataStreamEvent> {
|
|
683
|
-
let buffer = new Uint8Array(0)
|
|
684
|
-
let
|
|
685
|
-
|
|
686
|
-
const
|
|
741
|
+
let buffer = new Uint8Array(0)
|
|
742
|
+
let offset = 0
|
|
743
|
+
let inner: TransformStream<Uint8Array, DataStreamEvent> | null = null
|
|
744
|
+
const _innerWriter: WritableStreamDefaultWriter<Uint8Array> | null = null
|
|
745
|
+
const _innerReader: ReadableStreamDefaultReader<DataStreamEvent> | null = null
|
|
687
746
|
|
|
688
747
|
return new TransformStream<Uint8Array, DataStreamEvent>({
|
|
689
748
|
transform(chunk, controller) {
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
749
|
+
if (offset > 0) {
|
|
750
|
+
buffer = buffer.subarray(offset)
|
|
751
|
+
offset = 0
|
|
752
|
+
}
|
|
753
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length)
|
|
754
|
+
newBuffer.set(buffer, 0)
|
|
755
|
+
newBuffer.set(chunk, buffer.length)
|
|
756
|
+
buffer = newBuffer
|
|
694
757
|
|
|
695
758
|
if (inner === null) {
|
|
696
759
|
// Need at least one byte to determine type
|
|
697
|
-
if (buffer.length
|
|
698
|
-
const firstByte = buffer[
|
|
760
|
+
if (offset >= buffer.length) return
|
|
761
|
+
const firstByte = buffer[offset]!
|
|
699
762
|
|
|
700
|
-
if ((firstByte >= 0x10 && firstByte <=
|
|
763
|
+
if ((firstByte >= 0x10 && firstByte <= 0x17) || (firstByte >= 0x30 && firstByte <= 0x37)) {
|
|
701
764
|
// Subgroup — delegate to subgroup decoder
|
|
702
765
|
// We need to feed the full buffer including the type byte
|
|
703
|
-
const decoder = createSubgroupStreamDecoder()
|
|
704
|
-
inner = decoder as unknown as TransformStream<Uint8Array, DataStreamEvent
|
|
766
|
+
const decoder = createSubgroupStreamDecoder()
|
|
767
|
+
inner = decoder as unknown as TransformStream<Uint8Array, DataStreamEvent>
|
|
705
768
|
} else if (firstByte === 0x05) {
|
|
706
769
|
// Fetch
|
|
707
|
-
const decoder = createFetchStreamDecoder()
|
|
708
|
-
inner = decoder as unknown as TransformStream<Uint8Array, DataStreamEvent
|
|
770
|
+
const decoder = createFetchStreamDecoder()
|
|
771
|
+
inner = decoder as unknown as TransformStream<Uint8Array, DataStreamEvent>
|
|
709
772
|
} else {
|
|
710
773
|
controller.error(
|
|
711
774
|
new DecodeError(
|
|
712
|
-
|
|
775
|
+
'CONSTRAINT_VIOLATION',
|
|
713
776
|
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
714
777
|
0,
|
|
715
778
|
),
|
|
716
|
-
)
|
|
717
|
-
return
|
|
779
|
+
)
|
|
780
|
+
return
|
|
718
781
|
}
|
|
719
782
|
|
|
720
783
|
// For simplicity, process inline instead of piping
|
|
@@ -727,52 +790,53 @@ export function createDataStreamDecoder(): TransformStream<Uint8Array, DataStrea
|
|
|
727
790
|
},
|
|
728
791
|
|
|
729
792
|
flush(controller) {
|
|
730
|
-
if (buffer.length
|
|
793
|
+
if (offset >= buffer.length) return
|
|
794
|
+
const view = buffer.subarray(offset)
|
|
731
795
|
|
|
732
|
-
const firstByte =
|
|
733
|
-
let result: DecodeResult<Draft15DataStream
|
|
796
|
+
const firstByte = view[0]!
|
|
797
|
+
let result: DecodeResult<Draft15DataStream>
|
|
734
798
|
|
|
735
|
-
if ((firstByte >= 0x10 && firstByte <=
|
|
736
|
-
result = decodeSubgroupStream(
|
|
799
|
+
if ((firstByte >= 0x10 && firstByte <= 0x17) || (firstByte >= 0x30 && firstByte <= 0x37)) {
|
|
800
|
+
result = decodeSubgroupStream(view)
|
|
737
801
|
} else if (firstByte === 0x05) {
|
|
738
|
-
result = decodeFetchStream(
|
|
802
|
+
result = decodeFetchStream(view)
|
|
739
803
|
} else {
|
|
740
804
|
controller.error(
|
|
741
805
|
new DecodeError(
|
|
742
|
-
|
|
806
|
+
'CONSTRAINT_VIOLATION',
|
|
743
807
|
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
744
808
|
0,
|
|
745
809
|
),
|
|
746
|
-
)
|
|
747
|
-
return
|
|
810
|
+
)
|
|
811
|
+
return
|
|
748
812
|
}
|
|
749
813
|
|
|
750
814
|
if (!result.ok) {
|
|
751
|
-
controller.error(result.error)
|
|
752
|
-
return
|
|
815
|
+
controller.error(result.error)
|
|
816
|
+
return
|
|
753
817
|
}
|
|
754
818
|
|
|
755
|
-
const stream = result.value
|
|
756
|
-
if (stream.type ===
|
|
819
|
+
const stream = result.value
|
|
820
|
+
if (stream.type === 'subgroup') {
|
|
757
821
|
controller.enqueue({
|
|
758
|
-
type:
|
|
822
|
+
type: 'subgroup_header',
|
|
759
823
|
trackAlias: stream.trackAlias,
|
|
760
824
|
groupId: stream.groupId,
|
|
761
825
|
subgroupId: stream.subgroupId,
|
|
762
826
|
publisherPriority: stream.publisherPriority,
|
|
763
|
-
})
|
|
827
|
+
})
|
|
764
828
|
for (const obj of stream.objects) {
|
|
765
|
-
controller.enqueue(obj)
|
|
829
|
+
controller.enqueue(obj)
|
|
766
830
|
}
|
|
767
|
-
} else if (stream.type ===
|
|
831
|
+
} else if (stream.type === 'fetch') {
|
|
768
832
|
controller.enqueue({
|
|
769
|
-
type:
|
|
833
|
+
type: 'fetch_header',
|
|
770
834
|
requestId: stream.requestId,
|
|
771
|
-
})
|
|
835
|
+
})
|
|
772
836
|
for (const obj of stream.objects) {
|
|
773
|
-
controller.enqueue(obj)
|
|
837
|
+
controller.enqueue(obj)
|
|
774
838
|
}
|
|
775
839
|
}
|
|
776
840
|
},
|
|
777
|
-
})
|
|
841
|
+
})
|
|
778
842
|
}
|