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,4 +1,4 @@
|
|
|
1
|
-
import { b as AdBreak,
|
|
1
|
+
import { b as AdBreak, S as StormcloudVideoPlayerConfig, A as AdController } from '../types-BAP8n5mE.cjs';
|
|
2
2
|
import { PalNonceManager } from '../sdk/pal.cjs';
|
|
3
3
|
import { VastConsentSignals } from '../utils/vastMacros.cjs';
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { S as StormcloudVideoPlayerConfig, a as Scte35Marker, A as AdController } from '../types-BAP8n5mE.cjs';
|
|
2
2
|
|
|
3
3
|
interface AdTimingCallbacks {
|
|
4
4
|
onAdStopTimerFired(): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Hls from 'hls.js';
|
|
2
|
-
import {
|
|
2
|
+
import { S as StormcloudVideoPlayerConfig, a as Scte35Marker } from '../types-BAP8n5mE.cjs';
|
|
3
3
|
import { Scte35CueContext } from './playerTypes.cjs';
|
|
4
4
|
import { Scte35CueManager } from './Scte35CueManager.cjs';
|
|
5
5
|
import { AdTimingService } from './AdTimingService.cjs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as AdController } from '../types-
|
|
1
|
+
import { A as AdController } from '../types-BAP8n5mE.cjs';
|
|
2
2
|
|
|
3
3
|
declare function getAdAudioVolume(adPlayer: AdController): number;
|
|
4
4
|
declare function toggleMute(video: HTMLVideoElement, adPlayer: AdController, debug: boolean): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as Scte35Marker, I as Id3TagInfo } from '../types-BAP8n5mE.cjs';
|
|
2
2
|
|
|
3
3
|
declare function parseCueOutDuration(value: string): number | undefined;
|
|
4
4
|
declare function parseCueOutCont(value: string): {
|
|
@@ -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 ? {
|
|
@@ -2848,6 +2860,29 @@ function normalizeVastTagUrl(raw) {
|
|
|
2848
2860
|
if (!raw) return raw;
|
|
2849
2861
|
try {
|
|
2850
2862
|
var url = new URL(raw);
|
|
2863
|
+
var anValue = url.searchParams.get("an");
|
|
2864
|
+
if (anValue !== null) {
|
|
2865
|
+
var orphanFragments = [];
|
|
2866
|
+
url.searchParams.forEach(function(_value, key) {
|
|
2867
|
+
if (key && INVALID_VAST_PARAM_KEY.test(key)) {
|
|
2868
|
+
orphanFragments.push(key.trim());
|
|
2869
|
+
}
|
|
2870
|
+
});
|
|
2871
|
+
if (orphanFragments.length > 0) {
|
|
2872
|
+
var reconstructed = [
|
|
2873
|
+
anValue.trimEnd()
|
|
2874
|
+
].concat(_to_consumable_array(orphanFragments)).filter(Boolean).join(" & ");
|
|
2875
|
+
url.searchParams.forEach(function(_value, key) {
|
|
2876
|
+
if (key && INVALID_VAST_PARAM_KEY.test(key)) {
|
|
2877
|
+
url.searchParams.delete(key);
|
|
2878
|
+
}
|
|
2879
|
+
});
|
|
2880
|
+
url.searchParams.set("an", reconstructed);
|
|
2881
|
+
return url.toString().replace(/([?&]an=)([^&]*)/, function(_match, prefix, val) {
|
|
2882
|
+
return prefix + val.replace(/\+/g, "%20");
|
|
2883
|
+
});
|
|
2884
|
+
}
|
|
2885
|
+
}
|
|
2851
2886
|
removeBrokenAppNameOrphans(url.searchParams);
|
|
2852
2887
|
return url.toString();
|
|
2853
2888
|
} catch (unused) {
|
|
@@ -4255,7 +4290,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4255
4290
|
key: "fetchAdConfiguration",
|
|
4256
4291
|
value: function fetchAdConfiguration() {
|
|
4257
4292
|
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;
|
|
4293
|
+
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
4294
|
return _ts_generator(this, function(_state) {
|
|
4260
4295
|
switch(_state.label){
|
|
4261
4296
|
case 0:
|
|
@@ -4339,9 +4374,16 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4339
4374
|
data = _state.sent();
|
|
4340
4375
|
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
4376
|
if (imaPayload) {
|
|
4342
|
-
|
|
4377
|
+
decodedPayload = imaPayload;
|
|
4378
|
+
try {
|
|
4379
|
+
decodedPayload = decodeURIComponent(imaPayload);
|
|
4380
|
+
} catch (unused) {
|
|
4381
|
+
console.warn("[StormcloudVideoPlayer] imaPayload was not URI-encoded; using as-is:", imaPayload);
|
|
4382
|
+
}
|
|
4383
|
+
console.log("[StormcloudVideoPlayer] Raw VAST tag URL (from API):", decodedPayload);
|
|
4384
|
+
this.apiVastTagUrl = normalizeVastTagUrl(decodedPayload);
|
|
4343
4385
|
if (this.debug) {
|
|
4344
|
-
console.log("[StormcloudVideoPlayer]
|
|
4386
|
+
console.log("[StormcloudVideoPlayer] Normalized VAST tag URL:", this.apiVastTagUrl);
|
|
4345
4387
|
}
|
|
4346
4388
|
} else {
|
|
4347
4389
|
if (this.debug) {
|
|
@@ -4675,7 +4717,9 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
4675
4717
|
adTest: this.config.adTest,
|
|
4676
4718
|
consent: this.consentSignals
|
|
4677
4719
|
});
|
|
4678
|
-
|
|
4720
|
+
var finalUrl = palNonce.injectNonce(urlWithMacros);
|
|
4721
|
+
console.log("[StormcloudVideoPlayer] Resolved ad request URL (pod=".concat(this.podCounter, ", pos=").concat(this.adRequestPositionInBreak, "):"), finalUrl);
|
|
4722
|
+
urls.push(finalUrl);
|
|
4679
4723
|
}
|
|
4680
4724
|
return urls;
|
|
4681
4725
|
}
|