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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (605) hide show
  1. package/README.md +33 -16
  2. package/dist/browser-runtime.js +14814 -14255
  3. package/dist/browser-runtime.js.map +4 -4
  4. package/dist/carp-catalog.d.ts +24 -19
  5. package/dist/carp-catalog.d.ts.map +1 -1
  6. package/dist/carp-catalog.js +29 -14
  7. package/dist/carp-catalog.js.map +4 -4
  8. package/dist/catalog-fec-params.d.ts +88 -28
  9. package/dist/catalog-fec-params.d.ts.map +1 -1
  10. package/dist/catalog-fec-params.js +60 -23
  11. package/dist/catalog-fec-params.js.map +4 -4
  12. package/dist/catalog-network-source.js +1 -7
  13. package/dist/catalog-network-source.js.map +4 -4
  14. package/dist/cmaf-block-assembler.d.ts +0 -2
  15. package/dist/cmaf-block-assembler.d.ts.map +1 -1
  16. package/dist/cmaf-block-assembler.js +0 -1
  17. package/dist/cmaf-block-assembler.js.map +2 -2
  18. package/dist/cmcd-producer.d.ts.map +1 -1
  19. package/dist/cmcd-producer.js +0 -4
  20. package/dist/cmcd-producer.js.map +2 -2
  21. package/dist/delivery-catalog.d.ts +124 -0
  22. package/dist/delivery-catalog.d.ts.map +1 -0
  23. package/dist/delivery-catalog.js +1857 -0
  24. package/dist/delivery-catalog.js.map +7 -0
  25. package/dist/delta-fallback-config.d.ts +42 -0
  26. package/dist/delta-fallback-config.d.ts.map +1 -0
  27. package/dist/delta-fallback-config.js +59 -0
  28. package/dist/delta-fallback-config.js.map +7 -0
  29. package/dist/fec-manager.d.ts +52 -30
  30. package/dist/fec-manager.d.ts.map +1 -1
  31. package/dist/fec-manager.js +338 -293
  32. package/dist/fec-manager.js.map +4 -4
  33. package/dist/fec-state.d.ts +19 -31
  34. package/dist/fec-state.d.ts.map +1 -1
  35. package/dist/fec-state.js +4 -10
  36. package/dist/fec-state.js.map +4 -4
  37. package/dist/fec-worker-setup.d.ts +18 -14
  38. package/dist/fec-worker-setup.d.ts.map +1 -1
  39. package/dist/fec-worker-setup.js +81 -96
  40. package/dist/fec-worker-setup.js.map +4 -4
  41. package/dist/index.d.ts +5 -3
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +16 -0
  44. package/dist/index.js.map +2 -2
  45. package/dist/iso-block-locator.js +1 -7
  46. package/dist/iso-block-locator.js.map +4 -4
  47. package/dist/media-router.d.ts +20 -8
  48. package/dist/media-router.d.ts.map +1 -1
  49. package/dist/media-router.js +46 -21
  50. package/dist/media-router.js.map +2 -2
  51. package/dist/mfu-reassembler.js +24 -30
  52. package/dist/mfu-reassembler.js.map +4 -4
  53. package/dist/mmtp-container-parser.d.ts +14 -11
  54. package/dist/mmtp-container-parser.d.ts.map +1 -1
  55. package/dist/mmtp-container-parser.js +126 -99
  56. package/dist/mmtp-container-parser.js.map +4 -4
  57. package/dist/mmtp-container-parser.no-modules.js +151 -108
  58. package/dist/mmtp-container-parser.no-modules.js.map +4 -4
  59. package/dist/mmtp-decode-pipeline.js +126 -99
  60. package/dist/mmtp-decode-pipeline.js.map +4 -4
  61. package/dist/mmtp-router.d.ts +51 -29
  62. package/dist/mmtp-router.d.ts.map +1 -1
  63. package/dist/mmtp-router.js +260 -326
  64. package/dist/mmtp-router.js.map +4 -4
  65. package/dist/multicast-input.js +1 -7
  66. package/dist/multicast-input.js.map +4 -4
  67. package/dist/multicast-manager.d.ts +72 -6
  68. package/dist/multicast-manager.d.ts.map +1 -1
  69. package/dist/multicast-manager.js +882 -673
  70. package/dist/multicast-manager.js.map +4 -4
  71. package/dist/multicast-transport.d.ts +1 -1
  72. package/dist/multicast-transport.d.ts.map +1 -1
  73. package/dist/multicast-transport.js +44 -26
  74. package/dist/multicast-transport.js.map +4 -4
  75. package/dist/multicast-unwrap.js +29 -35
  76. package/dist/multicast-unwrap.js.map +4 -4
  77. package/dist/no-modules.js +147 -106
  78. package/dist/no-modules.js.map +4 -4
  79. package/dist/repair-fetch.d.ts +116 -21
  80. package/dist/repair-fetch.d.ts.map +1 -1
  81. package/dist/repair-fetch.js +114 -34
  82. package/dist/repair-fetch.js.map +4 -4
  83. package/dist/repair-layers.d.ts +18 -7
  84. package/dist/repair-layers.d.ts.map +1 -1
  85. package/dist/repair-layers.js +12 -10
  86. package/dist/repair-layers.js.map +4 -4
  87. package/dist/signaling.js +2 -11
  88. package/dist/signaling.js.map +4 -4
  89. package/dist/timestamp-codec.js +24 -30
  90. package/dist/timestamp-codec.js.map +4 -4
  91. package/dist/track-session.d.ts +7 -0
  92. package/dist/track-session.d.ts.map +1 -1
  93. package/dist/track-session.js +15 -8
  94. package/dist/track-session.js.map +2 -2
  95. package/dist/wasm-mfu-reassembler.js +1 -7
  96. package/dist/wasm-mfu-reassembler.js.map +4 -4
  97. package/dist/wasm-mmtp-container-parser.js +126 -99
  98. package/dist/wasm-mmtp-container-parser.js.map +4 -4
  99. package/package.json +7 -14
  100. package/schemas/catalog.schema.json +3 -3
  101. package/src/carp-catalog.ts +46 -24
  102. package/src/catalog-fec-params.ts +173 -64
  103. package/src/cmaf-block-assembler.ts +1 -4
  104. package/src/cmcd-producer.ts +0 -6
  105. package/src/delivery-catalog.ts +498 -0
  106. package/src/delta-fallback-config.ts +72 -0
  107. package/src/fec-manager.ts +457 -334
  108. package/src/fec-state.ts +20 -32
  109. package/src/fec-worker-setup.ts +109 -90
  110. package/src/index.ts +32 -0
  111. package/src/media-router.ts +59 -21
  112. package/src/mmtp-container-parser.ts +106 -20
  113. package/src/mmtp-router.ts +189 -330
  114. package/src/multicast-manager.ts +265 -86
  115. package/src/multicast-transport.ts +16 -9
  116. package/src/repair-fetch.ts +273 -43
  117. package/src/repair-layers.ts +28 -8
  118. package/src/track-session.ts +28 -9
  119. package/test-vectors/catalog/README.md +37 -17
  120. package/test-vectors/catalog/negative/fec-block-profile-retired.json +52 -0
  121. package/test-vectors/catalog/negative/fec-enhancement-repair-removed.json +1 -1
  122. package/test-vectors/catalog/negative/fec-repair-layer-geometry.json +1 -1
  123. package/test-vectors/catalog/negative/fec-repair-layer-missing-symbols.json +1 -1
  124. package/test-vectors/catalog/negative/fec-repair-multiple-depends.json +1 -1
  125. package/test-vectors/catalog/negative/fec-repair-overlay-with-layer.json +1 -1
  126. package/test-vectors/catalog/negative/fec-repair-priority-out-of-band.json +1 -1
  127. package/test-vectors/catalog/negative/fec-repair-source-symbols-without-scope.json +1 -1
  128. package/test-vectors/catalog/negative/multicast-endpoint-relay-address.json +39 -0
  129. package/test-vectors/catalog/negative/multicast-network-source-empty.json +1 -1
  130. package/test-vectors/catalog/negative/raptorq-source-symbols-over-max.json +1 -1
  131. package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +1 -1
  132. package/test-vectors/catalog/positive/fec-layered-repair.json +2 -2
  133. package/test-vectors/catalog/positive/fec-multicast.json +2 -1
  134. package/test-vectors/catalog/positive/multicast-amt-manual-relay.json +38 -0
  135. package/test-vectors/catalog/positive/multicast-native-ssm-no-network-source.json +2 -1
  136. package/test-vectors/catalog-timing.json +356 -0
  137. package/test-vectors/catalog-validation.json +40 -5
  138. package/test-vectors/delivery-catalog/README.md +11 -0
  139. package/test-vectors/delivery-catalog/negative/missing-block-profile.json +58 -0
  140. package/test-vectors/delivery-catalog/negative/packet-id-signaling.json +59 -0
  141. package/test-vectors/delivery-catalog/negative/retired-k-padded-block-profile.json +59 -0
  142. package/test-vectors/delivery-catalog/positive/dash.json +56 -0
  143. package/test-vectors/delivery-catalog/positive/mmtp-source-only.json +43 -0
  144. package/node_modules/@blockcast/fec-worker/README.md +0 -223
  145. package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
  146. package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts +0 -38
  147. package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts.map +0 -1
  148. package/node_modules/@blockcast/fec-worker/dist/block-order.js +0 -78
  149. package/node_modules/@blockcast/fec-worker/dist/block-order.js.map +0 -1
  150. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +0 -93
  151. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts.map +0 -1
  152. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js +0 -346
  153. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js.map +0 -1
  154. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +0 -380
  155. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +0 -1
  156. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js +0 -11
  157. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js.map +0 -1
  158. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts +0 -14
  159. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts.map +0 -1
  160. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +0 -859
  161. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +0 -7
  162. package/node_modules/@blockcast/fec-worker/dist/index.d.ts +0 -10
  163. package/node_modules/@blockcast/fec-worker/dist/index.d.ts.map +0 -1
  164. package/node_modules/@blockcast/fec-worker/dist/index.js +0 -8
  165. package/node_modules/@blockcast/fec-worker/dist/index.js.map +0 -1
  166. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts +0 -20
  167. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts.map +0 -1
  168. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js +0 -370
  169. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js.map +0 -7
  170. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts +0 -104
  171. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts.map +0 -1
  172. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js +0 -181
  173. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js.map +0 -1
  174. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts +0 -194
  175. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts.map +0 -1
  176. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js +0 -62
  177. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js.map +0 -1
  178. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts +0 -9
  179. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts.map +0 -1
  180. package/node_modules/@blockcast/fec-worker/dist/transfer.js +0 -13
  181. package/node_modules/@blockcast/fec-worker/dist/transfer.js.map +0 -1
  182. package/node_modules/@blockcast/fec-worker/package.json +0 -59
  183. package/node_modules/@blockcast/fec-worker/src/block-order.ts +0 -93
  184. package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +0 -392
  185. package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +0 -399
  186. package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +0 -1502
  187. package/node_modules/@blockcast/fec-worker/src/index.ts +0 -35
  188. package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +0 -589
  189. package/node_modules/@blockcast/fec-worker/src/shred-worker-client.ts +0 -222
  190. package/node_modules/@blockcast/fec-worker/src/shred-worker-types.ts +0 -209
  191. package/node_modules/@blockcast/fec-worker/src/transfer.ts +0 -12
  192. package/node_modules/@blockcast/mmt-alta-parse/README.md +0 -181
  193. package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  194. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +0 -57
  195. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +0 -1
  196. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +0 -115
  197. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +0 -1
  198. package/node_modules/@blockcast/mmt-alta-parse/package.json +0 -50
  199. package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +0 -136
  200. package/node_modules/@blockcast/mmt-base/README.md +0 -134
  201. package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  202. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +0 -55
  203. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +0 -1
  204. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +0 -128
  205. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +0 -1
  206. package/node_modules/@blockcast/mmt-base/dist/index.d.ts +0 -7
  207. package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +0 -1
  208. package/node_modules/@blockcast/mmt-base/dist/index.js +0 -7
  209. package/node_modules/@blockcast/mmt-base/dist/index.js.map +0 -1
  210. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -292
  211. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +0 -1
  212. package/node_modules/@blockcast/mmt-base/dist/mmtp.js +0 -612
  213. package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +0 -1
  214. package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +0 -18
  215. package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +0 -1
  216. package/node_modules/@blockcast/mmt-base/dist/net-constants.js +0 -18
  217. package/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +0 -1
  218. package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +0 -47
  219. package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +0 -1
  220. package/node_modules/@blockcast/mmt-base/dist/ntp-short.js +0 -54
  221. package/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +0 -1
  222. package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +0 -57
  223. package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +0 -1
  224. package/node_modules/@blockcast/mmt-base/dist/serial-number.js +0 -98
  225. package/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +0 -1
  226. package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +0 -312
  227. package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +0 -1
  228. package/node_modules/@blockcast/mmt-base/dist/signalling.js +0 -637
  229. package/node_modules/@blockcast/mmt-base/dist/signalling.js.map +0 -1
  230. package/node_modules/@blockcast/mmt-base/package.json +0 -49
  231. package/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +0 -145
  232. package/node_modules/@blockcast/mmt-base/src/index.ts +0 -6
  233. package/node_modules/@blockcast/mmt-base/src/mmtp.ts +0 -892
  234. package/node_modules/@blockcast/mmt-base/src/net-constants.ts +0 -17
  235. package/node_modules/@blockcast/mmt-base/src/ntp-short.ts +0 -67
  236. package/node_modules/@blockcast/mmt-base/src/serial-number.ts +0 -107
  237. package/node_modules/@blockcast/mmt-base/src/signalling.ts +0 -862
  238. package/node_modules/@blockcast/mmt-fec/README.md +0 -271
  239. package/node_modules/@blockcast/mmt-fec/dist/.build-stamp +0 -0
  240. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts +0 -82
  241. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts.map +0 -1
  242. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js +0 -296
  243. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js.map +0 -1
  244. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts +0 -106
  245. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts.map +0 -1
  246. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js +0 -288
  247. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js.map +0 -1
  248. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts +0 -46
  249. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts.map +0 -1
  250. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js +0 -96
  251. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js.map +0 -1
  252. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts +0 -33
  253. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts.map +0 -1
  254. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js +0 -57
  255. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js.map +0 -1
  256. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts +0 -205
  257. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +0 -1
  258. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +0 -240
  259. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +0 -1
  260. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +0 -28
  261. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +0 -1
  262. package/node_modules/@blockcast/mmt-fec/dist/index.js +0 -28
  263. package/node_modules/@blockcast/mmt-fec/dist/index.js.map +0 -1
  264. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts +0 -20
  265. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts.map +0 -1
  266. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js +0 -28
  267. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js.map +0 -1
  268. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +0 -258
  269. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +0 -1
  270. package/node_modules/@blockcast/mmt-fec/dist/oti.js +0 -382
  271. package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +0 -1
  272. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts +0 -41
  273. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts.map +0 -1
  274. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js +0 -81
  275. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js.map +0 -1
  276. package/node_modules/@blockcast/mmt-fec/dist/repair-group.d.ts +0 -82
  277. package/node_modules/@blockcast/mmt-fec/dist/repair-group.d.ts.map +0 -1
  278. package/node_modules/@blockcast/mmt-fec/dist/repair-group.js +0 -170
  279. package/node_modules/@blockcast/mmt-fec/dist/repair-group.js.map +0 -1
  280. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/README.md +0 -181
  281. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  282. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +0 -57
  283. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +0 -1
  284. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js +0 -115
  285. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +0 -1
  286. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/package.json +0 -50
  287. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/src/index.ts +0 -136
  288. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +0 -134
  289. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  290. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +0 -55
  291. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +0 -1
  292. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +0 -128
  293. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +0 -1
  294. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +0 -7
  295. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +0 -1
  296. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +0 -7
  297. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +0 -1
  298. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -292
  299. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +0 -1
  300. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +0 -612
  301. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +0 -1
  302. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +0 -18
  303. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +0 -1
  304. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js +0 -18
  305. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +0 -1
  306. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +0 -47
  307. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +0 -1
  308. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js +0 -54
  309. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +0 -1
  310. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +0 -57
  311. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +0 -1
  312. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js +0 -98
  313. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +0 -1
  314. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +0 -312
  315. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +0 -1
  316. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js +0 -637
  317. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js.map +0 -1
  318. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +0 -49
  319. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +0 -145
  320. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +0 -6
  321. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +0 -892
  322. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/net-constants.ts +0 -17
  323. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/ntp-short.ts +0 -67
  324. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/serial-number.ts +0 -107
  325. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/signalling.ts +0 -862
  326. package/node_modules/@blockcast/mmt-fec/package.json +0 -79
  327. package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +0 -371
  328. package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +0 -439
  329. package/node_modules/@blockcast/mmt-fec/src/cmaf-recovery.ts +0 -127
  330. package/node_modules/@blockcast/mmt-fec/src/cmaf-symbols.ts +0 -68
  331. package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +0 -310
  332. package/node_modules/@blockcast/mmt-fec/src/index.ts +0 -94
  333. package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +0 -34
  334. package/node_modules/@blockcast/mmt-fec/src/oti.ts +0 -463
  335. package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +0 -101
  336. package/node_modules/@blockcast/mmt-fec/src/repair-group.ts +0 -195
  337. package/node_modules/@blockcast/mmt-manifest-verify/dist/.build-stamp +0 -0
  338. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts +0 -28
  339. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts.map +0 -1
  340. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js +0 -128
  341. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js.map +0 -1
  342. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts +0 -4
  343. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts.map +0 -1
  344. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js +0 -4
  345. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js.map +0 -1
  346. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts +0 -37
  347. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts.map +0 -1
  348. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js +0 -179
  349. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js.map +0 -1
  350. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts +0 -99
  351. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts.map +0 -1
  352. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js +0 -492
  353. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js.map +0 -1
  354. package/node_modules/@blockcast/mmt-manifest-verify/package.json +0 -45
  355. package/node_modules/@blockcast/mmt-manifest-verify/src/admission.ts +0 -171
  356. package/node_modules/@blockcast/mmt-manifest-verify/src/index.ts +0 -3
  357. package/node_modules/@blockcast/mmt-manifest-verify/src/source-auth.ts +0 -230
  358. package/node_modules/@blockcast/mmt-manifest-verify/src/verifier.ts +0 -669
  359. package/node_modules/@noble/hashes/LICENSE +0 -21
  360. package/node_modules/@noble/hashes/README.md +0 -521
  361. package/node_modules/@noble/hashes/_assert.d.ts +0 -17
  362. package/node_modules/@noble/hashes/_assert.d.ts.map +0 -1
  363. package/node_modules/@noble/hashes/_assert.js +0 -18
  364. package/node_modules/@noble/hashes/_assert.js.map +0 -1
  365. package/node_modules/@noble/hashes/_blake.d.ts +0 -14
  366. package/node_modules/@noble/hashes/_blake.d.ts.map +0 -1
  367. package/node_modules/@noble/hashes/_blake.js +0 -50
  368. package/node_modules/@noble/hashes/_blake.js.map +0 -1
  369. package/node_modules/@noble/hashes/_md.d.ts +0 -51
  370. package/node_modules/@noble/hashes/_md.d.ts.map +0 -1
  371. package/node_modules/@noble/hashes/_md.js +0 -162
  372. package/node_modules/@noble/hashes/_md.js.map +0 -1
  373. package/node_modules/@noble/hashes/_u64.d.ts +0 -55
  374. package/node_modules/@noble/hashes/_u64.d.ts.map +0 -1
  375. package/node_modules/@noble/hashes/_u64.js +0 -90
  376. package/node_modules/@noble/hashes/_u64.js.map +0 -1
  377. package/node_modules/@noble/hashes/argon2.d.ts +0 -32
  378. package/node_modules/@noble/hashes/argon2.d.ts.map +0 -1
  379. package/node_modules/@noble/hashes/argon2.js +0 -401
  380. package/node_modules/@noble/hashes/argon2.js.map +0 -1
  381. package/node_modules/@noble/hashes/blake1.d.ts +0 -106
  382. package/node_modules/@noble/hashes/blake1.d.ts.map +0 -1
  383. package/node_modules/@noble/hashes/blake1.js +0 -459
  384. package/node_modules/@noble/hashes/blake1.js.map +0 -1
  385. package/node_modules/@noble/hashes/blake2.d.ts +0 -116
  386. package/node_modules/@noble/hashes/blake2.d.ts.map +0 -1
  387. package/node_modules/@noble/hashes/blake2.js +0 -420
  388. package/node_modules/@noble/hashes/blake2.js.map +0 -1
  389. package/node_modules/@noble/hashes/blake2b.d.ts +0 -11
  390. package/node_modules/@noble/hashes/blake2b.d.ts.map +0 -1
  391. package/node_modules/@noble/hashes/blake2b.js +0 -14
  392. package/node_modules/@noble/hashes/blake2b.js.map +0 -1
  393. package/node_modules/@noble/hashes/blake2s.d.ts +0 -20
  394. package/node_modules/@noble/hashes/blake2s.d.ts.map +0 -1
  395. package/node_modules/@noble/hashes/blake2s.js +0 -24
  396. package/node_modules/@noble/hashes/blake2s.js.map +0 -1
  397. package/node_modules/@noble/hashes/blake3.d.ts +0 -54
  398. package/node_modules/@noble/hashes/blake3.d.ts.map +0 -1
  399. package/node_modules/@noble/hashes/blake3.js +0 -255
  400. package/node_modules/@noble/hashes/blake3.js.map +0 -1
  401. package/node_modules/@noble/hashes/crypto.d.ts +0 -2
  402. package/node_modules/@noble/hashes/crypto.d.ts.map +0 -1
  403. package/node_modules/@noble/hashes/crypto.js +0 -5
  404. package/node_modules/@noble/hashes/crypto.js.map +0 -1
  405. package/node_modules/@noble/hashes/cryptoNode.d.ts +0 -2
  406. package/node_modules/@noble/hashes/cryptoNode.d.ts.map +0 -1
  407. package/node_modules/@noble/hashes/cryptoNode.js +0 -18
  408. package/node_modules/@noble/hashes/cryptoNode.js.map +0 -1
  409. package/node_modules/@noble/hashes/eskdf.d.ts +0 -47
  410. package/node_modules/@noble/hashes/eskdf.d.ts.map +0 -1
  411. package/node_modules/@noble/hashes/eskdf.js +0 -166
  412. package/node_modules/@noble/hashes/eskdf.js.map +0 -1
  413. package/node_modules/@noble/hashes/esm/_assert.d.ts +0 -17
  414. package/node_modules/@noble/hashes/esm/_assert.d.ts.map +0 -1
  415. package/node_modules/@noble/hashes/esm/_assert.js +0 -15
  416. package/node_modules/@noble/hashes/esm/_assert.js.map +0 -1
  417. package/node_modules/@noble/hashes/esm/_blake.d.ts +0 -14
  418. package/node_modules/@noble/hashes/esm/_blake.d.ts.map +0 -1
  419. package/node_modules/@noble/hashes/esm/_blake.js +0 -45
  420. package/node_modules/@noble/hashes/esm/_blake.js.map +0 -1
  421. package/node_modules/@noble/hashes/esm/_md.d.ts +0 -51
  422. package/node_modules/@noble/hashes/esm/_md.d.ts.map +0 -1
  423. package/node_modules/@noble/hashes/esm/_md.js +0 -155
  424. package/node_modules/@noble/hashes/esm/_md.js.map +0 -1
  425. package/node_modules/@noble/hashes/esm/_u64.d.ts +0 -55
  426. package/node_modules/@noble/hashes/esm/_u64.d.ts.map +0 -1
  427. package/node_modules/@noble/hashes/esm/_u64.js +0 -67
  428. package/node_modules/@noble/hashes/esm/_u64.js.map +0 -1
  429. package/node_modules/@noble/hashes/esm/argon2.d.ts +0 -32
  430. package/node_modules/@noble/hashes/esm/argon2.d.ts.map +0 -1
  431. package/node_modules/@noble/hashes/esm/argon2.js +0 -392
  432. package/node_modules/@noble/hashes/esm/argon2.js.map +0 -1
  433. package/node_modules/@noble/hashes/esm/blake1.d.ts +0 -106
  434. package/node_modules/@noble/hashes/esm/blake1.d.ts.map +0 -1
  435. package/node_modules/@noble/hashes/esm/blake1.js +0 -452
  436. package/node_modules/@noble/hashes/esm/blake1.js.map +0 -1
  437. package/node_modules/@noble/hashes/esm/blake2.d.ts +0 -116
  438. package/node_modules/@noble/hashes/esm/blake2.d.ts.map +0 -1
  439. package/node_modules/@noble/hashes/esm/blake2.js +0 -413
  440. package/node_modules/@noble/hashes/esm/blake2.js.map +0 -1
  441. package/node_modules/@noble/hashes/esm/blake2b.d.ts +0 -11
  442. package/node_modules/@noble/hashes/esm/blake2b.d.ts.map +0 -1
  443. package/node_modules/@noble/hashes/esm/blake2b.js +0 -11
  444. package/node_modules/@noble/hashes/esm/blake2b.js.map +0 -1
  445. package/node_modules/@noble/hashes/esm/blake2s.d.ts +0 -20
  446. package/node_modules/@noble/hashes/esm/blake2s.d.ts.map +0 -1
  447. package/node_modules/@noble/hashes/esm/blake2s.js +0 -21
  448. package/node_modules/@noble/hashes/esm/blake2s.js.map +0 -1
  449. package/node_modules/@noble/hashes/esm/blake3.d.ts +0 -54
  450. package/node_modules/@noble/hashes/esm/blake3.d.ts.map +0 -1
  451. package/node_modules/@noble/hashes/esm/blake3.js +0 -251
  452. package/node_modules/@noble/hashes/esm/blake3.js.map +0 -1
  453. package/node_modules/@noble/hashes/esm/crypto.d.ts +0 -2
  454. package/node_modules/@noble/hashes/esm/crypto.d.ts.map +0 -1
  455. package/node_modules/@noble/hashes/esm/crypto.js +0 -2
  456. package/node_modules/@noble/hashes/esm/crypto.js.map +0 -1
  457. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts +0 -2
  458. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts.map +0 -1
  459. package/node_modules/@noble/hashes/esm/cryptoNode.js +0 -15
  460. package/node_modules/@noble/hashes/esm/cryptoNode.js.map +0 -1
  461. package/node_modules/@noble/hashes/esm/eskdf.d.ts +0 -47
  462. package/node_modules/@noble/hashes/esm/eskdf.d.ts.map +0 -1
  463. package/node_modules/@noble/hashes/esm/eskdf.js +0 -160
  464. package/node_modules/@noble/hashes/esm/eskdf.js.map +0 -1
  465. package/node_modules/@noble/hashes/esm/hkdf.d.ts +0 -36
  466. package/node_modules/@noble/hashes/esm/hkdf.d.ts.map +0 -1
  467. package/node_modules/@noble/hashes/esm/hkdf.js +0 -82
  468. package/node_modules/@noble/hashes/esm/hkdf.js.map +0 -1
  469. package/node_modules/@noble/hashes/esm/hmac.d.ts +0 -35
  470. package/node_modules/@noble/hashes/esm/hmac.d.ts.map +0 -1
  471. package/node_modules/@noble/hashes/esm/hmac.js +0 -86
  472. package/node_modules/@noble/hashes/esm/hmac.js.map +0 -1
  473. package/node_modules/@noble/hashes/esm/index.d.ts +0 -2
  474. package/node_modules/@noble/hashes/esm/index.d.ts.map +0 -1
  475. package/node_modules/@noble/hashes/esm/index.js +0 -33
  476. package/node_modules/@noble/hashes/esm/index.js.map +0 -1
  477. package/node_modules/@noble/hashes/esm/legacy.d.ts +0 -71
  478. package/node_modules/@noble/hashes/esm/legacy.d.ts.map +0 -1
  479. package/node_modules/@noble/hashes/esm/legacy.js +0 -281
  480. package/node_modules/@noble/hashes/esm/legacy.js.map +0 -1
  481. package/node_modules/@noble/hashes/esm/package.json +0 -10
  482. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts +0 -23
  483. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts.map +0 -1
  484. package/node_modules/@noble/hashes/esm/pbkdf2.js +0 -97
  485. package/node_modules/@noble/hashes/esm/pbkdf2.js.map +0 -1
  486. package/node_modules/@noble/hashes/esm/ripemd160.d.ts +0 -13
  487. package/node_modules/@noble/hashes/esm/ripemd160.d.ts.map +0 -1
  488. package/node_modules/@noble/hashes/esm/ripemd160.js +0 -13
  489. package/node_modules/@noble/hashes/esm/ripemd160.js.map +0 -1
  490. package/node_modules/@noble/hashes/esm/scrypt.d.ts +0 -34
  491. package/node_modules/@noble/hashes/esm/scrypt.d.ts.map +0 -1
  492. package/node_modules/@noble/hashes/esm/scrypt.js +0 -228
  493. package/node_modules/@noble/hashes/esm/scrypt.js.map +0 -1
  494. package/node_modules/@noble/hashes/esm/sha1.d.ts +0 -11
  495. package/node_modules/@noble/hashes/esm/sha1.d.ts.map +0 -1
  496. package/node_modules/@noble/hashes/esm/sha1.js +0 -11
  497. package/node_modules/@noble/hashes/esm/sha1.js.map +0 -1
  498. package/node_modules/@noble/hashes/esm/sha2.d.ts +0 -159
  499. package/node_modules/@noble/hashes/esm/sha2.d.ts.map +0 -1
  500. package/node_modules/@noble/hashes/esm/sha2.js +0 -375
  501. package/node_modules/@noble/hashes/esm/sha2.js.map +0 -1
  502. package/node_modules/@noble/hashes/esm/sha256.d.ts +0 -20
  503. package/node_modules/@noble/hashes/esm/sha256.d.ts.map +0 -1
  504. package/node_modules/@noble/hashes/esm/sha256.js +0 -20
  505. package/node_modules/@noble/hashes/esm/sha256.js.map +0 -1
  506. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts +0 -142
  507. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts.map +0 -1
  508. package/node_modules/@noble/hashes/esm/sha3-addons.js +0 -393
  509. package/node_modules/@noble/hashes/esm/sha3-addons.js.map +0 -1
  510. package/node_modules/@noble/hashes/esm/sha3.d.ts +0 -53
  511. package/node_modules/@noble/hashes/esm/sha3.d.ts.map +0 -1
  512. package/node_modules/@noble/hashes/esm/sha3.js +0 -234
  513. package/node_modules/@noble/hashes/esm/sha3.js.map +0 -1
  514. package/node_modules/@noble/hashes/esm/sha512.d.ts +0 -26
  515. package/node_modules/@noble/hashes/esm/sha512.d.ts.map +0 -1
  516. package/node_modules/@noble/hashes/esm/sha512.js +0 -26
  517. package/node_modules/@noble/hashes/esm/sha512.js.map +0 -1
  518. package/node_modules/@noble/hashes/esm/utils.d.ts +0 -161
  519. package/node_modules/@noble/hashes/esm/utils.d.ts.map +0 -1
  520. package/node_modules/@noble/hashes/esm/utils.js +0 -281
  521. package/node_modules/@noble/hashes/esm/utils.js.map +0 -1
  522. package/node_modules/@noble/hashes/hkdf.d.ts +0 -36
  523. package/node_modules/@noble/hashes/hkdf.d.ts.map +0 -1
  524. package/node_modules/@noble/hashes/hkdf.js +0 -88
  525. package/node_modules/@noble/hashes/hkdf.js.map +0 -1
  526. package/node_modules/@noble/hashes/hmac.d.ts +0 -35
  527. package/node_modules/@noble/hashes/hmac.d.ts.map +0 -1
  528. package/node_modules/@noble/hashes/hmac.js +0 -91
  529. package/node_modules/@noble/hashes/hmac.js.map +0 -1
  530. package/node_modules/@noble/hashes/index.d.ts +0 -1
  531. package/node_modules/@noble/hashes/index.d.ts.map +0 -1
  532. package/node_modules/@noble/hashes/index.js +0 -33
  533. package/node_modules/@noble/hashes/index.js.map +0 -1
  534. package/node_modules/@noble/hashes/legacy.d.ts +0 -71
  535. package/node_modules/@noble/hashes/legacy.d.ts.map +0 -1
  536. package/node_modules/@noble/hashes/legacy.js +0 -287
  537. package/node_modules/@noble/hashes/legacy.js.map +0 -1
  538. package/node_modules/@noble/hashes/package.json +0 -266
  539. package/node_modules/@noble/hashes/pbkdf2.d.ts +0 -23
  540. package/node_modules/@noble/hashes/pbkdf2.d.ts.map +0 -1
  541. package/node_modules/@noble/hashes/pbkdf2.js +0 -101
  542. package/node_modules/@noble/hashes/pbkdf2.js.map +0 -1
  543. package/node_modules/@noble/hashes/ripemd160.d.ts +0 -13
  544. package/node_modules/@noble/hashes/ripemd160.d.ts.map +0 -1
  545. package/node_modules/@noble/hashes/ripemd160.js +0 -16
  546. package/node_modules/@noble/hashes/ripemd160.js.map +0 -1
  547. package/node_modules/@noble/hashes/scrypt.d.ts +0 -34
  548. package/node_modules/@noble/hashes/scrypt.d.ts.map +0 -1
  549. package/node_modules/@noble/hashes/scrypt.js +0 -232
  550. package/node_modules/@noble/hashes/scrypt.js.map +0 -1
  551. package/node_modules/@noble/hashes/sha1.d.ts +0 -11
  552. package/node_modules/@noble/hashes/sha1.d.ts.map +0 -1
  553. package/node_modules/@noble/hashes/sha1.js +0 -14
  554. package/node_modules/@noble/hashes/sha1.js.map +0 -1
  555. package/node_modules/@noble/hashes/sha2.d.ts +0 -159
  556. package/node_modules/@noble/hashes/sha2.d.ts.map +0 -1
  557. package/node_modules/@noble/hashes/sha2.js +0 -384
  558. package/node_modules/@noble/hashes/sha2.js.map +0 -1
  559. package/node_modules/@noble/hashes/sha256.d.ts +0 -20
  560. package/node_modules/@noble/hashes/sha256.d.ts.map +0 -1
  561. package/node_modules/@noble/hashes/sha256.js +0 -23
  562. package/node_modules/@noble/hashes/sha256.js.map +0 -1
  563. package/node_modules/@noble/hashes/sha3-addons.d.ts +0 -142
  564. package/node_modules/@noble/hashes/sha3-addons.d.ts.map +0 -1
  565. package/node_modules/@noble/hashes/sha3-addons.js +0 -402
  566. package/node_modules/@noble/hashes/sha3-addons.js.map +0 -1
  567. package/node_modules/@noble/hashes/sha3.d.ts +0 -53
  568. package/node_modules/@noble/hashes/sha3.d.ts.map +0 -1
  569. package/node_modules/@noble/hashes/sha3.js +0 -239
  570. package/node_modules/@noble/hashes/sha3.js.map +0 -1
  571. package/node_modules/@noble/hashes/sha512.d.ts +0 -26
  572. package/node_modules/@noble/hashes/sha512.d.ts.map +0 -1
  573. package/node_modules/@noble/hashes/sha512.js +0 -29
  574. package/node_modules/@noble/hashes/sha512.js.map +0 -1
  575. package/node_modules/@noble/hashes/src/_assert.ts +0 -22
  576. package/node_modules/@noble/hashes/src/_blake.ts +0 -50
  577. package/node_modules/@noble/hashes/src/_md.ts +0 -176
  578. package/node_modules/@noble/hashes/src/_u64.ts +0 -91
  579. package/node_modules/@noble/hashes/src/argon2.ts +0 -497
  580. package/node_modules/@noble/hashes/src/blake1.ts +0 -534
  581. package/node_modules/@noble/hashes/src/blake2.ts +0 -486
  582. package/node_modules/@noble/hashes/src/blake2b.ts +0 -10
  583. package/node_modules/@noble/hashes/src/blake2s.ts +0 -20
  584. package/node_modules/@noble/hashes/src/blake3.ts +0 -272
  585. package/node_modules/@noble/hashes/src/crypto.ts +0 -9
  586. package/node_modules/@noble/hashes/src/cryptoNode.ts +0 -15
  587. package/node_modules/@noble/hashes/src/eskdf.ts +0 -187
  588. package/node_modules/@noble/hashes/src/hkdf.ts +0 -88
  589. package/node_modules/@noble/hashes/src/hmac.ts +0 -94
  590. package/node_modules/@noble/hashes/src/index.ts +0 -31
  591. package/node_modules/@noble/hashes/src/legacy.ts +0 -293
  592. package/node_modules/@noble/hashes/src/pbkdf2.ts +0 -122
  593. package/node_modules/@noble/hashes/src/ripemd160.ts +0 -12
  594. package/node_modules/@noble/hashes/src/scrypt.ts +0 -257
  595. package/node_modules/@noble/hashes/src/sha1.ts +0 -10
  596. package/node_modules/@noble/hashes/src/sha2.ts +0 -402
  597. package/node_modules/@noble/hashes/src/sha256.ts +0 -24
  598. package/node_modules/@noble/hashes/src/sha3-addons.ts +0 -499
  599. package/node_modules/@noble/hashes/src/sha3.ts +0 -258
  600. package/node_modules/@noble/hashes/src/sha512.ts +0 -34
  601. package/node_modules/@noble/hashes/src/utils.ts +0 -395
  602. package/node_modules/@noble/hashes/utils.d.ts +0 -161
  603. package/node_modules/@noble/hashes/utils.d.ts.map +0 -1
  604. package/node_modules/@noble/hashes/utils.js +0 -313
  605. package/node_modules/@noble/hashes/utils.js.map +0 -1
@@ -1,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
- }