@moqtap/codec 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-YBSEOSSP.js → chunk-A27S7HW7.js} +5 -1
- package/dist/{chunk-5WFXFLL4.cjs → chunk-FUFTMAQD.cjs} +96 -63
- package/dist/{chunk-2NARXGVA.cjs → chunk-FWISIR26.cjs} +5 -1
- package/dist/{chunk-23YG7F46.js → chunk-IXHOBNXA.js} +117 -17
- package/dist/{chunk-3BSZ55L3.cjs → chunk-NLYTRGXA.cjs} +153 -19
- package/dist/{chunk-GDRGWFEK.cjs → chunk-NPWHHWXT.cjs} +249 -37
- package/dist/{chunk-IQPDRQVC.js → chunk-U2B3B42P.js} +62 -29
- package/dist/{chunk-WNTXF3DE.cjs → chunk-YBZD3DU5.cjs} +127 -27
- package/dist/{chunk-DC4L6ZIT.js → chunk-YTXLWKOR.js} +153 -19
- package/dist/{chunk-YPXLV5YK.js → chunk-Z66WDWHI.js} +249 -37
- package/dist/{codec-qPzfmLNu.d.ts → codec-B2mc2g3i.d.ts} +5 -5
- package/dist/{codec-CTvFtQQI.d.cts → codec-Bvr7rFtj.d.cts} +5 -5
- package/dist/draft14-session.cjs +2 -2
- package/dist/draft14-session.d.cts +4 -4
- package/dist/draft14-session.d.ts +4 -4
- package/dist/draft14-session.js +1 -1
- package/dist/draft14.cjs +4 -4
- package/dist/draft14.d.cts +15 -15
- package/dist/draft14.d.ts +15 -15
- package/dist/draft14.js +3 -3
- package/dist/draft7-session.cjs +2 -2
- package/dist/draft7-session.d.cts +3 -3
- package/dist/draft7-session.d.ts +3 -3
- package/dist/draft7-session.js +1 -1
- package/dist/draft7.cjs +5 -5
- package/dist/draft7.d.cts +10 -10
- package/dist/draft7.d.ts +10 -10
- package/dist/draft7.js +2 -2
- package/dist/index.cjs +6 -6
- package/dist/index.d.cts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js +3 -3
- package/dist/{session-types-B9NIf7_F.d.ts → session-types-DFjMk4HH.d.ts} +20 -20
- package/dist/{session-types-CCo-oA-d.d.cts → session-types-DW1RSZX_.d.cts} +20 -20
- package/dist/session.cjs +4 -4
- package/dist/session.d.cts +3 -3
- package/dist/session.d.ts +3 -3
- package/dist/session.js +2 -2
- package/dist/{types-CIk5W10V.d.ts → types-BTFeKYCb.d.cts} +37 -37
- package/dist/{types-CIk5W10V.d.cts → types-BTFeKYCb.d.ts} +37 -37
- package/dist/{types-ClXELFGN.d.cts → types-DPYE49t0.d.cts} +36 -36
- package/dist/{types-ClXELFGN.d.ts → types-DPYE49t0.d.ts} +36 -36
- package/package.json +7 -7
- package/src/core/buffer-reader.ts +16 -9
- package/src/core/buffer-writer.ts +2 -2
- package/src/core/errors.ts +1 -1
- package/src/core/session-types.ts +28 -41
- package/src/core/types.ts +70 -70
- package/src/drafts/draft07/announce-fsm.ts +1 -1
- package/src/drafts/draft07/codec.ts +195 -86
- package/src/drafts/draft07/index.ts +43 -44
- package/src/drafts/draft07/messages.ts +1 -1
- package/src/drafts/draft07/parameters.ts +2 -2
- package/src/drafts/draft07/rules.ts +68 -37
- package/src/drafts/draft07/session-fsm.ts +330 -117
- package/src/drafts/draft07/session.ts +10 -10
- package/src/drafts/draft07/subscription-fsm.ts +1 -1
- package/src/drafts/draft07/varint.ts +4 -4
- package/src/drafts/draft14/codec.ts +339 -189
- package/src/drafts/draft14/index.ts +103 -108
- package/src/drafts/draft14/messages.ts +61 -61
- package/src/drafts/draft14/rules.ts +77 -34
- package/src/drafts/draft14/session-fsm.ts +458 -146
- package/src/drafts/draft14/session.ts +13 -13
- package/src/drafts/draft14/types.ts +68 -68
- package/src/index.ts +66 -31
- package/src/session.ts +20 -20
|
@@ -38,7 +38,7 @@ export const MESSAGE_TYPE_IDS = {
|
|
|
38
38
|
export const MESSAGE_ID_TO_TYPE = new Map<bigint, string>();
|
|
39
39
|
for (const [name, id] of Object.entries(MESSAGE_TYPE_IDS)) {
|
|
40
40
|
// For duplicate IDs, control stream messages take priority in the reverse map
|
|
41
|
-
if (!MESSAGE_ID_TO_TYPE.has(id) || name !==
|
|
41
|
+
if (!MESSAGE_ID_TO_TYPE.has(id) || name !== "stream_header_subgroup") {
|
|
42
42
|
MESSAGE_ID_TO_TYPE.set(id, name);
|
|
43
43
|
}
|
|
44
44
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BufferReader } from
|
|
2
|
-
import { BufferWriter } from
|
|
1
|
+
import type { BufferReader } from "../../core/buffer-reader.js";
|
|
2
|
+
import { BufferWriter } from "../../core/buffer-writer.js";
|
|
3
3
|
|
|
4
4
|
export function encodeParameters(params: Map<bigint, Uint8Array>): Uint8Array {
|
|
5
5
|
const writer = new BufferWriter();
|
|
@@ -1,66 +1,97 @@
|
|
|
1
|
-
import type { MoqtMessageType } from
|
|
1
|
+
import type { MoqtMessageType } from "../../core/types.js";
|
|
2
2
|
|
|
3
3
|
export const CONTROL_MESSAGES: ReadonlySet<MoqtMessageType> = new Set([
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
"client_setup",
|
|
5
|
+
"server_setup",
|
|
6
|
+
"subscribe",
|
|
7
|
+
"subscribe_ok",
|
|
8
|
+
"subscribe_error",
|
|
9
|
+
"subscribe_done",
|
|
10
|
+
"subscribe_update",
|
|
11
|
+
"unsubscribe",
|
|
12
|
+
"announce",
|
|
13
|
+
"announce_ok",
|
|
14
|
+
"announce_error",
|
|
15
|
+
"announce_cancel",
|
|
16
|
+
"unannounce",
|
|
17
|
+
"track_status_request",
|
|
18
|
+
"track_status",
|
|
19
|
+
"goaway",
|
|
20
|
+
"subscribe_announces",
|
|
21
|
+
"subscribe_announces_ok",
|
|
22
|
+
"subscribe_announces_error",
|
|
23
|
+
"unsubscribe_announces",
|
|
24
|
+
"max_subscribe_id",
|
|
25
|
+
"fetch",
|
|
26
|
+
"fetch_ok",
|
|
27
|
+
"fetch_error",
|
|
28
|
+
"fetch_cancel",
|
|
12
29
|
]);
|
|
13
30
|
|
|
14
31
|
export const DATA_MESSAGES: ReadonlySet<MoqtMessageType> = new Set([
|
|
15
|
-
|
|
16
|
-
|
|
32
|
+
"object_stream",
|
|
33
|
+
"object_datagram",
|
|
34
|
+
"stream_header_track",
|
|
35
|
+
"stream_header_group",
|
|
36
|
+
"stream_header_subgroup",
|
|
17
37
|
]);
|
|
18
38
|
|
|
19
39
|
// Messages that only a client can send
|
|
20
40
|
export const CLIENT_ONLY_MESSAGES: ReadonlySet<MoqtMessageType> = new Set([
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
41
|
+
"client_setup",
|
|
42
|
+
"subscribe",
|
|
43
|
+
"subscribe_update",
|
|
44
|
+
"unsubscribe",
|
|
45
|
+
"announce",
|
|
46
|
+
"unannounce",
|
|
47
|
+
"subscribe_announces",
|
|
48
|
+
"unsubscribe_announces",
|
|
49
|
+
"max_subscribe_id",
|
|
50
|
+
"fetch",
|
|
51
|
+
"fetch_cancel",
|
|
52
|
+
"track_status_request",
|
|
28
53
|
]);
|
|
29
54
|
|
|
30
55
|
// Messages that only a server can send
|
|
31
56
|
export const SERVER_ONLY_MESSAGES: ReadonlySet<MoqtMessageType> = new Set([
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
57
|
+
"server_setup",
|
|
58
|
+
"subscribe_ok",
|
|
59
|
+
"subscribe_error",
|
|
60
|
+
"subscribe_done",
|
|
61
|
+
"announce_ok",
|
|
62
|
+
"announce_error",
|
|
63
|
+
"announce_cancel",
|
|
64
|
+
"subscribe_announces_ok",
|
|
65
|
+
"subscribe_announces_error",
|
|
66
|
+
"max_subscribe_id",
|
|
67
|
+
"fetch_ok",
|
|
68
|
+
"fetch_error",
|
|
69
|
+
"track_status",
|
|
39
70
|
]);
|
|
40
71
|
|
|
41
72
|
// Messages legal in each session phase -- for outbound validation
|
|
42
|
-
export function getLegalOutgoing(phase: string, role:
|
|
73
|
+
export function getLegalOutgoing(phase: string, role: "client" | "server"): Set<MoqtMessageType> {
|
|
43
74
|
const legal = new Set<MoqtMessageType>();
|
|
44
75
|
|
|
45
76
|
switch (phase) {
|
|
46
|
-
case
|
|
47
|
-
if (role ===
|
|
77
|
+
case "idle":
|
|
78
|
+
if (role === "client") legal.add("client_setup");
|
|
48
79
|
break;
|
|
49
|
-
case
|
|
50
|
-
if (role ===
|
|
80
|
+
case "setup":
|
|
81
|
+
if (role === "server") legal.add("server_setup");
|
|
51
82
|
break;
|
|
52
|
-
case
|
|
83
|
+
case "ready": {
|
|
53
84
|
// Both roles can send goaway
|
|
54
|
-
legal.add(
|
|
55
|
-
const roleMessages = role ===
|
|
85
|
+
legal.add("goaway");
|
|
86
|
+
const roleMessages = role === "client" ? CLIENT_ONLY_MESSAGES : SERVER_ONLY_MESSAGES;
|
|
56
87
|
for (const msg of roleMessages) {
|
|
57
|
-
if (msg !==
|
|
88
|
+
if (msg !== "client_setup" && msg !== "server_setup") {
|
|
58
89
|
legal.add(msg);
|
|
59
90
|
}
|
|
60
91
|
}
|
|
61
92
|
break;
|
|
62
93
|
}
|
|
63
|
-
case
|
|
94
|
+
case "draining":
|
|
64
95
|
// Limited set during draining - can still finish active operations
|
|
65
96
|
break;
|
|
66
97
|
}
|
|
@@ -68,8 +99,8 @@ export function getLegalOutgoing(phase: string, role: 'client' | 'server'): Set<
|
|
|
68
99
|
return legal;
|
|
69
100
|
}
|
|
70
101
|
|
|
71
|
-
export function getLegalIncoming(phase: string, role:
|
|
102
|
+
export function getLegalIncoming(phase: string, role: "client" | "server"): Set<MoqtMessageType> {
|
|
72
103
|
// Incoming from remote = the other role's outgoing
|
|
73
|
-
const remoteRole = role ===
|
|
104
|
+
const remoteRole = role === "client" ? "server" : "client";
|
|
74
105
|
return getLegalOutgoing(phase, remoteRole);
|
|
75
106
|
}
|