stormcloud-video-player 0.7.50 → 0.7.52
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 +3 -1
- package/lib/index.cjs +407 -158
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +73 -3
- package/lib/index.d.ts +73 -3
- package/lib/index.js +336 -159
- package/lib/index.js.map +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +246 -156
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.d.cts +3 -1
- package/lib/players/HlsPlayer.cjs +246 -156
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.d.cts +2 -1
- package/lib/players/index.cjs +246 -156
- package/lib/players/index.cjs.map +1 -1
- package/lib/sdk/adstormPlayer.d.cts +2 -1
- package/lib/{types-CIHDHY7A.d.cts → types-Dobqa8vR.d.cts} +8 -1
- package/lib/ui/OverlayRenderer.cjs +2 -3
- package/lib/ui/OverlayRenderer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.cjs +286 -163
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.d.cts +2 -1
- package/lib/utils/mqttClient.cjs +247 -0
- package/lib/utils/mqttClient.cjs.map +1 -0
- package/lib/utils/mqttClient.d.cts +13 -0
- package/lib/utils/mqttConfig.cjs +141 -0
- package/lib/utils/mqttConfig.cjs.map +1 -0
- package/lib/utils/mqttConfig.d.cts +20 -0
- package/lib/utils/tracking.cjs +237 -192
- package/lib/utils/tracking.cjs.map +1 -1
- package/lib/utils/tracking.d.cts +12 -6
- package/package.json +2 -1
package/lib/index.js
CHANGED
|
@@ -1699,6 +1699,126 @@ function createAdStormPlayer(contentVideo, options) {
|
|
|
1699
1699
|
}
|
|
1700
1700
|
};
|
|
1701
1701
|
}
|
|
1702
|
+
// src/utils/mqttClient.ts
|
|
1703
|
+
import mqtt from "mqtt";
|
|
1704
|
+
// src/utils/mqttConfig.ts
|
|
1705
|
+
var MQTT_CA_CERT_FILE = "src/certs/emqxsl-ca.crt";
|
|
1706
|
+
var DEFAULT_MQTT_CONFIG = {
|
|
1707
|
+
enabled: true,
|
|
1708
|
+
brokerAddress: "vecbae77.ala.us-east-1.emqxsl.com",
|
|
1709
|
+
brokerPort: 8883,
|
|
1710
|
+
wsPort: 8084,
|
|
1711
|
+
username: "for-sonifi",
|
|
1712
|
+
password: "sonifi-mqtt",
|
|
1713
|
+
topicPrefix: "adstorm/players",
|
|
1714
|
+
qos: 1
|
|
1715
|
+
};
|
|
1716
|
+
var mqttConfig = _object_spread({}, DEFAULT_MQTT_CONFIG);
|
|
1717
|
+
function applyMQTTConfig(overrides) {
|
|
1718
|
+
Object.assign(mqttConfig, overrides);
|
|
1719
|
+
}
|
|
1720
|
+
function isMQTTEnabled() {
|
|
1721
|
+
return mqttConfig.enabled;
|
|
1722
|
+
}
|
|
1723
|
+
function buildMQTTBrokerUrl() {
|
|
1724
|
+
if (mqttConfig.brokerUrl) return mqttConfig.brokerUrl;
|
|
1725
|
+
return "wss://".concat(mqttConfig.brokerAddress, ":").concat(mqttConfig.wsPort, "/mqtt");
|
|
1726
|
+
}
|
|
1727
|
+
function buildPlayerTopic(licenseKey, channel) {
|
|
1728
|
+
return "".concat(mqttConfig.topicPrefix, "/").concat(licenseKey, "/").concat(channel);
|
|
1729
|
+
}
|
|
1730
|
+
// src/utils/mqttClient.ts
|
|
1731
|
+
var LOG = "[StormcloudVideoPlayer][MQTT]";
|
|
1732
|
+
var client = null;
|
|
1733
|
+
var status = "disconnected";
|
|
1734
|
+
function getMQTTStatus() {
|
|
1735
|
+
return status;
|
|
1736
|
+
}
|
|
1737
|
+
function isMQTTConnected() {
|
|
1738
|
+
return status === "connected" && client !== null && client.connected;
|
|
1739
|
+
}
|
|
1740
|
+
function isMQTTConfigured() {
|
|
1741
|
+
return isMQTTEnabled();
|
|
1742
|
+
}
|
|
1743
|
+
function configureMQTT(overrides) {
|
|
1744
|
+
applyMQTTConfig(overrides);
|
|
1745
|
+
disconnectMQTT();
|
|
1746
|
+
}
|
|
1747
|
+
function initMQTTClient() {
|
|
1748
|
+
if (client || !isMQTTEnabled()) return;
|
|
1749
|
+
var url = buildMQTTBrokerUrl();
|
|
1750
|
+
status = "connecting";
|
|
1751
|
+
var clientId = "stormcloud-vp-".concat(Math.random().toString(36).slice(2, 9));
|
|
1752
|
+
try {
|
|
1753
|
+
client = mqtt.connect(url, {
|
|
1754
|
+
clientId: clientId,
|
|
1755
|
+
username: mqttConfig.username,
|
|
1756
|
+
password: mqttConfig.password,
|
|
1757
|
+
keepalive: 60,
|
|
1758
|
+
clean: true,
|
|
1759
|
+
reconnectPeriod: 5e3,
|
|
1760
|
+
connectTimeout: 1e4,
|
|
1761
|
+
queueQoSZero: false
|
|
1762
|
+
});
|
|
1763
|
+
} catch (err) {
|
|
1764
|
+
status = "error";
|
|
1765
|
+
console.warn("".concat(LOG, " connect() threw:"), err);
|
|
1766
|
+
return;
|
|
1767
|
+
}
|
|
1768
|
+
client.on("connect", function() {
|
|
1769
|
+
status = "connected";
|
|
1770
|
+
console.info("".concat(LOG, " connected to ").concat(url));
|
|
1771
|
+
});
|
|
1772
|
+
client.on("reconnect", function() {
|
|
1773
|
+
status = "connecting";
|
|
1774
|
+
console.info("".concat(LOG, " reconnecting..."));
|
|
1775
|
+
});
|
|
1776
|
+
client.on("offline", function() {
|
|
1777
|
+
if (status !== "error") {
|
|
1778
|
+
status = "disconnected";
|
|
1779
|
+
}
|
|
1780
|
+
console.warn("".concat(LOG, " offline"));
|
|
1781
|
+
});
|
|
1782
|
+
client.on("error", function(err) {
|
|
1783
|
+
status = "error";
|
|
1784
|
+
console.warn("".concat(LOG, " error:"), err.message);
|
|
1785
|
+
});
|
|
1786
|
+
client.on("close", function() {
|
|
1787
|
+
if (status === "connected" || status === "connecting") {
|
|
1788
|
+
status = "disconnected";
|
|
1789
|
+
}
|
|
1790
|
+
});
|
|
1791
|
+
}
|
|
1792
|
+
function ensureMQTTClient() {
|
|
1793
|
+
if (isMQTTEnabled() && !client) {
|
|
1794
|
+
initMQTTClient();
|
|
1795
|
+
}
|
|
1796
|
+
}
|
|
1797
|
+
function publishMQTT(topic, payload) {
|
|
1798
|
+
if (!isMQTTEnabled()) {
|
|
1799
|
+
return false;
|
|
1800
|
+
}
|
|
1801
|
+
ensureMQTTClient();
|
|
1802
|
+
if (!client) {
|
|
1803
|
+
return false;
|
|
1804
|
+
}
|
|
1805
|
+
try {
|
|
1806
|
+
client.publish(topic, JSON.stringify(payload), {
|
|
1807
|
+
qos: mqttConfig.qos
|
|
1808
|
+
});
|
|
1809
|
+
return true;
|
|
1810
|
+
} catch (err) {
|
|
1811
|
+
console.warn("".concat(LOG, " publish failed on ").concat(topic, ":"), err);
|
|
1812
|
+
return false;
|
|
1813
|
+
}
|
|
1814
|
+
}
|
|
1815
|
+
function disconnectMQTT() {
|
|
1816
|
+
if (client) {
|
|
1817
|
+
client.end(true);
|
|
1818
|
+
client = null;
|
|
1819
|
+
status = "disconnected";
|
|
1820
|
+
}
|
|
1821
|
+
}
|
|
1702
1822
|
// src/utils/tracking.ts
|
|
1703
1823
|
var cachedBrowserId = null;
|
|
1704
1824
|
function getClientInfo() {
|
|
@@ -1929,139 +2049,164 @@ function getBrowserID(clientInfo) {
|
|
|
1929
2049
|
});
|
|
1930
2050
|
})();
|
|
1931
2051
|
}
|
|
1932
|
-
|
|
1933
|
-
|
|
2052
|
+
function canPublish(licenseKey) {
|
|
2053
|
+
return Boolean(isMQTTEnabled() && licenseKey);
|
|
2054
|
+
}
|
|
2055
|
+
function buildPlayerMetricEvent() {
|
|
1934
2056
|
return _async_to_generator(function() {
|
|
1935
|
-
var
|
|
2057
|
+
var context, flags, _flags_captureAt, _flags_adLoaded, _flags_adDetect, clientInfo, playerId, captureAt;
|
|
2058
|
+
var _arguments = arguments;
|
|
1936
2059
|
return _ts_generator(this, function(_state) {
|
|
1937
2060
|
switch(_state.label){
|
|
1938
2061
|
case 0:
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
};
|
|
1942
|
-
if (licenseKey) {
|
|
1943
|
-
headers["Authorization"] = "Bearer ".concat(licenseKey);
|
|
1944
|
-
}
|
|
2062
|
+
context = _arguments.length > 0 && _arguments[0] !== void 0 ? _arguments[0] : {}, flags = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
|
2063
|
+
clientInfo = getClientInfo();
|
|
1945
2064
|
return [
|
|
1946
2065
|
4,
|
|
1947
|
-
|
|
1948
|
-
method: "POST",
|
|
1949
|
-
headers: headers,
|
|
1950
|
-
body: JSON.stringify(body)
|
|
1951
|
-
})
|
|
2066
|
+
getBrowserID(clientInfo)
|
|
1952
2067
|
];
|
|
1953
2068
|
case 1:
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
2069
|
+
playerId = _state.sent();
|
|
2070
|
+
captureAt = (_flags_captureAt = flags.captureAt) !== null && _flags_captureAt !== void 0 ? _flags_captureAt : /* @__PURE__ */ new Date().toISOString();
|
|
2071
|
+
return [
|
|
2072
|
+
2,
|
|
2073
|
+
_object_spread({
|
|
2074
|
+
player_id: playerId,
|
|
2075
|
+
device_type: clientInfo.deviceType,
|
|
2076
|
+
os: clientInfo.os.toLowerCase(),
|
|
2077
|
+
ad_loaded: (_flags_adLoaded = flags.adLoaded) !== null && _flags_adLoaded !== void 0 ? _flags_adLoaded : false,
|
|
2078
|
+
ad_detect: (_flags_adDetect = flags.adDetect) !== null && _flags_adDetect !== void 0 ? _flags_adDetect : false,
|
|
2079
|
+
capture_at: captureAt
|
|
2080
|
+
}, context.inputStreamType ? {
|
|
2081
|
+
input_stream_type: context.inputStreamType
|
|
2082
|
+
} : {})
|
|
2083
|
+
];
|
|
2084
|
+
}
|
|
2085
|
+
});
|
|
2086
|
+
}).apply(this, arguments);
|
|
2087
|
+
}
|
|
2088
|
+
function publishTracking(licenseKey, channel, body) {
|
|
2089
|
+
ensureMQTTClient();
|
|
2090
|
+
publishMQTT(buildPlayerTopic(licenseKey, channel), body);
|
|
2091
|
+
}
|
|
2092
|
+
function sendInitialTracking(_0) {
|
|
2093
|
+
return _async_to_generator(function(licenseKey) {
|
|
2094
|
+
var context, metricEvent, error;
|
|
2095
|
+
var _arguments = arguments;
|
|
2096
|
+
return _ts_generator(this, function(_state) {
|
|
2097
|
+
switch(_state.label){
|
|
2098
|
+
case 0:
|
|
2099
|
+
context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
|
2100
|
+
if (!canPublish(licenseKey)) return [
|
|
2101
|
+
2
|
|
2102
|
+
];
|
|
2103
|
+
_state.label = 1;
|
|
2104
|
+
case 1:
|
|
2105
|
+
_state.trys.push([
|
|
2106
|
+
1,
|
|
2107
|
+
3,
|
|
2108
|
+
,
|
|
2109
|
+
4
|
|
2110
|
+
]);
|
|
1958
2111
|
return [
|
|
1959
2112
|
4,
|
|
1960
|
-
|
|
2113
|
+
buildPlayerMetricEvent(context, {
|
|
2114
|
+
adLoaded: false,
|
|
2115
|
+
adDetect: false
|
|
2116
|
+
})
|
|
1961
2117
|
];
|
|
1962
2118
|
case 2:
|
|
1963
|
-
_state.sent();
|
|
2119
|
+
metricEvent = _state.sent();
|
|
2120
|
+
publishTracking(licenseKey, "metrics", {
|
|
2121
|
+
events: [
|
|
2122
|
+
metricEvent
|
|
2123
|
+
]
|
|
2124
|
+
});
|
|
2125
|
+
return [
|
|
2126
|
+
3,
|
|
2127
|
+
4
|
|
2128
|
+
];
|
|
2129
|
+
case 3:
|
|
2130
|
+
error = _state.sent();
|
|
2131
|
+
console.error("[StormcloudVideoPlayer] Error sending initial tracking data:", error);
|
|
2132
|
+
return [
|
|
2133
|
+
3,
|
|
2134
|
+
4
|
|
2135
|
+
];
|
|
2136
|
+
case 4:
|
|
1964
2137
|
return [
|
|
1965
2138
|
2
|
|
1966
2139
|
];
|
|
1967
2140
|
}
|
|
1968
2141
|
});
|
|
1969
|
-
})();
|
|
2142
|
+
}).apply(this, arguments);
|
|
1970
2143
|
}
|
|
1971
|
-
function
|
|
1972
|
-
return _async_to_generator(function() {
|
|
1973
|
-
var
|
|
2144
|
+
function sendAdDetectTracking(_0, _1) {
|
|
2145
|
+
return _async_to_generator(function(licenseKey, adDetectInfo) {
|
|
2146
|
+
var context, error;
|
|
2147
|
+
var _arguments = arguments;
|
|
1974
2148
|
return _ts_generator(this, function(_state) {
|
|
1975
2149
|
switch(_state.label){
|
|
1976
2150
|
case 0:
|
|
2151
|
+
context = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
2152
|
+
_state.label = 1;
|
|
2153
|
+
case 1:
|
|
1977
2154
|
_state.trys.push([
|
|
1978
|
-
|
|
1979
|
-
|
|
2155
|
+
1,
|
|
2156
|
+
3,
|
|
1980
2157
|
,
|
|
1981
|
-
|
|
2158
|
+
4
|
|
1982
2159
|
]);
|
|
1983
|
-
clientInfo = getClientInfo();
|
|
1984
2160
|
return [
|
|
1985
2161
|
4,
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
browserId = _state.sent();
|
|
1990
|
-
trackingData = _object_spread({
|
|
1991
|
-
browserId: browserId
|
|
1992
|
-
}, clientInfo);
|
|
1993
|
-
headers = {
|
|
1994
|
-
"Content-Type": "application/json"
|
|
1995
|
-
};
|
|
1996
|
-
if (licenseKey) {
|
|
1997
|
-
headers["Authorization"] = "Bearer ".concat(licenseKey);
|
|
1998
|
-
}
|
|
1999
|
-
return [
|
|
2000
|
-
4,
|
|
2001
|
-
fetch(TRACK_URL, {
|
|
2002
|
-
method: "POST",
|
|
2003
|
-
headers: headers,
|
|
2004
|
-
body: JSON.stringify(trackingData)
|
|
2162
|
+
sendHeartbeat(licenseKey, context, {
|
|
2163
|
+
adDetect: true,
|
|
2164
|
+
captureAt: adDetectInfo.timestamp
|
|
2005
2165
|
})
|
|
2006
2166
|
];
|
|
2007
2167
|
case 2:
|
|
2008
|
-
response = _state.sent();
|
|
2009
|
-
if (!response.ok) {
|
|
2010
|
-
throw new Error("HTTP error! status: ".concat(response.status));
|
|
2011
|
-
}
|
|
2012
|
-
return [
|
|
2013
|
-
4,
|
|
2014
|
-
response.json()
|
|
2015
|
-
];
|
|
2016
|
-
case 3:
|
|
2017
2168
|
_state.sent();
|
|
2018
2169
|
return [
|
|
2019
2170
|
3,
|
|
2020
|
-
|
|
2171
|
+
4
|
|
2021
2172
|
];
|
|
2022
|
-
case
|
|
2173
|
+
case 3:
|
|
2023
2174
|
error = _state.sent();
|
|
2024
|
-
console.error("[StormcloudVideoPlayer] Error sending
|
|
2175
|
+
console.error("[StormcloudVideoPlayer] Error sending ad detect tracking:", error);
|
|
2025
2176
|
return [
|
|
2026
2177
|
3,
|
|
2027
|
-
|
|
2178
|
+
4
|
|
2028
2179
|
];
|
|
2029
|
-
case
|
|
2180
|
+
case 4:
|
|
2030
2181
|
return [
|
|
2031
2182
|
2
|
|
2032
2183
|
];
|
|
2033
2184
|
}
|
|
2034
2185
|
});
|
|
2035
|
-
})();
|
|
2186
|
+
}).apply(this, arguments);
|
|
2036
2187
|
}
|
|
2037
|
-
function sendAdLoadedTracking(
|
|
2038
|
-
return _async_to_generator(function() {
|
|
2039
|
-
var
|
|
2188
|
+
function sendAdLoadedTracking(_0, _1) {
|
|
2189
|
+
return _async_to_generator(function(licenseKey, adLoadedInfo) {
|
|
2190
|
+
var context, error;
|
|
2191
|
+
var _arguments = arguments;
|
|
2040
2192
|
return _ts_generator(this, function(_state) {
|
|
2041
2193
|
switch(_state.label){
|
|
2042
2194
|
case 0:
|
|
2195
|
+
context = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
2196
|
+
_state.label = 1;
|
|
2197
|
+
case 1:
|
|
2043
2198
|
_state.trys.push([
|
|
2044
|
-
|
|
2199
|
+
1,
|
|
2045
2200
|
3,
|
|
2046
2201
|
,
|
|
2047
2202
|
4
|
|
2048
2203
|
]);
|
|
2049
|
-
clientInfo = getClientInfo();
|
|
2050
2204
|
return [
|
|
2051
2205
|
4,
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
trackingData = _object_spread({
|
|
2057
|
-
browserId: browserId
|
|
2058
|
-
}, clientInfo);
|
|
2059
|
-
return [
|
|
2060
|
-
4,
|
|
2061
|
-
sendTrackRequest(licenseKey, _object_spread_props(_object_spread({}, trackingData), {
|
|
2062
|
-
licenseKey: licenseKey,
|
|
2063
|
-
adLoadedInfo: adLoadedInfo
|
|
2064
|
-
}))
|
|
2206
|
+
sendHeartbeat(licenseKey, context, {
|
|
2207
|
+
adLoaded: true,
|
|
2208
|
+
captureAt: adLoadedInfo.timestamp
|
|
2209
|
+
})
|
|
2065
2210
|
];
|
|
2066
2211
|
case 2:
|
|
2067
2212
|
_state.sent();
|
|
@@ -2082,39 +2227,46 @@ function sendAdLoadedTracking(licenseKey, adLoadedInfo) {
|
|
|
2082
2227
|
];
|
|
2083
2228
|
}
|
|
2084
2229
|
});
|
|
2085
|
-
})();
|
|
2230
|
+
}).apply(this, arguments);
|
|
2086
2231
|
}
|
|
2087
|
-
function sendAdImpressionTracking(
|
|
2088
|
-
return _async_to_generator(function() {
|
|
2089
|
-
var
|
|
2232
|
+
function sendAdImpressionTracking(_0, _1) {
|
|
2233
|
+
return _async_to_generator(function(licenseKey, adImpressionInfo) {
|
|
2234
|
+
var context, metricEvent, error;
|
|
2235
|
+
var _arguments = arguments;
|
|
2090
2236
|
return _ts_generator(this, function(_state) {
|
|
2091
2237
|
switch(_state.label){
|
|
2092
2238
|
case 0:
|
|
2239
|
+
context = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
2240
|
+
if (!canPublish(licenseKey)) return [
|
|
2241
|
+
2
|
|
2242
|
+
];
|
|
2243
|
+
_state.label = 1;
|
|
2244
|
+
case 1:
|
|
2093
2245
|
_state.trys.push([
|
|
2094
|
-
|
|
2246
|
+
1,
|
|
2095
2247
|
3,
|
|
2096
2248
|
,
|
|
2097
2249
|
4
|
|
2098
2250
|
]);
|
|
2099
|
-
clientInfo = getClientInfo();
|
|
2100
2251
|
return [
|
|
2101
2252
|
4,
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
browserId = _state.sent();
|
|
2106
|
-
trackingData = _object_spread({
|
|
2107
|
-
browserId: browserId
|
|
2108
|
-
}, clientInfo);
|
|
2109
|
-
return [
|
|
2110
|
-
4,
|
|
2111
|
-
sendTrackRequest(licenseKey, _object_spread_props(_object_spread({}, trackingData), {
|
|
2112
|
-
licenseKey: licenseKey,
|
|
2113
|
-
adImpressionInfo: adImpressionInfo
|
|
2114
|
-
}))
|
|
2253
|
+
buildPlayerMetricEvent(context, {
|
|
2254
|
+
captureAt: adImpressionInfo.timestamp
|
|
2255
|
+
})
|
|
2115
2256
|
];
|
|
2116
2257
|
case 2:
|
|
2117
|
-
_state.sent();
|
|
2258
|
+
metricEvent = _state.sent();
|
|
2259
|
+
publishTracking(licenseKey, "heartbeat", metricEvent);
|
|
2260
|
+
publishTracking(licenseKey, "impressions", {
|
|
2261
|
+
events: [
|
|
2262
|
+
{
|
|
2263
|
+
player_id: metricEvent.player_id,
|
|
2264
|
+
ad_played_count: 1,
|
|
2265
|
+
ad_url: adImpressionInfo.adUrl,
|
|
2266
|
+
capture_at: adImpressionInfo.timestamp
|
|
2267
|
+
}
|
|
2268
|
+
]
|
|
2269
|
+
});
|
|
2118
2270
|
return [
|
|
2119
2271
|
3,
|
|
2120
2272
|
4
|
|
@@ -2132,74 +2284,52 @@ function sendAdImpressionTracking(licenseKey, adImpressionInfo) {
|
|
|
2132
2284
|
];
|
|
2133
2285
|
}
|
|
2134
2286
|
});
|
|
2135
|
-
})();
|
|
2287
|
+
}).apply(this, arguments);
|
|
2136
2288
|
}
|
|
2137
|
-
function sendHeartbeat(
|
|
2138
|
-
return _async_to_generator(function() {
|
|
2139
|
-
var
|
|
2289
|
+
function sendHeartbeat(_0) {
|
|
2290
|
+
return _async_to_generator(function(licenseKey) {
|
|
2291
|
+
var context, flags, heartbeatData, error;
|
|
2292
|
+
var _arguments = arguments;
|
|
2140
2293
|
return _ts_generator(this, function(_state) {
|
|
2141
2294
|
switch(_state.label){
|
|
2142
2295
|
case 0:
|
|
2296
|
+
context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {}, flags = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
2297
|
+
if (!canPublish(licenseKey)) return [
|
|
2298
|
+
2
|
|
2299
|
+
];
|
|
2300
|
+
_state.label = 1;
|
|
2301
|
+
case 1:
|
|
2143
2302
|
_state.trys.push([
|
|
2144
|
-
|
|
2145
|
-
|
|
2303
|
+
1,
|
|
2304
|
+
3,
|
|
2146
2305
|
,
|
|
2147
|
-
|
|
2306
|
+
4
|
|
2148
2307
|
]);
|
|
2149
|
-
clientInfo = getClientInfo();
|
|
2150
2308
|
return [
|
|
2151
2309
|
4,
|
|
2152
|
-
|
|
2153
|
-
];
|
|
2154
|
-
case 1:
|
|
2155
|
-
browserId = _state.sent();
|
|
2156
|
-
heartbeatData = {
|
|
2157
|
-
browserId: browserId,
|
|
2158
|
-
timestamp: /* @__PURE__ */ new Date().toISOString()
|
|
2159
|
-
};
|
|
2160
|
-
headers = {
|
|
2161
|
-
"Content-Type": "application/json"
|
|
2162
|
-
};
|
|
2163
|
-
if (licenseKey) {
|
|
2164
|
-
headers["Authorization"] = "Bearer ".concat(licenseKey);
|
|
2165
|
-
}
|
|
2166
|
-
return [
|
|
2167
|
-
4,
|
|
2168
|
-
fetch("https://adstorm.co/api-adstorm-dev/adstorm/player-tracking/heartbeat", {
|
|
2169
|
-
method: "POST",
|
|
2170
|
-
headers: headers,
|
|
2171
|
-
body: JSON.stringify(heartbeatData)
|
|
2172
|
-
})
|
|
2310
|
+
buildPlayerMetricEvent(context, flags)
|
|
2173
2311
|
];
|
|
2174
2312
|
case 2:
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
throw new Error("HTTP error! status: ".concat(response.status));
|
|
2178
|
-
}
|
|
2179
|
-
return [
|
|
2180
|
-
4,
|
|
2181
|
-
response.json()
|
|
2182
|
-
];
|
|
2183
|
-
case 3:
|
|
2184
|
-
_state.sent();
|
|
2313
|
+
heartbeatData = _state.sent();
|
|
2314
|
+
publishTracking(licenseKey, "heartbeat", heartbeatData);
|
|
2185
2315
|
return [
|
|
2186
2316
|
3,
|
|
2187
|
-
|
|
2317
|
+
4
|
|
2188
2318
|
];
|
|
2189
|
-
case
|
|
2319
|
+
case 3:
|
|
2190
2320
|
error = _state.sent();
|
|
2191
2321
|
console.error("[StormcloudVideoPlayer] Error sending heartbeat:", error);
|
|
2192
2322
|
return [
|
|
2193
2323
|
3,
|
|
2194
|
-
|
|
2324
|
+
4
|
|
2195
2325
|
];
|
|
2196
|
-
case
|
|
2326
|
+
case 4:
|
|
2197
2327
|
return [
|
|
2198
2328
|
2
|
|
2199
2329
|
];
|
|
2200
2330
|
}
|
|
2201
2331
|
});
|
|
2202
|
-
})();
|
|
2332
|
+
}).apply(this, arguments);
|
|
2203
2333
|
}
|
|
2204
2334
|
// src/utils/polyfills.ts
|
|
2205
2335
|
function polyfillURLSearchParams() {
|
|
@@ -2789,6 +2919,9 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
2789
2919
|
this.config = _object_spread({}, browserOverrides, config);
|
|
2790
2920
|
this.video = config.videoElement;
|
|
2791
2921
|
this.adTransitionGapMs = (_this_config_adTransitionGapMs = this.config.adTransitionGapMs) !== null && _this_config_adTransitionGapMs !== void 0 ? _this_config_adTransitionGapMs : 100;
|
|
2922
|
+
if (this.config.mqttConfig) {
|
|
2923
|
+
configureMQTT(this.config.mqttConfig);
|
|
2924
|
+
}
|
|
2792
2925
|
logBrowserInfo(config.debugAdTiming);
|
|
2793
2926
|
var browserForAdLayer = detectBrowser();
|
|
2794
2927
|
var isSinglePipeline = browserForAdLayer.isSmartTV || !!this.config.singlePipelineMode;
|
|
@@ -3156,7 +3289,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
3156
3289
|
source: _this.getAdSource(),
|
|
3157
3290
|
adIndex: _this.currentAdIndex,
|
|
3158
3291
|
timestamp: /* @__PURE__ */ new Date().toISOString()
|
|
3159
|
-
});
|
|
3292
|
+
}, _this.getPlayerAnalyticsContext());
|
|
3160
3293
|
}
|
|
3161
3294
|
});
|
|
3162
3295
|
this.adLayer.on("ad_error", function(errorPayload) {
|
|
@@ -3461,7 +3594,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
3461
3594
|
key: "initializeTracking",
|
|
3462
3595
|
value: function initializeTracking() {
|
|
3463
3596
|
var _this = this;
|
|
3464
|
-
sendInitialTracking(this.config.licenseKey).then(function() {
|
|
3597
|
+
sendInitialTracking(this.config.licenseKey, this.getPlayerAnalyticsContext()).then(function() {
|
|
3465
3598
|
_this.heartbeatInterval = window.setInterval(function() {
|
|
3466
3599
|
_this.sendHeartbeatIfNeeded();
|
|
3467
3600
|
}, 5e3);
|
|
@@ -3482,7 +3615,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
3482
3615
|
var now = Date.now();
|
|
3483
3616
|
if (!this.lastHeartbeatTime || now - this.lastHeartbeatTime > 3e4) {
|
|
3484
3617
|
this.lastHeartbeatTime = now;
|
|
3485
|
-
sendHeartbeat(this.config.licenseKey).catch(function(error) {
|
|
3618
|
+
sendHeartbeat(this.config.licenseKey, this.getPlayerAnalyticsContext()).catch(function(error) {
|
|
3486
3619
|
if (_this.config.debugAdTiming) {
|
|
3487
3620
|
console.warn("[StormcloudVideoPlayer] Failed to send heartbeat:", error);
|
|
3488
3621
|
}
|
|
@@ -3576,6 +3709,14 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
3576
3709
|
return "other";
|
|
3577
3710
|
}
|
|
3578
3711
|
},
|
|
3712
|
+
{
|
|
3713
|
+
key: "getPlayerAnalyticsContext",
|
|
3714
|
+
value: function getPlayerAnalyticsContext() {
|
|
3715
|
+
return {
|
|
3716
|
+
inputStreamType: this.getStreamType()
|
|
3717
|
+
};
|
|
3718
|
+
}
|
|
3719
|
+
},
|
|
3579
3720
|
{
|
|
3580
3721
|
key: "shouldShowNativeControls",
|
|
3581
3722
|
value: function shouldShowNativeControls() {
|
|
@@ -4230,7 +4371,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4230
4371
|
sendAdLoadedTracking(_this.config.licenseKey, {
|
|
4231
4372
|
source: _this.getAdSource(),
|
|
4232
4373
|
timestamp: /* @__PURE__ */ new Date().toISOString()
|
|
4233
|
-
});
|
|
4374
|
+
}, _this.getPlayerAnalyticsContext());
|
|
4234
4375
|
}
|
|
4235
4376
|
return [
|
|
4236
4377
|
4,
|
|
@@ -4340,7 +4481,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4340
4481
|
sendAdLoadedTracking(_this.config.licenseKey, {
|
|
4341
4482
|
source: _this.getAdSource(),
|
|
4342
4483
|
timestamp: /* @__PURE__ */ new Date().toISOString()
|
|
4343
|
-
});
|
|
4484
|
+
}, _this.getPlayerAnalyticsContext());
|
|
4344
4485
|
}
|
|
4345
4486
|
return [
|
|
4346
4487
|
4,
|
|
@@ -4507,7 +4648,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4507
4648
|
sendAdLoadedTracking(this.config.licenseKey, {
|
|
4508
4649
|
source: this.getAdSource(),
|
|
4509
4650
|
timestamp: /* @__PURE__ */ new Date().toISOString()
|
|
4510
|
-
});
|
|
4651
|
+
}, this.getPlayerAnalyticsContext());
|
|
4511
4652
|
}
|
|
4512
4653
|
_state.label = 1;
|
|
4513
4654
|
case 1:
|
|
@@ -4706,7 +4847,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4706
4847
|
sendAdLoadedTracking(this.config.licenseKey, {
|
|
4707
4848
|
source: this.getAdSource(),
|
|
4708
4849
|
timestamp: /* @__PURE__ */ new Date().toISOString()
|
|
4709
|
-
});
|
|
4850
|
+
}, this.getPlayerAnalyticsContext());
|
|
4710
4851
|
}
|
|
4711
4852
|
return [
|
|
4712
4853
|
4,
|
|
@@ -5651,6 +5792,9 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5651
5792
|
clearInterval(this.heartbeatInterval);
|
|
5652
5793
|
this.heartbeatInterval = void 0;
|
|
5653
5794
|
}
|
|
5795
|
+
if (isMQTTEnabled()) {
|
|
5796
|
+
disconnectMQTT();
|
|
5797
|
+
}
|
|
5654
5798
|
(_this_hls = this.hls) === null || _this_hls === void 0 ? void 0 : _this_hls.destroy();
|
|
5655
5799
|
(_this_adLayer = this.adLayer) === null || _this_adLayer === void 0 ? void 0 : _this_adLayer.destroy();
|
|
5656
5800
|
this.consecutiveFailures = 0;
|
|
@@ -5900,7 +6044,7 @@ function cachedFetchRSSItems(rssUrl, maxItems) {
|
|
|
5900
6044
|
}
|
|
5901
6045
|
function fetchRSSItems(rssUrl, maxItems) {
|
|
5902
6046
|
return _async_to_generator(function() {
|
|
5903
|
-
var encoded,
|
|
6047
|
+
var encoded, resp, text, unused, resp1, data, unused1, resp2, text1, unused2;
|
|
5904
6048
|
return _ts_generator(this, function(_state) {
|
|
5905
6049
|
switch(_state.label){
|
|
5906
6050
|
case 0:
|
|
@@ -5913,10 +6057,9 @@ function fetchRSSItems(rssUrl, maxItems) {
|
|
|
5913
6057
|
,
|
|
5914
6058
|
6
|
|
5915
6059
|
]);
|
|
5916
|
-
origin = typeof window !== "undefined" ? window.location.origin : "";
|
|
5917
6060
|
return [
|
|
5918
6061
|
4,
|
|
5919
|
-
fetch("
|
|
6062
|
+
fetch("https://adstorm.co/api/rss-proxy?url=".concat(encoded))
|
|
5920
6063
|
];
|
|
5921
6064
|
case 2:
|
|
5922
6065
|
resp = _state.sent();
|
|
@@ -7849,7 +7992,18 @@ var CRITICAL_PROPS = [
|
|
|
7849
7992
|
"licenseKey",
|
|
7850
7993
|
"lowLatencyMode",
|
|
7851
7994
|
"driftToleranceMs",
|
|
7852
|
-
"
|
|
7995
|
+
"immediateManifestAds",
|
|
7996
|
+
"debugAdTiming",
|
|
7997
|
+
"showCustomControls",
|
|
7998
|
+
"adFailsafeTimeoutMs",
|
|
7999
|
+
"minSegmentsBeforePlay",
|
|
8000
|
+
"disableAds",
|
|
8001
|
+
"disableFiller",
|
|
8002
|
+
"singlePipelineMode",
|
|
8003
|
+
"mqttConfig",
|
|
8004
|
+
"adBreakCheckIntervalMs",
|
|
8005
|
+
"maxAdBreakExtensionMs",
|
|
8006
|
+
"adTransitionGapMs"
|
|
7853
8007
|
];
|
|
7854
8008
|
var CONTROLS_HIDE_DELAY = 3e3;
|
|
7855
8009
|
var DEFAULT_PLAYER_ASPECT_RATIO = 16 / 9;
|
|
@@ -7860,7 +8014,7 @@ var PANEL_BASE_RIGHT_OFFSET = 10;
|
|
|
7860
8014
|
var StormcloudVideoPlayerComponent = React2.memo(function(props) {
|
|
7861
8015
|
var _ref;
|
|
7862
8016
|
var _aiLiveContext_context;
|
|
7863
|
-
var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, driftToleranceMs = props.driftToleranceMs, immediateManifestAds = props.immediateManifestAds, debugAdTiming = props.debugAdTiming, showCustomControls = props.showCustomControls, hideLoadingIndicator = props.hideLoadingIndicator, onVolumeToggle = props.onVolumeToggle, onFullscreenToggle = props.onFullscreenToggle, onControlClick = props.onControlClick, onReady = props.onReady, wrapperClassName = props.wrapperClassName, wrapperStyle = props.wrapperStyle, className = props.className, style = props.style, controls = props.controls, playsInline = props.playsInline, preload = props.preload, poster = props.poster, children = props.children, licenseKey = props.licenseKey, minSegmentsBeforePlay = props.minSegmentsBeforePlay, disableAds = props.disableAds, disableFiller = props.disableFiller, swirlProjectId = props.swirlProjectId, swirlShowcaseDemo = props.swirlShowcaseDemo, swirlOverlayApiBaseUrl = props.swirlOverlayApiBaseUrl, swirlOverlayCoordinateSpace = props.swirlOverlayCoordinateSpace, adcisionChannelId = props.adcisionChannelId, disableOverlays = props.disableOverlays, showAdsControl = props.showAdsControl, showOverlaysControl = props.showOverlaysControl, showAiContextControl = props.showAiContextControl, showDebugControl = props.showDebugControl, restVideoAttrs = _object_without_properties(props, [
|
|
8017
|
+
var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, driftToleranceMs = props.driftToleranceMs, immediateManifestAds = props.immediateManifestAds, debugAdTiming = props.debugAdTiming, showCustomControls = props.showCustomControls, hideLoadingIndicator = props.hideLoadingIndicator, onVolumeToggle = props.onVolumeToggle, onFullscreenToggle = props.onFullscreenToggle, onControlClick = props.onControlClick, onReady = props.onReady, wrapperClassName = props.wrapperClassName, wrapperStyle = props.wrapperStyle, className = props.className, style = props.style, controls = props.controls, playsInline = props.playsInline, preload = props.preload, poster = props.poster, children = props.children, licenseKey = props.licenseKey, adFailsafeTimeoutMs = props.adFailsafeTimeoutMs, minSegmentsBeforePlay = props.minSegmentsBeforePlay, disableAds = props.disableAds, disableFiller = props.disableFiller, singlePipelineMode = props.singlePipelineMode, mqttConfig2 = props.mqttConfig, adBreakCheckIntervalMs = props.adBreakCheckIntervalMs, maxAdBreakExtensionMs = props.maxAdBreakExtensionMs, adTransitionGapMs = props.adTransitionGapMs, swirlProjectId = props.swirlProjectId, swirlShowcaseDemo = props.swirlShowcaseDemo, swirlOverlayApiBaseUrl = props.swirlOverlayApiBaseUrl, swirlOverlayCoordinateSpace = props.swirlOverlayCoordinateSpace, adcisionChannelId = props.adcisionChannelId, disableOverlays = props.disableOverlays, showAdsControl = props.showAdsControl, showOverlaysControl = props.showOverlaysControl, showAiContextControl = props.showAiContextControl, showDebugControl = props.showDebugControl, restVideoAttrs = _object_without_properties(props, [
|
|
7864
8018
|
"src",
|
|
7865
8019
|
"autoplay",
|
|
7866
8020
|
"muted",
|
|
@@ -7885,9 +8039,15 @@ var StormcloudVideoPlayerComponent = React2.memo(function(props) {
|
|
|
7885
8039
|
"poster",
|
|
7886
8040
|
"children",
|
|
7887
8041
|
"licenseKey",
|
|
8042
|
+
"adFailsafeTimeoutMs",
|
|
7888
8043
|
"minSegmentsBeforePlay",
|
|
7889
8044
|
"disableAds",
|
|
7890
8045
|
"disableFiller",
|
|
8046
|
+
"singlePipelineMode",
|
|
8047
|
+
"mqttConfig",
|
|
8048
|
+
"adBreakCheckIntervalMs",
|
|
8049
|
+
"maxAdBreakExtensionMs",
|
|
8050
|
+
"adTransitionGapMs",
|
|
7891
8051
|
"swirlProjectId",
|
|
7892
8052
|
"swirlShowcaseDemo",
|
|
7893
8053
|
"swirlOverlayApiBaseUrl",
|
|
@@ -8128,7 +8288,7 @@ var StormcloudVideoPlayerComponent = React2.memo(function(props) {
|
|
|
8128
8288
|
var debugPanelBottomOffset = shouldShowEnhancedControls ? Math.max(74, 92 * responsiveScale) : Math.max(52, 58 * responsiveScale);
|
|
8129
8289
|
var criticalPropsKey = useMemo2(function() {
|
|
8130
8290
|
var baseParts = CRITICAL_PROPS.map(function(prop) {
|
|
8131
|
-
return prop === "src" ? "src:".concat(effectiveSrc) : "".concat(prop, ":").concat(props[prop]);
|
|
8291
|
+
return prop === "src" ? "src:".concat(effectiveSrc) : "".concat(prop, ":").concat(JSON.stringify(props[prop]));
|
|
8132
8292
|
}).join("|");
|
|
8133
8293
|
return "".concat(baseParts, "|adcisionChannelId:").concat(adcisionChannelId !== null && adcisionChannelId !== void 0 ? adcisionChannelId : "");
|
|
8134
8294
|
}, [
|
|
@@ -8137,8 +8297,19 @@ var StormcloudVideoPlayerComponent = React2.memo(function(props) {
|
|
|
8137
8297
|
licenseKey,
|
|
8138
8298
|
lowLatencyMode,
|
|
8139
8299
|
driftToleranceMs,
|
|
8300
|
+
immediateManifestAds,
|
|
8140
8301
|
adcisionChannelId,
|
|
8141
|
-
debugAdTiming
|
|
8302
|
+
debugAdTiming,
|
|
8303
|
+
showCustomControls,
|
|
8304
|
+
adFailsafeTimeoutMs,
|
|
8305
|
+
minSegmentsBeforePlay,
|
|
8306
|
+
disableAds,
|
|
8307
|
+
disableFiller,
|
|
8308
|
+
singlePipelineMode,
|
|
8309
|
+
mqttConfig2,
|
|
8310
|
+
adBreakCheckIntervalMs,
|
|
8311
|
+
maxAdBreakExtensionMs,
|
|
8312
|
+
adTransitionGapMs
|
|
8142
8313
|
]);
|
|
8143
8314
|
useEffect2(function() {
|
|
8144
8315
|
if (typeof window === "undefined") return;
|
|
@@ -8172,9 +8343,15 @@ var StormcloudVideoPlayerComponent = React2.memo(function(props) {
|
|
|
8172
8343
|
if (onFullscreenToggle !== void 0) cfg.onFullscreenToggle = onFullscreenToggle;
|
|
8173
8344
|
if (onControlClick !== void 0) cfg.onControlClick = onControlClick;
|
|
8174
8345
|
if (licenseKey !== void 0) cfg.licenseKey = licenseKey;
|
|
8346
|
+
if (adFailsafeTimeoutMs !== void 0) cfg.adFailsafeTimeoutMs = adFailsafeTimeoutMs;
|
|
8175
8347
|
if (minSegmentsBeforePlay !== void 0) cfg.minSegmentsBeforePlay = minSegmentsBeforePlay;
|
|
8176
8348
|
if (disableAds !== void 0) cfg.disableAds = disableAds;
|
|
8177
8349
|
cfg.disableFiller = disableFiller !== null && disableFiller !== void 0 ? disableFiller : true;
|
|
8350
|
+
if (singlePipelineMode !== void 0) cfg.singlePipelineMode = singlePipelineMode;
|
|
8351
|
+
if (mqttConfig2 !== void 0) cfg.mqttConfig = mqttConfig2;
|
|
8352
|
+
if (adBreakCheckIntervalMs !== void 0) cfg.adBreakCheckIntervalMs = adBreakCheckIntervalMs;
|
|
8353
|
+
if (maxAdBreakExtensionMs !== void 0) cfg.maxAdBreakExtensionMs = maxAdBreakExtensionMs;
|
|
8354
|
+
if (adTransitionGapMs !== void 0) cfg.adTransitionGapMs = adTransitionGapMs;
|
|
8178
8355
|
if (adcisionChannelId !== void 0) {
|
|
8179
8356
|
cfg.projectId = String(adcisionChannelId);
|
|
8180
8357
|
cfg.channelId = adcisionChannelId;
|
|
@@ -11315,5 +11492,5 @@ var createStormcloudPlayer = function createStormcloudPlayer(playerList, fallbac
|
|
|
11315
11492
|
};
|
|
11316
11493
|
var StormcloudPlayer = createStormcloudPlayer(players_default, players_default[players_default.length - 1]);
|
|
11317
11494
|
var StormcloudPlayer_default = StormcloudPlayer;
|
|
11318
|
-
export { IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, OVERLAY_API_BASE, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer_default as StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, canPlay, createAdStormPlayer, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, fetchProjectOverlays, getBrowserConfigOverrides, getBrowserID, getClientInfo, initializePolyfills, isMediaStream, isOverlayActive, lazy, logBrowserInfo, merge, normalizeSwirlOverlay, omit, parseQuery, players_default as players, randomString, resolveImageUrl, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode, timeStringToSeconds };
|
|
11495
|
+
export { DEFAULT_MQTT_CONFIG, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, MQTT_CA_CERT_FILE, OVERLAY_API_BASE, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer_default as StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, applyMQTTConfig, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createAdStormPlayer, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, ensureMQTTClient, fetchProjectOverlays, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMQTTEnabled, isMediaStream, isOverlayActive, lazy, logBrowserInfo, merge, mqttConfig, normalizeSwirlOverlay, omit, parseQuery, players_default as players, publishMQTT, randomString, resolveImageUrl, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode, timeStringToSeconds };
|
|
11319
11496
|
//# sourceMappingURL=index.js.map
|