@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
package/lite/announce.js CHANGED
@@ -1,89 +1,201 @@
1
1
  /* @ts-self-types="./announce.d.ts" */
2
+ import { MAX_HOPS, OriginSchema, UNKNOWN_ORIGIN } from "../origin.js";
2
3
  import * as Path from "../path.js";
3
4
  import * as Message from "./message.js";
4
- import { OriginSchema } from "./origin.js";
5
- import { Version } from "./version.js";
6
- // Must match the MAX_HOPS in Rust's model/origin.rs. Broadcasts with longer
7
- // hop chains are rejected; this keeps loop-detection bounded and rejects
8
- // pathological announcements across clusters with unbounded forwarding.
9
- export const MAX_HOPS = 32;
10
- export class Announce {
11
- suffix;
12
- active;
13
- hops;
14
- constructor(props) {
15
- this.suffix = props.suffix;
16
- this.active = props.active;
17
- this.hops = props.hops ?? [];
18
- if (this.hops.length > MAX_HOPS) {
19
- throw new Error(`hop count ${this.hops.length} exceeds maximum ${MAX_HOPS}`);
20
- }
21
- }
22
- async #encode(w, version) {
23
- await w.bool(this.active);
24
- await w.string(Path.encode(this.suffix));
25
- switch (version) {
26
- case Version.DRAFT_01:
27
- case Version.DRAFT_02:
28
- break;
29
- case Version.DRAFT_03:
30
- await w.u53(this.hops.length);
31
- break;
32
- default:
33
- // Lite04+: hop count + individual Origin varints.
34
- await w.u53(this.hops.length);
35
- for (const origin of this.hops) {
36
- await w.u62(origin);
37
- }
38
- break;
39
- }
5
+ import { hasAnnounceId, hasAnnounceOk, hasExcludeHop, hasRouteCost, Version } from "./version.js";
6
+ // Pre-lite-06 inner status values, carried inside the single ANNOUNCE_BROADCAST body.
7
+ const STATUS_ENDED = 0;
8
+ const STATUS_ACTIVE = 1;
9
+ const STATUS_RESTART = 2;
10
+ // lite-06 announce message types: an outer discriminator carried before the length
11
+ // prefix, so each announcement is an independently-typed, length-delimited message
12
+ // (mirroring SUBSCRIBE_START/END/DROP on the subscribe stream).
13
+ const ANNOUNCE_START = 0;
14
+ const ANNOUNCE_END = 1;
15
+ const ANNOUNCE_RESTART = 2;
16
+ function checkHops(hops) {
17
+ if (hops.length > MAX_HOPS) {
18
+ throw new Error(`hop count ${hops.length} exceeds maximum ${MAX_HOPS}`);
40
19
  }
41
- static async #decode(r, version) {
42
- const active = await r.bool();
43
- const suffix = Path.decode(await r.string());
44
- let hops = [];
45
- switch (version) {
46
- case Version.DRAFT_01:
47
- case Version.DRAFT_02:
48
- break;
49
- case Version.DRAFT_03: {
50
- const count = await r.u53();
51
- if (count > MAX_HOPS)
52
- throw new Error(`hop count ${count} exceeds maximum ${MAX_HOPS}`);
53
- // Lite03 carries only a hop count, not individual ids. Fill with
54
- // the zero placeholder (OriginSchema accepts 0 as valid on-wire).
55
- const placeholder = OriginSchema.parse(0n);
56
- hops = new Array(count).fill(placeholder);
57
- break;
20
+ }
21
+ async function encodeHops(w, version, hops) {
22
+ checkHops(hops);
23
+ switch (version) {
24
+ case Version.DRAFT_01:
25
+ case Version.DRAFT_02:
26
+ break;
27
+ case Version.DRAFT_03:
28
+ await w.u53(hops.length);
29
+ break;
30
+ default:
31
+ // Lite04+: hop count + individual Origin varints.
32
+ await w.u53(hops.length);
33
+ for (const origin of hops) {
34
+ await w.u62(origin);
58
35
  }
59
- default: {
60
- // Lite04+: hop count + individual Origin varints.
61
- const count = await r.u53();
62
- if (count > MAX_HOPS)
63
- throw new Error(`hop count ${count} exceeds maximum ${MAX_HOPS}`);
64
- hops = [];
65
- for (let i = 0; i < count; i++) {
66
- hops.push(OriginSchema.parse(await r.u62()));
67
- }
68
- break;
36
+ break;
37
+ }
38
+ }
39
+ async function decodeHops(r, version) {
40
+ switch (version) {
41
+ case Version.DRAFT_01:
42
+ case Version.DRAFT_02:
43
+ return [];
44
+ case Version.DRAFT_03: {
45
+ const count = await r.u53();
46
+ if (count > MAX_HOPS)
47
+ throw new Error(`hop count ${count} exceeds maximum ${MAX_HOPS}`);
48
+ // Lite03 carries only a hop count, not individual ids, so every entry is
49
+ // the reserved "no identity" id.
50
+ return new Array(count).fill(UNKNOWN_ORIGIN);
51
+ }
52
+ default: {
53
+ // Lite04+: hop count + individual Origin varints.
54
+ const count = await r.u53();
55
+ if (count > MAX_HOPS)
56
+ throw new Error(`hop count ${count} exceeds maximum ${MAX_HOPS}`);
57
+ const hops = [];
58
+ for (let i = 0; i < count; i++) {
59
+ hops.push(OriginSchema.parse(await r.u62()));
69
60
  }
61
+ return hops;
70
62
  }
71
- return new Announce({ suffix, active, hops });
72
63
  }
73
- async encode(w, version) {
74
- return Message.encode(w, (w) => this.#encode(w, version));
64
+ }
65
+ // The route cost rides lite-06+ announcements as a single varint; older
66
+ // versions carry nothing and decode as zero.
67
+ async function encodeRouteCost(w, version, cost) {
68
+ if (!hasRouteCost(version))
69
+ return;
70
+ await w.u62(cost ?? 0n);
71
+ }
72
+ async function decodeRouteCost(r, version) {
73
+ if (!hasRouteCost(version))
74
+ return 0n;
75
+ return await r.u62();
76
+ }
77
+ // lite-06 message body (no discriminator; the type is carried outside the length prefix).
78
+ async function encodeAnnounce06Body(w, msg, version) {
79
+ switch (msg.status) {
80
+ case "active":
81
+ await w.string(Path.encode(msg.suffix));
82
+ await encodeHops(w, version, msg.hops);
83
+ await encodeRouteCost(w, version, msg.cost);
84
+ break;
85
+ case "endedId":
86
+ await w.u62(msg.id);
87
+ break;
88
+ case "restart":
89
+ await w.u62(msg.id);
90
+ await encodeHops(w, version, msg.hops);
91
+ await encodeRouteCost(w, version, msg.cost);
92
+ break;
93
+ case "ended":
94
+ // The pre-lite-06 path-form retraction has no place on lite-06.
95
+ throw new Error("ended-by-path not supported for this version");
75
96
  }
76
- static async decode(r, version) {
77
- return Message.decode(r, (r) => Announce.#decode(r, version));
97
+ }
98
+ // lite-06 outer message type for a given announcement.
99
+ function announce06Type(msg) {
100
+ switch (msg.status) {
101
+ case "active":
102
+ return ANNOUNCE_START;
103
+ case "endedId":
104
+ return ANNOUNCE_END;
105
+ case "restart":
106
+ return ANNOUNCE_RESTART;
107
+ case "ended":
108
+ throw new Error("ended-by-path not supported for this version");
109
+ }
110
+ }
111
+ async function decodeAnnounce06Body(r, typ, version) {
112
+ switch (typ) {
113
+ case ANNOUNCE_START: {
114
+ const suffix = Path.decode(await r.string());
115
+ const hops = await decodeHops(r, version);
116
+ return { status: "active", suffix, hops, cost: await decodeRouteCost(r, version) };
117
+ }
118
+ case ANNOUNCE_END:
119
+ return { status: "endedId", id: await r.u62() };
120
+ case ANNOUNCE_RESTART: {
121
+ const id = await r.u62();
122
+ const hops = await decodeHops(r, version);
123
+ return { status: "restart", id, hops, cost: await decodeRouteCost(r, version) };
124
+ }
125
+ default:
126
+ throw new Error(`unknown announce message type: ${typ}`);
127
+ }
128
+ }
129
+ // Pre-lite-06 single ANNOUNCE_BROADCAST body: an inner status byte, then path + hops.
130
+ async function encodeLegacyBody(w, msg, version) {
131
+ switch (msg.status) {
132
+ case "active":
133
+ await w.u8(STATUS_ACTIVE);
134
+ await w.string(Path.encode(msg.suffix));
135
+ await encodeHops(w, version, msg.hops);
136
+ break;
137
+ case "ended":
138
+ await w.u8(STATUS_ENDED);
139
+ await w.string(Path.encode(msg.suffix));
140
+ await encodeHops(w, version, []);
141
+ break;
142
+ case "endedId":
143
+ case "restart":
144
+ // The id-referencing forms only exist on lite-06+.
145
+ throw new Error("announce ids not supported for this version");
78
146
  }
79
- static async decodeMaybe(r, version) {
80
- return Message.decodeMaybe(r, (r) => Announce.#decode(r, version));
147
+ }
148
+ async function decodeLegacyBody(r, version) {
149
+ const status = await r.u8();
150
+ // On lite-05 a restart travels as a duplicate `active`, but the explicit restart
151
+ // status is accepted on decode and treated the same. Older versions never defined it.
152
+ const active = status === STATUS_ACTIVE || (status === STATUS_RESTART && hasAnnounceOk(version));
153
+ if (status !== STATUS_ENDED && !active) {
154
+ throw new Error("invalid announce status");
155
+ }
156
+ const suffix = Path.decode(await r.string());
157
+ const hops = await decodeHops(r, version);
158
+ return active ? { status: "active", suffix, hops } : { status: "ended", suffix };
159
+ }
160
+ /** Encode one announcement, including its type discriminator (lite-06+) and length prefix. */
161
+ export async function encodeAnnounceBroadcast(w, msg, version) {
162
+ if (hasAnnounceId(version)) {
163
+ // lite-06+: outer type discriminator, then a size-prefixed body (like the subscribe stream).
164
+ await w.u53(announce06Type(msg));
165
+ return Message.encode(w, (w) => encodeAnnounce06Body(w, msg, version));
166
+ }
167
+ return Message.encode(w, (w) => encodeLegacyBody(w, msg, version));
168
+ }
169
+ /** Decode one announcement, including its type discriminator (lite-06+) and length prefix. */
170
+ export async function decodeAnnounceBroadcast(r, version) {
171
+ if (hasAnnounceId(version)) {
172
+ const typ = await r.u53();
173
+ return Message.decode(r, (r) => decodeAnnounce06Body(r, typ, version));
81
174
  }
175
+ return Message.decode(r, (r) => decodeLegacyBody(r, version));
82
176
  }
83
- export class AnnounceInterest {
177
+ /** Like {@link decodeAnnounceBroadcast} but resolves `undefined` on a clean FIN. */
178
+ export async function decodeAnnounceBroadcastMaybe(r, version) {
179
+ if (hasAnnounceId(version)) {
180
+ if (await r.done())
181
+ return undefined;
182
+ const typ = await r.u53();
183
+ return Message.decode(r, (r) => decodeAnnounce06Body(r, typ, version));
184
+ }
185
+ return Message.decodeMaybe(r, (r) => decodeLegacyBody(r, version));
186
+ }
187
+ /**
188
+ * ANNOUNCE_REQUEST: sent by the subscriber to request ANNOUNCE_BROADCAST messages
189
+ * for a path prefix. Renamed from `AnnounceInterest` in lite-05.
190
+ */
191
+ export class AnnounceRequest {
84
192
  prefix;
85
- // 62-bit Origin id of the peer asking for announces. Zero means "no exclusion".
86
- // Must be a bigint: peer origins are up to 62 bits and overflow u53.
193
+ /** Lite04/05 only: the 62-bit Origin id of the peer asking for announces, which the
194
+ * publisher uses to skip announces that already passed through it. Zero means "no
195
+ * exclusion". Not on the wire elsewhere, so a value set here is ignored when encoding
196
+ * for another version and decodes as zero.
197
+ *
198
+ * Must be a bigint: peer origins are up to 62 bits and overflow u53. */
87
199
  excludeHop;
88
200
  constructor(prefix, excludeHop = 0n) {
89
201
  this.prefix = prefix;
@@ -91,36 +203,20 @@ export class AnnounceInterest {
91
203
  }
92
204
  async #encode(w, version) {
93
205
  await w.string(Path.encode(this.prefix));
94
- switch (version) {
95
- case Version.DRAFT_01:
96
- case Version.DRAFT_02:
97
- case Version.DRAFT_03:
98
- break;
99
- default:
100
- // Lite04+: exclude_hop field (u62 varint).
101
- await w.u62(this.excludeHop);
102
- break;
206
+ if (hasExcludeHop(version)) {
207
+ await w.u62(this.excludeHop);
103
208
  }
104
209
  }
105
210
  static async #decode(r, version) {
106
211
  const prefix = Path.decode(await r.string());
107
- let excludeHop = 0n;
108
- switch (version) {
109
- case Version.DRAFT_01:
110
- case Version.DRAFT_02:
111
- case Version.DRAFT_03:
112
- break;
113
- default:
114
- excludeHop = await r.u62();
115
- break;
116
- }
117
- return new AnnounceInterest(prefix, excludeHop);
212
+ const excludeHop = hasExcludeHop(version) ? await r.u62() : 0n;
213
+ return new AnnounceRequest(prefix, excludeHop);
118
214
  }
119
215
  async encode(w, version) {
120
216
  return Message.encode(w, (w) => this.#encode(w, version));
121
217
  }
122
218
  static async decode(r, version) {
123
- return Message.decode(r, (r) => AnnounceInterest.#decode(r, version));
219
+ return Message.decode(r, (r) => AnnounceRequest.#decode(r, version));
124
220
  }
125
221
  }
126
222
  /// Sent after setup to communicate the initially announced paths.
@@ -163,4 +259,44 @@ export class AnnounceInit {
163
259
  return Message.decode(r, AnnounceInit.#decode);
164
260
  }
165
261
  }
262
+ /// Sent by the publisher as the first message on an announce stream, before any
263
+ /// individual Announce messages. Lite05+ only; the successor to AnnounceInit.
264
+ ///
265
+ /// `origin` is the responder's origin id, which the subscriber stamps onto each
266
+ /// announce's hop chain (the publisher no longer stamps itself), or the reserved
267
+ /// {@link UNKNOWN_ORIGIN} when the responder has no identity to give. `active` is
268
+ /// the number of initial Announce messages that follow immediately.
269
+ export class AnnounceOk {
270
+ origin;
271
+ active;
272
+ constructor(origin, active) {
273
+ this.origin = origin;
274
+ this.active = active;
275
+ }
276
+ static #guard(version) {
277
+ if (!hasAnnounceOk(version)) {
278
+ throw new Error("announce ok not supported for this version");
279
+ }
280
+ }
281
+ async #encode(w) {
282
+ await w.u62(this.origin);
283
+ await w.u53(this.active);
284
+ }
285
+ static async #decode(r) {
286
+ // The draft reserves 0 for "unknown": the responder was never assigned an id, or
287
+ // withholds it to obscure its routing. It names nobody, so callers must not stamp
288
+ // it onto a hop chain, but it is a legal message and not grounds to drop the stream.
289
+ const origin = OriginSchema.parse(await r.u62());
290
+ const active = await r.u53();
291
+ return new AnnounceOk(origin, active);
292
+ }
293
+ async encode(w, version) {
294
+ AnnounceOk.#guard(version);
295
+ return Message.encode(w, this.#encode.bind(this));
296
+ }
297
+ static async decode(r, version) {
298
+ AnnounceOk.#guard(version);
299
+ return Message.decode(r, AnnounceOk.#decode);
300
+ }
301
+ }
166
302
  //# sourceMappingURL=announce.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"announce.js","sourceRoot":"","sources":["../../src/lite/announce.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Message from \"./message.ts\";\nimport { type Origin, OriginSchema } from \"./origin.ts\";\nimport { Version } from \"./version.ts\";\n\n// Must match the MAX_HOPS in Rust's model/origin.rs. Broadcasts with longer\n// hop chains are rejected; this keeps loop-detection bounded and rejects\n// pathological announcements across clusters with unbounded forwarding.\nexport const MAX_HOPS = 32;\n\nexport class Announce {\n\tsuffix: Path.Valid;\n\tactive: boolean;\n\thops: Origin[];\n\n\tconstructor(props: { suffix: Path.Valid; active: boolean; hops?: Origin[] }) {\n\t\tthis.suffix = props.suffix;\n\t\tthis.active = props.active;\n\t\tthis.hops = props.hops ?? [];\n\t\tif (this.hops.length > MAX_HOPS) {\n\t\t\tthrow new Error(`hop count ${this.hops.length} exceeds maximum ${MAX_HOPS}`);\n\t\t}\n\t}\n\n\tasync #encode(w: Writer, version: Version) {\n\t\tawait w.bool(this.active);\n\t\tawait w.string(Path.encode(this.suffix));\n\n\t\tswitch (version) {\n\t\t\tcase Version.DRAFT_01:\n\t\t\tcase Version.DRAFT_02:\n\t\t\t\tbreak;\n\t\t\tcase Version.DRAFT_03:\n\t\t\t\tawait w.u53(this.hops.length);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Lite04+: hop count + individual Origin varints.\n\t\t\t\tawait w.u53(this.hops.length);\n\t\t\t\tfor (const origin of this.hops) {\n\t\t\t\t\tawait w.u62(origin);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tstatic async #decode(r: Reader, version: Version): Promise<Announce> {\n\t\tconst active = await r.bool();\n\t\tconst suffix = Path.decode(await r.string());\n\n\t\tlet hops: Origin[] = [];\n\t\tswitch (version) {\n\t\t\tcase Version.DRAFT_01:\n\t\t\tcase Version.DRAFT_02:\n\t\t\t\tbreak;\n\t\t\tcase Version.DRAFT_03: {\n\t\t\t\tconst count = await r.u53();\n\t\t\t\tif (count > MAX_HOPS) throw new Error(`hop count ${count} exceeds maximum ${MAX_HOPS}`);\n\t\t\t\t// Lite03 carries only a hop count, not individual ids. Fill with\n\t\t\t\t// the zero placeholder (OriginSchema accepts 0 as valid on-wire).\n\t\t\t\tconst placeholder = OriginSchema.parse(0n);\n\t\t\t\thops = new Array<Origin>(count).fill(placeholder);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\t// Lite04+: hop count + individual Origin varints.\n\t\t\t\tconst count = await r.u53();\n\t\t\t\tif (count > MAX_HOPS) throw new Error(`hop count ${count} exceeds maximum ${MAX_HOPS}`);\n\t\t\t\thops = [];\n\t\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\t\thops.push(OriginSchema.parse(await r.u62()));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn new Announce({ suffix, active, hops });\n\t}\n\n\tasync encode(w: Writer, version: Version): Promise<void> {\n\t\treturn Message.encode(w, (w) => this.#encode(w, version));\n\t}\n\n\tstatic async decode(r: Reader, version: Version): Promise<Announce> {\n\t\treturn Message.decode(r, (r) => Announce.#decode(r, version));\n\t}\n\n\tstatic async decodeMaybe(r: Reader, version: Version): Promise<Announce | undefined> {\n\t\treturn Message.decodeMaybe(r, (r) => Announce.#decode(r, version));\n\t}\n}\n\nexport class AnnounceInterest {\n\tprefix: Path.Valid;\n\t// 62-bit Origin id of the peer asking for announces. Zero means \"no exclusion\".\n\t// Must be a bigint: peer origins are up to 62 bits and overflow u53.\n\texcludeHop: bigint;\n\n\tconstructor(prefix: Path.Valid, excludeHop: bigint = 0n) {\n\t\tthis.prefix = prefix;\n\t\tthis.excludeHop = excludeHop;\n\t}\n\n\tasync #encode(w: Writer, version: Version) {\n\t\tawait w.string(Path.encode(this.prefix));\n\t\tswitch (version) {\n\t\t\tcase Version.DRAFT_01:\n\t\t\tcase Version.DRAFT_02:\n\t\t\tcase Version.DRAFT_03:\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Lite04+: exclude_hop field (u62 varint).\n\t\t\t\tawait w.u62(this.excludeHop);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tstatic async #decode(r: Reader, version: Version): Promise<AnnounceInterest> {\n\t\tconst prefix = Path.decode(await r.string());\n\t\tlet excludeHop = 0n;\n\t\tswitch (version) {\n\t\t\tcase Version.DRAFT_01:\n\t\t\tcase Version.DRAFT_02:\n\t\t\tcase Version.DRAFT_03:\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\texcludeHop = await r.u62();\n\t\t\t\tbreak;\n\t\t}\n\t\treturn new AnnounceInterest(prefix, excludeHop);\n\t}\n\n\tasync encode(w: Writer, version: Version): Promise<void> {\n\t\treturn Message.encode(w, (w) => this.#encode(w, version));\n\t}\n\n\tstatic async decode(r: Reader, version: Version): Promise<AnnounceInterest> {\n\t\treturn Message.decode(r, (r) => AnnounceInterest.#decode(r, version));\n\t}\n}\n\n/// Sent after setup to communicate the initially announced paths.\n///\n/// Used by Draft01/Draft02 only. Draft03+ uses individual Announce messages instead.\nexport class AnnounceInit {\n\tsuffixes: Path.Valid[];\n\n\tconstructor(paths: Path.Valid[]) {\n\t\tthis.suffixes = paths;\n\t}\n\n\tstatic #guard(version: Version) {\n\t\tswitch (version) {\n\t\t\tcase Version.DRAFT_01:\n\t\t\tcase Version.DRAFT_02:\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"announce init not supported for this version\");\n\t\t}\n\t}\n\n\tasync #encode(w: Writer) {\n\t\tawait w.u53(this.suffixes.length);\n\t\tfor (const path of this.suffixes) {\n\t\t\tawait w.string(Path.encode(path));\n\t\t}\n\t}\n\n\tstatic async #decode(r: Reader): Promise<AnnounceInit> {\n\t\tconst count = await r.u53();\n\t\tconst suffixes: Path.Valid[] = [];\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tsuffixes.push(Path.decode(await r.string()));\n\t\t}\n\t\treturn new AnnounceInit(suffixes);\n\t}\n\n\tasync encode(w: Writer, version: Version): Promise<void> {\n\t\tAnnounceInit.#guard(version);\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, version: Version): Promise<AnnounceInit> {\n\t\tAnnounceInit.#guard(version);\n\t\treturn Message.decode(r, AnnounceInit.#decode);\n\t}\n}\n"]}
1
+ {"version":3,"file":"announce.js","sourceRoot":"","sources":["../../src/lite/announce.ts"],"names":[],"mappings":"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","sourcesContent":["import { MAX_HOPS, type Origin, OriginSchema, UNKNOWN_ORIGIN } from \"../origin.ts\";\nimport * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Message from \"./message.ts\";\nimport { hasAnnounceId, hasAnnounceOk, hasExcludeHop, hasRouteCost, Version } from \"./version.ts\";\n\n// Pre-lite-06 inner status values, carried inside the single ANNOUNCE_BROADCAST body.\nconst STATUS_ENDED = 0;\nconst STATUS_ACTIVE = 1;\nconst STATUS_RESTART = 2;\n\n// lite-06 announce message types: an outer discriminator carried before the length\n// prefix, so each announcement is an independently-typed, length-delimited message\n// (mirroring SUBSCRIBE_START/END/DROP on the subscribe stream).\nconst ANNOUNCE_START = 0;\nconst ANNOUNCE_END = 1;\nconst ANNOUNCE_RESTART = 2;\n\n/**\n * An announcement on the Announce Stream, advertising or retracting a broadcast.\n *\n * On lite-06+ these are three independently-typed messages (`ANNOUNCE_START`,\n * `ANNOUNCE_END`, `ANNOUNCE_RESTART`), each framed as `Type | Length | Body` like the\n * subscribe stream's responses. Each `active` (ANNOUNCE_START) implicitly assigns the\n * next announce id (a per-stream ordinal starting at 0); `endedId`/`restart` reference\n * that id instead of repeating the path. Older versions send a single ANNOUNCE_BROADCAST\n * message that retracts by path (`ended`).\n */\nexport type AnnounceBroadcast =\n\t/** A broadcast is now available, carrying the path suffix, the hop chain, and\n\t * (lite-06+) the route cost. An absent cost encodes as zero. */\n\t| { status: \"active\"; suffix: Path.Valid; hops: Origin[]; cost?: bigint }\n\t/** Pre-lite-06: a broadcast is no longer available, retracted by path. */\n\t| { status: \"ended\"; suffix: Path.Valid }\n\t/** Lite06+: a broadcast is no longer available, retracted by announce id.\n\t * The id is retired; referencing it again is a protocol violation. */\n\t| { status: \"endedId\"; id: bigint }\n\t/** Lite06+: atomically replace the announcement with this id (e.g. a new hop\n\t * chain after a relay failover, or a route whose cost moved). The id stays live. */\n\t| { status: \"restart\"; id: bigint; hops: Origin[]; cost?: bigint };\n\nfunction checkHops(hops: Origin[]) {\n\tif (hops.length > MAX_HOPS) {\n\t\tthrow new Error(`hop count ${hops.length} exceeds maximum ${MAX_HOPS}`);\n\t}\n}\n\nasync function encodeHops(w: Writer, version: Version, hops: Origin[]) {\n\tcheckHops(hops);\n\tswitch (version) {\n\t\tcase Version.DRAFT_01:\n\t\tcase Version.DRAFT_02:\n\t\t\tbreak;\n\t\tcase Version.DRAFT_03:\n\t\t\tawait w.u53(hops.length);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t// Lite04+: hop count + individual Origin varints.\n\t\t\tawait w.u53(hops.length);\n\t\t\tfor (const origin of hops) {\n\t\t\t\tawait w.u62(origin);\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nasync function decodeHops(r: Reader, version: Version): Promise<Origin[]> {\n\tswitch (version) {\n\t\tcase Version.DRAFT_01:\n\t\tcase Version.DRAFT_02:\n\t\t\treturn [];\n\t\tcase Version.DRAFT_03: {\n\t\t\tconst count = await r.u53();\n\t\t\tif (count > MAX_HOPS) throw new Error(`hop count ${count} exceeds maximum ${MAX_HOPS}`);\n\t\t\t// Lite03 carries only a hop count, not individual ids, so every entry is\n\t\t\t// the reserved \"no identity\" id.\n\t\t\treturn new Array<Origin>(count).fill(UNKNOWN_ORIGIN);\n\t\t}\n\t\tdefault: {\n\t\t\t// Lite04+: hop count + individual Origin varints.\n\t\t\tconst count = await r.u53();\n\t\t\tif (count > MAX_HOPS) throw new Error(`hop count ${count} exceeds maximum ${MAX_HOPS}`);\n\t\t\tconst hops: Origin[] = [];\n\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\thops.push(OriginSchema.parse(await r.u62()));\n\t\t\t}\n\t\t\treturn hops;\n\t\t}\n\t}\n}\n\n// The route cost rides lite-06+ announcements as a single varint; older\n// versions carry nothing and decode as zero.\nasync function encodeRouteCost(w: Writer, version: Version, cost: bigint | undefined) {\n\tif (!hasRouteCost(version)) return;\n\tawait w.u62(cost ?? 0n);\n}\n\nasync function decodeRouteCost(r: Reader, version: Version): Promise<bigint> {\n\tif (!hasRouteCost(version)) return 0n;\n\treturn await r.u62();\n}\n\n// lite-06 message body (no discriminator; the type is carried outside the length prefix).\nasync function encodeAnnounce06Body(w: Writer, msg: AnnounceBroadcast, version: Version) {\n\tswitch (msg.status) {\n\t\tcase \"active\":\n\t\t\tawait w.string(Path.encode(msg.suffix));\n\t\t\tawait encodeHops(w, version, msg.hops);\n\t\t\tawait encodeRouteCost(w, version, msg.cost);\n\t\t\tbreak;\n\t\tcase \"endedId\":\n\t\t\tawait w.u62(msg.id);\n\t\t\tbreak;\n\t\tcase \"restart\":\n\t\t\tawait w.u62(msg.id);\n\t\t\tawait encodeHops(w, version, msg.hops);\n\t\t\tawait encodeRouteCost(w, version, msg.cost);\n\t\t\tbreak;\n\t\tcase \"ended\":\n\t\t\t// The pre-lite-06 path-form retraction has no place on lite-06.\n\t\t\tthrow new Error(\"ended-by-path not supported for this version\");\n\t}\n}\n\n// lite-06 outer message type for a given announcement.\nfunction announce06Type(msg: AnnounceBroadcast): number {\n\tswitch (msg.status) {\n\t\tcase \"active\":\n\t\t\treturn ANNOUNCE_START;\n\t\tcase \"endedId\":\n\t\t\treturn ANNOUNCE_END;\n\t\tcase \"restart\":\n\t\t\treturn ANNOUNCE_RESTART;\n\t\tcase \"ended\":\n\t\t\tthrow new Error(\"ended-by-path not supported for this version\");\n\t}\n}\n\nasync function decodeAnnounce06Body(r: Reader, typ: number, version: Version): Promise<AnnounceBroadcast> {\n\tswitch (typ) {\n\t\tcase ANNOUNCE_START: {\n\t\t\tconst suffix = Path.decode(await r.string());\n\t\t\tconst hops = await decodeHops(r, version);\n\t\t\treturn { status: \"active\", suffix, hops, cost: await decodeRouteCost(r, version) };\n\t\t}\n\t\tcase ANNOUNCE_END:\n\t\t\treturn { status: \"endedId\", id: await r.u62() };\n\t\tcase ANNOUNCE_RESTART: {\n\t\t\tconst id = await r.u62();\n\t\t\tconst hops = await decodeHops(r, version);\n\t\t\treturn { status: \"restart\", id, hops, cost: await decodeRouteCost(r, version) };\n\t\t}\n\t\tdefault:\n\t\t\tthrow new Error(`unknown announce message type: ${typ}`);\n\t}\n}\n\n// Pre-lite-06 single ANNOUNCE_BROADCAST body: an inner status byte, then path + hops.\nasync function encodeLegacyBody(w: Writer, msg: AnnounceBroadcast, version: Version) {\n\tswitch (msg.status) {\n\t\tcase \"active\":\n\t\t\tawait w.u8(STATUS_ACTIVE);\n\t\t\tawait w.string(Path.encode(msg.suffix));\n\t\t\tawait encodeHops(w, version, msg.hops);\n\t\t\tbreak;\n\t\tcase \"ended\":\n\t\t\tawait w.u8(STATUS_ENDED);\n\t\t\tawait w.string(Path.encode(msg.suffix));\n\t\t\tawait encodeHops(w, version, []);\n\t\t\tbreak;\n\t\tcase \"endedId\":\n\t\tcase \"restart\":\n\t\t\t// The id-referencing forms only exist on lite-06+.\n\t\t\tthrow new Error(\"announce ids not supported for this version\");\n\t}\n}\n\nasync function decodeLegacyBody(r: Reader, version: Version): Promise<AnnounceBroadcast> {\n\tconst status = await r.u8();\n\t// On lite-05 a restart travels as a duplicate `active`, but the explicit restart\n\t// status is accepted on decode and treated the same. Older versions never defined it.\n\tconst active = status === STATUS_ACTIVE || (status === STATUS_RESTART && hasAnnounceOk(version));\n\tif (status !== STATUS_ENDED && !active) {\n\t\tthrow new Error(\"invalid announce status\");\n\t}\n\tconst suffix = Path.decode(await r.string());\n\tconst hops = await decodeHops(r, version);\n\treturn active ? { status: \"active\", suffix, hops } : { status: \"ended\", suffix };\n}\n\n/** Encode one announcement, including its type discriminator (lite-06+) and length prefix. */\nexport async function encodeAnnounceBroadcast(w: Writer, msg: AnnounceBroadcast, version: Version): Promise<void> {\n\tif (hasAnnounceId(version)) {\n\t\t// lite-06+: outer type discriminator, then a size-prefixed body (like the subscribe stream).\n\t\tawait w.u53(announce06Type(msg));\n\t\treturn Message.encode(w, (w) => encodeAnnounce06Body(w, msg, version));\n\t}\n\treturn Message.encode(w, (w) => encodeLegacyBody(w, msg, version));\n}\n\n/** Decode one announcement, including its type discriminator (lite-06+) and length prefix. */\nexport async function decodeAnnounceBroadcast(r: Reader, version: Version): Promise<AnnounceBroadcast> {\n\tif (hasAnnounceId(version)) {\n\t\tconst typ = await r.u53();\n\t\treturn Message.decode(r, (r) => decodeAnnounce06Body(r, typ, version));\n\t}\n\treturn Message.decode(r, (r) => decodeLegacyBody(r, version));\n}\n\n/** Like {@link decodeAnnounceBroadcast} but resolves `undefined` on a clean FIN. */\nexport async function decodeAnnounceBroadcastMaybe(\n\tr: Reader,\n\tversion: Version,\n): Promise<AnnounceBroadcast | undefined> {\n\tif (hasAnnounceId(version)) {\n\t\tif (await r.done()) return undefined;\n\t\tconst typ = await r.u53();\n\t\treturn Message.decode(r, (r) => decodeAnnounce06Body(r, typ, version));\n\t}\n\treturn Message.decodeMaybe(r, (r) => decodeLegacyBody(r, version));\n}\n\n/**\n * ANNOUNCE_REQUEST: sent by the subscriber to request ANNOUNCE_BROADCAST messages\n * for a path prefix. Renamed from `AnnounceInterest` in lite-05.\n */\nexport class AnnounceRequest {\n\tprefix: Path.Valid;\n\t/** Lite04/05 only: the 62-bit Origin id of the peer asking for announces, which the\n\t * publisher uses to skip announces that already passed through it. Zero means \"no\n\t * exclusion\". Not on the wire elsewhere, so a value set here is ignored when encoding\n\t * for another version and decodes as zero.\n\t *\n\t * Must be a bigint: peer origins are up to 62 bits and overflow u53. */\n\texcludeHop: bigint;\n\n\tconstructor(prefix: Path.Valid, excludeHop: bigint = 0n) {\n\t\tthis.prefix = prefix;\n\t\tthis.excludeHop = excludeHop;\n\t}\n\n\tasync #encode(w: Writer, version: Version) {\n\t\tawait w.string(Path.encode(this.prefix));\n\t\tif (hasExcludeHop(version)) {\n\t\t\tawait w.u62(this.excludeHop);\n\t\t}\n\t}\n\n\tstatic async #decode(r: Reader, version: Version): Promise<AnnounceRequest> {\n\t\tconst prefix = Path.decode(await r.string());\n\t\tconst excludeHop = hasExcludeHop(version) ? await r.u62() : 0n;\n\t\treturn new AnnounceRequest(prefix, excludeHop);\n\t}\n\n\tasync encode(w: Writer, version: Version): Promise<void> {\n\t\treturn Message.encode(w, (w) => this.#encode(w, version));\n\t}\n\n\tstatic async decode(r: Reader, version: Version): Promise<AnnounceRequest> {\n\t\treturn Message.decode(r, (r) => AnnounceRequest.#decode(r, version));\n\t}\n}\n\n/// Sent after setup to communicate the initially announced paths.\n///\n/// Used by Draft01/Draft02 only. Draft03+ uses individual Announce messages instead.\nexport class AnnounceInit {\n\tsuffixes: Path.Valid[];\n\n\tconstructor(paths: Path.Valid[]) {\n\t\tthis.suffixes = paths;\n\t}\n\n\tstatic #guard(version: Version) {\n\t\tswitch (version) {\n\t\t\tcase Version.DRAFT_01:\n\t\t\tcase Version.DRAFT_02:\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"announce init not supported for this version\");\n\t\t}\n\t}\n\n\tasync #encode(w: Writer) {\n\t\tawait w.u53(this.suffixes.length);\n\t\tfor (const path of this.suffixes) {\n\t\t\tawait w.string(Path.encode(path));\n\t\t}\n\t}\n\n\tstatic async #decode(r: Reader): Promise<AnnounceInit> {\n\t\tconst count = await r.u53();\n\t\tconst suffixes: Path.Valid[] = [];\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tsuffixes.push(Path.decode(await r.string()));\n\t\t}\n\t\treturn new AnnounceInit(suffixes);\n\t}\n\n\tasync encode(w: Writer, version: Version): Promise<void> {\n\t\tAnnounceInit.#guard(version);\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, version: Version): Promise<AnnounceInit> {\n\t\tAnnounceInit.#guard(version);\n\t\treturn Message.decode(r, AnnounceInit.#decode);\n\t}\n}\n\n/// Sent by the publisher as the first message on an announce stream, before any\n/// individual Announce messages. Lite05+ only; the successor to AnnounceInit.\n///\n/// `origin` is the responder's origin id, which the subscriber stamps onto each\n/// announce's hop chain (the publisher no longer stamps itself), or the reserved\n/// {@link UNKNOWN_ORIGIN} when the responder has no identity to give. `active` is\n/// the number of initial Announce messages that follow immediately.\nexport class AnnounceOk {\n\torigin: Origin;\n\tactive: number;\n\n\tconstructor(origin: Origin, active: number) {\n\t\tthis.origin = origin;\n\t\tthis.active = active;\n\t}\n\n\tstatic #guard(version: Version) {\n\t\tif (!hasAnnounceOk(version)) {\n\t\t\tthrow new Error(\"announce ok not supported for this version\");\n\t\t}\n\t}\n\n\tasync #encode(w: Writer) {\n\t\tawait w.u62(this.origin);\n\t\tawait w.u53(this.active);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<AnnounceOk> {\n\t\t// The draft reserves 0 for \"unknown\": the responder was never assigned an id, or\n\t\t// withholds it to obscure its routing. It names nobody, so callers must not stamp\n\t\t// it onto a hop chain, but it is a legal message and not grounds to drop the stream.\n\t\tconst origin = OriginSchema.parse(await r.u62());\n\t\tconst active = await r.u53();\n\t\treturn new AnnounceOk(origin, active);\n\t}\n\n\tasync encode(w: Writer, version: Version): Promise<void> {\n\t\tAnnounceOk.#guard(version);\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, version: Version): Promise<AnnounceOk> {\n\t\tAnnounceOk.#guard(version);\n\t\treturn Message.decode(r, AnnounceOk.#decode);\n\t}\n}\n"]}
@@ -1,13 +1,31 @@
1
- import { Signal } from "@norskvideo/moq-signals";
2
- import type { Announced } from "../announced";
3
- import { type Bandwidth } from "../bandwidth";
4
- import type { Broadcast } from "../broadcast";
1
+ import { type Getter } from "@norskvideo/moq-signals";
2
+ import * as announce from "../announced";
3
+ import type * as broadcast from "../broadcast";
5
4
  import type { Established } from "../connection/established";
5
+ import { type Probe, type Stats } from "../connection/stats";
6
+ import { type Transport } from "../connection/transport";
7
+ import { type Origin } from "../origin";
6
8
  import * as Path from "../path";
7
9
  import { Stream } from "../stream";
8
- import type * as Time from "../time";
9
- import { type Origin } from "./origin";
10
- import { Version } from "./version";
10
+ import { ProbeLevel, type Role } from "./setup";
11
+ import { type Version } from "./version";
12
+ /**
13
+ * Constructor options for {@link Connection}.
14
+ *
15
+ * @internal
16
+ */
17
+ export interface ConnectionProps {
18
+ /** The URL of the connection. */
19
+ url: URL;
20
+ /** The established WebTransport session. */
21
+ quic: WebTransport;
22
+ /** The negotiated wire version. */
23
+ version: Version;
24
+ /** The session stream, absent on drafts that have none. */
25
+ session?: Stream;
26
+ /** Whether the relay supports broadcast discovery. Defaults to true. */
27
+ discovery?: boolean;
28
+ }
11
29
  /**
12
30
  * Represents a connection to a MoQ server.
13
31
  *
@@ -17,31 +35,62 @@ export declare class Connection implements Established {
17
35
  #private;
18
36
  readonly url: URL;
19
37
  readonly version: string;
20
- /** Estimated send bitrate from the congestion controller. */
21
- readonly sendBandwidth?: Bandwidth;
22
- /** Estimated receive bitrate from PROBE (moq-lite-03+ only). */
23
- readonly recvBandwidth?: Bandwidth;
24
- /** RTT in milliseconds from PROBE (moq-lite-04+ only). */
25
- readonly rtt?: Signal<Time.Milli | undefined>;
38
+ readonly transport: Transport;
39
+ /** Whether the relay supports broadcast discovery; see {@link Established.discovery}. */
40
+ readonly discovery: boolean;
41
+ /** The peer's PROBE estimates; see {@link Established.probe}. */
42
+ readonly probe: Getter<Probe>;
26
43
  /** Random per-connection origin id. Shared by Publisher (for outbound hop
27
44
  * chains) and Subscriber (available for optional self-filtering on announces). */
28
45
  readonly origin: Origin;
46
+ /**
47
+ * The {@link Role} the peer advertised in its SETUP, for a server deciding whether the
48
+ * peer's authorization grants the direction it intends to use.
49
+ *
50
+ * `undefined` until the peer's SETUP arrives, and forever on pre-lite-05 versions, which
51
+ * carry no in-band role. {@link Role.Both} is the absence of the parameter, so it is what
52
+ * a peer reports when it declines to declare a direction, sends a value we don't
53
+ * recognize, or is a server (which never sends one).
54
+ */
55
+ get peerRole(): Getter<Role | undefined>;
29
56
  /**
30
57
  * Creates a new Connection instance.
31
- * @param url - The URL of the connection
32
- * @param quic - The WebTransport session
33
- * @param session - The session stream
34
58
  *
35
59
  * @internal
36
60
  */
37
- constructor(url: URL, quic: WebTransport, version: Version, session?: Stream);
61
+ constructor({ url, quic, version, session, discovery }: ConnectionProps);
38
62
  /**
39
63
  * Closes the connection.
40
64
  */
41
65
  close(): void;
42
- publish(path: Path.Valid, broadcast: Broadcast): void;
43
- announced(prefix?: Path.Valid): Announced;
44
- consume(broadcast: Path.Valid): Broadcast;
66
+ publish(path: Path.Valid, producer: broadcast.Producer): void;
67
+ announced(prefix?: Path.Valid): announce.Consumer;
68
+ consume(path: Path.Valid): broadcast.Consumer;
69
+ /**
70
+ * Watches a broadcast, live only while it is announced.
71
+ *
72
+ * @param path - The path of the broadcast to watch
73
+ * @returns A reactive handle to the broadcast
74
+ */
75
+ announcedBroadcast(path: Path.Valid): announce.Broadcast;
76
+ /** Snapshot the transport's counters; see {@link Established.stats}. */
77
+ stats(): Promise<Stats>;
45
78
  get closed(): Promise<void>;
46
79
  }
80
+ /**
81
+ * The probe level to advertise in SETUP, from what the transport can measure.
82
+ *
83
+ * `Report` claims we can measure and periodically report, so it is only truthful
84
+ * when a metric this version can carry actually exists. The qmux/WebSocket fallback
85
+ * implements no `getStats()` at all, and even a transport that has one may report
86
+ * neither figure. Advertising `Report` and then holding the subscriber's PROBE
87
+ * stream open with nothing to send is the state this avoids; the subscriber's own
88
+ * gate then skips a stream it could not use.
89
+ *
90
+ * Mirrors `ProbeLevel::detect` in `moq-net`, including its limitation: a metric
91
+ * that only appears after SETUP reads as unsupported here.
92
+ *
93
+ * @internal
94
+ */
95
+ export declare function probeLevel(quic: WebTransport, version: Version): Promise<ProbeLevel>;
47
96
  //# sourceMappingURL=connection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/lite/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,IAAI,MAAM,YAAY,CAAC;AACnC,OAAO,EAAwB,MAAM,EAAU,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,KAAK,IAAI,MAAM,YAAY,CAAC;AAIxC,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,aAAa,CAAC;AAQxD,OAAO,EAAkB,OAAO,EAAe,MAAM,cAAc,CAAC;AAIpE;;;;GAIG;AACH,qBAAa,UAAW,YAAW,WAAW;;IAE7C,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAGlB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAiBzB,6DAA6D;IAC7D,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC;IAEnC,gEAAgE;IAChE,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC;IAEnC,0DAA0D;IAC1D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAE9C;sFACkF;IAClF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;;;;;OAOG;IACH,YAAY,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,EA2B3E;IAED;;OAEG;IACH,KAAK,SAUJ;IA2BD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,QAE7C;IAED,SAAS,CAAC,MAAM,aAAe,GAAG,SAAS,CAE1C;IAED,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,GAAG,SAAS,CAExC;IA2HD,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;CACD"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/lite/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAU,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,KAAK,EAAkB,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,KAAK,SAAS,EAAe,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,IAAI,MAAM,YAAY,CAAC;AACnC,OAAO,EAAwB,MAAM,EAAU,MAAM,cAAc,CAAC;AAOpE,OAAO,EAAE,UAAU,EAAE,KAAK,IAAI,EAAS,MAAM,YAAY,CAAC;AAK1D,OAAO,EAA6C,KAAK,OAAO,EAAe,MAAM,cAAc,CAAC;AAEpG;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC/B,iCAAiC;IACjC,GAAG,EAAE,GAAG,CAAC;IACT,4CAA4C;IAC5C,IAAI,EAAE,YAAY,CAAC;IACnB,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,UAAW,YAAW,WAAW;;IAE7C,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAGlB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAGzB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B,yFAAyF;IACzF,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAiB5B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAE9B;sFACkF;IAClF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAcxB;;;;;;;;OAQG;IACH,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,CAEvC;IAED;;;;OAIG;IACH,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAgB,EAAE,EAAE,eAAe,EAgB7E;IAED;;OAEG;IACH,KAAK,SAUJ;IA0BD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,QAErD;IAED,SAAS,CAAC,MAAM,aAAe,GAAG,QAAQ,CAAC,QAAQ,CAElD;IAED,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,CAE5C;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,SAAS,CAEvD;IAgHD,wEAAwE;IAClE,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAE5B;IAED,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;CACD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAkB1F"}