rx-player 4.0.0-dev.2023092900 → 4.0.0-dev.2023102700

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 (576) hide show
  1. package/CHANGELOG.md +221 -12
  2. package/FILES.md +0 -4
  3. package/MAINTAINERS.md +1 -0
  4. package/README.md +0 -21
  5. package/VERSION +1 -1
  6. package/dist/_esm5.processed/compat/add_class_name.js +6 -3
  7. package/dist/_esm5.processed/compat/add_text_track.js +11 -8
  8. package/dist/_esm5.processed/compat/browser_compatibility_types.js +13 -9
  9. package/dist/_esm5.processed/compat/browser_detection.js +49 -34
  10. package/dist/_esm5.processed/compat/browser_version.js +11 -8
  11. package/dist/_esm5.processed/compat/can_patch_isobmff.js +6 -3
  12. package/dist/_esm5.processed/compat/can_rely_on_video_visibility_and_size.js +9 -6
  13. package/dist/_esm5.processed/compat/can_reuse_media_keys.js +6 -3
  14. package/dist/_esm5.processed/compat/change_source_buffer_type.js +6 -3
  15. package/dist/_esm5.processed/compat/clear_element_src.js +12 -9
  16. package/dist/_esm5.processed/compat/eme/close_session.js +45 -106
  17. package/dist/_esm5.processed/compat/eme/constants.js +6 -3
  18. package/dist/_esm5.processed/compat/eme/custom_key_system_access.js +18 -22
  19. package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +78 -102
  20. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +16 -6
  21. package/dist/_esm5.processed/compat/eme/custom_media_keys/moz_media_keys_constructor.js +18 -15
  22. package/dist/_esm5.processed/compat/eme/custom_media_keys/ms_media_keys_constructor.js +7 -5
  23. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +70 -88
  24. package/dist/_esm5.processed/compat/eme/custom_media_keys/types.js +2 -1
  25. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +91 -117
  26. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys_constructor.js +7 -7
  27. package/dist/_esm5.processed/compat/eme/eme-api-implementation.js +82 -83
  28. package/dist/_esm5.processed/compat/eme/generate_key_request.js +36 -31
  29. package/dist/_esm5.processed/compat/eme/get_init_data.js +28 -25
  30. package/dist/_esm5.processed/compat/eme/get_uuid_kid_from_keystatus_kid.js +8 -5
  31. package/dist/_esm5.processed/compat/eme/get_webkit_fairplay_initdata.js +17 -14
  32. package/dist/_esm5.processed/compat/eme/index.js +13 -7
  33. package/dist/_esm5.processed/compat/eme/load_session.js +26 -69
  34. package/dist/_esm5.processed/compat/enable_audio_track.js +7 -4
  35. package/dist/_esm5.processed/compat/event_listeners.js +130 -102
  36. package/dist/_esm5.processed/compat/get_start_date.js +7 -4
  37. package/dist/_esm5.processed/compat/global_scope.js +7 -5
  38. package/dist/_esm5.processed/compat/has_issues_with_high_media_source_duration.js +6 -3
  39. package/dist/_esm5.processed/compat/index.js +47 -24
  40. package/dist/_esm5.processed/compat/is_codec_supported.js +8 -5
  41. package/dist/_esm5.processed/compat/is_debug_mode_enabled.js +4 -1
  42. package/dist/_esm5.processed/compat/is_node.js +5 -3
  43. package/dist/_esm5.processed/compat/is_seeking_approximate.js +5 -3
  44. package/dist/_esm5.processed/compat/is_vtt_cue.js +6 -3
  45. package/dist/_esm5.processed/compat/is_worker.js +3 -1
  46. package/dist/_esm5.processed/compat/make_vtt_cue.js +10 -7
  47. package/dist/_esm5.processed/compat/on_height_width_change.js +25 -22
  48. package/dist/_esm5.processed/compat/patch_webkit_source_buffer.js +19 -17
  49. package/dist/_esm5.processed/compat/remove_cue.js +12 -9
  50. package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +7 -4
  51. package/dist/_esm5.processed/compat/should_reload_media_source_on_decipherability_update.js +4 -1
  52. package/dist/_esm5.processed/compat/should_renew_media_key_system_access.js +6 -3
  53. package/dist/_esm5.processed/compat/should_unset_media_keys.js +6 -3
  54. package/dist/_esm5.processed/compat/should_validate_metadata.js +6 -3
  55. package/dist/_esm5.processed/compat/should_wait_for_data_before_loaded.js +6 -3
  56. package/dist/_esm5.processed/compat/should_wait_for_have_enough_data.js +6 -3
  57. package/dist/_esm5.processed/config.js +15 -14
  58. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +123 -94
  59. package/dist/_esm5.processed/core/adaptive/buffer_based_chooser.js +43 -42
  60. package/dist/_esm5.processed/core/adaptive/guess_based_chooser.js +37 -44
  61. package/dist/_esm5.processed/core/adaptive/index.js +4 -2
  62. package/dist/_esm5.processed/core/adaptive/network_analyzer.js +75 -74
  63. package/dist/_esm5.processed/core/adaptive/utils/bandwidth_estimator.js +24 -23
  64. package/dist/_esm5.processed/core/adaptive/utils/ewma.js +13 -12
  65. package/dist/_esm5.processed/core/adaptive/utils/filter_by_bitrate.js +9 -6
  66. package/dist/_esm5.processed/core/adaptive/utils/filter_by_resolution.js +18 -19
  67. package/dist/_esm5.processed/core/adaptive/utils/get_buffer_levels.js +10 -7
  68. package/dist/_esm5.processed/core/adaptive/utils/last_estimate_storage.js +8 -7
  69. package/dist/_esm5.processed/core/adaptive/utils/pending_requests_store.js +26 -23
  70. package/dist/_esm5.processed/core/adaptive/utils/representation_score_calculator.js +25 -23
  71. package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.js +6 -3
  72. package/dist/_esm5.processed/core/api/debug/buffer_graph.js +41 -40
  73. package/dist/_esm5.processed/core/api/debug/buffer_size_graph.js +31 -30
  74. package/dist/_esm5.processed/core/api/debug/constants.js +4 -1
  75. package/dist/_esm5.processed/core/api/debug/index.js +4 -2
  76. package/dist/_esm5.processed/core/api/debug/modules/general_info.js +64 -72
  77. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +49 -46
  78. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +15 -12
  79. package/dist/_esm5.processed/core/api/debug/render.js +16 -13
  80. package/dist/_esm5.processed/core/api/debug/utils.js +18 -13
  81. package/dist/_esm5.processed/core/api/index.js +7 -4
  82. package/dist/_esm5.processed/core/api/option_utils.js +85 -58
  83. package/dist/_esm5.processed/core/api/playback_observer.js +135 -124
  84. package/dist/_esm5.processed/core/api/public_api.js +610 -684
  85. package/dist/_esm5.processed/core/api/track_management/index.js +19 -3
  86. package/dist/_esm5.processed/core/api/track_management/media_element_tracks_store.js +233 -247
  87. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +45 -58
  88. package/dist/_esm5.processed/core/api/track_management/tracks_store.js +300 -324
  89. package/dist/_esm5.processed/core/api/utils.js +32 -24
  90. package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.js +155 -185
  91. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +42 -81
  92. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +15 -12
  93. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +392 -510
  94. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +44 -90
  95. package/dist/_esm5.processed/core/decrypt/create_session.js +90 -149
  96. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +24 -67
  97. package/dist/_esm5.processed/core/decrypt/find_key_system.js +94 -155
  98. package/dist/_esm5.processed/core/decrypt/get_key_system_configuration.js +6 -3
  99. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +59 -109
  100. package/dist/_esm5.processed/core/decrypt/index.js +26 -7
  101. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +17 -59
  102. package/dist/_esm5.processed/core/decrypt/session_events_listener.js +84 -155
  103. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +50 -103
  104. package/dist/_esm5.processed/core/decrypt/types.js +5 -2
  105. package/dist/_esm5.processed/core/decrypt/utils/are_init_values_compatible.js +22 -19
  106. package/dist/_esm5.processed/core/decrypt/utils/check_key_statuses.js +40 -61
  107. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +17 -61
  108. package/dist/_esm5.processed/core/decrypt/utils/clean_old_stored_persistent_info.js +8 -5
  109. package/dist/_esm5.processed/core/decrypt/utils/get_drm_system_id.js +8 -5
  110. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +23 -23
  111. package/dist/_esm5.processed/core/decrypt/utils/is_session_usable.js +15 -12
  112. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +14 -21
  113. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +26 -27
  114. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +206 -310
  115. package/dist/_esm5.processed/core/decrypt/utils/media_keys_infos_store.js +8 -6
  116. package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.js +103 -102
  117. package/dist/_esm5.processed/core/decrypt/utils/serializable_bytes.js +13 -12
  118. package/dist/_esm5.processed/core/decrypt/utils/server_certificate_store.js +18 -16
  119. package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.js +37 -56
  120. package/dist/_esm5.processed/core/fetchers/index.js +7 -3
  121. package/dist/_esm5.processed/core/fetchers/manifest/index.js +4 -2
  122. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +233 -313
  123. package/dist/_esm5.processed/core/fetchers/segment/index.js +4 -2
  124. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.js +12 -9
  125. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +218 -234
  126. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +20 -19
  127. package/dist/_esm5.processed/core/fetchers/segment/task_prioritizer.js +73 -74
  128. package/dist/_esm5.processed/core/fetchers/utils/error_selector.js +8 -5
  129. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +210 -261
  130. package/dist/_esm5.processed/core/init/directfile_content_initializer.js +73 -99
  131. package/dist/_esm5.processed/core/init/index.js +5 -1
  132. package/dist/_esm5.processed/core/init/media_source_content_initializer.js +256 -320
  133. package/dist/_esm5.processed/core/init/types.js +7 -24
  134. package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.js +109 -135
  135. package/dist/_esm5.processed/core/init/utils/create_media_source.js +35 -30
  136. package/dist/_esm5.processed/core/init/utils/create_stream_playback_observer.js +12 -10
  137. package/dist/_esm5.processed/core/init/utils/end_of_stream.js +30 -26
  138. package/dist/_esm5.processed/core/init/utils/get_initial_time.js +41 -38
  139. package/dist/_esm5.processed/core/init/utils/get_loaded_reference.js +13 -10
  140. package/dist/_esm5.processed/core/init/utils/initial_seek_and_play.js +29 -26
  141. package/dist/_esm5.processed/core/init/utils/initialize_content_decryption.js +30 -27
  142. package/dist/_esm5.processed/core/init/utils/media_source_duration_updater.js +58 -60
  143. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.js +140 -161
  144. package/dist/_esm5.processed/core/init/utils/stream_events_emitter/are_same_stream_events.js +3 -1
  145. package/dist/_esm5.processed/core/init/utils/stream_events_emitter/index.js +4 -2
  146. package/dist/_esm5.processed/core/init/utils/stream_events_emitter/refresh_scheduled_events_list.js +28 -30
  147. package/dist/_esm5.processed/core/init/utils/stream_events_emitter/stream_events_emitter.js +71 -90
  148. package/dist/_esm5.processed/core/init/utils/stream_events_emitter/types.js +2 -1
  149. package/dist/_esm5.processed/core/init/utils/throw_on_media_error.js +16 -13
  150. package/dist/_esm5.processed/core/segment_buffers/garbage_collector.js +75 -126
  151. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +130 -147
  152. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/index.js +4 -2
  153. package/dist/_esm5.processed/core/segment_buffers/implementations/index.js +20 -3
  154. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +106 -125
  155. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/index.js +4 -2
  156. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/parsers.js +11 -8
  157. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +48 -47
  158. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/types.js +2 -1
  159. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/update_proportional_elements.js +18 -15
  160. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/utils.js +22 -15
  161. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/index.js +4 -2
  162. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +65 -82
  163. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/parsers.js +11 -8
  164. package/dist/_esm5.processed/core/segment_buffers/implementations/types.js +19 -17
  165. package/dist/_esm5.processed/core/segment_buffers/implementations/utils/manual_time_ranges.js +23 -22
  166. package/dist/_esm5.processed/core/segment_buffers/index.js +13 -6
  167. package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.js +24 -22
  168. package/dist/_esm5.processed/core/segment_buffers/inventory/index.js +8 -3
  169. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +151 -150
  170. package/dist/_esm5.processed/core/segment_buffers/inventory/types.js +2 -1
  171. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.js +9 -4
  172. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +82 -89
  173. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +118 -166
  174. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.js +31 -28
  175. package/dist/_esm5.processed/core/stream/adaptation/index.js +19 -3
  176. package/dist/_esm5.processed/core/stream/adaptation/types.js +2 -1
  177. package/dist/_esm5.processed/core/stream/index.js +4 -2
  178. package/dist/_esm5.processed/core/stream/orchestrator/get_time_ranges_for_content.js +14 -16
  179. package/dist/_esm5.processed/core/stream/orchestrator/index.js +4 -2
  180. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +175 -222
  181. package/dist/_esm5.processed/core/stream/period/index.js +19 -3
  182. package/dist/_esm5.processed/core/stream/period/period_stream.js +172 -216
  183. package/dist/_esm5.processed/core/stream/period/types.js +2 -1
  184. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.js +34 -33
  185. package/dist/_esm5.processed/core/stream/representation/index.js +19 -3
  186. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +80 -68
  187. package/dist/_esm5.processed/core/stream/representation/types.js +2 -1
  188. package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.js +33 -84
  189. package/dist/_esm5.processed/core/stream/representation/utils/check_for_discontinuity.js +32 -29
  190. package/dist/_esm5.processed/core/stream/representation/utils/downloading_queue.js +126 -145
  191. package/dist/_esm5.processed/core/stream/representation/utils/force_garbage_collection.js +32 -88
  192. package/dist/_esm5.processed/core/stream/representation/utils/get_buffer_status.js +61 -48
  193. package/dist/_esm5.processed/core/stream/representation/utils/get_needed_segments.js +71 -69
  194. package/dist/_esm5.processed/core/stream/representation/utils/get_segment_priority.js +8 -5
  195. package/dist/_esm5.processed/core/stream/representation/utils/push_init_segment.js +22 -63
  196. package/dist/_esm5.processed/core/stream/representation/utils/push_media_segment.js +49 -86
  197. package/dist/_esm5.processed/default_config.js +4 -2
  198. package/dist/_esm5.processed/errors/assertion_error.js +10 -26
  199. package/dist/_esm5.processed/errors/custom_loader_error.js +12 -28
  200. package/dist/_esm5.processed/errors/encrypted_media_error.js +16 -32
  201. package/dist/_esm5.processed/errors/error_codes.js +9 -4
  202. package/dist/_esm5.processed/errors/error_message.js +5 -2
  203. package/dist/_esm5.processed/errors/format_error.js +9 -7
  204. package/dist/_esm5.processed/errors/index.js +25 -11
  205. package/dist/_esm5.processed/errors/is_known_error.js +14 -11
  206. package/dist/_esm5.processed/errors/media_error.js +17 -33
  207. package/dist/_esm5.processed/errors/network_error.js +21 -37
  208. package/dist/_esm5.processed/errors/other_error.js +15 -31
  209. package/dist/_esm5.processed/errors/request_error.js +17 -33
  210. package/dist/_esm5.processed/experimental/features/dash_wasm.js +14 -11
  211. package/dist/_esm5.processed/experimental/features/debug_element.js +7 -4
  212. package/dist/_esm5.processed/experimental/features/index.d.ts +1 -0
  213. package/dist/_esm5.processed/experimental/features/index.js +11 -3
  214. package/dist/_esm5.processed/experimental/features/local.js +9 -6
  215. package/dist/_esm5.processed/experimental/features/metaplaylist.js +9 -6
  216. package/dist/_esm5.processed/experimental/index.js +5 -2
  217. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/features/dash.js +6 -3
  218. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/features/metaplaylist.js +6 -3
  219. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/index.js +7 -3
  220. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_and_push_segment.js +22 -16
  221. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +22 -19
  222. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/remove_buffer_around_time.js +6 -3
  223. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/types.js +2 -1
  224. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +125 -186
  225. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader_error.js +11 -27
  226. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +76 -119
  227. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/index.js +24 -15
  228. package/dist/_esm5.processed/experimental/tools/index.js +11 -5
  229. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.js +38 -43
  230. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +31 -34
  231. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/capabilities.js +21 -18
  232. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/index.js +4 -2
  233. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/log.js +5 -3
  234. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +20 -17
  235. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +21 -18
  236. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.js +13 -10
  237. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/defaultCodecsFinder.js +16 -13
  238. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/index.js +16 -14
  239. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.js +14 -11
  240. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/format.js +14 -11
  241. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.js +19 -16
  242. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +11 -8
  243. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.js +5 -2
  244. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/utils.js +25 -22
  245. package/dist/_esm5.processed/experimental/tools/parseBIFThumbnails.js +7 -4
  246. package/dist/_esm5.processed/features/add_features.js +11 -8
  247. package/dist/_esm5.processed/features/features_object.js +4 -2
  248. package/dist/_esm5.processed/features/index.js +7 -4
  249. package/dist/_esm5.processed/features/list/dash.js +11 -8
  250. package/dist/_esm5.processed/features/list/directfile.js +9 -5
  251. package/dist/_esm5.processed/features/list/eme.js +7 -4
  252. package/dist/_esm5.processed/features/list/html_sami_parser.js +9 -6
  253. package/dist/_esm5.processed/features/list/html_srt_parser.js +9 -6
  254. package/dist/_esm5.processed/features/list/html_text_buffer.js +7 -4
  255. package/dist/_esm5.processed/features/list/html_ttml_parser.js +9 -6
  256. package/dist/_esm5.processed/features/list/html_vtt_parser.js +9 -6
  257. package/dist/_esm5.processed/features/list/index.js +31 -14
  258. package/dist/_esm5.processed/features/list/native_sami_parser.js +9 -6
  259. package/dist/_esm5.processed/features/list/native_srt_parser.js +9 -6
  260. package/dist/_esm5.processed/features/list/native_text_buffer.js +7 -4
  261. package/dist/_esm5.processed/features/list/native_ttml_parser.js +9 -6
  262. package/dist/_esm5.processed/features/list/native_vtt_parser.js +9 -6
  263. package/dist/_esm5.processed/features/list/smooth.js +9 -6
  264. package/dist/_esm5.processed/features/types.js +2 -1
  265. package/dist/_esm5.processed/index.js +24 -9
  266. package/dist/_esm5.processed/log.js +5 -3
  267. package/dist/_esm5.processed/manifest/adaptation.js +52 -55
  268. package/dist/_esm5.processed/manifest/index.js +32 -13
  269. package/dist/_esm5.processed/manifest/manifest.js +112 -134
  270. package/dist/_esm5.processed/manifest/period.js +38 -42
  271. package/dist/_esm5.processed/manifest/representation.js +78 -61
  272. package/dist/_esm5.processed/manifest/representation_index/index.js +5 -2
  273. package/dist/_esm5.processed/manifest/representation_index/static.js +43 -42
  274. package/dist/_esm5.processed/manifest/representation_index/types.js +2 -1
  275. package/dist/_esm5.processed/manifest/types.js +5 -2
  276. package/dist/_esm5.processed/manifest/update_period_in_place.js +38 -48
  277. package/dist/_esm5.processed/manifest/update_periods.js +59 -69
  278. package/dist/_esm5.processed/manifest/utils.js +14 -9
  279. package/dist/_esm5.processed/minimal.js +9 -7
  280. package/dist/_esm5.processed/parsers/containers/isobmff/constants.js +4 -1
  281. package/dist/_esm5.processed/parsers/containers/isobmff/create_box.js +14 -10
  282. package/dist/_esm5.processed/parsers/containers/isobmff/drm/index.js +5 -1
  283. package/dist/_esm5.processed/parsers/containers/isobmff/drm/playready.js +15 -11
  284. package/dist/_esm5.processed/parsers/containers/isobmff/get_box.js +48 -40
  285. package/dist/_esm5.processed/parsers/containers/isobmff/index.js +27 -6
  286. package/dist/_esm5.processed/parsers/containers/isobmff/read.js +20 -14
  287. package/dist/_esm5.processed/parsers/containers/isobmff/take_pssh_out.js +25 -20
  288. package/dist/_esm5.processed/parsers/containers/isobmff/utils.js +130 -112
  289. package/dist/_esm5.processed/parsers/containers/matroska/index.js +6 -1
  290. package/dist/_esm5.processed/parsers/containers/matroska/utils.js +67 -63
  291. package/dist/_esm5.processed/parsers/images/bif.js +40 -29
  292. package/dist/_esm5.processed/parsers/manifest/dash/common/attach_trickmode_track.js +10 -12
  293. package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +10 -7
  294. package/dist/_esm5.processed/parsers/manifest/dash/common/get_clock_offset.js +8 -5
  295. package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.js +10 -6
  296. package/dist/_esm5.processed/parsers/manifest/dash/common/get_http_utc-timing_url.js +7 -6
  297. package/dist/_esm5.processed/parsers/manifest/dash/common/get_minimum_and_maximum_positions.js +10 -6
  298. package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.js +14 -9
  299. package/dist/_esm5.processed/parsers/manifest/dash/common/index.js +10 -4
  300. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +73 -67
  301. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.js +9 -4
  302. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +32 -25
  303. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/index.js +11 -5
  304. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +81 -70
  305. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +130 -123
  306. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +15 -12
  307. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_previous_timeline.js +35 -32
  308. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.js +14 -9
  309. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/find_first_common_start_time.js +30 -22
  310. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/index.js +4 -2
  311. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/parse_s_element.js +14 -11
  312. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +131 -129
  313. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.js +16 -10
  314. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/utils.js +7 -3
  315. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.js +19 -18
  316. package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.js +18 -17
  317. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +111 -111
  318. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_availability_start_time.js +4 -1
  319. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +86 -85
  320. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +97 -82
  321. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +39 -37
  322. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +61 -69
  323. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.js +12 -9
  324. package/dist/_esm5.processed/parsers/manifest/dash/index.js +8 -1
  325. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/index.js +4 -2
  326. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +66 -62
  327. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/BaseURL.js +7 -4
  328. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/ContentComponent.js +7 -4
  329. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/ContentProtection.js +22 -19
  330. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/EventStream.js +22 -19
  331. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Initialization.js +11 -8
  332. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/MPD.js +38 -34
  333. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Period.js +34 -30
  334. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +44 -40
  335. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentBase.js +24 -21
  336. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentList.js +15 -12
  337. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.js +21 -18
  338. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentTimeline.js +6 -3
  339. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentURL.js +12 -9
  340. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +60 -64
  341. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +33 -27
  342. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.js +2 -1
  343. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.js +2 -1
  344. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/index.js +4 -2
  345. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +192 -238
  346. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +67 -62
  347. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.js +8 -4
  348. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/ContentComponent.js +11 -7
  349. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/ContentProtection.js +17 -13
  350. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.js +29 -24
  351. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/MPD.js +38 -33
  352. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Period.js +37 -32
  353. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +43 -38
  354. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Scheme.js +9 -5
  355. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentBase.js +16 -12
  356. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.js +11 -7
  357. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentTemplate.js +20 -16
  358. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentUrl.js +11 -7
  359. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/XLink.js +11 -7
  360. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/index.js +5 -1
  361. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/root.js +10 -6
  362. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/parsers_stack.js +22 -20
  363. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/types.js +2 -1
  364. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/utils.js +6 -2
  365. package/dist/_esm5.processed/parsers/manifest/index.js +17 -1
  366. package/dist/_esm5.processed/parsers/manifest/local/index.js +4 -2
  367. package/dist/_esm5.processed/parsers/manifest/local/parse_local_manifest.js +30 -27
  368. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +71 -84
  369. package/dist/_esm5.processed/parsers/manifest/local/types.js +2 -1
  370. package/dist/_esm5.processed/parsers/manifest/metaplaylist/index.js +4 -2
  371. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +75 -72
  372. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.js +52 -52
  373. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +200 -176
  374. package/dist/_esm5.processed/parsers/manifest/smooth/get_codecs.js +13 -8
  375. package/dist/_esm5.processed/parsers/manifest/smooth/index.js +7 -4
  376. package/dist/_esm5.processed/parsers/manifest/smooth/parse_C_nodes.js +17 -14
  377. package/dist/_esm5.processed/parsers/manifest/smooth/parse_protection_node.js +17 -15
  378. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +102 -98
  379. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.js +49 -48
  380. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.js +10 -7
  381. package/dist/_esm5.processed/parsers/manifest/smooth/utils/parseBoolean.js +4 -1
  382. package/dist/_esm5.processed/parsers/manifest/smooth/utils/reduceChildren.js +6 -3
  383. package/dist/_esm5.processed/parsers/manifest/smooth/utils/tokens.js +5 -1
  384. package/dist/_esm5.processed/parsers/manifest/types.js +2 -1
  385. package/dist/_esm5.processed/parsers/manifest/utils/check_manifest_ids.js +27 -24
  386. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +10 -7
  387. package/dist/_esm5.processed/parsers/manifest/utils/get_first_time_from_adaptation.js +8 -5
  388. package/dist/_esm5.processed/parsers/manifest/utils/get_last_time_from_adaptation.js +8 -5
  389. package/dist/_esm5.processed/parsers/manifest/utils/get_maximum_positions.js +15 -12
  390. package/dist/_esm5.processed/parsers/manifest/utils/get_minimum_position.js +15 -12
  391. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.js +31 -22
  392. package/dist/_esm5.processed/parsers/manifest/utils/is_segment_still_available.js +9 -6
  393. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +38 -45
  394. package/dist/_esm5.processed/parsers/texttracks/index.js +2 -1
  395. package/dist/_esm5.processed/parsers/texttracks/sami/html.js +45 -43
  396. package/dist/_esm5.processed/parsers/texttracks/sami/native.js +41 -39
  397. package/dist/_esm5.processed/parsers/texttracks/srt/find_end_of_cue_block.js +7 -4
  398. package/dist/_esm5.processed/parsers/texttracks/srt/get_cue_blocks.js +11 -8
  399. package/dist/_esm5.processed/parsers/texttracks/srt/html.js +32 -29
  400. package/dist/_esm5.processed/parsers/texttracks/srt/native.js +16 -13
  401. package/dist/_esm5.processed/parsers/texttracks/srt/parse_cue.js +21 -18
  402. package/dist/_esm5.processed/parsers/texttracks/srt/parse_timestamp.js +10 -7
  403. package/dist/_esm5.processed/parsers/texttracks/ttml/get_parameters.js +37 -30
  404. package/dist/_esm5.processed/parsers/texttracks/ttml/get_styling.js +48 -48
  405. package/dist/_esm5.processed/parsers/texttracks/ttml/get_time_delimiters.js +14 -11
  406. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_default_ttml_paragraph_style.js +7 -2
  407. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_extent.js +15 -12
  408. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_font_size.js +15 -12
  409. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_line_height.js +11 -8
  410. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_origin.js +15 -12
  411. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_padding.js +25 -22
  412. package/dist/_esm5.processed/parsers/texttracks/ttml/html/create_element.js +117 -124
  413. package/dist/_esm5.processed/parsers/texttracks/ttml/html/generate_css_test_outline.js +11 -8
  414. package/dist/_esm5.processed/parsers/texttracks/ttml/html/index.js +4 -2
  415. package/dist/_esm5.processed/parsers/texttracks/ttml/html/parse_cue.js +12 -8
  416. package/dist/_esm5.processed/parsers/texttracks/ttml/html/parse_ttml_to_div.js +14 -11
  417. package/dist/_esm5.processed/parsers/texttracks/ttml/html/ttml_color_to_css_color.js +10 -7
  418. package/dist/_esm5.processed/parsers/texttracks/ttml/native/index.js +4 -2
  419. package/dist/_esm5.processed/parsers/texttracks/ttml/native/parse_cue.js +38 -35
  420. package/dist/_esm5.processed/parsers/texttracks/ttml/native/parse_ttml_to_vtt.js +11 -8
  421. package/dist/_esm5.processed/parsers/texttracks/ttml/parse_ttml.js +58 -58
  422. package/dist/_esm5.processed/parsers/texttracks/ttml/regexps.js +27 -13
  423. package/dist/_esm5.processed/parsers/texttracks/ttml/resolve_styles_inheritance.js +18 -18
  424. package/dist/_esm5.processed/parsers/texttracks/ttml/time_parsing.js +28 -26
  425. package/dist/_esm5.processed/parsers/texttracks/ttml/xml_utils.js +37 -25
  426. package/dist/_esm5.processed/parsers/texttracks/types.js +2 -1
  427. package/dist/_esm5.processed/parsers/texttracks/webvtt/get_cue_blocks.js +12 -9
  428. package/dist/_esm5.processed/parsers/texttracks/webvtt/get_style_blocks.js +14 -11
  429. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/convert_payload_to_html.js +11 -8
  430. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_default_style_elements.js +8 -5
  431. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_style_attribute.js +60 -60
  432. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_styled_element.js +30 -27
  433. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/index.js +4 -2
  434. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/parse_style_block.js +23 -26
  435. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/parse_webvtt_to_div.js +20 -17
  436. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.js +23 -18
  437. package/dist/_esm5.processed/parsers/texttracks/webvtt/native/index.js +4 -2
  438. package/dist/_esm5.processed/parsers/texttracks/webvtt/native/parse_vtt_to_cues.js +19 -16
  439. package/dist/_esm5.processed/parsers/texttracks/webvtt/native/set_settings_on_cue.js +20 -17
  440. package/dist/_esm5.processed/parsers/texttracks/webvtt/native/to_native_cue.js +8 -5
  441. package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.js +26 -18
  442. package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_timestamp.js +10 -7
  443. package/dist/_esm5.processed/parsers/texttracks/webvtt/utils.js +15 -7
  444. package/dist/_esm5.processed/public_types.js +2 -1
  445. package/dist/_esm5.processed/tools/TextTrackRenderer/index.js +13 -6
  446. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +26 -24
  447. package/dist/_esm5.processed/tools/index.js +6 -4
  448. package/dist/_esm5.processed/tools/string_utils.js +10 -1
  449. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +16 -24
  450. package/dist/_esm5.processed/transports/dash/construct_segment_url.js +6 -3
  451. package/dist/_esm5.processed/transports/dash/extract_complete_chunks.js +17 -14
  452. package/dist/_esm5.processed/transports/dash/get_events_out_of_emsgs.js +19 -16
  453. package/dist/_esm5.processed/transports/dash/index.js +4 -2
  454. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +47 -27
  455. package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +23 -16
  456. package/dist/_esm5.processed/transports/dash/manifest_parser.js +68 -60
  457. package/dist/_esm5.processed/transports/dash/pipelines.js +20 -17
  458. package/dist/_esm5.processed/transports/dash/segment_loader.js +49 -39
  459. package/dist/_esm5.processed/transports/dash/segment_parser.js +58 -39
  460. package/dist/_esm5.processed/transports/dash/text_loader.js +36 -30
  461. package/dist/_esm5.processed/transports/dash/text_parser.js +39 -29
  462. package/dist/_esm5.processed/transports/index.js +17 -1
  463. package/dist/_esm5.processed/transports/local/index.js +4 -2
  464. package/dist/_esm5.processed/transports/local/pipelines.js +26 -23
  465. package/dist/_esm5.processed/transports/local/segment_loader.js +26 -23
  466. package/dist/_esm5.processed/transports/local/segment_parser.js +36 -25
  467. package/dist/_esm5.processed/transports/local/text_parser.js +42 -27
  468. package/dist/_esm5.processed/transports/metaplaylist/index.js +4 -2
  469. package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.js +11 -7
  470. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +91 -96
  471. package/dist/_esm5.processed/transports/smooth/extract_timings_infos.js +26 -20
  472. package/dist/_esm5.processed/transports/smooth/index.js +4 -2
  473. package/dist/_esm5.processed/transports/smooth/is_mp4_embedded_track.js +4 -1
  474. package/dist/_esm5.processed/transports/smooth/isobmff/create_audio_init_segment.js +22 -19
  475. package/dist/_esm5.processed/transports/smooth/isobmff/create_boxes.js +92 -67
  476. package/dist/_esm5.processed/transports/smooth/isobmff/create_init_segment.js +29 -26
  477. package/dist/_esm5.processed/transports/smooth/isobmff/create_traf_box.js +9 -6
  478. package/dist/_esm5.processed/transports/smooth/isobmff/create_video_init_segment.js +23 -20
  479. package/dist/_esm5.processed/transports/smooth/isobmff/get_aaces_header.js +10 -7
  480. package/dist/_esm5.processed/transports/smooth/isobmff/index.js +13 -6
  481. package/dist/_esm5.processed/transports/smooth/isobmff/parse_tfrf.js +19 -16
  482. package/dist/_esm5.processed/transports/smooth/isobmff/parse_tfxd.js +9 -6
  483. package/dist/_esm5.processed/transports/smooth/isobmff/patch_segment.js +41 -38
  484. package/dist/_esm5.processed/transports/smooth/pipelines.js +106 -96
  485. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +2 -2
  486. package/dist/_esm5.processed/transports/smooth/segment_loader.js +149 -153
  487. package/dist/_esm5.processed/transports/smooth/utils.js +7 -3
  488. package/dist/_esm5.processed/transports/types.js +2 -1
  489. package/dist/_esm5.processed/transports/utils/byte_range.js +6 -4
  490. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +23 -18
  491. package/dist/_esm5.processed/transports/utils/check_isobmff_integrity.js +14 -11
  492. package/dist/_esm5.processed/transports/utils/find_complete_box.js +11 -8
  493. package/dist/_esm5.processed/transports/utils/generate_manifest_loader.js +22 -14
  494. package/dist/_esm5.processed/transports/utils/get_isobmff_timing_infos.js +13 -10
  495. package/dist/_esm5.processed/transports/utils/infer_segment_container.js +4 -1
  496. package/dist/_esm5.processed/transports/utils/parse_text_track.js +40 -26
  497. package/dist/_esm5.processed/utils/are_arrays_of_numbers_equal.js +5 -2
  498. package/dist/_esm5.processed/utils/are_codecs_compatible.js +11 -9
  499. package/dist/_esm5.processed/utils/array_find.js +7 -4
  500. package/dist/_esm5.processed/utils/array_find_index.js +6 -3
  501. package/dist/_esm5.processed/utils/array_includes.js +12 -11
  502. package/dist/_esm5.processed/utils/assert.js +13 -9
  503. package/dist/_esm5.processed/utils/assert_unreachable.js +6 -3
  504. package/dist/_esm5.processed/utils/base64.js +23 -18
  505. package/dist/_esm5.processed/utils/byte_parsing.js +30 -17
  506. package/dist/_esm5.processed/utils/cancellable_sleep.js +8 -5
  507. package/dist/_esm5.processed/utils/create_cancellable_promise.js +7 -4
  508. package/dist/_esm5.processed/utils/deep_merge.js +10 -21
  509. package/dist/_esm5.processed/utils/event_emitter.js +24 -24
  510. package/dist/_esm5.processed/utils/flat_map.js +7 -4
  511. package/dist/_esm5.processed/utils/get_fuzzed_delay.js +6 -3
  512. package/dist/_esm5.processed/utils/hash_buffer.js +7 -4
  513. package/dist/_esm5.processed/utils/id_generator.js +6 -3
  514. package/dist/_esm5.processed/utils/initialization_segment_cache.js +11 -12
  515. package/dist/_esm5.processed/utils/is_non_empty_string.js +4 -1
  516. package/dist/_esm5.processed/utils/is_null_or_undefined.js +4 -1
  517. package/dist/_esm5.processed/utils/languages/ISO_639-1_to_ISO_639-3.js +4 -2
  518. package/dist/_esm5.processed/utils/languages/ISO_639-2_to_ISO_639-3.js +4 -2
  519. package/dist/_esm5.processed/utils/languages/index.js +7 -3
  520. package/dist/_esm5.processed/utils/languages/normalize.js +26 -20
  521. package/dist/_esm5.processed/utils/logger.js +24 -23
  522. package/dist/_esm5.processed/utils/monotonic_timestamp.js +4 -1
  523. package/dist/_esm5.processed/utils/noop.js +4 -1
  524. package/dist/_esm5.processed/utils/object_assign.js +8 -10
  525. package/dist/_esm5.processed/utils/object_values.js +6 -3
  526. package/dist/_esm5.processed/utils/ranges.js +94 -71
  527. package/dist/_esm5.processed/utils/reference.js +48 -52
  528. package/dist/_esm5.processed/utils/request/fetch.js +79 -109
  529. package/dist/_esm5.processed/utils/request/index.js +9 -4
  530. package/dist/_esm5.processed/utils/request/xhr.js +49 -37
  531. package/dist/_esm5.processed/utils/resolve_url.js +18 -18
  532. package/dist/_esm5.processed/utils/retry_promise_with_backoff.js +34 -81
  533. package/dist/_esm5.processed/utils/sleep.js +5 -2
  534. package/dist/_esm5.processed/utils/slice_uint8array.js +3 -1
  535. package/dist/_esm5.processed/utils/sorted_list.js +37 -40
  536. package/dist/_esm5.processed/utils/starts_with.js +5 -2
  537. package/dist/_esm5.processed/utils/string_parsing.js +84 -73
  538. package/dist/_esm5.processed/utils/take_first_set.js +9 -10
  539. package/dist/_esm5.processed/utils/task_canceller.js +51 -71
  540. package/dist/_esm5.processed/utils/warn_once.js +7 -4
  541. package/dist/_esm5.processed/utils/weak_map_memory.js +12 -11
  542. package/dist/_esm5.processed/utils/wrapInPromise.js +5 -2
  543. package/dist/mpd-parser.wasm +0 -0
  544. package/dist/rx-player.js +43758 -45493
  545. package/dist/rx-player.min.js +1 -1
  546. package/jest.config.js +1 -22
  547. package/package.json +22 -23
  548. package/scripts/build/constants.d.ts +1 -23
  549. package/scripts/build/generate_build.js +1 -1
  550. package/scripts/check_nodejs_import_compatibility.js +1 -1
  551. package/scripts/update-version +1 -4
  552. package/sonar-project.properties +1 -1
  553. package/src/compat/event_listeners.ts +8 -8
  554. package/src/compat/global_scope.ts +2 -0
  555. package/src/core/adaptive/__tests__/buffer_based_chooser.test.ts +3 -3
  556. package/src/core/adaptive/adaptive_representation_selector.ts +27 -9
  557. package/src/core/adaptive/buffer_based_chooser.ts +1 -1
  558. package/src/core/adaptive/network_analyzer.ts +5 -4
  559. package/src/core/api/public_api.ts +2 -2
  560. package/src/core/api/track_management/track_dispatcher.ts +2 -1
  561. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +1 -1
  562. package/src/core/fetchers/cdn_prioritizer.ts +1 -1
  563. package/src/experimental/features/__tests__/index.test.ts +19 -0
  564. package/src/experimental/features/index.ts +1 -0
  565. package/src/features/list/__tests__/index.test.ts +49 -0
  566. package/src/index.ts +28 -3
  567. package/src/transports/smooth/segment_loader.ts +4 -4
  568. package/src/typings/globals.d.ts +0 -42
  569. package/src/utils/request/fetch.ts +1 -1
  570. package/src/utils/request/xhr.ts +1 -1
  571. package/tsconfig.json +1 -1
  572. package/tsconfig.modules.json +3 -3
  573. package/dist/_esm5.processed/features/initialize_features.d.ts +0 -19
  574. package/dist/_esm5.processed/features/initialize_features.js +0 -108
  575. package/src/features/__tests__/initialize_features.test.ts +0 -657
  576. package/src/features/initialize_features.ts +0 -129
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * Copyright 2015 CANAL+ Group
3
4
  *
@@ -13,99 +14,29 @@
13
14
  * See the License for the specific language governing permissions and
14
15
  * limitations under the License.
15
16
  */
16
- var __extends = (this && this.__extends) || (function () {
17
- var extendStatics = function (d, b) {
18
- extendStatics = Object.setPrototypeOf ||
19
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
20
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
21
- return extendStatics(d, b);
22
- };
23
- return function (d, b) {
24
- if (typeof b !== "function" && b !== null)
25
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
26
- extendStatics(d, b);
27
- function __() { this.constructor = d; }
28
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
29
- };
30
- })();
31
- var __assign = (this && this.__assign) || function () {
32
- __assign = Object.assign || function(t) {
33
- for (var s, i = 1, n = arguments.length; i < n; i++) {
34
- s = arguments[i];
35
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
36
- t[p] = s[p];
37
- }
38
- return t;
39
- };
40
- return __assign.apply(this, arguments);
41
- };
42
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
43
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
44
- return new (P || (P = Promise))(function (resolve, reject) {
45
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
46
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
47
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
48
- step((generator = generator.apply(thisArg, _arguments || [])).next());
49
- });
50
- };
51
- var __generator = (this && this.__generator) || function (thisArg, body) {
52
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
53
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
54
- function verb(n) { return function (v) { return step([n, v]); }; }
55
- function step(op) {
56
- if (f) throw new TypeError("Generator is already executing.");
57
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
58
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
59
- if (y = 0, t) op = [op[0] & 2, t.value];
60
- switch (op[0]) {
61
- case 0: case 1: t = op; break;
62
- case 4: _.label++; return { value: op[1], done: false };
63
- case 5: _.label++; y = op[1]; op = [0]; continue;
64
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
65
- default:
66
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
67
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
68
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
69
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
70
- if (t[2]) _.ops.pop();
71
- _.trys.pop(); continue;
72
- }
73
- op = body.call(thisArg, _);
74
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
75
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
76
- }
77
- };
78
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
79
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
80
- if (ar || !(i in from)) {
81
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
82
- ar[i] = from[i];
83
- }
84
- }
85
- return to.concat(ar || Array.prototype.slice.call(from));
86
- };
87
- import eme, { getInitData, } from "../../compat/eme";
88
- import config from "../../config";
89
- import { EncryptedMediaError, OtherError, } from "../../errors";
90
- import log from "../../log";
91
- import areArraysOfNumbersEqual from "../../utils/are_arrays_of_numbers_equal";
92
- import arrayFind from "../../utils/array_find";
93
- import arrayIncludes from "../../utils/array_includes";
94
- import EventEmitter from "../../utils/event_emitter";
95
- import isNullOrUndefined from "../../utils/is_null_or_undefined";
96
- import { bytesToHex } from "../../utils/string_parsing";
97
- import TaskCanceller from "../../utils/task_canceller";
98
- import attachMediaKeys from "./attach_media_keys";
99
- import createOrLoadSession from "./create_or_load_session";
100
- import initMediaKeys from "./init_media_keys";
101
- import SessionEventsListener, { BlacklistedSessionError, } from "./session_events_listener";
102
- import setServerCertificate from "./set_server_certificate";
103
- import { ContentDecryptorState, } from "./types";
104
- import { DecommissionedSessionError } from "./utils/check_key_statuses";
105
- import cleanOldStoredPersistentInfo from "./utils/clean_old_stored_persistent_info";
106
- import getDrmSystemId from "./utils/get_drm_system_id";
107
- import InitDataValuesContainer from "./utils/init_data_values_container";
108
- import { areAllKeyIdsContainedIn, areSomeKeyIdsContainedIn, } from "./utils/key_id_comparison";
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const eme_1 = require("../../compat/eme");
19
+ const config_1 = require("../../config");
20
+ const errors_1 = require("../../errors");
21
+ const log_1 = require("../../log");
22
+ const are_arrays_of_numbers_equal_1 = require("../../utils/are_arrays_of_numbers_equal");
23
+ const array_find_1 = require("../../utils/array_find");
24
+ const array_includes_1 = require("../../utils/array_includes");
25
+ const event_emitter_1 = require("../../utils/event_emitter");
26
+ const is_null_or_undefined_1 = require("../../utils/is_null_or_undefined");
27
+ const string_parsing_1 = require("../../utils/string_parsing");
28
+ const task_canceller_1 = require("../../utils/task_canceller");
29
+ const attach_media_keys_1 = require("./attach_media_keys");
30
+ const create_or_load_session_1 = require("./create_or_load_session");
31
+ const init_media_keys_1 = require("./init_media_keys");
32
+ const session_events_listener_1 = require("./session_events_listener");
33
+ const set_server_certificate_1 = require("./set_server_certificate");
34
+ const types_1 = require("./types");
35
+ const check_key_statuses_1 = require("./utils/check_key_statuses");
36
+ const clean_old_stored_persistent_info_1 = require("./utils/clean_old_stored_persistent_info");
37
+ const get_drm_system_id_1 = require("./utils/get_drm_system_id");
38
+ const init_data_values_container_1 = require("./utils/init_data_values_container");
39
+ const key_id_comparison_1 = require("./utils/key_id_comparison");
109
40
  /**
110
41
  * Module communicating with the Content Decryption Module (or CDM) to be able
111
42
  * to decrypt contents.
@@ -118,8 +49,16 @@ import { areAllKeyIdsContainedIn, areSomeKeyIdsContainedIn, } from "./utils/key_
118
49
  *
119
50
  * @class ContentDecryptor
120
51
  */
121
- var ContentDecryptor = /** @class */ (function (_super) {
122
- __extends(ContentDecryptor, _super);
52
+ class ContentDecryptor extends event_emitter_1.default {
53
+ /**
54
+ * `true` if the EME API are available on the current platform according to
55
+ * the default EME implementation used.
56
+ * `false` otherwise.
57
+ * @returns {boolean}
58
+ */
59
+ static hasEmeApis() {
60
+ return !(0, is_null_or_undefined_1.default)(eme_1.default.requestMediaKeySystemAccess);
61
+ }
123
62
  /**
124
63
  * Create a new `ContentDecryptor`, and initialize its decryption capabilities
125
64
  * right away.
@@ -134,28 +73,28 @@ var ContentDecryptor = /** @class */ (function (_super) {
134
73
  * configurations. It will choose the appropriate one depending on user
135
74
  * settings and browser support.
136
75
  */
137
- function ContentDecryptor(mediaElement, ksOptions) {
138
- var _this = _super.call(this) || this;
139
- log.debug("DRM: Starting ContentDecryptor logic.");
140
- var canceller = new TaskCanceller();
141
- _this._currentSessions = [];
142
- _this._canceller = canceller;
143
- _this._initDataQueue = [];
144
- _this._stateData = { state: ContentDecryptorState.Initializing,
76
+ constructor(mediaElement, ksOptions) {
77
+ super();
78
+ log_1.default.debug("DRM: Starting ContentDecryptor logic.");
79
+ const canceller = new task_canceller_1.default();
80
+ this._currentSessions = [];
81
+ this._canceller = canceller;
82
+ this._initDataQueue = [];
83
+ this._stateData = { state: types_1.ContentDecryptorState.Initializing,
145
84
  isMediaKeysAttached: 0 /* MediaKeyAttachmentStatus.NotAttached */,
146
85
  isInitDataQueueLocked: true,
147
86
  data: null };
148
- _this.error = null;
149
- eme.onEncrypted(mediaElement, function (evt) {
150
- log.debug("DRM: Encrypted event received from media element.");
151
- var initData = getInitData(evt);
87
+ this.error = null;
88
+ eme_1.default.onEncrypted(mediaElement, evt => {
89
+ log_1.default.debug("DRM: Encrypted event received from media element.");
90
+ const initData = (0, eme_1.getInitData)(evt);
152
91
  if (initData !== null) {
153
- _this.onInitializationData(initData);
92
+ this.onInitializationData(initData);
154
93
  }
155
94
  }, canceller.signal);
156
- initMediaKeys(mediaElement, ksOptions, canceller.signal)
157
- .then(function (mediaKeysInfo) {
158
- var options = mediaKeysInfo.options, mediaKeySystemAccess = mediaKeysInfo.mediaKeySystemAccess;
95
+ (0, init_media_keys_1.default)(mediaElement, ksOptions, canceller.signal)
96
+ .then((mediaKeysInfo) => {
97
+ const { options, mediaKeySystemAccess } = mediaKeysInfo;
159
98
  /**
160
99
  * String identifying the key system, allowing the rest of the code to
161
100
  * only advertise the required initialization data for license requests.
@@ -165,42 +104,33 @@ var ContentDecryptor = /** @class */ (function (_super) {
165
104
  * optimizations this property unlocks can break the loading of
166
105
  * MediaKeySessions persisted in older RxPlayer's versions.
167
106
  */
168
- var systemId;
169
- if (isNullOrUndefined(options.persistentLicenseConfig) ||
107
+ let systemId;
108
+ if ((0, is_null_or_undefined_1.default)(options.persistentLicenseConfig) ||
170
109
  options.persistentLicenseConfig.disableRetroCompatibility === true) {
171
- systemId = getDrmSystemId(mediaKeySystemAccess.keySystem);
110
+ systemId = (0, get_drm_system_id_1.default)(mediaKeySystemAccess.keySystem);
172
111
  }
173
- _this.systemId = systemId;
174
- if (_this._stateData.state === ContentDecryptorState.Initializing) {
175
- _this._stateData = { state: ContentDecryptorState.WaitingForAttachment,
112
+ this.systemId = systemId;
113
+ if (this._stateData.state === types_1.ContentDecryptorState.Initializing) {
114
+ this._stateData = { state: types_1.ContentDecryptorState.WaitingForAttachment,
176
115
  isInitDataQueueLocked: true,
177
116
  isMediaKeysAttached: 0 /* MediaKeyAttachmentStatus.NotAttached */,
178
- data: { mediaKeysInfo: mediaKeysInfo, mediaElement: mediaElement } };
179
- _this.trigger("stateChange", _this._stateData.state);
117
+ data: { mediaKeysInfo,
118
+ mediaElement } };
119
+ this.trigger("stateChange", this._stateData.state);
180
120
  }
181
121
  })
182
- .catch(function (err) {
183
- _this._onFatalError(err);
122
+ .catch((err) => {
123
+ this._onFatalError(err);
184
124
  });
185
- return _this;
186
125
  }
187
- /**
188
- * `true` if the EME API are available on the current platform according to
189
- * the default EME implementation used.
190
- * `false` otherwise.
191
- * @returns {boolean}
192
- */
193
- ContentDecryptor.hasEmeApis = function () {
194
- return !isNullOrUndefined(eme.requestMediaKeySystemAccess);
195
- };
196
126
  /**
197
127
  * Returns the current state of the ContentDecryptor.
198
128
  * @see ContentDecryptorState
199
129
  * @returns {Object}
200
130
  */
201
- ContentDecryptor.prototype.getState = function () {
131
+ getState() {
202
132
  return this._stateData.state;
203
- };
133
+ }
204
134
  /**
205
135
  * Attach the current decryption capabilities to the HTMLMediaElement.
206
136
  * This method should only be called once the `ContentDecryptor` is in the
@@ -210,24 +140,23 @@ var ContentDecryptor = /** @class */ (function (_super) {
210
140
  * calling this method, and only push data to it once the `ReadyForContent`
211
141
  * state is reached, for compatibility reasons.
212
142
  */
213
- ContentDecryptor.prototype.attach = function () {
214
- var _this = this;
215
- if (this._stateData.state !== ContentDecryptorState.WaitingForAttachment) {
143
+ attach() {
144
+ if (this._stateData.state !== types_1.ContentDecryptorState.WaitingForAttachment) {
216
145
  throw new Error("`attach` should only be called when " +
217
146
  "in the WaitingForAttachment state");
218
147
  }
219
148
  else if (this._stateData.isMediaKeysAttached !== 0 /* MediaKeyAttachmentStatus.NotAttached */) {
220
- log.warn("DRM: ContentDecryptor's `attach` method called more than once.");
149
+ log_1.default.warn("DRM: ContentDecryptor's `attach` method called more than once.");
221
150
  return;
222
151
  }
223
- var _a = this._stateData.data, mediaElement = _a.mediaElement, mediaKeysInfo = _a.mediaKeysInfo;
224
- var options = mediaKeysInfo.options, mediaKeys = mediaKeysInfo.mediaKeys, mediaKeySystemAccess = mediaKeysInfo.mediaKeySystemAccess, stores = mediaKeysInfo.stores;
225
- var shouldDisableLock = options.disableMediaKeysAttachmentLock === true;
152
+ const { mediaElement, mediaKeysInfo } = this._stateData.data;
153
+ const { options, mediaKeys, mediaKeySystemAccess, stores } = mediaKeysInfo;
154
+ const shouldDisableLock = options.disableMediaKeysAttachmentLock === true;
226
155
  if (shouldDisableLock) {
227
- this._stateData = { state: ContentDecryptorState.ReadyForContent,
156
+ this._stateData = { state: types_1.ContentDecryptorState.ReadyForContent,
228
157
  isInitDataQueueLocked: true,
229
158
  isMediaKeysAttached: 1 /* MediaKeyAttachmentStatus.Pending */,
230
- data: { mediaKeysInfo: mediaKeysInfo, mediaElement: mediaElement } };
159
+ data: { mediaKeysInfo, mediaElement } };
231
160
  this.trigger("stateChange", this._stateData.state);
232
161
  // previous trigger might have lead to disposal
233
162
  if (this._isStopped()) {
@@ -235,48 +164,41 @@ var ContentDecryptor = /** @class */ (function (_super) {
235
164
  }
236
165
  }
237
166
  this._stateData.isMediaKeysAttached = 1 /* MediaKeyAttachmentStatus.Pending */;
238
- var stateToAttach = { emeImplementation: eme,
239
- loadedSessionsStore: stores.loadedSessionsStore, mediaKeySystemAccess: mediaKeySystemAccess, mediaKeys: mediaKeys, keySystemOptions: options };
240
- log.debug("DRM: Attaching current MediaKeys");
241
- attachMediaKeys(mediaElement, stateToAttach, this._canceller.signal)
242
- .then(function () { return __awaiter(_this, void 0, void 0, function () {
243
- var serverCertificate, resSsc, prevState;
244
- return __generator(this, function (_a) {
245
- switch (_a.label) {
246
- case 0:
247
- this._stateData.isMediaKeysAttached = 2 /* MediaKeyAttachmentStatus.Attached */;
248
- serverCertificate = options.serverCertificate;
249
- if (!!isNullOrUndefined(serverCertificate)) return [3 /*break*/, 2];
250
- return [4 /*yield*/, setServerCertificate(mediaKeys, serverCertificate)];
251
- case 1:
252
- resSsc = _a.sent();
253
- if (resSsc.type === "error") {
254
- this.trigger("warning", resSsc.value);
255
- }
256
- _a.label = 2;
257
- case 2:
258
- if (this._isStopped()) { // We might be stopped since then
259
- return [2 /*return*/];
260
- }
261
- prevState = this._stateData.state;
262
- this._stateData = { state: ContentDecryptorState.ReadyForContent,
263
- isMediaKeysAttached: 2 /* MediaKeyAttachmentStatus.Attached */,
264
- isInitDataQueueLocked: false,
265
- data: { mediaKeysData: mediaKeysInfo } };
266
- if (prevState !== ContentDecryptorState.ReadyForContent) {
267
- this.trigger("stateChange", ContentDecryptorState.ReadyForContent);
268
- }
269
- if (!this._isStopped()) {
270
- this._processCurrentInitDataQueue();
271
- }
272
- return [2 /*return*/];
167
+ const stateToAttach = { emeImplementation: eme_1.default,
168
+ loadedSessionsStore: stores.loadedSessionsStore,
169
+ mediaKeySystemAccess,
170
+ mediaKeys,
171
+ keySystemOptions: options };
172
+ log_1.default.debug("DRM: Attaching current MediaKeys");
173
+ (0, attach_media_keys_1.default)(mediaElement, stateToAttach, this._canceller.signal)
174
+ .then(async () => {
175
+ this._stateData.isMediaKeysAttached = 2 /* MediaKeyAttachmentStatus.Attached */;
176
+ const { serverCertificate } = options;
177
+ if (!(0, is_null_or_undefined_1.default)(serverCertificate)) {
178
+ const resSsc = await (0, set_server_certificate_1.default)(mediaKeys, serverCertificate);
179
+ if (resSsc.type === "error") {
180
+ this.trigger("warning", resSsc.value);
273
181
  }
274
- });
275
- }); })
276
- .catch(function (err) {
277
- _this._onFatalError(err);
182
+ }
183
+ if (this._isStopped()) { // We might be stopped since then
184
+ return;
185
+ }
186
+ const prevState = this._stateData.state;
187
+ this._stateData = { state: types_1.ContentDecryptorState.ReadyForContent,
188
+ isMediaKeysAttached: 2 /* MediaKeyAttachmentStatus.Attached */,
189
+ isInitDataQueueLocked: false,
190
+ data: { mediaKeysData: mediaKeysInfo } };
191
+ if (prevState !== types_1.ContentDecryptorState.ReadyForContent) {
192
+ this.trigger("stateChange", types_1.ContentDecryptorState.ReadyForContent);
193
+ }
194
+ if (!this._isStopped()) {
195
+ this._processCurrentInitDataQueue();
196
+ }
197
+ })
198
+ .catch((err) => {
199
+ this._onFatalError(err);
278
200
  });
279
- };
201
+ }
280
202
  /**
281
203
  * Stop this `ContentDecryptor` instance:
282
204
  * - stop listening and reacting to the various event listeners
@@ -284,15 +206,15 @@ var ContentDecryptor = /** @class */ (function (_super) {
284
206
  *
285
207
  * Once disposed, a `ContentDecryptor` cannot be used anymore.
286
208
  */
287
- ContentDecryptor.prototype.dispose = function () {
209
+ dispose() {
288
210
  this.removeEventListener();
289
- this._stateData = { state: ContentDecryptorState.Disposed,
211
+ this._stateData = { state: types_1.ContentDecryptorState.Disposed,
290
212
  isMediaKeysAttached: undefined,
291
213
  isInitDataQueueLocked: undefined,
292
214
  data: null };
293
215
  this._canceller.cancel();
294
216
  this.trigger("stateChange", this._stateData.state);
295
- };
217
+ }
296
218
  /**
297
219
  * Method to call when new protection initialization data is encounted on the
298
220
  * content.
@@ -302,8 +224,7 @@ var ContentDecryptor = /** @class */ (function (_super) {
302
224
  *
303
225
  * @param {Object} initializationData
304
226
  */
305
- ContentDecryptor.prototype.onInitializationData = function (initializationData) {
306
- var _this = this;
227
+ onInitializationData(initializationData) {
307
228
  if (this._stateData.isInitDataQueueLocked !== false) {
308
229
  if (this._isStopped()) {
309
230
  throw new Error("ContentDecryptor either disposed or stopped.");
@@ -311,11 +232,11 @@ var ContentDecryptor = /** @class */ (function (_super) {
311
232
  this._initDataQueue.push(initializationData);
312
233
  return;
313
234
  }
314
- var mediaKeysData = this._stateData.data.mediaKeysData;
315
- var processedInitializationData = __assign(__assign({}, initializationData), { values: new InitDataValuesContainer(initializationData.values) });
235
+ const { mediaKeysData } = this._stateData.data;
236
+ const processedInitializationData = Object.assign(Object.assign({}, initializationData), { values: new init_data_values_container_1.default(initializationData.values) });
316
237
  this._processInitializationData(processedInitializationData, mediaKeysData)
317
- .catch(function (err) { _this._onFatalError(err); });
318
- };
238
+ .catch(err => { this._onFatalError(err); });
239
+ }
319
240
  /**
320
241
  * Async logic run each time new initialization data has to be processed.
321
242
  * The promise return may reject, in which case a fatal error should be linked
@@ -325,233 +246,223 @@ var ContentDecryptor = /** @class */ (function (_super) {
325
246
  * @param {Object} initializationData
326
247
  * @returns {Promise.<void>}
327
248
  */
328
- ContentDecryptor.prototype._processInitializationData = function (initializationData, mediaKeysData) {
329
- return __awaiter(this, void 0, void 0, function () {
330
- var mediaKeySystemAccess, stores, options, firstCreatedSession, keyIds, hexKids, period, createdSessions, periodKeys, _i, createdSessions_1, createdSess, periodKeysArr, _a, periodKeysArr_1, kid, _loop_1, _b, periodKeysArr_2, innerKid, wantedSessionType, _c, EME_DEFAULT_MAX_SIMULTANEOUS_MEDIA_KEY_SESSIONS, EME_MAX_STORED_PERSISTENT_SESSION_INFORMATION, maxSessionCacheSize, sessionRes, sessionInfo, _d, mediaKeySession, sessionType, isSessionPersisted, requestData, error_1, entry, indexInCurrent;
331
- var _this = this;
332
- return __generator(this, function (_e) {
333
- switch (_e.label) {
334
- case 0:
335
- mediaKeySystemAccess = mediaKeysData.mediaKeySystemAccess, stores = mediaKeysData.stores, options = mediaKeysData.options;
336
- if (this._tryToUseAlreadyCreatedSession(initializationData, mediaKeysData) ||
337
- this._isStopped()) // _isStopped is voluntarly checked after here
338
- {
339
- return [2 /*return*/];
340
- }
341
- if (options.singleLicensePer === "content") {
342
- firstCreatedSession = arrayFind(this._currentSessions, function (x) {
343
- return x.source === "created-session" /* MediaKeySessionLoadingType.Created */;
344
- });
345
- if (firstCreatedSession !== undefined) {
346
- keyIds = initializationData.keyIds;
347
- if (keyIds === undefined) {
348
- if (initializationData.content === undefined) {
349
- log.warn("DRM: Unable to fallback from a non-decipherable quality.");
350
- }
351
- else {
352
- blackListProtectionData(initializationData.content.manifest, initializationData);
353
- }
354
- return [2 /*return*/];
355
- }
356
- firstCreatedSession.record.associateKeyIds(keyIds);
357
- if (initializationData.content !== undefined) {
358
- if (log.hasLevel("DEBUG")) {
359
- hexKids = keyIds
360
- .reduce(function (acc, kid) { return "".concat(acc, ", ").concat(bytesToHex(kid)); }, "");
361
- log.debug("DRM: Blacklisting new key ids", hexKids);
362
- }
363
- updateDecipherability(initializationData.content.manifest, [], keyIds, []);
364
- }
365
- return [2 /*return*/];
366
- }
367
- }
368
- else if (options.singleLicensePer === "periods" &&
369
- initializationData.content !== undefined) {
370
- period = initializationData.content.period;
371
- createdSessions = this._currentSessions
372
- .filter(function (x) { return x.source === "created-session" /* MediaKeySessionLoadingType.Created */; });
373
- periodKeys = new Set();
374
- addKeyIdsFromPeriod(periodKeys, period);
375
- for (_i = 0, createdSessions_1 = createdSessions; _i < createdSessions_1.length; _i++) {
376
- createdSess = createdSessions_1[_i];
377
- periodKeysArr = Array.from(periodKeys);
378
- for (_a = 0, periodKeysArr_1 = periodKeysArr; _a < periodKeysArr_1.length; _a++) {
379
- kid = periodKeysArr_1[_a];
380
- if (createdSess.record.isAssociatedWithKeyId(kid)) {
381
- createdSess.record.associateKeyIds(periodKeys.values());
382
- _loop_1 = function (innerKid) {
383
- if (!createdSess.keyStatuses.whitelisted
384
- .some(function (k) { return areArraysOfNumbersEqual(k, innerKid); }) &&
385
- !createdSess.keyStatuses.blacklisted
386
- .some(function (k) { return areArraysOfNumbersEqual(k, innerKid); })) {
387
- createdSess.keyStatuses.blacklisted.push(innerKid);
388
- }
389
- };
390
- // Re-loop through the Period's key ids to blacklist ones that are missing
391
- // from `createdSess`'s `keyStatuses` and to update the content's
392
- // decipherability.
393
- for (_b = 0, periodKeysArr_2 = periodKeysArr; _b < periodKeysArr_2.length; _b++) {
394
- innerKid = periodKeysArr_2[_b];
395
- _loop_1(innerKid);
396
- }
397
- updateDecipherability(initializationData.content.manifest, createdSess.keyStatuses.whitelisted, createdSess.keyStatuses.blacklisted, []);
398
- return [2 /*return*/];
399
- }
400
- }
401
- }
402
- }
403
- // /!\ Do not forget to unlock when done
404
- // TODO this is error-prone and can lead to performance issue when loading
405
- // persistent sessions.
406
- // Can we find a better strategy?
407
- this._lockInitDataQueue();
408
- if (isNullOrUndefined(options.persistentLicenseConfig)) {
409
- wantedSessionType = "temporary";
410
- }
411
- else if (!canCreatePersistentSession(mediaKeySystemAccess)) {
412
- log.warn("DRM: Cannot create \"persistent-license\" session: not supported");
413
- wantedSessionType = "temporary";
414
- }
415
- else {
416
- wantedSessionType = "persistent-license";
417
- }
418
- _c = config.getCurrent(), EME_DEFAULT_MAX_SIMULTANEOUS_MEDIA_KEY_SESSIONS = _c.EME_DEFAULT_MAX_SIMULTANEOUS_MEDIA_KEY_SESSIONS, EME_MAX_STORED_PERSISTENT_SESSION_INFORMATION = _c.EME_MAX_STORED_PERSISTENT_SESSION_INFORMATION;
419
- maxSessionCacheSize = typeof options.maxSessionCacheSize === "number" ?
420
- options.maxSessionCacheSize :
421
- EME_DEFAULT_MAX_SIMULTANEOUS_MEDIA_KEY_SESSIONS;
422
- return [4 /*yield*/, createOrLoadSession(initializationData, stores, wantedSessionType, maxSessionCacheSize, this._canceller.signal)];
423
- case 1:
424
- sessionRes = _e.sent();
425
- if (this._isStopped()) {
426
- return [2 /*return*/];
427
- }
428
- sessionInfo = {
429
- record: sessionRes.value.keySessionRecord,
430
- source: sessionRes.type,
431
- keyStatuses: { whitelisted: [], blacklisted: [] },
432
- blacklistedSessionError: null,
433
- };
434
- this._currentSessions.push(sessionInfo);
435
- _d = sessionRes.value, mediaKeySession = _d.mediaKeySession, sessionType = _d.sessionType;
436
- isSessionPersisted = false;
437
- SessionEventsListener(mediaKeySession, options, mediaKeySystemAccess.keySystem, {
438
- onKeyUpdate: function (value) {
439
- var linkedKeys = getKeyIdsLinkedToSession(initializationData, sessionInfo.record, options.singleLicensePer, sessionInfo.source === "created-session" /* MediaKeySessionLoadingType.Created */, value.whitelistedKeyIds, value.blacklistedKeyIds);
440
- sessionInfo.record.associateKeyIds(linkedKeys.whitelisted);
441
- sessionInfo.record.associateKeyIds(linkedKeys.blacklisted);
442
- sessionInfo.keyStatuses = { whitelisted: linkedKeys.whitelisted,
443
- blacklisted: linkedKeys.blacklisted };
444
- if (sessionInfo.record.getAssociatedKeyIds().length !== 0 &&
445
- sessionType === "persistent-license" &&
446
- stores.persistentSessionsStore !== null &&
447
- !isSessionPersisted) {
448
- var persistentSessionsStore = stores.persistentSessionsStore;
449
- cleanOldStoredPersistentInfo(persistentSessionsStore, EME_MAX_STORED_PERSISTENT_SESSION_INFORMATION - 1);
450
- persistentSessionsStore.add(initializationData, sessionInfo.record.getAssociatedKeyIds(), mediaKeySession);
451
- isSessionPersisted = true;
452
- }
453
- if (initializationData.content !== undefined) {
454
- updateDecipherability(initializationData.content.manifest, linkedKeys.whitelisted, linkedKeys.blacklisted, []);
455
- }
456
- _this._unlockInitDataQueue();
457
- },
458
- onWarning: function (value) {
459
- _this.trigger("warning", value);
460
- },
461
- onError: function (err) {
462
- var _a;
463
- if (err instanceof DecommissionedSessionError) {
464
- log.warn("DRM: A session's closing condition has been triggered");
465
- _this._lockInitDataQueue();
466
- var indexOf = _this._currentSessions.indexOf(sessionInfo);
467
- if (indexOf >= 0) {
468
- _this._currentSessions.splice(indexOf);
469
- }
470
- if (initializationData.content !== undefined) {
471
- updateDecipherability(initializationData.content.manifest, [], [], sessionInfo.record.getAssociatedKeyIds());
472
- }
473
- (_a = stores.persistentSessionsStore) === null || _a === void 0 ? void 0 : _a.delete(mediaKeySession.sessionId);
474
- stores.loadedSessionsStore.closeSession(mediaKeySession)
475
- .catch(function (e) {
476
- var closeError = e instanceof Error ? e :
477
- "unknown error";
478
- log.warn("DRM: failed to close expired session", closeError);
479
- })
480
- .then(function () { return _this._unlockInitDataQueue(); })
481
- .catch(function (retryError) { return _this._onFatalError(retryError); });
482
- if (!_this._isStopped()) {
483
- _this.trigger("warning", err.reason);
484
- }
485
- return;
486
- }
487
- if (!(err instanceof BlacklistedSessionError)) {
488
- _this._onFatalError(err);
489
- return;
490
- }
491
- sessionInfo.blacklistedSessionError = err;
492
- if (initializationData.content !== undefined) {
493
- var manifest = initializationData.content.manifest;
494
- log.info("DRM: blacklisting Representations based on " +
495
- "protection data.");
496
- blackListProtectionData(manifest, initializationData);
497
- }
498
- _this._unlockInitDataQueue();
499
- // TODO warning for blacklisted session?
500
- },
501
- }, this._canceller.signal);
502
- if (options.singleLicensePer === undefined ||
503
- options.singleLicensePer === "init-data") {
504
- this._unlockInitDataQueue();
505
- }
506
- if (!(sessionRes.type === "created-session" /* MediaKeySessionLoadingType.Created */)) return [3 /*break*/, 5];
507
- requestData = initializationData.values.constructRequestData();
508
- _e.label = 2;
509
- case 2:
510
- _e.trys.push([2, 4, , 5]);
511
- return [4 /*yield*/, stores.loadedSessionsStore.generateLicenseRequest(mediaKeySession, initializationData.type, requestData)];
512
- case 3:
513
- _e.sent();
514
- return [3 /*break*/, 5];
515
- case 4:
516
- error_1 = _e.sent();
517
- entry = stores.loadedSessionsStore.getEntryForSession(mediaKeySession);
518
- if (entry === null || entry.closingStatus.type !== "none") {
519
- indexInCurrent = this._currentSessions.indexOf(sessionInfo);
520
- if (indexInCurrent >= 0) {
521
- this._currentSessions.splice(indexInCurrent, 1);
249
+ async _processInitializationData(initializationData, mediaKeysData) {
250
+ const { mediaKeySystemAccess, stores, options } = mediaKeysData;
251
+ if (this._tryToUseAlreadyCreatedSession(initializationData, mediaKeysData) ||
252
+ this._isStopped()) // _isStopped is voluntarly checked after here
253
+ {
254
+ return;
255
+ }
256
+ if (options.singleLicensePer === "content") {
257
+ const firstCreatedSession = (0, array_find_1.default)(this._currentSessions, (x) => x.source === "created-session" /* MediaKeySessionLoadingType.Created */);
258
+ if (firstCreatedSession !== undefined) {
259
+ // We already fetched a `singleLicensePer: "content"` license, yet we
260
+ // could not use the already-created MediaKeySession with it.
261
+ // It means that we'll never handle it and we should thus blacklist it.
262
+ const keyIds = initializationData.keyIds;
263
+ if (keyIds === undefined) {
264
+ if (initializationData.content === undefined) {
265
+ log_1.default.warn("DRM: Unable to fallback from a non-decipherable quality.");
266
+ }
267
+ else {
268
+ blackListProtectionData(initializationData.content.manifest, initializationData);
269
+ }
270
+ return;
271
+ }
272
+ firstCreatedSession.record.associateKeyIds(keyIds);
273
+ if (initializationData.content !== undefined) {
274
+ if (log_1.default.hasLevel("DEBUG")) {
275
+ const hexKids = keyIds
276
+ .reduce((acc, kid) => `${acc}, ${(0, string_parsing_1.bytesToHex)(kid)}`, "");
277
+ log_1.default.debug("DRM: Blacklisting new key ids", hexKids);
278
+ }
279
+ updateDecipherability(initializationData.content.manifest, [], keyIds, []);
280
+ }
281
+ return;
282
+ }
283
+ }
284
+ else if (options.singleLicensePer === "periods" &&
285
+ initializationData.content !== undefined) {
286
+ const { period } = initializationData.content;
287
+ const createdSessions = this._currentSessions
288
+ .filter(x => x.source === "created-session" /* MediaKeySessionLoadingType.Created */);
289
+ const periodKeys = new Set();
290
+ addKeyIdsFromPeriod(periodKeys, period);
291
+ for (const createdSess of createdSessions) {
292
+ const periodKeysArr = Array.from(periodKeys);
293
+ for (const kid of periodKeysArr) {
294
+ if (createdSess.record.isAssociatedWithKeyId(kid)) {
295
+ createdSess.record.associateKeyIds(periodKeys.values());
296
+ // Re-loop through the Period's key ids to blacklist ones that are missing
297
+ // from `createdSess`'s `keyStatuses` and to update the content's
298
+ // decipherability.
299
+ for (const innerKid of periodKeysArr) {
300
+ if (!createdSess.keyStatuses.whitelisted
301
+ .some(k => (0, are_arrays_of_numbers_equal_1.default)(k, innerKid)) &&
302
+ !createdSess.keyStatuses.blacklisted
303
+ .some(k => (0, are_arrays_of_numbers_equal_1.default)(k, innerKid))) {
304
+ createdSess.keyStatuses.blacklisted.push(innerKid);
522
305
  }
523
- return [2 /*return*/, Promise.resolve()];
524
306
  }
525
- throw new EncryptedMediaError("KEY_GENERATE_REQUEST_ERROR", error_1 instanceof Error ? error_1.toString() :
526
- "Unknown error");
527
- case 5: return [2 /*return*/, Promise.resolve()];
307
+ updateDecipherability(initializationData.content.manifest, createdSess.keyStatuses.whitelisted, createdSess.keyStatuses.blacklisted, []);
308
+ return;
309
+ }
528
310
  }
529
- });
530
- });
531
- };
532
- ContentDecryptor.prototype._tryToUseAlreadyCreatedSession = function (initializationData, mediaKeysData) {
533
- var stores = mediaKeysData.stores, options = mediaKeysData.options;
311
+ }
312
+ }
313
+ // /!\ Do not forget to unlock when done
314
+ // TODO this is error-prone and can lead to performance issue when loading
315
+ // persistent sessions.
316
+ // Can we find a better strategy?
317
+ this._lockInitDataQueue();
318
+ let wantedSessionType;
319
+ if ((0, is_null_or_undefined_1.default)(options.persistentLicenseConfig)) {
320
+ wantedSessionType = "temporary";
321
+ }
322
+ else if (!canCreatePersistentSession(mediaKeySystemAccess)) {
323
+ log_1.default.warn("DRM: Cannot create \"persistent-license\" session: not supported");
324
+ wantedSessionType = "temporary";
325
+ }
326
+ else {
327
+ wantedSessionType = "persistent-license";
328
+ }
329
+ const { EME_DEFAULT_MAX_SIMULTANEOUS_MEDIA_KEY_SESSIONS, EME_MAX_STORED_PERSISTENT_SESSION_INFORMATION } = config_1.default.getCurrent();
330
+ const maxSessionCacheSize = typeof options.maxSessionCacheSize === "number" ?
331
+ options.maxSessionCacheSize :
332
+ EME_DEFAULT_MAX_SIMULTANEOUS_MEDIA_KEY_SESSIONS;
333
+ const sessionRes = await (0, create_or_load_session_1.default)(initializationData, stores, wantedSessionType, maxSessionCacheSize, this._canceller.signal);
334
+ if (this._isStopped()) {
335
+ return;
336
+ }
337
+ const sessionInfo = {
338
+ record: sessionRes.value.keySessionRecord,
339
+ source: sessionRes.type,
340
+ keyStatuses: { whitelisted: [], blacklisted: [] },
341
+ blacklistedSessionError: null,
342
+ };
343
+ this._currentSessions.push(sessionInfo);
344
+ const { mediaKeySession, sessionType } = sessionRes.value;
345
+ /**
346
+ * We only store persistent sessions once its keys are known.
347
+ * This boolean allows to know if this session has already been
348
+ * persisted or not.
349
+ */
350
+ let isSessionPersisted = false;
351
+ (0, session_events_listener_1.default)(mediaKeySession, options, mediaKeySystemAccess.keySystem, {
352
+ onKeyUpdate: (value) => {
353
+ const linkedKeys = getKeyIdsLinkedToSession(initializationData, sessionInfo.record, options.singleLicensePer, sessionInfo.source === "created-session" /* MediaKeySessionLoadingType.Created */, value.whitelistedKeyIds, value.blacklistedKeyIds);
354
+ sessionInfo.record.associateKeyIds(linkedKeys.whitelisted);
355
+ sessionInfo.record.associateKeyIds(linkedKeys.blacklisted);
356
+ sessionInfo.keyStatuses = { whitelisted: linkedKeys.whitelisted,
357
+ blacklisted: linkedKeys.blacklisted };
358
+ if (sessionInfo.record.getAssociatedKeyIds().length !== 0 &&
359
+ sessionType === "persistent-license" &&
360
+ stores.persistentSessionsStore !== null &&
361
+ !isSessionPersisted) {
362
+ const { persistentSessionsStore } = stores;
363
+ (0, clean_old_stored_persistent_info_1.default)(persistentSessionsStore, EME_MAX_STORED_PERSISTENT_SESSION_INFORMATION - 1);
364
+ persistentSessionsStore.add(initializationData, sessionInfo.record.getAssociatedKeyIds(), mediaKeySession);
365
+ isSessionPersisted = true;
366
+ }
367
+ if (initializationData.content !== undefined) {
368
+ updateDecipherability(initializationData.content.manifest, linkedKeys.whitelisted, linkedKeys.blacklisted, []);
369
+ }
370
+ this._unlockInitDataQueue();
371
+ },
372
+ onWarning: (value) => {
373
+ this.trigger("warning", value);
374
+ },
375
+ onError: (err) => {
376
+ var _a;
377
+ if (err instanceof check_key_statuses_1.DecommissionedSessionError) {
378
+ log_1.default.warn("DRM: A session's closing condition has been triggered");
379
+ this._lockInitDataQueue();
380
+ const indexOf = this._currentSessions.indexOf(sessionInfo);
381
+ if (indexOf >= 0) {
382
+ this._currentSessions.splice(indexOf);
383
+ }
384
+ if (initializationData.content !== undefined) {
385
+ updateDecipherability(initializationData.content.manifest, [], [], sessionInfo.record.getAssociatedKeyIds());
386
+ }
387
+ (_a = stores.persistentSessionsStore) === null || _a === void 0 ? void 0 : _a.delete(mediaKeySession.sessionId);
388
+ stores.loadedSessionsStore.closeSession(mediaKeySession)
389
+ .catch(e => {
390
+ const closeError = e instanceof Error ? e :
391
+ "unknown error";
392
+ log_1.default.warn("DRM: failed to close expired session", closeError);
393
+ })
394
+ .then(() => this._unlockInitDataQueue())
395
+ .catch((retryError) => this._onFatalError(retryError));
396
+ if (!this._isStopped()) {
397
+ this.trigger("warning", err.reason);
398
+ }
399
+ return;
400
+ }
401
+ if (!(err instanceof session_events_listener_1.BlacklistedSessionError)) {
402
+ this._onFatalError(err);
403
+ return;
404
+ }
405
+ sessionInfo.blacklistedSessionError = err;
406
+ if (initializationData.content !== undefined) {
407
+ const { manifest } = initializationData.content;
408
+ log_1.default.info("DRM: blacklisting Representations based on " +
409
+ "protection data.");
410
+ blackListProtectionData(manifest, initializationData);
411
+ }
412
+ this._unlockInitDataQueue();
413
+ // TODO warning for blacklisted session?
414
+ },
415
+ }, this._canceller.signal);
416
+ if (options.singleLicensePer === undefined ||
417
+ options.singleLicensePer === "init-data") {
418
+ this._unlockInitDataQueue();
419
+ }
420
+ if (sessionRes.type === "created-session" /* MediaKeySessionLoadingType.Created */) {
421
+ const requestData = initializationData.values.constructRequestData();
422
+ try {
423
+ await stores.loadedSessionsStore.generateLicenseRequest(mediaKeySession, initializationData.type, requestData);
424
+ }
425
+ catch (error) {
426
+ // First check that the error was not due to the MediaKeySession closing
427
+ // or being closed
428
+ const entry = stores.loadedSessionsStore.getEntryForSession(mediaKeySession);
429
+ if (entry === null || entry.closingStatus.type !== "none") {
430
+ // MediaKeySession closing/closed: Just remove from handled list and abort.
431
+ const indexInCurrent = this._currentSessions.indexOf(sessionInfo);
432
+ if (indexInCurrent >= 0) {
433
+ this._currentSessions.splice(indexInCurrent, 1);
434
+ }
435
+ return Promise.resolve();
436
+ }
437
+ throw new errors_1.EncryptedMediaError("KEY_GENERATE_REQUEST_ERROR", error instanceof Error ? error.toString() :
438
+ "Unknown error");
439
+ }
440
+ }
441
+ return Promise.resolve();
442
+ }
443
+ _tryToUseAlreadyCreatedSession(initializationData, mediaKeysData) {
444
+ const { stores, options } = mediaKeysData;
534
445
  /**
535
446
  * If set, a currently-used key session is already compatible to this
536
447
  * initialization data.
537
448
  */
538
- var compatibleSessionInfo = arrayFind(this._currentSessions, function (x) { return x.record.isCompatibleWith(initializationData); });
449
+ const compatibleSessionInfo = (0, array_find_1.default)(this._currentSessions, (x) => x.record.isCompatibleWith(initializationData));
539
450
  if (compatibleSessionInfo === undefined) {
540
451
  return false;
541
452
  }
542
453
  // Check if the compatible session is blacklisted
543
- var blacklistedSessionError = compatibleSessionInfo.blacklistedSessionError;
544
- if (!isNullOrUndefined(blacklistedSessionError)) {
454
+ const blacklistedSessionError = compatibleSessionInfo.blacklistedSessionError;
455
+ if (!(0, is_null_or_undefined_1.default)(blacklistedSessionError)) {
545
456
  if (initializationData.type === undefined ||
546
457
  initializationData.content === undefined) {
547
- log.error("DRM: This initialization data has already been blacklisted " +
458
+ log_1.default.error("DRM: This initialization data has already been blacklisted " +
548
459
  "but the current content is not known.");
549
460
  return true;
550
461
  }
551
462
  else {
552
- log.info("DRM: This initialization data has already been blacklisted. " +
463
+ log_1.default.info("DRM: This initialization data has already been blacklisted. " +
553
464
  "Blacklisting the related content.");
554
- var manifest = initializationData.content.manifest;
465
+ const { manifest } = initializationData.content;
555
466
  blackListProtectionData(manifest, initializationData);
556
467
  return true;
557
468
  }
@@ -562,7 +473,7 @@ var ContentDecryptor = /** @class */ (function (_super) {
562
473
  * If set to `true`, the Representation(s) linked to this
563
474
  * initialization data's key id should be marked as "not decipherable".
564
475
  */
565
- var isUndecipherable = void 0;
476
+ let isUndecipherable;
566
477
  if (options.singleLicensePer === undefined ||
567
478
  options.singleLicensePer === "init-data") {
568
479
  // Note: In the default "init-data" mode, we only avoid a
@@ -573,8 +484,8 @@ var ContentDecryptor = /** @class */ (function (_super) {
573
484
  // This is to enforce v3.x.x retro-compatibility: we cannot
574
485
  // fallback from a Representation unless some RxPlayer option
575
486
  // documentating this behavior has been set.
576
- var blacklisted = compatibleSessionInfo.keyStatuses.blacklisted;
577
- isUndecipherable = areSomeKeyIdsContainedIn(initializationData.keyIds, blacklisted);
487
+ const { blacklisted } = compatibleSessionInfo.keyStatuses;
488
+ isUndecipherable = (0, key_id_comparison_1.areSomeKeyIdsContainedIn)(initializationData.keyIds, blacklisted);
578
489
  }
579
490
  else {
580
491
  // In any other mode, as soon as not all of this initialization
@@ -582,15 +493,15 @@ var ContentDecryptor = /** @class */ (function (_super) {
582
493
  // the corresponding Representation as "not decipherable".
583
494
  // This is because we've no such retro-compatibility guarantee to
584
495
  // make there.
585
- var whitelisted = compatibleSessionInfo.keyStatuses.whitelisted;
586
- isUndecipherable = !areAllKeyIdsContainedIn(initializationData.keyIds, whitelisted);
496
+ const { whitelisted } = compatibleSessionInfo.keyStatuses;
497
+ isUndecipherable = !(0, key_id_comparison_1.areAllKeyIdsContainedIn)(initializationData.keyIds, whitelisted);
587
498
  }
588
499
  if (isUndecipherable) {
589
500
  if (initializationData.content === undefined) {
590
- log.error("DRM: Cannot forbid key id, the content is unknown.");
501
+ log_1.default.error("DRM: Cannot forbid key id, the content is unknown.");
591
502
  return true;
592
503
  }
593
- log.info("DRM: Current initialization data is linked to blacklisted keys. " +
504
+ log_1.default.info("DRM: Current initialization data is linked to blacklisted keys. " +
594
505
  "Marking Representations as not decipherable");
595
506
  updateDecipherability(initializationData.content.manifest, [], initializationData.keyIds, []);
596
507
  return true;
@@ -599,26 +510,26 @@ var ContentDecryptor = /** @class */ (function (_super) {
599
510
  // If we reached here, it means that this initialization data is not
600
511
  // blacklisted in any way.
601
512
  // Search loaded session and put it on top of the cache if it exists.
602
- var entry = stores.loadedSessionsStore.reuse(initializationData);
513
+ const entry = stores.loadedSessionsStore.reuse(initializationData);
603
514
  if (entry !== null) {
604
515
  // TODO update decipherability to `true` if not?
605
- log.debug("DRM: Init data already processed. Skipping it.");
516
+ log_1.default.debug("DRM: Init data already processed. Skipping it.");
606
517
  return true;
607
518
  }
608
519
  // Session not found in `loadedSessionsStore`, it might have been closed
609
520
  // since.
610
521
  // Remove from `this._currentSessions` and start again.
611
- var indexOf = this._currentSessions.indexOf(compatibleSessionInfo);
522
+ const indexOf = this._currentSessions.indexOf(compatibleSessionInfo);
612
523
  if (indexOf === -1) {
613
- log.error("DRM: Unable to remove processed init data: not found.");
524
+ log_1.default.error("DRM: Unable to remove processed init data: not found.");
614
525
  }
615
526
  else {
616
- log.debug("DRM: A session from a processed init data is not available " +
527
+ log_1.default.debug("DRM: A session from a processed init data is not available " +
617
528
  "anymore. Re-processing it.");
618
529
  this._currentSessions.splice(indexOf, 1);
619
530
  }
620
531
  return false;
621
- };
532
+ }
622
533
  /**
623
534
  * Callback that should be called if an error that made the current
624
535
  * `ContentDecryptor` instance unusable arised.
@@ -629,48 +540,48 @@ var ContentDecryptor = /** @class */ (function (_super) {
629
540
  * @param {*} err - The error object which describes the issue. Will be
630
541
  * formatted and sent in an "error" event.
631
542
  */
632
- ContentDecryptor.prototype._onFatalError = function (err) {
543
+ _onFatalError(err) {
633
544
  if (this._canceller.isUsed()) {
634
545
  return;
635
546
  }
636
- var formattedErr = err instanceof Error ?
547
+ const formattedErr = err instanceof Error ?
637
548
  err :
638
- new OtherError("NONE", "Unknown decryption error");
549
+ new errors_1.OtherError("NONE", "Unknown decryption error");
639
550
  this.error = formattedErr;
640
551
  this._initDataQueue.length = 0;
641
- this._stateData = { state: ContentDecryptorState.Error,
552
+ this._stateData = { state: types_1.ContentDecryptorState.Error,
642
553
  isMediaKeysAttached: undefined,
643
554
  isInitDataQueueLocked: undefined,
644
555
  data: null };
645
556
  this._canceller.cancel();
646
557
  this.trigger("error", formattedErr);
647
558
  // The previous trigger might have lead to a disposal of the `ContentDecryptor`.
648
- if (this._stateData.state === ContentDecryptorState.Error) {
559
+ if (this._stateData.state === types_1.ContentDecryptorState.Error) {
649
560
  this.trigger("stateChange", this._stateData.state);
650
561
  }
651
- };
562
+ }
652
563
  /**
653
564
  * Return `true` if the `ContentDecryptor` has either been disposed or
654
565
  * encountered a fatal error which made it stop.
655
566
  * @returns {boolean}
656
567
  */
657
- ContentDecryptor.prototype._isStopped = function () {
658
- return this._stateData.state === ContentDecryptorState.Disposed ||
659
- this._stateData.state === ContentDecryptorState.Error;
660
- };
568
+ _isStopped() {
569
+ return this._stateData.state === types_1.ContentDecryptorState.Disposed ||
570
+ this._stateData.state === types_1.ContentDecryptorState.Error;
571
+ }
661
572
  /**
662
573
  * Start processing the next initialization data of the `_initDataQueue` if it
663
574
  * isn't lock.
664
575
  */
665
- ContentDecryptor.prototype._processCurrentInitDataQueue = function () {
576
+ _processCurrentInitDataQueue() {
666
577
  while (this._stateData.isInitDataQueueLocked === false) {
667
- var initData = this._initDataQueue.shift();
578
+ const initData = this._initDataQueue.shift();
668
579
  if (initData === undefined) {
669
580
  return;
670
581
  }
671
582
  this.onInitializationData(initData);
672
583
  }
673
- };
584
+ }
674
585
  /**
675
586
  * Lock new initialization data (from the `_initDataQueue`) from being
676
587
  * processed until `_unlockInitDataQueue` is called.
@@ -678,27 +589,26 @@ var ContentDecryptor = /** @class */ (function (_super) {
678
589
  * You may want to call this method when performing operations which may have
679
590
  * an impact on the handling of other initialization data.
680
591
  */
681
- ContentDecryptor.prototype._lockInitDataQueue = function () {
592
+ _lockInitDataQueue() {
682
593
  if (this._stateData.isInitDataQueueLocked === false) {
683
594
  this._stateData.isInitDataQueueLocked = true;
684
595
  }
685
- };
596
+ }
686
597
  /**
687
598
  * Unlock `_initDataQueue` and start processing the first element.
688
599
  *
689
600
  * Should have no effect if the `_initDataQueue` was not locked.
690
601
  */
691
- ContentDecryptor.prototype._unlockInitDataQueue = function () {
602
+ _unlockInitDataQueue() {
692
603
  if (this._stateData.isMediaKeysAttached !== 2 /* MediaKeyAttachmentStatus.Attached */) {
693
- log.error("DRM: Trying to unlock in the wrong state");
604
+ log_1.default.error("DRM: Trying to unlock in the wrong state");
694
605
  return;
695
606
  }
696
607
  this._stateData.isInitDataQueueLocked = false;
697
608
  this._processCurrentInitDataQueue();
698
- };
699
- return ContentDecryptor;
700
- }(EventEmitter));
701
- export default ContentDecryptor;
609
+ }
610
+ }
611
+ exports.default = ContentDecryptor;
702
612
  /**
703
613
  * Returns `true` if the given MediaKeySystemAccess can create
704
614
  * "persistent-license" MediaKeySessions.
@@ -706,9 +616,9 @@ export default ContentDecryptor;
706
616
  * @returns {Boolean}
707
617
  */
708
618
  function canCreatePersistentSession(mediaKeySystemAccess) {
709
- var sessionTypes = mediaKeySystemAccess.getConfiguration().sessionTypes;
619
+ const { sessionTypes } = mediaKeySystemAccess.getConfiguration();
710
620
  return sessionTypes !== undefined &&
711
- arrayIncludes(sessionTypes, "persistent-license");
621
+ (0, array_includes_1.default)(sessionTypes, "persistent-license");
712
622
  }
713
623
  /**
714
624
  * Change the decipherability of Representations which have their key id in one
@@ -729,29 +639,25 @@ function canCreatePersistentSession(mediaKeySystemAccess) {
729
639
  * @param {Array.<Uint8Array>} delistedKeyIds
730
640
  */
731
641
  function updateDecipherability(manifest, whitelistedKeyIds, blacklistedKeyIds, delistedKeyIds) {
732
- manifest.updateRepresentationsDeciperability(function (representation) {
642
+ manifest.updateRepresentationsDeciperability((representation) => {
733
643
  if (representation.contentProtections === undefined) {
734
644
  return representation.decipherable;
735
645
  }
736
- var contentKIDs = representation.contentProtections.keyIds;
646
+ const contentKIDs = representation.contentProtections.keyIds;
737
647
  if (contentKIDs !== undefined) {
738
- for (var _i = 0, contentKIDs_1 = contentKIDs; _i < contentKIDs_1.length; _i++) {
739
- var elt = contentKIDs_1[_i];
740
- for (var _a = 0, blacklistedKeyIds_1 = blacklistedKeyIds; _a < blacklistedKeyIds_1.length; _a++) {
741
- var blacklistedKeyId = blacklistedKeyIds_1[_a];
742
- if (areArraysOfNumbersEqual(blacklistedKeyId, elt.keyId)) {
648
+ for (const elt of contentKIDs) {
649
+ for (const blacklistedKeyId of blacklistedKeyIds) {
650
+ if ((0, are_arrays_of_numbers_equal_1.default)(blacklistedKeyId, elt.keyId)) {
743
651
  return false;
744
652
  }
745
653
  }
746
- for (var _b = 0, whitelistedKeyIds_1 = whitelistedKeyIds; _b < whitelistedKeyIds_1.length; _b++) {
747
- var whitelistedKeyId = whitelistedKeyIds_1[_b];
748
- if (areArraysOfNumbersEqual(whitelistedKeyId, elt.keyId)) {
654
+ for (const whitelistedKeyId of whitelistedKeyIds) {
655
+ if ((0, are_arrays_of_numbers_equal_1.default)(whitelistedKeyId, elt.keyId)) {
749
656
  return true;
750
657
  }
751
658
  }
752
- for (var _c = 0, delistedKeyIds_1 = delistedKeyIds; _c < delistedKeyIds_1.length; _c++) {
753
- var delistedKeyId = delistedKeyIds_1[_c];
754
- if (areArraysOfNumbersEqual(delistedKeyId, elt.keyId)) {
659
+ for (const delistedKeyId of delistedKeyIds) {
660
+ if ((0, are_arrays_of_numbers_equal_1.default)(delistedKeyId, elt.keyId)) {
755
661
  return undefined;
756
662
  }
757
663
  }
@@ -767,33 +673,27 @@ function updateDecipherability(manifest, whitelistedKeyIds, blacklistedKeyIds, d
767
673
  * @param {Object} initData
768
674
  */
769
675
  function blackListProtectionData(manifest, initData) {
770
- manifest.updateRepresentationsDeciperability(function (representation) {
676
+ manifest.updateRepresentationsDeciperability((representation) => {
771
677
  var _a, _b;
772
678
  if (representation.decipherable === false) {
773
679
  return false;
774
680
  }
775
- var segmentProtections = (_b = (_a = representation.contentProtections) === null || _a === void 0 ? void 0 : _a.initData) !== null && _b !== void 0 ? _b : [];
776
- var _loop_2 = function (protection) {
681
+ const segmentProtections = (_b = (_a = representation.contentProtections) === null || _a === void 0 ? void 0 : _a.initData) !== null && _b !== void 0 ? _b : [];
682
+ for (const protection of segmentProtections) {
777
683
  if (initData.type === undefined ||
778
684
  protection.type === initData.type) {
779
- var containedInitData = initData.values.getFormattedValues()
780
- .every(function (undecipherableVal) {
781
- return protection.values.some(function (currVal) {
685
+ const containedInitData = initData.values.getFormattedValues()
686
+ .every(undecipherableVal => {
687
+ return protection.values.some(currVal => {
782
688
  return (undecipherableVal.systemId === undefined ||
783
689
  currVal.systemId === undecipherableVal.systemId) &&
784
- areArraysOfNumbersEqual(currVal.data, undecipherableVal.data);
690
+ (0, are_arrays_of_numbers_equal_1.default)(currVal.data, undecipherableVal.data);
785
691
  });
786
692
  });
787
693
  if (containedInitData) {
788
- return { value: false };
694
+ return false;
789
695
  }
790
696
  }
791
- };
792
- for (var _i = 0, segmentProtections_1 = segmentProtections; _i < segmentProtections_1.length; _i++) {
793
- var protection = segmentProtections_1[_i];
794
- var state_1 = _loop_2(protection);
795
- if (typeof state_1 === "object")
796
- return state_1.value;
797
697
  }
798
698
  return representation.decipherable;
799
699
  });
@@ -840,21 +740,18 @@ function getKeyIdsLinkedToSession(initializationData, keySessionRecord, singleLi
840
740
  * Every key id associated with the MediaKeySession, starting with
841
741
  * whitelisted ones.
842
742
  */
843
- var associatedKeyIds = __spreadArray(__spreadArray([], usableKeyIds, true), unusableKeyIds, true);
743
+ const associatedKeyIds = [...usableKeyIds,
744
+ ...unusableKeyIds];
844
745
  // Add all key ids associated to the `KeySessionRecord` yet not in
845
746
  // `usableKeyIds` nor in `unusableKeyIds`
846
- var allKnownKeyIds = keySessionRecord.getAssociatedKeyIds();
847
- var _loop_3 = function (kid) {
848
- if (!associatedKeyIds.some(function (ak) { return areArraysOfNumbersEqual(ak, kid); })) {
849
- if (log.hasLevel("DEBUG")) {
850
- log.debug("DRM: KeySessionRecord's key missing in the license, blacklisting it", bytesToHex(kid));
747
+ const allKnownKeyIds = keySessionRecord.getAssociatedKeyIds();
748
+ for (const kid of allKnownKeyIds) {
749
+ if (!associatedKeyIds.some(ak => (0, are_arrays_of_numbers_equal_1.default)(ak, kid))) {
750
+ if (log_1.default.hasLevel("DEBUG")) {
751
+ log_1.default.debug("DRM: KeySessionRecord's key missing in the license, blacklisting it", (0, string_parsing_1.bytesToHex)(kid));
851
752
  }
852
753
  associatedKeyIds.push(kid);
853
754
  }
854
- };
855
- for (var _i = 0, allKnownKeyIds_1 = allKnownKeyIds; _i < allKnownKeyIds_1.length; _i++) {
856
- var kid = allKnownKeyIds_1[_i];
857
- _loop_3(kid);
858
755
  }
859
756
  if (singleLicensePer !== undefined && singleLicensePer !== "init-data") {
860
757
  // We want to add the current key ids in the blacklist if it is
@@ -870,52 +767,44 @@ function getKeyIdsLinkedToSession(initializationData, keySessionRecord, singleLi
870
767
  // sure yet. Because in any other `singleLicensePer`, we
871
768
  // need a good implementation anyway, it doesn't matter
872
769
  // there.
873
- var expectedKeyIds = initializationData.keyIds, content = initializationData.content;
770
+ const { keyIds: expectedKeyIds, content } = initializationData;
874
771
  if (expectedKeyIds !== undefined) {
875
- var missingKeyIds = expectedKeyIds.filter(function (expected) {
876
- return !associatedKeyIds.some(function (k) { return areArraysOfNumbersEqual(k, expected); });
772
+ const missingKeyIds = expectedKeyIds.filter(expected => {
773
+ return !associatedKeyIds.some(k => (0, are_arrays_of_numbers_equal_1.default)(k, expected));
877
774
  });
878
775
  if (missingKeyIds.length > 0) {
879
- if (log.hasLevel("DEBUG")) {
880
- log.debug("DRM: init data keys missing in the license, blacklisting them", missingKeyIds.map(function (m) { return bytesToHex(m); }).join(", "));
776
+ if (log_1.default.hasLevel("DEBUG")) {
777
+ log_1.default.debug("DRM: init data keys missing in the license, blacklisting them", missingKeyIds.map(m => (0, string_parsing_1.bytesToHex)(m)).join(", "));
881
778
  }
882
- associatedKeyIds.push.apply(associatedKeyIds, missingKeyIds);
779
+ associatedKeyIds.push(...missingKeyIds);
883
780
  }
884
781
  }
885
782
  if (isCurrentLicense && content !== undefined) {
886
783
  if (singleLicensePer === "content") {
887
784
  // Put it in a Set to automatically filter out duplicates (by ref)
888
- var contentKeys = new Set();
889
- var manifest = content.manifest;
890
- for (var _b = 0, _c = manifest.periods; _b < _c.length; _b++) {
891
- var period = _c[_b];
785
+ const contentKeys = new Set();
786
+ const { manifest } = content;
787
+ for (const period of manifest.periods) {
892
788
  addKeyIdsFromPeriod(contentKeys, period);
893
789
  }
894
790
  mergeKeyIdSetIntoArray(contentKeys, associatedKeyIds);
895
791
  }
896
792
  else if (singleLicensePer === "periods") {
897
- var manifest = content.manifest;
898
- for (var _d = 0, _e = manifest.periods; _d < _e.length; _d++) {
899
- var period = _e[_d];
900
- var periodKeys = new Set();
793
+ const { manifest } = content;
794
+ for (const period of manifest.periods) {
795
+ const periodKeys = new Set();
901
796
  addKeyIdsFromPeriod(periodKeys, period);
902
797
  if (((_a = initializationData.content) === null || _a === void 0 ? void 0 : _a.period.id) === period.id) {
903
798
  mergeKeyIdSetIntoArray(periodKeys, associatedKeyIds);
904
799
  }
905
800
  else {
906
- var periodKeysArr = Array.from(periodKeys);
907
- var _loop_4 = function (kid) {
908
- var isFound = associatedKeyIds.some(function (k) { return areArraysOfNumbersEqual(k, kid); });
801
+ const periodKeysArr = Array.from(periodKeys);
802
+ for (const kid of periodKeysArr) {
803
+ const isFound = associatedKeyIds.some(k => (0, are_arrays_of_numbers_equal_1.default)(k, kid));
909
804
  if (isFound) {
910
805
  mergeKeyIdSetIntoArray(periodKeys, associatedKeyIds);
911
- return "break";
912
- }
913
- };
914
- for (var _f = 0, periodKeysArr_3 = periodKeysArr; _f < periodKeysArr_3.length; _f++) {
915
- var kid = periodKeysArr_3[_f];
916
- var state_2 = _loop_4(kid);
917
- if (state_2 === "break")
918
806
  break;
807
+ }
919
808
  }
920
809
  }
921
810
  }
@@ -933,16 +822,12 @@ function getKeyIdsLinkedToSession(initializationData, keySessionRecord, singleLi
933
822
  * @param {Array.<Uint8Array>} arr
934
823
  */
935
824
  function mergeKeyIdSetIntoArray(set, arr) {
936
- var setArr = Array.from(set.values());
937
- var _loop_5 = function (kid) {
938
- var isFound = arr.some(function (k) { return areArraysOfNumbersEqual(k, kid); });
825
+ const setArr = Array.from(set.values());
826
+ for (const kid of setArr) {
827
+ const isFound = arr.some(k => (0, are_arrays_of_numbers_equal_1.default)(k, kid));
939
828
  if (!isFound) {
940
829
  arr.push(kid);
941
830
  }
942
- };
943
- for (var _i = 0, setArr_1 = setArr; _i < setArr_1.length; _i++) {
944
- var kid = setArr_1[_i];
945
- _loop_5(kid);
946
831
  }
947
832
  }
948
833
  /**
@@ -951,14 +836,11 @@ function mergeKeyIdSetIntoArray(set, arr) {
951
836
  * @param {Object} period
952
837
  */
953
838
  function addKeyIdsFromPeriod(set, period) {
954
- for (var _i = 0, _a = period.getAdaptations(); _i < _a.length; _i++) {
955
- var adaptation = _a[_i];
956
- for (var _b = 0, _c = adaptation.representations; _b < _c.length; _b++) {
957
- var representation = _c[_b];
839
+ for (const adaptation of period.getAdaptations()) {
840
+ for (const representation of adaptation.representations) {
958
841
  if (representation.contentProtections !== undefined &&
959
842
  representation.contentProtections.keyIds !== undefined) {
960
- for (var _d = 0, _e = representation.contentProtections.keyIds; _d < _e.length; _d++) {
961
- var kidInf = _e[_d];
843
+ for (const kidInf of representation.contentProtections.keyIds) {
962
844
  set.add(kidInf.keyId);
963
845
  }
964
846
  }