@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/draft17/messages.ts
|
|
8
10
|
var MSG_REQUEST_UPDATE = 0x02n;
|
|
@@ -24,6 +26,7 @@ var MSG_PUBLISH = 0x1dn;
|
|
|
24
26
|
var MSG_PUBLISH_OK = 0x1en;
|
|
25
27
|
var MSG_SETUP = 0x2f00n;
|
|
26
28
|
var SETUP_OPT_PATH = 0x01n;
|
|
29
|
+
var SETUP_OPT_AUTHORIZATION_TOKEN = 0x03n;
|
|
27
30
|
var SETUP_OPT_MAX_AUTH_TOKEN_CACHE_SIZE = 0x04n;
|
|
28
31
|
var SETUP_OPT_AUTHORITY = 0x05n;
|
|
29
32
|
var SETUP_OPT_MOQT_IMPLEMENTATION = 0x07n;
|
|
@@ -51,33 +54,874 @@ var MESSAGE_ID_MAP = new Map(
|
|
|
51
54
|
[...MESSAGE_TYPE_MAP.entries()].map(([id, name]) => [name, id])
|
|
52
55
|
);
|
|
53
56
|
|
|
54
|
-
// src/drafts/draft17/
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
// src/drafts/draft17/data-streams.ts
|
|
58
|
+
var FETCH_STREAM_TYPE = 0x05n;
|
|
59
|
+
var OBJPROP_PRIOR_GROUP_ID_GAP = 0x3cn;
|
|
60
|
+
var OBJPROP_PRIOR_OBJECT_ID_GAP = 0x3en;
|
|
61
|
+
var KNOWN_OBJ_PROPS = /* @__PURE__ */ new Map([
|
|
62
|
+
[OBJPROP_PRIOR_OBJECT_ID_GAP, "prior_object_id_gap"],
|
|
63
|
+
[OBJPROP_PRIOR_GROUP_ID_GAP, "prior_group_id_gap"]
|
|
64
|
+
]);
|
|
65
|
+
function decodeObjectProperties(r, propsLength) {
|
|
66
|
+
const endOff = r.offset + propsLength;
|
|
67
|
+
const props = {};
|
|
68
|
+
let prevType = 0n;
|
|
69
|
+
while (r.offset < endOff) {
|
|
70
|
+
const delta = r.readVarInt();
|
|
71
|
+
const propType = prevType + delta;
|
|
72
|
+
prevType = propType;
|
|
73
|
+
if (propType % 2n === 0n) {
|
|
74
|
+
const value = r.readVarInt();
|
|
75
|
+
const name = KNOWN_OBJ_PROPS.get(propType) ?? `0x${propType.toString(16)}`;
|
|
76
|
+
props[name] = value;
|
|
77
|
+
} else {
|
|
78
|
+
const length = Number(r.readVarInt());
|
|
79
|
+
r.readBytes(length);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return props;
|
|
83
|
+
}
|
|
84
|
+
function encodeObjectProperties(props, w) {
|
|
85
|
+
const reverseMap = /* @__PURE__ */ new Map();
|
|
86
|
+
for (const [id, name] of KNOWN_OBJ_PROPS) {
|
|
87
|
+
reverseMap.set(name, id);
|
|
88
|
+
}
|
|
89
|
+
const entries = [];
|
|
90
|
+
for (const [name, value] of Object.entries(props)) {
|
|
91
|
+
const typeId = reverseMap.get(name);
|
|
92
|
+
if (typeId !== void 0) {
|
|
93
|
+
entries.push({ type: typeId, value });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
entries.sort((a, b) => a.type < b.type ? -1 : a.type > b.type ? 1 : 0);
|
|
97
|
+
let prevType = 0n;
|
|
98
|
+
for (const entry of entries) {
|
|
99
|
+
w.writeVarInt(entry.type - prevType);
|
|
100
|
+
w.writeVarInt(entry.value);
|
|
101
|
+
prevType = entry.type;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function encodeSubgroupStream(stream) {
|
|
105
|
+
const w = new BufferWriter();
|
|
106
|
+
const streamType = stream.headerType;
|
|
107
|
+
w.writeVarInt(BigInt(streamType));
|
|
108
|
+
const propertiesPresent = (streamType & 1) !== 0;
|
|
109
|
+
const hasSubgroupField = (streamType & 4) !== 0;
|
|
110
|
+
const hasPriority = streamType < 48;
|
|
111
|
+
w.writeVarInt(stream.trackAlias);
|
|
112
|
+
w.writeVarInt(stream.groupId);
|
|
113
|
+
if (hasSubgroupField) {
|
|
114
|
+
w.writeVarInt(stream.subgroupId);
|
|
59
115
|
}
|
|
60
|
-
|
|
116
|
+
if (hasPriority) {
|
|
117
|
+
w.writeUint8(stream.publisherPriority);
|
|
118
|
+
}
|
|
119
|
+
let prevObjectId = -1n;
|
|
120
|
+
for (const obj of stream.objects) {
|
|
121
|
+
const delta = prevObjectId < 0n ? obj.objectId : obj.objectId - prevObjectId - 1n;
|
|
122
|
+
w.writeVarInt(delta);
|
|
123
|
+
if (propertiesPresent) {
|
|
124
|
+
if (obj.objectProperties && Object.keys(obj.objectProperties).length > 0) {
|
|
125
|
+
const tmpW = new BufferWriter(32);
|
|
126
|
+
encodeObjectProperties(obj.objectProperties, tmpW);
|
|
127
|
+
const raw = tmpW.finish();
|
|
128
|
+
w.writeVarInt(BigInt(raw.byteLength));
|
|
129
|
+
w.writeBytes(raw);
|
|
130
|
+
} else {
|
|
131
|
+
w.writeVarInt(0n);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
w.writeVarInt(BigInt(obj.payloadLength));
|
|
135
|
+
if (obj.payloadLength === 0) {
|
|
136
|
+
w.writeVarInt(obj.status ?? 0n);
|
|
137
|
+
} else {
|
|
138
|
+
w.writeBytes(obj.payload);
|
|
139
|
+
}
|
|
140
|
+
prevObjectId = obj.objectId;
|
|
141
|
+
}
|
|
142
|
+
return w.finish();
|
|
143
|
+
}
|
|
144
|
+
function encodeDatagram(dg) {
|
|
145
|
+
const w = new BufferWriter();
|
|
146
|
+
const dgType = dg.datagramType;
|
|
147
|
+
w.writeVarInt(BigInt(dgType));
|
|
148
|
+
w.writeVarInt(dg.trackAlias);
|
|
149
|
+
w.writeVarInt(dg.groupId);
|
|
150
|
+
const objectIdAbsent = (dgType & 4) !== 0;
|
|
151
|
+
const isStatus = (dgType & 32) !== 0;
|
|
152
|
+
const defaultPriority = (dgType & 8) !== 0;
|
|
153
|
+
const propertiesPresent = (dgType & 1) !== 0;
|
|
154
|
+
if (!objectIdAbsent) {
|
|
155
|
+
w.writeVarInt(dg.objectId);
|
|
156
|
+
}
|
|
157
|
+
if (!defaultPriority) {
|
|
158
|
+
w.writeUint8(dg.publisherPriority);
|
|
159
|
+
}
|
|
160
|
+
if (propertiesPresent) {
|
|
161
|
+
if (dg.objectProperties && Object.keys(dg.objectProperties).length > 0) {
|
|
162
|
+
const tmpW = new BufferWriter(32);
|
|
163
|
+
encodeObjectProperties(dg.objectProperties, tmpW);
|
|
164
|
+
const raw = tmpW.finish();
|
|
165
|
+
w.writeVarInt(BigInt(raw.byteLength));
|
|
166
|
+
w.writeBytes(raw);
|
|
167
|
+
} else {
|
|
168
|
+
w.writeVarInt(0n);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (isStatus) {
|
|
172
|
+
w.writeVarInt(dg.objectStatus ?? 0n);
|
|
173
|
+
} else {
|
|
174
|
+
w.writeBytes(dg.payload);
|
|
175
|
+
}
|
|
176
|
+
return w.finish();
|
|
177
|
+
}
|
|
178
|
+
function encodeFetchStream(stream) {
|
|
179
|
+
const w = new BufferWriter();
|
|
180
|
+
w.writeVarInt(FETCH_STREAM_TYPE);
|
|
181
|
+
w.writeVarInt(stream.requestId);
|
|
182
|
+
for (const obj of stream.objects) {
|
|
183
|
+
w.writeVarInt(BigInt(obj.serializationFlags));
|
|
184
|
+
const flags = obj.serializationFlags;
|
|
185
|
+
if (flags >= 128) {
|
|
186
|
+
w.writeVarInt(obj.groupId);
|
|
187
|
+
w.writeVarInt(obj.objectId);
|
|
188
|
+
w.writeVarInt(BigInt(obj.payloadLength));
|
|
189
|
+
} else if (flags & 64) {
|
|
190
|
+
if (flags & 8) w.writeVarInt(obj.groupId);
|
|
191
|
+
if (flags & 4) w.writeVarInt(obj.objectId);
|
|
192
|
+
if (flags & 16) w.writeUint8(obj.publisherPriority);
|
|
193
|
+
if (flags & 32) {
|
|
194
|
+
if (obj.objectProperties && Object.keys(obj.objectProperties).length > 0) {
|
|
195
|
+
const tmpW = new BufferWriter(32);
|
|
196
|
+
encodeObjectProperties(obj.objectProperties, tmpW);
|
|
197
|
+
const raw = tmpW.finish();
|
|
198
|
+
w.writeVarInt(BigInt(raw.byteLength));
|
|
199
|
+
w.writeBytes(raw);
|
|
200
|
+
} else {
|
|
201
|
+
w.writeVarInt(0n);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
w.writeVarInt(BigInt(obj.payloadLength));
|
|
205
|
+
if (obj.payloadLength > 0) {
|
|
206
|
+
w.writeBytes(obj.payload);
|
|
207
|
+
}
|
|
208
|
+
} else {
|
|
209
|
+
if (flags & 8) w.writeVarInt(obj.groupId);
|
|
210
|
+
const subgroupEncoding = flags & 3;
|
|
211
|
+
if (subgroupEncoding === 3) w.writeVarInt(obj.subgroupId);
|
|
212
|
+
if (flags & 4) w.writeVarInt(obj.objectId);
|
|
213
|
+
if (flags & 16) w.writeUint8(obj.publisherPriority);
|
|
214
|
+
if (flags & 32) {
|
|
215
|
+
if (obj.objectProperties && Object.keys(obj.objectProperties).length > 0) {
|
|
216
|
+
const tmpW = new BufferWriter(32);
|
|
217
|
+
encodeObjectProperties(obj.objectProperties, tmpW);
|
|
218
|
+
const raw = tmpW.finish();
|
|
219
|
+
w.writeVarInt(BigInt(raw.byteLength));
|
|
220
|
+
w.writeBytes(raw);
|
|
221
|
+
} else {
|
|
222
|
+
w.writeVarInt(0n);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
w.writeVarInt(BigInt(obj.payloadLength));
|
|
226
|
+
if (obj.payloadLength > 0) {
|
|
227
|
+
w.writeBytes(obj.payload);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return w.finish();
|
|
232
|
+
}
|
|
233
|
+
function decodeSubgroupStream(bytes) {
|
|
234
|
+
try {
|
|
235
|
+
const r = new BufferReader(bytes);
|
|
236
|
+
const streamType = Number(r.readVarInt());
|
|
237
|
+
if (!(streamType >= 16 && streamType <= 29 || streamType >= 48 && streamType <= 61) || (streamType & 6) === 6) {
|
|
238
|
+
return {
|
|
239
|
+
ok: false,
|
|
240
|
+
error: new DecodeError(
|
|
241
|
+
"CONSTRAINT_VIOLATION",
|
|
242
|
+
`Expected subgroup stream type 0x10-0x15/0x18-0x1D/0x30-0x35/0x38-0x3D, got 0x${streamType.toString(16)}`,
|
|
243
|
+
0
|
|
244
|
+
)
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
const propertiesPresent = (streamType & 1) !== 0;
|
|
248
|
+
const hasSubgroupField = (streamType & 4) !== 0;
|
|
249
|
+
const subgroupIsFirstObjId = (streamType & 2) !== 0 && !hasSubgroupField;
|
|
250
|
+
const hasPriority = streamType < 48;
|
|
251
|
+
const endOfGroup = (streamType & 8) !== 0;
|
|
252
|
+
const trackAlias = r.readVarInt();
|
|
253
|
+
const groupId = r.readVarInt();
|
|
254
|
+
let subgroupId = 0n;
|
|
255
|
+
if (hasSubgroupField) {
|
|
256
|
+
subgroupId = r.readVarInt();
|
|
257
|
+
}
|
|
258
|
+
let publisherPriority = 128;
|
|
259
|
+
if (hasPriority) {
|
|
260
|
+
publisherPriority = r.readUint8();
|
|
261
|
+
}
|
|
262
|
+
const objects = [];
|
|
263
|
+
let prevObjectId = -1n;
|
|
264
|
+
let firstObject = true;
|
|
265
|
+
while (r.remaining > 0) {
|
|
266
|
+
const byteOffset = r.offset;
|
|
267
|
+
const delta = r.readVarInt();
|
|
268
|
+
let objectId;
|
|
269
|
+
if (firstObject) {
|
|
270
|
+
objectId = delta;
|
|
271
|
+
if (subgroupIsFirstObjId && firstObject) {
|
|
272
|
+
subgroupId = objectId;
|
|
273
|
+
}
|
|
274
|
+
firstObject = false;
|
|
275
|
+
} else {
|
|
276
|
+
objectId = prevObjectId + 1n + delta;
|
|
277
|
+
}
|
|
278
|
+
const extensionData = new Uint8Array(0);
|
|
279
|
+
let objectProperties;
|
|
280
|
+
if (propertiesPresent) {
|
|
281
|
+
const propsLen = Number(r.readVarInt());
|
|
282
|
+
if (propsLen > 0) {
|
|
283
|
+
objectProperties = decodeObjectProperties(r, propsLen);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
const payloadLength = Number(r.readVarInt());
|
|
287
|
+
let payload;
|
|
288
|
+
let status;
|
|
289
|
+
let payloadByteOffset;
|
|
290
|
+
if (payloadLength === 0) {
|
|
291
|
+
status = r.readVarInt();
|
|
292
|
+
payloadByteOffset = r.offset;
|
|
293
|
+
payload = new Uint8Array(0);
|
|
294
|
+
} else {
|
|
295
|
+
payloadByteOffset = r.offset;
|
|
296
|
+
payload = r.readBytesView(payloadLength);
|
|
297
|
+
}
|
|
298
|
+
const obj = {
|
|
299
|
+
type: "object",
|
|
300
|
+
byteOffset,
|
|
301
|
+
payloadByteOffset,
|
|
302
|
+
objectId,
|
|
303
|
+
payloadLength,
|
|
304
|
+
payload,
|
|
305
|
+
extensionData
|
|
306
|
+
};
|
|
307
|
+
if (status !== void 0) obj.status = status;
|
|
308
|
+
if (objectProperties !== void 0)
|
|
309
|
+
obj.objectProperties = objectProperties;
|
|
310
|
+
objects.push(obj);
|
|
311
|
+
prevObjectId = objectId;
|
|
312
|
+
}
|
|
313
|
+
const result = {
|
|
314
|
+
type: "subgroup",
|
|
315
|
+
headerType: streamType,
|
|
316
|
+
trackAlias,
|
|
317
|
+
groupId,
|
|
318
|
+
subgroupId,
|
|
319
|
+
publisherPriority,
|
|
320
|
+
objects
|
|
321
|
+
};
|
|
322
|
+
if (endOfGroup) result.endOfGroup = true;
|
|
323
|
+
return {
|
|
324
|
+
ok: true,
|
|
325
|
+
value: result,
|
|
326
|
+
bytesRead: r.offset
|
|
327
|
+
};
|
|
328
|
+
} catch (e) {
|
|
329
|
+
if (e instanceof DecodeError) return { ok: false, error: e };
|
|
330
|
+
throw e;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
function decodeDatagram(bytes) {
|
|
334
|
+
try {
|
|
335
|
+
const r = new BufferReader(bytes);
|
|
336
|
+
const dgType = Number(r.readVarInt());
|
|
337
|
+
const objectIdAbsent = (dgType & 4) !== 0;
|
|
338
|
+
const endOfGroup = (dgType & 2) !== 0;
|
|
339
|
+
const isStatus = (dgType & 32) !== 0;
|
|
340
|
+
const defaultPriority = (dgType & 8) !== 0;
|
|
341
|
+
const propertiesPresent = (dgType & 1) !== 0;
|
|
342
|
+
const trackAlias = r.readVarInt();
|
|
343
|
+
const groupId = r.readVarInt();
|
|
344
|
+
let objectId = 0n;
|
|
345
|
+
if (!objectIdAbsent) {
|
|
346
|
+
objectId = r.readVarInt();
|
|
347
|
+
}
|
|
348
|
+
let publisherPriority = 128;
|
|
349
|
+
if (!defaultPriority) {
|
|
350
|
+
publisherPriority = r.readUint8();
|
|
351
|
+
}
|
|
352
|
+
let objectProperties;
|
|
353
|
+
if (propertiesPresent) {
|
|
354
|
+
const propsLen = Number(r.readVarInt());
|
|
355
|
+
if (propsLen > 0) {
|
|
356
|
+
objectProperties = decodeObjectProperties(r, propsLen);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
let objectStatus;
|
|
360
|
+
let payload;
|
|
361
|
+
if (isStatus) {
|
|
362
|
+
objectStatus = r.readVarInt();
|
|
363
|
+
payload = new Uint8Array(0);
|
|
364
|
+
} else {
|
|
365
|
+
payload = r.readBytesView(r.remaining);
|
|
366
|
+
}
|
|
367
|
+
const payloadLength = payload.byteLength;
|
|
368
|
+
const result = {
|
|
369
|
+
type: "datagram",
|
|
370
|
+
datagramType: dgType,
|
|
371
|
+
trackAlias,
|
|
372
|
+
groupId,
|
|
373
|
+
objectId,
|
|
374
|
+
publisherPriority,
|
|
375
|
+
payloadLength,
|
|
376
|
+
payload
|
|
377
|
+
};
|
|
378
|
+
if (endOfGroup) result.endOfGroup = true;
|
|
379
|
+
if (objectStatus !== void 0)
|
|
380
|
+
result.objectStatus = objectStatus;
|
|
381
|
+
if (objectProperties !== void 0)
|
|
382
|
+
result.objectProperties = objectProperties;
|
|
383
|
+
return { ok: true, value: result, bytesRead: r.offset };
|
|
384
|
+
} catch (e) {
|
|
385
|
+
if (e instanceof DecodeError) return { ok: false, error: e };
|
|
386
|
+
throw e;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
function decodeFetchStream(bytes) {
|
|
390
|
+
try {
|
|
391
|
+
const r = new BufferReader(bytes);
|
|
392
|
+
const streamType = r.readVarInt();
|
|
393
|
+
if (streamType !== FETCH_STREAM_TYPE) {
|
|
394
|
+
return {
|
|
395
|
+
ok: false,
|
|
396
|
+
error: new DecodeError(
|
|
397
|
+
"CONSTRAINT_VIOLATION",
|
|
398
|
+
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
399
|
+
0
|
|
400
|
+
)
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
const requestId = r.readVarInt();
|
|
404
|
+
const objects = [];
|
|
405
|
+
let prevGroupId = 0n;
|
|
406
|
+
let prevSubgroupId = 0n;
|
|
407
|
+
let prevObjectId = 0n;
|
|
408
|
+
let prevPriority = 128;
|
|
409
|
+
let first = true;
|
|
410
|
+
while (r.remaining > 0) {
|
|
411
|
+
const byteOffset = r.offset;
|
|
412
|
+
const flags = Number(r.readVarInt());
|
|
413
|
+
let groupId = prevGroupId;
|
|
414
|
+
let subgroupId = prevSubgroupId;
|
|
415
|
+
let objectId = prevObjectId + 1n;
|
|
416
|
+
let payloadLength;
|
|
417
|
+
let payload;
|
|
418
|
+
let payloadByteOffset;
|
|
419
|
+
const extensionData = new Uint8Array(0);
|
|
420
|
+
if (flags >= 128) {
|
|
421
|
+
if (flags !== 140 && flags !== 268) {
|
|
422
|
+
return {
|
|
423
|
+
ok: false,
|
|
424
|
+
error: new DecodeError(
|
|
425
|
+
"CONSTRAINT_VIOLATION",
|
|
426
|
+
`Unknown serialization flags value: 0x${flags.toString(16)}`,
|
|
427
|
+
r.offset
|
|
428
|
+
)
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
groupId = r.readVarInt();
|
|
432
|
+
objectId = r.readVarInt();
|
|
433
|
+
payloadLength = Number(r.readVarInt());
|
|
434
|
+
payloadByteOffset = r.offset;
|
|
435
|
+
payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0);
|
|
436
|
+
} else if (flags & 64) {
|
|
437
|
+
const objectIdPresent = (flags & 4) !== 0;
|
|
438
|
+
const groupIdPresent = (flags & 8) !== 0;
|
|
439
|
+
const priorityPresent = (flags & 16) !== 0;
|
|
440
|
+
const propsPresent = (flags & 32) !== 0;
|
|
441
|
+
if (groupIdPresent) {
|
|
442
|
+
groupId = r.readVarInt();
|
|
443
|
+
}
|
|
444
|
+
if (objectIdPresent) {
|
|
445
|
+
objectId = r.readVarInt();
|
|
446
|
+
}
|
|
447
|
+
if (priorityPresent) {
|
|
448
|
+
prevPriority = r.readUint8();
|
|
449
|
+
}
|
|
450
|
+
let objectProperties;
|
|
451
|
+
if (propsPresent) {
|
|
452
|
+
const propsLen = Number(r.readVarInt());
|
|
453
|
+
if (propsLen > 0) {
|
|
454
|
+
objectProperties = decodeObjectProperties(r, propsLen);
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
payloadLength = Number(r.readVarInt());
|
|
458
|
+
payloadByteOffset = r.offset;
|
|
459
|
+
payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0);
|
|
460
|
+
const obj2 = {
|
|
461
|
+
type: "object",
|
|
462
|
+
byteOffset,
|
|
463
|
+
payloadByteOffset,
|
|
464
|
+
serializationFlags: flags,
|
|
465
|
+
groupId,
|
|
466
|
+
subgroupId: 0n,
|
|
467
|
+
objectId,
|
|
468
|
+
publisherPriority: prevPriority,
|
|
469
|
+
payloadLength,
|
|
470
|
+
payload,
|
|
471
|
+
extensionData
|
|
472
|
+
};
|
|
473
|
+
if (objectProperties)
|
|
474
|
+
obj2.objectProperties = objectProperties;
|
|
475
|
+
objects.push(obj2);
|
|
476
|
+
prevGroupId = groupId;
|
|
477
|
+
prevObjectId = objectId;
|
|
478
|
+
first = false;
|
|
479
|
+
continue;
|
|
480
|
+
} else {
|
|
481
|
+
const subgroupEncoding = flags & 3;
|
|
482
|
+
const objectIdPresent = (flags & 4) !== 0;
|
|
483
|
+
const groupIdPresent = (flags & 8) !== 0;
|
|
484
|
+
const priorityPresent = (flags & 16) !== 0;
|
|
485
|
+
const propsPresent = (flags & 32) !== 0;
|
|
486
|
+
if (groupIdPresent) {
|
|
487
|
+
groupId = r.readVarInt();
|
|
488
|
+
} else if (first) {
|
|
489
|
+
return {
|
|
490
|
+
ok: false,
|
|
491
|
+
error: new DecodeError(
|
|
492
|
+
"CONSTRAINT_VIOLATION",
|
|
493
|
+
"First fetch object must include groupId",
|
|
494
|
+
r.offset
|
|
495
|
+
)
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
if (subgroupEncoding === 0) {
|
|
499
|
+
subgroupId = 0n;
|
|
500
|
+
} else if (subgroupEncoding === 1) {
|
|
501
|
+
if (first) {
|
|
502
|
+
return {
|
|
503
|
+
ok: false,
|
|
504
|
+
error: new DecodeError(
|
|
505
|
+
"CONSTRAINT_VIOLATION",
|
|
506
|
+
"First fetch object cannot reference prior subgroupId",
|
|
507
|
+
r.offset
|
|
508
|
+
)
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
subgroupId = prevSubgroupId;
|
|
512
|
+
} else if (subgroupEncoding === 2) {
|
|
513
|
+
if (first) {
|
|
514
|
+
return {
|
|
515
|
+
ok: false,
|
|
516
|
+
error: new DecodeError(
|
|
517
|
+
"CONSTRAINT_VIOLATION",
|
|
518
|
+
"First fetch object cannot reference prior subgroupId",
|
|
519
|
+
r.offset
|
|
520
|
+
)
|
|
521
|
+
};
|
|
522
|
+
}
|
|
523
|
+
subgroupId = prevSubgroupId + 1n;
|
|
524
|
+
} else if (subgroupEncoding === 3) {
|
|
525
|
+
subgroupId = r.readVarInt();
|
|
526
|
+
}
|
|
527
|
+
if (objectIdPresent) {
|
|
528
|
+
objectId = r.readVarInt();
|
|
529
|
+
} else if (first) {
|
|
530
|
+
return {
|
|
531
|
+
ok: false,
|
|
532
|
+
error: new DecodeError(
|
|
533
|
+
"CONSTRAINT_VIOLATION",
|
|
534
|
+
"First fetch object must include objectId",
|
|
535
|
+
r.offset
|
|
536
|
+
)
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
if (priorityPresent) {
|
|
540
|
+
prevPriority = r.readUint8();
|
|
541
|
+
}
|
|
542
|
+
let objectProperties;
|
|
543
|
+
if (propsPresent) {
|
|
544
|
+
const propsLen = Number(r.readVarInt());
|
|
545
|
+
if (propsLen > 0) {
|
|
546
|
+
objectProperties = decodeObjectProperties(r, propsLen);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
payloadLength = Number(r.readVarInt());
|
|
550
|
+
payloadByteOffset = r.offset;
|
|
551
|
+
payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0);
|
|
552
|
+
if (objectProperties) {
|
|
553
|
+
const obj2 = {
|
|
554
|
+
type: "object",
|
|
555
|
+
byteOffset,
|
|
556
|
+
payloadByteOffset,
|
|
557
|
+
serializationFlags: flags,
|
|
558
|
+
groupId,
|
|
559
|
+
subgroupId,
|
|
560
|
+
objectId,
|
|
561
|
+
publisherPriority: prevPriority,
|
|
562
|
+
payloadLength,
|
|
563
|
+
payload,
|
|
564
|
+
extensionData
|
|
565
|
+
};
|
|
566
|
+
obj2.objectProperties = objectProperties;
|
|
567
|
+
objects.push(obj2);
|
|
568
|
+
prevGroupId = groupId;
|
|
569
|
+
prevSubgroupId = subgroupId;
|
|
570
|
+
prevObjectId = objectId;
|
|
571
|
+
first = false;
|
|
572
|
+
continue;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
const obj = {
|
|
576
|
+
type: "object",
|
|
577
|
+
byteOffset,
|
|
578
|
+
payloadByteOffset,
|
|
579
|
+
serializationFlags: flags,
|
|
580
|
+
groupId,
|
|
581
|
+
subgroupId,
|
|
582
|
+
objectId,
|
|
583
|
+
publisherPriority: prevPriority,
|
|
584
|
+
payloadLength,
|
|
585
|
+
payload,
|
|
586
|
+
extensionData
|
|
587
|
+
};
|
|
588
|
+
objects.push(obj);
|
|
589
|
+
prevGroupId = groupId;
|
|
590
|
+
prevSubgroupId = subgroupId;
|
|
591
|
+
prevObjectId = objectId;
|
|
592
|
+
first = false;
|
|
593
|
+
}
|
|
594
|
+
return {
|
|
595
|
+
ok: true,
|
|
596
|
+
value: { type: "fetch", requestId, objects },
|
|
597
|
+
bytesRead: r.offset
|
|
598
|
+
};
|
|
599
|
+
} catch (e) {
|
|
600
|
+
if (e instanceof DecodeError) return { ok: false, error: e };
|
|
601
|
+
throw e;
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
function decodeDataStream(streamType, bytes) {
|
|
605
|
+
switch (streamType) {
|
|
606
|
+
case "subgroup":
|
|
607
|
+
return decodeSubgroupStream(bytes);
|
|
608
|
+
case "datagram":
|
|
609
|
+
return decodeDatagram(bytes);
|
|
610
|
+
case "fetch":
|
|
611
|
+
return decodeFetchStream(bytes);
|
|
612
|
+
default: {
|
|
613
|
+
const _exhaustive = streamType;
|
|
614
|
+
throw new Error(`Unknown stream type: ${_exhaustive}`);
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
function createSubgroupStreamDecoder() {
|
|
619
|
+
let buffer = new Uint8Array(0);
|
|
620
|
+
let offset = 0;
|
|
621
|
+
let headerEmitted = false;
|
|
622
|
+
let prevObjectId = -1n;
|
|
623
|
+
let firstObject = true;
|
|
624
|
+
let _subgroupIsFirstObjId = false;
|
|
625
|
+
let _extensionsPresent = false;
|
|
626
|
+
return new TransformStream({
|
|
627
|
+
transform(chunk, controller) {
|
|
628
|
+
if (offset > 0) {
|
|
629
|
+
buffer = buffer.subarray(offset);
|
|
630
|
+
offset = 0;
|
|
631
|
+
}
|
|
632
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
633
|
+
newBuffer.set(buffer, 0);
|
|
634
|
+
newBuffer.set(chunk, buffer.length);
|
|
635
|
+
buffer = newBuffer;
|
|
636
|
+
if (!headerEmitted) {
|
|
637
|
+
try {
|
|
638
|
+
const r = new BufferReader(buffer.subarray(offset));
|
|
639
|
+
const streamType = Number(r.readVarInt());
|
|
640
|
+
if (!(streamType >= 16 && streamType <= 29 || streamType >= 48 && streamType <= 61)) {
|
|
641
|
+
controller.error(
|
|
642
|
+
new DecodeError(
|
|
643
|
+
"CONSTRAINT_VIOLATION",
|
|
644
|
+
`Expected subgroup stream type, got 0x${streamType.toString(16)}`,
|
|
645
|
+
0
|
|
646
|
+
)
|
|
647
|
+
);
|
|
648
|
+
return;
|
|
649
|
+
}
|
|
650
|
+
_extensionsPresent = (streamType & 1) !== 0;
|
|
651
|
+
const hasSubgroupField = (streamType & 4) !== 0;
|
|
652
|
+
_subgroupIsFirstObjId = (streamType & 2) !== 0 && !hasSubgroupField;
|
|
653
|
+
const hasPriority = streamType < 48;
|
|
654
|
+
const trackAlias = r.readVarInt();
|
|
655
|
+
const groupId = r.readVarInt();
|
|
656
|
+
let subgroupId = 0n;
|
|
657
|
+
if (hasSubgroupField) {
|
|
658
|
+
subgroupId = r.readVarInt();
|
|
659
|
+
}
|
|
660
|
+
let publisherPriority = 128;
|
|
661
|
+
if (hasPriority) {
|
|
662
|
+
publisherPriority = r.readUint8();
|
|
663
|
+
}
|
|
664
|
+
controller.enqueue({
|
|
665
|
+
type: "subgroup_header",
|
|
666
|
+
trackAlias,
|
|
667
|
+
groupId,
|
|
668
|
+
subgroupId,
|
|
669
|
+
publisherPriority
|
|
670
|
+
});
|
|
671
|
+
headerEmitted = true;
|
|
672
|
+
offset += r.offset;
|
|
673
|
+
} catch (e) {
|
|
674
|
+
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
675
|
+
return;
|
|
676
|
+
}
|
|
677
|
+
controller.error(e);
|
|
678
|
+
return;
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
while (offset < buffer.length) {
|
|
682
|
+
try {
|
|
683
|
+
const r = new BufferReader(buffer.subarray(offset));
|
|
684
|
+
const delta = r.readVarInt();
|
|
685
|
+
let objectId;
|
|
686
|
+
if (firstObject) {
|
|
687
|
+
objectId = delta;
|
|
688
|
+
firstObject = false;
|
|
689
|
+
} else {
|
|
690
|
+
objectId = prevObjectId + 1n + delta;
|
|
691
|
+
}
|
|
692
|
+
let extensionData = new Uint8Array(0);
|
|
693
|
+
if (_extensionsPresent) {
|
|
694
|
+
const extLen = Number(r.readVarInt());
|
|
695
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0);
|
|
696
|
+
}
|
|
697
|
+
const payloadLength = Number(r.readVarInt());
|
|
698
|
+
const payloadByteOffset = r.offset;
|
|
699
|
+
const payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0);
|
|
700
|
+
controller.enqueue({
|
|
701
|
+
type: "object",
|
|
702
|
+
objectId,
|
|
703
|
+
payloadLength,
|
|
704
|
+
payload,
|
|
705
|
+
extensionData,
|
|
706
|
+
byteOffset: 0,
|
|
707
|
+
payloadByteOffset
|
|
708
|
+
});
|
|
709
|
+
offset += r.offset;
|
|
710
|
+
prevObjectId = objectId;
|
|
711
|
+
} catch (e) {
|
|
712
|
+
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
713
|
+
break;
|
|
714
|
+
}
|
|
715
|
+
controller.error(e);
|
|
716
|
+
return;
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
},
|
|
720
|
+
flush(controller) {
|
|
721
|
+
if (offset < buffer.length) {
|
|
722
|
+
controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
});
|
|
61
726
|
}
|
|
62
|
-
function
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
727
|
+
function createFetchStreamDecoder() {
|
|
728
|
+
let buffer = new Uint8Array(0);
|
|
729
|
+
let offset = 0;
|
|
730
|
+
let headerEmitted = false;
|
|
731
|
+
return new TransformStream({
|
|
732
|
+
transform(chunk, controller) {
|
|
733
|
+
if (offset > 0) {
|
|
734
|
+
buffer = buffer.subarray(offset);
|
|
735
|
+
offset = 0;
|
|
736
|
+
}
|
|
737
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
738
|
+
newBuffer.set(buffer, 0);
|
|
739
|
+
newBuffer.set(chunk, buffer.length);
|
|
740
|
+
buffer = newBuffer;
|
|
741
|
+
if (!headerEmitted) {
|
|
742
|
+
try {
|
|
743
|
+
const r = new BufferReader(buffer.subarray(offset));
|
|
744
|
+
const streamType = r.readVarInt();
|
|
745
|
+
if (streamType !== FETCH_STREAM_TYPE) {
|
|
746
|
+
controller.error(
|
|
747
|
+
new DecodeError(
|
|
748
|
+
"CONSTRAINT_VIOLATION",
|
|
749
|
+
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
750
|
+
0
|
|
751
|
+
)
|
|
752
|
+
);
|
|
753
|
+
return;
|
|
754
|
+
}
|
|
755
|
+
const requestId = r.readVarInt();
|
|
756
|
+
controller.enqueue({ type: "fetch_header", requestId });
|
|
757
|
+
headerEmitted = true;
|
|
758
|
+
offset += r.offset;
|
|
759
|
+
} catch (e) {
|
|
760
|
+
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
761
|
+
return;
|
|
762
|
+
}
|
|
763
|
+
controller.error(e);
|
|
764
|
+
return;
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
while (offset < buffer.length) {
|
|
768
|
+
try {
|
|
769
|
+
const r = new BufferReader(buffer.subarray(offset));
|
|
770
|
+
const flags = Number(r.readVarInt());
|
|
771
|
+
const objectIdPresent = (flags & 4) !== 0;
|
|
772
|
+
const groupIdPresent = (flags & 8) !== 0;
|
|
773
|
+
const priorityPresent = (flags & 16) !== 0;
|
|
774
|
+
const extensionsPresent = (flags & 32) !== 0;
|
|
775
|
+
const subgroupEncoding = flags & 3;
|
|
776
|
+
if (groupIdPresent) r.readVarInt();
|
|
777
|
+
if (subgroupEncoding === 3) r.readVarInt();
|
|
778
|
+
let objectId = 0n;
|
|
779
|
+
if (objectIdPresent) objectId = r.readVarInt();
|
|
780
|
+
if (priorityPresent) r.readUint8();
|
|
781
|
+
let extensionData = new Uint8Array(0);
|
|
782
|
+
if (extensionsPresent) {
|
|
783
|
+
const extLen = Number(r.readVarInt());
|
|
784
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0);
|
|
785
|
+
}
|
|
786
|
+
const payloadLength = Number(r.readVarInt());
|
|
787
|
+
const payloadByteOffset = r.offset;
|
|
788
|
+
const payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0);
|
|
789
|
+
controller.enqueue({
|
|
790
|
+
type: "object",
|
|
791
|
+
objectId,
|
|
792
|
+
payloadLength,
|
|
793
|
+
payload,
|
|
794
|
+
extensionData,
|
|
795
|
+
byteOffset: 0,
|
|
796
|
+
payloadByteOffset
|
|
797
|
+
});
|
|
798
|
+
offset += r.offset;
|
|
799
|
+
} catch (e) {
|
|
800
|
+
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
801
|
+
break;
|
|
802
|
+
}
|
|
803
|
+
controller.error(e);
|
|
804
|
+
return;
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
},
|
|
808
|
+
flush(controller) {
|
|
809
|
+
if (offset < buffer.length) {
|
|
810
|
+
controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
});
|
|
814
|
+
}
|
|
815
|
+
function createDataStreamDecoder() {
|
|
816
|
+
let buffer = new Uint8Array(0);
|
|
817
|
+
let offset = 0;
|
|
818
|
+
let inner = null;
|
|
819
|
+
return new TransformStream({
|
|
820
|
+
transform(chunk, controller) {
|
|
821
|
+
if (offset > 0) {
|
|
822
|
+
buffer = buffer.subarray(offset);
|
|
823
|
+
offset = 0;
|
|
824
|
+
}
|
|
825
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
826
|
+
newBuffer.set(buffer, 0);
|
|
827
|
+
newBuffer.set(chunk, buffer.length);
|
|
828
|
+
buffer = newBuffer;
|
|
829
|
+
if (inner === null) {
|
|
830
|
+
if (offset >= buffer.length) return;
|
|
831
|
+
const firstByte = buffer[offset];
|
|
832
|
+
if (firstByte >= 16 && firstByte <= 29 || firstByte >= 48 && firstByte <= 61) {
|
|
833
|
+
const decoder = createSubgroupStreamDecoder();
|
|
834
|
+
inner = decoder;
|
|
835
|
+
} else if (firstByte === 5) {
|
|
836
|
+
const decoder = createFetchStreamDecoder();
|
|
837
|
+
inner = decoder;
|
|
838
|
+
} else {
|
|
839
|
+
controller.error(
|
|
840
|
+
new DecodeError(
|
|
841
|
+
"CONSTRAINT_VIOLATION",
|
|
842
|
+
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
843
|
+
0
|
|
844
|
+
)
|
|
845
|
+
);
|
|
846
|
+
return;
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
},
|
|
850
|
+
flush(controller) {
|
|
851
|
+
if (offset >= buffer.length) return;
|
|
852
|
+
const view = buffer.subarray(offset);
|
|
853
|
+
const firstByte = view[0];
|
|
854
|
+
let result;
|
|
855
|
+
if (firstByte >= 16 && firstByte <= 29 || firstByte >= 48 && firstByte <= 61) {
|
|
856
|
+
result = decodeSubgroupStream(view);
|
|
857
|
+
} else if (firstByte === 5) {
|
|
858
|
+
result = decodeFetchStream(view);
|
|
859
|
+
} else {
|
|
860
|
+
controller.error(
|
|
861
|
+
new DecodeError(
|
|
862
|
+
"CONSTRAINT_VIOLATION",
|
|
863
|
+
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
864
|
+
0
|
|
865
|
+
)
|
|
866
|
+
);
|
|
867
|
+
return;
|
|
868
|
+
}
|
|
869
|
+
if (!result.ok) {
|
|
870
|
+
controller.error(result.error);
|
|
871
|
+
return;
|
|
872
|
+
}
|
|
873
|
+
const stream = result.value;
|
|
874
|
+
if (stream.type === "subgroup") {
|
|
875
|
+
controller.enqueue({
|
|
876
|
+
type: "subgroup_header",
|
|
877
|
+
trackAlias: stream.trackAlias,
|
|
878
|
+
groupId: stream.groupId,
|
|
879
|
+
subgroupId: stream.subgroupId,
|
|
880
|
+
publisherPriority: stream.publisherPriority
|
|
881
|
+
});
|
|
882
|
+
for (const obj of stream.objects) {
|
|
883
|
+
controller.enqueue(obj);
|
|
884
|
+
}
|
|
885
|
+
} else if (stream.type === "fetch") {
|
|
886
|
+
controller.enqueue({
|
|
887
|
+
type: "fetch_header",
|
|
888
|
+
requestId: stream.requestId
|
|
889
|
+
});
|
|
890
|
+
for (const obj of stream.objects) {
|
|
891
|
+
controller.enqueue(obj);
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
}
|
|
895
|
+
});
|
|
68
896
|
}
|
|
897
|
+
|
|
898
|
+
// src/drafts/draft17/codec.ts
|
|
899
|
+
var textEncoder = /* @__PURE__ */ new TextEncoder();
|
|
900
|
+
var textDecoder = /* @__PURE__ */ new TextDecoder();
|
|
69
901
|
function encodeSetupOptions(opts, writer) {
|
|
70
902
|
const entries = [];
|
|
71
903
|
if (opts.path !== void 0) {
|
|
72
904
|
entries.push({
|
|
73
905
|
type: SETUP_OPT_PATH,
|
|
74
906
|
encode: (w) => {
|
|
75
|
-
const encoded =
|
|
907
|
+
const encoded = textEncoder.encode(opts.path);
|
|
76
908
|
w.writeVarInt(BigInt(encoded.byteLength));
|
|
77
909
|
w.writeBytes(encoded);
|
|
78
910
|
}
|
|
79
911
|
});
|
|
80
912
|
}
|
|
913
|
+
if (opts.authorization_token !== void 0) {
|
|
914
|
+
entries.push({
|
|
915
|
+
type: SETUP_OPT_AUTHORIZATION_TOKEN,
|
|
916
|
+
encode: (w) => {
|
|
917
|
+
const tmpW = new BufferWriter(64);
|
|
918
|
+
encodeAuthorizationToken(opts.authorization_token, tmpW);
|
|
919
|
+
const raw = tmpW.finish();
|
|
920
|
+
w.writeVarInt(BigInt(raw.byteLength));
|
|
921
|
+
w.writeBytes(raw);
|
|
922
|
+
}
|
|
923
|
+
});
|
|
924
|
+
}
|
|
81
925
|
if (opts.max_auth_token_cache_size !== void 0) {
|
|
82
926
|
entries.push({
|
|
83
927
|
type: SETUP_OPT_MAX_AUTH_TOKEN_CACHE_SIZE,
|
|
@@ -88,7 +932,7 @@ function encodeSetupOptions(opts, writer) {
|
|
|
88
932
|
entries.push({
|
|
89
933
|
type: SETUP_OPT_AUTHORITY,
|
|
90
934
|
encode: (w) => {
|
|
91
|
-
const encoded =
|
|
935
|
+
const encoded = textEncoder.encode(opts.authority);
|
|
92
936
|
w.writeVarInt(BigInt(encoded.byteLength));
|
|
93
937
|
w.writeBytes(encoded);
|
|
94
938
|
}
|
|
@@ -98,7 +942,7 @@ function encodeSetupOptions(opts, writer) {
|
|
|
98
942
|
entries.push({
|
|
99
943
|
type: SETUP_OPT_MOQT_IMPLEMENTATION,
|
|
100
944
|
encode: (w) => {
|
|
101
|
-
const encoded =
|
|
945
|
+
const encoded = textEncoder.encode(opts.moqt_implementation);
|
|
102
946
|
w.writeVarInt(BigInt(encoded.byteLength));
|
|
103
947
|
w.writeBytes(encoded);
|
|
104
948
|
}
|
|
@@ -157,28 +1001,96 @@ function decodeSetupOptions(reader, payloadEnd) {
|
|
|
157
1001
|
const length = Number(reader.readVarInt());
|
|
158
1002
|
const bytes = reader.readBytes(length);
|
|
159
1003
|
if (optType === SETUP_OPT_PATH) {
|
|
160
|
-
result.path =
|
|
1004
|
+
result.path = textDecoder.decode(bytes);
|
|
1005
|
+
} else if (optType === SETUP_OPT_AUTHORIZATION_TOKEN) {
|
|
1006
|
+
result.authorization_token = decodeAuthorizationToken(new BufferReader(bytes));
|
|
161
1007
|
} else if (optType === SETUP_OPT_AUTHORITY) {
|
|
162
|
-
result.authority =
|
|
1008
|
+
result.authority = textDecoder.decode(bytes);
|
|
163
1009
|
} else if (optType === SETUP_OPT_MOQT_IMPLEMENTATION) {
|
|
164
|
-
result.moqt_implementation =
|
|
1010
|
+
result.moqt_implementation = textDecoder.decode(bytes);
|
|
165
1011
|
} else {
|
|
166
|
-
unknown.push({
|
|
1012
|
+
unknown.push({
|
|
1013
|
+
id: `0x${optType.toString(16)}`,
|
|
1014
|
+
length,
|
|
1015
|
+
raw_hex: bytesToHex(bytes)
|
|
1016
|
+
});
|
|
167
1017
|
}
|
|
168
1018
|
}
|
|
169
1019
|
}
|
|
170
1020
|
if (unknown.length > 0) result.unknown = unknown;
|
|
171
1021
|
return result;
|
|
172
1022
|
}
|
|
1023
|
+
function encodeAuthorizationToken(token, w) {
|
|
1024
|
+
const aliasType = Number(token.alias_type);
|
|
1025
|
+
w.writeVarInt(token.alias_type);
|
|
1026
|
+
if (aliasType === 0 || aliasType === 1 || aliasType === 2) {
|
|
1027
|
+
w.writeVarInt(token.token_alias ?? 0n);
|
|
1028
|
+
}
|
|
1029
|
+
if (aliasType === 1 || aliasType === 3) {
|
|
1030
|
+
w.writeVarInt(token.token_type ?? 0n);
|
|
1031
|
+
const encoded = textEncoder.encode(token.token_value ?? "");
|
|
1032
|
+
w.writeVarInt(BigInt(encoded.byteLength));
|
|
1033
|
+
w.writeBytes(encoded);
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1036
|
+
function decodeAuthorizationToken(r) {
|
|
1037
|
+
const alias_type = r.readVarInt();
|
|
1038
|
+
const aliasType = Number(alias_type);
|
|
1039
|
+
const result = { alias_type };
|
|
1040
|
+
if (aliasType === 0 || aliasType === 1 || aliasType === 2) {
|
|
1041
|
+
;
|
|
1042
|
+
result.token_alias = r.readVarInt();
|
|
1043
|
+
}
|
|
1044
|
+
if (aliasType === 1 || aliasType === 3) {
|
|
1045
|
+
;
|
|
1046
|
+
result.token_type = r.readVarInt();
|
|
1047
|
+
const len = Number(r.readVarInt());
|
|
1048
|
+
const bytes = r.readBytes(len);
|
|
1049
|
+
result.token_value = textDecoder.decode(bytes);
|
|
1050
|
+
}
|
|
1051
|
+
return result;
|
|
1052
|
+
}
|
|
1053
|
+
var PARAM_DELIVERY_TIMEOUT = 0x02n;
|
|
1054
|
+
var PARAM_AUTHORIZATION_TOKEN = 0x03n;
|
|
1055
|
+
var PARAM_RENDEZVOUS_TIMEOUT = 0x04n;
|
|
173
1056
|
var PARAM_EXPIRES = 0x08n;
|
|
174
1057
|
var PARAM_LARGEST_OBJECT = 0x09n;
|
|
1058
|
+
var PARAM_FORWARD = 0x10n;
|
|
175
1059
|
var PARAM_SUBSCRIBER_PRIORITY = 0x20n;
|
|
176
1060
|
var PARAM_SUBSCRIPTION_FILTER = 0x21n;
|
|
177
1061
|
var PARAM_GROUP_ORDER = 0x22n;
|
|
1062
|
+
var PARAM_NEW_GROUP_REQUEST = 0x32n;
|
|
178
1063
|
function encodeParams(params, writer) {
|
|
179
1064
|
const entries = [];
|
|
1065
|
+
if (params.delivery_timeout !== void 0) {
|
|
1066
|
+
entries.push({
|
|
1067
|
+
type: PARAM_DELIVERY_TIMEOUT,
|
|
1068
|
+
encode: (w) => w.writeVarInt(params.delivery_timeout)
|
|
1069
|
+
});
|
|
1070
|
+
}
|
|
1071
|
+
if (params.authorization_token !== void 0) {
|
|
1072
|
+
entries.push({
|
|
1073
|
+
type: PARAM_AUTHORIZATION_TOKEN,
|
|
1074
|
+
encode: (w) => {
|
|
1075
|
+
const tmpW = new BufferWriter(64);
|
|
1076
|
+
encodeAuthorizationToken(params.authorization_token, tmpW);
|
|
1077
|
+
const raw = tmpW.finish();
|
|
1078
|
+
w.writeVarInt(BigInt(raw.byteLength));
|
|
1079
|
+
w.writeBytes(raw);
|
|
1080
|
+
}
|
|
1081
|
+
});
|
|
1082
|
+
}
|
|
1083
|
+
if (params.rendezvous_timeout !== void 0) {
|
|
1084
|
+
entries.push({
|
|
1085
|
+
type: PARAM_RENDEZVOUS_TIMEOUT,
|
|
1086
|
+
encode: (w) => w.writeVarInt(params.rendezvous_timeout)
|
|
1087
|
+
});
|
|
1088
|
+
}
|
|
180
1089
|
if (params.expires !== void 0) {
|
|
181
|
-
entries.push({
|
|
1090
|
+
entries.push({
|
|
1091
|
+
type: PARAM_EXPIRES,
|
|
1092
|
+
encode: (w) => w.writeVarInt(params.expires)
|
|
1093
|
+
});
|
|
182
1094
|
}
|
|
183
1095
|
if (params.largest_object !== void 0) {
|
|
184
1096
|
entries.push({
|
|
@@ -189,6 +1101,12 @@ function encodeParams(params, writer) {
|
|
|
189
1101
|
}
|
|
190
1102
|
});
|
|
191
1103
|
}
|
|
1104
|
+
if (params.forward !== void 0) {
|
|
1105
|
+
entries.push({
|
|
1106
|
+
type: PARAM_FORWARD,
|
|
1107
|
+
encode: (w) => w.writeVarInt(params.forward)
|
|
1108
|
+
});
|
|
1109
|
+
}
|
|
192
1110
|
if (params.subscriber_priority !== void 0) {
|
|
193
1111
|
entries.push({
|
|
194
1112
|
type: PARAM_SUBSCRIBER_PRIORITY,
|
|
@@ -221,6 +1139,12 @@ function encodeParams(params, writer) {
|
|
|
221
1139
|
encode: (w) => w.writeUint8(Number(params.group_order))
|
|
222
1140
|
});
|
|
223
1141
|
}
|
|
1142
|
+
if (params.new_group_request !== void 0) {
|
|
1143
|
+
entries.push({
|
|
1144
|
+
type: PARAM_NEW_GROUP_REQUEST,
|
|
1145
|
+
encode: (w) => w.writeVarInt(params.new_group_request)
|
|
1146
|
+
});
|
|
1147
|
+
}
|
|
224
1148
|
if (params.unknown) {
|
|
225
1149
|
for (const u of params.unknown) {
|
|
226
1150
|
const id = BigInt(u.id);
|
|
@@ -251,7 +1175,15 @@ function decodeParams(reader) {
|
|
|
251
1175
|
const delta = reader.readVarInt();
|
|
252
1176
|
const paramType = prevType + delta;
|
|
253
1177
|
prevType = paramType;
|
|
254
|
-
if (paramType ===
|
|
1178
|
+
if (paramType === PARAM_DELIVERY_TIMEOUT) {
|
|
1179
|
+
result.delivery_timeout = reader.readVarInt();
|
|
1180
|
+
} else if (paramType === PARAM_AUTHORIZATION_TOKEN) {
|
|
1181
|
+
const length = Number(reader.readVarInt());
|
|
1182
|
+
const bytes = reader.readBytes(length);
|
|
1183
|
+
result.authorization_token = decodeAuthorizationToken(new BufferReader(bytes));
|
|
1184
|
+
} else if (paramType === PARAM_RENDEZVOUS_TIMEOUT) {
|
|
1185
|
+
result.rendezvous_timeout = reader.readVarInt();
|
|
1186
|
+
} else if (paramType === PARAM_EXPIRES) {
|
|
255
1187
|
result.expires = reader.readVarInt();
|
|
256
1188
|
} else if (paramType === PARAM_LARGEST_OBJECT) {
|
|
257
1189
|
const group = reader.readVarInt();
|
|
@@ -274,8 +1206,12 @@ function decodeParams(reader) {
|
|
|
274
1206
|
const consumed = reader.offset - startOff;
|
|
275
1207
|
if (consumed < length) reader.readBytes(length - consumed);
|
|
276
1208
|
result.subscription_filter = filter;
|
|
1209
|
+
} else if (paramType === PARAM_FORWARD) {
|
|
1210
|
+
result.forward = reader.readVarInt();
|
|
277
1211
|
} else if (paramType === PARAM_GROUP_ORDER) {
|
|
278
1212
|
result.group_order = BigInt(reader.readUint8());
|
|
1213
|
+
} else if (paramType === PARAM_NEW_GROUP_REQUEST) {
|
|
1214
|
+
result.new_group_request = reader.readVarInt();
|
|
279
1215
|
} else {
|
|
280
1216
|
if (paramType % 2n === 0n) {
|
|
281
1217
|
const value = reader.readVarInt();
|
|
@@ -290,29 +1226,89 @@ function decodeParams(reader) {
|
|
|
290
1226
|
} else {
|
|
291
1227
|
const length = Number(reader.readVarInt());
|
|
292
1228
|
const bytes = reader.readBytes(length);
|
|
293
|
-
unknown.push({
|
|
1229
|
+
unknown.push({
|
|
1230
|
+
id: `0x${paramType.toString(16)}`,
|
|
1231
|
+
length,
|
|
1232
|
+
raw_hex: bytesToHex(bytes)
|
|
1233
|
+
});
|
|
294
1234
|
}
|
|
295
1235
|
}
|
|
296
1236
|
}
|
|
297
1237
|
if (unknown.length > 0) result.unknown = unknown;
|
|
298
1238
|
return result;
|
|
299
1239
|
}
|
|
1240
|
+
var TPROP_DELIVERY_TIMEOUT = 0x02n;
|
|
1241
|
+
var TPROP_MAX_CACHE_DURATION = 0x04n;
|
|
1242
|
+
var TPROP_IMMUTABLE_PROPERTIES = 0x0bn;
|
|
1243
|
+
var TPROP_DEFAULT_PUBLISHER_PRIORITY = 0x0en;
|
|
1244
|
+
var TPROP_DEFAULT_PUBLISHER_GROUP_ORDER = 0x22n;
|
|
1245
|
+
var TPROP_DYNAMIC_GROUPS = 0x30n;
|
|
300
1246
|
function encodeTrackProperties(props, writer) {
|
|
301
|
-
|
|
302
|
-
|
|
1247
|
+
const entries = [];
|
|
1248
|
+
if (props.delivery_timeout !== void 0) {
|
|
1249
|
+
entries.push({
|
|
1250
|
+
type: TPROP_DELIVERY_TIMEOUT,
|
|
1251
|
+
encode: (w) => w.writeVarInt(props.delivery_timeout)
|
|
1252
|
+
});
|
|
1253
|
+
}
|
|
1254
|
+
if (props.max_cache_duration !== void 0) {
|
|
1255
|
+
entries.push({
|
|
1256
|
+
type: TPROP_MAX_CACHE_DURATION,
|
|
1257
|
+
encode: (w) => w.writeVarInt(props.max_cache_duration)
|
|
1258
|
+
});
|
|
1259
|
+
}
|
|
1260
|
+
if (props.immutable_properties !== void 0) {
|
|
1261
|
+
entries.push({
|
|
1262
|
+
type: TPROP_IMMUTABLE_PROPERTIES,
|
|
1263
|
+
encode: (w) => {
|
|
1264
|
+
const raw = hexToBytes(props.immutable_properties);
|
|
1265
|
+
w.writeVarInt(BigInt(raw.byteLength));
|
|
1266
|
+
w.writeBytes(raw);
|
|
1267
|
+
}
|
|
1268
|
+
});
|
|
1269
|
+
}
|
|
1270
|
+
if (props.default_publisher_priority !== void 0) {
|
|
1271
|
+
entries.push({
|
|
1272
|
+
type: TPROP_DEFAULT_PUBLISHER_PRIORITY,
|
|
1273
|
+
encode: (w) => w.writeVarInt(props.default_publisher_priority)
|
|
1274
|
+
});
|
|
1275
|
+
}
|
|
1276
|
+
if (props.default_publisher_group_order !== void 0) {
|
|
1277
|
+
entries.push({
|
|
1278
|
+
type: TPROP_DEFAULT_PUBLISHER_GROUP_ORDER,
|
|
1279
|
+
encode: (w) => w.writeVarInt(props.default_publisher_group_order)
|
|
1280
|
+
});
|
|
1281
|
+
}
|
|
1282
|
+
if (props.dynamic_groups !== void 0) {
|
|
1283
|
+
entries.push({
|
|
1284
|
+
type: TPROP_DYNAMIC_GROUPS,
|
|
1285
|
+
encode: (w) => w.writeVarInt(props.dynamic_groups)
|
|
1286
|
+
});
|
|
1287
|
+
}
|
|
1288
|
+
if (props.unknown) {
|
|
1289
|
+
for (const u of props.unknown) {
|
|
1290
|
+
const id = BigInt(u.id);
|
|
1291
|
+
entries.push({
|
|
1292
|
+
type: id,
|
|
1293
|
+
encode: (w) => {
|
|
1294
|
+
if (id % 2n === 0n) {
|
|
1295
|
+
const raw = hexToBytes(u.raw_hex);
|
|
1296
|
+
const tmpReader = new BufferReader(raw);
|
|
1297
|
+
w.writeVarInt(tmpReader.readVarInt());
|
|
1298
|
+
} else {
|
|
1299
|
+
const raw = hexToBytes(u.raw_hex);
|
|
1300
|
+
w.writeVarInt(BigInt(raw.byteLength));
|
|
1301
|
+
w.writeBytes(raw);
|
|
1302
|
+
}
|
|
1303
|
+
}
|
|
1304
|
+
});
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
303
1307
|
entries.sort((a, b) => a.type < b.type ? -1 : a.type > b.type ? 1 : 0);
|
|
304
1308
|
let prevType = 0n;
|
|
305
1309
|
for (const entry of entries) {
|
|
306
1310
|
writer.writeVarInt(entry.type - prevType);
|
|
307
|
-
|
|
308
|
-
const raw = hexToBytes(entry.raw.raw_hex);
|
|
309
|
-
const tmpReader = new BufferReader(raw);
|
|
310
|
-
writer.writeVarInt(tmpReader.readVarInt());
|
|
311
|
-
} else {
|
|
312
|
-
const raw = hexToBytes(entry.raw.raw_hex);
|
|
313
|
-
writer.writeVarInt(BigInt(raw.byteLength));
|
|
314
|
-
writer.writeBytes(raw);
|
|
315
|
-
}
|
|
1311
|
+
entry.encode(writer);
|
|
316
1312
|
prevType = entry.type;
|
|
317
1313
|
}
|
|
318
1314
|
}
|
|
@@ -326,18 +1322,38 @@ function decodeTrackProperties(reader, payloadEnd) {
|
|
|
326
1322
|
prevType = propType;
|
|
327
1323
|
if (propType % 2n === 0n) {
|
|
328
1324
|
const value = reader.readVarInt();
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
1325
|
+
if (propType === TPROP_DELIVERY_TIMEOUT) {
|
|
1326
|
+
result.delivery_timeout = value;
|
|
1327
|
+
} else if (propType === TPROP_MAX_CACHE_DURATION) {
|
|
1328
|
+
result.max_cache_duration = value;
|
|
1329
|
+
} else if (propType === TPROP_DEFAULT_PUBLISHER_PRIORITY) {
|
|
1330
|
+
result.default_publisher_priority = value;
|
|
1331
|
+
} else if (propType === TPROP_DEFAULT_PUBLISHER_GROUP_ORDER) {
|
|
1332
|
+
result.default_publisher_group_order = value;
|
|
1333
|
+
} else if (propType === TPROP_DYNAMIC_GROUPS) {
|
|
1334
|
+
result.dynamic_groups = value;
|
|
1335
|
+
} else {
|
|
1336
|
+
const tmpWriter = new BufferWriter(16);
|
|
1337
|
+
tmpWriter.writeVarInt(value);
|
|
1338
|
+
const raw = tmpWriter.finish();
|
|
1339
|
+
unknown.push({
|
|
1340
|
+
id: `0x${propType.toString(16)}`,
|
|
1341
|
+
length: raw.byteLength,
|
|
1342
|
+
raw_hex: bytesToHex(raw)
|
|
1343
|
+
});
|
|
1344
|
+
}
|
|
337
1345
|
} else {
|
|
338
1346
|
const length = Number(reader.readVarInt());
|
|
339
1347
|
const bytes = reader.readBytes(length);
|
|
340
|
-
|
|
1348
|
+
if (propType === TPROP_IMMUTABLE_PROPERTIES) {
|
|
1349
|
+
result.immutable_properties = bytesToHex(bytes);
|
|
1350
|
+
} else {
|
|
1351
|
+
unknown.push({
|
|
1352
|
+
id: `0x${propType.toString(16)}`,
|
|
1353
|
+
length,
|
|
1354
|
+
raw_hex: bytesToHex(bytes)
|
|
1355
|
+
});
|
|
1356
|
+
}
|
|
341
1357
|
}
|
|
342
1358
|
}
|
|
343
1359
|
if (unknown.length > 0) result.unknown = unknown;
|
|
@@ -476,7 +1492,12 @@ function decodeRequestUpdatePayload(r) {
|
|
|
476
1492
|
const request_id = r.readVarInt();
|
|
477
1493
|
const required_request_id_delta = r.readVarInt();
|
|
478
1494
|
const parameters = decodeParams(r);
|
|
479
|
-
return {
|
|
1495
|
+
return {
|
|
1496
|
+
type: "request_update",
|
|
1497
|
+
request_id,
|
|
1498
|
+
required_request_id_delta,
|
|
1499
|
+
parameters
|
|
1500
|
+
};
|
|
480
1501
|
}
|
|
481
1502
|
function decodePublishPayload(r, payloadEnd) {
|
|
482
1503
|
const request_id = r.readVarInt();
|
|
@@ -565,7 +1586,14 @@ function decodeFetchPayload(r) {
|
|
|
565
1586
|
const start_object = r.readVarInt();
|
|
566
1587
|
const end_group = r.readVarInt();
|
|
567
1588
|
const end_object = r.readVarInt();
|
|
568
|
-
standalone = {
|
|
1589
|
+
standalone = {
|
|
1590
|
+
track_namespace,
|
|
1591
|
+
track_name,
|
|
1592
|
+
start_group,
|
|
1593
|
+
start_object,
|
|
1594
|
+
end_group,
|
|
1595
|
+
end_object
|
|
1596
|
+
};
|
|
569
1597
|
} else {
|
|
570
1598
|
const joining_request_id = r.readVarInt();
|
|
571
1599
|
const joining_start = r.readVarInt();
|
|
@@ -588,7 +1616,14 @@ function decodeFetchOkPayload(r, payloadEnd) {
|
|
|
588
1616
|
const end_object = r.readVarInt();
|
|
589
1617
|
const parameters = decodeParams(r);
|
|
590
1618
|
const track_properties = decodeTrackProperties(r, payloadEnd);
|
|
591
|
-
return {
|
|
1619
|
+
return {
|
|
1620
|
+
type: "fetch_ok",
|
|
1621
|
+
end_of_track,
|
|
1622
|
+
end_group,
|
|
1623
|
+
end_object,
|
|
1624
|
+
parameters,
|
|
1625
|
+
track_properties
|
|
1626
|
+
};
|
|
592
1627
|
}
|
|
593
1628
|
function decodeTrackStatusPayload(r) {
|
|
594
1629
|
const request_id = r.readVarInt();
|
|
@@ -627,11 +1662,11 @@ function encodeMessage(message) {
|
|
|
627
1662
|
}
|
|
628
1663
|
const payloadWriter = new BufferWriter();
|
|
629
1664
|
encodePayload(message, payloadWriter);
|
|
630
|
-
const payload = payloadWriter.
|
|
1665
|
+
const payload = payloadWriter.finishView();
|
|
631
1666
|
if (payload.byteLength > 65535) {
|
|
632
1667
|
throw new Error(`Payload too large for 16-bit length: ${payload.byteLength}`);
|
|
633
1668
|
}
|
|
634
|
-
const writer = new BufferWriter();
|
|
1669
|
+
const writer = new BufferWriter(payload.byteLength + 16);
|
|
635
1670
|
writer.writeVarInt(typeId);
|
|
636
1671
|
writer.writeUint8(payload.byteLength >> 8 & 255);
|
|
637
1672
|
writer.writeUint8(payload.byteLength & 255);
|
|
@@ -732,357 +1767,37 @@ function decodeMessage(bytes) {
|
|
|
732
1767
|
message = decodeGoAwayPayload(payloadReader);
|
|
733
1768
|
} else {
|
|
734
1769
|
return {
|
|
735
|
-
ok: false,
|
|
736
|
-
error: new DecodeError(
|
|
737
|
-
"UNKNOWN_MESSAGE_TYPE",
|
|
738
|
-
`Unknown message type ID: 0x${typeId.toString(16)}`,
|
|
739
|
-
0
|
|
740
|
-
)
|
|
741
|
-
};
|
|
742
|
-
}
|
|
743
|
-
return { ok: true, value: message, bytesRead: reader.offset };
|
|
744
|
-
} catch (e) {
|
|
745
|
-
if (e instanceof DecodeError) {
|
|
746
|
-
return { ok: false, error: e };
|
|
747
|
-
}
|
|
748
|
-
throw e;
|
|
749
|
-
}
|
|
750
|
-
}
|
|
751
|
-
var FETCH_STREAM_TYPE = 0x05n;
|
|
752
|
-
function encodeSubgroupStream(stream) {
|
|
753
|
-
const w = new BufferWriter();
|
|
754
|
-
const streamType = stream.headerType;
|
|
755
|
-
w.writeVarInt(BigInt(streamType));
|
|
756
|
-
const hasSubgroupField = (streamType & 4) !== 0;
|
|
757
|
-
const hasPriority = streamType < 48;
|
|
758
|
-
w.writeVarInt(stream.trackAlias);
|
|
759
|
-
w.writeVarInt(stream.groupId);
|
|
760
|
-
if (hasSubgroupField) {
|
|
761
|
-
w.writeVarInt(stream.subgroupId);
|
|
762
|
-
}
|
|
763
|
-
if (hasPriority) {
|
|
764
|
-
w.writeUint8(stream.publisherPriority);
|
|
765
|
-
}
|
|
766
|
-
let prevObjectId = -1n;
|
|
767
|
-
for (const obj of stream.objects) {
|
|
768
|
-
const delta = prevObjectId < 0n ? obj.objectId : obj.objectId - prevObjectId - 1n;
|
|
769
|
-
w.writeVarInt(delta);
|
|
770
|
-
w.writeVarInt(BigInt(obj.payloadLength));
|
|
771
|
-
if (obj.payloadLength === 0) {
|
|
772
|
-
w.writeVarInt(obj.status ?? 0n);
|
|
773
|
-
} else {
|
|
774
|
-
w.writeBytes(obj.payload);
|
|
775
|
-
}
|
|
776
|
-
prevObjectId = obj.objectId;
|
|
777
|
-
}
|
|
778
|
-
return w.finish();
|
|
779
|
-
}
|
|
780
|
-
function encodeDatagram(dg) {
|
|
781
|
-
const w = new BufferWriter();
|
|
782
|
-
const dgType = dg.datagramType;
|
|
783
|
-
w.writeVarInt(BigInt(dgType));
|
|
784
|
-
w.writeVarInt(dg.trackAlias);
|
|
785
|
-
w.writeVarInt(dg.groupId);
|
|
786
|
-
const objectIdAbsent = (dgType & 4) !== 0;
|
|
787
|
-
const isStatus = (dgType & 32) !== 0;
|
|
788
|
-
const defaultPriority = (dgType & 8) !== 0;
|
|
789
|
-
if (!objectIdAbsent) {
|
|
790
|
-
w.writeVarInt(dg.objectId);
|
|
791
|
-
}
|
|
792
|
-
if (!defaultPriority) {
|
|
793
|
-
w.writeUint8(dg.publisherPriority);
|
|
794
|
-
}
|
|
795
|
-
if (isStatus) {
|
|
796
|
-
w.writeVarInt(dg.objectStatus ?? 0n);
|
|
797
|
-
} else {
|
|
798
|
-
w.writeBytes(dg.payload);
|
|
799
|
-
}
|
|
800
|
-
return w.finish();
|
|
801
|
-
}
|
|
802
|
-
function encodeFetchStream(stream) {
|
|
803
|
-
const w = new BufferWriter();
|
|
804
|
-
w.writeVarInt(FETCH_STREAM_TYPE);
|
|
805
|
-
w.writeVarInt(stream.requestId);
|
|
806
|
-
for (const obj of stream.objects) {
|
|
807
|
-
w.writeUint8(obj.serializationFlags);
|
|
808
|
-
const flags = obj.serializationFlags;
|
|
809
|
-
if (flags & 8) w.writeVarInt(obj.groupId);
|
|
810
|
-
const subgroupEncoding = flags & 3;
|
|
811
|
-
if (subgroupEncoding === 3) w.writeVarInt(obj.subgroupId);
|
|
812
|
-
if (flags & 4) w.writeVarInt(obj.objectId);
|
|
813
|
-
if (flags & 16) w.writeUint8(obj.publisherPriority);
|
|
814
|
-
w.writeVarInt(BigInt(obj.payloadLength));
|
|
815
|
-
if (obj.payloadLength === 0) {
|
|
816
|
-
w.writeVarInt(obj.status ?? 0n);
|
|
817
|
-
} else {
|
|
818
|
-
w.writeBytes(obj.payload);
|
|
819
|
-
}
|
|
820
|
-
}
|
|
821
|
-
return w.finish();
|
|
822
|
-
}
|
|
823
|
-
function decodeSubgroupStream(bytes) {
|
|
824
|
-
try {
|
|
825
|
-
const r = new BufferReader(bytes);
|
|
826
|
-
const streamType = Number(r.readVarInt());
|
|
827
|
-
if (!(streamType >= 16 && streamType <= 29 || streamType >= 48 && streamType <= 61)) {
|
|
828
|
-
return {
|
|
829
|
-
ok: false,
|
|
830
|
-
error: new DecodeError(
|
|
831
|
-
"CONSTRAINT_VIOLATION",
|
|
832
|
-
`Expected subgroup stream type 0x10-0x1D or 0x30-0x3D, got 0x${streamType.toString(16)}`,
|
|
833
|
-
0
|
|
834
|
-
)
|
|
835
|
-
};
|
|
836
|
-
}
|
|
837
|
-
const hasSubgroupField = (streamType & 4) !== 0;
|
|
838
|
-
const subgroupIsFirstObjId = (streamType & 2) !== 0 && !hasSubgroupField;
|
|
839
|
-
const hasPriority = streamType < 48;
|
|
840
|
-
const trackAlias = r.readVarInt();
|
|
841
|
-
const groupId = r.readVarInt();
|
|
842
|
-
let subgroupId = 0n;
|
|
843
|
-
if (hasSubgroupField) {
|
|
844
|
-
subgroupId = r.readVarInt();
|
|
845
|
-
}
|
|
846
|
-
let publisherPriority = 128;
|
|
847
|
-
if (hasPriority) {
|
|
848
|
-
publisherPriority = r.readUint8();
|
|
849
|
-
}
|
|
850
|
-
const objects = [];
|
|
851
|
-
let prevObjectId = -1n;
|
|
852
|
-
let firstObject = true;
|
|
853
|
-
while (r.remaining > 0) {
|
|
854
|
-
const delta = r.readVarInt();
|
|
855
|
-
let objectId;
|
|
856
|
-
if (firstObject) {
|
|
857
|
-
objectId = delta;
|
|
858
|
-
if (subgroupIsFirstObjId && firstObject) {
|
|
859
|
-
subgroupId = objectId;
|
|
860
|
-
}
|
|
861
|
-
firstObject = false;
|
|
862
|
-
} else {
|
|
863
|
-
objectId = prevObjectId + 1n + delta;
|
|
864
|
-
}
|
|
865
|
-
const payloadLength = Number(r.readVarInt());
|
|
866
|
-
let payload;
|
|
867
|
-
let status;
|
|
868
|
-
if (payloadLength === 0) {
|
|
869
|
-
status = r.readVarInt();
|
|
870
|
-
payload = new Uint8Array(0);
|
|
871
|
-
} else {
|
|
872
|
-
payload = r.readBytes(payloadLength);
|
|
873
|
-
}
|
|
874
|
-
const obj = { type: "object", objectId, payloadLength, payload };
|
|
875
|
-
if (status !== void 0) obj.status = status;
|
|
876
|
-
objects.push(obj);
|
|
877
|
-
prevObjectId = objectId;
|
|
878
|
-
}
|
|
879
|
-
return {
|
|
880
|
-
ok: true,
|
|
881
|
-
value: {
|
|
882
|
-
type: "subgroup",
|
|
883
|
-
headerType: streamType,
|
|
884
|
-
trackAlias,
|
|
885
|
-
groupId,
|
|
886
|
-
subgroupId,
|
|
887
|
-
publisherPriority,
|
|
888
|
-
objects
|
|
889
|
-
},
|
|
890
|
-
bytesRead: r.offset
|
|
891
|
-
};
|
|
892
|
-
} catch (e) {
|
|
893
|
-
if (e instanceof DecodeError) return { ok: false, error: e };
|
|
894
|
-
throw e;
|
|
895
|
-
}
|
|
896
|
-
}
|
|
897
|
-
function decodeDatagram(bytes) {
|
|
898
|
-
try {
|
|
899
|
-
const r = new BufferReader(bytes);
|
|
900
|
-
const dgType = Number(r.readVarInt());
|
|
901
|
-
const objectIdAbsent = (dgType & 4) !== 0;
|
|
902
|
-
const endOfGroup = (dgType & 2) !== 0;
|
|
903
|
-
const isStatus = (dgType & 32) !== 0;
|
|
904
|
-
const defaultPriority = (dgType & 8) !== 0;
|
|
905
|
-
const trackAlias = r.readVarInt();
|
|
906
|
-
const groupId = r.readVarInt();
|
|
907
|
-
let objectId = 0n;
|
|
908
|
-
if (!objectIdAbsent) {
|
|
909
|
-
objectId = r.readVarInt();
|
|
910
|
-
}
|
|
911
|
-
let publisherPriority = 128;
|
|
912
|
-
if (!defaultPriority) {
|
|
913
|
-
publisherPriority = r.readUint8();
|
|
914
|
-
}
|
|
915
|
-
let objectStatus;
|
|
916
|
-
let payload;
|
|
917
|
-
if (isStatus) {
|
|
918
|
-
objectStatus = r.readVarInt();
|
|
919
|
-
payload = new Uint8Array(0);
|
|
920
|
-
} else {
|
|
921
|
-
payload = r.readBytes(r.remaining);
|
|
922
|
-
}
|
|
923
|
-
const payloadLength = payload.byteLength;
|
|
924
|
-
const result = {
|
|
925
|
-
type: "datagram",
|
|
926
|
-
datagramType: dgType,
|
|
927
|
-
trackAlias,
|
|
928
|
-
groupId,
|
|
929
|
-
objectId,
|
|
930
|
-
publisherPriority,
|
|
931
|
-
payloadLength,
|
|
932
|
-
payload
|
|
933
|
-
};
|
|
934
|
-
if (endOfGroup) result.endOfGroup = true;
|
|
935
|
-
if (objectStatus !== void 0)
|
|
936
|
-
result.objectStatus = objectStatus;
|
|
937
|
-
return { ok: true, value: result, bytesRead: r.offset };
|
|
938
|
-
} catch (e) {
|
|
939
|
-
if (e instanceof DecodeError) return { ok: false, error: e };
|
|
940
|
-
throw e;
|
|
941
|
-
}
|
|
942
|
-
}
|
|
943
|
-
function decodeFetchStream(bytes) {
|
|
944
|
-
try {
|
|
945
|
-
const r = new BufferReader(bytes);
|
|
946
|
-
const streamType = r.readVarInt();
|
|
947
|
-
if (streamType !== FETCH_STREAM_TYPE) {
|
|
948
|
-
return {
|
|
949
|
-
ok: false,
|
|
950
|
-
error: new DecodeError(
|
|
951
|
-
"CONSTRAINT_VIOLATION",
|
|
952
|
-
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
953
|
-
0
|
|
954
|
-
)
|
|
955
|
-
};
|
|
956
|
-
}
|
|
957
|
-
const requestId = r.readVarInt();
|
|
958
|
-
const objects = [];
|
|
959
|
-
let prevGroupId = 0n;
|
|
960
|
-
let prevSubgroupId = 0n;
|
|
961
|
-
let prevObjectId = 0n;
|
|
962
|
-
let prevPriority = 128;
|
|
963
|
-
let first = true;
|
|
964
|
-
while (r.remaining > 0) {
|
|
965
|
-
const flags = r.readUint8();
|
|
966
|
-
const subgroupEncoding = flags & 3;
|
|
967
|
-
const objectIdPresent = (flags & 4) !== 0;
|
|
968
|
-
const groupIdPresent = (flags & 8) !== 0;
|
|
969
|
-
const priorityPresent = (flags & 16) !== 0;
|
|
970
|
-
const extensionsPresent = (flags & 32) !== 0;
|
|
971
|
-
if (flags & 192) {
|
|
972
|
-
return {
|
|
973
|
-
ok: false,
|
|
974
|
-
error: new DecodeError(
|
|
975
|
-
"CONSTRAINT_VIOLATION",
|
|
976
|
-
"Reserved bits set in fetch object flags",
|
|
977
|
-
r.offset
|
|
978
|
-
)
|
|
979
|
-
};
|
|
980
|
-
}
|
|
981
|
-
let groupId = prevGroupId;
|
|
982
|
-
if (groupIdPresent) {
|
|
983
|
-
groupId = r.readVarInt();
|
|
984
|
-
} else if (first) {
|
|
985
|
-
return {
|
|
986
|
-
ok: false,
|
|
987
|
-
error: new DecodeError(
|
|
988
|
-
"CONSTRAINT_VIOLATION",
|
|
989
|
-
"First fetch object must include groupId",
|
|
990
|
-
r.offset
|
|
991
|
-
)
|
|
992
|
-
};
|
|
993
|
-
}
|
|
994
|
-
let subgroupId = prevSubgroupId;
|
|
995
|
-
if (subgroupEncoding === 0) {
|
|
996
|
-
subgroupId = 0n;
|
|
997
|
-
} else if (subgroupEncoding === 1) {
|
|
998
|
-
subgroupId = prevSubgroupId;
|
|
999
|
-
} else if (subgroupEncoding === 2) {
|
|
1000
|
-
subgroupId = prevSubgroupId + 1n;
|
|
1001
|
-
} else if (subgroupEncoding === 3) {
|
|
1002
|
-
subgroupId = r.readVarInt();
|
|
1003
|
-
}
|
|
1004
|
-
let objectId = prevObjectId + 1n;
|
|
1005
|
-
if (objectIdPresent) {
|
|
1006
|
-
objectId = r.readVarInt();
|
|
1007
|
-
} else if (first) {
|
|
1008
|
-
return {
|
|
1009
|
-
ok: false,
|
|
1010
|
-
error: new DecodeError(
|
|
1011
|
-
"CONSTRAINT_VIOLATION",
|
|
1012
|
-
"First fetch object must include objectId",
|
|
1013
|
-
r.offset
|
|
1014
|
-
)
|
|
1015
|
-
};
|
|
1016
|
-
}
|
|
1017
|
-
if (priorityPresent) {
|
|
1018
|
-
prevPriority = r.readUint8();
|
|
1019
|
-
}
|
|
1020
|
-
if (extensionsPresent) {
|
|
1021
|
-
const extLen = Number(r.readVarInt());
|
|
1022
|
-
if (extLen > 0) {
|
|
1023
|
-
r.readBytes(extLen);
|
|
1024
|
-
}
|
|
1025
|
-
}
|
|
1026
|
-
const payloadLength = Number(r.readVarInt());
|
|
1027
|
-
let payload;
|
|
1028
|
-
let status;
|
|
1029
|
-
if (payloadLength > 0) {
|
|
1030
|
-
payload = r.readBytes(payloadLength);
|
|
1031
|
-
} else {
|
|
1032
|
-
status = r.readVarInt();
|
|
1033
|
-
payload = new Uint8Array(0);
|
|
1034
|
-
}
|
|
1035
|
-
const obj = {
|
|
1036
|
-
type: "object",
|
|
1037
|
-
serializationFlags: flags,
|
|
1038
|
-
groupId,
|
|
1039
|
-
subgroupId,
|
|
1040
|
-
objectId,
|
|
1041
|
-
publisherPriority: prevPriority,
|
|
1042
|
-
payloadLength,
|
|
1043
|
-
payload
|
|
1770
|
+
ok: false,
|
|
1771
|
+
error: new DecodeError(
|
|
1772
|
+
"UNKNOWN_MESSAGE_TYPE",
|
|
1773
|
+
`Unknown message type ID: 0x${typeId.toString(16)}`,
|
|
1774
|
+
0
|
|
1775
|
+
)
|
|
1044
1776
|
};
|
|
1045
|
-
if (status !== void 0) obj.status = status;
|
|
1046
|
-
objects.push(obj);
|
|
1047
|
-
prevGroupId = groupId;
|
|
1048
|
-
prevSubgroupId = subgroupId;
|
|
1049
|
-
prevObjectId = objectId;
|
|
1050
|
-
first = false;
|
|
1051
1777
|
}
|
|
1052
|
-
return {
|
|
1053
|
-
ok: true,
|
|
1054
|
-
value: { type: "fetch", requestId, objects },
|
|
1055
|
-
bytesRead: r.offset
|
|
1056
|
-
};
|
|
1778
|
+
return { ok: true, value: message, bytesRead: reader.offset };
|
|
1057
1779
|
} catch (e) {
|
|
1058
|
-
if (e instanceof DecodeError)
|
|
1059
|
-
|
|
1060
|
-
}
|
|
1061
|
-
}
|
|
1062
|
-
function decodeDataStream(streamType, bytes) {
|
|
1063
|
-
switch (streamType) {
|
|
1064
|
-
case "subgroup":
|
|
1065
|
-
return decodeSubgroupStream(bytes);
|
|
1066
|
-
case "datagram":
|
|
1067
|
-
return decodeDatagram(bytes);
|
|
1068
|
-
case "fetch":
|
|
1069
|
-
return decodeFetchStream(bytes);
|
|
1070
|
-
default: {
|
|
1071
|
-
const _exhaustive = streamType;
|
|
1072
|
-
throw new Error(`Unknown stream type: ${_exhaustive}`);
|
|
1780
|
+
if (e instanceof DecodeError) {
|
|
1781
|
+
return { ok: false, error: e };
|
|
1073
1782
|
}
|
|
1783
|
+
throw e;
|
|
1074
1784
|
}
|
|
1075
1785
|
}
|
|
1076
1786
|
function createStreamDecoder() {
|
|
1077
1787
|
let buffer = new Uint8Array(0);
|
|
1788
|
+
let offset = 0;
|
|
1078
1789
|
return new TransformStream({
|
|
1079
1790
|
transform(chunk, controller) {
|
|
1791
|
+
if (offset > 0) {
|
|
1792
|
+
buffer = buffer.subarray(offset);
|
|
1793
|
+
offset = 0;
|
|
1794
|
+
}
|
|
1080
1795
|
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
1081
1796
|
newBuffer.set(buffer, 0);
|
|
1082
1797
|
newBuffer.set(chunk, buffer.length);
|
|
1083
1798
|
buffer = newBuffer;
|
|
1084
|
-
while (buffer.length
|
|
1085
|
-
const result = decodeMessage(buffer);
|
|
1799
|
+
while (offset < buffer.length) {
|
|
1800
|
+
const result = decodeMessage(buffer.subarray(offset));
|
|
1086
1801
|
if (!result.ok) {
|
|
1087
1802
|
if (result.error.code === "UNEXPECTED_END") {
|
|
1088
1803
|
break;
|
|
@@ -1091,11 +1806,11 @@ function createStreamDecoder() {
|
|
|
1091
1806
|
return;
|
|
1092
1807
|
}
|
|
1093
1808
|
controller.enqueue(result.value);
|
|
1094
|
-
|
|
1809
|
+
offset += result.bytesRead;
|
|
1095
1810
|
}
|
|
1096
1811
|
},
|
|
1097
1812
|
flush(controller) {
|
|
1098
|
-
if (buffer.length
|
|
1813
|
+
if (offset < buffer.length) {
|
|
1099
1814
|
controller.error(
|
|
1100
1815
|
new DecodeError("UNEXPECTED_END", "Stream ended with incomplete message data", 0)
|
|
1101
1816
|
);
|
|
@@ -1103,246 +1818,9 @@ function createStreamDecoder() {
|
|
|
1103
1818
|
}
|
|
1104
1819
|
});
|
|
1105
1820
|
}
|
|
1106
|
-
function createSubgroupStreamDecoder() {
|
|
1107
|
-
let buffer = new Uint8Array(0);
|
|
1108
|
-
let headerEmitted = false;
|
|
1109
|
-
let prevObjectId = -1n;
|
|
1110
|
-
let firstObject = true;
|
|
1111
|
-
let _subgroupIsFirstObjId = false;
|
|
1112
|
-
return new TransformStream({
|
|
1113
|
-
transform(chunk, controller) {
|
|
1114
|
-
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
1115
|
-
newBuffer.set(buffer, 0);
|
|
1116
|
-
newBuffer.set(chunk, buffer.length);
|
|
1117
|
-
buffer = newBuffer;
|
|
1118
|
-
if (!headerEmitted) {
|
|
1119
|
-
try {
|
|
1120
|
-
const r = new BufferReader(buffer);
|
|
1121
|
-
const streamType = Number(r.readVarInt());
|
|
1122
|
-
if (!(streamType >= 16 && streamType <= 29 || streamType >= 48 && streamType <= 61)) {
|
|
1123
|
-
controller.error(
|
|
1124
|
-
new DecodeError(
|
|
1125
|
-
"CONSTRAINT_VIOLATION",
|
|
1126
|
-
`Expected subgroup stream type, got 0x${streamType.toString(16)}`,
|
|
1127
|
-
0
|
|
1128
|
-
)
|
|
1129
|
-
);
|
|
1130
|
-
return;
|
|
1131
|
-
}
|
|
1132
|
-
const hasSubgroupField = (streamType & 4) !== 0;
|
|
1133
|
-
_subgroupIsFirstObjId = (streamType & 2) !== 0 && !hasSubgroupField;
|
|
1134
|
-
const hasPriority = streamType < 48;
|
|
1135
|
-
const trackAlias = r.readVarInt();
|
|
1136
|
-
const groupId = r.readVarInt();
|
|
1137
|
-
let subgroupId = 0n;
|
|
1138
|
-
if (hasSubgroupField) {
|
|
1139
|
-
subgroupId = r.readVarInt();
|
|
1140
|
-
}
|
|
1141
|
-
let publisherPriority = 128;
|
|
1142
|
-
if (hasPriority) {
|
|
1143
|
-
publisherPriority = r.readUint8();
|
|
1144
|
-
}
|
|
1145
|
-
controller.enqueue({
|
|
1146
|
-
type: "subgroup_header",
|
|
1147
|
-
trackAlias,
|
|
1148
|
-
groupId,
|
|
1149
|
-
subgroupId,
|
|
1150
|
-
publisherPriority
|
|
1151
|
-
});
|
|
1152
|
-
headerEmitted = true;
|
|
1153
|
-
buffer = buffer.slice(r.offset);
|
|
1154
|
-
} catch (e) {
|
|
1155
|
-
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
1156
|
-
return;
|
|
1157
|
-
}
|
|
1158
|
-
controller.error(e);
|
|
1159
|
-
return;
|
|
1160
|
-
}
|
|
1161
|
-
}
|
|
1162
|
-
while (buffer.length > 0) {
|
|
1163
|
-
try {
|
|
1164
|
-
const r = new BufferReader(buffer);
|
|
1165
|
-
const delta = r.readVarInt();
|
|
1166
|
-
let objectId;
|
|
1167
|
-
if (firstObject) {
|
|
1168
|
-
objectId = delta;
|
|
1169
|
-
firstObject = false;
|
|
1170
|
-
} else {
|
|
1171
|
-
objectId = prevObjectId + 1n + delta;
|
|
1172
|
-
}
|
|
1173
|
-
const payloadLength = Number(r.readVarInt());
|
|
1174
|
-
const payload = payloadLength > 0 ? r.readBytes(payloadLength) : new Uint8Array(0);
|
|
1175
|
-
controller.enqueue({ type: "object", objectId, payloadLength, payload });
|
|
1176
|
-
buffer = buffer.slice(r.offset);
|
|
1177
|
-
prevObjectId = objectId;
|
|
1178
|
-
} catch (e) {
|
|
1179
|
-
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
1180
|
-
break;
|
|
1181
|
-
}
|
|
1182
|
-
controller.error(e);
|
|
1183
|
-
return;
|
|
1184
|
-
}
|
|
1185
|
-
}
|
|
1186
|
-
},
|
|
1187
|
-
flush(controller) {
|
|
1188
|
-
if (buffer.length > 0) {
|
|
1189
|
-
controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
|
|
1190
|
-
}
|
|
1191
|
-
}
|
|
1192
|
-
});
|
|
1193
|
-
}
|
|
1194
|
-
function createFetchStreamDecoder() {
|
|
1195
|
-
let buffer = new Uint8Array(0);
|
|
1196
|
-
let headerEmitted = false;
|
|
1197
|
-
return new TransformStream({
|
|
1198
|
-
transform(chunk, controller) {
|
|
1199
|
-
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
1200
|
-
newBuffer.set(buffer, 0);
|
|
1201
|
-
newBuffer.set(chunk, buffer.length);
|
|
1202
|
-
buffer = newBuffer;
|
|
1203
|
-
if (!headerEmitted) {
|
|
1204
|
-
try {
|
|
1205
|
-
const r = new BufferReader(buffer);
|
|
1206
|
-
const streamType = r.readVarInt();
|
|
1207
|
-
if (streamType !== FETCH_STREAM_TYPE) {
|
|
1208
|
-
controller.error(
|
|
1209
|
-
new DecodeError(
|
|
1210
|
-
"CONSTRAINT_VIOLATION",
|
|
1211
|
-
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
1212
|
-
0
|
|
1213
|
-
)
|
|
1214
|
-
);
|
|
1215
|
-
return;
|
|
1216
|
-
}
|
|
1217
|
-
const requestId = r.readVarInt();
|
|
1218
|
-
controller.enqueue({ type: "fetch_header", requestId });
|
|
1219
|
-
headerEmitted = true;
|
|
1220
|
-
buffer = buffer.slice(r.offset);
|
|
1221
|
-
} catch (e) {
|
|
1222
|
-
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
1223
|
-
return;
|
|
1224
|
-
}
|
|
1225
|
-
controller.error(e);
|
|
1226
|
-
return;
|
|
1227
|
-
}
|
|
1228
|
-
}
|
|
1229
|
-
while (buffer.length > 0) {
|
|
1230
|
-
try {
|
|
1231
|
-
const r = new BufferReader(buffer);
|
|
1232
|
-
const flags = r.readUint8();
|
|
1233
|
-
const objectIdPresent = (flags & 4) !== 0;
|
|
1234
|
-
const groupIdPresent = (flags & 8) !== 0;
|
|
1235
|
-
const priorityPresent = (flags & 16) !== 0;
|
|
1236
|
-
const extensionsPresent = (flags & 32) !== 0;
|
|
1237
|
-
const subgroupEncoding = flags & 3;
|
|
1238
|
-
if (groupIdPresent) r.readVarInt();
|
|
1239
|
-
if (subgroupEncoding === 3) r.readVarInt();
|
|
1240
|
-
let objectId = 0n;
|
|
1241
|
-
if (objectIdPresent) objectId = r.readVarInt();
|
|
1242
|
-
if (priorityPresent) r.readUint8();
|
|
1243
|
-
if (extensionsPresent) {
|
|
1244
|
-
const extLen = Number(r.readVarInt());
|
|
1245
|
-
if (extLen > 0) r.readBytes(extLen);
|
|
1246
|
-
}
|
|
1247
|
-
const payloadLength = Number(r.readVarInt());
|
|
1248
|
-
const payload = payloadLength > 0 ? r.readBytes(payloadLength) : new Uint8Array(0);
|
|
1249
|
-
controller.enqueue({ type: "object", objectId, payloadLength, payload });
|
|
1250
|
-
buffer = buffer.slice(r.offset);
|
|
1251
|
-
} catch (e) {
|
|
1252
|
-
if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
|
|
1253
|
-
break;
|
|
1254
|
-
}
|
|
1255
|
-
controller.error(e);
|
|
1256
|
-
return;
|
|
1257
|
-
}
|
|
1258
|
-
}
|
|
1259
|
-
},
|
|
1260
|
-
flush(controller) {
|
|
1261
|
-
if (buffer.length > 0) {
|
|
1262
|
-
controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
|
|
1263
|
-
}
|
|
1264
|
-
}
|
|
1265
|
-
});
|
|
1266
|
-
}
|
|
1267
|
-
function createDataStreamDecoder() {
|
|
1268
|
-
let buffer = new Uint8Array(0);
|
|
1269
|
-
let inner = null;
|
|
1270
|
-
return new TransformStream({
|
|
1271
|
-
transform(chunk, controller) {
|
|
1272
|
-
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
1273
|
-
newBuffer.set(buffer, 0);
|
|
1274
|
-
newBuffer.set(chunk, buffer.length);
|
|
1275
|
-
buffer = newBuffer;
|
|
1276
|
-
if (inner === null) {
|
|
1277
|
-
if (buffer.length === 0) return;
|
|
1278
|
-
const firstByte = buffer[0];
|
|
1279
|
-
if (firstByte >= 16 && firstByte <= 29 || firstByte >= 48 && firstByte <= 61) {
|
|
1280
|
-
const decoder = createSubgroupStreamDecoder();
|
|
1281
|
-
inner = decoder;
|
|
1282
|
-
} else if (firstByte === 5) {
|
|
1283
|
-
const decoder = createFetchStreamDecoder();
|
|
1284
|
-
inner = decoder;
|
|
1285
|
-
} else {
|
|
1286
|
-
controller.error(
|
|
1287
|
-
new DecodeError(
|
|
1288
|
-
"CONSTRAINT_VIOLATION",
|
|
1289
|
-
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
1290
|
-
0
|
|
1291
|
-
)
|
|
1292
|
-
);
|
|
1293
|
-
return;
|
|
1294
|
-
}
|
|
1295
|
-
}
|
|
1296
|
-
},
|
|
1297
|
-
flush(controller) {
|
|
1298
|
-
if (buffer.length === 0) return;
|
|
1299
|
-
const firstByte = buffer[0];
|
|
1300
|
-
let result;
|
|
1301
|
-
if (firstByte >= 16 && firstByte <= 29 || firstByte >= 48 && firstByte <= 61) {
|
|
1302
|
-
result = decodeSubgroupStream(buffer);
|
|
1303
|
-
} else if (firstByte === 5) {
|
|
1304
|
-
result = decodeFetchStream(buffer);
|
|
1305
|
-
} else {
|
|
1306
|
-
controller.error(
|
|
1307
|
-
new DecodeError(
|
|
1308
|
-
"CONSTRAINT_VIOLATION",
|
|
1309
|
-
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
1310
|
-
0
|
|
1311
|
-
)
|
|
1312
|
-
);
|
|
1313
|
-
return;
|
|
1314
|
-
}
|
|
1315
|
-
if (!result.ok) {
|
|
1316
|
-
controller.error(result.error);
|
|
1317
|
-
return;
|
|
1318
|
-
}
|
|
1319
|
-
const stream = result.value;
|
|
1320
|
-
if (stream.type === "subgroup") {
|
|
1321
|
-
controller.enqueue({
|
|
1322
|
-
type: "subgroup_header",
|
|
1323
|
-
trackAlias: stream.trackAlias,
|
|
1324
|
-
groupId: stream.groupId,
|
|
1325
|
-
subgroupId: stream.subgroupId,
|
|
1326
|
-
publisherPriority: stream.publisherPriority
|
|
1327
|
-
});
|
|
1328
|
-
for (const obj of stream.objects) {
|
|
1329
|
-
controller.enqueue(obj);
|
|
1330
|
-
}
|
|
1331
|
-
} else if (stream.type === "fetch") {
|
|
1332
|
-
controller.enqueue({
|
|
1333
|
-
type: "fetch_header",
|
|
1334
|
-
requestId: stream.requestId
|
|
1335
|
-
});
|
|
1336
|
-
for (const obj of stream.objects) {
|
|
1337
|
-
controller.enqueue(obj);
|
|
1338
|
-
}
|
|
1339
|
-
}
|
|
1340
|
-
}
|
|
1341
|
-
});
|
|
1342
|
-
}
|
|
1343
1821
|
function createDraft17Codec() {
|
|
1344
1822
|
return {
|
|
1345
|
-
draft: "
|
|
1823
|
+
draft: "17",
|
|
1346
1824
|
encodeMessage,
|
|
1347
1825
|
decodeMessage,
|
|
1348
1826
|
encodeSubgroupStream,
|
|
@@ -1384,8 +1862,6 @@ export {
|
|
|
1384
1862
|
SETUP_OPT_MOQT_IMPLEMENTATION,
|
|
1385
1863
|
MESSAGE_TYPE_MAP,
|
|
1386
1864
|
MESSAGE_ID_MAP,
|
|
1387
|
-
encodeMessage,
|
|
1388
|
-
decodeMessage,
|
|
1389
1865
|
encodeSubgroupStream,
|
|
1390
1866
|
encodeDatagram,
|
|
1391
1867
|
encodeFetchStream,
|
|
@@ -1393,9 +1869,11 @@ export {
|
|
|
1393
1869
|
decodeDatagram,
|
|
1394
1870
|
decodeFetchStream,
|
|
1395
1871
|
decodeDataStream,
|
|
1396
|
-
createStreamDecoder,
|
|
1397
1872
|
createSubgroupStreamDecoder,
|
|
1398
1873
|
createFetchStreamDecoder,
|
|
1399
1874
|
createDataStreamDecoder,
|
|
1875
|
+
encodeMessage,
|
|
1876
|
+
decodeMessage,
|
|
1877
|
+
createStreamDecoder,
|
|
1400
1878
|
createDraft17Codec
|
|
1401
1879
|
};
|