@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.
Files changed (716) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +100 -99
  3. package/dist/{chunk-RZHAPEXO.js → chunk-2A57DRXV.js} +36 -10
  4. package/dist/{chunk-PJRA2TQ5.js → chunk-2UTVXWFF.js} +388 -254
  5. package/dist/{chunk-IV2H5CFI.cjs → chunk-3XKO6PCR.cjs} +461 -322
  6. package/dist/{chunk-RVJAGE4S.cjs → chunk-4BDEU3D4.cjs} +415 -304
  7. package/dist/{chunk-XUUCOLWU.cjs → chunk-4HBKHNU2.cjs} +374 -329
  8. package/dist/{chunk-4RIXXEII.js → chunk-4IVZZOY3.js} +451 -312
  9. package/dist/{chunk-ZSPO2GF2.cjs → chunk-5O764MBD.cjs} +1320 -842
  10. package/dist/chunk-7KBAWOBA.js +1212 -0
  11. package/dist/{chunk-JSQM2MG3.js → chunk-7QOPNSDF.js} +44 -12
  12. package/dist/{chunk-SYHW3FLI.cjs → chunk-7RE6KSIY.cjs} +28 -8
  13. package/dist/{chunk-YG5KJESI.js → chunk-AY6IAHUM.js} +28 -8
  14. package/dist/{chunk-EFM5T7OM.js → chunk-BLQDWOSG.js} +36 -10
  15. package/dist/{chunk-KFTCU2P6.js → chunk-C6KUWLQC.js} +0 -3
  16. package/dist/{chunk-UYXTY6ZQ.cjs → chunk-E65QKRSN.cjs} +20 -12
  17. package/dist/{chunk-BISI45MN.cjs → chunk-EAHE3IOG.cjs} +44 -12
  18. package/dist/{chunk-IV2HRJVT.js → chunk-GCBFHZW6.js} +405 -294
  19. package/dist/{chunk-GXEW4COZ.cjs → chunk-H5NSL4MO.cjs} +36 -10
  20. package/dist/chunk-HZHSO7EW.cjs +1212 -0
  21. package/dist/{chunk-BPNL5YFQ.cjs → chunk-IILNSDEQ.cjs} +74 -46
  22. package/dist/{chunk-4XYGE53S.cjs → chunk-J3XCPBW3.cjs} +36 -10
  23. package/dist/{chunk-6AEHWULA.cjs → chunk-JKOEJZ5B.cjs} +28 -8
  24. package/dist/{chunk-FWISIR26.cjs → chunk-JL3NEW3O.cjs} +47 -4
  25. package/dist/{chunk-G7GI7LJA.js → chunk-LORZMJJB.js} +36 -10
  26. package/dist/{chunk-DUBCL3WF.cjs → chunk-LV5C6MEC.cjs} +36 -10
  27. package/dist/{chunk-ENURAVHI.cjs → chunk-MYXAD5JC.cjs} +44 -12
  28. package/dist/{chunk-FXZ2MYKJ.js → chunk-MZ7HUCGJ.js} +20 -12
  29. package/dist/{chunk-RWQ43Z4F.cjs → chunk-MZ7VU52O.cjs} +0 -3
  30. package/dist/{chunk-G26SJ6XS.cjs → chunk-OKG2HT25.cjs} +1193 -928
  31. package/dist/{chunk-IBVM4DMJ.cjs → chunk-PKEOQSSZ.cjs} +374 -329
  32. package/dist/{chunk-LH4NTURO.js → chunk-Q46ZURKX.js} +989 -602
  33. package/dist/{chunk-UR6JKS56.js → chunk-Q7IGWV3P.js} +41 -9
  34. package/dist/{chunk-ST24APEO.js → chunk-RW4UG7CN.js} +751 -682
  35. package/dist/{chunk-DWK5ZQZ4.js → chunk-RZTLQAKF.js} +28 -8
  36. package/dist/{chunk-UNS34PTA.cjs → chunk-S6IPIN66.cjs} +44 -12
  37. package/dist/{chunk-K4OLITS2.cjs → chunk-SDWRXXOO.cjs} +401 -267
  38. package/dist/{chunk-CXDHOMHG.js → chunk-SHMA4PBY.js} +476 -431
  39. package/dist/{chunk-U2B3B42P.js → chunk-U3ZVLT5L.js} +1176 -540
  40. package/dist/{chunk-HSVYF6XX.cjs → chunk-UJU63EFY.cjs} +1524 -1137
  41. package/dist/{chunk-A27S7HW7.js → chunk-VOU7PNHI.js} +47 -4
  42. package/dist/{chunk-E6E3NQYU.js → chunk-WRHGCVYN.js} +44 -12
  43. package/dist/chunk-XNWYLVGU.cjs +1854 -0
  44. package/dist/{chunk-NUX5BHWO.js → chunk-XS77RBY7.js} +1160 -895
  45. package/dist/{chunk-4YJANAXU.cjs → chunk-XZE5R57R.cjs} +829 -760
  46. package/dist/{chunk-NGVE2RZT.js → chunk-Y6KCSM3V.js} +476 -431
  47. package/dist/{chunk-TLYNOOQP.cjs → chunk-YTPZZI2M.cjs} +41 -9
  48. package/dist/{chunk-7DUBLRXC.js → chunk-YWRCSQBA.js} +44 -12
  49. package/dist/{chunk-MFAP7R6L.js → chunk-Z3VKP3PJ.js} +70 -42
  50. package/dist/{chunk-ZBKE2QRQ.js → chunk-Z6U26IRI.js} +1107 -629
  51. package/dist/codec-25u4_1HS.d.ts +35 -0
  52. package/dist/codec-3Ppy_5Gd.d.ts +23 -0
  53. package/dist/codec-BB0U8MF2.d.cts +34 -0
  54. package/dist/codec-BHHfBTnV.d.ts +34 -0
  55. package/dist/codec-BN6jk0Td.d.cts +30 -0
  56. package/dist/codec-BU0gaSZm.d.ts +29 -0
  57. package/dist/codec-C-Yk2RNa.d.ts +30 -0
  58. package/dist/codec-CFWQY9Lj.d.cts +18 -0
  59. package/dist/codec-COy4uuPO.d.cts +29 -0
  60. package/dist/codec-CewFCsEy.d.ts +18 -0
  61. package/dist/codec-Ck7ZwFF1.d.cts +35 -0
  62. package/dist/codec-D2QVSH9D.d.ts +30 -0
  63. package/dist/codec-DDUBJGn0.d.cts +23 -0
  64. package/dist/codec-DNfml-se.d.ts +27 -0
  65. package/dist/codec-DoOGjjDq.d.cts +29 -0
  66. package/dist/codec-J7ekOSMc.d.ts +29 -0
  67. package/dist/codec-R9TJCq-E.d.cts +31 -0
  68. package/dist/codec-ZwV-Njt6.d.ts +23 -0
  69. package/dist/codec-j819z_hL.d.cts +23 -0
  70. package/dist/codec-w8z2j_uo.d.cts +27 -0
  71. package/dist/codec-wtt6WF1K.d.ts +31 -0
  72. package/dist/codec-z6_2PSzi.d.cts +30 -0
  73. package/dist/draft10-session.cjs +2 -2
  74. package/dist/draft10-session.d.cts +6 -6
  75. package/dist/draft10-session.d.ts +6 -6
  76. package/dist/draft10-session.js +1 -1
  77. package/dist/draft10.cjs +8 -4
  78. package/dist/draft10.d.cts +23 -11
  79. package/dist/draft10.d.ts +23 -11
  80. package/dist/draft10.js +16 -12
  81. package/dist/draft11-session.cjs +2 -2
  82. package/dist/draft11-session.d.cts +6 -6
  83. package/dist/draft11-session.d.ts +6 -6
  84. package/dist/draft11-session.js +1 -1
  85. package/dist/draft11.cjs +8 -4
  86. package/dist/draft11.d.cts +21 -11
  87. package/dist/draft11.d.ts +21 -11
  88. package/dist/draft11.js +16 -12
  89. package/dist/draft12-session.cjs +2 -2
  90. package/dist/draft12-session.d.cts +6 -6
  91. package/dist/draft12-session.d.ts +6 -6
  92. package/dist/draft12-session.js +1 -1
  93. package/dist/draft12.cjs +8 -4
  94. package/dist/draft12.d.cts +23 -13
  95. package/dist/draft12.d.ts +23 -13
  96. package/dist/draft12.js +16 -12
  97. package/dist/draft13-session.cjs +2 -2
  98. package/dist/draft13-session.d.cts +6 -6
  99. package/dist/draft13-session.d.ts +6 -6
  100. package/dist/draft13-session.js +1 -1
  101. package/dist/draft13.cjs +8 -4
  102. package/dist/draft13.d.cts +23 -13
  103. package/dist/draft13.d.ts +23 -13
  104. package/dist/draft13.js +16 -12
  105. package/dist/draft14-session.cjs +2 -2
  106. package/dist/draft14-session.d.cts +6 -6
  107. package/dist/draft14-session.d.ts +6 -6
  108. package/dist/draft14-session.js +1 -1
  109. package/dist/draft14.cjs +14 -4
  110. package/dist/draft14.d.cts +67 -11
  111. package/dist/draft14.d.ts +67 -11
  112. package/dist/draft14.js +13 -3
  113. package/dist/draft15-session.cjs +2 -2
  114. package/dist/draft15-session.d.cts +6 -6
  115. package/dist/draft15-session.d.ts +6 -6
  116. package/dist/draft15-session.js +1 -1
  117. package/dist/draft15.cjs +8 -4
  118. package/dist/draft15.d.cts +56 -11
  119. package/dist/draft15.d.ts +56 -11
  120. package/dist/draft15.js +16 -12
  121. package/dist/draft16-session.cjs +2 -2
  122. package/dist/draft16-session.d.cts +6 -6
  123. package/dist/draft16-session.d.ts +6 -6
  124. package/dist/draft16-session.js +1 -1
  125. package/dist/draft16.cjs +8 -4
  126. package/dist/draft16.d.cts +45 -11
  127. package/dist/draft16.d.ts +45 -11
  128. package/dist/draft16.js +16 -12
  129. package/dist/draft17-session.cjs +2 -2
  130. package/dist/draft17-session.d.cts +7 -7
  131. package/dist/draft17-session.d.ts +7 -7
  132. package/dist/draft17-session.js +1 -1
  133. package/dist/draft17.cjs +8 -4
  134. package/dist/draft17.d.cts +21 -8
  135. package/dist/draft17.d.ts +21 -8
  136. package/dist/draft17.js +16 -12
  137. package/dist/draft7-session.cjs +3 -3
  138. package/dist/draft7-session.d.cts +6 -5
  139. package/dist/draft7-session.d.ts +6 -5
  140. package/dist/draft7-session.js +2 -2
  141. package/dist/draft7.cjs +83 -14
  142. package/dist/draft7.d.cts +59 -64
  143. package/dist/draft7.d.ts +59 -64
  144. package/dist/draft7.js +89 -20
  145. package/dist/draft8-session.cjs +2 -2
  146. package/dist/draft8-session.d.cts +6 -6
  147. package/dist/draft8-session.d.ts +6 -6
  148. package/dist/draft8-session.js +1 -1
  149. package/dist/draft8.cjs +8 -4
  150. package/dist/draft8.d.cts +23 -11
  151. package/dist/draft8.d.ts +23 -11
  152. package/dist/draft8.js +7 -3
  153. package/dist/draft9-session.cjs +2 -2
  154. package/dist/draft9-session.d.cts +6 -6
  155. package/dist/draft9-session.d.ts +6 -6
  156. package/dist/draft9-session.js +1 -1
  157. package/dist/draft9.cjs +8 -4
  158. package/dist/draft9.d.cts +23 -11
  159. package/dist/draft9.d.ts +23 -11
  160. package/dist/draft9.js +7 -3
  161. package/dist/index.cjs +52 -73
  162. package/dist/index.d.cts +41 -60
  163. package/dist/index.d.ts +55 -82
  164. package/dist/index.js +89 -93
  165. package/dist/{session-types-CJIFbTPd.d.ts → session-types-C7UONex5.d.cts} +28 -27
  166. package/dist/{session-types-Cbq8IGCP.d.cts → session-types-X-IYEGoG.d.ts} +28 -27
  167. package/dist/session.cjs +47 -14
  168. package/dist/session.d.cts +28 -9
  169. package/dist/session.d.ts +32 -9
  170. package/dist/session.js +59 -32
  171. package/dist/{types-4VxSL2Ho.d.ts → types--Q7_DcvP.d.cts} +49 -39
  172. package/dist/{types-4VxSL2Ho.d.cts → types--Q7_DcvP.d.ts} +49 -39
  173. package/dist/{types-Cw4WE9dh.d.ts → types-0IWbU9Z_.d.cts} +44 -36
  174. package/dist/{types-Cw4WE9dh.d.cts → types-0IWbU9Z_.d.ts} +44 -36
  175. package/dist/{types-D5gNQiDj.d.ts → types-B3g5G9KP.d.cts} +44 -36
  176. package/dist/{types-D5gNQiDj.d.cts → types-B3g5G9KP.d.ts} +44 -36
  177. package/dist/{types-B2afJZM-.d.cts → types-BFpFNM_m.d.cts} +60 -32
  178. package/dist/{types-B2afJZM-.d.ts → types-BFpFNM_m.d.ts} +60 -32
  179. package/dist/{types-ERexTpT8.d.ts → types-Br7fm2mf.d.cts} +51 -26
  180. package/dist/{types-ERexTpT8.d.cts → types-Br7fm2mf.d.ts} +51 -26
  181. package/dist/{types-Bg6QYNVt.d.cts → types-C2qKTRR_.d.cts} +55 -45
  182. package/dist/{types-Bg6QYNVt.d.ts → types-C2qKTRR_.d.ts} +55 -45
  183. package/dist/{types-BTFeKYCb.d.ts → types-DEaypVsD.d.cts} +133 -58
  184. package/dist/{types-BTFeKYCb.d.cts → types-DEaypVsD.d.ts} +133 -58
  185. package/dist/types-Dl4IaAHR.d.cts +282 -0
  186. package/dist/types-Dl4IaAHR.d.ts +282 -0
  187. package/dist/{types-C_1HrqBl.d.cts → types-DrQpTW1G.d.cts} +63 -50
  188. package/dist/{types-C_1HrqBl.d.ts → types-DrQpTW1G.d.ts} +63 -50
  189. package/dist/types-DuIO7cWK.d.cts +25 -0
  190. package/dist/types-DuIO7cWK.d.ts +25 -0
  191. package/dist/{types-DqCDFqgB.d.ts → types-DuxfOYiO.d.cts} +50 -31
  192. package/dist/{types-DqCDFqgB.d.cts → types-DuxfOYiO.d.ts} +50 -31
  193. package/dist/{types-r-CasCf1.d.cts → types-jV1yDDBA.d.cts} +43 -36
  194. package/dist/{types-r-CasCf1.d.ts → types-jV1yDDBA.d.ts} +43 -36
  195. package/package.json +15 -15
  196. package/src/core/buffer-reader.ts +69 -53
  197. package/src/core/buffer-writer.ts +55 -46
  198. package/src/core/errors.ts +1 -1
  199. package/src/core/hex.ts +21 -17
  200. package/src/core/session-types.ts +61 -59
  201. package/src/core/types.ts +18 -361
  202. package/src/drafts/draft07/codec.ts +1058 -933
  203. package/src/drafts/draft07/data-streams.ts +116 -116
  204. package/src/drafts/draft07/index.ts +124 -89
  205. package/src/drafts/draft07/messages.ts +76 -42
  206. package/src/drafts/draft07/rules.ts +107 -101
  207. package/src/drafts/draft07/session-fsm.ts +315 -287
  208. package/src/drafts/draft07/session.ts +8 -6
  209. package/src/drafts/draft07/types.ts +406 -72
  210. package/src/drafts/draft07/varint.ts +40 -12
  211. package/src/drafts/draft08/codec.ts +985 -944
  212. package/src/drafts/draft08/data-streams.ts +178 -174
  213. package/src/drafts/draft08/index.ts +10 -9
  214. package/src/drafts/draft08/messages.ts +59 -59
  215. package/src/drafts/draft08/rules.ts +73 -73
  216. package/src/drafts/draft08/session-fsm.ts +335 -303
  217. package/src/drafts/draft08/session.ts +6 -7
  218. package/src/drafts/draft08/types.ts +380 -384
  219. package/src/drafts/draft09/codec.ts +977 -936
  220. package/src/drafts/draft09/data-streams.ts +163 -159
  221. package/src/drafts/draft09/index.ts +10 -9
  222. package/src/drafts/draft09/messages.ts +59 -59
  223. package/src/drafts/draft09/rules.ts +73 -73
  224. package/src/drafts/draft09/session-fsm.ts +335 -303
  225. package/src/drafts/draft09/session.ts +6 -7
  226. package/src/drafts/draft09/types.ts +380 -384
  227. package/src/drafts/draft10/codec.ts +977 -936
  228. package/src/drafts/draft10/data-streams.ts +163 -159
  229. package/src/drafts/draft10/index.ts +10 -9
  230. package/src/drafts/draft10/messages.ts +59 -59
  231. package/src/drafts/draft10/rules.ts +73 -73
  232. package/src/drafts/draft10/session-fsm.ts +335 -303
  233. package/src/drafts/draft10/session.ts +6 -7
  234. package/src/drafts/draft10/types.ts +380 -384
  235. package/src/drafts/draft11/codec.ts +1054 -979
  236. package/src/drafts/draft11/data-streams.ts +189 -142
  237. package/src/drafts/draft11/index.ts +10 -9
  238. package/src/drafts/draft11/messages.ts +60 -59
  239. package/src/drafts/draft11/rules.ts +73 -73
  240. package/src/drafts/draft11/session-fsm.ts +359 -333
  241. package/src/drafts/draft11/session.ts +6 -7
  242. package/src/drafts/draft11/types.ts +385 -381
  243. package/src/drafts/draft12/codec.ts +1178 -1113
  244. package/src/drafts/draft12/data-streams.ts +192 -143
  245. package/src/drafts/draft12/index.ts +10 -9
  246. package/src/drafts/draft12/messages.ts +67 -66
  247. package/src/drafts/draft12/rules.ts +79 -79
  248. package/src/drafts/draft12/session-fsm.ts +384 -358
  249. package/src/drafts/draft12/session.ts +6 -7
  250. package/src/drafts/draft12/types.ts +424 -419
  251. package/src/drafts/draft13/codec.ts +1296 -1197
  252. package/src/drafts/draft13/data-streams.ts +194 -143
  253. package/src/drafts/draft13/index.ts +10 -9
  254. package/src/drafts/draft13/messages.ts +73 -68
  255. package/src/drafts/draft13/rules.ts +81 -81
  256. package/src/drafts/draft13/session-fsm.ts +392 -366
  257. package/src/drafts/draft13/session.ts +6 -7
  258. package/src/drafts/draft13/types.ts +447 -438
  259. package/src/drafts/draft14/codec.ts +1347 -1034
  260. package/src/drafts/draft14/data-streams.ts +429 -396
  261. package/src/drafts/draft14/index.ts +17 -9
  262. package/src/drafts/draft14/messages.ts +65 -65
  263. package/src/drafts/draft14/rules.ts +81 -81
  264. package/src/drafts/draft14/session-fsm.ts +415 -405
  265. package/src/drafts/draft14/session.ts +6 -7
  266. package/src/drafts/draft14/types.ts +451 -381
  267. package/src/drafts/draft15/codec.ts +1138 -969
  268. package/src/drafts/draft15/data-streams.ts +428 -364
  269. package/src/drafts/draft15/index.ts +10 -9
  270. package/src/drafts/draft15/messages.ts +54 -53
  271. package/src/drafts/draft15/rules.ts +67 -67
  272. package/src/drafts/draft15/session-fsm.ts +319 -299
  273. package/src/drafts/draft15/session.ts +6 -7
  274. package/src/drafts/draft15/types.ts +357 -339
  275. package/src/drafts/draft16/codec.ts +1242 -957
  276. package/src/drafts/draft16/data-streams.ts +433 -371
  277. package/src/drafts/draft16/index.ts +10 -9
  278. package/src/drafts/draft16/messages.ts +56 -55
  279. package/src/drafts/draft16/rules.ts +69 -69
  280. package/src/drafts/draft16/session-fsm.ts +319 -299
  281. package/src/drafts/draft16/session.ts +6 -7
  282. package/src/drafts/draft16/types.ts +386 -357
  283. package/src/drafts/draft17/codec.ts +1209 -962
  284. package/src/drafts/draft17/data-streams.ts +593 -366
  285. package/src/drafts/draft17/index.ts +9 -7
  286. package/src/drafts/draft17/messages.ts +43 -42
  287. package/src/drafts/draft17/rules.ts +58 -58
  288. package/src/drafts/draft17/session-fsm.ts +248 -216
  289. package/src/drafts/draft17/session.ts +5 -5
  290. package/src/drafts/draft17/types.ts +337 -313
  291. package/src/index.ts +85 -274
  292. package/src/session.ts +62 -23
  293. package/dist/chunk-7IVGHMKJ.cjs +0 -866
  294. package/dist/chunk-FUFTMAQD.cjs +0 -1218
  295. package/dist/chunk-TMNGRIPL.js +0 -866
  296. package/dist/codec-95k8CAu5.d.cts +0 -35
  297. package/dist/codec-AFuOxfsO.d.ts +0 -60
  298. package/dist/codec-B-UJ5Iow.d.cts +0 -75
  299. package/dist/codec-BC5jfvMb.d.ts +0 -35
  300. package/dist/codec-BECYPfY8.d.ts +0 -35
  301. package/dist/codec-BsPU1vNC.d.ts +0 -39
  302. package/dist/codec-BvpuF-6u.d.cts +0 -39
  303. package/dist/codec-C8jZI5Cx.d.cts +0 -39
  304. package/dist/codec-CAevkgf5.d.cts +0 -33
  305. package/dist/codec-CSUqCrRs.d.ts +0 -39
  306. package/dist/codec-C_HMXNK_.d.ts +0 -33
  307. package/dist/codec-CpuvYTSV.d.cts +0 -86
  308. package/dist/codec-D0x8-SCw.d.cts +0 -35
  309. package/dist/codec-D7ARhpG1.d.ts +0 -75
  310. package/dist/codec-DNAUGshO.d.cts +0 -60
  311. package/dist/codec-DPx_QNn0.d.ts +0 -31
  312. package/dist/codec-DRhCx_hw.d.ts +0 -86
  313. package/dist/codec-Db7YPe3l.d.ts +0 -31
  314. package/dist/codec-axkJpb7D.d.cts +0 -31
  315. package/dist/codec-ujAbFaep.d.cts +0 -31
  316. package/dist/core/buffer-reader.d.ts +0 -15
  317. package/dist/core/buffer-reader.d.ts.map +0 -1
  318. package/dist/core/buffer-reader.js +0 -98
  319. package/dist/core/buffer-reader.js.map +0 -1
  320. package/dist/core/buffer-writer.d.ts +0 -16
  321. package/dist/core/buffer-writer.d.ts.map +0 -1
  322. package/dist/core/buffer-writer.js +0 -86
  323. package/dist/core/buffer-writer.js.map +0 -1
  324. package/dist/core/errors.d.ts +0 -2
  325. package/dist/core/errors.d.ts.map +0 -1
  326. package/dist/core/errors.js +0 -2
  327. package/dist/core/errors.js.map +0 -1
  328. package/dist/core/hex.d.ts +0 -5
  329. package/dist/core/hex.d.ts.map +0 -1
  330. package/dist/core/hex.js +0 -17
  331. package/dist/core/hex.js.map +0 -1
  332. package/dist/core/session-types.d.ts +0 -99
  333. package/dist/core/session-types.d.ts.map +0 -1
  334. package/dist/core/session-types.js +0 -2
  335. package/dist/core/session-types.js.map +0 -1
  336. package/dist/core/types.d.ts +0 -235
  337. package/dist/core/types.d.ts.map +0 -1
  338. package/dist/core/types.js +0 -11
  339. package/dist/core/types.js.map +0 -1
  340. package/dist/drafts/draft07/announce-fsm.d.ts +0 -2
  341. package/dist/drafts/draft07/announce-fsm.d.ts.map +0 -1
  342. package/dist/drafts/draft07/announce-fsm.js +0 -2
  343. package/dist/drafts/draft07/announce-fsm.js.map +0 -1
  344. package/dist/drafts/draft07/codec.d.ts +0 -17
  345. package/dist/drafts/draft07/codec.d.ts.map +0 -1
  346. package/dist/drafts/draft07/codec.js +0 -722
  347. package/dist/drafts/draft07/codec.js.map +0 -1
  348. package/dist/drafts/draft07/data-streams.d.ts +0 -9
  349. package/dist/drafts/draft07/data-streams.d.ts.map +0 -1
  350. package/dist/drafts/draft07/data-streams.js +0 -228
  351. package/dist/drafts/draft07/data-streams.js.map +0 -1
  352. package/dist/drafts/draft07/index.d.ts +0 -14
  353. package/dist/drafts/draft07/index.d.ts.map +0 -1
  354. package/dist/drafts/draft07/index.js +0 -18
  355. package/dist/drafts/draft07/index.js.map +0 -1
  356. package/dist/drafts/draft07/messages.d.ts +0 -32
  357. package/dist/drafts/draft07/messages.d.ts.map +0 -1
  358. package/dist/drafts/draft07/messages.js +0 -42
  359. package/dist/drafts/draft07/messages.js.map +0 -1
  360. package/dist/drafts/draft07/parameters.d.ts +0 -4
  361. package/dist/drafts/draft07/parameters.d.ts.map +0 -1
  362. package/dist/drafts/draft07/parameters.js +0 -10
  363. package/dist/drafts/draft07/parameters.js.map +0 -1
  364. package/dist/drafts/draft07/rules.d.ts +0 -8
  365. package/dist/drafts/draft07/rules.d.ts.map +0 -1
  366. package/dist/drafts/draft07/rules.js +0 -95
  367. package/dist/drafts/draft07/rules.js.map +0 -1
  368. package/dist/drafts/draft07/session-fsm.d.ts +0 -38
  369. package/dist/drafts/draft07/session-fsm.d.ts.map +0 -1
  370. package/dist/drafts/draft07/session-fsm.js +0 -354
  371. package/dist/drafts/draft07/session-fsm.js.map +0 -1
  372. package/dist/drafts/draft07/session.d.ts +0 -4
  373. package/dist/drafts/draft07/session.d.ts.map +0 -1
  374. package/dist/drafts/draft07/session.js +0 -5
  375. package/dist/drafts/draft07/session.js.map +0 -1
  376. package/dist/drafts/draft07/subscription-fsm.d.ts +0 -2
  377. package/dist/drafts/draft07/subscription-fsm.d.ts.map +0 -1
  378. package/dist/drafts/draft07/subscription-fsm.js +0 -2
  379. package/dist/drafts/draft07/subscription-fsm.js.map +0 -1
  380. package/dist/drafts/draft07/types.d.ts +0 -61
  381. package/dist/drafts/draft07/types.d.ts.map +0 -1
  382. package/dist/drafts/draft07/types.js +0 -4
  383. package/dist/drafts/draft07/types.js.map +0 -1
  384. package/dist/drafts/draft07/varint.d.ts +0 -4
  385. package/dist/drafts/draft07/varint.d.ts.map +0 -1
  386. package/dist/drafts/draft07/varint.js +0 -22
  387. package/dist/drafts/draft07/varint.js.map +0 -1
  388. package/dist/drafts/draft08/codec.d.ts +0 -29
  389. package/dist/drafts/draft08/codec.d.ts.map +0 -1
  390. package/dist/drafts/draft08/codec.js +0 -729
  391. package/dist/drafts/draft08/codec.js.map +0 -1
  392. package/dist/drafts/draft08/data-streams.d.ts +0 -12
  393. package/dist/drafts/draft08/data-streams.d.ts.map +0 -1
  394. package/dist/drafts/draft08/data-streams.js +0 -345
  395. package/dist/drafts/draft08/data-streams.js.map +0 -1
  396. package/dist/drafts/draft08/index.d.ts +0 -9
  397. package/dist/drafts/draft08/index.d.ts.map +0 -1
  398. package/dist/drafts/draft08/index.js +0 -7
  399. package/dist/drafts/draft08/index.js.map +0 -1
  400. package/dist/drafts/draft08/messages.d.ts +0 -34
  401. package/dist/drafts/draft08/messages.d.ts.map +0 -1
  402. package/dist/drafts/draft08/messages.js +0 -66
  403. package/dist/drafts/draft08/messages.js.map +0 -1
  404. package/dist/drafts/draft08/rules.d.ts +0 -8
  405. package/dist/drafts/draft08/rules.d.ts.map +0 -1
  406. package/dist/drafts/draft08/rules.js +0 -83
  407. package/dist/drafts/draft08/rules.js.map +0 -1
  408. package/dist/drafts/draft08/session-fsm.d.ts +0 -47
  409. package/dist/drafts/draft08/session-fsm.d.ts.map +0 -1
  410. package/dist/drafts/draft08/session-fsm.js +0 -483
  411. package/dist/drafts/draft08/session-fsm.js.map +0 -1
  412. package/dist/drafts/draft08/session.d.ts +0 -5
  413. package/dist/drafts/draft08/session.d.ts.map +0 -1
  414. package/dist/drafts/draft08/session.js +0 -5
  415. package/dist/drafts/draft08/session.js.map +0 -1
  416. package/dist/drafts/draft08/types.d.ts +0 -268
  417. package/dist/drafts/draft08/types.d.ts.map +0 -1
  418. package/dist/drafts/draft08/types.js +0 -4
  419. package/dist/drafts/draft08/types.js.map +0 -1
  420. package/dist/drafts/draft09/codec.d.ts +0 -21
  421. package/dist/drafts/draft09/codec.d.ts.map +0 -1
  422. package/dist/drafts/draft09/codec.js +0 -721
  423. package/dist/drafts/draft09/codec.js.map +0 -1
  424. package/dist/drafts/draft09/data-streams.d.ts +0 -12
  425. package/dist/drafts/draft09/data-streams.d.ts.map +0 -1
  426. package/dist/drafts/draft09/data-streams.js +0 -307
  427. package/dist/drafts/draft09/data-streams.js.map +0 -1
  428. package/dist/drafts/draft09/index.d.ts +0 -9
  429. package/dist/drafts/draft09/index.d.ts.map +0 -1
  430. package/dist/drafts/draft09/index.js +0 -7
  431. package/dist/drafts/draft09/index.js.map +0 -1
  432. package/dist/drafts/draft09/messages.d.ts +0 -34
  433. package/dist/drafts/draft09/messages.d.ts.map +0 -1
  434. package/dist/drafts/draft09/messages.js +0 -66
  435. package/dist/drafts/draft09/messages.js.map +0 -1
  436. package/dist/drafts/draft09/rules.d.ts +0 -8
  437. package/dist/drafts/draft09/rules.d.ts.map +0 -1
  438. package/dist/drafts/draft09/rules.js +0 -83
  439. package/dist/drafts/draft09/rules.js.map +0 -1
  440. package/dist/drafts/draft09/session-fsm.d.ts +0 -47
  441. package/dist/drafts/draft09/session-fsm.d.ts.map +0 -1
  442. package/dist/drafts/draft09/session-fsm.js +0 -483
  443. package/dist/drafts/draft09/session-fsm.js.map +0 -1
  444. package/dist/drafts/draft09/session.d.ts +0 -5
  445. package/dist/drafts/draft09/session.d.ts.map +0 -1
  446. package/dist/drafts/draft09/session.js +0 -5
  447. package/dist/drafts/draft09/session.js.map +0 -1
  448. package/dist/drafts/draft09/types.d.ts +0 -268
  449. package/dist/drafts/draft09/types.d.ts.map +0 -1
  450. package/dist/drafts/draft09/types.js +0 -4
  451. package/dist/drafts/draft09/types.js.map +0 -1
  452. package/dist/drafts/draft10/codec.d.ts +0 -21
  453. package/dist/drafts/draft10/codec.d.ts.map +0 -1
  454. package/dist/drafts/draft10/codec.js +0 -721
  455. package/dist/drafts/draft10/codec.js.map +0 -1
  456. package/dist/drafts/draft10/data-streams.d.ts +0 -12
  457. package/dist/drafts/draft10/data-streams.d.ts.map +0 -1
  458. package/dist/drafts/draft10/data-streams.js +0 -307
  459. package/dist/drafts/draft10/data-streams.js.map +0 -1
  460. package/dist/drafts/draft10/index.d.ts +0 -9
  461. package/dist/drafts/draft10/index.d.ts.map +0 -1
  462. package/dist/drafts/draft10/index.js +0 -7
  463. package/dist/drafts/draft10/index.js.map +0 -1
  464. package/dist/drafts/draft10/messages.d.ts +0 -34
  465. package/dist/drafts/draft10/messages.d.ts.map +0 -1
  466. package/dist/drafts/draft10/messages.js +0 -66
  467. package/dist/drafts/draft10/messages.js.map +0 -1
  468. package/dist/drafts/draft10/rules.d.ts +0 -8
  469. package/dist/drafts/draft10/rules.d.ts.map +0 -1
  470. package/dist/drafts/draft10/rules.js +0 -83
  471. package/dist/drafts/draft10/rules.js.map +0 -1
  472. package/dist/drafts/draft10/session-fsm.d.ts +0 -47
  473. package/dist/drafts/draft10/session-fsm.d.ts.map +0 -1
  474. package/dist/drafts/draft10/session-fsm.js +0 -483
  475. package/dist/drafts/draft10/session-fsm.js.map +0 -1
  476. package/dist/drafts/draft10/session.d.ts +0 -5
  477. package/dist/drafts/draft10/session.d.ts.map +0 -1
  478. package/dist/drafts/draft10/session.js +0 -5
  479. package/dist/drafts/draft10/session.js.map +0 -1
  480. package/dist/drafts/draft10/types.d.ts +0 -268
  481. package/dist/drafts/draft10/types.d.ts.map +0 -1
  482. package/dist/drafts/draft10/types.js +0 -4
  483. package/dist/drafts/draft10/types.js.map +0 -1
  484. package/dist/drafts/draft11/codec.d.ts +0 -25
  485. package/dist/drafts/draft11/codec.d.ts.map +0 -1
  486. package/dist/drafts/draft11/codec.js +0 -775
  487. package/dist/drafts/draft11/codec.js.map +0 -1
  488. package/dist/drafts/draft11/data-streams.d.ts +0 -10
  489. package/dist/drafts/draft11/data-streams.d.ts.map +0 -1
  490. package/dist/drafts/draft11/data-streams.js +0 -253
  491. package/dist/drafts/draft11/data-streams.js.map +0 -1
  492. package/dist/drafts/draft11/index.d.ts +0 -9
  493. package/dist/drafts/draft11/index.d.ts.map +0 -1
  494. package/dist/drafts/draft11/index.js +0 -7
  495. package/dist/drafts/draft11/index.js.map +0 -1
  496. package/dist/drafts/draft11/messages.d.ts +0 -33
  497. package/dist/drafts/draft11/messages.d.ts.map +0 -1
  498. package/dist/drafts/draft11/messages.js +0 -65
  499. package/dist/drafts/draft11/messages.js.map +0 -1
  500. package/dist/drafts/draft11/rules.d.ts +0 -8
  501. package/dist/drafts/draft11/rules.d.ts.map +0 -1
  502. package/dist/drafts/draft11/rules.js +0 -88
  503. package/dist/drafts/draft11/rules.js.map +0 -1
  504. package/dist/drafts/draft11/session-fsm.d.ts +0 -52
  505. package/dist/drafts/draft11/session-fsm.d.ts.map +0 -1
  506. package/dist/drafts/draft11/session-fsm.js +0 -530
  507. package/dist/drafts/draft11/session-fsm.js.map +0 -1
  508. package/dist/drafts/draft11/session.d.ts +0 -5
  509. package/dist/drafts/draft11/session.d.ts.map +0 -1
  510. package/dist/drafts/draft11/session.js +0 -5
  511. package/dist/drafts/draft11/session.js.map +0 -1
  512. package/dist/drafts/draft11/types.d.ts +0 -266
  513. package/dist/drafts/draft11/types.d.ts.map +0 -1
  514. package/dist/drafts/draft11/types.js +0 -4
  515. package/dist/drafts/draft11/types.js.map +0 -1
  516. package/dist/drafts/draft12/codec.d.ts +0 -27
  517. package/dist/drafts/draft12/codec.d.ts.map +0 -1
  518. package/dist/drafts/draft12/codec.js +0 -918
  519. package/dist/drafts/draft12/codec.js.map +0 -1
  520. package/dist/drafts/draft12/data-streams.d.ts +0 -10
  521. package/dist/drafts/draft12/data-streams.d.ts.map +0 -1
  522. package/dist/drafts/draft12/data-streams.js +0 -254
  523. package/dist/drafts/draft12/data-streams.js.map +0 -1
  524. package/dist/drafts/draft12/index.d.ts +0 -9
  525. package/dist/drafts/draft12/index.d.ts.map +0 -1
  526. package/dist/drafts/draft12/index.js +0 -7
  527. package/dist/drafts/draft12/index.js.map +0 -1
  528. package/dist/drafts/draft12/messages.d.ts +0 -37
  529. package/dist/drafts/draft12/messages.d.ts.map +0 -1
  530. package/dist/drafts/draft12/messages.js +0 -77
  531. package/dist/drafts/draft12/messages.js.map +0 -1
  532. package/dist/drafts/draft12/rules.d.ts +0 -8
  533. package/dist/drafts/draft12/rules.d.ts.map +0 -1
  534. package/dist/drafts/draft12/rules.js +0 -94
  535. package/dist/drafts/draft12/rules.js.map +0 -1
  536. package/dist/drafts/draft12/session-fsm.d.ts +0 -55
  537. package/dist/drafts/draft12/session-fsm.d.ts.map +0 -1
  538. package/dist/drafts/draft12/session-fsm.js +0 -569
  539. package/dist/drafts/draft12/session-fsm.js.map +0 -1
  540. package/dist/drafts/draft12/session.d.ts +0 -5
  541. package/dist/drafts/draft12/session.d.ts.map +0 -1
  542. package/dist/drafts/draft12/session.js +0 -5
  543. package/dist/drafts/draft12/session.js.map +0 -1
  544. package/dist/drafts/draft12/types.d.ts +0 -294
  545. package/dist/drafts/draft12/types.d.ts.map +0 -1
  546. package/dist/drafts/draft12/types.js +0 -4
  547. package/dist/drafts/draft12/types.js.map +0 -1
  548. package/dist/drafts/draft13/codec.d.ts +0 -27
  549. package/dist/drafts/draft13/codec.d.ts.map +0 -1
  550. package/dist/drafts/draft13/codec.js +0 -1000
  551. package/dist/drafts/draft13/codec.js.map +0 -1
  552. package/dist/drafts/draft13/data-streams.d.ts +0 -10
  553. package/dist/drafts/draft13/data-streams.d.ts.map +0 -1
  554. package/dist/drafts/draft13/data-streams.js +0 -254
  555. package/dist/drafts/draft13/data-streams.js.map +0 -1
  556. package/dist/drafts/draft13/index.d.ts +0 -9
  557. package/dist/drafts/draft13/index.d.ts.map +0 -1
  558. package/dist/drafts/draft13/index.js +0 -7
  559. package/dist/drafts/draft13/index.js.map +0 -1
  560. package/dist/drafts/draft13/messages.d.ts +0 -38
  561. package/dist/drafts/draft13/messages.d.ts.map +0 -1
  562. package/dist/drafts/draft13/messages.js +0 -79
  563. package/dist/drafts/draft13/messages.js.map +0 -1
  564. package/dist/drafts/draft13/rules.d.ts +0 -8
  565. package/dist/drafts/draft13/rules.d.ts.map +0 -1
  566. package/dist/drafts/draft13/rules.js +0 -96
  567. package/dist/drafts/draft13/rules.js.map +0 -1
  568. package/dist/drafts/draft13/session-fsm.d.ts +0 -56
  569. package/dist/drafts/draft13/session-fsm.d.ts.map +0 -1
  570. package/dist/drafts/draft13/session-fsm.js +0 -581
  571. package/dist/drafts/draft13/session-fsm.js.map +0 -1
  572. package/dist/drafts/draft13/session.d.ts +0 -5
  573. package/dist/drafts/draft13/session.d.ts.map +0 -1
  574. package/dist/drafts/draft13/session.js +0 -5
  575. package/dist/drafts/draft13/session.js.map +0 -1
  576. package/dist/drafts/draft13/types.d.ts +0 -310
  577. package/dist/drafts/draft13/types.d.ts.map +0 -1
  578. package/dist/drafts/draft13/types.js +0 -4
  579. package/dist/drafts/draft13/types.js.map +0 -1
  580. package/dist/drafts/draft14/codec.d.ts +0 -34
  581. package/dist/drafts/draft14/codec.d.ts.map +0 -1
  582. package/dist/drafts/draft14/codec.js +0 -752
  583. package/dist/drafts/draft14/codec.js.map +0 -1
  584. package/dist/drafts/draft14/data-streams.d.ts +0 -56
  585. package/dist/drafts/draft14/data-streams.d.ts.map +0 -1
  586. package/dist/drafts/draft14/data-streams.js +0 -729
  587. package/dist/drafts/draft14/data-streams.js.map +0 -1
  588. package/dist/drafts/draft14/index.d.ts +0 -9
  589. package/dist/drafts/draft14/index.d.ts.map +0 -1
  590. package/dist/drafts/draft14/index.js +0 -7
  591. package/dist/drafts/draft14/index.js.map +0 -1
  592. package/dist/drafts/draft14/messages.d.ts +0 -36
  593. package/dist/drafts/draft14/messages.d.ts.map +0 -1
  594. package/dist/drafts/draft14/messages.js +0 -71
  595. package/dist/drafts/draft14/messages.js.map +0 -1
  596. package/dist/drafts/draft14/rules.d.ts +0 -8
  597. package/dist/drafts/draft14/rules.d.ts.map +0 -1
  598. package/dist/drafts/draft14/rules.js +0 -101
  599. package/dist/drafts/draft14/rules.js.map +0 -1
  600. package/dist/drafts/draft14/session-fsm.d.ts +0 -58
  601. package/dist/drafts/draft14/session-fsm.d.ts.map +0 -1
  602. package/dist/drafts/draft14/session-fsm.js +0 -648
  603. package/dist/drafts/draft14/session-fsm.js.map +0 -1
  604. package/dist/drafts/draft14/session.d.ts +0 -5
  605. package/dist/drafts/draft14/session.d.ts.map +0 -1
  606. package/dist/drafts/draft14/session.js +0 -5
  607. package/dist/drafts/draft14/session.js.map +0 -1
  608. package/dist/drafts/draft14/types.d.ts +0 -263
  609. package/dist/drafts/draft14/types.d.ts.map +0 -1
  610. package/dist/drafts/draft14/types.js +0 -4
  611. package/dist/drafts/draft14/types.js.map +0 -1
  612. package/dist/drafts/draft15/codec.d.ts +0 -33
  613. package/dist/drafts/draft15/codec.d.ts.map +0 -1
  614. package/dist/drafts/draft15/codec.js +0 -742
  615. package/dist/drafts/draft15/codec.js.map +0 -1
  616. package/dist/drafts/draft15/data-streams.d.ts +0 -45
  617. package/dist/drafts/draft15/data-streams.d.ts.map +0 -1
  618. package/dist/drafts/draft15/data-streams.js +0 -675
  619. package/dist/drafts/draft15/data-streams.js.map +0 -1
  620. package/dist/drafts/draft15/index.d.ts +0 -9
  621. package/dist/drafts/draft15/index.d.ts.map +0 -1
  622. package/dist/drafts/draft15/index.js +0 -7
  623. package/dist/drafts/draft15/index.js.map +0 -1
  624. package/dist/drafts/draft15/messages.d.ts +0 -31
  625. package/dist/drafts/draft15/messages.d.ts.map +0 -1
  626. package/dist/drafts/draft15/messages.js +0 -59
  627. package/dist/drafts/draft15/messages.js.map +0 -1
  628. package/dist/drafts/draft15/rules.d.ts +0 -8
  629. package/dist/drafts/draft15/rules.d.ts.map +0 -1
  630. package/dist/drafts/draft15/rules.js +0 -83
  631. package/dist/drafts/draft15/rules.js.map +0 -1
  632. package/dist/drafts/draft15/session-fsm.d.ts +0 -48
  633. package/dist/drafts/draft15/session-fsm.d.ts.map +0 -1
  634. package/dist/drafts/draft15/session-fsm.js +0 -479
  635. package/dist/drafts/draft15/session-fsm.js.map +0 -1
  636. package/dist/drafts/draft15/session.d.ts +0 -5
  637. package/dist/drafts/draft15/session.d.ts.map +0 -1
  638. package/dist/drafts/draft15/session.js +0 -5
  639. package/dist/drafts/draft15/session.js.map +0 -1
  640. package/dist/drafts/draft15/types.d.ts +0 -232
  641. package/dist/drafts/draft15/types.d.ts.map +0 -1
  642. package/dist/drafts/draft15/types.js +0 -4
  643. package/dist/drafts/draft15/types.js.map +0 -1
  644. package/dist/drafts/draft16/codec.d.ts +0 -29
  645. package/dist/drafts/draft16/codec.d.ts.map +0 -1
  646. package/dist/drafts/draft16/codec.js +0 -747
  647. package/dist/drafts/draft16/codec.js.map +0 -1
  648. package/dist/drafts/draft16/data-streams.d.ts +0 -34
  649. package/dist/drafts/draft16/data-streams.d.ts.map +0 -1
  650. package/dist/drafts/draft16/data-streams.js +0 -667
  651. package/dist/drafts/draft16/data-streams.js.map +0 -1
  652. package/dist/drafts/draft16/index.d.ts +0 -9
  653. package/dist/drafts/draft16/index.d.ts.map +0 -1
  654. package/dist/drafts/draft16/index.js +0 -7
  655. package/dist/drafts/draft16/index.js.map +0 -1
  656. package/dist/drafts/draft16/messages.d.ts +0 -32
  657. package/dist/drafts/draft16/messages.d.ts.map +0 -1
  658. package/dist/drafts/draft16/messages.js +0 -62
  659. package/dist/drafts/draft16/messages.js.map +0 -1
  660. package/dist/drafts/draft16/rules.d.ts +0 -8
  661. package/dist/drafts/draft16/rules.d.ts.map +0 -1
  662. package/dist/drafts/draft16/rules.js +0 -84
  663. package/dist/drafts/draft16/rules.js.map +0 -1
  664. package/dist/drafts/draft16/session-fsm.d.ts +0 -48
  665. package/dist/drafts/draft16/session-fsm.d.ts.map +0 -1
  666. package/dist/drafts/draft16/session-fsm.js +0 -474
  667. package/dist/drafts/draft16/session-fsm.js.map +0 -1
  668. package/dist/drafts/draft16/session.d.ts +0 -5
  669. package/dist/drafts/draft16/session.d.ts.map +0 -1
  670. package/dist/drafts/draft16/session.js +0 -5
  671. package/dist/drafts/draft16/session.js.map +0 -1
  672. package/dist/drafts/draft16/types.d.ts +0 -238
  673. package/dist/drafts/draft16/types.d.ts.map +0 -1
  674. package/dist/drafts/draft16/types.js +0 -4
  675. package/dist/drafts/draft16/types.js.map +0 -1
  676. package/dist/drafts/draft17/codec.d.ts +0 -29
  677. package/dist/drafts/draft17/codec.d.ts.map +0 -1
  678. package/dist/drafts/draft17/codec.js +0 -799
  679. package/dist/drafts/draft17/codec.js.map +0 -1
  680. package/dist/drafts/draft17/data-streams.d.ts +0 -13
  681. package/dist/drafts/draft17/data-streams.d.ts.map +0 -1
  682. package/dist/drafts/draft17/data-streams.js +0 -633
  683. package/dist/drafts/draft17/data-streams.js.map +0 -1
  684. package/dist/drafts/draft17/index.d.ts +0 -8
  685. package/dist/drafts/draft17/index.d.ts.map +0 -1
  686. package/dist/drafts/draft17/index.js +0 -6
  687. package/dist/drafts/draft17/index.js.map +0 -1
  688. package/dist/drafts/draft17/messages.d.ts +0 -25
  689. package/dist/drafts/draft17/messages.d.ts.map +0 -1
  690. package/dist/drafts/draft17/messages.js +0 -48
  691. package/dist/drafts/draft17/messages.js.map +0 -1
  692. package/dist/drafts/draft17/rules.d.ts +0 -8
  693. package/dist/drafts/draft17/rules.d.ts.map +0 -1
  694. package/dist/drafts/draft17/rules.js +0 -71
  695. package/dist/drafts/draft17/rules.js.map +0 -1
  696. package/dist/drafts/draft17/session-fsm.d.ts +0 -45
  697. package/dist/drafts/draft17/session-fsm.d.ts.map +0 -1
  698. package/dist/drafts/draft17/session-fsm.js +0 -328
  699. package/dist/drafts/draft17/session-fsm.js.map +0 -1
  700. package/dist/drafts/draft17/session.d.ts +0 -5
  701. package/dist/drafts/draft17/session.d.ts.map +0 -1
  702. package/dist/drafts/draft17/session.js +0 -6
  703. package/dist/drafts/draft17/session.js.map +0 -1
  704. package/dist/drafts/draft17/types.d.ts +0 -219
  705. package/dist/drafts/draft17/types.d.ts.map +0 -1
  706. package/dist/drafts/draft17/types.js +0 -3
  707. package/dist/drafts/draft17/types.js.map +0 -1
  708. package/dist/index.d.ts.map +0 -1
  709. package/dist/index.js.map +0 -1
  710. package/dist/session.d.ts.map +0 -1
  711. package/dist/session.js.map +0 -1
  712. package/dist/types-QNXoxC9Y.d.cts +0 -236
  713. package/dist/types-QNXoxC9Y.d.ts +0 -236
  714. package/src/drafts/draft07/announce-fsm.ts +0 -2
  715. package/src/drafts/draft07/parameters.ts +0 -12
  716. package/src/drafts/draft07/subscription-fsm.ts +0 -3
@@ -1,1034 +1,1347 @@
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 type { BaseCodec, DecodeResult } from "../../core/types.js";
5
- import { DecodeError } from "../../core/types.js";
6
- import {
7
- MESSAGE_ID_MAP,
8
- MSG_CLIENT_SETUP,
9
- MSG_FETCH,
10
- MSG_FETCH_CANCEL,
11
- MSG_FETCH_ERROR,
12
- MSG_FETCH_OK,
13
- MSG_GOAWAY,
14
- MSG_MAX_REQUEST_ID,
15
- MSG_PUBLISH,
16
- MSG_PUBLISH_DONE,
17
- MSG_PUBLISH_ERROR,
18
- MSG_PUBLISH_NAMESPACE,
19
- MSG_PUBLISH_NAMESPACE_CANCEL,
20
- MSG_PUBLISH_NAMESPACE_DONE,
21
- MSG_PUBLISH_NAMESPACE_ERROR,
22
- MSG_PUBLISH_NAMESPACE_OK,
23
- MSG_PUBLISH_OK,
24
- MSG_REQUESTS_BLOCKED,
25
- MSG_SERVER_SETUP,
26
- MSG_SUBSCRIBE,
27
- MSG_SUBSCRIBE_ERROR,
28
- MSG_SUBSCRIBE_NAMESPACE,
29
- MSG_SUBSCRIBE_NAMESPACE_ERROR,
30
- MSG_SUBSCRIBE_NAMESPACE_OK,
31
- MSG_SUBSCRIBE_OK,
32
- MSG_SUBSCRIBE_UPDATE,
33
- MSG_TRACK_STATUS,
34
- MSG_TRACK_STATUS_ERROR,
35
- MSG_TRACK_STATUS_OK,
36
- MSG_UNSUBSCRIBE,
37
- MSG_UNSUBSCRIBE_NAMESPACE,
38
- PARAM_MAX_REQUEST_ID,
39
- PARAM_PATH,
40
- PARAM_ROLE,
41
- } from "./messages.js";
42
- import type {
43
- DatagramObject,
44
- DataStreamEvent,
45
- Draft14DataStream,
46
- Draft14Message,
47
- Draft14Params,
48
- FetchObjectPayload,
49
- FetchStream,
50
- FetchStreamHeader,
51
- ObjectPayload,
52
- SubgroupStream,
53
- SubgroupStreamHeader,
54
- UnknownParam,
55
- } from "./types.js";
56
- // ─── Parameter Encoding/Decoding ───────────────────────────────────────────────
57
-
58
- function encodeParams(params: Draft14Params, writer: BufferWriter): void {
59
- // Count total params
60
- let count = 0;
61
- if (params.role !== undefined) count++;
62
- if (params.path !== undefined) count++;
63
- if (params.max_request_id !== undefined) count++;
64
- if (params.unknown) count += params.unknown.length;
65
-
66
- writer.writeVarInt(count);
67
-
68
- // ROLE (0x00) - even, varint value
69
- if (params.role !== undefined) {
70
- writer.writeVarInt(PARAM_ROLE);
71
- writer.writeVarInt(params.role);
72
- }
73
-
74
- // PATH (0x01) - odd, length-prefixed bytes
75
- if (params.path !== undefined) {
76
- writer.writeVarInt(PARAM_PATH);
77
- const encoded = new TextEncoder().encode(params.path);
78
- writer.writeVarInt(encoded.byteLength);
79
- writer.writeBytes(encoded);
80
- }
81
-
82
- // MAX_REQUEST_ID (0x02) - even, varint value
83
- if (params.max_request_id !== undefined) {
84
- writer.writeVarInt(PARAM_MAX_REQUEST_ID);
85
- writer.writeVarInt(params.max_request_id);
86
- }
87
-
88
- // Unknown params
89
- if (params.unknown) {
90
- for (const u of params.unknown) {
91
- const id = BigInt(u.id);
92
- writer.writeVarInt(id);
93
- const raw = hexToBytes(u.raw_hex);
94
- writer.writeVarInt(raw.byteLength);
95
- writer.writeBytes(raw);
96
- }
97
- }
98
- }
99
-
100
- function decodeParams(reader: BufferReader): Draft14Params {
101
- const count = Number(reader.readVarInt());
102
- const result: Draft14Params = {};
103
- const unknown: UnknownParam[] = [];
104
-
105
- for (let i = 0; i < count; i++) {
106
- const paramType = reader.readVarInt();
107
-
108
- if (paramType % 2n === 0n) {
109
- // Even: value is a varint directly
110
- const value = reader.readVarInt();
111
- if (paramType === PARAM_ROLE) {
112
- result.role = value;
113
- } else if (paramType === PARAM_MAX_REQUEST_ID) {
114
- result.max_request_id = value;
115
- } else {
116
- // Unknown even param — encode the varint value as raw bytes
117
- const tmpWriter = new BufferWriter(16);
118
- tmpWriter.writeVarInt(value);
119
- const raw = tmpWriter.finish();
120
- unknown.push({
121
- id: `0x${paramType.toString(16)}`,
122
- length: raw.byteLength,
123
- raw_hex: bytesToHex(raw),
124
- });
125
- }
126
- } else {
127
- // Odd: value is length-prefixed bytes
128
- const length = Number(reader.readVarInt());
129
- const bytes = reader.readBytes(length);
130
- if (paramType === PARAM_PATH) {
131
- result.path = new TextDecoder().decode(bytes);
132
- } else {
133
- unknown.push({
134
- id: `0x${paramType.toString(16)}`,
135
- length,
136
- raw_hex: bytesToHex(bytes),
137
- });
138
- }
139
- }
140
- }
141
-
142
- if (unknown.length > 0) {
143
- result.unknown = unknown;
144
- }
145
-
146
- return result;
147
- }
148
-
149
- // ─── Payload Encoders ──────────────────────────────────────────────────────────
150
-
151
- function encodeClientSetupPayload(
152
- msg: Draft14Message & { type: "client_setup" },
153
- w: BufferWriter,
154
- ): void {
155
- w.writeVarInt(msg.supported_versions.length);
156
- for (const v of msg.supported_versions) {
157
- w.writeVarInt(v);
158
- }
159
- encodeParams(msg.parameters, w);
160
- }
161
-
162
- function encodeServerSetupPayload(
163
- msg: Draft14Message & { type: "server_setup" },
164
- w: BufferWriter,
165
- ): void {
166
- w.writeVarInt(msg.selected_version);
167
- encodeParams(msg.parameters, w);
168
- }
169
-
170
- function encodeSubscribePayload(
171
- msg: Draft14Message & { type: "subscribe" },
172
- w: BufferWriter,
173
- ): void {
174
- w.writeVarInt(msg.request_id);
175
- w.writeTuple(msg.track_namespace);
176
- w.writeString(msg.track_name);
177
- w.writeUint8(Number(msg.subscriber_priority));
178
- w.writeVarInt(msg.group_order);
179
- w.writeVarInt(msg.forward);
180
- w.writeVarInt(msg.filter_type);
181
- const ft = Number(msg.filter_type);
182
- if (ft >= 3) {
183
- w.writeVarInt(msg.start_group!);
184
- w.writeVarInt(msg.start_object!);
185
- }
186
- if (ft === 4) {
187
- w.writeVarInt(msg.end_group!);
188
- }
189
- encodeParams(msg.parameters, w);
190
- }
191
-
192
- function encodeSubscribeOkPayload(
193
- msg: Draft14Message & { type: "subscribe_ok" },
194
- w: BufferWriter,
195
- ): void {
196
- w.writeVarInt(msg.request_id);
197
- w.writeVarInt(msg.track_alias);
198
- w.writeVarInt(msg.expires);
199
- w.writeVarInt(msg.group_order);
200
- w.writeVarInt(msg.content_exists);
201
- if (Number(msg.content_exists) === 1) {
202
- w.writeVarInt(msg.largest_group!);
203
- w.writeVarInt(msg.largest_object!);
204
- }
205
- encodeParams(msg.parameters, w);
206
- }
207
-
208
- function encodeSubscribeUpdatePayload(
209
- msg: Draft14Message & { type: "subscribe_update" },
210
- w: BufferWriter,
211
- ): void {
212
- w.writeVarInt(msg.request_id);
213
- w.writeVarInt(msg.start_group);
214
- w.writeVarInt(msg.start_object);
215
- w.writeVarInt(msg.end_group);
216
- w.writeUint8(Number(msg.subscriber_priority));
217
- w.writeVarInt(msg.forward);
218
- encodeParams(msg.parameters, w);
219
- }
220
-
221
- function encodeSubscribeErrorPayload(
222
- msg: Draft14Message & { type: "subscribe_error" },
223
- w: BufferWriter,
224
- ): void {
225
- w.writeVarInt(msg.request_id);
226
- w.writeVarInt(msg.error_code);
227
- w.writeString(msg.reason_phrase);
228
- }
229
-
230
- function encodeUnsubscribePayload(
231
- msg: Draft14Message & { type: "unsubscribe" },
232
- w: BufferWriter,
233
- ): void {
234
- w.writeVarInt(msg.request_id);
235
- }
236
-
237
- function encodePublishPayload(msg: Draft14Message & { type: "publish" }, w: BufferWriter): void {
238
- w.writeVarInt(msg.request_id);
239
- w.writeTuple(msg.track_namespace);
240
- w.writeString(msg.track_name);
241
- w.writeVarInt(msg.forward);
242
- encodeParams(msg.parameters, w);
243
- }
244
-
245
- function encodePublishOkPayload(
246
- msg: Draft14Message & { type: "publish_ok" },
247
- w: BufferWriter,
248
- ): void {
249
- w.writeVarInt(msg.request_id);
250
- w.writeVarInt(msg.track_alias);
251
- w.writeVarInt(msg.forward);
252
- encodeParams(msg.parameters, w);
253
- }
254
-
255
- function encodePublishErrorPayload(
256
- msg: Draft14Message & { type: "publish_error" },
257
- w: BufferWriter,
258
- ): void {
259
- w.writeVarInt(msg.request_id);
260
- w.writeVarInt(msg.error_code);
261
- w.writeString(msg.reason_phrase);
262
- }
263
-
264
- function encodePublishDonePayload(
265
- msg: Draft14Message & { type: "publish_done" },
266
- w: BufferWriter,
267
- ): void {
268
- w.writeVarInt(msg.request_id);
269
- w.writeVarInt(msg.status_code);
270
- w.writeString(msg.reason_phrase);
271
- }
272
-
273
- function encodePublishNamespacePayload(
274
- msg: Draft14Message & { type: "publish_namespace" },
275
- w: BufferWriter,
276
- ): void {
277
- w.writeVarInt(msg.request_id);
278
- w.writeTuple(msg.track_namespace);
279
- encodeParams(msg.parameters, w);
280
- }
281
-
282
- function encodePublishNamespaceOkPayload(
283
- msg: Draft14Message & { type: "publish_namespace_ok" },
284
- w: BufferWriter,
285
- ): void {
286
- w.writeVarInt(msg.request_id);
287
- encodeParams(msg.parameters, w);
288
- }
289
-
290
- function encodePublishNamespaceErrorPayload(
291
- msg: Draft14Message & { type: "publish_namespace_error" },
292
- w: BufferWriter,
293
- ): void {
294
- w.writeVarInt(msg.request_id);
295
- w.writeVarInt(msg.error_code);
296
- w.writeString(msg.reason_phrase);
297
- }
298
-
299
- function encodePublishNamespaceDonePayload(
300
- msg: Draft14Message & { type: "publish_namespace_done" },
301
- w: BufferWriter,
302
- ): void {
303
- w.writeVarInt(msg.request_id);
304
- w.writeVarInt(msg.status_code);
305
- w.writeString(msg.reason_phrase);
306
- }
307
-
308
- function encodePublishNamespaceCancelPayload(
309
- msg: Draft14Message & { type: "publish_namespace_cancel" },
310
- w: BufferWriter,
311
- ): void {
312
- w.writeVarInt(msg.request_id);
313
- }
314
-
315
- function encodeSubscribeNamespacePayload(
316
- msg: Draft14Message & { type: "subscribe_namespace" },
317
- w: BufferWriter,
318
- ): void {
319
- w.writeVarInt(msg.request_id);
320
- w.writeTuple(msg.namespace_prefix);
321
- encodeParams(msg.parameters, w);
322
- }
323
-
324
- function encodeSubscribeNamespaceOkPayload(
325
- msg: Draft14Message & { type: "subscribe_namespace_ok" },
326
- w: BufferWriter,
327
- ): void {
328
- w.writeVarInt(msg.request_id);
329
- encodeParams(msg.parameters, w);
330
- }
331
-
332
- function encodeSubscribeNamespaceErrorPayload(
333
- msg: Draft14Message & { type: "subscribe_namespace_error" },
334
- w: BufferWriter,
335
- ): void {
336
- w.writeVarInt(msg.request_id);
337
- w.writeVarInt(msg.error_code);
338
- w.writeString(msg.reason_phrase);
339
- }
340
-
341
- function encodeUnsubscribeNamespacePayload(
342
- msg: Draft14Message & { type: "unsubscribe_namespace" },
343
- w: BufferWriter,
344
- ): void {
345
- w.writeVarInt(msg.request_id);
346
- }
347
-
348
- function encodeFetchPayload(msg: Draft14Message & { type: "fetch" }, w: BufferWriter): void {
349
- w.writeVarInt(msg.request_id);
350
- w.writeTuple(msg.track_namespace);
351
- w.writeString(msg.track_name);
352
- w.writeVarInt(msg.start_group);
353
- w.writeVarInt(msg.start_object);
354
- w.writeVarInt(msg.end_group);
355
- encodeParams(msg.parameters, w);
356
- }
357
-
358
- function encodeFetchOkPayload(msg: Draft14Message & { type: "fetch_ok" }, w: BufferWriter): void {
359
- w.writeVarInt(msg.request_id);
360
- w.writeVarInt(msg.track_alias);
361
- w.writeVarInt(msg.end_of_track);
362
- encodeParams(msg.parameters, w);
363
- }
364
-
365
- function encodeFetchErrorPayload(
366
- msg: Draft14Message & { type: "fetch_error" },
367
- w: BufferWriter,
368
- ): void {
369
- w.writeVarInt(msg.request_id);
370
- w.writeVarInt(msg.error_code);
371
- w.writeString(msg.reason_phrase);
372
- }
373
-
374
- function encodeFetchCancelPayload(
375
- msg: Draft14Message & { type: "fetch_cancel" },
376
- w: BufferWriter,
377
- ): void {
378
- w.writeVarInt(msg.request_id);
379
- }
380
-
381
- function encodeTrackStatusPayload(
382
- msg: Draft14Message & { type: "track_status" },
383
- w: BufferWriter,
384
- ): void {
385
- w.writeVarInt(msg.request_id);
386
- w.writeTuple(msg.track_namespace);
387
- w.writeString(msg.track_name);
388
- encodeParams(msg.parameters, w);
389
- }
390
-
391
- function encodeTrackStatusOkPayload(
392
- msg: Draft14Message & { type: "track_status_ok" },
393
- w: BufferWriter,
394
- ): void {
395
- w.writeVarInt(msg.request_id);
396
- w.writeVarInt(msg.status_code);
397
- const sc = Number(msg.status_code);
398
- if (sc === 0 || sc === 3) {
399
- w.writeVarInt(msg.largest_group!);
400
- w.writeVarInt(msg.largest_object!);
401
- }
402
- encodeParams(msg.parameters, w);
403
- }
404
-
405
- function encodeTrackStatusErrorPayload(
406
- msg: Draft14Message & { type: "track_status_error" },
407
- w: BufferWriter,
408
- ): void {
409
- w.writeVarInt(msg.request_id);
410
- w.writeVarInt(msg.error_code);
411
- w.writeString(msg.reason_phrase);
412
- }
413
-
414
- function encodeGoAwayPayload(msg: Draft14Message & { type: "goaway" }, w: BufferWriter): void {
415
- w.writeString(msg.new_session_uri);
416
- }
417
-
418
- function encodeMaxRequestIdPayload(
419
- msg: Draft14Message & { type: "max_request_id" },
420
- w: BufferWriter,
421
- ): void {
422
- w.writeVarInt(msg.request_id);
423
- }
424
-
425
- function encodeRequestsBlockedPayload(
426
- msg: Draft14Message & { type: "requests_blocked" },
427
- w: BufferWriter,
428
- ): void {
429
- w.writeVarInt(msg.request_id);
430
- }
431
-
432
- // ─── Payload Decoders ──────────────────────────────────────────────────────────
433
-
434
- function decodeClientSetupPayload(r: BufferReader): Draft14Message {
435
- const numVersions = Number(r.readVarInt());
436
- if (numVersions === 0) {
437
- throw new DecodeError(
438
- "CONSTRAINT_VIOLATION",
439
- "CLIENT_SETUP must offer at least one version",
440
- r.offset,
441
- );
442
- }
443
- const supported_versions: bigint[] = [];
444
- for (let i = 0; i < numVersions; i++) {
445
- supported_versions.push(r.readVarInt());
446
- }
447
- const parameters = decodeParams(r);
448
- return { type: "client_setup", supported_versions, parameters };
449
- }
450
-
451
- function decodeServerSetupPayload(r: BufferReader): Draft14Message {
452
- const selected_version = r.readVarInt();
453
- const parameters = decodeParams(r);
454
- return { type: "server_setup", selected_version, parameters };
455
- }
456
-
457
- function decodeSubscribePayload(r: BufferReader): Draft14Message {
458
- const request_id = r.readVarInt();
459
- const track_namespace = r.readTuple();
460
- const track_name = r.readString();
461
- const subscriber_priority = BigInt(r.readUint8());
462
- const group_order = r.readVarInt();
463
- const forward = r.readVarInt();
464
- const filter_type = r.readVarInt();
465
- const ft = Number(filter_type);
466
-
467
- if (ft < 1 || ft > 4) {
468
- throw new DecodeError("CONSTRAINT_VIOLATION", `Invalid filter_type: ${ft}`, r.offset);
469
- }
470
-
471
- let start_group: bigint | undefined;
472
- let start_object: bigint | undefined;
473
- let end_group: bigint | undefined;
474
-
475
- if (ft >= 3) {
476
- start_group = r.readVarInt();
477
- start_object = r.readVarInt();
478
- }
479
- if (ft === 4) {
480
- end_group = r.readVarInt();
481
- }
482
-
483
- const parameters = decodeParams(r);
484
-
485
- const msg: Draft14Message & { type: "subscribe" } = {
486
- type: "subscribe",
487
- request_id,
488
- track_namespace,
489
- track_name,
490
- subscriber_priority,
491
- group_order,
492
- forward,
493
- filter_type,
494
- parameters,
495
- };
496
-
497
- if (start_group !== undefined) {
498
- return { ...msg, start_group, start_object, end_group } as Draft14Message;
499
- }
500
-
501
- return msg;
502
- }
503
-
504
- function decodeSubscribeOkPayload(r: BufferReader): Draft14Message {
505
- const request_id = r.readVarInt();
506
- const track_alias = r.readVarInt();
507
- const expires = r.readVarInt();
508
- const group_order = r.readVarInt();
509
- const content_exists = r.readVarInt();
510
-
511
- let largest_group: bigint | undefined;
512
- let largest_object: bigint | undefined;
513
-
514
- if (Number(content_exists) === 1) {
515
- largest_group = r.readVarInt();
516
- largest_object = r.readVarInt();
517
- }
518
-
519
- const parameters = decodeParams(r);
520
-
521
- const msg: Draft14Message = {
522
- type: "subscribe_ok",
523
- request_id,
524
- track_alias,
525
- expires,
526
- group_order,
527
- content_exists,
528
- parameters,
529
- ...(largest_group !== undefined ? { largest_group, largest_object } : {}),
530
- } as Draft14Message;
531
-
532
- return msg;
533
- }
534
-
535
- function decodeSubscribeUpdatePayload(r: BufferReader): Draft14Message {
536
- const request_id = r.readVarInt();
537
- const start_group = r.readVarInt();
538
- const start_object = r.readVarInt();
539
- const end_group = r.readVarInt();
540
- const subscriber_priority = BigInt(r.readUint8());
541
- const forward = r.readVarInt();
542
- const parameters = decodeParams(r);
543
- return {
544
- type: "subscribe_update",
545
- request_id,
546
- start_group,
547
- start_object,
548
- end_group,
549
- subscriber_priority,
550
- forward,
551
- parameters,
552
- };
553
- }
554
-
555
- function decodeSubscribeErrorPayload(r: BufferReader): Draft14Message {
556
- const request_id = r.readVarInt();
557
- const error_code = r.readVarInt();
558
- const reason_phrase = r.readString();
559
- return { type: "subscribe_error", request_id, error_code, reason_phrase };
560
- }
561
-
562
- function decodeUnsubscribePayload(r: BufferReader): Draft14Message {
563
- const request_id = r.readVarInt();
564
- return { type: "unsubscribe", request_id };
565
- }
566
-
567
- function decodePublishPayload(r: BufferReader): Draft14Message {
568
- const request_id = r.readVarInt();
569
- const track_namespace = r.readTuple();
570
- const track_name = r.readString();
571
- const forward = r.readVarInt();
572
- const parameters = decodeParams(r);
573
- return { type: "publish", request_id, track_namespace, track_name, forward, parameters };
574
- }
575
-
576
- function decodePublishOkPayload(r: BufferReader): Draft14Message {
577
- const request_id = r.readVarInt();
578
- const track_alias = r.readVarInt();
579
- const forward = r.readVarInt();
580
- const parameters = decodeParams(r);
581
- return { type: "publish_ok", request_id, track_alias, forward, parameters };
582
- }
583
-
584
- function decodePublishErrorPayload(r: BufferReader): Draft14Message {
585
- const request_id = r.readVarInt();
586
- const error_code = r.readVarInt();
587
- const reason_phrase = r.readString();
588
- return { type: "publish_error", request_id, error_code, reason_phrase };
589
- }
590
-
591
- function decodePublishDonePayload(r: BufferReader): Draft14Message {
592
- const request_id = r.readVarInt();
593
- const status_code = r.readVarInt();
594
- const reason_phrase = r.readString();
595
- return { type: "publish_done", request_id, status_code, reason_phrase };
596
- }
597
-
598
- function decodePublishNamespacePayload(r: BufferReader): Draft14Message {
599
- const request_id = r.readVarInt();
600
- const track_namespace = r.readTuple();
601
- const parameters = decodeParams(r);
602
- return { type: "publish_namespace", request_id, track_namespace, parameters };
603
- }
604
-
605
- function decodePublishNamespaceOkPayload(r: BufferReader): Draft14Message {
606
- const request_id = r.readVarInt();
607
- const parameters = decodeParams(r);
608
- return { type: "publish_namespace_ok", request_id, parameters };
609
- }
610
-
611
- function decodePublishNamespaceErrorPayload(r: BufferReader): Draft14Message {
612
- const request_id = r.readVarInt();
613
- const error_code = r.readVarInt();
614
- const reason_phrase = r.readString();
615
- return { type: "publish_namespace_error", request_id, error_code, reason_phrase };
616
- }
617
-
618
- function decodePublishNamespaceDonePayload(r: BufferReader): Draft14Message {
619
- const request_id = r.readVarInt();
620
- const status_code = r.readVarInt();
621
- const reason_phrase = r.readString();
622
- return { type: "publish_namespace_done", request_id, status_code, reason_phrase };
623
- }
624
-
625
- function decodePublishNamespaceCancelPayload(r: BufferReader): Draft14Message {
626
- const request_id = r.readVarInt();
627
- return { type: "publish_namespace_cancel", request_id };
628
- }
629
-
630
- function decodeSubscribeNamespacePayload(r: BufferReader): Draft14Message {
631
- const request_id = r.readVarInt();
632
- const namespace_prefix = r.readTuple();
633
- const parameters = decodeParams(r);
634
- return { type: "subscribe_namespace", request_id, namespace_prefix, parameters };
635
- }
636
-
637
- function decodeSubscribeNamespaceOkPayload(r: BufferReader): Draft14Message {
638
- const request_id = r.readVarInt();
639
- const parameters = decodeParams(r);
640
- return { type: "subscribe_namespace_ok", request_id, parameters };
641
- }
642
-
643
- function decodeSubscribeNamespaceErrorPayload(r: BufferReader): Draft14Message {
644
- const request_id = r.readVarInt();
645
- const error_code = r.readVarInt();
646
- const reason_phrase = r.readString();
647
- return { type: "subscribe_namespace_error", request_id, error_code, reason_phrase };
648
- }
649
-
650
- function decodeUnsubscribeNamespacePayload(r: BufferReader): Draft14Message {
651
- const request_id = r.readVarInt();
652
- return { type: "unsubscribe_namespace", request_id };
653
- }
654
-
655
- function decodeFetchPayload(r: BufferReader): Draft14Message {
656
- const request_id = r.readVarInt();
657
- const track_namespace = r.readTuple();
658
- const track_name = r.readString();
659
- const start_group = r.readVarInt();
660
- const start_object = r.readVarInt();
661
- const end_group = r.readVarInt();
662
- const parameters = decodeParams(r);
663
- return {
664
- type: "fetch",
665
- request_id,
666
- track_namespace,
667
- track_name,
668
- start_group,
669
- start_object,
670
- end_group,
671
- parameters,
672
- };
673
- }
674
-
675
- function decodeFetchOkPayload(r: BufferReader): Draft14Message {
676
- const request_id = r.readVarInt();
677
- const track_alias = r.readVarInt();
678
- const end_of_track = r.readVarInt();
679
- const parameters = decodeParams(r);
680
- return { type: "fetch_ok", request_id, track_alias, end_of_track, parameters };
681
- }
682
-
683
- function decodeFetchErrorPayload(r: BufferReader): Draft14Message {
684
- const request_id = r.readVarInt();
685
- const error_code = r.readVarInt();
686
- const reason_phrase = r.readString();
687
- return { type: "fetch_error", request_id, error_code, reason_phrase };
688
- }
689
-
690
- function decodeFetchCancelPayload(r: BufferReader): Draft14Message {
691
- const request_id = r.readVarInt();
692
- return { type: "fetch_cancel", request_id };
693
- }
694
-
695
- function decodeTrackStatusPayload(r: BufferReader): Draft14Message {
696
- const request_id = r.readVarInt();
697
- const track_namespace = r.readTuple();
698
- const track_name = r.readString();
699
- const parameters = decodeParams(r);
700
- return { type: "track_status", request_id, track_namespace, track_name, parameters };
701
- }
702
-
703
- function decodeTrackStatusOkPayload(r: BufferReader): Draft14Message {
704
- const request_id = r.readVarInt();
705
- const status_code = r.readVarInt();
706
- const sc = Number(status_code);
707
-
708
- let largest_group: bigint | undefined;
709
- let largest_object: bigint | undefined;
710
-
711
- if (sc === 0 || sc === 3) {
712
- largest_group = r.readVarInt();
713
- largest_object = r.readVarInt();
714
- }
715
-
716
- const parameters = decodeParams(r);
717
-
718
- return {
719
- type: "track_status_ok",
720
- request_id,
721
- status_code,
722
- parameters,
723
- ...(largest_group !== undefined ? { largest_group, largest_object } : {}),
724
- } as Draft14Message;
725
- }
726
-
727
- function decodeTrackStatusErrorPayload(r: BufferReader): Draft14Message {
728
- const request_id = r.readVarInt();
729
- const error_code = r.readVarInt();
730
- const reason_phrase = r.readString();
731
- return { type: "track_status_error", request_id, error_code, reason_phrase };
732
- }
733
-
734
- function decodeGoAwayPayload(r: BufferReader): Draft14Message {
735
- const new_session_uri = r.readString();
736
- return { type: "goaway", new_session_uri };
737
- }
738
-
739
- function decodeMaxRequestIdPayload(r: BufferReader): Draft14Message {
740
- const request_id = r.readVarInt();
741
- return { type: "max_request_id", request_id };
742
- }
743
-
744
- function decodeRequestsBlockedPayload(r: BufferReader): Draft14Message {
745
- const request_id = r.readVarInt();
746
- return { type: "requests_blocked", request_id };
747
- }
748
-
749
- // ─── Payload dispatch tables ───────────────────────────────────────────────────
750
-
751
- const payloadDecoders: ReadonlyMap<bigint, (r: BufferReader) => Draft14Message> = new Map([
752
- [MSG_CLIENT_SETUP, decodeClientSetupPayload],
753
- [MSG_SERVER_SETUP, decodeServerSetupPayload],
754
- [MSG_SUBSCRIBE, decodeSubscribePayload],
755
- [MSG_SUBSCRIBE_OK, decodeSubscribeOkPayload],
756
- [MSG_SUBSCRIBE_UPDATE, decodeSubscribeUpdatePayload],
757
- [MSG_SUBSCRIBE_ERROR, decodeSubscribeErrorPayload],
758
- [MSG_UNSUBSCRIBE, decodeUnsubscribePayload],
759
- [MSG_PUBLISH, decodePublishPayload],
760
- [MSG_PUBLISH_OK, decodePublishOkPayload],
761
- [MSG_PUBLISH_ERROR, decodePublishErrorPayload],
762
- [MSG_PUBLISH_DONE, decodePublishDonePayload],
763
- [MSG_PUBLISH_NAMESPACE, decodePublishNamespacePayload],
764
- [MSG_PUBLISH_NAMESPACE_OK, decodePublishNamespaceOkPayload],
765
- [MSG_PUBLISH_NAMESPACE_ERROR, decodePublishNamespaceErrorPayload],
766
- [MSG_PUBLISH_NAMESPACE_DONE, decodePublishNamespaceDonePayload],
767
- [MSG_PUBLISH_NAMESPACE_CANCEL, decodePublishNamespaceCancelPayload],
768
- [MSG_SUBSCRIBE_NAMESPACE, decodeSubscribeNamespacePayload],
769
- [MSG_SUBSCRIBE_NAMESPACE_OK, decodeSubscribeNamespaceOkPayload],
770
- [MSG_SUBSCRIBE_NAMESPACE_ERROR, decodeSubscribeNamespaceErrorPayload],
771
- [MSG_UNSUBSCRIBE_NAMESPACE, decodeUnsubscribeNamespacePayload],
772
- [MSG_FETCH, decodeFetchPayload],
773
- [MSG_FETCH_OK, decodeFetchOkPayload],
774
- [MSG_FETCH_ERROR, decodeFetchErrorPayload],
775
- [MSG_FETCH_CANCEL, decodeFetchCancelPayload],
776
- [MSG_TRACK_STATUS, decodeTrackStatusPayload],
777
- [MSG_TRACK_STATUS_OK, decodeTrackStatusOkPayload],
778
- [MSG_TRACK_STATUS_ERROR, decodeTrackStatusErrorPayload],
779
- [MSG_GOAWAY, decodeGoAwayPayload],
780
- [MSG_MAX_REQUEST_ID, decodeMaxRequestIdPayload],
781
- [MSG_REQUESTS_BLOCKED, decodeRequestsBlockedPayload],
782
- ]);
783
-
784
- // ─── Public API ────────────────────────────────────────────────────────────────
785
-
786
- /**
787
- * Encode a draft-14 control message with type(varint) + length(uint16 BE) + payload.
788
- */
789
- export function encodeMessage(message: Draft14Message): Uint8Array {
790
- const typeId = MESSAGE_ID_MAP.get(message.type);
791
- if (typeId === undefined) {
792
- throw new Error(`Unknown message type: ${message.type}`);
793
- }
794
-
795
- // Encode payload into a separate buffer
796
- const payloadWriter = new BufferWriter();
797
- encodePayload(message, payloadWriter);
798
- const payload = payloadWriter.finish();
799
-
800
- if (payload.byteLength > 0xffff) {
801
- throw new Error(`Payload too large for 16-bit length: ${payload.byteLength}`);
802
- }
803
-
804
- // Write framed message: type(varint) + length(uint16 BE) + payload
805
- const writer = new BufferWriter();
806
- writer.writeVarInt(typeId);
807
- writer.writeUint8((payload.byteLength >> 8) & 0xff);
808
- writer.writeUint8(payload.byteLength & 0xff);
809
- writer.writeBytes(payload);
810
-
811
- return writer.finish();
812
- }
813
-
814
- function encodePayload(msg: Draft14Message, w: BufferWriter): void {
815
- switch (msg.type) {
816
- case "client_setup":
817
- return encodeClientSetupPayload(msg, w);
818
- case "server_setup":
819
- return encodeServerSetupPayload(msg, w);
820
- case "subscribe":
821
- return encodeSubscribePayload(msg, w);
822
- case "subscribe_ok":
823
- return encodeSubscribeOkPayload(msg, w);
824
- case "subscribe_update":
825
- return encodeSubscribeUpdatePayload(msg, w);
826
- case "subscribe_error":
827
- return encodeSubscribeErrorPayload(msg, w);
828
- case "unsubscribe":
829
- return encodeUnsubscribePayload(msg, w);
830
- case "publish":
831
- return encodePublishPayload(msg, w);
832
- case "publish_ok":
833
- return encodePublishOkPayload(msg, w);
834
- case "publish_error":
835
- return encodePublishErrorPayload(msg, w);
836
- case "publish_done":
837
- return encodePublishDonePayload(msg, w);
838
- case "publish_namespace":
839
- return encodePublishNamespacePayload(msg, w);
840
- case "publish_namespace_ok":
841
- return encodePublishNamespaceOkPayload(msg, w);
842
- case "publish_namespace_error":
843
- return encodePublishNamespaceErrorPayload(msg, w);
844
- case "publish_namespace_done":
845
- return encodePublishNamespaceDonePayload(msg, w);
846
- case "publish_namespace_cancel":
847
- return encodePublishNamespaceCancelPayload(msg, w);
848
- case "subscribe_namespace":
849
- return encodeSubscribeNamespacePayload(msg, w);
850
- case "subscribe_namespace_ok":
851
- return encodeSubscribeNamespaceOkPayload(msg, w);
852
- case "subscribe_namespace_error":
853
- return encodeSubscribeNamespaceErrorPayload(msg, w);
854
- case "unsubscribe_namespace":
855
- return encodeUnsubscribeNamespacePayload(msg, w);
856
- case "fetch":
857
- return encodeFetchPayload(msg, w);
858
- case "fetch_ok":
859
- return encodeFetchOkPayload(msg, w);
860
- case "fetch_error":
861
- return encodeFetchErrorPayload(msg, w);
862
- case "fetch_cancel":
863
- return encodeFetchCancelPayload(msg, w);
864
- case "track_status":
865
- return encodeTrackStatusPayload(msg, w);
866
- case "track_status_ok":
867
- return encodeTrackStatusOkPayload(msg, w);
868
- case "track_status_error":
869
- return encodeTrackStatusErrorPayload(msg, w);
870
- case "goaway":
871
- return encodeGoAwayPayload(msg, w);
872
- case "max_request_id":
873
- return encodeMaxRequestIdPayload(msg, w);
874
- case "requests_blocked":
875
- return encodeRequestsBlockedPayload(msg, w);
876
- default: {
877
- const _exhaustive: never = msg;
878
- throw new Error(`Unhandled message type: ${(_exhaustive as Draft14Message).type}`);
879
- }
880
- }
881
- }
882
-
883
- /**
884
- * Decode a draft-14 control message from bytes (type + uint16 length + payload).
885
- */
886
- export function decodeMessage(bytes: Uint8Array): DecodeResult<Draft14Message> {
887
- try {
888
- const reader = new BufferReader(bytes);
889
- const typeId = reader.readVarInt();
890
-
891
- // Read 16-bit big-endian payload length
892
- const lenHi = reader.readUint8();
893
- const lenLo = reader.readUint8();
894
- const payloadLength = (lenHi << 8) | lenLo;
895
-
896
- // Read exactly payloadLength bytes
897
- const payloadBytes = reader.readBytes(payloadLength);
898
- const payloadReader = new BufferReader(payloadBytes);
899
-
900
- const decoder = payloadDecoders.get(typeId);
901
- if (!decoder) {
902
- return {
903
- ok: false,
904
- error: new DecodeError(
905
- "UNKNOWN_MESSAGE_TYPE",
906
- `Unknown message type ID: 0x${typeId.toString(16)}`,
907
- 0,
908
- ),
909
- };
910
- }
911
-
912
- const message = decoder(payloadReader);
913
- return { ok: true, value: message, bytesRead: reader.offset };
914
- } catch (e) {
915
- if (e instanceof DecodeError) {
916
- return { ok: false, error: e };
917
- }
918
- throw e;
919
- }
920
- }
921
-
922
- // ─── Data Stream Re-exports ───────────────────────────────────────────────────
923
-
924
- import {
925
- encodeSubgroupStream,
926
- decodeSubgroupStream,
927
- encodeDatagram,
928
- decodeDatagram,
929
- encodeFetchStream,
930
- decodeFetchStream,
931
- decodeDataStream,
932
- createSubgroupStreamDecoder,
933
- createFetchStreamDecoder,
934
- createDataStreamDecoder,
935
- } from "./data-streams.js";
936
-
937
- export {
938
- encodeSubgroupStream,
939
- decodeSubgroupStream,
940
- encodeDatagram,
941
- decodeDatagram,
942
- encodeFetchStream,
943
- decodeFetchStream,
944
- decodeDataStream,
945
- createSubgroupStreamDecoder,
946
- createFetchStreamDecoder,
947
- createDataStreamDecoder,
948
- };
949
-
950
- // ─── Stream Decoders ───────────────────────────────────────────────────────────
951
-
952
- /**
953
- * Create a TransformStream that decodes a continuous byte stream (e.g. the
954
- * WebTransport bidirectional control stream) into individual Draft14Message
955
- * objects. Uses the varint(type) + uint16_BE(length) + payload framing.
956
- */
957
- export function createStreamDecoder(): TransformStream<Uint8Array, Draft14Message> {
958
- let buffer = new Uint8Array(0);
959
-
960
- return new TransformStream<Uint8Array, Draft14Message>({
961
- transform(chunk, controller) {
962
- // Accumulate incoming data
963
- const newBuffer = new Uint8Array(buffer.length + chunk.length);
964
- newBuffer.set(buffer, 0);
965
- newBuffer.set(chunk, buffer.length);
966
- buffer = newBuffer;
967
-
968
- // Try to decode messages from the buffer
969
- while (buffer.length > 0) {
970
- const result = decodeMessage(buffer);
971
- if (!result.ok) {
972
- if (result.error.code === "UNEXPECTED_END") {
973
- // Need more data -- wait for next chunk
974
- break;
975
- }
976
- // Fatal decode error
977
- controller.error(result.error);
978
- return;
979
- }
980
- controller.enqueue(result.value);
981
- // Advance the buffer past the consumed bytes
982
- buffer = buffer.slice(result.bytesRead);
983
- }
984
- },
985
-
986
- flush(controller) {
987
- // If there is remaining data in the buffer, it is a truncated message
988
- if (buffer.length > 0) {
989
- controller.error(
990
- new DecodeError("UNEXPECTED_END", "Stream ended with incomplete message data", 0),
991
- );
992
- }
993
- },
994
- });
995
- }
996
-
997
- // ─── Codec Factory ─────────────────────────────────────────────────────────────
998
-
999
- export interface Draft14Codec extends BaseCodec<Draft14Message> {
1000
- readonly draft: "draft-ietf-moq-transport-14";
1001
- encodeSubgroupStream(stream: SubgroupStream): Uint8Array;
1002
- encodeDatagram(dg: DatagramObject): Uint8Array;
1003
- encodeFetchStream(stream: FetchStream): Uint8Array;
1004
- decodeSubgroupStream(bytes: Uint8Array): DecodeResult<SubgroupStream>;
1005
- decodeDatagram(bytes: Uint8Array): DecodeResult<DatagramObject>;
1006
- decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream>;
1007
- decodeDataStream(
1008
- streamType: "subgroup" | "datagram" | "fetch",
1009
- bytes: Uint8Array,
1010
- ): DecodeResult<Draft14DataStream>;
1011
- createStreamDecoder(): TransformStream<Uint8Array, Draft14Message>;
1012
- createSubgroupStreamDecoder(): TransformStream<Uint8Array, SubgroupStreamHeader | ObjectPayload>;
1013
- createFetchStreamDecoder(): TransformStream<Uint8Array, FetchStreamHeader | ObjectPayload>;
1014
- createDataStreamDecoder(): TransformStream<Uint8Array, DataStreamEvent>;
1015
- }
1016
-
1017
- export function createDraft14Codec(): Draft14Codec {
1018
- return {
1019
- draft: "draft-ietf-moq-transport-14",
1020
- encodeMessage,
1021
- decodeMessage,
1022
- encodeSubgroupStream,
1023
- encodeDatagram,
1024
- encodeFetchStream,
1025
- decodeSubgroupStream,
1026
- decodeDatagram,
1027
- decodeFetchStream,
1028
- decodeDataStream,
1029
- createStreamDecoder,
1030
- createSubgroupStreamDecoder,
1031
- createFetchStreamDecoder,
1032
- createDataStreamDecoder,
1033
- };
1034
- }
1
+ import { BufferReader } from '../../core/buffer-reader.js'
2
+ import { BufferWriter } from '../../core/buffer-writer.js'
3
+ import { bytesToHex, hexToBytes } from '../../core/hex.js'
4
+ import type { BaseCodec, DecodeResult } from '../../core/types.js'
5
+ import { DecodeError } from '../../core/types.js'
6
+ import {
7
+ MESSAGE_ID_MAP,
8
+ MSG_CLIENT_SETUP,
9
+ MSG_FETCH,
10
+ MSG_FETCH_CANCEL,
11
+ MSG_FETCH_ERROR,
12
+ MSG_FETCH_OK,
13
+ MSG_GOAWAY,
14
+ MSG_MAX_REQUEST_ID,
15
+ MSG_PUBLISH,
16
+ MSG_PUBLISH_DONE,
17
+ MSG_PUBLISH_ERROR,
18
+ MSG_PUBLISH_NAMESPACE,
19
+ MSG_PUBLISH_NAMESPACE_CANCEL,
20
+ MSG_PUBLISH_NAMESPACE_DONE,
21
+ MSG_PUBLISH_NAMESPACE_ERROR,
22
+ MSG_PUBLISH_NAMESPACE_OK,
23
+ MSG_PUBLISH_OK,
24
+ MSG_REQUESTS_BLOCKED,
25
+ MSG_SERVER_SETUP,
26
+ MSG_SUBSCRIBE,
27
+ MSG_SUBSCRIBE_ERROR,
28
+ MSG_SUBSCRIBE_NAMESPACE,
29
+ MSG_SUBSCRIBE_NAMESPACE_ERROR,
30
+ MSG_SUBSCRIBE_NAMESPACE_OK,
31
+ MSG_SUBSCRIBE_OK,
32
+ MSG_SUBSCRIBE_UPDATE,
33
+ MSG_TRACK_STATUS,
34
+ MSG_TRACK_STATUS_ERROR,
35
+ MSG_TRACK_STATUS_OK,
36
+ MSG_UNSUBSCRIBE,
37
+ MSG_UNSUBSCRIBE_NAMESPACE,
38
+ PARAM_MAX_REQUEST_ID,
39
+ PARAM_PATH,
40
+ PARAM_ROLE,
41
+ } from './messages.js'
42
+ import type {
43
+ AuthorizationToken,
44
+ DatagramObject,
45
+ DataStreamEvent,
46
+ Draft14DataStream,
47
+ Draft14Message,
48
+ Draft14Params,
49
+ FetchStream,
50
+ FetchStreamHeader,
51
+ Location,
52
+ ObjectPayload,
53
+ SubgroupStream,
54
+ SubgroupStreamHeader,
55
+ UnknownParam,
56
+ } from './types.js'
57
+ import { FetchType, FilterType } from './types.js'
58
+
59
+ const textEncoder = /* @__PURE__ */ new TextEncoder()
60
+ const textDecoder = /* @__PURE__ */ new TextDecoder()
61
+
62
+ // ─── Parameter Constants ──────────────────────────────────────────────────────
63
+
64
+ // Setup-only parameter IDs (CLIENT_SETUP / SERVER_SETUP)
65
+ const PARAM_AUTHORITY = 0x05n
66
+ const PARAM_MAX_AUTH_TOKEN_CACHE_SIZE = 0x04n
67
+
68
+ // Message parameter IDs (SUBSCRIBE, PUBLISH, etc.)
69
+ const PARAM_DELIVERY_TIMEOUT = 0x02n
70
+ const PARAM_AUTHORIZATION_TOKEN = 0x03n
71
+ const PARAM_MAX_CACHE_DURATION = 0x04n
72
+
73
+ // ─── Parameter Encoding/Decoding ───────────────────────────────────────────────
74
+
75
+ function encodeSetupParams(params: Draft14Params, writer: BufferWriter): void {
76
+ let count = 0
77
+ if (params.role !== undefined) count++
78
+ if (params.path !== undefined) count++
79
+ if (params.max_request_id !== undefined) count++
80
+ if (params.authority !== undefined) count++
81
+ if (params.max_auth_token_cache_size !== undefined) count++
82
+ if (params.unknown) count += params.unknown.length
83
+
84
+ writer.writeVarInt(count)
85
+
86
+ if (params.role !== undefined) {
87
+ writer.writeVarInt(PARAM_ROLE)
88
+ writer.writeVarInt(params.role)
89
+ }
90
+ if (params.path !== undefined) {
91
+ writer.writeVarInt(PARAM_PATH)
92
+ const encoded = textEncoder.encode(params.path)
93
+ writer.writeVarInt(encoded.byteLength)
94
+ writer.writeBytes(encoded)
95
+ }
96
+ if (params.max_request_id !== undefined) {
97
+ writer.writeVarInt(PARAM_MAX_REQUEST_ID)
98
+ writer.writeVarInt(params.max_request_id)
99
+ }
100
+ if (params.max_auth_token_cache_size !== undefined) {
101
+ writer.writeVarInt(PARAM_MAX_AUTH_TOKEN_CACHE_SIZE)
102
+ writer.writeVarInt(params.max_auth_token_cache_size)
103
+ }
104
+ if (params.authority !== undefined) {
105
+ writer.writeVarInt(PARAM_AUTHORITY)
106
+ const encoded = textEncoder.encode(params.authority)
107
+ writer.writeVarInt(encoded.byteLength)
108
+ writer.writeBytes(encoded)
109
+ }
110
+ if (params.unknown) {
111
+ for (const u of params.unknown) {
112
+ const id = BigInt(u.id)
113
+ writer.writeVarInt(id)
114
+ const raw = hexToBytes(u.raw_hex)
115
+ writer.writeVarInt(raw.byteLength)
116
+ writer.writeBytes(raw)
117
+ }
118
+ }
119
+ }
120
+
121
+ function decodeSetupParams(reader: BufferReader): Draft14Params {
122
+ const count = Number(reader.readVarInt())
123
+ const result: Draft14Params = {}
124
+ const unknown: UnknownParam[] = []
125
+
126
+ for (let i = 0; i < count; i++) {
127
+ const paramType = reader.readVarInt()
128
+
129
+ if (paramType % 2n === 0n) {
130
+ const value = reader.readVarInt()
131
+ if (paramType === PARAM_ROLE) {
132
+ result.role = value
133
+ } else if (paramType === PARAM_MAX_REQUEST_ID) {
134
+ result.max_request_id = value
135
+ } else if (paramType === PARAM_MAX_AUTH_TOKEN_CACHE_SIZE) {
136
+ result.max_auth_token_cache_size = value
137
+ } else {
138
+ const tmpWriter = new BufferWriter(16)
139
+ tmpWriter.writeVarInt(value)
140
+ const raw = tmpWriter.finish()
141
+ unknown.push({
142
+ id: `0x${paramType.toString(16)}`,
143
+ length: raw.byteLength,
144
+ raw_hex: bytesToHex(raw),
145
+ })
146
+ }
147
+ } else {
148
+ const length = Number(reader.readVarInt())
149
+ const bytes = reader.readBytes(length)
150
+ if (paramType === PARAM_PATH) {
151
+ result.path = textDecoder.decode(bytes)
152
+ } else if (paramType === PARAM_AUTHORITY) {
153
+ result.authority = textDecoder.decode(bytes)
154
+ } else {
155
+ unknown.push({
156
+ id: `0x${paramType.toString(16)}`,
157
+ length,
158
+ raw_hex: bytesToHex(bytes),
159
+ })
160
+ }
161
+ }
162
+ }
163
+
164
+ if (unknown.length > 0) result.unknown = unknown
165
+ return result
166
+ }
167
+
168
+ function encodeMessageParams(params: Draft14Params, writer: BufferWriter): void {
169
+ let count = 0
170
+ if (params.delivery_timeout !== undefined) count++
171
+ if (params.authorization_token !== undefined) count++
172
+ if (params.max_cache_duration !== undefined) count++
173
+ if (params.unknown) count += params.unknown.length
174
+
175
+ writer.writeVarInt(count)
176
+
177
+ if (params.delivery_timeout !== undefined) {
178
+ writer.writeVarInt(PARAM_DELIVERY_TIMEOUT)
179
+ writer.writeVarInt(params.delivery_timeout)
180
+ }
181
+ if (params.authorization_token !== undefined) {
182
+ writer.writeVarInt(PARAM_AUTHORIZATION_TOKEN)
183
+ const tok = params.authorization_token
184
+ const tmpWriter = new BufferWriter(64)
185
+ tmpWriter.writeVarInt(tok.alias_type)
186
+ if (tok.token_type !== undefined) {
187
+ tmpWriter.writeVarInt(tok.token_type)
188
+ }
189
+ if (tok.token_value !== undefined) {
190
+ tmpWriter.writeBytes(hexToBytes(tok.token_value))
191
+ }
192
+ if (tok.token_alias !== undefined) {
193
+ tmpWriter.writeVarInt(tok.token_alias)
194
+ }
195
+ const tokenBytes = tmpWriter.finish()
196
+ writer.writeVarInt(tokenBytes.byteLength)
197
+ writer.writeBytes(tokenBytes)
198
+ }
199
+ if (params.max_cache_duration !== undefined) {
200
+ writer.writeVarInt(PARAM_MAX_CACHE_DURATION)
201
+ writer.writeVarInt(params.max_cache_duration)
202
+ }
203
+ if (params.unknown) {
204
+ for (const u of params.unknown) {
205
+ const id = BigInt(u.id)
206
+ writer.writeVarInt(id)
207
+ const raw = hexToBytes(u.raw_hex)
208
+ writer.writeVarInt(raw.byteLength)
209
+ writer.writeBytes(raw)
210
+ }
211
+ }
212
+ }
213
+
214
+ function decodeMessageParams(reader: BufferReader): Draft14Params {
215
+ const count = Number(reader.readVarInt())
216
+ const result: Draft14Params = {}
217
+ const unknown: UnknownParam[] = []
218
+
219
+ for (let i = 0; i < count; i++) {
220
+ const paramType = reader.readVarInt()
221
+
222
+ if (paramType % 2n === 0n) {
223
+ const value = reader.readVarInt()
224
+ if (paramType === PARAM_DELIVERY_TIMEOUT) {
225
+ result.delivery_timeout = value
226
+ } else if (paramType === PARAM_MAX_CACHE_DURATION) {
227
+ result.max_cache_duration = value
228
+ } else {
229
+ const tmpWriter = new BufferWriter(16)
230
+ tmpWriter.writeVarInt(value)
231
+ const raw = tmpWriter.finish()
232
+ unknown.push({
233
+ id: `0x${paramType.toString(16)}`,
234
+ length: raw.byteLength,
235
+ raw_hex: bytesToHex(raw),
236
+ })
237
+ }
238
+ } else {
239
+ const length = Number(reader.readVarInt())
240
+ const bytes = reader.readBytes(length)
241
+ if (paramType === PARAM_AUTHORIZATION_TOKEN) {
242
+ const tokenReader = new BufferReader(bytes)
243
+ const alias_type = tokenReader.readVarInt()
244
+ const tok: Record<string, unknown> = { alias_type }
245
+ if (tokenReader.remaining > 0) {
246
+ tok.token_type = tokenReader.readVarInt()
247
+ if (tokenReader.remaining > 0) {
248
+ const tokenValue = tokenReader.readBytesView(tokenReader.remaining)
249
+ tok.token_value = bytesToHex(tokenValue)
250
+ }
251
+ }
252
+ result.authorization_token = tok as unknown as AuthorizationToken
253
+ } else {
254
+ unknown.push({
255
+ id: `0x${paramType.toString(16)}`,
256
+ length,
257
+ raw_hex: bytesToHex(bytes),
258
+ })
259
+ }
260
+ }
261
+ }
262
+
263
+ if (unknown.length > 0) result.unknown = unknown
264
+ return result
265
+ }
266
+
267
+ // ─── Payload Encoders ──────────────────────────────────────────────────────────
268
+
269
+ function encodeClientSetupPayload(
270
+ msg: Draft14Message & { type: 'client_setup' },
271
+ w: BufferWriter,
272
+ ): void {
273
+ w.writeVarInt(msg.supported_versions.length)
274
+ for (const v of msg.supported_versions) {
275
+ w.writeVarInt(v)
276
+ }
277
+ encodeSetupParams(msg.parameters, w)
278
+ }
279
+
280
+ function encodeServerSetupPayload(
281
+ msg: Draft14Message & { type: 'server_setup' },
282
+ w: BufferWriter,
283
+ ): void {
284
+ w.writeVarInt(msg.selected_version)
285
+ encodeSetupParams(msg.parameters, w)
286
+ }
287
+
288
+ function encodeSubscribePayload(
289
+ msg: Draft14Message & { type: 'subscribe' },
290
+ w: BufferWriter,
291
+ ): void {
292
+ w.writeVarInt(msg.request_id)
293
+ w.writeTuple(msg.track_namespace)
294
+ w.writeString(msg.track_name)
295
+ w.writeUint8(Number(msg.subscriber_priority))
296
+ w.writeUint8(Number(msg.group_order))
297
+ w.writeVarInt(msg.forward)
298
+ w.writeVarInt(msg.filter_type)
299
+ const ft = msg.filter_type
300
+ if (ft >= FilterType.AbsoluteStart) {
301
+ w.writeVarInt(msg.start_group!)
302
+ w.writeVarInt(msg.start_object!)
303
+ }
304
+ if (ft === FilterType.AbsoluteRange) {
305
+ w.writeVarInt(msg.end_group!)
306
+ }
307
+ encodeMessageParams(msg.parameters, w)
308
+ }
309
+
310
+ function encodeSubscribeOkPayload(
311
+ msg: Draft14Message & { type: 'subscribe_ok' },
312
+ w: BufferWriter,
313
+ ): void {
314
+ w.writeVarInt(msg.request_id)
315
+ w.writeVarInt(msg.track_alias)
316
+ w.writeVarInt(msg.expires)
317
+ w.writeUint8(Number(msg.group_order))
318
+ w.writeVarInt(msg.content_exists)
319
+ if (msg.content_exists === 1n) {
320
+ w.writeVarInt(msg.largest_location!.group)
321
+ w.writeVarInt(msg.largest_location!.object)
322
+ }
323
+ encodeMessageParams(msg.parameters, w)
324
+ }
325
+
326
+ function encodeSubscribeUpdatePayload(
327
+ msg: Draft14Message & { type: 'subscribe_update' },
328
+ w: BufferWriter,
329
+ ): void {
330
+ w.writeVarInt(msg.request_id)
331
+ w.writeVarInt(msg.subscription_request_id)
332
+ w.writeVarInt(msg.start_group)
333
+ w.writeVarInt(msg.start_object)
334
+ w.writeVarInt(msg.end_group)
335
+ w.writeUint8(Number(msg.subscriber_priority))
336
+ w.writeVarInt(msg.forward)
337
+ encodeMessageParams(msg.parameters, w)
338
+ }
339
+
340
+ function encodeSubscribeErrorPayload(
341
+ msg: Draft14Message & { type: 'subscribe_error' },
342
+ w: BufferWriter,
343
+ ): void {
344
+ w.writeVarInt(msg.request_id)
345
+ w.writeVarInt(msg.error_code)
346
+ w.writeString(msg.reason_phrase)
347
+ }
348
+
349
+ function encodeUnsubscribePayload(
350
+ msg: Draft14Message & { type: 'unsubscribe' },
351
+ w: BufferWriter,
352
+ ): void {
353
+ w.writeVarInt(msg.request_id)
354
+ }
355
+
356
+ function encodePublishPayload(msg: Draft14Message & { type: 'publish' }, w: BufferWriter): void {
357
+ w.writeVarInt(msg.request_id)
358
+ w.writeTuple(msg.track_namespace)
359
+ w.writeString(msg.track_name)
360
+ w.writeVarInt(msg.track_alias)
361
+ w.writeUint8(Number(msg.group_order))
362
+ w.writeVarInt(msg.content_exists)
363
+ if (msg.content_exists === 1n) {
364
+ w.writeVarInt(msg.largest_location!.group)
365
+ w.writeVarInt(msg.largest_location!.object)
366
+ }
367
+ w.writeVarInt(msg.forward)
368
+ encodeMessageParams(msg.parameters, w)
369
+ }
370
+
371
+ function encodePublishOkPayload(
372
+ msg: Draft14Message & { type: 'publish_ok' },
373
+ w: BufferWriter,
374
+ ): void {
375
+ w.writeVarInt(msg.request_id)
376
+ w.writeVarInt(msg.forward)
377
+ w.writeUint8(Number(msg.subscriber_priority))
378
+ w.writeUint8(Number(msg.group_order))
379
+ w.writeVarInt(msg.filter_type)
380
+ const ft = msg.filter_type
381
+ if (ft >= FilterType.AbsoluteStart) {
382
+ w.writeVarInt(msg.start_group!)
383
+ w.writeVarInt(msg.start_object!)
384
+ }
385
+ if (ft === FilterType.AbsoluteRange) {
386
+ w.writeVarInt(msg.end_group!)
387
+ }
388
+ encodeMessageParams(msg.parameters, w)
389
+ }
390
+
391
+ function encodePublishErrorPayload(
392
+ msg: Draft14Message & { type: 'publish_error' },
393
+ w: BufferWriter,
394
+ ): void {
395
+ w.writeVarInt(msg.request_id)
396
+ w.writeVarInt(msg.error_code)
397
+ w.writeString(msg.reason_phrase)
398
+ }
399
+
400
+ function encodePublishDonePayload(
401
+ msg: Draft14Message & { type: 'publish_done' },
402
+ w: BufferWriter,
403
+ ): void {
404
+ w.writeVarInt(msg.request_id)
405
+ w.writeVarInt(msg.status_code)
406
+ w.writeVarInt(msg.stream_count)
407
+ w.writeString(msg.reason_phrase)
408
+ }
409
+
410
+ function encodePublishNamespacePayload(
411
+ msg: Draft14Message & { type: 'publish_namespace' },
412
+ w: BufferWriter,
413
+ ): void {
414
+ w.writeVarInt(msg.request_id)
415
+ w.writeTuple(msg.track_namespace)
416
+ encodeMessageParams(msg.parameters, w)
417
+ }
418
+
419
+ function encodePublishNamespaceOkPayload(
420
+ msg: Draft14Message & { type: 'publish_namespace_ok' },
421
+ w: BufferWriter,
422
+ ): void {
423
+ w.writeVarInt(msg.request_id)
424
+ encodeMessageParams(msg.parameters, w)
425
+ }
426
+
427
+ function encodePublishNamespaceErrorPayload(
428
+ msg: Draft14Message & { type: 'publish_namespace_error' },
429
+ w: BufferWriter,
430
+ ): void {
431
+ w.writeVarInt(msg.request_id)
432
+ w.writeVarInt(msg.error_code)
433
+ w.writeString(msg.reason_phrase)
434
+ }
435
+
436
+ function encodePublishNamespaceDonePayload(
437
+ msg: Draft14Message & { type: 'publish_namespace_done' },
438
+ w: BufferWriter,
439
+ ): void {
440
+ w.writeTuple(msg.track_namespace)
441
+ }
442
+
443
+ function encodePublishNamespaceCancelPayload(
444
+ msg: Draft14Message & { type: 'publish_namespace_cancel' },
445
+ w: BufferWriter,
446
+ ): void {
447
+ w.writeTuple(msg.track_namespace)
448
+ w.writeVarInt(msg.error_code)
449
+ w.writeString(msg.reason_phrase)
450
+ }
451
+
452
+ function encodeSubscribeNamespacePayload(
453
+ msg: Draft14Message & { type: 'subscribe_namespace' },
454
+ w: BufferWriter,
455
+ ): void {
456
+ w.writeVarInt(msg.request_id)
457
+ w.writeTuple(msg.namespace_prefix)
458
+ encodeMessageParams(msg.parameters, w)
459
+ }
460
+
461
+ function encodeSubscribeNamespaceOkPayload(
462
+ msg: Draft14Message & { type: 'subscribe_namespace_ok' },
463
+ w: BufferWriter,
464
+ ): void {
465
+ w.writeVarInt(msg.request_id)
466
+ encodeMessageParams(msg.parameters, w)
467
+ }
468
+
469
+ function encodeSubscribeNamespaceErrorPayload(
470
+ msg: Draft14Message & { type: 'subscribe_namespace_error' },
471
+ w: BufferWriter,
472
+ ): void {
473
+ w.writeVarInt(msg.request_id)
474
+ w.writeVarInt(msg.error_code)
475
+ w.writeString(msg.reason_phrase)
476
+ }
477
+
478
+ function encodeUnsubscribeNamespacePayload(
479
+ msg: Draft14Message & { type: 'unsubscribe_namespace' },
480
+ w: BufferWriter,
481
+ ): void {
482
+ w.writeTuple(msg.track_namespace_prefix)
483
+ }
484
+
485
+ function encodeFetchPayload(msg: Draft14Message & { type: 'fetch' }, w: BufferWriter): void {
486
+ w.writeVarInt(msg.request_id)
487
+ w.writeUint8(Number(msg.subscriber_priority))
488
+ w.writeUint8(Number(msg.group_order))
489
+ w.writeVarInt(msg.fetch_type)
490
+ const ft = msg.fetch_type
491
+ if (ft === FetchType.Standalone) {
492
+ w.writeTuple(msg.track_namespace!)
493
+ w.writeString(msg.track_name!)
494
+ w.writeVarInt(msg.start_group!)
495
+ w.writeVarInt(msg.start_object!)
496
+ w.writeVarInt(msg.end_group!)
497
+ w.writeVarInt(msg.end_object!)
498
+ } else {
499
+ w.writeVarInt(msg.joining_request_id!)
500
+ w.writeVarInt(msg.joining_start!)
501
+ }
502
+ encodeMessageParams(msg.parameters, w)
503
+ }
504
+
505
+ function encodeFetchOkPayload(msg: Draft14Message & { type: 'fetch_ok' }, w: BufferWriter): void {
506
+ w.writeVarInt(msg.request_id)
507
+ w.writeUint8(Number(msg.group_order))
508
+ w.writeVarInt(msg.end_of_track)
509
+ w.writeVarInt(msg.end_location.group)
510
+ w.writeVarInt(msg.end_location.object)
511
+ encodeMessageParams(msg.parameters, w)
512
+ }
513
+
514
+ function encodeFetchErrorPayload(
515
+ msg: Draft14Message & { type: 'fetch_error' },
516
+ w: BufferWriter,
517
+ ): void {
518
+ w.writeVarInt(msg.request_id)
519
+ w.writeVarInt(msg.error_code)
520
+ w.writeString(msg.reason_phrase)
521
+ }
522
+
523
+ function encodeFetchCancelPayload(
524
+ msg: Draft14Message & { type: 'fetch_cancel' },
525
+ w: BufferWriter,
526
+ ): void {
527
+ w.writeVarInt(msg.request_id)
528
+ }
529
+
530
+ function encodeTrackStatusPayload(
531
+ msg: Draft14Message & { type: 'track_status' },
532
+ w: BufferWriter,
533
+ ): void {
534
+ w.writeVarInt(msg.request_id)
535
+ w.writeTuple(msg.track_namespace)
536
+ w.writeString(msg.track_name)
537
+ w.writeUint8(Number(msg.subscriber_priority))
538
+ w.writeUint8(Number(msg.group_order))
539
+ w.writeVarInt(msg.forward)
540
+ w.writeVarInt(msg.filter_type)
541
+ const ft = msg.filter_type
542
+ if (ft >= FilterType.AbsoluteStart) {
543
+ w.writeVarInt(msg.start_group!)
544
+ w.writeVarInt(msg.start_object!)
545
+ }
546
+ encodeMessageParams(msg.parameters, w)
547
+ }
548
+
549
+ function encodeTrackStatusOkPayload(
550
+ msg: Draft14Message & { type: 'track_status_ok' },
551
+ w: BufferWriter,
552
+ ): void {
553
+ w.writeVarInt(msg.request_id)
554
+ w.writeVarInt(msg.track_alias)
555
+ w.writeVarInt(msg.expires)
556
+ w.writeUint8(Number(msg.group_order))
557
+ w.writeVarInt(msg.content_exists)
558
+ if (msg.content_exists === 1n) {
559
+ w.writeVarInt(msg.largest_location!.group)
560
+ w.writeVarInt(msg.largest_location!.object)
561
+ }
562
+ encodeMessageParams(msg.parameters, w)
563
+ }
564
+
565
+ function encodeTrackStatusErrorPayload(
566
+ msg: Draft14Message & { type: 'track_status_error' },
567
+ w: BufferWriter,
568
+ ): void {
569
+ w.writeVarInt(msg.request_id)
570
+ w.writeVarInt(msg.error_code)
571
+ w.writeString(msg.reason_phrase)
572
+ }
573
+
574
+ function encodeGoAwayPayload(msg: Draft14Message & { type: 'goaway' }, w: BufferWriter): void {
575
+ w.writeString(msg.new_session_uri)
576
+ }
577
+
578
+ function encodeMaxRequestIdPayload(
579
+ msg: Draft14Message & { type: 'max_request_id' },
580
+ w: BufferWriter,
581
+ ): void {
582
+ w.writeVarInt(msg.request_id)
583
+ }
584
+
585
+ function encodeRequestsBlockedPayload(
586
+ msg: Draft14Message & { type: 'requests_blocked' },
587
+ w: BufferWriter,
588
+ ): void {
589
+ w.writeVarInt(msg.request_id)
590
+ }
591
+
592
+ // ─── Payload Decoders ──────────────────────────────────────────────────────────
593
+
594
+ function decodeClientSetupPayload(r: BufferReader): Draft14Message {
595
+ const numVersions = Number(r.readVarInt())
596
+ if (numVersions === 0) {
597
+ throw new DecodeError(
598
+ 'CONSTRAINT_VIOLATION',
599
+ 'CLIENT_SETUP must offer at least one version',
600
+ r.offset,
601
+ )
602
+ }
603
+ const supported_versions: bigint[] = []
604
+ for (let i = 0; i < numVersions; i++) {
605
+ supported_versions.push(r.readVarInt())
606
+ }
607
+ const parameters = decodeSetupParams(r)
608
+ return { type: 'client_setup', supported_versions, parameters }
609
+ }
610
+
611
+ function decodeServerSetupPayload(r: BufferReader): Draft14Message {
612
+ const selected_version = r.readVarInt()
613
+ const parameters = decodeSetupParams(r)
614
+ return { type: 'server_setup', selected_version, parameters }
615
+ }
616
+
617
+ function decodeSubscribePayload(r: BufferReader): Draft14Message {
618
+ const request_id = r.readVarInt()
619
+ const track_namespace = r.readTuple()
620
+ const track_name = r.readString()
621
+ const subscriber_priority = BigInt(r.readUint8())
622
+ const group_order = BigInt(r.readUint8())
623
+ const forward = r.readVarInt()
624
+ const filter_type = r.readVarInt()
625
+
626
+ if (filter_type < FilterType.NextGroupStart || filter_type > FilterType.AbsoluteRange) {
627
+ throw new DecodeError('CONSTRAINT_VIOLATION', `Invalid filter_type: ${filter_type}`, r.offset)
628
+ }
629
+
630
+ let start_group: bigint | undefined
631
+ let start_object: bigint | undefined
632
+ let end_group: bigint | undefined
633
+
634
+ if (filter_type >= FilterType.AbsoluteStart) {
635
+ start_group = r.readVarInt()
636
+ start_object = r.readVarInt()
637
+ }
638
+ if (filter_type === FilterType.AbsoluteRange) {
639
+ end_group = r.readVarInt()
640
+ }
641
+
642
+ const parameters = decodeMessageParams(r)
643
+
644
+ const msg: Draft14Message & { type: 'subscribe' } = {
645
+ type: 'subscribe',
646
+ request_id,
647
+ track_namespace,
648
+ track_name,
649
+ subscriber_priority,
650
+ group_order,
651
+ forward,
652
+ filter_type,
653
+ parameters,
654
+ }
655
+
656
+ if (start_group !== undefined) {
657
+ return { ...msg, start_group, start_object, end_group } as Draft14Message
658
+ }
659
+
660
+ return msg
661
+ }
662
+
663
+ function decodeSubscribeOkPayload(r: BufferReader): Draft14Message {
664
+ const request_id = r.readVarInt()
665
+ const track_alias = r.readVarInt()
666
+ const expires = r.readVarInt()
667
+ const group_order = BigInt(r.readUint8())
668
+ const content_exists = r.readVarInt()
669
+
670
+ let largest_location: Location | undefined
671
+ if (content_exists === 1n) {
672
+ largest_location = {
673
+ group: r.readVarInt(),
674
+ object: r.readVarInt(),
675
+ }
676
+ }
677
+
678
+ const parameters = decodeMessageParams(r)
679
+
680
+ return {
681
+ type: 'subscribe_ok',
682
+ request_id,
683
+ track_alias,
684
+ expires,
685
+ group_order,
686
+ content_exists,
687
+ parameters,
688
+ ...(largest_location !== undefined ? { largest_location } : {}),
689
+ } as Draft14Message
690
+ }
691
+
692
+ function decodeSubscribeUpdatePayload(r: BufferReader): Draft14Message {
693
+ const request_id = r.readVarInt()
694
+ const subscription_request_id = r.readVarInt()
695
+ const start_group = r.readVarInt()
696
+ const start_object = r.readVarInt()
697
+ const end_group = r.readVarInt()
698
+ const subscriber_priority = BigInt(r.readUint8())
699
+ const forward = r.readVarInt()
700
+ const parameters = decodeMessageParams(r)
701
+ return {
702
+ type: 'subscribe_update',
703
+ request_id,
704
+ subscription_request_id,
705
+ start_group,
706
+ start_object,
707
+ end_group,
708
+ subscriber_priority,
709
+ forward,
710
+ parameters,
711
+ }
712
+ }
713
+
714
+ function decodeSubscribeErrorPayload(r: BufferReader): Draft14Message {
715
+ const request_id = r.readVarInt()
716
+ const error_code = r.readVarInt()
717
+ const reason_phrase = r.readString()
718
+ return { type: 'subscribe_error', request_id, error_code, reason_phrase }
719
+ }
720
+
721
+ function decodeUnsubscribePayload(r: BufferReader): Draft14Message {
722
+ const request_id = r.readVarInt()
723
+ return { type: 'unsubscribe', request_id }
724
+ }
725
+
726
+ function decodePublishPayload(r: BufferReader): Draft14Message {
727
+ const request_id = r.readVarInt()
728
+ const track_namespace = r.readTuple()
729
+ const track_name = r.readString()
730
+ const track_alias = r.readVarInt()
731
+ const group_order = BigInt(r.readUint8())
732
+ const content_exists = r.readVarInt()
733
+ let largest_location: Location | undefined
734
+ if (content_exists === 1n) {
735
+ largest_location = {
736
+ group: r.readVarInt(),
737
+ object: r.readVarInt(),
738
+ }
739
+ }
740
+ const forward = r.readVarInt()
741
+ const parameters = decodeMessageParams(r)
742
+ return {
743
+ type: 'publish',
744
+ request_id,
745
+ track_namespace,
746
+ track_name,
747
+ track_alias,
748
+ group_order,
749
+ content_exists,
750
+ forward,
751
+ parameters,
752
+ ...(largest_location !== undefined ? { largest_location } : {}),
753
+ } as Draft14Message
754
+ }
755
+
756
+ function decodePublishOkPayload(r: BufferReader): Draft14Message {
757
+ const request_id = r.readVarInt()
758
+ const forward = r.readVarInt()
759
+ const subscriber_priority = BigInt(r.readUint8())
760
+ const group_order = BigInt(r.readUint8())
761
+ const filter_type = r.readVarInt()
762
+
763
+ let start_group: bigint | undefined
764
+ let start_object: bigint | undefined
765
+ let end_group: bigint | undefined
766
+
767
+ if (filter_type >= FilterType.AbsoluteStart) {
768
+ start_group = r.readVarInt()
769
+ start_object = r.readVarInt()
770
+ }
771
+ if (filter_type === FilterType.AbsoluteRange) {
772
+ end_group = r.readVarInt()
773
+ }
774
+
775
+ const parameters = decodeMessageParams(r)
776
+
777
+ const msg: Record<string, unknown> = {
778
+ type: 'publish_ok',
779
+ request_id,
780
+ forward,
781
+ subscriber_priority,
782
+ group_order,
783
+ filter_type,
784
+ parameters,
785
+ }
786
+ if (start_group !== undefined) msg.start_group = start_group
787
+ if (start_object !== undefined) msg.start_object = start_object
788
+ if (end_group !== undefined) msg.end_group = end_group
789
+
790
+ return msg as unknown as Draft14Message
791
+ }
792
+
793
+ function decodePublishErrorPayload(r: BufferReader): Draft14Message {
794
+ const request_id = r.readVarInt()
795
+ const error_code = r.readVarInt()
796
+ const reason_phrase = r.readString()
797
+ return { type: 'publish_error', request_id, error_code, reason_phrase }
798
+ }
799
+
800
+ function decodePublishDonePayload(r: BufferReader): Draft14Message {
801
+ const request_id = r.readVarInt()
802
+ const status_code = r.readVarInt()
803
+ const stream_count = r.readVarInt()
804
+ const reason_phrase = r.readString()
805
+ return {
806
+ type: 'publish_done',
807
+ request_id,
808
+ status_code,
809
+ stream_count,
810
+ reason_phrase,
811
+ }
812
+ }
813
+
814
+ function decodePublishNamespacePayload(r: BufferReader): Draft14Message {
815
+ const request_id = r.readVarInt()
816
+ const track_namespace = r.readTuple()
817
+ const parameters = decodeMessageParams(r)
818
+ return { type: 'publish_namespace', request_id, track_namespace, parameters }
819
+ }
820
+
821
+ function decodePublishNamespaceOkPayload(r: BufferReader): Draft14Message {
822
+ const request_id = r.readVarInt()
823
+ const parameters = decodeMessageParams(r)
824
+ return { type: 'publish_namespace_ok', request_id, parameters }
825
+ }
826
+
827
+ function decodePublishNamespaceErrorPayload(r: BufferReader): Draft14Message {
828
+ const request_id = r.readVarInt()
829
+ const error_code = r.readVarInt()
830
+ const reason_phrase = r.readString()
831
+ return {
832
+ type: 'publish_namespace_error',
833
+ request_id,
834
+ error_code,
835
+ reason_phrase,
836
+ }
837
+ }
838
+
839
+ function decodePublishNamespaceDonePayload(r: BufferReader): Draft14Message {
840
+ const track_namespace = r.readTuple()
841
+ return { type: 'publish_namespace_done', track_namespace }
842
+ }
843
+
844
+ function decodePublishNamespaceCancelPayload(r: BufferReader): Draft14Message {
845
+ const track_namespace = r.readTuple()
846
+ const error_code = r.readVarInt()
847
+ const reason_phrase = r.readString()
848
+ return {
849
+ type: 'publish_namespace_cancel',
850
+ track_namespace,
851
+ error_code,
852
+ reason_phrase,
853
+ }
854
+ }
855
+
856
+ function decodeSubscribeNamespacePayload(r: BufferReader): Draft14Message {
857
+ const request_id = r.readVarInt()
858
+ const namespace_prefix = r.readTuple()
859
+ const parameters = decodeMessageParams(r)
860
+ return {
861
+ type: 'subscribe_namespace',
862
+ request_id,
863
+ namespace_prefix,
864
+ parameters,
865
+ }
866
+ }
867
+
868
+ function decodeSubscribeNamespaceOkPayload(r: BufferReader): Draft14Message {
869
+ const request_id = r.readVarInt()
870
+ const parameters = decodeMessageParams(r)
871
+ return { type: 'subscribe_namespace_ok', request_id, parameters }
872
+ }
873
+
874
+ function decodeSubscribeNamespaceErrorPayload(r: BufferReader): Draft14Message {
875
+ const request_id = r.readVarInt()
876
+ const error_code = r.readVarInt()
877
+ const reason_phrase = r.readString()
878
+ return {
879
+ type: 'subscribe_namespace_error',
880
+ request_id,
881
+ error_code,
882
+ reason_phrase,
883
+ }
884
+ }
885
+
886
+ function decodeUnsubscribeNamespacePayload(r: BufferReader): Draft14Message {
887
+ const track_namespace_prefix = r.readTuple()
888
+ return { type: 'unsubscribe_namespace', track_namespace_prefix }
889
+ }
890
+
891
+ function decodeFetchPayload(r: BufferReader): Draft14Message {
892
+ const request_id = r.readVarInt()
893
+ const subscriber_priority = BigInt(r.readUint8())
894
+ const group_order = BigInt(r.readUint8())
895
+ const fetch_type = r.readVarInt()
896
+
897
+ if (fetch_type < FetchType.Standalone || fetch_type > FetchType.AbsoluteJoining) {
898
+ throw new DecodeError('CONSTRAINT_VIOLATION', `Invalid fetch_type: ${fetch_type}`, r.offset)
899
+ }
900
+
901
+ if (fetch_type === FetchType.Standalone) {
902
+ const track_namespace = r.readTuple()
903
+ const track_name = r.readString()
904
+ const start_group = r.readVarInt()
905
+ const start_object = r.readVarInt()
906
+ const end_group = r.readVarInt()
907
+ const end_object = r.readVarInt()
908
+ const parameters = decodeMessageParams(r)
909
+ return {
910
+ type: 'fetch',
911
+ request_id,
912
+ subscriber_priority,
913
+ group_order,
914
+ fetch_type,
915
+ track_namespace,
916
+ track_name,
917
+ start_group,
918
+ start_object,
919
+ end_group,
920
+ end_object,
921
+ parameters,
922
+ }
923
+ } else {
924
+ const joining_request_id = r.readVarInt()
925
+ const joining_start = r.readVarInt()
926
+ const parameters = decodeMessageParams(r)
927
+ return {
928
+ type: 'fetch',
929
+ request_id,
930
+ subscriber_priority,
931
+ group_order,
932
+ fetch_type,
933
+ joining_request_id,
934
+ joining_start,
935
+ parameters,
936
+ }
937
+ }
938
+ }
939
+
940
+ function decodeFetchOkPayload(r: BufferReader): Draft14Message {
941
+ const request_id = r.readVarInt()
942
+ const group_order = BigInt(r.readUint8())
943
+ const end_of_track = r.readVarInt()
944
+ const end_location: Location = {
945
+ group: r.readVarInt(),
946
+ object: r.readVarInt(),
947
+ }
948
+ const parameters = decodeMessageParams(r)
949
+ return {
950
+ type: 'fetch_ok',
951
+ request_id,
952
+ group_order,
953
+ end_of_track,
954
+ end_location,
955
+ parameters,
956
+ }
957
+ }
958
+
959
+ function decodeFetchErrorPayload(r: BufferReader): Draft14Message {
960
+ const request_id = r.readVarInt()
961
+ const error_code = r.readVarInt()
962
+ const reason_phrase = r.readString()
963
+ return { type: 'fetch_error', request_id, error_code, reason_phrase }
964
+ }
965
+
966
+ function decodeFetchCancelPayload(r: BufferReader): Draft14Message {
967
+ const request_id = r.readVarInt()
968
+ return { type: 'fetch_cancel', request_id }
969
+ }
970
+
971
+ function decodeTrackStatusPayload(r: BufferReader): Draft14Message {
972
+ const request_id = r.readVarInt()
973
+ const track_namespace = r.readTuple()
974
+ const track_name = r.readString()
975
+ const subscriber_priority = BigInt(r.readUint8())
976
+ const group_order = BigInt(r.readUint8())
977
+ const forward = r.readVarInt()
978
+ const filter_type = r.readVarInt()
979
+
980
+ let start_group: bigint | undefined
981
+ let start_object: bigint | undefined
982
+ if (filter_type >= FilterType.AbsoluteStart) {
983
+ start_group = r.readVarInt()
984
+ start_object = r.readVarInt()
985
+ }
986
+
987
+ const parameters = decodeMessageParams(r)
988
+
989
+ const msg: Record<string, unknown> = {
990
+ type: 'track_status',
991
+ request_id,
992
+ track_namespace,
993
+ track_name,
994
+ subscriber_priority,
995
+ group_order,
996
+ forward,
997
+ filter_type,
998
+ parameters,
999
+ }
1000
+ if (start_group !== undefined) msg.start_group = start_group
1001
+ if (start_object !== undefined) msg.start_object = start_object
1002
+
1003
+ return msg as unknown as Draft14Message
1004
+ }
1005
+
1006
+ function decodeTrackStatusOkPayload(r: BufferReader): Draft14Message {
1007
+ const request_id = r.readVarInt()
1008
+ const track_alias = r.readVarInt()
1009
+ const expires = r.readVarInt()
1010
+ const group_order = BigInt(r.readUint8())
1011
+ const content_exists = r.readVarInt()
1012
+
1013
+ let largest_location: Location | undefined
1014
+ if (content_exists === 1n) {
1015
+ largest_location = {
1016
+ group: r.readVarInt(),
1017
+ object: r.readVarInt(),
1018
+ }
1019
+ }
1020
+
1021
+ const parameters = decodeMessageParams(r)
1022
+
1023
+ return {
1024
+ type: 'track_status_ok',
1025
+ request_id,
1026
+ track_alias,
1027
+ expires,
1028
+ group_order,
1029
+ content_exists,
1030
+ parameters,
1031
+ ...(largest_location !== undefined ? { largest_location } : {}),
1032
+ } as Draft14Message
1033
+ }
1034
+
1035
+ function decodeTrackStatusErrorPayload(r: BufferReader): Draft14Message {
1036
+ const request_id = r.readVarInt()
1037
+ const error_code = r.readVarInt()
1038
+ const reason_phrase = r.readString()
1039
+ return { type: 'track_status_error', request_id, error_code, reason_phrase }
1040
+ }
1041
+
1042
+ function decodeGoAwayPayload(r: BufferReader): Draft14Message {
1043
+ const new_session_uri = r.readString()
1044
+ return { type: 'goaway', new_session_uri }
1045
+ }
1046
+
1047
+ function decodeMaxRequestIdPayload(r: BufferReader): Draft14Message {
1048
+ const request_id = r.readVarInt()
1049
+ return { type: 'max_request_id', request_id }
1050
+ }
1051
+
1052
+ function decodeRequestsBlockedPayload(r: BufferReader): Draft14Message {
1053
+ const request_id = r.readVarInt()
1054
+ return { type: 'requests_blocked', request_id }
1055
+ }
1056
+
1057
+ // ─── Payload dispatch tables ───────────────────────────────────────────────────
1058
+
1059
+ const payloadDecoders: ReadonlyMap<bigint, (r: BufferReader) => Draft14Message> = new Map([
1060
+ [MSG_CLIENT_SETUP, decodeClientSetupPayload],
1061
+ [MSG_SERVER_SETUP, decodeServerSetupPayload],
1062
+ [MSG_SUBSCRIBE, decodeSubscribePayload],
1063
+ [MSG_SUBSCRIBE_OK, decodeSubscribeOkPayload],
1064
+ [MSG_SUBSCRIBE_UPDATE, decodeSubscribeUpdatePayload],
1065
+ [MSG_SUBSCRIBE_ERROR, decodeSubscribeErrorPayload],
1066
+ [MSG_UNSUBSCRIBE, decodeUnsubscribePayload],
1067
+ [MSG_PUBLISH, decodePublishPayload],
1068
+ [MSG_PUBLISH_OK, decodePublishOkPayload],
1069
+ [MSG_PUBLISH_ERROR, decodePublishErrorPayload],
1070
+ [MSG_PUBLISH_DONE, decodePublishDonePayload],
1071
+ [MSG_PUBLISH_NAMESPACE, decodePublishNamespacePayload],
1072
+ [MSG_PUBLISH_NAMESPACE_OK, decodePublishNamespaceOkPayload],
1073
+ [MSG_PUBLISH_NAMESPACE_ERROR, decodePublishNamespaceErrorPayload],
1074
+ [MSG_PUBLISH_NAMESPACE_DONE, decodePublishNamespaceDonePayload],
1075
+ [MSG_PUBLISH_NAMESPACE_CANCEL, decodePublishNamespaceCancelPayload],
1076
+ [MSG_SUBSCRIBE_NAMESPACE, decodeSubscribeNamespacePayload],
1077
+ [MSG_SUBSCRIBE_NAMESPACE_OK, decodeSubscribeNamespaceOkPayload],
1078
+ [MSG_SUBSCRIBE_NAMESPACE_ERROR, decodeSubscribeNamespaceErrorPayload],
1079
+ [MSG_UNSUBSCRIBE_NAMESPACE, decodeUnsubscribeNamespacePayload],
1080
+ [MSG_FETCH, decodeFetchPayload],
1081
+ [MSG_FETCH_OK, decodeFetchOkPayload],
1082
+ [MSG_FETCH_ERROR, decodeFetchErrorPayload],
1083
+ [MSG_FETCH_CANCEL, decodeFetchCancelPayload],
1084
+ [MSG_TRACK_STATUS, decodeTrackStatusPayload],
1085
+ [MSG_TRACK_STATUS_OK, decodeTrackStatusOkPayload],
1086
+ [MSG_TRACK_STATUS_ERROR, decodeTrackStatusErrorPayload],
1087
+ [MSG_GOAWAY, decodeGoAwayPayload],
1088
+ [MSG_MAX_REQUEST_ID, decodeMaxRequestIdPayload],
1089
+ [MSG_REQUESTS_BLOCKED, decodeRequestsBlockedPayload],
1090
+ ])
1091
+
1092
+ // ─── Public API ────────────────────────────────────────────────────────────────
1093
+
1094
+ /**
1095
+ * Encode a draft-14 control message with type(varint) + length(uint16 BE) + payload.
1096
+ */
1097
+ export function encodeMessage(message: Draft14Message): Uint8Array {
1098
+ const typeId = MESSAGE_ID_MAP.get(message.type)
1099
+ if (typeId === undefined) {
1100
+ throw new Error(`Unknown message type: ${message.type}`)
1101
+ }
1102
+
1103
+ // Encode payload into a separate buffer
1104
+ const payloadWriter = new BufferWriter()
1105
+ encodePayload(message, payloadWriter)
1106
+ const payload = payloadWriter.finishView()
1107
+
1108
+ if (payload.byteLength > 0xffff) {
1109
+ throw new Error(`Payload too large for 16-bit length: ${payload.byteLength}`)
1110
+ }
1111
+
1112
+ // Write framed message: type(varint) + length(uint16 BE) + payload
1113
+ const writer = new BufferWriter(payload.byteLength + 16)
1114
+ writer.writeVarInt(typeId)
1115
+ writer.writeUint8((payload.byteLength >> 8) & 0xff)
1116
+ writer.writeUint8(payload.byteLength & 0xff)
1117
+ writer.writeBytes(payload)
1118
+
1119
+ return writer.finish()
1120
+ }
1121
+
1122
+ function encodePayload(msg: Draft14Message, w: BufferWriter): void {
1123
+ switch (msg.type) {
1124
+ case 'client_setup':
1125
+ return encodeClientSetupPayload(msg, w)
1126
+ case 'server_setup':
1127
+ return encodeServerSetupPayload(msg, w)
1128
+ case 'subscribe':
1129
+ return encodeSubscribePayload(msg, w)
1130
+ case 'subscribe_ok':
1131
+ return encodeSubscribeOkPayload(msg, w)
1132
+ case 'subscribe_update':
1133
+ return encodeSubscribeUpdatePayload(msg, w)
1134
+ case 'subscribe_error':
1135
+ return encodeSubscribeErrorPayload(msg, w)
1136
+ case 'unsubscribe':
1137
+ return encodeUnsubscribePayload(msg, w)
1138
+ case 'publish':
1139
+ return encodePublishPayload(msg, w)
1140
+ case 'publish_ok':
1141
+ return encodePublishOkPayload(msg, w)
1142
+ case 'publish_error':
1143
+ return encodePublishErrorPayload(msg, w)
1144
+ case 'publish_done':
1145
+ return encodePublishDonePayload(msg, w)
1146
+ case 'publish_namespace':
1147
+ return encodePublishNamespacePayload(msg, w)
1148
+ case 'publish_namespace_ok':
1149
+ return encodePublishNamespaceOkPayload(msg, w)
1150
+ case 'publish_namespace_error':
1151
+ return encodePublishNamespaceErrorPayload(msg, w)
1152
+ case 'publish_namespace_done':
1153
+ return encodePublishNamespaceDonePayload(msg, w)
1154
+ case 'publish_namespace_cancel':
1155
+ return encodePublishNamespaceCancelPayload(msg, w)
1156
+ case 'subscribe_namespace':
1157
+ return encodeSubscribeNamespacePayload(msg, w)
1158
+ case 'subscribe_namespace_ok':
1159
+ return encodeSubscribeNamespaceOkPayload(msg, w)
1160
+ case 'subscribe_namespace_error':
1161
+ return encodeSubscribeNamespaceErrorPayload(msg, w)
1162
+ case 'unsubscribe_namespace':
1163
+ return encodeUnsubscribeNamespacePayload(msg, w)
1164
+ case 'fetch':
1165
+ return encodeFetchPayload(msg, w)
1166
+ case 'fetch_ok':
1167
+ return encodeFetchOkPayload(msg, w)
1168
+ case 'fetch_error':
1169
+ return encodeFetchErrorPayload(msg, w)
1170
+ case 'fetch_cancel':
1171
+ return encodeFetchCancelPayload(msg, w)
1172
+ case 'track_status':
1173
+ return encodeTrackStatusPayload(msg, w)
1174
+ case 'track_status_ok':
1175
+ return encodeTrackStatusOkPayload(msg, w)
1176
+ case 'track_status_error':
1177
+ return encodeTrackStatusErrorPayload(msg, w)
1178
+ case 'goaway':
1179
+ return encodeGoAwayPayload(msg, w)
1180
+ case 'max_request_id':
1181
+ return encodeMaxRequestIdPayload(msg, w)
1182
+ case 'requests_blocked':
1183
+ return encodeRequestsBlockedPayload(msg, w)
1184
+ default: {
1185
+ const _exhaustive: never = msg
1186
+ throw new Error(`Unhandled message type: ${(_exhaustive as Draft14Message).type}`)
1187
+ }
1188
+ }
1189
+ }
1190
+
1191
+ /**
1192
+ * Decode a draft-14 control message from bytes (type + uint16 length + payload).
1193
+ */
1194
+ export function decodeMessage(bytes: Uint8Array): DecodeResult<Draft14Message> {
1195
+ try {
1196
+ const reader = new BufferReader(bytes)
1197
+ const typeId = reader.readVarInt()
1198
+
1199
+ // Read 16-bit big-endian payload length
1200
+ const lenHi = reader.readUint8()
1201
+ const lenLo = reader.readUint8()
1202
+ const payloadLength = (lenHi << 8) | lenLo
1203
+
1204
+ // Read exactly payloadLength bytes
1205
+ const payloadBytes = reader.readBytes(payloadLength)
1206
+ const payloadReader = new BufferReader(payloadBytes)
1207
+
1208
+ const decoder = payloadDecoders.get(typeId)
1209
+ if (!decoder) {
1210
+ return {
1211
+ ok: false,
1212
+ error: new DecodeError(
1213
+ 'UNKNOWN_MESSAGE_TYPE',
1214
+ `Unknown message type ID: 0x${typeId.toString(16)}`,
1215
+ 0,
1216
+ ),
1217
+ }
1218
+ }
1219
+
1220
+ const message = decoder(payloadReader)
1221
+ return { ok: true, value: message, bytesRead: reader.offset }
1222
+ } catch (e) {
1223
+ if (e instanceof DecodeError) {
1224
+ return { ok: false, error: e }
1225
+ }
1226
+ throw e
1227
+ }
1228
+ }
1229
+
1230
+ // ─── Data Stream Re-exports ───────────────────────────────────────���───────────
1231
+
1232
+ import {
1233
+ createDataStreamDecoder,
1234
+ createFetchStreamDecoder,
1235
+ createSubgroupStreamDecoder,
1236
+ decodeDatagram,
1237
+ decodeDataStream,
1238
+ decodeFetchStream,
1239
+ decodeSubgroupStream,
1240
+ encodeDatagram,
1241
+ encodeFetchStream,
1242
+ encodeSubgroupStream,
1243
+ } from './data-streams.js'
1244
+
1245
+ export {
1246
+ createDataStreamDecoder,
1247
+ createFetchStreamDecoder,
1248
+ createSubgroupStreamDecoder,
1249
+ decodeDatagram,
1250
+ decodeDataStream,
1251
+ decodeFetchStream,
1252
+ decodeSubgroupStream,
1253
+ encodeDatagram,
1254
+ encodeFetchStream,
1255
+ encodeSubgroupStream,
1256
+ }
1257
+
1258
+ // ─── Stream Decoders ───────────────────────────────────────────────────────────
1259
+
1260
+ /**
1261
+ * Create a TransformStream that decodes a continuous byte stream (e.g. the
1262
+ * WebTransport bidirectional control stream) into individual Draft14Message
1263
+ * objects. Uses the varint(type) + uint16_BE(length) + payload framing.
1264
+ */
1265
+ export function createStreamDecoder(): TransformStream<Uint8Array, Draft14Message> {
1266
+ let buffer = new Uint8Array(0)
1267
+ let offset = 0
1268
+
1269
+ return new TransformStream<Uint8Array, Draft14Message>({
1270
+ transform(chunk, controller) {
1271
+ // Compact before accumulating new data
1272
+ if (offset > 0) {
1273
+ buffer = buffer.subarray(offset)
1274
+ offset = 0
1275
+ }
1276
+ const newBuffer = new Uint8Array(buffer.length + chunk.length)
1277
+ newBuffer.set(buffer, 0)
1278
+ newBuffer.set(chunk, buffer.length)
1279
+ buffer = newBuffer
1280
+
1281
+ // Try to decode messages from the buffer
1282
+ while (offset < buffer.length) {
1283
+ const result = decodeMessage(buffer.subarray(offset))
1284
+ if (!result.ok) {
1285
+ if (result.error.code === 'UNEXPECTED_END') {
1286
+ // Need more data -- wait for next chunk
1287
+ break
1288
+ }
1289
+ // Fatal decode error
1290
+ controller.error(result.error)
1291
+ return
1292
+ }
1293
+ controller.enqueue(result.value)
1294
+ // Advance offset past the consumed bytes
1295
+ offset += result.bytesRead
1296
+ }
1297
+ },
1298
+
1299
+ flush(controller) {
1300
+ // If there is remaining data in the buffer, it is a truncated message
1301
+ if (offset < buffer.length) {
1302
+ controller.error(
1303
+ new DecodeError('UNEXPECTED_END', 'Stream ended with incomplete message data', 0),
1304
+ )
1305
+ }
1306
+ },
1307
+ })
1308
+ }
1309
+
1310
+ // ─── Codec Factory ─────────────────────────────────────────────────────────────
1311
+
1312
+ export interface Draft14Codec extends BaseCodec<Draft14Message> {
1313
+ readonly draft: '14'
1314
+ encodeSubgroupStream(stream: SubgroupStream): Uint8Array
1315
+ encodeDatagram(dg: DatagramObject): Uint8Array
1316
+ encodeFetchStream(stream: FetchStream): Uint8Array
1317
+ decodeSubgroupStream(bytes: Uint8Array): DecodeResult<SubgroupStream>
1318
+ decodeDatagram(bytes: Uint8Array): DecodeResult<DatagramObject>
1319
+ decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream>
1320
+ decodeDataStream(
1321
+ streamType: 'subgroup' | 'datagram' | 'fetch',
1322
+ bytes: Uint8Array,
1323
+ ): DecodeResult<Draft14DataStream>
1324
+ createStreamDecoder(): TransformStream<Uint8Array, Draft14Message>
1325
+ createSubgroupStreamDecoder(): TransformStream<Uint8Array, SubgroupStreamHeader | ObjectPayload>
1326
+ createFetchStreamDecoder(): TransformStream<Uint8Array, FetchStreamHeader | ObjectPayload>
1327
+ createDataStreamDecoder(): TransformStream<Uint8Array, DataStreamEvent>
1328
+ }
1329
+
1330
+ export function createDraft14Codec(): Draft14Codec {
1331
+ return {
1332
+ draft: '14',
1333
+ encodeMessage,
1334
+ decodeMessage,
1335
+ encodeSubgroupStream,
1336
+ encodeDatagram,
1337
+ encodeFetchStream,
1338
+ decodeSubgroupStream,
1339
+ decodeDatagram,
1340
+ decodeFetchStream,
1341
+ decodeDataStream,
1342
+ createStreamDecoder,
1343
+ createSubgroupStreamDecoder,
1344
+ createFetchStreamDecoder,
1345
+ createDataStreamDecoder,
1346
+ }
1347
+ }