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.
- package/LICENSE +21 -21
- package/README.md +1369 -1369
- package/dist/stormcloud-vp.min.js +3 -1
- package/lib/Player.cjs +548 -0
- package/lib/Player.cjs.map +1 -0
- package/lib/Player.d.cts +146 -0
- package/lib/{index.js → StormcloudPlayer.cjs} +1108 -1877
- package/lib/StormcloudPlayer.cjs.map +1 -0
- package/lib/{index.d.ts → StormcloudPlayer.d.cts} +7 -400
- package/lib/index.cjs +979 -251
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +18 -4032
- package/lib/patterns.cjs +111 -0
- package/lib/patterns.cjs.map +1 -0
- package/lib/patterns.d.cts +14 -0
- package/lib/player/AdBreakOrchestrator.cjs +48 -14
- package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
- package/lib/player/AdBreakOrchestrator.d.cts +3 -1
- package/lib/player/AdConfigManager.cjs +155 -17
- package/lib/player/AdConfigManager.cjs.map +1 -1
- package/lib/player/AdConfigManager.d.cts +1 -1
- package/lib/player/AdTimingService.cjs.map +1 -1
- package/lib/player/AdTimingService.d.cts +1 -1
- package/lib/player/HlsEngine.cjs.map +1 -1
- package/lib/player/HlsEngine.d.cts +1 -1
- package/lib/player/PlaceholderLayer.cjs.map +1 -1
- package/lib/player/PlayerControls.cjs.map +1 -1
- package/lib/player/PlayerControls.d.cts +1 -1
- package/lib/player/Scte35CueManager.cjs.map +1 -1
- package/lib/player/Scte35CueManager.d.cts +1 -1
- package/lib/player/Scte35Parser.cjs.map +1 -1
- package/lib/player/Scte35Parser.d.cts +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +979 -251
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.d.cts +1 -1
- package/lib/player/playerTypes.cjs.map +1 -1
- package/lib/player/playerTypes.d.cts +1 -1
- package/lib/players/FilePlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.cjs +979 -251
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.d.cts +1 -1
- package/lib/players/index.cjs +979 -251
- package/lib/players/index.cjs.map +1 -1
- package/lib/props.cjs +186 -0
- package/lib/props.cjs.map +1 -0
- package/lib/props.d.cts +62 -0
- package/lib/sdk/hlsAdPlayer.cjs +884 -234
- package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.d.cts +1 -1
- package/lib/sdk/pal.cjs.map +1 -1
- package/lib/types.cjs +49 -0
- package/lib/types.cjs.map +1 -0
- package/lib/{types-52ASml2N.d.cts → types.d.cts} +47 -1
- package/lib/ui/StormcloudVideoPlayer.cjs +979 -251
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
- package/lib/utils/browserCompat.cjs.map +1 -1
- package/lib/utils/ctvVastSignals.cjs +155 -17
- package/lib/utils/ctvVastSignals.cjs.map +1 -1
- package/lib/utils/devUrl.cjs.map +1 -1
- package/lib/utils/polyfills.cjs.map +1 -1
- package/lib/utils/tracking.cjs +42 -14
- package/lib/utils/tracking.cjs.map +1 -1
- package/lib/utils/tracking.d.cts +1 -1
- package/lib/utils/trackingIngest.cjs.map +1 -1
- package/lib/utils/vastEnvironmentSignals.cjs +167 -17
- package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
- package/lib/utils/vastEnvironmentSignals.d.cts +12 -1
- package/lib/utils/vastMacros.cjs +26 -0
- package/lib/utils/vastMacros.cjs.map +1 -1
- package/lib/utils/vastTrackingMacros.cjs +5 -0
- package/lib/utils/vastTrackingMacros.cjs.map +1 -1
- package/lib/utils/vastTrackingMacros.d.cts +2 -0
- package/lib/utils.cjs +292 -0
- package/lib/utils.cjs.map +1 -0
- package/lib/utils.d.cts +17 -0
- package/package.json +91 -91
- package/rollup.config.js +90 -90
- package/lib/index.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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:
|
|
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 =
|
|
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 {
|