stormcloud-video-player 0.8.4 → 0.8.6
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 +2 -2
- package/lib/index.cjs +330 -65
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +10 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.js +330 -65
- package/lib/index.js.map +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +331 -66
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.d.cts +7 -1
- package/lib/players/HlsPlayer.cjs +330 -65
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.d.cts +1 -1
- package/lib/players/index.cjs +330 -65
- package/lib/players/index.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.cjs +131 -52
- package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.d.cts +1 -1
- package/lib/{types-BmF_60m2.d.cts → types-CUKMIqHL.d.cts} +4 -0
- package/lib/ui/StormcloudVideoPlayer.cjs +331 -66
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.d.cts +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 +1 -1
package/lib/index.cjs
CHANGED
|
@@ -586,6 +586,7 @@ var import_react = __toESM(require("react"), 1);
|
|
|
586
586
|
var import_hls2 = __toESM(require("hls.js"), 1);
|
|
587
587
|
// src/sdk/hlsAdPlayer.ts
|
|
588
588
|
var import_hls = __toESM(require("hls.js"), 1);
|
|
589
|
+
var MAX_VAST_WRAPPER_DEPTH = 5;
|
|
589
590
|
function createHlsAdPlayer(contentVideo, options) {
|
|
590
591
|
var adPlaying = false;
|
|
591
592
|
var originalMutedState = false;
|
|
@@ -743,25 +744,91 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
743
744
|
var url = mediaFile.url.toLowerCase();
|
|
744
745
|
return type.startsWith("video/") || url.endsWith(".mp4") || url.includes(".mp4?");
|
|
745
746
|
}
|
|
747
|
+
function createEmptyTrackingUrls() {
|
|
748
|
+
return {
|
|
749
|
+
impression: [],
|
|
750
|
+
start: [],
|
|
751
|
+
firstQuartile: [],
|
|
752
|
+
midpoint: [],
|
|
753
|
+
thirdQuartile: [],
|
|
754
|
+
complete: [],
|
|
755
|
+
mute: [],
|
|
756
|
+
unmute: [],
|
|
757
|
+
pause: [],
|
|
758
|
+
resume: [],
|
|
759
|
+
fullscreen: [],
|
|
760
|
+
exitFullscreen: [],
|
|
761
|
+
skip: [],
|
|
762
|
+
error: []
|
|
763
|
+
};
|
|
764
|
+
}
|
|
765
|
+
function extractTrackingUrls(xmlDoc) {
|
|
766
|
+
var trackingUrls = createEmptyTrackingUrls();
|
|
767
|
+
xmlDoc.querySelectorAll("Impression").forEach(function(el) {
|
|
768
|
+
var _el_textContent;
|
|
769
|
+
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
770
|
+
if (url) trackingUrls.impression.push(url);
|
|
771
|
+
});
|
|
772
|
+
xmlDoc.querySelectorAll("Tracking").forEach(function(el) {
|
|
773
|
+
var _el_textContent;
|
|
774
|
+
var event = el.getAttribute("event");
|
|
775
|
+
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
776
|
+
if (event && url) {
|
|
777
|
+
var eventKey = event;
|
|
778
|
+
if (trackingUrls[eventKey]) {
|
|
779
|
+
trackingUrls[eventKey].push(url);
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
});
|
|
783
|
+
xmlDoc.querySelectorAll("Error").forEach(function(el) {
|
|
784
|
+
var _el_textContent;
|
|
785
|
+
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
786
|
+
if (url) trackingUrls.error.push(url);
|
|
787
|
+
});
|
|
788
|
+
return trackingUrls;
|
|
789
|
+
}
|
|
790
|
+
function mergeTrackingUrls(target, source) {
|
|
791
|
+
Object.keys(target).forEach(function(key) {
|
|
792
|
+
if (source[key] && source[key].length > 0) {
|
|
793
|
+
target[key] = target[key].concat(source[key]);
|
|
794
|
+
}
|
|
795
|
+
});
|
|
796
|
+
return target;
|
|
797
|
+
}
|
|
746
798
|
function parseVastXml(xmlString) {
|
|
747
799
|
try {
|
|
748
|
-
var _xmlDoc_querySelector, _xmlDoc_querySelector1,
|
|
800
|
+
var _xmlDoc_querySelector, _xmlDoc_querySelector_textContent, _xmlDoc_querySelector1, _xmlDoc_querySelector_textContent1, _xmlDoc_querySelector2, _xmlDoc_querySelector3;
|
|
749
801
|
var parser = new DOMParser();
|
|
750
802
|
var xmlDoc = parser.parseFromString(xmlString, "text/xml");
|
|
751
803
|
var parserError = xmlDoc.querySelector("parsererror");
|
|
752
804
|
if (parserError) {
|
|
753
805
|
console.error("[HlsAdPlayer] XML parsing error (malformed VAST XML):", parserError.textContent);
|
|
754
|
-
return
|
|
806
|
+
return {
|
|
807
|
+
type: "empty"
|
|
808
|
+
};
|
|
755
809
|
}
|
|
756
810
|
var adElement = xmlDoc.querySelector("Ad");
|
|
757
811
|
if (!adElement) {
|
|
758
812
|
console.warn("[HlsAdPlayer] No Ad element found in VAST XML");
|
|
759
|
-
return
|
|
813
|
+
return {
|
|
814
|
+
type: "empty"
|
|
815
|
+
};
|
|
760
816
|
}
|
|
761
817
|
var adId = adElement.getAttribute("id") || "unknown";
|
|
762
818
|
var title = ((_xmlDoc_querySelector = xmlDoc.querySelector("AdTitle")) === null || _xmlDoc_querySelector === void 0 ? void 0 : _xmlDoc_querySelector.textContent) || "Ad";
|
|
819
|
+
var clickThrough = (_xmlDoc_querySelector1 = xmlDoc.querySelector("ClickThrough")) === null || _xmlDoc_querySelector1 === void 0 ? void 0 : (_xmlDoc_querySelector_textContent = _xmlDoc_querySelector1.textContent) === null || _xmlDoc_querySelector_textContent === void 0 ? void 0 : _xmlDoc_querySelector_textContent.trim();
|
|
820
|
+
var wrapperUri = (_xmlDoc_querySelector2 = xmlDoc.querySelector("VASTAdTagURI")) === null || _xmlDoc_querySelector2 === void 0 ? void 0 : (_xmlDoc_querySelector_textContent1 = _xmlDoc_querySelector2.textContent) === null || _xmlDoc_querySelector_textContent1 === void 0 ? void 0 : _xmlDoc_querySelector_textContent1.trim();
|
|
821
|
+
if (wrapperUri) {
|
|
822
|
+
console.log("[HlsAdPlayer] VAST wrapper detected, following VASTAdTagURI: ".concat(wrapperUri));
|
|
823
|
+
return {
|
|
824
|
+
type: "wrapper",
|
|
825
|
+
vastAdTagUri: wrapperUri,
|
|
826
|
+
trackingUrls: extractTrackingUrls(xmlDoc),
|
|
827
|
+
clickThrough: clickThrough
|
|
828
|
+
};
|
|
829
|
+
}
|
|
763
830
|
var isNoAdAvailable = adId === "empty" || title.toLowerCase().includes("no ad available") || title.toLowerCase() === "no ad available";
|
|
764
|
-
var durationText = ((
|
|
831
|
+
var durationText = ((_xmlDoc_querySelector3 = xmlDoc.querySelector("Duration")) === null || _xmlDoc_querySelector3 === void 0 ? void 0 : _xmlDoc_querySelector3.textContent) || "00:00:30";
|
|
765
832
|
var durationParts = durationText.split(":");
|
|
766
833
|
var duration = parseInt(durationParts[0] || "0", 10) * 3600 + parseInt(durationParts[1] || "0", 10) * 60 + parseInt(durationParts[2] || "0", 10);
|
|
767
834
|
var mediaFileElements = xmlDoc.querySelectorAll("MediaFile");
|
|
@@ -801,57 +868,31 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
801
868
|
} else {
|
|
802
869
|
console.warn("[HlsAdPlayer] No supported media files found in VAST XML");
|
|
803
870
|
}
|
|
804
|
-
return
|
|
871
|
+
return {
|
|
872
|
+
type: "empty"
|
|
873
|
+
};
|
|
805
874
|
}
|
|
806
|
-
var trackingUrls = {
|
|
807
|
-
impression: [],
|
|
808
|
-
start: [],
|
|
809
|
-
firstQuartile: [],
|
|
810
|
-
midpoint: [],
|
|
811
|
-
thirdQuartile: [],
|
|
812
|
-
complete: [],
|
|
813
|
-
mute: [],
|
|
814
|
-
unmute: [],
|
|
815
|
-
pause: [],
|
|
816
|
-
resume: [],
|
|
817
|
-
fullscreen: [],
|
|
818
|
-
exitFullscreen: [],
|
|
819
|
-
skip: [],
|
|
820
|
-
error: []
|
|
821
|
-
};
|
|
822
|
-
xmlDoc.querySelectorAll("Impression").forEach(function(el) {
|
|
823
|
-
var _el_textContent;
|
|
824
|
-
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
825
|
-
if (url) trackingUrls.impression.push(url);
|
|
826
|
-
});
|
|
827
|
-
xmlDoc.querySelectorAll("Tracking").forEach(function(el) {
|
|
828
|
-
var _el_textContent;
|
|
829
|
-
var event = el.getAttribute("event");
|
|
830
|
-
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
831
|
-
if (event && url) {
|
|
832
|
-
var eventKey = event;
|
|
833
|
-
if (trackingUrls[eventKey]) {
|
|
834
|
-
trackingUrls[eventKey].push(url);
|
|
835
|
-
}
|
|
836
|
-
}
|
|
837
|
-
});
|
|
838
|
-
var clickThrough = (_xmlDoc_querySelector2 = xmlDoc.querySelector("ClickThrough")) === null || _xmlDoc_querySelector2 === void 0 ? void 0 : (_xmlDoc_querySelector_textContent = _xmlDoc_querySelector2.textContent) === null || _xmlDoc_querySelector_textContent === void 0 ? void 0 : _xmlDoc_querySelector_textContent.trim();
|
|
839
875
|
return {
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
876
|
+
type: "inline",
|
|
877
|
+
ad: {
|
|
878
|
+
id: adId,
|
|
879
|
+
title: title,
|
|
880
|
+
duration: duration,
|
|
881
|
+
mediaFiles: mediaFiles,
|
|
882
|
+
trackingUrls: extractTrackingUrls(xmlDoc),
|
|
883
|
+
clickThrough: clickThrough
|
|
884
|
+
}
|
|
846
885
|
};
|
|
847
886
|
} catch (error) {
|
|
848
887
|
console.error("[HlsAdPlayer] Error parsing VAST XML:", error);
|
|
849
|
-
return
|
|
888
|
+
return {
|
|
889
|
+
type: "empty"
|
|
890
|
+
};
|
|
850
891
|
}
|
|
851
892
|
}
|
|
852
|
-
function
|
|
893
|
+
function fetchVastXml(vastTagUrl) {
|
|
853
894
|
return _async_to_generator(function() {
|
|
854
|
-
var response
|
|
895
|
+
var response;
|
|
855
896
|
return _ts_generator(this, function(_state) {
|
|
856
897
|
switch(_state.label){
|
|
857
898
|
case 0:
|
|
@@ -872,20 +913,58 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
872
913
|
throw new Error("Failed to fetch VAST: ".concat(response.statusText));
|
|
873
914
|
}
|
|
874
915
|
return [
|
|
875
|
-
|
|
916
|
+
2,
|
|
876
917
|
response.text()
|
|
877
918
|
];
|
|
878
|
-
|
|
919
|
+
}
|
|
920
|
+
});
|
|
921
|
+
})();
|
|
922
|
+
}
|
|
923
|
+
function fetchAndParseVastAd(_0) {
|
|
924
|
+
return _async_to_generator(function(vastTagUrl) {
|
|
925
|
+
var depth, accumulatedTracking, vastXml, parsed;
|
|
926
|
+
var _arguments = arguments;
|
|
927
|
+
return _ts_generator(this, function(_state) {
|
|
928
|
+
switch(_state.label){
|
|
929
|
+
case 0:
|
|
930
|
+
depth = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : 0, accumulatedTracking = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : createEmptyTrackingUrls();
|
|
931
|
+
return [
|
|
932
|
+
4,
|
|
933
|
+
fetchVastXml(vastTagUrl)
|
|
934
|
+
];
|
|
935
|
+
case 1:
|
|
879
936
|
vastXml = _state.sent();
|
|
880
937
|
console.log("[HlsAdPlayer] VAST XML received");
|
|
881
938
|
console.log("[HlsAdPlayer] VAST XML content (first 2000 chars):", vastXml.substring(0, 2e3));
|
|
939
|
+
parsed = parseVastXml(vastXml);
|
|
940
|
+
if (parsed.type === "empty") {
|
|
941
|
+
return [
|
|
942
|
+
2,
|
|
943
|
+
null
|
|
944
|
+
];
|
|
945
|
+
}
|
|
946
|
+
if (parsed.type === "wrapper") {
|
|
947
|
+
if (depth >= MAX_VAST_WRAPPER_DEPTH) {
|
|
948
|
+
console.warn("[HlsAdPlayer] VAST wrapper depth limit (".concat(MAX_VAST_WRAPPER_DEPTH, ") reached, aborting redirect chain"));
|
|
949
|
+
return [
|
|
950
|
+
2,
|
|
951
|
+
null
|
|
952
|
+
];
|
|
953
|
+
}
|
|
954
|
+
mergeTrackingUrls(accumulatedTracking, parsed.trackingUrls);
|
|
955
|
+
return [
|
|
956
|
+
2,
|
|
957
|
+
fetchAndParseVastAd(parsed.vastAdTagUri, depth + 1, accumulatedTracking)
|
|
958
|
+
];
|
|
959
|
+
}
|
|
960
|
+
mergeTrackingUrls(parsed.ad.trackingUrls, accumulatedTracking);
|
|
882
961
|
return [
|
|
883
962
|
2,
|
|
884
|
-
|
|
963
|
+
parsed.ad
|
|
885
964
|
];
|
|
886
965
|
}
|
|
887
966
|
});
|
|
888
|
-
})();
|
|
967
|
+
}).apply(this, arguments);
|
|
889
968
|
}
|
|
890
969
|
function createAdVideoElement() {
|
|
891
970
|
var video = document.createElement("video");
|
|
@@ -2448,6 +2527,166 @@ function initializePolyfills() {
|
|
|
2448
2527
|
polyfillTextEncoder();
|
|
2449
2528
|
polyfillPromiseFinally();
|
|
2450
2529
|
}
|
|
2530
|
+
// src/utils/vastMacros.ts
|
|
2531
|
+
function generateCorrelator() {
|
|
2532
|
+
if (typeof crypto !== "undefined" && crypto.getRandomValues) {
|
|
2533
|
+
try {
|
|
2534
|
+
var _buf_, _buf_1;
|
|
2535
|
+
var buf = new Uint32Array(2);
|
|
2536
|
+
crypto.getRandomValues(buf);
|
|
2537
|
+
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);
|
|
2538
|
+
if (value > 0) {
|
|
2539
|
+
return String(value);
|
|
2540
|
+
}
|
|
2541
|
+
} catch (unused) {}
|
|
2542
|
+
}
|
|
2543
|
+
return String(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1);
|
|
2544
|
+
}
|
|
2545
|
+
var UNEXPANDED_MACRO_PATTERN = /^(\[[^\]]*\]|\{[^}]*\}|%%[^%]*%%)$/;
|
|
2546
|
+
function applyVastMacros(baseUrl, ctx) {
|
|
2547
|
+
var url;
|
|
2548
|
+
try {
|
|
2549
|
+
url = new URL(baseUrl);
|
|
2550
|
+
} catch (unused) {
|
|
2551
|
+
return replaceCorrelatorFallback(baseUrl, ctx.correlator);
|
|
2552
|
+
}
|
|
2553
|
+
var params = url.searchParams;
|
|
2554
|
+
params.set("correlator", ctx.correlator);
|
|
2555
|
+
params.set("scor", ctx.streamCorrelator);
|
|
2556
|
+
if (ctx.pod != null) {
|
|
2557
|
+
params.set("pod", String(ctx.pod));
|
|
2558
|
+
}
|
|
2559
|
+
if (ctx.adPosition != null) {
|
|
2560
|
+
params.set("ppos", String(ctx.adPosition));
|
|
2561
|
+
}
|
|
2562
|
+
if (ctx.pageUrl) {
|
|
2563
|
+
params.set("url", ctx.pageUrl);
|
|
2564
|
+
params.set("description_url", ctx.pageUrl);
|
|
2565
|
+
}
|
|
2566
|
+
if (ctx.adWillPlayMuted != null) {
|
|
2567
|
+
params.set("vpmute", ctx.adWillPlayMuted ? "1" : "0");
|
|
2568
|
+
}
|
|
2569
|
+
if (ctx.adWillAutoPlay != null) {
|
|
2570
|
+
params.set("vpa", ctx.adWillAutoPlay ? "auto" : "click");
|
|
2571
|
+
}
|
|
2572
|
+
if (ctx.deviceId && ctx.deviceIdType) {
|
|
2573
|
+
params.set("rdid", ctx.deviceId);
|
|
2574
|
+
params.set("idtype", ctx.deviceIdType);
|
|
2575
|
+
params.set("is_lat", ctx.limitAdTracking ? "1" : "0");
|
|
2576
|
+
} else {
|
|
2577
|
+
params.delete("rdid");
|
|
2578
|
+
params.delete("idtype");
|
|
2579
|
+
params.delete("is_lat");
|
|
2580
|
+
}
|
|
2581
|
+
var consent = ctx.consent;
|
|
2582
|
+
if ((consent === null || consent === void 0 ? void 0 : consent.gdpr) != null) {
|
|
2583
|
+
params.set("gdpr", consent.gdpr);
|
|
2584
|
+
}
|
|
2585
|
+
if ((consent === null || consent === void 0 ? void 0 : consent.gdprConsent) != null) {
|
|
2586
|
+
params.set("gdpr_consent", consent.gdprConsent);
|
|
2587
|
+
}
|
|
2588
|
+
if ((consent === null || consent === void 0 ? void 0 : consent.usPrivacy) != null) {
|
|
2589
|
+
params.set("us_privacy", consent.usPrivacy);
|
|
2590
|
+
}
|
|
2591
|
+
if (ctx.adTest) {
|
|
2592
|
+
params.set("adtest", "on");
|
|
2593
|
+
}
|
|
2594
|
+
var staleKeys = [];
|
|
2595
|
+
params.forEach(function(value, key) {
|
|
2596
|
+
if (UNEXPANDED_MACRO_PATTERN.test(value)) {
|
|
2597
|
+
staleKeys.push(key);
|
|
2598
|
+
}
|
|
2599
|
+
});
|
|
2600
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
2601
|
+
try {
|
|
2602
|
+
for(var _iterator = staleKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
2603
|
+
var key = _step.value;
|
|
2604
|
+
params.delete(key);
|
|
2605
|
+
}
|
|
2606
|
+
} catch (err) {
|
|
2607
|
+
_didIteratorError = true;
|
|
2608
|
+
_iteratorError = err;
|
|
2609
|
+
} finally{
|
|
2610
|
+
try {
|
|
2611
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
2612
|
+
_iterator.return();
|
|
2613
|
+
}
|
|
2614
|
+
} finally{
|
|
2615
|
+
if (_didIteratorError) {
|
|
2616
|
+
throw _iteratorError;
|
|
2617
|
+
}
|
|
2618
|
+
}
|
|
2619
|
+
}
|
|
2620
|
+
return url.toString();
|
|
2621
|
+
}
|
|
2622
|
+
function replaceCorrelatorFallback(baseUrl, correlator) {
|
|
2623
|
+
var correlatorRegex = /([?&])correlator=([^&]*)/;
|
|
2624
|
+
if (correlatorRegex.test(baseUrl)) {
|
|
2625
|
+
return baseUrl.replace(correlatorRegex, "$1correlator=".concat(correlator));
|
|
2626
|
+
}
|
|
2627
|
+
var sep = baseUrl.includes("?") ? "&" : "?";
|
|
2628
|
+
return "".concat(baseUrl).concat(sep, "correlator=").concat(correlator);
|
|
2629
|
+
}
|
|
2630
|
+
function fetchConsentSignals() {
|
|
2631
|
+
var timeoutMs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 1500;
|
|
2632
|
+
var signals = {};
|
|
2633
|
+
if (typeof window === "undefined") {
|
|
2634
|
+
return Promise.resolve(signals);
|
|
2635
|
+
}
|
|
2636
|
+
var tasks = [];
|
|
2637
|
+
var tcfApi = window.__tcfapi;
|
|
2638
|
+
if (typeof tcfApi === "function") {
|
|
2639
|
+
tasks.push(new Promise(function(resolve) {
|
|
2640
|
+
var settled = false;
|
|
2641
|
+
try {
|
|
2642
|
+
tcfApi("addEventListener", 2, function(tcData, success) {
|
|
2643
|
+
if (settled) return;
|
|
2644
|
+
if (success && tcData && (tcData.eventStatus === "tcloaded" || tcData.eventStatus === "useractioncomplete")) {
|
|
2645
|
+
settled = true;
|
|
2646
|
+
signals.gdpr = tcData.gdprApplies ? "1" : "0";
|
|
2647
|
+
if (typeof tcData.tcString === "string" && tcData.tcString) {
|
|
2648
|
+
signals.gdprConsent = tcData.tcString;
|
|
2649
|
+
}
|
|
2650
|
+
try {
|
|
2651
|
+
tcfApi("removeEventListener", 2, function() {}, tcData.listenerId);
|
|
2652
|
+
} catch (unused) {}
|
|
2653
|
+
resolve();
|
|
2654
|
+
}
|
|
2655
|
+
});
|
|
2656
|
+
} catch (unused) {
|
|
2657
|
+
resolve();
|
|
2658
|
+
}
|
|
2659
|
+
setTimeout(function() {
|
|
2660
|
+
if (!settled) {
|
|
2661
|
+
settled = true;
|
|
2662
|
+
resolve();
|
|
2663
|
+
}
|
|
2664
|
+
}, timeoutMs);
|
|
2665
|
+
}));
|
|
2666
|
+
}
|
|
2667
|
+
var uspApi = window.__uspapi;
|
|
2668
|
+
if (typeof uspApi === "function") {
|
|
2669
|
+
tasks.push(new Promise(function(resolve) {
|
|
2670
|
+
try {
|
|
2671
|
+
uspApi("getUSPData", 1, function(data, success) {
|
|
2672
|
+
if (success && typeof (data === null || data === void 0 ? void 0 : data.uspString) === "string" && data.uspString) {
|
|
2673
|
+
signals.usPrivacy = data.uspString;
|
|
2674
|
+
}
|
|
2675
|
+
resolve();
|
|
2676
|
+
});
|
|
2677
|
+
} catch (unused) {
|
|
2678
|
+
resolve();
|
|
2679
|
+
}
|
|
2680
|
+
setTimeout(resolve, timeoutMs);
|
|
2681
|
+
}));
|
|
2682
|
+
}
|
|
2683
|
+
if (tasks.length === 0) {
|
|
2684
|
+
return Promise.resolve(signals);
|
|
2685
|
+
}
|
|
2686
|
+
return Promise.all(tasks).then(function() {
|
|
2687
|
+
return signals;
|
|
2688
|
+
});
|
|
2689
|
+
}
|
|
2451
2690
|
// src/utils/browserCompat.ts
|
|
2452
2691
|
function getChromeVersion(ua) {
|
|
2453
2692
|
var match = ua.match(/Chrome\/(\d+)/);
|
|
@@ -2696,6 +2935,11 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
2696
2935
|
this.preloadPoolLoopRunning = false;
|
|
2697
2936
|
this.adDetectSentForCurrentBreak = false;
|
|
2698
2937
|
this.palPlaybackStarted = false;
|
|
2938
|
+
this.streamCorrelator = generateCorrelator();
|
|
2939
|
+
this.consentSignals = {};
|
|
2940
|
+
this.podCounter = 0;
|
|
2941
|
+
this.podAssignedByPrefetch = false;
|
|
2942
|
+
this.adRequestPositionInBreak = 0;
|
|
2699
2943
|
this.continuousFetchLoopRunning = false;
|
|
2700
2944
|
initializePolyfills();
|
|
2701
2945
|
var browserOverrides = getBrowserConfigOverrides();
|
|
@@ -2768,6 +3012,9 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
2768
3012
|
adWillPlayMuted: !!this.config.muted,
|
|
2769
3013
|
continuousPlayback: (_this_config_lowLatencyMode = this.config.lowLatencyMode) !== null && _this_config_lowLatencyMode !== void 0 ? _this_config_lowLatencyMode : false
|
|
2770
3014
|
}).catch(function() {});
|
|
3015
|
+
fetchConsentSignals().then(function(signals) {
|
|
3016
|
+
_this.consentSignals = signals;
|
|
3017
|
+
}).catch(function() {});
|
|
2771
3018
|
this.initializeTracking();
|
|
2772
3019
|
if (!this.shouldUseNativeHls()) return [
|
|
2773
3020
|
3,
|
|
@@ -5064,25 +5311,35 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5064
5311
|
return this.getRemainingAdMs();
|
|
5065
5312
|
}
|
|
5066
5313
|
},
|
|
5314
|
+
{
|
|
5315
|
+
key: "beginNewAdPod",
|
|
5316
|
+
value: function beginNewAdPod() {
|
|
5317
|
+
this.podCounter++;
|
|
5318
|
+
this.adRequestPositionInBreak = 0;
|
|
5319
|
+
}
|
|
5320
|
+
},
|
|
5067
5321
|
{
|
|
5068
5322
|
key: "generateVastUrlsWithCorrelators",
|
|
5069
5323
|
value: function generateVastUrlsWithCorrelators(baseUrl, count) {
|
|
5070
5324
|
var urls = [];
|
|
5071
|
-
var baseTimestamp = Date.now();
|
|
5072
5325
|
for(var i = 0; i < count; i++){
|
|
5073
|
-
|
|
5074
|
-
var
|
|
5075
|
-
var
|
|
5076
|
-
|
|
5077
|
-
|
|
5078
|
-
|
|
5079
|
-
|
|
5080
|
-
|
|
5081
|
-
|
|
5082
|
-
|
|
5083
|
-
|
|
5084
|
-
|
|
5085
|
-
|
|
5326
|
+
this.adRequestPositionInBreak++;
|
|
5327
|
+
var adWillPlayMuted = this.inAdBreak ? this.adPlayer.getOriginalMutedState() : this.video.muted;
|
|
5328
|
+
var urlWithMacros = applyVastMacros(baseUrl, {
|
|
5329
|
+
correlator: generateCorrelator(),
|
|
5330
|
+
streamCorrelator: this.streamCorrelator,
|
|
5331
|
+
pod: this.podCounter > 0 ? this.podCounter : void 0,
|
|
5332
|
+
adPosition: this.adRequestPositionInBreak,
|
|
5333
|
+
pageUrl: typeof window !== "undefined" ? window.location.href : void 0,
|
|
5334
|
+
adWillPlayMuted: adWillPlayMuted,
|
|
5335
|
+
adWillAutoPlay: !!this.config.autoplay,
|
|
5336
|
+
deviceId: this.config.deviceId,
|
|
5337
|
+
deviceIdType: this.config.deviceIdType,
|
|
5338
|
+
limitAdTracking: this.config.limitAdTracking,
|
|
5339
|
+
adTest: this.config.adTest,
|
|
5340
|
+
consent: this.consentSignals
|
|
5341
|
+
});
|
|
5342
|
+
urls.push(this.palNonce.injectNonce(urlWithMacros));
|
|
5086
5343
|
}
|
|
5087
5344
|
return urls;
|
|
5088
5345
|
}
|
|
@@ -5152,6 +5409,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5152
5409
|
}
|
|
5153
5410
|
return;
|
|
5154
5411
|
}
|
|
5412
|
+
this.beginNewAdPod();
|
|
5413
|
+
this.podAssignedByPrefetch = true;
|
|
5155
5414
|
var urlsToPregenerate = 5;
|
|
5156
5415
|
var generatedUrls = this.generateVastUrlsWithCorrelators(baseVastUrl, urlsToPregenerate);
|
|
5157
5416
|
this.pendingAdBreak = _object_spread_props(_object_spread({
|
|
@@ -5189,6 +5448,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5189
5448
|
}
|
|
5190
5449
|
this.pendingAdBreak = null;
|
|
5191
5450
|
this.pendingScte35CueKey = void 0;
|
|
5451
|
+
this.podAssignedByPrefetch = false;
|
|
5192
5452
|
}
|
|
5193
5453
|
},
|
|
5194
5454
|
{
|
|
@@ -5625,6 +5885,11 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5625
5885
|
this.continuousFetchingActive = true;
|
|
5626
5886
|
this.isShowingPlaceholder = false;
|
|
5627
5887
|
this.totalAdRequestsInBreak = 0;
|
|
5888
|
+
if (this.podAssignedByPrefetch) {
|
|
5889
|
+
this.podAssignedByPrefetch = false;
|
|
5890
|
+
} else {
|
|
5891
|
+
this.beginNewAdPod();
|
|
5892
|
+
}
|
|
5628
5893
|
currentMuted = this.video.muted;
|
|
5629
5894
|
currentVolume = this.video.volume;
|
|
5630
5895
|
this.adPlayer.updateOriginalMutedState(currentMuted, currentVolume);
|