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
|
@@ -827,6 +827,7 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
827
827
|
handleAdComplete();
|
|
828
828
|
});
|
|
829
829
|
adVideoElement.addEventListener("error", function(e) {
|
|
830
|
+
if (!adPlaying) return;
|
|
830
831
|
console.error("[HlsAdPlayer] Ad video error:", e);
|
|
831
832
|
if (currentAd) {
|
|
832
833
|
fireTrackingPixels(currentAd.trackingUrls.error);
|
|
@@ -1028,15 +1029,15 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1028
1029
|
adVideoElement.muted = originalMutedState;
|
|
1029
1030
|
console.log("[HlsAdPlayer] Set ad video volume to ".concat(adVideoElement.volume, ", muted: ").concat(adVideoElement.muted, ", originalMutedState: ").concat(originalMutedState, ", contentVolume: ").concat(contentVolume));
|
|
1030
1031
|
}
|
|
1032
|
+
mediaFile = selectBestMediaFile(currentAd.mediaFiles);
|
|
1033
|
+
if (!mediaFile) {
|
|
1034
|
+
throw new Error("No media file available for ad");
|
|
1035
|
+
}
|
|
1031
1036
|
if (adContainerEl) {
|
|
1032
1037
|
adContainerEl.style.display = "flex";
|
|
1033
1038
|
adContainerEl.style.pointerEvents = "auto";
|
|
1034
1039
|
}
|
|
1035
1040
|
emit("content_pause");
|
|
1036
|
-
mediaFile = selectBestMediaFile(currentAd.mediaFiles);
|
|
1037
|
-
if (!mediaFile) {
|
|
1038
|
-
throw new Error("No media file available for ad");
|
|
1039
|
-
}
|
|
1040
1041
|
isHlsAd = isHlsMediaFile(mediaFile);
|
|
1041
1042
|
console.log("[HlsAdPlayer] Loading ".concat(isHlsAd ? "HLS" : "progressive", " ad from: ").concat(mediaFile.url));
|
|
1042
1043
|
if (isHlsAd && import_hls.default.isSupported()) {
|
|
@@ -2324,9 +2325,20 @@ function initializePolyfills() {
|
|
|
2324
2325
|
}
|
|
2325
2326
|
// src/utils/vastEnvironmentSignals.ts
|
|
2326
2327
|
var AIRY_ANDROID_APP_ID = "com.freeairytv.android";
|
|
2328
|
+
var AIRY_WEBOS_APP_ID = "com.freeairytv.webos";
|
|
2329
|
+
var AIRY_TIZEN_APP_ID = "com.freeairytv.samsung";
|
|
2330
|
+
var AIRY_ROKU_APP_ID = "com.freeairytv.roku";
|
|
2327
2331
|
var AIRY_APP_NAME = "AiryTV Movies & TV";
|
|
2328
2332
|
var AIRY_DEFAULT_CONTENT_URL = "https://live.airy.tv";
|
|
2329
2333
|
var CTV_SESSION_STORAGE_KEY = "stormcloud.ctv.sid";
|
|
2334
|
+
function getDefaultAppId() {
|
|
2335
|
+
if (typeof navigator === "undefined") return AIRY_ANDROID_APP_ID;
|
|
2336
|
+
var ua = navigator.userAgent;
|
|
2337
|
+
if (/Web0S|webOS|LG Browser|LGSTB|LGE/i.test(ua)) return AIRY_WEBOS_APP_ID;
|
|
2338
|
+
if (/Tizen|Samsung/i.test(ua)) return AIRY_TIZEN_APP_ID;
|
|
2339
|
+
if (/Roku/i.test(ua)) return AIRY_ROKU_APP_ID;
|
|
2340
|
+
return AIRY_ANDROID_APP_ID;
|
|
2341
|
+
}
|
|
2330
2342
|
var DEVICE_ID_STORAGE_KEYS = [
|
|
2331
2343
|
"rdid",
|
|
2332
2344
|
"ifa",
|
|
@@ -2353,7 +2365,7 @@ function resolveVastEnvironmentSignals(isCtv) {
|
|
|
2353
2365
|
return _object_spread_props(_object_spread({
|
|
2354
2366
|
isCtv: true,
|
|
2355
2367
|
contentUrl: bridgeSignals.contentUrl || readStoredString("contentUrl") || AIRY_DEFAULT_CONTENT_URL,
|
|
2356
|
-
appId: bridgeSignals.appId || readStoredString("appId") || readStoredString("msid") ||
|
|
2368
|
+
appId: bridgeSignals.appId || readStoredString("appId") || readStoredString("msid") || getDefaultAppId(),
|
|
2357
2369
|
appName: bridgeSignals.appName || readStoredString("appName") || readStoredString("an") || AIRY_APP_NAME,
|
|
2358
2370
|
sessionId: getOrCreateCtvSessionId()
|
|
2359
2371
|
}, deviceId ? {
|
|
@@ -2650,7 +2662,6 @@ var CTV_UNSUPPORTED_PARAMS = [
|
|
|
2650
2662
|
"max_ad_duration",
|
|
2651
2663
|
"unviewed_position_start",
|
|
2652
2664
|
"impl",
|
|
2653
|
-
"scor",
|
|
2654
2665
|
"vad_type",
|
|
2655
2666
|
"gdpr",
|
|
2656
2667
|
"gdpr_consent",
|
|
@@ -2899,6 +2910,29 @@ function normalizeVastTagUrl(raw) {
|
|
|
2899
2910
|
if (!raw) return raw;
|
|
2900
2911
|
try {
|
|
2901
2912
|
var url = new URL(raw);
|
|
2913
|
+
var anValue = url.searchParams.get("an");
|
|
2914
|
+
if (anValue !== null) {
|
|
2915
|
+
var orphanFragments = [];
|
|
2916
|
+
url.searchParams.forEach(function(_value, key) {
|
|
2917
|
+
if (key && INVALID_VAST_PARAM_KEY.test(key)) {
|
|
2918
|
+
orphanFragments.push(key.trim());
|
|
2919
|
+
}
|
|
2920
|
+
});
|
|
2921
|
+
if (orphanFragments.length > 0) {
|
|
2922
|
+
var reconstructed = [
|
|
2923
|
+
anValue.trimEnd()
|
|
2924
|
+
].concat(_to_consumable_array(orphanFragments)).filter(Boolean).join(" & ");
|
|
2925
|
+
url.searchParams.forEach(function(_value, key) {
|
|
2926
|
+
if (key && INVALID_VAST_PARAM_KEY.test(key)) {
|
|
2927
|
+
url.searchParams.delete(key);
|
|
2928
|
+
}
|
|
2929
|
+
});
|
|
2930
|
+
url.searchParams.set("an", reconstructed);
|
|
2931
|
+
return url.toString().replace(/([?&]an=)([^&]*)/, function(_match, prefix, val) {
|
|
2932
|
+
return prefix + val.replace(/\+/g, "%20");
|
|
2933
|
+
});
|
|
2934
|
+
}
|
|
2935
|
+
}
|
|
2902
2936
|
removeBrokenAppNameOrphans(url.searchParams);
|
|
2903
2937
|
return url.toString();
|
|
2904
2938
|
} catch (unused) {
|
|
@@ -2916,6 +2950,7 @@ function applyVastMacros(baseUrl, ctx) {
|
|
|
2916
2950
|
var params = url.searchParams;
|
|
2917
2951
|
removeBrokenAppNameOrphans(params, ctx.appName);
|
|
2918
2952
|
params.set("correlator", ctx.correlator);
|
|
2953
|
+
params.set("scor", ctx.streamCorrelator);
|
|
2919
2954
|
if (ctx.isCtv) {
|
|
2920
2955
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
2921
2956
|
try {
|
|
@@ -2937,8 +2972,6 @@ function applyVastMacros(baseUrl, ctx) {
|
|
|
2937
2972
|
}
|
|
2938
2973
|
}
|
|
2939
2974
|
}
|
|
2940
|
-
} else {
|
|
2941
|
-
params.set("scor", ctx.streamCorrelator);
|
|
2942
2975
|
}
|
|
2943
2976
|
if (ctx.pod != null) {
|
|
2944
2977
|
params.set("pod", String(ctx.pod));
|
|
@@ -4306,7 +4339,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4306
4339
|
key: "fetchAdConfiguration",
|
|
4307
4340
|
value: function fetchAdConfiguration() {
|
|
4308
4341
|
return _async_to_generator(function() {
|
|
4309
|
-
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;
|
|
4342
|
+
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;
|
|
4310
4343
|
return _ts_generator(this, function(_state) {
|
|
4311
4344
|
switch(_state.label){
|
|
4312
4345
|
case 0:
|
|
@@ -4390,9 +4423,16 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4390
4423
|
data = _state.sent();
|
|
4391
4424
|
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;
|
|
4392
4425
|
if (imaPayload) {
|
|
4393
|
-
|
|
4426
|
+
decodedPayload = imaPayload;
|
|
4427
|
+
try {
|
|
4428
|
+
decodedPayload = decodeURIComponent(imaPayload);
|
|
4429
|
+
} catch (unused) {
|
|
4430
|
+
console.warn("[StormcloudVideoPlayer] imaPayload was not URI-encoded; using as-is:", imaPayload);
|
|
4431
|
+
}
|
|
4432
|
+
console.log("[StormcloudVideoPlayer] Raw VAST tag URL (from API):", decodedPayload);
|
|
4433
|
+
this.apiVastTagUrl = normalizeVastTagUrl(decodedPayload);
|
|
4394
4434
|
if (this.debug) {
|
|
4395
|
-
console.log("[StormcloudVideoPlayer]
|
|
4435
|
+
console.log("[StormcloudVideoPlayer] Normalized VAST tag URL:", this.apiVastTagUrl);
|
|
4396
4436
|
}
|
|
4397
4437
|
} else {
|
|
4398
4438
|
if (this.debug) {
|
|
@@ -4726,7 +4766,9 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4726
4766
|
adTest: this.config.adTest,
|
|
4727
4767
|
consent: this.consentSignals
|
|
4728
4768
|
});
|
|
4729
|
-
|
|
4769
|
+
var finalUrl = palNonce.injectNonce(urlWithMacros);
|
|
4770
|
+
console.log("[StormcloudVideoPlayer] Resolved ad request URL (pod=".concat(this.podCounter, ", pos=").concat(this.adRequestPositionInBreak, "):"), finalUrl);
|
|
4771
|
+
urls.push(finalUrl);
|
|
4730
4772
|
}
|
|
4731
4773
|
return urls;
|
|
4732
4774
|
}
|