stormcloud-video-player 0.8.19 → 0.8.20
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 +53 -9
- package/lib/index.cjs.map +1 -1
- package/lib/index.js +53 -9
- package/lib/index.js.map +1 -1
- package/lib/player/AdBreakOrchestrator.d.cts +1 -1
- package/lib/player/AdConfigManager.cjs +60 -5
- package/lib/player/AdConfigManager.cjs.map +1 -1
- package/lib/player/AdConfigManager.d.cts +1 -1
- package/lib/player/AdPreloadPool.d.cts +1 -1
- package/lib/player/AdTimingService.d.cts +1 -1
- package/lib/player/HlsEngine.d.cts +1 -1
- package/lib/player/PlayerControls.d.cts +1 -1
- package/lib/player/Scte35CueManager.d.cts +1 -1
- package/lib/player/Scte35Parser.d.cts +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +53 -9
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.d.cts +1 -1
- package/lib/player/playerTypes.d.cts +1 -1
- package/lib/players/HlsPlayer.cjs +53 -9
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.d.cts +1 -1
- package/lib/players/index.cjs +53 -9
- 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/sdk/hlsAdPlayer.d.cts +1 -1
- package/lib/types-BAP8n5mE.d.cts +126 -0
- package/lib/ui/StormcloudVideoPlayer.cjs +53 -9
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
- package/lib/utils/ctvVastSignals.cjs +12 -1
- package/lib/utils/ctvVastSignals.cjs.map +1 -1
- package/lib/utils/tracking.d.cts +1 -1
- package/lib/utils/vastEnvironmentSignals.cjs +12 -1
- package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
- package/lib/utils/vastMacros.cjs +48 -0
- package/lib/utils/vastMacros.cjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { S as StormcloudVideoPlayerConfig } from '../types-BAP8n5mE.cjs';
|
|
3
3
|
|
|
4
4
|
interface HlsPlayerProps extends StormcloudVideoPlayerConfig {
|
|
5
5
|
onMount?: (player: any) => void;
|
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 ? {
|
|
@@ -2935,6 +2947,29 @@ function normalizeVastTagUrl(raw) {
|
|
|
2935
2947
|
if (!raw) return raw;
|
|
2936
2948
|
try {
|
|
2937
2949
|
var url = new URL(raw);
|
|
2950
|
+
var anValue = url.searchParams.get("an");
|
|
2951
|
+
if (anValue !== null) {
|
|
2952
|
+
var orphanFragments = [];
|
|
2953
|
+
url.searchParams.forEach(function(_value, key) {
|
|
2954
|
+
if (key && INVALID_VAST_PARAM_KEY.test(key)) {
|
|
2955
|
+
orphanFragments.push(key.trim());
|
|
2956
|
+
}
|
|
2957
|
+
});
|
|
2958
|
+
if (orphanFragments.length > 0) {
|
|
2959
|
+
var reconstructed = [
|
|
2960
|
+
anValue.trimEnd()
|
|
2961
|
+
].concat(_to_consumable_array(orphanFragments)).filter(Boolean).join(" & ");
|
|
2962
|
+
url.searchParams.forEach(function(_value, key) {
|
|
2963
|
+
if (key && INVALID_VAST_PARAM_KEY.test(key)) {
|
|
2964
|
+
url.searchParams.delete(key);
|
|
2965
|
+
}
|
|
2966
|
+
});
|
|
2967
|
+
url.searchParams.set("an", reconstructed);
|
|
2968
|
+
return url.toString().replace(/([?&]an=)([^&]*)/, function(_match, prefix, val) {
|
|
2969
|
+
return prefix + val.replace(/\+/g, "%20");
|
|
2970
|
+
});
|
|
2971
|
+
}
|
|
2972
|
+
}
|
|
2938
2973
|
removeBrokenAppNameOrphans(url.searchParams);
|
|
2939
2974
|
return url.toString();
|
|
2940
2975
|
} catch (unused) {
|
|
@@ -4342,7 +4377,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4342
4377
|
key: "fetchAdConfiguration",
|
|
4343
4378
|
value: function fetchAdConfiguration() {
|
|
4344
4379
|
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;
|
|
4380
|
+
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
4381
|
return _ts_generator(this, function(_state) {
|
|
4347
4382
|
switch(_state.label){
|
|
4348
4383
|
case 0:
|
|
@@ -4426,9 +4461,16 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4426
4461
|
data = _state.sent();
|
|
4427
4462
|
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
4463
|
if (imaPayload) {
|
|
4429
|
-
|
|
4464
|
+
decodedPayload = imaPayload;
|
|
4465
|
+
try {
|
|
4466
|
+
decodedPayload = decodeURIComponent(imaPayload);
|
|
4467
|
+
} catch (unused) {
|
|
4468
|
+
console.warn("[StormcloudVideoPlayer] imaPayload was not URI-encoded; using as-is:", imaPayload);
|
|
4469
|
+
}
|
|
4470
|
+
console.log("[StormcloudVideoPlayer] Raw VAST tag URL (from API):", decodedPayload);
|
|
4471
|
+
this.apiVastTagUrl = normalizeVastTagUrl(decodedPayload);
|
|
4430
4472
|
if (this.debug) {
|
|
4431
|
-
console.log("[StormcloudVideoPlayer]
|
|
4473
|
+
console.log("[StormcloudVideoPlayer] Normalized VAST tag URL:", this.apiVastTagUrl);
|
|
4432
4474
|
}
|
|
4433
4475
|
} else {
|
|
4434
4476
|
if (this.debug) {
|
|
@@ -4762,7 +4804,9 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4762
4804
|
adTest: this.config.adTest,
|
|
4763
4805
|
consent: this.consentSignals
|
|
4764
4806
|
});
|
|
4765
|
-
|
|
4807
|
+
var finalUrl = palNonce.injectNonce(urlWithMacros);
|
|
4808
|
+
console.log("[StormcloudVideoPlayer] Resolved ad request URL (pod=".concat(this.podCounter, ", pos=").concat(this.adRequestPositionInBreak, "):"), finalUrl);
|
|
4809
|
+
urls.push(finalUrl);
|
|
4766
4810
|
}
|
|
4767
4811
|
return urls;
|
|
4768
4812
|
}
|