@blockcast/mmt-container 0.3.0 → 0.4.0-main.1cd3cdea89da

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 (605) hide show
  1. package/README.md +33 -16
  2. package/dist/browser-runtime.js +14814 -14255
  3. package/dist/browser-runtime.js.map +4 -4
  4. package/dist/carp-catalog.d.ts +24 -19
  5. package/dist/carp-catalog.d.ts.map +1 -1
  6. package/dist/carp-catalog.js +29 -14
  7. package/dist/carp-catalog.js.map +4 -4
  8. package/dist/catalog-fec-params.d.ts +88 -28
  9. package/dist/catalog-fec-params.d.ts.map +1 -1
  10. package/dist/catalog-fec-params.js +60 -23
  11. package/dist/catalog-fec-params.js.map +4 -4
  12. package/dist/catalog-network-source.js +1 -7
  13. package/dist/catalog-network-source.js.map +4 -4
  14. package/dist/cmaf-block-assembler.d.ts +0 -2
  15. package/dist/cmaf-block-assembler.d.ts.map +1 -1
  16. package/dist/cmaf-block-assembler.js +0 -1
  17. package/dist/cmaf-block-assembler.js.map +2 -2
  18. package/dist/cmcd-producer.d.ts.map +1 -1
  19. package/dist/cmcd-producer.js +0 -4
  20. package/dist/cmcd-producer.js.map +2 -2
  21. package/dist/delivery-catalog.d.ts +124 -0
  22. package/dist/delivery-catalog.d.ts.map +1 -0
  23. package/dist/delivery-catalog.js +1857 -0
  24. package/dist/delivery-catalog.js.map +7 -0
  25. package/dist/delta-fallback-config.d.ts +42 -0
  26. package/dist/delta-fallback-config.d.ts.map +1 -0
  27. package/dist/delta-fallback-config.js +59 -0
  28. package/dist/delta-fallback-config.js.map +7 -0
  29. package/dist/fec-manager.d.ts +52 -30
  30. package/dist/fec-manager.d.ts.map +1 -1
  31. package/dist/fec-manager.js +338 -293
  32. package/dist/fec-manager.js.map +4 -4
  33. package/dist/fec-state.d.ts +19 -31
  34. package/dist/fec-state.d.ts.map +1 -1
  35. package/dist/fec-state.js +4 -10
  36. package/dist/fec-state.js.map +4 -4
  37. package/dist/fec-worker-setup.d.ts +18 -14
  38. package/dist/fec-worker-setup.d.ts.map +1 -1
  39. package/dist/fec-worker-setup.js +81 -96
  40. package/dist/fec-worker-setup.js.map +4 -4
  41. package/dist/index.d.ts +5 -3
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +16 -0
  44. package/dist/index.js.map +2 -2
  45. package/dist/iso-block-locator.js +1 -7
  46. package/dist/iso-block-locator.js.map +4 -4
  47. package/dist/media-router.d.ts +20 -8
  48. package/dist/media-router.d.ts.map +1 -1
  49. package/dist/media-router.js +46 -21
  50. package/dist/media-router.js.map +2 -2
  51. package/dist/mfu-reassembler.js +24 -30
  52. package/dist/mfu-reassembler.js.map +4 -4
  53. package/dist/mmtp-container-parser.d.ts +14 -11
  54. package/dist/mmtp-container-parser.d.ts.map +1 -1
  55. package/dist/mmtp-container-parser.js +126 -99
  56. package/dist/mmtp-container-parser.js.map +4 -4
  57. package/dist/mmtp-container-parser.no-modules.js +151 -108
  58. package/dist/mmtp-container-parser.no-modules.js.map +4 -4
  59. package/dist/mmtp-decode-pipeline.js +126 -99
  60. package/dist/mmtp-decode-pipeline.js.map +4 -4
  61. package/dist/mmtp-router.d.ts +51 -29
  62. package/dist/mmtp-router.d.ts.map +1 -1
  63. package/dist/mmtp-router.js +260 -326
  64. package/dist/mmtp-router.js.map +4 -4
  65. package/dist/multicast-input.js +1 -7
  66. package/dist/multicast-input.js.map +4 -4
  67. package/dist/multicast-manager.d.ts +72 -6
  68. package/dist/multicast-manager.d.ts.map +1 -1
  69. package/dist/multicast-manager.js +882 -673
  70. package/dist/multicast-manager.js.map +4 -4
  71. package/dist/multicast-transport.d.ts +1 -1
  72. package/dist/multicast-transport.d.ts.map +1 -1
  73. package/dist/multicast-transport.js +44 -26
  74. package/dist/multicast-transport.js.map +4 -4
  75. package/dist/multicast-unwrap.js +29 -35
  76. package/dist/multicast-unwrap.js.map +4 -4
  77. package/dist/no-modules.js +147 -106
  78. package/dist/no-modules.js.map +4 -4
  79. package/dist/repair-fetch.d.ts +116 -21
  80. package/dist/repair-fetch.d.ts.map +1 -1
  81. package/dist/repair-fetch.js +114 -34
  82. package/dist/repair-fetch.js.map +4 -4
  83. package/dist/repair-layers.d.ts +18 -7
  84. package/dist/repair-layers.d.ts.map +1 -1
  85. package/dist/repair-layers.js +12 -10
  86. package/dist/repair-layers.js.map +4 -4
  87. package/dist/signaling.js +2 -11
  88. package/dist/signaling.js.map +4 -4
  89. package/dist/timestamp-codec.js +24 -30
  90. package/dist/timestamp-codec.js.map +4 -4
  91. package/dist/track-session.d.ts +7 -0
  92. package/dist/track-session.d.ts.map +1 -1
  93. package/dist/track-session.js +15 -8
  94. package/dist/track-session.js.map +2 -2
  95. package/dist/wasm-mfu-reassembler.js +1 -7
  96. package/dist/wasm-mfu-reassembler.js.map +4 -4
  97. package/dist/wasm-mmtp-container-parser.js +126 -99
  98. package/dist/wasm-mmtp-container-parser.js.map +4 -4
  99. package/package.json +7 -14
  100. package/schemas/catalog.schema.json +3 -3
  101. package/src/carp-catalog.ts +46 -24
  102. package/src/catalog-fec-params.ts +173 -64
  103. package/src/cmaf-block-assembler.ts +1 -4
  104. package/src/cmcd-producer.ts +0 -6
  105. package/src/delivery-catalog.ts +498 -0
  106. package/src/delta-fallback-config.ts +72 -0
  107. package/src/fec-manager.ts +457 -334
  108. package/src/fec-state.ts +20 -32
  109. package/src/fec-worker-setup.ts +109 -90
  110. package/src/index.ts +32 -0
  111. package/src/media-router.ts +59 -21
  112. package/src/mmtp-container-parser.ts +106 -20
  113. package/src/mmtp-router.ts +189 -330
  114. package/src/multicast-manager.ts +265 -86
  115. package/src/multicast-transport.ts +16 -9
  116. package/src/repair-fetch.ts +273 -43
  117. package/src/repair-layers.ts +28 -8
  118. package/src/track-session.ts +28 -9
  119. package/test-vectors/catalog/README.md +37 -17
  120. package/test-vectors/catalog/negative/fec-block-profile-retired.json +52 -0
  121. package/test-vectors/catalog/negative/fec-enhancement-repair-removed.json +1 -1
  122. package/test-vectors/catalog/negative/fec-repair-layer-geometry.json +1 -1
  123. package/test-vectors/catalog/negative/fec-repair-layer-missing-symbols.json +1 -1
  124. package/test-vectors/catalog/negative/fec-repair-multiple-depends.json +1 -1
  125. package/test-vectors/catalog/negative/fec-repair-overlay-with-layer.json +1 -1
  126. package/test-vectors/catalog/negative/fec-repair-priority-out-of-band.json +1 -1
  127. package/test-vectors/catalog/negative/fec-repair-source-symbols-without-scope.json +1 -1
  128. package/test-vectors/catalog/negative/multicast-endpoint-relay-address.json +39 -0
  129. package/test-vectors/catalog/negative/multicast-network-source-empty.json +1 -1
  130. package/test-vectors/catalog/negative/raptorq-source-symbols-over-max.json +1 -1
  131. package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +1 -1
  132. package/test-vectors/catalog/positive/fec-layered-repair.json +2 -2
  133. package/test-vectors/catalog/positive/fec-multicast.json +2 -1
  134. package/test-vectors/catalog/positive/multicast-amt-manual-relay.json +38 -0
  135. package/test-vectors/catalog/positive/multicast-native-ssm-no-network-source.json +2 -1
  136. package/test-vectors/catalog-timing.json +356 -0
  137. package/test-vectors/catalog-validation.json +40 -5
  138. package/test-vectors/delivery-catalog/README.md +11 -0
  139. package/test-vectors/delivery-catalog/negative/missing-block-profile.json +58 -0
  140. package/test-vectors/delivery-catalog/negative/packet-id-signaling.json +59 -0
  141. package/test-vectors/delivery-catalog/negative/retired-k-padded-block-profile.json +59 -0
  142. package/test-vectors/delivery-catalog/positive/dash.json +56 -0
  143. package/test-vectors/delivery-catalog/positive/mmtp-source-only.json +43 -0
  144. package/node_modules/@blockcast/fec-worker/README.md +0 -223
  145. package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
  146. package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts +0 -38
  147. package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts.map +0 -1
  148. package/node_modules/@blockcast/fec-worker/dist/block-order.js +0 -78
  149. package/node_modules/@blockcast/fec-worker/dist/block-order.js.map +0 -1
  150. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +0 -93
  151. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts.map +0 -1
  152. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js +0 -346
  153. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js.map +0 -1
  154. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +0 -380
  155. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +0 -1
  156. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js +0 -11
  157. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js.map +0 -1
  158. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts +0 -14
  159. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts.map +0 -1
  160. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +0 -859
  161. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +0 -7
  162. package/node_modules/@blockcast/fec-worker/dist/index.d.ts +0 -10
  163. package/node_modules/@blockcast/fec-worker/dist/index.d.ts.map +0 -1
  164. package/node_modules/@blockcast/fec-worker/dist/index.js +0 -8
  165. package/node_modules/@blockcast/fec-worker/dist/index.js.map +0 -1
  166. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts +0 -20
  167. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts.map +0 -1
  168. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js +0 -370
  169. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js.map +0 -7
  170. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts +0 -104
  171. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts.map +0 -1
  172. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js +0 -181
  173. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js.map +0 -1
  174. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts +0 -194
  175. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts.map +0 -1
  176. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js +0 -62
  177. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js.map +0 -1
  178. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts +0 -9
  179. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts.map +0 -1
  180. package/node_modules/@blockcast/fec-worker/dist/transfer.js +0 -13
  181. package/node_modules/@blockcast/fec-worker/dist/transfer.js.map +0 -1
  182. package/node_modules/@blockcast/fec-worker/package.json +0 -59
  183. package/node_modules/@blockcast/fec-worker/src/block-order.ts +0 -93
  184. package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +0 -392
  185. package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +0 -399
  186. package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +0 -1502
  187. package/node_modules/@blockcast/fec-worker/src/index.ts +0 -35
  188. package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +0 -589
  189. package/node_modules/@blockcast/fec-worker/src/shred-worker-client.ts +0 -222
  190. package/node_modules/@blockcast/fec-worker/src/shred-worker-types.ts +0 -209
  191. package/node_modules/@blockcast/fec-worker/src/transfer.ts +0 -12
  192. package/node_modules/@blockcast/mmt-alta-parse/README.md +0 -181
  193. package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  194. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +0 -57
  195. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +0 -1
  196. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +0 -115
  197. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +0 -1
  198. package/node_modules/@blockcast/mmt-alta-parse/package.json +0 -50
  199. package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +0 -136
  200. package/node_modules/@blockcast/mmt-base/README.md +0 -134
  201. package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  202. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +0 -55
  203. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +0 -1
  204. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +0 -128
  205. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +0 -1
  206. package/node_modules/@blockcast/mmt-base/dist/index.d.ts +0 -7
  207. package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +0 -1
  208. package/node_modules/@blockcast/mmt-base/dist/index.js +0 -7
  209. package/node_modules/@blockcast/mmt-base/dist/index.js.map +0 -1
  210. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -292
  211. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +0 -1
  212. package/node_modules/@blockcast/mmt-base/dist/mmtp.js +0 -612
  213. package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +0 -1
  214. package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +0 -18
  215. package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +0 -1
  216. package/node_modules/@blockcast/mmt-base/dist/net-constants.js +0 -18
  217. package/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +0 -1
  218. package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +0 -47
  219. package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +0 -1
  220. package/node_modules/@blockcast/mmt-base/dist/ntp-short.js +0 -54
  221. package/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +0 -1
  222. package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +0 -57
  223. package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +0 -1
  224. package/node_modules/@blockcast/mmt-base/dist/serial-number.js +0 -98
  225. package/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +0 -1
  226. package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +0 -312
  227. package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +0 -1
  228. package/node_modules/@blockcast/mmt-base/dist/signalling.js +0 -637
  229. package/node_modules/@blockcast/mmt-base/dist/signalling.js.map +0 -1
  230. package/node_modules/@blockcast/mmt-base/package.json +0 -49
  231. package/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +0 -145
  232. package/node_modules/@blockcast/mmt-base/src/index.ts +0 -6
  233. package/node_modules/@blockcast/mmt-base/src/mmtp.ts +0 -892
  234. package/node_modules/@blockcast/mmt-base/src/net-constants.ts +0 -17
  235. package/node_modules/@blockcast/mmt-base/src/ntp-short.ts +0 -67
  236. package/node_modules/@blockcast/mmt-base/src/serial-number.ts +0 -107
  237. package/node_modules/@blockcast/mmt-base/src/signalling.ts +0 -862
  238. package/node_modules/@blockcast/mmt-fec/README.md +0 -271
  239. package/node_modules/@blockcast/mmt-fec/dist/.build-stamp +0 -0
  240. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts +0 -82
  241. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts.map +0 -1
  242. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js +0 -296
  243. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js.map +0 -1
  244. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts +0 -106
  245. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts.map +0 -1
  246. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js +0 -288
  247. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js.map +0 -1
  248. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts +0 -46
  249. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts.map +0 -1
  250. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js +0 -96
  251. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js.map +0 -1
  252. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts +0 -33
  253. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts.map +0 -1
  254. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js +0 -57
  255. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js.map +0 -1
  256. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts +0 -205
  257. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +0 -1
  258. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +0 -240
  259. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +0 -1
  260. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +0 -28
  261. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +0 -1
  262. package/node_modules/@blockcast/mmt-fec/dist/index.js +0 -28
  263. package/node_modules/@blockcast/mmt-fec/dist/index.js.map +0 -1
  264. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts +0 -20
  265. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts.map +0 -1
  266. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js +0 -28
  267. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js.map +0 -1
  268. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +0 -258
  269. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +0 -1
  270. package/node_modules/@blockcast/mmt-fec/dist/oti.js +0 -382
  271. package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +0 -1
  272. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts +0 -41
  273. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts.map +0 -1
  274. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js +0 -81
  275. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js.map +0 -1
  276. package/node_modules/@blockcast/mmt-fec/dist/repair-group.d.ts +0 -82
  277. package/node_modules/@blockcast/mmt-fec/dist/repair-group.d.ts.map +0 -1
  278. package/node_modules/@blockcast/mmt-fec/dist/repair-group.js +0 -170
  279. package/node_modules/@blockcast/mmt-fec/dist/repair-group.js.map +0 -1
  280. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/README.md +0 -181
  281. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  282. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +0 -57
  283. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +0 -1
  284. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js +0 -115
  285. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +0 -1
  286. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/package.json +0 -50
  287. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/src/index.ts +0 -136
  288. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +0 -134
  289. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  290. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +0 -55
  291. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +0 -1
  292. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +0 -128
  293. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +0 -1
  294. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +0 -7
  295. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +0 -1
  296. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +0 -7
  297. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +0 -1
  298. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -292
  299. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +0 -1
  300. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +0 -612
  301. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +0 -1
  302. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +0 -18
  303. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +0 -1
  304. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js +0 -18
  305. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +0 -1
  306. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +0 -47
  307. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +0 -1
  308. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js +0 -54
  309. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +0 -1
  310. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +0 -57
  311. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +0 -1
  312. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js +0 -98
  313. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +0 -1
  314. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +0 -312
  315. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +0 -1
  316. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js +0 -637
  317. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js.map +0 -1
  318. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +0 -49
  319. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +0 -145
  320. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +0 -6
  321. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +0 -892
  322. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/net-constants.ts +0 -17
  323. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/ntp-short.ts +0 -67
  324. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/serial-number.ts +0 -107
  325. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/signalling.ts +0 -862
  326. package/node_modules/@blockcast/mmt-fec/package.json +0 -79
  327. package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +0 -371
  328. package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +0 -439
  329. package/node_modules/@blockcast/mmt-fec/src/cmaf-recovery.ts +0 -127
  330. package/node_modules/@blockcast/mmt-fec/src/cmaf-symbols.ts +0 -68
  331. package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +0 -310
  332. package/node_modules/@blockcast/mmt-fec/src/index.ts +0 -94
  333. package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +0 -34
  334. package/node_modules/@blockcast/mmt-fec/src/oti.ts +0 -463
  335. package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +0 -101
  336. package/node_modules/@blockcast/mmt-fec/src/repair-group.ts +0 -195
  337. package/node_modules/@blockcast/mmt-manifest-verify/dist/.build-stamp +0 -0
  338. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts +0 -28
  339. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts.map +0 -1
  340. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js +0 -128
  341. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js.map +0 -1
  342. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts +0 -4
  343. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts.map +0 -1
  344. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js +0 -4
  345. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js.map +0 -1
  346. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts +0 -37
  347. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts.map +0 -1
  348. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js +0 -179
  349. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js.map +0 -1
  350. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts +0 -99
  351. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts.map +0 -1
  352. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js +0 -492
  353. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js.map +0 -1
  354. package/node_modules/@blockcast/mmt-manifest-verify/package.json +0 -45
  355. package/node_modules/@blockcast/mmt-manifest-verify/src/admission.ts +0 -171
  356. package/node_modules/@blockcast/mmt-manifest-verify/src/index.ts +0 -3
  357. package/node_modules/@blockcast/mmt-manifest-verify/src/source-auth.ts +0 -230
  358. package/node_modules/@blockcast/mmt-manifest-verify/src/verifier.ts +0 -669
  359. package/node_modules/@noble/hashes/LICENSE +0 -21
  360. package/node_modules/@noble/hashes/README.md +0 -521
  361. package/node_modules/@noble/hashes/_assert.d.ts +0 -17
  362. package/node_modules/@noble/hashes/_assert.d.ts.map +0 -1
  363. package/node_modules/@noble/hashes/_assert.js +0 -18
  364. package/node_modules/@noble/hashes/_assert.js.map +0 -1
  365. package/node_modules/@noble/hashes/_blake.d.ts +0 -14
  366. package/node_modules/@noble/hashes/_blake.d.ts.map +0 -1
  367. package/node_modules/@noble/hashes/_blake.js +0 -50
  368. package/node_modules/@noble/hashes/_blake.js.map +0 -1
  369. package/node_modules/@noble/hashes/_md.d.ts +0 -51
  370. package/node_modules/@noble/hashes/_md.d.ts.map +0 -1
  371. package/node_modules/@noble/hashes/_md.js +0 -162
  372. package/node_modules/@noble/hashes/_md.js.map +0 -1
  373. package/node_modules/@noble/hashes/_u64.d.ts +0 -55
  374. package/node_modules/@noble/hashes/_u64.d.ts.map +0 -1
  375. package/node_modules/@noble/hashes/_u64.js +0 -90
  376. package/node_modules/@noble/hashes/_u64.js.map +0 -1
  377. package/node_modules/@noble/hashes/argon2.d.ts +0 -32
  378. package/node_modules/@noble/hashes/argon2.d.ts.map +0 -1
  379. package/node_modules/@noble/hashes/argon2.js +0 -401
  380. package/node_modules/@noble/hashes/argon2.js.map +0 -1
  381. package/node_modules/@noble/hashes/blake1.d.ts +0 -106
  382. package/node_modules/@noble/hashes/blake1.d.ts.map +0 -1
  383. package/node_modules/@noble/hashes/blake1.js +0 -459
  384. package/node_modules/@noble/hashes/blake1.js.map +0 -1
  385. package/node_modules/@noble/hashes/blake2.d.ts +0 -116
  386. package/node_modules/@noble/hashes/blake2.d.ts.map +0 -1
  387. package/node_modules/@noble/hashes/blake2.js +0 -420
  388. package/node_modules/@noble/hashes/blake2.js.map +0 -1
  389. package/node_modules/@noble/hashes/blake2b.d.ts +0 -11
  390. package/node_modules/@noble/hashes/blake2b.d.ts.map +0 -1
  391. package/node_modules/@noble/hashes/blake2b.js +0 -14
  392. package/node_modules/@noble/hashes/blake2b.js.map +0 -1
  393. package/node_modules/@noble/hashes/blake2s.d.ts +0 -20
  394. package/node_modules/@noble/hashes/blake2s.d.ts.map +0 -1
  395. package/node_modules/@noble/hashes/blake2s.js +0 -24
  396. package/node_modules/@noble/hashes/blake2s.js.map +0 -1
  397. package/node_modules/@noble/hashes/blake3.d.ts +0 -54
  398. package/node_modules/@noble/hashes/blake3.d.ts.map +0 -1
  399. package/node_modules/@noble/hashes/blake3.js +0 -255
  400. package/node_modules/@noble/hashes/blake3.js.map +0 -1
  401. package/node_modules/@noble/hashes/crypto.d.ts +0 -2
  402. package/node_modules/@noble/hashes/crypto.d.ts.map +0 -1
  403. package/node_modules/@noble/hashes/crypto.js +0 -5
  404. package/node_modules/@noble/hashes/crypto.js.map +0 -1
  405. package/node_modules/@noble/hashes/cryptoNode.d.ts +0 -2
  406. package/node_modules/@noble/hashes/cryptoNode.d.ts.map +0 -1
  407. package/node_modules/@noble/hashes/cryptoNode.js +0 -18
  408. package/node_modules/@noble/hashes/cryptoNode.js.map +0 -1
  409. package/node_modules/@noble/hashes/eskdf.d.ts +0 -47
  410. package/node_modules/@noble/hashes/eskdf.d.ts.map +0 -1
  411. package/node_modules/@noble/hashes/eskdf.js +0 -166
  412. package/node_modules/@noble/hashes/eskdf.js.map +0 -1
  413. package/node_modules/@noble/hashes/esm/_assert.d.ts +0 -17
  414. package/node_modules/@noble/hashes/esm/_assert.d.ts.map +0 -1
  415. package/node_modules/@noble/hashes/esm/_assert.js +0 -15
  416. package/node_modules/@noble/hashes/esm/_assert.js.map +0 -1
  417. package/node_modules/@noble/hashes/esm/_blake.d.ts +0 -14
  418. package/node_modules/@noble/hashes/esm/_blake.d.ts.map +0 -1
  419. package/node_modules/@noble/hashes/esm/_blake.js +0 -45
  420. package/node_modules/@noble/hashes/esm/_blake.js.map +0 -1
  421. package/node_modules/@noble/hashes/esm/_md.d.ts +0 -51
  422. package/node_modules/@noble/hashes/esm/_md.d.ts.map +0 -1
  423. package/node_modules/@noble/hashes/esm/_md.js +0 -155
  424. package/node_modules/@noble/hashes/esm/_md.js.map +0 -1
  425. package/node_modules/@noble/hashes/esm/_u64.d.ts +0 -55
  426. package/node_modules/@noble/hashes/esm/_u64.d.ts.map +0 -1
  427. package/node_modules/@noble/hashes/esm/_u64.js +0 -67
  428. package/node_modules/@noble/hashes/esm/_u64.js.map +0 -1
  429. package/node_modules/@noble/hashes/esm/argon2.d.ts +0 -32
  430. package/node_modules/@noble/hashes/esm/argon2.d.ts.map +0 -1
  431. package/node_modules/@noble/hashes/esm/argon2.js +0 -392
  432. package/node_modules/@noble/hashes/esm/argon2.js.map +0 -1
  433. package/node_modules/@noble/hashes/esm/blake1.d.ts +0 -106
  434. package/node_modules/@noble/hashes/esm/blake1.d.ts.map +0 -1
  435. package/node_modules/@noble/hashes/esm/blake1.js +0 -452
  436. package/node_modules/@noble/hashes/esm/blake1.js.map +0 -1
  437. package/node_modules/@noble/hashes/esm/blake2.d.ts +0 -116
  438. package/node_modules/@noble/hashes/esm/blake2.d.ts.map +0 -1
  439. package/node_modules/@noble/hashes/esm/blake2.js +0 -413
  440. package/node_modules/@noble/hashes/esm/blake2.js.map +0 -1
  441. package/node_modules/@noble/hashes/esm/blake2b.d.ts +0 -11
  442. package/node_modules/@noble/hashes/esm/blake2b.d.ts.map +0 -1
  443. package/node_modules/@noble/hashes/esm/blake2b.js +0 -11
  444. package/node_modules/@noble/hashes/esm/blake2b.js.map +0 -1
  445. package/node_modules/@noble/hashes/esm/blake2s.d.ts +0 -20
  446. package/node_modules/@noble/hashes/esm/blake2s.d.ts.map +0 -1
  447. package/node_modules/@noble/hashes/esm/blake2s.js +0 -21
  448. package/node_modules/@noble/hashes/esm/blake2s.js.map +0 -1
  449. package/node_modules/@noble/hashes/esm/blake3.d.ts +0 -54
  450. package/node_modules/@noble/hashes/esm/blake3.d.ts.map +0 -1
  451. package/node_modules/@noble/hashes/esm/blake3.js +0 -251
  452. package/node_modules/@noble/hashes/esm/blake3.js.map +0 -1
  453. package/node_modules/@noble/hashes/esm/crypto.d.ts +0 -2
  454. package/node_modules/@noble/hashes/esm/crypto.d.ts.map +0 -1
  455. package/node_modules/@noble/hashes/esm/crypto.js +0 -2
  456. package/node_modules/@noble/hashes/esm/crypto.js.map +0 -1
  457. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts +0 -2
  458. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts.map +0 -1
  459. package/node_modules/@noble/hashes/esm/cryptoNode.js +0 -15
  460. package/node_modules/@noble/hashes/esm/cryptoNode.js.map +0 -1
  461. package/node_modules/@noble/hashes/esm/eskdf.d.ts +0 -47
  462. package/node_modules/@noble/hashes/esm/eskdf.d.ts.map +0 -1
  463. package/node_modules/@noble/hashes/esm/eskdf.js +0 -160
  464. package/node_modules/@noble/hashes/esm/eskdf.js.map +0 -1
  465. package/node_modules/@noble/hashes/esm/hkdf.d.ts +0 -36
  466. package/node_modules/@noble/hashes/esm/hkdf.d.ts.map +0 -1
  467. package/node_modules/@noble/hashes/esm/hkdf.js +0 -82
  468. package/node_modules/@noble/hashes/esm/hkdf.js.map +0 -1
  469. package/node_modules/@noble/hashes/esm/hmac.d.ts +0 -35
  470. package/node_modules/@noble/hashes/esm/hmac.d.ts.map +0 -1
  471. package/node_modules/@noble/hashes/esm/hmac.js +0 -86
  472. package/node_modules/@noble/hashes/esm/hmac.js.map +0 -1
  473. package/node_modules/@noble/hashes/esm/index.d.ts +0 -2
  474. package/node_modules/@noble/hashes/esm/index.d.ts.map +0 -1
  475. package/node_modules/@noble/hashes/esm/index.js +0 -33
  476. package/node_modules/@noble/hashes/esm/index.js.map +0 -1
  477. package/node_modules/@noble/hashes/esm/legacy.d.ts +0 -71
  478. package/node_modules/@noble/hashes/esm/legacy.d.ts.map +0 -1
  479. package/node_modules/@noble/hashes/esm/legacy.js +0 -281
  480. package/node_modules/@noble/hashes/esm/legacy.js.map +0 -1
  481. package/node_modules/@noble/hashes/esm/package.json +0 -10
  482. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts +0 -23
  483. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts.map +0 -1
  484. package/node_modules/@noble/hashes/esm/pbkdf2.js +0 -97
  485. package/node_modules/@noble/hashes/esm/pbkdf2.js.map +0 -1
  486. package/node_modules/@noble/hashes/esm/ripemd160.d.ts +0 -13
  487. package/node_modules/@noble/hashes/esm/ripemd160.d.ts.map +0 -1
  488. package/node_modules/@noble/hashes/esm/ripemd160.js +0 -13
  489. package/node_modules/@noble/hashes/esm/ripemd160.js.map +0 -1
  490. package/node_modules/@noble/hashes/esm/scrypt.d.ts +0 -34
  491. package/node_modules/@noble/hashes/esm/scrypt.d.ts.map +0 -1
  492. package/node_modules/@noble/hashes/esm/scrypt.js +0 -228
  493. package/node_modules/@noble/hashes/esm/scrypt.js.map +0 -1
  494. package/node_modules/@noble/hashes/esm/sha1.d.ts +0 -11
  495. package/node_modules/@noble/hashes/esm/sha1.d.ts.map +0 -1
  496. package/node_modules/@noble/hashes/esm/sha1.js +0 -11
  497. package/node_modules/@noble/hashes/esm/sha1.js.map +0 -1
  498. package/node_modules/@noble/hashes/esm/sha2.d.ts +0 -159
  499. package/node_modules/@noble/hashes/esm/sha2.d.ts.map +0 -1
  500. package/node_modules/@noble/hashes/esm/sha2.js +0 -375
  501. package/node_modules/@noble/hashes/esm/sha2.js.map +0 -1
  502. package/node_modules/@noble/hashes/esm/sha256.d.ts +0 -20
  503. package/node_modules/@noble/hashes/esm/sha256.d.ts.map +0 -1
  504. package/node_modules/@noble/hashes/esm/sha256.js +0 -20
  505. package/node_modules/@noble/hashes/esm/sha256.js.map +0 -1
  506. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts +0 -142
  507. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts.map +0 -1
  508. package/node_modules/@noble/hashes/esm/sha3-addons.js +0 -393
  509. package/node_modules/@noble/hashes/esm/sha3-addons.js.map +0 -1
  510. package/node_modules/@noble/hashes/esm/sha3.d.ts +0 -53
  511. package/node_modules/@noble/hashes/esm/sha3.d.ts.map +0 -1
  512. package/node_modules/@noble/hashes/esm/sha3.js +0 -234
  513. package/node_modules/@noble/hashes/esm/sha3.js.map +0 -1
  514. package/node_modules/@noble/hashes/esm/sha512.d.ts +0 -26
  515. package/node_modules/@noble/hashes/esm/sha512.d.ts.map +0 -1
  516. package/node_modules/@noble/hashes/esm/sha512.js +0 -26
  517. package/node_modules/@noble/hashes/esm/sha512.js.map +0 -1
  518. package/node_modules/@noble/hashes/esm/utils.d.ts +0 -161
  519. package/node_modules/@noble/hashes/esm/utils.d.ts.map +0 -1
  520. package/node_modules/@noble/hashes/esm/utils.js +0 -281
  521. package/node_modules/@noble/hashes/esm/utils.js.map +0 -1
  522. package/node_modules/@noble/hashes/hkdf.d.ts +0 -36
  523. package/node_modules/@noble/hashes/hkdf.d.ts.map +0 -1
  524. package/node_modules/@noble/hashes/hkdf.js +0 -88
  525. package/node_modules/@noble/hashes/hkdf.js.map +0 -1
  526. package/node_modules/@noble/hashes/hmac.d.ts +0 -35
  527. package/node_modules/@noble/hashes/hmac.d.ts.map +0 -1
  528. package/node_modules/@noble/hashes/hmac.js +0 -91
  529. package/node_modules/@noble/hashes/hmac.js.map +0 -1
  530. package/node_modules/@noble/hashes/index.d.ts +0 -1
  531. package/node_modules/@noble/hashes/index.d.ts.map +0 -1
  532. package/node_modules/@noble/hashes/index.js +0 -33
  533. package/node_modules/@noble/hashes/index.js.map +0 -1
  534. package/node_modules/@noble/hashes/legacy.d.ts +0 -71
  535. package/node_modules/@noble/hashes/legacy.d.ts.map +0 -1
  536. package/node_modules/@noble/hashes/legacy.js +0 -287
  537. package/node_modules/@noble/hashes/legacy.js.map +0 -1
  538. package/node_modules/@noble/hashes/package.json +0 -266
  539. package/node_modules/@noble/hashes/pbkdf2.d.ts +0 -23
  540. package/node_modules/@noble/hashes/pbkdf2.d.ts.map +0 -1
  541. package/node_modules/@noble/hashes/pbkdf2.js +0 -101
  542. package/node_modules/@noble/hashes/pbkdf2.js.map +0 -1
  543. package/node_modules/@noble/hashes/ripemd160.d.ts +0 -13
  544. package/node_modules/@noble/hashes/ripemd160.d.ts.map +0 -1
  545. package/node_modules/@noble/hashes/ripemd160.js +0 -16
  546. package/node_modules/@noble/hashes/ripemd160.js.map +0 -1
  547. package/node_modules/@noble/hashes/scrypt.d.ts +0 -34
  548. package/node_modules/@noble/hashes/scrypt.d.ts.map +0 -1
  549. package/node_modules/@noble/hashes/scrypt.js +0 -232
  550. package/node_modules/@noble/hashes/scrypt.js.map +0 -1
  551. package/node_modules/@noble/hashes/sha1.d.ts +0 -11
  552. package/node_modules/@noble/hashes/sha1.d.ts.map +0 -1
  553. package/node_modules/@noble/hashes/sha1.js +0 -14
  554. package/node_modules/@noble/hashes/sha1.js.map +0 -1
  555. package/node_modules/@noble/hashes/sha2.d.ts +0 -159
  556. package/node_modules/@noble/hashes/sha2.d.ts.map +0 -1
  557. package/node_modules/@noble/hashes/sha2.js +0 -384
  558. package/node_modules/@noble/hashes/sha2.js.map +0 -1
  559. package/node_modules/@noble/hashes/sha256.d.ts +0 -20
  560. package/node_modules/@noble/hashes/sha256.d.ts.map +0 -1
  561. package/node_modules/@noble/hashes/sha256.js +0 -23
  562. package/node_modules/@noble/hashes/sha256.js.map +0 -1
  563. package/node_modules/@noble/hashes/sha3-addons.d.ts +0 -142
  564. package/node_modules/@noble/hashes/sha3-addons.d.ts.map +0 -1
  565. package/node_modules/@noble/hashes/sha3-addons.js +0 -402
  566. package/node_modules/@noble/hashes/sha3-addons.js.map +0 -1
  567. package/node_modules/@noble/hashes/sha3.d.ts +0 -53
  568. package/node_modules/@noble/hashes/sha3.d.ts.map +0 -1
  569. package/node_modules/@noble/hashes/sha3.js +0 -239
  570. package/node_modules/@noble/hashes/sha3.js.map +0 -1
  571. package/node_modules/@noble/hashes/sha512.d.ts +0 -26
  572. package/node_modules/@noble/hashes/sha512.d.ts.map +0 -1
  573. package/node_modules/@noble/hashes/sha512.js +0 -29
  574. package/node_modules/@noble/hashes/sha512.js.map +0 -1
  575. package/node_modules/@noble/hashes/src/_assert.ts +0 -22
  576. package/node_modules/@noble/hashes/src/_blake.ts +0 -50
  577. package/node_modules/@noble/hashes/src/_md.ts +0 -176
  578. package/node_modules/@noble/hashes/src/_u64.ts +0 -91
  579. package/node_modules/@noble/hashes/src/argon2.ts +0 -497
  580. package/node_modules/@noble/hashes/src/blake1.ts +0 -534
  581. package/node_modules/@noble/hashes/src/blake2.ts +0 -486
  582. package/node_modules/@noble/hashes/src/blake2b.ts +0 -10
  583. package/node_modules/@noble/hashes/src/blake2s.ts +0 -20
  584. package/node_modules/@noble/hashes/src/blake3.ts +0 -272
  585. package/node_modules/@noble/hashes/src/crypto.ts +0 -9
  586. package/node_modules/@noble/hashes/src/cryptoNode.ts +0 -15
  587. package/node_modules/@noble/hashes/src/eskdf.ts +0 -187
  588. package/node_modules/@noble/hashes/src/hkdf.ts +0 -88
  589. package/node_modules/@noble/hashes/src/hmac.ts +0 -94
  590. package/node_modules/@noble/hashes/src/index.ts +0 -31
  591. package/node_modules/@noble/hashes/src/legacy.ts +0 -293
  592. package/node_modules/@noble/hashes/src/pbkdf2.ts +0 -122
  593. package/node_modules/@noble/hashes/src/ripemd160.ts +0 -12
  594. package/node_modules/@noble/hashes/src/scrypt.ts +0 -257
  595. package/node_modules/@noble/hashes/src/sha1.ts +0 -10
  596. package/node_modules/@noble/hashes/src/sha2.ts +0 -402
  597. package/node_modules/@noble/hashes/src/sha256.ts +0 -24
  598. package/node_modules/@noble/hashes/src/sha3-addons.ts +0 -499
  599. package/node_modules/@noble/hashes/src/sha3.ts +0 -258
  600. package/node_modules/@noble/hashes/src/sha512.ts +0 -34
  601. package/node_modules/@noble/hashes/src/utils.ts +0 -395
  602. package/node_modules/@noble/hashes/utils.d.ts +0 -161
  603. package/node_modules/@noble/hashes/utils.d.ts.map +0 -1
  604. package/node_modules/@noble/hashes/utils.js +0 -313
  605. package/node_modules/@noble/hashes/utils.js.map +0 -1
package/src/fec-state.ts CHANGED
@@ -15,20 +15,8 @@
15
15
 
16
16
  import { isFecBlockProfile } from '@blockcast/mmt-base'
17
17
 
18
- /**
19
- * Minimum valid FEC interleave depth in milliseconds, per spec §5.1
20
- * (the interactive/gaming floor; broadcast/ATSC 3.0 ranges up to 10000ms).
21
- *
22
- * A protocol constant, NOT a tuning knob. Values below this floor are almost
23
- * certainly a raw frame count (e.g. `2`) that a caller passed when no framerate
24
- * was available to convert to ms (common on audio tracks). Feeding such a value
25
- * into computeFecTimeout treats it as `2ms`, yielding a near-zero FEC block
26
- * timeout that abandons startup FEC blocks before their repair symbols arrive
27
- * (measured: moqtail startupFailed=4, shaka dropped=5.8% on startup). Timing
28
- * derivations MUST reject sub-floor values and fall back to the established
29
- * timeout instead of collapsing.
30
- */
31
- export const MIN_INTERLEAVE_DEPTH_MS = 33
18
+ /** Smallest positive catalog elapsed span; zero/absence means no elapsed deadline. */
19
+ export const MIN_INTERLEAVE_DEPTH_MS = 1
32
20
 
33
21
  /** Why FEC is not protecting this session. */
34
22
  export type FecInactiveReason = 'no-catalog-fec' | 'reliable-moq' | 'no-multicast-bridge'
@@ -112,8 +100,10 @@ function isPositiveSafeInteger(value: unknown): boolean {
112
100
  * Whether one catalog `fec` block (a hang rendition's `fec` or an MSF/CMSF
113
101
  * track's `fec`) declares an FEC instance a receiver can configure: source
114
102
  * symbols per block (K) and a symbol size (T) are both positive integers, the
115
- * algorithm is not `none`, and `blockProfile` names a known block profile
116
- * (BLO-35597). Total: it never throws, and answers false for any other value.
103
+ * algorithm is not `none`, `blockProfile` names the implemented profile
104
+ * `iso-ssbg1-v1` (BLO-35597), and the block carries that profile's usable
105
+ * span field (`isoBlockSpanUsable`); zero/absence still permits in-band FEC. Total: it never throws, and answers false for
106
+ * any other value.
117
107
  *
118
108
  * `resolveCatalogTrackFec` reads this predicate, so the players' parameters and
119
109
  * this state never disagree. Of the blocks this rejects, it returns no FEC
@@ -127,14 +117,18 @@ function isPositiveSafeInteger(value: unknown): boolean {
127
117
  * the track's repair subscription.
128
118
  *
129
119
  * The block profile is part of this predicate because the profile selects the
130
- * block math and is never defaulted: without a known one no receiver can
131
- * configure the instance. `resolveCatalogTrackFec` resolves such a track to no
132
- * FEC with a typed `fecUnavailable` reason (`track_fec_block_profile`), scoped
133
- * to that track, so its parameters and this state still agree. The CMSF
134
- * conformance validator (`validateCmsfMmtpCatalog`) still rejects the catalog
135
- * with `track_fec_block_profile`. An `iso-ssbg1-v1` instance without a usable
136
- * block span (`isoBlockSpanUsable`) is likewise no FEC for its track alone,
137
- * with `fecUnavailable` code `track_fec` on its `interleaveDepthMs`.
120
+ * block math and is never defaulted: draft-ramadan-moq-fec §5.1 defines one,
121
+ * `iso-ssbg1-v1`, and a receiver MUST NOT apply FEC under any other token. The
122
+ * retired `k-padded-v1` is simply not a known profile. `resolveCatalogTrackFec`
123
+ * and `MulticastManager.configureMultiTrack` resolve such a track to no FEC
124
+ * with a typed `TrackFecUnavailable` reason (`catalogFecUnavailable`: code
125
+ * `track_fec_block_profile_unimplemented` for an unimplemented token,
126
+ * `track_fec_block_profile` for an absent one), scoped to that track, so their
127
+ * parameters and this state still agree. The CMSF conformance validator
128
+ * (`validateCmsfMmtpCatalog`) rejects the catalog with the same code. An
129
+ * `iso-ssbg1-v1` instance with an invalid span is likewise unavailable for its
130
+ * track alone. Zero or absence supplies no elapsed deadline and uses bounded
131
+ * receiver-local state while decoding in-band FEC.
138
132
  *
139
133
  * The repair-contract resolvers (`resolveRepairLayers`) gate a `depends` target
140
134
  * on `algorithm` alone and never read a source's `symbolSize`. They check its
@@ -153,18 +147,12 @@ export function catalogDeclaresFec(fec: unknown): boolean {
153
147
  )
154
148
  }
155
149
 
156
- /**
157
- * Whether a `fec` block that names `iso-ssbg1-v1` carries the block span its
158
- * block location is bounded by: `interleaveDepthMs`, a finite number of
159
- * milliseconds no smaller than `MIN_INTERLEAVE_DEPTH_MS`. Without it a receiver
160
- * cannot bound the sources it holds before a repair states their block, so the
161
- * instance cannot be configured (BLO-35597). Any other block needs no span here.
162
- */
150
+ /** Validate the optional elapsed span without requiring one for in-band FEC. */
163
151
  export function isoBlockSpanUsable(fec: unknown): boolean {
164
152
  const block = recordOf(fec)
165
153
  if (block === undefined || block['blockProfile'] !== 'iso-ssbg1-v1') return true
166
154
  const ms = block['interleaveDepthMs']
167
- return typeof ms === 'number' && Number.isFinite(ms) && ms >= MIN_INTERLEAVE_DEPTH_MS
155
+ return ms === undefined || (typeof ms === 'number' && Number.isSafeInteger(ms) && ms >= 0)
168
156
  }
169
157
 
170
158
  function requireBoolean(value: unknown, field: string): boolean {
@@ -4,7 +4,7 @@
4
4
  * Wires a FecWorkerClient into a MulticastManager for a specific track.
5
5
  * Both moq-lib (`hang-mmt-fec/js/watch/src/element.ts`) and moqtail
6
6
  * (`moqtail-private/apps/client-js/src/lib/player.ts`) call this from their
7
- * SessionManager `fec-setup` handler so the Worker+ALTA setup lives in one
7
+ * SessionManager `fec-setup` handler so the Worker setup lives in one
8
8
  * place instead of being duplicated across ~80 lines per player.
9
9
  *
10
10
  * Callers are responsible for holding the returned `dispose()` and calling it
@@ -16,7 +16,11 @@
16
16
  import { parseFecBlockProfile, type FecBlockProfile } from '@blockcast/mmt-base'
17
17
  import type { FecWorkerClient, FecTrackConfig } from '@blockcast/fec-worker'
18
18
  import type { MulticastManager } from './multicast-manager.js'
19
- import { deriveFecRetentionBlocks } from '@blockcast/mmt-fec'
19
+ import {
20
+ deriveFecRetentionBlocks,
21
+ LOCAL_FEC_RETENTION_BLOCKS,
22
+ LOCAL_FEC_TIMEOUT_MS,
23
+ } from '@blockcast/mmt-fec'
20
24
  import { computeFecDeliveryWindowMs } from './track-session.js'
21
25
 
22
26
  /** Asset URLs the helper needs. Callers pass the already-resolved set. */
@@ -25,8 +29,6 @@ export interface FecWorkerAssetUrls {
25
29
  fecWorker: string
26
30
  /** URL to the RaptorQ WASM module (compiled via compileStreaming). */
27
31
  rqWasm: string
28
- /** URL to the ALTA WASM module. Fetched only when an ALTA key is provided. */
29
- altaWasm: string
30
32
  }
31
33
 
32
34
  export interface FecWorkerSetupOptions {
@@ -39,13 +41,19 @@ export interface FecWorkerSetupOptions {
39
41
  /** Track type from catalog. Never inferred from name. */
40
42
  trackType: 'video' | 'audio'
41
43
  /**
42
- * The catalog `fec.blockProfile` (BLO-35597). Required: `k-padded-v1` or
43
- * `iso-ssbg1-v1`; never defaulted, never inferred.
44
+ * The catalog `fec.blockProfile` (BLO-35597). Required and validated with
45
+ * `parseFecBlockProfile`: `iso-ssbg1-v1` is the only FEC block profile, and
46
+ * any other token (the retired `k-padded-v1` included) throws before a
47
+ * Worker is created. Never defaulted, never inferred.
44
48
  */
45
49
  fecBlockProfile: FecBlockProfile
46
- /** FEC K from catalog (source symbols per block). Under iso-ssbg1-v1 the maximum SSB_length. */
50
+ /**
51
+ * FEC K from catalog: the maximum SSB_length (K_max) of any block. Blocks
52
+ * are variable-length ssbg_mode1 blocks keyed by SS_Start, so K bounds
53
+ * block distance from below; it never strides SS_IDs into blocks.
54
+ */
47
55
  fecK: number
48
- /** Symbol size in bytes (T) — the ALTA-adjusted value if ALTA is signed. */
56
+ /** Symbol size in bytes (T). */
49
57
  fecSymbolSize: number
50
58
  /** Repair symbols per block (P). */
51
59
  fecRepairCount: number
@@ -57,12 +65,16 @@ export interface FecWorkerSetupOptions {
57
65
  * `fecRepairCount`, which is the same value on a single-layer track.
58
66
  */
59
67
  joinedRepairCount?: number
60
- /** Interleave depth in ms. */
68
+ /** Catalog interleave span in integer milliseconds; zero means no span. */
61
69
  fecInterleaveMs: number
62
70
  /** Explicit catalog jitter/reorder allowance in ms. */
63
71
  fecReorderToleranceMs?: number
64
- /** Duration of one FEC media unit in ms (video frame or audio access unit). */
65
- mediaUnitDurationMs: number
72
+ /**
73
+ * Duration of one FEC media unit in ms (video frame or audio access unit).
74
+ * Required only when the catalog supplies a positive elapsed FEC span. A
75
+ * missing/zero span must not invent a media cadence for its local bound.
76
+ */
77
+ mediaUnitDurationMs?: number
66
78
  /** Optional repair track name (MoQ). Forwarded to FecTrackConfig. */
67
79
  repairTrackName?: string
68
80
  /** Audio sample rate (optional — audio tracks only). */
@@ -71,8 +83,6 @@ export interface FecWorkerSetupOptions {
71
83
  codec?: string
72
84
  /** Video framerate (optional metadata forwarded to the worker). */
73
85
  framerate?: number
74
- /** Base64 SPKI public key (optional). Accepts padded/unpadded, std or url-safe alphabet. */
75
- altaPublicKeySpki?: string
76
86
  /** Absolute or origin-relative asset URLs. */
77
87
  assetUrls: FecWorkerAssetUrls
78
88
  /** Optional FecWorkerClient factory — main use is test injection. */
@@ -82,8 +92,6 @@ export interface FecWorkerSetupOptions {
82
92
  export interface FecWorkerSetupResult {
83
93
  /** The configured client (already registered with MulticastManager). */
84
94
  client: FecWorkerClient
85
- /** True when the ALTA public key decoded and the ALTA WASM compiled. */
86
- altaEnabled: boolean
87
95
  /** Removes the Worker from MulticastManager routing, then releases it. */
88
96
  dispose: () => void
89
97
  }
@@ -100,50 +108,98 @@ export interface FecWorkerSetupResult {
100
108
  export async function setupFecWorkerForTrack(
101
109
  opts: FecWorkerSetupOptions,
102
110
  ): Promise<FecWorkerSetupResult> {
103
- // These two were previously validated as a side effect of calling
104
- // deriveFecInterleaveDepth() here. That call is gone (see below), so the
105
- // guards are explicit — a zero or non-finite span/media-unit must still fail
106
- // closed rather than size a window from a hardcoded depth.
107
- //
108
- // `mediaUnitDurationMs` no longer influences the retention this function
109
- // computes: it survives only as `mediaUnitsPerSecond`, which
110
- // `computeFecDeliveryWindowMs` (track-session.ts) documents as geometry
111
- // accepted for existing callers and deliberately not fed to deadline math.
112
- // The guard stays anyway — this is a trust boundary for a catalog-supplied
113
- // value, and the test `rejects missing media-unit timing instead of using a
114
- // hardcoded depth` pins it. Not dead code. Cite both by symbol, not by line:
115
- // a line number here is invalidated by the next edit to the file it points
116
- // at, and this comment is the guard's only stated defence.
117
- if (!Number.isFinite(opts.fecInterleaveMs) || opts.fecInterleaveMs <= 0) {
118
- // Names the catalog field (`fec.interleaveDepthMs`), not the local option
119
- // (`opts.fecInterleaveMs`), because that is the knob an operator fixes.
111
+ // A zero span is the catalog's no-deadline signal. It still configures the
112
+ // decoder, but its retention and cleanup values are receiver-local. Do not
113
+ // pass it through a timing derivation: that would turn a missing media
114
+ // cadence into a made-up FEC deadline.
115
+ if (
116
+ !Number.isFinite(opts.fecInterleaveMs) ||
117
+ !Number.isSafeInteger(opts.fecInterleaveMs) ||
118
+ opts.fecInterleaveMs < 0
119
+ ) {
120
120
  throw new Error(
121
- `[FEC] interleaveDepthMs (opts.fecInterleaveMs) must be finite and > 0 ` +
121
+ `[FEC] interleaveDepthMs (opts.fecInterleaveMs) must be a finite non-negative integer ` +
122
122
  `(got ${opts.fecInterleaveMs})`,
123
123
  )
124
124
  }
125
- if (!Number.isFinite(opts.mediaUnitDurationMs) || opts.mediaUnitDurationMs <= 0) {
125
+ if (
126
+ opts.fecReorderToleranceMs !== undefined &&
127
+ (!Number.isFinite(opts.fecReorderToleranceMs) || opts.fecReorderToleranceMs < 0)
128
+ ) {
126
129
  throw new Error(
127
- `[FEC] mediaUnitDurationMs must be finite and > 0 (got ${opts.mediaUnitDurationMs})`,
130
+ `[FEC] fecReorderToleranceMs must be finite and >= 0 ` +
131
+ `(got ${opts.fecReorderToleranceMs})`,
132
+ )
133
+ }
134
+ const hasCatalogTiming = opts.fecInterleaveMs > 0
135
+ const validateWorkerGeometry = (): void => {
136
+ // `computeFecDeliveryWindowMs` used to reject a malformed K as a side
137
+ // effect. The no-span path intentionally skips that timing derivation, so
138
+ // keep decoder geometry validation at this trust boundary before creating
139
+ // a Worker. T is likewise checked here because the Worker receives it
140
+ // through the asynchronous configure message.
141
+ if (!Number.isSafeInteger(opts.fecK) || opts.fecK <= 0) {
142
+ throw new Error(`[FEC] fecK must be a finite positive integer (got ${opts.fecK})`)
143
+ }
144
+ if (
145
+ !Number.isSafeInteger(opts.fecSymbolSize) ||
146
+ opts.fecSymbolSize <= 0 ||
147
+ opts.fecSymbolSize % 8 !== 0
148
+ ) {
149
+ throw new Error(
150
+ `[FEC] fecSymbolSize must be a positive 8-byte-aligned integer (got ${opts.fecSymbolSize})`,
151
+ )
152
+ }
153
+ if (!Number.isSafeInteger(opts.fecRepairCount) || opts.fecRepairCount <= 0) {
154
+ throw new Error(
155
+ `[FEC] fecRepairCount must be a finite positive integer (got ${opts.fecRepairCount})`,
156
+ )
157
+ }
158
+ }
159
+ let deliveryWindowMs: number
160
+ let interleaveDepthBlocks: number
161
+ if (!hasCatalogTiming) {
162
+ validateWorkerGeometry()
163
+ deliveryWindowMs = LOCAL_FEC_TIMEOUT_MS
164
+ interleaveDepthBlocks = LOCAL_FEC_RETENTION_BLOCKS
165
+ } else {
166
+ const mediaUnitDurationMs = opts.mediaUnitDurationMs
167
+ if (
168
+ typeof mediaUnitDurationMs !== 'number' ||
169
+ !Number.isFinite(mediaUnitDurationMs) ||
170
+ mediaUnitDurationMs <= 0
171
+ ) {
172
+ throw new Error(
173
+ `[FEC] mediaUnitDurationMs must be finite and > 0 (got ${mediaUnitDurationMs})`,
174
+ )
175
+ }
176
+ validateWorkerGeometry()
177
+ deliveryWindowMs = computeFecDeliveryWindowMs({
178
+ interleaveDepthMs: opts.fecInterleaveMs,
179
+ sourceSymbols: opts.fecK,
180
+ repairSymbols: opts.fecRepairCount,
181
+ symbolSize: opts.fecSymbolSize,
182
+ mediaUnitsPerSecond: 1000 / mediaUnitDurationMs,
183
+ jitterBufferMs: opts.fecReorderToleranceMs,
184
+ })
185
+ // `interleaveDepth` is a decoder block count. It is derived only for a
186
+ // positive catalog span; no-span uses the fixed local count above.
187
+ interleaveDepthBlocks = deriveFecRetentionBlocks(
188
+ deliveryWindowMs,
189
+ opts.fecInterleaveMs,
128
190
  )
129
191
  }
130
192
  const blockProfile = parseFecBlockProfile(
131
193
  opts.fecBlockProfile,
132
194
  `[FEC] ${opts.trackName} fec.blockProfile`,
133
195
  )
134
- const deliveryWindowMs = computeFecDeliveryWindowMs({
135
- interleaveDepthMs: opts.fecInterleaveMs,
136
- sourceSymbols: opts.fecK,
137
- repairSymbols: opts.fecRepairCount,
138
- symbolSize: opts.fecSymbolSize,
139
- mediaUnitsPerSecond: 1000 / opts.mediaUnitDurationMs,
140
- jitterBufferMs: opts.fecReorderToleranceMs,
141
- })
142
196
  // `FecTrackConfig.interleaveDepth` is a BLOCK COUNT, not D. Every consumer
143
- // measures SBN distance with it: the worker's `advanceMediaHorizon` does
144
- // `liveSbn - interleaveDepth`, and `MmtFecDecoder::new` documents its
145
- // argument as "the number of interleaved blocks" before `cleanup_by_sbn`
146
- // subtracts it from an SBN and counts the remainder `blocks_failed`.
197
+ // measures block distance with it: the worker's `advanceMediaHorizon`
198
+ // retires a block more than `interleaveDepth` blocks behind the live SS_ID
199
+ // (`isoBlocksBehind`, a lower bound from K_max), and `MmtFecDecoder::new`
200
+ // documents its argument as "the number of interleaved blocks" before
201
+ // `cleanup_by_ss_start` retires every block that far behind and counts it
202
+ // `blocks_failed`.
147
203
  //
148
204
  // `deriveFecInterleaveDepth` returns D — MEDIA UNITS per block — so feeding
149
205
  // it here mixed units and sized the retention window in the wrong quantity.
@@ -161,19 +217,6 @@ export async function setupFecWorkerForTrack(
161
217
  // On 720p and audio the decoder expired blocks — counting them failed — while
162
218
  // the receiver's own deadline for them had not yet passed.
163
219
  //
164
- // Derive the count from the two quantities that define it, so retention
165
- // always covers the deadline already armed for that block: the blocks that
166
- // can be in flight within one block's budget, plus the one being filled.
167
- //
168
- // `deriveFecRetentionBlocks` is THE one derivation of this horizon -- the
169
- // FECManager's ordered-relay settlement consumes the same function, so the
170
- // two cannot drift apart again (BLO-35597 Decision E). It fails closed above
171
- // the 255 the WASM decoder and the ISO/IEC 23008-1 AL-FEC signaling byte
172
- // accept, rather than clamping to a retention shorter than this window.
173
- const interleaveDepthBlocks = deriveFecRetentionBlocks(
174
- deliveryWindowMs,
175
- opts.fecInterleaveMs,
176
- )
177
220
  // Resolve URL against location.origin when available (browser runtime).
178
221
  // Absolute URLs pass through unchanged per the URL() spec.
179
222
  const origin =
@@ -185,32 +228,9 @@ export async function setupFecWorkerForTrack(
185
228
  ? opts.clientFactory(workerUrl)
186
229
  : new FecWorkerCtor.FecWorkerClient(workerUrl)
187
230
 
188
- // Compile RaptorQ WASM once; ALTA WASM only when we have a key to decode.
231
+ // Compile RaptorQ WASM once.
189
232
  const rqWasm = await WebAssembly.compileStreaming(fetch(opts.assetUrls.rqWasm))
190
233
 
191
- let altaKeyBuffer: ArrayBuffer | undefined
192
- let altaWasmModule: WebAssembly.Module | undefined
193
- if (opts.altaPublicKeySpki) {
194
- const b64 = opts.altaPublicKeySpki.replace(/-/g, '+').replace(/_/g, '/')
195
- const padded = b64.padEnd(Math.ceil(b64.length / 4) * 4, '=')
196
- try {
197
- const keyBytes = Uint8Array.from(atob(padded), c => c.charCodeAt(0))
198
- // SPKI size range: Ed25519=44, P-256=91; tolerate 32..=256 for forward-compat.
199
- if (keyBytes.length >= 32 && keyBytes.length <= 256) {
200
- altaKeyBuffer = keyBytes.buffer
201
- altaWasmModule = await WebAssembly.compileStreaming(fetch(opts.assetUrls.altaWasm))
202
- } else {
203
- console.warn(
204
- `[fec-worker-setup] ALTA SPKI wrong length for "${opts.trackName}": ` +
205
- `${keyBytes.length} (expected 32..256) — ALTA disabled`,
206
- )
207
- }
208
- } catch (e) {
209
- console.warn(`[fec-worker-setup] ALTA key decode / WASM compile failed for "${opts.trackName}":`, e)
210
- }
211
- }
212
-
213
- const altaEnabled = !!(altaKeyBuffer && altaWasmModule)
214
234
  const fecTrackConfig = {
215
235
  codec: opts.codec ?? 'unknown',
216
236
  trackName: opts.trackName,
@@ -229,20 +249,20 @@ export async function setupFecWorkerForTrack(
229
249
  deliveryWindowMs,
230
250
  fecMode: 'subframe' as const,
231
251
  repairTrack: opts.repairTrackName,
232
- altaEnabled,
233
252
  relayBlockSigEnabled: false,
234
253
  } as unknown as FecTrackConfig
235
254
 
236
- client.configure(fecTrackConfig, rqWasm, altaKeyBuffer, altaWasmModule)
255
+ client.configure(fecTrackConfig, rqWasm)
237
256
  try {
238
257
  opts.multicastManager.setFecWorker(opts.packetId, client, opts.trackType, {
239
258
  blockProfile,
240
259
  k: opts.fecK,
241
260
  symbolSize: opts.fecSymbolSize,
242
261
  interleaveDepthMs: opts.fecInterleaveMs,
243
- // FEC timing is expressed in media units. For audio this is the access-unit
244
- // cadence (for example 1024/48kHz), not a video-only framerate field.
245
- fps: 1000 / opts.mediaUnitDurationMs,
262
+ // No-span tracks have no catalog media cadence. The manager still gets
263
+ // the local cleanup budget, but it must not use a guessed fps for timing
264
+ // or classification.
265
+ ...(hasCatalogTiming ? { fps: 1000 / opts.mediaUnitDurationMs! } : {}),
246
266
  timeoutMs: deliveryWindowMs,
247
267
  }, opts.trackName)
248
268
  } catch (e) {
@@ -260,7 +280,6 @@ export async function setupFecWorkerForTrack(
260
280
  let disposed = false
261
281
  return {
262
282
  client,
263
- altaEnabled,
264
283
  dispose: () => {
265
284
  if (disposed) return
266
285
  disposed = true
package/src/index.ts CHANGED
@@ -126,6 +126,7 @@ export {
126
126
  type FecAlgorithm,
127
127
  type FecCatalogConfig,
128
128
  isFecCatalogConfig,
129
+ isFecCatalogGeometry,
129
130
  type MulticastProtocol,
130
131
  type MulticastTrack,
131
132
  type MulticastTrackObject,
@@ -149,6 +150,28 @@ export {
149
150
  archiveOrigin,
150
151
  } from './carp-catalog.js'
151
152
 
153
+ // Strict v2 multicast delivery catalog (DASH/HLS/MMTP routes), moved from
154
+ // moqtail-private so players share one contract (BLO-47003).
155
+ export {
156
+ normalizeDeliveryCatalog,
157
+ type DeliveryPackaging,
158
+ type DeliveryContentType,
159
+ type DeliveryEndpoint,
160
+ type DeliveryPolicy,
161
+ type DeliveryObjectMapping,
162
+ type DeliveryFec,
163
+ type DeliveryRouteBase,
164
+ type DashDeliveryRoute,
165
+ type HlsDeliveryRoute,
166
+ type MmtpDeliveryRoute,
167
+ type DashDeliveryConfig,
168
+ type HlsDeliveryConfig,
169
+ type MmtpDeliveryConfig,
170
+ type DeliveryMulticastBase,
171
+ type DeliveryMulticastV2,
172
+ type DeliveryCatalogV2,
173
+ } from './delivery-catalog.js'
174
+
152
175
  // Multicast input contract — validator + builder for publisher-emitted
153
176
  // catalogs (draft-ramadan-moq-multicast-00 §4.1, BLO-3323 A.1).
154
177
  // `multicastFromEnv` is the env-var helper used by FFmpeg and the
@@ -410,7 +433,13 @@ export {
410
433
  type FrameMeta as RouterFrameMeta,
411
434
  type FrameKind,
412
435
  type SourceKind,
436
+ type DeltaFallbackConfig,
413
437
  } from './media-router.js'
438
+ export {
439
+ resolveDeltaFallback,
440
+ type DeltaFallbackTrack,
441
+ type ResolvedDeltaFallback,
442
+ } from './delta-fallback-config.js'
414
443
 
415
444
  // Group-alignment primitive — shared with Go sender + Rust relay.
416
445
  // See align.ts docstring for cross-language contract. Authoritative form
@@ -522,7 +551,10 @@ export {
522
551
  type KeyframeCadenceCatalog,
523
552
  type TrackFecParams,
524
553
  type TrackFecUnavailable,
554
+ catalogFecUnavailable,
525
555
  catalogGroupDurationMs,
556
+ catalogKeyframeCadenceMs,
557
+ catalogFecMediaUnitsPerSecond,
526
558
  type GroupDurationRendition,
527
559
  resolveCatalogTrackGroupDurationMs,
528
560
  joinedRepairSymbolCount,
@@ -161,6 +161,51 @@ interface TrackSourceRecord {
161
161
  emitCount: number
162
162
  }
163
163
 
164
+ /** Catalog-derived inputs to {@link MediaRouter.configureDelta}. */
165
+ export interface DeltaFallbackConfig {
166
+ framerate: number
167
+ sourceSymbols: number
168
+ repairSymbols: number
169
+ deltaFailWindowBlocks?: number
170
+ deltaProbeIntervalMs?: number
171
+ interleaveDepthMs?: number
172
+ }
173
+
174
+ /**
175
+ * The one admission check for {@link DeltaFallbackConfig}, shared by
176
+ * {@link MediaRouter.configureDelta} and `resolveDeltaFallback` so a config the
177
+ * resolver accepts is exactly one configureDelta accepts. Every present number
178
+ * must be finite and positive (`typeof NaN === 'number'`, and `NaN <= 0` is
179
+ * false, so a bare comparison admits it); the fail window is a block count and
180
+ * must be an integer; and a probe interval must be derivable.
181
+ */
182
+ export function assertDeltaFallbackConfig(cfg: DeltaFallbackConfig, prefix: string): void {
183
+ if (!isPositiveFinite(cfg.framerate)) throw new Error(`${prefix}: framerate required and must be > 0`)
184
+ if (!isPositiveFinite(cfg.sourceSymbols))
185
+ throw new Error(`${prefix}: sourceSymbols (K_delta) required and must be > 0`)
186
+ if (!isPositiveFinite(cfg.repairSymbols))
187
+ throw new Error(`${prefix}: repairSymbols (P_delta) required and must be > 0`)
188
+ if (
189
+ cfg.deltaFailWindowBlocks !== undefined &&
190
+ !(Number.isInteger(cfg.deltaFailWindowBlocks) && cfg.deltaFailWindowBlocks > 0)
191
+ ) {
192
+ throw new Error(`${prefix}: deltaFailWindowBlocks must be a positive integer when present`)
193
+ }
194
+ if (cfg.deltaProbeIntervalMs !== undefined && !isPositiveFinite(cfg.deltaProbeIntervalMs))
195
+ throw new Error(`${prefix}: deltaProbeIntervalMs must be > 0 when present`)
196
+ if (cfg.interleaveDepthMs !== undefined && !isPositiveFinite(cfg.interleaveDepthMs))
197
+ throw new Error(`${prefix}: interleaveDepthMs must be > 0 when present`)
198
+ if (cfg.deltaProbeIntervalMs === undefined && cfg.interleaveDepthMs === undefined) {
199
+ throw new Error(
200
+ `${prefix}: either deltaProbeIntervalMs or interleaveDepthMs required for probe interval derivation`
201
+ )
202
+ }
203
+ }
204
+
205
+ function isPositiveFinite(value: unknown): value is number {
206
+ return typeof value === 'number' && Number.isFinite(value) && value > 0
207
+ }
208
+
164
209
  export class MediaRouter {
165
210
  #active: SourceKind = 'moq'
166
211
  #multicastVideoKeyed = false
@@ -339,29 +384,21 @@ export class MediaRouter {
339
384
  * CLAUDE.md: error on bad init — throws if required inputs are absent.
340
385
  *
341
386
  * Calling again resets deltaActive=true and clears the window buffer (stream restart).
387
+ * Pass null on teardown or when a replacement catalog cannot configure this policy.
342
388
  */
343
- configureDelta(cfg: {
344
- framerate: number
345
- sourceSymbols: number
346
- repairSymbols: number
347
- deltaFailWindowBlocks?: number
348
- deltaProbeIntervalMs?: number
349
- interleaveDepthMs?: number
350
- }): void {
351
- if (typeof cfg.framerate !== 'number' || !Number.isFinite(cfg.framerate) || cfg.framerate <= 0) {
352
- throw new Error('[MediaRouter] configureDelta: framerate required and must be > 0')
353
- }
354
- if (typeof cfg.sourceSymbols !== 'number' || cfg.sourceSymbols <= 0) {
355
- throw new Error('[MediaRouter] configureDelta: sourceSymbols (K_delta) required and must be > 0')
356
- }
357
- if (typeof cfg.repairSymbols !== 'number' || cfg.repairSymbols <= 0) {
358
- throw new Error('[MediaRouter] configureDelta: repairSymbols (P_delta) required and must be > 0')
359
- }
360
- if (cfg.deltaProbeIntervalMs === undefined && cfg.interleaveDepthMs === undefined) {
361
- throw new Error(
362
- '[MediaRouter] configureDelta: either deltaProbeIntervalMs or interleaveDepthMs required for probe interval derivation'
363
- )
389
+ configureDelta(cfg: DeltaFallbackConfig | null): void {
390
+ if (cfg === null) {
391
+ this.#deltaConfigured = false
392
+ this.#deltaActive = true
393
+ this.#deltaWindow = []
394
+ this.#deltaWindowSize = 0
395
+ this.#deltaFailThresholdRatio = 0
396
+ this.#deltaRecoverThresholdRatio = 0
397
+ this.#deltaProbeIntervalMs = 0
398
+ this.#lastProbeAt = 0
399
+ return
364
400
  }
401
+ assertDeltaFallbackConfig(cfg, '[MediaRouter] configureDelta')
365
402
 
366
403
  // Derivations — no magic floors, no hardcoded defaults (CLAUDE.md).
367
404
  this.#deltaWindowSize = cfg.deltaFailWindowBlocks ?? Math.ceil(cfg.framerate)
@@ -791,6 +828,7 @@ export class MediaRouter {
791
828
  /** Dispose timers and per-track sources. Call on teardown to prevent
792
829
  * stale timer callbacks firing into garbage-collected closures (WR-03). */
793
830
  dispose(): void {
831
+ this.configureDelta(null)
794
832
  if (this.#audioFallbackTimer) {
795
833
  clearTimeout(this.#audioFallbackTimer)
796
834
  this.#audioFallbackTimer = null