@blockcast/mmt-container 0.3.0 → 0.4.0-main.d6f2737828fc

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 (588) hide show
  1. package/README.md +22 -8
  2. package/dist/browser-runtime.js +1185 -1049
  3. package/dist/browser-runtime.js.map +4 -4
  4. package/dist/carp-catalog.d.ts +24 -8
  5. package/dist/carp-catalog.d.ts.map +1 -1
  6. package/dist/carp-catalog.js +21 -8
  7. package/dist/carp-catalog.js.map +2 -2
  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 +59 -17
  11. package/dist/catalog-fec-params.js.map +3 -3
  12. package/dist/catalog-network-source.js +0 -1
  13. package/dist/catalog-network-source.js.map +2 -2
  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/delta-fallback-config.d.ts +42 -0
  19. package/dist/delta-fallback-config.d.ts.map +1 -0
  20. package/dist/delta-fallback-config.js +59 -0
  21. package/dist/delta-fallback-config.js.map +7 -0
  22. package/dist/fec-manager.d.ts +35 -26
  23. package/dist/fec-manager.d.ts.map +1 -1
  24. package/dist/fec-manager.js +300 -273
  25. package/dist/fec-manager.js.map +2 -2
  26. package/dist/fec-state.d.ts +19 -31
  27. package/dist/fec-state.d.ts.map +1 -1
  28. package/dist/fec-state.js +3 -4
  29. package/dist/fec-state.js.map +2 -2
  30. package/dist/fec-worker-setup.d.ts +16 -6
  31. package/dist/fec-worker-setup.d.ts.map +1 -1
  32. package/dist/fec-worker-setup.js +72 -34
  33. package/dist/fec-worker-setup.js.map +2 -2
  34. package/dist/index.d.ts +4 -3
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +12 -0
  37. package/dist/index.js.map +2 -2
  38. package/dist/iso-block-locator.js +0 -1
  39. package/dist/iso-block-locator.js.map +2 -2
  40. package/dist/media-router.d.ts +20 -8
  41. package/dist/media-router.d.ts.map +1 -1
  42. package/dist/media-router.js +46 -21
  43. package/dist/media-router.js.map +2 -2
  44. package/dist/mfu-reassembler.js +0 -1
  45. package/dist/mfu-reassembler.js.map +2 -2
  46. package/dist/mmtp-container-parser.d.ts +5 -0
  47. package/dist/mmtp-container-parser.d.ts.map +1 -1
  48. package/dist/mmtp-container-parser.js +22 -1
  49. package/dist/mmtp-container-parser.js.map +2 -2
  50. package/dist/mmtp-container-parser.no-modules.js +37 -9
  51. package/dist/mmtp-container-parser.no-modules.js.map +2 -2
  52. package/dist/mmtp-decode-pipeline.js +22 -1
  53. package/dist/mmtp-decode-pipeline.js.map +2 -2
  54. package/dist/mmtp-router.d.ts +36 -16
  55. package/dist/mmtp-router.d.ts.map +1 -1
  56. package/dist/mmtp-router.js +126 -213
  57. package/dist/mmtp-router.js.map +2 -2
  58. package/dist/multicast-input.js +0 -1
  59. package/dist/multicast-input.js.map +2 -2
  60. package/dist/multicast-manager.d.ts +33 -3
  61. package/dist/multicast-manager.d.ts.map +1 -1
  62. package/dist/multicast-manager.js +660 -529
  63. package/dist/multicast-manager.js.map +4 -4
  64. package/dist/multicast-transport.d.ts +1 -1
  65. package/dist/multicast-transport.d.ts.map +1 -1
  66. package/dist/multicast-transport.js +42 -14
  67. package/dist/multicast-transport.js.map +3 -3
  68. package/dist/multicast-unwrap.js +0 -1
  69. package/dist/multicast-unwrap.js.map +2 -2
  70. package/dist/no-modules.js +36 -8
  71. package/dist/no-modules.js.map +2 -2
  72. package/dist/repair-fetch.d.ts +30 -19
  73. package/dist/repair-fetch.d.ts.map +1 -1
  74. package/dist/repair-fetch.js +32 -18
  75. package/dist/repair-fetch.js.map +3 -3
  76. package/dist/repair-layers.d.ts +18 -7
  77. package/dist/repair-layers.d.ts.map +1 -1
  78. package/dist/repair-layers.js +11 -4
  79. package/dist/repair-layers.js.map +2 -2
  80. package/dist/signaling.js +0 -4
  81. package/dist/signaling.js.map +2 -2
  82. package/dist/timestamp-codec.js +0 -1
  83. package/dist/timestamp-codec.js.map +2 -2
  84. package/dist/track-session.d.ts +7 -0
  85. package/dist/track-session.d.ts.map +1 -1
  86. package/dist/track-session.js +15 -8
  87. package/dist/track-session.js.map +2 -2
  88. package/dist/wasm-mfu-reassembler.js +0 -1
  89. package/dist/wasm-mfu-reassembler.js.map +2 -2
  90. package/dist/wasm-mmtp-container-parser.js +22 -1
  91. package/dist/wasm-mmtp-container-parser.js.map +2 -2
  92. package/package.json +8 -14
  93. package/schemas/catalog.schema.json +3 -3
  94. package/src/carp-catalog.ts +35 -13
  95. package/src/catalog-fec-params.ts +173 -64
  96. package/src/cmaf-block-assembler.ts +1 -4
  97. package/src/delta-fallback-config.ts +72 -0
  98. package/src/fec-manager.ts +413 -317
  99. package/src/fec-state.ts +20 -32
  100. package/src/fec-worker-setup.ts +105 -55
  101. package/src/index.ts +10 -0
  102. package/src/media-router.ts +59 -21
  103. package/src/mmtp-container-parser.ts +26 -0
  104. package/src/mmtp-router.ts +145 -303
  105. package/src/multicast-manager.ts +172 -60
  106. package/src/multicast-transport.ts +16 -9
  107. package/src/repair-fetch.ts +46 -27
  108. package/src/repair-layers.ts +28 -8
  109. package/src/track-session.ts +28 -9
  110. package/test-vectors/catalog/README.md +34 -17
  111. package/test-vectors/catalog/negative/fec-block-profile-retired.json +52 -0
  112. package/test-vectors/catalog/negative/fec-enhancement-repair-removed.json +1 -1
  113. package/test-vectors/catalog/negative/fec-repair-layer-geometry.json +1 -1
  114. package/test-vectors/catalog/negative/fec-repair-layer-missing-symbols.json +1 -1
  115. package/test-vectors/catalog/negative/fec-repair-multiple-depends.json +1 -1
  116. package/test-vectors/catalog/negative/fec-repair-overlay-with-layer.json +1 -1
  117. package/test-vectors/catalog/negative/fec-repair-priority-out-of-band.json +1 -1
  118. package/test-vectors/catalog/negative/fec-repair-source-symbols-without-scope.json +1 -1
  119. package/test-vectors/catalog/negative/multicast-network-source-empty.json +1 -1
  120. package/test-vectors/catalog/negative/raptorq-source-symbols-over-max.json +1 -1
  121. package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +1 -1
  122. package/test-vectors/catalog/positive/fec-layered-repair.json +2 -2
  123. package/test-vectors/catalog/positive/fec-multicast.json +2 -1
  124. package/test-vectors/catalog/positive/multicast-native-ssm-no-network-source.json +2 -1
  125. package/test-vectors/catalog-timing.json +356 -0
  126. package/test-vectors/catalog-validation.json +40 -5
  127. package/node_modules/@blockcast/fec-worker/README.md +0 -223
  128. package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
  129. package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts +0 -38
  130. package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts.map +0 -1
  131. package/node_modules/@blockcast/fec-worker/dist/block-order.js +0 -78
  132. package/node_modules/@blockcast/fec-worker/dist/block-order.js.map +0 -1
  133. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +0 -93
  134. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts.map +0 -1
  135. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js +0 -346
  136. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js.map +0 -1
  137. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +0 -380
  138. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +0 -1
  139. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js +0 -11
  140. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js.map +0 -1
  141. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts +0 -14
  142. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts.map +0 -1
  143. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +0 -859
  144. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +0 -7
  145. package/node_modules/@blockcast/fec-worker/dist/index.d.ts +0 -10
  146. package/node_modules/@blockcast/fec-worker/dist/index.d.ts.map +0 -1
  147. package/node_modules/@blockcast/fec-worker/dist/index.js +0 -8
  148. package/node_modules/@blockcast/fec-worker/dist/index.js.map +0 -1
  149. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts +0 -20
  150. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts.map +0 -1
  151. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js +0 -370
  152. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js.map +0 -7
  153. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts +0 -104
  154. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts.map +0 -1
  155. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js +0 -181
  156. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js.map +0 -1
  157. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts +0 -194
  158. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts.map +0 -1
  159. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js +0 -62
  160. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js.map +0 -1
  161. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts +0 -9
  162. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts.map +0 -1
  163. package/node_modules/@blockcast/fec-worker/dist/transfer.js +0 -13
  164. package/node_modules/@blockcast/fec-worker/dist/transfer.js.map +0 -1
  165. package/node_modules/@blockcast/fec-worker/package.json +0 -59
  166. package/node_modules/@blockcast/fec-worker/src/block-order.ts +0 -93
  167. package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +0 -392
  168. package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +0 -399
  169. package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +0 -1502
  170. package/node_modules/@blockcast/fec-worker/src/index.ts +0 -35
  171. package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +0 -589
  172. package/node_modules/@blockcast/fec-worker/src/shred-worker-client.ts +0 -222
  173. package/node_modules/@blockcast/fec-worker/src/shred-worker-types.ts +0 -209
  174. package/node_modules/@blockcast/fec-worker/src/transfer.ts +0 -12
  175. package/node_modules/@blockcast/mmt-alta-parse/README.md +0 -181
  176. package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  177. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +0 -57
  178. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +0 -1
  179. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +0 -115
  180. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +0 -1
  181. package/node_modules/@blockcast/mmt-alta-parse/package.json +0 -50
  182. package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +0 -136
  183. package/node_modules/@blockcast/mmt-base/README.md +0 -134
  184. package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  185. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +0 -55
  186. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +0 -1
  187. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +0 -128
  188. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +0 -1
  189. package/node_modules/@blockcast/mmt-base/dist/index.d.ts +0 -7
  190. package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +0 -1
  191. package/node_modules/@blockcast/mmt-base/dist/index.js +0 -7
  192. package/node_modules/@blockcast/mmt-base/dist/index.js.map +0 -1
  193. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -292
  194. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +0 -1
  195. package/node_modules/@blockcast/mmt-base/dist/mmtp.js +0 -612
  196. package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +0 -1
  197. package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +0 -18
  198. package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +0 -1
  199. package/node_modules/@blockcast/mmt-base/dist/net-constants.js +0 -18
  200. package/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +0 -1
  201. package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +0 -47
  202. package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +0 -1
  203. package/node_modules/@blockcast/mmt-base/dist/ntp-short.js +0 -54
  204. package/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +0 -1
  205. package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +0 -57
  206. package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +0 -1
  207. package/node_modules/@blockcast/mmt-base/dist/serial-number.js +0 -98
  208. package/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +0 -1
  209. package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +0 -312
  210. package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +0 -1
  211. package/node_modules/@blockcast/mmt-base/dist/signalling.js +0 -637
  212. package/node_modules/@blockcast/mmt-base/dist/signalling.js.map +0 -1
  213. package/node_modules/@blockcast/mmt-base/package.json +0 -49
  214. package/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +0 -145
  215. package/node_modules/@blockcast/mmt-base/src/index.ts +0 -6
  216. package/node_modules/@blockcast/mmt-base/src/mmtp.ts +0 -892
  217. package/node_modules/@blockcast/mmt-base/src/net-constants.ts +0 -17
  218. package/node_modules/@blockcast/mmt-base/src/ntp-short.ts +0 -67
  219. package/node_modules/@blockcast/mmt-base/src/serial-number.ts +0 -107
  220. package/node_modules/@blockcast/mmt-base/src/signalling.ts +0 -862
  221. package/node_modules/@blockcast/mmt-fec/README.md +0 -271
  222. package/node_modules/@blockcast/mmt-fec/dist/.build-stamp +0 -0
  223. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts +0 -82
  224. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts.map +0 -1
  225. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js +0 -296
  226. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js.map +0 -1
  227. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts +0 -106
  228. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts.map +0 -1
  229. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js +0 -288
  230. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js.map +0 -1
  231. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts +0 -46
  232. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts.map +0 -1
  233. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js +0 -96
  234. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js.map +0 -1
  235. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts +0 -33
  236. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts.map +0 -1
  237. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js +0 -57
  238. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js.map +0 -1
  239. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts +0 -205
  240. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +0 -1
  241. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +0 -240
  242. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +0 -1
  243. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +0 -28
  244. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +0 -1
  245. package/node_modules/@blockcast/mmt-fec/dist/index.js +0 -28
  246. package/node_modules/@blockcast/mmt-fec/dist/index.js.map +0 -1
  247. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts +0 -20
  248. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts.map +0 -1
  249. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js +0 -28
  250. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js.map +0 -1
  251. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +0 -258
  252. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +0 -1
  253. package/node_modules/@blockcast/mmt-fec/dist/oti.js +0 -382
  254. package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +0 -1
  255. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts +0 -41
  256. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts.map +0 -1
  257. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js +0 -81
  258. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js.map +0 -1
  259. package/node_modules/@blockcast/mmt-fec/dist/repair-group.d.ts +0 -82
  260. package/node_modules/@blockcast/mmt-fec/dist/repair-group.d.ts.map +0 -1
  261. package/node_modules/@blockcast/mmt-fec/dist/repair-group.js +0 -170
  262. package/node_modules/@blockcast/mmt-fec/dist/repair-group.js.map +0 -1
  263. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/README.md +0 -181
  264. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  265. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +0 -57
  266. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +0 -1
  267. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js +0 -115
  268. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +0 -1
  269. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/package.json +0 -50
  270. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/src/index.ts +0 -136
  271. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +0 -134
  272. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  273. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +0 -55
  274. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +0 -1
  275. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +0 -128
  276. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +0 -1
  277. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +0 -7
  278. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +0 -1
  279. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +0 -7
  280. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +0 -1
  281. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -292
  282. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +0 -1
  283. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +0 -612
  284. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +0 -1
  285. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +0 -18
  286. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +0 -1
  287. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js +0 -18
  288. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +0 -1
  289. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +0 -47
  290. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +0 -1
  291. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js +0 -54
  292. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +0 -1
  293. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +0 -57
  294. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +0 -1
  295. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js +0 -98
  296. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +0 -1
  297. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +0 -312
  298. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +0 -1
  299. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js +0 -637
  300. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js.map +0 -1
  301. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +0 -49
  302. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +0 -145
  303. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +0 -6
  304. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +0 -892
  305. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/net-constants.ts +0 -17
  306. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/ntp-short.ts +0 -67
  307. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/serial-number.ts +0 -107
  308. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/signalling.ts +0 -862
  309. package/node_modules/@blockcast/mmt-fec/package.json +0 -79
  310. package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +0 -371
  311. package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +0 -439
  312. package/node_modules/@blockcast/mmt-fec/src/cmaf-recovery.ts +0 -127
  313. package/node_modules/@blockcast/mmt-fec/src/cmaf-symbols.ts +0 -68
  314. package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +0 -310
  315. package/node_modules/@blockcast/mmt-fec/src/index.ts +0 -94
  316. package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +0 -34
  317. package/node_modules/@blockcast/mmt-fec/src/oti.ts +0 -463
  318. package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +0 -101
  319. package/node_modules/@blockcast/mmt-fec/src/repair-group.ts +0 -195
  320. package/node_modules/@blockcast/mmt-manifest-verify/dist/.build-stamp +0 -0
  321. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts +0 -28
  322. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts.map +0 -1
  323. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js +0 -128
  324. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js.map +0 -1
  325. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts +0 -4
  326. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts.map +0 -1
  327. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js +0 -4
  328. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js.map +0 -1
  329. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts +0 -37
  330. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts.map +0 -1
  331. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js +0 -179
  332. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js.map +0 -1
  333. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts +0 -99
  334. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts.map +0 -1
  335. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js +0 -492
  336. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js.map +0 -1
  337. package/node_modules/@blockcast/mmt-manifest-verify/package.json +0 -45
  338. package/node_modules/@blockcast/mmt-manifest-verify/src/admission.ts +0 -171
  339. package/node_modules/@blockcast/mmt-manifest-verify/src/index.ts +0 -3
  340. package/node_modules/@blockcast/mmt-manifest-verify/src/source-auth.ts +0 -230
  341. package/node_modules/@blockcast/mmt-manifest-verify/src/verifier.ts +0 -669
  342. package/node_modules/@noble/hashes/LICENSE +0 -21
  343. package/node_modules/@noble/hashes/README.md +0 -521
  344. package/node_modules/@noble/hashes/_assert.d.ts +0 -17
  345. package/node_modules/@noble/hashes/_assert.d.ts.map +0 -1
  346. package/node_modules/@noble/hashes/_assert.js +0 -18
  347. package/node_modules/@noble/hashes/_assert.js.map +0 -1
  348. package/node_modules/@noble/hashes/_blake.d.ts +0 -14
  349. package/node_modules/@noble/hashes/_blake.d.ts.map +0 -1
  350. package/node_modules/@noble/hashes/_blake.js +0 -50
  351. package/node_modules/@noble/hashes/_blake.js.map +0 -1
  352. package/node_modules/@noble/hashes/_md.d.ts +0 -51
  353. package/node_modules/@noble/hashes/_md.d.ts.map +0 -1
  354. package/node_modules/@noble/hashes/_md.js +0 -162
  355. package/node_modules/@noble/hashes/_md.js.map +0 -1
  356. package/node_modules/@noble/hashes/_u64.d.ts +0 -55
  357. package/node_modules/@noble/hashes/_u64.d.ts.map +0 -1
  358. package/node_modules/@noble/hashes/_u64.js +0 -90
  359. package/node_modules/@noble/hashes/_u64.js.map +0 -1
  360. package/node_modules/@noble/hashes/argon2.d.ts +0 -32
  361. package/node_modules/@noble/hashes/argon2.d.ts.map +0 -1
  362. package/node_modules/@noble/hashes/argon2.js +0 -401
  363. package/node_modules/@noble/hashes/argon2.js.map +0 -1
  364. package/node_modules/@noble/hashes/blake1.d.ts +0 -106
  365. package/node_modules/@noble/hashes/blake1.d.ts.map +0 -1
  366. package/node_modules/@noble/hashes/blake1.js +0 -459
  367. package/node_modules/@noble/hashes/blake1.js.map +0 -1
  368. package/node_modules/@noble/hashes/blake2.d.ts +0 -116
  369. package/node_modules/@noble/hashes/blake2.d.ts.map +0 -1
  370. package/node_modules/@noble/hashes/blake2.js +0 -420
  371. package/node_modules/@noble/hashes/blake2.js.map +0 -1
  372. package/node_modules/@noble/hashes/blake2b.d.ts +0 -11
  373. package/node_modules/@noble/hashes/blake2b.d.ts.map +0 -1
  374. package/node_modules/@noble/hashes/blake2b.js +0 -14
  375. package/node_modules/@noble/hashes/blake2b.js.map +0 -1
  376. package/node_modules/@noble/hashes/blake2s.d.ts +0 -20
  377. package/node_modules/@noble/hashes/blake2s.d.ts.map +0 -1
  378. package/node_modules/@noble/hashes/blake2s.js +0 -24
  379. package/node_modules/@noble/hashes/blake2s.js.map +0 -1
  380. package/node_modules/@noble/hashes/blake3.d.ts +0 -54
  381. package/node_modules/@noble/hashes/blake3.d.ts.map +0 -1
  382. package/node_modules/@noble/hashes/blake3.js +0 -255
  383. package/node_modules/@noble/hashes/blake3.js.map +0 -1
  384. package/node_modules/@noble/hashes/crypto.d.ts +0 -2
  385. package/node_modules/@noble/hashes/crypto.d.ts.map +0 -1
  386. package/node_modules/@noble/hashes/crypto.js +0 -5
  387. package/node_modules/@noble/hashes/crypto.js.map +0 -1
  388. package/node_modules/@noble/hashes/cryptoNode.d.ts +0 -2
  389. package/node_modules/@noble/hashes/cryptoNode.d.ts.map +0 -1
  390. package/node_modules/@noble/hashes/cryptoNode.js +0 -18
  391. package/node_modules/@noble/hashes/cryptoNode.js.map +0 -1
  392. package/node_modules/@noble/hashes/eskdf.d.ts +0 -47
  393. package/node_modules/@noble/hashes/eskdf.d.ts.map +0 -1
  394. package/node_modules/@noble/hashes/eskdf.js +0 -166
  395. package/node_modules/@noble/hashes/eskdf.js.map +0 -1
  396. package/node_modules/@noble/hashes/esm/_assert.d.ts +0 -17
  397. package/node_modules/@noble/hashes/esm/_assert.d.ts.map +0 -1
  398. package/node_modules/@noble/hashes/esm/_assert.js +0 -15
  399. package/node_modules/@noble/hashes/esm/_assert.js.map +0 -1
  400. package/node_modules/@noble/hashes/esm/_blake.d.ts +0 -14
  401. package/node_modules/@noble/hashes/esm/_blake.d.ts.map +0 -1
  402. package/node_modules/@noble/hashes/esm/_blake.js +0 -45
  403. package/node_modules/@noble/hashes/esm/_blake.js.map +0 -1
  404. package/node_modules/@noble/hashes/esm/_md.d.ts +0 -51
  405. package/node_modules/@noble/hashes/esm/_md.d.ts.map +0 -1
  406. package/node_modules/@noble/hashes/esm/_md.js +0 -155
  407. package/node_modules/@noble/hashes/esm/_md.js.map +0 -1
  408. package/node_modules/@noble/hashes/esm/_u64.d.ts +0 -55
  409. package/node_modules/@noble/hashes/esm/_u64.d.ts.map +0 -1
  410. package/node_modules/@noble/hashes/esm/_u64.js +0 -67
  411. package/node_modules/@noble/hashes/esm/_u64.js.map +0 -1
  412. package/node_modules/@noble/hashes/esm/argon2.d.ts +0 -32
  413. package/node_modules/@noble/hashes/esm/argon2.d.ts.map +0 -1
  414. package/node_modules/@noble/hashes/esm/argon2.js +0 -392
  415. package/node_modules/@noble/hashes/esm/argon2.js.map +0 -1
  416. package/node_modules/@noble/hashes/esm/blake1.d.ts +0 -106
  417. package/node_modules/@noble/hashes/esm/blake1.d.ts.map +0 -1
  418. package/node_modules/@noble/hashes/esm/blake1.js +0 -452
  419. package/node_modules/@noble/hashes/esm/blake1.js.map +0 -1
  420. package/node_modules/@noble/hashes/esm/blake2.d.ts +0 -116
  421. package/node_modules/@noble/hashes/esm/blake2.d.ts.map +0 -1
  422. package/node_modules/@noble/hashes/esm/blake2.js +0 -413
  423. package/node_modules/@noble/hashes/esm/blake2.js.map +0 -1
  424. package/node_modules/@noble/hashes/esm/blake2b.d.ts +0 -11
  425. package/node_modules/@noble/hashes/esm/blake2b.d.ts.map +0 -1
  426. package/node_modules/@noble/hashes/esm/blake2b.js +0 -11
  427. package/node_modules/@noble/hashes/esm/blake2b.js.map +0 -1
  428. package/node_modules/@noble/hashes/esm/blake2s.d.ts +0 -20
  429. package/node_modules/@noble/hashes/esm/blake2s.d.ts.map +0 -1
  430. package/node_modules/@noble/hashes/esm/blake2s.js +0 -21
  431. package/node_modules/@noble/hashes/esm/blake2s.js.map +0 -1
  432. package/node_modules/@noble/hashes/esm/blake3.d.ts +0 -54
  433. package/node_modules/@noble/hashes/esm/blake3.d.ts.map +0 -1
  434. package/node_modules/@noble/hashes/esm/blake3.js +0 -251
  435. package/node_modules/@noble/hashes/esm/blake3.js.map +0 -1
  436. package/node_modules/@noble/hashes/esm/crypto.d.ts +0 -2
  437. package/node_modules/@noble/hashes/esm/crypto.d.ts.map +0 -1
  438. package/node_modules/@noble/hashes/esm/crypto.js +0 -2
  439. package/node_modules/@noble/hashes/esm/crypto.js.map +0 -1
  440. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts +0 -2
  441. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts.map +0 -1
  442. package/node_modules/@noble/hashes/esm/cryptoNode.js +0 -15
  443. package/node_modules/@noble/hashes/esm/cryptoNode.js.map +0 -1
  444. package/node_modules/@noble/hashes/esm/eskdf.d.ts +0 -47
  445. package/node_modules/@noble/hashes/esm/eskdf.d.ts.map +0 -1
  446. package/node_modules/@noble/hashes/esm/eskdf.js +0 -160
  447. package/node_modules/@noble/hashes/esm/eskdf.js.map +0 -1
  448. package/node_modules/@noble/hashes/esm/hkdf.d.ts +0 -36
  449. package/node_modules/@noble/hashes/esm/hkdf.d.ts.map +0 -1
  450. package/node_modules/@noble/hashes/esm/hkdf.js +0 -82
  451. package/node_modules/@noble/hashes/esm/hkdf.js.map +0 -1
  452. package/node_modules/@noble/hashes/esm/hmac.d.ts +0 -35
  453. package/node_modules/@noble/hashes/esm/hmac.d.ts.map +0 -1
  454. package/node_modules/@noble/hashes/esm/hmac.js +0 -86
  455. package/node_modules/@noble/hashes/esm/hmac.js.map +0 -1
  456. package/node_modules/@noble/hashes/esm/index.d.ts +0 -2
  457. package/node_modules/@noble/hashes/esm/index.d.ts.map +0 -1
  458. package/node_modules/@noble/hashes/esm/index.js +0 -33
  459. package/node_modules/@noble/hashes/esm/index.js.map +0 -1
  460. package/node_modules/@noble/hashes/esm/legacy.d.ts +0 -71
  461. package/node_modules/@noble/hashes/esm/legacy.d.ts.map +0 -1
  462. package/node_modules/@noble/hashes/esm/legacy.js +0 -281
  463. package/node_modules/@noble/hashes/esm/legacy.js.map +0 -1
  464. package/node_modules/@noble/hashes/esm/package.json +0 -10
  465. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts +0 -23
  466. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts.map +0 -1
  467. package/node_modules/@noble/hashes/esm/pbkdf2.js +0 -97
  468. package/node_modules/@noble/hashes/esm/pbkdf2.js.map +0 -1
  469. package/node_modules/@noble/hashes/esm/ripemd160.d.ts +0 -13
  470. package/node_modules/@noble/hashes/esm/ripemd160.d.ts.map +0 -1
  471. package/node_modules/@noble/hashes/esm/ripemd160.js +0 -13
  472. package/node_modules/@noble/hashes/esm/ripemd160.js.map +0 -1
  473. package/node_modules/@noble/hashes/esm/scrypt.d.ts +0 -34
  474. package/node_modules/@noble/hashes/esm/scrypt.d.ts.map +0 -1
  475. package/node_modules/@noble/hashes/esm/scrypt.js +0 -228
  476. package/node_modules/@noble/hashes/esm/scrypt.js.map +0 -1
  477. package/node_modules/@noble/hashes/esm/sha1.d.ts +0 -11
  478. package/node_modules/@noble/hashes/esm/sha1.d.ts.map +0 -1
  479. package/node_modules/@noble/hashes/esm/sha1.js +0 -11
  480. package/node_modules/@noble/hashes/esm/sha1.js.map +0 -1
  481. package/node_modules/@noble/hashes/esm/sha2.d.ts +0 -159
  482. package/node_modules/@noble/hashes/esm/sha2.d.ts.map +0 -1
  483. package/node_modules/@noble/hashes/esm/sha2.js +0 -375
  484. package/node_modules/@noble/hashes/esm/sha2.js.map +0 -1
  485. package/node_modules/@noble/hashes/esm/sha256.d.ts +0 -20
  486. package/node_modules/@noble/hashes/esm/sha256.d.ts.map +0 -1
  487. package/node_modules/@noble/hashes/esm/sha256.js +0 -20
  488. package/node_modules/@noble/hashes/esm/sha256.js.map +0 -1
  489. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts +0 -142
  490. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts.map +0 -1
  491. package/node_modules/@noble/hashes/esm/sha3-addons.js +0 -393
  492. package/node_modules/@noble/hashes/esm/sha3-addons.js.map +0 -1
  493. package/node_modules/@noble/hashes/esm/sha3.d.ts +0 -53
  494. package/node_modules/@noble/hashes/esm/sha3.d.ts.map +0 -1
  495. package/node_modules/@noble/hashes/esm/sha3.js +0 -234
  496. package/node_modules/@noble/hashes/esm/sha3.js.map +0 -1
  497. package/node_modules/@noble/hashes/esm/sha512.d.ts +0 -26
  498. package/node_modules/@noble/hashes/esm/sha512.d.ts.map +0 -1
  499. package/node_modules/@noble/hashes/esm/sha512.js +0 -26
  500. package/node_modules/@noble/hashes/esm/sha512.js.map +0 -1
  501. package/node_modules/@noble/hashes/esm/utils.d.ts +0 -161
  502. package/node_modules/@noble/hashes/esm/utils.d.ts.map +0 -1
  503. package/node_modules/@noble/hashes/esm/utils.js +0 -281
  504. package/node_modules/@noble/hashes/esm/utils.js.map +0 -1
  505. package/node_modules/@noble/hashes/hkdf.d.ts +0 -36
  506. package/node_modules/@noble/hashes/hkdf.d.ts.map +0 -1
  507. package/node_modules/@noble/hashes/hkdf.js +0 -88
  508. package/node_modules/@noble/hashes/hkdf.js.map +0 -1
  509. package/node_modules/@noble/hashes/hmac.d.ts +0 -35
  510. package/node_modules/@noble/hashes/hmac.d.ts.map +0 -1
  511. package/node_modules/@noble/hashes/hmac.js +0 -91
  512. package/node_modules/@noble/hashes/hmac.js.map +0 -1
  513. package/node_modules/@noble/hashes/index.d.ts +0 -1
  514. package/node_modules/@noble/hashes/index.d.ts.map +0 -1
  515. package/node_modules/@noble/hashes/index.js +0 -33
  516. package/node_modules/@noble/hashes/index.js.map +0 -1
  517. package/node_modules/@noble/hashes/legacy.d.ts +0 -71
  518. package/node_modules/@noble/hashes/legacy.d.ts.map +0 -1
  519. package/node_modules/@noble/hashes/legacy.js +0 -287
  520. package/node_modules/@noble/hashes/legacy.js.map +0 -1
  521. package/node_modules/@noble/hashes/package.json +0 -266
  522. package/node_modules/@noble/hashes/pbkdf2.d.ts +0 -23
  523. package/node_modules/@noble/hashes/pbkdf2.d.ts.map +0 -1
  524. package/node_modules/@noble/hashes/pbkdf2.js +0 -101
  525. package/node_modules/@noble/hashes/pbkdf2.js.map +0 -1
  526. package/node_modules/@noble/hashes/ripemd160.d.ts +0 -13
  527. package/node_modules/@noble/hashes/ripemd160.d.ts.map +0 -1
  528. package/node_modules/@noble/hashes/ripemd160.js +0 -16
  529. package/node_modules/@noble/hashes/ripemd160.js.map +0 -1
  530. package/node_modules/@noble/hashes/scrypt.d.ts +0 -34
  531. package/node_modules/@noble/hashes/scrypt.d.ts.map +0 -1
  532. package/node_modules/@noble/hashes/scrypt.js +0 -232
  533. package/node_modules/@noble/hashes/scrypt.js.map +0 -1
  534. package/node_modules/@noble/hashes/sha1.d.ts +0 -11
  535. package/node_modules/@noble/hashes/sha1.d.ts.map +0 -1
  536. package/node_modules/@noble/hashes/sha1.js +0 -14
  537. package/node_modules/@noble/hashes/sha1.js.map +0 -1
  538. package/node_modules/@noble/hashes/sha2.d.ts +0 -159
  539. package/node_modules/@noble/hashes/sha2.d.ts.map +0 -1
  540. package/node_modules/@noble/hashes/sha2.js +0 -384
  541. package/node_modules/@noble/hashes/sha2.js.map +0 -1
  542. package/node_modules/@noble/hashes/sha256.d.ts +0 -20
  543. package/node_modules/@noble/hashes/sha256.d.ts.map +0 -1
  544. package/node_modules/@noble/hashes/sha256.js +0 -23
  545. package/node_modules/@noble/hashes/sha256.js.map +0 -1
  546. package/node_modules/@noble/hashes/sha3-addons.d.ts +0 -142
  547. package/node_modules/@noble/hashes/sha3-addons.d.ts.map +0 -1
  548. package/node_modules/@noble/hashes/sha3-addons.js +0 -402
  549. package/node_modules/@noble/hashes/sha3-addons.js.map +0 -1
  550. package/node_modules/@noble/hashes/sha3.d.ts +0 -53
  551. package/node_modules/@noble/hashes/sha3.d.ts.map +0 -1
  552. package/node_modules/@noble/hashes/sha3.js +0 -239
  553. package/node_modules/@noble/hashes/sha3.js.map +0 -1
  554. package/node_modules/@noble/hashes/sha512.d.ts +0 -26
  555. package/node_modules/@noble/hashes/sha512.d.ts.map +0 -1
  556. package/node_modules/@noble/hashes/sha512.js +0 -29
  557. package/node_modules/@noble/hashes/sha512.js.map +0 -1
  558. package/node_modules/@noble/hashes/src/_assert.ts +0 -22
  559. package/node_modules/@noble/hashes/src/_blake.ts +0 -50
  560. package/node_modules/@noble/hashes/src/_md.ts +0 -176
  561. package/node_modules/@noble/hashes/src/_u64.ts +0 -91
  562. package/node_modules/@noble/hashes/src/argon2.ts +0 -497
  563. package/node_modules/@noble/hashes/src/blake1.ts +0 -534
  564. package/node_modules/@noble/hashes/src/blake2.ts +0 -486
  565. package/node_modules/@noble/hashes/src/blake2b.ts +0 -10
  566. package/node_modules/@noble/hashes/src/blake2s.ts +0 -20
  567. package/node_modules/@noble/hashes/src/blake3.ts +0 -272
  568. package/node_modules/@noble/hashes/src/crypto.ts +0 -9
  569. package/node_modules/@noble/hashes/src/cryptoNode.ts +0 -15
  570. package/node_modules/@noble/hashes/src/eskdf.ts +0 -187
  571. package/node_modules/@noble/hashes/src/hkdf.ts +0 -88
  572. package/node_modules/@noble/hashes/src/hmac.ts +0 -94
  573. package/node_modules/@noble/hashes/src/index.ts +0 -31
  574. package/node_modules/@noble/hashes/src/legacy.ts +0 -293
  575. package/node_modules/@noble/hashes/src/pbkdf2.ts +0 -122
  576. package/node_modules/@noble/hashes/src/ripemd160.ts +0 -12
  577. package/node_modules/@noble/hashes/src/scrypt.ts +0 -257
  578. package/node_modules/@noble/hashes/src/sha1.ts +0 -10
  579. package/node_modules/@noble/hashes/src/sha2.ts +0 -402
  580. package/node_modules/@noble/hashes/src/sha256.ts +0 -24
  581. package/node_modules/@noble/hashes/src/sha3-addons.ts +0 -499
  582. package/node_modules/@noble/hashes/src/sha3.ts +0 -258
  583. package/node_modules/@noble/hashes/src/sha512.ts +0 -34
  584. package/node_modules/@noble/hashes/src/utils.ts +0 -395
  585. package/node_modules/@noble/hashes/utils.d.ts +0 -161
  586. package/node_modules/@noble/hashes/utils.d.ts.map +0 -1
  587. package/node_modules/@noble/hashes/utils.js +0 -313
  588. package/node_modules/@noble/hashes/utils.js.map +0 -1
@@ -1,669 +0,0 @@
1
- import {
2
- decodeSourceAuthManifestFrame,
3
- sourceAuthMerkleRoot,
4
- sourceAuthObjectDigest,
5
- sourceAuthSignaturePreimage,
6
- type SourceAuthGroupClose,
7
- type SourceAuthObjectEntry,
8
- } from './source-auth.js'
9
-
10
- export type ManifestAuthMode = 'off' | 'shadow' | 'enforce'
11
- export type MissingManifestPolicy = 'stall' | 'fallback-shadow'
12
- export type ManifestFailureReason =
13
- | 'sigInvalid'
14
- | 'digestMismatch'
15
- | 'manifestLate'
16
- | 'manifestAbsent'
17
- | 'verifierError'
18
-
19
- export interface ManifestAuthConfig {
20
- mode: ManifestAuthMode
21
- onMissingManifest: MissingManifestPolicy
22
- }
23
-
24
- export interface ManifestObjectIdentity {
25
- trackName: string
26
- /** Stable v2 auth binding. Defaults to trackName for legacy single-format callers. */
27
- bindingId?: string
28
- /** MoQ group ids are u62; values above 2^53 must be passed as bigint. */
29
- groupId: number | bigint
30
- objectId: number
31
- packetId?: number
32
- ssId?: number
33
- }
34
-
35
- export interface ManifestFecBlockMapper {
36
- readonly d: number
37
- derive(groupId: number, objectId: number): { ssId: number }
38
- }
39
-
40
- export interface ManifestTrackContext {
41
- broadcastNamespaceId: string
42
- trackName: string
43
- /** Stable v2 auth binding. Defaults to trackName for legacy single-format callers. */
44
- bindingId?: string
45
- sourceSymbolFormat?: string
46
- keyEpoch: number
47
- codec: string
48
- timing: string
49
- fecGeometry: string
50
- manifestFormatVersion: number
51
- /** Authenticated-catalog binding for the namespace, track, epoch, codec,
52
- * timing, FEC geometry, and manifest version fields above. */
53
- authScope: Uint8Array
54
- publicKey: Uint8Array
55
- /** Current key first, followed by any catalog-advertised overlap keys. */
56
- acceptedPublicKeys?: readonly Uint8Array[]
57
- bitrate: number
58
- groupDurationMs: number
59
- mapper: ManifestFecBlockMapper
60
- manifestChannelAuthenticated: boolean
61
- }
62
-
63
- export interface ManifestVerificationStats {
64
- verified: number
65
- /** Terminal outcomes only: an object counted here will never be verified. */
66
- failures: Record<ManifestFailureReason, number>
67
- /**
68
- * Objects currently held in quarantine awaiting a manifest — pending, NOT
69
- * failed, and deliberately disjoint from `failures`. An enforce-mode stall is
70
- * accounted here first and moves into `failures` only once the verifier gives
71
- * up on it, so a reason breakdown that ignores this gauge under-reports live
72
- * stalls by whatever is still in flight (BLO-30007).
73
- */
74
- quarantined: number
75
- quarantinedBytes: number
76
- }
77
-
78
- export interface ManifestFailure {
79
- trackName: string
80
- bindingId?: string
81
- groupId: number | bigint
82
- objectId: number
83
- reason: ManifestFailureReason
84
- }
85
-
86
- export interface ManifestAdmission {
87
- action: 'play' | 'stall' | 'drop'
88
- verified: boolean
89
- reason?: ManifestFailureReason
90
- }
91
-
92
- export type SignatureVerifier = (
93
- publicKey: Uint8Array,
94
- message: Uint8Array,
95
- signature: Uint8Array,
96
- ) => boolean | Promise<boolean>
97
-
98
- export function manifestBindingId(trackName: string, sourceSymbolFormat: string): string {
99
- return JSON.stringify([trackName, sourceSymbolFormat])
100
- }
101
-
102
- export function createWebCryptoEd25519Verifier(
103
- subtle: SubtleCrypto = globalThis.crypto.subtle,
104
- ): SignatureVerifier {
105
- return async (publicKey, message, signature) => {
106
- const keyBytes = Uint8Array.from(publicKey)
107
- const messageBytes = Uint8Array.from(message)
108
- const signatureBytes = Uint8Array.from(signature)
109
- const key = await subtle.importKey('raw', keyBytes.buffer, 'Ed25519', false, ['verify'])
110
- return subtle.verify('Ed25519', key, signatureBytes.buffer, messageBytes.buffer)
111
- }
112
- }
113
-
114
- interface PendingObject {
115
- identity: ManifestObjectIdentity
116
- data: Uint8Array
117
- release: () => void
118
- discard?: () => void
119
- bytes: number
120
- }
121
-
122
- interface GroupState {
123
- entries: Map<number, SourceAuthObjectEntry>
124
- pending: Map<number, PendingObject>
125
- close?: SourceAuthGroupClose
126
- /** Close frame that arrived before all object entries (manifest-channel
127
- * reordering); retried once the entry count matches. */
128
- pendingClose?: SourceAuthGroupClose
129
- rootVerified: boolean
130
- signaturePending?: boolean
131
- failed?: ManifestFailureReason
132
- }
133
-
134
- interface TrackState {
135
- context: ManifestTrackContext
136
- groups: Map<bigint, GroupState>
137
- quarantine: PendingObject[]
138
- quarantinedBytes: number
139
- capBytes: number
140
- manifestEntries: number
141
- maxManifestEntries: number
142
- maxGroups: number
143
- }
144
-
145
- const FAILURE_REASONS: readonly ManifestFailureReason[] = [
146
- 'sigInvalid',
147
- 'digestMismatch',
148
- 'manifestLate',
149
- 'manifestAbsent',
150
- 'verifierError',
151
- ]
152
-
153
- const equalBytes = (left: Uint8Array, right: Uint8Array): boolean => {
154
- if (left.byteLength !== right.byteLength) return false
155
- let diff = 0
156
- for (let index = 0; index < left.byteLength; index++) diff |= left[index]! ^ right[index]!
157
- return diff === 0
158
- }
159
-
160
- const isPromiseLike = (value: boolean | Promise<boolean>): value is Promise<boolean> =>
161
- typeof value === 'object' && value !== null && typeof value.then === 'function'
162
-
163
- export class ManifestVerifier {
164
- #config: ManifestAuthConfig
165
- readonly #verifySignature: SignatureVerifier
166
- readonly #onFailure?: (failure: ManifestFailure) => void
167
- readonly #tracks = new Map<string, TrackState>()
168
- readonly #stats: Omit<ManifestVerificationStats, 'quarantined'> = {
169
- verified: 0,
170
- failures: Object.fromEntries(FAILURE_REASONS.map((reason) => [reason, 0])) as Record<ManifestFailureReason, number>,
171
- quarantinedBytes: 0,
172
- }
173
- #disposed = false
174
-
175
- constructor(options: {
176
- manifestAuth: ManifestAuthConfig
177
- verifySignature: SignatureVerifier
178
- onFailure?: (failure: ManifestFailure) => void
179
- }) {
180
- this.#config = { ...options.manifestAuth }
181
- this.#verifySignature = options.verifySignature
182
- this.#onFailure = options.onFailure
183
- }
184
-
185
- get config(): Readonly<ManifestAuthConfig> {
186
- return this.#config
187
- }
188
-
189
- get stats(): ManifestVerificationStats {
190
- let quarantined = 0
191
- for (const track of this.#tracks.values()) quarantined += track.quarantine.length
192
- return {
193
- verified: this.#stats.verified,
194
- failures: { ...this.#stats.failures },
195
- quarantined,
196
- quarantinedBytes: this.#stats.quarantinedBytes,
197
- }
198
- }
199
-
200
- setMode(mode: ManifestAuthMode): void {
201
- this.#config = { ...this.#config, mode }
202
- if (mode !== 'enforce') this.#releaseAllQuarantine(false)
203
- }
204
-
205
- registerTrack(context: ManifestTrackContext): void {
206
- const bindingId = context.bindingId ?? context.trackName
207
- if (this.#tracks.has(bindingId)) {
208
- throw new Error(`manifest binding ${bindingId} is already registered`)
209
- }
210
- if (!Number.isFinite(context.bitrate) || context.bitrate <= 0) {
211
- throw new Error('manifest track bitrate must be > 0')
212
- }
213
- if (!Number.isFinite(context.groupDurationMs) || context.groupDurationMs <= 0) {
214
- throw new Error('manifest track groupDurationMs must be > 0')
215
- }
216
- if (context.authScope.byteLength !== 32) throw new Error('manifest authScope must be 32 bytes')
217
- if (context.publicKey.byteLength !== 32) throw new Error('manifest publicKey must be 32 bytes')
218
- for (const key of context.acceptedPublicKeys ?? []) {
219
- if (key.byteLength !== 32) throw new Error('manifest acceptedPublicKeys must contain 32-byte keys')
220
- }
221
- for (const [name, value] of Object.entries({
222
- broadcastNamespaceId: context.broadcastNamespaceId,
223
- trackName: context.trackName,
224
- codec: context.codec,
225
- timing: context.timing,
226
- fecGeometry: context.fecGeometry,
227
- })) {
228
- if (value.length === 0) throw new Error(`manifest ${name} must not be empty`)
229
- }
230
- this.#tracks.set(bindingId, {
231
- context: { ...context, bindingId },
232
- groups: new Map(),
233
- quarantine: [],
234
- quarantinedBytes: 0,
235
- capBytes: Math.ceil((context.bitrate * context.groupDurationMs) / 8000),
236
- manifestEntries: 0,
237
- maxManifestEntries: Math.ceil((context.bitrate * context.groupDurationMs) / (8000 * 52)),
238
- maxGroups: context.mapper.d + 1,
239
- })
240
- }
241
-
242
- ingestManifestFrame(bindingId: string, frameBytes: Uint8Array): void {
243
- const track = this.#requireTrack(bindingId)
244
- try {
245
- const frame = decodeSourceAuthManifestFrame(frameBytes)
246
- const groupId = frame.groupId
247
- const group = this.#group(track, groupId)
248
- if (frame.kind === 'object') {
249
- if (group.close || group.signaturePending || group.failed) {
250
- this.#failure({ trackName: track.context.trackName, bindingId, groupId, objectId: frame.objectId }, 'verifierError')
251
- return
252
- }
253
- if (group.entries.has(frame.objectId)) {
254
- this.#failure({ trackName: track.context.trackName, bindingId, groupId, objectId: frame.objectId }, 'verifierError')
255
- return
256
- }
257
- if (group.entries.size >= 4096 || track.manifestEntries >= track.maxManifestEntries) {
258
- this.#failure({ trackName: track.context.trackName, bindingId, groupId, objectId: frame.objectId }, 'verifierError')
259
- return
260
- }
261
- group.entries.set(frame.objectId, frame)
262
- track.manifestEntries++
263
- const pending = group.pending.get(frame.objectId)
264
- if (pending) {
265
- this.#failure(pending.identity, 'manifestLate')
266
- this.#resolvePending(track, group, pending, frame)
267
- }
268
- if (group.pendingClose && group.entries.size === group.pendingClose.objectCount) {
269
- const close = group.pendingClose
270
- group.pendingClose = undefined
271
- this.#closeGroup(track, groupId, group, close)
272
- }
273
- return
274
- }
275
- this.#closeGroup(track, groupId, group, frame)
276
- } catch {
277
- this.#failure({ trackName: track.context.trackName, bindingId, groupId: 0, objectId: 0 }, 'verifierError')
278
- }
279
- }
280
-
281
- admitObject(
282
- identity: ManifestObjectIdentity,
283
- data: Uint8Array,
284
- release: () => void,
285
- /**
286
- * Called instead of `release` when a stalled object is terminally rejected
287
- * rather than played. A caller that drives a sequence off `release` (the FEC
288
- * symbol loop in `mmtp-router` does) must pass this, or an enforce-mode
289
- * discard leaves the sequence waiting on a callback that will never fire.
290
- * A `drop` returned from this call is the synchronous form of the same
291
- * outcome and does NOT also invoke `discard`.
292
- */
293
- discard?: () => void,
294
- ): ManifestAdmission {
295
- if (this.#config.mode === 'off') {
296
- release()
297
- return { action: 'play', verified: false }
298
- }
299
- const track = this.#tracks.get(identity.bindingId ?? identity.trackName)
300
- if (!track) {
301
- release()
302
- this.#failure(identity, 'verifierError')
303
- return { action: 'play', verified: false, reason: 'verifierError' }
304
- }
305
- try {
306
- if (!this.#validateIdentity(track, identity)) {
307
- return this.#rejectOrShadow(identity, release, 'digestMismatch')
308
- }
309
- const group = this.#group(track, BigInt(identity.groupId))
310
- if (group.failed === 'sigInvalid' || group.failed === 'digestMismatch') {
311
- return this.#rejectOrShadow(identity, release, group.failed)
312
- }
313
- const entry = group.entries.get(identity.objectId)
314
- if (entry) return this.#admitAgainstEntry(track, group, identity, data, release, entry, discard)
315
- if (this.#config.mode === 'shadow' || this.#config.onMissingManifest === 'fallback-shadow') {
316
- release()
317
- this.#failure(identity, 'manifestAbsent')
318
- return { action: 'play', verified: false, reason: 'manifestAbsent' }
319
- }
320
- if (!this.#quarantine(track, group, { identity, data, release, discard, bytes: data.byteLength })) {
321
- return { action: 'drop', verified: false }
322
- }
323
- return { action: 'stall', verified: false }
324
- } catch {
325
- release()
326
- this.#failure(identity, 'verifierError')
327
- return { action: 'play', verified: false, reason: 'verifierError' }
328
- }
329
- }
330
-
331
- dispose(): void {
332
- if (this.#disposed) return
333
- this.#disposed = true
334
- this.#releaseAllQuarantine(false)
335
- this.#tracks.clear()
336
- }
337
-
338
- #requireTrack(bindingId: string): TrackState {
339
- const track = this.#tracks.get(bindingId)
340
- if (!track) throw new Error(`unknown manifest binding ${bindingId}`)
341
- return track
342
- }
343
-
344
- #group(track: TrackState, groupId: bigint): GroupState {
345
- let group = track.groups.get(groupId)
346
- if (!group) {
347
- group = { entries: new Map(), pending: new Map(), rootVerified: false }
348
- track.groups.set(groupId, group)
349
- while (track.groups.size > track.maxGroups) {
350
- const oldest = track.groups.entries().next().value as [bigint, GroupState] | undefined
351
- if (!oldest) break
352
- const [oldestId, oldestGroup] = oldest
353
- for (const pending of [...oldestGroup.pending.values()]) {
354
- this.#removePending(track, oldestGroup, pending)
355
- this.#giveUpOnPending(pending)
356
- // The group aged out with objects still waiting on a manifest that
357
- // never arrived. That is an absent manifest, not a verifier fault:
358
- // `verifierError` is reserved for an exception/crash in the verifier
359
- // itself, so mislabelling here reads on the graduation dashboard as a
360
- // software bug and hides a benign absent-manifest stall (BLO-30007).
361
- this.#failure(pending.identity, 'manifestAbsent')
362
- }
363
- track.manifestEntries -= oldestGroup.entries.size
364
- track.groups.delete(oldestId)
365
- }
366
- }
367
- return group
368
- }
369
-
370
- #validateIdentity(track: TrackState, identity: ManifestObjectIdentity): boolean {
371
- const coordinates = track.context.mapper.derive(Number(identity.groupId), identity.objectId)
372
- return identity.ssId === undefined || coordinates.ssId === identity.ssId
373
- }
374
-
375
- #admitAgainstEntry(
376
- track: TrackState,
377
- group: GroupState,
378
- identity: ManifestObjectIdentity,
379
- data: Uint8Array,
380
- release: () => void,
381
- entry: SourceAuthObjectEntry,
382
- discard?: () => void,
383
- ): ManifestAdmission {
384
- if (entry.trueLength !== data.byteLength) {
385
- return this.#rejectOrShadow(identity, release, 'digestMismatch')
386
- }
387
- const digestMatches = equalBytes(sourceAuthObjectDigest(data.subarray(0, entry.trueLength)), entry.digest)
388
- if (!digestMatches) return this.#rejectOrShadow(identity, release, 'digestMismatch')
389
- if (!track.context.manifestChannelAuthenticated && !group.rootVerified) {
390
- if (this.#config.mode === 'shadow') {
391
- release()
392
- return { action: 'play', verified: false }
393
- }
394
- if (!this.#quarantine(track, group, { identity, data, release, discard, bytes: data.byteLength })) {
395
- return { action: 'drop', verified: false }
396
- }
397
- return { action: 'stall', verified: false }
398
- }
399
- release()
400
- this.#stats.verified++
401
- return { action: 'play', verified: true }
402
- }
403
-
404
- #rejectOrShadow(
405
- identity: ManifestObjectIdentity,
406
- release: () => void,
407
- reason: 'digestMismatch' | 'sigInvalid',
408
- ): ManifestAdmission {
409
- this.#failure(identity, reason)
410
- if (this.#config.mode === 'enforce') {
411
- console.warn(JSON.stringify({ event: 'manifest-enforce-drop', track: identity.trackName, group: String(identity.groupId), object: identity.objectId, reason }))
412
- return { action: 'drop', verified: false, reason }
413
- }
414
- release()
415
- return { action: 'play', verified: false, reason }
416
- }
417
-
418
- #resolvePending(
419
- track: TrackState,
420
- group: GroupState,
421
- pending: PendingObject,
422
- entry: SourceAuthObjectEntry,
423
- ): void {
424
- this.#removePending(track, group, pending)
425
- this.#admitAgainstEntry(track, group, pending.identity, pending.data, pending.release, entry, pending.discard)
426
- }
427
-
428
- #closeGroup(
429
- track: TrackState,
430
- groupId: bigint,
431
- group: GroupState,
432
- close: SourceAuthGroupClose,
433
- ): void {
434
- if (group.close || group.signaturePending) return
435
- const entries = [...group.entries.values()]
436
- if (entries.length !== close.objectCount) {
437
- // Manifest-channel reordering: the close frame beat some object entries.
438
- // Stash it (latest-wins on duplicates) so the object-entry path can
439
- // re-attempt the close once the count matches; quarantined objects stay
440
- // quarantined, and manifestAbsent below is a signal, not an eviction.
441
- group.pendingClose = close
442
- const hadPending = group.pending.size > 0
443
- if (this.#config.onMissingManifest === 'fallback-shadow' || this.#config.mode === 'shadow') {
444
- for (const pending of [...group.pending.values()]) {
445
- this.#removePending(track, group, pending)
446
- pending.release()
447
- this.#failure(pending.identity, 'manifestAbsent')
448
- }
449
- } else {
450
- for (const pending of group.pending.values()) {
451
- this.#failure(pending.identity, 'manifestAbsent')
452
- }
453
- }
454
- if (!hadPending) {
455
- this.#failure({ trackName: track.context.trackName, groupId, objectId: 0 }, 'manifestAbsent')
456
- }
457
- return
458
- }
459
- if (!equalBytes(sourceAuthMerkleRoot(entries), close.root)) {
460
- group.failed = 'digestMismatch'
461
- this.#failGroup(track, groupId, group, 'digestMismatch')
462
- return
463
- }
464
- const preimage = sourceAuthSignaturePreimage(track.context.authScope, close.groupId, close.objectCount, close.root)
465
- let signatureValid: boolean | Promise<boolean>
466
- try {
467
- signatureValid = this.#verifyAcceptedSignature(track, preimage, close.signature)
468
- } catch {
469
- this.#failOpenGroup(track, groupId, group)
470
- return
471
- }
472
- if (isPromiseLike(signatureValid)) {
473
- group.signaturePending = true
474
- void signatureValid.then(
475
- (valid) => {
476
- if (this.#disposed) return
477
- group.signaturePending = false
478
- this.#finishGroupSignature(track, groupId, group, close, valid)
479
- },
480
- () => {
481
- if (this.#disposed) return
482
- group.signaturePending = false
483
- this.#failOpenGroup(track, groupId, group)
484
- },
485
- )
486
- return
487
- }
488
- this.#finishGroupSignature(track, groupId, group, close, signatureValid)
489
- }
490
-
491
- #finishGroupSignature(
492
- track: TrackState,
493
- groupId: bigint,
494
- group: GroupState,
495
- close: SourceAuthGroupClose,
496
- signatureValid: boolean,
497
- ): void {
498
- if (!signatureValid) {
499
- group.failed = 'sigInvalid'
500
- this.#failGroup(track, groupId, group, 'sigInvalid')
501
- return
502
- }
503
- group.failed = undefined
504
- group.close = close
505
- group.pendingClose = undefined
506
- group.rootVerified = true
507
- for (const pending of [...group.pending.values()]) {
508
- const entry = group.entries.get(pending.identity.objectId)
509
- if (entry) this.#resolvePending(track, group, pending, entry)
510
- else if (this.#config.onMissingManifest === 'fallback-shadow') {
511
- this.#removePending(track, group, pending)
512
- pending.release()
513
- this.#failure(pending.identity, 'manifestAbsent')
514
- }
515
- }
516
- }
517
-
518
- #verifyAcceptedSignature(
519
- track: TrackState,
520
- message: Uint8Array,
521
- signature: Uint8Array,
522
- ): boolean | Promise<boolean> {
523
- const keys = track.context.acceptedPublicKeys ?? [track.context.publicKey]
524
- const pending: Promise<boolean | 'error'>[] = []
525
- let hadSynchronousError = false
526
- for (const key of keys) {
527
- try {
528
- const result = this.#verifySignature(key, message, signature)
529
- if (isPromiseLike(result)) {
530
- pending.push(Promise.resolve(result).then((valid) => valid, () => 'error' as const))
531
- } else if (result) {
532
- return true
533
- }
534
- } catch {
535
- hadSynchronousError = true
536
- }
537
- }
538
- if (pending.length === 0) {
539
- if (hadSynchronousError) throw new Error('manifest signature verifier unavailable')
540
- return false
541
- }
542
- return Promise.all(pending).then((results) => {
543
- if (results.some((valid) => valid === true)) return true
544
- if (hadSynchronousError || results.some((valid) => valid === 'error')) {
545
- throw new Error('manifest signature verifier unavailable')
546
- }
547
- return false
548
- })
549
- }
550
-
551
- #failGroup(
552
- track: TrackState,
553
- groupId: bigint,
554
- group: GroupState,
555
- reason: 'digestMismatch' | 'sigInvalid',
556
- ): void {
557
- if (group.pending.size === 0) {
558
- this.#failure({ trackName: track.context.trackName, groupId, objectId: 0 }, reason)
559
- return
560
- }
561
- for (const pending of [...group.pending.values()]) {
562
- this.#removePending(track, group, pending)
563
- // Same contract as an eviction: a quarantined object that is rejected
564
- // rather than played must still tell the caller it is finished, or a
565
- // caller sequencing off `release` waits forever (BLO-30095).
566
- if (this.#rejectOrShadow(pending.identity, pending.release, reason).action === 'drop') {
567
- pending.discard?.()
568
- }
569
- }
570
- }
571
-
572
- #removePending(track: TrackState, group: GroupState, pending: PendingObject): void {
573
- if (group.pending.get(pending.identity.objectId) === pending) {
574
- group.pending.delete(pending.identity.objectId)
575
- }
576
- const index = track.quarantine.indexOf(pending)
577
- if (index >= 0) track.quarantine.splice(index, 1)
578
- track.quarantinedBytes -= pending.bytes
579
- this.#stats.quarantinedBytes -= pending.bytes
580
- }
581
-
582
- #quarantine(track: TrackState, group: GroupState, pending: PendingObject): boolean {
583
- if (group.pending.has(pending.identity.objectId)) return false
584
- group.pending.set(pending.identity.objectId, pending)
585
- track.quarantine.push(pending)
586
- track.quarantinedBytes += pending.bytes
587
- this.#stats.quarantinedBytes += pending.bytes
588
- this.#enforceCap(track)
589
- return true
590
- }
591
-
592
- #enforceCap(track: TrackState): void {
593
- while (track.quarantinedBytes > track.capBytes && track.quarantine.length > 0) {
594
- const pending = track.quarantine.shift()!
595
- const group = track.groups.get(BigInt(pending.identity.groupId))
596
- if (group) group.pending.delete(pending.identity.objectId)
597
- track.quarantinedBytes -= pending.bytes
598
- this.#stats.quarantinedBytes -= pending.bytes
599
- this.#giveUpOnPending(pending)
600
- // Quarantine budget ran out while the object was still waiting on a
601
- // manifest. The manifest was absent when we gave up; the verifier did not
602
- // fault. Same reason in shadow and enforce so the dashboard reads one
603
- // taxonomy across modes (BLO-30007).
604
- this.#failure(pending.identity, 'manifestAbsent')
605
- console.warn(`[ManifestVerifier] quarantine cap eviction track=${pending.identity.trackName} group=${pending.identity.groupId} object=${pending.identity.objectId} disposition=${this.#config.mode === 'enforce' ? 'drop' : 'fail-open'}`)
606
- }
607
- }
608
-
609
- /**
610
- * Stop waiting for a manifest that never arrived. In `enforce` the object is
611
- * discarded: an eviction is a rejection, not a deferred play, so unverified
612
- * media never reaches the player two groups after the stall was recorded
613
- * (BLO-30095, CTO disposition on the issue thread).
614
- *
615
- * Deliberately NOT used by `#failOpenGroup`/`#failOpenTrack` — failing open on
616
- * a genuine verifier fault is correct and stays untouched.
617
- */
618
- #giveUpOnPending(pending: PendingObject): void {
619
- if (this.#config.mode !== 'enforce') {
620
- pending.release()
621
- return
622
- }
623
- pending.discard?.()
624
- }
625
-
626
- #failOpenTrack(track: TrackState, reason: 'verifierError'): void {
627
- for (const pending of [...track.quarantine]) {
628
- const group = track.groups.get(BigInt(pending.identity.groupId))
629
- if (group) this.#removePending(track, group, pending)
630
- pending.release()
631
- this.#failure(pending.identity, reason)
632
- }
633
- }
634
-
635
- #failOpenGroup(track: TrackState, groupId: bigint, group: GroupState): void {
636
- const pending = [...group.pending.values()]
637
- if (pending.length === 0) {
638
- this.#failure({ trackName: track.context.trackName, groupId, objectId: 0 }, 'verifierError')
639
- return
640
- }
641
- for (const object of pending) {
642
- this.#removePending(track, group, object)
643
- object.release()
644
- this.#failure(object.identity, 'verifierError')
645
- }
646
- }
647
-
648
- #releaseAllQuarantine(countFailure: boolean): void {
649
- for (const track of this.#tracks.values()) {
650
- for (const pending of [...track.quarantine]) {
651
- const group = track.groups.get(BigInt(pending.identity.groupId))
652
- if (group) this.#removePending(track, group, pending)
653
- pending.release()
654
- if (countFailure) this.#failure(pending.identity, 'verifierError')
655
- }
656
- }
657
- }
658
-
659
- #failure(identity: ManifestObjectIdentity, reason: ManifestFailureReason): void {
660
- this.#stats.failures[reason]++
661
- this.#onFailure?.({
662
- trackName: identity.trackName,
663
- ...(identity.bindingId === undefined ? {} : { bindingId: identity.bindingId }),
664
- groupId: identity.groupId,
665
- objectId: identity.objectId,
666
- reason,
667
- })
668
- }
669
- }
@@ -1,21 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2022 Paul Miller (https://paulmillr.com)
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the “Software”), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.