@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,354 @@
1
+ // Draft-16 specific message types
2
+ // Field names use snake_case to match test vector JSON
3
+
4
+ // Unknown parameter for passthrough
5
+ export interface UnknownParam {
6
+ readonly id: string; // e.g. "0x21"
7
+ readonly length: number;
8
+ readonly raw_hex: string; // e.g. "deadbeef"
9
+ }
10
+
11
+ // Setup parameters (constant namespace across versions)
12
+ export interface Draft16SetupParams {
13
+ path?: string; // 0x01 odd
14
+ max_request_id?: bigint; // 0x02 even
15
+ max_auth_token_cache_size?: bigint; // 0x04 even
16
+ authority?: string; // 0x05 odd
17
+ moqt_implementation?: string; // 0x07 odd
18
+ unknown?: UnknownParam[];
19
+ }
20
+
21
+ // Subscription filter parameter
22
+ export interface SubscriptionFilter {
23
+ readonly filter_type: bigint;
24
+ readonly start_group?: bigint;
25
+ readonly start_object?: bigint;
26
+ readonly end_group?: bigint;
27
+ }
28
+
29
+ // Largest object location parameter
30
+ export interface LargestObject {
31
+ readonly group: bigint;
32
+ readonly object: bigint;
33
+ }
34
+
35
+ // Version-specific parameters (well-known + unknown)
36
+ export interface Draft16Params {
37
+ expires?: bigint; // 0x08 even
38
+ largest_object?: LargestObject; // 0x09 odd (length-prefixed)
39
+ subscriber_priority?: bigint; // 0x20 even
40
+ subscription_filter?: SubscriptionFilter; // 0x21 odd (length-prefixed)
41
+ group_order?: bigint; // 0x22 even
42
+ unknown?: UnknownParam[];
43
+ }
44
+
45
+ // Draft-16 message type tag union
46
+ export type Draft16MessageType =
47
+ | "client_setup"
48
+ | "server_setup"
49
+ | "subscribe"
50
+ | "subscribe_ok"
51
+ | "request_update"
52
+ | "unsubscribe"
53
+ | "publish"
54
+ | "publish_ok"
55
+ | "publish_done"
56
+ | "publish_namespace"
57
+ | "publish_namespace_done"
58
+ | "publish_namespace_cancel"
59
+ | "subscribe_namespace"
60
+ | "namespace"
61
+ | "namespace_done"
62
+ | "fetch"
63
+ | "fetch_ok"
64
+ | "fetch_cancel"
65
+ | "track_status"
66
+ | "request_ok"
67
+ | "request_error"
68
+ | "goaway"
69
+ | "max_request_id"
70
+ | "requests_blocked";
71
+
72
+ // Base
73
+ export interface Draft16BaseMessage {
74
+ readonly type: Draft16MessageType;
75
+ }
76
+
77
+ // Setup — ALPN handles version negotiation, no versions in messages
78
+ export interface Draft16ClientSetup extends Draft16BaseMessage {
79
+ readonly type: "client_setup";
80
+ readonly parameters: Draft16SetupParams;
81
+ }
82
+
83
+ export interface Draft16ServerSetup extends Draft16BaseMessage {
84
+ readonly type: "server_setup";
85
+ readonly parameters: Draft16SetupParams;
86
+ }
87
+
88
+ // Subscribe — fields moved to parameters
89
+ export interface Draft16Subscribe extends Draft16BaseMessage {
90
+ readonly type: "subscribe";
91
+ readonly request_id: bigint;
92
+ readonly track_namespace: string[];
93
+ readonly track_name: string;
94
+ readonly parameters: Draft16Params;
95
+ }
96
+
97
+ export interface Draft16SubscribeOk extends Draft16BaseMessage {
98
+ readonly type: "subscribe_ok";
99
+ readonly request_id: bigint;
100
+ readonly track_alias: bigint;
101
+ readonly parameters: Draft16Params;
102
+ }
103
+
104
+ // Renamed from subscribe_update in draft-15
105
+ export interface Draft16RequestUpdate extends Draft16BaseMessage {
106
+ readonly type: "request_update";
107
+ readonly request_id: bigint;
108
+ readonly existing_request_id: bigint;
109
+ readonly parameters: Draft16Params;
110
+ }
111
+
112
+ export interface Draft16Unsubscribe extends Draft16BaseMessage {
113
+ readonly type: "unsubscribe";
114
+ readonly request_id: bigint;
115
+ }
116
+
117
+ // Publish
118
+ export interface Draft16Publish extends Draft16BaseMessage {
119
+ readonly type: "publish";
120
+ readonly request_id: bigint;
121
+ readonly track_namespace: string[];
122
+ readonly track_name: string;
123
+ readonly track_alias: bigint;
124
+ readonly parameters: Draft16Params;
125
+ }
126
+
127
+ export interface Draft16PublishOk extends Draft16BaseMessage {
128
+ readonly type: "publish_ok";
129
+ readonly request_id: bigint;
130
+ readonly parameters: Draft16Params;
131
+ }
132
+
133
+ export interface Draft16PublishDone extends Draft16BaseMessage {
134
+ readonly type: "publish_done";
135
+ readonly request_id: bigint;
136
+ readonly status_code: bigint;
137
+ readonly stream_count: bigint;
138
+ readonly reason_phrase: string;
139
+ }
140
+
141
+ // Namespace
142
+ export interface Draft16PublishNamespace extends Draft16BaseMessage {
143
+ readonly type: "publish_namespace";
144
+ readonly request_id: bigint;
145
+ readonly track_namespace: string[];
146
+ readonly parameters: Draft16Params;
147
+ }
148
+
149
+ // Simplified in draft-16: just request_id
150
+ export interface Draft16PublishNamespaceDone extends Draft16BaseMessage {
151
+ readonly type: "publish_namespace_done";
152
+ readonly request_id: bigint;
153
+ }
154
+
155
+ // Changed in draft-16: request_id + error_code + reason_phrase
156
+ export interface Draft16PublishNamespaceCancel extends Draft16BaseMessage {
157
+ readonly type: "publish_namespace_cancel";
158
+ readonly request_id: bigint;
159
+ readonly error_code: bigint;
160
+ readonly reason_phrase: string;
161
+ }
162
+
163
+ // subscribe_namespace gains subscribe_options in draft-16
164
+ export interface Draft16SubscribeNamespace extends Draft16BaseMessage {
165
+ readonly type: "subscribe_namespace";
166
+ readonly request_id: bigint;
167
+ readonly namespace_prefix: string[];
168
+ readonly subscribe_options: bigint;
169
+ readonly parameters: Draft16Params;
170
+ }
171
+
172
+ // New in draft-16: NAMESPACE message
173
+ export interface Draft16Namespace extends Draft16BaseMessage {
174
+ readonly type: "namespace";
175
+ readonly namespace_suffix: string[];
176
+ }
177
+
178
+ // New in draft-16: NAMESPACE_DONE message
179
+ export interface Draft16NamespaceDone extends Draft16BaseMessage {
180
+ readonly type: "namespace_done";
181
+ readonly namespace_suffix: string[];
182
+ }
183
+
184
+ // unsubscribe_namespace is REMOVED in draft-16
185
+
186
+ // Fetch — same structure as draft-15
187
+ export interface StandaloneFetch {
188
+ readonly track_namespace: string[];
189
+ readonly track_name: string;
190
+ readonly start_group: bigint;
191
+ readonly start_object: bigint;
192
+ readonly end_group: bigint;
193
+ readonly end_object: bigint;
194
+ }
195
+
196
+ export interface JoiningFetch {
197
+ readonly joining_request_id: bigint;
198
+ readonly joining_start: bigint;
199
+ }
200
+
201
+ export interface Draft16Fetch extends Draft16BaseMessage {
202
+ readonly type: "fetch";
203
+ readonly request_id: bigint;
204
+ readonly fetch_type: bigint;
205
+ readonly standalone?: StandaloneFetch;
206
+ readonly joining?: JoiningFetch;
207
+ readonly parameters: Draft16Params;
208
+ }
209
+
210
+ export interface Draft16FetchOk extends Draft16BaseMessage {
211
+ readonly type: "fetch_ok";
212
+ readonly request_id: bigint;
213
+ readonly end_of_track: number; // uint8
214
+ readonly end_group: bigint;
215
+ readonly end_object: bigint;
216
+ readonly parameters: Draft16Params;
217
+ }
218
+
219
+ export interface Draft16FetchCancel extends Draft16BaseMessage {
220
+ readonly type: "fetch_cancel";
221
+ readonly request_id: bigint;
222
+ }
223
+
224
+ // Track Status
225
+ export interface Draft16TrackStatus extends Draft16BaseMessage {
226
+ readonly type: "track_status";
227
+ readonly request_id: bigint;
228
+ readonly track_namespace: string[];
229
+ readonly track_name: string;
230
+ readonly parameters: Draft16Params;
231
+ }
232
+
233
+ // Consolidated response messages
234
+ export interface Draft16RequestOk extends Draft16BaseMessage {
235
+ readonly type: "request_ok";
236
+ readonly request_id: bigint;
237
+ readonly parameters: Draft16Params;
238
+ }
239
+
240
+ // request_error gains retry_interval in draft-16
241
+ export interface Draft16RequestError extends Draft16BaseMessage {
242
+ readonly type: "request_error";
243
+ readonly request_id: bigint;
244
+ readonly error_code: bigint;
245
+ readonly retry_interval: bigint;
246
+ readonly reason_phrase: string;
247
+ }
248
+
249
+ // Session Control
250
+ export interface Draft16GoAway extends Draft16BaseMessage {
251
+ readonly type: "goaway";
252
+ readonly new_session_uri: string;
253
+ }
254
+
255
+ export interface Draft16MaxRequestId extends Draft16BaseMessage {
256
+ readonly type: "max_request_id";
257
+ readonly max_request_id: bigint;
258
+ }
259
+
260
+ export interface Draft16RequestsBlocked extends Draft16BaseMessage {
261
+ readonly type: "requests_blocked";
262
+ readonly maximum_request_id: bigint;
263
+ }
264
+
265
+ // Union of all draft-16 control messages
266
+ export type Draft16Message =
267
+ | Draft16ClientSetup
268
+ | Draft16ServerSetup
269
+ | Draft16Subscribe
270
+ | Draft16SubscribeOk
271
+ | Draft16RequestUpdate
272
+ | Draft16Unsubscribe
273
+ | Draft16Publish
274
+ | Draft16PublishOk
275
+ | Draft16PublishDone
276
+ | Draft16PublishNamespace
277
+ | Draft16PublishNamespaceDone
278
+ | Draft16PublishNamespaceCancel
279
+ | Draft16SubscribeNamespace
280
+ | Draft16Namespace
281
+ | Draft16NamespaceDone
282
+ | Draft16Fetch
283
+ | Draft16FetchOk
284
+ | Draft16FetchCancel
285
+ | Draft16TrackStatus
286
+ | Draft16RequestOk
287
+ | Draft16RequestError
288
+ | Draft16GoAway
289
+ | Draft16MaxRequestId
290
+ | Draft16RequestsBlocked;
291
+
292
+ // Data stream types (same as draft-15)
293
+ export interface ObjectPayload {
294
+ readonly type: "object";
295
+ readonly objectId: bigint;
296
+ readonly payloadLength: number;
297
+ readonly status?: bigint;
298
+ readonly payload: Uint8Array;
299
+ }
300
+
301
+ export interface SubgroupStream {
302
+ readonly type: "subgroup";
303
+ readonly headerType: number; // stream type byte (0x10-0x1D or 0x30-0x3D)
304
+ readonly trackAlias: bigint;
305
+ readonly groupId: bigint;
306
+ readonly subgroupId: bigint;
307
+ readonly publisherPriority: number;
308
+ readonly objects: ObjectPayload[];
309
+ }
310
+
311
+ export interface DatagramObject {
312
+ readonly type: "datagram";
313
+ readonly datagramType: number;
314
+ readonly trackAlias: bigint;
315
+ readonly groupId: bigint;
316
+ readonly objectId: bigint;
317
+ readonly publisherPriority: number;
318
+ readonly endOfGroup?: boolean;
319
+ readonly objectStatus?: bigint;
320
+ readonly payloadLength: number;
321
+ readonly payload: Uint8Array;
322
+ }
323
+
324
+ export interface FetchObjectPayload extends ObjectPayload {
325
+ readonly serializationFlags: number;
326
+ readonly groupId: bigint;
327
+ readonly subgroupId: bigint;
328
+ readonly publisherPriority: number;
329
+ }
330
+
331
+ export interface FetchStream {
332
+ readonly type: "fetch";
333
+ readonly requestId: bigint;
334
+ readonly objects: FetchObjectPayload[];
335
+ }
336
+
337
+ export type Draft16DataStream = SubgroupStream | DatagramObject | FetchStream;
338
+
339
+ // Streaming data stream decoder types
340
+ export interface SubgroupStreamHeader {
341
+ readonly type: "subgroup_header";
342
+ readonly trackAlias: bigint;
343
+ readonly groupId: bigint;
344
+ readonly subgroupId: bigint;
345
+ readonly publisherPriority: number;
346
+ }
347
+
348
+ export interface FetchStreamHeader {
349
+ readonly type: "fetch_header";
350
+ readonly requestId: bigint;
351
+ }
352
+
353
+ export type DataStreamHeader = SubgroupStreamHeader | FetchStreamHeader;
354
+ export type DataStreamEvent = DataStreamHeader | ObjectPayload;