stormcloud-video-player 0.8.23 → 0.8.25
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/dist/stormcloud-vp.min.js +1 -1
- package/lib/index.cjs +1187 -1109
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +3 -1
- package/lib/index.d.ts +3 -1
- package/lib/index.js +1028 -954
- package/lib/index.js.map +1 -1
- package/lib/player/AdBreakOrchestrator.cjs +419 -26
- package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
- package/lib/player/AdBreakOrchestrator.d.cts +2 -1
- package/lib/player/AdConfigManager.cjs +90 -22
- package/lib/player/AdConfigManager.cjs.map +1 -1
- package/lib/player/AdConfigManager.d.cts +1 -1
- package/lib/player/AdPreloadPool.d.cts +1 -1
- package/lib/player/AdTimingService.d.cts +1 -1
- package/lib/player/HlsEngine.d.cts +1 -1
- package/lib/player/PlayerControls.d.cts +1 -1
- package/lib/player/Scte35CueManager.d.cts +1 -1
- package/lib/player/Scte35Parser.d.cts +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +1184 -1110
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.d.cts +1 -1
- package/lib/player/playerTypes.d.cts +1 -1
- package/lib/players/HlsPlayer.cjs +1184 -1110
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.d.cts +1 -1
- package/lib/players/index.cjs +1184 -1110
- package/lib/players/index.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.d.cts +1 -1
- package/lib/{types-DNiBmPKK.d.cts → types-Bz4aRmzc.d.cts} +1 -0
- package/lib/ui/StormcloudVideoPlayer.cjs +1184 -1110
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
- package/lib/utils/ctvVastSignals.cjs.map +1 -1
- package/lib/utils/tracking.cjs +411 -20
- package/lib/utils/tracking.cjs.map +1 -1
- package/lib/utils/tracking.d.cts +3 -2
- package/lib/utils/vastEnvironmentSignals.cjs +37 -0
- package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
- package/lib/utils/vastEnvironmentSignals.d.cts +4 -1
- package/lib/utils/vastMacros.cjs.map +1 -1
- package/package.json +1 -1
|
@@ -1510,1175 +1510,1243 @@ function publishMQTT(topic, payload) {
|
|
|
1510
1510
|
return false;
|
|
1511
1511
|
}
|
|
1512
1512
|
}
|
|
1513
|
-
// src/utils/
|
|
1514
|
-
var
|
|
1515
|
-
|
|
1516
|
-
|
|
1513
|
+
// src/utils/vastEnvironmentSignals.ts
|
|
1514
|
+
var AIRY_ANDROID_APP_ID = "com.freeairytv.android";
|
|
1515
|
+
var AIRY_WEBOS_APP_ID = "com.freeairytv.webos";
|
|
1516
|
+
var AIRY_TIZEN_APP_ID = "com.freeairytv.samsung";
|
|
1517
|
+
var AIRY_ROKU_APP_ID = "com.freeairytv.roku";
|
|
1518
|
+
var AIRY_APP_NAME = "AiryTV Movies & TV";
|
|
1519
|
+
var AIRY_DEFAULT_CONTENT_URL = "https://live.airy.tv";
|
|
1520
|
+
var CTV_SESSION_STORAGE_KEY = "stormcloud.ctv.sid";
|
|
1521
|
+
var PLAYER_ID_STORAGE_KEY = "stormcloud.player.id";
|
|
1522
|
+
var LG_TEST_APP_ID = "com.hulu.plus";
|
|
1523
|
+
var LG_TEST_APP_NAME = "Hulu";
|
|
1524
|
+
var LG_TEST_CONTENT_URL = "https://www.hulu.com/live-tv";
|
|
1525
|
+
var _lgTestDeviceId;
|
|
1526
|
+
function getLgTestDeviceId() {
|
|
1527
|
+
if (!_lgTestDeviceId) _lgTestDeviceId = createUuid();
|
|
1528
|
+
return _lgTestDeviceId;
|
|
1529
|
+
}
|
|
1530
|
+
function isLgWebOS() {
|
|
1531
|
+
if (typeof navigator === "undefined") return false;
|
|
1532
|
+
return /Web0S|webOS|LG Browser|LGSTB|LGE/i.test(navigator.userAgent);
|
|
1533
|
+
}
|
|
1534
|
+
function getDefaultAppId() {
|
|
1535
|
+
if (typeof navigator === "undefined") return AIRY_ANDROID_APP_ID;
|
|
1517
1536
|
var ua = navigator.userAgent;
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
} else if (ua.includes("Android") && (ua.includes("Sony") || vendor.includes("Sony"))) {
|
|
1565
|
-
brand = "Sony";
|
|
1566
|
-
os = "Android TV";
|
|
1567
|
-
isSmartTV = true;
|
|
1568
|
-
deviceType = "tv";
|
|
1569
|
-
} else if (ua.includes("Android") && (ua.includes("NetCast") || ua.includes("LG"))) {
|
|
1570
|
-
brand = "LG";
|
|
1571
|
-
os = "Android TV";
|
|
1572
|
-
isSmartTV = true;
|
|
1573
|
-
deviceType = "tv";
|
|
1574
|
-
} else if (ua.includes(" Roku") || ua.includes("Roku/")) {
|
|
1575
|
-
brand = "Roku";
|
|
1576
|
-
os = "Roku OS";
|
|
1577
|
-
isSmartTV = true;
|
|
1578
|
-
deviceType = "tv";
|
|
1579
|
-
} else if (ua.includes("AppleTV")) {
|
|
1580
|
-
brand = "Apple";
|
|
1581
|
-
os = "tvOS";
|
|
1582
|
-
isSmartTV = true;
|
|
1583
|
-
deviceType = "tv";
|
|
1537
|
+
if (/Web0S|webOS|LG Browser|LGSTB|LGE/i.test(ua)) return AIRY_WEBOS_APP_ID;
|
|
1538
|
+
if (/Tizen|Samsung/i.test(ua)) return AIRY_TIZEN_APP_ID;
|
|
1539
|
+
if (/Roku/i.test(ua)) return AIRY_ROKU_APP_ID;
|
|
1540
|
+
return AIRY_ANDROID_APP_ID;
|
|
1541
|
+
}
|
|
1542
|
+
var DEVICE_ID_STORAGE_KEYS = [
|
|
1543
|
+
"rdid",
|
|
1544
|
+
"ifa",
|
|
1545
|
+
"advertisingId",
|
|
1546
|
+
"advertising_id",
|
|
1547
|
+
"deviceAdvertisingId",
|
|
1548
|
+
"aaid",
|
|
1549
|
+
"adid",
|
|
1550
|
+
"rida",
|
|
1551
|
+
"tifa",
|
|
1552
|
+
"lgudid"
|
|
1553
|
+
];
|
|
1554
|
+
var ANDROID_ID_TYPES = /* @__PURE__ */ new Set([
|
|
1555
|
+
"aaid",
|
|
1556
|
+
"adid"
|
|
1557
|
+
]);
|
|
1558
|
+
function resolveVastEnvironmentSignals(isCtv) {
|
|
1559
|
+
var _ref;
|
|
1560
|
+
var bridgeSignals = readNativeBridgeSignals();
|
|
1561
|
+
var platformDevice = readPlatformNativeDeviceId();
|
|
1562
|
+
var lg = isCtv && isLgWebOS();
|
|
1563
|
+
var deviceId = bridgeSignals.deviceId || readStoredDeviceId() || platformDevice.deviceId || (lg && platformDevice.limitAdTracking !== true ? getLgTestDeviceId() : void 0);
|
|
1564
|
+
var deviceIdType = bridgeSignals.deviceIdType || readStoredString("deviceIdType") || readStoredString("idtype") || platformDevice.deviceIdType || inferDeviceIdType() || (lg ? "lgudid" : void 0);
|
|
1565
|
+
var platformLat = bridgeSignals.deviceId ? bridgeSignals.limitAdTracking : platformDevice.limitAdTracking;
|
|
1566
|
+
var limitAdTracking = deviceId != null ? (_ref = platformLat !== null && platformLat !== void 0 ? platformLat : readStoredLimitAdTracking()) !== null && _ref !== void 0 ? _ref : false : void 0;
|
|
1567
|
+
if (isCtv) {
|
|
1568
|
+
return _object_spread_props(_object_spread({
|
|
1569
|
+
isCtv: true,
|
|
1570
|
+
contentUrl: bridgeSignals.contentUrl || readStoredString("contentUrl") || (lg ? LG_TEST_CONTENT_URL : AIRY_DEFAULT_CONTENT_URL),
|
|
1571
|
+
appId: bridgeSignals.appId || readStoredString("appId") || readStoredString("msid") || (lg ? LG_TEST_APP_ID : getDefaultAppId()),
|
|
1572
|
+
appName: bridgeSignals.appName || readStoredString("appName") || readStoredString("an") || (lg ? LG_TEST_APP_NAME : AIRY_APP_NAME),
|
|
1573
|
+
sessionId: getOrCreateCtvSessionId()
|
|
1574
|
+
}, deviceId ? {
|
|
1575
|
+
deviceId: deviceId
|
|
1576
|
+
} : {}, deviceIdType ? {
|
|
1577
|
+
deviceIdType: deviceIdType
|
|
1578
|
+
} : {}, limitAdTracking != null ? {
|
|
1579
|
+
limitAdTracking: limitAdTracking
|
|
1580
|
+
} : {}), {
|
|
1581
|
+
deviceTypeHint: 5
|
|
1582
|
+
});
|
|
1584
1583
|
}
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1584
|
+
return _object_spread({
|
|
1585
|
+
isCtv: false
|
|
1586
|
+
}, deviceId ? {
|
|
1587
|
+
deviceId: deviceId
|
|
1588
|
+
} : {}, deviceIdType ? {
|
|
1589
|
+
deviceIdType: deviceIdType
|
|
1590
|
+
} : {}, limitAdTracking != null ? {
|
|
1591
|
+
limitAdTracking: limitAdTracking
|
|
1592
|
+
} : {});
|
|
1593
|
+
}
|
|
1594
|
+
function inferDeviceIdType() {
|
|
1595
|
+
if (typeof navigator === "undefined") {
|
|
1596
|
+
return void 0;
|
|
1598
1597
|
}
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1598
|
+
var ua = navigator.userAgent;
|
|
1599
|
+
if (/Roku/i.test(ua)) return "rida";
|
|
1600
|
+
if (/Tizen|Samsung/i.test(ua)) return "tifa";
|
|
1601
|
+
if (/AppleTV|Apple TV/i.test(ua)) return "tvOS";
|
|
1602
|
+
if (/AFT|Fire TV|Amazon/i.test(ua)) return "afai";
|
|
1603
|
+
if (/Web0S|webOS|LG Browser|LGSTB|LGE/i.test(ua)) return "lgudid";
|
|
1604
|
+
if (/Android|Google TV/i.test(ua)) return "aaid";
|
|
1605
|
+
if (/iPhone|iPad|iPod/i.test(ua)) return "idfa";
|
|
1606
|
+
return void 0;
|
|
1607
|
+
}
|
|
1608
|
+
function isEquivalentDeviceIdType(tagType, runtimeType) {
|
|
1609
|
+
if (!tagType || !runtimeType) return false;
|
|
1610
|
+
var tag = tagType.toLowerCase();
|
|
1611
|
+
var runtime = runtimeType.toLowerCase();
|
|
1612
|
+
if (tag === runtime) return true;
|
|
1613
|
+
return ANDROID_ID_TYPES.has(tag) && ANDROID_ID_TYPES.has(runtime);
|
|
1614
|
+
}
|
|
1615
|
+
function resolveNativeDeviceId() {
|
|
1616
|
+
var bridgeSignals = readNativeBridgeSignals();
|
|
1617
|
+
var platformDevice = readPlatformNativeDeviceId();
|
|
1618
|
+
var deviceId = bridgeSignals.deviceId || readStoredDeviceId() || platformDevice.deviceId;
|
|
1619
|
+
if (!deviceId || isMacroPlaceholder(deviceId) || isZeroedAdId(deviceId)) {
|
|
1620
|
+
return void 0;
|
|
1606
1621
|
}
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
os = "macOS";
|
|
1613
|
-
deviceType = "desktop";
|
|
1614
|
-
if (maxTouchPoints > 1) deviceType = "tablet";
|
|
1615
|
-
} else if (ua.includes("Linux")) {
|
|
1616
|
-
os = "Linux";
|
|
1617
|
-
deviceType = "desktop";
|
|
1618
|
-
}
|
|
1622
|
+
return deviceId;
|
|
1623
|
+
}
|
|
1624
|
+
function getOrCreateStoredUuid(storageKey) {
|
|
1625
|
+
if (typeof window === "undefined") {
|
|
1626
|
+
return void 0;
|
|
1619
1627
|
}
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
if (vendor.includes("Samsung") || ua.includes("SM-")) brand = "Samsung";
|
|
1628
|
+
var existing = readStoredString(storageKey);
|
|
1629
|
+
if (existing) {
|
|
1630
|
+
return existing;
|
|
1624
1631
|
}
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1632
|
+
var id = createUuid();
|
|
1633
|
+
try {
|
|
1634
|
+
var _window_localStorage;
|
|
1635
|
+
(_window_localStorage = window.localStorage) === null || _window_localStorage === void 0 ? void 0 : _window_localStorage.setItem(storageKey, id);
|
|
1636
|
+
} catch (unused) {}
|
|
1637
|
+
return id;
|
|
1638
|
+
}
|
|
1639
|
+
function getOrCreateCtvSessionId() {
|
|
1640
|
+
var existing = readStoredString(CTV_SESSION_STORAGE_KEY);
|
|
1641
|
+
if (existing) {
|
|
1642
|
+
return existing;
|
|
1628
1643
|
}
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
isSmartTV: isSmartTV,
|
|
1636
|
-
isAndroid: isAndroid,
|
|
1637
|
-
isWebView: isWebView,
|
|
1638
|
-
isWebApp: isWebApp,
|
|
1639
|
-
domain: window.location.hostname,
|
|
1640
|
-
origin: window.location.origin,
|
|
1641
|
-
path: window.location.pathname,
|
|
1642
|
-
userAgent: ua,
|
|
1643
|
-
vendor: vendor,
|
|
1644
|
-
platform: platform,
|
|
1645
|
-
screen: screenInfo,
|
|
1646
|
-
hardwareConcurrency: hardwareConcurrency,
|
|
1647
|
-
deviceMemory: memory,
|
|
1648
|
-
maxTouchPoints: maxTouchPoints,
|
|
1649
|
-
language: navigator.language,
|
|
1650
|
-
languages: ((_navigator_languages = navigator.languages) === null || _navigator_languages === void 0 ? void 0 : _navigator_languages.join(",")) || "",
|
|
1651
|
-
cookieEnabled: navigator.cookieEnabled,
|
|
1652
|
-
doNotTrack: navigator.doNotTrack || "",
|
|
1653
|
-
referrer: document.referrer,
|
|
1654
|
-
visibilityState: document.visibilityState
|
|
1655
|
-
};
|
|
1644
|
+
var sessionId = createUuid();
|
|
1645
|
+
try {
|
|
1646
|
+
var _window_localStorage;
|
|
1647
|
+
(_window_localStorage = window.localStorage) === null || _window_localStorage === void 0 ? void 0 : _window_localStorage.setItem(CTV_SESSION_STORAGE_KEY, sessionId);
|
|
1648
|
+
} catch (unused) {}
|
|
1649
|
+
return sessionId;
|
|
1656
1650
|
}
|
|
1657
|
-
function
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
cachedBrowserId
|
|
1667
|
-
];
|
|
1668
|
-
}
|
|
1669
|
-
fingerprintString = JSON.stringify(clientInfo);
|
|
1670
|
-
if (!(typeof crypto !== "undefined" && ((_crypto_subtle = crypto.subtle) === null || _crypto_subtle === void 0 ? void 0 : _crypto_subtle.digest))) return [
|
|
1671
|
-
3,
|
|
1672
|
-
5
|
|
1673
|
-
];
|
|
1674
|
-
_state.label = 1;
|
|
1675
|
-
case 1:
|
|
1676
|
-
_state.trys.push([
|
|
1677
|
-
1,
|
|
1678
|
-
4,
|
|
1679
|
-
,
|
|
1680
|
-
5
|
|
1681
|
-
]);
|
|
1682
|
-
return [
|
|
1683
|
-
4,
|
|
1684
|
-
crypto.subtle.digest("SHA-256", new Uint8Array([
|
|
1685
|
-
1,
|
|
1686
|
-
2,
|
|
1687
|
-
3
|
|
1688
|
-
]))
|
|
1689
|
-
];
|
|
1690
|
-
case 2:
|
|
1691
|
-
_state.sent();
|
|
1692
|
-
if (typeof TextEncoder !== "undefined") {
|
|
1693
|
-
encodedData = new TextEncoder().encode(fingerprintString);
|
|
1694
|
-
} else {
|
|
1695
|
-
utf8 = unescape(encodeURIComponent(fingerprintString));
|
|
1696
|
-
buffer = new Uint8Array(utf8.length);
|
|
1697
|
-
for(i = 0; i < utf8.length; i++){
|
|
1698
|
-
buffer[i] = utf8.charCodeAt(i);
|
|
1699
|
-
}
|
|
1700
|
-
encodedData = buffer;
|
|
1701
|
-
}
|
|
1702
|
-
return [
|
|
1703
|
-
4,
|
|
1704
|
-
crypto.subtle.digest("SHA-256", encodedData)
|
|
1705
|
-
];
|
|
1706
|
-
case 3:
|
|
1707
|
-
hashBuffer = _state.sent();
|
|
1708
|
-
hashHex = Array.from(new Uint8Array(hashBuffer)).map(function(b) {
|
|
1709
|
-
return b.toString(16).padStart(2, "0");
|
|
1710
|
-
}).join("");
|
|
1711
|
-
cachedBrowserId = hashHex;
|
|
1712
|
-
return [
|
|
1713
|
-
2,
|
|
1714
|
-
hashHex
|
|
1715
|
-
];
|
|
1716
|
-
case 4:
|
|
1717
|
-
unused = _state.sent();
|
|
1718
|
-
console.warn("[StormcloudVideoPlayer] crypto.subtle not supported, using fallback hash");
|
|
1719
|
-
return [
|
|
1720
|
-
3,
|
|
1721
|
-
5
|
|
1722
|
-
];
|
|
1723
|
-
case 5:
|
|
1724
|
-
hash = 0;
|
|
1725
|
-
for(i1 = 0; i1 < fingerprintString.length; i1++){
|
|
1726
|
-
char = fingerprintString.charCodeAt(i1);
|
|
1727
|
-
hash = (hash << 5) - hash + char;
|
|
1728
|
-
hash = hash & hash;
|
|
1729
|
-
}
|
|
1730
|
-
fallbackHash = Math.abs(hash).toString(16).padStart(8, "0");
|
|
1731
|
-
timestamp = Date.now().toString(16).padStart(12, "0");
|
|
1732
|
-
random = Math.random().toString(16).substring(2, 14).padStart(12, "0");
|
|
1733
|
-
cachedBrowserId = (fallbackHash + timestamp + random).padEnd(64, "0");
|
|
1734
|
-
return [
|
|
1735
|
-
2,
|
|
1736
|
-
cachedBrowserId
|
|
1737
|
-
];
|
|
1738
|
-
}
|
|
1739
|
-
});
|
|
1740
|
-
})();
|
|
1741
|
-
}
|
|
1742
|
-
function canPublish(licenseKey) {
|
|
1743
|
-
return Boolean(isMQTTEnabled() && licenseKey);
|
|
1651
|
+
function createUuid() {
|
|
1652
|
+
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
1653
|
+
return crypto.randomUUID();
|
|
1654
|
+
}
|
|
1655
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(char) {
|
|
1656
|
+
var value = Math.floor(Math.random() * 16);
|
|
1657
|
+
var nibble = char === "x" ? value : value & 3 | 8;
|
|
1658
|
+
return nibble.toString(16);
|
|
1659
|
+
});
|
|
1744
1660
|
}
|
|
1745
|
-
function
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
var
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
captureAt = (_flags_captureAt = flags.captureAt) !== null && _flags_captureAt !== void 0 ? _flags_captureAt : /* @__PURE__ */ new Date().toISOString();
|
|
1761
|
-
return [
|
|
1762
|
-
2,
|
|
1763
|
-
_object_spread({
|
|
1764
|
-
player_id: playerId,
|
|
1765
|
-
device_type: clientInfo.deviceType,
|
|
1766
|
-
os: clientInfo.os.toLowerCase(),
|
|
1767
|
-
ad_loaded: (_flags_adLoaded = flags.adLoaded) !== null && _flags_adLoaded !== void 0 ? _flags_adLoaded : false,
|
|
1768
|
-
ad_detect: (_flags_adDetect = flags.adDetect) !== null && _flags_adDetect !== void 0 ? _flags_adDetect : false,
|
|
1769
|
-
capture_at: captureAt
|
|
1770
|
-
}, context.inputStreamType ? {
|
|
1771
|
-
input_stream_type: context.inputStreamType
|
|
1772
|
-
} : {})
|
|
1773
|
-
];
|
|
1661
|
+
function readPlatformNativeDeviceId() {
|
|
1662
|
+
if (typeof window === "undefined") return {};
|
|
1663
|
+
try {
|
|
1664
|
+
var _window_webapis;
|
|
1665
|
+
var adinfo = (_window_webapis = window.webapis) === null || _window_webapis === void 0 ? void 0 : _window_webapis.adinfo;
|
|
1666
|
+
if (adinfo) {
|
|
1667
|
+
var tifa = typeof adinfo.getTIFA === "function" ? adinfo.getTIFA() : adinfo.tifa;
|
|
1668
|
+
if (typeof tifa === "string" && tifa && !isMacroPlaceholder(tifa)) {
|
|
1669
|
+
var lat = typeof adinfo.isLATEnabled === "function" ? adinfo.isLATEnabled() : void 0;
|
|
1670
|
+
return _object_spread({
|
|
1671
|
+
deviceId: tifa,
|
|
1672
|
+
deviceIdType: "tifa"
|
|
1673
|
+
}, typeof lat === "boolean" ? {
|
|
1674
|
+
limitAdTracking: lat
|
|
1675
|
+
} : {});
|
|
1774
1676
|
}
|
|
1775
|
-
}
|
|
1776
|
-
})
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
1,
|
|
1797
|
-
3,
|
|
1798
|
-
,
|
|
1799
|
-
4
|
|
1800
|
-
]);
|
|
1801
|
-
return [
|
|
1802
|
-
4,
|
|
1803
|
-
buildPlayerMetricEvent(context, {
|
|
1804
|
-
adLoaded: false,
|
|
1805
|
-
adDetect: false
|
|
1806
|
-
})
|
|
1807
|
-
];
|
|
1808
|
-
case 2:
|
|
1809
|
-
metricEvent = _state.sent();
|
|
1810
|
-
publishTracking(licenseKey, "metrics", {
|
|
1811
|
-
events: [
|
|
1812
|
-
metricEvent
|
|
1813
|
-
]
|
|
1814
|
-
});
|
|
1815
|
-
return [
|
|
1816
|
-
3,
|
|
1817
|
-
4
|
|
1818
|
-
];
|
|
1819
|
-
case 3:
|
|
1820
|
-
error = _state.sent();
|
|
1821
|
-
console.error("[StormcloudVideoPlayer] Error sending initial tracking data:", error);
|
|
1822
|
-
return [
|
|
1823
|
-
3,
|
|
1824
|
-
4
|
|
1825
|
-
];
|
|
1826
|
-
case 4:
|
|
1827
|
-
return [
|
|
1828
|
-
2
|
|
1829
|
-
];
|
|
1677
|
+
}
|
|
1678
|
+
} catch (unused) {}
|
|
1679
|
+
try {
|
|
1680
|
+
var webOSDev = window.webOSDev;
|
|
1681
|
+
if (webOSDev) {
|
|
1682
|
+
var _webOSDev_lgudid;
|
|
1683
|
+
var lgudid = typeof webOSDev.LGUDID === "function" ? webOSDev.LGUDID() : (_webOSDev_lgudid = webOSDev.lgudid) !== null && _webOSDev_lgudid !== void 0 ? _webOSDev_lgudid : webOSDev.LGUDID;
|
|
1684
|
+
if (typeof lgudid === "string" && lgudid) {
|
|
1685
|
+
if (isZeroedAdId(lgudid)) {
|
|
1686
|
+
return {
|
|
1687
|
+
deviceIdType: "lgudid",
|
|
1688
|
+
limitAdTracking: true
|
|
1689
|
+
};
|
|
1690
|
+
}
|
|
1691
|
+
if (!isMacroPlaceholder(lgudid)) {
|
|
1692
|
+
return {
|
|
1693
|
+
deviceId: lgudid,
|
|
1694
|
+
deviceIdType: "lgudid",
|
|
1695
|
+
limitAdTracking: false
|
|
1696
|
+
};
|
|
1697
|
+
}
|
|
1830
1698
|
}
|
|
1831
|
-
}
|
|
1832
|
-
})
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
case 1:
|
|
1844
|
-
_state.trys.push([
|
|
1845
|
-
1,
|
|
1846
|
-
3,
|
|
1847
|
-
,
|
|
1848
|
-
4
|
|
1849
|
-
]);
|
|
1850
|
-
return [
|
|
1851
|
-
4,
|
|
1852
|
-
sendHeartbeat(licenseKey, context, {
|
|
1853
|
-
adDetect: true,
|
|
1854
|
-
captureAt: adDetectInfo.timestamp
|
|
1855
|
-
})
|
|
1856
|
-
];
|
|
1857
|
-
case 2:
|
|
1858
|
-
_state.sent();
|
|
1859
|
-
return [
|
|
1860
|
-
3,
|
|
1861
|
-
4
|
|
1862
|
-
];
|
|
1863
|
-
case 3:
|
|
1864
|
-
error = _state.sent();
|
|
1865
|
-
console.error("[StormcloudVideoPlayer] Error sending ad detect tracking:", error);
|
|
1866
|
-
return [
|
|
1867
|
-
3,
|
|
1868
|
-
4
|
|
1869
|
-
];
|
|
1870
|
-
case 4:
|
|
1871
|
-
return [
|
|
1872
|
-
2
|
|
1873
|
-
];
|
|
1699
|
+
}
|
|
1700
|
+
} catch (unused) {}
|
|
1701
|
+
try {
|
|
1702
|
+
var roku = window.Roku;
|
|
1703
|
+
if (roku) {
|
|
1704
|
+
var rida = typeof roku.getPublisherUniqueId === "function" ? roku.getPublisherUniqueId() : roku.rida;
|
|
1705
|
+
if (typeof rida === "string" && rida && !isMacroPlaceholder(rida)) {
|
|
1706
|
+
return {
|
|
1707
|
+
deviceId: rida,
|
|
1708
|
+
deviceIdType: "rida",
|
|
1709
|
+
limitAdTracking: false
|
|
1710
|
+
};
|
|
1874
1711
|
}
|
|
1875
|
-
}
|
|
1876
|
-
})
|
|
1712
|
+
}
|
|
1713
|
+
} catch (unused) {}
|
|
1714
|
+
return {};
|
|
1877
1715
|
}
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
context = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
1886
|
-
_state.label = 1;
|
|
1887
|
-
case 1:
|
|
1888
|
-
_state.trys.push([
|
|
1889
|
-
1,
|
|
1890
|
-
3,
|
|
1891
|
-
,
|
|
1892
|
-
4
|
|
1893
|
-
]);
|
|
1894
|
-
return [
|
|
1895
|
-
4,
|
|
1896
|
-
sendHeartbeat(licenseKey, context, {
|
|
1897
|
-
adLoaded: true,
|
|
1898
|
-
captureAt: adLoadedInfo.timestamp
|
|
1899
|
-
})
|
|
1900
|
-
];
|
|
1901
|
-
case 2:
|
|
1902
|
-
_state.sent();
|
|
1903
|
-
return [
|
|
1904
|
-
3,
|
|
1905
|
-
4
|
|
1906
|
-
];
|
|
1907
|
-
case 3:
|
|
1908
|
-
error = _state.sent();
|
|
1909
|
-
console.error("[StormcloudVideoPlayer] Error sending ad loaded tracking:", error);
|
|
1910
|
-
return [
|
|
1911
|
-
3,
|
|
1912
|
-
4
|
|
1913
|
-
];
|
|
1914
|
-
case 4:
|
|
1915
|
-
return [
|
|
1916
|
-
2
|
|
1917
|
-
];
|
|
1918
|
-
}
|
|
1919
|
-
});
|
|
1920
|
-
}).apply(this, arguments);
|
|
1716
|
+
var ZEROED_AD_ID_PATTERNS = /* @__PURE__ */ new Set([
|
|
1717
|
+
"38400000-8cf0-11bd-b23e-10b96e40000d",
|
|
1718
|
+
"00000000-0000-0000-0000-000000000000"
|
|
1719
|
+
]);
|
|
1720
|
+
function isMacroPlaceholder(value) {
|
|
1721
|
+
var t = value.trim();
|
|
1722
|
+
return !t || /^(\[[^\]]*\]|\{[^}]*\}|%%[^%]*%%)$/.test(t) || /^(unknown|null|undefined|none|n\/a|\$\{[^}]+\})$/i.test(t) || ZEROED_AD_ID_PATTERNS.has(t.toLowerCase());
|
|
1921
1723
|
}
|
|
1922
|
-
function
|
|
1923
|
-
return
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1724
|
+
function isZeroedAdId(value) {
|
|
1725
|
+
return ZEROED_AD_ID_PATTERNS.has(value.trim().toLowerCase());
|
|
1726
|
+
}
|
|
1727
|
+
function readNativeBridgeSignals() {
|
|
1728
|
+
if (typeof window === "undefined") {
|
|
1729
|
+
return {};
|
|
1730
|
+
}
|
|
1731
|
+
var candidates = [
|
|
1732
|
+
window.__STORMCLOUD_CTV_AD_INFO__,
|
|
1733
|
+
window.__STORMCLOUD_CTV__,
|
|
1734
|
+
window.stormcloudCtv,
|
|
1735
|
+
window.AiryTV,
|
|
1736
|
+
window.Android,
|
|
1737
|
+
window.webOS,
|
|
1738
|
+
window.tizen,
|
|
1739
|
+
window.amazon
|
|
1740
|
+
].filter(Boolean);
|
|
1741
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
1742
|
+
try {
|
|
1743
|
+
for(var _iterator = candidates[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
1744
|
+
var source = _step.value;
|
|
1745
|
+
var contentUrl = readBridgeValue(source, [
|
|
1746
|
+
"contentUrl",
|
|
1747
|
+
"url",
|
|
1748
|
+
"videoUrl",
|
|
1749
|
+
"canonicalUrl"
|
|
1750
|
+
]) || void 0;
|
|
1751
|
+
var appId = readBridgeValue(source, [
|
|
1752
|
+
"appId",
|
|
1753
|
+
"msid",
|
|
1754
|
+
"applicationId",
|
|
1755
|
+
"packageName"
|
|
1756
|
+
]) || void 0;
|
|
1757
|
+
var appName = readBridgeValue(source, [
|
|
1758
|
+
"appName",
|
|
1759
|
+
"an",
|
|
1760
|
+
"applicationName"
|
|
1761
|
+
]) || void 0;
|
|
1762
|
+
var deviceId = readBridgeValue(source, [
|
|
1763
|
+
"rdid",
|
|
1764
|
+
"ifa",
|
|
1765
|
+
"advertisingId",
|
|
1766
|
+
"adId",
|
|
1767
|
+
"deviceId",
|
|
1768
|
+
"lgudid",
|
|
1769
|
+
"LGUDID",
|
|
1770
|
+
"tifa",
|
|
1771
|
+
"rida",
|
|
1772
|
+
"afai",
|
|
1773
|
+
"aaid"
|
|
1774
|
+
]) || void 0;
|
|
1775
|
+
if (!contentUrl && !deviceId && !appId && !appName) continue;
|
|
1776
|
+
var deviceIdType = readBridgeValue(source, [
|
|
1777
|
+
"idtype",
|
|
1778
|
+
"deviceIdType",
|
|
1779
|
+
"advertisingIdType",
|
|
1780
|
+
"idType"
|
|
1781
|
+
]) || inferDeviceIdType();
|
|
1782
|
+
var limitAdTracking = readBridgeBoolean(source, [
|
|
1783
|
+
"is_lat",
|
|
1784
|
+
"limitAdTracking",
|
|
1785
|
+
"limitedAdTracking",
|
|
1786
|
+
"lat"
|
|
1787
|
+
]);
|
|
1788
|
+
return _object_spread({}, contentUrl ? {
|
|
1789
|
+
contentUrl: contentUrl
|
|
1790
|
+
} : {}, appId ? {
|
|
1791
|
+
appId: appId
|
|
1792
|
+
} : {}, appName ? {
|
|
1793
|
+
appName: appName
|
|
1794
|
+
} : {}, deviceId ? {
|
|
1795
|
+
deviceId: deviceId
|
|
1796
|
+
} : {}, deviceId && deviceIdType ? {
|
|
1797
|
+
deviceIdType: deviceIdType
|
|
1798
|
+
} : {}, deviceId && limitAdTracking != null ? {
|
|
1799
|
+
limitAdTracking: limitAdTracking
|
|
1800
|
+
} : {});
|
|
1801
|
+
}
|
|
1802
|
+
} catch (err) {
|
|
1803
|
+
_didIteratorError = true;
|
|
1804
|
+
_iteratorError = err;
|
|
1805
|
+
} finally{
|
|
1806
|
+
try {
|
|
1807
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
1808
|
+
_iterator.return();
|
|
1975
1809
|
}
|
|
1976
|
-
}
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
function sendHeartbeat(_0) {
|
|
1980
|
-
return _async_to_generator(function(licenseKey) {
|
|
1981
|
-
var context, flags, heartbeatData, error;
|
|
1982
|
-
var _arguments = arguments;
|
|
1983
|
-
return _ts_generator(this, function(_state) {
|
|
1984
|
-
switch(_state.label){
|
|
1985
|
-
case 0:
|
|
1986
|
-
context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {}, flags = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
1987
|
-
if (!canPublish(licenseKey)) return [
|
|
1988
|
-
2
|
|
1989
|
-
];
|
|
1990
|
-
_state.label = 1;
|
|
1991
|
-
case 1:
|
|
1992
|
-
_state.trys.push([
|
|
1993
|
-
1,
|
|
1994
|
-
3,
|
|
1995
|
-
,
|
|
1996
|
-
4
|
|
1997
|
-
]);
|
|
1998
|
-
return [
|
|
1999
|
-
4,
|
|
2000
|
-
buildPlayerMetricEvent(context, flags)
|
|
2001
|
-
];
|
|
2002
|
-
case 2:
|
|
2003
|
-
heartbeatData = _state.sent();
|
|
2004
|
-
publishTracking(licenseKey, "heartbeat", heartbeatData);
|
|
2005
|
-
return [
|
|
2006
|
-
3,
|
|
2007
|
-
4
|
|
2008
|
-
];
|
|
2009
|
-
case 3:
|
|
2010
|
-
error = _state.sent();
|
|
2011
|
-
console.error("[StormcloudVideoPlayer] Error sending heartbeat:", error);
|
|
2012
|
-
return [
|
|
2013
|
-
3,
|
|
2014
|
-
4
|
|
2015
|
-
];
|
|
2016
|
-
case 4:
|
|
2017
|
-
return [
|
|
2018
|
-
2
|
|
2019
|
-
];
|
|
1810
|
+
} finally{
|
|
1811
|
+
if (_didIteratorError) {
|
|
1812
|
+
throw _iteratorError;
|
|
2020
1813
|
}
|
|
2021
|
-
}
|
|
2022
|
-
}).apply(this, arguments);
|
|
2023
|
-
}
|
|
2024
|
-
// src/utils/polyfills.ts
|
|
2025
|
-
function polyfillURLSearchParams() {
|
|
2026
|
-
if (typeof URLSearchParams !== "undefined") {
|
|
2027
|
-
return;
|
|
1814
|
+
}
|
|
2028
1815
|
}
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
1816
|
+
return {};
|
|
1817
|
+
}
|
|
1818
|
+
function readBridgeValue(source, keys) {
|
|
1819
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
1820
|
+
try {
|
|
1821
|
+
for(var _iterator = keys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
1822
|
+
var key = _step.value;
|
|
1823
|
+
var value = source === null || source === void 0 ? void 0 : source[key];
|
|
1824
|
+
if (typeof value === "string" && value) {
|
|
1825
|
+
return value;
|
|
1826
|
+
}
|
|
1827
|
+
if (typeof value === "function") {
|
|
1828
|
+
try {
|
|
1829
|
+
var result = value.call(source);
|
|
1830
|
+
if (typeof result === "string" && result) {
|
|
1831
|
+
return result;
|
|
1832
|
+
}
|
|
1833
|
+
} catch (unused) {}
|
|
2040
1834
|
}
|
|
2041
1835
|
}
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
1836
|
+
} catch (err) {
|
|
1837
|
+
_didIteratorError = true;
|
|
1838
|
+
_iteratorError = err;
|
|
1839
|
+
} finally{
|
|
1840
|
+
try {
|
|
1841
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
1842
|
+
_iterator.return();
|
|
1843
|
+
}
|
|
1844
|
+
} finally{
|
|
1845
|
+
if (_didIteratorError) {
|
|
1846
|
+
throw _iteratorError;
|
|
1847
|
+
}
|
|
1848
|
+
}
|
|
1849
|
+
}
|
|
1850
|
+
return void 0;
|
|
1851
|
+
}
|
|
1852
|
+
function readBridgeBoolean(source, keys) {
|
|
1853
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
1854
|
+
try {
|
|
1855
|
+
for(var _iterator = keys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
1856
|
+
var key = _step.value;
|
|
1857
|
+
var value = source === null || source === void 0 ? void 0 : source[key];
|
|
1858
|
+
var normalized = normalizeBoolean(value);
|
|
1859
|
+
if (normalized != null) {
|
|
1860
|
+
return normalized;
|
|
1861
|
+
}
|
|
1862
|
+
if (typeof value === "function") {
|
|
1863
|
+
try {
|
|
1864
|
+
var result = normalizeBoolean(value.call(source));
|
|
1865
|
+
if (result != null) {
|
|
1866
|
+
return result;
|
|
2066
1867
|
}
|
|
2067
|
-
}
|
|
2068
|
-
}
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
key: "set",
|
|
2104
|
-
value: function set(name, value) {
|
|
2105
|
-
this.params.set(name, [
|
|
2106
|
-
String(value)
|
|
2107
|
-
]);
|
|
2108
|
-
}
|
|
2109
|
-
},
|
|
2110
|
-
{
|
|
2111
|
-
key: "forEach",
|
|
2112
|
-
value: function forEach(callback) {
|
|
2113
|
-
var _this = this;
|
|
2114
|
-
this.params.forEach(function(values, key) {
|
|
2115
|
-
values.forEach(function(value) {
|
|
2116
|
-
callback(value, key, _this);
|
|
2117
|
-
});
|
|
2118
|
-
});
|
|
2119
|
-
}
|
|
2120
|
-
},
|
|
2121
|
-
{
|
|
2122
|
-
key: "toString",
|
|
2123
|
-
value: function toString() {
|
|
2124
|
-
var parts = [];
|
|
2125
|
-
this.params.forEach(function(values, key) {
|
|
2126
|
-
values.forEach(function(value) {
|
|
2127
|
-
parts.push("".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(value)));
|
|
2128
|
-
});
|
|
2129
|
-
});
|
|
2130
|
-
return parts.join("&");
|
|
2131
|
-
}
|
|
1868
|
+
} catch (unused) {}
|
|
1869
|
+
}
|
|
1870
|
+
}
|
|
1871
|
+
} catch (err) {
|
|
1872
|
+
_didIteratorError = true;
|
|
1873
|
+
_iteratorError = err;
|
|
1874
|
+
} finally{
|
|
1875
|
+
try {
|
|
1876
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
1877
|
+
_iterator.return();
|
|
1878
|
+
}
|
|
1879
|
+
} finally{
|
|
1880
|
+
if (_didIteratorError) {
|
|
1881
|
+
throw _iteratorError;
|
|
1882
|
+
}
|
|
1883
|
+
}
|
|
1884
|
+
}
|
|
1885
|
+
return void 0;
|
|
1886
|
+
}
|
|
1887
|
+
function readStoredDeviceId() {
|
|
1888
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
1889
|
+
try {
|
|
1890
|
+
for(var _iterator = DEVICE_ID_STORAGE_KEYS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
1891
|
+
var key = _step.value;
|
|
1892
|
+
var value = readStoredString(key);
|
|
1893
|
+
if (value) {
|
|
1894
|
+
return value;
|
|
1895
|
+
}
|
|
1896
|
+
}
|
|
1897
|
+
} catch (err) {
|
|
1898
|
+
_didIteratorError = true;
|
|
1899
|
+
_iteratorError = err;
|
|
1900
|
+
} finally{
|
|
1901
|
+
try {
|
|
1902
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
1903
|
+
_iterator.return();
|
|
2132
1904
|
}
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
1905
|
+
} finally{
|
|
1906
|
+
if (_didIteratorError) {
|
|
1907
|
+
throw _iteratorError;
|
|
1908
|
+
}
|
|
1909
|
+
}
|
|
1910
|
+
}
|
|
1911
|
+
return void 0;
|
|
2137
1912
|
}
|
|
2138
|
-
function
|
|
2139
|
-
if (typeof
|
|
2140
|
-
return;
|
|
1913
|
+
function readStoredString(key) {
|
|
1914
|
+
if (typeof window === "undefined") {
|
|
1915
|
+
return void 0;
|
|
2141
1916
|
}
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
1917
|
+
try {
|
|
1918
|
+
var _window_localStorage;
|
|
1919
|
+
var value = (_window_localStorage = window.localStorage) === null || _window_localStorage === void 0 ? void 0 : _window_localStorage.getItem(key);
|
|
1920
|
+
return value || void 0;
|
|
1921
|
+
} catch (unused) {
|
|
1922
|
+
return void 0;
|
|
1923
|
+
}
|
|
1924
|
+
}
|
|
1925
|
+
function readStoredLimitAdTracking() {
|
|
1926
|
+
return normalizeBoolean(readStoredString("limitAdTracking") || readStoredString("limitedAdTracking") || readStoredString("is_lat"));
|
|
1927
|
+
}
|
|
1928
|
+
function normalizeBoolean(value) {
|
|
1929
|
+
if (typeof value === "boolean") {
|
|
1930
|
+
return value;
|
|
1931
|
+
}
|
|
1932
|
+
if (typeof value === "number") {
|
|
1933
|
+
return value === 1;
|
|
1934
|
+
}
|
|
1935
|
+
if (typeof value === "string") {
|
|
1936
|
+
var normalized = value.toLowerCase();
|
|
1937
|
+
if (normalized === "1" || normalized === "true" || normalized === "yes") {
|
|
1938
|
+
return true;
|
|
2146
1939
|
}
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
for(var i = 0; i < str.length; i++){
|
|
2153
|
-
var charcode = str.charCodeAt(i);
|
|
2154
|
-
if (charcode < 128) {
|
|
2155
|
-
utf8.push(charcode);
|
|
2156
|
-
} else if (charcode < 2048) {
|
|
2157
|
-
utf8.push(192 | charcode >> 6, 128 | charcode & 63);
|
|
2158
|
-
} else if (charcode < 55296 || charcode >= 57344) {
|
|
2159
|
-
utf8.push(224 | charcode >> 12, 128 | charcode >> 6 & 63, 128 | charcode & 63);
|
|
2160
|
-
} else {
|
|
2161
|
-
i++;
|
|
2162
|
-
charcode = 65536 + ((charcode & 1023) << 10 | str.charCodeAt(i) & 1023);
|
|
2163
|
-
utf8.push(240 | charcode >> 18, 128 | charcode >> 12 & 63, 128 | charcode >> 6 & 63, 128 | charcode & 63);
|
|
2164
|
-
}
|
|
2165
|
-
}
|
|
2166
|
-
return new Uint8Array(utf8);
|
|
2167
|
-
}
|
|
2168
|
-
}
|
|
2169
|
-
]);
|
|
2170
|
-
return TextEncoderPolyfill;
|
|
2171
|
-
}();
|
|
2172
|
-
window.TextEncoder = TextEncoderPolyfill;
|
|
1940
|
+
if (normalized === "0" || normalized === "false" || normalized === "no") {
|
|
1941
|
+
return false;
|
|
1942
|
+
}
|
|
1943
|
+
}
|
|
1944
|
+
return void 0;
|
|
2173
1945
|
}
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
return value;
|
|
2181
|
-
});
|
|
2182
|
-
}, function(reason) {
|
|
2183
|
-
return constructor.resolve(callback()).then(function() {
|
|
2184
|
-
throw reason;
|
|
2185
|
-
});
|
|
2186
|
-
});
|
|
2187
|
-
};
|
|
1946
|
+
// src/utils/tracking.ts
|
|
1947
|
+
var cachedBrowserId = null;
|
|
1948
|
+
function buildAnalyticsContext(config) {
|
|
1949
|
+
var context = {};
|
|
1950
|
+
if (config.debugAdTiming) {
|
|
1951
|
+
context.debugAdTiming = true;
|
|
2188
1952
|
}
|
|
1953
|
+
if (config.isLiveStream !== void 0) {
|
|
1954
|
+
context.inputStreamType = config.isLiveStream ? "live" : "vod";
|
|
1955
|
+
}
|
|
1956
|
+
return context;
|
|
2189
1957
|
}
|
|
2190
|
-
function
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
1958
|
+
function getClientInfo() {
|
|
1959
|
+
var _screen, _screen1, _screen2, _screen3, _screen_orientation, _screen4, _screen5, _window, _window1, _window_screen_orientation, _window_screen, _navigator_languages;
|
|
1960
|
+
var ua = navigator.userAgent;
|
|
1961
|
+
var platform = navigator.platform;
|
|
1962
|
+
var vendor = navigator.vendor || "";
|
|
1963
|
+
var maxTouchPoints = navigator.maxTouchPoints || 0;
|
|
1964
|
+
var memory = navigator.deviceMemory || null;
|
|
1965
|
+
var hardwareConcurrency = navigator.hardwareConcurrency || 1;
|
|
1966
|
+
var screenInfo = {
|
|
1967
|
+
width: (_screen = screen) === null || _screen === void 0 ? void 0 : _screen.width,
|
|
1968
|
+
height: (_screen1 = screen) === null || _screen1 === void 0 ? void 0 : _screen1.height,
|
|
1969
|
+
availWidth: (_screen2 = screen) === null || _screen2 === void 0 ? void 0 : _screen2.availWidth,
|
|
1970
|
+
availHeight: (_screen3 = screen) === null || _screen3 === void 0 ? void 0 : _screen3.availHeight,
|
|
1971
|
+
orientation: ((_screen4 = screen) === null || _screen4 === void 0 ? void 0 : (_screen_orientation = _screen4.orientation) === null || _screen_orientation === void 0 ? void 0 : _screen_orientation.type) || "",
|
|
1972
|
+
pixelDepth: (_screen5 = screen) === null || _screen5 === void 0 ? void 0 : _screen5.pixelDepth
|
|
1973
|
+
};
|
|
1974
|
+
var deviceType = "desktop";
|
|
1975
|
+
var brand = "Unknown";
|
|
1976
|
+
var os = "Unknown";
|
|
1977
|
+
var model = "";
|
|
1978
|
+
var isSmartTV = false;
|
|
1979
|
+
var isAndroid = false;
|
|
1980
|
+
var isWebView = false;
|
|
1981
|
+
var isWebApp = false;
|
|
1982
|
+
if (ua.includes("Web0S")) {
|
|
1983
|
+
brand = "LG";
|
|
1984
|
+
os = "webOS";
|
|
1985
|
+
isSmartTV = true;
|
|
1986
|
+
deviceType = "tv";
|
|
1987
|
+
var webosMatch = ua.match(/Web0S\/([^\s]+)/);
|
|
1988
|
+
model = webosMatch ? "webOS ".concat(webosMatch[1]) : "webOS TV";
|
|
1989
|
+
} else if (ua.includes("Tizen")) {
|
|
1990
|
+
brand = "Samsung";
|
|
1991
|
+
os = "Tizen";
|
|
1992
|
+
isSmartTV = true;
|
|
1993
|
+
deviceType = "tv";
|
|
1994
|
+
var tizenMatch = ua.match(/Tizen\/([^\s]+)/);
|
|
1995
|
+
var tvMatch = ua.match(/(?:Smart-TV|SMART-TV|TV)/i) ? "Smart TV" : "";
|
|
1996
|
+
model = tizenMatch ? "Tizen ".concat(tizenMatch[1], " ").concat(tvMatch).trim() : "Tizen TV";
|
|
1997
|
+
} else if (ua.includes("Philips")) {
|
|
1998
|
+
brand = "Philips";
|
|
1999
|
+
os = "Saphi";
|
|
2000
|
+
isSmartTV = true;
|
|
2001
|
+
deviceType = "tv";
|
|
2002
|
+
} else if (ua.includes("Sharp") || ua.includes("AQUOS")) {
|
|
2003
|
+
brand = "Sharp";
|
|
2004
|
+
os = "Android TV";
|
|
2005
|
+
isSmartTV = true;
|
|
2006
|
+
deviceType = "tv";
|
|
2007
|
+
} else if (ua.includes("Android") && (ua.includes("Sony") || vendor.includes("Sony"))) {
|
|
2008
|
+
brand = "Sony";
|
|
2009
|
+
os = "Android TV";
|
|
2010
|
+
isSmartTV = true;
|
|
2011
|
+
deviceType = "tv";
|
|
2012
|
+
} else if (ua.includes("Android") && (ua.includes("NetCast") || ua.includes("LG"))) {
|
|
2013
|
+
brand = "LG";
|
|
2014
|
+
os = "Android TV";
|
|
2015
|
+
isSmartTV = true;
|
|
2016
|
+
deviceType = "tv";
|
|
2017
|
+
} else if (ua.includes(" Roku") || ua.includes("Roku/")) {
|
|
2018
|
+
brand = "Roku";
|
|
2019
|
+
os = "Roku OS";
|
|
2020
|
+
isSmartTV = true;
|
|
2021
|
+
deviceType = "tv";
|
|
2022
|
+
} else if (ua.includes("AppleTV")) {
|
|
2023
|
+
brand = "Apple";
|
|
2024
|
+
os = "tvOS";
|
|
2025
|
+
isSmartTV = true;
|
|
2026
|
+
deviceType = "tv";
|
|
2027
|
+
}
|
|
2028
|
+
if (ua.includes("Android")) {
|
|
2029
|
+
isAndroid = true;
|
|
2030
|
+
os = "Android";
|
|
2031
|
+
deviceType = /Mobile/.test(ua) ? "mobile" : "tablet";
|
|
2032
|
+
if (ua.includes("Android") && (maxTouchPoints === 0 || ua.includes("Google TV") || ua.includes("XiaoMi"))) {
|
|
2033
|
+
deviceType = "tv";
|
|
2034
|
+
isSmartTV = true;
|
|
2035
|
+
brand = brand === "Unknown" ? "Android TV" : brand;
|
|
2036
|
+
}
|
|
2037
|
+
var androidModelMatch = ua.match(/\(([^)]*Android[^)]*)\)/);
|
|
2038
|
+
if (androidModelMatch && androidModelMatch[1]) {
|
|
2039
|
+
model = androidModelMatch[1];
|
|
2040
|
+
}
|
|
2041
|
+
}
|
|
2042
|
+
if (/iPad|iPhone|iPod/.test(ua)) {
|
|
2043
|
+
os = "iOS";
|
|
2044
|
+
deviceType = "mobile";
|
|
2045
|
+
brand = "Apple";
|
|
2046
|
+
if (navigator.maxTouchPoints > 1 && /iPad/.test(ua)) {
|
|
2047
|
+
deviceType = "tablet";
|
|
2048
|
+
}
|
|
2049
|
+
}
|
|
2050
|
+
if (!isAndroid && !isSmartTV && !/Mobile/.test(ua)) {
|
|
2051
|
+
if (ua.includes("Windows")) {
|
|
2052
|
+
os = "Windows";
|
|
2053
|
+
deviceType = "desktop";
|
|
2054
|
+
} else if (ua.includes("Mac") && !/iPhone/.test(ua)) {
|
|
2055
|
+
os = "macOS";
|
|
2056
|
+
deviceType = "desktop";
|
|
2057
|
+
if (maxTouchPoints > 1) deviceType = "tablet";
|
|
2058
|
+
} else if (ua.includes("Linux")) {
|
|
2059
|
+
os = "Linux";
|
|
2060
|
+
deviceType = "desktop";
|
|
2061
|
+
}
|
|
2062
|
+
}
|
|
2063
|
+
if (brand === "Unknown") {
|
|
2064
|
+
if (vendor.includes("Google") || ua.includes("Chrome")) brand = "Google";
|
|
2065
|
+
if (vendor.includes("Apple")) brand = "Apple";
|
|
2066
|
+
if (vendor.includes("Samsung") || ua.includes("SM-")) brand = "Samsung";
|
|
2067
|
+
}
|
|
2068
|
+
isWebView = /wv|WebView|Linux; U;/.test(ua);
|
|
2069
|
+
if (((_window = window) === null || _window === void 0 ? void 0 : _window.outerHeight) === 0 && ((_window1 = window) === null || _window1 === void 0 ? void 0 : _window1.outerWidth) === 0) {
|
|
2070
|
+
isWebView = true;
|
|
2071
|
+
}
|
|
2072
|
+
isWebApp = window.matchMedia("(display-mode: standalone)").matches || window.navigator.standalone === true || ((_window_screen = window.screen) === null || _window_screen === void 0 ? void 0 : (_window_screen_orientation = _window_screen.orientation) === null || _window_screen_orientation === void 0 ? void 0 : _window_screen_orientation.angle) !== void 0;
|
|
2073
|
+
return {
|
|
2074
|
+
brand: brand,
|
|
2075
|
+
os: os,
|
|
2076
|
+
model: model || ua.substring(0, 50) + "...",
|
|
2077
|
+
deviceType: deviceType,
|
|
2078
|
+
isSmartTV: isSmartTV,
|
|
2079
|
+
isAndroid: isAndroid,
|
|
2080
|
+
isWebView: isWebView,
|
|
2081
|
+
isWebApp: isWebApp,
|
|
2082
|
+
domain: window.location.hostname,
|
|
2083
|
+
origin: window.location.origin,
|
|
2084
|
+
path: window.location.pathname,
|
|
2085
|
+
userAgent: ua,
|
|
2086
|
+
vendor: vendor,
|
|
2087
|
+
platform: platform,
|
|
2088
|
+
screen: screenInfo,
|
|
2089
|
+
hardwareConcurrency: hardwareConcurrency,
|
|
2090
|
+
deviceMemory: memory,
|
|
2091
|
+
maxTouchPoints: maxTouchPoints,
|
|
2092
|
+
language: navigator.language,
|
|
2093
|
+
languages: ((_navigator_languages = navigator.languages) === null || _navigator_languages === void 0 ? void 0 : _navigator_languages.join(",")) || "",
|
|
2094
|
+
cookieEnabled: navigator.cookieEnabled,
|
|
2095
|
+
doNotTrack: navigator.doNotTrack || "",
|
|
2096
|
+
referrer: document.referrer,
|
|
2097
|
+
visibilityState: document.visibilityState
|
|
2098
|
+
};
|
|
2099
|
+
}
|
|
2100
|
+
function sha256Hex(input) {
|
|
2101
|
+
return _async_to_generator(function() {
|
|
2102
|
+
var _crypto_subtle, encodedData, utf8, buffer, i, hashBuffer, unused, hash, i1, char, fallbackHash, timestamp, random;
|
|
2103
|
+
return _ts_generator(this, function(_state) {
|
|
2104
|
+
switch(_state.label){
|
|
2105
|
+
case 0:
|
|
2106
|
+
if (!(typeof crypto !== "undefined" && ((_crypto_subtle = crypto.subtle) === null || _crypto_subtle === void 0 ? void 0 : _crypto_subtle.digest))) return [
|
|
2107
|
+
3,
|
|
2108
|
+
5
|
|
2109
|
+
];
|
|
2110
|
+
_state.label = 1;
|
|
2111
|
+
case 1:
|
|
2112
|
+
_state.trys.push([
|
|
2113
|
+
1,
|
|
2114
|
+
4,
|
|
2115
|
+
,
|
|
2116
|
+
5
|
|
2117
|
+
]);
|
|
2118
|
+
return [
|
|
2119
|
+
4,
|
|
2120
|
+
crypto.subtle.digest("SHA-256", new Uint8Array([
|
|
2121
|
+
1,
|
|
2122
|
+
2,
|
|
2123
|
+
3
|
|
2124
|
+
]))
|
|
2125
|
+
];
|
|
2126
|
+
case 2:
|
|
2127
|
+
_state.sent();
|
|
2128
|
+
if (typeof TextEncoder !== "undefined") {
|
|
2129
|
+
encodedData = new TextEncoder().encode(input);
|
|
2130
|
+
} else {
|
|
2131
|
+
utf8 = unescape(encodeURIComponent(input));
|
|
2132
|
+
buffer = new Uint8Array(utf8.length);
|
|
2133
|
+
for(i = 0; i < utf8.length; i++){
|
|
2134
|
+
buffer[i] = utf8.charCodeAt(i);
|
|
2206
2135
|
}
|
|
2136
|
+
encodedData = buffer;
|
|
2207
2137
|
}
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
|
|
2138
|
+
return [
|
|
2139
|
+
4,
|
|
2140
|
+
crypto.subtle.digest("SHA-256", encodedData)
|
|
2141
|
+
];
|
|
2142
|
+
case 3:
|
|
2143
|
+
hashBuffer = _state.sent();
|
|
2144
|
+
return [
|
|
2145
|
+
2,
|
|
2146
|
+
Array.from(new Uint8Array(hashBuffer)).map(function(b) {
|
|
2147
|
+
return b.toString(16).padStart(2, "0");
|
|
2148
|
+
}).join("")
|
|
2149
|
+
];
|
|
2150
|
+
case 4:
|
|
2151
|
+
unused = _state.sent();
|
|
2152
|
+
console.warn("[StormcloudVideoPlayer] crypto.subtle not supported, using fallback hash");
|
|
2153
|
+
return [
|
|
2154
|
+
3,
|
|
2155
|
+
5
|
|
2156
|
+
];
|
|
2157
|
+
case 5:
|
|
2158
|
+
hash = 0;
|
|
2159
|
+
for(i1 = 0; i1 < input.length; i1++){
|
|
2160
|
+
char = input.charCodeAt(i1);
|
|
2161
|
+
hash = (hash << 5) - hash + char;
|
|
2162
|
+
hash = hash & hash;
|
|
2163
|
+
}
|
|
2164
|
+
fallbackHash = Math.abs(hash).toString(16).padStart(8, "0");
|
|
2165
|
+
timestamp = Date.now().toString(16).padStart(12, "0");
|
|
2166
|
+
random = Math.random().toString(16).substring(2, 14).padStart(12, "0");
|
|
2167
|
+
return [
|
|
2168
|
+
2,
|
|
2169
|
+
(fallbackHash + timestamp + random).padEnd(64, "0")
|
|
2170
|
+
];
|
|
2229
2171
|
}
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
}
|
|
2172
|
+
});
|
|
2173
|
+
})();
|
|
2233
2174
|
}
|
|
2234
|
-
function
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
return this.substring(pos, pos + search.length) === search;
|
|
2239
|
-
};
|
|
2175
|
+
function resolvePlayerIdentitySeed(clientInfo) {
|
|
2176
|
+
var nativeDeviceId = resolveNativeDeviceId();
|
|
2177
|
+
if (nativeDeviceId) {
|
|
2178
|
+
return "device:".concat(nativeDeviceId);
|
|
2240
2179
|
}
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
String.prototype.endsWith = function(search, length) {
|
|
2245
|
-
if (length === void 0 || length > this.length) {
|
|
2246
|
-
length = this.length;
|
|
2247
|
-
}
|
|
2248
|
-
return this.substring(length - search.length, length) === search;
|
|
2249
|
-
};
|
|
2180
|
+
var persistedId = getOrCreateStoredUuid(PLAYER_ID_STORAGE_KEY);
|
|
2181
|
+
if (persistedId) {
|
|
2182
|
+
return "persisted:".concat(persistedId);
|
|
2250
2183
|
}
|
|
2184
|
+
return "fingerprint:".concat(JSON.stringify(clientInfo));
|
|
2251
2185
|
}
|
|
2252
|
-
function
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2186
|
+
function getBrowserID(clientInfo) {
|
|
2187
|
+
return _async_to_generator(function() {
|
|
2188
|
+
return _ts_generator(this, function(_state) {
|
|
2189
|
+
switch(_state.label){
|
|
2190
|
+
case 0:
|
|
2191
|
+
if (cachedBrowserId) {
|
|
2192
|
+
return [
|
|
2193
|
+
2,
|
|
2194
|
+
cachedBrowserId
|
|
2195
|
+
];
|
|
2196
|
+
}
|
|
2197
|
+
return [
|
|
2198
|
+
4,
|
|
2199
|
+
sha256Hex(resolvePlayerIdentitySeed(clientInfo))
|
|
2200
|
+
];
|
|
2201
|
+
case 1:
|
|
2202
|
+
cachedBrowserId = _state.sent();
|
|
2203
|
+
return [
|
|
2204
|
+
2,
|
|
2205
|
+
cachedBrowserId
|
|
2206
|
+
];
|
|
2260
2207
|
}
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
}
|
|
2208
|
+
});
|
|
2209
|
+
})();
|
|
2264
2210
|
}
|
|
2265
|
-
function
|
|
2266
|
-
|
|
2267
|
-
polyfillArrayFrom();
|
|
2268
|
-
polyfillStringStartsWith();
|
|
2269
|
-
polyfillStringEndsWith();
|
|
2270
|
-
polyfillStringIncludes();
|
|
2271
|
-
polyfillURLSearchParams();
|
|
2272
|
-
polyfillTextEncoder();
|
|
2273
|
-
polyfillPromiseFinally();
|
|
2211
|
+
function canPublish(licenseKey) {
|
|
2212
|
+
return Boolean(isMQTTEnabled() && licenseKey);
|
|
2274
2213
|
}
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
var
|
|
2278
|
-
var
|
|
2279
|
-
|
|
2280
|
-
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2214
|
+
function buildPlayerMetricEvent() {
|
|
2215
|
+
return _async_to_generator(function() {
|
|
2216
|
+
var context, flags, _flags_captureAt, _flags_adLoaded, _flags_adDetect, clientInfo, debugAdTiming, playerId, captureAt;
|
|
2217
|
+
var _arguments = arguments;
|
|
2218
|
+
return _ts_generator(this, function(_state) {
|
|
2219
|
+
switch(_state.label){
|
|
2220
|
+
case 0:
|
|
2221
|
+
context = _arguments.length > 0 && _arguments[0] !== void 0 ? _arguments[0] : {}, flags = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
|
2222
|
+
clientInfo = getClientInfo();
|
|
2223
|
+
debugAdTiming = !!context.debugAdTiming;
|
|
2224
|
+
if (debugAdTiming) {
|
|
2225
|
+
console.log("[StormcloudVideoPlayer] clientInfo: ", JSON.stringify(clientInfo, null, 2));
|
|
2226
|
+
}
|
|
2227
|
+
return [
|
|
2228
|
+
4,
|
|
2229
|
+
getBrowserID(clientInfo)
|
|
2230
|
+
];
|
|
2231
|
+
case 1:
|
|
2232
|
+
playerId = _state.sent();
|
|
2233
|
+
if (debugAdTiming) {
|
|
2234
|
+
console.log("[StormcloudVideoPlayer] playerId: ", playerId);
|
|
2235
|
+
}
|
|
2236
|
+
captureAt = (_flags_captureAt = flags.captureAt) !== null && _flags_captureAt !== void 0 ? _flags_captureAt : /* @__PURE__ */ new Date().toISOString();
|
|
2237
|
+
return [
|
|
2238
|
+
2,
|
|
2239
|
+
_object_spread({
|
|
2240
|
+
player_id: playerId,
|
|
2241
|
+
device_type: clientInfo.deviceType,
|
|
2242
|
+
os: clientInfo.os.toLowerCase(),
|
|
2243
|
+
ad_loaded: (_flags_adLoaded = flags.adLoaded) !== null && _flags_adLoaded !== void 0 ? _flags_adLoaded : false,
|
|
2244
|
+
ad_detect: (_flags_adDetect = flags.adDetect) !== null && _flags_adDetect !== void 0 ? _flags_adDetect : false,
|
|
2245
|
+
capture_at: captureAt
|
|
2246
|
+
}, context.inputStreamType ? {
|
|
2247
|
+
input_stream_type: context.inputStreamType
|
|
2248
|
+
} : {})
|
|
2249
|
+
];
|
|
2250
|
+
}
|
|
2251
|
+
});
|
|
2252
|
+
}).apply(this, arguments);
|
|
2290
2253
|
}
|
|
2291
|
-
function
|
|
2292
|
-
|
|
2293
|
-
|
|
2254
|
+
function publishTracking(licenseKey, channel, body) {
|
|
2255
|
+
ensureMQTTClient();
|
|
2256
|
+
publishMQTT(buildPlayerTopic(licenseKey, channel), body);
|
|
2294
2257
|
}
|
|
2295
|
-
function
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2258
|
+
function sendInitialTracking(_0) {
|
|
2259
|
+
return _async_to_generator(function(licenseKey) {
|
|
2260
|
+
var context, metricEvent, error;
|
|
2261
|
+
var _arguments = arguments;
|
|
2262
|
+
return _ts_generator(this, function(_state) {
|
|
2263
|
+
switch(_state.label){
|
|
2264
|
+
case 0:
|
|
2265
|
+
context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
|
2266
|
+
if (!canPublish(licenseKey)) return [
|
|
2267
|
+
2
|
|
2268
|
+
];
|
|
2269
|
+
_state.label = 1;
|
|
2270
|
+
case 1:
|
|
2271
|
+
_state.trys.push([
|
|
2272
|
+
1,
|
|
2273
|
+
3,
|
|
2274
|
+
,
|
|
2275
|
+
4
|
|
2276
|
+
]);
|
|
2277
|
+
return [
|
|
2278
|
+
4,
|
|
2279
|
+
buildPlayerMetricEvent(context, {
|
|
2280
|
+
adLoaded: false,
|
|
2281
|
+
adDetect: false
|
|
2282
|
+
})
|
|
2283
|
+
];
|
|
2284
|
+
case 2:
|
|
2285
|
+
metricEvent = _state.sent();
|
|
2286
|
+
publishTracking(licenseKey, "metrics", {
|
|
2287
|
+
events: [
|
|
2288
|
+
metricEvent
|
|
2289
|
+
]
|
|
2290
|
+
});
|
|
2291
|
+
return [
|
|
2292
|
+
3,
|
|
2293
|
+
4
|
|
2294
|
+
];
|
|
2295
|
+
case 3:
|
|
2296
|
+
error = _state.sent();
|
|
2297
|
+
console.error("[StormcloudVideoPlayer] Error sending initial tracking data:", error);
|
|
2298
|
+
return [
|
|
2299
|
+
3,
|
|
2300
|
+
4
|
|
2301
|
+
];
|
|
2302
|
+
case 4:
|
|
2303
|
+
return [
|
|
2304
|
+
2
|
|
2305
|
+
];
|
|
2306
|
+
}
|
|
2307
|
+
});
|
|
2308
|
+
}).apply(this, arguments);
|
|
2302
2309
|
}
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
]);
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
|
|
2329
|
-
|
|
2330
|
-
|
|
2331
|
-
|
|
2332
|
-
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2342
|
-
|
|
2310
|
+
function sendAdDetectTracking(_0, _1) {
|
|
2311
|
+
return _async_to_generator(function(licenseKey, adDetectInfo) {
|
|
2312
|
+
var context, error;
|
|
2313
|
+
var _arguments = arguments;
|
|
2314
|
+
return _ts_generator(this, function(_state) {
|
|
2315
|
+
switch(_state.label){
|
|
2316
|
+
case 0:
|
|
2317
|
+
context = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
2318
|
+
_state.label = 1;
|
|
2319
|
+
case 1:
|
|
2320
|
+
_state.trys.push([
|
|
2321
|
+
1,
|
|
2322
|
+
3,
|
|
2323
|
+
,
|
|
2324
|
+
4
|
|
2325
|
+
]);
|
|
2326
|
+
return [
|
|
2327
|
+
4,
|
|
2328
|
+
sendHeartbeat(licenseKey, context, {
|
|
2329
|
+
adDetect: true,
|
|
2330
|
+
captureAt: adDetectInfo.timestamp
|
|
2331
|
+
})
|
|
2332
|
+
];
|
|
2333
|
+
case 2:
|
|
2334
|
+
_state.sent();
|
|
2335
|
+
return [
|
|
2336
|
+
3,
|
|
2337
|
+
4
|
|
2338
|
+
];
|
|
2339
|
+
case 3:
|
|
2340
|
+
error = _state.sent();
|
|
2341
|
+
console.error("[StormcloudVideoPlayer] Error sending ad detect tracking:", error);
|
|
2342
|
+
return [
|
|
2343
|
+
3,
|
|
2344
|
+
4
|
|
2345
|
+
];
|
|
2346
|
+
case 4:
|
|
2347
|
+
return [
|
|
2348
|
+
2
|
|
2349
|
+
];
|
|
2350
|
+
}
|
|
2343
2351
|
});
|
|
2344
|
-
}
|
|
2345
|
-
return _object_spread({
|
|
2346
|
-
isCtv: false
|
|
2347
|
-
}, deviceId ? {
|
|
2348
|
-
deviceId: deviceId
|
|
2349
|
-
} : {}, deviceIdType ? {
|
|
2350
|
-
deviceIdType: deviceIdType
|
|
2351
|
-
} : {}, limitAdTracking != null ? {
|
|
2352
|
-
limitAdTracking: limitAdTracking
|
|
2353
|
-
} : {});
|
|
2352
|
+
}).apply(this, arguments);
|
|
2354
2353
|
}
|
|
2355
|
-
function
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
|
|
2367
|
-
|
|
2354
|
+
function sendAdLoadedTracking(_0, _1) {
|
|
2355
|
+
return _async_to_generator(function(licenseKey, adLoadedInfo) {
|
|
2356
|
+
var context, error;
|
|
2357
|
+
var _arguments = arguments;
|
|
2358
|
+
return _ts_generator(this, function(_state) {
|
|
2359
|
+
switch(_state.label){
|
|
2360
|
+
case 0:
|
|
2361
|
+
context = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
2362
|
+
_state.label = 1;
|
|
2363
|
+
case 1:
|
|
2364
|
+
_state.trys.push([
|
|
2365
|
+
1,
|
|
2366
|
+
3,
|
|
2367
|
+
,
|
|
2368
|
+
4
|
|
2369
|
+
]);
|
|
2370
|
+
return [
|
|
2371
|
+
4,
|
|
2372
|
+
sendHeartbeat(licenseKey, context, {
|
|
2373
|
+
adLoaded: true,
|
|
2374
|
+
captureAt: adLoadedInfo.timestamp
|
|
2375
|
+
})
|
|
2376
|
+
];
|
|
2377
|
+
case 2:
|
|
2378
|
+
_state.sent();
|
|
2379
|
+
return [
|
|
2380
|
+
3,
|
|
2381
|
+
4
|
|
2382
|
+
];
|
|
2383
|
+
case 3:
|
|
2384
|
+
error = _state.sent();
|
|
2385
|
+
console.error("[StormcloudVideoPlayer] Error sending ad loaded tracking:", error);
|
|
2386
|
+
return [
|
|
2387
|
+
3,
|
|
2388
|
+
4
|
|
2389
|
+
];
|
|
2390
|
+
case 4:
|
|
2391
|
+
return [
|
|
2392
|
+
2
|
|
2393
|
+
];
|
|
2394
|
+
}
|
|
2395
|
+
});
|
|
2396
|
+
}).apply(this, arguments);
|
|
2368
2397
|
}
|
|
2369
|
-
function
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
|
|
2398
|
+
function sendAdImpressionTracking(_0, _1) {
|
|
2399
|
+
return _async_to_generator(function(licenseKey, adImpressionInfo) {
|
|
2400
|
+
var context, metricEvent, error;
|
|
2401
|
+
var _arguments = arguments;
|
|
2402
|
+
return _ts_generator(this, function(_state) {
|
|
2403
|
+
switch(_state.label){
|
|
2404
|
+
case 0:
|
|
2405
|
+
context = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
2406
|
+
if (!canPublish(licenseKey)) return [
|
|
2407
|
+
2
|
|
2408
|
+
];
|
|
2409
|
+
_state.label = 1;
|
|
2410
|
+
case 1:
|
|
2411
|
+
_state.trys.push([
|
|
2412
|
+
1,
|
|
2413
|
+
3,
|
|
2414
|
+
,
|
|
2415
|
+
4
|
|
2416
|
+
]);
|
|
2417
|
+
return [
|
|
2418
|
+
4,
|
|
2419
|
+
buildPlayerMetricEvent(context, {
|
|
2420
|
+
captureAt: adImpressionInfo.timestamp
|
|
2421
|
+
})
|
|
2422
|
+
];
|
|
2423
|
+
case 2:
|
|
2424
|
+
metricEvent = _state.sent();
|
|
2425
|
+
publishTracking(licenseKey, "heartbeat", metricEvent);
|
|
2426
|
+
publishTracking(licenseKey, "impressions", {
|
|
2427
|
+
events: [
|
|
2428
|
+
{
|
|
2429
|
+
player_id: metricEvent.player_id,
|
|
2430
|
+
ad_played_count: 1,
|
|
2431
|
+
ad_url: adImpressionInfo.adUrl,
|
|
2432
|
+
capture_at: adImpressionInfo.timestamp
|
|
2433
|
+
}
|
|
2434
|
+
]
|
|
2435
|
+
});
|
|
2436
|
+
return [
|
|
2437
|
+
3,
|
|
2438
|
+
4
|
|
2439
|
+
];
|
|
2440
|
+
case 3:
|
|
2441
|
+
error = _state.sent();
|
|
2442
|
+
console.error("[StormcloudVideoPlayer] Error sending ad impression tracking:", error);
|
|
2443
|
+
return [
|
|
2444
|
+
3,
|
|
2445
|
+
4
|
|
2446
|
+
];
|
|
2447
|
+
case 4:
|
|
2448
|
+
return [
|
|
2449
|
+
2
|
|
2450
|
+
];
|
|
2451
|
+
}
|
|
2452
|
+
});
|
|
2453
|
+
}).apply(this, arguments);
|
|
2375
2454
|
}
|
|
2376
|
-
function
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
|
|
2455
|
+
function sendHeartbeat(_0) {
|
|
2456
|
+
return _async_to_generator(function(licenseKey) {
|
|
2457
|
+
var context, flags, heartbeatData, error;
|
|
2458
|
+
var _arguments = arguments;
|
|
2459
|
+
return _ts_generator(this, function(_state) {
|
|
2460
|
+
switch(_state.label){
|
|
2461
|
+
case 0:
|
|
2462
|
+
context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {}, flags = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
2463
|
+
if (!canPublish(licenseKey)) return [
|
|
2464
|
+
2
|
|
2465
|
+
];
|
|
2466
|
+
_state.label = 1;
|
|
2467
|
+
case 1:
|
|
2468
|
+
_state.trys.push([
|
|
2469
|
+
1,
|
|
2470
|
+
3,
|
|
2471
|
+
,
|
|
2472
|
+
4
|
|
2473
|
+
]);
|
|
2474
|
+
return [
|
|
2475
|
+
4,
|
|
2476
|
+
buildPlayerMetricEvent(context, flags)
|
|
2477
|
+
];
|
|
2478
|
+
case 2:
|
|
2479
|
+
heartbeatData = _state.sent();
|
|
2480
|
+
publishTracking(licenseKey, "heartbeat", heartbeatData);
|
|
2481
|
+
return [
|
|
2482
|
+
3,
|
|
2483
|
+
4
|
|
2484
|
+
];
|
|
2485
|
+
case 3:
|
|
2486
|
+
error = _state.sent();
|
|
2487
|
+
console.error("[StormcloudVideoPlayer] Error sending heartbeat:", error);
|
|
2488
|
+
return [
|
|
2489
|
+
3,
|
|
2490
|
+
4
|
|
2491
|
+
];
|
|
2492
|
+
case 4:
|
|
2493
|
+
return [
|
|
2494
|
+
2
|
|
2495
|
+
];
|
|
2496
|
+
}
|
|
2497
|
+
});
|
|
2498
|
+
}).apply(this, arguments);
|
|
2387
2499
|
}
|
|
2388
|
-
|
|
2389
|
-
|
|
2390
|
-
|
|
2500
|
+
// src/utils/polyfills.ts
|
|
2501
|
+
function polyfillURLSearchParams() {
|
|
2502
|
+
if (typeof URLSearchParams !== "undefined") {
|
|
2503
|
+
return;
|
|
2391
2504
|
}
|
|
2392
|
-
|
|
2393
|
-
|
|
2394
|
-
|
|
2395
|
-
|
|
2396
|
-
|
|
2397
|
-
|
|
2398
|
-
|
|
2399
|
-
|
|
2400
|
-
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
if (adinfo) {
|
|
2404
|
-
var tifa = typeof adinfo.getTIFA === "function" ? adinfo.getTIFA() : adinfo.tifa;
|
|
2405
|
-
if (typeof tifa === "string" && tifa && !isMacroPlaceholder(tifa)) {
|
|
2406
|
-
var lat = typeof adinfo.isLATEnabled === "function" ? adinfo.isLATEnabled() : void 0;
|
|
2407
|
-
return _object_spread({
|
|
2408
|
-
deviceId: tifa,
|
|
2409
|
-
deviceIdType: "tifa"
|
|
2410
|
-
}, typeof lat === "boolean" ? {
|
|
2411
|
-
limitAdTracking: lat
|
|
2412
|
-
} : {});
|
|
2505
|
+
var URLSearchParamsPolyfill = /*#__PURE__*/ function() {
|
|
2506
|
+
function URLSearchParamsPolyfill(init) {
|
|
2507
|
+
var _this = this;
|
|
2508
|
+
_class_call_check(this, URLSearchParamsPolyfill);
|
|
2509
|
+
this.params = /* @__PURE__ */ new Map();
|
|
2510
|
+
if (typeof init === "string") {
|
|
2511
|
+
this.parseQueryString(init);
|
|
2512
|
+
} else if (_instanceof(init, URLSearchParamsPolyfill)) {
|
|
2513
|
+
init.forEach(function(value, key) {
|
|
2514
|
+
_this.append(key, value);
|
|
2515
|
+
});
|
|
2413
2516
|
}
|
|
2414
2517
|
}
|
|
2415
|
-
|
|
2416
|
-
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
2518
|
+
_create_class(URLSearchParamsPolyfill, [
|
|
2519
|
+
{
|
|
2520
|
+
key: "parseQueryString",
|
|
2521
|
+
value: function parseQueryString(query) {
|
|
2522
|
+
var _this = this;
|
|
2523
|
+
var cleanQuery = query.startsWith("?") ? query.slice(1) : query;
|
|
2524
|
+
if (!cleanQuery) return;
|
|
2525
|
+
cleanQuery.split("&").forEach(function(param) {
|
|
2526
|
+
var _param_split = _sliced_to_array(param.split("="), 2), key = _param_split[0], value = _param_split[1];
|
|
2527
|
+
if (key) {
|
|
2528
|
+
var decodedKey = _this.safeDecodeURIComponent(key);
|
|
2529
|
+
var decodedValue = value ? _this.safeDecodeURIComponent(value) : "";
|
|
2530
|
+
_this.append(decodedKey, decodedValue);
|
|
2531
|
+
}
|
|
2532
|
+
});
|
|
2427
2533
|
}
|
|
2428
|
-
|
|
2429
|
-
|
|
2430
|
-
|
|
2431
|
-
|
|
2432
|
-
|
|
2433
|
-
|
|
2534
|
+
},
|
|
2535
|
+
{
|
|
2536
|
+
key: "safeDecodeURIComponent",
|
|
2537
|
+
value: function safeDecodeURIComponent(str) {
|
|
2538
|
+
try {
|
|
2539
|
+
return decodeURIComponent(str.replace(/\+/g, " "));
|
|
2540
|
+
} catch (e) {
|
|
2541
|
+
return str;
|
|
2542
|
+
}
|
|
2543
|
+
}
|
|
2544
|
+
},
|
|
2545
|
+
{
|
|
2546
|
+
key: "append",
|
|
2547
|
+
value: function append(name, value) {
|
|
2548
|
+
var values = this.params.get(name) || [];
|
|
2549
|
+
values.push(String(value));
|
|
2550
|
+
this.params.set(name, values);
|
|
2551
|
+
}
|
|
2552
|
+
},
|
|
2553
|
+
{
|
|
2554
|
+
key: "delete",
|
|
2555
|
+
value: function _delete(name) {
|
|
2556
|
+
this.params.delete(name);
|
|
2557
|
+
}
|
|
2558
|
+
},
|
|
2559
|
+
{
|
|
2560
|
+
key: "get",
|
|
2561
|
+
value: function get(name) {
|
|
2562
|
+
var values = this.params.get(name);
|
|
2563
|
+
return values && values.length > 0 && values[0] !== void 0 ? values[0] : null;
|
|
2564
|
+
}
|
|
2565
|
+
},
|
|
2566
|
+
{
|
|
2567
|
+
key: "getAll",
|
|
2568
|
+
value: function getAll(name) {
|
|
2569
|
+
return this.params.get(name) || [];
|
|
2570
|
+
}
|
|
2571
|
+
},
|
|
2572
|
+
{
|
|
2573
|
+
key: "has",
|
|
2574
|
+
value: function has(name) {
|
|
2575
|
+
return this.params.has(name);
|
|
2576
|
+
}
|
|
2577
|
+
},
|
|
2578
|
+
{
|
|
2579
|
+
key: "set",
|
|
2580
|
+
value: function set(name, value) {
|
|
2581
|
+
this.params.set(name, [
|
|
2582
|
+
String(value)
|
|
2583
|
+
]);
|
|
2584
|
+
}
|
|
2585
|
+
},
|
|
2586
|
+
{
|
|
2587
|
+
key: "forEach",
|
|
2588
|
+
value: function forEach(callback) {
|
|
2589
|
+
var _this = this;
|
|
2590
|
+
this.params.forEach(function(values, key) {
|
|
2591
|
+
values.forEach(function(value) {
|
|
2592
|
+
callback(value, key, _this);
|
|
2593
|
+
});
|
|
2594
|
+
});
|
|
2595
|
+
}
|
|
2596
|
+
},
|
|
2597
|
+
{
|
|
2598
|
+
key: "toString",
|
|
2599
|
+
value: function toString() {
|
|
2600
|
+
var parts = [];
|
|
2601
|
+
this.params.forEach(function(values, key) {
|
|
2602
|
+
values.forEach(function(value) {
|
|
2603
|
+
parts.push("".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(value)));
|
|
2604
|
+
});
|
|
2605
|
+
});
|
|
2606
|
+
return parts.join("&");
|
|
2434
2607
|
}
|
|
2435
2608
|
}
|
|
2436
|
-
|
|
2437
|
-
|
|
2438
|
-
|
|
2439
|
-
|
|
2440
|
-
if (roku) {
|
|
2441
|
-
var rida = typeof roku.getPublisherUniqueId === "function" ? roku.getPublisherUniqueId() : roku.rida;
|
|
2442
|
-
if (typeof rida === "string" && rida && !isMacroPlaceholder(rida)) {
|
|
2443
|
-
return {
|
|
2444
|
-
deviceId: rida,
|
|
2445
|
-
deviceIdType: "rida",
|
|
2446
|
-
limitAdTracking: false
|
|
2447
|
-
};
|
|
2448
|
-
}
|
|
2449
|
-
}
|
|
2450
|
-
} catch (unused) {}
|
|
2451
|
-
return {};
|
|
2452
|
-
}
|
|
2453
|
-
var ZEROED_AD_ID_PATTERNS = /* @__PURE__ */ new Set([
|
|
2454
|
-
"38400000-8cf0-11bd-b23e-10b96e40000d",
|
|
2455
|
-
"00000000-0000-0000-0000-000000000000"
|
|
2456
|
-
]);
|
|
2457
|
-
function isMacroPlaceholder(value) {
|
|
2458
|
-
var t = value.trim();
|
|
2459
|
-
return !t || /^(\[[^\]]*\]|\{[^}]*\}|%%[^%]*%%)$/.test(t) || /^(unknown|null|undefined|none|n\/a|\$\{[^}]+\})$/i.test(t) || ZEROED_AD_ID_PATTERNS.has(t.toLowerCase());
|
|
2460
|
-
}
|
|
2461
|
-
function isZeroedAdId(value) {
|
|
2462
|
-
return ZEROED_AD_ID_PATTERNS.has(value.trim().toLowerCase());
|
|
2463
|
-
}
|
|
2464
|
-
function readNativeBridgeSignals() {
|
|
2465
|
-
if (typeof window === "undefined") {
|
|
2466
|
-
return {};
|
|
2467
|
-
}
|
|
2468
|
-
var candidates = [
|
|
2469
|
-
window.__STORMCLOUD_CTV_AD_INFO__,
|
|
2470
|
-
window.__STORMCLOUD_CTV__,
|
|
2471
|
-
window.stormcloudCtv,
|
|
2472
|
-
window.AiryTV,
|
|
2473
|
-
window.Android,
|
|
2474
|
-
window.webOS,
|
|
2475
|
-
window.tizen,
|
|
2476
|
-
window.amazon
|
|
2477
|
-
].filter(Boolean);
|
|
2478
|
-
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
2479
|
-
try {
|
|
2480
|
-
for(var _iterator = candidates[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
2481
|
-
var source = _step.value;
|
|
2482
|
-
var contentUrl = readBridgeValue(source, [
|
|
2483
|
-
"contentUrl",
|
|
2484
|
-
"url",
|
|
2485
|
-
"videoUrl",
|
|
2486
|
-
"canonicalUrl"
|
|
2487
|
-
]) || void 0;
|
|
2488
|
-
var appId = readBridgeValue(source, [
|
|
2489
|
-
"appId",
|
|
2490
|
-
"msid",
|
|
2491
|
-
"applicationId",
|
|
2492
|
-
"packageName"
|
|
2493
|
-
]) || void 0;
|
|
2494
|
-
var appName = readBridgeValue(source, [
|
|
2495
|
-
"appName",
|
|
2496
|
-
"an",
|
|
2497
|
-
"applicationName"
|
|
2498
|
-
]) || void 0;
|
|
2499
|
-
var deviceId = readBridgeValue(source, [
|
|
2500
|
-
"rdid",
|
|
2501
|
-
"ifa",
|
|
2502
|
-
"advertisingId",
|
|
2503
|
-
"adId",
|
|
2504
|
-
"deviceId",
|
|
2505
|
-
"lgudid",
|
|
2506
|
-
"LGUDID",
|
|
2507
|
-
"tifa",
|
|
2508
|
-
"rida",
|
|
2509
|
-
"afai",
|
|
2510
|
-
"aaid"
|
|
2511
|
-
]) || void 0;
|
|
2512
|
-
if (!contentUrl && !deviceId && !appId && !appName) continue;
|
|
2513
|
-
var deviceIdType = readBridgeValue(source, [
|
|
2514
|
-
"idtype",
|
|
2515
|
-
"deviceIdType",
|
|
2516
|
-
"advertisingIdType",
|
|
2517
|
-
"idType"
|
|
2518
|
-
]) || inferDeviceIdType();
|
|
2519
|
-
var limitAdTracking = readBridgeBoolean(source, [
|
|
2520
|
-
"is_lat",
|
|
2521
|
-
"limitAdTracking",
|
|
2522
|
-
"limitedAdTracking",
|
|
2523
|
-
"lat"
|
|
2524
|
-
]);
|
|
2525
|
-
return _object_spread({}, contentUrl ? {
|
|
2526
|
-
contentUrl: contentUrl
|
|
2527
|
-
} : {}, appId ? {
|
|
2528
|
-
appId: appId
|
|
2529
|
-
} : {}, appName ? {
|
|
2530
|
-
appName: appName
|
|
2531
|
-
} : {}, deviceId ? {
|
|
2532
|
-
deviceId: deviceId
|
|
2533
|
-
} : {}, deviceId && deviceIdType ? {
|
|
2534
|
-
deviceIdType: deviceIdType
|
|
2535
|
-
} : {}, deviceId && limitAdTracking != null ? {
|
|
2536
|
-
limitAdTracking: limitAdTracking
|
|
2537
|
-
} : {});
|
|
2538
|
-
}
|
|
2539
|
-
} catch (err) {
|
|
2540
|
-
_didIteratorError = true;
|
|
2541
|
-
_iteratorError = err;
|
|
2542
|
-
} finally{
|
|
2543
|
-
try {
|
|
2544
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
2545
|
-
_iterator.return();
|
|
2546
|
-
}
|
|
2547
|
-
} finally{
|
|
2548
|
-
if (_didIteratorError) {
|
|
2549
|
-
throw _iteratorError;
|
|
2550
|
-
}
|
|
2551
|
-
}
|
|
2552
|
-
}
|
|
2553
|
-
return {};
|
|
2609
|
+
]);
|
|
2610
|
+
return URLSearchParamsPolyfill;
|
|
2611
|
+
}();
|
|
2612
|
+
window.URLSearchParams = URLSearchParamsPolyfill;
|
|
2554
2613
|
}
|
|
2555
|
-
function
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
}
|
|
2564
|
-
if (typeof value === "function") {
|
|
2565
|
-
try {
|
|
2566
|
-
var result = value.call(source);
|
|
2567
|
-
if (typeof result === "string" && result) {
|
|
2568
|
-
return result;
|
|
2569
|
-
}
|
|
2570
|
-
} catch (unused) {}
|
|
2571
|
-
}
|
|
2614
|
+
function polyfillTextEncoder() {
|
|
2615
|
+
if (typeof TextEncoder !== "undefined") {
|
|
2616
|
+
return;
|
|
2617
|
+
}
|
|
2618
|
+
var TextEncoderPolyfill = /*#__PURE__*/ function() {
|
|
2619
|
+
function TextEncoderPolyfill() {
|
|
2620
|
+
_class_call_check(this, TextEncoderPolyfill);
|
|
2621
|
+
this.encoding = "utf-8";
|
|
2572
2622
|
}
|
|
2573
|
-
|
|
2574
|
-
|
|
2575
|
-
|
|
2576
|
-
|
|
2577
|
-
|
|
2578
|
-
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2623
|
+
_create_class(TextEncoderPolyfill, [
|
|
2624
|
+
{
|
|
2625
|
+
key: "encode",
|
|
2626
|
+
value: function encode(str) {
|
|
2627
|
+
var utf8 = [];
|
|
2628
|
+
for(var i = 0; i < str.length; i++){
|
|
2629
|
+
var charcode = str.charCodeAt(i);
|
|
2630
|
+
if (charcode < 128) {
|
|
2631
|
+
utf8.push(charcode);
|
|
2632
|
+
} else if (charcode < 2048) {
|
|
2633
|
+
utf8.push(192 | charcode >> 6, 128 | charcode & 63);
|
|
2634
|
+
} else if (charcode < 55296 || charcode >= 57344) {
|
|
2635
|
+
utf8.push(224 | charcode >> 12, 128 | charcode >> 6 & 63, 128 | charcode & 63);
|
|
2636
|
+
} else {
|
|
2637
|
+
i++;
|
|
2638
|
+
charcode = 65536 + ((charcode & 1023) << 10 | str.charCodeAt(i) & 1023);
|
|
2639
|
+
utf8.push(240 | charcode >> 18, 128 | charcode >> 12 & 63, 128 | charcode >> 6 & 63, 128 | charcode & 63);
|
|
2640
|
+
}
|
|
2641
|
+
}
|
|
2642
|
+
return new Uint8Array(utf8);
|
|
2643
|
+
}
|
|
2584
2644
|
}
|
|
2585
|
-
|
|
2645
|
+
]);
|
|
2646
|
+
return TextEncoderPolyfill;
|
|
2647
|
+
}();
|
|
2648
|
+
window.TextEncoder = TextEncoderPolyfill;
|
|
2649
|
+
}
|
|
2650
|
+
function polyfillPromiseFinally() {
|
|
2651
|
+
if (typeof Promise !== "undefined" && !Promise.prototype.finally) {
|
|
2652
|
+
Promise.prototype.finally = function(callback) {
|
|
2653
|
+
var constructor = this.constructor;
|
|
2654
|
+
return this.then(function(value) {
|
|
2655
|
+
return constructor.resolve(callback()).then(function() {
|
|
2656
|
+
return value;
|
|
2657
|
+
});
|
|
2658
|
+
}, function(reason) {
|
|
2659
|
+
return constructor.resolve(callback()).then(function() {
|
|
2660
|
+
throw reason;
|
|
2661
|
+
});
|
|
2662
|
+
});
|
|
2663
|
+
};
|
|
2586
2664
|
}
|
|
2587
|
-
return void 0;
|
|
2588
2665
|
}
|
|
2589
|
-
function
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
var value = source === null || source === void 0 ? void 0 : source[key];
|
|
2595
|
-
var normalized = normalizeBoolean(value);
|
|
2596
|
-
if (normalized != null) {
|
|
2597
|
-
return normalized;
|
|
2598
|
-
}
|
|
2599
|
-
if (typeof value === "function") {
|
|
2600
|
-
try {
|
|
2601
|
-
var result = normalizeBoolean(value.call(source));
|
|
2602
|
-
if (result != null) {
|
|
2603
|
-
return result;
|
|
2604
|
-
}
|
|
2605
|
-
} catch (unused) {}
|
|
2666
|
+
function polyfillObjectAssign() {
|
|
2667
|
+
if (typeof Object.assign !== "function") {
|
|
2668
|
+
Object.assign = function(target) {
|
|
2669
|
+
for(var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
|
|
2670
|
+
sources[_key - 1] = arguments[_key];
|
|
2606
2671
|
}
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
_didIteratorError = true;
|
|
2610
|
-
_iteratorError = err;
|
|
2611
|
-
} finally{
|
|
2612
|
-
try {
|
|
2613
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
2614
|
-
_iterator.return();
|
|
2672
|
+
if (target == null) {
|
|
2673
|
+
throw new TypeError("Cannot convert undefined or null to object");
|
|
2615
2674
|
}
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2675
|
+
var to = Object(target);
|
|
2676
|
+
for(var i = 0; i < sources.length; i++){
|
|
2677
|
+
var nextSource = sources[i];
|
|
2678
|
+
if (nextSource != null) {
|
|
2679
|
+
for(var nextKey in nextSource){
|
|
2680
|
+
if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
|
|
2681
|
+
to[nextKey] = nextSource[nextKey];
|
|
2682
|
+
}
|
|
2683
|
+
}
|
|
2684
|
+
}
|
|
2619
2685
|
}
|
|
2620
|
-
|
|
2686
|
+
return to;
|
|
2687
|
+
};
|
|
2621
2688
|
}
|
|
2622
|
-
return void 0;
|
|
2623
2689
|
}
|
|
2624
|
-
function
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
if (value) {
|
|
2631
|
-
return value;
|
|
2632
|
-
}
|
|
2633
|
-
}
|
|
2634
|
-
} catch (err) {
|
|
2635
|
-
_didIteratorError = true;
|
|
2636
|
-
_iteratorError = err;
|
|
2637
|
-
} finally{
|
|
2638
|
-
try {
|
|
2639
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
2640
|
-
_iterator.return();
|
|
2690
|
+
function polyfillArrayFrom() {
|
|
2691
|
+
if (!Array.from) {
|
|
2692
|
+
Array.from = function(arrayLike, mapFn, thisArg) {
|
|
2693
|
+
var items = Object(arrayLike);
|
|
2694
|
+
if (arrayLike == null) {
|
|
2695
|
+
throw new TypeError("Array.from requires an array-like object");
|
|
2641
2696
|
}
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2697
|
+
var len = items.length >>> 0;
|
|
2698
|
+
var result = new Array(len);
|
|
2699
|
+
for(var i = 0; i < len; i++){
|
|
2700
|
+
if (mapFn) {
|
|
2701
|
+
result[i] = mapFn.call(thisArg, items[i], i);
|
|
2702
|
+
} else {
|
|
2703
|
+
result[i] = items[i];
|
|
2704
|
+
}
|
|
2645
2705
|
}
|
|
2646
|
-
|
|
2706
|
+
return result;
|
|
2707
|
+
};
|
|
2647
2708
|
}
|
|
2648
|
-
return void 0;
|
|
2649
2709
|
}
|
|
2650
|
-
function
|
|
2651
|
-
if (
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
var value = (_window_localStorage = window.localStorage) === null || _window_localStorage === void 0 ? void 0 : _window_localStorage.getItem(key);
|
|
2657
|
-
return value || void 0;
|
|
2658
|
-
} catch (unused) {
|
|
2659
|
-
return void 0;
|
|
2710
|
+
function polyfillStringStartsWith() {
|
|
2711
|
+
if (!String.prototype.startsWith) {
|
|
2712
|
+
String.prototype.startsWith = function(search, pos) {
|
|
2713
|
+
pos = !pos || pos < 0 ? 0 : +pos;
|
|
2714
|
+
return this.substring(pos, pos + search.length) === search;
|
|
2715
|
+
};
|
|
2660
2716
|
}
|
|
2661
2717
|
}
|
|
2662
|
-
function
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
return value === 1;
|
|
2718
|
+
function polyfillStringEndsWith() {
|
|
2719
|
+
if (!String.prototype.endsWith) {
|
|
2720
|
+
String.prototype.endsWith = function(search, length) {
|
|
2721
|
+
if (length === void 0 || length > this.length) {
|
|
2722
|
+
length = this.length;
|
|
2723
|
+
}
|
|
2724
|
+
return this.substring(length - search.length, length) === search;
|
|
2725
|
+
};
|
|
2671
2726
|
}
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2727
|
+
}
|
|
2728
|
+
function polyfillStringIncludes() {
|
|
2729
|
+
if (!String.prototype.includes) {
|
|
2730
|
+
String.prototype.includes = function(search, start) {
|
|
2731
|
+
if (typeof start !== "number") {
|
|
2732
|
+
start = 0;
|
|
2733
|
+
}
|
|
2734
|
+
if (start + search.length > this.length) {
|
|
2735
|
+
return false;
|
|
2736
|
+
}
|
|
2737
|
+
return this.indexOf(search, start) !== -1;
|
|
2738
|
+
};
|
|
2680
2739
|
}
|
|
2681
|
-
|
|
2740
|
+
}
|
|
2741
|
+
function initializePolyfills() {
|
|
2742
|
+
polyfillObjectAssign();
|
|
2743
|
+
polyfillArrayFrom();
|
|
2744
|
+
polyfillStringStartsWith();
|
|
2745
|
+
polyfillStringEndsWith();
|
|
2746
|
+
polyfillStringIncludes();
|
|
2747
|
+
polyfillURLSearchParams();
|
|
2748
|
+
polyfillTextEncoder();
|
|
2749
|
+
polyfillPromiseFinally();
|
|
2682
2750
|
}
|
|
2683
2751
|
// src/utils/vastMacros.ts
|
|
2684
2752
|
var UNEXPANDED_MACRO_PATTERN = /^(\[[^\]]*\]|\{[^}]*\}|%%[^%]*%%)$/;
|
|
@@ -4808,7 +4876,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4808
4876
|
key: "initializeTracking",
|
|
4809
4877
|
value: function initializeTracking() {
|
|
4810
4878
|
var _this = this;
|
|
4811
|
-
sendInitialTracking(this.config.licenseKey).then(function() {
|
|
4879
|
+
sendInitialTracking(this.config.licenseKey, buildAnalyticsContext(this.config)).then(function() {
|
|
4812
4880
|
_this.heartbeatInterval = window.setInterval(function() {
|
|
4813
4881
|
_this.sendHeartbeatIfNeeded();
|
|
4814
4882
|
}, 5e3);
|
|
@@ -4829,7 +4897,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4829
4897
|
var now = Date.now();
|
|
4830
4898
|
if (!this.lastHeartbeatTime || now - this.lastHeartbeatTime > 3e4) {
|
|
4831
4899
|
this.lastHeartbeatTime = now;
|
|
4832
|
-
sendHeartbeat(this.config.licenseKey).catch(function(error) {
|
|
4900
|
+
sendHeartbeat(this.config.licenseKey, buildAnalyticsContext(this.config)).catch(function(error) {
|
|
4833
4901
|
if (_this.debug) {
|
|
4834
4902
|
console.warn("[StormcloudVideoPlayer] Failed to send heartbeat:", error);
|
|
4835
4903
|
}
|
|
@@ -6609,6 +6677,12 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
|
|
|
6609
6677
|
return !!this.host.config.debugAdTiming;
|
|
6610
6678
|
}
|
|
6611
6679
|
},
|
|
6680
|
+
{
|
|
6681
|
+
key: "analyticsContext",
|
|
6682
|
+
get: function get() {
|
|
6683
|
+
return buildAnalyticsContext(this.host.config);
|
|
6684
|
+
}
|
|
6685
|
+
},
|
|
6612
6686
|
{
|
|
6613
6687
|
// ───────────────────────────────────────────────────────────────
|
|
6614
6688
|
// IMA event listeners
|
|
@@ -6622,7 +6696,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
|
|
|
6622
6696
|
source: "hls",
|
|
6623
6697
|
adIndex: _this.timing.currentAdIndex,
|
|
6624
6698
|
timestamp: /* @__PURE__ */ new Date().toISOString()
|
|
6625
|
-
}).catch(function() {});
|
|
6699
|
+
}, _this.analyticsContext).catch(function() {});
|
|
6626
6700
|
_this.timing.recordPlayedAdDuration(_this.host.getAdPlayer());
|
|
6627
6701
|
var remaining = _this.timing.getRemainingAdMs();
|
|
6628
6702
|
_this.timing.consecutiveFailures = 0;
|
|
@@ -6684,7 +6758,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
|
|
|
6684
6758
|
source: "hls",
|
|
6685
6759
|
adIndex: _this.timing.currentAdIndex,
|
|
6686
6760
|
timestamp: /* @__PURE__ */ new Date().toISOString()
|
|
6687
|
-
}).catch(function() {});
|
|
6761
|
+
}, _this.analyticsContext).catch(function() {});
|
|
6688
6762
|
if (!_this.host.video.muted) {
|
|
6689
6763
|
_this.host.video.muted = true;
|
|
6690
6764
|
if (_this.debug) {
|
|
@@ -6831,7 +6905,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
|
|
|
6831
6905
|
source: "hls",
|
|
6832
6906
|
vastUrl: firstAdUrl,
|
|
6833
6907
|
timestamp: /* @__PURE__ */ new Date().toISOString()
|
|
6834
|
-
}).catch(function() {});
|
|
6908
|
+
}, this.analyticsContext).catch(function() {});
|
|
6835
6909
|
if (this.debug) {
|
|
6836
6910
|
console.log("[CONTINUOUS-FETCH] Using preloaded ad from pool (preloaded in advance, ready immediately!)");
|
|
6837
6911
|
}
|
|
@@ -6945,7 +7019,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
|
|
|
6945
7019
|
source: "hls",
|
|
6946
7020
|
vastUrl: firstAdUrl,
|
|
6947
7021
|
timestamp: /* @__PURE__ */ new Date().toISOString()
|
|
6948
|
-
}).catch(function() {});
|
|
7022
|
+
}, this.analyticsContext).catch(function() {});
|
|
6949
7023
|
if (this.debug) {
|
|
6950
7024
|
console.log("[CONTINUOUS-FETCH] First ad request successful, starting playback");
|
|
6951
7025
|
}
|
|
@@ -7409,7 +7483,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
|
|
|
7409
7483
|
source: "hls",
|
|
7410
7484
|
vastUrl: preloaded.vastUrl,
|
|
7411
7485
|
timestamp: /* @__PURE__ */ new Date().toISOString()
|
|
7412
|
-
}).catch(function() {});
|
|
7486
|
+
}, this.analyticsContext).catch(function() {});
|
|
7413
7487
|
_state.label = 1;
|
|
7414
7488
|
case 1:
|
|
7415
7489
|
_state.trys.push([
|
|
@@ -7642,7 +7716,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
|
|
|
7642
7716
|
source: "hls",
|
|
7643
7717
|
vastUrl: vastTagUrl,
|
|
7644
7718
|
timestamp: /* @__PURE__ */ new Date().toISOString()
|
|
7645
|
-
}).catch(function() {});
|
|
7719
|
+
}, this.analyticsContext).catch(function() {});
|
|
7646
7720
|
this.timing.clearAdRequestWatchdog();
|
|
7647
7721
|
if (this.timing.activeAdRequestToken !== requestToken) return [
|
|
7648
7722
|
2
|
|
@@ -8434,7 +8508,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
8434
8508
|
sendAdDetectTracking(this.config.licenseKey, _object_spread({
|
|
8435
8509
|
source: "scte35",
|
|
8436
8510
|
timestamp: /* @__PURE__ */ new Date().toISOString()
|
|
8437
|
-
}, detectPayload)).catch(function() {});
|
|
8511
|
+
}, detectPayload), buildAnalyticsContext(this.config)).catch(function() {});
|
|
8438
8512
|
}
|
|
8439
8513
|
var hasPrefetchedAds = this.adBreak.pendingAdBreak && this.adBreak.pendingAdBreak.vastUrls.length > 0;
|
|
8440
8514
|
var durationMs = marker.durationSeconds != null ? marker.durationSeconds * 1e3 : ((_this_adBreak_pendingAdBreak = this.adBreak.pendingAdBreak) === null || _this_adBreak_pendingAdBreak === void 0 ? void 0 : _this_adBreak_pendingAdBreak.marker.durationSeconds) != null ? this.adBreak.pendingAdBreak.marker.durationSeconds * 1e3 : void 0;
|
|
@@ -8607,7 +8681,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
8607
8681
|
sendAdDetectTracking(this.config.licenseKey, _object_spread({
|
|
8608
8682
|
source: "scte35",
|
|
8609
8683
|
timestamp: /* @__PURE__ */ new Date().toISOString()
|
|
8610
|
-
}, detectPayload)).catch(function() {});
|
|
8684
|
+
}, detectPayload), buildAnalyticsContext(this.config)).catch(function() {});
|
|
8611
8685
|
if (this.debug) {
|
|
8612
8686
|
console.log("[PREFETCH] Starting ad prefetch for upcoming ad break");
|
|
8613
8687
|
console.log("[PREFETCH] Pre-generated ".concat(generatedUrls.length, " VAST URLs"));
|