@moqtap/codec 0.1.0 → 0.2.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 (277) hide show
  1. package/README.md +99 -95
  2. package/dist/chunk-4RIXXEII.js +1275 -0
  3. package/dist/chunk-4XYGE53S.cjs +698 -0
  4. package/dist/chunk-4YJANAXU.cjs +1109 -0
  5. package/dist/chunk-6AEHWULA.cjs +641 -0
  6. package/dist/chunk-7DUBLRXC.js +680 -0
  7. package/dist/{chunk-WNTXF3DE.cjs → chunk-7IVGHMKJ.cjs} +164 -62
  8. package/dist/{chunk-YBSEOSSP.js → chunk-A27S7HW7.js} +5 -1
  9. package/dist/chunk-BISI45MN.cjs +680 -0
  10. package/dist/{chunk-3BSZ55L3.cjs → chunk-BPNL5YFQ.cjs} +158 -24
  11. package/dist/chunk-CXDHOMHG.js +1097 -0
  12. package/dist/chunk-DUBCL3WF.cjs +749 -0
  13. package/dist/chunk-DWK5ZQZ4.js +642 -0
  14. package/dist/chunk-E6E3NQYU.js +680 -0
  15. package/dist/chunk-EFM5T7OM.js +698 -0
  16. package/dist/chunk-ENURAVHI.cjs +680 -0
  17. package/dist/{chunk-5WFXFLL4.cjs → chunk-FUFTMAQD.cjs} +96 -63
  18. package/dist/{chunk-2NARXGVA.cjs → chunk-FWISIR26.cjs} +5 -1
  19. package/dist/{chunk-YPXLV5YK.js → chunk-FXZ2MYKJ.js} +376 -38
  20. package/dist/chunk-G26SJ6XS.cjs +1341 -0
  21. package/dist/chunk-G7GI7LJA.js +737 -0
  22. package/dist/chunk-GXEW4COZ.cjs +737 -0
  23. package/dist/chunk-HSVYF6XX.cjs +1361 -0
  24. package/dist/chunk-IBVM4DMJ.cjs +1097 -0
  25. package/dist/chunk-IV2H5CFI.cjs +1275 -0
  26. package/dist/chunk-IV2HRJVT.js +1198 -0
  27. package/dist/chunk-JSQM2MG3.js +680 -0
  28. package/dist/chunk-K4OLITS2.cjs +1055 -0
  29. package/dist/{chunk-UOBWHJA5.js → chunk-KFTCU2P6.js} +2 -3
  30. package/dist/chunk-LH4NTURO.js +1361 -0
  31. package/dist/{chunk-DC4L6ZIT.js → chunk-MFAP7R6L.js} +154 -20
  32. package/dist/chunk-NGVE2RZT.js +1097 -0
  33. package/dist/chunk-NUX5BHWO.js +1341 -0
  34. package/dist/chunk-PJRA2TQ5.js +1055 -0
  35. package/dist/chunk-RVJAGE4S.cjs +1198 -0
  36. package/dist/{chunk-QYG6KGOV.cjs → chunk-RWQ43Z4F.cjs} +2 -3
  37. package/dist/chunk-RZHAPEXO.js +749 -0
  38. package/dist/chunk-ST24APEO.js +1109 -0
  39. package/dist/chunk-SYHW3FLI.cjs +642 -0
  40. package/dist/chunk-TLYNOOQP.cjs +432 -0
  41. package/dist/{chunk-23YG7F46.js → chunk-TMNGRIPL.js} +153 -51
  42. package/dist/{chunk-IQPDRQVC.js → chunk-U2B3B42P.js} +62 -29
  43. package/dist/chunk-UNS34PTA.cjs +680 -0
  44. package/dist/chunk-UR6JKS56.js +432 -0
  45. package/dist/{chunk-GDRGWFEK.cjs → chunk-UYXTY6ZQ.cjs} +376 -38
  46. package/dist/chunk-XUUCOLWU.cjs +1097 -0
  47. package/dist/chunk-YG5KJESI.js +641 -0
  48. package/dist/chunk-ZBKE2QRQ.js +1401 -0
  49. package/dist/chunk-ZSPO2GF2.cjs +1401 -0
  50. package/dist/codec-95k8CAu5.d.cts +35 -0
  51. package/dist/codec-AFuOxfsO.d.ts +60 -0
  52. package/dist/codec-B-UJ5Iow.d.cts +75 -0
  53. package/dist/codec-BC5jfvMb.d.ts +35 -0
  54. package/dist/codec-BECYPfY8.d.ts +35 -0
  55. package/dist/codec-BsPU1vNC.d.ts +39 -0
  56. package/dist/codec-BvpuF-6u.d.cts +39 -0
  57. package/dist/codec-C8jZI5Cx.d.cts +39 -0
  58. package/dist/codec-CAevkgf5.d.cts +33 -0
  59. package/dist/codec-CSUqCrRs.d.ts +39 -0
  60. package/dist/codec-C_HMXNK_.d.ts +33 -0
  61. package/dist/{codec-CTvFtQQI.d.cts → codec-CpuvYTSV.d.cts} +5 -5
  62. package/dist/codec-D0x8-SCw.d.cts +35 -0
  63. package/dist/codec-D7ARhpG1.d.ts +75 -0
  64. package/dist/codec-DNAUGshO.d.cts +60 -0
  65. package/dist/codec-DPx_QNn0.d.ts +31 -0
  66. package/dist/{codec-qPzfmLNu.d.ts → codec-DRhCx_hw.d.ts} +5 -5
  67. package/dist/codec-Db7YPe3l.d.ts +31 -0
  68. package/dist/codec-axkJpb7D.d.cts +31 -0
  69. package/dist/codec-ujAbFaep.d.cts +31 -0
  70. package/dist/draft10-session.cjs +6 -0
  71. package/dist/draft10-session.d.cts +8 -0
  72. package/dist/draft10-session.d.ts +8 -0
  73. package/dist/draft10-session.js +6 -0
  74. package/dist/draft10.cjs +115 -0
  75. package/dist/draft10.d.cts +95 -0
  76. package/dist/draft10.d.ts +95 -0
  77. package/dist/draft10.js +115 -0
  78. package/dist/draft11-session.cjs +6 -0
  79. package/dist/draft11-session.d.cts +8 -0
  80. package/dist/draft11-session.d.ts +8 -0
  81. package/dist/draft11-session.js +6 -0
  82. package/dist/draft11.cjs +109 -0
  83. package/dist/draft11.d.cts +99 -0
  84. package/dist/draft11.d.ts +99 -0
  85. package/dist/draft11.js +109 -0
  86. package/dist/draft12-session.cjs +6 -0
  87. package/dist/draft12-session.d.cts +8 -0
  88. package/dist/draft12-session.d.ts +8 -0
  89. package/dist/draft12-session.js +6 -0
  90. package/dist/draft12.cjs +117 -0
  91. package/dist/draft12.d.cts +106 -0
  92. package/dist/draft12.d.ts +106 -0
  93. package/dist/draft12.js +117 -0
  94. package/dist/draft13-session.cjs +6 -0
  95. package/dist/draft13-session.d.cts +8 -0
  96. package/dist/draft13-session.d.ts +8 -0
  97. package/dist/draft13-session.js +6 -0
  98. package/dist/draft13.cjs +119 -0
  99. package/dist/draft13.d.cts +108 -0
  100. package/dist/draft13.d.ts +108 -0
  101. package/dist/draft13.js +119 -0
  102. package/dist/draft14-session.cjs +2 -2
  103. package/dist/draft14-session.d.cts +4 -4
  104. package/dist/draft14-session.d.ts +4 -4
  105. package/dist/draft14-session.js +1 -1
  106. package/dist/draft14.cjs +4 -4
  107. package/dist/draft14.d.cts +27 -15
  108. package/dist/draft14.d.ts +27 -15
  109. package/dist/draft14.js +3 -3
  110. package/dist/draft15-session.cjs +6 -0
  111. package/dist/draft15-session.d.cts +8 -0
  112. package/dist/draft15-session.d.ts +8 -0
  113. package/dist/draft15-session.js +6 -0
  114. package/dist/draft15.cjs +111 -0
  115. package/dist/draft15.d.cts +93 -0
  116. package/dist/draft15.d.ts +93 -0
  117. package/dist/draft15.js +111 -0
  118. package/dist/draft16-session.cjs +6 -0
  119. package/dist/draft16-session.d.cts +8 -0
  120. package/dist/draft16-session.d.ts +8 -0
  121. package/dist/draft16-session.js +6 -0
  122. package/dist/draft16.cjs +113 -0
  123. package/dist/draft16.d.cts +94 -0
  124. package/dist/draft16.d.ts +94 -0
  125. package/dist/draft16.js +113 -0
  126. package/dist/draft17-session.cjs +8 -0
  127. package/dist/draft17-session.d.cts +51 -0
  128. package/dist/draft17-session.d.ts +51 -0
  129. package/dist/draft17-session.js +8 -0
  130. package/dist/draft17.cjs +99 -0
  131. package/dist/draft17.d.cts +40 -0
  132. package/dist/draft17.d.ts +40 -0
  133. package/dist/draft17.js +99 -0
  134. package/dist/draft7-session.cjs +3 -3
  135. package/dist/draft7-session.d.cts +3 -3
  136. package/dist/draft7-session.d.ts +3 -3
  137. package/dist/draft7-session.js +2 -2
  138. package/dist/draft7.cjs +6 -6
  139. package/dist/draft7.d.cts +10 -10
  140. package/dist/draft7.d.ts +10 -10
  141. package/dist/draft7.js +3 -3
  142. package/dist/draft8-session.cjs +6 -0
  143. package/dist/draft8-session.d.cts +8 -0
  144. package/dist/draft8-session.d.ts +8 -0
  145. package/dist/draft8-session.js +6 -0
  146. package/dist/draft8.cjs +115 -0
  147. package/dist/draft8.d.cts +95 -0
  148. package/dist/draft8.d.ts +95 -0
  149. package/dist/draft8.js +115 -0
  150. package/dist/draft9-session.cjs +6 -0
  151. package/dist/draft9-session.d.cts +8 -0
  152. package/dist/draft9-session.d.ts +8 -0
  153. package/dist/draft9-session.js +6 -0
  154. package/dist/draft9.cjs +115 -0
  155. package/dist/draft9.d.cts +95 -0
  156. package/dist/draft9.d.ts +95 -0
  157. package/dist/draft9.js +115 -0
  158. package/dist/index.cjs +79 -7
  159. package/dist/index.d.cts +71 -8
  160. package/dist/index.d.ts +71 -8
  161. package/dist/index.js +77 -5
  162. package/dist/{session-types-B9NIf7_F.d.ts → session-types-CJIFbTPd.d.ts} +20 -20
  163. package/dist/{session-types-CCo-oA-d.d.cts → session-types-Cbq8IGCP.d.cts} +20 -20
  164. package/dist/session.cjs +5 -5
  165. package/dist/session.d.cts +3 -3
  166. package/dist/session.d.ts +3 -3
  167. package/dist/session.js +5 -5
  168. package/dist/types-4VxSL2Ho.d.cts +261 -0
  169. package/dist/types-4VxSL2Ho.d.ts +261 -0
  170. package/dist/types-B2afJZM-.d.cts +236 -0
  171. package/dist/types-B2afJZM-.d.ts +236 -0
  172. package/dist/{types-CIk5W10V.d.ts → types-BTFeKYCb.d.cts} +37 -37
  173. package/dist/{types-CIk5W10V.d.cts → types-BTFeKYCb.d.ts} +37 -37
  174. package/dist/types-Bg6QYNVt.d.cts +290 -0
  175. package/dist/types-Bg6QYNVt.d.ts +290 -0
  176. package/dist/types-C_1HrqBl.d.cts +306 -0
  177. package/dist/types-C_1HrqBl.d.ts +306 -0
  178. package/dist/types-Cw4WE9dh.d.cts +261 -0
  179. package/dist/types-Cw4WE9dh.d.ts +261 -0
  180. package/dist/types-D5gNQiDj.d.cts +261 -0
  181. package/dist/types-D5gNQiDj.d.ts +261 -0
  182. package/dist/types-DqCDFqgB.d.cts +230 -0
  183. package/dist/types-DqCDFqgB.d.ts +230 -0
  184. package/dist/types-ERexTpT8.d.cts +217 -0
  185. package/dist/types-ERexTpT8.d.ts +217 -0
  186. package/dist/{types-ClXELFGN.d.cts → types-QNXoxC9Y.d.cts} +36 -41
  187. package/dist/{types-ClXELFGN.d.ts → types-QNXoxC9Y.d.ts} +36 -41
  188. package/dist/types-r-CasCf1.d.cts +262 -0
  189. package/dist/types-r-CasCf1.d.ts +262 -0
  190. package/package.json +116 -8
  191. package/src/core/buffer-reader.ts +16 -9
  192. package/src/core/buffer-writer.ts +2 -2
  193. package/src/core/errors.ts +1 -1
  194. package/src/core/session-types.ts +28 -41
  195. package/src/core/types.ts +92 -75
  196. package/src/drafts/draft07/announce-fsm.ts +1 -1
  197. package/src/drafts/draft07/codec.ts +235 -118
  198. package/src/drafts/draft07/index.ts +43 -44
  199. package/src/drafts/draft07/messages.ts +1 -1
  200. package/src/drafts/draft07/parameters.ts +2 -2
  201. package/src/drafts/draft07/rules.ts +67 -38
  202. package/src/drafts/draft07/session-fsm.ts +330 -117
  203. package/src/drafts/draft07/session.ts +10 -10
  204. package/src/drafts/draft07/subscription-fsm.ts +1 -1
  205. package/src/drafts/draft07/varint.ts +4 -4
  206. package/src/drafts/draft08/codec.ts +1254 -0
  207. package/src/drafts/draft08/index.ts +125 -0
  208. package/src/drafts/draft08/messages.ts +72 -0
  209. package/src/drafts/draft08/rules.ts +91 -0
  210. package/src/drafts/draft08/session-fsm.ts +718 -0
  211. package/src/drafts/draft08/session.ts +26 -0
  212. package/src/drafts/draft08/types.ts +377 -0
  213. package/src/drafts/draft09/codec.ts +1235 -0
  214. package/src/drafts/draft09/index.ts +125 -0
  215. package/src/drafts/draft09/messages.ts +72 -0
  216. package/src/drafts/draft09/rules.ts +91 -0
  217. package/src/drafts/draft09/session-fsm.ts +718 -0
  218. package/src/drafts/draft09/session.ts +26 -0
  219. package/src/drafts/draft09/types.ts +376 -0
  220. package/src/drafts/draft10/codec.ts +1235 -0
  221. package/src/drafts/draft10/index.ts +125 -0
  222. package/src/drafts/draft10/messages.ts +72 -0
  223. package/src/drafts/draft10/rules.ts +91 -0
  224. package/src/drafts/draft10/session-fsm.ts +718 -0
  225. package/src/drafts/draft10/session.ts +26 -0
  226. package/src/drafts/draft10/types.ts +376 -0
  227. package/src/drafts/draft11/codec.ts +1198 -0
  228. package/src/drafts/draft11/index.ts +123 -0
  229. package/src/drafts/draft11/messages.ts +71 -0
  230. package/src/drafts/draft11/rules.ts +100 -0
  231. package/src/drafts/draft11/session-fsm.ts +758 -0
  232. package/src/drafts/draft11/session.ts +26 -0
  233. package/src/drafts/draft11/types.ts +375 -0
  234. package/src/drafts/draft12/codec.ts +1354 -0
  235. package/src/drafts/draft12/index.ts +130 -0
  236. package/src/drafts/draft12/messages.ts +84 -0
  237. package/src/drafts/draft12/rules.ts +106 -0
  238. package/src/drafts/draft12/session-fsm.ts +805 -0
  239. package/src/drafts/draft12/session.ts +26 -0
  240. package/src/drafts/draft12/types.ts +414 -0
  241. package/src/drafts/draft13/codec.ts +1438 -0
  242. package/src/drafts/draft13/index.ts +132 -0
  243. package/src/drafts/draft13/messages.ts +86 -0
  244. package/src/drafts/draft13/rules.ts +108 -0
  245. package/src/drafts/draft13/session-fsm.ts +819 -0
  246. package/src/drafts/draft13/session.ts +26 -0
  247. package/src/drafts/draft13/types.ts +433 -0
  248. package/src/drafts/draft14/codec.ts +339 -189
  249. package/src/drafts/draft14/index.ts +103 -108
  250. package/src/drafts/draft14/messages.ts +61 -61
  251. package/src/drafts/draft14/rules.ts +77 -34
  252. package/src/drafts/draft14/session-fsm.ts +640 -147
  253. package/src/drafts/draft14/session.ts +13 -13
  254. package/src/drafts/draft14/types.ts +68 -68
  255. package/src/drafts/draft15/codec.ts +1661 -0
  256. package/src/drafts/draft15/index.ts +121 -0
  257. package/src/drafts/draft15/messages.ts +64 -0
  258. package/src/drafts/draft15/rules.ts +95 -0
  259. package/src/drafts/draft15/session-fsm.ts +687 -0
  260. package/src/drafts/draft15/session.ts +26 -0
  261. package/src/drafts/draft15/types.ts +336 -0
  262. package/src/drafts/draft16/codec.ts +1623 -0
  263. package/src/drafts/draft16/index.ts +123 -0
  264. package/src/drafts/draft16/messages.ts +67 -0
  265. package/src/drafts/draft16/rules.ts +96 -0
  266. package/src/drafts/draft16/session-fsm.ts +682 -0
  267. package/src/drafts/draft16/session.ts +26 -0
  268. package/src/drafts/draft16/types.ts +354 -0
  269. package/src/drafts/draft17/codec.ts +1621 -0
  270. package/src/drafts/draft17/index.ts +105 -0
  271. package/src/drafts/draft17/messages.ts +53 -0
  272. package/src/drafts/draft17/rules.ts +85 -0
  273. package/src/drafts/draft17/session-fsm.ts +437 -0
  274. package/src/drafts/draft17/session.ts +15 -0
  275. package/src/drafts/draft17/types.ts +310 -0
  276. package/src/index.ts +283 -33
  277. package/src/session.ts +20 -20
@@ -0,0 +1,310 @@
1
+ // Draft-17 specific message types
2
+
3
+ // Unknown parameter for passthrough
4
+ export interface UnknownParam {
5
+ readonly id: string; // e.g. "0x21"
6
+ readonly length: number;
7
+ readonly raw_hex: string;
8
+ }
9
+
10
+ // Setup options (KVP encoding, no count prefix)
11
+ export interface Draft17SetupOptions {
12
+ path?: string; // 0x01 odd
13
+ max_auth_token_cache_size?: bigint; // 0x04 even
14
+ authority?: string; // 0x05 odd
15
+ moqt_implementation?: string; // 0x07 odd
16
+ unknown?: UnknownParam[];
17
+ }
18
+
19
+ // Subscription filter parameter
20
+ export interface SubscriptionFilter {
21
+ readonly filter_type: bigint;
22
+ readonly start_group?: bigint;
23
+ readonly start_object?: bigint;
24
+ readonly end_group?: bigint;
25
+ }
26
+
27
+ // Largest object location parameter
28
+ export interface LargestObject {
29
+ readonly group: bigint;
30
+ readonly object: bigint;
31
+ }
32
+
33
+ // Version-specific parameters (delta-encoded types, count-prefixed)
34
+ export interface Draft17Params {
35
+ expires?: bigint; // 0x08 varint
36
+ largest_object?: LargestObject; // 0x09 Location (2 bare varints)
37
+ subscriber_priority?: bigint; // 0x20 uint8
38
+ subscription_filter?: SubscriptionFilter; // 0x21 length-prefixed
39
+ group_order?: bigint; // 0x22 uint8
40
+ unknown?: UnknownParam[];
41
+ }
42
+
43
+ // Track properties (KVP encoding, no count prefix, read until end of payload)
44
+ export interface Draft17TrackProperties {
45
+ unknown?: UnknownParam[];
46
+ }
47
+
48
+ // Draft-17 message type tag union
49
+ export type Draft17MessageType =
50
+ | "setup"
51
+ | "subscribe"
52
+ | "subscribe_ok"
53
+ | "request_update"
54
+ | "publish"
55
+ | "publish_ok"
56
+ | "publish_done"
57
+ | "publish_namespace"
58
+ | "namespace"
59
+ | "namespace_done"
60
+ | "subscribe_namespace"
61
+ | "publish_blocked"
62
+ | "fetch"
63
+ | "fetch_ok"
64
+ | "track_status"
65
+ | "request_ok"
66
+ | "request_error"
67
+ | "goaway";
68
+
69
+ // Base
70
+ export interface Draft17BaseMessage {
71
+ readonly type: Draft17MessageType;
72
+ }
73
+
74
+ // Setup — single unified message (0x2F00)
75
+ export interface Draft17Setup extends Draft17BaseMessage {
76
+ readonly type: "setup";
77
+ readonly options: Draft17SetupOptions;
78
+ }
79
+
80
+ // Subscribe — fields moved to parameters, added required_request_id_delta
81
+ export interface Draft17Subscribe extends Draft17BaseMessage {
82
+ readonly type: "subscribe";
83
+ readonly request_id: bigint;
84
+ readonly required_request_id_delta: bigint;
85
+ readonly track_namespace: string[];
86
+ readonly track_name: string;
87
+ readonly parameters: Draft17Params;
88
+ }
89
+
90
+ export interface Draft17SubscribeOk extends Draft17BaseMessage {
91
+ readonly type: "subscribe_ok";
92
+ readonly track_alias: bigint;
93
+ readonly parameters: Draft17Params;
94
+ readonly track_properties: Draft17TrackProperties;
95
+ }
96
+
97
+ export interface Draft17RequestUpdate extends Draft17BaseMessage {
98
+ readonly type: "request_update";
99
+ readonly request_id: bigint;
100
+ readonly required_request_id_delta: bigint;
101
+ readonly parameters: Draft17Params;
102
+ }
103
+
104
+ // Publish
105
+ export interface Draft17Publish extends Draft17BaseMessage {
106
+ readonly type: "publish";
107
+ readonly request_id: bigint;
108
+ readonly required_request_id_delta: bigint;
109
+ readonly track_namespace: string[];
110
+ readonly track_name: string;
111
+ readonly track_alias: bigint;
112
+ readonly parameters: Draft17Params;
113
+ readonly track_properties: Draft17TrackProperties;
114
+ }
115
+
116
+ export interface Draft17PublishOk extends Draft17BaseMessage {
117
+ readonly type: "publish_ok";
118
+ readonly parameters: Draft17Params;
119
+ }
120
+
121
+ export interface Draft17PublishDone extends Draft17BaseMessage {
122
+ readonly type: "publish_done";
123
+ readonly status_code: bigint;
124
+ readonly stream_count: bigint;
125
+ readonly reason_phrase: string;
126
+ }
127
+
128
+ // Namespace
129
+ export interface Draft17PublishNamespace extends Draft17BaseMessage {
130
+ readonly type: "publish_namespace";
131
+ readonly request_id: bigint;
132
+ readonly required_request_id_delta: bigint;
133
+ readonly track_namespace: string[];
134
+ readonly parameters: Draft17Params;
135
+ }
136
+
137
+ export interface Draft17Namespace extends Draft17BaseMessage {
138
+ readonly type: "namespace";
139
+ readonly namespace_suffix: string[];
140
+ }
141
+
142
+ export interface Draft17NamespaceDone extends Draft17BaseMessage {
143
+ readonly type: "namespace_done";
144
+ readonly namespace_suffix: string[];
145
+ }
146
+
147
+ export interface Draft17SubscribeNamespace extends Draft17BaseMessage {
148
+ readonly type: "subscribe_namespace";
149
+ readonly request_id: bigint;
150
+ readonly required_request_id_delta: bigint;
151
+ readonly namespace_prefix: string[];
152
+ readonly subscribe_options: bigint;
153
+ readonly parameters: Draft17Params;
154
+ }
155
+
156
+ // New in draft-17: PUBLISH_BLOCKED
157
+ export interface Draft17PublishBlocked extends Draft17BaseMessage {
158
+ readonly type: "publish_blocked";
159
+ readonly namespace_suffix: string[];
160
+ readonly track_name: string;
161
+ }
162
+
163
+ // Fetch
164
+ export interface StandaloneFetch {
165
+ readonly track_namespace: string[];
166
+ readonly track_name: string;
167
+ readonly start_group: bigint;
168
+ readonly start_object: bigint;
169
+ readonly end_group: bigint;
170
+ readonly end_object: bigint;
171
+ }
172
+
173
+ export interface JoiningFetch {
174
+ readonly joining_request_id: bigint;
175
+ readonly joining_start: bigint;
176
+ }
177
+
178
+ export interface Draft17Fetch extends Draft17BaseMessage {
179
+ readonly type: "fetch";
180
+ readonly request_id: bigint;
181
+ readonly required_request_id_delta: bigint;
182
+ readonly fetch_type: bigint;
183
+ readonly standalone?: StandaloneFetch;
184
+ readonly joining?: JoiningFetch;
185
+ readonly parameters: Draft17Params;
186
+ }
187
+
188
+ export interface Draft17FetchOk extends Draft17BaseMessage {
189
+ readonly type: "fetch_ok";
190
+ readonly end_of_track: number; // uint8
191
+ readonly end_group: bigint;
192
+ readonly end_object: bigint;
193
+ readonly parameters: Draft17Params;
194
+ readonly track_properties: Draft17TrackProperties;
195
+ }
196
+
197
+ // Track Status — same format as subscribe in draft-17
198
+ export interface Draft17TrackStatus extends Draft17BaseMessage {
199
+ readonly type: "track_status";
200
+ readonly request_id: bigint;
201
+ readonly required_request_id_delta: bigint;
202
+ readonly track_namespace: string[];
203
+ readonly track_name: string;
204
+ readonly parameters: Draft17Params;
205
+ }
206
+
207
+ // Consolidated response messages — no request_id in draft-17
208
+ export interface Draft17RequestOk extends Draft17BaseMessage {
209
+ readonly type: "request_ok";
210
+ readonly parameters: Draft17Params;
211
+ }
212
+
213
+ export interface Draft17RequestError extends Draft17BaseMessage {
214
+ readonly type: "request_error";
215
+ readonly error_code: bigint;
216
+ readonly retry_interval: bigint;
217
+ readonly reason_phrase: string;
218
+ }
219
+
220
+ // Session Control
221
+ export interface Draft17GoAway extends Draft17BaseMessage {
222
+ readonly type: "goaway";
223
+ readonly new_session_uri: string;
224
+ readonly timeout: bigint;
225
+ }
226
+
227
+ // Union of all draft-17 control messages
228
+ export type Draft17Message =
229
+ | Draft17Setup
230
+ | Draft17Subscribe
231
+ | Draft17SubscribeOk
232
+ | Draft17RequestUpdate
233
+ | Draft17Publish
234
+ | Draft17PublishOk
235
+ | Draft17PublishDone
236
+ | Draft17PublishNamespace
237
+ | Draft17Namespace
238
+ | Draft17NamespaceDone
239
+ | Draft17SubscribeNamespace
240
+ | Draft17PublishBlocked
241
+ | Draft17Fetch
242
+ | Draft17FetchOk
243
+ | Draft17TrackStatus
244
+ | Draft17RequestOk
245
+ | Draft17RequestError
246
+ | Draft17GoAway;
247
+
248
+ // Data stream types (same as draft-16)
249
+ export interface ObjectPayload {
250
+ readonly type: "object";
251
+ readonly objectId: bigint;
252
+ readonly payloadLength: number;
253
+ readonly status?: bigint;
254
+ readonly payload: Uint8Array;
255
+ }
256
+
257
+ export interface SubgroupStream {
258
+ readonly type: "subgroup";
259
+ readonly headerType: number;
260
+ readonly trackAlias: bigint;
261
+ readonly groupId: bigint;
262
+ readonly subgroupId: bigint;
263
+ readonly publisherPriority: number;
264
+ readonly objects: ObjectPayload[];
265
+ }
266
+
267
+ export interface DatagramObject {
268
+ readonly type: "datagram";
269
+ readonly datagramType: number;
270
+ readonly trackAlias: bigint;
271
+ readonly groupId: bigint;
272
+ readonly objectId: bigint;
273
+ readonly publisherPriority: number;
274
+ readonly endOfGroup?: boolean;
275
+ readonly objectStatus?: bigint;
276
+ readonly payloadLength: number;
277
+ readonly payload: Uint8Array;
278
+ }
279
+
280
+ export interface FetchObjectPayload extends ObjectPayload {
281
+ readonly serializationFlags: number;
282
+ readonly groupId: bigint;
283
+ readonly subgroupId: bigint;
284
+ readonly publisherPriority: number;
285
+ }
286
+
287
+ export interface FetchStream {
288
+ readonly type: "fetch";
289
+ readonly requestId: bigint;
290
+ readonly objects: FetchObjectPayload[];
291
+ }
292
+
293
+ export type Draft17DataStream = SubgroupStream | DatagramObject | FetchStream;
294
+
295
+ // Streaming data stream decoder types
296
+ export interface SubgroupStreamHeader {
297
+ readonly type: "subgroup_header";
298
+ readonly trackAlias: bigint;
299
+ readonly groupId: bigint;
300
+ readonly subgroupId: bigint;
301
+ readonly publisherPriority: number;
302
+ }
303
+
304
+ export interface FetchStreamHeader {
305
+ readonly type: "fetch_header";
306
+ readonly requestId: bigint;
307
+ }
308
+
309
+ export type DataStreamHeader = SubgroupStreamHeader | FetchStreamHeader;
310
+ export type DataStreamEvent = DataStreamHeader | ObjectPayload;
package/src/index.ts CHANGED
@@ -12,50 +12,188 @@
12
12
  * specification reaches RFC status. Until then, always specify a draft.
13
13
  */
14
14
 
15
- import type { Codec, BaseCodec, CodecOptions, Draft } from './core/types.js';
16
- import { createDraft07Codec } from './drafts/draft07/codec.js';
17
- import { createDraft14Codec } from './drafts/draft14/codec.js';
18
- import type { Draft14Codec } from './drafts/draft14/codec.js';
15
+ import type { Codec, CodecOptions, Draft } from "./core/types.js";
16
+ import { createDraft07Codec } from "./drafts/draft07/codec.js";
17
+ import type { Draft08Codec } from "./drafts/draft08/codec.js";
18
+ import { createDraft08Codec } from "./drafts/draft08/codec.js";
19
+ import type { Draft09Codec } from "./drafts/draft09/codec.js";
20
+ import { createDraft09Codec } from "./drafts/draft09/codec.js";
21
+ import type { Draft10Codec } from "./drafts/draft10/codec.js";
22
+ import { createDraft10Codec } from "./drafts/draft10/codec.js";
23
+ import type { Draft11Codec } from "./drafts/draft11/codec.js";
24
+ import { createDraft11Codec } from "./drafts/draft11/codec.js";
25
+ import type { Draft12Codec } from "./drafts/draft12/codec.js";
26
+ import { createDraft12Codec } from "./drafts/draft12/codec.js";
27
+ import type { Draft13Codec } from "./drafts/draft13/codec.js";
28
+ import { createDraft13Codec } from "./drafts/draft13/codec.js";
29
+ import type { Draft14Codec } from "./drafts/draft14/codec.js";
30
+ import { createDraft14Codec } from "./drafts/draft14/codec.js";
31
+ import type { Draft15Codec } from "./drafts/draft15/codec.js";
32
+ import { createDraft15Codec } from "./drafts/draft15/codec.js";
33
+ import type { Draft16Codec } from "./drafts/draft16/codec.js";
34
+ import { createDraft16Codec } from "./drafts/draft16/codec.js";
35
+ import type { Draft17Codec } from "./drafts/draft17/codec.js";
36
+ import { createDraft17Codec } from "./drafts/draft17/codec.js";
19
37
 
20
38
  const DRAFT_ALIASES: Record<string, Draft> = {
21
- '07': 'draft-ietf-moq-transport-07',
22
- 'draft-ietf-moq-transport-07': 'draft-ietf-moq-transport-07',
23
- '14': 'draft-ietf-moq-transport-14',
24
- 'draft-ietf-moq-transport-14': 'draft-ietf-moq-transport-14',
39
+ "07": "draft-ietf-moq-transport-07",
40
+ "draft-ietf-moq-transport-07": "draft-ietf-moq-transport-07",
41
+ "08": "draft-ietf-moq-transport-08",
42
+ "draft-ietf-moq-transport-08": "draft-ietf-moq-transport-08",
43
+ "09": "draft-ietf-moq-transport-09",
44
+ "draft-ietf-moq-transport-09": "draft-ietf-moq-transport-09",
45
+ "10": "draft-ietf-moq-transport-10",
46
+ "draft-ietf-moq-transport-10": "draft-ietf-moq-transport-10",
47
+ "11": "draft-ietf-moq-transport-11",
48
+ "draft-ietf-moq-transport-11": "draft-ietf-moq-transport-11",
49
+ "12": "draft-ietf-moq-transport-12",
50
+ "draft-ietf-moq-transport-12": "draft-ietf-moq-transport-12",
51
+ "13": "draft-ietf-moq-transport-13",
52
+ "draft-ietf-moq-transport-13": "draft-ietf-moq-transport-13",
53
+ "14": "draft-ietf-moq-transport-14",
54
+ "draft-ietf-moq-transport-14": "draft-ietf-moq-transport-14",
55
+ "15": "draft-ietf-moq-transport-15",
56
+ "draft-ietf-moq-transport-15": "draft-ietf-moq-transport-15",
57
+ "16": "draft-ietf-moq-transport-16",
58
+ "draft-ietf-moq-transport-16": "draft-ietf-moq-transport-16",
59
+ "17": "draft-ietf-moq-transport-17",
60
+ "draft-ietf-moq-transport-17": "draft-ietf-moq-transport-17",
25
61
  };
26
62
 
27
63
  /**
28
64
  * Create a codec for draft-07 (returns full Codec with stream decoder).
29
65
  */
30
- export function createCodec(options: CodecOptions & { draft: 'draft-ietf-moq-transport-07' | '07' }): Codec;
66
+ export function createCodec(
67
+ options: CodecOptions & { draft: "draft-ietf-moq-transport-07" | "07" },
68
+ ): Codec;
69
+ export function createCodec(
70
+ options: CodecOptions & { draft: "draft-ietf-moq-transport-08" | "08" },
71
+ ): Draft08Codec;
72
+ export function createCodec(
73
+ options: CodecOptions & { draft: "draft-ietf-moq-transport-09" | "09" },
74
+ ): Draft09Codec;
75
+ export function createCodec(
76
+ options: CodecOptions & { draft: "draft-ietf-moq-transport-10" | "10" },
77
+ ): Draft10Codec;
78
+ /**
79
+ * Create a codec for draft-11 (returns Draft11Codec with data stream support).
80
+ */
81
+ export function createCodec(
82
+ options: CodecOptions & { draft: "draft-ietf-moq-transport-11" | "11" },
83
+ ): Draft11Codec;
84
+ /**
85
+ * Create a codec for draft-12 (returns Draft12Codec with data stream support).
86
+ */
87
+ export function createCodec(
88
+ options: CodecOptions & { draft: "draft-ietf-moq-transport-12" | "12" },
89
+ ): Draft12Codec;
90
+ /**
91
+ * Create a codec for draft-13 (returns Draft13Codec with data stream support).
92
+ */
93
+ export function createCodec(
94
+ options: CodecOptions & { draft: "draft-ietf-moq-transport-13" | "13" },
95
+ ): Draft13Codec;
31
96
  /**
32
97
  * Create a codec for draft-14 (returns Draft14Codec with data stream support).
33
98
  */
34
- export function createCodec(options: CodecOptions & { draft: 'draft-ietf-moq-transport-14' | '14' }): Draft14Codec;
99
+ export function createCodec(
100
+ options: CodecOptions & { draft: "draft-ietf-moq-transport-14" | "14" },
101
+ ): Draft14Codec;
102
+ /**
103
+ * Create a codec for draft-15 (returns Draft15Codec with data stream support).
104
+ */
105
+ export function createCodec(
106
+ options: CodecOptions & { draft: "draft-ietf-moq-transport-15" | "15" },
107
+ ): Draft15Codec;
108
+ /**
109
+ * Create a codec for draft-16 (returns Draft16Codec with data stream support).
110
+ */
111
+ export function createCodec(
112
+ options: CodecOptions & { draft: "draft-ietf-moq-transport-16" | "16" },
113
+ ): Draft16Codec;
114
+ /**
115
+ * Create a codec for draft-17 (returns Draft17Codec with data stream support).
116
+ */
117
+ export function createCodec(
118
+ options: CodecOptions & { draft: "draft-ietf-moq-transport-17" | "17" },
119
+ ): Draft17Codec;
35
120
  /**
36
121
  * Create a codec for the specified draft version.
37
122
  *
38
123
  * A draft must always be specified — there is no default while the
39
124
  * MoQT specification is still in draft stage.
40
125
  */
41
- export function createCodec(options: CodecOptions): Codec | Draft14Codec;
42
- export function createCodec(options: CodecOptions): Codec | Draft14Codec {
126
+ export function createCodec(
127
+ options: CodecOptions,
128
+ ):
129
+ | Codec
130
+ | Draft08Codec
131
+ | Draft09Codec
132
+ | Draft10Codec
133
+ | Draft11Codec
134
+ | Draft12Codec
135
+ | Draft13Codec
136
+ | Draft14Codec
137
+ | Draft15Codec
138
+ | Draft16Codec
139
+ | Draft17Codec;
140
+ export function createCodec(
141
+ options: CodecOptions,
142
+ ):
143
+ | Codec
144
+ | Draft08Codec
145
+ | Draft09Codec
146
+ | Draft10Codec
147
+ | Draft11Codec
148
+ | Draft12Codec
149
+ | Draft13Codec
150
+ | Draft14Codec
151
+ | Draft15Codec
152
+ | Draft16Codec
153
+ | Draft17Codec {
43
154
  const draft = DRAFT_ALIASES[options.draft];
44
155
  if (!draft) {
45
156
  throw new Error(
46
157
  `Unsupported draft: "${options.draft}". ` +
47
- `Use a draft-scoped import instead:\n` +
48
- ` import { createDraft07Codec } from '@moqtap/codec/draft7'\n` +
49
- ` import { createDraft14Codec } from '@moqtap/codec/draft14'\n` +
50
- `Supported draft values: ${Object.keys(DRAFT_ALIASES).join(', ')}`,
158
+ `Use a draft-scoped import instead:\n` +
159
+ ` import { createDraft07Codec } from '@moqtap/codec/draft7'\n` +
160
+ ` import { createDraft08Codec } from '@moqtap/codec/draft8'\n` +
161
+ ` import { createDraft09Codec } from '@moqtap/codec/draft9'\n` +
162
+ ` import { createDraft10Codec } from '@moqtap/codec/draft10'\n` +
163
+ ` import { createDraft11Codec } from '@moqtap/codec/draft11'\n` +
164
+ ` import { createDraft12Codec } from '@moqtap/codec/draft12'\n` +
165
+ ` import { createDraft13Codec } from '@moqtap/codec/draft13'\n` +
166
+ ` import { createDraft14Codec } from '@moqtap/codec/draft14'\n` +
167
+ ` import { createDraft15Codec } from '@moqtap/codec/draft15'\n` +
168
+ ` import { createDraft16Codec } from '@moqtap/codec/draft16'\n` +
169
+ ` import { createDraft17Codec } from '@moqtap/codec/draft17'\n` +
170
+ `Supported draft values: ${Object.keys(DRAFT_ALIASES).join(", ")}`,
51
171
  );
52
172
  }
53
173
 
54
174
  switch (draft) {
55
- case 'draft-ietf-moq-transport-07':
175
+ case "draft-ietf-moq-transport-07":
56
176
  return createDraft07Codec();
57
- case 'draft-ietf-moq-transport-14':
177
+ case "draft-ietf-moq-transport-08":
178
+ return createDraft08Codec();
179
+ case "draft-ietf-moq-transport-09":
180
+ return createDraft09Codec();
181
+ case "draft-ietf-moq-transport-10":
182
+ return createDraft10Codec();
183
+ case "draft-ietf-moq-transport-11":
184
+ return createDraft11Codec();
185
+ case "draft-ietf-moq-transport-12":
186
+ return createDraft12Codec();
187
+ case "draft-ietf-moq-transport-13":
188
+ return createDraft13Codec();
189
+ case "draft-ietf-moq-transport-14":
58
190
  return createDraft14Codec();
191
+ case "draft-ietf-moq-transport-15":
192
+ return createDraft15Codec();
193
+ case "draft-ietf-moq-transport-16":
194
+ return createDraft16Codec();
195
+ case "draft-ietf-moq-transport-17":
196
+ return createDraft17Codec();
59
197
  default:
60
198
  throw new Error(`Unsupported draft: ${draft}`);
61
199
  }
@@ -63,23 +201,135 @@ export function createCodec(options: CodecOptions): Codec | Draft14Codec {
63
201
 
64
202
  // Re-export shared types
65
203
  export type {
66
- Codec, BaseCodec, CodecOptions, Draft, DraftShorthand,
67
- MoqtMessage, MoqtMessageType, DecodeResult, DecodeErrorCode,
68
- ClientSetup, ServerSetup, Subscribe, SubscribeOk, SubscribeError,
69
- SubscribeDone, SubscribeUpdate, Unsubscribe, Announce, AnnounceOk, AnnounceError,
70
- AnnounceCancel, Unannounce, TrackStatusRequest, TrackStatus,
71
- ObjectStream, ObjectDatagram, StreamHeaderTrack, StreamHeaderGroup,
72
- StreamHeaderSubgroup, GoAway, SubscribeAnnounces, SubscribeAnnouncesOk,
73
- SubscribeAnnouncesError, UnsubscribeAnnounces, MaxSubscribeId,
74
- Fetch, FetchOk, FetchError, FetchCancel,
75
- FilterType, GroupOrderValue,
76
- } from './core/types.js';
77
- export { DecodeError } from './core/types.js';
204
+ Announce,
205
+ AnnounceCancel,
206
+ AnnounceError,
207
+ AnnounceOk,
208
+ BaseCodec,
209
+ ClientSetup,
210
+ Codec,
211
+ CodecOptions,
212
+ DecodeErrorCode,
213
+ DecodeResult,
214
+ Draft,
215
+ DraftShorthand,
216
+ Fetch,
217
+ FetchCancel,
218
+ FetchError,
219
+ FetchOk,
220
+ FilterType,
221
+ GoAway,
222
+ GroupOrderValue,
223
+ MaxSubscribeId,
224
+ MoqtMessage,
225
+ MoqtMessageType,
226
+ ObjectDatagram,
227
+ ObjectStream,
228
+ ServerSetup,
229
+ StreamHeaderGroup,
230
+ StreamHeaderSubgroup,
231
+ StreamHeaderTrack,
232
+ Subscribe,
233
+ SubscribeAnnounces,
234
+ SubscribeAnnouncesError,
235
+ SubscribeAnnouncesOk,
236
+ SubscribeDone,
237
+ SubscribeError,
238
+ SubscribeOk,
239
+ SubscribeUpdate,
240
+ TrackStatus,
241
+ TrackStatusRequest,
242
+ Unannounce,
243
+ Unsubscribe,
244
+ UnsubscribeAnnounces,
245
+ } from "./core/types.js";
246
+ export { DecodeError } from "./core/types.js";
247
+
248
+ // Re-export draft-08 types
249
+ export type { Draft08Codec } from "./drafts/draft08/codec.js";
250
+ export type {
251
+ Draft08DataStream,
252
+ Draft08Message,
253
+ Draft08Params,
254
+ Draft08SetupParams,
255
+ } from "./drafts/draft08/types.js";
256
+
257
+ // Re-export draft-09 types
258
+ export type { Draft09Codec } from "./drafts/draft09/codec.js";
259
+ export type {
260
+ Draft09DataStream,
261
+ Draft09Message,
262
+ Draft09Params,
263
+ Draft09SetupParams,
264
+ } from "./drafts/draft09/types.js";
265
+
266
+ // Re-export draft-10 types
267
+ export type { Draft10Codec } from "./drafts/draft10/codec.js";
268
+ export type {
269
+ Draft10DataStream,
270
+ Draft10Message,
271
+ Draft10Params,
272
+ Draft10SetupParams,
273
+ } from "./drafts/draft10/types.js";
274
+
275
+ // Re-export draft-11 types
276
+ export type { Draft11Codec } from "./drafts/draft11/codec.js";
277
+ export type {
278
+ Draft11DataStream,
279
+ Draft11Message,
280
+ Draft11Params,
281
+ Draft11SetupParams,
282
+ } from "./drafts/draft11/types.js";
283
+
284
+ // Re-export draft-12 types
285
+ export type { Draft12Codec } from "./drafts/draft12/codec.js";
286
+ export type {
287
+ Draft12DataStream,
288
+ Draft12Message,
289
+ Draft12Params,
290
+ Draft12SetupParams,
291
+ } from "./drafts/draft12/types.js";
292
+
293
+ // Re-export draft-13 types
294
+ export type { Draft13Codec } from "./drafts/draft13/codec.js";
295
+ export type {
296
+ Draft13DataStream,
297
+ Draft13Message,
298
+ Draft13Params,
299
+ Draft13SetupParams,
300
+ } from "./drafts/draft13/types.js";
78
301
 
79
302
  // Re-export draft-14 types
80
- export type { Draft14Codec } from './drafts/draft14/codec.js';
303
+ export type { Draft14Codec } from "./drafts/draft14/codec.js";
81
304
  export type {
305
+ Draft14DataStream,
82
306
  Draft14Message,
83
307
  Draft14Params,
84
- Draft14DataStream,
85
- } from './drafts/draft14/types.js';
308
+ } from "./drafts/draft14/types.js";
309
+
310
+ // Re-export draft-15 types
311
+ export type { Draft15Codec } from "./drafts/draft15/codec.js";
312
+ export type {
313
+ Draft15DataStream,
314
+ Draft15Message,
315
+ Draft15Params,
316
+ Draft15SetupParams,
317
+ } from "./drafts/draft15/types.js";
318
+
319
+ // Re-export draft-16 types
320
+ export type { Draft16Codec } from "./drafts/draft16/codec.js";
321
+ export type {
322
+ Draft16DataStream,
323
+ Draft16Message,
324
+ Draft16Params,
325
+ Draft16SetupParams,
326
+ } from "./drafts/draft16/types.js";
327
+
328
+ // Re-export draft-17 types
329
+ export type { Draft17Codec } from "./drafts/draft17/codec.js";
330
+ export type {
331
+ Draft17DataStream,
332
+ Draft17Message,
333
+ Draft17Params,
334
+ Draft17SetupOptions,
335
+ } from "./drafts/draft17/types.js";