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/index.js
CHANGED
|
@@ -797,6 +797,7 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
797
797
|
handleAdComplete();
|
|
798
798
|
});
|
|
799
799
|
adVideoElement.addEventListener("error", function(e) {
|
|
800
|
+
if (!adPlaying) return;
|
|
800
801
|
console.error("[HlsAdPlayer] Ad video error:", e);
|
|
801
802
|
if (currentAd) {
|
|
802
803
|
fireTrackingPixels(currentAd.trackingUrls.error);
|
|
@@ -998,15 +999,15 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
998
999
|
adVideoElement.muted = originalMutedState;
|
|
999
1000
|
console.log("[HlsAdPlayer] Set ad video volume to ".concat(adVideoElement.volume, ", muted: ").concat(adVideoElement.muted, ", originalMutedState: ").concat(originalMutedState, ", contentVolume: ").concat(contentVolume));
|
|
1000
1001
|
}
|
|
1002
|
+
mediaFile = selectBestMediaFile(currentAd.mediaFiles);
|
|
1003
|
+
if (!mediaFile) {
|
|
1004
|
+
throw new Error("No media file available for ad");
|
|
1005
|
+
}
|
|
1001
1006
|
if (adContainerEl) {
|
|
1002
1007
|
adContainerEl.style.display = "flex";
|
|
1003
1008
|
adContainerEl.style.pointerEvents = "auto";
|
|
1004
1009
|
}
|
|
1005
1010
|
emit("content_pause");
|
|
1006
|
-
mediaFile = selectBestMediaFile(currentAd.mediaFiles);
|
|
1007
|
-
if (!mediaFile) {
|
|
1008
|
-
throw new Error("No media file available for ad");
|
|
1009
|
-
}
|
|
1010
1011
|
isHlsAd = isHlsMediaFile(mediaFile);
|
|
1011
1012
|
console.log("[HlsAdPlayer] Loading ".concat(isHlsAd ? "HLS" : "progressive", " ad from: ").concat(mediaFile.url));
|
|
1012
1013
|
if (isHlsAd && Hls.isSupported()) {
|
|
@@ -2320,9 +2321,20 @@ function initializePolyfills() {
|
|
|
2320
2321
|
}
|
|
2321
2322
|
// src/utils/vastEnvironmentSignals.ts
|
|
2322
2323
|
var AIRY_ANDROID_APP_ID = "com.freeairytv.android";
|
|
2324
|
+
var AIRY_WEBOS_APP_ID = "com.freeairytv.webos";
|
|
2325
|
+
var AIRY_TIZEN_APP_ID = "com.freeairytv.samsung";
|
|
2326
|
+
var AIRY_ROKU_APP_ID = "com.freeairytv.roku";
|
|
2323
2327
|
var AIRY_APP_NAME = "AiryTV Movies & TV";
|
|
2324
2328
|
var AIRY_DEFAULT_CONTENT_URL = "https://live.airy.tv";
|
|
2325
2329
|
var CTV_SESSION_STORAGE_KEY = "stormcloud.ctv.sid";
|
|
2330
|
+
function getDefaultAppId() {
|
|
2331
|
+
if (typeof navigator === "undefined") return AIRY_ANDROID_APP_ID;
|
|
2332
|
+
var ua = navigator.userAgent;
|
|
2333
|
+
if (/Web0S|webOS|LG Browser|LGSTB|LGE/i.test(ua)) return AIRY_WEBOS_APP_ID;
|
|
2334
|
+
if (/Tizen|Samsung/i.test(ua)) return AIRY_TIZEN_APP_ID;
|
|
2335
|
+
if (/Roku/i.test(ua)) return AIRY_ROKU_APP_ID;
|
|
2336
|
+
return AIRY_ANDROID_APP_ID;
|
|
2337
|
+
}
|
|
2326
2338
|
var DEVICE_ID_STORAGE_KEYS = [
|
|
2327
2339
|
"rdid",
|
|
2328
2340
|
"ifa",
|
|
@@ -2349,7 +2361,7 @@ function resolveVastEnvironmentSignals(isCtv) {
|
|
|
2349
2361
|
return _object_spread_props(_object_spread({
|
|
2350
2362
|
isCtv: true,
|
|
2351
2363
|
contentUrl: bridgeSignals.contentUrl || readStoredString("contentUrl") || AIRY_DEFAULT_CONTENT_URL,
|
|
2352
|
-
appId: bridgeSignals.appId || readStoredString("appId") || readStoredString("msid") ||
|
|
2364
|
+
appId: bridgeSignals.appId || readStoredString("appId") || readStoredString("msid") || getDefaultAppId(),
|
|
2353
2365
|
appName: bridgeSignals.appName || readStoredString("appName") || readStoredString("an") || AIRY_APP_NAME,
|
|
2354
2366
|
sessionId: getOrCreateCtvSessionId()
|
|
2355
2367
|
}, deviceId ? {
|
|
@@ -2646,7 +2658,6 @@ var CTV_UNSUPPORTED_PARAMS = [
|
|
|
2646
2658
|
"max_ad_duration",
|
|
2647
2659
|
"unviewed_position_start",
|
|
2648
2660
|
"impl",
|
|
2649
|
-
"scor",
|
|
2650
2661
|
"vad_type",
|
|
2651
2662
|
"gdpr",
|
|
2652
2663
|
"gdpr_consent",
|
|
@@ -2895,6 +2906,29 @@ function normalizeVastTagUrl(raw) {
|
|
|
2895
2906
|
if (!raw) return raw;
|
|
2896
2907
|
try {
|
|
2897
2908
|
var url = new URL(raw);
|
|
2909
|
+
var anValue = url.searchParams.get("an");
|
|
2910
|
+
if (anValue !== null) {
|
|
2911
|
+
var orphanFragments = [];
|
|
2912
|
+
url.searchParams.forEach(function(_value, key) {
|
|
2913
|
+
if (key && INVALID_VAST_PARAM_KEY.test(key)) {
|
|
2914
|
+
orphanFragments.push(key.trim());
|
|
2915
|
+
}
|
|
2916
|
+
});
|
|
2917
|
+
if (orphanFragments.length > 0) {
|
|
2918
|
+
var reconstructed = [
|
|
2919
|
+
anValue.trimEnd()
|
|
2920
|
+
].concat(_to_consumable_array(orphanFragments)).filter(Boolean).join(" & ");
|
|
2921
|
+
url.searchParams.forEach(function(_value, key) {
|
|
2922
|
+
if (key && INVALID_VAST_PARAM_KEY.test(key)) {
|
|
2923
|
+
url.searchParams.delete(key);
|
|
2924
|
+
}
|
|
2925
|
+
});
|
|
2926
|
+
url.searchParams.set("an", reconstructed);
|
|
2927
|
+
return url.toString().replace(/([?&]an=)([^&]*)/, function(_match, prefix, val) {
|
|
2928
|
+
return prefix + val.replace(/\+/g, "%20");
|
|
2929
|
+
});
|
|
2930
|
+
}
|
|
2931
|
+
}
|
|
2898
2932
|
removeBrokenAppNameOrphans(url.searchParams);
|
|
2899
2933
|
return url.toString();
|
|
2900
2934
|
} catch (unused) {
|
|
@@ -2912,6 +2946,7 @@ function applyVastMacros(baseUrl, ctx) {
|
|
|
2912
2946
|
var params = url.searchParams;
|
|
2913
2947
|
removeBrokenAppNameOrphans(params, ctx.appName);
|
|
2914
2948
|
params.set("correlator", ctx.correlator);
|
|
2949
|
+
params.set("scor", ctx.streamCorrelator);
|
|
2915
2950
|
if (ctx.isCtv) {
|
|
2916
2951
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
2917
2952
|
try {
|
|
@@ -2933,8 +2968,6 @@ function applyVastMacros(baseUrl, ctx) {
|
|
|
2933
2968
|
}
|
|
2934
2969
|
}
|
|
2935
2970
|
}
|
|
2936
|
-
} else {
|
|
2937
|
-
params.set("scor", ctx.streamCorrelator);
|
|
2938
2971
|
}
|
|
2939
2972
|
if (ctx.pod != null) {
|
|
2940
2973
|
params.set("pod", String(ctx.pod));
|
|
@@ -4328,7 +4361,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4328
4361
|
key: "fetchAdConfiguration",
|
|
4329
4362
|
value: function fetchAdConfiguration() {
|
|
4330
4363
|
return _async_to_generator(function() {
|
|
4331
|
-
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;
|
|
4364
|
+
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;
|
|
4332
4365
|
return _ts_generator(this, function(_state) {
|
|
4333
4366
|
switch(_state.label){
|
|
4334
4367
|
case 0:
|
|
@@ -4412,9 +4445,16 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4412
4445
|
data = _state.sent();
|
|
4413
4446
|
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;
|
|
4414
4447
|
if (imaPayload) {
|
|
4415
|
-
|
|
4448
|
+
decodedPayload = imaPayload;
|
|
4449
|
+
try {
|
|
4450
|
+
decodedPayload = decodeURIComponent(imaPayload);
|
|
4451
|
+
} catch (unused) {
|
|
4452
|
+
console.warn("[StormcloudVideoPlayer] imaPayload was not URI-encoded; using as-is:", imaPayload);
|
|
4453
|
+
}
|
|
4454
|
+
console.log("[StormcloudVideoPlayer] Raw VAST tag URL (from API):", decodedPayload);
|
|
4455
|
+
this.apiVastTagUrl = normalizeVastTagUrl(decodedPayload);
|
|
4416
4456
|
if (this.debug) {
|
|
4417
|
-
console.log("[StormcloudVideoPlayer]
|
|
4457
|
+
console.log("[StormcloudVideoPlayer] Normalized VAST tag URL:", this.apiVastTagUrl);
|
|
4418
4458
|
}
|
|
4419
4459
|
} else {
|
|
4420
4460
|
if (this.debug) {
|
|
@@ -4748,7 +4788,9 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4748
4788
|
adTest: this.config.adTest,
|
|
4749
4789
|
consent: this.consentSignals
|
|
4750
4790
|
});
|
|
4751
|
-
|
|
4791
|
+
var finalUrl = palNonce.injectNonce(urlWithMacros);
|
|
4792
|
+
console.log("[StormcloudVideoPlayer] Resolved ad request URL (pod=".concat(this.podCounter, ", pos=").concat(this.adRequestPositionInBreak, "):"), finalUrl);
|
|
4793
|
+
urls.push(finalUrl);
|
|
4752
4794
|
}
|
|
4753
4795
|
return urls;
|
|
4754
4796
|
}
|