@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,35 +0,0 @@
1
- /**
2
- * @blockcast/fec-worker — Worker-per-track FEC decode with zero-copy transfers
3
- *
4
- * Re-exports shared types and main-thread client.
5
- */
6
-
7
- export type {
8
- FecWorkerCommand,
9
- FecSymbolCommand,
10
- FecWorkerOptionalCommand,
11
- FecWorkerEvent,
12
- FecWorkerErrorCode,
13
- FecBlockProfile,
14
- FecTrackConfig,
15
- FecTrackStats,
16
- FecBlockSnapshot,
17
- FrameMeta,
18
- } from "./fec-worker-types.js";
19
-
20
- export { FecWorkerClient } from "./fec-worker-client.js";
21
-
22
- // --- Shred (Reed-Solomon) codec — sibling to the RaptorQ/MMTP worker above.
23
- // Different FEC payload identity (slot/fecSet/localIndex vs flat ssId) → its
24
- // own command shape and worker; shares the transfer + client/worker pattern.
25
- export type {
26
- ShredWorkerCommand,
27
- ShredWorkerEvent,
28
- ShredWorkerConfig,
29
- ShredWorkerStats,
30
- ShredWorkerErrorCode,
31
- RecoveredMeta,
32
- SlotSample,
33
- } from "./shred-worker-types.js";
34
-
35
- export { ShredWorkerClient } from "./shred-worker-client.js";
@@ -1,589 +0,0 @@
1
- /**
2
- * @blockcast/fec-worker — Shred (Reed-Solomon) Worker Entry Point
3
- *
4
- * Runs inside a DedicatedWorkerGlobalScope. Owns the batch-drain: reads raw
5
- * shred frames (either from a transferred `ReadableStream` or via `feedShred`),
6
- * parses the wire header, drives the `ShredFecBuffer` WASM decoder, and posts
7
- * only recovered FEC sets (plus a coalesced stats heartbeat) back to the main
8
- * thread. This moves the datagram read loop + wire parse + WASM FEC entirely
9
- * off the main thread, so the page does no `read()`-per-packet work.
10
- *
11
- * WASM bindings resolve via:
12
- * 1. (self as any).__SHRED_WASM_BINDINGS__ — injected by a loader/importmap
13
- * or by tests (mirrors the RaptorQ worker's __MMT_WASM_BINDINGS__ contract)
14
- * 2. dynamic import of config.wasmUrl (wasm-bindgen ESM: `await default()`
15
- * then `new ShredFecBuffer(...)`)
16
- *
17
- * This file must NOT import DOM globals incompatible with Worker scope.
18
- */
19
-
20
- import type {
21
- ShredWorkerCommand,
22
- ShredWorkerConfig,
23
- ShredWorkerEvent,
24
- ShredWorkerStats,
25
- ShredWorkerErrorCode,
26
- RecoveredMeta,
27
- SlotSample,
28
- } from "./shred-worker-types.js";
29
- import {
30
- SHRED_WIRE_VERSION,
31
- SHRED_WIRE_VERSION_FULL,
32
- SHRED_HEADER_LEN,
33
- SHRED_FLAG_IS_CODING,
34
- SHRED_FLAG_DATA_COMPLETE,
35
- } from "./shred-worker-types.js";
36
- import { toOwnedArrayBuffer } from "./transfer.js";
37
-
38
- // --- WASM binding types (from the shred `mmt_wasm` build) -------------------
39
- // Two decoder classes exist, selected the same way the player does
40
- // (`ShredFecBuffer ?? ShredReassembler`) and dispatched by add_shred arity:
41
- // - ShredFecBuffer : full Reed-Solomon path, 8-arg add_shred
42
- // (slot, fecSetIndex, localIndex, numData, numCoding, isCoding, payload, lastInSet)
43
- // - ShredReassembler : legacy data-only, 5-arg add_shred
44
- // (slot, fecSetIndex, localIndex, payload, lastInSet); coding shreds ignored
45
- /**
46
- * A recovered FEC set that carries its `(slot, fecSetIndex)` identity, as
47
- * returned by `ShredFecBuffer.try_recover_all_with_identity`. wasm-bindgen
48
- * getters surface `slot` as a BigInt and `fec_set_index` as a number; `payload`
49
- * is a fresh owned copy (safe to read after `free()`). The object is WASM-owned
50
- * — call `free()` once consumed.
51
- */
52
- interface RecoveredSetWasm {
53
- readonly slot: bigint;
54
- readonly fec_set_index: number;
55
- readonly payload: Uint8Array;
56
- free?(): void;
57
- }
58
-
59
- interface ShredDecoderWasm {
60
- // Loose signature so both arities type-check; the caller branches on
61
- // `add_shred.length` (wasm-bindgen preserves declared arity).
62
- add_shred(...args: unknown[]): Uint8Array | null | undefined;
63
- /** Drain timed-out FEC sets the direct path didn't complete (RS path only). */
64
- try_recover_all?(nowMs: number): Uint8Array | null | undefined;
65
- /**
66
- * Identity-carrying drain (ShredFecBuffer only): same backlog as
67
- * `try_recover_all` but the result keeps its `(slot, fecSetIndex)`, so the
68
- * worker can attribute the real send_ts recorded at ingest to a set that
69
- * completes on the recover timer rather than inline. Absent on the legacy
70
- * reassembler — the worker falls back to `try_recover_all` there.
71
- */
72
- try_recover_all_with_identity?(nowMs: number): RecoveredSetWasm | null | undefined;
73
- pending_fec_sets?(): number;
74
- free?(): void;
75
- }
76
-
77
- type ShredDecoderCtor = new (maxSlots: bigint, symbolSize: number) => ShredDecoderWasm;
78
-
79
- interface ShredWasmBindings {
80
- /** wasm-bindgen ESM default init (absent when bindings are pre-inited). */
81
- default?: () => Promise<unknown>;
82
- ShredFecBuffer?: ShredDecoderCtor;
83
- ShredReassembler?: ShredDecoderCtor;
84
- }
85
-
86
- /**
87
- * Dispatch one shred to the decoder, mirroring the player's `callAddShred`:
88
- * ShredFecBuffer (>=7-arg) gets the full RS call; the legacy 5-arg reassembler
89
- * gets data shreds only (coding shreds are dropped, it can't use them).
90
- */
91
- function callAddShred(
92
- dec: ShredDecoderWasm,
93
- slot: bigint,
94
- fecSetIndex: number,
95
- localIndex: number,
96
- numData: number,
97
- numCoding: number,
98
- isCoding: boolean,
99
- payload: Uint8Array,
100
- lastInSet: boolean,
101
- ): Uint8Array | null | undefined {
102
- if (dec.add_shred.length >= 7) {
103
- return dec.add_shred(slot, fecSetIndex, localIndex, numData, numCoding, isCoding, payload, lastInSet);
104
- }
105
- if (!isCoding) return dec.add_shred(slot, fecSetIndex, localIndex, payload, lastInSet);
106
- return null;
107
- }
108
-
109
- // --- Worker state -----------------------------------------------------------
110
-
111
- let decoder: ShredDecoderWasm | null = null;
112
- // configure() generation — guards against re-entrant configure() races: a later
113
- // call supersedes an earlier one still awaiting the WASM load, so the loser bails
114
- // instead of arming a second set of timers (which would orphan the winner's — a
115
- // leak that outlives dispose()).
116
- let configureGen = 0;
117
- let statsTimer: ReturnType<typeof setInterval> | null = null;
118
- let recoverTimer: ReturnType<typeof setInterval> | null = null;
119
- let activeStreamReader: ReadableStreamDefaultReader<Uint8Array> | null = null;
120
- let disposed = false;
121
-
122
- // Slot tracking for main-thread stats (turbine estimator, latency percentiles).
123
- // The worker is the single parser; it hands the main thread first-shred-per-slot
124
- // samples aggregated into the stats heartbeat, never per-packet.
125
- let maxSlot = 0n;
126
- let lastSlotSampled: bigint | null = null;
127
- let slotSamples: SlotSample[] = [];
128
- /** Cap the per-heartbeat sample batch; ~400ms slots means this is rarely hit. */
129
- const SLOT_SAMPLE_CAP = 256;
130
-
131
- // Per-FEC-set send timestamp, recorded at ingest (`(slot, fecSetIndex)` →
132
- // first-seen sendTsUs). The loss-recovery drain returns a set that completed on
133
- // the recover timer, not inline, so its completing shred's send_ts isn't in
134
- // hand at emit time; without this, every RS-recovered set would carry sendTsUs
135
- // 0n and the "Listener→browser" latency widgets would stay empty whenever loss
136
- // (the common case over a QUIC datagram path) makes recovery — not inline
137
- // completion — the dominant path.
138
- //
139
- // Key is a bigint pack `(slot << 32) | fecSetIndex` (fecSetIndex is u32) rather
140
- // than a template string — `recordSetSendTs` runs on every ingested shred (a
141
- // documented per-packet hot path), so this avoids a per-frame string alloc.
142
- const setSendTs = new Map<bigint, bigint>();
143
- /**
144
- * Bound the map for sets that never complete (shreds dropped before enough of a
145
- * set arrived to recover). Entries are deleted the moment a set completes
146
- * (either path), so this cap is only reached under sustained un-recoverable
147
- * loss; ~a few sets/slot means 4096 covers minutes of backlog.
148
- */
149
- const SET_TS_CAP = 4096;
150
-
151
- function setKey(slot: bigint, fecSetIndex: number): bigint {
152
- return (slot << 32n) | BigInt(fecSetIndex >>> 0);
153
- }
154
-
155
- /** Record the first send_ts seen for a set so the recover path can attribute it. */
156
- function recordSetSendTs(slot: bigint, fecSetIndex: number, sendTsUs: bigint): void {
157
- if (sendTsUs === 0n) return; // unstamped feed — nothing to attribute
158
- const key = setKey(slot, fecSetIndex);
159
- if (setSendTs.has(key)) return; // keep the first-seen stamp (matches slotSamples)
160
- // At cap, reject the NEW entry rather than evicting the oldest — matching the
161
- // flood-resistance policy of this package's `enqueuePendingVerify`
162
- // (fec-worker.ts). The oldest pending sets are the ones closest to completing
163
- // via the recover timer, so evict-oldest would drop attribution exactly when
164
- // it matters and is attacker-triggerable via a flood of never-completing sets.
165
- // A rejected set simply falls back to sendTsUs 0n if it later recovers.
166
- if (setSendTs.size >= SET_TS_CAP) return;
167
- setSendTs.set(key, sendTsUs);
168
- }
169
-
170
- const stats: ShredWorkerStats = {
171
- shredsRx: 0,
172
- sourceShreds: 0,
173
- repairShreds: 0,
174
- fecSetsCompleted: 0,
175
- bytesReassembled: 0,
176
- fecSetsRecovered: 0,
177
- pendingFecSets: -1,
178
- malformed: 0,
179
- versionMismatch: 0,
180
- currentSlot: "0",
181
- slotSamples: [],
182
- };
183
-
184
- // --- Emit helpers -----------------------------------------------------------
185
-
186
- function post(event: ShredWorkerEvent, transfer: Transferable[] = []): void {
187
- (self as unknown as DedicatedWorkerGlobalScope).postMessage(event, transfer);
188
- }
189
-
190
- function postError(message: string, code?: ShredWorkerErrorCode): void {
191
- post({ type: "error", message, code });
192
- }
193
-
194
- function emitRecovered(view: Uint8Array, meta: RecoveredMeta): void {
195
- // Copy out of WASM-owned memory into a fresh JS buffer before transfer.
196
- const buf = toOwnedArrayBuffer(view);
197
- stats.fecSetsCompleted++;
198
- stats.bytesReassembled += buf.byteLength;
199
- if (meta.recovered) stats.fecSetsRecovered++;
200
- post({ type: "recovered", data: buf, meta }, [buf]);
201
- }
202
-
203
- function postStats(): void {
204
- if (decoder && typeof decoder.pending_fec_sets === "function") {
205
- try {
206
- stats.pendingFecSets = decoder.pending_fec_sets();
207
- } catch {
208
- /* pending count is best-effort */
209
- }
210
- }
211
- stats.currentSlot = maxSlot.toString();
212
- // Drain the slot-sample batch into this heartbeat; live counters keep mutating.
213
- const drainedSamples = slotSamples;
214
- slotSamples = [];
215
- post({ type: "stats", stats: { ...stats, slotSamples: drainedSamples } });
216
- }
217
-
218
- // --- Wire parse + decode ----------------------------------------------------
219
-
220
- /**
221
- * The v3 erasure-shard view of a v4 body (a full canonical shred), or null when
222
- * the body is not a shred the forwarder could have emitted. Mirrors the
223
- * forwarder's `parse_shred()` checks and `erasure_shard()` slice exactly, so a
224
- * v4 frame reaches `add_shred` byte-identical to its v3 twin. A view, not a
225
- * copy: the hot path allocates nothing extra for v4.
226
- */
227
- function erasureShardOfFullShred(shred: Uint8Array, isCoding: boolean): Uint8Array | null {
228
- if (shred.byteLength !== (isCoding ? 1228 : 1203)) return null;
229
- const variant = shred[64];
230
- const family = variant & 0xf0;
231
- const variantIsCoding = family === 0x60 || family === 0x70;
232
- const variantIsData = family === 0x90 || family === 0xb0;
233
- if (isCoding ? !variantIsCoding : !variantIsData) return null;
234
- const resigned = family === 0xb0 || family === 0x70;
235
- const trailer = 32 + (variant & 0x0f) * 20 + (resigned ? 64 : 0);
236
- const start = isCoding ? 89 : 64;
237
- const end = shred.byteLength - trailer;
238
- if (end <= start) return null;
239
- return shred.subarray(start, end);
240
- }
241
-
242
- /**
243
- * Parse one raw shred frame and feed the decoder. Mirrors the deployed player's
244
- * `onShredBytes` (v3 wire, version-guarded) so the off-thread path is
245
- * bit-identical to the proven on-thread path, and accepts v4 by reducing its
246
- * full shred to that same v3 erasure shard. Emits a `recovered` event when a
247
- * set completes directly.
248
- */
249
- function ingestFrame(frame: Uint8Array): void {
250
- if (frame.byteLength < SHRED_HEADER_LEN) {
251
- stats.malformed++;
252
- return;
253
- }
254
- const dv = new DataView(frame.buffer, frame.byteOffset, frame.byteLength);
255
- const version = dv.getUint8(0);
256
- if (version !== SHRED_WIRE_VERSION && version !== SHRED_WIRE_VERSION_FULL) {
257
- // Forwarder/worker wire-version skew — drop rather than misframe every shred.
258
- stats.versionMismatch++;
259
- return;
260
- }
261
- const slot = dv.getBigUint64(1, true);
262
- const fecSetIndex = dv.getUint32(9, true);
263
- const localIndex = dv.getUint32(13, true);
264
- const flags = dv.getUint8(17);
265
- const dataComplete = (flags & SHRED_FLAG_DATA_COMPLETE) !== 0; // last data shred in set
266
- const isCoding = (flags & SHRED_FLAG_IS_CODING) !== 0;
267
- const numData = dv.getUint8(18);
268
- const numCoding = dv.getUint8(19);
269
- const sendTsUs = dv.getBigUint64(20, true);
270
- const body = frame.subarray(SHRED_HEADER_LEN);
271
- const payload =
272
- version === SHRED_WIRE_VERSION ? body : erasureShardOfFullShred(body, isCoding);
273
- if (payload === null) {
274
- stats.malformed++;
275
- return;
276
- }
277
-
278
- stats.shredsRx++;
279
- if (isCoding) stats.repairShreds++;
280
- else stats.sourceShreds++;
281
-
282
- // Slot tracking for main-thread stats. Sample the first shred of each new
283
- // slot (send timestamp + size) so the page can run the turbine-leg estimator
284
- // and latency percentiles without re-parsing the wire header itself.
285
- if (slot > maxSlot) maxSlot = slot;
286
- if (lastSlotSampled === null || slot !== lastSlotSampled) {
287
- lastSlotSampled = slot;
288
- if (slotSamples.length < SLOT_SAMPLE_CAP) {
289
- slotSamples.push({ slot, sendTsUs, bytes: frame.byteLength });
290
- }
291
- }
292
-
293
- // Record this set's send_ts so the recover-timer path (which completes a set
294
- // without its completing shred in hand) can attribute a real timestamp.
295
- recordSetSendTs(slot, fecSetIndex, sendTsUs);
296
-
297
- if (!decoder) return;
298
-
299
- // DATA_COMPLETE is passed as `lastInSet`: the WASM uses it to infer numData
300
- // for a set that received only data shreds (no coding).
301
- let result: Uint8Array | null | undefined;
302
- try {
303
- result = callAddShred(
304
- decoder,
305
- slot,
306
- fecSetIndex,
307
- localIndex,
308
- numData,
309
- numCoding,
310
- isCoding,
311
- payload,
312
- dataComplete,
313
- );
314
- } catch (err) {
315
- postError(`add_shred threw: ${errString(err)}`, "worker-runtime");
316
- return;
317
- }
318
- if (result && result.byteLength > 0) {
319
- // Set completed inline — its completing shred's send_ts is exact; drop the
320
- // ingest record so it can't leak or be re-attributed by the recover path.
321
- setSendTs.delete(setKey(slot, fecSetIndex));
322
- emitRecovered(result, { slot, fecSetIndex, sendTsUs, recovered: false });
323
- }
324
- }
325
-
326
- /** Run one loss-recovery drain and emit any late-recovered set. */
327
- function recoverAll(nowMs: number): void {
328
- if (!decoder) return;
329
-
330
- // Preferred path: the identity-carrying drain (ShredFecBuffer) keeps the
331
- // recovered set's `(slot, fecSetIndex)`, so we can attribute the real send_ts
332
- // recorded at ingest — otherwise a loss-recovered set (the common case over a
333
- // lossy datagram path) would carry sendTsUs 0n and the latency widgets would
334
- // never populate despite valid stamps on the wire.
335
- if (typeof decoder.try_recover_all_with_identity === "function") {
336
- let set: RecoveredSetWasm | null | undefined;
337
- try {
338
- set = decoder.try_recover_all_with_identity(nowMs);
339
- } catch (err) {
340
- postError(`try_recover_all_with_identity threw: ${errString(err)}`, "worker-runtime");
341
- return;
342
- }
343
- if (!set) return;
344
- // Read the WASM-owned fields before freeing; `payload` is a fresh copy.
345
- const slot = set.slot;
346
- const fecSetIndex = set.fec_set_index;
347
- const payload = set.payload;
348
- // Best-effort free, matching every other fallible WASM call in this file:
349
- // recoverAll runs from an unguarded setInterval / message-dispatch branch,
350
- // so a throwing free() must not propagate and silently drop the set.
351
- try {
352
- set.free?.();
353
- } catch {
354
- /* best-effort */
355
- }
356
- // Clear the map entry on ANY exit for this completed key (empty payload
357
- // included), so a set can't linger until FIFO eviction.
358
- const key = setKey(slot, fecSetIndex);
359
- // sendTsUs here is the set's FIRST-seen shred stamp (recordSetSendTs), vs the
360
- // inline path's completing-shred stamp; a set's shreds are sent µs apart, so
361
- // both are equivalent baselines for the "Listener→browser" percentiles.
362
- const sendTsUs = setSendTs.get(key) ?? 0n;
363
- setSendTs.delete(key);
364
- if (!payload || payload.byteLength === 0) return;
365
- emitRecovered(payload, { slot, fecSetIndex, sendTsUs, recovered: true });
366
- return;
367
- }
368
-
369
- // Legacy reassembler: payload-only drain, no set identity available.
370
- if (typeof decoder.try_recover_all !== "function") return;
371
- let result: Uint8Array | null | undefined;
372
- try {
373
- result = decoder.try_recover_all(nowMs);
374
- } catch (err) {
375
- postError(`try_recover_all threw: ${errString(err)}`, "worker-runtime");
376
- return;
377
- }
378
- if (result && result.byteLength > 0) {
379
- // slot / fecSetIndex / sendTs are not attributable from a bulk drain.
380
- emitRecovered(result, {
381
- slot: 0n,
382
- fecSetIndex: 0,
383
- sendTsUs: 0n,
384
- recovered: true,
385
- });
386
- }
387
- }
388
-
389
- // --- Stream batch-drain -----------------------------------------------------
390
-
391
- /**
392
- * Batch-drain a transferred stream of raw shred frames. The read loop lives
393
- * here (not on the main thread), so the page never pays a `read()` per packet;
394
- * only recovered sets and the coalesced stats heartbeat cross back.
395
- */
396
- async function drainStream(readable: ReadableStream<Uint8Array>): Promise<void> {
397
- // Replace any prior stream — one active source at a time.
398
- await cancelActiveStream();
399
- const reader = readable.getReader();
400
- activeStreamReader = reader;
401
- try {
402
- for (;;) {
403
- const { value, done } = await reader.read();
404
- if (done || disposed) break;
405
- if (value) ingestFrame(value);
406
- }
407
- } catch (err) {
408
- if (!disposed) postError(`stream read failed: ${errString(err)}`, "stream-read-failed");
409
- } finally {
410
- if (activeStreamReader === reader) activeStreamReader = null;
411
- try {
412
- reader.releaseLock();
413
- } catch {
414
- /* already released */
415
- }
416
- }
417
- }
418
-
419
- async function cancelActiveStream(): Promise<void> {
420
- const reader = activeStreamReader;
421
- if (!reader) return;
422
- activeStreamReader = null;
423
- try {
424
- await reader.cancel();
425
- } catch {
426
- /* stream may already be closed */
427
- }
428
- try {
429
- reader.releaseLock();
430
- } catch {
431
- /* already released */
432
- }
433
- }
434
-
435
- // --- WASM load --------------------------------------------------------------
436
-
437
- /** Select the decoder class the same way the player does: RS first, legacy fallback. */
438
- function pickDecoderCtor(b: ShredWasmBindings): ShredDecoderCtor | null {
439
- if (typeof b.ShredFecBuffer === "function") return b.ShredFecBuffer;
440
- if (typeof b.ShredReassembler === "function") return b.ShredReassembler;
441
- return null;
442
- }
443
-
444
- async function loadBindings(cfg: ShredWorkerConfig): Promise<ShredWasmBindings> {
445
- const injected = (self as unknown as { __SHRED_WASM_BINDINGS__?: ShredWasmBindings })
446
- .__SHRED_WASM_BINDINGS__;
447
- if (injected && pickDecoderCtor(injected)) {
448
- return injected;
449
- }
450
- if (!cfg.wasmUrl) {
451
- throw new Error(
452
- "no shred WASM: set self.__SHRED_WASM_BINDINGS__ = { ShredFecBuffer } or pass config.wasmUrl",
453
- );
454
- }
455
- const mod = (await import(/* @vite-ignore */ cfg.wasmUrl)) as ShredWasmBindings;
456
- if (typeof mod.default === "function") await mod.default();
457
- if (!pickDecoderCtor(mod)) {
458
- throw new Error(
459
- `shred WASM at ${cfg.wasmUrl} exports neither ShredFecBuffer nor ShredReassembler`,
460
- );
461
- }
462
- return mod;
463
- }
464
-
465
- async function configure(cfg: ShredWorkerConfig): Promise<void> {
466
- const gen = ++configureGen;
467
- disposed = false;
468
- teardownTimers();
469
- await cancelActiveStream();
470
- if (decoder?.free) {
471
- try {
472
- decoder.free();
473
- } catch {
474
- /* best-effort */
475
- }
476
- }
477
- decoder = null;
478
- setSendTs.clear(); // stale per-set stamps must not survive a reconfigure
479
-
480
- let bindings: ShredWasmBindings;
481
- try {
482
- bindings = await loadBindings(cfg);
483
- } catch (err) {
484
- if (gen === configureGen) postError(errString(err), "wasm-load-failed");
485
- return;
486
- }
487
- if (gen !== configureGen) return; // superseded by a newer configure() while loading
488
- const Ctor = pickDecoderCtor(bindings);
489
- if (!Ctor) {
490
- postError("no shred decoder constructor after load", "wasm-bindings-missing");
491
- return;
492
- }
493
- try {
494
- decoder = new Ctor(BigInt(cfg.maxSlots), cfg.symbolSize);
495
- } catch (err) {
496
- postError(`shred decoder ctor threw: ${errString(err)}`, "wasm-load-failed");
497
- return;
498
- }
499
-
500
- // Clear any timer a racing continuation may have armed between the await and
501
- // here, so exactly one stats/recover interval is live.
502
- teardownTimers();
503
- const statsMs = cfg.statsIntervalMs ?? 250;
504
- if (statsMs > 0) statsTimer = setInterval(postStats, statsMs);
505
- const recoverMs = cfg.recoverIntervalMs ?? 50;
506
- if (recoverMs > 0) recoverTimer = setInterval(() => recoverAll(Date.now()), recoverMs);
507
- }
508
-
509
- function teardownTimers(): void {
510
- if (statsTimer !== null) {
511
- clearInterval(statsTimer);
512
- statsTimer = null;
513
- }
514
- if (recoverTimer !== null) {
515
- clearInterval(recoverTimer);
516
- recoverTimer = null;
517
- }
518
- }
519
-
520
- async function dispose(): Promise<void> {
521
- disposed = true;
522
- teardownTimers();
523
- await cancelActiveStream();
524
- if (decoder?.free) {
525
- try {
526
- decoder.free();
527
- } catch {
528
- /* best-effort */
529
- }
530
- }
531
- decoder = null;
532
- setSendTs.clear();
533
- }
534
-
535
- // --- Message dispatch -------------------------------------------------------
536
-
537
- self.onmessage = (e: MessageEvent<ShredWorkerCommand>): void => {
538
- const cmd = e.data;
539
- switch (cmd.type) {
540
- case "configure":
541
- void configure(cmd.config).catch((err) =>
542
- postError(errString(err), "wasm-load-failed"),
543
- );
544
- break;
545
- case "attachStream":
546
- if (!decoder) {
547
- postError("attachStream before configure", "not-configured");
548
- // Drop the transferred stream so it doesn't leak.
549
- void cancelStreamHandle(cmd.readable);
550
- break;
551
- }
552
- void drainStream(cmd.readable);
553
- break;
554
- case "feedShred":
555
- if (!decoder) {
556
- postError("feedShred before configure", "not-configured");
557
- break;
558
- }
559
- ingestFrame(new Uint8Array(cmd.frame));
560
- break;
561
- case "recoverAll":
562
- recoverAll(cmd.nowMs);
563
- break;
564
- case "dispose":
565
- void dispose();
566
- break;
567
- default: {
568
- const _exhaustive: never = cmd;
569
- postError(`unknown command: ${JSON.stringify(_exhaustive)}`, "unknown-command");
570
- }
571
- }
572
- };
573
-
574
- self.onmessageerror = (): void => {
575
- postError("failed to deserialize worker message", "worker-message");
576
- };
577
-
578
- async function cancelStreamHandle(readable: ReadableStream<Uint8Array>): Promise<void> {
579
- try {
580
- await readable.cancel();
581
- } catch {
582
- /* best-effort */
583
- }
584
- }
585
-
586
- function errString(err: unknown): string {
587
- if (err instanceof Error) return err.message;
588
- return String(err);
589
- }