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,4 +1,4 @@
|
|
|
1
|
-
import { S as StormcloudVideoPlayerConfig } from '../types-
|
|
1
|
+
import { S as StormcloudVideoPlayerConfig } from '../types-CUKMIqHL.cjs';
|
|
2
2
|
|
|
3
3
|
declare class StormcloudVideoPlayer {
|
|
4
4
|
private readonly video;
|
|
@@ -78,6 +78,11 @@ declare class StormcloudVideoPlayer {
|
|
|
78
78
|
private adDetectSentForCurrentBreak;
|
|
79
79
|
private palNonce;
|
|
80
80
|
private palPlaybackStarted;
|
|
81
|
+
private readonly streamCorrelator;
|
|
82
|
+
private consentSignals;
|
|
83
|
+
private podCounter;
|
|
84
|
+
private podAssignedByPrefetch;
|
|
85
|
+
private adRequestPositionInBreak;
|
|
81
86
|
constructor(config: StormcloudVideoPlayerConfig);
|
|
82
87
|
private createAdPlayer;
|
|
83
88
|
load(): Promise<void>;
|
|
@@ -141,6 +146,7 @@ declare class StormcloudVideoPlayer {
|
|
|
141
146
|
getCurrentAdIndex(): number;
|
|
142
147
|
getTotalAdsInBreak(): number;
|
|
143
148
|
getAdRemainingMs(): number;
|
|
149
|
+
private beginNewAdPod;
|
|
144
150
|
private generateVastUrlsWithCorrelators;
|
|
145
151
|
isAdPlaying(): boolean;
|
|
146
152
|
isShowingAds(): boolean;
|
|
@@ -402,6 +402,7 @@ var import_react = require("react");
|
|
|
402
402
|
var import_hls2 = __toESM(require("hls.js"), 1);
|
|
403
403
|
// src/sdk/hlsAdPlayer.ts
|
|
404
404
|
var import_hls = __toESM(require("hls.js"), 1);
|
|
405
|
+
var MAX_VAST_WRAPPER_DEPTH = 5;
|
|
405
406
|
function createHlsAdPlayer(contentVideo, options) {
|
|
406
407
|
var adPlaying = false;
|
|
407
408
|
var originalMutedState = false;
|
|
@@ -559,25 +560,91 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
559
560
|
var url = mediaFile.url.toLowerCase();
|
|
560
561
|
return type.startsWith("video/") || url.endsWith(".mp4") || url.includes(".mp4?");
|
|
561
562
|
}
|
|
563
|
+
function createEmptyTrackingUrls() {
|
|
564
|
+
return {
|
|
565
|
+
impression: [],
|
|
566
|
+
start: [],
|
|
567
|
+
firstQuartile: [],
|
|
568
|
+
midpoint: [],
|
|
569
|
+
thirdQuartile: [],
|
|
570
|
+
complete: [],
|
|
571
|
+
mute: [],
|
|
572
|
+
unmute: [],
|
|
573
|
+
pause: [],
|
|
574
|
+
resume: [],
|
|
575
|
+
fullscreen: [],
|
|
576
|
+
exitFullscreen: [],
|
|
577
|
+
skip: [],
|
|
578
|
+
error: []
|
|
579
|
+
};
|
|
580
|
+
}
|
|
581
|
+
function extractTrackingUrls(xmlDoc) {
|
|
582
|
+
var trackingUrls = createEmptyTrackingUrls();
|
|
583
|
+
xmlDoc.querySelectorAll("Impression").forEach(function(el) {
|
|
584
|
+
var _el_textContent;
|
|
585
|
+
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
586
|
+
if (url) trackingUrls.impression.push(url);
|
|
587
|
+
});
|
|
588
|
+
xmlDoc.querySelectorAll("Tracking").forEach(function(el) {
|
|
589
|
+
var _el_textContent;
|
|
590
|
+
var event = el.getAttribute("event");
|
|
591
|
+
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
592
|
+
if (event && url) {
|
|
593
|
+
var eventKey = event;
|
|
594
|
+
if (trackingUrls[eventKey]) {
|
|
595
|
+
trackingUrls[eventKey].push(url);
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
});
|
|
599
|
+
xmlDoc.querySelectorAll("Error").forEach(function(el) {
|
|
600
|
+
var _el_textContent;
|
|
601
|
+
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
602
|
+
if (url) trackingUrls.error.push(url);
|
|
603
|
+
});
|
|
604
|
+
return trackingUrls;
|
|
605
|
+
}
|
|
606
|
+
function mergeTrackingUrls(target, source) {
|
|
607
|
+
Object.keys(target).forEach(function(key) {
|
|
608
|
+
if (source[key] && source[key].length > 0) {
|
|
609
|
+
target[key] = target[key].concat(source[key]);
|
|
610
|
+
}
|
|
611
|
+
});
|
|
612
|
+
return target;
|
|
613
|
+
}
|
|
562
614
|
function parseVastXml(xmlString) {
|
|
563
615
|
try {
|
|
564
|
-
var _xmlDoc_querySelector, _xmlDoc_querySelector1,
|
|
616
|
+
var _xmlDoc_querySelector, _xmlDoc_querySelector_textContent, _xmlDoc_querySelector1, _xmlDoc_querySelector_textContent1, _xmlDoc_querySelector2, _xmlDoc_querySelector3;
|
|
565
617
|
var parser = new DOMParser();
|
|
566
618
|
var xmlDoc = parser.parseFromString(xmlString, "text/xml");
|
|
567
619
|
var parserError = xmlDoc.querySelector("parsererror");
|
|
568
620
|
if (parserError) {
|
|
569
621
|
console.error("[HlsAdPlayer] XML parsing error (malformed VAST XML):", parserError.textContent);
|
|
570
|
-
return
|
|
622
|
+
return {
|
|
623
|
+
type: "empty"
|
|
624
|
+
};
|
|
571
625
|
}
|
|
572
626
|
var adElement = xmlDoc.querySelector("Ad");
|
|
573
627
|
if (!adElement) {
|
|
574
628
|
console.warn("[HlsAdPlayer] No Ad element found in VAST XML");
|
|
575
|
-
return
|
|
629
|
+
return {
|
|
630
|
+
type: "empty"
|
|
631
|
+
};
|
|
576
632
|
}
|
|
577
633
|
var adId = adElement.getAttribute("id") || "unknown";
|
|
578
634
|
var title = ((_xmlDoc_querySelector = xmlDoc.querySelector("AdTitle")) === null || _xmlDoc_querySelector === void 0 ? void 0 : _xmlDoc_querySelector.textContent) || "Ad";
|
|
635
|
+
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();
|
|
636
|
+
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();
|
|
637
|
+
if (wrapperUri) {
|
|
638
|
+
console.log("[HlsAdPlayer] VAST wrapper detected, following VASTAdTagURI: ".concat(wrapperUri));
|
|
639
|
+
return {
|
|
640
|
+
type: "wrapper",
|
|
641
|
+
vastAdTagUri: wrapperUri,
|
|
642
|
+
trackingUrls: extractTrackingUrls(xmlDoc),
|
|
643
|
+
clickThrough: clickThrough
|
|
644
|
+
};
|
|
645
|
+
}
|
|
579
646
|
var isNoAdAvailable = adId === "empty" || title.toLowerCase().includes("no ad available") || title.toLowerCase() === "no ad available";
|
|
580
|
-
var durationText = ((
|
|
647
|
+
var durationText = ((_xmlDoc_querySelector3 = xmlDoc.querySelector("Duration")) === null || _xmlDoc_querySelector3 === void 0 ? void 0 : _xmlDoc_querySelector3.textContent) || "00:00:30";
|
|
581
648
|
var durationParts = durationText.split(":");
|
|
582
649
|
var duration = parseInt(durationParts[0] || "0", 10) * 3600 + parseInt(durationParts[1] || "0", 10) * 60 + parseInt(durationParts[2] || "0", 10);
|
|
583
650
|
var mediaFileElements = xmlDoc.querySelectorAll("MediaFile");
|
|
@@ -617,57 +684,31 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
617
684
|
} else {
|
|
618
685
|
console.warn("[HlsAdPlayer] No supported media files found in VAST XML");
|
|
619
686
|
}
|
|
620
|
-
return
|
|
687
|
+
return {
|
|
688
|
+
type: "empty"
|
|
689
|
+
};
|
|
621
690
|
}
|
|
622
|
-
var trackingUrls = {
|
|
623
|
-
impression: [],
|
|
624
|
-
start: [],
|
|
625
|
-
firstQuartile: [],
|
|
626
|
-
midpoint: [],
|
|
627
|
-
thirdQuartile: [],
|
|
628
|
-
complete: [],
|
|
629
|
-
mute: [],
|
|
630
|
-
unmute: [],
|
|
631
|
-
pause: [],
|
|
632
|
-
resume: [],
|
|
633
|
-
fullscreen: [],
|
|
634
|
-
exitFullscreen: [],
|
|
635
|
-
skip: [],
|
|
636
|
-
error: []
|
|
637
|
-
};
|
|
638
|
-
xmlDoc.querySelectorAll("Impression").forEach(function(el) {
|
|
639
|
-
var _el_textContent;
|
|
640
|
-
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
641
|
-
if (url) trackingUrls.impression.push(url);
|
|
642
|
-
});
|
|
643
|
-
xmlDoc.querySelectorAll("Tracking").forEach(function(el) {
|
|
644
|
-
var _el_textContent;
|
|
645
|
-
var event = el.getAttribute("event");
|
|
646
|
-
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
647
|
-
if (event && url) {
|
|
648
|
-
var eventKey = event;
|
|
649
|
-
if (trackingUrls[eventKey]) {
|
|
650
|
-
trackingUrls[eventKey].push(url);
|
|
651
|
-
}
|
|
652
|
-
}
|
|
653
|
-
});
|
|
654
|
-
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();
|
|
655
691
|
return {
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
692
|
+
type: "inline",
|
|
693
|
+
ad: {
|
|
694
|
+
id: adId,
|
|
695
|
+
title: title,
|
|
696
|
+
duration: duration,
|
|
697
|
+
mediaFiles: mediaFiles,
|
|
698
|
+
trackingUrls: extractTrackingUrls(xmlDoc),
|
|
699
|
+
clickThrough: clickThrough
|
|
700
|
+
}
|
|
662
701
|
};
|
|
663
702
|
} catch (error) {
|
|
664
703
|
console.error("[HlsAdPlayer] Error parsing VAST XML:", error);
|
|
665
|
-
return
|
|
704
|
+
return {
|
|
705
|
+
type: "empty"
|
|
706
|
+
};
|
|
666
707
|
}
|
|
667
708
|
}
|
|
668
|
-
function
|
|
709
|
+
function fetchVastXml(vastTagUrl) {
|
|
669
710
|
return _async_to_generator(function() {
|
|
670
|
-
var response
|
|
711
|
+
var response;
|
|
671
712
|
return _ts_generator(this, function(_state) {
|
|
672
713
|
switch(_state.label){
|
|
673
714
|
case 0:
|
|
@@ -688,20 +729,58 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
688
729
|
throw new Error("Failed to fetch VAST: ".concat(response.statusText));
|
|
689
730
|
}
|
|
690
731
|
return [
|
|
691
|
-
|
|
732
|
+
2,
|
|
692
733
|
response.text()
|
|
693
734
|
];
|
|
694
|
-
|
|
735
|
+
}
|
|
736
|
+
});
|
|
737
|
+
})();
|
|
738
|
+
}
|
|
739
|
+
function fetchAndParseVastAd(_0) {
|
|
740
|
+
return _async_to_generator(function(vastTagUrl) {
|
|
741
|
+
var depth, accumulatedTracking, vastXml, parsed;
|
|
742
|
+
var _arguments = arguments;
|
|
743
|
+
return _ts_generator(this, function(_state) {
|
|
744
|
+
switch(_state.label){
|
|
745
|
+
case 0:
|
|
746
|
+
depth = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : 0, accumulatedTracking = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : createEmptyTrackingUrls();
|
|
747
|
+
return [
|
|
748
|
+
4,
|
|
749
|
+
fetchVastXml(vastTagUrl)
|
|
750
|
+
];
|
|
751
|
+
case 1:
|
|
695
752
|
vastXml = _state.sent();
|
|
696
753
|
console.log("[HlsAdPlayer] VAST XML received");
|
|
697
754
|
console.log("[HlsAdPlayer] VAST XML content (first 2000 chars):", vastXml.substring(0, 2e3));
|
|
755
|
+
parsed = parseVastXml(vastXml);
|
|
756
|
+
if (parsed.type === "empty") {
|
|
757
|
+
return [
|
|
758
|
+
2,
|
|
759
|
+
null
|
|
760
|
+
];
|
|
761
|
+
}
|
|
762
|
+
if (parsed.type === "wrapper") {
|
|
763
|
+
if (depth >= MAX_VAST_WRAPPER_DEPTH) {
|
|
764
|
+
console.warn("[HlsAdPlayer] VAST wrapper depth limit (".concat(MAX_VAST_WRAPPER_DEPTH, ") reached, aborting redirect chain"));
|
|
765
|
+
return [
|
|
766
|
+
2,
|
|
767
|
+
null
|
|
768
|
+
];
|
|
769
|
+
}
|
|
770
|
+
mergeTrackingUrls(accumulatedTracking, parsed.trackingUrls);
|
|
771
|
+
return [
|
|
772
|
+
2,
|
|
773
|
+
fetchAndParseVastAd(parsed.vastAdTagUri, depth + 1, accumulatedTracking)
|
|
774
|
+
];
|
|
775
|
+
}
|
|
776
|
+
mergeTrackingUrls(parsed.ad.trackingUrls, accumulatedTracking);
|
|
698
777
|
return [
|
|
699
778
|
2,
|
|
700
|
-
|
|
779
|
+
parsed.ad
|
|
701
780
|
];
|
|
702
781
|
}
|
|
703
782
|
});
|
|
704
|
-
})();
|
|
783
|
+
}).apply(this, arguments);
|
|
705
784
|
}
|
|
706
785
|
function createAdVideoElement() {
|
|
707
786
|
var video = document.createElement("video");
|
|
@@ -2240,6 +2319,166 @@ function initializePolyfills() {
|
|
|
2240
2319
|
polyfillTextEncoder();
|
|
2241
2320
|
polyfillPromiseFinally();
|
|
2242
2321
|
}
|
|
2322
|
+
// src/utils/vastMacros.ts
|
|
2323
|
+
function generateCorrelator() {
|
|
2324
|
+
if (typeof crypto !== "undefined" && crypto.getRandomValues) {
|
|
2325
|
+
try {
|
|
2326
|
+
var _buf_, _buf_1;
|
|
2327
|
+
var buf = new Uint32Array(2);
|
|
2328
|
+
crypto.getRandomValues(buf);
|
|
2329
|
+
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);
|
|
2330
|
+
if (value > 0) {
|
|
2331
|
+
return String(value);
|
|
2332
|
+
}
|
|
2333
|
+
} catch (unused) {}
|
|
2334
|
+
}
|
|
2335
|
+
return String(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1);
|
|
2336
|
+
}
|
|
2337
|
+
var UNEXPANDED_MACRO_PATTERN = /^(\[[^\]]*\]|\{[^}]*\}|%%[^%]*%%)$/;
|
|
2338
|
+
function applyVastMacros(baseUrl, ctx) {
|
|
2339
|
+
var url;
|
|
2340
|
+
try {
|
|
2341
|
+
url = new URL(baseUrl);
|
|
2342
|
+
} catch (unused) {
|
|
2343
|
+
return replaceCorrelatorFallback(baseUrl, ctx.correlator);
|
|
2344
|
+
}
|
|
2345
|
+
var params = url.searchParams;
|
|
2346
|
+
params.set("correlator", ctx.correlator);
|
|
2347
|
+
params.set("scor", ctx.streamCorrelator);
|
|
2348
|
+
if (ctx.pod != null) {
|
|
2349
|
+
params.set("pod", String(ctx.pod));
|
|
2350
|
+
}
|
|
2351
|
+
if (ctx.adPosition != null) {
|
|
2352
|
+
params.set("ppos", String(ctx.adPosition));
|
|
2353
|
+
}
|
|
2354
|
+
if (ctx.pageUrl) {
|
|
2355
|
+
params.set("url", ctx.pageUrl);
|
|
2356
|
+
params.set("description_url", ctx.pageUrl);
|
|
2357
|
+
}
|
|
2358
|
+
if (ctx.adWillPlayMuted != null) {
|
|
2359
|
+
params.set("vpmute", ctx.adWillPlayMuted ? "1" : "0");
|
|
2360
|
+
}
|
|
2361
|
+
if (ctx.adWillAutoPlay != null) {
|
|
2362
|
+
params.set("vpa", ctx.adWillAutoPlay ? "auto" : "click");
|
|
2363
|
+
}
|
|
2364
|
+
if (ctx.deviceId && ctx.deviceIdType) {
|
|
2365
|
+
params.set("rdid", ctx.deviceId);
|
|
2366
|
+
params.set("idtype", ctx.deviceIdType);
|
|
2367
|
+
params.set("is_lat", ctx.limitAdTracking ? "1" : "0");
|
|
2368
|
+
} else {
|
|
2369
|
+
params.delete("rdid");
|
|
2370
|
+
params.delete("idtype");
|
|
2371
|
+
params.delete("is_lat");
|
|
2372
|
+
}
|
|
2373
|
+
var consent = ctx.consent;
|
|
2374
|
+
if ((consent === null || consent === void 0 ? void 0 : consent.gdpr) != null) {
|
|
2375
|
+
params.set("gdpr", consent.gdpr);
|
|
2376
|
+
}
|
|
2377
|
+
if ((consent === null || consent === void 0 ? void 0 : consent.gdprConsent) != null) {
|
|
2378
|
+
params.set("gdpr_consent", consent.gdprConsent);
|
|
2379
|
+
}
|
|
2380
|
+
if ((consent === null || consent === void 0 ? void 0 : consent.usPrivacy) != null) {
|
|
2381
|
+
params.set("us_privacy", consent.usPrivacy);
|
|
2382
|
+
}
|
|
2383
|
+
if (ctx.adTest) {
|
|
2384
|
+
params.set("adtest", "on");
|
|
2385
|
+
}
|
|
2386
|
+
var staleKeys = [];
|
|
2387
|
+
params.forEach(function(value, key) {
|
|
2388
|
+
if (UNEXPANDED_MACRO_PATTERN.test(value)) {
|
|
2389
|
+
staleKeys.push(key);
|
|
2390
|
+
}
|
|
2391
|
+
});
|
|
2392
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
2393
|
+
try {
|
|
2394
|
+
for(var _iterator = staleKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
2395
|
+
var key = _step.value;
|
|
2396
|
+
params.delete(key);
|
|
2397
|
+
}
|
|
2398
|
+
} catch (err) {
|
|
2399
|
+
_didIteratorError = true;
|
|
2400
|
+
_iteratorError = err;
|
|
2401
|
+
} finally{
|
|
2402
|
+
try {
|
|
2403
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
2404
|
+
_iterator.return();
|
|
2405
|
+
}
|
|
2406
|
+
} finally{
|
|
2407
|
+
if (_didIteratorError) {
|
|
2408
|
+
throw _iteratorError;
|
|
2409
|
+
}
|
|
2410
|
+
}
|
|
2411
|
+
}
|
|
2412
|
+
return url.toString();
|
|
2413
|
+
}
|
|
2414
|
+
function replaceCorrelatorFallback(baseUrl, correlator) {
|
|
2415
|
+
var correlatorRegex = /([?&])correlator=([^&]*)/;
|
|
2416
|
+
if (correlatorRegex.test(baseUrl)) {
|
|
2417
|
+
return baseUrl.replace(correlatorRegex, "$1correlator=".concat(correlator));
|
|
2418
|
+
}
|
|
2419
|
+
var sep = baseUrl.includes("?") ? "&" : "?";
|
|
2420
|
+
return "".concat(baseUrl).concat(sep, "correlator=").concat(correlator);
|
|
2421
|
+
}
|
|
2422
|
+
function fetchConsentSignals() {
|
|
2423
|
+
var timeoutMs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 1500;
|
|
2424
|
+
var signals = {};
|
|
2425
|
+
if (typeof window === "undefined") {
|
|
2426
|
+
return Promise.resolve(signals);
|
|
2427
|
+
}
|
|
2428
|
+
var tasks = [];
|
|
2429
|
+
var tcfApi = window.__tcfapi;
|
|
2430
|
+
if (typeof tcfApi === "function") {
|
|
2431
|
+
tasks.push(new Promise(function(resolve) {
|
|
2432
|
+
var settled = false;
|
|
2433
|
+
try {
|
|
2434
|
+
tcfApi("addEventListener", 2, function(tcData, success) {
|
|
2435
|
+
if (settled) return;
|
|
2436
|
+
if (success && tcData && (tcData.eventStatus === "tcloaded" || tcData.eventStatus === "useractioncomplete")) {
|
|
2437
|
+
settled = true;
|
|
2438
|
+
signals.gdpr = tcData.gdprApplies ? "1" : "0";
|
|
2439
|
+
if (typeof tcData.tcString === "string" && tcData.tcString) {
|
|
2440
|
+
signals.gdprConsent = tcData.tcString;
|
|
2441
|
+
}
|
|
2442
|
+
try {
|
|
2443
|
+
tcfApi("removeEventListener", 2, function() {}, tcData.listenerId);
|
|
2444
|
+
} catch (unused) {}
|
|
2445
|
+
resolve();
|
|
2446
|
+
}
|
|
2447
|
+
});
|
|
2448
|
+
} catch (unused) {
|
|
2449
|
+
resolve();
|
|
2450
|
+
}
|
|
2451
|
+
setTimeout(function() {
|
|
2452
|
+
if (!settled) {
|
|
2453
|
+
settled = true;
|
|
2454
|
+
resolve();
|
|
2455
|
+
}
|
|
2456
|
+
}, timeoutMs);
|
|
2457
|
+
}));
|
|
2458
|
+
}
|
|
2459
|
+
var uspApi = window.__uspapi;
|
|
2460
|
+
if (typeof uspApi === "function") {
|
|
2461
|
+
tasks.push(new Promise(function(resolve) {
|
|
2462
|
+
try {
|
|
2463
|
+
uspApi("getUSPData", 1, function(data, success) {
|
|
2464
|
+
if (success && typeof (data === null || data === void 0 ? void 0 : data.uspString) === "string" && data.uspString) {
|
|
2465
|
+
signals.usPrivacy = data.uspString;
|
|
2466
|
+
}
|
|
2467
|
+
resolve();
|
|
2468
|
+
});
|
|
2469
|
+
} catch (unused) {
|
|
2470
|
+
resolve();
|
|
2471
|
+
}
|
|
2472
|
+
setTimeout(resolve, timeoutMs);
|
|
2473
|
+
}));
|
|
2474
|
+
}
|
|
2475
|
+
if (tasks.length === 0) {
|
|
2476
|
+
return Promise.resolve(signals);
|
|
2477
|
+
}
|
|
2478
|
+
return Promise.all(tasks).then(function() {
|
|
2479
|
+
return signals;
|
|
2480
|
+
});
|
|
2481
|
+
}
|
|
2243
2482
|
// src/utils/browserCompat.ts
|
|
2244
2483
|
function getChromeVersion(ua) {
|
|
2245
2484
|
var match = ua.match(/Chrome\/(\d+)/);
|
|
@@ -2465,6 +2704,11 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
2465
2704
|
this.preloadPoolLoopRunning = false;
|
|
2466
2705
|
this.adDetectSentForCurrentBreak = false;
|
|
2467
2706
|
this.palPlaybackStarted = false;
|
|
2707
|
+
this.streamCorrelator = generateCorrelator();
|
|
2708
|
+
this.consentSignals = {};
|
|
2709
|
+
this.podCounter = 0;
|
|
2710
|
+
this.podAssignedByPrefetch = false;
|
|
2711
|
+
this.adRequestPositionInBreak = 0;
|
|
2468
2712
|
this.continuousFetchLoopRunning = false;
|
|
2469
2713
|
initializePolyfills();
|
|
2470
2714
|
var browserOverrides = getBrowserConfigOverrides();
|
|
@@ -2537,6 +2781,9 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
2537
2781
|
adWillPlayMuted: !!this.config.muted,
|
|
2538
2782
|
continuousPlayback: (_this_config_lowLatencyMode = this.config.lowLatencyMode) !== null && _this_config_lowLatencyMode !== void 0 ? _this_config_lowLatencyMode : false
|
|
2539
2783
|
}).catch(function() {});
|
|
2784
|
+
fetchConsentSignals().then(function(signals) {
|
|
2785
|
+
_this.consentSignals = signals;
|
|
2786
|
+
}).catch(function() {});
|
|
2540
2787
|
this.initializeTracking();
|
|
2541
2788
|
if (!this.shouldUseNativeHls()) return [
|
|
2542
2789
|
3,
|
|
@@ -4833,25 +5080,35 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4833
5080
|
return this.getRemainingAdMs();
|
|
4834
5081
|
}
|
|
4835
5082
|
},
|
|
5083
|
+
{
|
|
5084
|
+
key: "beginNewAdPod",
|
|
5085
|
+
value: function beginNewAdPod() {
|
|
5086
|
+
this.podCounter++;
|
|
5087
|
+
this.adRequestPositionInBreak = 0;
|
|
5088
|
+
}
|
|
5089
|
+
},
|
|
4836
5090
|
{
|
|
4837
5091
|
key: "generateVastUrlsWithCorrelators",
|
|
4838
5092
|
value: function generateVastUrlsWithCorrelators(baseUrl, count) {
|
|
4839
5093
|
var urls = [];
|
|
4840
|
-
var baseTimestamp = Date.now();
|
|
4841
5094
|
for(var i = 0; i < count; i++){
|
|
4842
|
-
|
|
4843
|
-
var
|
|
4844
|
-
var
|
|
4845
|
-
|
|
4846
|
-
|
|
4847
|
-
|
|
4848
|
-
|
|
4849
|
-
|
|
4850
|
-
|
|
4851
|
-
|
|
4852
|
-
|
|
4853
|
-
|
|
4854
|
-
|
|
5095
|
+
this.adRequestPositionInBreak++;
|
|
5096
|
+
var adWillPlayMuted = this.inAdBreak ? this.adPlayer.getOriginalMutedState() : this.video.muted;
|
|
5097
|
+
var urlWithMacros = applyVastMacros(baseUrl, {
|
|
5098
|
+
correlator: generateCorrelator(),
|
|
5099
|
+
streamCorrelator: this.streamCorrelator,
|
|
5100
|
+
pod: this.podCounter > 0 ? this.podCounter : void 0,
|
|
5101
|
+
adPosition: this.adRequestPositionInBreak,
|
|
5102
|
+
pageUrl: typeof window !== "undefined" ? window.location.href : void 0,
|
|
5103
|
+
adWillPlayMuted: adWillPlayMuted,
|
|
5104
|
+
adWillAutoPlay: !!this.config.autoplay,
|
|
5105
|
+
deviceId: this.config.deviceId,
|
|
5106
|
+
deviceIdType: this.config.deviceIdType,
|
|
5107
|
+
limitAdTracking: this.config.limitAdTracking,
|
|
5108
|
+
adTest: this.config.adTest,
|
|
5109
|
+
consent: this.consentSignals
|
|
5110
|
+
});
|
|
5111
|
+
urls.push(this.palNonce.injectNonce(urlWithMacros));
|
|
4855
5112
|
}
|
|
4856
5113
|
return urls;
|
|
4857
5114
|
}
|
|
@@ -4921,6 +5178,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4921
5178
|
}
|
|
4922
5179
|
return;
|
|
4923
5180
|
}
|
|
5181
|
+
this.beginNewAdPod();
|
|
5182
|
+
this.podAssignedByPrefetch = true;
|
|
4924
5183
|
var urlsToPregenerate = 5;
|
|
4925
5184
|
var generatedUrls = this.generateVastUrlsWithCorrelators(baseVastUrl, urlsToPregenerate);
|
|
4926
5185
|
this.pendingAdBreak = _object_spread_props(_object_spread({
|
|
@@ -4958,6 +5217,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4958
5217
|
}
|
|
4959
5218
|
this.pendingAdBreak = null;
|
|
4960
5219
|
this.pendingScte35CueKey = void 0;
|
|
5220
|
+
this.podAssignedByPrefetch = false;
|
|
4961
5221
|
}
|
|
4962
5222
|
},
|
|
4963
5223
|
{
|
|
@@ -5394,6 +5654,11 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5394
5654
|
this.continuousFetchingActive = true;
|
|
5395
5655
|
this.isShowingPlaceholder = false;
|
|
5396
5656
|
this.totalAdRequestsInBreak = 0;
|
|
5657
|
+
if (this.podAssignedByPrefetch) {
|
|
5658
|
+
this.podAssignedByPrefetch = false;
|
|
5659
|
+
} else {
|
|
5660
|
+
this.beginNewAdPod();
|
|
5661
|
+
}
|
|
5397
5662
|
currentMuted = this.video.muted;
|
|
5398
5663
|
currentVolume = this.video.volume;
|
|
5399
5664
|
this.adPlayer.updateOriginalMutedState(currentMuted, currentVolume);
|