rx-player 3.26.2 → 3.27.0-dev.20220317

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 (500) hide show
  1. package/.github/workflows/perfs.yml +22 -0
  2. package/CHANGELOG.md +33 -1
  3. package/FILES.md +5 -4
  4. package/VERSION +1 -1
  5. package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -2
  6. package/dist/_esm5.processed/compat/browser_detection.js +4 -2
  7. package/dist/_esm5.processed/compat/eme/close_session.d.ts +11 -5
  8. package/dist/_esm5.processed/compat/eme/close_session.js +144 -36
  9. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
  10. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +27 -24
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +53 -34
  12. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +43 -41
  13. package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
  14. package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
  15. package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
  16. package/dist/_esm5.processed/compat/eme/load_session.js +68 -17
  17. package/dist/_esm5.processed/compat/event_listeners.js +2 -1
  18. package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
  19. package/dist/_esm5.processed/config.d.ts +166 -1080
  20. package/dist/_esm5.processed/config.js +17 -1119
  21. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
  22. package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +28 -6
  23. package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +63 -12
  24. package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +1 -1
  25. package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
  26. package/dist/_esm5.processed/core/abr/pending_requests_store.js +3 -5
  27. package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +1 -1
  28. package/dist/_esm5.processed/core/abr/representation_estimator.js +2 -2
  29. package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
  30. package/dist/_esm5.processed/core/api/index.d.ts +2 -1
  31. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.d.ts +6 -0
  32. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +22 -4
  33. package/dist/_esm5.processed/core/api/option_utils.d.ts +3 -1
  34. package/dist/_esm5.processed/core/api/option_utils.js +19 -6
  35. package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
  36. package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
  37. package/dist/_esm5.processed/core/api/public_api.js +72 -33
  38. package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +6 -6
  39. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -51
  40. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +30 -75
  41. package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
  42. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +104 -0
  43. package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
  44. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +41 -0
  45. package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
  46. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +866 -0
  47. package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
  48. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
  49. package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
  50. package/dist/_esm5.processed/core/decrypt/create_session.js +174 -0
  51. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.d.ts +21 -0
  52. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
  53. package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
  54. package/dist/_esm5.processed/core/decrypt/find_key_system.js +300 -0
  55. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
  56. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
  57. package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
  58. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
  59. package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
  60. package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
  61. package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
  62. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
  63. package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
  64. package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
  65. package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
  66. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
  67. package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +120 -242
  68. package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
  69. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
  70. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
  71. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
  72. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
  73. package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
  74. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +85 -0
  75. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
  76. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
  77. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
  78. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
  79. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
  80. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
  81. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
  82. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
  83. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
  84. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
  85. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
  86. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
  87. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
  88. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +303 -0
  89. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
  90. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
  91. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
  92. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
  93. package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
  94. package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
  95. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
  96. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
  97. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +4 -4
  98. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -3
  99. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +2 -2
  100. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +6 -2
  101. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  102. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +1 -1
  103. package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
  104. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +3 -3
  105. package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
  106. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +5 -3
  107. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
  108. package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
  109. package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
  110. package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +4 -4
  111. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
  112. package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
  113. package/dist/_esm5.processed/core/init/stream_events_emitter/are_same_stream_events.d.ts +4 -4
  114. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
  115. package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +2 -2
  116. package/dist/_esm5.processed/core/init/types.d.ts +2 -4
  117. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
  118. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +3 -3
  119. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
  120. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +32 -31
  121. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +4 -4
  122. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
  123. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
  124. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
  125. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
  126. package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
  127. package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
  128. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
  129. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
  130. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
  131. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +1 -1
  132. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +2 -1
  133. package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
  134. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +5 -6
  135. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
  136. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
  137. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
  138. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
  139. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
  140. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
  141. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
  142. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
  143. package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
  144. package/dist/_esm5.processed/default_config.d.ts +1114 -0
  145. package/dist/_esm5.processed/default_config.js +1145 -0
  146. package/dist/_esm5.processed/errors/request_error.js +3 -1
  147. package/dist/_esm5.processed/experimental/index.d.ts +2 -0
  148. package/dist/_esm5.processed/experimental/index.js +2 -0
  149. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
  150. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.d.ts +2 -2
  151. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +2 -4
  152. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
  153. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -1
  154. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +1 -2
  155. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +1 -2
  156. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +3 -3
  157. package/dist/_esm5.processed/features/features_object.js +1 -1
  158. package/dist/_esm5.processed/features/initialize_features.js +1 -1
  159. package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
  160. package/dist/_esm5.processed/features/list/eme.js +5 -5
  161. package/dist/_esm5.processed/features/types.d.ts +3 -3
  162. package/dist/_esm5.processed/manifest/adaptation.d.ts +2 -2
  163. package/dist/_esm5.processed/manifest/adaptation.js +3 -1
  164. package/dist/_esm5.processed/manifest/manifest.d.ts +10 -23
  165. package/dist/_esm5.processed/manifest/manifest.js +10 -74
  166. package/dist/_esm5.processed/manifest/period.d.ts +3 -3
  167. package/dist/_esm5.processed/manifest/representation.d.ts +37 -5
  168. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +18 -18
  169. package/dist/_esm5.processed/manifest/types.d.ts +3 -3
  170. package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.d.ts +1 -1
  171. package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.d.ts +3 -3
  172. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +6 -6
  173. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +3 -3
  174. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +2 -2
  175. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
  176. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +14 -14
  177. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +17 -17
  178. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
  179. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +1 -1
  180. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +28 -20
  181. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +20 -5
  182. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
  183. package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +1 -1
  184. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +17 -35
  185. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +109 -96
  186. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +8 -8
  187. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
  188. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +18 -27
  189. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +25 -23
  190. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +21 -15
  191. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +19 -19
  192. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +15 -38
  193. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +8 -8
  194. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +30 -30
  195. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +3 -3
  196. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -1
  197. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +2 -2
  198. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +7 -7
  199. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
  200. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +8 -8
  201. package/dist/_esm5.processed/parsers/manifest/types.d.ts +28 -28
  202. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.d.ts +3 -2
  203. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +15 -5
  204. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +2 -2
  205. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.d.ts +11 -1
  206. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +31 -19
  207. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.d.ts +2 -2
  208. package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.d.ts +1 -1
  209. package/dist/_esm5.processed/public_types.d.ts +2 -2
  210. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +2 -1
  211. package/dist/_esm5.processed/transports/dash/image_pipelines.js +4 -1
  212. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
  213. package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
  214. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
  215. package/dist/_esm5.processed/transports/dash/segment_loader.js +2 -2
  216. package/dist/_esm5.processed/transports/dash/segment_parser.d.ts +1 -1
  217. package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
  218. package/dist/_esm5.processed/transports/dash/text_loader.d.ts +1 -1
  219. package/dist/_esm5.processed/transports/dash/text_loader.js +1 -1
  220. package/dist/_esm5.processed/transports/dash/text_parser.d.ts +1 -1
  221. package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
  222. package/dist/_esm5.processed/transports/local/segment_loader.d.ts +1 -2
  223. package/dist/_esm5.processed/transports/local/segment_loader.js +1 -1
  224. package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
  225. package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
  226. package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +1 -1
  227. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
  228. package/dist/_esm5.processed/transports/smooth/pipelines.js +69 -11
  229. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +0 -1
  230. package/dist/_esm5.processed/transports/smooth/segment_loader.js +2 -2
  231. package/dist/_esm5.processed/transports/types.d.ts +58 -30
  232. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
  233. package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +1 -1
  234. package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -1
  235. package/dist/_esm5.processed/utils/cast_to_observable.d.ts +1 -2
  236. package/dist/_esm5.processed/utils/cast_to_observable.js +1 -1
  237. package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
  238. package/dist/_esm5.processed/utils/deep_merge.js +53 -0
  239. package/dist/_esm5.processed/utils/reference.d.ts +29 -0
  240. package/dist/_esm5.processed/utils/reference.js +72 -24
  241. package/dist/_esm5.processed/utils/request/fetch.d.ts +4 -5
  242. package/dist/_esm5.processed/utils/request/fetch.js +8 -6
  243. package/dist/_esm5.processed/utils/request/xhr.d.ts +6 -6
  244. package/dist/_esm5.processed/utils/request/xhr.js +3 -2
  245. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.d.ts +1 -2
  246. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
  247. package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
  248. package/dist/_esm5.processed/utils/task_canceller.js +3 -3
  249. package/dist/rx-player.js +5242 -3190
  250. package/dist/rx-player.min.js +1 -1
  251. package/dummy +1 -0
  252. package/{dist/_esm5.processed/core/eme/dispose_eme.d.ts → experimental/index.d.ts} +1 -4
  253. package/{dist/_esm5.processed/core/eme/dispose_media_keys.d.ts → experimental/index.js} +1 -6
  254. package/package.json +33 -36
  255. package/scripts/build/templates/experimental/index.d.ts +16 -0
  256. package/scripts/build/templates/experimental/index.js +16 -0
  257. package/scripts/doc-generator/generate_header_html.js +6 -7
  258. package/scripts/doc-generator/generate_page_html.js +3 -4
  259. package/scripts/doc-generator/generate_page_list_html.js +4 -5
  260. package/scripts/doc-generator/generate_sidebar_html.js +4 -7
  261. package/scripts/doc-generator/utils.js +0 -11
  262. package/scripts/generate_demo_list.js +3 -3
  263. package/scripts/generate_documentation_list.js +3 -3
  264. package/scripts/launch_static_server.js +127 -67
  265. package/scripts/run_standalone_demo.js +1 -0
  266. package/scripts/start_demo_web_server.js +1 -0
  267. package/sonar-project.properties +1 -1
  268. package/src/README.md +6 -6
  269. package/src/compat/__tests__/fullscreen.test.ts +7 -7
  270. package/src/compat/__tests__/is_vtt_cue.test.ts +1 -1
  271. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
  272. package/src/compat/browser_detection.ts +4 -2
  273. package/src/compat/eme/close_session.ts +90 -56
  274. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
  275. package/src/compat/eme/custom_media_keys/index.ts +28 -41
  276. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +63 -46
  277. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +51 -49
  278. package/src/compat/eme/generate_key_request.ts +25 -33
  279. package/src/compat/eme/load_session.ts +29 -31
  280. package/src/compat/event_listeners.ts +2 -1
  281. package/src/compat/should_favour_custom_safari_EME.ts +5 -2
  282. package/src/config.ts +17 -1210
  283. package/src/core/README.md +1 -1
  284. package/src/core/abr/__tests__/{get_estimate_from_buffer_levels.test.ts → buffer_based_chooser.test.ts} +94 -123
  285. package/src/core/abr/bandwidth_estimator.ts +4 -4
  286. package/src/core/abr/buffer_based_chooser.ts +85 -20
  287. package/src/core/abr/network_analyzer.ts +6 -7
  288. package/src/core/abr/pending_requests_store.ts +3 -5
  289. package/src/core/abr/representation_estimator.ts +6 -3
  290. package/src/core/api/__tests__/get_player_state.test.ts +3 -3
  291. package/src/core/api/__tests__/option_utils.test.ts +17 -17
  292. package/src/core/api/get_player_state.ts +1 -1
  293. package/src/core/api/index.ts +3 -0
  294. package/src/core/api/media_element_track_choice_manager.ts +22 -3
  295. package/src/core/api/option_utils.ts +37 -20
  296. package/src/core/api/playback_observer.ts +12 -8
  297. package/src/core/api/public_api.ts +152 -112
  298. package/src/core/api/track_choice_manager.ts +10 -9
  299. package/src/core/decrypt/README.md +22 -0
  300. package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
  301. package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
  302. package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
  303. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
  304. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
  305. package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +36 -103
  306. package/src/core/{eme → decrypt}/attach_media_keys.ts +49 -56
  307. package/src/core/decrypt/clear_on_stop.ts +48 -0
  308. package/src/core/decrypt/content_decryptor.ts +1158 -0
  309. package/src/core/decrypt/create_or_load_session.ts +130 -0
  310. package/src/core/decrypt/create_session.ts +175 -0
  311. package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
  312. package/src/core/{eme → decrypt}/find_key_system.ts +126 -134
  313. package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
  314. package/src/core/decrypt/get_media_keys.ts +145 -0
  315. package/src/core/{eme → decrypt}/index.ts +11 -8
  316. package/src/core/decrypt/init_media_keys.ts +51 -0
  317. package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
  318. package/src/core/decrypt/set_server_certificate.ts +104 -0
  319. package/src/core/{eme → decrypt}/types.ts +129 -259
  320. package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
  321. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
  322. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
  323. package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
  324. package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
  325. package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +20 -20
  326. package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
  327. package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
  328. package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
  329. package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
  330. package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
  331. package/src/core/decrypt/utils/key_session_record.ts +175 -0
  332. package/src/core/decrypt/utils/loaded_sessions_store.ts +318 -0
  333. package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
  334. package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
  335. package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
  336. package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
  337. package/src/core/fetchers/manifest/manifest_fetcher.ts +9 -9
  338. package/src/core/fetchers/segment/segment_fetcher.ts +10 -7
  339. package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
  340. package/src/core/fetchers/utils/try_urls_with_backoff.ts +1 -1
  341. package/src/core/init/.initialize_media_source.ts.un~ +0 -0
  342. package/src/core/init/get_initial_time.ts +2 -1
  343. package/src/core/init/initialize_directfile.ts +19 -22
  344. package/src/core/init/initialize_media_source.ts +43 -106
  345. package/src/core/init/link_drm_and_content.ts +176 -0
  346. package/src/core/init/manifest_update_scheduler.ts +12 -10
  347. package/src/core/init/stall_avoider.ts +6 -5
  348. package/src/core/init/stream_events_emitter/are_same_stream_events.ts +4 -4
  349. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
  350. package/src/core/init/stream_events_emitter/types.ts +2 -2
  351. package/src/core/init/types.ts +1 -39
  352. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
  353. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +6 -7
  354. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +32 -31
  355. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
  356. package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
  357. package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
  358. package/src/core/stream/events_generators.ts +9 -4
  359. package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
  360. package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
  361. package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -1
  362. package/src/core/stream/period/period_stream.ts +5 -2
  363. package/src/core/stream/representation/force_garbage_collection.ts +5 -7
  364. package/src/core/stream/representation/get_buffer_status.ts +28 -16
  365. package/src/core/stream/representation/get_needed_segments.ts +124 -28
  366. package/src/core/stream/representation/get_segment_priority.ts +1 -2
  367. package/src/core/stream/representation/push_media_segment.ts +3 -2
  368. package/src/core/stream/representation/representation_stream.ts +30 -7
  369. package/src/core/stream/types.ts +1 -1
  370. package/src/default_config.ts +1241 -0
  371. package/src/errors/request_error.ts +4 -1
  372. package/src/experimental/index.ts +5 -0
  373. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
  374. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +5 -7
  375. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
  376. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +4 -4
  377. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +1 -1
  378. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +3 -3
  379. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +1 -2
  380. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +1 -2
  381. package/src/experimental/tools/mediaCapabilitiesProber/types.ts +3 -3
  382. package/src/features/__tests__/initialize_features.test.ts +2 -2
  383. package/src/features/features_object.ts +1 -1
  384. package/src/features/initialize_features.ts +1 -1
  385. package/src/features/list/__tests__/eme.test.ts +5 -5
  386. package/src/features/list/eme.ts +5 -5
  387. package/src/features/types.ts +3 -10
  388. package/src/manifest/adaptation.ts +6 -4
  389. package/src/manifest/manifest.ts +16 -86
  390. package/src/manifest/period.ts +3 -3
  391. package/src/manifest/representation.ts +38 -5
  392. package/src/manifest/representation_index/types.ts +18 -18
  393. package/src/manifest/types.ts +3 -3
  394. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +1 -0
  395. package/src/parsers/manifest/dash/common/get_hdr_information.ts +1 -1
  396. package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +3 -3
  397. package/src/parsers/manifest/dash/common/indexes/base.ts +6 -6
  398. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +4 -2
  399. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +2 -2
  400. package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
  401. package/src/parsers/manifest/dash/common/indexes/list.ts +14 -14
  402. package/src/parsers/manifest/dash/common/indexes/template.ts +18 -18
  403. package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +1 -1
  404. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +51 -23
  405. package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +2 -2
  406. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +1 -1
  407. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +167 -134
  408. package/src/parsers/manifest/dash/common/parse_mpd.ts +9 -10
  409. package/src/parsers/manifest/dash/common/parse_periods.ts +80 -79
  410. package/src/parsers/manifest/dash/common/parse_representation_index.ts +83 -75
  411. package/src/parsers/manifest/dash/common/parse_representations.ts +44 -63
  412. package/src/parsers/manifest/dash/node_parser_types.ts +30 -30
  413. package/src/parsers/manifest/dash/parsers_types.ts +3 -3
  414. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -1
  415. package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +4 -4
  416. package/src/parsers/manifest/smooth/create_parser.ts +24 -21
  417. package/src/parsers/manifest/smooth/representation_index.ts +14 -14
  418. package/src/parsers/manifest/types.ts +28 -28
  419. package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +31 -33
  420. package/src/parsers/manifest/utils/clear_timeline_from_position.ts +15 -6
  421. package/src/parsers/manifest/utils/index_helpers.ts +2 -2
  422. package/src/parsers/manifest/utils/update_segment_timeline.ts +32 -21
  423. package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
  424. package/src/parsers/texttracks/webvtt/html/to_html.ts +2 -2
  425. package/src/parsers/texttracks/webvtt/parse_cue_block.ts +1 -1
  426. package/src/public_types.ts +5 -1
  427. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +2 -2
  428. package/src/transports/dash/image_pipelines.ts +4 -1
  429. package/src/transports/dash/init_segment_loader.ts +1 -1
  430. package/src/transports/dash/manifest_parser.ts +1 -1
  431. package/src/transports/dash/segment_loader.ts +7 -7
  432. package/src/transports/dash/segment_parser.ts +8 -1
  433. package/src/transports/dash/text_loader.ts +2 -2
  434. package/src/transports/dash/text_parser.ts +11 -1
  435. package/src/transports/local/segment_loader.ts +4 -4
  436. package/src/transports/local/segment_parser.ts +4 -0
  437. package/src/transports/local/text_parser.ts +8 -0
  438. package/src/transports/metaplaylist/manifest_loader.ts +1 -1
  439. package/src/transports/metaplaylist/pipelines.ts +1 -1
  440. package/src/transports/smooth/pipelines.ts +29 -16
  441. package/src/transports/smooth/segment_loader.ts +8 -8
  442. package/src/transports/types.ts +59 -30
  443. package/src/transports/utils/call_custom_manifest_loader.ts +6 -6
  444. package/src/transports/utils/generate_manifest_loader.ts +1 -1
  445. package/src/utils/__tests__/deep_merge.test.ts +48 -0
  446. package/src/utils/__tests__/flat_map.test.ts +12 -7
  447. package/src/utils/cancellable_sleep.ts +1 -1
  448. package/src/utils/cast_to_observable.ts +1 -2
  449. package/src/utils/deep_merge.ts +46 -0
  450. package/src/utils/reference.ts +116 -23
  451. package/src/utils/request/fetch.ts +17 -15
  452. package/src/utils/request/xhr.ts +11 -8
  453. package/src/utils/rx-from_cancellable_promise.ts +8 -4
  454. package/src/utils/task_canceller.ts +6 -4
  455. package/tsconfig.json +1 -2
  456. package/tsconfig.modules.json +1 -2
  457. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +0 -29
  458. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +0 -67
  459. package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
  460. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
  461. package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
  462. package/dist/_esm5.processed/core/eme/create_session.js +0 -126
  463. package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
  464. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
  465. package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
  466. package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
  467. package/dist/_esm5.processed/core/eme/find_key_system.js +0 -243
  468. package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
  469. package/dist/_esm5.processed/core/eme/get_session.js +0 -68
  470. package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
  471. package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
  472. package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
  473. package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
  474. package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
  475. package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
  476. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
  477. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
  478. package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
  479. package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
  480. package/src/core/abr/get_estimate_from_buffer_levels.ts +0 -85
  481. package/src/core/eme/README.md +0 -26
  482. package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
  483. package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
  484. package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
  485. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
  486. package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
  487. package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
  488. package/src/core/eme/clear_eme_session.ts +0 -62
  489. package/src/core/eme/create_session.ts +0 -187
  490. package/src/core/eme/dispose_eme.ts +0 -25
  491. package/src/core/eme/dispose_media_keys.ts +0 -46
  492. package/src/core/eme/eme_manager.ts +0 -387
  493. package/src/core/eme/get_media_keys.ts +0 -141
  494. package/src/core/eme/get_session.ts +0 -135
  495. package/src/core/eme/init_media_keys.ts +0 -106
  496. package/src/core/eme/set_server_certificate.ts +0 -115
  497. package/src/core/eme/utils/close_session.ts +0 -113
  498. package/src/core/eme/utils/init_data_store.ts +0 -234
  499. package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
  500. package/src/core/init/create_eme_manager.ts +0 -95
@@ -14,7 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import PPromise from "pinkie";
18
17
  import config from "../../config";
19
18
  import {
20
19
  NetworkErrorTypes,
@@ -61,14 +60,14 @@ export interface IFetchedDataObject {
61
60
  * Value of the "Content-Length" header, which should (yet also might not be)
62
61
  * the size of the complete data that will be fetched.
63
62
  */
64
- totalSize? : number;
63
+ totalSize : number | undefined;
65
64
  /**
66
65
  * Current available chunk, which might only be a sub-part of the whole
67
66
  * data.
68
67
  * To retrieve the whole data, all `chunk` received from `fetchRequest` can be
69
68
  * concatenated.
70
69
  */
71
- chunk: ArrayBuffer;
70
+ chunk : ArrayBuffer;
72
71
  }
73
72
 
74
73
  /** Options for the `fetchRequest` utils function. */
@@ -88,16 +87,15 @@ export interface IFetchOptions {
88
87
  */
89
88
  cancelSignal : CancellationSignal;
90
89
  /** Optional headers for the HTTP GET request perfomed by `fetchRequest`. */
91
- headers? : { [ header: string ] : string }|null;
90
+ headers? : { [ header: string ] : string } | undefined | null;
92
91
  /**
93
92
  * Optional timeout for the HTTP GET request perfomed by `fetchRequest`.
94
93
  * This timeout is just enabled until the HTTP response from the server, even
95
94
  * if not all data has been received yet.
96
95
  */
97
- timeout? : number;
96
+ timeout? : number | undefined;
98
97
  }
99
98
 
100
- const { DEFAULT_REQUEST_TIMEOUT } = config;
101
99
 
102
100
  type IHeadersConstructor = new() => Headers;
103
101
  type IAbortControllerConstructor = new() => AbortController;
@@ -112,7 +110,7 @@ const _AbortController : IAbortControllerConstructor|null =
112
110
 
113
111
  export default function fetchRequest(
114
112
  options : IFetchOptions
115
- ) : PPromise<IFetchedStreamComplete> {
113
+ ) : Promise<IFetchedStreamComplete> {
116
114
  let headers : Headers | { [key : string ] : string } | undefined;
117
115
  if (!isNullOrUndefined(options.headers)) {
118
116
  if (isNullOrUndefined(_Headers)) {
@@ -148,7 +146,7 @@ export default function fetchRequest(
148
146
  }
149
147
 
150
148
  const requestTimeout = isNullOrUndefined(options.timeout) ?
151
- DEFAULT_REQUEST_TIMEOUT :
149
+ config.getCurrent().DEFAULT_REQUEST_TIMEOUT :
152
150
  options.timeout;
153
151
  const timeout = window.setTimeout(() => {
154
152
  timeouted = true;
@@ -161,12 +159,16 @@ export default function fetchRequest(
161
159
  abortFetch();
162
160
  });
163
161
 
164
- return fetch(options.url,
165
- { headers,
166
- method: "GET",
167
- signal: !isNullOrUndefined(abortController) ? abortController.signal :
168
- undefined }
169
- ).then((response : Response) : PPromise<IFetchedStreamComplete> => {
162
+ const fetchOpts : RequestInit = { method: "GET" };
163
+ if (headers !== undefined) {
164
+ fetchOpts.headers = headers;
165
+ }
166
+ fetchOpts.signal = !isNullOrUndefined(abortController) ? abortController.signal :
167
+ null;
168
+ return fetch(
169
+ options.url,
170
+ fetchOpts
171
+ ).then((response : Response) : Promise<IFetchedStreamComplete> => {
170
172
  if (!isNullOrUndefined(timeout)) {
171
173
  clearTimeout(timeout);
172
174
  }
@@ -192,7 +194,7 @@ export default function fetchRequest(
192
194
 
193
195
  return readBufferAndSendEvents();
194
196
 
195
- async function readBufferAndSendEvents() : PPromise<IFetchedStreamComplete> {
197
+ async function readBufferAndSendEvents() : Promise<IFetchedStreamComplete> {
196
198
  const data = await reader.read();
197
199
 
198
200
  if (!data.done && !isNullOrUndefined(data.value)) {
@@ -18,12 +18,12 @@ import config from "../../config";
18
18
  import { RequestError } from "../../errors";
19
19
  import isNonEmptyString from "../is_non_empty_string";
20
20
  import isNullOrUndefined from "../is_null_or_undefined";
21
+ import PPromise from "../promise";
21
22
  import {
22
23
  CancellationError,
23
24
  CancellationSignal,
24
25
  } from "../task_canceller";
25
26
 
26
- const { DEFAULT_REQUEST_TIMEOUT } = config;
27
27
 
28
28
  const DEFAULT_RESPONSE_TYPE : XMLHttpRequestResponseType = "json";
29
29
 
@@ -129,6 +129,8 @@ export default function request(
129
129
  export default function request<T>(
130
130
  options : IRequestOptions< XMLHttpRequestResponseType | null | undefined >
131
131
  ) : Promise<IRequestResponse< T, XMLHttpRequestResponseType >> {
132
+
133
+ const { DEFAULT_REQUEST_TIMEOUT } = config.getCurrent();
132
134
  const requestOptions = {
133
135
  url: options.url,
134
136
  headers: options.headers,
@@ -138,7 +140,7 @@ export default function request<T>(
138
140
  options.timeout,
139
141
  };
140
142
 
141
- return new Promise((resolve, reject) => {
143
+ return new PPromise((resolve, reject) => {
142
144
  const { onProgress, cancelSignal } = options;
143
145
  const { url,
144
146
  headers,
@@ -279,25 +281,26 @@ export interface IRequestOptions<ResponseType> {
279
281
  url : string;
280
282
  /** Dictionary of headers you want to set. `null` or `undefined` for no header. */
281
283
  headers? : { [ header: string ] : string } |
282
- null;
284
+ null |
285
+ undefined;
283
286
  /** Wanted format for the response */
284
- responseType? : ResponseType;
287
+ responseType? : ResponseType | undefined;
285
288
  /**
286
289
  * Optional timeout, in milliseconds, after which we will cancel a request.
287
290
  * Set to DEFAULT_REQUEST_TIMEOUT by default.
288
291
  */
289
- timeout? : number;
292
+ timeout? : number | undefined;
290
293
  /**
291
294
  * "Cancelation token" used to be able to cancel the request.
292
295
  * When this token is "cancelled", the request will be aborted and the Promise
293
296
  * returned by `request` will be rejected.
294
297
  */
295
- cancelSignal? : CancellationSignal;
298
+ cancelSignal? : CancellationSignal | undefined;
296
299
  /**
297
300
  * When defined, this callback will be called on each XHR "progress" event
298
301
  * with data related to this request's progress.
299
302
  */
300
- onProgress? : (info : IProgressInfo) => void;
303
+ onProgress? : ((info : IProgressInfo) => void) | undefined;
301
304
  }
302
305
 
303
306
  /** Data emitted by `request`'s Promise when the request succeeded. */
@@ -330,5 +333,5 @@ export interface IProgressInfo {
330
333
  size : number;
331
334
  sendingTime : number;
332
335
  url : string;
333
- totalSize? : number;
336
+ totalSize? : number | undefined;
334
337
  }
@@ -14,7 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import PPromise from "pinkie";
18
17
  import { Observable } from "rxjs";
19
18
  import TaskCanceller from "./task_canceller";
20
19
 
@@ -41,27 +40,32 @@ import TaskCanceller from "./task_canceller";
41
40
  */
42
41
  export default function fromCancellablePromise<T>(
43
42
  canceller : TaskCanceller,
44
- fn : () => PPromise<T>
43
+ fn : () => Promise<T>
45
44
  ) : Observable<T> {
46
45
  return new Observable((obs) => {
47
46
  let isUnsubscribedFrom = false;
47
+ let isComplete = false;
48
48
  fn().then(
49
49
  (i) => {
50
50
  if (isUnsubscribedFrom) {
51
51
  return;
52
52
  }
53
+ isComplete = true;
53
54
  obs.next(i);
54
55
  obs.complete();
55
56
  },
56
57
  (err) => {
58
+ isComplete = true;
57
59
  if (isUnsubscribedFrom) {
58
60
  return;
59
61
  }
60
62
  obs.error(err);
61
63
  });
62
64
  return () => {
63
- isUnsubscribedFrom = true;
64
- canceller.cancel();
65
+ if (!isComplete) {
66
+ isUnsubscribedFrom = true;
67
+ canceller.cancel();
68
+ }
65
69
  };
66
70
  });
67
71
  }
@@ -153,14 +153,14 @@ export default class TaskCanceller {
153
153
  * An optional CancellationError can be given in argument for when this
154
154
  * cancellation is actually triggered as a chain reaction from a previous
155
155
  * cancellation.
156
- * @param {Error} [originError]
156
+ * @param {Error} [srcError]
157
157
  */
158
- public cancel(originError? : CancellationError) : void {
158
+ public cancel(srcError? : CancellationError) : void {
159
159
  if (this.isUsed) {
160
160
  return ;
161
161
  }
162
162
  this.isUsed = true;
163
- const cancellationError = originError ?? new CancellationError();
163
+ const cancellationError = srcError ?? new CancellationError();
164
164
  this._trigger(cancellationError);
165
165
  }
166
166
 
@@ -188,7 +188,9 @@ export class CancellationSignal {
188
188
  */
189
189
  public isCancelled : boolean;
190
190
  /**
191
- * Error associated to the cancellation.
191
+ * Error associated to the cancellation, only set if the `CancellationSignal`
192
+ * has been used (which means that the task has been cancelled).
193
+ *
192
194
  * Can be used to notify to a caller that this task was aborted (for example
193
195
  * by rejecting it through the Promise associated to that task).
194
196
  *
package/tsconfig.json CHANGED
@@ -4,8 +4,7 @@
4
4
  "allowJs": true,
5
5
  "target": "es2017",
6
6
  "lib": ["es2017", "dom"],
7
- // TODO
8
- // "exactOptionalPropertyTypes": true,
7
+ "exactOptionalPropertyTypes": true,
9
8
  "forceConsistentCasingInFileNames": true,
10
9
  "skipLibCheck": false,
11
10
  "noImplicitAny": true,
@@ -4,8 +4,7 @@
4
4
  "declaration": true,
5
5
  "target": "es5",
6
6
  "lib": ["es2017", "dom"],
7
- // TODO
8
- // "exactOptionalPropertyTypes": true,
7
+ "exactOptionalPropertyTypes": true,
9
8
  "forceConsistentCasingInFileNames": true,
10
9
  "skipLibCheck": false,
11
10
  "noImplicitAny": true,
@@ -1,29 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- export interface IBufferBasedChooserPlaybackObservation {
17
- bufferGap: number;
18
- currentBitrate?: number;
19
- currentScore?: number;
20
- speed: number;
21
- }
22
- /**
23
- * From the buffer gap, choose a representation.
24
- * @param {Object} playbackObservation
25
- * @param {Array.<Number>} bitrates
26
- * @param {Array.<Number>} bufferLevels
27
- * @returns {Object|undefined}
28
- */
29
- export default function getEstimateFromBufferLevels(playbackObservation: IBufferBasedChooserPlaybackObservation, bitrates: number[], bufferLevels: number[]): number | undefined;
@@ -1,67 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import log from "../../log";
17
- import arrayFindIndex from "../../utils/array_find_index";
18
- /**
19
- * From the buffer gap, choose a representation.
20
- * @param {Object} playbackObservation
21
- * @param {Array.<Number>} bitrates
22
- * @param {Array.<Number>} bufferLevels
23
- * @returns {Object|undefined}
24
- */
25
- export default function getEstimateFromBufferLevels(playbackObservation, bitrates, bufferLevels) {
26
- var bufferGap = playbackObservation.bufferGap, currentBitrate = playbackObservation.currentBitrate, currentScore = playbackObservation.currentScore, speed = playbackObservation.speed;
27
- if (currentBitrate == null) {
28
- return bitrates[0];
29
- }
30
- var currentBitrateIndex = arrayFindIndex(bitrates, function (b) { return b === currentBitrate; });
31
- if (currentBitrateIndex < 0 || bitrates.length !== bufferLevels.length) {
32
- log.error("ABR: Current Bitrate not found in the calculated levels");
33
- return bitrates[0];
34
- }
35
- var scaledScore;
36
- if (currentScore != null) {
37
- scaledScore = speed === 0 ? currentScore : (currentScore / speed);
38
- }
39
- if (scaledScore != null && scaledScore > 1) {
40
- var currentBufferLevel_1 = bufferLevels[currentBitrateIndex];
41
- var nextIndex = (function () {
42
- for (var i = currentBitrateIndex + 1; i < bufferLevels.length; i++) {
43
- if (bufferLevels[i] > currentBufferLevel_1) {
44
- return i;
45
- }
46
- }
47
- })();
48
- if (nextIndex != null) {
49
- var nextBufferLevel = bufferLevels[nextIndex];
50
- if (bufferGap >= nextBufferLevel) {
51
- return bitrates[nextIndex];
52
- }
53
- }
54
- }
55
- if (scaledScore == null || scaledScore < 1.15) {
56
- var currentBufferLevel = bufferLevels[currentBitrateIndex];
57
- if (bufferGap < currentBufferLevel) {
58
- for (var i = currentBitrateIndex - 1; i >= 0; i--) {
59
- if (bitrates[i] < currentBitrate) {
60
- return bitrates[i];
61
- }
62
- }
63
- return currentBitrate;
64
- }
65
- }
66
- return currentBitrate;
67
- }
@@ -1,57 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { defer as observableDefer, mergeMap, tap, of as observableOf, } from "rxjs";
17
- import { setMediaKeys, } from "../../compat";
18
- import log from "../../log";
19
- import MediaKeysInfosStore from "./media_keys_infos_store";
20
- /**
21
- * Dispose the media keys on media element.
22
- * @param {Object} mediaElement
23
- * @returns {Observable}
24
- */
25
- export function disableMediaKeys(mediaElement) {
26
- return observableDefer(function () {
27
- MediaKeysInfosStore.setState(mediaElement, null);
28
- return setMediaKeys(mediaElement, null);
29
- });
30
- }
31
- /**
32
- * Attach MediaKeys and its associated state to an HTMLMediaElement.
33
- *
34
- * /!\ Mutates heavily MediaKeysInfosStore
35
- * @param {Object} mediaKeysInfos
36
- * @param {HTMLMediaElement} mediaElement
37
- * @returns {Observable}
38
- */
39
- export default function attachMediaKeys(mediaElement, _a) {
40
- var keySystemOptions = _a.keySystemOptions, loadedSessionsStore = _a.loadedSessionsStore, mediaKeySystemAccess = _a.mediaKeySystemAccess, mediaKeys = _a.mediaKeys;
41
- return observableDefer(function () {
42
- var previousState = MediaKeysInfosStore.getState(mediaElement);
43
- var closeAllSessions$ = previousState !== null &&
44
- previousState.loadedSessionsStore !== loadedSessionsStore ?
45
- previousState.loadedSessionsStore.closeAllSessions() :
46
- observableOf(null);
47
- return closeAllSessions$.pipe(mergeMap(function () {
48
- MediaKeysInfosStore.setState(mediaElement, { keySystemOptions: keySystemOptions, mediaKeySystemAccess: mediaKeySystemAccess, mediaKeys: mediaKeys, loadedSessionsStore: loadedSessionsStore });
49
- if (mediaElement.mediaKeys === mediaKeys) {
50
- return observableOf(null);
51
- }
52
- log.info("EME: Attaching MediaKeys to the media element");
53
- return setMediaKeys(mediaElement, mediaKeys)
54
- .pipe(tap(function () { log.info("EME: MediaKeys attached with success"); }));
55
- }));
56
- });
57
- }
@@ -1,59 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { Observable } from "rxjs";
17
- import { ICustomMediaKeySession } from "../../compat";
18
- import { IInitializationDataInfo } from "./types";
19
- import LoadedSessionsStore from "./utils/loaded_sessions_store";
20
- /**
21
- * Event emitted when an old MediaKeySession has been closed to respect the
22
- * maximum limit of concurrent MediaKeySession active.
23
- */
24
- export interface ICleanedOldSessionEvent {
25
- type: "cleaned-old-session";
26
- value: {
27
- /** The MediaKeySession cleaned. */
28
- mediaKeySession: MediaKeySession | ICustomMediaKeySession;
29
- /** The type of MediaKeySession (e.g. "temporary"). */
30
- sessionType: MediaKeySessionType;
31
- /** Initialization data assiociated to this MediaKeySession. */
32
- initializationData: IInitializationDataInfo;
33
- };
34
- }
35
- /**
36
- * Event emitted when we are beginning to close an old MediaKeySession to
37
- * respect the maximum limit of concurrent MediaKeySession active.
38
- */
39
- export interface ICleaningOldSessionEvent {
40
- type: "cleaning-old-session";
41
- value: {
42
- /** The MediaKeySession that we are currently cleaning. */
43
- mediaKeySession: MediaKeySession | ICustomMediaKeySession;
44
- /** The type of MediaKeySession (e.g. "temporary"). */
45
- sessionType: MediaKeySessionType;
46
- /** Initialization data assiociated to this MediaKeySession. */
47
- initializationData: IInitializationDataInfo;
48
- };
49
- }
50
- /**
51
- * Close sessions from the loadedSessionsStore to allow at maximum `limit`
52
- * stored MediaKeySessions in it.
53
- *
54
- * Emit event when a MediaKeySession begin to be closed and another when the
55
- * MediaKeySession is closed.
56
- * @param {Object} loadedSessionsStore
57
- * @returns {Observable}
58
- */
59
- export default function cleanOldLoadedSessions(loadedSessionsStore: LoadedSessionsStore, limit: number): Observable<ICleaningOldSessionEvent | ICleanedOldSessionEvent>;
@@ -1,50 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { defer as observableDefer, EMPTY, ignoreElements, } from "rxjs";
17
- import { shouldUnsetMediaKeys } from "../../compat/";
18
- import log from "../../log";
19
- import disposeMediaKeys from "./dispose_media_keys";
20
- import MediaKeysInfosStore from "./media_keys_infos_store";
21
- /**
22
- * Clear EME ressources that should be cleared when the current content stops
23
- * its playback.
24
- * @param {HTMLMediaElement} mediaElement
25
- * @returns {Observable}
26
- */
27
- export default function clearEMESession(mediaElement) {
28
- return observableDefer(function () {
29
- log.info("EME: Clearing-up EME session.");
30
- if (shouldUnsetMediaKeys()) {
31
- log.info("EME: disposing current MediaKeys.");
32
- return disposeMediaKeys(mediaElement)
33
- .pipe(ignoreElements());
34
- }
35
- var currentState = MediaKeysInfosStore.getState(mediaElement);
36
- if (currentState !== null &&
37
- currentState.keySystemOptions.closeSessionsOnStop === true) {
38
- log.info("EME: closing all current sessions.");
39
- return currentState.loadedSessionsStore.closeAllSessions()
40
- // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
41
- // first type parameter as `any` instead of the perfectly fine `unknown`,
42
- // leading to linter issues, as it forbids the usage of `any`.
43
- // This is why we're disabling the eslint rule.
44
- /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
45
- .pipe(ignoreElements());
46
- }
47
- log.info("EME: Nothing to clear. Returning right away. No state =", currentState === null);
48
- return EMPTY;
49
- });
50
- }
@@ -1,126 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { catchError, defer as observableDefer, map, mergeMap, of as observableOf, } from "rxjs";
17
- import { loadSession, } from "../../compat";
18
- import log from "../../log";
19
- import isSessionUsable from "./utils/is_session_usable";
20
- /**
21
- * Create a new Session on the given MediaKeys, corresponding to the given
22
- * initializationData.
23
- * If session creating fails, remove the oldest MediaKeySession loaded and
24
- * retry.
25
- *
26
- * /!\ This only creates new sessions.
27
- * It will fail if loadedSessionsStore already has a MediaKeySession with
28
- * the given initializationData.
29
- * @param {Uint8Array} initData
30
- * @param {string|undefined} initDataType
31
- * @param {Object} mediaKeysInfos
32
- * @returns {Observable}
33
- */
34
- export default function createSession(stores, initializationData, wantedSessionType) {
35
- return observableDefer(function () {
36
- var loadedSessionsStore = stores.loadedSessionsStore, persistentSessionsStore = stores.persistentSessionsStore;
37
- if (wantedSessionType === "temporary") {
38
- return createTemporarySession(loadedSessionsStore, initializationData);
39
- }
40
- else if (persistentSessionsStore === null) {
41
- log.warn("EME: Cannot create persistent MediaKeySession, " +
42
- "PersistentSessionsStore not created.");
43
- return createTemporarySession(loadedSessionsStore, initializationData);
44
- }
45
- return createAndTryToRetrievePersistentSession(loadedSessionsStore, persistentSessionsStore, initializationData);
46
- });
47
- }
48
- /**
49
- * Create a new temporary MediaKeySession linked to the given initData and
50
- * initDataType.
51
- * @param {Object} loadedSessionsStore
52
- * @param {Object} initData
53
- * @returns {Observable}
54
- */
55
- function createTemporarySession(loadedSessionsStore, initData) {
56
- return observableDefer(function () {
57
- log.info("EME: Creating a new temporary session");
58
- var session = loadedSessionsStore.createSession(initData, "temporary");
59
- return observableOf({ type: "created-session",
60
- value: { mediaKeySession: session,
61
- sessionType: "temporary" } });
62
- });
63
- }
64
- /**
65
- * Create a persistent MediaKeySession and try to load on it a previous
66
- * MediaKeySession linked to the same initData and initDataType.
67
- * @param {Object} loadedSessionsStore
68
- * @param {Object} persistentSessionsStore
69
- * @param {Object} initData
70
- * @returns {Observable}
71
- */
72
- function createAndTryToRetrievePersistentSession(loadedSessionsStore, persistentSessionsStore, initData) {
73
- return observableDefer(function () {
74
- log.info("EME: Creating persistent MediaKeySession");
75
- var session = loadedSessionsStore
76
- .createSession(initData, "persistent-license");
77
- var storedEntry = persistentSessionsStore.getAndReuse(initData);
78
- if (storedEntry === null) {
79
- return observableOf({ type: "created-session",
80
- value: { mediaKeySession: session,
81
- sessionType: "persistent-license" } });
82
- }
83
- /**
84
- * Helper function to close and restart the current persistent session
85
- * considered, and re-create it from scratch.
86
- * @returns {Observable}
87
- */
88
- var recreatePersistentSession = function () {
89
- log.info("EME: Removing previous persistent session.");
90
- if (persistentSessionsStore.get(initData) !== null) {
91
- persistentSessionsStore.delete(initData);
92
- }
93
- return loadedSessionsStore.closeSession(initData)
94
- .pipe(map(function () {
95
- var newSession = loadedSessionsStore.createSession(initData, "persistent-license");
96
- return { type: "created-session",
97
- value: { mediaKeySession: newSession,
98
- sessionType: "persistent-license" } };
99
- }));
100
- };
101
- return loadSession(session, storedEntry.sessionId).pipe(mergeMap(function (hasLoadedSession) {
102
- if (!hasLoadedSession) {
103
- log.warn("EME: No data stored for the loaded session");
104
- persistentSessionsStore.delete(initData);
105
- return observableOf({ type: "created-session",
106
- value: { mediaKeySession: session,
107
- sessionType: "persistent-license" } });
108
- }
109
- if (hasLoadedSession && isSessionUsable(session)) {
110
- persistentSessionsStore.add(initData, session);
111
- log.info("EME: Succeeded to load persistent session.");
112
- return observableOf({ type: "loaded-persistent-session",
113
- value: { mediaKeySession: session,
114
- sessionType: "persistent-license" } });
115
- }
116
- // Unusable persistent session: recreate a new session from scratch.
117
- log.warn("EME: Previous persistent session not usable anymore.");
118
- return recreatePersistentSession();
119
- }), catchError(function (err) {
120
- log.warn("EME: Unable to load persistent session: " +
121
- (err instanceof Error ? err.toString() :
122
- "Unknown Error"));
123
- return recreatePersistentSession();
124
- }));
125
- });
126
- }
@@ -1,23 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import noop from "../../utils/noop";
17
- import disposeMediaKeys from "./dispose_media_keys";
18
- /**
19
- * Free up all ressources taken by the EME management.
20
- */
21
- export default function disposeEME(mediaElement) {
22
- disposeMediaKeys(mediaElement).subscribe(noop);
23
- }