@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/properties.js
CHANGED
|
@@ -1,17 +1,60 @@
|
|
|
1
1
|
/* @ts-self-types="./properties.d.ts" */
|
|
2
|
+
import { Timescale } from "../time.js";
|
|
2
3
|
import { Version } from "./version.js";
|
|
3
|
-
|
|
4
|
+
// TIMESCALE (0x08), from the MOQ Properties registry shared with draft-ietf-moq-loc-04.
|
|
5
|
+
// Track scope: it declares the units of every object Timestamp on the track, and its
|
|
6
|
+
// presence is what opts the track into timestamps at all.
|
|
7
|
+
const TIMESCALE = 0x08n;
|
|
8
|
+
// DEFAULT_PUBLISHER_GROUP_ORDER (0x22), the publisher's delivery preference for the track.
|
|
9
|
+
// It shares its number with the GROUP_ORDER *message parameter*, which is a different
|
|
10
|
+
// registry: that one is only legal in SUBSCRIBE, PUBLISH_OK, and FETCH, where the
|
|
11
|
+
// subscriber states its own preference.
|
|
12
|
+
const DEFAULT_PUBLISHER_GROUP_ORDER = 0x22n;
|
|
13
|
+
/**
|
|
14
|
+
* DEFAULT_PUBLISHER_GROUP_ORDER's descending value: the newest group first, which is what
|
|
15
|
+
* we serve, matching moq-lite.
|
|
16
|
+
*/
|
|
17
|
+
export const DESCENDING = 0x02;
|
|
18
|
+
/// Write the block, which is the final field of the message: no count and no length, so
|
|
19
|
+
/// the caller must not append anything after it.
|
|
20
|
+
///
|
|
21
|
+
/// Properties are serialized in ascending order by type, delta-encoded.
|
|
22
|
+
export async function encode(w, properties, version) {
|
|
23
|
+
// Draft-16 carries the same block under the name Track Extensions, but we only write it
|
|
24
|
+
// from draft-17 on: a draft-16 peer running an older build rejects any trailing bytes it
|
|
25
|
+
// doesn't parse, and draft-16 never registered TIMESCALE (0x08). We still read the block
|
|
26
|
+
// on draft-16, so a peer that sends one is understood.
|
|
27
|
+
if (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
let prevType = 0n;
|
|
31
|
+
if (properties.timescale !== undefined) {
|
|
32
|
+
await w.u62(TIMESCALE);
|
|
33
|
+
await w.u62(BigInt(properties.timescale));
|
|
34
|
+
prevType = TIMESCALE;
|
|
35
|
+
}
|
|
36
|
+
if (properties.groupOrder !== undefined) {
|
|
37
|
+
await w.u62(DEFAULT_PUBLISHER_GROUP_ORDER - prevType);
|
|
38
|
+
await w.u62(BigInt(properties.groupOrder));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/// Parse Track Properties from the remaining bytes of a message.
|
|
4
42
|
///
|
|
5
43
|
/// Track Properties are delta-encoded Key-Value-Pairs (same format as
|
|
6
|
-
/// Message Parameters) but with NO count prefix
|
|
44
|
+
/// Message Parameters) but with NO count prefix: they extend to the
|
|
7
45
|
/// end of the message payload.
|
|
8
46
|
///
|
|
9
|
-
///
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
47
|
+
/// Unlike an unknown message parameter, an unknown property is skipped rather than fatal,
|
|
48
|
+
/// which is what lets a relay forward properties it does not implement.
|
|
49
|
+
///
|
|
50
|
+
/// Drafts before 16 have no such block, so this reads nothing and leaves the reader alone.
|
|
51
|
+
export async function decode(r, version) {
|
|
52
|
+
// Draft-16 calls the block Track Extensions, draft-17+ Track Properties. Same encoding, so
|
|
53
|
+
// read either rather than faulting the message for trailing bytes.
|
|
54
|
+
if (version === Version.DRAFT_14 || version === Version.DRAFT_15) {
|
|
55
|
+
return {};
|
|
14
56
|
}
|
|
57
|
+
const properties = {};
|
|
15
58
|
let prevType = 0n;
|
|
16
59
|
let i = 0;
|
|
17
60
|
while (!(await r.done())) {
|
|
@@ -21,7 +64,20 @@ export async function skip(r, version) {
|
|
|
21
64
|
i++;
|
|
22
65
|
if (abs % 2n === 0n) {
|
|
23
66
|
// Even type: single varint value
|
|
24
|
-
await r.u62();
|
|
67
|
+
const value = await r.u62();
|
|
68
|
+
if (abs === TIMESCALE && value > 0n) {
|
|
69
|
+
// A zero timescale is invalid; treat it as no declaration rather than
|
|
70
|
+
// failing the whole message over one property we could have ignored.
|
|
71
|
+
properties.timescale = Timescale(Number(value));
|
|
72
|
+
}
|
|
73
|
+
else if (abs === DEFAULT_PUBLISHER_GROUP_ORDER) {
|
|
74
|
+
// Only Ascending (0x1) and Descending (0x2) are defined here. Unlike the draft-14
|
|
75
|
+
// fields, 0x0 has no "publisher decides" meaning to fall back on.
|
|
76
|
+
if (value < 1n || value > 2n) {
|
|
77
|
+
throw new Error(`unknown group order: ${value}`);
|
|
78
|
+
}
|
|
79
|
+
properties.groupOrder = Number(value);
|
|
80
|
+
}
|
|
25
81
|
}
|
|
26
82
|
else {
|
|
27
83
|
// Odd type: length-prefixed bytes
|
|
@@ -29,5 +85,6 @@ export async function skip(r, version) {
|
|
|
29
85
|
await r.read(len);
|
|
30
86
|
}
|
|
31
87
|
}
|
|
88
|
+
return properties;
|
|
32
89
|
}
|
|
33
90
|
//# sourceMappingURL=properties.js.map
|
package/ietf/properties.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"properties.js","sourceRoot":"","sources":["../../src/ietf/properties.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,
|
|
1
|
+
{"version":3,"file":"properties.js","sourceRoot":"","sources":["../../src/ietf/properties.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Reader, Writer } from \"../stream.ts\";\nimport { Timescale } from \"../time.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// TIMESCALE (0x08), from the MOQ Properties registry shared with draft-ietf-moq-loc-04.\n// Track scope: it declares the units of every object Timestamp on the track, and its\n// presence is what opts the track into timestamps at all.\nconst TIMESCALE = 0x08n;\n\n// DEFAULT_PUBLISHER_GROUP_ORDER (0x22), the publisher's delivery preference for the track.\n// It shares its number with the GROUP_ORDER *message parameter*, which is a different\n// registry: that one is only legal in SUBSCRIBE, PUBLISH_OK, and FETCH, where the\n// subscriber states its own preference.\nconst DEFAULT_PUBLISHER_GROUP_ORDER = 0x22n;\n\n/**\n * DEFAULT_PUBLISHER_GROUP_ORDER's descending value: the newest group first, which is what\n * we serve, matching moq-lite.\n */\nexport const DESCENDING = 0x02;\n\n/// The Track Properties block carried at the end of SUBSCRIBE_OK, PUBLISH, and FETCH_OK.\nexport interface Properties {\n\t/// The track's Timescale, which declares the units of every object Timestamp on it.\n\t///\n\t/// `undefined` declares no timeline, so the subscriber times objects by arrival.\n\ttimescale?: Timescale;\n\n\t/// The publisher's preference for prioritizing groups within a subscription,\n\t/// Ascending (0x1) or Descending (0x2).\n\t///\n\t/// `undefined` means the draft default, Ascending.\n\tgroupOrder?: number;\n}\n\n/// Write the block, which is the final field of the message: no count and no length, so\n/// the caller must not append anything after it.\n///\n/// Properties are serialized in ascending order by type, delta-encoded.\nexport async function encode(w: Writer, properties: Properties, version: IetfVersion): Promise<void> {\n\t// Draft-16 carries the same block under the name Track Extensions, but we only write it\n\t// from draft-17 on: a draft-16 peer running an older build rejects any trailing bytes it\n\t// doesn't parse, and draft-16 never registered TIMESCALE (0x08). We still read the block\n\t// on draft-16, so a peer that sends one is understood.\n\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\treturn;\n\t}\n\n\tlet prevType = 0n;\n\n\tif (properties.timescale !== undefined) {\n\t\tawait w.u62(TIMESCALE);\n\t\tawait w.u62(BigInt(properties.timescale));\n\t\tprevType = TIMESCALE;\n\t}\n\n\tif (properties.groupOrder !== undefined) {\n\t\tawait w.u62(DEFAULT_PUBLISHER_GROUP_ORDER - prevType);\n\t\tawait w.u62(BigInt(properties.groupOrder));\n\t}\n}\n\n/// Parse Track Properties from the remaining bytes of a message.\n///\n/// Track Properties are delta-encoded Key-Value-Pairs (same format as\n/// Message Parameters) but with NO count prefix: they extend to the\n/// end of the message payload.\n///\n/// Unlike an unknown message parameter, an unknown property is skipped rather than fatal,\n/// which is what lets a relay forward properties it does not implement.\n///\n/// Drafts before 16 have no such block, so this reads nothing and leaves the reader alone.\nexport async function decode(r: Reader, version: IetfVersion): Promise<Properties> {\n\t// Draft-16 calls the block Track Extensions, draft-17+ Track Properties. Same encoding, so\n\t// read either rather than faulting the message for trailing bytes.\n\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15) {\n\t\treturn {};\n\t}\n\n\tconst properties: Properties = {};\n\tlet prevType = 0n;\n\tlet i = 0;\n\n\twhile (!(await r.done())) {\n\t\tconst delta = await r.u62();\n\t\tconst abs = i === 0 ? delta : prevType + delta;\n\t\tprevType = abs;\n\t\ti++;\n\n\t\tif (abs % 2n === 0n) {\n\t\t\t// Even type: single varint value\n\t\t\tconst value = await r.u62();\n\t\t\tif (abs === TIMESCALE && value > 0n) {\n\t\t\t\t// A zero timescale is invalid; treat it as no declaration rather than\n\t\t\t\t// failing the whole message over one property we could have ignored.\n\t\t\t\tproperties.timescale = Timescale(Number(value));\n\t\t\t} else if (abs === DEFAULT_PUBLISHER_GROUP_ORDER) {\n\t\t\t\t// Only Ascending (0x1) and Descending (0x2) are defined here. Unlike the draft-14\n\t\t\t\t// fields, 0x0 has no \"publisher decides\" meaning to fall back on.\n\t\t\t\tif (value < 1n || value > 2n) {\n\t\t\t\t\tthrow new Error(`unknown group order: ${value}`);\n\t\t\t\t}\n\t\t\t\tproperties.groupOrder = Number(value);\n\t\t\t}\n\t\t} else {\n\t\t\t// Odd type: length-prefixed bytes\n\t\t\tconst len = await r.u53();\n\t\t\tawait r.read(len);\n\t\t}\n\t}\n\n\treturn properties;\n}\n"]}
|
package/ietf/publish.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/ietf/publish.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAKnD,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,cAAc,CAAC;AAIzD,qBAAa,OAAO;;IACnB,MAAM,CAAC,EAAE,SAAQ;IAEjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC3D,OAAO,EAAE,OAAO,CAAC;IAEjB,YAAY,EACX,SAAS,EACT,cAAc,EACd,SAAS,EACT,UAAU,EACV,UAAU,EACV,aAAa,EACb,OAAO,EACP,OAAO,GACP,EAAE;QACF,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC;QAC3B,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,OAAO,CAAC;QACvB,OAAO,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAC;QAC3D,OAAO,EAAE,OAAO,CAAC;KACjB,EASA;
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/ietf/publish.ts"],"names":[],"mappings":"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"}
|
package/ietf/publish.js
CHANGED
|
@@ -52,12 +52,20 @@ export class Publish {
|
|
|
52
52
|
throw new Error("contentExists and largest must both be true or false");
|
|
53
53
|
}
|
|
54
54
|
const params = new Parameters();
|
|
55
|
-
|
|
55
|
+
// GROUP_ORDER is a legal PUBLISH parameter only through draft-15; a later peer closes
|
|
56
|
+
// the session with PROTOCOL_VIOLATION when it sees one. The publisher's preference is
|
|
57
|
+
// a DEFAULT_PUBLISHER_GROUP_ORDER track property instead, which we write from
|
|
58
|
+
// draft-17 on. Draft-16 gets neither form; see Properties.encode.
|
|
59
|
+
if (version === Version.DRAFT_15) {
|
|
60
|
+
params.groupOrder = this.groupOrder;
|
|
61
|
+
}
|
|
56
62
|
params.forward = this.forward;
|
|
57
63
|
if (this.largest) {
|
|
58
64
|
params.largest = this.largest;
|
|
59
65
|
}
|
|
60
66
|
await params.encode(w, version);
|
|
67
|
+
// Track Properties are the final field, so nothing may follow.
|
|
68
|
+
await Properties.encode(w, { groupOrder: this.groupOrder }, version);
|
|
61
69
|
}
|
|
62
70
|
}
|
|
63
71
|
async encode(w, version) {
|
|
@@ -93,8 +101,10 @@ export class Publish {
|
|
|
93
101
|
}
|
|
94
102
|
// v15+: parameters followed by Track Properties (draft-17+)
|
|
95
103
|
const params = await Parameters.decode(r, version);
|
|
96
|
-
await Properties.
|
|
97
|
-
|
|
104
|
+
const properties = await Properties.decode(r, version);
|
|
105
|
+
// GROUP_ORDER is only legal here through draft-15, but keep accepting it so a peer that
|
|
106
|
+
// still sends it doesn't have its session torn down over a hint.
|
|
107
|
+
const groupOrder = properties.groupOrder ?? params.groupOrder ?? 0x02;
|
|
98
108
|
const forward = params.forward ?? true;
|
|
99
109
|
const largest = params.largest;
|
|
100
110
|
return new Publish({
|
package/ietf/publish.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/ietf/publish.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Parameters } from \"./parameters.ts\";\nimport * as Properties from \"./properties.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// PUBLISH messages are new in draft-14\n\nexport class Publish {\n\tstatic id = 0x1d;\n\n\trequestId: bigint;\n\ttrackNamespace: Path.Valid;\n\ttrackName: string;\n\ttrackAlias: bigint;\n\tgroupOrder: number;\n\tcontentExists: boolean;\n\tlargest: { groupId: bigint; objectId: bigint } | undefined;\n\tforward: boolean;\n\n\tconstructor({\n\t\trequestId,\n\t\ttrackNamespace,\n\t\ttrackName,\n\t\ttrackAlias,\n\t\tgroupOrder,\n\t\tcontentExists,\n\t\tlargest,\n\t\tforward,\n\t}: {\n\t\trequestId: bigint;\n\t\ttrackNamespace: Path.Valid;\n\t\ttrackName: string;\n\t\ttrackAlias: bigint;\n\t\tgroupOrder: number;\n\t\tcontentExists: boolean;\n\t\tlargest: { groupId: bigint; objectId: bigint } | undefined;\n\t\tforward: boolean;\n\t}) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.trackName = trackName;\n\t\tthis.trackAlias = trackAlias;\n\t\tthis.groupOrder = groupOrder;\n\t\tthis.contentExists = contentExists;\n\t\tthis.largest = largest;\n\t\tthis.forward = forward;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait w.u62(0n); // required_request_id_delta = 0 (Draft17 only)\n\t\t}\n\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\tawait w.string(this.trackName);\n\t\tawait w.u62(this.trackAlias);\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tawait w.u8(this.groupOrder);\n\t\t\tawait w.bool(this.contentExists);\n\t\t\tif (this.contentExists !== !!this.largest) {\n\t\t\t\tthrow new Error(\"contentExists and largest must both be true or false\");\n\t\t\t}\n\t\t\tif (this.largest) {\n\t\t\t\tawait w.u62(this.largest.groupId);\n\t\t\t\tawait w.u62(this.largest.objectId);\n\t\t\t}\n\t\t\tawait w.bool(this.forward);\n\t\t\tawait w.u53(0); // size of parameters\n\t\t} else {\n\t\t\t// v15+: fields in parameters\n\t\t\tif (this.contentExists !== !!this.largest) {\n\t\t\t\tthrow new Error(\"contentExists and largest must both be true or false\");\n\t\t\t}\n\t\t\tconst params = new Parameters();\n\t\t\tparams.groupOrder = this.groupOrder;\n\t\t\tparams.forward = this.forward;\n\t\t\tif (this.largest) {\n\t\t\t\tparams.largest = this.largest;\n\t\t\t}\n\t\t\tawait params.encode(w, version);\n\t\t}\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (mw) => this.#encode(mw, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<Publish> {\n\t\treturn Message.decode(r, (mr) => Publish.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<Publish> {\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta (Draft17 only)\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\tconst trackName = await r.string();\n\t\tconst trackAlias = await r.u62();\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tconst groupOrder = await r.u8();\n\t\t\tconst contentExists = await r.bool();\n\t\t\tconst largest = contentExists ? { groupId: await r.u62(), objectId: await r.u62() } : undefined;\n\t\t\tconst forward = await r.bool();\n\t\t\tawait Parameters.decode(r, version); // ignore parameters\n\t\t\treturn new Publish({\n\t\t\t\trequestId,\n\t\t\t\ttrackNamespace,\n\t\t\t\ttrackName,\n\t\t\t\ttrackAlias,\n\t\t\t\tgroupOrder,\n\t\t\t\tcontentExists,\n\t\t\t\tlargest,\n\t\t\t\tforward,\n\t\t\t});\n\t\t}\n\t\t// v15+: parameters followed by Track Properties (draft-17+)\n\t\tconst params = await Parameters.decode(r, version);\n\t\tawait Properties.skip(r, version);\n\t\tconst groupOrder = params.groupOrder ?? 0x02;\n\t\tconst forward = params.forward ?? true;\n\t\tconst largest = params.largest;\n\t\treturn new Publish({\n\t\t\trequestId,\n\t\t\ttrackNamespace,\n\t\t\ttrackName,\n\t\t\ttrackAlias,\n\t\t\tgroupOrder,\n\t\t\tcontentExists: !!largest,\n\t\t\tlargest,\n\t\t\tforward,\n\t\t});\n\t}\n}\n\nexport class PublishOk {\n\tstatic id = 0x1e;\n\n\tasync #encode(_w: Writer): Promise<void> {\n\t\tthrow new Error(\"PUBLISH_OK messages are not supported\");\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishOk> {\n\t\treturn Message.decode(r, PublishOk.#decode);\n\t}\n\n\tstatic async #decode(_r: Reader): Promise<PublishOk> {\n\t\tthrow new Error(\"PUBLISH_OK messages are not supported\");\n\t}\n}\n\nexport class PublishError {\n\tstatic id = 0x1f;\n\n\trequestId: bigint;\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\terrorCode,\n\t\treasonPhrase,\n\t}: { requestId: bigint; errorCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishError> {\n\t\treturn Message.decode(r, PublishError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\n// In draft-14, this message is renamed from SUBSCRIBE_DONE to PUBLISH_DONE\nexport class PublishDone {\n\tstatic readonly id = 0x0b;\n\n\trequestId: bigint | undefined;\n\tstatusCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\tstatusCode,\n\t\treasonPhrase,\n\t}: { requestId?: bigint; statusCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.statusCode = statusCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\tif (this.requestId === undefined) throw new Error(\"requestId required for draft14-16\");\n\t\t\tawait w.u62(this.requestId);\n\t\t}\n\t\tawait w.u62(BigInt(this.statusCode));\n\t\tawait w.u62(BigInt(0)); // stream_count = 0 (unsupported)\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (mw) => this.#encode(mw, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishDone> {\n\t\treturn Message.decode(r, (mr) => PublishDone.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishDone> {\n\t\tconst requestId =\n\t\t\tversion === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16\n\t\t\t\t? await r.u62()\n\t\t\t\t: undefined;\n\t\tconst statusCode = Number(await r.u62());\n\t\tawait r.u62(); // ignore stream_count\n\t\tconst reasonPhrase = await r.string();\n\n\t\treturn new PublishDone({ requestId, statusCode, reasonPhrase });\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/ietf/publish.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Parameters } from \"./parameters.ts\";\nimport * as Properties from \"./properties.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// PUBLISH messages are new in draft-14\n\nexport class Publish {\n\tstatic id = 0x1d;\n\n\trequestId: bigint;\n\ttrackNamespace: Path.Valid;\n\ttrackName: string;\n\ttrackAlias: bigint;\n\tgroupOrder: number;\n\tcontentExists: boolean;\n\tlargest: { groupId: bigint; objectId: bigint } | undefined;\n\tforward: boolean;\n\n\tconstructor({\n\t\trequestId,\n\t\ttrackNamespace,\n\t\ttrackName,\n\t\ttrackAlias,\n\t\tgroupOrder,\n\t\tcontentExists,\n\t\tlargest,\n\t\tforward,\n\t}: {\n\t\trequestId: bigint;\n\t\ttrackNamespace: Path.Valid;\n\t\ttrackName: string;\n\t\ttrackAlias: bigint;\n\t\tgroupOrder: number;\n\t\tcontentExists: boolean;\n\t\tlargest: { groupId: bigint; objectId: bigint } | undefined;\n\t\tforward: boolean;\n\t}) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.trackName = trackName;\n\t\tthis.trackAlias = trackAlias;\n\t\tthis.groupOrder = groupOrder;\n\t\tthis.contentExists = contentExists;\n\t\tthis.largest = largest;\n\t\tthis.forward = forward;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait w.u62(0n); // required_request_id_delta = 0 (Draft17 only)\n\t\t}\n\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\tawait w.string(this.trackName);\n\t\tawait w.u62(this.trackAlias);\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tawait w.u8(this.groupOrder);\n\t\t\tawait w.bool(this.contentExists);\n\t\t\tif (this.contentExists !== !!this.largest) {\n\t\t\t\tthrow new Error(\"contentExists and largest must both be true or false\");\n\t\t\t}\n\t\t\tif (this.largest) {\n\t\t\t\tawait w.u62(this.largest.groupId);\n\t\t\t\tawait w.u62(this.largest.objectId);\n\t\t\t}\n\t\t\tawait w.bool(this.forward);\n\t\t\tawait w.u53(0); // size of parameters\n\t\t} else {\n\t\t\t// v15+: fields in parameters\n\t\t\tif (this.contentExists !== !!this.largest) {\n\t\t\t\tthrow new Error(\"contentExists and largest must both be true or false\");\n\t\t\t}\n\t\t\tconst params = new Parameters();\n\t\t\t// GROUP_ORDER is a legal PUBLISH parameter only through draft-15; a later peer closes\n\t\t\t// the session with PROTOCOL_VIOLATION when it sees one. The publisher's preference is\n\t\t\t// a DEFAULT_PUBLISHER_GROUP_ORDER track property instead, which we write from\n\t\t\t// draft-17 on. Draft-16 gets neither form; see Properties.encode.\n\t\t\tif (version === Version.DRAFT_15) {\n\t\t\t\tparams.groupOrder = this.groupOrder;\n\t\t\t}\n\t\t\tparams.forward = this.forward;\n\t\t\tif (this.largest) {\n\t\t\t\tparams.largest = this.largest;\n\t\t\t}\n\t\t\tawait params.encode(w, version);\n\n\t\t\t// Track Properties are the final field, so nothing may follow.\n\t\t\tawait Properties.encode(w, { groupOrder: this.groupOrder }, version);\n\t\t}\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (mw) => this.#encode(mw, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<Publish> {\n\t\treturn Message.decode(r, (mr) => Publish.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<Publish> {\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta (Draft17 only)\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\tconst trackName = await r.string();\n\t\tconst trackAlias = await r.u62();\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tconst groupOrder = await r.u8();\n\t\t\tconst contentExists = await r.bool();\n\t\t\tconst largest = contentExists ? { groupId: await r.u62(), objectId: await r.u62() } : undefined;\n\t\t\tconst forward = await r.bool();\n\t\t\tawait Parameters.decode(r, version); // ignore parameters\n\t\t\treturn new Publish({\n\t\t\t\trequestId,\n\t\t\t\ttrackNamespace,\n\t\t\t\ttrackName,\n\t\t\t\ttrackAlias,\n\t\t\t\tgroupOrder,\n\t\t\t\tcontentExists,\n\t\t\t\tlargest,\n\t\t\t\tforward,\n\t\t\t});\n\t\t}\n\t\t// v15+: parameters followed by Track Properties (draft-17+)\n\t\tconst params = await Parameters.decode(r, version);\n\t\tconst properties = await Properties.decode(r, version);\n\t\t// GROUP_ORDER is only legal here through draft-15, but keep accepting it so a peer that\n\t\t// still sends it doesn't have its session torn down over a hint.\n\t\tconst groupOrder = properties.groupOrder ?? params.groupOrder ?? 0x02;\n\t\tconst forward = params.forward ?? true;\n\t\tconst largest = params.largest;\n\t\treturn new Publish({\n\t\t\trequestId,\n\t\t\ttrackNamespace,\n\t\t\ttrackName,\n\t\t\ttrackAlias,\n\t\t\tgroupOrder,\n\t\t\tcontentExists: !!largest,\n\t\t\tlargest,\n\t\t\tforward,\n\t\t});\n\t}\n}\n\nexport class PublishOk {\n\tstatic id = 0x1e;\n\n\tasync #encode(_w: Writer): Promise<void> {\n\t\tthrow new Error(\"PUBLISH_OK messages are not supported\");\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishOk> {\n\t\treturn Message.decode(r, PublishOk.#decode);\n\t}\n\n\tstatic async #decode(_r: Reader): Promise<PublishOk> {\n\t\tthrow new Error(\"PUBLISH_OK messages are not supported\");\n\t}\n}\n\nexport class PublishError {\n\tstatic id = 0x1f;\n\n\trequestId: bigint;\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\terrorCode,\n\t\treasonPhrase,\n\t}: { requestId: bigint; errorCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishError> {\n\t\treturn Message.decode(r, PublishError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\n// In draft-14, this message is renamed from SUBSCRIBE_DONE to PUBLISH_DONE\nexport class PublishDone {\n\tstatic readonly id = 0x0b;\n\n\trequestId: bigint | undefined;\n\tstatusCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\tstatusCode,\n\t\treasonPhrase,\n\t}: { requestId?: bigint; statusCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.statusCode = statusCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\tif (this.requestId === undefined) throw new Error(\"requestId required for draft14-16\");\n\t\t\tawait w.u62(this.requestId);\n\t\t}\n\t\tawait w.u62(BigInt(this.statusCode));\n\t\tawait w.u62(BigInt(0)); // stream_count = 0 (unsupported)\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (mw) => this.#encode(mw, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishDone> {\n\t\treturn Message.decode(r, (mr) => PublishDone.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishDone> {\n\t\tconst requestId =\n\t\t\tversion === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16\n\t\t\t\t? await r.u62()\n\t\t\t\t: undefined;\n\t\tconst statusCode = Number(await r.u62());\n\t\tawait r.u62(); // ignore stream_count\n\t\tconst reasonPhrase = await r.string();\n\n\t\treturn new PublishDone({ requestId, statusCode, reasonPhrase });\n\t}\n}\n"]}
|
|
@@ -1,17 +1,31 @@
|
|
|
1
1
|
import type * as Path from "../path";
|
|
2
2
|
import type { Reader, Writer } from "../stream";
|
|
3
|
+
import * as Cluster from "./cluster";
|
|
3
4
|
import { type IetfVersion } from "./version";
|
|
4
5
|
export declare class PublishNamespace {
|
|
5
6
|
#private;
|
|
6
7
|
static id: number;
|
|
7
8
|
requestId: bigint;
|
|
8
9
|
trackNamespace: Path.Valid;
|
|
9
|
-
|
|
10
|
+
/** The MoQ Cluster parameters (see {@link Cluster}). Set on a session that negotiated
|
|
11
|
+
* the extension and `undefined` on one that did not, which is what decides whether they
|
|
12
|
+
* appear on the wire at all. */
|
|
13
|
+
cluster?: Cluster.Advert;
|
|
14
|
+
constructor({ requestId, trackNamespace, cluster, }: {
|
|
10
15
|
requestId: bigint;
|
|
11
16
|
trackNamespace: Path.Valid;
|
|
17
|
+
cluster?: Cluster.Advert;
|
|
12
18
|
});
|
|
13
19
|
encode(w: Writer, version: IetfVersion): Promise<void>;
|
|
14
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Decode the message, expecting the cluster parameters when the session negotiated the
|
|
22
|
+
* extension.
|
|
23
|
+
*
|
|
24
|
+
* The negotiation is session state rather than anything in the message, so the caller
|
|
25
|
+
* supplies it. A negotiated session that omits HOP_PATH is a protocol violation, which
|
|
26
|
+
* surfaces here as a throw.
|
|
27
|
+
*/
|
|
28
|
+
static decode(r: Reader, version: IetfVersion, negotiated?: boolean): Promise<PublishNamespace>;
|
|
15
29
|
}
|
|
16
30
|
export declare class PublishNamespaceOk {
|
|
17
31
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish_namespace.d.ts","sourceRoot":"","sources":["../../src/ietf/publish_namespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"publish_namespace.d.ts","sourceRoot":"","sources":["../../src/ietf/publish_namespace.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/* @ts-self-types="./publish_namespace.d.ts" */
|
|
2
|
+
import * as Cluster from "./cluster.js";
|
|
2
3
|
import * as Message from "./message.js";
|
|
3
4
|
import * as Namespace from "./namespace.js";
|
|
4
5
|
import { Parameters } from "./parameters.js";
|
|
@@ -8,9 +9,14 @@ export class PublishNamespace {
|
|
|
8
9
|
static id = 0x06;
|
|
9
10
|
requestId;
|
|
10
11
|
trackNamespace;
|
|
11
|
-
|
|
12
|
+
/** The MoQ Cluster parameters (see {@link Cluster}). Set on a session that negotiated
|
|
13
|
+
* the extension and `undefined` on one that did not, which is what decides whether they
|
|
14
|
+
* appear on the wire at all. */
|
|
15
|
+
cluster;
|
|
16
|
+
constructor({ requestId, trackNamespace, cluster, }) {
|
|
12
17
|
this.requestId = requestId;
|
|
13
18
|
this.trackNamespace = trackNamespace;
|
|
19
|
+
this.cluster = cluster;
|
|
14
20
|
}
|
|
15
21
|
async #encode(w, version) {
|
|
16
22
|
await w.u62(this.requestId);
|
|
@@ -18,20 +24,33 @@ export class PublishNamespace {
|
|
|
18
24
|
await w.u62(0n); // required_request_id_delta: only 0 supported until stream-per-request
|
|
19
25
|
}
|
|
20
26
|
await Namespace.encode(w, this.trackNamespace);
|
|
21
|
-
|
|
27
|
+
const params = this.cluster ? Cluster.intoParams(this.cluster) : new Parameters();
|
|
28
|
+
await params.encode(w, version);
|
|
22
29
|
}
|
|
23
30
|
async encode(w, version) {
|
|
24
31
|
return Message.encode(w, (wr) => this.#encode(wr, version));
|
|
25
32
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Decode the message, expecting the cluster parameters when the session negotiated the
|
|
35
|
+
* extension.
|
|
36
|
+
*
|
|
37
|
+
* The negotiation is session state rather than anything in the message, so the caller
|
|
38
|
+
* supplies it. A negotiated session that omits HOP_PATH is a protocol violation, which
|
|
39
|
+
* surfaces here as a throw.
|
|
40
|
+
*/
|
|
41
|
+
static async decode(r, version, negotiated = false) {
|
|
42
|
+
return Message.decode(r, (rd) => PublishNamespace.#decode(rd, version, negotiated));
|
|
43
|
+
}
|
|
44
|
+
static async #decode(r, version, negotiated) {
|
|
30
45
|
const requestId = await r.u62();
|
|
31
46
|
if (version === Version.DRAFT_17) {
|
|
32
47
|
await r.u62(); // required_request_id_delta
|
|
33
48
|
}
|
|
34
49
|
const trackNamespace = await Namespace.decode(r);
|
|
50
|
+
if (negotiated) {
|
|
51
|
+
const cluster = await Cluster.decodeParams(r, version);
|
|
52
|
+
return new PublishNamespace({ requestId, trackNamespace, cluster });
|
|
53
|
+
}
|
|
35
54
|
await Parameters.decode(r, version); // ignore parameters
|
|
36
55
|
return new PublishNamespace({ requestId, trackNamespace });
|
|
37
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish_namespace.js","sourceRoot":"","sources":["../../src/ietf/publish_namespace.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Parameters } from \"./parameters.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// In draft-14, ANNOUNCE is renamed to PUBLISH_NAMESPACE\nexport class PublishNamespace {\n\tstatic id = 0x06;\n\n\trequestId: bigint;\n\ttrackNamespace: Path.Valid;\n\n\tconstructor({ requestId, trackNamespace }: { requestId: bigint; trackNamespace: Path.Valid }) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackNamespace = trackNamespace;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait w.u62(0n); // required_request_id_delta: only 0 supported until stream-per-request\n\t\t}\n\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\tawait new Parameters().encode(w, version);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishNamespace> {\n\t\treturn Message.decode(r, (rd) => PublishNamespace.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishNamespace> {\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\tawait Parameters.decode(r, version); // ignore parameters\n\t\treturn new PublishNamespace({ requestId, trackNamespace });\n\t}\n}\n\nexport class PublishNamespaceOk {\n\tstatic id = 0x07;\n\n\trequestId: bigint;\n\n\tconstructor({ requestId }: { requestId: bigint }) {\n\t\tthis.requestId = requestId;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishNamespaceOk> {\n\t\treturn Message.decode(r, PublishNamespaceOk.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishNamespaceOk> {\n\t\tconst requestId = await r.u62();\n\t\treturn new PublishNamespaceOk({ requestId });\n\t}\n}\n\nexport class PublishNamespaceError {\n\tstatic id = 0x08;\n\n\trequestId: bigint;\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\terrorCode,\n\t\treasonPhrase,\n\t}: { requestId: bigint; errorCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishNamespaceError> {\n\t\treturn Message.decode(r, PublishNamespaceError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishNamespaceError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishNamespaceError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\n// Removed in d17\nexport class PublishNamespaceCancel {\n\tstatic id = 0x0c;\n\n\ttrackNamespace: Path.Valid;\n\trequestId: bigint; // v16: uses request_id instead of track_namespace\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\ttrackNamespace = \"\" as Path.Valid,\n\t\terrorCode = 0,\n\t\treasonPhrase = \"\",\n\t\trequestId = 0n,\n\t}: {\n\t\ttrackNamespace?: Path.Valid;\n\t\terrorCode?: number;\n\t\treasonPhrase?: string;\n\t\trequestId?: bigint;\n\t} = {}) {\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceCancel removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tawait w.u62(this.requestId);\n\t\t} else {\n\t\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\t}\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceCancel> {\n\t\treturn Message.decode(r, (rd) => PublishNamespaceCancel.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceCancel> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceCancel removed in draft-17+\");\n\t\t}\n\t\tlet trackNamespace = \"\" as Path.Valid;\n\t\tlet requestId = 0n;\n\t\tif (version === Version.DRAFT_16) {\n\t\t\trequestId = await r.u62();\n\t\t} else {\n\t\t\ttrackNamespace = await Namespace.decode(r);\n\t\t}\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishNamespaceCancel({ trackNamespace, errorCode, reasonPhrase, requestId });\n\t}\n}\n\n// In draft-14, UNANNOUNCE is renamed to PUBLISH_NAMESPACE_DONE\n// In draft-16, uses request_id instead of track_namespace\n// Removed in d17\nexport class PublishNamespaceDone {\n\tstatic readonly id = 0x09;\n\n\ttrackNamespace: Path.Valid;\n\trequestId: bigint; // v16: uses request_id instead of track_namespace\n\n\tconstructor({\n\t\ttrackNamespace = \"\" as Path.Valid,\n\t\trequestId = 0n,\n\t}: {\n\t\ttrackNamespace?: Path.Valid;\n\t\trequestId?: bigint;\n\t} = {}) {\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.requestId = requestId;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceDone removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tawait w.u62(this.requestId);\n\t\t} else {\n\t\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\t}\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceDone> {\n\t\treturn Message.decode(r, (rd) => PublishNamespaceDone.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceDone> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceDone removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tconst requestId = await r.u62();\n\t\t\treturn new PublishNamespaceDone({ requestId });\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\treturn new PublishNamespaceDone({ trackNamespace });\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"publish_namespace.js","sourceRoot":"","sources":["../../src/ietf/publish_namespace.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,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,wDAAwD;AACxD,MAAM,OAAO,gBAAgB;IAC5B,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAEjB,SAAS,CAAS;IAClB,cAAc,CAAa;IAE3B;;oCAEgC;IAChC,OAAO,CAAkB;IAEzB,YAAY,EACX,SAAS,EACT,cAAc,EACd,OAAO,GACsE;QAC7E,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QAC5C,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,uEAAuE;QACzF,CAAC;QACD,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC;QAClF,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjC,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;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,OAAoB,EAAE,UAAU,GAAG,KAAK;QACtE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB,EAAE,UAAmB;QACxE,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,4BAA4B;QAC5C,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,IAAI,gBAAgB,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAoB;QACzD,OAAO,IAAI,gBAAgB,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;IAC5D,CAAC;CACD;AAED,MAAM,OAAO,kBAAkB;IAC9B,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,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAChC,OAAO,IAAI,kBAAkB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9C,CAAC;CACD;AAED,MAAM,OAAO,qBAAqB;IACjC,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,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,IAAI,qBAAqB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1E,CAAC;CACD;AAED,iBAAiB;AACjB,MAAM,OAAO,sBAAsB;IAClC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAEjB,cAAc,CAAa;IAC3B,SAAS,CAAS,CAAC,kDAAkD;IACrE,SAAS,CAAS;IAClB,YAAY,CAAS;IAErB,YAAY,EACX,cAAc,GAAG,EAAgB,EACjC,SAAS,GAAG,CAAC,EACb,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,EAAE,GACd,GAKG,EAAE;QACL,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,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,EAAE,OAAoB;QAC5C,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClG,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACP,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAChD,CAAC;QACD,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,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,sBAAsB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QACnD,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClG,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,cAAc,GAAG,EAAgB,CAAC;QACtC,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC;aAAM,CAAC;YACP,cAAc,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,IAAI,sBAAsB,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3F,CAAC;CACD;AAED,+DAA+D;AAC/D,0DAA0D;AAC1D,iBAAiB;AACjB,MAAM,OAAO,oBAAoB;IAChC,MAAM,CAAU,EAAE,GAAG,IAAI,CAAC;IAE1B,cAAc,CAAa;IAC3B,SAAS,CAAS,CAAC,kDAAkD;IAErE,YAAY,EACX,cAAc,GAAG,EAAgB,EACjC,SAAS,GAAG,EAAE,GACd,GAGG,EAAE;QACL,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,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,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACP,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAChD,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,oBAAoB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QACnD,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClG,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YAChC,OAAO,IAAI,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjD,OAAO,IAAI,oBAAoB,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IACrD,CAAC;CACD","sourcesContent":["import type * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Cluster from \"./cluster.ts\";\nimport * as Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Parameters } from \"./parameters.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// In draft-14, ANNOUNCE is renamed to PUBLISH_NAMESPACE\nexport class PublishNamespace {\n\tstatic id = 0x06;\n\n\trequestId: bigint;\n\ttrackNamespace: Path.Valid;\n\n\t/** The MoQ Cluster parameters (see {@link Cluster}). Set on a session that negotiated\n\t * the extension and `undefined` on one that did not, which is what decides whether they\n\t * appear on the wire at all. */\n\tcluster?: Cluster.Advert;\n\n\tconstructor({\n\t\trequestId,\n\t\ttrackNamespace,\n\t\tcluster,\n\t}: { requestId: bigint; trackNamespace: Path.Valid; cluster?: Cluster.Advert }) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.cluster = cluster;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait w.u62(0n); // required_request_id_delta: only 0 supported until stream-per-request\n\t\t}\n\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\tconst params = this.cluster ? Cluster.intoParams(this.cluster) : new Parameters();\n\t\tawait params.encode(w, version);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\t/**\n\t * Decode the message, expecting the cluster parameters when the session negotiated the\n\t * extension.\n\t *\n\t * The negotiation is session state rather than anything in the message, so the caller\n\t * supplies it. A negotiated session that omits HOP_PATH is a protocol violation, which\n\t * surfaces here as a throw.\n\t */\n\tstatic async decode(r: Reader, version: IetfVersion, negotiated = false): Promise<PublishNamespace> {\n\t\treturn Message.decode(r, (rd) => PublishNamespace.#decode(rd, version, negotiated));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion, negotiated: boolean): Promise<PublishNamespace> {\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\tif (negotiated) {\n\t\t\tconst cluster = await Cluster.decodeParams(r, version);\n\t\t\treturn new PublishNamespace({ requestId, trackNamespace, cluster });\n\t\t}\n\n\t\tawait Parameters.decode(r, version); // ignore parameters\n\t\treturn new PublishNamespace({ requestId, trackNamespace });\n\t}\n}\n\nexport class PublishNamespaceOk {\n\tstatic id = 0x07;\n\n\trequestId: bigint;\n\n\tconstructor({ requestId }: { requestId: bigint }) {\n\t\tthis.requestId = requestId;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishNamespaceOk> {\n\t\treturn Message.decode(r, PublishNamespaceOk.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishNamespaceOk> {\n\t\tconst requestId = await r.u62();\n\t\treturn new PublishNamespaceOk({ requestId });\n\t}\n}\n\nexport class PublishNamespaceError {\n\tstatic id = 0x08;\n\n\trequestId: bigint;\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\terrorCode,\n\t\treasonPhrase,\n\t}: { requestId: bigint; errorCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishNamespaceError> {\n\t\treturn Message.decode(r, PublishNamespaceError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishNamespaceError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishNamespaceError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\n// Removed in d17\nexport class PublishNamespaceCancel {\n\tstatic id = 0x0c;\n\n\ttrackNamespace: Path.Valid;\n\trequestId: bigint; // v16: uses request_id instead of track_namespace\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\ttrackNamespace = \"\" as Path.Valid,\n\t\terrorCode = 0,\n\t\treasonPhrase = \"\",\n\t\trequestId = 0n,\n\t}: {\n\t\ttrackNamespace?: Path.Valid;\n\t\terrorCode?: number;\n\t\treasonPhrase?: string;\n\t\trequestId?: bigint;\n\t} = {}) {\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceCancel removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tawait w.u62(this.requestId);\n\t\t} else {\n\t\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\t}\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceCancel> {\n\t\treturn Message.decode(r, (rd) => PublishNamespaceCancel.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceCancel> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceCancel removed in draft-17+\");\n\t\t}\n\t\tlet trackNamespace = \"\" as Path.Valid;\n\t\tlet requestId = 0n;\n\t\tif (version === Version.DRAFT_16) {\n\t\t\trequestId = await r.u62();\n\t\t} else {\n\t\t\ttrackNamespace = await Namespace.decode(r);\n\t\t}\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishNamespaceCancel({ trackNamespace, errorCode, reasonPhrase, requestId });\n\t}\n}\n\n// In draft-14, UNANNOUNCE is renamed to PUBLISH_NAMESPACE_DONE\n// In draft-16, uses request_id instead of track_namespace\n// Removed in d17\nexport class PublishNamespaceDone {\n\tstatic readonly id = 0x09;\n\n\ttrackNamespace: Path.Valid;\n\trequestId: bigint; // v16: uses request_id instead of track_namespace\n\n\tconstructor({\n\t\ttrackNamespace = \"\" as Path.Valid,\n\t\trequestId = 0n,\n\t}: {\n\t\ttrackNamespace?: Path.Valid;\n\t\trequestId?: bigint;\n\t} = {}) {\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.requestId = requestId;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceDone removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tawait w.u62(this.requestId);\n\t\t} else {\n\t\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\t}\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceDone> {\n\t\treturn Message.decode(r, (rd) => PublishNamespaceDone.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceDone> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceDone removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tconst requestId = await r.u62();\n\t\t\treturn new PublishNamespaceDone({ requestId });\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\treturn new PublishNamespaceDone({ trackNamespace });\n\t}\n}\n"]}
|
package/ietf/publisher.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type * as broadcast from "../broadcast";
|
|
2
2
|
import * as Path from "../path";
|
|
3
3
|
import { type Stream } from "../stream";
|
|
4
4
|
import type { Session } from "./adapter";
|
|
5
|
+
import * as Cluster from "./cluster";
|
|
5
6
|
import { type Subscribe } from "./subscribe";
|
|
6
7
|
import { type SubscribeNamespace } from "./subscribe_namespace";
|
|
7
8
|
import { type TrackStatusRequest } from "./track";
|
|
@@ -15,17 +16,25 @@ export declare class Publisher {
|
|
|
15
16
|
#private;
|
|
16
17
|
/**
|
|
17
18
|
* Creates a new Publisher instance.
|
|
18
|
-
* @param quic - The WebTransport session (for uni streams)
|
|
19
|
-
* @param session - The session abstraction for bidi streams and request IDs
|
|
20
19
|
*
|
|
21
20
|
* @internal
|
|
22
21
|
*/
|
|
23
|
-
constructor(quic
|
|
22
|
+
constructor({ quic, session, requiresSolicitation, cluster, }: {
|
|
23
|
+
/** The WebTransport session, for uni streams. */
|
|
24
|
+
quic: WebTransport;
|
|
25
|
+
/** The session abstraction for bidi streams and request IDs. */
|
|
26
|
+
session: Session;
|
|
27
|
+
/** Whether the peer's SETUP asked to be told on request (MoQ Solicit). */
|
|
28
|
+
requiresSolicitation: boolean;
|
|
29
|
+
/** The Hop IDs the SETUP exchange settled (MoQ Cluster). */
|
|
30
|
+
cluster?: Cluster.Hops;
|
|
31
|
+
});
|
|
24
32
|
/**
|
|
25
33
|
* Publishes a broadcast with any associated tracks.
|
|
26
|
-
*
|
|
34
|
+
* The namespace is advertised with an unsolicited PUBLISH_NAMESPACE, or on request
|
|
35
|
+
* if the peer asked for that (see {@link runPublishNamespaces}).
|
|
27
36
|
*/
|
|
28
|
-
publish(path: Path.Valid, broadcast:
|
|
37
|
+
publish(path: Path.Valid, broadcast: broadcast.Producer): void;
|
|
29
38
|
/**
|
|
30
39
|
* Handles an incoming SUBSCRIBE request on a bidi stream.
|
|
31
40
|
* Owns the full lifecycle: sends response, serves track data, waits for close.
|
|
@@ -35,16 +44,40 @@ export declare class Publisher {
|
|
|
35
44
|
runSubscribe(msg: Subscribe, stream: Stream): Promise<void>;
|
|
36
45
|
/**
|
|
37
46
|
* Handles an incoming SUBSCRIBE_NAMESPACE on a bidi stream.
|
|
38
|
-
*
|
|
47
|
+
*
|
|
48
|
+
* This carries the advertisements only when the peer asked to be told on request
|
|
49
|
+
* (MoQ Solicit); otherwise {@link runPublishNamespaces} has already announced
|
|
50
|
+
* everything and repeating it here would leave the peer holding two sources for one
|
|
51
|
+
* broadcast. Draft-16+ streams Namespace entries inline; draft-14/15 predate those
|
|
52
|
+
* messages, so each advertisement is a PUBLISH_NAMESPACE request of its own.
|
|
39
53
|
*
|
|
40
54
|
* @internal
|
|
41
55
|
*/
|
|
42
56
|
runSubscribeNamespace(msg: SubscribeNamespace, stream: Stream): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Advertise every published broadcast with an unsolicited PUBLISH_NAMESPACE, until
|
|
59
|
+
* the publisher is closed.
|
|
60
|
+
*
|
|
61
|
+
* The peers that never send SUBSCRIBE_NAMESPACE are exactly the ones expecting a
|
|
62
|
+
* publisher to announce itself, so announcing is the default. A peer that would
|
|
63
|
+
* rather ask says so in its SETUP (MoQ Solicit) and this does nothing, leaving
|
|
64
|
+
* {@link runSubscribeNamespace} to carry the advertisements instead. Exactly one of
|
|
65
|
+
* the two is live, so the peer never hears a namespace twice.
|
|
66
|
+
*
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
runPublishNamespaces(): Promise<void>;
|
|
43
70
|
/**
|
|
44
71
|
* Handles an incoming TRACK_STATUS_REQUEST on a bidi stream.
|
|
45
72
|
*
|
|
46
73
|
* @internal
|
|
47
74
|
*/
|
|
48
75
|
runTrackStatusRequest(msg: TrackStatusRequest, stream: Stream): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Closes every published broadcast and stops accepting new ones.
|
|
78
|
+
*
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
close(): void;
|
|
49
82
|
}
|
|
50
83
|
//# sourceMappingURL=publisher.d.ts.map
|
package/ietf/publisher.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../src/ietf/publisher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../src/ietf/publisher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAGlD,OAAO,KAAK,IAAI,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,MAAM,EAAU,MAAM,cAAc,CAAC;AAInD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AASxC,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EACN,KAAK,kBAAkB,EAIvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAiGlE;;;;;GAKG;AACH,qBAAa,SAAS;;IAcrB;;;;OAIG;IACH,YAAY,EACX,IAAI,EACJ,OAAO,EACP,oBAAoB,EACpB,OAAO,GACP,EAAE;QACF,iDAAiD;QACjD,IAAI,EAAE,YAAY,CAAC;QACnB,gEAAgE;QAChE,OAAO,EAAE,OAAO,CAAC;QACjB,0EAA0E;QAC1E,oBAAoB,EAAE,OAAO,CAAC;QAC9B,4DAA4D;QAC5D,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC;KACvB,EAKA;IAED;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,QAAQ,QActD;IAED;;;;;OAKG;IACG,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,iBA8LhD;IA2LD;;;;;;;;;;OAUG;IACG,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,iBA+HlE;IAED;;;;;;;;;;;OAWG;IACG,oBAAoB,kBA6EzB;IAkID;;;;OAIG;IACG,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,iBAuBlE;IAED;;;;OAIG;IACH,KAAK,SAOJ;CACD"}
|