@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,109 +12,119 @@ 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
|
-
const FETCH_STREAM_TYPE = 0x05n
|
|
19
|
+
const FETCH_STREAM_TYPE = 0x05n
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* Encode a subgroup stream header + objects.
|
|
23
23
|
*/
|
|
24
24
|
export function encodeSubgroupStream(stream: SubgroupStream): Uint8Array {
|
|
25
|
-
const w = new BufferWriter()
|
|
26
|
-
const streamType = stream.headerType
|
|
27
|
-
w.writeVarInt(BigInt(streamType))
|
|
25
|
+
const w = new BufferWriter()
|
|
26
|
+
const streamType = stream.headerType
|
|
27
|
+
w.writeVarInt(BigInt(streamType))
|
|
28
28
|
|
|
29
|
-
const extensionsPresent = (streamType & 0x01) !== 0
|
|
30
|
-
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
31
|
-
const hasPriority = streamType < 0x30
|
|
29
|
+
const extensionsPresent = (streamType & 0x01) !== 0
|
|
30
|
+
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
31
|
+
const hasPriority = streamType < 0x30
|
|
32
32
|
|
|
33
|
-
w.writeVarInt(stream.trackAlias)
|
|
34
|
-
w.writeVarInt(stream.groupId)
|
|
33
|
+
w.writeVarInt(stream.trackAlias)
|
|
34
|
+
w.writeVarInt(stream.groupId)
|
|
35
35
|
if (hasSubgroupField) {
|
|
36
|
-
w.writeVarInt(stream.subgroupId)
|
|
36
|
+
w.writeVarInt(stream.subgroupId)
|
|
37
37
|
}
|
|
38
38
|
if (hasPriority) {
|
|
39
|
-
w.writeUint8(stream.publisherPriority)
|
|
39
|
+
w.writeUint8(stream.publisherPriority)
|
|
40
40
|
}
|
|
41
|
-
let prevObjectId = -1n
|
|
41
|
+
let prevObjectId = -1n
|
|
42
42
|
for (const obj of stream.objects) {
|
|
43
|
-
const delta = prevObjectId < 0n ? obj.objectId : obj.objectId - prevObjectId - 1n
|
|
44
|
-
w.writeVarInt(delta)
|
|
43
|
+
const delta = prevObjectId < 0n ? obj.objectId : obj.objectId - prevObjectId - 1n
|
|
44
|
+
w.writeVarInt(delta)
|
|
45
45
|
if (extensionsPresent) {
|
|
46
|
-
w.writeVarInt(BigInt(obj.extensionData.length))
|
|
47
|
-
if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData)
|
|
46
|
+
w.writeVarInt(BigInt(obj.extensionData.length))
|
|
47
|
+
if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData)
|
|
48
48
|
}
|
|
49
|
-
w.writeVarInt(obj.payloadLength)
|
|
49
|
+
w.writeVarInt(obj.payloadLength)
|
|
50
50
|
if (obj.payloadLength === 0) {
|
|
51
|
-
w.writeVarInt(obj.status ?? 0n)
|
|
51
|
+
w.writeVarInt(obj.status ?? 0n)
|
|
52
52
|
} else {
|
|
53
|
-
w.writeBytes(obj.payload)
|
|
53
|
+
w.writeBytes(obj.payload)
|
|
54
54
|
}
|
|
55
|
-
prevObjectId = obj.objectId
|
|
55
|
+
prevObjectId = obj.objectId
|
|
56
56
|
}
|
|
57
|
-
return w.finish()
|
|
57
|
+
return w.finish()
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
/**
|
|
61
61
|
* Encode a datagram object.
|
|
62
62
|
*/
|
|
63
63
|
export function encodeDatagram(dg: DatagramObject): Uint8Array {
|
|
64
|
-
const w = new BufferWriter()
|
|
65
|
-
const dgType = dg.datagramType
|
|
66
|
-
w.writeVarInt(BigInt(dgType))
|
|
67
|
-
w.writeVarInt(dg.trackAlias)
|
|
68
|
-
w.writeVarInt(dg.groupId)
|
|
64
|
+
const w = new BufferWriter()
|
|
65
|
+
const dgType = dg.datagramType
|
|
66
|
+
w.writeVarInt(BigInt(dgType))
|
|
67
|
+
w.writeVarInt(dg.trackAlias)
|
|
68
|
+
w.writeVarInt(dg.groupId)
|
|
69
69
|
|
|
70
|
-
const
|
|
71
|
-
const
|
|
70
|
+
const extensionsPresent = (dgType & 0x01) !== 0
|
|
71
|
+
const objectIdAbsent = (dgType & 0x04) !== 0
|
|
72
|
+
const defaultPriority = (dgType & 0x08) !== 0
|
|
73
|
+
const isStatus = (dgType & 0x20) !== 0
|
|
72
74
|
|
|
73
75
|
if (!objectIdAbsent) {
|
|
74
|
-
w.writeVarInt(dg.objectId)
|
|
76
|
+
w.writeVarInt(dg.objectId)
|
|
77
|
+
}
|
|
78
|
+
if (!defaultPriority) {
|
|
79
|
+
w.writeUint8(dg.publisherPriority)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (extensionsPresent) {
|
|
83
|
+
const extData = dg.extensionData ?? new Uint8Array(0)
|
|
84
|
+
w.writeVarInt(BigInt(extData.length))
|
|
85
|
+
if (extData.length > 0) w.writeBytes(extData)
|
|
75
86
|
}
|
|
76
|
-
w.writeUint8(dg.publisherPriority);
|
|
77
87
|
|
|
78
88
|
if (isStatus) {
|
|
79
|
-
w.writeVarInt(dg.objectStatus ?? 0n)
|
|
89
|
+
w.writeVarInt(dg.objectStatus ?? 0n)
|
|
80
90
|
} else {
|
|
81
|
-
w.writeBytes(dg.payload)
|
|
91
|
+
w.writeBytes(dg.payload)
|
|
82
92
|
}
|
|
83
|
-
return w.finish()
|
|
93
|
+
return w.finish()
|
|
84
94
|
}
|
|
85
95
|
|
|
86
96
|
/**
|
|
87
97
|
* Encode a fetch stream header + objects.
|
|
88
98
|
*/
|
|
89
99
|
export function encodeFetchStream(stream: FetchStream): Uint8Array {
|
|
90
|
-
const w = new BufferWriter()
|
|
91
|
-
w.writeVarInt(FETCH_STREAM_TYPE)
|
|
92
|
-
w.writeVarInt(stream.requestId)
|
|
100
|
+
const w = new BufferWriter()
|
|
101
|
+
w.writeVarInt(FETCH_STREAM_TYPE)
|
|
102
|
+
w.writeVarInt(stream.requestId)
|
|
93
103
|
for (const obj of stream.objects) {
|
|
94
|
-
w.writeVarInt(BigInt(obj.serializationFlags))
|
|
95
|
-
const flags = obj.serializationFlags
|
|
104
|
+
w.writeVarInt(BigInt(obj.serializationFlags))
|
|
105
|
+
const flags = obj.serializationFlags
|
|
96
106
|
if (flags >= 0x80) {
|
|
97
107
|
// End of Range (0x8C, 0x10C): Group ID, Object ID, PayloadLength=0
|
|
98
|
-
w.writeVarInt(obj.groupId)
|
|
99
|
-
w.writeVarInt(obj.objectId)
|
|
100
|
-
w.writeVarInt(BigInt(obj.payloadLength))
|
|
108
|
+
w.writeVarInt(obj.groupId)
|
|
109
|
+
w.writeVarInt(obj.objectId)
|
|
110
|
+
w.writeVarInt(BigInt(obj.payloadLength))
|
|
101
111
|
} else {
|
|
102
|
-
if (flags & 0x08) w.writeVarInt(obj.groupId)
|
|
103
|
-
const subgroupEncoding = flags & 0x03
|
|
104
|
-
if (subgroupEncoding === 0x03) w.writeVarInt(obj.subgroupId)
|
|
105
|
-
if (flags & 0x04) w.writeVarInt(obj.objectId)
|
|
106
|
-
if (flags & 0x10) w.writeUint8(obj.publisherPriority)
|
|
112
|
+
if (flags & 0x08) w.writeVarInt(obj.groupId)
|
|
113
|
+
const subgroupEncoding = flags & 0x03
|
|
114
|
+
if (subgroupEncoding === 0x03) w.writeVarInt(obj.subgroupId)
|
|
115
|
+
if (flags & 0x04) w.writeVarInt(obj.objectId)
|
|
116
|
+
if (flags & 0x10) w.writeUint8(obj.publisherPriority)
|
|
107
117
|
if (flags & 0x20) {
|
|
108
|
-
w.writeVarInt(BigInt(obj.extensionData.length))
|
|
109
|
-
if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData)
|
|
118
|
+
w.writeVarInt(BigInt(obj.extensionData.length))
|
|
119
|
+
if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData)
|
|
110
120
|
}
|
|
111
|
-
w.writeVarInt(BigInt(obj.payloadLength))
|
|
121
|
+
w.writeVarInt(BigInt(obj.payloadLength))
|
|
112
122
|
if (obj.payloadLength > 0) {
|
|
113
|
-
w.writeBytes(obj.payload)
|
|
123
|
+
w.writeBytes(obj.payload)
|
|
114
124
|
}
|
|
115
125
|
}
|
|
116
126
|
}
|
|
117
|
-
return w.finish()
|
|
127
|
+
return w.finish()
|
|
118
128
|
}
|
|
119
129
|
|
|
120
130
|
/**
|
|
@@ -122,97 +132,112 @@ export function encodeFetchStream(stream: FetchStream): Uint8Array {
|
|
|
122
132
|
*/
|
|
123
133
|
export function decodeSubgroupStream(bytes: Uint8Array): DecodeResult<SubgroupStream> {
|
|
124
134
|
try {
|
|
125
|
-
const r = new BufferReader(bytes)
|
|
126
|
-
const streamType = Number(r.readVarInt())
|
|
135
|
+
const r = new BufferReader(bytes)
|
|
136
|
+
const streamType = Number(r.readVarInt())
|
|
127
137
|
|
|
138
|
+
// Draft-16 subgroup type: bits 0=extensions, 2:1=subgroup_id_mode, 3=end_of_group, 5=no_priority
|
|
139
|
+
// Valid range: 0x10-0x1F (with priority) or 0x30-0x3F (without priority)
|
|
140
|
+
// Reserved: subgroup_id_mode 0b11 (bits 2:1)
|
|
128
141
|
if (
|
|
129
|
-
!((streamType >= 0x10 && streamType <=
|
|
142
|
+
!((streamType >= 0x10 && streamType <= 0x1f) || (streamType >= 0x30 && streamType <= 0x3f)) ||
|
|
130
143
|
(streamType & 0x06) === 0x06 // reserved SUBGROUP_ID_MODE (bits 2:1 = 0b11)
|
|
131
144
|
) {
|
|
132
145
|
return {
|
|
133
146
|
ok: false,
|
|
134
147
|
error: new DecodeError(
|
|
135
|
-
|
|
136
|
-
`Expected subgroup stream type 0x10-
|
|
148
|
+
'CONSTRAINT_VIOLATION',
|
|
149
|
+
`Expected subgroup stream type 0x10-0x1F/0x30-0x3F, got 0x${streamType.toString(16)}`,
|
|
137
150
|
0,
|
|
138
151
|
),
|
|
139
|
-
}
|
|
152
|
+
}
|
|
140
153
|
}
|
|
141
154
|
|
|
142
|
-
const extensionsPresent = (streamType & 0x01) !== 0
|
|
143
|
-
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
144
|
-
const subgroupIsFirstObjId = (streamType & 0x02) !== 0 && !hasSubgroupField
|
|
145
|
-
const
|
|
155
|
+
const extensionsPresent = (streamType & 0x01) !== 0
|
|
156
|
+
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
157
|
+
const subgroupIsFirstObjId = (streamType & 0x02) !== 0 && !hasSubgroupField
|
|
158
|
+
const endOfGroup = (streamType & 0x08) !== 0
|
|
159
|
+
const hasPriority = streamType < 0x30
|
|
146
160
|
|
|
147
|
-
const trackAlias = r.readVarInt()
|
|
148
|
-
const groupId = r.readVarInt()
|
|
161
|
+
const trackAlias = r.readVarInt()
|
|
162
|
+
const groupId = r.readVarInt()
|
|
149
163
|
|
|
150
|
-
let subgroupId = 0n
|
|
164
|
+
let subgroupId = 0n
|
|
151
165
|
if (hasSubgroupField) {
|
|
152
|
-
subgroupId = r.readVarInt()
|
|
166
|
+
subgroupId = r.readVarInt()
|
|
153
167
|
}
|
|
154
168
|
|
|
155
|
-
let publisherPriority = 128
|
|
169
|
+
let publisherPriority = 128
|
|
156
170
|
if (hasPriority) {
|
|
157
|
-
publisherPriority = r.readUint8()
|
|
171
|
+
publisherPriority = r.readUint8()
|
|
158
172
|
}
|
|
159
173
|
|
|
160
|
-
const objects: ObjectPayload[] = []
|
|
161
|
-
let prevObjectId = -1n
|
|
162
|
-
let firstObject = true
|
|
174
|
+
const objects: ObjectPayload[] = []
|
|
175
|
+
let prevObjectId = -1n
|
|
176
|
+
let firstObject = true
|
|
163
177
|
|
|
164
178
|
while (r.remaining > 0) {
|
|
165
|
-
const byteOffset = r.offset
|
|
166
|
-
const delta = r.readVarInt()
|
|
167
|
-
let objectId: bigint
|
|
179
|
+
const byteOffset = r.offset
|
|
180
|
+
const delta = r.readVarInt()
|
|
181
|
+
let objectId: bigint
|
|
168
182
|
if (firstObject) {
|
|
169
|
-
objectId = delta
|
|
183
|
+
objectId = delta
|
|
170
184
|
if (subgroupIsFirstObjId && firstObject) {
|
|
171
|
-
subgroupId = objectId
|
|
185
|
+
subgroupId = objectId
|
|
172
186
|
}
|
|
173
|
-
firstObject = false
|
|
187
|
+
firstObject = false
|
|
174
188
|
} else {
|
|
175
|
-
objectId = prevObjectId + 1n + delta
|
|
189
|
+
objectId = prevObjectId + 1n + delta
|
|
176
190
|
}
|
|
177
|
-
let extensionData = new Uint8Array(0)
|
|
191
|
+
let extensionData = new Uint8Array(0)
|
|
178
192
|
if (extensionsPresent) {
|
|
179
|
-
const extLen = Number(r.readVarInt())
|
|
180
|
-
extensionData = extLen > 0 ? r.
|
|
193
|
+
const extLen = Number(r.readVarInt())
|
|
194
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0)
|
|
181
195
|
}
|
|
182
|
-
const payloadLength = Number(r.readVarInt())
|
|
183
|
-
let payload: Uint8Array
|
|
184
|
-
let status: bigint | undefined
|
|
185
|
-
let payloadByteOffset: number
|
|
196
|
+
const payloadLength = Number(r.readVarInt())
|
|
197
|
+
let payload: Uint8Array
|
|
198
|
+
let status: bigint | undefined
|
|
199
|
+
let payloadByteOffset: number
|
|
186
200
|
if (payloadLength === 0) {
|
|
187
|
-
status = r.readVarInt()
|
|
188
|
-
payloadByteOffset = r.offset
|
|
189
|
-
payload = new Uint8Array(0)
|
|
201
|
+
status = r.readVarInt()
|
|
202
|
+
payloadByteOffset = r.offset
|
|
203
|
+
payload = new Uint8Array(0)
|
|
190
204
|
} else {
|
|
191
|
-
payloadByteOffset = r.offset
|
|
192
|
-
payload = r.
|
|
205
|
+
payloadByteOffset = r.offset
|
|
206
|
+
payload = r.readBytesView(payloadLength)
|
|
207
|
+
}
|
|
208
|
+
const obj: ObjectPayload = {
|
|
209
|
+
type: 'object',
|
|
210
|
+
byteOffset,
|
|
211
|
+
payloadByteOffset,
|
|
212
|
+
objectId,
|
|
213
|
+
payloadLength,
|
|
214
|
+
extensionData,
|
|
215
|
+
payload,
|
|
193
216
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
217
|
+
if (status !== undefined) (obj as unknown as Record<string, unknown>).status = status
|
|
218
|
+
objects.push(obj)
|
|
219
|
+
prevObjectId = objectId
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const result: SubgroupStream = {
|
|
223
|
+
type: 'subgroup',
|
|
224
|
+
headerType: streamType,
|
|
225
|
+
trackAlias,
|
|
226
|
+
groupId,
|
|
227
|
+
subgroupId,
|
|
228
|
+
publisherPriority,
|
|
229
|
+
objects,
|
|
198
230
|
}
|
|
231
|
+
if (endOfGroup) (result as unknown as Record<string, unknown>).endOfGroup = true
|
|
199
232
|
|
|
200
233
|
return {
|
|
201
234
|
ok: true,
|
|
202
|
-
value:
|
|
203
|
-
type: "subgroup",
|
|
204
|
-
headerType: streamType,
|
|
205
|
-
trackAlias,
|
|
206
|
-
groupId,
|
|
207
|
-
subgroupId,
|
|
208
|
-
publisherPriority,
|
|
209
|
-
objects,
|
|
210
|
-
},
|
|
235
|
+
value: result,
|
|
211
236
|
bytesRead: r.offset,
|
|
212
|
-
}
|
|
237
|
+
}
|
|
213
238
|
} catch (e) {
|
|
214
|
-
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
215
|
-
throw e
|
|
239
|
+
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
240
|
+
throw e
|
|
216
241
|
}
|
|
217
242
|
}
|
|
218
243
|
|
|
@@ -221,33 +246,44 @@ export function decodeSubgroupStream(bytes: Uint8Array): DecodeResult<SubgroupSt
|
|
|
221
246
|
*/
|
|
222
247
|
export function decodeDatagram(bytes: Uint8Array): DecodeResult<DatagramObject> {
|
|
223
248
|
try {
|
|
224
|
-
const r = new BufferReader(bytes)
|
|
225
|
-
const dgType = Number(r.readVarInt())
|
|
226
|
-
|
|
227
|
-
const
|
|
228
|
-
const
|
|
229
|
-
const
|
|
230
|
-
|
|
231
|
-
const
|
|
232
|
-
|
|
233
|
-
|
|
249
|
+
const r = new BufferReader(bytes)
|
|
250
|
+
const dgType = Number(r.readVarInt())
|
|
251
|
+
|
|
252
|
+
const extensionsPresent = (dgType & 0x01) !== 0
|
|
253
|
+
const objectIdAbsent = (dgType & 0x04) !== 0
|
|
254
|
+
const endOfGroup = (dgType & 0x02) !== 0
|
|
255
|
+
const defaultPriority = (dgType & 0x08) !== 0
|
|
256
|
+
const isStatus = (dgType & 0x20) !== 0
|
|
257
|
+
|
|
258
|
+
const trackAlias = r.readVarInt()
|
|
259
|
+
const groupId = r.readVarInt()
|
|
260
|
+
let objectId = 0n
|
|
234
261
|
if (!objectIdAbsent) {
|
|
235
|
-
objectId = r.readVarInt()
|
|
262
|
+
objectId = r.readVarInt()
|
|
263
|
+
}
|
|
264
|
+
let publisherPriority = 128 // default
|
|
265
|
+
if (!defaultPriority) {
|
|
266
|
+
publisherPriority = r.readUint8()
|
|
236
267
|
}
|
|
237
|
-
const publisherPriority = r.readUint8();
|
|
238
268
|
|
|
239
|
-
let
|
|
240
|
-
|
|
269
|
+
let extensionData: Uint8Array | undefined
|
|
270
|
+
if (extensionsPresent) {
|
|
271
|
+
const extLen = Number(r.readVarInt())
|
|
272
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0)
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
let objectStatus: bigint | undefined
|
|
276
|
+
let payload: Uint8Array
|
|
241
277
|
if (isStatus) {
|
|
242
|
-
objectStatus = r.readVarInt()
|
|
243
|
-
payload = new Uint8Array(0)
|
|
278
|
+
objectStatus = r.readVarInt()
|
|
279
|
+
payload = new Uint8Array(0)
|
|
244
280
|
} else {
|
|
245
|
-
payload = r.
|
|
281
|
+
payload = r.readBytesView(r.remaining)
|
|
246
282
|
}
|
|
247
|
-
const payloadLength = payload.byteLength
|
|
283
|
+
const payloadLength = payload.byteLength
|
|
248
284
|
|
|
249
285
|
const result: DatagramObject = {
|
|
250
|
-
type:
|
|
286
|
+
type: 'datagram',
|
|
251
287
|
datagramType: dgType,
|
|
252
288
|
trackAlias,
|
|
253
289
|
groupId,
|
|
@@ -255,16 +291,18 @@ export function decodeDatagram(bytes: Uint8Array): DecodeResult<DatagramObject>
|
|
|
255
291
|
publisherPriority,
|
|
256
292
|
payloadLength,
|
|
257
293
|
payload,
|
|
258
|
-
}
|
|
294
|
+
}
|
|
259
295
|
|
|
260
|
-
if (endOfGroup) (result as unknown as Record<string, unknown>).endOfGroup = true
|
|
296
|
+
if (endOfGroup) (result as unknown as Record<string, unknown>).endOfGroup = true
|
|
261
297
|
if (objectStatus !== undefined)
|
|
262
|
-
(result as unknown as Record<string, unknown>).objectStatus = objectStatus
|
|
298
|
+
(result as unknown as Record<string, unknown>).objectStatus = objectStatus
|
|
299
|
+
if (extensionData !== undefined)
|
|
300
|
+
(result as unknown as Record<string, unknown>).extensionData = extensionData
|
|
263
301
|
|
|
264
|
-
return { ok: true, value: result, bytesRead: r.offset }
|
|
302
|
+
return { ok: true, value: result, bytesRead: r.offset }
|
|
265
303
|
} catch (e) {
|
|
266
|
-
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
267
|
-
throw e
|
|
304
|
+
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
305
|
+
throw e
|
|
268
306
|
}
|
|
269
307
|
}
|
|
270
308
|
|
|
@@ -273,36 +311,36 @@ export function decodeDatagram(bytes: Uint8Array): DecodeResult<DatagramObject>
|
|
|
273
311
|
*/
|
|
274
312
|
export function decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream> {
|
|
275
313
|
try {
|
|
276
|
-
const r = new BufferReader(bytes)
|
|
277
|
-
const streamType = r.readVarInt()
|
|
314
|
+
const r = new BufferReader(bytes)
|
|
315
|
+
const streamType = r.readVarInt()
|
|
278
316
|
if (streamType !== FETCH_STREAM_TYPE) {
|
|
279
317
|
return {
|
|
280
318
|
ok: false,
|
|
281
319
|
error: new DecodeError(
|
|
282
|
-
|
|
320
|
+
'CONSTRAINT_VIOLATION',
|
|
283
321
|
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
284
322
|
0,
|
|
285
323
|
),
|
|
286
|
-
}
|
|
324
|
+
}
|
|
287
325
|
}
|
|
288
|
-
const requestId = r.readVarInt()
|
|
289
|
-
const objects: FetchObjectPayload[] = []
|
|
326
|
+
const requestId = r.readVarInt()
|
|
327
|
+
const objects: FetchObjectPayload[] = []
|
|
290
328
|
|
|
291
|
-
let prevGroupId = 0n
|
|
292
|
-
let prevSubgroupId = 0n
|
|
293
|
-
let prevObjectId = 0n
|
|
294
|
-
let prevPriority = 128
|
|
295
|
-
let first = true
|
|
329
|
+
let prevGroupId = 0n
|
|
330
|
+
let prevSubgroupId = 0n
|
|
331
|
+
let prevObjectId = 0n
|
|
332
|
+
let prevPriority = 128
|
|
333
|
+
let first = true
|
|
296
334
|
|
|
297
335
|
while (r.remaining > 0) {
|
|
298
|
-
const byteOffset = r.offset
|
|
299
|
-
const flags = Number(r.readVarInt())
|
|
336
|
+
const byteOffset = r.offset
|
|
337
|
+
const flags = Number(r.readVarInt())
|
|
300
338
|
|
|
301
|
-
let groupId = prevGroupId
|
|
302
|
-
let subgroupId = prevSubgroupId
|
|
303
|
-
let objectId = prevObjectId + 1n
|
|
304
|
-
let payloadLength: number
|
|
305
|
-
let payload: Uint8Array
|
|
339
|
+
let groupId = prevGroupId
|
|
340
|
+
let subgroupId = prevSubgroupId
|
|
341
|
+
let objectId = prevObjectId + 1n
|
|
342
|
+
let payloadLength: number
|
|
343
|
+
let payload: Uint8Array
|
|
306
344
|
|
|
307
345
|
if (flags >= 0x80) {
|
|
308
346
|
// End of Range: 0x8C = End of Non-Existent Range, 0x10C = End of Unknown Range
|
|
@@ -312,19 +350,19 @@ export function decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream>
|
|
|
312
350
|
return {
|
|
313
351
|
ok: false,
|
|
314
352
|
error: new DecodeError(
|
|
315
|
-
|
|
353
|
+
'CONSTRAINT_VIOLATION',
|
|
316
354
|
`Unknown serialization flags value: 0x${flags.toString(16)}`,
|
|
317
355
|
r.offset,
|
|
318
356
|
),
|
|
319
|
-
}
|
|
357
|
+
}
|
|
320
358
|
}
|
|
321
|
-
groupId = r.readVarInt()
|
|
322
|
-
objectId = r.readVarInt()
|
|
323
|
-
payloadLength = Number(r.readVarInt())
|
|
324
|
-
const payloadByteOffset = r.offset
|
|
325
|
-
payload = payloadLength > 0 ? r.
|
|
359
|
+
groupId = r.readVarInt()
|
|
360
|
+
objectId = r.readVarInt()
|
|
361
|
+
payloadLength = Number(r.readVarInt())
|
|
362
|
+
const payloadByteOffset = r.offset
|
|
363
|
+
payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0)
|
|
326
364
|
objects.push({
|
|
327
|
-
type:
|
|
365
|
+
type: 'object',
|
|
328
366
|
byteOffset,
|
|
329
367
|
payloadByteOffset,
|
|
330
368
|
serializationFlags: flags,
|
|
@@ -335,50 +373,42 @@ export function decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream>
|
|
|
335
373
|
payloadLength,
|
|
336
374
|
extensionData: new Uint8Array(0),
|
|
337
375
|
payload,
|
|
338
|
-
})
|
|
376
|
+
})
|
|
339
377
|
} else {
|
|
340
|
-
const
|
|
341
|
-
const
|
|
342
|
-
const
|
|
343
|
-
const
|
|
344
|
-
const
|
|
345
|
-
|
|
346
|
-
if (flags & 0x40) {
|
|
347
|
-
return {
|
|
348
|
-
ok: false,
|
|
349
|
-
error: new DecodeError(
|
|
350
|
-
"CONSTRAINT_VIOLATION",
|
|
351
|
-
"Reserved bits set in fetch object flags",
|
|
352
|
-
r.offset,
|
|
353
|
-
),
|
|
354
|
-
};
|
|
355
|
-
}
|
|
378
|
+
const datagramForwarding = (flags & 0x40) !== 0
|
|
379
|
+
const subgroupEncoding = datagramForwarding ? -1 : flags & 0x03
|
|
380
|
+
const objectIdPresent = (flags & 0x04) !== 0
|
|
381
|
+
const groupIdPresent = (flags & 0x08) !== 0
|
|
382
|
+
const priorityPresent = (flags & 0x10) !== 0
|
|
383
|
+
const extensionsPresent = (flags & 0x20) !== 0
|
|
356
384
|
|
|
357
385
|
if (groupIdPresent) {
|
|
358
|
-
groupId = r.readVarInt()
|
|
386
|
+
groupId = r.readVarInt()
|
|
359
387
|
} else if (first) {
|
|
360
388
|
return {
|
|
361
389
|
ok: false,
|
|
362
390
|
error: new DecodeError(
|
|
363
|
-
|
|
364
|
-
|
|
391
|
+
'CONSTRAINT_VIOLATION',
|
|
392
|
+
'First fetch object must include groupId',
|
|
365
393
|
r.offset,
|
|
366
394
|
),
|
|
367
|
-
}
|
|
395
|
+
}
|
|
368
396
|
}
|
|
369
397
|
|
|
370
|
-
if (
|
|
371
|
-
|
|
398
|
+
if (datagramForwarding) {
|
|
399
|
+
// Datagram forwarding: no subgroup field
|
|
400
|
+
} else if (subgroupEncoding === 0x00) {
|
|
401
|
+
subgroupId = 0n
|
|
372
402
|
} else if (subgroupEncoding === 0x01) {
|
|
373
403
|
if (first) {
|
|
374
404
|
return {
|
|
375
405
|
ok: false,
|
|
376
406
|
error: new DecodeError(
|
|
377
|
-
|
|
378
|
-
|
|
407
|
+
'CONSTRAINT_VIOLATION',
|
|
408
|
+
'First fetch object cannot reference prior subgroupId',
|
|
379
409
|
r.offset,
|
|
380
410
|
),
|
|
381
|
-
}
|
|
411
|
+
}
|
|
382
412
|
}
|
|
383
413
|
// subgroupId = prevSubgroupId (already set by default)
|
|
384
414
|
} else if (subgroupEncoding === 0x02) {
|
|
@@ -386,46 +416,46 @@ export function decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream>
|
|
|
386
416
|
return {
|
|
387
417
|
ok: false,
|
|
388
418
|
error: new DecodeError(
|
|
389
|
-
|
|
390
|
-
|
|
419
|
+
'CONSTRAINT_VIOLATION',
|
|
420
|
+
'First fetch object cannot reference prior subgroupId',
|
|
391
421
|
r.offset,
|
|
392
422
|
),
|
|
393
|
-
}
|
|
423
|
+
}
|
|
394
424
|
}
|
|
395
|
-
subgroupId = prevSubgroupId + 1n
|
|
425
|
+
subgroupId = prevSubgroupId + 1n
|
|
396
426
|
} else {
|
|
397
|
-
subgroupId = r.readVarInt()
|
|
427
|
+
subgroupId = r.readVarInt()
|
|
398
428
|
}
|
|
399
429
|
|
|
400
430
|
if (objectIdPresent) {
|
|
401
|
-
objectId = r.readVarInt()
|
|
431
|
+
objectId = r.readVarInt()
|
|
402
432
|
} else if (first) {
|
|
403
433
|
return {
|
|
404
434
|
ok: false,
|
|
405
435
|
error: new DecodeError(
|
|
406
|
-
|
|
407
|
-
|
|
436
|
+
'CONSTRAINT_VIOLATION',
|
|
437
|
+
'First fetch object must include objectId',
|
|
408
438
|
r.offset,
|
|
409
439
|
),
|
|
410
|
-
}
|
|
440
|
+
}
|
|
411
441
|
}
|
|
412
442
|
|
|
413
443
|
if (priorityPresent) {
|
|
414
|
-
prevPriority = r.readUint8()
|
|
444
|
+
prevPriority = r.readUint8()
|
|
415
445
|
}
|
|
416
446
|
|
|
417
|
-
let extensionData = new Uint8Array(0)
|
|
447
|
+
let extensionData = new Uint8Array(0)
|
|
418
448
|
if (extensionsPresent) {
|
|
419
|
-
const extLen = Number(r.readVarInt())
|
|
420
|
-
extensionData = extLen > 0 ? r.
|
|
449
|
+
const extLen = Number(r.readVarInt())
|
|
450
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0)
|
|
421
451
|
}
|
|
422
452
|
|
|
423
|
-
payloadLength = Number(r.readVarInt())
|
|
424
|
-
const payloadByteOffset = r.offset
|
|
425
|
-
payload = payloadLength > 0 ? r.
|
|
453
|
+
payloadLength = Number(r.readVarInt())
|
|
454
|
+
const payloadByteOffset = r.offset
|
|
455
|
+
payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0)
|
|
426
456
|
|
|
427
457
|
objects.push({
|
|
428
|
-
type:
|
|
458
|
+
type: 'object',
|
|
429
459
|
byteOffset,
|
|
430
460
|
payloadByteOffset,
|
|
431
461
|
serializationFlags: flags,
|
|
@@ -436,23 +466,23 @@ export function decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream>
|
|
|
436
466
|
payloadLength,
|
|
437
467
|
extensionData,
|
|
438
468
|
payload,
|
|
439
|
-
})
|
|
469
|
+
})
|
|
440
470
|
}
|
|
441
471
|
|
|
442
|
-
prevGroupId = groupId
|
|
443
|
-
prevSubgroupId = subgroupId
|
|
444
|
-
prevObjectId = objectId
|
|
445
|
-
first = false
|
|
472
|
+
prevGroupId = groupId
|
|
473
|
+
prevSubgroupId = subgroupId
|
|
474
|
+
prevObjectId = objectId
|
|
475
|
+
first = false
|
|
446
476
|
}
|
|
447
477
|
|
|
448
478
|
return {
|
|
449
479
|
ok: true,
|
|
450
|
-
value: { type:
|
|
480
|
+
value: { type: 'fetch', requestId, objects },
|
|
451
481
|
bytesRead: r.offset,
|
|
452
|
-
}
|
|
482
|
+
}
|
|
453
483
|
} catch (e) {
|
|
454
|
-
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
455
|
-
throw e
|
|
484
|
+
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
485
|
+
throw e
|
|
456
486
|
}
|
|
457
487
|
}
|
|
458
488
|
|
|
@@ -460,19 +490,19 @@ export function decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream>
|
|
|
460
490
|
* Decode a data stream, dispatching by stream type.
|
|
461
491
|
*/
|
|
462
492
|
export function decodeDataStream(
|
|
463
|
-
streamType:
|
|
493
|
+
streamType: 'subgroup' | 'datagram' | 'fetch',
|
|
464
494
|
bytes: Uint8Array,
|
|
465
495
|
): DecodeResult<Draft16DataStream> {
|
|
466
496
|
switch (streamType) {
|
|
467
|
-
case
|
|
468
|
-
return decodeSubgroupStream(bytes)
|
|
469
|
-
case
|
|
470
|
-
return decodeDatagram(bytes)
|
|
471
|
-
case
|
|
472
|
-
return decodeFetchStream(bytes)
|
|
497
|
+
case 'subgroup':
|
|
498
|
+
return decodeSubgroupStream(bytes)
|
|
499
|
+
case 'datagram':
|
|
500
|
+
return decodeDatagram(bytes)
|
|
501
|
+
case 'fetch':
|
|
502
|
+
return decodeFetchStream(bytes)
|
|
473
503
|
default: {
|
|
474
|
-
const _exhaustive: never = streamType
|
|
475
|
-
throw new Error(`Unknown stream type: ${_exhaustive}`)
|
|
504
|
+
const _exhaustive: never = streamType
|
|
505
|
+
throw new Error(`Unknown stream type: ${_exhaustive}`)
|
|
476
506
|
}
|
|
477
507
|
}
|
|
478
508
|
}
|
|
@@ -483,291 +513,323 @@ export function createSubgroupStreamDecoder(): TransformStream<
|
|
|
483
513
|
Uint8Array,
|
|
484
514
|
SubgroupStreamHeader | ObjectPayload
|
|
485
515
|
> {
|
|
486
|
-
let buffer = new Uint8Array(0)
|
|
487
|
-
let
|
|
488
|
-
let
|
|
489
|
-
let
|
|
490
|
-
let
|
|
491
|
-
let
|
|
516
|
+
let buffer = new Uint8Array(0)
|
|
517
|
+
let offset = 0
|
|
518
|
+
let headerEmitted = false
|
|
519
|
+
let prevObjectId = -1n
|
|
520
|
+
let firstObject = true
|
|
521
|
+
let _subgroupIsFirstObjId = false
|
|
522
|
+
let _extensionsPresent = false
|
|
492
523
|
|
|
493
524
|
return new TransformStream<Uint8Array, SubgroupStreamHeader | ObjectPayload>({
|
|
494
525
|
transform(chunk, controller) {
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
526
|
+
if (offset > 0) {
|
|
527
|
+
buffer = buffer.subarray(offset)
|
|
528
|
+
offset = 0
|
|
529
|
+
}
|
|
530
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length)
|
|
531
|
+
newBuffer.set(buffer, 0)
|
|
532
|
+
newBuffer.set(chunk, buffer.length)
|
|
533
|
+
buffer = newBuffer
|
|
499
534
|
|
|
500
535
|
if (!headerEmitted) {
|
|
501
536
|
try {
|
|
502
|
-
const r = new BufferReader(buffer)
|
|
503
|
-
const streamType = Number(r.readVarInt())
|
|
537
|
+
const r = new BufferReader(buffer.subarray(offset))
|
|
538
|
+
const streamType = Number(r.readVarInt())
|
|
504
539
|
|
|
505
540
|
if (
|
|
506
541
|
!(
|
|
507
|
-
(streamType >= 0x10 && streamType <=
|
|
508
|
-
(streamType >= 0x30 && streamType <=
|
|
542
|
+
(streamType >= 0x10 && streamType <= 0x1f) ||
|
|
543
|
+
(streamType >= 0x30 && streamType <= 0x3f)
|
|
509
544
|
)
|
|
510
545
|
) {
|
|
511
546
|
controller.error(
|
|
512
547
|
new DecodeError(
|
|
513
|
-
|
|
548
|
+
'CONSTRAINT_VIOLATION',
|
|
514
549
|
`Expected subgroup stream type, got 0x${streamType.toString(16)}`,
|
|
515
550
|
0,
|
|
516
551
|
),
|
|
517
|
-
)
|
|
518
|
-
return
|
|
552
|
+
)
|
|
553
|
+
return
|
|
519
554
|
}
|
|
520
555
|
|
|
521
|
-
_extensionsPresent = (streamType & 0x01) !== 0
|
|
522
|
-
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
523
|
-
_subgroupIsFirstObjId = (streamType & 0x02) !== 0 && !hasSubgroupField
|
|
524
|
-
const hasPriority = streamType < 0x30
|
|
556
|
+
_extensionsPresent = (streamType & 0x01) !== 0
|
|
557
|
+
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
558
|
+
_subgroupIsFirstObjId = (streamType & 0x02) !== 0 && !hasSubgroupField
|
|
559
|
+
const hasPriority = streamType < 0x30
|
|
525
560
|
|
|
526
|
-
const trackAlias = r.readVarInt()
|
|
527
|
-
const groupId = r.readVarInt()
|
|
561
|
+
const trackAlias = r.readVarInt()
|
|
562
|
+
const groupId = r.readVarInt()
|
|
528
563
|
|
|
529
|
-
let subgroupId = 0n
|
|
564
|
+
let subgroupId = 0n
|
|
530
565
|
if (hasSubgroupField) {
|
|
531
|
-
subgroupId = r.readVarInt()
|
|
566
|
+
subgroupId = r.readVarInt()
|
|
532
567
|
}
|
|
533
568
|
|
|
534
|
-
let publisherPriority = 128
|
|
569
|
+
let publisherPriority = 128
|
|
535
570
|
if (hasPriority) {
|
|
536
|
-
publisherPriority = r.readUint8()
|
|
571
|
+
publisherPriority = r.readUint8()
|
|
537
572
|
}
|
|
538
573
|
|
|
539
574
|
controller.enqueue({
|
|
540
|
-
type:
|
|
575
|
+
type: 'subgroup_header',
|
|
541
576
|
trackAlias,
|
|
542
577
|
groupId,
|
|
543
578
|
subgroupId,
|
|
544
579
|
publisherPriority,
|
|
545
|
-
})
|
|
546
|
-
headerEmitted = true
|
|
547
|
-
|
|
580
|
+
})
|
|
581
|
+
headerEmitted = true
|
|
582
|
+
offset += r.offset
|
|
548
583
|
} catch (e) {
|
|
549
|
-
if (e instanceof DecodeError && e.code ===
|
|
550
|
-
return
|
|
584
|
+
if (e instanceof DecodeError && e.code === 'UNEXPECTED_END') {
|
|
585
|
+
return
|
|
551
586
|
}
|
|
552
|
-
controller.error(e)
|
|
553
|
-
return
|
|
587
|
+
controller.error(e)
|
|
588
|
+
return
|
|
554
589
|
}
|
|
555
590
|
}
|
|
556
591
|
|
|
557
|
-
while (buffer.length
|
|
592
|
+
while (offset < buffer.length) {
|
|
558
593
|
try {
|
|
559
|
-
const r = new BufferReader(buffer)
|
|
560
|
-
const delta = r.readVarInt()
|
|
561
|
-
let objectId: bigint
|
|
594
|
+
const r = new BufferReader(buffer.subarray(offset))
|
|
595
|
+
const delta = r.readVarInt()
|
|
596
|
+
let objectId: bigint
|
|
562
597
|
if (firstObject) {
|
|
563
|
-
objectId = delta
|
|
564
|
-
firstObject = false
|
|
598
|
+
objectId = delta
|
|
599
|
+
firstObject = false
|
|
565
600
|
} else {
|
|
566
|
-
objectId = prevObjectId + 1n + delta
|
|
601
|
+
objectId = prevObjectId + 1n + delta
|
|
567
602
|
}
|
|
568
|
-
let extensionData = new Uint8Array(0)
|
|
603
|
+
let extensionData = new Uint8Array(0)
|
|
569
604
|
if (_extensionsPresent) {
|
|
570
|
-
const extLen = Number(r.readVarInt())
|
|
571
|
-
extensionData = extLen > 0 ? r.
|
|
605
|
+
const extLen = Number(r.readVarInt())
|
|
606
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0)
|
|
572
607
|
}
|
|
573
|
-
const payloadLength = Number(r.readVarInt())
|
|
574
|
-
let payloadByteOffset: number
|
|
575
|
-
let status: bigint | undefined
|
|
608
|
+
const payloadLength = Number(r.readVarInt())
|
|
609
|
+
let payloadByteOffset: number
|
|
610
|
+
let status: bigint | undefined
|
|
576
611
|
if (payloadLength === 0) {
|
|
577
|
-
status = r.readVarInt()
|
|
578
|
-
payloadByteOffset = r.offset
|
|
612
|
+
status = r.readVarInt()
|
|
613
|
+
payloadByteOffset = r.offset
|
|
579
614
|
} else {
|
|
580
|
-
payloadByteOffset = r.offset
|
|
615
|
+
payloadByteOffset = r.offset
|
|
616
|
+
}
|
|
617
|
+
const payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0)
|
|
618
|
+
const obj: ObjectPayload = {
|
|
619
|
+
type: 'object',
|
|
620
|
+
byteOffset: 0,
|
|
621
|
+
payloadByteOffset,
|
|
622
|
+
objectId,
|
|
623
|
+
payloadLength,
|
|
624
|
+
payload,
|
|
625
|
+
extensionData,
|
|
581
626
|
}
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
buffer = buffer.slice(r.offset);
|
|
587
|
-
prevObjectId = objectId;
|
|
627
|
+
if (status !== undefined) (obj as unknown as Record<string, unknown>).status = status
|
|
628
|
+
controller.enqueue(obj)
|
|
629
|
+
offset += r.offset
|
|
630
|
+
prevObjectId = objectId
|
|
588
631
|
} catch (e) {
|
|
589
|
-
if (e instanceof DecodeError && e.code ===
|
|
590
|
-
break
|
|
632
|
+
if (e instanceof DecodeError && e.code === 'UNEXPECTED_END') {
|
|
633
|
+
break
|
|
591
634
|
}
|
|
592
|
-
controller.error(e)
|
|
593
|
-
return
|
|
635
|
+
controller.error(e)
|
|
636
|
+
return
|
|
594
637
|
}
|
|
595
638
|
}
|
|
596
639
|
},
|
|
597
640
|
|
|
598
641
|
flush(controller) {
|
|
599
|
-
if (buffer.length
|
|
600
|
-
controller.error(new DecodeError(
|
|
642
|
+
if (offset < buffer.length) {
|
|
643
|
+
controller.error(new DecodeError('UNEXPECTED_END', 'Stream ended with incomplete data', 0))
|
|
601
644
|
}
|
|
602
645
|
},
|
|
603
|
-
})
|
|
646
|
+
})
|
|
604
647
|
}
|
|
605
648
|
|
|
606
649
|
export function createFetchStreamDecoder(): TransformStream<
|
|
607
650
|
Uint8Array,
|
|
608
651
|
FetchStreamHeader | ObjectPayload
|
|
609
652
|
> {
|
|
610
|
-
let buffer = new Uint8Array(0)
|
|
611
|
-
let
|
|
653
|
+
let buffer = new Uint8Array(0)
|
|
654
|
+
let offset = 0
|
|
655
|
+
let headerEmitted = false
|
|
612
656
|
|
|
613
657
|
return new TransformStream<Uint8Array, FetchStreamHeader | ObjectPayload>({
|
|
614
658
|
transform(chunk, controller) {
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
659
|
+
if (offset > 0) {
|
|
660
|
+
buffer = buffer.subarray(offset)
|
|
661
|
+
offset = 0
|
|
662
|
+
}
|
|
663
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length)
|
|
664
|
+
newBuffer.set(buffer, 0)
|
|
665
|
+
newBuffer.set(chunk, buffer.length)
|
|
666
|
+
buffer = newBuffer
|
|
619
667
|
|
|
620
668
|
if (!headerEmitted) {
|
|
621
669
|
try {
|
|
622
|
-
const r = new BufferReader(buffer)
|
|
623
|
-
const streamType = r.readVarInt()
|
|
670
|
+
const r = new BufferReader(buffer.subarray(offset))
|
|
671
|
+
const streamType = r.readVarInt()
|
|
624
672
|
if (streamType !== FETCH_STREAM_TYPE) {
|
|
625
673
|
controller.error(
|
|
626
674
|
new DecodeError(
|
|
627
|
-
|
|
675
|
+
'CONSTRAINT_VIOLATION',
|
|
628
676
|
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
629
677
|
0,
|
|
630
678
|
),
|
|
631
|
-
)
|
|
632
|
-
return
|
|
679
|
+
)
|
|
680
|
+
return
|
|
633
681
|
}
|
|
634
|
-
const requestId = r.readVarInt()
|
|
635
|
-
controller.enqueue({ type:
|
|
636
|
-
headerEmitted = true
|
|
637
|
-
|
|
682
|
+
const requestId = r.readVarInt()
|
|
683
|
+
controller.enqueue({ type: 'fetch_header', requestId })
|
|
684
|
+
headerEmitted = true
|
|
685
|
+
offset += r.offset
|
|
638
686
|
} catch (e) {
|
|
639
|
-
if (e instanceof DecodeError && e.code ===
|
|
640
|
-
return
|
|
687
|
+
if (e instanceof DecodeError && e.code === 'UNEXPECTED_END') {
|
|
688
|
+
return
|
|
641
689
|
}
|
|
642
|
-
controller.error(e)
|
|
643
|
-
return
|
|
690
|
+
controller.error(e)
|
|
691
|
+
return
|
|
644
692
|
}
|
|
645
693
|
}
|
|
646
694
|
|
|
647
|
-
while (buffer.length
|
|
695
|
+
while (offset < buffer.length) {
|
|
648
696
|
try {
|
|
649
|
-
const r = new BufferReader(buffer)
|
|
650
|
-
const flags = Number(r.readVarInt())
|
|
651
|
-
const objectIdPresent = (flags & 0x04) !== 0
|
|
652
|
-
const groupIdPresent = (flags & 0x08) !== 0
|
|
653
|
-
const priorityPresent = (flags & 0x10) !== 0
|
|
654
|
-
const extensionsPresent = (flags & 0x20) !== 0
|
|
655
|
-
const subgroupEncoding = flags & 0x03
|
|
656
|
-
|
|
657
|
-
if (groupIdPresent) r.readVarInt()
|
|
658
|
-
if (subgroupEncoding === 0x03) r.readVarInt()
|
|
659
|
-
let objectId = 0n
|
|
660
|
-
if (objectIdPresent) objectId = r.readVarInt()
|
|
661
|
-
if (priorityPresent) r.readUint8()
|
|
662
|
-
let extensionData = new Uint8Array(0)
|
|
697
|
+
const r = new BufferReader(buffer.subarray(offset))
|
|
698
|
+
const flags = Number(r.readVarInt())
|
|
699
|
+
const objectIdPresent = (flags & 0x04) !== 0
|
|
700
|
+
const groupIdPresent = (flags & 0x08) !== 0
|
|
701
|
+
const priorityPresent = (flags & 0x10) !== 0
|
|
702
|
+
const extensionsPresent = (flags & 0x20) !== 0
|
|
703
|
+
const subgroupEncoding = flags & 0x03
|
|
704
|
+
|
|
705
|
+
if (groupIdPresent) r.readVarInt()
|
|
706
|
+
if (subgroupEncoding === 0x03) r.readVarInt()
|
|
707
|
+
let objectId = 0n
|
|
708
|
+
if (objectIdPresent) objectId = r.readVarInt()
|
|
709
|
+
if (priorityPresent) r.readUint8()
|
|
710
|
+
let extensionData = new Uint8Array(0)
|
|
663
711
|
if (extensionsPresent) {
|
|
664
|
-
const extLen = Number(r.readVarInt())
|
|
665
|
-
extensionData = extLen > 0 ? r.
|
|
712
|
+
const extLen = Number(r.readVarInt())
|
|
713
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0)
|
|
666
714
|
}
|
|
667
|
-
const payloadLength = Number(r.readVarInt())
|
|
668
|
-
const payloadByteOffset = r.offset
|
|
669
|
-
const payload = payloadLength > 0 ? r.
|
|
670
|
-
controller.enqueue({
|
|
671
|
-
|
|
715
|
+
const payloadLength = Number(r.readVarInt())
|
|
716
|
+
const payloadByteOffset = r.offset
|
|
717
|
+
const payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0)
|
|
718
|
+
controller.enqueue({
|
|
719
|
+
type: 'object',
|
|
720
|
+
byteOffset: 0,
|
|
721
|
+
payloadByteOffset,
|
|
722
|
+
objectId,
|
|
723
|
+
payloadLength,
|
|
724
|
+
payload,
|
|
725
|
+
extensionData,
|
|
726
|
+
})
|
|
727
|
+
offset += r.offset
|
|
672
728
|
} catch (e) {
|
|
673
|
-
if (e instanceof DecodeError && e.code ===
|
|
674
|
-
break
|
|
729
|
+
if (e instanceof DecodeError && e.code === 'UNEXPECTED_END') {
|
|
730
|
+
break
|
|
675
731
|
}
|
|
676
|
-
controller.error(e)
|
|
677
|
-
return
|
|
732
|
+
controller.error(e)
|
|
733
|
+
return
|
|
678
734
|
}
|
|
679
735
|
}
|
|
680
736
|
},
|
|
681
737
|
|
|
682
738
|
flush(controller) {
|
|
683
|
-
if (buffer.length
|
|
684
|
-
controller.error(new DecodeError(
|
|
739
|
+
if (offset < buffer.length) {
|
|
740
|
+
controller.error(new DecodeError('UNEXPECTED_END', 'Stream ended with incomplete data', 0))
|
|
685
741
|
}
|
|
686
742
|
},
|
|
687
|
-
})
|
|
743
|
+
})
|
|
688
744
|
}
|
|
689
745
|
|
|
690
746
|
export function createDataStreamDecoder(): TransformStream<Uint8Array, DataStreamEvent> {
|
|
691
|
-
let buffer = new Uint8Array(0)
|
|
692
|
-
let
|
|
747
|
+
let buffer = new Uint8Array(0)
|
|
748
|
+
let offset = 0
|
|
749
|
+
let inner: TransformStream<Uint8Array, DataStreamEvent> | null = null
|
|
693
750
|
|
|
694
751
|
return new TransformStream<Uint8Array, DataStreamEvent>({
|
|
695
752
|
transform(chunk, controller) {
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
753
|
+
if (offset > 0) {
|
|
754
|
+
buffer = buffer.subarray(offset)
|
|
755
|
+
offset = 0
|
|
756
|
+
}
|
|
757
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length)
|
|
758
|
+
newBuffer.set(buffer, 0)
|
|
759
|
+
newBuffer.set(chunk, buffer.length)
|
|
760
|
+
buffer = newBuffer
|
|
700
761
|
|
|
701
762
|
if (inner === null) {
|
|
702
|
-
if (buffer.length
|
|
703
|
-
const firstByte = buffer[
|
|
763
|
+
if (offset >= buffer.length) return
|
|
764
|
+
const firstByte = buffer[offset]!
|
|
704
765
|
|
|
705
|
-
if ((firstByte >= 0x10 && firstByte <=
|
|
706
|
-
const decoder = createSubgroupStreamDecoder()
|
|
707
|
-
inner = decoder as unknown as TransformStream<Uint8Array, DataStreamEvent
|
|
766
|
+
if ((firstByte >= 0x10 && firstByte <= 0x1f) || (firstByte >= 0x30 && firstByte <= 0x3f)) {
|
|
767
|
+
const decoder = createSubgroupStreamDecoder()
|
|
768
|
+
inner = decoder as unknown as TransformStream<Uint8Array, DataStreamEvent>
|
|
708
769
|
} else if (firstByte === 0x05) {
|
|
709
|
-
const decoder = createFetchStreamDecoder()
|
|
710
|
-
inner = decoder as unknown as TransformStream<Uint8Array, DataStreamEvent
|
|
770
|
+
const decoder = createFetchStreamDecoder()
|
|
771
|
+
inner = decoder as unknown as TransformStream<Uint8Array, DataStreamEvent>
|
|
711
772
|
} else {
|
|
712
773
|
controller.error(
|
|
713
774
|
new DecodeError(
|
|
714
|
-
|
|
775
|
+
'CONSTRAINT_VIOLATION',
|
|
715
776
|
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
716
777
|
0,
|
|
717
778
|
),
|
|
718
|
-
)
|
|
719
|
-
return
|
|
779
|
+
)
|
|
780
|
+
return
|
|
720
781
|
}
|
|
721
782
|
}
|
|
722
783
|
},
|
|
723
784
|
|
|
724
785
|
flush(controller) {
|
|
725
|
-
if (buffer.length
|
|
786
|
+
if (offset >= buffer.length) return
|
|
787
|
+
const view = buffer.subarray(offset)
|
|
726
788
|
|
|
727
|
-
const firstByte =
|
|
728
|
-
let result: DecodeResult<Draft16DataStream
|
|
789
|
+
const firstByte = view[0]!
|
|
790
|
+
let result: DecodeResult<Draft16DataStream>
|
|
729
791
|
|
|
730
|
-
if ((firstByte >= 0x10 && firstByte <=
|
|
731
|
-
result = decodeSubgroupStream(
|
|
792
|
+
if ((firstByte >= 0x10 && firstByte <= 0x1f) || (firstByte >= 0x30 && firstByte <= 0x3f)) {
|
|
793
|
+
result = decodeSubgroupStream(view)
|
|
732
794
|
} else if (firstByte === 0x05) {
|
|
733
|
-
result = decodeFetchStream(
|
|
795
|
+
result = decodeFetchStream(view)
|
|
734
796
|
} else {
|
|
735
797
|
controller.error(
|
|
736
798
|
new DecodeError(
|
|
737
|
-
|
|
799
|
+
'CONSTRAINT_VIOLATION',
|
|
738
800
|
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
739
801
|
0,
|
|
740
802
|
),
|
|
741
|
-
)
|
|
742
|
-
return
|
|
803
|
+
)
|
|
804
|
+
return
|
|
743
805
|
}
|
|
744
806
|
|
|
745
807
|
if (!result.ok) {
|
|
746
|
-
controller.error(result.error)
|
|
747
|
-
return
|
|
808
|
+
controller.error(result.error)
|
|
809
|
+
return
|
|
748
810
|
}
|
|
749
811
|
|
|
750
|
-
const stream = result.value
|
|
751
|
-
if (stream.type ===
|
|
812
|
+
const stream = result.value
|
|
813
|
+
if (stream.type === 'subgroup') {
|
|
752
814
|
controller.enqueue({
|
|
753
|
-
type:
|
|
815
|
+
type: 'subgroup_header',
|
|
754
816
|
trackAlias: stream.trackAlias,
|
|
755
817
|
groupId: stream.groupId,
|
|
756
818
|
subgroupId: stream.subgroupId,
|
|
757
819
|
publisherPriority: stream.publisherPriority,
|
|
758
|
-
})
|
|
820
|
+
})
|
|
759
821
|
for (const obj of stream.objects) {
|
|
760
|
-
controller.enqueue(obj)
|
|
822
|
+
controller.enqueue(obj)
|
|
761
823
|
}
|
|
762
|
-
} else if (stream.type ===
|
|
824
|
+
} else if (stream.type === 'fetch') {
|
|
763
825
|
controller.enqueue({
|
|
764
|
-
type:
|
|
826
|
+
type: 'fetch_header',
|
|
765
827
|
requestId: stream.requestId,
|
|
766
|
-
})
|
|
828
|
+
})
|
|
767
829
|
for (const obj of stream.objects) {
|
|
768
|
-
controller.enqueue(obj)
|
|
830
|
+
controller.enqueue(obj)
|
|
769
831
|
}
|
|
770
832
|
}
|
|
771
833
|
},
|
|
772
|
-
})
|
|
834
|
+
})
|
|
773
835
|
}
|