@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
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Reader, Writer } from "../stream";
|
|
2
|
+
import { type IetfVersion } from "./version";
|
|
3
|
+
export declare const SetupOption: {
|
|
4
|
+
readonly Path: 1n;
|
|
5
|
+
readonly MaxRequestId: 2n;
|
|
6
|
+
readonly AuthorizationToken: 3n;
|
|
7
|
+
readonly MaxAuthTokenCacheSize: 4n;
|
|
8
|
+
readonly Authority: 5n;
|
|
9
|
+
readonly Implementation: 7n;
|
|
10
|
+
};
|
|
11
|
+
export declare class SetupOptions {
|
|
12
|
+
vars: Map<bigint, bigint>;
|
|
13
|
+
bytes: Map<bigint, Uint8Array>;
|
|
14
|
+
constructor();
|
|
15
|
+
get size(): number;
|
|
16
|
+
setBytes(id: bigint, value: Uint8Array): void;
|
|
17
|
+
setVarint(id: bigint, value: bigint): void;
|
|
18
|
+
getBytes(id: bigint): Uint8Array | undefined;
|
|
19
|
+
getVarint(id: bigint): bigint | undefined;
|
|
20
|
+
removeBytes(id: bigint): boolean;
|
|
21
|
+
removeVarint(id: bigint): boolean;
|
|
22
|
+
encode(w: Writer, version: IetfVersion): Promise<void>;
|
|
23
|
+
static decode(r: Reader, version: IetfVersion): Promise<SetupOptions>;
|
|
24
|
+
}
|
|
25
|
+
export declare class Parameters {
|
|
26
|
+
vars: Map<bigint, bigint>;
|
|
27
|
+
bytes: Map<bigint, Uint8Array>;
|
|
28
|
+
constructor();
|
|
29
|
+
get subscriberPriority(): number | undefined;
|
|
30
|
+
set subscriberPriority(v: number);
|
|
31
|
+
get groupOrder(): number | undefined;
|
|
32
|
+
set groupOrder(v: number);
|
|
33
|
+
get forward(): boolean | undefined;
|
|
34
|
+
set forward(v: boolean);
|
|
35
|
+
get publisherPriority(): number | undefined;
|
|
36
|
+
set publisherPriority(v: number);
|
|
37
|
+
get expires(): bigint | undefined;
|
|
38
|
+
set expires(v: bigint);
|
|
39
|
+
get deliveryTimeout(): bigint | undefined;
|
|
40
|
+
set deliveryTimeout(v: bigint);
|
|
41
|
+
get maxCacheDuration(): bigint | undefined;
|
|
42
|
+
set maxCacheDuration(v: bigint);
|
|
43
|
+
get largest(): {
|
|
44
|
+
groupId: bigint;
|
|
45
|
+
objectId: bigint;
|
|
46
|
+
} | undefined;
|
|
47
|
+
set largest(v: {
|
|
48
|
+
groupId: bigint;
|
|
49
|
+
objectId: bigint;
|
|
50
|
+
});
|
|
51
|
+
get subscriptionFilter(): number | undefined;
|
|
52
|
+
set subscriptionFilter(v: number);
|
|
53
|
+
encode(w: Writer, version: IetfVersion): Promise<void>;
|
|
54
|
+
static decode(r: Reader, version: IetfVersion): Promise<Parameters>;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=parameters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameters.d.ts","sourceRoot":"","sources":["../../src/ietf/parameters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/* @ts-self-types="./parameters.d.ts" */
|
|
2
|
+
import * as Varint from "../varint.js";
|
|
3
|
+
import { Version } from "./version.js";
|
|
4
|
+
/// Setup Option key constants (separate namespace from Message Parameters).
|
|
5
|
+
export const SetupOption = {
|
|
6
|
+
Path: 1n,
|
|
7
|
+
MaxRequestId: 2n,
|
|
8
|
+
AuthorizationToken: 3n,
|
|
9
|
+
MaxAuthTokenCacheSize: 4n,
|
|
10
|
+
Authority: 5n,
|
|
11
|
+
Implementation: 7n,
|
|
12
|
+
};
|
|
13
|
+
/// Setup Options — used in SETUP messages.
|
|
14
|
+
///
|
|
15
|
+
/// In d14-d16 these are count-prefixed ("Setup Parameters").
|
|
16
|
+
/// In d17 these have no count prefix ("Setup Options") and read/write to end of message.
|
|
17
|
+
export class SetupOptions {
|
|
18
|
+
vars;
|
|
19
|
+
bytes;
|
|
20
|
+
constructor() {
|
|
21
|
+
this.vars = new Map();
|
|
22
|
+
this.bytes = new Map();
|
|
23
|
+
}
|
|
24
|
+
get size() {
|
|
25
|
+
return this.vars.size + this.bytes.size;
|
|
26
|
+
}
|
|
27
|
+
setBytes(id, value) {
|
|
28
|
+
if (id % 2n !== 1n) {
|
|
29
|
+
throw new Error(`invalid parameter id: ${id.toString()}, must be odd`);
|
|
30
|
+
}
|
|
31
|
+
this.bytes.set(id, value);
|
|
32
|
+
}
|
|
33
|
+
setVarint(id, value) {
|
|
34
|
+
if (id % 2n !== 0n) {
|
|
35
|
+
throw new Error(`invalid parameter id: ${id.toString()}, must be even`);
|
|
36
|
+
}
|
|
37
|
+
this.vars.set(id, value);
|
|
38
|
+
}
|
|
39
|
+
getBytes(id) {
|
|
40
|
+
if (id % 2n !== 1n) {
|
|
41
|
+
throw new Error(`invalid parameter id: ${id.toString()}, must be odd`);
|
|
42
|
+
}
|
|
43
|
+
return this.bytes.get(id);
|
|
44
|
+
}
|
|
45
|
+
getVarint(id) {
|
|
46
|
+
if (id % 2n !== 0n) {
|
|
47
|
+
throw new Error(`invalid parameter id: ${id.toString()}, must be even`);
|
|
48
|
+
}
|
|
49
|
+
return this.vars.get(id);
|
|
50
|
+
}
|
|
51
|
+
removeBytes(id) {
|
|
52
|
+
if (id % 2n !== 1n) {
|
|
53
|
+
throw new Error(`invalid parameter id: ${id.toString()}, must be odd`);
|
|
54
|
+
}
|
|
55
|
+
return this.bytes.delete(id);
|
|
56
|
+
}
|
|
57
|
+
removeVarint(id) {
|
|
58
|
+
if (id % 2n !== 0n) {
|
|
59
|
+
throw new Error(`invalid parameter id: ${id.toString()}, must be even`);
|
|
60
|
+
}
|
|
61
|
+
return this.vars.delete(id);
|
|
62
|
+
}
|
|
63
|
+
async encode(w, version) {
|
|
64
|
+
if (version !== Version.DRAFT_14 && version !== Version.DRAFT_15) {
|
|
65
|
+
// d17+: no count prefix; d16: count prefix
|
|
66
|
+
if (version === Version.DRAFT_16) {
|
|
67
|
+
await w.u53(this.vars.size + this.bytes.size);
|
|
68
|
+
}
|
|
69
|
+
// Delta encoding: collect all keys, sort, encode deltas
|
|
70
|
+
const all = [];
|
|
71
|
+
for (const id of this.vars.keys())
|
|
72
|
+
all.push({ key: id, isVar: true });
|
|
73
|
+
for (const id of this.bytes.keys())
|
|
74
|
+
all.push({ key: id, isVar: false });
|
|
75
|
+
all.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));
|
|
76
|
+
let prevId = 0n;
|
|
77
|
+
for (let i = 0; i < all.length; i++) {
|
|
78
|
+
const { key, isVar } = all[i];
|
|
79
|
+
const delta = i === 0 ? key : key - prevId;
|
|
80
|
+
prevId = key;
|
|
81
|
+
await w.u62(delta);
|
|
82
|
+
if (isVar) {
|
|
83
|
+
// biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in vars map
|
|
84
|
+
await w.u62(this.vars.get(key));
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
// biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in bytes map
|
|
88
|
+
const value = this.bytes.get(key);
|
|
89
|
+
await w.u53(value.length);
|
|
90
|
+
await w.write(value);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
await w.u53(this.vars.size + this.bytes.size);
|
|
96
|
+
for (const [id, value] of this.vars) {
|
|
97
|
+
await w.u62(id);
|
|
98
|
+
await w.u62(value);
|
|
99
|
+
}
|
|
100
|
+
for (const [id, value] of this.bytes) {
|
|
101
|
+
await w.u62(id);
|
|
102
|
+
await w.u53(value.length);
|
|
103
|
+
await w.write(value);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
static async decode(r, version) {
|
|
108
|
+
const params = new SetupOptions();
|
|
109
|
+
if (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {
|
|
110
|
+
// d17+: no count prefix, read until reader is done
|
|
111
|
+
let prevType = 0n;
|
|
112
|
+
let i = 0;
|
|
113
|
+
while (!(await r.done())) {
|
|
114
|
+
const delta = await r.u62();
|
|
115
|
+
const id = i === 0 ? delta : prevType + delta;
|
|
116
|
+
prevType = id;
|
|
117
|
+
i++;
|
|
118
|
+
if (id % 2n === 0n) {
|
|
119
|
+
if (params.vars.has(id)) {
|
|
120
|
+
throw new Error(`duplicate parameter id: ${id.toString()}`);
|
|
121
|
+
}
|
|
122
|
+
const varint = await r.u62();
|
|
123
|
+
params.setVarint(id, varint);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
if (params.bytes.has(id)) {
|
|
127
|
+
throw new Error(`duplicate parameter id: ${id.toString()}`);
|
|
128
|
+
}
|
|
129
|
+
const size = await r.u53();
|
|
130
|
+
const bytes = await r.read(size);
|
|
131
|
+
params.setBytes(id, bytes);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
const count = await r.u53();
|
|
137
|
+
let prevType = 0n;
|
|
138
|
+
for (let i = 0; i < count; i++) {
|
|
139
|
+
let id;
|
|
140
|
+
if (version === Version.DRAFT_16) {
|
|
141
|
+
const delta = await r.u62();
|
|
142
|
+
id = i === 0 ? delta : prevType + delta;
|
|
143
|
+
prevType = id;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
id = await r.u62();
|
|
147
|
+
}
|
|
148
|
+
if (id % 2n === 0n) {
|
|
149
|
+
if (params.vars.has(id)) {
|
|
150
|
+
throw new Error(`duplicate parameter id: ${id.toString()}`);
|
|
151
|
+
}
|
|
152
|
+
const varint = await r.u62();
|
|
153
|
+
params.setVarint(id, varint);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
if (params.bytes.has(id)) {
|
|
157
|
+
throw new Error(`duplicate parameter id: ${id.toString()}`);
|
|
158
|
+
}
|
|
159
|
+
const size = await r.u53();
|
|
160
|
+
const bytes = await r.read(size);
|
|
161
|
+
params.setBytes(id, bytes);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return params;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// ---- Message Parameters (used in Subscribe, Publish, Fetch, etc.) ----
|
|
169
|
+
// Count-prefixed KVPs with delta-encoded keys (d16+).
|
|
170
|
+
// Varint parameter IDs (even)
|
|
171
|
+
const MSG_PARAM_DELIVERY_TIMEOUT = 0x02n;
|
|
172
|
+
const MSG_PARAM_MAX_CACHE_DURATION = 0x04n;
|
|
173
|
+
const MSG_PARAM_EXPIRES = 0x08n;
|
|
174
|
+
const MSG_PARAM_PUBLISHER_PRIORITY = 0x0en;
|
|
175
|
+
const MSG_PARAM_FORWARD = 0x10n;
|
|
176
|
+
const MSG_PARAM_SUBSCRIBER_PRIORITY = 0x20n;
|
|
177
|
+
const MSG_PARAM_GROUP_ORDER = 0x22n;
|
|
178
|
+
// Bytes parameter IDs (odd)
|
|
179
|
+
const MSG_PARAM_LARGEST_OBJECT = 0x09n;
|
|
180
|
+
const MSG_PARAM_SUBSCRIPTION_FILTER = 0x21n;
|
|
181
|
+
/// Message Parameters — count-prefixed KVPs used in control messages.
|
|
182
|
+
export class Parameters {
|
|
183
|
+
vars;
|
|
184
|
+
bytes;
|
|
185
|
+
constructor() {
|
|
186
|
+
this.vars = new Map();
|
|
187
|
+
this.bytes = new Map();
|
|
188
|
+
}
|
|
189
|
+
// --- Varint accessors ---
|
|
190
|
+
get subscriberPriority() {
|
|
191
|
+
const v = this.vars.get(MSG_PARAM_SUBSCRIBER_PRIORITY);
|
|
192
|
+
return v !== undefined ? Number(v) : undefined;
|
|
193
|
+
}
|
|
194
|
+
set subscriberPriority(v) {
|
|
195
|
+
this.vars.set(MSG_PARAM_SUBSCRIBER_PRIORITY, BigInt(v));
|
|
196
|
+
}
|
|
197
|
+
get groupOrder() {
|
|
198
|
+
const v = this.vars.get(MSG_PARAM_GROUP_ORDER);
|
|
199
|
+
return v !== undefined ? Number(v) : undefined;
|
|
200
|
+
}
|
|
201
|
+
set groupOrder(v) {
|
|
202
|
+
this.vars.set(MSG_PARAM_GROUP_ORDER, BigInt(v));
|
|
203
|
+
}
|
|
204
|
+
get forward() {
|
|
205
|
+
const v = this.vars.get(MSG_PARAM_FORWARD);
|
|
206
|
+
return v !== undefined ? v !== 0n : undefined;
|
|
207
|
+
}
|
|
208
|
+
set forward(v) {
|
|
209
|
+
this.vars.set(MSG_PARAM_FORWARD, v ? 1n : 0n);
|
|
210
|
+
}
|
|
211
|
+
get publisherPriority() {
|
|
212
|
+
const v = this.vars.get(MSG_PARAM_PUBLISHER_PRIORITY);
|
|
213
|
+
return v !== undefined ? Number(v) : undefined;
|
|
214
|
+
}
|
|
215
|
+
set publisherPriority(v) {
|
|
216
|
+
this.vars.set(MSG_PARAM_PUBLISHER_PRIORITY, BigInt(v));
|
|
217
|
+
}
|
|
218
|
+
get expires() {
|
|
219
|
+
return this.vars.get(MSG_PARAM_EXPIRES);
|
|
220
|
+
}
|
|
221
|
+
set expires(v) {
|
|
222
|
+
this.vars.set(MSG_PARAM_EXPIRES, v);
|
|
223
|
+
}
|
|
224
|
+
get deliveryTimeout() {
|
|
225
|
+
return this.vars.get(MSG_PARAM_DELIVERY_TIMEOUT);
|
|
226
|
+
}
|
|
227
|
+
set deliveryTimeout(v) {
|
|
228
|
+
this.vars.set(MSG_PARAM_DELIVERY_TIMEOUT, v);
|
|
229
|
+
}
|
|
230
|
+
get maxCacheDuration() {
|
|
231
|
+
return this.vars.get(MSG_PARAM_MAX_CACHE_DURATION);
|
|
232
|
+
}
|
|
233
|
+
set maxCacheDuration(v) {
|
|
234
|
+
this.vars.set(MSG_PARAM_MAX_CACHE_DURATION, v);
|
|
235
|
+
}
|
|
236
|
+
// --- Bytes accessors ---
|
|
237
|
+
get largest() {
|
|
238
|
+
const data = this.bytes.get(MSG_PARAM_LARGEST_OBJECT);
|
|
239
|
+
if (!data || data.length === 0)
|
|
240
|
+
return undefined;
|
|
241
|
+
const [groupId, rest] = Varint.decode(data);
|
|
242
|
+
const [objectId] = Varint.decode(rest);
|
|
243
|
+
return { groupId: BigInt(groupId), objectId: BigInt(objectId) };
|
|
244
|
+
}
|
|
245
|
+
set largest(v) {
|
|
246
|
+
const buf1 = Varint.encode(Number(v.groupId));
|
|
247
|
+
const buf2 = Varint.encode(Number(v.objectId));
|
|
248
|
+
const combined = new Uint8Array(buf1.length + buf2.length);
|
|
249
|
+
combined.set(buf1, 0);
|
|
250
|
+
combined.set(buf2, buf1.length);
|
|
251
|
+
this.bytes.set(MSG_PARAM_LARGEST_OBJECT, combined);
|
|
252
|
+
}
|
|
253
|
+
get subscriptionFilter() {
|
|
254
|
+
const data = this.bytes.get(MSG_PARAM_SUBSCRIPTION_FILTER);
|
|
255
|
+
if (!data || data.length === 0)
|
|
256
|
+
return undefined;
|
|
257
|
+
// Filter type is a varint — for our purposes, the first byte suffices
|
|
258
|
+
return data[0];
|
|
259
|
+
}
|
|
260
|
+
set subscriptionFilter(v) {
|
|
261
|
+
this.bytes.set(MSG_PARAM_SUBSCRIPTION_FILTER, new Uint8Array([v]));
|
|
262
|
+
}
|
|
263
|
+
async encode(w, version) {
|
|
264
|
+
await w.u53(this.vars.size + this.bytes.size);
|
|
265
|
+
if (version === Version.DRAFT_14 || version === Version.DRAFT_15) {
|
|
266
|
+
for (const [id, value] of this.vars) {
|
|
267
|
+
await w.u62(id);
|
|
268
|
+
await w.u62(value);
|
|
269
|
+
}
|
|
270
|
+
for (const [id, value] of this.bytes) {
|
|
271
|
+
await w.u62(id);
|
|
272
|
+
await w.u53(value.length);
|
|
273
|
+
await w.write(value);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
// d16+: Delta encoding, merge vars and bytes, sort by key
|
|
278
|
+
const all = [];
|
|
279
|
+
for (const id of this.vars.keys())
|
|
280
|
+
all.push({ key: id, isVar: true });
|
|
281
|
+
for (const id of this.bytes.keys())
|
|
282
|
+
all.push({ key: id, isVar: false });
|
|
283
|
+
all.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));
|
|
284
|
+
let prevId = 0n;
|
|
285
|
+
for (let i = 0; i < all.length; i++) {
|
|
286
|
+
const { key, isVar } = all[i];
|
|
287
|
+
const delta = i === 0 ? key : key - prevId;
|
|
288
|
+
prevId = key;
|
|
289
|
+
await w.u62(delta);
|
|
290
|
+
if (isVar) {
|
|
291
|
+
// biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in vars map
|
|
292
|
+
await w.u62(this.vars.get(key));
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
// biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in bytes map
|
|
296
|
+
const value = this.bytes.get(key);
|
|
297
|
+
await w.u53(value.length);
|
|
298
|
+
await w.write(value);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
static async decode(r, version) {
|
|
304
|
+
const count = await r.u53();
|
|
305
|
+
const params = new Parameters();
|
|
306
|
+
let prevType = 0n;
|
|
307
|
+
for (let i = 0; i < count; i++) {
|
|
308
|
+
let id;
|
|
309
|
+
if (version === Version.DRAFT_14 || version === Version.DRAFT_15) {
|
|
310
|
+
id = await r.u62();
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
// d16+: delta encoding
|
|
314
|
+
const delta = await r.u62();
|
|
315
|
+
id = i === 0 ? delta : prevType + delta;
|
|
316
|
+
prevType = id;
|
|
317
|
+
}
|
|
318
|
+
if (id % 2n === 0n) {
|
|
319
|
+
if (params.vars.has(id)) {
|
|
320
|
+
throw new Error(`duplicate message parameter id: ${id.toString()}`);
|
|
321
|
+
}
|
|
322
|
+
const varint = await r.u62();
|
|
323
|
+
params.vars.set(id, varint);
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
if (params.bytes.has(id)) {
|
|
327
|
+
throw new Error(`duplicate message parameter id: ${id.toString()}`);
|
|
328
|
+
}
|
|
329
|
+
const size = await r.u53();
|
|
330
|
+
const bytes = await r.read(size);
|
|
331
|
+
params.bytes.set(id, bytes);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return params;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=parameters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameters.js","sourceRoot":"","sources":["../../src/ietf/parameters.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Reader, Writer } from \"../stream.ts\";\nimport * as Varint from \"../varint.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n/// Setup Option key constants (separate namespace from Message Parameters).\nexport const SetupOption = {\n\tPath: 1n,\n\tMaxRequestId: 2n,\n\tAuthorizationToken: 3n,\n\tMaxAuthTokenCacheSize: 4n,\n\tAuthority: 5n,\n\tImplementation: 7n,\n} as const;\n\n/// Setup Options — used in SETUP messages.\n///\n/// In d14-d16 these are count-prefixed (\"Setup Parameters\").\n/// In d17 these have no count prefix (\"Setup Options\") and read/write to end of message.\nexport class SetupOptions {\n\tvars: Map<bigint, bigint>;\n\tbytes: Map<bigint, Uint8Array>;\n\n\tconstructor() {\n\t\tthis.vars = new Map();\n\t\tthis.bytes = new Map();\n\t}\n\n\tget size() {\n\t\treturn this.vars.size + this.bytes.size;\n\t}\n\n\tsetBytes(id: bigint, value: Uint8Array) {\n\t\tif (id % 2n !== 1n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be odd`);\n\t\t}\n\t\tthis.bytes.set(id, value);\n\t}\n\n\tsetVarint(id: bigint, value: bigint) {\n\t\tif (id % 2n !== 0n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be even`);\n\t\t}\n\t\tthis.vars.set(id, value);\n\t}\n\n\tgetBytes(id: bigint): Uint8Array | undefined {\n\t\tif (id % 2n !== 1n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be odd`);\n\t\t}\n\t\treturn this.bytes.get(id);\n\t}\n\n\tgetVarint(id: bigint): bigint | undefined {\n\t\tif (id % 2n !== 0n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be even`);\n\t\t}\n\t\treturn this.vars.get(id);\n\t}\n\n\tremoveBytes(id: bigint): boolean {\n\t\tif (id % 2n !== 1n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be odd`);\n\t\t}\n\t\treturn this.bytes.delete(id);\n\t}\n\n\tremoveVarint(id: bigint): boolean {\n\t\tif (id % 2n !== 0n) {\n\t\t\tthrow new Error(`invalid parameter id: ${id.toString()}, must be even`);\n\t\t}\n\t\treturn this.vars.delete(id);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion) {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15) {\n\t\t\t// d17+: no count prefix; d16: count prefix\n\t\t\tif (version === Version.DRAFT_16) {\n\t\t\t\tawait w.u53(this.vars.size + this.bytes.size);\n\t\t\t}\n\n\t\t\t// Delta encoding: collect all keys, sort, encode deltas\n\t\t\tconst all: { key: bigint; isVar: boolean }[] = [];\n\t\t\tfor (const id of this.vars.keys()) all.push({ key: id, isVar: true });\n\t\t\tfor (const id of this.bytes.keys()) all.push({ key: id, isVar: false });\n\t\t\tall.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));\n\n\t\t\tlet prevId = 0n;\n\t\t\tfor (let i = 0; i < all.length; i++) {\n\t\t\t\tconst { key, isVar } = all[i];\n\t\t\t\tconst delta = i === 0 ? key : key - prevId;\n\t\t\t\tprevId = key;\n\t\t\t\tawait w.u62(delta);\n\n\t\t\t\tif (isVar) {\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in vars map\n\t\t\t\t\tawait w.u62(this.vars.get(key)!);\n\t\t\t\t} else {\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in bytes map\n\t\t\t\t\tconst value = this.bytes.get(key)!;\n\t\t\t\t\tawait w.u53(value.length);\n\t\t\t\t\tawait w.write(value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tawait w.u53(this.vars.size + this.bytes.size);\n\n\t\t\tfor (const [id, value] of this.vars) {\n\t\t\t\tawait w.u62(id);\n\t\t\t\tawait w.u62(value);\n\t\t\t}\n\n\t\t\tfor (const [id, value] of this.bytes) {\n\t\t\t\tawait w.u62(id);\n\t\t\t\tawait w.u53(value.length);\n\t\t\t\tawait w.write(value);\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<SetupOptions> {\n\t\tconst params = new SetupOptions();\n\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\t// d17+: no count prefix, read until reader is done\n\t\t\tlet prevType = 0n;\n\t\t\tlet i = 0;\n\t\t\twhile (!(await r.done())) {\n\t\t\t\tconst delta = await r.u62();\n\t\t\t\tconst id = i === 0 ? delta : prevType + delta;\n\t\t\t\tprevType = id;\n\t\t\t\ti++;\n\n\t\t\t\tif (id % 2n === 0n) {\n\t\t\t\t\tif (params.vars.has(id)) {\n\t\t\t\t\t\tthrow new Error(`duplicate parameter id: ${id.toString()}`);\n\t\t\t\t\t}\n\t\t\t\t\tconst varint = await r.u62();\n\t\t\t\t\tparams.setVarint(id, varint);\n\t\t\t\t} else {\n\t\t\t\t\tif (params.bytes.has(id)) {\n\t\t\t\t\t\tthrow new Error(`duplicate parameter id: ${id.toString()}`);\n\t\t\t\t\t}\n\t\t\t\t\tconst size = await r.u53();\n\t\t\t\t\tconst bytes = await r.read(size);\n\t\t\t\t\tparams.setBytes(id, bytes);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst count = await r.u53();\n\t\t\tlet prevType = 0n;\n\n\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\tlet id: bigint;\n\t\t\t\tif (version === Version.DRAFT_16) {\n\t\t\t\t\tconst delta = await r.u62();\n\t\t\t\t\tid = i === 0 ? delta : prevType + delta;\n\t\t\t\t\tprevType = id;\n\t\t\t\t} else {\n\t\t\t\t\tid = await r.u62();\n\t\t\t\t}\n\n\t\t\t\tif (id % 2n === 0n) {\n\t\t\t\t\tif (params.vars.has(id)) {\n\t\t\t\t\t\tthrow new Error(`duplicate parameter id: ${id.toString()}`);\n\t\t\t\t\t}\n\t\t\t\t\tconst varint = await r.u62();\n\t\t\t\t\tparams.setVarint(id, varint);\n\t\t\t\t} else {\n\t\t\t\t\tif (params.bytes.has(id)) {\n\t\t\t\t\t\tthrow new Error(`duplicate parameter id: ${id.toString()}`);\n\t\t\t\t\t}\n\t\t\t\t\tconst size = await r.u53();\n\t\t\t\t\tconst bytes = await r.read(size);\n\t\t\t\t\tparams.setBytes(id, bytes);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn params;\n\t}\n}\n\n// ---- Message Parameters (used in Subscribe, Publish, Fetch, etc.) ----\n// Count-prefixed KVPs with delta-encoded keys (d16+).\n\n// Varint parameter IDs (even)\nconst MSG_PARAM_DELIVERY_TIMEOUT = 0x02n;\nconst MSG_PARAM_MAX_CACHE_DURATION = 0x04n;\nconst MSG_PARAM_EXPIRES = 0x08n;\nconst MSG_PARAM_PUBLISHER_PRIORITY = 0x0en;\nconst MSG_PARAM_FORWARD = 0x10n;\nconst MSG_PARAM_SUBSCRIBER_PRIORITY = 0x20n;\nconst MSG_PARAM_GROUP_ORDER = 0x22n;\n\n// Bytes parameter IDs (odd)\nconst MSG_PARAM_LARGEST_OBJECT = 0x09n;\nconst MSG_PARAM_SUBSCRIPTION_FILTER = 0x21n;\n\n/// Message Parameters — count-prefixed KVPs used in control messages.\nexport class Parameters {\n\tvars: Map<bigint, bigint>;\n\tbytes: Map<bigint, Uint8Array>;\n\n\tconstructor() {\n\t\tthis.vars = new Map();\n\t\tthis.bytes = new Map();\n\t}\n\n\t// --- Varint accessors ---\n\n\tget subscriberPriority(): number | undefined {\n\t\tconst v = this.vars.get(MSG_PARAM_SUBSCRIBER_PRIORITY);\n\t\treturn v !== undefined ? Number(v) : undefined;\n\t}\n\n\tset subscriberPriority(v: number) {\n\t\tthis.vars.set(MSG_PARAM_SUBSCRIBER_PRIORITY, BigInt(v));\n\t}\n\n\tget groupOrder(): number | undefined {\n\t\tconst v = this.vars.get(MSG_PARAM_GROUP_ORDER);\n\t\treturn v !== undefined ? Number(v) : undefined;\n\t}\n\n\tset groupOrder(v: number) {\n\t\tthis.vars.set(MSG_PARAM_GROUP_ORDER, BigInt(v));\n\t}\n\n\tget forward(): boolean | undefined {\n\t\tconst v = this.vars.get(MSG_PARAM_FORWARD);\n\t\treturn v !== undefined ? v !== 0n : undefined;\n\t}\n\n\tset forward(v: boolean) {\n\t\tthis.vars.set(MSG_PARAM_FORWARD, v ? 1n : 0n);\n\t}\n\n\tget publisherPriority(): number | undefined {\n\t\tconst v = this.vars.get(MSG_PARAM_PUBLISHER_PRIORITY);\n\t\treturn v !== undefined ? Number(v) : undefined;\n\t}\n\n\tset publisherPriority(v: number) {\n\t\tthis.vars.set(MSG_PARAM_PUBLISHER_PRIORITY, BigInt(v));\n\t}\n\n\tget expires(): bigint | undefined {\n\t\treturn this.vars.get(MSG_PARAM_EXPIRES);\n\t}\n\n\tset expires(v: bigint) {\n\t\tthis.vars.set(MSG_PARAM_EXPIRES, v);\n\t}\n\n\tget deliveryTimeout(): bigint | undefined {\n\t\treturn this.vars.get(MSG_PARAM_DELIVERY_TIMEOUT);\n\t}\n\n\tset deliveryTimeout(v: bigint) {\n\t\tthis.vars.set(MSG_PARAM_DELIVERY_TIMEOUT, v);\n\t}\n\n\tget maxCacheDuration(): bigint | undefined {\n\t\treturn this.vars.get(MSG_PARAM_MAX_CACHE_DURATION);\n\t}\n\n\tset maxCacheDuration(v: bigint) {\n\t\tthis.vars.set(MSG_PARAM_MAX_CACHE_DURATION, v);\n\t}\n\n\t// --- Bytes accessors ---\n\n\tget largest(): { groupId: bigint; objectId: bigint } | undefined {\n\t\tconst data = this.bytes.get(MSG_PARAM_LARGEST_OBJECT);\n\t\tif (!data || data.length === 0) return undefined;\n\t\tconst [groupId, rest] = Varint.decode(data);\n\t\tconst [objectId] = Varint.decode(rest);\n\t\treturn { groupId: BigInt(groupId), objectId: BigInt(objectId) };\n\t}\n\n\tset largest(v: { groupId: bigint; objectId: bigint }) {\n\t\tconst buf1 = Varint.encode(Number(v.groupId));\n\t\tconst buf2 = Varint.encode(Number(v.objectId));\n\t\tconst combined = new Uint8Array(buf1.length + buf2.length);\n\t\tcombined.set(buf1, 0);\n\t\tcombined.set(buf2, buf1.length);\n\t\tthis.bytes.set(MSG_PARAM_LARGEST_OBJECT, combined);\n\t}\n\n\tget subscriptionFilter(): number | undefined {\n\t\tconst data = this.bytes.get(MSG_PARAM_SUBSCRIPTION_FILTER);\n\t\tif (!data || data.length === 0) return undefined;\n\t\t// Filter type is a varint — for our purposes, the first byte suffices\n\t\treturn data[0];\n\t}\n\n\tset subscriptionFilter(v: number) {\n\t\tthis.bytes.set(MSG_PARAM_SUBSCRIPTION_FILTER, new Uint8Array([v]));\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion) {\n\t\tawait w.u53(this.vars.size + this.bytes.size);\n\n\t\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15) {\n\t\t\tfor (const [id, value] of this.vars) {\n\t\t\t\tawait w.u62(id);\n\t\t\t\tawait w.u62(value);\n\t\t\t}\n\n\t\t\tfor (const [id, value] of this.bytes) {\n\t\t\t\tawait w.u62(id);\n\t\t\t\tawait w.u53(value.length);\n\t\t\t\tawait w.write(value);\n\t\t\t}\n\t\t} else {\n\t\t\t// d16+: Delta encoding, merge vars and bytes, sort by key\n\t\t\tconst all: { key: bigint; isVar: boolean }[] = [];\n\t\t\tfor (const id of this.vars.keys()) all.push({ key: id, isVar: true });\n\t\t\tfor (const id of this.bytes.keys()) all.push({ key: id, isVar: false });\n\t\t\tall.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));\n\n\t\t\tlet prevId = 0n;\n\t\t\tfor (let i = 0; i < all.length; i++) {\n\t\t\t\tconst { key, isVar } = all[i];\n\t\t\t\tconst delta = i === 0 ? key : key - prevId;\n\t\t\t\tprevId = key;\n\t\t\t\tawait w.u62(delta);\n\n\t\t\t\tif (isVar) {\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in vars map\n\t\t\t\t\tawait w.u62(this.vars.get(key)!);\n\t\t\t\t} else {\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: key is guaranteed to exist in bytes map\n\t\t\t\t\tconst value = this.bytes.get(key)!;\n\t\t\t\t\tawait w.u53(value.length);\n\t\t\t\t\tawait w.write(value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<Parameters> {\n\t\tconst count = await r.u53();\n\t\tconst params = new Parameters();\n\n\t\tlet prevType = 0n;\n\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tlet id: bigint;\n\t\t\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15) {\n\t\t\t\tid = await r.u62();\n\t\t\t} else {\n\t\t\t\t// d16+: delta encoding\n\t\t\t\tconst delta = await r.u62();\n\t\t\t\tid = i === 0 ? delta : prevType + delta;\n\t\t\t\tprevType = id;\n\t\t\t}\n\n\t\t\tif (id % 2n === 0n) {\n\t\t\t\tif (params.vars.has(id)) {\n\t\t\t\t\tthrow new Error(`duplicate message parameter id: ${id.toString()}`);\n\t\t\t\t}\n\t\t\t\tconst varint = await r.u62();\n\t\t\t\tparams.vars.set(id, varint);\n\t\t\t} else {\n\t\t\t\tif (params.bytes.has(id)) {\n\t\t\t\t\tthrow new Error(`duplicate message parameter id: ${id.toString()}`);\n\t\t\t\t}\n\t\t\t\tconst size = await r.u53();\n\t\t\t\tconst bytes = await r.read(size);\n\t\t\t\tparams.bytes.set(id, bytes);\n\t\t\t}\n\t\t}\n\n\t\treturn params;\n\t}\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../src/ietf/properties.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,cAAc,CAAC;AASzD,wBAAsB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBzE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/* @ts-self-types="./properties.d.ts" */
|
|
2
|
+
import { Version } from "./version.js";
|
|
3
|
+
/// Skip Track Properties from the remaining bytes of a message.
|
|
4
|
+
///
|
|
5
|
+
/// Track Properties are delta-encoded Key-Value-Pairs (same format as
|
|
6
|
+
/// Message Parameters) but with NO count prefix — they extend to the
|
|
7
|
+
/// end of the message payload.
|
|
8
|
+
///
|
|
9
|
+
/// Only present in draft-17+; older drafts don't have Track Properties.
|
|
10
|
+
export async function skip(r, version) {
|
|
11
|
+
// Track Properties only exist in draft-17+
|
|
12
|
+
if (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
let prevType = 0n;
|
|
16
|
+
let i = 0;
|
|
17
|
+
while (!(await r.done())) {
|
|
18
|
+
const delta = await r.u62();
|
|
19
|
+
const abs = i === 0 ? delta : prevType + delta;
|
|
20
|
+
prevType = abs;
|
|
21
|
+
i++;
|
|
22
|
+
if (abs % 2n === 0n) {
|
|
23
|
+
// Even type: single varint value
|
|
24
|
+
await r.u62();
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// Odd type: length-prefixed bytes
|
|
28
|
+
const len = await r.u53();
|
|
29
|
+
await r.read(len);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=properties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"properties.js","sourceRoot":"","sources":["../../src/ietf/properties.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,gEAAgE;AAChE,GAAG;AACH,sEAAsE;AACtE,qEAAqE;AACrE,+BAA+B;AAC/B,GAAG;AACH,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,CAAS,EAAE,OAAoB;IACzD,2CAA2C;IAC3C,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;QAClG,OAAO;IACR,CAAC;IAED,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC/C,QAAQ,GAAG,GAAG,CAAC;QACf,CAAC,EAAE,CAAC;QAEJ,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;YACrB,iCAAiC;YACjC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACP,kCAAkC;YAClC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACF,CAAC;AACF,CAAC","sourcesContent":["import type { Reader } from \"../stream.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n/// Skip 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/// Only present in draft-17+; older drafts don't have Track Properties.\nexport async function skip(r: Reader, version: IetfVersion): Promise<void> {\n\t// Track Properties only exist in draft-17+\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\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\tawait r.u62();\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"]}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type * as Path from "../path";
|
|
2
|
+
import type { Reader, Writer } from "../stream";
|
|
3
|
+
import { type IetfVersion } from "./version";
|
|
4
|
+
export declare class Publish {
|
|
5
|
+
#private;
|
|
6
|
+
static id: number;
|
|
7
|
+
requestId: bigint;
|
|
8
|
+
trackNamespace: Path.Valid;
|
|
9
|
+
trackName: string;
|
|
10
|
+
trackAlias: bigint;
|
|
11
|
+
groupOrder: number;
|
|
12
|
+
contentExists: boolean;
|
|
13
|
+
largest: {
|
|
14
|
+
groupId: bigint;
|
|
15
|
+
objectId: bigint;
|
|
16
|
+
} | undefined;
|
|
17
|
+
forward: boolean;
|
|
18
|
+
constructor({ requestId, trackNamespace, trackName, trackAlias, groupOrder, contentExists, largest, forward, }: {
|
|
19
|
+
requestId: bigint;
|
|
20
|
+
trackNamespace: Path.Valid;
|
|
21
|
+
trackName: string;
|
|
22
|
+
trackAlias: bigint;
|
|
23
|
+
groupOrder: number;
|
|
24
|
+
contentExists: boolean;
|
|
25
|
+
largest: {
|
|
26
|
+
groupId: bigint;
|
|
27
|
+
objectId: bigint;
|
|
28
|
+
} | undefined;
|
|
29
|
+
forward: boolean;
|
|
30
|
+
});
|
|
31
|
+
encode(w: Writer, version: IetfVersion): Promise<void>;
|
|
32
|
+
static decode(r: Reader, version: IetfVersion): Promise<Publish>;
|
|
33
|
+
}
|
|
34
|
+
export declare class PublishOk {
|
|
35
|
+
#private;
|
|
36
|
+
static id: number;
|
|
37
|
+
encode(w: Writer, _version: IetfVersion): Promise<void>;
|
|
38
|
+
static decode(r: Reader, _version: IetfVersion): Promise<PublishOk>;
|
|
39
|
+
}
|
|
40
|
+
export declare class PublishError {
|
|
41
|
+
#private;
|
|
42
|
+
static id: number;
|
|
43
|
+
requestId: bigint;
|
|
44
|
+
errorCode: number;
|
|
45
|
+
reasonPhrase: string;
|
|
46
|
+
constructor({ requestId, errorCode, reasonPhrase, }: {
|
|
47
|
+
requestId: bigint;
|
|
48
|
+
errorCode: number;
|
|
49
|
+
reasonPhrase: string;
|
|
50
|
+
});
|
|
51
|
+
encode(w: Writer, _version: IetfVersion): Promise<void>;
|
|
52
|
+
static decode(r: Reader, _version: IetfVersion): Promise<PublishError>;
|
|
53
|
+
}
|
|
54
|
+
export declare class PublishDone {
|
|
55
|
+
#private;
|
|
56
|
+
static readonly id = 11;
|
|
57
|
+
requestId: bigint | undefined;
|
|
58
|
+
statusCode: number;
|
|
59
|
+
reasonPhrase: string;
|
|
60
|
+
constructor({ requestId, statusCode, reasonPhrase, }: {
|
|
61
|
+
requestId?: bigint;
|
|
62
|
+
statusCode: number;
|
|
63
|
+
reasonPhrase: string;
|
|
64
|
+
});
|
|
65
|
+
encode(w: Writer, version: IetfVersion): Promise<void>;
|
|
66
|
+
static decode(r: Reader, version: IetfVersion): Promise<PublishDone>;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=publish.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/ietf/publish.ts"],"names":[],"mappings":"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"}
|