@blockcast/mmt-container 0.1.0-main.149f78a4adae

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 (678) hide show
  1. package/README.md +432 -0
  2. package/dist/.build-stamp +0 -0
  3. package/dist/__tests__/test-utils.d.ts +71 -0
  4. package/dist/__tests__/test-utils.d.ts.map +1 -0
  5. package/dist/align.d.ts +148 -0
  6. package/dist/align.d.ts.map +1 -0
  7. package/dist/align.js +88 -0
  8. package/dist/align.js.map +7 -0
  9. package/dist/audio-init-parser.d.ts +66 -0
  10. package/dist/audio-init-parser.d.ts.map +1 -0
  11. package/dist/audio-init-parser.js +118 -0
  12. package/dist/audio-init-parser.js.map +7 -0
  13. package/dist/audio-ring-buffer.d.ts +50 -0
  14. package/dist/audio-ring-buffer.d.ts.map +1 -0
  15. package/dist/audio-ring-buffer.js +93 -0
  16. package/dist/audio-ring-buffer.js.map +7 -0
  17. package/dist/authored-timing.d.ts +32 -0
  18. package/dist/authored-timing.d.ts.map +1 -0
  19. package/dist/authored-timing.js +32 -0
  20. package/dist/authored-timing.js.map +7 -0
  21. package/dist/browser-runtime.js +17109 -0
  22. package/dist/browser-runtime.js.map +7 -0
  23. package/dist/carp-catalog.d.ts +318 -0
  24. package/dist/carp-catalog.d.ts.map +1 -0
  25. package/dist/carp-catalog.js +549 -0
  26. package/dist/carp-catalog.js.map +7 -0
  27. package/dist/catalog-fec-params.d.ts +82 -0
  28. package/dist/catalog-fec-params.d.ts.map +1 -0
  29. package/dist/catalog-fec-params.js +66 -0
  30. package/dist/catalog-fec-params.js.map +7 -0
  31. package/dist/catalog-network-source.d.ts +19 -0
  32. package/dist/catalog-network-source.d.ts.map +1 -0
  33. package/dist/catalog-network-source.js +22 -0
  34. package/dist/catalog-network-source.js.map +7 -0
  35. package/dist/catalog-validator.d.ts +18 -0
  36. package/dist/catalog-validator.d.ts.map +1 -0
  37. package/dist/catalog-validator.js +7747 -0
  38. package/dist/catalog-validator.js.map +7 -0
  39. package/dist/cmaf-block-assembler.d.ts +168 -0
  40. package/dist/cmaf-block-assembler.d.ts.map +1 -0
  41. package/dist/cmaf-block-assembler.js +1755 -0
  42. package/dist/cmaf-block-assembler.js.map +7 -0
  43. package/dist/cmaf-group-batcher.d.ts +38 -0
  44. package/dist/cmaf-group-batcher.d.ts.map +1 -0
  45. package/dist/cmaf-group-batcher.js +195 -0
  46. package/dist/cmaf-group-batcher.js.map +7 -0
  47. package/dist/cmcd-producer.d.ts +104 -0
  48. package/dist/cmcd-producer.d.ts.map +1 -0
  49. package/dist/cmcd-producer.js +207 -0
  50. package/dist/cmcd-producer.js.map +7 -0
  51. package/dist/codec-utils.d.ts +235 -0
  52. package/dist/codec-utils.d.ts.map +1 -0
  53. package/dist/codec-utils.js +1225 -0
  54. package/dist/codec-utils.js.map +7 -0
  55. package/dist/fec-codec.d.ts +32 -0
  56. package/dist/fec-codec.d.ts.map +1 -0
  57. package/dist/fec-codec.js +47 -0
  58. package/dist/fec-codec.js.map +7 -0
  59. package/dist/fec-manager.d.ts +266 -0
  60. package/dist/fec-manager.d.ts.map +1 -0
  61. package/dist/fec-manager.js +1447 -0
  62. package/dist/fec-manager.js.map +7 -0
  63. package/dist/fec-starvation-detector.d.ts +59 -0
  64. package/dist/fec-starvation-detector.d.ts.map +1 -0
  65. package/dist/fec-starvation-detector.js +75 -0
  66. package/dist/fec-starvation-detector.js.map +7 -0
  67. package/dist/fec-worker-setup.d.ts +76 -0
  68. package/dist/fec-worker-setup.d.ts.map +1 -0
  69. package/dist/fec-worker-setup.js +603 -0
  70. package/dist/fec-worker-setup.js.map +7 -0
  71. package/dist/fmp4-completion.d.ts +30 -0
  72. package/dist/fmp4-completion.d.ts.map +1 -0
  73. package/dist/fmp4-completion.js +21 -0
  74. package/dist/fmp4-completion.js.map +7 -0
  75. package/dist/fmp4-reader.d.ts +37 -0
  76. package/dist/fmp4-reader.d.ts.map +1 -0
  77. package/dist/fmp4-reader.js +100 -0
  78. package/dist/fmp4-reader.js.map +7 -0
  79. package/dist/index.d.ts +47 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +330 -0
  82. package/dist/index.js.map +7 -0
  83. package/dist/iso-bmff-timing.d.ts +47 -0
  84. package/dist/iso-bmff-timing.d.ts.map +1 -0
  85. package/dist/iso-bmff-timing.js +526 -0
  86. package/dist/iso-bmff-timing.js.map +7 -0
  87. package/dist/loc.d.ts +68 -0
  88. package/dist/loc.d.ts.map +1 -0
  89. package/dist/loc.js +143 -0
  90. package/dist/loc.js.map +7 -0
  91. package/dist/manifest-auth-plan.d.ts +30 -0
  92. package/dist/manifest-auth-plan.d.ts.map +1 -0
  93. package/dist/manifest-auth-plan.js +1267 -0
  94. package/dist/manifest-auth-plan.js.map +7 -0
  95. package/dist/media-router.d.ts +338 -0
  96. package/dist/media-router.d.ts.map +1 -0
  97. package/dist/media-router.js +802 -0
  98. package/dist/media-router.js.map +7 -0
  99. package/dist/mfu-reassembler.d.ts +264 -0
  100. package/dist/mfu-reassembler.d.ts.map +1 -0
  101. package/dist/mfu-reassembler.js +2668 -0
  102. package/dist/mfu-reassembler.js.map +7 -0
  103. package/dist/mfu-reassembly-policy.d.ts +24 -0
  104. package/dist/mfu-reassembly-policy.d.ts.map +1 -0
  105. package/dist/mfu-reassembly-policy.js +99 -0
  106. package/dist/mfu-reassembly-policy.js.map +7 -0
  107. package/dist/mmtp-container-parser.d.ts +304 -0
  108. package/dist/mmtp-container-parser.d.ts.map +1 -0
  109. package/dist/mmtp-container-parser.js +5378 -0
  110. package/dist/mmtp-container-parser.js.map +7 -0
  111. package/dist/mmtp-container-parser.no-modules.js +7853 -0
  112. package/dist/mmtp-container-parser.no-modules.js.map +7 -0
  113. package/dist/mmtp-decode-pipeline.d.ts +96 -0
  114. package/dist/mmtp-decode-pipeline.d.ts.map +1 -0
  115. package/dist/mmtp-decode-pipeline.js +5589 -0
  116. package/dist/mmtp-decode-pipeline.js.map +7 -0
  117. package/dist/mmtp-router.d.ts +383 -0
  118. package/dist/mmtp-router.d.ts.map +1 -0
  119. package/dist/mmtp-router.js +8384 -0
  120. package/dist/mmtp-router.js.map +7 -0
  121. package/dist/mmtp-to-cmaf.d.ts +166 -0
  122. package/dist/mmtp-to-cmaf.d.ts.map +1 -0
  123. package/dist/mmtp-to-cmaf.js +781 -0
  124. package/dist/mmtp-to-cmaf.js.map +7 -0
  125. package/dist/multicast-auth-catalog.d.ts +115 -0
  126. package/dist/multicast-auth-catalog.d.ts.map +1 -0
  127. package/dist/multicast-auth-catalog.js +202 -0
  128. package/dist/multicast-auth-catalog.js.map +7 -0
  129. package/dist/multicast-input.d.ts +107 -0
  130. package/dist/multicast-input.d.ts.map +1 -0
  131. package/dist/multicast-input.js +256 -0
  132. package/dist/multicast-input.js.map +7 -0
  133. package/dist/multicast-manager.d.ts +330 -0
  134. package/dist/multicast-manager.d.ts.map +1 -0
  135. package/dist/multicast-manager.js +11032 -0
  136. package/dist/multicast-manager.js.map +7 -0
  137. package/dist/multicast-transport.d.ts +62 -0
  138. package/dist/multicast-transport.d.ts.map +1 -0
  139. package/dist/multicast-transport.js +338 -0
  140. package/dist/multicast-transport.js.map +7 -0
  141. package/dist/multicast-unwrap.d.ts +57 -0
  142. package/dist/multicast-unwrap.d.ts.map +1 -0
  143. package/dist/multicast-unwrap.js +384 -0
  144. package/dist/multicast-unwrap.js.map +7 -0
  145. package/dist/no-modules.d.ts +9 -0
  146. package/dist/no-modules.d.ts.map +1 -0
  147. package/dist/no-modules.js +7819 -0
  148. package/dist/no-modules.js.map +7 -0
  149. package/dist/phase14-catalog-override.d.ts +126 -0
  150. package/dist/phase14-catalog-override.d.ts.map +1 -0
  151. package/dist/phase14-catalog-override.js +155 -0
  152. package/dist/phase14-catalog-override.js.map +7 -0
  153. package/dist/repair-fetch.d.ts +58 -0
  154. package/dist/repair-fetch.d.ts.map +1 -0
  155. package/dist/repair-fetch.js +117 -0
  156. package/dist/repair-fetch.js.map +7 -0
  157. package/dist/sample-combiner.d.ts +182 -0
  158. package/dist/sample-combiner.d.ts.map +1 -0
  159. package/dist/sample-combiner.js +571 -0
  160. package/dist/sample-combiner.js.map +7 -0
  161. package/dist/signaling.d.ts +29 -0
  162. package/dist/signaling.d.ts.map +1 -0
  163. package/dist/signaling.js +232 -0
  164. package/dist/signaling.js.map +7 -0
  165. package/dist/source-auth.d.ts +2 -0
  166. package/dist/source-auth.d.ts.map +1 -0
  167. package/dist/source-auth.js +1220 -0
  168. package/dist/source-auth.js.map +7 -0
  169. package/dist/switching-set-alignment.d.ts +61 -0
  170. package/dist/switching-set-alignment.d.ts.map +1 -0
  171. package/dist/switching-set-alignment.js +85 -0
  172. package/dist/switching-set-alignment.js.map +7 -0
  173. package/dist/timestamp-codec.d.ts +34 -0
  174. package/dist/timestamp-codec.d.ts.map +1 -0
  175. package/dist/timestamp-codec.js +456 -0
  176. package/dist/timestamp-codec.js.map +7 -0
  177. package/dist/track-pipeline-setup.d.ts +72 -0
  178. package/dist/track-pipeline-setup.d.ts.map +1 -0
  179. package/dist/track-pipeline-setup.js +306 -0
  180. package/dist/track-pipeline-setup.js.map +7 -0
  181. package/dist/track-pipeline.d.ts +121 -0
  182. package/dist/track-pipeline.d.ts.map +1 -0
  183. package/dist/track-pipeline.js +229 -0
  184. package/dist/track-pipeline.js.map +7 -0
  185. package/dist/track-session.d.ts +269 -0
  186. package/dist/track-session.d.ts.map +1 -0
  187. package/dist/track-session.js +597 -0
  188. package/dist/track-session.js.map +7 -0
  189. package/dist/transport-pool.d.ts +69 -0
  190. package/dist/transport-pool.d.ts.map +1 -0
  191. package/dist/transport-pool.js +88 -0
  192. package/dist/transport-pool.js.map +7 -0
  193. package/dist/wasm-mfu-reassembler.d.ts +81 -0
  194. package/dist/wasm-mfu-reassembler.d.ts.map +1 -0
  195. package/dist/wasm-mfu-reassembler.js +1915 -0
  196. package/dist/wasm-mfu-reassembler.js.map +7 -0
  197. package/dist/wasm-mmtp-container-parser.d.ts +10 -0
  198. package/dist/wasm-mmtp-container-parser.d.ts.map +1 -0
  199. package/dist/wasm-mmtp-container-parser.js +5635 -0
  200. package/dist/wasm-mmtp-container-parser.js.map +7 -0
  201. package/node_modules/@blockcast/fec-worker/README.md +213 -0
  202. package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
  203. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +80 -0
  204. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts.map +1 -0
  205. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js +270 -0
  206. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js.map +1 -0
  207. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +252 -0
  208. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +1 -0
  209. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js +11 -0
  210. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js.map +1 -0
  211. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts +14 -0
  212. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts.map +1 -0
  213. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +565 -0
  214. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +7 -0
  215. package/node_modules/@blockcast/fec-worker/dist/index.d.ts +10 -0
  216. package/node_modules/@blockcast/fec-worker/dist/index.d.ts.map +1 -0
  217. package/node_modules/@blockcast/fec-worker/dist/index.js +8 -0
  218. package/node_modules/@blockcast/fec-worker/dist/index.js.map +1 -0
  219. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts +20 -0
  220. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts.map +1 -0
  221. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js +349 -0
  222. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js.map +7 -0
  223. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts +104 -0
  224. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts.map +1 -0
  225. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js +181 -0
  226. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js.map +1 -0
  227. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts +179 -0
  228. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts.map +1 -0
  229. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js +47 -0
  230. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js.map +1 -0
  231. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts +9 -0
  232. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts.map +1 -0
  233. package/node_modules/@blockcast/fec-worker/dist/transfer.js +13 -0
  234. package/node_modules/@blockcast/fec-worker/dist/transfer.js.map +1 -0
  235. package/node_modules/@blockcast/fec-worker/package.json +59 -0
  236. package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +309 -0
  237. package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +268 -0
  238. package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +1048 -0
  239. package/node_modules/@blockcast/fec-worker/src/index.ts +32 -0
  240. package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +558 -0
  241. package/node_modules/@blockcast/fec-worker/src/shred-worker-client.ts +222 -0
  242. package/node_modules/@blockcast/fec-worker/src/shred-worker-types.ts +194 -0
  243. package/node_modules/@blockcast/fec-worker/src/transfer.ts +12 -0
  244. package/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
  245. package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  246. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
  247. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
  248. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
  249. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
  250. package/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
  251. package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
  252. package/node_modules/@blockcast/mmt-base/README.md +120 -0
  253. package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  254. package/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
  255. package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
  256. package/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
  257. package/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
  258. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +275 -0
  259. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
  260. package/node_modules/@blockcast/mmt-base/dist/mmtp.js +644 -0
  261. package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
  262. package/node_modules/@blockcast/mmt-base/package.json +49 -0
  263. package/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
  264. package/node_modules/@blockcast/mmt-base/src/mmtp.ts +898 -0
  265. package/node_modules/@blockcast/mmt-fec/README.md +270 -0
  266. package/node_modules/@blockcast/mmt-fec/dist/.build-stamp +0 -0
  267. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts +80 -0
  268. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts.map +1 -0
  269. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js +294 -0
  270. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js.map +1 -0
  271. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts +72 -0
  272. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts.map +1 -0
  273. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js +192 -0
  274. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js.map +1 -0
  275. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts +46 -0
  276. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts.map +1 -0
  277. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js +96 -0
  278. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js.map +1 -0
  279. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts +33 -0
  280. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts.map +1 -0
  281. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js +57 -0
  282. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js.map +1 -0
  283. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts +185 -0
  284. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +1 -0
  285. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +273 -0
  286. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +1 -0
  287. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +22 -0
  288. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +1 -0
  289. package/node_modules/@blockcast/mmt-fec/dist/index.js +22 -0
  290. package/node_modules/@blockcast/mmt-fec/dist/index.js.map +1 -0
  291. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts +20 -0
  292. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts.map +1 -0
  293. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js +28 -0
  294. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js.map +1 -0
  295. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +174 -0
  296. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +1 -0
  297. package/node_modules/@blockcast/mmt-fec/dist/oti.js +256 -0
  298. package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +1 -0
  299. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts +41 -0
  300. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts.map +1 -0
  301. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js +81 -0
  302. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js.map +1 -0
  303. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
  304. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  305. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
  306. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
  307. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
  308. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
  309. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
  310. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
  311. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +120 -0
  312. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  313. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
  314. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
  315. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
  316. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
  317. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +275 -0
  318. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
  319. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +644 -0
  320. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
  321. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +49 -0
  322. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
  323. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +898 -0
  324. package/node_modules/@blockcast/mmt-fec/package.json +79 -0
  325. package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +369 -0
  326. package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +277 -0
  327. package/node_modules/@blockcast/mmt-fec/src/cmaf-recovery.ts +127 -0
  328. package/node_modules/@blockcast/mmt-fec/src/cmaf-symbols.ts +68 -0
  329. package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +332 -0
  330. package/node_modules/@blockcast/mmt-fec/src/index.ts +77 -0
  331. package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +34 -0
  332. package/node_modules/@blockcast/mmt-fec/src/oti.ts +319 -0
  333. package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +101 -0
  334. package/node_modules/@blockcast/mmt-manifest-verify/dist/.build-stamp +0 -0
  335. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts +28 -0
  336. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts.map +1 -0
  337. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js +128 -0
  338. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js.map +1 -0
  339. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts +4 -0
  340. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts.map +1 -0
  341. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js +4 -0
  342. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js.map +1 -0
  343. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts +37 -0
  344. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts.map +1 -0
  345. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js +179 -0
  346. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js.map +1 -0
  347. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts +90 -0
  348. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts.map +1 -0
  349. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js +462 -0
  350. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js.map +1 -0
  351. package/node_modules/@blockcast/mmt-manifest-verify/package.json +45 -0
  352. package/node_modules/@blockcast/mmt-manifest-verify/src/admission.ts +171 -0
  353. package/node_modules/@blockcast/mmt-manifest-verify/src/index.ts +3 -0
  354. package/node_modules/@blockcast/mmt-manifest-verify/src/source-auth.ts +230 -0
  355. package/node_modules/@blockcast/mmt-manifest-verify/src/verifier.ts +636 -0
  356. package/node_modules/@noble/hashes/LICENSE +21 -0
  357. package/node_modules/@noble/hashes/README.md +521 -0
  358. package/node_modules/@noble/hashes/_assert.d.ts +17 -0
  359. package/node_modules/@noble/hashes/_assert.d.ts.map +1 -0
  360. package/node_modules/@noble/hashes/_assert.js +18 -0
  361. package/node_modules/@noble/hashes/_assert.js.map +1 -0
  362. package/node_modules/@noble/hashes/_blake.d.ts +14 -0
  363. package/node_modules/@noble/hashes/_blake.d.ts.map +1 -0
  364. package/node_modules/@noble/hashes/_blake.js +50 -0
  365. package/node_modules/@noble/hashes/_blake.js.map +1 -0
  366. package/node_modules/@noble/hashes/_md.d.ts +51 -0
  367. package/node_modules/@noble/hashes/_md.d.ts.map +1 -0
  368. package/node_modules/@noble/hashes/_md.js +162 -0
  369. package/node_modules/@noble/hashes/_md.js.map +1 -0
  370. package/node_modules/@noble/hashes/_u64.d.ts +55 -0
  371. package/node_modules/@noble/hashes/_u64.d.ts.map +1 -0
  372. package/node_modules/@noble/hashes/_u64.js +90 -0
  373. package/node_modules/@noble/hashes/_u64.js.map +1 -0
  374. package/node_modules/@noble/hashes/argon2.d.ts +32 -0
  375. package/node_modules/@noble/hashes/argon2.d.ts.map +1 -0
  376. package/node_modules/@noble/hashes/argon2.js +401 -0
  377. package/node_modules/@noble/hashes/argon2.js.map +1 -0
  378. package/node_modules/@noble/hashes/blake1.d.ts +106 -0
  379. package/node_modules/@noble/hashes/blake1.d.ts.map +1 -0
  380. package/node_modules/@noble/hashes/blake1.js +459 -0
  381. package/node_modules/@noble/hashes/blake1.js.map +1 -0
  382. package/node_modules/@noble/hashes/blake2.d.ts +116 -0
  383. package/node_modules/@noble/hashes/blake2.d.ts.map +1 -0
  384. package/node_modules/@noble/hashes/blake2.js +420 -0
  385. package/node_modules/@noble/hashes/blake2.js.map +1 -0
  386. package/node_modules/@noble/hashes/blake2b.d.ts +11 -0
  387. package/node_modules/@noble/hashes/blake2b.d.ts.map +1 -0
  388. package/node_modules/@noble/hashes/blake2b.js +14 -0
  389. package/node_modules/@noble/hashes/blake2b.js.map +1 -0
  390. package/node_modules/@noble/hashes/blake2s.d.ts +20 -0
  391. package/node_modules/@noble/hashes/blake2s.d.ts.map +1 -0
  392. package/node_modules/@noble/hashes/blake2s.js +24 -0
  393. package/node_modules/@noble/hashes/blake2s.js.map +1 -0
  394. package/node_modules/@noble/hashes/blake3.d.ts +54 -0
  395. package/node_modules/@noble/hashes/blake3.d.ts.map +1 -0
  396. package/node_modules/@noble/hashes/blake3.js +255 -0
  397. package/node_modules/@noble/hashes/blake3.js.map +1 -0
  398. package/node_modules/@noble/hashes/crypto.d.ts +2 -0
  399. package/node_modules/@noble/hashes/crypto.d.ts.map +1 -0
  400. package/node_modules/@noble/hashes/crypto.js +5 -0
  401. package/node_modules/@noble/hashes/crypto.js.map +1 -0
  402. package/node_modules/@noble/hashes/cryptoNode.d.ts +2 -0
  403. package/node_modules/@noble/hashes/cryptoNode.d.ts.map +1 -0
  404. package/node_modules/@noble/hashes/cryptoNode.js +18 -0
  405. package/node_modules/@noble/hashes/cryptoNode.js.map +1 -0
  406. package/node_modules/@noble/hashes/eskdf.d.ts +47 -0
  407. package/node_modules/@noble/hashes/eskdf.d.ts.map +1 -0
  408. package/node_modules/@noble/hashes/eskdf.js +166 -0
  409. package/node_modules/@noble/hashes/eskdf.js.map +1 -0
  410. package/node_modules/@noble/hashes/esm/_assert.d.ts +17 -0
  411. package/node_modules/@noble/hashes/esm/_assert.d.ts.map +1 -0
  412. package/node_modules/@noble/hashes/esm/_assert.js +15 -0
  413. package/node_modules/@noble/hashes/esm/_assert.js.map +1 -0
  414. package/node_modules/@noble/hashes/esm/_blake.d.ts +14 -0
  415. package/node_modules/@noble/hashes/esm/_blake.d.ts.map +1 -0
  416. package/node_modules/@noble/hashes/esm/_blake.js +45 -0
  417. package/node_modules/@noble/hashes/esm/_blake.js.map +1 -0
  418. package/node_modules/@noble/hashes/esm/_md.d.ts +51 -0
  419. package/node_modules/@noble/hashes/esm/_md.d.ts.map +1 -0
  420. package/node_modules/@noble/hashes/esm/_md.js +155 -0
  421. package/node_modules/@noble/hashes/esm/_md.js.map +1 -0
  422. package/node_modules/@noble/hashes/esm/_u64.d.ts +55 -0
  423. package/node_modules/@noble/hashes/esm/_u64.d.ts.map +1 -0
  424. package/node_modules/@noble/hashes/esm/_u64.js +67 -0
  425. package/node_modules/@noble/hashes/esm/_u64.js.map +1 -0
  426. package/node_modules/@noble/hashes/esm/argon2.d.ts +32 -0
  427. package/node_modules/@noble/hashes/esm/argon2.d.ts.map +1 -0
  428. package/node_modules/@noble/hashes/esm/argon2.js +392 -0
  429. package/node_modules/@noble/hashes/esm/argon2.js.map +1 -0
  430. package/node_modules/@noble/hashes/esm/blake1.d.ts +106 -0
  431. package/node_modules/@noble/hashes/esm/blake1.d.ts.map +1 -0
  432. package/node_modules/@noble/hashes/esm/blake1.js +452 -0
  433. package/node_modules/@noble/hashes/esm/blake1.js.map +1 -0
  434. package/node_modules/@noble/hashes/esm/blake2.d.ts +116 -0
  435. package/node_modules/@noble/hashes/esm/blake2.d.ts.map +1 -0
  436. package/node_modules/@noble/hashes/esm/blake2.js +413 -0
  437. package/node_modules/@noble/hashes/esm/blake2.js.map +1 -0
  438. package/node_modules/@noble/hashes/esm/blake2b.d.ts +11 -0
  439. package/node_modules/@noble/hashes/esm/blake2b.d.ts.map +1 -0
  440. package/node_modules/@noble/hashes/esm/blake2b.js +11 -0
  441. package/node_modules/@noble/hashes/esm/blake2b.js.map +1 -0
  442. package/node_modules/@noble/hashes/esm/blake2s.d.ts +20 -0
  443. package/node_modules/@noble/hashes/esm/blake2s.d.ts.map +1 -0
  444. package/node_modules/@noble/hashes/esm/blake2s.js +21 -0
  445. package/node_modules/@noble/hashes/esm/blake2s.js.map +1 -0
  446. package/node_modules/@noble/hashes/esm/blake3.d.ts +54 -0
  447. package/node_modules/@noble/hashes/esm/blake3.d.ts.map +1 -0
  448. package/node_modules/@noble/hashes/esm/blake3.js +251 -0
  449. package/node_modules/@noble/hashes/esm/blake3.js.map +1 -0
  450. package/node_modules/@noble/hashes/esm/crypto.d.ts +2 -0
  451. package/node_modules/@noble/hashes/esm/crypto.d.ts.map +1 -0
  452. package/node_modules/@noble/hashes/esm/crypto.js +2 -0
  453. package/node_modules/@noble/hashes/esm/crypto.js.map +1 -0
  454. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts +2 -0
  455. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts.map +1 -0
  456. package/node_modules/@noble/hashes/esm/cryptoNode.js +15 -0
  457. package/node_modules/@noble/hashes/esm/cryptoNode.js.map +1 -0
  458. package/node_modules/@noble/hashes/esm/eskdf.d.ts +47 -0
  459. package/node_modules/@noble/hashes/esm/eskdf.d.ts.map +1 -0
  460. package/node_modules/@noble/hashes/esm/eskdf.js +160 -0
  461. package/node_modules/@noble/hashes/esm/eskdf.js.map +1 -0
  462. package/node_modules/@noble/hashes/esm/hkdf.d.ts +36 -0
  463. package/node_modules/@noble/hashes/esm/hkdf.d.ts.map +1 -0
  464. package/node_modules/@noble/hashes/esm/hkdf.js +82 -0
  465. package/node_modules/@noble/hashes/esm/hkdf.js.map +1 -0
  466. package/node_modules/@noble/hashes/esm/hmac.d.ts +35 -0
  467. package/node_modules/@noble/hashes/esm/hmac.d.ts.map +1 -0
  468. package/node_modules/@noble/hashes/esm/hmac.js +86 -0
  469. package/node_modules/@noble/hashes/esm/hmac.js.map +1 -0
  470. package/node_modules/@noble/hashes/esm/index.d.ts +2 -0
  471. package/node_modules/@noble/hashes/esm/index.d.ts.map +1 -0
  472. package/node_modules/@noble/hashes/esm/index.js +33 -0
  473. package/node_modules/@noble/hashes/esm/index.js.map +1 -0
  474. package/node_modules/@noble/hashes/esm/legacy.d.ts +71 -0
  475. package/node_modules/@noble/hashes/esm/legacy.d.ts.map +1 -0
  476. package/node_modules/@noble/hashes/esm/legacy.js +281 -0
  477. package/node_modules/@noble/hashes/esm/legacy.js.map +1 -0
  478. package/node_modules/@noble/hashes/esm/package.json +10 -0
  479. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts +23 -0
  480. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts.map +1 -0
  481. package/node_modules/@noble/hashes/esm/pbkdf2.js +97 -0
  482. package/node_modules/@noble/hashes/esm/pbkdf2.js.map +1 -0
  483. package/node_modules/@noble/hashes/esm/ripemd160.d.ts +13 -0
  484. package/node_modules/@noble/hashes/esm/ripemd160.d.ts.map +1 -0
  485. package/node_modules/@noble/hashes/esm/ripemd160.js +13 -0
  486. package/node_modules/@noble/hashes/esm/ripemd160.js.map +1 -0
  487. package/node_modules/@noble/hashes/esm/scrypt.d.ts +34 -0
  488. package/node_modules/@noble/hashes/esm/scrypt.d.ts.map +1 -0
  489. package/node_modules/@noble/hashes/esm/scrypt.js +228 -0
  490. package/node_modules/@noble/hashes/esm/scrypt.js.map +1 -0
  491. package/node_modules/@noble/hashes/esm/sha1.d.ts +11 -0
  492. package/node_modules/@noble/hashes/esm/sha1.d.ts.map +1 -0
  493. package/node_modules/@noble/hashes/esm/sha1.js +11 -0
  494. package/node_modules/@noble/hashes/esm/sha1.js.map +1 -0
  495. package/node_modules/@noble/hashes/esm/sha2.d.ts +159 -0
  496. package/node_modules/@noble/hashes/esm/sha2.d.ts.map +1 -0
  497. package/node_modules/@noble/hashes/esm/sha2.js +375 -0
  498. package/node_modules/@noble/hashes/esm/sha2.js.map +1 -0
  499. package/node_modules/@noble/hashes/esm/sha256.d.ts +20 -0
  500. package/node_modules/@noble/hashes/esm/sha256.d.ts.map +1 -0
  501. package/node_modules/@noble/hashes/esm/sha256.js +20 -0
  502. package/node_modules/@noble/hashes/esm/sha256.js.map +1 -0
  503. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts +142 -0
  504. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts.map +1 -0
  505. package/node_modules/@noble/hashes/esm/sha3-addons.js +393 -0
  506. package/node_modules/@noble/hashes/esm/sha3-addons.js.map +1 -0
  507. package/node_modules/@noble/hashes/esm/sha3.d.ts +53 -0
  508. package/node_modules/@noble/hashes/esm/sha3.d.ts.map +1 -0
  509. package/node_modules/@noble/hashes/esm/sha3.js +234 -0
  510. package/node_modules/@noble/hashes/esm/sha3.js.map +1 -0
  511. package/node_modules/@noble/hashes/esm/sha512.d.ts +26 -0
  512. package/node_modules/@noble/hashes/esm/sha512.d.ts.map +1 -0
  513. package/node_modules/@noble/hashes/esm/sha512.js +26 -0
  514. package/node_modules/@noble/hashes/esm/sha512.js.map +1 -0
  515. package/node_modules/@noble/hashes/esm/utils.d.ts +161 -0
  516. package/node_modules/@noble/hashes/esm/utils.d.ts.map +1 -0
  517. package/node_modules/@noble/hashes/esm/utils.js +281 -0
  518. package/node_modules/@noble/hashes/esm/utils.js.map +1 -0
  519. package/node_modules/@noble/hashes/hkdf.d.ts +36 -0
  520. package/node_modules/@noble/hashes/hkdf.d.ts.map +1 -0
  521. package/node_modules/@noble/hashes/hkdf.js +88 -0
  522. package/node_modules/@noble/hashes/hkdf.js.map +1 -0
  523. package/node_modules/@noble/hashes/hmac.d.ts +35 -0
  524. package/node_modules/@noble/hashes/hmac.d.ts.map +1 -0
  525. package/node_modules/@noble/hashes/hmac.js +91 -0
  526. package/node_modules/@noble/hashes/hmac.js.map +1 -0
  527. package/node_modules/@noble/hashes/index.d.ts +1 -0
  528. package/node_modules/@noble/hashes/index.d.ts.map +1 -0
  529. package/node_modules/@noble/hashes/index.js +33 -0
  530. package/node_modules/@noble/hashes/index.js.map +1 -0
  531. package/node_modules/@noble/hashes/legacy.d.ts +71 -0
  532. package/node_modules/@noble/hashes/legacy.d.ts.map +1 -0
  533. package/node_modules/@noble/hashes/legacy.js +287 -0
  534. package/node_modules/@noble/hashes/legacy.js.map +1 -0
  535. package/node_modules/@noble/hashes/package.json +266 -0
  536. package/node_modules/@noble/hashes/pbkdf2.d.ts +23 -0
  537. package/node_modules/@noble/hashes/pbkdf2.d.ts.map +1 -0
  538. package/node_modules/@noble/hashes/pbkdf2.js +101 -0
  539. package/node_modules/@noble/hashes/pbkdf2.js.map +1 -0
  540. package/node_modules/@noble/hashes/ripemd160.d.ts +13 -0
  541. package/node_modules/@noble/hashes/ripemd160.d.ts.map +1 -0
  542. package/node_modules/@noble/hashes/ripemd160.js +16 -0
  543. package/node_modules/@noble/hashes/ripemd160.js.map +1 -0
  544. package/node_modules/@noble/hashes/scrypt.d.ts +34 -0
  545. package/node_modules/@noble/hashes/scrypt.d.ts.map +1 -0
  546. package/node_modules/@noble/hashes/scrypt.js +232 -0
  547. package/node_modules/@noble/hashes/scrypt.js.map +1 -0
  548. package/node_modules/@noble/hashes/sha1.d.ts +11 -0
  549. package/node_modules/@noble/hashes/sha1.d.ts.map +1 -0
  550. package/node_modules/@noble/hashes/sha1.js +14 -0
  551. package/node_modules/@noble/hashes/sha1.js.map +1 -0
  552. package/node_modules/@noble/hashes/sha2.d.ts +159 -0
  553. package/node_modules/@noble/hashes/sha2.d.ts.map +1 -0
  554. package/node_modules/@noble/hashes/sha2.js +384 -0
  555. package/node_modules/@noble/hashes/sha2.js.map +1 -0
  556. package/node_modules/@noble/hashes/sha256.d.ts +20 -0
  557. package/node_modules/@noble/hashes/sha256.d.ts.map +1 -0
  558. package/node_modules/@noble/hashes/sha256.js +23 -0
  559. package/node_modules/@noble/hashes/sha256.js.map +1 -0
  560. package/node_modules/@noble/hashes/sha3-addons.d.ts +142 -0
  561. package/node_modules/@noble/hashes/sha3-addons.d.ts.map +1 -0
  562. package/node_modules/@noble/hashes/sha3-addons.js +402 -0
  563. package/node_modules/@noble/hashes/sha3-addons.js.map +1 -0
  564. package/node_modules/@noble/hashes/sha3.d.ts +53 -0
  565. package/node_modules/@noble/hashes/sha3.d.ts.map +1 -0
  566. package/node_modules/@noble/hashes/sha3.js +239 -0
  567. package/node_modules/@noble/hashes/sha3.js.map +1 -0
  568. package/node_modules/@noble/hashes/sha512.d.ts +26 -0
  569. package/node_modules/@noble/hashes/sha512.d.ts.map +1 -0
  570. package/node_modules/@noble/hashes/sha512.js +29 -0
  571. package/node_modules/@noble/hashes/sha512.js.map +1 -0
  572. package/node_modules/@noble/hashes/src/_assert.ts +22 -0
  573. package/node_modules/@noble/hashes/src/_blake.ts +50 -0
  574. package/node_modules/@noble/hashes/src/_md.ts +176 -0
  575. package/node_modules/@noble/hashes/src/_u64.ts +91 -0
  576. package/node_modules/@noble/hashes/src/argon2.ts +497 -0
  577. package/node_modules/@noble/hashes/src/blake1.ts +534 -0
  578. package/node_modules/@noble/hashes/src/blake2.ts +486 -0
  579. package/node_modules/@noble/hashes/src/blake2b.ts +10 -0
  580. package/node_modules/@noble/hashes/src/blake2s.ts +20 -0
  581. package/node_modules/@noble/hashes/src/blake3.ts +272 -0
  582. package/node_modules/@noble/hashes/src/crypto.ts +9 -0
  583. package/node_modules/@noble/hashes/src/cryptoNode.ts +15 -0
  584. package/node_modules/@noble/hashes/src/eskdf.ts +187 -0
  585. package/node_modules/@noble/hashes/src/hkdf.ts +88 -0
  586. package/node_modules/@noble/hashes/src/hmac.ts +94 -0
  587. package/node_modules/@noble/hashes/src/index.ts +31 -0
  588. package/node_modules/@noble/hashes/src/legacy.ts +293 -0
  589. package/node_modules/@noble/hashes/src/pbkdf2.ts +122 -0
  590. package/node_modules/@noble/hashes/src/ripemd160.ts +12 -0
  591. package/node_modules/@noble/hashes/src/scrypt.ts +257 -0
  592. package/node_modules/@noble/hashes/src/sha1.ts +10 -0
  593. package/node_modules/@noble/hashes/src/sha2.ts +402 -0
  594. package/node_modules/@noble/hashes/src/sha256.ts +24 -0
  595. package/node_modules/@noble/hashes/src/sha3-addons.ts +499 -0
  596. package/node_modules/@noble/hashes/src/sha3.ts +258 -0
  597. package/node_modules/@noble/hashes/src/sha512.ts +34 -0
  598. package/node_modules/@noble/hashes/src/utils.ts +395 -0
  599. package/node_modules/@noble/hashes/utils.d.ts +161 -0
  600. package/node_modules/@noble/hashes/utils.d.ts.map +1 -0
  601. package/node_modules/@noble/hashes/utils.js +313 -0
  602. package/node_modules/@noble/hashes/utils.js.map +1 -0
  603. package/package.json +203 -0
  604. package/schemas/catalog.schema.json +283 -0
  605. package/src/align.ts +235 -0
  606. package/src/audio-init-parser.ts +189 -0
  607. package/src/audio-ring-buffer.ts +120 -0
  608. package/src/authored-timing.ts +63 -0
  609. package/src/carp-catalog.ts +776 -0
  610. package/src/catalog-fec-params.ts +167 -0
  611. package/src/catalog-network-source.ts +49 -0
  612. package/src/catalog-validator.ts +34 -0
  613. package/src/cmaf-block-assembler.ts +1058 -0
  614. package/src/cmaf-group-batcher.ts +104 -0
  615. package/src/cmcd-producer.ts +329 -0
  616. package/src/codec-utils.ts +1539 -0
  617. package/src/fec-codec.ts +61 -0
  618. package/src/fec-manager.ts +1939 -0
  619. package/src/fec-starvation-detector.ts +128 -0
  620. package/src/fec-worker-setup.ts +177 -0
  621. package/src/fmp4-completion.ts +47 -0
  622. package/src/fmp4-reader.ts +112 -0
  623. package/src/index.ts +443 -0
  624. package/src/iso-bmff-timing.ts +688 -0
  625. package/src/loc.ts +181 -0
  626. package/src/manifest-auth-plan.ts +107 -0
  627. package/src/media-router.ts +1185 -0
  628. package/src/mfu-reassembler.ts +2842 -0
  629. package/src/mfu-reassembly-policy.ts +134 -0
  630. package/src/mmtp-container-parser.ts +1498 -0
  631. package/src/mmtp-decode-pipeline.ts +315 -0
  632. package/src/mmtp-router.ts +3027 -0
  633. package/src/mmtp-to-cmaf.ts +956 -0
  634. package/src/multicast-auth-catalog.ts +340 -0
  635. package/src/multicast-input.ts +439 -0
  636. package/src/multicast-manager.ts +1503 -0
  637. package/src/multicast-transport.ts +320 -0
  638. package/src/multicast-unwrap.ts +132 -0
  639. package/src/no-modules.ts +20 -0
  640. package/src/phase14-catalog-override.ts +336 -0
  641. package/src/repair-fetch.ts +217 -0
  642. package/src/sample-combiner.ts +846 -0
  643. package/src/signaling.ts +78 -0
  644. package/src/source-auth.ts +1 -0
  645. package/src/switching-set-alignment.ts +109 -0
  646. package/src/timestamp-codec.ts +265 -0
  647. package/src/track-pipeline-setup.ts +189 -0
  648. package/src/track-pipeline.ts +332 -0
  649. package/src/track-session.ts +778 -0
  650. package/src/transport-pool.ts +128 -0
  651. package/src/wasm-mfu-reassembler.ts +372 -0
  652. package/src/wasm-mmtp-container-parser.ts +23 -0
  653. package/test-vectors/align.json +199 -0
  654. package/test-vectors/catalog/README.md +25 -0
  655. package/test-vectors/catalog/negative/legacy-selection-params.json +15 -0
  656. package/test-vectors/catalog/negative/missing-mmtp-fields.json +12 -0
  657. package/test-vectors/catalog/negative/multicast-auth-padded-key.json +37 -0
  658. package/test-vectors/catalog/negative/multicast-auth-reused-track-format.json +53 -0
  659. package/test-vectors/catalog/negative/multicast-auth-trailing-pad-bits.json +37 -0
  660. package/test-vectors/catalog/negative/multicast-endpoint-missing-protocol-and-source.json +24 -0
  661. package/test-vectors/catalog/negative/network-source-object.json +25 -0
  662. package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +26 -0
  663. package/test-vectors/catalog/negative/repair-track-legacy-shape.json +18 -0
  664. package/test-vectors/catalog/negative/track-role-empty.json +16 -0
  665. package/test-vectors/catalog/negative/track-role-non-string.json +16 -0
  666. package/test-vectors/catalog/positive/fec-multicast.json +51 -0
  667. package/test-vectors/catalog/positive/flat-av.json +30 -0
  668. package/test-vectors/catalog/positive/multicast-auth-rotation.json +55 -0
  669. package/test-vectors/catalog/positive/ticks-and-mixed-timescales.json +39 -0
  670. package/test-vectors/catalog/positive/track-role.json +49 -0
  671. package/test-vectors/catalog/releases/moqcast-native-v16-v1/catalog.json +65 -0
  672. package/test-vectors/catalog/releases/moqcast-native-v16-v1.archive.sha256 +1 -0
  673. package/test-vectors/catalog-multicast-auth-v1.json +26 -0
  674. package/test-vectors/catalog-validation.json +148 -0
  675. package/test-vectors/catalog-validator-public-api.mjs +25 -0
  676. package/test-vectors/generate-source-auth-fixture.mjs +114 -0
  677. package/test-vectors/source-auth-v1.json +61 -0
  678. package/test-vectors/subsample-placement-v1.json +230 -0
@@ -0,0 +1,597 @@
1
+ var __typeError = (msg) => {
2
+ throw TypeError(msg);
3
+ };
4
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
8
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
9
+
10
+ // src/transport-pool.ts
11
+ var _subs, _options, _failedCb, _stats;
12
+ var TransportPool = class {
13
+ constructor(options) {
14
+ __privateAdd(this, _subs, /* @__PURE__ */ new Map());
15
+ __privateAdd(this, _options);
16
+ __privateAdd(this, _failedCb, null);
17
+ __privateAdd(this, _stats, { activeSubscriptions: 0, totalAcquires: 0, totalReleases: 0 });
18
+ __privateSet(this, _options, options ?? {});
19
+ }
20
+ /** Register callback for subscription failures. */
21
+ onSubscriptionFailed(cb) {
22
+ __privateSet(this, _failedCb, cb);
23
+ }
24
+ acquireSubscription(keyOrOpts, consumer) {
25
+ const key = typeof keyOrOpts === "string" ? keyOrOpts : keyOrOpts.key;
26
+ const cons = typeof keyOrOpts === "string" ? consumer : keyOrOpts.consumer;
27
+ const mode = typeof keyOrOpts === "object" ? keyOrOpts.mode : "moq";
28
+ let sub = __privateGet(this, _subs).get(key);
29
+ if (!sub) {
30
+ sub = { key, mode, consumers: /* @__PURE__ */ new Set() };
31
+ __privateGet(this, _subs).set(key, sub);
32
+ __privateGet(this, _stats).activeSubscriptions++;
33
+ }
34
+ ;
35
+ sub.consumers.add(cons);
36
+ __privateGet(this, _stats).totalAcquires++;
37
+ return sub;
38
+ }
39
+ /** Release a subscription for a consumer. Closes if last consumer. */
40
+ releaseSubscription(key, consumer) {
41
+ const sub = __privateGet(this, _subs).get(key);
42
+ if (!sub) return;
43
+ sub.consumers.delete(consumer);
44
+ __privateGet(this, _stats).totalReleases++;
45
+ if (sub.consumers.size === 0) {
46
+ __privateGet(this, _subs).delete(key);
47
+ __privateGet(this, _stats).activeSubscriptions--;
48
+ }
49
+ }
50
+ /** Release all subscriptions held by a consumer. */
51
+ releaseAllForConsumer(consumer) {
52
+ for (const [key, sub] of __privateGet(this, _subs)) {
53
+ ;
54
+ sub.consumers.delete(consumer);
55
+ if (sub.consumers.size === 0) {
56
+ __privateGet(this, _subs).delete(key);
57
+ __privateGet(this, _stats).activeSubscriptions--;
58
+ }
59
+ }
60
+ }
61
+ /** Report a subscription failure. */
62
+ reportFailure(key, error) {
63
+ var _a;
64
+ const sub = __privateGet(this, _subs).get(key);
65
+ if (sub) (_a = __privateGet(this, _failedCb)) == null ? void 0 : _a.call(this, { key, consumers: sub.consumers, error });
66
+ }
67
+ /** Get stats. */
68
+ get stats() {
69
+ return __privateGet(this, _stats);
70
+ }
71
+ /** Clean up all subscriptions. */
72
+ dispose() {
73
+ __privateGet(this, _subs).clear();
74
+ __privateSet(this, _failedCb, null);
75
+ __privateGet(this, _stats).activeSubscriptions = 0;
76
+ }
77
+ /** Number of active subscriptions. */
78
+ get size() {
79
+ return __privateGet(this, _subs).size;
80
+ }
81
+ };
82
+ _subs = new WeakMap();
83
+ _options = new WeakMap();
84
+ _failedCb = new WeakMap();
85
+ _stats = new WeakMap();
86
+
87
+ // src/track-session.ts
88
+ import { deriveFecInterleaveDepth } from "@blockcast/mmt-fec";
89
+ function computeFecLossWindowMs(fecInterleaveMs, fecK, jitterBufferMs) {
90
+ return computeFecDeliveryWindowMs({
91
+ interleaveDepthMs: fecInterleaveMs,
92
+ sourceSymbols: fecK,
93
+ jitterBufferMs
94
+ });
95
+ }
96
+ function computeFecDeliveryWindowMs(config) {
97
+ const fecInterleaveMs = config.interleaveDepthMs;
98
+ const fecK = config.sourceSymbols;
99
+ if (fecInterleaveMs <= 0) {
100
+ throw new Error(
101
+ `[TrackSession] fecInterleaveMs=${fecInterleaveMs}. Derive a positive FEC interleave window from the stream catalog.`
102
+ );
103
+ }
104
+ if (fecK <= 0) {
105
+ throw new Error(
106
+ `[TrackSession] fecK=${fecK}. Derive a positive FEC source-symbol count from the stream catalog.`
107
+ );
108
+ }
109
+ const spansMs = [fecInterleaveMs];
110
+ if (config.mediaUnitsPerSecond && config.mediaUnitsPerSecond > 0) {
111
+ const mediaUnitMs = 1e3 / config.mediaUnitsPerSecond;
112
+ const interleaveUnits = deriveFecInterleaveDepth(fecInterleaveMs, mediaUnitMs);
113
+ const deliverySymbols = fecK + Math.max(0, config.repairSymbols ?? 0);
114
+ spansMs.push(deliverySymbols * interleaveUnits * mediaUnitMs);
115
+ }
116
+ if (config.symbolSize && config.symbolSize > 0 && config.bandwidthBps && config.bandwidthBps > 0) {
117
+ const repairSymbols = Math.max(0, config.repairSymbols ?? 0);
118
+ spansMs.push(
119
+ (fecK + repairSymbols) * config.symbolSize * 8 * 1e3 / config.bandwidthBps
120
+ );
121
+ }
122
+ const coreMs = Math.max(...spansMs);
123
+ const marginMs = config.jitterBufferMs !== void 0 && config.jitterBufferMs >= 0 ? config.jitterBufferMs : fecInterleaveMs;
124
+ return Math.ceil(coreMs) + Math.ceil(marginMs);
125
+ }
126
+ function computeFecDeliveryWindowMediaUnits(config, timestampTimescale) {
127
+ if (!Number.isFinite(timestampTimescale) || timestampTimescale <= 0) {
128
+ throw new Error(
129
+ `[TrackSession] timestampTimescale=${timestampTimescale}. Derive a positive media timescale from the container.`
130
+ );
131
+ }
132
+ const deliveryWindow = Math.ceil(
133
+ computeFecDeliveryWindowMs(config) * timestampTimescale / 1e3
134
+ );
135
+ if (!Number.isSafeInteger(deliveryWindow)) {
136
+ throw new Error("[TrackSession] FEC delivery window exceeds the media timestamp range.");
137
+ }
138
+ return deliveryWindow;
139
+ }
140
+ var _state, _subscription, _hysteresisTimer, _joinDeadlineTimer, _previousPrimary, _manager, _suppressFired, _TrackSession_instances, transition_fn, clearHysteresis_fn, armJoinDeadline_fn, clearJoinDeadline_fn, suppress_fn, unsuppress_fn;
141
+ var TrackSession = class {
142
+ constructor(config, manager) {
143
+ __privateAdd(this, _TrackSession_instances);
144
+ __privateAdd(this, _state, "idle");
145
+ __privateAdd(this, _subscription, null);
146
+ __privateAdd(this, _hysteresisTimer, null);
147
+ __privateAdd(this, _joinDeadlineTimer, null);
148
+ __privateAdd(this, _previousPrimary, null);
149
+ __privateAdd(this, _manager);
150
+ // Single suppression authority flag (BLO-9413 failback coherence): every
151
+ // suppress this session fires is recorded here, and every path that leaves
152
+ // a suppressed state unwinds through #unsuppress(). Before this flag,
153
+ // unsubscribe() only un-suppressed from multicast/amt — a session torn down
154
+ // from `failing` (exactly where a starving track sits) was re-subscribed to
155
+ // unicast with the host's media still muted: MoQ playing into a dead sink.
156
+ __privateAdd(this, _suppressFired, false);
157
+ this.config = config;
158
+ __privateSet(this, _manager, manager);
159
+ }
160
+ // -----------------------------------------------------------------------
161
+ // State
162
+ // -----------------------------------------------------------------------
163
+ get state() {
164
+ return __privateGet(this, _state);
165
+ }
166
+ get subscription() {
167
+ return __privateGet(this, _subscription);
168
+ }
169
+ /** True while this session's onSuppress(true) is outstanding (no matching
170
+ * onSuppress(false) yet). Test/assertion surface for failback coherence. */
171
+ get isSuppressed() {
172
+ return __privateGet(this, _suppressFired);
173
+ }
174
+ /** Current active transport mode, or null if idle. */
175
+ get transport() {
176
+ switch (__privateGet(this, _state)) {
177
+ case "multicast":
178
+ return "multicast";
179
+ case "amt":
180
+ return "amt";
181
+ case "unicast":
182
+ return "moq";
183
+ case "unicast-fallback":
184
+ return "moq";
185
+ // SSM bridge absent — MoQ unicast is the only source
186
+ case "joining":
187
+ return "moq";
188
+ // MoQ still primary during join
189
+ case "failing":
190
+ return __privateGet(this, _previousPrimary);
191
+ default:
192
+ return null;
193
+ }
194
+ }
195
+ // -----------------------------------------------------------------------
196
+ // Computed (no magic numbers)
197
+ // -----------------------------------------------------------------------
198
+ /** Audio worklet latency: max(fecInterleaveMs, frameDurationMs * fecK).
199
+ * Returns undefined if frame duration unknown (no initData). */
200
+ get audioLatencyMs() {
201
+ const fd = this.frameDurationMs;
202
+ if (fd === void 0) {
203
+ return this.config.fecInterleaveMs > 0 ? this.config.fecInterleaveMs : void 0;
204
+ }
205
+ return Math.max(this.config.fecInterleaveMs, fd * this.config.fecK);
206
+ }
207
+ /** Frame duration in ms, derived from frameSamples + sampleRate. */
208
+ get frameDurationMs() {
209
+ const { frameSamples, sampleRate } = this.config;
210
+ if (!frameSamples || !sampleRate || sampleRate <= 0) return void 0;
211
+ return frameSamples / sampleRate * 1e3;
212
+ }
213
+ // -----------------------------------------------------------------------
214
+ // Transitions (Patent Claim 9)
215
+ // -----------------------------------------------------------------------
216
+ /** idle → unicast: player subscribes to this track. */
217
+ subscribe() {
218
+ if (__privateGet(this, _state) !== "idle") return;
219
+ __privateMethod(this, _TrackSession_instances, transition_fn).call(this, "unicast");
220
+ if (this.config.trackType === "audio") {
221
+ const latency = this.audioLatencyMs;
222
+ if (latency !== void 0) {
223
+ __privateGet(this, _manager).mmtp?.onTrackEvent?.(this.config.trackName, { type: "latency", latencyMs: latency }, this.config);
224
+ }
225
+ }
226
+ }
227
+ /** unicast → joining: multicast/AMT capability detected, join in progress. */
228
+ joinStarted() {
229
+ if (__privateGet(this, _state) !== "unicast") return;
230
+ __privateMethod(this, _TrackSession_instances, transition_fn).call(this, "joining");
231
+ __privateGet(this, _manager).mmtp?.onTrackEvent?.(this.config.trackName, { type: "fec-setup" }, this.config);
232
+ }
233
+ /**
234
+ * any non-fallback state → unicast-fallback. Used when the SSM bridge is
235
+ * absent (vanilla Chromium / no extension) and the host falls back to a
236
+ * MoQ unicast subscription per track. Terminal-ish: activateMulticast,
237
+ * failbackAll, and transportFailed are no-ops while in this state.
238
+ *
239
+ * Fires fec-setup so the per-track repair worker spins up — repair packets
240
+ * still flow over the MoQ repair-track subscription, so FEC source+repair
241
+ * can converge as in the multicast path.
242
+ *
243
+ * Audio latency is NOT re-emitted here: subscribe() already fires latency
244
+ * once on the idle → unicast edge, and enterUnicastFallback is only ever
245
+ * reached from a non-idle state (SessionManager skips idle sessions).
246
+ */
247
+ enterUnicastFallback() {
248
+ if (__privateGet(this, _state) === "unicast-fallback") return;
249
+ __privateMethod(this, _TrackSession_instances, clearHysteresis_fn).call(this);
250
+ __privateMethod(this, _TrackSession_instances, transition_fn).call(this, "unicast-fallback");
251
+ __privateMethod(this, _TrackSession_instances, suppress_fn).call(this);
252
+ __privateGet(this, _manager).mmtp?.onTrackEvent?.(this.config.trackName, { type: "fec-setup" }, this.config);
253
+ }
254
+ /**
255
+ * unicast-fallback → unicast. Called when the SSM bridge appears mid-session
256
+ * (extension installed after fallback engaged). Host first aborts the fallback
257
+ * drainers, then transitions sessions back to unicast so the regular
258
+ * multicast/AMT preference chain can take over via joinStarted().
259
+ */
260
+ exitUnicastFallback() {
261
+ if (__privateGet(this, _state) !== "unicast-fallback") return;
262
+ __privateMethod(this, _TrackSession_instances, transition_fn).call(this, "unicast");
263
+ __privateMethod(this, _TrackSession_instances, unsuppress_fn).call(this);
264
+ }
265
+ /**
266
+ * joining → multicast or amt: RAP received on the joined transport (Claim 9d).
267
+ * Resets audio worklet, then suppresses MoQ.
268
+ */
269
+ rapReceived(mode) {
270
+ if (__privateGet(this, _state) !== "joining") return;
271
+ __privateSet(this, _previousPrimary, mode);
272
+ __privateMethod(this, _TrackSession_instances, transition_fn).call(this, mode);
273
+ if (this.config.trackType === "audio") {
274
+ __privateGet(this, _manager).mmtp?.onTrackEvent?.(this.config.trackName, { type: "reset" }, this.config);
275
+ }
276
+ __privateMethod(this, _TrackSession_instances, suppress_fn).call(this);
277
+ }
278
+ /** multicast/amt → failing: loss detected, start hysteresis timer (Claim 9f). */
279
+ lossDetected() {
280
+ if (__privateGet(this, _state) !== "multicast" && __privateGet(this, _state) !== "amt") return;
281
+ __privateSet(this, _previousPrimary, __privateGet(this, _state));
282
+ __privateMethod(this, _TrackSession_instances, transition_fn).call(this, "failing");
283
+ const hysteresisMs = computeFecLossWindowMs(this.config.fecInterleaveMs, this.config.fecK);
284
+ __privateSet(this, _hysteresisTimer, setTimeout(() => {
285
+ this.hysteresisExpired();
286
+ }, hysteresisMs));
287
+ }
288
+ /** failing → previous primary: loss recovered within hysteresis window. */
289
+ lossRecovered() {
290
+ if (__privateGet(this, _state) !== "failing") return;
291
+ __privateMethod(this, _TrackSession_instances, clearHysteresis_fn).call(this);
292
+ if (__privateGet(this, _previousPrimary)) {
293
+ __privateMethod(this, _TrackSession_instances, transition_fn).call(this, __privateGet(this, _previousPrimary));
294
+ }
295
+ }
296
+ /**
297
+ * Transport failed (AMT relay down, multicast interface gone).
298
+ * Try next transport in preference chain.
299
+ */
300
+ transportFailed() {
301
+ __privateMethod(this, _TrackSession_instances, clearHysteresis_fn).call(this);
302
+ if (__privateGet(this, _state) === "unicast-fallback") return;
303
+ const current = __privateGet(this, _previousPrimary) ?? this.transport;
304
+ const prefs = this.config.preferredTransports;
305
+ const currentIdx = current ? prefs.indexOf(current) : -1;
306
+ const nextMode = prefs[currentIdx + 1];
307
+ if (nextMode) {
308
+ if (nextMode === "moq") {
309
+ __privateMethod(this, _TrackSession_instances, transition_fn).call(this, "unicast");
310
+ __privateMethod(this, _TrackSession_instances, unsuppress_fn).call(this);
311
+ if (this.config.trackType === "audio") {
312
+ __privateGet(this, _manager).mmtp?.onTrackEvent?.(this.config.trackName, { type: "reset" }, this.config);
313
+ }
314
+ } else {
315
+ __privateMethod(this, _TrackSession_instances, transition_fn).call(this, "joining");
316
+ __privateMethod(this, _TrackSession_instances, unsuppress_fn).call(this);
317
+ }
318
+ } else {
319
+ __privateMethod(this, _TrackSession_instances, transition_fn).call(this, "unicast");
320
+ __privateMethod(this, _TrackSession_instances, unsuppress_fn).call(this);
321
+ if (this.config.trackType === "audio") {
322
+ __privateGet(this, _manager).mmtp?.onTrackEvent?.(this.config.trackName, { type: "reset" }, this.config);
323
+ }
324
+ }
325
+ }
326
+ /** Hysteresis expired → failback to next transport (Claim 9g). */
327
+ hysteresisExpired() {
328
+ if (__privateGet(this, _state) !== "failing") return;
329
+ __privateMethod(this, _TrackSession_instances, clearHysteresis_fn).call(this);
330
+ this.transportFailed();
331
+ }
332
+ /** → idle: player unsubscribes / tab close / cleanup. */
333
+ unsubscribe() {
334
+ __privateMethod(this, _TrackSession_instances, clearHysteresis_fn).call(this);
335
+ if (__privateGet(this, _state) !== "idle") {
336
+ __privateMethod(this, _TrackSession_instances, transition_fn).call(this, "idle");
337
+ __privateMethod(this, _TrackSession_instances, unsuppress_fn).call(this);
338
+ }
339
+ }
340
+ /** True when SessionManager.enterUnicastFallback put this track into the
341
+ * host-driven unicast subscription mode. Host can iterate sessions to
342
+ * decide whether to keep its fallback drainer alive across MediaRouter
343
+ * arbitration events. */
344
+ get isUnicastFallback() {
345
+ return __privateGet(this, _state) === "unicast-fallback";
346
+ }
347
+ dispose() {
348
+ __privateMethod(this, _TrackSession_instances, clearHysteresis_fn).call(this);
349
+ __privateMethod(this, _TrackSession_instances, clearJoinDeadline_fn).call(this);
350
+ __privateSet(this, _state, "idle");
351
+ __privateSet(this, _subscription, null);
352
+ }
353
+ };
354
+ _state = new WeakMap();
355
+ _subscription = new WeakMap();
356
+ _hysteresisTimer = new WeakMap();
357
+ _joinDeadlineTimer = new WeakMap();
358
+ _previousPrimary = new WeakMap();
359
+ _manager = new WeakMap();
360
+ _suppressFired = new WeakMap();
361
+ _TrackSession_instances = new WeakSet();
362
+ // -----------------------------------------------------------------------
363
+ // Internal
364
+ // -----------------------------------------------------------------------
365
+ transition_fn = function(to) {
366
+ const from = __privateGet(this, _state);
367
+ if (from === to) return;
368
+ __privateSet(this, _state, to);
369
+ if (from === "joining") __privateMethod(this, _TrackSession_instances, clearJoinDeadline_fn).call(this);
370
+ if (to === "joining") __privateMethod(this, _TrackSession_instances, armJoinDeadline_fn).call(this);
371
+ const fecActive = (s) => s === "joining" || s === "multicast" || s === "amt" || s === "failing" || s === "unicast-fallback";
372
+ if (fecActive(from) && !fecActive(to)) {
373
+ __privateGet(this, _manager).mmtp?.onTrackEvent?.(this.config.trackName, { type: "fec-teardown" }, this.config);
374
+ }
375
+ __privateGet(this, _manager).callbacks?.onStateChange?.(this.config.trackName, from, to);
376
+ };
377
+ clearHysteresis_fn = function() {
378
+ if (__privateGet(this, _hysteresisTimer) !== null) {
379
+ clearTimeout(__privateGet(this, _hysteresisTimer));
380
+ __privateSet(this, _hysteresisTimer, null);
381
+ }
382
+ };
383
+ armJoinDeadline_fn = function() {
384
+ __privateMethod(this, _TrackSession_instances, clearJoinDeadline_fn).call(this);
385
+ const deadlineMs = __privateGet(this, _manager).takeoverDeadlineMs;
386
+ if (deadlineMs <= 0) return;
387
+ __privateSet(this, _joinDeadlineTimer, setTimeout(() => {
388
+ __privateSet(this, _joinDeadlineTimer, null);
389
+ if (__privateGet(this, _state) !== "joining") return;
390
+ __privateMethod(this, _TrackSession_instances, transition_fn).call(this, "unicast");
391
+ __privateGet(this, _manager).callbacks?.onTakeoverTimeout?.(this.config.trackName);
392
+ }, deadlineMs));
393
+ };
394
+ clearJoinDeadline_fn = function() {
395
+ if (__privateGet(this, _joinDeadlineTimer) !== null) {
396
+ clearTimeout(__privateGet(this, _joinDeadlineTimer));
397
+ __privateSet(this, _joinDeadlineTimer, null);
398
+ }
399
+ };
400
+ /** Fire onSuppress(true) exactly once per suppression epoch. */
401
+ suppress_fn = function() {
402
+ if (__privateGet(this, _suppressFired)) return;
403
+ __privateSet(this, _suppressFired, true);
404
+ __privateGet(this, _manager).callbacks?.onSuppress?.(this.config.trackName, true);
405
+ };
406
+ /** Unwind an outstanding suppression; no-op when none is outstanding. */
407
+ unsuppress_fn = function() {
408
+ if (!__privateGet(this, _suppressFired)) return;
409
+ __privateSet(this, _suppressFired, false);
410
+ __privateGet(this, _manager).callbacks?.onSuppress?.(this.config.trackName, false);
411
+ };
412
+ var SessionManager = class {
413
+ constructor(poolOptions) {
414
+ this.sessions = /* @__PURE__ */ new Map();
415
+ this.callbacks = null;
416
+ /**
417
+ * Takeover deadline (BLO-9413/D9): max time a session may sit in `joining`
418
+ * without a RAP before returning to `unicast` and firing onTakeoverTimeout.
419
+ * MoQ is never suppressed during `joining`, so expiry is a silent abandon —
420
+ * playback never glitches. Hosts tune per stream (e.g. GOP length); 0
421
+ * disables.
422
+ */
423
+ this.takeoverDeadlineMs = 5e3;
424
+ this.pool = new TransportPool(poolOptions);
425
+ this.pool.onSubscriptionFailed((sub) => {
426
+ for (const trackName of sub.consumers) {
427
+ const session = this.sessions.get(trackName);
428
+ if (session) session.transportFailed();
429
+ }
430
+ });
431
+ }
432
+ /** Narrow to MMTP callbacks (onTrackEvent). Safe — optional chaining handles PIM-only consumers. */
433
+ get mmtp() {
434
+ return this.callbacks;
435
+ }
436
+ // -----------------------------------------------------------------------
437
+ // Track management
438
+ // -----------------------------------------------------------------------
439
+ /** Add a track session from catalog config. */
440
+ addTrack(config) {
441
+ if (this.sessions.has(config.trackName)) {
442
+ throw new Error(`[SessionManager] Track "${config.trackName}" already exists`);
443
+ }
444
+ const session = new TrackSession(config, this);
445
+ this.sessions.set(config.trackName, session);
446
+ return session;
447
+ }
448
+ /** Remove a track session. Releases subscription with grace period. */
449
+ removeTrack(trackName) {
450
+ const session = this.sessions.get(trackName);
451
+ if (!session) return;
452
+ session.unsubscribe();
453
+ const subKey = session.config.multicastKey ?? session.config.moqTrackName;
454
+ if (subKey) this.pool.releaseSubscription(subKey, trackName);
455
+ session.dispose();
456
+ this.sessions.delete(trackName);
457
+ }
458
+ // -----------------------------------------------------------------------
459
+ // Atomic multi-track operations
460
+ // -----------------------------------------------------------------------
461
+ /**
462
+ * All tracks with multicast RAP → multicast state (atomic).
463
+ * Called when MediaRouter fires onSourceSwitch('multicast').
464
+ * Prevents split-brain between video and audio.
465
+ *
466
+ * A takeover deadline can return a track from `joining` to `unicast` while
467
+ * the multicast socket keeps delivering packets. If a valid RAP arrives
468
+ * later, allow that late-RAP edge to suppress unicast and promote multicast.
469
+ */
470
+ activateMulticast() {
471
+ for (const [, session] of this.sessions) {
472
+ if (session.state === "unicast") {
473
+ session.joinStarted();
474
+ }
475
+ if (session.state === "joining") {
476
+ session.rapReceived("multicast");
477
+ }
478
+ }
479
+ }
480
+ /**
481
+ * All tracks with AMT RAP → amt state (atomic).
482
+ */
483
+ activateAmt() {
484
+ for (const [, session] of this.sessions) {
485
+ if (session.state === "unicast") {
486
+ session.joinStarted();
487
+ }
488
+ if (session.state === "joining") {
489
+ session.rapReceived("amt");
490
+ }
491
+ }
492
+ }
493
+ /**
494
+ * All tracks → unicast (failback, atomic).
495
+ * Called when MulticastManager fires onFailback().
496
+ * unicast-fallback sessions are skipped — the host owns those subscriptions
497
+ * and they must drain uninterrupted across transport-state events.
498
+ *
499
+ * Coherence invariant (BLO-9413): after this returns, every non-fallback
500
+ * session is `unicast` (or `idle`) AND unsuppressed — unsubscribe() unwinds
501
+ * any outstanding suppression regardless of the state it tears down from
502
+ * (`failing` included; see TrackSession.#suppressFired).
503
+ */
504
+ failbackAll() {
505
+ for (const [, session] of this.sessions) {
506
+ if (session.state !== "idle" && session.state !== "unicast" && session.state !== "unicast-fallback") {
507
+ session.unsubscribe();
508
+ session.subscribe();
509
+ }
510
+ }
511
+ }
512
+ /**
513
+ * All tracks → unicast-fallback (atomic).
514
+ * Called by the host when the multicast gateway is absent and
515
+ * the player will subscribe to source tracks over MoQ unicast and feed
516
+ * packets via MulticastManager.feedUnicastSource() (or manager.router
517
+ * directly). Sessions in this state stay terminal until the host calls
518
+ * unsubscribe() / disposes the SessionManager.
519
+ */
520
+ enterUnicastFallback() {
521
+ for (const [, session] of this.sessions) {
522
+ if (session.state === "idle") continue;
523
+ session.enterUnicastFallback();
524
+ }
525
+ }
526
+ /**
527
+ * True if any session is currently in unicast-fallback. Hosts use this to
528
+ * gate `multicastTrack.close()` on failback events — closing the shared
529
+ * broadcast would kill the host's fallback drainers.
530
+ */
531
+ hasActiveFallback() {
532
+ for (const [, session] of this.sessions) {
533
+ if (session.isUnicastFallback) return true;
534
+ }
535
+ return false;
536
+ }
537
+ /**
538
+ * All fallback tracks → unicast (atomic).
539
+ * Called when the SSM bridge appears mid-session and the host has aborted
540
+ * the fallback drainers. The session re-enters the regular preference chain
541
+ * via joinStarted() (issued by the host immediately after).
542
+ */
543
+ exitUnicastFallback() {
544
+ for (const [, session] of this.sessions) {
545
+ if (session.isUnicastFallback) session.exitUnicastFallback();
546
+ }
547
+ }
548
+ // -----------------------------------------------------------------------
549
+ // Cleanup lifecycle
550
+ // -----------------------------------------------------------------------
551
+ /** Tab closed — release all subscriptions for this tab (grace period). */
552
+ tabClosed(tabId) {
553
+ for (const [trackName, session] of this.sessions) {
554
+ session.unsubscribe();
555
+ this.pool.releaseAllForConsumer(trackName);
556
+ }
557
+ }
558
+ /** Bridge WebTransport connection dropped — same as tab close. */
559
+ bridgeDisconnected() {
560
+ this.tabClosed("bridge");
561
+ }
562
+ /**
563
+ * Track selection changed (user or ABR).
564
+ * Old track released (grace period), new track subscribed.
565
+ */
566
+ trackSelectionChanged(oldTrackName, newConfig) {
567
+ this.removeTrack(oldTrackName);
568
+ const session = this.addTrack(newConfig);
569
+ session.subscribe();
570
+ }
571
+ // -----------------------------------------------------------------------
572
+ // Query
573
+ // -----------------------------------------------------------------------
574
+ /** Get a track session by name. */
575
+ getTrack(trackName) {
576
+ return this.sessions.get(trackName);
577
+ }
578
+ // -----------------------------------------------------------------------
579
+ // Cleanup
580
+ // -----------------------------------------------------------------------
581
+ dispose() {
582
+ for (const [, session] of this.sessions) {
583
+ session.dispose();
584
+ }
585
+ this.sessions.clear();
586
+ this.pool.dispose();
587
+ this.callbacks = null;
588
+ }
589
+ };
590
+ export {
591
+ SessionManager,
592
+ TrackSession,
593
+ computeFecDeliveryWindowMediaUnits,
594
+ computeFecDeliveryWindowMs,
595
+ computeFecLossWindowMs
596
+ };
597
+ //# sourceMappingURL=track-session.js.map