stormcloud-video-player 0.8.59 → 0.8.60

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 (79) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +1369 -1369
  3. package/dist/stormcloud-vp.min.js +3 -1
  4. package/lib/Player.cjs +548 -0
  5. package/lib/Player.cjs.map +1 -0
  6. package/lib/Player.d.cts +146 -0
  7. package/lib/{index.js → StormcloudPlayer.cjs} +1108 -1877
  8. package/lib/StormcloudPlayer.cjs.map +1 -0
  9. package/lib/{index.d.ts → StormcloudPlayer.d.cts} +7 -400
  10. package/lib/index.cjs +979 -251
  11. package/lib/index.cjs.map +1 -1
  12. package/lib/index.d.cts +18 -4032
  13. package/lib/patterns.cjs +111 -0
  14. package/lib/patterns.cjs.map +1 -0
  15. package/lib/patterns.d.cts +14 -0
  16. package/lib/player/AdBreakOrchestrator.cjs +48 -14
  17. package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
  18. package/lib/player/AdBreakOrchestrator.d.cts +3 -1
  19. package/lib/player/AdConfigManager.cjs +155 -17
  20. package/lib/player/AdConfigManager.cjs.map +1 -1
  21. package/lib/player/AdConfigManager.d.cts +1 -1
  22. package/lib/player/AdTimingService.cjs.map +1 -1
  23. package/lib/player/AdTimingService.d.cts +1 -1
  24. package/lib/player/HlsEngine.cjs.map +1 -1
  25. package/lib/player/HlsEngine.d.cts +1 -1
  26. package/lib/player/PlaceholderLayer.cjs.map +1 -1
  27. package/lib/player/PlayerControls.cjs.map +1 -1
  28. package/lib/player/PlayerControls.d.cts +1 -1
  29. package/lib/player/Scte35CueManager.cjs.map +1 -1
  30. package/lib/player/Scte35CueManager.d.cts +1 -1
  31. package/lib/player/Scte35Parser.cjs.map +1 -1
  32. package/lib/player/Scte35Parser.d.cts +1 -1
  33. package/lib/player/StormcloudVideoPlayer.cjs +979 -251
  34. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  35. package/lib/player/StormcloudVideoPlayer.d.cts +1 -1
  36. package/lib/player/playerTypes.cjs.map +1 -1
  37. package/lib/player/playerTypes.d.cts +1 -1
  38. package/lib/players/FilePlayer.cjs.map +1 -1
  39. package/lib/players/HlsPlayer.cjs +979 -251
  40. package/lib/players/HlsPlayer.cjs.map +1 -1
  41. package/lib/players/HlsPlayer.d.cts +1 -1
  42. package/lib/players/index.cjs +979 -251
  43. package/lib/players/index.cjs.map +1 -1
  44. package/lib/props.cjs +186 -0
  45. package/lib/props.cjs.map +1 -0
  46. package/lib/props.d.cts +62 -0
  47. package/lib/sdk/hlsAdPlayer.cjs +884 -234
  48. package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
  49. package/lib/sdk/hlsAdPlayer.d.cts +1 -1
  50. package/lib/sdk/pal.cjs.map +1 -1
  51. package/lib/types.cjs +49 -0
  52. package/lib/types.cjs.map +1 -0
  53. package/lib/{types-52ASml2N.d.cts → types.d.cts} +47 -1
  54. package/lib/ui/StormcloudVideoPlayer.cjs +979 -251
  55. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  56. package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
  57. package/lib/utils/browserCompat.cjs.map +1 -1
  58. package/lib/utils/ctvVastSignals.cjs +155 -17
  59. package/lib/utils/ctvVastSignals.cjs.map +1 -1
  60. package/lib/utils/devUrl.cjs.map +1 -1
  61. package/lib/utils/polyfills.cjs.map +1 -1
  62. package/lib/utils/tracking.cjs +42 -14
  63. package/lib/utils/tracking.cjs.map +1 -1
  64. package/lib/utils/tracking.d.cts +1 -1
  65. package/lib/utils/trackingIngest.cjs.map +1 -1
  66. package/lib/utils/vastEnvironmentSignals.cjs +167 -17
  67. package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
  68. package/lib/utils/vastEnvironmentSignals.d.cts +12 -1
  69. package/lib/utils/vastMacros.cjs +26 -0
  70. package/lib/utils/vastMacros.cjs.map +1 -1
  71. package/lib/utils/vastTrackingMacros.cjs +5 -0
  72. package/lib/utils/vastTrackingMacros.cjs.map +1 -1
  73. package/lib/utils/vastTrackingMacros.d.cts +2 -0
  74. package/lib/utils.cjs +292 -0
  75. package/lib/utils.cjs.map +1 -0
  76. package/lib/utils.d.cts +17 -0
  77. package/package.json +91 -91
  78. package/rollup.config.js +90 -90
  79. package/lib/index.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { S as Scte35Marker, a as StormcloudVideoPlayerConfig, A as AdController } from '../types-52ASml2N.cjs';
1
+ import { Scte35Marker, StormcloudVideoPlayerConfig, AdController } from '../types.cjs';
2
2
  import { AdTimingService } from './AdTimingService.cjs';
3
3
  import { AdConfigManager } from './AdConfigManager.cjs';
4
4
  import { Scte35CueManager } from './Scte35CueManager.cjs';
@@ -21,6 +21,8 @@ interface AdBreakOrchestratorHost {
21
21
  recoverMediaError(): void;
22
22
  requiresMediaPipelineResetAfterAds(): boolean;
23
23
  generatePodVastUrl(baseUrl: string, breakDurationMs?: number): string;
24
+ onAdClick(): void;
25
+ onAdInteraction(event: MouseEvent | TouchEvent): void;
24
26
  }
25
27
  declare class AdBreakOrchestrator {
26
28
  inAdBreak: boolean;
@@ -345,6 +345,7 @@ function resolveVastEnvironmentSignals(isCtv) {
345
345
  limitAdTracking = (_ref1 = platformLat !== null && platformLat !== void 0 ? platformLat : readStoredLimitAdTracking()) !== null && _ref1 !== void 0 ? _ref1 : false;
346
346
  }
347
347
  }
348
+ var deviceTypeHint = resolveDeviceTypeHint(isCtv);
348
349
  if (isCtv) {
349
350
  return _object_spread_props(_object_spread({
350
351
  isCtv: true,
@@ -356,10 +357,10 @@ function resolveVastEnvironmentSignals(isCtv) {
356
357
  } : {}, deviceId && limitAdTracking != null ? {
357
358
  limitAdTracking: limitAdTracking
358
359
  } : {}), {
359
- deviceTypeHint: 5
360
+ deviceTypeHint: deviceTypeHint
360
361
  });
361
362
  }
362
- return _object_spread({
363
+ return _object_spread_props(_object_spread({
363
364
  isCtv: false
364
365
  }, deviceId ? {
365
366
  deviceId: deviceId
@@ -367,7 +368,142 @@ function resolveVastEnvironmentSignals(isCtv) {
367
368
  deviceIdType: deviceIdType
368
369
  } : {}, deviceId && limitAdTracking != null ? {
369
370
  limitAdTracking: limitAdTracking
370
- } : {});
371
+ } : {}), {
372
+ deviceTypeHint: deviceTypeHint
373
+ });
374
+ }
375
+ var DEVICE_TYPE_HINT = {
376
+ FEATURE_PHONE: 1,
377
+ SMARTPHONE: 2,
378
+ DESKTOP: 3,
379
+ TABLET: 4,
380
+ CONNECTED_TV: 5,
381
+ GAME_CONSOLE: 6,
382
+ SET_TOP_BOX: 7
383
+ };
384
+ var DEVICE_TYPE_HINT_ALIASES = {
385
+ featurephone: DEVICE_TYPE_HINT.FEATURE_PHONE,
386
+ smartphone: DEVICE_TYPE_HINT.SMARTPHONE,
387
+ mobile: DEVICE_TYPE_HINT.SMARTPHONE,
388
+ phone: DEVICE_TYPE_HINT.SMARTPHONE,
389
+ desktop: DEVICE_TYPE_HINT.DESKTOP,
390
+ pc: DEVICE_TYPE_HINT.DESKTOP,
391
+ tablet: DEVICE_TYPE_HINT.TABLET,
392
+ ctv: DEVICE_TYPE_HINT.CONNECTED_TV,
393
+ tv: DEVICE_TYPE_HINT.CONNECTED_TV,
394
+ connectedtv: DEVICE_TYPE_HINT.CONNECTED_TV,
395
+ smarttv: DEVICE_TYPE_HINT.CONNECTED_TV,
396
+ console: DEVICE_TYPE_HINT.GAME_CONSOLE,
397
+ gameconsole: DEVICE_TYPE_HINT.GAME_CONSOLE,
398
+ stb: DEVICE_TYPE_HINT.SET_TOP_BOX,
399
+ settopbox: DEVICE_TYPE_HINT.SET_TOP_BOX
400
+ };
401
+ var SET_TOP_BOX_UA = /LGSTB|\bSTB\b|STB\d|Set-?Top|SetTopBox|TV ?Box|Kaon|Humax|Arris|Technicolor|Sagemcom|Infomir|MAG\d{3}|KreaTV|Amino|Formuler|Dune ?HD|TiVo|MiBOX|Mi Box|SHIELD Android TV|\bAFT[A-Z]|Roku|AppleTV|Apple TV|CrKey/i;
402
+ var GAME_CONSOLE_UA = /PlayStation|Xbox|Nintendo/i;
403
+ var CONNECTED_TV_UA = /Web0S|webOS|Tizen|SMART-TV|SmartTV|NetCast|BRAVIA|HbbTV|VIDAA|Hisense|Philips|Viera|AQUOS|Android TV|Google TV|\bTV\b/i;
404
+ var FEATURE_PHONE_UA = /KAIOS|MIDP|J2ME|Series40|Opera Mini/i;
405
+ function resolveDeviceTypeHint(isCtv) {
406
+ var override = readDeviceTypeHintOverride();
407
+ if (override != null) return override;
408
+ return inferDeviceTypeHint(isCtv);
409
+ }
410
+ function inferDeviceTypeHint(isCtv) {
411
+ var fallback = isCtv ? DEVICE_TYPE_HINT.CONNECTED_TV : DEVICE_TYPE_HINT.DESKTOP;
412
+ if (typeof navigator === "undefined") return fallback;
413
+ var ua = navigator.userAgent || "";
414
+ var maxTouchPoints = navigator.maxTouchPoints || 0;
415
+ if (SET_TOP_BOX_UA.test(ua)) return DEVICE_TYPE_HINT.SET_TOP_BOX;
416
+ if (GAME_CONSOLE_UA.test(ua)) return DEVICE_TYPE_HINT.GAME_CONSOLE;
417
+ if (CONNECTED_TV_UA.test(ua) && !/Mobile/i.test(ua)) {
418
+ return DEVICE_TYPE_HINT.CONNECTED_TV;
419
+ }
420
+ if (FEATURE_PHONE_UA.test(ua)) return DEVICE_TYPE_HINT.FEATURE_PHONE;
421
+ if (/iPad/i.test(ua) || /Macintosh/i.test(ua) && maxTouchPoints > 1) {
422
+ return DEVICE_TYPE_HINT.TABLET;
423
+ }
424
+ if (/iPhone|iPod/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;
425
+ if (/Android/i.test(ua)) {
426
+ if (/Mobile/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;
427
+ if (maxTouchPoints === 0) return DEVICE_TYPE_HINT.SET_TOP_BOX;
428
+ return DEVICE_TYPE_HINT.TABLET;
429
+ }
430
+ if (/Mobile|Windows Phone|BlackBerry/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;
431
+ return fallback;
432
+ }
433
+ function readDeviceTypeHintOverride() {
434
+ if (typeof window === "undefined") return void 0;
435
+ var keys = [
436
+ "dth",
437
+ "deviceTypeHint"
438
+ ];
439
+ var fromGlobal = normalizeDeviceTypeHint(window.__STORMCLOUD_DTH__);
440
+ if (fromGlobal != null) return fromGlobal;
441
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
442
+ try {
443
+ for(var _iterator = getNativeBridgeSources()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
444
+ var source = _step.value;
445
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
446
+ try {
447
+ for(var _iterator1 = keys[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
448
+ var key = _step1.value;
449
+ var value = source === null || source === void 0 ? void 0 : source[key];
450
+ var normalized = normalizeDeviceTypeHint(typeof value === "function" ? safeCall(value, source) : value);
451
+ if (normalized != null) return normalized;
452
+ }
453
+ } catch (err) {
454
+ _didIteratorError1 = true;
455
+ _iteratorError1 = err;
456
+ } finally{
457
+ try {
458
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
459
+ _iterator1.return();
460
+ }
461
+ } finally{
462
+ if (_didIteratorError1) {
463
+ throw _iteratorError1;
464
+ }
465
+ }
466
+ }
467
+ }
468
+ } catch (err) {
469
+ _didIteratorError = true;
470
+ _iteratorError = err;
471
+ } finally{
472
+ try {
473
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
474
+ _iterator.return();
475
+ }
476
+ } finally{
477
+ if (_didIteratorError) {
478
+ throw _iteratorError;
479
+ }
480
+ }
481
+ }
482
+ for(var _i = 0, _iter = [
483
+ "stormcloud.dth",
484
+ "dth"
485
+ ]; _i < _iter.length; _i++){
486
+ var key1 = _iter[_i];
487
+ var normalized1 = normalizeDeviceTypeHint(readStoredString(key1));
488
+ if (normalized1 != null) return normalized1;
489
+ }
490
+ return void 0;
491
+ }
492
+ function normalizeDeviceTypeHint(value) {
493
+ if (typeof value === "number") {
494
+ return Number.isInteger(value) && value >= 1 && value <= 7 ? value : void 0;
495
+ }
496
+ if (typeof value !== "string") return void 0;
497
+ var trimmed = value.trim();
498
+ if (/^[1-7]$/.test(trimmed)) return parseInt(trimmed, 10);
499
+ return DEVICE_TYPE_HINT_ALIASES[trimmed.toLowerCase().replace(/[\s_-]/g, "")];
500
+ }
501
+ function safeCall(fn, thisArg) {
502
+ try {
503
+ return fn.call(thisArg);
504
+ } catch (unused) {
505
+ return void 0;
506
+ }
371
507
  }
372
508
  function inferDeviceIdType() {
373
509
  if (typeof navigator === "undefined") {
@@ -573,22 +709,9 @@ function isZeroedAdId(value) {
573
709
  return ZEROED_AD_ID_PATTERNS.has(value.trim().toLowerCase());
574
710
  }
575
711
  function readNativeBridgeSignals() {
576
- if (typeof window === "undefined") {
577
- return {};
578
- }
579
- var candidates = [
580
- window.__STORMCLOUD_CTV_AD_INFO__,
581
- window.__STORMCLOUD_CTV__,
582
- window.stormcloudCtv,
583
- window.AiryTV,
584
- window.Android,
585
- window.webOS,
586
- window.tizen,
587
- window.amazon
588
- ].filter(Boolean);
589
712
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
590
713
  try {
591
- for(var _iterator = candidates[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
714
+ for(var _iterator = getNativeBridgeSources()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
592
715
  var source = _step.value;
593
716
  var contentUrl = readBridgeValue(source, [
594
717
  "contentUrl",
@@ -663,6 +786,21 @@ function readNativeBridgeSignals() {
663
786
  }
664
787
  return {};
665
788
  }
789
+ function getNativeBridgeSources() {
790
+ if (typeof window === "undefined") {
791
+ return [];
792
+ }
793
+ return [
794
+ window.__STORMCLOUD_CTV_AD_INFO__,
795
+ window.__STORMCLOUD_CTV__,
796
+ window.stormcloudCtv,
797
+ window.AiryTV,
798
+ window.Android,
799
+ window.webOS,
800
+ window.tizen,
801
+ window.amazon
802
+ ].filter(Boolean);
803
+ }
666
804
  function readBridgeValue(source, keys) {
667
805
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
668
806
  try {