@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.
Files changed (274) hide show
  1. package/README.md +70 -0
  2. package/announced.d.ts +45 -0
  3. package/announced.d.ts.map +1 -0
  4. package/announced.js +70 -0
  5. package/announced.js.map +1 -0
  6. package/bandwidth.d.ts +11 -0
  7. package/bandwidth.d.ts.map +1 -0
  8. package/bandwidth.js +7 -0
  9. package/bandwidth.js.map +1 -0
  10. package/broadcast.d.ts +39 -0
  11. package/broadcast.d.ts.map +1 -0
  12. package/broadcast.js +76 -0
  13. package/broadcast.js.map +1 -0
  14. package/connection/accept.d.ts +15 -0
  15. package/connection/accept.d.ts.map +1 -0
  16. package/connection/accept.js +137 -0
  17. package/connection/accept.js.map +1 -0
  18. package/connection/cert.test.d.ts +2 -0
  19. package/connection/cert.test.d.ts.map +1 -0
  20. package/connection/cert.test.js +26 -0
  21. package/connection/cert.test.js.map +1 -0
  22. package/connection/connect.d.ts +37 -0
  23. package/connection/connect.d.ts.map +1 -0
  24. package/connection/connect.js +348 -0
  25. package/connection/connect.js.map +1 -0
  26. package/connection/established.d.ts +30 -0
  27. package/connection/established.d.ts.map +1 -0
  28. package/connection/established.js +3 -0
  29. package/connection/established.js.map +1 -0
  30. package/connection/handshake.d.ts +10 -0
  31. package/connection/handshake.d.ts.map +1 -0
  32. package/connection/handshake.js +48 -0
  33. package/connection/handshake.js.map +1 -0
  34. package/connection/index.d.ts +5 -0
  35. package/connection/index.d.ts.map +1 -0
  36. package/connection/index.js +6 -0
  37. package/connection/index.js.map +1 -0
  38. package/connection/reload.d.ts +47 -0
  39. package/connection/reload.d.ts.map +1 -0
  40. package/connection/reload.js +137 -0
  41. package/connection/reload.js.map +1 -0
  42. package/group.d.ts +66 -0
  43. package/group.d.ts.map +1 -0
  44. package/group.js +135 -0
  45. package/group.js.map +1 -0
  46. package/group.test.d.ts +2 -0
  47. package/group.test.d.ts.map +1 -0
  48. package/group.test.js +66 -0
  49. package/group.test.js.map +1 -0
  50. package/ietf/adapter.d.ts +65 -0
  51. package/ietf/adapter.d.ts.map +1 -0
  52. package/ietf/adapter.js +626 -0
  53. package/ietf/adapter.js.map +1 -0
  54. package/ietf/connection.d.ts +65 -0
  55. package/ietf/connection.d.ts.map +1 -0
  56. package/ietf/connection.js +248 -0
  57. package/ietf/connection.js.map +1 -0
  58. package/ietf/control.d.ts +135 -0
  59. package/ietf/control.d.ts.map +1 -0
  60. package/ietf/control.js +242 -0
  61. package/ietf/control.js.map +1 -0
  62. package/ietf/fetch.d.ts +64 -0
  63. package/ietf/fetch.d.ts.map +1 -0
  64. package/ietf/fetch.js +100 -0
  65. package/ietf/fetch.js.map +1 -0
  66. package/ietf/goaway.d.ts +15 -0
  67. package/ietf/goaway.d.ts.map +1 -0
  68. package/ietf/goaway.js +34 -0
  69. package/ietf/goaway.js.map +1 -0
  70. package/ietf/ietf.test.d.ts +2 -0
  71. package/ietf/ietf.test.d.ts.map +1 -0
  72. package/ietf/ietf.test.js +873 -0
  73. package/ietf/ietf.test.js.map +1 -0
  74. package/ietf/index.d.ts +18 -0
  75. package/ietf/index.d.ts.map +1 -0
  76. package/ietf/index.js +19 -0
  77. package/ietf/index.js.map +1 -0
  78. package/ietf/message.d.ts +4 -0
  79. package/ietf/message.d.ts.map +1 -0
  80. package/ietf/message.js +54 -0
  81. package/ietf/message.js.map +1 -0
  82. package/ietf/namespace.d.ts +5 -0
  83. package/ietf/namespace.d.ts.map +1 -0
  84. package/ietf/namespace.js +27 -0
  85. package/ietf/namespace.js.map +1 -0
  86. package/ietf/object.d.ts +40 -0
  87. package/ietf/object.d.ts.map +1 -0
  88. package/ietf/object.js +160 -0
  89. package/ietf/object.js.map +1 -0
  90. package/ietf/parameters.d.ts +56 -0
  91. package/ietf/parameters.d.ts.map +1 -0
  92. package/ietf/parameters.js +337 -0
  93. package/ietf/parameters.js.map +1 -0
  94. package/ietf/properties.d.ts +4 -0
  95. package/ietf/properties.d.ts.map +1 -0
  96. package/ietf/properties.js +33 -0
  97. package/ietf/properties.js.map +1 -0
  98. package/ietf/publish.d.ts +68 -0
  99. package/ietf/publish.d.ts.map +1 -0
  100. package/ietf/publish.js +192 -0
  101. package/ietf/publish.js.map +1 -0
  102. package/ietf/publish_namespace.d.ts +68 -0
  103. package/ietf/publish_namespace.d.ts.map +1 -0
  104. package/ietf/publish_namespace.js +176 -0
  105. package/ietf/publish_namespace.js.map +1 -0
  106. package/ietf/publisher.d.ts +50 -0
  107. package/ietf/publisher.d.ts.map +1 -0
  108. package/ietf/publisher.js +330 -0
  109. package/ietf/publisher.js.map +1 -0
  110. package/ietf/request.d.ts +52 -0
  111. package/ietf/request.d.ts.map +1 -0
  112. package/ietf/request.js +119 -0
  113. package/ietf/request.js.map +1 -0
  114. package/ietf/setup.d.ts +38 -0
  115. package/ietf/setup.d.ts.map +1 -0
  116. package/ietf/setup.js +129 -0
  117. package/ietf/setup.js.map +1 -0
  118. package/ietf/subscribe.d.ts +66 -0
  119. package/ietf/subscribe.d.ts.map +1 -0
  120. package/ietf/subscribe.js +276 -0
  121. package/ietf/subscribe.js.map +1 -0
  122. package/ietf/subscribe_namespace.d.ts +101 -0
  123. package/ietf/subscribe_namespace.d.ts.map +1 -0
  124. package/ietf/subscribe_namespace.js +256 -0
  125. package/ietf/subscribe_namespace.js.map +1 -0
  126. package/ietf/subscriber.d.ts +53 -0
  127. package/ietf/subscriber.d.ts.map +1 -0
  128. package/ietf/subscriber.js +404 -0
  129. package/ietf/subscriber.js.map +1 -0
  130. package/ietf/track.d.ts +40 -0
  131. package/ietf/track.d.ts.map +1 -0
  132. package/ietf/track.js +108 -0
  133. package/ietf/track.js.map +1 -0
  134. package/ietf/version.d.ts +56 -0
  135. package/ietf/version.d.ts.map +1 -0
  136. package/ietf/version.js +63 -0
  137. package/ietf/version.js.map +1 -0
  138. package/index.d.ts +22 -0
  139. package/index.d.ts.map +1 -0
  140. package/index.js +23 -0
  141. package/index.js.map +1 -0
  142. package/integration.test.d.ts +2 -0
  143. package/integration.test.d.ts.map +1 -0
  144. package/integration.test.js +90 -0
  145. package/integration.test.js.map +1 -0
  146. package/lite/announce.d.ts +35 -0
  147. package/lite/announce.d.ts.map +1 -0
  148. package/lite/announce.js +166 -0
  149. package/lite/announce.js.map +1 -0
  150. package/lite/connection.d.ts +47 -0
  151. package/lite/connection.d.ts.map +1 -0
  152. package/lite/connection.js +247 -0
  153. package/lite/connection.js.map +1 -0
  154. package/lite/fetch.d.ts +14 -0
  155. package/lite/fetch.d.ts.map +1 -0
  156. package/lite/fetch.js +47 -0
  157. package/lite/fetch.js.map +1 -0
  158. package/lite/goaway.d.ts +10 -0
  159. package/lite/goaway.d.ts.map +1 -0
  160. package/lite/goaway.js +37 -0
  161. package/lite/goaway.js.map +1 -0
  162. package/lite/group.d.ts +18 -0
  163. package/lite/group.d.ts.map +1 -0
  164. package/lite/group.js +46 -0
  165. package/lite/group.js.map +1 -0
  166. package/lite/index.d.ts +11 -0
  167. package/lite/index.d.ts.map +1 -0
  168. package/lite/index.js +12 -0
  169. package/lite/index.js.map +1 -0
  170. package/lite/message.d.ts +5 -0
  171. package/lite/message.d.ts.map +1 -0
  172. package/lite/message.js +51 -0
  173. package/lite/message.js.map +1 -0
  174. package/lite/origin.d.ts +25 -0
  175. package/lite/origin.d.ts.map +1 -0
  176. package/lite/origin.js +35 -0
  177. package/lite/origin.js.map +1 -0
  178. package/lite/probe.d.ts +12 -0
  179. package/lite/probe.d.ts.map +1 -0
  180. package/lite/probe.js +60 -0
  181. package/lite/probe.js.map +1 -0
  182. package/lite/publisher.d.ts +63 -0
  183. package/lite/publisher.d.ts.map +1 -0
  184. package/lite/publisher.js +350 -0
  185. package/lite/publisher.js.map +1 -0
  186. package/lite/session.d.ts +36 -0
  187. package/lite/session.d.ts.map +1 -0
  188. package/lite/session.js +130 -0
  189. package/lite/session.js.map +1 -0
  190. package/lite/setup.d.ts +18 -0
  191. package/lite/setup.d.ts.map +1 -0
  192. package/lite/setup.js +55 -0
  193. package/lite/setup.js.map +1 -0
  194. package/lite/stream.d.ts +23 -0
  195. package/lite/stream.d.ts.map +1 -0
  196. package/lite/stream.js +20 -0
  197. package/lite/stream.js.map +1 -0
  198. package/lite/subscribe.d.ts +111 -0
  199. package/lite/subscribe.d.ts.map +1 -0
  200. package/lite/subscribe.js +341 -0
  201. package/lite/subscribe.js.map +1 -0
  202. package/lite/subscriber.d.ts +80 -0
  203. package/lite/subscriber.d.ts.map +1 -0
  204. package/lite/subscriber.js +316 -0
  205. package/lite/subscriber.js.map +1 -0
  206. package/lite/track.d.ts +38 -0
  207. package/lite/track.d.ts.map +1 -0
  208. package/lite/track.js +81 -0
  209. package/lite/track.js.map +1 -0
  210. package/lite/track.test.d.ts +2 -0
  211. package/lite/track.test.d.ts.map +1 -0
  212. package/lite/track.test.js +53 -0
  213. package/lite/track.test.js.map +1 -0
  214. package/lite/version.d.ts +16 -0
  215. package/lite/version.d.ts.map +1 -0
  216. package/lite/version.js +41 -0
  217. package/lite/version.js.map +1 -0
  218. package/mock.d.ts +16 -0
  219. package/mock.d.ts.map +1 -0
  220. package/mock.js +154 -0
  221. package/mock.js.map +1 -0
  222. package/package.json +27 -0
  223. package/path.d.ts +111 -0
  224. package/path.d.ts.map +1 -0
  225. package/path.js +133 -0
  226. package/path.js.map +1 -0
  227. package/path.test.d.ts +2 -0
  228. package/path.test.d.ts.map +1 -0
  229. package/path.test.js +169 -0
  230. package/path.test.js.map +1 -0
  231. package/stream.d.ts +57 -0
  232. package/stream.d.ts.map +1 -0
  233. package/stream.js +326 -0
  234. package/stream.js.map +1 -0
  235. package/stream.test.d.ts +2 -0
  236. package/stream.test.d.ts.map +1 -0
  237. package/stream.test.js +210 -0
  238. package/stream.test.js.map +1 -0
  239. package/time.d.ts +109 -0
  240. package/time.d.ts.map +1 -0
  241. package/time.js +94 -0
  242. package/time.js.map +1 -0
  243. package/track.d.ts +85 -0
  244. package/track.d.ts.map +1 -0
  245. package/track.js +227 -0
  246. package/track.js.map +1 -0
  247. package/track.test.d.ts +2 -0
  248. package/track.test.d.ts.map +1 -0
  249. package/track.test.js +56 -0
  250. package/track.test.js.map +1 -0
  251. package/util/error.d.ts +3 -0
  252. package/util/error.d.ts.map +1 -0
  253. package/util/error.js +9 -0
  254. package/util/error.js.map +1 -0
  255. package/util/hex.d.ts +3 -0
  256. package/util/hex.d.ts.map +1 -0
  257. package/util/hex.js +16 -0
  258. package/util/hex.js.map +1 -0
  259. package/util/index.d.ts +2 -0
  260. package/util/index.d.ts.map +1 -0
  261. package/util/index.js +3 -0
  262. package/util/index.js.map +1 -0
  263. package/varint.d.ts +36 -0
  264. package/varint.d.ts.map +1 -0
  265. package/varint.js +288 -0
  266. package/varint.js.map +1 -0
  267. package/varint.test.d.ts +2 -0
  268. package/varint.test.d.ts.map +1 -0
  269. package/varint.test.js +106 -0
  270. package/varint.test.js.map +1 -0
  271. package/zod.d.ts +13 -0
  272. package/zod.d.ts.map +1 -0
  273. package/zod.js +19 -0
  274. package/zod.js.map +1 -0
@@ -0,0 +1,130 @@
1
+ /* @ts-self-types="./session.d.ts" */
2
+ import * as Message from "./message.js";
3
+ import { Version } from "./version.js";
4
+ export class Extensions {
5
+ entries;
6
+ constructor() {
7
+ this.entries = new Map();
8
+ }
9
+ set(id, value) {
10
+ this.entries.set(id, value);
11
+ }
12
+ get(id) {
13
+ return this.entries.get(id);
14
+ }
15
+ remove(id) {
16
+ const value = this.entries.get(id);
17
+ this.entries.delete(id);
18
+ return value;
19
+ }
20
+ async encode(w) {
21
+ await w.u53(this.entries.size);
22
+ for (const [id, value] of this.entries) {
23
+ await w.u62(id);
24
+ await w.u53(value.length);
25
+ await w.write(value);
26
+ }
27
+ }
28
+ static async decode(r) {
29
+ const count = await r.u53();
30
+ const params = new Extensions();
31
+ for (let i = 0; i < count; i++) {
32
+ const id = await r.u62();
33
+ const size = await r.u53();
34
+ const value = await r.read(size);
35
+ if (params.entries.has(id)) {
36
+ throw new Error(`duplicate parameter id: ${id.toString()}`);
37
+ }
38
+ params.entries.set(id, value);
39
+ }
40
+ return params;
41
+ }
42
+ }
43
+ export class SessionClient {
44
+ versions;
45
+ extensions;
46
+ constructor(versions, extensions = new Extensions()) {
47
+ this.versions = versions;
48
+ this.extensions = extensions;
49
+ }
50
+ async #encode(w) {
51
+ await w.u53(this.versions.length);
52
+ for (const v of this.versions) {
53
+ await w.u53(v);
54
+ }
55
+ await this.extensions.encode(w);
56
+ }
57
+ static async #decode(r) {
58
+ const versions = [];
59
+ const count = await r.u53();
60
+ for (let i = 0; i < count; i++) {
61
+ versions.push(await r.u53());
62
+ }
63
+ const extensions = await Extensions.decode(r);
64
+ return new SessionClient(versions, extensions);
65
+ }
66
+ async encode(w) {
67
+ return Message.encode(w, this.#encode.bind(this));
68
+ }
69
+ static async decode(r) {
70
+ return Message.decode(r, SessionClient.#decode);
71
+ }
72
+ }
73
+ export class SessionServer {
74
+ version;
75
+ extensions;
76
+ constructor(version, extensions = new Extensions()) {
77
+ this.version = version;
78
+ this.extensions = extensions;
79
+ }
80
+ async #encode(w) {
81
+ await w.u53(this.version);
82
+ await this.extensions.encode(w);
83
+ }
84
+ static async #decode(r) {
85
+ const version = await r.u53();
86
+ const extensions = await Extensions.decode(r);
87
+ return new SessionServer(version, extensions);
88
+ }
89
+ async encode(w) {
90
+ return Message.encode(w, this.#encode.bind(this));
91
+ }
92
+ static async decode(r) {
93
+ return Message.decode(r, SessionServer.#decode);
94
+ }
95
+ }
96
+ export class SessionInfo {
97
+ bitrate;
98
+ constructor(bitrate) {
99
+ this.bitrate = bitrate;
100
+ }
101
+ static #guard(version) {
102
+ switch (version) {
103
+ case Version.DRAFT_01:
104
+ case Version.DRAFT_02:
105
+ break;
106
+ default:
107
+ throw new Error("session info not supported for this version");
108
+ }
109
+ }
110
+ async #encode(w) {
111
+ await w.u53(this.bitrate);
112
+ }
113
+ static async #decode(r) {
114
+ const bitrate = await r.u53();
115
+ return new SessionInfo(bitrate);
116
+ }
117
+ async encode(w, version) {
118
+ SessionInfo.#guard(version);
119
+ return Message.encode(w, this.#encode.bind(this));
120
+ }
121
+ static async decode(r, version) {
122
+ SessionInfo.#guard(version);
123
+ return Message.decode(r, SessionInfo.#decode);
124
+ }
125
+ static async decodeMaybe(r, version) {
126
+ SessionInfo.#guard(version);
127
+ return Message.decodeMaybe(r, SessionInfo.#decode);
128
+ }
129
+ }
130
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/lite/session.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Reader, Writer } from \"../stream.ts\";\nimport * as Message from \"./message.ts\";\nimport { Version } from \"./version.ts\";\n\nexport class Extensions {\n\tentries: Map<bigint, Uint8Array>;\n\n\tconstructor() {\n\t\tthis.entries = new Map();\n\t}\n\n\tset(id: bigint, value: Uint8Array) {\n\t\tthis.entries.set(id, value);\n\t}\n\n\tget(id: bigint): Uint8Array | undefined {\n\t\treturn this.entries.get(id);\n\t}\n\n\tremove(id: bigint): Uint8Array | undefined {\n\t\tconst value = this.entries.get(id);\n\t\tthis.entries.delete(id);\n\t\treturn value;\n\t}\n\n\tasync encode(w: Writer) {\n\t\tawait w.u53(this.entries.size);\n\t\tfor (const [id, value] of this.entries) {\n\t\t\tawait w.u62(id);\n\t\t\tawait w.u53(value.length);\n\t\t\tawait w.write(value);\n\t\t}\n\t}\n\n\tstatic async decode(r: Reader): Promise<Extensions> {\n\t\tconst count = await r.u53();\n\t\tconst params = new Extensions();\n\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tconst id = await r.u62();\n\t\t\tconst size = await r.u53();\n\t\t\tconst value = await r.read(size);\n\n\t\t\tif (params.entries.has(id)) {\n\t\t\t\tthrow new Error(`duplicate parameter id: ${id.toString()}`);\n\t\t\t}\n\n\t\t\tparams.entries.set(id, value);\n\t\t}\n\n\t\treturn params;\n\t}\n}\n\nexport class SessionClient {\n\tversions: number[];\n\textensions: Extensions;\n\n\tconstructor(versions: number[], extensions = new Extensions()) {\n\t\tthis.versions = versions;\n\t\tthis.extensions = extensions;\n\t}\n\n\tasync #encode(w: Writer) {\n\t\tawait w.u53(this.versions.length);\n\t\tfor (const v of this.versions) {\n\t\t\tawait w.u53(v);\n\t\t}\n\n\t\tawait this.extensions.encode(w);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<SessionClient> {\n\t\tconst versions: number[] = [];\n\t\tconst count = await r.u53();\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tversions.push(await r.u53());\n\t\t}\n\n\t\tconst extensions = await Extensions.decode(r);\n\t\treturn new SessionClient(versions, extensions);\n\t}\n\n\tasync encode(w: Writer): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader): Promise<SessionClient> {\n\t\treturn Message.decode(r, SessionClient.#decode);\n\t}\n}\n\nexport class SessionServer {\n\tversion: number;\n\textensions: Extensions;\n\n\tconstructor(version: number, extensions = new Extensions()) {\n\t\tthis.version = version;\n\t\tthis.extensions = extensions;\n\t}\n\n\tasync #encode(w: Writer) {\n\t\tawait w.u53(this.version);\n\t\tawait this.extensions.encode(w);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<SessionServer> {\n\t\tconst version = await r.u53();\n\t\tconst extensions = await Extensions.decode(r);\n\t\treturn new SessionServer(version, extensions);\n\t}\n\n\tasync encode(w: Writer): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader): Promise<SessionServer> {\n\t\treturn Message.decode(r, SessionServer.#decode);\n\t}\n}\n\nexport class SessionInfo {\n\tbitrate: number;\n\n\tconstructor(bitrate: number) {\n\t\tthis.bitrate = bitrate;\n\t}\n\n\tstatic #guard(version: Version) {\n\t\tswitch (version) {\n\t\t\tcase Version.DRAFT_01:\n\t\t\tcase Version.DRAFT_02:\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"session info not supported for this version\");\n\t\t}\n\t}\n\n\tasync #encode(w: Writer) {\n\t\tawait w.u53(this.bitrate);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<SessionInfo> {\n\t\tconst bitrate = await r.u53();\n\t\treturn new SessionInfo(bitrate);\n\t}\n\n\tasync encode(w: Writer, version: Version): Promise<void> {\n\t\tSessionInfo.#guard(version);\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, version: Version): Promise<SessionInfo> {\n\t\tSessionInfo.#guard(version);\n\t\treturn Message.decode(r, SessionInfo.#decode);\n\t}\n\n\tstatic async decodeMaybe(r: Reader, version: Version): Promise<SessionInfo | undefined> {\n\t\tSessionInfo.#guard(version);\n\t\treturn Message.decodeMaybe(r, SessionInfo.#decode);\n\t}\n}\n"]}
@@ -0,0 +1,18 @@
1
+ import type { Reader, Writer } from "../stream";
2
+ import { type Version } from "./version";
3
+ /**
4
+ * The moq-lite-05 SETUP message, sent once per endpoint on a unidirectional Setup stream.
5
+ *
6
+ * The browser conveys its path via the WebTransport URL, so it never sends a Path
7
+ * parameter; this class still parses one for completeness when reading a peer's SETUP.
8
+ */
9
+ export declare class Setup {
10
+ #private;
11
+ path?: string;
12
+ constructor(props?: {
13
+ path?: string;
14
+ });
15
+ encode(w: Writer, version: Version): Promise<void>;
16
+ static decode(r: Reader, version: Version): Promise<Setup>;
17
+ }
18
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/lite/setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAK5D;;;;;GAKG;AACH,qBAAa,KAAK;;IAEjB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,YAAY,KAAK,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO,EAExC;IA6BK,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvD;IAED,OAAa,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAG/D;CACD"}
package/lite/setup.js ADDED
@@ -0,0 +1,55 @@
1
+ /* @ts-self-types="./setup.d.ts" */
2
+ import * as Message from "./message.js";
3
+ import { hasSetupStream } from "./version.js";
4
+ /// Setup parameter ID for the request Path (client-only, on URI-less transports).
5
+ const PARAM_PATH = 0x2;
6
+ /**
7
+ * The moq-lite-05 SETUP message, sent once per endpoint on a unidirectional Setup stream.
8
+ *
9
+ * The browser conveys its path via the WebTransport URL, so it never sends a Path
10
+ * parameter; this class still parses one for completeness when reading a peer's SETUP.
11
+ */
12
+ export class Setup {
13
+ /// The request path, only sent on transport bindings without a request URI.
14
+ path;
15
+ constructor(props = {}) {
16
+ this.path = props.path;
17
+ }
18
+ async #encode(w) {
19
+ if (this.path !== undefined) {
20
+ await w.u53(1); // parameter count
21
+ const value = new TextEncoder().encode(this.path);
22
+ await w.u53(PARAM_PATH);
23
+ await w.u53(value.byteLength);
24
+ await w.write(value);
25
+ }
26
+ else {
27
+ await w.u53(0); // no parameters
28
+ }
29
+ }
30
+ static async #decode(r) {
31
+ const count = await r.u53();
32
+ let path;
33
+ for (let i = 0; i < count; i++) {
34
+ const id = await r.u53();
35
+ const len = await r.u53();
36
+ const value = await r.read(len);
37
+ // Unknown parameters are ignored so new ones stay backward compatible.
38
+ if (id === PARAM_PATH) {
39
+ path = new TextDecoder().decode(value);
40
+ }
41
+ }
42
+ return new Setup({ path });
43
+ }
44
+ async encode(w, version) {
45
+ if (!hasSetupStream(version))
46
+ throw new Error("SETUP requires moq-lite-05+");
47
+ return Message.encode(w, this.#encode.bind(this));
48
+ }
49
+ static async decode(r, version) {
50
+ if (!hasSetupStream(version))
51
+ throw new Error("SETUP requires moq-lite-05+");
52
+ return Message.decode(r, Setup.#decode);
53
+ }
54
+ }
55
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/lite/setup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,cAAc,EAAgB,MAAM,cAAc,CAAC;AAE5D,kFAAkF;AAClF,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB;;;;;GAKG;AACH,MAAM,OAAO,KAAK;IACjB,4EAA4E;IAC5E,IAAI,CAAU;IAEd,YAAY,KAAK,GAAsB,EAAE;QACxC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS;QACtB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB;YAClC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC9B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACjC,CAAC;IACF,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAS;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,IAAwB,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChC,uEAAuE;YACvE,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;gBACvB,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;QACF,CAAC;QACD,OAAO,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,OAAgB;QACvC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7E,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,OAAgB;QAC9C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7E,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;CACD","sourcesContent":["import type { Reader, Writer } from \"../stream.ts\";\nimport * as Message from \"./message.ts\";\nimport { hasSetupStream, type Version } from \"./version.ts\";\n\n/// Setup parameter ID for the request Path (client-only, on URI-less transports).\nconst PARAM_PATH = 0x2;\n\n/**\n * The moq-lite-05 SETUP message, sent once per endpoint on a unidirectional Setup stream.\n *\n * The browser conveys its path via the WebTransport URL, so it never sends a Path\n * parameter; this class still parses one for completeness when reading a peer's SETUP.\n */\nexport class Setup {\n\t/// The request path, only sent on transport bindings without a request URI.\n\tpath?: string;\n\n\tconstructor(props: { path?: string } = {}) {\n\t\tthis.path = props.path;\n\t}\n\n\tasync #encode(w: Writer) {\n\t\tif (this.path !== undefined) {\n\t\t\tawait w.u53(1); // parameter count\n\t\t\tconst value = new TextEncoder().encode(this.path);\n\t\t\tawait w.u53(PARAM_PATH);\n\t\t\tawait w.u53(value.byteLength);\n\t\t\tawait w.write(value);\n\t\t} else {\n\t\t\tawait w.u53(0); // no parameters\n\t\t}\n\t}\n\n\tstatic async #decode(r: Reader): Promise<Setup> {\n\t\tconst count = await r.u53();\n\t\tlet path: string | undefined;\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tconst id = await r.u53();\n\t\t\tconst len = await r.u53();\n\t\t\tconst value = await r.read(len);\n\t\t\t// Unknown parameters are ignored so new ones stay backward compatible.\n\t\t\tif (id === PARAM_PATH) {\n\t\t\t\tpath = new TextDecoder().decode(value);\n\t\t\t}\n\t\t}\n\t\treturn new Setup({ path });\n\t}\n\n\tasync encode(w: Writer, version: Version): Promise<void> {\n\t\tif (!hasSetupStream(version)) throw new Error(\"SETUP requires moq-lite-05+\");\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, version: Version): Promise<Setup> {\n\t\tif (!hasSetupStream(version)) throw new Error(\"SETUP requires moq-lite-05+\");\n\t\treturn Message.decode(r, Setup.#decode);\n\t}\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import type { AnnounceInterest } from "./announce";
2
+ import type { Goaway } from "./goaway";
3
+ import type { Group } from "./group";
4
+ import type { SessionClient } from "./session";
5
+ import type { Subscribe } from "./subscribe";
6
+ export type StreamBi = SessionClient | AnnounceInterest | Subscribe | Goaway;
7
+ export type StreamUni = Group;
8
+ export declare const StreamId: {
9
+ readonly Session: 0;
10
+ readonly Announce: 1;
11
+ readonly Subscribe: 2;
12
+ readonly Fetch: 3;
13
+ readonly Probe: 4;
14
+ readonly Goaway: 5;
15
+ readonly Track: 6;
16
+ readonly ClientCompat: 32;
17
+ readonly ServerCompat: 33;
18
+ };
19
+ export declare const DataId: {
20
+ readonly Group: 0;
21
+ readonly Setup: 1;
22
+ };
23
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/lite/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,gBAAgB,GAAG,SAAS,GAAG,MAAM,CAAC;AAC7E,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC;AAE9B,eAAO,MAAM,QAAQ;aACpB,OAAO,EAAE,CAAC;aACV,QAAQ,EAAE,CAAC;aACX,SAAS,EAAE,CAAC;aACZ,KAAK,EAAE,CAAC;aACR,KAAK,EAAE,CAAC;aACR,MAAM,EAAE,CAAC;aAET,KAAK,EAAE,CAAC;aACR,YAAY,EAAE,EAAI;aAClB,YAAY,EAAE,EAAI;CACT,CAAC;AAGX,eAAO,MAAM,MAAM;aAClB,KAAK,EAAE,CAAC;aAER,KAAK,EAAE,CAAC;CACC,CAAC"}
package/lite/stream.js ADDED
@@ -0,0 +1,20 @@
1
+ /* @ts-self-types="./stream.d.ts" */
2
+ export const StreamId = {
3
+ Session: 0,
4
+ Announce: 1,
5
+ Subscribe: 2,
6
+ Fetch: 3,
7
+ Probe: 4,
8
+ Goaway: 5,
9
+ /// Queries a track's immutable publisher properties via TRACK/TRACK_INFO (moq-lite-05+).
10
+ Track: 6,
11
+ ClientCompat: 0x20,
12
+ ServerCompat: 0x21,
13
+ };
14
+ /// Unidirectional (data) stream types.
15
+ export const DataId = {
16
+ Group: 0,
17
+ /// Carries a single SETUP message (moq-lite-05+).
18
+ Setup: 1,
19
+ };
20
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/lite/stream.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACvB,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,CAAC;IACZ,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,yFAAyF;IACzF,KAAK,EAAE,CAAC;IACR,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;CACT,CAAC;AAEX,uCAAuC;AACvC,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB,KAAK,EAAE,CAAC;IACR,kDAAkD;IAClD,KAAK,EAAE,CAAC;CACC,CAAC","sourcesContent":["import type { AnnounceInterest } from \"./announce.ts\";\nimport type { Goaway } from \"./goaway.ts\";\nimport type { Group } from \"./group.ts\";\nimport type { SessionClient } from \"./session.ts\";\nimport type { Subscribe } from \"./subscribe.ts\";\n\nexport type StreamBi = SessionClient | AnnounceInterest | Subscribe | Goaway;\nexport type StreamUni = Group;\n\nexport const StreamId = {\n\tSession: 0,\n\tAnnounce: 1,\n\tSubscribe: 2,\n\tFetch: 3,\n\tProbe: 4,\n\tGoaway: 5,\n\t/// Queries a track's immutable publisher properties via TRACK/TRACK_INFO (moq-lite-05+).\n\tTrack: 6,\n\tClientCompat: 0x20,\n\tServerCompat: 0x21,\n} as const;\n\n/// Unidirectional (data) stream types.\nexport const DataId = {\n\tGroup: 0,\n\t/// Carries a single SETUP message (moq-lite-05+).\n\tSetup: 1,\n} as const;\n"]}
@@ -0,0 +1,111 @@
1
+ import * as Path from "../path";
2
+ import type { Reader, Writer } from "../stream";
3
+ import { Version } from "./version";
4
+ export declare class SubscribeUpdate {
5
+ #private;
6
+ priority: number;
7
+ ordered: boolean;
8
+ maxLatency: number;
9
+ startGroup?: number;
10
+ endGroup?: number;
11
+ constructor(props: {
12
+ priority: number;
13
+ ordered?: boolean;
14
+ maxLatency?: number;
15
+ startGroup?: number;
16
+ endGroup?: number;
17
+ });
18
+ encode(w: Writer, version: Version): Promise<void>;
19
+ static decode(r: Reader, version: Version): Promise<SubscribeUpdate>;
20
+ static decodeMaybe(r: Reader, version: Version): Promise<SubscribeUpdate | undefined>;
21
+ }
22
+ export declare class Subscribe {
23
+ #private;
24
+ id: bigint;
25
+ broadcast: Path.Valid;
26
+ track: string;
27
+ priority: number;
28
+ ordered: boolean;
29
+ maxLatency: number;
30
+ startGroup?: number;
31
+ endGroup?: number;
32
+ constructor(props: {
33
+ id: bigint;
34
+ broadcast: Path.Valid;
35
+ track: string;
36
+ priority: number;
37
+ ordered?: boolean;
38
+ maxLatency?: number;
39
+ startGroup?: number;
40
+ endGroup?: number;
41
+ });
42
+ encode(w: Writer, version: Version): Promise<void>;
43
+ static decode(r: Reader, version: Version): Promise<Subscribe>;
44
+ }
45
+ export declare class SubscribeOk {
46
+ #private;
47
+ priority: number;
48
+ ordered: boolean;
49
+ maxLatency: number;
50
+ startGroup?: number;
51
+ endGroup?: number;
52
+ constructor({ priority, ordered, maxLatency, startGroup, endGroup, }: {
53
+ priority?: number;
54
+ ordered?: boolean;
55
+ maxLatency?: number;
56
+ startGroup?: number;
57
+ endGroup?: number;
58
+ });
59
+ encode(w: Writer, version: Version): Promise<void>;
60
+ static decode(r: Reader, version: Version): Promise<SubscribeOk>;
61
+ }
62
+ export declare class SubscribeDrop {
63
+ #private;
64
+ start: number;
65
+ end: number;
66
+ error: number;
67
+ constructor(props: {
68
+ start: number;
69
+ end: number;
70
+ error: number;
71
+ });
72
+ encode(w: Writer): Promise<void>;
73
+ static decode(r: Reader): Promise<SubscribeDrop>;
74
+ }
75
+ /**
76
+ * Signals that no group after a given sequence will be produced.
77
+ *
78
+ * moq-lite-05+ only.
79
+ */
80
+ export declare class SubscribeEnd {
81
+ #private;
82
+ group: number;
83
+ constructor(props: {
84
+ group: number;
85
+ });
86
+ encode(w: Writer): Promise<void>;
87
+ static decode(r: Reader): Promise<SubscribeEnd>;
88
+ }
89
+ /**
90
+ * A response message on the subscribe stream.
91
+ *
92
+ * In Draft03/04 each response is prefixed with a type discriminator: 0x0 SUBSCRIBE_OK,
93
+ * 0x1 SUBSCRIBE_DROP. In Draft05 end-of-subscription splits out, so the discriminators
94
+ * become 0x0 SUBSCRIBE_OK, 0x1 SUBSCRIBE_END, 0x2 SUBSCRIBE_DROP.
95
+ *
96
+ * SUBSCRIBE_OK is normally the first message on the response stream.
97
+ */
98
+ export type SubscribeResponse = {
99
+ ok: SubscribeOk;
100
+ } | {
101
+ end: SubscribeEnd;
102
+ } | {
103
+ drop: SubscribeDrop;
104
+ };
105
+ /** Encode a subscribe-stream response (OK / END / DROP) for the negotiated moq-lite version. */
106
+ export declare function encodeSubscribeResponse(w: Writer, resp: SubscribeResponse, version: Version): Promise<void>;
107
+ /** Decode the next subscribe-stream response for the negotiated moq-lite version. */
108
+ export declare function decodeSubscribeResponse(r: Reader, version: Version): Promise<SubscribeResponse>;
109
+ /** Like {@link decodeSubscribeResponse} but returns `undefined` at a clean stream end (FIN). */
110
+ export declare function decodeSubscribeResponseMaybe(r: Reader, version: Version): Promise<SubscribeResponse | undefined>;
111
+ //# sourceMappingURL=subscribe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["../../src/lite/subscribe.ts"],"names":[],"mappings":"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"}