@norskvideo/moq-net 0.1.2 → 0.1.4

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 (310) hide show
  1. package/README.md +1 -0
  2. package/announced.d.ts +111 -21
  3. package/announced.d.ts.map +1 -1
  4. package/announced.js +213 -40
  5. package/announced.js.map +1 -1
  6. package/broadcast.d.ts +80 -25
  7. package/broadcast.d.ts.map +1 -1
  8. package/broadcast.js +270 -49
  9. package/broadcast.js.map +1 -1
  10. package/connection/accept.d.ts +6 -0
  11. package/connection/accept.d.ts.map +1 -1
  12. package/connection/accept.js +42 -13
  13. package/connection/accept.js.map +1 -1
  14. package/connection/browser.d.ts +5 -0
  15. package/connection/browser.d.ts.map +1 -0
  16. package/connection/browser.js +31 -0
  17. package/connection/browser.js.map +1 -0
  18. package/connection/connect.d.ts +43 -1
  19. package/connection/connect.d.ts.map +1 -1
  20. package/connection/connect.js +118 -123
  21. package/connection/connect.js.map +1 -1
  22. package/connection/established.d.ts +43 -16
  23. package/connection/established.d.ts.map +1 -1
  24. package/connection/established.js.map +1 -1
  25. package/connection/handshake.d.ts +12 -1
  26. package/connection/handshake.d.ts.map +1 -1
  27. package/connection/handshake.js +30 -14
  28. package/connection/handshake.js.map +1 -1
  29. package/connection/index.d.ts +8 -0
  30. package/connection/index.d.ts.map +1 -1
  31. package/connection/index.js +6 -0
  32. package/connection/index.js.map +1 -1
  33. package/connection/reload.d.ts +66 -9
  34. package/connection/reload.d.ts.map +1 -1
  35. package/connection/reload.js +192 -66
  36. package/connection/reload.js.map +1 -1
  37. package/connection/stats.d.ts +92 -0
  38. package/connection/stats.d.ts.map +1 -0
  39. package/connection/stats.js +35 -0
  40. package/connection/stats.js.map +1 -0
  41. package/connection/transport.d.ts +10 -0
  42. package/connection/transport.d.ts.map +1 -0
  43. package/connection/transport.js +12 -0
  44. package/connection/transport.js.map +1 -0
  45. package/consume.d.ts +44 -0
  46. package/consume.d.ts.map +1 -0
  47. package/consume.js +60 -0
  48. package/consume.js.map +1 -0
  49. package/datagram.d.ts +23 -0
  50. package/datagram.d.ts.map +1 -0
  51. package/datagram.js +3 -0
  52. package/datagram.js.map +1 -0
  53. package/error.d.ts +76 -0
  54. package/error.d.ts.map +1 -0
  55. package/error.js +107 -0
  56. package/error.js.map +1 -0
  57. package/group.d.ts +143 -38
  58. package/group.d.ts.map +1 -1
  59. package/group.js +270 -68
  60. package/group.js.map +1 -1
  61. package/ietf/adapter.d.ts +2 -2
  62. package/ietf/adapter.d.ts.map +1 -1
  63. package/ietf/adapter.js +20 -10
  64. package/ietf/adapter.js.map +1 -1
  65. package/ietf/aliases.d.ts +73 -5
  66. package/ietf/aliases.d.ts.map +1 -1
  67. package/ietf/aliases.js +121 -14
  68. package/ietf/aliases.js.map +1 -1
  69. package/ietf/cluster.d.ts +141 -0
  70. package/ietf/cluster.d.ts.map +1 -0
  71. package/ietf/cluster.js +204 -0
  72. package/ietf/cluster.js.map +1 -0
  73. package/ietf/connection.d.ts +39 -6
  74. package/ietf/connection.d.ts.map +1 -1
  75. package/ietf/connection.js +73 -12
  76. package/ietf/connection.js.map +1 -1
  77. package/ietf/fetch.d.ts +17 -0
  78. package/ietf/fetch.d.ts.map +1 -1
  79. package/ietf/fetch.js +21 -0
  80. package/ietf/fetch.js.map +1 -1
  81. package/ietf/filter.d.ts +87 -0
  82. package/ietf/filter.d.ts.map +1 -0
  83. package/ietf/filter.js +292 -0
  84. package/ietf/filter.js.map +1 -0
  85. package/ietf/index.d.ts +2 -0
  86. package/ietf/index.d.ts.map +1 -1
  87. package/ietf/index.js +3 -0
  88. package/ietf/index.js.map +1 -1
  89. package/ietf/namespace.d.ts +6 -0
  90. package/ietf/namespace.d.ts.map +1 -1
  91. package/ietf/namespace.js +27 -2
  92. package/ietf/namespace.js.map +1 -1
  93. package/ietf/object.d.ts +54 -6
  94. package/ietf/object.d.ts.map +1 -1
  95. package/ietf/object.js +178 -25
  96. package/ietf/object.js.map +1 -1
  97. package/ietf/parameters.d.ts +35 -10
  98. package/ietf/parameters.d.ts.map +1 -1
  99. package/ietf/parameters.js +236 -45
  100. package/ietf/parameters.js.map +1 -1
  101. package/ietf/priority.d.ts +5 -0
  102. package/ietf/priority.d.ts.map +1 -0
  103. package/ietf/priority.js +10 -0
  104. package/ietf/priority.js.map +1 -0
  105. package/ietf/properties.d.ts +13 -2
  106. package/ietf/properties.d.ts.map +1 -1
  107. package/ietf/properties.js +65 -8
  108. package/ietf/properties.js.map +1 -1
  109. package/ietf/publish.d.ts.map +1 -1
  110. package/ietf/publish.js +13 -3
  111. package/ietf/publish.js.map +1 -1
  112. package/ietf/publish_namespace.d.ts +16 -2
  113. package/ietf/publish_namespace.d.ts.map +1 -1
  114. package/ietf/publish_namespace.js +25 -6
  115. package/ietf/publish_namespace.js.map +1 -1
  116. package/ietf/publisher.d.ts +40 -7
  117. package/ietf/publisher.d.ts.map +1 -1
  118. package/ietf/publisher.js +751 -134
  119. package/ietf/publisher.js.map +1 -1
  120. package/ietf/request.js +1 -1
  121. package/ietf/request.js.map +1 -1
  122. package/ietf/solicit.d.ts +41 -0
  123. package/ietf/solicit.d.ts.map +1 -0
  124. package/ietf/solicit.js +47 -0
  125. package/ietf/solicit.js.map +1 -0
  126. package/ietf/subscribe.d.ts +41 -2
  127. package/ietf/subscribe.d.ts.map +1 -1
  128. package/ietf/subscribe.js +103 -22
  129. package/ietf/subscribe.js.map +1 -1
  130. package/ietf/subscribe_namespace.d.ts +21 -7
  131. package/ietf/subscribe_namespace.d.ts.map +1 -1
  132. package/ietf/subscribe_namespace.js +31 -14
  133. package/ietf/subscribe_namespace.js.map +1 -1
  134. package/ietf/subscriber.d.ts +20 -7
  135. package/ietf/subscriber.d.ts.map +1 -1
  136. package/ietf/subscriber.js +512 -142
  137. package/ietf/subscriber.js.map +1 -1
  138. package/ietf/version.d.ts +7 -1
  139. package/ietf/version.d.ts.map +1 -1
  140. package/ietf/version.js +7 -0
  141. package/ietf/version.js.map +1 -1
  142. package/index.d.ts +10 -5
  143. package/index.d.ts.map +1 -1
  144. package/index.js +10 -5
  145. package/index.js.map +1 -1
  146. package/internal.d.ts +29 -0
  147. package/internal.d.ts.map +1 -0
  148. package/internal.js +8 -0
  149. package/internal.js.map +1 -0
  150. package/lite/announce.d.ts +62 -15
  151. package/lite/announce.d.ts.map +1 -1
  152. package/lite/announce.js +230 -94
  153. package/lite/announce.js.map +1 -1
  154. package/lite/connection.d.ts +69 -20
  155. package/lite/connection.d.ts.map +1 -1
  156. package/lite/connection.js +128 -81
  157. package/lite/connection.js.map +1 -1
  158. package/lite/datagram.d.ts +23 -0
  159. package/lite/datagram.d.ts.map +1 -0
  160. package/lite/datagram.js +57 -0
  161. package/lite/datagram.js.map +1 -0
  162. package/lite/datagram_stream.d.ts +8 -0
  163. package/lite/datagram_stream.d.ts.map +1 -0
  164. package/lite/datagram_stream.js +44 -0
  165. package/lite/datagram_stream.js.map +1 -0
  166. package/lite/fetch.d.ts.map +1 -1
  167. package/lite/fetch.js +2 -2
  168. package/lite/fetch.js.map +1 -1
  169. package/lite/index.d.ts +3 -0
  170. package/lite/index.d.ts.map +1 -1
  171. package/lite/index.js +3 -0
  172. package/lite/index.js.map +1 -1
  173. package/lite/priority.d.ts +67 -0
  174. package/lite/priority.d.ts.map +1 -0
  175. package/lite/priority.js +114 -0
  176. package/lite/priority.js.map +1 -0
  177. package/lite/probe.d.ts +18 -2
  178. package/lite/probe.d.ts.map +1 -1
  179. package/lite/probe.js +24 -22
  180. package/lite/probe.js.map +1 -1
  181. package/lite/publisher.d.ts +14 -7
  182. package/lite/publisher.d.ts.map +1 -1
  183. package/lite/publisher.js +406 -84
  184. package/lite/publisher.js.map +1 -1
  185. package/lite/setup.d.ts +83 -6
  186. package/lite/setup.d.ts.map +1 -1
  187. package/lite/setup.js +203 -31
  188. package/lite/setup.js.map +1 -1
  189. package/lite/stream.d.ts +12 -3
  190. package/lite/stream.d.ts.map +1 -1
  191. package/lite/stream.js +7 -4
  192. package/lite/stream.js.map +1 -1
  193. package/lite/subscribe.d.ts +37 -23
  194. package/lite/subscribe.d.ts.map +1 -1
  195. package/lite/subscribe.js +70 -55
  196. package/lite/subscribe.js.map +1 -1
  197. package/lite/subscriber.d.ts +29 -23
  198. package/lite/subscriber.d.ts.map +1 -1
  199. package/lite/subscriber.js +689 -112
  200. package/lite/subscriber.js.map +1 -1
  201. package/lite/track.d.ts +25 -13
  202. package/lite/track.d.ts.map +1 -1
  203. package/lite/track.js +60 -35
  204. package/lite/track.js.map +1 -1
  205. package/lite/version.d.ts +39 -4
  206. package/lite/version.d.ts.map +1 -1
  207. package/lite/version.js +139 -17
  208. package/lite/version.js.map +1 -1
  209. package/mock.d.ts +53 -3
  210. package/mock.d.ts.map +1 -1
  211. package/mock.js +110 -21
  212. package/mock.js.map +1 -1
  213. package/{lite/origin.d.ts → origin.d.ts} +25 -1
  214. package/origin.d.ts.map +1 -0
  215. package/{lite/origin.js → origin.js} +25 -1
  216. package/origin.js.map +1 -0
  217. package/package.json +6 -4
  218. package/path.d.ts +67 -0
  219. package/path.d.ts.map +1 -1
  220. package/path.js +128 -0
  221. package/path.js.map +1 -1
  222. package/stream.d.ts +94 -4
  223. package/stream.d.ts.map +1 -1
  224. package/stream.js +128 -17
  225. package/stream.js.map +1 -1
  226. package/time.d.ts +109 -86
  227. package/time.d.ts.map +1 -1
  228. package/time.js +80 -30
  229. package/time.js.map +1 -1
  230. package/track.d.ts +298 -47
  231. package/track.d.ts.map +1 -1
  232. package/track.js +721 -109
  233. package/track.js.map +1 -1
  234. package/util/timeout.d.ts +5 -0
  235. package/util/timeout.d.ts.map +1 -0
  236. package/util/timeout.js +18 -0
  237. package/util/timeout.js.map +1 -0
  238. package/util/utf8.d.ts +3 -0
  239. package/util/utf8.d.ts.map +1 -0
  240. package/util/utf8.js +7 -0
  241. package/util/utf8.js.map +1 -0
  242. package/varint.d.ts +14 -3
  243. package/varint.d.ts.map +1 -1
  244. package/varint.js +23 -12
  245. package/varint.js.map +1 -1
  246. package/zod.d.ts +5 -5
  247. package/zod.d.ts.map +1 -1
  248. package/zod.js.map +1 -1
  249. package/bandwidth.d.ts +0 -11
  250. package/bandwidth.d.ts.map +0 -1
  251. package/bandwidth.js +0 -7
  252. package/bandwidth.js.map +0 -1
  253. package/connection/cert.test.d.ts +0 -2
  254. package/connection/cert.test.d.ts.map +0 -1
  255. package/connection/cert.test.js +0 -26
  256. package/connection/cert.test.js.map +0 -1
  257. package/connection/reload.test.d.ts +0 -2
  258. package/connection/reload.test.d.ts.map +0 -1
  259. package/connection/reload.test.js +0 -39
  260. package/connection/reload.test.js.map +0 -1
  261. package/group.test.d.ts +0 -2
  262. package/group.test.d.ts.map +0 -1
  263. package/group.test.js +0 -66
  264. package/group.test.js.map +0 -1
  265. package/ietf/aliases.test.d.ts +0 -2
  266. package/ietf/aliases.test.d.ts.map +0 -1
  267. package/ietf/aliases.test.js +0 -30
  268. package/ietf/aliases.test.js.map +0 -1
  269. package/ietf/ietf.test.d.ts +0 -2
  270. package/ietf/ietf.test.d.ts.map +0 -1
  271. package/ietf/ietf.test.js +0 -873
  272. package/ietf/ietf.test.js.map +0 -1
  273. package/integration.test.d.ts +0 -2
  274. package/integration.test.d.ts.map +0 -1
  275. package/integration.test.js +0 -90
  276. package/integration.test.js.map +0 -1
  277. package/lite/origin.d.ts.map +0 -1
  278. package/lite/origin.js.map +0 -1
  279. package/lite/subscriber.test.d.ts +0 -2
  280. package/lite/subscriber.test.d.ts.map +0 -1
  281. package/lite/subscriber.test.js +0 -30
  282. package/lite/subscriber.test.js.map +0 -1
  283. package/lite/track.test.d.ts +0 -2
  284. package/lite/track.test.d.ts.map +0 -1
  285. package/lite/track.test.js +0 -53
  286. package/lite/track.test.js.map +0 -1
  287. package/path.test.d.ts +0 -2
  288. package/path.test.d.ts.map +0 -1
  289. package/path.test.js +0 -169
  290. package/path.test.js.map +0 -1
  291. package/stream.test.d.ts +0 -2
  292. package/stream.test.d.ts.map +0 -1
  293. package/stream.test.js +0 -210
  294. package/stream.test.js.map +0 -1
  295. package/track.test.d.ts +0 -2
  296. package/track.test.d.ts.map +0 -1
  297. package/track.test.js +0 -56
  298. package/track.test.js.map +0 -1
  299. package/util/error.d.ts +0 -3
  300. package/util/error.d.ts.map +0 -1
  301. package/util/error.js +0 -9
  302. package/util/error.js.map +0 -1
  303. package/util/index.d.ts +0 -2
  304. package/util/index.d.ts.map +0 -1
  305. package/util/index.js +0 -3
  306. package/util/index.js.map +0 -1
  307. package/varint.test.d.ts +0 -2
  308. package/varint.test.d.ts.map +0 -1
  309. package/varint.test.js +0 -106
  310. package/varint.test.js.map +0 -1
@@ -1,17 +1,60 @@
1
1
  /* @ts-self-types="./properties.d.ts" */
2
+ import { Timescale } from "../time.js";
2
3
  import { Version } from "./version.js";
3
- /// Skip Track Properties from the remaining bytes of a message.
4
+ // TIMESCALE (0x08), from the MOQ Properties registry shared with draft-ietf-moq-loc-04.
5
+ // Track scope: it declares the units of every object Timestamp on the track, and its
6
+ // presence is what opts the track into timestamps at all.
7
+ const TIMESCALE = 0x08n;
8
+ // DEFAULT_PUBLISHER_GROUP_ORDER (0x22), the publisher's delivery preference for the track.
9
+ // It shares its number with the GROUP_ORDER *message parameter*, which is a different
10
+ // registry: that one is only legal in SUBSCRIBE, PUBLISH_OK, and FETCH, where the
11
+ // subscriber states its own preference.
12
+ const DEFAULT_PUBLISHER_GROUP_ORDER = 0x22n;
13
+ /**
14
+ * DEFAULT_PUBLISHER_GROUP_ORDER's descending value: the newest group first, which is what
15
+ * we serve, matching moq-lite.
16
+ */
17
+ export const DESCENDING = 0x02;
18
+ /// Write the block, which is the final field of the message: no count and no length, so
19
+ /// the caller must not append anything after it.
20
+ ///
21
+ /// Properties are serialized in ascending order by type, delta-encoded.
22
+ export async function encode(w, properties, version) {
23
+ // Draft-16 carries the same block under the name Track Extensions, but we only write it
24
+ // from draft-17 on: a draft-16 peer running an older build rejects any trailing bytes it
25
+ // doesn't parse, and draft-16 never registered TIMESCALE (0x08). We still read the block
26
+ // on draft-16, so a peer that sends one is understood.
27
+ if (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {
28
+ return;
29
+ }
30
+ let prevType = 0n;
31
+ if (properties.timescale !== undefined) {
32
+ await w.u62(TIMESCALE);
33
+ await w.u62(BigInt(properties.timescale));
34
+ prevType = TIMESCALE;
35
+ }
36
+ if (properties.groupOrder !== undefined) {
37
+ await w.u62(DEFAULT_PUBLISHER_GROUP_ORDER - prevType);
38
+ await w.u62(BigInt(properties.groupOrder));
39
+ }
40
+ }
41
+ /// Parse Track Properties from the remaining bytes of a message.
4
42
  ///
5
43
  /// Track Properties are delta-encoded Key-Value-Pairs (same format as
6
- /// Message Parameters) but with NO count prefix they extend to the
44
+ /// Message Parameters) but with NO count prefix: they extend to the
7
45
  /// end of the message payload.
8
46
  ///
9
- /// Only present in draft-17+; older drafts don't have Track Properties.
10
- export async function skip(r, version) {
11
- // Track Properties only exist in draft-17+
12
- if (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {
13
- return;
47
+ /// Unlike an unknown message parameter, an unknown property is skipped rather than fatal,
48
+ /// which is what lets a relay forward properties it does not implement.
49
+ ///
50
+ /// Drafts before 16 have no such block, so this reads nothing and leaves the reader alone.
51
+ export async function decode(r, version) {
52
+ // Draft-16 calls the block Track Extensions, draft-17+ Track Properties. Same encoding, so
53
+ // read either rather than faulting the message for trailing bytes.
54
+ if (version === Version.DRAFT_14 || version === Version.DRAFT_15) {
55
+ return {};
14
56
  }
57
+ const properties = {};
15
58
  let prevType = 0n;
16
59
  let i = 0;
17
60
  while (!(await r.done())) {
@@ -21,7 +64,20 @@ export async function skip(r, version) {
21
64
  i++;
22
65
  if (abs % 2n === 0n) {
23
66
  // Even type: single varint value
24
- await r.u62();
67
+ const value = await r.u62();
68
+ if (abs === TIMESCALE && value > 0n) {
69
+ // A zero timescale is invalid; treat it as no declaration rather than
70
+ // failing the whole message over one property we could have ignored.
71
+ properties.timescale = Timescale(Number(value));
72
+ }
73
+ else if (abs === DEFAULT_PUBLISHER_GROUP_ORDER) {
74
+ // Only Ascending (0x1) and Descending (0x2) are defined here. Unlike the draft-14
75
+ // fields, 0x0 has no "publisher decides" meaning to fall back on.
76
+ if (value < 1n || value > 2n) {
77
+ throw new Error(`unknown group order: ${value}`);
78
+ }
79
+ properties.groupOrder = Number(value);
80
+ }
25
81
  }
26
82
  else {
27
83
  // Odd type: length-prefixed bytes
@@ -29,5 +85,6 @@ export async function skip(r, version) {
29
85
  await r.read(len);
30
86
  }
31
87
  }
88
+ return properties;
32
89
  }
33
90
  //# sourceMappingURL=properties.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../src/ietf/properties.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,gEAAgE;AAChE,GAAG;AACH,sEAAsE;AACtE,qEAAqE;AACrE,+BAA+B;AAC/B,GAAG;AACH,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,CAAS,EAAE,OAAoB;IACzD,2CAA2C;IAC3C,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;QAClG,OAAO;IACR,CAAC;IAED,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC/C,QAAQ,GAAG,GAAG,CAAC;QACf,CAAC,EAAE,CAAC;QAEJ,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;YACrB,iCAAiC;YACjC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACP,kCAAkC;YAClC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACF,CAAC;AACF,CAAC","sourcesContent":["import type { Reader } from \"../stream.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n/// Skip Track Properties from the remaining bytes of a message.\n///\n/// Track Properties are delta-encoded Key-Value-Pairs (same format as\n/// Message Parameters) but with NO count prefix they extend to the\n/// end of the message payload.\n///\n/// Only present in draft-17+; older drafts don't have Track Properties.\nexport async function skip(r: Reader, version: IetfVersion): Promise<void> {\n\t// Track Properties only exist in draft-17+\n\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\treturn;\n\t}\n\n\tlet prevType = 0n;\n\tlet i = 0;\n\n\twhile (!(await r.done())) {\n\t\tconst delta = await r.u62();\n\t\tconst abs = i === 0 ? delta : prevType + delta;\n\t\tprevType = abs;\n\t\ti++;\n\n\t\tif (abs % 2n === 0n) {\n\t\t\t// Even type: single varint value\n\t\t\tawait r.u62();\n\t\t} else {\n\t\t\t// Odd type: length-prefixed bytes\n\t\t\tconst len = await r.u53();\n\t\t\tawait r.read(len);\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../src/ietf/properties.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Reader, Writer } from \"../stream.ts\";\nimport { Timescale } from \"../time.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// TIMESCALE (0x08), from the MOQ Properties registry shared with draft-ietf-moq-loc-04.\n// Track scope: it declares the units of every object Timestamp on the track, and its\n// presence is what opts the track into timestamps at all.\nconst TIMESCALE = 0x08n;\n\n// DEFAULT_PUBLISHER_GROUP_ORDER (0x22), the publisher's delivery preference for the track.\n// It shares its number with the GROUP_ORDER *message parameter*, which is a different\n// registry: that one is only legal in SUBSCRIBE, PUBLISH_OK, and FETCH, where the\n// subscriber states its own preference.\nconst DEFAULT_PUBLISHER_GROUP_ORDER = 0x22n;\n\n/**\n * DEFAULT_PUBLISHER_GROUP_ORDER's descending value: the newest group first, which is what\n * we serve, matching moq-lite.\n */\nexport const DESCENDING = 0x02;\n\n/// The Track Properties block carried at the end of SUBSCRIBE_OK, PUBLISH, and FETCH_OK.\nexport interface Properties {\n\t/// The track's Timescale, which declares the units of every object Timestamp on it.\n\t///\n\t/// `undefined` declares no timeline, so the subscriber times objects by arrival.\n\ttimescale?: Timescale;\n\n\t/// The publisher's preference for prioritizing groups within a subscription,\n\t/// Ascending (0x1) or Descending (0x2).\n\t///\n\t/// `undefined` means the draft default, Ascending.\n\tgroupOrder?: number;\n}\n\n/// Write the block, which is the final field of the message: no count and no length, so\n/// the caller must not append anything after it.\n///\n/// Properties are serialized in ascending order by type, delta-encoded.\nexport async function encode(w: Writer, properties: Properties, version: IetfVersion): Promise<void> {\n\t// Draft-16 carries the same block under the name Track Extensions, but we only write it\n\t// from draft-17 on: a draft-16 peer running an older build rejects any trailing bytes it\n\t// doesn't parse, and draft-16 never registered TIMESCALE (0x08). We still read the block\n\t// on draft-16, so a peer that sends one is understood.\n\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\treturn;\n\t}\n\n\tlet prevType = 0n;\n\n\tif (properties.timescale !== undefined) {\n\t\tawait w.u62(TIMESCALE);\n\t\tawait w.u62(BigInt(properties.timescale));\n\t\tprevType = TIMESCALE;\n\t}\n\n\tif (properties.groupOrder !== undefined) {\n\t\tawait w.u62(DEFAULT_PUBLISHER_GROUP_ORDER - prevType);\n\t\tawait w.u62(BigInt(properties.groupOrder));\n\t}\n}\n\n/// Parse Track Properties from the remaining bytes of a message.\n///\n/// Track Properties are delta-encoded Key-Value-Pairs (same format as\n/// Message Parameters) but with NO count prefix: they extend to the\n/// end of the message payload.\n///\n/// Unlike an unknown message parameter, an unknown property is skipped rather than fatal,\n/// which is what lets a relay forward properties it does not implement.\n///\n/// Drafts before 16 have no such block, so this reads nothing and leaves the reader alone.\nexport async function decode(r: Reader, version: IetfVersion): Promise<Properties> {\n\t// Draft-16 calls the block Track Extensions, draft-17+ Track Properties. Same encoding, so\n\t// read either rather than faulting the message for trailing bytes.\n\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15) {\n\t\treturn {};\n\t}\n\n\tconst properties: Properties = {};\n\tlet prevType = 0n;\n\tlet i = 0;\n\n\twhile (!(await r.done())) {\n\t\tconst delta = await r.u62();\n\t\tconst abs = i === 0 ? delta : prevType + delta;\n\t\tprevType = abs;\n\t\ti++;\n\n\t\tif (abs % 2n === 0n) {\n\t\t\t// Even type: single varint value\n\t\t\tconst value = await r.u62();\n\t\t\tif (abs === TIMESCALE && value > 0n) {\n\t\t\t\t// A zero timescale is invalid; treat it as no declaration rather than\n\t\t\t\t// failing the whole message over one property we could have ignored.\n\t\t\t\tproperties.timescale = Timescale(Number(value));\n\t\t\t} else if (abs === DEFAULT_PUBLISHER_GROUP_ORDER) {\n\t\t\t\t// Only Ascending (0x1) and Descending (0x2) are defined here. Unlike the draft-14\n\t\t\t\t// fields, 0x0 has no \"publisher decides\" meaning to fall back on.\n\t\t\t\tif (value < 1n || value > 2n) {\n\t\t\t\t\tthrow new Error(`unknown group order: ${value}`);\n\t\t\t\t}\n\t\t\t\tproperties.groupOrder = Number(value);\n\t\t\t}\n\t\t} else {\n\t\t\t// Odd type: length-prefixed bytes\n\t\t\tconst len = await r.u53();\n\t\t\tawait r.read(len);\n\t\t}\n\t}\n\n\treturn properties;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/ietf/publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/ietf/publish.ts"],"names":[],"mappings":"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"}
package/ietf/publish.js CHANGED
@@ -52,12 +52,20 @@ export class Publish {
52
52
  throw new Error("contentExists and largest must both be true or false");
53
53
  }
54
54
  const params = new Parameters();
55
- params.groupOrder = this.groupOrder;
55
+ // GROUP_ORDER is a legal PUBLISH parameter only through draft-15; a later peer closes
56
+ // the session with PROTOCOL_VIOLATION when it sees one. The publisher's preference is
57
+ // a DEFAULT_PUBLISHER_GROUP_ORDER track property instead, which we write from
58
+ // draft-17 on. Draft-16 gets neither form; see Properties.encode.
59
+ if (version === Version.DRAFT_15) {
60
+ params.groupOrder = this.groupOrder;
61
+ }
56
62
  params.forward = this.forward;
57
63
  if (this.largest) {
58
64
  params.largest = this.largest;
59
65
  }
60
66
  await params.encode(w, version);
67
+ // Track Properties are the final field, so nothing may follow.
68
+ await Properties.encode(w, { groupOrder: this.groupOrder }, version);
61
69
  }
62
70
  }
63
71
  async encode(w, version) {
@@ -93,8 +101,10 @@ export class Publish {
93
101
  }
94
102
  // v15+: parameters followed by Track Properties (draft-17+)
95
103
  const params = await Parameters.decode(r, version);
96
- await Properties.skip(r, version);
97
- const groupOrder = params.groupOrder ?? 0x02;
104
+ const properties = await Properties.decode(r, version);
105
+ // GROUP_ORDER is only legal here through draft-15, but keep accepting it so a peer that
106
+ // still sends it doesn't have its session torn down over a hint.
107
+ const groupOrder = properties.groupOrder ?? params.groupOrder ?? 0x02;
98
108
  const forward = params.forward ?? true;
99
109
  const largest = params.largest;
100
110
  return new Publish({
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/ietf/publish.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAoB,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,uCAAuC;AAEvC,MAAM,OAAO,OAAO;IACnB,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAEjB,SAAS,CAAS;IAClB,cAAc,CAAa;IAC3B,SAAS,CAAS;IAClB,UAAU,CAAS;IACnB,UAAU,CAAS;IACnB,aAAa,CAAU;IACvB,OAAO,CAAoD;IAC3D,OAAO,CAAU;IAEjB,YAAY,EACX,SAAS,EACT,cAAc,EACd,SAAS,EACT,UAAU,EACV,UAAU,EACV,aAAa,EACb,OAAO,EACP,OAAO,GAUP;QACA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QAC5C,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,+CAA+C;QACjE,CAAC;QACD,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7B,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5B,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YACD,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB;QACtC,CAAC;aAAM,CAAC;YACP,6BAA6B;YAC7B,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACpC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC9B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC/B,CAAC;YACD,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC;IACF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,OAAoB;QAC3C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,OAAoB;QAClD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QACnD,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,2CAA2C;QAC3D,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAEjC,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAChG,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAoB;YACzD,OAAO,IAAI,OAAO,CAAC;gBAClB,SAAS;gBACT,cAAc;gBACd,SAAS;gBACT,UAAU;gBACV,UAAU;gBACV,aAAa;gBACb,OAAO;gBACP,OAAO;aACP,CAAC,CAAC;QACJ,CAAC;QACD,4DAA4D;QAC5D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,OAAO,IAAI,OAAO,CAAC;YAClB,SAAS;YACT,cAAc;YACd,SAAS;YACT,UAAU;YACV,UAAU;YACV,aAAa,EAAE,CAAC,CAAC,OAAO;YACxB,OAAO;YACP,OAAO;SACP,CAAC,CAAC;IACJ,CAAC;CACD;AAED,MAAM,OAAO,SAAS;IACrB,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAEjB,KAAK,CAAC,OAAO,CAAC,EAAU;QACvB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,QAAqB;QAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,QAAqB;QACnD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAU;QAC9B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC1D,CAAC;CACD;AAED,MAAM,OAAO,YAAY;IACxB,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAEjB,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,YAAY,CAAS;IAErB,YAAY,EACX,SAAS,EACT,SAAS,EACT,YAAY,GACoD;QAChE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS;QACtB,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,QAAqB;QAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,QAAqB;QACnD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,IAAI,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;IACjE,CAAC;CACD;AAED,2EAA2E;AAC3E,MAAM,OAAO,WAAW;IACvB,MAAM,CAAU,EAAE,GAAG,IAAI,CAAC;IAE1B,SAAS,CAAqB;IAC9B,UAAU,CAAS;IACnB,YAAY,CAAS;IAErB,YAAY,EACX,SAAS,EACT,UAAU,EACV,YAAY,GACsD;QAClE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QAC5C,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClG,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACvF,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iCAAiC;QACzD,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,OAAoB;QAC3C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,OAAoB;QAClD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QACnD,MAAM,SAAS,GACd,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ;YAC3F,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE;YACf,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,sBAAsB;QACrC,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QAEtC,OAAO,IAAI,WAAW,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IACjE,CAAC;CACD","sourcesContent":["import type * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Parameters } from \"./parameters.ts\";\nimport * as Properties from \"./properties.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// PUBLISH messages are new in draft-14\n\nexport class Publish {\n\tstatic id = 0x1d;\n\n\trequestId: bigint;\n\ttrackNamespace: Path.Valid;\n\ttrackName: string;\n\ttrackAlias: bigint;\n\tgroupOrder: number;\n\tcontentExists: boolean;\n\tlargest: { groupId: bigint; objectId: bigint } | undefined;\n\tforward: boolean;\n\n\tconstructor({\n\t\trequestId,\n\t\ttrackNamespace,\n\t\ttrackName,\n\t\ttrackAlias,\n\t\tgroupOrder,\n\t\tcontentExists,\n\t\tlargest,\n\t\tforward,\n\t}: {\n\t\trequestId: bigint;\n\t\ttrackNamespace: Path.Valid;\n\t\ttrackName: string;\n\t\ttrackAlias: bigint;\n\t\tgroupOrder: number;\n\t\tcontentExists: boolean;\n\t\tlargest: { groupId: bigint; objectId: bigint } | undefined;\n\t\tforward: boolean;\n\t}) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.trackName = trackName;\n\t\tthis.trackAlias = trackAlias;\n\t\tthis.groupOrder = groupOrder;\n\t\tthis.contentExists = contentExists;\n\t\tthis.largest = largest;\n\t\tthis.forward = forward;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait w.u62(0n); // required_request_id_delta = 0 (Draft17 only)\n\t\t}\n\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\tawait w.string(this.trackName);\n\t\tawait w.u62(this.trackAlias);\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tawait w.u8(this.groupOrder);\n\t\t\tawait w.bool(this.contentExists);\n\t\t\tif (this.contentExists !== !!this.largest) {\n\t\t\t\tthrow new Error(\"contentExists and largest must both be true or false\");\n\t\t\t}\n\t\t\tif (this.largest) {\n\t\t\t\tawait w.u62(this.largest.groupId);\n\t\t\t\tawait w.u62(this.largest.objectId);\n\t\t\t}\n\t\t\tawait w.bool(this.forward);\n\t\t\tawait w.u53(0); // size of parameters\n\t\t} else {\n\t\t\t// v15+: fields in parameters\n\t\t\tif (this.contentExists !== !!this.largest) {\n\t\t\t\tthrow new Error(\"contentExists and largest must both be true or false\");\n\t\t\t}\n\t\t\tconst params = new Parameters();\n\t\t\tparams.groupOrder = this.groupOrder;\n\t\t\tparams.forward = this.forward;\n\t\t\tif (this.largest) {\n\t\t\t\tparams.largest = this.largest;\n\t\t\t}\n\t\t\tawait params.encode(w, version);\n\t\t}\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (mw) => this.#encode(mw, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<Publish> {\n\t\treturn Message.decode(r, (mr) => Publish.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<Publish> {\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta (Draft17 only)\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\tconst trackName = await r.string();\n\t\tconst trackAlias = await r.u62();\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tconst groupOrder = await r.u8();\n\t\t\tconst contentExists = await r.bool();\n\t\t\tconst largest = contentExists ? { groupId: await r.u62(), objectId: await r.u62() } : undefined;\n\t\t\tconst forward = await r.bool();\n\t\t\tawait Parameters.decode(r, version); // ignore parameters\n\t\t\treturn new Publish({\n\t\t\t\trequestId,\n\t\t\t\ttrackNamespace,\n\t\t\t\ttrackName,\n\t\t\t\ttrackAlias,\n\t\t\t\tgroupOrder,\n\t\t\t\tcontentExists,\n\t\t\t\tlargest,\n\t\t\t\tforward,\n\t\t\t});\n\t\t}\n\t\t// v15+: parameters followed by Track Properties (draft-17+)\n\t\tconst params = await Parameters.decode(r, version);\n\t\tawait Properties.skip(r, version);\n\t\tconst groupOrder = params.groupOrder ?? 0x02;\n\t\tconst forward = params.forward ?? true;\n\t\tconst largest = params.largest;\n\t\treturn new Publish({\n\t\t\trequestId,\n\t\t\ttrackNamespace,\n\t\t\ttrackName,\n\t\t\ttrackAlias,\n\t\t\tgroupOrder,\n\t\t\tcontentExists: !!largest,\n\t\t\tlargest,\n\t\t\tforward,\n\t\t});\n\t}\n}\n\nexport class PublishOk {\n\tstatic id = 0x1e;\n\n\tasync #encode(_w: Writer): Promise<void> {\n\t\tthrow new Error(\"PUBLISH_OK messages are not supported\");\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishOk> {\n\t\treturn Message.decode(r, PublishOk.#decode);\n\t}\n\n\tstatic async #decode(_r: Reader): Promise<PublishOk> {\n\t\tthrow new Error(\"PUBLISH_OK messages are not supported\");\n\t}\n}\n\nexport class PublishError {\n\tstatic id = 0x1f;\n\n\trequestId: bigint;\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\terrorCode,\n\t\treasonPhrase,\n\t}: { requestId: bigint; errorCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishError> {\n\t\treturn Message.decode(r, PublishError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\n// In draft-14, this message is renamed from SUBSCRIBE_DONE to PUBLISH_DONE\nexport class PublishDone {\n\tstatic readonly id = 0x0b;\n\n\trequestId: bigint | undefined;\n\tstatusCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\tstatusCode,\n\t\treasonPhrase,\n\t}: { requestId?: bigint; statusCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.statusCode = statusCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\tif (this.requestId === undefined) throw new Error(\"requestId required for draft14-16\");\n\t\t\tawait w.u62(this.requestId);\n\t\t}\n\t\tawait w.u62(BigInt(this.statusCode));\n\t\tawait w.u62(BigInt(0)); // stream_count = 0 (unsupported)\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (mw) => this.#encode(mw, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishDone> {\n\t\treturn Message.decode(r, (mr) => PublishDone.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishDone> {\n\t\tconst requestId =\n\t\t\tversion === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16\n\t\t\t\t? await r.u62()\n\t\t\t\t: undefined;\n\t\tconst statusCode = Number(await r.u62());\n\t\tawait r.u62(); // ignore stream_count\n\t\tconst reasonPhrase = await r.string();\n\n\t\treturn new PublishDone({ requestId, statusCode, reasonPhrase });\n\t}\n}\n"]}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/ietf/publish.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Parameters } from \"./parameters.ts\";\nimport * as Properties from \"./properties.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// PUBLISH messages are new in draft-14\n\nexport class Publish {\n\tstatic id = 0x1d;\n\n\trequestId: bigint;\n\ttrackNamespace: Path.Valid;\n\ttrackName: string;\n\ttrackAlias: bigint;\n\tgroupOrder: number;\n\tcontentExists: boolean;\n\tlargest: { groupId: bigint; objectId: bigint } | undefined;\n\tforward: boolean;\n\n\tconstructor({\n\t\trequestId,\n\t\ttrackNamespace,\n\t\ttrackName,\n\t\ttrackAlias,\n\t\tgroupOrder,\n\t\tcontentExists,\n\t\tlargest,\n\t\tforward,\n\t}: {\n\t\trequestId: bigint;\n\t\ttrackNamespace: Path.Valid;\n\t\ttrackName: string;\n\t\ttrackAlias: bigint;\n\t\tgroupOrder: number;\n\t\tcontentExists: boolean;\n\t\tlargest: { groupId: bigint; objectId: bigint } | undefined;\n\t\tforward: boolean;\n\t}) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.trackName = trackName;\n\t\tthis.trackAlias = trackAlias;\n\t\tthis.groupOrder = groupOrder;\n\t\tthis.contentExists = contentExists;\n\t\tthis.largest = largest;\n\t\tthis.forward = forward;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait w.u62(0n); // required_request_id_delta = 0 (Draft17 only)\n\t\t}\n\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\tawait w.string(this.trackName);\n\t\tawait w.u62(this.trackAlias);\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tawait w.u8(this.groupOrder);\n\t\t\tawait w.bool(this.contentExists);\n\t\t\tif (this.contentExists !== !!this.largest) {\n\t\t\t\tthrow new Error(\"contentExists and largest must both be true or false\");\n\t\t\t}\n\t\t\tif (this.largest) {\n\t\t\t\tawait w.u62(this.largest.groupId);\n\t\t\t\tawait w.u62(this.largest.objectId);\n\t\t\t}\n\t\t\tawait w.bool(this.forward);\n\t\t\tawait w.u53(0); // size of parameters\n\t\t} else {\n\t\t\t// v15+: fields in parameters\n\t\t\tif (this.contentExists !== !!this.largest) {\n\t\t\t\tthrow new Error(\"contentExists and largest must both be true or false\");\n\t\t\t}\n\t\t\tconst params = new Parameters();\n\t\t\t// GROUP_ORDER is a legal PUBLISH parameter only through draft-15; a later peer closes\n\t\t\t// the session with PROTOCOL_VIOLATION when it sees one. The publisher's preference is\n\t\t\t// a DEFAULT_PUBLISHER_GROUP_ORDER track property instead, which we write from\n\t\t\t// draft-17 on. Draft-16 gets neither form; see Properties.encode.\n\t\t\tif (version === Version.DRAFT_15) {\n\t\t\t\tparams.groupOrder = this.groupOrder;\n\t\t\t}\n\t\t\tparams.forward = this.forward;\n\t\t\tif (this.largest) {\n\t\t\t\tparams.largest = this.largest;\n\t\t\t}\n\t\t\tawait params.encode(w, version);\n\n\t\t\t// Track Properties are the final field, so nothing may follow.\n\t\t\tawait Properties.encode(w, { groupOrder: this.groupOrder }, version);\n\t\t}\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (mw) => this.#encode(mw, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<Publish> {\n\t\treturn Message.decode(r, (mr) => Publish.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<Publish> {\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta (Draft17 only)\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\tconst trackName = await r.string();\n\t\tconst trackAlias = await r.u62();\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tconst groupOrder = await r.u8();\n\t\t\tconst contentExists = await r.bool();\n\t\t\tconst largest = contentExists ? { groupId: await r.u62(), objectId: await r.u62() } : undefined;\n\t\t\tconst forward = await r.bool();\n\t\t\tawait Parameters.decode(r, version); // ignore parameters\n\t\t\treturn new Publish({\n\t\t\t\trequestId,\n\t\t\t\ttrackNamespace,\n\t\t\t\ttrackName,\n\t\t\t\ttrackAlias,\n\t\t\t\tgroupOrder,\n\t\t\t\tcontentExists,\n\t\t\t\tlargest,\n\t\t\t\tforward,\n\t\t\t});\n\t\t}\n\t\t// v15+: parameters followed by Track Properties (draft-17+)\n\t\tconst params = await Parameters.decode(r, version);\n\t\tconst properties = await Properties.decode(r, version);\n\t\t// GROUP_ORDER is only legal here through draft-15, but keep accepting it so a peer that\n\t\t// still sends it doesn't have its session torn down over a hint.\n\t\tconst groupOrder = properties.groupOrder ?? params.groupOrder ?? 0x02;\n\t\tconst forward = params.forward ?? true;\n\t\tconst largest = params.largest;\n\t\treturn new Publish({\n\t\t\trequestId,\n\t\t\ttrackNamespace,\n\t\t\ttrackName,\n\t\t\ttrackAlias,\n\t\t\tgroupOrder,\n\t\t\tcontentExists: !!largest,\n\t\t\tlargest,\n\t\t\tforward,\n\t\t});\n\t}\n}\n\nexport class PublishOk {\n\tstatic id = 0x1e;\n\n\tasync #encode(_w: Writer): Promise<void> {\n\t\tthrow new Error(\"PUBLISH_OK messages are not supported\");\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishOk> {\n\t\treturn Message.decode(r, PublishOk.#decode);\n\t}\n\n\tstatic async #decode(_r: Reader): Promise<PublishOk> {\n\t\tthrow new Error(\"PUBLISH_OK messages are not supported\");\n\t}\n}\n\nexport class PublishError {\n\tstatic id = 0x1f;\n\n\trequestId: bigint;\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\terrorCode,\n\t\treasonPhrase,\n\t}: { requestId: bigint; errorCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishError> {\n\t\treturn Message.decode(r, PublishError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\n// In draft-14, this message is renamed from SUBSCRIBE_DONE to PUBLISH_DONE\nexport class PublishDone {\n\tstatic readonly id = 0x0b;\n\n\trequestId: bigint | undefined;\n\tstatusCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\tstatusCode,\n\t\treasonPhrase,\n\t}: { requestId?: bigint; statusCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.statusCode = statusCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\tif (this.requestId === undefined) throw new Error(\"requestId required for draft14-16\");\n\t\t\tawait w.u62(this.requestId);\n\t\t}\n\t\tawait w.u62(BigInt(this.statusCode));\n\t\tawait w.u62(BigInt(0)); // stream_count = 0 (unsupported)\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (mw) => this.#encode(mw, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishDone> {\n\t\treturn Message.decode(r, (mr) => PublishDone.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishDone> {\n\t\tconst requestId =\n\t\t\tversion === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16\n\t\t\t\t? await r.u62()\n\t\t\t\t: undefined;\n\t\tconst statusCode = Number(await r.u62());\n\t\tawait r.u62(); // ignore stream_count\n\t\tconst reasonPhrase = await r.string();\n\n\t\treturn new PublishDone({ requestId, statusCode, reasonPhrase });\n\t}\n}\n"]}
@@ -1,17 +1,31 @@
1
1
  import type * as Path from "../path";
2
2
  import type { Reader, Writer } from "../stream";
3
+ import * as Cluster from "./cluster";
3
4
  import { type IetfVersion } from "./version";
4
5
  export declare class PublishNamespace {
5
6
  #private;
6
7
  static id: number;
7
8
  requestId: bigint;
8
9
  trackNamespace: Path.Valid;
9
- constructor({ requestId, trackNamespace }: {
10
+ /** The MoQ Cluster parameters (see {@link Cluster}). Set on a session that negotiated
11
+ * the extension and `undefined` on one that did not, which is what decides whether they
12
+ * appear on the wire at all. */
13
+ cluster?: Cluster.Advert;
14
+ constructor({ requestId, trackNamespace, cluster, }: {
10
15
  requestId: bigint;
11
16
  trackNamespace: Path.Valid;
17
+ cluster?: Cluster.Advert;
12
18
  });
13
19
  encode(w: Writer, version: IetfVersion): Promise<void>;
14
- static decode(r: Reader, version: IetfVersion): Promise<PublishNamespace>;
20
+ /**
21
+ * Decode the message, expecting the cluster parameters when the session negotiated the
22
+ * extension.
23
+ *
24
+ * The negotiation is session state rather than anything in the message, so the caller
25
+ * supplies it. A negotiated session that omits HOP_PATH is a protocol violation, which
26
+ * surfaces here as a throw.
27
+ */
28
+ static decode(r: Reader, version: IetfVersion, negotiated?: boolean): Promise<PublishNamespace>;
15
29
  }
16
30
  export declare class PublishNamespaceOk {
17
31
  #private;
@@ -1 +1 @@
1
- {"version":3,"file":"publish_namespace.d.ts","sourceRoot":"","sources":["../../src/ietf/publish_namespace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish_namespace.d.ts","sourceRoot":"","sources":["../../src/ietf/publish_namespace.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  /* @ts-self-types="./publish_namespace.d.ts" */
2
+ import * as Cluster from "./cluster.js";
2
3
  import * as Message from "./message.js";
3
4
  import * as Namespace from "./namespace.js";
4
5
  import { Parameters } from "./parameters.js";
@@ -8,9 +9,14 @@ export class PublishNamespace {
8
9
  static id = 0x06;
9
10
  requestId;
10
11
  trackNamespace;
11
- constructor({ requestId, trackNamespace }) {
12
+ /** The MoQ Cluster parameters (see {@link Cluster}). Set on a session that negotiated
13
+ * the extension and `undefined` on one that did not, which is what decides whether they
14
+ * appear on the wire at all. */
15
+ cluster;
16
+ constructor({ requestId, trackNamespace, cluster, }) {
12
17
  this.requestId = requestId;
13
18
  this.trackNamespace = trackNamespace;
19
+ this.cluster = cluster;
14
20
  }
15
21
  async #encode(w, version) {
16
22
  await w.u62(this.requestId);
@@ -18,20 +24,33 @@ export class PublishNamespace {
18
24
  await w.u62(0n); // required_request_id_delta: only 0 supported until stream-per-request
19
25
  }
20
26
  await Namespace.encode(w, this.trackNamespace);
21
- await new Parameters().encode(w, version);
27
+ const params = this.cluster ? Cluster.intoParams(this.cluster) : new Parameters();
28
+ await params.encode(w, version);
22
29
  }
23
30
  async encode(w, version) {
24
31
  return Message.encode(w, (wr) => this.#encode(wr, version));
25
32
  }
26
- static async decode(r, version) {
27
- return Message.decode(r, (rd) => PublishNamespace.#decode(rd, version));
28
- }
29
- static async #decode(r, version) {
33
+ /**
34
+ * Decode the message, expecting the cluster parameters when the session negotiated the
35
+ * extension.
36
+ *
37
+ * The negotiation is session state rather than anything in the message, so the caller
38
+ * supplies it. A negotiated session that omits HOP_PATH is a protocol violation, which
39
+ * surfaces here as a throw.
40
+ */
41
+ static async decode(r, version, negotiated = false) {
42
+ return Message.decode(r, (rd) => PublishNamespace.#decode(rd, version, negotiated));
43
+ }
44
+ static async #decode(r, version, negotiated) {
30
45
  const requestId = await r.u62();
31
46
  if (version === Version.DRAFT_17) {
32
47
  await r.u62(); // required_request_id_delta
33
48
  }
34
49
  const trackNamespace = await Namespace.decode(r);
50
+ if (negotiated) {
51
+ const cluster = await Cluster.decodeParams(r, version);
52
+ return new PublishNamespace({ requestId, trackNamespace, cluster });
53
+ }
35
54
  await Parameters.decode(r, version); // ignore parameters
36
55
  return new PublishNamespace({ requestId, trackNamespace });
37
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"publish_namespace.js","sourceRoot":"","sources":["../../src/ietf/publish_namespace.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Parameters } from \"./parameters.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// In draft-14, ANNOUNCE is renamed to PUBLISH_NAMESPACE\nexport class PublishNamespace {\n\tstatic id = 0x06;\n\n\trequestId: bigint;\n\ttrackNamespace: Path.Valid;\n\n\tconstructor({ requestId, trackNamespace }: { requestId: bigint; trackNamespace: Path.Valid }) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackNamespace = trackNamespace;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait w.u62(0n); // required_request_id_delta: only 0 supported until stream-per-request\n\t\t}\n\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\tawait new Parameters().encode(w, version);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishNamespace> {\n\t\treturn Message.decode(r, (rd) => PublishNamespace.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishNamespace> {\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\tawait Parameters.decode(r, version); // ignore parameters\n\t\treturn new PublishNamespace({ requestId, trackNamespace });\n\t}\n}\n\nexport class PublishNamespaceOk {\n\tstatic id = 0x07;\n\n\trequestId: bigint;\n\n\tconstructor({ requestId }: { requestId: bigint }) {\n\t\tthis.requestId = requestId;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishNamespaceOk> {\n\t\treturn Message.decode(r, PublishNamespaceOk.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishNamespaceOk> {\n\t\tconst requestId = await r.u62();\n\t\treturn new PublishNamespaceOk({ requestId });\n\t}\n}\n\nexport class PublishNamespaceError {\n\tstatic id = 0x08;\n\n\trequestId: bigint;\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\terrorCode,\n\t\treasonPhrase,\n\t}: { requestId: bigint; errorCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishNamespaceError> {\n\t\treturn Message.decode(r, PublishNamespaceError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishNamespaceError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishNamespaceError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\n// Removed in d17\nexport class PublishNamespaceCancel {\n\tstatic id = 0x0c;\n\n\ttrackNamespace: Path.Valid;\n\trequestId: bigint; // v16: uses request_id instead of track_namespace\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\ttrackNamespace = \"\" as Path.Valid,\n\t\terrorCode = 0,\n\t\treasonPhrase = \"\",\n\t\trequestId = 0n,\n\t}: {\n\t\ttrackNamespace?: Path.Valid;\n\t\terrorCode?: number;\n\t\treasonPhrase?: string;\n\t\trequestId?: bigint;\n\t} = {}) {\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceCancel removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tawait w.u62(this.requestId);\n\t\t} else {\n\t\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\t}\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceCancel> {\n\t\treturn Message.decode(r, (rd) => PublishNamespaceCancel.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceCancel> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceCancel removed in draft-17+\");\n\t\t}\n\t\tlet trackNamespace = \"\" as Path.Valid;\n\t\tlet requestId = 0n;\n\t\tif (version === Version.DRAFT_16) {\n\t\t\trequestId = await r.u62();\n\t\t} else {\n\t\t\ttrackNamespace = await Namespace.decode(r);\n\t\t}\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishNamespaceCancel({ trackNamespace, errorCode, reasonPhrase, requestId });\n\t}\n}\n\n// In draft-14, UNANNOUNCE is renamed to PUBLISH_NAMESPACE_DONE\n// In draft-16, uses request_id instead of track_namespace\n// Removed in d17\nexport class PublishNamespaceDone {\n\tstatic readonly id = 0x09;\n\n\ttrackNamespace: Path.Valid;\n\trequestId: bigint; // v16: uses request_id instead of track_namespace\n\n\tconstructor({\n\t\ttrackNamespace = \"\" as Path.Valid,\n\t\trequestId = 0n,\n\t}: {\n\t\ttrackNamespace?: Path.Valid;\n\t\trequestId?: bigint;\n\t} = {}) {\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.requestId = requestId;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceDone removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tawait w.u62(this.requestId);\n\t\t} else {\n\t\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\t}\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceDone> {\n\t\treturn Message.decode(r, (rd) => PublishNamespaceDone.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceDone> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceDone removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tconst requestId = await r.u62();\n\t\t\treturn new PublishNamespaceDone({ requestId });\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\treturn new PublishNamespaceDone({ trackNamespace });\n\t}\n}\n"]}
1
+ {"version":3,"file":"publish_namespace.js","sourceRoot":"","sources":["../../src/ietf/publish_namespace.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Cluster from \"./cluster.ts\";\nimport * as Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Parameters } from \"./parameters.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// In draft-14, ANNOUNCE is renamed to PUBLISH_NAMESPACE\nexport class PublishNamespace {\n\tstatic id = 0x06;\n\n\trequestId: bigint;\n\ttrackNamespace: Path.Valid;\n\n\t/** The MoQ Cluster parameters (see {@link Cluster}). Set on a session that negotiated\n\t * the extension and `undefined` on one that did not, which is what decides whether they\n\t * appear on the wire at all. */\n\tcluster?: Cluster.Advert;\n\n\tconstructor({\n\t\trequestId,\n\t\ttrackNamespace,\n\t\tcluster,\n\t}: { requestId: bigint; trackNamespace: Path.Valid; cluster?: Cluster.Advert }) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.cluster = cluster;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait w.u62(0n); // required_request_id_delta: only 0 supported until stream-per-request\n\t\t}\n\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\tconst params = this.cluster ? Cluster.intoParams(this.cluster) : new Parameters();\n\t\tawait params.encode(w, version);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\t/**\n\t * Decode the message, expecting the cluster parameters when the session negotiated the\n\t * extension.\n\t *\n\t * The negotiation is session state rather than anything in the message, so the caller\n\t * supplies it. A negotiated session that omits HOP_PATH is a protocol violation, which\n\t * surfaces here as a throw.\n\t */\n\tstatic async decode(r: Reader, version: IetfVersion, negotiated = false): Promise<PublishNamespace> {\n\t\treturn Message.decode(r, (rd) => PublishNamespace.#decode(rd, version, negotiated));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion, negotiated: boolean): Promise<PublishNamespace> {\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\tif (negotiated) {\n\t\t\tconst cluster = await Cluster.decodeParams(r, version);\n\t\t\treturn new PublishNamespace({ requestId, trackNamespace, cluster });\n\t\t}\n\n\t\tawait Parameters.decode(r, version); // ignore parameters\n\t\treturn new PublishNamespace({ requestId, trackNamespace });\n\t}\n}\n\nexport class PublishNamespaceOk {\n\tstatic id = 0x07;\n\n\trequestId: bigint;\n\n\tconstructor({ requestId }: { requestId: bigint }) {\n\t\tthis.requestId = requestId;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishNamespaceOk> {\n\t\treturn Message.decode(r, PublishNamespaceOk.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishNamespaceOk> {\n\t\tconst requestId = await r.u62();\n\t\treturn new PublishNamespaceOk({ requestId });\n\t}\n}\n\nexport class PublishNamespaceError {\n\tstatic id = 0x08;\n\n\trequestId: bigint;\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\terrorCode,\n\t\treasonPhrase,\n\t}: { requestId: bigint; errorCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishNamespaceError> {\n\t\treturn Message.decode(r, PublishNamespaceError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishNamespaceError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishNamespaceError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\n// Removed in d17\nexport class PublishNamespaceCancel {\n\tstatic id = 0x0c;\n\n\ttrackNamespace: Path.Valid;\n\trequestId: bigint; // v16: uses request_id instead of track_namespace\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\ttrackNamespace = \"\" as Path.Valid,\n\t\terrorCode = 0,\n\t\treasonPhrase = \"\",\n\t\trequestId = 0n,\n\t}: {\n\t\ttrackNamespace?: Path.Valid;\n\t\terrorCode?: number;\n\t\treasonPhrase?: string;\n\t\trequestId?: bigint;\n\t} = {}) {\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceCancel removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tawait w.u62(this.requestId);\n\t\t} else {\n\t\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\t}\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceCancel> {\n\t\treturn Message.decode(r, (rd) => PublishNamespaceCancel.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceCancel> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceCancel removed in draft-17+\");\n\t\t}\n\t\tlet trackNamespace = \"\" as Path.Valid;\n\t\tlet requestId = 0n;\n\t\tif (version === Version.DRAFT_16) {\n\t\t\trequestId = await r.u62();\n\t\t} else {\n\t\t\ttrackNamespace = await Namespace.decode(r);\n\t\t}\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishNamespaceCancel({ trackNamespace, errorCode, reasonPhrase, requestId });\n\t}\n}\n\n// In draft-14, UNANNOUNCE is renamed to PUBLISH_NAMESPACE_DONE\n// In draft-16, uses request_id instead of track_namespace\n// Removed in d17\nexport class PublishNamespaceDone {\n\tstatic readonly id = 0x09;\n\n\ttrackNamespace: Path.Valid;\n\trequestId: bigint; // v16: uses request_id instead of track_namespace\n\n\tconstructor({\n\t\ttrackNamespace = \"\" as Path.Valid,\n\t\trequestId = 0n,\n\t}: {\n\t\ttrackNamespace?: Path.Valid;\n\t\trequestId?: bigint;\n\t} = {}) {\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.requestId = requestId;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceDone removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tawait w.u62(this.requestId);\n\t\t} else {\n\t\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\t}\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceDone> {\n\t\treturn Message.decode(r, (rd) => PublishNamespaceDone.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceDone> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceDone removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tconst requestId = await r.u62();\n\t\t\treturn new PublishNamespaceDone({ requestId });\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\treturn new PublishNamespaceDone({ trackNamespace });\n\t}\n}\n"]}
@@ -1,7 +1,8 @@
1
- import type { Broadcast } from "../broadcast";
1
+ import type * as broadcast from "../broadcast";
2
2
  import * as Path from "../path";
3
3
  import { type Stream } from "../stream";
4
4
  import type { Session } from "./adapter";
5
+ import * as Cluster from "./cluster";
5
6
  import { type Subscribe } from "./subscribe";
6
7
  import { type SubscribeNamespace } from "./subscribe_namespace";
7
8
  import { type TrackStatusRequest } from "./track";
@@ -15,17 +16,25 @@ export declare class Publisher {
15
16
  #private;
16
17
  /**
17
18
  * Creates a new Publisher instance.
18
- * @param quic - The WebTransport session (for uni streams)
19
- * @param session - The session abstraction for bidi streams and request IDs
20
19
  *
21
20
  * @internal
22
21
  */
23
- constructor(quic: WebTransport, session: Session);
22
+ constructor({ quic, session, requiresSolicitation, cluster, }: {
23
+ /** The WebTransport session, for uni streams. */
24
+ quic: WebTransport;
25
+ /** The session abstraction for bidi streams and request IDs. */
26
+ session: Session;
27
+ /** Whether the peer's SETUP asked to be told on request (MoQ Solicit). */
28
+ requiresSolicitation: boolean;
29
+ /** The Hop IDs the SETUP exchange settled (MoQ Cluster). */
30
+ cluster?: Cluster.Hops;
31
+ });
24
32
  /**
25
33
  * Publishes a broadcast with any associated tracks.
26
- * Opens a bidi stream to send PublishNamespace and waits for response.
34
+ * The namespace is advertised with an unsolicited PUBLISH_NAMESPACE, or on request
35
+ * if the peer asked for that (see {@link runPublishNamespaces}).
27
36
  */
28
- publish(path: Path.Valid, broadcast: Broadcast): void;
37
+ publish(path: Path.Valid, broadcast: broadcast.Producer): void;
29
38
  /**
30
39
  * Handles an incoming SUBSCRIBE request on a bidi stream.
31
40
  * Owns the full lifecycle: sends response, serves track data, waits for close.
@@ -35,16 +44,40 @@ export declare class Publisher {
35
44
  runSubscribe(msg: Subscribe, stream: Stream): Promise<void>;
36
45
  /**
37
46
  * Handles an incoming SUBSCRIBE_NAMESPACE on a bidi stream.
38
- * Sends RequestOk, then streams Namespace/NamespaceDone entries.
47
+ *
48
+ * This carries the advertisements only when the peer asked to be told on request
49
+ * (MoQ Solicit); otherwise {@link runPublishNamespaces} has already announced
50
+ * everything and repeating it here would leave the peer holding two sources for one
51
+ * broadcast. Draft-16+ streams Namespace entries inline; draft-14/15 predate those
52
+ * messages, so each advertisement is a PUBLISH_NAMESPACE request of its own.
39
53
  *
40
54
  * @internal
41
55
  */
42
56
  runSubscribeNamespace(msg: SubscribeNamespace, stream: Stream): Promise<void>;
57
+ /**
58
+ * Advertise every published broadcast with an unsolicited PUBLISH_NAMESPACE, until
59
+ * the publisher is closed.
60
+ *
61
+ * The peers that never send SUBSCRIBE_NAMESPACE are exactly the ones expecting a
62
+ * publisher to announce itself, so announcing is the default. A peer that would
63
+ * rather ask says so in its SETUP (MoQ Solicit) and this does nothing, leaving
64
+ * {@link runSubscribeNamespace} to carry the advertisements instead. Exactly one of
65
+ * the two is live, so the peer never hears a namespace twice.
66
+ *
67
+ * @internal
68
+ */
69
+ runPublishNamespaces(): Promise<void>;
43
70
  /**
44
71
  * Handles an incoming TRACK_STATUS_REQUEST on a bidi stream.
45
72
  *
46
73
  * @internal
47
74
  */
48
75
  runTrackStatusRequest(msg: TrackStatusRequest, stream: Stream): Promise<void>;
76
+ /**
77
+ * Closes every published broadcast and stops accepting new ones.
78
+ *
79
+ * @internal
80
+ */
81
+ close(): void;
49
82
  }
50
83
  //# sourceMappingURL=publisher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../src/ietf/publisher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,IAAI,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,MAAM,EAAU,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAK5C,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EACN,KAAK,kBAAkB,EAIvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGlE;;;;;GAKG;AACH,qBAAa,SAAS;;IAUrB;;;;;;OAMG;IACH,YAAY,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAG/C;IAED;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,QAI7C;IA6DD;;;;;OAKG;IACG,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,iBA+EhD;IA2CD;;;;;OAKG;IACG,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,iBA2DlE;IAED;;;;OAIG;IACG,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,iBAuBlE;CAaD"}
1
+ {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../src/ietf/publisher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAGlD,OAAO,KAAK,IAAI,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,MAAM,EAAU,MAAM,cAAc,CAAC;AAInD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AASxC,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EACN,KAAK,kBAAkB,EAIvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAiGlE;;;;;GAKG;AACH,qBAAa,SAAS;;IAcrB;;;;OAIG;IACH,YAAY,EACX,IAAI,EACJ,OAAO,EACP,oBAAoB,EACpB,OAAO,GACP,EAAE;QACF,iDAAiD;QACjD,IAAI,EAAE,YAAY,CAAC;QACnB,gEAAgE;QAChE,OAAO,EAAE,OAAO,CAAC;QACjB,0EAA0E;QAC1E,oBAAoB,EAAE,OAAO,CAAC;QAC9B,4DAA4D;QAC5D,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC;KACvB,EAKA;IAED;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,QAAQ,QActD;IAED;;;;;OAKG;IACG,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,iBA8LhD;IA2LD;;;;;;;;;;OAUG;IACG,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,iBA+HlE;IAED;;;;;;;;;;;OAWG;IACG,oBAAoB,kBA6EzB;IAkID;;;;OAIG;IACG,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,iBAuBlE;IAED;;;;OAIG;IACH,KAAK,SAOJ;CACD"}