@norskvideo/moq-net 0.1.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 (274) hide show
  1. package/README.md +70 -0
  2. package/announced.d.ts +45 -0
  3. package/announced.d.ts.map +1 -0
  4. package/announced.js +70 -0
  5. package/announced.js.map +1 -0
  6. package/bandwidth.d.ts +11 -0
  7. package/bandwidth.d.ts.map +1 -0
  8. package/bandwidth.js +7 -0
  9. package/bandwidth.js.map +1 -0
  10. package/broadcast.d.ts +39 -0
  11. package/broadcast.d.ts.map +1 -0
  12. package/broadcast.js +76 -0
  13. package/broadcast.js.map +1 -0
  14. package/connection/accept.d.ts +15 -0
  15. package/connection/accept.d.ts.map +1 -0
  16. package/connection/accept.js +137 -0
  17. package/connection/accept.js.map +1 -0
  18. package/connection/cert.test.d.ts +2 -0
  19. package/connection/cert.test.d.ts.map +1 -0
  20. package/connection/cert.test.js +26 -0
  21. package/connection/cert.test.js.map +1 -0
  22. package/connection/connect.d.ts +37 -0
  23. package/connection/connect.d.ts.map +1 -0
  24. package/connection/connect.js +348 -0
  25. package/connection/connect.js.map +1 -0
  26. package/connection/established.d.ts +30 -0
  27. package/connection/established.d.ts.map +1 -0
  28. package/connection/established.js +3 -0
  29. package/connection/established.js.map +1 -0
  30. package/connection/handshake.d.ts +10 -0
  31. package/connection/handshake.d.ts.map +1 -0
  32. package/connection/handshake.js +48 -0
  33. package/connection/handshake.js.map +1 -0
  34. package/connection/index.d.ts +5 -0
  35. package/connection/index.d.ts.map +1 -0
  36. package/connection/index.js +6 -0
  37. package/connection/index.js.map +1 -0
  38. package/connection/reload.d.ts +47 -0
  39. package/connection/reload.d.ts.map +1 -0
  40. package/connection/reload.js +137 -0
  41. package/connection/reload.js.map +1 -0
  42. package/group.d.ts +66 -0
  43. package/group.d.ts.map +1 -0
  44. package/group.js +135 -0
  45. package/group.js.map +1 -0
  46. package/group.test.d.ts +2 -0
  47. package/group.test.d.ts.map +1 -0
  48. package/group.test.js +66 -0
  49. package/group.test.js.map +1 -0
  50. package/ietf/adapter.d.ts +65 -0
  51. package/ietf/adapter.d.ts.map +1 -0
  52. package/ietf/adapter.js +626 -0
  53. package/ietf/adapter.js.map +1 -0
  54. package/ietf/connection.d.ts +65 -0
  55. package/ietf/connection.d.ts.map +1 -0
  56. package/ietf/connection.js +248 -0
  57. package/ietf/connection.js.map +1 -0
  58. package/ietf/control.d.ts +135 -0
  59. package/ietf/control.d.ts.map +1 -0
  60. package/ietf/control.js +242 -0
  61. package/ietf/control.js.map +1 -0
  62. package/ietf/fetch.d.ts +64 -0
  63. package/ietf/fetch.d.ts.map +1 -0
  64. package/ietf/fetch.js +100 -0
  65. package/ietf/fetch.js.map +1 -0
  66. package/ietf/goaway.d.ts +15 -0
  67. package/ietf/goaway.d.ts.map +1 -0
  68. package/ietf/goaway.js +34 -0
  69. package/ietf/goaway.js.map +1 -0
  70. package/ietf/ietf.test.d.ts +2 -0
  71. package/ietf/ietf.test.d.ts.map +1 -0
  72. package/ietf/ietf.test.js +873 -0
  73. package/ietf/ietf.test.js.map +1 -0
  74. package/ietf/index.d.ts +18 -0
  75. package/ietf/index.d.ts.map +1 -0
  76. package/ietf/index.js +19 -0
  77. package/ietf/index.js.map +1 -0
  78. package/ietf/message.d.ts +4 -0
  79. package/ietf/message.d.ts.map +1 -0
  80. package/ietf/message.js +54 -0
  81. package/ietf/message.js.map +1 -0
  82. package/ietf/namespace.d.ts +5 -0
  83. package/ietf/namespace.d.ts.map +1 -0
  84. package/ietf/namespace.js +27 -0
  85. package/ietf/namespace.js.map +1 -0
  86. package/ietf/object.d.ts +40 -0
  87. package/ietf/object.d.ts.map +1 -0
  88. package/ietf/object.js +160 -0
  89. package/ietf/object.js.map +1 -0
  90. package/ietf/parameters.d.ts +56 -0
  91. package/ietf/parameters.d.ts.map +1 -0
  92. package/ietf/parameters.js +337 -0
  93. package/ietf/parameters.js.map +1 -0
  94. package/ietf/properties.d.ts +4 -0
  95. package/ietf/properties.d.ts.map +1 -0
  96. package/ietf/properties.js +33 -0
  97. package/ietf/properties.js.map +1 -0
  98. package/ietf/publish.d.ts +68 -0
  99. package/ietf/publish.d.ts.map +1 -0
  100. package/ietf/publish.js +192 -0
  101. package/ietf/publish.js.map +1 -0
  102. package/ietf/publish_namespace.d.ts +68 -0
  103. package/ietf/publish_namespace.d.ts.map +1 -0
  104. package/ietf/publish_namespace.js +176 -0
  105. package/ietf/publish_namespace.js.map +1 -0
  106. package/ietf/publisher.d.ts +50 -0
  107. package/ietf/publisher.d.ts.map +1 -0
  108. package/ietf/publisher.js +330 -0
  109. package/ietf/publisher.js.map +1 -0
  110. package/ietf/request.d.ts +52 -0
  111. package/ietf/request.d.ts.map +1 -0
  112. package/ietf/request.js +119 -0
  113. package/ietf/request.js.map +1 -0
  114. package/ietf/setup.d.ts +38 -0
  115. package/ietf/setup.d.ts.map +1 -0
  116. package/ietf/setup.js +129 -0
  117. package/ietf/setup.js.map +1 -0
  118. package/ietf/subscribe.d.ts +66 -0
  119. package/ietf/subscribe.d.ts.map +1 -0
  120. package/ietf/subscribe.js +276 -0
  121. package/ietf/subscribe.js.map +1 -0
  122. package/ietf/subscribe_namespace.d.ts +101 -0
  123. package/ietf/subscribe_namespace.d.ts.map +1 -0
  124. package/ietf/subscribe_namespace.js +256 -0
  125. package/ietf/subscribe_namespace.js.map +1 -0
  126. package/ietf/subscriber.d.ts +53 -0
  127. package/ietf/subscriber.d.ts.map +1 -0
  128. package/ietf/subscriber.js +404 -0
  129. package/ietf/subscriber.js.map +1 -0
  130. package/ietf/track.d.ts +40 -0
  131. package/ietf/track.d.ts.map +1 -0
  132. package/ietf/track.js +108 -0
  133. package/ietf/track.js.map +1 -0
  134. package/ietf/version.d.ts +56 -0
  135. package/ietf/version.d.ts.map +1 -0
  136. package/ietf/version.js +63 -0
  137. package/ietf/version.js.map +1 -0
  138. package/index.d.ts +22 -0
  139. package/index.d.ts.map +1 -0
  140. package/index.js +23 -0
  141. package/index.js.map +1 -0
  142. package/integration.test.d.ts +2 -0
  143. package/integration.test.d.ts.map +1 -0
  144. package/integration.test.js +90 -0
  145. package/integration.test.js.map +1 -0
  146. package/lite/announce.d.ts +35 -0
  147. package/lite/announce.d.ts.map +1 -0
  148. package/lite/announce.js +166 -0
  149. package/lite/announce.js.map +1 -0
  150. package/lite/connection.d.ts +47 -0
  151. package/lite/connection.d.ts.map +1 -0
  152. package/lite/connection.js +247 -0
  153. package/lite/connection.js.map +1 -0
  154. package/lite/fetch.d.ts +14 -0
  155. package/lite/fetch.d.ts.map +1 -0
  156. package/lite/fetch.js +47 -0
  157. package/lite/fetch.js.map +1 -0
  158. package/lite/goaway.d.ts +10 -0
  159. package/lite/goaway.d.ts.map +1 -0
  160. package/lite/goaway.js +37 -0
  161. package/lite/goaway.js.map +1 -0
  162. package/lite/group.d.ts +18 -0
  163. package/lite/group.d.ts.map +1 -0
  164. package/lite/group.js +46 -0
  165. package/lite/group.js.map +1 -0
  166. package/lite/index.d.ts +11 -0
  167. package/lite/index.d.ts.map +1 -0
  168. package/lite/index.js +12 -0
  169. package/lite/index.js.map +1 -0
  170. package/lite/message.d.ts +5 -0
  171. package/lite/message.d.ts.map +1 -0
  172. package/lite/message.js +51 -0
  173. package/lite/message.js.map +1 -0
  174. package/lite/origin.d.ts +25 -0
  175. package/lite/origin.d.ts.map +1 -0
  176. package/lite/origin.js +35 -0
  177. package/lite/origin.js.map +1 -0
  178. package/lite/probe.d.ts +12 -0
  179. package/lite/probe.d.ts.map +1 -0
  180. package/lite/probe.js +60 -0
  181. package/lite/probe.js.map +1 -0
  182. package/lite/publisher.d.ts +63 -0
  183. package/lite/publisher.d.ts.map +1 -0
  184. package/lite/publisher.js +350 -0
  185. package/lite/publisher.js.map +1 -0
  186. package/lite/session.d.ts +36 -0
  187. package/lite/session.d.ts.map +1 -0
  188. package/lite/session.js +130 -0
  189. package/lite/session.js.map +1 -0
  190. package/lite/setup.d.ts +18 -0
  191. package/lite/setup.d.ts.map +1 -0
  192. package/lite/setup.js +55 -0
  193. package/lite/setup.js.map +1 -0
  194. package/lite/stream.d.ts +23 -0
  195. package/lite/stream.d.ts.map +1 -0
  196. package/lite/stream.js +20 -0
  197. package/lite/stream.js.map +1 -0
  198. package/lite/subscribe.d.ts +111 -0
  199. package/lite/subscribe.d.ts.map +1 -0
  200. package/lite/subscribe.js +341 -0
  201. package/lite/subscribe.js.map +1 -0
  202. package/lite/subscriber.d.ts +80 -0
  203. package/lite/subscriber.d.ts.map +1 -0
  204. package/lite/subscriber.js +316 -0
  205. package/lite/subscriber.js.map +1 -0
  206. package/lite/track.d.ts +38 -0
  207. package/lite/track.d.ts.map +1 -0
  208. package/lite/track.js +81 -0
  209. package/lite/track.js.map +1 -0
  210. package/lite/track.test.d.ts +2 -0
  211. package/lite/track.test.d.ts.map +1 -0
  212. package/lite/track.test.js +53 -0
  213. package/lite/track.test.js.map +1 -0
  214. package/lite/version.d.ts +16 -0
  215. package/lite/version.d.ts.map +1 -0
  216. package/lite/version.js +41 -0
  217. package/lite/version.js.map +1 -0
  218. package/mock.d.ts +16 -0
  219. package/mock.d.ts.map +1 -0
  220. package/mock.js +154 -0
  221. package/mock.js.map +1 -0
  222. package/package.json +27 -0
  223. package/path.d.ts +111 -0
  224. package/path.d.ts.map +1 -0
  225. package/path.js +133 -0
  226. package/path.js.map +1 -0
  227. package/path.test.d.ts +2 -0
  228. package/path.test.d.ts.map +1 -0
  229. package/path.test.js +169 -0
  230. package/path.test.js.map +1 -0
  231. package/stream.d.ts +57 -0
  232. package/stream.d.ts.map +1 -0
  233. package/stream.js +326 -0
  234. package/stream.js.map +1 -0
  235. package/stream.test.d.ts +2 -0
  236. package/stream.test.d.ts.map +1 -0
  237. package/stream.test.js +210 -0
  238. package/stream.test.js.map +1 -0
  239. package/time.d.ts +109 -0
  240. package/time.d.ts.map +1 -0
  241. package/time.js +94 -0
  242. package/time.js.map +1 -0
  243. package/track.d.ts +85 -0
  244. package/track.d.ts.map +1 -0
  245. package/track.js +227 -0
  246. package/track.js.map +1 -0
  247. package/track.test.d.ts +2 -0
  248. package/track.test.d.ts.map +1 -0
  249. package/track.test.js +56 -0
  250. package/track.test.js.map +1 -0
  251. package/util/error.d.ts +3 -0
  252. package/util/error.d.ts.map +1 -0
  253. package/util/error.js +9 -0
  254. package/util/error.js.map +1 -0
  255. package/util/hex.d.ts +3 -0
  256. package/util/hex.d.ts.map +1 -0
  257. package/util/hex.js +16 -0
  258. package/util/hex.js.map +1 -0
  259. package/util/index.d.ts +2 -0
  260. package/util/index.d.ts.map +1 -0
  261. package/util/index.js +3 -0
  262. package/util/index.js.map +1 -0
  263. package/varint.d.ts +36 -0
  264. package/varint.d.ts.map +1 -0
  265. package/varint.js +288 -0
  266. package/varint.js.map +1 -0
  267. package/varint.test.d.ts +2 -0
  268. package/varint.test.d.ts.map +1 -0
  269. package/varint.test.js +106 -0
  270. package/varint.test.js.map +1 -0
  271. package/zod.d.ts +13 -0
  272. package/zod.d.ts.map +1 -0
  273. package/zod.js +19 -0
  274. package/zod.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ietf.test.js","sourceRoot":"","sources":["../../src/ietf/ietf.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, test } from \"bun:test\";\nimport * as Path from \"../path.ts\";\nimport { Reader, Writer } from \"../stream.ts\";\nimport * as Varint from \"../varint.ts\";\nimport * as GoAway from \"./goaway.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Group } from \"./object.ts\";\nimport { SetupOptions } from \"./parameters.ts\";\nimport { Publish, PublishDone } from \"./publish.ts\";\nimport * as Announce from \"./publish_namespace.ts\";\nimport { RequestError, RequestOk } from \"./request.ts\";\nimport * as Setup from \"./setup.ts\";\nimport * as Subscribe from \"./subscribe.ts\";\nimport * as SubscribeNamespace from \"./subscribe_namespace.ts\";\nimport * as Track from \"./track.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// Helper to create a writable stream that captures written data\nfunction createTestWritableStream(): { stream: WritableStream<Uint8Array>; written: Uint8Array[] } {\n\tconst written: Uint8Array[] = [];\n\tconst stream = new WritableStream<Uint8Array>({\n\t\twrite(chunk) {\n\t\t\twritten.push(new Uint8Array(chunk));\n\t\t},\n\t});\n\treturn { stream, written };\n}\n\n// Helper to concatenate written chunks\nfunction concatChunks(chunks: Uint8Array[]): Uint8Array {\n\tconst totalLength = chunks.reduce((sum, chunk) => sum + chunk.byteLength, 0);\n\tconst result = new Uint8Array(totalLength);\n\tlet offset = 0;\n\tfor (const chunk of chunks) {\n\t\tresult.set(chunk, offset);\n\t\toffset += chunk.byteLength;\n\t}\n\treturn result;\n}\n\n// Helper to encode a versioned message\nasync function encodeVersioned<T extends { encode(w: Writer, v: IetfVersion): Promise<void> }>(\n\tmessage: T,\n\tversion: IetfVersion,\n): Promise<Uint8Array> {\n\tconst { stream, written } = createTestWritableStream();\n\tconst writer = new Writer(stream, version);\n\tawait message.encode(writer, version);\n\twriter.close();\n\tawait writer.closed;\n\treturn concatChunks(written);\n}\n\n// Helper to decode a versioned message\nasync function decodeVersioned<T>(\n\tbytes: Uint8Array,\n\tdecoder: (r: Reader, v: IetfVersion) => Promise<T>,\n\tversion: IetfVersion,\n): Promise<T> {\n\tconst reader = new Reader(undefined, bytes, version);\n\treturn await decoder(reader, version);\n}\n\n// Subscribe tests (v14)\ntest(\"Subscribe v14: round trip\", async () => {\n\tconst msg = new Subscribe.Subscribe({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test\"),\n\t\ttrackName: \"video\",\n\t\tsubscriberPriority: 128,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.Subscribe.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.subscriberPriority).toBe(128);\n});\n\ntest(\"Subscribe v14: nested namespace\", async () => {\n\tconst msg = new Subscribe.Subscribe({\n\t\trequestId: 100n,\n\t\ttrackNamespace: Path.from(\"conference/room123\"),\n\t\ttrackName: \"audio\",\n\t\tsubscriberPriority: 255,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.Subscribe.decode, Version.DRAFT_14);\n\n\texpect(decoded.trackNamespace).toBe(\"conference/room123\" as Path.Valid);\n});\n\ntest(\"SubscribeOk v14: without largest\", async () => {\n\tconst msg = new Subscribe.SubscribeOk({ requestId: 42n, trackAlias: 43n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeOk.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(42n);\n\texpect(decoded.trackAlias).toBe(43n);\n});\n\n// Subscribe tests (v15)\ntest(\"Subscribe v15: round trip\", async () => {\n\tconst msg = new Subscribe.Subscribe({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test\"),\n\t\ttrackName: \"video\",\n\t\tsubscriberPriority: 128,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.Subscribe.decode, Version.DRAFT_15);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.subscriberPriority).toBe(128);\n});\n\ntest(\"SubscribeOk v15: round trip\", async () => {\n\tconst msg = new Subscribe.SubscribeOk({ requestId: 42n, trackAlias: 43n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeOk.decode, Version.DRAFT_15);\n\n\texpect(decoded.requestId).toBe(42n);\n\texpect(decoded.trackAlias).toBe(43n);\n});\n\ntest(\"SubscribeError: round trip\", async () => {\n\tconst msg = new Subscribe.SubscribeError({ requestId: 123n, errorCode: 500, reasonPhrase: \"Not found\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeError.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(123n);\n\texpect(decoded.errorCode).toBe(500);\n\texpect(decoded.reasonPhrase).toBe(\"Not found\");\n});\n\ntest(\"Unsubscribe: round trip\", async () => {\n\tconst msg = new Subscribe.Unsubscribe({ requestId: 999n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.Unsubscribe.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(999n);\n});\n\ntest(\"PublishDone: basic test\", async () => {\n\tconst msg = new PublishDone({ requestId: 10n, statusCode: 0, reasonPhrase: \"complete\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, PublishDone.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(10n);\n\texpect(decoded.statusCode).toBe(0);\n\texpect(decoded.reasonPhrase).toBe(\"complete\");\n});\n\ntest(\"PublishDone: with error\", async () => {\n\tconst msg = new PublishDone({ requestId: 10n, statusCode: 1, reasonPhrase: \"error\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, PublishDone.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(10n);\n\texpect(decoded.statusCode).toBe(1);\n\texpect(decoded.reasonPhrase).toBe(\"error\");\n});\n\n// Announce/PublishNamespace tests\ntest(\"PublishNamespace: round trip\", async () => {\n\tconst msg = new Announce.PublishNamespace({ requestId: 1n, trackNamespace: Path.from(\"test/broadcast\") });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespace.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test/broadcast\" as Path.Valid);\n});\n\ntest(\"PublishNamespaceOk: round trip\", async () => {\n\tconst msg = new Announce.PublishNamespaceOk({ requestId: 2n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespaceOk.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(2n);\n});\n\ntest(\"PublishNamespaceError: round trip\", async () => {\n\tconst msg = new Announce.PublishNamespaceError({ requestId: 3n, errorCode: 404, reasonPhrase: \"Unauthorized\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespaceError.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(3n);\n\texpect(decoded.errorCode).toBe(404);\n\texpect(decoded.reasonPhrase).toBe(\"Unauthorized\");\n});\n\ntest(\"PublishNamespaceDone: round trip\", async () => {\n\tconst msg = new Announce.PublishNamespaceDone({ trackNamespace: Path.from(\"old/stream\") });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespaceDone.decode, Version.DRAFT_14);\n\n\texpect(decoded.trackNamespace).toBe(\"old/stream\" as Path.Valid);\n});\n\ntest(\"PublishNamespaceCancel: round trip\", async () => {\n\tconst msg = new Announce.PublishNamespaceCancel({\n\t\ttrackNamespace: Path.from(\"canceled\"),\n\t\terrorCode: 1,\n\t\treasonPhrase: \"Shutdown\",\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespaceCancel.decode, Version.DRAFT_14);\n\n\texpect(decoded.trackNamespace).toBe(\"canceled\" as Path.Valid);\n\texpect(decoded.errorCode).toBe(1);\n\texpect(decoded.reasonPhrase).toBe(\"Shutdown\");\n});\n\n// GoAway tests\ntest(\"GoAway: with URL\", async () => {\n\tconst msg = new GoAway.GoAway({ newSessionUri: \"https://example.com/new\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, GoAway.GoAway.decode, Version.DRAFT_14);\n\n\texpect(decoded.newSessionUri).toBe(\"https://example.com/new\");\n});\n\ntest(\"GoAway: empty\", async () => {\n\tconst msg = new GoAway.GoAway({ newSessionUri: \"\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, GoAway.GoAway.decode, Version.DRAFT_14);\n\n\texpect(decoded.newSessionUri).toBe(\"\");\n});\n\n// Track tests\ntest(\"TrackStatusRequest: round trip\", async () => {\n\tconst msg = new Track.TrackStatusRequest({\n\t\trequestId: 0n,\n\t\ttrackNamespace: Path.from(\"video/stream\"),\n\t\ttrackName: \"main\",\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Track.TrackStatusRequest.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(0n);\n\texpect(decoded.trackNamespace).toBe(\"video/stream\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"main\");\n});\n\ntest(\"TrackStatus v14: round trip\", async () => {\n\tconst msg = new Track.TrackStatus({\n\t\ttrackNamespace: Path.from(\"test\"),\n\t\ttrackName: \"status\",\n\t\tstatusCode: 200,\n\t\tlastGroupId: 42n,\n\t\tlastObjectId: 100n,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Track.TrackStatus.decode, Version.DRAFT_14);\n\n\texpect(decoded.trackNamespace).toBe(\"test\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"status\");\n\texpect(decoded.statusCode).toBe(200);\n\texpect(decoded.lastGroupId).toBe(42n);\n\texpect(decoded.lastObjectId).toBe(100n);\n});\n\n// Validation tests\ntest(\"Subscribe v14: rejects invalid filter type\", async () => {\n\tconst invalidBytes = new Uint8Array([\n\t\t0x01, // subscribe_id\n\t\t0x02, // track_alias\n\t\t0x01, // namespace length\n\t\t0x04,\n\t\t0x74,\n\t\t0x65,\n\t\t0x73,\n\t\t0x74, // \"test\"\n\t\t0x05,\n\t\t0x76,\n\t\t0x69,\n\t\t0x64,\n\t\t0x65,\n\t\t0x6f, // \"video\"\n\t\t0x80, // subscriber_priority\n\t\t0x02, // group_order\n\t\t0x99, // INVALID filter_type\n\t\t0x00, // num_params\n\t]);\n\n\tawait expect(\n\t\t(async () => {\n\t\t\tawait decodeVersioned(invalidBytes, Subscribe.Subscribe.decode, Version.DRAFT_14);\n\t\t})(),\n\t).rejects.toThrow();\n});\n\ntest(\"SubscribeOk v14: rejects non-zero expires\", async () => {\n\tconst invalidBytes = new Uint8Array([\n\t\t0x01, // subscribe_id\n\t\t0x05, // INVALID: expires = 5\n\t\t0x02, // group_order\n\t\t0x00, // content_exists\n\t\t0x00, // num_params\n\t]);\n\n\tawait expect(\n\t\t(async () => {\n\t\t\tawait decodeVersioned(invalidBytes, Subscribe.SubscribeOk.decode, Version.DRAFT_14);\n\t\t})(),\n\t).rejects.toThrow();\n});\n\n// Unicode tests\ntest(\"SubscribeError: unicode strings\", async () => {\n\tconst msg = new Subscribe.SubscribeError({ requestId: 1n, errorCode: 400, reasonPhrase: \"Error: 错误 🚫\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeError.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.errorCode).toBe(400);\n\texpect(decoded.reasonPhrase).toBe(\"Error: 错误 🚫\");\n});\n\ntest(\"PublishNamespace: unicode namespace\", async () => {\n\tconst msg = new Announce.PublishNamespace({ requestId: 1n, trackNamespace: Path.from(\"会议/房间\") });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespace.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"会议/房间\" as Path.Valid);\n});\n\n// Publish v15 tests\ntest(\"Publish v15: round trip\", async () => {\n\tconst msg = new Publish({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test/ns\"),\n\t\ttrackName: \"video\",\n\t\ttrackAlias: 42n,\n\t\tgroupOrder: 0x02,\n\t\tcontentExists: false,\n\t\tlargest: undefined,\n\t\tforward: true,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, Publish.decode, Version.DRAFT_15);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test/ns\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.trackAlias).toBe(42n);\n\texpect(decoded.forward).toBe(true);\n});\n\ntest(\"Publish v14: round trip\", async () => {\n\tconst msg = new Publish({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test/ns\"),\n\t\ttrackName: \"video\",\n\t\ttrackAlias: 42n,\n\t\tgroupOrder: 0x02,\n\t\tcontentExists: true,\n\t\tlargest: { groupId: 10n, objectId: 5n },\n\t\tforward: true,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Publish.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test/ns\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.trackAlias).toBe(42n);\n\texpect(decoded.forward).toBe(true);\n\texpect(decoded.contentExists).toBe(true);\n\texpect(decoded.largest?.groupId).toBe(10n);\n\texpect(decoded.largest?.objectId).toBe(5n);\n});\n\n// ClientSetup v15 tests\ntest(\"ClientSetup v15: round trip\", async () => {\n\tconst msg = new Setup.ClientSetup({ versions: [Version.DRAFT_15] });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, Setup.ClientSetup.decode, Version.DRAFT_15);\n\n\texpect(decoded.versions.length).toBe(1);\n\texpect(decoded.versions[0]).toBe(Version.DRAFT_15);\n});\n\ntest(\"ClientSetup v14: round trip\", async () => {\n\tconst msg = new Setup.ClientSetup({ versions: [Version.DRAFT_14] });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Setup.ClientSetup.decode, Version.DRAFT_14);\n\n\texpect(decoded.versions.length).toBe(1);\n\texpect(decoded.versions[0]).toBe(Version.DRAFT_14);\n});\n\n// ServerSetup v15 tests\ntest(\"ServerSetup v15: round trip\", async () => {\n\tconst msg = new Setup.ServerSetup({ version: Version.DRAFT_15 });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, Setup.ServerSetup.decode, Version.DRAFT_15);\n\n\texpect(decoded.version).toBe(Version.DRAFT_15);\n});\n\ntest(\"ServerSetup v14: round trip\", async () => {\n\tconst msg = new Setup.ServerSetup({ version: Version.DRAFT_14 });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Setup.ServerSetup.decode, Version.DRAFT_14);\n\n\texpect(decoded.version).toBe(Version.DRAFT_14);\n});\n\n// RequestOk / RequestError v15 tests\ntest(\"RequestOk: round trip\", async () => {\n\tconst msg = new RequestOk({ requestId: 42n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, RequestOk.decode, Version.DRAFT_15);\n\n\texpect(decoded.requestId).toBe(42n);\n});\n\ntest(\"RequestError v15: round trip\", async () => {\n\tconst msg = new RequestError({ requestId: 99n, errorCode: 500, reasonPhrase: \"Internal error\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, RequestError.decode, Version.DRAFT_15);\n\n\texpect(decoded.requestId).toBe(99n);\n\texpect(decoded.errorCode).toBe(500);\n\texpect(decoded.reasonPhrase).toBe(\"Internal error\");\n\texpect(decoded.retryInterval).toBe(0n);\n});\n\ntest(\"RequestError v16: round trip with retryInterval\", async () => {\n\tconst msg = new RequestError({\n\t\trequestId: 99n,\n\t\terrorCode: 500,\n\t\treasonPhrase: \"Internal error\",\n\t\tretryInterval: 5000n,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_16);\n\tconst decoded = await decodeVersioned(encoded, RequestError.decode, Version.DRAFT_16);\n\n\texpect(decoded.requestId).toBe(99n);\n\texpect(decoded.errorCode).toBe(500);\n\texpect(decoded.reasonPhrase).toBe(\"Internal error\");\n\texpect(decoded.retryInterval).toBe(5000n);\n});\n\n// --- Leading-ones varint tests ---\n\ntest(\"Leading-ones varint: spec test vectors\", () => {\n\t// Test vectors from draft-17 spec (Table 2)\n\tconst cases: [Uint8Array, bigint][] = [\n\t\t[new Uint8Array([0x25]), 37n],\n\t\t[new Uint8Array([0x80, 0x25]), 37n], // non-minimal encoding of 37\n\t\t[new Uint8Array([0xbb, 0xbd]), 15_293n],\n\t\t[new Uint8Array([0xfa, 0xa1, 0xa0, 0xe4, 0x03, 0xd8]), 2_893_212_287_960n],\n\t\t[new Uint8Array([0xfe, 0xfa, 0x31, 0x8f, 0xa8, 0xe3, 0xca, 0x11]), 70_423_237_261_249_041n],\n\t\t[\n\t\t\tnew Uint8Array([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]),\n\t\t\t18_446_744_073_709_551_615n, // u64::MAX\n\t\t],\n\t];\n\n\tfor (const [bytes, expected] of cases) {\n\t\tconst [decoded, remain] = Varint.decodeLeadingOnes(bytes);\n\t\texpect(decoded).toBe(expected);\n\t\texpect(remain.length).toBe(0);\n\t}\n\n\t// Test minimal round-trip (skip non-minimal 0x8025 for 37, and u64::MAX which exceeds safe range)\n\tconst roundTripCases: [Uint8Array, bigint][] = [\n\t\t[new Uint8Array([0x25]), 37n],\n\t\t[new Uint8Array([0xbb, 0xbd]), 15_293n],\n\t\t[new Uint8Array([0xfa, 0xa1, 0xa0, 0xe4, 0x03, 0xd8]), 2_893_212_287_960n],\n\t\t[new Uint8Array([0xfe, 0xfa, 0x31, 0x8f, 0xa8, 0xe3, 0xca, 0x11]), 70_423_237_261_249_041n],\n\t];\n\n\tfor (const [expectedBytes, value] of roundTripCases) {\n\t\tconst encoded = Varint.encodeLeadingOnes(value);\n\t\texpect(encoded).toEqual(expectedBytes);\n\t}\n});\n\ntest(\"Leading-ones varint: boundary round-trips\", () => {\n\tconst cases: [bigint, number][] = [\n\t\t[(1n << 7n) - 1n, 1],\n\t\t[1n << 7n, 2],\n\t\t[(1n << 14n) - 1n, 2],\n\t\t[1n << 14n, 3],\n\t\t[(1n << 56n) - 1n, 8],\n\t\t[1n << 56n, 9],\n\t];\n\n\tfor (const [value, expectedLen] of cases) {\n\t\tconst encoded = Varint.encodeLeadingOnes(value);\n\t\texpect(encoded.length).toBe(expectedLen);\n\n\t\tconst [decoded, remain] = Varint.decodeLeadingOnes(encoded);\n\t\texpect(decoded).toBe(value);\n\t\texpect(remain.length).toBe(0);\n\t}\n});\n\ntest(\"Leading-ones varint: 0xFC is a 7-byte form on draft-18+ (per #1595)\", () => {\n\t// Standalone decoder is permissive; draft-17 enforcement is in Reader#readLeadingOnes.\n\t// Only check that it doesn't reject the prefix as \"reserved\" — it now needs more bytes.\n\texpect(() => {\n\t\tVarint.decodeLeadingOnes(new Uint8Array([0xfc]));\n\t}).toThrow(/buffer too short/);\n});\n\ntest(\"Reader#u62: rejects 0xFC 7-byte form on draft-17\", async () => {\n\tconst bytes = new Uint8Array([0xfc, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc]);\n\tconst reader = new Reader(undefined, bytes, Version.DRAFT_17);\n\tawait expect(reader.u62()).rejects.toThrow(/reserved on draft-17/);\n});\n\ntest(\"Reader#u62: accepts 0xFC 7-byte form on draft-18\", async () => {\n\tconst value = 0x12_3456_789a_bcn;\n\tconst bytes = new Uint8Array([0xfc, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc]);\n\tconst reader = new Reader(undefined, bytes, Version.DRAFT_18);\n\texpect(await reader.u62()).toBe(value);\n\texpect(await reader.done()).toBe(true);\n});\n\ntest(\"Reader#u62: accepts 0xFC 7-byte form on draft-19\", async () => {\n\tconst value = 0x12_3456_789a_bcn;\n\tconst bytes = new Uint8Array([0xfc, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc]);\n\tconst reader = new Reader(undefined, bytes, Version.DRAFT_19);\n\texpect(await reader.u62()).toBe(value);\n\texpect(await reader.done()).toBe(true);\n});\n\ntest(\"Leading-ones varint: 7-byte form round-trips on draft-18\", () => {\n\t// Encode 7 bytes manually: 1111110_0 (prefix bit 48 = 0) + 6 bytes payload\n\tconst value = 0x12_3456_789a_bcn;\n\tconst bytes = new Uint8Array(7);\n\tbytes[0] = 0xfc; // 1111110_0\n\tbytes[1] = 0x12;\n\tbytes[2] = 0x34;\n\tbytes[3] = 0x56;\n\tbytes[4] = 0x78;\n\tbytes[5] = 0x9a;\n\tbytes[6] = 0xbc;\n\tconst [decoded, remain] = Varint.decodeLeadingOnes(bytes);\n\texpect(decoded).toBe(value);\n\texpect(remain.length).toBe(0);\n});\n\n// --- Draft-17 message tests ---\n\ntest(\"Subscribe v17: round trip with requiredRequestIdDelta\", async () => {\n\tconst msg = new Subscribe.Subscribe({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test\"),\n\t\ttrackName: \"video\",\n\t\tsubscriberPriority: 128,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.Subscribe.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.subscriberPriority).toBe(128);\n});\n\ntest(\"SubscribeOk v17: no requestId\", async () => {\n\tconst msg = new Subscribe.SubscribeOk({ trackAlias: 42n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeOk.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(undefined);\n\texpect(decoded.trackAlias).toBe(42n);\n});\n\ntest(\"RequestOk v17: no requestId\", async () => {\n\tconst msg = new RequestOk({});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, RequestOk.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(undefined);\n});\n\ntest(\"RequestError v17: no requestId, has retryInterval\", async () => {\n\tconst msg = new RequestError({\n\t\terrorCode: 500,\n\t\treasonPhrase: \"Internal error\",\n\t\tretryInterval: 3000n,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, RequestError.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(undefined);\n\texpect(decoded.errorCode).toBe(500);\n\texpect(decoded.reasonPhrase).toBe(\"Internal error\");\n\texpect(decoded.retryInterval).toBe(3000n);\n});\n\ntest(\"GoAway v17: with timeout\", async () => {\n\tconst msg = new GoAway.GoAway({ newSessionUri: \"https://example.com/new\", timeout: 5000n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, GoAway.GoAway.decode, Version.DRAFT_17);\n\n\texpect(decoded.newSessionUri).toBe(\"https://example.com/new\");\n\texpect(decoded.timeout).toBe(5000n);\n});\n\ntest(\"Setup v17: unified 0x2F00 round trip\", async () => {\n\tconst params = new SetupOptions();\n\tparams.setBytes(7n, new TextEncoder().encode(\"test-impl\"));\n\tconst msg = new Setup.Setup({ parameters: params });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Setup.Setup.decode, Version.DRAFT_17);\n\n\texpect(decoded.parameters.getBytes(7n)).toEqual(new TextEncoder().encode(\"test-impl\"));\n});\n\ntest(\"Publish v17: round trip with requiredRequestIdDelta\", async () => {\n\tconst msg = new Publish({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test/ns\"),\n\t\ttrackName: \"video\",\n\t\ttrackAlias: 42n,\n\t\tgroupOrder: 0x02,\n\t\tcontentExists: false,\n\t\tlargest: undefined,\n\t\tforward: true,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Publish.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test/ns\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.trackAlias).toBe(42n);\n\texpect(decoded.forward).toBe(true);\n});\n\ntest(\"PublishNamespace v17: round trip\", async () => {\n\tconst msg = new Announce.PublishNamespace({ requestId: 5n, trackNamespace: Path.from(\"live/stream\") });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespace.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(5n);\n\texpect(decoded.trackNamespace).toBe(\"live/stream\" as Path.Valid);\n});\n\ntest(\"PublishNamespaceDone v17: encode rejects\", async () => {\n\tconst msg = new Announce.PublishNamespaceDone({ trackNamespace: Path.from(\"old/stream\") });\n\n\tawait expect((() => encodeVersioned(msg, Version.DRAFT_17))()).rejects.toThrow(/removed in draft-17/);\n});\n\ntest(\"PublishNamespaceCancel v17: encode rejects\", async () => {\n\tconst msg = new Announce.PublishNamespaceCancel({ trackNamespace: Path.from(\"canceled\") });\n\n\tawait expect((() => encodeVersioned(msg, Version.DRAFT_17))()).rejects.toThrow(/removed in draft-17/);\n});\n\ntest(\"PublishDone v17: no requestId\", async () => {\n\tconst msg = new PublishDone({ statusCode: 0, reasonPhrase: \"done\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, PublishDone.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(undefined);\n\texpect(decoded.statusCode).toBe(0);\n\texpect(decoded.reasonPhrase).toBe(\"done\");\n});\n\n// --- SubscribeUpdate tests ---\n\ntest(\"SubscribeUpdate v14: round trip\", async () => {\n\tconst msg = new Subscribe.SubscribeUpdate({ requestId: 5n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeUpdate.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(5n);\n});\n\ntest(\"SubscribeUpdate v15: round trip\", async () => {\n\tconst msg = new Subscribe.SubscribeUpdate({ requestId: 10n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeUpdate.decode, Version.DRAFT_15);\n\n\texpect(decoded.requestId).toBe(10n);\n});\n\ntest(\"SubscribeUpdate v17: round trip with requiredRequestIdDelta\", async () => {\n\tconst msg = new Subscribe.SubscribeUpdate({ requestId: 42n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeUpdate.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(42n);\n});\n\n// --- PublishBlocked tests ---\n\ntest(\"PublishBlocked v17: round trip\", async () => {\n\tconst msg = new SubscribeNamespace.PublishBlocked({\n\t\tsuffix: Path.from(\"stream1\"),\n\t\ttrackName: \"video\",\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, SubscribeNamespace.PublishBlocked.decode, Version.DRAFT_17);\n\n\texpect(decoded.suffix).toBe(\"stream1\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n});\n\n// --- TrackStatusRequest version-aware tests ---\n\ntest(\"TrackStatusRequest v14: round trip with subscribe fields\", async () => {\n\tconst msg = new Track.TrackStatusRequest({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"video/stream\"),\n\t\ttrackName: \"main\",\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Track.TrackStatusRequest.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"video/stream\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"main\");\n});\n\ntest(\"TrackStatusRequest v15: round trip with params\", async () => {\n\tconst msg = new Track.TrackStatusRequest({ requestId: 2n, trackNamespace: Path.from(\"test\"), trackName: \"audio\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, Track.TrackStatusRequest.decode, Version.DRAFT_15);\n\n\texpect(decoded.requestId).toBe(2n);\n\texpect(decoded.trackNamespace).toBe(\"test\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"audio\");\n});\n\ntest(\"TrackStatusRequest v17: round trip with requiredRequestIdDelta\", async () => {\n\tconst msg = new Track.TrackStatusRequest({ requestId: 3n, trackNamespace: Path.from(\"live\"), trackName: \"data\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Track.TrackStatusRequest.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(3n);\n\texpect(decoded.trackNamespace).toBe(\"live\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"data\");\n});\n\n// --- Namespace encoding tests ---\n\n// Helper to encode a namespace to raw bytes\nasync function encodeNamespace(namespace: Path.Valid): Promise<Uint8Array> {\n\tconst { stream, written } = createTestWritableStream();\n\tconst writer = new Writer(stream);\n\tawait Namespace.encode(writer, namespace);\n\twriter.close();\n\tawait writer.closed;\n\treturn concatChunks(written);\n}\n\n// Helper to decode a namespace from raw bytes\nasync function decodeNamespace(bytes: Uint8Array): Promise<Path.Valid> {\n\tconst reader = new Reader(undefined, bytes);\n\treturn await Namespace.decode(reader);\n}\n\ntest(\"Namespace: empty encodes as zero-length tuple\", async () => {\n\tconst bytes = await encodeNamespace(Path.empty());\n\n\t// Should be a single byte: varint 0 (zero parts)\n\texpect(bytes).toEqual(new Uint8Array([0x00]));\n});\n\ntest(\"Namespace: empty round trip\", async () => {\n\tconst encoded = await encodeNamespace(Path.empty());\n\tconst decoded = await decodeNamespace(encoded);\n\n\texpect(decoded).toBe(\"\" as Path.Valid);\n});\n\ntest(\"Namespace: single part round trip\", async () => {\n\tconst encoded = await encodeNamespace(Path.from(\"test\"));\n\tconst decoded = await decodeNamespace(encoded);\n\n\texpect(decoded).toBe(\"test\" as Path.Valid);\n});\n\ntest(\"Namespace: single part encodes as one-length tuple\", async () => {\n\tconst bytes = await encodeNamespace(Path.from(\"test\"));\n\n\t// varint 1 (one part), then length-prefixed \"test\"\n\texpect(bytes[0]).toBe(0x01);\n});\n\ntest(\"Namespace: multi-part round trip\", async () => {\n\tconst encoded = await encodeNamespace(Path.from(\"conference/room/123\"));\n\tconst decoded = await decodeNamespace(encoded);\n\n\texpect(decoded).toBe(\"conference/room/123\" as Path.Valid);\n});\n\ntest(\"Namespace: multi-part encodes correct count\", async () => {\n\tconst bytes = await encodeNamespace(Path.from(\"a/b/c\"));\n\n\t// First byte should be varint 3 (three parts)\n\texpect(bytes[0]).toBe(0x03);\n});\n\ntest(\"Namespace: Subscribe with empty namespace round trip\", async () => {\n\tconst msg = new Subscribe.Subscribe({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.empty(),\n\t\ttrackName: \"video\",\n\t\tsubscriberPriority: 128,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.Subscribe.decode, Version.DRAFT_17);\n\n\texpect(decoded.trackNamespace).toBe(\"\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n});\n\ntest(\"Namespace: PublishNamespace with empty namespace round trip\", async () => {\n\tconst msg = new Announce.PublishNamespace({ requestId: 1n, trackNamespace: Path.empty() });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespace.decode, Version.DRAFT_17);\n\n\texpect(decoded.trackNamespace).toBe(\"\" as Path.Valid);\n});\n\n// --- Draft-18 message tests ---\n\ntest(\"Subscribe v18: round trip (same wire as v17 minus required_request_id_delta)\", async () => {\n\tconst msg = new Subscribe.Subscribe({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test\"),\n\t\ttrackName: \"video\",\n\t\tsubscriberPriority: 128,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.Subscribe.decode, Version.DRAFT_18);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.subscriberPriority).toBe(128);\n});\n\ntest(\"SubscribeOk v18: no requestId\", async () => {\n\tconst msg = new Subscribe.SubscribeOk({ trackAlias: 42n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeOk.decode, Version.DRAFT_18);\n\n\texpect(decoded.requestId).toBe(undefined);\n\texpect(decoded.trackAlias).toBe(42n);\n});\n\ntest(\"SubscribeUpdate v18: 1 byte shorter than v17 (no required_request_id_delta)\", async () => {\n\tconst msg = new Subscribe.SubscribeUpdate({ requestId: 10n });\n\tconst v17 = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst v18 = await encodeVersioned(msg, Version.DRAFT_18);\n\texpect(v17.length).toBe(v18.length + 1);\n\n\t// Round-trip the v18 bytes too. A different shape that happens to be one byte\n\t// shorter would silently pass the length check otherwise.\n\tconst decoded = await decodeVersioned(v18, Subscribe.SubscribeUpdate.decode, Version.DRAFT_18);\n\texpect(decoded.requestId).toBe(10n);\n});\n\ntest(\"PublishNamespace v18: round trip without required_request_id_delta\", async () => {\n\tconst msg = new Announce.PublishNamespace({ requestId: 5n, trackNamespace: Path.from(\"v18/broadcast\") });\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespace.decode, Version.DRAFT_18);\n\texpect(decoded.requestId).toBe(5n);\n\texpect(decoded.trackNamespace).toBe(\"v18/broadcast\" as Path.Valid);\n});\n\ntest(\"Publish v18: round trip\", async () => {\n\tconst msg = new Publish({\n\t\trequestId: 7n,\n\t\ttrackNamespace: Path.from(\"v18/ns\"),\n\t\ttrackName: \"video\",\n\t\ttrackAlias: 1n,\n\t\tgroupOrder: 2,\n\t\tcontentExists: false,\n\t\tlargest: undefined,\n\t\tforward: true,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, Publish.decode, Version.DRAFT_18);\n\n\texpect(decoded.requestId).toBe(7n);\n\texpect(decoded.trackNamespace).toBe(\"v18/ns\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.trackAlias).toBe(1n);\n\texpect(decoded.forward).toBe(true);\n});\n\ntest(\"PublishDone v18: no requestId\", async () => {\n\tconst msg = new PublishDone({ statusCode: 200, reasonPhrase: \"OK\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, PublishDone.decode, Version.DRAFT_18);\n\n\texpect(decoded.requestId).toBe(undefined);\n\texpect(decoded.statusCode).toBe(200);\n\texpect(decoded.reasonPhrase).toBe(\"OK\");\n});\n\ntest(\"RequestOk v18: no requestId (regression: don't treat Draft18 as legacy)\", async () => {\n\tconst msg = new RequestOk({});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, RequestOk.decode, Version.DRAFT_18);\n\n\texpect(decoded.requestId).toBe(undefined);\n});\n\ntest(\"RequestError v18: no requestId, retry_interval still present\", async () => {\n\tconst msg = new RequestError({\n\t\terrorCode: 500,\n\t\treasonPhrase: \"boom\",\n\t\tretryInterval: 1234n,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, RequestError.decode, Version.DRAFT_18);\n\n\texpect(decoded.requestId).toBe(undefined);\n\texpect(decoded.errorCode).toBe(500);\n\texpect(decoded.reasonPhrase).toBe(\"boom\");\n\texpect(decoded.retryInterval).toBe(1234n);\n});\n\ntest(\"Subscribe v18 wire bytes match v17 (FIRST_OBJECT bit doesn't affect control messages)\", async () => {\n\tconst msg = new Subscribe.Subscribe({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test\"),\n\t\ttrackName: \"video\",\n\t\tsubscriberPriority: 128,\n\t});\n\n\tconst v17 = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst v18 = await encodeVersioned(msg, Version.DRAFT_18);\n\n\t// Draft18 drops the required_request_id_delta (1 byte) from v17.\n\texpect(v18.length).toBe(v17.length - 1);\n});\n\ntest(\"PublishNamespaceDone v18: rejected (removed in draft-17+)\", async () => {\n\tconst msg = new Announce.PublishNamespaceDone({ requestId: 1n });\n\tconst { stream } = createTestWritableStream();\n\tconst writer = new Writer(stream, Version.DRAFT_18);\n\tawait expect(msg.encode(writer, Version.DRAFT_18)).rejects.toThrow(/removed in draft-17/);\n});\n\ntest(\"GoAway v18: round trip (timeout field still present)\", async () => {\n\tconst msg = new GoAway.GoAway({ newSessionUri: \"moqt://relay.example/\", timeout: 5000n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, GoAway.GoAway.decode, Version.DRAFT_18);\n\n\texpect(decoded.newSessionUri).toBe(\"moqt://relay.example/\");\n\texpect(decoded.timeout).toBe(5000n);\n});\n\ntest(\"Parameters v18 wire is identical to v17 (no count prefix, delta encoded keys)\", async () => {\n\tconst params = new SetupOptions();\n\tparams.setVarint(0x2n, 42n);\n\tparams.setVarint(0x4n, 100n);\n\n\tconst v17 = (() => {\n\t\tconst { stream, written } = createTestWritableStream();\n\t\tconst w = new Writer(stream, Version.DRAFT_17);\n\t\treturn params.encode(w, Version.DRAFT_17).then(() => concatChunks(written));\n\t})();\n\tconst v18 = (() => {\n\t\tconst { stream, written } = createTestWritableStream();\n\t\tconst w = new Writer(stream, Version.DRAFT_18);\n\t\treturn params.encode(w, Version.DRAFT_18).then(() => concatChunks(written));\n\t})();\n\n\texpect(Array.from(await v18)).toEqual(Array.from(await v17));\n});\n\ntest(\"SubscribeNamespace: message IDs\", () => {\n\t// 0x11 through draft-17 (legacy), renumbered to 0x50 in draft-18 (#1542).\n\texpect(SubscribeNamespace.SubscribeNamespaceLegacy.id).toBe(0x11);\n\texpect(SubscribeNamespace.SubscribeNamespace.id).toBe(0x50);\n});\n\ntest(\"SubscribeNamespace: decode rejects the wrong draft version\", async () => {\n\t// Modern 0x50 is draft-18+ only.\n\tconst modern = await encodeVersioned(\n\t\tnew SubscribeNamespace.SubscribeNamespace({ namespace: Path.empty(), requestId: 0n }),\n\t\tVersion.DRAFT_18,\n\t);\n\tawait expect(\n\t\tdecodeVersioned(modern, SubscribeNamespace.SubscribeNamespace.decode, Version.DRAFT_17),\n\t).rejects.toThrow(/draft-18\\+ only/);\n\n\t// Legacy 0x11 is draft-14..17 only.\n\tconst legacy = await encodeVersioned(\n\t\tnew SubscribeNamespace.SubscribeNamespaceLegacy({ namespace: Path.empty(), requestId: 0n }),\n\t\tVersion.DRAFT_17,\n\t);\n\tawait expect(\n\t\tdecodeVersioned(legacy, SubscribeNamespace.SubscribeNamespaceLegacy.decode, Version.DRAFT_18),\n\t).rejects.toThrow(/draft-14\\.\\.17 only/);\n});\n\ntest(\"SubscribeNamespace: draft-18 omits subscribe options\", async () => {\n\t// The legacy draft-17 body carries the Subscribe Options field, so it is\n\t// longer than the modern draft-18 body.\n\tconst modern = new SubscribeNamespace.SubscribeNamespace({ namespace: Path.empty(), requestId: 0n });\n\tconst legacy = new SubscribeNamespace.SubscribeNamespaceLegacy({ namespace: Path.empty(), requestId: 0n });\n\tconst v18 = await encodeVersioned(modern, Version.DRAFT_18);\n\tconst v17 = await encodeVersioned(legacy, Version.DRAFT_17);\n\texpect(v18.byteLength).toBeLessThan(v17.byteLength);\n\n\t// Modern round-trips on draft-18.\n\tconst m = await encodeVersioned(\n\t\tnew SubscribeNamespace.SubscribeNamespace({ namespace: Path.from(\"example/meeting\"), requestId: 4n }),\n\t\tVersion.DRAFT_18,\n\t);\n\tconst dm = await decodeVersioned(m, SubscribeNamespace.SubscribeNamespace.decode, Version.DRAFT_18);\n\texpect(dm.requestId).toBe(4n);\n\texpect(dm.namespace).toBe(\"example/meeting\" as Path.Valid);\n\n\t// Legacy round-trips on draft-16/17.\n\tfor (const version of [Version.DRAFT_16, Version.DRAFT_17]) {\n\t\tconst encoded = await encodeVersioned(\n\t\t\tnew SubscribeNamespace.SubscribeNamespaceLegacy({ namespace: Path.from(\"example/meeting\"), requestId: 4n }),\n\t\t\tversion,\n\t\t);\n\t\tconst decoded = await decodeVersioned(encoded, SubscribeNamespace.SubscribeNamespaceLegacy.decode, version);\n\t\texpect(decoded.requestId).toBe(4n);\n\t\texpect(decoded.namespace).toBe(\"example/meeting\" as Path.Valid);\n\t}\n});\n\ntest(\"Group: draft-18 sets FIRST_OBJECT bit, draft-17 does not\", async () => {\n\tconst makeGroup = () =>\n\t\tnew Group({\n\t\t\ttrackAlias: 7n,\n\t\t\tgroupId: 3,\n\t\t\tsubGroupId: 0,\n\t\t\tpublisherPriority: 0,\n\t\t\tflags: {\n\t\t\t\thasExtensions: false,\n\t\t\t\thasSubgroup: false,\n\t\t\t\thasSubgroupObject: false,\n\t\t\t\thasEnd: true,\n\t\t\t\thasPriority: true,\n\t\t\t},\n\t\t});\n\n\t// Round-trips on each version.\n\tfor (const version of [Version.DRAFT_17, Version.DRAFT_18]) {\n\t\tconst encoded = await encodeVersioned(makeGroup(), version);\n\t\tconst decoded = await decodeVersioned(encoded, Group.decode, version);\n\t\texpect(decoded.groupId).toBe(3);\n\t\texpect(decoded.trackAlias).toBe(7n);\n\t\texpect(decoded.flags.hasEnd).toBe(true);\n\t\texpect(decoded.flags.hasPriority).toBe(true);\n\t}\n\n\t// The draft-18 header carries the 0x40 FIRST_OBJECT bit (type 0x18 -> 0x58),\n\t// so the same bytes are not a valid draft-17 subgroup header.\n\tconst v18 = await encodeVersioned(makeGroup(), Version.DRAFT_18);\n\tconst v17 = await encodeVersioned(makeGroup(), Version.DRAFT_17);\n\texpect(Array.from(v18)).not.toEqual(Array.from(v17));\n\tawait expect(decodeVersioned(v18, Group.decode, Version.DRAFT_17)).rejects.toThrow(/Unsupported group type/);\n});\n"]}
@@ -0,0 +1,18 @@
1
+ export * from "./adapter";
2
+ export * from "./connection";
3
+ export * from "./control";
4
+ export * from "./fetch";
5
+ export * from "./goaway";
6
+ export * from "./object";
7
+ export * from "./parameters";
8
+ export * from "./publish";
9
+ export * from "./publish_namespace";
10
+ export * from "./publisher";
11
+ export * from "./request";
12
+ export * from "./setup";
13
+ export * from "./subscribe";
14
+ export * from "./subscribe_namespace";
15
+ export * from "./subscriber";
16
+ export * from "./track";
17
+ export * from "./version";
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ietf/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
package/ietf/index.js ADDED
@@ -0,0 +1,19 @@
1
+ /* @ts-self-types="./index.d.ts" */
2
+ export * from "./adapter.js";
3
+ export * from "./connection.js";
4
+ export * from "./control.js";
5
+ export * from "./fetch.js";
6
+ export * from "./goaway.js";
7
+ export * from "./object.js";
8
+ export * from "./parameters.js";
9
+ export * from "./publish.js";
10
+ export * from "./publish_namespace.js";
11
+ export * from "./publisher.js";
12
+ export * from "./request.js";
13
+ export * from "./setup.js";
14
+ export * from "./subscribe.js";
15
+ export * from "./subscribe_namespace.js";
16
+ export * from "./subscriber.js";
17
+ export * from "./track.js";
18
+ export * from "./version.js";
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ietf/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC","sourcesContent":["export * from \"./adapter.ts\";\nexport * from \"./connection.ts\";\nexport * from \"./control.ts\";\nexport * from \"./fetch.ts\";\nexport * from \"./goaway.ts\";\nexport * from \"./object.ts\";\nexport * from \"./parameters.ts\";\nexport * from \"./publish.ts\";\nexport * from \"./publish_namespace.ts\";\nexport * from \"./publisher.ts\";\nexport * from \"./request.ts\";\nexport * from \"./setup.ts\";\nexport * from \"./subscribe.ts\";\nexport * from \"./subscribe_namespace.ts\";\nexport * from \"./subscriber.ts\";\nexport * from \"./track.ts\";\nexport * from \"./version.ts\";\n"]}
@@ -0,0 +1,4 @@
1
+ import { Reader, Writer } from "../stream";
2
+ export declare function encode(writer: Writer, f: (w: Writer) => Promise<void>): Promise<void>;
3
+ export declare function decode<T>(reader: Reader, f: (r: Reader) => Promise<T>): Promise<T>;
4
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/ietf/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG9C,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,iBA8C3E;AAGD,wBAAsB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAaxF"}
@@ -0,0 +1,54 @@
1
+ /* @ts-self-types="./message.d.ts" */
2
+ import { Reader, Writer } from "../stream.js";
3
+ // Encodes a message with a u16 (16-bit) size prefix as per draft-14.
4
+ export async function encode(writer, f) {
5
+ let scratch = new Uint8Array();
6
+ const temp = new Writer(new WritableStream({
7
+ write(chunk) {
8
+ const needed = scratch.byteLength + chunk.byteLength;
9
+ if (needed > scratch.buffer.byteLength) {
10
+ // Resize the buffer to the needed size.
11
+ const capacity = Math.max(needed, scratch.buffer.byteLength * 2);
12
+ const newBuffer = new ArrayBuffer(capacity);
13
+ const newScratch = new Uint8Array(newBuffer, 0, needed);
14
+ // Copy the old data into the new buffer.
15
+ newScratch.set(scratch);
16
+ // Copy the new chunk into the new buffer.
17
+ newScratch.set(chunk, scratch.byteLength);
18
+ scratch = newScratch;
19
+ }
20
+ else {
21
+ // Copy chunk data into buffer
22
+ scratch = new Uint8Array(scratch.buffer, 0, needed);
23
+ scratch.set(chunk, needed - chunk.byteLength);
24
+ }
25
+ },
26
+ }), writer.version);
27
+ try {
28
+ await f(temp);
29
+ }
30
+ finally {
31
+ temp.close();
32
+ }
33
+ await temp.closed;
34
+ // Check that message fits in u16
35
+ if (scratch.byteLength > 65535) {
36
+ throw new Error(`Message too large: ${scratch.byteLength} bytes (max 65535)`);
37
+ }
38
+ // Write u16 size (2 bytes, big-endian)
39
+ await writer.u16(scratch.byteLength);
40
+ await writer.write(scratch);
41
+ }
42
+ // Reads a message with a u16 size prefix.
43
+ export async function decode(reader, f) {
44
+ const size = await reader.u16();
45
+ const data = await reader.read(size);
46
+ const limit = new Reader(undefined, data, reader.version);
47
+ const msg = await f(limit);
48
+ // Check that we consumed exactly the right number of bytes
49
+ if (!(await limit.done())) {
50
+ throw new Error("Message decoding consumed too few bytes");
51
+ }
52
+ return msg;
53
+ }
54
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/ietf/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE9C,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,MAAc,EAAE,CAA+B;IAC3E,IAAI,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;IAE/B,MAAM,IAAI,GAAG,IAAI,MAAM,CACtB,IAAI,cAAc,CAAa;QAC9B,KAAK,CAAC,KAAiB;YACtB,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YACrD,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACxC,wCAAwC;gBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBACjE,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAC5C,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;gBAExD,yCAAyC;gBACzC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAExB,0CAA0C;gBAC1C,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;gBAE1C,OAAO,GAAG,UAAU,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACP,8BAA8B;gBAC9B,OAAO,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/C,CAAC;QACF,CAAC;KACD,CAAC,EACF,MAAM,CAAC,OAAO,CACd,CAAC;IAEF,IAAI,CAAC;QACJ,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;YAAS,CAAC;QACV,IAAI,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;IAED,MAAM,IAAI,CAAC,MAAM,CAAC;IAElB,iCAAiC;IACjC,IAAI,OAAO,CAAC,UAAU,GAAG,KAAK,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,CAAC,UAAU,oBAAoB,CAAC,CAAC;IAC/E,CAAC;IAED,uCAAuC;IACvC,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,0CAA0C;AAC1C,MAAM,CAAC,KAAK,UAAU,MAAM,CAAI,MAAc,EAAE,CAA4B;IAC3E,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;IAE3B,2DAA2D;IAC3D,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,GAAG,CAAC;AACZ,CAAC","sourcesContent":["import { Reader, Writer } from \"../stream.ts\";\n\n// Encodes a message with a u16 (16-bit) size prefix as per draft-14.\nexport async function encode(writer: Writer, f: (w: Writer) => Promise<void>) {\n\tlet scratch = new Uint8Array();\n\n\tconst temp = new Writer(\n\t\tnew WritableStream<Uint8Array>({\n\t\t\twrite(chunk: Uint8Array) {\n\t\t\t\tconst needed = scratch.byteLength + chunk.byteLength;\n\t\t\t\tif (needed > scratch.buffer.byteLength) {\n\t\t\t\t\t// Resize the buffer to the needed size.\n\t\t\t\t\tconst capacity = Math.max(needed, scratch.buffer.byteLength * 2);\n\t\t\t\t\tconst newBuffer = new ArrayBuffer(capacity);\n\t\t\t\t\tconst newScratch = new Uint8Array(newBuffer, 0, needed);\n\n\t\t\t\t\t// Copy the old data into the new buffer.\n\t\t\t\t\tnewScratch.set(scratch);\n\n\t\t\t\t\t// Copy the new chunk into the new buffer.\n\t\t\t\t\tnewScratch.set(chunk, scratch.byteLength);\n\n\t\t\t\t\tscratch = newScratch;\n\t\t\t\t} else {\n\t\t\t\t\t// Copy chunk data into buffer\n\t\t\t\t\tscratch = new Uint8Array(scratch.buffer, 0, needed);\n\t\t\t\t\tscratch.set(chunk, needed - chunk.byteLength);\n\t\t\t\t}\n\t\t\t},\n\t\t}),\n\t\twriter.version,\n\t);\n\n\ttry {\n\t\tawait f(temp);\n\t} finally {\n\t\ttemp.close();\n\t}\n\n\tawait temp.closed;\n\n\t// Check that message fits in u16\n\tif (scratch.byteLength > 65535) {\n\t\tthrow new Error(`Message too large: ${scratch.byteLength} bytes (max 65535)`);\n\t}\n\n\t// Write u16 size (2 bytes, big-endian)\n\tawait writer.u16(scratch.byteLength);\n\tawait writer.write(scratch);\n}\n\n// Reads a message with a u16 size prefix.\nexport async function decode<T>(reader: Reader, f: (r: Reader) => Promise<T>): Promise<T> {\n\tconst size = await reader.u16();\n\tconst data = await reader.read(size);\n\n\tconst limit = new Reader(undefined, data, reader.version);\n\tconst msg = await f(limit);\n\n\t// Check that we consumed exactly the right number of bytes\n\tif (!(await limit.done())) {\n\t\tthrow new Error(\"Message decoding consumed too few bytes\");\n\t}\n\n\treturn msg;\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import * as Path from "../path";
2
+ import type { Reader, Writer } from "../stream";
3
+ export declare function encode(w: Writer, namespace: Path.Valid): Promise<void>;
4
+ export declare function decode(r: Reader): Promise<Path.Valid>;
5
+ //# sourceMappingURL=namespace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/ietf/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEnD,wBAAsB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAY5E;AAED,wBAAsB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAc3D"}
@@ -0,0 +1,27 @@
1
+ /* @ts-self-types="./namespace.d.ts" */
2
+ import * as Path from "../path.js";
3
+ export async function encode(w, namespace) {
4
+ const parts = Path.parts(namespace);
5
+ // The IETF draft limits namespaces to 32 parts.
6
+ if (parts.length > Path.MAX_PARTS) {
7
+ throw new Error(`namespace exceeds ${Path.MAX_PARTS} parts`);
8
+ }
9
+ await w.u53(parts.length);
10
+ for (const part of parts) {
11
+ await w.string(part);
12
+ }
13
+ }
14
+ export async function decode(r) {
15
+ const count = await r.u53();
16
+ // The IETF draft limits namespaces to 32 parts. Reject before reading them so a
17
+ // hostile count can't make us buffer unbounded parts.
18
+ if (count > Path.MAX_PARTS) {
19
+ throw new Error(`namespace exceeds ${Path.MAX_PARTS} parts`);
20
+ }
21
+ const parts = [];
22
+ for (let i = 0; i < count; i++) {
23
+ parts.push(await r.string());
24
+ }
25
+ return Path.from(...parts);
26
+ }
27
+ //# sourceMappingURL=namespace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/ietf/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,YAAY,CAAC;AAGnC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,CAAS,EAAE,SAAqB;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAEpC,gDAAgD;IAChD,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,SAAS,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,CAAS;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;IAE5B,gFAAgF;IAChF,sDAAsD;IACtD,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,SAAS,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;AAC5B,CAAC","sourcesContent":["import * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\n\nexport async function encode(w: Writer, namespace: Path.Valid): Promise<void> {\n\tconst parts = Path.parts(namespace);\n\n\t// The IETF draft limits namespaces to 32 parts.\n\tif (parts.length > Path.MAX_PARTS) {\n\t\tthrow new Error(`namespace exceeds ${Path.MAX_PARTS} parts`);\n\t}\n\n\tawait w.u53(parts.length);\n\tfor (const part of parts) {\n\t\tawait w.string(part);\n\t}\n}\n\nexport async function decode(r: Reader): Promise<Path.Valid> {\n\tconst count = await r.u53();\n\n\t// The IETF draft limits namespaces to 32 parts. Reject before reading them so a\n\t// hostile count can't make us buffer unbounded parts.\n\tif (count > Path.MAX_PARTS) {\n\t\tthrow new Error(`namespace exceeds ${Path.MAX_PARTS} parts`);\n\t}\n\n\tconst parts: string[] = [];\n\tfor (let i = 0; i < count; i++) {\n\t\tparts.push(await r.string());\n\t}\n\treturn Path.from(...parts);\n}\n"]}
@@ -0,0 +1,40 @@
1
+ import type { Reader, Writer } from "../stream";
2
+ import { type IetfVersion } from "./version";
3
+ export interface GroupFlags {
4
+ hasExtensions: boolean;
5
+ hasSubgroup: boolean;
6
+ hasSubgroupObject: boolean;
7
+ hasEnd: boolean;
8
+ hasPriority: boolean;
9
+ }
10
+ /**
11
+ * STREAM_HEADER_SUBGROUP from moq-transport spec.
12
+ * Used for stream-per-group delivery mode.
13
+ */
14
+ export declare class Group {
15
+ flags: GroupFlags;
16
+ trackAlias: bigint;
17
+ groupId: number;
18
+ subGroupId: number;
19
+ publisherPriority: number;
20
+ constructor({ trackAlias, groupId, subGroupId, publisherPriority, flags, }: {
21
+ trackAlias: bigint;
22
+ groupId: number;
23
+ subGroupId: number;
24
+ publisherPriority: number;
25
+ flags: GroupFlags;
26
+ });
27
+ encode(w: Writer, version: IetfVersion): Promise<void>;
28
+ static decode(r: Reader, version: IetfVersion): Promise<Group>;
29
+ }
30
+ export declare class Frame {
31
+ payload?: Uint8Array;
32
+ extensions?: Uint8Array;
33
+ constructor({ payload, extensions }?: {
34
+ payload?: Uint8Array;
35
+ extensions?: Uint8Array;
36
+ });
37
+ encode(w: Writer, flags: GroupFlags): Promise<void>;
38
+ static decode(r: Reader, flags: GroupFlags): Promise<Frame>;
39
+ }
40
+ //# sourceMappingURL=object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/ietf/object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,cAAc,CAAC;AAqBzD,MAAM,WAAW,UAAU;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAGhB,WAAW,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,KAAK;IACjB,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,YAAY,EACX,UAAU,EACV,OAAO,EACP,UAAU,EACV,iBAAiB,EACjB,KAAK,GACL,EAAE;QACF,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,KAAK,EAAE,UAAU,CAAC;KAClB,EAMA;IAEK,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B3D;IAED,OAAa,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CA+BnE;CACD;AAED,qBAAa,KAAK;IAEjB,OAAO,CAAC,EAAE,UAAU,CAAC;IAIrB,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,GAAE;QAAE,OAAO,CAAC,EAAE,UAAU,CAAC;QAAC,UAAU,CAAC,EAAE,UAAU,CAAA;KAAO,EAG1F;IAEK,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBxD;IAED,OAAa,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAiChE;CACD"}
package/ietf/object.js ADDED
@@ -0,0 +1,160 @@
1
+ /* @ts-self-types="./object.d.ts" */
2
+ import { Version } from "./version.js";
3
+ const GROUP_END = 0x03;
4
+ // draft-18 adds bit 0x40 (FIRST_OBJECT) to the subgroup header type per spec
5
+ // 11.4.2. moq-lite always starts subgroups at object 0, so the bit carries no
6
+ // extra information for us: set it on emit, strip it on parse.
7
+ const FIRST_OBJECT_BIT = 0x40;
8
+ function hasFirstObjectBit(version) {
9
+ switch (version) {
10
+ case Version.DRAFT_14:
11
+ case Version.DRAFT_15:
12
+ case Version.DRAFT_16:
13
+ case Version.DRAFT_17:
14
+ return false;
15
+ default:
16
+ return true;
17
+ }
18
+ }
19
+ /**
20
+ * STREAM_HEADER_SUBGROUP from moq-transport spec.
21
+ * Used for stream-per-group delivery mode.
22
+ */
23
+ export class Group {
24
+ flags;
25
+ trackAlias;
26
+ groupId;
27
+ subGroupId;
28
+ publisherPriority;
29
+ constructor({ trackAlias, groupId, subGroupId, publisherPriority, flags, }) {
30
+ this.flags = flags;
31
+ this.trackAlias = trackAlias;
32
+ this.groupId = groupId;
33
+ this.subGroupId = subGroupId;
34
+ this.publisherPriority = publisherPriority;
35
+ }
36
+ async encode(w, version) {
37
+ if (!this.flags.hasSubgroup && this.subGroupId !== 0) {
38
+ throw new Error(`Subgroup ID must be 0 if hasSubgroup is false: ${this.subGroupId}`);
39
+ }
40
+ const base = this.flags.hasPriority ? 0x10 : 0x30;
41
+ let id = base;
42
+ if (this.flags.hasExtensions) {
43
+ id |= 0x01;
44
+ }
45
+ if (this.flags.hasSubgroupObject) {
46
+ id |= 0x02;
47
+ }
48
+ if (this.flags.hasSubgroup) {
49
+ id |= 0x04;
50
+ }
51
+ if (this.flags.hasEnd) {
52
+ id |= 0x08;
53
+ }
54
+ if (hasFirstObjectBit(version)) {
55
+ id |= FIRST_OBJECT_BIT;
56
+ }
57
+ await w.u53(id);
58
+ await w.u62(this.trackAlias);
59
+ await w.u53(this.groupId);
60
+ if (this.flags.hasSubgroup) {
61
+ await w.u53(this.subGroupId);
62
+ }
63
+ if (this.flags.hasPriority) {
64
+ await w.u8(this.publisherPriority);
65
+ }
66
+ }
67
+ static async decode(r, version) {
68
+ const raw = await r.u53();
69
+ // Strip the draft-18 FIRST_OBJECT bit before the range check.
70
+ const id = hasFirstObjectBit(version) ? raw & ~FIRST_OBJECT_BIT : raw;
71
+ let hasPriority;
72
+ let baseId;
73
+ if (id >= 0x10 && id <= 0x1f) {
74
+ hasPriority = true;
75
+ baseId = id;
76
+ }
77
+ else if (id >= 0x30 && id <= 0x3f) {
78
+ hasPriority = false;
79
+ baseId = id - (0x30 - 0x10);
80
+ }
81
+ else {
82
+ throw new Error(`Unsupported group type: ${id}`);
83
+ }
84
+ const flags = {
85
+ hasExtensions: (baseId & 0x01) !== 0,
86
+ hasSubgroupObject: (baseId & 0x02) !== 0,
87
+ hasSubgroup: (baseId & 0x04) !== 0,
88
+ hasEnd: (baseId & 0x08) !== 0,
89
+ hasPriority,
90
+ };
91
+ const trackAlias = await r.u62();
92
+ const groupId = await r.u53();
93
+ const subGroupId = flags.hasSubgroup ? await r.u53() : 0;
94
+ const publisherPriority = hasPriority ? await r.u8() : 128; // Default priority when absent
95
+ return new Group({ trackAlias, groupId, subGroupId, publisherPriority, flags });
96
+ }
97
+ }
98
+ export class Frame {
99
+ // undefined means end of group
100
+ payload;
101
+ // Raw MOQ Object Properties / extension-header bytes (§11.2.1.2), if the
102
+ // subgroup carried the PROPERTIES bit. draft-ietf-moq-loc-03 rides its
103
+ // Timestamp/Timescale/VideoConfig here; undefined when there were none.
104
+ extensions;
105
+ constructor({ payload, extensions } = {}) {
106
+ this.payload = payload;
107
+ this.extensions = extensions;
108
+ }
109
+ async encode(w, flags) {
110
+ await w.u53(0); // id_delta = 0
111
+ if (flags.hasExtensions) {
112
+ await w.u53(0); // extensions length = 0
113
+ }
114
+ if (this.payload !== undefined) {
115
+ await w.u53(this.payload.byteLength);
116
+ if (this.payload.byteLength === 0) {
117
+ await w.u53(0); // status = normal
118
+ }
119
+ else {
120
+ await w.write(this.payload);
121
+ }
122
+ }
123
+ else {
124
+ await w.u53(0); // length = 0
125
+ await w.u53(GROUP_END);
126
+ }
127
+ }
128
+ static async decode(r, flags) {
129
+ const delta = await r.u53();
130
+ if (delta !== 0) {
131
+ throw new Error(`object ID delta is not supported: ${delta}`);
132
+ }
133
+ let extensions;
134
+ if (flags.hasExtensions) {
135
+ const extensionsLength = await r.u53();
136
+ // Keep the extension bytes so per-object metadata (e.g. the LOC
137
+ // Timestamp/Timescale/VideoConfig, draft-ietf-moq-loc-03 §2.3) survives
138
+ // up to the container decoder instead of being dropped here.
139
+ if (extensionsLength > 0)
140
+ extensions = await r.read(extensionsLength);
141
+ }
142
+ const payloadLength = await r.u53();
143
+ if (payloadLength > 0) {
144
+ const payload = await r.read(payloadLength);
145
+ return new Frame({ payload, extensions });
146
+ }
147
+ const status = await r.u53();
148
+ if (flags.hasEnd) {
149
+ // Empty frame
150
+ if (status === 0)
151
+ return new Frame({ payload: new Uint8Array(0) });
152
+ }
153
+ else if (status === 0 || status === GROUP_END) {
154
+ // TODO status === 0 should be an empty frame, but moq-rs seems to be sending it incorrectly on group end.
155
+ return new Frame();
156
+ }
157
+ throw new Error(`Unsupported object status: ${status}`);
158
+ }
159
+ }
160
+ //# sourceMappingURL=object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/ietf/object.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Reader, Writer } from \"../stream.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\nconst GROUP_END = 0x03;\n\n// draft-18 adds bit 0x40 (FIRST_OBJECT) to the subgroup header type per spec\n// 11.4.2. moq-lite always starts subgroups at object 0, so the bit carries no\n// extra information for us: set it on emit, strip it on parse.\nconst FIRST_OBJECT_BIT = 0x40;\n\nfunction hasFirstObjectBit(version: IetfVersion): boolean {\n\tswitch (version) {\n\t\tcase Version.DRAFT_14:\n\t\tcase Version.DRAFT_15:\n\t\tcase Version.DRAFT_16:\n\t\tcase Version.DRAFT_17:\n\t\t\treturn false;\n\t\tdefault:\n\t\t\treturn true;\n\t}\n}\n\nexport interface GroupFlags {\n\thasExtensions: boolean;\n\thasSubgroup: boolean;\n\thasSubgroupObject: boolean;\n\thasEnd: boolean;\n\t// v15: whether priority is present in the header.\n\t// When false (0x30 base), priority inherits from the control message.\n\thasPriority: boolean;\n}\n\n/**\n * STREAM_HEADER_SUBGROUP from moq-transport spec.\n * Used for stream-per-group delivery mode.\n */\nexport class Group {\n\tflags: GroupFlags;\n\ttrackAlias: bigint;\n\tgroupId: number;\n\tsubGroupId: number;\n\tpublisherPriority: number;\n\n\tconstructor({\n\t\ttrackAlias,\n\t\tgroupId,\n\t\tsubGroupId,\n\t\tpublisherPriority,\n\t\tflags,\n\t}: {\n\t\ttrackAlias: bigint;\n\t\tgroupId: number;\n\t\tsubGroupId: number;\n\t\tpublisherPriority: number;\n\t\tflags: GroupFlags;\n\t}) {\n\t\tthis.flags = flags;\n\t\tthis.trackAlias = trackAlias;\n\t\tthis.groupId = groupId;\n\t\tthis.subGroupId = subGroupId;\n\t\tthis.publisherPriority = publisherPriority;\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (!this.flags.hasSubgroup && this.subGroupId !== 0) {\n\t\t\tthrow new Error(`Subgroup ID must be 0 if hasSubgroup is false: ${this.subGroupId}`);\n\t\t}\n\n\t\tconst base = this.flags.hasPriority ? 0x10 : 0x30;\n\t\tlet id = base;\n\t\tif (this.flags.hasExtensions) {\n\t\t\tid |= 0x01;\n\t\t}\n\t\tif (this.flags.hasSubgroupObject) {\n\t\t\tid |= 0x02;\n\t\t}\n\t\tif (this.flags.hasSubgroup) {\n\t\t\tid |= 0x04;\n\t\t}\n\t\tif (this.flags.hasEnd) {\n\t\t\tid |= 0x08;\n\t\t}\n\t\tif (hasFirstObjectBit(version)) {\n\t\t\tid |= FIRST_OBJECT_BIT;\n\t\t}\n\t\tawait w.u53(id);\n\t\tawait w.u62(this.trackAlias);\n\t\tawait w.u53(this.groupId);\n\t\tif (this.flags.hasSubgroup) {\n\t\t\tawait w.u53(this.subGroupId);\n\t\t}\n\t\tif (this.flags.hasPriority) {\n\t\t\tawait w.u8(this.publisherPriority);\n\t\t}\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<Group> {\n\t\tconst raw = await r.u53();\n\t\t// Strip the draft-18 FIRST_OBJECT bit before the range check.\n\t\tconst id = hasFirstObjectBit(version) ? raw & ~FIRST_OBJECT_BIT : raw;\n\n\t\tlet hasPriority: boolean;\n\t\tlet baseId: number;\n\t\tif (id >= 0x10 && id <= 0x1f) {\n\t\t\thasPriority = true;\n\t\t\tbaseId = id;\n\t\t} else if (id >= 0x30 && id <= 0x3f) {\n\t\t\thasPriority = false;\n\t\t\tbaseId = id - (0x30 - 0x10);\n\t\t} else {\n\t\t\tthrow new Error(`Unsupported group type: ${id}`);\n\t\t}\n\n\t\tconst flags: GroupFlags = {\n\t\t\thasExtensions: (baseId & 0x01) !== 0,\n\t\t\thasSubgroupObject: (baseId & 0x02) !== 0,\n\t\t\thasSubgroup: (baseId & 0x04) !== 0,\n\t\t\thasEnd: (baseId & 0x08) !== 0,\n\t\t\thasPriority,\n\t\t};\n\n\t\tconst trackAlias = await r.u62();\n\t\tconst groupId = await r.u53();\n\t\tconst subGroupId = flags.hasSubgroup ? await r.u53() : 0;\n\t\tconst publisherPriority = hasPriority ? await r.u8() : 128; // Default priority when absent\n\n\t\treturn new Group({ trackAlias, groupId, subGroupId, publisherPriority, flags });\n\t}\n}\n\nexport class Frame {\n\t// undefined means end of group\n\tpayload?: Uint8Array;\n\t// Raw MOQ Object Properties / extension-header bytes (§11.2.1.2), if the\n\t// subgroup carried the PROPERTIES bit. draft-ietf-moq-loc-03 rides its\n\t// Timestamp/Timescale/VideoConfig here; undefined when there were none.\n\textensions?: Uint8Array;\n\n\tconstructor({ payload, extensions }: { payload?: Uint8Array; extensions?: Uint8Array } = {}) {\n\t\tthis.payload = payload;\n\t\tthis.extensions = extensions;\n\t}\n\n\tasync encode(w: Writer, flags: GroupFlags): Promise<void> {\n\t\tawait w.u53(0); // id_delta = 0\n\n\t\tif (flags.hasExtensions) {\n\t\t\tawait w.u53(0); // extensions length = 0\n\t\t}\n\n\t\tif (this.payload !== undefined) {\n\t\t\tawait w.u53(this.payload.byteLength);\n\n\t\t\tif (this.payload.byteLength === 0) {\n\t\t\t\tawait w.u53(0); // status = normal\n\t\t\t} else {\n\t\t\t\tawait w.write(this.payload);\n\t\t\t}\n\t\t} else {\n\t\t\tawait w.u53(0); // length = 0\n\t\t\tawait w.u53(GROUP_END);\n\t\t}\n\t}\n\n\tstatic async decode(r: Reader, flags: GroupFlags): Promise<Frame> {\n\t\tconst delta = await r.u53();\n\t\tif (delta !== 0) {\n\t\t\tthrow new Error(`object ID delta is not supported: ${delta}`);\n\t\t}\n\n\t\tlet extensions: Uint8Array | undefined;\n\t\tif (flags.hasExtensions) {\n\t\t\tconst extensionsLength = await r.u53();\n\t\t\t// Keep the extension bytes so per-object metadata (e.g. the LOC\n\t\t\t// Timestamp/Timescale/VideoConfig, draft-ietf-moq-loc-03 §2.3) survives\n\t\t\t// up to the container decoder instead of being dropped here.\n\t\t\tif (extensionsLength > 0) extensions = await r.read(extensionsLength);\n\t\t}\n\n\t\tconst payloadLength = await r.u53();\n\n\t\tif (payloadLength > 0) {\n\t\t\tconst payload = await r.read(payloadLength);\n\t\t\treturn new Frame({ payload, extensions });\n\t\t}\n\n\t\tconst status = await r.u53();\n\n\t\tif (flags.hasEnd) {\n\t\t\t// Empty frame\n\t\t\tif (status === 0) return new Frame({ payload: new Uint8Array(0) });\n\t\t} else if (status === 0 || status === GROUP_END) {\n\t\t\t// TODO status === 0 should be an empty frame, but moq-rs seems to be sending it incorrectly on group end.\n\t\t\treturn new Frame();\n\t\t}\n\n\t\tthrow new Error(`Unsupported object status: ${status}`);\n\t}\n}\n"]}