@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,1113 +1,1178 @@
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_ANNOUNCE,
9
- MSG_ANNOUNCE_CANCEL,
10
- MSG_ANNOUNCE_ERROR,
11
- MSG_ANNOUNCE_OK,
12
- MSG_CLIENT_SETUP,
13
- MSG_FETCH,
14
- MSG_FETCH_CANCEL,
15
- MSG_FETCH_ERROR,
16
- MSG_FETCH_OK,
17
- MSG_GOAWAY,
18
- MSG_MAX_REQUEST_ID,
19
- MSG_PUBLISH,
20
- MSG_PUBLISH_ERROR,
21
- MSG_PUBLISH_OK,
22
- MSG_REQUESTS_BLOCKED,
23
- MSG_SERVER_SETUP,
24
- MSG_SUBSCRIBE,
25
- MSG_SUBSCRIBE_ANNOUNCES,
26
- MSG_SUBSCRIBE_ANNOUNCES_ERROR,
27
- MSG_SUBSCRIBE_ANNOUNCES_OK,
28
- MSG_SUBSCRIBE_DONE,
29
- MSG_SUBSCRIBE_ERROR,
30
- MSG_SUBSCRIBE_OK,
31
- MSG_SUBSCRIBE_UPDATE,
32
- MSG_TRACK_STATUS,
33
- MSG_TRACK_STATUS_REQUEST,
34
- MSG_UNANNOUNCE,
35
- MSG_UNSUBSCRIBE,
36
- MSG_UNSUBSCRIBE_ANNOUNCES,
37
- PARAM_AUTHORIZATION_TOKEN,
38
- PARAM_DELIVERY_TIMEOUT,
39
- SETUP_PARAM_MAX_REQUEST_ID,
40
- SETUP_PARAM_PATH,
41
- } from "./messages.js";
42
- import type {
43
- DatagramObject,
44
- Draft12DataStream,
45
- Draft12Fetch,
46
- Draft12Message,
47
- Draft12Params,
48
- Draft12SetupParams,
49
- FetchObjectPayload,
50
- FetchStream,
51
- JoiningFetch,
52
- LargestLocation,
53
- ObjectPayload,
54
- StandaloneFetch,
55
- SubgroupStream,
56
- UnknownParam,
57
- } from "./types.js";
58
- // ─── Setup Parameter Encoding/Decoding (even/odd convention) ────────────────────
59
-
60
- function encodeSetupParams(params: Draft12SetupParams, w: BufferWriter): void {
61
- let count = 0;
62
- if (params.path !== undefined) count++;
63
- if (params.max_request_id !== undefined) count++;
64
- if (params.unknown) count += params.unknown.length;
65
-
66
- w.writeVarInt(count);
67
-
68
- if (params.path !== undefined) {
69
- w.writeVarInt(SETUP_PARAM_PATH);
70
- const encoded = new TextEncoder().encode(params.path);
71
- w.writeVarInt(encoded.byteLength);
72
- w.writeBytes(encoded);
73
- }
74
- if (params.max_request_id !== undefined) {
75
- w.writeVarInt(SETUP_PARAM_MAX_REQUEST_ID);
76
- w.writeVarInt(params.max_request_id);
77
- }
78
- if (params.unknown) {
79
- for (const u of params.unknown) {
80
- const id = BigInt(u.id);
81
- w.writeVarInt(id);
82
- if (id % 2n === 0n) {
83
- const raw = hexToBytes(u.raw_hex);
84
- const tmpReader = new BufferReader(raw);
85
- w.writeVarInt(tmpReader.readVarInt());
86
- } else {
87
- const raw = hexToBytes(u.raw_hex);
88
- w.writeVarInt(raw.byteLength);
89
- w.writeBytes(raw);
90
- }
91
- }
92
- }
93
- }
94
-
95
- function decodeSetupParams(r: BufferReader): Draft12SetupParams {
96
- const count = Number(r.readVarInt());
97
- const result: Draft12SetupParams = {};
98
- const unknown: UnknownParam[] = [];
99
-
100
- for (let i = 0; i < count; i++) {
101
- const paramType = r.readVarInt();
102
- if (paramType % 2n === 0n) {
103
- const value = r.readVarInt();
104
- if (paramType === SETUP_PARAM_MAX_REQUEST_ID) {
105
- result.max_request_id = value;
106
- } else {
107
- const tmpW = new BufferWriter(16);
108
- tmpW.writeVarInt(value);
109
- const raw = tmpW.finish();
110
- unknown.push({
111
- id: `0x${paramType.toString(16)}`,
112
- length: raw.byteLength,
113
- raw_hex: bytesToHex(raw),
114
- });
115
- }
116
- } else {
117
- const length = Number(r.readVarInt());
118
- const bytes = r.readBytes(length);
119
- if (paramType === SETUP_PARAM_PATH) {
120
- result.path = new TextDecoder().decode(bytes);
121
- } else {
122
- unknown.push({ id: `0x${paramType.toString(16)}`, length, raw_hex: bytesToHex(bytes) });
123
- }
124
- }
125
- }
126
-
127
- if (unknown.length > 0) result.unknown = unknown;
128
- return result;
129
- }
130
-
131
- // ─── Version-Specific Parameter Encoding/Decoding ───────────────────────────────
132
- // Uses even/odd convention: even type → bare varint value, odd type → length-prefixed blob
133
-
134
- function encodeParams(params: Draft12Params, w: BufferWriter): void {
135
- let count = params.unknown ? params.unknown.length : 0;
136
- if (params.authorization_token !== undefined) count++;
137
- if (params.delivery_timeout !== undefined) count++;
138
- w.writeVarInt(count);
139
-
140
- if (params.authorization_token !== undefined) {
141
- // AUTHORIZATION_TOKEN = 0x01 (odd → length-prefixed)
142
- w.writeVarInt(PARAM_AUTHORIZATION_TOKEN);
143
- const at = params.authorization_token;
144
- const tmpW = new BufferWriter(64);
145
- tmpW.writeVarInt(at.alias_type);
146
- tmpW.writeVarInt(at.token_type);
147
- const tokenBytes = new TextEncoder().encode(at.token_value);
148
- tmpW.writeBytes(tokenBytes);
149
- const raw = tmpW.finish();
150
- w.writeVarInt(raw.byteLength);
151
- w.writeBytes(raw);
152
- }
153
- if (params.delivery_timeout !== undefined) {
154
- // DELIVERY_TIMEOUT = 0x03 (odd length-prefixed varint)
155
- w.writeVarInt(PARAM_DELIVERY_TIMEOUT);
156
- const tmpW = new BufferWriter(16);
157
- tmpW.writeVarInt(params.delivery_timeout);
158
- const raw = tmpW.finish();
159
- w.writeVarInt(raw.byteLength);
160
- w.writeBytes(raw);
161
- }
162
- if (params.unknown) {
163
- for (const u of params.unknown) {
164
- const id = BigInt(u.id);
165
- w.writeVarInt(id);
166
- if (id % 2n === 0n) {
167
- // Even → bare varint
168
- const raw = hexToBytes(u.raw_hex);
169
- const tmpReader = new BufferReader(raw);
170
- w.writeVarInt(tmpReader.readVarInt());
171
- } else {
172
- // Odd → length-prefixed
173
- const raw = hexToBytes(u.raw_hex);
174
- w.writeVarInt(raw.byteLength);
175
- w.writeBytes(raw);
176
- }
177
- }
178
- }
179
- }
180
-
181
- function decodeParams(r: BufferReader): Draft12Params {
182
- const count = Number(r.readVarInt());
183
- const result: Draft12Params = {};
184
- const unknown: UnknownParam[] = [];
185
-
186
- for (let i = 0; i < count; i++) {
187
- const paramType = r.readVarInt();
188
-
189
- if (paramType % 2n === 0n) {
190
- // Even type bare varint value
191
- const value = r.readVarInt();
192
- const tmpW = new BufferWriter(16);
193
- tmpW.writeVarInt(value);
194
- const raw = tmpW.finish();
195
- unknown.push({
196
- id: `0x${paramType.toString(16)}`,
197
- length: raw.byteLength,
198
- raw_hex: bytesToHex(raw),
199
- });
200
- } else {
201
- // Odd type length-prefixed blob
202
- const length = Number(r.readVarInt());
203
- const startOff = r.offset;
204
-
205
- if (paramType === PARAM_AUTHORIZATION_TOKEN) {
206
- const alias_type = r.readVarInt();
207
- const token_type = r.readVarInt();
208
- const tokenBytesLen = length - (r.offset - startOff);
209
- const tokenBytes = r.readBytes(tokenBytesLen);
210
- result.authorization_token = {
211
- alias_type,
212
- token_type,
213
- token_value: new TextDecoder().decode(tokenBytes),
214
- };
215
- } else if (paramType === PARAM_DELIVERY_TIMEOUT) {
216
- const blob = r.readBytes(length);
217
- const tmpReader = new BufferReader(blob);
218
- result.delivery_timeout = tmpReader.readVarInt();
219
- } else {
220
- const bytes = r.readBytes(length);
221
- unknown.push({ id: `0x${paramType.toString(16)}`, length, raw_hex: bytesToHex(bytes) });
222
- }
223
- }
224
- }
225
-
226
- if (unknown.length > 0) result.unknown = unknown;
227
- return result;
228
- }
229
-
230
- // ─── Payload Encoders ──────────────────────────────────────────────────────────
231
-
232
- function encodeClientSetupPayload(
233
- msg: Draft12Message & { type: "client_setup" },
234
- w: BufferWriter,
235
- ): void {
236
- w.writeVarInt(msg.supported_versions.length);
237
- for (const v of msg.supported_versions) w.writeVarInt(v);
238
- encodeSetupParams(msg.parameters, w);
239
- }
240
-
241
- function encodeServerSetupPayload(
242
- msg: Draft12Message & { type: "server_setup" },
243
- w: BufferWriter,
244
- ): void {
245
- w.writeVarInt(msg.selected_version);
246
- encodeSetupParams(msg.parameters, w);
247
- }
248
-
249
- function encodeSubscribePayload(
250
- msg: Draft12Message & { type: "subscribe" },
251
- w: BufferWriter,
252
- ): void {
253
- w.writeVarInt(msg.request_id);
254
- // Draft-12: no track_alias in subscribe (moved to subscribe_ok)
255
- w.writeTuple(msg.track_namespace);
256
- w.writeString(msg.track_name);
257
- w.writeUint8(msg.subscriber_priority);
258
- w.writeVarInt(msg.group_order);
259
- w.writeVarInt(msg.forward);
260
- w.writeVarInt(msg.filter_type);
261
- const ft = Number(msg.filter_type);
262
- if (ft === 3 || ft === 4) {
263
- w.writeVarInt(msg.start_group!);
264
- w.writeVarInt(msg.start_object!);
265
- }
266
- if (ft === 4) {
267
- w.writeVarInt(msg.end_group!);
268
- }
269
- encodeParams(msg.parameters, w);
270
- }
271
-
272
- function encodeSubscribeOkPayload(
273
- msg: Draft12Message & { type: "subscribe_ok" },
274
- w: BufferWriter,
275
- ): void {
276
- w.writeVarInt(msg.request_id);
277
- w.writeVarInt(msg.track_alias);
278
- w.writeVarInt(msg.expires);
279
- w.writeVarInt(msg.group_order);
280
- w.writeVarInt(msg.content_exists);
281
- if (msg.content_exists === 1n && msg.largest_location) {
282
- w.writeVarInt(msg.largest_location.group);
283
- w.writeVarInt(msg.largest_location.object);
284
- }
285
- encodeParams(msg.parameters, w);
286
- }
287
-
288
- function encodeSubscribeErrorPayload(
289
- msg: Draft12Message & { type: "subscribe_error" },
290
- w: BufferWriter,
291
- ): void {
292
- w.writeVarInt(msg.request_id);
293
- w.writeVarInt(msg.error_code);
294
- w.writeString(msg.reason_phrase);
295
- // Draft-12: no track_alias in subscribe_error
296
- }
297
-
298
- function encodeSubscribeUpdatePayload(
299
- msg: Draft12Message & { type: "subscribe_update" },
300
- w: BufferWriter,
301
- ): void {
302
- w.writeVarInt(msg.request_id);
303
- w.writeVarInt(msg.start_group);
304
- w.writeVarInt(msg.start_object);
305
- w.writeVarInt(msg.end_group);
306
- w.writeUint8(msg.subscriber_priority);
307
- w.writeVarInt(msg.forward);
308
- encodeParams(msg.parameters, w);
309
- }
310
-
311
- function encodeSubscribeDonePayload(
312
- msg: Draft12Message & { type: "subscribe_done" },
313
- w: BufferWriter,
314
- ): void {
315
- w.writeVarInt(msg.request_id);
316
- w.writeVarInt(msg.status_code);
317
- w.writeVarInt(msg.stream_count);
318
- w.writeString(msg.reason_phrase);
319
- }
320
-
321
- function encodeUnsubscribePayload(
322
- msg: Draft12Message & { type: "unsubscribe" },
323
- w: BufferWriter,
324
- ): void {
325
- w.writeVarInt(msg.request_id);
326
- }
327
-
328
- function encodeAnnouncePayload(msg: Draft12Message & { type: "announce" }, w: BufferWriter): void {
329
- w.writeVarInt(msg.request_id);
330
- w.writeTuple(msg.track_namespace);
331
- encodeParams(msg.parameters, w);
332
- }
333
-
334
- function encodeAnnounceOkPayload(
335
- msg: Draft12Message & { type: "announce_ok" },
336
- w: BufferWriter,
337
- ): void {
338
- w.writeVarInt(msg.request_id);
339
- }
340
-
341
- function encodeAnnounceErrorPayload(
342
- msg: Draft12Message & { type: "announce_error" },
343
- w: BufferWriter,
344
- ): void {
345
- w.writeVarInt(msg.request_id);
346
- w.writeVarInt(msg.error_code);
347
- w.writeString(msg.reason_phrase);
348
- }
349
-
350
- function encodeUnannouncePayload(
351
- msg: Draft12Message & { type: "unannounce" },
352
- w: BufferWriter,
353
- ): void {
354
- w.writeTuple(msg.track_namespace);
355
- }
356
-
357
- function encodeAnnounceCancelPayload(
358
- msg: Draft12Message & { type: "announce_cancel" },
359
- w: BufferWriter,
360
- ): void {
361
- w.writeTuple(msg.track_namespace);
362
- w.writeVarInt(msg.error_code);
363
- w.writeString(msg.reason_phrase);
364
- }
365
-
366
- function encodeSubscribeAnnouncesPayload(
367
- msg: Draft12Message & { type: "subscribe_announces" },
368
- w: BufferWriter,
369
- ): void {
370
- w.writeVarInt(msg.request_id);
371
- w.writeTuple(msg.track_namespace_prefix);
372
- encodeParams(msg.parameters, w);
373
- }
374
-
375
- function encodeSubscribeAnnouncesOkPayload(
376
- msg: Draft12Message & { type: "subscribe_announces_ok" },
377
- w: BufferWriter,
378
- ): void {
379
- w.writeVarInt(msg.request_id);
380
- }
381
-
382
- function encodeSubscribeAnnouncesErrorPayload(
383
- msg: Draft12Message & { type: "subscribe_announces_error" },
384
- w: BufferWriter,
385
- ): void {
386
- w.writeVarInt(msg.request_id);
387
- w.writeVarInt(msg.error_code);
388
- w.writeString(msg.reason_phrase);
389
- }
390
-
391
- function encodeUnsubscribeAnnouncesPayload(
392
- msg: Draft12Message & { type: "unsubscribe_announces" },
393
- w: BufferWriter,
394
- ): void {
395
- w.writeTuple(msg.track_namespace_prefix);
396
- }
397
-
398
- function encodePublishPayload(msg: Draft12Message & { type: "publish" }, w: BufferWriter): void {
399
- w.writeVarInt(msg.request_id);
400
- w.writeTuple(msg.track_namespace);
401
- w.writeString(msg.track_name);
402
- w.writeVarInt(msg.track_alias);
403
- w.writeVarInt(msg.group_order);
404
- w.writeVarInt(msg.content_exists);
405
- if (msg.content_exists === 1n && msg.largest_location) {
406
- w.writeVarInt(msg.largest_location.group);
407
- w.writeVarInt(msg.largest_location.object);
408
- }
409
- w.writeVarInt(msg.forward);
410
- encodeParams(msg.parameters, w);
411
- }
412
-
413
- function encodePublishOkPayload(
414
- msg: Draft12Message & { type: "publish_ok" },
415
- w: BufferWriter,
416
- ): void {
417
- w.writeVarInt(msg.request_id);
418
- w.writeVarInt(msg.forward);
419
- w.writeUint8(msg.subscriber_priority);
420
- w.writeVarInt(msg.group_order);
421
- w.writeVarInt(msg.filter_type);
422
- const ft = Number(msg.filter_type);
423
- if (ft === 3 || ft === 4) {
424
- w.writeVarInt(msg.start_group!);
425
- w.writeVarInt(msg.start_object!);
426
- }
427
- if (ft === 4) {
428
- w.writeVarInt(msg.end_group!);
429
- }
430
- encodeParams(msg.parameters, w);
431
- }
432
-
433
- function encodePublishErrorPayload(
434
- msg: Draft12Message & { type: "publish_error" },
435
- w: BufferWriter,
436
- ): void {
437
- w.writeVarInt(msg.request_id);
438
- w.writeVarInt(msg.error_code);
439
- w.writeString(msg.reason_phrase);
440
- }
441
-
442
- function encodeFetchPayload(msg: Draft12Message & { type: "fetch" }, w: BufferWriter): void {
443
- w.writeVarInt(msg.request_id);
444
- w.writeUint8(msg.subscriber_priority);
445
- w.writeVarInt(msg.group_order);
446
- w.writeVarInt(msg.fetch_type);
447
- const ft = Number(msg.fetch_type);
448
- if (ft === 1 && msg.standalone) {
449
- w.writeTuple(msg.standalone.track_namespace);
450
- w.writeString(msg.standalone.track_name);
451
- w.writeVarInt(msg.standalone.start_group);
452
- w.writeVarInt(msg.standalone.start_object);
453
- w.writeVarInt(msg.standalone.end_group);
454
- w.writeVarInt(msg.standalone.end_object);
455
- } else if ((ft === 2 || ft === 3) && msg.joining) {
456
- w.writeVarInt(msg.joining.joining_subscribe_id);
457
- w.writeVarInt(msg.joining.joining_start);
458
- }
459
- encodeParams(msg.parameters, w);
460
- }
461
-
462
- function encodeFetchOkPayload(msg: Draft12Message & { type: "fetch_ok" }, w: BufferWriter): void {
463
- w.writeVarInt(msg.request_id);
464
- w.writeVarInt(msg.group_order);
465
- w.writeVarInt(msg.end_of_track);
466
- w.writeVarInt(msg.end_location.group);
467
- w.writeVarInt(msg.end_location.object);
468
- encodeParams(msg.parameters, w);
469
- }
470
-
471
- function encodeFetchErrorPayload(
472
- msg: Draft12Message & { type: "fetch_error" },
473
- w: BufferWriter,
474
- ): void {
475
- w.writeVarInt(msg.request_id);
476
- w.writeVarInt(msg.error_code);
477
- w.writeString(msg.reason_phrase);
478
- }
479
-
480
- function encodeFetchCancelPayload(
481
- msg: Draft12Message & { type: "fetch_cancel" },
482
- w: BufferWriter,
483
- ): void {
484
- w.writeVarInt(msg.request_id);
485
- }
486
-
487
- function encodeTrackStatusRequestPayload(
488
- msg: Draft12Message & { type: "track_status_request" },
489
- w: BufferWriter,
490
- ): void {
491
- w.writeVarInt(msg.request_id);
492
- w.writeTuple(msg.track_namespace);
493
- w.writeString(msg.track_name);
494
- encodeParams(msg.parameters, w);
495
- }
496
-
497
- function encodeTrackStatusPayload(
498
- msg: Draft12Message & { type: "track_status" },
499
- w: BufferWriter,
500
- ): void {
501
- w.writeVarInt(msg.request_id);
502
- w.writeVarInt(msg.status_code);
503
- w.writeVarInt(msg.largest_location.group);
504
- w.writeVarInt(msg.largest_location.object);
505
- encodeParams(msg.parameters, w);
506
- }
507
-
508
- function encodeGoAwayPayload(msg: Draft12Message & { type: "goaway" }, w: BufferWriter): void {
509
- w.writeString(msg.new_session_uri);
510
- }
511
-
512
- function encodeMaxRequestIdPayload(
513
- msg: Draft12Message & { type: "max_request_id" },
514
- w: BufferWriter,
515
- ): void {
516
- w.writeVarInt(msg.request_id);
517
- }
518
-
519
- function encodeRequestsBlockedPayload(
520
- msg: Draft12Message & { type: "requests_blocked" },
521
- w: BufferWriter,
522
- ): void {
523
- w.writeVarInt(msg.maximum_request_id);
524
- }
525
-
526
- // ─── Payload Decoders ──────────────────────────────────────────────────────────
527
-
528
- function decodeClientSetupPayload(r: BufferReader): Draft12Message {
529
- const numVersions = Number(r.readVarInt());
530
- if (numVersions === 0) {
531
- throw new DecodeError("CONSTRAINT_VIOLATION", "supported_versions must not be empty", r.offset);
532
- }
533
- const supported_versions: bigint[] = [];
534
- for (let i = 0; i < numVersions; i++) supported_versions.push(r.readVarInt());
535
- const parameters = decodeSetupParams(r);
536
- return { type: "client_setup", supported_versions, parameters };
537
- }
538
-
539
- function decodeServerSetupPayload(r: BufferReader): Draft12Message {
540
- const selected_version = r.readVarInt();
541
- const parameters = decodeSetupParams(r);
542
- return { type: "server_setup", selected_version, parameters };
543
- }
544
-
545
- function decodeSubscribePayload(r: BufferReader): Draft12Message {
546
- const request_id = r.readVarInt();
547
- // Draft-12: no track_alias in subscribe
548
- const track_namespace = r.readTuple();
549
- const track_name = r.readString();
550
- const subscriber_priority = r.readUint8();
551
- const group_order = r.readVarInt();
552
- const forward = r.readVarInt();
553
- const filter_type = r.readVarInt();
554
- const ft = Number(filter_type);
555
- if (ft < 1 || ft > 4) {
556
- throw new DecodeError("CONSTRAINT_VIOLATION", `Invalid filter_type: ${ft}`, r.offset);
557
- }
558
- let start_group: bigint | undefined;
559
- let start_object: bigint | undefined;
560
- let end_group: bigint | undefined;
561
- if (ft === 3 || ft === 4) {
562
- start_group = r.readVarInt();
563
- start_object = r.readVarInt();
564
- }
565
- if (ft === 4) {
566
- end_group = r.readVarInt();
567
- }
568
- const parameters = decodeParams(r);
569
- const msg: Record<string, unknown> = {
570
- type: "subscribe",
571
- request_id,
572
- track_namespace,
573
- track_name,
574
- subscriber_priority,
575
- group_order,
576
- forward,
577
- filter_type,
578
- parameters,
579
- };
580
- if (start_group !== undefined) msg.start_group = start_group;
581
- if (start_object !== undefined) msg.start_object = start_object;
582
- if (end_group !== undefined) msg.end_group = end_group;
583
- return msg as unknown as Draft12Message;
584
- }
585
-
586
- function decodeSubscribeOkPayload(r: BufferReader): Draft12Message {
587
- const request_id = r.readVarInt();
588
- const track_alias = r.readVarInt();
589
- const expires = r.readVarInt();
590
- const group_order = r.readVarInt();
591
- const content_exists = r.readVarInt();
592
- let largest_location: LargestLocation | undefined;
593
- if (content_exists === 1n) {
594
- const group = r.readVarInt();
595
- const object = r.readVarInt();
596
- largest_location = { group, object };
597
- }
598
- const parameters = decodeParams(r);
599
- const msg: Record<string, unknown> = {
600
- type: "subscribe_ok",
601
- request_id,
602
- track_alias,
603
- expires,
604
- group_order,
605
- content_exists,
606
- parameters,
607
- };
608
- if (largest_location) msg.largest_location = largest_location;
609
- return msg as unknown as Draft12Message;
610
- }
611
-
612
- function decodeSubscribeErrorPayload(r: BufferReader): Draft12Message {
613
- const request_id = r.readVarInt();
614
- const error_code = r.readVarInt();
615
- const reason_phrase = r.readString();
616
- // Draft-12: no track_alias in subscribe_error
617
- return { type: "subscribe_error", request_id, error_code, reason_phrase };
618
- }
619
-
620
- function decodeSubscribeUpdatePayload(r: BufferReader): Draft12Message {
621
- const request_id = r.readVarInt();
622
- const start_group = r.readVarInt();
623
- const start_object = r.readVarInt();
624
- const end_group = r.readVarInt();
625
- const subscriber_priority = r.readUint8();
626
- const forward = r.readVarInt();
627
- const parameters = decodeParams(r);
628
- return {
629
- type: "subscribe_update",
630
- request_id,
631
- start_group,
632
- start_object,
633
- end_group,
634
- subscriber_priority,
635
- forward,
636
- parameters,
637
- };
638
- }
639
-
640
- function decodeSubscribeDonePayload(r: BufferReader): Draft12Message {
641
- const request_id = r.readVarInt();
642
- const status_code = r.readVarInt();
643
- const stream_count = r.readVarInt();
644
- const reason_phrase = r.readString();
645
- return { type: "subscribe_done", request_id, status_code, stream_count, reason_phrase };
646
- }
647
-
648
- function decodeUnsubscribePayload(r: BufferReader): Draft12Message {
649
- const request_id = r.readVarInt();
650
- return { type: "unsubscribe", request_id };
651
- }
652
-
653
- function decodeAnnouncePayload(r: BufferReader): Draft12Message {
654
- const request_id = r.readVarInt();
655
- const track_namespace = r.readTuple();
656
- const parameters = decodeParams(r);
657
- return { type: "announce", request_id, track_namespace, parameters };
658
- }
659
-
660
- function decodeAnnounceOkPayload(r: BufferReader): Draft12Message {
661
- const request_id = r.readVarInt();
662
- return { type: "announce_ok", request_id };
663
- }
664
-
665
- function decodeAnnounceErrorPayload(r: BufferReader): Draft12Message {
666
- const request_id = r.readVarInt();
667
- const error_code = r.readVarInt();
668
- const reason_phrase = r.readString();
669
- return { type: "announce_error", request_id, error_code, reason_phrase };
670
- }
671
-
672
- function decodeUnannouncePayload(r: BufferReader): Draft12Message {
673
- const track_namespace = r.readTuple();
674
- return { type: "unannounce", track_namespace };
675
- }
676
-
677
- function decodeAnnounceCancelPayload(r: BufferReader): Draft12Message {
678
- const track_namespace = r.readTuple();
679
- const error_code = r.readVarInt();
680
- const reason_phrase = r.readString();
681
- return { type: "announce_cancel", track_namespace, error_code, reason_phrase };
682
- }
683
-
684
- function decodeSubscribeAnnouncesPayload(r: BufferReader): Draft12Message {
685
- const request_id = r.readVarInt();
686
- const track_namespace_prefix = r.readTuple();
687
- const parameters = decodeParams(r);
688
- return { type: "subscribe_announces", request_id, track_namespace_prefix, parameters };
689
- }
690
-
691
- function decodeSubscribeAnnouncesOkPayload(r: BufferReader): Draft12Message {
692
- const request_id = r.readVarInt();
693
- return { type: "subscribe_announces_ok", request_id };
694
- }
695
-
696
- function decodeSubscribeAnnouncesErrorPayload(r: BufferReader): Draft12Message {
697
- const request_id = r.readVarInt();
698
- const error_code = r.readVarInt();
699
- const reason_phrase = r.readString();
700
- return { type: "subscribe_announces_error", request_id, error_code, reason_phrase };
701
- }
702
-
703
- function decodeUnsubscribeAnnouncesPayload(r: BufferReader): Draft12Message {
704
- const track_namespace_prefix = r.readTuple();
705
- return { type: "unsubscribe_announces", track_namespace_prefix };
706
- }
707
-
708
- function decodePublishPayload(r: BufferReader): Draft12Message {
709
- const request_id = r.readVarInt();
710
- const track_namespace = r.readTuple();
711
- const track_name = r.readString();
712
- const track_alias = r.readVarInt();
713
- const group_order = r.readVarInt();
714
- const content_exists = r.readVarInt();
715
- let largest_location: LargestLocation | undefined;
716
- if (content_exists === 1n) {
717
- const group = r.readVarInt();
718
- const object = r.readVarInt();
719
- largest_location = { group, object };
720
- }
721
- const forward = r.readVarInt();
722
- const parameters = decodeParams(r);
723
- const msg: Record<string, unknown> = {
724
- type: "publish",
725
- request_id,
726
- track_namespace,
727
- track_name,
728
- track_alias,
729
- group_order,
730
- content_exists,
731
- forward,
732
- parameters,
733
- };
734
- if (largest_location) msg.largest_location = largest_location;
735
- return msg as unknown as Draft12Message;
736
- }
737
-
738
- function decodePublishOkPayload(r: BufferReader): Draft12Message {
739
- const request_id = r.readVarInt();
740
- const forward = r.readVarInt();
741
- const subscriber_priority = r.readUint8();
742
- const group_order = r.readVarInt();
743
- const filter_type = r.readVarInt();
744
- const ft = Number(filter_type);
745
- let start_group: bigint | undefined;
746
- let start_object: bigint | undefined;
747
- let end_group: bigint | undefined;
748
- if (ft === 3 || ft === 4) {
749
- start_group = r.readVarInt();
750
- start_object = r.readVarInt();
751
- }
752
- if (ft === 4) {
753
- end_group = r.readVarInt();
754
- }
755
- const parameters = decodeParams(r);
756
- const msg: Record<string, unknown> = {
757
- type: "publish_ok",
758
- request_id,
759
- forward,
760
- subscriber_priority,
761
- group_order,
762
- filter_type,
763
- parameters,
764
- };
765
- if (start_group !== undefined) msg.start_group = start_group;
766
- if (start_object !== undefined) msg.start_object = start_object;
767
- if (end_group !== undefined) msg.end_group = end_group;
768
- return msg as unknown as Draft12Message;
769
- }
770
-
771
- function decodePublishErrorPayload(r: BufferReader): Draft12Message {
772
- const request_id = r.readVarInt();
773
- const error_code = r.readVarInt();
774
- const reason_phrase = r.readString();
775
- return { type: "publish_error", request_id, error_code, reason_phrase };
776
- }
777
-
778
- function decodeFetchPayload(r: BufferReader): Draft12Message {
779
- const request_id = r.readVarInt();
780
- const subscriber_priority = r.readUint8();
781
- const group_order = r.readVarInt();
782
- const fetch_type = r.readVarInt();
783
- const ft = Number(fetch_type);
784
-
785
- if (ft < 1 || ft > 3) {
786
- throw new DecodeError("CONSTRAINT_VIOLATION", `Invalid fetch_type: ${ft}`, r.offset);
787
- }
788
-
789
- let standalone: StandaloneFetch | undefined;
790
- let joining: JoiningFetch | undefined;
791
-
792
- if (ft === 1) {
793
- const track_namespace = r.readTuple();
794
- const track_name = r.readString();
795
- const start_group = r.readVarInt();
796
- const start_object = r.readVarInt();
797
- const end_group = r.readVarInt();
798
- const end_object = r.readVarInt();
799
- standalone = { track_namespace, track_name, start_group, start_object, end_group, end_object };
800
- } else {
801
- const joining_subscribe_id = r.readVarInt();
802
- const joining_start = r.readVarInt();
803
- joining = { joining_subscribe_id, joining_start };
804
- }
805
-
806
- const parameters = decodeParams(r);
807
- return {
808
- type: "fetch",
809
- request_id,
810
- subscriber_priority,
811
- group_order,
812
- fetch_type,
813
- standalone,
814
- joining,
815
- parameters,
816
- } as Draft12Fetch;
817
- }
818
-
819
- function decodeFetchOkPayload(r: BufferReader): Draft12Message {
820
- const request_id = r.readVarInt();
821
- const group_order = r.readVarInt();
822
- const end_of_track = r.readVarInt();
823
- const group = r.readVarInt();
824
- const object = r.readVarInt();
825
- const parameters = decodeParams(r);
826
- return {
827
- type: "fetch_ok",
828
- request_id,
829
- group_order,
830
- end_of_track,
831
- end_location: { group, object },
832
- parameters,
833
- };
834
- }
835
-
836
- function decodeFetchErrorPayload(r: BufferReader): Draft12Message {
837
- const request_id = r.readVarInt();
838
- const error_code = r.readVarInt();
839
- const reason_phrase = r.readString();
840
- return { type: "fetch_error", request_id, error_code, reason_phrase };
841
- }
842
-
843
- function decodeFetchCancelPayload(r: BufferReader): Draft12Message {
844
- const request_id = r.readVarInt();
845
- return { type: "fetch_cancel", request_id };
846
- }
847
-
848
- function decodeTrackStatusRequestPayload(r: BufferReader): Draft12Message {
849
- const request_id = r.readVarInt();
850
- const track_namespace = r.readTuple();
851
- const track_name = r.readString();
852
- const parameters = decodeParams(r);
853
- return { type: "track_status_request", request_id, track_namespace, track_name, parameters };
854
- }
855
-
856
- function decodeTrackStatusPayload(r: BufferReader): Draft12Message {
857
- const request_id = r.readVarInt();
858
- const status_code = r.readVarInt();
859
- const group = r.readVarInt();
860
- const object = r.readVarInt();
861
- const parameters = decodeParams(r);
862
- return {
863
- type: "track_status",
864
- request_id,
865
- status_code,
866
- largest_location: { group, object },
867
- parameters,
868
- };
869
- }
870
-
871
- function decodeGoAwayPayload(r: BufferReader): Draft12Message {
872
- const new_session_uri = r.readString();
873
- return { type: "goaway", new_session_uri };
874
- }
875
-
876
- function decodeMaxRequestIdPayload(r: BufferReader): Draft12Message {
877
- const request_id = r.readVarInt();
878
- return { type: "max_request_id", request_id };
879
- }
880
-
881
- function decodeRequestsBlockedPayload(r: BufferReader): Draft12Message {
882
- const maximum_request_id = r.readVarInt();
883
- return { type: "requests_blocked", maximum_request_id };
884
- }
885
-
886
- // ─── Payload dispatch tables ───────────────────────────────────────────────────
887
-
888
- const payloadDecoders: ReadonlyMap<bigint, (r: BufferReader) => Draft12Message> = new Map([
889
- [MSG_CLIENT_SETUP, decodeClientSetupPayload],
890
- [MSG_SERVER_SETUP, decodeServerSetupPayload],
891
- [MSG_SUBSCRIBE, decodeSubscribePayload],
892
- [MSG_SUBSCRIBE_OK, decodeSubscribeOkPayload],
893
- [MSG_SUBSCRIBE_ERROR, decodeSubscribeErrorPayload],
894
- [MSG_SUBSCRIBE_UPDATE, decodeSubscribeUpdatePayload],
895
- [MSG_SUBSCRIBE_DONE, decodeSubscribeDonePayload],
896
- [MSG_UNSUBSCRIBE, decodeUnsubscribePayload],
897
- [MSG_ANNOUNCE, decodeAnnouncePayload],
898
- [MSG_ANNOUNCE_OK, decodeAnnounceOkPayload],
899
- [MSG_ANNOUNCE_ERROR, decodeAnnounceErrorPayload],
900
- [MSG_UNANNOUNCE, decodeUnannouncePayload],
901
- [MSG_ANNOUNCE_CANCEL, decodeAnnounceCancelPayload],
902
- [MSG_SUBSCRIBE_ANNOUNCES, decodeSubscribeAnnouncesPayload],
903
- [MSG_SUBSCRIBE_ANNOUNCES_OK, decodeSubscribeAnnouncesOkPayload],
904
- [MSG_SUBSCRIBE_ANNOUNCES_ERROR, decodeSubscribeAnnouncesErrorPayload],
905
- [MSG_UNSUBSCRIBE_ANNOUNCES, decodeUnsubscribeAnnouncesPayload],
906
- [MSG_PUBLISH, decodePublishPayload],
907
- [MSG_PUBLISH_OK, decodePublishOkPayload],
908
- [MSG_PUBLISH_ERROR, decodePublishErrorPayload],
909
- [MSG_FETCH, decodeFetchPayload],
910
- [MSG_FETCH_OK, decodeFetchOkPayload],
911
- [MSG_FETCH_ERROR, decodeFetchErrorPayload],
912
- [MSG_FETCH_CANCEL, decodeFetchCancelPayload],
913
- [MSG_TRACK_STATUS_REQUEST, decodeTrackStatusRequestPayload],
914
- [MSG_TRACK_STATUS, decodeTrackStatusPayload],
915
- [MSG_GOAWAY, decodeGoAwayPayload],
916
- [MSG_MAX_REQUEST_ID, decodeMaxRequestIdPayload],
917
- [MSG_REQUESTS_BLOCKED, decodeRequestsBlockedPayload],
918
- ]);
919
-
920
- // ─── Public API ────────────────────────────────────────────────────────────────
921
-
922
- /**
923
- * Encode a draft-12 control message.
924
- * Most messages use type(varint) + length(uint16 BE) + payload.
925
- * PUBLISH family uses type(varint) + length(varint) + payload.
926
- */
927
- export function encodeMessage(message: Draft12Message): Uint8Array {
928
- const typeId = MESSAGE_ID_MAP.get(message.type);
929
- if (typeId === undefined) throw new Error(`Unknown message type: ${message.type}`);
930
-
931
- const payloadWriter = new BufferWriter();
932
- encodePayload(message, payloadWriter);
933
- const payload = payloadWriter.finish();
934
-
935
- const writer = new BufferWriter();
936
- writer.writeVarInt(typeId);
937
-
938
- if (payload.byteLength > 0xffff) {
939
- throw new Error(`Payload too large for 16-bit length: ${payload.byteLength}`);
940
- }
941
- writer.writeUint8((payload.byteLength >> 8) & 0xff);
942
- writer.writeUint8(payload.byteLength & 0xff);
943
-
944
- writer.writeBytes(payload);
945
- return writer.finish();
946
- }
947
-
948
- function encodePayload(msg: Draft12Message, w: BufferWriter): void {
949
- switch (msg.type) {
950
- case "client_setup":
951
- return encodeClientSetupPayload(msg, w);
952
- case "server_setup":
953
- return encodeServerSetupPayload(msg, w);
954
- case "subscribe":
955
- return encodeSubscribePayload(msg, w);
956
- case "subscribe_ok":
957
- return encodeSubscribeOkPayload(msg, w);
958
- case "subscribe_error":
959
- return encodeSubscribeErrorPayload(msg, w);
960
- case "subscribe_update":
961
- return encodeSubscribeUpdatePayload(msg, w);
962
- case "subscribe_done":
963
- return encodeSubscribeDonePayload(msg, w);
964
- case "unsubscribe":
965
- return encodeUnsubscribePayload(msg, w);
966
- case "announce":
967
- return encodeAnnouncePayload(msg, w);
968
- case "announce_ok":
969
- return encodeAnnounceOkPayload(msg, w);
970
- case "announce_error":
971
- return encodeAnnounceErrorPayload(msg, w);
972
- case "unannounce":
973
- return encodeUnannouncePayload(msg, w);
974
- case "announce_cancel":
975
- return encodeAnnounceCancelPayload(msg, w);
976
- case "subscribe_announces":
977
- return encodeSubscribeAnnouncesPayload(msg, w);
978
- case "subscribe_announces_ok":
979
- return encodeSubscribeAnnouncesOkPayload(msg, w);
980
- case "subscribe_announces_error":
981
- return encodeSubscribeAnnouncesErrorPayload(msg, w);
982
- case "unsubscribe_announces":
983
- return encodeUnsubscribeAnnouncesPayload(msg, w);
984
- case "publish":
985
- return encodePublishPayload(msg, w);
986
- case "publish_ok":
987
- return encodePublishOkPayload(msg, w);
988
- case "publish_error":
989
- return encodePublishErrorPayload(msg, w);
990
- case "fetch":
991
- return encodeFetchPayload(msg, w);
992
- case "fetch_ok":
993
- return encodeFetchOkPayload(msg, w);
994
- case "fetch_error":
995
- return encodeFetchErrorPayload(msg, w);
996
- case "fetch_cancel":
997
- return encodeFetchCancelPayload(msg, w);
998
- case "track_status_request":
999
- return encodeTrackStatusRequestPayload(msg, w);
1000
- case "track_status":
1001
- return encodeTrackStatusPayload(msg, w);
1002
- case "goaway":
1003
- return encodeGoAwayPayload(msg, w);
1004
- case "max_request_id":
1005
- return encodeMaxRequestIdPayload(msg, w);
1006
- case "requests_blocked":
1007
- return encodeRequestsBlockedPayload(msg, w);
1008
- default: {
1009
- const _exhaustive: never = msg;
1010
- throw new Error(`Unhandled message type: ${(_exhaustive as Draft12Message).type}`);
1011
- }
1012
- }
1013
- }
1014
-
1015
- /**
1016
- * Decode a draft-12 control message from bytes.
1017
- */
1018
- export function decodeMessage(bytes: Uint8Array): DecodeResult<Draft12Message> {
1019
- try {
1020
- const reader = new BufferReader(bytes);
1021
- const typeId = reader.readVarInt();
1022
-
1023
- // Read 16-bit big-endian payload length
1024
- const lenHi = reader.readUint8();
1025
- const lenLo = reader.readUint8();
1026
- const payloadLength = (lenHi << 8) | lenLo;
1027
-
1028
- const payloadBytes = reader.readBytes(payloadLength);
1029
- const payloadReader = new BufferReader(payloadBytes);
1030
-
1031
- const decoder = payloadDecoders.get(typeId);
1032
- if (!decoder) {
1033
- return {
1034
- ok: false,
1035
- error: new DecodeError(
1036
- "UNKNOWN_MESSAGE_TYPE",
1037
- `Unknown message type ID: 0x${typeId.toString(16)}`,
1038
- 0,
1039
- ),
1040
- };
1041
- }
1042
-
1043
- const message = decoder(payloadReader);
1044
- return { ok: true, value: message, bytesRead: reader.offset };
1045
- } catch (e) {
1046
- if (e instanceof DecodeError) return { ok: false, error: e };
1047
- throw e;
1048
- }
1049
- }
1050
-
1051
- // ─── Data Stream Encoding/Decoding ─────────────────────────────────────────────
1052
-
1053
- export { encodeSubgroupStream, encodeDatagram, encodeFetchStream, decodeSubgroupStream, decodeDatagram, decodeFetchStream, decodeDataStream } from "./data-streams.js";
1054
- import { encodeSubgroupStream, encodeDatagram, encodeFetchStream, decodeSubgroupStream, decodeDatagram, decodeFetchStream, decodeDataStream } from "./data-streams.js";
1055
-
1056
- export function createStreamDecoder(): TransformStream<Uint8Array, Draft12Message> {
1057
- let buffer = new Uint8Array(0);
1058
- return new TransformStream<Uint8Array, Draft12Message>({
1059
- transform(chunk, controller) {
1060
- const newBuffer = new Uint8Array(buffer.length + chunk.length);
1061
- newBuffer.set(buffer, 0);
1062
- newBuffer.set(chunk, buffer.length);
1063
- buffer = newBuffer;
1064
- while (buffer.length > 0) {
1065
- const result = decodeMessage(buffer);
1066
- if (!result.ok) {
1067
- if (result.error.code === "UNEXPECTED_END") break;
1068
- controller.error(result.error);
1069
- return;
1070
- }
1071
- controller.enqueue(result.value);
1072
- buffer = buffer.slice(result.bytesRead);
1073
- }
1074
- },
1075
- flush(controller) {
1076
- if (buffer.length > 0)
1077
- controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
1078
- },
1079
- });
1080
- }
1081
-
1082
- // ─── Codec Factory ─────────────────────────────────────────────────────────────
1083
-
1084
- export interface Draft12Codec extends BaseCodec<Draft12Message> {
1085
- readonly draft: "draft-ietf-moq-transport-12";
1086
- encodeSubgroupStream(stream: SubgroupStream): Uint8Array;
1087
- encodeDatagram(dg: DatagramObject): Uint8Array;
1088
- encodeFetchStream(stream: FetchStream): Uint8Array;
1089
- decodeSubgroupStream(bytes: Uint8Array): DecodeResult<SubgroupStream>;
1090
- decodeDatagram(bytes: Uint8Array): DecodeResult<DatagramObject>;
1091
- decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream>;
1092
- decodeDataStream(
1093
- streamType: "subgroup" | "datagram" | "fetch",
1094
- bytes: Uint8Array,
1095
- ): DecodeResult<Draft12DataStream>;
1096
- createStreamDecoder(): TransformStream<Uint8Array, Draft12Message>;
1097
- }
1098
-
1099
- export function createDraft12Codec(): Draft12Codec {
1100
- return {
1101
- draft: "draft-ietf-moq-transport-12",
1102
- encodeMessage,
1103
- decodeMessage,
1104
- encodeSubgroupStream,
1105
- encodeDatagram,
1106
- encodeFetchStream,
1107
- decodeSubgroupStream,
1108
- decodeDatagram,
1109
- decodeFetchStream,
1110
- decodeDataStream,
1111
- createStreamDecoder,
1112
- };
1113
- }
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
+ decodeDatagram,
8
+ decodeDataStream,
9
+ decodeFetchStream,
10
+ decodeSubgroupStream,
11
+ encodeDatagram,
12
+ encodeFetchStream,
13
+ encodeSubgroupStream,
14
+ } from './data-streams.js'
15
+ import {
16
+ MESSAGE_ID_MAP,
17
+ MSG_ANNOUNCE,
18
+ MSG_ANNOUNCE_CANCEL,
19
+ MSG_ANNOUNCE_ERROR,
20
+ MSG_ANNOUNCE_OK,
21
+ MSG_CLIENT_SETUP,
22
+ MSG_FETCH,
23
+ MSG_FETCH_CANCEL,
24
+ MSG_FETCH_ERROR,
25
+ MSG_FETCH_OK,
26
+ MSG_GOAWAY,
27
+ MSG_MAX_REQUEST_ID,
28
+ MSG_PUBLISH,
29
+ MSG_PUBLISH_ERROR,
30
+ MSG_PUBLISH_OK,
31
+ MSG_REQUESTS_BLOCKED,
32
+ MSG_SERVER_SETUP,
33
+ MSG_SUBSCRIBE,
34
+ MSG_SUBSCRIBE_ANNOUNCES,
35
+ MSG_SUBSCRIBE_ANNOUNCES_ERROR,
36
+ MSG_SUBSCRIBE_ANNOUNCES_OK,
37
+ MSG_SUBSCRIBE_DONE,
38
+ MSG_SUBSCRIBE_ERROR,
39
+ MSG_SUBSCRIBE_OK,
40
+ MSG_SUBSCRIBE_UPDATE,
41
+ MSG_TRACK_STATUS,
42
+ MSG_TRACK_STATUS_REQUEST,
43
+ MSG_UNANNOUNCE,
44
+ MSG_UNSUBSCRIBE,
45
+ MSG_UNSUBSCRIBE_ANNOUNCES,
46
+ PARAM_AUTHORIZATION_TOKEN,
47
+ PARAM_DELIVERY_TIMEOUT,
48
+ PARAM_MAX_CACHE_DURATION,
49
+ SETUP_PARAM_MAX_REQUEST_ID,
50
+ SETUP_PARAM_PATH,
51
+ } from './messages.js'
52
+ import type {
53
+ DatagramObject,
54
+ Draft12DataStream,
55
+ Draft12Fetch,
56
+ Draft12Message,
57
+ Draft12Params,
58
+ Draft12SetupParams,
59
+ FetchStream,
60
+ JoiningFetch,
61
+ LargestLocation,
62
+ StandaloneFetch,
63
+ SubgroupStream,
64
+ UnknownParam,
65
+ } from './types.js'
66
+
67
+ const textEncoder = /* @__PURE__ */ new TextEncoder()
68
+ const textDecoder = /* @__PURE__ */ new TextDecoder()
69
+
70
+ // ─── Setup Parameter Encoding/Decoding (even/odd convention) ────────────────────
71
+
72
+ function encodeSetupParams(params: Draft12SetupParams, w: BufferWriter): void {
73
+ let count = 0
74
+ if (params.path !== undefined) count++
75
+ if (params.max_request_id !== undefined) count++
76
+ if (params.unknown) count += params.unknown.length
77
+
78
+ w.writeVarInt(count)
79
+
80
+ if (params.path !== undefined) {
81
+ w.writeVarInt(SETUP_PARAM_PATH)
82
+ const encoded = textEncoder.encode(params.path)
83
+ w.writeVarInt(encoded.byteLength)
84
+ w.writeBytes(encoded)
85
+ }
86
+ if (params.max_request_id !== undefined) {
87
+ w.writeVarInt(SETUP_PARAM_MAX_REQUEST_ID)
88
+ w.writeVarInt(params.max_request_id)
89
+ }
90
+ if (params.unknown) {
91
+ for (const u of params.unknown) {
92
+ const id = BigInt(u.id)
93
+ w.writeVarInt(id)
94
+ if (id % 2n === 0n) {
95
+ const raw = hexToBytes(u.raw_hex)
96
+ const tmpReader = new BufferReader(raw)
97
+ w.writeVarInt(tmpReader.readVarInt())
98
+ } else {
99
+ const raw = hexToBytes(u.raw_hex)
100
+ w.writeVarInt(raw.byteLength)
101
+ w.writeBytes(raw)
102
+ }
103
+ }
104
+ }
105
+ }
106
+
107
+ function decodeSetupParams(r: BufferReader): Draft12SetupParams {
108
+ const count = Number(r.readVarInt())
109
+ const result: Draft12SetupParams = {}
110
+ const unknown: UnknownParam[] = []
111
+
112
+ for (let i = 0; i < count; i++) {
113
+ const paramType = r.readVarInt()
114
+ if (paramType % 2n === 0n) {
115
+ const value = r.readVarInt()
116
+ if (paramType === SETUP_PARAM_MAX_REQUEST_ID) {
117
+ result.max_request_id = value
118
+ } else {
119
+ const tmpW = new BufferWriter(16)
120
+ tmpW.writeVarInt(value)
121
+ const raw = tmpW.finish()
122
+ unknown.push({
123
+ id: `0x${paramType.toString(16)}`,
124
+ length: raw.byteLength,
125
+ raw_hex: bytesToHex(raw),
126
+ })
127
+ }
128
+ } else {
129
+ const length = Number(r.readVarInt())
130
+ const bytes = r.readBytes(length)
131
+ if (paramType === SETUP_PARAM_PATH) {
132
+ result.path = textDecoder.decode(bytes)
133
+ } else {
134
+ unknown.push({
135
+ id: `0x${paramType.toString(16)}`,
136
+ length,
137
+ raw_hex: bytesToHex(bytes),
138
+ })
139
+ }
140
+ }
141
+ }
142
+
143
+ if (unknown.length > 0) result.unknown = unknown
144
+ return result
145
+ }
146
+
147
+ // ─── Version-Specific Parameter Encoding/Decoding ───────────────────────────────
148
+ // Uses even/odd convention: even type → bare varint value, odd type → length-prefixed blob
149
+
150
+ function encodeParams(params: Draft12Params, w: BufferWriter): void {
151
+ let count = params.unknown ? params.unknown.length : 0
152
+ if (params.delivery_timeout !== undefined) count++
153
+ if (params.authorization_token !== undefined) count++
154
+ if (params.max_cache_duration !== undefined) count++
155
+ w.writeVarInt(count)
156
+
157
+ if (params.delivery_timeout !== undefined) {
158
+ // DELIVERY_TIMEOUT = 0x02 (even → bare varint)
159
+ w.writeVarInt(PARAM_DELIVERY_TIMEOUT)
160
+ w.writeVarInt(params.delivery_timeout)
161
+ }
162
+ if (params.authorization_token !== undefined) {
163
+ // AUTHORIZATION_TOKEN = 0x03 (odd length-prefixed)
164
+ w.writeVarInt(PARAM_AUTHORIZATION_TOKEN)
165
+ const at = params.authorization_token
166
+ const tmpW = new BufferWriter(64)
167
+ tmpW.writeVarInt(at.alias_type)
168
+ tmpW.writeVarInt(at.token_type)
169
+ const tokenBytes = textEncoder.encode(at.token_value)
170
+ tmpW.writeBytes(tokenBytes)
171
+ const raw = tmpW.finish()
172
+ w.writeVarInt(raw.byteLength)
173
+ w.writeBytes(raw)
174
+ }
175
+ if (params.max_cache_duration !== undefined) {
176
+ // MAX_CACHE_DURATION = 0x04 (even → bare varint)
177
+ w.writeVarInt(PARAM_MAX_CACHE_DURATION)
178
+ w.writeVarInt(params.max_cache_duration)
179
+ }
180
+ if (params.unknown) {
181
+ for (const u of params.unknown) {
182
+ const id = BigInt(u.id)
183
+ w.writeVarInt(id)
184
+ if (id % 2n === 0n) {
185
+ // Even → bare varint
186
+ const raw = hexToBytes(u.raw_hex)
187
+ const tmpReader = new BufferReader(raw)
188
+ w.writeVarInt(tmpReader.readVarInt())
189
+ } else {
190
+ // Oddlength-prefixed
191
+ const raw = hexToBytes(u.raw_hex)
192
+ w.writeVarInt(raw.byteLength)
193
+ w.writeBytes(raw)
194
+ }
195
+ }
196
+ }
197
+ }
198
+
199
+ function decodeParams(r: BufferReader): Draft12Params {
200
+ const count = Number(r.readVarInt())
201
+ const result: Draft12Params = {}
202
+ const unknown: UnknownParam[] = []
203
+
204
+ for (let i = 0; i < count; i++) {
205
+ const paramType = r.readVarInt()
206
+
207
+ if (paramType % 2n === 0n) {
208
+ // Even type bare varint value
209
+ const value = r.readVarInt()
210
+ if (paramType === PARAM_DELIVERY_TIMEOUT) {
211
+ result.delivery_timeout = value
212
+ } else if (paramType === PARAM_MAX_CACHE_DURATION) {
213
+ result.max_cache_duration = value
214
+ } else {
215
+ const tmpW = new BufferWriter(16)
216
+ tmpW.writeVarInt(value)
217
+ const raw = tmpW.finish()
218
+ unknown.push({
219
+ id: `0x${paramType.toString(16)}`,
220
+ length: raw.byteLength,
221
+ raw_hex: bytesToHex(raw),
222
+ })
223
+ }
224
+ } else {
225
+ // Odd type → length-prefixed blob
226
+ const length = Number(r.readVarInt())
227
+ const startOff = r.offset
228
+
229
+ if (paramType === PARAM_AUTHORIZATION_TOKEN) {
230
+ const alias_type = r.readVarInt()
231
+ const token_type = r.readVarInt()
232
+ const tokenBytesLen = length - (r.offset - startOff)
233
+ const tokenBytes = r.readBytes(tokenBytesLen)
234
+ result.authorization_token = {
235
+ alias_type,
236
+ token_type,
237
+ token_value: textDecoder.decode(tokenBytes),
238
+ }
239
+ } else {
240
+ const bytes = r.readBytes(length)
241
+ unknown.push({
242
+ id: `0x${paramType.toString(16)}`,
243
+ length,
244
+ raw_hex: bytesToHex(bytes),
245
+ })
246
+ }
247
+ }
248
+ }
249
+
250
+ if (unknown.length > 0) result.unknown = unknown
251
+ return result
252
+ }
253
+
254
+ // ─── Payload Encoders ──────────────────────────────────────────────────────────
255
+
256
+ function encodeClientSetupPayload(
257
+ msg: Draft12Message & { type: 'client_setup' },
258
+ w: BufferWriter,
259
+ ): void {
260
+ w.writeVarInt(msg.supported_versions.length)
261
+ for (const v of msg.supported_versions) w.writeVarInt(v)
262
+ encodeSetupParams(msg.parameters, w)
263
+ }
264
+
265
+ function encodeServerSetupPayload(
266
+ msg: Draft12Message & { type: 'server_setup' },
267
+ w: BufferWriter,
268
+ ): void {
269
+ w.writeVarInt(msg.selected_version)
270
+ encodeSetupParams(msg.parameters, w)
271
+ }
272
+
273
+ function encodeSubscribePayload(
274
+ msg: Draft12Message & { type: 'subscribe' },
275
+ w: BufferWriter,
276
+ ): void {
277
+ w.writeVarInt(msg.request_id)
278
+ // Draft-12: no track_alias in subscribe (moved to subscribe_ok)
279
+ w.writeTuple(msg.track_namespace)
280
+ w.writeString(msg.track_name)
281
+ w.writeUint8(msg.subscriber_priority)
282
+ w.writeUint8(msg.group_order)
283
+ w.writeVarInt(msg.forward)
284
+ w.writeVarInt(msg.filter_type)
285
+ const ft = Number(msg.filter_type)
286
+ if (ft === 3 || ft === 4) {
287
+ w.writeVarInt(msg.start_group!)
288
+ w.writeVarInt(msg.start_object!)
289
+ }
290
+ if (ft === 4) {
291
+ w.writeVarInt(msg.end_group!)
292
+ }
293
+ encodeParams(msg.parameters, w)
294
+ }
295
+
296
+ function encodeSubscribeOkPayload(
297
+ msg: Draft12Message & { type: 'subscribe_ok' },
298
+ w: BufferWriter,
299
+ ): void {
300
+ w.writeVarInt(msg.request_id)
301
+ w.writeVarInt(msg.track_alias)
302
+ w.writeVarInt(msg.expires)
303
+ w.writeUint8(msg.group_order)
304
+ w.writeVarInt(msg.content_exists)
305
+ if (msg.content_exists === 1n && msg.largest_location) {
306
+ w.writeVarInt(msg.largest_location.group)
307
+ w.writeVarInt(msg.largest_location.object)
308
+ }
309
+ encodeParams(msg.parameters, w)
310
+ }
311
+
312
+ function encodeSubscribeErrorPayload(
313
+ msg: Draft12Message & { type: 'subscribe_error' },
314
+ w: BufferWriter,
315
+ ): void {
316
+ w.writeVarInt(msg.request_id)
317
+ w.writeVarInt(msg.error_code)
318
+ w.writeString(msg.reason_phrase)
319
+ // Draft-12: no track_alias in subscribe_error
320
+ }
321
+
322
+ function encodeSubscribeUpdatePayload(
323
+ msg: Draft12Message & { type: 'subscribe_update' },
324
+ w: BufferWriter,
325
+ ): void {
326
+ w.writeVarInt(msg.request_id)
327
+ w.writeVarInt(msg.start_group)
328
+ w.writeVarInt(msg.start_object)
329
+ w.writeVarInt(msg.end_group)
330
+ w.writeUint8(msg.subscriber_priority)
331
+ w.writeVarInt(msg.forward)
332
+ encodeParams(msg.parameters, w)
333
+ }
334
+
335
+ function encodeSubscribeDonePayload(
336
+ msg: Draft12Message & { type: 'subscribe_done' },
337
+ w: BufferWriter,
338
+ ): void {
339
+ w.writeVarInt(msg.request_id)
340
+ w.writeVarInt(msg.status_code)
341
+ w.writeVarInt(msg.stream_count)
342
+ w.writeString(msg.reason_phrase)
343
+ }
344
+
345
+ function encodeUnsubscribePayload(
346
+ msg: Draft12Message & { type: 'unsubscribe' },
347
+ w: BufferWriter,
348
+ ): void {
349
+ w.writeVarInt(msg.request_id)
350
+ }
351
+
352
+ function encodeAnnouncePayload(msg: Draft12Message & { type: 'announce' }, w: BufferWriter): void {
353
+ w.writeVarInt(msg.request_id)
354
+ w.writeTuple(msg.track_namespace)
355
+ encodeParams(msg.parameters, w)
356
+ }
357
+
358
+ function encodeAnnounceOkPayload(
359
+ msg: Draft12Message & { type: 'announce_ok' },
360
+ w: BufferWriter,
361
+ ): void {
362
+ w.writeVarInt(msg.request_id)
363
+ }
364
+
365
+ function encodeAnnounceErrorPayload(
366
+ msg: Draft12Message & { type: 'announce_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 encodeUnannouncePayload(
375
+ msg: Draft12Message & { type: 'unannounce' },
376
+ w: BufferWriter,
377
+ ): void {
378
+ w.writeTuple(msg.track_namespace)
379
+ }
380
+
381
+ function encodeAnnounceCancelPayload(
382
+ msg: Draft12Message & { type: 'announce_cancel' },
383
+ w: BufferWriter,
384
+ ): void {
385
+ w.writeTuple(msg.track_namespace)
386
+ w.writeVarInt(msg.error_code)
387
+ w.writeString(msg.reason_phrase)
388
+ }
389
+
390
+ function encodeSubscribeAnnouncesPayload(
391
+ msg: Draft12Message & { type: 'subscribe_announces' },
392
+ w: BufferWriter,
393
+ ): void {
394
+ w.writeVarInt(msg.request_id)
395
+ w.writeTuple(msg.track_namespace_prefix)
396
+ encodeParams(msg.parameters, w)
397
+ }
398
+
399
+ function encodeSubscribeAnnouncesOkPayload(
400
+ msg: Draft12Message & { type: 'subscribe_announces_ok' },
401
+ w: BufferWriter,
402
+ ): void {
403
+ w.writeVarInt(msg.request_id)
404
+ }
405
+
406
+ function encodeSubscribeAnnouncesErrorPayload(
407
+ msg: Draft12Message & { type: 'subscribe_announces_error' },
408
+ w: BufferWriter,
409
+ ): void {
410
+ w.writeVarInt(msg.request_id)
411
+ w.writeVarInt(msg.error_code)
412
+ w.writeString(msg.reason_phrase)
413
+ }
414
+
415
+ function encodeUnsubscribeAnnouncesPayload(
416
+ msg: Draft12Message & { type: 'unsubscribe_announces' },
417
+ w: BufferWriter,
418
+ ): void {
419
+ w.writeTuple(msg.track_namespace_prefix)
420
+ }
421
+
422
+ function encodePublishPayload(msg: Draft12Message & { type: 'publish' }, w: BufferWriter): void {
423
+ w.writeVarInt(msg.request_id)
424
+ w.writeTuple(msg.track_namespace)
425
+ w.writeString(msg.track_name)
426
+ w.writeVarInt(msg.track_alias)
427
+ w.writeUint8(msg.group_order)
428
+ w.writeVarInt(msg.content_exists)
429
+ if (msg.content_exists === 1n && msg.largest_location) {
430
+ w.writeVarInt(msg.largest_location.group)
431
+ w.writeVarInt(msg.largest_location.object)
432
+ }
433
+ w.writeVarInt(msg.forward)
434
+ encodeParams(msg.parameters, w)
435
+ }
436
+
437
+ function encodePublishOkPayload(
438
+ msg: Draft12Message & { type: 'publish_ok' },
439
+ w: BufferWriter,
440
+ ): void {
441
+ w.writeVarInt(msg.request_id)
442
+ w.writeVarInt(msg.forward)
443
+ w.writeUint8(msg.subscriber_priority)
444
+ w.writeUint8(msg.group_order)
445
+ w.writeVarInt(msg.filter_type)
446
+ const ft = Number(msg.filter_type)
447
+ if (ft === 3 || ft === 4) {
448
+ w.writeVarInt(msg.start_group!)
449
+ w.writeVarInt(msg.start_object!)
450
+ }
451
+ if (ft === 4) {
452
+ w.writeVarInt(msg.end_group!)
453
+ }
454
+ encodeParams(msg.parameters, w)
455
+ }
456
+
457
+ function encodePublishErrorPayload(
458
+ msg: Draft12Message & { type: 'publish_error' },
459
+ w: BufferWriter,
460
+ ): void {
461
+ w.writeVarInt(msg.request_id)
462
+ w.writeVarInt(msg.error_code)
463
+ w.writeString(msg.reason_phrase)
464
+ }
465
+
466
+ function encodeFetchPayload(msg: Draft12Message & { type: 'fetch' }, w: BufferWriter): void {
467
+ w.writeVarInt(msg.request_id)
468
+ w.writeUint8(msg.subscriber_priority)
469
+ w.writeUint8(msg.group_order)
470
+ w.writeVarInt(msg.fetch_type)
471
+ const ft = Number(msg.fetch_type)
472
+ if (ft === 1 && msg.standalone) {
473
+ w.writeTuple(msg.standalone.track_namespace)
474
+ w.writeString(msg.standalone.track_name)
475
+ w.writeVarInt(msg.standalone.start_group)
476
+ w.writeVarInt(msg.standalone.start_object)
477
+ w.writeVarInt(msg.standalone.end_group)
478
+ w.writeVarInt(msg.standalone.end_object)
479
+ } else if ((ft === 2 || ft === 3) && msg.joining) {
480
+ w.writeVarInt(msg.joining.joining_subscribe_id)
481
+ w.writeVarInt(msg.joining.joining_start)
482
+ }
483
+ encodeParams(msg.parameters, w)
484
+ }
485
+
486
+ function encodeFetchOkPayload(msg: Draft12Message & { type: 'fetch_ok' }, w: BufferWriter): void {
487
+ w.writeVarInt(msg.request_id)
488
+ w.writeUint8(msg.group_order)
489
+ w.writeVarInt(msg.end_of_track)
490
+ w.writeVarInt(msg.end_location.group)
491
+ w.writeVarInt(msg.end_location.object)
492
+ encodeParams(msg.parameters, w)
493
+ }
494
+
495
+ function encodeFetchErrorPayload(
496
+ msg: Draft12Message & { type: 'fetch_error' },
497
+ w: BufferWriter,
498
+ ): void {
499
+ w.writeVarInt(msg.request_id)
500
+ w.writeVarInt(msg.error_code)
501
+ w.writeString(msg.reason_phrase)
502
+ }
503
+
504
+ function encodeFetchCancelPayload(
505
+ msg: Draft12Message & { type: 'fetch_cancel' },
506
+ w: BufferWriter,
507
+ ): void {
508
+ w.writeVarInt(msg.request_id)
509
+ }
510
+
511
+ function encodeTrackStatusRequestPayload(
512
+ msg: Draft12Message & { type: 'track_status_request' },
513
+ w: BufferWriter,
514
+ ): void {
515
+ w.writeVarInt(msg.request_id)
516
+ w.writeTuple(msg.track_namespace)
517
+ w.writeString(msg.track_name)
518
+ encodeParams(msg.parameters, w)
519
+ }
520
+
521
+ function encodeTrackStatusPayload(
522
+ msg: Draft12Message & { type: 'track_status' },
523
+ w: BufferWriter,
524
+ ): void {
525
+ w.writeVarInt(msg.request_id)
526
+ w.writeVarInt(msg.status_code)
527
+ w.writeVarInt(msg.largest_location.group)
528
+ w.writeVarInt(msg.largest_location.object)
529
+ encodeParams(msg.parameters, w)
530
+ }
531
+
532
+ function encodeGoAwayPayload(msg: Draft12Message & { type: 'goaway' }, w: BufferWriter): void {
533
+ w.writeString(msg.new_session_uri)
534
+ }
535
+
536
+ function encodeMaxRequestIdPayload(
537
+ msg: Draft12Message & { type: 'max_request_id' },
538
+ w: BufferWriter,
539
+ ): void {
540
+ w.writeVarInt(msg.request_id)
541
+ }
542
+
543
+ function encodeRequestsBlockedPayload(
544
+ msg: Draft12Message & { type: 'requests_blocked' },
545
+ w: BufferWriter,
546
+ ): void {
547
+ w.writeVarInt(msg.maximum_request_id)
548
+ }
549
+
550
+ // ─── Payload Decoders ──────────────────────────────────────────────────────────
551
+
552
+ function decodeClientSetupPayload(r: BufferReader): Draft12Message {
553
+ const numVersions = Number(r.readVarInt())
554
+ if (numVersions === 0) {
555
+ throw new DecodeError('CONSTRAINT_VIOLATION', 'supported_versions must not be empty', r.offset)
556
+ }
557
+ const supported_versions: bigint[] = []
558
+ for (let i = 0; i < numVersions; i++) supported_versions.push(r.readVarInt())
559
+ const parameters = decodeSetupParams(r)
560
+ return { type: 'client_setup', supported_versions, parameters }
561
+ }
562
+
563
+ function decodeServerSetupPayload(r: BufferReader): Draft12Message {
564
+ const selected_version = r.readVarInt()
565
+ const parameters = decodeSetupParams(r)
566
+ return { type: 'server_setup', selected_version, parameters }
567
+ }
568
+
569
+ function decodeSubscribePayload(r: BufferReader): Draft12Message {
570
+ const request_id = r.readVarInt()
571
+ // Draft-12: no track_alias in subscribe
572
+ const track_namespace = r.readTuple()
573
+ const track_name = r.readString()
574
+ const subscriber_priority = r.readUint8()
575
+ const group_order = r.readUint8()
576
+ const forward = r.readVarInt()
577
+ const filter_type = r.readVarInt()
578
+ const ft = Number(filter_type)
579
+ if (ft < 1 || ft > 4) {
580
+ throw new DecodeError('CONSTRAINT_VIOLATION', `Invalid filter_type: ${ft}`, r.offset)
581
+ }
582
+ let start_group: bigint | undefined
583
+ let start_object: bigint | undefined
584
+ let end_group: bigint | undefined
585
+ if (ft === 3 || ft === 4) {
586
+ start_group = r.readVarInt()
587
+ start_object = r.readVarInt()
588
+ }
589
+ if (ft === 4) {
590
+ end_group = r.readVarInt()
591
+ }
592
+ const parameters = decodeParams(r)
593
+ const msg: Record<string, unknown> = {
594
+ type: 'subscribe',
595
+ request_id,
596
+ track_namespace,
597
+ track_name,
598
+ subscriber_priority,
599
+ group_order,
600
+ forward,
601
+ filter_type,
602
+ parameters,
603
+ }
604
+ if (start_group !== undefined) msg.start_group = start_group
605
+ if (start_object !== undefined) msg.start_object = start_object
606
+ if (end_group !== undefined) msg.end_group = end_group
607
+ return msg as unknown as Draft12Message
608
+ }
609
+
610
+ function decodeSubscribeOkPayload(r: BufferReader): Draft12Message {
611
+ const request_id = r.readVarInt()
612
+ const track_alias = r.readVarInt()
613
+ const expires = r.readVarInt()
614
+ const group_order = r.readUint8()
615
+ const content_exists = r.readVarInt()
616
+ let largest_location: LargestLocation | undefined
617
+ if (content_exists === 1n) {
618
+ const group = r.readVarInt()
619
+ const object = r.readVarInt()
620
+ largest_location = { group, object }
621
+ }
622
+ const parameters = decodeParams(r)
623
+ const msg: Record<string, unknown> = {
624
+ type: 'subscribe_ok',
625
+ request_id,
626
+ track_alias,
627
+ expires,
628
+ group_order,
629
+ content_exists,
630
+ parameters,
631
+ }
632
+ if (largest_location) msg.largest_location = largest_location
633
+ return msg as unknown as Draft12Message
634
+ }
635
+
636
+ function decodeSubscribeErrorPayload(r: BufferReader): Draft12Message {
637
+ const request_id = r.readVarInt()
638
+ const error_code = r.readVarInt()
639
+ const reason_phrase = r.readString()
640
+ // Draft-12: no track_alias in subscribe_error
641
+ return { type: 'subscribe_error', request_id, error_code, reason_phrase }
642
+ }
643
+
644
+ function decodeSubscribeUpdatePayload(r: BufferReader): Draft12Message {
645
+ const request_id = r.readVarInt()
646
+ const start_group = r.readVarInt()
647
+ const start_object = r.readVarInt()
648
+ const end_group = r.readVarInt()
649
+ const subscriber_priority = r.readUint8()
650
+ const forward = r.readVarInt()
651
+ const parameters = decodeParams(r)
652
+ return {
653
+ type: 'subscribe_update',
654
+ request_id,
655
+ start_group,
656
+ start_object,
657
+ end_group,
658
+ subscriber_priority,
659
+ forward,
660
+ parameters,
661
+ }
662
+ }
663
+
664
+ function decodeSubscribeDonePayload(r: BufferReader): Draft12Message {
665
+ const request_id = r.readVarInt()
666
+ const status_code = r.readVarInt()
667
+ const stream_count = r.readVarInt()
668
+ const reason_phrase = r.readString()
669
+ return {
670
+ type: 'subscribe_done',
671
+ request_id,
672
+ status_code,
673
+ stream_count,
674
+ reason_phrase,
675
+ }
676
+ }
677
+
678
+ function decodeUnsubscribePayload(r: BufferReader): Draft12Message {
679
+ const request_id = r.readVarInt()
680
+ return { type: 'unsubscribe', request_id }
681
+ }
682
+
683
+ function decodeAnnouncePayload(r: BufferReader): Draft12Message {
684
+ const request_id = r.readVarInt()
685
+ const track_namespace = r.readTuple()
686
+ const parameters = decodeParams(r)
687
+ return { type: 'announce', request_id, track_namespace, parameters }
688
+ }
689
+
690
+ function decodeAnnounceOkPayload(r: BufferReader): Draft12Message {
691
+ const request_id = r.readVarInt()
692
+ return { type: 'announce_ok', request_id }
693
+ }
694
+
695
+ function decodeAnnounceErrorPayload(r: BufferReader): Draft12Message {
696
+ const request_id = r.readVarInt()
697
+ const error_code = r.readVarInt()
698
+ const reason_phrase = r.readString()
699
+ return { type: 'announce_error', request_id, error_code, reason_phrase }
700
+ }
701
+
702
+ function decodeUnannouncePayload(r: BufferReader): Draft12Message {
703
+ const track_namespace = r.readTuple()
704
+ return { type: 'unannounce', track_namespace }
705
+ }
706
+
707
+ function decodeAnnounceCancelPayload(r: BufferReader): Draft12Message {
708
+ const track_namespace = r.readTuple()
709
+ const error_code = r.readVarInt()
710
+ const reason_phrase = r.readString()
711
+ return { type: 'announce_cancel', track_namespace, error_code, reason_phrase }
712
+ }
713
+
714
+ function decodeSubscribeAnnouncesPayload(r: BufferReader): Draft12Message {
715
+ const request_id = r.readVarInt()
716
+ const track_namespace_prefix = r.readTuple()
717
+ const parameters = decodeParams(r)
718
+ return {
719
+ type: 'subscribe_announces',
720
+ request_id,
721
+ track_namespace_prefix,
722
+ parameters,
723
+ }
724
+ }
725
+
726
+ function decodeSubscribeAnnouncesOkPayload(r: BufferReader): Draft12Message {
727
+ const request_id = r.readVarInt()
728
+ return { type: 'subscribe_announces_ok', request_id }
729
+ }
730
+
731
+ function decodeSubscribeAnnouncesErrorPayload(r: BufferReader): Draft12Message {
732
+ const request_id = r.readVarInt()
733
+ const error_code = r.readVarInt()
734
+ const reason_phrase = r.readString()
735
+ return {
736
+ type: 'subscribe_announces_error',
737
+ request_id,
738
+ error_code,
739
+ reason_phrase,
740
+ }
741
+ }
742
+
743
+ function decodeUnsubscribeAnnouncesPayload(r: BufferReader): Draft12Message {
744
+ const track_namespace_prefix = r.readTuple()
745
+ return { type: 'unsubscribe_announces', track_namespace_prefix }
746
+ }
747
+
748
+ function decodePublishPayload(r: BufferReader): Draft12Message {
749
+ const request_id = r.readVarInt()
750
+ const track_namespace = r.readTuple()
751
+ const track_name = r.readString()
752
+ const track_alias = r.readVarInt()
753
+ const group_order = r.readUint8()
754
+ const content_exists = r.readVarInt()
755
+ let largest_location: LargestLocation | undefined
756
+ if (content_exists === 1n) {
757
+ const group = r.readVarInt()
758
+ const object = r.readVarInt()
759
+ largest_location = { group, object }
760
+ }
761
+ const forward = r.readVarInt()
762
+ const parameters = decodeParams(r)
763
+ const msg: Record<string, unknown> = {
764
+ type: 'publish',
765
+ request_id,
766
+ track_namespace,
767
+ track_name,
768
+ track_alias,
769
+ group_order,
770
+ content_exists,
771
+ forward,
772
+ parameters,
773
+ }
774
+ if (largest_location) msg.largest_location = largest_location
775
+ return msg as unknown as Draft12Message
776
+ }
777
+
778
+ function decodePublishOkPayload(r: BufferReader): Draft12Message {
779
+ const request_id = r.readVarInt()
780
+ const forward = r.readVarInt()
781
+ const subscriber_priority = r.readUint8()
782
+ const group_order = r.readUint8()
783
+ const filter_type = r.readVarInt()
784
+ const ft = Number(filter_type)
785
+ let start_group: bigint | undefined
786
+ let start_object: bigint | undefined
787
+ let end_group: bigint | undefined
788
+ if (ft === 3 || ft === 4) {
789
+ start_group = r.readVarInt()
790
+ start_object = r.readVarInt()
791
+ }
792
+ if (ft === 4) {
793
+ end_group = r.readVarInt()
794
+ }
795
+ const parameters = decodeParams(r)
796
+ const msg: Record<string, unknown> = {
797
+ type: 'publish_ok',
798
+ request_id,
799
+ forward,
800
+ subscriber_priority,
801
+ group_order,
802
+ filter_type,
803
+ parameters,
804
+ }
805
+ if (start_group !== undefined) msg.start_group = start_group
806
+ if (start_object !== undefined) msg.start_object = start_object
807
+ if (end_group !== undefined) msg.end_group = end_group
808
+ return msg as unknown as Draft12Message
809
+ }
810
+
811
+ function decodePublishErrorPayload(r: BufferReader): Draft12Message {
812
+ const request_id = r.readVarInt()
813
+ const error_code = r.readVarInt()
814
+ const reason_phrase = r.readString()
815
+ return { type: 'publish_error', request_id, error_code, reason_phrase }
816
+ }
817
+
818
+ function decodeFetchPayload(r: BufferReader): Draft12Message {
819
+ const request_id = r.readVarInt()
820
+ const subscriber_priority = r.readUint8()
821
+ const group_order = r.readUint8()
822
+ const fetch_type = r.readVarInt()
823
+ const ft = Number(fetch_type)
824
+
825
+ if (ft < 1 || ft > 3) {
826
+ throw new DecodeError('CONSTRAINT_VIOLATION', `Invalid fetch_type: ${ft}`, r.offset)
827
+ }
828
+
829
+ let standalone: StandaloneFetch | undefined
830
+ let joining: JoiningFetch | undefined
831
+
832
+ if (ft === 1) {
833
+ const track_namespace = r.readTuple()
834
+ const track_name = r.readString()
835
+ const start_group = r.readVarInt()
836
+ const start_object = r.readVarInt()
837
+ const end_group = r.readVarInt()
838
+ const end_object = r.readVarInt()
839
+ standalone = {
840
+ track_namespace,
841
+ track_name,
842
+ start_group,
843
+ start_object,
844
+ end_group,
845
+ end_object,
846
+ }
847
+ } else {
848
+ const joining_subscribe_id = r.readVarInt()
849
+ const joining_start = r.readVarInt()
850
+ joining = { joining_subscribe_id, joining_start }
851
+ }
852
+
853
+ const parameters = decodeParams(r)
854
+ return {
855
+ type: 'fetch',
856
+ request_id,
857
+ subscriber_priority,
858
+ group_order,
859
+ fetch_type,
860
+ standalone,
861
+ joining,
862
+ parameters,
863
+ } as Draft12Fetch
864
+ }
865
+
866
+ function decodeFetchOkPayload(r: BufferReader): Draft12Message {
867
+ const request_id = r.readVarInt()
868
+ const group_order = r.readUint8()
869
+ const end_of_track = r.readVarInt()
870
+ const group = r.readVarInt()
871
+ const object = r.readVarInt()
872
+ const parameters = decodeParams(r)
873
+ return {
874
+ type: 'fetch_ok',
875
+ request_id,
876
+ group_order,
877
+ end_of_track,
878
+ end_location: { group, object },
879
+ parameters,
880
+ }
881
+ }
882
+
883
+ function decodeFetchErrorPayload(r: BufferReader): Draft12Message {
884
+ const request_id = r.readVarInt()
885
+ const error_code = r.readVarInt()
886
+ const reason_phrase = r.readString()
887
+ return { type: 'fetch_error', request_id, error_code, reason_phrase }
888
+ }
889
+
890
+ function decodeFetchCancelPayload(r: BufferReader): Draft12Message {
891
+ const request_id = r.readVarInt()
892
+ return { type: 'fetch_cancel', request_id }
893
+ }
894
+
895
+ function decodeTrackStatusRequestPayload(r: BufferReader): Draft12Message {
896
+ const request_id = r.readVarInt()
897
+ const track_namespace = r.readTuple()
898
+ const track_name = r.readString()
899
+ const parameters = decodeParams(r)
900
+ return {
901
+ type: 'track_status_request',
902
+ request_id,
903
+ track_namespace,
904
+ track_name,
905
+ parameters,
906
+ }
907
+ }
908
+
909
+ function decodeTrackStatusPayload(r: BufferReader): Draft12Message {
910
+ const request_id = r.readVarInt()
911
+ const status_code = r.readVarInt()
912
+ const group = r.readVarInt()
913
+ const object = r.readVarInt()
914
+ const parameters = decodeParams(r)
915
+ return {
916
+ type: 'track_status',
917
+ request_id,
918
+ status_code,
919
+ largest_location: { group, object },
920
+ parameters,
921
+ }
922
+ }
923
+
924
+ function decodeGoAwayPayload(r: BufferReader): Draft12Message {
925
+ const new_session_uri = r.readString()
926
+ return { type: 'goaway', new_session_uri }
927
+ }
928
+
929
+ function decodeMaxRequestIdPayload(r: BufferReader): Draft12Message {
930
+ const request_id = r.readVarInt()
931
+ return { type: 'max_request_id', request_id }
932
+ }
933
+
934
+ function decodeRequestsBlockedPayload(r: BufferReader): Draft12Message {
935
+ const maximum_request_id = r.readVarInt()
936
+ return { type: 'requests_blocked', maximum_request_id }
937
+ }
938
+
939
+ // ─── Payload dispatch tables ───────────────────────────────────────────────────
940
+
941
+ const payloadDecoders: ReadonlyMap<bigint, (r: BufferReader) => Draft12Message> = new Map([
942
+ [MSG_CLIENT_SETUP, decodeClientSetupPayload],
943
+ [MSG_SERVER_SETUP, decodeServerSetupPayload],
944
+ [MSG_SUBSCRIBE, decodeSubscribePayload],
945
+ [MSG_SUBSCRIBE_OK, decodeSubscribeOkPayload],
946
+ [MSG_SUBSCRIBE_ERROR, decodeSubscribeErrorPayload],
947
+ [MSG_SUBSCRIBE_UPDATE, decodeSubscribeUpdatePayload],
948
+ [MSG_SUBSCRIBE_DONE, decodeSubscribeDonePayload],
949
+ [MSG_UNSUBSCRIBE, decodeUnsubscribePayload],
950
+ [MSG_ANNOUNCE, decodeAnnouncePayload],
951
+ [MSG_ANNOUNCE_OK, decodeAnnounceOkPayload],
952
+ [MSG_ANNOUNCE_ERROR, decodeAnnounceErrorPayload],
953
+ [MSG_UNANNOUNCE, decodeUnannouncePayload],
954
+ [MSG_ANNOUNCE_CANCEL, decodeAnnounceCancelPayload],
955
+ [MSG_SUBSCRIBE_ANNOUNCES, decodeSubscribeAnnouncesPayload],
956
+ [MSG_SUBSCRIBE_ANNOUNCES_OK, decodeSubscribeAnnouncesOkPayload],
957
+ [MSG_SUBSCRIBE_ANNOUNCES_ERROR, decodeSubscribeAnnouncesErrorPayload],
958
+ [MSG_UNSUBSCRIBE_ANNOUNCES, decodeUnsubscribeAnnouncesPayload],
959
+ [MSG_PUBLISH, decodePublishPayload],
960
+ [MSG_PUBLISH_OK, decodePublishOkPayload],
961
+ [MSG_PUBLISH_ERROR, decodePublishErrorPayload],
962
+ [MSG_FETCH, decodeFetchPayload],
963
+ [MSG_FETCH_OK, decodeFetchOkPayload],
964
+ [MSG_FETCH_ERROR, decodeFetchErrorPayload],
965
+ [MSG_FETCH_CANCEL, decodeFetchCancelPayload],
966
+ [MSG_TRACK_STATUS_REQUEST, decodeTrackStatusRequestPayload],
967
+ [MSG_TRACK_STATUS, decodeTrackStatusPayload],
968
+ [MSG_GOAWAY, decodeGoAwayPayload],
969
+ [MSG_MAX_REQUEST_ID, decodeMaxRequestIdPayload],
970
+ [MSG_REQUESTS_BLOCKED, decodeRequestsBlockedPayload],
971
+ ])
972
+
973
+ // ─── Public API ────────────────────────────────────────────────────────────────
974
+
975
+ /**
976
+ * Encode a draft-12 control message.
977
+ * Most messages use type(varint) + length(uint16 BE) + payload.
978
+ * PUBLISH family uses type(varint) + length(varint) + payload.
979
+ */
980
+ export function encodeMessage(message: Draft12Message): Uint8Array {
981
+ const typeId = MESSAGE_ID_MAP.get(message.type)
982
+ if (typeId === undefined) throw new Error(`Unknown message type: ${message.type}`)
983
+
984
+ const payloadWriter = new BufferWriter()
985
+ encodePayload(message, payloadWriter)
986
+ const payload = payloadWriter.finishView()
987
+
988
+ const writer = new BufferWriter(payload.byteLength + 16)
989
+ writer.writeVarInt(typeId)
990
+
991
+ if (payload.byteLength > 0xffff) {
992
+ throw new Error(`Payload too large for 16-bit length: ${payload.byteLength}`)
993
+ }
994
+ writer.writeUint8((payload.byteLength >> 8) & 0xff)
995
+ writer.writeUint8(payload.byteLength & 0xff)
996
+
997
+ writer.writeBytes(payload)
998
+ return writer.finish()
999
+ }
1000
+
1001
+ function encodePayload(msg: Draft12Message, w: BufferWriter): void {
1002
+ switch (msg.type) {
1003
+ case 'client_setup':
1004
+ return encodeClientSetupPayload(msg, w)
1005
+ case 'server_setup':
1006
+ return encodeServerSetupPayload(msg, w)
1007
+ case 'subscribe':
1008
+ return encodeSubscribePayload(msg, w)
1009
+ case 'subscribe_ok':
1010
+ return encodeSubscribeOkPayload(msg, w)
1011
+ case 'subscribe_error':
1012
+ return encodeSubscribeErrorPayload(msg, w)
1013
+ case 'subscribe_update':
1014
+ return encodeSubscribeUpdatePayload(msg, w)
1015
+ case 'subscribe_done':
1016
+ return encodeSubscribeDonePayload(msg, w)
1017
+ case 'unsubscribe':
1018
+ return encodeUnsubscribePayload(msg, w)
1019
+ case 'announce':
1020
+ return encodeAnnouncePayload(msg, w)
1021
+ case 'announce_ok':
1022
+ return encodeAnnounceOkPayload(msg, w)
1023
+ case 'announce_error':
1024
+ return encodeAnnounceErrorPayload(msg, w)
1025
+ case 'unannounce':
1026
+ return encodeUnannouncePayload(msg, w)
1027
+ case 'announce_cancel':
1028
+ return encodeAnnounceCancelPayload(msg, w)
1029
+ case 'subscribe_announces':
1030
+ return encodeSubscribeAnnouncesPayload(msg, w)
1031
+ case 'subscribe_announces_ok':
1032
+ return encodeSubscribeAnnouncesOkPayload(msg, w)
1033
+ case 'subscribe_announces_error':
1034
+ return encodeSubscribeAnnouncesErrorPayload(msg, w)
1035
+ case 'unsubscribe_announces':
1036
+ return encodeUnsubscribeAnnouncesPayload(msg, w)
1037
+ case 'publish':
1038
+ return encodePublishPayload(msg, w)
1039
+ case 'publish_ok':
1040
+ return encodePublishOkPayload(msg, w)
1041
+ case 'publish_error':
1042
+ return encodePublishErrorPayload(msg, w)
1043
+ case 'fetch':
1044
+ return encodeFetchPayload(msg, w)
1045
+ case 'fetch_ok':
1046
+ return encodeFetchOkPayload(msg, w)
1047
+ case 'fetch_error':
1048
+ return encodeFetchErrorPayload(msg, w)
1049
+ case 'fetch_cancel':
1050
+ return encodeFetchCancelPayload(msg, w)
1051
+ case 'track_status_request':
1052
+ return encodeTrackStatusRequestPayload(msg, w)
1053
+ case 'track_status':
1054
+ return encodeTrackStatusPayload(msg, w)
1055
+ case 'goaway':
1056
+ return encodeGoAwayPayload(msg, w)
1057
+ case 'max_request_id':
1058
+ return encodeMaxRequestIdPayload(msg, w)
1059
+ case 'requests_blocked':
1060
+ return encodeRequestsBlockedPayload(msg, w)
1061
+ default: {
1062
+ const _exhaustive: never = msg
1063
+ throw new Error(`Unhandled message type: ${(_exhaustive as Draft12Message).type}`)
1064
+ }
1065
+ }
1066
+ }
1067
+
1068
+ /**
1069
+ * Decode a draft-12 control message from bytes.
1070
+ */
1071
+ export function decodeMessage(bytes: Uint8Array): DecodeResult<Draft12Message> {
1072
+ try {
1073
+ const reader = new BufferReader(bytes)
1074
+ const typeId = reader.readVarInt()
1075
+
1076
+ // Read 16-bit big-endian payload length
1077
+ const lenHi = reader.readUint8()
1078
+ const lenLo = reader.readUint8()
1079
+ const payloadLength = (lenHi << 8) | lenLo
1080
+
1081
+ const payloadBytes = reader.readBytes(payloadLength)
1082
+ const payloadReader = new BufferReader(payloadBytes)
1083
+
1084
+ const decoder = payloadDecoders.get(typeId)
1085
+ if (!decoder) {
1086
+ return {
1087
+ ok: false,
1088
+ error: new DecodeError(
1089
+ 'UNKNOWN_MESSAGE_TYPE',
1090
+ `Unknown message type ID: 0x${typeId.toString(16)}`,
1091
+ 0,
1092
+ ),
1093
+ }
1094
+ }
1095
+
1096
+ const message = decoder(payloadReader)
1097
+ return { ok: true, value: message, bytesRead: reader.offset }
1098
+ } catch (e) {
1099
+ if (e instanceof DecodeError) return { ok: false, error: e }
1100
+ throw e
1101
+ }
1102
+ }
1103
+
1104
+ // ─── Data Stream Encoding/Decoding ─────────────────────────────────────────────
1105
+
1106
+ export {
1107
+ decodeDatagram,
1108
+ decodeDataStream,
1109
+ decodeFetchStream,
1110
+ decodeSubgroupStream,
1111
+ encodeDatagram,
1112
+ encodeFetchStream,
1113
+ encodeSubgroupStream,
1114
+ } from './data-streams.js'
1115
+
1116
+ export function createStreamDecoder(): TransformStream<Uint8Array, Draft12Message> {
1117
+ let buffer = new Uint8Array(0)
1118
+ let offset = 0
1119
+ return new TransformStream<Uint8Array, Draft12Message>({
1120
+ transform(chunk, controller) {
1121
+ if (offset > 0) {
1122
+ buffer = buffer.subarray(offset)
1123
+ offset = 0
1124
+ }
1125
+ const newBuffer = new Uint8Array(buffer.length + chunk.length)
1126
+ newBuffer.set(buffer, 0)
1127
+ newBuffer.set(chunk, buffer.length)
1128
+ buffer = newBuffer
1129
+ while (offset < buffer.length) {
1130
+ const result = decodeMessage(buffer.subarray(offset))
1131
+ if (!result.ok) {
1132
+ if (result.error.code === 'UNEXPECTED_END') break
1133
+ controller.error(result.error)
1134
+ return
1135
+ }
1136
+ controller.enqueue(result.value)
1137
+ offset += result.bytesRead
1138
+ }
1139
+ },
1140
+ flush(controller) {
1141
+ if (offset < buffer.length)
1142
+ controller.error(new DecodeError('UNEXPECTED_END', 'Stream ended with incomplete data', 0))
1143
+ },
1144
+ })
1145
+ }
1146
+
1147
+ // ─── Codec Factory ─────────────────────────────────────────────────────────────
1148
+
1149
+ export interface Draft12Codec extends BaseCodec<Draft12Message> {
1150
+ readonly draft: '12'
1151
+ encodeSubgroupStream(stream: SubgroupStream): Uint8Array
1152
+ encodeDatagram(dg: DatagramObject): Uint8Array
1153
+ encodeFetchStream(stream: FetchStream): Uint8Array
1154
+ decodeSubgroupStream(bytes: Uint8Array): DecodeResult<SubgroupStream>
1155
+ decodeDatagram(bytes: Uint8Array): DecodeResult<DatagramObject>
1156
+ decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream>
1157
+ decodeDataStream(
1158
+ streamType: 'subgroup' | 'datagram' | 'fetch',
1159
+ bytes: Uint8Array,
1160
+ ): DecodeResult<Draft12DataStream>
1161
+ createStreamDecoder(): TransformStream<Uint8Array, Draft12Message>
1162
+ }
1163
+
1164
+ export function createDraft12Codec(): Draft12Codec {
1165
+ return {
1166
+ draft: '12',
1167
+ encodeMessage,
1168
+ decodeMessage,
1169
+ encodeSubgroupStream,
1170
+ encodeDatagram,
1171
+ encodeFetchStream,
1172
+ decodeSubgroupStream,
1173
+ decodeDatagram,
1174
+ decodeFetchStream,
1175
+ decodeDataStream,
1176
+ createStreamDecoder,
1177
+ }
1178
+ }