@moqtap/codec 0.2.0 → 0.2.2

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 (439) hide show
  1. package/dist/core/buffer-reader.d.ts +15 -0
  2. package/dist/core/buffer-reader.d.ts.map +1 -0
  3. package/dist/core/buffer-reader.js +98 -0
  4. package/dist/core/buffer-reader.js.map +1 -0
  5. package/dist/core/buffer-writer.d.ts +16 -0
  6. package/dist/core/buffer-writer.d.ts.map +1 -0
  7. package/dist/core/buffer-writer.js +86 -0
  8. package/dist/core/buffer-writer.js.map +1 -0
  9. package/dist/core/errors.d.ts +2 -0
  10. package/dist/core/errors.d.ts.map +1 -0
  11. package/dist/core/errors.js +2 -0
  12. package/dist/core/errors.js.map +1 -0
  13. package/dist/core/hex.d.ts +5 -0
  14. package/dist/core/hex.d.ts.map +1 -0
  15. package/dist/core/hex.js +17 -0
  16. package/dist/core/hex.js.map +1 -0
  17. package/dist/core/session-types.d.ts +99 -0
  18. package/dist/core/session-types.d.ts.map +1 -0
  19. package/dist/core/session-types.js +2 -0
  20. package/dist/core/session-types.js.map +1 -0
  21. package/dist/core/types.d.ts +235 -0
  22. package/dist/core/types.d.ts.map +1 -0
  23. package/dist/core/types.js +11 -0
  24. package/dist/core/types.js.map +1 -0
  25. package/dist/drafts/draft07/announce-fsm.d.ts +2 -0
  26. package/dist/drafts/draft07/announce-fsm.d.ts.map +1 -0
  27. package/dist/drafts/draft07/announce-fsm.js +2 -0
  28. package/dist/drafts/draft07/announce-fsm.js.map +1 -0
  29. package/dist/drafts/draft07/codec.d.ts +17 -0
  30. package/dist/drafts/draft07/codec.d.ts.map +1 -0
  31. package/dist/drafts/draft07/codec.js +722 -0
  32. package/dist/drafts/draft07/codec.js.map +1 -0
  33. package/dist/drafts/draft07/data-streams.d.ts +9 -0
  34. package/dist/drafts/draft07/data-streams.d.ts.map +1 -0
  35. package/dist/drafts/draft07/data-streams.js +228 -0
  36. package/dist/drafts/draft07/data-streams.js.map +1 -0
  37. package/dist/drafts/draft07/index.d.ts +14 -0
  38. package/dist/drafts/draft07/index.d.ts.map +1 -0
  39. package/dist/drafts/draft07/index.js +18 -0
  40. package/dist/drafts/draft07/index.js.map +1 -0
  41. package/dist/drafts/draft07/messages.d.ts +32 -0
  42. package/dist/drafts/draft07/messages.d.ts.map +1 -0
  43. package/dist/drafts/draft07/messages.js +42 -0
  44. package/dist/drafts/draft07/messages.js.map +1 -0
  45. package/dist/drafts/draft07/parameters.d.ts +4 -0
  46. package/dist/drafts/draft07/parameters.d.ts.map +1 -0
  47. package/dist/drafts/draft07/parameters.js +10 -0
  48. package/dist/drafts/draft07/parameters.js.map +1 -0
  49. package/dist/drafts/draft07/rules.d.ts +8 -0
  50. package/dist/drafts/draft07/rules.d.ts.map +1 -0
  51. package/dist/drafts/draft07/rules.js +95 -0
  52. package/dist/drafts/draft07/rules.js.map +1 -0
  53. package/dist/drafts/draft07/session-fsm.d.ts +38 -0
  54. package/dist/drafts/draft07/session-fsm.d.ts.map +1 -0
  55. package/dist/drafts/draft07/session-fsm.js +354 -0
  56. package/dist/drafts/draft07/session-fsm.js.map +1 -0
  57. package/dist/drafts/draft07/session.d.ts +4 -0
  58. package/dist/drafts/draft07/session.d.ts.map +1 -0
  59. package/dist/drafts/draft07/session.js +5 -0
  60. package/dist/drafts/draft07/session.js.map +1 -0
  61. package/dist/drafts/draft07/subscription-fsm.d.ts +2 -0
  62. package/dist/drafts/draft07/subscription-fsm.d.ts.map +1 -0
  63. package/dist/drafts/draft07/subscription-fsm.js +2 -0
  64. package/dist/drafts/draft07/subscription-fsm.js.map +1 -0
  65. package/dist/drafts/draft07/types.d.ts +61 -0
  66. package/dist/drafts/draft07/types.d.ts.map +1 -0
  67. package/dist/drafts/draft07/types.js +4 -0
  68. package/dist/drafts/draft07/types.js.map +1 -0
  69. package/dist/drafts/draft07/varint.d.ts +4 -0
  70. package/dist/drafts/draft07/varint.d.ts.map +1 -0
  71. package/dist/drafts/draft07/varint.js +22 -0
  72. package/dist/drafts/draft07/varint.js.map +1 -0
  73. package/dist/drafts/draft08/codec.d.ts +29 -0
  74. package/dist/drafts/draft08/codec.d.ts.map +1 -0
  75. package/dist/drafts/draft08/codec.js +729 -0
  76. package/dist/drafts/draft08/codec.js.map +1 -0
  77. package/dist/drafts/draft08/data-streams.d.ts +12 -0
  78. package/dist/drafts/draft08/data-streams.d.ts.map +1 -0
  79. package/dist/drafts/draft08/data-streams.js +345 -0
  80. package/dist/drafts/draft08/data-streams.js.map +1 -0
  81. package/dist/drafts/draft08/index.d.ts +9 -0
  82. package/dist/drafts/draft08/index.d.ts.map +1 -0
  83. package/dist/drafts/draft08/index.js +7 -0
  84. package/dist/drafts/draft08/index.js.map +1 -0
  85. package/dist/drafts/draft08/messages.d.ts +34 -0
  86. package/dist/drafts/draft08/messages.d.ts.map +1 -0
  87. package/dist/drafts/draft08/messages.js +66 -0
  88. package/dist/drafts/draft08/messages.js.map +1 -0
  89. package/dist/drafts/draft08/rules.d.ts +8 -0
  90. package/dist/drafts/draft08/rules.d.ts.map +1 -0
  91. package/dist/drafts/draft08/rules.js +83 -0
  92. package/dist/drafts/draft08/rules.js.map +1 -0
  93. package/dist/drafts/draft08/session-fsm.d.ts +47 -0
  94. package/dist/drafts/draft08/session-fsm.d.ts.map +1 -0
  95. package/dist/drafts/draft08/session-fsm.js +483 -0
  96. package/dist/drafts/draft08/session-fsm.js.map +1 -0
  97. package/dist/drafts/draft08/session.d.ts +5 -0
  98. package/dist/drafts/draft08/session.d.ts.map +1 -0
  99. package/dist/drafts/draft08/session.js +5 -0
  100. package/dist/drafts/draft08/session.js.map +1 -0
  101. package/dist/drafts/draft08/types.d.ts +268 -0
  102. package/dist/drafts/draft08/types.d.ts.map +1 -0
  103. package/dist/drafts/draft08/types.js +4 -0
  104. package/dist/drafts/draft08/types.js.map +1 -0
  105. package/dist/drafts/draft09/codec.d.ts +21 -0
  106. package/dist/drafts/draft09/codec.d.ts.map +1 -0
  107. package/dist/drafts/draft09/codec.js +721 -0
  108. package/dist/drafts/draft09/codec.js.map +1 -0
  109. package/dist/drafts/draft09/data-streams.d.ts +12 -0
  110. package/dist/drafts/draft09/data-streams.d.ts.map +1 -0
  111. package/dist/drafts/draft09/data-streams.js +307 -0
  112. package/dist/drafts/draft09/data-streams.js.map +1 -0
  113. package/dist/drafts/draft09/index.d.ts +9 -0
  114. package/dist/drafts/draft09/index.d.ts.map +1 -0
  115. package/dist/drafts/draft09/index.js +7 -0
  116. package/dist/drafts/draft09/index.js.map +1 -0
  117. package/dist/drafts/draft09/messages.d.ts +34 -0
  118. package/dist/drafts/draft09/messages.d.ts.map +1 -0
  119. package/dist/drafts/draft09/messages.js +66 -0
  120. package/dist/drafts/draft09/messages.js.map +1 -0
  121. package/dist/drafts/draft09/rules.d.ts +8 -0
  122. package/dist/drafts/draft09/rules.d.ts.map +1 -0
  123. package/dist/drafts/draft09/rules.js +83 -0
  124. package/dist/drafts/draft09/rules.js.map +1 -0
  125. package/dist/drafts/draft09/session-fsm.d.ts +47 -0
  126. package/dist/drafts/draft09/session-fsm.d.ts.map +1 -0
  127. package/dist/drafts/draft09/session-fsm.js +483 -0
  128. package/dist/drafts/draft09/session-fsm.js.map +1 -0
  129. package/dist/drafts/draft09/session.d.ts +5 -0
  130. package/dist/drafts/draft09/session.d.ts.map +1 -0
  131. package/dist/drafts/draft09/session.js +5 -0
  132. package/dist/drafts/draft09/session.js.map +1 -0
  133. package/dist/drafts/draft09/types.d.ts +268 -0
  134. package/dist/drafts/draft09/types.d.ts.map +1 -0
  135. package/dist/drafts/draft09/types.js +4 -0
  136. package/dist/drafts/draft09/types.js.map +1 -0
  137. package/dist/drafts/draft10/codec.d.ts +21 -0
  138. package/dist/drafts/draft10/codec.d.ts.map +1 -0
  139. package/dist/drafts/draft10/codec.js +721 -0
  140. package/dist/drafts/draft10/codec.js.map +1 -0
  141. package/dist/drafts/draft10/data-streams.d.ts +12 -0
  142. package/dist/drafts/draft10/data-streams.d.ts.map +1 -0
  143. package/dist/drafts/draft10/data-streams.js +307 -0
  144. package/dist/drafts/draft10/data-streams.js.map +1 -0
  145. package/dist/drafts/draft10/index.d.ts +9 -0
  146. package/dist/drafts/draft10/index.d.ts.map +1 -0
  147. package/dist/drafts/draft10/index.js +7 -0
  148. package/dist/drafts/draft10/index.js.map +1 -0
  149. package/dist/drafts/draft10/messages.d.ts +34 -0
  150. package/dist/drafts/draft10/messages.d.ts.map +1 -0
  151. package/dist/drafts/draft10/messages.js +66 -0
  152. package/dist/drafts/draft10/messages.js.map +1 -0
  153. package/dist/drafts/draft10/rules.d.ts +8 -0
  154. package/dist/drafts/draft10/rules.d.ts.map +1 -0
  155. package/dist/drafts/draft10/rules.js +83 -0
  156. package/dist/drafts/draft10/rules.js.map +1 -0
  157. package/dist/drafts/draft10/session-fsm.d.ts +47 -0
  158. package/dist/drafts/draft10/session-fsm.d.ts.map +1 -0
  159. package/dist/drafts/draft10/session-fsm.js +483 -0
  160. package/dist/drafts/draft10/session-fsm.js.map +1 -0
  161. package/dist/drafts/draft10/session.d.ts +5 -0
  162. package/dist/drafts/draft10/session.d.ts.map +1 -0
  163. package/dist/drafts/draft10/session.js +5 -0
  164. package/dist/drafts/draft10/session.js.map +1 -0
  165. package/dist/drafts/draft10/types.d.ts +268 -0
  166. package/dist/drafts/draft10/types.d.ts.map +1 -0
  167. package/dist/drafts/draft10/types.js +4 -0
  168. package/dist/drafts/draft10/types.js.map +1 -0
  169. package/dist/drafts/draft11/codec.d.ts +25 -0
  170. package/dist/drafts/draft11/codec.d.ts.map +1 -0
  171. package/dist/drafts/draft11/codec.js +775 -0
  172. package/dist/drafts/draft11/codec.js.map +1 -0
  173. package/dist/drafts/draft11/data-streams.d.ts +10 -0
  174. package/dist/drafts/draft11/data-streams.d.ts.map +1 -0
  175. package/dist/drafts/draft11/data-streams.js +253 -0
  176. package/dist/drafts/draft11/data-streams.js.map +1 -0
  177. package/dist/drafts/draft11/index.d.ts +9 -0
  178. package/dist/drafts/draft11/index.d.ts.map +1 -0
  179. package/dist/drafts/draft11/index.js +7 -0
  180. package/dist/drafts/draft11/index.js.map +1 -0
  181. package/dist/drafts/draft11/messages.d.ts +33 -0
  182. package/dist/drafts/draft11/messages.d.ts.map +1 -0
  183. package/dist/drafts/draft11/messages.js +65 -0
  184. package/dist/drafts/draft11/messages.js.map +1 -0
  185. package/dist/drafts/draft11/rules.d.ts +8 -0
  186. package/dist/drafts/draft11/rules.d.ts.map +1 -0
  187. package/dist/drafts/draft11/rules.js +88 -0
  188. package/dist/drafts/draft11/rules.js.map +1 -0
  189. package/dist/drafts/draft11/session-fsm.d.ts +52 -0
  190. package/dist/drafts/draft11/session-fsm.d.ts.map +1 -0
  191. package/dist/drafts/draft11/session-fsm.js +530 -0
  192. package/dist/drafts/draft11/session-fsm.js.map +1 -0
  193. package/dist/drafts/draft11/session.d.ts +5 -0
  194. package/dist/drafts/draft11/session.d.ts.map +1 -0
  195. package/dist/drafts/draft11/session.js +5 -0
  196. package/dist/drafts/draft11/session.js.map +1 -0
  197. package/dist/drafts/draft11/types.d.ts +266 -0
  198. package/dist/drafts/draft11/types.d.ts.map +1 -0
  199. package/dist/drafts/draft11/types.js +4 -0
  200. package/dist/drafts/draft11/types.js.map +1 -0
  201. package/dist/drafts/draft12/codec.d.ts +27 -0
  202. package/dist/drafts/draft12/codec.d.ts.map +1 -0
  203. package/dist/drafts/draft12/codec.js +918 -0
  204. package/dist/drafts/draft12/codec.js.map +1 -0
  205. package/dist/drafts/draft12/data-streams.d.ts +10 -0
  206. package/dist/drafts/draft12/data-streams.d.ts.map +1 -0
  207. package/dist/drafts/draft12/data-streams.js +254 -0
  208. package/dist/drafts/draft12/data-streams.js.map +1 -0
  209. package/dist/drafts/draft12/index.d.ts +9 -0
  210. package/dist/drafts/draft12/index.d.ts.map +1 -0
  211. package/dist/drafts/draft12/index.js +7 -0
  212. package/dist/drafts/draft12/index.js.map +1 -0
  213. package/dist/drafts/draft12/messages.d.ts +37 -0
  214. package/dist/drafts/draft12/messages.d.ts.map +1 -0
  215. package/dist/drafts/draft12/messages.js +77 -0
  216. package/dist/drafts/draft12/messages.js.map +1 -0
  217. package/dist/drafts/draft12/rules.d.ts +8 -0
  218. package/dist/drafts/draft12/rules.d.ts.map +1 -0
  219. package/dist/drafts/draft12/rules.js +94 -0
  220. package/dist/drafts/draft12/rules.js.map +1 -0
  221. package/dist/drafts/draft12/session-fsm.d.ts +55 -0
  222. package/dist/drafts/draft12/session-fsm.d.ts.map +1 -0
  223. package/dist/drafts/draft12/session-fsm.js +569 -0
  224. package/dist/drafts/draft12/session-fsm.js.map +1 -0
  225. package/dist/drafts/draft12/session.d.ts +5 -0
  226. package/dist/drafts/draft12/session.d.ts.map +1 -0
  227. package/dist/drafts/draft12/session.js +5 -0
  228. package/dist/drafts/draft12/session.js.map +1 -0
  229. package/dist/drafts/draft12/types.d.ts +294 -0
  230. package/dist/drafts/draft12/types.d.ts.map +1 -0
  231. package/dist/drafts/draft12/types.js +4 -0
  232. package/dist/drafts/draft12/types.js.map +1 -0
  233. package/dist/drafts/draft13/codec.d.ts +27 -0
  234. package/dist/drafts/draft13/codec.d.ts.map +1 -0
  235. package/dist/drafts/draft13/codec.js +1000 -0
  236. package/dist/drafts/draft13/codec.js.map +1 -0
  237. package/dist/drafts/draft13/data-streams.d.ts +10 -0
  238. package/dist/drafts/draft13/data-streams.d.ts.map +1 -0
  239. package/dist/drafts/draft13/data-streams.js +254 -0
  240. package/dist/drafts/draft13/data-streams.js.map +1 -0
  241. package/dist/drafts/draft13/index.d.ts +9 -0
  242. package/dist/drafts/draft13/index.d.ts.map +1 -0
  243. package/dist/drafts/draft13/index.js +7 -0
  244. package/dist/drafts/draft13/index.js.map +1 -0
  245. package/dist/drafts/draft13/messages.d.ts +38 -0
  246. package/dist/drafts/draft13/messages.d.ts.map +1 -0
  247. package/dist/drafts/draft13/messages.js +79 -0
  248. package/dist/drafts/draft13/messages.js.map +1 -0
  249. package/dist/drafts/draft13/rules.d.ts +8 -0
  250. package/dist/drafts/draft13/rules.d.ts.map +1 -0
  251. package/dist/drafts/draft13/rules.js +96 -0
  252. package/dist/drafts/draft13/rules.js.map +1 -0
  253. package/dist/drafts/draft13/session-fsm.d.ts +56 -0
  254. package/dist/drafts/draft13/session-fsm.d.ts.map +1 -0
  255. package/dist/drafts/draft13/session-fsm.js +581 -0
  256. package/dist/drafts/draft13/session-fsm.js.map +1 -0
  257. package/dist/drafts/draft13/session.d.ts +5 -0
  258. package/dist/drafts/draft13/session.d.ts.map +1 -0
  259. package/dist/drafts/draft13/session.js +5 -0
  260. package/dist/drafts/draft13/session.js.map +1 -0
  261. package/dist/drafts/draft13/types.d.ts +310 -0
  262. package/dist/drafts/draft13/types.d.ts.map +1 -0
  263. package/dist/drafts/draft13/types.js +4 -0
  264. package/dist/drafts/draft13/types.js.map +1 -0
  265. package/dist/drafts/draft14/codec.d.ts +34 -0
  266. package/dist/drafts/draft14/codec.d.ts.map +1 -0
  267. package/dist/drafts/draft14/codec.js +752 -0
  268. package/dist/drafts/draft14/codec.js.map +1 -0
  269. package/dist/drafts/draft14/data-streams.d.ts +56 -0
  270. package/dist/drafts/draft14/data-streams.d.ts.map +1 -0
  271. package/dist/drafts/draft14/data-streams.js +729 -0
  272. package/dist/drafts/draft14/data-streams.js.map +1 -0
  273. package/dist/drafts/draft14/index.d.ts +9 -0
  274. package/dist/drafts/draft14/index.d.ts.map +1 -0
  275. package/dist/drafts/draft14/index.js +7 -0
  276. package/dist/drafts/draft14/index.js.map +1 -0
  277. package/dist/drafts/draft14/messages.d.ts +36 -0
  278. package/dist/drafts/draft14/messages.d.ts.map +1 -0
  279. package/dist/drafts/draft14/messages.js +71 -0
  280. package/dist/drafts/draft14/messages.js.map +1 -0
  281. package/dist/drafts/draft14/rules.d.ts +8 -0
  282. package/dist/drafts/draft14/rules.d.ts.map +1 -0
  283. package/dist/drafts/draft14/rules.js +101 -0
  284. package/dist/drafts/draft14/rules.js.map +1 -0
  285. package/dist/drafts/draft14/session-fsm.d.ts +58 -0
  286. package/dist/drafts/draft14/session-fsm.d.ts.map +1 -0
  287. package/dist/drafts/draft14/session-fsm.js +648 -0
  288. package/dist/drafts/draft14/session-fsm.js.map +1 -0
  289. package/dist/drafts/draft14/session.d.ts +5 -0
  290. package/dist/drafts/draft14/session.d.ts.map +1 -0
  291. package/dist/drafts/draft14/session.js +5 -0
  292. package/dist/drafts/draft14/session.js.map +1 -0
  293. package/dist/drafts/draft14/types.d.ts +263 -0
  294. package/dist/drafts/draft14/types.d.ts.map +1 -0
  295. package/dist/drafts/draft14/types.js +4 -0
  296. package/dist/drafts/draft14/types.js.map +1 -0
  297. package/dist/drafts/draft15/codec.d.ts +33 -0
  298. package/dist/drafts/draft15/codec.d.ts.map +1 -0
  299. package/dist/drafts/draft15/codec.js +742 -0
  300. package/dist/drafts/draft15/codec.js.map +1 -0
  301. package/dist/drafts/draft15/data-streams.d.ts +45 -0
  302. package/dist/drafts/draft15/data-streams.d.ts.map +1 -0
  303. package/dist/drafts/draft15/data-streams.js +675 -0
  304. package/dist/drafts/draft15/data-streams.js.map +1 -0
  305. package/dist/drafts/draft15/index.d.ts +9 -0
  306. package/dist/drafts/draft15/index.d.ts.map +1 -0
  307. package/dist/drafts/draft15/index.js +7 -0
  308. package/dist/drafts/draft15/index.js.map +1 -0
  309. package/dist/drafts/draft15/messages.d.ts +31 -0
  310. package/dist/drafts/draft15/messages.d.ts.map +1 -0
  311. package/dist/drafts/draft15/messages.js +59 -0
  312. package/dist/drafts/draft15/messages.js.map +1 -0
  313. package/dist/drafts/draft15/rules.d.ts +8 -0
  314. package/dist/drafts/draft15/rules.d.ts.map +1 -0
  315. package/dist/drafts/draft15/rules.js +83 -0
  316. package/dist/drafts/draft15/rules.js.map +1 -0
  317. package/dist/drafts/draft15/session-fsm.d.ts +48 -0
  318. package/dist/drafts/draft15/session-fsm.d.ts.map +1 -0
  319. package/dist/drafts/draft15/session-fsm.js +479 -0
  320. package/dist/drafts/draft15/session-fsm.js.map +1 -0
  321. package/dist/drafts/draft15/session.d.ts +5 -0
  322. package/dist/drafts/draft15/session.d.ts.map +1 -0
  323. package/dist/drafts/draft15/session.js +5 -0
  324. package/dist/drafts/draft15/session.js.map +1 -0
  325. package/dist/drafts/draft15/types.d.ts +232 -0
  326. package/dist/drafts/draft15/types.d.ts.map +1 -0
  327. package/dist/drafts/draft15/types.js +4 -0
  328. package/dist/drafts/draft15/types.js.map +1 -0
  329. package/dist/drafts/draft16/codec.d.ts +29 -0
  330. package/dist/drafts/draft16/codec.d.ts.map +1 -0
  331. package/dist/drafts/draft16/codec.js +747 -0
  332. package/dist/drafts/draft16/codec.js.map +1 -0
  333. package/dist/drafts/draft16/data-streams.d.ts +34 -0
  334. package/dist/drafts/draft16/data-streams.d.ts.map +1 -0
  335. package/dist/drafts/draft16/data-streams.js +667 -0
  336. package/dist/drafts/draft16/data-streams.js.map +1 -0
  337. package/dist/drafts/draft16/index.d.ts +9 -0
  338. package/dist/drafts/draft16/index.d.ts.map +1 -0
  339. package/dist/drafts/draft16/index.js +7 -0
  340. package/dist/drafts/draft16/index.js.map +1 -0
  341. package/dist/drafts/draft16/messages.d.ts +32 -0
  342. package/dist/drafts/draft16/messages.d.ts.map +1 -0
  343. package/dist/drafts/draft16/messages.js +62 -0
  344. package/dist/drafts/draft16/messages.js.map +1 -0
  345. package/dist/drafts/draft16/rules.d.ts +8 -0
  346. package/dist/drafts/draft16/rules.d.ts.map +1 -0
  347. package/dist/drafts/draft16/rules.js +84 -0
  348. package/dist/drafts/draft16/rules.js.map +1 -0
  349. package/dist/drafts/draft16/session-fsm.d.ts +48 -0
  350. package/dist/drafts/draft16/session-fsm.d.ts.map +1 -0
  351. package/dist/drafts/draft16/session-fsm.js +474 -0
  352. package/dist/drafts/draft16/session-fsm.js.map +1 -0
  353. package/dist/drafts/draft16/session.d.ts +5 -0
  354. package/dist/drafts/draft16/session.d.ts.map +1 -0
  355. package/dist/drafts/draft16/session.js +5 -0
  356. package/dist/drafts/draft16/session.js.map +1 -0
  357. package/dist/drafts/draft16/types.d.ts +238 -0
  358. package/dist/drafts/draft16/types.d.ts.map +1 -0
  359. package/dist/drafts/draft16/types.js +4 -0
  360. package/dist/drafts/draft16/types.js.map +1 -0
  361. package/dist/drafts/draft17/codec.d.ts +29 -0
  362. package/dist/drafts/draft17/codec.d.ts.map +1 -0
  363. package/dist/drafts/draft17/codec.js +799 -0
  364. package/dist/drafts/draft17/codec.js.map +1 -0
  365. package/dist/drafts/draft17/data-streams.d.ts +13 -0
  366. package/dist/drafts/draft17/data-streams.d.ts.map +1 -0
  367. package/dist/drafts/draft17/data-streams.js +633 -0
  368. package/dist/drafts/draft17/data-streams.js.map +1 -0
  369. package/dist/drafts/draft17/index.d.ts +8 -0
  370. package/dist/drafts/draft17/index.d.ts.map +1 -0
  371. package/dist/drafts/draft17/index.js +6 -0
  372. package/dist/drafts/draft17/index.js.map +1 -0
  373. package/dist/drafts/draft17/messages.d.ts +25 -0
  374. package/dist/drafts/draft17/messages.d.ts.map +1 -0
  375. package/dist/drafts/draft17/messages.js +48 -0
  376. package/dist/drafts/draft17/messages.js.map +1 -0
  377. package/dist/drafts/draft17/rules.d.ts +8 -0
  378. package/dist/drafts/draft17/rules.d.ts.map +1 -0
  379. package/dist/drafts/draft17/rules.js +71 -0
  380. package/dist/drafts/draft17/rules.js.map +1 -0
  381. package/dist/drafts/draft17/session-fsm.d.ts +45 -0
  382. package/dist/drafts/draft17/session-fsm.d.ts.map +1 -0
  383. package/dist/drafts/draft17/session-fsm.js +328 -0
  384. package/dist/drafts/draft17/session-fsm.js.map +1 -0
  385. package/dist/drafts/draft17/session.d.ts +5 -0
  386. package/dist/drafts/draft17/session.d.ts.map +1 -0
  387. package/dist/drafts/draft17/session.js +6 -0
  388. package/dist/drafts/draft17/session.js.map +1 -0
  389. package/dist/drafts/draft17/types.d.ts +219 -0
  390. package/dist/drafts/draft17/types.d.ts.map +1 -0
  391. package/dist/drafts/draft17/types.js +3 -0
  392. package/dist/drafts/draft17/types.js.map +1 -0
  393. package/dist/index.d.ts +46 -38
  394. package/dist/index.d.ts.map +1 -0
  395. package/dist/index.js +93 -110
  396. package/dist/index.js.map +1 -0
  397. package/dist/session.d.ts +4 -8
  398. package/dist/session.d.ts.map +1 -0
  399. package/dist/session.js +32 -26
  400. package/dist/session.js.map +1 -0
  401. package/package.json +2 -2
  402. package/src/core/buffer-reader.ts +1 -1
  403. package/src/core/hex.ts +17 -0
  404. package/src/drafts/draft07/codec.ts +933 -991
  405. package/src/drafts/draft07/data-streams.ts +240 -0
  406. package/src/drafts/draft07/index.ts +89 -69
  407. package/src/drafts/draft07/messages.ts +42 -44
  408. package/src/drafts/draft07/rules.ts +101 -104
  409. package/src/drafts/draft07/types.ts +72 -0
  410. package/src/drafts/draft08/codec.ts +944 -1254
  411. package/src/drafts/draft08/data-streams.ts +359 -0
  412. package/src/drafts/draft08/types.ts +384 -377
  413. package/src/drafts/draft09/codec.ts +936 -1235
  414. package/src/drafts/draft09/data-streams.ts +332 -0
  415. package/src/drafts/draft09/types.ts +384 -376
  416. package/src/drafts/draft10/codec.ts +936 -1235
  417. package/src/drafts/draft10/data-streams.ts +332 -0
  418. package/src/drafts/draft10/types.ts +384 -376
  419. package/src/drafts/draft11/codec.ts +979 -1198
  420. package/src/drafts/draft11/data-streams.ts +269 -0
  421. package/src/drafts/draft11/types.ts +381 -375
  422. package/src/drafts/draft12/codec.ts +1113 -1354
  423. package/src/drafts/draft12/data-streams.ts +275 -0
  424. package/src/drafts/draft12/types.ts +419 -414
  425. package/src/drafts/draft13/codec.ts +1197 -1438
  426. package/src/drafts/draft13/data-streams.ts +275 -0
  427. package/src/drafts/draft13/types.ts +438 -433
  428. package/src/drafts/draft14/codec.ts +1034 -1480
  429. package/src/drafts/draft14/data-streams.ts +798 -0
  430. package/src/drafts/draft14/types.ts +381 -365
  431. package/src/drafts/draft15/codec.ts +969 -1661
  432. package/src/drafts/draft15/data-streams.ts +778 -0
  433. package/src/drafts/draft15/types.ts +339 -336
  434. package/src/drafts/draft16/codec.ts +957 -1623
  435. package/src/drafts/draft16/data-streams.ts +773 -0
  436. package/src/drafts/draft16/types.ts +357 -354
  437. package/src/drafts/draft17/codec.ts +962 -1621
  438. package/src/drafts/draft17/data-streams.ts +742 -0
  439. package/src/drafts/draft17/types.ts +313 -310
@@ -0,0 +1,742 @@
1
+ import { BufferReader } from "../../core/buffer-reader.js";
2
+ import { BufferWriter } from "../../core/buffer-writer.js";
3
+ import type { DecodeResult } from "../../core/types.js";
4
+ import { DecodeError } from "../../core/types.js";
5
+ import type {
6
+ DatagramObject,
7
+ DataStreamEvent,
8
+ Draft17DataStream,
9
+ FetchObjectPayload,
10
+ FetchStream,
11
+ FetchStreamHeader,
12
+ ObjectPayload,
13
+ SubgroupStream,
14
+ SubgroupStreamHeader,
15
+ } from "./types.js";
16
+
17
+ // ─── Data Stream Encoding/Decoding (same as draft-16) ───────────────────────
18
+
19
+ const FETCH_STREAM_TYPE = 0x05n;
20
+
21
+ export function encodeSubgroupStream(stream: SubgroupStream): Uint8Array {
22
+ const w = new BufferWriter();
23
+ const streamType = stream.headerType;
24
+ w.writeVarInt(BigInt(streamType));
25
+
26
+ const extensionsPresent = (streamType & 0x01) !== 0;
27
+ const hasSubgroupField = (streamType & 0x04) !== 0;
28
+ const hasPriority = streamType < 0x30;
29
+
30
+ w.writeVarInt(stream.trackAlias);
31
+ w.writeVarInt(stream.groupId);
32
+ if (hasSubgroupField) {
33
+ w.writeVarInt(stream.subgroupId);
34
+ }
35
+ if (hasPriority) {
36
+ w.writeUint8(stream.publisherPriority);
37
+ }
38
+ let prevObjectId = -1n;
39
+ for (const obj of stream.objects) {
40
+ const delta = prevObjectId < 0n ? obj.objectId : obj.objectId - prevObjectId - 1n;
41
+ w.writeVarInt(delta);
42
+ if (extensionsPresent) {
43
+ w.writeVarInt(BigInt(obj.extensionData.length));
44
+ if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData);
45
+ }
46
+ w.writeVarInt(BigInt(obj.payloadLength));
47
+ if (obj.payloadLength === 0) {
48
+ w.writeVarInt(obj.status ?? 0n);
49
+ } else {
50
+ w.writeBytes(obj.payload);
51
+ }
52
+ prevObjectId = obj.objectId;
53
+ }
54
+ return w.finish();
55
+ }
56
+
57
+ export function encodeDatagram(dg: DatagramObject): Uint8Array {
58
+ const w = new BufferWriter();
59
+ const dgType = dg.datagramType;
60
+ w.writeVarInt(BigInt(dgType));
61
+ w.writeVarInt(dg.trackAlias);
62
+ w.writeVarInt(dg.groupId);
63
+
64
+ const objectIdAbsent = (dgType & 0x04) !== 0;
65
+ const isStatus = (dgType & 0x20) !== 0;
66
+ const defaultPriority = (dgType & 0x08) !== 0;
67
+
68
+ if (!objectIdAbsent) {
69
+ w.writeVarInt(dg.objectId);
70
+ }
71
+ if (!defaultPriority) {
72
+ w.writeUint8(dg.publisherPriority);
73
+ }
74
+
75
+ if (isStatus) {
76
+ w.writeVarInt(dg.objectStatus ?? 0n);
77
+ } else {
78
+ w.writeBytes(dg.payload);
79
+ }
80
+ return w.finish();
81
+ }
82
+
83
+ export function encodeFetchStream(stream: FetchStream): Uint8Array {
84
+ const w = new BufferWriter();
85
+ w.writeVarInt(FETCH_STREAM_TYPE);
86
+ w.writeVarInt(stream.requestId);
87
+ for (const obj of stream.objects) {
88
+ w.writeVarInt(BigInt(obj.serializationFlags));
89
+ const flags = obj.serializationFlags;
90
+ if (flags >= 0x80) {
91
+ // End of Range (0x8C, 0x10C): Group ID, Object ID, PayloadLength=0
92
+ w.writeVarInt(obj.groupId);
93
+ w.writeVarInt(obj.objectId);
94
+ w.writeVarInt(BigInt(obj.payloadLength));
95
+ } else {
96
+ if (flags & 0x08) w.writeVarInt(obj.groupId);
97
+ const subgroupEncoding = flags & 0x03;
98
+ if (subgroupEncoding === 0x03) w.writeVarInt(obj.subgroupId);
99
+ if (flags & 0x04) w.writeVarInt(obj.objectId);
100
+ if (flags & 0x10) w.writeUint8(obj.publisherPriority);
101
+ if (flags & 0x20) {
102
+ w.writeVarInt(BigInt(obj.extensionData.length));
103
+ if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData);
104
+ }
105
+ w.writeVarInt(BigInt(obj.payloadLength));
106
+ if (obj.payloadLength > 0) {
107
+ w.writeBytes(obj.payload);
108
+ }
109
+ }
110
+ }
111
+ return w.finish();
112
+ }
113
+
114
+ export function decodeSubgroupStream(bytes: Uint8Array): DecodeResult<SubgroupStream> {
115
+ try {
116
+ const r = new BufferReader(bytes);
117
+ const streamType = Number(r.readVarInt());
118
+
119
+ if (
120
+ !((streamType >= 0x10 && streamType <= 0x1d) || (streamType >= 0x30 && streamType <= 0x3d)) ||
121
+ (streamType & 0x06) === 0x06 // reserved SUBGROUP_ID_MODE (bits 2:1 = 0b11)
122
+ ) {
123
+ return {
124
+ ok: false,
125
+ error: new DecodeError(
126
+ "CONSTRAINT_VIOLATION",
127
+ `Expected subgroup stream type 0x10-0x15/0x18-0x1D/0x30-0x35/0x38-0x3D, got 0x${streamType.toString(16)}`,
128
+ 0,
129
+ ),
130
+ };
131
+ }
132
+
133
+ const extensionsPresent = (streamType & 0x01) !== 0;
134
+ const hasSubgroupField = (streamType & 0x04) !== 0;
135
+ const subgroupIsFirstObjId = (streamType & 0x02) !== 0 && !hasSubgroupField;
136
+ const hasPriority = streamType < 0x30;
137
+
138
+ const trackAlias = r.readVarInt();
139
+ const groupId = r.readVarInt();
140
+
141
+ let subgroupId = 0n;
142
+ if (hasSubgroupField) {
143
+ subgroupId = r.readVarInt();
144
+ }
145
+
146
+ let publisherPriority = 128;
147
+ if (hasPriority) {
148
+ publisherPriority = r.readUint8();
149
+ }
150
+
151
+ const objects: ObjectPayload[] = [];
152
+ let prevObjectId = -1n;
153
+ let firstObject = true;
154
+
155
+ while (r.remaining > 0) {
156
+ const byteOffset = r.offset;
157
+ const delta = r.readVarInt();
158
+ let objectId: bigint;
159
+ if (firstObject) {
160
+ objectId = delta;
161
+ if (subgroupIsFirstObjId && firstObject) {
162
+ subgroupId = objectId;
163
+ }
164
+ firstObject = false;
165
+ } else {
166
+ objectId = prevObjectId + 1n + delta;
167
+ }
168
+ let extensionData = new Uint8Array(0);
169
+ if (extensionsPresent) {
170
+ const extLen = Number(r.readVarInt());
171
+ extensionData = extLen > 0 ? r.readBytes(extLen) : new Uint8Array(0);
172
+ }
173
+ const payloadLength = Number(r.readVarInt());
174
+ let payload: Uint8Array;
175
+ let status: bigint | undefined;
176
+ let payloadByteOffset: number;
177
+ if (payloadLength === 0) {
178
+ status = r.readVarInt();
179
+ payloadByteOffset = r.offset;
180
+ payload = new Uint8Array(0);
181
+ } else {
182
+ payloadByteOffset = r.offset;
183
+ payload = r.readBytes(payloadLength);
184
+ }
185
+ const obj: ObjectPayload = { type: "object", byteOffset, payloadByteOffset, objectId, payloadLength, payload, extensionData };
186
+ if (status !== undefined) (obj as unknown as Record<string, unknown>).status = status;
187
+ objects.push(obj);
188
+ prevObjectId = objectId;
189
+ }
190
+
191
+ return {
192
+ ok: true,
193
+ value: {
194
+ type: "subgroup",
195
+ headerType: streamType,
196
+ trackAlias,
197
+ groupId,
198
+ subgroupId,
199
+ publisherPriority,
200
+ objects,
201
+ },
202
+ bytesRead: r.offset,
203
+ };
204
+ } catch (e) {
205
+ if (e instanceof DecodeError) return { ok: false, error: e };
206
+ throw e;
207
+ }
208
+ }
209
+
210
+ export function decodeDatagram(bytes: Uint8Array): DecodeResult<DatagramObject> {
211
+ try {
212
+ const r = new BufferReader(bytes);
213
+ const dgType = Number(r.readVarInt());
214
+
215
+ const objectIdAbsent = (dgType & 0x04) !== 0;
216
+ const endOfGroup = (dgType & 0x02) !== 0;
217
+ const isStatus = (dgType & 0x20) !== 0;
218
+ const defaultPriority = (dgType & 0x08) !== 0;
219
+
220
+ const trackAlias = r.readVarInt();
221
+ const groupId = r.readVarInt();
222
+ let objectId = 0n;
223
+ if (!objectIdAbsent) {
224
+ objectId = r.readVarInt();
225
+ }
226
+
227
+ let publisherPriority = 128;
228
+ if (!defaultPriority) {
229
+ publisherPriority = r.readUint8();
230
+ }
231
+
232
+ let objectStatus: bigint | undefined;
233
+ let payload: Uint8Array;
234
+ if (isStatus) {
235
+ objectStatus = r.readVarInt();
236
+ payload = new Uint8Array(0);
237
+ } else {
238
+ payload = r.readBytes(r.remaining);
239
+ }
240
+ const payloadLength = payload.byteLength;
241
+
242
+ const result: DatagramObject = {
243
+ type: "datagram",
244
+ datagramType: dgType,
245
+ trackAlias,
246
+ groupId,
247
+ objectId,
248
+ publisherPriority,
249
+ payloadLength,
250
+ payload,
251
+ };
252
+
253
+ if (endOfGroup) (result as unknown as Record<string, unknown>).endOfGroup = true;
254
+ if (objectStatus !== undefined)
255
+ (result as unknown as Record<string, unknown>).objectStatus = objectStatus;
256
+
257
+ return { ok: true, value: result, bytesRead: r.offset };
258
+ } catch (e) {
259
+ if (e instanceof DecodeError) return { ok: false, error: e };
260
+ throw e;
261
+ }
262
+ }
263
+
264
+ export function decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream> {
265
+ try {
266
+ const r = new BufferReader(bytes);
267
+ const streamType = r.readVarInt();
268
+ if (streamType !== FETCH_STREAM_TYPE) {
269
+ return {
270
+ ok: false,
271
+ error: new DecodeError(
272
+ "CONSTRAINT_VIOLATION",
273
+ `Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
274
+ 0,
275
+ ),
276
+ };
277
+ }
278
+ const requestId = r.readVarInt();
279
+ const objects: FetchObjectPayload[] = [];
280
+
281
+ let prevGroupId = 0n;
282
+ let prevSubgroupId = 0n;
283
+ let prevObjectId = 0n;
284
+ let prevPriority = 128;
285
+ let first = true;
286
+
287
+ while (r.remaining > 0) {
288
+ const byteOffset = r.offset;
289
+ const flags = Number(r.readVarInt());
290
+
291
+ let groupId = prevGroupId;
292
+ let subgroupId = prevSubgroupId;
293
+ let objectId = prevObjectId + 1n;
294
+ let payloadLength: number;
295
+ let payload: Uint8Array;
296
+ let payloadByteOffset: number;
297
+ let extensionData = new Uint8Array(0);
298
+
299
+ if (flags >= 0x80) {
300
+ // End of Range: 0x8C = End of Non-Existent Range, 0x10C = End of Unknown Range
301
+ // Per spec §10.4.4.2: Group ID and Object ID are present;
302
+ // Subgroup ID, Priority, Properties are not present.
303
+ if (flags !== 0x8c && flags !== 0x10c) {
304
+ return {
305
+ ok: false,
306
+ error: new DecodeError(
307
+ "CONSTRAINT_VIOLATION",
308
+ `Unknown serialization flags value: 0x${flags.toString(16)}`,
309
+ r.offset,
310
+ ),
311
+ };
312
+ }
313
+ groupId = r.readVarInt();
314
+ objectId = r.readVarInt();
315
+ payloadLength = Number(r.readVarInt());
316
+ payloadByteOffset = r.offset;
317
+ payload = payloadLength > 0 ? r.readBytes(payloadLength) : new Uint8Array(0);
318
+ } else {
319
+ const subgroupEncoding = flags & 0x03;
320
+ const objectIdPresent = (flags & 0x04) !== 0;
321
+ const groupIdPresent = (flags & 0x08) !== 0;
322
+ const priorityPresent = (flags & 0x10) !== 0;
323
+ const extensionsPresent = (flags & 0x20) !== 0;
324
+
325
+ if (flags & 0x40) {
326
+ return {
327
+ ok: false,
328
+ error: new DecodeError(
329
+ "CONSTRAINT_VIOLATION",
330
+ "Reserved bits set in fetch object flags",
331
+ r.offset,
332
+ ),
333
+ };
334
+ }
335
+
336
+ if (groupIdPresent) {
337
+ groupId = r.readVarInt();
338
+ } else if (first) {
339
+ return {
340
+ ok: false,
341
+ error: new DecodeError(
342
+ "CONSTRAINT_VIOLATION",
343
+ "First fetch object must include groupId",
344
+ r.offset,
345
+ ),
346
+ };
347
+ }
348
+
349
+ if (subgroupEncoding === 0x00) {
350
+ subgroupId = 0n;
351
+ } else if (subgroupEncoding === 0x01) {
352
+ if (first) {
353
+ return {
354
+ ok: false,
355
+ error: new DecodeError(
356
+ "CONSTRAINT_VIOLATION",
357
+ "First fetch object cannot reference prior subgroupId",
358
+ r.offset,
359
+ ),
360
+ };
361
+ }
362
+ subgroupId = prevSubgroupId;
363
+ } else if (subgroupEncoding === 0x02) {
364
+ if (first) {
365
+ return {
366
+ ok: false,
367
+ error: new DecodeError(
368
+ "CONSTRAINT_VIOLATION",
369
+ "First fetch object cannot reference prior subgroupId",
370
+ r.offset,
371
+ ),
372
+ };
373
+ }
374
+ subgroupId = prevSubgroupId + 1n;
375
+ } else if (subgroupEncoding === 0x03) {
376
+ subgroupId = r.readVarInt();
377
+ }
378
+
379
+ if (objectIdPresent) {
380
+ objectId = r.readVarInt();
381
+ } else if (first) {
382
+ return {
383
+ ok: false,
384
+ error: new DecodeError(
385
+ "CONSTRAINT_VIOLATION",
386
+ "First fetch object must include objectId",
387
+ r.offset,
388
+ ),
389
+ };
390
+ }
391
+
392
+ if (priorityPresent) {
393
+ prevPriority = r.readUint8();
394
+ }
395
+
396
+ if (extensionsPresent) {
397
+ const extLen = Number(r.readVarInt());
398
+ if (extLen > 0) {
399
+ extensionData = r.readBytes(extLen);
400
+ }
401
+ }
402
+
403
+ payloadLength = Number(r.readVarInt());
404
+ payloadByteOffset = r.offset;
405
+ payload = payloadLength > 0 ? r.readBytes(payloadLength) : new Uint8Array(0);
406
+ }
407
+
408
+ const obj: FetchObjectPayload = {
409
+ type: "object",
410
+ byteOffset,
411
+ payloadByteOffset,
412
+ serializationFlags: flags,
413
+ groupId,
414
+ subgroupId,
415
+ objectId,
416
+ publisherPriority: prevPriority,
417
+ payloadLength,
418
+ payload,
419
+ extensionData,
420
+ };
421
+ objects.push(obj);
422
+
423
+ prevGroupId = groupId;
424
+ prevSubgroupId = subgroupId;
425
+ prevObjectId = objectId;
426
+ first = false;
427
+ }
428
+
429
+ return {
430
+ ok: true,
431
+ value: { type: "fetch", requestId, objects },
432
+ bytesRead: r.offset,
433
+ };
434
+ } catch (e) {
435
+ if (e instanceof DecodeError) return { ok: false, error: e };
436
+ throw e;
437
+ }
438
+ }
439
+
440
+ export function decodeDataStream(
441
+ streamType: "subgroup" | "datagram" | "fetch",
442
+ bytes: Uint8Array,
443
+ ): DecodeResult<Draft17DataStream> {
444
+ switch (streamType) {
445
+ case "subgroup":
446
+ return decodeSubgroupStream(bytes);
447
+ case "datagram":
448
+ return decodeDatagram(bytes);
449
+ case "fetch":
450
+ return decodeFetchStream(bytes);
451
+ default: {
452
+ const _exhaustive: never = streamType;
453
+ throw new Error(`Unknown stream type: ${_exhaustive}`);
454
+ }
455
+ }
456
+ }
457
+
458
+ // ─── Data Stream Decoders ──────────────────────────────────────────────────────
459
+
460
+ export function createSubgroupStreamDecoder(): TransformStream<
461
+ Uint8Array,
462
+ SubgroupStreamHeader | ObjectPayload
463
+ > {
464
+ let buffer = new Uint8Array(0);
465
+ let headerEmitted = false;
466
+ let prevObjectId = -1n;
467
+ let firstObject = true;
468
+ let _subgroupIsFirstObjId = false;
469
+ let _extensionsPresent = false;
470
+
471
+ return new TransformStream<Uint8Array, SubgroupStreamHeader | ObjectPayload>({
472
+ transform(chunk, controller) {
473
+ const newBuffer = new Uint8Array(buffer.length + chunk.length);
474
+ newBuffer.set(buffer, 0);
475
+ newBuffer.set(chunk, buffer.length);
476
+ buffer = newBuffer;
477
+
478
+ if (!headerEmitted) {
479
+ try {
480
+ const r = new BufferReader(buffer);
481
+ const streamType = Number(r.readVarInt());
482
+
483
+ if (
484
+ !(
485
+ (streamType >= 0x10 && streamType <= 0x1d) ||
486
+ (streamType >= 0x30 && streamType <= 0x3d)
487
+ )
488
+ ) {
489
+ controller.error(
490
+ new DecodeError(
491
+ "CONSTRAINT_VIOLATION",
492
+ `Expected subgroup stream type, got 0x${streamType.toString(16)}`,
493
+ 0,
494
+ ),
495
+ );
496
+ return;
497
+ }
498
+
499
+ _extensionsPresent = (streamType & 0x01) !== 0;
500
+ const hasSubgroupField = (streamType & 0x04) !== 0;
501
+ _subgroupIsFirstObjId = (streamType & 0x02) !== 0 && !hasSubgroupField;
502
+ const hasPriority = streamType < 0x30;
503
+
504
+ const trackAlias = r.readVarInt();
505
+ const groupId = r.readVarInt();
506
+
507
+ let subgroupId = 0n;
508
+ if (hasSubgroupField) {
509
+ subgroupId = r.readVarInt();
510
+ }
511
+
512
+ let publisherPriority = 128;
513
+ if (hasPriority) {
514
+ publisherPriority = r.readUint8();
515
+ }
516
+
517
+ controller.enqueue({
518
+ type: "subgroup_header",
519
+ trackAlias,
520
+ groupId,
521
+ subgroupId,
522
+ publisherPriority,
523
+ });
524
+ headerEmitted = true;
525
+ buffer = buffer.slice(r.offset);
526
+ } catch (e) {
527
+ if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
528
+ return;
529
+ }
530
+ controller.error(e);
531
+ return;
532
+ }
533
+ }
534
+
535
+ while (buffer.length > 0) {
536
+ try {
537
+ const r = new BufferReader(buffer);
538
+ const delta = r.readVarInt();
539
+ let objectId: bigint;
540
+ if (firstObject) {
541
+ objectId = delta;
542
+ firstObject = false;
543
+ } else {
544
+ objectId = prevObjectId + 1n + delta;
545
+ }
546
+ let extensionData = new Uint8Array(0);
547
+ if (_extensionsPresent) {
548
+ const extLen = Number(r.readVarInt());
549
+ extensionData = extLen > 0 ? r.readBytes(extLen) : new Uint8Array(0);
550
+ }
551
+ const payloadLength = Number(r.readVarInt());
552
+ const payloadByteOffset = r.offset;
553
+ const payload = payloadLength > 0 ? r.readBytes(payloadLength) : new Uint8Array(0);
554
+ controller.enqueue({ type: "object", objectId, payloadLength, payload, extensionData, byteOffset: 0, payloadByteOffset });
555
+ buffer = buffer.slice(r.offset);
556
+ prevObjectId = objectId;
557
+ } catch (e) {
558
+ if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
559
+ break;
560
+ }
561
+ controller.error(e);
562
+ return;
563
+ }
564
+ }
565
+ },
566
+
567
+ flush(controller) {
568
+ if (buffer.length > 0) {
569
+ controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
570
+ }
571
+ },
572
+ });
573
+ }
574
+
575
+ export function createFetchStreamDecoder(): TransformStream<
576
+ Uint8Array,
577
+ FetchStreamHeader | ObjectPayload
578
+ > {
579
+ let buffer = new Uint8Array(0);
580
+ let headerEmitted = false;
581
+
582
+ return new TransformStream<Uint8Array, FetchStreamHeader | ObjectPayload>({
583
+ transform(chunk, controller) {
584
+ const newBuffer = new Uint8Array(buffer.length + chunk.length);
585
+ newBuffer.set(buffer, 0);
586
+ newBuffer.set(chunk, buffer.length);
587
+ buffer = newBuffer;
588
+
589
+ if (!headerEmitted) {
590
+ try {
591
+ const r = new BufferReader(buffer);
592
+ const streamType = r.readVarInt();
593
+ if (streamType !== FETCH_STREAM_TYPE) {
594
+ controller.error(
595
+ new DecodeError(
596
+ "CONSTRAINT_VIOLATION",
597
+ `Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
598
+ 0,
599
+ ),
600
+ );
601
+ return;
602
+ }
603
+ const requestId = r.readVarInt();
604
+ controller.enqueue({ type: "fetch_header", requestId });
605
+ headerEmitted = true;
606
+ buffer = buffer.slice(r.offset);
607
+ } catch (e) {
608
+ if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
609
+ return;
610
+ }
611
+ controller.error(e);
612
+ return;
613
+ }
614
+ }
615
+
616
+ while (buffer.length > 0) {
617
+ try {
618
+ const r = new BufferReader(buffer);
619
+ const flags = Number(r.readVarInt());
620
+ const objectIdPresent = (flags & 0x04) !== 0;
621
+ const groupIdPresent = (flags & 0x08) !== 0;
622
+ const priorityPresent = (flags & 0x10) !== 0;
623
+ const extensionsPresent = (flags & 0x20) !== 0;
624
+ const subgroupEncoding = flags & 0x03;
625
+
626
+ if (groupIdPresent) r.readVarInt();
627
+ if (subgroupEncoding === 0x03) r.readVarInt();
628
+ let objectId = 0n;
629
+ if (objectIdPresent) objectId = r.readVarInt();
630
+ if (priorityPresent) r.readUint8();
631
+ let extensionData = new Uint8Array(0);
632
+ if (extensionsPresent) {
633
+ const extLen = Number(r.readVarInt());
634
+ extensionData = extLen > 0 ? r.readBytes(extLen) : new Uint8Array(0);
635
+ }
636
+ const payloadLength = Number(r.readVarInt());
637
+ const payloadByteOffset = r.offset;
638
+ const payload = payloadLength > 0 ? r.readBytes(payloadLength) : new Uint8Array(0);
639
+ controller.enqueue({ type: "object", objectId, payloadLength, payload, extensionData, byteOffset: 0, payloadByteOffset });
640
+ buffer = buffer.slice(r.offset);
641
+ } catch (e) {
642
+ if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
643
+ break;
644
+ }
645
+ controller.error(e);
646
+ return;
647
+ }
648
+ }
649
+ },
650
+
651
+ flush(controller) {
652
+ if (buffer.length > 0) {
653
+ controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
654
+ }
655
+ },
656
+ });
657
+ }
658
+
659
+ export function createDataStreamDecoder(): TransformStream<Uint8Array, DataStreamEvent> {
660
+ let buffer = new Uint8Array(0);
661
+ let inner: TransformStream<Uint8Array, DataStreamEvent> | null = null;
662
+
663
+ return new TransformStream<Uint8Array, DataStreamEvent>({
664
+ transform(chunk, controller) {
665
+ const newBuffer = new Uint8Array(buffer.length + chunk.length);
666
+ newBuffer.set(buffer, 0);
667
+ newBuffer.set(chunk, buffer.length);
668
+ buffer = newBuffer;
669
+
670
+ if (inner === null) {
671
+ if (buffer.length === 0) return;
672
+ const firstByte = buffer[0]!;
673
+
674
+ if ((firstByte >= 0x10 && firstByte <= 0x1d) || (firstByte >= 0x30 && firstByte <= 0x3d)) {
675
+ const decoder = createSubgroupStreamDecoder();
676
+ inner = decoder as unknown as TransformStream<Uint8Array, DataStreamEvent>;
677
+ } else if (firstByte === 0x05) {
678
+ const decoder = createFetchStreamDecoder();
679
+ inner = decoder as unknown as TransformStream<Uint8Array, DataStreamEvent>;
680
+ } else {
681
+ controller.error(
682
+ new DecodeError(
683
+ "CONSTRAINT_VIOLATION",
684
+ `Unknown data stream type: 0x${firstByte.toString(16)}`,
685
+ 0,
686
+ ),
687
+ );
688
+ return;
689
+ }
690
+ }
691
+ },
692
+
693
+ flush(controller) {
694
+ if (buffer.length === 0) return;
695
+
696
+ const firstByte = buffer[0]!;
697
+ let result: DecodeResult<Draft17DataStream>;
698
+
699
+ if ((firstByte >= 0x10 && firstByte <= 0x1d) || (firstByte >= 0x30 && firstByte <= 0x3d)) {
700
+ result = decodeSubgroupStream(buffer);
701
+ } else if (firstByte === 0x05) {
702
+ result = decodeFetchStream(buffer);
703
+ } else {
704
+ controller.error(
705
+ new DecodeError(
706
+ "CONSTRAINT_VIOLATION",
707
+ `Unknown data stream type: 0x${firstByte.toString(16)}`,
708
+ 0,
709
+ ),
710
+ );
711
+ return;
712
+ }
713
+
714
+ if (!result.ok) {
715
+ controller.error(result.error);
716
+ return;
717
+ }
718
+
719
+ const stream = result.value;
720
+ if (stream.type === "subgroup") {
721
+ controller.enqueue({
722
+ type: "subgroup_header",
723
+ trackAlias: stream.trackAlias,
724
+ groupId: stream.groupId,
725
+ subgroupId: stream.subgroupId,
726
+ publisherPriority: stream.publisherPriority,
727
+ });
728
+ for (const obj of stream.objects) {
729
+ controller.enqueue(obj);
730
+ }
731
+ } else if (stream.type === "fetch") {
732
+ controller.enqueue({
733
+ type: "fetch_header",
734
+ requestId: stream.requestId,
735
+ });
736
+ for (const obj of stream.objects) {
737
+ controller.enqueue(obj);
738
+ }
739
+ }
740
+ },
741
+ });
742
+ }