@blockcast/mmt-container 0.3.0 → 0.4.0-main.71d61b2a53f2

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 +14743 -14412
  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 +36 -30
  30. package/dist/fec-manager.d.ts.map +1 -1
  31. package/dist/fec-manager.js +303 -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 +6 -11
  54. package/dist/mmtp-container-parser.d.ts.map +1 -1
  55. package/dist/mmtp-container-parser.js +56 -97
  56. package/dist/mmtp-container-parser.js.map +4 -4
  57. package/dist/mmtp-container-parser.no-modules.js +78 -105
  58. package/dist/mmtp-container-parser.no-modules.js.map +4 -4
  59. package/dist/mmtp-decode-pipeline.js +56 -97
  60. package/dist/mmtp-decode-pipeline.js.map +4 -4
  61. package/dist/mmtp-router.d.ts +37 -26
  62. package/dist/mmtp-router.d.ts.map +1 -1
  63. package/dist/mmtp-router.js +162 -313
  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 +34 -6
  68. package/dist/multicast-manager.d.ts.map +1 -1
  69. package/dist/multicast-manager.js +709 -658
  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 +77 -104
  78. package/dist/no-modules.js.map +4 -4
  79. package/dist/repair-fetch.d.ts +30 -19
  80. package/dist/repair-fetch.d.ts.map +1 -1
  81. package/dist/repair-fetch.js +33 -24
  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 +56 -97
  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 +414 -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 +27 -18
  113. package/src/mmtp-router.ts +146 -313
  114. package/src/multicast-manager.ts +184 -83
  115. package/src/multicast-transport.ts +16 -9
  116. package/src/repair-fetch.ts +46 -27
  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
@@ -0,0 +1,498 @@
1
+ /**
2
+ * Strict v2 multicast delivery catalog: the DASH/HLS/MMTP routes a receiver
3
+ * joins, their SSM endpoints, FEC geometry and MMTP packet-ID bindings.
4
+ *
5
+ * Moved from moqtail-private `libs/moqtail-ts/src/model/catalog/delivery.ts`
6
+ * (BLO-47003) so every player reads one contract. Two rules are stricter than
7
+ * the copy it replaces, both libmmt invariants rather than local choices:
8
+ * `fec.blockProfile` is required and must be `iso-ssbg1-v1` (BLO-35597), and a
9
+ * DASH route's `mmtp.packetId` is refused when it is the signaling flow 0
10
+ * (`isMulticastTrackPacketId`).
11
+ */
12
+ import { parseFecBlockProfile, type FecBlockProfile } from '@blockcast/mmt-base'
13
+ import { isMulticastTrackPacketId } from '@blockcast/mmt-transport'
14
+
15
+ export type DeliveryPackaging = 'mmtp' | 'dash' | 'hls'
16
+ export type DeliveryContentType = 'video' | 'audio' | 'text'
17
+
18
+ export interface DeliveryEndpoint {
19
+ source: string
20
+ group: string
21
+ port: number
22
+ }
23
+
24
+ export interface DeliveryPolicy {
25
+ bufferWindowSegments: number
26
+ requestTimeoutMs: number
27
+ missPolicy: 'fail'
28
+ }
29
+
30
+ export interface DeliveryObjectMapping {
31
+ namespace: string
32
+ initObject: string
33
+ mediaObjectTemplate: string
34
+ }
35
+
36
+ export interface DeliveryFec {
37
+ K: number
38
+ /** Repair symbols per source block. Zero means source-only delivery. */
39
+ P: number
40
+ T: number
41
+ /** Full FEC block span in milliseconds (draft-ramadan-moq-fec §5.1). */
42
+ interleaveDepthMs: number
43
+ /**
44
+ * The catalog `fec.blockProfile` (BLO-35597). Required and never
45
+ * defaulted; `parseFecBlockProfile` refuses anything but `iso-ssbg1-v1`,
46
+ * including the retired `k-padded-v1`.
47
+ */
48
+ blockProfile: FecBlockProfile
49
+ }
50
+
51
+ export interface DeliveryRouteBase {
52
+ id: string
53
+ contentType: DeliveryContentType
54
+ endpointRef: string
55
+ initUri: string
56
+ mediaUriTemplate: string
57
+ objects: DeliveryObjectMapping
58
+ fec: DeliveryFec
59
+ }
60
+
61
+ export interface DashDeliveryRoute extends DeliveryRouteBase {
62
+ representationId: string
63
+ /**
64
+ * Authoritative MMTP binding used to assemble the DASH objects carried by
65
+ * this route. The current source accepts MFU-mode MMTP only; the init MPU is
66
+ * the representation init segment. MMTP-backed DASH URI and object templates
67
+ * contain exactly one $Number$ and may also contain $RepresentationID$;
68
+ * $Time$ is rejected because the catalog has no publisher-authored first-time
69
+ * anchor. Publishers explicitly anchor MMTP MPU sequence numbers to DASH
70
+ * $Number$ values so receivers never infer object boundaries from cadence.
71
+ */
72
+ mmtp: {
73
+ trackName: string
74
+ packetId: number
75
+ mode: 'mfu'
76
+ codec: string
77
+ /** fMP4 media timescale used by Shaka's MMTP transmuxer. */
78
+ timescale: number
79
+ /** Exact duration of one MFU in that timescale, from publisher timing. */
80
+ mediaUnitDurationTicks: number
81
+ /** Exact MFU count carried by each numbered DASH media object. */
82
+ mediaUnitsPerObject: number
83
+ /** First publisher MMTP MPU sequence represented by this route. */
84
+ firstMpuSequenceNumber: number
85
+ /** DASH $Number$ containing firstMpuSequenceNumber. */
86
+ firstObjectNumber: number
87
+ /** Consecutive MMTP MPU sequence numbers carried by each DASH object. */
88
+ mpuSequencesPerObject: number
89
+ /** Optional reliable repair-track name under objects.namespace. */
90
+ repairTrack?: string
91
+ }
92
+ }
93
+
94
+ export interface HlsDeliveryRoute extends DeliveryRouteBase {
95
+ variantId: string
96
+ trackId: string
97
+ }
98
+
99
+ export interface MmtpDeliveryRoute extends DeliveryRouteBase {
100
+ trackName: string
101
+ }
102
+
103
+ export interface DashDeliveryConfig {
104
+ manifestUrl: string
105
+ routes: DashDeliveryRoute[]
106
+ }
107
+
108
+ export interface HlsDeliveryConfig {
109
+ manifestUrl: string
110
+ routes: HlsDeliveryRoute[]
111
+ }
112
+
113
+ export interface MmtpDeliveryConfig {
114
+ routes: MmtpDeliveryRoute[]
115
+ }
116
+
117
+ export interface DeliveryMulticastBase {
118
+ endpoints: Record<string, DeliveryEndpoint>
119
+ deliveryPolicy: DeliveryPolicy
120
+ }
121
+
122
+ export type DeliveryMulticastV2 = DeliveryMulticastBase &
123
+ (
124
+ | { packaging: 'dash'; dash: DashDeliveryConfig }
125
+ | { packaging: 'hls'; hls: HlsDeliveryConfig }
126
+ | { packaging: 'mmtp'; mmtp: MmtpDeliveryConfig }
127
+ )
128
+
129
+ export interface DeliveryCatalogV2 {
130
+ schemaVersion: 2
131
+ channelId: string
132
+ multicast: DeliveryMulticastV2
133
+ }
134
+
135
+ const TEMPLATE_VARIABLE = /\$([A-Za-z][A-Za-z0-9]*)\$/g
136
+ const ALLOWED_TEMPLATE_VARIABLES = new Set(['Number', 'Time', 'RepresentationID', 'VariantID', 'TrackID'])
137
+
138
+ function object(value: unknown, path: string): Record<string, unknown> {
139
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
140
+ throw new Error(`${path} must be an object`)
141
+ }
142
+ return value as Record<string, unknown>
143
+ }
144
+
145
+ function string(value: unknown, path: string): string {
146
+ if (typeof value !== 'string' || value.trim().length === 0) {
147
+ throw new Error(`${path} must be a non-empty string`)
148
+ }
149
+ return value
150
+ }
151
+
152
+ function positiveInteger(value: unknown, path: string): number {
153
+ if (typeof value !== 'number' || !Number.isInteger(value) || value <= 0) {
154
+ throw new Error(`${path} must be a positive integer`)
155
+ }
156
+ return value
157
+ }
158
+
159
+ function nonNegativeInteger(value: unknown, path: string): number {
160
+ if (typeof value !== 'number' || !Number.isInteger(value) || value < 0) {
161
+ throw new Error(`${path} must be a non-negative integer`)
162
+ }
163
+ return value
164
+ }
165
+
166
+ function nonNegativeSafeInteger(value: unknown, path: string): number {
167
+ const parsed = nonNegativeInteger(value, path)
168
+ if (!Number.isSafeInteger(parsed)) throw new Error(`${path} must be a safe integer`)
169
+ return parsed
170
+ }
171
+
172
+ function mpuSequenceNumber(value: unknown, path: string): number {
173
+ const parsed = nonNegativeSafeInteger(value, path)
174
+ if (parsed > 0xffffffff) throw new Error(`${path} must be between 0 and 4294967295`)
175
+ return parsed
176
+ }
177
+
178
+ function port(value: unknown, path: string): number {
179
+ const parsed = positiveInteger(value, path)
180
+ if (parsed > 65535) throw new Error(`${path} must be between 1 and 65535`)
181
+ return parsed
182
+ }
183
+
184
+ function httpUrl(value: unknown, path: string): string {
185
+ const raw = string(value, path)
186
+ let parsed: URL
187
+ try {
188
+ parsed = new URL(raw)
189
+ } catch {
190
+ throw new Error(`${path} must be an absolute HTTP(S) URL`)
191
+ }
192
+ if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
193
+ throw new Error(`${path} must be an absolute HTTP(S) URL`)
194
+ }
195
+ return raw
196
+ }
197
+
198
+ function templateVariables(template: string, path: string): Set<string> {
199
+ const variables = new Set<string>()
200
+ for (const match of template.matchAll(TEMPLATE_VARIABLE)) {
201
+ const variable = match[1]
202
+ if (variable === undefined || !ALLOWED_TEMPLATE_VARIABLES.has(variable)) {
203
+ throw new Error(`${path} contains unsupported template variable $${variable ?? ''}$`)
204
+ }
205
+ variables.add(variable)
206
+ }
207
+ if (template.includes('$') && template.replace(TEMPLATE_VARIABLE, '').includes('$')) {
208
+ throw new Error(`${path} contains a malformed template variable`)
209
+ }
210
+ return variables
211
+ }
212
+
213
+ function validateTemplatePair(mediaUriTemplate: string, mediaObjectTemplate: string, path: string): void {
214
+ const uriVariables = templateVariables(mediaUriTemplate, `${path}.mediaUriTemplate`)
215
+ const objectVariables = templateVariables(mediaObjectTemplate, `${path}.objects.mediaObjectTemplate`)
216
+ if (uriVariables.size === 0) {
217
+ throw new Error(`${path}.mediaUriTemplate must contain a segment template variable`)
218
+ }
219
+ if (
220
+ uriVariables.size !== objectVariables.size ||
221
+ [...uriVariables].some((variable) => !objectVariables.has(variable))
222
+ ) {
223
+ throw new Error(`${path} URI and object templates must use the same variables`)
224
+ }
225
+ }
226
+
227
+ function validateMmtpDashTemplate(template: string, path: string): void {
228
+ const variables = [...template.matchAll(TEMPLATE_VARIABLE)].map((match) => match[1])
229
+ const unsupported = variables.find((variable) => variable !== 'Number' && variable !== 'RepresentationID')
230
+ if (unsupported !== undefined) {
231
+ throw new Error(`${path} contains unsupported MMTP-backed DASH template variable $${unsupported}$`)
232
+ }
233
+ if (variables.filter((variable) => variable === 'Number').length !== 1) {
234
+ throw new Error(`${path} must contain exactly one $Number$ for MMTP-backed DASH`)
235
+ }
236
+ }
237
+
238
+ function validateMmtpDashTemplates(route: DeliveryRouteBase, path: string): void {
239
+ validateMmtpDashTemplate(route.mediaUriTemplate, `${path}.mediaUriTemplate`)
240
+ validateMmtpDashTemplate(route.objects.mediaObjectTemplate, `${path}.objects.mediaObjectTemplate`)
241
+ }
242
+
243
+ function validateEndpoint(value: unknown, path: string): DeliveryEndpoint {
244
+ const endpoint = object(value, path)
245
+ return {
246
+ source: string(endpoint['source'], `${path}.source`),
247
+ group: string(endpoint['group'], `${path}.group`),
248
+ port: port(endpoint['port'], `${path}.port`),
249
+ }
250
+ }
251
+
252
+ function validateEndpoints(value: unknown): Record<string, DeliveryEndpoint> {
253
+ const endpoints = object(value, 'multicast.endpoints')
254
+ const entries = Object.entries(endpoints)
255
+ if (entries.length === 0) throw new Error('multicast.endpoints must not be empty')
256
+ return Object.fromEntries(
257
+ entries.map(([id, endpoint]) => [
258
+ string(id, 'multicast endpoint id'),
259
+ validateEndpoint(endpoint, `multicast.endpoints.${id}`),
260
+ ]),
261
+ )
262
+ }
263
+
264
+ function validateDeliveryPolicy(value: unknown): DeliveryPolicy {
265
+ const policy = object(value, 'multicast.deliveryPolicy')
266
+ const missPolicy = policy['missPolicy']
267
+ if (missPolicy !== 'fail') {
268
+ throw new Error("multicast.deliveryPolicy.missPolicy must be 'fail'")
269
+ }
270
+ return {
271
+ bufferWindowSegments: positiveInteger(
272
+ policy['bufferWindowSegments'],
273
+ 'multicast.deliveryPolicy.bufferWindowSegments',
274
+ ),
275
+ requestTimeoutMs: positiveInteger(policy['requestTimeoutMs'], 'multicast.deliveryPolicy.requestTimeoutMs'),
276
+ missPolicy,
277
+ }
278
+ }
279
+
280
+ function validateRouteBase(
281
+ value: unknown,
282
+ path: string,
283
+ endpoints: Record<string, DeliveryEndpoint>,
284
+ ): DeliveryRouteBase {
285
+ const route = object(value, path)
286
+ const endpointRef = string(route['endpointRef'], `${path}.endpointRef`)
287
+ if (!(endpointRef in endpoints)) throw new Error(`${path}.endpointRef does not resolve: ${endpointRef}`)
288
+
289
+ const objects = object(route['objects'], `${path}.objects`)
290
+ const fec = object(route['fec'], `${path}.fec`)
291
+ if ('interleaveDepth' in fec || 'interleaveMs' in fec) {
292
+ throw new Error(`${path}.fec.interleaveDepthMs is the only supported interleave field`)
293
+ }
294
+ const mediaUriTemplate = httpUrl(route['mediaUriTemplate'], `${path}.mediaUriTemplate`)
295
+ const mediaObjectTemplate = string(objects['mediaObjectTemplate'], `${path}.objects.mediaObjectTemplate`)
296
+ validateTemplatePair(mediaUriTemplate, mediaObjectTemplate, path)
297
+
298
+ return {
299
+ id: string(route['id'], `${path}.id`),
300
+ contentType: validateContentType(route['contentType'], `${path}.contentType`),
301
+ endpointRef,
302
+ initUri: httpUrl(route['initUri'], `${path}.initUri`),
303
+ mediaUriTemplate,
304
+ objects: {
305
+ namespace: string(objects['namespace'], `${path}.objects.namespace`),
306
+ initObject: string(objects['initObject'], `${path}.objects.initObject`),
307
+ mediaObjectTemplate,
308
+ },
309
+ fec: {
310
+ K: positiveInteger(fec['K'], `${path}.fec.K`),
311
+ P: nonNegativeInteger(fec['P'], `${path}.fec.P`),
312
+ T: positiveInteger(fec['T'], `${path}.fec.T`),
313
+ interleaveDepthMs: positiveInteger(fec['interleaveDepthMs'], `${path}.fec.interleaveDepthMs`),
314
+ blockProfile: parseFecBlockProfile(fec['blockProfile'], `${path}.fec.blockProfile`),
315
+ },
316
+ }
317
+ }
318
+
319
+ function validateContentType(value: unknown, path: string): DeliveryContentType {
320
+ if (value !== 'video' && value !== 'audio' && value !== 'text') {
321
+ throw new Error(`${path} must be 'video', 'audio', or 'text'`)
322
+ }
323
+ return value
324
+ }
325
+
326
+ function templateShape(template: string): string {
327
+ return template.replace(TEMPLATE_VARIABLE, '$variable$')
328
+ }
329
+
330
+ function validateRouteUniqueness(
331
+ routes: DeliveryRouteBase[],
332
+ selectorKeys: string[],
333
+ rawRoutes: Record<string, unknown>[],
334
+ ): void {
335
+ const ids = new Set<string>()
336
+ const selectors = new Set<string>()
337
+ const initUris = new Set<string>()
338
+ const mediaShapes = new Set<string>()
339
+ routes.forEach((route, index) => {
340
+ if (ids.has(route.id)) throw new Error(`duplicate route id: ${route.id}`)
341
+ ids.add(route.id)
342
+
343
+ const selector = selectorKeys.map((key) => String(rawRoutes[index]?.[key])).join('\u0000')
344
+ if (selectors.has(selector)) throw new Error(`duplicate route selector: ${selectorKeys.join(', ')}`)
345
+ selectors.add(selector)
346
+
347
+ if (initUris.has(route.initUri)) throw new Error(`ambiguous init URI mapping: ${route.initUri}`)
348
+ initUris.add(route.initUri)
349
+
350
+ const mediaShape = templateShape(route.mediaUriTemplate)
351
+ if (mediaShapes.has(mediaShape)) {
352
+ throw new Error(`ambiguous media URI mapping: ${route.mediaUriTemplate}`)
353
+ }
354
+ mediaShapes.add(mediaShape)
355
+ })
356
+ }
357
+
358
+ function validateRoutes(value: unknown, kind: 'dash', endpoints: Record<string, DeliveryEndpoint>): DashDeliveryRoute[]
359
+ function validateRoutes(value: unknown, kind: 'hls', endpoints: Record<string, DeliveryEndpoint>): HlsDeliveryRoute[]
360
+ function validateRoutes(value: unknown, kind: 'mmtp', endpoints: Record<string, DeliveryEndpoint>): MmtpDeliveryRoute[]
361
+ function validateRoutes(
362
+ value: unknown,
363
+ kind: DeliveryPackaging,
364
+ endpoints: Record<string, DeliveryEndpoint>,
365
+ ): (DashDeliveryRoute | HlsDeliveryRoute | MmtpDeliveryRoute)[] {
366
+ if (!Array.isArray(value) || value.length === 0) throw new Error(`multicast.${kind}.routes must not be empty`)
367
+ const rawRoutes = value.map((route, index) => object(route, `multicast.${kind}.routes[${index}]`))
368
+ const routes = rawRoutes.map((route, index) => {
369
+ const path = `multicast.${kind}.routes[${index}]`
370
+ const base = validateRouteBase(route, path, endpoints)
371
+ if (kind === 'dash') {
372
+ validateMmtpDashTemplates(base, path)
373
+ const mmtp = object(route['mmtp'], `${path}.mmtp`)
374
+ if (mmtp['mode'] !== 'mfu') throw new Error(`${path}.mmtp.mode must be 'mfu'`)
375
+ const mode = 'mfu' as const
376
+ const packetId = mmtp['packetId']
377
+ if (!isMulticastTrackPacketId(packetId)) {
378
+ throw new Error(`${path}.mmtp.packetId must be an integer from 1 to 65535 (0 is the MMTP signaling flow)`)
379
+ }
380
+ const repairTrack = mmtp['repairTrack']
381
+ if (repairTrack !== undefined && (typeof repairTrack !== 'string' || repairTrack.trim().length === 0)) {
382
+ throw new Error(`${path}.mmtp.repairTrack must be a non-empty string when provided`)
383
+ }
384
+ const mediaUnitsPerObject = positiveInteger(mmtp['mediaUnitsPerObject'], `${path}.mmtp.mediaUnitsPerObject`)
385
+ const firstMpuSequenceNumber = mpuSequenceNumber(
386
+ mmtp['firstMpuSequenceNumber'],
387
+ `${path}.mmtp.firstMpuSequenceNumber`,
388
+ )
389
+ const firstObjectNumber = nonNegativeSafeInteger(mmtp['firstObjectNumber'], `${path}.mmtp.firstObjectNumber`)
390
+ const mpuSequencesPerObject = positiveInteger(mmtp['mpuSequencesPerObject'], `${path}.mmtp.mpuSequencesPerObject`)
391
+ if (mpuSequencesPerObject > mediaUnitsPerObject) {
392
+ throw new Error(`${path}.mmtp.mpuSequencesPerObject must not exceed mediaUnitsPerObject`)
393
+ }
394
+ if (firstMpuSequenceNumber + mpuSequencesPerObject - 1 > 0xffffffff) {
395
+ throw new Error(`${path}.mmtp first object exceeds the MMTP MPU sequence-number range`)
396
+ }
397
+ return {
398
+ ...base,
399
+ representationId: string(route['representationId'], `${path}.representationId`),
400
+ mmtp: {
401
+ trackName: string(mmtp['trackName'], `${path}.mmtp.trackName`),
402
+ packetId,
403
+ mode,
404
+ codec: string(mmtp['codec'], `${path}.mmtp.codec`),
405
+ timescale: positiveInteger(mmtp['timescale'], `${path}.mmtp.timescale`),
406
+ mediaUnitDurationTicks: positiveInteger(
407
+ mmtp['mediaUnitDurationTicks'],
408
+ `${path}.mmtp.mediaUnitDurationTicks`,
409
+ ),
410
+ mediaUnitsPerObject,
411
+ firstMpuSequenceNumber,
412
+ firstObjectNumber,
413
+ mpuSequencesPerObject,
414
+ ...(repairTrack === undefined ? {} : { repairTrack }),
415
+ },
416
+ }
417
+ }
418
+ if (kind === 'hls') {
419
+ return {
420
+ ...base,
421
+ variantId: string(route['variantId'], `${path}.variantId`),
422
+ trackId: string(route['trackId'], `${path}.trackId`),
423
+ }
424
+ }
425
+ return { ...base, trackName: string(route['trackName'], `${path}.trackName`) }
426
+ })
427
+ validateRouteUniqueness(
428
+ routes,
429
+ kind === 'dash' ? ['representationId', 'contentType'] : kind === 'hls' ? ['variantId', 'trackId'] : ['trackName'],
430
+ rawRoutes,
431
+ )
432
+ return routes
433
+ }
434
+
435
+ function validateV2Catalog(value: unknown): DeliveryCatalogV2 {
436
+ const catalog = object(value, 'catalog')
437
+ if (catalog['schemaVersion'] !== 2) throw new Error('catalog.schemaVersion must be 2')
438
+ const multicast = object(catalog['multicast'], 'multicast')
439
+ const packaging = multicast['packaging']
440
+ if (packaging !== 'dash' && packaging !== 'hls' && packaging !== 'mmtp') {
441
+ throw new Error("multicast.packaging must be 'dash', 'hls', or 'mmtp'")
442
+ }
443
+ const endpoints = validateEndpoints(multicast['endpoints'])
444
+ const deliveryPolicy = validateDeliveryPolicy(multicast['deliveryPolicy'])
445
+ const common = {
446
+ schemaVersion: 2 as const,
447
+ channelId: string(catalog['channelId'], 'catalog.channelId'),
448
+ }
449
+
450
+ if (packaging === 'dash') {
451
+ const dash = object(multicast['dash'], 'multicast.dash')
452
+ return {
453
+ ...common,
454
+ multicast: {
455
+ packaging,
456
+ endpoints,
457
+ deliveryPolicy,
458
+ dash: {
459
+ manifestUrl: httpUrl(dash['manifestUrl'], 'multicast.dash.manifestUrl'),
460
+ routes: validateRoutes(dash['routes'], packaging, endpoints),
461
+ },
462
+ },
463
+ }
464
+ }
465
+ if (packaging === 'hls') {
466
+ const hls = object(multicast['hls'], 'multicast.hls')
467
+ return {
468
+ ...common,
469
+ multicast: {
470
+ packaging,
471
+ endpoints,
472
+ deliveryPolicy,
473
+ hls: {
474
+ manifestUrl: httpUrl(hls['manifestUrl'], 'multicast.hls.manifestUrl'),
475
+ routes: validateRoutes(hls['routes'], packaging, endpoints),
476
+ },
477
+ },
478
+ }
479
+ }
480
+ const mmtp = object(multicast['mmtp'], 'multicast.mmtp')
481
+ return {
482
+ ...common,
483
+ multicast: {
484
+ packaging,
485
+ endpoints,
486
+ deliveryPolicy,
487
+ mmtp: { routes: validateRoutes(mmtp['routes'], packaging, endpoints) },
488
+ },
489
+ }
490
+ }
491
+
492
+ /** Parse and normalize the strict v2 delivery-catalog contract. */
493
+ export function normalizeDeliveryCatalog(value: unknown): DeliveryCatalogV2 {
494
+ const catalog = object(value, 'catalog')
495
+ if (catalog['schemaVersion'] === 2) return validateV2Catalog(catalog)
496
+ if (catalog['schemaVersion'] === undefined) throw new Error('catalog.schemaVersion is required')
497
+ throw new Error(`unsupported catalog.schemaVersion: ${String(catalog['schemaVersion'])}`)
498
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Maps one base/delta switching group's catalog FEC metadata onto
3
+ * {@link MediaRouter.configureDelta} (BLO-45475).
4
+ *
5
+ * Generic client policy selects WHICH group to admit (roles, groups, endpoint
6
+ * availability); this module owns the MMTP/FEC half of that decision — the
7
+ * shared repair pointer and the delta block geometry — so no player re-states
8
+ * the catalog FEC schema. It validates and never defaults: a group whose
9
+ * required metadata is absent or contradictory throws, and the caller decides
10
+ * that such a group invalidates the catalog rather than being skipped.
11
+ */
12
+
13
+ import { assertDeltaFallbackConfig, type DeltaFallbackConfig } from './media-router.js'
14
+
15
+ /** The catalog fields this mapping reads from one base or delta track. */
16
+ export interface DeltaFallbackTrack {
17
+ name: string
18
+ framerate?: number
19
+ fec?: {
20
+ repairTrack?: string
21
+ sourceSymbols?: number
22
+ repairSymbols?: number
23
+ interleaveDepthMs?: number
24
+ deltaFailWindowBlocks?: number
25
+ deltaProbeIntervalMs?: number
26
+ }
27
+ }
28
+
29
+ export interface ResolvedDeltaFallback {
30
+ /** The repair track both base and delta name; required at the endpoint. */
31
+ repairTrackName: string
32
+ config: DeltaFallbackConfig
33
+ }
34
+
35
+ /**
36
+ * Resolve one switching group. Throws when either track omits
37
+ * `fec.repairTrack`, when the two pointers differ, when the base framerate is
38
+ * not positive, or when the delta omits `fec.sourceSymbols`/`repairSymbols`.
39
+ * Fallback-window, probe and interleave fields are read from the base first
40
+ * (where the catalog places them), then the delta. The assembled config is then
41
+ * held to {@link assertDeltaFallbackConfig}, the same check configureDelta
42
+ * runs, so a group this resolves is a group configureDelta accepts — including
43
+ * the requirement that a probe interval or an interleave depth be present.
44
+ */
45
+ export function resolveDeltaFallback(base: DeltaFallbackTrack, delta: DeltaFallbackTrack): ResolvedDeltaFallback {
46
+ const repair = base.fec?.repairTrack
47
+ if (!repair) throw new Error(`[delta-fallback] base track "${base.name}" missing fec.repairTrack`)
48
+ const deltaFec = delta.fec
49
+ if (!deltaFec?.repairTrack) throw new Error(`[delta-fallback] delta track "${delta.name}" missing fec.repairTrack`)
50
+ if (deltaFec.repairTrack !== repair)
51
+ throw new Error(
52
+ `[delta-fallback] inconsistent repair tracks: ${base.name} references "${repair}" but ${delta.name} references "${deltaFec.repairTrack}"`
53
+ )
54
+ if (!(typeof base.framerate === 'number' && Number.isFinite(base.framerate) && base.framerate > 0))
55
+ throw new Error(`[delta-fallback] base track "${base.name}" missing positive framerate`)
56
+ if (!(isPositive(deltaFec.sourceSymbols) && isPositive(deltaFec.repairSymbols)))
57
+ throw new Error(`[delta-fallback] delta track "${delta.name}" missing positive fec.sourceSymbols/repairSymbols`)
58
+ const config: DeltaFallbackConfig = {
59
+ framerate: base.framerate,
60
+ sourceSymbols: deltaFec.sourceSymbols,
61
+ repairSymbols: deltaFec.repairSymbols,
62
+ deltaFailWindowBlocks: base.fec?.deltaFailWindowBlocks ?? deltaFec.deltaFailWindowBlocks,
63
+ deltaProbeIntervalMs: base.fec?.deltaProbeIntervalMs ?? deltaFec.deltaProbeIntervalMs,
64
+ interleaveDepthMs: base.fec?.interleaveDepthMs ?? deltaFec.interleaveDepthMs,
65
+ }
66
+ assertDeltaFallbackConfig(config, `[delta-fallback] group ${base.name}/${delta.name}`)
67
+ return { repairTrackName: repair, config }
68
+ }
69
+
70
+ function isPositive(value: unknown): value is number {
71
+ return typeof value === 'number' && Number.isFinite(value) && value > 0
72
+ }