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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (678) hide show
  1. package/README.md +432 -0
  2. package/dist/.build-stamp +0 -0
  3. package/dist/__tests__/test-utils.d.ts +71 -0
  4. package/dist/__tests__/test-utils.d.ts.map +1 -0
  5. package/dist/align.d.ts +148 -0
  6. package/dist/align.d.ts.map +1 -0
  7. package/dist/align.js +88 -0
  8. package/dist/align.js.map +7 -0
  9. package/dist/audio-init-parser.d.ts +66 -0
  10. package/dist/audio-init-parser.d.ts.map +1 -0
  11. package/dist/audio-init-parser.js +118 -0
  12. package/dist/audio-init-parser.js.map +7 -0
  13. package/dist/audio-ring-buffer.d.ts +50 -0
  14. package/dist/audio-ring-buffer.d.ts.map +1 -0
  15. package/dist/audio-ring-buffer.js +93 -0
  16. package/dist/audio-ring-buffer.js.map +7 -0
  17. package/dist/authored-timing.d.ts +32 -0
  18. package/dist/authored-timing.d.ts.map +1 -0
  19. package/dist/authored-timing.js +32 -0
  20. package/dist/authored-timing.js.map +7 -0
  21. package/dist/browser-runtime.js +17109 -0
  22. package/dist/browser-runtime.js.map +7 -0
  23. package/dist/carp-catalog.d.ts +318 -0
  24. package/dist/carp-catalog.d.ts.map +1 -0
  25. package/dist/carp-catalog.js +549 -0
  26. package/dist/carp-catalog.js.map +7 -0
  27. package/dist/catalog-fec-params.d.ts +82 -0
  28. package/dist/catalog-fec-params.d.ts.map +1 -0
  29. package/dist/catalog-fec-params.js +66 -0
  30. package/dist/catalog-fec-params.js.map +7 -0
  31. package/dist/catalog-network-source.d.ts +19 -0
  32. package/dist/catalog-network-source.d.ts.map +1 -0
  33. package/dist/catalog-network-source.js +22 -0
  34. package/dist/catalog-network-source.js.map +7 -0
  35. package/dist/catalog-validator.d.ts +18 -0
  36. package/dist/catalog-validator.d.ts.map +1 -0
  37. package/dist/catalog-validator.js +7747 -0
  38. package/dist/catalog-validator.js.map +7 -0
  39. package/dist/cmaf-block-assembler.d.ts +168 -0
  40. package/dist/cmaf-block-assembler.d.ts.map +1 -0
  41. package/dist/cmaf-block-assembler.js +1755 -0
  42. package/dist/cmaf-block-assembler.js.map +7 -0
  43. package/dist/cmaf-group-batcher.d.ts +38 -0
  44. package/dist/cmaf-group-batcher.d.ts.map +1 -0
  45. package/dist/cmaf-group-batcher.js +195 -0
  46. package/dist/cmaf-group-batcher.js.map +7 -0
  47. package/dist/cmcd-producer.d.ts +104 -0
  48. package/dist/cmcd-producer.d.ts.map +1 -0
  49. package/dist/cmcd-producer.js +207 -0
  50. package/dist/cmcd-producer.js.map +7 -0
  51. package/dist/codec-utils.d.ts +235 -0
  52. package/dist/codec-utils.d.ts.map +1 -0
  53. package/dist/codec-utils.js +1225 -0
  54. package/dist/codec-utils.js.map +7 -0
  55. package/dist/fec-codec.d.ts +32 -0
  56. package/dist/fec-codec.d.ts.map +1 -0
  57. package/dist/fec-codec.js +47 -0
  58. package/dist/fec-codec.js.map +7 -0
  59. package/dist/fec-manager.d.ts +266 -0
  60. package/dist/fec-manager.d.ts.map +1 -0
  61. package/dist/fec-manager.js +1447 -0
  62. package/dist/fec-manager.js.map +7 -0
  63. package/dist/fec-starvation-detector.d.ts +59 -0
  64. package/dist/fec-starvation-detector.d.ts.map +1 -0
  65. package/dist/fec-starvation-detector.js +75 -0
  66. package/dist/fec-starvation-detector.js.map +7 -0
  67. package/dist/fec-worker-setup.d.ts +76 -0
  68. package/dist/fec-worker-setup.d.ts.map +1 -0
  69. package/dist/fec-worker-setup.js +603 -0
  70. package/dist/fec-worker-setup.js.map +7 -0
  71. package/dist/fmp4-completion.d.ts +30 -0
  72. package/dist/fmp4-completion.d.ts.map +1 -0
  73. package/dist/fmp4-completion.js +21 -0
  74. package/dist/fmp4-completion.js.map +7 -0
  75. package/dist/fmp4-reader.d.ts +37 -0
  76. package/dist/fmp4-reader.d.ts.map +1 -0
  77. package/dist/fmp4-reader.js +100 -0
  78. package/dist/fmp4-reader.js.map +7 -0
  79. package/dist/index.d.ts +47 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +330 -0
  82. package/dist/index.js.map +7 -0
  83. package/dist/iso-bmff-timing.d.ts +47 -0
  84. package/dist/iso-bmff-timing.d.ts.map +1 -0
  85. package/dist/iso-bmff-timing.js +526 -0
  86. package/dist/iso-bmff-timing.js.map +7 -0
  87. package/dist/loc.d.ts +68 -0
  88. package/dist/loc.d.ts.map +1 -0
  89. package/dist/loc.js +143 -0
  90. package/dist/loc.js.map +7 -0
  91. package/dist/manifest-auth-plan.d.ts +30 -0
  92. package/dist/manifest-auth-plan.d.ts.map +1 -0
  93. package/dist/manifest-auth-plan.js +1267 -0
  94. package/dist/manifest-auth-plan.js.map +7 -0
  95. package/dist/media-router.d.ts +338 -0
  96. package/dist/media-router.d.ts.map +1 -0
  97. package/dist/media-router.js +802 -0
  98. package/dist/media-router.js.map +7 -0
  99. package/dist/mfu-reassembler.d.ts +264 -0
  100. package/dist/mfu-reassembler.d.ts.map +1 -0
  101. package/dist/mfu-reassembler.js +2668 -0
  102. package/dist/mfu-reassembler.js.map +7 -0
  103. package/dist/mfu-reassembly-policy.d.ts +24 -0
  104. package/dist/mfu-reassembly-policy.d.ts.map +1 -0
  105. package/dist/mfu-reassembly-policy.js +99 -0
  106. package/dist/mfu-reassembly-policy.js.map +7 -0
  107. package/dist/mmtp-container-parser.d.ts +304 -0
  108. package/dist/mmtp-container-parser.d.ts.map +1 -0
  109. package/dist/mmtp-container-parser.js +5378 -0
  110. package/dist/mmtp-container-parser.js.map +7 -0
  111. package/dist/mmtp-container-parser.no-modules.js +7853 -0
  112. package/dist/mmtp-container-parser.no-modules.js.map +7 -0
  113. package/dist/mmtp-decode-pipeline.d.ts +96 -0
  114. package/dist/mmtp-decode-pipeline.d.ts.map +1 -0
  115. package/dist/mmtp-decode-pipeline.js +5589 -0
  116. package/dist/mmtp-decode-pipeline.js.map +7 -0
  117. package/dist/mmtp-router.d.ts +383 -0
  118. package/dist/mmtp-router.d.ts.map +1 -0
  119. package/dist/mmtp-router.js +8384 -0
  120. package/dist/mmtp-router.js.map +7 -0
  121. package/dist/mmtp-to-cmaf.d.ts +166 -0
  122. package/dist/mmtp-to-cmaf.d.ts.map +1 -0
  123. package/dist/mmtp-to-cmaf.js +781 -0
  124. package/dist/mmtp-to-cmaf.js.map +7 -0
  125. package/dist/multicast-auth-catalog.d.ts +115 -0
  126. package/dist/multicast-auth-catalog.d.ts.map +1 -0
  127. package/dist/multicast-auth-catalog.js +202 -0
  128. package/dist/multicast-auth-catalog.js.map +7 -0
  129. package/dist/multicast-input.d.ts +107 -0
  130. package/dist/multicast-input.d.ts.map +1 -0
  131. package/dist/multicast-input.js +256 -0
  132. package/dist/multicast-input.js.map +7 -0
  133. package/dist/multicast-manager.d.ts +330 -0
  134. package/dist/multicast-manager.d.ts.map +1 -0
  135. package/dist/multicast-manager.js +11032 -0
  136. package/dist/multicast-manager.js.map +7 -0
  137. package/dist/multicast-transport.d.ts +62 -0
  138. package/dist/multicast-transport.d.ts.map +1 -0
  139. package/dist/multicast-transport.js +338 -0
  140. package/dist/multicast-transport.js.map +7 -0
  141. package/dist/multicast-unwrap.d.ts +57 -0
  142. package/dist/multicast-unwrap.d.ts.map +1 -0
  143. package/dist/multicast-unwrap.js +384 -0
  144. package/dist/multicast-unwrap.js.map +7 -0
  145. package/dist/no-modules.d.ts +9 -0
  146. package/dist/no-modules.d.ts.map +1 -0
  147. package/dist/no-modules.js +7819 -0
  148. package/dist/no-modules.js.map +7 -0
  149. package/dist/phase14-catalog-override.d.ts +126 -0
  150. package/dist/phase14-catalog-override.d.ts.map +1 -0
  151. package/dist/phase14-catalog-override.js +155 -0
  152. package/dist/phase14-catalog-override.js.map +7 -0
  153. package/dist/repair-fetch.d.ts +58 -0
  154. package/dist/repair-fetch.d.ts.map +1 -0
  155. package/dist/repair-fetch.js +117 -0
  156. package/dist/repair-fetch.js.map +7 -0
  157. package/dist/sample-combiner.d.ts +182 -0
  158. package/dist/sample-combiner.d.ts.map +1 -0
  159. package/dist/sample-combiner.js +571 -0
  160. package/dist/sample-combiner.js.map +7 -0
  161. package/dist/signaling.d.ts +29 -0
  162. package/dist/signaling.d.ts.map +1 -0
  163. package/dist/signaling.js +232 -0
  164. package/dist/signaling.js.map +7 -0
  165. package/dist/source-auth.d.ts +2 -0
  166. package/dist/source-auth.d.ts.map +1 -0
  167. package/dist/source-auth.js +1220 -0
  168. package/dist/source-auth.js.map +7 -0
  169. package/dist/switching-set-alignment.d.ts +61 -0
  170. package/dist/switching-set-alignment.d.ts.map +1 -0
  171. package/dist/switching-set-alignment.js +85 -0
  172. package/dist/switching-set-alignment.js.map +7 -0
  173. package/dist/timestamp-codec.d.ts +34 -0
  174. package/dist/timestamp-codec.d.ts.map +1 -0
  175. package/dist/timestamp-codec.js +456 -0
  176. package/dist/timestamp-codec.js.map +7 -0
  177. package/dist/track-pipeline-setup.d.ts +72 -0
  178. package/dist/track-pipeline-setup.d.ts.map +1 -0
  179. package/dist/track-pipeline-setup.js +306 -0
  180. package/dist/track-pipeline-setup.js.map +7 -0
  181. package/dist/track-pipeline.d.ts +121 -0
  182. package/dist/track-pipeline.d.ts.map +1 -0
  183. package/dist/track-pipeline.js +229 -0
  184. package/dist/track-pipeline.js.map +7 -0
  185. package/dist/track-session.d.ts +269 -0
  186. package/dist/track-session.d.ts.map +1 -0
  187. package/dist/track-session.js +597 -0
  188. package/dist/track-session.js.map +7 -0
  189. package/dist/transport-pool.d.ts +69 -0
  190. package/dist/transport-pool.d.ts.map +1 -0
  191. package/dist/transport-pool.js +88 -0
  192. package/dist/transport-pool.js.map +7 -0
  193. package/dist/wasm-mfu-reassembler.d.ts +81 -0
  194. package/dist/wasm-mfu-reassembler.d.ts.map +1 -0
  195. package/dist/wasm-mfu-reassembler.js +1915 -0
  196. package/dist/wasm-mfu-reassembler.js.map +7 -0
  197. package/dist/wasm-mmtp-container-parser.d.ts +10 -0
  198. package/dist/wasm-mmtp-container-parser.d.ts.map +1 -0
  199. package/dist/wasm-mmtp-container-parser.js +5635 -0
  200. package/dist/wasm-mmtp-container-parser.js.map +7 -0
  201. package/node_modules/@blockcast/fec-worker/README.md +213 -0
  202. package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
  203. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +80 -0
  204. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts.map +1 -0
  205. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js +270 -0
  206. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js.map +1 -0
  207. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +252 -0
  208. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +1 -0
  209. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js +11 -0
  210. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js.map +1 -0
  211. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts +14 -0
  212. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts.map +1 -0
  213. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +565 -0
  214. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +7 -0
  215. package/node_modules/@blockcast/fec-worker/dist/index.d.ts +10 -0
  216. package/node_modules/@blockcast/fec-worker/dist/index.d.ts.map +1 -0
  217. package/node_modules/@blockcast/fec-worker/dist/index.js +8 -0
  218. package/node_modules/@blockcast/fec-worker/dist/index.js.map +1 -0
  219. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts +20 -0
  220. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts.map +1 -0
  221. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js +349 -0
  222. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js.map +7 -0
  223. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts +104 -0
  224. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts.map +1 -0
  225. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js +181 -0
  226. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js.map +1 -0
  227. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts +179 -0
  228. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts.map +1 -0
  229. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js +47 -0
  230. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js.map +1 -0
  231. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts +9 -0
  232. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts.map +1 -0
  233. package/node_modules/@blockcast/fec-worker/dist/transfer.js +13 -0
  234. package/node_modules/@blockcast/fec-worker/dist/transfer.js.map +1 -0
  235. package/node_modules/@blockcast/fec-worker/package.json +59 -0
  236. package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +309 -0
  237. package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +268 -0
  238. package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +1048 -0
  239. package/node_modules/@blockcast/fec-worker/src/index.ts +32 -0
  240. package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +558 -0
  241. package/node_modules/@blockcast/fec-worker/src/shred-worker-client.ts +222 -0
  242. package/node_modules/@blockcast/fec-worker/src/shred-worker-types.ts +194 -0
  243. package/node_modules/@blockcast/fec-worker/src/transfer.ts +12 -0
  244. package/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
  245. package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  246. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
  247. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
  248. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
  249. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
  250. package/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
  251. package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
  252. package/node_modules/@blockcast/mmt-base/README.md +120 -0
  253. package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  254. package/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
  255. package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
  256. package/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
  257. package/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
  258. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +275 -0
  259. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
  260. package/node_modules/@blockcast/mmt-base/dist/mmtp.js +644 -0
  261. package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
  262. package/node_modules/@blockcast/mmt-base/package.json +49 -0
  263. package/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
  264. package/node_modules/@blockcast/mmt-base/src/mmtp.ts +898 -0
  265. package/node_modules/@blockcast/mmt-fec/README.md +270 -0
  266. package/node_modules/@blockcast/mmt-fec/dist/.build-stamp +0 -0
  267. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts +80 -0
  268. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts.map +1 -0
  269. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js +294 -0
  270. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js.map +1 -0
  271. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts +72 -0
  272. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts.map +1 -0
  273. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js +192 -0
  274. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js.map +1 -0
  275. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts +46 -0
  276. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts.map +1 -0
  277. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js +96 -0
  278. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js.map +1 -0
  279. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts +33 -0
  280. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts.map +1 -0
  281. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js +57 -0
  282. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js.map +1 -0
  283. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts +185 -0
  284. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +1 -0
  285. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +273 -0
  286. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +1 -0
  287. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +22 -0
  288. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +1 -0
  289. package/node_modules/@blockcast/mmt-fec/dist/index.js +22 -0
  290. package/node_modules/@blockcast/mmt-fec/dist/index.js.map +1 -0
  291. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts +20 -0
  292. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts.map +1 -0
  293. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js +28 -0
  294. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js.map +1 -0
  295. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +174 -0
  296. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +1 -0
  297. package/node_modules/@blockcast/mmt-fec/dist/oti.js +256 -0
  298. package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +1 -0
  299. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts +41 -0
  300. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts.map +1 -0
  301. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js +81 -0
  302. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js.map +1 -0
  303. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
  304. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  305. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
  306. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
  307. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
  308. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
  309. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
  310. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
  311. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +120 -0
  312. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  313. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
  314. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
  315. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
  316. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
  317. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +275 -0
  318. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
  319. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +644 -0
  320. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
  321. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +49 -0
  322. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
  323. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +898 -0
  324. package/node_modules/@blockcast/mmt-fec/package.json +79 -0
  325. package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +369 -0
  326. package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +277 -0
  327. package/node_modules/@blockcast/mmt-fec/src/cmaf-recovery.ts +127 -0
  328. package/node_modules/@blockcast/mmt-fec/src/cmaf-symbols.ts +68 -0
  329. package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +332 -0
  330. package/node_modules/@blockcast/mmt-fec/src/index.ts +77 -0
  331. package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +34 -0
  332. package/node_modules/@blockcast/mmt-fec/src/oti.ts +319 -0
  333. package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +101 -0
  334. package/node_modules/@blockcast/mmt-manifest-verify/dist/.build-stamp +0 -0
  335. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts +28 -0
  336. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts.map +1 -0
  337. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js +128 -0
  338. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js.map +1 -0
  339. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts +4 -0
  340. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts.map +1 -0
  341. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js +4 -0
  342. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js.map +1 -0
  343. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts +37 -0
  344. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts.map +1 -0
  345. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js +179 -0
  346. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js.map +1 -0
  347. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts +90 -0
  348. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts.map +1 -0
  349. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js +462 -0
  350. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js.map +1 -0
  351. package/node_modules/@blockcast/mmt-manifest-verify/package.json +45 -0
  352. package/node_modules/@blockcast/mmt-manifest-verify/src/admission.ts +171 -0
  353. package/node_modules/@blockcast/mmt-manifest-verify/src/index.ts +3 -0
  354. package/node_modules/@blockcast/mmt-manifest-verify/src/source-auth.ts +230 -0
  355. package/node_modules/@blockcast/mmt-manifest-verify/src/verifier.ts +636 -0
  356. package/node_modules/@noble/hashes/LICENSE +21 -0
  357. package/node_modules/@noble/hashes/README.md +521 -0
  358. package/node_modules/@noble/hashes/_assert.d.ts +17 -0
  359. package/node_modules/@noble/hashes/_assert.d.ts.map +1 -0
  360. package/node_modules/@noble/hashes/_assert.js +18 -0
  361. package/node_modules/@noble/hashes/_assert.js.map +1 -0
  362. package/node_modules/@noble/hashes/_blake.d.ts +14 -0
  363. package/node_modules/@noble/hashes/_blake.d.ts.map +1 -0
  364. package/node_modules/@noble/hashes/_blake.js +50 -0
  365. package/node_modules/@noble/hashes/_blake.js.map +1 -0
  366. package/node_modules/@noble/hashes/_md.d.ts +51 -0
  367. package/node_modules/@noble/hashes/_md.d.ts.map +1 -0
  368. package/node_modules/@noble/hashes/_md.js +162 -0
  369. package/node_modules/@noble/hashes/_md.js.map +1 -0
  370. package/node_modules/@noble/hashes/_u64.d.ts +55 -0
  371. package/node_modules/@noble/hashes/_u64.d.ts.map +1 -0
  372. package/node_modules/@noble/hashes/_u64.js +90 -0
  373. package/node_modules/@noble/hashes/_u64.js.map +1 -0
  374. package/node_modules/@noble/hashes/argon2.d.ts +32 -0
  375. package/node_modules/@noble/hashes/argon2.d.ts.map +1 -0
  376. package/node_modules/@noble/hashes/argon2.js +401 -0
  377. package/node_modules/@noble/hashes/argon2.js.map +1 -0
  378. package/node_modules/@noble/hashes/blake1.d.ts +106 -0
  379. package/node_modules/@noble/hashes/blake1.d.ts.map +1 -0
  380. package/node_modules/@noble/hashes/blake1.js +459 -0
  381. package/node_modules/@noble/hashes/blake1.js.map +1 -0
  382. package/node_modules/@noble/hashes/blake2.d.ts +116 -0
  383. package/node_modules/@noble/hashes/blake2.d.ts.map +1 -0
  384. package/node_modules/@noble/hashes/blake2.js +420 -0
  385. package/node_modules/@noble/hashes/blake2.js.map +1 -0
  386. package/node_modules/@noble/hashes/blake2b.d.ts +11 -0
  387. package/node_modules/@noble/hashes/blake2b.d.ts.map +1 -0
  388. package/node_modules/@noble/hashes/blake2b.js +14 -0
  389. package/node_modules/@noble/hashes/blake2b.js.map +1 -0
  390. package/node_modules/@noble/hashes/blake2s.d.ts +20 -0
  391. package/node_modules/@noble/hashes/blake2s.d.ts.map +1 -0
  392. package/node_modules/@noble/hashes/blake2s.js +24 -0
  393. package/node_modules/@noble/hashes/blake2s.js.map +1 -0
  394. package/node_modules/@noble/hashes/blake3.d.ts +54 -0
  395. package/node_modules/@noble/hashes/blake3.d.ts.map +1 -0
  396. package/node_modules/@noble/hashes/blake3.js +255 -0
  397. package/node_modules/@noble/hashes/blake3.js.map +1 -0
  398. package/node_modules/@noble/hashes/crypto.d.ts +2 -0
  399. package/node_modules/@noble/hashes/crypto.d.ts.map +1 -0
  400. package/node_modules/@noble/hashes/crypto.js +5 -0
  401. package/node_modules/@noble/hashes/crypto.js.map +1 -0
  402. package/node_modules/@noble/hashes/cryptoNode.d.ts +2 -0
  403. package/node_modules/@noble/hashes/cryptoNode.d.ts.map +1 -0
  404. package/node_modules/@noble/hashes/cryptoNode.js +18 -0
  405. package/node_modules/@noble/hashes/cryptoNode.js.map +1 -0
  406. package/node_modules/@noble/hashes/eskdf.d.ts +47 -0
  407. package/node_modules/@noble/hashes/eskdf.d.ts.map +1 -0
  408. package/node_modules/@noble/hashes/eskdf.js +166 -0
  409. package/node_modules/@noble/hashes/eskdf.js.map +1 -0
  410. package/node_modules/@noble/hashes/esm/_assert.d.ts +17 -0
  411. package/node_modules/@noble/hashes/esm/_assert.d.ts.map +1 -0
  412. package/node_modules/@noble/hashes/esm/_assert.js +15 -0
  413. package/node_modules/@noble/hashes/esm/_assert.js.map +1 -0
  414. package/node_modules/@noble/hashes/esm/_blake.d.ts +14 -0
  415. package/node_modules/@noble/hashes/esm/_blake.d.ts.map +1 -0
  416. package/node_modules/@noble/hashes/esm/_blake.js +45 -0
  417. package/node_modules/@noble/hashes/esm/_blake.js.map +1 -0
  418. package/node_modules/@noble/hashes/esm/_md.d.ts +51 -0
  419. package/node_modules/@noble/hashes/esm/_md.d.ts.map +1 -0
  420. package/node_modules/@noble/hashes/esm/_md.js +155 -0
  421. package/node_modules/@noble/hashes/esm/_md.js.map +1 -0
  422. package/node_modules/@noble/hashes/esm/_u64.d.ts +55 -0
  423. package/node_modules/@noble/hashes/esm/_u64.d.ts.map +1 -0
  424. package/node_modules/@noble/hashes/esm/_u64.js +67 -0
  425. package/node_modules/@noble/hashes/esm/_u64.js.map +1 -0
  426. package/node_modules/@noble/hashes/esm/argon2.d.ts +32 -0
  427. package/node_modules/@noble/hashes/esm/argon2.d.ts.map +1 -0
  428. package/node_modules/@noble/hashes/esm/argon2.js +392 -0
  429. package/node_modules/@noble/hashes/esm/argon2.js.map +1 -0
  430. package/node_modules/@noble/hashes/esm/blake1.d.ts +106 -0
  431. package/node_modules/@noble/hashes/esm/blake1.d.ts.map +1 -0
  432. package/node_modules/@noble/hashes/esm/blake1.js +452 -0
  433. package/node_modules/@noble/hashes/esm/blake1.js.map +1 -0
  434. package/node_modules/@noble/hashes/esm/blake2.d.ts +116 -0
  435. package/node_modules/@noble/hashes/esm/blake2.d.ts.map +1 -0
  436. package/node_modules/@noble/hashes/esm/blake2.js +413 -0
  437. package/node_modules/@noble/hashes/esm/blake2.js.map +1 -0
  438. package/node_modules/@noble/hashes/esm/blake2b.d.ts +11 -0
  439. package/node_modules/@noble/hashes/esm/blake2b.d.ts.map +1 -0
  440. package/node_modules/@noble/hashes/esm/blake2b.js +11 -0
  441. package/node_modules/@noble/hashes/esm/blake2b.js.map +1 -0
  442. package/node_modules/@noble/hashes/esm/blake2s.d.ts +20 -0
  443. package/node_modules/@noble/hashes/esm/blake2s.d.ts.map +1 -0
  444. package/node_modules/@noble/hashes/esm/blake2s.js +21 -0
  445. package/node_modules/@noble/hashes/esm/blake2s.js.map +1 -0
  446. package/node_modules/@noble/hashes/esm/blake3.d.ts +54 -0
  447. package/node_modules/@noble/hashes/esm/blake3.d.ts.map +1 -0
  448. package/node_modules/@noble/hashes/esm/blake3.js +251 -0
  449. package/node_modules/@noble/hashes/esm/blake3.js.map +1 -0
  450. package/node_modules/@noble/hashes/esm/crypto.d.ts +2 -0
  451. package/node_modules/@noble/hashes/esm/crypto.d.ts.map +1 -0
  452. package/node_modules/@noble/hashes/esm/crypto.js +2 -0
  453. package/node_modules/@noble/hashes/esm/crypto.js.map +1 -0
  454. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts +2 -0
  455. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts.map +1 -0
  456. package/node_modules/@noble/hashes/esm/cryptoNode.js +15 -0
  457. package/node_modules/@noble/hashes/esm/cryptoNode.js.map +1 -0
  458. package/node_modules/@noble/hashes/esm/eskdf.d.ts +47 -0
  459. package/node_modules/@noble/hashes/esm/eskdf.d.ts.map +1 -0
  460. package/node_modules/@noble/hashes/esm/eskdf.js +160 -0
  461. package/node_modules/@noble/hashes/esm/eskdf.js.map +1 -0
  462. package/node_modules/@noble/hashes/esm/hkdf.d.ts +36 -0
  463. package/node_modules/@noble/hashes/esm/hkdf.d.ts.map +1 -0
  464. package/node_modules/@noble/hashes/esm/hkdf.js +82 -0
  465. package/node_modules/@noble/hashes/esm/hkdf.js.map +1 -0
  466. package/node_modules/@noble/hashes/esm/hmac.d.ts +35 -0
  467. package/node_modules/@noble/hashes/esm/hmac.d.ts.map +1 -0
  468. package/node_modules/@noble/hashes/esm/hmac.js +86 -0
  469. package/node_modules/@noble/hashes/esm/hmac.js.map +1 -0
  470. package/node_modules/@noble/hashes/esm/index.d.ts +2 -0
  471. package/node_modules/@noble/hashes/esm/index.d.ts.map +1 -0
  472. package/node_modules/@noble/hashes/esm/index.js +33 -0
  473. package/node_modules/@noble/hashes/esm/index.js.map +1 -0
  474. package/node_modules/@noble/hashes/esm/legacy.d.ts +71 -0
  475. package/node_modules/@noble/hashes/esm/legacy.d.ts.map +1 -0
  476. package/node_modules/@noble/hashes/esm/legacy.js +281 -0
  477. package/node_modules/@noble/hashes/esm/legacy.js.map +1 -0
  478. package/node_modules/@noble/hashes/esm/package.json +10 -0
  479. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts +23 -0
  480. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts.map +1 -0
  481. package/node_modules/@noble/hashes/esm/pbkdf2.js +97 -0
  482. package/node_modules/@noble/hashes/esm/pbkdf2.js.map +1 -0
  483. package/node_modules/@noble/hashes/esm/ripemd160.d.ts +13 -0
  484. package/node_modules/@noble/hashes/esm/ripemd160.d.ts.map +1 -0
  485. package/node_modules/@noble/hashes/esm/ripemd160.js +13 -0
  486. package/node_modules/@noble/hashes/esm/ripemd160.js.map +1 -0
  487. package/node_modules/@noble/hashes/esm/scrypt.d.ts +34 -0
  488. package/node_modules/@noble/hashes/esm/scrypt.d.ts.map +1 -0
  489. package/node_modules/@noble/hashes/esm/scrypt.js +228 -0
  490. package/node_modules/@noble/hashes/esm/scrypt.js.map +1 -0
  491. package/node_modules/@noble/hashes/esm/sha1.d.ts +11 -0
  492. package/node_modules/@noble/hashes/esm/sha1.d.ts.map +1 -0
  493. package/node_modules/@noble/hashes/esm/sha1.js +11 -0
  494. package/node_modules/@noble/hashes/esm/sha1.js.map +1 -0
  495. package/node_modules/@noble/hashes/esm/sha2.d.ts +159 -0
  496. package/node_modules/@noble/hashes/esm/sha2.d.ts.map +1 -0
  497. package/node_modules/@noble/hashes/esm/sha2.js +375 -0
  498. package/node_modules/@noble/hashes/esm/sha2.js.map +1 -0
  499. package/node_modules/@noble/hashes/esm/sha256.d.ts +20 -0
  500. package/node_modules/@noble/hashes/esm/sha256.d.ts.map +1 -0
  501. package/node_modules/@noble/hashes/esm/sha256.js +20 -0
  502. package/node_modules/@noble/hashes/esm/sha256.js.map +1 -0
  503. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts +142 -0
  504. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts.map +1 -0
  505. package/node_modules/@noble/hashes/esm/sha3-addons.js +393 -0
  506. package/node_modules/@noble/hashes/esm/sha3-addons.js.map +1 -0
  507. package/node_modules/@noble/hashes/esm/sha3.d.ts +53 -0
  508. package/node_modules/@noble/hashes/esm/sha3.d.ts.map +1 -0
  509. package/node_modules/@noble/hashes/esm/sha3.js +234 -0
  510. package/node_modules/@noble/hashes/esm/sha3.js.map +1 -0
  511. package/node_modules/@noble/hashes/esm/sha512.d.ts +26 -0
  512. package/node_modules/@noble/hashes/esm/sha512.d.ts.map +1 -0
  513. package/node_modules/@noble/hashes/esm/sha512.js +26 -0
  514. package/node_modules/@noble/hashes/esm/sha512.js.map +1 -0
  515. package/node_modules/@noble/hashes/esm/utils.d.ts +161 -0
  516. package/node_modules/@noble/hashes/esm/utils.d.ts.map +1 -0
  517. package/node_modules/@noble/hashes/esm/utils.js +281 -0
  518. package/node_modules/@noble/hashes/esm/utils.js.map +1 -0
  519. package/node_modules/@noble/hashes/hkdf.d.ts +36 -0
  520. package/node_modules/@noble/hashes/hkdf.d.ts.map +1 -0
  521. package/node_modules/@noble/hashes/hkdf.js +88 -0
  522. package/node_modules/@noble/hashes/hkdf.js.map +1 -0
  523. package/node_modules/@noble/hashes/hmac.d.ts +35 -0
  524. package/node_modules/@noble/hashes/hmac.d.ts.map +1 -0
  525. package/node_modules/@noble/hashes/hmac.js +91 -0
  526. package/node_modules/@noble/hashes/hmac.js.map +1 -0
  527. package/node_modules/@noble/hashes/index.d.ts +1 -0
  528. package/node_modules/@noble/hashes/index.d.ts.map +1 -0
  529. package/node_modules/@noble/hashes/index.js +33 -0
  530. package/node_modules/@noble/hashes/index.js.map +1 -0
  531. package/node_modules/@noble/hashes/legacy.d.ts +71 -0
  532. package/node_modules/@noble/hashes/legacy.d.ts.map +1 -0
  533. package/node_modules/@noble/hashes/legacy.js +287 -0
  534. package/node_modules/@noble/hashes/legacy.js.map +1 -0
  535. package/node_modules/@noble/hashes/package.json +266 -0
  536. package/node_modules/@noble/hashes/pbkdf2.d.ts +23 -0
  537. package/node_modules/@noble/hashes/pbkdf2.d.ts.map +1 -0
  538. package/node_modules/@noble/hashes/pbkdf2.js +101 -0
  539. package/node_modules/@noble/hashes/pbkdf2.js.map +1 -0
  540. package/node_modules/@noble/hashes/ripemd160.d.ts +13 -0
  541. package/node_modules/@noble/hashes/ripemd160.d.ts.map +1 -0
  542. package/node_modules/@noble/hashes/ripemd160.js +16 -0
  543. package/node_modules/@noble/hashes/ripemd160.js.map +1 -0
  544. package/node_modules/@noble/hashes/scrypt.d.ts +34 -0
  545. package/node_modules/@noble/hashes/scrypt.d.ts.map +1 -0
  546. package/node_modules/@noble/hashes/scrypt.js +232 -0
  547. package/node_modules/@noble/hashes/scrypt.js.map +1 -0
  548. package/node_modules/@noble/hashes/sha1.d.ts +11 -0
  549. package/node_modules/@noble/hashes/sha1.d.ts.map +1 -0
  550. package/node_modules/@noble/hashes/sha1.js +14 -0
  551. package/node_modules/@noble/hashes/sha1.js.map +1 -0
  552. package/node_modules/@noble/hashes/sha2.d.ts +159 -0
  553. package/node_modules/@noble/hashes/sha2.d.ts.map +1 -0
  554. package/node_modules/@noble/hashes/sha2.js +384 -0
  555. package/node_modules/@noble/hashes/sha2.js.map +1 -0
  556. package/node_modules/@noble/hashes/sha256.d.ts +20 -0
  557. package/node_modules/@noble/hashes/sha256.d.ts.map +1 -0
  558. package/node_modules/@noble/hashes/sha256.js +23 -0
  559. package/node_modules/@noble/hashes/sha256.js.map +1 -0
  560. package/node_modules/@noble/hashes/sha3-addons.d.ts +142 -0
  561. package/node_modules/@noble/hashes/sha3-addons.d.ts.map +1 -0
  562. package/node_modules/@noble/hashes/sha3-addons.js +402 -0
  563. package/node_modules/@noble/hashes/sha3-addons.js.map +1 -0
  564. package/node_modules/@noble/hashes/sha3.d.ts +53 -0
  565. package/node_modules/@noble/hashes/sha3.d.ts.map +1 -0
  566. package/node_modules/@noble/hashes/sha3.js +239 -0
  567. package/node_modules/@noble/hashes/sha3.js.map +1 -0
  568. package/node_modules/@noble/hashes/sha512.d.ts +26 -0
  569. package/node_modules/@noble/hashes/sha512.d.ts.map +1 -0
  570. package/node_modules/@noble/hashes/sha512.js +29 -0
  571. package/node_modules/@noble/hashes/sha512.js.map +1 -0
  572. package/node_modules/@noble/hashes/src/_assert.ts +22 -0
  573. package/node_modules/@noble/hashes/src/_blake.ts +50 -0
  574. package/node_modules/@noble/hashes/src/_md.ts +176 -0
  575. package/node_modules/@noble/hashes/src/_u64.ts +91 -0
  576. package/node_modules/@noble/hashes/src/argon2.ts +497 -0
  577. package/node_modules/@noble/hashes/src/blake1.ts +534 -0
  578. package/node_modules/@noble/hashes/src/blake2.ts +486 -0
  579. package/node_modules/@noble/hashes/src/blake2b.ts +10 -0
  580. package/node_modules/@noble/hashes/src/blake2s.ts +20 -0
  581. package/node_modules/@noble/hashes/src/blake3.ts +272 -0
  582. package/node_modules/@noble/hashes/src/crypto.ts +9 -0
  583. package/node_modules/@noble/hashes/src/cryptoNode.ts +15 -0
  584. package/node_modules/@noble/hashes/src/eskdf.ts +187 -0
  585. package/node_modules/@noble/hashes/src/hkdf.ts +88 -0
  586. package/node_modules/@noble/hashes/src/hmac.ts +94 -0
  587. package/node_modules/@noble/hashes/src/index.ts +31 -0
  588. package/node_modules/@noble/hashes/src/legacy.ts +293 -0
  589. package/node_modules/@noble/hashes/src/pbkdf2.ts +122 -0
  590. package/node_modules/@noble/hashes/src/ripemd160.ts +12 -0
  591. package/node_modules/@noble/hashes/src/scrypt.ts +257 -0
  592. package/node_modules/@noble/hashes/src/sha1.ts +10 -0
  593. package/node_modules/@noble/hashes/src/sha2.ts +402 -0
  594. package/node_modules/@noble/hashes/src/sha256.ts +24 -0
  595. package/node_modules/@noble/hashes/src/sha3-addons.ts +499 -0
  596. package/node_modules/@noble/hashes/src/sha3.ts +258 -0
  597. package/node_modules/@noble/hashes/src/sha512.ts +34 -0
  598. package/node_modules/@noble/hashes/src/utils.ts +395 -0
  599. package/node_modules/@noble/hashes/utils.d.ts +161 -0
  600. package/node_modules/@noble/hashes/utils.d.ts.map +1 -0
  601. package/node_modules/@noble/hashes/utils.js +313 -0
  602. package/node_modules/@noble/hashes/utils.js.map +1 -0
  603. package/package.json +203 -0
  604. package/schemas/catalog.schema.json +283 -0
  605. package/src/align.ts +235 -0
  606. package/src/audio-init-parser.ts +189 -0
  607. package/src/audio-ring-buffer.ts +120 -0
  608. package/src/authored-timing.ts +63 -0
  609. package/src/carp-catalog.ts +776 -0
  610. package/src/catalog-fec-params.ts +167 -0
  611. package/src/catalog-network-source.ts +49 -0
  612. package/src/catalog-validator.ts +34 -0
  613. package/src/cmaf-block-assembler.ts +1058 -0
  614. package/src/cmaf-group-batcher.ts +104 -0
  615. package/src/cmcd-producer.ts +329 -0
  616. package/src/codec-utils.ts +1539 -0
  617. package/src/fec-codec.ts +61 -0
  618. package/src/fec-manager.ts +1939 -0
  619. package/src/fec-starvation-detector.ts +128 -0
  620. package/src/fec-worker-setup.ts +177 -0
  621. package/src/fmp4-completion.ts +47 -0
  622. package/src/fmp4-reader.ts +112 -0
  623. package/src/index.ts +443 -0
  624. package/src/iso-bmff-timing.ts +688 -0
  625. package/src/loc.ts +181 -0
  626. package/src/manifest-auth-plan.ts +107 -0
  627. package/src/media-router.ts +1185 -0
  628. package/src/mfu-reassembler.ts +2842 -0
  629. package/src/mfu-reassembly-policy.ts +134 -0
  630. package/src/mmtp-container-parser.ts +1498 -0
  631. package/src/mmtp-decode-pipeline.ts +315 -0
  632. package/src/mmtp-router.ts +3027 -0
  633. package/src/mmtp-to-cmaf.ts +956 -0
  634. package/src/multicast-auth-catalog.ts +340 -0
  635. package/src/multicast-input.ts +439 -0
  636. package/src/multicast-manager.ts +1503 -0
  637. package/src/multicast-transport.ts +320 -0
  638. package/src/multicast-unwrap.ts +132 -0
  639. package/src/no-modules.ts +20 -0
  640. package/src/phase14-catalog-override.ts +336 -0
  641. package/src/repair-fetch.ts +217 -0
  642. package/src/sample-combiner.ts +846 -0
  643. package/src/signaling.ts +78 -0
  644. package/src/source-auth.ts +1 -0
  645. package/src/switching-set-alignment.ts +109 -0
  646. package/src/timestamp-codec.ts +265 -0
  647. package/src/track-pipeline-setup.ts +189 -0
  648. package/src/track-pipeline.ts +332 -0
  649. package/src/track-session.ts +778 -0
  650. package/src/transport-pool.ts +128 -0
  651. package/src/wasm-mfu-reassembler.ts +372 -0
  652. package/src/wasm-mmtp-container-parser.ts +23 -0
  653. package/test-vectors/align.json +199 -0
  654. package/test-vectors/catalog/README.md +25 -0
  655. package/test-vectors/catalog/negative/legacy-selection-params.json +15 -0
  656. package/test-vectors/catalog/negative/missing-mmtp-fields.json +12 -0
  657. package/test-vectors/catalog/negative/multicast-auth-padded-key.json +37 -0
  658. package/test-vectors/catalog/negative/multicast-auth-reused-track-format.json +53 -0
  659. package/test-vectors/catalog/negative/multicast-auth-trailing-pad-bits.json +37 -0
  660. package/test-vectors/catalog/negative/multicast-endpoint-missing-protocol-and-source.json +24 -0
  661. package/test-vectors/catalog/negative/network-source-object.json +25 -0
  662. package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +26 -0
  663. package/test-vectors/catalog/negative/repair-track-legacy-shape.json +18 -0
  664. package/test-vectors/catalog/negative/track-role-empty.json +16 -0
  665. package/test-vectors/catalog/negative/track-role-non-string.json +16 -0
  666. package/test-vectors/catalog/positive/fec-multicast.json +51 -0
  667. package/test-vectors/catalog/positive/flat-av.json +30 -0
  668. package/test-vectors/catalog/positive/multicast-auth-rotation.json +55 -0
  669. package/test-vectors/catalog/positive/ticks-and-mixed-timescales.json +39 -0
  670. package/test-vectors/catalog/positive/track-role.json +49 -0
  671. package/test-vectors/catalog/releases/moqcast-native-v16-v1/catalog.json +65 -0
  672. package/test-vectors/catalog/releases/moqcast-native-v16-v1.archive.sha256 +1 -0
  673. package/test-vectors/catalog-multicast-auth-v1.json +26 -0
  674. package/test-vectors/catalog-validation.json +148 -0
  675. package/test-vectors/catalog-validator-public-api.mjs +25 -0
  676. package/test-vectors/generate-source-auth-fixture.mjs +114 -0
  677. package/test-vectors/source-auth-v1.json +61 -0
  678. package/test-vectors/subsample-placement-v1.json +230 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../mmt-manifest-verify/node_modules/@noble/hashes/src/utils.ts", "../../mmt-manifest-verify/node_modules/@noble/hashes/src/_md.ts", "../../mmt-manifest-verify/node_modules/@noble/hashes/src/_u64.ts", "../../mmt-manifest-verify/node_modules/@noble/hashes/src/_blake.ts", "../../mmt-manifest-verify/node_modules/@noble/hashes/src/blake2.ts", "../../mmt-manifest-verify/node_modules/@noble/hashes/src/blake3.ts", "../../mmt-manifest-verify/src/source-auth.ts", "../../mmt-manifest-verify/src/verifier.ts", "../src/multicast-auth-catalog.ts", "../src/manifest-auth-plan.ts"],
4
+ "sourcesContent": ["/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number): void {\n if (!Number.isSafeInteger(n) || n < 0) throw new Error('positive integer expected, got ' + n);\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(b: Uint8Array | undefined, ...lengths: number[]): void {\n if (!isBytes(b)) throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n\n/** Asserts something is hash */\nexport function ahash(h: IHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** @deprecated */\nexport const byteSwapIfBE: typeof swap8IfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes: Uint8Array): string {\n return new TextDecoder().decode(bytes);\n}\n\n/** Accepted input of hash functions. Strings are converted to byte arrays. */\nexport type Input = string | Uint8Array;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Hash interface. */\nexport type IHash = {\n (data: Uint8Array): Uint8Array;\n blockLen: number;\n outputLen: number;\n create: any;\n};\n\n/** For runtime check if class implements interface */\nexport abstract class Hash<T extends Hash<T>> {\n abstract blockLen: number; // Bytes per block\n abstract outputLen: number; // Bytes in output\n abstract update(buf: Input): this;\n // Writes digest into buf\n abstract digestInto(buf: Uint8Array): void;\n abstract digest(): Uint8Array;\n /**\n * Resets internal state. Makes Hash instance unusable.\n * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n * by user, they will need to manually call `destroy()` when zeroing is necessary.\n */\n abstract destroy(): void;\n /**\n * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n * when no options are passed.\n * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n * There are no guarantees for clean-up because it's impossible in JS.\n */\n abstract _cloneInto(to?: T): T;\n // Safe version that clones internal state\n abstract clone(): T;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash function */\nexport type CHash = ReturnType<typeof createHasher>;\n/** Hash function with output */\nexport type CHashO = ReturnType<typeof createOptHasher>;\n/** XOF with output */\nexport type CHashXO = ReturnType<typeof createXOFer>;\n\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher<T extends Hash<T>>(\n hashCons: () => Hash<T>\n): {\n (msg: Input): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(): Hash<T>;\n} {\n const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\n\nexport function createOptHasher<H extends Hash<H>, T extends Object>(\n hashCons: (opts?: T) => Hash<H>\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts?: T): Hash<H>;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: T) => hashCons(opts);\n return hashC;\n}\n\nexport function createXOFer<H extends HashXOF<H>, T extends Object>(\n hashCons: (opts?: T) => HashXOF<H>\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts?: T): HashXOF<H>;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: T) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor: typeof createHasher = createHasher;\nexport const wrapConstructorWithOpts: typeof createOptHasher = createOptHasher;\nexport const wrapXOFConstructorWithOpts: typeof createXOFer = createXOFer;\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n", "/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { type Input, Hash, abytes, aexists, aoutput, clean, createView, toBytes } from './utils.ts';\n\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(\n view: DataView,\n byteOffset: number,\n value: bigint,\n isLE: boolean\n): void {\n if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> extends Hash<T> {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n\n readonly blockLen: number;\n readonly outputLen: number;\n readonly padOffset: number;\n readonly isLE: boolean;\n\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Input): this {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to;\n }\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n", "/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\nfunction fromBig(\n n: bigint,\n le = false\n): {\n h: number;\n l: number;\n} {\n if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false): Uint32Array[] {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number): number => l;\nconst rotr32L = (h: number, _l: number): number => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(\n Ah: number,\n Al: number,\n Bh: number,\n Bl: number\n): {\n h: number;\n l: number;\n} {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n", "/**\n * Internal helpers for blake hash.\n * @module\n */\nimport { rotr } from './utils.ts';\n\n/**\n * Internal blake variable.\n * For BLAKE2b, the two extra permutations for rounds 10 and 11 are SIGMA[10..11] = SIGMA[0..1].\n */\n// prettier-ignore\nexport const BSIGMA: Uint8Array = /* @__PURE__ */ Uint8Array.from([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,\n 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,\n 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,\n 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n // Blake1, unused in others\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n]);\n\n// prettier-ignore\nexport type Num4 = { a: number; b: number; c: number; d: number; };\n\n// Mixing function G splitted in two halfs\nexport function G1s(a: number, b: number, c: number, d: number, x: number): Num4 {\n a = (a + b + x) | 0;\n d = rotr(d ^ a, 16);\n c = (c + d) | 0;\n b = rotr(b ^ c, 12);\n return { a, b, c, d };\n}\n\nexport function G2s(a: number, b: number, c: number, d: number, x: number): Num4 {\n a = (a + b + x) | 0;\n d = rotr(d ^ a, 8);\n c = (c + d) | 0;\n b = rotr(b ^ c, 7);\n return { a, b, c, d };\n}\n", "/**\n * blake2b (64-bit) & blake2s (8 to 32-bit) hash functions.\n * b could have been faster, but there is no fast u64 in js, so s is 1.5x faster.\n * @module\n */\nimport { BSIGMA, G1s, G2s } from './_blake.ts';\nimport { SHA256_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\n// prettier-ignore\nimport {\n abytes, aexists, anumber, aoutput,\n clean, createOptHasher, Hash, swap32IfBE, swap8IfBE, toBytes, u32,\n type CHashO, type Input\n} from './utils.ts';\n\n/** Blake hash options. dkLen is output length. key is used in MAC mode. salt is used in KDF mode. */\nexport type Blake2Opts = {\n dkLen?: number;\n key?: Input;\n salt?: Input;\n personalization?: Input;\n};\n\n// Same as SHA512_IV, but swapped endianness: LE instead of BE. iv[1] is iv[0], etc.\nconst B2B_IV = /* @__PURE__ */ Uint32Array.from([\n 0xf3bcc908, 0x6a09e667, 0x84caa73b, 0xbb67ae85, 0xfe94f82b, 0x3c6ef372, 0x5f1d36f1, 0xa54ff53a,\n 0xade682d1, 0x510e527f, 0x2b3e6c1f, 0x9b05688c, 0xfb41bd6b, 0x1f83d9ab, 0x137e2179, 0x5be0cd19,\n]);\n// Temporary buffer\nconst BBUF = /* @__PURE__ */ new Uint32Array(32);\n\n// Mixing function G splitted in two halfs\nfunction G1b(a: number, b: number, c: number, d: number, msg: Uint32Array, x: number) {\n // NOTE: V is LE here\n const Xl = msg[x], Xh = msg[x + 1]; // prettier-ignore\n let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; // prettier-ignore\n let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; // prettier-ignore\n let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; // prettier-ignore\n let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; // prettier-ignore\n // v[a] = (v[a] + v[b] + x) | 0;\n let ll = u64.add3L(Al, Bl, Xl);\n Ah = u64.add3H(ll, Ah, Bh, Xh);\n Al = ll | 0;\n // v[d] = rotr(v[d] ^ v[a], 32)\n ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });\n ({ Dh, Dl } = { Dh: u64.rotr32H(Dh, Dl), Dl: u64.rotr32L(Dh, Dl) });\n // v[c] = (v[c] + v[d]) | 0;\n ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));\n // v[b] = rotr(v[b] ^ v[c], 24)\n ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });\n ({ Bh, Bl } = { Bh: u64.rotrSH(Bh, Bl, 24), Bl: u64.rotrSL(Bh, Bl, 24) });\n (BBUF[2 * a] = Al), (BBUF[2 * a + 1] = Ah);\n (BBUF[2 * b] = Bl), (BBUF[2 * b + 1] = Bh);\n (BBUF[2 * c] = Cl), (BBUF[2 * c + 1] = Ch);\n (BBUF[2 * d] = Dl), (BBUF[2 * d + 1] = Dh);\n}\n\nfunction G2b(a: number, b: number, c: number, d: number, msg: Uint32Array, x: number) {\n // NOTE: V is LE here\n const Xl = msg[x], Xh = msg[x + 1]; // prettier-ignore\n let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; // prettier-ignore\n let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; // prettier-ignore\n let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; // prettier-ignore\n let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; // prettier-ignore\n // v[a] = (v[a] + v[b] + x) | 0;\n let ll = u64.add3L(Al, Bl, Xl);\n Ah = u64.add3H(ll, Ah, Bh, Xh);\n Al = ll | 0;\n // v[d] = rotr(v[d] ^ v[a], 16)\n ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });\n ({ Dh, Dl } = { Dh: u64.rotrSH(Dh, Dl, 16), Dl: u64.rotrSL(Dh, Dl, 16) });\n // v[c] = (v[c] + v[d]) | 0;\n ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));\n // v[b] = rotr(v[b] ^ v[c], 63)\n ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });\n ({ Bh, Bl } = { Bh: u64.rotrBH(Bh, Bl, 63), Bl: u64.rotrBL(Bh, Bl, 63) });\n (BBUF[2 * a] = Al), (BBUF[2 * a + 1] = Ah);\n (BBUF[2 * b] = Bl), (BBUF[2 * b + 1] = Bh);\n (BBUF[2 * c] = Cl), (BBUF[2 * c + 1] = Ch);\n (BBUF[2 * d] = Dl), (BBUF[2 * d + 1] = Dh);\n}\n\nfunction checkBlake2Opts(\n outputLen: number,\n opts: Blake2Opts | undefined = {},\n keyLen: number,\n saltLen: number,\n persLen: number\n) {\n anumber(keyLen);\n if (outputLen < 0 || outputLen > keyLen) throw new Error('outputLen bigger than keyLen');\n const { key, salt, personalization } = opts;\n if (key !== undefined && (key.length < 1 || key.length > keyLen))\n throw new Error('key length must be undefined or 1..' + keyLen);\n if (salt !== undefined && salt.length !== saltLen)\n throw new Error('salt must be undefined or ' + saltLen);\n if (personalization !== undefined && personalization.length !== persLen)\n throw new Error('personalization must be undefined or ' + persLen);\n}\n\n/** Class, from which others are subclassed. */\nexport abstract class BLAKE2<T extends BLAKE2<T>> extends Hash<T> {\n protected abstract compress(msg: Uint32Array, offset: number, isLast: boolean): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected buffer: Uint8Array;\n protected buffer32: Uint32Array;\n protected finished = false;\n protected destroyed = false;\n protected length: number = 0;\n protected pos: number = 0;\n readonly blockLen: number;\n readonly outputLen: number;\n\n constructor(blockLen: number, outputLen: number) {\n super();\n anumber(blockLen);\n anumber(outputLen);\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.buffer = new Uint8Array(blockLen);\n this.buffer32 = u32(this.buffer);\n }\n update(data: Input): this {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n // Main difference with other hashes: there is flag for last block,\n // so we cannot process current block before we know that there\n // is the next one. This significantly complicates logic and reduces ability\n // to do zero-copy processing\n const { blockLen, buffer, buffer32 } = this;\n const len = data.length;\n const offset = data.byteOffset;\n const buf = data.buffer;\n for (let pos = 0; pos < len; ) {\n // If buffer is full and we still have input (don't process last block, same as blake2s)\n if (this.pos === blockLen) {\n swap32IfBE(buffer32);\n this.compress(buffer32, 0, false);\n swap32IfBE(buffer32);\n this.pos = 0;\n }\n const take = Math.min(blockLen - this.pos, len - pos);\n const dataOffset = offset + pos;\n // full block && aligned to 4 bytes && not last in input\n if (take === blockLen && !(dataOffset % 4) && pos + take < len) {\n const data32 = new Uint32Array(buf, dataOffset, Math.floor((len - pos) / 4));\n swap32IfBE(data32);\n for (let pos32 = 0; pos + blockLen < len; pos32 += buffer32.length, pos += blockLen) {\n this.length += blockLen;\n this.compress(data32, pos32, false);\n }\n swap32IfBE(data32);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n this.length += take;\n pos += take;\n }\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n const { pos, buffer32 } = this;\n this.finished = true;\n // Padding\n clean(this.buffer.subarray(pos));\n swap32IfBE(buffer32);\n this.compress(buffer32, 0, true);\n swap32IfBE(buffer32);\n const out32 = u32(out);\n this.get().forEach((v, i) => (out32[i] = swap8IfBE(v)));\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n const { buffer, length, finished, destroyed, outputLen, pos } = this;\n to ||= new (this.constructor as any)({ dkLen: outputLen }) as T;\n to.set(...this.get());\n to.buffer.set(buffer);\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n // @ts-ignore\n to.outputLen = outputLen;\n return to;\n }\n clone(): T {\n return this._cloneInto();\n }\n}\n\nexport class BLAKE2b extends BLAKE2<BLAKE2b> {\n // Same as SHA-512, but LE\n private v0l = B2B_IV[0] | 0;\n private v0h = B2B_IV[1] | 0;\n private v1l = B2B_IV[2] | 0;\n private v1h = B2B_IV[3] | 0;\n private v2l = B2B_IV[4] | 0;\n private v2h = B2B_IV[5] | 0;\n private v3l = B2B_IV[6] | 0;\n private v3h = B2B_IV[7] | 0;\n private v4l = B2B_IV[8] | 0;\n private v4h = B2B_IV[9] | 0;\n private v5l = B2B_IV[10] | 0;\n private v5h = B2B_IV[11] | 0;\n private v6l = B2B_IV[12] | 0;\n private v6h = B2B_IV[13] | 0;\n private v7l = B2B_IV[14] | 0;\n private v7h = B2B_IV[15] | 0;\n\n constructor(opts: Blake2Opts = {}) {\n const olen = opts.dkLen === undefined ? 64 : opts.dkLen;\n super(128, olen);\n checkBlake2Opts(olen, opts, 64, 16, 16);\n let { key, personalization, salt } = opts;\n let keyLength = 0;\n if (key !== undefined) {\n key = toBytes(key);\n keyLength = key.length;\n }\n this.v0l ^= this.outputLen | (keyLength << 8) | (0x01 << 16) | (0x01 << 24);\n if (salt !== undefined) {\n salt = toBytes(salt);\n const slt = u32(salt);\n this.v4l ^= swap8IfBE(slt[0]);\n this.v4h ^= swap8IfBE(slt[1]);\n this.v5l ^= swap8IfBE(slt[2]);\n this.v5h ^= swap8IfBE(slt[3]);\n }\n if (personalization !== undefined) {\n personalization = toBytes(personalization);\n const pers = u32(personalization);\n this.v6l ^= swap8IfBE(pers[0]);\n this.v6h ^= swap8IfBE(pers[1]);\n this.v7l ^= swap8IfBE(pers[2]);\n this.v7h ^= swap8IfBE(pers[3]);\n }\n if (key !== undefined) {\n // Pad to blockLen and update\n const tmp = new Uint8Array(this.blockLen);\n tmp.set(key);\n this.update(tmp);\n }\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\n let { v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h } = this;\n return [v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h];\n }\n // prettier-ignore\n protected set(\n v0l: number, v0h: number, v1l: number, v1h: number,\n v2l: number, v2h: number, v3l: number, v3h: number,\n v4l: number, v4h: number, v5l: number, v5h: number,\n v6l: number, v6h: number, v7l: number, v7h: number\n ): void {\n this.v0l = v0l | 0;\n this.v0h = v0h | 0;\n this.v1l = v1l | 0;\n this.v1h = v1h | 0;\n this.v2l = v2l | 0;\n this.v2h = v2h | 0;\n this.v3l = v3l | 0;\n this.v3h = v3h | 0;\n this.v4l = v4l | 0;\n this.v4h = v4h | 0;\n this.v5l = v5l | 0;\n this.v5h = v5h | 0;\n this.v6l = v6l | 0;\n this.v6h = v6h | 0;\n this.v7l = v7l | 0;\n this.v7h = v7h | 0;\n }\n protected compress(msg: Uint32Array, offset: number, isLast: boolean): void {\n this.get().forEach((v, i) => (BBUF[i] = v)); // First half from state.\n BBUF.set(B2B_IV, 16); // Second half from IV.\n let { h, l } = u64.fromBig(BigInt(this.length));\n BBUF[24] = B2B_IV[8] ^ l; // Low word of the offset.\n BBUF[25] = B2B_IV[9] ^ h; // High word.\n // Invert all bits for last block\n if (isLast) {\n BBUF[28] = ~BBUF[28];\n BBUF[29] = ~BBUF[29];\n }\n let j = 0;\n const s = BSIGMA;\n for (let i = 0; i < 12; i++) {\n G1b(0, 4, 8, 12, msg, offset + 2 * s[j++]);\n G2b(0, 4, 8, 12, msg, offset + 2 * s[j++]);\n G1b(1, 5, 9, 13, msg, offset + 2 * s[j++]);\n G2b(1, 5, 9, 13, msg, offset + 2 * s[j++]);\n G1b(2, 6, 10, 14, msg, offset + 2 * s[j++]);\n G2b(2, 6, 10, 14, msg, offset + 2 * s[j++]);\n G1b(3, 7, 11, 15, msg, offset + 2 * s[j++]);\n G2b(3, 7, 11, 15, msg, offset + 2 * s[j++]);\n\n G1b(0, 5, 10, 15, msg, offset + 2 * s[j++]);\n G2b(0, 5, 10, 15, msg, offset + 2 * s[j++]);\n G1b(1, 6, 11, 12, msg, offset + 2 * s[j++]);\n G2b(1, 6, 11, 12, msg, offset + 2 * s[j++]);\n G1b(2, 7, 8, 13, msg, offset + 2 * s[j++]);\n G2b(2, 7, 8, 13, msg, offset + 2 * s[j++]);\n G1b(3, 4, 9, 14, msg, offset + 2 * s[j++]);\n G2b(3, 4, 9, 14, msg, offset + 2 * s[j++]);\n }\n this.v0l ^= BBUF[0] ^ BBUF[16];\n this.v0h ^= BBUF[1] ^ BBUF[17];\n this.v1l ^= BBUF[2] ^ BBUF[18];\n this.v1h ^= BBUF[3] ^ BBUF[19];\n this.v2l ^= BBUF[4] ^ BBUF[20];\n this.v2h ^= BBUF[5] ^ BBUF[21];\n this.v3l ^= BBUF[6] ^ BBUF[22];\n this.v3h ^= BBUF[7] ^ BBUF[23];\n this.v4l ^= BBUF[8] ^ BBUF[24];\n this.v4h ^= BBUF[9] ^ BBUF[25];\n this.v5l ^= BBUF[10] ^ BBUF[26];\n this.v5h ^= BBUF[11] ^ BBUF[27];\n this.v6l ^= BBUF[12] ^ BBUF[28];\n this.v6h ^= BBUF[13] ^ BBUF[29];\n this.v7l ^= BBUF[14] ^ BBUF[30];\n this.v7h ^= BBUF[15] ^ BBUF[31];\n clean(BBUF);\n }\n destroy(): void {\n this.destroyed = true;\n clean(this.buffer32);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\n/**\n * Blake2b hash function. 64-bit. 1.5x slower than blake2s in JS.\n * @param msg - message that would be hashed\n * @param opts - dkLen output length, key for MAC mode, salt, personalization\n */\nexport const blake2b: CHashO = /* @__PURE__ */ createOptHasher<BLAKE2b, Blake2Opts>(\n (opts) => new BLAKE2b(opts)\n);\n\n// =================\n// Blake2S\n// =================\n\n// prettier-ignore\nexport type Num16 = {\n v0: number; v1: number; v2: number; v3: number;\n v4: number; v5: number; v6: number; v7: number;\n v8: number; v9: number; v10: number; v11: number;\n v12: number; v13: number; v14: number; v15: number;\n};\n\n// prettier-ignore\nexport function compress(s: Uint8Array, offset: number, msg: Uint32Array, rounds: number,\n v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number,\n v8: number, v9: number, v10: number, v11: number, v12: number, v13: number, v14: number, v15: number,\n): Num16 {\n let j = 0;\n for (let i = 0; i < rounds; i++) {\n ({ a: v0, b: v4, c: v8, d: v12 } = G1s(v0, v4, v8, v12, msg[offset + s[j++]]));\n ({ a: v0, b: v4, c: v8, d: v12 } = G2s(v0, v4, v8, v12, msg[offset + s[j++]]));\n ({ a: v1, b: v5, c: v9, d: v13 } = G1s(v1, v5, v9, v13, msg[offset + s[j++]]));\n ({ a: v1, b: v5, c: v9, d: v13 } = G2s(v1, v5, v9, v13, msg[offset + s[j++]]));\n ({ a: v2, b: v6, c: v10, d: v14 } = G1s(v2, v6, v10, v14, msg[offset + s[j++]]));\n ({ a: v2, b: v6, c: v10, d: v14 } = G2s(v2, v6, v10, v14, msg[offset + s[j++]]));\n ({ a: v3, b: v7, c: v11, d: v15 } = G1s(v3, v7, v11, v15, msg[offset + s[j++]]));\n ({ a: v3, b: v7, c: v11, d: v15 } = G2s(v3, v7, v11, v15, msg[offset + s[j++]]));\n\n ({ a: v0, b: v5, c: v10, d: v15 } = G1s(v0, v5, v10, v15, msg[offset + s[j++]]));\n ({ a: v0, b: v5, c: v10, d: v15 } = G2s(v0, v5, v10, v15, msg[offset + s[j++]]));\n ({ a: v1, b: v6, c: v11, d: v12 } = G1s(v1, v6, v11, v12, msg[offset + s[j++]]));\n ({ a: v1, b: v6, c: v11, d: v12 } = G2s(v1, v6, v11, v12, msg[offset + s[j++]]));\n ({ a: v2, b: v7, c: v8, d: v13 } = G1s(v2, v7, v8, v13, msg[offset + s[j++]]));\n ({ a: v2, b: v7, c: v8, d: v13 } = G2s(v2, v7, v8, v13, msg[offset + s[j++]]));\n ({ a: v3, b: v4, c: v9, d: v14 } = G1s(v3, v4, v9, v14, msg[offset + s[j++]]));\n ({ a: v3, b: v4, c: v9, d: v14 } = G2s(v3, v4, v9, v14, msg[offset + s[j++]]));\n }\n return { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 };\n}\n\nconst B2S_IV = SHA256_IV;\nexport class BLAKE2s extends BLAKE2<BLAKE2s> {\n // Internal state, same as SHA-256\n private v0 = B2S_IV[0] | 0;\n private v1 = B2S_IV[1] | 0;\n private v2 = B2S_IV[2] | 0;\n private v3 = B2S_IV[3] | 0;\n private v4 = B2S_IV[4] | 0;\n private v5 = B2S_IV[5] | 0;\n private v6 = B2S_IV[6] | 0;\n private v7 = B2S_IV[7] | 0;\n\n constructor(opts: Blake2Opts = {}) {\n const olen = opts.dkLen === undefined ? 32 : opts.dkLen;\n super(64, olen);\n checkBlake2Opts(olen, opts, 32, 8, 8);\n let { key, personalization, salt } = opts;\n let keyLength = 0;\n if (key !== undefined) {\n key = toBytes(key);\n keyLength = key.length;\n }\n this.v0 ^= this.outputLen | (keyLength << 8) | (0x01 << 16) | (0x01 << 24);\n if (salt !== undefined) {\n salt = toBytes(salt);\n const slt = u32(salt as Uint8Array);\n this.v4 ^= swap8IfBE(slt[0]);\n this.v5 ^= swap8IfBE(slt[1]);\n }\n if (personalization !== undefined) {\n personalization = toBytes(personalization);\n const pers = u32(personalization as Uint8Array);\n this.v6 ^= swap8IfBE(pers[0]);\n this.v7 ^= swap8IfBE(pers[1]);\n }\n if (key !== undefined) {\n // Pad to blockLen and update\n abytes(key);\n const tmp = new Uint8Array(this.blockLen);\n tmp.set(key);\n this.update(tmp);\n }\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { v0, v1, v2, v3, v4, v5, v6, v7 } = this;\n return [v0, v1, v2, v3, v4, v5, v6, v7];\n }\n // prettier-ignore\n protected set(\n v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number\n ): void {\n this.v0 = v0 | 0;\n this.v1 = v1 | 0;\n this.v2 = v2 | 0;\n this.v3 = v3 | 0;\n this.v4 = v4 | 0;\n this.v5 = v5 | 0;\n this.v6 = v6 | 0;\n this.v7 = v7 | 0;\n }\n protected compress(msg: Uint32Array, offset: number, isLast: boolean): void {\n const { h, l } = u64.fromBig(BigInt(this.length));\n // prettier-ignore\n const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } =\n compress(\n BSIGMA, offset, msg, 10,\n this.v0, this.v1, this.v2, this.v3, this.v4, this.v5, this.v6, this.v7,\n B2S_IV[0], B2S_IV[1], B2S_IV[2], B2S_IV[3], l ^ B2S_IV[4], h ^ B2S_IV[5], isLast ? ~B2S_IV[6] : B2S_IV[6], B2S_IV[7]\n );\n this.v0 ^= v0 ^ v8;\n this.v1 ^= v1 ^ v9;\n this.v2 ^= v2 ^ v10;\n this.v3 ^= v3 ^ v11;\n this.v4 ^= v4 ^ v12;\n this.v5 ^= v5 ^ v13;\n this.v6 ^= v6 ^ v14;\n this.v7 ^= v7 ^ v15;\n }\n destroy(): void {\n this.destroyed = true;\n clean(this.buffer32);\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\n/**\n * Blake2s hash function. Focuses on 8-bit to 32-bit platforms. 1.5x faster than blake2b in JS.\n * @param msg - message that would be hashed\n * @param opts - dkLen output length, key for MAC mode, salt, personalization\n */\nexport const blake2s: CHashO = /* @__PURE__ */ createOptHasher<BLAKE2s, Blake2Opts>(\n (opts) => new BLAKE2s(opts)\n);\n", "/**\n * Blake3 fast hash is Blake2 with reduced security (round count). Can also be used as MAC & KDF.\n *\n * It is advertised as \"the fastest cryptographic hash\". However, it isn't true in JS.\n * Why is this so slow? While it should be 6x faster than blake2b, perf diff is only 20%:\n *\n * * There is only 30% reduction in number of rounds from blake2s\n * * Speed-up comes from tree structure, which is parallelized using SIMD & threading.\n * These features are not present in JS, so we only get overhead from trees.\n * * Parallelization only happens on 1024-byte chunks: there is no benefit for small inputs.\n * * It is still possible to make it faster using: a) loop unrolling b) web workers c) wasm\n * @module\n */\nimport { SHA256_IV } from './_md.ts';\nimport { fromBig } from './_u64.ts';\nimport { BLAKE2, compress } from './blake2.ts';\n// prettier-ignore\nimport {\n abytes, aexists, anumber, aoutput,\n clean, createXOFer, swap32IfBE, toBytes, u32, u8,\n type CHashXO, type HashXOF, type Input\n} from './utils.ts';\n\n// Flag bitset\nconst B3_Flags = {\n CHUNK_START: 0b1,\n CHUNK_END: 0b10,\n PARENT: 0b100,\n ROOT: 0b1000,\n KEYED_HASH: 0b10000,\n DERIVE_KEY_CONTEXT: 0b100000,\n DERIVE_KEY_MATERIAL: 0b1000000,\n} as const;\n\nconst B3_IV = SHA256_IV.slice();\n\nconst B3_SIGMA: Uint8Array = /* @__PURE__ */ (() => {\n const Id = Array.from({ length: 16 }, (_, i) => i);\n const permute = (arr: number[]) =>\n [2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8].map((i) => arr[i]);\n const res: number[] = [];\n for (let i = 0, v = Id; i < 7; i++, v = permute(v)) res.push(...v);\n return Uint8Array.from(res);\n})();\n\n/**\n * Ensure to use EITHER `key` OR `context`, not both.\n *\n * * `key`: 32-byte MAC key.\n * * `context`: string for KDF. Should be hardcoded, globally unique, and application - specific.\n * A good default format for the context string is \"[application] [commit timestamp] [purpose]\".\n */\nexport type Blake3Opts = { dkLen?: number; key?: Input; context?: Input };\n\n/** Blake3 hash. Can be used as MAC and KDF. */\nexport class BLAKE3 extends BLAKE2<BLAKE3> implements HashXOF<BLAKE3> {\n private chunkPos = 0; // Position of current block in chunk\n private chunksDone = 0; // How many chunks we already have\n private flags = 0 | 0;\n private IV: Uint32Array;\n private state: Uint32Array;\n private stack: Uint32Array[] = [];\n // Output\n private posOut = 0;\n private bufferOut32 = new Uint32Array(16);\n private bufferOut: Uint8Array;\n private chunkOut = 0; // index of output chunk\n private enableXOF = true;\n\n constructor(opts: Blake3Opts = {}, flags = 0) {\n super(64, opts.dkLen === undefined ? 32 : opts.dkLen);\n const { key, context } = opts;\n const hasContext = context !== undefined;\n if (key !== undefined) {\n if (hasContext) throw new Error('Only \"key\" or \"context\" can be specified at same time');\n const k = toBytes(key).slice();\n abytes(k, 32);\n this.IV = u32(k);\n swap32IfBE(this.IV);\n this.flags = flags | B3_Flags.KEYED_HASH;\n } else if (hasContext) {\n const ctx = toBytes(context);\n const contextKey = new BLAKE3({ dkLen: 32 }, B3_Flags.DERIVE_KEY_CONTEXT)\n .update(ctx)\n .digest();\n this.IV = u32(contextKey);\n swap32IfBE(this.IV);\n this.flags = flags | B3_Flags.DERIVE_KEY_MATERIAL;\n } else {\n this.IV = B3_IV.slice();\n this.flags = flags;\n }\n this.state = this.IV.slice();\n this.bufferOut = u8(this.bufferOut32);\n }\n // Unused\n protected get(): [] {\n return [];\n }\n protected set(): void {}\n private b2Compress(counter: number, flags: number, buf: Uint32Array, bufPos: number = 0) {\n const { state: s, pos } = this;\n const { h, l } = fromBig(BigInt(counter), true);\n // prettier-ignore\n const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } =\n compress(\n B3_SIGMA, bufPos, buf, 7,\n s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7],\n B3_IV[0], B3_IV[1], B3_IV[2], B3_IV[3], h, l, pos, flags\n );\n s[0] = v0 ^ v8;\n s[1] = v1 ^ v9;\n s[2] = v2 ^ v10;\n s[3] = v3 ^ v11;\n s[4] = v4 ^ v12;\n s[5] = v5 ^ v13;\n s[6] = v6 ^ v14;\n s[7] = v7 ^ v15;\n }\n protected compress(buf: Uint32Array, bufPos: number = 0, isLast: boolean = false): void {\n // Compress last block\n let flags = this.flags;\n if (!this.chunkPos) flags |= B3_Flags.CHUNK_START;\n if (this.chunkPos === 15 || isLast) flags |= B3_Flags.CHUNK_END;\n if (!isLast) this.pos = this.blockLen;\n this.b2Compress(this.chunksDone, flags, buf, bufPos);\n this.chunkPos += 1;\n // If current block is last in chunk (16 blocks), then compress chunks\n if (this.chunkPos === 16 || isLast) {\n let chunk = this.state;\n this.state = this.IV.slice();\n // If not the last one, compress only when there are trailing zeros in chunk counter\n // chunks used as binary tree where current stack is path. Zero means current leaf is finished and can be compressed.\n // 1 (001) - leaf not finished (just push current chunk to stack)\n // 2 (010) - leaf finished at depth=1 (merge with last elm on stack and push back)\n // 3 (011) - last leaf not finished\n // 4 (100) - leafs finished at depth=1 and depth=2\n for (let last, chunks = this.chunksDone + 1; isLast || !(chunks & 1); chunks >>= 1) {\n if (!(last = this.stack.pop())) break;\n this.buffer32.set(last, 0);\n this.buffer32.set(chunk, 8);\n this.pos = this.blockLen;\n this.b2Compress(0, this.flags | B3_Flags.PARENT, this.buffer32, 0);\n chunk = this.state;\n this.state = this.IV.slice();\n }\n this.chunksDone++;\n this.chunkPos = 0;\n this.stack.push(chunk);\n }\n this.pos = 0;\n }\n _cloneInto(to?: BLAKE3): BLAKE3 {\n to = super._cloneInto(to) as BLAKE3;\n const { IV, flags, state, chunkPos, posOut, chunkOut, stack, chunksDone } = this;\n to.state.set(state.slice());\n to.stack = stack.map((i) => Uint32Array.from(i));\n to.IV.set(IV);\n to.flags = flags;\n to.chunkPos = chunkPos;\n to.chunksDone = chunksDone;\n to.posOut = posOut;\n to.chunkOut = chunkOut;\n to.enableXOF = this.enableXOF;\n to.bufferOut32.set(this.bufferOut32);\n return to;\n }\n destroy(): void {\n this.destroyed = true;\n clean(this.state, this.buffer32, this.IV, this.bufferOut32);\n clean(...this.stack);\n }\n // Same as b2Compress, but doesn't modify state and returns 16 u32 array (instead of 8)\n private b2CompressOut() {\n const { state: s, pos, flags, buffer32, bufferOut32: out32 } = this;\n const { h, l } = fromBig(BigInt(this.chunkOut++));\n swap32IfBE(buffer32);\n // prettier-ignore\n const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } =\n compress(\n B3_SIGMA, 0, buffer32, 7,\n s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7],\n B3_IV[0], B3_IV[1], B3_IV[2], B3_IV[3], l, h, pos, flags\n );\n out32[0] = v0 ^ v8;\n out32[1] = v1 ^ v9;\n out32[2] = v2 ^ v10;\n out32[3] = v3 ^ v11;\n out32[4] = v4 ^ v12;\n out32[5] = v5 ^ v13;\n out32[6] = v6 ^ v14;\n out32[7] = v7 ^ v15;\n out32[8] = s[0] ^ v8;\n out32[9] = s[1] ^ v9;\n out32[10] = s[2] ^ v10;\n out32[11] = s[3] ^ v11;\n out32[12] = s[4] ^ v12;\n out32[13] = s[5] ^ v13;\n out32[14] = s[6] ^ v14;\n out32[15] = s[7] ^ v15;\n swap32IfBE(buffer32);\n swap32IfBE(out32);\n this.posOut = 0;\n }\n protected finish(): void {\n if (this.finished) return;\n this.finished = true;\n // Padding\n clean(this.buffer.subarray(this.pos));\n // Process last chunk\n let flags = this.flags | B3_Flags.ROOT;\n if (this.stack.length) {\n flags |= B3_Flags.PARENT;\n swap32IfBE(this.buffer32);\n this.compress(this.buffer32, 0, true);\n swap32IfBE(this.buffer32);\n this.chunksDone = 0;\n this.pos = this.blockLen;\n } else {\n flags |= (!this.chunkPos ? B3_Flags.CHUNK_START : 0) | B3_Flags.CHUNK_END;\n }\n this.flags = flags;\n this.b2CompressOut();\n }\n private writeInto(out: Uint8Array) {\n aexists(this, false);\n abytes(out);\n this.finish();\n const { blockLen, bufferOut } = this;\n for (let pos = 0, len = out.length; pos < len; ) {\n if (this.posOut >= blockLen) this.b2CompressOut();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out: Uint8Array): Uint8Array {\n if (!this.enableXOF) throw new Error('XOF is not possible after digest call');\n return this.writeInto(out);\n }\n xof(bytes: number): Uint8Array {\n anumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out: Uint8Array): Uint8Array {\n aoutput(out, this);\n if (this.finished) throw new Error('digest() was already called');\n this.enableXOF = false;\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest(): Uint8Array {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n}\n\n/**\n * BLAKE3 hash function. Can be used as MAC and KDF.\n * @param msg - message that would be hashed\n * @param opts - `dkLen` for output length, `key` for MAC mode, `context` for KDF mode\n * @example\n * const data = new Uint8Array(32);\n * const hash = blake3(data);\n * const mac = blake3(data, { key: new Uint8Array(32) });\n * const kdf = blake3(data, { context: 'application name' });\n */\nexport const blake3: CHashXO = /* @__PURE__ */ createXOFer<BLAKE3, Blake3Opts>(\n (opts) => new BLAKE3(opts)\n);\n", "import { blake3 } from '@noble/hashes/blake3'\n\nexport const SOURCE_AUTH_MANIFEST_VERSION = 1\nexport const SOURCE_AUTH_OBJECT_ENTRY_FRAME = 1\nexport const SOURCE_AUTH_GROUP_CLOSE_FRAME = 2\nexport const SOURCE_AUTH_OBJECT_ENTRY_LENGTH = 52\nexport const SOURCE_AUTH_GROUP_CLOSE_LENGTH = 112\nexport const SOURCE_AUTH_MAX_OBJECTS_PER_GROUP = 4096\nexport const SOURCE_AUTH_MAX_TRUE_LENGTH = 16 * 1024 * 1024\nexport const SOURCE_AUTH_SCOPE_LENGTH = 32\n\nconst SIGNATURE_DOMAIN = new TextEncoder().encode('blockcast-mmt-root-v1\\0\\0\\0')\n\nexport interface SourceAuthObjectEntry {\n kind: 'object'\n groupId: bigint\n objectId: number\n trueLength: number\n digest: Uint8Array\n}\n\nexport interface SourceAuthGroupClose {\n kind: 'close'\n groupId: bigint\n objectCount: number\n root: Uint8Array\n signature: Uint8Array\n}\n\nexport type SourceAuthManifestFrame = SourceAuthObjectEntry | SourceAuthGroupClose\n\nfunction requireBytes(name: string, value: Uint8Array, length: number): void {\n if (value.byteLength !== length) {\n throw new Error(`${name} must be ${length} bytes, got ${value.byteLength}`)\n }\n}\n\nfunction requireU32(name: string, value: number): void {\n if (!Number.isInteger(value) || value < 0 || value > 0xffff_ffff) {\n throw new Error(`${name} must be an unsigned 32-bit integer`)\n }\n}\n\nfunction requireU64(name: string, value: bigint): void {\n if (value < 0n || value > 0xffff_ffff_ffff_ffffn) {\n throw new Error(`${name} must be an unsigned 64-bit integer`)\n }\n}\n\nfunction requireTrueLength(value: number): void {\n requireU32('trueLength', value)\n if (value > SOURCE_AUTH_MAX_TRUE_LENGTH) {\n throw new Error(`trueLength exceeds the ${SOURCE_AUTH_MAX_TRUE_LENGTH}-byte profile maximum`)\n }\n}\n\nexport function sourceAuthObjectDigest(object: Uint8Array): Uint8Array {\n return blake3(object)\n}\n\nexport function sourceAuthLeafHash(\n groupId: bigint,\n objectId: number,\n digest: Uint8Array,\n trueLength: number,\n): Uint8Array {\n requireU64('groupId', groupId)\n requireU32('objectId', objectId)\n requireBytes('digest', digest, 32)\n requireTrueLength(trueLength)\n const preimage = new Uint8Array(49)\n const view = new DataView(preimage.buffer)\n view.setBigUint64(1, groupId)\n view.setUint32(9, objectId)\n preimage.set(digest, 13)\n view.setUint32(45, trueLength)\n return blake3(preimage)\n}\n\nexport function sourceAuthMerkleRoot(\n entries: readonly {\n groupId: bigint\n objectId: number\n digest: Uint8Array\n trueLength: number\n }[],\n): Uint8Array {\n if (entries.length === 0) throw new Error('Merkle tree requires at least one object')\n if (entries.length > SOURCE_AUTH_MAX_OBJECTS_PER_GROUP) {\n throw new Error(`group exceeds ${SOURCE_AUTH_MAX_OBJECTS_PER_GROUP} objects`)\n }\n const groupId = entries[0]!.groupId\n const objectIds = new Set<number>()\n const ordered = [...entries].sort((left, right) => left.objectId - right.objectId)\n let level = ordered.map((entry) => {\n if (entry.groupId !== groupId) throw new Error('Merkle entries must belong to one group')\n if (objectIds.has(entry.objectId)) throw new Error(`duplicate objectId ${entry.objectId}`)\n objectIds.add(entry.objectId)\n return sourceAuthLeafHash(entry.groupId, entry.objectId, entry.digest, entry.trueLength)\n })\n while (level.length > 1) {\n const parents: Uint8Array[] = []\n for (let index = 0; index < level.length; index += 2) {\n const left = level[index]!\n const right = level[index + 1] ?? left\n const preimage = new Uint8Array(65)\n preimage[0] = 1\n preimage.set(left, 1)\n preimage.set(right, 33)\n parents.push(blake3(preimage))\n }\n level = parents\n }\n return level[0]!\n}\n\nexport function trimRecoveredSourceAuthObject(\n recoveredSymbol: Uint8Array,\n trueLength: number,\n): Uint8Array {\n requireTrueLength(trueLength)\n if (trueLength > recoveredSymbol.byteLength) {\n throw new Error(`true length ${trueLength} exceeds recovered object size ${recoveredSymbol.byteLength}`)\n }\n return recoveredSymbol.subarray(0, trueLength)\n}\n\nexport function encodeSourceAuthObjectEntry(\n entry: Omit<SourceAuthObjectEntry, 'kind'>,\n): Uint8Array {\n requireU32('objectId', entry.objectId)\n requireTrueLength(entry.trueLength)\n requireU64('groupId', entry.groupId)\n requireBytes('digest', entry.digest, 32)\n const frame = new Uint8Array(SOURCE_AUTH_OBJECT_ENTRY_LENGTH)\n const view = new DataView(frame.buffer)\n frame[0] = SOURCE_AUTH_OBJECT_ENTRY_FRAME\n frame[1] = SOURCE_AUTH_MANIFEST_VERSION\n view.setBigUint64(4, entry.groupId)\n view.setUint32(12, entry.objectId)\n view.setUint32(16, entry.trueLength)\n frame.set(entry.digest, 20)\n return frame\n}\n\nexport function encodeSourceAuthGroupClose(\n close: Omit<SourceAuthGroupClose, 'kind'>,\n): Uint8Array {\n requireU32('objectCount', close.objectCount)\n if (close.objectCount === 0 || close.objectCount > SOURCE_AUTH_MAX_OBJECTS_PER_GROUP) {\n throw new Error(`objectCount must be between 1 and ${SOURCE_AUTH_MAX_OBJECTS_PER_GROUP}`)\n }\n requireU64('groupId', close.groupId)\n requireBytes('root', close.root, 32)\n requireBytes('signature', close.signature, 64)\n const frame = new Uint8Array(SOURCE_AUTH_GROUP_CLOSE_LENGTH)\n const view = new DataView(frame.buffer)\n frame[0] = SOURCE_AUTH_GROUP_CLOSE_FRAME\n frame[1] = SOURCE_AUTH_MANIFEST_VERSION\n view.setBigUint64(4, close.groupId)\n view.setUint32(12, close.objectCount)\n frame.set(close.root, 16)\n frame.set(close.signature, 48)\n return frame\n}\n\nexport function sourceAuthSignaturePreimage(\n authScope: Uint8Array,\n groupId: bigint,\n objectCount: number,\n root: Uint8Array,\n): Uint8Array {\n requireU32('objectCount', objectCount)\n if (objectCount === 0 || objectCount > SOURCE_AUTH_MAX_OBJECTS_PER_GROUP) {\n throw new Error(`objectCount must be between 1 and ${SOURCE_AUTH_MAX_OBJECTS_PER_GROUP}`)\n }\n requireU64('groupId', groupId)\n requireBytes('authScope', authScope, SOURCE_AUTH_SCOPE_LENGTH)\n requireBytes('root', root, 32)\n const preimage = new Uint8Array(100)\n const view = new DataView(preimage.buffer)\n preimage.set(SIGNATURE_DOMAIN)\n preimage.set(authScope, 24)\n view.setBigUint64(56, groupId)\n view.setUint32(64, objectCount)\n preimage.set(root, 68)\n return preimage\n}\n\nexport function decodeSourceAuthManifestFrame(frame: Uint8Array): SourceAuthManifestFrame {\n const frameType = frame[0]\n const expectedLength = frameType === SOURCE_AUTH_OBJECT_ENTRY_FRAME\n ? SOURCE_AUTH_OBJECT_ENTRY_LENGTH\n : frameType === SOURCE_AUTH_GROUP_CLOSE_FRAME\n ? SOURCE_AUTH_GROUP_CLOSE_LENGTH\n : 0\n if (expectedLength === 0) throw new Error(`unsupported manifest frame type ${frameType}`)\n if (frame.byteLength !== expectedLength) {\n throw new Error(`manifest frame has invalid length ${frame.byteLength} for type ${frameType}`)\n }\n if (frame[1] !== SOURCE_AUTH_MANIFEST_VERSION) {\n throw new Error(`unsupported manifest version ${frame[1]}`)\n }\n if (frame[2] !== 0 || frame[3] !== 0) throw new Error('manifest reserved bits must be zero')\n\n const view = new DataView(frame.buffer, frame.byteOffset, frame.byteLength)\n const groupId = view.getBigUint64(4)\n if (frameType === SOURCE_AUTH_OBJECT_ENTRY_FRAME) {\n const entry: SourceAuthObjectEntry = {\n kind: 'object',\n groupId,\n objectId: view.getUint32(12),\n trueLength: view.getUint32(16),\n digest: frame.slice(20, 52),\n }\n requireTrueLength(entry.trueLength)\n return entry\n }\n const close: SourceAuthGroupClose = {\n kind: 'close',\n groupId,\n objectCount: view.getUint32(12),\n root: frame.slice(16, 48),\n signature: frame.slice(48, 112),\n }\n if (close.objectCount === 0 || close.objectCount > SOURCE_AUTH_MAX_OBJECTS_PER_GROUP) {\n throw new Error(`objectCount must be between 1 and ${SOURCE_AUTH_MAX_OBJECTS_PER_GROUP}`)\n }\n return close\n}\n", "import {\n decodeSourceAuthManifestFrame,\n sourceAuthMerkleRoot,\n sourceAuthObjectDigest,\n sourceAuthSignaturePreimage,\n type SourceAuthGroupClose,\n type SourceAuthObjectEntry,\n} from './source-auth.js'\n\nexport type ManifestAuthMode = 'off' | 'shadow' | 'enforce'\nexport type MissingManifestPolicy = 'stall' | 'fallback-shadow'\nexport type ManifestFailureReason =\n | 'sigInvalid'\n | 'digestMismatch'\n | 'manifestLate'\n | 'manifestAbsent'\n | 'verifierError'\n\nexport interface ManifestAuthConfig {\n mode: ManifestAuthMode\n onMissingManifest: MissingManifestPolicy\n}\n\nexport interface ManifestObjectIdentity {\n trackName: string\n /** Stable v2 auth binding. Defaults to trackName for legacy single-format callers. */\n bindingId?: string\n /** MoQ group ids are u62; values above 2^53 must be passed as bigint. */\n groupId: number | bigint\n objectId: number\n packetId?: number\n ssId?: number\n}\n\nexport interface ManifestFecBlockMapper {\n readonly d: number\n derive(groupId: number, objectId: number): { ssId: number }\n}\n\nexport interface ManifestTrackContext {\n broadcastNamespaceId: string\n trackName: string\n /** Stable v2 auth binding. Defaults to trackName for legacy single-format callers. */\n bindingId?: string\n sourceSymbolFormat?: string\n keyEpoch: number\n codec: string\n timing: string\n fecGeometry: string\n manifestFormatVersion: number\n /** Authenticated-catalog binding for the namespace, track, epoch, codec,\n * timing, FEC geometry, and manifest version fields above. */\n authScope: Uint8Array\n publicKey: Uint8Array\n /** Current key first, followed by any catalog-advertised overlap keys. */\n acceptedPublicKeys?: readonly Uint8Array[]\n bitrate: number\n groupDurationMs: number\n mapper: ManifestFecBlockMapper\n manifestChannelAuthenticated: boolean\n}\n\nexport interface ManifestVerificationStats {\n verified: number\n /** Terminal outcomes only: an object counted here will never be verified. */\n failures: Record<ManifestFailureReason, number>\n /**\n * Objects currently held in quarantine awaiting a manifest \u2014 pending, NOT\n * failed, and deliberately disjoint from `failures`. An enforce-mode stall is\n * accounted here first and moves into `failures` only once the verifier gives\n * up on it, so a reason breakdown that ignores this gauge under-reports live\n * stalls by whatever is still in flight (BLO-30007).\n */\n quarantined: number\n quarantinedBytes: number\n}\n\nexport interface ManifestFailure {\n trackName: string\n bindingId?: string\n groupId: number | bigint\n objectId: number\n reason: ManifestFailureReason\n}\n\nexport interface ManifestAdmission {\n action: 'play' | 'stall' | 'drop'\n verified: boolean\n reason?: ManifestFailureReason\n}\n\nexport type SignatureVerifier = (\n publicKey: Uint8Array,\n message: Uint8Array,\n signature: Uint8Array,\n) => boolean | Promise<boolean>\n\nexport function manifestBindingId(trackName: string, sourceSymbolFormat: string): string {\n return JSON.stringify([trackName, sourceSymbolFormat])\n}\n\nexport function createWebCryptoEd25519Verifier(\n subtle: SubtleCrypto = globalThis.crypto.subtle,\n): SignatureVerifier {\n return async (publicKey, message, signature) => {\n const keyBytes = Uint8Array.from(publicKey)\n const messageBytes = Uint8Array.from(message)\n const signatureBytes = Uint8Array.from(signature)\n const key = await subtle.importKey('raw', keyBytes.buffer, 'Ed25519', false, ['verify'])\n return subtle.verify('Ed25519', key, signatureBytes.buffer, messageBytes.buffer)\n }\n}\n\ninterface PendingObject {\n identity: ManifestObjectIdentity\n data: Uint8Array\n release: () => void\n bytes: number\n}\n\ninterface GroupState {\n entries: Map<number, SourceAuthObjectEntry>\n pending: Map<number, PendingObject>\n close?: SourceAuthGroupClose\n /** Close frame that arrived before all object entries (manifest-channel\n * reordering); retried once the entry count matches. */\n pendingClose?: SourceAuthGroupClose\n rootVerified: boolean\n signaturePending?: boolean\n failed?: ManifestFailureReason\n}\n\ninterface TrackState {\n context: ManifestTrackContext\n groups: Map<bigint, GroupState>\n quarantine: PendingObject[]\n quarantinedBytes: number\n capBytes: number\n manifestEntries: number\n maxManifestEntries: number\n maxGroups: number\n}\n\nconst FAILURE_REASONS: readonly ManifestFailureReason[] = [\n 'sigInvalid',\n 'digestMismatch',\n 'manifestLate',\n 'manifestAbsent',\n 'verifierError',\n]\n\nconst equalBytes = (left: Uint8Array, right: Uint8Array): boolean => {\n if (left.byteLength !== right.byteLength) return false\n let diff = 0\n for (let index = 0; index < left.byteLength; index++) diff |= left[index]! ^ right[index]!\n return diff === 0\n}\n\nconst isPromiseLike = (value: boolean | Promise<boolean>): value is Promise<boolean> =>\n typeof value === 'object' && value !== null && typeof value.then === 'function'\n\nexport class ManifestVerifier {\n #config: ManifestAuthConfig\n readonly #verifySignature: SignatureVerifier\n readonly #onFailure?: (failure: ManifestFailure) => void\n readonly #tracks = new Map<string, TrackState>()\n readonly #stats: Omit<ManifestVerificationStats, 'quarantined'> = {\n verified: 0,\n failures: Object.fromEntries(FAILURE_REASONS.map((reason) => [reason, 0])) as Record<ManifestFailureReason, number>,\n quarantinedBytes: 0,\n }\n #disposed = false\n\n constructor(options: {\n manifestAuth: ManifestAuthConfig\n verifySignature: SignatureVerifier\n onFailure?: (failure: ManifestFailure) => void\n }) {\n this.#config = { ...options.manifestAuth }\n this.#verifySignature = options.verifySignature\n this.#onFailure = options.onFailure\n }\n\n get config(): Readonly<ManifestAuthConfig> {\n return this.#config\n }\n\n get stats(): ManifestVerificationStats {\n let quarantined = 0\n for (const track of this.#tracks.values()) quarantined += track.quarantine.length\n return {\n verified: this.#stats.verified,\n failures: { ...this.#stats.failures },\n quarantined,\n quarantinedBytes: this.#stats.quarantinedBytes,\n }\n }\n\n setMode(mode: ManifestAuthMode): void {\n this.#config = { ...this.#config, mode }\n if (mode !== 'enforce') this.#releaseAllQuarantine(false)\n }\n\n registerTrack(context: ManifestTrackContext): void {\n const bindingId = context.bindingId ?? context.trackName\n if (this.#tracks.has(bindingId)) {\n throw new Error(`manifest binding ${bindingId} is already registered`)\n }\n if (!Number.isFinite(context.bitrate) || context.bitrate <= 0) {\n throw new Error('manifest track bitrate must be > 0')\n }\n if (!Number.isFinite(context.groupDurationMs) || context.groupDurationMs <= 0) {\n throw new Error('manifest track groupDurationMs must be > 0')\n }\n if (context.authScope.byteLength !== 32) throw new Error('manifest authScope must be 32 bytes')\n if (context.publicKey.byteLength !== 32) throw new Error('manifest publicKey must be 32 bytes')\n for (const key of context.acceptedPublicKeys ?? []) {\n if (key.byteLength !== 32) throw new Error('manifest acceptedPublicKeys must contain 32-byte keys')\n }\n for (const [name, value] of Object.entries({\n broadcastNamespaceId: context.broadcastNamespaceId,\n trackName: context.trackName,\n codec: context.codec,\n timing: context.timing,\n fecGeometry: context.fecGeometry,\n })) {\n if (value.length === 0) throw new Error(`manifest ${name} must not be empty`)\n }\n this.#tracks.set(bindingId, {\n context: { ...context, bindingId },\n groups: new Map(),\n quarantine: [],\n quarantinedBytes: 0,\n capBytes: Math.ceil((context.bitrate * context.groupDurationMs) / 8000),\n manifestEntries: 0,\n maxManifestEntries: Math.ceil((context.bitrate * context.groupDurationMs) / (8000 * 52)),\n maxGroups: context.mapper.d + 1,\n })\n }\n\n ingestManifestFrame(bindingId: string, frameBytes: Uint8Array): void {\n const track = this.#requireTrack(bindingId)\n try {\n const frame = decodeSourceAuthManifestFrame(frameBytes)\n const groupId = frame.groupId\n const group = this.#group(track, groupId)\n if (frame.kind === 'object') {\n if (group.close || group.signaturePending || group.failed) {\n this.#failure({ trackName: track.context.trackName, bindingId, groupId, objectId: frame.objectId }, 'verifierError')\n return\n }\n if (group.entries.has(frame.objectId)) {\n this.#failure({ trackName: track.context.trackName, bindingId, groupId, objectId: frame.objectId }, 'verifierError')\n return\n }\n if (group.entries.size >= 4096 || track.manifestEntries >= track.maxManifestEntries) {\n this.#failure({ trackName: track.context.trackName, bindingId, groupId, objectId: frame.objectId }, 'verifierError')\n return\n }\n group.entries.set(frame.objectId, frame)\n track.manifestEntries++\n const pending = group.pending.get(frame.objectId)\n if (pending) {\n this.#failure(pending.identity, 'manifestLate')\n this.#resolvePending(track, group, pending, frame)\n }\n if (group.pendingClose && group.entries.size === group.pendingClose.objectCount) {\n const close = group.pendingClose\n group.pendingClose = undefined\n this.#closeGroup(track, groupId, group, close)\n }\n return\n }\n this.#closeGroup(track, groupId, group, frame)\n } catch {\n this.#failure({ trackName: track.context.trackName, bindingId, groupId: 0, objectId: 0 }, 'verifierError')\n }\n }\n\n admitObject(\n identity: ManifestObjectIdentity,\n data: Uint8Array,\n release: () => void,\n ): ManifestAdmission {\n if (this.#config.mode === 'off') {\n release()\n return { action: 'play', verified: false }\n }\n const track = this.#tracks.get(identity.bindingId ?? identity.trackName)\n if (!track) {\n release()\n this.#failure(identity, 'verifierError')\n return { action: 'play', verified: false, reason: 'verifierError' }\n }\n try {\n if (!this.#validateIdentity(track, identity)) {\n return this.#rejectOrShadow(identity, release, 'digestMismatch')\n }\n const group = this.#group(track, BigInt(identity.groupId))\n if (group.failed === 'sigInvalid' || group.failed === 'digestMismatch') {\n return this.#rejectOrShadow(identity, release, group.failed)\n }\n const entry = group.entries.get(identity.objectId)\n if (entry) return this.#admitAgainstEntry(track, group, identity, data, release, entry)\n if (this.#config.mode === 'shadow' || this.#config.onMissingManifest === 'fallback-shadow') {\n release()\n this.#failure(identity, 'manifestAbsent')\n return { action: 'play', verified: false, reason: 'manifestAbsent' }\n }\n if (!this.#quarantine(track, group, { identity, data, release, bytes: data.byteLength })) {\n return { action: 'drop', verified: false }\n }\n return { action: 'stall', verified: false }\n } catch {\n release()\n this.#failure(identity, 'verifierError')\n return { action: 'play', verified: false, reason: 'verifierError' }\n }\n }\n\n dispose(): void {\n if (this.#disposed) return\n this.#disposed = true\n this.#releaseAllQuarantine(false)\n this.#tracks.clear()\n }\n\n #requireTrack(bindingId: string): TrackState {\n const track = this.#tracks.get(bindingId)\n if (!track) throw new Error(`unknown manifest binding ${bindingId}`)\n return track\n }\n\n #group(track: TrackState, groupId: bigint): GroupState {\n let group = track.groups.get(groupId)\n if (!group) {\n group = { entries: new Map(), pending: new Map(), rootVerified: false }\n track.groups.set(groupId, group)\n while (track.groups.size > track.maxGroups) {\n const oldest = track.groups.entries().next().value as [bigint, GroupState] | undefined\n if (!oldest) break\n const [oldestId, oldestGroup] = oldest\n for (const pending of [...oldestGroup.pending.values()]) {\n this.#removePending(track, oldestGroup, pending)\n pending.release()\n // The group aged out with objects still waiting on a manifest that\n // never arrived. That is an absent manifest, not a verifier fault:\n // `verifierError` is reserved for an exception/crash in the verifier\n // itself, so mislabelling here reads on the graduation dashboard as a\n // software bug and hides a benign absent-manifest stall (BLO-30007).\n this.#failure(pending.identity, 'manifestAbsent')\n }\n track.manifestEntries -= oldestGroup.entries.size\n track.groups.delete(oldestId)\n }\n }\n return group\n }\n\n #validateIdentity(track: TrackState, identity: ManifestObjectIdentity): boolean {\n const coordinates = track.context.mapper.derive(Number(identity.groupId), identity.objectId)\n return identity.ssId === undefined || coordinates.ssId === identity.ssId\n }\n\n #admitAgainstEntry(\n track: TrackState,\n group: GroupState,\n identity: ManifestObjectIdentity,\n data: Uint8Array,\n release: () => void,\n entry: SourceAuthObjectEntry,\n ): ManifestAdmission {\n if (entry.trueLength !== data.byteLength) {\n return this.#rejectOrShadow(identity, release, 'digestMismatch')\n }\n const digestMatches = equalBytes(sourceAuthObjectDigest(data.subarray(0, entry.trueLength)), entry.digest)\n if (!digestMatches) return this.#rejectOrShadow(identity, release, 'digestMismatch')\n if (!track.context.manifestChannelAuthenticated && !group.rootVerified) {\n if (this.#config.mode === 'shadow') {\n release()\n return { action: 'play', verified: false }\n }\n if (!this.#quarantine(track, group, { identity, data, release, bytes: data.byteLength })) {\n return { action: 'drop', verified: false }\n }\n return { action: 'stall', verified: false }\n }\n release()\n this.#stats.verified++\n return { action: 'play', verified: true }\n }\n\n #rejectOrShadow(\n identity: ManifestObjectIdentity,\n release: () => void,\n reason: 'digestMismatch' | 'sigInvalid',\n ): ManifestAdmission {\n this.#failure(identity, reason)\n if (this.#config.mode === 'enforce') {\n console.warn(JSON.stringify({ event: 'manifest-enforce-drop', track: identity.trackName, group: String(identity.groupId), object: identity.objectId, reason }))\n return { action: 'drop', verified: false, reason }\n }\n release()\n return { action: 'play', verified: false, reason }\n }\n\n #resolvePending(\n track: TrackState,\n group: GroupState,\n pending: PendingObject,\n entry: SourceAuthObjectEntry,\n ): void {\n this.#removePending(track, group, pending)\n this.#admitAgainstEntry(track, group, pending.identity, pending.data, pending.release, entry)\n }\n\n #closeGroup(\n track: TrackState,\n groupId: bigint,\n group: GroupState,\n close: SourceAuthGroupClose,\n ): void {\n if (group.close || group.signaturePending) return\n const entries = [...group.entries.values()]\n if (entries.length !== close.objectCount) {\n // Manifest-channel reordering: the close frame beat some object entries.\n // Stash it (latest-wins on duplicates) so the object-entry path can\n // re-attempt the close once the count matches; quarantined objects stay\n // quarantined, and manifestAbsent below is a signal, not an eviction.\n group.pendingClose = close\n const hadPending = group.pending.size > 0\n if (this.#config.onMissingManifest === 'fallback-shadow' || this.#config.mode === 'shadow') {\n for (const pending of [...group.pending.values()]) {\n this.#removePending(track, group, pending)\n pending.release()\n this.#failure(pending.identity, 'manifestAbsent')\n }\n } else {\n for (const pending of group.pending.values()) {\n this.#failure(pending.identity, 'manifestAbsent')\n }\n }\n if (!hadPending) {\n this.#failure({ trackName: track.context.trackName, groupId, objectId: 0 }, 'manifestAbsent')\n }\n return\n }\n if (!equalBytes(sourceAuthMerkleRoot(entries), close.root)) {\n group.failed = 'digestMismatch'\n this.#failGroup(track, groupId, group, 'digestMismatch')\n return\n }\n const preimage = sourceAuthSignaturePreimage(track.context.authScope, close.groupId, close.objectCount, close.root)\n let signatureValid: boolean | Promise<boolean>\n try {\n signatureValid = this.#verifyAcceptedSignature(track, preimage, close.signature)\n } catch {\n this.#failOpenGroup(track, groupId, group)\n return\n }\n if (isPromiseLike(signatureValid)) {\n group.signaturePending = true\n void signatureValid.then(\n (valid) => {\n if (this.#disposed) return\n group.signaturePending = false\n this.#finishGroupSignature(track, groupId, group, close, valid)\n },\n () => {\n if (this.#disposed) return\n group.signaturePending = false\n this.#failOpenGroup(track, groupId, group)\n },\n )\n return\n }\n this.#finishGroupSignature(track, groupId, group, close, signatureValid)\n }\n\n #finishGroupSignature(\n track: TrackState,\n groupId: bigint,\n group: GroupState,\n close: SourceAuthGroupClose,\n signatureValid: boolean,\n ): void {\n if (!signatureValid) {\n group.failed = 'sigInvalid'\n this.#failGroup(track, groupId, group, 'sigInvalid')\n return\n }\n group.failed = undefined\n group.close = close\n group.pendingClose = undefined\n group.rootVerified = true\n for (const pending of [...group.pending.values()]) {\n const entry = group.entries.get(pending.identity.objectId)\n if (entry) this.#resolvePending(track, group, pending, entry)\n else if (this.#config.onMissingManifest === 'fallback-shadow') {\n this.#removePending(track, group, pending)\n pending.release()\n this.#failure(pending.identity, 'manifestAbsent')\n }\n }\n }\n\n #verifyAcceptedSignature(\n track: TrackState,\n message: Uint8Array,\n signature: Uint8Array,\n ): boolean | Promise<boolean> {\n const keys = track.context.acceptedPublicKeys ?? [track.context.publicKey]\n const pending: Promise<boolean | 'error'>[] = []\n let hadSynchronousError = false\n for (const key of keys) {\n try {\n const result = this.#verifySignature(key, message, signature)\n if (isPromiseLike(result)) {\n pending.push(Promise.resolve(result).then((valid) => valid, () => 'error' as const))\n } else if (result) {\n return true\n }\n } catch {\n hadSynchronousError = true\n }\n }\n if (pending.length === 0) {\n if (hadSynchronousError) throw new Error('manifest signature verifier unavailable')\n return false\n }\n return Promise.all(pending).then((results) => {\n if (results.some((valid) => valid === true)) return true\n if (hadSynchronousError || results.some((valid) => valid === 'error')) {\n throw new Error('manifest signature verifier unavailable')\n }\n return false\n })\n }\n\n #failGroup(\n track: TrackState,\n groupId: bigint,\n group: GroupState,\n reason: 'digestMismatch' | 'sigInvalid',\n ): void {\n if (group.pending.size === 0) {\n this.#failure({ trackName: track.context.trackName, groupId, objectId: 0 }, reason)\n return\n }\n for (const pending of [...group.pending.values()]) {\n this.#removePending(track, group, pending)\n this.#rejectOrShadow(pending.identity, pending.release, reason)\n }\n }\n\n #removePending(track: TrackState, group: GroupState, pending: PendingObject): void {\n if (group.pending.get(pending.identity.objectId) === pending) {\n group.pending.delete(pending.identity.objectId)\n }\n const index = track.quarantine.indexOf(pending)\n if (index >= 0) track.quarantine.splice(index, 1)\n track.quarantinedBytes -= pending.bytes\n this.#stats.quarantinedBytes -= pending.bytes\n }\n\n #quarantine(track: TrackState, group: GroupState, pending: PendingObject): boolean {\n if (group.pending.has(pending.identity.objectId)) return false\n group.pending.set(pending.identity.objectId, pending)\n track.quarantine.push(pending)\n track.quarantinedBytes += pending.bytes\n this.#stats.quarantinedBytes += pending.bytes\n this.#enforceCap(track)\n return true\n }\n\n #enforceCap(track: TrackState): void {\n while (track.quarantinedBytes > track.capBytes && track.quarantine.length > 0) {\n const pending = track.quarantine.shift()!\n const group = track.groups.get(BigInt(pending.identity.groupId))\n if (group) group.pending.delete(pending.identity.objectId)\n track.quarantinedBytes -= pending.bytes\n this.#stats.quarantinedBytes -= pending.bytes\n pending.release()\n // Quarantine budget ran out while the object was still waiting on a\n // manifest. The manifest was absent when we gave up; the verifier did not\n // fault. Same reason in shadow and enforce so the dashboard reads one\n // taxonomy across modes (BLO-30007).\n this.#failure(pending.identity, 'manifestAbsent')\n console.warn(`[ManifestVerifier] quarantine cap eviction fail-open track=${pending.identity.trackName} group=${pending.identity.groupId} object=${pending.identity.objectId}`)\n }\n }\n\n #failOpenTrack(track: TrackState, reason: 'verifierError'): void {\n for (const pending of [...track.quarantine]) {\n const group = track.groups.get(BigInt(pending.identity.groupId))\n if (group) this.#removePending(track, group, pending)\n pending.release()\n this.#failure(pending.identity, reason)\n }\n }\n\n #failOpenGroup(track: TrackState, groupId: bigint, group: GroupState): void {\n const pending = [...group.pending.values()]\n if (pending.length === 0) {\n this.#failure({ trackName: track.context.trackName, groupId, objectId: 0 }, 'verifierError')\n return\n }\n for (const object of pending) {\n this.#removePending(track, group, object)\n object.release()\n this.#failure(object.identity, 'verifierError')\n }\n }\n\n #releaseAllQuarantine(countFailure: boolean): void {\n for (const track of this.#tracks.values()) {\n for (const pending of [...track.quarantine]) {\n const group = track.groups.get(BigInt(pending.identity.groupId))\n if (group) this.#removePending(track, group, pending)\n pending.release()\n if (countFailure) this.#failure(pending.identity, 'verifierError')\n }\n }\n }\n\n #failure(identity: ManifestObjectIdentity, reason: ManifestFailureReason): void {\n this.#stats.failures[reason]++\n this.#onFailure?.({\n trackName: identity.trackName,\n ...(identity.bindingId === undefined ? {} : { bindingId: identity.bindingId }),\n groupId: identity.groupId,\n objectId: identity.objectId,\n reason,\n })\n }\n}\n", "/**\n * `multicast.auth` v2 \u2014 catalog representation for per-track source-auth\n * scopes and manifest tracks (BLO-16700 decision).\n *\n * Reconciles two previously-accepted, mutually incompatible contracts:\n * - BLO-16481 (S0): every publisher session/track/source-symbol-format\n * needs its own fresh, unpredictable 32-byte `auth_scope`, bound into\n * the signed per-group Merkle root (see `sourceAuthSignaturePreimage`\n * in ./source-auth.ts).\n * - BLO-16485 (S3 draft): a singular `multicast.auth` block with one\n * `manifestTrack` string and no `authScope` field at all \u2014 unable to\n * describe two protected tracks (e.g. audio + video) in one session.\n *\n * `multicast.auth` v2 keeps one shared signing identity (scheme, hash,\n * sig, publicKey, keyId, previousKey, compaction, enforcement) but moves\n * `manifestTrack` into a `tracks[]` array, one entry per protected media\n * track, each carrying its own `manifestTrack` name, `authScope`, and\n * `sourceSymbolFormat`. This is additive over the S3 draft shape (every\n * top-level field the draft specified still exists at the top level) \u2014\n * only `manifestTrack` moves from top-level into each track entry.\n *\n * `manifestTrack` is carried as an opaque string field, deliberately NOT\n * run through `parseTrackRole`/`VALID_ROLE_SUFFIXES` in ./carp-catalog.ts.\n * `carp-catalog.ts` only recognises `base`/`delta`/`repair` role suffixes\n * and throws on anything else (including a hypothetical `manifest` role);\n * resolving BLO-16485's \"manifest-track name collision\" MANDATORY item by\n * adding a role would force every catalog consumer to learn a fourth role\n * and would break `validateSwitchingSet`'s base/delta/repair completeness\n * check. Carrying it as a typed field here avoids both.\n */\n\nexport type MulticastAuthScheme = \"bc-provenance\";\nexport type MulticastAuthHash = \"blake3\";\nexport type MulticastAuthSig = \"ed25519\";\nexport type MulticastAuthCompaction = \"merkle\" | \"none\";\nexport type MulticastAuthEnforcement = \"shadow\" | \"enforce\";\nexport type MulticastAuthMode = \"off\" | MulticastAuthEnforcement;\n\nconst RAW_ED25519_KEY_LENGTH = 32;\nconst SOURCE_AUTH_SCOPE_LENGTH = 32;\n\nconst BASE64URL_ALPHABET =\n\t\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n\n/** Encode raw bytes as unpadded base64url \u2014 the one accepted encoding for\n * `authScope`/`publicKey`/`previousKey` (BLO-16483's operator quickstart). */\nexport function encodeBase64Url(bytes: Uint8Array): string {\n\tlet output = \"\";\n\tfor (let i = 0; i < bytes.length; i += 3) {\n\t\tconst b0 = bytes[i]!;\n\t\tconst b1 = bytes[i + 1];\n\t\tconst b2 = bytes[i + 2];\n\t\toutput += BASE64URL_ALPHABET[b0 >> 2];\n\t\toutput += BASE64URL_ALPHABET[((b0 & 0x03) << 4) | (b1 === undefined ? 0 : b1 >> 4)];\n\t\tif (b1 === undefined) break;\n\t\toutput += BASE64URL_ALPHABET[((b1 & 0x0f) << 2) | (b2 === undefined ? 0 : b2 >> 6)];\n\t\tif (b2 === undefined) break;\n\t\toutput += BASE64URL_ALPHABET[b2 & 0x3f];\n\t}\n\treturn output;\n}\n\nconst BASE64URL_DECODE_TABLE = (() => {\n\tconst table = new Int8Array(128).fill(-1);\n\tfor (let i = 0; i < BASE64URL_ALPHABET.length; i++) {\n\t\ttable[BASE64URL_ALPHABET.charCodeAt(i)] = i;\n\t}\n\treturn table;\n})();\n\n/** Decode unpadded base64url text to raw bytes. Throws on any padding\n * (`=`), standard-alphabet (`+`/`/`), or otherwise invalid character. */\nexport function decodeBase64Url(text: string): Uint8Array {\n\tif (text.length % 4 === 1) {\n\t\tthrow new Error(`[multicast-auth-catalog] invalid unpadded base64url length for \"${text}\"`);\n\t}\n\tconst bytes: number[] = [];\n\tlet buffer = 0;\n\tlet bits = 0;\n\tfor (let i = 0; i < text.length; i++) {\n\t\tconst code = text.charCodeAt(i);\n\t\tconst value = code < 128 ? BASE64URL_DECODE_TABLE[code] : -1;\n\t\tif (value === undefined || value < 0) {\n\t\t\tthrow new Error(`[multicast-auth-catalog] invalid base64url character in \"${text}\"`);\n\t\t}\n\t\tbuffer = (buffer << 6) | value;\n\t\tbits += 6;\n\t\tif (bits >= 8) {\n\t\t\tbits -= 8;\n\t\t\tbytes.push((buffer >> bits) & 0xff);\n\t\t}\n\t}\n\tconst decoded = Uint8Array.from(bytes);\n\tif (encodeBase64Url(decoded) !== text) {\n\t\tthrow new Error(`[multicast-auth-catalog] non-canonical base64url encoding \"${text}\"`);\n\t}\n\treturn decoded;\n}\n\n/** Decode + length-validate an `authScope` field. Throws unless it decodes\n * to exactly `SOURCE_AUTH_SCOPE_LENGTH` (32) raw bytes. */\nexport function decodeAuthScope(authScope: string): Uint8Array {\n\tconst bytes = decodeBase64Url(authScope);\n\tif (bytes.byteLength !== SOURCE_AUTH_SCOPE_LENGTH) {\n\t\tthrow new Error(\n\t\t\t`[multicast-auth-catalog] authScope must decode to ${SOURCE_AUTH_SCOPE_LENGTH} raw bytes, got ${bytes.byteLength}`,\n\t\t);\n\t}\n\treturn bytes;\n}\n\n/** Decode a catalog key in the only accepted representation: exactly 32 raw\n * ed25519 bytes encoded as canonical, unpadded base64url. */\nexport function decodeEd25519PublicKey(publicKey: string): Uint8Array {\n\tconst bytes = decodeBase64Url(publicKey);\n\tif (bytes.byteLength !== RAW_ED25519_KEY_LENGTH) {\n\t\tthrow new Error(\n\t\t\t`[multicast-auth-catalog] public key must decode to ${RAW_ED25519_KEY_LENGTH} raw bytes, got ${bytes.byteLength}`,\n\t\t);\n\t}\n\treturn bytes;\n}\n\n/**\n * One protected media track's manifest + scope binding.\n *\n * - `mediaTrack`: the actual media track name (e.g. `\"video/base\"`).\n * - `manifestTrack`: the sibling track carrying this track's signed\n * manifest objects (see ./source-auth.ts `SourceAuthObjectEntry`/\n * `SourceAuthGroupClose`). Opaque string \u2014 not role-parsed.\n * - `authScope`: this track's unique 32-byte scope, raw bytes as unpadded\n * base64url. BLO-16481 requires a scope fresh per (publisher session,\n * track, source-symbol format) \u2014 a track publishing under two source-\n * symbol formats in the same session MUST appear as two entries here,\n * each with its own scope.\n * - `sourceSymbolFormat`: names the deployed source-symbol profile this\n * track's authenticated bytes are derived from (e.g.\n * `\"full-mmtp-packet\"` or `\"fec-padded-recovery\"`, the two formats\n * BLO-16481's S0 fixture covers).\n */\nexport interface MulticastAuthTrackConfig {\n\tmediaTrack: string;\n\tmanifestTrack: string;\n\tauthScope: string;\n\tsourceSymbolFormat: string;\n}\n\n/**\n * `multicast.auth` v2 \u2014 supersedes the BLO-16485 draft's singular\n * `manifestTrack`/no-`authScope` shape (BLO-16700 decision).\n */\nexport interface MulticastAuthConfig {\n\tscheme: MulticastAuthScheme;\n\thash: MulticastAuthHash;\n\tsig: MulticastAuthSig;\n\t/** Raw 32-byte ed25519 public key, unpadded base64url. */\n\tpublicKey: string;\n\tkeyId: string;\n\t/** Raw 32-byte ed25519 public key, unpadded base64url. Accepted\n\t * alongside `publicKey` during a key-rotation overlap window. */\n\tpreviousKey?: string;\n\tcompaction: MulticastAuthCompaction;\n\t/** Player-config-wins default; catalog value only selects the default\n\t * when the player hasn't pinned one (S3 enforcement precedence). */\n\tenforcement?: MulticastAuthEnforcement;\n\ttracks: MulticastAuthTrackConfig[];\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n\treturn typeof value === \"string\" && value.length > 0;\n}\n\nfunction isValidAuthScopeField(value: unknown): value is string {\n\tif (!isNonEmptyString(value)) return false;\n\ttry {\n\t\tdecodeAuthScope(value);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction isValidPublicKeyField(value: unknown): value is string {\n\tif (!isNonEmptyString(value)) return false;\n\ttry {\n\t\tdecodeEd25519PublicKey(value);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction hasOnlyKeys(object: Record<string, unknown>, allowed: readonly string[]): boolean {\n\tconst allowedKeys = new Set(allowed);\n\treturn Object.keys(object).every((key) => allowedKeys.has(key));\n}\n\nexport function isMulticastAuthTrackConfig(obj: unknown): obj is MulticastAuthTrackConfig {\n\tif (typeof obj !== \"object\" || obj === null) return false;\n\tconst o = obj as Record<string, unknown>;\n\treturn (\n\t\thasOnlyKeys(o, [\"mediaTrack\", \"manifestTrack\", \"authScope\", \"sourceSymbolFormat\"]) &&\n\t\tisNonEmptyString(o[\"mediaTrack\"]) &&\n\t\tisNonEmptyString(o[\"manifestTrack\"]) &&\n\t\to[\"mediaTrack\"] !== o[\"manifestTrack\"] &&\n\t\tisValidAuthScopeField(o[\"authScope\"]) &&\n\t\tisNonEmptyString(o[\"sourceSymbolFormat\"])\n\t);\n}\n\nconst VALID_COMPACTION = new Set<string>([\"merkle\", \"none\"]);\nconst VALID_ENFORCEMENT = new Set<string>([\"shadow\", \"enforce\"]);\n\n/** Semantic uniqueness rule shared by runtime parsing and the published\n * catalog schema's `uniqueMulticastAuthTrackBindings` keyword. */\nexport function hasUniqueMulticastAuthTrackBindings(tracks: readonly unknown[]): boolean {\n\tconst bindings = tracks.flatMap((track) => {\n\t\tif (typeof track !== \"object\" || track === null) return [];\n\t\tconst value = track as Record<string, unknown>;\n\t\tif (typeof value[\"mediaTrack\"] !== \"string\" || typeof value[\"sourceSymbolFormat\"] !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\treturn [JSON.stringify([value[\"mediaTrack\"], value[\"sourceSymbolFormat\"]])];\n\t});\n\treturn new Set(bindings).size === bindings.length;\n}\n\nexport function isMulticastAuthConfig(obj: unknown): obj is MulticastAuthConfig {\n\tif (typeof obj !== \"object\" || obj === null) return false;\n\tconst o = obj as Record<string, unknown>;\n\n\tif (o[\"scheme\"] !== \"bc-provenance\") return false;\n\tif (o[\"hash\"] !== \"blake3\") return false;\n\tif (o[\"sig\"] !== \"ed25519\") return false;\n\tif (!hasOnlyKeys(o, [\"scheme\", \"hash\", \"sig\", \"publicKey\", \"keyId\", \"previousKey\", \"compaction\", \"enforcement\", \"tracks\"])) return false;\n\tif (!isValidPublicKeyField(o[\"publicKey\"])) return false;\n\tif (!isNonEmptyString(o[\"keyId\"])) return false;\n\tif (o[\"previousKey\"] !== undefined && !isValidPublicKeyField(o[\"previousKey\"])) return false;\n\tif (o[\"previousKey\"] === o[\"publicKey\"]) return false;\n\tif (typeof o[\"compaction\"] !== \"string\" || !VALID_COMPACTION.has(o[\"compaction\"])) return false;\n\tif (o[\"enforcement\"] !== undefined) {\n\t\tif (typeof o[\"enforcement\"] !== \"string\" || !VALID_ENFORCEMENT.has(o[\"enforcement\"])) return false;\n\t}\n\n\tif (!Array.isArray(o[\"tracks\"]) || o[\"tracks\"].length === 0) return false;\n\tconst tracks = o[\"tracks\"] as unknown[];\n\tif (!tracks.every((t) => isMulticastAuthTrackConfig(t))) return false;\n\tconst typedTracks = tracks as MulticastAuthTrackConfig[];\n\n\t// BLO-16481: a fresh scope per track \u2014 catalog-declared scopes must be\n\t// pairwise distinct within one auth block.\n\tconst scopes = typedTracks.map((t) => t.authScope);\n\tif (new Set(scopes).size !== scopes.length) return false;\n\tif (!hasUniqueMulticastAuthTrackBindings(typedTracks)) return false;\n\n\t// Each entry must point at its own manifest track.\n\tconst manifestTracks = typedTracks.map((t) => t.manifestTrack);\n\tif (new Set(manifestTracks).size !== manifestTracks.length) return false;\n\n\treturn true;\n}\n\nexport interface ResolvedMulticastAuthConfig {\n\tkeyId: string;\n\t/** Current key first, followed by the overlap key when advertised. */\n\tacceptedPublicKeys: Uint8Array[];\n\tmode: MulticastAuthMode;\n\tcompaction: MulticastAuthCompaction;\n\ttracks: Array<Omit<MulticastAuthTrackConfig, \"authScope\"> & { authScope: Uint8Array }>;\n}\n\n/** Player configuration is authoritative, including an explicit `off`.\n * Catalog enforcement is only a default; an auth block without it defaults\n * to shadow, while a catalog without auth defaults to off. */\nexport function resolveMulticastAuthMode(\n\tplayerMode: MulticastAuthMode | undefined,\n\tauth: MulticastAuthConfig | undefined,\n): MulticastAuthMode {\n\tif (playerMode !== undefined) return playerMode;\n\tif (auth === undefined) return \"off\";\n\treturn auth.enforcement ?? \"shadow\";\n}\n\n/** Parse and resolve the catalog auth block into verifier-ready raw keys and\n * scopes. Invalid blocks and dangling media/manifest track references fail\n * closed instead of silently falling back to unauthenticated playback. */\nexport function resolveMulticastAuthCatalog(\n\tcatalog: unknown,\n\tplayerMode?: MulticastAuthMode,\n): ResolvedMulticastAuthConfig | undefined {\n\tif (typeof catalog !== \"object\" || catalog === null || Array.isArray(catalog)) {\n\t\tthrow new Error(\"[multicast-auth-catalog] catalog must be an object\");\n\t}\n\tconst root = catalog as Record<string, unknown>;\n\tconst rawAuth = root[\"multicast.auth\"];\n\tif (rawAuth === undefined) {\n\t\tif (playerMode === \"enforce\") {\n\t\t\tthrow new Error(\"[multicast-auth-catalog] player enforce mode requires multicast.auth\");\n\t\t}\n\t\treturn undefined;\n\t}\n\tif (!isMulticastAuthConfig(rawAuth)) {\n\t\tthrow new Error(\"[multicast-auth-catalog] invalid multicast.auth v2 block\");\n\t}\n\n\tconst rawTracks = root[\"tracks\"];\n\tif (!Array.isArray(rawTracks)) {\n\t\tthrow new Error(\"[multicast-auth-catalog] catalog tracks must be an array\");\n\t}\n\tconst catalogTrackNames = new Set(\n\t\trawTracks.flatMap((track) =>\n\t\t\ttypeof track === \"object\" && track !== null &&\n\t\t\ttypeof (track as Record<string, unknown>)[\"name\"] === \"string\"\n\t\t\t\t? [(track as Record<string, unknown>)[\"name\"] as string]\n\t\t\t\t: []\n\t\t),\n\t);\n\tfor (const track of rawAuth.tracks) {\n\t\tif (!catalogTrackNames.has(track.mediaTrack)) {\n\t\t\tthrow new Error(`[multicast-auth-catalog] unknown mediaTrack \"${track.mediaTrack}\"`);\n\t\t}\n\t\tif (!catalogTrackNames.has(track.manifestTrack)) {\n\t\t\tthrow new Error(`[multicast-auth-catalog] unknown manifestTrack \"${track.manifestTrack}\"`);\n\t\t}\n\t}\n\n\treturn {\n\t\tkeyId: rawAuth.keyId,\n\t\tacceptedPublicKeys: [\n\t\t\tdecodeEd25519PublicKey(rawAuth.publicKey),\n\t\t\t...(rawAuth.previousKey === undefined ? [] : [decodeEd25519PublicKey(rawAuth.previousKey)]),\n\t\t],\n\t\tmode: resolveMulticastAuthMode(playerMode, rawAuth),\n\t\tcompaction: rawAuth.compaction,\n\t\ttracks: rawAuth.tracks.map((track) => ({\n\t\t\t...track,\n\t\t\tauthScope: decodeAuthScope(track.authScope),\n\t\t})),\n\t};\n}\n", "import {\n ManifestVerifier,\n manifestBindingId,\n type ManifestAuthConfig,\n type ManifestTrackContext,\n type SignatureVerifier,\n} from '@blockcast/mmt-manifest-verify'\nimport {\n resolveMulticastAuthCatalog,\n type MulticastAuthMode,\n type ResolvedMulticastAuthConfig,\n} from './multicast-auth-catalog.js'\n\nexport interface ManifestAuthBinding {\n bindingId: string\n mediaTrack: string\n manifestTrack: string\n sourceSymbolFormat: string\n}\n\nexport interface ManifestAuthPlan {\n verifier: ManifestVerifier\n mode: MulticastAuthMode\n bindings: readonly ManifestAuthBinding[]\n manifestTracks: readonly string[]\n bindingIdFor(mediaTrack: string, sourceSymbolFormat: string): string | undefined\n ingestManifestPayload(manifestTrack: string, payload: Uint8Array): void\n dispose(): void\n}\n\ntype ContextFields = Omit<\n ManifestTrackContext,\n 'bindingId' | 'trackName' | 'sourceSymbolFormat' | 'authScope' | 'publicKey' | 'acceptedPublicKeys'\n>\n\n/** Build the one canonical verifier plan shared by browser players. Transport\n * implementations subscribe the exact returned manifestTracks and feed each\n * bare source-auth frame to ingestManifestPayload without name inference. */\nexport function createManifestAuthPlan(\n catalog: unknown,\n options: {\n playerMode?: MulticastAuthMode\n onMissingManifest?: ManifestAuthConfig['onMissingManifest']\n verifySignature: SignatureVerifier\n contextFor(\n binding: ResolvedMulticastAuthConfig['tracks'][number],\n resolved: ResolvedMulticastAuthConfig,\n ): ContextFields\n onFailure?: ConstructorParameters<typeof ManifestVerifier>[0]['onFailure']\n },\n): ManifestAuthPlan | undefined {\n const resolved = resolveMulticastAuthCatalog(catalog, options.playerMode)\n if (!resolved || resolved.mode === 'off') return undefined\n\n const verifier = new ManifestVerifier({\n manifestAuth: {\n mode: resolved.mode,\n onMissingManifest: options.onMissingManifest ??\n (resolved.mode === 'enforce' ? 'stall' : 'fallback-shadow'),\n },\n verifySignature: options.verifySignature,\n ...(options.onFailure === undefined ? {} : { onFailure: options.onFailure }),\n })\n const byManifestTrack = new Map<string, ManifestAuthBinding>()\n const bindings = resolved.tracks.map((binding): ManifestAuthBinding => {\n const bindingId = manifestBindingId(binding.mediaTrack, binding.sourceSymbolFormat)\n const planned = {\n bindingId,\n mediaTrack: binding.mediaTrack,\n manifestTrack: binding.manifestTrack,\n sourceSymbolFormat: binding.sourceSymbolFormat,\n }\n verifier.registerTrack({\n ...options.contextFor(binding, resolved),\n bindingId,\n trackName: binding.mediaTrack,\n sourceSymbolFormat: binding.sourceSymbolFormat,\n authScope: binding.authScope,\n publicKey: resolved.acceptedPublicKeys[0]!,\n acceptedPublicKeys: resolved.acceptedPublicKeys,\n })\n byManifestTrack.set(binding.manifestTrack, planned)\n return planned\n })\n let disposed = false\n\n return {\n verifier,\n mode: resolved.mode,\n bindings,\n manifestTracks: [...byManifestTrack.keys()],\n bindingIdFor(mediaTrack, sourceSymbolFormat) {\n const bindingId = manifestBindingId(mediaTrack, sourceSymbolFormat)\n return bindings.some((binding) => binding.bindingId === bindingId) ? bindingId : undefined\n },\n ingestManifestPayload(manifestTrack, payload) {\n const binding = byManifestTrack.get(manifestTrack)\n if (!binding) throw new Error(`unknown manifest subscription track ${manifestTrack}`)\n verifier.ingestManifestFrame(binding.bindingId, payload)\n },\n dispose() {\n if (disposed) return\n disposed = true\n verifier.dispose()\n },\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["SOURCE_AUTH_SCOPE_LENGTH"]
7
+ }