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