@moqtap/codec 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-LH4NTURO.js → chunk-2GODRVT5.js} +699 -589
- package/dist/{chunk-4RIXXEII.js → chunk-2ZT6CVSE.js} +274 -242
- package/dist/{chunk-XUUCOLWU.cjs → chunk-4N4INRE7.cjs} +332 -321
- package/dist/{chunk-PJRA2TQ5.js → chunk-73MWUKSJ.js} +274 -228
- package/dist/{chunk-NGVE2RZT.js → chunk-77MNXX3M.js} +549 -538
- package/dist/{chunk-A27S7HW7.js → chunk-7L43FE6P.js} +24 -3
- package/dist/{chunk-RVJAGE4S.cjs → chunk-ACQ4CUJP.cjs} +297 -265
- package/dist/{chunk-IBVM4DMJ.cjs → chunk-BGWGVINJ.cjs} +332 -321
- package/dist/{chunk-KFTCU2P6.js → chunk-C6KUWLQC.js} +0 -3
- package/dist/{chunk-CXDHOMHG.js → chunk-CEH7ESNC.js} +549 -538
- package/dist/{chunk-ZBKE2QRQ.js → chunk-E6P74GDT.js} +686 -599
- package/dist/{chunk-FUFTMAQD.cjs → chunk-FPISPJ5N.cjs} +785 -497
- package/dist/{chunk-7IVGHMKJ.cjs → chunk-FZDIEHQL.cjs} +300 -124
- package/dist/{chunk-ZSPO2GF2.cjs → chunk-GLBQDG4L.cjs} +971 -884
- package/dist/chunk-HDWJ2GDE.js +24 -0
- package/dist/{chunk-4YJANAXU.cjs → chunk-JGG7CMSZ.cjs} +469 -434
- package/dist/{chunk-IV2H5CFI.cjs → chunk-JTVCOMBI.cjs} +298 -266
- package/dist/chunk-KNDYS3DK.cjs +24 -0
- package/dist/{chunk-BPNL5YFQ.cjs → chunk-KZCYQ7ED.cjs} +5 -5
- package/dist/{chunk-U2B3B42P.js → chunk-MC7W6PMI.js} +709 -421
- package/dist/{chunk-MFAP7R6L.js → chunk-MRJWLGYH.js} +1 -1
- package/dist/{chunk-RWQ43Z4F.cjs → chunk-MZ7VU52O.cjs} +0 -3
- package/dist/{chunk-TMNGRIPL.js → chunk-N2KBF5Q2.js} +285 -109
- package/dist/{chunk-IV2HRJVT.js → chunk-PZBPH2D7.js} +274 -242
- package/dist/{chunk-FWISIR26.cjs → chunk-RUPCJTC3.cjs} +24 -3
- package/dist/{chunk-G26SJ6XS.cjs → chunk-S74DWJE2.cjs} +1001 -925
- package/dist/{chunk-NUX5BHWO.js → chunk-U3IPZYPX.js} +1113 -1037
- package/dist/{chunk-HSVYF6XX.cjs → chunk-VJUUZ4W2.cjs} +1106 -996
- package/dist/{chunk-ST24APEO.js → chunk-XSNX2IUJ.js} +574 -539
- package/dist/{chunk-K4OLITS2.cjs → chunk-YIG2C3LF.cjs} +295 -249
- package/dist/{drafts/draft15/codec.d.ts → codec-B2cH-f5V.d.cts} +11 -10
- package/dist/codec-B5K73Bdj.d.ts +30 -0
- package/dist/{codec-C_HMXNK_.d.ts → codec-BFeliJFc.d.ts} +4 -10
- package/dist/codec-BUMjz0J4.d.cts +30 -0
- package/dist/{codec-D0x8-SCw.d.cts → codec-Bap882Fh.d.cts} +3 -9
- package/dist/codec-BdVMRMOI.d.ts +34 -0
- package/dist/codec-Bq-tLtfP.d.ts +30 -0
- package/dist/codec-BwFgpeQu.d.ts +23 -0
- package/dist/{codec-95k8CAu5.d.cts → codec-C4n1PS09.d.cts} +3 -9
- package/dist/{codec-BECYPfY8.d.ts → codec-CPlK3Pi5.d.ts} +3 -9
- package/dist/{drafts/draft08/codec.d.ts → codec-CPvPq0sb.d.cts} +11 -9
- package/dist/codec-DNUIgLqc.d.cts +23 -0
- package/dist/codec-DRcsBCsb.d.ts +23 -0
- package/dist/{codec-CAevkgf5.d.cts → codec-DY4QH364.d.cts} +4 -10
- package/dist/codec-DZhZSIii.d.cts +30 -0
- package/dist/{drafts/draft14/codec.d.ts → codec-FvGCxIhr.d.ts} +11 -10
- package/dist/codec-HgBgHkFI.d.cts +23 -0
- package/dist/codec-KXHvXZVb.d.cts +35 -0
- package/dist/{codec-BC5jfvMb.d.ts → codec-R8GrCPt2.d.ts} +3 -9
- package/dist/{codec-BsPU1vNC.d.ts → codec-SKBeHQk7.d.ts} +3 -11
- package/dist/draft10-session.d.cts +1 -1
- package/dist/draft10-session.d.ts +1 -1
- package/dist/draft10.cjs +4 -3
- package/dist/draft10.d.cts +15 -5
- package/dist/draft10.d.ts +15 -5
- package/dist/draft10.js +3 -2
- package/dist/draft11-session.d.cts +1 -1
- package/dist/draft11-session.d.ts +1 -1
- package/dist/draft11.cjs +4 -3
- package/dist/draft11.d.cts +13 -5
- package/dist/draft11.d.ts +13 -5
- package/dist/draft11.js +3 -2
- package/dist/draft12-session.d.cts +1 -1
- package/dist/draft12-session.d.ts +1 -1
- package/dist/draft12.cjs +4 -3
- package/dist/draft12.d.cts +13 -5
- package/dist/draft12.d.ts +13 -5
- package/dist/draft12.js +3 -2
- package/dist/draft13-session.d.cts +1 -1
- package/dist/draft13-session.d.ts +1 -1
- package/dist/draft13.cjs +4 -3
- package/dist/draft13.d.cts +13 -5
- package/dist/draft13.d.ts +13 -5
- package/dist/draft13.js +3 -2
- package/dist/draft14-session.d.cts +1 -1
- package/dist/draft14-session.d.ts +1 -1
- package/dist/draft14.cjs +4 -3
- package/dist/draft14.d.cts +59 -5
- package/dist/draft14.d.ts +59 -5
- package/dist/draft14.js +3 -2
- package/dist/draft15-session.d.cts +1 -1
- package/dist/draft15-session.d.ts +1 -1
- package/dist/draft15.cjs +4 -3
- package/dist/draft15.d.cts +48 -5
- package/dist/draft15.d.ts +48 -5
- package/dist/draft15.js +3 -2
- package/dist/draft16-session.d.cts +1 -1
- package/dist/draft16-session.d.ts +1 -1
- package/dist/draft16.cjs +4 -3
- package/dist/draft16.d.cts +37 -5
- package/dist/draft16.d.ts +37 -5
- package/dist/draft16.js +3 -2
- package/dist/draft17-session.d.cts +1 -1
- package/dist/draft17-session.d.ts +1 -1
- package/dist/draft17.cjs +4 -3
- package/dist/draft17.d.cts +16 -5
- package/dist/draft17.d.ts +16 -5
- package/dist/draft17.js +3 -2
- package/dist/draft7-session.cjs +3 -3
- package/dist/draft7-session.js +2 -2
- package/dist/draft7.cjs +18 -6
- package/dist/draft7.d.cts +84 -8
- package/dist/draft7.d.ts +84 -8
- package/dist/draft7.js +15 -3
- package/dist/draft8-session.d.cts +1 -1
- package/dist/draft8-session.d.ts +1 -1
- package/dist/draft8.cjs +4 -3
- package/dist/draft8.d.cts +15 -5
- package/dist/draft8.d.ts +15 -5
- package/dist/draft8.js +3 -2
- package/dist/draft9-session.d.cts +1 -1
- package/dist/draft9-session.d.ts +1 -1
- package/dist/draft9.cjs +4 -3
- package/dist/draft9.d.cts +15 -5
- package/dist/draft9.d.ts +15 -5
- package/dist/draft9.js +3 -2
- package/dist/index.cjs +25 -24
- package/dist/index.d.cts +20 -20
- package/dist/index.d.ts +38 -46
- package/dist/index.js +111 -93
- package/dist/session.cjs +3 -3
- package/dist/session.d.ts +8 -4
- package/dist/session.js +26 -32
- package/dist/{types-ERexTpT8.d.cts → types-8gUGeMgs.d.cts} +4 -1
- package/dist/{types-ERexTpT8.d.ts → types-8gUGeMgs.d.ts} +4 -1
- package/dist/{types-Cw4WE9dh.d.ts → types-B0FT5Qs2.d.cts} +9 -1
- package/dist/{types-Cw4WE9dh.d.cts → types-B0FT5Qs2.d.ts} +9 -1
- package/dist/{types-DqCDFqgB.d.cts → types-B9A2g05r.d.cts} +4 -1
- package/dist/{types-DqCDFqgB.d.ts → types-B9A2g05r.d.ts} +4 -1
- package/dist/{types-Bg6QYNVt.d.cts → types-BeAVNU-F.d.cts} +7 -2
- package/dist/{types-Bg6QYNVt.d.ts → types-BeAVNU-F.d.ts} +7 -2
- package/dist/{types-C_1HrqBl.d.ts → types-CDa7F5ct.d.cts} +7 -2
- package/dist/{types-C_1HrqBl.d.cts → types-CDa7F5ct.d.ts} +7 -2
- package/dist/{types-r-CasCf1.d.cts → types-D1dI_oTX.d.cts} +8 -1
- package/dist/{types-r-CasCf1.d.ts → types-D1dI_oTX.d.ts} +8 -1
- package/dist/{types-BTFeKYCb.d.ts → types-DKpsfD3i.d.cts} +19 -4
- package/dist/{types-BTFeKYCb.d.cts → types-DKpsfD3i.d.ts} +19 -4
- package/dist/{types-4VxSL2Ho.d.ts → types-DxSFvL2b.d.cts} +7 -1
- package/dist/{types-4VxSL2Ho.d.cts → types-DxSFvL2b.d.ts} +7 -1
- package/dist/{types-B2afJZM-.d.ts → types-Pme7sua0.d.cts} +4 -1
- package/dist/{types-B2afJZM-.d.cts → types-Pme7sua0.d.ts} +4 -1
- package/dist/{types-D5gNQiDj.d.ts → types-gQsr0AAA.d.cts} +9 -1
- package/dist/{types-D5gNQiDj.d.cts → types-gQsr0AAA.d.ts} +9 -1
- package/package.json +2 -2
- package/src/core/buffer-reader.ts +130 -114
- package/src/core/buffer-writer.ts +100 -91
- package/src/core/hex.ts +7 -3
- package/src/drafts/draft07/codec.ts +14 -9
- package/src/drafts/draft07/data-streams.ts +240 -240
- package/src/drafts/draft07/varint.ts +51 -23
- package/src/drafts/draft08/codec.ts +19 -10
- package/src/drafts/draft08/data-streams.ts +359 -359
- package/src/drafts/draft09/codec.ts +19 -10
- package/src/drafts/draft09/data-streams.ts +332 -332
- package/src/drafts/draft10/codec.ts +19 -10
- package/src/drafts/draft10/data-streams.ts +332 -332
- package/src/drafts/draft11/codec.ts +33 -14
- package/src/drafts/draft11/data-streams.ts +269 -269
- package/src/drafts/draft12/codec.ts +27 -31
- package/src/drafts/draft12/data-streams.ts +275 -275
- package/src/drafts/draft13/codec.ts +27 -31
- package/src/drafts/draft13/data-streams.ts +275 -275
- package/src/drafts/draft14/codec.ts +19 -10
- package/src/drafts/draft14/data-streams.ts +813 -798
- package/src/drafts/draft15/codec.ts +21 -12
- package/src/drafts/draft15/data-streams.ts +794 -778
- package/src/drafts/draft16/codec.ts +21 -12
- package/src/drafts/draft16/data-streams.ts +789 -773
- package/src/drafts/draft17/codec.ts +21 -12
- package/src/drafts/draft17/data-streams.ts +758 -742
- package/dist/codec-AFuOxfsO.d.ts +0 -60
- package/dist/codec-B-UJ5Iow.d.cts +0 -75
- package/dist/codec-BvpuF-6u.d.cts +0 -39
- package/dist/codec-C8jZI5Cx.d.cts +0 -39
- package/dist/codec-CSUqCrRs.d.ts +0 -39
- package/dist/codec-CpuvYTSV.d.cts +0 -86
- 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.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.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.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
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
bytesToHex,
|
|
3
|
+
hexToBytes
|
|
4
|
+
} from "./chunk-HDWJ2GDE.js";
|
|
1
5
|
import {
|
|
2
6
|
BufferReader,
|
|
3
7
|
BufferWriter,
|
|
4
8
|
DecodeError
|
|
5
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-7L43FE6P.js";
|
|
6
10
|
|
|
7
11
|
// src/drafts/draft17/messages.ts
|
|
8
12
|
var MSG_REQUEST_UPDATE = 0x02n;
|
|
@@ -51,28 +55,668 @@ var MESSAGE_ID_MAP = new Map(
|
|
|
51
55
|
[...MESSAGE_TYPE_MAP.entries()].map(([id, name]) => [name, id])
|
|
52
56
|
);
|
|
53
57
|
|
|
54
|
-
// src/drafts/draft17/
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
// src/drafts/draft17/data-streams.ts
|
|
59
|
+
var FETCH_STREAM_TYPE = 0x05n;
|
|
60
|
+
function encodeSubgroupStream(stream) {
|
|
61
|
+
const w = new BufferWriter();
|
|
62
|
+
const streamType = stream.headerType;
|
|
63
|
+
w.writeVarInt(BigInt(streamType));
|
|
64
|
+
const extensionsPresent = (streamType & 1) !== 0;
|
|
65
|
+
const hasSubgroupField = (streamType & 4) !== 0;
|
|
66
|
+
const hasPriority = streamType < 48;
|
|
67
|
+
w.writeVarInt(stream.trackAlias);
|
|
68
|
+
w.writeVarInt(stream.groupId);
|
|
69
|
+
if (hasSubgroupField) {
|
|
70
|
+
w.writeVarInt(stream.subgroupId);
|
|
71
|
+
}
|
|
72
|
+
if (hasPriority) {
|
|
73
|
+
w.writeUint8(stream.publisherPriority);
|
|
74
|
+
}
|
|
75
|
+
let prevObjectId = -1n;
|
|
76
|
+
for (const obj of stream.objects) {
|
|
77
|
+
const delta = prevObjectId < 0n ? obj.objectId : obj.objectId - prevObjectId - 1n;
|
|
78
|
+
w.writeVarInt(delta);
|
|
79
|
+
if (extensionsPresent) {
|
|
80
|
+
w.writeVarInt(BigInt(obj.extensionData.length));
|
|
81
|
+
if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData);
|
|
82
|
+
}
|
|
83
|
+
w.writeVarInt(BigInt(obj.payloadLength));
|
|
84
|
+
if (obj.payloadLength === 0) {
|
|
85
|
+
w.writeVarInt(obj.status ?? 0n);
|
|
86
|
+
} else {
|
|
87
|
+
w.writeBytes(obj.payload);
|
|
88
|
+
}
|
|
89
|
+
prevObjectId = obj.objectId;
|
|
90
|
+
}
|
|
91
|
+
return w.finish();
|
|
92
|
+
}
|
|
93
|
+
function encodeDatagram(dg) {
|
|
94
|
+
const w = new BufferWriter();
|
|
95
|
+
const dgType = dg.datagramType;
|
|
96
|
+
w.writeVarInt(BigInt(dgType));
|
|
97
|
+
w.writeVarInt(dg.trackAlias);
|
|
98
|
+
w.writeVarInt(dg.groupId);
|
|
99
|
+
const objectIdAbsent = (dgType & 4) !== 0;
|
|
100
|
+
const isStatus = (dgType & 32) !== 0;
|
|
101
|
+
const defaultPriority = (dgType & 8) !== 0;
|
|
102
|
+
if (!objectIdAbsent) {
|
|
103
|
+
w.writeVarInt(dg.objectId);
|
|
104
|
+
}
|
|
105
|
+
if (!defaultPriority) {
|
|
106
|
+
w.writeUint8(dg.publisherPriority);
|
|
107
|
+
}
|
|
108
|
+
if (isStatus) {
|
|
109
|
+
w.writeVarInt(dg.objectStatus ?? 0n);
|
|
110
|
+
} else {
|
|
111
|
+
w.writeBytes(dg.payload);
|
|
112
|
+
}
|
|
113
|
+
return w.finish();
|
|
114
|
+
}
|
|
115
|
+
function encodeFetchStream(stream) {
|
|
116
|
+
const w = new BufferWriter();
|
|
117
|
+
w.writeVarInt(FETCH_STREAM_TYPE);
|
|
118
|
+
w.writeVarInt(stream.requestId);
|
|
119
|
+
for (const obj of stream.objects) {
|
|
120
|
+
w.writeVarInt(BigInt(obj.serializationFlags));
|
|
121
|
+
const flags = obj.serializationFlags;
|
|
122
|
+
if (flags >= 128) {
|
|
123
|
+
w.writeVarInt(obj.groupId);
|
|
124
|
+
w.writeVarInt(obj.objectId);
|
|
125
|
+
w.writeVarInt(BigInt(obj.payloadLength));
|
|
126
|
+
} else {
|
|
127
|
+
if (flags & 8) w.writeVarInt(obj.groupId);
|
|
128
|
+
const subgroupEncoding = flags & 3;
|
|
129
|
+
if (subgroupEncoding === 3) w.writeVarInt(obj.subgroupId);
|
|
130
|
+
if (flags & 4) w.writeVarInt(obj.objectId);
|
|
131
|
+
if (flags & 16) w.writeUint8(obj.publisherPriority);
|
|
132
|
+
if (flags & 32) {
|
|
133
|
+
w.writeVarInt(BigInt(obj.extensionData.length));
|
|
134
|
+
if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData);
|
|
135
|
+
}
|
|
136
|
+
w.writeVarInt(BigInt(obj.payloadLength));
|
|
137
|
+
if (obj.payloadLength > 0) {
|
|
138
|
+
w.writeBytes(obj.payload);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return w.finish();
|
|
143
|
+
}
|
|
144
|
+
function decodeSubgroupStream(bytes) {
|
|
145
|
+
try {
|
|
146
|
+
const r = new BufferReader(bytes);
|
|
147
|
+
const streamType = Number(r.readVarInt());
|
|
148
|
+
if (!(streamType >= 16 && streamType <= 29 || streamType >= 48 && streamType <= 61) || (streamType & 6) === 6) {
|
|
149
|
+
return {
|
|
150
|
+
ok: false,
|
|
151
|
+
error: new DecodeError(
|
|
152
|
+
"CONSTRAINT_VIOLATION",
|
|
153
|
+
`Expected subgroup stream type 0x10-0x15/0x18-0x1D/0x30-0x35/0x38-0x3D, got 0x${streamType.toString(16)}`,
|
|
154
|
+
0
|
|
155
|
+
)
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
const extensionsPresent = (streamType & 1) !== 0;
|
|
159
|
+
const hasSubgroupField = (streamType & 4) !== 0;
|
|
160
|
+
const subgroupIsFirstObjId = (streamType & 2) !== 0 && !hasSubgroupField;
|
|
161
|
+
const hasPriority = streamType < 48;
|
|
162
|
+
const trackAlias = r.readVarInt();
|
|
163
|
+
const groupId = r.readVarInt();
|
|
164
|
+
let subgroupId = 0n;
|
|
165
|
+
if (hasSubgroupField) {
|
|
166
|
+
subgroupId = r.readVarInt();
|
|
167
|
+
}
|
|
168
|
+
let publisherPriority = 128;
|
|
169
|
+
if (hasPriority) {
|
|
170
|
+
publisherPriority = r.readUint8();
|
|
171
|
+
}
|
|
172
|
+
const objects = [];
|
|
173
|
+
let prevObjectId = -1n;
|
|
174
|
+
let firstObject = true;
|
|
175
|
+
while (r.remaining > 0) {
|
|
176
|
+
const byteOffset = r.offset;
|
|
177
|
+
const delta = r.readVarInt();
|
|
178
|
+
let objectId;
|
|
179
|
+
if (firstObject) {
|
|
180
|
+
objectId = delta;
|
|
181
|
+
if (subgroupIsFirstObjId && firstObject) {
|
|
182
|
+
subgroupId = objectId;
|
|
183
|
+
}
|
|
184
|
+
firstObject = false;
|
|
185
|
+
} else {
|
|
186
|
+
objectId = prevObjectId + 1n + delta;
|
|
187
|
+
}
|
|
188
|
+
let extensionData = new Uint8Array(0);
|
|
189
|
+
if (extensionsPresent) {
|
|
190
|
+
const extLen = Number(r.readVarInt());
|
|
191
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0);
|
|
192
|
+
}
|
|
193
|
+
const payloadLength = Number(r.readVarInt());
|
|
194
|
+
let payload;
|
|
195
|
+
let status;
|
|
196
|
+
let payloadByteOffset;
|
|
197
|
+
if (payloadLength === 0) {
|
|
198
|
+
status = r.readVarInt();
|
|
199
|
+
payloadByteOffset = r.offset;
|
|
200
|
+
payload = new Uint8Array(0);
|
|
201
|
+
} else {
|
|
202
|
+
payloadByteOffset = r.offset;
|
|
203
|
+
payload = r.readBytesView(payloadLength);
|
|
204
|
+
}
|
|
205
|
+
const obj = { type: "object", byteOffset, payloadByteOffset, objectId, payloadLength, payload, extensionData };
|
|
206
|
+
if (status !== void 0) obj.status = status;
|
|
207
|
+
objects.push(obj);
|
|
208
|
+
prevObjectId = objectId;
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
ok: true,
|
|
212
|
+
value: {
|
|
213
|
+
type: "subgroup",
|
|
214
|
+
headerType: streamType,
|
|
215
|
+
trackAlias,
|
|
216
|
+
groupId,
|
|
217
|
+
subgroupId,
|
|
218
|
+
publisherPriority,
|
|
219
|
+
objects
|
|
220
|
+
},
|
|
221
|
+
bytesRead: r.offset
|
|
222
|
+
};
|
|
223
|
+
} catch (e) {
|
|
224
|
+
if (e instanceof DecodeError) return { ok: false, error: e };
|
|
225
|
+
throw e;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
function decodeDatagram(bytes) {
|
|
229
|
+
try {
|
|
230
|
+
const r = new BufferReader(bytes);
|
|
231
|
+
const dgType = Number(r.readVarInt());
|
|
232
|
+
const objectIdAbsent = (dgType & 4) !== 0;
|
|
233
|
+
const endOfGroup = (dgType & 2) !== 0;
|
|
234
|
+
const isStatus = (dgType & 32) !== 0;
|
|
235
|
+
const defaultPriority = (dgType & 8) !== 0;
|
|
236
|
+
const trackAlias = r.readVarInt();
|
|
237
|
+
const groupId = r.readVarInt();
|
|
238
|
+
let objectId = 0n;
|
|
239
|
+
if (!objectIdAbsent) {
|
|
240
|
+
objectId = r.readVarInt();
|
|
241
|
+
}
|
|
242
|
+
let publisherPriority = 128;
|
|
243
|
+
if (!defaultPriority) {
|
|
244
|
+
publisherPriority = r.readUint8();
|
|
245
|
+
}
|
|
246
|
+
let objectStatus;
|
|
247
|
+
let payload;
|
|
248
|
+
if (isStatus) {
|
|
249
|
+
objectStatus = r.readVarInt();
|
|
250
|
+
payload = new Uint8Array(0);
|
|
251
|
+
} else {
|
|
252
|
+
payload = r.readBytesView(r.remaining);
|
|
253
|
+
}
|
|
254
|
+
const payloadLength = payload.byteLength;
|
|
255
|
+
const result = {
|
|
256
|
+
type: "datagram",
|
|
257
|
+
datagramType: dgType,
|
|
258
|
+
trackAlias,
|
|
259
|
+
groupId,
|
|
260
|
+
objectId,
|
|
261
|
+
publisherPriority,
|
|
262
|
+
payloadLength,
|
|
263
|
+
payload
|
|
264
|
+
};
|
|
265
|
+
if (endOfGroup) result.endOfGroup = true;
|
|
266
|
+
if (objectStatus !== void 0)
|
|
267
|
+
result.objectStatus = objectStatus;
|
|
268
|
+
return { ok: true, value: result, bytesRead: r.offset };
|
|
269
|
+
} catch (e) {
|
|
270
|
+
if (e instanceof DecodeError) return { ok: false, error: e };
|
|
271
|
+
throw e;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
function decodeFetchStream(bytes) {
|
|
275
|
+
try {
|
|
276
|
+
const r = new BufferReader(bytes);
|
|
277
|
+
const streamType = r.readVarInt();
|
|
278
|
+
if (streamType !== FETCH_STREAM_TYPE) {
|
|
279
|
+
return {
|
|
280
|
+
ok: false,
|
|
281
|
+
error: new DecodeError(
|
|
282
|
+
"CONSTRAINT_VIOLATION",
|
|
283
|
+
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
284
|
+
0
|
|
285
|
+
)
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
const requestId = r.readVarInt();
|
|
289
|
+
const objects = [];
|
|
290
|
+
let prevGroupId = 0n;
|
|
291
|
+
let prevSubgroupId = 0n;
|
|
292
|
+
let prevObjectId = 0n;
|
|
293
|
+
let prevPriority = 128;
|
|
294
|
+
let first = true;
|
|
295
|
+
while (r.remaining > 0) {
|
|
296
|
+
const byteOffset = r.offset;
|
|
297
|
+
const flags = Number(r.readVarInt());
|
|
298
|
+
let groupId = prevGroupId;
|
|
299
|
+
let subgroupId = prevSubgroupId;
|
|
300
|
+
let objectId = prevObjectId + 1n;
|
|
301
|
+
let payloadLength;
|
|
302
|
+
let payload;
|
|
303
|
+
let payloadByteOffset;
|
|
304
|
+
let extensionData = new Uint8Array(0);
|
|
305
|
+
if (flags >= 128) {
|
|
306
|
+
if (flags !== 140 && flags !== 268) {
|
|
307
|
+
return {
|
|
308
|
+
ok: false,
|
|
309
|
+
error: new DecodeError(
|
|
310
|
+
"CONSTRAINT_VIOLATION",
|
|
311
|
+
`Unknown serialization flags value: 0x${flags.toString(16)}`,
|
|
312
|
+
r.offset
|
|
313
|
+
)
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
groupId = r.readVarInt();
|
|
317
|
+
objectId = r.readVarInt();
|
|
318
|
+
payloadLength = Number(r.readVarInt());
|
|
319
|
+
payloadByteOffset = r.offset;
|
|
320
|
+
payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0);
|
|
321
|
+
} else {
|
|
322
|
+
const subgroupEncoding = flags & 3;
|
|
323
|
+
const objectIdPresent = (flags & 4) !== 0;
|
|
324
|
+
const groupIdPresent = (flags & 8) !== 0;
|
|
325
|
+
const priorityPresent = (flags & 16) !== 0;
|
|
326
|
+
const extensionsPresent = (flags & 32) !== 0;
|
|
327
|
+
if (flags & 64) {
|
|
328
|
+
return {
|
|
329
|
+
ok: false,
|
|
330
|
+
error: new DecodeError(
|
|
331
|
+
"CONSTRAINT_VIOLATION",
|
|
332
|
+
"Reserved bits set in fetch object flags",
|
|
333
|
+
r.offset
|
|
334
|
+
)
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
if (groupIdPresent) {
|
|
338
|
+
groupId = r.readVarInt();
|
|
339
|
+
} else if (first) {
|
|
340
|
+
return {
|
|
341
|
+
ok: false,
|
|
342
|
+
error: new DecodeError(
|
|
343
|
+
"CONSTRAINT_VIOLATION",
|
|
344
|
+
"First fetch object must include groupId",
|
|
345
|
+
r.offset
|
|
346
|
+
)
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
if (subgroupEncoding === 0) {
|
|
350
|
+
subgroupId = 0n;
|
|
351
|
+
} else if (subgroupEncoding === 1) {
|
|
352
|
+
if (first) {
|
|
353
|
+
return {
|
|
354
|
+
ok: false,
|
|
355
|
+
error: new DecodeError(
|
|
356
|
+
"CONSTRAINT_VIOLATION",
|
|
357
|
+
"First fetch object cannot reference prior subgroupId",
|
|
358
|
+
r.offset
|
|
359
|
+
)
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
subgroupId = prevSubgroupId;
|
|
363
|
+
} else if (subgroupEncoding === 2) {
|
|
364
|
+
if (first) {
|
|
365
|
+
return {
|
|
366
|
+
ok: false,
|
|
367
|
+
error: new DecodeError(
|
|
368
|
+
"CONSTRAINT_VIOLATION",
|
|
369
|
+
"First fetch object cannot reference prior subgroupId",
|
|
370
|
+
r.offset
|
|
371
|
+
)
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
subgroupId = prevSubgroupId + 1n;
|
|
375
|
+
} else if (subgroupEncoding === 3) {
|
|
376
|
+
subgroupId = r.readVarInt();
|
|
377
|
+
}
|
|
378
|
+
if (objectIdPresent) {
|
|
379
|
+
objectId = r.readVarInt();
|
|
380
|
+
} else if (first) {
|
|
381
|
+
return {
|
|
382
|
+
ok: false,
|
|
383
|
+
error: new DecodeError(
|
|
384
|
+
"CONSTRAINT_VIOLATION",
|
|
385
|
+
"First fetch object must include objectId",
|
|
386
|
+
r.offset
|
|
387
|
+
)
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
if (priorityPresent) {
|
|
391
|
+
prevPriority = r.readUint8();
|
|
392
|
+
}
|
|
393
|
+
if (extensionsPresent) {
|
|
394
|
+
const extLen = Number(r.readVarInt());
|
|
395
|
+
if (extLen > 0) {
|
|
396
|
+
extensionData = r.readBytesView(extLen);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
payloadLength = Number(r.readVarInt());
|
|
400
|
+
payloadByteOffset = r.offset;
|
|
401
|
+
payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0);
|
|
402
|
+
}
|
|
403
|
+
const obj = {
|
|
404
|
+
type: "object",
|
|
405
|
+
byteOffset,
|
|
406
|
+
payloadByteOffset,
|
|
407
|
+
serializationFlags: flags,
|
|
408
|
+
groupId,
|
|
409
|
+
subgroupId,
|
|
410
|
+
objectId,
|
|
411
|
+
publisherPriority: prevPriority,
|
|
412
|
+
payloadLength,
|
|
413
|
+
payload,
|
|
414
|
+
extensionData
|
|
415
|
+
};
|
|
416
|
+
objects.push(obj);
|
|
417
|
+
prevGroupId = groupId;
|
|
418
|
+
prevSubgroupId = subgroupId;
|
|
419
|
+
prevObjectId = objectId;
|
|
420
|
+
first = false;
|
|
421
|
+
}
|
|
422
|
+
return {
|
|
423
|
+
ok: true,
|
|
424
|
+
value: { type: "fetch", requestId, objects },
|
|
425
|
+
bytesRead: r.offset
|
|
426
|
+
};
|
|
427
|
+
} catch (e) {
|
|
428
|
+
if (e instanceof DecodeError) return { ok: false, error: e };
|
|
429
|
+
throw e;
|
|
59
430
|
}
|
|
60
|
-
return hex;
|
|
61
431
|
}
|
|
62
|
-
function
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
432
|
+
function decodeDataStream(streamType, bytes) {
|
|
433
|
+
switch (streamType) {
|
|
434
|
+
case "subgroup":
|
|
435
|
+
return decodeSubgroupStream(bytes);
|
|
436
|
+
case "datagram":
|
|
437
|
+
return decodeDatagram(bytes);
|
|
438
|
+
case "fetch":
|
|
439
|
+
return decodeFetchStream(bytes);
|
|
440
|
+
default: {
|
|
441
|
+
const _exhaustive = streamType;
|
|
442
|
+
throw new Error(`Unknown stream type: ${_exhaustive}`);
|
|
443
|
+
}
|
|
66
444
|
}
|
|
67
|
-
return bytes;
|
|
68
445
|
}
|
|
446
|
+
function createSubgroupStreamDecoder() {
|
|
447
|
+
let buffer = new Uint8Array(0);
|
|
448
|
+
let offset = 0;
|
|
449
|
+
let headerEmitted = false;
|
|
450
|
+
let prevObjectId = -1n;
|
|
451
|
+
let firstObject = true;
|
|
452
|
+
let _subgroupIsFirstObjId = false;
|
|
453
|
+
let _extensionsPresent = false;
|
|
454
|
+
return new TransformStream({
|
|
455
|
+
transform(chunk, controller) {
|
|
456
|
+
if (offset > 0) {
|
|
457
|
+
buffer = buffer.subarray(offset);
|
|
458
|
+
offset = 0;
|
|
459
|
+
}
|
|
460
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
461
|
+
newBuffer.set(buffer, 0);
|
|
462
|
+
newBuffer.set(chunk, buffer.length);
|
|
463
|
+
buffer = newBuffer;
|
|
464
|
+
if (!headerEmitted) {
|
|
465
|
+
try {
|
|
466
|
+
const r = new BufferReader(buffer.subarray(offset));
|
|
467
|
+
const streamType = Number(r.readVarInt());
|
|
468
|
+
if (!(streamType >= 16 && streamType <= 29 || streamType >= 48 && streamType <= 61)) {
|
|
469
|
+
controller.error(
|
|
470
|
+
new DecodeError(
|
|
471
|
+
"CONSTRAINT_VIOLATION",
|
|
472
|
+
`Expected subgroup stream type, got 0x${streamType.toString(16)}`,
|
|
473
|
+
0
|
|
474
|
+
)
|
|
475
|
+
);
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
478
|
+
_extensionsPresent = (streamType & 1) !== 0;
|
|
479
|
+
const hasSubgroupField = (streamType & 4) !== 0;
|
|
480
|
+
_subgroupIsFirstObjId = (streamType & 2) !== 0 && !hasSubgroupField;
|
|
481
|
+
const hasPriority = streamType < 48;
|
|
482
|
+
const trackAlias = r.readVarInt();
|
|
483
|
+
const groupId = r.readVarInt();
|
|
484
|
+
let subgroupId = 0n;
|
|
485
|
+
if (hasSubgroupField) {
|
|
486
|
+
subgroupId = r.readVarInt();
|
|
487
|
+
}
|
|
488
|
+
let publisherPriority = 128;
|
|
489
|
+
if (hasPriority) {
|
|
490
|
+
publisherPriority = r.readUint8();
|
|
491
|
+
}
|
|
492
|
+
controller.enqueue({
|
|
493
|
+
type: "subgroup_header",
|
|
494
|
+
trackAlias,
|
|
495
|
+
groupId,
|
|
496
|
+
subgroupId,
|
|
497
|
+
publisherPriority
|
|
498
|
+
});
|
|
499
|
+
headerEmitted = true;
|
|
500
|
+
offset += r.offset;
|
|
501
|
+
} catch (e) {
|
|
502
|
+
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
505
|
+
controller.error(e);
|
|
506
|
+
return;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
while (offset < buffer.length) {
|
|
510
|
+
try {
|
|
511
|
+
const r = new BufferReader(buffer.subarray(offset));
|
|
512
|
+
const delta = r.readVarInt();
|
|
513
|
+
let objectId;
|
|
514
|
+
if (firstObject) {
|
|
515
|
+
objectId = delta;
|
|
516
|
+
firstObject = false;
|
|
517
|
+
} else {
|
|
518
|
+
objectId = prevObjectId + 1n + delta;
|
|
519
|
+
}
|
|
520
|
+
let extensionData = new Uint8Array(0);
|
|
521
|
+
if (_extensionsPresent) {
|
|
522
|
+
const extLen = Number(r.readVarInt());
|
|
523
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0);
|
|
524
|
+
}
|
|
525
|
+
const payloadLength = Number(r.readVarInt());
|
|
526
|
+
const payloadByteOffset = r.offset;
|
|
527
|
+
const payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0);
|
|
528
|
+
controller.enqueue({ type: "object", objectId, payloadLength, payload, extensionData, byteOffset: 0, payloadByteOffset });
|
|
529
|
+
offset += r.offset;
|
|
530
|
+
prevObjectId = objectId;
|
|
531
|
+
} catch (e) {
|
|
532
|
+
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
533
|
+
break;
|
|
534
|
+
}
|
|
535
|
+
controller.error(e);
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
},
|
|
540
|
+
flush(controller) {
|
|
541
|
+
if (offset < buffer.length) {
|
|
542
|
+
controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
function createFetchStreamDecoder() {
|
|
548
|
+
let buffer = new Uint8Array(0);
|
|
549
|
+
let offset = 0;
|
|
550
|
+
let headerEmitted = false;
|
|
551
|
+
return new TransformStream({
|
|
552
|
+
transform(chunk, controller) {
|
|
553
|
+
if (offset > 0) {
|
|
554
|
+
buffer = buffer.subarray(offset);
|
|
555
|
+
offset = 0;
|
|
556
|
+
}
|
|
557
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
558
|
+
newBuffer.set(buffer, 0);
|
|
559
|
+
newBuffer.set(chunk, buffer.length);
|
|
560
|
+
buffer = newBuffer;
|
|
561
|
+
if (!headerEmitted) {
|
|
562
|
+
try {
|
|
563
|
+
const r = new BufferReader(buffer.subarray(offset));
|
|
564
|
+
const streamType = r.readVarInt();
|
|
565
|
+
if (streamType !== FETCH_STREAM_TYPE) {
|
|
566
|
+
controller.error(
|
|
567
|
+
new DecodeError(
|
|
568
|
+
"CONSTRAINT_VIOLATION",
|
|
569
|
+
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
570
|
+
0
|
|
571
|
+
)
|
|
572
|
+
);
|
|
573
|
+
return;
|
|
574
|
+
}
|
|
575
|
+
const requestId = r.readVarInt();
|
|
576
|
+
controller.enqueue({ type: "fetch_header", requestId });
|
|
577
|
+
headerEmitted = true;
|
|
578
|
+
offset += r.offset;
|
|
579
|
+
} catch (e) {
|
|
580
|
+
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
581
|
+
return;
|
|
582
|
+
}
|
|
583
|
+
controller.error(e);
|
|
584
|
+
return;
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
while (offset < buffer.length) {
|
|
588
|
+
try {
|
|
589
|
+
const r = new BufferReader(buffer.subarray(offset));
|
|
590
|
+
const flags = Number(r.readVarInt());
|
|
591
|
+
const objectIdPresent = (flags & 4) !== 0;
|
|
592
|
+
const groupIdPresent = (flags & 8) !== 0;
|
|
593
|
+
const priorityPresent = (flags & 16) !== 0;
|
|
594
|
+
const extensionsPresent = (flags & 32) !== 0;
|
|
595
|
+
const subgroupEncoding = flags & 3;
|
|
596
|
+
if (groupIdPresent) r.readVarInt();
|
|
597
|
+
if (subgroupEncoding === 3) r.readVarInt();
|
|
598
|
+
let objectId = 0n;
|
|
599
|
+
if (objectIdPresent) objectId = r.readVarInt();
|
|
600
|
+
if (priorityPresent) r.readUint8();
|
|
601
|
+
let extensionData = new Uint8Array(0);
|
|
602
|
+
if (extensionsPresent) {
|
|
603
|
+
const extLen = Number(r.readVarInt());
|
|
604
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0);
|
|
605
|
+
}
|
|
606
|
+
const payloadLength = Number(r.readVarInt());
|
|
607
|
+
const payloadByteOffset = r.offset;
|
|
608
|
+
const payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0);
|
|
609
|
+
controller.enqueue({ type: "object", objectId, payloadLength, payload, extensionData, byteOffset: 0, payloadByteOffset });
|
|
610
|
+
offset += r.offset;
|
|
611
|
+
} catch (e) {
|
|
612
|
+
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
613
|
+
break;
|
|
614
|
+
}
|
|
615
|
+
controller.error(e);
|
|
616
|
+
return;
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
},
|
|
620
|
+
flush(controller) {
|
|
621
|
+
if (offset < buffer.length) {
|
|
622
|
+
controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
});
|
|
626
|
+
}
|
|
627
|
+
function createDataStreamDecoder() {
|
|
628
|
+
let buffer = new Uint8Array(0);
|
|
629
|
+
let offset = 0;
|
|
630
|
+
let inner = null;
|
|
631
|
+
return new TransformStream({
|
|
632
|
+
transform(chunk, controller) {
|
|
633
|
+
if (offset > 0) {
|
|
634
|
+
buffer = buffer.subarray(offset);
|
|
635
|
+
offset = 0;
|
|
636
|
+
}
|
|
637
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
638
|
+
newBuffer.set(buffer, 0);
|
|
639
|
+
newBuffer.set(chunk, buffer.length);
|
|
640
|
+
buffer = newBuffer;
|
|
641
|
+
if (inner === null) {
|
|
642
|
+
if (offset >= buffer.length) return;
|
|
643
|
+
const firstByte = buffer[offset];
|
|
644
|
+
if (firstByte >= 16 && firstByte <= 29 || firstByte >= 48 && firstByte <= 61) {
|
|
645
|
+
const decoder = createSubgroupStreamDecoder();
|
|
646
|
+
inner = decoder;
|
|
647
|
+
} else if (firstByte === 5) {
|
|
648
|
+
const decoder = createFetchStreamDecoder();
|
|
649
|
+
inner = decoder;
|
|
650
|
+
} else {
|
|
651
|
+
controller.error(
|
|
652
|
+
new DecodeError(
|
|
653
|
+
"CONSTRAINT_VIOLATION",
|
|
654
|
+
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
655
|
+
0
|
|
656
|
+
)
|
|
657
|
+
);
|
|
658
|
+
return;
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
},
|
|
662
|
+
flush(controller) {
|
|
663
|
+
if (offset >= buffer.length) return;
|
|
664
|
+
const view = buffer.subarray(offset);
|
|
665
|
+
const firstByte = view[0];
|
|
666
|
+
let result;
|
|
667
|
+
if (firstByte >= 16 && firstByte <= 29 || firstByte >= 48 && firstByte <= 61) {
|
|
668
|
+
result = decodeSubgroupStream(view);
|
|
669
|
+
} else if (firstByte === 5) {
|
|
670
|
+
result = decodeFetchStream(view);
|
|
671
|
+
} else {
|
|
672
|
+
controller.error(
|
|
673
|
+
new DecodeError(
|
|
674
|
+
"CONSTRAINT_VIOLATION",
|
|
675
|
+
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
676
|
+
0
|
|
677
|
+
)
|
|
678
|
+
);
|
|
679
|
+
return;
|
|
680
|
+
}
|
|
681
|
+
if (!result.ok) {
|
|
682
|
+
controller.error(result.error);
|
|
683
|
+
return;
|
|
684
|
+
}
|
|
685
|
+
const stream = result.value;
|
|
686
|
+
if (stream.type === "subgroup") {
|
|
687
|
+
controller.enqueue({
|
|
688
|
+
type: "subgroup_header",
|
|
689
|
+
trackAlias: stream.trackAlias,
|
|
690
|
+
groupId: stream.groupId,
|
|
691
|
+
subgroupId: stream.subgroupId,
|
|
692
|
+
publisherPriority: stream.publisherPriority
|
|
693
|
+
});
|
|
694
|
+
for (const obj of stream.objects) {
|
|
695
|
+
controller.enqueue(obj);
|
|
696
|
+
}
|
|
697
|
+
} else if (stream.type === "fetch") {
|
|
698
|
+
controller.enqueue({
|
|
699
|
+
type: "fetch_header",
|
|
700
|
+
requestId: stream.requestId
|
|
701
|
+
});
|
|
702
|
+
for (const obj of stream.objects) {
|
|
703
|
+
controller.enqueue(obj);
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
});
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
// src/drafts/draft17/codec.ts
|
|
711
|
+
var textEncoder = /* @__PURE__ */ new TextEncoder();
|
|
712
|
+
var textDecoder = /* @__PURE__ */ new TextDecoder();
|
|
69
713
|
function encodeSetupOptions(opts, writer) {
|
|
70
714
|
const entries = [];
|
|
71
715
|
if (opts.path !== void 0) {
|
|
72
716
|
entries.push({
|
|
73
717
|
type: SETUP_OPT_PATH,
|
|
74
718
|
encode: (w) => {
|
|
75
|
-
const encoded =
|
|
719
|
+
const encoded = textEncoder.encode(opts.path);
|
|
76
720
|
w.writeVarInt(BigInt(encoded.byteLength));
|
|
77
721
|
w.writeBytes(encoded);
|
|
78
722
|
}
|
|
@@ -88,7 +732,7 @@ function encodeSetupOptions(opts, writer) {
|
|
|
88
732
|
entries.push({
|
|
89
733
|
type: SETUP_OPT_AUTHORITY,
|
|
90
734
|
encode: (w) => {
|
|
91
|
-
const encoded =
|
|
735
|
+
const encoded = textEncoder.encode(opts.authority);
|
|
92
736
|
w.writeVarInt(BigInt(encoded.byteLength));
|
|
93
737
|
w.writeBytes(encoded);
|
|
94
738
|
}
|
|
@@ -98,7 +742,7 @@ function encodeSetupOptions(opts, writer) {
|
|
|
98
742
|
entries.push({
|
|
99
743
|
type: SETUP_OPT_MOQT_IMPLEMENTATION,
|
|
100
744
|
encode: (w) => {
|
|
101
|
-
const encoded =
|
|
745
|
+
const encoded = textEncoder.encode(opts.moqt_implementation);
|
|
102
746
|
w.writeVarInt(BigInt(encoded.byteLength));
|
|
103
747
|
w.writeBytes(encoded);
|
|
104
748
|
}
|
|
@@ -157,11 +801,11 @@ function decodeSetupOptions(reader, payloadEnd) {
|
|
|
157
801
|
const length = Number(reader.readVarInt());
|
|
158
802
|
const bytes = reader.readBytes(length);
|
|
159
803
|
if (optType === SETUP_OPT_PATH) {
|
|
160
|
-
result.path =
|
|
804
|
+
result.path = textDecoder.decode(bytes);
|
|
161
805
|
} else if (optType === SETUP_OPT_AUTHORITY) {
|
|
162
|
-
result.authority =
|
|
806
|
+
result.authority = textDecoder.decode(bytes);
|
|
163
807
|
} else if (optType === SETUP_OPT_MOQT_IMPLEMENTATION) {
|
|
164
|
-
result.moqt_implementation =
|
|
808
|
+
result.moqt_implementation = textDecoder.decode(bytes);
|
|
165
809
|
} else {
|
|
166
810
|
unknown.push({ id: `0x${optType.toString(16)}`, length, raw_hex: bytesToHex(bytes) });
|
|
167
811
|
}
|
|
@@ -627,11 +1271,11 @@ function encodeMessage(message) {
|
|
|
627
1271
|
}
|
|
628
1272
|
const payloadWriter = new BufferWriter();
|
|
629
1273
|
encodePayload(message, payloadWriter);
|
|
630
|
-
const payload = payloadWriter.
|
|
1274
|
+
const payload = payloadWriter.finishView();
|
|
631
1275
|
if (payload.byteLength > 65535) {
|
|
632
1276
|
throw new Error(`Payload too large for 16-bit length: ${payload.byteLength}`);
|
|
633
1277
|
}
|
|
634
|
-
const writer = new BufferWriter();
|
|
1278
|
+
const writer = new BufferWriter(payload.byteLength + 16);
|
|
635
1279
|
writer.writeVarInt(typeId);
|
|
636
1280
|
writer.writeUint8(payload.byteLength >> 8 & 255);
|
|
637
1281
|
writer.writeUint8(payload.byteLength & 255);
|
|
@@ -732,357 +1376,37 @@ function decodeMessage(bytes) {
|
|
|
732
1376
|
message = decodeGoAwayPayload(payloadReader);
|
|
733
1377
|
} else {
|
|
734
1378
|
return {
|
|
735
|
-
ok: false,
|
|
736
|
-
error: new DecodeError(
|
|
737
|
-
"UNKNOWN_MESSAGE_TYPE",
|
|
738
|
-
`Unknown message type ID: 0x${typeId.toString(16)}`,
|
|
739
|
-
0
|
|
740
|
-
)
|
|
741
|
-
};
|
|
742
|
-
}
|
|
743
|
-
return { ok: true, value: message, bytesRead: reader.offset };
|
|
744
|
-
} catch (e) {
|
|
745
|
-
if (e instanceof DecodeError) {
|
|
746
|
-
return { ok: false, error: e };
|
|
747
|
-
}
|
|
748
|
-
throw e;
|
|
749
|
-
}
|
|
750
|
-
}
|
|
751
|
-
var FETCH_STREAM_TYPE = 0x05n;
|
|
752
|
-
function encodeSubgroupStream(stream) {
|
|
753
|
-
const w = new BufferWriter();
|
|
754
|
-
const streamType = stream.headerType;
|
|
755
|
-
w.writeVarInt(BigInt(streamType));
|
|
756
|
-
const hasSubgroupField = (streamType & 4) !== 0;
|
|
757
|
-
const hasPriority = streamType < 48;
|
|
758
|
-
w.writeVarInt(stream.trackAlias);
|
|
759
|
-
w.writeVarInt(stream.groupId);
|
|
760
|
-
if (hasSubgroupField) {
|
|
761
|
-
w.writeVarInt(stream.subgroupId);
|
|
762
|
-
}
|
|
763
|
-
if (hasPriority) {
|
|
764
|
-
w.writeUint8(stream.publisherPriority);
|
|
765
|
-
}
|
|
766
|
-
let prevObjectId = -1n;
|
|
767
|
-
for (const obj of stream.objects) {
|
|
768
|
-
const delta = prevObjectId < 0n ? obj.objectId : obj.objectId - prevObjectId - 1n;
|
|
769
|
-
w.writeVarInt(delta);
|
|
770
|
-
w.writeVarInt(BigInt(obj.payloadLength));
|
|
771
|
-
if (obj.payloadLength === 0) {
|
|
772
|
-
w.writeVarInt(obj.status ?? 0n);
|
|
773
|
-
} else {
|
|
774
|
-
w.writeBytes(obj.payload);
|
|
775
|
-
}
|
|
776
|
-
prevObjectId = obj.objectId;
|
|
777
|
-
}
|
|
778
|
-
return w.finish();
|
|
779
|
-
}
|
|
780
|
-
function encodeDatagram(dg) {
|
|
781
|
-
const w = new BufferWriter();
|
|
782
|
-
const dgType = dg.datagramType;
|
|
783
|
-
w.writeVarInt(BigInt(dgType));
|
|
784
|
-
w.writeVarInt(dg.trackAlias);
|
|
785
|
-
w.writeVarInt(dg.groupId);
|
|
786
|
-
const objectIdAbsent = (dgType & 4) !== 0;
|
|
787
|
-
const isStatus = (dgType & 32) !== 0;
|
|
788
|
-
const defaultPriority = (dgType & 8) !== 0;
|
|
789
|
-
if (!objectIdAbsent) {
|
|
790
|
-
w.writeVarInt(dg.objectId);
|
|
791
|
-
}
|
|
792
|
-
if (!defaultPriority) {
|
|
793
|
-
w.writeUint8(dg.publisherPriority);
|
|
794
|
-
}
|
|
795
|
-
if (isStatus) {
|
|
796
|
-
w.writeVarInt(dg.objectStatus ?? 0n);
|
|
797
|
-
} else {
|
|
798
|
-
w.writeBytes(dg.payload);
|
|
799
|
-
}
|
|
800
|
-
return w.finish();
|
|
801
|
-
}
|
|
802
|
-
function encodeFetchStream(stream) {
|
|
803
|
-
const w = new BufferWriter();
|
|
804
|
-
w.writeVarInt(FETCH_STREAM_TYPE);
|
|
805
|
-
w.writeVarInt(stream.requestId);
|
|
806
|
-
for (const obj of stream.objects) {
|
|
807
|
-
w.writeUint8(obj.serializationFlags);
|
|
808
|
-
const flags = obj.serializationFlags;
|
|
809
|
-
if (flags & 8) w.writeVarInt(obj.groupId);
|
|
810
|
-
const subgroupEncoding = flags & 3;
|
|
811
|
-
if (subgroupEncoding === 3) w.writeVarInt(obj.subgroupId);
|
|
812
|
-
if (flags & 4) w.writeVarInt(obj.objectId);
|
|
813
|
-
if (flags & 16) w.writeUint8(obj.publisherPriority);
|
|
814
|
-
w.writeVarInt(BigInt(obj.payloadLength));
|
|
815
|
-
if (obj.payloadLength === 0) {
|
|
816
|
-
w.writeVarInt(obj.status ?? 0n);
|
|
817
|
-
} else {
|
|
818
|
-
w.writeBytes(obj.payload);
|
|
819
|
-
}
|
|
820
|
-
}
|
|
821
|
-
return w.finish();
|
|
822
|
-
}
|
|
823
|
-
function decodeSubgroupStream(bytes) {
|
|
824
|
-
try {
|
|
825
|
-
const r = new BufferReader(bytes);
|
|
826
|
-
const streamType = Number(r.readVarInt());
|
|
827
|
-
if (!(streamType >= 16 && streamType <= 29 || streamType >= 48 && streamType <= 61)) {
|
|
828
|
-
return {
|
|
829
|
-
ok: false,
|
|
830
|
-
error: new DecodeError(
|
|
831
|
-
"CONSTRAINT_VIOLATION",
|
|
832
|
-
`Expected subgroup stream type 0x10-0x1D or 0x30-0x3D, got 0x${streamType.toString(16)}`,
|
|
833
|
-
0
|
|
834
|
-
)
|
|
835
|
-
};
|
|
836
|
-
}
|
|
837
|
-
const hasSubgroupField = (streamType & 4) !== 0;
|
|
838
|
-
const subgroupIsFirstObjId = (streamType & 2) !== 0 && !hasSubgroupField;
|
|
839
|
-
const hasPriority = streamType < 48;
|
|
840
|
-
const trackAlias = r.readVarInt();
|
|
841
|
-
const groupId = r.readVarInt();
|
|
842
|
-
let subgroupId = 0n;
|
|
843
|
-
if (hasSubgroupField) {
|
|
844
|
-
subgroupId = r.readVarInt();
|
|
845
|
-
}
|
|
846
|
-
let publisherPriority = 128;
|
|
847
|
-
if (hasPriority) {
|
|
848
|
-
publisherPriority = r.readUint8();
|
|
849
|
-
}
|
|
850
|
-
const objects = [];
|
|
851
|
-
let prevObjectId = -1n;
|
|
852
|
-
let firstObject = true;
|
|
853
|
-
while (r.remaining > 0) {
|
|
854
|
-
const delta = r.readVarInt();
|
|
855
|
-
let objectId;
|
|
856
|
-
if (firstObject) {
|
|
857
|
-
objectId = delta;
|
|
858
|
-
if (subgroupIsFirstObjId && firstObject) {
|
|
859
|
-
subgroupId = objectId;
|
|
860
|
-
}
|
|
861
|
-
firstObject = false;
|
|
862
|
-
} else {
|
|
863
|
-
objectId = prevObjectId + 1n + delta;
|
|
864
|
-
}
|
|
865
|
-
const payloadLength = Number(r.readVarInt());
|
|
866
|
-
let payload;
|
|
867
|
-
let status;
|
|
868
|
-
if (payloadLength === 0) {
|
|
869
|
-
status = r.readVarInt();
|
|
870
|
-
payload = new Uint8Array(0);
|
|
871
|
-
} else {
|
|
872
|
-
payload = r.readBytes(payloadLength);
|
|
873
|
-
}
|
|
874
|
-
const obj = { type: "object", objectId, payloadLength, payload };
|
|
875
|
-
if (status !== void 0) obj.status = status;
|
|
876
|
-
objects.push(obj);
|
|
877
|
-
prevObjectId = objectId;
|
|
878
|
-
}
|
|
879
|
-
return {
|
|
880
|
-
ok: true,
|
|
881
|
-
value: {
|
|
882
|
-
type: "subgroup",
|
|
883
|
-
headerType: streamType,
|
|
884
|
-
trackAlias,
|
|
885
|
-
groupId,
|
|
886
|
-
subgroupId,
|
|
887
|
-
publisherPriority,
|
|
888
|
-
objects
|
|
889
|
-
},
|
|
890
|
-
bytesRead: r.offset
|
|
891
|
-
};
|
|
892
|
-
} catch (e) {
|
|
893
|
-
if (e instanceof DecodeError) return { ok: false, error: e };
|
|
894
|
-
throw e;
|
|
895
|
-
}
|
|
896
|
-
}
|
|
897
|
-
function decodeDatagram(bytes) {
|
|
898
|
-
try {
|
|
899
|
-
const r = new BufferReader(bytes);
|
|
900
|
-
const dgType = Number(r.readVarInt());
|
|
901
|
-
const objectIdAbsent = (dgType & 4) !== 0;
|
|
902
|
-
const endOfGroup = (dgType & 2) !== 0;
|
|
903
|
-
const isStatus = (dgType & 32) !== 0;
|
|
904
|
-
const defaultPriority = (dgType & 8) !== 0;
|
|
905
|
-
const trackAlias = r.readVarInt();
|
|
906
|
-
const groupId = r.readVarInt();
|
|
907
|
-
let objectId = 0n;
|
|
908
|
-
if (!objectIdAbsent) {
|
|
909
|
-
objectId = r.readVarInt();
|
|
910
|
-
}
|
|
911
|
-
let publisherPriority = 128;
|
|
912
|
-
if (!defaultPriority) {
|
|
913
|
-
publisherPriority = r.readUint8();
|
|
914
|
-
}
|
|
915
|
-
let objectStatus;
|
|
916
|
-
let payload;
|
|
917
|
-
if (isStatus) {
|
|
918
|
-
objectStatus = r.readVarInt();
|
|
919
|
-
payload = new Uint8Array(0);
|
|
920
|
-
} else {
|
|
921
|
-
payload = r.readBytes(r.remaining);
|
|
922
|
-
}
|
|
923
|
-
const payloadLength = payload.byteLength;
|
|
924
|
-
const result = {
|
|
925
|
-
type: "datagram",
|
|
926
|
-
datagramType: dgType,
|
|
927
|
-
trackAlias,
|
|
928
|
-
groupId,
|
|
929
|
-
objectId,
|
|
930
|
-
publisherPriority,
|
|
931
|
-
payloadLength,
|
|
932
|
-
payload
|
|
933
|
-
};
|
|
934
|
-
if (endOfGroup) result.endOfGroup = true;
|
|
935
|
-
if (objectStatus !== void 0)
|
|
936
|
-
result.objectStatus = objectStatus;
|
|
937
|
-
return { ok: true, value: result, bytesRead: r.offset };
|
|
938
|
-
} catch (e) {
|
|
939
|
-
if (e instanceof DecodeError) return { ok: false, error: e };
|
|
940
|
-
throw e;
|
|
941
|
-
}
|
|
942
|
-
}
|
|
943
|
-
function decodeFetchStream(bytes) {
|
|
944
|
-
try {
|
|
945
|
-
const r = new BufferReader(bytes);
|
|
946
|
-
const streamType = r.readVarInt();
|
|
947
|
-
if (streamType !== FETCH_STREAM_TYPE) {
|
|
948
|
-
return {
|
|
949
|
-
ok: false,
|
|
950
|
-
error: new DecodeError(
|
|
951
|
-
"CONSTRAINT_VIOLATION",
|
|
952
|
-
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
953
|
-
0
|
|
954
|
-
)
|
|
955
|
-
};
|
|
956
|
-
}
|
|
957
|
-
const requestId = r.readVarInt();
|
|
958
|
-
const objects = [];
|
|
959
|
-
let prevGroupId = 0n;
|
|
960
|
-
let prevSubgroupId = 0n;
|
|
961
|
-
let prevObjectId = 0n;
|
|
962
|
-
let prevPriority = 128;
|
|
963
|
-
let first = true;
|
|
964
|
-
while (r.remaining > 0) {
|
|
965
|
-
const flags = r.readUint8();
|
|
966
|
-
const subgroupEncoding = flags & 3;
|
|
967
|
-
const objectIdPresent = (flags & 4) !== 0;
|
|
968
|
-
const groupIdPresent = (flags & 8) !== 0;
|
|
969
|
-
const priorityPresent = (flags & 16) !== 0;
|
|
970
|
-
const extensionsPresent = (flags & 32) !== 0;
|
|
971
|
-
if (flags & 192) {
|
|
972
|
-
return {
|
|
973
|
-
ok: false,
|
|
974
|
-
error: new DecodeError(
|
|
975
|
-
"CONSTRAINT_VIOLATION",
|
|
976
|
-
"Reserved bits set in fetch object flags",
|
|
977
|
-
r.offset
|
|
978
|
-
)
|
|
979
|
-
};
|
|
980
|
-
}
|
|
981
|
-
let groupId = prevGroupId;
|
|
982
|
-
if (groupIdPresent) {
|
|
983
|
-
groupId = r.readVarInt();
|
|
984
|
-
} else if (first) {
|
|
985
|
-
return {
|
|
986
|
-
ok: false,
|
|
987
|
-
error: new DecodeError(
|
|
988
|
-
"CONSTRAINT_VIOLATION",
|
|
989
|
-
"First fetch object must include groupId",
|
|
990
|
-
r.offset
|
|
991
|
-
)
|
|
992
|
-
};
|
|
993
|
-
}
|
|
994
|
-
let subgroupId = prevSubgroupId;
|
|
995
|
-
if (subgroupEncoding === 0) {
|
|
996
|
-
subgroupId = 0n;
|
|
997
|
-
} else if (subgroupEncoding === 1) {
|
|
998
|
-
subgroupId = prevSubgroupId;
|
|
999
|
-
} else if (subgroupEncoding === 2) {
|
|
1000
|
-
subgroupId = prevSubgroupId + 1n;
|
|
1001
|
-
} else if (subgroupEncoding === 3) {
|
|
1002
|
-
subgroupId = r.readVarInt();
|
|
1003
|
-
}
|
|
1004
|
-
let objectId = prevObjectId + 1n;
|
|
1005
|
-
if (objectIdPresent) {
|
|
1006
|
-
objectId = r.readVarInt();
|
|
1007
|
-
} else if (first) {
|
|
1008
|
-
return {
|
|
1009
|
-
ok: false,
|
|
1010
|
-
error: new DecodeError(
|
|
1011
|
-
"CONSTRAINT_VIOLATION",
|
|
1012
|
-
"First fetch object must include objectId",
|
|
1013
|
-
r.offset
|
|
1014
|
-
)
|
|
1015
|
-
};
|
|
1016
|
-
}
|
|
1017
|
-
if (priorityPresent) {
|
|
1018
|
-
prevPriority = r.readUint8();
|
|
1019
|
-
}
|
|
1020
|
-
if (extensionsPresent) {
|
|
1021
|
-
const extLen = Number(r.readVarInt());
|
|
1022
|
-
if (extLen > 0) {
|
|
1023
|
-
r.readBytes(extLen);
|
|
1024
|
-
}
|
|
1025
|
-
}
|
|
1026
|
-
const payloadLength = Number(r.readVarInt());
|
|
1027
|
-
let payload;
|
|
1028
|
-
let status;
|
|
1029
|
-
if (payloadLength > 0) {
|
|
1030
|
-
payload = r.readBytes(payloadLength);
|
|
1031
|
-
} else {
|
|
1032
|
-
status = r.readVarInt();
|
|
1033
|
-
payload = new Uint8Array(0);
|
|
1034
|
-
}
|
|
1035
|
-
const obj = {
|
|
1036
|
-
type: "object",
|
|
1037
|
-
serializationFlags: flags,
|
|
1038
|
-
groupId,
|
|
1039
|
-
subgroupId,
|
|
1040
|
-
objectId,
|
|
1041
|
-
publisherPriority: prevPriority,
|
|
1042
|
-
payloadLength,
|
|
1043
|
-
payload
|
|
1379
|
+
ok: false,
|
|
1380
|
+
error: new DecodeError(
|
|
1381
|
+
"UNKNOWN_MESSAGE_TYPE",
|
|
1382
|
+
`Unknown message type ID: 0x${typeId.toString(16)}`,
|
|
1383
|
+
0
|
|
1384
|
+
)
|
|
1044
1385
|
};
|
|
1045
|
-
if (status !== void 0) obj.status = status;
|
|
1046
|
-
objects.push(obj);
|
|
1047
|
-
prevGroupId = groupId;
|
|
1048
|
-
prevSubgroupId = subgroupId;
|
|
1049
|
-
prevObjectId = objectId;
|
|
1050
|
-
first = false;
|
|
1051
1386
|
}
|
|
1052
|
-
return {
|
|
1053
|
-
ok: true,
|
|
1054
|
-
value: { type: "fetch", requestId, objects },
|
|
1055
|
-
bytesRead: r.offset
|
|
1056
|
-
};
|
|
1387
|
+
return { ok: true, value: message, bytesRead: reader.offset };
|
|
1057
1388
|
} catch (e) {
|
|
1058
|
-
if (e instanceof DecodeError)
|
|
1059
|
-
|
|
1060
|
-
}
|
|
1061
|
-
}
|
|
1062
|
-
function decodeDataStream(streamType, bytes) {
|
|
1063
|
-
switch (streamType) {
|
|
1064
|
-
case "subgroup":
|
|
1065
|
-
return decodeSubgroupStream(bytes);
|
|
1066
|
-
case "datagram":
|
|
1067
|
-
return decodeDatagram(bytes);
|
|
1068
|
-
case "fetch":
|
|
1069
|
-
return decodeFetchStream(bytes);
|
|
1070
|
-
default: {
|
|
1071
|
-
const _exhaustive = streamType;
|
|
1072
|
-
throw new Error(`Unknown stream type: ${_exhaustive}`);
|
|
1389
|
+
if (e instanceof DecodeError) {
|
|
1390
|
+
return { ok: false, error: e };
|
|
1073
1391
|
}
|
|
1392
|
+
throw e;
|
|
1074
1393
|
}
|
|
1075
1394
|
}
|
|
1076
1395
|
function createStreamDecoder() {
|
|
1077
1396
|
let buffer = new Uint8Array(0);
|
|
1397
|
+
let offset = 0;
|
|
1078
1398
|
return new TransformStream({
|
|
1079
1399
|
transform(chunk, controller) {
|
|
1400
|
+
if (offset > 0) {
|
|
1401
|
+
buffer = buffer.subarray(offset);
|
|
1402
|
+
offset = 0;
|
|
1403
|
+
}
|
|
1080
1404
|
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
1081
1405
|
newBuffer.set(buffer, 0);
|
|
1082
1406
|
newBuffer.set(chunk, buffer.length);
|
|
1083
1407
|
buffer = newBuffer;
|
|
1084
|
-
while (buffer.length
|
|
1085
|
-
const result = decodeMessage(buffer);
|
|
1408
|
+
while (offset < buffer.length) {
|
|
1409
|
+
const result = decodeMessage(buffer.subarray(offset));
|
|
1086
1410
|
if (!result.ok) {
|
|
1087
1411
|
if (result.error.code === "UNEXPECTED_END") {
|
|
1088
1412
|
break;
|
|
@@ -1091,11 +1415,11 @@ function createStreamDecoder() {
|
|
|
1091
1415
|
return;
|
|
1092
1416
|
}
|
|
1093
1417
|
controller.enqueue(result.value);
|
|
1094
|
-
|
|
1418
|
+
offset += result.bytesRead;
|
|
1095
1419
|
}
|
|
1096
1420
|
},
|
|
1097
1421
|
flush(controller) {
|
|
1098
|
-
if (buffer.length
|
|
1422
|
+
if (offset < buffer.length) {
|
|
1099
1423
|
controller.error(
|
|
1100
1424
|
new DecodeError("UNEXPECTED_END", "Stream ended with incomplete message data", 0)
|
|
1101
1425
|
);
|
|
@@ -1103,243 +1427,6 @@ function createStreamDecoder() {
|
|
|
1103
1427
|
}
|
|
1104
1428
|
});
|
|
1105
1429
|
}
|
|
1106
|
-
function createSubgroupStreamDecoder() {
|
|
1107
|
-
let buffer = new Uint8Array(0);
|
|
1108
|
-
let headerEmitted = false;
|
|
1109
|
-
let prevObjectId = -1n;
|
|
1110
|
-
let firstObject = true;
|
|
1111
|
-
let _subgroupIsFirstObjId = false;
|
|
1112
|
-
return new TransformStream({
|
|
1113
|
-
transform(chunk, controller) {
|
|
1114
|
-
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
1115
|
-
newBuffer.set(buffer, 0);
|
|
1116
|
-
newBuffer.set(chunk, buffer.length);
|
|
1117
|
-
buffer = newBuffer;
|
|
1118
|
-
if (!headerEmitted) {
|
|
1119
|
-
try {
|
|
1120
|
-
const r = new BufferReader(buffer);
|
|
1121
|
-
const streamType = Number(r.readVarInt());
|
|
1122
|
-
if (!(streamType >= 16 && streamType <= 29 || streamType >= 48 && streamType <= 61)) {
|
|
1123
|
-
controller.error(
|
|
1124
|
-
new DecodeError(
|
|
1125
|
-
"CONSTRAINT_VIOLATION",
|
|
1126
|
-
`Expected subgroup stream type, got 0x${streamType.toString(16)}`,
|
|
1127
|
-
0
|
|
1128
|
-
)
|
|
1129
|
-
);
|
|
1130
|
-
return;
|
|
1131
|
-
}
|
|
1132
|
-
const hasSubgroupField = (streamType & 4) !== 0;
|
|
1133
|
-
_subgroupIsFirstObjId = (streamType & 2) !== 0 && !hasSubgroupField;
|
|
1134
|
-
const hasPriority = streamType < 48;
|
|
1135
|
-
const trackAlias = r.readVarInt();
|
|
1136
|
-
const groupId = r.readVarInt();
|
|
1137
|
-
let subgroupId = 0n;
|
|
1138
|
-
if (hasSubgroupField) {
|
|
1139
|
-
subgroupId = r.readVarInt();
|
|
1140
|
-
}
|
|
1141
|
-
let publisherPriority = 128;
|
|
1142
|
-
if (hasPriority) {
|
|
1143
|
-
publisherPriority = r.readUint8();
|
|
1144
|
-
}
|
|
1145
|
-
controller.enqueue({
|
|
1146
|
-
type: "subgroup_header",
|
|
1147
|
-
trackAlias,
|
|
1148
|
-
groupId,
|
|
1149
|
-
subgroupId,
|
|
1150
|
-
publisherPriority
|
|
1151
|
-
});
|
|
1152
|
-
headerEmitted = true;
|
|
1153
|
-
buffer = buffer.slice(r.offset);
|
|
1154
|
-
} catch (e) {
|
|
1155
|
-
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
1156
|
-
return;
|
|
1157
|
-
}
|
|
1158
|
-
controller.error(e);
|
|
1159
|
-
return;
|
|
1160
|
-
}
|
|
1161
|
-
}
|
|
1162
|
-
while (buffer.length > 0) {
|
|
1163
|
-
try {
|
|
1164
|
-
const r = new BufferReader(buffer);
|
|
1165
|
-
const delta = r.readVarInt();
|
|
1166
|
-
let objectId;
|
|
1167
|
-
if (firstObject) {
|
|
1168
|
-
objectId = delta;
|
|
1169
|
-
firstObject = false;
|
|
1170
|
-
} else {
|
|
1171
|
-
objectId = prevObjectId + 1n + delta;
|
|
1172
|
-
}
|
|
1173
|
-
const payloadLength = Number(r.readVarInt());
|
|
1174
|
-
const payload = payloadLength > 0 ? r.readBytes(payloadLength) : new Uint8Array(0);
|
|
1175
|
-
controller.enqueue({ type: "object", objectId, payloadLength, payload });
|
|
1176
|
-
buffer = buffer.slice(r.offset);
|
|
1177
|
-
prevObjectId = objectId;
|
|
1178
|
-
} catch (e) {
|
|
1179
|
-
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
1180
|
-
break;
|
|
1181
|
-
}
|
|
1182
|
-
controller.error(e);
|
|
1183
|
-
return;
|
|
1184
|
-
}
|
|
1185
|
-
}
|
|
1186
|
-
},
|
|
1187
|
-
flush(controller) {
|
|
1188
|
-
if (buffer.length > 0) {
|
|
1189
|
-
controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
|
|
1190
|
-
}
|
|
1191
|
-
}
|
|
1192
|
-
});
|
|
1193
|
-
}
|
|
1194
|
-
function createFetchStreamDecoder() {
|
|
1195
|
-
let buffer = new Uint8Array(0);
|
|
1196
|
-
let headerEmitted = false;
|
|
1197
|
-
return new TransformStream({
|
|
1198
|
-
transform(chunk, controller) {
|
|
1199
|
-
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
1200
|
-
newBuffer.set(buffer, 0);
|
|
1201
|
-
newBuffer.set(chunk, buffer.length);
|
|
1202
|
-
buffer = newBuffer;
|
|
1203
|
-
if (!headerEmitted) {
|
|
1204
|
-
try {
|
|
1205
|
-
const r = new BufferReader(buffer);
|
|
1206
|
-
const streamType = r.readVarInt();
|
|
1207
|
-
if (streamType !== FETCH_STREAM_TYPE) {
|
|
1208
|
-
controller.error(
|
|
1209
|
-
new DecodeError(
|
|
1210
|
-
"CONSTRAINT_VIOLATION",
|
|
1211
|
-
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
1212
|
-
0
|
|
1213
|
-
)
|
|
1214
|
-
);
|
|
1215
|
-
return;
|
|
1216
|
-
}
|
|
1217
|
-
const requestId = r.readVarInt();
|
|
1218
|
-
controller.enqueue({ type: "fetch_header", requestId });
|
|
1219
|
-
headerEmitted = true;
|
|
1220
|
-
buffer = buffer.slice(r.offset);
|
|
1221
|
-
} catch (e) {
|
|
1222
|
-
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
1223
|
-
return;
|
|
1224
|
-
}
|
|
1225
|
-
controller.error(e);
|
|
1226
|
-
return;
|
|
1227
|
-
}
|
|
1228
|
-
}
|
|
1229
|
-
while (buffer.length > 0) {
|
|
1230
|
-
try {
|
|
1231
|
-
const r = new BufferReader(buffer);
|
|
1232
|
-
const flags = r.readUint8();
|
|
1233
|
-
const objectIdPresent = (flags & 4) !== 0;
|
|
1234
|
-
const groupIdPresent = (flags & 8) !== 0;
|
|
1235
|
-
const priorityPresent = (flags & 16) !== 0;
|
|
1236
|
-
const extensionsPresent = (flags & 32) !== 0;
|
|
1237
|
-
const subgroupEncoding = flags & 3;
|
|
1238
|
-
if (groupIdPresent) r.readVarInt();
|
|
1239
|
-
if (subgroupEncoding === 3) r.readVarInt();
|
|
1240
|
-
let objectId = 0n;
|
|
1241
|
-
if (objectIdPresent) objectId = r.readVarInt();
|
|
1242
|
-
if (priorityPresent) r.readUint8();
|
|
1243
|
-
if (extensionsPresent) {
|
|
1244
|
-
const extLen = Number(r.readVarInt());
|
|
1245
|
-
if (extLen > 0) r.readBytes(extLen);
|
|
1246
|
-
}
|
|
1247
|
-
const payloadLength = Number(r.readVarInt());
|
|
1248
|
-
const payload = payloadLength > 0 ? r.readBytes(payloadLength) : new Uint8Array(0);
|
|
1249
|
-
controller.enqueue({ type: "object", objectId, payloadLength, payload });
|
|
1250
|
-
buffer = buffer.slice(r.offset);
|
|
1251
|
-
} catch (e) {
|
|
1252
|
-
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
1253
|
-
break;
|
|
1254
|
-
}
|
|
1255
|
-
controller.error(e);
|
|
1256
|
-
return;
|
|
1257
|
-
}
|
|
1258
|
-
}
|
|
1259
|
-
},
|
|
1260
|
-
flush(controller) {
|
|
1261
|
-
if (buffer.length > 0) {
|
|
1262
|
-
controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
|
|
1263
|
-
}
|
|
1264
|
-
}
|
|
1265
|
-
});
|
|
1266
|
-
}
|
|
1267
|
-
function createDataStreamDecoder() {
|
|
1268
|
-
let buffer = new Uint8Array(0);
|
|
1269
|
-
let inner = null;
|
|
1270
|
-
return new TransformStream({
|
|
1271
|
-
transform(chunk, controller) {
|
|
1272
|
-
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
1273
|
-
newBuffer.set(buffer, 0);
|
|
1274
|
-
newBuffer.set(chunk, buffer.length);
|
|
1275
|
-
buffer = newBuffer;
|
|
1276
|
-
if (inner === null) {
|
|
1277
|
-
if (buffer.length === 0) return;
|
|
1278
|
-
const firstByte = buffer[0];
|
|
1279
|
-
if (firstByte >= 16 && firstByte <= 29 || firstByte >= 48 && firstByte <= 61) {
|
|
1280
|
-
const decoder = createSubgroupStreamDecoder();
|
|
1281
|
-
inner = decoder;
|
|
1282
|
-
} else if (firstByte === 5) {
|
|
1283
|
-
const decoder = createFetchStreamDecoder();
|
|
1284
|
-
inner = decoder;
|
|
1285
|
-
} else {
|
|
1286
|
-
controller.error(
|
|
1287
|
-
new DecodeError(
|
|
1288
|
-
"CONSTRAINT_VIOLATION",
|
|
1289
|
-
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
1290
|
-
0
|
|
1291
|
-
)
|
|
1292
|
-
);
|
|
1293
|
-
return;
|
|
1294
|
-
}
|
|
1295
|
-
}
|
|
1296
|
-
},
|
|
1297
|
-
flush(controller) {
|
|
1298
|
-
if (buffer.length === 0) return;
|
|
1299
|
-
const firstByte = buffer[0];
|
|
1300
|
-
let result;
|
|
1301
|
-
if (firstByte >= 16 && firstByte <= 29 || firstByte >= 48 && firstByte <= 61) {
|
|
1302
|
-
result = decodeSubgroupStream(buffer);
|
|
1303
|
-
} else if (firstByte === 5) {
|
|
1304
|
-
result = decodeFetchStream(buffer);
|
|
1305
|
-
} else {
|
|
1306
|
-
controller.error(
|
|
1307
|
-
new DecodeError(
|
|
1308
|
-
"CONSTRAINT_VIOLATION",
|
|
1309
|
-
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
1310
|
-
0
|
|
1311
|
-
)
|
|
1312
|
-
);
|
|
1313
|
-
return;
|
|
1314
|
-
}
|
|
1315
|
-
if (!result.ok) {
|
|
1316
|
-
controller.error(result.error);
|
|
1317
|
-
return;
|
|
1318
|
-
}
|
|
1319
|
-
const stream = result.value;
|
|
1320
|
-
if (stream.type === "subgroup") {
|
|
1321
|
-
controller.enqueue({
|
|
1322
|
-
type: "subgroup_header",
|
|
1323
|
-
trackAlias: stream.trackAlias,
|
|
1324
|
-
groupId: stream.groupId,
|
|
1325
|
-
subgroupId: stream.subgroupId,
|
|
1326
|
-
publisherPriority: stream.publisherPriority
|
|
1327
|
-
});
|
|
1328
|
-
for (const obj of stream.objects) {
|
|
1329
|
-
controller.enqueue(obj);
|
|
1330
|
-
}
|
|
1331
|
-
} else if (stream.type === "fetch") {
|
|
1332
|
-
controller.enqueue({
|
|
1333
|
-
type: "fetch_header",
|
|
1334
|
-
requestId: stream.requestId
|
|
1335
|
-
});
|
|
1336
|
-
for (const obj of stream.objects) {
|
|
1337
|
-
controller.enqueue(obj);
|
|
1338
|
-
}
|
|
1339
|
-
}
|
|
1340
|
-
}
|
|
1341
|
-
});
|
|
1342
|
-
}
|
|
1343
1430
|
function createDraft17Codec() {
|
|
1344
1431
|
return {
|
|
1345
1432
|
draft: "draft-ietf-moq-transport-17",
|
|
@@ -1384,8 +1471,6 @@ export {
|
|
|
1384
1471
|
SETUP_OPT_MOQT_IMPLEMENTATION,
|
|
1385
1472
|
MESSAGE_TYPE_MAP,
|
|
1386
1473
|
MESSAGE_ID_MAP,
|
|
1387
|
-
encodeMessage,
|
|
1388
|
-
decodeMessage,
|
|
1389
1474
|
encodeSubgroupStream,
|
|
1390
1475
|
encodeDatagram,
|
|
1391
1476
|
encodeFetchStream,
|
|
@@ -1393,9 +1478,11 @@ export {
|
|
|
1393
1478
|
decodeDatagram,
|
|
1394
1479
|
decodeFetchStream,
|
|
1395
1480
|
decodeDataStream,
|
|
1396
|
-
createStreamDecoder,
|
|
1397
1481
|
createSubgroupStreamDecoder,
|
|
1398
1482
|
createFetchStreamDecoder,
|
|
1399
1483
|
createDataStreamDecoder,
|
|
1484
|
+
encodeMessage,
|
|
1485
|
+
decodeMessage,
|
|
1486
|
+
createStreamDecoder,
|
|
1400
1487
|
createDraft17Codec
|
|
1401
1488
|
};
|