stormcloud-video-player 0.8.70 → 0.8.72

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/lib/index.d.ts CHANGED
@@ -258,7 +258,7 @@ declare class StormcloudVideoPlayer {
258
258
  private readonly adBreak;
259
259
  private readonly floorLadder;
260
260
  private floorLadderEnabled;
261
- private readonly edgePodBaseUrl;
261
+ private edgePodBaseUrl;
262
262
  constructor(config: StormcloudVideoPlayerConfig);
263
263
  private get debug();
264
264
  private createAdPlayer;
@@ -266,6 +266,11 @@ declare class StormcloudVideoPlayer {
266
266
  setAdFloorLadder(update: Partial<AdFloorLadderConfig>): FloorLadderValidationReport;
267
267
  setAdFloorLadderEnabled(enabled: boolean): void;
268
268
  isAdFloorLadderEnabled(): boolean;
269
+ setEdgePodRequest(update: {
270
+ enableEdgePodRequest?: boolean;
271
+ edgePodUrl?: string;
272
+ }): void;
273
+ getEdgePodUrl(): string | undefined;
269
274
  private warnOnInvalidFloorLadder;
270
275
  getAdFloorLadder(): AdFloorLadderConfig;
271
276
  getAdFloorBounds(): FloorLadderBounds;
package/lib/index.js CHANGED
@@ -6413,6 +6413,10 @@ function toNumber(val) {
6413
6413
  var n = typeof val === "string" ? parseFloat(val) : Number(val);
6414
6414
  return Number.isNaN(n) ? void 0 : n;
6415
6415
  }
6416
+ function getDateRangeDurationSeconds(attrs) {
6417
+ var _toNumber;
6418
+ return (_toNumber = toNumber(attrs["DURATION"])) !== null && _toNumber !== void 0 ? _toNumber : toNumber(attrs["PLANNED-DURATION"]);
6419
+ }
6416
6420
  function isManifestBasedMarker(marker) {
6417
6421
  var raw = marker.raw;
6418
6422
  if (!raw) return false;
@@ -8784,11 +8788,13 @@ var HlsEngine = /*#__PURE__*/ function() {
8784
8788
  }
8785
8789
  }
8786
8790
  if (!tag) continue;
8791
+ if (tag.includes("EXT-X-CUE-OUT-CONT")) continue;
8787
8792
  if (tag.includes("EXT-X-CUE-OUT") || tag.includes("EXT-X-DATERANGE")) {
8788
- var attrs = tag.includes("EXT-X-DATERANGE") ? parseAttributeList(value) : {};
8793
+ var isDateRange = tag.includes("EXT-X-DATERANGE");
8794
+ var attrs = isDateRange ? parseAttributeList(value) : {};
8789
8795
  var hasScteOut = tag.includes("EXT-X-CUE-OUT") || "SCTE35-OUT" in attrs || attrs["SCTE35-OUT"] !== void 0;
8790
8796
  if (hasScteOut) {
8791
- var durationSeconds = parseCueOutDuration(value);
8797
+ var durationSeconds = isDateRange ? getDateRangeDurationSeconds(attrs) : parseCueOutDuration(value);
8792
8798
  var marker = _object_spread_props(_object_spread({
8793
8799
  type: "start"
8794
8800
  }, durationSeconds !== void 0 ? {
@@ -8962,7 +8968,7 @@ var HlsEngine = /*#__PURE__*/ function() {
8962
8968
  var hasScteOut = "SCTE35-OUT" in attrs || attrs["SCTE35-OUT"] !== void 0;
8963
8969
  var hasScteIn = "SCTE35-IN" in attrs || attrs["SCTE35-IN"] !== void 0;
8964
8970
  var klass = String((_attrs_CLASS = attrs["CLASS"]) !== null && _attrs_CLASS !== void 0 ? _attrs_CLASS : "");
8965
- var duration = toNumber(attrs["DURATION"]);
8971
+ var duration = getDateRangeDurationSeconds(attrs);
8966
8972
  if (hasScteOut || /com\.apple\.hls\.cue/i.test(klass)) {
8967
8973
  var marker2 = _object_spread_props(_object_spread({
8968
8974
  type: "start"
@@ -9229,19 +9235,31 @@ var HlsEngine = /*#__PURE__*/ function() {
9229
9235
  // src/player/EdgePodRequest.ts
9230
9236
  var EDGE_POD_MAX_ADS = 10;
9231
9237
  var EDGE_POD_EXCEEDS_BUDGET = "edge_pod_exceeds_budget";
9238
+ var LICENSE_KEY_PLACEHOLDER = /\{licenseKey\}|%7BlicenseKey%7D/gi;
9232
9239
  function resolveEdgePodBaseUrl(config) {
9233
- var _config_edgePodUrl;
9240
+ var _config_edgePodUrl, _config_licenseKey;
9234
9241
  if (config.enableEdgePodRequest !== true) return void 0;
9235
9242
  var raw = (_config_edgePodUrl = config.edgePodUrl) === null || _config_edgePodUrl === void 0 ? void 0 : _config_edgePodUrl.trim();
9236
9243
  if (!raw) {
9237
9244
  console.warn("[AdBreak][EDGE] enableEdgePodRequest is true but edgePodUrl is missing; using GAM only");
9238
9245
  return void 0;
9239
9246
  }
9247
+ var licenseKey = (_config_licenseKey = config.licenseKey) === null || _config_licenseKey === void 0 ? void 0 : _config_licenseKey.trim();
9248
+ if (!licenseKey) {
9249
+ console.warn("[AdBreak][EDGE] enableEdgePodRequest is true but licenseKey is missing; using GAM only");
9250
+ return void 0;
9251
+ }
9252
+ var encodedKey = encodeURIComponent(licenseKey);
9240
9253
  try {
9241
- var url = new URL(raw);
9254
+ var hasPlaceholder = raw.search(LICENSE_KEY_PLACEHOLDER) !== -1;
9255
+ var url = new URL(hasPlaceholder ? raw.replace(LICENSE_KEY_PLACEHOLDER, encodedKey) : raw);
9242
9256
  if (url.protocol !== "https:" && url.protocol !== "http:") {
9243
9257
  throw new Error("unsupported protocol ".concat(url.protocol));
9244
9258
  }
9259
+ if (!hasPlaceholder) {
9260
+ var path = url.pathname.replace(/\/+$/, "");
9261
+ url.pathname = /\/[^/]+\/pod$/.test(path) ? path.replace(/\/[^/]+\/pod$/, "/".concat(encodedKey, "/pod")) : "".concat(path, "/").concat(encodedKey, "/pod");
9262
+ }
9245
9263
  return url.toString();
9246
9264
  } catch (unused) {
9247
9265
  console.warn("[AdBreak][EDGE] edgePodUrl is not a valid http(s) URL; using GAM only");
@@ -11721,6 +11739,25 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
11721
11739
  return this.floorLadderEnabled;
11722
11740
  }
11723
11741
  },
11742
+ {
11743
+ key: "setEdgePodRequest",
11744
+ value: function setEdgePodRequest(update) {
11745
+ if (update.enableEdgePodRequest === this.config.enableEdgePodRequest && update.edgePodUrl === this.config.edgePodUrl) {
11746
+ return;
11747
+ }
11748
+ if (update.enableEdgePodRequest === void 0) delete this.config.enableEdgePodRequest;
11749
+ else this.config.enableEdgePodRequest = update.enableEdgePodRequest;
11750
+ if (update.edgePodUrl === void 0) delete this.config.edgePodUrl;
11751
+ else this.config.edgePodUrl = update.edgePodUrl;
11752
+ this.edgePodBaseUrl = resolveEdgePodBaseUrl(this.config);
11753
+ }
11754
+ },
11755
+ {
11756
+ key: "getEdgePodUrl",
11757
+ value: function getEdgePodUrl() {
11758
+ return this.edgePodBaseUrl;
11759
+ }
11760
+ },
11724
11761
  {
11725
11762
  key: "warnOnInvalidFloorLadder",
11726
11763
  value: function warnOnInvalidFloorLadder(report) {
@@ -12559,9 +12596,7 @@ var CRITICAL_PROPS = [
12559
12596
  "ctvAdRequest",
12560
12597
  "adFloorMinCents",
12561
12598
  "adFloorMaxCents",
12562
- "adFloorStepCents",
12563
- "enableEdgePodRequest",
12564
- "edgePodUrl"
12599
+ "adFloorStepCents"
12565
12600
  ];
12566
12601
  var CONTROLS_HIDE_DELAY = 3e3;
12567
12602
  var DEFAULT_PLAYER_ASPECT_RATIO = 16 / 9;
@@ -12760,9 +12795,7 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
12760
12795
  vastMode,
12761
12796
  adFloorMinCents,
12762
12797
  adFloorMaxCents,
12763
- adFloorStepCents,
12764
- enableEdgePodRequest,
12765
- edgePodUrl
12798
+ adFloorStepCents
12766
12799
  ]);
12767
12800
  useEffect(function() {
12768
12801
  if (typeof window === "undefined") return;
@@ -12875,6 +12908,17 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
12875
12908
  }, [
12876
12909
  adFloorLadderEnabled
12877
12910
  ]);
12911
+ useEffect(function() {
12912
+ if (!playerRef.current) return;
12913
+ playerRef.current.setEdgePodRequest(_object_spread({}, enableEdgePodRequest !== void 0 ? {
12914
+ enableEdgePodRequest: enableEdgePodRequest
12915
+ } : {}, edgePodUrl !== void 0 ? {
12916
+ edgePodUrl: edgePodUrl
12917
+ } : {}));
12918
+ }, [
12919
+ enableEdgePodRequest,
12920
+ edgePodUrl
12921
+ ]);
12878
12922
  useEffect(function() {
12879
12923
  if (!playerRef.current) return;
12880
12924
  var checkAdStatus = function checkAdStatus() {
@@ -13951,7 +13995,7 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
13951
13995
  }
13952
13996
  }
13953
13997
  }
13954
- if (prevProps.adFloorLadderEnabled !== nextProps.adFloorLadderEnabled) {
13998
+ if (prevProps.adFloorLadderEnabled !== nextProps.adFloorLadderEnabled || prevProps.enableEdgePodRequest !== nextProps.enableEdgePodRequest || prevProps.edgePodUrl !== nextProps.edgePodUrl) {
13955
13999
  return false;
13956
14000
  }
13957
14001
  if (JSON.stringify((_prevProps_adFloorLadder = prevProps.adFloorLadder) !== null && _prevProps_adFloorLadder !== void 0 ? _prevProps_adFloorLadder : null) !== JSON.stringify((_nextProps_adFloorLadder = nextProps.adFloorLadder) !== null && _nextProps_adFloorLadder !== void 0 ? _nextProps_adFloorLadder : null)) {