@moqtap/codec 0.2.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +100 -99
  3. package/dist/{chunk-RZHAPEXO.js → chunk-2A57DRXV.js} +36 -10
  4. package/dist/{chunk-73MWUKSJ.js → chunk-2UTVXWFF.js} +190 -102
  5. package/dist/{chunk-JTVCOMBI.cjs → chunk-3XKO6PCR.cjs} +290 -183
  6. package/dist/{chunk-ACQ4CUJP.cjs → chunk-4BDEU3D4.cjs} +237 -158
  7. package/dist/{chunk-4N4INRE7.cjs → chunk-4HBKHNU2.cjs} +144 -110
  8. package/dist/{chunk-2ZT6CVSE.js → chunk-4IVZZOY3.js} +269 -162
  9. package/dist/{chunk-GLBQDG4L.cjs → chunk-5O764MBD.cjs} +508 -117
  10. package/dist/chunk-7KBAWOBA.js +1212 -0
  11. package/dist/{chunk-JSQM2MG3.js → chunk-7QOPNSDF.js} +44 -12
  12. package/dist/{chunk-SYHW3FLI.cjs → chunk-7RE6KSIY.cjs} +28 -8
  13. package/dist/{chunk-YG5KJESI.js → chunk-AY6IAHUM.js} +28 -8
  14. package/dist/{chunk-EFM5T7OM.js → chunk-BLQDWOSG.js} +36 -10
  15. package/dist/{chunk-UYXTY6ZQ.cjs → chunk-E65QKRSN.cjs} +20 -12
  16. package/dist/{chunk-BISI45MN.cjs → chunk-EAHE3IOG.cjs} +44 -12
  17. package/dist/{chunk-PZBPH2D7.js → chunk-GCBFHZW6.js} +216 -137
  18. package/dist/{chunk-GXEW4COZ.cjs → chunk-H5NSL4MO.cjs} +36 -10
  19. package/dist/chunk-HZHSO7EW.cjs +1212 -0
  20. package/dist/{chunk-KZCYQ7ED.cjs → chunk-IILNSDEQ.cjs} +69 -41
  21. package/dist/{chunk-4XYGE53S.cjs → chunk-J3XCPBW3.cjs} +36 -10
  22. package/dist/{chunk-6AEHWULA.cjs → chunk-JKOEJZ5B.cjs} +28 -8
  23. package/dist/{chunk-RUPCJTC3.cjs → chunk-JL3NEW3O.cjs} +23 -1
  24. package/dist/{chunk-G7GI7LJA.js → chunk-LORZMJJB.js} +36 -10
  25. package/dist/{chunk-DUBCL3WF.cjs → chunk-LV5C6MEC.cjs} +36 -10
  26. package/dist/{chunk-ENURAVHI.cjs → chunk-MYXAD5JC.cjs} +44 -12
  27. package/dist/{chunk-FXZ2MYKJ.js → chunk-MZ7HUCGJ.js} +20 -12
  28. package/dist/{chunk-S74DWJE2.cjs → chunk-OKG2HT25.cjs} +277 -88
  29. package/dist/{chunk-BGWGVINJ.cjs → chunk-PKEOQSSZ.cjs} +144 -110
  30. package/dist/{chunk-2GODRVT5.js → chunk-Q46ZURKX.js} +325 -48
  31. package/dist/{chunk-UR6JKS56.js → chunk-Q7IGWV3P.js} +41 -9
  32. package/dist/{chunk-XSNX2IUJ.js → chunk-RW4UG7CN.js} +121 -87
  33. package/dist/{chunk-DWK5ZQZ4.js → chunk-RZTLQAKF.js} +28 -8
  34. package/dist/{chunk-UNS34PTA.cjs → chunk-S6IPIN66.cjs} +44 -12
  35. package/dist/{chunk-YIG2C3LF.cjs → chunk-SDWRXXOO.cjs} +214 -126
  36. package/dist/{chunk-CEH7ESNC.js → chunk-SHMA4PBY.js} +121 -87
  37. package/dist/{chunk-MC7W6PMI.js → chunk-U3ZVLT5L.js} +483 -135
  38. package/dist/{chunk-VJUUZ4W2.cjs → chunk-UJU63EFY.cjs} +374 -97
  39. package/dist/{chunk-7L43FE6P.js → chunk-VOU7PNHI.js} +23 -1
  40. package/dist/{chunk-E6E3NQYU.js → chunk-WRHGCVYN.js} +44 -12
  41. package/dist/{chunk-FPISPJ5N.cjs → chunk-XNWYLVGU.cjs} +529 -181
  42. package/dist/{chunk-U3IPZYPX.js → chunk-XS77RBY7.js} +228 -39
  43. package/dist/{chunk-JGG7CMSZ.cjs → chunk-XZE5R57R.cjs} +144 -110
  44. package/dist/{chunk-77MNXX3M.js → chunk-Y6KCSM3V.js} +121 -87
  45. package/dist/{chunk-TLYNOOQP.cjs → chunk-YTPZZI2M.cjs} +41 -9
  46. package/dist/{chunk-7DUBLRXC.js → chunk-YWRCSQBA.js} +44 -12
  47. package/dist/{chunk-MRJWLGYH.js → chunk-Z3VKP3PJ.js} +69 -41
  48. package/dist/{chunk-E6P74GDT.js → chunk-Z6U26IRI.js} +464 -73
  49. package/dist/{codec-FvGCxIhr.d.ts → codec-25u4_1HS.d.ts} +4 -4
  50. package/dist/{codec-DRcsBCsb.d.ts → codec-3Ppy_5Gd.d.ts} +4 -4
  51. package/dist/{codec-BdVMRMOI.d.ts → codec-BB0U8MF2.d.cts} +4 -4
  52. package/dist/{codec-B2cH-f5V.d.cts → codec-BHHfBTnV.d.ts} +4 -4
  53. package/dist/{codec-B5K73Bdj.d.ts → codec-BN6jk0Td.d.cts} +4 -4
  54. package/dist/{codec-R8GrCPt2.d.ts → codec-BU0gaSZm.d.ts} +4 -4
  55. package/dist/{codec-Bq-tLtfP.d.ts → codec-C-Yk2RNa.d.ts} +4 -4
  56. package/dist/codec-CFWQY9Lj.d.cts +18 -0
  57. package/dist/{codec-CPlK3Pi5.d.ts → codec-COy4uuPO.d.cts} +4 -4
  58. package/dist/codec-CewFCsEy.d.ts +18 -0
  59. package/dist/{codec-KXHvXZVb.d.cts → codec-Ck7ZwFF1.d.cts} +4 -4
  60. package/dist/{codec-DZhZSIii.d.cts → codec-D2QVSH9D.d.ts} +4 -4
  61. package/dist/{codec-BwFgpeQu.d.ts → codec-DDUBJGn0.d.cts} +4 -4
  62. package/dist/{codec-BFeliJFc.d.ts → codec-DNfml-se.d.ts} +4 -4
  63. package/dist/{codec-C4n1PS09.d.cts → codec-DoOGjjDq.d.cts} +4 -4
  64. package/dist/{codec-Bap882Fh.d.cts → codec-J7ekOSMc.d.ts} +4 -4
  65. package/dist/{codec-SKBeHQk7.d.ts → codec-R9TJCq-E.d.cts} +4 -4
  66. package/dist/{codec-DNUIgLqc.d.cts → codec-ZwV-Njt6.d.ts} +4 -4
  67. package/dist/{codec-HgBgHkFI.d.cts → codec-j819z_hL.d.cts} +4 -4
  68. package/dist/{codec-DY4QH364.d.cts → codec-w8z2j_uo.d.cts} +4 -4
  69. package/dist/{codec-CPvPq0sb.d.cts → codec-wtt6WF1K.d.ts} +4 -4
  70. package/dist/{codec-BUMjz0J4.d.cts → codec-z6_2PSzi.d.cts} +4 -4
  71. package/dist/draft10-session.cjs +2 -2
  72. package/dist/draft10-session.d.cts +6 -6
  73. package/dist/draft10-session.d.ts +6 -6
  74. package/dist/draft10-session.js +1 -1
  75. package/dist/draft10.cjs +8 -5
  76. package/dist/draft10.d.cts +14 -12
  77. package/dist/draft10.d.ts +14 -12
  78. package/dist/draft10.js +16 -13
  79. package/dist/draft11-session.cjs +2 -2
  80. package/dist/draft11-session.d.cts +6 -6
  81. package/dist/draft11-session.d.ts +6 -6
  82. package/dist/draft11-session.js +1 -1
  83. package/dist/draft11.cjs +8 -5
  84. package/dist/draft11.d.cts +14 -12
  85. package/dist/draft11.d.ts +14 -12
  86. package/dist/draft11.js +16 -13
  87. package/dist/draft12-session.cjs +2 -2
  88. package/dist/draft12-session.d.cts +6 -6
  89. package/dist/draft12-session.d.ts +6 -6
  90. package/dist/draft12-session.js +1 -1
  91. package/dist/draft12.cjs +8 -5
  92. package/dist/draft12.d.cts +16 -14
  93. package/dist/draft12.d.ts +16 -14
  94. package/dist/draft12.js +16 -13
  95. package/dist/draft13-session.cjs +2 -2
  96. package/dist/draft13-session.d.cts +6 -6
  97. package/dist/draft13-session.d.ts +6 -6
  98. package/dist/draft13-session.js +1 -1
  99. package/dist/draft13.cjs +8 -5
  100. package/dist/draft13.d.cts +16 -14
  101. package/dist/draft13.d.ts +16 -14
  102. package/dist/draft13.js +16 -13
  103. package/dist/draft14-session.cjs +2 -2
  104. package/dist/draft14-session.d.cts +6 -6
  105. package/dist/draft14-session.d.ts +6 -6
  106. package/dist/draft14-session.js +1 -1
  107. package/dist/draft14.cjs +14 -5
  108. package/dist/draft14.d.cts +14 -12
  109. package/dist/draft14.d.ts +14 -12
  110. package/dist/draft14.js +13 -4
  111. package/dist/draft15-session.cjs +2 -2
  112. package/dist/draft15-session.d.cts +6 -6
  113. package/dist/draft15-session.d.ts +6 -6
  114. package/dist/draft15-session.js +1 -1
  115. package/dist/draft15.cjs +8 -5
  116. package/dist/draft15.d.cts +14 -12
  117. package/dist/draft15.d.ts +14 -12
  118. package/dist/draft15.js +16 -13
  119. package/dist/draft16-session.cjs +2 -2
  120. package/dist/draft16-session.d.cts +6 -6
  121. package/dist/draft16-session.d.ts +6 -6
  122. package/dist/draft16-session.js +1 -1
  123. package/dist/draft16.cjs +8 -5
  124. package/dist/draft16.d.cts +14 -12
  125. package/dist/draft16.d.ts +14 -12
  126. package/dist/draft16.js +16 -13
  127. package/dist/draft17-session.cjs +2 -2
  128. package/dist/draft17-session.d.cts +7 -7
  129. package/dist/draft17-session.d.ts +7 -7
  130. package/dist/draft17-session.js +1 -1
  131. package/dist/draft17.cjs +8 -5
  132. package/dist/draft17.d.cts +11 -9
  133. package/dist/draft17.d.ts +11 -9
  134. package/dist/draft17.js +16 -13
  135. package/dist/draft7-session.cjs +2 -2
  136. package/dist/draft7-session.d.cts +6 -5
  137. package/dist/draft7-session.d.ts +6 -5
  138. package/dist/draft7-session.js +1 -1
  139. package/dist/draft7.cjs +71 -14
  140. package/dist/draft7.d.cts +53 -134
  141. package/dist/draft7.d.ts +53 -134
  142. package/dist/draft7.js +76 -19
  143. package/dist/draft8-session.cjs +2 -2
  144. package/dist/draft8-session.d.cts +6 -6
  145. package/dist/draft8-session.d.ts +6 -6
  146. package/dist/draft8-session.js +1 -1
  147. package/dist/draft8.cjs +8 -5
  148. package/dist/draft8.d.cts +14 -12
  149. package/dist/draft8.d.ts +14 -12
  150. package/dist/draft8.js +7 -4
  151. package/dist/draft9-session.cjs +2 -2
  152. package/dist/draft9-session.d.cts +6 -6
  153. package/dist/draft9-session.d.ts +6 -6
  154. package/dist/draft9-session.js +1 -1
  155. package/dist/draft9.cjs +8 -5
  156. package/dist/draft9.d.cts +14 -12
  157. package/dist/draft9.d.ts +14 -12
  158. package/dist/draft9.js +7 -4
  159. package/dist/index.cjs +52 -74
  160. package/dist/index.d.cts +41 -60
  161. package/dist/index.d.ts +41 -60
  162. package/dist/index.js +40 -62
  163. package/dist/{session-types-CJIFbTPd.d.ts → session-types-C7UONex5.d.cts} +28 -27
  164. package/dist/{session-types-Cbq8IGCP.d.cts → session-types-X-IYEGoG.d.ts} +28 -27
  165. package/dist/session.cjs +46 -13
  166. package/dist/session.d.cts +28 -9
  167. package/dist/session.d.ts +28 -9
  168. package/dist/session.js +46 -13
  169. package/dist/{types-DxSFvL2b.d.cts → types--Q7_DcvP.d.cts} +43 -39
  170. package/dist/{types-DxSFvL2b.d.ts → types--Q7_DcvP.d.ts} +43 -39
  171. package/dist/{types-B0FT5Qs2.d.ts → types-0IWbU9Z_.d.cts} +36 -36
  172. package/dist/{types-B0FT5Qs2.d.cts → types-0IWbU9Z_.d.ts} +36 -36
  173. package/dist/{types-gQsr0AAA.d.cts → types-B3g5G9KP.d.cts} +36 -36
  174. package/dist/{types-gQsr0AAA.d.ts → types-B3g5G9KP.d.ts} +36 -36
  175. package/dist/{types-Pme7sua0.d.cts → types-BFpFNM_m.d.cts} +57 -32
  176. package/dist/{types-Pme7sua0.d.ts → types-BFpFNM_m.d.ts} +57 -32
  177. package/dist/{types-8gUGeMgs.d.ts → types-Br7fm2mf.d.cts} +48 -26
  178. package/dist/{types-8gUGeMgs.d.cts → types-Br7fm2mf.d.ts} +48 -26
  179. package/dist/{types-BeAVNU-F.d.cts → types-C2qKTRR_.d.cts} +50 -45
  180. package/dist/{types-BeAVNU-F.d.ts → types-C2qKTRR_.d.ts} +50 -45
  181. package/dist/{types-DKpsfD3i.d.cts → types-DEaypVsD.d.cts} +115 -55
  182. package/dist/{types-DKpsfD3i.d.ts → types-DEaypVsD.d.ts} +115 -55
  183. package/dist/types-Dl4IaAHR.d.cts +282 -0
  184. package/dist/types-Dl4IaAHR.d.ts +282 -0
  185. package/dist/{types-CDa7F5ct.d.cts → types-DrQpTW1G.d.cts} +58 -50
  186. package/dist/{types-CDa7F5ct.d.ts → types-DrQpTW1G.d.ts} +58 -50
  187. package/dist/types-DuIO7cWK.d.cts +25 -0
  188. package/dist/types-DuIO7cWK.d.ts +25 -0
  189. package/dist/{types-B9A2g05r.d.cts → types-DuxfOYiO.d.cts} +47 -31
  190. package/dist/{types-B9A2g05r.d.ts → types-DuxfOYiO.d.ts} +47 -31
  191. package/dist/{types-D1dI_oTX.d.cts → types-jV1yDDBA.d.cts} +36 -36
  192. package/dist/{types-D1dI_oTX.d.ts → types-jV1yDDBA.d.ts} +36 -36
  193. package/package.json +192 -192
  194. package/src/core/buffer-reader.ts +130 -130
  195. package/src/core/buffer-writer.ts +100 -100
  196. package/src/core/errors.ts +1 -1
  197. package/src/core/hex.ts +21 -21
  198. package/src/core/session-types.ts +61 -59
  199. package/src/core/types.ts +18 -361
  200. package/src/drafts/draft07/codec.ts +1058 -938
  201. package/src/drafts/draft07/data-streams.ts +240 -240
  202. package/src/drafts/draft07/index.ts +124 -89
  203. package/src/drafts/draft07/messages.ts +76 -42
  204. package/src/drafts/draft07/rules.ts +107 -101
  205. package/src/drafts/draft07/session-fsm.ts +315 -287
  206. package/src/drafts/draft07/session.ts +8 -6
  207. package/src/drafts/draft07/types.ts +406 -72
  208. package/src/drafts/draft07/varint.ts +51 -51
  209. package/src/drafts/draft08/codec.ts +985 -953
  210. package/src/drafts/draft08/data-streams.ts +363 -359
  211. package/src/drafts/draft08/index.ts +10 -9
  212. package/src/drafts/draft08/messages.ts +59 -59
  213. package/src/drafts/draft08/rules.ts +73 -73
  214. package/src/drafts/draft08/session-fsm.ts +335 -303
  215. package/src/drafts/draft08/session.ts +6 -7
  216. package/src/drafts/draft08/types.ts +380 -384
  217. package/src/drafts/draft09/codec.ts +977 -945
  218. package/src/drafts/draft09/data-streams.ts +336 -332
  219. package/src/drafts/draft09/index.ts +10 -9
  220. package/src/drafts/draft09/messages.ts +59 -59
  221. package/src/drafts/draft09/rules.ts +73 -73
  222. package/src/drafts/draft09/session-fsm.ts +335 -303
  223. package/src/drafts/draft09/session.ts +6 -7
  224. package/src/drafts/draft09/types.ts +380 -384
  225. package/src/drafts/draft10/codec.ts +977 -945
  226. package/src/drafts/draft10/data-streams.ts +336 -332
  227. package/src/drafts/draft10/index.ts +10 -9
  228. package/src/drafts/draft10/messages.ts +59 -59
  229. package/src/drafts/draft10/rules.ts +73 -73
  230. package/src/drafts/draft10/session-fsm.ts +335 -303
  231. package/src/drafts/draft10/session.ts +6 -7
  232. package/src/drafts/draft10/types.ts +380 -384
  233. package/src/drafts/draft11/codec.ts +1054 -988
  234. package/src/drafts/draft11/data-streams.ts +316 -269
  235. package/src/drafts/draft11/index.ts +10 -9
  236. package/src/drafts/draft11/messages.ts +60 -59
  237. package/src/drafts/draft11/rules.ts +73 -73
  238. package/src/drafts/draft11/session-fsm.ts +359 -333
  239. package/src/drafts/draft11/session.ts +6 -7
  240. package/src/drafts/draft11/types.ts +385 -381
  241. package/src/drafts/draft12/codec.ts +1178 -1122
  242. package/src/drafts/draft12/data-streams.ts +324 -275
  243. package/src/drafts/draft12/index.ts +10 -9
  244. package/src/drafts/draft12/messages.ts +67 -66
  245. package/src/drafts/draft12/rules.ts +79 -79
  246. package/src/drafts/draft12/session-fsm.ts +384 -358
  247. package/src/drafts/draft12/session.ts +6 -7
  248. package/src/drafts/draft12/types.ts +424 -419
  249. package/src/drafts/draft13/codec.ts +1296 -1206
  250. package/src/drafts/draft13/data-streams.ts +326 -275
  251. package/src/drafts/draft13/index.ts +10 -9
  252. package/src/drafts/draft13/messages.ts +73 -68
  253. package/src/drafts/draft13/rules.ts +81 -81
  254. package/src/drafts/draft13/session-fsm.ts +392 -366
  255. package/src/drafts/draft13/session.ts +6 -7
  256. package/src/drafts/draft13/types.ts +447 -438
  257. package/src/drafts/draft14/codec.ts +1347 -1043
  258. package/src/drafts/draft14/data-streams.ts +831 -813
  259. package/src/drafts/draft14/index.ts +17 -9
  260. package/src/drafts/draft14/messages.ts +65 -65
  261. package/src/drafts/draft14/rules.ts +81 -81
  262. package/src/drafts/draft14/session-fsm.ts +415 -405
  263. package/src/drafts/draft14/session.ts +6 -7
  264. package/src/drafts/draft14/types.ts +451 -381
  265. package/src/drafts/draft15/codec.ts +1138 -978
  266. package/src/drafts/draft15/data-streams.ts +842 -794
  267. package/src/drafts/draft15/index.ts +10 -9
  268. package/src/drafts/draft15/messages.ts +54 -53
  269. package/src/drafts/draft15/rules.ts +67 -67
  270. package/src/drafts/draft15/session-fsm.ts +319 -299
  271. package/src/drafts/draft15/session.ts +6 -7
  272. package/src/drafts/draft15/types.ts +357 -339
  273. package/src/drafts/draft16/codec.ts +1242 -966
  274. package/src/drafts/draft16/data-streams.ts +835 -789
  275. package/src/drafts/draft16/index.ts +10 -9
  276. package/src/drafts/draft16/messages.ts +56 -55
  277. package/src/drafts/draft16/rules.ts +69 -69
  278. package/src/drafts/draft16/session-fsm.ts +319 -299
  279. package/src/drafts/draft16/session.ts +6 -7
  280. package/src/drafts/draft16/types.ts +386 -357
  281. package/src/drafts/draft17/codec.ts +1209 -971
  282. package/src/drafts/draft17/data-streams.ts +969 -758
  283. package/src/drafts/draft17/index.ts +9 -7
  284. package/src/drafts/draft17/messages.ts +43 -42
  285. package/src/drafts/draft17/rules.ts +58 -58
  286. package/src/drafts/draft17/session-fsm.ts +248 -216
  287. package/src/drafts/draft17/session.ts +5 -5
  288. package/src/drafts/draft17/types.ts +337 -313
  289. package/src/index.ts +85 -274
  290. package/src/session.ts +62 -23
  291. package/dist/chunk-FZDIEHQL.cjs +0 -1042
  292. package/dist/chunk-HDWJ2GDE.js +0 -24
  293. package/dist/chunk-KNDYS3DK.cjs +0 -24
  294. package/dist/chunk-N2KBF5Q2.js +0 -1042
  295. package/dist/types-QNXoxC9Y.d.cts +0 -236
  296. package/dist/types-QNXoxC9Y.d.ts +0 -236
  297. package/src/drafts/draft07/announce-fsm.ts +0 -2
  298. package/src/drafts/draft07/parameters.ts +0 -12
  299. package/src/drafts/draft07/subscription-fsm.ts +0 -3
@@ -1,8 +1,11 @@
1
- import type { SessionState, SessionStateOptions } from "../../core/session-types.js";
2
- import { SessionFSM } from "./session-fsm.js";
1
+ import type { SessionState, SessionStateOptionsRole } from '../../core/session-types.js'
2
+ import { Draft07SessionFSM } from './session-fsm.js'
3
+ import type { Draft07Message, Draft07MessageType } from './types.js'
3
4
 
4
- export function createDraft07SessionState(options: SessionStateOptions): SessionState {
5
- return new SessionFSM(options.role);
5
+ export function createDraft07SessionState(
6
+ role: SessionStateOptionsRole,
7
+ ): SessionState<Draft07Message, Draft07MessageType> {
8
+ return new Draft07SessionFSM(role)
6
9
  }
7
10
 
8
11
  export type {
@@ -12,10 +15,9 @@ export type {
12
15
  ProtocolViolationCode,
13
16
  SessionPhase,
14
17
  SessionState,
15
- SessionStateOptions,
16
18
  SideEffect,
17
19
  SubscriptionPhase,
18
20
  SubscriptionState,
19
21
  TransitionResult,
20
22
  ValidationResult,
21
- } from "../../core/session-types.js";
23
+ } from '../../core/session-types.js'
@@ -1,72 +1,406 @@
1
- // Draft-07 data stream types
2
- // Matches the API pattern of draft-08+ data stream types
3
-
4
- export interface ObjectPayload {
5
- readonly type: "object";
6
- readonly objectId: bigint;
7
- readonly payloadLength: number;
8
- readonly status?: bigint;
9
- readonly payload: Uint8Array;
10
- readonly byteOffset: number;
11
- readonly payloadByteOffset: number;
12
- }
13
-
14
- export interface SubgroupStream {
15
- readonly type: "subgroup";
16
- readonly streamTypeId: 0x04;
17
- readonly trackAlias: bigint;
18
- readonly groupId: bigint;
19
- readonly subgroupId: bigint;
20
- readonly publisherPriority: number;
21
- readonly objects: ObjectPayload[];
22
- }
23
-
24
- export interface DatagramObject {
25
- readonly type: "datagram";
26
- readonly streamTypeId: 0x01;
27
- readonly trackAlias: bigint;
28
- readonly groupId: bigint;
29
- readonly objectId: bigint;
30
- readonly publisherPriority: number;
31
- readonly payloadLength: number;
32
- readonly status?: bigint;
33
- readonly payload: Uint8Array;
34
- }
35
-
36
- export interface FetchObjectPayload {
37
- readonly type: "object";
38
- readonly groupId: bigint;
39
- readonly subgroupId: bigint;
40
- readonly objectId: bigint;
41
- readonly publisherPriority: number;
42
- readonly payloadLength: number;
43
- readonly status?: bigint;
44
- readonly payload: Uint8Array;
45
- readonly byteOffset: number;
46
- readonly payloadByteOffset: number;
47
- }
48
-
49
- export interface FetchStream {
50
- readonly type: "fetch";
51
- readonly subscribeId: bigint;
52
- readonly objects: FetchObjectPayload[];
53
- }
54
-
55
- export type Draft07DataStream = SubgroupStream | DatagramObject | FetchStream;
56
-
57
- // Streaming data stream decoder types
58
- export interface SubgroupStreamHeader {
59
- readonly type: "subgroup_header";
60
- readonly trackAlias: bigint;
61
- readonly groupId: bigint;
62
- readonly subgroupId: bigint;
63
- readonly publisherPriority: number;
64
- }
65
-
66
- export interface FetchStreamHeader {
67
- readonly type: "fetch_header";
68
- readonly subscribeId: bigint;
69
- }
70
-
71
- export type DataStreamHeader = SubgroupStreamHeader | FetchStreamHeader;
72
- export type DataStreamEvent = DataStreamHeader | ObjectPayload;
1
+ // Draft-07 message types
2
+ // Field names use snake_case to match test vector JSON
3
+
4
+ // Unknown parameter for passthrough
5
+ export interface UnknownParam {
6
+ readonly id: string // e.g. "0x21"
7
+ readonly length: number
8
+ readonly raw_hex: string
9
+ }
10
+
11
+ // Setup parameters (ROLE, PATH, MAX_SUBSCRIBE_ID)
12
+ export interface Draft07SetupParams {
13
+ role?: bigint // 0x00
14
+ path?: string // 0x01
15
+ max_subscribe_id?: bigint // 0x02
16
+ unknown?: UnknownParam[]
17
+ }
18
+
19
+ // Version-specific parameters
20
+ export interface Draft07Params {
21
+ authorization_info?: string // 0x02
22
+ delivery_timeout?: bigint // 0x03
23
+ max_cache_duration?: bigint // 0x04
24
+ unknown?: UnknownParam[]
25
+ }
26
+
27
+ // All Draft-07 message type tags
28
+ export type Draft07MessageType =
29
+ | 'client_setup'
30
+ | 'server_setup'
31
+ | 'subscribe'
32
+ | 'subscribe_ok'
33
+ | 'subscribe_error'
34
+ | 'subscribe_done'
35
+ | 'subscribe_update'
36
+ | 'unsubscribe'
37
+ | 'announce'
38
+ | 'announce_ok'
39
+ | 'announce_error'
40
+ | 'announce_cancel'
41
+ | 'unannounce'
42
+ | 'track_status_request'
43
+ | 'track_status'
44
+ | 'object_stream'
45
+ | 'object_datagram'
46
+ | 'stream_header_track'
47
+ | 'stream_header_group'
48
+ | 'stream_header_subgroup'
49
+ | 'goaway'
50
+ | 'subscribe_announces'
51
+ | 'subscribe_announces_ok'
52
+ | 'subscribe_announces_error'
53
+ | 'unsubscribe_announces'
54
+ | 'max_subscribe_id'
55
+ | 'fetch'
56
+ | 'fetch_ok'
57
+ | 'fetch_error'
58
+ | 'fetch_cancel'
59
+
60
+ // Base message interface
61
+ export interface Draft07BaseMessage {
62
+ readonly type: Draft07MessageType
63
+ }
64
+
65
+ // Setup messages
66
+ export interface ClientSetup extends Draft07BaseMessage {
67
+ readonly type: 'client_setup'
68
+ readonly supported_versions: bigint[]
69
+ readonly parameters: Draft07SetupParams
70
+ }
71
+
72
+ export interface ServerSetup extends Draft07BaseMessage {
73
+ readonly type: 'server_setup'
74
+ readonly selected_version: bigint
75
+ readonly parameters: Draft07SetupParams
76
+ }
77
+
78
+ // Subscribe messages
79
+ export interface Subscribe extends Draft07BaseMessage {
80
+ readonly type: 'subscribe'
81
+ readonly subscribe_id: bigint
82
+ readonly track_alias: bigint
83
+ readonly track_namespace: string[]
84
+ readonly track_name: string
85
+ readonly subscriber_priority: number
86
+ readonly group_order: number // uint8: 0=original, 1=ascending, 2=descending
87
+ readonly filter_type: bigint // varint: 1=latest_group, 2=latest_object, 3=absolute_start, 4=absolute_range
88
+ readonly start_group?: bigint
89
+ readonly start_object?: bigint
90
+ readonly end_group?: bigint
91
+ readonly end_object?: bigint
92
+ readonly parameters: Draft07Params
93
+ }
94
+
95
+ export interface SubscribeOk extends Draft07BaseMessage {
96
+ readonly type: 'subscribe_ok'
97
+ readonly subscribe_id: bigint
98
+ readonly expires: bigint
99
+ readonly group_order: number // uint8
100
+ readonly content_exists: number // uint8
101
+ readonly largest_group_id?: bigint
102
+ readonly largest_object_id?: bigint
103
+ readonly parameters: Draft07Params
104
+ }
105
+
106
+ export interface SubscribeError extends Draft07BaseMessage {
107
+ readonly type: 'subscribe_error'
108
+ readonly subscribe_id: bigint
109
+ readonly error_code: bigint
110
+ readonly reason_phrase: string
111
+ readonly track_alias: bigint
112
+ }
113
+
114
+ export interface SubscribeDone extends Draft07BaseMessage {
115
+ readonly type: 'subscribe_done'
116
+ readonly subscribe_id: bigint
117
+ readonly status_code: bigint
118
+ readonly reason_phrase: string
119
+ readonly content_exists: number // uint8
120
+ readonly final_group?: bigint
121
+ readonly final_object?: bigint
122
+ }
123
+
124
+ export interface SubscribeUpdate extends Draft07BaseMessage {
125
+ readonly type: 'subscribe_update'
126
+ readonly subscribe_id: bigint
127
+ readonly start_group: bigint
128
+ readonly start_object: bigint
129
+ readonly end_group: bigint
130
+ readonly end_object: bigint
131
+ readonly subscriber_priority: number
132
+ readonly parameters: Draft07Params
133
+ }
134
+
135
+ export interface Unsubscribe extends Draft07BaseMessage {
136
+ readonly type: 'unsubscribe'
137
+ readonly subscribe_id: bigint
138
+ }
139
+
140
+ // Announce messages
141
+ export interface Announce extends Draft07BaseMessage {
142
+ readonly type: 'announce'
143
+ readonly track_namespace: string[]
144
+ readonly parameters: Draft07Params
145
+ }
146
+
147
+ export interface AnnounceOk extends Draft07BaseMessage {
148
+ readonly type: 'announce_ok'
149
+ readonly track_namespace: string[]
150
+ }
151
+
152
+ export interface AnnounceError extends Draft07BaseMessage {
153
+ readonly type: 'announce_error'
154
+ readonly track_namespace: string[]
155
+ readonly error_code: bigint
156
+ readonly reason_phrase: string
157
+ }
158
+
159
+ export interface AnnounceCancel extends Draft07BaseMessage {
160
+ readonly type: 'announce_cancel'
161
+ readonly track_namespace: string[]
162
+ readonly error_code: bigint
163
+ readonly reason_phrase: string
164
+ }
165
+
166
+ export interface Unannounce extends Draft07BaseMessage {
167
+ readonly type: 'unannounce'
168
+ readonly track_namespace: string[]
169
+ }
170
+
171
+ // Track status
172
+ export interface TrackStatusRequest extends Draft07BaseMessage {
173
+ readonly type: 'track_status_request'
174
+ readonly track_namespace: string[]
175
+ readonly track_name: string
176
+ }
177
+
178
+ export interface TrackStatus extends Draft07BaseMessage {
179
+ readonly type: 'track_status'
180
+ readonly track_namespace: string[]
181
+ readonly track_name: string
182
+ readonly status_code: bigint
183
+ readonly last_group_id: bigint
184
+ readonly last_object_id: bigint
185
+ }
186
+
187
+ // Object/stream messages
188
+ export interface ObjectStream extends Draft07BaseMessage {
189
+ readonly type: 'object_stream'
190
+ readonly track_alias: bigint
191
+ readonly group_id: bigint
192
+ readonly object_id: bigint
193
+ readonly publisher_priority: number
194
+ readonly object_status?: number
195
+ readonly payload: Uint8Array
196
+ }
197
+
198
+ export interface ObjectDatagram extends Draft07BaseMessage {
199
+ readonly type: 'object_datagram'
200
+ readonly track_alias: bigint
201
+ readonly group_id: bigint
202
+ readonly object_id: bigint
203
+ readonly publisher_priority: number
204
+ readonly object_status?: number
205
+ readonly payload: Uint8Array
206
+ }
207
+
208
+ export interface StreamHeaderTrack extends Draft07BaseMessage {
209
+ readonly type: 'stream_header_track'
210
+ readonly track_alias: bigint
211
+ readonly publisher_priority: number
212
+ }
213
+
214
+ export interface StreamHeaderGroup extends Draft07BaseMessage {
215
+ readonly type: 'stream_header_group'
216
+ readonly track_alias: bigint
217
+ readonly group_id: bigint
218
+ readonly publisher_priority: number
219
+ }
220
+
221
+ export interface StreamHeaderSubgroup extends Draft07BaseMessage {
222
+ readonly type: 'stream_header_subgroup'
223
+ readonly track_alias: bigint
224
+ readonly group_id: bigint
225
+ readonly subgroup_id: bigint
226
+ readonly publisher_priority: number
227
+ }
228
+
229
+ // GoAway
230
+ export interface GoAway extends Draft07BaseMessage {
231
+ readonly type: 'goaway'
232
+ readonly new_session_uri: string
233
+ }
234
+
235
+ // Subscribe Announces
236
+ export interface SubscribeAnnounces extends Draft07BaseMessage {
237
+ readonly type: 'subscribe_announces'
238
+ readonly track_namespace_prefix: string[]
239
+ readonly parameters: Draft07Params
240
+ }
241
+
242
+ export interface SubscribeAnnouncesOk extends Draft07BaseMessage {
243
+ readonly type: 'subscribe_announces_ok'
244
+ readonly track_namespace_prefix: string[]
245
+ }
246
+
247
+ export interface SubscribeAnnouncesError extends Draft07BaseMessage {
248
+ readonly type: 'subscribe_announces_error'
249
+ readonly track_namespace_prefix: string[]
250
+ readonly error_code: bigint
251
+ readonly reason_phrase: string
252
+ }
253
+
254
+ // Unsubscribe Announces
255
+ export interface UnsubscribeAnnounces extends Draft07BaseMessage {
256
+ readonly type: 'unsubscribe_announces'
257
+ readonly track_namespace_prefix: string[]
258
+ }
259
+
260
+ // Max Subscribe ID
261
+ export interface MaxSubscribeId extends Draft07BaseMessage {
262
+ readonly type: 'max_subscribe_id'
263
+ readonly subscribe_id: bigint
264
+ }
265
+
266
+ // Fetch
267
+ export interface Fetch extends Draft07BaseMessage {
268
+ readonly type: 'fetch'
269
+ readonly subscribe_id: bigint
270
+ readonly track_namespace: string[]
271
+ readonly track_name: string
272
+ readonly subscriber_priority: number
273
+ readonly group_order: number // uint8
274
+ readonly start_group: bigint
275
+ readonly start_object: bigint
276
+ readonly end_group: bigint
277
+ readonly end_object: bigint
278
+ readonly parameters: Draft07Params
279
+ }
280
+
281
+ export interface FetchOk extends Draft07BaseMessage {
282
+ readonly type: 'fetch_ok'
283
+ readonly subscribe_id: bigint
284
+ readonly group_order: number // uint8
285
+ readonly end_of_track: number // uint8
286
+ readonly largest_group_id: bigint
287
+ readonly largest_object_id: bigint
288
+ readonly parameters: Draft07Params
289
+ }
290
+
291
+ export interface FetchError extends Draft07BaseMessage {
292
+ readonly type: 'fetch_error'
293
+ readonly subscribe_id: bigint
294
+ readonly error_code: bigint
295
+ readonly reason_phrase: string
296
+ }
297
+
298
+ export interface FetchCancel extends Draft07BaseMessage {
299
+ readonly type: 'fetch_cancel'
300
+ readonly subscribe_id: bigint
301
+ }
302
+
303
+ // Union type of all Draft-07 messages
304
+ export type Draft07Message =
305
+ | ClientSetup
306
+ | ServerSetup
307
+ | Subscribe
308
+ | SubscribeOk
309
+ | SubscribeError
310
+ | SubscribeDone
311
+ | SubscribeUpdate
312
+ | Unsubscribe
313
+ | Announce
314
+ | AnnounceOk
315
+ | AnnounceError
316
+ | AnnounceCancel
317
+ | Unannounce
318
+ | TrackStatusRequest
319
+ | TrackStatus
320
+ | ObjectStream
321
+ | ObjectDatagram
322
+ | StreamHeaderTrack
323
+ | StreamHeaderGroup
324
+ | StreamHeaderSubgroup
325
+ | GoAway
326
+ | SubscribeAnnounces
327
+ | SubscribeAnnouncesOk
328
+ | SubscribeAnnouncesError
329
+ | UnsubscribeAnnounces
330
+ | MaxSubscribeId
331
+ | Fetch
332
+ | FetchOk
333
+ | FetchError
334
+ | FetchCancel
335
+
336
+ // Draft-07 data stream types
337
+
338
+ export interface ObjectPayload {
339
+ readonly type: 'object'
340
+ readonly objectId: bigint
341
+ readonly payloadLength: number
342
+ readonly status?: bigint
343
+ readonly payload: Uint8Array
344
+ readonly byteOffset: number
345
+ readonly payloadByteOffset: number
346
+ }
347
+
348
+ export interface SubgroupStream {
349
+ readonly type: 'subgroup'
350
+ readonly streamTypeId: 0x04
351
+ readonly trackAlias: bigint
352
+ readonly groupId: bigint
353
+ readonly subgroupId: bigint
354
+ readonly publisherPriority: number
355
+ readonly objects: ObjectPayload[]
356
+ }
357
+
358
+ export interface DatagramObject {
359
+ readonly type: 'datagram'
360
+ readonly streamTypeId: 0x01
361
+ readonly trackAlias: bigint
362
+ readonly groupId: bigint
363
+ readonly objectId: bigint
364
+ readonly publisherPriority: number
365
+ readonly payloadLength: number
366
+ readonly status?: bigint
367
+ readonly payload: Uint8Array
368
+ }
369
+
370
+ export interface FetchObjectPayload {
371
+ readonly type: 'object'
372
+ readonly groupId: bigint
373
+ readonly subgroupId: bigint
374
+ readonly objectId: bigint
375
+ readonly publisherPriority: number
376
+ readonly payloadLength: number
377
+ readonly status?: bigint
378
+ readonly payload: Uint8Array
379
+ readonly byteOffset: number
380
+ readonly payloadByteOffset: number
381
+ }
382
+
383
+ export interface FetchStream {
384
+ readonly type: 'fetch'
385
+ readonly subscribeId: bigint
386
+ readonly objects: FetchObjectPayload[]
387
+ }
388
+
389
+ export type Draft07DataStream = SubgroupStream | DatagramObject | FetchStream
390
+
391
+ // Streaming data stream decoder types
392
+ export interface SubgroupStreamHeader {
393
+ readonly type: 'subgroup_header'
394
+ readonly trackAlias: bigint
395
+ readonly groupId: bigint
396
+ readonly subgroupId: bigint
397
+ readonly publisherPriority: number
398
+ }
399
+
400
+ export interface FetchStreamHeader {
401
+ readonly type: 'fetch_header'
402
+ readonly subscribeId: bigint
403
+ }
404
+
405
+ export type DataStreamHeader = SubgroupStreamHeader | FetchStreamHeader
406
+ export type DataStreamEvent = DataStreamHeader | ObjectPayload
@@ -1,51 +1,51 @@
1
- import { BufferReader } from "../../core/buffer-reader.js";
2
- import type { DecodeResult } from "../../core/types.js";
3
- import { DecodeError } from "../../core/types.js";
4
-
5
- export function encodeVarInt(value: number | bigint): Uint8Array {
6
- const v = BigInt(value);
7
- if (v < 0n) throw new Error("VarInt value must be non-negative");
8
-
9
- if (v < 0x40n) {
10
- const buf = new Uint8Array(1);
11
- buf[0] = Number(v);
12
- return buf;
13
- }
14
- if (v < 0x4000n) {
15
- const buf = new Uint8Array(2);
16
- const n = Number(v) | 0x4000;
17
- buf[0] = n >> 8;
18
- buf[1] = n & 0xff;
19
- return buf;
20
- }
21
- if (v < 0x40000000n) {
22
- const buf = new Uint8Array(4);
23
- const n = Number(v) | 0x80000000;
24
- buf[0] = (n >>> 24) & 0xff;
25
- buf[1] = (n >>> 16) & 0xff;
26
- buf[2] = (n >>> 8) & 0xff;
27
- buf[3] = n & 0xff;
28
- return buf;
29
- }
30
- if (v < 0x4000000000000000n) {
31
- const buf = new Uint8Array(8);
32
- const tagged = v | 0xc000000000000000n;
33
- const view = new DataView(buf.buffer);
34
- view.setBigUint64(0, tagged);
35
- return buf;
36
- }
37
- throw new Error("VarInt value exceeds 62-bit range");
38
- }
39
-
40
- export function decodeVarInt(bytes: Uint8Array, offset = 0): DecodeResult<bigint> {
41
- try {
42
- const reader = new BufferReader(bytes, offset);
43
- const value = reader.readVarInt();
44
- return { ok: true, value, bytesRead: reader.offset - offset };
45
- } catch (e) {
46
- if (e instanceof DecodeError) {
47
- return { ok: false, error: e };
48
- }
49
- throw e;
50
- }
51
- }
1
+ import { BufferReader } from '../../core/buffer-reader.js'
2
+ import type { DecodeResult } from '../../core/types.js'
3
+ import { DecodeError } from '../../core/types.js'
4
+
5
+ export function encodeVarInt(value: number | bigint): Uint8Array {
6
+ const v = BigInt(value)
7
+ if (v < 0n) throw new Error('VarInt value must be non-negative')
8
+
9
+ if (v < 0x40n) {
10
+ const buf = new Uint8Array(1)
11
+ buf[0] = Number(v)
12
+ return buf
13
+ }
14
+ if (v < 0x4000n) {
15
+ const buf = new Uint8Array(2)
16
+ const n = Number(v) | 0x4000
17
+ buf[0] = n >> 8
18
+ buf[1] = n & 0xff
19
+ return buf
20
+ }
21
+ if (v < 0x40000000n) {
22
+ const buf = new Uint8Array(4)
23
+ const n = Number(v) | 0x80000000
24
+ buf[0] = (n >>> 24) & 0xff
25
+ buf[1] = (n >>> 16) & 0xff
26
+ buf[2] = (n >>> 8) & 0xff
27
+ buf[3] = n & 0xff
28
+ return buf
29
+ }
30
+ if (v < 0x4000000000000000n) {
31
+ const buf = new Uint8Array(8)
32
+ const tagged = v | 0xc000000000000000n
33
+ const view = new DataView(buf.buffer)
34
+ view.setBigUint64(0, tagged)
35
+ return buf
36
+ }
37
+ throw new Error('VarInt value exceeds 62-bit range')
38
+ }
39
+
40
+ export function decodeVarInt(bytes: Uint8Array, offset = 0): DecodeResult<bigint> {
41
+ try {
42
+ const reader = new BufferReader(bytes, offset)
43
+ const value = reader.readVarInt()
44
+ return { ok: true, value, bytesRead: reader.offset - offset }
45
+ } catch (e) {
46
+ if (e instanceof DecodeError) {
47
+ return { ok: false, error: e }
48
+ }
49
+ throw e
50
+ }
51
+ }