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