stormcloud-video-player 0.8.3 → 0.8.5
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 +553 -217
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +46 -2
- package/lib/index.d.ts +46 -2
- package/lib/index.js +494 -218
- package/lib/index.js.map +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +462 -216
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.d.cts +11 -2
- package/lib/players/HlsPlayer.cjs +462 -216
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.d.cts +1 -1
- package/lib/players/index.cjs +462 -216
- package/lib/players/index.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.d.cts +1 -1
- package/lib/{types-DWVgdqF-.d.cts → types-CUKMIqHL.d.cts} +5 -0
- package/lib/ui/StormcloudVideoPlayer.cjs +467 -217
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
- package/lib/utils/mqttClient.cjs +245 -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 +182 -170
- package/lib/utils/tracking.cjs.map +1 -1
- package/lib/utils/tracking.d.cts +1 -1
- package/lib/utils/vastMacros.cjs +231 -0
- package/lib/utils/vastMacros.cjs.map +1 -0
- package/lib/utils/vastMacros.d.cts +24 -0
- package/package.json +3 -1
- package/src/certs/emqxsl-ca.crt +22 -0
package/lib/index.cjs
CHANGED
|
@@ -428,6 +428,9 @@ var __toCommonJS = function __toCommonJS(mod) {
|
|
|
428
428
|
// src/index.ts
|
|
429
429
|
var index_exports = {};
|
|
430
430
|
__export(index_exports, {
|
|
431
|
+
DEFAULT_MQTT_CONFIG: function DEFAULT_MQTT_CONFIG1() {
|
|
432
|
+
return DEFAULT_MQTT_CONFIG;
|
|
433
|
+
},
|
|
431
434
|
IS_BROWSER: function IS_BROWSER1() {
|
|
432
435
|
return IS_BROWSER;
|
|
433
436
|
},
|
|
@@ -440,6 +443,9 @@ __export(index_exports, {
|
|
|
440
443
|
IS_SAFARI: function IS_SAFARI1() {
|
|
441
444
|
return IS_SAFARI;
|
|
442
445
|
},
|
|
446
|
+
MQTT_CA_CERT_FILE: function MQTT_CA_CERT_FILE1() {
|
|
447
|
+
return MQTT_CA_CERT_FILE;
|
|
448
|
+
},
|
|
443
449
|
SUPPORTS_DASH: function SUPPORTS_DASH1() {
|
|
444
450
|
return SUPPORTS_DASH;
|
|
445
451
|
},
|
|
@@ -455,9 +461,21 @@ __export(index_exports, {
|
|
|
455
461
|
StormcloudVideoPlayerComponent: function StormcloudVideoPlayerComponent1() {
|
|
456
462
|
return StormcloudVideoPlayerComponent;
|
|
457
463
|
},
|
|
464
|
+
applyMQTTConfig: function applyMQTTConfig1() {
|
|
465
|
+
return applyMQTTConfig;
|
|
466
|
+
},
|
|
467
|
+
buildMQTTBrokerUrl: function buildMQTTBrokerUrl1() {
|
|
468
|
+
return buildMQTTBrokerUrl;
|
|
469
|
+
},
|
|
470
|
+
buildPlayerTopic: function buildPlayerTopic1() {
|
|
471
|
+
return buildPlayerTopic;
|
|
472
|
+
},
|
|
458
473
|
canPlay: function canPlay1() {
|
|
459
474
|
return canPlay;
|
|
460
475
|
},
|
|
476
|
+
configureMQTT: function configureMQTT1() {
|
|
477
|
+
return configureMQTT;
|
|
478
|
+
},
|
|
461
479
|
createHlsAdPlayer: function createHlsAdPlayer1() {
|
|
462
480
|
return createHlsAdPlayer;
|
|
463
481
|
},
|
|
@@ -473,6 +491,12 @@ __export(index_exports, {
|
|
|
473
491
|
detectBrowser: function detectBrowser1() {
|
|
474
492
|
return detectBrowser;
|
|
475
493
|
},
|
|
494
|
+
disconnectMQTT: function disconnectMQTT1() {
|
|
495
|
+
return disconnectMQTT;
|
|
496
|
+
},
|
|
497
|
+
ensureMQTTClient: function ensureMQTTClient1() {
|
|
498
|
+
return ensureMQTTClient;
|
|
499
|
+
},
|
|
476
500
|
getBrowserConfigOverrides: function getBrowserConfigOverrides1() {
|
|
477
501
|
return getBrowserConfigOverrides;
|
|
478
502
|
},
|
|
@@ -482,9 +506,24 @@ __export(index_exports, {
|
|
|
482
506
|
getClientInfo: function getClientInfo1() {
|
|
483
507
|
return getClientInfo;
|
|
484
508
|
},
|
|
509
|
+
getMQTTStatus: function getMQTTStatus1() {
|
|
510
|
+
return getMQTTStatus;
|
|
511
|
+
},
|
|
512
|
+
initMQTTClient: function initMQTTClient1() {
|
|
513
|
+
return initMQTTClient;
|
|
514
|
+
},
|
|
485
515
|
initializePolyfills: function initializePolyfills1() {
|
|
486
516
|
return initializePolyfills;
|
|
487
517
|
},
|
|
518
|
+
isMQTTConfigured: function isMQTTConfigured1() {
|
|
519
|
+
return isMQTTConfigured;
|
|
520
|
+
},
|
|
521
|
+
isMQTTConnected: function isMQTTConnected1() {
|
|
522
|
+
return isMQTTConnected;
|
|
523
|
+
},
|
|
524
|
+
isMQTTEnabled: function isMQTTEnabled1() {
|
|
525
|
+
return isMQTTEnabled;
|
|
526
|
+
},
|
|
488
527
|
isMediaStream: function isMediaStream1() {
|
|
489
528
|
return isMediaStream;
|
|
490
529
|
},
|
|
@@ -497,6 +536,9 @@ __export(index_exports, {
|
|
|
497
536
|
merge: function merge1() {
|
|
498
537
|
return merge;
|
|
499
538
|
},
|
|
539
|
+
mqttConfig: function mqttConfig1() {
|
|
540
|
+
return mqttConfig;
|
|
541
|
+
},
|
|
500
542
|
omit: function omit1() {
|
|
501
543
|
return omit;
|
|
502
544
|
},
|
|
@@ -506,6 +548,9 @@ __export(index_exports, {
|
|
|
506
548
|
players: function players() {
|
|
507
549
|
return players_default;
|
|
508
550
|
},
|
|
551
|
+
publishMQTT: function publishMQTT1() {
|
|
552
|
+
return publishMQTT;
|
|
553
|
+
},
|
|
509
554
|
randomString: function randomString1() {
|
|
510
555
|
return randomString;
|
|
511
556
|
},
|
|
@@ -1524,6 +1569,123 @@ function createPalNonceManager() {
|
|
|
1524
1569
|
}
|
|
1525
1570
|
};
|
|
1526
1571
|
}
|
|
1572
|
+
// src/utils/mqttConfig.ts
|
|
1573
|
+
var MQTT_CA_CERT_FILE = "src/certs/emqxsl-ca.crt";
|
|
1574
|
+
var DEFAULT_MQTT_CONFIG = {
|
|
1575
|
+
enabled: true,
|
|
1576
|
+
brokerAddress: "vecbae77.ala.us-east-1.emqxsl.com",
|
|
1577
|
+
brokerPort: 8883,
|
|
1578
|
+
wsPort: 8084,
|
|
1579
|
+
username: "for-sonifi",
|
|
1580
|
+
password: "sonifi-mqtt",
|
|
1581
|
+
topicPrefix: "adstorm/players",
|
|
1582
|
+
qos: 1
|
|
1583
|
+
};
|
|
1584
|
+
var mqttConfig = _object_spread({}, DEFAULT_MQTT_CONFIG);
|
|
1585
|
+
function applyMQTTConfig(overrides) {
|
|
1586
|
+
Object.assign(mqttConfig, overrides);
|
|
1587
|
+
}
|
|
1588
|
+
function isMQTTEnabled() {
|
|
1589
|
+
return mqttConfig.enabled;
|
|
1590
|
+
}
|
|
1591
|
+
function buildMQTTBrokerUrl() {
|
|
1592
|
+
if (mqttConfig.brokerUrl) return mqttConfig.brokerUrl;
|
|
1593
|
+
return "wss://".concat(mqttConfig.brokerAddress, ":").concat(mqttConfig.wsPort, "/mqtt");
|
|
1594
|
+
}
|
|
1595
|
+
function buildPlayerTopic(licenseKey, channel) {
|
|
1596
|
+
return "".concat(mqttConfig.topicPrefix, "/").concat(licenseKey, "/").concat(channel);
|
|
1597
|
+
}
|
|
1598
|
+
// src/utils/mqttClient.ts
|
|
1599
|
+
var import_mqtt = __toESM(require("mqtt"), 1);
|
|
1600
|
+
var LOG = "[StormcloudVideoPlayer][MQTT]";
|
|
1601
|
+
var client = null;
|
|
1602
|
+
var status = "disconnected";
|
|
1603
|
+
function getMQTTStatus() {
|
|
1604
|
+
return status;
|
|
1605
|
+
}
|
|
1606
|
+
function isMQTTConnected() {
|
|
1607
|
+
return status === "connected" && client !== null && client.connected;
|
|
1608
|
+
}
|
|
1609
|
+
function isMQTTConfigured() {
|
|
1610
|
+
return isMQTTEnabled();
|
|
1611
|
+
}
|
|
1612
|
+
function configureMQTT(overrides) {
|
|
1613
|
+
applyMQTTConfig(overrides);
|
|
1614
|
+
disconnectMQTT();
|
|
1615
|
+
}
|
|
1616
|
+
function initMQTTClient() {
|
|
1617
|
+
if (client || !isMQTTEnabled()) return;
|
|
1618
|
+
var url = buildMQTTBrokerUrl();
|
|
1619
|
+
status = "connecting";
|
|
1620
|
+
var clientId = "stormcloud-vp-".concat(Math.random().toString(36).slice(2, 9));
|
|
1621
|
+
try {
|
|
1622
|
+
client = import_mqtt.default.connect(url, {
|
|
1623
|
+
clientId: clientId,
|
|
1624
|
+
username: mqttConfig.username,
|
|
1625
|
+
password: mqttConfig.password,
|
|
1626
|
+
keepalive: 60,
|
|
1627
|
+
clean: true,
|
|
1628
|
+
reconnectPeriod: 5e3,
|
|
1629
|
+
connectTimeout: 1e4,
|
|
1630
|
+
queueQoSZero: false
|
|
1631
|
+
});
|
|
1632
|
+
} catch (err) {
|
|
1633
|
+
status = "error";
|
|
1634
|
+
console.warn("".concat(LOG, " connect() threw:"), err);
|
|
1635
|
+
return;
|
|
1636
|
+
}
|
|
1637
|
+
client.on("connect", function() {
|
|
1638
|
+
status = "connected";
|
|
1639
|
+
console.info("".concat(LOG, " connected to ").concat(url));
|
|
1640
|
+
});
|
|
1641
|
+
client.on("reconnect", function() {
|
|
1642
|
+
status = "connecting";
|
|
1643
|
+
console.info("".concat(LOG, " reconnecting…"));
|
|
1644
|
+
});
|
|
1645
|
+
client.on("offline", function() {
|
|
1646
|
+
status = "disconnected";
|
|
1647
|
+
console.warn("".concat(LOG, " offline"));
|
|
1648
|
+
});
|
|
1649
|
+
client.on("error", function(err) {
|
|
1650
|
+
status = "error";
|
|
1651
|
+
console.warn("".concat(LOG, " error:"), err.message);
|
|
1652
|
+
});
|
|
1653
|
+
client.on("close", function() {
|
|
1654
|
+
if (status === "connected") {
|
|
1655
|
+
status = "disconnected";
|
|
1656
|
+
}
|
|
1657
|
+
});
|
|
1658
|
+
}
|
|
1659
|
+
function ensureMQTTClient() {
|
|
1660
|
+
if (isMQTTEnabled() && !client) {
|
|
1661
|
+
initMQTTClient();
|
|
1662
|
+
}
|
|
1663
|
+
}
|
|
1664
|
+
function publishMQTT(topic, payload) {
|
|
1665
|
+
if (!isMQTTEnabled()) {
|
|
1666
|
+
return false;
|
|
1667
|
+
}
|
|
1668
|
+
ensureMQTTClient();
|
|
1669
|
+
if (!client) {
|
|
1670
|
+
return false;
|
|
1671
|
+
}
|
|
1672
|
+
try {
|
|
1673
|
+
client.publish(topic, JSON.stringify(payload), {
|
|
1674
|
+
qos: mqttConfig.qos
|
|
1675
|
+
});
|
|
1676
|
+
return true;
|
|
1677
|
+
} catch (err) {
|
|
1678
|
+
console.warn("".concat(LOG, " publish failed on ").concat(topic, ":"), err);
|
|
1679
|
+
return false;
|
|
1680
|
+
}
|
|
1681
|
+
}
|
|
1682
|
+
function disconnectMQTT() {
|
|
1683
|
+
if (client) {
|
|
1684
|
+
client.end(true);
|
|
1685
|
+
client = null;
|
|
1686
|
+
status = "disconnected";
|
|
1687
|
+
}
|
|
1688
|
+
}
|
|
1527
1689
|
// src/utils/tracking.ts
|
|
1528
1690
|
var cachedBrowserId = null;
|
|
1529
1691
|
function getClientInfo() {
|
|
@@ -1670,7 +1832,7 @@ function getClientInfo() {
|
|
|
1670
1832
|
}
|
|
1671
1833
|
function getBrowserID(clientInfo) {
|
|
1672
1834
|
return _async_to_generator(function() {
|
|
1673
|
-
var fingerprintString, encodedData, utf8, buffer, i, hashBuffer,
|
|
1835
|
+
var _crypto_subtle, fingerprintString, encodedData, utf8, buffer, i, hashBuffer, hashHex, unused, hash, i1, char, fallbackHash, timestamp, random;
|
|
1674
1836
|
return _ts_generator(this, function(_state) {
|
|
1675
1837
|
switch(_state.label){
|
|
1676
1838
|
case 0:
|
|
@@ -1681,7 +1843,7 @@ function getBrowserID(clientInfo) {
|
|
|
1681
1843
|
];
|
|
1682
1844
|
}
|
|
1683
1845
|
fingerprintString = JSON.stringify(clientInfo);
|
|
1684
|
-
if (!(typeof crypto !== "undefined" && crypto.subtle
|
|
1846
|
+
if (!(typeof crypto !== "undefined" && ((_crypto_subtle = crypto.subtle) === null || _crypto_subtle === void 0 ? void 0 : _crypto_subtle.digest))) return [
|
|
1685
1847
|
3,
|
|
1686
1848
|
5
|
|
1687
1849
|
];
|
|
@@ -1719,8 +1881,7 @@ function getBrowserID(clientInfo) {
|
|
|
1719
1881
|
];
|
|
1720
1882
|
case 3:
|
|
1721
1883
|
hashBuffer = _state.sent();
|
|
1722
|
-
|
|
1723
|
-
hashHex = hashArray.map(function(b) {
|
|
1884
|
+
hashHex = Array.from(new Uint8Array(hashBuffer)).map(function(b) {
|
|
1724
1885
|
return b.toString(16).padStart(2, "0");
|
|
1725
1886
|
}).join("");
|
|
1726
1887
|
cachedBrowserId = hashHex;
|
|
@@ -1729,8 +1890,8 @@ function getBrowserID(clientInfo) {
|
|
|
1729
1890
|
hashHex
|
|
1730
1891
|
];
|
|
1731
1892
|
case 4:
|
|
1732
|
-
|
|
1733
|
-
console.warn("[StormcloudVideoPlayer] crypto.subtle
|
|
1893
|
+
unused = _state.sent();
|
|
1894
|
+
console.warn("[StormcloudVideoPlayer] crypto.subtle not supported, using fallback hash");
|
|
1734
1895
|
return [
|
|
1735
1896
|
3,
|
|
1736
1897
|
5
|
|
@@ -1754,177 +1915,91 @@ function getBrowserID(clientInfo) {
|
|
|
1754
1915
|
});
|
|
1755
1916
|
})();
|
|
1756
1917
|
}
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
var HEARTBEAT_URL = "".concat(PLAYER_TRACKING_BASE_URL, "/heartbeat");
|
|
1760
|
-
var IMPRESSIONS_URL = "".concat(PLAYER_TRACKING_BASE_URL, "/impressions/ingest");
|
|
1761
|
-
function buildHeaders(licenseKey) {
|
|
1762
|
-
var headers = {
|
|
1763
|
-
"Content-Type": "application/json"
|
|
1764
|
-
};
|
|
1765
|
-
if (licenseKey) {
|
|
1766
|
-
headers["Authorization"] = "Bearer ".concat(licenseKey);
|
|
1767
|
-
}
|
|
1768
|
-
return headers;
|
|
1918
|
+
function canPublish(licenseKey) {
|
|
1919
|
+
return Boolean(isMQTTEnabled() && licenseKey);
|
|
1769
1920
|
}
|
|
1770
|
-
function
|
|
1921
|
+
function buildPlayerMetricEvent() {
|
|
1771
1922
|
return _async_to_generator(function() {
|
|
1772
|
-
var
|
|
1773
|
-
return _ts_generator(this, function(_state) {
|
|
1774
|
-
switch(_state.label){
|
|
1775
|
-
case 0:
|
|
1776
|
-
return [
|
|
1777
|
-
4,
|
|
1778
|
-
fetch(TRACK_URL, {
|
|
1779
|
-
method: "POST",
|
|
1780
|
-
headers: buildHeaders(licenseKey),
|
|
1781
|
-
body: JSON.stringify(body)
|
|
1782
|
-
})
|
|
1783
|
-
];
|
|
1784
|
-
case 1:
|
|
1785
|
-
response = _state.sent();
|
|
1786
|
-
if (!response.ok) {
|
|
1787
|
-
throw new Error("HTTP error! status: ".concat(response.status));
|
|
1788
|
-
}
|
|
1789
|
-
return [
|
|
1790
|
-
4,
|
|
1791
|
-
response.json()
|
|
1792
|
-
];
|
|
1793
|
-
case 2:
|
|
1794
|
-
_state.sent();
|
|
1795
|
-
return [
|
|
1796
|
-
2
|
|
1797
|
-
];
|
|
1798
|
-
}
|
|
1799
|
-
});
|
|
1800
|
-
})();
|
|
1801
|
-
}
|
|
1802
|
-
function postJson(url, licenseKey, body) {
|
|
1803
|
-
return _async_to_generator(function() {
|
|
1804
|
-
var response;
|
|
1805
|
-
return _ts_generator(this, function(_state) {
|
|
1806
|
-
switch(_state.label){
|
|
1807
|
-
case 0:
|
|
1808
|
-
return [
|
|
1809
|
-
4,
|
|
1810
|
-
fetch(url, {
|
|
1811
|
-
method: "POST",
|
|
1812
|
-
headers: buildHeaders(licenseKey),
|
|
1813
|
-
body: JSON.stringify(body)
|
|
1814
|
-
})
|
|
1815
|
-
];
|
|
1816
|
-
case 1:
|
|
1817
|
-
response = _state.sent();
|
|
1818
|
-
if (!response.ok) {
|
|
1819
|
-
throw new Error("HTTP error! status: ".concat(response.status));
|
|
1820
|
-
}
|
|
1821
|
-
return [
|
|
1822
|
-
4,
|
|
1823
|
-
response.json()
|
|
1824
|
-
];
|
|
1825
|
-
case 2:
|
|
1826
|
-
_state.sent();
|
|
1827
|
-
return [
|
|
1828
|
-
2
|
|
1829
|
-
];
|
|
1830
|
-
}
|
|
1831
|
-
});
|
|
1832
|
-
})();
|
|
1833
|
-
}
|
|
1834
|
-
function buildPlayerMetricEvent(_0) {
|
|
1835
|
-
return _async_to_generator(function(licenseKey) {
|
|
1836
|
-
var context, flags, _flags_captureAt, clientInfo, browserId, captureAt;
|
|
1923
|
+
var context, flags, _flags_captureAt, _flags_adLoaded, _flags_adDetect, clientInfo, playerId, captureAt;
|
|
1837
1924
|
var _arguments = arguments;
|
|
1838
1925
|
return _ts_generator(this, function(_state) {
|
|
1839
1926
|
switch(_state.label){
|
|
1840
1927
|
case 0:
|
|
1841
|
-
context = _arguments.length >
|
|
1928
|
+
context = _arguments.length > 0 && _arguments[0] !== void 0 ? _arguments[0] : {}, flags = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
|
1842
1929
|
clientInfo = getClientInfo();
|
|
1843
1930
|
return [
|
|
1844
1931
|
4,
|
|
1845
1932
|
getBrowserID(clientInfo)
|
|
1846
1933
|
];
|
|
1847
1934
|
case 1:
|
|
1848
|
-
|
|
1935
|
+
playerId = _state.sent();
|
|
1849
1936
|
captureAt = (_flags_captureAt = flags.captureAt) !== null && _flags_captureAt !== void 0 ? _flags_captureAt : /* @__PURE__ */ new Date().toISOString();
|
|
1850
1937
|
return [
|
|
1851
1938
|
2,
|
|
1852
|
-
{
|
|
1853
|
-
player_id:
|
|
1854
|
-
browserId: browserId,
|
|
1939
|
+
_object_spread({
|
|
1940
|
+
player_id: playerId,
|
|
1855
1941
|
device_type: clientInfo.deviceType,
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
timestamp: captureAt
|
|
1864
|
-
}
|
|
1942
|
+
os: clientInfo.os.toLowerCase(),
|
|
1943
|
+
ad_loaded: (_flags_adLoaded = flags.adLoaded) !== null && _flags_adLoaded !== void 0 ? _flags_adLoaded : false,
|
|
1944
|
+
ad_detect: (_flags_adDetect = flags.adDetect) !== null && _flags_adDetect !== void 0 ? _flags_adDetect : false,
|
|
1945
|
+
capture_at: captureAt
|
|
1946
|
+
}, context.inputStreamType ? {
|
|
1947
|
+
input_stream_type: context.inputStreamType
|
|
1948
|
+
} : {})
|
|
1865
1949
|
];
|
|
1866
1950
|
}
|
|
1867
1951
|
});
|
|
1868
1952
|
}).apply(this, arguments);
|
|
1869
1953
|
}
|
|
1954
|
+
function publishTracking(licenseKey, channel, body) {
|
|
1955
|
+
ensureMQTTClient();
|
|
1956
|
+
publishMQTT(buildPlayerTopic(licenseKey, channel), body);
|
|
1957
|
+
}
|
|
1870
1958
|
function sendInitialTracking(_0) {
|
|
1871
1959
|
return _async_to_generator(function(licenseKey) {
|
|
1872
|
-
var context,
|
|
1960
|
+
var context, metricEvent, error;
|
|
1873
1961
|
var _arguments = arguments;
|
|
1874
1962
|
return _ts_generator(this, function(_state) {
|
|
1875
1963
|
switch(_state.label){
|
|
1876
1964
|
case 0:
|
|
1877
1965
|
context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
|
1966
|
+
if (!canPublish(licenseKey)) return [
|
|
1967
|
+
2
|
|
1968
|
+
];
|
|
1878
1969
|
_state.label = 1;
|
|
1879
1970
|
case 1:
|
|
1880
1971
|
_state.trys.push([
|
|
1881
1972
|
1,
|
|
1882
|
-
|
|
1973
|
+
3,
|
|
1883
1974
|
,
|
|
1884
|
-
|
|
1975
|
+
4
|
|
1885
1976
|
]);
|
|
1886
|
-
clientInfo = getClientInfo();
|
|
1887
1977
|
return [
|
|
1888
1978
|
4,
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
browserId = _state.sent();
|
|
1893
|
-
trackingData = _object_spread({
|
|
1894
|
-
browserId: browserId
|
|
1895
|
-
}, clientInfo);
|
|
1896
|
-
return [
|
|
1897
|
-
4,
|
|
1898
|
-
sendTrackRequest(licenseKey, {
|
|
1899
|
-
events: [
|
|
1900
|
-
{
|
|
1901
|
-
player_id: browserId,
|
|
1902
|
-
device_type: clientInfo.deviceType,
|
|
1903
|
-
input_stream_type: context.inputStreamType,
|
|
1904
|
-
os: clientInfo.os,
|
|
1905
|
-
ad_loaded: false,
|
|
1906
|
-
ad_detect: false,
|
|
1907
|
-
license_key: licenseKey,
|
|
1908
|
-
capture_at: /* @__PURE__ */ new Date().toISOString()
|
|
1909
|
-
}
|
|
1910
|
-
],
|
|
1911
|
-
trackingData: trackingData
|
|
1979
|
+
buildPlayerMetricEvent(context, {
|
|
1980
|
+
adLoaded: false,
|
|
1981
|
+
adDetect: false
|
|
1912
1982
|
})
|
|
1913
1983
|
];
|
|
1914
|
-
case
|
|
1915
|
-
_state.sent();
|
|
1984
|
+
case 2:
|
|
1985
|
+
metricEvent = _state.sent();
|
|
1986
|
+
publishTracking(licenseKey, "metrics", {
|
|
1987
|
+
events: [
|
|
1988
|
+
metricEvent
|
|
1989
|
+
]
|
|
1990
|
+
});
|
|
1916
1991
|
return [
|
|
1917
1992
|
3,
|
|
1918
|
-
|
|
1993
|
+
4
|
|
1919
1994
|
];
|
|
1920
|
-
case
|
|
1995
|
+
case 3:
|
|
1921
1996
|
error = _state.sent();
|
|
1922
1997
|
console.error("[StormcloudVideoPlayer] Error sending initial tracking data:", error);
|
|
1923
1998
|
return [
|
|
1924
1999
|
3,
|
|
1925
|
-
|
|
2000
|
+
4
|
|
1926
2001
|
];
|
|
1927
|
-
case
|
|
2002
|
+
case 4:
|
|
1928
2003
|
return [
|
|
1929
2004
|
2
|
|
1930
2005
|
];
|
|
@@ -2028,53 +2103,48 @@ function sendAdImpressionTracking(_0, _1) {
|
|
|
2028
2103
|
switch(_state.label){
|
|
2029
2104
|
case 0:
|
|
2030
2105
|
context = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
2106
|
+
if (!canPublish(licenseKey)) return [
|
|
2107
|
+
2
|
|
2108
|
+
];
|
|
2031
2109
|
_state.label = 1;
|
|
2032
2110
|
case 1:
|
|
2033
2111
|
_state.trys.push([
|
|
2034
2112
|
1,
|
|
2035
|
-
|
|
2113
|
+
3,
|
|
2036
2114
|
,
|
|
2037
|
-
|
|
2115
|
+
4
|
|
2038
2116
|
]);
|
|
2039
2117
|
return [
|
|
2040
2118
|
4,
|
|
2041
|
-
buildPlayerMetricEvent(
|
|
2119
|
+
buildPlayerMetricEvent(context, {
|
|
2042
2120
|
captureAt: adImpressionInfo.timestamp
|
|
2043
2121
|
})
|
|
2044
2122
|
];
|
|
2045
2123
|
case 2:
|
|
2046
2124
|
metricEvent = _state.sent();
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
capture_at: adImpressionInfo.timestamp
|
|
2059
|
-
}
|
|
2060
|
-
]
|
|
2061
|
-
})
|
|
2062
|
-
])
|
|
2063
|
-
];
|
|
2064
|
-
case 3:
|
|
2065
|
-
_state.sent();
|
|
2125
|
+
publishTracking(licenseKey, "heartbeat", metricEvent);
|
|
2126
|
+
publishTracking(licenseKey, "impressions", {
|
|
2127
|
+
events: [
|
|
2128
|
+
{
|
|
2129
|
+
player_id: metricEvent.player_id,
|
|
2130
|
+
ad_played_count: 1,
|
|
2131
|
+
ad_url: adImpressionInfo.adUrl,
|
|
2132
|
+
capture_at: adImpressionInfo.timestamp
|
|
2133
|
+
}
|
|
2134
|
+
]
|
|
2135
|
+
});
|
|
2066
2136
|
return [
|
|
2067
2137
|
3,
|
|
2068
|
-
|
|
2138
|
+
4
|
|
2069
2139
|
];
|
|
2070
|
-
case
|
|
2140
|
+
case 3:
|
|
2071
2141
|
error = _state.sent();
|
|
2072
2142
|
console.error("[StormcloudVideoPlayer] Error sending ad impression tracking:", error);
|
|
2073
2143
|
return [
|
|
2074
2144
|
3,
|
|
2075
|
-
|
|
2145
|
+
4
|
|
2076
2146
|
];
|
|
2077
|
-
case
|
|
2147
|
+
case 4:
|
|
2078
2148
|
return [
|
|
2079
2149
|
2
|
|
2080
2150
|
];
|
|
@@ -2090,38 +2160,36 @@ function sendHeartbeat(_0) {
|
|
|
2090
2160
|
switch(_state.label){
|
|
2091
2161
|
case 0:
|
|
2092
2162
|
context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {}, flags = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
2163
|
+
if (!canPublish(licenseKey)) return [
|
|
2164
|
+
2
|
|
2165
|
+
];
|
|
2093
2166
|
_state.label = 1;
|
|
2094
2167
|
case 1:
|
|
2095
2168
|
_state.trys.push([
|
|
2096
2169
|
1,
|
|
2097
|
-
|
|
2170
|
+
3,
|
|
2098
2171
|
,
|
|
2099
|
-
|
|
2172
|
+
4
|
|
2100
2173
|
]);
|
|
2101
2174
|
return [
|
|
2102
2175
|
4,
|
|
2103
|
-
buildPlayerMetricEvent(
|
|
2176
|
+
buildPlayerMetricEvent(context, flags)
|
|
2104
2177
|
];
|
|
2105
2178
|
case 2:
|
|
2106
2179
|
heartbeatData = _state.sent();
|
|
2107
|
-
|
|
2108
|
-
4,
|
|
2109
|
-
postJson(HEARTBEAT_URL, licenseKey, heartbeatData)
|
|
2110
|
-
];
|
|
2111
|
-
case 3:
|
|
2112
|
-
_state.sent();
|
|
2180
|
+
publishTracking(licenseKey, "heartbeat", heartbeatData);
|
|
2113
2181
|
return [
|
|
2114
2182
|
3,
|
|
2115
|
-
|
|
2183
|
+
4
|
|
2116
2184
|
];
|
|
2117
|
-
case
|
|
2185
|
+
case 3:
|
|
2118
2186
|
error = _state.sent();
|
|
2119
2187
|
console.error("[StormcloudVideoPlayer] Error sending heartbeat:", error);
|
|
2120
2188
|
return [
|
|
2121
2189
|
3,
|
|
2122
|
-
|
|
2190
|
+
4
|
|
2123
2191
|
];
|
|
2124
|
-
case
|
|
2192
|
+
case 4:
|
|
2125
2193
|
return [
|
|
2126
2194
|
2
|
|
2127
2195
|
];
|
|
@@ -2380,6 +2448,166 @@ function initializePolyfills() {
|
|
|
2380
2448
|
polyfillTextEncoder();
|
|
2381
2449
|
polyfillPromiseFinally();
|
|
2382
2450
|
}
|
|
2451
|
+
// src/utils/vastMacros.ts
|
|
2452
|
+
function generateCorrelator() {
|
|
2453
|
+
if (typeof crypto !== "undefined" && crypto.getRandomValues) {
|
|
2454
|
+
try {
|
|
2455
|
+
var _buf_, _buf_1;
|
|
2456
|
+
var buf = new Uint32Array(2);
|
|
2457
|
+
crypto.getRandomValues(buf);
|
|
2458
|
+
var value = ((_buf_ = buf[0]) !== null && _buf_ !== void 0 ? _buf_ : 0) * 2097152 + (((_buf_1 = buf[1]) !== null && _buf_1 !== void 0 ? _buf_1 : 0) & 2097151);
|
|
2459
|
+
if (value > 0) {
|
|
2460
|
+
return String(value);
|
|
2461
|
+
}
|
|
2462
|
+
} catch (unused) {}
|
|
2463
|
+
}
|
|
2464
|
+
return String(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1);
|
|
2465
|
+
}
|
|
2466
|
+
var UNEXPANDED_MACRO_PATTERN = /^(\[[^\]]*\]|\{[^}]*\}|%%[^%]*%%)$/;
|
|
2467
|
+
function applyVastMacros(baseUrl, ctx) {
|
|
2468
|
+
var url;
|
|
2469
|
+
try {
|
|
2470
|
+
url = new URL(baseUrl);
|
|
2471
|
+
} catch (unused) {
|
|
2472
|
+
return replaceCorrelatorFallback(baseUrl, ctx.correlator);
|
|
2473
|
+
}
|
|
2474
|
+
var params = url.searchParams;
|
|
2475
|
+
params.set("correlator", ctx.correlator);
|
|
2476
|
+
params.set("scor", ctx.streamCorrelator);
|
|
2477
|
+
if (ctx.pod != null) {
|
|
2478
|
+
params.set("pod", String(ctx.pod));
|
|
2479
|
+
}
|
|
2480
|
+
if (ctx.adPosition != null) {
|
|
2481
|
+
params.set("ppos", String(ctx.adPosition));
|
|
2482
|
+
}
|
|
2483
|
+
if (ctx.pageUrl) {
|
|
2484
|
+
params.set("url", ctx.pageUrl);
|
|
2485
|
+
params.set("description_url", ctx.pageUrl);
|
|
2486
|
+
}
|
|
2487
|
+
if (ctx.adWillPlayMuted != null) {
|
|
2488
|
+
params.set("vpmute", ctx.adWillPlayMuted ? "1" : "0");
|
|
2489
|
+
}
|
|
2490
|
+
if (ctx.adWillAutoPlay != null) {
|
|
2491
|
+
params.set("vpa", ctx.adWillAutoPlay ? "auto" : "click");
|
|
2492
|
+
}
|
|
2493
|
+
if (ctx.deviceId && ctx.deviceIdType) {
|
|
2494
|
+
params.set("rdid", ctx.deviceId);
|
|
2495
|
+
params.set("idtype", ctx.deviceIdType);
|
|
2496
|
+
params.set("is_lat", ctx.limitAdTracking ? "1" : "0");
|
|
2497
|
+
} else {
|
|
2498
|
+
params.delete("rdid");
|
|
2499
|
+
params.delete("idtype");
|
|
2500
|
+
params.delete("is_lat");
|
|
2501
|
+
}
|
|
2502
|
+
var consent = ctx.consent;
|
|
2503
|
+
if ((consent === null || consent === void 0 ? void 0 : consent.gdpr) != null) {
|
|
2504
|
+
params.set("gdpr", consent.gdpr);
|
|
2505
|
+
}
|
|
2506
|
+
if ((consent === null || consent === void 0 ? void 0 : consent.gdprConsent) != null) {
|
|
2507
|
+
params.set("gdpr_consent", consent.gdprConsent);
|
|
2508
|
+
}
|
|
2509
|
+
if ((consent === null || consent === void 0 ? void 0 : consent.usPrivacy) != null) {
|
|
2510
|
+
params.set("us_privacy", consent.usPrivacy);
|
|
2511
|
+
}
|
|
2512
|
+
if (ctx.adTest) {
|
|
2513
|
+
params.set("adtest", "on");
|
|
2514
|
+
}
|
|
2515
|
+
var staleKeys = [];
|
|
2516
|
+
params.forEach(function(value, key) {
|
|
2517
|
+
if (UNEXPANDED_MACRO_PATTERN.test(value)) {
|
|
2518
|
+
staleKeys.push(key);
|
|
2519
|
+
}
|
|
2520
|
+
});
|
|
2521
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
2522
|
+
try {
|
|
2523
|
+
for(var _iterator = staleKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
2524
|
+
var key = _step.value;
|
|
2525
|
+
params.delete(key);
|
|
2526
|
+
}
|
|
2527
|
+
} catch (err) {
|
|
2528
|
+
_didIteratorError = true;
|
|
2529
|
+
_iteratorError = err;
|
|
2530
|
+
} finally{
|
|
2531
|
+
try {
|
|
2532
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
2533
|
+
_iterator.return();
|
|
2534
|
+
}
|
|
2535
|
+
} finally{
|
|
2536
|
+
if (_didIteratorError) {
|
|
2537
|
+
throw _iteratorError;
|
|
2538
|
+
}
|
|
2539
|
+
}
|
|
2540
|
+
}
|
|
2541
|
+
return url.toString();
|
|
2542
|
+
}
|
|
2543
|
+
function replaceCorrelatorFallback(baseUrl, correlator) {
|
|
2544
|
+
var correlatorRegex = /([?&])correlator=([^&]*)/;
|
|
2545
|
+
if (correlatorRegex.test(baseUrl)) {
|
|
2546
|
+
return baseUrl.replace(correlatorRegex, "$1correlator=".concat(correlator));
|
|
2547
|
+
}
|
|
2548
|
+
var sep = baseUrl.includes("?") ? "&" : "?";
|
|
2549
|
+
return "".concat(baseUrl).concat(sep, "correlator=").concat(correlator);
|
|
2550
|
+
}
|
|
2551
|
+
function fetchConsentSignals() {
|
|
2552
|
+
var timeoutMs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 1500;
|
|
2553
|
+
var signals = {};
|
|
2554
|
+
if (typeof window === "undefined") {
|
|
2555
|
+
return Promise.resolve(signals);
|
|
2556
|
+
}
|
|
2557
|
+
var tasks = [];
|
|
2558
|
+
var tcfApi = window.__tcfapi;
|
|
2559
|
+
if (typeof tcfApi === "function") {
|
|
2560
|
+
tasks.push(new Promise(function(resolve) {
|
|
2561
|
+
var settled = false;
|
|
2562
|
+
try {
|
|
2563
|
+
tcfApi("addEventListener", 2, function(tcData, success) {
|
|
2564
|
+
if (settled) return;
|
|
2565
|
+
if (success && tcData && (tcData.eventStatus === "tcloaded" || tcData.eventStatus === "useractioncomplete")) {
|
|
2566
|
+
settled = true;
|
|
2567
|
+
signals.gdpr = tcData.gdprApplies ? "1" : "0";
|
|
2568
|
+
if (typeof tcData.tcString === "string" && tcData.tcString) {
|
|
2569
|
+
signals.gdprConsent = tcData.tcString;
|
|
2570
|
+
}
|
|
2571
|
+
try {
|
|
2572
|
+
tcfApi("removeEventListener", 2, function() {}, tcData.listenerId);
|
|
2573
|
+
} catch (unused) {}
|
|
2574
|
+
resolve();
|
|
2575
|
+
}
|
|
2576
|
+
});
|
|
2577
|
+
} catch (unused) {
|
|
2578
|
+
resolve();
|
|
2579
|
+
}
|
|
2580
|
+
setTimeout(function() {
|
|
2581
|
+
if (!settled) {
|
|
2582
|
+
settled = true;
|
|
2583
|
+
resolve();
|
|
2584
|
+
}
|
|
2585
|
+
}, timeoutMs);
|
|
2586
|
+
}));
|
|
2587
|
+
}
|
|
2588
|
+
var uspApi = window.__uspapi;
|
|
2589
|
+
if (typeof uspApi === "function") {
|
|
2590
|
+
tasks.push(new Promise(function(resolve) {
|
|
2591
|
+
try {
|
|
2592
|
+
uspApi("getUSPData", 1, function(data, success) {
|
|
2593
|
+
if (success && typeof (data === null || data === void 0 ? void 0 : data.uspString) === "string" && data.uspString) {
|
|
2594
|
+
signals.usPrivacy = data.uspString;
|
|
2595
|
+
}
|
|
2596
|
+
resolve();
|
|
2597
|
+
});
|
|
2598
|
+
} catch (unused) {
|
|
2599
|
+
resolve();
|
|
2600
|
+
}
|
|
2601
|
+
setTimeout(resolve, timeoutMs);
|
|
2602
|
+
}));
|
|
2603
|
+
}
|
|
2604
|
+
if (tasks.length === 0) {
|
|
2605
|
+
return Promise.resolve(signals);
|
|
2606
|
+
}
|
|
2607
|
+
return Promise.all(tasks).then(function() {
|
|
2608
|
+
return signals;
|
|
2609
|
+
});
|
|
2610
|
+
}
|
|
2383
2611
|
// src/utils/browserCompat.ts
|
|
2384
2612
|
function getChromeVersion(ua) {
|
|
2385
2613
|
var match = ua.match(/Chrome\/(\d+)/);
|
|
@@ -2628,6 +2856,11 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
2628
2856
|
this.preloadPoolLoopRunning = false;
|
|
2629
2857
|
this.adDetectSentForCurrentBreak = false;
|
|
2630
2858
|
this.palPlaybackStarted = false;
|
|
2859
|
+
this.streamCorrelator = generateCorrelator();
|
|
2860
|
+
this.consentSignals = {};
|
|
2861
|
+
this.podCounter = 0;
|
|
2862
|
+
this.podAssignedByPrefetch = false;
|
|
2863
|
+
this.adRequestPositionInBreak = 0;
|
|
2631
2864
|
this.continuousFetchLoopRunning = false;
|
|
2632
2865
|
initializePolyfills();
|
|
2633
2866
|
var browserOverrides = getBrowserConfigOverrides();
|
|
@@ -2700,6 +2933,9 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
2700
2933
|
adWillPlayMuted: !!this.config.muted,
|
|
2701
2934
|
continuousPlayback: (_this_config_lowLatencyMode = this.config.lowLatencyMode) !== null && _this_config_lowLatencyMode !== void 0 ? _this_config_lowLatencyMode : false
|
|
2702
2935
|
}).catch(function() {});
|
|
2936
|
+
fetchConsentSignals().then(function(signals) {
|
|
2937
|
+
_this.consentSignals = signals;
|
|
2938
|
+
}).catch(function() {});
|
|
2703
2939
|
this.initializeTracking();
|
|
2704
2940
|
if (!this.shouldUseNativeHls()) return [
|
|
2705
2941
|
3,
|
|
@@ -2767,7 +3003,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
2767
3003
|
var _level_details, _level_details1;
|
|
2768
3004
|
return (level === null || level === void 0 ? void 0 : (_level_details = level.details) === null || _level_details === void 0 ? void 0 : _level_details.live) === true || (level === null || level === void 0 ? void 0 : (_level_details1 = level.details) === null || _level_details1 === void 0 ? void 0 : _level_details1.type) === "LIVE";
|
|
2769
3005
|
})) !== null && _ref !== void 0 ? _ref : false;
|
|
2770
|
-
if (!this.isLiveStream && this.vmapBreaks.length === 0 && this.apiVastTagUrl) {
|
|
3006
|
+
if (!this.isVmapEnabled() && !this.isLiveStream && this.vmapBreaks.length === 0 && this.apiVastTagUrl) {
|
|
2771
3007
|
prerollKey = "synthetic-vod-preroll";
|
|
2772
3008
|
if (!this.consumedVmapBreakIds.has(prerollKey)) {
|
|
2773
3009
|
this.vmapBreaks = [
|
|
@@ -3352,12 +3588,14 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
3352
3588
|
_this.palNonce.sendPlaybackStart();
|
|
3353
3589
|
}
|
|
3354
3590
|
});
|
|
3355
|
-
this.
|
|
3591
|
+
this.endedHandler = function() {
|
|
3356
3592
|
if (_this.palPlaybackStarted) {
|
|
3357
3593
|
_this.palPlaybackStarted = false;
|
|
3358
3594
|
_this.palNonce.sendPlaybackEnd();
|
|
3359
3595
|
}
|
|
3360
|
-
|
|
3596
|
+
_this.onVideoEnded();
|
|
3597
|
+
};
|
|
3598
|
+
this.video.addEventListener("ended", this.endedHandler);
|
|
3361
3599
|
this.video.addEventListener("mousedown", function(e) {
|
|
3362
3600
|
_this.palNonce.sendAdTouch(e);
|
|
3363
3601
|
});
|
|
@@ -4679,6 +4917,13 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4679
4917
|
}
|
|
4680
4918
|
}
|
|
4681
4919
|
},
|
|
4920
|
+
{
|
|
4921
|
+
key: "isVmapEnabled",
|
|
4922
|
+
value: function isVmapEnabled() {
|
|
4923
|
+
var _this_config_vmapUrl;
|
|
4924
|
+
return !!(this.config.isVmap && ((_this_config_vmapUrl = this.config.vmapUrl) === null || _this_config_vmapUrl === void 0 ? void 0 : _this_config_vmapUrl.trim()));
|
|
4925
|
+
}
|
|
4926
|
+
},
|
|
4682
4927
|
{
|
|
4683
4928
|
key: "fetchAdConfiguration",
|
|
4684
4929
|
value: function fetchAdConfiguration() {
|
|
@@ -4687,7 +4932,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4687
4932
|
return _ts_generator(this, function(_state) {
|
|
4688
4933
|
switch(_state.label){
|
|
4689
4934
|
case 0:
|
|
4690
|
-
if (!this.
|
|
4935
|
+
if (!this.isVmapEnabled()) return [
|
|
4691
4936
|
3,
|
|
4692
4937
|
2
|
|
4693
4938
|
];
|
|
@@ -4697,7 +4942,12 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4697
4942
|
];
|
|
4698
4943
|
case 1:
|
|
4699
4944
|
_state.sent();
|
|
4700
|
-
|
|
4945
|
+
if (this.config.debugAdTiming) {
|
|
4946
|
+
console.log("[StormcloudVideoPlayer] VMAP mode enabled");
|
|
4947
|
+
}
|
|
4948
|
+
return [
|
|
4949
|
+
2
|
|
4950
|
+
];
|
|
4701
4951
|
case 2:
|
|
4702
4952
|
vastMode = this.config.vastMode || "default";
|
|
4703
4953
|
if (this.config.debugAdTiming) {
|
|
@@ -4865,7 +5115,16 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4865
5115
|
}
|
|
4866
5116
|
return [];
|
|
4867
5117
|
}
|
|
4868
|
-
var
|
|
5118
|
+
var VMAP_NS = "http://www.iab.net/videosuite/vmap";
|
|
5119
|
+
var adBreakNodes = Array.from(doc.getElementsByTagNameNS(VMAP_NS, "AdBreak"));
|
|
5120
|
+
if (adBreakNodes.length === 0) {
|
|
5121
|
+
adBreakNodes = Array.from(doc.querySelectorAll("AdBreak, vmap\\:AdBreak"));
|
|
5122
|
+
}
|
|
5123
|
+
if (adBreakNodes.length === 0) {
|
|
5124
|
+
adBreakNodes = Array.from(doc.getElementsByTagName("*")).filter(function(el) {
|
|
5125
|
+
return el.localName === "AdBreak";
|
|
5126
|
+
});
|
|
5127
|
+
}
|
|
4869
5128
|
var parsed = [];
|
|
4870
5129
|
adBreakNodes.forEach(function(node, index) {
|
|
4871
5130
|
var timeOffsetRaw = (node.getAttribute("timeOffset") || "").trim();
|
|
@@ -4873,7 +5132,11 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4873
5132
|
if (startTimeMs == null) {
|
|
4874
5133
|
return;
|
|
4875
5134
|
}
|
|
4876
|
-
var adTagNode = node.
|
|
5135
|
+
var adTagNode = node.getElementsByTagNameNS(VMAP_NS, "AdTagURI")[0];
|
|
5136
|
+
if (!adTagNode) {
|
|
5137
|
+
var _node_querySelector;
|
|
5138
|
+
adTagNode = (_node_querySelector = node.querySelector("AdTagURI, vmap\\:AdTagURI")) !== null && _node_querySelector !== void 0 ? _node_querySelector : void 0;
|
|
5139
|
+
}
|
|
4877
5140
|
var adTagUrl = ((adTagNode === null || adTagNode === void 0 ? void 0 : adTagNode.textContent) || "").trim();
|
|
4878
5141
|
if (!adTagUrl) {
|
|
4879
5142
|
return;
|
|
@@ -4969,25 +5232,35 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4969
5232
|
return this.getRemainingAdMs();
|
|
4970
5233
|
}
|
|
4971
5234
|
},
|
|
5235
|
+
{
|
|
5236
|
+
key: "beginNewAdPod",
|
|
5237
|
+
value: function beginNewAdPod() {
|
|
5238
|
+
this.podCounter++;
|
|
5239
|
+
this.adRequestPositionInBreak = 0;
|
|
5240
|
+
}
|
|
5241
|
+
},
|
|
4972
5242
|
{
|
|
4973
5243
|
key: "generateVastUrlsWithCorrelators",
|
|
4974
5244
|
value: function generateVastUrlsWithCorrelators(baseUrl, count) {
|
|
4975
5245
|
var urls = [];
|
|
4976
|
-
var baseTimestamp = Date.now();
|
|
4977
5246
|
for(var i = 0; i < count; i++){
|
|
4978
|
-
|
|
4979
|
-
var
|
|
4980
|
-
var
|
|
4981
|
-
|
|
4982
|
-
|
|
4983
|
-
|
|
4984
|
-
|
|
4985
|
-
|
|
4986
|
-
|
|
4987
|
-
|
|
4988
|
-
|
|
4989
|
-
|
|
4990
|
-
|
|
5247
|
+
this.adRequestPositionInBreak++;
|
|
5248
|
+
var adWillPlayMuted = this.inAdBreak ? this.adPlayer.getOriginalMutedState() : this.video.muted;
|
|
5249
|
+
var urlWithMacros = applyVastMacros(baseUrl, {
|
|
5250
|
+
correlator: generateCorrelator(),
|
|
5251
|
+
streamCorrelator: this.streamCorrelator,
|
|
5252
|
+
pod: this.podCounter > 0 ? this.podCounter : void 0,
|
|
5253
|
+
adPosition: this.adRequestPositionInBreak,
|
|
5254
|
+
pageUrl: typeof window !== "undefined" ? window.location.href : void 0,
|
|
5255
|
+
adWillPlayMuted: adWillPlayMuted,
|
|
5256
|
+
adWillAutoPlay: !!this.config.autoplay,
|
|
5257
|
+
deviceId: this.config.deviceId,
|
|
5258
|
+
deviceIdType: this.config.deviceIdType,
|
|
5259
|
+
limitAdTracking: this.config.limitAdTracking,
|
|
5260
|
+
adTest: this.config.adTest,
|
|
5261
|
+
consent: this.consentSignals
|
|
5262
|
+
});
|
|
5263
|
+
urls.push(this.palNonce.injectNonce(urlWithMacros));
|
|
4991
5264
|
}
|
|
4992
5265
|
return urls;
|
|
4993
5266
|
}
|
|
@@ -5057,6 +5330,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5057
5330
|
}
|
|
5058
5331
|
return;
|
|
5059
5332
|
}
|
|
5333
|
+
this.beginNewAdPod();
|
|
5334
|
+
this.podAssignedByPrefetch = true;
|
|
5060
5335
|
var urlsToPregenerate = 5;
|
|
5061
5336
|
var generatedUrls = this.generateVastUrlsWithCorrelators(baseVastUrl, urlsToPregenerate);
|
|
5062
5337
|
this.pendingAdBreak = _object_spread_props(_object_spread({
|
|
@@ -5094,6 +5369,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5094
5369
|
}
|
|
5095
5370
|
this.pendingAdBreak = null;
|
|
5096
5371
|
this.pendingScte35CueKey = void 0;
|
|
5372
|
+
this.podAssignedByPrefetch = false;
|
|
5097
5373
|
}
|
|
5098
5374
|
},
|
|
5099
5375
|
{
|
|
@@ -5530,6 +5806,11 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5530
5806
|
this.continuousFetchingActive = true;
|
|
5531
5807
|
this.isShowingPlaceholder = false;
|
|
5532
5808
|
this.totalAdRequestsInBreak = 0;
|
|
5809
|
+
if (this.podAssignedByPrefetch) {
|
|
5810
|
+
this.podAssignedByPrefetch = false;
|
|
5811
|
+
} else {
|
|
5812
|
+
this.beginNewAdPod();
|
|
5813
|
+
}
|
|
5533
5814
|
currentMuted = this.video.muted;
|
|
5534
5815
|
currentVolume = this.video.volume;
|
|
5535
5816
|
this.adPlayer.updateOriginalMutedState(currentMuted, currentVolume);
|
|
@@ -6430,23 +6711,49 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
6430
6711
|
key: "onTimeUpdate",
|
|
6431
6712
|
value: function onTimeUpdate(currentTimeSec) {
|
|
6432
6713
|
var _this = this;
|
|
6714
|
+
if (!this.isVmapEnabled() || this.vmapBreaks.length === 0) {
|
|
6715
|
+
return;
|
|
6716
|
+
}
|
|
6433
6717
|
if (this.adPlayer.isAdPlaying() || this.inAdBreak) return;
|
|
6434
6718
|
var nowMs = currentTimeSec * 1e3;
|
|
6435
6719
|
var breakToPlay = this.findBreakForTime(nowMs);
|
|
6436
6720
|
if (breakToPlay) {
|
|
6437
|
-
void this.
|
|
6721
|
+
void this.handleVmapAdBreak(breakToPlay, nowMs).catch(function(error) {
|
|
6722
|
+
if (_this.config.debugAdTiming) {
|
|
6723
|
+
console.warn("[StormcloudVideoPlayer] VMAP ad break failed gracefully:", error);
|
|
6724
|
+
}
|
|
6725
|
+
});
|
|
6726
|
+
}
|
|
6727
|
+
}
|
|
6728
|
+
},
|
|
6729
|
+
{
|
|
6730
|
+
key: "onVideoEnded",
|
|
6731
|
+
value: function onVideoEnded() {
|
|
6732
|
+
var _this = this;
|
|
6733
|
+
if (!this.isVmapEnabled() || this.vmapBreaks.length === 0) {
|
|
6734
|
+
return;
|
|
6735
|
+
}
|
|
6736
|
+
if (this.adPlayer.isAdPlaying() || this.inAdBreak) {
|
|
6737
|
+
return;
|
|
6738
|
+
}
|
|
6739
|
+
var durationMs = Number.isFinite(this.video.duration) ? Math.floor(this.video.duration * 1e3) : 0;
|
|
6740
|
+
var postroll = this.vmapBreaks.find(function(b) {
|
|
6741
|
+
return b.startTimeMs === -1 && !_this.consumedVmapBreakIds.has(_this.getAdBreakKey(b));
|
|
6742
|
+
});
|
|
6743
|
+
if (postroll) {
|
|
6744
|
+
void this.handleVmapAdBreak(postroll, durationMs).catch(function(error) {
|
|
6438
6745
|
if (_this.config.debugAdTiming) {
|
|
6439
|
-
console.warn("[StormcloudVideoPlayer]
|
|
6746
|
+
console.warn("[StormcloudVideoPlayer] VMAP post-roll failed gracefully:", error);
|
|
6440
6747
|
}
|
|
6441
6748
|
});
|
|
6442
6749
|
}
|
|
6443
6750
|
}
|
|
6444
6751
|
},
|
|
6445
6752
|
{
|
|
6446
|
-
key: "
|
|
6447
|
-
value: function
|
|
6753
|
+
key: "handleVmapAdBreak",
|
|
6754
|
+
value: function handleVmapAdBreak(adBreak, nowMs) {
|
|
6448
6755
|
return _async_to_generator(function() {
|
|
6449
|
-
var _adBreak_durationMs,
|
|
6756
|
+
var _adBreak_durationMs, key, breakStartMs, durationMs, endMs, inWindow, tags, first, rest, error;
|
|
6450
6757
|
return _ts_generator(this, function(_state) {
|
|
6451
6758
|
switch(_state.label){
|
|
6452
6759
|
case 0:
|
|
@@ -6464,25 +6771,28 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
6464
6771
|
}
|
|
6465
6772
|
durationMs = (_adBreak_durationMs = adBreak.durationMs) !== null && _adBreak_durationMs !== void 0 ? _adBreak_durationMs : 0;
|
|
6466
6773
|
endMs = breakStartMs + durationMs;
|
|
6467
|
-
|
|
6468
|
-
inWindow = durationMs > 0 ? nowMs > breakStartMs && nowMs < endMs : nowMs + tol >= breakStartMs;
|
|
6774
|
+
inWindow = durationMs > 0 ? nowMs >= breakStartMs && nowMs < endMs : nowMs >= breakStartMs;
|
|
6469
6775
|
if (!inWindow) return [
|
|
6470
6776
|
3,
|
|
6471
6777
|
4
|
|
6472
6778
|
];
|
|
6473
6779
|
this.consumedVmapBreakIds.add(key);
|
|
6474
|
-
|
|
6475
|
-
|
|
6476
|
-
|
|
6477
|
-
|
|
6478
|
-
|
|
6479
|
-
|
|
6480
|
-
4
|
|
6481
|
-
];
|
|
6780
|
+
tags = this.selectVastTagsForBreak(adBreak);
|
|
6781
|
+
if (!tags || tags.length === 0) {
|
|
6782
|
+
return [
|
|
6783
|
+
2
|
|
6784
|
+
];
|
|
6785
|
+
}
|
|
6482
6786
|
first = tags[0];
|
|
6483
6787
|
rest = tags.slice(1);
|
|
6484
6788
|
this.adPodQueue = rest;
|
|
6485
6789
|
this.adPlayer.updateOriginalMutedState(this.video.muted, this.video.volume);
|
|
6790
|
+
this.showAds = true;
|
|
6791
|
+
this.inAdBreak = true;
|
|
6792
|
+
this.currentAdBreakStartWallClockMs = Date.now();
|
|
6793
|
+
if (!this.video.paused) {
|
|
6794
|
+
this.video.pause();
|
|
6795
|
+
}
|
|
6486
6796
|
_state.label = 1;
|
|
6487
6797
|
case 1:
|
|
6488
6798
|
_state.trys.push([
|
|
@@ -6497,10 +6807,6 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
6497
6807
|
];
|
|
6498
6808
|
case 2:
|
|
6499
6809
|
_state.sent();
|
|
6500
|
-
this.inAdBreak = true;
|
|
6501
|
-
this.expectedAdBreakDurationMs = remainingMs;
|
|
6502
|
-
this.currentAdBreakStartWallClockMs = Date.now();
|
|
6503
|
-
this.scheduleAdStopCountdown(remainingMs);
|
|
6504
6810
|
return [
|
|
6505
6811
|
3,
|
|
6506
6812
|
4
|
|
@@ -6508,8 +6814,10 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
6508
6814
|
case 3:
|
|
6509
6815
|
error = _state.sent();
|
|
6510
6816
|
this.adPodQueue = [];
|
|
6817
|
+
this.inAdBreak = false;
|
|
6818
|
+
this.showAds = false;
|
|
6511
6819
|
if (this.config.debugAdTiming) {
|
|
6512
|
-
console.warn("[StormcloudVideoPlayer]
|
|
6820
|
+
console.warn("[StormcloudVideoPlayer] VMAP ad request failed:", error);
|
|
6513
6821
|
}
|
|
6514
6822
|
return [
|
|
6515
6823
|
3,
|
|
@@ -7221,9 +7529,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
7221
7529
|
{
|
|
7222
7530
|
key: "findBreakForTime",
|
|
7223
7531
|
value: function findBreakForTime(nowMs) {
|
|
7224
|
-
var _this_config_driftToleranceMs;
|
|
7225
7532
|
var schedule = this.vmapBreaks;
|
|
7226
|
-
var tol = (_this_config_driftToleranceMs = this.config.driftToleranceMs) !== null && _this_config_driftToleranceMs !== void 0 ? _this_config_driftToleranceMs : 1e3;
|
|
7227
7533
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
7228
7534
|
try {
|
|
7229
7535
|
for(var _iterator = schedule[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
@@ -7235,9 +7541,14 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
7235
7541
|
if (breakStartMs == null) {
|
|
7236
7542
|
continue;
|
|
7237
7543
|
}
|
|
7238
|
-
|
|
7239
|
-
|
|
7240
|
-
|
|
7544
|
+
if (b.durationMs) {
|
|
7545
|
+
var end = breakStartMs + b.durationMs;
|
|
7546
|
+
if (nowMs >= breakStartMs && nowMs < end) {
|
|
7547
|
+
return b;
|
|
7548
|
+
}
|
|
7549
|
+
continue;
|
|
7550
|
+
}
|
|
7551
|
+
if (nowMs >= breakStartMs) {
|
|
7241
7552
|
return b;
|
|
7242
7553
|
}
|
|
7243
7554
|
}
|
|
@@ -7445,6 +7756,10 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
7445
7756
|
this.video.removeEventListener("timeupdate", this.timeUpdateHandler);
|
|
7446
7757
|
delete this.timeUpdateHandler;
|
|
7447
7758
|
}
|
|
7759
|
+
if (this.endedHandler) {
|
|
7760
|
+
this.video.removeEventListener("ended", this.endedHandler);
|
|
7761
|
+
delete this.endedHandler;
|
|
7762
|
+
}
|
|
7448
7763
|
if (this.emptiedHandler) {
|
|
7449
7764
|
this.video.removeEventListener("emptied", this.emptiedHandler);
|
|
7450
7765
|
delete this.emptiedHandler;
|
|
@@ -7475,6 +7790,7 @@ var CRITICAL_PROPS = [
|
|
|
7475
7790
|
"allowNativeHls",
|
|
7476
7791
|
"isLiveStream",
|
|
7477
7792
|
"licenseKey",
|
|
7793
|
+
"isVmap",
|
|
7478
7794
|
"vmapUrl",
|
|
7479
7795
|
"lowLatencyMode",
|
|
7480
7796
|
"driftToleranceMs",
|
|
@@ -7483,7 +7799,7 @@ var CRITICAL_PROPS = [
|
|
|
7483
7799
|
var CONTROLS_HIDE_DELAY = 3e3;
|
|
7484
7800
|
var DEFAULT_PLAYER_ASPECT_RATIO = 16 / 9;
|
|
7485
7801
|
var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
|
|
7486
|
-
var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, isLiveStream = props.isLiveStream, 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, vastMode = props.vastMode, vastTagUrl = props.vastTagUrl, vmapUrl = props.vmapUrl, minSegmentsBeforePlay = props.minSegmentsBeforePlay, restVideoAttrs = _object_without_properties(props, [
|
|
7802
|
+
var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, isLiveStream = props.isLiveStream, 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, vastMode = props.vastMode, vastTagUrl = props.vastTagUrl, isVmap = props.isVmap, vmapUrl = props.vmapUrl, minSegmentsBeforePlay = props.minSegmentsBeforePlay, restVideoAttrs = _object_without_properties(props, [
|
|
7487
7803
|
"src",
|
|
7488
7804
|
"autoplay",
|
|
7489
7805
|
"muted",
|
|
@@ -7511,6 +7827,7 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
|
|
|
7511
7827
|
"licenseKey",
|
|
7512
7828
|
"vastMode",
|
|
7513
7829
|
"vastTagUrl",
|
|
7830
|
+
"isVmap",
|
|
7514
7831
|
"vmapUrl",
|
|
7515
7832
|
"minSegmentsBeforePlay"
|
|
7516
7833
|
]);
|
|
@@ -7653,6 +7970,7 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
|
|
|
7653
7970
|
allowNativeHls,
|
|
7654
7971
|
isLiveStream,
|
|
7655
7972
|
licenseKey,
|
|
7973
|
+
isVmap,
|
|
7656
7974
|
vmapUrl,
|
|
7657
7975
|
lowLatencyMode,
|
|
7658
7976
|
driftToleranceMs,
|
|
@@ -7697,6 +8015,7 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
|
|
|
7697
8015
|
if (licenseKey !== void 0) cfg.licenseKey = licenseKey;
|
|
7698
8016
|
if (vastMode !== void 0) cfg.vastMode = vastMode;
|
|
7699
8017
|
if (vastTagUrl !== void 0) cfg.vastTagUrl = vastTagUrl;
|
|
8018
|
+
if (isVmap !== void 0) cfg.isVmap = isVmap;
|
|
7700
8019
|
if (vmapUrl !== void 0) cfg.vmapUrl = vmapUrl;
|
|
7701
8020
|
if (minSegmentsBeforePlay !== void 0) cfg.minSegmentsBeforePlay = minSegmentsBeforePlay;
|
|
7702
8021
|
var player = new StormcloudVideoPlayer(cfg);
|
|
@@ -8859,6 +9178,7 @@ var defaultProps = {
|
|
|
8859
9178
|
showCustomControls: false,
|
|
8860
9179
|
hideLoadingIndicator: false,
|
|
8861
9180
|
licenseKey: "",
|
|
9181
|
+
isVmap: false,
|
|
8862
9182
|
vmapUrl: "",
|
|
8863
9183
|
adFailsafeTimeoutMs: 1e4,
|
|
8864
9184
|
minSegmentsBeforePlay: 2,
|
|
@@ -9803,6 +10123,7 @@ var SUPPORTED_PROPS = [
|
|
|
9803
10123
|
"debugAdTiming",
|
|
9804
10124
|
"showCustomControls",
|
|
9805
10125
|
"licenseKey",
|
|
10126
|
+
"isVmap",
|
|
9806
10127
|
"vmapUrl",
|
|
9807
10128
|
"adFailsafeTimeoutMs",
|
|
9808
10129
|
"minSegmentsBeforePlay",
|
|
@@ -9992,31 +10313,46 @@ var StormcloudPlayer = createStormcloudPlayer(players_default, players_default[p
|
|
|
9992
10313
|
var StormcloudPlayer_default = StormcloudPlayer;
|
|
9993
10314
|
// Annotate the CommonJS export names for ESM import in node:
|
|
9994
10315
|
0 && (module.exports = {
|
|
10316
|
+
DEFAULT_MQTT_CONFIG: DEFAULT_MQTT_CONFIG,
|
|
9995
10317
|
IS_BROWSER: IS_BROWSER,
|
|
9996
10318
|
IS_GLOBAL: IS_GLOBAL,
|
|
9997
10319
|
IS_IOS: IS_IOS,
|
|
9998
10320
|
IS_SAFARI: IS_SAFARI,
|
|
10321
|
+
MQTT_CA_CERT_FILE: MQTT_CA_CERT_FILE,
|
|
9999
10322
|
SUPPORTS_DASH: SUPPORTS_DASH,
|
|
10000
10323
|
SUPPORTS_HLS: SUPPORTS_HLS,
|
|
10001
10324
|
StormcloudPlayer: StormcloudPlayer,
|
|
10002
10325
|
StormcloudVideoPlayer: StormcloudVideoPlayer,
|
|
10003
10326
|
StormcloudVideoPlayerComponent: StormcloudVideoPlayerComponent,
|
|
10327
|
+
applyMQTTConfig: applyMQTTConfig,
|
|
10328
|
+
buildMQTTBrokerUrl: buildMQTTBrokerUrl,
|
|
10329
|
+
buildPlayerTopic: buildPlayerTopic,
|
|
10004
10330
|
canPlay: canPlay,
|
|
10331
|
+
configureMQTT: configureMQTT,
|
|
10005
10332
|
createHlsAdPlayer: createHlsAdPlayer,
|
|
10006
10333
|
createPalNonceManager: createPalNonceManager,
|
|
10007
10334
|
createStormcloudPlayer: createStormcloudPlayer,
|
|
10008
10335
|
detectBrowser: detectBrowser,
|
|
10336
|
+
disconnectMQTT: disconnectMQTT,
|
|
10337
|
+
ensureMQTTClient: ensureMQTTClient,
|
|
10009
10338
|
getBrowserConfigOverrides: getBrowserConfigOverrides,
|
|
10010
10339
|
getBrowserID: getBrowserID,
|
|
10011
10340
|
getClientInfo: getClientInfo,
|
|
10341
|
+
getMQTTStatus: getMQTTStatus,
|
|
10342
|
+
initMQTTClient: initMQTTClient,
|
|
10012
10343
|
initializePolyfills: initializePolyfills,
|
|
10344
|
+
isMQTTConfigured: isMQTTConfigured,
|
|
10345
|
+
isMQTTConnected: isMQTTConnected,
|
|
10346
|
+
isMQTTEnabled: isMQTTEnabled,
|
|
10013
10347
|
isMediaStream: isMediaStream,
|
|
10014
10348
|
lazy: lazy,
|
|
10015
10349
|
logBrowserInfo: logBrowserInfo,
|
|
10016
10350
|
merge: merge,
|
|
10351
|
+
mqttConfig: mqttConfig,
|
|
10017
10352
|
omit: omit,
|
|
10018
10353
|
parseQuery: parseQuery,
|
|
10019
10354
|
players: players,
|
|
10355
|
+
publishMQTT: publishMQTT,
|
|
10020
10356
|
randomString: randomString,
|
|
10021
10357
|
sendAdDetectTracking: sendAdDetectTracking,
|
|
10022
10358
|
sendAdImpressionTracking: sendAdImpressionTracking,
|