stormcloud-video-player 0.3.14 → 0.3.17

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 (36) hide show
  1. package/dist/stormcloud-vp.min.js +1 -10
  2. package/lib/index.cjs +8282 -6531
  3. package/lib/index.cjs.map +1 -1
  4. package/lib/index.d.cts +2 -0
  5. package/lib/index.d.ts +2 -0
  6. package/lib/index.js +8112 -6495
  7. package/lib/index.js.map +1 -1
  8. package/lib/player/StormcloudVideoPlayer.cjs +5575 -3981
  9. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  10. package/lib/player/StormcloudVideoPlayer.d.cts +1 -1
  11. package/lib/players/FilePlayer.cjs +556 -225
  12. package/lib/players/FilePlayer.cjs.map +1 -1
  13. package/lib/players/HlsPlayer.cjs +5845 -4163
  14. package/lib/players/HlsPlayer.cjs.map +1 -1
  15. package/lib/players/HlsPlayer.d.cts +1 -1
  16. package/lib/players/index.cjs +6142 -4371
  17. package/lib/players/index.cjs.map +1 -1
  18. package/lib/sdk/hlsAdPlayer.cjs +954 -699
  19. package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
  20. package/lib/sdk/hlsAdPlayer.d.cts +1 -1
  21. package/lib/sdk/ima.cjs +1034 -809
  22. package/lib/sdk/ima.cjs.map +1 -1
  23. package/lib/sdk/ima.d.cts +1 -1
  24. package/lib/{types-t9jEJXZy.d.cts → types-CryTJVCC.d.cts} +1 -0
  25. package/lib/ui/StormcloudVideoPlayer.cjs +6992 -5561
  26. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  27. package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
  28. package/lib/utils/browserCompat.cjs +241 -194
  29. package/lib/utils/browserCompat.cjs.map +1 -1
  30. package/lib/utils/polyfills.cjs +379 -214
  31. package/lib/utils/polyfills.cjs.map +1 -1
  32. package/lib/utils/tracking.cjs +559 -257
  33. package/lib/utils/tracking.cjs.map +1 -1
  34. package/lib/utils/tracking.d.cts +1 -1
  35. package/package.json +6 -1
  36. package/rollup.config.js +22 -0
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { StormcloudVideoPlayer } from '../player/StormcloudVideoPlayer.cjs';
3
- import { S as StormcloudVideoPlayerConfig } from '../types-t9jEJXZy.cjs';
3
+ import { S as StormcloudVideoPlayerConfig } from '../types-CryTJVCC.cjs';
4
4
 
5
5
  type StormcloudVideoPlayerProps = Omit<StormcloudVideoPlayerConfig, "videoElement"> & React.VideoHTMLAttributes<HTMLVideoElement> & {
6
6
  onReady?: (player: StormcloudVideoPlayer) => void;
@@ -1,229 +1,276 @@
1
1
  "use strict";
2
+ function _type_of(obj) {
3
+ "@swc/helpers - typeof";
4
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
5
+ }
2
6
  var __defProp = Object.defineProperty;
3
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
8
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
9
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
10
+ var __export = function(target, all) {
11
+ for(var name in all)__defProp(target, name, {
12
+ get: all[name],
13
+ enumerable: true
14
+ });
15
+ };
16
+ var __copyProps = function(to, from, except, desc) {
17
+ if (from && (typeof from === "undefined" ? "undefined" : _type_of(from)) === "object" || typeof from === "function") {
18
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
19
+ try {
20
+ var _loop = function() {
21
+ var key = _step.value;
22
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
23
+ get: function() {
24
+ return from[key];
25
+ },
26
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
27
+ });
28
+ };
29
+ for(var _iterator = __getOwnPropNames(from)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();
30
+ } catch (err) {
31
+ _didIteratorError = true;
32
+ _iteratorError = err;
33
+ } finally{
34
+ try {
35
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
36
+ _iterator.return();
37
+ }
38
+ } finally{
39
+ if (_didIteratorError) {
40
+ throw _iteratorError;
41
+ }
42
+ }
43
+ }
44
+ }
45
+ return to;
9
46
  };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
47
+ var __toCommonJS = function(mod) {
48
+ return __copyProps(__defProp({}, "__esModule", {
49
+ value: true
50
+ }), mod);
17
51
  };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
52
  // src/utils/browserCompat.ts
21
53
  var browserCompat_exports = {};
22
54
  __export(browserCompat_exports, {
23
- detectBrowser: () => detectBrowser,
24
- getBrowserConfigOverrides: () => getBrowserConfigOverrides,
25
- getRecommendedAdPlayer: () => getRecommendedAdPlayer,
26
- logBrowserInfo: () => logBrowserInfo,
27
- supportsFeature: () => supportsFeature,
28
- supportsGoogleIMA: () => supportsGoogleIMA,
29
- supportsModernJS: () => supportsModernJS
55
+ detectBrowser: function() {
56
+ return detectBrowser;
57
+ },
58
+ getBrowserConfigOverrides: function() {
59
+ return getBrowserConfigOverrides;
60
+ },
61
+ getRecommendedAdPlayer: function() {
62
+ return getRecommendedAdPlayer;
63
+ },
64
+ logBrowserInfo: function() {
65
+ return logBrowserInfo;
66
+ },
67
+ supportsFeature: function() {
68
+ return supportsFeature;
69
+ },
70
+ supportsGoogleIMA: function() {
71
+ return supportsGoogleIMA;
72
+ },
73
+ supportsModernJS: function() {
74
+ return supportsModernJS;
75
+ }
30
76
  });
31
77
  module.exports = __toCommonJS(browserCompat_exports);
32
78
  function getChromeVersion(ua) {
33
- const match = ua.match(/Chrome\/(\d+)/);
34
- return match && match[1] ? parseInt(match[1], 10) : 0;
79
+ var match = ua.match(/Chrome\/(\d+)/);
80
+ return match && match[1] ? parseInt(match[1], 10) : 0;
35
81
  }
36
82
  function getWebKitVersion(ua) {
37
- const match = ua.match(/AppleWebKit\/(\d+)/);
38
- return match && match[1] ? parseInt(match[1], 10) : 0;
83
+ var match = ua.match(/AppleWebKit\/(\d+)/);
84
+ return match && match[1] ? parseInt(match[1], 10) : 0;
39
85
  }
40
86
  function getPlatform() {
41
- var _a;
42
- if ("userAgentData" in navigator && ((_a = navigator.userAgentData) == null ? void 0 : _a.platform)) {
43
- return navigator.userAgentData.platform;
44
- }
45
- const ua = navigator.userAgent;
46
- if (/Mac|iPhone|iPad|iPod/i.test(ua)) {
47
- return /iPhone|iPad|iPod/i.test(ua) ? "iPhone" : "MacIntel";
48
- }
49
- if (/Win/i.test(ua)) {
50
- return "Win32";
51
- }
52
- if (/Linux/i.test(ua)) {
53
- return /Android/i.test(ua) ? "Linux armv8l" : "Linux x86_64";
54
- }
55
- if (/CrOS/i.test(ua)) {
56
- return "CrOS";
57
- }
58
- return navigator.platform || "Unknown";
87
+ var _navigator_userAgentData;
88
+ if ("userAgentData" in navigator && ((_navigator_userAgentData = navigator.userAgentData) === null || _navigator_userAgentData === void 0 ? void 0 : _navigator_userAgentData.platform)) {
89
+ return navigator.userAgentData.platform;
90
+ }
91
+ var ua = navigator.userAgent;
92
+ if (/Mac|iPhone|iPad|iPod/i.test(ua)) {
93
+ return /iPhone|iPad|iPod/i.test(ua) ? "iPhone" : "MacIntel";
94
+ }
95
+ if (/Win/i.test(ua)) {
96
+ return "Win32";
97
+ }
98
+ if (/Linux/i.test(ua)) {
99
+ return /Android/i.test(ua) ? "Linux armv8l" : "Linux x86_64";
100
+ }
101
+ if (/CrOS/i.test(ua)) {
102
+ return "CrOS";
103
+ }
104
+ return navigator.platform || "Unknown";
59
105
  }
60
106
  function detectBrowser() {
61
- const ua = navigator.userAgent;
62
- const platform = getPlatform();
63
- let name = "Unknown";
64
- let version = "0";
65
- let majorVersion = 0;
66
- let isSmartTV = false;
67
- let isLegacyTV = false;
68
- let supportsIMA = true;
69
- let supportsModernJS2 = true;
70
- let recommendedAdPlayer = "ima";
71
- if (/Web0S|webOS/i.test(ua)) {
72
- name = "LG WebOS";
73
- isSmartTV = true;
74
- const match = ua.match(/Web0S[/\s]*([\d.]+)/i);
75
- version = match && match[1] ? match[1] : "Unknown";
76
- if (version !== "Unknown") {
77
- const parts = version.split(".");
78
- majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;
79
- }
80
- } else if (/Tizen/i.test(ua)) {
81
- name = "Samsung Tizen";
82
- isSmartTV = true;
83
- const match = ua.match(/Tizen[/\s]*([\d.]+)/i);
84
- version = match && match[1] ? match[1] : "Unknown";
85
- if (version !== "Unknown") {
86
- const parts = version.split(".");
87
- majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;
88
- }
89
- } else if (/SMART-TV|SmartTV/i.test(ua)) {
90
- name = "Smart TV";
91
- isSmartTV = true;
92
- } else if (/NetCast/i.test(ua)) {
93
- name = "LG NetCast";
94
- isSmartTV = true;
95
- isLegacyTV = true;
96
- } else if (/BRAVIA/i.test(ua)) {
97
- name = "Sony BRAVIA";
98
- isSmartTV = true;
99
- }
100
- const chromeVersion = getChromeVersion(ua);
101
- const webkitVersion = getWebKitVersion(ua);
102
- if (chromeVersion > 0) {
103
- if (!isSmartTV) {
104
- name = "Chrome";
105
- version = chromeVersion.toString();
106
- majorVersion = chromeVersion;
107
- }
108
- if (chromeVersion < 50) {
109
- supportsIMA = false;
110
- supportsModernJS2 = false;
111
- isLegacyTV = true;
112
- recommendedAdPlayer = "hls";
113
- }
114
- }
115
- if (webkitVersion > 0 && webkitVersion < 600) {
116
- supportsModernJS2 = false;
117
- if (isSmartTV) {
118
- isLegacyTV = true;
119
- supportsIMA = false;
120
- recommendedAdPlayer = "hls";
121
- }
122
- }
123
- if (typeof Promise === "undefined" || typeof Map === "undefined" || typeof Set === "undefined") {
124
- supportsModernJS2 = false;
125
- supportsIMA = false;
126
- recommendedAdPlayer = "hls";
127
- }
128
- if (typeof URLSearchParams === "undefined") {
129
- supportsModernJS2 = false;
130
- }
131
- return {
132
- name,
133
- version,
134
- majorVersion,
135
- isSmartTV,
136
- isLegacyTV,
137
- platform,
138
- supportsIMA,
139
- supportsModernJS: supportsModernJS2,
140
- recommendedAdPlayer
141
- };
107
+ var ua = navigator.userAgent;
108
+ var platform = getPlatform();
109
+ var name = "Unknown";
110
+ var version = "0";
111
+ var majorVersion = 0;
112
+ var isSmartTV = false;
113
+ var isLegacyTV = false;
114
+ var supportsIMA = true;
115
+ var supportsModernJS2 = true;
116
+ var recommendedAdPlayer = "ima";
117
+ if (/Web0S|webOS/i.test(ua)) {
118
+ name = "LG WebOS";
119
+ isSmartTV = true;
120
+ var match = ua.match(/Web0S[/\s]*([\d.]+)/i);
121
+ version = match && match[1] ? match[1] : "Unknown";
122
+ if (version !== "Unknown") {
123
+ var parts = version.split(".");
124
+ majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;
125
+ }
126
+ } else if (/Tizen/i.test(ua)) {
127
+ name = "Samsung Tizen";
128
+ isSmartTV = true;
129
+ var match1 = ua.match(/Tizen[/\s]*([\d.]+)/i);
130
+ version = match1 && match1[1] ? match1[1] : "Unknown";
131
+ if (version !== "Unknown") {
132
+ var parts1 = version.split(".");
133
+ majorVersion = parts1[0] ? parseInt(parts1[0], 10) : 0;
134
+ }
135
+ } else if (/SMART-TV|SmartTV/i.test(ua)) {
136
+ name = "Smart TV";
137
+ isSmartTV = true;
138
+ } else if (/NetCast/i.test(ua)) {
139
+ name = "LG NetCast";
140
+ isSmartTV = true;
141
+ isLegacyTV = true;
142
+ } else if (/BRAVIA/i.test(ua)) {
143
+ name = "Sony BRAVIA";
144
+ isSmartTV = true;
145
+ }
146
+ var chromeVersion = getChromeVersion(ua);
147
+ var webkitVersion = getWebKitVersion(ua);
148
+ if (chromeVersion > 0) {
149
+ if (!isSmartTV) {
150
+ name = "Chrome";
151
+ version = chromeVersion.toString();
152
+ majorVersion = chromeVersion;
153
+ }
154
+ if (chromeVersion < 50) {
155
+ supportsIMA = false;
156
+ supportsModernJS2 = false;
157
+ isLegacyTV = true;
158
+ recommendedAdPlayer = "hls";
159
+ }
160
+ }
161
+ if (webkitVersion > 0 && webkitVersion < 600) {
162
+ supportsModernJS2 = false;
163
+ if (isSmartTV) {
164
+ isLegacyTV = true;
165
+ supportsIMA = false;
166
+ recommendedAdPlayer = "hls";
167
+ }
168
+ }
169
+ if (typeof Promise === "undefined" || typeof Map === "undefined" || typeof Set === "undefined") {
170
+ supportsModernJS2 = false;
171
+ supportsIMA = false;
172
+ recommendedAdPlayer = "hls";
173
+ }
174
+ if (typeof URLSearchParams === "undefined") {
175
+ supportsModernJS2 = false;
176
+ }
177
+ return {
178
+ name: name,
179
+ version: version,
180
+ majorVersion: majorVersion,
181
+ isSmartTV: isSmartTV,
182
+ isLegacyTV: isLegacyTV,
183
+ platform: platform,
184
+ supportsIMA: supportsIMA,
185
+ supportsModernJS: supportsModernJS2,
186
+ recommendedAdPlayer: recommendedAdPlayer
187
+ };
142
188
  }
143
189
  function supportsGoogleIMA() {
144
- const browser = detectBrowser();
145
- if (browser.isLegacyTV) {
146
- return false;
147
- }
148
- if (typeof document === "undefined" || typeof document.createElement !== "function") {
149
- return false;
150
- }
151
- try {
152
- const video = document.createElement("video");
153
- if (!video) {
154
- return false;
155
- }
156
- } catch (e) {
157
- return false;
158
- }
159
- if (typeof Promise === "undefined") {
160
- return false;
161
- }
162
- return browser.supportsIMA;
190
+ var browser = detectBrowser();
191
+ if (browser.isLegacyTV) {
192
+ return false;
193
+ }
194
+ if (typeof document === "undefined" || typeof document.createElement !== "function") {
195
+ return false;
196
+ }
197
+ try {
198
+ var video = document.createElement("video");
199
+ if (!video) {
200
+ return false;
201
+ }
202
+ } catch (e) {
203
+ return false;
204
+ }
205
+ if (typeof Promise === "undefined") {
206
+ return false;
207
+ }
208
+ return browser.supportsIMA;
163
209
  }
164
210
  function getRecommendedAdPlayer() {
165
- const browser = detectBrowser();
166
- return browser.recommendedAdPlayer;
211
+ var browser = detectBrowser();
212
+ return browser.recommendedAdPlayer;
167
213
  }
168
214
  function supportsModernJS() {
169
- try {
170
- return typeof Promise !== "undefined" && typeof Map !== "undefined" && typeof Set !== "undefined" && typeof Array.from !== "undefined" && typeof Object.assign !== "undefined" && typeof Array.prototype.forEach !== "undefined" && typeof String.prototype.includes !== "undefined";
171
- } catch (e) {
172
- return false;
173
- }
215
+ try {
216
+ return typeof Promise !== "undefined" && typeof Map !== "undefined" && typeof Set !== "undefined" && typeof Array.from !== "undefined" && typeof Object.assign !== "undefined" && typeof Array.prototype.forEach !== "undefined" && typeof String.prototype.includes !== "undefined";
217
+ } catch (e) {
218
+ return false;
219
+ }
174
220
  }
175
- function logBrowserInfo(debug = false) {
176
- if (!debug) return;
177
- const browser = detectBrowser();
178
- const imaSupport = supportsGoogleIMA();
179
- console.log("[StormcloudVideoPlayer] Browser Compatibility Info:", {
180
- browser: `${browser.name} ${browser.version}`,
181
- platform: browser.platform,
182
- isSmartTV: browser.isSmartTV,
183
- isLegacyTV: browser.isLegacyTV,
184
- supportsIMA: imaSupport,
185
- supportsModernJS: browser.supportsModernJS,
186
- recommendedAdPlayer: browser.recommendedAdPlayer,
187
- userAgent: navigator.userAgent
188
- });
221
+ function logBrowserInfo() {
222
+ var debug = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
223
+ if (!debug) return;
224
+ var browser = detectBrowser();
225
+ var imaSupport = supportsGoogleIMA();
226
+ console.log("[StormcloudVideoPlayer] Browser Compatibility Info:", {
227
+ browser: "".concat(browser.name, " ").concat(browser.version),
228
+ platform: browser.platform,
229
+ isSmartTV: browser.isSmartTV,
230
+ isLegacyTV: browser.isLegacyTV,
231
+ supportsIMA: imaSupport,
232
+ supportsModernJS: browser.supportsModernJS,
233
+ recommendedAdPlayer: browser.recommendedAdPlayer,
234
+ userAgent: navigator.userAgent
235
+ });
189
236
  }
190
237
  function getBrowserConfigOverrides() {
191
- const browser = detectBrowser();
192
- const overrides = {};
193
- if (browser.isLegacyTV || !browser.supportsIMA) {
194
- overrides.adPlayerType = "hls";
195
- }
196
- if (browser.isSmartTV) {
197
- overrides.allowNativeHls = true;
198
- }
199
- return overrides;
238
+ var browser = detectBrowser();
239
+ var overrides = {};
240
+ if (browser.isLegacyTV || !browser.supportsIMA) {
241
+ overrides.adPlayerType = "hls";
242
+ }
243
+ if (browser.isSmartTV) {
244
+ overrides.allowNativeHls = true;
245
+ }
246
+ return overrides;
200
247
  }
201
248
  function supportsFeature(feature) {
202
- switch (feature) {
203
- case "ima":
204
- return supportsGoogleIMA();
205
- case "urlsearchparams":
206
- return typeof URLSearchParams !== "undefined";
207
- case "textencoder":
208
- return typeof TextEncoder !== "undefined";
209
- case "promises":
210
- return typeof Promise !== "undefined";
211
- case "fetch":
212
- return typeof fetch !== "undefined";
213
- case "crypto":
214
- return typeof crypto !== "undefined" && typeof crypto.subtle !== "undefined";
215
- default:
216
- return false;
217
- }
249
+ switch(feature){
250
+ case "ima":
251
+ return supportsGoogleIMA();
252
+ case "urlsearchparams":
253
+ return typeof URLSearchParams !== "undefined";
254
+ case "textencoder":
255
+ return typeof TextEncoder !== "undefined";
256
+ case "promises":
257
+ return typeof Promise !== "undefined";
258
+ case "fetch":
259
+ return typeof fetch !== "undefined";
260
+ case "crypto":
261
+ return typeof crypto !== "undefined" && typeof crypto.subtle !== "undefined";
262
+ default:
263
+ return false;
264
+ }
218
265
  }
219
266
  // Annotate the CommonJS export names for ESM import in node:
220
267
  0 && (module.exports = {
221
- detectBrowser,
222
- getBrowserConfigOverrides,
223
- getRecommendedAdPlayer,
224
- logBrowserInfo,
225
- supportsFeature,
226
- supportsGoogleIMA,
227
- supportsModernJS
268
+ detectBrowser: detectBrowser,
269
+ getBrowserConfigOverrides: getBrowserConfigOverrides,
270
+ getRecommendedAdPlayer: getRecommendedAdPlayer,
271
+ logBrowserInfo: logBrowserInfo,
272
+ supportsFeature: supportsFeature,
273
+ supportsGoogleIMA: supportsGoogleIMA,
274
+ supportsModernJS: supportsModernJS
228
275
  });
229
276
  //# sourceMappingURL=browserCompat.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/browserCompat.ts"],"sourcesContent":["interface NavigatorUAData {\n platform?: string;\n brands?: Array<{ brand: string; version: string }>;\n mobile?: boolean;\n}\n\ndeclare global {\n interface Navigator {\n userAgentData?: NavigatorUAData;\n }\n}\n\nexport interface BrowserInfo {\n name: string;\n version: string;\n majorVersion: number;\n isSmartTV: boolean;\n isLegacyTV: boolean;\n platform: string;\n supportsIMA: boolean;\n supportsModernJS: boolean;\n recommendedAdPlayer: 'ima' | 'hls';\n}\n\nfunction getChromeVersion(ua: string): number {\n const match = ua.match(/Chrome\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\n\nfunction getWebKitVersion(ua: string): number {\n const match = ua.match(/AppleWebKit\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\n\nfunction getPlatform(): string {\n if ('userAgentData' in navigator && navigator.userAgentData?.platform) {\n return navigator.userAgentData.platform;\n }\n\n const ua = navigator.userAgent;\n if (/Mac|iPhone|iPad|iPod/i.test(ua)) {\n return /iPhone|iPad|iPod/i.test(ua) ? 'iPhone' : 'MacIntel';\n }\n if (/Win/i.test(ua)) {\n return 'Win32';\n }\n if (/Linux/i.test(ua)) {\n return /Android/i.test(ua) ? 'Linux armv8l' : 'Linux x86_64';\n }\n if (/CrOS/i.test(ua)) {\n return 'CrOS';\n }\n\n // eslint-disable-next-line deprecation/deprecation\n return (navigator as any).platform || 'Unknown';\n}\n\nexport function detectBrowser(): BrowserInfo {\n const ua = navigator.userAgent;\n const platform = getPlatform();\n\n let name = 'Unknown';\n let version = '0';\n let majorVersion = 0;\n let isSmartTV = false;\n let isLegacyTV = false;\n let supportsIMA = true;\n let supportsModernJS = true;\n let recommendedAdPlayer: 'ima' | 'hls' = 'ima';\n\n if (/Web0S|webOS/i.test(ua)) {\n name = 'LG WebOS';\n isSmartTV = true;\n const match = ua.match(/Web0S[/\\s]*([\\d.]+)/i);\n version = match && match[1] ? match[1] : 'Unknown';\n if (version !== 'Unknown') {\n const parts = version.split('.');\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n }\n } else if (/Tizen/i.test(ua)) {\n name = 'Samsung Tizen';\n isSmartTV = true;\n const match = ua.match(/Tizen[/\\s]*([\\d.]+)/i);\n version = match && match[1] ? match[1] : 'Unknown';\n if (version !== 'Unknown') {\n const parts = version.split('.');\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n }\n } else if (/SMART-TV|SmartTV/i.test(ua)) {\n name = 'Smart TV';\n isSmartTV = true;\n } else if (/NetCast/i.test(ua)) {\n name = 'LG NetCast';\n isSmartTV = true;\n isLegacyTV = true;\n } else if (/BRAVIA/i.test(ua)) {\n name = 'Sony BRAVIA';\n isSmartTV = true;\n }\n\n const chromeVersion = getChromeVersion(ua);\n const webkitVersion = getWebKitVersion(ua);\n\n if (chromeVersion > 0) {\n if (!isSmartTV) {\n name = 'Chrome';\n version = chromeVersion.toString();\n majorVersion = chromeVersion;\n }\n\n if (chromeVersion < 50) {\n supportsIMA = false;\n supportsModernJS = false;\n isLegacyTV = true;\n recommendedAdPlayer = 'hls';\n }\n }\n\n if (webkitVersion > 0 && webkitVersion < 600) {\n supportsModernJS = false;\n if (isSmartTV) {\n isLegacyTV = true;\n supportsIMA = false;\n recommendedAdPlayer = 'hls';\n }\n }\n\n if (typeof Promise === 'undefined' ||\n typeof Map === 'undefined' ||\n typeof Set === 'undefined') {\n supportsModernJS = false;\n supportsIMA = false;\n recommendedAdPlayer = 'hls';\n }\n\n if (typeof URLSearchParams === 'undefined') {\n supportsModernJS = false;\n }\n\n return {\n name,\n version,\n majorVersion,\n isSmartTV,\n isLegacyTV,\n platform,\n supportsIMA,\n supportsModernJS,\n recommendedAdPlayer,\n };\n}\n\nexport function supportsGoogleIMA(): boolean {\n const browser = detectBrowser();\n\n if (browser.isLegacyTV) {\n return false;\n }\n\n if (typeof document === 'undefined' ||\n typeof document.createElement !== 'function') {\n return false;\n }\n\n try {\n const video = document.createElement('video');\n if (!video) {\n return false;\n }\n } catch (e) {\n return false;\n }\n\n if (typeof Promise === 'undefined') {\n return false;\n }\n\n return browser.supportsIMA;\n}\n\nexport function getRecommendedAdPlayer(): 'ima' | 'hls' {\n const browser = detectBrowser();\n return browser.recommendedAdPlayer;\n}\n\nexport function supportsModernJS(): boolean {\n try {\n return (\n typeof Promise !== 'undefined' &&\n typeof Map !== 'undefined' &&\n typeof Set !== 'undefined' &&\n typeof Array.from !== 'undefined' &&\n typeof Object.assign !== 'undefined' &&\n typeof Array.prototype.forEach !== 'undefined' &&\n typeof String.prototype.includes !== 'undefined'\n );\n } catch (e) {\n return false;\n }\n}\n\nexport function logBrowserInfo(debug: boolean = false): void {\n if (!debug) return;\n\n const browser = detectBrowser();\n const imaSupport = supportsGoogleIMA();\n\n console.log('[StormcloudVideoPlayer] Browser Compatibility Info:', {\n browser: `${browser.name} ${browser.version}`,\n platform: browser.platform,\n isSmartTV: browser.isSmartTV,\n isLegacyTV: browser.isLegacyTV,\n supportsIMA: imaSupport,\n supportsModernJS: browser.supportsModernJS,\n recommendedAdPlayer: browser.recommendedAdPlayer,\n userAgent: navigator.userAgent,\n });\n}\n\nexport function getBrowserConfigOverrides(): {\n adPlayerType?: 'ima' | 'hls';\n allowNativeHls?: boolean;\n} {\n const browser = detectBrowser();\n const overrides: any = {};\n\n if (browser.isLegacyTV || !browser.supportsIMA) {\n overrides.adPlayerType = 'hls';\n }\n\n if (browser.isSmartTV) {\n overrides.allowNativeHls = true;\n }\n\n return overrides;\n}\n\nexport function supportsFeature(feature: string): boolean {\n switch (feature) {\n case 'ima':\n return supportsGoogleIMA();\n case 'urlsearchparams':\n return typeof URLSearchParams !== 'undefined';\n case 'textencoder':\n return typeof TextEncoder !== 'undefined';\n case 'promises':\n return typeof Promise !== 'undefined';\n case 'fetch':\n return typeof fetch !== 'undefined';\n case 'crypto':\n return typeof crypto !== 'undefined' && typeof crypto.subtle !== 'undefined';\n default:\n return false;\n }\n}\n\n"],"mappings":"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","names":["supportsModernJS"]}
1
+ {"version":3,"sources":["/home/ubuntu24/Dev/stormcloud-vp/lib/utils/browserCompat.cjs","../../src/utils/browserCompat.ts"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","__getOwnPropNames","getOwnPropertyDescriptor","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","browserCompat_exports","detectBrowser","getBrowserConfigOverrides","getRecommendedAdPlayer","logBrowserInfo","supportsFeature","supportsGoogleIMA","supportsModernJS","module","exports","getChromeVersion","ua","match","parseInt","getWebKitVersion","getPlatform","navigator","userAgentData","platform","userAgent","test","version","majorVersion","isSmartTV","isLegacyTV","supportsIMA","recommendedAdPlayer","parts","split","chromeVersion","webkitVersion","toString","Promise","Map","Set","URLSearchParams","browser","document","createElement","video","e","Array","assign","forEach","String","includes","debug","imaSupport","console","log"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/utils/browserCompat.ts\nvar browserCompat_exports = {};\n__export(browserCompat_exports, {\n detectBrowser: () => detectBrowser,\n getBrowserConfigOverrides: () => getBrowserConfigOverrides,\n getRecommendedAdPlayer: () => getRecommendedAdPlayer,\n logBrowserInfo: () => logBrowserInfo,\n supportsFeature: () => supportsFeature,\n supportsGoogleIMA: () => supportsGoogleIMA,\n supportsModernJS: () => supportsModernJS\n});\nmodule.exports = __toCommonJS(browserCompat_exports);\nfunction getChromeVersion(ua) {\n const match = ua.match(/Chrome\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\nfunction getWebKitVersion(ua) {\n const match = ua.match(/AppleWebKit\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\nfunction getPlatform() {\n if (\"userAgentData\" in navigator && navigator.userAgentData?.platform) {\n return navigator.userAgentData.platform;\n }\n const ua = navigator.userAgent;\n if (/Mac|iPhone|iPad|iPod/i.test(ua)) {\n return /iPhone|iPad|iPod/i.test(ua) ? \"iPhone\" : \"MacIntel\";\n }\n if (/Win/i.test(ua)) {\n return \"Win32\";\n }\n if (/Linux/i.test(ua)) {\n return /Android/i.test(ua) ? \"Linux armv8l\" : \"Linux x86_64\";\n }\n if (/CrOS/i.test(ua)) {\n return \"CrOS\";\n }\n return navigator.platform || \"Unknown\";\n}\nfunction detectBrowser() {\n const ua = navigator.userAgent;\n const platform = getPlatform();\n let name = \"Unknown\";\n let version = \"0\";\n let majorVersion = 0;\n let isSmartTV = false;\n let isLegacyTV = false;\n let supportsIMA = true;\n let supportsModernJS2 = true;\n let recommendedAdPlayer = \"ima\";\n if (/Web0S|webOS/i.test(ua)) {\n name = \"LG WebOS\";\n isSmartTV = true;\n const match = ua.match(/Web0S[/\\s]*([\\d.]+)/i);\n version = match && match[1] ? match[1] : \"Unknown\";\n if (version !== \"Unknown\") {\n const parts = version.split(\".\");\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n }\n } else if (/Tizen/i.test(ua)) {\n name = \"Samsung Tizen\";\n isSmartTV = true;\n const match = ua.match(/Tizen[/\\s]*([\\d.]+)/i);\n version = match && match[1] ? match[1] : \"Unknown\";\n if (version !== \"Unknown\") {\n const parts = version.split(\".\");\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n }\n } else if (/SMART-TV|SmartTV/i.test(ua)) {\n name = \"Smart TV\";\n isSmartTV = true;\n } else if (/NetCast/i.test(ua)) {\n name = \"LG NetCast\";\n isSmartTV = true;\n isLegacyTV = true;\n } else if (/BRAVIA/i.test(ua)) {\n name = \"Sony BRAVIA\";\n isSmartTV = true;\n }\n const chromeVersion = getChromeVersion(ua);\n const webkitVersion = getWebKitVersion(ua);\n if (chromeVersion > 0) {\n if (!isSmartTV) {\n name = \"Chrome\";\n version = chromeVersion.toString();\n majorVersion = chromeVersion;\n }\n if (chromeVersion < 50) {\n supportsIMA = false;\n supportsModernJS2 = false;\n isLegacyTV = true;\n recommendedAdPlayer = \"hls\";\n }\n }\n if (webkitVersion > 0 && webkitVersion < 600) {\n supportsModernJS2 = false;\n if (isSmartTV) {\n isLegacyTV = true;\n supportsIMA = false;\n recommendedAdPlayer = \"hls\";\n }\n }\n if (typeof Promise === \"undefined\" || typeof Map === \"undefined\" || typeof Set === \"undefined\") {\n supportsModernJS2 = false;\n supportsIMA = false;\n recommendedAdPlayer = \"hls\";\n }\n if (typeof URLSearchParams === \"undefined\") {\n supportsModernJS2 = false;\n }\n return {\n name,\n version,\n majorVersion,\n isSmartTV,\n isLegacyTV,\n platform,\n supportsIMA,\n supportsModernJS: supportsModernJS2,\n recommendedAdPlayer\n };\n}\nfunction supportsGoogleIMA() {\n const browser = detectBrowser();\n if (browser.isLegacyTV) {\n return false;\n }\n if (typeof document === \"undefined\" || typeof document.createElement !== \"function\") {\n return false;\n }\n try {\n const video = document.createElement(\"video\");\n if (!video) {\n return false;\n }\n } catch (e) {\n return false;\n }\n if (typeof Promise === \"undefined\") {\n return false;\n }\n return browser.supportsIMA;\n}\nfunction getRecommendedAdPlayer() {\n const browser = detectBrowser();\n return browser.recommendedAdPlayer;\n}\nfunction supportsModernJS() {\n try {\n return typeof Promise !== \"undefined\" && typeof Map !== \"undefined\" && typeof Set !== \"undefined\" && typeof Array.from !== \"undefined\" && typeof Object.assign !== \"undefined\" && typeof Array.prototype.forEach !== \"undefined\" && typeof String.prototype.includes !== \"undefined\";\n } catch (e) {\n return false;\n }\n}\nfunction logBrowserInfo(debug = false) {\n if (!debug) return;\n const browser = detectBrowser();\n const imaSupport = supportsGoogleIMA();\n console.log(\"[StormcloudVideoPlayer] Browser Compatibility Info:\", {\n browser: `${browser.name} ${browser.version}`,\n platform: browser.platform,\n isSmartTV: browser.isSmartTV,\n isLegacyTV: browser.isLegacyTV,\n supportsIMA: imaSupport,\n supportsModernJS: browser.supportsModernJS,\n recommendedAdPlayer: browser.recommendedAdPlayer,\n userAgent: navigator.userAgent\n });\n}\nfunction getBrowserConfigOverrides() {\n const browser = detectBrowser();\n const overrides = {};\n if (browser.isLegacyTV || !browser.supportsIMA) {\n overrides.adPlayerType = \"hls\";\n }\n if (browser.isSmartTV) {\n overrides.allowNativeHls = true;\n }\n return overrides;\n}\nfunction supportsFeature(feature) {\n switch (feature) {\n case \"ima\":\n return supportsGoogleIMA();\n case \"urlsearchparams\":\n return typeof URLSearchParams !== \"undefined\";\n case \"textencoder\":\n return typeof TextEncoder !== \"undefined\";\n case \"promises\":\n return typeof Promise !== \"undefined\";\n case \"fetch\":\n return typeof fetch !== \"undefined\";\n case \"crypto\":\n return typeof crypto !== \"undefined\" && typeof crypto.subtle !== \"undefined\";\n default:\n return false;\n }\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n detectBrowser,\n getBrowserConfigOverrides,\n getRecommendedAdPlayer,\n logBrowserInfo,\n supportsFeature,\n supportsGoogleIMA,\n supportsModernJS\n});\n","interface NavigatorUAData {\n platform?: string;\n brands?: Array<{ brand: string; version: string }>;\n mobile?: boolean;\n}\n\ndeclare global {\n interface Navigator {\n userAgentData?: NavigatorUAData;\n }\n}\n\nexport interface BrowserInfo {\n name: string;\n version: string;\n majorVersion: number;\n isSmartTV: boolean;\n isLegacyTV: boolean;\n platform: string;\n supportsIMA: boolean;\n supportsModernJS: boolean;\n recommendedAdPlayer: 'ima' | 'hls';\n}\n\nfunction getChromeVersion(ua: string): number {\n const match = ua.match(/Chrome\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\n\nfunction getWebKitVersion(ua: string): number {\n const match = ua.match(/AppleWebKit\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\n\nfunction getPlatform(): string {\n if ('userAgentData' in navigator && navigator.userAgentData?.platform) {\n return navigator.userAgentData.platform;\n }\n\n const ua = navigator.userAgent;\n if (/Mac|iPhone|iPad|iPod/i.test(ua)) {\n return /iPhone|iPad|iPod/i.test(ua) ? 'iPhone' : 'MacIntel';\n }\n if (/Win/i.test(ua)) {\n return 'Win32';\n }\n if (/Linux/i.test(ua)) {\n return /Android/i.test(ua) ? 'Linux armv8l' : 'Linux x86_64';\n }\n if (/CrOS/i.test(ua)) {\n return 'CrOS';\n }\n\n // eslint-disable-next-line deprecation/deprecation\n return (navigator as any).platform || 'Unknown';\n}\n\nexport function detectBrowser(): BrowserInfo {\n const ua = navigator.userAgent;\n const platform = getPlatform();\n\n let name = 'Unknown';\n let version = '0';\n let majorVersion = 0;\n let isSmartTV = false;\n let isLegacyTV = false;\n let supportsIMA = true;\n let supportsModernJS = true;\n let recommendedAdPlayer: 'ima' | 'hls' = 'ima';\n\n if (/Web0S|webOS/i.test(ua)) {\n name = 'LG WebOS';\n isSmartTV = true;\n const match = ua.match(/Web0S[/\\s]*([\\d.]+)/i);\n version = match && match[1] ? match[1] : 'Unknown';\n if (version !== 'Unknown') {\n const parts = version.split('.');\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n }\n } else if (/Tizen/i.test(ua)) {\n name = 'Samsung Tizen';\n isSmartTV = true;\n const match = ua.match(/Tizen[/\\s]*([\\d.]+)/i);\n version = match && match[1] ? match[1] : 'Unknown';\n if (version !== 'Unknown') {\n const parts = version.split('.');\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n }\n } else if (/SMART-TV|SmartTV/i.test(ua)) {\n name = 'Smart TV';\n isSmartTV = true;\n } else if (/NetCast/i.test(ua)) {\n name = 'LG NetCast';\n isSmartTV = true;\n isLegacyTV = true;\n } else if (/BRAVIA/i.test(ua)) {\n name = 'Sony BRAVIA';\n isSmartTV = true;\n }\n\n const chromeVersion = getChromeVersion(ua);\n const webkitVersion = getWebKitVersion(ua);\n\n if (chromeVersion > 0) {\n if (!isSmartTV) {\n name = 'Chrome';\n version = chromeVersion.toString();\n majorVersion = chromeVersion;\n }\n\n if (chromeVersion < 50) {\n supportsIMA = false;\n supportsModernJS = false;\n isLegacyTV = true;\n recommendedAdPlayer = 'hls';\n }\n }\n\n if (webkitVersion > 0 && webkitVersion < 600) {\n supportsModernJS = false;\n if (isSmartTV) {\n isLegacyTV = true;\n supportsIMA = false;\n recommendedAdPlayer = 'hls';\n }\n }\n\n if (typeof Promise === 'undefined' ||\n typeof Map === 'undefined' ||\n typeof Set === 'undefined') {\n supportsModernJS = false;\n supportsIMA = false;\n recommendedAdPlayer = 'hls';\n }\n\n if (typeof URLSearchParams === 'undefined') {\n supportsModernJS = false;\n }\n\n return {\n name,\n version,\n majorVersion,\n isSmartTV,\n isLegacyTV,\n platform,\n supportsIMA,\n supportsModernJS,\n recommendedAdPlayer,\n };\n}\n\nexport function supportsGoogleIMA(): boolean {\n const browser = detectBrowser();\n\n if (browser.isLegacyTV) {\n return false;\n }\n\n if (typeof document === 'undefined' ||\n typeof document.createElement !== 'function') {\n return false;\n }\n\n try {\n const video = document.createElement('video');\n if (!video) {\n return false;\n }\n } catch (e) {\n return false;\n }\n\n if (typeof Promise === 'undefined') {\n return false;\n }\n\n return browser.supportsIMA;\n}\n\nexport function getRecommendedAdPlayer(): 'ima' | 'hls' {\n const browser = detectBrowser();\n return browser.recommendedAdPlayer;\n}\n\nexport function supportsModernJS(): boolean {\n try {\n return (\n typeof Promise !== 'undefined' &&\n typeof Map !== 'undefined' &&\n typeof Set !== 'undefined' &&\n typeof Array.from !== 'undefined' &&\n typeof Object.assign !== 'undefined' &&\n typeof Array.prototype.forEach !== 'undefined' &&\n typeof String.prototype.includes !== 'undefined'\n );\n } catch (e) {\n return false;\n }\n}\n\nexport function logBrowserInfo(debug: boolean = false): void {\n if (!debug) return;\n\n const browser = detectBrowser();\n const imaSupport = supportsGoogleIMA();\n\n console.log('[StormcloudVideoPlayer] Browser Compatibility Info:', {\n browser: `${browser.name} ${browser.version}`,\n platform: browser.platform,\n isSmartTV: browser.isSmartTV,\n isLegacyTV: browser.isLegacyTV,\n supportsIMA: imaSupport,\n supportsModernJS: browser.supportsModernJS,\n recommendedAdPlayer: browser.recommendedAdPlayer,\n userAgent: navigator.userAgent,\n });\n}\n\nexport function getBrowserConfigOverrides(): {\n adPlayerType?: 'ima' | 'hls';\n allowNativeHls?: boolean;\n} {\n const browser = detectBrowser();\n const overrides: any = {};\n\n if (browser.isLegacyTV || !browser.supportsIMA) {\n overrides.adPlayerType = 'hls';\n }\n\n if (browser.isSmartTV) {\n overrides.allowNativeHls = true;\n }\n\n return overrides;\n}\n\nexport function supportsFeature(feature: string): boolean {\n switch (feature) {\n case 'ima':\n return supportsGoogleIMA();\n case 'urlsearchparams':\n return typeof URLSearchParams !== 'undefined';\n case 'textencoder':\n return typeof TextEncoder !== 'undefined';\n case 'promises':\n return typeof Promise !== 'undefined';\n case 'fetch':\n return typeof fetch !== 'undefined';\n case 'crypto':\n return typeof crypto !== 'undefined' && typeof crypto.subtle !== 'undefined';\n default:\n return false;\n }\n}\n\n"]}