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

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 (606) hide show
  1. package/README.md +33 -16
  2. package/dist/browser-runtime.js +14816 -14254
  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 +32 -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 +154 -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 +150 -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 +51 -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 +44 -18
  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 +2 -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/section-codes.json +33 -0
  137. package/test-vectors/catalog-timing.json +356 -0
  138. package/test-vectors/catalog-validation.json +40 -5
  139. package/test-vectors/delivery-catalog/README.md +11 -0
  140. package/test-vectors/delivery-catalog/negative/missing-block-profile.json +58 -0
  141. package/test-vectors/delivery-catalog/negative/packet-id-signaling.json +59 -0
  142. package/test-vectors/delivery-catalog/negative/retired-k-padded-block-profile.json +59 -0
  143. package/test-vectors/delivery-catalog/positive/dash.json +56 -0
  144. package/test-vectors/delivery-catalog/positive/mmtp-source-only.json +43 -0
  145. package/node_modules/@blockcast/fec-worker/README.md +0 -223
  146. package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
  147. package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts +0 -38
  148. package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts.map +0 -1
  149. package/node_modules/@blockcast/fec-worker/dist/block-order.js +0 -78
  150. package/node_modules/@blockcast/fec-worker/dist/block-order.js.map +0 -1
  151. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +0 -93
  152. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts.map +0 -1
  153. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js +0 -346
  154. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js.map +0 -1
  155. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +0 -380
  156. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +0 -1
  157. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js +0 -11
  158. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js.map +0 -1
  159. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts +0 -14
  160. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts.map +0 -1
  161. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +0 -859
  162. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +0 -7
  163. package/node_modules/@blockcast/fec-worker/dist/index.d.ts +0 -10
  164. package/node_modules/@blockcast/fec-worker/dist/index.d.ts.map +0 -1
  165. package/node_modules/@blockcast/fec-worker/dist/index.js +0 -8
  166. package/node_modules/@blockcast/fec-worker/dist/index.js.map +0 -1
  167. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts +0 -20
  168. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts.map +0 -1
  169. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js +0 -370
  170. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js.map +0 -7
  171. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts +0 -104
  172. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts.map +0 -1
  173. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js +0 -181
  174. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js.map +0 -1
  175. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts +0 -194
  176. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts.map +0 -1
  177. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js +0 -62
  178. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js.map +0 -1
  179. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts +0 -9
  180. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts.map +0 -1
  181. package/node_modules/@blockcast/fec-worker/dist/transfer.js +0 -13
  182. package/node_modules/@blockcast/fec-worker/dist/transfer.js.map +0 -1
  183. package/node_modules/@blockcast/fec-worker/package.json +0 -59
  184. package/node_modules/@blockcast/fec-worker/src/block-order.ts +0 -93
  185. package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +0 -392
  186. package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +0 -399
  187. package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +0 -1502
  188. package/node_modules/@blockcast/fec-worker/src/index.ts +0 -35
  189. package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +0 -589
  190. package/node_modules/@blockcast/fec-worker/src/shred-worker-client.ts +0 -222
  191. package/node_modules/@blockcast/fec-worker/src/shred-worker-types.ts +0 -209
  192. package/node_modules/@blockcast/fec-worker/src/transfer.ts +0 -12
  193. package/node_modules/@blockcast/mmt-alta-parse/README.md +0 -181
  194. package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  195. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +0 -57
  196. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +0 -1
  197. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +0 -115
  198. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +0 -1
  199. package/node_modules/@blockcast/mmt-alta-parse/package.json +0 -50
  200. package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +0 -136
  201. package/node_modules/@blockcast/mmt-base/README.md +0 -134
  202. package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  203. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +0 -55
  204. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +0 -1
  205. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +0 -128
  206. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +0 -1
  207. package/node_modules/@blockcast/mmt-base/dist/index.d.ts +0 -7
  208. package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +0 -1
  209. package/node_modules/@blockcast/mmt-base/dist/index.js +0 -7
  210. package/node_modules/@blockcast/mmt-base/dist/index.js.map +0 -1
  211. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -292
  212. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +0 -1
  213. package/node_modules/@blockcast/mmt-base/dist/mmtp.js +0 -612
  214. package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +0 -1
  215. package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +0 -18
  216. package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +0 -1
  217. package/node_modules/@blockcast/mmt-base/dist/net-constants.js +0 -18
  218. package/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +0 -1
  219. package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +0 -47
  220. package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +0 -1
  221. package/node_modules/@blockcast/mmt-base/dist/ntp-short.js +0 -54
  222. package/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +0 -1
  223. package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +0 -57
  224. package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +0 -1
  225. package/node_modules/@blockcast/mmt-base/dist/serial-number.js +0 -98
  226. package/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +0 -1
  227. package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +0 -312
  228. package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +0 -1
  229. package/node_modules/@blockcast/mmt-base/dist/signalling.js +0 -637
  230. package/node_modules/@blockcast/mmt-base/dist/signalling.js.map +0 -1
  231. package/node_modules/@blockcast/mmt-base/package.json +0 -49
  232. package/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +0 -145
  233. package/node_modules/@blockcast/mmt-base/src/index.ts +0 -6
  234. package/node_modules/@blockcast/mmt-base/src/mmtp.ts +0 -892
  235. package/node_modules/@blockcast/mmt-base/src/net-constants.ts +0 -17
  236. package/node_modules/@blockcast/mmt-base/src/ntp-short.ts +0 -67
  237. package/node_modules/@blockcast/mmt-base/src/serial-number.ts +0 -107
  238. package/node_modules/@blockcast/mmt-base/src/signalling.ts +0 -862
  239. package/node_modules/@blockcast/mmt-fec/README.md +0 -271
  240. package/node_modules/@blockcast/mmt-fec/dist/.build-stamp +0 -0
  241. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts +0 -82
  242. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts.map +0 -1
  243. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js +0 -296
  244. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js.map +0 -1
  245. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts +0 -106
  246. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts.map +0 -1
  247. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js +0 -288
  248. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js.map +0 -1
  249. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts +0 -46
  250. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts.map +0 -1
  251. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js +0 -96
  252. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js.map +0 -1
  253. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts +0 -33
  254. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts.map +0 -1
  255. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js +0 -57
  256. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js.map +0 -1
  257. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts +0 -205
  258. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +0 -1
  259. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +0 -240
  260. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +0 -1
  261. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +0 -28
  262. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +0 -1
  263. package/node_modules/@blockcast/mmt-fec/dist/index.js +0 -28
  264. package/node_modules/@blockcast/mmt-fec/dist/index.js.map +0 -1
  265. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts +0 -20
  266. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts.map +0 -1
  267. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js +0 -28
  268. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js.map +0 -1
  269. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +0 -258
  270. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +0 -1
  271. package/node_modules/@blockcast/mmt-fec/dist/oti.js +0 -382
  272. package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +0 -1
  273. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts +0 -41
  274. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts.map +0 -1
  275. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js +0 -81
  276. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js.map +0 -1
  277. package/node_modules/@blockcast/mmt-fec/dist/repair-group.d.ts +0 -82
  278. package/node_modules/@blockcast/mmt-fec/dist/repair-group.d.ts.map +0 -1
  279. package/node_modules/@blockcast/mmt-fec/dist/repair-group.js +0 -170
  280. package/node_modules/@blockcast/mmt-fec/dist/repair-group.js.map +0 -1
  281. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/README.md +0 -181
  282. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  283. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +0 -57
  284. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +0 -1
  285. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js +0 -115
  286. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +0 -1
  287. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/package.json +0 -50
  288. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/src/index.ts +0 -136
  289. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +0 -134
  290. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  291. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +0 -55
  292. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +0 -1
  293. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +0 -128
  294. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +0 -1
  295. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +0 -7
  296. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +0 -1
  297. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +0 -7
  298. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +0 -1
  299. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -292
  300. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +0 -1
  301. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +0 -612
  302. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +0 -1
  303. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +0 -18
  304. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +0 -1
  305. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js +0 -18
  306. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +0 -1
  307. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +0 -47
  308. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +0 -1
  309. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js +0 -54
  310. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +0 -1
  311. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +0 -57
  312. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +0 -1
  313. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js +0 -98
  314. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +0 -1
  315. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +0 -312
  316. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +0 -1
  317. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js +0 -637
  318. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js.map +0 -1
  319. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +0 -49
  320. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +0 -145
  321. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +0 -6
  322. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +0 -892
  323. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/net-constants.ts +0 -17
  324. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/ntp-short.ts +0 -67
  325. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/serial-number.ts +0 -107
  326. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/signalling.ts +0 -862
  327. package/node_modules/@blockcast/mmt-fec/package.json +0 -79
  328. package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +0 -371
  329. package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +0 -439
  330. package/node_modules/@blockcast/mmt-fec/src/cmaf-recovery.ts +0 -127
  331. package/node_modules/@blockcast/mmt-fec/src/cmaf-symbols.ts +0 -68
  332. package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +0 -310
  333. package/node_modules/@blockcast/mmt-fec/src/index.ts +0 -94
  334. package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +0 -34
  335. package/node_modules/@blockcast/mmt-fec/src/oti.ts +0 -463
  336. package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +0 -101
  337. package/node_modules/@blockcast/mmt-fec/src/repair-group.ts +0 -195
  338. package/node_modules/@blockcast/mmt-manifest-verify/dist/.build-stamp +0 -0
  339. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts +0 -28
  340. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts.map +0 -1
  341. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js +0 -128
  342. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js.map +0 -1
  343. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts +0 -4
  344. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts.map +0 -1
  345. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js +0 -4
  346. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js.map +0 -1
  347. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts +0 -37
  348. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts.map +0 -1
  349. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js +0 -179
  350. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js.map +0 -1
  351. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts +0 -99
  352. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts.map +0 -1
  353. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js +0 -492
  354. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js.map +0 -1
  355. package/node_modules/@blockcast/mmt-manifest-verify/package.json +0 -45
  356. package/node_modules/@blockcast/mmt-manifest-verify/src/admission.ts +0 -171
  357. package/node_modules/@blockcast/mmt-manifest-verify/src/index.ts +0 -3
  358. package/node_modules/@blockcast/mmt-manifest-verify/src/source-auth.ts +0 -230
  359. package/node_modules/@blockcast/mmt-manifest-verify/src/verifier.ts +0 -669
  360. package/node_modules/@noble/hashes/LICENSE +0 -21
  361. package/node_modules/@noble/hashes/README.md +0 -521
  362. package/node_modules/@noble/hashes/_assert.d.ts +0 -17
  363. package/node_modules/@noble/hashes/_assert.d.ts.map +0 -1
  364. package/node_modules/@noble/hashes/_assert.js +0 -18
  365. package/node_modules/@noble/hashes/_assert.js.map +0 -1
  366. package/node_modules/@noble/hashes/_blake.d.ts +0 -14
  367. package/node_modules/@noble/hashes/_blake.d.ts.map +0 -1
  368. package/node_modules/@noble/hashes/_blake.js +0 -50
  369. package/node_modules/@noble/hashes/_blake.js.map +0 -1
  370. package/node_modules/@noble/hashes/_md.d.ts +0 -51
  371. package/node_modules/@noble/hashes/_md.d.ts.map +0 -1
  372. package/node_modules/@noble/hashes/_md.js +0 -162
  373. package/node_modules/@noble/hashes/_md.js.map +0 -1
  374. package/node_modules/@noble/hashes/_u64.d.ts +0 -55
  375. package/node_modules/@noble/hashes/_u64.d.ts.map +0 -1
  376. package/node_modules/@noble/hashes/_u64.js +0 -90
  377. package/node_modules/@noble/hashes/_u64.js.map +0 -1
  378. package/node_modules/@noble/hashes/argon2.d.ts +0 -32
  379. package/node_modules/@noble/hashes/argon2.d.ts.map +0 -1
  380. package/node_modules/@noble/hashes/argon2.js +0 -401
  381. package/node_modules/@noble/hashes/argon2.js.map +0 -1
  382. package/node_modules/@noble/hashes/blake1.d.ts +0 -106
  383. package/node_modules/@noble/hashes/blake1.d.ts.map +0 -1
  384. package/node_modules/@noble/hashes/blake1.js +0 -459
  385. package/node_modules/@noble/hashes/blake1.js.map +0 -1
  386. package/node_modules/@noble/hashes/blake2.d.ts +0 -116
  387. package/node_modules/@noble/hashes/blake2.d.ts.map +0 -1
  388. package/node_modules/@noble/hashes/blake2.js +0 -420
  389. package/node_modules/@noble/hashes/blake2.js.map +0 -1
  390. package/node_modules/@noble/hashes/blake2b.d.ts +0 -11
  391. package/node_modules/@noble/hashes/blake2b.d.ts.map +0 -1
  392. package/node_modules/@noble/hashes/blake2b.js +0 -14
  393. package/node_modules/@noble/hashes/blake2b.js.map +0 -1
  394. package/node_modules/@noble/hashes/blake2s.d.ts +0 -20
  395. package/node_modules/@noble/hashes/blake2s.d.ts.map +0 -1
  396. package/node_modules/@noble/hashes/blake2s.js +0 -24
  397. package/node_modules/@noble/hashes/blake2s.js.map +0 -1
  398. package/node_modules/@noble/hashes/blake3.d.ts +0 -54
  399. package/node_modules/@noble/hashes/blake3.d.ts.map +0 -1
  400. package/node_modules/@noble/hashes/blake3.js +0 -255
  401. package/node_modules/@noble/hashes/blake3.js.map +0 -1
  402. package/node_modules/@noble/hashes/crypto.d.ts +0 -2
  403. package/node_modules/@noble/hashes/crypto.d.ts.map +0 -1
  404. package/node_modules/@noble/hashes/crypto.js +0 -5
  405. package/node_modules/@noble/hashes/crypto.js.map +0 -1
  406. package/node_modules/@noble/hashes/cryptoNode.d.ts +0 -2
  407. package/node_modules/@noble/hashes/cryptoNode.d.ts.map +0 -1
  408. package/node_modules/@noble/hashes/cryptoNode.js +0 -18
  409. package/node_modules/@noble/hashes/cryptoNode.js.map +0 -1
  410. package/node_modules/@noble/hashes/eskdf.d.ts +0 -47
  411. package/node_modules/@noble/hashes/eskdf.d.ts.map +0 -1
  412. package/node_modules/@noble/hashes/eskdf.js +0 -166
  413. package/node_modules/@noble/hashes/eskdf.js.map +0 -1
  414. package/node_modules/@noble/hashes/esm/_assert.d.ts +0 -17
  415. package/node_modules/@noble/hashes/esm/_assert.d.ts.map +0 -1
  416. package/node_modules/@noble/hashes/esm/_assert.js +0 -15
  417. package/node_modules/@noble/hashes/esm/_assert.js.map +0 -1
  418. package/node_modules/@noble/hashes/esm/_blake.d.ts +0 -14
  419. package/node_modules/@noble/hashes/esm/_blake.d.ts.map +0 -1
  420. package/node_modules/@noble/hashes/esm/_blake.js +0 -45
  421. package/node_modules/@noble/hashes/esm/_blake.js.map +0 -1
  422. package/node_modules/@noble/hashes/esm/_md.d.ts +0 -51
  423. package/node_modules/@noble/hashes/esm/_md.d.ts.map +0 -1
  424. package/node_modules/@noble/hashes/esm/_md.js +0 -155
  425. package/node_modules/@noble/hashes/esm/_md.js.map +0 -1
  426. package/node_modules/@noble/hashes/esm/_u64.d.ts +0 -55
  427. package/node_modules/@noble/hashes/esm/_u64.d.ts.map +0 -1
  428. package/node_modules/@noble/hashes/esm/_u64.js +0 -67
  429. package/node_modules/@noble/hashes/esm/_u64.js.map +0 -1
  430. package/node_modules/@noble/hashes/esm/argon2.d.ts +0 -32
  431. package/node_modules/@noble/hashes/esm/argon2.d.ts.map +0 -1
  432. package/node_modules/@noble/hashes/esm/argon2.js +0 -392
  433. package/node_modules/@noble/hashes/esm/argon2.js.map +0 -1
  434. package/node_modules/@noble/hashes/esm/blake1.d.ts +0 -106
  435. package/node_modules/@noble/hashes/esm/blake1.d.ts.map +0 -1
  436. package/node_modules/@noble/hashes/esm/blake1.js +0 -452
  437. package/node_modules/@noble/hashes/esm/blake1.js.map +0 -1
  438. package/node_modules/@noble/hashes/esm/blake2.d.ts +0 -116
  439. package/node_modules/@noble/hashes/esm/blake2.d.ts.map +0 -1
  440. package/node_modules/@noble/hashes/esm/blake2.js +0 -413
  441. package/node_modules/@noble/hashes/esm/blake2.js.map +0 -1
  442. package/node_modules/@noble/hashes/esm/blake2b.d.ts +0 -11
  443. package/node_modules/@noble/hashes/esm/blake2b.d.ts.map +0 -1
  444. package/node_modules/@noble/hashes/esm/blake2b.js +0 -11
  445. package/node_modules/@noble/hashes/esm/blake2b.js.map +0 -1
  446. package/node_modules/@noble/hashes/esm/blake2s.d.ts +0 -20
  447. package/node_modules/@noble/hashes/esm/blake2s.d.ts.map +0 -1
  448. package/node_modules/@noble/hashes/esm/blake2s.js +0 -21
  449. package/node_modules/@noble/hashes/esm/blake2s.js.map +0 -1
  450. package/node_modules/@noble/hashes/esm/blake3.d.ts +0 -54
  451. package/node_modules/@noble/hashes/esm/blake3.d.ts.map +0 -1
  452. package/node_modules/@noble/hashes/esm/blake3.js +0 -251
  453. package/node_modules/@noble/hashes/esm/blake3.js.map +0 -1
  454. package/node_modules/@noble/hashes/esm/crypto.d.ts +0 -2
  455. package/node_modules/@noble/hashes/esm/crypto.d.ts.map +0 -1
  456. package/node_modules/@noble/hashes/esm/crypto.js +0 -2
  457. package/node_modules/@noble/hashes/esm/crypto.js.map +0 -1
  458. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts +0 -2
  459. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts.map +0 -1
  460. package/node_modules/@noble/hashes/esm/cryptoNode.js +0 -15
  461. package/node_modules/@noble/hashes/esm/cryptoNode.js.map +0 -1
  462. package/node_modules/@noble/hashes/esm/eskdf.d.ts +0 -47
  463. package/node_modules/@noble/hashes/esm/eskdf.d.ts.map +0 -1
  464. package/node_modules/@noble/hashes/esm/eskdf.js +0 -160
  465. package/node_modules/@noble/hashes/esm/eskdf.js.map +0 -1
  466. package/node_modules/@noble/hashes/esm/hkdf.d.ts +0 -36
  467. package/node_modules/@noble/hashes/esm/hkdf.d.ts.map +0 -1
  468. package/node_modules/@noble/hashes/esm/hkdf.js +0 -82
  469. package/node_modules/@noble/hashes/esm/hkdf.js.map +0 -1
  470. package/node_modules/@noble/hashes/esm/hmac.d.ts +0 -35
  471. package/node_modules/@noble/hashes/esm/hmac.d.ts.map +0 -1
  472. package/node_modules/@noble/hashes/esm/hmac.js +0 -86
  473. package/node_modules/@noble/hashes/esm/hmac.js.map +0 -1
  474. package/node_modules/@noble/hashes/esm/index.d.ts +0 -2
  475. package/node_modules/@noble/hashes/esm/index.d.ts.map +0 -1
  476. package/node_modules/@noble/hashes/esm/index.js +0 -33
  477. package/node_modules/@noble/hashes/esm/index.js.map +0 -1
  478. package/node_modules/@noble/hashes/esm/legacy.d.ts +0 -71
  479. package/node_modules/@noble/hashes/esm/legacy.d.ts.map +0 -1
  480. package/node_modules/@noble/hashes/esm/legacy.js +0 -281
  481. package/node_modules/@noble/hashes/esm/legacy.js.map +0 -1
  482. package/node_modules/@noble/hashes/esm/package.json +0 -10
  483. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts +0 -23
  484. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts.map +0 -1
  485. package/node_modules/@noble/hashes/esm/pbkdf2.js +0 -97
  486. package/node_modules/@noble/hashes/esm/pbkdf2.js.map +0 -1
  487. package/node_modules/@noble/hashes/esm/ripemd160.d.ts +0 -13
  488. package/node_modules/@noble/hashes/esm/ripemd160.d.ts.map +0 -1
  489. package/node_modules/@noble/hashes/esm/ripemd160.js +0 -13
  490. package/node_modules/@noble/hashes/esm/ripemd160.js.map +0 -1
  491. package/node_modules/@noble/hashes/esm/scrypt.d.ts +0 -34
  492. package/node_modules/@noble/hashes/esm/scrypt.d.ts.map +0 -1
  493. package/node_modules/@noble/hashes/esm/scrypt.js +0 -228
  494. package/node_modules/@noble/hashes/esm/scrypt.js.map +0 -1
  495. package/node_modules/@noble/hashes/esm/sha1.d.ts +0 -11
  496. package/node_modules/@noble/hashes/esm/sha1.d.ts.map +0 -1
  497. package/node_modules/@noble/hashes/esm/sha1.js +0 -11
  498. package/node_modules/@noble/hashes/esm/sha1.js.map +0 -1
  499. package/node_modules/@noble/hashes/esm/sha2.d.ts +0 -159
  500. package/node_modules/@noble/hashes/esm/sha2.d.ts.map +0 -1
  501. package/node_modules/@noble/hashes/esm/sha2.js +0 -375
  502. package/node_modules/@noble/hashes/esm/sha2.js.map +0 -1
  503. package/node_modules/@noble/hashes/esm/sha256.d.ts +0 -20
  504. package/node_modules/@noble/hashes/esm/sha256.d.ts.map +0 -1
  505. package/node_modules/@noble/hashes/esm/sha256.js +0 -20
  506. package/node_modules/@noble/hashes/esm/sha256.js.map +0 -1
  507. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts +0 -142
  508. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts.map +0 -1
  509. package/node_modules/@noble/hashes/esm/sha3-addons.js +0 -393
  510. package/node_modules/@noble/hashes/esm/sha3-addons.js.map +0 -1
  511. package/node_modules/@noble/hashes/esm/sha3.d.ts +0 -53
  512. package/node_modules/@noble/hashes/esm/sha3.d.ts.map +0 -1
  513. package/node_modules/@noble/hashes/esm/sha3.js +0 -234
  514. package/node_modules/@noble/hashes/esm/sha3.js.map +0 -1
  515. package/node_modules/@noble/hashes/esm/sha512.d.ts +0 -26
  516. package/node_modules/@noble/hashes/esm/sha512.d.ts.map +0 -1
  517. package/node_modules/@noble/hashes/esm/sha512.js +0 -26
  518. package/node_modules/@noble/hashes/esm/sha512.js.map +0 -1
  519. package/node_modules/@noble/hashes/esm/utils.d.ts +0 -161
  520. package/node_modules/@noble/hashes/esm/utils.d.ts.map +0 -1
  521. package/node_modules/@noble/hashes/esm/utils.js +0 -281
  522. package/node_modules/@noble/hashes/esm/utils.js.map +0 -1
  523. package/node_modules/@noble/hashes/hkdf.d.ts +0 -36
  524. package/node_modules/@noble/hashes/hkdf.d.ts.map +0 -1
  525. package/node_modules/@noble/hashes/hkdf.js +0 -88
  526. package/node_modules/@noble/hashes/hkdf.js.map +0 -1
  527. package/node_modules/@noble/hashes/hmac.d.ts +0 -35
  528. package/node_modules/@noble/hashes/hmac.d.ts.map +0 -1
  529. package/node_modules/@noble/hashes/hmac.js +0 -91
  530. package/node_modules/@noble/hashes/hmac.js.map +0 -1
  531. package/node_modules/@noble/hashes/index.d.ts +0 -1
  532. package/node_modules/@noble/hashes/index.d.ts.map +0 -1
  533. package/node_modules/@noble/hashes/index.js +0 -33
  534. package/node_modules/@noble/hashes/index.js.map +0 -1
  535. package/node_modules/@noble/hashes/legacy.d.ts +0 -71
  536. package/node_modules/@noble/hashes/legacy.d.ts.map +0 -1
  537. package/node_modules/@noble/hashes/legacy.js +0 -287
  538. package/node_modules/@noble/hashes/legacy.js.map +0 -1
  539. package/node_modules/@noble/hashes/package.json +0 -266
  540. package/node_modules/@noble/hashes/pbkdf2.d.ts +0 -23
  541. package/node_modules/@noble/hashes/pbkdf2.d.ts.map +0 -1
  542. package/node_modules/@noble/hashes/pbkdf2.js +0 -101
  543. package/node_modules/@noble/hashes/pbkdf2.js.map +0 -1
  544. package/node_modules/@noble/hashes/ripemd160.d.ts +0 -13
  545. package/node_modules/@noble/hashes/ripemd160.d.ts.map +0 -1
  546. package/node_modules/@noble/hashes/ripemd160.js +0 -16
  547. package/node_modules/@noble/hashes/ripemd160.js.map +0 -1
  548. package/node_modules/@noble/hashes/scrypt.d.ts +0 -34
  549. package/node_modules/@noble/hashes/scrypt.d.ts.map +0 -1
  550. package/node_modules/@noble/hashes/scrypt.js +0 -232
  551. package/node_modules/@noble/hashes/scrypt.js.map +0 -1
  552. package/node_modules/@noble/hashes/sha1.d.ts +0 -11
  553. package/node_modules/@noble/hashes/sha1.d.ts.map +0 -1
  554. package/node_modules/@noble/hashes/sha1.js +0 -14
  555. package/node_modules/@noble/hashes/sha1.js.map +0 -1
  556. package/node_modules/@noble/hashes/sha2.d.ts +0 -159
  557. package/node_modules/@noble/hashes/sha2.d.ts.map +0 -1
  558. package/node_modules/@noble/hashes/sha2.js +0 -384
  559. package/node_modules/@noble/hashes/sha2.js.map +0 -1
  560. package/node_modules/@noble/hashes/sha256.d.ts +0 -20
  561. package/node_modules/@noble/hashes/sha256.d.ts.map +0 -1
  562. package/node_modules/@noble/hashes/sha256.js +0 -23
  563. package/node_modules/@noble/hashes/sha256.js.map +0 -1
  564. package/node_modules/@noble/hashes/sha3-addons.d.ts +0 -142
  565. package/node_modules/@noble/hashes/sha3-addons.d.ts.map +0 -1
  566. package/node_modules/@noble/hashes/sha3-addons.js +0 -402
  567. package/node_modules/@noble/hashes/sha3-addons.js.map +0 -1
  568. package/node_modules/@noble/hashes/sha3.d.ts +0 -53
  569. package/node_modules/@noble/hashes/sha3.d.ts.map +0 -1
  570. package/node_modules/@noble/hashes/sha3.js +0 -239
  571. package/node_modules/@noble/hashes/sha3.js.map +0 -1
  572. package/node_modules/@noble/hashes/sha512.d.ts +0 -26
  573. package/node_modules/@noble/hashes/sha512.d.ts.map +0 -1
  574. package/node_modules/@noble/hashes/sha512.js +0 -29
  575. package/node_modules/@noble/hashes/sha512.js.map +0 -1
  576. package/node_modules/@noble/hashes/src/_assert.ts +0 -22
  577. package/node_modules/@noble/hashes/src/_blake.ts +0 -50
  578. package/node_modules/@noble/hashes/src/_md.ts +0 -176
  579. package/node_modules/@noble/hashes/src/_u64.ts +0 -91
  580. package/node_modules/@noble/hashes/src/argon2.ts +0 -497
  581. package/node_modules/@noble/hashes/src/blake1.ts +0 -534
  582. package/node_modules/@noble/hashes/src/blake2.ts +0 -486
  583. package/node_modules/@noble/hashes/src/blake2b.ts +0 -10
  584. package/node_modules/@noble/hashes/src/blake2s.ts +0 -20
  585. package/node_modules/@noble/hashes/src/blake3.ts +0 -272
  586. package/node_modules/@noble/hashes/src/crypto.ts +0 -9
  587. package/node_modules/@noble/hashes/src/cryptoNode.ts +0 -15
  588. package/node_modules/@noble/hashes/src/eskdf.ts +0 -187
  589. package/node_modules/@noble/hashes/src/hkdf.ts +0 -88
  590. package/node_modules/@noble/hashes/src/hmac.ts +0 -94
  591. package/node_modules/@noble/hashes/src/index.ts +0 -31
  592. package/node_modules/@noble/hashes/src/legacy.ts +0 -293
  593. package/node_modules/@noble/hashes/src/pbkdf2.ts +0 -122
  594. package/node_modules/@noble/hashes/src/ripemd160.ts +0 -12
  595. package/node_modules/@noble/hashes/src/scrypt.ts +0 -257
  596. package/node_modules/@noble/hashes/src/sha1.ts +0 -10
  597. package/node_modules/@noble/hashes/src/sha2.ts +0 -402
  598. package/node_modules/@noble/hashes/src/sha256.ts +0 -24
  599. package/node_modules/@noble/hashes/src/sha3-addons.ts +0 -499
  600. package/node_modules/@noble/hashes/src/sha3.ts +0 -258
  601. package/node_modules/@noble/hashes/src/sha512.ts +0 -34
  602. package/node_modules/@noble/hashes/src/utils.ts +0 -395
  603. package/node_modules/@noble/hashes/utils.d.ts +0 -161
  604. package/node_modules/@noble/hashes/utils.d.ts.map +0 -1
  605. package/node_modules/@noble/hashes/utils.js +0 -313
  606. 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
+ }