@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,7 +1,7 @@
|
|
|
1
|
-
import { BufferReader } from
|
|
2
|
-
import { BufferWriter } from
|
|
3
|
-
import type { DecodeResult } from
|
|
4
|
-
import { DecodeError } from
|
|
1
|
+
import { BufferReader } from '../../core/buffer-reader.js'
|
|
2
|
+
import { BufferWriter } from '../../core/buffer-writer.js'
|
|
3
|
+
import type { DecodeResult } from '../../core/types.js'
|
|
4
|
+
import { DecodeError } from '../../core/types.js'
|
|
5
5
|
import type {
|
|
6
6
|
DatagramObject,
|
|
7
7
|
DataStreamEvent,
|
|
@@ -12,109 +12,214 @@ import type {
|
|
|
12
12
|
ObjectPayload,
|
|
13
13
|
SubgroupStream,
|
|
14
14
|
SubgroupStreamHeader,
|
|
15
|
-
} from
|
|
15
|
+
} from './types.js'
|
|
16
16
|
|
|
17
|
-
// ─── Data Stream Encoding/Decoding
|
|
17
|
+
// ─── Data Stream Encoding/Decoding ─────────────────────────────────────────
|
|
18
18
|
|
|
19
|
-
const FETCH_STREAM_TYPE = 0x05n
|
|
19
|
+
const FETCH_STREAM_TYPE = 0x05n
|
|
20
|
+
|
|
21
|
+
// Object property type IDs
|
|
22
|
+
const OBJPROP_PRIOR_GROUP_ID_GAP = 0x3cn
|
|
23
|
+
const OBJPROP_PRIOR_OBJECT_ID_GAP = 0x3en
|
|
24
|
+
// We decode all even props as varint, odd as length-prefixed.
|
|
25
|
+
// Known props get named keys; unknown get hex IDs.
|
|
26
|
+
|
|
27
|
+
const KNOWN_OBJ_PROPS: ReadonlyMap<bigint, string> = new Map([
|
|
28
|
+
[OBJPROP_PRIOR_OBJECT_ID_GAP, 'prior_object_id_gap'],
|
|
29
|
+
[OBJPROP_PRIOR_GROUP_ID_GAP, 'prior_group_id_gap'],
|
|
30
|
+
])
|
|
31
|
+
|
|
32
|
+
function decodeObjectProperties(r: BufferReader, propsLength: number): Record<string, bigint> {
|
|
33
|
+
const endOff = r.offset + propsLength
|
|
34
|
+
const props: Record<string, bigint> = {}
|
|
35
|
+
let prevType = 0n
|
|
36
|
+
|
|
37
|
+
while (r.offset < endOff) {
|
|
38
|
+
const delta = r.readVarInt()
|
|
39
|
+
const propType = prevType + delta
|
|
40
|
+
prevType = propType
|
|
41
|
+
|
|
42
|
+
if (propType % 2n === 0n) {
|
|
43
|
+
const value = r.readVarInt()
|
|
44
|
+
const name = KNOWN_OBJ_PROPS.get(propType) ?? `0x${propType.toString(16)}`
|
|
45
|
+
props[name] = value
|
|
46
|
+
} else {
|
|
47
|
+
const length = Number(r.readVarInt())
|
|
48
|
+
// Skip unknown odd properties
|
|
49
|
+
r.readBytes(length)
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return props
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function encodeObjectProperties(props: Record<string, bigint>, w: BufferWriter): void {
|
|
56
|
+
// Build entries with type IDs
|
|
57
|
+
const reverseMap = new Map<string, bigint>()
|
|
58
|
+
for (const [id, name] of KNOWN_OBJ_PROPS) {
|
|
59
|
+
reverseMap.set(name, id)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const entries: Array<{ type: bigint; value: bigint }> = []
|
|
63
|
+
for (const [name, value] of Object.entries(props)) {
|
|
64
|
+
const typeId = reverseMap.get(name)
|
|
65
|
+
if (typeId !== undefined) {
|
|
66
|
+
entries.push({ type: typeId, value })
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
entries.sort((a, b) => (a.type < b.type ? -1 : a.type > b.type ? 1 : 0))
|
|
70
|
+
|
|
71
|
+
let prevType = 0n
|
|
72
|
+
for (const entry of entries) {
|
|
73
|
+
w.writeVarInt(entry.type - prevType)
|
|
74
|
+
w.writeVarInt(entry.value)
|
|
75
|
+
prevType = entry.type
|
|
76
|
+
}
|
|
77
|
+
}
|
|
20
78
|
|
|
21
79
|
export function encodeSubgroupStream(stream: SubgroupStream): Uint8Array {
|
|
22
|
-
const w = new BufferWriter()
|
|
23
|
-
const streamType = stream.headerType
|
|
24
|
-
w.writeVarInt(BigInt(streamType))
|
|
80
|
+
const w = new BufferWriter()
|
|
81
|
+
const streamType = stream.headerType
|
|
82
|
+
w.writeVarInt(BigInt(streamType))
|
|
25
83
|
|
|
26
|
-
const
|
|
27
|
-
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
28
|
-
const hasPriority = streamType < 0x30
|
|
84
|
+
const propertiesPresent = (streamType & 0x01) !== 0
|
|
85
|
+
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
86
|
+
const hasPriority = streamType < 0x30
|
|
29
87
|
|
|
30
|
-
w.writeVarInt(stream.trackAlias)
|
|
31
|
-
w.writeVarInt(stream.groupId)
|
|
88
|
+
w.writeVarInt(stream.trackAlias)
|
|
89
|
+
w.writeVarInt(stream.groupId)
|
|
32
90
|
if (hasSubgroupField) {
|
|
33
|
-
w.writeVarInt(stream.subgroupId)
|
|
91
|
+
w.writeVarInt(stream.subgroupId)
|
|
34
92
|
}
|
|
35
93
|
if (hasPriority) {
|
|
36
|
-
w.writeUint8(stream.publisherPriority)
|
|
94
|
+
w.writeUint8(stream.publisherPriority)
|
|
37
95
|
}
|
|
38
|
-
let prevObjectId = -1n
|
|
96
|
+
let prevObjectId = -1n
|
|
39
97
|
for (const obj of stream.objects) {
|
|
40
|
-
const delta = prevObjectId < 0n ? obj.objectId : obj.objectId - prevObjectId - 1n
|
|
41
|
-
w.writeVarInt(delta)
|
|
42
|
-
if (
|
|
43
|
-
|
|
44
|
-
|
|
98
|
+
const delta = prevObjectId < 0n ? obj.objectId : obj.objectId - prevObjectId - 1n
|
|
99
|
+
w.writeVarInt(delta)
|
|
100
|
+
if (propertiesPresent) {
|
|
101
|
+
if (obj.objectProperties && Object.keys(obj.objectProperties).length > 0) {
|
|
102
|
+
const tmpW = new BufferWriter(32)
|
|
103
|
+
encodeObjectProperties(obj.objectProperties, tmpW)
|
|
104
|
+
const raw = tmpW.finish()
|
|
105
|
+
w.writeVarInt(BigInt(raw.byteLength))
|
|
106
|
+
w.writeBytes(raw)
|
|
107
|
+
} else {
|
|
108
|
+
w.writeVarInt(0n)
|
|
109
|
+
}
|
|
45
110
|
}
|
|
46
|
-
w.writeVarInt(BigInt(obj.payloadLength))
|
|
111
|
+
w.writeVarInt(BigInt(obj.payloadLength))
|
|
47
112
|
if (obj.payloadLength === 0) {
|
|
48
|
-
w.writeVarInt(obj.status ?? 0n)
|
|
113
|
+
w.writeVarInt(obj.status ?? 0n)
|
|
49
114
|
} else {
|
|
50
|
-
w.writeBytes(obj.payload)
|
|
115
|
+
w.writeBytes(obj.payload)
|
|
51
116
|
}
|
|
52
|
-
prevObjectId = obj.objectId
|
|
117
|
+
prevObjectId = obj.objectId
|
|
53
118
|
}
|
|
54
|
-
return w.finish()
|
|
119
|
+
return w.finish()
|
|
55
120
|
}
|
|
56
121
|
|
|
57
122
|
export function encodeDatagram(dg: DatagramObject): Uint8Array {
|
|
58
|
-
const w = new BufferWriter()
|
|
59
|
-
const dgType = dg.datagramType
|
|
60
|
-
w.writeVarInt(BigInt(dgType))
|
|
61
|
-
w.writeVarInt(dg.trackAlias)
|
|
62
|
-
w.writeVarInt(dg.groupId)
|
|
123
|
+
const w = new BufferWriter()
|
|
124
|
+
const dgType = dg.datagramType
|
|
125
|
+
w.writeVarInt(BigInt(dgType))
|
|
126
|
+
w.writeVarInt(dg.trackAlias)
|
|
127
|
+
w.writeVarInt(dg.groupId)
|
|
63
128
|
|
|
64
|
-
const objectIdAbsent = (dgType & 0x04) !== 0
|
|
65
|
-
const isStatus = (dgType & 0x20) !== 0
|
|
66
|
-
const defaultPriority = (dgType & 0x08) !== 0
|
|
129
|
+
const objectIdAbsent = (dgType & 0x04) !== 0
|
|
130
|
+
const isStatus = (dgType & 0x20) !== 0
|
|
131
|
+
const defaultPriority = (dgType & 0x08) !== 0
|
|
132
|
+
const propertiesPresent = (dgType & 0x01) !== 0
|
|
67
133
|
|
|
68
134
|
if (!objectIdAbsent) {
|
|
69
|
-
w.writeVarInt(dg.objectId)
|
|
135
|
+
w.writeVarInt(dg.objectId)
|
|
70
136
|
}
|
|
71
137
|
if (!defaultPriority) {
|
|
72
|
-
w.writeUint8(dg.publisherPriority)
|
|
138
|
+
w.writeUint8(dg.publisherPriority)
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (propertiesPresent) {
|
|
142
|
+
if (dg.objectProperties && Object.keys(dg.objectProperties).length > 0) {
|
|
143
|
+
const tmpW = new BufferWriter(32)
|
|
144
|
+
encodeObjectProperties(dg.objectProperties, tmpW)
|
|
145
|
+
const raw = tmpW.finish()
|
|
146
|
+
w.writeVarInt(BigInt(raw.byteLength))
|
|
147
|
+
w.writeBytes(raw)
|
|
148
|
+
} else {
|
|
149
|
+
w.writeVarInt(0n)
|
|
150
|
+
}
|
|
73
151
|
}
|
|
74
152
|
|
|
75
153
|
if (isStatus) {
|
|
76
|
-
w.writeVarInt(dg.objectStatus ?? 0n)
|
|
154
|
+
w.writeVarInt(dg.objectStatus ?? 0n)
|
|
77
155
|
} else {
|
|
78
|
-
w.writeBytes(dg.payload)
|
|
156
|
+
w.writeBytes(dg.payload)
|
|
79
157
|
}
|
|
80
|
-
return w.finish()
|
|
158
|
+
return w.finish()
|
|
81
159
|
}
|
|
82
160
|
|
|
83
161
|
export function encodeFetchStream(stream: FetchStream): Uint8Array {
|
|
84
|
-
const w = new BufferWriter()
|
|
85
|
-
w.writeVarInt(FETCH_STREAM_TYPE)
|
|
86
|
-
w.writeVarInt(stream.requestId)
|
|
162
|
+
const w = new BufferWriter()
|
|
163
|
+
w.writeVarInt(FETCH_STREAM_TYPE)
|
|
164
|
+
w.writeVarInt(stream.requestId)
|
|
87
165
|
for (const obj of stream.objects) {
|
|
88
|
-
w.writeVarInt(BigInt(obj.serializationFlags))
|
|
89
|
-
const flags = obj.serializationFlags
|
|
166
|
+
w.writeVarInt(BigInt(obj.serializationFlags))
|
|
167
|
+
const flags = obj.serializationFlags
|
|
90
168
|
if (flags >= 0x80) {
|
|
91
169
|
// End of Range (0x8C, 0x10C): Group ID, Object ID, PayloadLength=0
|
|
92
|
-
w.writeVarInt(obj.groupId)
|
|
93
|
-
w.writeVarInt(obj.objectId)
|
|
94
|
-
w.writeVarInt(BigInt(obj.payloadLength))
|
|
170
|
+
w.writeVarInt(obj.groupId)
|
|
171
|
+
w.writeVarInt(obj.objectId)
|
|
172
|
+
w.writeVarInt(BigInt(obj.payloadLength))
|
|
173
|
+
} else if (flags & 0x40) {
|
|
174
|
+
// DATAGRAM mode: no subgroup_id field
|
|
175
|
+
if (flags & 0x08) w.writeVarInt(obj.groupId)
|
|
176
|
+
if (flags & 0x04) w.writeVarInt(obj.objectId)
|
|
177
|
+
if (flags & 0x10) w.writeUint8(obj.publisherPriority)
|
|
178
|
+
if (flags & 0x20) {
|
|
179
|
+
if (obj.objectProperties && Object.keys(obj.objectProperties).length > 0) {
|
|
180
|
+
const tmpW = new BufferWriter(32)
|
|
181
|
+
encodeObjectProperties(obj.objectProperties, tmpW)
|
|
182
|
+
const raw = tmpW.finish()
|
|
183
|
+
w.writeVarInt(BigInt(raw.byteLength))
|
|
184
|
+
w.writeBytes(raw)
|
|
185
|
+
} else {
|
|
186
|
+
w.writeVarInt(0n)
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
w.writeVarInt(BigInt(obj.payloadLength))
|
|
190
|
+
if (obj.payloadLength > 0) {
|
|
191
|
+
w.writeBytes(obj.payload)
|
|
192
|
+
}
|
|
95
193
|
} else {
|
|
96
|
-
if (flags & 0x08) w.writeVarInt(obj.groupId)
|
|
97
|
-
const subgroupEncoding = flags & 0x03
|
|
98
|
-
if (subgroupEncoding === 0x03) w.writeVarInt(obj.subgroupId)
|
|
99
|
-
if (flags & 0x04) w.writeVarInt(obj.objectId)
|
|
100
|
-
if (flags & 0x10) w.writeUint8(obj.publisherPriority)
|
|
194
|
+
if (flags & 0x08) w.writeVarInt(obj.groupId)
|
|
195
|
+
const subgroupEncoding = flags & 0x03
|
|
196
|
+
if (subgroupEncoding === 0x03) w.writeVarInt(obj.subgroupId)
|
|
197
|
+
if (flags & 0x04) w.writeVarInt(obj.objectId)
|
|
198
|
+
if (flags & 0x10) w.writeUint8(obj.publisherPriority)
|
|
101
199
|
if (flags & 0x20) {
|
|
102
|
-
|
|
103
|
-
|
|
200
|
+
if (obj.objectProperties && Object.keys(obj.objectProperties).length > 0) {
|
|
201
|
+
const tmpW = new BufferWriter(32)
|
|
202
|
+
encodeObjectProperties(obj.objectProperties, tmpW)
|
|
203
|
+
const raw = tmpW.finish()
|
|
204
|
+
w.writeVarInt(BigInt(raw.byteLength))
|
|
205
|
+
w.writeBytes(raw)
|
|
206
|
+
} else {
|
|
207
|
+
w.writeVarInt(0n)
|
|
208
|
+
}
|
|
104
209
|
}
|
|
105
|
-
w.writeVarInt(BigInt(obj.payloadLength))
|
|
210
|
+
w.writeVarInt(BigInt(obj.payloadLength))
|
|
106
211
|
if (obj.payloadLength > 0) {
|
|
107
|
-
w.writeBytes(obj.payload)
|
|
212
|
+
w.writeBytes(obj.payload)
|
|
108
213
|
}
|
|
109
214
|
}
|
|
110
215
|
}
|
|
111
|
-
return w.finish()
|
|
216
|
+
return w.finish()
|
|
112
217
|
}
|
|
113
218
|
|
|
114
219
|
export function decodeSubgroupStream(bytes: Uint8Array): DecodeResult<SubgroupStream> {
|
|
115
220
|
try {
|
|
116
|
-
const r = new BufferReader(bytes)
|
|
117
|
-
const streamType = Number(r.readVarInt())
|
|
221
|
+
const r = new BufferReader(bytes)
|
|
222
|
+
const streamType = Number(r.readVarInt())
|
|
118
223
|
|
|
119
224
|
if (
|
|
120
225
|
!((streamType >= 0x10 && streamType <= 0x1d) || (streamType >= 0x30 && streamType <= 0x3d)) ||
|
|
@@ -123,124 +228,150 @@ export function decodeSubgroupStream(bytes: Uint8Array): DecodeResult<SubgroupSt
|
|
|
123
228
|
return {
|
|
124
229
|
ok: false,
|
|
125
230
|
error: new DecodeError(
|
|
126
|
-
|
|
231
|
+
'CONSTRAINT_VIOLATION',
|
|
127
232
|
`Expected subgroup stream type 0x10-0x15/0x18-0x1D/0x30-0x35/0x38-0x3D, got 0x${streamType.toString(16)}`,
|
|
128
233
|
0,
|
|
129
234
|
),
|
|
130
|
-
}
|
|
235
|
+
}
|
|
131
236
|
}
|
|
132
237
|
|
|
133
|
-
const
|
|
134
|
-
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
135
|
-
const subgroupIsFirstObjId = (streamType & 0x02) !== 0 && !hasSubgroupField
|
|
136
|
-
const hasPriority = streamType < 0x30
|
|
238
|
+
const propertiesPresent = (streamType & 0x01) !== 0
|
|
239
|
+
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
240
|
+
const subgroupIsFirstObjId = (streamType & 0x02) !== 0 && !hasSubgroupField
|
|
241
|
+
const hasPriority = streamType < 0x30
|
|
242
|
+
const endOfGroup = (streamType & 0x08) !== 0
|
|
137
243
|
|
|
138
|
-
const trackAlias = r.readVarInt()
|
|
139
|
-
const groupId = r.readVarInt()
|
|
244
|
+
const trackAlias = r.readVarInt()
|
|
245
|
+
const groupId = r.readVarInt()
|
|
140
246
|
|
|
141
|
-
let subgroupId = 0n
|
|
247
|
+
let subgroupId = 0n
|
|
142
248
|
if (hasSubgroupField) {
|
|
143
|
-
subgroupId = r.readVarInt()
|
|
249
|
+
subgroupId = r.readVarInt()
|
|
144
250
|
}
|
|
145
251
|
|
|
146
|
-
let publisherPriority = 128
|
|
252
|
+
let publisherPriority = 128
|
|
147
253
|
if (hasPriority) {
|
|
148
|
-
publisherPriority = r.readUint8()
|
|
254
|
+
publisherPriority = r.readUint8()
|
|
149
255
|
}
|
|
150
256
|
|
|
151
|
-
const objects: ObjectPayload[] = []
|
|
152
|
-
let prevObjectId = -1n
|
|
153
|
-
let firstObject = true
|
|
257
|
+
const objects: ObjectPayload[] = []
|
|
258
|
+
let prevObjectId = -1n
|
|
259
|
+
let firstObject = true
|
|
154
260
|
|
|
155
261
|
while (r.remaining > 0) {
|
|
156
|
-
const byteOffset = r.offset
|
|
157
|
-
const delta = r.readVarInt()
|
|
158
|
-
let objectId: bigint
|
|
262
|
+
const byteOffset = r.offset
|
|
263
|
+
const delta = r.readVarInt()
|
|
264
|
+
let objectId: bigint
|
|
159
265
|
if (firstObject) {
|
|
160
|
-
objectId = delta
|
|
266
|
+
objectId = delta
|
|
161
267
|
if (subgroupIsFirstObjId && firstObject) {
|
|
162
|
-
subgroupId = objectId
|
|
268
|
+
subgroupId = objectId
|
|
163
269
|
}
|
|
164
|
-
firstObject = false
|
|
270
|
+
firstObject = false
|
|
165
271
|
} else {
|
|
166
|
-
objectId = prevObjectId + 1n + delta
|
|
272
|
+
objectId = prevObjectId + 1n + delta
|
|
167
273
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
274
|
+
const extensionData = new Uint8Array(0)
|
|
275
|
+
let objectProperties: Record<string, bigint> | undefined
|
|
276
|
+
if (propertiesPresent) {
|
|
277
|
+
const propsLen = Number(r.readVarInt())
|
|
278
|
+
if (propsLen > 0) {
|
|
279
|
+
objectProperties = decodeObjectProperties(r, propsLen)
|
|
280
|
+
}
|
|
172
281
|
}
|
|
173
|
-
const payloadLength = Number(r.readVarInt())
|
|
174
|
-
let payload: Uint8Array
|
|
175
|
-
let status: bigint | undefined
|
|
176
|
-
let payloadByteOffset: number
|
|
282
|
+
const payloadLength = Number(r.readVarInt())
|
|
283
|
+
let payload: Uint8Array
|
|
284
|
+
let status: bigint | undefined
|
|
285
|
+
let payloadByteOffset: number
|
|
177
286
|
if (payloadLength === 0) {
|
|
178
|
-
status = r.readVarInt()
|
|
179
|
-
payloadByteOffset = r.offset
|
|
180
|
-
payload = new Uint8Array(0)
|
|
287
|
+
status = r.readVarInt()
|
|
288
|
+
payloadByteOffset = r.offset
|
|
289
|
+
payload = new Uint8Array(0)
|
|
181
290
|
} else {
|
|
182
|
-
payloadByteOffset = r.offset
|
|
183
|
-
payload = r.
|
|
291
|
+
payloadByteOffset = r.offset
|
|
292
|
+
payload = r.readBytesView(payloadLength)
|
|
184
293
|
}
|
|
185
|
-
const obj: ObjectPayload = {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
294
|
+
const obj: ObjectPayload = {
|
|
295
|
+
type: 'object',
|
|
296
|
+
byteOffset,
|
|
297
|
+
payloadByteOffset,
|
|
298
|
+
objectId,
|
|
299
|
+
payloadLength,
|
|
300
|
+
payload,
|
|
301
|
+
extensionData,
|
|
302
|
+
}
|
|
303
|
+
if (status !== undefined) (obj as unknown as Record<string, unknown>).status = status
|
|
304
|
+
if (objectProperties !== undefined)
|
|
305
|
+
(obj as unknown as Record<string, unknown>).objectProperties = objectProperties
|
|
306
|
+
objects.push(obj)
|
|
307
|
+
prevObjectId = objectId
|
|
189
308
|
}
|
|
190
309
|
|
|
310
|
+
const result: SubgroupStream = {
|
|
311
|
+
type: 'subgroup',
|
|
312
|
+
headerType: streamType,
|
|
313
|
+
trackAlias,
|
|
314
|
+
groupId,
|
|
315
|
+
subgroupId,
|
|
316
|
+
publisherPriority,
|
|
317
|
+
objects,
|
|
318
|
+
}
|
|
319
|
+
if (endOfGroup) (result as unknown as Record<string, unknown>).endOfGroup = true
|
|
320
|
+
|
|
191
321
|
return {
|
|
192
322
|
ok: true,
|
|
193
|
-
value:
|
|
194
|
-
type: "subgroup",
|
|
195
|
-
headerType: streamType,
|
|
196
|
-
trackAlias,
|
|
197
|
-
groupId,
|
|
198
|
-
subgroupId,
|
|
199
|
-
publisherPriority,
|
|
200
|
-
objects,
|
|
201
|
-
},
|
|
323
|
+
value: result,
|
|
202
324
|
bytesRead: r.offset,
|
|
203
|
-
}
|
|
325
|
+
}
|
|
204
326
|
} catch (e) {
|
|
205
|
-
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
206
|
-
throw e
|
|
327
|
+
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
328
|
+
throw e
|
|
207
329
|
}
|
|
208
330
|
}
|
|
209
331
|
|
|
210
332
|
export function decodeDatagram(bytes: Uint8Array): DecodeResult<DatagramObject> {
|
|
211
333
|
try {
|
|
212
|
-
const r = new BufferReader(bytes)
|
|
213
|
-
const dgType = Number(r.readVarInt())
|
|
214
|
-
|
|
215
|
-
const objectIdAbsent = (dgType & 0x04) !== 0
|
|
216
|
-
const endOfGroup = (dgType & 0x02) !== 0
|
|
217
|
-
const isStatus = (dgType & 0x20) !== 0
|
|
218
|
-
const defaultPriority = (dgType & 0x08) !== 0
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
const
|
|
222
|
-
|
|
334
|
+
const r = new BufferReader(bytes)
|
|
335
|
+
const dgType = Number(r.readVarInt())
|
|
336
|
+
|
|
337
|
+
const objectIdAbsent = (dgType & 0x04) !== 0
|
|
338
|
+
const endOfGroup = (dgType & 0x02) !== 0
|
|
339
|
+
const isStatus = (dgType & 0x20) !== 0
|
|
340
|
+
const defaultPriority = (dgType & 0x08) !== 0
|
|
341
|
+
const propertiesPresent = (dgType & 0x01) !== 0
|
|
342
|
+
|
|
343
|
+
const trackAlias = r.readVarInt()
|
|
344
|
+
const groupId = r.readVarInt()
|
|
345
|
+
let objectId = 0n
|
|
223
346
|
if (!objectIdAbsent) {
|
|
224
|
-
objectId = r.readVarInt()
|
|
347
|
+
objectId = r.readVarInt()
|
|
225
348
|
}
|
|
226
349
|
|
|
227
|
-
let publisherPriority = 128
|
|
350
|
+
let publisherPriority = 128
|
|
228
351
|
if (!defaultPriority) {
|
|
229
|
-
publisherPriority = r.readUint8()
|
|
352
|
+
publisherPriority = r.readUint8()
|
|
230
353
|
}
|
|
231
354
|
|
|
232
|
-
let
|
|
233
|
-
|
|
355
|
+
let objectProperties: Record<string, bigint> | undefined
|
|
356
|
+
if (propertiesPresent) {
|
|
357
|
+
const propsLen = Number(r.readVarInt())
|
|
358
|
+
if (propsLen > 0) {
|
|
359
|
+
objectProperties = decodeObjectProperties(r, propsLen)
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
let objectStatus: bigint | undefined
|
|
364
|
+
let payload: Uint8Array
|
|
234
365
|
if (isStatus) {
|
|
235
|
-
objectStatus = r.readVarInt()
|
|
236
|
-
payload = new Uint8Array(0)
|
|
366
|
+
objectStatus = r.readVarInt()
|
|
367
|
+
payload = new Uint8Array(0)
|
|
237
368
|
} else {
|
|
238
|
-
payload = r.
|
|
369
|
+
payload = r.readBytesView(r.remaining)
|
|
239
370
|
}
|
|
240
|
-
const payloadLength = payload.byteLength
|
|
371
|
+
const payloadLength = payload.byteLength
|
|
241
372
|
|
|
242
373
|
const result: DatagramObject = {
|
|
243
|
-
type:
|
|
374
|
+
type: 'datagram',
|
|
244
375
|
datagramType: dgType,
|
|
245
376
|
trackAlias,
|
|
246
377
|
groupId,
|
|
@@ -248,53 +379,55 @@ export function decodeDatagram(bytes: Uint8Array): DecodeResult<DatagramObject>
|
|
|
248
379
|
publisherPriority,
|
|
249
380
|
payloadLength,
|
|
250
381
|
payload,
|
|
251
|
-
}
|
|
382
|
+
}
|
|
252
383
|
|
|
253
|
-
if (endOfGroup) (result as unknown as Record<string, unknown>).endOfGroup = true
|
|
384
|
+
if (endOfGroup) (result as unknown as Record<string, unknown>).endOfGroup = true
|
|
254
385
|
if (objectStatus !== undefined)
|
|
255
|
-
(result as unknown as Record<string, unknown>).objectStatus = objectStatus
|
|
386
|
+
(result as unknown as Record<string, unknown>).objectStatus = objectStatus
|
|
387
|
+
if (objectProperties !== undefined)
|
|
388
|
+
(result as unknown as Record<string, unknown>).objectProperties = objectProperties
|
|
256
389
|
|
|
257
|
-
return { ok: true, value: result, bytesRead: r.offset }
|
|
390
|
+
return { ok: true, value: result, bytesRead: r.offset }
|
|
258
391
|
} catch (e) {
|
|
259
|
-
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
260
|
-
throw e
|
|
392
|
+
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
393
|
+
throw e
|
|
261
394
|
}
|
|
262
395
|
}
|
|
263
396
|
|
|
264
397
|
export function decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream> {
|
|
265
398
|
try {
|
|
266
|
-
const r = new BufferReader(bytes)
|
|
267
|
-
const streamType = r.readVarInt()
|
|
399
|
+
const r = new BufferReader(bytes)
|
|
400
|
+
const streamType = r.readVarInt()
|
|
268
401
|
if (streamType !== FETCH_STREAM_TYPE) {
|
|
269
402
|
return {
|
|
270
403
|
ok: false,
|
|
271
404
|
error: new DecodeError(
|
|
272
|
-
|
|
405
|
+
'CONSTRAINT_VIOLATION',
|
|
273
406
|
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
274
407
|
0,
|
|
275
408
|
),
|
|
276
|
-
}
|
|
409
|
+
}
|
|
277
410
|
}
|
|
278
|
-
const requestId = r.readVarInt()
|
|
279
|
-
const objects: FetchObjectPayload[] = []
|
|
411
|
+
const requestId = r.readVarInt()
|
|
412
|
+
const objects: FetchObjectPayload[] = []
|
|
280
413
|
|
|
281
|
-
let prevGroupId = 0n
|
|
282
|
-
let prevSubgroupId = 0n
|
|
283
|
-
let prevObjectId = 0n
|
|
284
|
-
let prevPriority = 128
|
|
285
|
-
let first = true
|
|
414
|
+
let prevGroupId = 0n
|
|
415
|
+
let prevSubgroupId = 0n
|
|
416
|
+
let prevObjectId = 0n
|
|
417
|
+
let prevPriority = 128
|
|
418
|
+
let first = true
|
|
286
419
|
|
|
287
420
|
while (r.remaining > 0) {
|
|
288
|
-
const byteOffset = r.offset
|
|
289
|
-
const flags = Number(r.readVarInt())
|
|
421
|
+
const byteOffset = r.offset
|
|
422
|
+
const flags = Number(r.readVarInt())
|
|
290
423
|
|
|
291
|
-
let groupId = prevGroupId
|
|
292
|
-
let subgroupId = prevSubgroupId
|
|
293
|
-
let objectId = prevObjectId + 1n
|
|
294
|
-
let payloadLength: number
|
|
295
|
-
let payload: Uint8Array
|
|
296
|
-
let payloadByteOffset: number
|
|
297
|
-
|
|
424
|
+
let groupId = prevGroupId
|
|
425
|
+
let subgroupId = prevSubgroupId
|
|
426
|
+
let objectId = prevObjectId + 1n
|
|
427
|
+
let payloadLength: number
|
|
428
|
+
let payload: Uint8Array
|
|
429
|
+
let payloadByteOffset: number
|
|
430
|
+
const extensionData = new Uint8Array(0)
|
|
298
431
|
|
|
299
432
|
if (flags >= 0x80) {
|
|
300
433
|
// End of Range: 0x8C = End of Non-Existent Range, 0x10C = End of Unknown Range
|
|
@@ -304,109 +437,171 @@ export function decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream>
|
|
|
304
437
|
return {
|
|
305
438
|
ok: false,
|
|
306
439
|
error: new DecodeError(
|
|
307
|
-
|
|
440
|
+
'CONSTRAINT_VIOLATION',
|
|
308
441
|
`Unknown serialization flags value: 0x${flags.toString(16)}`,
|
|
309
442
|
r.offset,
|
|
310
443
|
),
|
|
311
|
-
}
|
|
444
|
+
}
|
|
312
445
|
}
|
|
313
|
-
groupId = r.readVarInt()
|
|
314
|
-
objectId = r.readVarInt()
|
|
315
|
-
payloadLength = Number(r.readVarInt())
|
|
316
|
-
payloadByteOffset = r.offset
|
|
317
|
-
payload = payloadLength > 0 ? r.
|
|
318
|
-
} else {
|
|
319
|
-
|
|
320
|
-
const objectIdPresent = (flags & 0x04) !== 0
|
|
321
|
-
const groupIdPresent = (flags & 0x08) !== 0
|
|
322
|
-
const priorityPresent = (flags & 0x10) !== 0
|
|
323
|
-
const
|
|
446
|
+
groupId = r.readVarInt()
|
|
447
|
+
objectId = r.readVarInt()
|
|
448
|
+
payloadLength = Number(r.readVarInt())
|
|
449
|
+
payloadByteOffset = r.offset
|
|
450
|
+
payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0)
|
|
451
|
+
} else if (flags & 0x40) {
|
|
452
|
+
// DATAGRAM mode: no subgroup_id field
|
|
453
|
+
const objectIdPresent = (flags & 0x04) !== 0
|
|
454
|
+
const groupIdPresent = (flags & 0x08) !== 0
|
|
455
|
+
const priorityPresent = (flags & 0x10) !== 0
|
|
456
|
+
const propsPresent = (flags & 0x20) !== 0
|
|
324
457
|
|
|
325
|
-
if (
|
|
326
|
-
|
|
327
|
-
ok: false,
|
|
328
|
-
error: new DecodeError(
|
|
329
|
-
"CONSTRAINT_VIOLATION",
|
|
330
|
-
"Reserved bits set in fetch object flags",
|
|
331
|
-
r.offset,
|
|
332
|
-
),
|
|
333
|
-
};
|
|
458
|
+
if (groupIdPresent) {
|
|
459
|
+
groupId = r.readVarInt()
|
|
334
460
|
}
|
|
461
|
+
// No subgroup in datagram mode
|
|
462
|
+
if (objectIdPresent) {
|
|
463
|
+
objectId = r.readVarInt()
|
|
464
|
+
}
|
|
465
|
+
if (priorityPresent) {
|
|
466
|
+
prevPriority = r.readUint8()
|
|
467
|
+
}
|
|
468
|
+
let objectProperties: Record<string, bigint> | undefined
|
|
469
|
+
if (propsPresent) {
|
|
470
|
+
const propsLen = Number(r.readVarInt())
|
|
471
|
+
if (propsLen > 0) {
|
|
472
|
+
objectProperties = decodeObjectProperties(r, propsLen)
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
payloadLength = Number(r.readVarInt())
|
|
476
|
+
payloadByteOffset = r.offset
|
|
477
|
+
payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0)
|
|
478
|
+
|
|
479
|
+
const obj: FetchObjectPayload = {
|
|
480
|
+
type: 'object',
|
|
481
|
+
byteOffset,
|
|
482
|
+
payloadByteOffset,
|
|
483
|
+
serializationFlags: flags,
|
|
484
|
+
groupId,
|
|
485
|
+
subgroupId: 0n,
|
|
486
|
+
objectId,
|
|
487
|
+
publisherPriority: prevPriority,
|
|
488
|
+
payloadLength,
|
|
489
|
+
payload,
|
|
490
|
+
extensionData,
|
|
491
|
+
}
|
|
492
|
+
if (objectProperties)
|
|
493
|
+
(obj as unknown as Record<string, unknown>).objectProperties = objectProperties
|
|
494
|
+
objects.push(obj)
|
|
495
|
+
|
|
496
|
+
prevGroupId = groupId
|
|
497
|
+
prevObjectId = objectId
|
|
498
|
+
first = false
|
|
499
|
+
continue
|
|
500
|
+
} else {
|
|
501
|
+
const subgroupEncoding = flags & 0x03
|
|
502
|
+
const objectIdPresent = (flags & 0x04) !== 0
|
|
503
|
+
const groupIdPresent = (flags & 0x08) !== 0
|
|
504
|
+
const priorityPresent = (flags & 0x10) !== 0
|
|
505
|
+
const propsPresent = (flags & 0x20) !== 0
|
|
335
506
|
|
|
336
507
|
if (groupIdPresent) {
|
|
337
|
-
groupId = r.readVarInt()
|
|
508
|
+
groupId = r.readVarInt()
|
|
338
509
|
} else if (first) {
|
|
339
510
|
return {
|
|
340
511
|
ok: false,
|
|
341
512
|
error: new DecodeError(
|
|
342
|
-
|
|
343
|
-
|
|
513
|
+
'CONSTRAINT_VIOLATION',
|
|
514
|
+
'First fetch object must include groupId',
|
|
344
515
|
r.offset,
|
|
345
516
|
),
|
|
346
|
-
}
|
|
517
|
+
}
|
|
347
518
|
}
|
|
348
519
|
|
|
349
520
|
if (subgroupEncoding === 0x00) {
|
|
350
|
-
subgroupId = 0n
|
|
521
|
+
subgroupId = 0n
|
|
351
522
|
} else if (subgroupEncoding === 0x01) {
|
|
352
523
|
if (first) {
|
|
353
524
|
return {
|
|
354
525
|
ok: false,
|
|
355
526
|
error: new DecodeError(
|
|
356
|
-
|
|
357
|
-
|
|
527
|
+
'CONSTRAINT_VIOLATION',
|
|
528
|
+
'First fetch object cannot reference prior subgroupId',
|
|
358
529
|
r.offset,
|
|
359
530
|
),
|
|
360
|
-
}
|
|
531
|
+
}
|
|
361
532
|
}
|
|
362
|
-
subgroupId = prevSubgroupId
|
|
533
|
+
subgroupId = prevSubgroupId
|
|
363
534
|
} else if (subgroupEncoding === 0x02) {
|
|
364
535
|
if (first) {
|
|
365
536
|
return {
|
|
366
537
|
ok: false,
|
|
367
538
|
error: new DecodeError(
|
|
368
|
-
|
|
369
|
-
|
|
539
|
+
'CONSTRAINT_VIOLATION',
|
|
540
|
+
'First fetch object cannot reference prior subgroupId',
|
|
370
541
|
r.offset,
|
|
371
542
|
),
|
|
372
|
-
}
|
|
543
|
+
}
|
|
373
544
|
}
|
|
374
|
-
subgroupId = prevSubgroupId + 1n
|
|
545
|
+
subgroupId = prevSubgroupId + 1n
|
|
375
546
|
} else if (subgroupEncoding === 0x03) {
|
|
376
|
-
subgroupId = r.readVarInt()
|
|
547
|
+
subgroupId = r.readVarInt()
|
|
377
548
|
}
|
|
378
549
|
|
|
379
550
|
if (objectIdPresent) {
|
|
380
|
-
objectId = r.readVarInt()
|
|
551
|
+
objectId = r.readVarInt()
|
|
381
552
|
} else if (first) {
|
|
382
553
|
return {
|
|
383
554
|
ok: false,
|
|
384
555
|
error: new DecodeError(
|
|
385
|
-
|
|
386
|
-
|
|
556
|
+
'CONSTRAINT_VIOLATION',
|
|
557
|
+
'First fetch object must include objectId',
|
|
387
558
|
r.offset,
|
|
388
559
|
),
|
|
389
|
-
}
|
|
560
|
+
}
|
|
390
561
|
}
|
|
391
562
|
|
|
392
563
|
if (priorityPresent) {
|
|
393
|
-
prevPriority = r.readUint8()
|
|
564
|
+
prevPriority = r.readUint8()
|
|
394
565
|
}
|
|
395
566
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
567
|
+
let objectProperties: Record<string, bigint> | undefined
|
|
568
|
+
if (propsPresent) {
|
|
569
|
+
const propsLen = Number(r.readVarInt())
|
|
570
|
+
if (propsLen > 0) {
|
|
571
|
+
objectProperties = decodeObjectProperties(r, propsLen)
|
|
400
572
|
}
|
|
401
573
|
}
|
|
402
574
|
|
|
403
|
-
payloadLength = Number(r.readVarInt())
|
|
404
|
-
payloadByteOffset = r.offset
|
|
405
|
-
payload = payloadLength > 0 ? r.
|
|
575
|
+
payloadLength = Number(r.readVarInt())
|
|
576
|
+
payloadByteOffset = r.offset
|
|
577
|
+
payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0)
|
|
578
|
+
|
|
579
|
+
if (objectProperties) {
|
|
580
|
+
const obj: FetchObjectPayload = {
|
|
581
|
+
type: 'object',
|
|
582
|
+
byteOffset,
|
|
583
|
+
payloadByteOffset,
|
|
584
|
+
serializationFlags: flags,
|
|
585
|
+
groupId,
|
|
586
|
+
subgroupId,
|
|
587
|
+
objectId,
|
|
588
|
+
publisherPriority: prevPriority,
|
|
589
|
+
payloadLength,
|
|
590
|
+
payload,
|
|
591
|
+
extensionData,
|
|
592
|
+
}
|
|
593
|
+
;(obj as unknown as Record<string, unknown>).objectProperties = objectProperties
|
|
594
|
+
objects.push(obj)
|
|
595
|
+
prevGroupId = groupId
|
|
596
|
+
prevSubgroupId = subgroupId
|
|
597
|
+
prevObjectId = objectId
|
|
598
|
+
first = false
|
|
599
|
+
continue
|
|
600
|
+
}
|
|
406
601
|
}
|
|
407
602
|
|
|
408
603
|
const obj: FetchObjectPayload = {
|
|
409
|
-
type:
|
|
604
|
+
type: 'object',
|
|
410
605
|
byteOffset,
|
|
411
606
|
payloadByteOffset,
|
|
412
607
|
serializationFlags: flags,
|
|
@@ -417,40 +612,40 @@ export function decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream>
|
|
|
417
612
|
payloadLength,
|
|
418
613
|
payload,
|
|
419
614
|
extensionData,
|
|
420
|
-
}
|
|
421
|
-
objects.push(obj)
|
|
615
|
+
}
|
|
616
|
+
objects.push(obj)
|
|
422
617
|
|
|
423
|
-
prevGroupId = groupId
|
|
424
|
-
prevSubgroupId = subgroupId
|
|
425
|
-
prevObjectId = objectId
|
|
426
|
-
first = false
|
|
618
|
+
prevGroupId = groupId
|
|
619
|
+
prevSubgroupId = subgroupId
|
|
620
|
+
prevObjectId = objectId
|
|
621
|
+
first = false
|
|
427
622
|
}
|
|
428
623
|
|
|
429
624
|
return {
|
|
430
625
|
ok: true,
|
|
431
|
-
value: { type:
|
|
626
|
+
value: { type: 'fetch', requestId, objects },
|
|
432
627
|
bytesRead: r.offset,
|
|
433
|
-
}
|
|
628
|
+
}
|
|
434
629
|
} catch (e) {
|
|
435
|
-
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
436
|
-
throw e
|
|
630
|
+
if (e instanceof DecodeError) return { ok: false, error: e }
|
|
631
|
+
throw e
|
|
437
632
|
}
|
|
438
633
|
}
|
|
439
634
|
|
|
440
635
|
export function decodeDataStream(
|
|
441
|
-
streamType:
|
|
636
|
+
streamType: 'subgroup' | 'datagram' | 'fetch',
|
|
442
637
|
bytes: Uint8Array,
|
|
443
638
|
): DecodeResult<Draft17DataStream> {
|
|
444
639
|
switch (streamType) {
|
|
445
|
-
case
|
|
446
|
-
return decodeSubgroupStream(bytes)
|
|
447
|
-
case
|
|
448
|
-
return decodeDatagram(bytes)
|
|
449
|
-
case
|
|
450
|
-
return decodeFetchStream(bytes)
|
|
640
|
+
case 'subgroup':
|
|
641
|
+
return decodeSubgroupStream(bytes)
|
|
642
|
+
case 'datagram':
|
|
643
|
+
return decodeDatagram(bytes)
|
|
644
|
+
case 'fetch':
|
|
645
|
+
return decodeFetchStream(bytes)
|
|
451
646
|
default: {
|
|
452
|
-
const _exhaustive: never = streamType
|
|
453
|
-
throw new Error(`Unknown stream type: ${_exhaustive}`)
|
|
647
|
+
const _exhaustive: never = streamType
|
|
648
|
+
throw new Error(`Unknown stream type: ${_exhaustive}`)
|
|
454
649
|
}
|
|
455
650
|
}
|
|
456
651
|
}
|
|
@@ -461,24 +656,29 @@ export function createSubgroupStreamDecoder(): TransformStream<
|
|
|
461
656
|
Uint8Array,
|
|
462
657
|
SubgroupStreamHeader | ObjectPayload
|
|
463
658
|
> {
|
|
464
|
-
let buffer = new Uint8Array(0)
|
|
465
|
-
let
|
|
466
|
-
let
|
|
467
|
-
let
|
|
468
|
-
let
|
|
469
|
-
let
|
|
659
|
+
let buffer = new Uint8Array(0)
|
|
660
|
+
let offset = 0
|
|
661
|
+
let headerEmitted = false
|
|
662
|
+
let prevObjectId = -1n
|
|
663
|
+
let firstObject = true
|
|
664
|
+
let _subgroupIsFirstObjId = false
|
|
665
|
+
let _extensionsPresent = false
|
|
470
666
|
|
|
471
667
|
return new TransformStream<Uint8Array, SubgroupStreamHeader | ObjectPayload>({
|
|
472
668
|
transform(chunk, controller) {
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
669
|
+
if (offset > 0) {
|
|
670
|
+
buffer = buffer.subarray(offset)
|
|
671
|
+
offset = 0
|
|
672
|
+
}
|
|
673
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length)
|
|
674
|
+
newBuffer.set(buffer, 0)
|
|
675
|
+
newBuffer.set(chunk, buffer.length)
|
|
676
|
+
buffer = newBuffer
|
|
477
677
|
|
|
478
678
|
if (!headerEmitted) {
|
|
479
679
|
try {
|
|
480
|
-
const r = new BufferReader(buffer)
|
|
481
|
-
const streamType = Number(r.readVarInt())
|
|
680
|
+
const r = new BufferReader(buffer.subarray(offset))
|
|
681
|
+
const streamType = Number(r.readVarInt())
|
|
482
682
|
|
|
483
683
|
if (
|
|
484
684
|
!(
|
|
@@ -488,255 +688,282 @@ export function createSubgroupStreamDecoder(): TransformStream<
|
|
|
488
688
|
) {
|
|
489
689
|
controller.error(
|
|
490
690
|
new DecodeError(
|
|
491
|
-
|
|
691
|
+
'CONSTRAINT_VIOLATION',
|
|
492
692
|
`Expected subgroup stream type, got 0x${streamType.toString(16)}`,
|
|
493
693
|
0,
|
|
494
694
|
),
|
|
495
|
-
)
|
|
496
|
-
return
|
|
695
|
+
)
|
|
696
|
+
return
|
|
497
697
|
}
|
|
498
698
|
|
|
499
|
-
_extensionsPresent = (streamType & 0x01) !== 0
|
|
500
|
-
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
501
|
-
_subgroupIsFirstObjId = (streamType & 0x02) !== 0 && !hasSubgroupField
|
|
502
|
-
const hasPriority = streamType < 0x30
|
|
699
|
+
_extensionsPresent = (streamType & 0x01) !== 0
|
|
700
|
+
const hasSubgroupField = (streamType & 0x04) !== 0
|
|
701
|
+
_subgroupIsFirstObjId = (streamType & 0x02) !== 0 && !hasSubgroupField
|
|
702
|
+
const hasPriority = streamType < 0x30
|
|
503
703
|
|
|
504
|
-
const trackAlias = r.readVarInt()
|
|
505
|
-
const groupId = r.readVarInt()
|
|
704
|
+
const trackAlias = r.readVarInt()
|
|
705
|
+
const groupId = r.readVarInt()
|
|
506
706
|
|
|
507
|
-
let subgroupId = 0n
|
|
707
|
+
let subgroupId = 0n
|
|
508
708
|
if (hasSubgroupField) {
|
|
509
|
-
subgroupId = r.readVarInt()
|
|
709
|
+
subgroupId = r.readVarInt()
|
|
510
710
|
}
|
|
511
711
|
|
|
512
|
-
let publisherPriority = 128
|
|
712
|
+
let publisherPriority = 128
|
|
513
713
|
if (hasPriority) {
|
|
514
|
-
publisherPriority = r.readUint8()
|
|
714
|
+
publisherPriority = r.readUint8()
|
|
515
715
|
}
|
|
516
716
|
|
|
517
717
|
controller.enqueue({
|
|
518
|
-
type:
|
|
718
|
+
type: 'subgroup_header',
|
|
519
719
|
trackAlias,
|
|
520
720
|
groupId,
|
|
521
721
|
subgroupId,
|
|
522
722
|
publisherPriority,
|
|
523
|
-
})
|
|
524
|
-
headerEmitted = true
|
|
525
|
-
|
|
723
|
+
})
|
|
724
|
+
headerEmitted = true
|
|
725
|
+
offset += r.offset
|
|
526
726
|
} catch (e) {
|
|
527
|
-
if (e instanceof DecodeError && e.code ===
|
|
528
|
-
return
|
|
727
|
+
if (e instanceof DecodeError && e.code === 'UNEXPECTED_END') {
|
|
728
|
+
return
|
|
529
729
|
}
|
|
530
|
-
controller.error(e)
|
|
531
|
-
return
|
|
730
|
+
controller.error(e)
|
|
731
|
+
return
|
|
532
732
|
}
|
|
533
733
|
}
|
|
534
734
|
|
|
535
|
-
while (buffer.length
|
|
735
|
+
while (offset < buffer.length) {
|
|
536
736
|
try {
|
|
537
|
-
const r = new BufferReader(buffer)
|
|
538
|
-
const delta = r.readVarInt()
|
|
539
|
-
let objectId: bigint
|
|
737
|
+
const r = new BufferReader(buffer.subarray(offset))
|
|
738
|
+
const delta = r.readVarInt()
|
|
739
|
+
let objectId: bigint
|
|
540
740
|
if (firstObject) {
|
|
541
|
-
objectId = delta
|
|
542
|
-
firstObject = false
|
|
741
|
+
objectId = delta
|
|
742
|
+
firstObject = false
|
|
543
743
|
} else {
|
|
544
|
-
objectId = prevObjectId + 1n + delta
|
|
744
|
+
objectId = prevObjectId + 1n + delta
|
|
545
745
|
}
|
|
546
|
-
let extensionData = new Uint8Array(0)
|
|
746
|
+
let extensionData = new Uint8Array(0)
|
|
547
747
|
if (_extensionsPresent) {
|
|
548
|
-
const extLen = Number(r.readVarInt())
|
|
549
|
-
extensionData = extLen > 0 ? r.
|
|
748
|
+
const extLen = Number(r.readVarInt())
|
|
749
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0)
|
|
550
750
|
}
|
|
551
|
-
const payloadLength = Number(r.readVarInt())
|
|
552
|
-
const payloadByteOffset = r.offset
|
|
553
|
-
const payload = payloadLength > 0 ? r.
|
|
554
|
-
controller.enqueue({
|
|
555
|
-
|
|
556
|
-
|
|
751
|
+
const payloadLength = Number(r.readVarInt())
|
|
752
|
+
const payloadByteOffset = r.offset
|
|
753
|
+
const payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0)
|
|
754
|
+
controller.enqueue({
|
|
755
|
+
type: 'object',
|
|
756
|
+
objectId,
|
|
757
|
+
payloadLength,
|
|
758
|
+
payload,
|
|
759
|
+
extensionData,
|
|
760
|
+
byteOffset: 0,
|
|
761
|
+
payloadByteOffset,
|
|
762
|
+
})
|
|
763
|
+
offset += r.offset
|
|
764
|
+
prevObjectId = objectId
|
|
557
765
|
} catch (e) {
|
|
558
|
-
if (e instanceof DecodeError && e.code ===
|
|
559
|
-
break
|
|
766
|
+
if (e instanceof DecodeError && e.code === 'UNEXPECTED_END') {
|
|
767
|
+
break
|
|
560
768
|
}
|
|
561
|
-
controller.error(e)
|
|
562
|
-
return
|
|
769
|
+
controller.error(e)
|
|
770
|
+
return
|
|
563
771
|
}
|
|
564
772
|
}
|
|
565
773
|
},
|
|
566
774
|
|
|
567
775
|
flush(controller) {
|
|
568
|
-
if (buffer.length
|
|
569
|
-
controller.error(new DecodeError(
|
|
776
|
+
if (offset < buffer.length) {
|
|
777
|
+
controller.error(new DecodeError('UNEXPECTED_END', 'Stream ended with incomplete data', 0))
|
|
570
778
|
}
|
|
571
779
|
},
|
|
572
|
-
})
|
|
780
|
+
})
|
|
573
781
|
}
|
|
574
782
|
|
|
575
783
|
export function createFetchStreamDecoder(): TransformStream<
|
|
576
784
|
Uint8Array,
|
|
577
785
|
FetchStreamHeader | ObjectPayload
|
|
578
786
|
> {
|
|
579
|
-
let buffer = new Uint8Array(0)
|
|
580
|
-
let
|
|
787
|
+
let buffer = new Uint8Array(0)
|
|
788
|
+
let offset = 0
|
|
789
|
+
let headerEmitted = false
|
|
581
790
|
|
|
582
791
|
return new TransformStream<Uint8Array, FetchStreamHeader | ObjectPayload>({
|
|
583
792
|
transform(chunk, controller) {
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
793
|
+
if (offset > 0) {
|
|
794
|
+
buffer = buffer.subarray(offset)
|
|
795
|
+
offset = 0
|
|
796
|
+
}
|
|
797
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length)
|
|
798
|
+
newBuffer.set(buffer, 0)
|
|
799
|
+
newBuffer.set(chunk, buffer.length)
|
|
800
|
+
buffer = newBuffer
|
|
588
801
|
|
|
589
802
|
if (!headerEmitted) {
|
|
590
803
|
try {
|
|
591
|
-
const r = new BufferReader(buffer)
|
|
592
|
-
const streamType = r.readVarInt()
|
|
804
|
+
const r = new BufferReader(buffer.subarray(offset))
|
|
805
|
+
const streamType = r.readVarInt()
|
|
593
806
|
if (streamType !== FETCH_STREAM_TYPE) {
|
|
594
807
|
controller.error(
|
|
595
808
|
new DecodeError(
|
|
596
|
-
|
|
809
|
+
'CONSTRAINT_VIOLATION',
|
|
597
810
|
`Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
|
|
598
811
|
0,
|
|
599
812
|
),
|
|
600
|
-
)
|
|
601
|
-
return
|
|
813
|
+
)
|
|
814
|
+
return
|
|
602
815
|
}
|
|
603
|
-
const requestId = r.readVarInt()
|
|
604
|
-
controller.enqueue({ type:
|
|
605
|
-
headerEmitted = true
|
|
606
|
-
|
|
816
|
+
const requestId = r.readVarInt()
|
|
817
|
+
controller.enqueue({ type: 'fetch_header', requestId })
|
|
818
|
+
headerEmitted = true
|
|
819
|
+
offset += r.offset
|
|
607
820
|
} catch (e) {
|
|
608
|
-
if (e instanceof DecodeError && e.code ===
|
|
609
|
-
return
|
|
821
|
+
if (e instanceof DecodeError && e.code === 'UNEXPECTED_END') {
|
|
822
|
+
return
|
|
610
823
|
}
|
|
611
|
-
controller.error(e)
|
|
612
|
-
return
|
|
824
|
+
controller.error(e)
|
|
825
|
+
return
|
|
613
826
|
}
|
|
614
827
|
}
|
|
615
828
|
|
|
616
|
-
while (buffer.length
|
|
829
|
+
while (offset < buffer.length) {
|
|
617
830
|
try {
|
|
618
|
-
const r = new BufferReader(buffer)
|
|
619
|
-
const flags = Number(r.readVarInt())
|
|
620
|
-
const objectIdPresent = (flags & 0x04) !== 0
|
|
621
|
-
const groupIdPresent = (flags & 0x08) !== 0
|
|
622
|
-
const priorityPresent = (flags & 0x10) !== 0
|
|
623
|
-
const extensionsPresent = (flags & 0x20) !== 0
|
|
624
|
-
const subgroupEncoding = flags & 0x03
|
|
625
|
-
|
|
626
|
-
if (groupIdPresent) r.readVarInt()
|
|
627
|
-
if (subgroupEncoding === 0x03) r.readVarInt()
|
|
628
|
-
let objectId = 0n
|
|
629
|
-
if (objectIdPresent) objectId = r.readVarInt()
|
|
630
|
-
if (priorityPresent) r.readUint8()
|
|
631
|
-
let extensionData = new Uint8Array(0)
|
|
831
|
+
const r = new BufferReader(buffer.subarray(offset))
|
|
832
|
+
const flags = Number(r.readVarInt())
|
|
833
|
+
const objectIdPresent = (flags & 0x04) !== 0
|
|
834
|
+
const groupIdPresent = (flags & 0x08) !== 0
|
|
835
|
+
const priorityPresent = (flags & 0x10) !== 0
|
|
836
|
+
const extensionsPresent = (flags & 0x20) !== 0
|
|
837
|
+
const subgroupEncoding = flags & 0x03
|
|
838
|
+
|
|
839
|
+
if (groupIdPresent) r.readVarInt()
|
|
840
|
+
if (subgroupEncoding === 0x03) r.readVarInt()
|
|
841
|
+
let objectId = 0n
|
|
842
|
+
if (objectIdPresent) objectId = r.readVarInt()
|
|
843
|
+
if (priorityPresent) r.readUint8()
|
|
844
|
+
let extensionData = new Uint8Array(0)
|
|
632
845
|
if (extensionsPresent) {
|
|
633
|
-
const extLen = Number(r.readVarInt())
|
|
634
|
-
extensionData = extLen > 0 ? r.
|
|
846
|
+
const extLen = Number(r.readVarInt())
|
|
847
|
+
extensionData = extLen > 0 ? r.readBytesView(extLen) : new Uint8Array(0)
|
|
635
848
|
}
|
|
636
|
-
const payloadLength = Number(r.readVarInt())
|
|
637
|
-
const payloadByteOffset = r.offset
|
|
638
|
-
const payload = payloadLength > 0 ? r.
|
|
639
|
-
controller.enqueue({
|
|
640
|
-
|
|
849
|
+
const payloadLength = Number(r.readVarInt())
|
|
850
|
+
const payloadByteOffset = r.offset
|
|
851
|
+
const payload = payloadLength > 0 ? r.readBytesView(payloadLength) : new Uint8Array(0)
|
|
852
|
+
controller.enqueue({
|
|
853
|
+
type: 'object',
|
|
854
|
+
objectId,
|
|
855
|
+
payloadLength,
|
|
856
|
+
payload,
|
|
857
|
+
extensionData,
|
|
858
|
+
byteOffset: 0,
|
|
859
|
+
payloadByteOffset,
|
|
860
|
+
})
|
|
861
|
+
offset += r.offset
|
|
641
862
|
} catch (e) {
|
|
642
|
-
if (e instanceof DecodeError && e.code ===
|
|
643
|
-
break
|
|
863
|
+
if (e instanceof DecodeError && e.code === 'UNEXPECTED_END') {
|
|
864
|
+
break
|
|
644
865
|
}
|
|
645
|
-
controller.error(e)
|
|
646
|
-
return
|
|
866
|
+
controller.error(e)
|
|
867
|
+
return
|
|
647
868
|
}
|
|
648
869
|
}
|
|
649
870
|
},
|
|
650
871
|
|
|
651
872
|
flush(controller) {
|
|
652
|
-
if (buffer.length
|
|
653
|
-
controller.error(new DecodeError(
|
|
873
|
+
if (offset < buffer.length) {
|
|
874
|
+
controller.error(new DecodeError('UNEXPECTED_END', 'Stream ended with incomplete data', 0))
|
|
654
875
|
}
|
|
655
876
|
},
|
|
656
|
-
})
|
|
877
|
+
})
|
|
657
878
|
}
|
|
658
879
|
|
|
659
880
|
export function createDataStreamDecoder(): TransformStream<Uint8Array, DataStreamEvent> {
|
|
660
|
-
let buffer = new Uint8Array(0)
|
|
661
|
-
let
|
|
881
|
+
let buffer = new Uint8Array(0)
|
|
882
|
+
let offset = 0
|
|
883
|
+
let inner: TransformStream<Uint8Array, DataStreamEvent> | null = null
|
|
662
884
|
|
|
663
885
|
return new TransformStream<Uint8Array, DataStreamEvent>({
|
|
664
886
|
transform(chunk, controller) {
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
887
|
+
if (offset > 0) {
|
|
888
|
+
buffer = buffer.subarray(offset)
|
|
889
|
+
offset = 0
|
|
890
|
+
}
|
|
891
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length)
|
|
892
|
+
newBuffer.set(buffer, 0)
|
|
893
|
+
newBuffer.set(chunk, buffer.length)
|
|
894
|
+
buffer = newBuffer
|
|
669
895
|
|
|
670
896
|
if (inner === null) {
|
|
671
|
-
if (buffer.length
|
|
672
|
-
const firstByte = buffer[
|
|
897
|
+
if (offset >= buffer.length) return
|
|
898
|
+
const firstByte = buffer[offset]!
|
|
673
899
|
|
|
674
900
|
if ((firstByte >= 0x10 && firstByte <= 0x1d) || (firstByte >= 0x30 && firstByte <= 0x3d)) {
|
|
675
|
-
const decoder = createSubgroupStreamDecoder()
|
|
676
|
-
inner = decoder as unknown as TransformStream<Uint8Array, DataStreamEvent
|
|
901
|
+
const decoder = createSubgroupStreamDecoder()
|
|
902
|
+
inner = decoder as unknown as TransformStream<Uint8Array, DataStreamEvent>
|
|
677
903
|
} else if (firstByte === 0x05) {
|
|
678
|
-
const decoder = createFetchStreamDecoder()
|
|
679
|
-
inner = decoder as unknown as TransformStream<Uint8Array, DataStreamEvent
|
|
904
|
+
const decoder = createFetchStreamDecoder()
|
|
905
|
+
inner = decoder as unknown as TransformStream<Uint8Array, DataStreamEvent>
|
|
680
906
|
} else {
|
|
681
907
|
controller.error(
|
|
682
908
|
new DecodeError(
|
|
683
|
-
|
|
909
|
+
'CONSTRAINT_VIOLATION',
|
|
684
910
|
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
685
911
|
0,
|
|
686
912
|
),
|
|
687
|
-
)
|
|
688
|
-
return
|
|
913
|
+
)
|
|
914
|
+
return
|
|
689
915
|
}
|
|
690
916
|
}
|
|
691
917
|
},
|
|
692
918
|
|
|
693
919
|
flush(controller) {
|
|
694
|
-
if (buffer.length
|
|
920
|
+
if (offset >= buffer.length) return
|
|
921
|
+
const view = buffer.subarray(offset)
|
|
695
922
|
|
|
696
|
-
const firstByte =
|
|
697
|
-
let result: DecodeResult<Draft17DataStream
|
|
923
|
+
const firstByte = view[0]!
|
|
924
|
+
let result: DecodeResult<Draft17DataStream>
|
|
698
925
|
|
|
699
926
|
if ((firstByte >= 0x10 && firstByte <= 0x1d) || (firstByte >= 0x30 && firstByte <= 0x3d)) {
|
|
700
|
-
result = decodeSubgroupStream(
|
|
927
|
+
result = decodeSubgroupStream(view)
|
|
701
928
|
} else if (firstByte === 0x05) {
|
|
702
|
-
result = decodeFetchStream(
|
|
929
|
+
result = decodeFetchStream(view)
|
|
703
930
|
} else {
|
|
704
931
|
controller.error(
|
|
705
932
|
new DecodeError(
|
|
706
|
-
|
|
933
|
+
'CONSTRAINT_VIOLATION',
|
|
707
934
|
`Unknown data stream type: 0x${firstByte.toString(16)}`,
|
|
708
935
|
0,
|
|
709
936
|
),
|
|
710
|
-
)
|
|
711
|
-
return
|
|
937
|
+
)
|
|
938
|
+
return
|
|
712
939
|
}
|
|
713
940
|
|
|
714
941
|
if (!result.ok) {
|
|
715
|
-
controller.error(result.error)
|
|
716
|
-
return
|
|
942
|
+
controller.error(result.error)
|
|
943
|
+
return
|
|
717
944
|
}
|
|
718
945
|
|
|
719
|
-
const stream = result.value
|
|
720
|
-
if (stream.type ===
|
|
946
|
+
const stream = result.value
|
|
947
|
+
if (stream.type === 'subgroup') {
|
|
721
948
|
controller.enqueue({
|
|
722
|
-
type:
|
|
949
|
+
type: 'subgroup_header',
|
|
723
950
|
trackAlias: stream.trackAlias,
|
|
724
951
|
groupId: stream.groupId,
|
|
725
952
|
subgroupId: stream.subgroupId,
|
|
726
953
|
publisherPriority: stream.publisherPriority,
|
|
727
|
-
})
|
|
954
|
+
})
|
|
728
955
|
for (const obj of stream.objects) {
|
|
729
|
-
controller.enqueue(obj)
|
|
956
|
+
controller.enqueue(obj)
|
|
730
957
|
}
|
|
731
|
-
} else if (stream.type ===
|
|
958
|
+
} else if (stream.type === 'fetch') {
|
|
732
959
|
controller.enqueue({
|
|
733
|
-
type:
|
|
960
|
+
type: 'fetch_header',
|
|
734
961
|
requestId: stream.requestId,
|
|
735
|
-
})
|
|
962
|
+
})
|
|
736
963
|
for (const obj of stream.objects) {
|
|
737
|
-
controller.enqueue(obj)
|
|
964
|
+
controller.enqueue(obj)
|
|
738
965
|
}
|
|
739
966
|
}
|
|
740
967
|
},
|
|
741
|
-
})
|
|
968
|
+
})
|
|
742
969
|
}
|