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