stormcloud-video-player 0.8.19 → 0.8.21
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/index.cjs +54 -12
- package/lib/index.cjs.map +1 -1
- package/lib/index.js +54 -12
- package/lib/index.js.map +1 -1
- package/lib/player/AdConfigManager.cjs +61 -8
- package/lib/player/AdConfigManager.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +54 -12
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.cjs +54 -12
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/index.cjs +54 -12
- package/lib/players/index.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.cjs +5 -4
- package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.cjs +54 -12
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/utils/ctvVastSignals.cjs +12 -1
- package/lib/utils/ctvVastSignals.cjs.map +1 -1
- package/lib/utils/vastEnvironmentSignals.cjs +12 -1
- package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
- package/lib/utils/vastMacros.cjs +49 -3
- package/lib/utils/vastMacros.cjs.map +1 -1
- package/package.json +1 -1
package/lib/players/index.cjs
CHANGED
|
@@ -863,6 +863,7 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
863
863
|
handleAdComplete();
|
|
864
864
|
});
|
|
865
865
|
adVideoElement.addEventListener("error", function(e) {
|
|
866
|
+
if (!adPlaying) return;
|
|
866
867
|
console.error("[HlsAdPlayer] Ad video error:", e);
|
|
867
868
|
if (currentAd) {
|
|
868
869
|
fireTrackingPixels(currentAd.trackingUrls.error);
|
|
@@ -1064,15 +1065,15 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1064
1065
|
adVideoElement.muted = originalMutedState;
|
|
1065
1066
|
console.log("[HlsAdPlayer] Set ad video volume to ".concat(adVideoElement.volume, ", muted: ").concat(adVideoElement.muted, ", originalMutedState: ").concat(originalMutedState, ", contentVolume: ").concat(contentVolume));
|
|
1066
1067
|
}
|
|
1068
|
+
mediaFile = selectBestMediaFile(currentAd.mediaFiles);
|
|
1069
|
+
if (!mediaFile) {
|
|
1070
|
+
throw new Error("No media file available for ad");
|
|
1071
|
+
}
|
|
1067
1072
|
if (adContainerEl) {
|
|
1068
1073
|
adContainerEl.style.display = "flex";
|
|
1069
1074
|
adContainerEl.style.pointerEvents = "auto";
|
|
1070
1075
|
}
|
|
1071
1076
|
emit("content_pause");
|
|
1072
|
-
mediaFile = selectBestMediaFile(currentAd.mediaFiles);
|
|
1073
|
-
if (!mediaFile) {
|
|
1074
|
-
throw new Error("No media file available for ad");
|
|
1075
|
-
}
|
|
1076
1077
|
isHlsAd = isHlsMediaFile(mediaFile);
|
|
1077
1078
|
console.log("[HlsAdPlayer] Loading ".concat(isHlsAd ? "HLS" : "progressive", " ad from: ").concat(mediaFile.url));
|
|
1078
1079
|
if (isHlsAd && import_hls.default.isSupported()) {
|
|
@@ -2360,9 +2361,20 @@ function initializePolyfills() {
|
|
|
2360
2361
|
}
|
|
2361
2362
|
// src/utils/vastEnvironmentSignals.ts
|
|
2362
2363
|
var AIRY_ANDROID_APP_ID = "com.freeairytv.android";
|
|
2364
|
+
var AIRY_WEBOS_APP_ID = "com.freeairytv.webos";
|
|
2365
|
+
var AIRY_TIZEN_APP_ID = "com.freeairytv.samsung";
|
|
2366
|
+
var AIRY_ROKU_APP_ID = "com.freeairytv.roku";
|
|
2363
2367
|
var AIRY_APP_NAME = "AiryTV Movies & TV";
|
|
2364
2368
|
var AIRY_DEFAULT_CONTENT_URL = "https://live.airy.tv";
|
|
2365
2369
|
var CTV_SESSION_STORAGE_KEY = "stormcloud.ctv.sid";
|
|
2370
|
+
function getDefaultAppId() {
|
|
2371
|
+
if (typeof navigator === "undefined") return AIRY_ANDROID_APP_ID;
|
|
2372
|
+
var ua = navigator.userAgent;
|
|
2373
|
+
if (/Web0S|webOS|LG Browser|LGSTB|LGE/i.test(ua)) return AIRY_WEBOS_APP_ID;
|
|
2374
|
+
if (/Tizen|Samsung/i.test(ua)) return AIRY_TIZEN_APP_ID;
|
|
2375
|
+
if (/Roku/i.test(ua)) return AIRY_ROKU_APP_ID;
|
|
2376
|
+
return AIRY_ANDROID_APP_ID;
|
|
2377
|
+
}
|
|
2366
2378
|
var DEVICE_ID_STORAGE_KEYS = [
|
|
2367
2379
|
"rdid",
|
|
2368
2380
|
"ifa",
|
|
@@ -2389,7 +2401,7 @@ function resolveVastEnvironmentSignals(isCtv) {
|
|
|
2389
2401
|
return _object_spread_props(_object_spread({
|
|
2390
2402
|
isCtv: true,
|
|
2391
2403
|
contentUrl: bridgeSignals.contentUrl || readStoredString("contentUrl") || AIRY_DEFAULT_CONTENT_URL,
|
|
2392
|
-
appId: bridgeSignals.appId || readStoredString("appId") || readStoredString("msid") ||
|
|
2404
|
+
appId: bridgeSignals.appId || readStoredString("appId") || readStoredString("msid") || getDefaultAppId(),
|
|
2393
2405
|
appName: bridgeSignals.appName || readStoredString("appName") || readStoredString("an") || AIRY_APP_NAME,
|
|
2394
2406
|
sessionId: getOrCreateCtvSessionId()
|
|
2395
2407
|
}, deviceId ? {
|
|
@@ -2686,7 +2698,6 @@ var CTV_UNSUPPORTED_PARAMS = [
|
|
|
2686
2698
|
"max_ad_duration",
|
|
2687
2699
|
"unviewed_position_start",
|
|
2688
2700
|
"impl",
|
|
2689
|
-
"scor",
|
|
2690
2701
|
"vad_type",
|
|
2691
2702
|
"gdpr",
|
|
2692
2703
|
"gdpr_consent",
|
|
@@ -2935,6 +2946,29 @@ function normalizeVastTagUrl(raw) {
|
|
|
2935
2946
|
if (!raw) return raw;
|
|
2936
2947
|
try {
|
|
2937
2948
|
var url = new URL(raw);
|
|
2949
|
+
var anValue = url.searchParams.get("an");
|
|
2950
|
+
if (anValue !== null) {
|
|
2951
|
+
var orphanFragments = [];
|
|
2952
|
+
url.searchParams.forEach(function(_value, key) {
|
|
2953
|
+
if (key && INVALID_VAST_PARAM_KEY.test(key)) {
|
|
2954
|
+
orphanFragments.push(key.trim());
|
|
2955
|
+
}
|
|
2956
|
+
});
|
|
2957
|
+
if (orphanFragments.length > 0) {
|
|
2958
|
+
var reconstructed = [
|
|
2959
|
+
anValue.trimEnd()
|
|
2960
|
+
].concat(_to_consumable_array(orphanFragments)).filter(Boolean).join(" & ");
|
|
2961
|
+
url.searchParams.forEach(function(_value, key) {
|
|
2962
|
+
if (key && INVALID_VAST_PARAM_KEY.test(key)) {
|
|
2963
|
+
url.searchParams.delete(key);
|
|
2964
|
+
}
|
|
2965
|
+
});
|
|
2966
|
+
url.searchParams.set("an", reconstructed);
|
|
2967
|
+
return url.toString().replace(/([?&]an=)([^&]*)/, function(_match, prefix, val) {
|
|
2968
|
+
return prefix + val.replace(/\+/g, "%20");
|
|
2969
|
+
});
|
|
2970
|
+
}
|
|
2971
|
+
}
|
|
2938
2972
|
removeBrokenAppNameOrphans(url.searchParams);
|
|
2939
2973
|
return url.toString();
|
|
2940
2974
|
} catch (unused) {
|
|
@@ -2952,6 +2986,7 @@ function applyVastMacros(baseUrl, ctx) {
|
|
|
2952
2986
|
var params = url.searchParams;
|
|
2953
2987
|
removeBrokenAppNameOrphans(params, ctx.appName);
|
|
2954
2988
|
params.set("correlator", ctx.correlator);
|
|
2989
|
+
params.set("scor", ctx.streamCorrelator);
|
|
2955
2990
|
if (ctx.isCtv) {
|
|
2956
2991
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
2957
2992
|
try {
|
|
@@ -2973,8 +3008,6 @@ function applyVastMacros(baseUrl, ctx) {
|
|
|
2973
3008
|
}
|
|
2974
3009
|
}
|
|
2975
3010
|
}
|
|
2976
|
-
} else {
|
|
2977
|
-
params.set("scor", ctx.streamCorrelator);
|
|
2978
3011
|
}
|
|
2979
3012
|
if (ctx.pod != null) {
|
|
2980
3013
|
params.set("pod", String(ctx.pod));
|
|
@@ -4342,7 +4375,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4342
4375
|
key: "fetchAdConfiguration",
|
|
4343
4376
|
value: function fetchAdConfiguration() {
|
|
4344
4377
|
return _async_to_generator(function() {
|
|
4345
|
-
var _data_response_ima_publisherdeskima, _data_response_ima, _data_response, _data_response_options_vast_cue_tones, _data_response_options_vast, _data_response_options, _data_response1, vastMode, vastEndpoint, apiUrl, headers, response, data, imaPayload, numberAds;
|
|
4378
|
+
var _data_response_ima_publisherdeskima, _data_response_ima, _data_response, _data_response_options_vast_cue_tones, _data_response_options_vast, _data_response_options, _data_response1, vastMode, vastEndpoint, apiUrl, headers, response, data, imaPayload, decodedPayload, numberAds;
|
|
4346
4379
|
return _ts_generator(this, function(_state) {
|
|
4347
4380
|
switch(_state.label){
|
|
4348
4381
|
case 0:
|
|
@@ -4426,9 +4459,16 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4426
4459
|
data = _state.sent();
|
|
4427
4460
|
imaPayload = (_data_response = data.response) === null || _data_response === void 0 ? void 0 : (_data_response_ima = _data_response.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;
|
|
4428
4461
|
if (imaPayload) {
|
|
4429
|
-
|
|
4462
|
+
decodedPayload = imaPayload;
|
|
4463
|
+
try {
|
|
4464
|
+
decodedPayload = decodeURIComponent(imaPayload);
|
|
4465
|
+
} catch (unused) {
|
|
4466
|
+
console.warn("[StormcloudVideoPlayer] imaPayload was not URI-encoded; using as-is:", imaPayload);
|
|
4467
|
+
}
|
|
4468
|
+
console.log("[StormcloudVideoPlayer] Raw VAST tag URL (from API):", decodedPayload);
|
|
4469
|
+
this.apiVastTagUrl = normalizeVastTagUrl(decodedPayload);
|
|
4430
4470
|
if (this.debug) {
|
|
4431
|
-
console.log("[StormcloudVideoPlayer]
|
|
4471
|
+
console.log("[StormcloudVideoPlayer] Normalized VAST tag URL:", this.apiVastTagUrl);
|
|
4432
4472
|
}
|
|
4433
4473
|
} else {
|
|
4434
4474
|
if (this.debug) {
|
|
@@ -4762,7 +4802,9 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4762
4802
|
adTest: this.config.adTest,
|
|
4763
4803
|
consent: this.consentSignals
|
|
4764
4804
|
});
|
|
4765
|
-
|
|
4805
|
+
var finalUrl = palNonce.injectNonce(urlWithMacros);
|
|
4806
|
+
console.log("[StormcloudVideoPlayer] Resolved ad request URL (pod=".concat(this.podCounter, ", pos=").concat(this.adRequestPositionInBreak, "):"), finalUrl);
|
|
4807
|
+
urls.push(finalUrl);
|
|
4766
4808
|
}
|
|
4767
4809
|
return urls;
|
|
4768
4810
|
}
|