@gcorevideo/player 2.20.7 → 2.20.9

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 (218) hide show
  1. package/dist/core.js +54 -25
  2. package/dist/index.css +1184 -1184
  3. package/dist/index.js +298 -267
  4. package/dist/player.d.ts +178 -126
  5. package/dist/plugins/index.css +841 -841
  6. package/dist/plugins/index.js +192 -192
  7. package/docs/api/player.bottomgear.md +14 -0
  8. package/docs/api/player.bottomgear.refresh.md +20 -0
  9. package/docs/api/player.clapprnerdstats.md +1 -1
  10. package/docs/api/player.clapprstats.exportmetrics.md +1 -1
  11. package/docs/api/player.clapprstats.md +1 -15
  12. package/docs/api/player.clapprstats.setupdatemetrics.md +2 -0
  13. package/docs/api/player.clipsplugin.md +1 -1
  14. package/docs/api/player.clipspluginsettings.md +5 -2
  15. package/docs/api/player.clipspluginsettings.text.md +3 -0
  16. package/docs/api/{player.errorscreen.bindevents.md → player.containerpluginconstructor.md} +7 -6
  17. package/docs/api/{player.errorscreen.render.md → player.corepluginconstructor.md} +7 -6
  18. package/docs/api/player.errordesc.md +28 -0
  19. package/docs/api/player.errorscreen.md +1 -220
  20. package/docs/api/{player.errorscreen.hide.md → player.errorscreenpluginsettings.md} +7 -7
  21. package/docs/api/player.levelselector.md +3 -9
  22. package/docs/api/player.levelselectorpluginsettings.labels.md +24 -0
  23. package/docs/api/player.levelselectorpluginsettings.md +79 -0
  24. package/docs/api/player.levelselectorpluginsettings.restrictresolution.md +16 -0
  25. package/docs/api/player.md +93 -16
  26. package/docs/api/{player.errorscreen.container.md → player.mediacontrol.currentseekpos.md} +3 -3
  27. package/docs/api/player.mediacontrol.disable.md +1 -1
  28. package/docs/api/player.mediacontrol.md +23 -2
  29. package/docs/api/{player.gearevents.md → player.mediacontrolevents.md} +4 -4
  30. package/docs/api/player.multicamera.md +1 -29
  31. package/docs/api/player.playbackerror.md +19 -0
  32. package/docs/api/{player.errorscreen.supportedversion.md → player.playbackerror.ui.md} +7 -4
  33. package/docs/api/player.playbackerrorcode.md +3 -3
  34. package/docs/api/{player.errorscreen.show.md → player.playbackrate._constructor_.md} +7 -11
  35. package/docs/api/player.playbackrate.md +35 -2
  36. package/docs/api/player.player.registerplugin.md +2 -2
  37. package/docs/api/player.player.unregisterplugin.md +2 -2
  38. package/docs/api/player.playerpluginconstructor.md +17 -0
  39. package/docs/api/player.share.attributes.md +3 -0
  40. package/docs/api/player.share.bindevents.md +3 -0
  41. package/docs/api/player.share.canshowshare.md +3 -0
  42. package/docs/api/player.share.events.md +3 -0
  43. package/docs/api/player.share.hideshare.md +3 -0
  44. package/docs/api/player.share.initializeicons.md +3 -0
  45. package/docs/api/player.share.md +40 -1
  46. package/docs/api/player.share.name.md +3 -0
  47. package/docs/api/player.share.onshareembedclick.md +3 -0
  48. package/docs/api/player.share.onsharefb.md +3 -0
  49. package/docs/api/player.share.onsharehide.md +3 -0
  50. package/docs/api/player.share.onsharelinkclick.md +3 -0
  51. package/docs/api/player.share.onshareshow.md +3 -0
  52. package/docs/api/player.share.onsharetw.md +3 -0
  53. package/docs/api/player.share.render.md +3 -0
  54. package/docs/api/player.share.showshare.md +3 -0
  55. package/docs/api/player.share.supportedversion.md +3 -0
  56. package/docs/api/player.share.template.md +3 -0
  57. package/docs/api/player.share.unbindevents.md +3 -0
  58. package/docs/api/player.skiptime.attributes.md +3 -0
  59. package/docs/api/player.skiptime.bindevents.md +3 -0
  60. package/docs/api/player.skiptime.container.md +3 -0
  61. package/docs/api/player.skiptime.events.md +3 -0
  62. package/docs/api/player.skiptime.handlerewindclicks.md +3 -0
  63. package/docs/api/player.skiptime.md +30 -1
  64. package/docs/api/player.skiptime.name.md +3 -0
  65. package/docs/api/player.skiptime.render.md +3 -0
  66. package/docs/api/player.skiptime.setback.md +3 -0
  67. package/docs/api/player.skiptime.setforward.md +3 -0
  68. package/docs/api/player.skiptime.setmidclick.md +3 -0
  69. package/docs/api/player.skiptime.supportedversion.md +3 -0
  70. package/docs/api/player.skiptime.template.md +3 -0
  71. package/docs/api/player.skiptime.togglefullscreen.md +3 -0
  72. package/docs/api/player.spinnerevents.md +4 -1
  73. package/docs/api/player.spinnerthreebounce.hide.md +1 -1
  74. package/docs/api/player.spinnerthreebounce.md +7 -5
  75. package/docs/api/player.spinnerthreebounce.show.md +40 -2
  76. package/docs/api/player.telemetry.md +1 -1
  77. package/docs/api/player.telemetrypluginsettings.md +1 -1
  78. package/docs/api/{player.errorscreen.unbindevents.md → player.telemetrysendfn.md} +6 -6
  79. package/lib/Player.d.ts +13 -4
  80. package/lib/Player.d.ts.map +1 -1
  81. package/lib/Player.js +17 -12
  82. package/lib/index.core.d.ts +0 -1
  83. package/lib/index.core.d.ts.map +1 -1
  84. package/lib/index.core.js +0 -1
  85. package/lib/index.plugins.d.ts +0 -1
  86. package/lib/index.plugins.d.ts.map +1 -1
  87. package/lib/index.plugins.js +0 -1
  88. package/lib/playback/BasePlayback.d.ts +5 -0
  89. package/lib/playback/BasePlayback.d.ts.map +1 -1
  90. package/lib/playback/BasePlayback.js +8 -0
  91. package/lib/playback/HTML5Video.d.ts +4 -0
  92. package/lib/playback/HTML5Video.d.ts.map +1 -0
  93. package/lib/playback/HTML5Video.js +3 -0
  94. package/lib/playback/dash-playback/DashPlayback.d.ts +1 -0
  95. package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
  96. package/lib/playback/dash-playback/DashPlayback.js +6 -2
  97. package/lib/playback/hls-playback/HlsPlayback.d.ts.map +1 -1
  98. package/lib/playback/hls-playback/HlsPlayback.js +1 -1
  99. package/lib/playback/index.d.ts.map +1 -1
  100. package/lib/playback/index.js +2 -0
  101. package/lib/playback/types.d.ts +9 -0
  102. package/lib/playback/types.d.ts.map +1 -0
  103. package/lib/playback/types.js +9 -0
  104. package/lib/plugins/bottom-gear/BottomGear.d.ts +7 -12
  105. package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
  106. package/lib/plugins/bottom-gear/BottomGear.js +5 -14
  107. package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.d.ts +1 -1
  108. package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.js +3 -3
  109. package/lib/plugins/clappr-nerd-stats/speedtest/Speedtest.d.ts.map +1 -1
  110. package/lib/plugins/clappr-nerd-stats/speedtest/Speedtest.js +8 -8
  111. package/lib/plugins/clappr-stats/ClapprStats.d.ts +4 -5
  112. package/lib/plugins/clappr-stats/ClapprStats.d.ts.map +1 -1
  113. package/lib/plugins/clappr-stats/ClapprStats.js +4 -3
  114. package/lib/plugins/clips/Clips.d.ts +3 -2
  115. package/lib/plugins/clips/Clips.d.ts.map +1 -1
  116. package/lib/plugins/clips/Clips.js +1 -1
  117. package/lib/plugins/context-menu/ContextMenu.d.ts.map +1 -1
  118. package/lib/plugins/dvr-controls/DvrControls.d.ts +4 -3
  119. package/lib/plugins/dvr-controls/DvrControls.d.ts.map +1 -1
  120. package/lib/plugins/dvr-controls/DvrControls.js +30 -18
  121. package/lib/plugins/error-screen/ErrorScreen.d.ts +12 -1
  122. package/lib/plugins/error-screen/ErrorScreen.d.ts.map +1 -1
  123. package/lib/plugins/error-screen/ErrorScreen.js +1 -1
  124. package/lib/plugins/index.d.ts +0 -1
  125. package/lib/plugins/index.d.ts.map +1 -1
  126. package/lib/plugins/index.js +0 -1
  127. package/lib/plugins/kibo/index.d.ts +0 -3
  128. package/lib/plugins/kibo/index.d.ts.map +1 -1
  129. package/lib/plugins/kibo/index.js +0 -3
  130. package/lib/plugins/level-selector/LevelSelector.d.ts +8 -4
  131. package/lib/plugins/level-selector/LevelSelector.d.ts.map +1 -1
  132. package/lib/plugins/level-selector/LevelSelector.js +16 -7
  133. package/lib/plugins/media-control/MediaControl.d.ts +5 -4
  134. package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
  135. package/lib/plugins/media-control/MediaControl.js +8 -6
  136. package/lib/plugins/multi-camera/MultiCamera.d.ts +3 -11
  137. package/lib/plugins/multi-camera/MultiCamera.d.ts.map +1 -1
  138. package/lib/plugins/multi-camera/MultiCamera.js +1 -1
  139. package/lib/plugins/playback-rate/PlaybackRate.d.ts +11 -10
  140. package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
  141. package/lib/plugins/playback-rate/PlaybackRate.js +83 -91
  142. package/lib/plugins/poster/Poster.js +2 -2
  143. package/lib/plugins/share/Share.d.ts +2 -1
  144. package/lib/plugins/share/Share.d.ts.map +1 -1
  145. package/lib/plugins/share/Share.js +2 -1
  146. package/lib/plugins/skip-time/SkipTime.d.ts +2 -1
  147. package/lib/plugins/skip-time/SkipTime.d.ts.map +1 -1
  148. package/lib/plugins/skip-time/SkipTime.js +2 -1
  149. package/lib/plugins/source-controller/SourceController.js +3 -3
  150. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.d.ts +6 -3
  151. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.d.ts.map +1 -1
  152. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.js +6 -3
  153. package/lib/plugins/telemetry/Telemetry.d.ts +2 -3
  154. package/lib/plugins/telemetry/Telemetry.d.ts.map +1 -1
  155. package/lib/plugins/telemetry/Telemetry.js +1 -1
  156. package/lib/plugins/vast-ads/VastAds.d.ts.map +1 -1
  157. package/lib/plugins/vast-ads/VastAds.js +3 -3
  158. package/lib/plugins/vast-ads/roll.d.ts +1 -1
  159. package/lib/plugins/vast-ads/roll.d.ts.map +1 -1
  160. package/lib/plugins/vast-ads/rollmanager.d.ts +1 -1
  161. package/lib/plugins/vast-ads/rollmanager.d.ts.map +1 -1
  162. package/lib/plugins/vast-ads/rollmanager.js +2 -2
  163. package/lib/types.d.ts +21 -5
  164. package/lib/types.d.ts.map +1 -1
  165. package/lib/utils/types.d.ts +0 -6
  166. package/lib/utils/types.d.ts.map +1 -1
  167. package/package.json +1 -1
  168. package/src/Player.ts +18 -16
  169. package/src/index.core.ts +0 -1
  170. package/src/index.plugins.ts +0 -1
  171. package/src/playback/BasePlayback.ts +12 -4
  172. package/src/playback/HTML5Video.ts +3 -0
  173. package/src/playback/dash-playback/DashPlayback.ts +15 -11
  174. package/src/playback/hls-playback/HlsPlayback.ts +7 -11
  175. package/src/playback/index.ts +2 -1
  176. package/src/playback/types.ts +9 -0
  177. package/src/plugins/audio-selector/AudioSelector.ts +1 -1
  178. package/src/plugins/big-mute-button/BigMuteButton.ts +1 -1
  179. package/src/plugins/bottom-gear/BottomGear.ts +7 -16
  180. package/src/plugins/clappr-nerd-stats/ClapprNerdStats.ts +5 -5
  181. package/src/plugins/clappr-nerd-stats/speedtest/Speedtest.ts +184 -187
  182. package/src/plugins/clappr-stats/ClapprStats.ts +5 -4
  183. package/src/plugins/clips/Clips.ts +4 -3
  184. package/src/plugins/context-menu/ContextMenu.ts +0 -2
  185. package/src/plugins/dvr-controls/DvrControls.ts +90 -56
  186. package/src/plugins/error-screen/ErrorScreen.ts +12 -1
  187. package/src/plugins/favicon/Favicon.ts +1 -1
  188. package/src/plugins/index.ts +0 -1
  189. package/src/plugins/kibo/index.ts +0 -3
  190. package/src/plugins/level-selector/LevelSelector.ts +24 -10
  191. package/src/plugins/logo/Logo.ts +1 -1
  192. package/src/plugins/media-control/MediaControl.ts +13 -10
  193. package/src/plugins/multi-camera/MultiCamera.ts +4 -4
  194. package/src/plugins/playback-rate/PlaybackRate.ts +90 -106
  195. package/src/plugins/poster/Poster.ts +3 -3
  196. package/src/plugins/seek-time/SeekTime.ts +1 -1
  197. package/src/plugins/share/Share.ts +2 -1
  198. package/src/plugins/skip-time/SkipTime.ts +2 -1
  199. package/src/plugins/source-controller/SourceController.ts +3 -3
  200. package/src/plugins/source-controller/__tests__/SourceController.test.ts +2 -2
  201. package/src/plugins/spinner-three-bounce/SpinnerThreeBounce.ts +6 -3
  202. package/src/plugins/subtitles/Subtitles.ts +1 -1
  203. package/src/plugins/telemetry/Telemetry.ts +2 -2
  204. package/src/plugins/thumbnails/Thumbnails.ts +1 -1
  205. package/src/plugins/vast-ads/VastAds.ts +5 -4
  206. package/src/plugins/vast-ads/roll.ts +2 -1
  207. package/src/plugins/vast-ads/rollmanager.ts +3 -3
  208. package/src/types.ts +24 -5
  209. package/src/utils/types.ts +0 -8
  210. package/temp/player.api.json +540 -576
  211. package/tsconfig.tsbuildinfo +1 -1
  212. package/assets/playback-rate/playback-rate-selector.ejs +0 -9
  213. package/docs/api/player.clapprstats.onbitrate.md +0 -52
  214. package/docs/api/player.errorscreen.attributes.md +0 -17
  215. package/docs/api/player.errorscreen.name.md +0 -14
  216. package/docs/api/player.errorscreen.template.md +0 -14
  217. package/docs/api/player.multicamera.getcameraslist.md +0 -18
  218. package/docs/api/player.multicamera.getcurrentcamera.md +0 -18
@@ -1,414 +1,411 @@
1
- import { reportError } from '@gcorevideo/utils';
1
+ import { reportError } from '@gcorevideo/utils'
2
2
 
3
- import SpeedtestWorkerModule from '../../../../assets/clappr-nerd-stats/speedtest/speedtest.worker.js';
3
+ import SpeedtestWorkerModule from '../../../../assets/clappr-nerd-stats/speedtest/speedtest.worker.js'
4
4
 
5
- import { TimerId } from '../../../utils/types.js';
5
+ import { TimerId } from '../../../utils/types.js'
6
6
 
7
7
  export type Server = {
8
- id: number;
9
- country: string;
10
- name: string;
11
- server: string;
12
- dlURL: string;
13
- ulURL: string;
14
- pingT: number;
15
- pingURL: string;
16
- getIpURL: string;
8
+ id: number
9
+ country: string
10
+ name: string
11
+ server: string
12
+ dlURL: string
13
+ ulURL: string
14
+ pingT: number
15
+ pingURL: string
16
+ getIpURL: string
17
17
  }
18
18
 
19
- type PerformanceCallback = (t: number) => void;
19
+ type PerformanceCallback = (t: number) => void
20
20
 
21
- type EndHandler = (success: boolean) => void;
21
+ type EndHandler = (success: boolean) => void
22
22
 
23
23
  export type TestStatusInfo = {
24
- testState: -1 | 0 | 1 | 2 | 3 | 4 | 5;
25
- dlStatus: number | 'Fail'; // Mbps/Mibps
26
- ulStatus: number;
27
- pingStatus: string;
28
- clientIp: string;
29
- serverHostName: string;
30
- jitterStatus: string;
31
- dlProgress: 0 | 1;
32
- ulProgress: 0 | 1;
33
- pingProgress: 0 | 1;
34
- testId: string | null;
35
- };
36
-
37
- type UpdateHandler = (data: TestStatusInfo) => void;
38
-
39
- type SelectCallback = (server: Server | null) => void;
24
+ testState: -1 | 0 | 1 | 2 | 3 | 4 | 5
25
+ dlStatus: number | 'Fail' // Mbps/Mibps
26
+ ulStatus: number
27
+ pingStatus: string
28
+ clientIp: string
29
+ serverHostName: string
30
+ jitterStatus: string
31
+ dlProgress: 0 | 1
32
+ ulProgress: 0 | 1
33
+ pingProgress: 0 | 1
34
+ testId: string | null
35
+ }
36
+
37
+ type UpdateHandler = (data: TestStatusInfo) => void
38
+
39
+ type SelectCallback = (server: Server | null) => void
40
40
 
41
41
  // const T = 'plugins.clappr_nerd_stats.speedtest.Speedtest';
42
42
 
43
43
  export class Speedtest {
44
- private worker: Worker | null = null;
44
+ private worker: Worker | null = null
45
45
 
46
- private workerUrl: string | null = null;
46
+ private workerUrl: string | null = null
47
47
 
48
- private _selectServerCalled = false;
48
+ private _selectServerCalled = false
49
49
 
50
- private _selectedServer: Server | null = null;
50
+ private _selectedServer: Server | null = null
51
51
 
52
- private _serverList: Server[] = [];
52
+ private _serverList: Server[] = []
53
53
 
54
- private _settings: any = {};
54
+ private _settings: any = {}
55
55
 
56
- private _state = 0;
56
+ private _state = 0
57
57
 
58
- private updater: TimerId | null = null;
58
+ private updater: TimerId | null = null
59
59
 
60
- private _prevData: TestStatusInfo | null = null;
60
+ private _prevData: TestStatusInfo | null = null
61
61
 
62
- private _originalExtra: any; // TODO
62
+ private _originalExtra: any // TODO
63
63
 
64
- onend: EndHandler | null = null;
64
+ onend: EndHandler | null = null
65
65
 
66
- onupdate: UpdateHandler | null = null;
66
+ onupdate: UpdateHandler | null = null
67
67
 
68
68
  getState() {
69
- return this._state;
69
+ return this._state
70
70
  }
71
71
 
72
72
  setParameter(parameter: string, value: unknown) {
73
73
  if (this._state !== 0) {
74
- throw new Error('You cannot change the test settings after adding server or starting the test');
74
+ throw new Error(
75
+ 'You cannot change the test settings after adding server or starting the test',
76
+ )
75
77
  }
76
- this._settings[parameter] = value;
78
+ this._settings[parameter] = value
77
79
  if (parameter === 'temeletry_extra') {
78
- this._originalExtra = this._settings.telemetry_extra;
80
+ this._originalExtra = this._settings.telemetry_extra
79
81
  }
80
82
  }
81
83
 
82
84
  _checkServerDefinition(server: Server) {
83
85
  try {
84
86
  if (typeof server.name !== 'string') {
85
- throw 'Name string missing from server definition (name)';
87
+ throw 'Name string missing from server definition (name)'
86
88
  }
87
89
  if (typeof server.server !== 'string') {
88
- throw 'Server address string missing from server definition (server)';
90
+ throw 'Server address string missing from server definition (server)'
89
91
  }
90
92
  if (server.server.charAt(server.server.length - 1) !== '/') {
91
- server.server += '/';
93
+ server.server += '/'
92
94
  }
93
95
  if (server.server.indexOf('//') === 0) {
94
- server.server = location.protocol + server.server;
96
+ server.server = location.protocol + server.server
95
97
  }
96
98
  if (typeof server.dlURL !== 'string') {
97
- throw 'Download URL string missing from server definition (dlURL)';
99
+ throw 'Download URL string missing from server definition (dlURL)'
98
100
  }
99
101
  if (typeof server.ulURL !== 'string') {
100
- throw 'Upload URL string missing from server definition (ulURL)';
102
+ throw 'Upload URL string missing from server definition (ulURL)'
101
103
  }
102
104
  if (typeof server.pingURL !== 'string') {
103
- throw 'Ping URL string missing from server definition (pingURL)';
105
+ throw 'Ping URL string missing from server definition (pingURL)'
104
106
  }
105
107
  if (typeof server.getIpURL !== 'string') {
106
- throw 'GetIP URL string missing from server definition (getIpURL)';
108
+ throw 'GetIP URL string missing from server definition (getIpURL)'
107
109
  }
108
110
  } catch (error) {
109
111
  // LogManager.exception(error);
110
- reportError(error);
111
- throw 'Invalid server definition';
112
+ reportError(error)
113
+ throw 'Invalid server definition'
112
114
  }
113
115
  }
114
116
 
115
117
  addTestPoint(server: Server) {
116
- this._checkServerDefinition(server);
118
+ this._checkServerDefinition(server)
117
119
  if (this._state === 0) {
118
- this._state = 1;
120
+ this._state = 1
119
121
  }
120
122
  if (this._state !== 1) {
121
- throw 'You can\'t add a server after server selection';
123
+ throw "You can't add a server after server selection"
122
124
  }
123
- this._settings.mpot = true;
124
- this._serverList.push(server);
125
+ this._settings.mpot = true
126
+ this._serverList.push(server)
125
127
  }
126
128
 
127
129
  addTestPoints(list: Server[]) {
128
130
  for (const server of list) {
129
- this.addTestPoint(server);
131
+ this.addTestPoint(server)
130
132
  }
131
133
  }
132
134
 
133
135
  getSelectedServer() {
134
136
  if (this._state < 2 || this._selectedServer === null) {
135
- throw 'No server is selected';
137
+ throw 'No server is selected'
136
138
  }
137
139
 
138
- return this._selectedServer;
140
+ return this._selectedServer
139
141
  }
140
142
 
141
143
  setSelectedServer(server: Server) {
142
- this._checkServerDefinition(server);
144
+ this._checkServerDefinition(server)
143
145
  if (this._state === 3) {
144
- throw 'You can\'t select a server while the test is running';
146
+ throw "You can't select a server while the test is running"
145
147
  }
146
- this._selectedServer = server;
147
- this._state = 2;
148
+ this._selectedServer = server
149
+ this._state = 2
148
150
  }
149
151
 
150
152
  selectServer(result: SelectCallback) {
151
153
  if (this._state !== 1) {
152
154
  if (this._state === 0) {
153
- throw 'No test points added';
155
+ throw 'No test points added'
154
156
  }
155
157
  if (this._state === 2) {
156
- throw 'Server already selected';
158
+ throw 'Server already selected'
157
159
  }
158
160
  if (this._state >= 3) {
159
- throw 'You can\'t select a server while the test is running';
161
+ throw "You can't select a server while the test is running"
160
162
  }
161
163
  }
162
164
  if (this._selectServerCalled) {
163
- throw 'selectServer already called';
165
+ throw 'selectServer already called'
164
166
  } else {
165
- this._selectServerCalled = true;
167
+ this._selectServerCalled = true
166
168
  }
167
169
  /*this function goes through a list of servers. For each server, the ping is measured, then the server with the function result is called with the best server, or null if all the servers were down.
168
- */
170
+ */
169
171
  const select = (serverList: Server[], result: SelectCallback) => {
170
172
  //pings the specified URL, then calls the function result. Result will receive a parameter which is either the time it took to ping the URL, or -1 if something went wrong.
171
- const PING_TIMEOUT = 2000;
172
- let USE_PING_TIMEOUT = true; //will be disabled on unsupported browsers
173
+ const PING_TIMEOUT = 2000
174
+ let USE_PING_TIMEOUT = true //will be disabled on unsupported browsers
173
175
 
174
176
  if (/MSIE.(\d+\.\d+)/i.test(navigator.userAgent)) {
175
177
  //IE11 doesn't support XHR timeout
176
- USE_PING_TIMEOUT = false;
178
+ USE_PING_TIMEOUT = false
177
179
  }
178
180
  const ping = function (url: string, result: PerformanceCallback) {
179
- url += (url.match(/\?/) ? '&' : '?') + 'cors=true';
180
- const xhr = new XMLHttpRequest();
181
- const t = new Date().getTime();
181
+ url += (url.match(/\?/) ? '&' : '?') + 'cors=true'
182
+ const xhr = new XMLHttpRequest()
183
+ const t = new Date().getTime()
182
184
 
183
185
  xhr.onload = function () {
184
186
  if (xhr.responseText.length === 0) {
185
187
  //we expect an empty response
186
- let instspd = new Date().getTime() - t; //rough timing estimate
188
+ let instspd = new Date().getTime() - t //rough timing estimate
187
189
 
188
190
  try {
189
191
  //try to get more accurate timing using performance API
190
- const pl: PerformanceEntryList = performance.getEntriesByName(url);
192
+ const pl: PerformanceEntryList = performance.getEntriesByName(url)
191
193
 
192
- const pe: PerformanceResourceTiming = pl[pl.length - 1] as PerformanceResourceTiming;
193
- let d = pe.responseStart - pe.requestStart;
194
+ const pe: PerformanceResourceTiming = pl[
195
+ pl.length - 1
196
+ ] as PerformanceResourceTiming
197
+ let d = pe.responseStart - pe.requestStart
194
198
 
195
199
  if (d <= 0) {
196
- d = pe.duration;
200
+ d = pe.duration
197
201
  }
198
202
  if (d > 0 && d < instspd) {
199
- instspd = d;
203
+ instspd = d
200
204
  }
201
205
  } catch (error) {
202
206
  // LogManager.exception(error);
203
- reportError(error);
207
+ reportError(error)
204
208
  }
205
- result(instspd);
209
+ result(instspd)
206
210
  } else {
207
- result(-1);
211
+ result(-1)
208
212
  }
209
- };
213
+ }
210
214
  xhr.onerror = function () {
211
- result(-1);
212
- };
213
- xhr.open('GET', url);
215
+ result(-1)
216
+ }
217
+ xhr.open('GET', url)
214
218
  if (USE_PING_TIMEOUT) {
215
219
  try {
216
- xhr.timeout = PING_TIMEOUT;
217
- xhr.ontimeout = xhr.onerror;
220
+ xhr.timeout = PING_TIMEOUT
221
+ xhr.ontimeout = xhr.onerror
218
222
  } catch (error) {
219
223
  // LogManager.exception(error);
220
- reportError(error);
224
+ reportError(error)
221
225
  }
222
226
  }
223
- xhr.send();
224
- };
227
+ xhr.send()
228
+ }
225
229
 
226
230
  //this function repeatedly pings a server to get a good estimate of the ping. When it's done, it calls the done function without parameters. At the end of the execution, the server will have a new parameter called pingT, which is either the best ping we got from the server or -1 if something went wrong.
227
231
  const PINGS = 3, //up to 3 pings are performed, unless the server is down...
228
- SLOW_THRESHOLD = 500; //...or one of the pings is above this threshold
232
+ SLOW_THRESHOLD = 500 //...or one of the pings is above this threshold
229
233
  const checkServer = function (server: Server, done: () => void) {
230
- let i = 0;
234
+ let i = 0
231
235
 
232
- server.pingT = -1;
236
+ server.pingT = -1
233
237
  if (server.server.indexOf(location.protocol) === -1) {
234
- done();
238
+ done()
235
239
  } else {
236
240
  const nextPing = function () {
237
241
  if (i++ === PINGS) {
238
- done();
242
+ done()
239
243
 
240
- return;
244
+ return
241
245
  }
242
- ping(
243
- server.server + server.pingURL,
244
- function (t) {
245
- if (t >= 0) {
246
- if (t < server.pingT || server.pingT === -1) {
247
- server.pingT = t;
248
- }
249
- if (t < SLOW_THRESHOLD) {
250
- nextPing();
251
- } else {
252
- done();
253
- }
246
+ ping(server.server + server.pingURL, function (t) {
247
+ if (t >= 0) {
248
+ if (t < server.pingT || server.pingT === -1) {
249
+ server.pingT = t
250
+ }
251
+ if (t < SLOW_THRESHOLD) {
252
+ nextPing()
254
253
  } else {
255
- done();
254
+ done()
256
255
  }
256
+ } else {
257
+ done()
257
258
  }
258
- );
259
- };
259
+ })
260
+ }
260
261
 
261
- nextPing();
262
+ nextPing()
262
263
  }
263
- };
264
+ }
264
265
  //check servers in list, one by one
265
- const i = 0;
266
+ const i = 0
266
267
  const done = function () {
267
- let bestServer = null;
268
+ let bestServer = null
268
269
 
269
270
  for (let i = 0; i < serverList.length; i++) {
270
271
  if (
271
272
  serverList[i].pingT !== -1 &&
272
273
  (bestServer === null || serverList[i].pingT < bestServer.pingT)
273
274
  ) {
274
- bestServer = serverList[i];
275
+ bestServer = serverList[i]
275
276
  }
276
277
  }
277
- result(bestServer);
278
- };
278
+ result(bestServer)
279
+ }
279
280
 
280
- serverList.forEach(server => {
281
- checkServer(server, done);
282
- });
281
+ serverList.forEach((server) => {
282
+ checkServer(server, done)
283
+ })
283
284
 
284
285
  if (i === serverList.length) {
285
- done();
286
+ done()
286
287
  }
287
- };
288
+ }
288
289
 
289
290
  //parallel server selection
290
- const CONCURRENCY = 6;
291
- const serverLists: Array<Server[]> = [];
291
+ const CONCURRENCY = 6
292
+ const serverLists: Array<Server[]> = []
292
293
 
293
294
  for (let i = 0; i < CONCURRENCY; i++) {
294
- serverLists[i] = [];
295
+ serverLists[i] = []
295
296
  }
296
297
  for (let i = 0; i < this._serverList.length; i++) {
297
- serverLists[i % CONCURRENCY].push(this._serverList[i]);
298
+ serverLists[i % CONCURRENCY].push(this._serverList[i])
298
299
  }
299
- let completed = 0;
300
- let bestServer: Server | null = null;
300
+ let completed = 0
301
+ let bestServer: Server | null = null
301
302
 
302
303
  for (let i = 0; i < CONCURRENCY; i++) {
303
- select(
304
- serverLists[i],
305
- (server: Server | null) => {
306
- if (server !== null) {
307
- if (bestServer === null || server.pingT < bestServer.pingT) {
308
- bestServer = server;
309
- }
304
+ select(serverLists[i], (server: Server | null) => {
305
+ if (server !== null) {
306
+ if (bestServer === null || server.pingT < bestServer.pingT) {
307
+ bestServer = server
310
308
  }
311
- completed++;
312
- if (completed === CONCURRENCY) {
313
- this._selectedServer = bestServer;
314
- this._state = 2;
315
- if (result) {
316
- result(bestServer);
317
- }
309
+ }
310
+ completed++
311
+ if (completed === CONCURRENCY) {
312
+ this._selectedServer = bestServer
313
+ this._state = 2
314
+ if (result) {
315
+ result(bestServer)
318
316
  }
319
317
  }
320
- );
318
+ })
321
319
  }
322
320
  }
323
321
 
324
322
  start() {
325
323
  if (this._state === 3) {
326
- throw 'Test already running';
324
+ throw 'Test already running'
327
325
  }
328
- this.worker = this.initWorker();
326
+ this.worker = this.initWorker()
329
327
 
330
328
  this.worker.onmessage = (e: MessageEvent) => {
331
329
  if (e.data === this._prevData) {
332
- return;
330
+ return
333
331
  } else {
334
- this._prevData = e.data;
332
+ this._prevData = e.data
335
333
  }
336
- const data = e.data;
334
+ const data = e.data
337
335
 
338
336
  try {
339
337
  if (this.onupdate) {
340
- this.onupdate(data);
338
+ this.onupdate(data)
341
339
  }
342
340
  } catch (error) {
343
341
  // LogManager.message('Speedtest onupdate event threw exception: ' + error, SentryLogLevel.ERROR);
344
- reportError(error);
342
+ reportError(error)
345
343
  }
346
344
  if (data.testState >= 4) {
347
345
  try {
348
346
  if (this.onend) {
349
- this.onend(data.testState === 5);
347
+ this.onend(data.testState === 5)
350
348
  }
351
349
  } catch (error) {
352
350
  // LogManager.message('Speedtest onend event threw exception: ' + error, SentryLogLevel.ERROR);
353
- reportError(error);
351
+ reportError(error)
354
352
  }
355
353
  if (this.updater !== null) {
356
- clearInterval(this.updater);
357
- this.updater = null;
354
+ clearInterval(this.updater)
355
+ this.updater = null
358
356
  }
359
- this._state = 4;
357
+ this._state = 4
360
358
  }
361
- };
362
- this.updater = setInterval(
363
- () => {
364
- this.worker?.postMessage('status');
365
- },
366
- 300
367
- );
359
+ }
360
+ this.updater = setInterval(() => {
361
+ this.worker?.postMessage('status')
362
+ }, 300)
368
363
  if (this._state === 1) {
369
- throw 'When using multiple points of test, you must call selectServer before starting the test';
364
+ throw 'When using multiple points of test, you must call selectServer before starting the test'
370
365
  }
371
366
  if (this._state === 2 && this._selectedServer) {
372
367
  this._settings.url_dl =
373
- this._selectedServer.server + this._selectedServer.dlURL;
368
+ this._selectedServer.server + this._selectedServer.dlURL
374
369
  this._settings.url_ul =
375
- this._selectedServer.server + this._selectedServer.ulURL;
370
+ this._selectedServer.server + this._selectedServer.ulURL
376
371
  this._settings.url_ping =
377
- this._selectedServer.server + this._selectedServer.pingURL;
372
+ this._selectedServer.server + this._selectedServer.pingURL
378
373
  this._settings.url_getIp =
379
- this._selectedServer.server + this._selectedServer.getIpURL;
374
+ this._selectedServer.server + this._selectedServer.getIpURL
380
375
  if (typeof this._originalExtra !== 'undefined') {
381
376
  this._settings.telemetry_extra = JSON.stringify({
382
377
  server: this._selectedServer.name,
383
- extra: this._originalExtra
384
- });
378
+ extra: this._originalExtra,
379
+ })
385
380
  } else {
386
381
  this._settings.telemetry_extra = JSON.stringify({
387
- server: this._selectedServer.name
388
- });
382
+ server: this._selectedServer.name,
383
+ })
389
384
  }
390
385
  }
391
- this._state = 3;
392
- this.worker.postMessage('start ' + JSON.stringify(this._settings));
386
+ this._state = 3
387
+ this.worker.postMessage('start ' + JSON.stringify(this._settings))
393
388
 
394
389
  // ... [rest of the logic remains unchanged] ...
395
390
  }
396
391
 
397
392
  abort() {
398
393
  if (this._state < 3) {
399
- throw new Error('You cannot abort a test that\'s not started yet');
394
+ throw new Error("You cannot abort a test that's not started yet")
400
395
  }
401
396
  if (this._state < 4) {
402
- this.worker?.postMessage('abort');
397
+ this.worker?.postMessage('abort')
403
398
  }
404
399
  }
405
400
 
406
401
  private initWorker(): Worker {
407
402
  if (this.workerUrl) {
408
403
  // TODO in destructor as well
409
- URL.revokeObjectURL(this.workerUrl);
404
+ URL.revokeObjectURL(this.workerUrl)
410
405
  }
411
- this.workerUrl = URL.createObjectURL(new Blob([SpeedtestWorkerModule], { type: 'application/javascript' }));
412
- return new Worker(this.workerUrl);
406
+ this.workerUrl = URL.createObjectURL(
407
+ new Blob([SpeedtestWorkerModule], { type: 'application/javascript' }),
408
+ )
409
+ return new Worker(this.workerUrl)
413
410
  }
414
411
  }
@@ -23,7 +23,7 @@ type UriToMeasureBandwidth = {
23
23
  const updateMetrics = () => {};
24
24
 
25
25
  /**
26
- * Collects useful statistics about playback performance.
26
+ * PLIGIN that collects useful statistics about playback performance.
27
27
  * @beta
28
28
  * @remarks
29
29
  * This plugin does not render anything and is supposed to be extended or used together with other plugins that actually render something.
@@ -111,9 +111,10 @@ export class ClapprStats extends ContainerPlugin {
111
111
 
112
112
  /**
113
113
  * Registers a callback to receive the metrics.
114
- * @param updateMetricsFn
114
+ * @param updateMetricsFn - The callback to receive the metrics
115
115
  */
116
116
  setUpdateMetrics(updateMetricsFn: MetricsUpdateFn) {
117
+ // TODO use events instead
117
118
  this.updateFn = updateMetricsFn;
118
119
  }
119
120
 
@@ -167,13 +168,13 @@ export class ClapprStats extends ContainerPlugin {
167
168
 
168
169
  /**
169
170
  * Returns the collected metrics.
170
- * @returns The collected metrics
171
+ * @returns Currently collected metrics
171
172
  */
172
173
  exportMetrics() {
173
174
  return structuredClone(this.metrics);
174
175
  }
175
176
 
176
- onBitrate(newBitrate: QualityLevel) {
177
+ private onBitrate(newBitrate: QualityLevel) {
177
178
  const bitrate = newBitrate.bitrate;
178
179
  const now = this._now();
179
180
 
@@ -1,7 +1,7 @@
1
1
  import { Container, Events, UICorePlugin, $ } from '@clappr/core'
2
2
 
3
3
  import { TimeProgress } from '../../playback.types.js'
4
- import type { ZeptoResult } from '../../utils/types.js'
4
+ import type { ZeptoResult } from '../../types.js'
5
5
  import { strtimeToMiliseconds } from '../utils.js'
6
6
  import '../../../assets/clips/clips.scss'
7
7
  import assert from 'assert'
@@ -19,7 +19,8 @@ type ClipItem = {
19
19
  }
20
20
 
21
21
  /**
22
- * Configuration options
22
+ * Configuration options for the {@link ClipsPlugin | clips} plugin.
23
+ * @beta
23
24
  */
24
25
  export interface ClipsPluginSettings {
25
26
  /**
@@ -29,7 +30,7 @@ export interface ClipsPluginSettings {
29
30
  }
30
31
 
31
32
  /**
32
- * Adds a behavior of showing a text over the seekbar to indicate the current clip.
33
+ * PLUGIN that shows text over the seekbar to indicate the current clip.
33
34
  * @beta
34
35
  * @remarks
35
36
  * Depends on:
@@ -1,9 +1,7 @@
1
1
  import {
2
- UICorePlugin,
3
2
  Events,
4
3
  template,
5
4
  $,
6
- Core,
7
5
  Container,
8
6
  UIContainerPlugin,
9
7
  } from '@clappr/core'