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.
@@ -1,4 +1,4 @@
1
- import { S as StormcloudVideoPlayerConfig } from '../types-BmF_60m2.cjs';
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, _xmlDoc_querySelector_textContent, _xmlDoc_querySelector2;
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 null;
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 null;
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 = ((_xmlDoc_querySelector1 = xmlDoc.querySelector("Duration")) === null || _xmlDoc_querySelector1 === void 0 ? void 0 : _xmlDoc_querySelector1.textContent) || "00:00:30";
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 null;
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
- id: adId,
657
- title: title,
658
- duration: duration,
659
- mediaFiles: mediaFiles,
660
- trackingUrls: trackingUrls,
661
- clickThrough: clickThrough
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 null;
704
+ return {
705
+ type: "empty"
706
+ };
666
707
  }
667
708
  }
668
- function fetchAndParseVastAd(vastTagUrl) {
709
+ function fetchVastXml(vastTagUrl) {
669
710
  return _async_to_generator(function() {
670
- var response, vastXml;
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
- 4,
732
+ 2,
692
733
  response.text()
693
734
  ];
694
- case 2:
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
- parseVastXml(vastXml)
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
- var timestamp = baseTimestamp + i;
4843
- var random = Math.floor(Math.random() * 1e12);
4844
- var uniqueCorrelator = "".concat(timestamp, "_").concat(random, "_").concat(i);
4845
- var urlWithCorrelator = void 0;
4846
- var correlatorRegex = /([?&])correlator=([^&]*)/;
4847
- if (correlatorRegex.test(baseUrl)) {
4848
- urlWithCorrelator = baseUrl.replace(correlatorRegex, "$1correlator=".concat(uniqueCorrelator));
4849
- } else if (baseUrl.includes("?")) {
4850
- urlWithCorrelator = "".concat(baseUrl, "&correlator=").concat(uniqueCorrelator);
4851
- } else {
4852
- urlWithCorrelator = "".concat(baseUrl, "?correlator=").concat(uniqueCorrelator);
4853
- }
4854
- urls.push(this.palNonce.injectNonce(urlWithCorrelator));
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);