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