stormcloud-video-player 0.8.75 → 0.8.76
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 +1 -1
- package/lib/Player.cjs +10 -12
- package/lib/Player.cjs.map +1 -1
- package/lib/Player.d.cts +1 -1
- package/lib/StormcloudPlayer.cjs +163 -78
- package/lib/StormcloudPlayer.cjs.map +1 -1
- package/lib/index.cjs +174 -133
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +1 -1
- package/lib/index.d.ts +5 -19
- package/lib/index.js +168 -131
- package/lib/index.js.map +1 -1
- package/lib/player/AdBreakOrchestrator.cjs +45 -13
- package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
- package/lib/player/AdConfigManager.cjs +17 -3
- package/lib/player/AdConfigManager.cjs.map +1 -1
- package/lib/player/AdConfigManager.d.cts +3 -0
- package/lib/player/EdgePodRequest.cjs +31 -1
- package/lib/player/EdgePodRequest.cjs.map +1 -1
- package/lib/player/EdgePodRequest.d.cts +21 -3
- package/lib/player/FloorLadder.cjs +86 -27
- package/lib/player/FloorLadder.cjs.map +1 -1
- package/lib/player/FloorLadder.d.cts +8 -7
- package/lib/player/StormcloudVideoPlayer.cjs +163 -78
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.d.cts +3 -9
- package/lib/players/HlsPlayer.cjs +163 -78
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/index.cjs +163 -78
- package/lib/players/index.cjs.map +1 -1
- package/lib/props.cjs +10 -12
- package/lib/props.cjs.map +1 -1
- package/lib/types.d.cts +3 -7
- package/lib/ui/StormcloudVideoPlayer.cjs +167 -139
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/utils/tracking.cjs +7 -0
- package/lib/utils/tracking.cjs.map +1 -1
- package/lib/utils/tracking.d.cts +2 -1
- package/package.json +1 -1
package/lib/index.cjs
CHANGED
|
@@ -412,8 +412,8 @@ __export(index_exports, {
|
|
|
412
412
|
DEFAULT_TRACKING_INGEST_CONFIG: function DEFAULT_TRACKING_INGEST_CONFIG1() {
|
|
413
413
|
return DEFAULT_TRACKING_INGEST_CONFIG;
|
|
414
414
|
},
|
|
415
|
-
|
|
416
|
-
return
|
|
415
|
+
DISABLED_FLOOR_LADDER_CONFIG: function DISABLED_FLOOR_LADDER_CONFIG1() {
|
|
416
|
+
return DISABLED_FLOOR_LADDER_CONFIG;
|
|
417
417
|
},
|
|
418
418
|
GAM_AD_OPPORTUNITY_DURATION_MS: function GAM_AD_OPPORTUNITY_DURATION_MS1() {
|
|
419
419
|
return GAM_AD_OPPORTUNITY_DURATION_MS;
|
|
@@ -511,6 +511,9 @@ __export(index_exports, {
|
|
|
511
511
|
omit: function omit1() {
|
|
512
512
|
return omit;
|
|
513
513
|
},
|
|
514
|
+
parseApiFloorLadder: function parseApiFloorLadder1() {
|
|
515
|
+
return parseApiFloorLadder;
|
|
516
|
+
},
|
|
514
517
|
parseQuery: function parseQuery1() {
|
|
515
518
|
return parseQuery;
|
|
516
519
|
},
|
|
@@ -1884,21 +1887,19 @@ function fetchConsentSignals() {
|
|
|
1884
1887
|
});
|
|
1885
1888
|
}
|
|
1886
1889
|
// src/player/FloorLadder.ts
|
|
1887
|
-
var
|
|
1890
|
+
var DISABLED_FLOOR_LADDER_CONFIG = Object.freeze({
|
|
1888
1891
|
enabled: false,
|
|
1889
|
-
targetingKey: "
|
|
1890
|
-
minFloorCents:
|
|
1891
|
-
maxFloorCents:
|
|
1892
|
-
stepCents:
|
|
1893
|
-
selectedFloorCents:
|
|
1894
|
-
fallbackFloorCents:
|
|
1892
|
+
targetingKey: "",
|
|
1893
|
+
minFloorCents: 0,
|
|
1894
|
+
maxFloorCents: 0,
|
|
1895
|
+
stepCents: 0,
|
|
1896
|
+
selectedFloorCents: 0,
|
|
1897
|
+
fallbackFloorCents: 0,
|
|
1895
1898
|
readyFloorCents: [],
|
|
1896
1899
|
mode: "fixed",
|
|
1897
|
-
allowedPositions: [
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
targetAdUnitPath: "/21821455290/airytvadx/airytv-web",
|
|
1901
|
-
configurationVersion: "2026-09-29.1"
|
|
1900
|
+
allowedPositions: [],
|
|
1901
|
+
targetAdUnitPath: "",
|
|
1902
|
+
configurationVersion: ""
|
|
1902
1903
|
});
|
|
1903
1904
|
var DEFAULT_FLOOR_LADDER_BOUNDS = Object.freeze({
|
|
1904
1905
|
minCents: 25,
|
|
@@ -2057,7 +2058,6 @@ function resolveOpportunityFloor(config, context) {
|
|
|
2057
2058
|
if (!config.enabled) return skipped("disabled");
|
|
2058
2059
|
var positions = Array.isArray(config.allowedPositions) ? config.allowedPositions : [];
|
|
2059
2060
|
if (positions.indexOf(context.position) === -1) return skipped("position_not_allowed");
|
|
2060
|
-
if (context.isCtv) return skipped("ctv_excluded");
|
|
2061
2061
|
if (!config.targetingKey) return skipped("missing_targeting_key");
|
|
2062
2062
|
if (!config.targetAdUnitPath) return skipped("missing_target_ad_unit");
|
|
2063
2063
|
var result;
|
|
@@ -2211,15 +2211,80 @@ function mergeDefined(target, update) {
|
|
|
2211
2211
|
}
|
|
2212
2212
|
return copyConfig(next);
|
|
2213
2213
|
}
|
|
2214
|
+
var AD_POSITIONS = [
|
|
2215
|
+
"preroll",
|
|
2216
|
+
"midroll",
|
|
2217
|
+
"postroll"
|
|
2218
|
+
];
|
|
2219
|
+
function finiteNumber(value) {
|
|
2220
|
+
return typeof value === "number" && isFinite(value) ? value : void 0;
|
|
2221
|
+
}
|
|
2222
|
+
function parseApiFloorLadder(raw) {
|
|
2223
|
+
if (!raw || (typeof raw === "undefined" ? "undefined" : _type_of(raw)) !== "object" || Array.isArray(raw)) return void 0;
|
|
2224
|
+
var src = raw;
|
|
2225
|
+
var out = {};
|
|
2226
|
+
if (typeof src.enabled === "boolean") out.enabled = src.enabled;
|
|
2227
|
+
if (typeof src.targetingKey === "string") out.targetingKey = src.targetingKey;
|
|
2228
|
+
if (typeof src.targetAdUnitPath === "string") out.targetAdUnitPath = src.targetAdUnitPath;
|
|
2229
|
+
if (typeof src.configurationVersion === "string") out.configurationVersion = src.configurationVersion;
|
|
2230
|
+
if (typeof src.mode === "string") out.mode = src.mode;
|
|
2231
|
+
var min = finiteNumber(src.minFloorCents);
|
|
2232
|
+
var max = finiteNumber(src.maxFloorCents);
|
|
2233
|
+
var step = finiteNumber(src.stepCents);
|
|
2234
|
+
var selected = finiteNumber(src.selectedFloorCents);
|
|
2235
|
+
var fallback = finiteNumber(src.fallbackFloorCents);
|
|
2236
|
+
if (min !== void 0) out.minFloorCents = min;
|
|
2237
|
+
if (max !== void 0) out.maxFloorCents = max;
|
|
2238
|
+
if (step !== void 0) out.stepCents = step;
|
|
2239
|
+
if (selected !== void 0) out.selectedFloorCents = selected;
|
|
2240
|
+
if (fallback !== void 0) out.fallbackFloorCents = fallback;
|
|
2241
|
+
if (Array.isArray(src.readyFloorCents)) {
|
|
2242
|
+
out.readyFloorCents = src.readyFloorCents.filter(function(cents) {
|
|
2243
|
+
return finiteNumber(cents) !== void 0;
|
|
2244
|
+
});
|
|
2245
|
+
}
|
|
2246
|
+
if (Array.isArray(src.allowedPositions)) {
|
|
2247
|
+
out.allowedPositions = src.allowedPositions.filter(function(position) {
|
|
2248
|
+
return AD_POSITIONS.indexOf(position) !== -1;
|
|
2249
|
+
});
|
|
2250
|
+
}
|
|
2251
|
+
return out;
|
|
2252
|
+
}
|
|
2214
2253
|
var FloorLadderController = /*#__PURE__*/ function() {
|
|
2215
|
-
function FloorLadderController(
|
|
2216
|
-
var selector = arguments.length >
|
|
2254
|
+
function FloorLadderController() {
|
|
2255
|
+
var selector = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : fixedFloorSelector;
|
|
2217
2256
|
_class_call_check(this, FloorLadderController);
|
|
2218
|
-
this.
|
|
2219
|
-
this.
|
|
2257
|
+
this.bounds = DEFAULT_FLOOR_LADDER_BOUNDS;
|
|
2258
|
+
this.config = copyConfig(DISABLED_FLOOR_LADDER_CONFIG);
|
|
2220
2259
|
this.selector = selector;
|
|
2221
2260
|
}
|
|
2222
2261
|
_create_class(FloorLadderController, [
|
|
2262
|
+
{
|
|
2263
|
+
key: "isEnabled",
|
|
2264
|
+
value: function isEnabled() {
|
|
2265
|
+
return this.config.enabled === true;
|
|
2266
|
+
}
|
|
2267
|
+
},
|
|
2268
|
+
{
|
|
2269
|
+
key: "applyApiConfig",
|
|
2270
|
+
value: function applyApiConfig(raw) {
|
|
2271
|
+
var parsed = parseApiFloorLadder(raw);
|
|
2272
|
+
this.config = mergeDefined(copyConfig(DISABLED_FLOOR_LADDER_CONFIG), parsed);
|
|
2273
|
+
this.bounds = Object.freeze({
|
|
2274
|
+
minCents: this.config.minFloorCents,
|
|
2275
|
+
maxCents: this.config.maxFloorCents,
|
|
2276
|
+
stepCents: this.config.stepCents
|
|
2277
|
+
});
|
|
2278
|
+
return validateFloorLadderConfig(this.config, this.bounds);
|
|
2279
|
+
}
|
|
2280
|
+
},
|
|
2281
|
+
{
|
|
2282
|
+
key: "reset",
|
|
2283
|
+
value: function reset() {
|
|
2284
|
+
this.config = copyConfig(DISABLED_FLOOR_LADDER_CONFIG);
|
|
2285
|
+
this.bounds = DEFAULT_FLOOR_LADDER_BOUNDS;
|
|
2286
|
+
}
|
|
2287
|
+
},
|
|
2223
2288
|
{
|
|
2224
2289
|
key: "get",
|
|
2225
2290
|
value: function get() {
|
|
@@ -2232,13 +2297,6 @@ var FloorLadderController = /*#__PURE__*/ function() {
|
|
|
2232
2297
|
return _object_spread({}, this.bounds);
|
|
2233
2298
|
}
|
|
2234
2299
|
},
|
|
2235
|
-
{
|
|
2236
|
-
key: "update",
|
|
2237
|
-
value: function update(update) {
|
|
2238
|
-
this.config = mergeDefined(this.config, update);
|
|
2239
|
-
return validateFloorLadderConfig(this.config, this.bounds);
|
|
2240
|
-
}
|
|
2241
|
-
},
|
|
2242
2300
|
{
|
|
2243
2301
|
key: "validate",
|
|
2244
2302
|
value: function validate() {
|
|
@@ -6500,6 +6558,9 @@ function resolvePlayerIdentitySeed(clientInfo) {
|
|
|
6500
6558
|
}
|
|
6501
6559
|
return "fingerprint:".concat(JSON.stringify(clientInfo));
|
|
6502
6560
|
}
|
|
6561
|
+
function getCachedBrowserId() {
|
|
6562
|
+
return cachedBrowserId !== null && cachedBrowserId !== void 0 ? cachedBrowserId : void 0;
|
|
6563
|
+
}
|
|
6503
6564
|
function getBrowserID(clientInfo) {
|
|
6504
6565
|
return _async_to_generator(function() {
|
|
6505
6566
|
return _ts_generator(this, function(_state) {
|
|
@@ -8169,7 +8230,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
8169
8230
|
key: "fetchAdConfiguration",
|
|
8170
8231
|
value: function fetchAdConfiguration() {
|
|
8171
8232
|
return _async_to_generator(function() {
|
|
8172
|
-
var _data_response_ima_publisherdeskima, _data_response_ima,
|
|
8233
|
+
var _data_response, _data_response1, _data_response2, _data_response_ima_publisherdeskima, _data_response_ima, _data_response3, _data_response_options_vast_cue_tones, _data_response_options_vast, _data_response_options, _data_response4, apiUrl, headers, response, data, apiEnableEdge, apiEdgeUrl, imaPayload, decodedPayload, numberAds;
|
|
8173
8234
|
return _ts_generator(this, function(_state) {
|
|
8174
8235
|
switch(_state.label){
|
|
8175
8236
|
case 0:
|
|
@@ -8229,7 +8290,21 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
8229
8290
|
];
|
|
8230
8291
|
case 4:
|
|
8231
8292
|
data = _state.sent();
|
|
8232
|
-
|
|
8293
|
+
apiEnableEdge = (_data_response = data.response) === null || _data_response === void 0 ? void 0 : _data_response.enableEdgePodRequest;
|
|
8294
|
+
apiEdgeUrl = (_data_response1 = data.response) === null || _data_response1 === void 0 ? void 0 : _data_response1.edgePodUrl;
|
|
8295
|
+
this.apiEnableEdgePodRequest = typeof apiEnableEdge === "boolean" ? apiEnableEdge : void 0;
|
|
8296
|
+
this.apiEdgePodUrl = typeof apiEdgeUrl === "string" ? apiEdgeUrl : void 0;
|
|
8297
|
+
if (this.debug) {
|
|
8298
|
+
console.log("[StormcloudVideoPlayer] Edge pod settings from API:", {
|
|
8299
|
+
enableEdgePodRequest: this.apiEnableEdgePodRequest,
|
|
8300
|
+
edgePodUrl: this.apiEdgePodUrl
|
|
8301
|
+
});
|
|
8302
|
+
}
|
|
8303
|
+
this.apiFloorLadder = (_data_response2 = data.response) === null || _data_response2 === void 0 ? void 0 : _data_response2.floorLadder;
|
|
8304
|
+
if (this.debug) {
|
|
8305
|
+
console.log(this.apiFloorLadder ? "[StormcloudVideoPlayer] Floor ladder from API:" : "[StormcloudVideoPlayer] No floorLadder block in /ads/web response", this.apiFloorLadder);
|
|
8306
|
+
}
|
|
8307
|
+
imaPayload = (_data_response3 = data.response) === null || _data_response3 === void 0 ? void 0 : (_data_response_ima = _data_response3.ima) === null || _data_response_ima === void 0 ? void 0 : (_data_response_ima_publisherdeskima = _data_response_ima["publisherdesk.ima"]) === null || _data_response_ima_publisherdeskima === void 0 ? void 0 : _data_response_ima_publisherdeskima.payload;
|
|
8233
8308
|
if (imaPayload) {
|
|
8234
8309
|
decodedPayload = imaPayload;
|
|
8235
8310
|
try {
|
|
@@ -8247,7 +8322,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
8247
8322
|
console.warn("[StormcloudVideoPlayer] No VAST tag URL found in /ads/web response");
|
|
8248
8323
|
}
|
|
8249
8324
|
}
|
|
8250
|
-
numberAds = (
|
|
8325
|
+
numberAds = (_data_response4 = data.response) === null || _data_response4 === void 0 ? void 0 : (_data_response_options = _data_response4.options) === null || _data_response_options === void 0 ? void 0 : (_data_response_options_vast = _data_response_options.vast) === null || _data_response_options_vast === void 0 ? void 0 : (_data_response_options_vast_cue_tones = _data_response_options_vast.cue_tones) === null || _data_response_options_vast_cue_tones === void 0 ? void 0 : _data_response_options_vast_cue_tones.number_ads;
|
|
8251
8326
|
if (numberAds != null && numberAds > 0) {
|
|
8252
8327
|
this.apiNumberAds = numberAds;
|
|
8253
8328
|
if (this.debug) {
|
|
@@ -10081,7 +10156,23 @@ function resolveEdgePodBaseUrl(config) {
|
|
|
10081
10156
|
return void 0;
|
|
10082
10157
|
}
|
|
10083
10158
|
}
|
|
10159
|
+
function resolveEdgePodRequestContext(config) {
|
|
10160
|
+
var extra = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
10161
|
+
return {
|
|
10162
|
+
width: extra.width,
|
|
10163
|
+
height: extra.height,
|
|
10164
|
+
playerId: extra.playerId,
|
|
10165
|
+
contentNetwork: config.contentNetwork,
|
|
10166
|
+
contentChannel: config.channelName,
|
|
10167
|
+
contentTitle: config.programTitle
|
|
10168
|
+
};
|
|
10169
|
+
}
|
|
10170
|
+
function setOptionalParam(url, key, value) {
|
|
10171
|
+
var trimmed = value === null || value === void 0 ? void 0 : value.trim();
|
|
10172
|
+
if (trimmed) url.searchParams.set(key, trimmed);
|
|
10173
|
+
}
|
|
10084
10174
|
function buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit) {
|
|
10175
|
+
var context = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {};
|
|
10085
10176
|
var url = new URL(baseUrl);
|
|
10086
10177
|
var maxMs = Math.max(0, Math.floor(remainingMs));
|
|
10087
10178
|
var maxAds = Math.max(1, Math.min(EDGE_POD_MAX_ADS, Math.floor(remainingAdLimit)));
|
|
@@ -10089,6 +10180,16 @@ function buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit) {
|
|
|
10089
10180
|
url.searchParams.set("pmad", String(maxAds));
|
|
10090
10181
|
url.searchParams.set("duration", String(Math.floor(maxMs / 1e3)));
|
|
10091
10182
|
url.searchParams.set("count", String(maxAds));
|
|
10183
|
+
if (context.width != null && Number.isFinite(context.width) && context.width > 0) {
|
|
10184
|
+
url.searchParams.set("width", String(Math.round(context.width)));
|
|
10185
|
+
}
|
|
10186
|
+
if (context.height != null && Number.isFinite(context.height) && context.height > 0) {
|
|
10187
|
+
url.searchParams.set("height", String(Math.round(context.height)));
|
|
10188
|
+
}
|
|
10189
|
+
setOptionalParam(url, "pid", context.playerId);
|
|
10190
|
+
setOptionalParam(url, "cn", context.contentNetwork);
|
|
10191
|
+
setOptionalParam(url, "cc", context.contentChannel);
|
|
10192
|
+
setOptionalParam(url, "ct", context.contentTitle);
|
|
10092
10193
|
return url.toString();
|
|
10093
10194
|
}
|
|
10094
10195
|
function classifyEdgeVastResponse(result) {
|
|
@@ -10976,7 +11077,12 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
|
|
|
10976
11077
|
return void 0;
|
|
10977
11078
|
}
|
|
10978
11079
|
try {
|
|
10979
|
-
|
|
11080
|
+
var playerId = getCachedBrowserId();
|
|
11081
|
+
return buildEdgePodUrl(baseUrl, remainingMs, remainingAds, resolveEdgePodRequestContext(this.host.config, {
|
|
11082
|
+
width: this.host.video.offsetWidth || this.host.video.clientWidth,
|
|
11083
|
+
height: this.host.video.offsetHeight || this.host.video.clientHeight,
|
|
11084
|
+
playerId: playerId
|
|
11085
|
+
}));
|
|
10980
11086
|
} catch (unused) {
|
|
10981
11087
|
this.markEdgeExhausted("invalid_edge_url");
|
|
10982
11088
|
return void 0;
|
|
@@ -12486,14 +12592,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
12486
12592
|
this.config = _object_spread({}, browserOverrides, config);
|
|
12487
12593
|
this.video = config.videoElement;
|
|
12488
12594
|
logBrowserInfo(config.debugAdTiming);
|
|
12489
|
-
|
|
12490
|
-
if (this.config.adFloorMinCents != null) floorBounds.minCents = this.config.adFloorMinCents;
|
|
12491
|
-
if (this.config.adFloorMaxCents != null) floorBounds.maxCents = this.config.adFloorMaxCents;
|
|
12492
|
-
if (this.config.adFloorStepCents != null) floorBounds.stepCents = this.config.adFloorStepCents;
|
|
12493
|
-
this.floorLadder = new FloorLadderController(this.config.adFloorLadder, floorBounds);
|
|
12494
|
-
this.floorLadderEnabled = this.config.adFloorLadderEnabled === true;
|
|
12495
|
-
this.warnOnInvalidFloorLadder(this.floorLadder.validate());
|
|
12496
|
-
this.edgePodBaseUrl = resolveEdgePodBaseUrl(this.config);
|
|
12595
|
+
this.floorLadder = new FloorLadderController();
|
|
12497
12596
|
this.adPlayer = this.createAdPlayer(false);
|
|
12498
12597
|
this.palNonce = createPalNonceManager();
|
|
12499
12598
|
this.cueManager = new Scte35CueManager(!!this.config.debugAdTiming, {
|
|
@@ -12600,9 +12699,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
12600
12699
|
return _this.edgePodBaseUrl;
|
|
12601
12700
|
},
|
|
12602
12701
|
getFloorSnapshot: function getFloorSnapshot(position) {
|
|
12603
|
-
return _this.
|
|
12604
|
-
position: position
|
|
12605
|
-
isCtv: _this.isCtvEnvironment()
|
|
12702
|
+
return _this.floorLadder.isEnabled() ? _this.floorLadder.snapshotFor({
|
|
12703
|
+
position: position
|
|
12606
12704
|
}) : void 0;
|
|
12607
12705
|
},
|
|
12608
12706
|
onAdClick: function onAdClick() {
|
|
@@ -12639,45 +12737,42 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
12639
12737
|
}
|
|
12640
12738
|
},
|
|
12641
12739
|
{
|
|
12642
|
-
key: "
|
|
12643
|
-
value: function
|
|
12644
|
-
|
|
12645
|
-
|
|
12646
|
-
|
|
12647
|
-
|
|
12648
|
-
|
|
12649
|
-
|
|
12650
|
-
key: "setAdFloorLadder",
|
|
12651
|
-
value: function setAdFloorLadder(update) {
|
|
12652
|
-
var report = this.floorLadder.update(update);
|
|
12740
|
+
key: "applyFloorLadderFromApi",
|
|
12741
|
+
value: function applyFloorLadderFromApi() {
|
|
12742
|
+
var raw = this.adConfig.apiFloorLadder;
|
|
12743
|
+
if (raw == null) {
|
|
12744
|
+
this.floorLadder.reset();
|
|
12745
|
+
return;
|
|
12746
|
+
}
|
|
12747
|
+
var report = this.floorLadder.applyApiConfig(raw);
|
|
12653
12748
|
this.warnOnInvalidFloorLadder(report);
|
|
12654
|
-
|
|
12655
|
-
|
|
12656
|
-
|
|
12657
|
-
|
|
12658
|
-
|
|
12659
|
-
|
|
12660
|
-
|
|
12661
|
-
if (enabled) this.warnOnInvalidFloorLadder(this.floorLadder.validate());
|
|
12749
|
+
if (this.debug) {
|
|
12750
|
+
console.log("[AdBreak][FLOOR] configuration applied from API", {
|
|
12751
|
+
config: this.floorLadder.get(),
|
|
12752
|
+
bounds: this.floorLadder.getBounds(),
|
|
12753
|
+
validation: report
|
|
12754
|
+
});
|
|
12755
|
+
}
|
|
12662
12756
|
}
|
|
12663
12757
|
},
|
|
12664
12758
|
{
|
|
12665
12759
|
key: "isAdFloorLadderEnabled",
|
|
12666
12760
|
value: function isAdFloorLadderEnabled() {
|
|
12667
|
-
return this.
|
|
12761
|
+
return this.floorLadder.isEnabled();
|
|
12668
12762
|
}
|
|
12669
12763
|
},
|
|
12670
12764
|
{
|
|
12671
|
-
key: "
|
|
12672
|
-
value: function
|
|
12673
|
-
|
|
12674
|
-
|
|
12765
|
+
key: "applyEdgePodFromApi",
|
|
12766
|
+
value: function applyEdgePodFromApi() {
|
|
12767
|
+
this.edgePodBaseUrl = resolveEdgePodBaseUrl({
|
|
12768
|
+
enableEdgePodRequest: this.adConfig.apiEnableEdgePodRequest,
|
|
12769
|
+
edgePodUrl: this.adConfig.apiEdgePodUrl,
|
|
12770
|
+
licenseKey: this.config.licenseKey
|
|
12771
|
+
});
|
|
12772
|
+
if (this.debug) {
|
|
12773
|
+
var _this_edgePodBaseUrl;
|
|
12774
|
+
console.log("[AdBreak][EDGE] edge pod base URL from API:", (_this_edgePodBaseUrl = this.edgePodBaseUrl) !== null && _this_edgePodBaseUrl !== void 0 ? _this_edgePodBaseUrl : "(disabled; GAM only)");
|
|
12675
12775
|
}
|
|
12676
|
-
if (update.enableEdgePodRequest === void 0) delete this.config.enableEdgePodRequest;
|
|
12677
|
-
else this.config.enableEdgePodRequest = update.enableEdgePodRequest;
|
|
12678
|
-
if (update.edgePodUrl === void 0) delete this.config.edgePodUrl;
|
|
12679
|
-
else this.config.edgePodUrl = update.edgePodUrl;
|
|
12680
|
-
this.edgePodBaseUrl = resolveEdgePodBaseUrl(this.config);
|
|
12681
12776
|
}
|
|
12682
12777
|
},
|
|
12683
12778
|
{
|
|
@@ -12690,7 +12785,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
12690
12785
|
key: "warnOnInvalidFloorLadder",
|
|
12691
12786
|
value: function warnOnInvalidFloorLadder(report) {
|
|
12692
12787
|
var config = this.floorLadder.get();
|
|
12693
|
-
if (report.ok || !
|
|
12788
|
+
if (report.ok || !config.enabled) return;
|
|
12694
12789
|
console.warn("[AdBreak][FLOOR] configuration has issues; invalid floors will not be sent", {
|
|
12695
12790
|
errors: report.errors,
|
|
12696
12791
|
configurationVersion: config.configurationVersion,
|
|
@@ -12765,6 +12860,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
12765
12860
|
4
|
|
12766
12861
|
];
|
|
12767
12862
|
case 4:
|
|
12863
|
+
this.applyFloorLadderFromApi();
|
|
12864
|
+
this.applyEdgePodFromApi();
|
|
12768
12865
|
palDescriptionUrl = this.config.ctvAdRequest ? this.adConfig.getPalDescriptionUrl() : void 0;
|
|
12769
12866
|
fetchConsentSignals().catch(function() {
|
|
12770
12867
|
return {};
|
|
@@ -13518,15 +13615,12 @@ var CRITICAL_PROPS = [
|
|
|
13518
13615
|
"vmapUrl",
|
|
13519
13616
|
"lowLatencyMode",
|
|
13520
13617
|
"driftToleranceMs",
|
|
13521
|
-
"ctvAdRequest"
|
|
13522
|
-
"adFloorMinCents",
|
|
13523
|
-
"adFloorMaxCents",
|
|
13524
|
-
"adFloorStepCents"
|
|
13618
|
+
"ctvAdRequest"
|
|
13525
13619
|
];
|
|
13526
13620
|
var CONTROLS_HIDE_DELAY = 3e3;
|
|
13527
13621
|
var DEFAULT_PLAYER_ASPECT_RATIO = 16 / 9;
|
|
13528
13622
|
var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
|
|
13529
|
-
var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, isLiveStream = props.isLiveStream, driftToleranceMs = props.driftToleranceMs, immediateManifestAds = props.immediateManifestAds, debugAdTiming = props.debugAdTiming, showCustomControls = props.showCustomControls, hideLoadingIndicator = props.hideLoadingIndicator, onVolumeToggle = props.onVolumeToggle, onFullscreenToggle = props.onFullscreenToggle, onControlClick = props.onControlClick, onReady = props.onReady, wrapperClassName = props.wrapperClassName, wrapperStyle = props.wrapperStyle, className = props.className, style = props.style, controls = props.controls, playsInline = props.playsInline, preload = props.preload, poster = props.poster, children = props.children, licenseKey = props.licenseKey, vastTagUrl = props.vastTagUrl, isVmap = props.isVmap, vmapUrl = props.vmapUrl, minSegmentsBeforePlay = props.minSegmentsBeforePlay, ctvAdRequest = props.ctvAdRequest, programTitle = props.programTitle, channelName = props.channelName, contentNetwork = props.contentNetwork, minRemainingMsToStartAd = props.minRemainingMsToStartAd, minRemainingMsToRequestAd = props.minRemainingMsToRequestAd, maxNoFillsPerBreak = props.maxNoFillsPerBreak, maxAdBreakExtensionMs = props.maxAdBreakExtensionMs,
|
|
13623
|
+
var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, isLiveStream = props.isLiveStream, driftToleranceMs = props.driftToleranceMs, immediateManifestAds = props.immediateManifestAds, debugAdTiming = props.debugAdTiming, showCustomControls = props.showCustomControls, hideLoadingIndicator = props.hideLoadingIndicator, onVolumeToggle = props.onVolumeToggle, onFullscreenToggle = props.onFullscreenToggle, onControlClick = props.onControlClick, onReady = props.onReady, wrapperClassName = props.wrapperClassName, wrapperStyle = props.wrapperStyle, className = props.className, style = props.style, controls = props.controls, playsInline = props.playsInline, preload = props.preload, poster = props.poster, children = props.children, licenseKey = props.licenseKey, vastTagUrl = props.vastTagUrl, isVmap = props.isVmap, vmapUrl = props.vmapUrl, minSegmentsBeforePlay = props.minSegmentsBeforePlay, ctvAdRequest = props.ctvAdRequest, programTitle = props.programTitle, channelName = props.channelName, contentNetwork = props.contentNetwork, minRemainingMsToStartAd = props.minRemainingMsToStartAd, minRemainingMsToRequestAd = props.minRemainingMsToRequestAd, maxNoFillsPerBreak = props.maxNoFillsPerBreak, maxAdBreakExtensionMs = props.maxAdBreakExtensionMs, restVideoAttrs = _object_without_properties(props, [
|
|
13530
13624
|
"src",
|
|
13531
13625
|
"autoplay",
|
|
13532
13626
|
"muted",
|
|
@@ -13563,19 +13657,10 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
|
|
|
13563
13657
|
"minRemainingMsToStartAd",
|
|
13564
13658
|
"minRemainingMsToRequestAd",
|
|
13565
13659
|
"maxNoFillsPerBreak",
|
|
13566
|
-
"maxAdBreakExtensionMs"
|
|
13567
|
-
"adFloorLadderEnabled",
|
|
13568
|
-
"adFloorLadder",
|
|
13569
|
-
"adFloorMinCents",
|
|
13570
|
-
"adFloorMaxCents",
|
|
13571
|
-
"adFloorStepCents",
|
|
13572
|
-
"enableEdgePodRequest",
|
|
13573
|
-
"edgePodUrl"
|
|
13660
|
+
"maxAdBreakExtensionMs"
|
|
13574
13661
|
]);
|
|
13575
|
-
var adFloorLadderKey = JSON.stringify(adFloorLadder !== null && adFloorLadder !== void 0 ? adFloorLadder : null);
|
|
13576
13662
|
var videoRef = (0, import_react.useRef)(null);
|
|
13577
13663
|
var playerRef = (0, import_react.useRef)(null);
|
|
13578
|
-
var appliedFloorLadderKeyRef = (0, import_react.useRef)(null);
|
|
13579
13664
|
var bufferingTimeoutRef = (0, import_react.useRef)(null);
|
|
13580
13665
|
var controlsTimerRef = (0, import_react.useRef)(null);
|
|
13581
13666
|
var wrapperRef = (0, import_react.useRef)(null);
|
|
@@ -13717,10 +13802,7 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
|
|
|
13717
13802
|
isVmap,
|
|
13718
13803
|
vmapUrl,
|
|
13719
13804
|
lowLatencyMode,
|
|
13720
|
-
driftToleranceMs
|
|
13721
|
-
adFloorMinCents,
|
|
13722
|
-
adFloorMaxCents,
|
|
13723
|
-
adFloorStepCents
|
|
13805
|
+
driftToleranceMs
|
|
13724
13806
|
]);
|
|
13725
13807
|
(0, import_react.useEffect)(function() {
|
|
13726
13808
|
if (typeof window === "undefined") return;
|
|
@@ -13771,16 +13853,8 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
|
|
|
13771
13853
|
if (minRemainingMsToRequestAd !== void 0) cfg.minRemainingMsToRequestAd = minRemainingMsToRequestAd;
|
|
13772
13854
|
if (maxNoFillsPerBreak !== void 0) cfg.maxNoFillsPerBreak = maxNoFillsPerBreak;
|
|
13773
13855
|
if (maxAdBreakExtensionMs !== void 0) cfg.maxAdBreakExtensionMs = maxAdBreakExtensionMs;
|
|
13774
|
-
if (adFloorLadderEnabled !== void 0) cfg.adFloorLadderEnabled = adFloorLadderEnabled;
|
|
13775
|
-
if (adFloorLadder !== void 0) cfg.adFloorLadder = adFloorLadder;
|
|
13776
|
-
if (adFloorMinCents !== void 0) cfg.adFloorMinCents = adFloorMinCents;
|
|
13777
|
-
if (adFloorMaxCents !== void 0) cfg.adFloorMaxCents = adFloorMaxCents;
|
|
13778
|
-
if (adFloorStepCents !== void 0) cfg.adFloorStepCents = adFloorStepCents;
|
|
13779
|
-
if (enableEdgePodRequest !== void 0) cfg.enableEdgePodRequest = enableEdgePodRequest;
|
|
13780
|
-
if (edgePodUrl !== void 0) cfg.edgePodUrl = edgePodUrl;
|
|
13781
13856
|
var player = new StormcloudVideoPlayer(cfg);
|
|
13782
13857
|
playerRef.current = player;
|
|
13783
|
-
appliedFloorLadderKeyRef.current = adFloorLadderKey;
|
|
13784
13858
|
player.load().then(function() {
|
|
13785
13859
|
var showNative = player.shouldShowNativeControls();
|
|
13786
13860
|
setShouldShowNativeControls(showNative);
|
|
@@ -13818,33 +13892,6 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
|
|
|
13818
13892
|
autoplay,
|
|
13819
13893
|
muted
|
|
13820
13894
|
]);
|
|
13821
|
-
(0, import_react.useEffect)(function() {
|
|
13822
|
-
if (!playerRef.current || adFloorLadder === void 0) return;
|
|
13823
|
-
if (appliedFloorLadderKeyRef.current === adFloorLadderKey) return;
|
|
13824
|
-
appliedFloorLadderKeyRef.current = adFloorLadderKey;
|
|
13825
|
-
playerRef.current.setAdFloorLadder(adFloorLadder);
|
|
13826
|
-
}, [
|
|
13827
|
-
adFloorLadderKey
|
|
13828
|
-
]);
|
|
13829
|
-
(0, import_react.useEffect)(function() {
|
|
13830
|
-
if (!playerRef.current) return;
|
|
13831
|
-
var enabled = adFloorLadderEnabled === true;
|
|
13832
|
-
if (playerRef.current.isAdFloorLadderEnabled() === enabled) return;
|
|
13833
|
-
playerRef.current.setAdFloorLadderEnabled(enabled);
|
|
13834
|
-
}, [
|
|
13835
|
-
adFloorLadderEnabled
|
|
13836
|
-
]);
|
|
13837
|
-
(0, import_react.useEffect)(function() {
|
|
13838
|
-
if (!playerRef.current) return;
|
|
13839
|
-
playerRef.current.setEdgePodRequest(_object_spread({}, enableEdgePodRequest !== void 0 ? {
|
|
13840
|
-
enableEdgePodRequest: enableEdgePodRequest
|
|
13841
|
-
} : {}, edgePodUrl !== void 0 ? {
|
|
13842
|
-
edgePodUrl: edgePodUrl
|
|
13843
|
-
} : {}));
|
|
13844
|
-
}, [
|
|
13845
|
-
enableEdgePodRequest,
|
|
13846
|
-
edgePodUrl
|
|
13847
|
-
]);
|
|
13848
13895
|
(0, import_react.useEffect)(function() {
|
|
13849
13896
|
if (!playerRef.current) return;
|
|
13850
13897
|
var checkAdStatus = function checkAdStatus() {
|
|
@@ -14834,7 +14881,6 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
|
|
|
14834
14881
|
]
|
|
14835
14882
|
});
|
|
14836
14883
|
}, function(prevProps, nextProps) {
|
|
14837
|
-
var _prevProps_adFloorLadder, _nextProps_adFloorLadder;
|
|
14838
14884
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
14839
14885
|
try {
|
|
14840
14886
|
for(var _iterator = CRITICAL_PROPS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
@@ -14921,12 +14967,6 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
|
|
|
14921
14967
|
}
|
|
14922
14968
|
}
|
|
14923
14969
|
}
|
|
14924
|
-
if (prevProps.adFloorLadderEnabled !== nextProps.adFloorLadderEnabled || prevProps.enableEdgePodRequest !== nextProps.enableEdgePodRequest || prevProps.edgePodUrl !== nextProps.edgePodUrl) {
|
|
14925
|
-
return false;
|
|
14926
|
-
}
|
|
14927
|
-
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)) {
|
|
14928
|
-
return false;
|
|
14929
|
-
}
|
|
14930
14970
|
return true;
|
|
14931
14971
|
});
|
|
14932
14972
|
// src/StormcloudPlayer.tsx
|
|
@@ -16101,7 +16141,7 @@ var StormcloudPlayer_default = StormcloudPlayer;
|
|
|
16101
16141
|
DEFAULT_FLOOR_LADDER_BOUNDS: DEFAULT_FLOOR_LADDER_BOUNDS,
|
|
16102
16142
|
DEFAULT_REQUEST_SAFETY_MS: DEFAULT_REQUEST_SAFETY_MS,
|
|
16103
16143
|
DEFAULT_TRACKING_INGEST_CONFIG: DEFAULT_TRACKING_INGEST_CONFIG,
|
|
16104
|
-
|
|
16144
|
+
DISABLED_FLOOR_LADDER_CONFIG: DISABLED_FLOOR_LADDER_CONFIG,
|
|
16105
16145
|
GAM_AD_OPPORTUNITY_DURATION_MS: GAM_AD_OPPORTUNITY_DURATION_MS,
|
|
16106
16146
|
IS_BROWSER: IS_BROWSER,
|
|
16107
16147
|
IS_GLOBAL: IS_GLOBAL,
|
|
@@ -16133,6 +16173,7 @@ var StormcloudPlayer_default = StormcloudPlayer;
|
|
|
16133
16173
|
logBrowserInfo: logBrowserInfo,
|
|
16134
16174
|
merge: merge,
|
|
16135
16175
|
omit: omit,
|
|
16176
|
+
parseApiFloorLadder: parseApiFloorLadder,
|
|
16136
16177
|
parseQuery: parseQuery,
|
|
16137
16178
|
players: players,
|
|
16138
16179
|
randomString: randomString,
|