@moqtap/codec 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +100 -99
- package/dist/{chunk-RZHAPEXO.js → chunk-2A57DRXV.js} +36 -10
- package/dist/{chunk-PJRA2TQ5.js → chunk-2UTVXWFF.js} +388 -254
- package/dist/{chunk-IV2H5CFI.cjs → chunk-3XKO6PCR.cjs} +461 -322
- package/dist/{chunk-RVJAGE4S.cjs → chunk-4BDEU3D4.cjs} +415 -304
- package/dist/{chunk-XUUCOLWU.cjs → chunk-4HBKHNU2.cjs} +374 -329
- package/dist/{chunk-4RIXXEII.js → chunk-4IVZZOY3.js} +451 -312
- package/dist/{chunk-ZSPO2GF2.cjs → chunk-5O764MBD.cjs} +1320 -842
- package/dist/chunk-7KBAWOBA.js +1212 -0
- package/dist/{chunk-JSQM2MG3.js → chunk-7QOPNSDF.js} +44 -12
- package/dist/{chunk-SYHW3FLI.cjs → chunk-7RE6KSIY.cjs} +28 -8
- package/dist/{chunk-YG5KJESI.js → chunk-AY6IAHUM.js} +28 -8
- package/dist/{chunk-EFM5T7OM.js → chunk-BLQDWOSG.js} +36 -10
- package/dist/{chunk-KFTCU2P6.js → chunk-C6KUWLQC.js} +0 -3
- package/dist/{chunk-UYXTY6ZQ.cjs → chunk-E65QKRSN.cjs} +20 -12
- package/dist/{chunk-BISI45MN.cjs → chunk-EAHE3IOG.cjs} +44 -12
- package/dist/{chunk-IV2HRJVT.js → chunk-GCBFHZW6.js} +405 -294
- package/dist/{chunk-GXEW4COZ.cjs → chunk-H5NSL4MO.cjs} +36 -10
- package/dist/chunk-HZHSO7EW.cjs +1212 -0
- package/dist/{chunk-BPNL5YFQ.cjs → chunk-IILNSDEQ.cjs} +74 -46
- package/dist/{chunk-4XYGE53S.cjs → chunk-J3XCPBW3.cjs} +36 -10
- package/dist/{chunk-6AEHWULA.cjs → chunk-JKOEJZ5B.cjs} +28 -8
- package/dist/{chunk-FWISIR26.cjs → chunk-JL3NEW3O.cjs} +47 -4
- package/dist/{chunk-G7GI7LJA.js → chunk-LORZMJJB.js} +36 -10
- package/dist/{chunk-DUBCL3WF.cjs → chunk-LV5C6MEC.cjs} +36 -10
- package/dist/{chunk-ENURAVHI.cjs → chunk-MYXAD5JC.cjs} +44 -12
- package/dist/{chunk-FXZ2MYKJ.js → chunk-MZ7HUCGJ.js} +20 -12
- package/dist/{chunk-RWQ43Z4F.cjs → chunk-MZ7VU52O.cjs} +0 -3
- package/dist/{chunk-G26SJ6XS.cjs → chunk-OKG2HT25.cjs} +1193 -928
- package/dist/{chunk-IBVM4DMJ.cjs → chunk-PKEOQSSZ.cjs} +374 -329
- package/dist/{chunk-LH4NTURO.js → chunk-Q46ZURKX.js} +989 -602
- package/dist/{chunk-UR6JKS56.js → chunk-Q7IGWV3P.js} +41 -9
- package/dist/{chunk-ST24APEO.js → chunk-RW4UG7CN.js} +751 -682
- package/dist/{chunk-DWK5ZQZ4.js → chunk-RZTLQAKF.js} +28 -8
- package/dist/{chunk-UNS34PTA.cjs → chunk-S6IPIN66.cjs} +44 -12
- package/dist/{chunk-K4OLITS2.cjs → chunk-SDWRXXOO.cjs} +401 -267
- package/dist/{chunk-CXDHOMHG.js → chunk-SHMA4PBY.js} +476 -431
- package/dist/{chunk-U2B3B42P.js → chunk-U3ZVLT5L.js} +1176 -540
- package/dist/{chunk-HSVYF6XX.cjs → chunk-UJU63EFY.cjs} +1524 -1137
- package/dist/{chunk-A27S7HW7.js → chunk-VOU7PNHI.js} +47 -4
- package/dist/{chunk-E6E3NQYU.js → chunk-WRHGCVYN.js} +44 -12
- package/dist/chunk-XNWYLVGU.cjs +1854 -0
- package/dist/{chunk-NUX5BHWO.js → chunk-XS77RBY7.js} +1160 -895
- package/dist/{chunk-4YJANAXU.cjs → chunk-XZE5R57R.cjs} +829 -760
- package/dist/{chunk-NGVE2RZT.js → chunk-Y6KCSM3V.js} +476 -431
- package/dist/{chunk-TLYNOOQP.cjs → chunk-YTPZZI2M.cjs} +41 -9
- package/dist/{chunk-7DUBLRXC.js → chunk-YWRCSQBA.js} +44 -12
- package/dist/{chunk-MFAP7R6L.js → chunk-Z3VKP3PJ.js} +70 -42
- package/dist/{chunk-ZBKE2QRQ.js → chunk-Z6U26IRI.js} +1107 -629
- package/dist/codec-25u4_1HS.d.ts +35 -0
- package/dist/codec-3Ppy_5Gd.d.ts +23 -0
- package/dist/codec-BB0U8MF2.d.cts +34 -0
- package/dist/codec-BHHfBTnV.d.ts +34 -0
- package/dist/codec-BN6jk0Td.d.cts +30 -0
- package/dist/codec-BU0gaSZm.d.ts +29 -0
- package/dist/codec-C-Yk2RNa.d.ts +30 -0
- package/dist/codec-CFWQY9Lj.d.cts +18 -0
- package/dist/codec-COy4uuPO.d.cts +29 -0
- package/dist/codec-CewFCsEy.d.ts +18 -0
- package/dist/codec-Ck7ZwFF1.d.cts +35 -0
- package/dist/codec-D2QVSH9D.d.ts +30 -0
- package/dist/codec-DDUBJGn0.d.cts +23 -0
- package/dist/codec-DNfml-se.d.ts +27 -0
- package/dist/codec-DoOGjjDq.d.cts +29 -0
- package/dist/codec-J7ekOSMc.d.ts +29 -0
- package/dist/codec-R9TJCq-E.d.cts +31 -0
- package/dist/codec-ZwV-Njt6.d.ts +23 -0
- package/dist/codec-j819z_hL.d.cts +23 -0
- package/dist/codec-w8z2j_uo.d.cts +27 -0
- package/dist/codec-wtt6WF1K.d.ts +31 -0
- package/dist/codec-z6_2PSzi.d.cts +30 -0
- package/dist/draft10-session.cjs +2 -2
- package/dist/draft10-session.d.cts +6 -6
- package/dist/draft10-session.d.ts +6 -6
- package/dist/draft10-session.js +1 -1
- package/dist/draft10.cjs +8 -4
- package/dist/draft10.d.cts +23 -11
- package/dist/draft10.d.ts +23 -11
- package/dist/draft10.js +16 -12
- package/dist/draft11-session.cjs +2 -2
- package/dist/draft11-session.d.cts +6 -6
- package/dist/draft11-session.d.ts +6 -6
- package/dist/draft11-session.js +1 -1
- package/dist/draft11.cjs +8 -4
- package/dist/draft11.d.cts +21 -11
- package/dist/draft11.d.ts +21 -11
- package/dist/draft11.js +16 -12
- package/dist/draft12-session.cjs +2 -2
- package/dist/draft12-session.d.cts +6 -6
- package/dist/draft12-session.d.ts +6 -6
- package/dist/draft12-session.js +1 -1
- package/dist/draft12.cjs +8 -4
- package/dist/draft12.d.cts +23 -13
- package/dist/draft12.d.ts +23 -13
- package/dist/draft12.js +16 -12
- package/dist/draft13-session.cjs +2 -2
- package/dist/draft13-session.d.cts +6 -6
- package/dist/draft13-session.d.ts +6 -6
- package/dist/draft13-session.js +1 -1
- package/dist/draft13.cjs +8 -4
- package/dist/draft13.d.cts +23 -13
- package/dist/draft13.d.ts +23 -13
- package/dist/draft13.js +16 -12
- package/dist/draft14-session.cjs +2 -2
- package/dist/draft14-session.d.cts +6 -6
- package/dist/draft14-session.d.ts +6 -6
- package/dist/draft14-session.js +1 -1
- package/dist/draft14.cjs +14 -4
- package/dist/draft14.d.cts +67 -11
- package/dist/draft14.d.ts +67 -11
- package/dist/draft14.js +13 -3
- package/dist/draft15-session.cjs +2 -2
- package/dist/draft15-session.d.cts +6 -6
- package/dist/draft15-session.d.ts +6 -6
- package/dist/draft15-session.js +1 -1
- package/dist/draft15.cjs +8 -4
- package/dist/draft15.d.cts +56 -11
- package/dist/draft15.d.ts +56 -11
- package/dist/draft15.js +16 -12
- package/dist/draft16-session.cjs +2 -2
- package/dist/draft16-session.d.cts +6 -6
- package/dist/draft16-session.d.ts +6 -6
- package/dist/draft16-session.js +1 -1
- package/dist/draft16.cjs +8 -4
- package/dist/draft16.d.cts +45 -11
- package/dist/draft16.d.ts +45 -11
- package/dist/draft16.js +16 -12
- package/dist/draft17-session.cjs +2 -2
- package/dist/draft17-session.d.cts +7 -7
- package/dist/draft17-session.d.ts +7 -7
- package/dist/draft17-session.js +1 -1
- package/dist/draft17.cjs +8 -4
- package/dist/draft17.d.cts +21 -8
- package/dist/draft17.d.ts +21 -8
- package/dist/draft17.js +16 -12
- package/dist/draft7-session.cjs +3 -3
- package/dist/draft7-session.d.cts +6 -5
- package/dist/draft7-session.d.ts +6 -5
- package/dist/draft7-session.js +2 -2
- package/dist/draft7.cjs +83 -14
- package/dist/draft7.d.cts +59 -64
- package/dist/draft7.d.ts +59 -64
- package/dist/draft7.js +89 -20
- package/dist/draft8-session.cjs +2 -2
- package/dist/draft8-session.d.cts +6 -6
- package/dist/draft8-session.d.ts +6 -6
- package/dist/draft8-session.js +1 -1
- package/dist/draft8.cjs +8 -4
- package/dist/draft8.d.cts +23 -11
- package/dist/draft8.d.ts +23 -11
- package/dist/draft8.js +7 -3
- package/dist/draft9-session.cjs +2 -2
- package/dist/draft9-session.d.cts +6 -6
- package/dist/draft9-session.d.ts +6 -6
- package/dist/draft9-session.js +1 -1
- package/dist/draft9.cjs +8 -4
- package/dist/draft9.d.cts +23 -11
- package/dist/draft9.d.ts +23 -11
- package/dist/draft9.js +7 -3
- package/dist/index.cjs +52 -73
- package/dist/index.d.cts +41 -60
- package/dist/index.d.ts +55 -82
- package/dist/index.js +89 -93
- package/dist/{session-types-CJIFbTPd.d.ts → session-types-C7UONex5.d.cts} +28 -27
- package/dist/{session-types-Cbq8IGCP.d.cts → session-types-X-IYEGoG.d.ts} +28 -27
- package/dist/session.cjs +47 -14
- package/dist/session.d.cts +28 -9
- package/dist/session.d.ts +32 -9
- package/dist/session.js +59 -32
- package/dist/{types-4VxSL2Ho.d.ts → types--Q7_DcvP.d.cts} +49 -39
- package/dist/{types-4VxSL2Ho.d.cts → types--Q7_DcvP.d.ts} +49 -39
- package/dist/{types-Cw4WE9dh.d.ts → types-0IWbU9Z_.d.cts} +44 -36
- package/dist/{types-Cw4WE9dh.d.cts → types-0IWbU9Z_.d.ts} +44 -36
- package/dist/{types-D5gNQiDj.d.ts → types-B3g5G9KP.d.cts} +44 -36
- package/dist/{types-D5gNQiDj.d.cts → types-B3g5G9KP.d.ts} +44 -36
- package/dist/{types-B2afJZM-.d.cts → types-BFpFNM_m.d.cts} +60 -32
- package/dist/{types-B2afJZM-.d.ts → types-BFpFNM_m.d.ts} +60 -32
- package/dist/{types-ERexTpT8.d.ts → types-Br7fm2mf.d.cts} +51 -26
- package/dist/{types-ERexTpT8.d.cts → types-Br7fm2mf.d.ts} +51 -26
- package/dist/{types-Bg6QYNVt.d.cts → types-C2qKTRR_.d.cts} +55 -45
- package/dist/{types-Bg6QYNVt.d.ts → types-C2qKTRR_.d.ts} +55 -45
- package/dist/{types-BTFeKYCb.d.ts → types-DEaypVsD.d.cts} +133 -58
- package/dist/{types-BTFeKYCb.d.cts → types-DEaypVsD.d.ts} +133 -58
- package/dist/types-Dl4IaAHR.d.cts +282 -0
- package/dist/types-Dl4IaAHR.d.ts +282 -0
- package/dist/{types-C_1HrqBl.d.cts → types-DrQpTW1G.d.cts} +63 -50
- package/dist/{types-C_1HrqBl.d.ts → types-DrQpTW1G.d.ts} +63 -50
- package/dist/types-DuIO7cWK.d.cts +25 -0
- package/dist/types-DuIO7cWK.d.ts +25 -0
- package/dist/{types-DqCDFqgB.d.ts → types-DuxfOYiO.d.cts} +50 -31
- package/dist/{types-DqCDFqgB.d.cts → types-DuxfOYiO.d.ts} +50 -31
- package/dist/{types-r-CasCf1.d.cts → types-jV1yDDBA.d.cts} +43 -36
- package/dist/{types-r-CasCf1.d.ts → types-jV1yDDBA.d.ts} +43 -36
- package/package.json +15 -15
- package/src/core/buffer-reader.ts +69 -53
- package/src/core/buffer-writer.ts +55 -46
- package/src/core/errors.ts +1 -1
- package/src/core/hex.ts +21 -17
- package/src/core/session-types.ts +61 -59
- package/src/core/types.ts +18 -361
- package/src/drafts/draft07/codec.ts +1058 -933
- package/src/drafts/draft07/data-streams.ts +116 -116
- package/src/drafts/draft07/index.ts +124 -89
- package/src/drafts/draft07/messages.ts +76 -42
- package/src/drafts/draft07/rules.ts +107 -101
- package/src/drafts/draft07/session-fsm.ts +315 -287
- package/src/drafts/draft07/session.ts +8 -6
- package/src/drafts/draft07/types.ts +406 -72
- package/src/drafts/draft07/varint.ts +40 -12
- package/src/drafts/draft08/codec.ts +985 -944
- package/src/drafts/draft08/data-streams.ts +178 -174
- package/src/drafts/draft08/index.ts +10 -9
- package/src/drafts/draft08/messages.ts +59 -59
- package/src/drafts/draft08/rules.ts +73 -73
- package/src/drafts/draft08/session-fsm.ts +335 -303
- package/src/drafts/draft08/session.ts +6 -7
- package/src/drafts/draft08/types.ts +380 -384
- package/src/drafts/draft09/codec.ts +977 -936
- package/src/drafts/draft09/data-streams.ts +163 -159
- package/src/drafts/draft09/index.ts +10 -9
- package/src/drafts/draft09/messages.ts +59 -59
- package/src/drafts/draft09/rules.ts +73 -73
- package/src/drafts/draft09/session-fsm.ts +335 -303
- package/src/drafts/draft09/session.ts +6 -7
- package/src/drafts/draft09/types.ts +380 -384
- package/src/drafts/draft10/codec.ts +977 -936
- package/src/drafts/draft10/data-streams.ts +163 -159
- package/src/drafts/draft10/index.ts +10 -9
- package/src/drafts/draft10/messages.ts +59 -59
- package/src/drafts/draft10/rules.ts +73 -73
- package/src/drafts/draft10/session-fsm.ts +335 -303
- package/src/drafts/draft10/session.ts +6 -7
- package/src/drafts/draft10/types.ts +380 -384
- package/src/drafts/draft11/codec.ts +1054 -979
- package/src/drafts/draft11/data-streams.ts +189 -142
- package/src/drafts/draft11/index.ts +10 -9
- package/src/drafts/draft11/messages.ts +60 -59
- package/src/drafts/draft11/rules.ts +73 -73
- package/src/drafts/draft11/session-fsm.ts +359 -333
- package/src/drafts/draft11/session.ts +6 -7
- package/src/drafts/draft11/types.ts +385 -381
- package/src/drafts/draft12/codec.ts +1178 -1113
- package/src/drafts/draft12/data-streams.ts +192 -143
- package/src/drafts/draft12/index.ts +10 -9
- package/src/drafts/draft12/messages.ts +67 -66
- package/src/drafts/draft12/rules.ts +79 -79
- package/src/drafts/draft12/session-fsm.ts +384 -358
- package/src/drafts/draft12/session.ts +6 -7
- package/src/drafts/draft12/types.ts +424 -419
- package/src/drafts/draft13/codec.ts +1296 -1197
- package/src/drafts/draft13/data-streams.ts +194 -143
- package/src/drafts/draft13/index.ts +10 -9
- package/src/drafts/draft13/messages.ts +73 -68
- package/src/drafts/draft13/rules.ts +81 -81
- package/src/drafts/draft13/session-fsm.ts +392 -366
- package/src/drafts/draft13/session.ts +6 -7
- package/src/drafts/draft13/types.ts +447 -438
- package/src/drafts/draft14/codec.ts +1347 -1034
- package/src/drafts/draft14/data-streams.ts +429 -396
- package/src/drafts/draft14/index.ts +17 -9
- package/src/drafts/draft14/messages.ts +65 -65
- package/src/drafts/draft14/rules.ts +81 -81
- package/src/drafts/draft14/session-fsm.ts +415 -405
- package/src/drafts/draft14/session.ts +6 -7
- package/src/drafts/draft14/types.ts +451 -381
- package/src/drafts/draft15/codec.ts +1138 -969
- package/src/drafts/draft15/data-streams.ts +428 -364
- package/src/drafts/draft15/index.ts +10 -9
- package/src/drafts/draft15/messages.ts +54 -53
- package/src/drafts/draft15/rules.ts +67 -67
- package/src/drafts/draft15/session-fsm.ts +319 -299
- package/src/drafts/draft15/session.ts +6 -7
- package/src/drafts/draft15/types.ts +357 -339
- package/src/drafts/draft16/codec.ts +1242 -957
- package/src/drafts/draft16/data-streams.ts +433 -371
- package/src/drafts/draft16/index.ts +10 -9
- package/src/drafts/draft16/messages.ts +56 -55
- package/src/drafts/draft16/rules.ts +69 -69
- package/src/drafts/draft16/session-fsm.ts +319 -299
- package/src/drafts/draft16/session.ts +6 -7
- package/src/drafts/draft16/types.ts +386 -357
- package/src/drafts/draft17/codec.ts +1209 -962
- package/src/drafts/draft17/data-streams.ts +593 -366
- package/src/drafts/draft17/index.ts +9 -7
- package/src/drafts/draft17/messages.ts +43 -42
- package/src/drafts/draft17/rules.ts +58 -58
- package/src/drafts/draft17/session-fsm.ts +248 -216
- package/src/drafts/draft17/session.ts +5 -5
- package/src/drafts/draft17/types.ts +337 -313
- package/src/index.ts +85 -274
- package/src/session.ts +62 -23
- package/dist/chunk-7IVGHMKJ.cjs +0 -866
- package/dist/chunk-FUFTMAQD.cjs +0 -1218
- package/dist/chunk-TMNGRIPL.js +0 -866
- package/dist/codec-95k8CAu5.d.cts +0 -35
- package/dist/codec-AFuOxfsO.d.ts +0 -60
- package/dist/codec-B-UJ5Iow.d.cts +0 -75
- package/dist/codec-BC5jfvMb.d.ts +0 -35
- package/dist/codec-BECYPfY8.d.ts +0 -35
- package/dist/codec-BsPU1vNC.d.ts +0 -39
- package/dist/codec-BvpuF-6u.d.cts +0 -39
- package/dist/codec-C8jZI5Cx.d.cts +0 -39
- package/dist/codec-CAevkgf5.d.cts +0 -33
- package/dist/codec-CSUqCrRs.d.ts +0 -39
- package/dist/codec-C_HMXNK_.d.ts +0 -33
- package/dist/codec-CpuvYTSV.d.cts +0 -86
- package/dist/codec-D0x8-SCw.d.cts +0 -35
- package/dist/codec-D7ARhpG1.d.ts +0 -75
- package/dist/codec-DNAUGshO.d.cts +0 -60
- package/dist/codec-DPx_QNn0.d.ts +0 -31
- package/dist/codec-DRhCx_hw.d.ts +0 -86
- package/dist/codec-Db7YPe3l.d.ts +0 -31
- package/dist/codec-axkJpb7D.d.cts +0 -31
- package/dist/codec-ujAbFaep.d.cts +0 -31
- package/dist/core/buffer-reader.d.ts +0 -15
- package/dist/core/buffer-reader.d.ts.map +0 -1
- package/dist/core/buffer-reader.js +0 -98
- package/dist/core/buffer-reader.js.map +0 -1
- package/dist/core/buffer-writer.d.ts +0 -16
- package/dist/core/buffer-writer.d.ts.map +0 -1
- package/dist/core/buffer-writer.js +0 -86
- package/dist/core/buffer-writer.js.map +0 -1
- package/dist/core/errors.d.ts +0 -2
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -2
- package/dist/core/errors.js.map +0 -1
- package/dist/core/hex.d.ts +0 -5
- package/dist/core/hex.d.ts.map +0 -1
- package/dist/core/hex.js +0 -17
- package/dist/core/hex.js.map +0 -1
- package/dist/core/session-types.d.ts +0 -99
- package/dist/core/session-types.d.ts.map +0 -1
- package/dist/core/session-types.js +0 -2
- package/dist/core/session-types.js.map +0 -1
- package/dist/core/types.d.ts +0 -235
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -11
- package/dist/core/types.js.map +0 -1
- package/dist/drafts/draft07/announce-fsm.d.ts +0 -2
- package/dist/drafts/draft07/announce-fsm.d.ts.map +0 -1
- package/dist/drafts/draft07/announce-fsm.js +0 -2
- package/dist/drafts/draft07/announce-fsm.js.map +0 -1
- package/dist/drafts/draft07/codec.d.ts +0 -17
- package/dist/drafts/draft07/codec.d.ts.map +0 -1
- package/dist/drafts/draft07/codec.js +0 -722
- package/dist/drafts/draft07/codec.js.map +0 -1
- package/dist/drafts/draft07/data-streams.d.ts +0 -9
- package/dist/drafts/draft07/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft07/data-streams.js +0 -228
- package/dist/drafts/draft07/data-streams.js.map +0 -1
- package/dist/drafts/draft07/index.d.ts +0 -14
- package/dist/drafts/draft07/index.d.ts.map +0 -1
- package/dist/drafts/draft07/index.js +0 -18
- package/dist/drafts/draft07/index.js.map +0 -1
- package/dist/drafts/draft07/messages.d.ts +0 -32
- package/dist/drafts/draft07/messages.d.ts.map +0 -1
- package/dist/drafts/draft07/messages.js +0 -42
- package/dist/drafts/draft07/messages.js.map +0 -1
- package/dist/drafts/draft07/parameters.d.ts +0 -4
- package/dist/drafts/draft07/parameters.d.ts.map +0 -1
- package/dist/drafts/draft07/parameters.js +0 -10
- package/dist/drafts/draft07/parameters.js.map +0 -1
- package/dist/drafts/draft07/rules.d.ts +0 -8
- package/dist/drafts/draft07/rules.d.ts.map +0 -1
- package/dist/drafts/draft07/rules.js +0 -95
- package/dist/drafts/draft07/rules.js.map +0 -1
- package/dist/drafts/draft07/session-fsm.d.ts +0 -38
- package/dist/drafts/draft07/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft07/session-fsm.js +0 -354
- package/dist/drafts/draft07/session-fsm.js.map +0 -1
- package/dist/drafts/draft07/session.d.ts +0 -4
- package/dist/drafts/draft07/session.d.ts.map +0 -1
- package/dist/drafts/draft07/session.js +0 -5
- package/dist/drafts/draft07/session.js.map +0 -1
- package/dist/drafts/draft07/subscription-fsm.d.ts +0 -2
- package/dist/drafts/draft07/subscription-fsm.d.ts.map +0 -1
- package/dist/drafts/draft07/subscription-fsm.js +0 -2
- package/dist/drafts/draft07/subscription-fsm.js.map +0 -1
- package/dist/drafts/draft07/types.d.ts +0 -61
- package/dist/drafts/draft07/types.d.ts.map +0 -1
- package/dist/drafts/draft07/types.js +0 -4
- package/dist/drafts/draft07/types.js.map +0 -1
- package/dist/drafts/draft07/varint.d.ts +0 -4
- package/dist/drafts/draft07/varint.d.ts.map +0 -1
- package/dist/drafts/draft07/varint.js +0 -22
- package/dist/drafts/draft07/varint.js.map +0 -1
- package/dist/drafts/draft08/codec.d.ts +0 -29
- package/dist/drafts/draft08/codec.d.ts.map +0 -1
- package/dist/drafts/draft08/codec.js +0 -729
- package/dist/drafts/draft08/codec.js.map +0 -1
- package/dist/drafts/draft08/data-streams.d.ts +0 -12
- package/dist/drafts/draft08/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft08/data-streams.js +0 -345
- package/dist/drafts/draft08/data-streams.js.map +0 -1
- package/dist/drafts/draft08/index.d.ts +0 -9
- package/dist/drafts/draft08/index.d.ts.map +0 -1
- package/dist/drafts/draft08/index.js +0 -7
- package/dist/drafts/draft08/index.js.map +0 -1
- package/dist/drafts/draft08/messages.d.ts +0 -34
- package/dist/drafts/draft08/messages.d.ts.map +0 -1
- package/dist/drafts/draft08/messages.js +0 -66
- package/dist/drafts/draft08/messages.js.map +0 -1
- package/dist/drafts/draft08/rules.d.ts +0 -8
- package/dist/drafts/draft08/rules.d.ts.map +0 -1
- package/dist/drafts/draft08/rules.js +0 -83
- package/dist/drafts/draft08/rules.js.map +0 -1
- package/dist/drafts/draft08/session-fsm.d.ts +0 -47
- package/dist/drafts/draft08/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft08/session-fsm.js +0 -483
- package/dist/drafts/draft08/session-fsm.js.map +0 -1
- package/dist/drafts/draft08/session.d.ts +0 -5
- package/dist/drafts/draft08/session.d.ts.map +0 -1
- package/dist/drafts/draft08/session.js +0 -5
- package/dist/drafts/draft08/session.js.map +0 -1
- package/dist/drafts/draft08/types.d.ts +0 -268
- package/dist/drafts/draft08/types.d.ts.map +0 -1
- package/dist/drafts/draft08/types.js +0 -4
- package/dist/drafts/draft08/types.js.map +0 -1
- package/dist/drafts/draft09/codec.d.ts +0 -21
- package/dist/drafts/draft09/codec.d.ts.map +0 -1
- package/dist/drafts/draft09/codec.js +0 -721
- package/dist/drafts/draft09/codec.js.map +0 -1
- package/dist/drafts/draft09/data-streams.d.ts +0 -12
- package/dist/drafts/draft09/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft09/data-streams.js +0 -307
- package/dist/drafts/draft09/data-streams.js.map +0 -1
- package/dist/drafts/draft09/index.d.ts +0 -9
- package/dist/drafts/draft09/index.d.ts.map +0 -1
- package/dist/drafts/draft09/index.js +0 -7
- package/dist/drafts/draft09/index.js.map +0 -1
- package/dist/drafts/draft09/messages.d.ts +0 -34
- package/dist/drafts/draft09/messages.d.ts.map +0 -1
- package/dist/drafts/draft09/messages.js +0 -66
- package/dist/drafts/draft09/messages.js.map +0 -1
- package/dist/drafts/draft09/rules.d.ts +0 -8
- package/dist/drafts/draft09/rules.d.ts.map +0 -1
- package/dist/drafts/draft09/rules.js +0 -83
- package/dist/drafts/draft09/rules.js.map +0 -1
- package/dist/drafts/draft09/session-fsm.d.ts +0 -47
- package/dist/drafts/draft09/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft09/session-fsm.js +0 -483
- package/dist/drafts/draft09/session-fsm.js.map +0 -1
- package/dist/drafts/draft09/session.d.ts +0 -5
- package/dist/drafts/draft09/session.d.ts.map +0 -1
- package/dist/drafts/draft09/session.js +0 -5
- package/dist/drafts/draft09/session.js.map +0 -1
- package/dist/drafts/draft09/types.d.ts +0 -268
- package/dist/drafts/draft09/types.d.ts.map +0 -1
- package/dist/drafts/draft09/types.js +0 -4
- package/dist/drafts/draft09/types.js.map +0 -1
- package/dist/drafts/draft10/codec.d.ts +0 -21
- package/dist/drafts/draft10/codec.d.ts.map +0 -1
- package/dist/drafts/draft10/codec.js +0 -721
- package/dist/drafts/draft10/codec.js.map +0 -1
- package/dist/drafts/draft10/data-streams.d.ts +0 -12
- package/dist/drafts/draft10/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft10/data-streams.js +0 -307
- package/dist/drafts/draft10/data-streams.js.map +0 -1
- package/dist/drafts/draft10/index.d.ts +0 -9
- package/dist/drafts/draft10/index.d.ts.map +0 -1
- package/dist/drafts/draft10/index.js +0 -7
- package/dist/drafts/draft10/index.js.map +0 -1
- package/dist/drafts/draft10/messages.d.ts +0 -34
- package/dist/drafts/draft10/messages.d.ts.map +0 -1
- package/dist/drafts/draft10/messages.js +0 -66
- package/dist/drafts/draft10/messages.js.map +0 -1
- package/dist/drafts/draft10/rules.d.ts +0 -8
- package/dist/drafts/draft10/rules.d.ts.map +0 -1
- package/dist/drafts/draft10/rules.js +0 -83
- package/dist/drafts/draft10/rules.js.map +0 -1
- package/dist/drafts/draft10/session-fsm.d.ts +0 -47
- package/dist/drafts/draft10/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft10/session-fsm.js +0 -483
- package/dist/drafts/draft10/session-fsm.js.map +0 -1
- package/dist/drafts/draft10/session.d.ts +0 -5
- package/dist/drafts/draft10/session.d.ts.map +0 -1
- package/dist/drafts/draft10/session.js +0 -5
- package/dist/drafts/draft10/session.js.map +0 -1
- package/dist/drafts/draft10/types.d.ts +0 -268
- package/dist/drafts/draft10/types.d.ts.map +0 -1
- package/dist/drafts/draft10/types.js +0 -4
- package/dist/drafts/draft10/types.js.map +0 -1
- package/dist/drafts/draft11/codec.d.ts +0 -25
- package/dist/drafts/draft11/codec.d.ts.map +0 -1
- package/dist/drafts/draft11/codec.js +0 -775
- package/dist/drafts/draft11/codec.js.map +0 -1
- package/dist/drafts/draft11/data-streams.d.ts +0 -10
- package/dist/drafts/draft11/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft11/data-streams.js +0 -253
- package/dist/drafts/draft11/data-streams.js.map +0 -1
- package/dist/drafts/draft11/index.d.ts +0 -9
- package/dist/drafts/draft11/index.d.ts.map +0 -1
- package/dist/drafts/draft11/index.js +0 -7
- package/dist/drafts/draft11/index.js.map +0 -1
- package/dist/drafts/draft11/messages.d.ts +0 -33
- package/dist/drafts/draft11/messages.d.ts.map +0 -1
- package/dist/drafts/draft11/messages.js +0 -65
- package/dist/drafts/draft11/messages.js.map +0 -1
- package/dist/drafts/draft11/rules.d.ts +0 -8
- package/dist/drafts/draft11/rules.d.ts.map +0 -1
- package/dist/drafts/draft11/rules.js +0 -88
- package/dist/drafts/draft11/rules.js.map +0 -1
- package/dist/drafts/draft11/session-fsm.d.ts +0 -52
- package/dist/drafts/draft11/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft11/session-fsm.js +0 -530
- package/dist/drafts/draft11/session-fsm.js.map +0 -1
- package/dist/drafts/draft11/session.d.ts +0 -5
- package/dist/drafts/draft11/session.d.ts.map +0 -1
- package/dist/drafts/draft11/session.js +0 -5
- package/dist/drafts/draft11/session.js.map +0 -1
- package/dist/drafts/draft11/types.d.ts +0 -266
- package/dist/drafts/draft11/types.d.ts.map +0 -1
- package/dist/drafts/draft11/types.js +0 -4
- package/dist/drafts/draft11/types.js.map +0 -1
- package/dist/drafts/draft12/codec.d.ts +0 -27
- package/dist/drafts/draft12/codec.d.ts.map +0 -1
- package/dist/drafts/draft12/codec.js +0 -918
- package/dist/drafts/draft12/codec.js.map +0 -1
- package/dist/drafts/draft12/data-streams.d.ts +0 -10
- package/dist/drafts/draft12/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft12/data-streams.js +0 -254
- package/dist/drafts/draft12/data-streams.js.map +0 -1
- package/dist/drafts/draft12/index.d.ts +0 -9
- package/dist/drafts/draft12/index.d.ts.map +0 -1
- package/dist/drafts/draft12/index.js +0 -7
- package/dist/drafts/draft12/index.js.map +0 -1
- package/dist/drafts/draft12/messages.d.ts +0 -37
- package/dist/drafts/draft12/messages.d.ts.map +0 -1
- package/dist/drafts/draft12/messages.js +0 -77
- package/dist/drafts/draft12/messages.js.map +0 -1
- package/dist/drafts/draft12/rules.d.ts +0 -8
- package/dist/drafts/draft12/rules.d.ts.map +0 -1
- package/dist/drafts/draft12/rules.js +0 -94
- package/dist/drafts/draft12/rules.js.map +0 -1
- package/dist/drafts/draft12/session-fsm.d.ts +0 -55
- package/dist/drafts/draft12/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft12/session-fsm.js +0 -569
- package/dist/drafts/draft12/session-fsm.js.map +0 -1
- package/dist/drafts/draft12/session.d.ts +0 -5
- package/dist/drafts/draft12/session.d.ts.map +0 -1
- package/dist/drafts/draft12/session.js +0 -5
- package/dist/drafts/draft12/session.js.map +0 -1
- package/dist/drafts/draft12/types.d.ts +0 -294
- package/dist/drafts/draft12/types.d.ts.map +0 -1
- package/dist/drafts/draft12/types.js +0 -4
- package/dist/drafts/draft12/types.js.map +0 -1
- package/dist/drafts/draft13/codec.d.ts +0 -27
- package/dist/drafts/draft13/codec.d.ts.map +0 -1
- package/dist/drafts/draft13/codec.js +0 -1000
- package/dist/drafts/draft13/codec.js.map +0 -1
- package/dist/drafts/draft13/data-streams.d.ts +0 -10
- package/dist/drafts/draft13/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft13/data-streams.js +0 -254
- package/dist/drafts/draft13/data-streams.js.map +0 -1
- package/dist/drafts/draft13/index.d.ts +0 -9
- package/dist/drafts/draft13/index.d.ts.map +0 -1
- package/dist/drafts/draft13/index.js +0 -7
- package/dist/drafts/draft13/index.js.map +0 -1
- package/dist/drafts/draft13/messages.d.ts +0 -38
- package/dist/drafts/draft13/messages.d.ts.map +0 -1
- package/dist/drafts/draft13/messages.js +0 -79
- package/dist/drafts/draft13/messages.js.map +0 -1
- package/dist/drafts/draft13/rules.d.ts +0 -8
- package/dist/drafts/draft13/rules.d.ts.map +0 -1
- package/dist/drafts/draft13/rules.js +0 -96
- package/dist/drafts/draft13/rules.js.map +0 -1
- package/dist/drafts/draft13/session-fsm.d.ts +0 -56
- package/dist/drafts/draft13/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft13/session-fsm.js +0 -581
- package/dist/drafts/draft13/session-fsm.js.map +0 -1
- package/dist/drafts/draft13/session.d.ts +0 -5
- package/dist/drafts/draft13/session.d.ts.map +0 -1
- package/dist/drafts/draft13/session.js +0 -5
- package/dist/drafts/draft13/session.js.map +0 -1
- package/dist/drafts/draft13/types.d.ts +0 -310
- package/dist/drafts/draft13/types.d.ts.map +0 -1
- package/dist/drafts/draft13/types.js +0 -4
- package/dist/drafts/draft13/types.js.map +0 -1
- package/dist/drafts/draft14/codec.d.ts +0 -34
- package/dist/drafts/draft14/codec.d.ts.map +0 -1
- package/dist/drafts/draft14/codec.js +0 -752
- package/dist/drafts/draft14/codec.js.map +0 -1
- package/dist/drafts/draft14/data-streams.d.ts +0 -56
- package/dist/drafts/draft14/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft14/data-streams.js +0 -729
- package/dist/drafts/draft14/data-streams.js.map +0 -1
- package/dist/drafts/draft14/index.d.ts +0 -9
- package/dist/drafts/draft14/index.d.ts.map +0 -1
- package/dist/drafts/draft14/index.js +0 -7
- package/dist/drafts/draft14/index.js.map +0 -1
- package/dist/drafts/draft14/messages.d.ts +0 -36
- package/dist/drafts/draft14/messages.d.ts.map +0 -1
- package/dist/drafts/draft14/messages.js +0 -71
- package/dist/drafts/draft14/messages.js.map +0 -1
- package/dist/drafts/draft14/rules.d.ts +0 -8
- package/dist/drafts/draft14/rules.d.ts.map +0 -1
- package/dist/drafts/draft14/rules.js +0 -101
- package/dist/drafts/draft14/rules.js.map +0 -1
- package/dist/drafts/draft14/session-fsm.d.ts +0 -58
- package/dist/drafts/draft14/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft14/session-fsm.js +0 -648
- package/dist/drafts/draft14/session-fsm.js.map +0 -1
- package/dist/drafts/draft14/session.d.ts +0 -5
- package/dist/drafts/draft14/session.d.ts.map +0 -1
- package/dist/drafts/draft14/session.js +0 -5
- package/dist/drafts/draft14/session.js.map +0 -1
- package/dist/drafts/draft14/types.d.ts +0 -263
- package/dist/drafts/draft14/types.d.ts.map +0 -1
- package/dist/drafts/draft14/types.js +0 -4
- package/dist/drafts/draft14/types.js.map +0 -1
- package/dist/drafts/draft15/codec.d.ts +0 -33
- package/dist/drafts/draft15/codec.d.ts.map +0 -1
- package/dist/drafts/draft15/codec.js +0 -742
- package/dist/drafts/draft15/codec.js.map +0 -1
- package/dist/drafts/draft15/data-streams.d.ts +0 -45
- package/dist/drafts/draft15/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft15/data-streams.js +0 -675
- package/dist/drafts/draft15/data-streams.js.map +0 -1
- package/dist/drafts/draft15/index.d.ts +0 -9
- package/dist/drafts/draft15/index.d.ts.map +0 -1
- package/dist/drafts/draft15/index.js +0 -7
- package/dist/drafts/draft15/index.js.map +0 -1
- package/dist/drafts/draft15/messages.d.ts +0 -31
- package/dist/drafts/draft15/messages.d.ts.map +0 -1
- package/dist/drafts/draft15/messages.js +0 -59
- package/dist/drafts/draft15/messages.js.map +0 -1
- package/dist/drafts/draft15/rules.d.ts +0 -8
- package/dist/drafts/draft15/rules.d.ts.map +0 -1
- package/dist/drafts/draft15/rules.js +0 -83
- package/dist/drafts/draft15/rules.js.map +0 -1
- package/dist/drafts/draft15/session-fsm.d.ts +0 -48
- package/dist/drafts/draft15/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft15/session-fsm.js +0 -479
- package/dist/drafts/draft15/session-fsm.js.map +0 -1
- package/dist/drafts/draft15/session.d.ts +0 -5
- package/dist/drafts/draft15/session.d.ts.map +0 -1
- package/dist/drafts/draft15/session.js +0 -5
- package/dist/drafts/draft15/session.js.map +0 -1
- package/dist/drafts/draft15/types.d.ts +0 -232
- package/dist/drafts/draft15/types.d.ts.map +0 -1
- package/dist/drafts/draft15/types.js +0 -4
- package/dist/drafts/draft15/types.js.map +0 -1
- package/dist/drafts/draft16/codec.d.ts +0 -29
- package/dist/drafts/draft16/codec.d.ts.map +0 -1
- package/dist/drafts/draft16/codec.js +0 -747
- package/dist/drafts/draft16/codec.js.map +0 -1
- package/dist/drafts/draft16/data-streams.d.ts +0 -34
- package/dist/drafts/draft16/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft16/data-streams.js +0 -667
- package/dist/drafts/draft16/data-streams.js.map +0 -1
- package/dist/drafts/draft16/index.d.ts +0 -9
- package/dist/drafts/draft16/index.d.ts.map +0 -1
- package/dist/drafts/draft16/index.js +0 -7
- package/dist/drafts/draft16/index.js.map +0 -1
- package/dist/drafts/draft16/messages.d.ts +0 -32
- package/dist/drafts/draft16/messages.d.ts.map +0 -1
- package/dist/drafts/draft16/messages.js +0 -62
- package/dist/drafts/draft16/messages.js.map +0 -1
- package/dist/drafts/draft16/rules.d.ts +0 -8
- package/dist/drafts/draft16/rules.d.ts.map +0 -1
- package/dist/drafts/draft16/rules.js +0 -84
- package/dist/drafts/draft16/rules.js.map +0 -1
- package/dist/drafts/draft16/session-fsm.d.ts +0 -48
- package/dist/drafts/draft16/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft16/session-fsm.js +0 -474
- package/dist/drafts/draft16/session-fsm.js.map +0 -1
- package/dist/drafts/draft16/session.d.ts +0 -5
- package/dist/drafts/draft16/session.d.ts.map +0 -1
- package/dist/drafts/draft16/session.js +0 -5
- package/dist/drafts/draft16/session.js.map +0 -1
- package/dist/drafts/draft16/types.d.ts +0 -238
- package/dist/drafts/draft16/types.d.ts.map +0 -1
- package/dist/drafts/draft16/types.js +0 -4
- package/dist/drafts/draft16/types.js.map +0 -1
- package/dist/drafts/draft17/codec.d.ts +0 -29
- package/dist/drafts/draft17/codec.d.ts.map +0 -1
- package/dist/drafts/draft17/codec.js +0 -799
- package/dist/drafts/draft17/codec.js.map +0 -1
- package/dist/drafts/draft17/data-streams.d.ts +0 -13
- package/dist/drafts/draft17/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft17/data-streams.js +0 -633
- package/dist/drafts/draft17/data-streams.js.map +0 -1
- package/dist/drafts/draft17/index.d.ts +0 -8
- package/dist/drafts/draft17/index.d.ts.map +0 -1
- package/dist/drafts/draft17/index.js +0 -6
- package/dist/drafts/draft17/index.js.map +0 -1
- package/dist/drafts/draft17/messages.d.ts +0 -25
- package/dist/drafts/draft17/messages.d.ts.map +0 -1
- package/dist/drafts/draft17/messages.js +0 -48
- package/dist/drafts/draft17/messages.js.map +0 -1
- package/dist/drafts/draft17/rules.d.ts +0 -8
- package/dist/drafts/draft17/rules.d.ts.map +0 -1
- package/dist/drafts/draft17/rules.js +0 -71
- package/dist/drafts/draft17/rules.js.map +0 -1
- package/dist/drafts/draft17/session-fsm.d.ts +0 -45
- package/dist/drafts/draft17/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft17/session-fsm.js +0 -328
- package/dist/drafts/draft17/session-fsm.js.map +0 -1
- package/dist/drafts/draft17/session.d.ts +0 -5
- package/dist/drafts/draft17/session.d.ts.map +0 -1
- package/dist/drafts/draft17/session.js +0 -6
- package/dist/drafts/draft17/session.js.map +0 -1
- package/dist/drafts/draft17/types.d.ts +0 -219
- package/dist/drafts/draft17/types.d.ts.map +0 -1
- package/dist/drafts/draft17/types.js +0 -3
- package/dist/drafts/draft17/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js.map +0 -1
- package/dist/types-QNXoxC9Y.d.cts +0 -236
- package/dist/types-QNXoxC9Y.d.ts +0 -236
- package/src/drafts/draft07/announce-fsm.ts +0 -2
- package/src/drafts/draft07/parameters.ts +0 -12
- package/src/drafts/draft07/subscription-fsm.ts +0 -3
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BufferReader,
|
|
3
3
|
BufferWriter,
|
|
4
|
-
DecodeError
|
|
5
|
-
|
|
4
|
+
DecodeError,
|
|
5
|
+
bytesToHex,
|
|
6
|
+
hexToBytes
|
|
7
|
+
} from "./chunk-VOU7PNHI.js";
|
|
6
8
|
|
|
7
9
|
// src/drafts/draft15/messages.ts
|
|
8
10
|
var MSG_SUBSCRIBE_UPDATE = 0x02n;
|
|
@@ -30,6 +32,7 @@ var MSG_CLIENT_SETUP = 0x20n;
|
|
|
30
32
|
var MSG_SERVER_SETUP = 0x21n;
|
|
31
33
|
var SETUP_PARAM_PATH = 0x01n;
|
|
32
34
|
var SETUP_PARAM_MAX_REQUEST_ID = 0x02n;
|
|
35
|
+
var SETUP_PARAM_AUTHORIZATION_TOKEN = 0x03n;
|
|
33
36
|
var SETUP_PARAM_MAX_AUTH_TOKEN_CACHE_SIZE = 0x04n;
|
|
34
37
|
var SETUP_PARAM_AUTHORITY = 0x05n;
|
|
35
38
|
var SETUP_PARAM_MOQT_IMPLEMENTATION = 0x07n;
|
|
@@ -62,273 +65,1028 @@ var MESSAGE_ID_MAP = new Map(
|
|
|
62
65
|
[...MESSAGE_TYPE_MAP.entries()].map(([id, name]) => [name, id])
|
|
63
66
|
);
|
|
64
67
|
|
|
65
|
-
// src/drafts/draft15/
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
68
|
+
// src/drafts/draft15/data-streams.ts
|
|
69
|
+
var FETCH_STREAM_TYPE = 0x05n;
|
|
70
|
+
function encodeSubgroupStream(stream) {
|
|
71
|
+
const w = new BufferWriter();
|
|
72
|
+
const streamType = stream.headerType;
|
|
73
|
+
w.writeVarInt(BigInt(streamType));
|
|
74
|
+
const extensionsPresent = (streamType & 1) !== 0;
|
|
75
|
+
const hasSubgroupField = (streamType & 4) !== 0;
|
|
76
|
+
const hasPriority = streamType < 48;
|
|
77
|
+
w.writeVarInt(stream.trackAlias);
|
|
78
|
+
w.writeVarInt(stream.groupId);
|
|
79
|
+
if (hasSubgroupField) {
|
|
80
|
+
w.writeVarInt(stream.subgroupId);
|
|
77
81
|
}
|
|
78
|
-
|
|
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);
|
|
82
|
+
if (hasPriority) {
|
|
83
|
+
w.writeUint8(stream.publisherPriority);
|
|
94
84
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
85
|
+
let prevObjectId = -1n;
|
|
86
|
+
for (const obj of stream.objects) {
|
|
87
|
+
const delta = prevObjectId < 0n ? obj.objectId : obj.objectId - prevObjectId - 1n;
|
|
88
|
+
w.writeVarInt(delta);
|
|
89
|
+
if (extensionsPresent) {
|
|
90
|
+
w.writeVarInt(BigInt(obj.extensionData.length));
|
|
91
|
+
if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData);
|
|
92
|
+
}
|
|
93
|
+
w.writeVarInt(obj.payloadLength);
|
|
94
|
+
if (obj.payloadLength === 0) {
|
|
95
|
+
w.writeVarInt(obj.status ?? 0n);
|
|
96
|
+
} else {
|
|
97
|
+
w.writeBytes(obj.payload);
|
|
98
|
+
}
|
|
99
|
+
prevObjectId = obj.objectId;
|
|
98
100
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
101
|
+
return w.finish();
|
|
102
|
+
}
|
|
103
|
+
function encodeDatagram(dg) {
|
|
104
|
+
const w = new BufferWriter();
|
|
105
|
+
const dgType = dg.datagramType;
|
|
106
|
+
w.writeVarInt(BigInt(dgType));
|
|
107
|
+
w.writeVarInt(dg.trackAlias);
|
|
108
|
+
w.writeVarInt(dg.groupId);
|
|
109
|
+
const extensionsPresent = (dgType & 1) !== 0;
|
|
110
|
+
const objectIdAbsent = (dgType & 4) !== 0;
|
|
111
|
+
const isStatus = (dgType & 32) !== 0;
|
|
112
|
+
if (!objectIdAbsent) {
|
|
113
|
+
w.writeVarInt(dg.objectId);
|
|
102
114
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
115
|
+
w.writeUint8(dg.publisherPriority);
|
|
116
|
+
if (extensionsPresent) {
|
|
117
|
+
const extData = dg.extensionData ?? new Uint8Array(0);
|
|
118
|
+
w.writeVarInt(BigInt(extData.length));
|
|
119
|
+
if (extData.length > 0) w.writeBytes(extData);
|
|
108
120
|
}
|
|
109
|
-
if (
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
writer.writeBytes(encoded);
|
|
121
|
+
if (isStatus) {
|
|
122
|
+
w.writeVarInt(dg.objectStatus ?? 0n);
|
|
123
|
+
} else {
|
|
124
|
+
w.writeBytes(dg.payload);
|
|
114
125
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
126
|
+
return w.finish();
|
|
127
|
+
}
|
|
128
|
+
function encodeFetchStream(stream) {
|
|
129
|
+
const w = new BufferWriter();
|
|
130
|
+
w.writeVarInt(FETCH_STREAM_TYPE);
|
|
131
|
+
w.writeVarInt(stream.requestId);
|
|
132
|
+
for (const obj of stream.objects) {
|
|
133
|
+
w.writeUint8(obj.serializationFlags);
|
|
134
|
+
const flags = obj.serializationFlags;
|
|
135
|
+
if (flags & 8) w.writeVarInt(obj.groupId);
|
|
136
|
+
const subgroupEncoding = flags & 3;
|
|
137
|
+
if (subgroupEncoding === 3) w.writeVarInt(obj.subgroupId);
|
|
138
|
+
if (flags & 4) w.writeVarInt(obj.objectId);
|
|
139
|
+
if (flags & 16) w.writeUint8(obj.publisherPriority);
|
|
140
|
+
if (flags & 32) {
|
|
141
|
+
w.writeVarInt(BigInt(obj.extensionData.length));
|
|
142
|
+
if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData);
|
|
143
|
+
}
|
|
144
|
+
w.writeVarInt(obj.payloadLength);
|
|
145
|
+
if (obj.payloadLength === 0) {
|
|
146
|
+
w.writeVarInt(obj.status ?? 0n);
|
|
147
|
+
} else {
|
|
148
|
+
w.writeBytes(obj.payload);
|
|
129
149
|
}
|
|
130
150
|
}
|
|
151
|
+
return w.finish();
|
|
131
152
|
}
|
|
132
|
-
function
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
153
|
+
function decodeSubgroupStream(bytes) {
|
|
154
|
+
try {
|
|
155
|
+
const r = new BufferReader(bytes);
|
|
156
|
+
const streamType = Number(r.readVarInt());
|
|
157
|
+
if (!(streamType >= 16 && streamType <= 23 || streamType >= 48 && streamType <= 55)) {
|
|
158
|
+
return {
|
|
159
|
+
ok: false,
|
|
160
|
+
error: new DecodeError(
|
|
161
|
+
"CONSTRAINT_VIOLATION",
|
|
162
|
+
`Expected subgroup stream type 0x10-0x17/0x30-0x37, got 0x${streamType.toString(16)}`,
|
|
163
|
+
0
|
|
164
|
+
)
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
const extensionsPresent = (streamType & 1) !== 0;
|
|
168
|
+
const endOfGroup = (streamType & 2) !== 0;
|
|
169
|
+
const hasSubgroupField = (streamType & 4) !== 0;
|
|
170
|
+
const hasPriority = streamType < 48;
|
|
171
|
+
const trackAlias = r.readVarInt();
|
|
172
|
+
const groupId = r.readVarInt();
|
|
173
|
+
let subgroupId = 0n;
|
|
174
|
+
if (hasSubgroupField) {
|
|
175
|
+
subgroupId = r.readVarInt();
|
|
176
|
+
}
|
|
177
|
+
let publisherPriority = 128;
|
|
178
|
+
if (hasPriority) {
|
|
179
|
+
publisherPriority = r.readUint8();
|
|
180
|
+
}
|
|
181
|
+
const objects = [];
|
|
182
|
+
let prevObjectId = -1n;
|
|
183
|
+
let firstObject = true;
|
|
184
|
+
while (r.remaining > 0) {
|
|
185
|
+
const byteOffset = r.offset;
|
|
186
|
+
const delta = r.readVarInt();
|
|
187
|
+
let objectId;
|
|
188
|
+
if (firstObject) {
|
|
189
|
+
objectId = delta;
|
|
190
|
+
firstObject = false;
|
|
144
191
|
} 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
|
-
});
|
|
192
|
+
objectId = prevObjectId + 1n + delta;
|
|
153
193
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
194
|
+
let extensionData = new Uint8Array(0);
|
|
195
|
+
if (extensionsPresent) {
|
|
196
|
+
const extLen = Number(r.readVarInt());
|
|
197
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0);
|
|
198
|
+
}
|
|
199
|
+
const payloadLength = Number(r.readVarInt());
|
|
200
|
+
let payload;
|
|
201
|
+
let status;
|
|
202
|
+
let payloadByteOffset;
|
|
203
|
+
if (payloadLength === 0) {
|
|
204
|
+
status = r.readVarInt();
|
|
205
|
+
payloadByteOffset = r.offset;
|
|
206
|
+
payload = new Uint8Array(0);
|
|
163
207
|
} else {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
length,
|
|
167
|
-
raw_hex: bytesToHex(bytes)
|
|
168
|
-
});
|
|
208
|
+
payloadByteOffset = r.offset;
|
|
209
|
+
payload = r.readBytesView(payloadLength);
|
|
169
210
|
}
|
|
211
|
+
const obj = {
|
|
212
|
+
type: "object",
|
|
213
|
+
byteOffset,
|
|
214
|
+
payloadByteOffset,
|
|
215
|
+
objectId,
|
|
216
|
+
payloadLength,
|
|
217
|
+
extensionData,
|
|
218
|
+
payload
|
|
219
|
+
};
|
|
220
|
+
if (status !== void 0) obj.status = status;
|
|
221
|
+
objects.push(obj);
|
|
222
|
+
prevObjectId = objectId;
|
|
170
223
|
}
|
|
224
|
+
const result = {
|
|
225
|
+
type: "subgroup",
|
|
226
|
+
headerType: streamType,
|
|
227
|
+
trackAlias,
|
|
228
|
+
groupId,
|
|
229
|
+
subgroupId,
|
|
230
|
+
publisherPriority,
|
|
231
|
+
objects
|
|
232
|
+
};
|
|
233
|
+
if (endOfGroup) result.endOfGroup = true;
|
|
234
|
+
return {
|
|
235
|
+
ok: true,
|
|
236
|
+
value: result,
|
|
237
|
+
bytesRead: r.offset
|
|
238
|
+
};
|
|
239
|
+
} catch (e) {
|
|
240
|
+
if (e instanceof DecodeError) return { ok: false, error: e };
|
|
241
|
+
throw e;
|
|
171
242
|
}
|
|
172
|
-
|
|
173
|
-
|
|
243
|
+
}
|
|
244
|
+
function decodeDatagram(bytes) {
|
|
245
|
+
try {
|
|
246
|
+
const r = new BufferReader(bytes);
|
|
247
|
+
const dgType = Number(r.readVarInt());
|
|
248
|
+
const extensionsPresent = (dgType & 1) !== 0;
|
|
249
|
+
const objectIdAbsent = (dgType & 4) !== 0;
|
|
250
|
+
const endOfGroup = (dgType & 2) !== 0;
|
|
251
|
+
const isStatus = (dgType & 32) !== 0;
|
|
252
|
+
const trackAlias = r.readVarInt();
|
|
253
|
+
const groupId = r.readVarInt();
|
|
254
|
+
let objectId = 0n;
|
|
255
|
+
if (!objectIdAbsent) {
|
|
256
|
+
objectId = r.readVarInt();
|
|
257
|
+
}
|
|
258
|
+
const publisherPriority = r.readUint8();
|
|
259
|
+
let extensionData;
|
|
260
|
+
if (extensionsPresent) {
|
|
261
|
+
const extLen = Number(r.readVarInt());
|
|
262
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0);
|
|
263
|
+
}
|
|
264
|
+
let objectStatus;
|
|
265
|
+
let payload;
|
|
266
|
+
if (isStatus) {
|
|
267
|
+
objectStatus = r.readVarInt();
|
|
268
|
+
payload = new Uint8Array(0);
|
|
269
|
+
} else {
|
|
270
|
+
payload = r.readBytesView(r.remaining);
|
|
271
|
+
}
|
|
272
|
+
const payloadLength = payload.byteLength;
|
|
273
|
+
const result = {
|
|
274
|
+
type: "datagram",
|
|
275
|
+
datagramType: dgType,
|
|
276
|
+
trackAlias,
|
|
277
|
+
groupId,
|
|
278
|
+
objectId,
|
|
279
|
+
publisherPriority,
|
|
280
|
+
payloadLength,
|
|
281
|
+
payload
|
|
282
|
+
};
|
|
283
|
+
if (endOfGroup) result.endOfGroup = true;
|
|
284
|
+
if (objectStatus !== void 0)
|
|
285
|
+
result.objectStatus = objectStatus;
|
|
286
|
+
if (extensionData !== void 0)
|
|
287
|
+
result.extensionData = extensionData;
|
|
288
|
+
return { ok: true, value: result, bytesRead: r.offset };
|
|
289
|
+
} catch (e) {
|
|
290
|
+
if (e instanceof DecodeError) return { ok: false, error: e };
|
|
291
|
+
throw e;
|
|
174
292
|
}
|
|
175
|
-
return result;
|
|
176
293
|
}
|
|
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);
|
|
294
|
+
function decodeFetchStream(bytes) {
|
|
295
|
+
try {
|
|
296
|
+
const r = new BufferReader(bytes);
|
|
297
|
+
const streamType = r.readVarInt();
|
|
298
|
+
if (streamType !== FETCH_STREAM_TYPE) {
|
|
299
|
+
return {
|
|
300
|
+
ok: false,
|
|
301
|
+
error: new DecodeError(
|
|
302
|
+
"CONSTRAINT_VIOLATION",
|
|
303
|
+
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
304
|
+
0
|
|
305
|
+
)
|
|
306
|
+
};
|
|
218
307
|
}
|
|
219
|
-
const
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
const
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
308
|
+
const requestId = r.readVarInt();
|
|
309
|
+
const objects = [];
|
|
310
|
+
let prevGroupId = 0n;
|
|
311
|
+
let prevSubgroupId = 0n;
|
|
312
|
+
let prevObjectId = 0n;
|
|
313
|
+
let prevPriority = 128;
|
|
314
|
+
let first = true;
|
|
315
|
+
while (r.remaining > 0) {
|
|
316
|
+
const byteOffset = r.offset;
|
|
317
|
+
const flags = r.readUint8();
|
|
318
|
+
const subgroupEncoding = flags & 3;
|
|
319
|
+
const objectIdPresent = (flags & 4) !== 0;
|
|
320
|
+
const groupIdPresent = (flags & 8) !== 0;
|
|
321
|
+
const priorityPresent = (flags & 16) !== 0;
|
|
322
|
+
const extensionsPresent = (flags & 32) !== 0;
|
|
323
|
+
if (flags & 192) {
|
|
324
|
+
return {
|
|
325
|
+
ok: false,
|
|
326
|
+
error: new DecodeError(
|
|
327
|
+
"CONSTRAINT_VIOLATION",
|
|
328
|
+
"Reserved bits set in fetch object flags",
|
|
329
|
+
r.offset
|
|
330
|
+
)
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
let groupId = prevGroupId;
|
|
334
|
+
if (groupIdPresent) {
|
|
335
|
+
groupId = r.readVarInt();
|
|
336
|
+
} else if (first) {
|
|
337
|
+
return {
|
|
338
|
+
ok: false,
|
|
339
|
+
error: new DecodeError(
|
|
340
|
+
"CONSTRAINT_VIOLATION",
|
|
341
|
+
"First fetch object must include groupId",
|
|
342
|
+
r.offset
|
|
343
|
+
)
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
let subgroupId;
|
|
347
|
+
if (subgroupEncoding === 0) {
|
|
348
|
+
subgroupId = 0n;
|
|
349
|
+
} else if (subgroupEncoding === 1) {
|
|
350
|
+
if (first) {
|
|
351
|
+
return {
|
|
352
|
+
ok: false,
|
|
353
|
+
error: new DecodeError(
|
|
354
|
+
"CONSTRAINT_VIOLATION",
|
|
355
|
+
"First fetch object cannot reference prior subgroupId",
|
|
356
|
+
r.offset
|
|
357
|
+
)
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
subgroupId = prevSubgroupId;
|
|
361
|
+
} else if (subgroupEncoding === 2) {
|
|
362
|
+
if (first) {
|
|
363
|
+
return {
|
|
364
|
+
ok: false,
|
|
365
|
+
error: new DecodeError(
|
|
366
|
+
"CONSTRAINT_VIOLATION",
|
|
367
|
+
"First fetch object cannot reference prior subgroupId",
|
|
368
|
+
r.offset
|
|
369
|
+
)
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
subgroupId = prevSubgroupId + 1n;
|
|
236
373
|
} else {
|
|
237
|
-
|
|
238
|
-
writer.writeVarInt(raw.byteLength);
|
|
239
|
-
writer.writeBytes(raw);
|
|
374
|
+
subgroupId = r.readVarInt();
|
|
240
375
|
}
|
|
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();
|
|
376
|
+
let objectId = prevObjectId + 1n;
|
|
377
|
+
if (objectIdPresent) {
|
|
378
|
+
objectId = r.readVarInt();
|
|
379
|
+
} else if (first) {
|
|
380
|
+
return {
|
|
381
|
+
ok: false,
|
|
382
|
+
error: new DecodeError(
|
|
383
|
+
"CONSTRAINT_VIOLATION",
|
|
384
|
+
"First fetch object must include objectId",
|
|
385
|
+
r.offset
|
|
386
|
+
)
|
|
387
|
+
};
|
|
272
388
|
}
|
|
273
|
-
if (
|
|
274
|
-
|
|
389
|
+
if (priorityPresent) {
|
|
390
|
+
prevPriority = r.readUint8();
|
|
275
391
|
}
|
|
276
|
-
|
|
277
|
-
if (
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
const
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
392
|
+
let extensionData = new Uint8Array(0);
|
|
393
|
+
if (extensionsPresent) {
|
|
394
|
+
const extLen = Number(r.readVarInt());
|
|
395
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0);
|
|
396
|
+
}
|
|
397
|
+
const payloadLength = Number(r.readVarInt());
|
|
398
|
+
let payload;
|
|
399
|
+
let status;
|
|
400
|
+
let payloadByteOffset;
|
|
401
|
+
if (payloadLength > 0) {
|
|
402
|
+
payloadByteOffset = r.offset;
|
|
403
|
+
payload = r.readBytesView(payloadLength);
|
|
404
|
+
} else {
|
|
405
|
+
status = r.readVarInt();
|
|
406
|
+
payloadByteOffset = r.offset;
|
|
407
|
+
payload = new Uint8Array(0);
|
|
408
|
+
}
|
|
409
|
+
const obj = {
|
|
410
|
+
type: "object",
|
|
411
|
+
byteOffset,
|
|
412
|
+
payloadByteOffset,
|
|
413
|
+
serializationFlags: flags,
|
|
414
|
+
groupId,
|
|
415
|
+
subgroupId,
|
|
416
|
+
objectId,
|
|
417
|
+
publisherPriority: prevPriority,
|
|
418
|
+
payloadLength,
|
|
419
|
+
extensionData,
|
|
420
|
+
payload
|
|
421
|
+
};
|
|
422
|
+
if (status !== void 0) obj.status = status;
|
|
423
|
+
objects.push(obj);
|
|
424
|
+
prevGroupId = groupId;
|
|
425
|
+
prevSubgroupId = subgroupId;
|
|
426
|
+
prevObjectId = objectId;
|
|
427
|
+
first = false;
|
|
297
428
|
}
|
|
429
|
+
return {
|
|
430
|
+
ok: true,
|
|
431
|
+
value: { type: "fetch", requestId, objects },
|
|
432
|
+
bytesRead: r.offset
|
|
433
|
+
};
|
|
434
|
+
} catch (e) {
|
|
435
|
+
if (e instanceof DecodeError) return { ok: false, error: e };
|
|
436
|
+
throw e;
|
|
298
437
|
}
|
|
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
438
|
}
|
|
326
|
-
function
|
|
327
|
-
|
|
439
|
+
function decodeDataStream(streamType, bytes) {
|
|
440
|
+
switch (streamType) {
|
|
441
|
+
case "subgroup":
|
|
442
|
+
return decodeSubgroupStream(bytes);
|
|
443
|
+
case "datagram":
|
|
444
|
+
return decodeDatagram(bytes);
|
|
445
|
+
case "fetch":
|
|
446
|
+
return decodeFetchStream(bytes);
|
|
447
|
+
default: {
|
|
448
|
+
const _exhaustive = streamType;
|
|
449
|
+
throw new Error(`Unknown stream type: ${_exhaustive}`);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
328
452
|
}
|
|
329
|
-
function
|
|
330
|
-
|
|
331
|
-
|
|
453
|
+
function createSubgroupStreamDecoder() {
|
|
454
|
+
let buffer = new Uint8Array(0);
|
|
455
|
+
let offset = 0;
|
|
456
|
+
let headerEmitted = false;
|
|
457
|
+
let prevObjectId = -1n;
|
|
458
|
+
let firstObject = true;
|
|
459
|
+
let _subgroupIsFirstObjId = false;
|
|
460
|
+
let _extensionsPresent = false;
|
|
461
|
+
return new TransformStream({
|
|
462
|
+
transform(chunk, controller) {
|
|
463
|
+
if (offset > 0) {
|
|
464
|
+
buffer = buffer.subarray(offset);
|
|
465
|
+
offset = 0;
|
|
466
|
+
}
|
|
467
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
468
|
+
newBuffer.set(buffer, 0);
|
|
469
|
+
newBuffer.set(chunk, buffer.length);
|
|
470
|
+
buffer = newBuffer;
|
|
471
|
+
if (!headerEmitted) {
|
|
472
|
+
try {
|
|
473
|
+
const r = new BufferReader(buffer.subarray(offset));
|
|
474
|
+
const streamType = Number(r.readVarInt());
|
|
475
|
+
if (!(streamType >= 16 && streamType <= 23 || streamType >= 48 && streamType <= 55)) {
|
|
476
|
+
controller.error(
|
|
477
|
+
new DecodeError(
|
|
478
|
+
"CONSTRAINT_VIOLATION",
|
|
479
|
+
`Expected subgroup stream type, got 0x${streamType.toString(16)}`,
|
|
480
|
+
0
|
|
481
|
+
)
|
|
482
|
+
);
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
_extensionsPresent = (streamType & 1) !== 0;
|
|
486
|
+
const hasSubgroupField = (streamType & 4) !== 0;
|
|
487
|
+
_subgroupIsFirstObjId = false;
|
|
488
|
+
const hasPriority = streamType < 48;
|
|
489
|
+
const trackAlias = r.readVarInt();
|
|
490
|
+
const groupId = r.readVarInt();
|
|
491
|
+
let subgroupId = 0n;
|
|
492
|
+
if (hasSubgroupField) {
|
|
493
|
+
subgroupId = r.readVarInt();
|
|
494
|
+
}
|
|
495
|
+
let publisherPriority = 128;
|
|
496
|
+
if (hasPriority) {
|
|
497
|
+
publisherPriority = r.readUint8();
|
|
498
|
+
}
|
|
499
|
+
controller.enqueue({
|
|
500
|
+
type: "subgroup_header",
|
|
501
|
+
trackAlias,
|
|
502
|
+
groupId,
|
|
503
|
+
subgroupId,
|
|
504
|
+
publisherPriority
|
|
505
|
+
});
|
|
506
|
+
headerEmitted = true;
|
|
507
|
+
offset += r.offset;
|
|
508
|
+
} catch (e) {
|
|
509
|
+
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
510
|
+
return;
|
|
511
|
+
}
|
|
512
|
+
controller.error(e);
|
|
513
|
+
return;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
while (offset < buffer.length) {
|
|
517
|
+
try {
|
|
518
|
+
const r = new BufferReader(buffer.subarray(offset));
|
|
519
|
+
const byteOffset = r.offset;
|
|
520
|
+
const delta = r.readVarInt();
|
|
521
|
+
let objectId;
|
|
522
|
+
if (firstObject) {
|
|
523
|
+
objectId = delta;
|
|
524
|
+
firstObject = false;
|
|
525
|
+
} else {
|
|
526
|
+
objectId = prevObjectId + 1n + delta;
|
|
527
|
+
}
|
|
528
|
+
let extensionData = new Uint8Array(0);
|
|
529
|
+
if (_extensionsPresent) {
|
|
530
|
+
const extLen = Number(r.readVarInt());
|
|
531
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0);
|
|
532
|
+
}
|
|
533
|
+
const payloadLength = Number(r.readVarInt());
|
|
534
|
+
const payloadByteOffset = r.offset;
|
|
535
|
+
const payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0);
|
|
536
|
+
controller.enqueue({
|
|
537
|
+
type: "object",
|
|
538
|
+
byteOffset,
|
|
539
|
+
payloadByteOffset,
|
|
540
|
+
objectId,
|
|
541
|
+
payloadLength,
|
|
542
|
+
extensionData,
|
|
543
|
+
payload
|
|
544
|
+
});
|
|
545
|
+
offset += r.offset;
|
|
546
|
+
prevObjectId = objectId;
|
|
547
|
+
} catch (e) {
|
|
548
|
+
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
549
|
+
break;
|
|
550
|
+
}
|
|
551
|
+
controller.error(e);
|
|
552
|
+
return;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
},
|
|
556
|
+
flush(controller) {
|
|
557
|
+
if (offset < buffer.length) {
|
|
558
|
+
controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
});
|
|
562
|
+
}
|
|
563
|
+
function createFetchStreamDecoder() {
|
|
564
|
+
let buffer = new Uint8Array(0);
|
|
565
|
+
let offset = 0;
|
|
566
|
+
let headerEmitted = false;
|
|
567
|
+
return new TransformStream({
|
|
568
|
+
transform(chunk, controller) {
|
|
569
|
+
if (offset > 0) {
|
|
570
|
+
buffer = buffer.subarray(offset);
|
|
571
|
+
offset = 0;
|
|
572
|
+
}
|
|
573
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
574
|
+
newBuffer.set(buffer, 0);
|
|
575
|
+
newBuffer.set(chunk, buffer.length);
|
|
576
|
+
buffer = newBuffer;
|
|
577
|
+
if (!headerEmitted) {
|
|
578
|
+
try {
|
|
579
|
+
const r = new BufferReader(buffer.subarray(offset));
|
|
580
|
+
const streamType = r.readVarInt();
|
|
581
|
+
if (streamType !== FETCH_STREAM_TYPE) {
|
|
582
|
+
controller.error(
|
|
583
|
+
new DecodeError(
|
|
584
|
+
"CONSTRAINT_VIOLATION",
|
|
585
|
+
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
586
|
+
0
|
|
587
|
+
)
|
|
588
|
+
);
|
|
589
|
+
return;
|
|
590
|
+
}
|
|
591
|
+
const requestId = r.readVarInt();
|
|
592
|
+
controller.enqueue({ type: "fetch_header", requestId });
|
|
593
|
+
headerEmitted = true;
|
|
594
|
+
offset += r.offset;
|
|
595
|
+
} catch (e) {
|
|
596
|
+
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
597
|
+
return;
|
|
598
|
+
}
|
|
599
|
+
controller.error(e);
|
|
600
|
+
return;
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
while (offset < buffer.length) {
|
|
604
|
+
try {
|
|
605
|
+
const r = new BufferReader(buffer.subarray(offset));
|
|
606
|
+
const flags = r.readUint8();
|
|
607
|
+
const objectIdPresent = (flags & 4) !== 0;
|
|
608
|
+
const groupIdPresent = (flags & 8) !== 0;
|
|
609
|
+
const priorityPresent = (flags & 16) !== 0;
|
|
610
|
+
const extensionsPresent = (flags & 32) !== 0;
|
|
611
|
+
const subgroupEncoding = flags & 3;
|
|
612
|
+
if (groupIdPresent) r.readVarInt();
|
|
613
|
+
if (subgroupEncoding === 3) r.readVarInt();
|
|
614
|
+
let objectId = 0n;
|
|
615
|
+
if (objectIdPresent) objectId = r.readVarInt();
|
|
616
|
+
if (priorityPresent) r.readUint8();
|
|
617
|
+
let extensionData = new Uint8Array(0);
|
|
618
|
+
if (extensionsPresent) {
|
|
619
|
+
const extLen = Number(r.readVarInt());
|
|
620
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0);
|
|
621
|
+
}
|
|
622
|
+
const payloadLength = Number(r.readVarInt());
|
|
623
|
+
const payloadByteOffset = r.offset;
|
|
624
|
+
const payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0);
|
|
625
|
+
controller.enqueue({
|
|
626
|
+
type: "object",
|
|
627
|
+
objectId,
|
|
628
|
+
payloadLength,
|
|
629
|
+
extensionData,
|
|
630
|
+
payload,
|
|
631
|
+
byteOffset: 0,
|
|
632
|
+
payloadByteOffset
|
|
633
|
+
});
|
|
634
|
+
offset += r.offset;
|
|
635
|
+
} catch (e) {
|
|
636
|
+
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
637
|
+
break;
|
|
638
|
+
}
|
|
639
|
+
controller.error(e);
|
|
640
|
+
return;
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
},
|
|
644
|
+
flush(controller) {
|
|
645
|
+
if (offset < buffer.length) {
|
|
646
|
+
controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
});
|
|
650
|
+
}
|
|
651
|
+
function createDataStreamDecoder() {
|
|
652
|
+
let buffer = new Uint8Array(0);
|
|
653
|
+
let offset = 0;
|
|
654
|
+
let inner = null;
|
|
655
|
+
const _innerWriter = null;
|
|
656
|
+
const _innerReader = null;
|
|
657
|
+
return new TransformStream({
|
|
658
|
+
transform(chunk, controller) {
|
|
659
|
+
if (offset > 0) {
|
|
660
|
+
buffer = buffer.subarray(offset);
|
|
661
|
+
offset = 0;
|
|
662
|
+
}
|
|
663
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
664
|
+
newBuffer.set(buffer, 0);
|
|
665
|
+
newBuffer.set(chunk, buffer.length);
|
|
666
|
+
buffer = newBuffer;
|
|
667
|
+
if (inner === null) {
|
|
668
|
+
if (offset >= buffer.length) return;
|
|
669
|
+
const firstByte = buffer[offset];
|
|
670
|
+
if (firstByte >= 16 && firstByte <= 23 || firstByte >= 48 && firstByte <= 55) {
|
|
671
|
+
const decoder = createSubgroupStreamDecoder();
|
|
672
|
+
inner = decoder;
|
|
673
|
+
} else if (firstByte === 5) {
|
|
674
|
+
const decoder = createFetchStreamDecoder();
|
|
675
|
+
inner = decoder;
|
|
676
|
+
} else {
|
|
677
|
+
controller.error(
|
|
678
|
+
new DecodeError(
|
|
679
|
+
"CONSTRAINT_VIOLATION",
|
|
680
|
+
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
681
|
+
0
|
|
682
|
+
)
|
|
683
|
+
);
|
|
684
|
+
return;
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
},
|
|
688
|
+
flush(controller) {
|
|
689
|
+
if (offset >= buffer.length) return;
|
|
690
|
+
const view = buffer.subarray(offset);
|
|
691
|
+
const firstByte = view[0];
|
|
692
|
+
let result;
|
|
693
|
+
if (firstByte >= 16 && firstByte <= 23 || firstByte >= 48 && firstByte <= 55) {
|
|
694
|
+
result = decodeSubgroupStream(view);
|
|
695
|
+
} else if (firstByte === 5) {
|
|
696
|
+
result = decodeFetchStream(view);
|
|
697
|
+
} else {
|
|
698
|
+
controller.error(
|
|
699
|
+
new DecodeError(
|
|
700
|
+
"CONSTRAINT_VIOLATION",
|
|
701
|
+
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
702
|
+
0
|
|
703
|
+
)
|
|
704
|
+
);
|
|
705
|
+
return;
|
|
706
|
+
}
|
|
707
|
+
if (!result.ok) {
|
|
708
|
+
controller.error(result.error);
|
|
709
|
+
return;
|
|
710
|
+
}
|
|
711
|
+
const stream = result.value;
|
|
712
|
+
if (stream.type === "subgroup") {
|
|
713
|
+
controller.enqueue({
|
|
714
|
+
type: "subgroup_header",
|
|
715
|
+
trackAlias: stream.trackAlias,
|
|
716
|
+
groupId: stream.groupId,
|
|
717
|
+
subgroupId: stream.subgroupId,
|
|
718
|
+
publisherPriority: stream.publisherPriority
|
|
719
|
+
});
|
|
720
|
+
for (const obj of stream.objects) {
|
|
721
|
+
controller.enqueue(obj);
|
|
722
|
+
}
|
|
723
|
+
} else if (stream.type === "fetch") {
|
|
724
|
+
controller.enqueue({
|
|
725
|
+
type: "fetch_header",
|
|
726
|
+
requestId: stream.requestId
|
|
727
|
+
});
|
|
728
|
+
for (const obj of stream.objects) {
|
|
729
|
+
controller.enqueue(obj);
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
});
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
// src/drafts/draft15/codec.ts
|
|
737
|
+
var textEncoder = /* @__PURE__ */ new TextEncoder();
|
|
738
|
+
var textDecoder = /* @__PURE__ */ new TextDecoder();
|
|
739
|
+
function encodeSetupParams(params, writer) {
|
|
740
|
+
let count = 0;
|
|
741
|
+
if (params.path !== void 0) count++;
|
|
742
|
+
if (params.max_request_id !== void 0) count++;
|
|
743
|
+
if (params.authorization_token !== void 0) count++;
|
|
744
|
+
if (params.max_auth_token_cache_size !== void 0) count++;
|
|
745
|
+
if (params.authority !== void 0) count++;
|
|
746
|
+
if (params.moqt_implementation !== void 0) count++;
|
|
747
|
+
if (params.unknown) count += params.unknown.length;
|
|
748
|
+
writer.writeVarInt(count);
|
|
749
|
+
if (params.path !== void 0) {
|
|
750
|
+
writer.writeVarInt(SETUP_PARAM_PATH);
|
|
751
|
+
const encoded = textEncoder.encode(params.path);
|
|
752
|
+
writer.writeVarInt(encoded.byteLength);
|
|
753
|
+
writer.writeBytes(encoded);
|
|
754
|
+
}
|
|
755
|
+
if (params.max_request_id !== void 0) {
|
|
756
|
+
writer.writeVarInt(SETUP_PARAM_MAX_REQUEST_ID);
|
|
757
|
+
writer.writeVarInt(params.max_request_id);
|
|
758
|
+
}
|
|
759
|
+
if (params.authorization_token !== void 0) {
|
|
760
|
+
writer.writeVarInt(SETUP_PARAM_AUTHORIZATION_TOKEN);
|
|
761
|
+
const tmpW = new BufferWriter(64);
|
|
762
|
+
encodeAuthorizationToken(params.authorization_token, tmpW);
|
|
763
|
+
const raw = tmpW.finish();
|
|
764
|
+
writer.writeVarInt(raw.byteLength);
|
|
765
|
+
writer.writeBytes(raw);
|
|
766
|
+
}
|
|
767
|
+
if (params.max_auth_token_cache_size !== void 0) {
|
|
768
|
+
writer.writeVarInt(SETUP_PARAM_MAX_AUTH_TOKEN_CACHE_SIZE);
|
|
769
|
+
writer.writeVarInt(params.max_auth_token_cache_size);
|
|
770
|
+
}
|
|
771
|
+
if (params.authority !== void 0) {
|
|
772
|
+
writer.writeVarInt(SETUP_PARAM_AUTHORITY);
|
|
773
|
+
const encoded = textEncoder.encode(params.authority);
|
|
774
|
+
writer.writeVarInt(encoded.byteLength);
|
|
775
|
+
writer.writeBytes(encoded);
|
|
776
|
+
}
|
|
777
|
+
if (params.moqt_implementation !== void 0) {
|
|
778
|
+
writer.writeVarInt(SETUP_PARAM_MOQT_IMPLEMENTATION);
|
|
779
|
+
const encoded = textEncoder.encode(params.moqt_implementation);
|
|
780
|
+
writer.writeVarInt(encoded.byteLength);
|
|
781
|
+
writer.writeBytes(encoded);
|
|
782
|
+
}
|
|
783
|
+
if (params.unknown) {
|
|
784
|
+
for (const u of params.unknown) {
|
|
785
|
+
const id = BigInt(u.id);
|
|
786
|
+
writer.writeVarInt(id);
|
|
787
|
+
if (id % 2n === 0n) {
|
|
788
|
+
const raw = hexToBytes(u.raw_hex);
|
|
789
|
+
const tmpReader = new BufferReader(raw);
|
|
790
|
+
const value = tmpReader.readVarInt();
|
|
791
|
+
writer.writeVarInt(value);
|
|
792
|
+
} else {
|
|
793
|
+
const raw = hexToBytes(u.raw_hex);
|
|
794
|
+
writer.writeVarInt(raw.byteLength);
|
|
795
|
+
writer.writeBytes(raw);
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
function decodeSetupParams(reader) {
|
|
801
|
+
const count = Number(reader.readVarInt());
|
|
802
|
+
const result = {};
|
|
803
|
+
const unknown = [];
|
|
804
|
+
for (let i = 0; i < count; i++) {
|
|
805
|
+
const paramType = reader.readVarInt();
|
|
806
|
+
if (paramType % 2n === 0n) {
|
|
807
|
+
const value = reader.readVarInt();
|
|
808
|
+
if (paramType === SETUP_PARAM_MAX_REQUEST_ID) {
|
|
809
|
+
result.max_request_id = value;
|
|
810
|
+
} else if (paramType === SETUP_PARAM_MAX_AUTH_TOKEN_CACHE_SIZE) {
|
|
811
|
+
result.max_auth_token_cache_size = value;
|
|
812
|
+
} else {
|
|
813
|
+
const tmpWriter = new BufferWriter(16);
|
|
814
|
+
tmpWriter.writeVarInt(value);
|
|
815
|
+
const raw = tmpWriter.finish();
|
|
816
|
+
unknown.push({
|
|
817
|
+
id: `0x${paramType.toString(16)}`,
|
|
818
|
+
length: raw.byteLength,
|
|
819
|
+
raw_hex: bytesToHex(raw)
|
|
820
|
+
});
|
|
821
|
+
}
|
|
822
|
+
} else {
|
|
823
|
+
const length = Number(reader.readVarInt());
|
|
824
|
+
const bytes = reader.readBytes(length);
|
|
825
|
+
if (paramType === SETUP_PARAM_PATH) {
|
|
826
|
+
result.path = textDecoder.decode(bytes);
|
|
827
|
+
} else if (paramType === SETUP_PARAM_AUTHORIZATION_TOKEN) {
|
|
828
|
+
result.authorization_token = decodeAuthorizationToken(new BufferReader(bytes));
|
|
829
|
+
} else if (paramType === SETUP_PARAM_AUTHORITY) {
|
|
830
|
+
result.authority = textDecoder.decode(bytes);
|
|
831
|
+
} else if (paramType === SETUP_PARAM_MOQT_IMPLEMENTATION) {
|
|
832
|
+
result.moqt_implementation = textDecoder.decode(bytes);
|
|
833
|
+
} else {
|
|
834
|
+
unknown.push({
|
|
835
|
+
id: `0x${paramType.toString(16)}`,
|
|
836
|
+
length,
|
|
837
|
+
raw_hex: bytesToHex(bytes)
|
|
838
|
+
});
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
if (unknown.length > 0) {
|
|
843
|
+
result.unknown = unknown;
|
|
844
|
+
}
|
|
845
|
+
return result;
|
|
846
|
+
}
|
|
847
|
+
function encodeAuthorizationToken(token, w) {
|
|
848
|
+
w.writeVarInt(token.alias_type);
|
|
849
|
+
const aliasType = Number(token.alias_type);
|
|
850
|
+
if (aliasType === 0 || aliasType === 1) {
|
|
851
|
+
w.writeVarInt(token.token_alias);
|
|
852
|
+
}
|
|
853
|
+
if (aliasType === 1 || aliasType === 3) {
|
|
854
|
+
w.writeVarInt(token.token_type);
|
|
855
|
+
const tokenBytes = hexToBytes(token.token_value_hex);
|
|
856
|
+
w.writeBytes(tokenBytes);
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
function decodeAuthorizationToken(r) {
|
|
860
|
+
const alias_type = r.readVarInt();
|
|
861
|
+
const aliasType = Number(alias_type);
|
|
862
|
+
const result = { alias_type };
|
|
863
|
+
if (aliasType === 0 || aliasType === 1) {
|
|
864
|
+
result.token_alias = r.readVarInt();
|
|
865
|
+
}
|
|
866
|
+
if (aliasType === 1 || aliasType === 3) {
|
|
867
|
+
result.token_type = r.readVarInt();
|
|
868
|
+
const tokenBytes = r.readBytesView(r.remaining);
|
|
869
|
+
result.token_value_hex = bytesToHex(tokenBytes);
|
|
870
|
+
}
|
|
871
|
+
return result;
|
|
872
|
+
}
|
|
873
|
+
var PARAM_DELIVERY_TIMEOUT = 0x02n;
|
|
874
|
+
var PARAM_AUTHORIZATION_TOKEN = 0x03n;
|
|
875
|
+
var PARAM_MAX_CACHE_DURATION = 0x04n;
|
|
876
|
+
var PARAM_EXPIRES = 0x08n;
|
|
877
|
+
var PARAM_LARGEST_OBJECT = 0x09n;
|
|
878
|
+
var PARAM_PUBLISHER_PRIORITY = 0x0en;
|
|
879
|
+
var PARAM_FORWARD = 0x10n;
|
|
880
|
+
var PARAM_SUBSCRIBER_PRIORITY = 0x20n;
|
|
881
|
+
var PARAM_SUBSCRIPTION_FILTER = 0x21n;
|
|
882
|
+
var PARAM_GROUP_ORDER = 0x22n;
|
|
883
|
+
var PARAM_DYNAMIC_GROUPS = 0x30n;
|
|
884
|
+
var PARAM_NEW_GROUP_REQUEST = 0x32n;
|
|
885
|
+
function encodeParams(params, writer) {
|
|
886
|
+
let count = params.unknown ? params.unknown.length : 0;
|
|
887
|
+
if (params.delivery_timeout !== void 0) count++;
|
|
888
|
+
if (params.authorization_token !== void 0) count++;
|
|
889
|
+
if (params.max_cache_duration !== void 0) count++;
|
|
890
|
+
if (params.expires !== void 0) count++;
|
|
891
|
+
if (params.largest_object !== void 0) count++;
|
|
892
|
+
if (params.publisher_priority !== void 0) count++;
|
|
893
|
+
if (params.forward !== void 0) count++;
|
|
894
|
+
if (params.subscriber_priority !== void 0) count++;
|
|
895
|
+
if (params.subscription_filter !== void 0) count++;
|
|
896
|
+
if (params.group_order !== void 0) count++;
|
|
897
|
+
if (params.dynamic_groups !== void 0) count++;
|
|
898
|
+
if (params.new_group_request !== void 0) count++;
|
|
899
|
+
writer.writeVarInt(count);
|
|
900
|
+
if (params.delivery_timeout !== void 0) {
|
|
901
|
+
writer.writeVarInt(PARAM_DELIVERY_TIMEOUT);
|
|
902
|
+
writer.writeVarInt(params.delivery_timeout);
|
|
903
|
+
}
|
|
904
|
+
if (params.authorization_token !== void 0) {
|
|
905
|
+
writer.writeVarInt(PARAM_AUTHORIZATION_TOKEN);
|
|
906
|
+
const tmpW = new BufferWriter(64);
|
|
907
|
+
encodeAuthorizationToken(params.authorization_token, tmpW);
|
|
908
|
+
const raw = tmpW.finish();
|
|
909
|
+
writer.writeVarInt(raw.byteLength);
|
|
910
|
+
writer.writeBytes(raw);
|
|
911
|
+
}
|
|
912
|
+
if (params.max_cache_duration !== void 0) {
|
|
913
|
+
writer.writeVarInt(PARAM_MAX_CACHE_DURATION);
|
|
914
|
+
writer.writeVarInt(params.max_cache_duration);
|
|
915
|
+
}
|
|
916
|
+
if (params.expires !== void 0) {
|
|
917
|
+
writer.writeVarInt(PARAM_EXPIRES);
|
|
918
|
+
writer.writeVarInt(params.expires);
|
|
919
|
+
}
|
|
920
|
+
if (params.largest_object !== void 0) {
|
|
921
|
+
writer.writeVarInt(PARAM_LARGEST_OBJECT);
|
|
922
|
+
const tmpW = new BufferWriter(16);
|
|
923
|
+
tmpW.writeVarInt(params.largest_object.group);
|
|
924
|
+
tmpW.writeVarInt(params.largest_object.object);
|
|
925
|
+
const raw = tmpW.finish();
|
|
926
|
+
writer.writeVarInt(raw.byteLength);
|
|
927
|
+
writer.writeBytes(raw);
|
|
928
|
+
}
|
|
929
|
+
if (params.publisher_priority !== void 0) {
|
|
930
|
+
writer.writeVarInt(PARAM_PUBLISHER_PRIORITY);
|
|
931
|
+
writer.writeVarInt(params.publisher_priority);
|
|
932
|
+
}
|
|
933
|
+
if (params.forward !== void 0) {
|
|
934
|
+
writer.writeVarInt(PARAM_FORWARD);
|
|
935
|
+
writer.writeVarInt(params.forward);
|
|
936
|
+
}
|
|
937
|
+
if (params.subscriber_priority !== void 0) {
|
|
938
|
+
writer.writeVarInt(PARAM_SUBSCRIBER_PRIORITY);
|
|
939
|
+
writer.writeVarInt(params.subscriber_priority);
|
|
940
|
+
}
|
|
941
|
+
if (params.subscription_filter !== void 0) {
|
|
942
|
+
writer.writeVarInt(PARAM_SUBSCRIPTION_FILTER);
|
|
943
|
+
const tmpW = new BufferWriter(32);
|
|
944
|
+
const f = params.subscription_filter;
|
|
945
|
+
tmpW.writeVarInt(f.filter_type);
|
|
946
|
+
if (f.filter_type === 3n || f.filter_type === 4n) {
|
|
947
|
+
tmpW.writeVarInt(f.start_group);
|
|
948
|
+
tmpW.writeVarInt(f.start_object);
|
|
949
|
+
}
|
|
950
|
+
if (f.filter_type === 4n) {
|
|
951
|
+
tmpW.writeVarInt(f.end_group);
|
|
952
|
+
}
|
|
953
|
+
const raw = tmpW.finish();
|
|
954
|
+
writer.writeVarInt(raw.byteLength);
|
|
955
|
+
writer.writeBytes(raw);
|
|
956
|
+
}
|
|
957
|
+
if (params.group_order !== void 0) {
|
|
958
|
+
writer.writeVarInt(PARAM_GROUP_ORDER);
|
|
959
|
+
writer.writeVarInt(params.group_order);
|
|
960
|
+
}
|
|
961
|
+
if (params.dynamic_groups !== void 0) {
|
|
962
|
+
writer.writeVarInt(PARAM_DYNAMIC_GROUPS);
|
|
963
|
+
writer.writeVarInt(params.dynamic_groups);
|
|
964
|
+
}
|
|
965
|
+
if (params.new_group_request !== void 0) {
|
|
966
|
+
writer.writeVarInt(PARAM_NEW_GROUP_REQUEST);
|
|
967
|
+
writer.writeVarInt(params.new_group_request);
|
|
968
|
+
}
|
|
969
|
+
if (params.unknown) {
|
|
970
|
+
for (const u of params.unknown) {
|
|
971
|
+
const id = BigInt(u.id);
|
|
972
|
+
writer.writeVarInt(id);
|
|
973
|
+
if (id % 2n === 0n) {
|
|
974
|
+
const raw = hexToBytes(u.raw_hex);
|
|
975
|
+
const tmpReader = new BufferReader(raw);
|
|
976
|
+
const value = tmpReader.readVarInt();
|
|
977
|
+
writer.writeVarInt(value);
|
|
978
|
+
} else {
|
|
979
|
+
const raw = hexToBytes(u.raw_hex);
|
|
980
|
+
writer.writeVarInt(raw.byteLength);
|
|
981
|
+
writer.writeBytes(raw);
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
function decodeParams(reader) {
|
|
987
|
+
const count = Number(reader.readVarInt());
|
|
988
|
+
const result = {};
|
|
989
|
+
const unknown = [];
|
|
990
|
+
for (let i = 0; i < count; i++) {
|
|
991
|
+
const paramType = reader.readVarInt();
|
|
992
|
+
if (paramType === PARAM_DELIVERY_TIMEOUT) {
|
|
993
|
+
result.delivery_timeout = reader.readVarInt();
|
|
994
|
+
} else if (paramType === PARAM_AUTHORIZATION_TOKEN) {
|
|
995
|
+
const length = Number(reader.readVarInt());
|
|
996
|
+
const tokenBytes = reader.readBytes(length);
|
|
997
|
+
result.authorization_token = decodeAuthorizationToken(new BufferReader(tokenBytes));
|
|
998
|
+
} else if (paramType === PARAM_MAX_CACHE_DURATION) {
|
|
999
|
+
result.max_cache_duration = reader.readVarInt();
|
|
1000
|
+
} else if (paramType === PARAM_EXPIRES) {
|
|
1001
|
+
result.expires = reader.readVarInt();
|
|
1002
|
+
} else if (paramType === PARAM_PUBLISHER_PRIORITY) {
|
|
1003
|
+
result.publisher_priority = reader.readVarInt();
|
|
1004
|
+
} else if (paramType === PARAM_FORWARD) {
|
|
1005
|
+
result.forward = reader.readVarInt();
|
|
1006
|
+
} else if (paramType === PARAM_SUBSCRIBER_PRIORITY) {
|
|
1007
|
+
result.subscriber_priority = reader.readVarInt();
|
|
1008
|
+
} else if (paramType === PARAM_GROUP_ORDER) {
|
|
1009
|
+
result.group_order = reader.readVarInt();
|
|
1010
|
+
} else if (paramType === PARAM_DYNAMIC_GROUPS) {
|
|
1011
|
+
result.dynamic_groups = reader.readVarInt();
|
|
1012
|
+
} else if (paramType === PARAM_NEW_GROUP_REQUEST) {
|
|
1013
|
+
result.new_group_request = reader.readVarInt();
|
|
1014
|
+
} else if (paramType === PARAM_LARGEST_OBJECT) {
|
|
1015
|
+
const length = Number(reader.readVarInt());
|
|
1016
|
+
const startOff = reader.offset;
|
|
1017
|
+
const group = reader.readVarInt();
|
|
1018
|
+
const object = reader.readVarInt();
|
|
1019
|
+
const consumed = reader.offset - startOff;
|
|
1020
|
+
if (consumed < length) reader.readBytes(length - consumed);
|
|
1021
|
+
result.largest_object = { group, object };
|
|
1022
|
+
} else if (paramType === PARAM_SUBSCRIPTION_FILTER) {
|
|
1023
|
+
const length = Number(reader.readVarInt());
|
|
1024
|
+
const startOff = reader.offset;
|
|
1025
|
+
const filter_type = reader.readVarInt();
|
|
1026
|
+
const filter = { filter_type };
|
|
1027
|
+
if (filter_type === 3n || filter_type === 4n) {
|
|
1028
|
+
filter.start_group = reader.readVarInt();
|
|
1029
|
+
filter.start_object = reader.readVarInt();
|
|
1030
|
+
}
|
|
1031
|
+
if (filter_type === 4n) {
|
|
1032
|
+
filter.end_group = reader.readVarInt();
|
|
1033
|
+
}
|
|
1034
|
+
const consumed = reader.offset - startOff;
|
|
1035
|
+
if (consumed < length) reader.readBytes(length - consumed);
|
|
1036
|
+
result.subscription_filter = filter;
|
|
1037
|
+
} else if (paramType % 2n === 0n) {
|
|
1038
|
+
const value = reader.readVarInt();
|
|
1039
|
+
const tmpWriter = new BufferWriter(16);
|
|
1040
|
+
tmpWriter.writeVarInt(value);
|
|
1041
|
+
const raw = tmpWriter.finish();
|
|
1042
|
+
unknown.push({
|
|
1043
|
+
id: `0x${paramType.toString(16)}`,
|
|
1044
|
+
length: raw.byteLength,
|
|
1045
|
+
raw_hex: bytesToHex(raw)
|
|
1046
|
+
});
|
|
1047
|
+
} else {
|
|
1048
|
+
const length = Number(reader.readVarInt());
|
|
1049
|
+
const bytes = reader.readBytes(length);
|
|
1050
|
+
unknown.push({
|
|
1051
|
+
id: `0x${paramType.toString(16)}`,
|
|
1052
|
+
length,
|
|
1053
|
+
raw_hex: bytesToHex(bytes)
|
|
1054
|
+
});
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
if (unknown.length > 0) {
|
|
1058
|
+
result.unknown = unknown;
|
|
1059
|
+
}
|
|
1060
|
+
return result;
|
|
1061
|
+
}
|
|
1062
|
+
function encodeClientSetupPayload(msg, w) {
|
|
1063
|
+
encodeSetupParams(msg.parameters, w);
|
|
1064
|
+
}
|
|
1065
|
+
function encodeServerSetupPayload(msg, w) {
|
|
1066
|
+
encodeSetupParams(msg.parameters, w);
|
|
1067
|
+
}
|
|
1068
|
+
function encodeSubscribePayload(msg, w) {
|
|
1069
|
+
w.writeVarInt(msg.request_id);
|
|
1070
|
+
w.writeTuple(msg.track_namespace);
|
|
1071
|
+
w.writeString(msg.track_name);
|
|
1072
|
+
encodeParams(msg.parameters, w);
|
|
1073
|
+
}
|
|
1074
|
+
function encodeSubscribeOkPayload(msg, w) {
|
|
1075
|
+
w.writeVarInt(msg.request_id);
|
|
1076
|
+
w.writeVarInt(msg.track_alias);
|
|
1077
|
+
encodeParams(msg.parameters, w);
|
|
1078
|
+
}
|
|
1079
|
+
function encodeSubscribeUpdatePayload(msg, w) {
|
|
1080
|
+
w.writeVarInt(msg.request_id);
|
|
1081
|
+
w.writeVarInt(msg.subscription_request_id);
|
|
1082
|
+
encodeParams(msg.parameters, w);
|
|
1083
|
+
}
|
|
1084
|
+
function encodeUnsubscribePayload(msg, w) {
|
|
1085
|
+
w.writeVarInt(msg.request_id);
|
|
1086
|
+
}
|
|
1087
|
+
function encodePublishPayload(msg, w) {
|
|
1088
|
+
w.writeVarInt(msg.request_id);
|
|
1089
|
+
w.writeTuple(msg.track_namespace);
|
|
332
1090
|
w.writeString(msg.track_name);
|
|
333
1091
|
w.writeVarInt(msg.track_alias);
|
|
334
1092
|
encodeParams(msg.parameters, w);
|
|
@@ -428,7 +1186,13 @@ function decodeSubscribePayload(r) {
|
|
|
428
1186
|
const track_namespace = r.readTuple();
|
|
429
1187
|
const track_name = r.readString();
|
|
430
1188
|
const parameters = decodeParams(r);
|
|
431
|
-
return {
|
|
1189
|
+
return {
|
|
1190
|
+
type: "subscribe",
|
|
1191
|
+
request_id,
|
|
1192
|
+
track_namespace,
|
|
1193
|
+
track_name,
|
|
1194
|
+
parameters
|
|
1195
|
+
};
|
|
432
1196
|
}
|
|
433
1197
|
function decodeSubscribeOkPayload(r) {
|
|
434
1198
|
const request_id = r.readVarInt();
|
|
@@ -440,7 +1204,12 @@ function decodeSubscribeUpdatePayload(r) {
|
|
|
440
1204
|
const request_id = r.readVarInt();
|
|
441
1205
|
const subscription_request_id = r.readVarInt();
|
|
442
1206
|
const parameters = decodeParams(r);
|
|
443
|
-
return {
|
|
1207
|
+
return {
|
|
1208
|
+
type: "subscribe_update",
|
|
1209
|
+
request_id,
|
|
1210
|
+
subscription_request_id,
|
|
1211
|
+
parameters
|
|
1212
|
+
};
|
|
444
1213
|
}
|
|
445
1214
|
function decodeUnsubscribePayload(r) {
|
|
446
1215
|
const request_id = r.readVarInt();
|
|
@@ -452,7 +1221,14 @@ function decodePublishPayload(r) {
|
|
|
452
1221
|
const track_name = r.readString();
|
|
453
1222
|
const track_alias = r.readVarInt();
|
|
454
1223
|
const parameters = decodeParams(r);
|
|
455
|
-
return {
|
|
1224
|
+
return {
|
|
1225
|
+
type: "publish",
|
|
1226
|
+
request_id,
|
|
1227
|
+
track_namespace,
|
|
1228
|
+
track_name,
|
|
1229
|
+
track_alias,
|
|
1230
|
+
parameters
|
|
1231
|
+
};
|
|
456
1232
|
}
|
|
457
1233
|
function decodePublishOkPayload(r) {
|
|
458
1234
|
const request_id = r.readVarInt();
|
|
@@ -464,7 +1240,13 @@ function decodePublishDonePayload(r) {
|
|
|
464
1240
|
const status_code = r.readVarInt();
|
|
465
1241
|
const stream_count = r.readVarInt();
|
|
466
1242
|
const reason_phrase = r.readString();
|
|
467
|
-
return {
|
|
1243
|
+
return {
|
|
1244
|
+
type: "publish_done",
|
|
1245
|
+
request_id,
|
|
1246
|
+
status_code,
|
|
1247
|
+
stream_count,
|
|
1248
|
+
reason_phrase
|
|
1249
|
+
};
|
|
468
1250
|
}
|
|
469
1251
|
function decodePublishNamespacePayload(r) {
|
|
470
1252
|
const request_id = r.readVarInt();
|
|
@@ -480,13 +1262,23 @@ function decodePublishNamespaceCancelPayload(r) {
|
|
|
480
1262
|
const track_namespace = r.readTuple();
|
|
481
1263
|
const error_code = r.readVarInt();
|
|
482
1264
|
const reason_phrase = r.readString();
|
|
483
|
-
return {
|
|
1265
|
+
return {
|
|
1266
|
+
type: "publish_namespace_cancel",
|
|
1267
|
+
track_namespace,
|
|
1268
|
+
error_code,
|
|
1269
|
+
reason_phrase
|
|
1270
|
+
};
|
|
484
1271
|
}
|
|
485
1272
|
function decodeSubscribeNamespacePayload(r) {
|
|
486
1273
|
const request_id = r.readVarInt();
|
|
487
1274
|
const namespace_prefix = r.readTuple();
|
|
488
1275
|
const parameters = decodeParams(r);
|
|
489
|
-
return {
|
|
1276
|
+
return {
|
|
1277
|
+
type: "subscribe_namespace",
|
|
1278
|
+
request_id,
|
|
1279
|
+
namespace_prefix,
|
|
1280
|
+
parameters
|
|
1281
|
+
};
|
|
490
1282
|
}
|
|
491
1283
|
function decodeUnsubscribeNamespacePayload(r) {
|
|
492
1284
|
const request_id = r.readVarInt();
|
|
@@ -508,7 +1300,14 @@ function decodeFetchPayload(r) {
|
|
|
508
1300
|
const start_object = r.readVarInt();
|
|
509
1301
|
const end_group = r.readVarInt();
|
|
510
1302
|
const end_object = r.readVarInt();
|
|
511
|
-
standalone = {
|
|
1303
|
+
standalone = {
|
|
1304
|
+
track_namespace,
|
|
1305
|
+
track_name,
|
|
1306
|
+
start_group,
|
|
1307
|
+
start_object,
|
|
1308
|
+
end_group,
|
|
1309
|
+
end_object
|
|
1310
|
+
};
|
|
512
1311
|
} else {
|
|
513
1312
|
const joining_request_id = r.readVarInt();
|
|
514
1313
|
const joining_start = r.readVarInt();
|
|
@@ -530,7 +1329,14 @@ function decodeFetchOkPayload(r) {
|
|
|
530
1329
|
const end_group = r.readVarInt();
|
|
531
1330
|
const end_object = r.readVarInt();
|
|
532
1331
|
const parameters = decodeParams(r);
|
|
533
|
-
return {
|
|
1332
|
+
return {
|
|
1333
|
+
type: "fetch_ok",
|
|
1334
|
+
request_id,
|
|
1335
|
+
end_of_track,
|
|
1336
|
+
end_group,
|
|
1337
|
+
end_object,
|
|
1338
|
+
parameters
|
|
1339
|
+
};
|
|
534
1340
|
}
|
|
535
1341
|
function decodeFetchCancelPayload(r) {
|
|
536
1342
|
const request_id = r.readVarInt();
|
|
@@ -541,7 +1347,13 @@ function decodeTrackStatusPayload(r) {
|
|
|
541
1347
|
const track_namespace = r.readTuple();
|
|
542
1348
|
const track_name = r.readString();
|
|
543
1349
|
const parameters = decodeParams(r);
|
|
544
|
-
return {
|
|
1350
|
+
return {
|
|
1351
|
+
type: "track_status",
|
|
1352
|
+
request_id,
|
|
1353
|
+
track_namespace,
|
|
1354
|
+
track_name,
|
|
1355
|
+
parameters
|
|
1356
|
+
};
|
|
545
1357
|
}
|
|
546
1358
|
function decodeRequestOkPayload(r) {
|
|
547
1359
|
const request_id = r.readVarInt();
|
|
@@ -596,425 +1408,117 @@ function encodeMessage(message) {
|
|
|
596
1408
|
if (typeId === void 0) {
|
|
597
1409
|
throw new Error(`Unknown message type: ${message.type}`);
|
|
598
1410
|
}
|
|
599
|
-
const payloadWriter = new BufferWriter();
|
|
600
|
-
encodePayload(message, payloadWriter);
|
|
601
|
-
const payload = payloadWriter.
|
|
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
|
-
}
|
|
665
|
-
}
|
|
666
|
-
function decodeMessage(bytes) {
|
|
667
|
-
try {
|
|
668
|
-
const reader = new BufferReader(bytes);
|
|
669
|
-
const typeId = reader.readVarInt();
|
|
670
|
-
const lenHi = reader.readUint8();
|
|
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
|
-
}
|
|
694
|
-
}
|
|
695
|
-
var FETCH_STREAM_TYPE = 0x05n;
|
|
696
|
-
function encodeSubgroupStream(stream) {
|
|
697
|
-
const w = new BufferWriter();
|
|
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();
|
|
723
|
-
}
|
|
724
|
-
function encodeDatagram(dg) {
|
|
725
|
-
const w = new BufferWriter();
|
|
726
|
-
const dgType = dg.datagramType;
|
|
727
|
-
w.writeVarInt(BigInt(dgType));
|
|
728
|
-
w.writeVarInt(dg.trackAlias);
|
|
729
|
-
w.writeVarInt(dg.groupId);
|
|
730
|
-
const objectIdAbsent = (dgType & 4) !== 0;
|
|
731
|
-
const isStatus = (dgType & 32) !== 0;
|
|
732
|
-
if (!objectIdAbsent) {
|
|
733
|
-
w.writeVarInt(dg.objectId);
|
|
734
|
-
}
|
|
735
|
-
w.writeUint8(dg.publisherPriority);
|
|
736
|
-
if (isStatus) {
|
|
737
|
-
w.writeVarInt(dg.objectStatus ?? 0n);
|
|
738
|
-
} else {
|
|
739
|
-
w.writeBytes(dg.payload);
|
|
740
|
-
}
|
|
741
|
-
return w.finish();
|
|
742
|
-
}
|
|
743
|
-
function encodeFetchStream(stream) {
|
|
744
|
-
const w = new BufferWriter();
|
|
745
|
-
w.writeVarInt(FETCH_STREAM_TYPE);
|
|
746
|
-
w.writeVarInt(stream.requestId);
|
|
747
|
-
for (const obj of stream.objects) {
|
|
748
|
-
w.writeUint8(obj.serializationFlags);
|
|
749
|
-
const flags = obj.serializationFlags;
|
|
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();
|
|
763
|
-
}
|
|
764
|
-
function decodeSubgroupStream(bytes) {
|
|
765
|
-
try {
|
|
766
|
-
const r = new BufferReader(bytes);
|
|
767
|
-
const streamType = Number(r.readVarInt());
|
|
768
|
-
if (!(streamType >= 16 && streamType <= 29 || streamType >= 48 && streamType <= 61)) {
|
|
769
|
-
return {
|
|
770
|
-
ok: false,
|
|
771
|
-
error: new DecodeError(
|
|
772
|
-
"CONSTRAINT_VIOLATION",
|
|
773
|
-
`Expected subgroup stream type 0x10-0x1D or 0x30-0x3D, got 0x${streamType.toString(16)}`,
|
|
774
|
-
0
|
|
775
|
-
)
|
|
776
|
-
};
|
|
777
|
-
}
|
|
778
|
-
const hasSubgroupField = (streamType & 4) !== 0;
|
|
779
|
-
const subgroupIsFirstObjId = (streamType & 2) !== 0 && !hasSubgroupField;
|
|
780
|
-
const hasPriority = streamType < 48;
|
|
781
|
-
const trackAlias = r.readVarInt();
|
|
782
|
-
const groupId = r.readVarInt();
|
|
783
|
-
let subgroupId = 0n;
|
|
784
|
-
if (hasSubgroupField) {
|
|
785
|
-
subgroupId = r.readVarInt();
|
|
786
|
-
}
|
|
787
|
-
let publisherPriority = 128;
|
|
788
|
-
if (hasPriority) {
|
|
789
|
-
publisherPriority = r.readUint8();
|
|
790
|
-
}
|
|
791
|
-
const objects = [];
|
|
792
|
-
let prevObjectId = -1n;
|
|
793
|
-
let firstObject = true;
|
|
794
|
-
while (r.remaining > 0) {
|
|
795
|
-
const delta = r.readVarInt();
|
|
796
|
-
let objectId;
|
|
797
|
-
if (firstObject) {
|
|
798
|
-
objectId = delta;
|
|
799
|
-
if (subgroupIsFirstObjId && firstObject) {
|
|
800
|
-
subgroupId = objectId;
|
|
801
|
-
}
|
|
802
|
-
firstObject = false;
|
|
803
|
-
} else {
|
|
804
|
-
objectId = prevObjectId + 1n + delta;
|
|
805
|
-
}
|
|
806
|
-
const payloadLength = Number(r.readVarInt());
|
|
807
|
-
let payload;
|
|
808
|
-
let status;
|
|
809
|
-
if (payloadLength === 0) {
|
|
810
|
-
status = r.readVarInt();
|
|
811
|
-
payload = new Uint8Array(0);
|
|
812
|
-
} else {
|
|
813
|
-
payload = r.readBytes(payloadLength);
|
|
814
|
-
}
|
|
815
|
-
const obj = { type: "object", objectId, payloadLength, payload };
|
|
816
|
-
if (status !== void 0) obj.status = status;
|
|
817
|
-
objects.push(obj);
|
|
818
|
-
prevObjectId = objectId;
|
|
819
|
-
}
|
|
820
|
-
return {
|
|
821
|
-
ok: true,
|
|
822
|
-
value: {
|
|
823
|
-
type: "subgroup",
|
|
824
|
-
headerType: streamType,
|
|
825
|
-
trackAlias,
|
|
826
|
-
groupId,
|
|
827
|
-
subgroupId,
|
|
828
|
-
publisherPriority,
|
|
829
|
-
objects
|
|
830
|
-
},
|
|
831
|
-
bytesRead: r.offset
|
|
832
|
-
};
|
|
833
|
-
} catch (e) {
|
|
834
|
-
if (e instanceof DecodeError) return { ok: false, error: e };
|
|
835
|
-
throw e;
|
|
1411
|
+
const payloadWriter = new BufferWriter();
|
|
1412
|
+
encodePayload(message, payloadWriter);
|
|
1413
|
+
const payload = payloadWriter.finishView();
|
|
1414
|
+
if (payload.byteLength > 65535) {
|
|
1415
|
+
throw new Error(`Payload too large for 16-bit length: ${payload.byteLength}`);
|
|
836
1416
|
}
|
|
1417
|
+
const writer = new BufferWriter(payload.byteLength + 16);
|
|
1418
|
+
writer.writeVarInt(typeId);
|
|
1419
|
+
writer.writeUint8(payload.byteLength >> 8 & 255);
|
|
1420
|
+
writer.writeUint8(payload.byteLength & 255);
|
|
1421
|
+
writer.writeBytes(payload);
|
|
1422
|
+
return writer.finish();
|
|
837
1423
|
}
|
|
838
|
-
function
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
1424
|
+
function encodePayload(msg, w) {
|
|
1425
|
+
switch (msg.type) {
|
|
1426
|
+
case "client_setup":
|
|
1427
|
+
return encodeClientSetupPayload(msg, w);
|
|
1428
|
+
case "server_setup":
|
|
1429
|
+
return encodeServerSetupPayload(msg, w);
|
|
1430
|
+
case "subscribe":
|
|
1431
|
+
return encodeSubscribePayload(msg, w);
|
|
1432
|
+
case "subscribe_ok":
|
|
1433
|
+
return encodeSubscribeOkPayload(msg, w);
|
|
1434
|
+
case "subscribe_update":
|
|
1435
|
+
return encodeSubscribeUpdatePayload(msg, w);
|
|
1436
|
+
case "unsubscribe":
|
|
1437
|
+
return encodeUnsubscribePayload(msg, w);
|
|
1438
|
+
case "publish":
|
|
1439
|
+
return encodePublishPayload(msg, w);
|
|
1440
|
+
case "publish_ok":
|
|
1441
|
+
return encodePublishOkPayload(msg, w);
|
|
1442
|
+
case "publish_done":
|
|
1443
|
+
return encodePublishDonePayload(msg, w);
|
|
1444
|
+
case "publish_namespace":
|
|
1445
|
+
return encodePublishNamespacePayload(msg, w);
|
|
1446
|
+
case "publish_namespace_done":
|
|
1447
|
+
return encodePublishNamespaceDonePayload(msg, w);
|
|
1448
|
+
case "publish_namespace_cancel":
|
|
1449
|
+
return encodePublishNamespaceCancelPayload(msg, w);
|
|
1450
|
+
case "subscribe_namespace":
|
|
1451
|
+
return encodeSubscribeNamespacePayload(msg, w);
|
|
1452
|
+
case "unsubscribe_namespace":
|
|
1453
|
+
return encodeUnsubscribeNamespacePayload(msg, w);
|
|
1454
|
+
case "fetch":
|
|
1455
|
+
return encodeFetchPayload(msg, w);
|
|
1456
|
+
case "fetch_ok":
|
|
1457
|
+
return encodeFetchOkPayload(msg, w);
|
|
1458
|
+
case "fetch_cancel":
|
|
1459
|
+
return encodeFetchCancelPayload(msg, w);
|
|
1460
|
+
case "track_status":
|
|
1461
|
+
return encodeTrackStatusPayload(msg, w);
|
|
1462
|
+
case "request_ok":
|
|
1463
|
+
return encodeRequestOkPayload(msg, w);
|
|
1464
|
+
case "request_error":
|
|
1465
|
+
return encodeRequestErrorPayload(msg, w);
|
|
1466
|
+
case "goaway":
|
|
1467
|
+
return encodeGoAwayPayload(msg, w);
|
|
1468
|
+
case "max_request_id":
|
|
1469
|
+
return encodeMaxRequestIdPayload(msg, w);
|
|
1470
|
+
case "requests_blocked":
|
|
1471
|
+
return encodeRequestsBlockedPayload(msg, w);
|
|
1472
|
+
default: {
|
|
1473
|
+
const _exhaustive = msg;
|
|
1474
|
+
throw new Error(`Unhandled message type: ${_exhaustive.type}`);
|
|
859
1475
|
}
|
|
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
1476
|
}
|
|
879
1477
|
}
|
|
880
|
-
function
|
|
1478
|
+
function decodeMessage(bytes) {
|
|
881
1479
|
try {
|
|
882
|
-
const
|
|
883
|
-
const
|
|
884
|
-
|
|
1480
|
+
const reader = new BufferReader(bytes);
|
|
1481
|
+
const typeId = reader.readVarInt();
|
|
1482
|
+
const lenHi = reader.readUint8();
|
|
1483
|
+
const lenLo = reader.readUint8();
|
|
1484
|
+
const payloadLength = lenHi << 8 | lenLo;
|
|
1485
|
+
const payloadBytes = reader.readBytes(payloadLength);
|
|
1486
|
+
const payloadReader = new BufferReader(payloadBytes);
|
|
1487
|
+
const decoder = payloadDecoders.get(typeId);
|
|
1488
|
+
if (!decoder) {
|
|
885
1489
|
return {
|
|
886
|
-
ok: false,
|
|
887
|
-
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
|
|
1490
|
+
ok: false,
|
|
1491
|
+
error: new DecodeError(
|
|
1492
|
+
"UNKNOWN_MESSAGE_TYPE",
|
|
1493
|
+
`Unknown message type ID: 0x${typeId.toString(16)}`,
|
|
1494
|
+
0
|
|
1495
|
+
)
|
|
976
1496
|
};
|
|
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
1497
|
}
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
value: { type: "fetch", requestId, objects },
|
|
987
|
-
bytesRead: r.offset
|
|
988
|
-
};
|
|
1498
|
+
const message = decoder(payloadReader);
|
|
1499
|
+
return { ok: true, value: message, bytesRead: reader.offset };
|
|
989
1500
|
} 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}`);
|
|
1501
|
+
if (e instanceof DecodeError) {
|
|
1502
|
+
return { ok: false, error: e };
|
|
1005
1503
|
}
|
|
1504
|
+
throw e;
|
|
1006
1505
|
}
|
|
1007
1506
|
}
|
|
1008
1507
|
function createStreamDecoder() {
|
|
1009
1508
|
let buffer = new Uint8Array(0);
|
|
1509
|
+
let offset = 0;
|
|
1010
1510
|
return new TransformStream({
|
|
1011
1511
|
transform(chunk, controller) {
|
|
1512
|
+
if (offset > 0) {
|
|
1513
|
+
buffer = buffer.subarray(offset);
|
|
1514
|
+
offset = 0;
|
|
1515
|
+
}
|
|
1012
1516
|
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
1013
1517
|
newBuffer.set(buffer, 0);
|
|
1014
1518
|
newBuffer.set(chunk, buffer.length);
|
|
1015
1519
|
buffer = newBuffer;
|
|
1016
|
-
while (buffer.length
|
|
1017
|
-
const result = decodeMessage(buffer);
|
|
1520
|
+
while (offset < buffer.length) {
|
|
1521
|
+
const result = decodeMessage(buffer.subarray(offset));
|
|
1018
1522
|
if (!result.ok) {
|
|
1019
1523
|
if (result.error.code === "UNEXPECTED_END") {
|
|
1020
1524
|
break;
|
|
@@ -1023,11 +1527,11 @@ function createStreamDecoder() {
|
|
|
1023
1527
|
return;
|
|
1024
1528
|
}
|
|
1025
1529
|
controller.enqueue(result.value);
|
|
1026
|
-
|
|
1530
|
+
offset += result.bytesRead;
|
|
1027
1531
|
}
|
|
1028
1532
|
},
|
|
1029
1533
|
flush(controller) {
|
|
1030
|
-
if (buffer.length
|
|
1534
|
+
if (offset < buffer.length) {
|
|
1031
1535
|
controller.error(
|
|
1032
1536
|
new DecodeError("UNEXPECTED_END", "Stream ended with incomplete message data", 0)
|
|
1033
1537
|
);
|
|
@@ -1035,248 +1539,9 @@ function createStreamDecoder() {
|
|
|
1035
1539
|
}
|
|
1036
1540
|
});
|
|
1037
1541
|
}
|
|
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
1542
|
function createDraft15Codec() {
|
|
1278
1543
|
return {
|
|
1279
|
-
draft: "
|
|
1544
|
+
draft: "15",
|
|
1280
1545
|
encodeMessage,
|
|
1281
1546
|
decodeMessage,
|
|
1282
1547
|
encodeSubgroupStream,
|
|
@@ -1324,8 +1589,6 @@ export {
|
|
|
1324
1589
|
SETUP_PARAM_MOQT_IMPLEMENTATION,
|
|
1325
1590
|
MESSAGE_TYPE_MAP,
|
|
1326
1591
|
MESSAGE_ID_MAP,
|
|
1327
|
-
encodeMessage,
|
|
1328
|
-
decodeMessage,
|
|
1329
1592
|
encodeSubgroupStream,
|
|
1330
1593
|
encodeDatagram,
|
|
1331
1594
|
encodeFetchStream,
|
|
@@ -1333,9 +1596,11 @@ export {
|
|
|
1333
1596
|
decodeDatagram,
|
|
1334
1597
|
decodeFetchStream,
|
|
1335
1598
|
decodeDataStream,
|
|
1336
|
-
createStreamDecoder,
|
|
1337
1599
|
createSubgroupStreamDecoder,
|
|
1338
1600
|
createFetchStreamDecoder,
|
|
1339
1601
|
createDataStreamDecoder,
|
|
1602
|
+
encodeMessage,
|
|
1603
|
+
decodeMessage,
|
|
1604
|
+
createStreamDecoder,
|
|
1340
1605
|
createDraft15Codec
|
|
1341
1606
|
};
|