@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
@@ -529,19 +529,13 @@ export interface FECManagerLike {
529
529
  * Returns recovered block bytes if recovery completes, else null.
530
530
  *
531
531
  * `symbolData` is the complete MMTP packet without its Source FEC Payload
532
- * ID, unpadded and possibly a view into the received packet. The manager
533
- * zero-pads it to the packet's own symbol size T.
534
- *
535
- * Optional `alta` carries the detached ALTA authenticator extracted from
536
- * the MMTP header-extension trailer (08-07 Path 2) — present on signed
537
- * source packets, absent on relay-reassembled / unsigned streams. When
538
- * provided, the fec-worker runs verify_detached instead of counting the
539
- * symbol as `altaPending`. */
532
+ * ID, unpadded and possibly a view into the received packet. The decoder
533
+ * builds the ssbg_mode1 symbol (`u16 len || packet || 00h`, zero-filled to
534
+ * the packet's own symbol size T) from it; nothing pads it on the way. */
540
535
  feedSourceSymbol(
541
536
  packetId: number,
542
537
  ssId: number,
543
538
  symbolData: Uint8Array,
544
- alta?: { auth: Uint8Array; payloadEnd: number },
545
539
  catalogTrackName?: string,
546
540
  ): Uint8Array | null;
547
541
 
@@ -599,17 +593,14 @@ export interface FECManagerLike {
599
593
  catalogTrackName?: string,
600
594
  ): "pending" | "complete" | "failed" | "untracked";
601
595
 
602
- /** Highest SBN seen for a stream in the current epoch. */
603
- highestSbn?(packetId: number, catalogTrackName?: string): number | undefined;
604
-
605
596
  /** Catalog/reset epoch of a packet's streams. */
606
597
  epochFor?(packetId: number): number;
607
598
 
608
599
  /**
609
600
  * Catalog `fec.interleaveDepthMs` (§5.1 full block span) of a packetId; 0
610
- * when the stream has none.
601
+ * when the stream has none, undefined when the packetId is unconfigured.
611
602
  */
612
- interleaveDepthMsForPacket?(packetId: number): number;
603
+ interleaveDepthMsForPacket?(packetId: number): number | undefined;
613
604
 
614
605
  /**
615
606
  * How long a terminal block stays authoritative before it retires to
@@ -617,7 +608,7 @@ export interface FECManagerLike {
617
608
  * scan never reads a retired, delivered block as lost. Required whenever
618
609
  * blockResolution is.
619
610
  */
620
- terminalRetentionMsForPacket?(packetId: number): number;
611
+ terminalRetentionMsForPacket?(packetId: number): number | undefined;
621
612
 
622
613
  /** Configured codec of a packetId. */
623
614
  codecFor?(packetId: number): string | undefined;
@@ -691,20 +682,17 @@ export interface FECManagerLike {
691
682
  toSsId: number,
692
683
  ): readonly number[] | null;
693
684
 
694
- /** FEC source symbol count K per block. */
695
- readonly k: number;
696
- kForPacket?(packetId: number): number;
697
685
 
698
686
  /**
699
687
  * The longest a block stays open after its last symbol (inactivity fail
700
688
  * bound plus D-28 repair grace). With interleaveDepthMsForPacket it bounds
701
689
  * how long the router keeps a stream's duplicate ledgers.
702
690
  */
703
- blockLifetimeMsForPacket?(packetId: number): number;
691
+ blockLifetimeMsForPacket?(packetId: number): number | undefined;
704
692
 
705
693
  /** FEC symbol size T in bytes (0 = unknown / no FEC). */
706
694
  readonly symbolSize: number;
707
- symbolSizeForPacket?(packetId: number): number;
695
+ symbolSizeForPacket?(packetId: number): number | undefined;
708
696
 
709
697
  /** Update framerate — used to refine FEC block timeout. */
710
698
  setFramerate(fps: number): void;
@@ -977,6 +965,8 @@ export class MmtpRouter {
977
965
  */
978
966
  #onPublisherRestart: ((packetId: number, catalogTrackName: string) => void) | null;
979
967
  #publisherRestarts = 0;
968
+ /** Inits delivered with no onTrackInit handler for their packetId (MOQT-01). */
969
+ #unmappedInitDeliveries = 0;
980
970
  // FEC Payload IDs left unread because their (owner) packetId had no
981
971
  // configured fec.blockProfile (see #noteUnreadableFecPayloadId).
982
972
  #fecPayloadIdsWithoutProfile = 0;
@@ -1324,17 +1314,28 @@ export class MmtpRouter {
1324
1314
  return NO_FEC_GEOMETRY_HORIZON;
1325
1315
  }
1326
1316
  const blockSpanMs = fec.interleaveDepthMsForPacket(packetId);
1317
+ const blockLifetimeMs = fec.blockLifetimeMsForPacket(packetId);
1318
+ // An unconfigured packetId has no FEC geometry (BLO-45953).
1319
+ if (blockSpanMs === undefined || blockLifetimeMs === undefined) return NO_FEC_GEOMETRY_HORIZON;
1327
1320
  // FECManager reports 0 for a stream the catalog gave no block span.
1328
1321
  if (blockSpanMs === 0) return NO_BLOCK_SPAN_HORIZON;
1329
1322
  return {
1330
1323
  kind: "fec-horizon",
1331
- retentionMs: duplicateRetentionMs({
1332
- blockSpanMs,
1333
- blockLifetimeMs: fec.blockLifetimeMsForPacket(packetId),
1334
- }),
1324
+ retentionMs: duplicateRetentionMs({ blockSpanMs, blockLifetimeMs }),
1335
1325
  };
1336
1326
  }
1337
1327
 
1328
+ /**
1329
+ * Init segments delivered for a packetId with no `onTrackInit` handler
1330
+ * since construction, whether the deprecated aggregate `onInitSegment`
1331
+ * callback then received them or nothing did. A supported deployment reads
1332
+ * 0 here; a non-zero value is the evidence that blocks removing the
1333
+ * aggregate callback (MOQT-01, BLO-21181).
1334
+ */
1335
+ get unmappedInitDeliveryCount(): number {
1336
+ return this.#unmappedInitDeliveries;
1337
+ }
1338
+
1338
1339
  /** Publisher restarts detected on the multicast leg since construction. */
1339
1340
  get publisherRestartCount(): number {
1340
1341
  return this.#publisherRestarts;
@@ -1440,8 +1441,8 @@ export class MmtpRouter {
1440
1441
 
1441
1442
  /** Update MFU reassembly timeout. Source and FEC-recovery paths share the
1442
1443
  * parser's single reassembler (BLO-8151), so one update covers both. */
1443
- setMfuTimeoutMs(ms: number): void {
1444
- if (ms <= 0) throw new Error("[MmtpRouter] mfuTimeoutMs must be > 0");
1444
+ setMfuTimeoutMs(ms: number | null): void {
1445
+ if (ms !== null && ms <= 0) throw new Error("[MmtpRouter] mfuTimeoutMs must be > 0");
1445
1446
  this.#parser.setMfuTimeoutMs(ms);
1446
1447
  }
1447
1448
 
@@ -1533,7 +1534,15 @@ export class MmtpRouter {
1533
1534
  this.#trackPacketCallbacks.set(packetId, cb);
1534
1535
  }
1535
1536
 
1536
- /** Register an init segment callback (ftyp+moov from MMTP MPU metadata). */
1537
+ /**
1538
+ * Register an init segment callback (ftyp+moov from MMTP MPU metadata).
1539
+ * Receives an init only for a packetId with no `onTrackInit` handler.
1540
+ *
1541
+ * @deprecated Use onTrackInit(packetId, cb). Still delivered as a fallback;
1542
+ * removed in the 1.0.0 major, no earlier than one minor release after this
1543
+ * deprecation reaches the `latest` dist-tag (BLO-21181). Count fallback
1544
+ * deliveries with `unmappedInitDeliveryCount`.
1545
+ */
1537
1546
  onInitSegment(cb: (data: Uint8Array) => void): void {
1538
1547
  this.#onInitSegment = cb;
1539
1548
  }
@@ -1551,20 +1560,19 @@ export class MmtpRouter {
1551
1560
  * multi-sample CMAF segments instead of per-frame callbacks. */
1552
1561
  enableMseAssembler(
1553
1562
  packetId: number,
1554
- config: Omit<BlockAssemblerConfig, "k">,
1563
+ config: BlockAssemblerConfig,
1555
1564
  catalogTrackName?: string,
1556
1565
  ): CmafBlockAssembler {
1557
- const k = this.#kForPacket(packetId);
1558
1566
  const assemblerKey = this.#mseAssemblerKey(packetId, catalogTrackName);
1559
1567
  const previous = this.#mseAssemblers.get(assemblerKey);
1560
1568
  if (previous) {
1561
1569
  previous.flush();
1562
1570
  previous.dispose();
1563
1571
  }
1564
- const assembler = new CmafBlockAssembler({ ...config, k });
1572
+ const assembler = new CmafBlockAssembler(config);
1565
1573
  this.#mseAssemblers.set(assemblerKey, assembler);
1566
1574
  console.log(
1567
- `[MmtpRouter] MSE assembler enabled for packetId=${packetId}${catalogTrackName === undefined ? "" : ` track=${catalogTrackName}`} (K=${k}, ${config.trackType})`,
1575
+ `[MmtpRouter] MSE assembler enabled for packetId=${packetId}${catalogTrackName === undefined ? "" : ` track=${catalogTrackName}`} (${config.trackType})`,
1568
1576
  );
1569
1577
  return assembler;
1570
1578
  }
@@ -1702,6 +1710,24 @@ export class MmtpRouter {
1702
1710
  this.#fecMappersByPacketId.set(packetId, mapper);
1703
1711
  }
1704
1712
 
1713
+ /**
1714
+ * Release the router side of a packetId whose FEC is ending: drop its block
1715
+ * mapper and end its FEC release gating. Frames the gate holds are released
1716
+ * in order, each gap stalled (no block will resolve it), not stranded. Call
1717
+ * before FECManager.releasePacket, while the gate can still read its blocks.
1718
+ */
1719
+ releaseFecPacket(packetId: number): void {
1720
+ this.#fecMappersByPacketId.delete(packetId);
1721
+ // Released frames reach FECManager (noteReleasedRap): defer the pokes it
1722
+ // requests, as for every other drain, and drop this packet's.
1723
+ this.#withDeferredFecPokes(() => {
1724
+ this.#parser.endFecRelease(packetId);
1725
+ for (const [key, poke] of this.#pendingFecPokes) {
1726
+ if (poke.packetId === packetId) this.#pendingFecPokes.delete(key);
1727
+ }
1728
+ });
1729
+ }
1730
+
1705
1731
  registerManifestTrack(context: ManifestTrackContext): void {
1706
1732
  if (!this.#manifestVerifier) throw new Error("manifest verifier is not configured");
1707
1733
  this.#manifestVerifier.registerTrack(context);
@@ -1856,121 +1882,26 @@ export class MmtpRouter {
1856
1882
  this.#noteUnreadableFecPayloadId(ownerPacketId, "repair");
1857
1883
  return;
1858
1884
  }
1859
- if (this.#isIsoPacket(ownerPacketId)) {
1860
- this.#handleIsoRepair(ownerPacketId, catalogTrackName, parsed, "moq");
1861
- return;
1862
- }
1863
- const repairSbn = this.#deriveRepairSbn(parsed.ssStart, parsed.ssbLength, ownerPacketId);
1864
- if (repairSbn === null) return;
1865
- const repairEsi = this.#kForPacket(ownerPacketId) + parsed.rsId;
1866
-
1867
- if (
1868
- !this.#feedFecTransportSymbol(
1869
- ownerPacketId,
1870
- repairSbn,
1871
- repairEsi,
1872
- parsed.symbolData,
1873
- "moq",
1874
- catalogTrackName,
1875
- )
1876
- ) return;
1877
-
1878
- // NOTE: Do NOT call trackBlock for repair packets (same as multicast repair path).
1879
- const recovered = catalogTrackName === undefined
1880
- ? this.#fecManager.feedRepairSymbol(
1881
- ownerPacketId,
1882
- parsed.ssStart,
1883
- parsed.ssbLength,
1884
- parsed.rsId,
1885
- parsed.symbolData,
1886
- )
1887
- : this.#fecManager.feedRepairSymbol(
1888
- ownerPacketId,
1889
- parsed.ssStart,
1890
- parsed.ssbLength,
1891
- parsed.rsId,
1892
- parsed.symbolData,
1893
- catalogTrackName,
1894
- );
1895
- if (recovered) {
1896
- const alreadyCompleted = catalogTrackName === undefined
1897
- ? this.#fecManager.isBlockCompleted(repairSbn, ownerPacketId)
1898
- : this.#fecManager.isBlockCompleted(repairSbn, ownerPacketId, catalogTrackName);
1899
- if (catalogTrackName === undefined) {
1900
- this.#fecManager.cancelBlockTimeout(repairSbn, ownerPacketId);
1901
- } else {
1902
- this.#fecManager.cancelBlockTimeout(repairSbn, ownerPacketId, catalogTrackName);
1903
- }
1904
- if (!alreadyCompleted) {
1905
- this.#fecManager.countRecovery(ownerPacketId, repairSbn, catalogTrackName);
1906
- if (catalogTrackName === undefined) {
1907
- this.#fecManager.markBlockCompleted(repairSbn, ownerPacketId);
1908
- } else {
1909
- this.#fecManager.markBlockCompleted(repairSbn, ownerPacketId, catalogTrackName);
1910
- }
1911
- this.#routeRecoveredBlock(
1912
- repairSbn,
1913
- recovered,
1914
- ownerPacketId,
1915
- catalogTrackName,
1916
- );
1917
- }
1918
- }
1885
+ this.#handleIsoRepair(ownerPacketId, catalogTrackName, parsed, "moq");
1919
1886
  }
1920
1887
  }
1921
1888
 
1922
- // ── SBN/ESI derivation ──────────────────────────────────────────
1923
-
1924
- #kForPacket(packetId?: number): number {
1925
- // Same packet-scoped rule as #deriveSbnEsi: once the packet ID is known,
1926
- // only its explicitly registered mapper may stand in for the FEC
1927
- // manager's per-packet K — never the default single-track mapper.
1928
- if (packetId != null)
1929
- return (
1930
- this.#fecManager?.kForPacket?.(packetId) ??
1931
- this.#fecMappersByPacketId.get(packetId)?.k ??
1932
- this.#fecManager?.k ??
1933
- 4
1934
- );
1935
- return this.#defaultFecMapper?.k ?? this.#fecManager?.k ?? 4;
1936
- }
1889
+ // ── Packet FEC geometry and block profile ───────────────────────
1937
1890
 
1938
1891
  #symbolSizeForPacket(packetId?: number): number {
1939
- if (packetId != null) return this.#fecManager?.symbolSizeForPacket?.(packetId) ?? this.#fecManager?.symbolSize ?? 0;
1892
+ // A packetId's own T only: an unconfigured one never borrows the
1893
+ // stream-global T (BLO-45953).
1894
+ if (packetId != null) return this.#fecManager?.symbolSizeForPacket?.(packetId) ?? 0;
1940
1895
  return this.#fecManager?.symbolSize ?? 0;
1941
1896
  }
1942
1897
 
1943
- /** Derive SBN/ESI from SS_ID using packet-scoped FEC geometry. */
1944
- #deriveSbnEsi(ssId: number, packetId?: number): { sbn: number; esi: number } {
1945
- // A default mapper describes legacy single-track geometry. Once a packet
1946
- // ID is known, only its explicitly registered mapper may override the
1947
- // FECManager's packet-scoped K. Falling back to the default video mapper
1948
- // here maps audio source symbols with video K while repair SBNs correctly
1949
- // use the audio SSB_length, splitting one block across two coordinates.
1950
- const mapper = packetId == null
1951
- ? this.#defaultFecMapper
1952
- : this.#fecMappersByPacketId.get(packetId) ?? null;
1953
- if (mapper) return mapper.fromSsId(ssId);
1954
- const k = this.#kForPacket(packetId);
1955
- return { sbn: Math.floor(ssId / k), esi: ssId % k };
1956
- }
1957
-
1958
- #deriveRepairSbn(
1959
- ssStart: number,
1960
- ssbLength: number,
1961
- packetId?: number,
1962
- ): number | null {
1963
- const k = this.#kForPacket(packetId);
1964
- if (ssbLength <= 0 || ssbLength > k || ssStart % k !== 0) return null;
1965
- return Math.floor(ssStart / k);
1966
- }
1967
-
1968
1898
  /**
1969
1899
  * The configured block profile of a packetId, or undefined while it is
1970
1900
  * unconfigured. With an FEC manager its per-packet configuration is the
1971
1901
  * only source. A router without one still recovers symbols through its
1972
1902
  * registered mapper, built with the catalog's explicit profile: the
1973
- * packet's own mapper, else the default one (the #deriveSbnEsi rule).
1903
+ * packet's own mapper, else the default one. A NullBlockMapper (a stream
1904
+ * without an FEC instance) states none.
1974
1905
  */
1975
1906
  #configuredBlockProfile(packetId: number): FecBlockProfile | undefined {
1976
1907
  if (this.#fecManager) return this.#fecManager.blockProfileForPacket(packetId);
@@ -1979,9 +1910,10 @@ export class MmtpRouter {
1979
1910
  }
1980
1911
 
1981
1912
  /**
1982
- * The block profile an FEC coordinate of `packetId` is read under. Throws
1983
- * while none is configured: the two profiles carry identical wire tuples
1984
- * with different block math, so there is no default to fall back to.
1913
+ * The block profile an FEC coordinate of `packetId` is read under:
1914
+ * `iso-ssbg1-v1`, the only one (`k-padded-v1` is retired and refused).
1915
+ * Throws while none is configured: such a packet has no FEC geometry, and
1916
+ * nothing is inferred from the wire or defaulted.
1985
1917
  * Packet ingress leaves such a packet's FEC Payload ID unread first
1986
1918
  * (#noteUnreadableFecPayloadId); a throw here is a wiring fault on a path
1987
1919
  * that cannot hold an unconfigured packet.
@@ -1997,8 +1929,20 @@ export class MmtpRouter {
1997
1929
  return profile;
1998
1930
  }
1999
1931
 
2000
- #isIsoPacket(packetId: number): boolean {
2001
- return this.#blockProfileFor(packetId) === "iso-ssbg1-v1";
1932
+ /**
1933
+ * The block coordinates (SS_Start, ESI) of an FEC source: range membership
1934
+ * in a block a repair already stated (ISO/IEC 23008-1 C.5.3). Null while no
1935
+ * repair has stated its block, while its packetId has no configured block
1936
+ * profile, and without an FEC manager: SS_ID alone locates no block, so
1937
+ * nothing is derived from it.
1938
+ */
1939
+ #locateFecSource(
1940
+ packetId: number,
1941
+ catalogTrackName: string | undefined,
1942
+ ssId: number,
1943
+ ): { sbn: number; esi: number } | null {
1944
+ if (this.#configuredBlockProfile(packetId) === undefined) return null;
1945
+ return this.#fecManager?.locateIsoSource?.(packetId, catalogTrackName, ssId) ?? null;
2002
1946
  }
2003
1947
 
2004
1948
  /**
@@ -2023,14 +1967,12 @@ export class MmtpRouter {
2023
1967
  }
2024
1968
 
2025
1969
  /**
2026
- * The release-gate anchor of a recovered symbol: its block (SBN) under
2027
- * k-padded-v1, its own SS_ID under iso-ssbg1-v1, where a frame is gated by
2028
- * the SS_IDs between it and the last released frame.
1970
+ * The release-gate anchor of a recovered symbol: its own SS_ID, SS_Start +
1971
+ * ESI modulo 2^32 (C.5.2), where a frame is gated by the SS_IDs between it
1972
+ * and the last released frame.
2029
1973
  */
2030
- #fecAnchorForRecovered(ownerPacketId: number | undefined, blockId: number, index: number): number {
2031
- return ownerPacketId !== undefined && this.#isIsoPacket(ownerPacketId)
2032
- ? serial32Add(blockId, index)
2033
- : blockId;
1974
+ #fecAnchorForRecovered(blockStart: number, index: number): number {
1975
+ return serial32Add(blockStart, index);
2034
1976
  }
2035
1977
 
2036
1978
  /**
@@ -2038,9 +1980,8 @@ export class MmtpRouter {
2038
1980
  * block `[SS_Start, SS_Start + SSB_length)`; repair ESI = SSB_length +
2039
1981
  * RS_ID (K' = SSB_length). The held sources it placed (and those of a
2040
1982
  * repair-less span in front of it) are fed as first-arrival sources, then
2041
- * the repair, the order they had on the wire, so a loss-free block is clean
2042
- * on its repair exactly as under k-padded-v1. A repair contradicting a known
2043
- * block is dropped.
1983
+ * the repair, the order they had on the wire, so a loss-free block completes
1984
+ * clean on its repair. A repair contradicting a known block is dropped.
2044
1985
  */
2045
1986
  #handleIsoRepair(
2046
1987
  ownerPacketId: number,
@@ -2118,7 +2059,7 @@ export class MmtpRouter {
2118
2059
  }
2119
2060
  if (payload.oversized) continue;
2120
2061
  const alreadyCompleted = fec.isBlockCompleted(blockStart, ownerPacketId, catalogTrackName);
2121
- const recovered = fec.feedSourceSymbol(ownerPacketId, ssId, payload.symbolData, undefined, catalogTrackName);
2062
+ const recovered = fec.feedSourceSymbol(ownerPacketId, ssId, payload.symbolData, catalogTrackName);
2122
2063
  if (!recovered || alreadyCompleted) continue;
2123
2064
  fec.cancelBlockTimeout(blockStart, ownerPacketId, catalogTrackName);
2124
2065
  fec.countRecovery(ownerPacketId, blockStart, catalogTrackName);
@@ -2154,7 +2095,8 @@ export class MmtpRouter {
2154
2095
  }
2155
2096
 
2156
2097
  /** Route a recovered FEC block through the parser + dedup pipeline.
2157
- * Sync WASM decoders return K fixed-width source symbols concatenated. */
2098
+ * Sync WASM decoders return the block's K' = SSB_length fixed-width
2099
+ * ssbg_mode1 source symbols concatenated. */
2158
2100
  routeRecoveredBlock(
2159
2101
  blockId: number,
2160
2102
  data: Uint8Array,
@@ -2697,37 +2639,22 @@ export class MmtpRouter {
2697
2639
  resolvedLoss: (packetId, catalogTrackName, fromSbn, toSbn, releasedSbn) => {
2698
2640
  const fec = this.#fecManager;
2699
2641
  if (!fec?.blockResolution) return [];
2700
- if (this.#isIsoPacket(packetId)) {
2701
- // iso-ssbg1-v1 frames are anchored by their packet's SS_ID: wait
2702
- // until every block that could hold the SS_IDs between the last
2703
- // released frame and this one is stated and resolved.
2704
- const head = fromSbn === releasedSbn ? toSbn : fromSbn;
2705
- return fec.isoSpanResolution?.(packetId, catalogTrackName, releasedSbn, head) ?? null;
2706
- }
2707
- const highest = fec.highestSbn?.(packetId, catalogTrackName);
2708
- const lost: number[] = [];
2709
- for (let sbn = fromSbn; sbn <= toSbn; sbn++) {
2710
- const resolution = fec.blockResolution(sbn, packetId, catalogTrackName);
2711
- if (resolution === "pending") return null;
2712
- if (resolution === "failed") {
2713
- lost.push(sbn);
2714
- } else if (resolution === "untracked") {
2715
- // releasedSbn is the block of the frame the gate last released, so
2716
- // its media arrived: untracked there means it resolved and retired,
2717
- // not that it vanished. Counting it would conceal a delivered block.
2718
- if (sbn === releasedSbn) continue;
2719
- // Not seen yet: a block at or past the stream's frontier may
2720
- // still start. Behind the frontier it vanished without trace.
2721
- if (highest === undefined || sbn > highest) return null;
2722
- lost.push(sbn);
2723
- }
2724
- }
2725
- return lost;
2642
+ // A frame is anchored by its packet's SS_ID (iso-ssbg1-v1, C.5.2): wait
2643
+ // until every block that could hold the SS_IDs between the last
2644
+ // released frame and this one is stated and resolved.
2645
+ const head = fromSbn === releasedSbn ? toSbn : fromSbn;
2646
+ return fec.isoSpanResolution?.(packetId, catalogTrackName, releasedSbn, head) ?? null;
2726
2647
  },
2727
2648
  // The retention window itself: a frame is never still held when a block
2728
2649
  // it waits on retires. Only consulted while resolvedLoss holds a gap,
2729
2650
  // which needs blockResolution, so the check above guarantees the method.
2730
- holdLimitMs: (packetId) => this.#fecManager?.terminalRetentionMsForPacket?.(packetId) ?? Infinity,
2651
+ // A packetId the manager no longer has configured (released) has no
2652
+ // block left to wait on: release its frames now (BLO-45953).
2653
+ holdLimitMs: (packetId) => {
2654
+ const fec = this.#fecManager;
2655
+ if (!fec?.terminalRetentionMsForPacket) return Infinity;
2656
+ return fec.terminalRetentionMsForPacket(packetId) ?? 0;
2657
+ },
2731
2658
  decide: (before, after, lostBlocks, discontinuity) => {
2732
2659
  const decision = this.#decideGap(before, after, lostBlocks, discontinuity);
2733
2660
  this.#onFrameGap?.(decision);
@@ -2813,9 +2740,10 @@ export class MmtpRouter {
2813
2740
 
2814
2741
  /**
2815
2742
  * The most media units a gap between two released frames can hold: the
2816
- * FEC blocks from `before`'s SBN to `after`'s, times D, the media units one
2817
- * block touches (ceil(interleaveDepthMs / unit duration), §5.1). Null when
2818
- * either SBN, the unit duration or the catalog interleave is unknown.
2743
+ * FEC blocks between `before`'s anchor and `after`'s, times D, the media
2744
+ * units one block touches (ceil(interleaveDepthMs / unit duration), §5.1).
2745
+ * Null when either anchor, the unit duration or the catalog interleave is
2746
+ * unknown.
2819
2747
  */
2820
2748
  #maxMissingUnits(before: ParserFrameMeta, after: ParserFrameMeta): number | null {
2821
2749
  const from = before.fecSbn;
@@ -2828,12 +2756,10 @@ export class MmtpRouter {
2828
2756
  const numerator = BigInt(Math.ceil(interleaveMs)) * BigInt(timing.mediaTimescale);
2829
2757
  const denominator = BigInt(timing.durationTicks) * 1000n;
2830
2758
  const unitsPerBlock = (numerator + denominator - 1n) / denominator;
2831
- // iso-ssbg1-v1 anchors are SS_IDs: every block holds at least one, so the
2759
+ // Anchors are SS_IDs (C.5.2): every block holds at least one, so the
2832
2760
  // serial SS_ID distance bounds the blocks between them.
2833
2761
  const blocks = BigInt(
2834
- (this.#isIsoPacket(after.packetId)
2835
- ? (serial32Precedes(from, to) ? serial32Distance(from, to) : serial32Distance(to, from))
2836
- : Math.abs(to - from)) + 1,
2762
+ (serial32Precedes(from, to) ? serial32Distance(from, to) : serial32Distance(to, from)) + 1,
2837
2763
  );
2838
2764
  const bound = unitsPerBlock * blocks;
2839
2765
  return bound > BigInt(Number.MAX_SAFE_INTEGER) ? null : Number(bound);
@@ -2899,8 +2825,9 @@ export class MmtpRouter {
2899
2825
  const cb = this.#trackInitCallbacks.get(packetId);
2900
2826
  if (cb) {
2901
2827
  cb(data);
2902
- } else if (this.#onInitSegment) {
2903
- this.#onInitSegment(data);
2828
+ } else {
2829
+ this.#unmappedInitDeliveries++;
2830
+ this.#onInitSegment?.(data);
2904
2831
  }
2905
2832
  console.log(
2906
2833
  `[MmtpRouter] Init delivered for packetId=${packetId}${catalogTrackName === undefined ? "" : ` track=${catalogTrackName}`} (${data.byteLength}B)`,
@@ -2971,9 +2898,14 @@ export class MmtpRouter {
2971
2898
  if (!info.isRepair && this.#manifestVerifier && !manifestAdmitted) {
2972
2899
  let identity = manifestIdentity;
2973
2900
  if (!identity && info.fecPayloadId && !fecUnreadable && (this.#resolveManifestIdentityForRoute || this.#resolveManifestIdentity)) {
2974
- const coordinates = this.#deriveSbnEsi(info.fecPayloadId.ssId, info.packetId);
2901
+ // A source resolves with its block coordinates (SS_Start, ESI), the
2902
+ // pair a recovered symbol of the same block resolves with. SS_ID alone
2903
+ // locates no block (C.5.3): until a repair states this source's block
2904
+ // it has none, its identity stays absent, and the verifier's
2905
+ // missing-identity policy below applies.
2975
2906
  const catalogTrackName = catalogTrackNameForPacket(ingress, info.packetId);
2976
- identity = (this.#resolveManifestIdentityForRoute
2907
+ const coordinates = this.#locateFecSource(info.packetId, catalogTrackName, info.fecPayloadId.ssId);
2908
+ identity = coordinates === null ? undefined : (this.#resolveManifestIdentityForRoute
2977
2909
  ? this.#resolveManifestIdentityForRoute({
2978
2910
  packetId: info.packetId,
2979
2911
  sbn: coordinates.sbn,
@@ -3042,92 +2974,7 @@ export class MmtpRouter {
3042
2974
  // NOTE: Do NOT call trackBlock for repair packets. Only source symbols
3043
2975
  // should count toward block completion — repair inflates blocksClean stats
3044
2976
  // and masks blocks that actually needed FEC recovery.
3045
- if (this.#isIsoPacket(ownerPacketId)) {
3046
- this.#handleIsoRepair(ownerPacketId, catalogTrackNameForPacket(ingress, ownerPacketId), repair, source);
3047
- return;
3048
- }
3049
- const repairSbn = this.#deriveRepairSbn(repair.ssStart, repair.ssbLength, ownerPacketId);
3050
- if (repairSbn === null) return;
3051
- const repairEsi = this.#kForPacket(ownerPacketId) + repair.rsId;
3052
-
3053
- if (
3054
- !this.#feedFecTransportSymbol(
3055
- ownerPacketId,
3056
- repairSbn,
3057
- repairEsi,
3058
- repair.symbolData,
3059
- source,
3060
- catalogTrackNameForPacket(ingress, ownerPacketId),
3061
- )
3062
- ) return;
3063
-
3064
- // Repair symbols are block progress too. The deadline measures
3065
- // inactivity, not total block lifetime.
3066
- const repairCatalogTrackName = catalogTrackNameForPacket(ingress, ownerPacketId);
3067
- if (repairCatalogTrackName === undefined) {
3068
- this.#fecManager.noteBlockActivity?.(repairSbn, ownerPacketId);
3069
- } else {
3070
- this.#fecManager.noteBlockActivity?.(
3071
- repairSbn,
3072
- ownerPacketId,
3073
- repairCatalogTrackName,
3074
- );
3075
- }
3076
-
3077
- const recovered = repairCatalogTrackName === undefined
3078
- ? this.#fecManager.feedRepairSymbol(
3079
- ownerPacketId,
3080
- repair.ssStart,
3081
- repair.ssbLength,
3082
- repair.rsId,
3083
- repair.symbolData,
3084
- )
3085
- : this.#fecManager.feedRepairSymbol(
3086
- ownerPacketId,
3087
- repair.ssStart,
3088
- repair.ssbLength,
3089
- repair.rsId,
3090
- repair.symbolData,
3091
- repairCatalogTrackName,
3092
- );
3093
- if (recovered) {
3094
- const alreadyCompleted = repairCatalogTrackName === undefined
3095
- ? this.#fecManager.isBlockCompleted(repairSbn, ownerPacketId)
3096
- : this.#fecManager.isBlockCompleted(
3097
- repairSbn,
3098
- ownerPacketId,
3099
- repairCatalogTrackName,
3100
- );
3101
- if (repairCatalogTrackName === undefined) {
3102
- this.#fecManager.cancelBlockTimeout(repairSbn, ownerPacketId);
3103
- } else {
3104
- this.#fecManager.cancelBlockTimeout(
3105
- repairSbn,
3106
- ownerPacketId,
3107
- repairCatalogTrackName,
3108
- );
3109
- }
3110
- // Skip routing if block was already completed via source path (all K sources
3111
- // arrived). The parser's feed() already played every frame.
3112
- if (!alreadyCompleted) {
3113
- this.#fecManager.countRecovery(ownerPacketId, repairSbn, repairCatalogTrackName);
3114
- if (repairCatalogTrackName === undefined) {
3115
- this.#fecManager.markBlockCompleted(repairSbn, ownerPacketId);
3116
- } else {
3117
- this.#fecManager.markBlockCompleted(
3118
- repairSbn,
3119
- ownerPacketId,
3120
- repairCatalogTrackName,
3121
- );
3122
- }
3123
- this.#routeRecoveredBlock(
3124
- repairSbn,
3125
- recovered,
3126
- ownerPacketId,
3127
- catalogTrackNameForPacket(ingress, ownerPacketId),
3128
- );
3129
- }
3130
- }
2977
+ this.#handleIsoRepair(ownerPacketId, catalogTrackNameForPacket(ingress, ownerPacketId), repair, source);
3131
2978
  }
3132
2979
  } else {
3133
2980
  // Drop source packets with unknown packetId — not in catalog.
@@ -3169,14 +3016,13 @@ export class MmtpRouter {
3169
3016
  // The FEC Payload ID FEC may read: none while the packetId has no
3170
3017
  // configured block profile (fecUnreadable above).
3171
3018
  const fecPayloadId = fecUnreadable ? null : info.fecPayloadId;
3172
- // iso-ssbg1-v1 locates a source by range membership in a block a repair
3173
- // already stated; until then it is held, unplaced (BLO-35597 iso:3).
3174
- const isoSource = this.#fecManager !== null && fecPayloadId != null &&
3175
- this.#isIsoPacket(info.packetId);
3176
- const coords = this.#fecManager && fecPayloadId
3177
- ? (isoSource
3178
- ? this.#fecManager.locateIsoSource?.(info.packetId, catalogTrackName, fecPayloadId.ssId) ?? undefined
3179
- : this.#deriveSbnEsi(fecPayloadId.ssId, info.packetId))
3019
+ // An FEC source is located by range membership in a block a repair
3020
+ // already stated; until then it is held, unplaced (BLO-35597 iso:3). A
3021
+ // readable FEC Payload ID implies a configured block profile
3022
+ // (fecUnreadable above), and iso-ssbg1-v1 is the only one.
3023
+ const fecSource = this.#fecManager !== null && fecPayloadId != null;
3024
+ const coords = fecSource && fecPayloadId
3025
+ ? this.#locateFecSource(info.packetId, catalogTrackName, fecPayloadId.ssId) ?? undefined
3180
3026
  : undefined;
3181
3027
  // Note the packet's FEC block (none without an FEC coordinate) before
3182
3028
  // any ledger lookup, the restart check below included.
@@ -3217,16 +3063,12 @@ export class MmtpRouter {
3217
3063
  }
3218
3064
  if (this.#fecManager && fecPayloadId && coords) {
3219
3065
  const fecId = fecPayloadId;
3220
- const symbolSize = this.#symbolSizeForPacket(info.packetId);
3221
-
3222
3066
  // The mmtp-packet source symbol protects the complete MMTP packet
3223
3067
  // before SS_ID is appended, self-delimiting and zero-padded to T.
3224
3068
  const rawSymbol = packet.subarray(0, packet.length - 4);
3225
- // iso-ssbg1-v1 symbols carry a two-octet length (C.3.3): admission
3069
+ // ssbg_mode1 symbols carry a two-octet length (C.3.3): admission
3226
3070
  // refuses length + 2 > T.
3227
- const oversized = isoSource
3228
- ? !(this.#fecManager.isoSourceFits?.(info.packetId, rawSymbol.length) ?? false)
3229
- : symbolSize > 0 && rawSymbol.length > symbolSize;
3071
+ const oversized = !(this.#fecManager.isoSourceFits?.(info.packetId, rawSymbol.length) ?? false);
3230
3072
 
3231
3073
  // NOTE: trackBlock() is deferred to AFTER #feedViaParser (below).
3232
3074
  // Reason: trackBlock synchronously fires onBlockComplete when the
@@ -3269,9 +3111,9 @@ export class MmtpRouter {
3269
3111
  );
3270
3112
  sourceSymbolTrackable = sourceSymbolAccepted;
3271
3113
  } else {
3272
- // FECManager zero-pads a short symbol to T itself and then owns that
3273
- // buffer outright, so it can transfer it to the FEC Worker without
3274
- // copying it again. Padding here as well cost a second T-byte
3114
+ // The exact protected packet travels unpadded: the decoder builds
3115
+ // the ssbg_mode1 symbol itself, and FECManager owns any copy it
3116
+ // hands the FEC Worker. Padding here cost a second T-byte
3275
3117
  // allocation and copy per short packet (BLO-36599).
3276
3118
  const symbolData = rawSymbol;
3277
3119
 
@@ -3296,8 +3138,8 @@ export class MmtpRouter {
3296
3138
 
3297
3139
  // Compute FEC block info for the MSE assembler.
3298
3140
  fecInfo = { sbn: coords.sbn, esi: coords.esi, oversized };
3299
- } else if (isoSource && this.#fecManager && fecPayloadId) {
3300
- // iso-ssbg1-v1 source whose block no repair has stated yet: route its
3141
+ } else if (fecSource && this.#fecManager && fecPayloadId) {
3142
+ // An FEC source whose block no repair has stated yet: route its
3301
3143
  // media now and hold its FEC symbol until a repair places it.
3302
3144
  const ssId = fecPayloadId.ssId;
3303
3145
  if (overlapCopy) {
@@ -3340,9 +3182,8 @@ export class MmtpRouter {
3340
3182
  this.#feedViaParser(packet, info, fecInfo, {
3341
3183
  source,
3342
3184
  catalogTrackName,
3343
- ...(isoSource && info.fecPayloadId
3344
- ? { fecSbn: info.fecPayloadId.ssId }
3345
- : fecInfo === undefined ? {} : { fecSbn: fecInfo.sbn }),
3185
+ // An FEC source frame is anchored by its own SS_ID (C.5.2).
3186
+ ...(fecSource && fecPayloadId ? { fecSbn: fecPayloadId.ssId } : {}),
3346
3187
  }, parsed);
3347
3188
  }
3348
3189
  // The frame this packet completed can commit an in-place switch that
@@ -3357,15 +3198,15 @@ export class MmtpRouter {
3357
3198
  // → #flushBlock. Without this ordering, the K-th frame was lost on
3358
3199
  // every block — only K-1 frames per block were ever emitted to MSE.
3359
3200
  // Only first-arriving symbols count toward completion or playback.
3201
+ // A source symbol is accepted only once placed, so it has coords.
3360
3202
  if (
3361
3203
  this.#fecManager &&
3362
3204
  fecPayloadId &&
3205
+ coords &&
3363
3206
  sourceSymbolAccepted &&
3364
3207
  sourceSymbolTrackable
3365
3208
  ) {
3366
- const { sbn, esi } = isoSource && coords
3367
- ? coords
3368
- : this.#deriveSbnEsi(fecPayloadId.ssId, info.packetId);
3209
+ const { sbn, esi } = coords;
3369
3210
  if (
3370
3211
  this.#classifyPacketId(info.packetId) !== null &&
3371
3212
  this.#fecManager.isTrackConfigured?.(info.packetId) !== false
@@ -3403,13 +3244,11 @@ export class MmtpRouter {
3403
3244
  info.packetId,
3404
3245
  sourceFec.ssId,
3405
3246
  sourceFec.symbolData,
3406
- undefined,
3407
3247
  )
3408
3248
  : this.#fecManager.feedSourceSymbol(
3409
3249
  info.packetId,
3410
3250
  sourceFec.ssId,
3411
3251
  sourceFec.symbolData,
3412
- undefined,
3413
3252
  catalogTrackName,
3414
3253
  );
3415
3254
  if (recovered) {
@@ -4051,7 +3890,6 @@ export class MmtpRouter {
4051
3890
  // (FI=1/2/3) of a larger MFU. Route through the reassembler so
4052
3891
  // multi-packet MFUs (e.g., keyframes spanning 15+ packets) are
4053
3892
  // properly assembled before reaching the decoder.
4054
- const k = this.#kForPacket(ownerPacketId);
4055
3893
  const packetSymbolSize = this.#symbolSizeForPacket(ownerPacketId);
4056
3894
  if (ownerPacketId === undefined) {
4057
3895
  throw new Error("[MmtpRouter] a recovered FEC block needs its owner packetId to read its fec.blockProfile");
@@ -4064,10 +3902,8 @@ export class MmtpRouter {
4064
3902
  );
4065
3903
  }
4066
3904
  const symbolSize = packetSymbolSize;
4067
- // iso-ssbg1-v1 returns K' = SSB_length symbols; k-padded-v1 the authored
4068
- // prefix of a K-symbol block, walked up to K.
3905
+ // An iso-ssbg1-v1 block decodes to K' = SSB_length ssbg_mode1 symbols.
4069
3906
  const result = processFecBlock(recovered, {
4070
- ...(blockProfile === "k-padded-v1" ? { k } : {}),
4071
3907
  symbolSize,
4072
3908
  ownerPacketId,
4073
3909
  blockProfile,
@@ -4163,9 +3999,6 @@ export class MmtpRouter {
4163
3999
  {
4164
4000
  ...identity,
4165
4001
  packetId: ownerPacketId,
4166
- ...(ownerPacketId !== undefined && this.#isIsoPacket(ownerPacketId)
4167
- ? {}
4168
- : { ssId: blockId * this.#kForPacket(ownerPacketId) + symbol.index }),
4169
4002
  },
4170
4003
  symbol.rawSymbol,
4171
4004
  () => {
@@ -4348,7 +4181,7 @@ export class MmtpRouter {
4348
4181
  rapFlag: sym.fragment.rapFlag,
4349
4182
  recovered: true,
4350
4183
  deliveryProvenance,
4351
- fecSbn: this.#fecAnchorForRecovered(ownerPacketId, blockId, sym.index),
4184
+ fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
4352
4185
  ...(catalogTrackName === undefined ? {} : { catalogTrackName }),
4353
4186
  });
4354
4187
  continue;
@@ -4484,7 +4317,7 @@ export class MmtpRouter {
4484
4317
  ...(assembled.deliveryProvenance === undefined
4485
4318
  ? {}
4486
4319
  : { deliveryProvenance: assembled.deliveryProvenance }),
4487
- fecSbn: this.#fecAnchorForRecovered(ownerPacketId, blockId, sym.index),
4320
+ fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
4488
4321
  ...(recoveredCatalogTrackName === undefined
4489
4322
  ? {}
4490
4323
  : { catalogTrackName: recoveredCatalogTrackName }),
@@ -4669,7 +4502,7 @@ export class MmtpRouter {
4669
4502
  rapFlag: sym.fragment.rapFlag,
4670
4503
  recovered: true,
4671
4504
  deliveryProvenance,
4672
- fecSbn: this.#fecAnchorForRecovered(ownerPacketId, blockId, sym.index),
4505
+ fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
4673
4506
  ...(catalogTrackName === undefined ? {} : { catalogTrackName }),
4674
4507
  });
4675
4508
  } else {
@@ -4759,7 +4592,7 @@ export class MmtpRouter {
4759
4592
  rapFlag: assembled.rapFlag,
4760
4593
  recovered: true,
4761
4594
  deliveryProvenance,
4762
- fecSbn: this.#fecAnchorForRecovered(ownerPacketId, blockId, sym.index),
4595
+ fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
4763
4596
  ...(assembled.catalogTrackName === undefined
4764
4597
  ? {}
4765
4598
  : { catalogTrackName: assembled.catalogTrackName }),
@@ -4806,7 +4639,7 @@ export class MmtpRouter {
4806
4639
  : { sampleNumber: sym.fragment.sampleNumber }),
4807
4640
  recovered: true,
4808
4641
  deliveryProvenance,
4809
- fecSbn: this.#fecAnchorForRecovered(ownerPacketId, blockId, sym.index),
4642
+ fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
4810
4643
  ...(catalogTrackName === undefined ? {} : { catalogTrackName }),
4811
4644
  });
4812
4645
  continue;