@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,62 +0,0 @@
1
- /**
2
- * @blockcast/fec-worker — Shred (Reed-Solomon) Worker Protocol
3
- *
4
- * A sibling codec to the RaptorQ/MMTP worker (`fec-worker.ts`). Solana-style
5
- * shred streams carry a different FEC payload identity than MMTP source/repair
6
- * symbols — a shred is `(slot, fecSetIndex, localIndex, numData, numCoding,
7
- * isCoding, lastInSet)`, not a flat `ssId` — so they need their own command
8
- * shape. The transport harness (Worker spawn, onmessage plumbing, zero-copy
9
- * `toOwnedArrayBuffer` transfers) is shared; the decoder WASM is not.
10
- *
11
- * The worker owns the batch-drain: the consumer transfers a WebTransport
12
- * `datagrams.readable` (or any `ReadableStream<Uint8Array>` of raw shred
13
- * frames) into the Worker via {@link ShredWorkerCommand} `attachStream`, and
14
- * the read loop + wire parse + `ShredFecBuffer.add_shred` all run off the main
15
- * thread. Only recovered FEC sets (and coalesced stats) cross back. A
16
- * `feedShred` command covers sources that have already demuxed the shred bytes
17
- * on the main thread (e.g. a moqtail OBJECT_DATAGRAM callback, or the IWA
18
- * multicast bridge).
19
- *
20
- * Types here are importable from both main thread and Worker contexts.
21
- */
22
- // --- Wire format ------------------------------------------------------------
23
- /**
24
- * Wire header layout the worker parses. Mirrors the deployed shred player's
25
- * `onShredBytes` exactly (libmmt shred-forwarder `emit_frame`) so the off-thread
26
- * path is bit-identical to the proven on-thread path.
27
- *
28
- * v3 (28-byte header):
29
- * [0] version u8 (3 or 4; any other version is dropped, not misframed)
30
- * [1-8] slot u64 LE
31
- * [9-12] fecSetIndex u32 LE
32
- * [13-16] localIndex u32 LE (data: 0..numData; coding: numData+position)
33
- * [17] flags u8 (bit0 = DATA_COMPLETE, bit1 = IS_CODING_SHRED)
34
- * [18] numData u8 (coding shreds only; 0 on data — WASM infers)
35
- * [19] numCoding u8 (coding shreds only; 0 on data)
36
- * [20-27] sendTsUs u64 LE (µs since epoch, 0 when unstamped)
37
- * [28+] erasureShard (equal length across the FEC set)
38
- *
39
- * DATA_COMPLETE (last data shred in the set) is passed to `add_shred` as its
40
- * `lastInSet` argument — the WASM uses it to infer numData for a set that
41
- * received only data shreds (no coding).
42
- *
43
- * v4 has the same 28-byte header, but its body is the full canonical Agave
44
- * shred (signature, headers, erasure shard, chained Merkle root, proof, and
45
- * the retransmitter signature on resigned variants) — the form a validator TVU
46
- * accepts (BLO-41383). The worker recovers the exact v3 erasure-shard view
47
- * from it with the forwarder's own `erasure_shard()` slice, so both versions
48
- * reach `add_shred` byte-identical:
49
- * variant = shred[64]; data 0x9_/0xb_, coding 0x6_/0x7_ (chained merkle;
50
- * 0xb_/0x7_ resigned), must agree with IS_CODING_SHRED
51
- * length = 1203 (data) / 1228 (coding), exactly
52
- * shard start = 64 (data: after the signature) / 89 (coding headers)
53
- * shard end = length - (32 root + 20 * (variant & 0x0f) proof
54
- * + 64 retransmitter signature if resigned)
55
- */
56
- export const SHRED_WIRE_VERSION = 3;
57
- /** Wire version whose body is the full canonical shred (see above). */
58
- export const SHRED_WIRE_VERSION_FULL = 4;
59
- export const SHRED_HEADER_LEN = 28;
60
- export const SHRED_FLAG_DATA_COMPLETE = 0x01;
61
- export const SHRED_FLAG_IS_CODING = 0x02;
62
- //# sourceMappingURL=shred-worker-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shred-worker-types.js","sourceRoot":"","sources":["../src/shred-worker-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,uEAAuE;AACvE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAC7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Return a fresh ArrayBuffer containing exactly the bytes in `view`.
3
- *
4
- * Worker outputs must not transfer buffers that might be owned by a WASM
5
- * binding or by a larger shared packet. A fresh JS-owned buffer gives
6
- * postMessage() exclusive ownership without detaching unrelated memory.
7
- */
8
- export declare function toOwnedArrayBuffer(view: Uint8Array): ArrayBuffer;
9
- //# sourceMappingURL=transfer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../src/transfer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAIhE"}
@@ -1,13 +0,0 @@
1
- /**
2
- * Return a fresh ArrayBuffer containing exactly the bytes in `view`.
3
- *
4
- * Worker outputs must not transfer buffers that might be owned by a WASM
5
- * binding or by a larger shared packet. A fresh JS-owned buffer gives
6
- * postMessage() exclusive ownership without detaching unrelated memory.
7
- */
8
- export function toOwnedArrayBuffer(view) {
9
- const copy = new Uint8Array(view.byteLength);
10
- copy.set(view);
11
- return copy.buffer;
12
- }
13
- //# sourceMappingURL=transfer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transfer.js","sourceRoot":"","sources":["../src/transfer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAgB;IAClD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACf,OAAO,IAAI,CAAC,MAAM,CAAC;AACpB,CAAC"}
@@ -1,59 +0,0 @@
1
- {
2
- "name": "@blockcast/fec-worker",
3
- "version": "0.3.0",
4
- "description": "Worker-per-track FEC decode with zero-copy ArrayBuffer transfer and ALTA auth plumbing",
5
- "type": "module",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "import": "./dist/index.js",
11
- "types": "./dist/index.d.ts"
12
- },
13
- "./worker": {
14
- "import": "./dist/fec-worker.js"
15
- },
16
- "./shred-worker": {
17
- "import": "./dist/shred-fec-worker.js"
18
- }
19
- },
20
- "files": [
21
- "dist",
22
- "src",
23
- "!src/**/*.test.ts",
24
- "!src/**/*.spec.ts",
25
- "!src/**/__tests__",
26
- "!dist/**/*.test.*",
27
- "!dist/**/*.spec.*"
28
- ],
29
- "scripts": {
30
- "build": "tsc && node build.mjs",
31
- "dev": "tsc --watch",
32
- "clean": "rm -rf dist",
33
- "typecheck": "tsc --noEmit",
34
- "test": "vitest run",
35
- "test:watch": "vitest"
36
- },
37
- "dependencies": {
38
- "@blockcast/mmt-alta-parse": "^0.3.0"
39
- },
40
- "devDependencies": {
41
- "esbuild": "^0.28.0",
42
- "typescript": "^5.3.0",
43
- "vitest": "^1.0.0"
44
- },
45
- "keywords": [
46
- "fec",
47
- "worker",
48
- "raptorq",
49
- "zero-copy",
50
- "transferable",
51
- "alta"
52
- ],
53
- "license": "Apache-2.0",
54
- "repository": {
55
- "type": "git",
56
- "url": "https://github.com/Blockcast/libmmt.git",
57
- "directory": "packages/fec-worker"
58
- }
59
- }
@@ -1,93 +0,0 @@
1
- /**
2
- * Order of K-stride FEC blocks on the 32-bit SS_ID (ISO/IEC 23008-1:2023
3
- * C.5.2; RFC 1982 serial arithmetic, SERIAL_BITS = 32; BLO-35597 iso:5).
4
- *
5
- * Block `sbn` starts at SS_ID `sbn * K mod 2^32`, and blocks are ordered by
6
- * serial comparison of their starts. That is identical to comparing SBNs
7
- * with < for any two blocks less than 2^31 SS_IDs apart, so only the order
8
- * across the SS_ID wrap changes.
9
- *
10
- * The canonical helpers are @blockcast/mmt-base `kStrideBlockPrecedes` /
11
- * `kStrideBlocksBehind`. This worker bundle does not depend on mmt-base, so
12
- * it carries these two, and block-order.test.ts pins them to the same wrap
13
- * vectors.
14
- */
15
-
16
- const SPAN = 0x1_0000_0000;
17
- const HALF = 0x8000_0000;
18
-
19
- function blockStart(sbn: number, k: number): number {
20
- // sbn < 2^32 and k <= 56 403 keep the product below 2^48: exact.
21
- return (sbn * k) % SPAN;
22
- }
23
-
24
- /** Forward SS_ID distance from block `a`'s start to block `b`'s, or null when `a` does not precede `b`. */
25
- function precedingDistance(a: number, b: number, k: number): number | null {
26
- const distance = (blockStart(b, k) - blockStart(a, k) + SPAN) % SPAN;
27
- return distance !== 0 && distance < HALF ? distance : null;
28
- }
29
-
30
- /** Whether block `a` precedes block `b`. */
31
- export function blockPrecedes(a: number, b: number, k: number): boolean {
32
- return precedingDistance(a, b, k) !== null;
33
- }
34
-
35
- /**
36
- * How many blocks `a` lies behind `b`: 0 unless `a` precedes `b`. Across the
37
- * wrap the short pre-wrap block (2^32 mod K symbols) counts as one block.
38
- */
39
- export function blocksBehind(a: number, b: number, k: number): number {
40
- const distance = precedingDistance(a, b, k);
41
- return distance === null ? 0 : Math.ceil(distance / k);
42
- }
43
-
44
- // --- iso-ssbg1-v1 (ISO/IEC 23008-1 C.3.3 ssbg_mode1; C.5.2/C.5.3) ---------
45
- //
46
- // Under the ISO profile SS_ID increments by one per FEC source packet and
47
- // wraps at 2^32, and a block is the SSB_length consecutive SS_IDs
48
- // `[SS_Start, SS_Start + SSB_length)`. Blocks are keyed and ordered by their
49
- // SS_Start, never by an SBN derived from K: the catalog K is only the maximum
50
- // block length (kMax). The canonical helpers are @blockcast/mmt-base
51
- // `serial32Distance` / `serial32Precedes` / `isoBlockContains` /
52
- // `isoBlocksBehindLowerBound`; this bundle carries its own copies (it does not
53
- // depend on mmt-base), and block-order.test.ts pins them to the same vectors.
54
-
55
- /** Forward RFC 1982 distance from `from` to `to` on the 32-bit SS_ID, in 0..2^32-1. */
56
- export function serialDistance(from: number, to: number): number {
57
- return (to - from + SPAN) % SPAN;
58
- }
59
-
60
- /** Whether `a` precedes `b` under RFC 1982 serial comparison (SERIAL_BITS = 32). */
61
- export function serialPrecedes(a: number, b: number): boolean {
62
- const distance = serialDistance(a, b);
63
- return distance !== 0 && distance < HALF;
64
- }
65
-
66
- /** Whether `ssId` is one of the `ssbLength` consecutive SS_IDs starting at `ssStart`, mod 2^32. */
67
- export function isoBlockContains(ssStart: number, ssbLength: number, ssId: number): boolean {
68
- return serialDistance(ssStart, ssId) < ssbLength;
69
- }
70
-
71
- /** Whether two SS_ID ranges `[start, start + length)` share any SS_ID, mod 2^32. */
72
- export function isoBlocksOverlap(
73
- aStart: number,
74
- aLength: number,
75
- bStart: number,
76
- bLength: number,
77
- ): boolean {
78
- return isoBlockContains(aStart, aLength, bStart) || isoBlockContains(bStart, bLength, aStart);
79
- }
80
-
81
- /**
82
- * How many blocks SS_ID `a` lies behind SS_ID `b` (0 unless `a` precedes `b`):
83
- * a lower bound, because an iso-ssbg1-v1 block holds at most `kMax` source
84
- * symbols, so `n * kMax` SS_IDs always span at least `n` blocks. This is the
85
- * one interleave-horizon metric every ISO receiver layer shares (decoder
86
- * retention, worker retirement, ordered-relay settlement).
87
- */
88
- export function isoBlocksBehind(a: number, b: number, kMax: number): number {
89
- if (!Number.isSafeInteger(kMax) || kMax <= 0) {
90
- throw new Error(`iso-ssbg1-v1 block horizon needs a positive maximum K (got ${kMax})`);
91
- }
92
- return serialPrecedes(a, b) ? Math.floor(serialDistance(a, b) / kMax) : 0;
93
- }
@@ -1,392 +0,0 @@
1
- /**
2
- * @blockcast/fec-worker — Main-Thread Client
3
- *
4
- * Wraps one Worker per track instance. Provides typed API for the
5
- * FecWorkerCommand/FecWorkerEvent protocol with zero-copy ArrayBuffer transfers.
6
- *
7
- * Constructor accepts either a URL (creates Worker internally) or a pre-created
8
- * Worker instance (for testing via constructor injection).
9
- */
10
-
11
- import type {
12
- FecWorkerCommand,
13
- FecSymbolCommand,
14
- FecWorkerEvent,
15
- FecTrackConfig,
16
- FecTrackStats,
17
- FecBlockSnapshot,
18
- FrameMeta,
19
- FecWorkerErrorCode,
20
- } from "./fec-worker-types.js";
21
-
22
- export class FecWorkerClient {
23
- readonly #worker: Worker;
24
- #onFrame: ((data: ArrayBuffer, meta: FrameMeta) => void) | null = null;
25
- #onSnapshot: ((stats: FecTrackStats) => void) | null = null;
26
- #onBlockUpdate: ((block: FecBlockSnapshot) => void) | null = null;
27
- #onCleanupComplete: ((sbn: number) => void) | null = null;
28
- #onError: ((message: string, code?: FecWorkerErrorCode) => void) | null = null;
29
- #cleanupInFlight: Set<number> | null = null;
30
- #queuedCleanupSbns = new Set<number>();
31
- #pendingResets = 0;
32
- #resetFailed = false;
33
- #disposed = false;
34
- // Symbols fed during the current task, sent as one feedSymbols message
35
- // when the task's microtasks run (BLO-36599). A packet stream delivers many
36
- // symbols per task, and each postMessage is a structured-clone round trip
37
- // on the page thread; the batch boundary is the task, not a size or timer.
38
- #pendingSymbols: FecSymbolCommand[] = [];
39
- #pendingTransfer: Transferable[] = [];
40
- #flushQueued = false;
41
- // Batching starts only once the Worker announced it accepts feedSymbols.
42
- #batchSymbols = false;
43
- // The Worker posts blockUpdate events only to a client that subscribed,
44
- // which this client does once a callback is registered and the Worker
45
- // announced the command (BLO-36599).
46
- #blockUpdatesAnnounced = false;
47
- #blockUpdatesSubscribed = false;
48
-
49
- /**
50
- * Create a FecWorkerClient.
51
- * @param workerOrUrl - Either a Worker instance (for testing) or a URL to create one
52
- */
53
- constructor(workerOrUrl: Worker | URL) {
54
- if (workerOrUrl instanceof URL) {
55
- this.#worker = new Worker(workerOrUrl, { type: "module" });
56
- } else {
57
- this.#worker = workerOrUrl;
58
- }
59
- this.#worker.onmessage = (e: MessageEvent<FecWorkerEvent>) =>
60
- this.#handleEvent(e.data);
61
- this.#worker.onerror = (e) => {
62
- this.#onError?.(formatWorkerError(e), "worker-runtime");
63
- };
64
- this.#worker.onmessageerror = (e) => {
65
- this.#onError?.(formatWorkerMessageError(e), "worker-message");
66
- };
67
- }
68
-
69
- /**
70
- * Configure the Worker with FEC parameters and WASM module.
71
- * wasmModule is transferred (not neutered — WebAssembly.Module is shareable).
72
- * altaPublicKey is PKCS#8 SPKI DER bytes (self-describing — algorithm detected from OID).
73
- * Transferred (detached from sender).
74
- * altaWasmModule is structured-cloneable (NOT transferable — do not add to transfer list).
75
- */
76
- configure(
77
- config: FecTrackConfig,
78
- wasmModule: WebAssembly.Module,
79
- altaPublicKey?: ArrayBuffer,
80
- altaWasmModule?: WebAssembly.Module,
81
- ): void {
82
- if (this.#disposed) throw new Error("[FecWorkerClient] disposed");
83
- this.#flushSymbols();
84
- const cmd: FecWorkerCommand = {
85
- type: "configure",
86
- config,
87
- wasmModule,
88
- altaPublicKey,
89
- altaWasmModule,
90
- };
91
- // WebAssembly.Module is structured-cloneable, NOT transferable.
92
- // Pass it in the message body (Chrome clones it automatically).
93
- // Only ArrayBuffers (like altaPublicKey) go in the transfer list.
94
- const transferList: Transferable[] = [];
95
- if (altaPublicKey) transferList.push(altaPublicKey);
96
- // altaWasmModule is structured-cloneable — NOT added to transferList
97
- this.#worker.postMessage(cmd, transferList);
98
- }
99
-
100
- /**
101
- * Feed a source symbol to the Worker. data ArrayBuffer is transferred (zero-copy).
102
- * Caller must not access data after this call — it is transferred with the
103
- * task's symbol batch, before any later command of this client.
104
- *
105
- * Optional `alta` carries the detached ALTA authenticator bytes and the
106
- * byte offset in `data` where the signed payload ends. The auth buffer is
107
- * transferred zero-copy alongside `data`. Use {@link getMmtpAltaTrailer}
108
- * upstream (mmtp-router) to extract it from the wire packet.
109
- */
110
- feedSource(
111
- ssId: number,
112
- data: ArrayBuffer,
113
- ts: number,
114
- alta?: { auth: ArrayBuffer; payloadEnd: number },
115
- ): void {
116
- if (this.#disposed) throw new Error("[FecWorkerClient] feedSource on a disposed client");
117
- if (alta) {
118
- this.#queueSymbol(
119
- {
120
- type: "feedSource",
121
- ssId,
122
- data,
123
- ts,
124
- altaAuth: alta.auth,
125
- altaPayloadEnd: alta.payloadEnd,
126
- },
127
- data,
128
- alta.auth,
129
- );
130
- } else {
131
- this.#queueSymbol({ type: "feedSource", ssId, data, ts }, data);
132
- }
133
- }
134
-
135
- /**
136
- * Feed a repair symbol to the Worker. data ArrayBuffer is transferred (zero-copy).
137
- * Caller must not access data after this call — it is detached.
138
- *
139
- * Carries the wire-level Repair FEC Payload ID fields (ISO 23008-1 §C.5.3):
140
- * - ssStart: SS_ID of first source symbol in the block (= SBN * configured K
141
- * under `k-padded-v1`; any uint32, the block key, under `iso-ssbg1-v1`)
142
- * - ssbLength: authored source-symbol count (1..configured K)
143
- * - rsId: repair symbol index within the block
144
- */
145
- feedRepair(
146
- ssStart: number,
147
- ssbLength: number,
148
- rsId: number,
149
- data: ArrayBuffer,
150
- ts: number,
151
- ): void {
152
- if (this.#disposed) throw new Error("[FecWorkerClient] feedRepair on a disposed client");
153
- this.#queueSymbol({ type: "feedRepair", ssStart, ssbLength, rsId, data, ts }, data);
154
- }
155
-
156
- #queueSymbol(symbol: FecSymbolCommand, data: ArrayBuffer, auth?: ArrayBuffer): void {
157
- if (!this.#batchSymbols) {
158
- this.#worker.postMessage(symbol, auth ? [data, auth] : [data]);
159
- return;
160
- }
161
- this.#pendingSymbols.push(symbol);
162
- this.#pendingTransfer.push(data);
163
- if (auth) this.#pendingTransfer.push(auth);
164
- if (this.#flushQueued) return;
165
- this.#flushQueued = true;
166
- queueMicrotask(() => {
167
- this.#flushQueued = false;
168
- this.#flushSymbols();
169
- });
170
- }
171
-
172
- /**
173
- * Send the symbols fed so far. Every other command calls this first, so a
174
- * cleanup barrier, reset or signature still follows all earlier symbols.
175
- */
176
- #flushSymbols(): void {
177
- if (this.#pendingSymbols.length === 0 || this.#disposed) return;
178
- const symbols = this.#pendingSymbols;
179
- const transfer = this.#pendingTransfer;
180
- this.#pendingSymbols = [];
181
- this.#pendingTransfer = [];
182
- this.#worker.postMessage(
183
- { type: "feedSymbols", symbols } satisfies FecWorkerCommand,
184
- transfer,
185
- );
186
- }
187
-
188
- /**
189
- * Submit relay block signature for verification. sig and hash are transferred.
190
- */
191
- relayBlockSig(sbn: number, sig: ArrayBuffer, hash: ArrayBuffer): void {
192
- if (this.#disposed) throw new Error("[FecWorkerClient] relayBlockSig on a disposed client");
193
- this.#flushSymbols();
194
- this.#worker.postMessage(
195
- { type: "relayBlockSig", sbn, sig, hash } satisfies FecWorkerCommand,
196
- [sig, hash],
197
- );
198
- }
199
-
200
- /**
201
- * Trigger cleanup after a block's inactivity deadline. `currentSbn` is the
202
- * block key: the SBN under `k-padded-v1`, the SS_Start under `iso-ssbg1-v1`.
203
- *
204
- * While one queue-drain barrier is in flight, later SBNs are coalesced into
205
- * the next command without losing their individual acknowledgement identity.
206
- */
207
- cleanup(currentSbn: number): void {
208
- if (this.#disposed) throw new Error("[FecWorkerClient] cleanup on a disposed client");
209
- if (
210
- !Number.isInteger(currentSbn) ||
211
- currentSbn < 0 ||
212
- currentSbn > 0xffff_ffff
213
- ) {
214
- throw new Error("[FecWorkerClient] cleanup: SBN must be a uint32");
215
- }
216
- if (this.#cleanupInFlight) {
217
- this.#queuedCleanupSbns.add(currentSbn);
218
- return;
219
- }
220
- this.#postCleanup(new Set([currentSbn]));
221
- }
222
-
223
- /** Reset this track's decoder epoch while preserving Worker configuration. */
224
- reset(): void {
225
- if (this.#disposed) throw new Error("[FecWorkerClient] reset on a disposed client");
226
- this.#flushSymbols();
227
- this.#pendingResets++;
228
- this.#cleanupInFlight = null;
229
- this.#queuedCleanupSbns.clear();
230
- this.#worker.postMessage({ type: "reset" } satisfies FecWorkerCommand);
231
- }
232
-
233
- #postCleanup(sbns: Set<number>): void {
234
- // The cleanup is a queue-drain barrier: every symbol fed before it is
235
- // posted must reach the Worker first.
236
- this.#flushSymbols();
237
- this.#cleanupInFlight = sbns;
238
- const orderedSbns = [...sbns].sort((a, b) => a - b);
239
- this.#worker.postMessage(
240
- { type: "cleanup", sbns: orderedSbns } satisfies FecWorkerCommand,
241
- );
242
- }
243
-
244
- /** Register callback for decoded/recovered frames (FEC-03). */
245
- onFrame(cb: (data: ArrayBuffer, meta: FrameMeta) => void): void {
246
- this.#onFrame = cb;
247
- }
248
-
249
- /** Register callback for periodic stats snapshots (FEC-04). */
250
- onSnapshot(cb: (stats: FecTrackStats) => void): void {
251
- this.#onSnapshot = cb;
252
- }
253
-
254
- /**
255
- * Register callback for individual block state changes. The Worker posts
256
- * them only once asked, so registering subscribes (after the Worker
257
- * announces `subscribeBlockUpdates`). An older Worker that does not
258
- * announce it posts them unasked.
259
- */
260
- onBlockUpdate(cb: (block: FecBlockSnapshot) => void): void {
261
- this.#onBlockUpdate = cb;
262
- this.#subscribeBlockUpdates();
263
- }
264
-
265
- #subscribeBlockUpdates(): void {
266
- if (
267
- this.#disposed ||
268
- this.#blockUpdatesSubscribed ||
269
- !this.#blockUpdatesAnnounced ||
270
- !this.#onBlockUpdate
271
- ) return;
272
- this.#blockUpdatesSubscribed = true;
273
- this.#worker.postMessage(
274
- { type: "subscribeBlockUpdates" } satisfies FecWorkerCommand,
275
- );
276
- }
277
-
278
- /** Register callback fired after the Worker drains all commands queued before cleanup. */
279
- onCleanupComplete(cb: (sbn: number) => void): void {
280
- this.#onCleanupComplete = cb;
281
- }
282
-
283
- /** Register callback for Worker errors. */
284
- onError(cb: (message: string, code?: FecWorkerErrorCode) => void): void {
285
- this.#onError = cb;
286
- }
287
-
288
- /**
289
- * True once dispose() ran. A disposed client cannot decode, fill, or
290
- * acknowledge anything, so routing symbols to it discards them; every
291
- * command method (feedSource, feedRepair, relayBlockSig, cleanup, reset)
292
- * throws rather than pretend otherwise. Callers check this first.
293
- */
294
- get disposed(): boolean {
295
- return this.#disposed;
296
- }
297
-
298
- /**
299
- * Dispose the Worker. Sends dispose command then terminates.
300
- * Idempotent — safe to call multiple times.
301
- */
302
- dispose(): void {
303
- if (this.#disposed) return;
304
- this.#disposed = true;
305
- // A terminated Worker decodes nothing; symbols still batched are dropped.
306
- this.#pendingSymbols = [];
307
- this.#pendingTransfer = [];
308
- this.#cleanupInFlight = null;
309
- this.#queuedCleanupSbns.clear();
310
- this.#worker.postMessage({ type: "dispose" } satisfies FecWorkerCommand);
311
- this.#worker.terminate();
312
- }
313
-
314
- #handleEvent(event: FecWorkerEvent): void {
315
- if (event.type === "capabilities") {
316
- if (Array.isArray(event.commands) && event.commands.includes("feedSymbols")) {
317
- this.#batchSymbols = true;
318
- }
319
- if (Array.isArray(event.commands) && event.commands.includes("subscribeBlockUpdates")) {
320
- this.#blockUpdatesAnnounced = true;
321
- this.#subscribeBlockUpdates();
322
- }
323
- return;
324
- }
325
- if (event.type === "resetComplete") {
326
- this.#pendingResets = Math.max(0, this.#pendingResets - 1);
327
- this.#resetFailed = false;
328
- return;
329
- }
330
- if (event.type === "error") {
331
- if (event.code === "reset-failed") {
332
- this.#pendingResets = Math.max(0, this.#pendingResets - 1);
333
- this.#resetFailed = true;
334
- }
335
- if (event.code) this.#onError?.(event.message, event.code);
336
- else this.#onError?.(event.message);
337
- return;
338
- }
339
- if (this.#pendingResets > 0 || this.#resetFailed) return;
340
- switch (event.type) {
341
- case "frame":
342
- this.#onFrame?.(event.data, event.meta);
343
- break;
344
- case "snapshot":
345
- this.#onSnapshot?.(event.stats);
346
- break;
347
- case "blockUpdate":
348
- this.#onBlockUpdate?.(event.block);
349
- break;
350
- case "cleanupComplete":
351
- for (const sbn of event.sbns) {
352
- this.#onCleanupComplete?.(sbn);
353
- }
354
- this.#cleanupInFlight = null;
355
- if (this.#queuedCleanupSbns.size > 0) {
356
- const next = this.#queuedCleanupSbns;
357
- this.#queuedCleanupSbns = new Set();
358
- this.#postCleanup(next);
359
- }
360
- break;
361
- }
362
- }
363
- }
364
-
365
- function formatWorkerError(event: ErrorEvent): string {
366
- const parts = ["Worker error"];
367
- if (event.message) parts.push(event.message);
368
- if (event.filename) {
369
- const location = [event.filename];
370
- if (event.lineno) location.push(String(event.lineno));
371
- if (event.colno) location.push(String(event.colno));
372
- parts.push(`at ${location.join(":")}`);
373
- }
374
- if (event.error instanceof Error) {
375
- if (event.error.message && event.error.message !== event.message) {
376
- parts.push(event.error.message);
377
- }
378
- if (event.error.stack) parts.push(event.error.stack);
379
- } else if (event.error != null) {
380
- parts.push(String(event.error));
381
- }
382
- return parts.join(": ");
383
- }
384
-
385
- function formatWorkerMessageError(event: MessageEvent): string {
386
- const data = event.data;
387
- const detail =
388
- data == null ? "" :
389
- data instanceof Error ? `: ${data.message}` :
390
- `: ${Object.prototype.toString.call(data)}`;
391
- return `Worker messageerror: failed to deserialize worker message${detail}`;
392
- }