@norskvideo/moq-net 0.1.8 → 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 (286) hide show
  1. package/README.md +2 -2
  2. package/announce.d.ts +7 -0
  3. package/announce.d.ts.map +1 -0
  4. package/announce.js +8 -0
  5. package/announce.js.map +1 -0
  6. package/announced.d.ts +49 -91
  7. package/announced.d.ts.map +1 -1
  8. package/announced.js +21 -156
  9. package/announced.js.map +1 -1
  10. package/bandwidth.d.ts +163 -0
  11. package/bandwidth.d.ts.map +1 -0
  12. package/bandwidth.js +304 -0
  13. package/bandwidth.js.map +1 -0
  14. package/bandwidth_api.d.ts +7 -0
  15. package/bandwidth_api.d.ts.map +1 -0
  16. package/bandwidth_api.js +8 -0
  17. package/bandwidth_api.js.map +1 -0
  18. package/broadcast.d.ts +44 -35
  19. package/broadcast.d.ts.map +1 -1
  20. package/broadcast.js +104 -60
  21. package/broadcast.js.map +1 -1
  22. package/connection/accept.d.ts +16 -1
  23. package/connection/accept.d.ts.map +1 -1
  24. package/connection/accept.js +52 -28
  25. package/connection/accept.js.map +1 -1
  26. package/connection/browser.d.ts.map +1 -1
  27. package/connection/browser.js +9 -7
  28. package/connection/browser.js.map +1 -1
  29. package/connection/connect.d.ts +30 -6
  30. package/connection/connect.d.ts.map +1 -1
  31. package/connection/connect.js +110 -54
  32. package/connection/connect.js.map +1 -1
  33. package/connection/established.d.ts +17 -21
  34. package/connection/established.d.ts.map +1 -1
  35. package/connection/established.js.map +1 -1
  36. package/connection/forward.d.ts +2 -0
  37. package/connection/forward.d.ts.map +1 -0
  38. package/connection/forward.js +173 -0
  39. package/connection/forward.js.map +1 -0
  40. package/connection/handshake.d.ts +1 -0
  41. package/connection/handshake.d.ts.map +1 -1
  42. package/connection/handshake.js +5 -2
  43. package/connection/handshake.js.map +1 -1
  44. package/connection/index.d.ts +5 -5
  45. package/connection/index.d.ts.map +1 -1
  46. package/connection/index.js +4 -5
  47. package/connection/index.js.map +1 -1
  48. package/connection/pool.d.ts +186 -0
  49. package/connection/pool.d.ts.map +1 -0
  50. package/connection/pool.js +361 -0
  51. package/connection/pool.js.map +1 -0
  52. package/connection/reload.d.ts +14 -93
  53. package/connection/reload.d.ts.map +1 -1
  54. package/connection/reload.js +217 -81
  55. package/connection/reload.js.map +1 -1
  56. package/connection/stats.d.ts +3 -26
  57. package/connection/stats.d.ts.map +1 -1
  58. package/connection/stats.js.map +1 -1
  59. package/connection/transport.d.ts +0 -7
  60. package/connection/transport.d.ts.map +1 -1
  61. package/consume.d.ts +1 -43
  62. package/consume.d.ts.map +1 -1
  63. package/consume.js +1 -1
  64. package/consume.js.map +1 -1
  65. package/error.d.ts +180 -29
  66. package/error.d.ts.map +1 -1
  67. package/error.js +331 -16
  68. package/error.js.map +1 -1
  69. package/errors.d.ts +7 -0
  70. package/errors.d.ts.map +1 -0
  71. package/errors.js +8 -0
  72. package/errors.js.map +1 -0
  73. package/group.d.ts +9 -43
  74. package/group.d.ts.map +1 -1
  75. package/group.js +284 -69
  76. package/group.js.map +1 -1
  77. package/hop.d.ts +115 -0
  78. package/hop.d.ts.map +1 -0
  79. package/hop.js +119 -0
  80. package/hop.js.map +1 -0
  81. package/ietf/adapter.d.ts +5 -1
  82. package/ietf/adapter.d.ts.map +1 -1
  83. package/ietf/adapter.js +105 -60
  84. package/ietf/adapter.js.map +1 -1
  85. package/ietf/aliases.d.ts +1 -78
  86. package/ietf/aliases.d.ts.map +1 -1
  87. package/ietf/cluster.d.ts +9 -123
  88. package/ietf/cluster.d.ts.map +1 -1
  89. package/ietf/cluster.js +84 -44
  90. package/ietf/cluster.js.map +1 -1
  91. package/ietf/connection.d.ts +6 -72
  92. package/ietf/connection.d.ts.map +1 -1
  93. package/ietf/connection.js +62 -56
  94. package/ietf/connection.js.map +1 -1
  95. package/ietf/error.d.ts +11 -0
  96. package/ietf/error.d.ts.map +1 -0
  97. package/ietf/error.js +193 -0
  98. package/ietf/error.js.map +1 -0
  99. package/ietf/fetch.d.ts +7 -20
  100. package/ietf/fetch.d.ts.map +1 -1
  101. package/ietf/fetch.js +52 -22
  102. package/ietf/fetch.js.map +1 -1
  103. package/ietf/filter.d.ts +2 -0
  104. package/ietf/filter.d.ts.map +1 -1
  105. package/ietf/filter.js +10 -1
  106. package/ietf/filter.js.map +1 -1
  107. package/ietf/goaway.d.ts.map +1 -1
  108. package/ietf/goaway.js +22 -5
  109. package/ietf/goaway.js.map +1 -1
  110. package/ietf/hidden.d.ts +2 -0
  111. package/ietf/hidden.d.ts.map +1 -0
  112. package/ietf/hidden.js +30 -0
  113. package/ietf/hidden.js.map +1 -0
  114. package/ietf/index.d.ts +2 -0
  115. package/ietf/index.d.ts.map +1 -1
  116. package/ietf/index.js +2 -0
  117. package/ietf/index.js.map +1 -1
  118. package/ietf/object.d.ts +15 -8
  119. package/ietf/object.d.ts.map +1 -1
  120. package/ietf/object.js +51 -36
  121. package/ietf/object.js.map +1 -1
  122. package/ietf/parameters.d.ts +14 -2
  123. package/ietf/parameters.d.ts.map +1 -1
  124. package/ietf/parameters.js +97 -29
  125. package/ietf/parameters.js.map +1 -1
  126. package/ietf/properties.d.ts +1 -0
  127. package/ietf/properties.d.ts.map +1 -1
  128. package/ietf/properties.js +14 -0
  129. package/ietf/properties.js.map +1 -1
  130. package/ietf/publish.d.ts +19 -2
  131. package/ietf/publish.d.ts.map +1 -1
  132. package/ietf/publish.js +40 -6
  133. package/ietf/publish.js.map +1 -1
  134. package/ietf/publish_namespace.d.ts +25 -0
  135. package/ietf/publish_namespace.d.ts.map +1 -1
  136. package/ietf/publish_namespace.js +63 -0
  137. package/ietf/publish_namespace.js.map +1 -1
  138. package/ietf/publisher.d.ts +1 -82
  139. package/ietf/publisher.d.ts.map +1 -1
  140. package/ietf/publisher.js +483 -235
  141. package/ietf/publisher.js.map +1 -1
  142. package/ietf/solicit.d.ts +1 -40
  143. package/ietf/solicit.d.ts.map +1 -1
  144. package/ietf/subscribe.d.ts +8 -6
  145. package/ietf/subscribe.d.ts.map +1 -1
  146. package/ietf/subscribe.js +33 -27
  147. package/ietf/subscribe.js.map +1 -1
  148. package/ietf/subscribe_namespace.d.ts +8 -2
  149. package/ietf/subscribe_namespace.d.ts.map +1 -1
  150. package/ietf/subscribe_namespace.js +18 -8
  151. package/ietf/subscribe_namespace.js.map +1 -1
  152. package/ietf/subscriber.d.ts +1 -65
  153. package/ietf/subscriber.d.ts.map +1 -1
  154. package/ietf/subscriber.js +337 -123
  155. package/ietf/subscriber.js.map +1 -1
  156. package/ietf/token.d.ts +2 -0
  157. package/ietf/token.d.ts.map +1 -0
  158. package/ietf/token.js +99 -0
  159. package/ietf/token.js.map +1 -0
  160. package/ietf/track.d.ts +4 -0
  161. package/ietf/track.d.ts.map +1 -1
  162. package/ietf/track.js +6 -20
  163. package/ietf/track.js.map +1 -1
  164. package/ietf/version.d.ts +12 -1
  165. package/ietf/version.d.ts.map +1 -1
  166. package/ietf/version.js +13 -0
  167. package/ietf/version.js.map +1 -1
  168. package/index.d.ts +12 -7
  169. package/index.d.ts.map +1 -1
  170. package/index.js +10 -5
  171. package/index.js.map +1 -1
  172. package/internal.d.ts +115 -1
  173. package/internal.d.ts.map +1 -1
  174. package/internal.js +108 -0
  175. package/internal.js.map +1 -1
  176. package/lite/announce.d.ts +60 -10
  177. package/lite/announce.d.ts.map +1 -1
  178. package/lite/announce.js +176 -31
  179. package/lite/announce.js.map +1 -1
  180. package/lite/connection.d.ts +9 -59
  181. package/lite/connection.d.ts.map +1 -1
  182. package/lite/connection.js +34 -35
  183. package/lite/connection.js.map +1 -1
  184. package/lite/datagram.d.ts +3 -2
  185. package/lite/datagram.d.ts.map +1 -1
  186. package/lite/datagram.js +7 -8
  187. package/lite/datagram.js.map +1 -1
  188. package/lite/fetch.d.ts +15 -1
  189. package/lite/fetch.d.ts.map +1 -1
  190. package/lite/fetch.js +39 -7
  191. package/lite/fetch.js.map +1 -1
  192. package/lite/goaway.d.ts.map +1 -1
  193. package/lite/goaway.js +7 -1
  194. package/lite/goaway.js.map +1 -1
  195. package/lite/group.d.ts +30 -12
  196. package/lite/group.d.ts.map +1 -1
  197. package/lite/group.js +68 -26
  198. package/lite/group.js.map +1 -1
  199. package/lite/message.d.ts +2 -2
  200. package/lite/message.d.ts.map +1 -1
  201. package/lite/message.js +14 -5
  202. package/lite/message.js.map +1 -1
  203. package/lite/priority.d.ts +1 -61
  204. package/lite/priority.d.ts.map +1 -1
  205. package/lite/priority.js +4 -5
  206. package/lite/priority.js.map +1 -1
  207. package/lite/publisher.d.ts +1 -69
  208. package/lite/publisher.d.ts.map +1 -1
  209. package/lite/publisher.js +630 -262
  210. package/lite/publisher.js.map +1 -1
  211. package/lite/setup.d.ts +8 -8
  212. package/lite/setup.d.ts.map +1 -1
  213. package/lite/setup.js +33 -30
  214. package/lite/setup.js.map +1 -1
  215. package/lite/subscribe.d.ts +71 -17
  216. package/lite/subscribe.d.ts.map +1 -1
  217. package/lite/subscribe.js +205 -53
  218. package/lite/subscribe.js.map +1 -1
  219. package/lite/subscriber.d.ts +15 -56
  220. package/lite/subscriber.d.ts.map +1 -1
  221. package/lite/subscriber.js +451 -247
  222. package/lite/subscriber.js.map +1 -1
  223. package/lite/track.d.ts +4 -10
  224. package/lite/track.d.ts.map +1 -1
  225. package/lite/track.js +34 -29
  226. package/lite/track.js.map +1 -1
  227. package/lite/version.d.ts +42 -6
  228. package/lite/version.d.ts.map +1 -1
  229. package/lite/version.js +126 -10
  230. package/lite/version.js.map +1 -1
  231. package/origin.d.ts +256 -29
  232. package/origin.d.ts.map +1 -1
  233. package/origin.js +1427 -37
  234. package/origin.js.map +1 -1
  235. package/package.json +8 -3
  236. package/path.d.ts +25 -7
  237. package/path.d.ts.map +1 -1
  238. package/path.js +5 -3
  239. package/path.js.map +1 -1
  240. package/stream.d.ts +73 -14
  241. package/stream.d.ts.map +1 -1
  242. package/stream.js +372 -141
  243. package/stream.js.map +1 -1
  244. package/tail.d.ts +18 -0
  245. package/tail.d.ts.map +1 -0
  246. package/tail.js +167 -0
  247. package/tail.js.map +1 -0
  248. package/time.d.ts +15 -2
  249. package/time.d.ts.map +1 -1
  250. package/time.js +28 -9
  251. package/time.js.map +1 -1
  252. package/track.d.ts +211 -83
  253. package/track.d.ts.map +1 -1
  254. package/track.js +816 -205
  255. package/track.js.map +1 -1
  256. package/util/abort.d.ts +2 -0
  257. package/util/abort.d.ts.map +1 -0
  258. package/util/abort.js +20 -0
  259. package/util/abort.js.map +1 -0
  260. package/util/log.d.ts +5 -0
  261. package/util/log.d.ts.map +1 -0
  262. package/util/log.js +17 -0
  263. package/util/log.js.map +1 -0
  264. package/util/u64.d.ts +39 -0
  265. package/util/u64.d.ts.map +1 -0
  266. package/util/u64.js +83 -0
  267. package/util/u64.js.map +1 -0
  268. package/util/varint.d.ts +29 -0
  269. package/util/varint.d.ts.map +1 -0
  270. package/util/varint.js +198 -0
  271. package/util/varint.js.map +1 -0
  272. package/varint.d.ts +10 -6
  273. package/varint.d.ts.map +1 -1
  274. package/varint.js +40 -237
  275. package/varint.js.map +1 -1
  276. package/wire.d.ts +80 -0
  277. package/wire.d.ts.map +1 -0
  278. package/wire.js +32 -0
  279. package/wire.js.map +1 -0
  280. package/zod.d.ts +1 -1
  281. package/zod.d.ts.map +1 -1
  282. package/zod.js.map +1 -1
  283. package/mock.d.ts +0 -66
  284. package/mock.d.ts.map +0 -1
  285. package/mock.js +0 -243
  286. package/mock.js.map +0 -1
@@ -8,6 +8,7 @@ import { type IetfVersion } from "./version";
8
8
  export declare const DESCENDING = 2;
9
9
  export interface Properties {
10
10
  timescale?: Timescale;
11
+ priority?: number;
11
12
  groupOrder?: number;
12
13
  }
13
14
  export declare function encode(w: Writer, properties: Properties, version: IetfVersion): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../src/ietf/properties.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,cAAc,CAAC;AAazD;;;GAGG;AACH,eAAO,MAAM,UAAU,IAAO,CAAC;AAG/B,MAAM,WAAW,UAAU;IAI1B,SAAS,CAAC,EAAE,SAAS,CAAC;IAMtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD,wBAAsB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBnG;AAYD,wBAAsB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAwCjF"}
1
+ {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../src/ietf/properties.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,cAAc,CAAC;AAczD;;;GAGG;AACH,eAAO,MAAM,UAAU,IAAO,CAAC;AAG/B,MAAM,WAAW,UAAU;IAI1B,SAAS,CAAC,EAAE,SAAS,CAAC;IAGtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAMlB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD,wBAAsB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BnG;AAYD,wBAAsB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA2CjF"}
@@ -9,6 +9,7 @@ const TIMESCALE = 0x08n;
9
9
  // It shares its number with the GROUP_ORDER *message parameter*, which is a different
10
10
  // registry: that one is only legal in SUBSCRIBE, PUBLISH_OK, and FETCH, where the
11
11
  // subscriber states its own preference.
12
+ const DEFAULT_PUBLISHER_PRIORITY = 0x0en;
12
13
  const DEFAULT_PUBLISHER_GROUP_ORDER = 0x22n;
13
14
  /**
14
15
  * DEFAULT_PUBLISHER_GROUP_ORDER's descending value: the newest group first, which is what
@@ -33,6 +34,14 @@ export async function encode(w, properties, version) {
33
34
  await w.u62(BigInt(properties.timescale));
34
35
  prevType = TIMESCALE;
35
36
  }
37
+ if (properties.priority !== undefined) {
38
+ if (!Number.isInteger(properties.priority) || properties.priority < 0 || properties.priority > 255) {
39
+ throw new RangeError(`invalid publisher priority: ${properties.priority}`);
40
+ }
41
+ await w.u62(DEFAULT_PUBLISHER_PRIORITY - prevType);
42
+ await w.u62(BigInt(properties.priority));
43
+ prevType = DEFAULT_PUBLISHER_PRIORITY;
44
+ }
36
45
  if (properties.groupOrder !== undefined) {
37
46
  await w.u62(DEFAULT_PUBLISHER_GROUP_ORDER - prevType);
38
47
  await w.u62(BigInt(properties.groupOrder));
@@ -70,6 +79,11 @@ export async function decode(r, version) {
70
79
  // failing the whole message over one property we could have ignored.
71
80
  properties.timescale = Timescale(Number(value));
72
81
  }
82
+ else if (abs === DEFAULT_PUBLISHER_PRIORITY) {
83
+ if (value > 255n)
84
+ throw new Error(`invalid publisher priority: ${value}`);
85
+ properties.priority = Number(value);
86
+ }
73
87
  else if (abs === DEFAULT_PUBLISHER_GROUP_ORDER) {
74
88
  // Only Ascending (0x1) and Descending (0x2) are defined here. Unlike the draft-14
75
89
  // fields, 0x0 has no "publisher decides" meaning to fall back on.
@@ -1 +1 @@
1
- {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../src/ietf/properties.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAoB,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,wFAAwF;AACxF,qFAAqF;AACrF,0DAA0D;AAC1D,MAAM,SAAS,GAAG,KAAK,CAAC;AAExB,2FAA2F;AAC3F,sFAAsF;AACtF,kFAAkF;AAClF,wCAAwC;AACxC,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAgB/B,wFAAwF;AACxF,iDAAiD;AACjD,GAAG;AACH,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,CAAS,EAAE,UAAsB,EAAE,OAAoB;IACnF,wFAAwF;IACxF,yFAAyF;IACzF,yFAAyF;IACzF,uDAAuD;IACvD,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;QAClG,OAAO;IACR,CAAC;IAED,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1C,QAAQ,GAAG,SAAS,CAAC;IACtB,CAAC;IAED,IAAI,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACzC,MAAM,CAAC,CAAC,GAAG,CAAC,6BAA6B,GAAG,QAAQ,CAAC,CAAC;QACtD,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5C,CAAC;AACF,CAAC;AAED,iEAAiE;AACjE,GAAG;AACH,sEAAsE;AACtE,oEAAoE;AACpE,+BAA+B;AAC/B,GAAG;AACH,0FAA0F;AAC1F,wEAAwE;AACxE,GAAG;AACH,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,CAAS,EAAE,OAAoB;IAC3D,2FAA2F;IAC3F,mEAAmE;IACnE,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;QAClE,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,UAAU,GAAe,EAAE,CAAC;IAClC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC/C,QAAQ,GAAG,GAAG,CAAC;QACf,CAAC,EAAE,CAAC;QAEJ,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;YACrB,iCAAiC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YAC5B,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;gBACrC,sEAAsE;gBACtE,qEAAqE;gBACrE,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,GAAG,KAAK,6BAA6B,EAAE,CAAC;gBAClD,kFAAkF;gBAClF,kEAAkE;gBAClE,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,EAAE,CAAC,CAAC;gBAClD,CAAC;gBACD,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACvC,CAAC;QACF,CAAC;aAAM,CAAC;YACP,kCAAkC;YAClC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACF,CAAC;IAED,OAAO,UAAU,CAAC;AACnB,CAAC","sourcesContent":["import type { Reader, Writer } from \"../stream.ts\";\nimport { Timescale } from \"../time.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// TIMESCALE (0x08), from the MOQ Properties registry shared with draft-ietf-moq-loc-04.\n// Track scope: it declares the units of every object Timestamp on the track, and its\n// presence is what opts the track into timestamps at all.\nconst TIMESCALE = 0x08n;\n\n// DEFAULT_PUBLISHER_GROUP_ORDER (0x22), the publisher's delivery preference for the track.\n// It shares its number with the GROUP_ORDER *message parameter*, which is a different\n// registry: that one is only legal in SUBSCRIBE, PUBLISH_OK, and FETCH, where the\n// subscriber states its own preference.\nconst DEFAULT_PUBLISHER_GROUP_ORDER = 0x22n;\n\n/**\n * DEFAULT_PUBLISHER_GROUP_ORDER's descending value: the newest group first, which is what\n * we serve, matching moq-lite.\n */\nexport const DESCENDING = 0x02;\n\n/// The Track Properties block carried at the end of SUBSCRIBE_OK, PUBLISH, and FETCH_OK.\nexport interface Properties {\n\t/// The track's Timescale, which declares the units of every object Timestamp on it.\n\t///\n\t/// `undefined` declares no timeline, so the subscriber times objects by arrival.\n\ttimescale?: Timescale;\n\n\t/// The publisher's preference for prioritizing groups within a subscription,\n\t/// Ascending (0x1) or Descending (0x2).\n\t///\n\t/// `undefined` means the draft default, Ascending.\n\tgroupOrder?: number;\n}\n\n/// Write the block, which is the final field of the message: no count and no length, so\n/// the caller must not append anything after it.\n///\n/// Properties are serialized in ascending order by type, delta-encoded.\nexport async function encode(w: Writer, properties: Properties, version: IetfVersion): Promise<void> {\n\t// Draft-16 carries the same block under the name Track Extensions, but we only write it\n\t// from draft-17 on: a draft-16 peer running an older build rejects any trailing bytes it\n\t// doesn't parse, and draft-16 never registered TIMESCALE (0x08). We still read the block\n\t// on draft-16, so a peer that sends one is understood.\n\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\treturn;\n\t}\n\n\tlet prevType = 0n;\n\n\tif (properties.timescale !== undefined) {\n\t\tawait w.u62(TIMESCALE);\n\t\tawait w.u62(BigInt(properties.timescale));\n\t\tprevType = TIMESCALE;\n\t}\n\n\tif (properties.groupOrder !== undefined) {\n\t\tawait w.u62(DEFAULT_PUBLISHER_GROUP_ORDER - prevType);\n\t\tawait w.u62(BigInt(properties.groupOrder));\n\t}\n}\n\n/// Parse Track Properties from the remaining bytes of a message.\n///\n/// Track Properties are delta-encoded Key-Value-Pairs (same format as\n/// Message Parameters) but with NO count prefix: they extend to the\n/// end of the message payload.\n///\n/// Unlike an unknown message parameter, an unknown property is skipped rather than fatal,\n/// which is what lets a relay forward properties it does not implement.\n///\n/// Drafts before 16 have no such block, so this reads nothing and leaves the reader alone.\nexport async function decode(r: Reader, version: IetfVersion): Promise<Properties> {\n\t// Draft-16 calls the block Track Extensions, draft-17+ Track Properties. Same encoding, so\n\t// read either rather than faulting the message for trailing bytes.\n\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15) {\n\t\treturn {};\n\t}\n\n\tconst properties: Properties = {};\n\tlet prevType = 0n;\n\tlet i = 0;\n\n\twhile (!(await r.done())) {\n\t\tconst delta = await r.u62();\n\t\tconst abs = i === 0 ? delta : prevType + delta;\n\t\tprevType = abs;\n\t\ti++;\n\n\t\tif (abs % 2n === 0n) {\n\t\t\t// Even type: single varint value\n\t\t\tconst value = await r.u62();\n\t\t\tif (abs === TIMESCALE && value > 0n) {\n\t\t\t\t// A zero timescale is invalid; treat it as no declaration rather than\n\t\t\t\t// failing the whole message over one property we could have ignored.\n\t\t\t\tproperties.timescale = Timescale(Number(value));\n\t\t\t} else if (abs === DEFAULT_PUBLISHER_GROUP_ORDER) {\n\t\t\t\t// Only Ascending (0x1) and Descending (0x2) are defined here. Unlike the draft-14\n\t\t\t\t// fields, 0x0 has no \"publisher decides\" meaning to fall back on.\n\t\t\t\tif (value < 1n || value > 2n) {\n\t\t\t\t\tthrow new Error(`unknown group order: ${value}`);\n\t\t\t\t}\n\t\t\t\tproperties.groupOrder = Number(value);\n\t\t\t}\n\t\t} else {\n\t\t\t// Odd type: length-prefixed bytes\n\t\t\tconst len = await r.u53();\n\t\t\tawait r.read(len);\n\t\t}\n\t}\n\n\treturn properties;\n}\n"]}
1
+ {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../src/ietf/properties.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Reader, Writer } from \"../stream.ts\";\nimport { Timescale } from \"../time.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// TIMESCALE (0x08), from the MOQ Properties registry shared with draft-ietf-moq-loc-04.\n// Track scope: it declares the units of every object Timestamp on the track, and its\n// presence is what opts the track into timestamps at all.\nconst TIMESCALE = 0x08n;\n\n// DEFAULT_PUBLISHER_GROUP_ORDER (0x22), the publisher's delivery preference for the track.\n// It shares its number with the GROUP_ORDER *message parameter*, which is a different\n// registry: that one is only legal in SUBSCRIBE, PUBLISH_OK, and FETCH, where the\n// subscriber states its own preference.\nconst DEFAULT_PUBLISHER_PRIORITY = 0x0en;\nconst DEFAULT_PUBLISHER_GROUP_ORDER = 0x22n;\n\n/**\n * DEFAULT_PUBLISHER_GROUP_ORDER's descending value: the newest group first, which is what\n * we serve, matching moq-lite.\n */\nexport const DESCENDING = 0x02;\n\n/// The Track Properties block carried at the end of SUBSCRIBE_OK, PUBLISH, and FETCH_OK.\nexport interface Properties {\n\t/// The track's Timescale, which declares the units of every object Timestamp on it.\n\t///\n\t/// `undefined` declares no timeline, so the subscriber times objects by arrival.\n\ttimescale?: Timescale;\n\n\t/// Publisher priority for a group header without its priority flag. The wire default is 128.\n\tpriority?: number;\n\n\t/// The publisher's preference for prioritizing groups within a subscription,\n\t/// Ascending (0x1) or Descending (0x2).\n\t///\n\t/// `undefined` means the draft default, Ascending.\n\tgroupOrder?: number;\n}\n\n/// Write the block, which is the final field of the message: no count and no length, so\n/// the caller must not append anything after it.\n///\n/// Properties are serialized in ascending order by type, delta-encoded.\nexport async function encode(w: Writer, properties: Properties, version: IetfVersion): Promise<void> {\n\t// Draft-16 carries the same block under the name Track Extensions, but we only write it\n\t// from draft-17 on: a draft-16 peer running an older build rejects any trailing bytes it\n\t// doesn't parse, and draft-16 never registered TIMESCALE (0x08). We still read the block\n\t// on draft-16, so a peer that sends one is understood.\n\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\treturn;\n\t}\n\n\tlet prevType = 0n;\n\n\tif (properties.timescale !== undefined) {\n\t\tawait w.u62(TIMESCALE);\n\t\tawait w.u62(BigInt(properties.timescale));\n\t\tprevType = TIMESCALE;\n\t}\n\n\tif (properties.priority !== undefined) {\n\t\tif (!Number.isInteger(properties.priority) || properties.priority < 0 || properties.priority > 255) {\n\t\t\tthrow new RangeError(`invalid publisher priority: ${properties.priority}`);\n\t\t}\n\t\tawait w.u62(DEFAULT_PUBLISHER_PRIORITY - prevType);\n\t\tawait w.u62(BigInt(properties.priority));\n\t\tprevType = DEFAULT_PUBLISHER_PRIORITY;\n\t}\n\n\tif (properties.groupOrder !== undefined) {\n\t\tawait w.u62(DEFAULT_PUBLISHER_GROUP_ORDER - prevType);\n\t\tawait w.u62(BigInt(properties.groupOrder));\n\t}\n}\n\n/// Parse Track Properties from the remaining bytes of a message.\n///\n/// Track Properties are delta-encoded Key-Value-Pairs (same format as\n/// Message Parameters) but with NO count prefix: they extend to the\n/// end of the message payload.\n///\n/// Unlike an unknown message parameter, an unknown property is skipped rather than fatal,\n/// which is what lets a relay forward properties it does not implement.\n///\n/// Drafts before 16 have no such block, so this reads nothing and leaves the reader alone.\nexport async function decode(r: Reader, version: IetfVersion): Promise<Properties> {\n\t// Draft-16 calls the block Track Extensions, draft-17+ Track Properties. Same encoding, so\n\t// read either rather than faulting the message for trailing bytes.\n\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15) {\n\t\treturn {};\n\t}\n\n\tconst properties: Properties = {};\n\tlet prevType = 0n;\n\tlet i = 0;\n\n\twhile (!(await r.done())) {\n\t\tconst delta = await r.u62();\n\t\tconst abs = i === 0 ? delta : prevType + delta;\n\t\tprevType = abs;\n\t\ti++;\n\n\t\tif (abs % 2n === 0n) {\n\t\t\t// Even type: single varint value\n\t\t\tconst value = await r.u62();\n\t\t\tif (abs === TIMESCALE && value > 0n) {\n\t\t\t\t// A zero timescale is invalid; treat it as no declaration rather than\n\t\t\t\t// failing the whole message over one property we could have ignored.\n\t\t\t\tproperties.timescale = Timescale(Number(value));\n\t\t\t} else if (abs === DEFAULT_PUBLISHER_PRIORITY) {\n\t\t\t\tif (value > 255n) throw new Error(`invalid publisher priority: ${value}`);\n\t\t\t\tproperties.priority = Number(value);\n\t\t\t} else if (abs === DEFAULT_PUBLISHER_GROUP_ORDER) {\n\t\t\t\t// Only Ascending (0x1) and Descending (0x2) are defined here. Unlike the draft-14\n\t\t\t\t// fields, 0x0 has no \"publisher decides\" meaning to fall back on.\n\t\t\t\tif (value < 1n || value > 2n) {\n\t\t\t\t\tthrow new Error(`unknown group order: ${value}`);\n\t\t\t\t}\n\t\t\t\tproperties.groupOrder = Number(value);\n\t\t\t}\n\t\t} else {\n\t\t\t// Odd type: length-prefixed bytes\n\t\t\tconst len = await r.u53();\n\t\t\tawait r.read(len);\n\t\t}\n\t}\n\n\treturn properties;\n}\n"]}
package/ietf/publish.d.ts CHANGED
@@ -9,18 +9,20 @@ export declare class Publish {
9
9
  trackName: string;
10
10
  trackAlias: bigint;
11
11
  groupOrder: number;
12
+ priority?: number;
12
13
  contentExists: boolean;
13
14
  largest: {
14
15
  groupId: bigint;
15
16
  objectId: bigint;
16
17
  } | undefined;
17
18
  forward: boolean;
18
- constructor({ requestId, trackNamespace, trackName, trackAlias, groupOrder, contentExists, largest, forward, }: {
19
+ constructor({ requestId, trackNamespace, trackName, trackAlias, groupOrder, priority, contentExists, largest, forward, }: {
19
20
  requestId: bigint;
20
21
  trackNamespace: Path.Valid;
21
22
  trackName: string;
22
23
  trackAlias: bigint;
23
24
  groupOrder: number;
25
+ priority?: number;
24
26
  contentExists: boolean;
25
27
  largest: {
26
28
  groupId: bigint;
@@ -51,15 +53,30 @@ export declare class PublishError {
51
53
  encode(w: Writer, _version: IetfVersion): Promise<void>;
52
54
  static decode(r: Reader, _version: IetfVersion): Promise<PublishError>;
53
55
  }
56
+ /** PUBLISH_DONE status codes this implementation distinguishes. Stable across drafts 14 through 22. */
57
+ export declare const PublishDoneStatus: {
58
+ readonly INTERNAL_ERROR: 0;
59
+ readonly TRACK_ENDED: 2;
60
+ /** Removed in draft-20, where 0x3 is unassigned. */
61
+ readonly SUBSCRIPTION_ENDED: 3;
62
+ };
63
+ /** Whether a PUBLISH_DONE status ends the track cleanly rather than aborting it. */
64
+ export declare function publishDoneClean(statusCode: number, version: IetfVersion): boolean;
54
65
  export declare class PublishDone {
55
66
  #private;
56
67
  static readonly id = 11;
57
68
  requestId: bigint | undefined;
58
69
  statusCode: number;
70
+ /**
71
+ * How many data streams the publisher opened for the subscription, fill streams included.
72
+ * A hint: a peer may send 0 or the "unknown" sentinel regardless.
73
+ */
74
+ streamCount: bigint;
59
75
  reasonPhrase: string;
60
- constructor({ requestId, statusCode, reasonPhrase, }: {
76
+ constructor({ requestId, statusCode, streamCount, reasonPhrase, }: {
61
77
  requestId?: bigint;
62
78
  statusCode: number;
79
+ streamCount?: bigint;
63
80
  reasonPhrase: string;
64
81
  });
65
82
  encode(w: Writer, version: IetfVersion): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/ietf/publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/ietf/publish.ts"],"names":[],"mappings":"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"}
package/ietf/publish.js CHANGED
@@ -12,15 +12,17 @@ export class Publish {
12
12
  trackName;
13
13
  trackAlias;
14
14
  groupOrder;
15
+ priority;
15
16
  contentExists;
16
17
  largest;
17
18
  forward;
18
- constructor({ requestId, trackNamespace, trackName, trackAlias, groupOrder, contentExists, largest, forward, }) {
19
+ constructor({ requestId, trackNamespace, trackName, trackAlias, groupOrder, priority, contentExists, largest, forward, }) {
19
20
  this.requestId = requestId;
20
21
  this.trackNamespace = trackNamespace;
21
22
  this.trackName = trackName;
22
23
  this.trackAlias = trackAlias;
23
24
  this.groupOrder = groupOrder;
25
+ this.priority = priority;
24
26
  this.contentExists = contentExists;
25
27
  this.largest = largest;
26
28
  this.forward = forward;
@@ -65,7 +67,7 @@ export class Publish {
65
67
  }
66
68
  await params.encode(w, version);
67
69
  // Track Properties are the final field, so nothing may follow.
68
- await Properties.encode(w, { groupOrder: this.groupOrder }, version);
70
+ await Properties.encode(w, { groupOrder: this.groupOrder, priority: this.priority }, version);
69
71
  }
70
72
  }
71
73
  async encode(w, version) {
@@ -113,6 +115,7 @@ export class Publish {
113
115
  trackName,
114
116
  trackAlias,
115
117
  groupOrder,
118
+ priority: properties.priority,
116
119
  contentExists: !!largest,
117
120
  largest,
118
121
  forward,
@@ -162,15 +165,46 @@ export class PublishError {
162
165
  return new PublishError({ requestId, errorCode, reasonPhrase });
163
166
  }
164
167
  }
168
+ /** PUBLISH_DONE status codes this implementation distinguishes. Stable across drafts 14 through 22. */
169
+ export const PublishDoneStatus = {
170
+ INTERNAL_ERROR: 0x0,
171
+ TRACK_ENDED: 0x2,
172
+ /** Removed in draft-20, where 0x3 is unassigned. */
173
+ SUBSCRIPTION_ENDED: 0x3,
174
+ };
175
+ /** Whether a PUBLISH_DONE status ends the track cleanly rather than aborting it. */
176
+ export function publishDoneClean(statusCode, version) {
177
+ if (statusCode === PublishDoneStatus.TRACK_ENDED)
178
+ return true;
179
+ if (statusCode !== PublishDoneStatus.SUBSCRIPTION_ENDED)
180
+ return false;
181
+ switch (version) {
182
+ case Version.DRAFT_14:
183
+ case Version.DRAFT_15:
184
+ case Version.DRAFT_16:
185
+ case Version.DRAFT_17:
186
+ case Version.DRAFT_18:
187
+ case Version.DRAFT_19:
188
+ return true;
189
+ default:
190
+ return false;
191
+ }
192
+ }
165
193
  // In draft-14, this message is renamed from SUBSCRIBE_DONE to PUBLISH_DONE
166
194
  export class PublishDone {
167
195
  static id = 0x0b;
168
196
  requestId;
169
197
  statusCode;
198
+ /**
199
+ * How many data streams the publisher opened for the subscription, fill streams included.
200
+ * A hint: a peer may send 0 or the "unknown" sentinel regardless.
201
+ */
202
+ streamCount;
170
203
  reasonPhrase;
171
- constructor({ requestId, statusCode, reasonPhrase, }) {
204
+ constructor({ requestId, statusCode, streamCount = 0n, reasonPhrase, }) {
172
205
  this.requestId = requestId;
173
206
  this.statusCode = statusCode;
207
+ this.streamCount = streamCount;
174
208
  this.reasonPhrase = reasonPhrase;
175
209
  }
176
210
  async #encode(w, version) {
@@ -180,7 +214,7 @@ export class PublishDone {
180
214
  await w.u62(this.requestId);
181
215
  }
182
216
  await w.u62(BigInt(this.statusCode));
183
- await w.u62(BigInt(0)); // stream_count = 0 (unsupported)
217
+ await w.u62(this.streamCount);
184
218
  await w.string(this.reasonPhrase);
185
219
  }
186
220
  async encode(w, version) {
@@ -194,9 +228,9 @@ export class PublishDone {
194
228
  ? await r.u62()
195
229
  : undefined;
196
230
  const statusCode = Number(await r.u62());
197
- await r.u62(); // ignore stream_count
231
+ const streamCount = await r.u62();
198
232
  const reasonPhrase = await r.string();
199
- return new PublishDone({ requestId, statusCode, reasonPhrase });
233
+ return new PublishDone({ requestId, statusCode, streamCount, reasonPhrase });
200
234
  }
201
235
  }
202
236
  //# sourceMappingURL=publish.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/ietf/publish.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Parameters } from \"./parameters.ts\";\nimport * as Properties from \"./properties.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// PUBLISH messages are new in draft-14\n\nexport class Publish {\n\tstatic id = 0x1d;\n\n\trequestId: bigint;\n\ttrackNamespace: Path.Valid;\n\ttrackName: string;\n\ttrackAlias: bigint;\n\tgroupOrder: number;\n\tcontentExists: boolean;\n\tlargest: { groupId: bigint; objectId: bigint } | undefined;\n\tforward: boolean;\n\n\tconstructor({\n\t\trequestId,\n\t\ttrackNamespace,\n\t\ttrackName,\n\t\ttrackAlias,\n\t\tgroupOrder,\n\t\tcontentExists,\n\t\tlargest,\n\t\tforward,\n\t}: {\n\t\trequestId: bigint;\n\t\ttrackNamespace: Path.Valid;\n\t\ttrackName: string;\n\t\ttrackAlias: bigint;\n\t\tgroupOrder: number;\n\t\tcontentExists: boolean;\n\t\tlargest: { groupId: bigint; objectId: bigint } | undefined;\n\t\tforward: boolean;\n\t}) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.trackName = trackName;\n\t\tthis.trackAlias = trackAlias;\n\t\tthis.groupOrder = groupOrder;\n\t\tthis.contentExists = contentExists;\n\t\tthis.largest = largest;\n\t\tthis.forward = forward;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait w.u62(0n); // required_request_id_delta = 0 (Draft17 only)\n\t\t}\n\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\tawait w.string(this.trackName);\n\t\tawait w.u62(this.trackAlias);\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tawait w.u8(this.groupOrder);\n\t\t\tawait w.bool(this.contentExists);\n\t\t\tif (this.contentExists !== !!this.largest) {\n\t\t\t\tthrow new Error(\"contentExists and largest must both be true or false\");\n\t\t\t}\n\t\t\tif (this.largest) {\n\t\t\t\tawait w.u62(this.largest.groupId);\n\t\t\t\tawait w.u62(this.largest.objectId);\n\t\t\t}\n\t\t\tawait w.bool(this.forward);\n\t\t\tawait w.u53(0); // size of parameters\n\t\t} else {\n\t\t\t// v15+: fields in parameters\n\t\t\tif (this.contentExists !== !!this.largest) {\n\t\t\t\tthrow new Error(\"contentExists and largest must both be true or false\");\n\t\t\t}\n\t\t\tconst params = new Parameters();\n\t\t\t// GROUP_ORDER is a legal PUBLISH parameter only through draft-15; a later peer closes\n\t\t\t// the session with PROTOCOL_VIOLATION when it sees one. The publisher's preference is\n\t\t\t// a DEFAULT_PUBLISHER_GROUP_ORDER track property instead, which we write from\n\t\t\t// draft-17 on. Draft-16 gets neither form; see Properties.encode.\n\t\t\tif (version === Version.DRAFT_15) {\n\t\t\t\tparams.groupOrder = this.groupOrder;\n\t\t\t}\n\t\t\tparams.forward = this.forward;\n\t\t\tif (this.largest) {\n\t\t\t\tparams.largest = this.largest;\n\t\t\t}\n\t\t\tawait params.encode(w, version);\n\n\t\t\t// Track Properties are the final field, so nothing may follow.\n\t\t\tawait Properties.encode(w, { groupOrder: this.groupOrder }, version);\n\t\t}\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (mw) => this.#encode(mw, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<Publish> {\n\t\treturn Message.decode(r, (mr) => Publish.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<Publish> {\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta (Draft17 only)\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\tconst trackName = await r.string();\n\t\tconst trackAlias = await r.u62();\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tconst groupOrder = await r.u8();\n\t\t\tconst contentExists = await r.bool();\n\t\t\tconst largest = contentExists ? { groupId: await r.u62(), objectId: await r.u62() } : undefined;\n\t\t\tconst forward = await r.bool();\n\t\t\tawait Parameters.decode(r, version); // ignore parameters\n\t\t\treturn new Publish({\n\t\t\t\trequestId,\n\t\t\t\ttrackNamespace,\n\t\t\t\ttrackName,\n\t\t\t\ttrackAlias,\n\t\t\t\tgroupOrder,\n\t\t\t\tcontentExists,\n\t\t\t\tlargest,\n\t\t\t\tforward,\n\t\t\t});\n\t\t}\n\t\t// v15+: parameters followed by Track Properties (draft-17+)\n\t\tconst params = await Parameters.decode(r, version);\n\t\tconst properties = await Properties.decode(r, version);\n\t\t// GROUP_ORDER is only legal here through draft-15, but keep accepting it so a peer that\n\t\t// still sends it doesn't have its session torn down over a hint.\n\t\tconst groupOrder = properties.groupOrder ?? params.groupOrder ?? 0x02;\n\t\tconst forward = params.forward ?? true;\n\t\tconst largest = params.largest;\n\t\treturn new Publish({\n\t\t\trequestId,\n\t\t\ttrackNamespace,\n\t\t\ttrackName,\n\t\t\ttrackAlias,\n\t\t\tgroupOrder,\n\t\t\tcontentExists: !!largest,\n\t\t\tlargest,\n\t\t\tforward,\n\t\t});\n\t}\n}\n\nexport class PublishOk {\n\tstatic id = 0x1e;\n\n\tasync #encode(_w: Writer): Promise<void> {\n\t\tthrow new Error(\"PUBLISH_OK messages are not supported\");\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishOk> {\n\t\treturn Message.decode(r, PublishOk.#decode);\n\t}\n\n\tstatic async #decode(_r: Reader): Promise<PublishOk> {\n\t\tthrow new Error(\"PUBLISH_OK messages are not supported\");\n\t}\n}\n\nexport class PublishError {\n\tstatic id = 0x1f;\n\n\trequestId: bigint;\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\terrorCode,\n\t\treasonPhrase,\n\t}: { requestId: bigint; errorCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishError> {\n\t\treturn Message.decode(r, PublishError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\n// In draft-14, this message is renamed from SUBSCRIBE_DONE to PUBLISH_DONE\nexport class PublishDone {\n\tstatic readonly id = 0x0b;\n\n\trequestId: bigint | undefined;\n\tstatusCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\tstatusCode,\n\t\treasonPhrase,\n\t}: { requestId?: bigint; statusCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.statusCode = statusCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\tif (this.requestId === undefined) throw new Error(\"requestId required for draft14-16\");\n\t\t\tawait w.u62(this.requestId);\n\t\t}\n\t\tawait w.u62(BigInt(this.statusCode));\n\t\tawait w.u62(BigInt(0)); // stream_count = 0 (unsupported)\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (mw) => this.#encode(mw, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishDone> {\n\t\treturn Message.decode(r, (mr) => PublishDone.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishDone> {\n\t\tconst requestId =\n\t\t\tversion === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16\n\t\t\t\t? await r.u62()\n\t\t\t\t: undefined;\n\t\tconst statusCode = Number(await r.u62());\n\t\tawait r.u62(); // ignore stream_count\n\t\tconst reasonPhrase = await r.string();\n\n\t\treturn new PublishDone({ requestId, statusCode, reasonPhrase });\n\t}\n}\n"]}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/ietf/publish.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Parameters } from \"./parameters.ts\";\nimport * as Properties from \"./properties.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// PUBLISH messages are new in draft-14\n\nexport class Publish {\n\tstatic id = 0x1d;\n\n\trequestId: bigint;\n\ttrackNamespace: Path.Valid;\n\ttrackName: string;\n\ttrackAlias: bigint;\n\tgroupOrder: number;\n\tpriority?: number;\n\tcontentExists: boolean;\n\tlargest: { groupId: bigint; objectId: bigint } | undefined;\n\tforward: boolean;\n\n\tconstructor({\n\t\trequestId,\n\t\ttrackNamespace,\n\t\ttrackName,\n\t\ttrackAlias,\n\t\tgroupOrder,\n\t\tpriority,\n\t\tcontentExists,\n\t\tlargest,\n\t\tforward,\n\t}: {\n\t\trequestId: bigint;\n\t\ttrackNamespace: Path.Valid;\n\t\ttrackName: string;\n\t\ttrackAlias: bigint;\n\t\tgroupOrder: number;\n\t\tpriority?: number;\n\t\tcontentExists: boolean;\n\t\tlargest: { groupId: bigint; objectId: bigint } | undefined;\n\t\tforward: boolean;\n\t}) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.trackName = trackName;\n\t\tthis.trackAlias = trackAlias;\n\t\tthis.groupOrder = groupOrder;\n\t\tthis.priority = priority;\n\t\tthis.contentExists = contentExists;\n\t\tthis.largest = largest;\n\t\tthis.forward = forward;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait w.u62(0n); // required_request_id_delta = 0 (Draft17 only)\n\t\t}\n\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\tawait w.string(this.trackName);\n\t\tawait w.u62(this.trackAlias);\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tawait w.u8(this.groupOrder);\n\t\t\tawait w.bool(this.contentExists);\n\t\t\tif (this.contentExists !== !!this.largest) {\n\t\t\t\tthrow new Error(\"contentExists and largest must both be true or false\");\n\t\t\t}\n\t\t\tif (this.largest) {\n\t\t\t\tawait w.u62(this.largest.groupId);\n\t\t\t\tawait w.u62(this.largest.objectId);\n\t\t\t}\n\t\t\tawait w.bool(this.forward);\n\t\t\tawait w.u53(0); // size of parameters\n\t\t} else {\n\t\t\t// v15+: fields in parameters\n\t\t\tif (this.contentExists !== !!this.largest) {\n\t\t\t\tthrow new Error(\"contentExists and largest must both be true or false\");\n\t\t\t}\n\t\t\tconst params = new Parameters();\n\t\t\t// GROUP_ORDER is a legal PUBLISH parameter only through draft-15; a later peer closes\n\t\t\t// the session with PROTOCOL_VIOLATION when it sees one. The publisher's preference is\n\t\t\t// a DEFAULT_PUBLISHER_GROUP_ORDER track property instead, which we write from\n\t\t\t// draft-17 on. Draft-16 gets neither form; see Properties.encode.\n\t\t\tif (version === Version.DRAFT_15) {\n\t\t\t\tparams.groupOrder = this.groupOrder;\n\t\t\t}\n\t\t\tparams.forward = this.forward;\n\t\t\tif (this.largest) {\n\t\t\t\tparams.largest = this.largest;\n\t\t\t}\n\t\t\tawait params.encode(w, version);\n\n\t\t\t// Track Properties are the final field, so nothing may follow.\n\t\t\tawait Properties.encode(w, { groupOrder: this.groupOrder, priority: this.priority }, version);\n\t\t}\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (mw) => this.#encode(mw, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<Publish> {\n\t\treturn Message.decode(r, (mr) => Publish.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<Publish> {\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta (Draft17 only)\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\tconst trackName = await r.string();\n\t\tconst trackAlias = await r.u62();\n\n\t\tif (version === Version.DRAFT_14) {\n\t\t\tconst groupOrder = await r.u8();\n\t\t\tconst contentExists = await r.bool();\n\t\t\tconst largest = contentExists ? { groupId: await r.u62(), objectId: await r.u62() } : undefined;\n\t\t\tconst forward = await r.bool();\n\t\t\tawait Parameters.decode(r, version); // ignore parameters\n\t\t\treturn new Publish({\n\t\t\t\trequestId,\n\t\t\t\ttrackNamespace,\n\t\t\t\ttrackName,\n\t\t\t\ttrackAlias,\n\t\t\t\tgroupOrder,\n\t\t\t\tcontentExists,\n\t\t\t\tlargest,\n\t\t\t\tforward,\n\t\t\t});\n\t\t}\n\t\t// v15+: parameters followed by Track Properties (draft-17+)\n\t\tconst params = await Parameters.decode(r, version);\n\t\tconst properties = await Properties.decode(r, version);\n\t\t// GROUP_ORDER is only legal here through draft-15, but keep accepting it so a peer that\n\t\t// still sends it doesn't have its session torn down over a hint.\n\t\tconst groupOrder = properties.groupOrder ?? params.groupOrder ?? 0x02;\n\t\tconst forward = params.forward ?? true;\n\t\tconst largest = params.largest;\n\t\treturn new Publish({\n\t\t\trequestId,\n\t\t\ttrackNamespace,\n\t\t\ttrackName,\n\t\t\ttrackAlias,\n\t\t\tgroupOrder,\n\t\t\tpriority: properties.priority,\n\t\t\tcontentExists: !!largest,\n\t\t\tlargest,\n\t\t\tforward,\n\t\t});\n\t}\n}\n\nexport class PublishOk {\n\tstatic id = 0x1e;\n\n\tasync #encode(_w: Writer): Promise<void> {\n\t\tthrow new Error(\"PUBLISH_OK messages are not supported\");\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishOk> {\n\t\treturn Message.decode(r, PublishOk.#decode);\n\t}\n\n\tstatic async #decode(_r: Reader): Promise<PublishOk> {\n\t\tthrow new Error(\"PUBLISH_OK messages are not supported\");\n\t}\n}\n\nexport class PublishError {\n\tstatic id = 0x1f;\n\n\trequestId: bigint;\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\terrorCode,\n\t\treasonPhrase,\n\t}: { requestId: bigint; errorCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishError> {\n\t\treturn Message.decode(r, PublishError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\n/** PUBLISH_DONE status codes this implementation distinguishes. Stable across drafts 14 through 22. */\nexport const PublishDoneStatus = {\n\tINTERNAL_ERROR: 0x0,\n\tTRACK_ENDED: 0x2,\n\t/** Removed in draft-20, where 0x3 is unassigned. */\n\tSUBSCRIPTION_ENDED: 0x3,\n} as const;\n\n/** Whether a PUBLISH_DONE status ends the track cleanly rather than aborting it. */\nexport function publishDoneClean(statusCode: number, version: IetfVersion): boolean {\n\tif (statusCode === PublishDoneStatus.TRACK_ENDED) return true;\n\tif (statusCode !== PublishDoneStatus.SUBSCRIPTION_ENDED) return false;\n\tswitch (version) {\n\t\tcase Version.DRAFT_14:\n\t\tcase Version.DRAFT_15:\n\t\tcase Version.DRAFT_16:\n\t\tcase Version.DRAFT_17:\n\t\tcase Version.DRAFT_18:\n\t\tcase Version.DRAFT_19:\n\t\t\treturn true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\n// In draft-14, this message is renamed from SUBSCRIBE_DONE to PUBLISH_DONE\nexport class PublishDone {\n\tstatic readonly id = 0x0b;\n\n\trequestId: bigint | undefined;\n\tstatusCode: number;\n\t/**\n\t * How many data streams the publisher opened for the subscription, fill streams included.\n\t * A hint: a peer may send 0 or the \"unknown\" sentinel regardless.\n\t */\n\tstreamCount: bigint;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\tstatusCode,\n\t\tstreamCount = 0n,\n\t\treasonPhrase,\n\t}: { requestId?: bigint; statusCode: number; streamCount?: bigint; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.statusCode = statusCode;\n\t\tthis.streamCount = streamCount;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\tif (this.requestId === undefined) throw new Error(\"requestId required for draft14-16\");\n\t\t\tawait w.u62(this.requestId);\n\t\t}\n\t\tawait w.u62(BigInt(this.statusCode));\n\t\tawait w.u62(this.streamCount);\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (mw) => this.#encode(mw, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishDone> {\n\t\treturn Message.decode(r, (mr) => PublishDone.#decode(mr, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishDone> {\n\t\tconst requestId =\n\t\t\tversion === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16\n\t\t\t\t? await r.u62()\n\t\t\t\t: undefined;\n\t\tconst statusCode = Number(await r.u62());\n\t\tconst streamCount = await r.u62();\n\t\tconst reasonPhrase = await r.string();\n\n\t\treturn new PublishDone({ requestId, statusCode, streamCount, reasonPhrase });\n\t}\n}\n"]}
@@ -27,6 +27,31 @@ export declare class PublishNamespace {
27
27
  */
28
28
  static decode(r: Reader, version: IetfVersion, negotiated?: boolean): Promise<PublishNamespace>;
29
29
  }
30
+ /**
31
+ * REQUEST_UPDATE (0x02) on a PUBLISH_NAMESPACE stream: the cluster parameters that
32
+ * changed (draft-lcurley-moq-cluster, Updating an Advertisement).
33
+ *
34
+ * Draft-17+ only: the extension negotiates on nothing earlier. The publisher sends one when
35
+ * a forwarded route's price or hop chain moves behind the same original publisher.
36
+ */
37
+ export declare class PublishNamespaceUpdate {
38
+ #private;
39
+ static id: number;
40
+ /** The update's own Request ID; every REQUEST_UPDATE consumes one. */
41
+ requestId: bigint;
42
+ update: Cluster.Update;
43
+ constructor({ requestId, update }: {
44
+ requestId: bigint;
45
+ update: Cluster.Update;
46
+ });
47
+ encode(w: Writer, version: IetfVersion): Promise<void>;
48
+ /**
49
+ * Decode the message. A truncated or trailing body, a draft with no such message, or a
50
+ * malformed parameter block surfaces as a {@link ProtocolViolation}, which the session
51
+ * dispatch closes over. A stream reset or session ending remains transport-local.
52
+ */
53
+ static decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceUpdate>;
54
+ }
30
55
  export declare class PublishNamespaceOk {
31
56
  #private;
32
57
  static id: number;
@@ -1 +1 @@
1
- {"version":3,"file":"publish_namespace.d.ts","sourceRoot":"","sources":["../../src/ietf/publish_namespace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish_namespace.d.ts","sourceRoot":"","sources":["../../src/ietf/publish_namespace.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  /* @ts-self-types="./publish_namespace.d.ts" */
2
+ import { ProtocolViolation, reason, SessionError, StreamError } from "../error.js";
2
3
  import * as Cluster from "./cluster.js";
3
4
  import * as Message from "./message.js";
4
5
  import * as Namespace from "./namespace.js";
@@ -55,6 +56,68 @@ export class PublishNamespace {
55
56
  return new PublishNamespace({ requestId, trackNamespace });
56
57
  }
57
58
  }
59
+ /**
60
+ * REQUEST_UPDATE (0x02) on a PUBLISH_NAMESPACE stream: the cluster parameters that
61
+ * changed (draft-lcurley-moq-cluster, Updating an Advertisement).
62
+ *
63
+ * Draft-17+ only: the extension negotiates on nothing earlier. The publisher sends one when
64
+ * a forwarded route's price or hop chain moves behind the same original publisher.
65
+ */
66
+ export class PublishNamespaceUpdate {
67
+ static id = 0x02;
68
+ /** The update's own Request ID; every REQUEST_UPDATE consumes one. */
69
+ requestId;
70
+ update;
71
+ constructor({ requestId, update }) {
72
+ this.requestId = requestId;
73
+ this.update = update;
74
+ }
75
+ async #encode(w, version) {
76
+ PublishNamespaceUpdate.#modern(version);
77
+ await w.u62(this.requestId);
78
+ if (version === Version.DRAFT_17) {
79
+ await w.u62(0n); // required_request_id_delta (draft-17 only, removed in draft-18 per #1615)
80
+ }
81
+ await Cluster.updateIntoParams(this.update).encode(w, version);
82
+ }
83
+ async encode(w, version) {
84
+ return Message.encode(w, (wr) => this.#encode(wr, version));
85
+ }
86
+ /**
87
+ * Decode the message. A truncated or trailing body, a draft with no such message, or a
88
+ * malformed parameter block surfaces as a {@link ProtocolViolation}, which the session
89
+ * dispatch closes over. A stream reset or session ending remains transport-local.
90
+ */
91
+ static async decode(r, version) {
92
+ try {
93
+ return await Message.decode(r, (rd) => PublishNamespaceUpdate.#decode(rd, version));
94
+ }
95
+ catch (err) {
96
+ if (err instanceof ProtocolViolation || err instanceof SessionError || err instanceof StreamError)
97
+ throw err;
98
+ if (typeof err === "object" && err !== null) {
99
+ const source = err.source;
100
+ if (source === "session" || source === "stream")
101
+ throw err;
102
+ }
103
+ throw new ProtocolViolation(reason(err), { cause: err });
104
+ }
105
+ }
106
+ static #modern(version) {
107
+ if (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {
108
+ throw new Error("REQUEST_UPDATE on PUBLISH_NAMESPACE requires draft-17+");
109
+ }
110
+ }
111
+ static async #decode(r, version) {
112
+ PublishNamespaceUpdate.#modern(version);
113
+ const requestId = await r.u62();
114
+ if (version === Version.DRAFT_17) {
115
+ await r.u62(); // required_request_id_delta (draft-17 only, removed in draft-18 per #1615)
116
+ }
117
+ const params = await Parameters.decode(r, version);
118
+ return new PublishNamespaceUpdate({ requestId, update: Cluster.updateFromParams(params) });
119
+ }
120
+ }
58
121
  export class PublishNamespaceOk {
59
122
  static id = 0x07;
60
123
  requestId;
@@ -1 +1 @@
1
- {"version":3,"file":"publish_namespace.js","sourceRoot":"","sources":["../../src/ietf/publish_namespace.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Cluster from \"./cluster.ts\";\nimport * as Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Parameters } from \"./parameters.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// In draft-14, ANNOUNCE is renamed to PUBLISH_NAMESPACE\nexport class PublishNamespace {\n\tstatic id = 0x06;\n\n\trequestId: bigint;\n\ttrackNamespace: Path.Valid;\n\n\t/** The MoQ Cluster parameters (see {@link Cluster}). Set on a session that negotiated\n\t * the extension and `undefined` on one that did not, which is what decides whether they\n\t * appear on the wire at all. */\n\tcluster?: Cluster.Advert;\n\n\tconstructor({\n\t\trequestId,\n\t\ttrackNamespace,\n\t\tcluster,\n\t}: { requestId: bigint; trackNamespace: Path.Valid; cluster?: Cluster.Advert }) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.cluster = cluster;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait w.u62(0n); // required_request_id_delta: only 0 supported until stream-per-request\n\t\t}\n\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\tconst params = this.cluster ? Cluster.intoParams(this.cluster) : new Parameters();\n\t\tawait params.encode(w, version);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\t/**\n\t * Decode the message, expecting the cluster parameters when the session negotiated the\n\t * extension.\n\t *\n\t * The negotiation is session state rather than anything in the message, so the caller\n\t * supplies it. A negotiated session that omits HOP_PATH is a protocol violation, which\n\t * surfaces here as a throw.\n\t */\n\tstatic async decode(r: Reader, version: IetfVersion, negotiated = false): Promise<PublishNamespace> {\n\t\treturn Message.decode(r, (rd) => PublishNamespace.#decode(rd, version, negotiated));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion, negotiated: boolean): Promise<PublishNamespace> {\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\tif (negotiated) {\n\t\t\tconst cluster = await Cluster.decodeParams(r, version);\n\t\t\treturn new PublishNamespace({ requestId, trackNamespace, cluster });\n\t\t}\n\n\t\tawait Parameters.decode(r, version); // ignore parameters\n\t\treturn new PublishNamespace({ requestId, trackNamespace });\n\t}\n}\n\nexport class PublishNamespaceOk {\n\tstatic id = 0x07;\n\n\trequestId: bigint;\n\n\tconstructor({ requestId }: { requestId: bigint }) {\n\t\tthis.requestId = requestId;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishNamespaceOk> {\n\t\treturn Message.decode(r, PublishNamespaceOk.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishNamespaceOk> {\n\t\tconst requestId = await r.u62();\n\t\treturn new PublishNamespaceOk({ requestId });\n\t}\n}\n\nexport class PublishNamespaceError {\n\tstatic id = 0x08;\n\n\trequestId: bigint;\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\terrorCode,\n\t\treasonPhrase,\n\t}: { requestId: bigint; errorCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishNamespaceError> {\n\t\treturn Message.decode(r, PublishNamespaceError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishNamespaceError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishNamespaceError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\n// Removed in d17\nexport class PublishNamespaceCancel {\n\tstatic id = 0x0c;\n\n\ttrackNamespace: Path.Valid;\n\trequestId: bigint; // v16: uses request_id instead of track_namespace\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\ttrackNamespace = \"\" as Path.Valid,\n\t\terrorCode = 0,\n\t\treasonPhrase = \"\",\n\t\trequestId = 0n,\n\t}: {\n\t\ttrackNamespace?: Path.Valid;\n\t\terrorCode?: number;\n\t\treasonPhrase?: string;\n\t\trequestId?: bigint;\n\t} = {}) {\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceCancel removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tawait w.u62(this.requestId);\n\t\t} else {\n\t\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\t}\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceCancel> {\n\t\treturn Message.decode(r, (rd) => PublishNamespaceCancel.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceCancel> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceCancel removed in draft-17+\");\n\t\t}\n\t\tlet trackNamespace = \"\" as Path.Valid;\n\t\tlet requestId = 0n;\n\t\tif (version === Version.DRAFT_16) {\n\t\t\trequestId = await r.u62();\n\t\t} else {\n\t\t\ttrackNamespace = await Namespace.decode(r);\n\t\t}\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishNamespaceCancel({ trackNamespace, errorCode, reasonPhrase, requestId });\n\t}\n}\n\n// In draft-14, UNANNOUNCE is renamed to PUBLISH_NAMESPACE_DONE\n// In draft-16, uses request_id instead of track_namespace\n// Removed in d17\nexport class PublishNamespaceDone {\n\tstatic readonly id = 0x09;\n\n\ttrackNamespace: Path.Valid;\n\trequestId: bigint; // v16: uses request_id instead of track_namespace\n\n\tconstructor({\n\t\ttrackNamespace = \"\" as Path.Valid,\n\t\trequestId = 0n,\n\t}: {\n\t\ttrackNamespace?: Path.Valid;\n\t\trequestId?: bigint;\n\t} = {}) {\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.requestId = requestId;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceDone removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tawait w.u62(this.requestId);\n\t\t} else {\n\t\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\t}\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceDone> {\n\t\treturn Message.decode(r, (rd) => PublishNamespaceDone.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceDone> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceDone removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tconst requestId = await r.u62();\n\t\t\treturn new PublishNamespaceDone({ requestId });\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\treturn new PublishNamespaceDone({ trackNamespace });\n\t}\n}\n"]}
1
+ {"version":3,"file":"publish_namespace.js","sourceRoot":"","sources":["../../src/ietf/publish_namespace.ts"],"names":[],"mappings":"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","sourcesContent":["import { ProtocolViolation, reason, SessionError, StreamError } from \"../error.ts\";\nimport type * as Path from \"../path.ts\";\nimport type { Reader, Writer } from \"../stream.ts\";\nimport * as Cluster from \"./cluster.ts\";\nimport * as Message from \"./message.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Parameters } from \"./parameters.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// In draft-14, ANNOUNCE is renamed to PUBLISH_NAMESPACE\nexport class PublishNamespace {\n\tstatic id = 0x06;\n\n\trequestId: bigint;\n\ttrackNamespace: Path.Valid;\n\n\t/** The MoQ Cluster parameters (see {@link Cluster}). Set on a session that negotiated\n\t * the extension and `undefined` on one that did not, which is what decides whether they\n\t * appear on the wire at all. */\n\tcluster?: Cluster.Advert;\n\n\tconstructor({\n\t\trequestId,\n\t\ttrackNamespace,\n\t\tcluster,\n\t}: { requestId: bigint; trackNamespace: Path.Valid; cluster?: Cluster.Advert }) {\n\t\tthis.requestId = requestId;\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.cluster = cluster;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait w.u62(0n); // required_request_id_delta: only 0 supported until stream-per-request\n\t\t}\n\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\tconst params = this.cluster ? Cluster.intoParams(this.cluster) : new Parameters();\n\t\tawait params.encode(w, version);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\t/**\n\t * Decode the message, expecting the cluster parameters when the session negotiated the\n\t * extension.\n\t *\n\t * The negotiation is session state rather than anything in the message, so the caller\n\t * supplies it. A negotiated session that omits HOP_PATH is a protocol violation, which\n\t * surfaces here as a throw.\n\t */\n\tstatic async decode(r: Reader, version: IetfVersion, negotiated = false): Promise<PublishNamespace> {\n\t\treturn Message.decode(r, (rd) => PublishNamespace.#decode(rd, version, negotiated));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion, negotiated: boolean): Promise<PublishNamespace> {\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\tif (negotiated) {\n\t\t\tconst cluster = await Cluster.decodeParams(r, version);\n\t\t\treturn new PublishNamespace({ requestId, trackNamespace, cluster });\n\t\t}\n\n\t\tawait Parameters.decode(r, version); // ignore parameters\n\t\treturn new PublishNamespace({ requestId, trackNamespace });\n\t}\n}\n\n/**\n * REQUEST_UPDATE (0x02) on a PUBLISH_NAMESPACE stream: the cluster parameters that\n * changed (draft-lcurley-moq-cluster, Updating an Advertisement).\n *\n * Draft-17+ only: the extension negotiates on nothing earlier. The publisher sends one when\n * a forwarded route's price or hop chain moves behind the same original publisher.\n */\nexport class PublishNamespaceUpdate {\n\tstatic id = 0x02;\n\n\t/** The update's own Request ID; every REQUEST_UPDATE consumes one. */\n\trequestId: bigint;\n\tupdate: Cluster.Update;\n\n\tconstructor({ requestId, update }: { requestId: bigint; update: Cluster.Update }) {\n\t\tthis.requestId = requestId;\n\t\tthis.update = update;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tPublishNamespaceUpdate.#modern(version);\n\t\tawait w.u62(this.requestId);\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait w.u62(0n); // required_request_id_delta (draft-17 only, removed in draft-18 per #1615)\n\t\t}\n\t\tawait Cluster.updateIntoParams(this.update).encode(w, version);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\t/**\n\t * Decode the message. A truncated or trailing body, a draft with no such message, or a\n\t * malformed parameter block surfaces as a {@link ProtocolViolation}, which the session\n\t * dispatch closes over. A stream reset or session ending remains transport-local.\n\t */\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceUpdate> {\n\t\ttry {\n\t\t\treturn await Message.decode(r, (rd) => PublishNamespaceUpdate.#decode(rd, version));\n\t\t} catch (err) {\n\t\t\tif (err instanceof ProtocolViolation || err instanceof SessionError || err instanceof StreamError)\n\t\t\t\tthrow err;\n\t\t\tif (typeof err === \"object\" && err !== null) {\n\t\t\t\tconst source = (err as { source?: unknown }).source;\n\t\t\t\tif (source === \"session\" || source === \"stream\") throw err;\n\t\t\t}\n\t\t\tthrow new ProtocolViolation(reason(err), { cause: err });\n\t\t}\n\t}\n\n\tstatic #modern(version: IetfVersion) {\n\t\tif (version === Version.DRAFT_14 || version === Version.DRAFT_15 || version === Version.DRAFT_16) {\n\t\t\tthrow new Error(\"REQUEST_UPDATE on PUBLISH_NAMESPACE requires draft-17+\");\n\t\t}\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceUpdate> {\n\t\tPublishNamespaceUpdate.#modern(version);\n\t\tconst requestId = await r.u62();\n\t\tif (version === Version.DRAFT_17) {\n\t\t\tawait r.u62(); // required_request_id_delta (draft-17 only, removed in draft-18 per #1615)\n\t\t}\n\t\tconst params = await Parameters.decode(r, version);\n\t\treturn new PublishNamespaceUpdate({ requestId, update: Cluster.updateFromParams(params) });\n\t}\n}\n\nexport class PublishNamespaceOk {\n\tstatic id = 0x07;\n\n\trequestId: bigint;\n\n\tconstructor({ requestId }: { requestId: bigint }) {\n\t\tthis.requestId = requestId;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishNamespaceOk> {\n\t\treturn Message.decode(r, PublishNamespaceOk.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishNamespaceOk> {\n\t\tconst requestId = await r.u62();\n\t\treturn new PublishNamespaceOk({ requestId });\n\t}\n}\n\nexport class PublishNamespaceError {\n\tstatic id = 0x08;\n\n\trequestId: bigint;\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\trequestId,\n\t\terrorCode,\n\t\treasonPhrase,\n\t}: { requestId: bigint; errorCode: number; reasonPhrase: string }) {\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer): Promise<void> {\n\t\tawait w.u62(this.requestId);\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, _version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, this.#encode.bind(this));\n\t}\n\n\tstatic async decode(r: Reader, _version: IetfVersion): Promise<PublishNamespaceError> {\n\t\treturn Message.decode(r, PublishNamespaceError.#decode);\n\t}\n\n\tstatic async #decode(r: Reader): Promise<PublishNamespaceError> {\n\t\tconst requestId = await r.u62();\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishNamespaceError({ requestId, errorCode, reasonPhrase });\n\t}\n}\n\n// Removed in d17\nexport class PublishNamespaceCancel {\n\tstatic id = 0x0c;\n\n\ttrackNamespace: Path.Valid;\n\trequestId: bigint; // v16: uses request_id instead of track_namespace\n\terrorCode: number;\n\treasonPhrase: string;\n\n\tconstructor({\n\t\ttrackNamespace = \"\" as Path.Valid,\n\t\terrorCode = 0,\n\t\treasonPhrase = \"\",\n\t\trequestId = 0n,\n\t}: {\n\t\ttrackNamespace?: Path.Valid;\n\t\terrorCode?: number;\n\t\treasonPhrase?: string;\n\t\trequestId?: bigint;\n\t} = {}) {\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.requestId = requestId;\n\t\tthis.errorCode = errorCode;\n\t\tthis.reasonPhrase = reasonPhrase;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceCancel removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tawait w.u62(this.requestId);\n\t\t} else {\n\t\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\t}\n\t\tawait w.u62(BigInt(this.errorCode));\n\t\tawait w.string(this.reasonPhrase);\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceCancel> {\n\t\treturn Message.decode(r, (rd) => PublishNamespaceCancel.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceCancel> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceCancel removed in draft-17+\");\n\t\t}\n\t\tlet trackNamespace = \"\" as Path.Valid;\n\t\tlet requestId = 0n;\n\t\tif (version === Version.DRAFT_16) {\n\t\t\trequestId = await r.u62();\n\t\t} else {\n\t\t\ttrackNamespace = await Namespace.decode(r);\n\t\t}\n\t\tconst errorCode = Number(await r.u62());\n\t\tconst reasonPhrase = await r.string();\n\t\treturn new PublishNamespaceCancel({ trackNamespace, errorCode, reasonPhrase, requestId });\n\t}\n}\n\n// In draft-14, UNANNOUNCE is renamed to PUBLISH_NAMESPACE_DONE\n// In draft-16, uses request_id instead of track_namespace\n// Removed in d17\nexport class PublishNamespaceDone {\n\tstatic readonly id = 0x09;\n\n\ttrackNamespace: Path.Valid;\n\trequestId: bigint; // v16: uses request_id instead of track_namespace\n\n\tconstructor({\n\t\ttrackNamespace = \"\" as Path.Valid,\n\t\trequestId = 0n,\n\t}: {\n\t\ttrackNamespace?: Path.Valid;\n\t\trequestId?: bigint;\n\t} = {}) {\n\t\tthis.trackNamespace = trackNamespace;\n\t\tthis.requestId = requestId;\n\t}\n\n\tasync #encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceDone removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tawait w.u62(this.requestId);\n\t\t} else {\n\t\t\tawait Namespace.encode(w, this.trackNamespace);\n\t\t}\n\t}\n\n\tasync encode(w: Writer, version: IetfVersion): Promise<void> {\n\t\treturn Message.encode(w, (wr) => this.#encode(wr, version));\n\t}\n\n\tstatic async decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceDone> {\n\t\treturn Message.decode(r, (rd) => PublishNamespaceDone.#decode(rd, version));\n\t}\n\n\tstatic async #decode(r: Reader, version: IetfVersion): Promise<PublishNamespaceDone> {\n\t\tif (version !== Version.DRAFT_14 && version !== Version.DRAFT_15 && version !== Version.DRAFT_16) {\n\t\t\tthrow new Error(\"PublishNamespaceDone removed in draft-17+\");\n\t\t}\n\t\tif (version === Version.DRAFT_16) {\n\t\t\tconst requestId = await r.u62();\n\t\t\treturn new PublishNamespaceDone({ requestId });\n\t\t}\n\t\tconst trackNamespace = await Namespace.decode(r);\n\t\treturn new PublishNamespaceDone({ trackNamespace });\n\t}\n}\n"]}