@moqtap/codec 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +192 -192
  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 +969 -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 +1126 -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 +1210 -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,798 @@
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
+ Draft14DataStream,
9
+ FetchObjectPayload,
10
+ FetchStream,
11
+ FetchStreamHeader,
12
+ ObjectPayload,
13
+ SubgroupStream,
14
+ SubgroupStreamHeader,
15
+ } from "./types.js";
16
+
17
+ // ─── Data Stream Constants ────────────────────────────────────────────────────
18
+
19
+ const FETCH_STREAM_TYPE = 0x05n;
20
+
21
+ // Valid subgroup stream types: 0x10-0x1D (12 types)
22
+ // Bit 0: extensions present
23
+ // Bit 1: subgroup-id mode (0=zero or first-object-id, with bit 2)
24
+ // Bit 2: subgroup-id field present (when set, explicit subgroup ID)
25
+ // Bit 3: end-of-group
26
+ function isValidSubgroupType(t: number): boolean {
27
+ // 12 defined types: 0x10-0x15, 0x18-0x1D
28
+ return (t >= 0x10 && t <= 0x15) || (t >= 0x18 && t <= 0x1d);
29
+ }
30
+
31
+ // ─── Data Stream Encoding/Decoding ─────────────────────────────────────────────
32
+
33
+ /**
34
+ * Compute the subgroup stream type byte from header properties.
35
+ */
36
+ function computeSubgroupType(opts: {
37
+ hasSubgroupField: boolean;
38
+ subgroupIsFirstObjId: boolean;
39
+ extensionsPresent: boolean;
40
+ endOfGroup: boolean;
41
+ }): number {
42
+ let t = 0x10;
43
+ if (opts.extensionsPresent) t |= 0x01;
44
+ if (opts.subgroupIsFirstObjId) t |= 0x02;
45
+ if (opts.hasSubgroupField) t |= 0x04;
46
+ if (opts.endOfGroup) t |= 0x08;
47
+ return t;
48
+ }
49
+
50
+ /**
51
+ * Encode a subgroup stream header + objects.
52
+ * Uses delta-encoded Object IDs per draft-14 §10.4.2.
53
+ */
54
+ export function encodeSubgroupStream(stream: SubgroupStream): Uint8Array {
55
+ const w = new BufferWriter();
56
+ w.writeVarInt(BigInt(stream.headerType));
57
+ w.writeVarInt(stream.trackAlias);
58
+ w.writeVarInt(stream.groupId);
59
+
60
+ const hasSubgroupField = (stream.headerType & 0x04) !== 0;
61
+ const extensionsPresent = (stream.headerType & 0x01) !== 0;
62
+ if (hasSubgroupField) {
63
+ w.writeVarInt(stream.subgroupId);
64
+ }
65
+ w.writeUint8(stream.publisherPriority);
66
+
67
+ let prevObjectId = -1n;
68
+ let first = true;
69
+ for (const obj of stream.objects) {
70
+ // Delta encoding: first object delta IS the object ID,
71
+ // subsequent deltas: objectId - prevObjectId - 1
72
+ const delta = first ? obj.objectId : obj.objectId - prevObjectId - 1n;
73
+ w.writeVarInt(delta);
74
+ first = false;
75
+ prevObjectId = obj.objectId;
76
+
77
+ // Extension headers
78
+ if (extensionsPresent) {
79
+ w.writeVarInt(BigInt(obj.extensionData.length));
80
+ if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData);
81
+ }
82
+
83
+ if (obj.payloadLength === 0) {
84
+ w.writeVarInt(0);
85
+ w.writeVarInt(obj.status ?? 0n);
86
+ } else {
87
+ w.writeVarInt(obj.payloadLength);
88
+ w.writeBytes(obj.payload);
89
+ }
90
+ }
91
+ return w.finish();
92
+ }
93
+
94
+ /**
95
+ * Encode a datagram object.
96
+ * Draft-14 datagram types: 0x00-0x07, 0x20-0x21.
97
+ */
98
+ export function encodeDatagram(dg: DatagramObject): Uint8Array {
99
+ const w = new BufferWriter();
100
+ w.writeVarInt(BigInt(dg.datagramType));
101
+ w.writeVarInt(dg.trackAlias);
102
+ w.writeVarInt(dg.groupId);
103
+
104
+ const objectIdPresent = (dg.datagramType & 0x04) === 0;
105
+ const isStatus = dg.datagramType >= 0x20;
106
+ const extensionsPresent = (dg.datagramType & 0x01) !== 0;
107
+
108
+ if (objectIdPresent) {
109
+ w.writeVarInt(dg.objectId);
110
+ }
111
+ w.writeUint8(dg.publisherPriority);
112
+
113
+ if (extensionsPresent) {
114
+ w.writeVarInt(0); // extension headers length = 0
115
+ }
116
+
117
+ if (isStatus) {
118
+ w.writeVarInt(dg.objectStatus ?? 0n);
119
+ } else {
120
+ w.writeBytes(dg.payload);
121
+ }
122
+ return w.finish();
123
+ }
124
+
125
+ /**
126
+ * Encode a fetch stream header + objects.
127
+ * Draft-14 fetch: type 0x05, then per-object: GroupID, SubgroupID, ObjectID,
128
+ * PublisherPriority(8), ExtensionHeadersLength, [Extensions], PayloadLength,
129
+ * [ObjectStatus], Payload.
130
+ */
131
+ export function encodeFetchStream(stream: FetchStream): Uint8Array {
132
+ const w = new BufferWriter();
133
+ w.writeVarInt(FETCH_STREAM_TYPE);
134
+ w.writeVarInt(stream.requestId);
135
+ for (const obj of stream.objects) {
136
+ w.writeVarInt(obj.groupId);
137
+ w.writeVarInt(obj.subgroupId);
138
+ w.writeVarInt(obj.objectId);
139
+ w.writeUint8(obj.publisherPriority);
140
+ w.writeVarInt(BigInt(obj.extensionData.length));
141
+ if (obj.extensionData.length > 0) w.writeBytes(obj.extensionData);
142
+ if (obj.payloadLength === 0) {
143
+ w.writeVarInt(0);
144
+ w.writeVarInt(obj.status ?? 0n);
145
+ } else {
146
+ w.writeVarInt(obj.payloadLength);
147
+ w.writeBytes(obj.payload);
148
+ }
149
+ }
150
+ return w.finish();
151
+ }
152
+
153
+ /**
154
+ * Decode a subgroup data stream from raw bytes.
155
+ * Accepts types 0x10-0x15 and 0x18-0x1D. Delta-decodes Object IDs.
156
+ */
157
+ export function decodeSubgroupStream(bytes: Uint8Array): DecodeResult<SubgroupStream> {
158
+ try {
159
+ const r = new BufferReader(bytes);
160
+ const streamType = Number(r.readVarInt());
161
+
162
+ if (!isValidSubgroupType(streamType)) {
163
+ return {
164
+ ok: false,
165
+ error: new DecodeError(
166
+ "CONSTRAINT_VIOLATION",
167
+ `Expected subgroup stream type 0x10-0x1D, got 0x${streamType.toString(16)}`,
168
+ 0,
169
+ ),
170
+ };
171
+ }
172
+
173
+ // Decode type flags
174
+ const extensionsPresent = (streamType & 0x01) !== 0;
175
+ const hasSubgroupField = (streamType & 0x04) !== 0;
176
+ const subgroupIsFirstObjId = (streamType & 0x02) !== 0 && !hasSubgroupField;
177
+
178
+ const trackAlias = r.readVarInt();
179
+ const groupId = r.readVarInt();
180
+
181
+ let subgroupId = 0n;
182
+ if (hasSubgroupField) {
183
+ subgroupId = r.readVarInt();
184
+ }
185
+ const publisherPriority = r.readUint8();
186
+
187
+ const objects: ObjectPayload[] = [];
188
+ let prevObjectId = -1n;
189
+ let firstObject = true;
190
+
191
+ while (r.remaining > 0) {
192
+ const byteOffset = r.offset;
193
+ const delta = r.readVarInt();
194
+ let objectId: bigint;
195
+ if (firstObject) {
196
+ objectId = delta;
197
+ if (subgroupIsFirstObjId) {
198
+ subgroupId = objectId;
199
+ }
200
+ firstObject = false;
201
+ } else {
202
+ objectId = prevObjectId + 1n + delta;
203
+ }
204
+
205
+ // Read extension headers if type indicates they're present
206
+ let extensionData = new Uint8Array(0);
207
+ if (extensionsPresent) {
208
+ const extLen = Number(r.readVarInt());
209
+ extensionData = extLen > 0 ? r.readBytes(extLen) : new Uint8Array(0);
210
+ }
211
+
212
+ const payloadLength = Number(r.readVarInt());
213
+ let payload: Uint8Array;
214
+ let status: bigint | undefined;
215
+ let payloadByteOffset: number;
216
+ if (payloadLength === 0) {
217
+ status = r.readVarInt();
218
+ payloadByteOffset = r.offset;
219
+ payload = new Uint8Array(0);
220
+ } else {
221
+ payloadByteOffset = r.offset;
222
+ payload = r.readBytes(payloadLength);
223
+ }
224
+ const obj: ObjectPayload = { type: "object", byteOffset, payloadByteOffset, objectId, payloadLength, payload, extensionData };
225
+ if (status !== undefined) (obj as unknown as Record<string, unknown>).status = status;
226
+ objects.push(obj);
227
+ prevObjectId = objectId;
228
+ }
229
+
230
+ return {
231
+ ok: true,
232
+ value: {
233
+ type: "subgroup",
234
+ headerType: streamType,
235
+ trackAlias,
236
+ groupId,
237
+ subgroupId,
238
+ publisherPriority,
239
+ objects,
240
+ },
241
+ bytesRead: r.offset,
242
+ };
243
+ } catch (e) {
244
+ if (e instanceof DecodeError) return { ok: false, error: e };
245
+ throw e;
246
+ }
247
+ }
248
+
249
+ /**
250
+ * Decode a datagram object from raw bytes.
251
+ * Accepts types 0x00-0x07 and 0x20-0x21.
252
+ */
253
+ export function decodeDatagram(bytes: Uint8Array): DecodeResult<DatagramObject> {
254
+ try {
255
+ const r = new BufferReader(bytes);
256
+ const dgType = Number(r.readVarInt());
257
+
258
+ // Validate datagram type
259
+ const validDatagram = (dgType >= 0x00 && dgType <= 0x07) || dgType === 0x20 || dgType === 0x21;
260
+ if (!validDatagram) {
261
+ return {
262
+ ok: false,
263
+ error: new DecodeError(
264
+ "CONSTRAINT_VIOLATION",
265
+ `Expected datagram type 0x00-0x07 or 0x20-0x21, got 0x${dgType.toString(16)}`,
266
+ 0,
267
+ ),
268
+ };
269
+ }
270
+
271
+ const objectIdPresent = (dgType & 0x04) === 0;
272
+ const endOfGroup = (dgType & 0x02) !== 0;
273
+ const extensionsPresent = (dgType & 0x01) !== 0;
274
+ const isStatus = dgType >= 0x20;
275
+
276
+ const trackAlias = r.readVarInt();
277
+ const groupId = r.readVarInt();
278
+ let objectId = 0n;
279
+ if (objectIdPresent) {
280
+ objectId = r.readVarInt();
281
+ }
282
+ const publisherPriority = r.readUint8();
283
+
284
+ if (extensionsPresent) {
285
+ const extLen = Number(r.readVarInt());
286
+ if (extLen > 0) {
287
+ r.readBytes(extLen); // skip extension data
288
+ }
289
+ }
290
+
291
+ let objectStatus: bigint | undefined;
292
+ let payload: Uint8Array;
293
+ if (isStatus) {
294
+ objectStatus = r.readVarInt();
295
+ payload = new Uint8Array(0);
296
+ } else {
297
+ payload = r.readBytes(r.remaining);
298
+ }
299
+ const payloadLength = payload.byteLength;
300
+
301
+ const result: DatagramObject = {
302
+ type: "datagram",
303
+ datagramType: dgType,
304
+ trackAlias,
305
+ groupId,
306
+ objectId,
307
+ publisherPriority,
308
+ payloadLength,
309
+ payload,
310
+ };
311
+
312
+ if (endOfGroup) (result as unknown as Record<string, unknown>).endOfGroup = true;
313
+ if (objectStatus !== undefined)
314
+ (result as unknown as Record<string, unknown>).objectStatus = objectStatus;
315
+
316
+ return { ok: true, value: result, bytesRead: r.offset };
317
+ } catch (e) {
318
+ if (e instanceof DecodeError) return { ok: false, error: e };
319
+ throw e;
320
+ }
321
+ }
322
+
323
+ /**
324
+ * Decode a fetch data stream from raw bytes.
325
+ * Draft-14 fetch: type 0x05, per-object has all fields (no serialization flags).
326
+ */
327
+ export function decodeFetchStream(bytes: Uint8Array): DecodeResult<FetchStream> {
328
+ try {
329
+ const r = new BufferReader(bytes);
330
+ const streamType = r.readVarInt();
331
+ if (streamType !== FETCH_STREAM_TYPE) {
332
+ return {
333
+ ok: false,
334
+ error: new DecodeError(
335
+ "CONSTRAINT_VIOLATION",
336
+ `Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
337
+ 0,
338
+ ),
339
+ };
340
+ }
341
+ const requestId = r.readVarInt();
342
+ const objects: FetchObjectPayload[] = [];
343
+ while (r.remaining > 0) {
344
+ const byteOffset = r.offset;
345
+ const groupId = r.readVarInt();
346
+ const subgroupId = r.readVarInt();
347
+ const objectId = r.readVarInt();
348
+ const publisherPriority = r.readUint8();
349
+ // Extension headers
350
+ const extLen = Number(r.readVarInt());
351
+ const extensionData = extLen > 0 ? r.readBytes(extLen) : new Uint8Array(0);
352
+ const payloadLength = Number(r.readVarInt());
353
+ let payload: Uint8Array;
354
+ let status: bigint | undefined;
355
+ let payloadByteOffset: number;
356
+ if (payloadLength === 0) {
357
+ status = r.readVarInt();
358
+ payloadByteOffset = r.offset;
359
+ payload = new Uint8Array(0);
360
+ } else {
361
+ payloadByteOffset = r.offset;
362
+ payload = r.readBytes(payloadLength);
363
+ }
364
+ const obj: FetchObjectPayload = {
365
+ type: "object",
366
+ byteOffset,
367
+ payloadByteOffset,
368
+ groupId,
369
+ subgroupId,
370
+ objectId,
371
+ publisherPriority,
372
+ payloadLength,
373
+ payload,
374
+ extensionData,
375
+ };
376
+ if (status !== undefined) (obj as unknown as Record<string, unknown>).status = status;
377
+ objects.push(obj);
378
+ }
379
+ return {
380
+ ok: true,
381
+ value: { type: "fetch", requestId, objects },
382
+ bytesRead: r.offset,
383
+ };
384
+ } catch (e) {
385
+ if (e instanceof DecodeError) return { ok: false, error: e };
386
+ throw e;
387
+ }
388
+ }
389
+
390
+ /**
391
+ * Decode a data stream, dispatching by stream type.
392
+ */
393
+ export function decodeDataStream(
394
+ streamType: "subgroup" | "datagram" | "fetch",
395
+ bytes: Uint8Array,
396
+ ): DecodeResult<Draft14DataStream> {
397
+ switch (streamType) {
398
+ case "subgroup":
399
+ return decodeSubgroupStream(bytes);
400
+ case "datagram":
401
+ return decodeDatagram(bytes);
402
+ case "fetch":
403
+ return decodeFetchStream(bytes);
404
+ default: {
405
+ const _exhaustive: never = streamType;
406
+ throw new Error(`Unknown stream type: ${_exhaustive}`);
407
+ }
408
+ }
409
+ }
410
+
411
+ // ─── Data Stream Decoders ──────────────────────────────────────────────────────
412
+
413
+ /**
414
+ * Create a TransformStream that decodes a subgroup data stream.
415
+ * First emits a SubgroupStreamHeader, then emits ObjectPayload events.
416
+ * Accepts types 0x10-0x1D. Delta-decodes Object IDs.
417
+ */
418
+ export function createSubgroupStreamDecoder(): TransformStream<
419
+ Uint8Array,
420
+ SubgroupStreamHeader | ObjectPayload
421
+ > {
422
+ let buffer = new Uint8Array(0);
423
+ let headerEmitted = false;
424
+ let extensionsPresent = false;
425
+ let prevObjectId = -1n;
426
+ let firstObject = true;
427
+
428
+ return new TransformStream<Uint8Array, SubgroupStreamHeader | ObjectPayload>({
429
+ transform(chunk, controller) {
430
+ const newBuffer = new Uint8Array(buffer.length + chunk.length);
431
+ newBuffer.set(buffer, 0);
432
+ newBuffer.set(chunk, buffer.length);
433
+ buffer = newBuffer;
434
+
435
+ if (!headerEmitted) {
436
+ try {
437
+ const r = new BufferReader(buffer);
438
+ const streamType = Number(r.readVarInt());
439
+ if (!isValidSubgroupType(streamType)) {
440
+ controller.error(
441
+ new DecodeError(
442
+ "CONSTRAINT_VIOLATION",
443
+ `Expected subgroup stream type 0x10-0x1D, got 0x${streamType.toString(16)}`,
444
+ 0,
445
+ ),
446
+ );
447
+ return;
448
+ }
449
+ extensionsPresent = (streamType & 0x01) !== 0;
450
+ const hasSubgroupField = (streamType & 0x04) !== 0;
451
+ const trackAlias = r.readVarInt();
452
+ const groupId = r.readVarInt();
453
+ let subgroupId = 0n;
454
+ if (hasSubgroupField) {
455
+ subgroupId = r.readVarInt();
456
+ }
457
+ const publisherPriority = r.readUint8();
458
+
459
+ controller.enqueue({
460
+ type: "subgroup_header",
461
+ headerType: streamType,
462
+ trackAlias,
463
+ groupId,
464
+ subgroupId,
465
+ publisherPriority,
466
+ });
467
+ headerEmitted = true;
468
+ buffer = buffer.slice(r.offset);
469
+ } catch (e) {
470
+ if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
471
+ return;
472
+ }
473
+ controller.error(e);
474
+ return;
475
+ }
476
+ }
477
+
478
+ while (buffer.length > 0) {
479
+ try {
480
+ const r = new BufferReader(buffer);
481
+ const byteOffset = r.offset;
482
+ const delta = r.readVarInt();
483
+ const objectId = firstObject ? delta : prevObjectId + 1n + delta;
484
+ firstObject = false;
485
+
486
+ let extensionData = new Uint8Array(0);
487
+ if (extensionsPresent) {
488
+ const extLen = Number(r.readVarInt());
489
+ extensionData = extLen > 0 ? r.readBytes(extLen) : new Uint8Array(0);
490
+ }
491
+
492
+ const payloadLength = Number(r.readVarInt());
493
+ let payload: Uint8Array;
494
+ let status: bigint | undefined;
495
+ let payloadByteOffset: number;
496
+ if (payloadLength === 0) {
497
+ status = r.readVarInt();
498
+ payloadByteOffset = r.offset;
499
+ payload = new Uint8Array(0);
500
+ } else {
501
+ payloadByteOffset = r.offset;
502
+ payload = r.readBytes(payloadLength);
503
+ }
504
+ const obj: ObjectPayload = { type: "object", byteOffset, payloadByteOffset, objectId, payloadLength, payload, extensionData };
505
+ if (status !== undefined) (obj as unknown as Record<string, unknown>).status = status;
506
+ controller.enqueue(obj);
507
+ prevObjectId = objectId;
508
+ buffer = buffer.slice(r.offset);
509
+ } catch (e) {
510
+ if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
511
+ break;
512
+ }
513
+ controller.error(e);
514
+ return;
515
+ }
516
+ }
517
+ },
518
+
519
+ flush(controller) {
520
+ if (buffer.length > 0) {
521
+ controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
522
+ }
523
+ },
524
+ });
525
+ }
526
+
527
+ /**
528
+ * Create a TransformStream that decodes a fetch data stream.
529
+ * First emits a FetchStreamHeader, then emits FetchObjectPayload events.
530
+ * Draft-14 fetch: type 0x05, per-object has all fields.
531
+ */
532
+ export function createFetchStreamDecoder(): TransformStream<
533
+ Uint8Array,
534
+ FetchStreamHeader | ObjectPayload
535
+ > {
536
+ let buffer = new Uint8Array(0);
537
+ let headerEmitted = false;
538
+
539
+ return new TransformStream<Uint8Array, FetchStreamHeader | ObjectPayload>({
540
+ transform(chunk, controller) {
541
+ const newBuffer = new Uint8Array(buffer.length + chunk.length);
542
+ newBuffer.set(buffer, 0);
543
+ newBuffer.set(chunk, buffer.length);
544
+ buffer = newBuffer;
545
+
546
+ if (!headerEmitted) {
547
+ try {
548
+ const r = new BufferReader(buffer);
549
+ const streamType = r.readVarInt();
550
+ if (streamType !== FETCH_STREAM_TYPE) {
551
+ controller.error(
552
+ new DecodeError(
553
+ "CONSTRAINT_VIOLATION",
554
+ `Expected fetch stream type 0x05, got 0x${streamType.toString(16)}`,
555
+ 0,
556
+ ),
557
+ );
558
+ return;
559
+ }
560
+ const requestId = r.readVarInt();
561
+
562
+ controller.enqueue({ type: "fetch_header", requestId });
563
+ headerEmitted = true;
564
+ buffer = buffer.slice(r.offset);
565
+ } catch (e) {
566
+ if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
567
+ return;
568
+ }
569
+ controller.error(e);
570
+ return;
571
+ }
572
+ }
573
+
574
+ while (buffer.length > 0) {
575
+ try {
576
+ const r = new BufferReader(buffer);
577
+ const byteOffset = r.offset;
578
+ const groupId = r.readVarInt();
579
+ const subgroupId = r.readVarInt();
580
+ const objectId = r.readVarInt();
581
+ const publisherPriority = r.readUint8();
582
+ const extLen = Number(r.readVarInt());
583
+ const extensionData = extLen > 0 ? r.readBytes(extLen) : new Uint8Array(0);
584
+ const payloadLength = Number(r.readVarInt());
585
+ let payload: Uint8Array;
586
+ let status: bigint | undefined;
587
+ let payloadByteOffset: number;
588
+ if (payloadLength === 0) {
589
+ status = r.readVarInt();
590
+ payloadByteOffset = r.offset;
591
+ payload = new Uint8Array(0);
592
+ } else {
593
+ payloadByteOffset = r.offset;
594
+ payload = r.readBytes(payloadLength);
595
+ }
596
+ const obj: FetchObjectPayload = {
597
+ type: "object",
598
+ byteOffset,
599
+ payloadByteOffset,
600
+ groupId,
601
+ subgroupId,
602
+ objectId,
603
+ publisherPriority,
604
+ payloadLength,
605
+ payload,
606
+ extensionData,
607
+ };
608
+ if (status !== undefined) (obj as unknown as Record<string, unknown>).status = status;
609
+ controller.enqueue(obj);
610
+ buffer = buffer.slice(r.offset);
611
+ } catch (e) {
612
+ if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
613
+ break;
614
+ }
615
+ controller.error(e);
616
+ return;
617
+ }
618
+ }
619
+ },
620
+
621
+ flush(controller) {
622
+ if (buffer.length > 0) {
623
+ controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
624
+ }
625
+ },
626
+ });
627
+ }
628
+
629
+ /**
630
+ * Create a unified auto-detecting data stream decoder.
631
+ * Reads the stream type varint: 0x10-0x1D = subgroup, 0x05 = fetch.
632
+ */
633
+ export function createDataStreamDecoder(): TransformStream<Uint8Array, DataStreamEvent> {
634
+ let buffer = new Uint8Array(0);
635
+ let detectedType: "subgroup" | "fetch" | null = null;
636
+ let headerEmitted = false;
637
+ let extensionsPresent = false;
638
+ let prevObjectId = -1n;
639
+ let firstObject = true;
640
+
641
+ return new TransformStream<Uint8Array, DataStreamEvent>({
642
+ transform(chunk, controller) {
643
+ const newBuffer = new Uint8Array(buffer.length + chunk.length);
644
+ newBuffer.set(buffer, 0);
645
+ newBuffer.set(chunk, buffer.length);
646
+ buffer = newBuffer;
647
+
648
+ if (detectedType === null) {
649
+ try {
650
+ const r = new BufferReader(buffer);
651
+ const streamType = Number(r.readVarInt());
652
+ if (isValidSubgroupType(streamType)) {
653
+ detectedType = "subgroup";
654
+ } else if (streamType === 0x05) {
655
+ detectedType = "fetch";
656
+ } else {
657
+ controller.error(
658
+ new DecodeError(
659
+ "CONSTRAINT_VIOLATION",
660
+ `Unknown data stream type: 0x${streamType.toString(16)}`,
661
+ 0,
662
+ ),
663
+ );
664
+ return;
665
+ }
666
+ } catch (e) {
667
+ if (e instanceof DecodeError && e.code === "UNEXPECTED_END") {
668
+ return;
669
+ }
670
+ controller.error(e);
671
+ return;
672
+ }
673
+ }
674
+
675
+ if (detectedType === "subgroup") {
676
+ if (!headerEmitted) {
677
+ try {
678
+ const r = new BufferReader(buffer);
679
+ const streamType = Number(r.readVarInt());
680
+ extensionsPresent = (streamType & 0x01) !== 0;
681
+ const hasSubgroupField = (streamType & 0x04) !== 0;
682
+ const trackAlias = r.readVarInt();
683
+ const groupId = r.readVarInt();
684
+ let subgroupId = 0n;
685
+ if (hasSubgroupField) subgroupId = r.readVarInt();
686
+ const publisherPriority = r.readUint8();
687
+ controller.enqueue({
688
+ type: "subgroup_header",
689
+ headerType: streamType,
690
+ trackAlias,
691
+ groupId,
692
+ subgroupId,
693
+ publisherPriority,
694
+ });
695
+ headerEmitted = true;
696
+ buffer = buffer.slice(r.offset);
697
+ } catch (e) {
698
+ if (e instanceof DecodeError && e.code === "UNEXPECTED_END") return;
699
+ controller.error(e);
700
+ return;
701
+ }
702
+ }
703
+
704
+ while (buffer.length > 0) {
705
+ try {
706
+ const r = new BufferReader(buffer);
707
+ const byteOffset = r.offset;
708
+ const delta = r.readVarInt();
709
+ const objectId = firstObject ? delta : prevObjectId + 1n + delta;
710
+ firstObject = false;
711
+ let extensionData = new Uint8Array(0);
712
+ if (extensionsPresent) {
713
+ const extLen = Number(r.readVarInt());
714
+ extensionData = extLen > 0 ? r.readBytes(extLen) : new Uint8Array(0);
715
+ }
716
+ const payloadLength = Number(r.readVarInt());
717
+ let payload: Uint8Array;
718
+ let status: bigint | undefined;
719
+ let payloadByteOffset: number;
720
+ if (payloadLength === 0) {
721
+ status = r.readVarInt();
722
+ payloadByteOffset = r.offset;
723
+ payload = new Uint8Array(0);
724
+ } else {
725
+ payloadByteOffset = r.offset;
726
+ payload = r.readBytes(payloadLength);
727
+ }
728
+ const obj: ObjectPayload = { type: "object", byteOffset, payloadByteOffset, objectId, payloadLength, payload, extensionData };
729
+ if (status !== undefined)
730
+ (obj as unknown as Record<string, unknown>).status = status;
731
+ controller.enqueue(obj);
732
+ prevObjectId = objectId;
733
+ buffer = buffer.slice(r.offset);
734
+ } catch (e) {
735
+ if (e instanceof DecodeError && e.code === "UNEXPECTED_END") break;
736
+ controller.error(e);
737
+ return;
738
+ }
739
+ }
740
+ } else {
741
+ if (!headerEmitted) {
742
+ try {
743
+ const r = new BufferReader(buffer);
744
+ r.readVarInt(); // stream type (0x05)
745
+ const requestId = r.readVarInt();
746
+ controller.enqueue({ type: "fetch_header", requestId });
747
+ headerEmitted = true;
748
+ buffer = buffer.slice(r.offset);
749
+ } catch (e) {
750
+ if (e instanceof DecodeError && e.code === "UNEXPECTED_END") return;
751
+ controller.error(e);
752
+ return;
753
+ }
754
+ }
755
+
756
+ while (buffer.length > 0) {
757
+ try {
758
+ const r = new BufferReader(buffer);
759
+ const byteOffset = r.offset;
760
+ const groupId = r.readVarInt();
761
+ const subgroupId = r.readVarInt();
762
+ const objectId = r.readVarInt();
763
+ const publisherPriority = r.readUint8();
764
+ const extLen = Number(r.readVarInt());
765
+ const extensionData = extLen > 0 ? r.readBytes(extLen) : new Uint8Array(0);
766
+ const payloadLength = Number(r.readVarInt());
767
+ let payload: Uint8Array;
768
+ let status: bigint | undefined;
769
+ let payloadByteOffset: number;
770
+ if (payloadLength === 0) {
771
+ status = r.readVarInt();
772
+ payloadByteOffset = r.offset;
773
+ payload = new Uint8Array(0);
774
+ } else {
775
+ payloadByteOffset = r.offset;
776
+ payload = r.readBytes(payloadLength);
777
+ }
778
+ const obj: ObjectPayload = { type: "object", byteOffset, payloadByteOffset, objectId, payloadLength, payload, extensionData };
779
+ if (status !== undefined)
780
+ (obj as unknown as Record<string, unknown>).status = status;
781
+ controller.enqueue(obj);
782
+ buffer = buffer.slice(r.offset);
783
+ } catch (e) {
784
+ if (e instanceof DecodeError && e.code === "UNEXPECTED_END") break;
785
+ controller.error(e);
786
+ return;
787
+ }
788
+ }
789
+ }
790
+ },
791
+
792
+ flush(controller) {
793
+ if (buffer.length > 0) {
794
+ controller.error(new DecodeError("UNEXPECTED_END", "Stream ended with incomplete data", 0));
795
+ }
796
+ },
797
+ });
798
+ }