@norskvideo/moq-net 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/announced.d.ts +111 -21
- package/announced.d.ts.map +1 -1
- package/announced.js +213 -40
- package/announced.js.map +1 -1
- package/broadcast.d.ts +80 -25
- package/broadcast.d.ts.map +1 -1
- package/broadcast.js +270 -49
- package/broadcast.js.map +1 -1
- package/connection/accept.d.ts +6 -0
- package/connection/accept.d.ts.map +1 -1
- package/connection/accept.js +42 -13
- package/connection/accept.js.map +1 -1
- package/connection/browser.d.ts +5 -0
- package/connection/browser.d.ts.map +1 -0
- package/connection/browser.js +31 -0
- package/connection/browser.js.map +1 -0
- package/connection/connect.d.ts +43 -1
- package/connection/connect.d.ts.map +1 -1
- package/connection/connect.js +118 -123
- package/connection/connect.js.map +1 -1
- package/connection/established.d.ts +43 -16
- package/connection/established.d.ts.map +1 -1
- package/connection/established.js.map +1 -1
- package/connection/handshake.d.ts +12 -1
- package/connection/handshake.d.ts.map +1 -1
- package/connection/handshake.js +30 -14
- package/connection/handshake.js.map +1 -1
- package/connection/index.d.ts +8 -0
- package/connection/index.d.ts.map +1 -1
- package/connection/index.js +6 -0
- package/connection/index.js.map +1 -1
- package/connection/reload.d.ts +66 -9
- package/connection/reload.d.ts.map +1 -1
- package/connection/reload.js +192 -66
- package/connection/reload.js.map +1 -1
- package/connection/stats.d.ts +92 -0
- package/connection/stats.d.ts.map +1 -0
- package/connection/stats.js +35 -0
- package/connection/stats.js.map +1 -0
- package/connection/transport.d.ts +10 -0
- package/connection/transport.d.ts.map +1 -0
- package/connection/transport.js +12 -0
- package/connection/transport.js.map +1 -0
- package/consume.d.ts +44 -0
- package/consume.d.ts.map +1 -0
- package/consume.js +60 -0
- package/consume.js.map +1 -0
- package/datagram.d.ts +23 -0
- package/datagram.d.ts.map +1 -0
- package/datagram.js +3 -0
- package/datagram.js.map +1 -0
- package/error.d.ts +76 -0
- package/error.d.ts.map +1 -0
- package/error.js +107 -0
- package/error.js.map +1 -0
- package/group.d.ts +143 -38
- package/group.d.ts.map +1 -1
- package/group.js +270 -68
- package/group.js.map +1 -1
- package/ietf/adapter.d.ts +2 -2
- package/ietf/adapter.d.ts.map +1 -1
- package/ietf/adapter.js +20 -10
- package/ietf/adapter.js.map +1 -1
- package/ietf/aliases.d.ts +73 -5
- package/ietf/aliases.d.ts.map +1 -1
- package/ietf/aliases.js +121 -14
- package/ietf/aliases.js.map +1 -1
- package/ietf/cluster.d.ts +141 -0
- package/ietf/cluster.d.ts.map +1 -0
- package/ietf/cluster.js +204 -0
- package/ietf/cluster.js.map +1 -0
- package/ietf/connection.d.ts +39 -6
- package/ietf/connection.d.ts.map +1 -1
- package/ietf/connection.js +73 -12
- package/ietf/connection.js.map +1 -1
- package/ietf/fetch.d.ts +17 -0
- package/ietf/fetch.d.ts.map +1 -1
- package/ietf/fetch.js +21 -0
- package/ietf/fetch.js.map +1 -1
- package/ietf/filter.d.ts +87 -0
- package/ietf/filter.d.ts.map +1 -0
- package/ietf/filter.js +292 -0
- package/ietf/filter.js.map +1 -0
- package/ietf/index.d.ts +2 -0
- package/ietf/index.d.ts.map +1 -1
- package/ietf/index.js +3 -0
- package/ietf/index.js.map +1 -1
- package/ietf/namespace.d.ts +6 -0
- package/ietf/namespace.d.ts.map +1 -1
- package/ietf/namespace.js +27 -2
- package/ietf/namespace.js.map +1 -1
- package/ietf/object.d.ts +54 -6
- package/ietf/object.d.ts.map +1 -1
- package/ietf/object.js +178 -25
- package/ietf/object.js.map +1 -1
- package/ietf/parameters.d.ts +35 -10
- package/ietf/parameters.d.ts.map +1 -1
- package/ietf/parameters.js +236 -45
- package/ietf/parameters.js.map +1 -1
- package/ietf/priority.d.ts +5 -0
- package/ietf/priority.d.ts.map +1 -0
- package/ietf/priority.js +10 -0
- package/ietf/priority.js.map +1 -0
- package/ietf/properties.d.ts +13 -2
- package/ietf/properties.d.ts.map +1 -1
- package/ietf/properties.js +65 -8
- package/ietf/properties.js.map +1 -1
- package/ietf/publish.d.ts.map +1 -1
- package/ietf/publish.js +13 -3
- package/ietf/publish.js.map +1 -1
- package/ietf/publish_namespace.d.ts +16 -2
- package/ietf/publish_namespace.d.ts.map +1 -1
- package/ietf/publish_namespace.js +25 -6
- package/ietf/publish_namespace.js.map +1 -1
- package/ietf/publisher.d.ts +40 -7
- package/ietf/publisher.d.ts.map +1 -1
- package/ietf/publisher.js +751 -134
- package/ietf/publisher.js.map +1 -1
- package/ietf/request.js +1 -1
- package/ietf/request.js.map +1 -1
- package/ietf/solicit.d.ts +41 -0
- package/ietf/solicit.d.ts.map +1 -0
- package/ietf/solicit.js +47 -0
- package/ietf/solicit.js.map +1 -0
- package/ietf/subscribe.d.ts +41 -2
- package/ietf/subscribe.d.ts.map +1 -1
- package/ietf/subscribe.js +103 -22
- package/ietf/subscribe.js.map +1 -1
- package/ietf/subscribe_namespace.d.ts +21 -7
- package/ietf/subscribe_namespace.d.ts.map +1 -1
- package/ietf/subscribe_namespace.js +31 -14
- package/ietf/subscribe_namespace.js.map +1 -1
- package/ietf/subscriber.d.ts +20 -7
- package/ietf/subscriber.d.ts.map +1 -1
- package/ietf/subscriber.js +512 -142
- package/ietf/subscriber.js.map +1 -1
- package/ietf/version.d.ts +7 -1
- package/ietf/version.d.ts.map +1 -1
- package/ietf/version.js +7 -0
- package/ietf/version.js.map +1 -1
- package/index.d.ts +10 -5
- package/index.d.ts.map +1 -1
- package/index.js +10 -5
- package/index.js.map +1 -1
- package/internal.d.ts +29 -0
- package/internal.d.ts.map +1 -0
- package/internal.js +8 -0
- package/internal.js.map +1 -0
- package/lite/announce.d.ts +62 -15
- package/lite/announce.d.ts.map +1 -1
- package/lite/announce.js +230 -94
- package/lite/announce.js.map +1 -1
- package/lite/connection.d.ts +69 -20
- package/lite/connection.d.ts.map +1 -1
- package/lite/connection.js +128 -81
- package/lite/connection.js.map +1 -1
- package/lite/datagram.d.ts +23 -0
- package/lite/datagram.d.ts.map +1 -0
- package/lite/datagram.js +57 -0
- package/lite/datagram.js.map +1 -0
- package/lite/datagram_stream.d.ts +8 -0
- package/lite/datagram_stream.d.ts.map +1 -0
- package/lite/datagram_stream.js +44 -0
- package/lite/datagram_stream.js.map +1 -0
- package/lite/fetch.d.ts.map +1 -1
- package/lite/fetch.js +2 -2
- package/lite/fetch.js.map +1 -1
- package/lite/index.d.ts +3 -0
- package/lite/index.d.ts.map +1 -1
- package/lite/index.js +3 -0
- package/lite/index.js.map +1 -1
- package/lite/priority.d.ts +67 -0
- package/lite/priority.d.ts.map +1 -0
- package/lite/priority.js +114 -0
- package/lite/priority.js.map +1 -0
- package/lite/probe.d.ts +18 -2
- package/lite/probe.d.ts.map +1 -1
- package/lite/probe.js +24 -22
- package/lite/probe.js.map +1 -1
- package/lite/publisher.d.ts +14 -7
- package/lite/publisher.d.ts.map +1 -1
- package/lite/publisher.js +406 -84
- package/lite/publisher.js.map +1 -1
- package/lite/setup.d.ts +83 -6
- package/lite/setup.d.ts.map +1 -1
- package/lite/setup.js +203 -31
- package/lite/setup.js.map +1 -1
- package/lite/stream.d.ts +12 -3
- package/lite/stream.d.ts.map +1 -1
- package/lite/stream.js +7 -4
- package/lite/stream.js.map +1 -1
- package/lite/subscribe.d.ts +37 -23
- package/lite/subscribe.d.ts.map +1 -1
- package/lite/subscribe.js +70 -55
- package/lite/subscribe.js.map +1 -1
- package/lite/subscriber.d.ts +29 -23
- package/lite/subscriber.d.ts.map +1 -1
- package/lite/subscriber.js +689 -112
- package/lite/subscriber.js.map +1 -1
- package/lite/track.d.ts +25 -13
- package/lite/track.d.ts.map +1 -1
- package/lite/track.js +60 -35
- package/lite/track.js.map +1 -1
- package/lite/version.d.ts +39 -4
- package/lite/version.d.ts.map +1 -1
- package/lite/version.js +139 -17
- package/lite/version.js.map +1 -1
- package/mock.d.ts +53 -3
- package/mock.d.ts.map +1 -1
- package/mock.js +110 -21
- package/mock.js.map +1 -1
- package/{lite/origin.d.ts → origin.d.ts} +25 -1
- package/origin.d.ts.map +1 -0
- package/{lite/origin.js → origin.js} +25 -1
- package/origin.js.map +1 -0
- package/package.json +6 -4
- package/path.d.ts +67 -0
- package/path.d.ts.map +1 -1
- package/path.js +128 -0
- package/path.js.map +1 -1
- package/stream.d.ts +94 -4
- package/stream.d.ts.map +1 -1
- package/stream.js +128 -17
- package/stream.js.map +1 -1
- package/time.d.ts +109 -86
- package/time.d.ts.map +1 -1
- package/time.js +80 -30
- package/time.js.map +1 -1
- package/track.d.ts +298 -47
- package/track.d.ts.map +1 -1
- package/track.js +721 -109
- package/track.js.map +1 -1
- package/util/timeout.d.ts +5 -0
- package/util/timeout.d.ts.map +1 -0
- package/util/timeout.js +18 -0
- package/util/timeout.js.map +1 -0
- package/util/utf8.d.ts +3 -0
- package/util/utf8.d.ts.map +1 -0
- package/util/utf8.js +7 -0
- package/util/utf8.js.map +1 -0
- package/varint.d.ts +14 -3
- package/varint.d.ts.map +1 -1
- package/varint.js +23 -12
- package/varint.js.map +1 -1
- package/zod.d.ts +5 -5
- package/zod.d.ts.map +1 -1
- package/zod.js.map +1 -1
- package/bandwidth.d.ts +0 -11
- package/bandwidth.d.ts.map +0 -1
- package/bandwidth.js +0 -7
- package/bandwidth.js.map +0 -1
- package/connection/cert.test.d.ts +0 -2
- package/connection/cert.test.d.ts.map +0 -1
- package/connection/cert.test.js +0 -26
- package/connection/cert.test.js.map +0 -1
- package/connection/reload.test.d.ts +0 -2
- package/connection/reload.test.d.ts.map +0 -1
- package/connection/reload.test.js +0 -39
- package/connection/reload.test.js.map +0 -1
- package/group.test.d.ts +0 -2
- package/group.test.d.ts.map +0 -1
- package/group.test.js +0 -66
- package/group.test.js.map +0 -1
- package/ietf/aliases.test.d.ts +0 -2
- package/ietf/aliases.test.d.ts.map +0 -1
- package/ietf/aliases.test.js +0 -30
- package/ietf/aliases.test.js.map +0 -1
- package/ietf/ietf.test.d.ts +0 -2
- package/ietf/ietf.test.d.ts.map +0 -1
- package/ietf/ietf.test.js +0 -873
- package/ietf/ietf.test.js.map +0 -1
- package/integration.test.d.ts +0 -2
- package/integration.test.d.ts.map +0 -1
- package/integration.test.js +0 -90
- package/integration.test.js.map +0 -1
- package/lite/origin.d.ts.map +0 -1
- package/lite/origin.js.map +0 -1
- package/lite/subscriber.test.d.ts +0 -2
- package/lite/subscriber.test.d.ts.map +0 -1
- package/lite/subscriber.test.js +0 -30
- package/lite/subscriber.test.js.map +0 -1
- package/lite/track.test.d.ts +0 -2
- package/lite/track.test.d.ts.map +0 -1
- package/lite/track.test.js +0 -53
- package/lite/track.test.js.map +0 -1
- package/path.test.d.ts +0 -2
- package/path.test.d.ts.map +0 -1
- package/path.test.js +0 -169
- package/path.test.js.map +0 -1
- package/stream.test.d.ts +0 -2
- package/stream.test.d.ts.map +0 -1
- package/stream.test.js +0 -210
- package/stream.test.js.map +0 -1
- package/track.test.d.ts +0 -2
- package/track.test.d.ts.map +0 -1
- package/track.test.js +0 -56
- package/track.test.js.map +0 -1
- package/util/error.d.ts +0 -3
- package/util/error.d.ts.map +0 -1
- package/util/error.js +0 -9
- package/util/error.js.map +0 -1
- package/util/index.d.ts +0 -2
- package/util/index.d.ts.map +0 -1
- package/util/index.js +0 -3
- package/util/index.js.map +0 -1
- package/varint.test.d.ts +0 -2
- package/varint.test.d.ts.map +0 -1
- package/varint.test.js +0 -106
- package/varint.test.js.map +0 -1
package/ietf/subscribe.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/* @ts-self-types="./subscribe.d.ts" */
|
|
2
|
+
import * as Filter from "./filter.js";
|
|
2
3
|
import * as Message from "./message.js";
|
|
3
4
|
import * as Namespace from "./namespace.js";
|
|
4
5
|
import { Parameters } from "./parameters.js";
|
|
@@ -6,17 +7,36 @@ import * as Properties from "./properties.js";
|
|
|
6
7
|
import { Version } from "./version.js";
|
|
7
8
|
// we only support Group Order descending
|
|
8
9
|
const GROUP_ORDER = 0x02;
|
|
10
|
+
/**
|
|
11
|
+
* The filter this implementation joins a live track with.
|
|
12
|
+
*
|
|
13
|
+
* moq-lite joins at the start of the current group, which is a decodable point, and
|
|
14
|
+
* draft-20's relative form is the first that can name it without knowing Largest Object.
|
|
15
|
+
* Earlier drafts only get the next Object after the live edge, which begins mid-group.
|
|
16
|
+
*/
|
|
17
|
+
export function joinFilter(version) {
|
|
18
|
+
return Filter.isDraft20(version) ? { kind: "relative", groups: 1n } : { kind: "nextObject" };
|
|
19
|
+
}
|
|
9
20
|
export class Subscribe {
|
|
10
21
|
static id = 0x03;
|
|
11
22
|
requestId;
|
|
12
23
|
trackNamespace;
|
|
13
24
|
trackName;
|
|
14
25
|
subscriberPriority;
|
|
15
|
-
|
|
26
|
+
/** Which Objects the subscription delivers, resolved by the publisher against the live edge. */
|
|
27
|
+
filter;
|
|
28
|
+
/** The draft-20 backfill requested alongside it, or `undefined` for none. */
|
|
29
|
+
fill;
|
|
30
|
+
/** Whether the subscriber wants Track Properties on the response (INCLUDE_PROPERTIES). */
|
|
31
|
+
propertiesWanted;
|
|
32
|
+
constructor({ requestId, trackNamespace, trackName, subscriberPriority, filter, fill, propertiesWanted, }) {
|
|
16
33
|
this.requestId = requestId;
|
|
17
34
|
this.trackNamespace = trackNamespace;
|
|
18
35
|
this.trackName = trackName;
|
|
19
36
|
this.subscriberPriority = subscriberPriority;
|
|
37
|
+
this.filter = filter ?? { kind: "unfiltered" };
|
|
38
|
+
this.fill = fill;
|
|
39
|
+
this.propertiesWanted = propertiesWanted ?? true;
|
|
20
40
|
}
|
|
21
41
|
async #encode(w, version) {
|
|
22
42
|
await w.u62(this.requestId);
|
|
@@ -29,7 +49,7 @@ export class Subscribe {
|
|
|
29
49
|
await w.u8(this.subscriberPriority);
|
|
30
50
|
await w.u8(GROUP_ORDER);
|
|
31
51
|
await w.bool(true); // forward = true
|
|
32
|
-
await w.
|
|
52
|
+
await w.write(Filter.encode(this.filter, version));
|
|
33
53
|
await w.u53(0); // no parameters
|
|
34
54
|
}
|
|
35
55
|
else {
|
|
@@ -38,7 +58,19 @@ export class Subscribe {
|
|
|
38
58
|
params.subscriberPriority = this.subscriberPriority;
|
|
39
59
|
params.groupOrder = GROUP_ORDER;
|
|
40
60
|
params.forward = true;
|
|
41
|
-
params.subscriptionFilter =
|
|
61
|
+
params.subscriptionFilter = Filter.encode(this.filter, version);
|
|
62
|
+
// FILL_PARAMETERS and INCLUDE_PROPERTIES arrived in draft-20. An older peer reads
|
|
63
|
+
// either as an unknown parameter, which is a protocol violation, so they are
|
|
64
|
+
// dropped rather than downgraded.
|
|
65
|
+
if (Filter.isDraft20(version)) {
|
|
66
|
+
if (this.fill) {
|
|
67
|
+
params.fillParameters = Filter.encodeFill(this.fill, version);
|
|
68
|
+
}
|
|
69
|
+
// The default is 1, so only the opt-out is worth bytes.
|
|
70
|
+
if (!this.propertiesWanted) {
|
|
71
|
+
params.includeProperties = false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
42
74
|
await params.encode(w, version);
|
|
43
75
|
}
|
|
44
76
|
}
|
|
@@ -68,12 +100,9 @@ export class Subscribe {
|
|
|
68
100
|
if (!forward) {
|
|
69
101
|
throw new Error(`unsupported forward value: ${forward}`);
|
|
70
102
|
}
|
|
71
|
-
const
|
|
72
|
-
if (filterType !== 0x1 && filterType !== 0x2) {
|
|
73
|
-
throw new Error(`unsupported filter type: ${filterType}`);
|
|
74
|
-
}
|
|
103
|
+
const filter = await Filter.decodeInline(r);
|
|
75
104
|
await Parameters.decode(r, version); // ignore parameters
|
|
76
|
-
return new Subscribe({ requestId, trackNamespace, trackName, subscriberPriority });
|
|
105
|
+
return new Subscribe({ requestId, trackNamespace, trackName, subscriberPriority, filter });
|
|
77
106
|
}
|
|
78
107
|
// v15+: fields are in parameters
|
|
79
108
|
const params = await Parameters.decode(r, version);
|
|
@@ -89,20 +118,56 @@ export class Subscribe {
|
|
|
89
118
|
if (!forward) {
|
|
90
119
|
throw new Error(`unsupported forward value: ${forward}`);
|
|
91
120
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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.
|
|
124
|
+
const draft20 = Filter.isDraft20(version);
|
|
125
|
+
if ((params.fillParameters !== undefined || params.includeProperties !== undefined) && !draft20) {
|
|
126
|
+
throw new Error("FILL_PARAMETERS and INCLUDE_PROPERTIES need draft-20");
|
|
95
127
|
}
|
|
96
|
-
|
|
128
|
+
// An absent LOCATION_FILTER means the subscription is unfiltered.
|
|
129
|
+
const raw = params.subscriptionFilter;
|
|
130
|
+
const filter = raw !== undefined ? Filter.decode(raw, version) : { kind: "unfiltered" };
|
|
131
|
+
const rawFill = params.fillParameters;
|
|
132
|
+
const fill = rawFill !== undefined ? Filter.decodeFill(rawFill, version) : undefined;
|
|
133
|
+
return new Subscribe({
|
|
134
|
+
requestId,
|
|
135
|
+
trackNamespace,
|
|
136
|
+
trackName,
|
|
137
|
+
subscriberPriority,
|
|
138
|
+
filter,
|
|
139
|
+
fill,
|
|
140
|
+
// Defaults to 1, so an absent parameter means the subscriber wants them.
|
|
141
|
+
propertiesWanted: params.includeProperties ?? true,
|
|
142
|
+
});
|
|
97
143
|
}
|
|
98
144
|
}
|
|
99
145
|
export class SubscribeOk {
|
|
100
146
|
static id = 0x04;
|
|
101
147
|
requestId;
|
|
102
148
|
trackAlias;
|
|
103
|
-
|
|
149
|
+
/**
|
|
150
|
+
* The largest Location in the track (LARGEST_OBJECT), which the draft requires once the
|
|
151
|
+
* 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
|
+
*/
|
|
157
|
+
largest;
|
|
158
|
+
/**
|
|
159
|
+
* The Track Properties to send (draft-17+): the track's Timescale and our group order.
|
|
160
|
+
*
|
|
161
|
+
* Empty opts the response out of properties entirely, which is what a peer that sent
|
|
162
|
+
* INCLUDE_PROPERTIES=0 asked for; declaring no Timescale also opts the track out of
|
|
163
|
+
* timestamps, so the subscriber times objects by arrival.
|
|
164
|
+
*/
|
|
165
|
+
properties;
|
|
166
|
+
constructor({ requestId, trackAlias, largest, properties, }) {
|
|
104
167
|
this.requestId = requestId;
|
|
105
168
|
this.trackAlias = trackAlias;
|
|
169
|
+
this.largest = largest;
|
|
170
|
+
this.properties = properties ?? {};
|
|
106
171
|
}
|
|
107
172
|
async #encode(w, version) {
|
|
108
173
|
if (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {
|
|
@@ -113,15 +178,27 @@ export class SubscribeOk {
|
|
|
113
178
|
await w.u62(this.trackAlias);
|
|
114
179
|
if (version === Version.DRAFT_14) {
|
|
115
180
|
await w.u62(0n); // expires = 0
|
|
116
|
-
await w.u8(GROUP_ORDER);
|
|
181
|
+
await w.u8(this.properties.groupOrder ?? GROUP_ORDER);
|
|
117
182
|
await w.bool(false); // content exists = false
|
|
118
183
|
await w.u53(0); // no parameters
|
|
119
184
|
}
|
|
120
185
|
else {
|
|
121
186
|
// v15+: just parameters after track_alias
|
|
122
187
|
const params = new Parameters();
|
|
123
|
-
|
|
188
|
+
// GROUP_ORDER is a legal SUBSCRIBE_OK parameter only through draft-15; a later peer
|
|
189
|
+
// closes the session with PROTOCOL_VIOLATION when it sees one. The publisher's
|
|
190
|
+
// preference is a DEFAULT_PUBLISHER_GROUP_ORDER track property instead, which we
|
|
191
|
+
// write from draft-17 on. Draft-16 gets neither form; see Properties.encode.
|
|
192
|
+
if (version === Version.DRAFT_15 && this.properties.groupOrder !== undefined) {
|
|
193
|
+
params.groupOrder = this.properties.groupOrder;
|
|
194
|
+
}
|
|
195
|
+
// See the field doc for why LARGEST_OBJECT stays draft-20 only.
|
|
196
|
+
if (this.largest !== undefined && Filter.isDraft20(version)) {
|
|
197
|
+
params.largest = this.largest;
|
|
198
|
+
}
|
|
124
199
|
await params.encode(w, version);
|
|
200
|
+
// Track Properties are the final field, so nothing may follow.
|
|
201
|
+
await Properties.encode(w, this.properties, version);
|
|
125
202
|
}
|
|
126
203
|
}
|
|
127
204
|
async encode(w, version) {
|
|
@@ -135,6 +212,8 @@ export class SubscribeOk {
|
|
|
135
212
|
? await r.u62()
|
|
136
213
|
: undefined;
|
|
137
214
|
const trackAlias = await r.u62();
|
|
215
|
+
let largest;
|
|
216
|
+
let properties = {};
|
|
138
217
|
if (version === Version.DRAFT_14) {
|
|
139
218
|
const expires = await r.u62();
|
|
140
219
|
if (expires !== BigInt(0)) {
|
|
@@ -143,18 +222,20 @@ export class SubscribeOk {
|
|
|
143
222
|
await r.u8(); // Don't care about group order
|
|
144
223
|
const contentExists = await r.bool();
|
|
145
224
|
if (contentExists) {
|
|
146
|
-
|
|
147
|
-
await r.u62();
|
|
148
|
-
|
|
225
|
+
const groupId = await r.u62();
|
|
226
|
+
const objectId = await r.u62();
|
|
227
|
+
largest = { groupId, objectId };
|
|
149
228
|
}
|
|
150
229
|
await Parameters.decode(r, version); // ignore parameters
|
|
151
230
|
}
|
|
152
231
|
else {
|
|
153
|
-
// v15+: parameters followed by Track Properties (draft-17+)
|
|
154
|
-
|
|
155
|
-
|
|
232
|
+
// v15+: parameters followed by Track Properties (draft-17+). LARGEST_OBJECT is
|
|
233
|
+
// required on every draft once the track has content, so rejecting it would tear
|
|
234
|
+
// down a session over a parameter compliant publishers must send.
|
|
235
|
+
largest = (await Parameters.decode(r, version)).largest;
|
|
236
|
+
properties = await Properties.decode(r, version);
|
|
156
237
|
}
|
|
157
|
-
return new SubscribeOk({ requestId, trackAlias });
|
|
238
|
+
return new SubscribeOk({ requestId, trackAlias, largest, properties });
|
|
158
239
|
}
|
|
159
240
|
}
|
|
160
241
|
export class SubscribeError {
|
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 Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Parameters } from \"./parameters.ts\";\nimport * as Properties from \"./properties.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// we only support Group Order descending\nconst GROUP_ORDER = 0x02;\n\nexport class Subscribe {\n\tstatic id = 0x03;\n\n\trequestId: bigint;\n\ttrackNamespace: Path.Valid;\n\ttrackName: string;\n\tsubscriberPriority: number;\n\n\tconstructor({\n\t\trequestId,\n\t\ttrackNamespace,\n\t\ttrackName,\n\t\tsubscriberPriority,\n\t}: {\n\t\trequestId: bigint;\n\t\ttrackNamespace: Path.Valid;\n\t\ttrackName: string;\n\t\tsubscriberPriority: number;\n\t}) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.trackName = trackName;\n\t\tthis.subscriberPriority = subscriberPriority;\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.u53(0x2); // filter type = LargestObject\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 = 0x2; // LargestObject\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 filterType = await r.u53();\n\t\t\tif (filterType !== 0x1 && filterType !== 0x2) {\n\t\t\t\tthrow new Error(`unsupported filter type: ${filterType}`);\n\t\t\t}\n\n\t\t\tawait Parameters.decode(r, version); // ignore parameters\n\n\t\t\treturn new Subscribe({ requestId, trackNamespace, trackName, subscriberPriority });\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\tconst filterType = params.subscriptionFilter ?? 0x2;\n\t\tif (filterType !== 0x1 && filterType !== 0x2) {\n\t\t\tthrow new Error(`unsupported filter type: ${filterType}`);\n\t\t}\n\n\t\treturn new Subscribe({ requestId, trackNamespace, trackName, subscriberPriority });\n\t}\n}\n\nexport class SubscribeOk {\n\tstatic id = 0x04;\n\n\trequestId: bigint | undefined;\n\ttrackAlias: bigint;\n\n\tconstructor({ requestId, trackAlias }: { requestId?: bigint; trackAlias: bigint }) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackAlias = trackAlias;\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(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\tparams.groupOrder = GROUP_ORDER;\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<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\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\t// Ignore largest group/object\n\t\t\t\tawait r.u62();\n\t\t\t\tawait r.u62();\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+)\n\t\t\tawait Parameters.decode(r, version);\n\t\t\tawait Properties.skip(r, version);\n\t\t}\n\n\t\treturn new SubscribeOk({ requestId, trackAlias });\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":"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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,5 +1,6 @@
|
|
|
1
1
|
import type * as Path from "../path";
|
|
2
2
|
import type { Reader, Writer } from "../stream";
|
|
3
|
+
import * as Cluster from "./cluster";
|
|
3
4
|
import { type IetfVersion } from "./version";
|
|
4
5
|
export declare class SubscribeNamespace {
|
|
5
6
|
#private;
|
|
@@ -62,15 +63,32 @@ export declare class UnsubscribeNamespace {
|
|
|
62
63
|
encode(w: Writer, _version: IetfVersion): Promise<void>;
|
|
63
64
|
static decode(r: Reader, _version: IetfVersion): Promise<UnsubscribeNamespace>;
|
|
64
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* NAMESPACE message (0x08), v16+, sent on the SUBSCRIBE_NAMESPACE bidi stream.
|
|
68
|
+
*
|
|
69
|
+
* The base message carries only the suffix. A session that negotiated the MoQ Cluster
|
|
70
|
+
* extension uses the extended form instead, which appends a Parameters field so the
|
|
71
|
+
* advertisement can carry its HOP_PATH and ROUTE_COST (see `cluster.ts`).
|
|
72
|
+
*/
|
|
65
73
|
export declare class SubscribeNamespaceEntry {
|
|
66
74
|
#private;
|
|
67
75
|
static id: number;
|
|
68
76
|
suffix: Path.Valid;
|
|
69
|
-
|
|
77
|
+
/**
|
|
78
|
+
* The MoQ Cluster parameters. Set selects the extended form, `undefined` the base one.
|
|
79
|
+
* An endpoint must not append them on a session that did not negotiate.
|
|
80
|
+
*/
|
|
81
|
+
cluster?: Cluster.Advert;
|
|
82
|
+
constructor({ suffix, cluster }: {
|
|
70
83
|
suffix: Path.Valid;
|
|
84
|
+
cluster?: Cluster.Advert;
|
|
71
85
|
});
|
|
72
|
-
encode(w: Writer,
|
|
73
|
-
|
|
86
|
+
encode(w: Writer, version: IetfVersion): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Decode the message, expecting the extended form when the session negotiated the MoQ
|
|
89
|
+
* Cluster extension. See {@link PublishNamespace.decode}.
|
|
90
|
+
*/
|
|
91
|
+
static decode(r: Reader, version: IetfVersion, negotiated?: boolean): Promise<SubscribeNamespaceEntry>;
|
|
74
92
|
}
|
|
75
93
|
export declare class SubscribeNamespaceEntryDone {
|
|
76
94
|
#private;
|
|
@@ -94,8 +112,4 @@ export declare class PublishBlocked {
|
|
|
94
112
|
encode(w: Writer, _version: IetfVersion): Promise<void>;
|
|
95
113
|
static decode(r: Reader, _version: IetfVersion): Promise<PublishBlocked>;
|
|
96
114
|
}
|
|
97
|
-
export declare const SubscribeAnnounces: typeof SubscribeNamespace;
|
|
98
|
-
export declare const SubscribeAnnouncesOk: typeof SubscribeNamespaceOk;
|
|
99
|
-
export declare const SubscribeAnnouncesError: typeof SubscribeNamespaceError;
|
|
100
|
-
export declare const UnsubscribeAnnounces: typeof UnsubscribeNamespace;
|
|
101
115
|
//# sourceMappingURL=subscribe_namespace.d.ts.map
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"subscribe_namespace.d.ts","sourceRoot":"","sources":["../../src/ietf/subscribe_namespace.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/* @ts-self-types="./subscribe_namespace.d.ts" */
|
|
2
|
+
import * as Cluster from "./cluster.js";
|
|
2
3
|
import * as Message from "./message.js";
|
|
3
4
|
import * as Namespace from "./namespace.js";
|
|
4
5
|
import { Parameters } from "./parameters.js";
|
|
@@ -181,25 +182,46 @@ export class UnsubscribeNamespace {
|
|
|
181
182
|
return new UnsubscribeNamespace({ requestId });
|
|
182
183
|
}
|
|
183
184
|
}
|
|
184
|
-
|
|
185
|
+
/**
|
|
186
|
+
* NAMESPACE message (0x08), v16+, sent on the SUBSCRIBE_NAMESPACE bidi stream.
|
|
187
|
+
*
|
|
188
|
+
* The base message carries only the suffix. A session that negotiated the MoQ Cluster
|
|
189
|
+
* extension uses the extended form instead, which appends a Parameters field so the
|
|
190
|
+
* advertisement can carry its HOP_PATH and ROUTE_COST (see `cluster.ts`).
|
|
191
|
+
*/
|
|
185
192
|
export class SubscribeNamespaceEntry {
|
|
186
193
|
static id = 0x08;
|
|
187
194
|
suffix;
|
|
188
|
-
|
|
195
|
+
/**
|
|
196
|
+
* The MoQ Cluster parameters. Set selects the extended form, `undefined` the base one.
|
|
197
|
+
* An endpoint must not append them on a session that did not negotiate.
|
|
198
|
+
*/
|
|
199
|
+
cluster;
|
|
200
|
+
constructor({ suffix, cluster }) {
|
|
189
201
|
this.suffix = suffix;
|
|
202
|
+
this.cluster = cluster;
|
|
190
203
|
}
|
|
191
|
-
async #encode(w) {
|
|
204
|
+
async #encode(w, version) {
|
|
192
205
|
await Namespace.encode(w, this.suffix);
|
|
206
|
+
// The base form has no Parameters field at all, so there is nothing to write.
|
|
207
|
+
if (this.cluster)
|
|
208
|
+
await Cluster.intoParams(this.cluster).encode(w, version);
|
|
193
209
|
}
|
|
194
|
-
async encode(w,
|
|
195
|
-
return Message.encode(w, this.#encode
|
|
210
|
+
async encode(w, version) {
|
|
211
|
+
return Message.encode(w, (wr) => this.#encode(wr, version));
|
|
196
212
|
}
|
|
197
|
-
|
|
198
|
-
|
|
213
|
+
/**
|
|
214
|
+
* Decode the message, expecting the extended form when the session negotiated the MoQ
|
|
215
|
+
* Cluster extension. See {@link PublishNamespace.decode}.
|
|
216
|
+
*/
|
|
217
|
+
static async decode(r, version, negotiated = false) {
|
|
218
|
+
return Message.decode(r, (rd) => SubscribeNamespaceEntry.#decode(rd, version, negotiated));
|
|
199
219
|
}
|
|
200
|
-
static async #decode(r) {
|
|
220
|
+
static async #decode(r, version, negotiated) {
|
|
201
221
|
const suffix = await Namespace.decode(r);
|
|
202
|
-
|
|
222
|
+
if (!negotiated)
|
|
223
|
+
return new SubscribeNamespaceEntry({ suffix });
|
|
224
|
+
return new SubscribeNamespaceEntry({ suffix, cluster: await Cluster.decodeParams(r, version) });
|
|
203
225
|
}
|
|
204
226
|
}
|
|
205
227
|
/// NAMESPACE_DONE message (0x0E) — v16 only, sent on SUBSCRIBE_NAMESPACE bidi stream
|
|
@@ -248,9 +270,4 @@ export class PublishBlocked {
|
|
|
248
270
|
return new PublishBlocked({ suffix, trackName });
|
|
249
271
|
}
|
|
250
272
|
}
|
|
251
|
-
// Backward compatibility aliases
|
|
252
|
-
export const SubscribeAnnounces = SubscribeNamespace;
|
|
253
|
-
export const SubscribeAnnouncesOk = SubscribeNamespaceOk;
|
|
254
|
-
export const SubscribeAnnouncesError = SubscribeNamespaceError;
|
|
255
|
-
export const UnsubscribeAnnounces = UnsubscribeNamespace;
|
|
256
273
|
//# sourceMappingURL=subscribe_namespace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscribe_namespace.js","sourceRoot":"","sources":["../../src/ietf/subscribe_namespace.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAoB,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,4EAA4E;AAC5E,sDAAsD;AACtD,SAAS,eAAe,CAAC,OAAoB;IAC5C,QAAQ,OAAO,EAAE,CAAC;QACjB,KAAK,OAAO,CAAC,QAAQ,CAAC;QACtB,KAAK,OAAO,CAAC,QAAQ,CAAC;QACtB,KAAK,OAAO,CAAC,QAAQ,CAAC;QACtB,KAAK,OAAO,CAAC,QAAQ;YACpB,OAAO,IAAI,CAAC;QACb;YACC,OAAO,KAAK,CAAC;IACf,CAAC;AACF,CAAC;AAED,sDAAsD;AACtD,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,wEAAwE;AACxE,MAAM,OAAO,kBAAkB;IAC9B,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAEjB,SAAS,CAAa;IACtB,SAAS,CAAS;IAElB,YAAY,EAAE,SAAS,EAAE,SAAS,EAAgD;QACjF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QAC5C,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,qDAAqD,OAAO,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,IAAI,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3C,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,kBAAkB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QACnD,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,qDAAqD,OAAO,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAEpC,OAAO,IAAI,kBAAkB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IACzD,CAAC;CACD;AAED,yEAAyE;AACzE,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,wEAAwE;AACxE,qCAAqC;AACrC,MAAM,OAAO,wBAAwB;IACpC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAEjB,SAAS,CAAa;IACtB,SAAS,CAAS;IAClB,gBAAgB,CAAS,CAAC,yCAAyC;IAEnE,YAAY,EACX,SAAS,EACT,SAAS,EACT,gBAAgB,GAAG,CAAC,GAKpB;QACA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QAC5C,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,+DAA+D,OAAO,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,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,SAAS,CAAC,CAAC;QAC1C,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClE,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,IAAI,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3C,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,wBAAwB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QACnD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,+DAA+D,OAAO,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,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,2EAA2E;QAC3F,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClE,gBAAgB,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAClC,CAAC;QACD,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAEpC,OAAO,IAAI,wBAAwB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACjF,CAAC;CACD;AAED,sEAAsE;AACtE,GAAG;AACH,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,kCAAkC;AAClC,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC,MAAM,OAAO,oBAAoB;IAChC,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;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,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAChC,OAAO,IAAI,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAChD,CAAC;CACD;AAED,MAAM,OAAO,uBAAuB;IACnC,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,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC3D,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,uBAAuB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;IAC5E,CAAC;CACD;AAED,MAAM,OAAO,oBAAoB;IAChC,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;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,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAChC,OAAO,IAAI,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAChD,CAAC;CACD;AAED,gFAAgF;AAChF,MAAM,OAAO,uBAAuB;IACnC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAEjB,MAAM,CAAa;IAEnB,YAAY,EAAE,MAAM,EAA0B;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS;QACtB,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,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,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS;QAC7B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,IAAI,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;CACD;AAED,qFAAqF;AACrF,MAAM,OAAO,2BAA2B;IACvC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAEjB,MAAM,CAAa;IAEnB,YAAY,EAAE,MAAM,EAA0B;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS;QACtB,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,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,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS;QAC7B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,IAAI,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;CACD;AAED,2FAA2F;AAC3F,MAAM,OAAO,cAAc;IAC1B,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAEjB,MAAM,CAAa;IACnB,SAAS,CAAS;IAElB,YAAY,EAAE,MAAM,EAAE,SAAS,EAA6C;QAC3E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS;QACtB,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChC,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,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QACnC,OAAO,IAAI,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAClD,CAAC;CACD;AAED,iCAAiC;AACjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AACzD,MAAM,CAAC,MAAM,uBAAuB,GAAG,uBAAuB,CAAC;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,CAAC","sourcesContent":["import type * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Parameters } from \"./parameters.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// 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/// NAMESPACE message (0x08) — v16 only, sent on SUBSCRIBE_NAMESPACE bidi stream\nexport class SubscribeNamespaceEntry {\n\tstatic id = 0x08;\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<SubscribeNamespaceEntry> {\n\t\treturn Message.decode(r, SubscribeNamespaceEntry.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<SubscribeNamespaceEntry> {\n\t\tconst suffix = await Namespace.decode(r);\n\t\treturn new SubscribeNamespaceEntry({ suffix });\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\n// Backward compatibility aliases\nexport const SubscribeAnnounces = SubscribeNamespace;\nexport const SubscribeAnnouncesOk = SubscribeNamespaceOk;\nexport const SubscribeAnnouncesError = SubscribeNamespaceError;\nexport const UnsubscribeAnnounces = UnsubscribeNamespace;\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\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"]}
|
package/ietf/subscriber.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import * as announce from "../announced";
|
|
2
|
+
import * as broadcast from "../broadcast";
|
|
3
3
|
import * as Path from "../path";
|
|
4
4
|
import type { Reader, Stream } from "../stream";
|
|
5
5
|
import type { Session } from "./adapter";
|
|
6
|
+
import * as Cluster from "./cluster";
|
|
6
7
|
import { type Group as GroupMessage } from "./object";
|
|
7
8
|
import { type Publish } from "./publish";
|
|
8
|
-
import {
|
|
9
|
+
import { PublishNamespace } from "./publish_namespace";
|
|
9
10
|
/**
|
|
10
11
|
* Handles subscribing to broadcasts using moq-transport protocol.
|
|
11
12
|
* Uses the stream-per-request pattern (real bidi streams for v17, virtual for v14-v16).
|
|
@@ -16,19 +17,31 @@ export declare class Subscriber {
|
|
|
16
17
|
#private;
|
|
17
18
|
/**
|
|
18
19
|
* Creates a new Subscriber instance.
|
|
19
|
-
* @param session - The session abstraction for bidi streams and request IDs
|
|
20
20
|
*
|
|
21
21
|
* @internal
|
|
22
22
|
*/
|
|
23
|
-
constructor(session:
|
|
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
|
+
});
|
|
24
29
|
/**
|
|
25
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.
|
|
26
35
|
*/
|
|
27
|
-
announced(prefix?: Path.Valid):
|
|
36
|
+
announced(prefix?: Path.Valid): announce.Consumer;
|
|
28
37
|
/**
|
|
29
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.
|
|
30
43
|
*/
|
|
31
|
-
consume(path: Path.Valid):
|
|
44
|
+
consume(path: Path.Valid): broadcast.Consumer;
|
|
32
45
|
/**
|
|
33
46
|
* Handles an incoming PUBLISH_NAMESPACE on a bidi stream.
|
|
34
47
|
* Tracks announced broadcasts and notifies consumers.
|