@norskvideo/moq-net 0.1.8 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/README.md +2 -2
  2. package/announce.d.ts +7 -0
  3. package/announce.d.ts.map +1 -0
  4. package/announce.js +8 -0
  5. package/announce.js.map +1 -0
  6. package/announced.d.ts +49 -91
  7. package/announced.d.ts.map +1 -1
  8. package/announced.js +21 -156
  9. package/announced.js.map +1 -1
  10. package/bandwidth.d.ts +163 -0
  11. package/bandwidth.d.ts.map +1 -0
  12. package/bandwidth.js +304 -0
  13. package/bandwidth.js.map +1 -0
  14. package/bandwidth_api.d.ts +7 -0
  15. package/bandwidth_api.d.ts.map +1 -0
  16. package/bandwidth_api.js +8 -0
  17. package/bandwidth_api.js.map +1 -0
  18. package/broadcast.d.ts +44 -35
  19. package/broadcast.d.ts.map +1 -1
  20. package/broadcast.js +104 -60
  21. package/broadcast.js.map +1 -1
  22. package/connection/accept.d.ts +16 -1
  23. package/connection/accept.d.ts.map +1 -1
  24. package/connection/accept.js +52 -28
  25. package/connection/accept.js.map +1 -1
  26. package/connection/browser.d.ts.map +1 -1
  27. package/connection/browser.js +9 -7
  28. package/connection/browser.js.map +1 -1
  29. package/connection/connect.d.ts +30 -6
  30. package/connection/connect.d.ts.map +1 -1
  31. package/connection/connect.js +110 -54
  32. package/connection/connect.js.map +1 -1
  33. package/connection/established.d.ts +17 -21
  34. package/connection/established.d.ts.map +1 -1
  35. package/connection/established.js.map +1 -1
  36. package/connection/forward.d.ts +2 -0
  37. package/connection/forward.d.ts.map +1 -0
  38. package/connection/forward.js +173 -0
  39. package/connection/forward.js.map +1 -0
  40. package/connection/handshake.d.ts +1 -0
  41. package/connection/handshake.d.ts.map +1 -1
  42. package/connection/handshake.js +5 -2
  43. package/connection/handshake.js.map +1 -1
  44. package/connection/index.d.ts +5 -5
  45. package/connection/index.d.ts.map +1 -1
  46. package/connection/index.js +4 -5
  47. package/connection/index.js.map +1 -1
  48. package/connection/pool.d.ts +186 -0
  49. package/connection/pool.d.ts.map +1 -0
  50. package/connection/pool.js +361 -0
  51. package/connection/pool.js.map +1 -0
  52. package/connection/reload.d.ts +14 -93
  53. package/connection/reload.d.ts.map +1 -1
  54. package/connection/reload.js +217 -81
  55. package/connection/reload.js.map +1 -1
  56. package/connection/stats.d.ts +3 -26
  57. package/connection/stats.d.ts.map +1 -1
  58. package/connection/stats.js.map +1 -1
  59. package/connection/transport.d.ts +0 -7
  60. package/connection/transport.d.ts.map +1 -1
  61. package/consume.d.ts +1 -43
  62. package/consume.d.ts.map +1 -1
  63. package/consume.js +1 -1
  64. package/consume.js.map +1 -1
  65. package/error.d.ts +180 -29
  66. package/error.d.ts.map +1 -1
  67. package/error.js +331 -16
  68. package/error.js.map +1 -1
  69. package/errors.d.ts +7 -0
  70. package/errors.d.ts.map +1 -0
  71. package/errors.js +8 -0
  72. package/errors.js.map +1 -0
  73. package/group.d.ts +9 -43
  74. package/group.d.ts.map +1 -1
  75. package/group.js +284 -69
  76. package/group.js.map +1 -1
  77. package/hop.d.ts +115 -0
  78. package/hop.d.ts.map +1 -0
  79. package/hop.js +119 -0
  80. package/hop.js.map +1 -0
  81. package/ietf/adapter.d.ts +5 -1
  82. package/ietf/adapter.d.ts.map +1 -1
  83. package/ietf/adapter.js +105 -60
  84. package/ietf/adapter.js.map +1 -1
  85. package/ietf/aliases.d.ts +1 -78
  86. package/ietf/aliases.d.ts.map +1 -1
  87. package/ietf/cluster.d.ts +9 -123
  88. package/ietf/cluster.d.ts.map +1 -1
  89. package/ietf/cluster.js +84 -44
  90. package/ietf/cluster.js.map +1 -1
  91. package/ietf/connection.d.ts +6 -72
  92. package/ietf/connection.d.ts.map +1 -1
  93. package/ietf/connection.js +62 -56
  94. package/ietf/connection.js.map +1 -1
  95. package/ietf/error.d.ts +11 -0
  96. package/ietf/error.d.ts.map +1 -0
  97. package/ietf/error.js +193 -0
  98. package/ietf/error.js.map +1 -0
  99. package/ietf/fetch.d.ts +7 -20
  100. package/ietf/fetch.d.ts.map +1 -1
  101. package/ietf/fetch.js +52 -22
  102. package/ietf/fetch.js.map +1 -1
  103. package/ietf/filter.d.ts +2 -0
  104. package/ietf/filter.d.ts.map +1 -1
  105. package/ietf/filter.js +10 -1
  106. package/ietf/filter.js.map +1 -1
  107. package/ietf/goaway.d.ts.map +1 -1
  108. package/ietf/goaway.js +22 -5
  109. package/ietf/goaway.js.map +1 -1
  110. package/ietf/hidden.d.ts +2 -0
  111. package/ietf/hidden.d.ts.map +1 -0
  112. package/ietf/hidden.js +30 -0
  113. package/ietf/hidden.js.map +1 -0
  114. package/ietf/index.d.ts +2 -0
  115. package/ietf/index.d.ts.map +1 -1
  116. package/ietf/index.js +2 -0
  117. package/ietf/index.js.map +1 -1
  118. package/ietf/object.d.ts +15 -8
  119. package/ietf/object.d.ts.map +1 -1
  120. package/ietf/object.js +51 -36
  121. package/ietf/object.js.map +1 -1
  122. package/ietf/parameters.d.ts +14 -2
  123. package/ietf/parameters.d.ts.map +1 -1
  124. package/ietf/parameters.js +97 -29
  125. package/ietf/parameters.js.map +1 -1
  126. package/ietf/properties.d.ts +1 -0
  127. package/ietf/properties.d.ts.map +1 -1
  128. package/ietf/properties.js +14 -0
  129. package/ietf/properties.js.map +1 -1
  130. package/ietf/publish.d.ts +19 -2
  131. package/ietf/publish.d.ts.map +1 -1
  132. package/ietf/publish.js +40 -6
  133. package/ietf/publish.js.map +1 -1
  134. package/ietf/publish_namespace.d.ts +25 -0
  135. package/ietf/publish_namespace.d.ts.map +1 -1
  136. package/ietf/publish_namespace.js +63 -0
  137. package/ietf/publish_namespace.js.map +1 -1
  138. package/ietf/publisher.d.ts +1 -82
  139. package/ietf/publisher.d.ts.map +1 -1
  140. package/ietf/publisher.js +483 -235
  141. package/ietf/publisher.js.map +1 -1
  142. package/ietf/solicit.d.ts +1 -40
  143. package/ietf/solicit.d.ts.map +1 -1
  144. package/ietf/subscribe.d.ts +8 -6
  145. package/ietf/subscribe.d.ts.map +1 -1
  146. package/ietf/subscribe.js +33 -27
  147. package/ietf/subscribe.js.map +1 -1
  148. package/ietf/subscribe_namespace.d.ts +8 -2
  149. package/ietf/subscribe_namespace.d.ts.map +1 -1
  150. package/ietf/subscribe_namespace.js +18 -8
  151. package/ietf/subscribe_namespace.js.map +1 -1
  152. package/ietf/subscriber.d.ts +1 -65
  153. package/ietf/subscriber.d.ts.map +1 -1
  154. package/ietf/subscriber.js +337 -123
  155. package/ietf/subscriber.js.map +1 -1
  156. package/ietf/token.d.ts +2 -0
  157. package/ietf/token.d.ts.map +1 -0
  158. package/ietf/token.js +99 -0
  159. package/ietf/token.js.map +1 -0
  160. package/ietf/track.d.ts +4 -0
  161. package/ietf/track.d.ts.map +1 -1
  162. package/ietf/track.js +6 -20
  163. package/ietf/track.js.map +1 -1
  164. package/ietf/version.d.ts +12 -1
  165. package/ietf/version.d.ts.map +1 -1
  166. package/ietf/version.js +13 -0
  167. package/ietf/version.js.map +1 -1
  168. package/index.d.ts +12 -7
  169. package/index.d.ts.map +1 -1
  170. package/index.js +10 -5
  171. package/index.js.map +1 -1
  172. package/internal.d.ts +115 -1
  173. package/internal.d.ts.map +1 -1
  174. package/internal.js +108 -0
  175. package/internal.js.map +1 -1
  176. package/lite/announce.d.ts +60 -10
  177. package/lite/announce.d.ts.map +1 -1
  178. package/lite/announce.js +176 -31
  179. package/lite/announce.js.map +1 -1
  180. package/lite/connection.d.ts +9 -59
  181. package/lite/connection.d.ts.map +1 -1
  182. package/lite/connection.js +34 -35
  183. package/lite/connection.js.map +1 -1
  184. package/lite/datagram.d.ts +3 -2
  185. package/lite/datagram.d.ts.map +1 -1
  186. package/lite/datagram.js +7 -8
  187. package/lite/datagram.js.map +1 -1
  188. package/lite/fetch.d.ts +15 -1
  189. package/lite/fetch.d.ts.map +1 -1
  190. package/lite/fetch.js +39 -7
  191. package/lite/fetch.js.map +1 -1
  192. package/lite/goaway.d.ts.map +1 -1
  193. package/lite/goaway.js +7 -1
  194. package/lite/goaway.js.map +1 -1
  195. package/lite/group.d.ts +30 -12
  196. package/lite/group.d.ts.map +1 -1
  197. package/lite/group.js +68 -26
  198. package/lite/group.js.map +1 -1
  199. package/lite/message.d.ts +2 -2
  200. package/lite/message.d.ts.map +1 -1
  201. package/lite/message.js +14 -5
  202. package/lite/message.js.map +1 -1
  203. package/lite/priority.d.ts +1 -61
  204. package/lite/priority.d.ts.map +1 -1
  205. package/lite/priority.js +4 -5
  206. package/lite/priority.js.map +1 -1
  207. package/lite/publisher.d.ts +1 -69
  208. package/lite/publisher.d.ts.map +1 -1
  209. package/lite/publisher.js +630 -262
  210. package/lite/publisher.js.map +1 -1
  211. package/lite/setup.d.ts +8 -8
  212. package/lite/setup.d.ts.map +1 -1
  213. package/lite/setup.js +33 -30
  214. package/lite/setup.js.map +1 -1
  215. package/lite/subscribe.d.ts +71 -17
  216. package/lite/subscribe.d.ts.map +1 -1
  217. package/lite/subscribe.js +205 -53
  218. package/lite/subscribe.js.map +1 -1
  219. package/lite/subscriber.d.ts +15 -56
  220. package/lite/subscriber.d.ts.map +1 -1
  221. package/lite/subscriber.js +451 -247
  222. package/lite/subscriber.js.map +1 -1
  223. package/lite/track.d.ts +4 -10
  224. package/lite/track.d.ts.map +1 -1
  225. package/lite/track.js +34 -29
  226. package/lite/track.js.map +1 -1
  227. package/lite/version.d.ts +42 -6
  228. package/lite/version.d.ts.map +1 -1
  229. package/lite/version.js +126 -10
  230. package/lite/version.js.map +1 -1
  231. package/origin.d.ts +256 -29
  232. package/origin.d.ts.map +1 -1
  233. package/origin.js +1427 -37
  234. package/origin.js.map +1 -1
  235. package/package.json +8 -3
  236. package/path.d.ts +25 -7
  237. package/path.d.ts.map +1 -1
  238. package/path.js +5 -3
  239. package/path.js.map +1 -1
  240. package/stream.d.ts +73 -14
  241. package/stream.d.ts.map +1 -1
  242. package/stream.js +372 -141
  243. package/stream.js.map +1 -1
  244. package/tail.d.ts +18 -0
  245. package/tail.d.ts.map +1 -0
  246. package/tail.js +167 -0
  247. package/tail.js.map +1 -0
  248. package/time.d.ts +15 -2
  249. package/time.d.ts.map +1 -1
  250. package/time.js +28 -9
  251. package/time.js.map +1 -1
  252. package/track.d.ts +211 -83
  253. package/track.d.ts.map +1 -1
  254. package/track.js +816 -205
  255. package/track.js.map +1 -1
  256. package/util/abort.d.ts +2 -0
  257. package/util/abort.d.ts.map +1 -0
  258. package/util/abort.js +20 -0
  259. package/util/abort.js.map +1 -0
  260. package/util/log.d.ts +5 -0
  261. package/util/log.d.ts.map +1 -0
  262. package/util/log.js +17 -0
  263. package/util/log.js.map +1 -0
  264. package/util/u64.d.ts +39 -0
  265. package/util/u64.d.ts.map +1 -0
  266. package/util/u64.js +83 -0
  267. package/util/u64.js.map +1 -0
  268. package/util/varint.d.ts +29 -0
  269. package/util/varint.d.ts.map +1 -0
  270. package/util/varint.js +198 -0
  271. package/util/varint.js.map +1 -0
  272. package/varint.d.ts +10 -6
  273. package/varint.d.ts.map +1 -1
  274. package/varint.js +40 -237
  275. package/varint.js.map +1 -1
  276. package/wire.d.ts +80 -0
  277. package/wire.d.ts.map +1 -0
  278. package/wire.js +32 -0
  279. package/wire.js.map +1 -0
  280. package/zod.d.ts +1 -1
  281. package/zod.d.ts.map +1 -1
  282. package/zod.js.map +1 -1
  283. package/mock.d.ts +0 -66
  284. package/mock.d.ts.map +0 -1
  285. package/mock.js +0 -243
  286. package/mock.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/ietf/object.ts"],"names":[],"mappings":"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","sourcesContent":["import { Reader, Writer } from \"../stream.ts\";\nimport { Timescale, Timestamp } from \"../time.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\nconst GROUP_END = 0x03;\n\n// MOQ Object Property ids, shared with draft-ietf-moq-loc-04.\nconst PROP_TIMESCALE = 0x08n;\nconst PROP_TIMESTAMP = 0x10n;\n\n// The Timestamp id from draft-ietf-moq-loc-03, accepted on decode only. Draft-03's\n// body text and its IANA table disagreed (0x0A vs 0x06); this is the table's value,\n// which is what shipped. Draft-04 assigns 0x0A to Secure Objects private properties,\n// so it is not accepted here.\nconst PROP_TIMESTAMP_DRAFT03 = 0x06n;\n\n// draft-18 adds bit 0x40 (FIRST_OBJECT) to the subgroup header type per spec\n// 11.4.2. Set on emit unless a filter trimmed the group's head; on parse a\n// cleared bit is the peer saying its stream starts partway through a group,\n// which the subscriber drops.\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\nfunction hasDeltaObjectPropertyTypes(version: IetfVersion | undefined): boolean {\n\tswitch (version) {\n\t\tcase Version.DRAFT_14:\n\t\tcase Version.DRAFT_15:\n\t\t\treturn false;\n\t\tdefault:\n\t\t\treturn true;\n\t}\n}\n\nasync function encodeObjectPropertyType(\n\tw: Writer,\n\tid: bigint,\n\tprev: bigint,\n\tversion: IetfVersion | undefined,\n): Promise<void> {\n\tconst encoded = hasDeltaObjectPropertyTypes(version) ? id - prev : id;\n\tawait w.u62(encoded);\n}\n\n// The units come from the track's TIMESCALE property, not from here: repeating the\n// timescale on every object would cost bytes per frame to restate something fixed for\n// the track's lifetime. The timestamp is converted into the track's units so the value\n// on the wire matches what the track declared.\nasync function encodeObjectTime(\n\tw: Writer,\n\ttimestamp: Timestamp,\n\ttimescale: Timescale,\n\tversion: IetfVersion | undefined,\n): Promise<void> {\n\tconst value = Math.round((timestamp.value * timescale) / timestamp.scale);\n\tawait encodeObjectPropertyType(w, PROP_TIMESTAMP, 0n, version);\n\tawait w.u62(BigInt(value));\n}\n\nasync function encodeObjectExtensions(\n\ttimestamp: Timestamp | undefined,\n\ttimescale: Timescale,\n\tversion: IetfVersion | undefined,\n): Promise<Uint8Array> {\n\tif (timestamp === undefined) {\n\t\treturn new Uint8Array();\n\t}\n\n\tconst chunks: Uint8Array[] = [];\n\tconst writer = new Writer(\n\t\tnew WritableStream<Uint8Array>({\n\t\t\twrite(chunk) {\n\t\t\t\tchunks.push(new Uint8Array(chunk));\n\t\t\t},\n\t\t}),\n\t\tversion,\n\t);\n\tawait encodeObjectTime(writer, timestamp, timescale, version);\n\twriter.close();\n\tawait writer.closed;\n\n\tconst size = chunks.reduce((total, chunk) => total + chunk.byteLength, 0);\n\tconst result = new Uint8Array(size);\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\nasync function decodeObjectTime(\n\tr: Reader,\n\ttimescale: Timescale | undefined,\n\tversion: IetfVersion | undefined,\n): Promise<Timestamp | undefined> {\n\tlet timestamp: bigint | undefined;\n\tlet overrideScale: bigint | undefined;\n\tlet prevType = 0n;\n\tlet first = true;\n\n\twhile (!(await r.done())) {\n\t\tconst step = await r.u62();\n\t\tconst id = !hasDeltaObjectPropertyTypes(version) || first ? step : prevType + step;\n\t\tfirst = false;\n\t\tprevType = id;\n\n\t\tif (id % 2n === 0n) {\n\t\t\tconst value = await r.u62();\n\t\t\tif (id === PROP_TIMESTAMP || id === PROP_TIMESTAMP_DRAFT03) {\n\t\t\t\ttimestamp = value;\n\t\t\t} else if (id === PROP_TIMESCALE) {\n\t\t\t\toverrideScale = value;\n\t\t\t}\n\t\t} else {\n\t\t\tconst size = await r.u53();\n\t\t\tawait r.read(size);\n\t\t}\n\t}\n\n\tif (timestamp === undefined) {\n\t\treturn undefined;\n\t}\n\n\t// An object-scope Timescale (which LOC permits) overrides the track's for this object, and\n\t// on a track that declared none it is the only statement of the units there is: a\n\t// publisher on a draft with no TIMESCALE track property (Norsk on draft-16) can say\n\t// nothing else. A Timestamp with no units anywhere cannot be interpreted; guessing them\n\t// would be worse than the arrival stamp the caller falls back to.\n\tconst scale = overrideScale !== undefined ? Timescale(Number(overrideScale)) : timescale;\n\tif (scale === undefined) {\n\t\treturn undefined;\n\t}\n\treturn new Timestamp(Number(timestamp), scale);\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\t/**\n\t * Whether this stream carries the subgroup from its first published object.\n\t *\n\t * A subgroup that starts partway through has a hole at the front, which moq-lite cannot\n\t * represent. Always true on the drafts that predate the FIRST_OBJECT bit (before\n\t * draft-18), where there is no such signal to read.\n\t */\n\tfirstObject: 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 (this.flags.firstObject && 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, but keep the value:\n\t\t// it is the only signal that a subgroup starts partway through. Drafts that predate\n\t\t// it carry no such signal, so they are taken at their word.\n\t\tconst legacy = !hasFirstObjectBit(version);\n\t\tconst firstObject = legacy || (raw & FIRST_OBJECT_BIT) !== 0;\n\t\tconst id = legacy ? raw : raw & ~FIRST_OBJECT_BIT;\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\tfirstObject,\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\n/** A moq-transport object inside a group stream. */\nexport class Frame {\n\t/** The object payload, or `undefined` for the end of group marker. */\n\tpayload?: Uint8Array;\n\t/** The presentation timestamp carried in object properties, when present. */\n\ttimestamp?: Timestamp;\n\n\tconstructor({ payload, timestamp }: { payload?: Uint8Array; timestamp?: Timestamp } = {}) {\n\t\tthis.payload = payload;\n\t\tthis.timestamp = timestamp;\n\t}\n\n\t/**\n\t * Encode this frame using the group flags and negotiated IETF version.\n\t *\n\t * `idDelta` is the first object's absolute Object ID and zero for every later one, so a\n\t * group whose head was trimmed by a filter still puts the true numbering on the wire.\n\t */\n\tasync encode(w: Writer, flags: GroupFlags, timescale: Timescale, version = w.version, idDelta = 0): Promise<void> {\n\t\tawait w.u53(idDelta);\n\n\t\tif (flags.hasExtensions) {\n\t\t\tconst extensions = await encodeObjectExtensions(this.timestamp, timescale, version);\n\t\t\tawait w.u53(extensions.byteLength);\n\t\t\tawait w.write(extensions);\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\t/** Decode a frame using the group flags and negotiated IETF version. */\n\tstatic async decode(\n\t\tr: Reader,\n\t\tflags: GroupFlags,\n\t\ttimescale: Timescale | undefined,\n\t\tversion = r.version,\n\t): Promise<Frame> {\n\t\t// The first object's delta is its absolute Object ID; every later one is the prior ID\n\t\t// plus the delta plus one. moq-lite groups start at object 0 and never skip one, so\n\t\t// a sequential group is a zero delta throughout, and any other value means the group\n\t\t// either starts partway through or has a gap that would renumber the frames after it.\n\t\tconst delta = await r.u53();\n\t\tif (delta !== 0) {\n\t\t\tthrow new Error(`object IDs must start at 0 and increment by 1, got a delta of ${delta}`);\n\t\t}\n\n\t\tlet timestamp: Timestamp | undefined;\n\t\tif (flags.hasExtensions) {\n\t\t\tconst extensionsLength = await r.u53();\n\t\t\tconst extensions = await r.read(extensionsLength);\n\t\t\t// The track's TIMESCALE gives the units, or the object's own does; an object with\n\t\t\t// neither is stamped on arrival by the caller, even if it carries a Timestamp.\n\t\t\ttimestamp = await decodeObjectTime(new Reader(undefined, extensions, version), timescale, version);\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, timestamp });\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), timestamp });\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\n// Serialization Flags for a fetch object: the two low bits encode the subgroup (00 =\n// subgroup zero), then one presence bit per field.\nconst FETCH_OBJECT_ID = 0x04;\nconst FETCH_GROUP_ID = 0x08;\nconst FETCH_PRIORITY = 0x10;\nconst FETCH_PROPERTIES = 0x20;\n\n/** Where a {@link FetchFrame} sits in the track, and whether it opens the stream. */\nexport interface FetchPosition {\n\t/** The group's sequence number. */\n\tgroup: number;\n\t/** The object's id within that group. */\n\tobject: number;\n\t/** Whether this is the stream's first object, which is what carries the absolute ids. */\n\tfirst: boolean;\n}\n\n/**\n * A moq-transport object inside a fetch stream, which a publisher writes to serve a fill.\n *\n * The first object carries its absolute Group and Object IDs plus the priority; every later\n * one inherits them and increments the Object ID, so only the properties and the payload go\n * on the wire. A fetch object has no status field: a zero payload length is simply an empty\n * object.\n */\nexport class FetchFrame {\n\t/** The object payload. */\n\tpayload: Uint8Array;\n\t/** The presentation timestamp carried in object properties, when present. */\n\ttimestamp?: Timestamp;\n\n\tconstructor({ payload, timestamp }: { payload: Uint8Array; timestamp?: Timestamp }) {\n\t\tthis.payload = payload;\n\t\tthis.timestamp = timestamp;\n\t}\n\n\t/** Encode this object at `position`, stamping it in the track's timescale. */\n\tasync encode(w: Writer, position: FetchPosition, timescale: Timescale, version = w.version): Promise<void> {\n\t\tif (position.first) {\n\t\t\t// Include the priority too: \"same as the prior object\" has no prior to refer to.\n\t\t\tconst properties = this.timestamp !== undefined ? FETCH_PROPERTIES : 0;\n\t\t\tawait w.u53(FETCH_GROUP_ID | FETCH_OBJECT_ID | FETCH_PRIORITY | properties);\n\t\t\tawait w.u53(position.group);\n\t\t\tawait w.u53(position.object);\n\t\t\tawait w.u8(0);\n\t\t} else {\n\t\t\t// Same group and priority; the Object ID is the prior one plus one.\n\t\t\tawait w.u53(this.timestamp !== undefined ? FETCH_PROPERTIES : 0);\n\t\t}\n\n\t\t// Omitted entirely rather than written empty when the object carries no timestamp:\n\t\t// the track declared no units, so there is no property to send.\n\t\tif (this.timestamp !== undefined) {\n\t\t\tconst extensions = await encodeObjectExtensions(this.timestamp, timescale, version);\n\t\t\tawait w.u53(extensions.byteLength);\n\t\t\tawait w.write(extensions);\n\t\t}\n\n\t\tawait w.u53(this.payload.byteLength);\n\t\tif (this.payload.byteLength > 0) {\n\t\t\tawait w.write(this.payload);\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/ietf/object.ts"],"names":[],"mappings":"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","sourcesContent":["import { ProtocolViolation, StreamCode, Stream as StreamError } from \"../error.ts\";\nimport { asIetf, type Cursor, type Reader, Writer } from \"../stream.ts\";\nimport { Timescale, Timestamp } from \"../time.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// Implementation limit for object extension blocks, independent of the IETF draft.\nconst MAX_OBJECT_EXTENSIONS = 64 * 1024;\n\nconst GROUP_END = 0x03;\nconst END_OF_TRACK = 0x04;\n\n// MOQ Object Property ids, shared with draft-ietf-moq-loc-04.\nconst PROP_TIMESCALE = 0x08n;\nconst PROP_TIMESTAMP = 0x10n;\n\n// The Timestamp id from draft-ietf-moq-loc-03, accepted on decode only. Draft-03's\n// body text and its IANA table disagreed (0x0A vs 0x06); this is the table's value,\n// which is what shipped. Draft-04 assigns 0x0A to Secure Objects private properties,\n// so it is not accepted here.\nconst PROP_TIMESTAMP_DRAFT03 = 0x06n;\n\n// draft-18 adds bit 0x40 (FIRST_OBJECT) to the subgroup header type per spec\n// 11.4.2. Set on emit unless a filter trimmed the group's head; on parse a\n// cleared bit is the peer saying its stream starts partway through a group,\n// which the subscriber drops.\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\nfunction hasDeltaObjectPropertyTypes(version: IetfVersion | undefined): boolean {\n\tswitch (version) {\n\t\tcase Version.DRAFT_14:\n\t\tcase Version.DRAFT_15:\n\t\t\treturn false;\n\t\tdefault:\n\t\t\treturn true;\n\t}\n}\n\nasync function encodeObjectPropertyType(w: Writer, id: bigint, prev: bigint, version: IetfVersion): Promise<void> {\n\tconst encoded = hasDeltaObjectPropertyTypes(version) ? id - prev : id;\n\tawait w.u62(encoded);\n}\n\n// The units come from the track's TIMESCALE property, not from here: repeating the\n// timescale on every object would cost bytes per frame to restate something fixed for\n// the track's lifetime. The timestamp is converted into the track's units so the value\n// on the wire matches what the track declared.\nasync function encodeObjectTime(\n\tw: Writer,\n\ttimestamp: Timestamp,\n\ttimescale: Timescale,\n\tversion: IetfVersion,\n): Promise<void> {\n\tconst value = Math.round((timestamp.value * timescale) / timestamp.scale);\n\tawait encodeObjectPropertyType(w, PROP_TIMESTAMP, 0n, version);\n\tawait w.u62(BigInt(value));\n}\n\nasync function encodeObjectExtensions(\n\ttimestamp: Timestamp | undefined,\n\ttimescale: Timescale,\n\tversion: IetfVersion,\n): Promise<Uint8Array> {\n\tif (timestamp === undefined) {\n\t\treturn new Uint8Array();\n\t}\n\n\tconst chunks: Uint8Array[] = [];\n\tconst writer = new Writer(\n\t\tnew WritableStream<Uint8Array>({\n\t\t\twrite(chunk) {\n\t\t\t\tchunks.push(new Uint8Array(chunk));\n\t\t\t},\n\t\t}),\n\t\tversion,\n\t);\n\tawait encodeObjectTime(writer, timestamp, timescale, version);\n\twriter.close();\n\tawait writer.closed;\n\n\tconst size = chunks.reduce((total, chunk) => total + chunk.byteLength, 0);\n\tconst result = new Uint8Array(size);\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\nfunction decodeObjectTime(c: Cursor, timescale: Timescale | undefined): Timestamp | undefined {\n\tlet timestamp: bigint | undefined;\n\tlet overrideScale: bigint | undefined;\n\tlet prevType = 0n;\n\tlet first = true;\n\n\twhile (c.remaining > 0) {\n\t\tconst step = c.u62();\n\t\tconst id = !hasDeltaObjectPropertyTypes(asIetf(c.version)) || first ? step : prevType + step;\n\t\tfirst = false;\n\t\tprevType = id;\n\n\t\tif (id % 2n === 0n) {\n\t\t\tconst value = c.u62();\n\t\t\tif (id === PROP_TIMESTAMP || id === PROP_TIMESTAMP_DRAFT03) {\n\t\t\t\ttimestamp = value;\n\t\t\t} else if (id === PROP_TIMESCALE) {\n\t\t\t\toverrideScale = value;\n\t\t\t}\n\t\t} else {\n\t\t\tc.read(c.u53());\n\t\t}\n\t}\n\n\tif (timestamp === undefined) {\n\t\treturn undefined;\n\t}\n\n\t// An object-scope Timescale (which LOC permits) overrides the track's for this object, and\n\t// on a track that declared none it is the only statement of the units there is: a\n\t// publisher on a draft with no TIMESCALE track property (Norsk on draft-16) can say\n\t// nothing else. A Timestamp with no units anywhere cannot be interpreted; guessing them\n\t// would be worse than the arrival stamp the caller falls back to.\n\tconst scale = overrideScale !== undefined ? Timescale(Number(overrideScale)) : timescale;\n\tif (scale === undefined) {\n\t\treturn undefined;\n\t}\n\treturn new Timestamp(Number(timestamp), scale);\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\t/**\n\t * Whether this stream carries the subgroup from its first published object.\n\t *\n\t * A subgroup that starts partway through has a hole at the front, which moq-lite cannot\n\t * represent. Always true on the drafts that predate the FIRST_OBJECT bit (before\n\t * draft-18), where there is no such signal to read.\n\t */\n\tfirstObject: 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 (this.flags.firstObject && 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\t/** Decode a SUBGROUP_HEADER. Pass `type` when the caller already read it to classify the stream. */\n\tstatic async decode(r: Reader, version: IetfVersion, type?: number): Promise<Group> {\n\t\tconst raw = type ?? (await r.u53());\n\t\t// Strip the draft-18 FIRST_OBJECT bit before the range check, but keep the value:\n\t\t// it is the only signal that a subgroup starts partway through. Drafts that predate\n\t\t// it carry no such signal, so they are taken at their word.\n\t\tconst legacy = !hasFirstObjectBit(version);\n\t\tconst firstObject = legacy || (raw & FIRST_OBJECT_BIT) !== 0;\n\t\tconst id = legacy ? raw : raw & ~FIRST_OBJECT_BIT;\n\n\t\t// An invalid type MUST close the session, including the reserved SUBGROUP_ID_MODE\n\t\t// 0b11 (draft-21 section 11.3.1).\n\t\tconst known = (id >= 0x10 && id <= 0x1f) || (id >= 0x30 && id <= 0x3f);\n\t\tif (!known || (id & 0x06) === 0x06) {\n\t\t\tthrow new ProtocolViolation(`Unsupported group type: ${raw}`);\n\t\t}\n\n\t\t// 0x30-0x3F omit the priority and inherit it from the control message.\n\t\tconst hasPriority = id < 0x30;\n\t\tconst baseId = hasPriority ? id : id - (0x30 - 0x10);\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\tfirstObject,\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\n/** A moq-transport object inside a group stream. */\nexport class Frame {\n\t/** The object payload, or `undefined` for an end of group or end of track marker. */\n\tpayload?: Uint8Array;\n\t/** The presentation timestamp carried in object properties, when present. */\n\ttimestamp?: Timestamp;\n\t/**\n\t * An END_OF_TRACK marker: no object at or past its location exists. At object 0 its group\n\t * does not exist either, so the track ends at that group; later in a group it ends after it.\n\t */\n\tendOfTrack: boolean;\n\n\tconstructor({\n\t\tpayload,\n\t\ttimestamp,\n\t\tendOfTrack = false,\n\t}: { payload?: Uint8Array; timestamp?: Timestamp; endOfTrack?: boolean } = {}) {\n\t\tthis.payload = payload;\n\t\tthis.timestamp = timestamp;\n\t\tthis.endOfTrack = endOfTrack;\n\t}\n\n\t/**\n\t * Encode this frame using the group flags and negotiated IETF version.\n\t *\n\t * `idDelta` is the first object's absolute Object ID and zero for every later one, so a\n\t * group whose head was trimmed by a filter still puts the true numbering on the wire.\n\t */\n\tasync encode(w: Writer, flags: GroupFlags, timescale: Timescale, version: IetfVersion, idDelta = 0): Promise<void> {\n\t\tawait w.u53(idDelta);\n\n\t\tif (flags.hasExtensions) {\n\t\t\tconst extensions = await encodeObjectExtensions(this.timestamp, timescale, version);\n\t\t\tawait w.u53(extensions.byteLength);\n\t\t\tawait w.write(extensions);\n\t\t}\n\n\t\tif (this.endOfTrack) {\n\t\t\tawait w.u53(0); // length = 0\n\t\t\tawait w.u53(END_OF_TRACK);\n\t\t} else if (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\t/** Decode a frame using the group flags, at the cursor's negotiated IETF version. */\n\tstatic decode(c: Cursor, flags: GroupFlags, timescale: Timescale | undefined): Frame {\n\t\t// The first object's delta is its absolute Object ID; every later one is the prior ID\n\t\t// plus the delta plus one. moq-lite groups start at object 0 and never skip one, so\n\t\t// a sequential group is a zero delta throughout, and any other value means the group\n\t\t// either starts partway through or has a gap that would renumber the frames after it.\n\t\tconst delta = c.u53();\n\t\tif (delta !== 0) {\n\t\t\tthrow new Error(`object IDs must start at 0 and increment by 1, got a delta of ${delta}`);\n\t\t}\n\n\t\tlet timestamp: Timestamp | undefined;\n\t\tif (flags.hasExtensions) {\n\t\t\tconst extensionsLength = c.u53();\n\t\t\tif (extensionsLength > MAX_OBJECT_EXTENSIONS) {\n\t\t\t\tthrow new StreamError(StreamCode.MalformedTrack, { message: \"object extensions exceed 64 KiB\" });\n\t\t\t}\n\t\t\t// The track's TIMESCALE gives the units, or the object's own does; an object with\n\t\t\t// neither is stamped on arrival by the caller, even if it carries a Timestamp.\n\t\t\ttimestamp = c.exact(extensionsLength, (e) => decodeObjectTime(e, timescale));\n\t\t}\n\n\t\tconst payloadLength = c.u53();\n\n\t\tif (payloadLength > 0) {\n\t\t\tconst payload = c.read(payloadLength);\n\t\t\treturn new Frame({ payload, timestamp });\n\t\t}\n\n\t\tconst status = c.u53();\n\n\t\t// Defined on every implemented draft, whether or not the header marks the group's end.\n\t\tif (status === END_OF_TRACK) return new Frame({ endOfTrack: true });\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), timestamp });\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\n// Serialization Flags for a fetch object: the two low bits encode the subgroup (00 =\n// subgroup zero), then one presence bit per field.\nconst FETCH_OBJECT_ID = 0x04;\nconst FETCH_GROUP_ID = 0x08;\nconst FETCH_PRIORITY = 0x10;\nconst FETCH_PROPERTIES = 0x20;\n\n/** Where a {@link FetchFrame} sits in the track, and whether it opens the stream. */\nexport interface FetchPosition {\n\t/** The group's sequence number. */\n\tgroup: number;\n\t/** The object's id within that group. */\n\tobject: number;\n\t/** Whether this is the stream's first object, which is what carries the absolute ids. */\n\tfirst: boolean;\n}\n\n/**\n * A moq-transport object inside a fetch stream, which a publisher writes to serve a fill.\n *\n * The first object carries its absolute Group and Object IDs plus the priority; every later\n * one inherits them and increments the Object ID, so only the properties and the payload go\n * on the wire. A fetch object has no status field: a zero payload length is simply an empty\n * object.\n */\nexport class FetchFrame {\n\t/** The object payload. */\n\tpayload: Uint8Array;\n\t/** The presentation timestamp carried in object properties, when present. */\n\ttimestamp?: Timestamp;\n\n\tconstructor({ payload, timestamp }: { payload: Uint8Array; timestamp?: Timestamp }) {\n\t\tthis.payload = payload;\n\t\tthis.timestamp = timestamp;\n\t}\n\n\t/** Encode this object at `position`, stamping it in the track's timescale. */\n\tasync encode(w: Writer, position: FetchPosition, timescale: Timescale, version: IetfVersion): Promise<void> {\n\t\tif (position.first) {\n\t\t\t// Include the priority too: \"same as the prior object\" has no prior to refer to.\n\t\t\tconst properties = this.timestamp !== undefined ? FETCH_PROPERTIES : 0;\n\t\t\tawait w.u53(FETCH_GROUP_ID | FETCH_OBJECT_ID | FETCH_PRIORITY | properties);\n\t\t\tawait w.u53(position.group);\n\t\t\tawait w.u53(position.object);\n\t\t\tawait w.u8(0);\n\t\t} else {\n\t\t\t// Same group and priority; the Object ID is the prior one plus one.\n\t\t\tawait w.u53(this.timestamp !== undefined ? FETCH_PROPERTIES : 0);\n\t\t}\n\n\t\t// Omitted entirely rather than written empty when the object carries no timestamp:\n\t\t// the track declared no units, so there is no property to send.\n\t\tif (this.timestamp !== undefined) {\n\t\t\tconst extensions = await encodeObjectExtensions(this.timestamp, timescale, version);\n\t\t\tawait w.u53(extensions.byteLength);\n\t\t\tawait w.write(extensions);\n\t\t}\n\n\t\tawait w.u53(this.payload.byteLength);\n\t\tif (this.payload.byteLength > 0) {\n\t\t\tawait w.write(this.payload);\n\t\t}\n\t}\n}\n"]}
@@ -7,12 +7,14 @@ export declare const SetupOption: {
7
7
  readonly MaxAuthTokenCacheSize: 4n;
8
8
  readonly Authority: 5n;
9
9
  readonly Implementation: 7n;
10
- /** RELAY_HOPS, from the MoQ Cluster extension. See `cluster.ts`. */
11
- readonly RelayHops: 0x40b55n;
10
+ /** HOP_ID, from the MoQ Cluster extension. See `cluster.ts`. */
11
+ readonly HopId: 0x40b54n;
12
12
  /** RELAY_COST, from the MoQ Cluster extension. See `cluster.ts`. */
13
13
  readonly RelayCost: 0x40b56n;
14
14
  /** SOLICIT, from the MoQ Solicit extension. See `solicit.ts`. */
15
15
  readonly Solicit: 0x40b5an;
16
+ /** HIDDEN, from the MoQ Hidden extension. See `hidden.ts`. */
17
+ readonly Hidden: 0x40b5cn;
16
18
  };
17
19
  export declare class SetupOptions {
18
20
  vars: Map<bigint, bigint>;
@@ -39,6 +41,13 @@ export declare class Parameters {
39
41
  vars: Map<bigint, bigint>;
40
42
  bytes: Map<bigint, Uint8Array>;
41
43
  constructor();
44
+ /**
45
+ * Whether the message carried a Range Filter. We advertise no MAX_FILTER_RANGES, so a
46
+ * request with one is refused rather than served unfiltered.
47
+ */
48
+ get rangeFilters(): boolean;
49
+ /** Whether the message carried TRACK_PROPERTY_FILTER, which only a SUBSCRIBE_TRACKS may. */
50
+ get trackPropertyFilter(): boolean;
42
51
  get subscriberPriority(): number | undefined;
43
52
  set subscriberPriority(v: number);
44
53
  get groupOrder(): number | undefined;
@@ -53,6 +62,9 @@ export declare class Parameters {
53
62
  set deliveryTimeout(v: bigint);
54
63
  get maxCacheDuration(): bigint | undefined;
55
64
  set maxCacheDuration(v: bigint);
65
+ /** HIDDEN (MoQ Hidden): also advertise hidden namespaces. Absent and 0 both mean no. */
66
+ get hidden(): boolean;
67
+ set hidden(v: boolean);
56
68
  get largest(): MessageLocation | undefined;
57
69
  set largest(v: MessageLocation);
58
70
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"parameters.d.ts","sourceRoot":"","sources":["../../src/ietf/parameters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parameters.d.ts","sourceRoot":"","sources":["../../src/ietf/parameters.ts"],"names":[],"mappings":"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"}
@@ -9,12 +9,14 @@ export const SetupOption = {
9
9
  MaxAuthTokenCacheSize: 4n,
10
10
  Authority: 5n,
11
11
  Implementation: 7n,
12
- /** RELAY_HOPS, from the MoQ Cluster extension. See `cluster.ts`. */
13
- RelayHops: 0x40b55n,
12
+ /** HOP_ID, from the MoQ Cluster extension. See `cluster.ts`. */
13
+ HopId: 0x40b54n,
14
14
  /** RELAY_COST, from the MoQ Cluster extension. See `cluster.ts`. */
15
15
  RelayCost: 0x40b56n,
16
16
  /** SOLICIT, from the MoQ Solicit extension. See `solicit.ts`. */
17
17
  Solicit: 0x40b5an,
18
+ /** HIDDEN, from the MoQ Hidden extension. See `hidden.ts`. */
19
+ Hidden: 0x40b5cn,
18
20
  };
19
21
  /// Setup Options — used in SETUP messages.
20
22
  ///
@@ -176,6 +178,10 @@ export class SetupOptions {
176
178
  // Parameter types are delta-encoded from d16 onward.
177
179
  // Varint parameter IDs (even)
178
180
  const MSG_PARAM_DELIVERY_TIMEOUT = 0x02n;
181
+ /// FILL_TIMEOUT, on a FETCH. Ignored: a refusal doesn't wait.
182
+ const MSG_PARAM_FILL_TIMEOUT = 0x0an;
183
+ /// NEW_GROUP_REQUEST. Ignored, as the draft lets a publisher without dynamic groups do.
184
+ const MSG_PARAM_NEW_GROUP_REQUEST = 0x32n;
179
185
  /// SUBGROUP_DELIVERY_TIMEOUT, alongside the per-object one above.
180
186
  const MSG_PARAM_SUBGROUP_DELIVERY_TIMEOUT = 0x06n;
181
187
  const MSG_PARAM_MAX_CACHE_DURATION = 0x04n;
@@ -184,43 +190,68 @@ const MSG_PARAM_PUBLISHER_PRIORITY = 0x0en;
184
190
  const MSG_PARAM_FORWARD = 0x10n;
185
191
  const MSG_PARAM_SUBSCRIBER_PRIORITY = 0x20n;
186
192
  const MSG_PARAM_GROUP_ORDER = 0x22n;
193
+ /// INCLUDE_PROPERTIES, draft-20's opt-out from Track Properties.
194
+ const MSG_PARAM_INCLUDE_PROPERTIES = 0x35n;
187
195
  /// ROUTE_COST, from the MoQ Cluster extension. See `cluster.ts`.
188
196
  const MSG_PARAM_ROUTE_COST = 0x40b58n;
197
+ /// HIDDEN, from the MoQ Hidden extension. See `hidden.ts`.
198
+ const MSG_PARAM_HIDDEN = 0x40b5en;
189
199
  // Bytes parameter IDs (odd)
200
+ /// AUTHORIZATION TOKEN. Ignored: the session's grant is what authorizes a request.
201
+ const MSG_PARAM_AUTHORIZATION_TOKEN = 0x03n;
190
202
  const MSG_PARAM_LARGEST_OBJECT = 0x09n;
191
203
  const MSG_PARAM_SUBSCRIPTION_FILTER = 0x21n;
192
204
  /// FILL_PARAMETERS, draft-20's request for a backfill.
193
205
  const MSG_PARAM_FILL_PARAMETERS = 0x23n;
194
- /// INCLUDE_PROPERTIES, draft-20's opt-out from Track Properties. Its own section calls the
195
- /// value a uint8, but 0x35 is odd, so the Key-Value-Pair rule length prefixes it.
196
- const MSG_PARAM_INCLUDE_PROPERTIES = 0x35n;
197
206
  /// HOP_PATH, from the MoQ Cluster extension. See `cluster.ts`.
198
207
  const MSG_PARAM_HOP_PATH = 0x40b57n;
208
+ /// The object Range Filters (draft-19): SUBGROUP, OBJECTID, PRIORITY and OBJECT_PROPERTY.
209
+ /// Each is length prefixed whatever the parity of its id.
210
+ const MSG_PARAM_RANGE_FILTERS = [0x25n, 0x26n, 0x27n, 0x28n];
211
+ /// TRACK_PROPERTY_FILTER, the Range Filter legal only on SUBSCRIBE_TRACKS and its updates.
212
+ const MSG_PARAM_TRACK_PROPERTY_FILTER = 0x29n;
213
+ /// The parameters whose definitions let them repeat within one message.
214
+ const MSG_PARAM_REPEATABLE = [
215
+ MSG_PARAM_AUTHORIZATION_TOKEN,
216
+ ...MSG_PARAM_RANGE_FILTERS,
217
+ MSG_PARAM_TRACK_PROPERTY_FILTER,
218
+ ];
199
219
  function getMessageParamKind(id) {
200
220
  switch (id) {
201
221
  case MSG_PARAM_DELIVERY_TIMEOUT:
222
+ case MSG_PARAM_FILL_TIMEOUT:
223
+ case MSG_PARAM_NEW_GROUP_REQUEST:
202
224
  case MSG_PARAM_SUBGROUP_DELIVERY_TIMEOUT:
203
225
  case MSG_PARAM_MAX_CACHE_DURATION:
204
226
  case MSG_PARAM_EXPIRES:
205
227
  case MSG_PARAM_ROUTE_COST:
228
+ case MSG_PARAM_HIDDEN:
206
229
  return "varint";
207
230
  case MSG_PARAM_PUBLISHER_PRIORITY:
208
231
  case MSG_PARAM_SUBSCRIBER_PRIORITY:
209
232
  case MSG_PARAM_GROUP_ORDER:
233
+ case MSG_PARAM_INCLUDE_PROPERTIES:
210
234
  return "uint8";
211
235
  case MSG_PARAM_FORWARD:
212
236
  return "bool";
213
237
  case MSG_PARAM_LARGEST_OBJECT:
214
238
  return "location";
239
+ case MSG_PARAM_AUTHORIZATION_TOKEN:
215
240
  case MSG_PARAM_SUBSCRIPTION_FILTER:
216
241
  case MSG_PARAM_FILL_PARAMETERS:
217
- case MSG_PARAM_INCLUDE_PROPERTIES:
218
242
  case MSG_PARAM_HOP_PATH:
219
243
  return "bytes";
220
244
  default:
245
+ if (MSG_PARAM_REPEATABLE.includes(id))
246
+ return "bytes";
221
247
  throw new Error(`unknown message parameter id: ${id.toString()}`);
222
248
  }
223
249
  }
250
+ /**
251
+ * The draft-16 and earlier form: draft-16 section 9.2 serializes every Message Parameter as
252
+ * a Key-Value-Pair, and section 9.2.2.7 calls LARGEST_OBJECT "a length-prefixed Location
253
+ * structure", so the two QUIC-style varints sit inside a byte string.
254
+ */
224
255
  function decodeLocation(data) {
225
256
  const [groupId, objectData] = Varint.decodeBigInt(data);
226
257
  const [objectId, trailing] = Varint.decodeBigInt(objectData);
@@ -242,10 +273,29 @@ export class Parameters {
242
273
  vars;
243
274
  bytes;
244
275
  #locations;
276
+ /** Every instance of a parameter that may repeat, decoded only; we never send one. */
277
+ #repeated;
245
278
  constructor() {
246
279
  this.vars = new Map();
247
280
  this.bytes = new Map();
248
281
  this.#locations = new Map();
282
+ this.#repeated = new Map();
283
+ }
284
+ #repeat(id, value) {
285
+ const values = this.#repeated.get(id) ?? [];
286
+ values.push(value);
287
+ this.#repeated.set(id, values);
288
+ }
289
+ /**
290
+ * Whether the message carried a Range Filter. We advertise no MAX_FILTER_RANGES, so a
291
+ * request with one is refused rather than served unfiltered.
292
+ */
293
+ get rangeFilters() {
294
+ return MSG_PARAM_RANGE_FILTERS.some((id) => this.#repeated.has(id));
295
+ }
296
+ /** Whether the message carried TRACK_PROPERTY_FILTER, which only a SUBSCRIBE_TRACKS may. */
297
+ get trackPropertyFilter() {
298
+ return this.#repeated.has(MSG_PARAM_TRACK_PROPERTY_FILTER);
249
299
  }
250
300
  // --- Numeric accessors ---
251
301
  get subscriberPriority() {
@@ -294,6 +344,21 @@ export class Parameters {
294
344
  set maxCacheDuration(v) {
295
345
  this.vars.set(MSG_PARAM_MAX_CACHE_DURATION, v);
296
346
  }
347
+ /** HIDDEN (MoQ Hidden): also advertise hidden namespaces. Absent and 0 both mean no. */
348
+ get hidden() {
349
+ const v = this.vars.get(MSG_PARAM_HIDDEN);
350
+ if (v === undefined || v === 0n)
351
+ return false;
352
+ if (v === 1n)
353
+ return true;
354
+ throw new Error(`invalid HIDDEN parameter: ${v}`);
355
+ }
356
+ set hidden(v) {
357
+ if (v)
358
+ this.vars.set(MSG_PARAM_HIDDEN, 1n);
359
+ else
360
+ this.vars.delete(MSG_PARAM_HIDDEN);
361
+ }
297
362
  // --- Bytes accessors ---
298
363
  get largest() {
299
364
  const location = this.#locations.get(MSG_PARAM_LARGEST_OBJECT);
@@ -323,17 +388,19 @@ export class Parameters {
323
388
  }
324
389
  /** INCLUDE_PROPERTIES: whether the peer wants Track Properties on the response. */
325
390
  get includeProperties() {
326
- const data = this.bytes.get(MSG_PARAM_INCLUDE_PROPERTIES);
327
- if (!data)
391
+ // Draft-16 and earlier frame every parameter as a Key-Value-Pair, so an odd id lands
392
+ // in `bytes`. It still has to read as present, so the draft-20 gate can refuse it.
393
+ const legacy = this.bytes.get(MSG_PARAM_INCLUDE_PROPERTIES);
394
+ const v = legacy ? (legacy.length === 1 ? BigInt(legacy[0]) : 2n) : this.vars.get(MSG_PARAM_INCLUDE_PROPERTIES);
395
+ if (v === undefined)
328
396
  return undefined;
329
397
  // The draft allows exactly 0 or 1; anything else is a protocol violation.
330
- if (data.length !== 1 || data[0] > 1) {
331
- throw new Error(`invalid INCLUDE_PROPERTIES value: ${data.join(",")}`);
332
- }
333
- return data[0] === 1;
398
+ if (v > 1n)
399
+ throw new Error(`invalid INCLUDE_PROPERTIES value: ${v}`);
400
+ return v === 1n;
334
401
  }
335
402
  set includeProperties(v) {
336
- this.bytes.set(MSG_PARAM_INCLUDE_PROPERTIES, new Uint8Array([v ? 1 : 0]));
403
+ this.vars.set(MSG_PARAM_INCLUDE_PROPERTIES, v ? 1n : 0n);
337
404
  }
338
405
  /** HOP_PATH: the hop chain an advertisement traversed, as its raw parameter value. */
339
406
  get hopPath() {
@@ -428,13 +495,11 @@ export class Parameters {
428
495
  const location = this.#locations.get(key);
429
496
  if (location === undefined)
430
497
  throw new Error(`invalid Location message parameter: ${key.toString()}`);
431
- // LARGEST_OBJECT is an odd type, so the Key-Value-Pair rule gives it
432
- // a Length on every draft: two varints inside the value.
433
- const group = Varint.encodeLeadingOnes(location.groupId);
434
- const object = Varint.encodeLeadingOnes(location.objectId);
435
- await w.u53(group.length + object.length);
436
- await w.write(group);
437
- await w.write(object);
498
+ // Draft-17 section 9.3, and section 10.2 from draft-18 on, drops the
499
+ // Length from a Message Parameter and defines a Location value as
500
+ // "Two consecutive varints (Group, Object)", so they go out bare.
501
+ await w.u62(location.groupId);
502
+ await w.u62(location.objectId);
438
503
  break;
439
504
  }
440
505
  case "bytes": {
@@ -475,7 +540,10 @@ export class Parameters {
475
540
  else {
476
541
  const size = await r.u53();
477
542
  const bytes = await r.read(size);
478
- if (id === MSG_PARAM_LARGEST_OBJECT) {
543
+ if (MSG_PARAM_REPEATABLE.includes(id)) {
544
+ params.#repeat(id, bytes);
545
+ }
546
+ else if (id === MSG_PARAM_LARGEST_OBJECT) {
479
547
  if (params.#locations.has(id)) {
480
548
  throw new Error(`duplicate message parameter id: ${id.toString()}`);
481
549
  }
@@ -490,6 +558,11 @@ export class Parameters {
490
558
  }
491
559
  continue;
492
560
  }
561
+ if (MSG_PARAM_REPEATABLE.includes(id)) {
562
+ const size = await r.u53();
563
+ params.#repeat(id, await r.read(size));
564
+ continue;
565
+ }
493
566
  if (params.vars.has(id) || params.bytes.has(id) || params.#locations.has(id)) {
494
567
  throw new Error(`duplicate message parameter id: ${id.toString()}`);
495
568
  }
@@ -504,14 +577,9 @@ export class Parameters {
504
577
  params.vars.set(id, (await r.bool()) ? 1n : 0n);
505
578
  break;
506
579
  case "location": {
507
- // LARGEST_OBJECT is an odd type, so the Key-Value-Pair rule gives it a
508
- // Length on every draft: two varints inside the value.
509
- const size = await r.u53();
510
- const [groupId, objectData] = Varint.decodeLeadingOnes(await r.read(size));
511
- const [objectId, trailing] = Varint.decodeLeadingOnes(objectData);
512
- if (trailing.length !== 0) {
513
- throw new Error("trailing bytes in message parameter Location");
514
- }
580
+ // Two bare varints from draft-17 on; see the matching comment in encode.
581
+ const groupId = await r.u62();
582
+ const objectId = await r.u62();
515
583
  params.#locations.set(id, { groupId, objectId });
516
584
  break;
517
585
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parameters.js","sourceRoot":"","sources":["../../src/ietf/parameters.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AACvC,OAAO,EAAoB,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,WAAW,GAAG;IAC1B,IAAI,EAAE,EAAE;IACR,YAAY,EAAE,EAAE;IAChB,kBAAkB,EAAE,EAAE;IACtB,qBAAqB,EAAE,EAAE;IACzB,SAAS,EAAE,EAAE;IACb,cAAc,EAAE,EAAE;IAClB,oEAAoE;IACpE,SAAS,EAAE,QAAQ;IACnB,oEAAoE;IACpE,SAAS,EAAE,QAAQ;IACnB,iEAAiE;IACjE,OAAO,EAAE,QAAQ;CACR,CAAC;AAEX,2CAA2C;AAC3C,GAAG;AACH,6DAA6D;AAC7D,yFAAyF;AACzF,MAAM,OAAO,YAAY;IACxB,IAAI,CAAsB;IAC1B,KAAK,CAA0B;IAE/B;QACC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzC,CAAC;IAED,QAAQ,CAAC,EAAU,EAAE,KAAiB;QACrC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,EAAU,EAAE,KAAa;QAClC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,QAAQ,CAAC,EAAU;QAClB,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,EAAU;QACnB,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,WAAW,CAAC,EAAU;QACrB,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,YAAY,CAAC,EAAU;QACtB,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,OAAoB;QAC3C,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClE,2CAA2C;YAC3C,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,CAAC;YAED,wDAAwD;YACxD,MAAM,GAAG,GAAsC,EAAE,CAAC;YAClD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtE,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACxE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjE,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC9B,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC;gBAC3C,MAAM,GAAG,GAAG,CAAC;gBACb,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAEnB,IAAI,KAAK,EAAE,CAAC;oBACX,qFAAqF;oBACrF,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC;gBAClC,CAAC;qBAAM,CAAC;oBACP,sFAAsF;oBACtF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;oBACnC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;YACF,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE9C,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACrC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;YAED,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC1B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,OAAoB;QAClD,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAElC,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClG,mDAAmD;YACnD,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC5B,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;gBAC9C,QAAQ,GAAG,EAAE,CAAC;gBACd,CAAC,EAAE,CAAC;gBAEJ,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;oBACpB,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;wBACzB,MAAM,IAAI,KAAK,CAAC,2BAA2B,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBAC7D,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;oBAC7B,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACP,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;wBAC1B,MAAM,IAAI,KAAK,CAAC,2BAA2B,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBAC7D,CAAC;oBACD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC5B,CAAC;YACF,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YAC5B,IAAI,QAAQ,GAAG,EAAE,CAAC;YAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,IAAI,EAAU,CAAC;gBACf,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAClC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;oBAC5B,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;oBACxC,QAAQ,GAAG,EAAE,CAAC;gBACf,CAAC;qBAAM,CAAC;oBACP,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;gBACpB,CAAC;gBAED,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;oBACpB,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;wBACzB,MAAM,IAAI,KAAK,CAAC,2BAA2B,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBAC7D,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;oBAC7B,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACP,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;wBAC1B,MAAM,IAAI,KAAK,CAAC,2BAA2B,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBAC7D,CAAC;oBACD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC5B,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;CACD;AAED,yEAAyE;AACzE,8EAA8E;AAC9E,qDAAqD;AAErD,8BAA8B;AAC9B,MAAM,0BAA0B,GAAG,KAAK,CAAC;AACzC,kEAAkE;AAClE,MAAM,mCAAmC,GAAG,KAAK,CAAC;AAClD,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAC3C,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAC3C,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAC5C,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC,iEAAiE;AACjE,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAEtC,4BAA4B;AAC5B,MAAM,wBAAwB,GAAG,KAAK,CAAC;AACvC,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAC5C,uDAAuD;AACvD,MAAM,yBAAyB,GAAG,KAAK,CAAC;AACxC,2FAA2F;AAC3F,kFAAkF;AAClF,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAC3C,+DAA+D;AAC/D,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAMpC,SAAS,mBAAmB,CAAC,EAAU;IACtC,QAAQ,EAAE,EAAE,CAAC;QACZ,KAAK,0BAA0B,CAAC;QAChC,KAAK,mCAAmC,CAAC;QACzC,KAAK,4BAA4B,CAAC;QAClC,KAAK,iBAAiB,CAAC;QACvB,KAAK,oBAAoB;YACxB,OAAO,QAAQ,CAAC;QACjB,KAAK,4BAA4B,CAAC;QAClC,KAAK,6BAA6B,CAAC;QACnC,KAAK,qBAAqB;YACzB,OAAO,OAAO,CAAC;QAChB,KAAK,iBAAiB;YACrB,OAAO,MAAM,CAAC;QACf,KAAK,wBAAwB;YAC5B,OAAO,UAAU,CAAC;QACnB,KAAK,6BAA6B,CAAC;QACnC,KAAK,yBAAyB,CAAC;QAC/B,KAAK,4BAA4B,CAAC;QAClC,KAAK,kBAAkB;YACtB,OAAO,OAAO,CAAC;QAChB;YACC,MAAM,IAAI,KAAK,CAAC,iCAAiC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;AACF,CAAC;AAED,SAAS,cAAc,CAAC,IAAgB;IACvC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAC7D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAmB;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9D,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,mDAAmD;AACnD,MAAM,OAAO,UAAU;IACtB,IAAI,CAAsB;IAC1B,KAAK,CAA0B;IAC/B,UAAU,CAA+B;IAEzC;QACC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED,4BAA4B;IAE5B,IAAI,kBAAkB;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,CAAC;IAED,IAAI,kBAAkB,CAAC,CAAS;QAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,UAAU;QACb,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,CAAC;IAED,IAAI,UAAU,CAAC,CAAS;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,OAAO;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC3C,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,CAAC;IAED,IAAI,OAAO,CAAC,CAAU;QACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,iBAAiB;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,CAAC;IAED,IAAI,iBAAiB,CAAC,CAAS;QAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,OAAO,CAAC,CAAS;QACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,eAAe;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,eAAe,CAAC,CAAS;QAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,gBAAgB;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,gBAAgB,CAAC,CAAS;QAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,0BAA0B;IAE1B,IAAI,OAAO;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAC/D,OAAO,QAAQ,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;IACpC,CAAC;IAED,IAAI,OAAO,CAAC,CAAkB;QAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,wBAAwB,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IAED;;;;;OAKG;IACH,IAAI,kBAAkB;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,kBAAkB,CAAC,CAAa;QACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,kFAAkF;IAClF,IAAI,cAAc;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,cAAc,CAAC,CAAa;QAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,mFAAmF;IACnF,IAAI,iBAAiB;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,0EAA0E;QAC1E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,iBAAiB,CAAC,CAAU;QAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,sFAAsF;IACtF,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO,CAAC,CAAa;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,qEAAqE;IACrE,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,SAAS,CAAC,CAAS;QACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,OAAoB;QAC3C,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAErE,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClE,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACrC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;YAED,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC1B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;YAED,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC3C,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC5B,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;QACF,CAAC;aAAM,CAAC;YACP,iEAAiE;YACjE,MAAM,GAAG,GAA6D,EAAE,CAAC;YACzE,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACzE,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5E,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACpF,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjE,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC;gBAC3C,MAAM,GAAG,GAAG,CAAC;gBACb,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAEnB,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAClC,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;wBACvB,qFAAqF;wBACrF,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC;oBAClC,CAAC;yBAAM,CAAC;wBACP,MAAM,KAAK,GACV,OAAO,KAAK,OAAO;4BAClB,CAAC,CAAC,sFAAsF;gCACvF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE;4BACrB,CAAC,CAAC,0FAA0F;gCAC3F,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC;wBAC7C,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBAC1B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC;oBACD,SAAS;gBACV,CAAC;gBAED,QAAQ,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClC,KAAK,QAAQ,EAAE,CAAC;wBACf,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBACjC,IAAI,KAAK,KAAK,SAAS;4BAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;wBAChG,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACnB,MAAM;oBACP,CAAC;oBACD,KAAK,OAAO,EAAE,CAAC;wBACd,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBACjC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;4BACxD,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;wBACvE,CAAC;wBACD,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC1B,MAAM;oBACP,CAAC;oBACD,KAAK,MAAM,EAAE,CAAC;wBACb,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBACjC,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;4BAClC,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;wBACtE,CAAC;wBACD,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;wBAC3B,MAAM;oBACP,CAAC;oBACD,KAAK,UAAU,EAAE,CAAC;wBACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBAC1C,IAAI,QAAQ,KAAK,SAAS;4BACzB,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;wBAC1E,qEAAqE;wBACrE,yDAAyD;wBACzD,MAAM,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;wBACzD,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBAC3D,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;wBAC1C,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBACrB,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBACtB,MAAM;oBACP,CAAC;oBACD,KAAK,OAAO,EAAE,CAAC;wBACd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBAClC,IAAI,KAAK,KAAK,SAAS;4BAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;wBAC/F,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBAC1B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBACrB,MAAM;oBACP,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,OAAoB;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAEhC,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,IAAI,EAAU,CAAC;YACf,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAClE,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACP,uBAAuB;gBACvB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC5B,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACxC,QAAQ,GAAG,EAAE,CAAC;YACf,CAAC;YAED,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAClG,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;oBACpB,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;wBACzB,MAAM,IAAI,KAAK,CAAC,mCAAmC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBACrE,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;oBAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACP,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjC,IAAI,EAAE,KAAK,wBAAwB,EAAE,CAAC;wBACrC,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;4BAC/B,MAAM,IAAI,KAAK,CAAC,mCAAmC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;wBACrE,CAAC;wBACD,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;oBAClD,CAAC;yBAAM,CAAC;wBACP,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;4BAC1B,MAAM,IAAI,KAAK,CAAC,mCAAmC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;wBACrE,CAAC;wBACD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBAC7B,CAAC;gBACF,CAAC;gBACD,SAAS;YACV,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9E,MAAM,IAAI,KAAK,CAAC,mCAAmC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACrE,CAAC;YAED,QAAQ,mBAAmB,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjC,KAAK,QAAQ;oBACZ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;oBACnC,MAAM;gBACP,KAAK,OAAO;oBACX,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC1C,MAAM;gBACP,KAAK,MAAM;oBACV,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAChD,MAAM;gBACP,KAAK,UAAU,EAAE,CAAC;oBACjB,uEAAuE;oBACvE,uDAAuD;oBACvD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;oBAC3B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC3E,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;oBAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC3B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;oBACjE,CAAC;oBACD,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACjD,MAAM;gBACP,CAAC;gBACD,KAAK,OAAO,EAAE,CAAC;oBACd,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;oBAC3B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBACzC,MAAM;gBACP,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;CACD","sourcesContent":["import type { Reader, Writer } from \"../stream.ts\";\nimport * as Varint from \"../varint.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n/// Setup Option key constants (separate namespace from Message Parameters).\nexport const SetupOption = {\n\tPath: 1n,\n\tMaxRequestId: 2n,\n\tAuthorizationToken: 3n,\n\tMaxAuthTokenCacheSize: 4n,\n\tAuthority: 5n,\n\tImplementation: 7n,\n\t/** RELAY_HOPS, from the MoQ Cluster extension. See `cluster.ts`. */\n\tRelayHops: 0x40b55n,\n\t/** RELAY_COST, from the MoQ Cluster extension. See `cluster.ts`. */\n\tRelayCost: 0x40b56n,\n\t/** SOLICIT, from the MoQ Solicit extension. See `solicit.ts`. */\n\tSolicit: 0x40b5an,\n} as const;\n\n/// Setup Options — used in SETUP messages.\n///\n/// In d14-d16 these are count-prefixed (\"Setup Parameters\").\n/// In d17 these have no count prefix (\"Setup Options\") and read/write to end of message.\nexport class SetupOptions {\n\tvars: Map<bigint, bigint>;\n\tbytes: Map<bigint, Uint8Array>;\n\n\tconstructor() {\n\t\tthis.vars = new Map();\n\t\tthis.bytes = new Map();\n\t}\n\n\tget size() {\n\t\treturn this.vars.size + this.bytes.size;\n\t}\n\n\tsetBytes(id: bigint, value: Uint8Array) {\n\t\tif (id % 2n !== 1n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be odd`);\n\t\t}\n\t\tthis.bytes.set(id, value);\n\t}\n\n\tsetVarint(id: bigint, value: bigint) {\n\t\tif (id % 2n !== 0n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be even`);\n\t\t}\n\t\tthis.vars.set(id, value);\n\t}\n\n\tgetBytes(id: bigint): Uint8Array | undefined {\n\t\tif (id % 2n !== 1n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be odd`);\n\t\t}\n\t\treturn this.bytes.get(id);\n\t}\n\n\tgetVarint(id: bigint): bigint | undefined {\n\t\tif (id % 2n !== 0n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be even`);\n\t\t}\n\t\treturn this.vars.get(id);\n\t}\n\n\tremoveBytes(id: bigint): boolean {\n\t\tif (id % 2n !== 1n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be odd`);\n\t\t}\n\t\treturn this.bytes.delete(id);\n\t}\n\n\tremoveVarint(id: bigint): boolean {\n\t\tif (id % 2n !== 0n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be even`);\n\t\t}\n\t\treturn this.vars.delete(id);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion) {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15) {\n\t\t\t// d17+: no count prefix; d16: count prefix\n\t\t\tif (version === Version.DRAFT_16) {\n\t\t\t\tawait w.u53(this.vars.size + this.bytes.size);\n\t\t\t}\n\n\t\t\t// Delta encoding: collect all keys, sort, encode deltas\n\t\t\tconst all: { key: bigint; isVar: boolean }[] = [];\n\t\t\tfor (const id of this.vars.keys()) all.push({ key: id, isVar: true });\n\t\t\tfor (const id of this.bytes.keys()) all.push({ key: id, isVar: false });\n\t\t\tall.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));\n\n\t\t\tlet prevId = 0n;\n\t\t\tfor (let i = 0; i < all.length; i++) {\n\t\t\t\tconst { key, isVar } = all[i];\n\t\t\t\tconst delta = i === 0 ? key : key - prevId;\n\t\t\t\tprevId = key;\n\t\t\t\tawait w.u62(delta);\n\n\t\t\t\tif (isVar) {\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in vars map\n\t\t\t\t\tawait w.u62(this.vars.get(key)!);\n\t\t\t\t} else {\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in bytes map\n\t\t\t\t\tconst value = this.bytes.get(key)!;\n\t\t\t\t\tawait w.u53(value.length);\n\t\t\t\t\tawait w.write(value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tawait w.u53(this.vars.size + this.bytes.size);\n\n\t\t\tfor (const [id, value] of this.vars) {\n\t\t\t\tawait w.u62(id);\n\t\t\t\tawait w.u62(value);\n\t\t\t}\n\n\t\t\tfor (const [id, value] of this.bytes) {\n\t\t\t\tawait w.u62(id);\n\t\t\t\tawait w.u53(value.length);\n\t\t\t\tawait w.write(value);\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<SetupOptions> {\n\t\tconst params = new SetupOptions();\n\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\t// d17+: no count prefix, read until reader is done\n\t\t\tlet prevType = 0n;\n\t\t\tlet i = 0;\n\t\t\twhile (!(await r.done())) {\n\t\t\t\tconst delta = await r.u62();\n\t\t\t\tconst id = i === 0 ? delta : prevType + delta;\n\t\t\t\tprevType = id;\n\t\t\t\ti++;\n\n\t\t\t\tif (id % 2n === 0n) {\n\t\t\t\t\tif (params.vars.has(id)) {\n\t\t\t\t\t\tthrow new Error(`duplicate parameter id: ${id.toString()}`);\n\t\t\t\t\t}\n\t\t\t\t\tconst varint = await r.u62();\n\t\t\t\t\tparams.setVarint(id, varint);\n\t\t\t\t} else {\n\t\t\t\t\tif (params.bytes.has(id)) {\n\t\t\t\t\t\tthrow new Error(`duplicate parameter id: ${id.toString()}`);\n\t\t\t\t\t}\n\t\t\t\t\tconst size = await r.u53();\n\t\t\t\t\tconst bytes = await r.read(size);\n\t\t\t\t\tparams.setBytes(id, bytes);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst count = await r.u53();\n\t\t\tlet prevType = 0n;\n\n\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\tlet id: bigint;\n\t\t\t\tif (version === Version.DRAFT_16) {\n\t\t\t\t\tconst delta = await r.u62();\n\t\t\t\t\tid = i === 0 ? delta : prevType + delta;\n\t\t\t\t\tprevType = id;\n\t\t\t\t} else {\n\t\t\t\t\tid = await r.u62();\n\t\t\t\t}\n\n\t\t\t\tif (id % 2n === 0n) {\n\t\t\t\t\tif (params.vars.has(id)) {\n\t\t\t\t\t\tthrow new Error(`duplicate parameter id: ${id.toString()}`);\n\t\t\t\t\t}\n\t\t\t\t\tconst varint = await r.u62();\n\t\t\t\t\tparams.setVarint(id, varint);\n\t\t\t\t} else {\n\t\t\t\t\tif (params.bytes.has(id)) {\n\t\t\t\t\t\tthrow new Error(`duplicate parameter id: ${id.toString()}`);\n\t\t\t\t\t}\n\t\t\t\t\tconst size = await r.u53();\n\t\t\t\t\tconst bytes = await r.read(size);\n\t\t\t\t\tparams.setBytes(id, bytes);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn params;\n\t}\n}\n\n// ---- Message Parameters (used in Subscribe, Publish, Fetch, etc.) ----\n// Count-prefixed KVPs through d16, then definition-specific Type-Value pairs.\n// Parameter types are delta-encoded from d16 onward.\n\n// Varint parameter IDs (even)\nconst MSG_PARAM_DELIVERY_TIMEOUT = 0x02n;\n/// SUBGROUP_DELIVERY_TIMEOUT, alongside the per-object one above.\nconst MSG_PARAM_SUBGROUP_DELIVERY_TIMEOUT = 0x06n;\nconst MSG_PARAM_MAX_CACHE_DURATION = 0x04n;\nconst MSG_PARAM_EXPIRES = 0x08n;\nconst MSG_PARAM_PUBLISHER_PRIORITY = 0x0en;\nconst MSG_PARAM_FORWARD = 0x10n;\nconst MSG_PARAM_SUBSCRIBER_PRIORITY = 0x20n;\nconst MSG_PARAM_GROUP_ORDER = 0x22n;\n/// ROUTE_COST, from the MoQ Cluster extension. See `cluster.ts`.\nconst MSG_PARAM_ROUTE_COST = 0x40b58n;\n\n// Bytes parameter IDs (odd)\nconst MSG_PARAM_LARGEST_OBJECT = 0x09n;\nconst MSG_PARAM_SUBSCRIPTION_FILTER = 0x21n;\n/// FILL_PARAMETERS, draft-20's request for a backfill.\nconst MSG_PARAM_FILL_PARAMETERS = 0x23n;\n/// INCLUDE_PROPERTIES, draft-20's opt-out from Track Properties. Its own section calls the\n/// value a uint8, but 0x35 is odd, so the Key-Value-Pair rule length prefixes it.\nconst MSG_PARAM_INCLUDE_PROPERTIES = 0x35n;\n/// HOP_PATH, from the MoQ Cluster extension. See `cluster.ts`.\nconst MSG_PARAM_HOP_PATH = 0x40b57n;\n\ntype MessageParamKind = \"varint\" | \"uint8\" | \"bool\" | \"location\" | \"bytes\";\n/** A `{Group, Object}` pair carried by a message parameter, such as LARGEST_OBJECT. */\nexport type MessageLocation = { groupId: bigint; objectId: bigint };\n\nfunction getMessageParamKind(id: bigint): MessageParamKind {\n\tswitch (id) {\n\t\tcase MSG_PARAM_DELIVERY_TIMEOUT:\n\t\tcase MSG_PARAM_SUBGROUP_DELIVERY_TIMEOUT:\n\t\tcase MSG_PARAM_MAX_CACHE_DURATION:\n\t\tcase MSG_PARAM_EXPIRES:\n\t\tcase MSG_PARAM_ROUTE_COST:\n\t\t\treturn \"varint\";\n\t\tcase MSG_PARAM_PUBLISHER_PRIORITY:\n\t\tcase MSG_PARAM_SUBSCRIBER_PRIORITY:\n\t\tcase MSG_PARAM_GROUP_ORDER:\n\t\t\treturn \"uint8\";\n\t\tcase MSG_PARAM_FORWARD:\n\t\t\treturn \"bool\";\n\t\tcase MSG_PARAM_LARGEST_OBJECT:\n\t\t\treturn \"location\";\n\t\tcase MSG_PARAM_SUBSCRIPTION_FILTER:\n\t\tcase MSG_PARAM_FILL_PARAMETERS:\n\t\tcase MSG_PARAM_INCLUDE_PROPERTIES:\n\t\tcase MSG_PARAM_HOP_PATH:\n\t\t\treturn \"bytes\";\n\t\tdefault:\n\t\t\tthrow new Error(`unknown message parameter id: ${id.toString()}`);\n\t}\n}\n\nfunction decodeLocation(data: Uint8Array): MessageLocation {\n\tconst [groupId, objectData] = Varint.decodeBigInt(data);\n\tconst [objectId, trailing] = Varint.decodeBigInt(objectData);\n\tif (trailing.length !== 0) {\n\t\tthrow new Error(\"trailing bytes in message parameter Location\");\n\t}\n\treturn { groupId, objectId };\n}\n\nfunction encodeLocation({ groupId, objectId }: MessageLocation): Uint8Array {\n\tconst group = Varint.encode(groupId);\n\tconst object = Varint.encode(objectId);\n\tconst combined = new Uint8Array(group.length + object.length);\n\tcombined.set(group, 0);\n\tcombined.set(object, group.length);\n\treturn combined;\n}\n\n/** Message parameters used in control messages. */\nexport class Parameters {\n\tvars: Map<bigint, bigint>;\n\tbytes: Map<bigint, Uint8Array>;\n\t#locations: Map<bigint, MessageLocation>;\n\n\tconstructor() {\n\t\tthis.vars = new Map();\n\t\tthis.bytes = new Map();\n\t\tthis.#locations = new Map();\n\t}\n\n\t// --- Numeric accessors ---\n\n\tget subscriberPriority(): number | undefined {\n\t\tconst v = this.vars.get(MSG_PARAM_SUBSCRIBER_PRIORITY);\n\t\treturn v !== undefined ? Number(v) : undefined;\n\t}\n\n\tset subscriberPriority(v: number) {\n\t\tthis.vars.set(MSG_PARAM_SUBSCRIBER_PRIORITY, BigInt(v));\n\t}\n\n\tget groupOrder(): number | undefined {\n\t\tconst v = this.vars.get(MSG_PARAM_GROUP_ORDER);\n\t\treturn v !== undefined ? Number(v) : undefined;\n\t}\n\n\tset groupOrder(v: number) {\n\t\tthis.vars.set(MSG_PARAM_GROUP_ORDER, BigInt(v));\n\t}\n\n\tget forward(): boolean | undefined {\n\t\tconst v = this.vars.get(MSG_PARAM_FORWARD);\n\t\treturn v !== undefined ? v !== 0n : undefined;\n\t}\n\n\tset forward(v: boolean) {\n\t\tthis.vars.set(MSG_PARAM_FORWARD, v ? 1n : 0n);\n\t}\n\n\tget publisherPriority(): number | undefined {\n\t\tconst v = this.vars.get(MSG_PARAM_PUBLISHER_PRIORITY);\n\t\treturn v !== undefined ? Number(v) : undefined;\n\t}\n\n\tset publisherPriority(v: number) {\n\t\tthis.vars.set(MSG_PARAM_PUBLISHER_PRIORITY, BigInt(v));\n\t}\n\n\tget expires(): bigint | undefined {\n\t\treturn this.vars.get(MSG_PARAM_EXPIRES);\n\t}\n\n\tset expires(v: bigint) {\n\t\tthis.vars.set(MSG_PARAM_EXPIRES, v);\n\t}\n\n\tget deliveryTimeout(): bigint | undefined {\n\t\treturn this.vars.get(MSG_PARAM_DELIVERY_TIMEOUT);\n\t}\n\n\tset deliveryTimeout(v: bigint) {\n\t\tthis.vars.set(MSG_PARAM_DELIVERY_TIMEOUT, v);\n\t}\n\n\tget maxCacheDuration(): bigint | undefined {\n\t\treturn this.vars.get(MSG_PARAM_MAX_CACHE_DURATION);\n\t}\n\n\tset maxCacheDuration(v: bigint) {\n\t\tthis.vars.set(MSG_PARAM_MAX_CACHE_DURATION, v);\n\t}\n\n\t// --- Bytes accessors ---\n\n\tget largest(): MessageLocation | undefined {\n\t\tconst location = this.#locations.get(MSG_PARAM_LARGEST_OBJECT);\n\t\treturn location && { ...location };\n\t}\n\n\tset largest(v: MessageLocation) {\n\t\tthis.#locations.set(MSG_PARAM_LARGEST_OBJECT, { ...v });\n\t}\n\n\t/**\n\t * LOCATION_FILTER, as its raw parameter value.\n\t *\n\t * Raw because the encoding is version dependent: a Filter Type tag through draft-19, a\n\t * list of up to four varints from draft-20 on. See `filter.ts`.\n\t */\n\tget subscriptionFilter(): Uint8Array | undefined {\n\t\treturn this.bytes.get(MSG_PARAM_SUBSCRIPTION_FILTER);\n\t}\n\n\tset subscriptionFilter(v: Uint8Array) {\n\t\tthis.bytes.set(MSG_PARAM_SUBSCRIPTION_FILTER, v);\n\t}\n\n\t/** FILL_PARAMETERS: the draft-20 backfill request, as its raw parameter value. */\n\tget fillParameters(): Uint8Array | undefined {\n\t\treturn this.bytes.get(MSG_PARAM_FILL_PARAMETERS);\n\t}\n\n\tset fillParameters(v: Uint8Array) {\n\t\tthis.bytes.set(MSG_PARAM_FILL_PARAMETERS, v);\n\t}\n\n\t/** INCLUDE_PROPERTIES: whether the peer wants Track Properties on the response. */\n\tget includeProperties(): boolean | undefined {\n\t\tconst data = this.bytes.get(MSG_PARAM_INCLUDE_PROPERTIES);\n\t\tif (!data) return undefined;\n\t\t// The draft allows exactly 0 or 1; anything else is a protocol violation.\n\t\tif (data.length !== 1 || data[0] > 1) {\n\t\t\tthrow new Error(`invalid INCLUDE_PROPERTIES value: ${data.join(\",\")}`);\n\t\t}\n\t\treturn data[0] === 1;\n\t}\n\n\tset includeProperties(v: boolean) {\n\t\tthis.bytes.set(MSG_PARAM_INCLUDE_PROPERTIES, new Uint8Array([v ? 1 : 0]));\n\t}\n\n\t/** HOP_PATH: the hop chain an advertisement traversed, as its raw parameter value. */\n\tget hopPath(): Uint8Array | undefined {\n\t\treturn this.bytes.get(MSG_PARAM_HOP_PATH);\n\t}\n\n\tset hopPath(v: Uint8Array) {\n\t\tthis.bytes.set(MSG_PARAM_HOP_PATH, v);\n\t}\n\n\t/** ROUTE_COST: the accumulated cost of that path. Absent means 0. */\n\tget routeCost(): bigint | undefined {\n\t\treturn this.vars.get(MSG_PARAM_ROUTE_COST);\n\t}\n\n\tset routeCost(v: bigint) {\n\t\tthis.vars.set(MSG_PARAM_ROUTE_COST, v);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion) {\n\t\tawait w.u53(this.vars.size + this.bytes.size + this.#locations.size);\n\n\t\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15) {\n\t\t\tfor (const [id, value] of this.vars) {\n\t\t\t\tawait w.u62(id);\n\t\t\t\tawait w.u62(value);\n\t\t\t}\n\n\t\t\tfor (const [id, value] of this.bytes) {\n\t\t\t\tawait w.u62(id);\n\t\t\t\tawait w.u53(value.length);\n\t\t\t\tawait w.write(value);\n\t\t\t}\n\n\t\t\tfor (const [id, value] of this.#locations) {\n\t\t\t\tconst encoded = encodeLocation(value);\n\t\t\t\tawait w.u62(id);\n\t\t\t\tawait w.u53(encoded.length);\n\t\t\t\tawait w.write(encoded);\n\t\t\t}\n\t\t} else {\n\t\t\t// d16+: Delta encoding, merge all parameter storage, sort by key\n\t\t\tconst all: { key: bigint; storage: \"var\" | \"bytes\" | \"location\" }[] = [];\n\t\t\tfor (const id of this.vars.keys()) all.push({ key: id, storage: \"var\" });\n\t\t\tfor (const id of this.bytes.keys()) all.push({ key: id, storage: \"bytes\" });\n\t\t\tfor (const id of this.#locations.keys()) all.push({ key: id, storage: \"location\" });\n\t\t\tall.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));\n\n\t\t\tlet prevId = 0n;\n\t\t\tfor (let i = 0; i < all.length; i++) {\n\t\t\t\tconst { key, storage } = all[i];\n\t\t\t\tconst delta = i === 0 ? key : key - prevId;\n\t\t\t\tprevId = key;\n\t\t\t\tawait w.u62(delta);\n\n\t\t\t\tif (version === Version.DRAFT_16) {\n\t\t\t\t\tif (storage === \"var\") {\n\t\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in vars map\n\t\t\t\t\t\tawait w.u62(this.vars.get(key)!);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst value =\n\t\t\t\t\t\t\tstorage === \"bytes\"\n\t\t\t\t\t\t\t\t? // biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in bytes map\n\t\t\t\t\t\t\t\t\tthis.bytes.get(key)!\n\t\t\t\t\t\t\t\t: // biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in locations map\n\t\t\t\t\t\t\t\t\tencodeLocation(this.#locations.get(key)!);\n\t\t\t\t\t\tawait w.u53(value.length);\n\t\t\t\t\t\tawait w.write(value);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tswitch (getMessageParamKind(key)) {\n\t\t\t\t\tcase \"varint\": {\n\t\t\t\t\t\tconst value = this.vars.get(key);\n\t\t\t\t\t\tif (value === undefined) throw new Error(`invalid varint message parameter: ${key.toString()}`);\n\t\t\t\t\t\tawait w.u62(value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"uint8\": {\n\t\t\t\t\t\tconst value = this.vars.get(key);\n\t\t\t\t\t\tif (value === undefined || value < 0n || value > 0xffn) {\n\t\t\t\t\t\t\tthrow new Error(`invalid uint8 message parameter: ${key.toString()}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait w.u8(Number(value));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"bool\": {\n\t\t\t\t\t\tconst value = this.vars.get(key);\n\t\t\t\t\t\tif (value !== 0n && value !== 1n) {\n\t\t\t\t\t\t\tthrow new Error(`invalid bool message parameter: ${key.toString()}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait w.bool(value === 1n);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"location\": {\n\t\t\t\t\t\tconst location = this.#locations.get(key);\n\t\t\t\t\t\tif (location === undefined)\n\t\t\t\t\t\t\tthrow new Error(`invalid Location message parameter: ${key.toString()}`);\n\t\t\t\t\t\t// LARGEST_OBJECT is an odd type, so the Key-Value-Pair rule gives it\n\t\t\t\t\t\t// a Length on every draft: two varints inside the value.\n\t\t\t\t\t\tconst group = Varint.encodeLeadingOnes(location.groupId);\n\t\t\t\t\t\tconst object = Varint.encodeLeadingOnes(location.objectId);\n\t\t\t\t\t\tawait w.u53(group.length + object.length);\n\t\t\t\t\t\tawait w.write(group);\n\t\t\t\t\t\tawait w.write(object);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"bytes\": {\n\t\t\t\t\t\tconst value = this.bytes.get(key);\n\t\t\t\t\t\tif (value === undefined) throw new Error(`invalid bytes message parameter: ${key.toString()}`);\n\t\t\t\t\t\tawait w.u53(value.length);\n\t\t\t\t\t\tawait w.write(value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<Parameters> {\n\t\tconst count = await r.u53();\n\t\tconst params = new Parameters();\n\n\t\tlet prevType = 0n;\n\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tlet id: bigint;\n\t\t\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15) {\n\t\t\t\tid = await r.u62();\n\t\t\t} else {\n\t\t\t\t// d16+: delta encoding\n\t\t\t\tconst delta = await r.u62();\n\t\t\t\tid = i === 0 ? delta : prevType + delta;\n\t\t\t\tprevType = id;\n\t\t\t}\n\n\t\t\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\t\tif (id % 2n === 0n) {\n\t\t\t\t\tif (params.vars.has(id)) {\n\t\t\t\t\t\tthrow new Error(`duplicate message parameter id: ${id.toString()}`);\n\t\t\t\t\t}\n\t\t\t\t\tconst varint = await r.u62();\n\t\t\t\t\tparams.vars.set(id, varint);\n\t\t\t\t} else {\n\t\t\t\t\tconst size = await r.u53();\n\t\t\t\t\tconst bytes = await r.read(size);\n\t\t\t\t\tif (id === MSG_PARAM_LARGEST_OBJECT) {\n\t\t\t\t\t\tif (params.#locations.has(id)) {\n\t\t\t\t\t\t\tthrow new Error(`duplicate message parameter id: ${id.toString()}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparams.#locations.set(id, decodeLocation(bytes));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (params.bytes.has(id)) {\n\t\t\t\t\t\t\tthrow new Error(`duplicate message parameter id: ${id.toString()}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparams.bytes.set(id, bytes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (params.vars.has(id) || params.bytes.has(id) || params.#locations.has(id)) {\n\t\t\t\tthrow new Error(`duplicate message parameter id: ${id.toString()}`);\n\t\t\t}\n\n\t\t\tswitch (getMessageParamKind(id)) {\n\t\t\t\tcase \"varint\":\n\t\t\t\t\tparams.vars.set(id, await r.u62());\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"uint8\":\n\t\t\t\t\tparams.vars.set(id, BigInt(await r.u8()));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bool\":\n\t\t\t\t\tparams.vars.set(id, (await r.bool()) ? 1n : 0n);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"location\": {\n\t\t\t\t\t// LARGEST_OBJECT is an odd type, so the Key-Value-Pair rule gives it a\n\t\t\t\t\t// Length on every draft: two varints inside the value.\n\t\t\t\t\tconst size = await r.u53();\n\t\t\t\t\tconst [groupId, objectData] = Varint.decodeLeadingOnes(await r.read(size));\n\t\t\t\t\tconst [objectId, trailing] = Varint.decodeLeadingOnes(objectData);\n\t\t\t\t\tif (trailing.length !== 0) {\n\t\t\t\t\t\tthrow new Error(\"trailing bytes in message parameter Location\");\n\t\t\t\t\t}\n\t\t\t\t\tparams.#locations.set(id, { groupId, objectId });\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"bytes\": {\n\t\t\t\t\tconst size = await r.u53();\n\t\t\t\t\tparams.bytes.set(id, await r.read(size));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn params;\n\t}\n}\n"]}
1
+ {"version":3,"file":"parameters.js","sourceRoot":"","sources":["../../src/ietf/parameters.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Reader, Writer } from \"../stream.ts\";\nimport * as Varint from \"../varint.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n/// Setup Option key constants (separate namespace from Message Parameters).\nexport const SetupOption = {\n\tPath: 1n,\n\tMaxRequestId: 2n,\n\tAuthorizationToken: 3n,\n\tMaxAuthTokenCacheSize: 4n,\n\tAuthority: 5n,\n\tImplementation: 7n,\n\t/** HOP_ID, from the MoQ Cluster extension. See `cluster.ts`. */\n\tHopId: 0x40b54n,\n\t/** RELAY_COST, from the MoQ Cluster extension. See `cluster.ts`. */\n\tRelayCost: 0x40b56n,\n\t/** SOLICIT, from the MoQ Solicit extension. See `solicit.ts`. */\n\tSolicit: 0x40b5an,\n\t/** HIDDEN, from the MoQ Hidden extension. See `hidden.ts`. */\n\tHidden: 0x40b5cn,\n} as const;\n\n/// Setup Options — used in SETUP messages.\n///\n/// In d14-d16 these are count-prefixed (\"Setup Parameters\").\n/// In d17 these have no count prefix (\"Setup Options\") and read/write to end of message.\nexport class SetupOptions {\n\tvars: Map<bigint, bigint>;\n\tbytes: Map<bigint, Uint8Array>;\n\n\tconstructor() {\n\t\tthis.vars = new Map();\n\t\tthis.bytes = new Map();\n\t}\n\n\tget size() {\n\t\treturn this.vars.size + this.bytes.size;\n\t}\n\n\tsetBytes(id: bigint, value: Uint8Array) {\n\t\tif (id % 2n !== 1n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be odd`);\n\t\t}\n\t\tthis.bytes.set(id, value);\n\t}\n\n\tsetVarint(id: bigint, value: bigint) {\n\t\tif (id % 2n !== 0n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be even`);\n\t\t}\n\t\tthis.vars.set(id, value);\n\t}\n\n\tgetBytes(id: bigint): Uint8Array | undefined {\n\t\tif (id % 2n !== 1n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be odd`);\n\t\t}\n\t\treturn this.bytes.get(id);\n\t}\n\n\tgetVarint(id: bigint): bigint | undefined {\n\t\tif (id % 2n !== 0n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be even`);\n\t\t}\n\t\treturn this.vars.get(id);\n\t}\n\n\tremoveBytes(id: bigint): boolean {\n\t\tif (id % 2n !== 1n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be odd`);\n\t\t}\n\t\treturn this.bytes.delete(id);\n\t}\n\n\tremoveVarint(id: bigint): boolean {\n\t\tif (id % 2n !== 0n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be even`);\n\t\t}\n\t\treturn this.vars.delete(id);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion) {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15) {\n\t\t\t// d17+: no count prefix; d16: count prefix\n\t\t\tif (version === Version.DRAFT_16) {\n\t\t\t\tawait w.u53(this.vars.size + this.bytes.size);\n\t\t\t}\n\n\t\t\t// Delta encoding: collect all keys, sort, encode deltas\n\t\t\tconst all: { key: bigint; isVar: boolean }[] = [];\n\t\t\tfor (const id of this.vars.keys()) all.push({ key: id, isVar: true });\n\t\t\tfor (const id of this.bytes.keys()) all.push({ key: id, isVar: false });\n\t\t\tall.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));\n\n\t\t\tlet prevId = 0n;\n\t\t\tfor (let i = 0; i < all.length; i++) {\n\t\t\t\tconst { key, isVar } = all[i];\n\t\t\t\tconst delta = i === 0 ? key : key - prevId;\n\t\t\t\tprevId = key;\n\t\t\t\tawait w.u62(delta);\n\n\t\t\t\tif (isVar) {\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in vars map\n\t\t\t\t\tawait w.u62(this.vars.get(key)!);\n\t\t\t\t} else {\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in bytes map\n\t\t\t\t\tconst value = this.bytes.get(key)!;\n\t\t\t\t\tawait w.u53(value.length);\n\t\t\t\t\tawait w.write(value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tawait w.u53(this.vars.size + this.bytes.size);\n\n\t\t\tfor (const [id, value] of this.vars) {\n\t\t\t\tawait w.u62(id);\n\t\t\t\tawait w.u62(value);\n\t\t\t}\n\n\t\t\tfor (const [id, value] of this.bytes) {\n\t\t\t\tawait w.u62(id);\n\t\t\t\tawait w.u53(value.length);\n\t\t\t\tawait w.write(value);\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<SetupOptions> {\n\t\tconst params = new SetupOptions();\n\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\t// d17+: no count prefix, read until reader is done\n\t\t\tlet prevType = 0n;\n\t\t\tlet i = 0;\n\t\t\twhile (!(await r.done())) {\n\t\t\t\tconst delta = await r.u62();\n\t\t\t\tconst id = i === 0 ? delta : prevType + delta;\n\t\t\t\tprevType = id;\n\t\t\t\ti++;\n\n\t\t\t\tif (id % 2n === 0n) {\n\t\t\t\t\tif (params.vars.has(id)) {\n\t\t\t\t\t\tthrow new Error(`duplicate parameter id: ${id.toString()}`);\n\t\t\t\t\t}\n\t\t\t\t\tconst varint = await r.u62();\n\t\t\t\t\tparams.setVarint(id, varint);\n\t\t\t\t} else {\n\t\t\t\t\tif (params.bytes.has(id)) {\n\t\t\t\t\t\tthrow new Error(`duplicate parameter id: ${id.toString()}`);\n\t\t\t\t\t}\n\t\t\t\t\tconst size = await r.u53();\n\t\t\t\t\tconst bytes = await r.read(size);\n\t\t\t\t\tparams.setBytes(id, bytes);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst count = await r.u53();\n\t\t\tlet prevType = 0n;\n\n\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\tlet id: bigint;\n\t\t\t\tif (version === Version.DRAFT_16) {\n\t\t\t\t\tconst delta = await r.u62();\n\t\t\t\t\tid = i === 0 ? delta : prevType + delta;\n\t\t\t\t\tprevType = id;\n\t\t\t\t} else {\n\t\t\t\t\tid = await r.u62();\n\t\t\t\t}\n\n\t\t\t\tif (id % 2n === 0n) {\n\t\t\t\t\tif (params.vars.has(id)) {\n\t\t\t\t\t\tthrow new Error(`duplicate parameter id: ${id.toString()}`);\n\t\t\t\t\t}\n\t\t\t\t\tconst varint = await r.u62();\n\t\t\t\t\tparams.setVarint(id, varint);\n\t\t\t\t} else {\n\t\t\t\t\tif (params.bytes.has(id)) {\n\t\t\t\t\t\tthrow new Error(`duplicate parameter id: ${id.toString()}`);\n\t\t\t\t\t}\n\t\t\t\t\tconst size = await r.u53();\n\t\t\t\t\tconst bytes = await r.read(size);\n\t\t\t\t\tparams.setBytes(id, bytes);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn params;\n\t}\n}\n\n// ---- Message Parameters (used in Subscribe, Publish, Fetch, etc.) ----\n// Count-prefixed KVPs through d16, then definition-specific Type-Value pairs.\n// Parameter types are delta-encoded from d16 onward.\n\n// Varint parameter IDs (even)\nconst MSG_PARAM_DELIVERY_TIMEOUT = 0x02n;\n/// FILL_TIMEOUT, on a FETCH. Ignored: a refusal doesn't wait.\nconst MSG_PARAM_FILL_TIMEOUT = 0x0an;\n/// NEW_GROUP_REQUEST. Ignored, as the draft lets a publisher without dynamic groups do.\nconst MSG_PARAM_NEW_GROUP_REQUEST = 0x32n;\n/// SUBGROUP_DELIVERY_TIMEOUT, alongside the per-object one above.\nconst MSG_PARAM_SUBGROUP_DELIVERY_TIMEOUT = 0x06n;\nconst MSG_PARAM_MAX_CACHE_DURATION = 0x04n;\nconst MSG_PARAM_EXPIRES = 0x08n;\nconst MSG_PARAM_PUBLISHER_PRIORITY = 0x0en;\nconst MSG_PARAM_FORWARD = 0x10n;\nconst MSG_PARAM_SUBSCRIBER_PRIORITY = 0x20n;\nconst MSG_PARAM_GROUP_ORDER = 0x22n;\n/// INCLUDE_PROPERTIES, draft-20's opt-out from Track Properties.\nconst MSG_PARAM_INCLUDE_PROPERTIES = 0x35n;\n/// ROUTE_COST, from the MoQ Cluster extension. See `cluster.ts`.\nconst MSG_PARAM_ROUTE_COST = 0x40b58n;\n/// HIDDEN, from the MoQ Hidden extension. See `hidden.ts`.\nconst MSG_PARAM_HIDDEN = 0x40b5en;\n\n// Bytes parameter IDs (odd)\n/// AUTHORIZATION TOKEN. Ignored: the session's grant is what authorizes a request.\nconst MSG_PARAM_AUTHORIZATION_TOKEN = 0x03n;\nconst MSG_PARAM_LARGEST_OBJECT = 0x09n;\nconst MSG_PARAM_SUBSCRIPTION_FILTER = 0x21n;\n/// FILL_PARAMETERS, draft-20's request for a backfill.\nconst MSG_PARAM_FILL_PARAMETERS = 0x23n;\n/// HOP_PATH, from the MoQ Cluster extension. See `cluster.ts`.\nconst MSG_PARAM_HOP_PATH = 0x40b57n;\n\n/// The object Range Filters (draft-19): SUBGROUP, OBJECTID, PRIORITY and OBJECT_PROPERTY.\n/// Each is length prefixed whatever the parity of its id.\nconst MSG_PARAM_RANGE_FILTERS: readonly bigint[] = [0x25n, 0x26n, 0x27n, 0x28n];\n/// TRACK_PROPERTY_FILTER, the Range Filter legal only on SUBSCRIBE_TRACKS and its updates.\nconst MSG_PARAM_TRACK_PROPERTY_FILTER = 0x29n;\n\n/// The parameters whose definitions let them repeat within one message.\nconst MSG_PARAM_REPEATABLE: readonly bigint[] = [\n\tMSG_PARAM_AUTHORIZATION_TOKEN,\n\t...MSG_PARAM_RANGE_FILTERS,\n\tMSG_PARAM_TRACK_PROPERTY_FILTER,\n];\n\ntype MessageParamKind = \"varint\" | \"uint8\" | \"bool\" | \"location\" | \"bytes\";\n/** A `{Group, Object}` pair carried by a message parameter, such as LARGEST_OBJECT. */\nexport type MessageLocation = { groupId: bigint; objectId: bigint };\n\nfunction getMessageParamKind(id: bigint): MessageParamKind {\n\tswitch (id) {\n\t\tcase MSG_PARAM_DELIVERY_TIMEOUT:\n\t\tcase MSG_PARAM_FILL_TIMEOUT:\n\t\tcase MSG_PARAM_NEW_GROUP_REQUEST:\n\t\tcase MSG_PARAM_SUBGROUP_DELIVERY_TIMEOUT:\n\t\tcase MSG_PARAM_MAX_CACHE_DURATION:\n\t\tcase MSG_PARAM_EXPIRES:\n\t\tcase MSG_PARAM_ROUTE_COST:\n\t\tcase MSG_PARAM_HIDDEN:\n\t\t\treturn \"varint\";\n\t\tcase MSG_PARAM_PUBLISHER_PRIORITY:\n\t\tcase MSG_PARAM_SUBSCRIBER_PRIORITY:\n\t\tcase MSG_PARAM_GROUP_ORDER:\n\t\tcase MSG_PARAM_INCLUDE_PROPERTIES:\n\t\t\treturn \"uint8\";\n\t\tcase MSG_PARAM_FORWARD:\n\t\t\treturn \"bool\";\n\t\tcase MSG_PARAM_LARGEST_OBJECT:\n\t\t\treturn \"location\";\n\t\tcase MSG_PARAM_AUTHORIZATION_TOKEN:\n\t\tcase MSG_PARAM_SUBSCRIPTION_FILTER:\n\t\tcase MSG_PARAM_FILL_PARAMETERS:\n\t\tcase MSG_PARAM_HOP_PATH:\n\t\t\treturn \"bytes\";\n\t\tdefault:\n\t\t\tif (MSG_PARAM_REPEATABLE.includes(id)) return \"bytes\";\n\t\t\tthrow new Error(`unknown message parameter id: ${id.toString()}`);\n\t}\n}\n\n/**\n * The draft-16 and earlier form: draft-16 section 9.2 serializes every Message Parameter as\n * a Key-Value-Pair, and section 9.2.2.7 calls LARGEST_OBJECT \"a length-prefixed Location\n * structure\", so the two QUIC-style varints sit inside a byte string.\n */\nfunction decodeLocation(data: Uint8Array): MessageLocation {\n\tconst [groupId, objectData] = Varint.decodeBigInt(data);\n\tconst [objectId, trailing] = Varint.decodeBigInt(objectData);\n\tif (trailing.length !== 0) {\n\t\tthrow new Error(\"trailing bytes in message parameter Location\");\n\t}\n\treturn { groupId, objectId };\n}\n\nfunction encodeLocation({ groupId, objectId }: MessageLocation): Uint8Array {\n\tconst group = Varint.encode(groupId);\n\tconst object = Varint.encode(objectId);\n\tconst combined = new Uint8Array(group.length + object.length);\n\tcombined.set(group, 0);\n\tcombined.set(object, group.length);\n\treturn combined;\n}\n\n/** Message parameters used in control messages. */\nexport class Parameters {\n\tvars: Map<bigint, bigint>;\n\tbytes: Map<bigint, Uint8Array>;\n\t#locations: Map<bigint, MessageLocation>;\n\t/** Every instance of a parameter that may repeat, decoded only; we never send one. */\n\t#repeated: Map<bigint, Uint8Array[]>;\n\n\tconstructor() {\n\t\tthis.vars = new Map();\n\t\tthis.bytes = new Map();\n\t\tthis.#locations = new Map();\n\t\tthis.#repeated = new Map();\n\t}\n\n\t#repeat(id: bigint, value: Uint8Array) {\n\t\tconst values = this.#repeated.get(id) ?? [];\n\t\tvalues.push(value);\n\t\tthis.#repeated.set(id, values);\n\t}\n\n\t/**\n\t * Whether the message carried a Range Filter. We advertise no MAX_FILTER_RANGES, so a\n\t * request with one is refused rather than served unfiltered.\n\t */\n\tget rangeFilters(): boolean {\n\t\treturn MSG_PARAM_RANGE_FILTERS.some((id) => this.#repeated.has(id));\n\t}\n\n\t/** Whether the message carried TRACK_PROPERTY_FILTER, which only a SUBSCRIBE_TRACKS may. */\n\tget trackPropertyFilter(): boolean {\n\t\treturn this.#repeated.has(MSG_PARAM_TRACK_PROPERTY_FILTER);\n\t}\n\n\t// --- Numeric accessors ---\n\n\tget subscriberPriority(): number | undefined {\n\t\tconst v = this.vars.get(MSG_PARAM_SUBSCRIBER_PRIORITY);\n\t\treturn v !== undefined ? Number(v) : undefined;\n\t}\n\n\tset subscriberPriority(v: number) {\n\t\tthis.vars.set(MSG_PARAM_SUBSCRIBER_PRIORITY, BigInt(v));\n\t}\n\n\tget groupOrder(): number | undefined {\n\t\tconst v = this.vars.get(MSG_PARAM_GROUP_ORDER);\n\t\treturn v !== undefined ? Number(v) : undefined;\n\t}\n\n\tset groupOrder(v: number) {\n\t\tthis.vars.set(MSG_PARAM_GROUP_ORDER, BigInt(v));\n\t}\n\n\tget forward(): boolean | undefined {\n\t\tconst v = this.vars.get(MSG_PARAM_FORWARD);\n\t\treturn v !== undefined ? v !== 0n : undefined;\n\t}\n\n\tset forward(v: boolean) {\n\t\tthis.vars.set(MSG_PARAM_FORWARD, v ? 1n : 0n);\n\t}\n\n\tget publisherPriority(): number | undefined {\n\t\tconst v = this.vars.get(MSG_PARAM_PUBLISHER_PRIORITY);\n\t\treturn v !== undefined ? Number(v) : undefined;\n\t}\n\n\tset publisherPriority(v: number) {\n\t\tthis.vars.set(MSG_PARAM_PUBLISHER_PRIORITY, BigInt(v));\n\t}\n\n\tget expires(): bigint | undefined {\n\t\treturn this.vars.get(MSG_PARAM_EXPIRES);\n\t}\n\n\tset expires(v: bigint) {\n\t\tthis.vars.set(MSG_PARAM_EXPIRES, v);\n\t}\n\n\tget deliveryTimeout(): bigint | undefined {\n\t\treturn this.vars.get(MSG_PARAM_DELIVERY_TIMEOUT);\n\t}\n\n\tset deliveryTimeout(v: bigint) {\n\t\tthis.vars.set(MSG_PARAM_DELIVERY_TIMEOUT, v);\n\t}\n\n\tget maxCacheDuration(): bigint | undefined {\n\t\treturn this.vars.get(MSG_PARAM_MAX_CACHE_DURATION);\n\t}\n\n\tset maxCacheDuration(v: bigint) {\n\t\tthis.vars.set(MSG_PARAM_MAX_CACHE_DURATION, v);\n\t}\n\n\t/** HIDDEN (MoQ Hidden): also advertise hidden namespaces. Absent and 0 both mean no. */\n\tget hidden(): boolean {\n\t\tconst v = this.vars.get(MSG_PARAM_HIDDEN);\n\t\tif (v === undefined || v === 0n) return false;\n\t\tif (v === 1n) return true;\n\t\tthrow new Error(`invalid HIDDEN parameter: ${v}`);\n\t}\n\n\tset hidden(v: boolean) {\n\t\tif (v) this.vars.set(MSG_PARAM_HIDDEN, 1n);\n\t\telse this.vars.delete(MSG_PARAM_HIDDEN);\n\t}\n\n\t// --- Bytes accessors ---\n\n\tget largest(): MessageLocation | undefined {\n\t\tconst location = this.#locations.get(MSG_PARAM_LARGEST_OBJECT);\n\t\treturn location && { ...location };\n\t}\n\n\tset largest(v: MessageLocation) {\n\t\tthis.#locations.set(MSG_PARAM_LARGEST_OBJECT, { ...v });\n\t}\n\n\t/**\n\t * LOCATION_FILTER, as its raw parameter value.\n\t *\n\t * Raw because the encoding is version dependent: a Filter Type tag through draft-19, a\n\t * list of up to four varints from draft-20 on. See `filter.ts`.\n\t */\n\tget subscriptionFilter(): Uint8Array | undefined {\n\t\treturn this.bytes.get(MSG_PARAM_SUBSCRIPTION_FILTER);\n\t}\n\n\tset subscriptionFilter(v: Uint8Array) {\n\t\tthis.bytes.set(MSG_PARAM_SUBSCRIPTION_FILTER, v);\n\t}\n\n\t/** FILL_PARAMETERS: the draft-20 backfill request, as its raw parameter value. */\n\tget fillParameters(): Uint8Array | undefined {\n\t\treturn this.bytes.get(MSG_PARAM_FILL_PARAMETERS);\n\t}\n\n\tset fillParameters(v: Uint8Array) {\n\t\tthis.bytes.set(MSG_PARAM_FILL_PARAMETERS, v);\n\t}\n\n\t/** INCLUDE_PROPERTIES: whether the peer wants Track Properties on the response. */\n\tget includeProperties(): boolean | undefined {\n\t\t// Draft-16 and earlier frame every parameter as a Key-Value-Pair, so an odd id lands\n\t\t// in `bytes`. It still has to read as present, so the draft-20 gate can refuse it.\n\t\tconst legacy = this.bytes.get(MSG_PARAM_INCLUDE_PROPERTIES);\n\t\tconst v = legacy ? (legacy.length === 1 ? BigInt(legacy[0]) : 2n) : this.vars.get(MSG_PARAM_INCLUDE_PROPERTIES);\n\t\tif (v === undefined) return undefined;\n\t\t// The draft allows exactly 0 or 1; anything else is a protocol violation.\n\t\tif (v > 1n) throw new Error(`invalid INCLUDE_PROPERTIES value: ${v}`);\n\t\treturn v === 1n;\n\t}\n\n\tset includeProperties(v: boolean) {\n\t\tthis.vars.set(MSG_PARAM_INCLUDE_PROPERTIES, v ? 1n : 0n);\n\t}\n\n\t/** HOP_PATH: the hop chain an advertisement traversed, as its raw parameter value. */\n\tget hopPath(): Uint8Array | undefined {\n\t\treturn this.bytes.get(MSG_PARAM_HOP_PATH);\n\t}\n\n\tset hopPath(v: Uint8Array) {\n\t\tthis.bytes.set(MSG_PARAM_HOP_PATH, v);\n\t}\n\n\t/** ROUTE_COST: the accumulated cost of that path. Absent means 0. */\n\tget routeCost(): bigint | undefined {\n\t\treturn this.vars.get(MSG_PARAM_ROUTE_COST);\n\t}\n\n\tset routeCost(v: bigint) {\n\t\tthis.vars.set(MSG_PARAM_ROUTE_COST, v);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion) {\n\t\tawait w.u53(this.vars.size + this.bytes.size + this.#locations.size);\n\n\t\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15) {\n\t\t\tfor (const [id, value] of this.vars) {\n\t\t\t\tawait w.u62(id);\n\t\t\t\tawait w.u62(value);\n\t\t\t}\n\n\t\t\tfor (const [id, value] of this.bytes) {\n\t\t\t\tawait w.u62(id);\n\t\t\t\tawait w.u53(value.length);\n\t\t\t\tawait w.write(value);\n\t\t\t}\n\n\t\t\tfor (const [id, value] of this.#locations) {\n\t\t\t\tconst encoded = encodeLocation(value);\n\t\t\t\tawait w.u62(id);\n\t\t\t\tawait w.u53(encoded.length);\n\t\t\t\tawait w.write(encoded);\n\t\t\t}\n\t\t} else {\n\t\t\t// d16+: Delta encoding, merge all parameter storage, sort by key\n\t\t\tconst all: { key: bigint; storage: \"var\" | \"bytes\" | \"location\" }[] = [];\n\t\t\tfor (const id of this.vars.keys()) all.push({ key: id, storage: \"var\" });\n\t\t\tfor (const id of this.bytes.keys()) all.push({ key: id, storage: \"bytes\" });\n\t\t\tfor (const id of this.#locations.keys()) all.push({ key: id, storage: \"location\" });\n\t\t\tall.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));\n\n\t\t\tlet prevId = 0n;\n\t\t\tfor (let i = 0; i < all.length; i++) {\n\t\t\t\tconst { key, storage } = all[i];\n\t\t\t\tconst delta = i === 0 ? key : key - prevId;\n\t\t\t\tprevId = key;\n\t\t\t\tawait w.u62(delta);\n\n\t\t\t\tif (version === Version.DRAFT_16) {\n\t\t\t\t\tif (storage === \"var\") {\n\t\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in vars map\n\t\t\t\t\t\tawait w.u62(this.vars.get(key)!);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst value =\n\t\t\t\t\t\t\tstorage === \"bytes\"\n\t\t\t\t\t\t\t\t? // biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in bytes map\n\t\t\t\t\t\t\t\t\tthis.bytes.get(key)!\n\t\t\t\t\t\t\t\t: // biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in locations map\n\t\t\t\t\t\t\t\t\tencodeLocation(this.#locations.get(key)!);\n\t\t\t\t\t\tawait w.u53(value.length);\n\t\t\t\t\t\tawait w.write(value);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tswitch (getMessageParamKind(key)) {\n\t\t\t\t\tcase \"varint\": {\n\t\t\t\t\t\tconst value = this.vars.get(key);\n\t\t\t\t\t\tif (value === undefined) throw new Error(`invalid varint message parameter: ${key.toString()}`);\n\t\t\t\t\t\tawait w.u62(value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"uint8\": {\n\t\t\t\t\t\tconst value = this.vars.get(key);\n\t\t\t\t\t\tif (value === undefined || value < 0n || value > 0xffn) {\n\t\t\t\t\t\t\tthrow new Error(`invalid uint8 message parameter: ${key.toString()}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait w.u8(Number(value));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"bool\": {\n\t\t\t\t\t\tconst value = this.vars.get(key);\n\t\t\t\t\t\tif (value !== 0n && value !== 1n) {\n\t\t\t\t\t\t\tthrow new Error(`invalid bool message parameter: ${key.toString()}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait w.bool(value === 1n);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"location\": {\n\t\t\t\t\t\tconst location = this.#locations.get(key);\n\t\t\t\t\t\tif (location === undefined)\n\t\t\t\t\t\t\tthrow new Error(`invalid Location message parameter: ${key.toString()}`);\n\t\t\t\t\t\t// Draft-17 section 9.3, and section 10.2 from draft-18 on, drops the\n\t\t\t\t\t\t// Length from a Message Parameter and defines a Location value as\n\t\t\t\t\t\t// \"Two consecutive varints (Group, Object)\", so they go out bare.\n\t\t\t\t\t\tawait w.u62(location.groupId);\n\t\t\t\t\t\tawait w.u62(location.objectId);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"bytes\": {\n\t\t\t\t\t\tconst value = this.bytes.get(key);\n\t\t\t\t\t\tif (value === undefined) throw new Error(`invalid bytes message parameter: ${key.toString()}`);\n\t\t\t\t\t\tawait w.u53(value.length);\n\t\t\t\t\t\tawait w.write(value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<Parameters> {\n\t\tconst count = await r.u53();\n\t\tconst params = new Parameters();\n\n\t\tlet prevType = 0n;\n\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tlet id: bigint;\n\t\t\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15) {\n\t\t\t\tid = await r.u62();\n\t\t\t} else {\n\t\t\t\t// d16+: delta encoding\n\t\t\t\tconst delta = await r.u62();\n\t\t\t\tid = i === 0 ? delta : prevType + delta;\n\t\t\t\tprevType = id;\n\t\t\t}\n\n\t\t\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\t\tif (id % 2n === 0n) {\n\t\t\t\t\tif (params.vars.has(id)) {\n\t\t\t\t\t\tthrow new Error(`duplicate message parameter id: ${id.toString()}`);\n\t\t\t\t\t}\n\t\t\t\t\tconst varint = await r.u62();\n\t\t\t\t\tparams.vars.set(id, varint);\n\t\t\t\t} else {\n\t\t\t\t\tconst size = await r.u53();\n\t\t\t\t\tconst bytes = await r.read(size);\n\t\t\t\t\tif (MSG_PARAM_REPEATABLE.includes(id)) {\n\t\t\t\t\t\tparams.#repeat(id, bytes);\n\t\t\t\t\t} else if (id === MSG_PARAM_LARGEST_OBJECT) {\n\t\t\t\t\t\tif (params.#locations.has(id)) {\n\t\t\t\t\t\t\tthrow new Error(`duplicate message parameter id: ${id.toString()}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparams.#locations.set(id, decodeLocation(bytes));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (params.bytes.has(id)) {\n\t\t\t\t\t\t\tthrow new Error(`duplicate message parameter id: ${id.toString()}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparams.bytes.set(id, bytes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (MSG_PARAM_REPEATABLE.includes(id)) {\n\t\t\t\tconst size = await r.u53();\n\t\t\t\tparams.#repeat(id, await r.read(size));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (params.vars.has(id) || params.bytes.has(id) || params.#locations.has(id)) {\n\t\t\t\tthrow new Error(`duplicate message parameter id: ${id.toString()}`);\n\t\t\t}\n\n\t\t\tswitch (getMessageParamKind(id)) {\n\t\t\t\tcase \"varint\":\n\t\t\t\t\tparams.vars.set(id, await r.u62());\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"uint8\":\n\t\t\t\t\tparams.vars.set(id, BigInt(await r.u8()));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bool\":\n\t\t\t\t\tparams.vars.set(id, (await r.bool()) ? 1n : 0n);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"location\": {\n\t\t\t\t\t// Two bare varints from draft-17 on; see the matching comment in encode.\n\t\t\t\t\tconst groupId = await r.u62();\n\t\t\t\t\tconst objectId = await r.u62();\n\t\t\t\t\tparams.#locations.set(id, { groupId, objectId });\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"bytes\": {\n\t\t\t\t\tconst size = await r.u53();\n\t\t\t\t\tparams.bytes.set(id, await r.read(size));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn params;\n\t}\n}\n"]}