stormcloud-video-player 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +245 -156
  2. package/dist/stormcloud-vp.min.js +1 -1
  3. package/lib/index.cjs +9759 -5311
  4. package/lib/index.cjs.map +1 -1
  5. package/lib/index.d.cts +193 -17
  6. package/lib/index.d.ts +193 -17
  7. package/lib/index.js +9761 -5329
  8. package/lib/index.js.map +1 -1
  9. package/lib/player/StormcloudVideoPlayer.cjs +7090 -1508
  10. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  11. package/lib/player/StormcloudVideoPlayer.d.cts +95 -9
  12. package/lib/players/HlsPlayer.cjs +7107 -1525
  13. package/lib/players/HlsPlayer.cjs.map +1 -1
  14. package/lib/players/HlsPlayer.d.cts +1 -1
  15. package/lib/players/index.cjs +7098 -1516
  16. package/lib/players/index.cjs.map +1 -1
  17. package/lib/sdk/hlsAdPlayer.cjs +302 -266
  18. package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
  19. package/lib/sdk/hlsAdPlayer.d.cts +2 -2
  20. package/lib/sdk/ima.cjs +1375 -0
  21. package/lib/sdk/ima.cjs.map +1 -0
  22. package/lib/sdk/ima.d.cts +12 -0
  23. package/lib/sdk/prebid.cjs +564 -0
  24. package/lib/sdk/prebid.cjs.map +1 -0
  25. package/lib/sdk/prebid.d.cts +5 -0
  26. package/lib/sdk/prebidController.cjs +1560 -0
  27. package/lib/sdk/prebidController.cjs.map +1 -0
  28. package/lib/sdk/prebidController.d.cts +11 -0
  29. package/lib/sdk/vastParser.cjs +393 -0
  30. package/lib/sdk/vastParser.cjs.map +1 -0
  31. package/lib/sdk/vastParser.d.cts +45 -0
  32. package/lib/{types-Ca4ZDaWw.d.cts → types-g2d4Akez.d.cts} +72 -3
  33. package/lib/ui/StormcloudVideoPlayer.cjs +7130 -1530
  34. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  35. package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
  36. package/lib/utils/browserCompat.cjs +222 -20
  37. package/lib/utils/browserCompat.cjs.map +1 -1
  38. package/lib/utils/browserCompat.d.cts +9 -1
  39. package/lib/utils/tracking.d.cts +1 -1
  40. package/package.json +2 -1
  41. package/lib/sdk/adstormPlayer.cjs +0 -908
  42. package/lib/sdk/adstormPlayer.cjs.map +0 -1
  43. package/lib/sdk/adstormPlayer.d.cts +0 -9
@@ -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-Ca4ZDaWw.cjs';
3
+ import { S as StormcloudVideoPlayerConfig } from '../types-g2d4Akez.cjs';
4
4
 
5
5
  type StormcloudVideoPlayerProps = Omit<StormcloudVideoPlayerConfig, "videoElement"> & React.VideoHTMLAttributes<HTMLVideoElement> & {
6
6
  onReady?: (player: StormcloudVideoPlayer) => void;
@@ -1,4 +1,56 @@
1
1
  "use strict";
2
+ function _define_property(obj, key, value) {
3
+ if (key in obj) {
4
+ Object.defineProperty(obj, key, {
5
+ value: value,
6
+ enumerable: true,
7
+ configurable: true,
8
+ writable: true
9
+ });
10
+ } else {
11
+ obj[key] = value;
12
+ }
13
+ return obj;
14
+ }
15
+ function _object_spread(target) {
16
+ for(var i = 1; i < arguments.length; i++){
17
+ var source = arguments[i] != null ? arguments[i] : {};
18
+ var ownKeys = Object.keys(source);
19
+ if (typeof Object.getOwnPropertySymbols === "function") {
20
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
21
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
22
+ }));
23
+ }
24
+ ownKeys.forEach(function(key) {
25
+ _define_property(target, key, source[key]);
26
+ });
27
+ }
28
+ return target;
29
+ }
30
+ function ownKeys(object, enumerableOnly) {
31
+ var keys = Object.keys(object);
32
+ if (Object.getOwnPropertySymbols) {
33
+ var symbols = Object.getOwnPropertySymbols(object);
34
+ if (enumerableOnly) {
35
+ symbols = symbols.filter(function(sym) {
36
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
37
+ });
38
+ }
39
+ keys.push.apply(keys, symbols);
40
+ }
41
+ return keys;
42
+ }
43
+ function _object_spread_props(target, source) {
44
+ source = source != null ? source : {};
45
+ if (Object.getOwnPropertyDescriptors) {
46
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
47
+ } else {
48
+ ownKeys(Object(source)).forEach(function(key) {
49
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
50
+ });
51
+ }
52
+ return target;
53
+ }
2
54
  function _type_of(obj) {
3
55
  "@swc/helpers - typeof";
4
56
  return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
@@ -58,12 +110,18 @@ __export(browserCompat_exports, {
58
110
  getBrowserConfigOverrides: function() {
59
111
  return getBrowserConfigOverrides;
60
112
  },
113
+ getRecommendedAdPlayer: function() {
114
+ return getRecommendedAdPlayer;
115
+ },
61
116
  logBrowserInfo: function() {
62
117
  return logBrowserInfo;
63
118
  },
64
119
  supportsFeature: function() {
65
120
  return supportsFeature;
66
121
  },
122
+ supportsGoogleIMA: function() {
123
+ return supportsGoogleIMA;
124
+ },
67
125
  supportsModernJS: function() {
68
126
  return supportsModernJS;
69
127
  }
@@ -105,15 +163,75 @@ function detectBrowser() {
105
163
  var majorVersion = 0;
106
164
  var isSmartTV = false;
107
165
  var isLegacyTV = false;
166
+ var supportsIMA = true;
108
167
  var supportsModernJS2 = true;
109
- if (/Web0S|webOS/i.test(ua)) {
168
+ var recommendedAdPlayer = "ima";
169
+ var webOSVersion;
170
+ var tizenVersion;
171
+ var chromeVersionNum;
172
+ var chromeVersion = getChromeVersion(ua);
173
+ var webkitVersion = getWebKitVersion(ua);
174
+ chromeVersionNum = chromeVersion > 0 ? chromeVersion : void 0;
175
+ if (/Web0S|webOS|LG Browser|LGSTB/i.test(ua)) {
110
176
  name = "LG WebOS";
111
177
  isSmartTV = true;
112
- var match = ua.match(/Web0S[/\s]*([\d.]+)/i);
113
- version = match && match[1] ? match[1] : "Unknown";
114
- if (version !== "Unknown") {
178
+ var match = ua.match(/Web0S[/\s]*([\d.]+)/i) || ua.match(/webOS[/\s]*([\d.]+)/i);
179
+ if (!match || !match[1]) {
180
+ match = ua.match(/webOSTV[/\s-]*([\d.]+)/i) || ua.match(/webOS\.TV[/\s-]*([\d.]+)/i);
181
+ }
182
+ if (match && match[1]) {
183
+ version = match[1];
115
184
  var parts = version.split(".");
116
185
  majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;
186
+ webOSVersion = majorVersion;
187
+ } else if (chromeVersion > 0) {
188
+ if (chromeVersion >= 79) {
189
+ webOSVersion = 6;
190
+ version = "6.0";
191
+ majorVersion = 6;
192
+ } else if (chromeVersion >= 68) {
193
+ webOSVersion = 5;
194
+ version = "5.0";
195
+ majorVersion = 5;
196
+ } else if (chromeVersion >= 53) {
197
+ webOSVersion = 4;
198
+ version = "4.0";
199
+ majorVersion = 4;
200
+ } else if (chromeVersion >= 38) {
201
+ webOSVersion = 3;
202
+ version = "3.0";
203
+ majorVersion = 3;
204
+ } else {
205
+ webOSVersion = 2;
206
+ version = "2.0";
207
+ majorVersion = 2;
208
+ }
209
+ } else {
210
+ version = "Unknown";
211
+ webOSVersion = void 0;
212
+ }
213
+ if (webOSVersion !== void 0 && webOSVersion >= 4) {
214
+ supportsIMA = true;
215
+ recommendedAdPlayer = "ima";
216
+ isLegacyTV = false;
217
+ } else if (webOSVersion !== void 0 && webOSVersion >= 3) {
218
+ if (chromeVersion >= 53) {
219
+ supportsIMA = true;
220
+ recommendedAdPlayer = "ima";
221
+ isLegacyTV = false;
222
+ } else {
223
+ supportsIMA = false;
224
+ recommendedAdPlayer = "hls";
225
+ isLegacyTV = true;
226
+ }
227
+ } else if (chromeVersion >= 53) {
228
+ supportsIMA = true;
229
+ recommendedAdPlayer = "ima";
230
+ isLegacyTV = false;
231
+ } else {
232
+ supportsIMA = false;
233
+ recommendedAdPlayer = "hls";
234
+ isLegacyTV = true;
117
235
  }
118
236
  } else if (/Tizen/i.test(ua)) {
119
237
  name = "Samsung Tizen";
@@ -123,39 +241,76 @@ function detectBrowser() {
123
241
  if (version !== "Unknown") {
124
242
  var parts1 = version.split(".");
125
243
  majorVersion = parts1[0] ? parseInt(parts1[0], 10) : 0;
244
+ tizenVersion = majorVersion;
245
+ }
246
+ if (tizenVersion !== void 0 && tizenVersion >= 4) {
247
+ supportsIMA = true;
248
+ recommendedAdPlayer = "ima";
249
+ isLegacyTV = false;
250
+ } else if (tizenVersion !== void 0 && tizenVersion >= 3 && chromeVersion >= 47) {
251
+ supportsIMA = true;
252
+ recommendedAdPlayer = "ima";
253
+ isLegacyTV = false;
254
+ } else if (chromeVersion >= 53) {
255
+ supportsIMA = true;
256
+ recommendedAdPlayer = "ima";
257
+ isLegacyTV = false;
258
+ } else {
259
+ supportsIMA = false;
260
+ recommendedAdPlayer = "hls";
261
+ isLegacyTV = true;
126
262
  }
127
263
  } else if (/SMART-TV|SmartTV/i.test(ua)) {
128
264
  name = "Smart TV";
129
265
  isSmartTV = true;
266
+ if (chromeVersion >= 53) {
267
+ supportsIMA = true;
268
+ recommendedAdPlayer = "ima";
269
+ } else {
270
+ supportsIMA = false;
271
+ recommendedAdPlayer = "hls";
272
+ isLegacyTV = true;
273
+ }
130
274
  } else if (/NetCast/i.test(ua)) {
131
275
  name = "LG NetCast";
132
276
  isSmartTV = true;
133
277
  isLegacyTV = true;
278
+ supportsIMA = false;
279
+ recommendedAdPlayer = "hls";
134
280
  } else if (/BRAVIA/i.test(ua)) {
135
281
  name = "Sony BRAVIA";
136
282
  isSmartTV = true;
137
- }
138
- var chromeVersion = getChromeVersion(ua);
139
- var webkitVersion = getWebKitVersion(ua);
140
- if (chromeVersion > 0) {
141
- if (!isSmartTV) {
283
+ if (chromeVersion >= 53) {
284
+ supportsIMA = true;
285
+ recommendedAdPlayer = "ima";
286
+ } else {
287
+ supportsIMA = false;
288
+ recommendedAdPlayer = "hls";
289
+ isLegacyTV = true;
290
+ }
291
+ } else {
292
+ if (chromeVersion > 0) {
142
293
  name = "Chrome";
143
294
  version = chromeVersion.toString();
144
295
  majorVersion = chromeVersion;
296
+ if (chromeVersion < 50) {
297
+ supportsIMA = false;
298
+ supportsModernJS2 = false;
299
+ recommendedAdPlayer = "hls";
300
+ }
145
301
  }
146
- if (chromeVersion < 50) {
302
+ if (webkitVersion > 0 && webkitVersion < 600) {
147
303
  supportsModernJS2 = false;
148
- isLegacyTV = true;
149
- }
150
- }
151
- if (webkitVersion > 0 && webkitVersion < 600) {
152
- supportsModernJS2 = false;
153
- if (isSmartTV) {
154
- isLegacyTV = true;
304
+ if (chromeVersion < 50) {
305
+ supportsIMA = false;
306
+ recommendedAdPlayer = "hls";
307
+ }
155
308
  }
156
309
  }
157
310
  if (typeof Promise === "undefined" || typeof Map === "undefined" || typeof Set === "undefined") {
158
311
  supportsModernJS2 = false;
312
+ supportsIMA = false;
313
+ recommendedAdPlayer = "hls";
159
314
  }
160
315
  if (typeof URLSearchParams === "undefined") {
161
316
  supportsModernJS2 = false;
@@ -167,9 +322,39 @@ function detectBrowser() {
167
322
  isSmartTV: isSmartTV,
168
323
  isLegacyTV: isLegacyTV,
169
324
  platform: platform,
170
- supportsModernJS: supportsModernJS2
325
+ supportsIMA: supportsIMA,
326
+ supportsModernJS: supportsModernJS2,
327
+ recommendedAdPlayer: recommendedAdPlayer,
328
+ webOSVersion: webOSVersion,
329
+ tizenVersion: tizenVersion,
330
+ chromeVersion: chromeVersionNum
171
331
  };
172
332
  }
333
+ function supportsGoogleIMA() {
334
+ var browser = detectBrowser();
335
+ if (browser.isLegacyTV) {
336
+ return false;
337
+ }
338
+ if (typeof document === "undefined" || typeof document.createElement !== "function") {
339
+ return false;
340
+ }
341
+ try {
342
+ var video = document.createElement("video");
343
+ if (!video) {
344
+ return false;
345
+ }
346
+ } catch (e) {
347
+ return false;
348
+ }
349
+ if (typeof Promise === "undefined") {
350
+ return false;
351
+ }
352
+ return browser.supportsIMA;
353
+ }
354
+ function getRecommendedAdPlayer() {
355
+ var browser = detectBrowser();
356
+ return browser.recommendedAdPlayer;
357
+ }
173
358
  function supportsModernJS() {
174
359
  try {
175
360
  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";
@@ -181,18 +366,31 @@ function logBrowserInfo() {
181
366
  var debug = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
182
367
  if (!debug) return;
183
368
  var browser = detectBrowser();
184
- console.log("[StormcloudVideoPlayer] Browser Compatibility Info:", {
369
+ var imaSupport = supportsGoogleIMA();
370
+ console.log("[StormcloudVideoPlayer] Browser Compatibility Info:", _object_spread_props(_object_spread({
185
371
  browser: "".concat(browser.name, " ").concat(browser.version),
186
372
  platform: browser.platform,
187
373
  isSmartTV: browser.isSmartTV,
188
374
  isLegacyTV: browser.isLegacyTV,
375
+ supportsIMA: imaSupport,
189
376
  supportsModernJS: browser.supportsModernJS,
377
+ recommendedAdPlayer: browser.recommendedAdPlayer
378
+ }, browser.webOSVersion !== void 0 ? {
379
+ webOSVersion: browser.webOSVersion
380
+ } : {}, browser.tizenVersion !== void 0 ? {
381
+ tizenVersion: browser.tizenVersion
382
+ } : {}, browser.chromeVersion !== void 0 ? {
383
+ chromeVersion: browser.chromeVersion
384
+ } : {}), {
190
385
  userAgent: navigator.userAgent
191
- });
386
+ }));
192
387
  }
193
388
  function getBrowserConfigOverrides() {
194
389
  var browser = detectBrowser();
195
390
  var overrides = {};
391
+ if (browser.isLegacyTV || !browser.supportsIMA) {
392
+ overrides.adPlayerType = "hls";
393
+ }
196
394
  if (browser.isSmartTV) {
197
395
  overrides.allowNativeHls = true;
198
396
  }
@@ -200,6 +398,8 @@ function getBrowserConfigOverrides() {
200
398
  }
201
399
  function supportsFeature(feature) {
202
400
  switch(feature){
401
+ case "ima":
402
+ return supportsGoogleIMA();
203
403
  case "urlsearchparams":
204
404
  return typeof URLSearchParams !== "undefined";
205
405
  case "textencoder":
@@ -218,8 +418,10 @@ function supportsFeature(feature) {
218
418
  0 && (module.exports = {
219
419
  detectBrowser: detectBrowser,
220
420
  getBrowserConfigOverrides: getBrowserConfigOverrides,
421
+ getRecommendedAdPlayer: getRecommendedAdPlayer,
221
422
  logBrowserInfo: logBrowserInfo,
222
423
  supportsFeature: supportsFeature,
424
+ supportsGoogleIMA: supportsGoogleIMA,
223
425
  supportsModernJS: supportsModernJS
224
426
  });
225
427
  //# sourceMappingURL=browserCompat.cjs.map
@@ -1 +1 @@
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","logBrowserInfo","supportsFeature","supportsModernJS","module","exports","getChromeVersion","ua","match","parseInt","getWebKitVersion","getPlatform","navigator","userAgentData","platform","userAgent","test","version","majorVersion","isSmartTV","isLegacyTV","parts","split","chromeVersion","webkitVersion","toString","Promise","Map","Set","URLSearchParams","Array","assign","forEach","String","includes","e"],"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 logBrowserInfo: () => logBrowserInfo,\n supportsFeature: () => supportsFeature,\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 supportsModernJS2 = true;\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 supportsModernJS2 = false;\n isLegacyTV = true;\n }\n }\n if (webkitVersion > 0 && webkitVersion < 600) {\n supportsModernJS2 = false;\n if (isSmartTV) {\n isLegacyTV = true;\n }\n }\n if (typeof Promise === \"undefined\" || typeof Map === \"undefined\" || typeof Set === \"undefined\") {\n supportsModernJS2 = false;\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 supportsModernJS: supportsModernJS2\n };\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 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 supportsModernJS: browser.supportsModernJS,\n userAgent: navigator.userAgent\n });\n}\nfunction getBrowserConfigOverrides() {\n const browser = detectBrowser();\n const overrides = {};\n if (browser.isSmartTV) {\n overrides.allowNativeHls = true;\n }\n return overrides;\n}\nfunction supportsFeature(feature) {\n switch (feature) {\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 logBrowserInfo,\n supportsFeature,\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 supportsModernJS: boolean;\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 supportsModernJS = true;\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 supportsModernJS = false;\n isLegacyTV = true;\n }\n }\n\n if (webkitVersion > 0 && webkitVersion < 600) {\n supportsModernJS = false;\n if (isSmartTV) {\n isLegacyTV = true;\n }\n }\n\n if (typeof Promise === 'undefined' ||\n typeof Map === 'undefined' ||\n typeof Set === 'undefined') {\n supportsModernJS = false;\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 supportsModernJS,\n };\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\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 supportsModernJS: browser.supportsModernJS,\n userAgent: navigator.userAgent,\n });\n}\n\nexport function getBrowserConfigOverrides(): {\n allowNativeHls?: boolean;\n} {\n const browser = detectBrowser();\n const overrides: { allowNativeHls?: boolean } = {};\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 '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"]}
1
+ {"version":3,"sources":["/home/ubuntu24/Dev/stormcloud-vp/lib/utils/browserCompat.cjs","../../src/utils/browserCompat.ts"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","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","webOSVersion","tizenVersion","chromeVersionNum","chromeVersion","webkitVersion","parts","split","toString","Promise","Map","Set","URLSearchParams"],"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 let webOSVersion;\n let tizenVersion;\n let chromeVersionNum;\n const chromeVersion = getChromeVersion(ua);\n const webkitVersion = getWebKitVersion(ua);\n chromeVersionNum = chromeVersion > 0 ? chromeVersion : void 0;\n if (/Web0S|webOS|LG Browser|LGSTB/i.test(ua)) {\n name = \"LG WebOS\";\n isSmartTV = true;\n let match = ua.match(/Web0S[/\\s]*([\\d.]+)/i) || ua.match(/webOS[/\\s]*([\\d.]+)/i);\n if (!match || !match[1]) {\n match = ua.match(/webOSTV[/\\s-]*([\\d.]+)/i) || ua.match(/webOS\\.TV[/\\s-]*([\\d.]+)/i);\n }\n if (match && match[1]) {\n version = match[1];\n const parts = version.split(\".\");\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n webOSVersion = majorVersion;\n } else if (chromeVersion > 0) {\n if (chromeVersion >= 79) {\n webOSVersion = 6;\n version = \"6.0\";\n majorVersion = 6;\n } else if (chromeVersion >= 68) {\n webOSVersion = 5;\n version = \"5.0\";\n majorVersion = 5;\n } else if (chromeVersion >= 53) {\n webOSVersion = 4;\n version = \"4.0\";\n majorVersion = 4;\n } else if (chromeVersion >= 38) {\n webOSVersion = 3;\n version = \"3.0\";\n majorVersion = 3;\n } else {\n webOSVersion = 2;\n version = \"2.0\";\n majorVersion = 2;\n }\n } else {\n version = \"Unknown\";\n webOSVersion = void 0;\n }\n if (webOSVersion !== void 0 && webOSVersion >= 4) {\n supportsIMA = true;\n recommendedAdPlayer = \"ima\";\n isLegacyTV = false;\n } else if (webOSVersion !== void 0 && webOSVersion >= 3) {\n if (chromeVersion >= 53) {\n supportsIMA = true;\n recommendedAdPlayer = \"ima\";\n isLegacyTV = false;\n } else {\n supportsIMA = false;\n recommendedAdPlayer = \"hls\";\n isLegacyTV = true;\n }\n } else if (chromeVersion >= 53) {\n supportsIMA = true;\n recommendedAdPlayer = \"ima\";\n isLegacyTV = false;\n } else {\n supportsIMA = false;\n recommendedAdPlayer = \"hls\";\n isLegacyTV = true;\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 tizenVersion = majorVersion;\n }\n if (tizenVersion !== void 0 && tizenVersion >= 4) {\n supportsIMA = true;\n recommendedAdPlayer = \"ima\";\n isLegacyTV = false;\n } else if (tizenVersion !== void 0 && tizenVersion >= 3 && chromeVersion >= 47) {\n supportsIMA = true;\n recommendedAdPlayer = \"ima\";\n isLegacyTV = false;\n } else if (chromeVersion >= 53) {\n supportsIMA = true;\n recommendedAdPlayer = \"ima\";\n isLegacyTV = false;\n } else {\n supportsIMA = false;\n recommendedAdPlayer = \"hls\";\n isLegacyTV = true;\n }\n } else if (/SMART-TV|SmartTV/i.test(ua)) {\n name = \"Smart TV\";\n isSmartTV = true;\n if (chromeVersion >= 53) {\n supportsIMA = true;\n recommendedAdPlayer = \"ima\";\n } else {\n supportsIMA = false;\n recommendedAdPlayer = \"hls\";\n isLegacyTV = true;\n }\n } else if (/NetCast/i.test(ua)) {\n name = \"LG NetCast\";\n isSmartTV = true;\n isLegacyTV = true;\n supportsIMA = false;\n recommendedAdPlayer = \"hls\";\n } else if (/BRAVIA/i.test(ua)) {\n name = \"Sony BRAVIA\";\n isSmartTV = true;\n if (chromeVersion >= 53) {\n supportsIMA = true;\n recommendedAdPlayer = \"ima\";\n } else {\n supportsIMA = false;\n recommendedAdPlayer = \"hls\";\n isLegacyTV = true;\n }\n } else {\n if (chromeVersion > 0) {\n name = \"Chrome\";\n version = chromeVersion.toString();\n majorVersion = chromeVersion;\n if (chromeVersion < 50) {\n supportsIMA = false;\n supportsModernJS2 = false;\n recommendedAdPlayer = \"hls\";\n }\n }\n if (webkitVersion > 0 && webkitVersion < 600) {\n supportsModernJS2 = false;\n if (chromeVersion < 50) {\n supportsIMA = false;\n recommendedAdPlayer = \"hls\";\n }\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 webOSVersion,\n tizenVersion,\n chromeVersion: chromeVersionNum\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 ...browser.webOSVersion !== void 0 ? { webOSVersion: browser.webOSVersion } : {},\n ...browser.tizenVersion !== void 0 ? { tizenVersion: browser.tizenVersion } : {},\n ...browser.chromeVersion !== void 0 ? { chromeVersion: browser.chromeVersion } : {},\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 webOSVersion?: number | undefined;\n tizenVersion?: number | undefined;\n chromeVersion?: number | undefined;\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 let webOSVersion: number | undefined;\n let tizenVersion: number | undefined;\n let chromeVersionNum: number | undefined;\n\n const chromeVersion = getChromeVersion(ua);\n const webkitVersion = getWebKitVersion(ua);\n chromeVersionNum = chromeVersion > 0 ? chromeVersion : undefined;\n\n if (/Web0S|webOS|LG Browser|LGSTB/i.test(ua)) {\n name = 'LG WebOS';\n isSmartTV = true;\n \n let match = ua.match(/Web0S[/\\s]*([\\d.]+)/i) || ua.match(/webOS[/\\s]*([\\d.]+)/i);\n \n if (!match || !match[1]) {\n match = ua.match(/webOSTV[/\\s-]*([\\d.]+)/i) || ua.match(/webOS\\.TV[/\\s-]*([\\d.]+)/i);\n }\n \n if (match && match[1]) {\n version = match[1];\n const parts = version.split('.');\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n webOSVersion = majorVersion;\n } else if (chromeVersion > 0) {\n if (chromeVersion >= 79) {\n webOSVersion = 6;\n version = '6.0';\n majorVersion = 6;\n } else if (chromeVersion >= 68) {\n webOSVersion = 5;\n version = '5.0';\n majorVersion = 5;\n } else if (chromeVersion >= 53) {\n webOSVersion = 4;\n version = '4.0';\n majorVersion = 4;\n } else if (chromeVersion >= 38) {\n webOSVersion = 3;\n version = '3.0';\n majorVersion = 3;\n } else {\n webOSVersion = 2;\n version = '2.0';\n majorVersion = 2;\n }\n } else {\n version = 'Unknown';\n webOSVersion = undefined;\n }\n\n if (webOSVersion !== undefined && webOSVersion >= 4) {\n supportsIMA = true;\n recommendedAdPlayer = 'ima';\n isLegacyTV = false;\n } else if (webOSVersion !== undefined && webOSVersion >= 3) {\n if (chromeVersion >= 53) {\n supportsIMA = true;\n recommendedAdPlayer = 'ima';\n isLegacyTV = false;\n } else {\n supportsIMA = false;\n recommendedAdPlayer = 'hls';\n isLegacyTV = true;\n }\n } else if (chromeVersion >= 53) {\n supportsIMA = true;\n recommendedAdPlayer = 'ima';\n isLegacyTV = false;\n } else {\n supportsIMA = false;\n recommendedAdPlayer = 'hls';\n isLegacyTV = true;\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 tizenVersion = majorVersion;\n }\n \n if (tizenVersion !== undefined && tizenVersion >= 4) {\n supportsIMA = true;\n recommendedAdPlayer = 'ima';\n isLegacyTV = false;\n } else if (tizenVersion !== undefined && tizenVersion >= 3 && chromeVersion >= 47) {\n supportsIMA = true;\n recommendedAdPlayer = 'ima';\n isLegacyTV = false;\n } else if (chromeVersion >= 53) {\n supportsIMA = true;\n recommendedAdPlayer = 'ima';\n isLegacyTV = false;\n } else {\n supportsIMA = false;\n recommendedAdPlayer = 'hls';\n isLegacyTV = true;\n }\n } else if (/SMART-TV|SmartTV/i.test(ua)) {\n name = 'Smart TV';\n isSmartTV = true;\n if (chromeVersion >= 53) {\n supportsIMA = true;\n recommendedAdPlayer = 'ima';\n } else {\n supportsIMA = false;\n recommendedAdPlayer = 'hls';\n isLegacyTV = true;\n }\n } else if (/NetCast/i.test(ua)) {\n name = 'LG NetCast';\n isSmartTV = true;\n isLegacyTV = true;\n supportsIMA = false;\n recommendedAdPlayer = 'hls';\n } else if (/BRAVIA/i.test(ua)) {\n name = 'Sony BRAVIA';\n isSmartTV = true;\n if (chromeVersion >= 53) {\n supportsIMA = true;\n recommendedAdPlayer = 'ima';\n } else {\n supportsIMA = false;\n recommendedAdPlayer = 'hls';\n isLegacyTV = true;\n }\n } else {\n if (chromeVersion > 0) {\n name = 'Chrome';\n version = chromeVersion.toString();\n majorVersion = chromeVersion;\n\n if (chromeVersion < 50) {\n supportsIMA = false;\n supportsModernJS = false;\n recommendedAdPlayer = 'hls';\n }\n }\n\n if (webkitVersion > 0 && webkitVersion < 600) {\n supportsModernJS = false;\n if (chromeVersion < 50) {\n supportsIMA = false;\n recommendedAdPlayer = 'hls';\n }\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 webOSVersion,\n tizenVersion,\n chromeVersion: chromeVersionNum,\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 ...(browser.webOSVersion !== undefined ? { webOSVersion: browser.webOSVersion } : {}),\n ...(browser.tizenVersion !== undefined ? { tizenVersion: browser.tizenVersion } : {}),\n ...(browser.chromeVersion !== undefined ? { chromeVersion: browser.chromeVersion } : {}),\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: { adPlayerType?: 'ima' | 'hls'; allowNativeHls?: boolean } = {};\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"]}
@@ -18,14 +18,22 @@ interface BrowserInfo {
18
18
  isSmartTV: boolean;
19
19
  isLegacyTV: boolean;
20
20
  platform: string;
21
+ supportsIMA: boolean;
21
22
  supportsModernJS: boolean;
23
+ recommendedAdPlayer: 'ima' | 'hls';
24
+ webOSVersion?: number | undefined;
25
+ tizenVersion?: number | undefined;
26
+ chromeVersion?: number | undefined;
22
27
  }
23
28
  declare function detectBrowser(): BrowserInfo;
29
+ declare function supportsGoogleIMA(): boolean;
30
+ declare function getRecommendedAdPlayer(): 'ima' | 'hls';
24
31
  declare function supportsModernJS(): boolean;
25
32
  declare function logBrowserInfo(debug?: boolean): void;
26
33
  declare function getBrowserConfigOverrides(): {
34
+ adPlayerType?: 'ima' | 'hls';
27
35
  allowNativeHls?: boolean;
28
36
  };
29
37
  declare function supportsFeature(feature: string): boolean;
30
38
 
31
- export { type BrowserInfo, detectBrowser, getBrowserConfigOverrides, logBrowserInfo, supportsFeature, supportsModernJS };
39
+ export { type BrowserInfo, detectBrowser, getBrowserConfigOverrides, getRecommendedAdPlayer, logBrowserInfo, supportsFeature, supportsGoogleIMA, supportsModernJS };
@@ -1,4 +1,4 @@
1
- import { C as ClientInfo } from '../types-Ca4ZDaWw.cjs';
1
+ import { C as ClientInfo } from '../types-g2d4Akez.cjs';
2
2
 
3
3
  declare function getClientInfo(): ClientInfo;
4
4
  declare function getBrowserID(clientInfo: ClientInfo): Promise<string>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stormcloud-video-player",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "main": "lib/index.js",
5
5
  "typings": "lib/index.d.ts",
6
6
  "scripts": {
@@ -41,6 +41,7 @@
41
41
  "license": "MIT",
42
42
  "dependencies": {
43
43
  "hls.js": "^1.6.11",
44
+ "prebid.js": "^10.23.0",
44
45
  "react-icons": "^5.5.0"
45
46
  },
46
47
  "devDependencies": {