mattebox 0.1.0

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 (471) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +106 -0
  3. package/dist/cdn/mattebox.dash-drm.min.js +2 -0
  4. package/dist/cdn/mattebox.dash.min.js +2 -0
  5. package/dist/cdn/mattebox.dual-drm.min.js +2 -0
  6. package/dist/cdn/mattebox.dual-ts-drm.min.js +3 -0
  7. package/dist/cdn/mattebox.dual-ts.min.js +3 -0
  8. package/dist/cdn/mattebox.dual.min.js +2 -0
  9. package/dist/cdn/mattebox.hls-drm.min.js +2 -0
  10. package/dist/cdn/mattebox.hls-ts-drm.min.js +3 -0
  11. package/dist/cdn/mattebox.hls-ts.min.js +3 -0
  12. package/dist/cdn/mattebox.hls.min.js +2 -0
  13. package/dist/cdn/mattebox.kernel.min.js +1 -0
  14. package/dist/cdn/mattebox.min.js +6 -0
  15. package/dist/cdn/transmux.worker.js +1 -0
  16. package/dist/containers/adts.d.ts +33 -0
  17. package/dist/containers/adts.d.ts.map +1 -0
  18. package/dist/containers/adts.js +66 -0
  19. package/dist/containers/adts.js.map +1 -0
  20. package/dist/containers/captions.d.ts +27 -0
  21. package/dist/containers/captions.d.ts.map +1 -0
  22. package/dist/containers/captions.js +36 -0
  23. package/dist/containers/captions.js.map +1 -0
  24. package/dist/containers/codec-probe/index.d.ts +35 -0
  25. package/dist/containers/codec-probe/index.d.ts.map +1 -0
  26. package/dist/containers/codec-probe/index.js +222 -0
  27. package/dist/containers/codec-probe/index.js.map +1 -0
  28. package/dist/containers/fmp4/writer.d.ts +62 -0
  29. package/dist/containers/fmp4/writer.d.ts.map +1 -0
  30. package/dist/containers/fmp4/writer.js +201 -0
  31. package/dist/containers/fmp4/writer.js.map +1 -0
  32. package/dist/containers/id3.d.ts +25 -0
  33. package/dist/containers/id3.d.ts.map +1 -0
  34. package/dist/containers/id3.js +75 -0
  35. package/dist/containers/id3.js.map +1 -0
  36. package/dist/containers/mp4-box/index.d.ts +79 -0
  37. package/dist/containers/mp4-box/index.d.ts.map +1 -0
  38. package/dist/containers/mp4-box/index.js +231 -0
  39. package/dist/containers/mp4-box/index.js.map +1 -0
  40. package/dist/containers/packed-audio/index.d.ts +7 -0
  41. package/dist/containers/packed-audio/index.d.ts.map +1 -0
  42. package/dist/containers/packed-audio/index.js +63 -0
  43. package/dist/containers/packed-audio/index.js.map +1 -0
  44. package/dist/containers/sei.d.ts +26 -0
  45. package/dist/containers/sei.d.ts.map +1 -0
  46. package/dist/containers/sei.js +100 -0
  47. package/dist/containers/sei.js.map +1 -0
  48. package/dist/containers/ts-transmux/demux.d.ts +49 -0
  49. package/dist/containers/ts-transmux/demux.d.ts.map +1 -0
  50. package/dist/containers/ts-transmux/demux.js +222 -0
  51. package/dist/containers/ts-transmux/demux.js.map +1 -0
  52. package/dist/containers/ts-transmux/h264.d.ts +48 -0
  53. package/dist/containers/ts-transmux/h264.d.ts.map +1 -0
  54. package/dist/containers/ts-transmux/h264.js +211 -0
  55. package/dist/containers/ts-transmux/h264.js.map +1 -0
  56. package/dist/containers/ts-transmux/index.d.ts +17 -0
  57. package/dist/containers/ts-transmux/index.d.ts.map +1 -0
  58. package/dist/containers/ts-transmux/index.js +34 -0
  59. package/dist/containers/ts-transmux/index.js.map +1 -0
  60. package/dist/containers/ts-transmux/runner.d.ts +23 -0
  61. package/dist/containers/ts-transmux/runner.d.ts.map +1 -0
  62. package/dist/containers/ts-transmux/runner.js +99 -0
  63. package/dist/containers/ts-transmux/runner.js.map +1 -0
  64. package/dist/containers/ts-transmux/transmux.d.ts +24 -0
  65. package/dist/containers/ts-transmux/transmux.d.ts.map +1 -0
  66. package/dist/containers/ts-transmux/transmux.js +212 -0
  67. package/dist/containers/ts-transmux/transmux.js.map +1 -0
  68. package/dist/containers/ts-transmux/transmux.worker.d.ts +2 -0
  69. package/dist/containers/ts-transmux/transmux.worker.d.ts.map +1 -0
  70. package/dist/containers/ts-transmux/transmux.worker.js +19 -0
  71. package/dist/containers/ts-transmux/transmux.worker.js.map +1 -0
  72. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/asyncToGenerator.js +27 -0
  73. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/defineProperty.js +12 -0
  74. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectSpread2.js +25 -0
  75. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectWithoutProperties.js +13 -0
  76. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectWithoutPropertiesLoose.js +12 -0
  77. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/toPrimitive.js +14 -0
  78. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/toPropertyKey.js +9 -0
  79. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/typeof.js +11 -0
  80. package/dist/es2015/containers/adts.js +77 -0
  81. package/dist/es2015/containers/captions.js +36 -0
  82. package/dist/es2015/containers/codec-probe/index.js +220 -0
  83. package/dist/es2015/containers/fmp4/writer.js +165 -0
  84. package/dist/es2015/containers/id3.js +72 -0
  85. package/dist/es2015/containers/mp4-box/index.js +209 -0
  86. package/dist/es2015/containers/packed-audio/index.js +67 -0
  87. package/dist/es2015/containers/sei.js +79 -0
  88. package/dist/es2015/containers/ts-transmux/demux.js +211 -0
  89. package/dist/es2015/containers/ts-transmux/h264.js +204 -0
  90. package/dist/es2015/containers/ts-transmux/index.js +37 -0
  91. package/dist/es2015/containers/ts-transmux/runner.js +95 -0
  92. package/dist/es2015/containers/ts-transmux/transmux.js +210 -0
  93. package/dist/es2015/containers/ts-transmux/transmux.worker.js +26 -0
  94. package/dist/es2015/index.js +356 -0
  95. package/dist/es2015/kernel/append-queue.js +148 -0
  96. package/dist/es2015/kernel/bus.js +134 -0
  97. package/dist/es2015/kernel/context.js +92 -0
  98. package/dist/es2015/kernel/effects.js +62 -0
  99. package/dist/es2015/kernel/evictor.js +67 -0
  100. package/dist/es2015/kernel/lifecycle.js +122 -0
  101. package/dist/es2015/kernel/loader.js +108 -0
  102. package/dist/es2015/kernel/mime.js +20 -0
  103. package/dist/es2015/kernel/mse.js +426 -0
  104. package/dist/es2015/kernel/reducer.js +1051 -0
  105. package/dist/es2015/kernel/rendition-select.js +263 -0
  106. package/dist/es2015/kernel/scheduler.js +82 -0
  107. package/dist/es2015/kernel/sinks/metadata-sink.js +7 -0
  108. package/dist/es2015/kernel/sinks/mse-sink.js +31 -0
  109. package/dist/es2015/kernel/sinks/text-track-sink.js +167 -0
  110. package/dist/es2015/kernel/timeline.js +127 -0
  111. package/dist/es2015/kernel/trace.js +134 -0
  112. package/dist/es2015/kernel/track-registry.js +47 -0
  113. package/dist/es2015/kernel/transport.js +242 -0
  114. package/dist/es2015/kernel/watchdog.js +38 -0
  115. package/dist/es2015/presets/dash/index.js +9 -0
  116. package/dist/es2015/presets/dash-drm/index.js +13 -0
  117. package/dist/es2015/presets/define.js +45 -0
  118. package/dist/es2015/presets/dual/index.js +14 -0
  119. package/dist/es2015/presets/dual-drm/index.js +14 -0
  120. package/dist/es2015/presets/dual-ts/index.js +14 -0
  121. package/dist/es2015/presets/dual-ts-drm/index.js +15 -0
  122. package/dist/es2015/presets/full/index.js +28 -0
  123. package/dist/es2015/presets/hls/index.js +9 -0
  124. package/dist/es2015/presets/hls-drm/index.js +13 -0
  125. package/dist/es2015/presets/hls-ts/index.js +13 -0
  126. package/dist/es2015/presets/hls-ts-drm/index.js +14 -0
  127. package/dist/es2015/presets/kernel/index.js +10 -0
  128. package/dist/es2015/presets/storage.js +24 -0
  129. package/dist/es2015/presets/tiers.js +93 -0
  130. package/dist/es2015/protocols/dash-cmaf/index.js +161 -0
  131. package/dist/es2015/protocols/dash-cmaf/parse.js +491 -0
  132. package/dist/es2015/protocols/dash-live/index.js +192 -0
  133. package/dist/es2015/protocols/hls-cmaf/index.js +168 -0
  134. package/dist/es2015/protocols/hls-cmaf/lexer.js +72 -0
  135. package/dist/es2015/protocols/hls-cmaf/parse.js +457 -0
  136. package/dist/es2015/protocols/hls-live/index.js +296 -0
  137. package/dist/es2015/protocols/live-shared.js +29 -0
  138. package/dist/es2015/stages/abr/index.js +126 -0
  139. package/dist/es2015/stages/abr-cap-size/index.js +22 -0
  140. package/dist/es2015/stages/abr-persist/index.js +52 -0
  141. package/dist/es2015/stages/aes-128/index.js +76 -0
  142. package/dist/es2015/stages/alt-audio/index.js +80 -0
  143. package/dist/es2015/stages/cmaf-timing/index.js +55 -0
  144. package/dist/es2015/stages/cmcd/index.js +70 -0
  145. package/dist/es2015/stages/codec-probe/index.js +65 -0
  146. package/dist/es2015/stages/codec-switch/index.js +48 -0
  147. package/dist/es2015/stages/content-steering/index.js +179 -0
  148. package/dist/es2015/stages/drm-shared.js +18 -0
  149. package/dist/es2015/stages/eme-cenc/index.js +46 -0
  150. package/dist/es2015/stages/eme-core/index.js +237 -0
  151. package/dist/es2015/stages/eme-fairplay/index.js +52 -0
  152. package/dist/es2015/stages/meta-id3/index.js +37 -0
  153. package/dist/es2015/stages/mp4-box/index.js +27 -0
  154. package/dist/es2015/stages/nal-scan/index.js +121 -0
  155. package/dist/es2015/stages/pdt/index.js +34 -0
  156. package/dist/es2015/stages/recovery/index.js +283 -0
  157. package/dist/es2015/stages/text-cea608/decode.js +201 -0
  158. package/dist/es2015/stages/text-cea608/index.js +71 -0
  159. package/dist/es2015/stages/text-webvtt/index.js +82 -0
  160. package/dist/es2015/stages/text-webvtt/parse.js +60 -0
  161. package/dist/es2015/stages/text-webvtt-segmented/index.js +57 -0
  162. package/dist/es2015/stages/thumbnails/index.js +73 -0
  163. package/dist/index.d.ts +32 -0
  164. package/dist/index.d.ts.map +1 -0
  165. package/dist/index.js +423 -0
  166. package/dist/index.js.map +1 -0
  167. package/dist/kernel/append-queue.d.ts +47 -0
  168. package/dist/kernel/append-queue.d.ts.map +1 -0
  169. package/dist/kernel/append-queue.js +180 -0
  170. package/dist/kernel/append-queue.js.map +1 -0
  171. package/dist/kernel/bus.d.ts +50 -0
  172. package/dist/kernel/bus.d.ts.map +1 -0
  173. package/dist/kernel/bus.js +147 -0
  174. package/dist/kernel/bus.js.map +1 -0
  175. package/dist/kernel/context.d.ts +45 -0
  176. package/dist/kernel/context.d.ts.map +1 -0
  177. package/dist/kernel/context.js +116 -0
  178. package/dist/kernel/context.js.map +1 -0
  179. package/dist/kernel/effects.d.ts +33 -0
  180. package/dist/kernel/effects.d.ts.map +1 -0
  181. package/dist/kernel/effects.js +65 -0
  182. package/dist/kernel/effects.js.map +1 -0
  183. package/dist/kernel/evictor.d.ts +46 -0
  184. package/dist/kernel/evictor.d.ts.map +1 -0
  185. package/dist/kernel/evictor.js +92 -0
  186. package/dist/kernel/evictor.js.map +1 -0
  187. package/dist/kernel/lifecycle.d.ts +41 -0
  188. package/dist/kernel/lifecycle.d.ts.map +1 -0
  189. package/dist/kernel/lifecycle.js +129 -0
  190. package/dist/kernel/lifecycle.js.map +1 -0
  191. package/dist/kernel/loader.d.ts +28 -0
  192. package/dist/kernel/loader.d.ts.map +1 -0
  193. package/dist/kernel/loader.js +126 -0
  194. package/dist/kernel/loader.js.map +1 -0
  195. package/dist/kernel/mime.d.ts +13 -0
  196. package/dist/kernel/mime.d.ts.map +1 -0
  197. package/dist/kernel/mime.js +18 -0
  198. package/dist/kernel/mime.js.map +1 -0
  199. package/dist/kernel/mse.d.ts +62 -0
  200. package/dist/kernel/mse.d.ts.map +1 -0
  201. package/dist/kernel/mse.js +490 -0
  202. package/dist/kernel/mse.js.map +1 -0
  203. package/dist/kernel/reducer.d.ts +39 -0
  204. package/dist/kernel/reducer.d.ts.map +1 -0
  205. package/dist/kernel/reducer.js +1316 -0
  206. package/dist/kernel/reducer.js.map +1 -0
  207. package/dist/kernel/rendition-select.d.ts +102 -0
  208. package/dist/kernel/rendition-select.d.ts.map +1 -0
  209. package/dist/kernel/rendition-select.js +295 -0
  210. package/dist/kernel/rendition-select.js.map +1 -0
  211. package/dist/kernel/scheduler.d.ts +57 -0
  212. package/dist/kernel/scheduler.d.ts.map +1 -0
  213. package/dist/kernel/scheduler.js +98 -0
  214. package/dist/kernel/scheduler.js.map +1 -0
  215. package/dist/kernel/sinks/metadata-sink.d.ts +7 -0
  216. package/dist/kernel/sinks/metadata-sink.d.ts.map +1 -0
  217. package/dist/kernel/sinks/metadata-sink.js +5 -0
  218. package/dist/kernel/sinks/metadata-sink.js.map +1 -0
  219. package/dist/kernel/sinks/mse-sink.d.ts +17 -0
  220. package/dist/kernel/sinks/mse-sink.d.ts.map +1 -0
  221. package/dist/kernel/sinks/mse-sink.js +20 -0
  222. package/dist/kernel/sinks/mse-sink.js.map +1 -0
  223. package/dist/kernel/sinks/text-track-sink.d.ts +45 -0
  224. package/dist/kernel/sinks/text-track-sink.d.ts.map +1 -0
  225. package/dist/kernel/sinks/text-track-sink.js +184 -0
  226. package/dist/kernel/sinks/text-track-sink.js.map +1 -0
  227. package/dist/kernel/timeline.d.ts +57 -0
  228. package/dist/kernel/timeline.d.ts.map +1 -0
  229. package/dist/kernel/timeline.js +203 -0
  230. package/dist/kernel/timeline.js.map +1 -0
  231. package/dist/kernel/trace.d.ts +42 -0
  232. package/dist/kernel/trace.d.ts.map +1 -0
  233. package/dist/kernel/trace.js +165 -0
  234. package/dist/kernel/trace.js.map +1 -0
  235. package/dist/kernel/track-registry.d.ts +22 -0
  236. package/dist/kernel/track-registry.d.ts.map +1 -0
  237. package/dist/kernel/track-registry.js +42 -0
  238. package/dist/kernel/track-registry.js.map +1 -0
  239. package/dist/kernel/transport.d.ts +90 -0
  240. package/dist/kernel/transport.d.ts.map +1 -0
  241. package/dist/kernel/transport.js +256 -0
  242. package/dist/kernel/transport.js.map +1 -0
  243. package/dist/kernel/watchdog.d.ts +35 -0
  244. package/dist/kernel/watchdog.d.ts.map +1 -0
  245. package/dist/kernel/watchdog.js +43 -0
  246. package/dist/kernel/watchdog.js.map +1 -0
  247. package/dist/presets/dash/index.d.ts +4 -0
  248. package/dist/presets/dash/index.d.ts.map +1 -0
  249. package/dist/presets/dash/index.js +8 -0
  250. package/dist/presets/dash/index.js.map +1 -0
  251. package/dist/presets/dash-drm/index.d.ts +4 -0
  252. package/dist/presets/dash-drm/index.d.ts.map +1 -0
  253. package/dist/presets/dash-drm/index.js +8 -0
  254. package/dist/presets/dash-drm/index.js.map +1 -0
  255. package/dist/presets/define.d.ts +36 -0
  256. package/dist/presets/define.d.ts.map +1 -0
  257. package/dist/presets/define.js +39 -0
  258. package/dist/presets/define.js.map +1 -0
  259. package/dist/presets/dual/index.d.ts +4 -0
  260. package/dist/presets/dual/index.d.ts.map +1 -0
  261. package/dist/presets/dual/index.js +9 -0
  262. package/dist/presets/dual/index.js.map +1 -0
  263. package/dist/presets/dual-drm/index.d.ts +4 -0
  264. package/dist/presets/dual-drm/index.d.ts.map +1 -0
  265. package/dist/presets/dual-drm/index.js +13 -0
  266. package/dist/presets/dual-drm/index.js.map +1 -0
  267. package/dist/presets/dual-ts/index.d.ts +4 -0
  268. package/dist/presets/dual-ts/index.d.ts.map +1 -0
  269. package/dist/presets/dual-ts/index.js +8 -0
  270. package/dist/presets/dual-ts/index.js.map +1 -0
  271. package/dist/presets/dual-ts-drm/index.d.ts +4 -0
  272. package/dist/presets/dual-ts-drm/index.d.ts.map +1 -0
  273. package/dist/presets/dual-ts-drm/index.js +14 -0
  274. package/dist/presets/dual-ts-drm/index.js.map +1 -0
  275. package/dist/presets/full/index.d.ts +4 -0
  276. package/dist/presets/full/index.d.ts.map +1 -0
  277. package/dist/presets/full/index.js +27 -0
  278. package/dist/presets/full/index.js.map +1 -0
  279. package/dist/presets/hls/index.d.ts +4 -0
  280. package/dist/presets/hls/index.d.ts.map +1 -0
  281. package/dist/presets/hls/index.js +8 -0
  282. package/dist/presets/hls/index.js.map +1 -0
  283. package/dist/presets/hls-drm/index.d.ts +4 -0
  284. package/dist/presets/hls-drm/index.d.ts.map +1 -0
  285. package/dist/presets/hls-drm/index.js +8 -0
  286. package/dist/presets/hls-drm/index.js.map +1 -0
  287. package/dist/presets/hls-ts/index.d.ts +4 -0
  288. package/dist/presets/hls-ts/index.d.ts.map +1 -0
  289. package/dist/presets/hls-ts/index.js +8 -0
  290. package/dist/presets/hls-ts/index.js.map +1 -0
  291. package/dist/presets/hls-ts-drm/index.d.ts +4 -0
  292. package/dist/presets/hls-ts-drm/index.d.ts.map +1 -0
  293. package/dist/presets/hls-ts-drm/index.js +13 -0
  294. package/dist/presets/hls-ts-drm/index.js.map +1 -0
  295. package/dist/presets/kernel/index.d.ts +4 -0
  296. package/dist/presets/kernel/index.d.ts.map +1 -0
  297. package/dist/presets/kernel/index.js +9 -0
  298. package/dist/presets/kernel/index.js.map +1 -0
  299. package/dist/presets/storage.d.ts +9 -0
  300. package/dist/presets/storage.d.ts.map +1 -0
  301. package/dist/presets/storage.js +24 -0
  302. package/dist/presets/storage.js.map +1 -0
  303. package/dist/presets/tiers.d.ts +22 -0
  304. package/dist/presets/tiers.d.ts.map +1 -0
  305. package/dist/presets/tiers.js +78 -0
  306. package/dist/presets/tiers.js.map +1 -0
  307. package/dist/protocols/dash-cmaf/index.d.ts +20 -0
  308. package/dist/protocols/dash-cmaf/index.d.ts.map +1 -0
  309. package/dist/protocols/dash-cmaf/index.js +176 -0
  310. package/dist/protocols/dash-cmaf/index.js.map +1 -0
  311. package/dist/protocols/dash-cmaf/parse.d.ts +24 -0
  312. package/dist/protocols/dash-cmaf/parse.d.ts.map +1 -0
  313. package/dist/protocols/dash-cmaf/parse.js +586 -0
  314. package/dist/protocols/dash-cmaf/parse.js.map +1 -0
  315. package/dist/protocols/dash-live/index.d.ts +4 -0
  316. package/dist/protocols/dash-live/index.d.ts.map +1 -0
  317. package/dist/protocols/dash-live/index.js +188 -0
  318. package/dist/protocols/dash-live/index.js.map +1 -0
  319. package/dist/protocols/hls-cmaf/index.d.ts +17 -0
  320. package/dist/protocols/hls-cmaf/index.d.ts.map +1 -0
  321. package/dist/protocols/hls-cmaf/index.js +189 -0
  322. package/dist/protocols/hls-cmaf/index.js.map +1 -0
  323. package/dist/protocols/hls-cmaf/lexer.d.ts +25 -0
  324. package/dist/protocols/hls-cmaf/lexer.d.ts.map +1 -0
  325. package/dist/protocols/hls-cmaf/lexer.js +81 -0
  326. package/dist/protocols/hls-cmaf/lexer.js.map +1 -0
  327. package/dist/protocols/hls-cmaf/parse.d.ts +57 -0
  328. package/dist/protocols/hls-cmaf/parse.d.ts.map +1 -0
  329. package/dist/protocols/hls-cmaf/parse.js +572 -0
  330. package/dist/protocols/hls-cmaf/parse.js.map +1 -0
  331. package/dist/protocols/hls-live/index.d.ts +4 -0
  332. package/dist/protocols/hls-live/index.d.ts.map +1 -0
  333. package/dist/protocols/hls-live/index.js +309 -0
  334. package/dist/protocols/hls-live/index.js.map +1 -0
  335. package/dist/protocols/live-shared.d.ts +21 -0
  336. package/dist/protocols/live-shared.d.ts.map +1 -0
  337. package/dist/protocols/live-shared.js +32 -0
  338. package/dist/protocols/live-shared.js.map +1 -0
  339. package/dist/stages/abr/index.d.ts +16 -0
  340. package/dist/stages/abr/index.d.ts.map +1 -0
  341. package/dist/stages/abr/index.js +176 -0
  342. package/dist/stages/abr/index.js.map +1 -0
  343. package/dist/stages/abr-cap-size/index.d.ts +8 -0
  344. package/dist/stages/abr-cap-size/index.d.ts.map +1 -0
  345. package/dist/stages/abr-cap-size/index.js +21 -0
  346. package/dist/stages/abr-cap-size/index.js.map +1 -0
  347. package/dist/stages/abr-persist/index.d.ts +8 -0
  348. package/dist/stages/abr-persist/index.d.ts.map +1 -0
  349. package/dist/stages/abr-persist/index.js +44 -0
  350. package/dist/stages/abr-persist/index.js.map +1 -0
  351. package/dist/stages/aes-128/index.d.ts +15 -0
  352. package/dist/stages/aes-128/index.d.ts.map +1 -0
  353. package/dist/stages/aes-128/index.js +78 -0
  354. package/dist/stages/aes-128/index.js.map +1 -0
  355. package/dist/stages/alt-audio/index.d.ts +4 -0
  356. package/dist/stages/alt-audio/index.d.ts.map +1 -0
  357. package/dist/stages/alt-audio/index.js +90 -0
  358. package/dist/stages/alt-audio/index.js.map +1 -0
  359. package/dist/stages/cmaf-timing/index.d.ts +3 -0
  360. package/dist/stages/cmaf-timing/index.d.ts.map +1 -0
  361. package/dist/stages/cmaf-timing/index.js +56 -0
  362. package/dist/stages/cmaf-timing/index.js.map +1 -0
  363. package/dist/stages/cmcd/index.d.ts +22 -0
  364. package/dist/stages/cmcd/index.d.ts.map +1 -0
  365. package/dist/stages/cmcd/index.js +92 -0
  366. package/dist/stages/cmcd/index.js.map +1 -0
  367. package/dist/stages/codec-probe/index.d.ts +9 -0
  368. package/dist/stages/codec-probe/index.d.ts.map +1 -0
  369. package/dist/stages/codec-probe/index.js +68 -0
  370. package/dist/stages/codec-probe/index.js.map +1 -0
  371. package/dist/stages/codec-switch/index.d.ts +6 -0
  372. package/dist/stages/codec-switch/index.d.ts.map +1 -0
  373. package/dist/stages/codec-switch/index.js +59 -0
  374. package/dist/stages/codec-switch/index.js.map +1 -0
  375. package/dist/stages/content-steering/index.d.ts +4 -0
  376. package/dist/stages/content-steering/index.d.ts.map +1 -0
  377. package/dist/stages/content-steering/index.js +174 -0
  378. package/dist/stages/content-steering/index.js.map +1 -0
  379. package/dist/stages/drm-shared.d.ts +46 -0
  380. package/dist/stages/drm-shared.d.ts.map +1 -0
  381. package/dist/stages/drm-shared.js +28 -0
  382. package/dist/stages/drm-shared.js.map +1 -0
  383. package/dist/stages/eme-cenc/index.d.ts +12 -0
  384. package/dist/stages/eme-cenc/index.d.ts.map +1 -0
  385. package/dist/stages/eme-cenc/index.js +53 -0
  386. package/dist/stages/eme-cenc/index.js.map +1 -0
  387. package/dist/stages/eme-core/index.d.ts +29 -0
  388. package/dist/stages/eme-core/index.d.ts.map +1 -0
  389. package/dist/stages/eme-core/index.js +244 -0
  390. package/dist/stages/eme-core/index.js.map +1 -0
  391. package/dist/stages/eme-fairplay/index.d.ts +20 -0
  392. package/dist/stages/eme-fairplay/index.d.ts.map +1 -0
  393. package/dist/stages/eme-fairplay/index.js +59 -0
  394. package/dist/stages/eme-fairplay/index.js.map +1 -0
  395. package/dist/stages/meta-id3/index.d.ts +14 -0
  396. package/dist/stages/meta-id3/index.d.ts.map +1 -0
  397. package/dist/stages/meta-id3/index.js +30 -0
  398. package/dist/stages/meta-id3/index.js.map +1 -0
  399. package/dist/stages/mp4-box/index.d.ts +3 -0
  400. package/dist/stages/mp4-box/index.d.ts.map +1 -0
  401. package/dist/stages/mp4-box/index.js +19 -0
  402. package/dist/stages/mp4-box/index.js.map +1 -0
  403. package/dist/stages/nal-scan/index.d.ts +3 -0
  404. package/dist/stages/nal-scan/index.d.ts.map +1 -0
  405. package/dist/stages/nal-scan/index.js +123 -0
  406. package/dist/stages/nal-scan/index.js.map +1 -0
  407. package/dist/stages/pdt/index.d.ts +14 -0
  408. package/dist/stages/pdt/index.d.ts.map +1 -0
  409. package/dist/stages/pdt/index.js +34 -0
  410. package/dist/stages/pdt/index.js.map +1 -0
  411. package/dist/stages/recovery/index.d.ts +16 -0
  412. package/dist/stages/recovery/index.d.ts.map +1 -0
  413. package/dist/stages/recovery/index.js +270 -0
  414. package/dist/stages/recovery/index.js.map +1 -0
  415. package/dist/stages/text-cea608/decode.d.ts +44 -0
  416. package/dist/stages/text-cea608/decode.d.ts.map +1 -0
  417. package/dist/stages/text-cea608/decode.js +225 -0
  418. package/dist/stages/text-cea608/decode.js.map +1 -0
  419. package/dist/stages/text-cea608/index.d.ts +3 -0
  420. package/dist/stages/text-cea608/index.d.ts.map +1 -0
  421. package/dist/stages/text-cea608/index.js +84 -0
  422. package/dist/stages/text-cea608/index.js.map +1 -0
  423. package/dist/stages/text-webvtt/index.d.ts +3 -0
  424. package/dist/stages/text-webvtt/index.d.ts.map +1 -0
  425. package/dist/stages/text-webvtt/index.js +82 -0
  426. package/dist/stages/text-webvtt/index.js.map +1 -0
  427. package/dist/stages/text-webvtt/parse.d.ts +19 -0
  428. package/dist/stages/text-webvtt/parse.d.ts.map +1 -0
  429. package/dist/stages/text-webvtt/parse.js +62 -0
  430. package/dist/stages/text-webvtt/parse.js.map +1 -0
  431. package/dist/stages/text-webvtt-segmented/index.d.ts +5 -0
  432. package/dist/stages/text-webvtt-segmented/index.d.ts.map +1 -0
  433. package/dist/stages/text-webvtt-segmented/index.js +63 -0
  434. package/dist/stages/text-webvtt-segmented/index.js.map +1 -0
  435. package/dist/stages/thumbnails/index.d.ts +34 -0
  436. package/dist/stages/thumbnails/index.d.ts.map +1 -0
  437. package/dist/stages/thumbnails/index.js +58 -0
  438. package/dist/stages/thumbnails/index.js.map +1 -0
  439. package/dist/types/error.d.ts +33 -0
  440. package/dist/types/error.d.ts.map +1 -0
  441. package/dist/types/error.js +7 -0
  442. package/dist/types/error.js.map +1 -0
  443. package/dist/types/facade.d.ts +104 -0
  444. package/dist/types/facade.d.ts.map +1 -0
  445. package/dist/types/facade.js +2 -0
  446. package/dist/types/facade.js.map +1 -0
  447. package/dist/types/ir.d.ts +238 -0
  448. package/dist/types/ir.d.ts.map +1 -0
  449. package/dist/types/ir.js +7 -0
  450. package/dist/types/ir.js.map +1 -0
  451. package/dist/types/kernel.d.ts +217 -0
  452. package/dist/types/kernel.d.ts.map +1 -0
  453. package/dist/types/kernel.js +2 -0
  454. package/dist/types/kernel.js.map +1 -0
  455. package/dist/types/messages.d.ts +288 -0
  456. package/dist/types/messages.d.ts.map +1 -0
  457. package/dist/types/messages.js +2 -0
  458. package/dist/types/messages.js.map +1 -0
  459. package/dist/types/quality.d.ts +108 -0
  460. package/dist/types/quality.d.ts.map +1 -0
  461. package/dist/types/quality.js +2 -0
  462. package/dist/types/quality.js.map +1 -0
  463. package/dist/types/sink.d.ts +27 -0
  464. package/dist/types/sink.d.ts.map +1 -0
  465. package/dist/types/sink.js +2 -0
  466. package/dist/types/sink.js.map +1 -0
  467. package/dist/types/stage.d.ts +139 -0
  468. package/dist/types/stage.d.ts.map +1 -0
  469. package/dist/types/stage.js +2 -0
  470. package/dist/types/stage.js.map +1 -0
  471. package/package.json +132 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stages/content-steering/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAqKlD,yBAAyB;AACzB,MAAM,CAAC,OAAO,UAAU,eAAe,IAAI,KAAK,CA2B/C"}
@@ -0,0 +1,174 @@
1
+ const MANIFEST_TOKEN = 'steering:manifest';
2
+ const RELOAD_TOKEN = 'steering:reload';
3
+ const PATHWAY_EVENT = 'steering:pathway';
4
+ /** Failures on the active pathway before failing over. */
5
+ const FAILOVER_AFTER = 2;
6
+ /** Default steering manifest TTL, in seconds. */
7
+ const DEFAULT_TTL = 300;
8
+ const INITIAL = {
9
+ serverUri: null,
10
+ priority: [],
11
+ active: null,
12
+ dead: [],
13
+ fails: 0,
14
+ fetchPending: false,
15
+ tickPending: false,
16
+ };
17
+ /** Loops a message back into the bus through a zero-delay schedule effect. */
18
+ function feed(message) {
19
+ // biome-ignore lint/suspicious/noThenProperty: `then` is the schedule effect's field name from the message taxonomy
20
+ return { kind: 'schedule', token: 'steering:loopback', delayMs: 0, then: message };
21
+ }
22
+ function pathwaysOf(kernel) {
23
+ const ids = new Set();
24
+ for (const base of Object.keys(kernel.presentation?.steering?.bases ?? {}))
25
+ ids.add(base);
26
+ for (const period of kernel.presentation?.periods ?? []) {
27
+ for (const track of period.tracks) {
28
+ for (const rendition of track.renditions) {
29
+ if (rendition.pathway !== undefined)
30
+ ids.add(rendition.pathway);
31
+ }
32
+ }
33
+ }
34
+ return [...ids];
35
+ }
36
+ /** The effects that make `active` the pathway in force. */
37
+ function applyPathway(kernel, active) {
38
+ const effects = [{ kind: 'emit', event: PATHWAY_EVENT, payload: { pathway: active } }];
39
+ // Rendition-cloned pathways: exclude every rendition on another pathway.
40
+ const excludeIds = [];
41
+ for (const period of kernel.presentation?.periods ?? []) {
42
+ for (const track of period.tracks) {
43
+ for (const rendition of track.renditions) {
44
+ if (rendition.pathway !== undefined && rendition.pathway !== active) {
45
+ excludeIds.push(rendition.id);
46
+ }
47
+ }
48
+ }
49
+ }
50
+ effects.push(excludeIds.length > 0
51
+ ? feed({ type: 'CONSTRAIN', source: 'steering', constraint: { excludeIds } })
52
+ : feed({ type: 'RELEASE_CONSTRAINT', source: 'steering' }));
53
+ return effects;
54
+ }
55
+ function choosePathway(slice, known) {
56
+ for (const id of slice.priority) {
57
+ if (!slice.dead.includes(id) && known.includes(id))
58
+ return id;
59
+ }
60
+ return known.find((id) => !slice.dead.includes(id)) ?? null;
61
+ }
62
+ const reduceSteering = (slice, msg, kernel) => {
63
+ const state = slice ?? INITIAL;
64
+ if (msg.type === 'LOAD' || msg.type === 'UNLOAD' || msg.type === 'DETACH') {
65
+ return [INITIAL, []];
66
+ }
67
+ if (msg.type === 'MANIFEST_LOADED') {
68
+ const steering = msg.presentation.steering;
69
+ if (steering === undefined)
70
+ return [state, []];
71
+ const effects = [];
72
+ let next = state;
73
+ if (state.serverUri === null) {
74
+ next = {
75
+ ...next,
76
+ serverUri: steering.serverUri,
77
+ active: steering.defaultPathway ?? null,
78
+ };
79
+ effects.push({ kind: 'fetch', token: MANIFEST_TOKEN, url: steering.serverUri });
80
+ next = { ...next, fetchPending: true };
81
+ if (next.active !== null) {
82
+ effects.push(...applyPathway(kernel, next.active));
83
+ }
84
+ }
85
+ return [next, effects];
86
+ }
87
+ if (msg.type === 'SEGMENT_LOADED' && msg.trackId === MANIFEST_TOKEN) {
88
+ let parsed;
89
+ try {
90
+ parsed = JSON.parse(new TextDecoder().decode(msg.bytes));
91
+ }
92
+ catch {
93
+ return [{ ...state, fetchPending: false }, []];
94
+ }
95
+ const priority = parsed['PATHWAY-PRIORITY'] ?? [];
96
+ // A fresh steering manifest amnesties the dead list.
97
+ let next = { ...state, priority, dead: [], fails: 0, fetchPending: false };
98
+ const effects = [];
99
+ const chosen = choosePathway(next, pathwaysOf(kernel));
100
+ if (chosen !== null && chosen !== state.active) {
101
+ next = { ...next, active: chosen };
102
+ effects.push(...applyPathway(kernel, chosen));
103
+ }
104
+ if (!next.tickPending) {
105
+ effects.push({
106
+ kind: 'schedule',
107
+ token: RELOAD_TOKEN,
108
+ delayMs: (parsed.TTL ?? DEFAULT_TTL) * 1000,
109
+ // biome-ignore lint/suspicious/noThenProperty: `then` is the schedule effect's field name from the message taxonomy
110
+ then: { type: 'TICK', token: RELOAD_TOKEN },
111
+ });
112
+ next = { ...next, tickPending: true };
113
+ }
114
+ return [next, effects];
115
+ }
116
+ if (msg.type === 'TICK' && msg.token === RELOAD_TOKEN) {
117
+ if (state.serverUri === null)
118
+ return [{ ...state, tickPending: false }, []];
119
+ return [
120
+ { ...state, tickPending: false, fetchPending: true },
121
+ [{ kind: 'fetch', token: MANIFEST_TOKEN, url: state.serverUri }],
122
+ ];
123
+ }
124
+ if (msg.type === 'SEGMENT_FAILED' && msg.renditionId !== undefined && state.active !== null) {
125
+ // Failures on the active pathway accumulate toward failover.
126
+ const fails = state.fails + 1;
127
+ if (fails < FAILOVER_AFTER)
128
+ return [{ ...state, fails }, []];
129
+ const dead = [...state.dead, state.active];
130
+ const next = { ...state, dead, fails: 0 };
131
+ const chosen = choosePathway(next, pathwaysOf(kernel));
132
+ if (chosen === null || chosen === state.active)
133
+ return [next, []];
134
+ return [
135
+ { ...next, active: chosen },
136
+ [
137
+ { kind: 'emit', event: 'steering:failover', payload: { from: state.active, to: chosen } },
138
+ ...applyPathway(kernel, chosen),
139
+ ],
140
+ ];
141
+ }
142
+ return [state, []];
143
+ };
144
+ /** The stage factory. */
145
+ export default function contentSteering() {
146
+ return {
147
+ name: 'content-steering',
148
+ provides: ['content-steering'],
149
+ requires: ['transport'],
150
+ install(ctx) {
151
+ ctx.reduce('steering', reduceSteering);
152
+ // Base-URL pathways (DASH) rewrite at the transport boundary; the
153
+ // slice announces the active pathway and this closure applies it.
154
+ let activeBase = null;
155
+ let bases = {};
156
+ ctx.on(PATHWAY_EVENT, (payload) => {
157
+ const pathway = payload.pathway;
158
+ bases = ctx.getState().presentation?.steering?.bases ?? {};
159
+ activeBase = pathway !== undefined ? (bases[pathway] ?? null) : null;
160
+ });
161
+ ctx.addRequestHook((req) => {
162
+ if (activeBase === null)
163
+ return;
164
+ for (const base of Object.values(bases)) {
165
+ if (base !== activeBase && req.url.startsWith(base)) {
166
+ req.url = activeBase + req.url.slice(base.length);
167
+ return;
168
+ }
169
+ }
170
+ });
171
+ },
172
+ };
173
+ }
174
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stages/content-steering/index.ts"],"names":[],"mappings":"AAaA,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAC3C,MAAM,YAAY,GAAG,iBAAiB,CAAC;AACvC,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAEzC,0DAA0D;AAC1D,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,iDAAiD;AACjD,MAAM,WAAW,GAAG,GAAG,CAAC;AAcxB,MAAM,OAAO,GAAkB;IAC7B,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,EAAE;IACZ,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,CAAC;IACR,YAAY,EAAE,KAAK;IACnB,WAAW,EAAE,KAAK;CACnB,CAAC;AAEF,8EAA8E;AAC9E,SAAS,IAAI,CAAC,OAAgB;IAC5B,oHAAoH;IACpH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACrF,CAAC;AAED,SAAS,UAAU,CAAC,MAA6B;IAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC;QAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1F,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,YAAY,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;QACxD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACzC,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS;oBAAE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,CAAC;AAED,2DAA2D;AAC3D,SAAS,YAAY,CAAC,MAA6B,EAAE,MAAc;IACjE,MAAM,OAAO,GAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACjG,yEAAyE;IACzE,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,YAAY,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;QACxD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACzC,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS,IAAI,SAAS,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;oBACpE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CACV,UAAU,CAAC,MAAM,GAAG,CAAC;QACnB,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC;QAC7E,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAC7D,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,KAAoB,EAAE,KAAwB;IACnE,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;AAC9D,CAAC;AAED,MAAM,cAAc,GAAgC,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;IACzE,MAAM,KAAK,GAAG,KAAK,IAAI,OAAO,CAAC;IAE/B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC1E,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;QAC3C,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC7B,IAAI,GAAG;gBACL,GAAG,IAAI;gBACP,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,MAAM,EAAE,QAAQ,CAAC,cAAc,IAAI,IAAI;aACxC,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;YAChF,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,IAAI,GAAG,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;QACpE,IAAI,MAA8E,CAAC;QACnF,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAkB,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAClD,qDAAqD;QACrD,IAAI,IAAI,GAAkB,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAC1F,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,YAAY;gBACnB,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,IAAI;gBAC3C,oHAAoH;gBACpH,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;aAC5C,CAAC,CAAC;YACH,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;QACtD,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI;YAAE,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5E,OAAO;YACL,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE;YACpD,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;SACjE,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC5F,6DAA6D;QAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK,GAAG,cAAc;YAAE,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAkB,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM;YAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClE,OAAO;YACL,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;YAC3B;gBACE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;gBACzF,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;aAChC;SACF,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACrB,CAAC,CAAC;AAEF,yBAAyB;AACzB,MAAM,CAAC,OAAO,UAAU,eAAe;IACrC,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,CAAC,kBAAkB,CAAC;QAC9B,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,OAAO,CAAC,GAAG;YACT,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,cAA8B,CAAC,CAAC;YACvD,kEAAkE;YAClE,kEAAkE;YAClE,IAAI,UAAU,GAAkB,IAAI,CAAC;YACrC,IAAI,KAAK,GAAqC,EAAE,CAAC;YACjD,GAAG,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;gBAChC,MAAM,OAAO,GAAI,OAAgC,CAAC,OAAO,CAAC;gBAC1D,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC3D,UAAU,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvE,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,EAAE;gBACzB,IAAI,UAAU,KAAK,IAAI;oBAAE,OAAO;gBAChC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBACxC,IAAI,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;wBACpD,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAClD,OAAO;oBACT,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * The DRM key-system registry both eme-cenc and eme-fairplay contribute to
3
+ * and eme-core reads. A handler is pure config plus two shaping functions,
4
+ * so a module-level registry is safe across engines: no per-engine state
5
+ * lives here. eme-core supplies ClearKey itself; the others register
6
+ * Widevine, PlayReady, and FairPlay.
7
+ *
8
+ * This mirrors live-shared.ts: a shared module is not a lateral stage
9
+ * import, which keeps the dependency-cruiser rule satisfied while the
10
+ * stages stay independently loadable.
11
+ */
12
+ /** One key system eme-core can negotiate and drive. */
13
+ export interface KeySystemHandler {
14
+ /** The EME key system string, e.g. 'com.widevine.alpha'. */
15
+ readonly keySystem: string;
16
+ /** ContentProtection systemId UUIDs (lowercase, no urn prefix) this handler serves. */
17
+ readonly systemIds: readonly string[];
18
+ /** EME init data types this handler accepts, e.g. ['cenc']. */
19
+ readonly initDataTypes: readonly string[];
20
+ /** Robustness levels to request, or empty for none. */
21
+ readonly robustness?: readonly string[];
22
+ /** Shapes the CDM's license message into the request body sent to the server. */
23
+ buildLicenseRequest(message: ArrayBuffer): ArrayBuffer | Uint8Array;
24
+ /** Extracts the raw bytes to pass to session.update from the server response. */
25
+ parseLicenseResponse(response: ArrayBuffer): ArrayBuffer | Uint8Array;
26
+ /** Optional headers for the license POST. */
27
+ licenseHeaders?: Readonly<Record<string, string>>;
28
+ /** When true, buildLicenseRequest already produced the license; apply it directly, no server. */
29
+ readonly localLicense?: boolean;
30
+ /**
31
+ * FairPlay's non-standard flow needs the certificate and a per-session
32
+ * init-data rewrite; absent for the standard CENC systems.
33
+ */
34
+ readonly fairplay?: {
35
+ certificateUrl?: string;
36
+ /** Builds the SPC init data from the raw skd content id. */
37
+ contentId(initData: ArrayBuffer): string;
38
+ };
39
+ }
40
+ /** Registers a handler, keyed by its key system; a repeat replaces. */
41
+ export declare function registerKeySystem(handler: KeySystemHandler): void;
42
+ /** Every registered handler. eme-core reads this when choosing a key system. */
43
+ export declare function keySystemHandlers(): readonly KeySystemHandler[];
44
+ /** Normalizes a ContentProtection schemeIdUri or systemId to a bare lowercase UUID. */
45
+ export declare function normalizeSystemId(raw: string | null): string | null;
46
+ //# sourceMappingURL=drm-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drm-shared.d.ts","sourceRoot":"","sources":["../../src/stages/drm-shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uFAAuF;IACvF,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,+DAA+D;IAC/D,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,uDAAuD;IACvD,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,iFAAiF;IACjF,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;IACpE,iFAAiF;IACjF,oBAAoB,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;IACtE,6CAA6C;IAC7C,cAAc,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,iGAAiG;IACjG,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,4DAA4D;QAC5D,SAAS,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAAC;KAC1C,CAAC;CACH;AAID,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAEjE;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,IAAI,SAAS,gBAAgB,EAAE,CAE/D;AAED,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAInE"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The DRM key-system registry both eme-cenc and eme-fairplay contribute to
3
+ * and eme-core reads. A handler is pure config plus two shaping functions,
4
+ * so a module-level registry is safe across engines: no per-engine state
5
+ * lives here. eme-core supplies ClearKey itself; the others register
6
+ * Widevine, PlayReady, and FairPlay.
7
+ *
8
+ * This mirrors live-shared.ts: a shared module is not a lateral stage
9
+ * import, which keeps the dependency-cruiser rule satisfied while the
10
+ * stages stay independently loadable.
11
+ */
12
+ const handlers = new Map();
13
+ /** Registers a handler, keyed by its key system; a repeat replaces. */
14
+ export function registerKeySystem(handler) {
15
+ handlers.set(handler.keySystem, handler);
16
+ }
17
+ /** Every registered handler. eme-core reads this when choosing a key system. */
18
+ export function keySystemHandlers() {
19
+ return [...handlers.values()];
20
+ }
21
+ /** Normalizes a ContentProtection schemeIdUri or systemId to a bare lowercase UUID. */
22
+ export function normalizeSystemId(raw) {
23
+ if (raw === null)
24
+ return null;
25
+ const match = /([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/i.exec(raw);
26
+ return match !== null ? match[1].toLowerCase() : null;
27
+ }
28
+ //# sourceMappingURL=drm-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drm-shared.js","sourceRoot":"","sources":["../../src/stages/drm-shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA+BH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;AAErD,uEAAuE;AACvE,MAAM,UAAU,iBAAiB,CAAC,OAAyB;IACzD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,iBAAiB,CAAC,GAAkB;IAClD,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,KAAK,GAAG,iEAAiE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1F,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAE,KAAK,CAAC,CAAC,CAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Widevine and PlayReady over Common Encryption. Neither drives EME
3
+ * itself: each registers a key-system handler that eme-core negotiates and
4
+ * runs. The system-id UUIDs the dash parser already extracts, and the
5
+ * skd/pssh the hls parser stores, select the branch; the shaping here is
6
+ * the request body and the response unwrap each server expects.
7
+ */
8
+ import type { Stage } from '../../types/stage.js';
9
+ /** Pulls the license blob out of a PlayReady SOAP response, or passes bytes through. */
10
+ export declare function unwrapPlayReadyResponse(response: ArrayBuffer): ArrayBuffer | Uint8Array;
11
+ export default function emeCenc(): Stage;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stages/eme-cenc/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAMlD,wFAAwF;AACxF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,CASvF;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,IAAI,KAAK,CAkCvC"}
@@ -0,0 +1,53 @@
1
+ import { registerKeySystem } from '../drm-shared.js';
2
+ const WIDEVINE_SYSTEM_ID = 'edef8ba9-79d6-4ace-a3c8-27dcd51d21ed';
3
+ const PLAYREADY_SYSTEM_ID = '9a04f079-9840-4286-ab92-e65be0885f95';
4
+ /** Pulls the license blob out of a PlayReady SOAP response, or passes bytes through. */
5
+ export function unwrapPlayReadyResponse(response) {
6
+ const text = new TextDecoder().decode(response);
7
+ if (!text.includes('<License>'))
8
+ return response;
9
+ const match = /<License>([\s\S]*?)<\/License>/.exec(text);
10
+ if (match === null)
11
+ return response;
12
+ const binary = atob(match[1].trim());
13
+ const bytes = new Uint8Array(binary.length);
14
+ for (let i = 0; i < binary.length; i += 1)
15
+ bytes[i] = binary.charCodeAt(i);
16
+ return bytes;
17
+ }
18
+ export default function emeCenc() {
19
+ return {
20
+ name: 'eme-cenc',
21
+ provides: ['eme-cenc'],
22
+ requires: ['eme-core'],
23
+ install() {
24
+ // Widevine: the CDM message is the license request; the server
25
+ // returns the license bytes to apply verbatim.
26
+ registerKeySystem({
27
+ keySystem: 'com.widevine.alpha',
28
+ systemIds: [WIDEVINE_SYSTEM_ID],
29
+ initDataTypes: ['cenc'],
30
+ robustness: ['SW_SECURE_CRYPTO', ''],
31
+ buildLicenseRequest: (message) => message,
32
+ parseLicenseResponse: (response) => response,
33
+ });
34
+ // PlayReady: the CDM emits an XML challenge; the server answers with
35
+ // a SOAP envelope carrying the license inside <License>.
36
+ registerKeySystem({
37
+ keySystem: 'com.microsoft.playready',
38
+ systemIds: [PLAYREADY_SYSTEM_ID],
39
+ initDataTypes: ['cenc'],
40
+ robustness: ['3000', ''],
41
+ licenseHeaders: {
42
+ 'Content-Type': 'text/xml; charset=utf-8',
43
+ SOAPAction: '"http://schemas.microsoft.com/DRM/2007/03/protocols/AcquireLicense"',
44
+ },
45
+ buildLicenseRequest: (message) => message,
46
+ parseLicenseResponse: unwrapPlayReadyResponse,
47
+ });
48
+ // Handlers are pure config in the shared registry; nothing to tear down.
49
+ return undefined;
50
+ },
51
+ };
52
+ }
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stages/eme-cenc/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,kBAAkB,GAAG,sCAAsC,CAAC;AAClE,MAAM,mBAAmB,GAAG,sCAAsC,CAAC;AAEnE,wFAAwF;AACxF,MAAM,UAAU,uBAAuB,CAAC,QAAqB;IAC3D,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,QAAQ,CAAC;IACjD,MAAM,KAAK,GAAG,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAE,KAAK,CAAC,CAAC,CAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,OAAO;IAC7B,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,CAAC,UAAU,CAAC;QACtB,QAAQ,EAAE,CAAC,UAAU,CAAC;QACtB,OAAO;YACL,+DAA+D;YAC/D,+CAA+C;YAC/C,iBAAiB,CAAC;gBAChB,SAAS,EAAE,oBAAoB;gBAC/B,SAAS,EAAE,CAAC,kBAAkB,CAAC;gBAC/B,aAAa,EAAE,CAAC,MAAM,CAAC;gBACvB,UAAU,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBACpC,mBAAmB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO;gBACzC,oBAAoB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ;aAC7C,CAAC,CAAC;YACH,qEAAqE;YACrE,yDAAyD;YACzD,iBAAiB,CAAC;gBAChB,SAAS,EAAE,yBAAyB;gBACpC,SAAS,EAAE,CAAC,mBAAmB,CAAC;gBAChC,aAAa,EAAE,CAAC,MAAM,CAAC;gBACvB,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;gBACxB,cAAc,EAAE;oBACd,cAAc,EAAE,yBAAyB;oBACzC,UAAU,EAAE,qEAAqE;iBAClF;gBACD,mBAAmB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO;gBACzC,oBAAoB,EAAE,uBAAuB;aAC9C,CAAC,CAAC;YACH,yEAAyE;YACzE,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { Stage } from '../../types/stage.js';
2
+ export interface EmeOptions {
3
+ /** License server URL, when the manifest does not carry one. */
4
+ readonly licenseUrl?: string;
5
+ /** Per-key-system license URLs, overriding `licenseUrl`. */
6
+ readonly licenseUrls?: Readonly<Record<string, string>>;
7
+ /** Rewrites the license request before it is sent (auth tokens, wrapping). */
8
+ readonly requestFilter?: (body: Uint8Array, keySystem: string) => Uint8Array;
9
+ /** For ClearKey tests: resolves a base64url key id to its base64url key. */
10
+ readonly clearKeys?: Readonly<Record<string, string>>;
11
+ /** Preference order among available key systems. */
12
+ readonly preferredKeySystems?: readonly string[];
13
+ }
14
+ export interface DrmApi {
15
+ readonly keySystem: string | null;
16
+ readonly sessions: ReadonlyArray<{
17
+ readonly keyId: string;
18
+ readonly status: string;
19
+ }>;
20
+ /** Sets or replaces the license server URL at runtime. */
21
+ setLicenseUrl(url: string): void;
22
+ }
23
+ declare module '../../index.js' {
24
+ interface MatteboxNamespaces {
25
+ drm: DrmApi;
26
+ }
27
+ }
28
+ export default function emeCore(options?: EmeOptions): Stage;
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stages/eme-core/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAIlD,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,4DAA4D;IAC5D,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,8EAA8E;IAC9E,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,KAAK,UAAU,CAAC;IAC7E,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,oDAAoD;IACpD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClD;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtF,0DAA0D;IAC1D,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,OAAO,QAAQ,gBAAgB,CAAC;IAC9B,UAAU,kBAAkB;QAC1B,GAAG,EAAE,MAAM,CAAC;KACb;CACF;AAkDD,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,OAAO,GAAE,UAAe,GAAG,KAAK,CAyM/D"}
@@ -0,0 +1,244 @@
1
+ import { keySystemHandlers, normalizeSystemId } from '../drm-shared.js';
2
+ const CLEARKEY = 'org.w3.clearkey';
3
+ function bytesToBase64Url(bytes) {
4
+ let binary = '';
5
+ for (const b of bytes)
6
+ binary += String.fromCharCode(b);
7
+ return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
8
+ }
9
+ /** A ClearKey handler: the license is a JSON the app answers from its keys. */
10
+ function clearKeyHandler(clearKeys) {
11
+ return {
12
+ keySystem: CLEARKEY,
13
+ systemIds: ['1077efec-c0b2-4d02-ace3-3c1e52e2fb4b'],
14
+ initDataTypes: ['cenc', 'keyids'],
15
+ // ClearKey needs no server: the license is produced from the keys here
16
+ // and applied directly. eme-core skips the license POST for it.
17
+ localLicense: true,
18
+ buildLicenseRequest(message) {
19
+ // The message is a JSON { kids: [base64url] }; answer with the keys.
20
+ const request = JSON.parse(new TextDecoder().decode(message));
21
+ const keys = (request.kids ?? [])
22
+ .filter((kid) => clearKeys[kid] !== undefined)
23
+ .map((kid) => ({ kty: 'oct', kid, k: clearKeys[kid] }));
24
+ return new TextEncoder().encode(JSON.stringify({ keys, type: 'temporary' }));
25
+ },
26
+ parseLicenseResponse(response) {
27
+ return response;
28
+ },
29
+ };
30
+ }
31
+ /** The MSE capability config for requestMediaKeySystemAccess. */
32
+ function accessConfig(handler) {
33
+ const robustnesses = handler.robustness && handler.robustness.length > 0 ? handler.robustness : [''];
34
+ return robustnesses.map((robustness) => ({
35
+ initDataTypes: [...handler.initDataTypes],
36
+ videoCapabilities: [
37
+ { contentType: 'video/mp4; codecs="avc1.42c01e"', robustness },
38
+ { contentType: 'video/mp4; codecs="vp09.00.10.08"', robustness },
39
+ ],
40
+ audioCapabilities: [
41
+ { contentType: 'audio/mp4; codecs="mp4a.40.2"', robustness },
42
+ { contentType: 'audio/mp4; codecs="opus"', robustness },
43
+ ],
44
+ }));
45
+ }
46
+ export default function emeCore(options = {}) {
47
+ return {
48
+ name: 'eme-core',
49
+ provides: ['eme-core'],
50
+ requires: ['mse'],
51
+ install(ctx) {
52
+ const element = ctx.element;
53
+ let mediaKeys = null;
54
+ let keySystem = null;
55
+ let handler = null;
56
+ let licenseUrl = options.licenseUrl ?? null;
57
+ // Dedup by key id: one session per key, whichever route delivered it.
58
+ const sessionsByKey = new Map();
59
+ const statuses = new Map();
60
+ const initDataSeen = new Set();
61
+ let disposed = false;
62
+ const api = {
63
+ get keySystem() {
64
+ return keySystem;
65
+ },
66
+ get sessions() {
67
+ return [...statuses.entries()].map(([keyId, status]) => ({ keyId, status }));
68
+ },
69
+ setLicenseUrl(url) {
70
+ licenseUrl = url;
71
+ },
72
+ };
73
+ ctx.registerNamespace('drm', api);
74
+ function fail(code, recoverable, cause) {
75
+ ctx.emit('error', {
76
+ category: 'drm',
77
+ code,
78
+ fatal: !recoverable,
79
+ recoverable,
80
+ ...(cause !== undefined ? { context: { message: String(cause) } } : {}),
81
+ });
82
+ }
83
+ /** All handlers eme-core can use: ClearKey plus whatever registered. */
84
+ function allHandlers() {
85
+ const registered = keySystemHandlers();
86
+ const clearKeys = options.clearKeys;
87
+ return clearKeys !== undefined
88
+ ? [clearKeyHandler(clearKeys), ...registered]
89
+ : [...registered];
90
+ }
91
+ /** Chooses and initializes a key system for the given systemIds. */
92
+ async function ensureKeys(preferredSystemIds) {
93
+ if (mediaKeys !== null)
94
+ return true;
95
+ const handlers = allHandlers();
96
+ const ordered = options.preferredKeySystems
97
+ ? [...handlers].sort((a, b) => options.preferredKeySystems.indexOf(a.keySystem) -
98
+ options.preferredKeySystems.indexOf(b.keySystem))
99
+ : handlers;
100
+ // Prefer a handler that serves one of the manifest's systemIds.
101
+ const candidates = preferredSystemIds.length > 0
102
+ ? ordered.filter((h) => h.systemIds.some((id) => preferredSystemIds.includes(id)))
103
+ : ordered;
104
+ for (const candidate of candidates.length > 0 ? candidates : ordered) {
105
+ try {
106
+ const access = await navigator.requestMediaKeySystemAccess(candidate.keySystem, accessConfig(candidate));
107
+ const keys = await access.createMediaKeys();
108
+ if (disposed)
109
+ return false;
110
+ if (candidate.fairplay?.certificateUrl !== undefined) {
111
+ const cert = await ctx
112
+ .request(candidate.fairplay.certificateUrl, {})
113
+ .then((r) => r.arrayBuffer());
114
+ await keys.setServerCertificate(cert);
115
+ }
116
+ await element.setMediaKeys(keys);
117
+ mediaKeys = keys;
118
+ keySystem = candidate.keySystem;
119
+ handler = candidate;
120
+ ctx.emit('drm:keysystem', { keySystem });
121
+ return true;
122
+ }
123
+ catch {
124
+ // Try the next candidate.
125
+ }
126
+ }
127
+ fail('DRM_KEY_SYSTEM_UNAVAILABLE', false);
128
+ return false;
129
+ }
130
+ /** Opens a session for one init data blob, deduped by key id. */
131
+ async function openSession(initDataType, initData) {
132
+ if (mediaKeys === null || handler === null || disposed)
133
+ return;
134
+ const fingerprint = `${initDataType}:${bytesToBase64Url(new Uint8Array(initData))}`;
135
+ if (initDataSeen.has(fingerprint))
136
+ return;
137
+ initDataSeen.add(fingerprint);
138
+ let session;
139
+ try {
140
+ session = mediaKeys.createSession('temporary');
141
+ }
142
+ catch (err) {
143
+ fail('DRM_SESSION_FAILED', false, err);
144
+ return;
145
+ }
146
+ session.addEventListener('message', (event) => {
147
+ void onMessage(session, event);
148
+ });
149
+ session.addEventListener('keystatuseschange', () => onKeyStatus(session));
150
+ try {
151
+ await session.generateRequest(initDataType, initData);
152
+ }
153
+ catch (err) {
154
+ fail('DRM_INIT_DATA_INVALID', false, err);
155
+ }
156
+ }
157
+ async function onMessage(session, event) {
158
+ if (handler === null)
159
+ return;
160
+ try {
161
+ let body = handler.buildLicenseRequest(event.message);
162
+ // ClearKey and other local systems need no round trip.
163
+ if (handler.localLicense === true) {
164
+ await session.update(body instanceof Uint8Array ? new Uint8Array(body) : body);
165
+ return;
166
+ }
167
+ if (options.requestFilter !== undefined) {
168
+ body = options.requestFilter(new Uint8Array(body), keySystem ?? '');
169
+ }
170
+ const url = options.licenseUrls?.[keySystem ?? ''] ?? licenseUrl;
171
+ if (url === null || url === undefined) {
172
+ fail('DRM_LICENSE_FAILED', false, 'no license url');
173
+ return;
174
+ }
175
+ const response = await ctx.request(url, {
176
+ method: 'POST',
177
+ headers: { ...handler.licenseHeaders },
178
+ body,
179
+ });
180
+ if (!response.ok) {
181
+ fail('DRM_LICENSE_FAILED', true, `status ${response.status}`);
182
+ return;
183
+ }
184
+ const raw = handler.parseLicenseResponse(await response.arrayBuffer());
185
+ await session.update(raw instanceof Uint8Array ? new Uint8Array(raw) : raw);
186
+ }
187
+ catch (err) {
188
+ fail('DRM_LICENSE_FAILED', true, err);
189
+ }
190
+ }
191
+ function onKeyStatus(session) {
192
+ session.keyStatuses.forEach((status, keyIdBuffer) => {
193
+ const keyId = bytesToBase64Url(new Uint8Array(keyIdBuffer));
194
+ statuses.set(keyId, status);
195
+ sessionsByKey.set(keyId, session);
196
+ ctx.emit('drm:keystatus', { keyId, status });
197
+ if (status === 'expired')
198
+ fail('DRM_KEY_EXPIRED', true);
199
+ else if (status === 'output-restricted')
200
+ fail('DRM_OUTPUT_RESTRICTED', false);
201
+ else if (status === 'internal-error')
202
+ fail('DRM_KEY_STATUS_ERROR', false);
203
+ });
204
+ }
205
+ // The media route: the element fires `encrypted` with init data.
206
+ const onEncrypted = (event) => {
207
+ const e = event;
208
+ if (e.initData === null)
209
+ return;
210
+ void ensureKeys([]).then((ok) => {
211
+ if (ok)
212
+ void openSession(e.initDataType, e.initData);
213
+ });
214
+ };
215
+ element.addEventListener('encrypted', onEncrypted);
216
+ // The manifest route: the reducer emits protection descriptors on
217
+ // MANIFEST_LOADED. Both routes converge on the same dedup.
218
+ const offManifest = ctx.on('presentation:protection', (payload) => {
219
+ const schemes = payload;
220
+ const systemIds = schemes
221
+ .map((s) => normalizeSystemId(s.systemId))
222
+ .filter((id) => id !== null);
223
+ void ensureKeys(systemIds).then((ok) => {
224
+ if (!ok)
225
+ return;
226
+ for (const scheme of schemes) {
227
+ if (scheme.initData !== null && scheme.initDataType !== null) {
228
+ void openSession(scheme.initDataType, scheme.initData);
229
+ }
230
+ }
231
+ });
232
+ });
233
+ return () => {
234
+ disposed = true;
235
+ element.removeEventListener('encrypted', onEncrypted);
236
+ offManifest();
237
+ for (const session of sessionsByKey.values())
238
+ void session.close().catch(() => { });
239
+ void element.setMediaKeys(null).catch(() => { });
240
+ };
241
+ },
242
+ };
243
+ }
244
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stages/eme-core/index.ts"],"names":[],"mappings":"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"}