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