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
|
@@ -776,6 +776,7 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
776
776
|
handleAdComplete();
|
|
777
777
|
});
|
|
778
778
|
adVideoElement.addEventListener("error", function(e) {
|
|
779
|
+
if (!adPlaying) return;
|
|
779
780
|
console.error("[HlsAdPlayer] Ad video error:", e);
|
|
780
781
|
if (currentAd) {
|
|
781
782
|
fireTrackingPixels(currentAd.trackingUrls.error);
|
|
@@ -977,15 +978,15 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
977
978
|
adVideoElement.muted = originalMutedState;
|
|
978
979
|
console.log("[HlsAdPlayer] Set ad video volume to ".concat(adVideoElement.volume, ", muted: ").concat(adVideoElement.muted, ", originalMutedState: ").concat(originalMutedState, ", contentVolume: ").concat(contentVolume));
|
|
979
980
|
}
|
|
981
|
+
mediaFile = selectBestMediaFile(currentAd.mediaFiles);
|
|
982
|
+
if (!mediaFile) {
|
|
983
|
+
throw new Error("No media file available for ad");
|
|
984
|
+
}
|
|
980
985
|
if (adContainerEl) {
|
|
981
986
|
adContainerEl.style.display = "flex";
|
|
982
987
|
adContainerEl.style.pointerEvents = "auto";
|
|
983
988
|
}
|
|
984
989
|
emit("content_pause");
|
|
985
|
-
mediaFile = selectBestMediaFile(currentAd.mediaFiles);
|
|
986
|
-
if (!mediaFile) {
|
|
987
|
-
throw new Error("No media file available for ad");
|
|
988
|
-
}
|
|
989
990
|
isHlsAd = isHlsMediaFile(mediaFile);
|
|
990
991
|
console.log("[HlsAdPlayer] Loading ".concat(isHlsAd ? "HLS" : "progressive", " ad from: ").concat(mediaFile.url));
|
|
991
992
|
if (isHlsAd && import_hls.default.isSupported()) {
|
|
@@ -2273,9 +2274,20 @@ function initializePolyfills() {
|
|
|
2273
2274
|
}
|
|
2274
2275
|
// src/utils/vastEnvironmentSignals.ts
|
|
2275
2276
|
var AIRY_ANDROID_APP_ID = "com.freeairytv.android";
|
|
2277
|
+
var AIRY_WEBOS_APP_ID = "com.freeairytv.webos";
|
|
2278
|
+
var AIRY_TIZEN_APP_ID = "com.freeairytv.samsung";
|
|
2279
|
+
var AIRY_ROKU_APP_ID = "com.freeairytv.roku";
|
|
2276
2280
|
var AIRY_APP_NAME = "AiryTV Movies & TV";
|
|
2277
2281
|
var AIRY_DEFAULT_CONTENT_URL = "https://live.airy.tv";
|
|
2278
2282
|
var CTV_SESSION_STORAGE_KEY = "stormcloud.ctv.sid";
|
|
2283
|
+
function getDefaultAppId() {
|
|
2284
|
+
if (typeof navigator === "undefined") return AIRY_ANDROID_APP_ID;
|
|
2285
|
+
var ua = navigator.userAgent;
|
|
2286
|
+
if (/Web0S|webOS|LG Browser|LGSTB|LGE/i.test(ua)) return AIRY_WEBOS_APP_ID;
|
|
2287
|
+
if (/Tizen|Samsung/i.test(ua)) return AIRY_TIZEN_APP_ID;
|
|
2288
|
+
if (/Roku/i.test(ua)) return AIRY_ROKU_APP_ID;
|
|
2289
|
+
return AIRY_ANDROID_APP_ID;
|
|
2290
|
+
}
|
|
2279
2291
|
var DEVICE_ID_STORAGE_KEYS = [
|
|
2280
2292
|
"rdid",
|
|
2281
2293
|
"ifa",
|
|
@@ -2302,7 +2314,7 @@ function resolveVastEnvironmentSignals(isCtv) {
|
|
|
2302
2314
|
return _object_spread_props(_object_spread({
|
|
2303
2315
|
isCtv: true,
|
|
2304
2316
|
contentUrl: bridgeSignals.contentUrl || readStoredString("contentUrl") || AIRY_DEFAULT_CONTENT_URL,
|
|
2305
|
-
appId: bridgeSignals.appId || readStoredString("appId") || readStoredString("msid") ||
|
|
2317
|
+
appId: bridgeSignals.appId || readStoredString("appId") || readStoredString("msid") || getDefaultAppId(),
|
|
2306
2318
|
appName: bridgeSignals.appName || readStoredString("appName") || readStoredString("an") || AIRY_APP_NAME,
|
|
2307
2319
|
sessionId: getOrCreateCtvSessionId()
|
|
2308
2320
|
}, deviceId ? {
|
|
@@ -2599,7 +2611,6 @@ var CTV_UNSUPPORTED_PARAMS = [
|
|
|
2599
2611
|
"max_ad_duration",
|
|
2600
2612
|
"unviewed_position_start",
|
|
2601
2613
|
"impl",
|
|
2602
|
-
"scor",
|
|
2603
2614
|
"vad_type",
|
|
2604
2615
|
"gdpr",
|
|
2605
2616
|
"gdpr_consent",
|
|
@@ -2848,6 +2859,29 @@ function normalizeVastTagUrl(raw) {
|
|
|
2848
2859
|
if (!raw) return raw;
|
|
2849
2860
|
try {
|
|
2850
2861
|
var url = new URL(raw);
|
|
2862
|
+
var anValue = url.searchParams.get("an");
|
|
2863
|
+
if (anValue !== null) {
|
|
2864
|
+
var orphanFragments = [];
|
|
2865
|
+
url.searchParams.forEach(function(_value, key) {
|
|
2866
|
+
if (key && INVALID_VAST_PARAM_KEY.test(key)) {
|
|
2867
|
+
orphanFragments.push(key.trim());
|
|
2868
|
+
}
|
|
2869
|
+
});
|
|
2870
|
+
if (orphanFragments.length > 0) {
|
|
2871
|
+
var reconstructed = [
|
|
2872
|
+
anValue.trimEnd()
|
|
2873
|
+
].concat(_to_consumable_array(orphanFragments)).filter(Boolean).join(" & ");
|
|
2874
|
+
url.searchParams.forEach(function(_value, key) {
|
|
2875
|
+
if (key && INVALID_VAST_PARAM_KEY.test(key)) {
|
|
2876
|
+
url.searchParams.delete(key);
|
|
2877
|
+
}
|
|
2878
|
+
});
|
|
2879
|
+
url.searchParams.set("an", reconstructed);
|
|
2880
|
+
return url.toString().replace(/([?&]an=)([^&]*)/, function(_match, prefix, val) {
|
|
2881
|
+
return prefix + val.replace(/\+/g, "%20");
|
|
2882
|
+
});
|
|
2883
|
+
}
|
|
2884
|
+
}
|
|
2851
2885
|
removeBrokenAppNameOrphans(url.searchParams);
|
|
2852
2886
|
return url.toString();
|
|
2853
2887
|
} catch (unused) {
|
|
@@ -2865,6 +2899,7 @@ function applyVastMacros(baseUrl, ctx) {
|
|
|
2865
2899
|
var params = url.searchParams;
|
|
2866
2900
|
removeBrokenAppNameOrphans(params, ctx.appName);
|
|
2867
2901
|
params.set("correlator", ctx.correlator);
|
|
2902
|
+
params.set("scor", ctx.streamCorrelator);
|
|
2868
2903
|
if (ctx.isCtv) {
|
|
2869
2904
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
2870
2905
|
try {
|
|
@@ -2886,8 +2921,6 @@ function applyVastMacros(baseUrl, ctx) {
|
|
|
2886
2921
|
}
|
|
2887
2922
|
}
|
|
2888
2923
|
}
|
|
2889
|
-
} else {
|
|
2890
|
-
params.set("scor", ctx.streamCorrelator);
|
|
2891
2924
|
}
|
|
2892
2925
|
if (ctx.pod != null) {
|
|
2893
2926
|
params.set("pod", String(ctx.pod));
|
|
@@ -4255,7 +4288,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4255
4288
|
key: "fetchAdConfiguration",
|
|
4256
4289
|
value: function fetchAdConfiguration() {
|
|
4257
4290
|
return _async_to_generator(function() {
|
|
4258
|
-
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;
|
|
4291
|
+
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;
|
|
4259
4292
|
return _ts_generator(this, function(_state) {
|
|
4260
4293
|
switch(_state.label){
|
|
4261
4294
|
case 0:
|
|
@@ -4339,9 +4372,16 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4339
4372
|
data = _state.sent();
|
|
4340
4373
|
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;
|
|
4341
4374
|
if (imaPayload) {
|
|
4342
|
-
|
|
4375
|
+
decodedPayload = imaPayload;
|
|
4376
|
+
try {
|
|
4377
|
+
decodedPayload = decodeURIComponent(imaPayload);
|
|
4378
|
+
} catch (unused) {
|
|
4379
|
+
console.warn("[StormcloudVideoPlayer] imaPayload was not URI-encoded; using as-is:", imaPayload);
|
|
4380
|
+
}
|
|
4381
|
+
console.log("[StormcloudVideoPlayer] Raw VAST tag URL (from API):", decodedPayload);
|
|
4382
|
+
this.apiVastTagUrl = normalizeVastTagUrl(decodedPayload);
|
|
4343
4383
|
if (this.debug) {
|
|
4344
|
-
console.log("[StormcloudVideoPlayer]
|
|
4384
|
+
console.log("[StormcloudVideoPlayer] Normalized VAST tag URL:", this.apiVastTagUrl);
|
|
4345
4385
|
}
|
|
4346
4386
|
} else {
|
|
4347
4387
|
if (this.debug) {
|
|
@@ -4675,7 +4715,9 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4675
4715
|
adTest: this.config.adTest,
|
|
4676
4716
|
consent: this.consentSignals
|
|
4677
4717
|
});
|
|
4678
|
-
|
|
4718
|
+
var finalUrl = palNonce.injectNonce(urlWithMacros);
|
|
4719
|
+
console.log("[StormcloudVideoPlayer] Resolved ad request URL (pod=".concat(this.podCounter, ", pos=").concat(this.adRequestPositionInBreak, "):"), finalUrl);
|
|
4720
|
+
urls.push(finalUrl);
|
|
4679
4721
|
}
|
|
4680
4722
|
return urls;
|
|
4681
4723
|
}
|