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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (605) hide show
  1. package/README.md +33 -16
  2. package/dist/browser-runtime.js +14814 -14255
  3. package/dist/browser-runtime.js.map +4 -4
  4. package/dist/carp-catalog.d.ts +24 -19
  5. package/dist/carp-catalog.d.ts.map +1 -1
  6. package/dist/carp-catalog.js +29 -14
  7. package/dist/carp-catalog.js.map +4 -4
  8. package/dist/catalog-fec-params.d.ts +88 -28
  9. package/dist/catalog-fec-params.d.ts.map +1 -1
  10. package/dist/catalog-fec-params.js +60 -23
  11. package/dist/catalog-fec-params.js.map +4 -4
  12. package/dist/catalog-network-source.js +1 -7
  13. package/dist/catalog-network-source.js.map +4 -4
  14. package/dist/cmaf-block-assembler.d.ts +0 -2
  15. package/dist/cmaf-block-assembler.d.ts.map +1 -1
  16. package/dist/cmaf-block-assembler.js +0 -1
  17. package/dist/cmaf-block-assembler.js.map +2 -2
  18. package/dist/cmcd-producer.d.ts.map +1 -1
  19. package/dist/cmcd-producer.js +0 -4
  20. package/dist/cmcd-producer.js.map +2 -2
  21. package/dist/delivery-catalog.d.ts +124 -0
  22. package/dist/delivery-catalog.d.ts.map +1 -0
  23. package/dist/delivery-catalog.js +1857 -0
  24. package/dist/delivery-catalog.js.map +7 -0
  25. package/dist/delta-fallback-config.d.ts +42 -0
  26. package/dist/delta-fallback-config.d.ts.map +1 -0
  27. package/dist/delta-fallback-config.js +59 -0
  28. package/dist/delta-fallback-config.js.map +7 -0
  29. package/dist/fec-manager.d.ts +52 -30
  30. package/dist/fec-manager.d.ts.map +1 -1
  31. package/dist/fec-manager.js +338 -293
  32. package/dist/fec-manager.js.map +4 -4
  33. package/dist/fec-state.d.ts +19 -31
  34. package/dist/fec-state.d.ts.map +1 -1
  35. package/dist/fec-state.js +4 -10
  36. package/dist/fec-state.js.map +4 -4
  37. package/dist/fec-worker-setup.d.ts +18 -14
  38. package/dist/fec-worker-setup.d.ts.map +1 -1
  39. package/dist/fec-worker-setup.js +81 -96
  40. package/dist/fec-worker-setup.js.map +4 -4
  41. package/dist/index.d.ts +5 -3
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +16 -0
  44. package/dist/index.js.map +2 -2
  45. package/dist/iso-block-locator.js +1 -7
  46. package/dist/iso-block-locator.js.map +4 -4
  47. package/dist/media-router.d.ts +20 -8
  48. package/dist/media-router.d.ts.map +1 -1
  49. package/dist/media-router.js +46 -21
  50. package/dist/media-router.js.map +2 -2
  51. package/dist/mfu-reassembler.js +24 -30
  52. package/dist/mfu-reassembler.js.map +4 -4
  53. package/dist/mmtp-container-parser.d.ts +14 -11
  54. package/dist/mmtp-container-parser.d.ts.map +1 -1
  55. package/dist/mmtp-container-parser.js +126 -99
  56. package/dist/mmtp-container-parser.js.map +4 -4
  57. package/dist/mmtp-container-parser.no-modules.js +151 -108
  58. package/dist/mmtp-container-parser.no-modules.js.map +4 -4
  59. package/dist/mmtp-decode-pipeline.js +126 -99
  60. package/dist/mmtp-decode-pipeline.js.map +4 -4
  61. package/dist/mmtp-router.d.ts +51 -29
  62. package/dist/mmtp-router.d.ts.map +1 -1
  63. package/dist/mmtp-router.js +260 -326
  64. package/dist/mmtp-router.js.map +4 -4
  65. package/dist/multicast-input.js +1 -7
  66. package/dist/multicast-input.js.map +4 -4
  67. package/dist/multicast-manager.d.ts +72 -6
  68. package/dist/multicast-manager.d.ts.map +1 -1
  69. package/dist/multicast-manager.js +882 -673
  70. package/dist/multicast-manager.js.map +4 -4
  71. package/dist/multicast-transport.d.ts +1 -1
  72. package/dist/multicast-transport.d.ts.map +1 -1
  73. package/dist/multicast-transport.js +44 -26
  74. package/dist/multicast-transport.js.map +4 -4
  75. package/dist/multicast-unwrap.js +29 -35
  76. package/dist/multicast-unwrap.js.map +4 -4
  77. package/dist/no-modules.js +147 -106
  78. package/dist/no-modules.js.map +4 -4
  79. package/dist/repair-fetch.d.ts +116 -21
  80. package/dist/repair-fetch.d.ts.map +1 -1
  81. package/dist/repair-fetch.js +114 -34
  82. package/dist/repair-fetch.js.map +4 -4
  83. package/dist/repair-layers.d.ts +18 -7
  84. package/dist/repair-layers.d.ts.map +1 -1
  85. package/dist/repair-layers.js +12 -10
  86. package/dist/repair-layers.js.map +4 -4
  87. package/dist/signaling.js +2 -11
  88. package/dist/signaling.js.map +4 -4
  89. package/dist/timestamp-codec.js +24 -30
  90. package/dist/timestamp-codec.js.map +4 -4
  91. package/dist/track-session.d.ts +7 -0
  92. package/dist/track-session.d.ts.map +1 -1
  93. package/dist/track-session.js +15 -8
  94. package/dist/track-session.js.map +2 -2
  95. package/dist/wasm-mfu-reassembler.js +1 -7
  96. package/dist/wasm-mfu-reassembler.js.map +4 -4
  97. package/dist/wasm-mmtp-container-parser.js +126 -99
  98. package/dist/wasm-mmtp-container-parser.js.map +4 -4
  99. package/package.json +7 -14
  100. package/schemas/catalog.schema.json +3 -3
  101. package/src/carp-catalog.ts +46 -24
  102. package/src/catalog-fec-params.ts +173 -64
  103. package/src/cmaf-block-assembler.ts +1 -4
  104. package/src/cmcd-producer.ts +0 -6
  105. package/src/delivery-catalog.ts +498 -0
  106. package/src/delta-fallback-config.ts +72 -0
  107. package/src/fec-manager.ts +457 -334
  108. package/src/fec-state.ts +20 -32
  109. package/src/fec-worker-setup.ts +109 -90
  110. package/src/index.ts +32 -0
  111. package/src/media-router.ts +59 -21
  112. package/src/mmtp-container-parser.ts +106 -20
  113. package/src/mmtp-router.ts +189 -330
  114. package/src/multicast-manager.ts +265 -86
  115. package/src/multicast-transport.ts +16 -9
  116. package/src/repair-fetch.ts +273 -43
  117. package/src/repair-layers.ts +28 -8
  118. package/src/track-session.ts +28 -9
  119. package/test-vectors/catalog/README.md +37 -17
  120. package/test-vectors/catalog/negative/fec-block-profile-retired.json +52 -0
  121. package/test-vectors/catalog/negative/fec-enhancement-repair-removed.json +1 -1
  122. package/test-vectors/catalog/negative/fec-repair-layer-geometry.json +1 -1
  123. package/test-vectors/catalog/negative/fec-repair-layer-missing-symbols.json +1 -1
  124. package/test-vectors/catalog/negative/fec-repair-multiple-depends.json +1 -1
  125. package/test-vectors/catalog/negative/fec-repair-overlay-with-layer.json +1 -1
  126. package/test-vectors/catalog/negative/fec-repair-priority-out-of-band.json +1 -1
  127. package/test-vectors/catalog/negative/fec-repair-source-symbols-without-scope.json +1 -1
  128. package/test-vectors/catalog/negative/multicast-endpoint-relay-address.json +39 -0
  129. package/test-vectors/catalog/negative/multicast-network-source-empty.json +1 -1
  130. package/test-vectors/catalog/negative/raptorq-source-symbols-over-max.json +1 -1
  131. package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +1 -1
  132. package/test-vectors/catalog/positive/fec-layered-repair.json +2 -2
  133. package/test-vectors/catalog/positive/fec-multicast.json +2 -1
  134. package/test-vectors/catalog/positive/multicast-amt-manual-relay.json +38 -0
  135. package/test-vectors/catalog/positive/multicast-native-ssm-no-network-source.json +2 -1
  136. package/test-vectors/catalog-timing.json +356 -0
  137. package/test-vectors/catalog-validation.json +40 -5
  138. package/test-vectors/delivery-catalog/README.md +11 -0
  139. package/test-vectors/delivery-catalog/negative/missing-block-profile.json +58 -0
  140. package/test-vectors/delivery-catalog/negative/packet-id-signaling.json +59 -0
  141. package/test-vectors/delivery-catalog/negative/retired-k-padded-block-profile.json +59 -0
  142. package/test-vectors/delivery-catalog/positive/dash.json +56 -0
  143. package/test-vectors/delivery-catalog/positive/mmtp-source-only.json +43 -0
  144. package/node_modules/@blockcast/fec-worker/README.md +0 -223
  145. package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
  146. package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts +0 -38
  147. package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts.map +0 -1
  148. package/node_modules/@blockcast/fec-worker/dist/block-order.js +0 -78
  149. package/node_modules/@blockcast/fec-worker/dist/block-order.js.map +0 -1
  150. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +0 -93
  151. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts.map +0 -1
  152. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js +0 -346
  153. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js.map +0 -1
  154. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +0 -380
  155. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +0 -1
  156. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js +0 -11
  157. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js.map +0 -1
  158. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts +0 -14
  159. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts.map +0 -1
  160. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +0 -859
  161. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +0 -7
  162. package/node_modules/@blockcast/fec-worker/dist/index.d.ts +0 -10
  163. package/node_modules/@blockcast/fec-worker/dist/index.d.ts.map +0 -1
  164. package/node_modules/@blockcast/fec-worker/dist/index.js +0 -8
  165. package/node_modules/@blockcast/fec-worker/dist/index.js.map +0 -1
  166. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts +0 -20
  167. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts.map +0 -1
  168. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js +0 -370
  169. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js.map +0 -7
  170. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts +0 -104
  171. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts.map +0 -1
  172. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js +0 -181
  173. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js.map +0 -1
  174. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts +0 -194
  175. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts.map +0 -1
  176. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js +0 -62
  177. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js.map +0 -1
  178. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts +0 -9
  179. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts.map +0 -1
  180. package/node_modules/@blockcast/fec-worker/dist/transfer.js +0 -13
  181. package/node_modules/@blockcast/fec-worker/dist/transfer.js.map +0 -1
  182. package/node_modules/@blockcast/fec-worker/package.json +0 -59
  183. package/node_modules/@blockcast/fec-worker/src/block-order.ts +0 -93
  184. package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +0 -392
  185. package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +0 -399
  186. package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +0 -1502
  187. package/node_modules/@blockcast/fec-worker/src/index.ts +0 -35
  188. package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +0 -589
  189. package/node_modules/@blockcast/fec-worker/src/shred-worker-client.ts +0 -222
  190. package/node_modules/@blockcast/fec-worker/src/shred-worker-types.ts +0 -209
  191. package/node_modules/@blockcast/fec-worker/src/transfer.ts +0 -12
  192. package/node_modules/@blockcast/mmt-alta-parse/README.md +0 -181
  193. package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  194. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +0 -57
  195. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +0 -1
  196. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +0 -115
  197. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +0 -1
  198. package/node_modules/@blockcast/mmt-alta-parse/package.json +0 -50
  199. package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +0 -136
  200. package/node_modules/@blockcast/mmt-base/README.md +0 -134
  201. package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  202. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +0 -55
  203. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +0 -1
  204. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +0 -128
  205. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +0 -1
  206. package/node_modules/@blockcast/mmt-base/dist/index.d.ts +0 -7
  207. package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +0 -1
  208. package/node_modules/@blockcast/mmt-base/dist/index.js +0 -7
  209. package/node_modules/@blockcast/mmt-base/dist/index.js.map +0 -1
  210. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -292
  211. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +0 -1
  212. package/node_modules/@blockcast/mmt-base/dist/mmtp.js +0 -612
  213. package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +0 -1
  214. package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +0 -18
  215. package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +0 -1
  216. package/node_modules/@blockcast/mmt-base/dist/net-constants.js +0 -18
  217. package/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +0 -1
  218. package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +0 -47
  219. package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +0 -1
  220. package/node_modules/@blockcast/mmt-base/dist/ntp-short.js +0 -54
  221. package/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +0 -1
  222. package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +0 -57
  223. package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +0 -1
  224. package/node_modules/@blockcast/mmt-base/dist/serial-number.js +0 -98
  225. package/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +0 -1
  226. package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +0 -312
  227. package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +0 -1
  228. package/node_modules/@blockcast/mmt-base/dist/signalling.js +0 -637
  229. package/node_modules/@blockcast/mmt-base/dist/signalling.js.map +0 -1
  230. package/node_modules/@blockcast/mmt-base/package.json +0 -49
  231. package/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +0 -145
  232. package/node_modules/@blockcast/mmt-base/src/index.ts +0 -6
  233. package/node_modules/@blockcast/mmt-base/src/mmtp.ts +0 -892
  234. package/node_modules/@blockcast/mmt-base/src/net-constants.ts +0 -17
  235. package/node_modules/@blockcast/mmt-base/src/ntp-short.ts +0 -67
  236. package/node_modules/@blockcast/mmt-base/src/serial-number.ts +0 -107
  237. package/node_modules/@blockcast/mmt-base/src/signalling.ts +0 -862
  238. package/node_modules/@blockcast/mmt-fec/README.md +0 -271
  239. package/node_modules/@blockcast/mmt-fec/dist/.build-stamp +0 -0
  240. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts +0 -82
  241. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts.map +0 -1
  242. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js +0 -296
  243. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js.map +0 -1
  244. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts +0 -106
  245. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts.map +0 -1
  246. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js +0 -288
  247. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js.map +0 -1
  248. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts +0 -46
  249. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts.map +0 -1
  250. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js +0 -96
  251. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js.map +0 -1
  252. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts +0 -33
  253. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts.map +0 -1
  254. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js +0 -57
  255. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js.map +0 -1
  256. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts +0 -205
  257. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +0 -1
  258. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +0 -240
  259. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +0 -1
  260. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +0 -28
  261. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +0 -1
  262. package/node_modules/@blockcast/mmt-fec/dist/index.js +0 -28
  263. package/node_modules/@blockcast/mmt-fec/dist/index.js.map +0 -1
  264. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts +0 -20
  265. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts.map +0 -1
  266. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js +0 -28
  267. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js.map +0 -1
  268. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +0 -258
  269. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +0 -1
  270. package/node_modules/@blockcast/mmt-fec/dist/oti.js +0 -382
  271. package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +0 -1
  272. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts +0 -41
  273. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts.map +0 -1
  274. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js +0 -81
  275. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js.map +0 -1
  276. package/node_modules/@blockcast/mmt-fec/dist/repair-group.d.ts +0 -82
  277. package/node_modules/@blockcast/mmt-fec/dist/repair-group.d.ts.map +0 -1
  278. package/node_modules/@blockcast/mmt-fec/dist/repair-group.js +0 -170
  279. package/node_modules/@blockcast/mmt-fec/dist/repair-group.js.map +0 -1
  280. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/README.md +0 -181
  281. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  282. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +0 -57
  283. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +0 -1
  284. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js +0 -115
  285. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +0 -1
  286. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/package.json +0 -50
  287. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/src/index.ts +0 -136
  288. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +0 -134
  289. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  290. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +0 -55
  291. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +0 -1
  292. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +0 -128
  293. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +0 -1
  294. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +0 -7
  295. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +0 -1
  296. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +0 -7
  297. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +0 -1
  298. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -292
  299. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +0 -1
  300. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +0 -612
  301. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +0 -1
  302. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +0 -18
  303. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +0 -1
  304. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js +0 -18
  305. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +0 -1
  306. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +0 -47
  307. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +0 -1
  308. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js +0 -54
  309. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +0 -1
  310. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +0 -57
  311. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +0 -1
  312. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js +0 -98
  313. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +0 -1
  314. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +0 -312
  315. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +0 -1
  316. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js +0 -637
  317. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js.map +0 -1
  318. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +0 -49
  319. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +0 -145
  320. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +0 -6
  321. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +0 -892
  322. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/net-constants.ts +0 -17
  323. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/ntp-short.ts +0 -67
  324. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/serial-number.ts +0 -107
  325. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/signalling.ts +0 -862
  326. package/node_modules/@blockcast/mmt-fec/package.json +0 -79
  327. package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +0 -371
  328. package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +0 -439
  329. package/node_modules/@blockcast/mmt-fec/src/cmaf-recovery.ts +0 -127
  330. package/node_modules/@blockcast/mmt-fec/src/cmaf-symbols.ts +0 -68
  331. package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +0 -310
  332. package/node_modules/@blockcast/mmt-fec/src/index.ts +0 -94
  333. package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +0 -34
  334. package/node_modules/@blockcast/mmt-fec/src/oti.ts +0 -463
  335. package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +0 -101
  336. package/node_modules/@blockcast/mmt-fec/src/repair-group.ts +0 -195
  337. package/node_modules/@blockcast/mmt-manifest-verify/dist/.build-stamp +0 -0
  338. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts +0 -28
  339. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts.map +0 -1
  340. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js +0 -128
  341. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js.map +0 -1
  342. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts +0 -4
  343. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts.map +0 -1
  344. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js +0 -4
  345. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js.map +0 -1
  346. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts +0 -37
  347. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts.map +0 -1
  348. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js +0 -179
  349. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js.map +0 -1
  350. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts +0 -99
  351. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts.map +0 -1
  352. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js +0 -492
  353. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js.map +0 -1
  354. package/node_modules/@blockcast/mmt-manifest-verify/package.json +0 -45
  355. package/node_modules/@blockcast/mmt-manifest-verify/src/admission.ts +0 -171
  356. package/node_modules/@blockcast/mmt-manifest-verify/src/index.ts +0 -3
  357. package/node_modules/@blockcast/mmt-manifest-verify/src/source-auth.ts +0 -230
  358. package/node_modules/@blockcast/mmt-manifest-verify/src/verifier.ts +0 -669
  359. package/node_modules/@noble/hashes/LICENSE +0 -21
  360. package/node_modules/@noble/hashes/README.md +0 -521
  361. package/node_modules/@noble/hashes/_assert.d.ts +0 -17
  362. package/node_modules/@noble/hashes/_assert.d.ts.map +0 -1
  363. package/node_modules/@noble/hashes/_assert.js +0 -18
  364. package/node_modules/@noble/hashes/_assert.js.map +0 -1
  365. package/node_modules/@noble/hashes/_blake.d.ts +0 -14
  366. package/node_modules/@noble/hashes/_blake.d.ts.map +0 -1
  367. package/node_modules/@noble/hashes/_blake.js +0 -50
  368. package/node_modules/@noble/hashes/_blake.js.map +0 -1
  369. package/node_modules/@noble/hashes/_md.d.ts +0 -51
  370. package/node_modules/@noble/hashes/_md.d.ts.map +0 -1
  371. package/node_modules/@noble/hashes/_md.js +0 -162
  372. package/node_modules/@noble/hashes/_md.js.map +0 -1
  373. package/node_modules/@noble/hashes/_u64.d.ts +0 -55
  374. package/node_modules/@noble/hashes/_u64.d.ts.map +0 -1
  375. package/node_modules/@noble/hashes/_u64.js +0 -90
  376. package/node_modules/@noble/hashes/_u64.js.map +0 -1
  377. package/node_modules/@noble/hashes/argon2.d.ts +0 -32
  378. package/node_modules/@noble/hashes/argon2.d.ts.map +0 -1
  379. package/node_modules/@noble/hashes/argon2.js +0 -401
  380. package/node_modules/@noble/hashes/argon2.js.map +0 -1
  381. package/node_modules/@noble/hashes/blake1.d.ts +0 -106
  382. package/node_modules/@noble/hashes/blake1.d.ts.map +0 -1
  383. package/node_modules/@noble/hashes/blake1.js +0 -459
  384. package/node_modules/@noble/hashes/blake1.js.map +0 -1
  385. package/node_modules/@noble/hashes/blake2.d.ts +0 -116
  386. package/node_modules/@noble/hashes/blake2.d.ts.map +0 -1
  387. package/node_modules/@noble/hashes/blake2.js +0 -420
  388. package/node_modules/@noble/hashes/blake2.js.map +0 -1
  389. package/node_modules/@noble/hashes/blake2b.d.ts +0 -11
  390. package/node_modules/@noble/hashes/blake2b.d.ts.map +0 -1
  391. package/node_modules/@noble/hashes/blake2b.js +0 -14
  392. package/node_modules/@noble/hashes/blake2b.js.map +0 -1
  393. package/node_modules/@noble/hashes/blake2s.d.ts +0 -20
  394. package/node_modules/@noble/hashes/blake2s.d.ts.map +0 -1
  395. package/node_modules/@noble/hashes/blake2s.js +0 -24
  396. package/node_modules/@noble/hashes/blake2s.js.map +0 -1
  397. package/node_modules/@noble/hashes/blake3.d.ts +0 -54
  398. package/node_modules/@noble/hashes/blake3.d.ts.map +0 -1
  399. package/node_modules/@noble/hashes/blake3.js +0 -255
  400. package/node_modules/@noble/hashes/blake3.js.map +0 -1
  401. package/node_modules/@noble/hashes/crypto.d.ts +0 -2
  402. package/node_modules/@noble/hashes/crypto.d.ts.map +0 -1
  403. package/node_modules/@noble/hashes/crypto.js +0 -5
  404. package/node_modules/@noble/hashes/crypto.js.map +0 -1
  405. package/node_modules/@noble/hashes/cryptoNode.d.ts +0 -2
  406. package/node_modules/@noble/hashes/cryptoNode.d.ts.map +0 -1
  407. package/node_modules/@noble/hashes/cryptoNode.js +0 -18
  408. package/node_modules/@noble/hashes/cryptoNode.js.map +0 -1
  409. package/node_modules/@noble/hashes/eskdf.d.ts +0 -47
  410. package/node_modules/@noble/hashes/eskdf.d.ts.map +0 -1
  411. package/node_modules/@noble/hashes/eskdf.js +0 -166
  412. package/node_modules/@noble/hashes/eskdf.js.map +0 -1
  413. package/node_modules/@noble/hashes/esm/_assert.d.ts +0 -17
  414. package/node_modules/@noble/hashes/esm/_assert.d.ts.map +0 -1
  415. package/node_modules/@noble/hashes/esm/_assert.js +0 -15
  416. package/node_modules/@noble/hashes/esm/_assert.js.map +0 -1
  417. package/node_modules/@noble/hashes/esm/_blake.d.ts +0 -14
  418. package/node_modules/@noble/hashes/esm/_blake.d.ts.map +0 -1
  419. package/node_modules/@noble/hashes/esm/_blake.js +0 -45
  420. package/node_modules/@noble/hashes/esm/_blake.js.map +0 -1
  421. package/node_modules/@noble/hashes/esm/_md.d.ts +0 -51
  422. package/node_modules/@noble/hashes/esm/_md.d.ts.map +0 -1
  423. package/node_modules/@noble/hashes/esm/_md.js +0 -155
  424. package/node_modules/@noble/hashes/esm/_md.js.map +0 -1
  425. package/node_modules/@noble/hashes/esm/_u64.d.ts +0 -55
  426. package/node_modules/@noble/hashes/esm/_u64.d.ts.map +0 -1
  427. package/node_modules/@noble/hashes/esm/_u64.js +0 -67
  428. package/node_modules/@noble/hashes/esm/_u64.js.map +0 -1
  429. package/node_modules/@noble/hashes/esm/argon2.d.ts +0 -32
  430. package/node_modules/@noble/hashes/esm/argon2.d.ts.map +0 -1
  431. package/node_modules/@noble/hashes/esm/argon2.js +0 -392
  432. package/node_modules/@noble/hashes/esm/argon2.js.map +0 -1
  433. package/node_modules/@noble/hashes/esm/blake1.d.ts +0 -106
  434. package/node_modules/@noble/hashes/esm/blake1.d.ts.map +0 -1
  435. package/node_modules/@noble/hashes/esm/blake1.js +0 -452
  436. package/node_modules/@noble/hashes/esm/blake1.js.map +0 -1
  437. package/node_modules/@noble/hashes/esm/blake2.d.ts +0 -116
  438. package/node_modules/@noble/hashes/esm/blake2.d.ts.map +0 -1
  439. package/node_modules/@noble/hashes/esm/blake2.js +0 -413
  440. package/node_modules/@noble/hashes/esm/blake2.js.map +0 -1
  441. package/node_modules/@noble/hashes/esm/blake2b.d.ts +0 -11
  442. package/node_modules/@noble/hashes/esm/blake2b.d.ts.map +0 -1
  443. package/node_modules/@noble/hashes/esm/blake2b.js +0 -11
  444. package/node_modules/@noble/hashes/esm/blake2b.js.map +0 -1
  445. package/node_modules/@noble/hashes/esm/blake2s.d.ts +0 -20
  446. package/node_modules/@noble/hashes/esm/blake2s.d.ts.map +0 -1
  447. package/node_modules/@noble/hashes/esm/blake2s.js +0 -21
  448. package/node_modules/@noble/hashes/esm/blake2s.js.map +0 -1
  449. package/node_modules/@noble/hashes/esm/blake3.d.ts +0 -54
  450. package/node_modules/@noble/hashes/esm/blake3.d.ts.map +0 -1
  451. package/node_modules/@noble/hashes/esm/blake3.js +0 -251
  452. package/node_modules/@noble/hashes/esm/blake3.js.map +0 -1
  453. package/node_modules/@noble/hashes/esm/crypto.d.ts +0 -2
  454. package/node_modules/@noble/hashes/esm/crypto.d.ts.map +0 -1
  455. package/node_modules/@noble/hashes/esm/crypto.js +0 -2
  456. package/node_modules/@noble/hashes/esm/crypto.js.map +0 -1
  457. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts +0 -2
  458. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts.map +0 -1
  459. package/node_modules/@noble/hashes/esm/cryptoNode.js +0 -15
  460. package/node_modules/@noble/hashes/esm/cryptoNode.js.map +0 -1
  461. package/node_modules/@noble/hashes/esm/eskdf.d.ts +0 -47
  462. package/node_modules/@noble/hashes/esm/eskdf.d.ts.map +0 -1
  463. package/node_modules/@noble/hashes/esm/eskdf.js +0 -160
  464. package/node_modules/@noble/hashes/esm/eskdf.js.map +0 -1
  465. package/node_modules/@noble/hashes/esm/hkdf.d.ts +0 -36
  466. package/node_modules/@noble/hashes/esm/hkdf.d.ts.map +0 -1
  467. package/node_modules/@noble/hashes/esm/hkdf.js +0 -82
  468. package/node_modules/@noble/hashes/esm/hkdf.js.map +0 -1
  469. package/node_modules/@noble/hashes/esm/hmac.d.ts +0 -35
  470. package/node_modules/@noble/hashes/esm/hmac.d.ts.map +0 -1
  471. package/node_modules/@noble/hashes/esm/hmac.js +0 -86
  472. package/node_modules/@noble/hashes/esm/hmac.js.map +0 -1
  473. package/node_modules/@noble/hashes/esm/index.d.ts +0 -2
  474. package/node_modules/@noble/hashes/esm/index.d.ts.map +0 -1
  475. package/node_modules/@noble/hashes/esm/index.js +0 -33
  476. package/node_modules/@noble/hashes/esm/index.js.map +0 -1
  477. package/node_modules/@noble/hashes/esm/legacy.d.ts +0 -71
  478. package/node_modules/@noble/hashes/esm/legacy.d.ts.map +0 -1
  479. package/node_modules/@noble/hashes/esm/legacy.js +0 -281
  480. package/node_modules/@noble/hashes/esm/legacy.js.map +0 -1
  481. package/node_modules/@noble/hashes/esm/package.json +0 -10
  482. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts +0 -23
  483. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts.map +0 -1
  484. package/node_modules/@noble/hashes/esm/pbkdf2.js +0 -97
  485. package/node_modules/@noble/hashes/esm/pbkdf2.js.map +0 -1
  486. package/node_modules/@noble/hashes/esm/ripemd160.d.ts +0 -13
  487. package/node_modules/@noble/hashes/esm/ripemd160.d.ts.map +0 -1
  488. package/node_modules/@noble/hashes/esm/ripemd160.js +0 -13
  489. package/node_modules/@noble/hashes/esm/ripemd160.js.map +0 -1
  490. package/node_modules/@noble/hashes/esm/scrypt.d.ts +0 -34
  491. package/node_modules/@noble/hashes/esm/scrypt.d.ts.map +0 -1
  492. package/node_modules/@noble/hashes/esm/scrypt.js +0 -228
  493. package/node_modules/@noble/hashes/esm/scrypt.js.map +0 -1
  494. package/node_modules/@noble/hashes/esm/sha1.d.ts +0 -11
  495. package/node_modules/@noble/hashes/esm/sha1.d.ts.map +0 -1
  496. package/node_modules/@noble/hashes/esm/sha1.js +0 -11
  497. package/node_modules/@noble/hashes/esm/sha1.js.map +0 -1
  498. package/node_modules/@noble/hashes/esm/sha2.d.ts +0 -159
  499. package/node_modules/@noble/hashes/esm/sha2.d.ts.map +0 -1
  500. package/node_modules/@noble/hashes/esm/sha2.js +0 -375
  501. package/node_modules/@noble/hashes/esm/sha2.js.map +0 -1
  502. package/node_modules/@noble/hashes/esm/sha256.d.ts +0 -20
  503. package/node_modules/@noble/hashes/esm/sha256.d.ts.map +0 -1
  504. package/node_modules/@noble/hashes/esm/sha256.js +0 -20
  505. package/node_modules/@noble/hashes/esm/sha256.js.map +0 -1
  506. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts +0 -142
  507. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts.map +0 -1
  508. package/node_modules/@noble/hashes/esm/sha3-addons.js +0 -393
  509. package/node_modules/@noble/hashes/esm/sha3-addons.js.map +0 -1
  510. package/node_modules/@noble/hashes/esm/sha3.d.ts +0 -53
  511. package/node_modules/@noble/hashes/esm/sha3.d.ts.map +0 -1
  512. package/node_modules/@noble/hashes/esm/sha3.js +0 -234
  513. package/node_modules/@noble/hashes/esm/sha3.js.map +0 -1
  514. package/node_modules/@noble/hashes/esm/sha512.d.ts +0 -26
  515. package/node_modules/@noble/hashes/esm/sha512.d.ts.map +0 -1
  516. package/node_modules/@noble/hashes/esm/sha512.js +0 -26
  517. package/node_modules/@noble/hashes/esm/sha512.js.map +0 -1
  518. package/node_modules/@noble/hashes/esm/utils.d.ts +0 -161
  519. package/node_modules/@noble/hashes/esm/utils.d.ts.map +0 -1
  520. package/node_modules/@noble/hashes/esm/utils.js +0 -281
  521. package/node_modules/@noble/hashes/esm/utils.js.map +0 -1
  522. package/node_modules/@noble/hashes/hkdf.d.ts +0 -36
  523. package/node_modules/@noble/hashes/hkdf.d.ts.map +0 -1
  524. package/node_modules/@noble/hashes/hkdf.js +0 -88
  525. package/node_modules/@noble/hashes/hkdf.js.map +0 -1
  526. package/node_modules/@noble/hashes/hmac.d.ts +0 -35
  527. package/node_modules/@noble/hashes/hmac.d.ts.map +0 -1
  528. package/node_modules/@noble/hashes/hmac.js +0 -91
  529. package/node_modules/@noble/hashes/hmac.js.map +0 -1
  530. package/node_modules/@noble/hashes/index.d.ts +0 -1
  531. package/node_modules/@noble/hashes/index.d.ts.map +0 -1
  532. package/node_modules/@noble/hashes/index.js +0 -33
  533. package/node_modules/@noble/hashes/index.js.map +0 -1
  534. package/node_modules/@noble/hashes/legacy.d.ts +0 -71
  535. package/node_modules/@noble/hashes/legacy.d.ts.map +0 -1
  536. package/node_modules/@noble/hashes/legacy.js +0 -287
  537. package/node_modules/@noble/hashes/legacy.js.map +0 -1
  538. package/node_modules/@noble/hashes/package.json +0 -266
  539. package/node_modules/@noble/hashes/pbkdf2.d.ts +0 -23
  540. package/node_modules/@noble/hashes/pbkdf2.d.ts.map +0 -1
  541. package/node_modules/@noble/hashes/pbkdf2.js +0 -101
  542. package/node_modules/@noble/hashes/pbkdf2.js.map +0 -1
  543. package/node_modules/@noble/hashes/ripemd160.d.ts +0 -13
  544. package/node_modules/@noble/hashes/ripemd160.d.ts.map +0 -1
  545. package/node_modules/@noble/hashes/ripemd160.js +0 -16
  546. package/node_modules/@noble/hashes/ripemd160.js.map +0 -1
  547. package/node_modules/@noble/hashes/scrypt.d.ts +0 -34
  548. package/node_modules/@noble/hashes/scrypt.d.ts.map +0 -1
  549. package/node_modules/@noble/hashes/scrypt.js +0 -232
  550. package/node_modules/@noble/hashes/scrypt.js.map +0 -1
  551. package/node_modules/@noble/hashes/sha1.d.ts +0 -11
  552. package/node_modules/@noble/hashes/sha1.d.ts.map +0 -1
  553. package/node_modules/@noble/hashes/sha1.js +0 -14
  554. package/node_modules/@noble/hashes/sha1.js.map +0 -1
  555. package/node_modules/@noble/hashes/sha2.d.ts +0 -159
  556. package/node_modules/@noble/hashes/sha2.d.ts.map +0 -1
  557. package/node_modules/@noble/hashes/sha2.js +0 -384
  558. package/node_modules/@noble/hashes/sha2.js.map +0 -1
  559. package/node_modules/@noble/hashes/sha256.d.ts +0 -20
  560. package/node_modules/@noble/hashes/sha256.d.ts.map +0 -1
  561. package/node_modules/@noble/hashes/sha256.js +0 -23
  562. package/node_modules/@noble/hashes/sha256.js.map +0 -1
  563. package/node_modules/@noble/hashes/sha3-addons.d.ts +0 -142
  564. package/node_modules/@noble/hashes/sha3-addons.d.ts.map +0 -1
  565. package/node_modules/@noble/hashes/sha3-addons.js +0 -402
  566. package/node_modules/@noble/hashes/sha3-addons.js.map +0 -1
  567. package/node_modules/@noble/hashes/sha3.d.ts +0 -53
  568. package/node_modules/@noble/hashes/sha3.d.ts.map +0 -1
  569. package/node_modules/@noble/hashes/sha3.js +0 -239
  570. package/node_modules/@noble/hashes/sha3.js.map +0 -1
  571. package/node_modules/@noble/hashes/sha512.d.ts +0 -26
  572. package/node_modules/@noble/hashes/sha512.d.ts.map +0 -1
  573. package/node_modules/@noble/hashes/sha512.js +0 -29
  574. package/node_modules/@noble/hashes/sha512.js.map +0 -1
  575. package/node_modules/@noble/hashes/src/_assert.ts +0 -22
  576. package/node_modules/@noble/hashes/src/_blake.ts +0 -50
  577. package/node_modules/@noble/hashes/src/_md.ts +0 -176
  578. package/node_modules/@noble/hashes/src/_u64.ts +0 -91
  579. package/node_modules/@noble/hashes/src/argon2.ts +0 -497
  580. package/node_modules/@noble/hashes/src/blake1.ts +0 -534
  581. package/node_modules/@noble/hashes/src/blake2.ts +0 -486
  582. package/node_modules/@noble/hashes/src/blake2b.ts +0 -10
  583. package/node_modules/@noble/hashes/src/blake2s.ts +0 -20
  584. package/node_modules/@noble/hashes/src/blake3.ts +0 -272
  585. package/node_modules/@noble/hashes/src/crypto.ts +0 -9
  586. package/node_modules/@noble/hashes/src/cryptoNode.ts +0 -15
  587. package/node_modules/@noble/hashes/src/eskdf.ts +0 -187
  588. package/node_modules/@noble/hashes/src/hkdf.ts +0 -88
  589. package/node_modules/@noble/hashes/src/hmac.ts +0 -94
  590. package/node_modules/@noble/hashes/src/index.ts +0 -31
  591. package/node_modules/@noble/hashes/src/legacy.ts +0 -293
  592. package/node_modules/@noble/hashes/src/pbkdf2.ts +0 -122
  593. package/node_modules/@noble/hashes/src/ripemd160.ts +0 -12
  594. package/node_modules/@noble/hashes/src/scrypt.ts +0 -257
  595. package/node_modules/@noble/hashes/src/sha1.ts +0 -10
  596. package/node_modules/@noble/hashes/src/sha2.ts +0 -402
  597. package/node_modules/@noble/hashes/src/sha256.ts +0 -24
  598. package/node_modules/@noble/hashes/src/sha3-addons.ts +0 -499
  599. package/node_modules/@noble/hashes/src/sha3.ts +0 -258
  600. package/node_modules/@noble/hashes/src/sha512.ts +0 -34
  601. package/node_modules/@noble/hashes/src/utils.ts +0 -395
  602. package/node_modules/@noble/hashes/utils.d.ts +0 -161
  603. package/node_modules/@noble/hashes/utils.d.ts.map +0 -1
  604. package/node_modules/@noble/hashes/utils.js +0 -313
  605. package/node_modules/@noble/hashes/utils.js.map +0 -1
@@ -1,77 +1,16 @@
1
- // ../mmt-alta-parse/dist/index.js
1
+ // ../mmt-base/dist/mmtp.js
2
2
  var MMTP_HEADER_SIZE = 12;
3
3
  var MPU_HEADER_SIZE = 8;
4
- var MPU_LENGTH_FIELD_SIZE = 2;
5
- var MPU_HEADER_REMAINDER_SIZE = MPU_HEADER_SIZE - MPU_LENGTH_FIELD_SIZE;
6
- var TIMED_MFU_DU_HEADER_SIZE = 14;
7
- var NONTIMED_MFU_DU_HEADER_SIZE = 4;
8
- var PACKET_TYPE_MPU = 0;
9
- var MMTP_EXT_TYPE_ALTA_AUTH = 61601;
10
- var MMTP_EXT_TRAILER_HEADER_SIZE = 4;
11
- function extractAltaTrailer(mmtpPacket, options) {
12
- if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE)
13
- return null;
14
- const packetType = mmtpPacket[1] & 63;
15
- if (packetType !== PACKET_TYPE_MPU)
16
- return null;
17
- const fecType = mmtpPacket[0] >> 3 & 3;
18
- let headerLength = MMTP_HEADER_SIZE;
19
- if (fecType < 2 && (mmtpPacket[0] & 32) !== 0)
20
- headerLength += 4;
21
- if (fecType < 2 && (mmtpPacket[0] & 2) !== 0) {
22
- if (headerLength + 4 > mmtpPacket.length)
23
- return null;
24
- const extensionLength = new DataView(mmtpPacket.buffer, mmtpPacket.byteOffset + headerLength + 2, 2).getUint16(0, false);
25
- headerLength += 4 + extensionLength;
26
- }
27
- if (headerLength + MPU_HEADER_SIZE > mmtpPacket.length)
28
- return null;
29
- const payload = mmtpPacket.subarray(headerLength);
30
- const payloadLength = payload[0] << 8 | payload[1];
31
- const flagsByte = payload[2];
32
- const fragmentType = flagsByte >> 4 & 15;
33
- const timed = (flagsByte >> 3 & 1) === 1;
34
- const fragmentationIndicator = flagsByte >> 1 & 3;
35
- if (fragmentType !== 2)
36
- return null;
37
- const dataUnitHeaderSize = fragmentationIndicator <= 1 ? timed ? TIMED_MFU_DU_HEADER_SIZE : NONTIMED_MFU_DU_HEADER_SIZE : 0;
38
- if (payloadLength <= MPU_HEADER_REMAINDER_SIZE + dataUnitHeaderSize)
39
- return null;
40
- if (fecType > 1)
41
- return null;
42
- const hasFecId = !options?.skipFecId && fecType === 1;
43
- const payloadEnd = hasFecId ? payload.length - 4 : payload.length;
44
- const declaredEnd = MPU_LENGTH_FIELD_SIZE + payloadLength;
45
- if (declaredEnd > payloadEnd)
46
- return null;
47
- if (declaredEnd + MMTP_EXT_TRAILER_HEADER_SIZE > payloadEnd)
48
- return null;
49
- const extType = payload[declaredEnd] << 8 | payload[declaredEnd + 1];
50
- if (extType !== MMTP_EXT_TYPE_ALTA_AUTH)
51
- return null;
52
- const extLen = payload[declaredEnd + 2] << 8 | payload[declaredEnd + 3];
53
- const authStart = declaredEnd + MMTP_EXT_TRAILER_HEADER_SIZE;
54
- if (authStart + extLen !== payloadEnd)
55
- return null;
56
- return {
57
- auth: payload.subarray(authStart, payloadEnd),
58
- signedEnd: headerLength + declaredEnd
59
- };
60
- }
61
-
62
- // ../mmt-base/dist/mmtp.js
63
- var MMTP_HEADER_SIZE2 = 12;
64
- var MPU_HEADER_SIZE2 = 8;
65
4
  var MFU_DU_HEADER_SIZE_TIMED = 14;
66
5
  var MFU_DU_HEADER_SIZE_NONTIMED = 4;
67
- var MPU_LENGTH_FIELD_SIZE2 = 2;
68
- var MPU_HEADER_REMAINDER_SIZE2 = MPU_HEADER_SIZE2 - MPU_LENGTH_FIELD_SIZE2;
6
+ var MPU_LENGTH_FIELD_SIZE = 2;
7
+ var MPU_HEADER_REMAINDER_SIZE = MPU_HEADER_SIZE - MPU_LENGTH_FIELD_SIZE;
69
8
  var SOURCE_FEC_PAYLOAD_ID_SIZE = 4;
70
- var PACKET_TYPE_MPU2 = 0;
9
+ var PACKET_TYPE_MPU = 0;
71
10
  var PACKET_TYPE_REPAIR = 3;
72
11
  var MMTP_SIGNALING_PACKET_ID = 0;
73
12
  function parseMMTPHeader(buffer) {
74
- if (buffer.length < MMTP_HEADER_SIZE2) {
13
+ if (buffer.length < MMTP_HEADER_SIZE) {
75
14
  throw new Error(`MMTP packet too small: ${buffer.length} bytes`);
76
15
  }
77
16
  const view2 = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
@@ -127,7 +66,7 @@ function parseMMTPHeader(buffer) {
127
66
  };
128
67
  }
129
68
  function parseMPUHeader(payload) {
130
- if (payload.length < MPU_HEADER_SIZE2) {
69
+ if (payload.length < MPU_HEADER_SIZE) {
131
70
  throw new Error(`Payload too small for MPU header: ${payload.length} bytes`);
132
71
  }
133
72
  const view2 = new DataView(payload.buffer, payload.byteOffset, payload.byteLength);
@@ -160,15 +99,15 @@ function parseTimedMfuDuHeader(payload, offset) {
160
99
  };
161
100
  }
162
101
  function resolveMfuPayloadLayout(mpu, fragmentType, payload) {
163
- if (mpu.payloadLength < MPU_HEADER_REMAINDER_SIZE2) {
102
+ if (mpu.payloadLength < MPU_HEADER_REMAINDER_SIZE) {
164
103
  return {
165
104
  rejection: {
166
105
  gate: "mpu-payload-length-below-header-remainder",
167
- detail: `payload_length=${mpu.payloadLength} < ${MPU_HEADER_REMAINDER_SIZE2}`
106
+ detail: `payload_length=${mpu.payloadLength} < ${MPU_HEADER_REMAINDER_SIZE}`
168
107
  }
169
108
  };
170
109
  }
171
- const declaredEnd = MPU_LENGTH_FIELD_SIZE2 + mpu.payloadLength;
110
+ const declaredEnd = MPU_LENGTH_FIELD_SIZE + mpu.payloadLength;
172
111
  if (declaredEnd > payload.length) {
173
112
  return {
174
113
  rejection: {
@@ -179,7 +118,7 @@ function resolveMfuPayloadLayout(mpu, fragmentType, payload) {
179
118
  }
180
119
  const hasHeader = fragmentType === 2 && mpu.fragmentationIndicator <= 1;
181
120
  const mfuHeaderSize = mpu.timedFlag ? MFU_DU_HEADER_SIZE_TIMED : MFU_DU_HEADER_SIZE_NONTIMED;
182
- const mfuOffset = MPU_HEADER_SIZE2 + (hasHeader ? mfuHeaderSize : 0);
121
+ const mfuOffset = MPU_HEADER_SIZE + (hasHeader ? mfuHeaderSize : 0);
183
122
  if (mfuOffset >= declaredEnd) {
184
123
  return {
185
124
  rejection: {
@@ -196,44 +135,46 @@ function resolveMfuPayloadLayout(mpu, fragmentType, payload) {
196
135
  }
197
136
  };
198
137
  }
199
- function isEmptyOrExactAltaTrailer(payload, start, end) {
138
+ var LEGACY_TRAILER_EXT_TYPE = 61601;
139
+ var LEGACY_TRAILER_HEADER_SIZE = 4;
140
+ function isEmptyOrExactLegacyTrailer(payload, start, end) {
200
141
  if (start === end)
201
142
  return true;
202
- if (start < 0 || end > payload.length || start + MMTP_EXT_TRAILER_HEADER_SIZE > end) {
143
+ if (start < 0 || end > payload.length || start + LEGACY_TRAILER_HEADER_SIZE > end) {
203
144
  return false;
204
145
  }
205
146
  const view2 = new DataView(payload.buffer, payload.byteOffset + start, end - start);
206
- if (view2.getUint16(0, false) !== MMTP_EXT_TYPE_ALTA_AUTH)
147
+ if (view2.getUint16(0, false) !== LEGACY_TRAILER_EXT_TYPE)
207
148
  return false;
208
149
  const authLength = view2.getUint16(2, false);
209
- return start + MMTP_EXT_TRAILER_HEADER_SIZE + authLength === end;
150
+ return start + LEGACY_TRAILER_HEADER_SIZE + authLength === end;
210
151
  }
211
152
  function resolveDeclaredTrailers(payload, declaredEnd, fecType, options) {
212
153
  if (declaredEnd > payload.length)
213
154
  return null;
214
155
  if (options?.skipFecId) {
215
- return isEmptyOrExactAltaTrailer(payload, declaredEnd, payload.length) ? { hasFecId: false } : null;
156
+ return isEmptyOrExactLegacyTrailer(payload, declaredEnd, payload.length) ? { hasFecId: false } : null;
216
157
  }
217
158
  if (fecType === 1) {
218
159
  const fecStart = payload.length - SOURCE_FEC_PAYLOAD_ID_SIZE;
219
- if (fecStart < declaredEnd || !isEmptyOrExactAltaTrailer(payload, declaredEnd, fecStart)) {
160
+ if (fecStart < declaredEnd || !isEmptyOrExactLegacyTrailer(payload, declaredEnd, fecStart)) {
220
161
  return null;
221
162
  }
222
163
  return { hasFecId: true };
223
164
  }
224
165
  if (fecType !== 0)
225
166
  return null;
226
- if (isEmptyOrExactAltaTrailer(payload, declaredEnd, payload.length)) {
167
+ if (isEmptyOrExactLegacyTrailer(payload, declaredEnd, payload.length)) {
227
168
  return { hasFecId: false };
228
169
  }
229
170
  return null;
230
171
  }
231
172
  function planMfuExtraction(mmtpPacket, options, parsedHeader) {
232
- if (mmtpPacket.length < MMTP_HEADER_SIZE2 + MPU_HEADER_SIZE2) {
173
+ if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE) {
233
174
  return {
234
175
  rejection: {
235
176
  gate: "packet-shorter-than-mmtp-plus-mpu-header",
236
- detail: `${mmtpPacket.length} bytes < ${MMTP_HEADER_SIZE2 + MPU_HEADER_SIZE2}`
177
+ detail: `${mmtpPacket.length} bytes < ${MMTP_HEADER_SIZE + MPU_HEADER_SIZE}`
237
178
  }
238
179
  };
239
180
  }
@@ -252,7 +193,7 @@ function planMfuExtraction(mmtpPacket, options, parsedHeader) {
252
193
  };
253
194
  }
254
195
  }
255
- if (header.packetType !== PACKET_TYPE_MPU2) {
196
+ if (header.packetType !== PACKET_TYPE_MPU) {
256
197
  return {
257
198
  rejection: {
258
199
  gate: "not-an-mpu-packet",
@@ -261,11 +202,11 @@ function planMfuExtraction(mmtpPacket, options, parsedHeader) {
261
202
  };
262
203
  }
263
204
  const payload = mmtpPacket.subarray(header.headerLength);
264
- if (payload.length < MPU_HEADER_SIZE2) {
205
+ if (payload.length < MPU_HEADER_SIZE) {
265
206
  return {
266
207
  rejection: {
267
208
  gate: "payload-shorter-than-mpu-header",
268
- detail: `${payload.length} bytes < ${MPU_HEADER_SIZE2}`
209
+ detail: `${payload.length} bytes < ${MPU_HEADER_SIZE}`
269
210
  }
270
211
  };
271
212
  }
@@ -296,7 +237,7 @@ function planMfuExtraction(mmtpPacket, options, parsedHeader) {
296
237
  return {
297
238
  rejection: {
298
239
  gate: "declared-trailers-unresolved",
299
- detail: `trailer bytes [${layout.dataEnd}, ${payload.length}) are neither empty nor an exact ALTA trailer (fecType=${header.fecType})`
240
+ detail: `trailer bytes [${layout.dataEnd}, ${payload.length}) are neither empty nor an exact legacy authenticator trailer (fecType=${header.fecType})`
300
241
  }
301
242
  };
302
243
  }
@@ -312,8 +253,8 @@ function extractPlannedMfu(mmtpPacket, result) {
312
253
  const mfuDuHeaderPresent = layout.hasMfuDuHeader;
313
254
  const mfuOffset = layout.mfuOffset;
314
255
  const dataEnd = layout.dataEnd;
315
- const mfuDuHeader = mfuDuHeaderPresent && mpu.timedFlag === 1 ? parseTimedMfuDuHeader(payload, MPU_HEADER_SIZE2) : null;
316
- const itemId = mfuDuHeaderPresent && mpu.timedFlag === 0 ? new DataView(payload.buffer, payload.byteOffset + MPU_HEADER_SIZE2, 4).getUint32(0, false) : null;
256
+ const mfuDuHeader = mfuDuHeaderPresent && mpu.timedFlag === 1 ? parseTimedMfuDuHeader(payload, MPU_HEADER_SIZE) : null;
257
+ const itemId = mfuDuHeaderPresent && mpu.timedFlag === 0 ? new DataView(payload.buffer, payload.byteOffset + MPU_HEADER_SIZE, 4).getUint32(0, false) : null;
317
258
  const data = payload.subarray(mfuOffset, dataEnd);
318
259
  const fecPayloadId = trailerLayout.hasFecId ? {
319
260
  ssId: new DataView(mmtpPacket.buffer, mmtpPacket.byteOffset + mmtpPacket.length - SOURCE_FEC_PAYLOAD_ID_SIZE, SOURCE_FEC_PAYLOAD_ID_SIZE).getUint32(0, false)
@@ -321,17 +262,17 @@ function extractPlannedMfu(mmtpPacket, result) {
321
262
  return { header, mpu, fragmentType, data, mfuDuHeader, itemId, fecPayloadId };
322
263
  }
323
264
  function sourceFecPayloadIdOf(mmtpPacket, header) {
324
- if (mmtpPacket.length < MMTP_HEADER_SIZE2 + MPU_HEADER_SIZE2)
265
+ if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE)
325
266
  return null;
326
- if (header.packetType !== PACKET_TYPE_MPU2)
267
+ if (header.packetType !== PACKET_TYPE_MPU)
327
268
  return null;
328
269
  const payload = mmtpPacket.subarray(header.headerLength);
329
- if (payload.length < MPU_HEADER_SIZE2)
270
+ if (payload.length < MPU_HEADER_SIZE)
330
271
  return null;
331
272
  const payloadLength = payload[0] << 8 | payload[1];
332
- if (payloadLength < MPU_HEADER_REMAINDER_SIZE2)
273
+ if (payloadLength < MPU_HEADER_REMAINDER_SIZE)
333
274
  return null;
334
- const declaredEnd = MPU_LENGTH_FIELD_SIZE2 + payloadLength;
275
+ const declaredEnd = MPU_LENGTH_FIELD_SIZE + payloadLength;
335
276
  if (!resolveDeclaredTrailers(payload, declaredEnd, header.fecType)?.hasFecId)
336
277
  return null;
337
278
  const off = mmtpPacket.length - SOURCE_FEC_PAYLOAD_ID_SIZE;
@@ -339,7 +280,6 @@ function sourceFecPayloadIdOf(mmtpPacket, header) {
339
280
  ssId: (mmtpPacket[off] << 24 | mmtpPacket[off + 1] << 16 | mmtpPacket[off + 2] << 8 | mmtpPacket[off + 3]) >>> 0
340
281
  };
341
282
  }
342
- var extractAltaTrailer2 = extractAltaTrailer;
343
283
  var REPAIR_FEC_PID_SIZE = 13;
344
284
  function readRepairFecPayloadIdFields(mmtpPacket, parsedHeader) {
345
285
  let header;
@@ -419,7 +359,6 @@ function serial32Precedes(a, b) {
419
359
 
420
360
  // ../mmt-base/dist/fec-block-profile.js
421
361
  var FEC_BLOCK_PROFILES = Object.freeze([
422
- "k-padded-v1",
423
362
  "iso-ssbg1-v1"
424
363
  ]);
425
364
 
@@ -4526,7 +4465,6 @@ var CmafBlockAssembler = class {
4526
4465
  failedBlocks: 0
4527
4466
  };
4528
4467
  this.#config = {
4529
- k: config.k,
4530
4468
  timescale: config.timescale ?? 1e6,
4531
4469
  trackId: config.trackId ?? 1,
4532
4470
  trackType: config.trackType,
@@ -6627,6 +6565,42 @@ var FecReleaseSequencer = class {
6627
6565
  for (const stream of this.#streams.values()) total += stream.buf.length;
6628
6566
  return total;
6629
6567
  }
6568
+ #deferDepth = 0;
6569
+ #deferredStreams = /* @__PURE__ */ new Set();
6570
+ /**
6571
+ * Run `work` with the drains its pushes would run deferred to its end. A
6572
+ * recovered FEC block is routed one frame at a time, and its block is
6573
+ * already resolved when the first frame is pushed: draining on that push
6574
+ * would release past the gap before the block's other recovered frames
6575
+ * arrive (deciding a conceal or stall for media that is about to land),
6576
+ * and those frames would then be dropped as stale. Nests.
6577
+ */
6578
+ defer(work) {
6579
+ this.#deferDepth++;
6580
+ let threw = true;
6581
+ try {
6582
+ work();
6583
+ threw = false;
6584
+ } finally {
6585
+ this.#deferDepth--;
6586
+ if (this.#deferDepth === 0 && this.#deferredStreams.size > 0) {
6587
+ const streams = [...this.#deferredStreams];
6588
+ this.#deferredStreams.clear();
6589
+ if (!threw) {
6590
+ for (const stream of streams) this.#drain(stream);
6591
+ } else {
6592
+ try {
6593
+ for (const stream of streams) this.#drain(stream);
6594
+ } catch {
6595
+ }
6596
+ }
6597
+ }
6598
+ }
6599
+ }
6600
+ #drainUnlessDeferred(stream) {
6601
+ if (this.#deferDepth > 0) this.#deferredStreams.add(stream);
6602
+ else this.#drain(stream);
6603
+ }
6630
6604
  push(streamKey, data, meta, seq) {
6631
6605
  const frame = { data, meta: { ...meta }, seq, arrivedAtMs: performance.now() };
6632
6606
  const stream = this.#streamFor(streamKey, meta);
@@ -6648,7 +6622,7 @@ var FecReleaseSequencer = class {
6648
6622
  return;
6649
6623
  }
6650
6624
  this.#release(stream, frame, void 0);
6651
- this.#drain(stream);
6625
+ this.#drainUnlessDeferred(stream);
6652
6626
  return;
6653
6627
  }
6654
6628
  let lo = 0;
@@ -6659,7 +6633,23 @@ var FecReleaseSequencer = class {
6659
6633
  else hi = mid;
6660
6634
  }
6661
6635
  stream.buf.splice(lo, 0, frame);
6662
- this.#drain(stream);
6636
+ this.#drainUnlessDeferred(stream);
6637
+ }
6638
+ /**
6639
+ * Arrival time of the earliest frame a stream of `packetId` holds behind a
6640
+ * gap (the gate forces it out `holdLimitMs` after that), or undefined when
6641
+ * none is held. Without `catalogTrackName`, every stream of the packetId.
6642
+ */
6643
+ earliestHeldArrivalMs(packetId, catalogTrackName) {
6644
+ let earliest;
6645
+ for (const stream of this.#streams.values()) {
6646
+ if (stream.packetId !== packetId) continue;
6647
+ if (catalogTrackName !== void 0 && stream.catalogTrackName !== catalogTrackName) continue;
6648
+ for (const frame of stream.buf) {
6649
+ if (earliest === void 0 || frame.arrivedAtMs < earliest) earliest = frame.arrivedAtMs;
6650
+ }
6651
+ }
6652
+ return earliest;
6663
6653
  }
6664
6654
  /** Re-evaluate held gaps after FEC state changed. */
6665
6655
  poke(streamKey) {
@@ -6712,6 +6702,21 @@ var FecReleaseSequencer = class {
6712
6702
  this.#streams.delete(key);
6713
6703
  }
6714
6704
  }
6705
+ /**
6706
+ * The packet's FEC ended, so no block will resolve a held gap: release its
6707
+ * frames in order, each gap stalled as a discontinuity, and forget its
6708
+ * streams, so FEC configured on it again starts from a fresh one.
6709
+ */
6710
+ endPacket(packetId) {
6711
+ for (const [key, stream] of this.#streams) {
6712
+ if (stream.packetId !== packetId) continue;
6713
+ while (stream.buf.length > 0 && stream.last !== null) {
6714
+ stream.discontinuity = true;
6715
+ this.#drain(stream);
6716
+ }
6717
+ this.#streams.delete(key);
6718
+ }
6719
+ }
6715
6720
  discardPacket(packetId) {
6716
6721
  for (const [key, stream] of this.#streams) {
6717
6722
  if (stream.packetId !== packetId) continue;
@@ -7080,6 +7085,22 @@ var MmtpContainerParser = class _MmtpContainerParser {
7080
7085
  }
7081
7086
  ) : null;
7082
7087
  }
7088
+ /**
7089
+ * Run `work` with the FEC release gate's drains deferred to its end, so
7090
+ * every frame it pushes is in place before any held gap is decided (see
7091
+ * FecReleaseSequencer.defer).
7092
+ */
7093
+ deferFecRelease(work) {
7094
+ if (!this.#fecSequencer) {
7095
+ work();
7096
+ return;
7097
+ }
7098
+ this.#fecSequencer.defer(work);
7099
+ }
7100
+ /** See FecReleaseSequencer.earliestHeldArrivalMs. */
7101
+ fecReleaseEarliestHeldAtMs(packetId, catalogTrackName) {
7102
+ return this.#fecSequencer?.earliestHeldArrivalMs(packetId, catalogTrackName);
7103
+ }
7083
7104
  /** Re-evaluate held gaps after FEC block state changed. */
7084
7105
  pokeFecRelease(packetId, catalogTrackName) {
7085
7106
  if (!this.#fecSequencer) return;
@@ -7094,6 +7115,13 @@ var MmtpContainerParser = class _MmtpContainerParser {
7094
7115
  markFecDiscontinuity(packetId, catalogTrackName) {
7095
7116
  this.#fecSequencer?.markDiscontinuity(this.#streamKey(packetId, catalogTrackName));
7096
7117
  }
7118
+ /**
7119
+ * The FEC of a packet ID ended: release the frames the FEC release gate
7120
+ * holds for it in order, each gap stalled, and forget its gated streams.
7121
+ */
7122
+ endFecRelease(packetId) {
7123
+ this.#fecSequencer?.endPacket(packetId);
7124
+ }
7097
7125
  /**
7098
7126
  * MPU and data-unit identity of one MMTP packet, parsed in place (no copy,
7099
7127
  * no reassembly). Null for non-MPU packets and packets that do not parse.
@@ -7274,7 +7302,7 @@ var MmtpContainerParser = class _MmtpContainerParser {
7274
7302
  const parsed = preParsed !== void 0 && preParsed.skipFecPayloadId === (options?.skipFecPayloadId === true) ? preParsed : this.parsePacket(packet, options);
7275
7303
  if (!parsed) return this.#drop("header-parse-failed");
7276
7304
  const info = parsed.info;
7277
- if (info.packetType !== PACKET_TYPE_MPU2) {
7305
+ if (info.packetType !== PACKET_TYPE_MPU) {
7278
7306
  return {
7279
7307
  kind: info.isRepair ? "repair" : "non-media",
7280
7308
  packet: info,
@@ -7283,10 +7311,8 @@ var MmtpContainerParser = class _MmtpContainerParser {
7283
7311
  }
7284
7312
  if (info.fecPayloadId !== null && this.#sourceSymbolCb) {
7285
7313
  const rawSymbol = packet.subarray(0, packet.length - 4);
7286
- const altaTrailer = extractAltaTrailer2(packet);
7287
- const alta = altaTrailer ? { auth: altaTrailer.auth, payloadEnd: altaTrailer.signedEnd } : void 0;
7288
7314
  try {
7289
- this.#sourceSymbolCb(info.packetId, info.fecPayloadId.ssId, rawSymbol, alta);
7315
+ this.#sourceSymbolCb(info.packetId, info.fecPayloadId.ssId, rawSymbol);
7290
7316
  } catch {
7291
7317
  }
7292
7318
  }
@@ -8474,6 +8500,8 @@ var MmtpRouter = class {
8474
8500
  // ── Keyframe loss detection state ───────────────────────────────
8475
8501
  /** Catalog-derived keyframe loss timeout (ms), or a reader evaluated at each arm. null = not configured (warns on video track registration; Phase-13 keyframe repair stays off). */
8476
8502
  #keyframeLostTimeoutMs;
8503
+ /** packetIds already warned for running without Phase 13 (non-FEC video only). */
8504
+ #warnedNoKeyframeLostTimeout = /* @__PURE__ */ new Set();
8477
8505
  /** Why the last reader evaluation left the timer unarmed; null while arming. Dedups the warning. */
8478
8506
  #keyframeLostUnarmedReason = null;
8479
8507
  /** Active keyframe loss timer handle. Single timer per video track — cleared on each rapFlag and on dispose(). */
@@ -8489,6 +8517,8 @@ var MmtpRouter = class {
8489
8517
  */
8490
8518
  #onPublisherRestart;
8491
8519
  #publisherRestarts = 0;
8520
+ /** Inits delivered with no onTrackInit handler for their packetId (MOQT-01). */
8521
+ #unmappedInitDeliveries = 0;
8492
8522
  // FEC Payload IDs left unread because their (owner) packetId had no
8493
8523
  // configured fec.blockProfile (see #noteUnreadableFecPayloadId).
8494
8524
  #fecPayloadIdsWithoutProfile = 0;
@@ -8685,15 +8715,24 @@ var MmtpRouter = class {
8685
8715
  return NO_FEC_GEOMETRY_HORIZON;
8686
8716
  }
8687
8717
  const blockSpanMs = fec.interleaveDepthMsForPacket(packetId);
8718
+ const blockLifetimeMs = fec.blockLifetimeMsForPacket(packetId);
8719
+ if (blockSpanMs === void 0 || blockLifetimeMs === void 0) return NO_FEC_GEOMETRY_HORIZON;
8688
8720
  if (blockSpanMs === 0) return NO_BLOCK_SPAN_HORIZON;
8689
8721
  return {
8690
8722
  kind: "fec-horizon",
8691
- retentionMs: duplicateRetentionMs({
8692
- blockSpanMs,
8693
- blockLifetimeMs: fec.blockLifetimeMsForPacket(packetId)
8694
- })
8723
+ retentionMs: duplicateRetentionMs({ blockSpanMs, blockLifetimeMs })
8695
8724
  };
8696
8725
  }
8726
+ /**
8727
+ * Init segments delivered for a packetId with no `onTrackInit` handler
8728
+ * since construction, whether the deprecated aggregate `onInitSegment`
8729
+ * callback then received them or nothing did. A supported deployment reads
8730
+ * 0 here; a non-zero value is the evidence that blocks removing the
8731
+ * aggregate callback (MOQT-01, BLO-21181).
8732
+ */
8733
+ get unmappedInitDeliveryCount() {
8734
+ return this.#unmappedInitDeliveries;
8735
+ }
8697
8736
  /** Publisher restarts detected on the multicast leg since construction. */
8698
8737
  get publisherRestartCount() {
8699
8738
  return this.#publisherRestarts;
@@ -8781,7 +8820,7 @@ var MmtpRouter = class {
8781
8820
  /** Update MFU reassembly timeout. Source and FEC-recovery paths share the
8782
8821
  * parser's single reassembler (BLO-8151), so one update covers both. */
8783
8822
  setMfuTimeoutMs(ms) {
8784
- if (ms <= 0) throw new Error("[MmtpRouter] mfuTimeoutMs must be > 0");
8823
+ if (ms !== null && ms <= 0) throw new Error("[MmtpRouter] mfuTimeoutMs must be > 0");
8785
8824
  this.#parser.setMfuTimeoutMs(ms);
8786
8825
  }
8787
8826
  /** Update parser frame reordering for unordered multicast delivery.
@@ -8792,15 +8831,14 @@ var MmtpRouter = class {
8792
8831
  }
8793
8832
  /** Register MMTP packetId → track type mapping.
8794
8833
  * Call BEFORE packets arrive to ensure correct routing from the first packet.
8795
- * If keyframeLostTimeoutMs is not provided, Phase 13 keyframe repair is
8796
- * disabled (video still routes/decodes normally). framerate is OPTIONAL per
8797
- * draft-ietf-moq-catalogformat-01 §3.2.23, so we can't require the timeout. */
8834
+ * Without keyframeLostTimeoutMs a track WITHOUT FEC has no Phase 13
8835
+ * keyframe repair (video still routes/decodes normally); that is warned at
8836
+ * its first keyframe, once the FEC configuration is known (see
8837
+ * #noteEmittedKeyframe). Nothing is warned here: an FEC track never uses
8838
+ * the timer, and at registration the FEC configuration may not be applied
8839
+ * yet. framerate is OPTIONAL per draft-ietf-moq-catalogformat-01 §3.2.23,
8840
+ * so we can't require the timeout. */
8798
8841
  setPacketIdType(packetId, trackType) {
8799
- if (trackType === "video" && this.#keyframeLostTimeoutMs === null) {
8800
- console.warn(
8801
- "[MmtpRouter] keyframeLostTimeoutMs not configured \u2014 Phase 13 keyframe repair disabled for this track. Set it via setKeyframeLostTimeoutMs() or provide in constructor config to enable: Math.ceil(groupDurationMs * KEYFRAME_LOST_TIMEOUT_SLACK)."
8802
- );
8803
- }
8804
8842
  if (trackType === "video") this.#videoPacketIds.add(packetId);
8805
8843
  else this.#audioPacketIds.add(packetId);
8806
8844
  const codec = this.#trackCodecs.get(packetId) ?? "";
@@ -8851,7 +8889,15 @@ var MmtpRouter = class {
8851
8889
  onTrackPacket(packetId, cb) {
8852
8890
  this.#trackPacketCallbacks.set(packetId, cb);
8853
8891
  }
8854
- /** Register an init segment callback (ftyp+moov from MMTP MPU metadata). */
8892
+ /**
8893
+ * Register an init segment callback (ftyp+moov from MMTP MPU metadata).
8894
+ * Receives an init only for a packetId with no `onTrackInit` handler.
8895
+ *
8896
+ * @deprecated Use onTrackInit(packetId, cb). Still delivered as a fallback;
8897
+ * removed in the 1.0.0 major, no earlier than one minor release after this
8898
+ * deprecation reaches the `latest` dist-tag (BLO-21181). Count fallback
8899
+ * deliveries with `unmappedInitDeliveryCount`.
8900
+ */
8855
8901
  onInitSegment(cb) {
8856
8902
  this.#onInitSegment = cb;
8857
8903
  }
@@ -8865,17 +8911,16 @@ var MmtpRouter = class {
8865
8911
  * When active, source frames are buffered per FEC block and emitted as
8866
8912
  * multi-sample CMAF segments instead of per-frame callbacks. */
8867
8913
  enableMseAssembler(packetId, config, catalogTrackName) {
8868
- const k = this.#kForPacket(packetId);
8869
8914
  const assemblerKey = this.#mseAssemblerKey(packetId, catalogTrackName);
8870
8915
  const previous = this.#mseAssemblers.get(assemblerKey);
8871
8916
  if (previous) {
8872
8917
  previous.flush();
8873
8918
  previous.dispose();
8874
8919
  }
8875
- const assembler = new CmafBlockAssembler({ ...config, k });
8920
+ const assembler = new CmafBlockAssembler(config);
8876
8921
  this.#mseAssemblers.set(assemblerKey, assembler);
8877
8922
  console.log(
8878
- `[MmtpRouter] MSE assembler enabled for packetId=${packetId}${catalogTrackName === void 0 ? "" : ` track=${catalogTrackName}`} (K=${k}, ${config.trackType})`
8923
+ `[MmtpRouter] MSE assembler enabled for packetId=${packetId}${catalogTrackName === void 0 ? "" : ` track=${catalogTrackName}`} (${config.trackType})`
8879
8924
  );
8880
8925
  return assembler;
8881
8926
  }
@@ -8984,6 +9029,21 @@ var MmtpRouter = class {
8984
9029
  }
8985
9030
  this.#fecMappersByPacketId.set(packetId, mapper);
8986
9031
  }
9032
+ /**
9033
+ * Release the router side of a packetId whose FEC is ending: drop its block
9034
+ * mapper and end its FEC release gating. Frames the gate holds are released
9035
+ * in order, each gap stalled (no block will resolve it), not stranded. Call
9036
+ * before FECManager.releasePacket, while the gate can still read its blocks.
9037
+ */
9038
+ releaseFecPacket(packetId) {
9039
+ this.#fecMappersByPacketId.delete(packetId);
9040
+ this.#withDeferredFecPokes(() => {
9041
+ this.#parser.endFecRelease(packetId);
9042
+ for (const [key, poke] of this.#pendingFecPokes) {
9043
+ if (poke.packetId === packetId) this.#pendingFecPokes.delete(key);
9044
+ }
9045
+ });
9046
+ }
8987
9047
  registerManifestTrack(context) {
8988
9048
  if (!this.#manifestVerifier) throw new Error("manifest verifier is not configured");
8989
9049
  this.#manifestVerifier.registerTrack(context);
@@ -9103,87 +9163,21 @@ var MmtpRouter = class {
9103
9163
  this.#noteUnreadableFecPayloadId(ownerPacketId, "repair");
9104
9164
  return;
9105
9165
  }
9106
- if (this.#isIsoPacket(ownerPacketId)) {
9107
- this.#handleIsoRepair(ownerPacketId, catalogTrackName, parsed, "moq");
9108
- return;
9109
- }
9110
- const repairSbn = this.#deriveRepairSbn(parsed.ssStart, parsed.ssbLength, ownerPacketId);
9111
- if (repairSbn === null) return;
9112
- const repairEsi = this.#kForPacket(ownerPacketId) + parsed.rsId;
9113
- if (!this.#feedFecTransportSymbol(
9114
- ownerPacketId,
9115
- repairSbn,
9116
- repairEsi,
9117
- parsed.symbolData,
9118
- "moq",
9119
- catalogTrackName
9120
- )) return;
9121
- const recovered = catalogTrackName === void 0 ? this.#fecManager.feedRepairSymbol(
9122
- ownerPacketId,
9123
- parsed.ssStart,
9124
- parsed.ssbLength,
9125
- parsed.rsId,
9126
- parsed.symbolData
9127
- ) : this.#fecManager.feedRepairSymbol(
9128
- ownerPacketId,
9129
- parsed.ssStart,
9130
- parsed.ssbLength,
9131
- parsed.rsId,
9132
- parsed.symbolData,
9133
- catalogTrackName
9134
- );
9135
- if (recovered) {
9136
- const alreadyCompleted = catalogTrackName === void 0 ? this.#fecManager.isBlockCompleted(repairSbn, ownerPacketId) : this.#fecManager.isBlockCompleted(repairSbn, ownerPacketId, catalogTrackName);
9137
- if (catalogTrackName === void 0) {
9138
- this.#fecManager.cancelBlockTimeout(repairSbn, ownerPacketId);
9139
- } else {
9140
- this.#fecManager.cancelBlockTimeout(repairSbn, ownerPacketId, catalogTrackName);
9141
- }
9142
- if (!alreadyCompleted) {
9143
- this.#fecManager.countRecovery(ownerPacketId, repairSbn, catalogTrackName);
9144
- if (catalogTrackName === void 0) {
9145
- this.#fecManager.markBlockCompleted(repairSbn, ownerPacketId);
9146
- } else {
9147
- this.#fecManager.markBlockCompleted(repairSbn, ownerPacketId, catalogTrackName);
9148
- }
9149
- this.#routeRecoveredBlock(
9150
- repairSbn,
9151
- recovered,
9152
- ownerPacketId,
9153
- catalogTrackName
9154
- );
9155
- }
9156
- }
9166
+ this.#handleIsoRepair(ownerPacketId, catalogTrackName, parsed, "moq");
9157
9167
  }
9158
9168
  }
9159
- // ── SBN/ESI derivation ──────────────────────────────────────────
9160
- #kForPacket(packetId) {
9161
- if (packetId != null)
9162
- return this.#fecManager?.kForPacket?.(packetId) ?? this.#fecMappersByPacketId.get(packetId)?.k ?? this.#fecManager?.k ?? 4;
9163
- return this.#defaultFecMapper?.k ?? this.#fecManager?.k ?? 4;
9164
- }
9169
+ // ── Packet FEC geometry and block profile ───────────────────────
9165
9170
  #symbolSizeForPacket(packetId) {
9166
- if (packetId != null) return this.#fecManager?.symbolSizeForPacket?.(packetId) ?? this.#fecManager?.symbolSize ?? 0;
9171
+ if (packetId != null) return this.#fecManager?.symbolSizeForPacket?.(packetId) ?? 0;
9167
9172
  return this.#fecManager?.symbolSize ?? 0;
9168
9173
  }
9169
- /** Derive SBN/ESI from SS_ID using packet-scoped FEC geometry. */
9170
- #deriveSbnEsi(ssId, packetId) {
9171
- const mapper = packetId == null ? this.#defaultFecMapper : this.#fecMappersByPacketId.get(packetId) ?? null;
9172
- if (mapper) return mapper.fromSsId(ssId);
9173
- const k = this.#kForPacket(packetId);
9174
- return { sbn: Math.floor(ssId / k), esi: ssId % k };
9175
- }
9176
- #deriveRepairSbn(ssStart, ssbLength, packetId) {
9177
- const k = this.#kForPacket(packetId);
9178
- if (ssbLength <= 0 || ssbLength > k || ssStart % k !== 0) return null;
9179
- return Math.floor(ssStart / k);
9180
- }
9181
9174
  /**
9182
9175
  * The configured block profile of a packetId, or undefined while it is
9183
9176
  * unconfigured. With an FEC manager its per-packet configuration is the
9184
9177
  * only source. A router without one still recovers symbols through its
9185
9178
  * registered mapper, built with the catalog's explicit profile: the
9186
- * packet's own mapper, else the default one (the #deriveSbnEsi rule).
9179
+ * packet's own mapper, else the default one. A NullBlockMapper (a stream
9180
+ * without an FEC instance) states none.
9187
9181
  */
9188
9182
  #configuredBlockProfile(packetId) {
9189
9183
  if (this.#fecManager) return this.#fecManager.blockProfileForPacket(packetId);
@@ -9191,9 +9185,10 @@ var MmtpRouter = class {
9191
9185
  return mapper?.blockProfile ?? void 0;
9192
9186
  }
9193
9187
  /**
9194
- * The block profile an FEC coordinate of `packetId` is read under. Throws
9195
- * while none is configured: the two profiles carry identical wire tuples
9196
- * with different block math, so there is no default to fall back to.
9188
+ * The block profile an FEC coordinate of `packetId` is read under:
9189
+ * `iso-ssbg1-v1`, the only one (`k-padded-v1` is retired and refused).
9190
+ * Throws while none is configured: such a packet has no FEC geometry, and
9191
+ * nothing is inferred from the wire or defaulted.
9197
9192
  * Packet ingress leaves such a packet's FEC Payload ID unread first
9198
9193
  * (#noteUnreadableFecPayloadId); a throw here is a wiring fault on a path
9199
9194
  * that cannot hold an unconfigured packet.
@@ -9207,8 +9202,16 @@ var MmtpRouter = class {
9207
9202
  }
9208
9203
  return profile;
9209
9204
  }
9210
- #isIsoPacket(packetId) {
9211
- return this.#blockProfileFor(packetId) === "iso-ssbg1-v1";
9205
+ /**
9206
+ * The block coordinates (SS_Start, ESI) of an FEC source: range membership
9207
+ * in a block a repair already stated (ISO/IEC 23008-1 C.5.3). Null while no
9208
+ * repair has stated its block, while its packetId has no configured block
9209
+ * profile, and without an FEC manager: SS_ID alone locates no block, so
9210
+ * nothing is derived from it.
9211
+ */
9212
+ #locateFecSource(packetId, catalogTrackName, ssId) {
9213
+ if (this.#configuredBlockProfile(packetId) === void 0) return null;
9214
+ return this.#fecManager?.locateIsoSource?.(packetId, catalogTrackName, ssId) ?? null;
9212
9215
  }
9213
9216
  /**
9214
9217
  * Explicit refusal to read an FEC Payload ID: its (owner) packetId has no
@@ -9227,21 +9230,20 @@ var MmtpRouter = class {
9227
9230
  }
9228
9231
  }
9229
9232
  /**
9230
- * The release-gate anchor of a recovered symbol: its block (SBN) under
9231
- * k-padded-v1, its own SS_ID under iso-ssbg1-v1, where a frame is gated by
9232
- * the SS_IDs between it and the last released frame.
9233
+ * The release-gate anchor of a recovered symbol: its own SS_ID, SS_Start +
9234
+ * ESI modulo 2^32 (C.5.2), where a frame is gated by the SS_IDs between it
9235
+ * and the last released frame.
9233
9236
  */
9234
- #fecAnchorForRecovered(ownerPacketId, blockId, index) {
9235
- return ownerPacketId !== void 0 && this.#isIsoPacket(ownerPacketId) ? serial32Add(blockId, index) : blockId;
9237
+ #fecAnchorForRecovered(blockStart, index) {
9238
+ return serial32Add(blockStart, index);
9236
9239
  }
9237
9240
  /**
9238
9241
  * One iso-ssbg1-v1 repair symbol (ISO/IEC 23008-1 C.5.3). It states the
9239
9242
  * block `[SS_Start, SS_Start + SSB_length)`; repair ESI = SSB_length +
9240
9243
  * RS_ID (K' = SSB_length). The held sources it placed (and those of a
9241
9244
  * repair-less span in front of it) are fed as first-arrival sources, then
9242
- * the repair, the order they had on the wire, so a loss-free block is clean
9243
- * on its repair exactly as under k-padded-v1. A repair contradicting a known
9244
- * block is dropped.
9245
+ * the repair, the order they had on the wire, so a loss-free block completes
9246
+ * clean on its repair. A repair contradicting a known block is dropped.
9245
9247
  */
9246
9248
  #handleIsoRepair(ownerPacketId, catalogTrackName, repair, source) {
9247
9249
  const fec = this.#fecManager;
@@ -9267,6 +9269,7 @@ var MmtpRouter = class {
9267
9269
  catalogTrackName
9268
9270
  )) return;
9269
9271
  fec.noteBlockActivity?.(blockStart, ownerPacketId, catalogTrackName);
9272
+ fec.noteRepairGroupLength?.(blockStart, ownerPacketId, repair.rsbLength, catalogTrackName);
9270
9273
  const alreadyCompleted = fec.isBlockCompleted(blockStart, ownerPacketId, catalogTrackName);
9271
9274
  const recovered = fec.feedRepairSymbol(
9272
9275
  ownerPacketId,
@@ -9308,7 +9311,7 @@ var MmtpRouter = class {
9308
9311
  }
9309
9312
  if (payload.oversized) continue;
9310
9313
  const alreadyCompleted = fec.isBlockCompleted(blockStart, ownerPacketId, catalogTrackName);
9311
- const recovered = fec.feedSourceSymbol(ownerPacketId, ssId, payload.symbolData, void 0, catalogTrackName);
9314
+ const recovered = fec.feedSourceSymbol(ownerPacketId, ssId, payload.symbolData, catalogTrackName);
9312
9315
  if (!recovered || alreadyCompleted) continue;
9313
9316
  fec.cancelBlockTimeout(blockStart, ownerPacketId, catalogTrackName);
9314
9317
  fec.countRecovery(ownerPacketId, blockStart, catalogTrackName);
@@ -9333,9 +9336,10 @@ var MmtpRouter = class {
9333
9336
  return null;
9334
9337
  }
9335
9338
  /** Route a recovered FEC block through the parser + dedup pipeline.
9336
- * Sync WASM decoders return K fixed-width source symbols concatenated. */
9339
+ * Sync WASM decoders return the block's K' = SSB_length fixed-width
9340
+ * ssbg_mode1 source symbols concatenated. */
9337
9341
  routeRecoveredBlock(blockId, data, packetId, catalogTrackName) {
9338
- this.#routeRecoveredBlock(blockId, data, packetId, catalogTrackName);
9342
+ this.#withDeferredFecPokes(() => this.#routeRecoveredBlock(blockId, data, packetId, catalogTrackName));
9339
9343
  }
9340
9344
  /** Route a single recovered source symbol through the parser + dedup pipeline.
9341
9345
  * Worker-backed decoders emit one padded source symbol per frame event. */
@@ -9749,8 +9753,16 @@ var MmtpRouter = class {
9749
9753
  #noteEmittedKeyframe(packetId, keyframe) {
9750
9754
  if (!keyframe) return;
9751
9755
  if (!this.#videoPacketIds.has(packetId)) return;
9752
- if (this.#keyframeLostTimeoutMs === null) return;
9753
9756
  if (this.#isFecTrack(packetId)) return;
9757
+ if (this.#keyframeLostTimeoutMs === null) {
9758
+ if (!this.#warnedNoKeyframeLostTimeout.has(packetId)) {
9759
+ this.#warnedNoKeyframeLostTimeout.add(packetId);
9760
+ console.warn(
9761
+ `[MmtpRouter] keyframeLostTimeoutMs not configured \u2014 Phase 13 keyframe repair disabled for packetId=${packetId}, a video track without FEC. Set it via setKeyframeLostTimeoutMs() or provide in constructor config to enable.`
9762
+ );
9763
+ }
9764
+ return;
9765
+ }
9754
9766
  this.#lastKeyframeGroupId++;
9755
9767
  this.#armKeyframeLostTimer();
9756
9768
  }
@@ -9762,7 +9774,7 @@ var MmtpRouter = class {
9762
9774
  #withDeferredFecPokes(work) {
9763
9775
  this.#fecPokeDepth++;
9764
9776
  try {
9765
- work();
9777
+ this.#parser.deferFecRelease(work);
9766
9778
  } finally {
9767
9779
  this.#fecPokeDepth--;
9768
9780
  if (this.#fecPokeDepth === 0 && this.#pendingFecPokes.size > 0 && !this.#disposed) {
@@ -9774,6 +9786,13 @@ var MmtpRouter = class {
9774
9786
  }
9775
9787
  }
9776
9788
  }
9789
+ /**
9790
+ * Arrival time of the earliest frame the FEC release gate holds for this
9791
+ * stream (see FecReleaseSequencer.earliestHeldArrivalMs), or undefined.
9792
+ */
9793
+ fecReleaseEarliestHeldAtMs(packetId, catalogTrackName) {
9794
+ return this.#parser.fecReleaseEarliestHeldAtMs(packetId, catalogTrackName);
9795
+ }
9777
9796
  #requestFecPoke(packetId, catalogTrackName) {
9778
9797
  if (this.#disposed) return;
9779
9798
  if (this.#fecPokeDepth > 0) {
@@ -9801,29 +9820,19 @@ var MmtpRouter = class {
9801
9820
  resolvedLoss: (packetId, catalogTrackName, fromSbn, toSbn, releasedSbn) => {
9802
9821
  const fec = this.#fecManager;
9803
9822
  if (!fec?.blockResolution) return [];
9804
- if (this.#isIsoPacket(packetId)) {
9805
- const head = fromSbn === releasedSbn ? toSbn : fromSbn;
9806
- return fec.isoSpanResolution?.(packetId, catalogTrackName, releasedSbn, head) ?? null;
9807
- }
9808
- const highest = fec.highestSbn?.(packetId, catalogTrackName);
9809
- const lost = [];
9810
- for (let sbn = fromSbn; sbn <= toSbn; sbn++) {
9811
- const resolution = fec.blockResolution(sbn, packetId, catalogTrackName);
9812
- if (resolution === "pending") return null;
9813
- if (resolution === "failed") {
9814
- lost.push(sbn);
9815
- } else if (resolution === "untracked") {
9816
- if (sbn === releasedSbn) continue;
9817
- if (highest === void 0 || sbn > highest) return null;
9818
- lost.push(sbn);
9819
- }
9820
- }
9821
- return lost;
9823
+ const head = fromSbn === releasedSbn ? toSbn : fromSbn;
9824
+ return fec.isoSpanResolution?.(packetId, catalogTrackName, releasedSbn, head) ?? null;
9822
9825
  },
9823
9826
  // The retention window itself: a frame is never still held when a block
9824
9827
  // it waits on retires. Only consulted while resolvedLoss holds a gap,
9825
9828
  // which needs blockResolution, so the check above guarantees the method.
9826
- holdLimitMs: (packetId) => this.#fecManager?.terminalRetentionMsForPacket?.(packetId) ?? Infinity,
9829
+ // A packetId the manager no longer has configured (released) has no
9830
+ // block left to wait on: release its frames now (BLO-45953).
9831
+ holdLimitMs: (packetId) => {
9832
+ const fec = this.#fecManager;
9833
+ if (!fec?.terminalRetentionMsForPacket) return Infinity;
9834
+ return fec.terminalRetentionMsForPacket(packetId) ?? 0;
9835
+ },
9827
9836
  decide: (before, after, lostBlocks, discontinuity) => {
9828
9837
  const decision = this.#decideGap(before, after, lostBlocks, discontinuity);
9829
9838
  this.#onFrameGap?.(decision);
@@ -9885,9 +9894,10 @@ var MmtpRouter = class {
9885
9894
  }
9886
9895
  /**
9887
9896
  * The most media units a gap between two released frames can hold: the
9888
- * FEC blocks from `before`'s SBN to `after`'s, times D, the media units one
9889
- * block touches (ceil(interleaveDepthMs / unit duration), §5.1). Null when
9890
- * either SBN, the unit duration or the catalog interleave is unknown.
9897
+ * FEC blocks between `before`'s anchor and `after`'s, times D, the media
9898
+ * units one block touches (ceil(interleaveDepthMs / unit duration), §5.1).
9899
+ * Null when either anchor, the unit duration or the catalog interleave is
9900
+ * unknown.
9891
9901
  */
9892
9902
  #maxMissingUnits(before, after) {
9893
9903
  const from = before.fecSbn;
@@ -9900,7 +9910,7 @@ var MmtpRouter = class {
9900
9910
  const denominator = BigInt(timing.durationTicks) * 1000n;
9901
9911
  const unitsPerBlock = (numerator + denominator - 1n) / denominator;
9902
9912
  const blocks = BigInt(
9903
- (this.#isIsoPacket(after.packetId) ? serial32Precedes(from, to) ? serial32Distance(from, to) : serial32Distance(to, from) : Math.abs(to - from)) + 1
9913
+ (serial32Precedes(from, to) ? serial32Distance(from, to) : serial32Distance(to, from)) + 1
9904
9914
  );
9905
9915
  const bound = unitsPerBlock * blocks;
9906
9916
  return bound > BigInt(Number.MAX_SAFE_INTEGER) ? null : Number(bound);
@@ -9950,8 +9960,9 @@ var MmtpRouter = class {
9950
9960
  const cb = this.#trackInitCallbacks.get(packetId);
9951
9961
  if (cb) {
9952
9962
  cb(data);
9953
- } else if (this.#onInitSegment) {
9954
- this.#onInitSegment(data);
9963
+ } else {
9964
+ this.#unmappedInitDeliveries++;
9965
+ this.#onInitSegment?.(data);
9955
9966
  }
9956
9967
  console.log(
9957
9968
  `[MmtpRouter] Init delivered for packetId=${packetId}${catalogTrackName === void 0 ? "" : ` track=${catalogTrackName}`} (${data.byteLength}B)`
@@ -9993,9 +10004,9 @@ var MmtpRouter = class {
9993
10004
  if (!info.isRepair && this.#manifestVerifier && !manifestAdmitted) {
9994
10005
  let identity = manifestIdentity;
9995
10006
  if (!identity && info.fecPayloadId && !fecUnreadable && (this.#resolveManifestIdentityForRoute || this.#resolveManifestIdentity)) {
9996
- const coordinates = this.#deriveSbnEsi(info.fecPayloadId.ssId, info.packetId);
9997
10007
  const catalogTrackName = catalogTrackNameForPacket(ingress, info.packetId);
9998
- identity = (this.#resolveManifestIdentityForRoute ? this.#resolveManifestIdentityForRoute({
10008
+ const coordinates = this.#locateFecSource(info.packetId, catalogTrackName, info.fecPayloadId.ssId);
10009
+ identity = coordinates === null ? void 0 : (this.#resolveManifestIdentityForRoute ? this.#resolveManifestIdentityForRoute({
9999
10010
  packetId: info.packetId,
10000
10011
  sbn: coordinates.sbn,
10001
10012
  esi: coordinates.esi,
@@ -10047,79 +10058,7 @@ var MmtpRouter = class {
10047
10058
  this.#noteUnreadableFecPayloadId(ownerPacketId, "repair");
10048
10059
  return;
10049
10060
  }
10050
- if (this.#isIsoPacket(ownerPacketId)) {
10051
- this.#handleIsoRepair(ownerPacketId, catalogTrackNameForPacket(ingress, ownerPacketId), repair, source);
10052
- return;
10053
- }
10054
- const repairSbn = this.#deriveRepairSbn(repair.ssStart, repair.ssbLength, ownerPacketId);
10055
- if (repairSbn === null) return;
10056
- const repairEsi = this.#kForPacket(ownerPacketId) + repair.rsId;
10057
- if (!this.#feedFecTransportSymbol(
10058
- ownerPacketId,
10059
- repairSbn,
10060
- repairEsi,
10061
- repair.symbolData,
10062
- source,
10063
- catalogTrackNameForPacket(ingress, ownerPacketId)
10064
- )) return;
10065
- const repairCatalogTrackName = catalogTrackNameForPacket(ingress, ownerPacketId);
10066
- if (repairCatalogTrackName === void 0) {
10067
- this.#fecManager.noteBlockActivity?.(repairSbn, ownerPacketId);
10068
- } else {
10069
- this.#fecManager.noteBlockActivity?.(
10070
- repairSbn,
10071
- ownerPacketId,
10072
- repairCatalogTrackName
10073
- );
10074
- }
10075
- const recovered = repairCatalogTrackName === void 0 ? this.#fecManager.feedRepairSymbol(
10076
- ownerPacketId,
10077
- repair.ssStart,
10078
- repair.ssbLength,
10079
- repair.rsId,
10080
- repair.symbolData
10081
- ) : this.#fecManager.feedRepairSymbol(
10082
- ownerPacketId,
10083
- repair.ssStart,
10084
- repair.ssbLength,
10085
- repair.rsId,
10086
- repair.symbolData,
10087
- repairCatalogTrackName
10088
- );
10089
- if (recovered) {
10090
- const alreadyCompleted = repairCatalogTrackName === void 0 ? this.#fecManager.isBlockCompleted(repairSbn, ownerPacketId) : this.#fecManager.isBlockCompleted(
10091
- repairSbn,
10092
- ownerPacketId,
10093
- repairCatalogTrackName
10094
- );
10095
- if (repairCatalogTrackName === void 0) {
10096
- this.#fecManager.cancelBlockTimeout(repairSbn, ownerPacketId);
10097
- } else {
10098
- this.#fecManager.cancelBlockTimeout(
10099
- repairSbn,
10100
- ownerPacketId,
10101
- repairCatalogTrackName
10102
- );
10103
- }
10104
- if (!alreadyCompleted) {
10105
- this.#fecManager.countRecovery(ownerPacketId, repairSbn, repairCatalogTrackName);
10106
- if (repairCatalogTrackName === void 0) {
10107
- this.#fecManager.markBlockCompleted(repairSbn, ownerPacketId);
10108
- } else {
10109
- this.#fecManager.markBlockCompleted(
10110
- repairSbn,
10111
- ownerPacketId,
10112
- repairCatalogTrackName
10113
- );
10114
- }
10115
- this.#routeRecoveredBlock(
10116
- repairSbn,
10117
- recovered,
10118
- ownerPacketId,
10119
- catalogTrackNameForPacket(ingress, ownerPacketId)
10120
- );
10121
- }
10122
- }
10061
+ this.#handleIsoRepair(ownerPacketId, catalogTrackNameForPacket(ingress, ownerPacketId), repair, source);
10123
10062
  }
10124
10063
  } else {
10125
10064
  if (this.#classifyPacketId(info.packetId) === null) return;
@@ -10143,8 +10082,8 @@ var MmtpRouter = class {
10143
10082
  }
10144
10083
  const duplicates = this.#stream(info.packetId, catalogTrackName).duplicates;
10145
10084
  const fecPayloadId = fecUnreadable ? null : info.fecPayloadId;
10146
- const isoSource = this.#fecManager !== null && fecPayloadId != null && this.#isIsoPacket(info.packetId);
10147
- const coords = this.#fecManager && fecPayloadId ? isoSource ? this.#fecManager.locateIsoSource?.(info.packetId, catalogTrackName, fecPayloadId.ssId) ?? void 0 : this.#deriveSbnEsi(fecPayloadId.ssId, info.packetId) : void 0;
10085
+ const fecSource = this.#fecManager !== null && fecPayloadId != null;
10086
+ const coords = fecSource && fecPayloadId ? this.#locateFecSource(info.packetId, catalogTrackName, fecPayloadId.ssId) ?? void 0 : void 0;
10148
10087
  duplicates.advance(coords?.sbn);
10149
10088
  if (source === "multicast" && !overlapCopy && !releasedFromQuarantine && catalogTrackName !== void 0 && duplicates.predatesHorizon(info.sequenceNumber, fecPayloadId?.ssId)) {
10150
10089
  this.#publisherRestarts++;
@@ -10159,9 +10098,8 @@ var MmtpRouter = class {
10159
10098
  }
10160
10099
  if (this.#fecManager && fecPayloadId && coords) {
10161
10100
  const fecId = fecPayloadId;
10162
- const symbolSize = this.#symbolSizeForPacket(info.packetId);
10163
10101
  const rawSymbol = packet.subarray(0, packet.length - 4);
10164
- const oversized = isoSource ? !(this.#fecManager.isoSourceFits?.(info.packetId, rawSymbol.length) ?? false) : symbolSize > 0 && rawSymbol.length > symbolSize;
10102
+ const oversized = !(this.#fecManager.isoSourceFits?.(info.packetId, rawSymbol.length) ?? false);
10165
10103
  let overlapBlockCompleted = false;
10166
10104
  if (overlapCopy) {
10167
10105
  overlapBlockCompleted = catalogTrackName === void 0 ? this.#fecManager.isBlockCompleted(coords.sbn, info.packetId) : this.#fecManager.isBlockCompleted(
@@ -10196,7 +10134,7 @@ var MmtpRouter = class {
10196
10134
  }
10197
10135
  parseSourceSymbol = (overlapCopy ? !overlapBlockCompleted : sourceSymbolAccepted) && !duplicates.parsedSymbols.has(fecId.ssId);
10198
10136
  fecInfo = { sbn: coords.sbn, esi: coords.esi, oversized };
10199
- } else if (isoSource && this.#fecManager && fecPayloadId) {
10137
+ } else if (fecSource && this.#fecManager && fecPayloadId) {
10200
10138
  const ssId = fecPayloadId.ssId;
10201
10139
  if (overlapCopy) {
10202
10140
  parseSourceSymbol = !duplicates.parsedSymbols.has(ssId);
@@ -10230,12 +10168,13 @@ var MmtpRouter = class {
10230
10168
  this.#feedViaParser(packet, info, fecInfo, {
10231
10169
  source,
10232
10170
  catalogTrackName,
10233
- ...isoSource && info.fecPayloadId ? { fecSbn: info.fecPayloadId.ssId } : fecInfo === void 0 ? {} : { fecSbn: fecInfo.sbn }
10171
+ // An FEC source frame is anchored by its own SS_ID (C.5.2).
10172
+ ...fecSource && fecPayloadId ? { fecSbn: fecPayloadId.ssId } : {}
10234
10173
  }, parsed);
10235
10174
  }
10236
10175
  if (this.#classifyPacketId(info.packetId) === null) return;
10237
- if (this.#fecManager && fecPayloadId && sourceSymbolAccepted && sourceSymbolTrackable) {
10238
- const { sbn, esi } = isoSource && coords ? coords : this.#deriveSbnEsi(fecPayloadId.ssId, info.packetId);
10176
+ if (this.#fecManager && fecPayloadId && coords && sourceSymbolAccepted && sourceSymbolTrackable) {
10177
+ const { sbn, esi } = coords;
10239
10178
  if (this.#classifyPacketId(info.packetId) !== null && this.#fecManager.isTrackConfigured?.(info.packetId) !== false) {
10240
10179
  this.#fecManager.trackBlock(
10241
10180
  sbn,
@@ -10256,13 +10195,11 @@ var MmtpRouter = class {
10256
10195
  const recovered = catalogTrackName === void 0 ? this.#fecManager.feedSourceSymbol(
10257
10196
  info.packetId,
10258
10197
  sourceFec.ssId,
10259
- sourceFec.symbolData,
10260
- void 0
10198
+ sourceFec.symbolData
10261
10199
  ) : this.#fecManager.feedSourceSymbol(
10262
10200
  info.packetId,
10263
10201
  sourceFec.ssId,
10264
10202
  sourceFec.symbolData,
10265
- void 0,
10266
10203
  catalogTrackName
10267
10204
  );
10268
10205
  if (recovered) {
@@ -10669,7 +10606,6 @@ var MmtpRouter = class {
10669
10606
  // ── Private: FEC recovery routing ───────────────────────────────
10670
10607
  /** Route WASM-recovered block through appropriate path based on container kind. */
10671
10608
  #routeRecoveredBlock(blockId, recovered, ownerPacketId, catalogTrackName) {
10672
- const k = this.#kForPacket(ownerPacketId);
10673
10609
  const packetSymbolSize = this.#symbolSizeForPacket(ownerPacketId);
10674
10610
  if (ownerPacketId === void 0) {
10675
10611
  throw new Error("[MmtpRouter] a recovered FEC block needs its owner packetId to read its fec.blockProfile");
@@ -10682,7 +10618,6 @@ var MmtpRouter = class {
10682
10618
  }
10683
10619
  const symbolSize = packetSymbolSize;
10684
10620
  const result = processFecBlock(recovered, {
10685
- ...blockProfile === "k-padded-v1" ? { k } : {},
10686
10621
  symbolSize,
10687
10622
  ownerPacketId,
10688
10623
  blockProfile
@@ -10762,8 +10697,7 @@ var MmtpRouter = class {
10762
10697
  const admission = verifier.admitObject(
10763
10698
  {
10764
10699
  ...identity,
10765
- packetId: ownerPacketId,
10766
- ...ownerPacketId !== void 0 && this.#isIsoPacket(ownerPacketId) ? {} : { ssId: blockId * this.#kForPacket(ownerPacketId) + symbol.index }
10700
+ packetId: ownerPacketId
10767
10701
  },
10768
10702
  symbol.rawSymbol,
10769
10703
  () => {
@@ -10866,7 +10800,7 @@ var MmtpRouter = class {
10866
10800
  rapFlag: sym.fragment.rapFlag,
10867
10801
  recovered: true,
10868
10802
  deliveryProvenance,
10869
- fecSbn: this.#fecAnchorForRecovered(ownerPacketId, blockId, sym.index),
10803
+ fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
10870
10804
  ...catalogTrackName === void 0 ? {} : { catalogTrackName }
10871
10805
  });
10872
10806
  continue;
@@ -10978,7 +10912,7 @@ var MmtpRouter = class {
10978
10912
  rapFlag: assembled.rapFlag,
10979
10913
  recovered: true,
10980
10914
  ...assembled.deliveryProvenance === void 0 ? {} : { deliveryProvenance: assembled.deliveryProvenance },
10981
- fecSbn: this.#fecAnchorForRecovered(ownerPacketId, blockId, sym.index),
10915
+ fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
10982
10916
  ...recoveredCatalogTrackName === void 0 ? {} : { catalogTrackName: recoveredCatalogTrackName }
10983
10917
  });
10984
10918
  continue;
@@ -11115,7 +11049,7 @@ var MmtpRouter = class {
11115
11049
  rapFlag: sym.fragment.rapFlag,
11116
11050
  recovered: true,
11117
11051
  deliveryProvenance,
11118
- fecSbn: this.#fecAnchorForRecovered(ownerPacketId, blockId, sym.index),
11052
+ fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
11119
11053
  ...catalogTrackName === void 0 ? {} : { catalogTrackName }
11120
11054
  });
11121
11055
  } else {
@@ -11194,7 +11128,7 @@ var MmtpRouter = class {
11194
11128
  rapFlag: assembled.rapFlag,
11195
11129
  recovered: true,
11196
11130
  deliveryProvenance,
11197
- fecSbn: this.#fecAnchorForRecovered(ownerPacketId, blockId, sym.index),
11131
+ fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
11198
11132
  ...assembled.catalogTrackName === void 0 ? {} : { catalogTrackName: assembled.catalogTrackName }
11199
11133
  });
11200
11134
  }
@@ -11229,7 +11163,7 @@ var MmtpRouter = class {
11229
11163
  ...sym.fragment.sampleNumber === void 0 ? {} : { sampleNumber: sym.fragment.sampleNumber },
11230
11164
  recovered: true,
11231
11165
  deliveryProvenance,
11232
- fecSbn: this.#fecAnchorForRecovered(ownerPacketId, blockId, sym.index),
11166
+ fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
11233
11167
  ...catalogTrackName === void 0 ? {} : { catalogTrackName }
11234
11168
  });
11235
11169
  continue;