@norskvideo/moq-net 0.1.8 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/announce.d.ts +7 -0
- package/announce.d.ts.map +1 -0
- package/announce.js +8 -0
- package/announce.js.map +1 -0
- package/announced.d.ts +49 -91
- package/announced.d.ts.map +1 -1
- package/announced.js +21 -156
- package/announced.js.map +1 -1
- package/bandwidth.d.ts +163 -0
- package/bandwidth.d.ts.map +1 -0
- package/bandwidth.js +304 -0
- package/bandwidth.js.map +1 -0
- package/bandwidth_api.d.ts +7 -0
- package/bandwidth_api.d.ts.map +1 -0
- package/bandwidth_api.js +8 -0
- package/bandwidth_api.js.map +1 -0
- package/broadcast.d.ts +44 -35
- package/broadcast.d.ts.map +1 -1
- package/broadcast.js +104 -60
- package/broadcast.js.map +1 -1
- package/connection/accept.d.ts +16 -1
- package/connection/accept.d.ts.map +1 -1
- package/connection/accept.js +52 -28
- package/connection/accept.js.map +1 -1
- package/connection/browser.d.ts.map +1 -1
- package/connection/browser.js +9 -7
- package/connection/browser.js.map +1 -1
- package/connection/connect.d.ts +30 -6
- package/connection/connect.d.ts.map +1 -1
- package/connection/connect.js +110 -54
- package/connection/connect.js.map +1 -1
- package/connection/established.d.ts +17 -21
- package/connection/established.d.ts.map +1 -1
- package/connection/established.js.map +1 -1
- package/connection/forward.d.ts +2 -0
- package/connection/forward.d.ts.map +1 -0
- package/connection/forward.js +173 -0
- package/connection/forward.js.map +1 -0
- package/connection/handshake.d.ts +1 -0
- package/connection/handshake.d.ts.map +1 -1
- package/connection/handshake.js +5 -2
- package/connection/handshake.js.map +1 -1
- package/connection/index.d.ts +5 -5
- package/connection/index.d.ts.map +1 -1
- package/connection/index.js +4 -5
- package/connection/index.js.map +1 -1
- package/connection/pool.d.ts +186 -0
- package/connection/pool.d.ts.map +1 -0
- package/connection/pool.js +361 -0
- package/connection/pool.js.map +1 -0
- package/connection/reload.d.ts +14 -93
- package/connection/reload.d.ts.map +1 -1
- package/connection/reload.js +217 -81
- package/connection/reload.js.map +1 -1
- package/connection/stats.d.ts +3 -26
- package/connection/stats.d.ts.map +1 -1
- package/connection/stats.js.map +1 -1
- package/connection/transport.d.ts +0 -7
- package/connection/transport.d.ts.map +1 -1
- package/consume.d.ts +1 -43
- package/consume.d.ts.map +1 -1
- package/consume.js +1 -1
- package/consume.js.map +1 -1
- package/error.d.ts +180 -29
- package/error.d.ts.map +1 -1
- package/error.js +331 -16
- package/error.js.map +1 -1
- package/errors.d.ts +7 -0
- package/errors.d.ts.map +1 -0
- package/errors.js +8 -0
- package/errors.js.map +1 -0
- package/group.d.ts +9 -43
- package/group.d.ts.map +1 -1
- package/group.js +284 -69
- package/group.js.map +1 -1
- package/hop.d.ts +115 -0
- package/hop.d.ts.map +1 -0
- package/hop.js +119 -0
- package/hop.js.map +1 -0
- package/ietf/adapter.d.ts +5 -1
- package/ietf/adapter.d.ts.map +1 -1
- package/ietf/adapter.js +105 -60
- package/ietf/adapter.js.map +1 -1
- package/ietf/aliases.d.ts +1 -78
- package/ietf/aliases.d.ts.map +1 -1
- package/ietf/cluster.d.ts +9 -123
- package/ietf/cluster.d.ts.map +1 -1
- package/ietf/cluster.js +84 -44
- package/ietf/cluster.js.map +1 -1
- package/ietf/connection.d.ts +6 -72
- package/ietf/connection.d.ts.map +1 -1
- package/ietf/connection.js +62 -56
- package/ietf/connection.js.map +1 -1
- package/ietf/error.d.ts +11 -0
- package/ietf/error.d.ts.map +1 -0
- package/ietf/error.js +193 -0
- package/ietf/error.js.map +1 -0
- package/ietf/fetch.d.ts +7 -20
- package/ietf/fetch.d.ts.map +1 -1
- package/ietf/fetch.js +52 -22
- package/ietf/fetch.js.map +1 -1
- package/ietf/filter.d.ts +2 -0
- package/ietf/filter.d.ts.map +1 -1
- package/ietf/filter.js +10 -1
- package/ietf/filter.js.map +1 -1
- package/ietf/goaway.d.ts.map +1 -1
- package/ietf/goaway.js +22 -5
- package/ietf/goaway.js.map +1 -1
- package/ietf/hidden.d.ts +2 -0
- package/ietf/hidden.d.ts.map +1 -0
- package/ietf/hidden.js +30 -0
- package/ietf/hidden.js.map +1 -0
- package/ietf/index.d.ts +2 -0
- package/ietf/index.d.ts.map +1 -1
- package/ietf/index.js +2 -0
- package/ietf/index.js.map +1 -1
- package/ietf/object.d.ts +15 -8
- package/ietf/object.d.ts.map +1 -1
- package/ietf/object.js +51 -36
- package/ietf/object.js.map +1 -1
- package/ietf/parameters.d.ts +14 -2
- package/ietf/parameters.d.ts.map +1 -1
- package/ietf/parameters.js +97 -29
- package/ietf/parameters.js.map +1 -1
- package/ietf/properties.d.ts +1 -0
- package/ietf/properties.d.ts.map +1 -1
- package/ietf/properties.js +14 -0
- package/ietf/properties.js.map +1 -1
- package/ietf/publish.d.ts +19 -2
- package/ietf/publish.d.ts.map +1 -1
- package/ietf/publish.js +40 -6
- package/ietf/publish.js.map +1 -1
- package/ietf/publish_namespace.d.ts +25 -0
- package/ietf/publish_namespace.d.ts.map +1 -1
- package/ietf/publish_namespace.js +63 -0
- package/ietf/publish_namespace.js.map +1 -1
- package/ietf/publisher.d.ts +1 -82
- package/ietf/publisher.d.ts.map +1 -1
- package/ietf/publisher.js +483 -235
- package/ietf/publisher.js.map +1 -1
- package/ietf/solicit.d.ts +1 -40
- package/ietf/solicit.d.ts.map +1 -1
- package/ietf/subscribe.d.ts +8 -6
- package/ietf/subscribe.d.ts.map +1 -1
- package/ietf/subscribe.js +33 -27
- package/ietf/subscribe.js.map +1 -1
- package/ietf/subscribe_namespace.d.ts +8 -2
- package/ietf/subscribe_namespace.d.ts.map +1 -1
- package/ietf/subscribe_namespace.js +18 -8
- package/ietf/subscribe_namespace.js.map +1 -1
- package/ietf/subscriber.d.ts +1 -65
- package/ietf/subscriber.d.ts.map +1 -1
- package/ietf/subscriber.js +337 -123
- package/ietf/subscriber.js.map +1 -1
- package/ietf/token.d.ts +2 -0
- package/ietf/token.d.ts.map +1 -0
- package/ietf/token.js +99 -0
- package/ietf/token.js.map +1 -0
- package/ietf/track.d.ts +4 -0
- package/ietf/track.d.ts.map +1 -1
- package/ietf/track.js +6 -20
- package/ietf/track.js.map +1 -1
- package/ietf/version.d.ts +12 -1
- package/ietf/version.d.ts.map +1 -1
- package/ietf/version.js +13 -0
- package/ietf/version.js.map +1 -1
- package/index.d.ts +12 -7
- package/index.d.ts.map +1 -1
- package/index.js +10 -5
- package/index.js.map +1 -1
- package/internal.d.ts +115 -1
- package/internal.d.ts.map +1 -1
- package/internal.js +108 -0
- package/internal.js.map +1 -1
- package/lite/announce.d.ts +60 -10
- package/lite/announce.d.ts.map +1 -1
- package/lite/announce.js +176 -31
- package/lite/announce.js.map +1 -1
- package/lite/connection.d.ts +9 -59
- package/lite/connection.d.ts.map +1 -1
- package/lite/connection.js +34 -35
- package/lite/connection.js.map +1 -1
- package/lite/datagram.d.ts +3 -2
- package/lite/datagram.d.ts.map +1 -1
- package/lite/datagram.js +7 -8
- package/lite/datagram.js.map +1 -1
- package/lite/fetch.d.ts +15 -1
- package/lite/fetch.d.ts.map +1 -1
- package/lite/fetch.js +39 -7
- package/lite/fetch.js.map +1 -1
- package/lite/goaway.d.ts.map +1 -1
- package/lite/goaway.js +7 -1
- package/lite/goaway.js.map +1 -1
- package/lite/group.d.ts +30 -12
- package/lite/group.d.ts.map +1 -1
- package/lite/group.js +68 -26
- package/lite/group.js.map +1 -1
- package/lite/message.d.ts +2 -2
- package/lite/message.d.ts.map +1 -1
- package/lite/message.js +14 -5
- package/lite/message.js.map +1 -1
- package/lite/priority.d.ts +1 -61
- package/lite/priority.d.ts.map +1 -1
- package/lite/priority.js +4 -5
- package/lite/priority.js.map +1 -1
- package/lite/publisher.d.ts +1 -69
- package/lite/publisher.d.ts.map +1 -1
- package/lite/publisher.js +630 -262
- package/lite/publisher.js.map +1 -1
- package/lite/setup.d.ts +8 -8
- package/lite/setup.d.ts.map +1 -1
- package/lite/setup.js +33 -30
- package/lite/setup.js.map +1 -1
- package/lite/subscribe.d.ts +71 -17
- package/lite/subscribe.d.ts.map +1 -1
- package/lite/subscribe.js +205 -53
- package/lite/subscribe.js.map +1 -1
- package/lite/subscriber.d.ts +15 -56
- package/lite/subscriber.d.ts.map +1 -1
- package/lite/subscriber.js +451 -247
- package/lite/subscriber.js.map +1 -1
- package/lite/track.d.ts +4 -10
- package/lite/track.d.ts.map +1 -1
- package/lite/track.js +34 -29
- package/lite/track.js.map +1 -1
- package/lite/version.d.ts +42 -6
- package/lite/version.d.ts.map +1 -1
- package/lite/version.js +126 -10
- package/lite/version.js.map +1 -1
- package/origin.d.ts +256 -29
- package/origin.d.ts.map +1 -1
- package/origin.js +1427 -37
- package/origin.js.map +1 -1
- package/package.json +8 -3
- package/path.d.ts +25 -7
- package/path.d.ts.map +1 -1
- package/path.js +5 -3
- package/path.js.map +1 -1
- package/stream.d.ts +73 -14
- package/stream.d.ts.map +1 -1
- package/stream.js +372 -141
- package/stream.js.map +1 -1
- package/tail.d.ts +18 -0
- package/tail.d.ts.map +1 -0
- package/tail.js +167 -0
- package/tail.js.map +1 -0
- package/time.d.ts +15 -2
- package/time.d.ts.map +1 -1
- package/time.js +28 -9
- package/time.js.map +1 -1
- package/track.d.ts +211 -83
- package/track.d.ts.map +1 -1
- package/track.js +816 -205
- package/track.js.map +1 -1
- package/util/abort.d.ts +2 -0
- package/util/abort.d.ts.map +1 -0
- package/util/abort.js +20 -0
- package/util/abort.js.map +1 -0
- package/util/log.d.ts +5 -0
- package/util/log.d.ts.map +1 -0
- package/util/log.js +17 -0
- package/util/log.js.map +1 -0
- package/util/u64.d.ts +39 -0
- package/util/u64.d.ts.map +1 -0
- package/util/u64.js +83 -0
- package/util/u64.js.map +1 -0
- package/util/varint.d.ts +29 -0
- package/util/varint.d.ts.map +1 -0
- package/util/varint.js +198 -0
- package/util/varint.js.map +1 -0
- package/varint.d.ts +10 -6
- package/varint.d.ts.map +1 -1
- package/varint.js +40 -237
- package/varint.js.map +1 -1
- package/wire.d.ts +80 -0
- package/wire.d.ts.map +1 -0
- package/wire.js +32 -0
- package/wire.js.map +1 -0
- package/zod.d.ts +1 -1
- package/zod.d.ts.map +1 -1
- package/zod.js.map +1 -1
- package/mock.d.ts +0 -66
- package/mock.d.ts.map +0 -1
- package/mock.js +0 -243
- package/mock.js.map +0 -1
package/ietf/subscribe.js
CHANGED
|
@@ -12,10 +12,10 @@ const GROUP_ORDER = 0x02;
|
|
|
12
12
|
*
|
|
13
13
|
* moq-lite joins at the start of the current group, which is a decodable point, and
|
|
14
14
|
* draft-20's relative form is the first that can name it without knowing Largest Object.
|
|
15
|
-
* Earlier drafts
|
|
15
|
+
* Earlier drafts request unfiltered delivery because this client does not send joining FETCH.
|
|
16
16
|
*/
|
|
17
17
|
export function joinFilter(version) {
|
|
18
|
-
return Filter.isDraft20(version) ? { kind: "relative", groups: 1n } : { kind: "
|
|
18
|
+
return Filter.isDraft20(version) ? { kind: "relative", groups: 1n } : { kind: "unfiltered" };
|
|
19
19
|
}
|
|
20
20
|
export class Subscribe {
|
|
21
21
|
static id = 0x03;
|
|
@@ -29,7 +29,11 @@ export class Subscribe {
|
|
|
29
29
|
fill;
|
|
30
30
|
/** Whether the subscriber wants Track Properties on the response (INCLUDE_PROPERTIES). */
|
|
31
31
|
propertiesWanted;
|
|
32
|
-
|
|
32
|
+
/** Whether Objects are forwarded (FORWARD). We only serve forwarding subscriptions. */
|
|
33
|
+
forward;
|
|
34
|
+
/** Whether the request carried a Range Filter, which we refuse. Never encoded. */
|
|
35
|
+
rangeFilters;
|
|
36
|
+
constructor({ requestId, trackNamespace, trackName, subscriberPriority, filter, fill, propertiesWanted, forward, rangeFilters, }) {
|
|
33
37
|
this.requestId = requestId;
|
|
34
38
|
this.trackNamespace = trackNamespace;
|
|
35
39
|
this.trackName = trackName;
|
|
@@ -37,6 +41,8 @@ export class Subscribe {
|
|
|
37
41
|
this.filter = filter ?? { kind: "unfiltered" };
|
|
38
42
|
this.fill = fill;
|
|
39
43
|
this.propertiesWanted = propertiesWanted ?? true;
|
|
44
|
+
this.forward = forward ?? true;
|
|
45
|
+
this.rangeFilters = rangeFilters ?? false;
|
|
40
46
|
}
|
|
41
47
|
async #encode(w, version) {
|
|
42
48
|
await w.u62(this.requestId);
|
|
@@ -48,7 +54,7 @@ export class Subscribe {
|
|
|
48
54
|
if (version === Version.DRAFT_14) {
|
|
49
55
|
await w.u8(this.subscriberPriority);
|
|
50
56
|
await w.u8(GROUP_ORDER);
|
|
51
|
-
await w.bool(
|
|
57
|
+
await w.bool(this.forward);
|
|
52
58
|
await w.write(Filter.encode(this.filter, version));
|
|
53
59
|
await w.u53(0); // no parameters
|
|
54
60
|
}
|
|
@@ -57,7 +63,7 @@ export class Subscribe {
|
|
|
57
63
|
const params = new Parameters();
|
|
58
64
|
params.subscriberPriority = this.subscriberPriority;
|
|
59
65
|
params.groupOrder = GROUP_ORDER;
|
|
60
|
-
params.forward =
|
|
66
|
+
params.forward = this.forward;
|
|
61
67
|
params.subscriptionFilter = Filter.encode(this.filter, version);
|
|
62
68
|
// FILL_PARAMETERS and INCLUDE_PROPERTIES arrived in draft-20. An older peer reads
|
|
63
69
|
// either as an unknown parameter, which is a protocol violation, so they are
|
|
@@ -97,12 +103,9 @@ export class Subscribe {
|
|
|
97
103
|
groupOrder = GROUP_ORDER; // default to descending
|
|
98
104
|
}
|
|
99
105
|
const forward = await r.bool();
|
|
100
|
-
if (!forward) {
|
|
101
|
-
throw new Error(`unsupported forward value: ${forward}`);
|
|
102
|
-
}
|
|
103
106
|
const filter = await Filter.decodeInline(r);
|
|
104
107
|
await Parameters.decode(r, version); // ignore parameters
|
|
105
|
-
return new Subscribe({ requestId, trackNamespace, trackName, subscriberPriority, filter });
|
|
108
|
+
return new Subscribe({ requestId, trackNamespace, trackName, subscriberPriority, filter, forward });
|
|
106
109
|
}
|
|
107
110
|
// v15+: fields are in parameters
|
|
108
111
|
const params = await Parameters.decode(r, version);
|
|
@@ -114,17 +117,20 @@ export class Subscribe {
|
|
|
114
117
|
if (groupOrder === 0) {
|
|
115
118
|
groupOrder = GROUP_ORDER; // default to descending
|
|
116
119
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
// FILL_PARAMETERS and INCLUDE_PROPERTIES are draft-20 additions. An unknown message
|
|
122
|
-
// parameter is a protocol violation, so they stay rejected on the drafts that predate
|
|
123
|
-
// them rather than being quietly tolerated.
|
|
120
|
+
// FILL_PARAMETERS and INCLUDE_PROPERTIES are draft-20 additions, and the Range
|
|
121
|
+
// Filters draft-19 ones. An unknown message parameter is a protocol violation, so
|
|
122
|
+
// they stay rejected on the drafts that predate them rather than being quietly
|
|
123
|
+
// tolerated.
|
|
124
124
|
const draft20 = Filter.isDraft20(version);
|
|
125
125
|
if ((params.fillParameters !== undefined || params.includeProperties !== undefined) && !draft20) {
|
|
126
126
|
throw new Error("FILL_PARAMETERS and INCLUDE_PROPERTIES need draft-20");
|
|
127
127
|
}
|
|
128
|
+
if (params.rangeFilters && !Filter.hasRangeFilters(version)) {
|
|
129
|
+
throw new Error("Range Filters need draft-19");
|
|
130
|
+
}
|
|
131
|
+
if (params.trackPropertyFilter) {
|
|
132
|
+
throw new Error("TRACK_PROPERTY_FILTER is not allowed on SUBSCRIBE");
|
|
133
|
+
}
|
|
128
134
|
// An absent LOCATION_FILTER means the subscription is unfiltered.
|
|
129
135
|
const raw = params.subscriptionFilter;
|
|
130
136
|
const filter = raw !== undefined ? Filter.decode(raw, version) : { kind: "unfiltered" };
|
|
@@ -139,6 +145,8 @@ export class Subscribe {
|
|
|
139
145
|
fill,
|
|
140
146
|
// Defaults to 1, so an absent parameter means the subscriber wants them.
|
|
141
147
|
propertiesWanted: params.includeProperties ?? true,
|
|
148
|
+
forward: params.forward ?? true,
|
|
149
|
+
rangeFilters: params.rangeFilters,
|
|
142
150
|
});
|
|
143
151
|
}
|
|
144
152
|
}
|
|
@@ -149,10 +157,6 @@ export class SubscribeOk {
|
|
|
149
157
|
/**
|
|
150
158
|
* The largest Location in the track (LARGEST_OBJECT), which the draft requires once the
|
|
151
159
|
* track has content. It is what a subscriber sizes a fill against.
|
|
152
|
-
*
|
|
153
|
-
* Encoded on draft-20 only: the parameter is legal on earlier drafts too, but peers built
|
|
154
|
-
* before we sent it reject an unexpected SUBSCRIBE_OK parameter by closing the session,
|
|
155
|
-
* so emitting it there would break existing deployments over a hint.
|
|
156
160
|
*/
|
|
157
161
|
largest;
|
|
158
162
|
/**
|
|
@@ -179,7 +183,11 @@ export class SubscribeOk {
|
|
|
179
183
|
if (version === Version.DRAFT_14) {
|
|
180
184
|
await w.u62(0n); // expires = 0
|
|
181
185
|
await w.u8(this.properties.groupOrder ?? GROUP_ORDER);
|
|
182
|
-
await w.bool(
|
|
186
|
+
await w.bool(this.largest !== undefined);
|
|
187
|
+
if (this.largest !== undefined) {
|
|
188
|
+
await w.u62(this.largest.groupId);
|
|
189
|
+
await w.u62(this.largest.objectId);
|
|
190
|
+
}
|
|
183
191
|
await w.u53(0); // no parameters
|
|
184
192
|
}
|
|
185
193
|
else {
|
|
@@ -192,8 +200,7 @@ export class SubscribeOk {
|
|
|
192
200
|
if (version === Version.DRAFT_15 && this.properties.groupOrder !== undefined) {
|
|
193
201
|
params.groupOrder = this.properties.groupOrder;
|
|
194
202
|
}
|
|
195
|
-
|
|
196
|
-
if (this.largest !== undefined && Filter.isDraft20(version)) {
|
|
203
|
+
if (this.largest !== undefined) {
|
|
197
204
|
params.largest = this.largest;
|
|
198
205
|
}
|
|
199
206
|
await params.encode(w, version);
|
|
@@ -215,10 +222,9 @@ export class SubscribeOk {
|
|
|
215
222
|
let largest;
|
|
216
223
|
let properties = {};
|
|
217
224
|
if (version === Version.DRAFT_14) {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
}
|
|
225
|
+
// EXPIRES is when the publisher expects to end the subscription. That end
|
|
226
|
+
// arrives as PUBLISH_DONE regardless, so there is nothing to act on.
|
|
227
|
+
await r.u62();
|
|
222
228
|
await r.u8(); // Don't care about group order
|
|
223
229
|
const contentExists = await r.bool();
|
|
224
230
|
if (contentExists) {
|
package/ietf/subscribe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../src/ietf/subscribe.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Filter from \"./filter.ts\";\nimport * as Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { type MessageLocation, Parameters } from \"./parameters.ts\";\nimport * as Properties from \"./properties.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// we only support Group Order descending\nconst GROUP_ORDER = 0x02;\n\n/**\n * The filter this implementation joins a live track with.\n *\n * moq-lite joins at the start of the current group, which is a decodable point, and\n * draft-20's relative form is the first that can name it without knowing Largest Object.\n * Earlier drafts only get the next Object after the live edge, which begins mid-group.\n */\nexport function joinFilter(version: IetfVersion): Filter.Filter {\n\treturn Filter.isDraft20(version) ? { kind: \"relative\", groups: 1n } : { kind: \"nextObject\" };\n}\n\nexport class Subscribe {\n\tstatic id = 0x03;\n\n\trequestId: bigint;\n\ttrackNamespace: Path.Valid;\n\ttrackName: string;\n\tsubscriberPriority: number;\n\n\t/** Which Objects the subscription delivers, resolved by the publisher against the live edge. */\n\tfilter: Filter.Filter;\n\n\t/** The draft-20 backfill requested alongside it, or `undefined` for none. */\n\tfill?: Filter.Fill;\n\n\t/** Whether the subscriber wants Track Properties on the response (INCLUDE_PROPERTIES). */\n\tpropertiesWanted: boolean;\n\n\tconstructor({\n\t\trequestId,\n\t\ttrackNamespace,\n\t\ttrackName,\n\t\tsubscriberPriority,\n\t\tfilter,\n\t\tfill,\n\t\tpropertiesWanted,\n\t}: {\n\t\trequestId: bigint;\n\t\ttrackNamespace: Path.Valid;\n\t\ttrackName: string;\n\t\tsubscriberPriority: number;\n\t\tfilter?: Filter.Filter;\n\t\tfill?: Filter.Fill;\n\t\tpropertiesWanted?: boolean;\n\t}) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.trackName = trackName;\n\t\tthis.subscriberPriority = subscriberPriority;\n\t\tthis.filter = filter ?? { kind: \"unfiltered\" };\n\t\tthis.fill = fill;\n\t\tthis.propertiesWanted = propertiesWanted ?? true;\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 (draft-17 only, removed in draft-18 per #1615)\n\t\t}\n\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\tawait w.string(this.trackName);\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tawait w.u8(this.subscriberPriority);\n\t\t\tawait w.u8(GROUP_ORDER);\n\t\t\tawait w.bool(true); // forward = true\n\t\t\tawait w.write(Filter.encode(this.filter, version));\n\t\t\tawait w.u53(0); // no parameters\n\t\t} else {\n\t\t\t// v15+: fields moved into parameters\n\t\t\tconst params = new Parameters();\n\t\t\tparams.subscriberPriority = this.subscriberPriority;\n\t\t\tparams.groupOrder = GROUP_ORDER;\n\t\t\tparams.forward = true;\n\t\t\tparams.subscriptionFilter = Filter.encode(this.filter, version);\n\n\t\t\t// FILL_PARAMETERS and INCLUDE_PROPERTIES arrived in draft-20. An older peer reads\n\t\t\t// either as an unknown parameter, which is a protocol violation, so they are\n\t\t\t// dropped rather than downgraded.\n\t\t\tif (Filter.isDraft20(version)) {\n\t\t\t\tif (this.fill) {\n\t\t\t\t\tparams.fillParameters = Filter.encodeFill(this.fill, version);\n\t\t\t\t}\n\t\t\t\t// The default is 1, so only the opt-out is worth bytes.\n\t\t\t\tif (!this.propertiesWanted) {\n\t\t\t\t\tparams.includeProperties = false;\n\t\t\t\t}\n\t\t\t}\n\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<Subscribe> {\n\t\treturn Message.decode(r, (mr) => Subscribe.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<Subscribe> {\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta (read and ignore)\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\tconst trackName = await r.string();\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tconst subscriberPriority = await r.u8();\n\n\t\t\tlet groupOrder = await r.u8();\n\t\t\tif (groupOrder > 2) {\n\t\t\t\tthrow new Error(`unknown group order: ${groupOrder}`);\n\t\t\t}\n\t\t\tif (groupOrder === 0) {\n\t\t\t\tgroupOrder = GROUP_ORDER; // default to descending\n\t\t\t}\n\n\t\t\tconst forward = await r.bool();\n\t\t\tif (!forward) {\n\t\t\t\tthrow new Error(`unsupported forward value: ${forward}`);\n\t\t\t}\n\n\t\t\tconst filter = await Filter.decodeInline(r);\n\n\t\t\tawait Parameters.decode(r, version); // ignore parameters\n\n\t\t\treturn new Subscribe({ requestId, trackNamespace, trackName, subscriberPriority, filter });\n\t\t}\n\t\t// v15+: fields are in parameters\n\t\tconst params = await Parameters.decode(r, version);\n\t\tconst subscriberPriority = params.subscriberPriority ?? 128;\n\t\tlet groupOrder = params.groupOrder ?? GROUP_ORDER;\n\t\tif (groupOrder > 2) {\n\t\t\tthrow new Error(`unknown group order: ${groupOrder}`);\n\t\t}\n\t\tif (groupOrder === 0) {\n\t\t\tgroupOrder = GROUP_ORDER; // default to descending\n\t\t}\n\n\t\tconst forward = params.forward ?? true;\n\t\tif (!forward) {\n\t\t\tthrow new Error(`unsupported forward value: ${forward}`);\n\t\t}\n\n\t\t// FILL_PARAMETERS and INCLUDE_PROPERTIES are draft-20 additions. An unknown message\n\t\t// parameter is a protocol violation, so they stay rejected on the drafts that predate\n\t\t// them rather than being quietly tolerated.\n\t\tconst draft20 = Filter.isDraft20(version);\n\t\tif ((params.fillParameters !== undefined || params.includeProperties !== undefined) && !draft20) {\n\t\t\tthrow new Error(\"FILL_PARAMETERS and INCLUDE_PROPERTIES need draft-20\");\n\t\t}\n\n\t\t// An absent LOCATION_FILTER means the subscription is unfiltered.\n\t\tconst raw = params.subscriptionFilter;\n\t\tconst filter = raw !== undefined ? Filter.decode(raw, version) : { kind: \"unfiltered\" as const };\n\t\tconst rawFill = params.fillParameters;\n\t\tconst fill = rawFill !== undefined ? Filter.decodeFill(rawFill, version) : undefined;\n\n\t\treturn new Subscribe({\n\t\t\trequestId,\n\t\t\ttrackNamespace,\n\t\t\ttrackName,\n\t\t\tsubscriberPriority,\n\t\t\tfilter,\n\t\t\tfill,\n\t\t\t// Defaults to 1, so an absent parameter means the subscriber wants them.\n\t\t\tpropertiesWanted: params.includeProperties ?? true,\n\t\t});\n\t}\n}\n\nexport class SubscribeOk {\n\tstatic id = 0x04;\n\n\trequestId: bigint | undefined;\n\ttrackAlias: bigint;\n\n\t/**\n\t * The largest Location in the track (LARGEST_OBJECT), which the draft requires once the\n\t * track has content. It is what a subscriber sizes a fill against.\n\t *\n\t * Encoded on draft-20 only: the parameter is legal on earlier drafts too, but peers built\n\t * before we sent it reject an unexpected SUBSCRIBE_OK parameter by closing the session,\n\t * so emitting it there would break existing deployments over a hint.\n\t */\n\tlargest: MessageLocation | undefined;\n\n\t/**\n\t * The Track Properties to send (draft-17+): the track's Timescale and our group order.\n\t *\n\t * Empty opts the response out of properties entirely, which is what a peer that sent\n\t * INCLUDE_PROPERTIES=0 asked for; declaring no Timescale also opts the track out of\n\t * timestamps, so the subscriber times objects by arrival.\n\t */\n\tproperties: Properties.Properties;\n\n\tconstructor({\n\t\trequestId,\n\t\ttrackAlias,\n\t\tlargest,\n\t\tproperties,\n\t}: {\n\t\trequestId?: bigint;\n\t\ttrackAlias: bigint;\n\t\tlargest?: MessageLocation;\n\t\tproperties?: Properties.Properties;\n\t}) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackAlias = trackAlias;\n\t\tthis.largest = largest;\n\t\tthis.properties = properties ?? {};\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(this.trackAlias);\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tawait w.u62(0n); // expires = 0\n\t\t\tawait w.u8(this.properties.groupOrder ?? GROUP_ORDER);\n\t\t\tawait w.bool(false); // content exists = false\n\t\t\tawait w.u53(0); // no parameters\n\t\t} else {\n\t\t\t// v15+: just parameters after track_alias\n\t\t\tconst params = new Parameters();\n\t\t\t// GROUP_ORDER is a legal SUBSCRIBE_OK parameter only through draft-15; a later peer\n\t\t\t// closes the session with PROTOCOL_VIOLATION when it sees one. The publisher's\n\t\t\t// preference is a DEFAULT_PUBLISHER_GROUP_ORDER track property instead, which we\n\t\t\t// write from draft-17 on. Draft-16 gets neither form; see Properties.encode.\n\t\t\tif (version === Version.DRAFT_15 && this.properties.groupOrder !== undefined) {\n\t\t\t\tparams.groupOrder = this.properties.groupOrder;\n\t\t\t}\n\t\t\t// See the field doc for why LARGEST_OBJECT stays draft-20 only.\n\t\t\tif (this.largest !== undefined && Filter.isDraft20(version)) {\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, this.properties, 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<SubscribeOk> {\n\t\treturn Message.decode(r, (mr) => SubscribeOk.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<SubscribeOk> {\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 trackAlias = await r.u62();\n\t\tlet largest: MessageLocation | undefined;\n\t\tlet properties: Properties.Properties = {};\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tconst expires = await r.u62();\n\t\t\tif (expires !== BigInt(0)) {\n\t\t\t\tthrow new Error(`unsupported expires: ${expires}`);\n\t\t\t}\n\n\t\t\tawait r.u8(); // Don't care about group order\n\n\t\t\tconst contentExists = await r.bool();\n\t\t\tif (contentExists) {\n\t\t\t\tconst groupId = await r.u62();\n\t\t\t\tconst objectId = await r.u62();\n\t\t\t\tlargest = { groupId, objectId };\n\t\t\t}\n\n\t\t\tawait Parameters.decode(r, version); // ignore parameters\n\t\t} else {\n\t\t\t// v15+: parameters followed by Track Properties (draft-17+). LARGEST_OBJECT is\n\t\t\t// required on every draft once the track has content, so rejecting it would tear\n\t\t\t// down a session over a parameter compliant publishers must send.\n\t\t\tlargest = (await Parameters.decode(r, version)).largest;\n\t\t\tproperties = await Properties.decode(r, version);\n\t\t}\n\n\t\treturn new SubscribeOk({ requestId, trackAlias, largest, properties });\n\t}\n}\n\nexport class SubscribeError {\n\tstatic id = 0x05;\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<SubscribeError> {\n\t\treturn Message.decode(r, SubscribeError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<SubscribeError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\n\t\treturn new SubscribeError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\nexport class SubscribeUpdate {\n\tstatic id = 0x02;\n\n\trequestId: bigint;\n\n\tconstructor({ requestId }: { requestId: bigint }) {\n\t\tthis.requestId = requestId;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tawait w.u62(this.requestId);\n\t\t\tawait w.u62(0n); // subscription_request_id\n\t\t\tawait w.u62(0n); // start_group\n\t\t\tawait w.u62(0n); // start_object\n\t\t\tawait w.u62(0n); // end_group\n\t\t\tawait w.u8(128); // subscriber_priority\n\t\t\tawait w.bool(true); // forward\n\t\t\tawait w.u53(0); // no parameters\n\t\t} else if (version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\tawait w.u62(this.requestId);\n\t\t\tawait w.u62(0n); // subscription_request_id\n\t\t\tconst params = new Parameters();\n\t\t\tawait params.encode(w, version);\n\t\t} else {\n\t\t\t// v17+: REQUEST_UPDATE\n\t\t\tawait w.u62(this.requestId);\n\t\t\tif (version === Version.DRAFT_17) {\n\t\t\t\tawait w.u62(0n); // required_request_id_delta (draft-17 only, removed in draft-18 per #1615)\n\t\t\t}\n\t\t\tconst params = new Parameters();\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<SubscribeUpdate> {\n\t\treturn Message.decode(r, (mr) => SubscribeUpdate.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<SubscribeUpdate> {\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tconst requestId = await r.u62();\n\t\t\tawait r.u62(); // subscription_request_id\n\t\t\tawait r.u62(); // start_group\n\t\t\tawait r.u62(); // start_object\n\t\t\tawait r.u62(); // end_group\n\t\t\tawait r.u8(); // subscriber_priority\n\t\t\tawait r.bool(); // forward\n\t\t\tawait Parameters.decode(r, version); // parameters\n\t\t\treturn new SubscribeUpdate({ requestId });\n\t\t} else if (version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\tconst requestId = await r.u62();\n\t\t\tawait r.u62(); // subscription_request_id\n\t\t\tawait Parameters.decode(r, version);\n\t\t\treturn new SubscribeUpdate({ requestId });\n\t\t} else {\n\t\t\t// v17+: REQUEST_UPDATE\n\t\t\tconst requestId = await r.u62();\n\t\t\tif (version === Version.DRAFT_17) {\n\t\t\t\tawait r.u62(); // required_request_id_delta (draft-17 only, removed in draft-18 per #1615)\n\t\t\t}\n\t\t\tawait Parameters.decode(r, version);\n\t\t\treturn new SubscribeUpdate({ requestId });\n\t\t}\n\t}\n}\n\nexport class Unsubscribe {\n\tstatic readonly id = 0x0a;\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<Unsubscribe> {\n\t\treturn Message.decode(r, Unsubscribe.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<Unsubscribe> {\n\t\tconst requestId = await r.u62();\n\t\treturn new Unsubscribe({ requestId });\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../src/ietf/subscribe.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAwB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAoB,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,yCAAyC;AACzC,MAAM,WAAW,GAAG,IAAI,CAAC;AAEzB;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,OAAoB;IAC9C,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAC9F,CAAC;AAED,MAAM,OAAO,SAAS;IACrB,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAEjB,SAAS,CAAS;IAClB,cAAc,CAAa;IAC3B,SAAS,CAAS;IAClB,kBAAkB,CAAS;IAE3B,gGAAgG;IAChG,MAAM,CAAgB;IAEtB,6EAA6E;IAC7E,IAAI,CAAe;IAEnB,0FAA0F;IAC1F,gBAAgB,CAAU;IAE1B,uFAAuF;IACvF,OAAO,CAAU;IAEjB,kFAAkF;IAClF,YAAY,CAAU;IAEtB,YAAY,EACX,SAAS,EACT,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,MAAM,EACN,IAAI,EACJ,gBAAgB,EAChB,OAAO,EACP,YAAY,GAWZ;QACA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,IAAI,IAAI,CAAC;QACjD,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,KAAK,CAAC;IAC3C,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,+EAA+E;QACjG,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;QAE/B,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACpC,MAAM,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YACxB,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACjC,CAAC;aAAM,CAAC;YACP,qCAAqC;YACrC,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;YACpD,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC;YAChC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC9B,MAAM,CAAC,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAEhE,kFAAkF;YAClF,6EAA6E;YAC7E,kCAAkC;YAClC,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACf,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC/D,CAAC;gBACD,wDAAwD;gBACxD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC5B,MAAM,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAClC,CAAC;YACF,CAAC;YAED,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,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAClE,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,8CAA8C;QAC9D,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QAEnC,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,kBAAkB,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;YAExC,IAAI,UAAU,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;gBACtB,UAAU,GAAG,WAAW,CAAC,CAAC,wBAAwB;YACnD,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAE5C,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAoB;YAEzD,OAAO,IAAI,SAAS,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,iCAAiC;QACjC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,IAAI,GAAG,CAAC;QAC5D,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,WAAW,CAAC;QAClD,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACtB,UAAU,GAAG,WAAW,CAAC,CAAC,wBAAwB;QACnD,CAAC;QAED,+EAA+E;QAC/E,kFAAkF;QAClF,+EAA+E;QAC/E,aAAa;QACb,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACjG,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACtE,CAAC;QAED,kEAAkE;QAClE,MAAM,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAAC;QACtC,MAAM,MAAM,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAqB,EAAE,CAAC;QACjG,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC;QACtC,MAAM,IAAI,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAErF,OAAO,IAAI,SAAS,CAAC;YACpB,SAAS;YACT,cAAc;YACd,SAAS;YACT,kBAAkB;YAClB,MAAM;YACN,IAAI;YACJ,yEAAyE;YACzE,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,IAAI,IAAI;YAClD,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;YAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;SACjC,CAAC,CAAC;IACJ,CAAC;CACD;AAED,MAAM,OAAO,WAAW;IACvB,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAEjB,SAAS,CAAqB;IAC9B,UAAU,CAAS;IAEnB;;;OAGG;IACH,OAAO,CAA8B;IAErC;;;;;;OAMG;IACH,UAAU,CAAwB;IAElC,YAAY,EACX,SAAS,EACT,UAAU,EACV,OAAO,EACP,UAAU,GAMV;QACA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,EAAE,CAAC;IACpC,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,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7B,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc;YAC/B,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,WAAW,CAAC,CAAC;YACtD,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;YACzC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAChC,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,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACjC,CAAC;aAAM,CAAC;YACP,0CAA0C;YAC1C,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,oFAAoF;YACpF,+EAA+E;YAC/E,iFAAiF;YACjF,6EAA6E;YAC7E,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC9E,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAChD,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC/B,CAAC;YACD,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAEhC,+DAA+D;YAC/D,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACtD,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,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,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,OAAoC,CAAC;QACzC,IAAI,UAAU,GAA0B,EAAE,CAAC;QAE3C,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,0EAA0E;YAC1E,qEAAqE;YACrE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YAEd,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,+BAA+B;YAE7C,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,aAAa,EAAE,CAAC;gBACnB,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC/B,OAAO,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;YACjC,CAAC;YAED,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAoB;QAC1D,CAAC;aAAM,CAAC;YACP,+EAA+E;YAC/E,iFAAiF;YACjF,kEAAkE;YAClE,OAAO,GAAG,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YACxD,UAAU,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,IAAI,WAAW,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACxE,CAAC;CACD;AAED,MAAM,OAAO,cAAc;IAC1B,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,cAAc,CAAC,OAAO,CAAC,CAAC;IAClD,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;QAEtC,OAAO,IAAI,cAAc,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;IACnE,CAAC;CACD;AAED,MAAM,OAAO,eAAe;IAC3B,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAEjB,SAAS,CAAS;IAElB,YAAY,EAAE,SAAS,EAAyB;QAC/C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QAC5C,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5B,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,0BAA0B;YAC3C,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc;YAC/B,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe;YAChC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;YAC7B,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,sBAAsB;YACvC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;YAC9B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACjC,CAAC;aAAM,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YACzE,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5B,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,0BAA0B;YAC3C,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACP,uBAAuB;YACvB,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5B,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAClC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,2EAA2E;YAC7F,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,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,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QACnD,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YAChC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,0BAA0B;YACzC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,cAAc;YAC7B,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,eAAe;YAC9B,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY;YAC3B,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,sBAAsB;YACpC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU;YAC1B,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa;YAClD,OAAO,IAAI,eAAe,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YACzE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YAChC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,0BAA0B;YACzC,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACpC,OAAO,IAAI,eAAe,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACP,uBAAuB;YACvB,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YAChC,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAClC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,2EAA2E;YAC3F,CAAC;YACD,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACpC,OAAO,IAAI,eAAe,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3C,CAAC;IACF,CAAC;CACD;AAED,MAAM,OAAO,WAAW;IACvB,MAAM,CAAU,EAAE,GAAG,IAAI,CAAC;IAE1B,SAAS,CAAS;IAElB,YAAY,EAAE,SAAS,EAAyB;QAC/C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS;QACtB,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,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,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAChC,OAAO,IAAI,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IACvC,CAAC;CACD","sourcesContent":["import type * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Filter from \"./filter.ts\";\nimport * as Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { type MessageLocation, Parameters } from \"./parameters.ts\";\nimport * as Properties from \"./properties.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// we only support Group Order descending\nconst GROUP_ORDER = 0x02;\n\n/**\n * The filter this implementation joins a live track with.\n *\n * moq-lite joins at the start of the current group, which is a decodable point, and\n * draft-20's relative form is the first that can name it without knowing Largest Object.\n * Earlier drafts request unfiltered delivery because this client does not send joining FETCH.\n */\nexport function joinFilter(version: IetfVersion): Filter.Filter {\n\treturn Filter.isDraft20(version) ? { kind: \"relative\", groups: 1n } : { kind: \"unfiltered\" };\n}\n\nexport class Subscribe {\n\tstatic id = 0x03;\n\n\trequestId: bigint;\n\ttrackNamespace: Path.Valid;\n\ttrackName: string;\n\tsubscriberPriority: number;\n\n\t/** Which Objects the subscription delivers, resolved by the publisher against the live edge. */\n\tfilter: Filter.Filter;\n\n\t/** The draft-20 backfill requested alongside it, or `undefined` for none. */\n\tfill?: Filter.Fill;\n\n\t/** Whether the subscriber wants Track Properties on the response (INCLUDE_PROPERTIES). */\n\tpropertiesWanted: boolean;\n\n\t/** Whether Objects are forwarded (FORWARD). We only serve forwarding subscriptions. */\n\tforward: boolean;\n\n\t/** Whether the request carried a Range Filter, which we refuse. Never encoded. */\n\trangeFilters: boolean;\n\n\tconstructor({\n\t\trequestId,\n\t\ttrackNamespace,\n\t\ttrackName,\n\t\tsubscriberPriority,\n\t\tfilter,\n\t\tfill,\n\t\tpropertiesWanted,\n\t\tforward,\n\t\trangeFilters,\n\t}: {\n\t\trequestId: bigint;\n\t\ttrackNamespace: Path.Valid;\n\t\ttrackName: string;\n\t\tsubscriberPriority: number;\n\t\tfilter?: Filter.Filter;\n\t\tfill?: Filter.Fill;\n\t\tpropertiesWanted?: boolean;\n\t\tforward?: boolean;\n\t\trangeFilters?: boolean;\n\t}) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.trackName = trackName;\n\t\tthis.subscriberPriority = subscriberPriority;\n\t\tthis.filter = filter ?? { kind: \"unfiltered\" };\n\t\tthis.fill = fill;\n\t\tthis.propertiesWanted = propertiesWanted ?? true;\n\t\tthis.forward = forward ?? true;\n\t\tthis.rangeFilters = rangeFilters ?? false;\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 (draft-17 only, removed in draft-18 per #1615)\n\t\t}\n\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\tawait w.string(this.trackName);\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tawait w.u8(this.subscriberPriority);\n\t\t\tawait w.u8(GROUP_ORDER);\n\t\t\tawait w.bool(this.forward);\n\t\t\tawait w.write(Filter.encode(this.filter, version));\n\t\t\tawait w.u53(0); // no parameters\n\t\t} else {\n\t\t\t// v15+: fields moved into parameters\n\t\t\tconst params = new Parameters();\n\t\t\tparams.subscriberPriority = this.subscriberPriority;\n\t\t\tparams.groupOrder = GROUP_ORDER;\n\t\t\tparams.forward = this.forward;\n\t\t\tparams.subscriptionFilter = Filter.encode(this.filter, version);\n\n\t\t\t// FILL_PARAMETERS and INCLUDE_PROPERTIES arrived in draft-20. An older peer reads\n\t\t\t// either as an unknown parameter, which is a protocol violation, so they are\n\t\t\t// dropped rather than downgraded.\n\t\t\tif (Filter.isDraft20(version)) {\n\t\t\t\tif (this.fill) {\n\t\t\t\t\tparams.fillParameters = Filter.encodeFill(this.fill, version);\n\t\t\t\t}\n\t\t\t\t// The default is 1, so only the opt-out is worth bytes.\n\t\t\t\tif (!this.propertiesWanted) {\n\t\t\t\t\tparams.includeProperties = false;\n\t\t\t\t}\n\t\t\t}\n\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<Subscribe> {\n\t\treturn Message.decode(r, (mr) => Subscribe.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<Subscribe> {\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta (read and ignore)\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\tconst trackName = await r.string();\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tconst subscriberPriority = await r.u8();\n\n\t\t\tlet groupOrder = await r.u8();\n\t\t\tif (groupOrder > 2) {\n\t\t\t\tthrow new Error(`unknown group order: ${groupOrder}`);\n\t\t\t}\n\t\t\tif (groupOrder === 0) {\n\t\t\t\tgroupOrder = GROUP_ORDER; // default to descending\n\t\t\t}\n\n\t\t\tconst forward = await r.bool();\n\t\t\tconst filter = await Filter.decodeInline(r);\n\n\t\t\tawait Parameters.decode(r, version); // ignore parameters\n\n\t\t\treturn new Subscribe({ requestId, trackNamespace, trackName, subscriberPriority, filter, forward });\n\t\t}\n\t\t// v15+: fields are in parameters\n\t\tconst params = await Parameters.decode(r, version);\n\t\tconst subscriberPriority = params.subscriberPriority ?? 128;\n\t\tlet groupOrder = params.groupOrder ?? GROUP_ORDER;\n\t\tif (groupOrder > 2) {\n\t\t\tthrow new Error(`unknown group order: ${groupOrder}`);\n\t\t}\n\t\tif (groupOrder === 0) {\n\t\t\tgroupOrder = GROUP_ORDER; // default to descending\n\t\t}\n\n\t\t// FILL_PARAMETERS and INCLUDE_PROPERTIES are draft-20 additions, and the Range\n\t\t// Filters draft-19 ones. An unknown message parameter is a protocol violation, so\n\t\t// they stay rejected on the drafts that predate them rather than being quietly\n\t\t// tolerated.\n\t\tconst draft20 = Filter.isDraft20(version);\n\t\tif ((params.fillParameters !== undefined || params.includeProperties !== undefined) && !draft20) {\n\t\t\tthrow new Error(\"FILL_PARAMETERS and INCLUDE_PROPERTIES need draft-20\");\n\t\t}\n\t\tif (params.rangeFilters && !Filter.hasRangeFilters(version)) {\n\t\t\tthrow new Error(\"Range Filters need draft-19\");\n\t\t}\n\t\tif (params.trackPropertyFilter) {\n\t\t\tthrow new Error(\"TRACK_PROPERTY_FILTER is not allowed on SUBSCRIBE\");\n\t\t}\n\n\t\t// An absent LOCATION_FILTER means the subscription is unfiltered.\n\t\tconst raw = params.subscriptionFilter;\n\t\tconst filter = raw !== undefined ? Filter.decode(raw, version) : { kind: \"unfiltered\" as const };\n\t\tconst rawFill = params.fillParameters;\n\t\tconst fill = rawFill !== undefined ? Filter.decodeFill(rawFill, version) : undefined;\n\n\t\treturn new Subscribe({\n\t\t\trequestId,\n\t\t\ttrackNamespace,\n\t\t\ttrackName,\n\t\t\tsubscriberPriority,\n\t\t\tfilter,\n\t\t\tfill,\n\t\t\t// Defaults to 1, so an absent parameter means the subscriber wants them.\n\t\t\tpropertiesWanted: params.includeProperties ?? true,\n\t\t\tforward: params.forward ?? true,\n\t\t\trangeFilters: params.rangeFilters,\n\t\t});\n\t}\n}\n\nexport class SubscribeOk {\n\tstatic id = 0x04;\n\n\trequestId: bigint | undefined;\n\ttrackAlias: bigint;\n\n\t/**\n\t * The largest Location in the track (LARGEST_OBJECT), which the draft requires once the\n\t * track has content. It is what a subscriber sizes a fill against.\n\t */\n\tlargest: MessageLocation | undefined;\n\n\t/**\n\t * The Track Properties to send (draft-17+): the track's Timescale and our group order.\n\t *\n\t * Empty opts the response out of properties entirely, which is what a peer that sent\n\t * INCLUDE_PROPERTIES=0 asked for; declaring no Timescale also opts the track out of\n\t * timestamps, so the subscriber times objects by arrival.\n\t */\n\tproperties: Properties.Properties;\n\n\tconstructor({\n\t\trequestId,\n\t\ttrackAlias,\n\t\tlargest,\n\t\tproperties,\n\t}: {\n\t\trequestId?: bigint;\n\t\ttrackAlias: bigint;\n\t\tlargest?: MessageLocation;\n\t\tproperties?: Properties.Properties;\n\t}) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackAlias = trackAlias;\n\t\tthis.largest = largest;\n\t\tthis.properties = properties ?? {};\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(this.trackAlias);\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tawait w.u62(0n); // expires = 0\n\t\t\tawait w.u8(this.properties.groupOrder ?? GROUP_ORDER);\n\t\t\tawait w.bool(this.largest !== undefined);\n\t\t\tif (this.largest !== undefined) {\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.u53(0); // no parameters\n\t\t} else {\n\t\t\t// v15+: just parameters after track_alias\n\t\t\tconst params = new Parameters();\n\t\t\t// GROUP_ORDER is a legal SUBSCRIBE_OK parameter only through draft-15; a later peer\n\t\t\t// closes the session with PROTOCOL_VIOLATION when it sees one. The publisher's\n\t\t\t// preference is a DEFAULT_PUBLISHER_GROUP_ORDER track property instead, which we\n\t\t\t// write from draft-17 on. Draft-16 gets neither form; see Properties.encode.\n\t\t\tif (version === Version.DRAFT_15 && this.properties.groupOrder !== undefined) {\n\t\t\t\tparams.groupOrder = this.properties.groupOrder;\n\t\t\t}\n\t\t\tif (this.largest !== undefined) {\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, this.properties, 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<SubscribeOk> {\n\t\treturn Message.decode(r, (mr) => SubscribeOk.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<SubscribeOk> {\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 trackAlias = await r.u62();\n\t\tlet largest: MessageLocation | undefined;\n\t\tlet properties: Properties.Properties = {};\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\t// EXPIRES is when the publisher expects to end the subscription. That end\n\t\t\t// arrives as PUBLISH_DONE regardless, so there is nothing to act on.\n\t\t\tawait r.u62();\n\n\t\t\tawait r.u8(); // Don't care about group order\n\n\t\t\tconst contentExists = await r.bool();\n\t\t\tif (contentExists) {\n\t\t\t\tconst groupId = await r.u62();\n\t\t\t\tconst objectId = await r.u62();\n\t\t\t\tlargest = { groupId, objectId };\n\t\t\t}\n\n\t\t\tawait Parameters.decode(r, version); // ignore parameters\n\t\t} else {\n\t\t\t// v15+: parameters followed by Track Properties (draft-17+). LARGEST_OBJECT is\n\t\t\t// required on every draft once the track has content, so rejecting it would tear\n\t\t\t// down a session over a parameter compliant publishers must send.\n\t\t\tlargest = (await Parameters.decode(r, version)).largest;\n\t\t\tproperties = await Properties.decode(r, version);\n\t\t}\n\n\t\treturn new SubscribeOk({ requestId, trackAlias, largest, properties });\n\t}\n}\n\nexport class SubscribeError {\n\tstatic id = 0x05;\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<SubscribeError> {\n\t\treturn Message.decode(r, SubscribeError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<SubscribeError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\n\t\treturn new SubscribeError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\nexport class SubscribeUpdate {\n\tstatic id = 0x02;\n\n\trequestId: bigint;\n\n\tconstructor({ requestId }: { requestId: bigint }) {\n\t\tthis.requestId = requestId;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tawait w.u62(this.requestId);\n\t\t\tawait w.u62(0n); // subscription_request_id\n\t\t\tawait w.u62(0n); // start_group\n\t\t\tawait w.u62(0n); // start_object\n\t\t\tawait w.u62(0n); // end_group\n\t\t\tawait w.u8(128); // subscriber_priority\n\t\t\tawait w.bool(true); // forward\n\t\t\tawait w.u53(0); // no parameters\n\t\t} else if (version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\tawait w.u62(this.requestId);\n\t\t\tawait w.u62(0n); // subscription_request_id\n\t\t\tconst params = new Parameters();\n\t\t\tawait params.encode(w, version);\n\t\t} else {\n\t\t\t// v17+: REQUEST_UPDATE\n\t\t\tawait w.u62(this.requestId);\n\t\t\tif (version === Version.DRAFT_17) {\n\t\t\t\tawait w.u62(0n); // required_request_id_delta (draft-17 only, removed in draft-18 per #1615)\n\t\t\t}\n\t\t\tconst params = new Parameters();\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<SubscribeUpdate> {\n\t\treturn Message.decode(r, (mr) => SubscribeUpdate.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<SubscribeUpdate> {\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tconst requestId = await r.u62();\n\t\t\tawait r.u62(); // subscription_request_id\n\t\t\tawait r.u62(); // start_group\n\t\t\tawait r.u62(); // start_object\n\t\t\tawait r.u62(); // end_group\n\t\t\tawait r.u8(); // subscriber_priority\n\t\t\tawait r.bool(); // forward\n\t\t\tawait Parameters.decode(r, version); // parameters\n\t\t\treturn new SubscribeUpdate({ requestId });\n\t\t} else if (version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\tconst requestId = await r.u62();\n\t\t\tawait r.u62(); // subscription_request_id\n\t\t\tawait Parameters.decode(r, version);\n\t\t\treturn new SubscribeUpdate({ requestId });\n\t\t} else {\n\t\t\t// v17+: REQUEST_UPDATE\n\t\t\tconst requestId = await r.u62();\n\t\t\tif (version === Version.DRAFT_17) {\n\t\t\t\tawait r.u62(); // required_request_id_delta (draft-17 only, removed in draft-18 per #1615)\n\t\t\t}\n\t\t\tawait Parameters.decode(r, version);\n\t\t\treturn new SubscribeUpdate({ requestId });\n\t\t}\n\t}\n}\n\nexport class Unsubscribe {\n\tstatic readonly id = 0x0a;\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<Unsubscribe> {\n\t\treturn Message.decode(r, Unsubscribe.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<Unsubscribe> {\n\t\tconst requestId = await r.u62();\n\t\treturn new Unsubscribe({ requestId });\n\t}\n}\n"]}
|
|
@@ -7,9 +7,12 @@ export declare class SubscribeNamespace {
|
|
|
7
7
|
static id: number;
|
|
8
8
|
namespace: Path.Valid;
|
|
9
9
|
requestId: bigint;
|
|
10
|
-
|
|
10
|
+
/** MoQ Hidden: also advertise hidden namespaces. Only sent to a peer that declared it. */
|
|
11
|
+
hidden: boolean;
|
|
12
|
+
constructor({ namespace, requestId, hidden, }: {
|
|
11
13
|
namespace: Path.Valid;
|
|
12
14
|
requestId: bigint;
|
|
15
|
+
hidden?: boolean;
|
|
13
16
|
});
|
|
14
17
|
encode(w: Writer, version: IetfVersion): Promise<void>;
|
|
15
18
|
static decode(r: Reader, version: IetfVersion): Promise<SubscribeNamespace>;
|
|
@@ -20,10 +23,13 @@ export declare class SubscribeNamespaceLegacy {
|
|
|
20
23
|
namespace: Path.Valid;
|
|
21
24
|
requestId: bigint;
|
|
22
25
|
subscribeOptions: number;
|
|
23
|
-
|
|
26
|
+
/** MoQ Hidden: see {@link SubscribeNamespace.hidden}. */
|
|
27
|
+
hidden: boolean;
|
|
28
|
+
constructor({ namespace, requestId, subscribeOptions, hidden, }: {
|
|
24
29
|
namespace: Path.Valid;
|
|
25
30
|
requestId: bigint;
|
|
26
31
|
subscribeOptions?: number;
|
|
32
|
+
hidden?: boolean;
|
|
27
33
|
});
|
|
28
34
|
encode(w: Writer, version: IetfVersion): Promise<void>;
|
|
29
35
|
static decode(r: Reader, version: IetfVersion): Promise<SubscribeNamespaceLegacy>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscribe_namespace.d.ts","sourceRoot":"","sources":["../../src/ietf/subscribe_namespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAIxC,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,cAAc,CAAC;AAqBzD,qBAAa,kBAAkB;;IAC9B,MAAM,CAAC,EAAE,SAAQ;IAEjB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"subscribe_namespace.d.ts","sourceRoot":"","sources":["../../src/ietf/subscribe_namespace.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,9 +26,12 @@ export class SubscribeNamespace {
|
|
|
26
26
|
static id = 0x50;
|
|
27
27
|
namespace;
|
|
28
28
|
requestId;
|
|
29
|
-
|
|
29
|
+
/** MoQ Hidden: also advertise hidden namespaces. Only sent to a peer that declared it. */
|
|
30
|
+
hidden;
|
|
31
|
+
constructor({ namespace, requestId, hidden = false, }) {
|
|
30
32
|
this.namespace = namespace;
|
|
31
33
|
this.requestId = requestId;
|
|
34
|
+
this.hidden = hidden;
|
|
32
35
|
}
|
|
33
36
|
async #encode(w, version) {
|
|
34
37
|
if (isLegacyVersion(version)) {
|
|
@@ -36,7 +39,9 @@ export class SubscribeNamespace {
|
|
|
36
39
|
}
|
|
37
40
|
await w.u62(this.requestId);
|
|
38
41
|
await Namespace.encode(w, this.namespace);
|
|
39
|
-
|
|
42
|
+
const params = new Parameters();
|
|
43
|
+
params.hidden = this.hidden;
|
|
44
|
+
await params.encode(w, version);
|
|
40
45
|
}
|
|
41
46
|
async encode(w, version) {
|
|
42
47
|
return Message.encode(w, (wr) => this.#encode(wr, version));
|
|
@@ -50,8 +55,8 @@ export class SubscribeNamespace {
|
|
|
50
55
|
}
|
|
51
56
|
const requestId = await r.u62();
|
|
52
57
|
const namespace = await Namespace.decode(r);
|
|
53
|
-
await Parameters.decode(r, version);
|
|
54
|
-
return new SubscribeNamespace({ namespace, requestId });
|
|
58
|
+
const params = await Parameters.decode(r, version);
|
|
59
|
+
return new SubscribeNamespace({ namespace, requestId, hidden: params.hidden });
|
|
55
60
|
}
|
|
56
61
|
}
|
|
57
62
|
// SUBSCRIBE_NAMESPACE message for draft-14 through draft-17 (type 0x11).
|
|
@@ -65,10 +70,13 @@ export class SubscribeNamespaceLegacy {
|
|
|
65
70
|
namespace;
|
|
66
71
|
requestId;
|
|
67
72
|
subscribeOptions; // v16/v17: default 0x01 (NAMESPACE only)
|
|
68
|
-
|
|
73
|
+
/** MoQ Hidden: see {@link SubscribeNamespace.hidden}. */
|
|
74
|
+
hidden;
|
|
75
|
+
constructor({ namespace, requestId, subscribeOptions = 1, hidden = false, }) {
|
|
69
76
|
this.namespace = namespace;
|
|
70
77
|
this.requestId = requestId;
|
|
71
78
|
this.subscribeOptions = subscribeOptions;
|
|
79
|
+
this.hidden = hidden;
|
|
72
80
|
}
|
|
73
81
|
async #encode(w, version) {
|
|
74
82
|
if (!isLegacyVersion(version)) {
|
|
@@ -82,7 +90,9 @@ export class SubscribeNamespaceLegacy {
|
|
|
82
90
|
if (version === Version.DRAFT_16 || version === Version.DRAFT_17) {
|
|
83
91
|
await w.u53(this.subscribeOptions);
|
|
84
92
|
}
|
|
85
|
-
|
|
93
|
+
const params = new Parameters();
|
|
94
|
+
params.hidden = this.hidden;
|
|
95
|
+
await params.encode(w, version);
|
|
86
96
|
}
|
|
87
97
|
async encode(w, version) {
|
|
88
98
|
return Message.encode(w, (wr) => this.#encode(wr, version));
|
|
@@ -103,8 +113,8 @@ export class SubscribeNamespaceLegacy {
|
|
|
103
113
|
if (version === Version.DRAFT_16 || version === Version.DRAFT_17) {
|
|
104
114
|
subscribeOptions = await r.u53();
|
|
105
115
|
}
|
|
106
|
-
await Parameters.decode(r, version);
|
|
107
|
-
return new SubscribeNamespaceLegacy({ namespace, requestId, subscribeOptions });
|
|
116
|
+
const params = await Parameters.decode(r, version);
|
|
117
|
+
return new SubscribeNamespaceLegacy({ namespace, requestId, subscribeOptions, hidden: params.hidden });
|
|
108
118
|
}
|
|
109
119
|
}
|
|
110
120
|
/// SUBSCRIBE_TRACKS message ID (0x51) introduced in draft-18 (#1542).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscribe_namespace.js","sourceRoot":"","sources":["../../src/ietf/subscribe_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// True for the drafts that use the legacy 0x11 SUBSCRIBE_NAMESPACE message.\n// Draft-18+ uses the renumbered 0x50 message instead.\nfunction isLegacyVersion(version: IetfVersion): boolean {\n\tswitch (version) {\n\t\tcase Version.DRAFT_14:\n\t\tcase Version.DRAFT_15:\n\t\tcase Version.DRAFT_16:\n\t\tcase Version.DRAFT_17:\n\t\t\treturn true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\n// SUBSCRIBE_NAMESPACE message (draft-18+, type 0x50).\n//\n// Draft-18 renumbered the message from 0x11 to 0x50 and dropped the Subscribe\n// Options field when it split SUBSCRIBE_TRACKS (0x51) off into its own message\n// type (#1542). Draft-14 through draft-17 use SubscribeNamespaceLegacy.\nexport class SubscribeNamespace {\n\tstatic id = 0x50;\n\n\tnamespace: Path.Valid;\n\trequestId: bigint;\n\n\tconstructor({ namespace, requestId }: { namespace: Path.Valid; requestId: bigint }) {\n\t\tthis.namespace = namespace;\n\t\tthis.requestId = requestId;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (isLegacyVersion(version)) {\n\t\t\tthrow new Error(`SUBSCRIBE_NAMESPACE (0x50) is draft-18+ only, not ${version}`);\n\t\t}\n\t\tawait w.u62(this.requestId);\n\t\tawait Namespace.encode(w, this.namespace);\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<SubscribeNamespace> {\n\t\treturn Message.decode(r, (rd) => SubscribeNamespace.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<SubscribeNamespace> {\n\t\tif (isLegacyVersion(version)) {\n\t\t\tthrow new Error(`SUBSCRIBE_NAMESPACE (0x50) is draft-18+ only, not ${version}`);\n\t\t}\n\t\tconst requestId = await r.u62();\n\t\tconst namespace = await Namespace.decode(r);\n\t\tawait Parameters.decode(r, version);\n\n\t\treturn new SubscribeNamespace({ namespace, requestId });\n\t}\n}\n\n// SUBSCRIBE_NAMESPACE message for draft-14 through draft-17 (type 0x11).\n//\n// In v16 this moves from the control stream to its own bidi stream. Draft-16/17\n// carry a Subscribe Options field (NAMESPACE vs TRACKS); draft-17 additionally\n// prefixes a Required Request ID delta (removed in draft-18 per #1615).\n// Draft-18+ uses SubscribeNamespace.\nexport class SubscribeNamespaceLegacy {\n\tstatic id = 0x11;\n\n\tnamespace: Path.Valid;\n\trequestId: bigint;\n\tsubscribeOptions: number; // v16/v17: default 0x01 (NAMESPACE only)\n\n\tconstructor({\n\t\tnamespace,\n\t\trequestId,\n\t\tsubscribeOptions = 1,\n\t}: {\n\t\tnamespace: Path.Valid;\n\t\trequestId: bigint;\n\t\tsubscribeOptions?: number;\n\t}) {\n\t\tthis.namespace = namespace;\n\t\tthis.requestId = requestId;\n\t\tthis.subscribeOptions = subscribeOptions;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (!isLegacyVersion(version)) {\n\t\t\tthrow new Error(`legacy SUBSCRIBE_NAMESPACE (0x11) is draft-14..17 only, not ${version}`);\n\t\t}\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 (draft-17 only, removed in draft-18 per #1615)\n\t\t}\n\t\tawait Namespace.encode(w, this.namespace);\n\t\tif (version === Version.DRAFT_16 || version === Version.DRAFT_17) {\n\t\t\tawait w.u53(this.subscribeOptions);\n\t\t}\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<SubscribeNamespaceLegacy> {\n\t\treturn Message.decode(r, (rd) => SubscribeNamespaceLegacy.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<SubscribeNamespaceLegacy> {\n\t\tif (!isLegacyVersion(version)) {\n\t\t\tthrow new Error(`legacy SUBSCRIBE_NAMESPACE (0x11) is draft-14..17 only, not ${version}`);\n\t\t}\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta (draft-17 only, removed in draft-18 per #1615)\n\t\t}\n\t\tconst namespace = await Namespace.decode(r);\n\t\tlet subscribeOptions = 1;\n\t\tif (version === Version.DRAFT_16 || version === Version.DRAFT_17) {\n\t\t\tsubscribeOptions = await r.u53();\n\t\t}\n\t\tawait Parameters.decode(r, version);\n\n\t\treturn new SubscribeNamespaceLegacy({ namespace, requestId, subscribeOptions });\n\t}\n}\n\n/// SUBSCRIBE_TRACKS message ID (0x51) introduced in draft-18 (#1542).\n///\n/// moq-lite does not implement PUBLISH replication through a CDN, which is the\n/// only thing SUBSCRIBE_TRACKS enables. We never send it and reject it loudly\n/// on receipt rather than silently ignoring, since the peer would otherwise\n/// wait forever for a REQUEST_OK.\nexport const SUBSCRIBE_TRACKS_ID = 0x51;\n\nexport class SubscribeNamespaceOk {\n\tstatic id = 0x12;\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<SubscribeNamespaceOk> {\n\t\treturn Message.decode(r, SubscribeNamespaceOk.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<SubscribeNamespaceOk> {\n\t\tconst requestId = await r.u62();\n\t\treturn new SubscribeNamespaceOk({ requestId });\n\t}\n}\n\nexport class SubscribeNamespaceError {\n\tstatic id = 0x13;\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<SubscribeNamespaceError> {\n\t\treturn Message.decode(r, SubscribeNamespaceError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<SubscribeNamespaceError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\n\t\treturn new SubscribeNamespaceError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\nexport class UnsubscribeNamespace {\n\tstatic id = 0x14;\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<UnsubscribeNamespace> {\n\t\treturn Message.decode(r, UnsubscribeNamespace.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<UnsubscribeNamespace> {\n\t\tconst requestId = await r.u62();\n\t\treturn new UnsubscribeNamespace({ requestId });\n\t}\n}\n\n/**\n * NAMESPACE message (0x08), v16+, sent on the SUBSCRIBE_NAMESPACE bidi stream.\n *\n * The base message carries only the suffix. A session that negotiated the MoQ Cluster\n * extension uses the extended form instead, which appends a Parameters field so the\n * advertisement can carry its HOP_PATH and ROUTE_COST (see `cluster.ts`).\n */\nexport class SubscribeNamespaceEntry {\n\tstatic id = 0x08;\n\n\tsuffix: Path.Valid;\n\n\t/**\n\t * The MoQ Cluster parameters. Set selects the extended form, `undefined` the base one.\n\t * An endpoint must not append them on a session that did not negotiate.\n\t */\n\tcluster?: Cluster.Advert;\n\n\tconstructor({ suffix, cluster }: { suffix: Path.Valid; cluster?: Cluster.Advert }) {\n\t\tthis.suffix = suffix;\n\t\tthis.cluster = cluster;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tawait Namespace.encode(w, this.suffix);\n\t\t// The base form has no Parameters field at all, so there is nothing to write.\n\t\tif (this.cluster) await Cluster.intoParams(this.cluster).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 extended form when the session negotiated the MoQ\n\t * Cluster extension. See {@link PublishNamespace.decode}.\n\t */\n\tstatic async decode(r: Reader, version: IetfVersion, negotiated = false): Promise<SubscribeNamespaceEntry> {\n\t\treturn Message.decode(r, (rd) => SubscribeNamespaceEntry.#decode(rd, version, negotiated));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion, negotiated: boolean): Promise<SubscribeNamespaceEntry> {\n\t\tconst suffix = await Namespace.decode(r);\n\t\tif (!negotiated) return new SubscribeNamespaceEntry({ suffix });\n\n\t\treturn new SubscribeNamespaceEntry({ suffix, cluster: await Cluster.decodeParams(r, version) });\n\t}\n}\n\n/// NAMESPACE_DONE message (0x0E) — v16 only, sent on SUBSCRIBE_NAMESPACE bidi stream\nexport class SubscribeNamespaceEntryDone {\n\tstatic id = 0x0e;\n\n\tsuffix: Path.Valid;\n\n\tconstructor({ suffix }: { suffix: Path.Valid }) {\n\t\tthis.suffix = suffix;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait Namespace.encode(w, this.suffix);\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<SubscribeNamespaceEntryDone> {\n\t\treturn Message.decode(r, SubscribeNamespaceEntryDone.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<SubscribeNamespaceEntryDone> {\n\t\tconst suffix = await Namespace.decode(r);\n\t\treturn new SubscribeNamespaceEntryDone({ suffix });\n\t}\n}\n\n/// PUBLISH_BLOCKED message (0x0F) — draft-17 only, sent on SUBSCRIBE_NAMESPACE bidi stream\nexport class PublishBlocked {\n\tstatic id = 0x0f;\n\n\tsuffix: Path.Valid;\n\ttrackName: string;\n\n\tconstructor({ suffix, trackName }: { suffix: Path.Valid; trackName: string }) {\n\t\tthis.suffix = suffix;\n\t\tthis.trackName = trackName;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait Namespace.encode(w, this.suffix);\n\t\tawait w.string(this.trackName);\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<PublishBlocked> {\n\t\treturn Message.decode(r, PublishBlocked.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishBlocked> {\n\t\tconst suffix = await Namespace.decode(r);\n\t\tconst trackName = await r.string();\n\t\treturn new PublishBlocked({ suffix, trackName });\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"subscribe_namespace.js","sourceRoot":"","sources":["../../src/ietf/subscribe_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// True for the drafts that use the legacy 0x11 SUBSCRIBE_NAMESPACE message.\n// Draft-18+ uses the renumbered 0x50 message instead.\nfunction isLegacyVersion(version: IetfVersion): boolean {\n\tswitch (version) {\n\t\tcase Version.DRAFT_14:\n\t\tcase Version.DRAFT_15:\n\t\tcase Version.DRAFT_16:\n\t\tcase Version.DRAFT_17:\n\t\t\treturn true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\n// SUBSCRIBE_NAMESPACE message (draft-18+, type 0x50).\n//\n// Draft-18 renumbered the message from 0x11 to 0x50 and dropped the Subscribe\n// Options field when it split SUBSCRIBE_TRACKS (0x51) off into its own message\n// type (#1542). Draft-14 through draft-17 use SubscribeNamespaceLegacy.\nexport class SubscribeNamespace {\n\tstatic id = 0x50;\n\n\tnamespace: Path.Valid;\n\trequestId: bigint;\n\t/** MoQ Hidden: also advertise hidden namespaces. Only sent to a peer that declared it. */\n\thidden: boolean;\n\n\tconstructor({\n\t\tnamespace,\n\t\trequestId,\n\t\thidden = false,\n\t}: { namespace: Path.Valid; requestId: bigint; hidden?: boolean }) {\n\t\tthis.namespace = namespace;\n\t\tthis.requestId = requestId;\n\t\tthis.hidden = hidden;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (isLegacyVersion(version)) {\n\t\t\tthrow new Error(`SUBSCRIBE_NAMESPACE (0x50) is draft-18+ only, not ${version}`);\n\t\t}\n\t\tawait w.u62(this.requestId);\n\t\tawait Namespace.encode(w, this.namespace);\n\t\tconst params = new Parameters();\n\t\tparams.hidden = this.hidden;\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\tstatic async decode(r: Reader, version: IetfVersion): Promise<SubscribeNamespace> {\n\t\treturn Message.decode(r, (rd) => SubscribeNamespace.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<SubscribeNamespace> {\n\t\tif (isLegacyVersion(version)) {\n\t\t\tthrow new Error(`SUBSCRIBE_NAMESPACE (0x50) is draft-18+ only, not ${version}`);\n\t\t}\n\t\tconst requestId = await r.u62();\n\t\tconst namespace = await Namespace.decode(r);\n\t\tconst params = await Parameters.decode(r, version);\n\n\t\treturn new SubscribeNamespace({ namespace, requestId, hidden: params.hidden });\n\t}\n}\n\n// SUBSCRIBE_NAMESPACE message for draft-14 through draft-17 (type 0x11).\n//\n// In v16 this moves from the control stream to its own bidi stream. Draft-16/17\n// carry a Subscribe Options field (NAMESPACE vs TRACKS); draft-17 additionally\n// prefixes a Required Request ID delta (removed in draft-18 per #1615).\n// Draft-18+ uses SubscribeNamespace.\nexport class SubscribeNamespaceLegacy {\n\tstatic id = 0x11;\n\n\tnamespace: Path.Valid;\n\trequestId: bigint;\n\tsubscribeOptions: number; // v16/v17: default 0x01 (NAMESPACE only)\n\t/** MoQ Hidden: see {@link SubscribeNamespace.hidden}. */\n\thidden: boolean;\n\n\tconstructor({\n\t\tnamespace,\n\t\trequestId,\n\t\tsubscribeOptions = 1,\n\t\thidden = false,\n\t}: {\n\t\tnamespace: Path.Valid;\n\t\trequestId: bigint;\n\t\tsubscribeOptions?: number;\n\t\thidden?: boolean;\n\t}) {\n\t\tthis.namespace = namespace;\n\t\tthis.requestId = requestId;\n\t\tthis.subscribeOptions = subscribeOptions;\n\t\tthis.hidden = hidden;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (!isLegacyVersion(version)) {\n\t\t\tthrow new Error(`legacy SUBSCRIBE_NAMESPACE (0x11) is draft-14..17 only, not ${version}`);\n\t\t}\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 (draft-17 only, removed in draft-18 per #1615)\n\t\t}\n\t\tawait Namespace.encode(w, this.namespace);\n\t\tif (version === Version.DRAFT_16 || version === Version.DRAFT_17) {\n\t\t\tawait w.u53(this.subscribeOptions);\n\t\t}\n\t\tconst params = new Parameters();\n\t\tparams.hidden = this.hidden;\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\tstatic async decode(r: Reader, version: IetfVersion): Promise<SubscribeNamespaceLegacy> {\n\t\treturn Message.decode(r, (rd) => SubscribeNamespaceLegacy.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<SubscribeNamespaceLegacy> {\n\t\tif (!isLegacyVersion(version)) {\n\t\t\tthrow new Error(`legacy SUBSCRIBE_NAMESPACE (0x11) is draft-14..17 only, not ${version}`);\n\t\t}\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta (draft-17 only, removed in draft-18 per #1615)\n\t\t}\n\t\tconst namespace = await Namespace.decode(r);\n\t\tlet subscribeOptions = 1;\n\t\tif (version === Version.DRAFT_16 || version === Version.DRAFT_17) {\n\t\t\tsubscribeOptions = await r.u53();\n\t\t}\n\t\tconst params = await Parameters.decode(r, version);\n\n\t\treturn new SubscribeNamespaceLegacy({ namespace, requestId, subscribeOptions, hidden: params.hidden });\n\t}\n}\n\n/// SUBSCRIBE_TRACKS message ID (0x51) introduced in draft-18 (#1542).\n///\n/// moq-lite does not implement PUBLISH replication through a CDN, which is the\n/// only thing SUBSCRIBE_TRACKS enables. We never send it and reject it loudly\n/// on receipt rather than silently ignoring, since the peer would otherwise\n/// wait forever for a REQUEST_OK.\nexport const SUBSCRIBE_TRACKS_ID = 0x51;\n\nexport class SubscribeNamespaceOk {\n\tstatic id = 0x12;\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<SubscribeNamespaceOk> {\n\t\treturn Message.decode(r, SubscribeNamespaceOk.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<SubscribeNamespaceOk> {\n\t\tconst requestId = await r.u62();\n\t\treturn new SubscribeNamespaceOk({ requestId });\n\t}\n}\n\nexport class SubscribeNamespaceError {\n\tstatic id = 0x13;\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<SubscribeNamespaceError> {\n\t\treturn Message.decode(r, SubscribeNamespaceError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<SubscribeNamespaceError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\n\t\treturn new SubscribeNamespaceError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\nexport class UnsubscribeNamespace {\n\tstatic id = 0x14;\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<UnsubscribeNamespace> {\n\t\treturn Message.decode(r, UnsubscribeNamespace.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<UnsubscribeNamespace> {\n\t\tconst requestId = await r.u62();\n\t\treturn new UnsubscribeNamespace({ requestId });\n\t}\n}\n\n/**\n * NAMESPACE message (0x08), v16+, sent on the SUBSCRIBE_NAMESPACE bidi stream.\n *\n * The base message carries only the suffix. A session that negotiated the MoQ Cluster\n * extension uses the extended form instead, which appends a Parameters field so the\n * advertisement can carry its HOP_PATH and ROUTE_COST (see `cluster.ts`).\n */\nexport class SubscribeNamespaceEntry {\n\tstatic id = 0x08;\n\n\tsuffix: Path.Valid;\n\n\t/**\n\t * The MoQ Cluster parameters. Set selects the extended form, `undefined` the base one.\n\t * An endpoint must not append them on a session that did not negotiate.\n\t */\n\tcluster?: Cluster.Advert;\n\n\tconstructor({ suffix, cluster }: { suffix: Path.Valid; cluster?: Cluster.Advert }) {\n\t\tthis.suffix = suffix;\n\t\tthis.cluster = cluster;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tawait Namespace.encode(w, this.suffix);\n\t\t// The base form has no Parameters field at all, so there is nothing to write.\n\t\tif (this.cluster) await Cluster.intoParams(this.cluster).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 extended form when the session negotiated the MoQ\n\t * Cluster extension. See {@link PublishNamespace.decode}.\n\t */\n\tstatic async decode(r: Reader, version: IetfVersion, negotiated = false): Promise<SubscribeNamespaceEntry> {\n\t\treturn Message.decode(r, (rd) => SubscribeNamespaceEntry.#decode(rd, version, negotiated));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion, negotiated: boolean): Promise<SubscribeNamespaceEntry> {\n\t\tconst suffix = await Namespace.decode(r);\n\t\tif (!negotiated) return new SubscribeNamespaceEntry({ suffix });\n\n\t\treturn new SubscribeNamespaceEntry({ suffix, cluster: await Cluster.decodeParams(r, version) });\n\t}\n}\n\n/// NAMESPACE_DONE message (0x0E) — v16 only, sent on SUBSCRIBE_NAMESPACE bidi stream\nexport class SubscribeNamespaceEntryDone {\n\tstatic id = 0x0e;\n\n\tsuffix: Path.Valid;\n\n\tconstructor({ suffix }: { suffix: Path.Valid }) {\n\t\tthis.suffix = suffix;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait Namespace.encode(w, this.suffix);\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<SubscribeNamespaceEntryDone> {\n\t\treturn Message.decode(r, SubscribeNamespaceEntryDone.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<SubscribeNamespaceEntryDone> {\n\t\tconst suffix = await Namespace.decode(r);\n\t\treturn new SubscribeNamespaceEntryDone({ suffix });\n\t}\n}\n\n/// PUBLISH_BLOCKED message (0x0F) — draft-17 only, sent on SUBSCRIBE_NAMESPACE bidi stream\nexport class PublishBlocked {\n\tstatic id = 0x0f;\n\n\tsuffix: Path.Valid;\n\ttrackName: string;\n\n\tconstructor({ suffix, trackName }: { suffix: Path.Valid; trackName: string }) {\n\t\tthis.suffix = suffix;\n\t\tthis.trackName = trackName;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait Namespace.encode(w, this.suffix);\n\t\tawait w.string(this.trackName);\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<PublishBlocked> {\n\t\treturn Message.decode(r, PublishBlocked.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishBlocked> {\n\t\tconst suffix = await Namespace.decode(r);\n\t\tconst trackName = await r.string();\n\t\treturn new PublishBlocked({ suffix, trackName });\n\t}\n}\n"]}
|
package/ietf/subscriber.d.ts
CHANGED
|
@@ -1,66 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import * as broadcast from "../broadcast";
|
|
3
|
-
import * as Path from "../path";
|
|
4
|
-
import type { Reader, Stream } from "../stream";
|
|
5
|
-
import type { Session } from "./adapter";
|
|
6
|
-
import * as Cluster from "./cluster";
|
|
7
|
-
import { type Group as GroupMessage } from "./object";
|
|
8
|
-
import { type Publish } from "./publish";
|
|
9
|
-
import { PublishNamespace } from "./publish_namespace";
|
|
10
|
-
/**
|
|
11
|
-
* Handles subscribing to broadcasts using moq-transport protocol.
|
|
12
|
-
* Uses the stream-per-request pattern (real bidi streams for v17, virtual for v14-v16).
|
|
13
|
-
*
|
|
14
|
-
* @internal
|
|
15
|
-
*/
|
|
16
|
-
export declare class Subscriber {
|
|
17
|
-
#private;
|
|
18
|
-
/**
|
|
19
|
-
* Creates a new Subscriber instance.
|
|
20
|
-
*
|
|
21
|
-
* @internal
|
|
22
|
-
*/
|
|
23
|
-
constructor({ session, cluster, }: {
|
|
24
|
-
/** The session abstraction for bidi streams and request IDs. */
|
|
25
|
-
session: Session;
|
|
26
|
-
/** The Hop IDs the SETUP exchange settled (MoQ Cluster). */
|
|
27
|
-
cluster?: Cluster.Hops;
|
|
28
|
-
});
|
|
29
|
-
/**
|
|
30
|
-
* Gets an announced reader for the specified prefix.
|
|
31
|
-
*
|
|
32
|
-
* The peer is asked with SUBSCRIBE_NAMESPACE regardless of what it declared, and an
|
|
33
|
-
* unsolicited PUBLISH_NAMESPACE lands here too, so a peer that only tells and one
|
|
34
|
-
* that only answers are both discovered.
|
|
35
|
-
*/
|
|
36
|
-
announced(prefix?: Path.Valid): announce.Consumer;
|
|
37
|
-
/**
|
|
38
|
-
* Consumes a broadcast from the connection.
|
|
39
|
-
*
|
|
40
|
-
* Deduplicated per path: repeat calls for the same still-live path share one reference-counted
|
|
41
|
-
* broadcast (and one upstream subscription). The shared broadcast closes once every caller has
|
|
42
|
-
* closed its handle, so callers close normally.
|
|
43
|
-
*/
|
|
44
|
-
consume(path: Path.Valid): broadcast.Consumer;
|
|
45
|
-
/**
|
|
46
|
-
* Handles an incoming PUBLISH_NAMESPACE on a bidi stream.
|
|
47
|
-
* Tracks announced broadcasts and notifies consumers.
|
|
48
|
-
*
|
|
49
|
-
* @internal
|
|
50
|
-
*/
|
|
51
|
-
runPublishNamespace(msg: PublishNamespace, stream: Stream): Promise<void>;
|
|
52
|
-
/**
|
|
53
|
-
* Handles an incoming PUBLISH on a bidi stream.
|
|
54
|
-
* We don't support reverse publish, so send error.
|
|
55
|
-
*
|
|
56
|
-
* @internal
|
|
57
|
-
*/
|
|
58
|
-
runPublish(msg: Publish, stream: Stream): Promise<void>;
|
|
59
|
-
/**
|
|
60
|
-
* Handles an ObjectStream message (group + frames on uni stream).
|
|
61
|
-
*
|
|
62
|
-
* @internal
|
|
63
|
-
*/
|
|
64
|
-
handleGroup(group: GroupMessage, stream: Reader): Promise<void>;
|
|
65
|
-
}
|
|
1
|
+
export {};
|
|
66
2
|
//# sourceMappingURL=subscriber.d.ts.map
|
package/ietf/subscriber.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriber.d.ts","sourceRoot":"","sources":["../../src/ietf/subscriber.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"subscriber.d.ts","sourceRoot":"","sources":["../../src/ietf/subscriber.ts"],"names":[],"mappings":""}
|