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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component } from 'react';
|
|
2
|
-
import { S as StormcloudVideoPlayerConfig } from '../types-
|
|
2
|
+
import { S as StormcloudVideoPlayerConfig } from '../types-CUKMIqHL.cjs';
|
|
3
3
|
|
|
4
4
|
interface HlsPlayerProps extends StormcloudVideoPlayerConfig {
|
|
5
5
|
onMount?: (player: any) => void;
|
package/lib/players/index.cjs
CHANGED
|
@@ -438,6 +438,7 @@ var import_react2 = require("react");
|
|
|
438
438
|
var import_hls2 = __toESM(require("hls.js"), 1);
|
|
439
439
|
// src/sdk/hlsAdPlayer.ts
|
|
440
440
|
var import_hls = __toESM(require("hls.js"), 1);
|
|
441
|
+
var MAX_VAST_WRAPPER_DEPTH = 5;
|
|
441
442
|
function createHlsAdPlayer(contentVideo, options) {
|
|
442
443
|
var adPlaying = false;
|
|
443
444
|
var originalMutedState = false;
|
|
@@ -595,25 +596,91 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
595
596
|
var url = mediaFile.url.toLowerCase();
|
|
596
597
|
return type.startsWith("video/") || url.endsWith(".mp4") || url.includes(".mp4?");
|
|
597
598
|
}
|
|
599
|
+
function createEmptyTrackingUrls() {
|
|
600
|
+
return {
|
|
601
|
+
impression: [],
|
|
602
|
+
start: [],
|
|
603
|
+
firstQuartile: [],
|
|
604
|
+
midpoint: [],
|
|
605
|
+
thirdQuartile: [],
|
|
606
|
+
complete: [],
|
|
607
|
+
mute: [],
|
|
608
|
+
unmute: [],
|
|
609
|
+
pause: [],
|
|
610
|
+
resume: [],
|
|
611
|
+
fullscreen: [],
|
|
612
|
+
exitFullscreen: [],
|
|
613
|
+
skip: [],
|
|
614
|
+
error: []
|
|
615
|
+
};
|
|
616
|
+
}
|
|
617
|
+
function extractTrackingUrls(xmlDoc) {
|
|
618
|
+
var trackingUrls = createEmptyTrackingUrls();
|
|
619
|
+
xmlDoc.querySelectorAll("Impression").forEach(function(el) {
|
|
620
|
+
var _el_textContent;
|
|
621
|
+
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
622
|
+
if (url) trackingUrls.impression.push(url);
|
|
623
|
+
});
|
|
624
|
+
xmlDoc.querySelectorAll("Tracking").forEach(function(el) {
|
|
625
|
+
var _el_textContent;
|
|
626
|
+
var event = el.getAttribute("event");
|
|
627
|
+
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
628
|
+
if (event && url) {
|
|
629
|
+
var eventKey = event;
|
|
630
|
+
if (trackingUrls[eventKey]) {
|
|
631
|
+
trackingUrls[eventKey].push(url);
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
});
|
|
635
|
+
xmlDoc.querySelectorAll("Error").forEach(function(el) {
|
|
636
|
+
var _el_textContent;
|
|
637
|
+
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
638
|
+
if (url) trackingUrls.error.push(url);
|
|
639
|
+
});
|
|
640
|
+
return trackingUrls;
|
|
641
|
+
}
|
|
642
|
+
function mergeTrackingUrls(target, source) {
|
|
643
|
+
Object.keys(target).forEach(function(key) {
|
|
644
|
+
if (source[key] && source[key].length > 0) {
|
|
645
|
+
target[key] = target[key].concat(source[key]);
|
|
646
|
+
}
|
|
647
|
+
});
|
|
648
|
+
return target;
|
|
649
|
+
}
|
|
598
650
|
function parseVastXml(xmlString) {
|
|
599
651
|
try {
|
|
600
|
-
var _xmlDoc_querySelector, _xmlDoc_querySelector1,
|
|
652
|
+
var _xmlDoc_querySelector, _xmlDoc_querySelector_textContent, _xmlDoc_querySelector1, _xmlDoc_querySelector_textContent1, _xmlDoc_querySelector2, _xmlDoc_querySelector3;
|
|
601
653
|
var parser = new DOMParser();
|
|
602
654
|
var xmlDoc = parser.parseFromString(xmlString, "text/xml");
|
|
603
655
|
var parserError = xmlDoc.querySelector("parsererror");
|
|
604
656
|
if (parserError) {
|
|
605
657
|
console.error("[HlsAdPlayer] XML parsing error (malformed VAST XML):", parserError.textContent);
|
|
606
|
-
return
|
|
658
|
+
return {
|
|
659
|
+
type: "empty"
|
|
660
|
+
};
|
|
607
661
|
}
|
|
608
662
|
var adElement = xmlDoc.querySelector("Ad");
|
|
609
663
|
if (!adElement) {
|
|
610
664
|
console.warn("[HlsAdPlayer] No Ad element found in VAST XML");
|
|
611
|
-
return
|
|
665
|
+
return {
|
|
666
|
+
type: "empty"
|
|
667
|
+
};
|
|
612
668
|
}
|
|
613
669
|
var adId = adElement.getAttribute("id") || "unknown";
|
|
614
670
|
var title = ((_xmlDoc_querySelector = xmlDoc.querySelector("AdTitle")) === null || _xmlDoc_querySelector === void 0 ? void 0 : _xmlDoc_querySelector.textContent) || "Ad";
|
|
671
|
+
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();
|
|
672
|
+
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();
|
|
673
|
+
if (wrapperUri) {
|
|
674
|
+
console.log("[HlsAdPlayer] VAST wrapper detected, following VASTAdTagURI: ".concat(wrapperUri));
|
|
675
|
+
return {
|
|
676
|
+
type: "wrapper",
|
|
677
|
+
vastAdTagUri: wrapperUri,
|
|
678
|
+
trackingUrls: extractTrackingUrls(xmlDoc),
|
|
679
|
+
clickThrough: clickThrough
|
|
680
|
+
};
|
|
681
|
+
}
|
|
615
682
|
var isNoAdAvailable = adId === "empty" || title.toLowerCase().includes("no ad available") || title.toLowerCase() === "no ad available";
|
|
616
|
-
var durationText = ((
|
|
683
|
+
var durationText = ((_xmlDoc_querySelector3 = xmlDoc.querySelector("Duration")) === null || _xmlDoc_querySelector3 === void 0 ? void 0 : _xmlDoc_querySelector3.textContent) || "00:00:30";
|
|
617
684
|
var durationParts = durationText.split(":");
|
|
618
685
|
var duration = parseInt(durationParts[0] || "0", 10) * 3600 + parseInt(durationParts[1] || "0", 10) * 60 + parseInt(durationParts[2] || "0", 10);
|
|
619
686
|
var mediaFileElements = xmlDoc.querySelectorAll("MediaFile");
|
|
@@ -653,57 +720,31 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
653
720
|
} else {
|
|
654
721
|
console.warn("[HlsAdPlayer] No supported media files found in VAST XML");
|
|
655
722
|
}
|
|
656
|
-
return
|
|
723
|
+
return {
|
|
724
|
+
type: "empty"
|
|
725
|
+
};
|
|
657
726
|
}
|
|
658
|
-
var trackingUrls = {
|
|
659
|
-
impression: [],
|
|
660
|
-
start: [],
|
|
661
|
-
firstQuartile: [],
|
|
662
|
-
midpoint: [],
|
|
663
|
-
thirdQuartile: [],
|
|
664
|
-
complete: [],
|
|
665
|
-
mute: [],
|
|
666
|
-
unmute: [],
|
|
667
|
-
pause: [],
|
|
668
|
-
resume: [],
|
|
669
|
-
fullscreen: [],
|
|
670
|
-
exitFullscreen: [],
|
|
671
|
-
skip: [],
|
|
672
|
-
error: []
|
|
673
|
-
};
|
|
674
|
-
xmlDoc.querySelectorAll("Impression").forEach(function(el) {
|
|
675
|
-
var _el_textContent;
|
|
676
|
-
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
677
|
-
if (url) trackingUrls.impression.push(url);
|
|
678
|
-
});
|
|
679
|
-
xmlDoc.querySelectorAll("Tracking").forEach(function(el) {
|
|
680
|
-
var _el_textContent;
|
|
681
|
-
var event = el.getAttribute("event");
|
|
682
|
-
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
683
|
-
if (event && url) {
|
|
684
|
-
var eventKey = event;
|
|
685
|
-
if (trackingUrls[eventKey]) {
|
|
686
|
-
trackingUrls[eventKey].push(url);
|
|
687
|
-
}
|
|
688
|
-
}
|
|
689
|
-
});
|
|
690
|
-
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();
|
|
691
727
|
return {
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
728
|
+
type: "inline",
|
|
729
|
+
ad: {
|
|
730
|
+
id: adId,
|
|
731
|
+
title: title,
|
|
732
|
+
duration: duration,
|
|
733
|
+
mediaFiles: mediaFiles,
|
|
734
|
+
trackingUrls: extractTrackingUrls(xmlDoc),
|
|
735
|
+
clickThrough: clickThrough
|
|
736
|
+
}
|
|
698
737
|
};
|
|
699
738
|
} catch (error) {
|
|
700
739
|
console.error("[HlsAdPlayer] Error parsing VAST XML:", error);
|
|
701
|
-
return
|
|
740
|
+
return {
|
|
741
|
+
type: "empty"
|
|
742
|
+
};
|
|
702
743
|
}
|
|
703
744
|
}
|
|
704
|
-
function
|
|
745
|
+
function fetchVastXml(vastTagUrl) {
|
|
705
746
|
return _async_to_generator(function() {
|
|
706
|
-
var response
|
|
747
|
+
var response;
|
|
707
748
|
return _ts_generator(this, function(_state) {
|
|
708
749
|
switch(_state.label){
|
|
709
750
|
case 0:
|
|
@@ -724,20 +765,58 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
724
765
|
throw new Error("Failed to fetch VAST: ".concat(response.statusText));
|
|
725
766
|
}
|
|
726
767
|
return [
|
|
727
|
-
|
|
768
|
+
2,
|
|
728
769
|
response.text()
|
|
729
770
|
];
|
|
730
|
-
|
|
771
|
+
}
|
|
772
|
+
});
|
|
773
|
+
})();
|
|
774
|
+
}
|
|
775
|
+
function fetchAndParseVastAd(_0) {
|
|
776
|
+
return _async_to_generator(function(vastTagUrl) {
|
|
777
|
+
var depth, accumulatedTracking, vastXml, parsed;
|
|
778
|
+
var _arguments = arguments;
|
|
779
|
+
return _ts_generator(this, function(_state) {
|
|
780
|
+
switch(_state.label){
|
|
781
|
+
case 0:
|
|
782
|
+
depth = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : 0, accumulatedTracking = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : createEmptyTrackingUrls();
|
|
783
|
+
return [
|
|
784
|
+
4,
|
|
785
|
+
fetchVastXml(vastTagUrl)
|
|
786
|
+
];
|
|
787
|
+
case 1:
|
|
731
788
|
vastXml = _state.sent();
|
|
732
789
|
console.log("[HlsAdPlayer] VAST XML received");
|
|
733
790
|
console.log("[HlsAdPlayer] VAST XML content (first 2000 chars):", vastXml.substring(0, 2e3));
|
|
791
|
+
parsed = parseVastXml(vastXml);
|
|
792
|
+
if (parsed.type === "empty") {
|
|
793
|
+
return [
|
|
794
|
+
2,
|
|
795
|
+
null
|
|
796
|
+
];
|
|
797
|
+
}
|
|
798
|
+
if (parsed.type === "wrapper") {
|
|
799
|
+
if (depth >= MAX_VAST_WRAPPER_DEPTH) {
|
|
800
|
+
console.warn("[HlsAdPlayer] VAST wrapper depth limit (".concat(MAX_VAST_WRAPPER_DEPTH, ") reached, aborting redirect chain"));
|
|
801
|
+
return [
|
|
802
|
+
2,
|
|
803
|
+
null
|
|
804
|
+
];
|
|
805
|
+
}
|
|
806
|
+
mergeTrackingUrls(accumulatedTracking, parsed.trackingUrls);
|
|
807
|
+
return [
|
|
808
|
+
2,
|
|
809
|
+
fetchAndParseVastAd(parsed.vastAdTagUri, depth + 1, accumulatedTracking)
|
|
810
|
+
];
|
|
811
|
+
}
|
|
812
|
+
mergeTrackingUrls(parsed.ad.trackingUrls, accumulatedTracking);
|
|
734
813
|
return [
|
|
735
814
|
2,
|
|
736
|
-
|
|
815
|
+
parsed.ad
|
|
737
816
|
];
|
|
738
817
|
}
|
|
739
818
|
});
|
|
740
|
-
})();
|
|
819
|
+
}).apply(this, arguments);
|
|
741
820
|
}
|
|
742
821
|
function createAdVideoElement() {
|
|
743
822
|
var video = document.createElement("video");
|
|
@@ -2276,6 +2355,166 @@ function initializePolyfills() {
|
|
|
2276
2355
|
polyfillTextEncoder();
|
|
2277
2356
|
polyfillPromiseFinally();
|
|
2278
2357
|
}
|
|
2358
|
+
// src/utils/vastMacros.ts
|
|
2359
|
+
function generateCorrelator() {
|
|
2360
|
+
if (typeof crypto !== "undefined" && crypto.getRandomValues) {
|
|
2361
|
+
try {
|
|
2362
|
+
var _buf_, _buf_1;
|
|
2363
|
+
var buf = new Uint32Array(2);
|
|
2364
|
+
crypto.getRandomValues(buf);
|
|
2365
|
+
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);
|
|
2366
|
+
if (value > 0) {
|
|
2367
|
+
return String(value);
|
|
2368
|
+
}
|
|
2369
|
+
} catch (unused) {}
|
|
2370
|
+
}
|
|
2371
|
+
return String(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1);
|
|
2372
|
+
}
|
|
2373
|
+
var UNEXPANDED_MACRO_PATTERN = /^(\[[^\]]*\]|\{[^}]*\}|%%[^%]*%%)$/;
|
|
2374
|
+
function applyVastMacros(baseUrl, ctx) {
|
|
2375
|
+
var url;
|
|
2376
|
+
try {
|
|
2377
|
+
url = new URL(baseUrl);
|
|
2378
|
+
} catch (unused) {
|
|
2379
|
+
return replaceCorrelatorFallback(baseUrl, ctx.correlator);
|
|
2380
|
+
}
|
|
2381
|
+
var params = url.searchParams;
|
|
2382
|
+
params.set("correlator", ctx.correlator);
|
|
2383
|
+
params.set("scor", ctx.streamCorrelator);
|
|
2384
|
+
if (ctx.pod != null) {
|
|
2385
|
+
params.set("pod", String(ctx.pod));
|
|
2386
|
+
}
|
|
2387
|
+
if (ctx.adPosition != null) {
|
|
2388
|
+
params.set("ppos", String(ctx.adPosition));
|
|
2389
|
+
}
|
|
2390
|
+
if (ctx.pageUrl) {
|
|
2391
|
+
params.set("url", ctx.pageUrl);
|
|
2392
|
+
params.set("description_url", ctx.pageUrl);
|
|
2393
|
+
}
|
|
2394
|
+
if (ctx.adWillPlayMuted != null) {
|
|
2395
|
+
params.set("vpmute", ctx.adWillPlayMuted ? "1" : "0");
|
|
2396
|
+
}
|
|
2397
|
+
if (ctx.adWillAutoPlay != null) {
|
|
2398
|
+
params.set("vpa", ctx.adWillAutoPlay ? "auto" : "click");
|
|
2399
|
+
}
|
|
2400
|
+
if (ctx.deviceId && ctx.deviceIdType) {
|
|
2401
|
+
params.set("rdid", ctx.deviceId);
|
|
2402
|
+
params.set("idtype", ctx.deviceIdType);
|
|
2403
|
+
params.set("is_lat", ctx.limitAdTracking ? "1" : "0");
|
|
2404
|
+
} else {
|
|
2405
|
+
params.delete("rdid");
|
|
2406
|
+
params.delete("idtype");
|
|
2407
|
+
params.delete("is_lat");
|
|
2408
|
+
}
|
|
2409
|
+
var consent = ctx.consent;
|
|
2410
|
+
if ((consent === null || consent === void 0 ? void 0 : consent.gdpr) != null) {
|
|
2411
|
+
params.set("gdpr", consent.gdpr);
|
|
2412
|
+
}
|
|
2413
|
+
if ((consent === null || consent === void 0 ? void 0 : consent.gdprConsent) != null) {
|
|
2414
|
+
params.set("gdpr_consent", consent.gdprConsent);
|
|
2415
|
+
}
|
|
2416
|
+
if ((consent === null || consent === void 0 ? void 0 : consent.usPrivacy) != null) {
|
|
2417
|
+
params.set("us_privacy", consent.usPrivacy);
|
|
2418
|
+
}
|
|
2419
|
+
if (ctx.adTest) {
|
|
2420
|
+
params.set("adtest", "on");
|
|
2421
|
+
}
|
|
2422
|
+
var staleKeys = [];
|
|
2423
|
+
params.forEach(function(value, key) {
|
|
2424
|
+
if (UNEXPANDED_MACRO_PATTERN.test(value)) {
|
|
2425
|
+
staleKeys.push(key);
|
|
2426
|
+
}
|
|
2427
|
+
});
|
|
2428
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
2429
|
+
try {
|
|
2430
|
+
for(var _iterator = staleKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
2431
|
+
var key = _step.value;
|
|
2432
|
+
params.delete(key);
|
|
2433
|
+
}
|
|
2434
|
+
} catch (err) {
|
|
2435
|
+
_didIteratorError = true;
|
|
2436
|
+
_iteratorError = err;
|
|
2437
|
+
} finally{
|
|
2438
|
+
try {
|
|
2439
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
2440
|
+
_iterator.return();
|
|
2441
|
+
}
|
|
2442
|
+
} finally{
|
|
2443
|
+
if (_didIteratorError) {
|
|
2444
|
+
throw _iteratorError;
|
|
2445
|
+
}
|
|
2446
|
+
}
|
|
2447
|
+
}
|
|
2448
|
+
return url.toString();
|
|
2449
|
+
}
|
|
2450
|
+
function replaceCorrelatorFallback(baseUrl, correlator) {
|
|
2451
|
+
var correlatorRegex = /([?&])correlator=([^&]*)/;
|
|
2452
|
+
if (correlatorRegex.test(baseUrl)) {
|
|
2453
|
+
return baseUrl.replace(correlatorRegex, "$1correlator=".concat(correlator));
|
|
2454
|
+
}
|
|
2455
|
+
var sep = baseUrl.includes("?") ? "&" : "?";
|
|
2456
|
+
return "".concat(baseUrl).concat(sep, "correlator=").concat(correlator);
|
|
2457
|
+
}
|
|
2458
|
+
function fetchConsentSignals() {
|
|
2459
|
+
var timeoutMs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 1500;
|
|
2460
|
+
var signals = {};
|
|
2461
|
+
if (typeof window === "undefined") {
|
|
2462
|
+
return Promise.resolve(signals);
|
|
2463
|
+
}
|
|
2464
|
+
var tasks = [];
|
|
2465
|
+
var tcfApi = window.__tcfapi;
|
|
2466
|
+
if (typeof tcfApi === "function") {
|
|
2467
|
+
tasks.push(new Promise(function(resolve) {
|
|
2468
|
+
var settled = false;
|
|
2469
|
+
try {
|
|
2470
|
+
tcfApi("addEventListener", 2, function(tcData, success) {
|
|
2471
|
+
if (settled) return;
|
|
2472
|
+
if (success && tcData && (tcData.eventStatus === "tcloaded" || tcData.eventStatus === "useractioncomplete")) {
|
|
2473
|
+
settled = true;
|
|
2474
|
+
signals.gdpr = tcData.gdprApplies ? "1" : "0";
|
|
2475
|
+
if (typeof tcData.tcString === "string" && tcData.tcString) {
|
|
2476
|
+
signals.gdprConsent = tcData.tcString;
|
|
2477
|
+
}
|
|
2478
|
+
try {
|
|
2479
|
+
tcfApi("removeEventListener", 2, function() {}, tcData.listenerId);
|
|
2480
|
+
} catch (unused) {}
|
|
2481
|
+
resolve();
|
|
2482
|
+
}
|
|
2483
|
+
});
|
|
2484
|
+
} catch (unused) {
|
|
2485
|
+
resolve();
|
|
2486
|
+
}
|
|
2487
|
+
setTimeout(function() {
|
|
2488
|
+
if (!settled) {
|
|
2489
|
+
settled = true;
|
|
2490
|
+
resolve();
|
|
2491
|
+
}
|
|
2492
|
+
}, timeoutMs);
|
|
2493
|
+
}));
|
|
2494
|
+
}
|
|
2495
|
+
var uspApi = window.__uspapi;
|
|
2496
|
+
if (typeof uspApi === "function") {
|
|
2497
|
+
tasks.push(new Promise(function(resolve) {
|
|
2498
|
+
try {
|
|
2499
|
+
uspApi("getUSPData", 1, function(data, success) {
|
|
2500
|
+
if (success && typeof (data === null || data === void 0 ? void 0 : data.uspString) === "string" && data.uspString) {
|
|
2501
|
+
signals.usPrivacy = data.uspString;
|
|
2502
|
+
}
|
|
2503
|
+
resolve();
|
|
2504
|
+
});
|
|
2505
|
+
} catch (unused) {
|
|
2506
|
+
resolve();
|
|
2507
|
+
}
|
|
2508
|
+
setTimeout(resolve, timeoutMs);
|
|
2509
|
+
}));
|
|
2510
|
+
}
|
|
2511
|
+
if (tasks.length === 0) {
|
|
2512
|
+
return Promise.resolve(signals);
|
|
2513
|
+
}
|
|
2514
|
+
return Promise.all(tasks).then(function() {
|
|
2515
|
+
return signals;
|
|
2516
|
+
});
|
|
2517
|
+
}
|
|
2279
2518
|
// src/utils/browserCompat.ts
|
|
2280
2519
|
function getChromeVersion(ua) {
|
|
2281
2520
|
var match = ua.match(/Chrome\/(\d+)/);
|
|
@@ -2501,6 +2740,11 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
2501
2740
|
this.preloadPoolLoopRunning = false;
|
|
2502
2741
|
this.adDetectSentForCurrentBreak = false;
|
|
2503
2742
|
this.palPlaybackStarted = false;
|
|
2743
|
+
this.streamCorrelator = generateCorrelator();
|
|
2744
|
+
this.consentSignals = {};
|
|
2745
|
+
this.podCounter = 0;
|
|
2746
|
+
this.podAssignedByPrefetch = false;
|
|
2747
|
+
this.adRequestPositionInBreak = 0;
|
|
2504
2748
|
this.continuousFetchLoopRunning = false;
|
|
2505
2749
|
initializePolyfills();
|
|
2506
2750
|
var browserOverrides = getBrowserConfigOverrides();
|
|
@@ -2573,6 +2817,9 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
2573
2817
|
adWillPlayMuted: !!this.config.muted,
|
|
2574
2818
|
continuousPlayback: (_this_config_lowLatencyMode = this.config.lowLatencyMode) !== null && _this_config_lowLatencyMode !== void 0 ? _this_config_lowLatencyMode : false
|
|
2575
2819
|
}).catch(function() {});
|
|
2820
|
+
fetchConsentSignals().then(function(signals) {
|
|
2821
|
+
_this.consentSignals = signals;
|
|
2822
|
+
}).catch(function() {});
|
|
2576
2823
|
this.initializeTracking();
|
|
2577
2824
|
if (!this.shouldUseNativeHls()) return [
|
|
2578
2825
|
3,
|
|
@@ -4869,25 +5116,35 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4869
5116
|
return this.getRemainingAdMs();
|
|
4870
5117
|
}
|
|
4871
5118
|
},
|
|
5119
|
+
{
|
|
5120
|
+
key: "beginNewAdPod",
|
|
5121
|
+
value: function beginNewAdPod() {
|
|
5122
|
+
this.podCounter++;
|
|
5123
|
+
this.adRequestPositionInBreak = 0;
|
|
5124
|
+
}
|
|
5125
|
+
},
|
|
4872
5126
|
{
|
|
4873
5127
|
key: "generateVastUrlsWithCorrelators",
|
|
4874
5128
|
value: function generateVastUrlsWithCorrelators(baseUrl, count) {
|
|
4875
5129
|
var urls = [];
|
|
4876
|
-
var baseTimestamp = Date.now();
|
|
4877
5130
|
for(var i = 0; i < count; i++){
|
|
4878
|
-
|
|
4879
|
-
var
|
|
4880
|
-
var
|
|
4881
|
-
|
|
4882
|
-
|
|
4883
|
-
|
|
4884
|
-
|
|
4885
|
-
|
|
4886
|
-
|
|
4887
|
-
|
|
4888
|
-
|
|
4889
|
-
|
|
4890
|
-
|
|
5131
|
+
this.adRequestPositionInBreak++;
|
|
5132
|
+
var adWillPlayMuted = this.inAdBreak ? this.adPlayer.getOriginalMutedState() : this.video.muted;
|
|
5133
|
+
var urlWithMacros = applyVastMacros(baseUrl, {
|
|
5134
|
+
correlator: generateCorrelator(),
|
|
5135
|
+
streamCorrelator: this.streamCorrelator,
|
|
5136
|
+
pod: this.podCounter > 0 ? this.podCounter : void 0,
|
|
5137
|
+
adPosition: this.adRequestPositionInBreak,
|
|
5138
|
+
pageUrl: typeof window !== "undefined" ? window.location.href : void 0,
|
|
5139
|
+
adWillPlayMuted: adWillPlayMuted,
|
|
5140
|
+
adWillAutoPlay: !!this.config.autoplay,
|
|
5141
|
+
deviceId: this.config.deviceId,
|
|
5142
|
+
deviceIdType: this.config.deviceIdType,
|
|
5143
|
+
limitAdTracking: this.config.limitAdTracking,
|
|
5144
|
+
adTest: this.config.adTest,
|
|
5145
|
+
consent: this.consentSignals
|
|
5146
|
+
});
|
|
5147
|
+
urls.push(this.palNonce.injectNonce(urlWithMacros));
|
|
4891
5148
|
}
|
|
4892
5149
|
return urls;
|
|
4893
5150
|
}
|
|
@@ -4957,6 +5214,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4957
5214
|
}
|
|
4958
5215
|
return;
|
|
4959
5216
|
}
|
|
5217
|
+
this.beginNewAdPod();
|
|
5218
|
+
this.podAssignedByPrefetch = true;
|
|
4960
5219
|
var urlsToPregenerate = 5;
|
|
4961
5220
|
var generatedUrls = this.generateVastUrlsWithCorrelators(baseVastUrl, urlsToPregenerate);
|
|
4962
5221
|
this.pendingAdBreak = _object_spread_props(_object_spread({
|
|
@@ -4994,6 +5253,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4994
5253
|
}
|
|
4995
5254
|
this.pendingAdBreak = null;
|
|
4996
5255
|
this.pendingScte35CueKey = void 0;
|
|
5256
|
+
this.podAssignedByPrefetch = false;
|
|
4997
5257
|
}
|
|
4998
5258
|
},
|
|
4999
5259
|
{
|
|
@@ -5430,6 +5690,11 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5430
5690
|
this.continuousFetchingActive = true;
|
|
5431
5691
|
this.isShowingPlaceholder = false;
|
|
5432
5692
|
this.totalAdRequestsInBreak = 0;
|
|
5693
|
+
if (this.podAssignedByPrefetch) {
|
|
5694
|
+
this.podAssignedByPrefetch = false;
|
|
5695
|
+
} else {
|
|
5696
|
+
this.beginNewAdPod();
|
|
5697
|
+
}
|
|
5433
5698
|
currentMuted = this.video.muted;
|
|
5434
5699
|
currentVolume = this.video.volume;
|
|
5435
5700
|
this.adPlayer.updateOriginalMutedState(currentMuted, currentVolume);
|