@moqtap/codec 0.1.1 → 0.2.1
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/README.md +99 -95
- package/dist/chunk-4RIXXEII.js +1275 -0
- package/dist/chunk-4XYGE53S.cjs +698 -0
- package/dist/chunk-4YJANAXU.cjs +1109 -0
- package/dist/chunk-6AEHWULA.cjs +641 -0
- package/dist/chunk-7DUBLRXC.js +680 -0
- package/dist/{chunk-YBZD3DU5.cjs → chunk-7IVGHMKJ.cjs} +44 -42
- package/dist/chunk-BISI45MN.cjs +680 -0
- package/dist/{chunk-NLYTRGXA.cjs → chunk-BPNL5YFQ.cjs} +5 -5
- package/dist/chunk-CXDHOMHG.js +1097 -0
- package/dist/chunk-DUBCL3WF.cjs +749 -0
- package/dist/chunk-DWK5ZQZ4.js +642 -0
- package/dist/chunk-E6E3NQYU.js +680 -0
- package/dist/chunk-EFM5T7OM.js +698 -0
- package/dist/chunk-ENURAVHI.cjs +680 -0
- package/dist/{chunk-Z66WDWHI.js → chunk-FXZ2MYKJ.js} +127 -1
- package/dist/chunk-G26SJ6XS.cjs +1341 -0
- package/dist/chunk-G7GI7LJA.js +737 -0
- package/dist/chunk-GXEW4COZ.cjs +737 -0
- package/dist/chunk-HSVYF6XX.cjs +1361 -0
- package/dist/chunk-IBVM4DMJ.cjs +1097 -0
- package/dist/chunk-IV2H5CFI.cjs +1275 -0
- package/dist/chunk-IV2HRJVT.js +1198 -0
- package/dist/chunk-JSQM2MG3.js +680 -0
- package/dist/chunk-K4OLITS2.cjs +1055 -0
- package/dist/{chunk-UOBWHJA5.js → chunk-KFTCU2P6.js} +2 -3
- package/dist/chunk-LH4NTURO.js +1361 -0
- package/dist/{chunk-YTXLWKOR.js → chunk-MFAP7R6L.js} +1 -1
- package/dist/chunk-NGVE2RZT.js +1097 -0
- package/dist/chunk-NUX5BHWO.js +1341 -0
- package/dist/chunk-PJRA2TQ5.js +1055 -0
- package/dist/chunk-RVJAGE4S.cjs +1198 -0
- package/dist/{chunk-QYG6KGOV.cjs → chunk-RWQ43Z4F.cjs} +2 -3
- package/dist/chunk-RZHAPEXO.js +749 -0
- package/dist/chunk-ST24APEO.js +1109 -0
- package/dist/chunk-SYHW3FLI.cjs +642 -0
- package/dist/chunk-TLYNOOQP.cjs +432 -0
- package/dist/{chunk-IXHOBNXA.js → chunk-TMNGRIPL.js} +43 -41
- package/dist/chunk-UNS34PTA.cjs +680 -0
- package/dist/chunk-UR6JKS56.js +432 -0
- package/dist/{chunk-NPWHHWXT.cjs → chunk-UYXTY6ZQ.cjs} +127 -1
- package/dist/chunk-XUUCOLWU.cjs +1097 -0
- package/dist/chunk-YG5KJESI.js +641 -0
- package/dist/chunk-ZBKE2QRQ.js +1401 -0
- package/dist/chunk-ZSPO2GF2.cjs +1401 -0
- package/dist/codec-95k8CAu5.d.cts +35 -0
- package/dist/codec-AFuOxfsO.d.ts +60 -0
- package/dist/codec-B-UJ5Iow.d.cts +75 -0
- package/dist/codec-BC5jfvMb.d.ts +35 -0
- package/dist/codec-BECYPfY8.d.ts +35 -0
- package/dist/codec-BsPU1vNC.d.ts +39 -0
- package/dist/codec-BvpuF-6u.d.cts +39 -0
- package/dist/codec-C8jZI5Cx.d.cts +39 -0
- package/dist/codec-CAevkgf5.d.cts +33 -0
- package/dist/codec-CSUqCrRs.d.ts +39 -0
- package/dist/codec-C_HMXNK_.d.ts +33 -0
- package/dist/{codec-Bvr7rFtj.d.cts → codec-CpuvYTSV.d.cts} +1 -1
- package/dist/codec-D0x8-SCw.d.cts +35 -0
- package/dist/codec-D7ARhpG1.d.ts +75 -0
- package/dist/codec-DNAUGshO.d.cts +60 -0
- package/dist/codec-DPx_QNn0.d.ts +31 -0
- package/dist/{codec-B2mc2g3i.d.ts → codec-DRhCx_hw.d.ts} +1 -1
- package/dist/codec-Db7YPe3l.d.ts +31 -0
- package/dist/codec-axkJpb7D.d.cts +31 -0
- package/dist/codec-ujAbFaep.d.cts +31 -0
- package/dist/core/buffer-reader.d.ts +15 -0
- package/dist/core/buffer-reader.d.ts.map +1 -0
- package/dist/core/buffer-reader.js +98 -0
- package/dist/core/buffer-reader.js.map +1 -0
- package/dist/core/buffer-writer.d.ts +16 -0
- package/dist/core/buffer-writer.d.ts.map +1 -0
- package/dist/core/buffer-writer.js +86 -0
- package/dist/core/buffer-writer.js.map +1 -0
- package/dist/core/errors.d.ts +2 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +2 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/hex.d.ts +5 -0
- package/dist/core/hex.d.ts.map +1 -0
- package/dist/core/hex.js +17 -0
- package/dist/core/hex.js.map +1 -0
- package/dist/core/session-types.d.ts +99 -0
- package/dist/core/session-types.d.ts.map +1 -0
- package/dist/core/session-types.js +2 -0
- package/dist/core/session-types.js.map +1 -0
- package/dist/core/types.d.ts +235 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +11 -0
- package/dist/core/types.js.map +1 -0
- package/dist/draft10-session.cjs +6 -0
- package/dist/draft10-session.d.cts +8 -0
- package/dist/draft10-session.d.ts +8 -0
- package/dist/draft10-session.js +6 -0
- package/dist/draft10.cjs +115 -0
- package/dist/draft10.d.cts +95 -0
- package/dist/draft10.d.ts +95 -0
- package/dist/draft10.js +115 -0
- package/dist/draft11-session.cjs +6 -0
- package/dist/draft11-session.d.cts +8 -0
- package/dist/draft11-session.d.ts +8 -0
- package/dist/draft11-session.js +6 -0
- package/dist/draft11.cjs +109 -0
- package/dist/draft11.d.cts +99 -0
- package/dist/draft11.d.ts +99 -0
- package/dist/draft11.js +109 -0
- package/dist/draft12-session.cjs +6 -0
- package/dist/draft12-session.d.cts +8 -0
- package/dist/draft12-session.d.ts +8 -0
- package/dist/draft12-session.js +6 -0
- package/dist/draft12.cjs +117 -0
- package/dist/draft12.d.cts +106 -0
- package/dist/draft12.d.ts +106 -0
- package/dist/draft12.js +117 -0
- package/dist/draft13-session.cjs +6 -0
- package/dist/draft13-session.d.cts +8 -0
- package/dist/draft13-session.d.ts +8 -0
- package/dist/draft13-session.js +6 -0
- package/dist/draft13.cjs +119 -0
- package/dist/draft13.d.cts +108 -0
- package/dist/draft13.d.ts +108 -0
- package/dist/draft13.js +119 -0
- package/dist/draft14-session.cjs +2 -2
- package/dist/draft14-session.d.cts +3 -3
- package/dist/draft14-session.d.ts +3 -3
- package/dist/draft14-session.js +1 -1
- package/dist/draft14.cjs +3 -3
- package/dist/draft14.d.cts +16 -4
- package/dist/draft14.d.ts +16 -4
- package/dist/draft14.js +2 -2
- package/dist/draft15-session.cjs +6 -0
- package/dist/draft15-session.d.cts +8 -0
- package/dist/draft15-session.d.ts +8 -0
- package/dist/draft15-session.js +6 -0
- package/dist/draft15.cjs +111 -0
- package/dist/draft15.d.cts +93 -0
- package/dist/draft15.d.ts +93 -0
- package/dist/draft15.js +111 -0
- package/dist/draft16-session.cjs +6 -0
- package/dist/draft16-session.d.cts +8 -0
- package/dist/draft16-session.d.ts +8 -0
- package/dist/draft16-session.js +6 -0
- package/dist/draft16.cjs +113 -0
- package/dist/draft16.d.cts +94 -0
- package/dist/draft16.d.ts +94 -0
- package/dist/draft16.js +113 -0
- package/dist/draft17-session.cjs +8 -0
- package/dist/draft17-session.d.cts +51 -0
- package/dist/draft17-session.d.ts +51 -0
- package/dist/draft17-session.js +8 -0
- package/dist/draft17.cjs +99 -0
- package/dist/draft17.d.cts +40 -0
- package/dist/draft17.d.ts +40 -0
- package/dist/draft17.js +99 -0
- package/dist/draft7-session.cjs +3 -3
- package/dist/draft7-session.d.cts +3 -3
- package/dist/draft7-session.d.ts +3 -3
- package/dist/draft7-session.js +2 -2
- package/dist/draft7.cjs +4 -4
- package/dist/draft7.d.cts +2 -2
- package/dist/draft7.d.ts +2 -2
- package/dist/draft7.js +2 -2
- package/dist/draft8-session.cjs +6 -0
- package/dist/draft8-session.d.cts +8 -0
- package/dist/draft8-session.d.ts +8 -0
- package/dist/draft8-session.js +6 -0
- package/dist/draft8.cjs +115 -0
- package/dist/draft8.d.cts +95 -0
- package/dist/draft8.d.ts +95 -0
- package/dist/draft8.js +115 -0
- package/dist/draft9-session.cjs +6 -0
- package/dist/draft9-session.d.cts +8 -0
- package/dist/draft9-session.d.ts +8 -0
- package/dist/draft9-session.js +6 -0
- package/dist/draft9.cjs +115 -0
- package/dist/draft9.d.cts +95 -0
- package/dist/draft9.d.ts +95 -0
- package/dist/draft9.js +115 -0
- package/dist/drafts/draft07/announce-fsm.d.ts +2 -0
- package/dist/drafts/draft07/announce-fsm.d.ts.map +1 -0
- package/dist/drafts/draft07/announce-fsm.js +2 -0
- package/dist/drafts/draft07/announce-fsm.js.map +1 -0
- package/dist/drafts/draft07/codec.d.ts +17 -0
- package/dist/drafts/draft07/codec.d.ts.map +1 -0
- package/dist/drafts/draft07/codec.js +722 -0
- package/dist/drafts/draft07/codec.js.map +1 -0
- package/dist/drafts/draft07/data-streams.d.ts +9 -0
- package/dist/drafts/draft07/data-streams.d.ts.map +1 -0
- package/dist/drafts/draft07/data-streams.js +228 -0
- package/dist/drafts/draft07/data-streams.js.map +1 -0
- package/dist/drafts/draft07/index.d.ts +14 -0
- package/dist/drafts/draft07/index.d.ts.map +1 -0
- package/dist/drafts/draft07/index.js +18 -0
- package/dist/drafts/draft07/index.js.map +1 -0
- package/dist/drafts/draft07/messages.d.ts +32 -0
- package/dist/drafts/draft07/messages.d.ts.map +1 -0
- package/dist/drafts/draft07/messages.js +42 -0
- package/dist/drafts/draft07/messages.js.map +1 -0
- package/dist/drafts/draft07/parameters.d.ts +4 -0
- package/dist/drafts/draft07/parameters.d.ts.map +1 -0
- package/dist/drafts/draft07/parameters.js +10 -0
- package/dist/drafts/draft07/parameters.js.map +1 -0
- package/dist/drafts/draft07/rules.d.ts +8 -0
- package/dist/drafts/draft07/rules.d.ts.map +1 -0
- package/dist/drafts/draft07/rules.js +95 -0
- package/dist/drafts/draft07/rules.js.map +1 -0
- package/dist/drafts/draft07/session-fsm.d.ts +38 -0
- package/dist/drafts/draft07/session-fsm.d.ts.map +1 -0
- package/dist/drafts/draft07/session-fsm.js +354 -0
- package/dist/drafts/draft07/session-fsm.js.map +1 -0
- package/dist/drafts/draft07/session.d.ts +4 -0
- package/dist/drafts/draft07/session.d.ts.map +1 -0
- package/dist/drafts/draft07/session.js +5 -0
- package/dist/drafts/draft07/session.js.map +1 -0
- package/dist/drafts/draft07/subscription-fsm.d.ts +2 -0
- package/dist/drafts/draft07/subscription-fsm.d.ts.map +1 -0
- package/dist/drafts/draft07/subscription-fsm.js +2 -0
- package/dist/drafts/draft07/subscription-fsm.js.map +1 -0
- package/dist/drafts/draft07/types.d.ts +61 -0
- package/dist/drafts/draft07/types.d.ts.map +1 -0
- package/dist/drafts/draft07/types.js +4 -0
- package/dist/drafts/draft07/types.js.map +1 -0
- package/dist/drafts/draft07/varint.d.ts +4 -0
- package/dist/drafts/draft07/varint.d.ts.map +1 -0
- package/dist/drafts/draft07/varint.js +22 -0
- package/dist/drafts/draft07/varint.js.map +1 -0
- package/dist/drafts/draft08/codec.d.ts +29 -0
- package/dist/drafts/draft08/codec.d.ts.map +1 -0
- package/dist/drafts/draft08/codec.js +729 -0
- package/dist/drafts/draft08/codec.js.map +1 -0
- package/dist/drafts/draft08/data-streams.d.ts +12 -0
- package/dist/drafts/draft08/data-streams.d.ts.map +1 -0
- package/dist/drafts/draft08/data-streams.js +345 -0
- package/dist/drafts/draft08/data-streams.js.map +1 -0
- package/dist/drafts/draft08/index.d.ts +9 -0
- package/dist/drafts/draft08/index.d.ts.map +1 -0
- package/dist/drafts/draft08/index.js +7 -0
- package/dist/drafts/draft08/index.js.map +1 -0
- package/dist/drafts/draft08/messages.d.ts +34 -0
- package/dist/drafts/draft08/messages.d.ts.map +1 -0
- package/dist/drafts/draft08/messages.js +66 -0
- package/dist/drafts/draft08/messages.js.map +1 -0
- package/dist/drafts/draft08/rules.d.ts +8 -0
- package/dist/drafts/draft08/rules.d.ts.map +1 -0
- package/dist/drafts/draft08/rules.js +83 -0
- package/dist/drafts/draft08/rules.js.map +1 -0
- package/dist/drafts/draft08/session-fsm.d.ts +47 -0
- package/dist/drafts/draft08/session-fsm.d.ts.map +1 -0
- package/dist/drafts/draft08/session-fsm.js +483 -0
- package/dist/drafts/draft08/session-fsm.js.map +1 -0
- package/dist/drafts/draft08/session.d.ts +5 -0
- package/dist/drafts/draft08/session.d.ts.map +1 -0
- package/dist/drafts/draft08/session.js +5 -0
- package/dist/drafts/draft08/session.js.map +1 -0
- package/dist/drafts/draft08/types.d.ts +268 -0
- package/dist/drafts/draft08/types.d.ts.map +1 -0
- package/dist/drafts/draft08/types.js +4 -0
- package/dist/drafts/draft08/types.js.map +1 -0
- package/dist/drafts/draft09/codec.d.ts +21 -0
- package/dist/drafts/draft09/codec.d.ts.map +1 -0
- package/dist/drafts/draft09/codec.js +721 -0
- package/dist/drafts/draft09/codec.js.map +1 -0
- package/dist/drafts/draft09/data-streams.d.ts +12 -0
- package/dist/drafts/draft09/data-streams.d.ts.map +1 -0
- package/dist/drafts/draft09/data-streams.js +307 -0
- package/dist/drafts/draft09/data-streams.js.map +1 -0
- package/dist/drafts/draft09/index.d.ts +9 -0
- package/dist/drafts/draft09/index.d.ts.map +1 -0
- package/dist/drafts/draft09/index.js +7 -0
- package/dist/drafts/draft09/index.js.map +1 -0
- package/dist/drafts/draft09/messages.d.ts +34 -0
- package/dist/drafts/draft09/messages.d.ts.map +1 -0
- package/dist/drafts/draft09/messages.js +66 -0
- package/dist/drafts/draft09/messages.js.map +1 -0
- package/dist/drafts/draft09/rules.d.ts +8 -0
- package/dist/drafts/draft09/rules.d.ts.map +1 -0
- package/dist/drafts/draft09/rules.js +83 -0
- package/dist/drafts/draft09/rules.js.map +1 -0
- package/dist/drafts/draft09/session-fsm.d.ts +47 -0
- package/dist/drafts/draft09/session-fsm.d.ts.map +1 -0
- package/dist/drafts/draft09/session-fsm.js +483 -0
- package/dist/drafts/draft09/session-fsm.js.map +1 -0
- package/dist/drafts/draft09/session.d.ts +5 -0
- package/dist/drafts/draft09/session.d.ts.map +1 -0
- package/dist/drafts/draft09/session.js +5 -0
- package/dist/drafts/draft09/session.js.map +1 -0
- package/dist/drafts/draft09/types.d.ts +268 -0
- package/dist/drafts/draft09/types.d.ts.map +1 -0
- package/dist/drafts/draft09/types.js +4 -0
- package/dist/drafts/draft09/types.js.map +1 -0
- package/dist/drafts/draft10/codec.d.ts +21 -0
- package/dist/drafts/draft10/codec.d.ts.map +1 -0
- package/dist/drafts/draft10/codec.js +721 -0
- package/dist/drafts/draft10/codec.js.map +1 -0
- package/dist/drafts/draft10/data-streams.d.ts +12 -0
- package/dist/drafts/draft10/data-streams.d.ts.map +1 -0
- package/dist/drafts/draft10/data-streams.js +307 -0
- package/dist/drafts/draft10/data-streams.js.map +1 -0
- package/dist/drafts/draft10/index.d.ts +9 -0
- package/dist/drafts/draft10/index.d.ts.map +1 -0
- package/dist/drafts/draft10/index.js +7 -0
- package/dist/drafts/draft10/index.js.map +1 -0
- package/dist/drafts/draft10/messages.d.ts +34 -0
- package/dist/drafts/draft10/messages.d.ts.map +1 -0
- package/dist/drafts/draft10/messages.js +66 -0
- package/dist/drafts/draft10/messages.js.map +1 -0
- package/dist/drafts/draft10/rules.d.ts +8 -0
- package/dist/drafts/draft10/rules.d.ts.map +1 -0
- package/dist/drafts/draft10/rules.js +83 -0
- package/dist/drafts/draft10/rules.js.map +1 -0
- package/dist/drafts/draft10/session-fsm.d.ts +47 -0
- package/dist/drafts/draft10/session-fsm.d.ts.map +1 -0
- package/dist/drafts/draft10/session-fsm.js +483 -0
- package/dist/drafts/draft10/session-fsm.js.map +1 -0
- package/dist/drafts/draft10/session.d.ts +5 -0
- package/dist/drafts/draft10/session.d.ts.map +1 -0
- package/dist/drafts/draft10/session.js +5 -0
- package/dist/drafts/draft10/session.js.map +1 -0
- package/dist/drafts/draft10/types.d.ts +268 -0
- package/dist/drafts/draft10/types.d.ts.map +1 -0
- package/dist/drafts/draft10/types.js +4 -0
- package/dist/drafts/draft10/types.js.map +1 -0
- package/dist/drafts/draft11/codec.d.ts +25 -0
- package/dist/drafts/draft11/codec.d.ts.map +1 -0
- package/dist/drafts/draft11/codec.js +775 -0
- package/dist/drafts/draft11/codec.js.map +1 -0
- package/dist/drafts/draft11/data-streams.d.ts +10 -0
- package/dist/drafts/draft11/data-streams.d.ts.map +1 -0
- package/dist/drafts/draft11/data-streams.js +253 -0
- package/dist/drafts/draft11/data-streams.js.map +1 -0
- package/dist/drafts/draft11/index.d.ts +9 -0
- package/dist/drafts/draft11/index.d.ts.map +1 -0
- package/dist/drafts/draft11/index.js +7 -0
- package/dist/drafts/draft11/index.js.map +1 -0
- package/dist/drafts/draft11/messages.d.ts +33 -0
- package/dist/drafts/draft11/messages.d.ts.map +1 -0
- package/dist/drafts/draft11/messages.js +65 -0
- package/dist/drafts/draft11/messages.js.map +1 -0
- package/dist/drafts/draft11/rules.d.ts +8 -0
- package/dist/drafts/draft11/rules.d.ts.map +1 -0
- package/dist/drafts/draft11/rules.js +88 -0
- package/dist/drafts/draft11/rules.js.map +1 -0
- package/dist/drafts/draft11/session-fsm.d.ts +52 -0
- package/dist/drafts/draft11/session-fsm.d.ts.map +1 -0
- package/dist/drafts/draft11/session-fsm.js +530 -0
- package/dist/drafts/draft11/session-fsm.js.map +1 -0
- package/dist/drafts/draft11/session.d.ts +5 -0
- package/dist/drafts/draft11/session.d.ts.map +1 -0
- package/dist/drafts/draft11/session.js +5 -0
- package/dist/drafts/draft11/session.js.map +1 -0
- package/dist/drafts/draft11/types.d.ts +266 -0
- package/dist/drafts/draft11/types.d.ts.map +1 -0
- package/dist/drafts/draft11/types.js +4 -0
- package/dist/drafts/draft11/types.js.map +1 -0
- package/dist/drafts/draft12/codec.d.ts +27 -0
- package/dist/drafts/draft12/codec.d.ts.map +1 -0
- package/dist/drafts/draft12/codec.js +918 -0
- package/dist/drafts/draft12/codec.js.map +1 -0
- package/dist/drafts/draft12/data-streams.d.ts +10 -0
- package/dist/drafts/draft12/data-streams.d.ts.map +1 -0
- package/dist/drafts/draft12/data-streams.js +254 -0
- package/dist/drafts/draft12/data-streams.js.map +1 -0
- package/dist/drafts/draft12/index.d.ts +9 -0
- package/dist/drafts/draft12/index.d.ts.map +1 -0
- package/dist/drafts/draft12/index.js +7 -0
- package/dist/drafts/draft12/index.js.map +1 -0
- package/dist/drafts/draft12/messages.d.ts +37 -0
- package/dist/drafts/draft12/messages.d.ts.map +1 -0
- package/dist/drafts/draft12/messages.js +77 -0
- package/dist/drafts/draft12/messages.js.map +1 -0
- package/dist/drafts/draft12/rules.d.ts +8 -0
- package/dist/drafts/draft12/rules.d.ts.map +1 -0
- package/dist/drafts/draft12/rules.js +94 -0
- package/dist/drafts/draft12/rules.js.map +1 -0
- package/dist/drafts/draft12/session-fsm.d.ts +55 -0
- package/dist/drafts/draft12/session-fsm.d.ts.map +1 -0
- package/dist/drafts/draft12/session-fsm.js +569 -0
- package/dist/drafts/draft12/session-fsm.js.map +1 -0
- package/dist/drafts/draft12/session.d.ts +5 -0
- package/dist/drafts/draft12/session.d.ts.map +1 -0
- package/dist/drafts/draft12/session.js +5 -0
- package/dist/drafts/draft12/session.js.map +1 -0
- package/dist/drafts/draft12/types.d.ts +294 -0
- package/dist/drafts/draft12/types.d.ts.map +1 -0
- package/dist/drafts/draft12/types.js +4 -0
- package/dist/drafts/draft12/types.js.map +1 -0
- package/dist/drafts/draft13/codec.d.ts +27 -0
- package/dist/drafts/draft13/codec.d.ts.map +1 -0
- package/dist/drafts/draft13/codec.js +1000 -0
- package/dist/drafts/draft13/codec.js.map +1 -0
- package/dist/drafts/draft13/data-streams.d.ts +10 -0
- package/dist/drafts/draft13/data-streams.d.ts.map +1 -0
- package/dist/drafts/draft13/data-streams.js +254 -0
- package/dist/drafts/draft13/data-streams.js.map +1 -0
- package/dist/drafts/draft13/index.d.ts +9 -0
- package/dist/drafts/draft13/index.d.ts.map +1 -0
- package/dist/drafts/draft13/index.js +7 -0
- package/dist/drafts/draft13/index.js.map +1 -0
- package/dist/drafts/draft13/messages.d.ts +38 -0
- package/dist/drafts/draft13/messages.d.ts.map +1 -0
- package/dist/drafts/draft13/messages.js +79 -0
- package/dist/drafts/draft13/messages.js.map +1 -0
- package/dist/drafts/draft13/rules.d.ts +8 -0
- package/dist/drafts/draft13/rules.d.ts.map +1 -0
- package/dist/drafts/draft13/rules.js +96 -0
- package/dist/drafts/draft13/rules.js.map +1 -0
- package/dist/drafts/draft13/session-fsm.d.ts +56 -0
- package/dist/drafts/draft13/session-fsm.d.ts.map +1 -0
- package/dist/drafts/draft13/session-fsm.js +581 -0
- package/dist/drafts/draft13/session-fsm.js.map +1 -0
- package/dist/drafts/draft13/session.d.ts +5 -0
- package/dist/drafts/draft13/session.d.ts.map +1 -0
- package/dist/drafts/draft13/session.js +5 -0
- package/dist/drafts/draft13/session.js.map +1 -0
- package/dist/drafts/draft13/types.d.ts +310 -0
- package/dist/drafts/draft13/types.d.ts.map +1 -0
- package/dist/drafts/draft13/types.js +4 -0
- package/dist/drafts/draft13/types.js.map +1 -0
- package/dist/drafts/draft14/codec.d.ts +34 -0
- package/dist/drafts/draft14/codec.d.ts.map +1 -0
- package/dist/drafts/draft14/codec.js +752 -0
- package/dist/drafts/draft14/codec.js.map +1 -0
- package/dist/drafts/draft14/data-streams.d.ts +56 -0
- package/dist/drafts/draft14/data-streams.d.ts.map +1 -0
- package/dist/drafts/draft14/data-streams.js +729 -0
- package/dist/drafts/draft14/data-streams.js.map +1 -0
- package/dist/drafts/draft14/index.d.ts +9 -0
- package/dist/drafts/draft14/index.d.ts.map +1 -0
- package/dist/drafts/draft14/index.js +7 -0
- package/dist/drafts/draft14/index.js.map +1 -0
- package/dist/drafts/draft14/messages.d.ts +36 -0
- package/dist/drafts/draft14/messages.d.ts.map +1 -0
- package/dist/drafts/draft14/messages.js +71 -0
- package/dist/drafts/draft14/messages.js.map +1 -0
- package/dist/drafts/draft14/rules.d.ts +8 -0
- package/dist/drafts/draft14/rules.d.ts.map +1 -0
- package/dist/drafts/draft14/rules.js +101 -0
- package/dist/drafts/draft14/rules.js.map +1 -0
- package/dist/drafts/draft14/session-fsm.d.ts +58 -0
- package/dist/drafts/draft14/session-fsm.d.ts.map +1 -0
- package/dist/drafts/draft14/session-fsm.js +648 -0
- package/dist/drafts/draft14/session-fsm.js.map +1 -0
- package/dist/drafts/draft14/session.d.ts +5 -0
- package/dist/drafts/draft14/session.d.ts.map +1 -0
- package/dist/drafts/draft14/session.js +5 -0
- package/dist/drafts/draft14/session.js.map +1 -0
- package/dist/drafts/draft14/types.d.ts +263 -0
- package/dist/drafts/draft14/types.d.ts.map +1 -0
- package/dist/drafts/draft14/types.js +4 -0
- package/dist/drafts/draft14/types.js.map +1 -0
- package/dist/drafts/draft15/codec.d.ts +33 -0
- package/dist/drafts/draft15/codec.d.ts.map +1 -0
- package/dist/drafts/draft15/codec.js +742 -0
- package/dist/drafts/draft15/codec.js.map +1 -0
- package/dist/drafts/draft15/data-streams.d.ts +45 -0
- package/dist/drafts/draft15/data-streams.d.ts.map +1 -0
- package/dist/drafts/draft15/data-streams.js +675 -0
- package/dist/drafts/draft15/data-streams.js.map +1 -0
- package/dist/drafts/draft15/index.d.ts +9 -0
- package/dist/drafts/draft15/index.d.ts.map +1 -0
- package/dist/drafts/draft15/index.js +7 -0
- package/dist/drafts/draft15/index.js.map +1 -0
- package/dist/drafts/draft15/messages.d.ts +31 -0
- package/dist/drafts/draft15/messages.d.ts.map +1 -0
- package/dist/drafts/draft15/messages.js +59 -0
- package/dist/drafts/draft15/messages.js.map +1 -0
- package/dist/drafts/draft15/rules.d.ts +8 -0
- package/dist/drafts/draft15/rules.d.ts.map +1 -0
- package/dist/drafts/draft15/rules.js +83 -0
- package/dist/drafts/draft15/rules.js.map +1 -0
- package/dist/drafts/draft15/session-fsm.d.ts +48 -0
- package/dist/drafts/draft15/session-fsm.d.ts.map +1 -0
- package/dist/drafts/draft15/session-fsm.js +479 -0
- package/dist/drafts/draft15/session-fsm.js.map +1 -0
- package/dist/drafts/draft15/session.d.ts +5 -0
- package/dist/drafts/draft15/session.d.ts.map +1 -0
- package/dist/drafts/draft15/session.js +5 -0
- package/dist/drafts/draft15/session.js.map +1 -0
- package/dist/drafts/draft15/types.d.ts +232 -0
- package/dist/drafts/draft15/types.d.ts.map +1 -0
- package/dist/drafts/draft15/types.js +4 -0
- package/dist/drafts/draft15/types.js.map +1 -0
- package/dist/drafts/draft16/codec.d.ts +29 -0
- package/dist/drafts/draft16/codec.d.ts.map +1 -0
- package/dist/drafts/draft16/codec.js +747 -0
- package/dist/drafts/draft16/codec.js.map +1 -0
- package/dist/drafts/draft16/data-streams.d.ts +34 -0
- package/dist/drafts/draft16/data-streams.d.ts.map +1 -0
- package/dist/drafts/draft16/data-streams.js +667 -0
- package/dist/drafts/draft16/data-streams.js.map +1 -0
- package/dist/drafts/draft16/index.d.ts +9 -0
- package/dist/drafts/draft16/index.d.ts.map +1 -0
- package/dist/drafts/draft16/index.js +7 -0
- package/dist/drafts/draft16/index.js.map +1 -0
- package/dist/drafts/draft16/messages.d.ts +32 -0
- package/dist/drafts/draft16/messages.d.ts.map +1 -0
- package/dist/drafts/draft16/messages.js +62 -0
- package/dist/drafts/draft16/messages.js.map +1 -0
- package/dist/drafts/draft16/rules.d.ts +8 -0
- package/dist/drafts/draft16/rules.d.ts.map +1 -0
- package/dist/drafts/draft16/rules.js +84 -0
- package/dist/drafts/draft16/rules.js.map +1 -0
- package/dist/drafts/draft16/session-fsm.d.ts +48 -0
- package/dist/drafts/draft16/session-fsm.d.ts.map +1 -0
- package/dist/drafts/draft16/session-fsm.js +474 -0
- package/dist/drafts/draft16/session-fsm.js.map +1 -0
- package/dist/drafts/draft16/session.d.ts +5 -0
- package/dist/drafts/draft16/session.d.ts.map +1 -0
- package/dist/drafts/draft16/session.js +5 -0
- package/dist/drafts/draft16/session.js.map +1 -0
- package/dist/drafts/draft16/types.d.ts +238 -0
- package/dist/drafts/draft16/types.d.ts.map +1 -0
- package/dist/drafts/draft16/types.js +4 -0
- package/dist/drafts/draft16/types.js.map +1 -0
- package/dist/drafts/draft17/codec.d.ts +29 -0
- package/dist/drafts/draft17/codec.d.ts.map +1 -0
- package/dist/drafts/draft17/codec.js +799 -0
- package/dist/drafts/draft17/codec.js.map +1 -0
- package/dist/drafts/draft17/data-streams.d.ts +13 -0
- package/dist/drafts/draft17/data-streams.d.ts.map +1 -0
- package/dist/drafts/draft17/data-streams.js +633 -0
- package/dist/drafts/draft17/data-streams.js.map +1 -0
- package/dist/drafts/draft17/index.d.ts +8 -0
- package/dist/drafts/draft17/index.d.ts.map +1 -0
- package/dist/drafts/draft17/index.js +6 -0
- package/dist/drafts/draft17/index.js.map +1 -0
- package/dist/drafts/draft17/messages.d.ts +25 -0
- package/dist/drafts/draft17/messages.d.ts.map +1 -0
- package/dist/drafts/draft17/messages.js +48 -0
- package/dist/drafts/draft17/messages.js.map +1 -0
- package/dist/drafts/draft17/rules.d.ts +8 -0
- package/dist/drafts/draft17/rules.d.ts.map +1 -0
- package/dist/drafts/draft17/rules.js +71 -0
- package/dist/drafts/draft17/rules.js.map +1 -0
- package/dist/drafts/draft17/session-fsm.d.ts +45 -0
- package/dist/drafts/draft17/session-fsm.d.ts.map +1 -0
- package/dist/drafts/draft17/session-fsm.js +328 -0
- package/dist/drafts/draft17/session-fsm.js.map +1 -0
- package/dist/drafts/draft17/session.d.ts +5 -0
- package/dist/drafts/draft17/session.d.ts.map +1 -0
- package/dist/drafts/draft17/session.js +6 -0
- package/dist/drafts/draft17/session.js.map +1 -0
- package/dist/drafts/draft17/types.d.ts +219 -0
- package/dist/drafts/draft17/types.d.ts.map +1 -0
- package/dist/drafts/draft17/types.js +3 -0
- package/dist/drafts/draft17/types.js.map +1 -0
- package/dist/index.cjs +76 -4
- package/dist/index.d.cts +68 -5
- package/dist/index.d.ts +82 -11
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +93 -38
- package/dist/index.js.map +1 -0
- package/dist/{session-types-DFjMk4HH.d.ts → session-types-CJIFbTPd.d.ts} +1 -1
- package/dist/{session-types-DW1RSZX_.d.cts → session-types-Cbq8IGCP.d.cts} +1 -1
- package/dist/session.cjs +5 -5
- package/dist/session.d.cts +3 -3
- package/dist/session.d.ts +4 -8
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +32 -26
- package/dist/session.js.map +1 -0
- package/dist/types-4VxSL2Ho.d.cts +261 -0
- package/dist/types-4VxSL2Ho.d.ts +261 -0
- package/dist/types-B2afJZM-.d.cts +236 -0
- package/dist/types-B2afJZM-.d.ts +236 -0
- package/dist/types-Bg6QYNVt.d.cts +290 -0
- package/dist/types-Bg6QYNVt.d.ts +290 -0
- package/dist/types-C_1HrqBl.d.cts +306 -0
- package/dist/types-C_1HrqBl.d.ts +306 -0
- package/dist/types-Cw4WE9dh.d.cts +261 -0
- package/dist/types-Cw4WE9dh.d.ts +261 -0
- package/dist/types-D5gNQiDj.d.cts +261 -0
- package/dist/types-D5gNQiDj.d.ts +261 -0
- package/dist/types-DqCDFqgB.d.cts +230 -0
- package/dist/types-DqCDFqgB.d.ts +230 -0
- package/dist/types-ERexTpT8.d.cts +217 -0
- package/dist/types-ERexTpT8.d.ts +217 -0
- package/dist/{types-DPYE49t0.d.cts → types-QNXoxC9Y.d.cts} +2 -7
- package/dist/{types-DPYE49t0.d.ts → types-QNXoxC9Y.d.ts} +2 -7
- package/dist/types-r-CasCf1.d.cts +262 -0
- package/dist/types-r-CasCf1.d.ts +262 -0
- package/package.json +192 -84
- package/src/core/buffer-reader.ts +1 -1
- package/src/core/hex.ts +17 -0
- package/src/core/types.ts +24 -7
- package/src/drafts/draft07/codec.ts +933 -983
- package/src/drafts/draft07/data-streams.ts +240 -0
- package/src/drafts/draft07/index.ts +89 -69
- package/src/drafts/draft07/messages.ts +42 -44
- package/src/drafts/draft07/rules.ts +101 -106
- package/src/drafts/draft07/types.ts +72 -0
- package/src/drafts/draft08/codec.ts +944 -0
- package/src/drafts/draft08/data-streams.ts +359 -0
- package/src/drafts/draft08/index.ts +125 -0
- package/src/drafts/draft08/messages.ts +72 -0
- package/src/drafts/draft08/rules.ts +91 -0
- package/src/drafts/draft08/session-fsm.ts +718 -0
- package/src/drafts/draft08/session.ts +26 -0
- package/src/drafts/draft08/types.ts +384 -0
- package/src/drafts/draft09/codec.ts +936 -0
- package/src/drafts/draft09/data-streams.ts +332 -0
- package/src/drafts/draft09/index.ts +125 -0
- package/src/drafts/draft09/messages.ts +72 -0
- package/src/drafts/draft09/rules.ts +91 -0
- package/src/drafts/draft09/session-fsm.ts +718 -0
- package/src/drafts/draft09/session.ts +26 -0
- package/src/drafts/draft09/types.ts +384 -0
- package/src/drafts/draft10/codec.ts +936 -0
- package/src/drafts/draft10/data-streams.ts +332 -0
- package/src/drafts/draft10/index.ts +125 -0
- package/src/drafts/draft10/messages.ts +72 -0
- package/src/drafts/draft10/rules.ts +91 -0
- package/src/drafts/draft10/session-fsm.ts +718 -0
- package/src/drafts/draft10/session.ts +26 -0
- package/src/drafts/draft10/types.ts +384 -0
- package/src/drafts/draft11/codec.ts +969 -0
- package/src/drafts/draft11/data-streams.ts +269 -0
- package/src/drafts/draft11/index.ts +123 -0
- package/src/drafts/draft11/messages.ts +71 -0
- package/src/drafts/draft11/rules.ts +100 -0
- package/src/drafts/draft11/session-fsm.ts +758 -0
- package/src/drafts/draft11/session.ts +26 -0
- package/src/drafts/draft11/types.ts +381 -0
- package/src/drafts/draft12/codec.ts +1126 -0
- package/src/drafts/draft12/data-streams.ts +275 -0
- package/src/drafts/draft12/index.ts +130 -0
- package/src/drafts/draft12/messages.ts +84 -0
- package/src/drafts/draft12/rules.ts +106 -0
- package/src/drafts/draft12/session-fsm.ts +805 -0
- package/src/drafts/draft12/session.ts +26 -0
- package/src/drafts/draft12/types.ts +419 -0
- package/src/drafts/draft13/codec.ts +1210 -0
- package/src/drafts/draft13/data-streams.ts +275 -0
- package/src/drafts/draft13/index.ts +132 -0
- package/src/drafts/draft13/messages.ts +86 -0
- package/src/drafts/draft13/rules.ts +108 -0
- package/src/drafts/draft13/session-fsm.ts +819 -0
- package/src/drafts/draft13/session.ts +26 -0
- package/src/drafts/draft13/types.ts +438 -0
- package/src/drafts/draft14/codec.ts +1034 -1480
- package/src/drafts/draft14/data-streams.ts +798 -0
- package/src/drafts/draft14/session-fsm.ts +182 -1
- package/src/drafts/draft14/types.ts +381 -365
- package/src/drafts/draft15/codec.ts +969 -0
- package/src/drafts/draft15/data-streams.ts +778 -0
- package/src/drafts/draft15/index.ts +121 -0
- package/src/drafts/draft15/messages.ts +64 -0
- package/src/drafts/draft15/rules.ts +95 -0
- package/src/drafts/draft15/session-fsm.ts +687 -0
- package/src/drafts/draft15/session.ts +26 -0
- package/src/drafts/draft15/types.ts +339 -0
- package/src/drafts/draft16/codec.ts +957 -0
- package/src/drafts/draft16/data-streams.ts +773 -0
- package/src/drafts/draft16/index.ts +123 -0
- package/src/drafts/draft16/messages.ts +67 -0
- package/src/drafts/draft16/rules.ts +96 -0
- package/src/drafts/draft16/session-fsm.ts +682 -0
- package/src/drafts/draft16/session.ts +26 -0
- package/src/drafts/draft16/types.ts +357 -0
- package/src/drafts/draft17/codec.ts +962 -0
- package/src/drafts/draft17/data-streams.ts +742 -0
- package/src/drafts/draft17/index.ts +105 -0
- package/src/drafts/draft17/messages.ts +53 -0
- package/src/drafts/draft17/rules.ts +85 -0
- package/src/drafts/draft17/session-fsm.ts +437 -0
- package/src/drafts/draft17/session.ts +15 -0
- package/src/drafts/draft17/types.ts +313 -0
- package/src/index.ts +217 -2
|
@@ -0,0 +1,742 @@
|
|
|
1
|
+
import { bytesToHex, hexToBytes } from "../../core/hex.js";
|
|
2
|
+
import { BufferReader } from "../../core/buffer-reader.js";
|
|
3
|
+
import { BufferWriter } from "../../core/buffer-writer.js";
|
|
4
|
+
import { DecodeError } from "../../core/types.js";
|
|
5
|
+
import { MESSAGE_ID_MAP, MSG_CLIENT_SETUP, MSG_FETCH, MSG_FETCH_CANCEL, MSG_FETCH_OK, MSG_GOAWAY, MSG_MAX_REQUEST_ID, MSG_PUBLISH, MSG_PUBLISH_DONE, MSG_PUBLISH_NAMESPACE, MSG_PUBLISH_NAMESPACE_CANCEL, MSG_PUBLISH_NAMESPACE_DONE, MSG_PUBLISH_OK, MSG_REQUEST_ERROR, MSG_REQUEST_OK, MSG_REQUESTS_BLOCKED, MSG_SERVER_SETUP, MSG_SUBSCRIBE, MSG_SUBSCRIBE_NAMESPACE, MSG_SUBSCRIBE_OK, MSG_SUBSCRIBE_UPDATE, MSG_TRACK_STATUS, MSG_UNSUBSCRIBE, MSG_UNSUBSCRIBE_NAMESPACE, SETUP_PARAM_AUTHORITY, SETUP_PARAM_MAX_AUTH_TOKEN_CACHE_SIZE, SETUP_PARAM_MAX_REQUEST_ID, SETUP_PARAM_MOQT_IMPLEMENTATION, SETUP_PARAM_PATH, } from "./messages.js";
|
|
6
|
+
// ─── Setup Parameter Encoding/Decoding ──────────────────────────────────────────
|
|
7
|
+
function encodeSetupParams(params, writer) {
|
|
8
|
+
let count = 0;
|
|
9
|
+
if (params.path !== undefined)
|
|
10
|
+
count++;
|
|
11
|
+
if (params.max_request_id !== undefined)
|
|
12
|
+
count++;
|
|
13
|
+
if (params.max_auth_token_cache_size !== undefined)
|
|
14
|
+
count++;
|
|
15
|
+
if (params.authority !== undefined)
|
|
16
|
+
count++;
|
|
17
|
+
if (params.moqt_implementation !== undefined)
|
|
18
|
+
count++;
|
|
19
|
+
if (params.unknown)
|
|
20
|
+
count += params.unknown.length;
|
|
21
|
+
writer.writeVarInt(count);
|
|
22
|
+
// PATH (0x01) - odd, length-prefixed bytes
|
|
23
|
+
if (params.path !== undefined) {
|
|
24
|
+
writer.writeVarInt(SETUP_PARAM_PATH);
|
|
25
|
+
const encoded = new TextEncoder().encode(params.path);
|
|
26
|
+
writer.writeVarInt(encoded.byteLength);
|
|
27
|
+
writer.writeBytes(encoded);
|
|
28
|
+
}
|
|
29
|
+
// MAX_REQUEST_ID (0x02) - even, varint value
|
|
30
|
+
if (params.max_request_id !== undefined) {
|
|
31
|
+
writer.writeVarInt(SETUP_PARAM_MAX_REQUEST_ID);
|
|
32
|
+
writer.writeVarInt(params.max_request_id);
|
|
33
|
+
}
|
|
34
|
+
// MAX_AUTH_TOKEN_CACHE_SIZE (0x04) - even, varint value
|
|
35
|
+
if (params.max_auth_token_cache_size !== undefined) {
|
|
36
|
+
writer.writeVarInt(SETUP_PARAM_MAX_AUTH_TOKEN_CACHE_SIZE);
|
|
37
|
+
writer.writeVarInt(params.max_auth_token_cache_size);
|
|
38
|
+
}
|
|
39
|
+
// AUTHORITY (0x05) - odd, length-prefixed bytes
|
|
40
|
+
if (params.authority !== undefined) {
|
|
41
|
+
writer.writeVarInt(SETUP_PARAM_AUTHORITY);
|
|
42
|
+
const encoded = new TextEncoder().encode(params.authority);
|
|
43
|
+
writer.writeVarInt(encoded.byteLength);
|
|
44
|
+
writer.writeBytes(encoded);
|
|
45
|
+
}
|
|
46
|
+
// MOQT_IMPLEMENTATION (0x07) - odd, length-prefixed bytes
|
|
47
|
+
if (params.moqt_implementation !== undefined) {
|
|
48
|
+
writer.writeVarInt(SETUP_PARAM_MOQT_IMPLEMENTATION);
|
|
49
|
+
const encoded = new TextEncoder().encode(params.moqt_implementation);
|
|
50
|
+
writer.writeVarInt(encoded.byteLength);
|
|
51
|
+
writer.writeBytes(encoded);
|
|
52
|
+
}
|
|
53
|
+
// Unknown params
|
|
54
|
+
if (params.unknown) {
|
|
55
|
+
for (const u of params.unknown) {
|
|
56
|
+
const id = BigInt(u.id);
|
|
57
|
+
writer.writeVarInt(id);
|
|
58
|
+
if (id % 2n === 0n) {
|
|
59
|
+
// Even: value is a varint — raw_hex contains the varint bytes
|
|
60
|
+
const raw = hexToBytes(u.raw_hex);
|
|
61
|
+
const tmpReader = new BufferReader(raw);
|
|
62
|
+
const value = tmpReader.readVarInt();
|
|
63
|
+
writer.writeVarInt(value);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Odd: length-prefixed bytes
|
|
67
|
+
const raw = hexToBytes(u.raw_hex);
|
|
68
|
+
writer.writeVarInt(raw.byteLength);
|
|
69
|
+
writer.writeBytes(raw);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function decodeSetupParams(reader) {
|
|
75
|
+
const count = Number(reader.readVarInt());
|
|
76
|
+
const result = {};
|
|
77
|
+
const unknown = [];
|
|
78
|
+
for (let i = 0; i < count; i++) {
|
|
79
|
+
const paramType = reader.readVarInt();
|
|
80
|
+
if (paramType % 2n === 0n) {
|
|
81
|
+
// Even: value is a varint directly
|
|
82
|
+
const value = reader.readVarInt();
|
|
83
|
+
if (paramType === SETUP_PARAM_MAX_REQUEST_ID) {
|
|
84
|
+
result.max_request_id = value;
|
|
85
|
+
}
|
|
86
|
+
else if (paramType === SETUP_PARAM_MAX_AUTH_TOKEN_CACHE_SIZE) {
|
|
87
|
+
result.max_auth_token_cache_size = value;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
const tmpWriter = new BufferWriter(16);
|
|
91
|
+
tmpWriter.writeVarInt(value);
|
|
92
|
+
const raw = tmpWriter.finish();
|
|
93
|
+
unknown.push({
|
|
94
|
+
id: `0x${paramType.toString(16)}`,
|
|
95
|
+
length: raw.byteLength,
|
|
96
|
+
raw_hex: bytesToHex(raw),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// Odd: value is length-prefixed bytes
|
|
102
|
+
const length = Number(reader.readVarInt());
|
|
103
|
+
const bytes = reader.readBytes(length);
|
|
104
|
+
if (paramType === SETUP_PARAM_PATH) {
|
|
105
|
+
result.path = new TextDecoder().decode(bytes);
|
|
106
|
+
}
|
|
107
|
+
else if (paramType === SETUP_PARAM_AUTHORITY) {
|
|
108
|
+
result.authority = new TextDecoder().decode(bytes);
|
|
109
|
+
}
|
|
110
|
+
else if (paramType === SETUP_PARAM_MOQT_IMPLEMENTATION) {
|
|
111
|
+
result.moqt_implementation = new TextDecoder().decode(bytes);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
unknown.push({
|
|
115
|
+
id: `0x${paramType.toString(16)}`,
|
|
116
|
+
length,
|
|
117
|
+
raw_hex: bytesToHex(bytes),
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (unknown.length > 0) {
|
|
123
|
+
result.unknown = unknown;
|
|
124
|
+
}
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
// ─── Version-Specific Parameter Encoding/Decoding ───────────────────────────────
|
|
128
|
+
// Well-known version-specific parameter IDs
|
|
129
|
+
const PARAM_EXPIRES = 0x08n; // even: varint
|
|
130
|
+
const PARAM_LARGEST_OBJECT = 0x09n; // odd: length-prefixed (group varint + object varint)
|
|
131
|
+
const PARAM_SUBSCRIBER_PRIORITY = 0x20n; // even: varint
|
|
132
|
+
const PARAM_SUBSCRIPTION_FILTER = 0x21n; // odd: length-prefixed
|
|
133
|
+
const PARAM_GROUP_ORDER = 0x22n; // even: varint
|
|
134
|
+
function encodeParams(params, writer) {
|
|
135
|
+
// Count known + unknown params
|
|
136
|
+
let count = params.unknown ? params.unknown.length : 0;
|
|
137
|
+
if (params.expires !== undefined)
|
|
138
|
+
count++;
|
|
139
|
+
if (params.largest_object !== undefined)
|
|
140
|
+
count++;
|
|
141
|
+
if (params.subscriber_priority !== undefined)
|
|
142
|
+
count++;
|
|
143
|
+
if (params.subscription_filter !== undefined)
|
|
144
|
+
count++;
|
|
145
|
+
if (params.group_order !== undefined)
|
|
146
|
+
count++;
|
|
147
|
+
writer.writeVarInt(count);
|
|
148
|
+
// Encode known params (sorted by ID for canonical encoding)
|
|
149
|
+
if (params.expires !== undefined) {
|
|
150
|
+
writer.writeVarInt(PARAM_EXPIRES);
|
|
151
|
+
writer.writeVarInt(params.expires);
|
|
152
|
+
}
|
|
153
|
+
if (params.largest_object !== undefined) {
|
|
154
|
+
writer.writeVarInt(PARAM_LARGEST_OBJECT);
|
|
155
|
+
const tmpW = new BufferWriter(16);
|
|
156
|
+
tmpW.writeVarInt(params.largest_object.group);
|
|
157
|
+
tmpW.writeVarInt(params.largest_object.object);
|
|
158
|
+
const raw = tmpW.finish();
|
|
159
|
+
writer.writeVarInt(raw.byteLength);
|
|
160
|
+
writer.writeBytes(raw);
|
|
161
|
+
}
|
|
162
|
+
if (params.subscriber_priority !== undefined) {
|
|
163
|
+
writer.writeVarInt(PARAM_SUBSCRIBER_PRIORITY);
|
|
164
|
+
writer.writeVarInt(params.subscriber_priority);
|
|
165
|
+
}
|
|
166
|
+
if (params.subscription_filter !== undefined) {
|
|
167
|
+
writer.writeVarInt(PARAM_SUBSCRIPTION_FILTER);
|
|
168
|
+
const tmpW = new BufferWriter(32);
|
|
169
|
+
const f = params.subscription_filter;
|
|
170
|
+
tmpW.writeVarInt(f.filter_type);
|
|
171
|
+
if (f.filter_type === 3n || f.filter_type === 4n) {
|
|
172
|
+
tmpW.writeVarInt(f.start_group);
|
|
173
|
+
tmpW.writeVarInt(f.start_object);
|
|
174
|
+
}
|
|
175
|
+
if (f.filter_type === 4n) {
|
|
176
|
+
tmpW.writeVarInt(f.end_group);
|
|
177
|
+
}
|
|
178
|
+
const raw = tmpW.finish();
|
|
179
|
+
writer.writeVarInt(raw.byteLength);
|
|
180
|
+
writer.writeBytes(raw);
|
|
181
|
+
}
|
|
182
|
+
if (params.group_order !== undefined) {
|
|
183
|
+
writer.writeVarInt(PARAM_GROUP_ORDER);
|
|
184
|
+
writer.writeVarInt(params.group_order);
|
|
185
|
+
}
|
|
186
|
+
// Encode unknown params
|
|
187
|
+
if (params.unknown) {
|
|
188
|
+
for (const u of params.unknown) {
|
|
189
|
+
const id = BigInt(u.id);
|
|
190
|
+
writer.writeVarInt(id);
|
|
191
|
+
if (id % 2n === 0n) {
|
|
192
|
+
const raw = hexToBytes(u.raw_hex);
|
|
193
|
+
const tmpReader = new BufferReader(raw);
|
|
194
|
+
const value = tmpReader.readVarInt();
|
|
195
|
+
writer.writeVarInt(value);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
const raw = hexToBytes(u.raw_hex);
|
|
199
|
+
writer.writeVarInt(raw.byteLength);
|
|
200
|
+
writer.writeBytes(raw);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
function decodeParams(reader) {
|
|
206
|
+
const count = Number(reader.readVarInt());
|
|
207
|
+
const result = {};
|
|
208
|
+
const unknown = [];
|
|
209
|
+
for (let i = 0; i < count; i++) {
|
|
210
|
+
const paramType = reader.readVarInt();
|
|
211
|
+
if (paramType === PARAM_EXPIRES) {
|
|
212
|
+
result.expires = reader.readVarInt();
|
|
213
|
+
}
|
|
214
|
+
else if (paramType === PARAM_SUBSCRIBER_PRIORITY) {
|
|
215
|
+
result.subscriber_priority = reader.readVarInt();
|
|
216
|
+
}
|
|
217
|
+
else if (paramType === PARAM_GROUP_ORDER) {
|
|
218
|
+
result.group_order = reader.readVarInt();
|
|
219
|
+
}
|
|
220
|
+
else if (paramType === PARAM_LARGEST_OBJECT) {
|
|
221
|
+
const length = Number(reader.readVarInt());
|
|
222
|
+
const startOff = reader.offset;
|
|
223
|
+
const group = reader.readVarInt();
|
|
224
|
+
const object = reader.readVarInt();
|
|
225
|
+
// Skip any remaining bytes in the length-prefixed block
|
|
226
|
+
const consumed = reader.offset - startOff;
|
|
227
|
+
if (consumed < length)
|
|
228
|
+
reader.readBytes(length - consumed);
|
|
229
|
+
result.largest_object = { group, object };
|
|
230
|
+
}
|
|
231
|
+
else if (paramType === PARAM_SUBSCRIPTION_FILTER) {
|
|
232
|
+
const length = Number(reader.readVarInt());
|
|
233
|
+
const startOff = reader.offset;
|
|
234
|
+
const filter_type = reader.readVarInt();
|
|
235
|
+
const filter = { filter_type };
|
|
236
|
+
if (filter_type === 3n || filter_type === 4n) {
|
|
237
|
+
filter.start_group = reader.readVarInt();
|
|
238
|
+
filter.start_object = reader.readVarInt();
|
|
239
|
+
}
|
|
240
|
+
if (filter_type === 4n) {
|
|
241
|
+
filter.end_group = reader.readVarInt();
|
|
242
|
+
}
|
|
243
|
+
// Skip any remaining bytes
|
|
244
|
+
const consumed = reader.offset - startOff;
|
|
245
|
+
if (consumed < length)
|
|
246
|
+
reader.readBytes(length - consumed);
|
|
247
|
+
result.subscription_filter = filter;
|
|
248
|
+
}
|
|
249
|
+
else if (paramType % 2n === 0n) {
|
|
250
|
+
// Unknown even: varint value
|
|
251
|
+
const value = reader.readVarInt();
|
|
252
|
+
const tmpWriter = new BufferWriter(16);
|
|
253
|
+
tmpWriter.writeVarInt(value);
|
|
254
|
+
const raw = tmpWriter.finish();
|
|
255
|
+
unknown.push({
|
|
256
|
+
id: `0x${paramType.toString(16)}`,
|
|
257
|
+
length: raw.byteLength,
|
|
258
|
+
raw_hex: bytesToHex(raw),
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
// Unknown odd: length-prefixed bytes
|
|
263
|
+
const length = Number(reader.readVarInt());
|
|
264
|
+
const bytes = reader.readBytes(length);
|
|
265
|
+
unknown.push({
|
|
266
|
+
id: `0x${paramType.toString(16)}`,
|
|
267
|
+
length,
|
|
268
|
+
raw_hex: bytesToHex(bytes),
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (unknown.length > 0) {
|
|
273
|
+
result.unknown = unknown;
|
|
274
|
+
}
|
|
275
|
+
return result;
|
|
276
|
+
}
|
|
277
|
+
// ─── Payload Encoders ──────────────────────────────────────────────────────────
|
|
278
|
+
function encodeClientSetupPayload(msg, w) {
|
|
279
|
+
encodeSetupParams(msg.parameters, w);
|
|
280
|
+
}
|
|
281
|
+
function encodeServerSetupPayload(msg, w) {
|
|
282
|
+
encodeSetupParams(msg.parameters, w);
|
|
283
|
+
}
|
|
284
|
+
function encodeSubscribePayload(msg, w) {
|
|
285
|
+
w.writeVarInt(msg.request_id);
|
|
286
|
+
w.writeTuple(msg.track_namespace);
|
|
287
|
+
w.writeString(msg.track_name);
|
|
288
|
+
encodeParams(msg.parameters, w);
|
|
289
|
+
}
|
|
290
|
+
function encodeSubscribeOkPayload(msg, w) {
|
|
291
|
+
w.writeVarInt(msg.request_id);
|
|
292
|
+
w.writeVarInt(msg.track_alias);
|
|
293
|
+
encodeParams(msg.parameters, w);
|
|
294
|
+
}
|
|
295
|
+
function encodeSubscribeUpdatePayload(msg, w) {
|
|
296
|
+
w.writeVarInt(msg.request_id);
|
|
297
|
+
w.writeVarInt(msg.subscription_request_id);
|
|
298
|
+
encodeParams(msg.parameters, w);
|
|
299
|
+
}
|
|
300
|
+
function encodeUnsubscribePayload(msg, w) {
|
|
301
|
+
w.writeVarInt(msg.request_id);
|
|
302
|
+
}
|
|
303
|
+
function encodePublishPayload(msg, w) {
|
|
304
|
+
w.writeVarInt(msg.request_id);
|
|
305
|
+
w.writeTuple(msg.track_namespace);
|
|
306
|
+
w.writeString(msg.track_name);
|
|
307
|
+
w.writeVarInt(msg.track_alias);
|
|
308
|
+
encodeParams(msg.parameters, w);
|
|
309
|
+
}
|
|
310
|
+
function encodePublishOkPayload(msg, w) {
|
|
311
|
+
w.writeVarInt(msg.request_id);
|
|
312
|
+
encodeParams(msg.parameters, w);
|
|
313
|
+
}
|
|
314
|
+
function encodePublishDonePayload(msg, w) {
|
|
315
|
+
w.writeVarInt(msg.request_id);
|
|
316
|
+
w.writeVarInt(msg.status_code);
|
|
317
|
+
w.writeVarInt(msg.stream_count);
|
|
318
|
+
w.writeString(msg.reason_phrase);
|
|
319
|
+
}
|
|
320
|
+
function encodePublishNamespacePayload(msg, w) {
|
|
321
|
+
w.writeVarInt(msg.request_id);
|
|
322
|
+
w.writeTuple(msg.track_namespace);
|
|
323
|
+
encodeParams(msg.parameters, w);
|
|
324
|
+
}
|
|
325
|
+
function encodePublishNamespaceDonePayload(msg, w) {
|
|
326
|
+
w.writeTuple(msg.track_namespace);
|
|
327
|
+
}
|
|
328
|
+
function encodePublishNamespaceCancelPayload(msg, w) {
|
|
329
|
+
w.writeTuple(msg.track_namespace);
|
|
330
|
+
w.writeVarInt(msg.error_code);
|
|
331
|
+
w.writeString(msg.reason_phrase);
|
|
332
|
+
}
|
|
333
|
+
function encodeSubscribeNamespacePayload(msg, w) {
|
|
334
|
+
w.writeVarInt(msg.request_id);
|
|
335
|
+
w.writeTuple(msg.namespace_prefix);
|
|
336
|
+
encodeParams(msg.parameters, w);
|
|
337
|
+
}
|
|
338
|
+
function encodeUnsubscribeNamespacePayload(msg, w) {
|
|
339
|
+
w.writeVarInt(msg.request_id);
|
|
340
|
+
}
|
|
341
|
+
function encodeFetchPayload(msg, w) {
|
|
342
|
+
w.writeVarInt(msg.request_id);
|
|
343
|
+
w.writeVarInt(msg.fetch_type);
|
|
344
|
+
const ft = Number(msg.fetch_type);
|
|
345
|
+
if (ft === 1 && msg.standalone) {
|
|
346
|
+
// Standalone Fetch
|
|
347
|
+
w.writeTuple(msg.standalone.track_namespace);
|
|
348
|
+
w.writeString(msg.standalone.track_name);
|
|
349
|
+
// Start Location
|
|
350
|
+
w.writeVarInt(msg.standalone.start_group);
|
|
351
|
+
w.writeVarInt(msg.standalone.start_object);
|
|
352
|
+
// End Location
|
|
353
|
+
w.writeVarInt(msg.standalone.end_group);
|
|
354
|
+
w.writeVarInt(msg.standalone.end_object);
|
|
355
|
+
}
|
|
356
|
+
else if ((ft === 2 || ft === 3) && msg.joining) {
|
|
357
|
+
// Joining Fetch (relative=2, absolute=3)
|
|
358
|
+
w.writeVarInt(msg.joining.joining_request_id);
|
|
359
|
+
w.writeVarInt(msg.joining.joining_start);
|
|
360
|
+
}
|
|
361
|
+
encodeParams(msg.parameters, w);
|
|
362
|
+
}
|
|
363
|
+
function encodeFetchOkPayload(msg, w) {
|
|
364
|
+
w.writeVarInt(msg.request_id);
|
|
365
|
+
w.writeUint8(msg.end_of_track);
|
|
366
|
+
// End Location
|
|
367
|
+
w.writeVarInt(msg.end_group);
|
|
368
|
+
w.writeVarInt(msg.end_object);
|
|
369
|
+
encodeParams(msg.parameters, w);
|
|
370
|
+
}
|
|
371
|
+
function encodeFetchCancelPayload(msg, w) {
|
|
372
|
+
w.writeVarInt(msg.request_id);
|
|
373
|
+
}
|
|
374
|
+
function encodeTrackStatusPayload(msg, w) {
|
|
375
|
+
w.writeVarInt(msg.request_id);
|
|
376
|
+
w.writeTuple(msg.track_namespace);
|
|
377
|
+
w.writeString(msg.track_name);
|
|
378
|
+
encodeParams(msg.parameters, w);
|
|
379
|
+
}
|
|
380
|
+
function encodeRequestOkPayload(msg, w) {
|
|
381
|
+
w.writeVarInt(msg.request_id);
|
|
382
|
+
encodeParams(msg.parameters, w);
|
|
383
|
+
}
|
|
384
|
+
function encodeRequestErrorPayload(msg, w) {
|
|
385
|
+
w.writeVarInt(msg.request_id);
|
|
386
|
+
w.writeVarInt(msg.error_code);
|
|
387
|
+
w.writeString(msg.reason_phrase);
|
|
388
|
+
}
|
|
389
|
+
function encodeGoAwayPayload(msg, w) {
|
|
390
|
+
w.writeString(msg.new_session_uri);
|
|
391
|
+
}
|
|
392
|
+
function encodeMaxRequestIdPayload(msg, w) {
|
|
393
|
+
w.writeVarInt(msg.max_request_id);
|
|
394
|
+
}
|
|
395
|
+
function encodeRequestsBlockedPayload(msg, w) {
|
|
396
|
+
w.writeVarInt(msg.maximum_request_id);
|
|
397
|
+
}
|
|
398
|
+
// ─── Payload Decoders ──────────────────────────────────────────────────────────
|
|
399
|
+
function decodeClientSetupPayload(r) {
|
|
400
|
+
const parameters = decodeSetupParams(r);
|
|
401
|
+
return { type: "client_setup", parameters };
|
|
402
|
+
}
|
|
403
|
+
function decodeServerSetupPayload(r) {
|
|
404
|
+
const parameters = decodeSetupParams(r);
|
|
405
|
+
return { type: "server_setup", parameters };
|
|
406
|
+
}
|
|
407
|
+
function decodeSubscribePayload(r) {
|
|
408
|
+
const request_id = r.readVarInt();
|
|
409
|
+
const track_namespace = r.readTuple();
|
|
410
|
+
const track_name = r.readString();
|
|
411
|
+
const parameters = decodeParams(r);
|
|
412
|
+
return { type: "subscribe", request_id, track_namespace, track_name, parameters };
|
|
413
|
+
}
|
|
414
|
+
function decodeSubscribeOkPayload(r) {
|
|
415
|
+
const request_id = r.readVarInt();
|
|
416
|
+
const track_alias = r.readVarInt();
|
|
417
|
+
const parameters = decodeParams(r);
|
|
418
|
+
return { type: "subscribe_ok", request_id, track_alias, parameters };
|
|
419
|
+
}
|
|
420
|
+
function decodeSubscribeUpdatePayload(r) {
|
|
421
|
+
const request_id = r.readVarInt();
|
|
422
|
+
const subscription_request_id = r.readVarInt();
|
|
423
|
+
const parameters = decodeParams(r);
|
|
424
|
+
return { type: "subscribe_update", request_id, subscription_request_id, parameters };
|
|
425
|
+
}
|
|
426
|
+
function decodeUnsubscribePayload(r) {
|
|
427
|
+
const request_id = r.readVarInt();
|
|
428
|
+
return { type: "unsubscribe", request_id };
|
|
429
|
+
}
|
|
430
|
+
function decodePublishPayload(r) {
|
|
431
|
+
const request_id = r.readVarInt();
|
|
432
|
+
const track_namespace = r.readTuple();
|
|
433
|
+
const track_name = r.readString();
|
|
434
|
+
const track_alias = r.readVarInt();
|
|
435
|
+
const parameters = decodeParams(r);
|
|
436
|
+
return { type: "publish", request_id, track_namespace, track_name, track_alias, parameters };
|
|
437
|
+
}
|
|
438
|
+
function decodePublishOkPayload(r) {
|
|
439
|
+
const request_id = r.readVarInt();
|
|
440
|
+
const parameters = decodeParams(r);
|
|
441
|
+
return { type: "publish_ok", request_id, parameters };
|
|
442
|
+
}
|
|
443
|
+
function decodePublishDonePayload(r) {
|
|
444
|
+
const request_id = r.readVarInt();
|
|
445
|
+
const status_code = r.readVarInt();
|
|
446
|
+
const stream_count = r.readVarInt();
|
|
447
|
+
const reason_phrase = r.readString();
|
|
448
|
+
return { type: "publish_done", request_id, status_code, stream_count, reason_phrase };
|
|
449
|
+
}
|
|
450
|
+
function decodePublishNamespacePayload(r) {
|
|
451
|
+
const request_id = r.readVarInt();
|
|
452
|
+
const track_namespace = r.readTuple();
|
|
453
|
+
const parameters = decodeParams(r);
|
|
454
|
+
return { type: "publish_namespace", request_id, track_namespace, parameters };
|
|
455
|
+
}
|
|
456
|
+
function decodePublishNamespaceDonePayload(r) {
|
|
457
|
+
const track_namespace = r.readTuple();
|
|
458
|
+
return { type: "publish_namespace_done", track_namespace };
|
|
459
|
+
}
|
|
460
|
+
function decodePublishNamespaceCancelPayload(r) {
|
|
461
|
+
const track_namespace = r.readTuple();
|
|
462
|
+
const error_code = r.readVarInt();
|
|
463
|
+
const reason_phrase = r.readString();
|
|
464
|
+
return { type: "publish_namespace_cancel", track_namespace, error_code, reason_phrase };
|
|
465
|
+
}
|
|
466
|
+
function decodeSubscribeNamespacePayload(r) {
|
|
467
|
+
const request_id = r.readVarInt();
|
|
468
|
+
const namespace_prefix = r.readTuple();
|
|
469
|
+
const parameters = decodeParams(r);
|
|
470
|
+
return { type: "subscribe_namespace", request_id, namespace_prefix, parameters };
|
|
471
|
+
}
|
|
472
|
+
function decodeUnsubscribeNamespacePayload(r) {
|
|
473
|
+
const request_id = r.readVarInt();
|
|
474
|
+
return { type: "unsubscribe_namespace", request_id };
|
|
475
|
+
}
|
|
476
|
+
function decodeFetchPayload(r) {
|
|
477
|
+
const request_id = r.readVarInt();
|
|
478
|
+
const fetch_type = r.readVarInt();
|
|
479
|
+
const ft = Number(fetch_type);
|
|
480
|
+
if (ft < 1 || ft > 3) {
|
|
481
|
+
throw new DecodeError("CONSTRAINT_VIOLATION", `Invalid fetch_type: ${ft}`, r.offset);
|
|
482
|
+
}
|
|
483
|
+
let standalone;
|
|
484
|
+
let joining;
|
|
485
|
+
if (ft === 1) {
|
|
486
|
+
// Standalone Fetch
|
|
487
|
+
const track_namespace = r.readTuple();
|
|
488
|
+
const track_name = r.readString();
|
|
489
|
+
const start_group = r.readVarInt();
|
|
490
|
+
const start_object = r.readVarInt();
|
|
491
|
+
const end_group = r.readVarInt();
|
|
492
|
+
const end_object = r.readVarInt();
|
|
493
|
+
standalone = { track_namespace, track_name, start_group, start_object, end_group, end_object };
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
// Joining Fetch (relative=2, absolute=3)
|
|
497
|
+
const joining_request_id = r.readVarInt();
|
|
498
|
+
const joining_start = r.readVarInt();
|
|
499
|
+
joining = { joining_request_id, joining_start };
|
|
500
|
+
}
|
|
501
|
+
const parameters = decodeParams(r);
|
|
502
|
+
return {
|
|
503
|
+
type: "fetch",
|
|
504
|
+
request_id,
|
|
505
|
+
fetch_type,
|
|
506
|
+
standalone,
|
|
507
|
+
joining,
|
|
508
|
+
parameters,
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
function decodeFetchOkPayload(r) {
|
|
512
|
+
const request_id = r.readVarInt();
|
|
513
|
+
const end_of_track = r.readUint8();
|
|
514
|
+
const end_group = r.readVarInt();
|
|
515
|
+
const end_object = r.readVarInt();
|
|
516
|
+
const parameters = decodeParams(r);
|
|
517
|
+
return { type: "fetch_ok", request_id, end_of_track, end_group, end_object, parameters };
|
|
518
|
+
}
|
|
519
|
+
function decodeFetchCancelPayload(r) {
|
|
520
|
+
const request_id = r.readVarInt();
|
|
521
|
+
return { type: "fetch_cancel", request_id };
|
|
522
|
+
}
|
|
523
|
+
function decodeTrackStatusPayload(r) {
|
|
524
|
+
const request_id = r.readVarInt();
|
|
525
|
+
const track_namespace = r.readTuple();
|
|
526
|
+
const track_name = r.readString();
|
|
527
|
+
const parameters = decodeParams(r);
|
|
528
|
+
return { type: "track_status", request_id, track_namespace, track_name, parameters };
|
|
529
|
+
}
|
|
530
|
+
function decodeRequestOkPayload(r) {
|
|
531
|
+
const request_id = r.readVarInt();
|
|
532
|
+
const parameters = decodeParams(r);
|
|
533
|
+
return { type: "request_ok", request_id, parameters };
|
|
534
|
+
}
|
|
535
|
+
function decodeRequestErrorPayload(r) {
|
|
536
|
+
const request_id = r.readVarInt();
|
|
537
|
+
const error_code = r.readVarInt();
|
|
538
|
+
const reason_phrase = r.readString();
|
|
539
|
+
return { type: "request_error", request_id, error_code, reason_phrase };
|
|
540
|
+
}
|
|
541
|
+
function decodeGoAwayPayload(r) {
|
|
542
|
+
const new_session_uri = r.readString();
|
|
543
|
+
return { type: "goaway", new_session_uri };
|
|
544
|
+
}
|
|
545
|
+
function decodeMaxRequestIdPayload(r) {
|
|
546
|
+
const max_request_id = r.readVarInt();
|
|
547
|
+
return { type: "max_request_id", max_request_id };
|
|
548
|
+
}
|
|
549
|
+
function decodeRequestsBlockedPayload(r) {
|
|
550
|
+
const maximum_request_id = r.readVarInt();
|
|
551
|
+
return { type: "requests_blocked", maximum_request_id };
|
|
552
|
+
}
|
|
553
|
+
// ─── Payload dispatch tables ───────────────────────────────────────────────────
|
|
554
|
+
const payloadDecoders = new Map([
|
|
555
|
+
[MSG_CLIENT_SETUP, decodeClientSetupPayload],
|
|
556
|
+
[MSG_SERVER_SETUP, decodeServerSetupPayload],
|
|
557
|
+
[MSG_SUBSCRIBE, decodeSubscribePayload],
|
|
558
|
+
[MSG_SUBSCRIBE_OK, decodeSubscribeOkPayload],
|
|
559
|
+
[MSG_SUBSCRIBE_UPDATE, decodeSubscribeUpdatePayload],
|
|
560
|
+
[MSG_UNSUBSCRIBE, decodeUnsubscribePayload],
|
|
561
|
+
[MSG_PUBLISH, decodePublishPayload],
|
|
562
|
+
[MSG_PUBLISH_OK, decodePublishOkPayload],
|
|
563
|
+
[MSG_PUBLISH_DONE, decodePublishDonePayload],
|
|
564
|
+
[MSG_PUBLISH_NAMESPACE, decodePublishNamespacePayload],
|
|
565
|
+
[MSG_PUBLISH_NAMESPACE_DONE, decodePublishNamespaceDonePayload],
|
|
566
|
+
[MSG_PUBLISH_NAMESPACE_CANCEL, decodePublishNamespaceCancelPayload],
|
|
567
|
+
[MSG_SUBSCRIBE_NAMESPACE, decodeSubscribeNamespacePayload],
|
|
568
|
+
[MSG_UNSUBSCRIBE_NAMESPACE, decodeUnsubscribeNamespacePayload],
|
|
569
|
+
[MSG_FETCH, decodeFetchPayload],
|
|
570
|
+
[MSG_FETCH_OK, decodeFetchOkPayload],
|
|
571
|
+
[MSG_FETCH_CANCEL, decodeFetchCancelPayload],
|
|
572
|
+
[MSG_TRACK_STATUS, decodeTrackStatusPayload],
|
|
573
|
+
[MSG_REQUEST_OK, decodeRequestOkPayload],
|
|
574
|
+
[MSG_REQUEST_ERROR, decodeRequestErrorPayload],
|
|
575
|
+
[MSG_GOAWAY, decodeGoAwayPayload],
|
|
576
|
+
[MSG_MAX_REQUEST_ID, decodeMaxRequestIdPayload],
|
|
577
|
+
[MSG_REQUESTS_BLOCKED, decodeRequestsBlockedPayload],
|
|
578
|
+
]);
|
|
579
|
+
// ─── Public API ────────────────────────────────────────────────────────────────
|
|
580
|
+
/**
|
|
581
|
+
* Encode a draft-15 control message with type(varint) + length(uint16 BE) + payload.
|
|
582
|
+
*/
|
|
583
|
+
export function encodeMessage(message) {
|
|
584
|
+
const typeId = MESSAGE_ID_MAP.get(message.type);
|
|
585
|
+
if (typeId === undefined) {
|
|
586
|
+
throw new Error(`Unknown message type: ${message.type}`);
|
|
587
|
+
}
|
|
588
|
+
// Encode payload into a separate buffer
|
|
589
|
+
const payloadWriter = new BufferWriter();
|
|
590
|
+
encodePayload(message, payloadWriter);
|
|
591
|
+
const payload = payloadWriter.finish();
|
|
592
|
+
if (payload.byteLength > 0xffff) {
|
|
593
|
+
throw new Error(`Payload too large for 16-bit length: ${payload.byteLength}`);
|
|
594
|
+
}
|
|
595
|
+
// Write framed message: type(varint) + length(uint16 BE) + payload
|
|
596
|
+
const writer = new BufferWriter();
|
|
597
|
+
writer.writeVarInt(typeId);
|
|
598
|
+
writer.writeUint8((payload.byteLength >> 8) & 0xff);
|
|
599
|
+
writer.writeUint8(payload.byteLength & 0xff);
|
|
600
|
+
writer.writeBytes(payload);
|
|
601
|
+
return writer.finish();
|
|
602
|
+
}
|
|
603
|
+
function encodePayload(msg, w) {
|
|
604
|
+
switch (msg.type) {
|
|
605
|
+
case "client_setup":
|
|
606
|
+
return encodeClientSetupPayload(msg, w);
|
|
607
|
+
case "server_setup":
|
|
608
|
+
return encodeServerSetupPayload(msg, w);
|
|
609
|
+
case "subscribe":
|
|
610
|
+
return encodeSubscribePayload(msg, w);
|
|
611
|
+
case "subscribe_ok":
|
|
612
|
+
return encodeSubscribeOkPayload(msg, w);
|
|
613
|
+
case "subscribe_update":
|
|
614
|
+
return encodeSubscribeUpdatePayload(msg, w);
|
|
615
|
+
case "unsubscribe":
|
|
616
|
+
return encodeUnsubscribePayload(msg, w);
|
|
617
|
+
case "publish":
|
|
618
|
+
return encodePublishPayload(msg, w);
|
|
619
|
+
case "publish_ok":
|
|
620
|
+
return encodePublishOkPayload(msg, w);
|
|
621
|
+
case "publish_done":
|
|
622
|
+
return encodePublishDonePayload(msg, w);
|
|
623
|
+
case "publish_namespace":
|
|
624
|
+
return encodePublishNamespacePayload(msg, w);
|
|
625
|
+
case "publish_namespace_done":
|
|
626
|
+
return encodePublishNamespaceDonePayload(msg, w);
|
|
627
|
+
case "publish_namespace_cancel":
|
|
628
|
+
return encodePublishNamespaceCancelPayload(msg, w);
|
|
629
|
+
case "subscribe_namespace":
|
|
630
|
+
return encodeSubscribeNamespacePayload(msg, w);
|
|
631
|
+
case "unsubscribe_namespace":
|
|
632
|
+
return encodeUnsubscribeNamespacePayload(msg, w);
|
|
633
|
+
case "fetch":
|
|
634
|
+
return encodeFetchPayload(msg, w);
|
|
635
|
+
case "fetch_ok":
|
|
636
|
+
return encodeFetchOkPayload(msg, w);
|
|
637
|
+
case "fetch_cancel":
|
|
638
|
+
return encodeFetchCancelPayload(msg, w);
|
|
639
|
+
case "track_status":
|
|
640
|
+
return encodeTrackStatusPayload(msg, w);
|
|
641
|
+
case "request_ok":
|
|
642
|
+
return encodeRequestOkPayload(msg, w);
|
|
643
|
+
case "request_error":
|
|
644
|
+
return encodeRequestErrorPayload(msg, w);
|
|
645
|
+
case "goaway":
|
|
646
|
+
return encodeGoAwayPayload(msg, w);
|
|
647
|
+
case "max_request_id":
|
|
648
|
+
return encodeMaxRequestIdPayload(msg, w);
|
|
649
|
+
case "requests_blocked":
|
|
650
|
+
return encodeRequestsBlockedPayload(msg, w);
|
|
651
|
+
default: {
|
|
652
|
+
const _exhaustive = msg;
|
|
653
|
+
throw new Error(`Unhandled message type: ${_exhaustive.type}`);
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
/**
|
|
658
|
+
* Decode a draft-15 control message from bytes (type + uint16 length + payload).
|
|
659
|
+
*/
|
|
660
|
+
export function decodeMessage(bytes) {
|
|
661
|
+
try {
|
|
662
|
+
const reader = new BufferReader(bytes);
|
|
663
|
+
const typeId = reader.readVarInt();
|
|
664
|
+
// Read 16-bit big-endian payload length
|
|
665
|
+
const lenHi = reader.readUint8();
|
|
666
|
+
const lenLo = reader.readUint8();
|
|
667
|
+
const payloadLength = (lenHi << 8) | lenLo;
|
|
668
|
+
// Read exactly payloadLength bytes
|
|
669
|
+
const payloadBytes = reader.readBytes(payloadLength);
|
|
670
|
+
const payloadReader = new BufferReader(payloadBytes);
|
|
671
|
+
const decoder = payloadDecoders.get(typeId);
|
|
672
|
+
if (!decoder) {
|
|
673
|
+
return {
|
|
674
|
+
ok: false,
|
|
675
|
+
error: new DecodeError("UNKNOWN_MESSAGE_TYPE", `Unknown message type ID: 0x${typeId.toString(16)}`, 0),
|
|
676
|
+
};
|
|
677
|
+
}
|
|
678
|
+
const message = decoder(payloadReader);
|
|
679
|
+
return { ok: true, value: message, bytesRead: reader.offset };
|
|
680
|
+
}
|
|
681
|
+
catch (e) {
|
|
682
|
+
if (e instanceof DecodeError) {
|
|
683
|
+
return { ok: false, error: e };
|
|
684
|
+
}
|
|
685
|
+
throw e;
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
// ─── Data Stream Re-exports ───────────────────────────────────────────────────
|
|
689
|
+
import { encodeSubgroupStream, decodeSubgroupStream, encodeDatagram, decodeDatagram, encodeFetchStream, decodeFetchStream, decodeDataStream, createSubgroupStreamDecoder, createFetchStreamDecoder, createDataStreamDecoder, } from "./data-streams.js";
|
|
690
|
+
export { encodeSubgroupStream, decodeSubgroupStream, encodeDatagram, decodeDatagram, encodeFetchStream, decodeFetchStream, decodeDataStream, createSubgroupStreamDecoder, createFetchStreamDecoder, createDataStreamDecoder, };
|
|
691
|
+
// ─── Stream Decoders ───────────────────────────────────────────────────────────
|
|
692
|
+
/**
|
|
693
|
+
* Create a TransformStream that decodes a continuous byte stream into
|
|
694
|
+
* individual Draft15Message objects.
|
|
695
|
+
*/
|
|
696
|
+
export function createStreamDecoder() {
|
|
697
|
+
let buffer = new Uint8Array(0);
|
|
698
|
+
return new TransformStream({
|
|
699
|
+
transform(chunk, controller) {
|
|
700
|
+
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
701
|
+
newBuffer.set(buffer, 0);
|
|
702
|
+
newBuffer.set(chunk, buffer.length);
|
|
703
|
+
buffer = newBuffer;
|
|
704
|
+
while (buffer.length > 0) {
|
|
705
|
+
const result = decodeMessage(buffer);
|
|
706
|
+
if (!result.ok) {
|
|
707
|
+
if (result.error.code === "UNEXPECTED_END") {
|
|
708
|
+
break;
|
|
709
|
+
}
|
|
710
|
+
controller.error(result.error);
|
|
711
|
+
return;
|
|
712
|
+
}
|
|
713
|
+
controller.enqueue(result.value);
|
|
714
|
+
buffer = buffer.slice(result.bytesRead);
|
|
715
|
+
}
|
|
716
|
+
},
|
|
717
|
+
flush(controller) {
|
|
718
|
+
if (buffer.length > 0) {
|
|
719
|
+
controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete message data", 0));
|
|
720
|
+
}
|
|
721
|
+
},
|
|
722
|
+
});
|
|
723
|
+
}
|
|
724
|
+
export function createDraft15Codec() {
|
|
725
|
+
return {
|
|
726
|
+
draft: "draft-ietf-moq-transport-15",
|
|
727
|
+
encodeMessage,
|
|
728
|
+
decodeMessage,
|
|
729
|
+
encodeSubgroupStream,
|
|
730
|
+
encodeDatagram,
|
|
731
|
+
encodeFetchStream,
|
|
732
|
+
decodeSubgroupStream,
|
|
733
|
+
decodeDatagram,
|
|
734
|
+
decodeFetchStream,
|
|
735
|
+
decodeDataStream,
|
|
736
|
+
createStreamDecoder,
|
|
737
|
+
createSubgroupStreamDecoder,
|
|
738
|
+
createFetchStreamDecoder,
|
|
739
|
+
createDataStreamDecoder,
|
|
740
|
+
};
|
|
741
|
+
}
|
|
742
|
+
//# sourceMappingURL=codec.js.map
|