@norskvideo/moq-net 0.1.0
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 +70 -0
- package/announced.d.ts +45 -0
- package/announced.d.ts.map +1 -0
- package/announced.js +70 -0
- package/announced.js.map +1 -0
- package/bandwidth.d.ts +11 -0
- package/bandwidth.d.ts.map +1 -0
- package/bandwidth.js +7 -0
- package/bandwidth.js.map +1 -0
- package/broadcast.d.ts +39 -0
- package/broadcast.d.ts.map +1 -0
- package/broadcast.js +76 -0
- package/broadcast.js.map +1 -0
- package/connection/accept.d.ts +15 -0
- package/connection/accept.d.ts.map +1 -0
- package/connection/accept.js +137 -0
- package/connection/accept.js.map +1 -0
- package/connection/cert.test.d.ts +2 -0
- package/connection/cert.test.d.ts.map +1 -0
- package/connection/cert.test.js +26 -0
- package/connection/cert.test.js.map +1 -0
- package/connection/connect.d.ts +37 -0
- package/connection/connect.d.ts.map +1 -0
- package/connection/connect.js +348 -0
- package/connection/connect.js.map +1 -0
- package/connection/established.d.ts +30 -0
- package/connection/established.d.ts.map +1 -0
- package/connection/established.js +3 -0
- package/connection/established.js.map +1 -0
- package/connection/handshake.d.ts +10 -0
- package/connection/handshake.d.ts.map +1 -0
- package/connection/handshake.js +48 -0
- package/connection/handshake.js.map +1 -0
- package/connection/index.d.ts +5 -0
- package/connection/index.d.ts.map +1 -0
- package/connection/index.js +6 -0
- package/connection/index.js.map +1 -0
- package/connection/reload.d.ts +47 -0
- package/connection/reload.d.ts.map +1 -0
- package/connection/reload.js +137 -0
- package/connection/reload.js.map +1 -0
- package/group.d.ts +66 -0
- package/group.d.ts.map +1 -0
- package/group.js +135 -0
- package/group.js.map +1 -0
- package/group.test.d.ts +2 -0
- package/group.test.d.ts.map +1 -0
- package/group.test.js +66 -0
- package/group.test.js.map +1 -0
- package/ietf/adapter.d.ts +65 -0
- package/ietf/adapter.d.ts.map +1 -0
- package/ietf/adapter.js +626 -0
- package/ietf/adapter.js.map +1 -0
- package/ietf/connection.d.ts +65 -0
- package/ietf/connection.d.ts.map +1 -0
- package/ietf/connection.js +248 -0
- package/ietf/connection.js.map +1 -0
- package/ietf/control.d.ts +135 -0
- package/ietf/control.d.ts.map +1 -0
- package/ietf/control.js +242 -0
- package/ietf/control.js.map +1 -0
- package/ietf/fetch.d.ts +64 -0
- package/ietf/fetch.d.ts.map +1 -0
- package/ietf/fetch.js +100 -0
- package/ietf/fetch.js.map +1 -0
- package/ietf/goaway.d.ts +15 -0
- package/ietf/goaway.d.ts.map +1 -0
- package/ietf/goaway.js +34 -0
- package/ietf/goaway.js.map +1 -0
- package/ietf/ietf.test.d.ts +2 -0
- package/ietf/ietf.test.d.ts.map +1 -0
- package/ietf/ietf.test.js +873 -0
- package/ietf/ietf.test.js.map +1 -0
- package/ietf/index.d.ts +18 -0
- package/ietf/index.d.ts.map +1 -0
- package/ietf/index.js +19 -0
- package/ietf/index.js.map +1 -0
- package/ietf/message.d.ts +4 -0
- package/ietf/message.d.ts.map +1 -0
- package/ietf/message.js +54 -0
- package/ietf/message.js.map +1 -0
- package/ietf/namespace.d.ts +5 -0
- package/ietf/namespace.d.ts.map +1 -0
- package/ietf/namespace.js +27 -0
- package/ietf/namespace.js.map +1 -0
- package/ietf/object.d.ts +40 -0
- package/ietf/object.d.ts.map +1 -0
- package/ietf/object.js +160 -0
- package/ietf/object.js.map +1 -0
- package/ietf/parameters.d.ts +56 -0
- package/ietf/parameters.d.ts.map +1 -0
- package/ietf/parameters.js +337 -0
- package/ietf/parameters.js.map +1 -0
- package/ietf/properties.d.ts +4 -0
- package/ietf/properties.d.ts.map +1 -0
- package/ietf/properties.js +33 -0
- package/ietf/properties.js.map +1 -0
- package/ietf/publish.d.ts +68 -0
- package/ietf/publish.d.ts.map +1 -0
- package/ietf/publish.js +192 -0
- package/ietf/publish.js.map +1 -0
- package/ietf/publish_namespace.d.ts +68 -0
- package/ietf/publish_namespace.d.ts.map +1 -0
- package/ietf/publish_namespace.js +176 -0
- package/ietf/publish_namespace.js.map +1 -0
- package/ietf/publisher.d.ts +50 -0
- package/ietf/publisher.d.ts.map +1 -0
- package/ietf/publisher.js +330 -0
- package/ietf/publisher.js.map +1 -0
- package/ietf/request.d.ts +52 -0
- package/ietf/request.d.ts.map +1 -0
- package/ietf/request.js +119 -0
- package/ietf/request.js.map +1 -0
- package/ietf/setup.d.ts +38 -0
- package/ietf/setup.d.ts.map +1 -0
- package/ietf/setup.js +129 -0
- package/ietf/setup.js.map +1 -0
- package/ietf/subscribe.d.ts +66 -0
- package/ietf/subscribe.d.ts.map +1 -0
- package/ietf/subscribe.js +276 -0
- package/ietf/subscribe.js.map +1 -0
- package/ietf/subscribe_namespace.d.ts +101 -0
- package/ietf/subscribe_namespace.d.ts.map +1 -0
- package/ietf/subscribe_namespace.js +256 -0
- package/ietf/subscribe_namespace.js.map +1 -0
- package/ietf/subscriber.d.ts +53 -0
- package/ietf/subscriber.d.ts.map +1 -0
- package/ietf/subscriber.js +404 -0
- package/ietf/subscriber.js.map +1 -0
- package/ietf/track.d.ts +40 -0
- package/ietf/track.d.ts.map +1 -0
- package/ietf/track.js +108 -0
- package/ietf/track.js.map +1 -0
- package/ietf/version.d.ts +56 -0
- package/ietf/version.d.ts.map +1 -0
- package/ietf/version.js +63 -0
- package/ietf/version.js.map +1 -0
- package/index.d.ts +22 -0
- package/index.d.ts.map +1 -0
- package/index.js +23 -0
- package/index.js.map +1 -0
- package/integration.test.d.ts +2 -0
- package/integration.test.d.ts.map +1 -0
- package/integration.test.js +90 -0
- package/integration.test.js.map +1 -0
- package/lite/announce.d.ts +35 -0
- package/lite/announce.d.ts.map +1 -0
- package/lite/announce.js +166 -0
- package/lite/announce.js.map +1 -0
- package/lite/connection.d.ts +47 -0
- package/lite/connection.d.ts.map +1 -0
- package/lite/connection.js +247 -0
- package/lite/connection.js.map +1 -0
- package/lite/fetch.d.ts +14 -0
- package/lite/fetch.d.ts.map +1 -0
- package/lite/fetch.js +47 -0
- package/lite/fetch.js.map +1 -0
- package/lite/goaway.d.ts +10 -0
- package/lite/goaway.d.ts.map +1 -0
- package/lite/goaway.js +37 -0
- package/lite/goaway.js.map +1 -0
- package/lite/group.d.ts +18 -0
- package/lite/group.d.ts.map +1 -0
- package/lite/group.js +46 -0
- package/lite/group.js.map +1 -0
- package/lite/index.d.ts +11 -0
- package/lite/index.d.ts.map +1 -0
- package/lite/index.js +12 -0
- package/lite/index.js.map +1 -0
- package/lite/message.d.ts +5 -0
- package/lite/message.d.ts.map +1 -0
- package/lite/message.js +51 -0
- package/lite/message.js.map +1 -0
- package/lite/origin.d.ts +25 -0
- package/lite/origin.d.ts.map +1 -0
- package/lite/origin.js +35 -0
- package/lite/origin.js.map +1 -0
- package/lite/probe.d.ts +12 -0
- package/lite/probe.d.ts.map +1 -0
- package/lite/probe.js +60 -0
- package/lite/probe.js.map +1 -0
- package/lite/publisher.d.ts +63 -0
- package/lite/publisher.d.ts.map +1 -0
- package/lite/publisher.js +350 -0
- package/lite/publisher.js.map +1 -0
- package/lite/session.d.ts +36 -0
- package/lite/session.d.ts.map +1 -0
- package/lite/session.js +130 -0
- package/lite/session.js.map +1 -0
- package/lite/setup.d.ts +18 -0
- package/lite/setup.d.ts.map +1 -0
- package/lite/setup.js +55 -0
- package/lite/setup.js.map +1 -0
- package/lite/stream.d.ts +23 -0
- package/lite/stream.d.ts.map +1 -0
- package/lite/stream.js +20 -0
- package/lite/stream.js.map +1 -0
- package/lite/subscribe.d.ts +111 -0
- package/lite/subscribe.d.ts.map +1 -0
- package/lite/subscribe.js +341 -0
- package/lite/subscribe.js.map +1 -0
- package/lite/subscriber.d.ts +80 -0
- package/lite/subscriber.d.ts.map +1 -0
- package/lite/subscriber.js +316 -0
- package/lite/subscriber.js.map +1 -0
- package/lite/track.d.ts +38 -0
- package/lite/track.d.ts.map +1 -0
- package/lite/track.js +81 -0
- package/lite/track.js.map +1 -0
- package/lite/track.test.d.ts +2 -0
- package/lite/track.test.d.ts.map +1 -0
- package/lite/track.test.js +53 -0
- package/lite/track.test.js.map +1 -0
- package/lite/version.d.ts +16 -0
- package/lite/version.d.ts.map +1 -0
- package/lite/version.js +41 -0
- package/lite/version.js.map +1 -0
- package/mock.d.ts +16 -0
- package/mock.d.ts.map +1 -0
- package/mock.js +154 -0
- package/mock.js.map +1 -0
- package/package.json +27 -0
- package/path.d.ts +111 -0
- package/path.d.ts.map +1 -0
- package/path.js +133 -0
- package/path.js.map +1 -0
- package/path.test.d.ts +2 -0
- package/path.test.d.ts.map +1 -0
- package/path.test.js +169 -0
- package/path.test.js.map +1 -0
- package/stream.d.ts +57 -0
- package/stream.d.ts.map +1 -0
- package/stream.js +326 -0
- package/stream.js.map +1 -0
- package/stream.test.d.ts +2 -0
- package/stream.test.d.ts.map +1 -0
- package/stream.test.js +210 -0
- package/stream.test.js.map +1 -0
- package/time.d.ts +109 -0
- package/time.d.ts.map +1 -0
- package/time.js +94 -0
- package/time.js.map +1 -0
- package/track.d.ts +85 -0
- package/track.d.ts.map +1 -0
- package/track.js +227 -0
- package/track.js.map +1 -0
- package/track.test.d.ts +2 -0
- package/track.test.d.ts.map +1 -0
- package/track.test.js +56 -0
- package/track.test.js.map +1 -0
- package/util/error.d.ts +3 -0
- package/util/error.d.ts.map +1 -0
- package/util/error.js +9 -0
- package/util/error.js.map +1 -0
- package/util/hex.d.ts +3 -0
- package/util/hex.d.ts.map +1 -0
- package/util/hex.js +16 -0
- package/util/hex.js.map +1 -0
- package/util/index.d.ts +2 -0
- package/util/index.d.ts.map +1 -0
- package/util/index.js +3 -0
- package/util/index.js.map +1 -0
- package/varint.d.ts +36 -0
- package/varint.d.ts.map +1 -0
- package/varint.js +288 -0
- package/varint.js.map +1 -0
- package/varint.test.d.ts +2 -0
- package/varint.test.d.ts.map +1 -0
- package/varint.test.js +106 -0
- package/varint.test.js.map +1 -0
- package/zod.d.ts +13 -0
- package/zod.d.ts.map +1 -0
- package/zod.js +19 -0
- package/zod.js.map +1 -0
package/ietf/setup.js
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/* @ts-self-types="./setup.d.ts" */
|
|
2
|
+
import * as Message from "./message.js";
|
|
3
|
+
import { SetupOptions } from "./parameters.js";
|
|
4
|
+
import { Version } from "./version.js";
|
|
5
|
+
// Draft-17 unified SETUP message (0x2F00)
|
|
6
|
+
export class Setup {
|
|
7
|
+
static id = 0x2f00;
|
|
8
|
+
parameters;
|
|
9
|
+
constructor({ parameters = new SetupOptions() } = {}) {
|
|
10
|
+
this.parameters = parameters;
|
|
11
|
+
}
|
|
12
|
+
async #encode(w, version) {
|
|
13
|
+
await this.parameters.encode(w, version);
|
|
14
|
+
}
|
|
15
|
+
async encode(w, version) {
|
|
16
|
+
return Message.encode(w, (mw) => this.#encode(mw, version));
|
|
17
|
+
}
|
|
18
|
+
static async #decode(r, version) {
|
|
19
|
+
const parameters = await SetupOptions.decode(r, version);
|
|
20
|
+
return new Setup({ parameters });
|
|
21
|
+
}
|
|
22
|
+
static async decode(r, version) {
|
|
23
|
+
return Message.decode(r, (mr) => Setup.#decode(mr, version));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const MAX_VERSIONS = 128;
|
|
27
|
+
export class ClientSetup {
|
|
28
|
+
static id = 0x20;
|
|
29
|
+
versions;
|
|
30
|
+
parameters;
|
|
31
|
+
constructor({ versions, parameters = new SetupOptions() }) {
|
|
32
|
+
this.versions = versions;
|
|
33
|
+
this.parameters = parameters;
|
|
34
|
+
}
|
|
35
|
+
async #encode(w, version) {
|
|
36
|
+
if (version === Version.DRAFT_15 || version === Version.DRAFT_16) {
|
|
37
|
+
// Draft15+: no versions list, just parameters
|
|
38
|
+
await this.parameters.encode(w, version);
|
|
39
|
+
}
|
|
40
|
+
else if (version === Version.DRAFT_14) {
|
|
41
|
+
await w.u53(this.versions.length);
|
|
42
|
+
for (const v of this.versions) {
|
|
43
|
+
await w.u53(v);
|
|
44
|
+
}
|
|
45
|
+
await this.parameters.encode(w, version);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// d17 uses unified Setup, not ClientSetup
|
|
49
|
+
throw new Error("ClientSetup not used for this version");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async encode(w, version) {
|
|
53
|
+
return Message.encode(w, (mw) => this.#encode(mw, version));
|
|
54
|
+
}
|
|
55
|
+
static async #decode(r, version) {
|
|
56
|
+
if (version === Version.DRAFT_15 || version === Version.DRAFT_16) {
|
|
57
|
+
// Draft15+: no versions list, just parameters
|
|
58
|
+
const parameters = await SetupOptions.decode(r, version);
|
|
59
|
+
return new ClientSetup({ versions: [version], parameters });
|
|
60
|
+
}
|
|
61
|
+
else if (version === Version.DRAFT_14) {
|
|
62
|
+
// Number of supported versions
|
|
63
|
+
const numVersions = await r.u53();
|
|
64
|
+
if (numVersions > MAX_VERSIONS) {
|
|
65
|
+
throw new Error(`too many versions: ${numVersions}`);
|
|
66
|
+
}
|
|
67
|
+
const supportedVersions = [];
|
|
68
|
+
for (let i = 0; i < numVersions; i++) {
|
|
69
|
+
const v = await r.u53();
|
|
70
|
+
supportedVersions.push(v);
|
|
71
|
+
}
|
|
72
|
+
const parameters = await SetupOptions.decode(r, version);
|
|
73
|
+
return new ClientSetup({ versions: supportedVersions, parameters });
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// d17 uses unified Setup, not ClientSetup
|
|
77
|
+
throw new Error("ClientSetup not used for this version");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
static async decode(r, version) {
|
|
81
|
+
return Message.decode(r, (mr) => ClientSetup.#decode(mr, version));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export class ServerSetup {
|
|
85
|
+
static id = 0x21;
|
|
86
|
+
version;
|
|
87
|
+
parameters;
|
|
88
|
+
constructor({ version, parameters = new SetupOptions() }) {
|
|
89
|
+
this.version = version;
|
|
90
|
+
this.parameters = parameters;
|
|
91
|
+
}
|
|
92
|
+
async #encode(w, version) {
|
|
93
|
+
if (version === Version.DRAFT_15 || version === Version.DRAFT_16) {
|
|
94
|
+
// Draft15+: no version field, just parameters
|
|
95
|
+
await this.parameters.encode(w, version);
|
|
96
|
+
}
|
|
97
|
+
else if (version === Version.DRAFT_14) {
|
|
98
|
+
await w.u53(this.version);
|
|
99
|
+
await this.parameters.encode(w, version);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// d17 uses unified Setup, not ServerSetup
|
|
103
|
+
throw new Error("ServerSetup not used for this version");
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async encode(w, version) {
|
|
107
|
+
return Message.encode(w, (mw) => this.#encode(mw, version));
|
|
108
|
+
}
|
|
109
|
+
static async #decode(r, version) {
|
|
110
|
+
if (version === Version.DRAFT_15 || version === Version.DRAFT_16) {
|
|
111
|
+
// Draft15+: no version field, just parameters
|
|
112
|
+
const parameters = await SetupOptions.decode(r, version);
|
|
113
|
+
return new ServerSetup({ version, parameters });
|
|
114
|
+
}
|
|
115
|
+
else if (version === Version.DRAFT_14) {
|
|
116
|
+
const selectedVersion = await r.u53();
|
|
117
|
+
const parameters = await SetupOptions.decode(r, version);
|
|
118
|
+
return new ServerSetup({ version: selectedVersion, parameters });
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// d17 uses unified Setup, not ServerSetup
|
|
122
|
+
throw new Error("ServerSetup not used for this version");
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
static async decode(r, version) {
|
|
126
|
+
return Message.decode(r, (mr) => ServerSetup.#decode(mr, version));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/ietf/setup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAoB,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,0CAA0C;AAC1C,MAAM,OAAO,KAAK;IACjB,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC;IAEnB,UAAU,CAAe;IAEzB,YAAY,EAAE,UAAU,GAAG,IAAI,YAAY,EAAE,EAAE,GAAkC,EAAE;QAClF,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QAC5C,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1C,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,OAAO,CAAC,CAAS,EAAE,OAAoB;QACnD,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACzD,OAAO,IAAI,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,OAAoB;QAClD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;CACD;AAED,MAAM,YAAY,GAAG,GAAG,CAAC;AAEzB,MAAM,OAAO,WAAW;IACvB,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAEjB,QAAQ,CAAW;IACnB,UAAU,CAAe;IAEzB,YAAY,EAAE,QAAQ,EAAE,UAAU,GAAG,IAAI,YAAY,EAAE,EAAqD;QAC3G,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QAC5C,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClE,8CAA8C;YAC9C,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC/B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC;YACD,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACP,0CAA0C;YAC1C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC1D,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,OAAO,CAAC,CAAS,EAAE,OAAoB;QACnD,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClE,8CAA8C;YAC9C,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACzD,OAAO,IAAI,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YACzC,+BAA+B;YAC/B,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YAClC,IAAI,WAAW,GAAG,YAAY,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,sBAAsB,WAAW,EAAE,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,iBAAiB,GAAa,EAAE,CAAC;YAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;gBACxB,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAEzD,OAAO,IAAI,WAAW,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACP,0CAA0C;YAC1C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC1D,CAAC;IACF,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,OAAoB;QAClD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACpE,CAAC;CACD;AAED,MAAM,OAAO,WAAW;IACvB,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAEjB,OAAO,CAAS;IAChB,UAAU,CAAe;IAEzB,YAAY,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,YAAY,EAAE,EAAkD;QACvG,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,OAAoB;QAC5C,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClE,8CAA8C;YAC9C,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACP,0CAA0C;YAC1C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC1D,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,OAAO,CAAC,CAAS,EAAE,OAAoB;QACnD,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClE,8CAA8C;YAC9C,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACzD,OAAO,IAAI,WAAW,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YACtC,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACzD,OAAO,IAAI,WAAW,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACP,0CAA0C;YAC1C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC1D,CAAC;IACF,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,OAAoB;QAClD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACpE,CAAC;CACD","sourcesContent":["import type { Reader, Writer } from \"../stream.ts\";\nimport * as Message from \"./message.ts\";\nimport { SetupOptions } from \"./parameters.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// Draft-17 unified SETUP message (0x2F00)\nexport class Setup {\n\tstatic id = 0x2f00;\n\n\tparameters: SetupOptions;\n\n\tconstructor({ parameters = new SetupOptions() }: { parameters?: SetupOptions } = {}) {\n\t\tthis.parameters = parameters;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tawait this.parameters.encode(w, version);\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<Setup> {\n\t\tconst parameters = await SetupOptions.decode(r, version);\n\t\treturn new Setup({ parameters });\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<Setup> {\n\t\treturn Message.decode(r, (mr) => Setup.#decode(mr, version));\n\t}\n}\n\nconst MAX_VERSIONS = 128;\n\nexport class ClientSetup {\n\tstatic id = 0x20;\n\n\tversions: number[];\n\tparameters: SetupOptions;\n\n\tconstructor({ versions, parameters = new SetupOptions() }: { versions: number[]; parameters?: SetupOptions }) {\n\t\tthis.versions = versions;\n\t\tthis.parameters = parameters;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\t// Draft15+: no versions list, just parameters\n\t\t\tawait this.parameters.encode(w, version);\n\t\t} else if (version === Version.DRAFT_14) {\n\t\t\tawait w.u53(this.versions.length);\n\t\t\tfor (const v of this.versions) {\n\t\t\t\tawait w.u53(v);\n\t\t\t}\n\t\t\tawait this.parameters.encode(w, version);\n\t\t} else {\n\t\t\t// d17 uses unified Setup, not ClientSetup\n\t\t\tthrow new Error(\"ClientSetup not used for this 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<ClientSetup> {\n\t\tif (version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\t// Draft15+: no versions list, just parameters\n\t\t\tconst parameters = await SetupOptions.decode(r, version);\n\t\t\treturn new ClientSetup({ versions: [version], parameters });\n\t\t} else if (version === Version.DRAFT_14) {\n\t\t\t// Number of supported versions\n\t\t\tconst numVersions = await r.u53();\n\t\t\tif (numVersions > MAX_VERSIONS) {\n\t\t\t\tthrow new Error(`too many versions: ${numVersions}`);\n\t\t\t}\n\n\t\t\tconst supportedVersions: number[] = [];\n\n\t\t\tfor (let i = 0; i < numVersions; i++) {\n\t\t\t\tconst v = await r.u53();\n\t\t\t\tsupportedVersions.push(v);\n\t\t\t}\n\n\t\t\tconst parameters = await SetupOptions.decode(r, version);\n\n\t\t\treturn new ClientSetup({ versions: supportedVersions, parameters });\n\t\t} else {\n\t\t\t// d17 uses unified Setup, not ClientSetup\n\t\t\tthrow new Error(\"ClientSetup not used for this version\");\n\t\t}\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<ClientSetup> {\n\t\treturn Message.decode(r, (mr) => ClientSetup.#decode(mr, version));\n\t}\n}\n\nexport class ServerSetup {\n\tstatic id = 0x21;\n\n\tversion: number;\n\tparameters: SetupOptions;\n\n\tconstructor({ version, parameters = new SetupOptions() }: { version: number; parameters?: SetupOptions }) {\n\t\tthis.version = version;\n\t\tthis.parameters = parameters;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\t// Draft15+: no version field, just parameters\n\t\t\tawait this.parameters.encode(w, version);\n\t\t} else if (version === Version.DRAFT_14) {\n\t\t\tawait w.u53(this.version);\n\t\t\tawait this.parameters.encode(w, version);\n\t\t} else {\n\t\t\t// d17 uses unified Setup, not ServerSetup\n\t\t\tthrow new Error(\"ServerSetup not used for this 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<ServerSetup> {\n\t\tif (version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\t// Draft15+: no version field, just parameters\n\t\t\tconst parameters = await SetupOptions.decode(r, version);\n\t\t\treturn new ServerSetup({ version, parameters });\n\t\t} else if (version === Version.DRAFT_14) {\n\t\t\tconst selectedVersion = await r.u53();\n\t\t\tconst parameters = await SetupOptions.decode(r, version);\n\t\t\treturn new ServerSetup({ version: selectedVersion, parameters });\n\t\t} else {\n\t\t\t// d17 uses unified Setup, not ServerSetup\n\t\t\tthrow new Error(\"ServerSetup not used for this version\");\n\t\t}\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<ServerSetup> {\n\t\treturn Message.decode(r, (mr) => ServerSetup.#decode(mr, version));\n\t}\n}\n"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type * as Path from "../path";
|
|
2
|
+
import type { Reader, Writer } from "../stream";
|
|
3
|
+
import { type IetfVersion } from "./version";
|
|
4
|
+
export declare class Subscribe {
|
|
5
|
+
#private;
|
|
6
|
+
static id: number;
|
|
7
|
+
requestId: bigint;
|
|
8
|
+
trackNamespace: Path.Valid;
|
|
9
|
+
trackName: string;
|
|
10
|
+
subscriberPriority: number;
|
|
11
|
+
constructor({ requestId, trackNamespace, trackName, subscriberPriority, }: {
|
|
12
|
+
requestId: bigint;
|
|
13
|
+
trackNamespace: Path.Valid;
|
|
14
|
+
trackName: string;
|
|
15
|
+
subscriberPriority: number;
|
|
16
|
+
});
|
|
17
|
+
encode(w: Writer, version: IetfVersion): Promise<void>;
|
|
18
|
+
static decode(r: Reader, version: IetfVersion): Promise<Subscribe>;
|
|
19
|
+
}
|
|
20
|
+
export declare class SubscribeOk {
|
|
21
|
+
#private;
|
|
22
|
+
static id: number;
|
|
23
|
+
requestId: bigint | undefined;
|
|
24
|
+
trackAlias: bigint;
|
|
25
|
+
constructor({ requestId, trackAlias }: {
|
|
26
|
+
requestId?: bigint;
|
|
27
|
+
trackAlias: bigint;
|
|
28
|
+
});
|
|
29
|
+
encode(w: Writer, version: IetfVersion): Promise<void>;
|
|
30
|
+
static decode(r: Reader, version: IetfVersion): Promise<SubscribeOk>;
|
|
31
|
+
}
|
|
32
|
+
export declare class SubscribeError {
|
|
33
|
+
#private;
|
|
34
|
+
static id: number;
|
|
35
|
+
requestId: bigint;
|
|
36
|
+
errorCode: number;
|
|
37
|
+
reasonPhrase: string;
|
|
38
|
+
constructor({ requestId, errorCode, reasonPhrase, }: {
|
|
39
|
+
requestId: bigint;
|
|
40
|
+
errorCode: number;
|
|
41
|
+
reasonPhrase: string;
|
|
42
|
+
});
|
|
43
|
+
encode(w: Writer, _version: IetfVersion): Promise<void>;
|
|
44
|
+
static decode(r: Reader, _version: IetfVersion): Promise<SubscribeError>;
|
|
45
|
+
}
|
|
46
|
+
export declare class SubscribeUpdate {
|
|
47
|
+
#private;
|
|
48
|
+
static id: number;
|
|
49
|
+
requestId: bigint;
|
|
50
|
+
constructor({ requestId }: {
|
|
51
|
+
requestId: bigint;
|
|
52
|
+
});
|
|
53
|
+
encode(w: Writer, version: IetfVersion): Promise<void>;
|
|
54
|
+
static decode(r: Reader, version: IetfVersion): Promise<SubscribeUpdate>;
|
|
55
|
+
}
|
|
56
|
+
export declare class Unsubscribe {
|
|
57
|
+
#private;
|
|
58
|
+
static readonly id = 10;
|
|
59
|
+
requestId: bigint;
|
|
60
|
+
constructor({ requestId }: {
|
|
61
|
+
requestId: bigint;
|
|
62
|
+
});
|
|
63
|
+
encode(w: Writer, _version: IetfVersion): Promise<void>;
|
|
64
|
+
static decode(r: Reader, _version: IetfVersion): Promise<Unsubscribe>;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=subscribe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["../../src/ietf/subscribe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/* @ts-self-types="./subscribe.d.ts" */
|
|
2
|
+
import * as Message from "./message.js";
|
|
3
|
+
import * as Namespace from "./namespace.js";
|
|
4
|
+
import { Parameters } from "./parameters.js";
|
|
5
|
+
import * as Properties from "./properties.js";
|
|
6
|
+
import { Version } from "./version.js";
|
|
7
|
+
// we only support Group Order descending
|
|
8
|
+
const GROUP_ORDER = 0x02;
|
|
9
|
+
export class Subscribe {
|
|
10
|
+
static id = 0x03;
|
|
11
|
+
requestId;
|
|
12
|
+
trackNamespace;
|
|
13
|
+
trackName;
|
|
14
|
+
subscriberPriority;
|
|
15
|
+
constructor({ requestId, trackNamespace, trackName, subscriberPriority, }) {
|
|
16
|
+
this.requestId = requestId;
|
|
17
|
+
this.trackNamespace = trackNamespace;
|
|
18
|
+
this.trackName = trackName;
|
|
19
|
+
this.subscriberPriority = subscriberPriority;
|
|
20
|
+
}
|
|
21
|
+
async #encode(w, version) {
|
|
22
|
+
await w.u62(this.requestId);
|
|
23
|
+
if (version === Version.DRAFT_17) {
|
|
24
|
+
await w.u62(0n); // required_request_id_delta = 0 (draft-17 only, removed in draft-18 per #1615)
|
|
25
|
+
}
|
|
26
|
+
await Namespace.encode(w, this.trackNamespace);
|
|
27
|
+
await w.string(this.trackName);
|
|
28
|
+
if (version === Version.DRAFT_14) {
|
|
29
|
+
await w.u8(this.subscriberPriority);
|
|
30
|
+
await w.u8(GROUP_ORDER);
|
|
31
|
+
await w.bool(true); // forward = true
|
|
32
|
+
await w.u53(0x2); // filter type = LargestObject
|
|
33
|
+
await w.u53(0); // no parameters
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
// v15+: fields moved into parameters
|
|
37
|
+
const params = new Parameters();
|
|
38
|
+
params.subscriberPriority = this.subscriberPriority;
|
|
39
|
+
params.groupOrder = GROUP_ORDER;
|
|
40
|
+
params.forward = true;
|
|
41
|
+
params.subscriptionFilter = 0x2; // LargestObject
|
|
42
|
+
await params.encode(w, version);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async encode(w, version) {
|
|
46
|
+
return Message.encode(w, (mw) => this.#encode(mw, version));
|
|
47
|
+
}
|
|
48
|
+
static async decode(r, version) {
|
|
49
|
+
return Message.decode(r, (mr) => Subscribe.#decode(mr, version));
|
|
50
|
+
}
|
|
51
|
+
static async #decode(r, version) {
|
|
52
|
+
const requestId = await r.u62();
|
|
53
|
+
if (version === Version.DRAFT_17) {
|
|
54
|
+
await r.u62(); // required_request_id_delta (read and ignore)
|
|
55
|
+
}
|
|
56
|
+
const trackNamespace = await Namespace.decode(r);
|
|
57
|
+
const trackName = await r.string();
|
|
58
|
+
if (version === Version.DRAFT_14) {
|
|
59
|
+
const subscriberPriority = await r.u8();
|
|
60
|
+
let groupOrder = await r.u8();
|
|
61
|
+
if (groupOrder > 2) {
|
|
62
|
+
throw new Error(`unknown group order: ${groupOrder}`);
|
|
63
|
+
}
|
|
64
|
+
if (groupOrder === 0) {
|
|
65
|
+
groupOrder = GROUP_ORDER; // default to descending
|
|
66
|
+
}
|
|
67
|
+
const forward = await r.bool();
|
|
68
|
+
if (!forward) {
|
|
69
|
+
throw new Error(`unsupported forward value: ${forward}`);
|
|
70
|
+
}
|
|
71
|
+
const filterType = await r.u53();
|
|
72
|
+
if (filterType !== 0x1 && filterType !== 0x2) {
|
|
73
|
+
throw new Error(`unsupported filter type: ${filterType}`);
|
|
74
|
+
}
|
|
75
|
+
await Parameters.decode(r, version); // ignore parameters
|
|
76
|
+
return new Subscribe({ requestId, trackNamespace, trackName, subscriberPriority });
|
|
77
|
+
}
|
|
78
|
+
// v15+: fields are in parameters
|
|
79
|
+
const params = await Parameters.decode(r, version);
|
|
80
|
+
const subscriberPriority = params.subscriberPriority ?? 128;
|
|
81
|
+
let groupOrder = params.groupOrder ?? GROUP_ORDER;
|
|
82
|
+
if (groupOrder > 2) {
|
|
83
|
+
throw new Error(`unknown group order: ${groupOrder}`);
|
|
84
|
+
}
|
|
85
|
+
if (groupOrder === 0) {
|
|
86
|
+
groupOrder = GROUP_ORDER; // default to descending
|
|
87
|
+
}
|
|
88
|
+
const forward = params.forward ?? true;
|
|
89
|
+
if (!forward) {
|
|
90
|
+
throw new Error(`unsupported forward value: ${forward}`);
|
|
91
|
+
}
|
|
92
|
+
const filterType = params.subscriptionFilter ?? 0x2;
|
|
93
|
+
if (filterType !== 0x1 && filterType !== 0x2) {
|
|
94
|
+
throw new Error(`unsupported filter type: ${filterType}`);
|
|
95
|
+
}
|
|
96
|
+
return new Subscribe({ requestId, trackNamespace, trackName, subscriberPriority });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export class SubscribeOk {
|
|
100
|
+
static id = 0x04;
|
|
101
|
+
requestId;
|
|
102
|
+
trackAlias;
|
|
103
|
+
constructor({ requestId, trackAlias }) {
|
|
104
|
+
this.requestId = requestId;
|
|
105
|
+
this.trackAlias = trackAlias;
|
|
106
|
+
}
|
|
107
|
+
async #encode(w, version) {
|
|
108
|
+
if (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {
|
|
109
|
+
if (this.requestId === undefined)
|
|
110
|
+
throw new Error("requestId required for draft14-16");
|
|
111
|
+
await w.u62(this.requestId);
|
|
112
|
+
}
|
|
113
|
+
await w.u62(this.trackAlias);
|
|
114
|
+
if (version === Version.DRAFT_14) {
|
|
115
|
+
await w.u62(0n); // expires = 0
|
|
116
|
+
await w.u8(GROUP_ORDER);
|
|
117
|
+
await w.bool(false); // content exists = false
|
|
118
|
+
await w.u53(0); // no parameters
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// v15+: just parameters after track_alias
|
|
122
|
+
const params = new Parameters();
|
|
123
|
+
params.groupOrder = GROUP_ORDER;
|
|
124
|
+
await params.encode(w, version);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async encode(w, version) {
|
|
128
|
+
return Message.encode(w, (mw) => this.#encode(mw, version));
|
|
129
|
+
}
|
|
130
|
+
static async decode(r, version) {
|
|
131
|
+
return Message.decode(r, (mr) => SubscribeOk.#decode(mr, version));
|
|
132
|
+
}
|
|
133
|
+
static async #decode(r, version) {
|
|
134
|
+
const requestId = version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16
|
|
135
|
+
? await r.u62()
|
|
136
|
+
: undefined;
|
|
137
|
+
const trackAlias = await r.u62();
|
|
138
|
+
if (version === Version.DRAFT_14) {
|
|
139
|
+
const expires = await r.u62();
|
|
140
|
+
if (expires !== BigInt(0)) {
|
|
141
|
+
throw new Error(`unsupported expires: ${expires}`);
|
|
142
|
+
}
|
|
143
|
+
await r.u8(); // Don't care about group order
|
|
144
|
+
const contentExists = await r.bool();
|
|
145
|
+
if (contentExists) {
|
|
146
|
+
// Ignore largest group/object
|
|
147
|
+
await r.u62();
|
|
148
|
+
await r.u62();
|
|
149
|
+
}
|
|
150
|
+
await Parameters.decode(r, version); // ignore parameters
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
// v15+: parameters followed by Track Properties (draft-17+)
|
|
154
|
+
await Parameters.decode(r, version);
|
|
155
|
+
await Properties.skip(r, version);
|
|
156
|
+
}
|
|
157
|
+
return new SubscribeOk({ requestId, trackAlias });
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
export class SubscribeError {
|
|
161
|
+
static id = 0x05;
|
|
162
|
+
requestId;
|
|
163
|
+
errorCode;
|
|
164
|
+
reasonPhrase;
|
|
165
|
+
constructor({ requestId, errorCode, reasonPhrase, }) {
|
|
166
|
+
this.requestId = requestId;
|
|
167
|
+
this.errorCode = errorCode;
|
|
168
|
+
this.reasonPhrase = reasonPhrase;
|
|
169
|
+
}
|
|
170
|
+
async #encode(w) {
|
|
171
|
+
await w.u62(this.requestId);
|
|
172
|
+
await w.u62(BigInt(this.errorCode));
|
|
173
|
+
await w.string(this.reasonPhrase);
|
|
174
|
+
}
|
|
175
|
+
async encode(w, _version) {
|
|
176
|
+
return Message.encode(w, this.#encode.bind(this));
|
|
177
|
+
}
|
|
178
|
+
static async decode(r, _version) {
|
|
179
|
+
return Message.decode(r, SubscribeError.#decode);
|
|
180
|
+
}
|
|
181
|
+
static async #decode(r) {
|
|
182
|
+
const requestId = await r.u62();
|
|
183
|
+
const errorCode = Number(await r.u62());
|
|
184
|
+
const reasonPhrase = await r.string();
|
|
185
|
+
return new SubscribeError({ requestId, errorCode, reasonPhrase });
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
export class SubscribeUpdate {
|
|
189
|
+
static id = 0x02;
|
|
190
|
+
requestId;
|
|
191
|
+
constructor({ requestId }) {
|
|
192
|
+
this.requestId = requestId;
|
|
193
|
+
}
|
|
194
|
+
async #encode(w, version) {
|
|
195
|
+
if (version === Version.DRAFT_14) {
|
|
196
|
+
await w.u62(this.requestId);
|
|
197
|
+
await w.u62(0n); // subscription_request_id
|
|
198
|
+
await w.u62(0n); // start_group
|
|
199
|
+
await w.u62(0n); // start_object
|
|
200
|
+
await w.u62(0n); // end_group
|
|
201
|
+
await w.u8(128); // subscriber_priority
|
|
202
|
+
await w.bool(true); // forward
|
|
203
|
+
await w.u53(0); // no parameters
|
|
204
|
+
}
|
|
205
|
+
else if (version === Version.DRAFT_15 || version === Version.DRAFT_16) {
|
|
206
|
+
await w.u62(this.requestId);
|
|
207
|
+
await w.u62(0n); // subscription_request_id
|
|
208
|
+
const params = new Parameters();
|
|
209
|
+
await params.encode(w, version);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
// v17+: REQUEST_UPDATE
|
|
213
|
+
await w.u62(this.requestId);
|
|
214
|
+
if (version === Version.DRAFT_17) {
|
|
215
|
+
await w.u62(0n); // required_request_id_delta (draft-17 only, removed in draft-18 per #1615)
|
|
216
|
+
}
|
|
217
|
+
const params = new Parameters();
|
|
218
|
+
await params.encode(w, version);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
async encode(w, version) {
|
|
222
|
+
return Message.encode(w, (mw) => this.#encode(mw, version));
|
|
223
|
+
}
|
|
224
|
+
static async decode(r, version) {
|
|
225
|
+
return Message.decode(r, (mr) => SubscribeUpdate.#decode(mr, version));
|
|
226
|
+
}
|
|
227
|
+
static async #decode(r, version) {
|
|
228
|
+
if (version === Version.DRAFT_14) {
|
|
229
|
+
const requestId = await r.u62();
|
|
230
|
+
await r.u62(); // subscription_request_id
|
|
231
|
+
await r.u62(); // start_group
|
|
232
|
+
await r.u62(); // start_object
|
|
233
|
+
await r.u62(); // end_group
|
|
234
|
+
await r.u8(); // subscriber_priority
|
|
235
|
+
await r.bool(); // forward
|
|
236
|
+
await Parameters.decode(r, version); // parameters
|
|
237
|
+
return new SubscribeUpdate({ requestId });
|
|
238
|
+
}
|
|
239
|
+
else if (version === Version.DRAFT_15 || version === Version.DRAFT_16) {
|
|
240
|
+
const requestId = await r.u62();
|
|
241
|
+
await r.u62(); // subscription_request_id
|
|
242
|
+
await Parameters.decode(r, version);
|
|
243
|
+
return new SubscribeUpdate({ requestId });
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
// v17+: REQUEST_UPDATE
|
|
247
|
+
const requestId = await r.u62();
|
|
248
|
+
if (version === Version.DRAFT_17) {
|
|
249
|
+
await r.u62(); // required_request_id_delta (draft-17 only, removed in draft-18 per #1615)
|
|
250
|
+
}
|
|
251
|
+
await Parameters.decode(r, version);
|
|
252
|
+
return new SubscribeUpdate({ requestId });
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
export class Unsubscribe {
|
|
257
|
+
static id = 0x0a;
|
|
258
|
+
requestId;
|
|
259
|
+
constructor({ requestId }) {
|
|
260
|
+
this.requestId = requestId;
|
|
261
|
+
}
|
|
262
|
+
async #encode(w) {
|
|
263
|
+
await w.u62(this.requestId);
|
|
264
|
+
}
|
|
265
|
+
async encode(w, _version) {
|
|
266
|
+
return Message.encode(w, this.#encode.bind(this));
|
|
267
|
+
}
|
|
268
|
+
static async decode(r, _version) {
|
|
269
|
+
return Message.decode(r, Unsubscribe.#decode);
|
|
270
|
+
}
|
|
271
|
+
static async #decode(r) {
|
|
272
|
+
const requestId = await r.u62();
|
|
273
|
+
return new Unsubscribe({ requestId });
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=subscribe.js.map
|
|
@@ -0,0 +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"]}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type * as Path from "../path";
|
|
2
|
+
import type { Reader, Writer } from "../stream";
|
|
3
|
+
import { type IetfVersion } from "./version";
|
|
4
|
+
export declare class SubscribeNamespace {
|
|
5
|
+
#private;
|
|
6
|
+
static id: number;
|
|
7
|
+
namespace: Path.Valid;
|
|
8
|
+
requestId: bigint;
|
|
9
|
+
constructor({ namespace, requestId }: {
|
|
10
|
+
namespace: Path.Valid;
|
|
11
|
+
requestId: bigint;
|
|
12
|
+
});
|
|
13
|
+
encode(w: Writer, version: IetfVersion): Promise<void>;
|
|
14
|
+
static decode(r: Reader, version: IetfVersion): Promise<SubscribeNamespace>;
|
|
15
|
+
}
|
|
16
|
+
export declare class SubscribeNamespaceLegacy {
|
|
17
|
+
#private;
|
|
18
|
+
static id: number;
|
|
19
|
+
namespace: Path.Valid;
|
|
20
|
+
requestId: bigint;
|
|
21
|
+
subscribeOptions: number;
|
|
22
|
+
constructor({ namespace, requestId, subscribeOptions, }: {
|
|
23
|
+
namespace: Path.Valid;
|
|
24
|
+
requestId: bigint;
|
|
25
|
+
subscribeOptions?: number;
|
|
26
|
+
});
|
|
27
|
+
encode(w: Writer, version: IetfVersion): Promise<void>;
|
|
28
|
+
static decode(r: Reader, version: IetfVersion): Promise<SubscribeNamespaceLegacy>;
|
|
29
|
+
}
|
|
30
|
+
export declare const SUBSCRIBE_TRACKS_ID = 81;
|
|
31
|
+
export declare class SubscribeNamespaceOk {
|
|
32
|
+
#private;
|
|
33
|
+
static id: number;
|
|
34
|
+
requestId: bigint;
|
|
35
|
+
constructor({ requestId }: {
|
|
36
|
+
requestId: bigint;
|
|
37
|
+
});
|
|
38
|
+
encode(w: Writer, _version: IetfVersion): Promise<void>;
|
|
39
|
+
static decode(r: Reader, _version: IetfVersion): Promise<SubscribeNamespaceOk>;
|
|
40
|
+
}
|
|
41
|
+
export declare class SubscribeNamespaceError {
|
|
42
|
+
#private;
|
|
43
|
+
static id: number;
|
|
44
|
+
requestId: bigint;
|
|
45
|
+
errorCode: number;
|
|
46
|
+
reasonPhrase: string;
|
|
47
|
+
constructor({ requestId, errorCode, reasonPhrase, }: {
|
|
48
|
+
requestId: bigint;
|
|
49
|
+
errorCode: number;
|
|
50
|
+
reasonPhrase: string;
|
|
51
|
+
});
|
|
52
|
+
encode(w: Writer, _version: IetfVersion): Promise<void>;
|
|
53
|
+
static decode(r: Reader, _version: IetfVersion): Promise<SubscribeNamespaceError>;
|
|
54
|
+
}
|
|
55
|
+
export declare class UnsubscribeNamespace {
|
|
56
|
+
#private;
|
|
57
|
+
static id: number;
|
|
58
|
+
requestId: bigint;
|
|
59
|
+
constructor({ requestId }: {
|
|
60
|
+
requestId: bigint;
|
|
61
|
+
});
|
|
62
|
+
encode(w: Writer, _version: IetfVersion): Promise<void>;
|
|
63
|
+
static decode(r: Reader, _version: IetfVersion): Promise<UnsubscribeNamespace>;
|
|
64
|
+
}
|
|
65
|
+
export declare class SubscribeNamespaceEntry {
|
|
66
|
+
#private;
|
|
67
|
+
static id: number;
|
|
68
|
+
suffix: Path.Valid;
|
|
69
|
+
constructor({ suffix }: {
|
|
70
|
+
suffix: Path.Valid;
|
|
71
|
+
});
|
|
72
|
+
encode(w: Writer, _version: IetfVersion): Promise<void>;
|
|
73
|
+
static decode(r: Reader, _version: IetfVersion): Promise<SubscribeNamespaceEntry>;
|
|
74
|
+
}
|
|
75
|
+
export declare class SubscribeNamespaceEntryDone {
|
|
76
|
+
#private;
|
|
77
|
+
static id: number;
|
|
78
|
+
suffix: Path.Valid;
|
|
79
|
+
constructor({ suffix }: {
|
|
80
|
+
suffix: Path.Valid;
|
|
81
|
+
});
|
|
82
|
+
encode(w: Writer, _version: IetfVersion): Promise<void>;
|
|
83
|
+
static decode(r: Reader, _version: IetfVersion): Promise<SubscribeNamespaceEntryDone>;
|
|
84
|
+
}
|
|
85
|
+
export declare class PublishBlocked {
|
|
86
|
+
#private;
|
|
87
|
+
static id: number;
|
|
88
|
+
suffix: Path.Valid;
|
|
89
|
+
trackName: string;
|
|
90
|
+
constructor({ suffix, trackName }: {
|
|
91
|
+
suffix: Path.Valid;
|
|
92
|
+
trackName: string;
|
|
93
|
+
});
|
|
94
|
+
encode(w: Writer, _version: IetfVersion): Promise<void>;
|
|
95
|
+
static decode(r: Reader, _version: IetfVersion): Promise<PublishBlocked>;
|
|
96
|
+
}
|
|
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
|
+
//# sourceMappingURL=subscribe_namespace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscribe_namespace.d.ts","sourceRoot":"","sources":["../../src/ietf/subscribe_namespace.ts"],"names":[],"mappings":"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"}
|