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
|
@@ -350,6 +350,7 @@ module.exports = __toCommonJS(StormcloudVideoPlayer_exports);
|
|
|
350
350
|
var import_hls2 = __toESM(require("hls.js"), 1);
|
|
351
351
|
// src/sdk/hlsAdPlayer.ts
|
|
352
352
|
var import_hls = __toESM(require("hls.js"), 1);
|
|
353
|
+
var MAX_VAST_WRAPPER_DEPTH = 5;
|
|
353
354
|
function createHlsAdPlayer(contentVideo, options) {
|
|
354
355
|
var adPlaying = false;
|
|
355
356
|
var originalMutedState = false;
|
|
@@ -507,25 +508,91 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
507
508
|
var url = mediaFile.url.toLowerCase();
|
|
508
509
|
return type.startsWith("video/") || url.endsWith(".mp4") || url.includes(".mp4?");
|
|
509
510
|
}
|
|
511
|
+
function createEmptyTrackingUrls() {
|
|
512
|
+
return {
|
|
513
|
+
impression: [],
|
|
514
|
+
start: [],
|
|
515
|
+
firstQuartile: [],
|
|
516
|
+
midpoint: [],
|
|
517
|
+
thirdQuartile: [],
|
|
518
|
+
complete: [],
|
|
519
|
+
mute: [],
|
|
520
|
+
unmute: [],
|
|
521
|
+
pause: [],
|
|
522
|
+
resume: [],
|
|
523
|
+
fullscreen: [],
|
|
524
|
+
exitFullscreen: [],
|
|
525
|
+
skip: [],
|
|
526
|
+
error: []
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
function extractTrackingUrls(xmlDoc) {
|
|
530
|
+
var trackingUrls = createEmptyTrackingUrls();
|
|
531
|
+
xmlDoc.querySelectorAll("Impression").forEach(function(el) {
|
|
532
|
+
var _el_textContent;
|
|
533
|
+
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
534
|
+
if (url) trackingUrls.impression.push(url);
|
|
535
|
+
});
|
|
536
|
+
xmlDoc.querySelectorAll("Tracking").forEach(function(el) {
|
|
537
|
+
var _el_textContent;
|
|
538
|
+
var event = el.getAttribute("event");
|
|
539
|
+
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
540
|
+
if (event && url) {
|
|
541
|
+
var eventKey = event;
|
|
542
|
+
if (trackingUrls[eventKey]) {
|
|
543
|
+
trackingUrls[eventKey].push(url);
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
});
|
|
547
|
+
xmlDoc.querySelectorAll("Error").forEach(function(el) {
|
|
548
|
+
var _el_textContent;
|
|
549
|
+
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
550
|
+
if (url) trackingUrls.error.push(url);
|
|
551
|
+
});
|
|
552
|
+
return trackingUrls;
|
|
553
|
+
}
|
|
554
|
+
function mergeTrackingUrls(target, source) {
|
|
555
|
+
Object.keys(target).forEach(function(key) {
|
|
556
|
+
if (source[key] && source[key].length > 0) {
|
|
557
|
+
target[key] = target[key].concat(source[key]);
|
|
558
|
+
}
|
|
559
|
+
});
|
|
560
|
+
return target;
|
|
561
|
+
}
|
|
510
562
|
function parseVastXml(xmlString) {
|
|
511
563
|
try {
|
|
512
|
-
var _xmlDoc_querySelector, _xmlDoc_querySelector1,
|
|
564
|
+
var _xmlDoc_querySelector, _xmlDoc_querySelector_textContent, _xmlDoc_querySelector1, _xmlDoc_querySelector_textContent1, _xmlDoc_querySelector2, _xmlDoc_querySelector3;
|
|
513
565
|
var parser = new DOMParser();
|
|
514
566
|
var xmlDoc = parser.parseFromString(xmlString, "text/xml");
|
|
515
567
|
var parserError = xmlDoc.querySelector("parsererror");
|
|
516
568
|
if (parserError) {
|
|
517
569
|
console.error("[HlsAdPlayer] XML parsing error (malformed VAST XML):", parserError.textContent);
|
|
518
|
-
return
|
|
570
|
+
return {
|
|
571
|
+
type: "empty"
|
|
572
|
+
};
|
|
519
573
|
}
|
|
520
574
|
var adElement = xmlDoc.querySelector("Ad");
|
|
521
575
|
if (!adElement) {
|
|
522
576
|
console.warn("[HlsAdPlayer] No Ad element found in VAST XML");
|
|
523
|
-
return
|
|
577
|
+
return {
|
|
578
|
+
type: "empty"
|
|
579
|
+
};
|
|
524
580
|
}
|
|
525
581
|
var adId = adElement.getAttribute("id") || "unknown";
|
|
526
582
|
var title = ((_xmlDoc_querySelector = xmlDoc.querySelector("AdTitle")) === null || _xmlDoc_querySelector === void 0 ? void 0 : _xmlDoc_querySelector.textContent) || "Ad";
|
|
583
|
+
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();
|
|
584
|
+
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();
|
|
585
|
+
if (wrapperUri) {
|
|
586
|
+
console.log("[HlsAdPlayer] VAST wrapper detected, following VASTAdTagURI: ".concat(wrapperUri));
|
|
587
|
+
return {
|
|
588
|
+
type: "wrapper",
|
|
589
|
+
vastAdTagUri: wrapperUri,
|
|
590
|
+
trackingUrls: extractTrackingUrls(xmlDoc),
|
|
591
|
+
clickThrough: clickThrough
|
|
592
|
+
};
|
|
593
|
+
}
|
|
527
594
|
var isNoAdAvailable = adId === "empty" || title.toLowerCase().includes("no ad available") || title.toLowerCase() === "no ad available";
|
|
528
|
-
var durationText = ((
|
|
595
|
+
var durationText = ((_xmlDoc_querySelector3 = xmlDoc.querySelector("Duration")) === null || _xmlDoc_querySelector3 === void 0 ? void 0 : _xmlDoc_querySelector3.textContent) || "00:00:30";
|
|
529
596
|
var durationParts = durationText.split(":");
|
|
530
597
|
var duration = parseInt(durationParts[0] || "0", 10) * 3600 + parseInt(durationParts[1] || "0", 10) * 60 + parseInt(durationParts[2] || "0", 10);
|
|
531
598
|
var mediaFileElements = xmlDoc.querySelectorAll("MediaFile");
|
|
@@ -565,57 +632,31 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
565
632
|
} else {
|
|
566
633
|
console.warn("[HlsAdPlayer] No supported media files found in VAST XML");
|
|
567
634
|
}
|
|
568
|
-
return
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
start: [],
|
|
573
|
-
firstQuartile: [],
|
|
574
|
-
midpoint: [],
|
|
575
|
-
thirdQuartile: [],
|
|
576
|
-
complete: [],
|
|
577
|
-
mute: [],
|
|
578
|
-
unmute: [],
|
|
579
|
-
pause: [],
|
|
580
|
-
resume: [],
|
|
581
|
-
fullscreen: [],
|
|
582
|
-
exitFullscreen: [],
|
|
583
|
-
skip: [],
|
|
584
|
-
error: []
|
|
585
|
-
};
|
|
586
|
-
xmlDoc.querySelectorAll("Impression").forEach(function(el) {
|
|
587
|
-
var _el_textContent;
|
|
588
|
-
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
589
|
-
if (url) trackingUrls.impression.push(url);
|
|
590
|
-
});
|
|
591
|
-
xmlDoc.querySelectorAll("Tracking").forEach(function(el) {
|
|
592
|
-
var _el_textContent;
|
|
593
|
-
var event = el.getAttribute("event");
|
|
594
|
-
var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
|
|
595
|
-
if (event && url) {
|
|
596
|
-
var eventKey = event;
|
|
597
|
-
if (trackingUrls[eventKey]) {
|
|
598
|
-
trackingUrls[eventKey].push(url);
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
});
|
|
602
|
-
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();
|
|
635
|
+
return {
|
|
636
|
+
type: "empty"
|
|
637
|
+
};
|
|
638
|
+
}
|
|
603
639
|
return {
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
640
|
+
type: "inline",
|
|
641
|
+
ad: {
|
|
642
|
+
id: adId,
|
|
643
|
+
title: title,
|
|
644
|
+
duration: duration,
|
|
645
|
+
mediaFiles: mediaFiles,
|
|
646
|
+
trackingUrls: extractTrackingUrls(xmlDoc),
|
|
647
|
+
clickThrough: clickThrough
|
|
648
|
+
}
|
|
610
649
|
};
|
|
611
650
|
} catch (error) {
|
|
612
651
|
console.error("[HlsAdPlayer] Error parsing VAST XML:", error);
|
|
613
|
-
return
|
|
652
|
+
return {
|
|
653
|
+
type: "empty"
|
|
654
|
+
};
|
|
614
655
|
}
|
|
615
656
|
}
|
|
616
|
-
function
|
|
657
|
+
function fetchVastXml(vastTagUrl) {
|
|
617
658
|
return _async_to_generator(function() {
|
|
618
|
-
var response
|
|
659
|
+
var response;
|
|
619
660
|
return _ts_generator(this, function(_state) {
|
|
620
661
|
switch(_state.label){
|
|
621
662
|
case 0:
|
|
@@ -636,20 +677,58 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
636
677
|
throw new Error("Failed to fetch VAST: ".concat(response.statusText));
|
|
637
678
|
}
|
|
638
679
|
return [
|
|
639
|
-
|
|
680
|
+
2,
|
|
640
681
|
response.text()
|
|
641
682
|
];
|
|
642
|
-
|
|
683
|
+
}
|
|
684
|
+
});
|
|
685
|
+
})();
|
|
686
|
+
}
|
|
687
|
+
function fetchAndParseVastAd(_0) {
|
|
688
|
+
return _async_to_generator(function(vastTagUrl) {
|
|
689
|
+
var depth, accumulatedTracking, vastXml, parsed;
|
|
690
|
+
var _arguments = arguments;
|
|
691
|
+
return _ts_generator(this, function(_state) {
|
|
692
|
+
switch(_state.label){
|
|
693
|
+
case 0:
|
|
694
|
+
depth = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : 0, accumulatedTracking = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : createEmptyTrackingUrls();
|
|
695
|
+
return [
|
|
696
|
+
4,
|
|
697
|
+
fetchVastXml(vastTagUrl)
|
|
698
|
+
];
|
|
699
|
+
case 1:
|
|
643
700
|
vastXml = _state.sent();
|
|
644
701
|
console.log("[HlsAdPlayer] VAST XML received");
|
|
645
702
|
console.log("[HlsAdPlayer] VAST XML content (first 2000 chars):", vastXml.substring(0, 2e3));
|
|
703
|
+
parsed = parseVastXml(vastXml);
|
|
704
|
+
if (parsed.type === "empty") {
|
|
705
|
+
return [
|
|
706
|
+
2,
|
|
707
|
+
null
|
|
708
|
+
];
|
|
709
|
+
}
|
|
710
|
+
if (parsed.type === "wrapper") {
|
|
711
|
+
if (depth >= MAX_VAST_WRAPPER_DEPTH) {
|
|
712
|
+
console.warn("[HlsAdPlayer] VAST wrapper depth limit (".concat(MAX_VAST_WRAPPER_DEPTH, ") reached, aborting redirect chain"));
|
|
713
|
+
return [
|
|
714
|
+
2,
|
|
715
|
+
null
|
|
716
|
+
];
|
|
717
|
+
}
|
|
718
|
+
mergeTrackingUrls(accumulatedTracking, parsed.trackingUrls);
|
|
719
|
+
return [
|
|
720
|
+
2,
|
|
721
|
+
fetchAndParseVastAd(parsed.vastAdTagUri, depth + 1, accumulatedTracking)
|
|
722
|
+
];
|
|
723
|
+
}
|
|
724
|
+
mergeTrackingUrls(parsed.ad.trackingUrls, accumulatedTracking);
|
|
646
725
|
return [
|
|
647
726
|
2,
|
|
648
|
-
|
|
727
|
+
parsed.ad
|
|
649
728
|
];
|
|
650
729
|
}
|
|
651
730
|
});
|
|
652
|
-
})();
|
|
731
|
+
}).apply(this, arguments);
|
|
653
732
|
}
|
|
654
733
|
function createAdVideoElement() {
|
|
655
734
|
var video = document.createElement("video");
|
|
@@ -2188,6 +2267,166 @@ function initializePolyfills() {
|
|
|
2188
2267
|
polyfillTextEncoder();
|
|
2189
2268
|
polyfillPromiseFinally();
|
|
2190
2269
|
}
|
|
2270
|
+
// src/utils/vastMacros.ts
|
|
2271
|
+
function generateCorrelator() {
|
|
2272
|
+
if (typeof crypto !== "undefined" && crypto.getRandomValues) {
|
|
2273
|
+
try {
|
|
2274
|
+
var _buf_, _buf_1;
|
|
2275
|
+
var buf = new Uint32Array(2);
|
|
2276
|
+
crypto.getRandomValues(buf);
|
|
2277
|
+
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);
|
|
2278
|
+
if (value > 0) {
|
|
2279
|
+
return String(value);
|
|
2280
|
+
}
|
|
2281
|
+
} catch (unused) {}
|
|
2282
|
+
}
|
|
2283
|
+
return String(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1);
|
|
2284
|
+
}
|
|
2285
|
+
var UNEXPANDED_MACRO_PATTERN = /^(\[[^\]]*\]|\{[^}]*\}|%%[^%]*%%)$/;
|
|
2286
|
+
function applyVastMacros(baseUrl, ctx) {
|
|
2287
|
+
var url;
|
|
2288
|
+
try {
|
|
2289
|
+
url = new URL(baseUrl);
|
|
2290
|
+
} catch (unused) {
|
|
2291
|
+
return replaceCorrelatorFallback(baseUrl, ctx.correlator);
|
|
2292
|
+
}
|
|
2293
|
+
var params = url.searchParams;
|
|
2294
|
+
params.set("correlator", ctx.correlator);
|
|
2295
|
+
params.set("scor", ctx.streamCorrelator);
|
|
2296
|
+
if (ctx.pod != null) {
|
|
2297
|
+
params.set("pod", String(ctx.pod));
|
|
2298
|
+
}
|
|
2299
|
+
if (ctx.adPosition != null) {
|
|
2300
|
+
params.set("ppos", String(ctx.adPosition));
|
|
2301
|
+
}
|
|
2302
|
+
if (ctx.pageUrl) {
|
|
2303
|
+
params.set("url", ctx.pageUrl);
|
|
2304
|
+
params.set("description_url", ctx.pageUrl);
|
|
2305
|
+
}
|
|
2306
|
+
if (ctx.adWillPlayMuted != null) {
|
|
2307
|
+
params.set("vpmute", ctx.adWillPlayMuted ? "1" : "0");
|
|
2308
|
+
}
|
|
2309
|
+
if (ctx.adWillAutoPlay != null) {
|
|
2310
|
+
params.set("vpa", ctx.adWillAutoPlay ? "auto" : "click");
|
|
2311
|
+
}
|
|
2312
|
+
if (ctx.deviceId && ctx.deviceIdType) {
|
|
2313
|
+
params.set("rdid", ctx.deviceId);
|
|
2314
|
+
params.set("idtype", ctx.deviceIdType);
|
|
2315
|
+
params.set("is_lat", ctx.limitAdTracking ? "1" : "0");
|
|
2316
|
+
} else {
|
|
2317
|
+
params.delete("rdid");
|
|
2318
|
+
params.delete("idtype");
|
|
2319
|
+
params.delete("is_lat");
|
|
2320
|
+
}
|
|
2321
|
+
var consent = ctx.consent;
|
|
2322
|
+
if ((consent === null || consent === void 0 ? void 0 : consent.gdpr) != null) {
|
|
2323
|
+
params.set("gdpr", consent.gdpr);
|
|
2324
|
+
}
|
|
2325
|
+
if ((consent === null || consent === void 0 ? void 0 : consent.gdprConsent) != null) {
|
|
2326
|
+
params.set("gdpr_consent", consent.gdprConsent);
|
|
2327
|
+
}
|
|
2328
|
+
if ((consent === null || consent === void 0 ? void 0 : consent.usPrivacy) != null) {
|
|
2329
|
+
params.set("us_privacy", consent.usPrivacy);
|
|
2330
|
+
}
|
|
2331
|
+
if (ctx.adTest) {
|
|
2332
|
+
params.set("adtest", "on");
|
|
2333
|
+
}
|
|
2334
|
+
var staleKeys = [];
|
|
2335
|
+
params.forEach(function(value, key) {
|
|
2336
|
+
if (UNEXPANDED_MACRO_PATTERN.test(value)) {
|
|
2337
|
+
staleKeys.push(key);
|
|
2338
|
+
}
|
|
2339
|
+
});
|
|
2340
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
2341
|
+
try {
|
|
2342
|
+
for(var _iterator = staleKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
2343
|
+
var key = _step.value;
|
|
2344
|
+
params.delete(key);
|
|
2345
|
+
}
|
|
2346
|
+
} catch (err) {
|
|
2347
|
+
_didIteratorError = true;
|
|
2348
|
+
_iteratorError = err;
|
|
2349
|
+
} finally{
|
|
2350
|
+
try {
|
|
2351
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
2352
|
+
_iterator.return();
|
|
2353
|
+
}
|
|
2354
|
+
} finally{
|
|
2355
|
+
if (_didIteratorError) {
|
|
2356
|
+
throw _iteratorError;
|
|
2357
|
+
}
|
|
2358
|
+
}
|
|
2359
|
+
}
|
|
2360
|
+
return url.toString();
|
|
2361
|
+
}
|
|
2362
|
+
function replaceCorrelatorFallback(baseUrl, correlator) {
|
|
2363
|
+
var correlatorRegex = /([?&])correlator=([^&]*)/;
|
|
2364
|
+
if (correlatorRegex.test(baseUrl)) {
|
|
2365
|
+
return baseUrl.replace(correlatorRegex, "$1correlator=".concat(correlator));
|
|
2366
|
+
}
|
|
2367
|
+
var sep = baseUrl.includes("?") ? "&" : "?";
|
|
2368
|
+
return "".concat(baseUrl).concat(sep, "correlator=").concat(correlator);
|
|
2369
|
+
}
|
|
2370
|
+
function fetchConsentSignals() {
|
|
2371
|
+
var timeoutMs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 1500;
|
|
2372
|
+
var signals = {};
|
|
2373
|
+
if (typeof window === "undefined") {
|
|
2374
|
+
return Promise.resolve(signals);
|
|
2375
|
+
}
|
|
2376
|
+
var tasks = [];
|
|
2377
|
+
var tcfApi = window.__tcfapi;
|
|
2378
|
+
if (typeof tcfApi === "function") {
|
|
2379
|
+
tasks.push(new Promise(function(resolve) {
|
|
2380
|
+
var settled = false;
|
|
2381
|
+
try {
|
|
2382
|
+
tcfApi("addEventListener", 2, function(tcData, success) {
|
|
2383
|
+
if (settled) return;
|
|
2384
|
+
if (success && tcData && (tcData.eventStatus === "tcloaded" || tcData.eventStatus === "useractioncomplete")) {
|
|
2385
|
+
settled = true;
|
|
2386
|
+
signals.gdpr = tcData.gdprApplies ? "1" : "0";
|
|
2387
|
+
if (typeof tcData.tcString === "string" && tcData.tcString) {
|
|
2388
|
+
signals.gdprConsent = tcData.tcString;
|
|
2389
|
+
}
|
|
2390
|
+
try {
|
|
2391
|
+
tcfApi("removeEventListener", 2, function() {}, tcData.listenerId);
|
|
2392
|
+
} catch (unused) {}
|
|
2393
|
+
resolve();
|
|
2394
|
+
}
|
|
2395
|
+
});
|
|
2396
|
+
} catch (unused) {
|
|
2397
|
+
resolve();
|
|
2398
|
+
}
|
|
2399
|
+
setTimeout(function() {
|
|
2400
|
+
if (!settled) {
|
|
2401
|
+
settled = true;
|
|
2402
|
+
resolve();
|
|
2403
|
+
}
|
|
2404
|
+
}, timeoutMs);
|
|
2405
|
+
}));
|
|
2406
|
+
}
|
|
2407
|
+
var uspApi = window.__uspapi;
|
|
2408
|
+
if (typeof uspApi === "function") {
|
|
2409
|
+
tasks.push(new Promise(function(resolve) {
|
|
2410
|
+
try {
|
|
2411
|
+
uspApi("getUSPData", 1, function(data, success) {
|
|
2412
|
+
if (success && typeof (data === null || data === void 0 ? void 0 : data.uspString) === "string" && data.uspString) {
|
|
2413
|
+
signals.usPrivacy = data.uspString;
|
|
2414
|
+
}
|
|
2415
|
+
resolve();
|
|
2416
|
+
});
|
|
2417
|
+
} catch (unused) {
|
|
2418
|
+
resolve();
|
|
2419
|
+
}
|
|
2420
|
+
setTimeout(resolve, timeoutMs);
|
|
2421
|
+
}));
|
|
2422
|
+
}
|
|
2423
|
+
if (tasks.length === 0) {
|
|
2424
|
+
return Promise.resolve(signals);
|
|
2425
|
+
}
|
|
2426
|
+
return Promise.all(tasks).then(function() {
|
|
2427
|
+
return signals;
|
|
2428
|
+
});
|
|
2429
|
+
}
|
|
2191
2430
|
// src/utils/browserCompat.ts
|
|
2192
2431
|
function getChromeVersion(ua) {
|
|
2193
2432
|
var match = ua.match(/Chrome\/(\d+)/);
|
|
@@ -2413,6 +2652,11 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
2413
2652
|
this.preloadPoolLoopRunning = false;
|
|
2414
2653
|
this.adDetectSentForCurrentBreak = false;
|
|
2415
2654
|
this.palPlaybackStarted = false;
|
|
2655
|
+
this.streamCorrelator = generateCorrelator();
|
|
2656
|
+
this.consentSignals = {};
|
|
2657
|
+
this.podCounter = 0;
|
|
2658
|
+
this.podAssignedByPrefetch = false;
|
|
2659
|
+
this.adRequestPositionInBreak = 0;
|
|
2416
2660
|
this.continuousFetchLoopRunning = false;
|
|
2417
2661
|
initializePolyfills();
|
|
2418
2662
|
var browserOverrides = getBrowserConfigOverrides();
|
|
@@ -2485,6 +2729,9 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
2485
2729
|
adWillPlayMuted: !!this.config.muted,
|
|
2486
2730
|
continuousPlayback: (_this_config_lowLatencyMode = this.config.lowLatencyMode) !== null && _this_config_lowLatencyMode !== void 0 ? _this_config_lowLatencyMode : false
|
|
2487
2731
|
}).catch(function() {});
|
|
2732
|
+
fetchConsentSignals().then(function(signals) {
|
|
2733
|
+
_this.consentSignals = signals;
|
|
2734
|
+
}).catch(function() {});
|
|
2488
2735
|
this.initializeTracking();
|
|
2489
2736
|
if (!this.shouldUseNativeHls()) return [
|
|
2490
2737
|
3,
|
|
@@ -4781,25 +5028,35 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4781
5028
|
return this.getRemainingAdMs();
|
|
4782
5029
|
}
|
|
4783
5030
|
},
|
|
5031
|
+
{
|
|
5032
|
+
key: "beginNewAdPod",
|
|
5033
|
+
value: function beginNewAdPod() {
|
|
5034
|
+
this.podCounter++;
|
|
5035
|
+
this.adRequestPositionInBreak = 0;
|
|
5036
|
+
}
|
|
5037
|
+
},
|
|
4784
5038
|
{
|
|
4785
5039
|
key: "generateVastUrlsWithCorrelators",
|
|
4786
5040
|
value: function generateVastUrlsWithCorrelators(baseUrl, count) {
|
|
4787
5041
|
var urls = [];
|
|
4788
|
-
var baseTimestamp = Date.now();
|
|
4789
5042
|
for(var i = 0; i < count; i++){
|
|
4790
|
-
|
|
4791
|
-
var
|
|
4792
|
-
var
|
|
4793
|
-
|
|
4794
|
-
|
|
4795
|
-
|
|
4796
|
-
|
|
4797
|
-
|
|
4798
|
-
|
|
4799
|
-
|
|
4800
|
-
|
|
4801
|
-
|
|
4802
|
-
|
|
5043
|
+
this.adRequestPositionInBreak++;
|
|
5044
|
+
var adWillPlayMuted = this.inAdBreak ? this.adPlayer.getOriginalMutedState() : this.video.muted;
|
|
5045
|
+
var urlWithMacros = applyVastMacros(baseUrl, {
|
|
5046
|
+
correlator: generateCorrelator(),
|
|
5047
|
+
streamCorrelator: this.streamCorrelator,
|
|
5048
|
+
pod: this.podCounter > 0 ? this.podCounter : void 0,
|
|
5049
|
+
adPosition: this.adRequestPositionInBreak,
|
|
5050
|
+
pageUrl: typeof window !== "undefined" ? window.location.href : void 0,
|
|
5051
|
+
adWillPlayMuted: adWillPlayMuted,
|
|
5052
|
+
adWillAutoPlay: !!this.config.autoplay,
|
|
5053
|
+
deviceId: this.config.deviceId,
|
|
5054
|
+
deviceIdType: this.config.deviceIdType,
|
|
5055
|
+
limitAdTracking: this.config.limitAdTracking,
|
|
5056
|
+
adTest: this.config.adTest,
|
|
5057
|
+
consent: this.consentSignals
|
|
5058
|
+
});
|
|
5059
|
+
urls.push(this.palNonce.injectNonce(urlWithMacros));
|
|
4803
5060
|
}
|
|
4804
5061
|
return urls;
|
|
4805
5062
|
}
|
|
@@ -4869,6 +5126,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4869
5126
|
}
|
|
4870
5127
|
return;
|
|
4871
5128
|
}
|
|
5129
|
+
this.beginNewAdPod();
|
|
5130
|
+
this.podAssignedByPrefetch = true;
|
|
4872
5131
|
var urlsToPregenerate = 5;
|
|
4873
5132
|
var generatedUrls = this.generateVastUrlsWithCorrelators(baseVastUrl, urlsToPregenerate);
|
|
4874
5133
|
this.pendingAdBreak = _object_spread_props(_object_spread({
|
|
@@ -4906,6 +5165,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4906
5165
|
}
|
|
4907
5166
|
this.pendingAdBreak = null;
|
|
4908
5167
|
this.pendingScte35CueKey = void 0;
|
|
5168
|
+
this.podAssignedByPrefetch = false;
|
|
4909
5169
|
}
|
|
4910
5170
|
},
|
|
4911
5171
|
{
|
|
@@ -5342,6 +5602,11 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5342
5602
|
this.continuousFetchingActive = true;
|
|
5343
5603
|
this.isShowingPlaceholder = false;
|
|
5344
5604
|
this.totalAdRequestsInBreak = 0;
|
|
5605
|
+
if (this.podAssignedByPrefetch) {
|
|
5606
|
+
this.podAssignedByPrefetch = false;
|
|
5607
|
+
} else {
|
|
5608
|
+
this.beginNewAdPod();
|
|
5609
|
+
}
|
|
5345
5610
|
currentMuted = this.video.muted;
|
|
5346
5611
|
currentVolume = this.video.volume;
|
|
5347
5612
|
this.adPlayer.updateOriginalMutedState(currentMuted, currentVolume);
|