stormcloud-video-player 0.8.57 → 0.8.59

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.
Files changed (42) hide show
  1. package/dist/stormcloud-vp.min.js +1 -1
  2. package/lib/index.cjs +57 -81
  3. package/lib/index.cjs.map +1 -1
  4. package/lib/index.d.cts +1 -0
  5. package/lib/index.d.ts +1 -0
  6. package/lib/index.js +57 -81
  7. package/lib/index.js.map +1 -1
  8. package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
  9. package/lib/player/AdBreakOrchestrator.d.cts +1 -1
  10. package/lib/player/AdConfigManager.cjs +47 -76
  11. package/lib/player/AdConfigManager.cjs.map +1 -1
  12. package/lib/player/AdConfigManager.d.cts +2 -1
  13. package/lib/player/AdTimingService.d.cts +1 -1
  14. package/lib/player/HlsEngine.d.cts +1 -1
  15. package/lib/player/PlayerControls.d.cts +1 -1
  16. package/lib/player/Scte35CueManager.d.cts +1 -1
  17. package/lib/player/Scte35Parser.d.cts +1 -1
  18. package/lib/player/StormcloudVideoPlayer.cjs +53 -79
  19. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  20. package/lib/player/StormcloudVideoPlayer.d.cts +1 -1
  21. package/lib/player/playerTypes.d.cts +1 -1
  22. package/lib/players/HlsPlayer.cjs +53 -79
  23. package/lib/players/HlsPlayer.cjs.map +1 -1
  24. package/lib/players/HlsPlayer.d.cts +1 -1
  25. package/lib/players/index.cjs +53 -79
  26. package/lib/players/index.cjs.map +1 -1
  27. package/lib/sdk/hlsAdPlayer.d.cts +1 -1
  28. package/lib/{types-cTqIKw_D.d.cts → types-52ASml2N.d.cts} +1 -0
  29. package/lib/ui/StormcloudVideoPlayer.cjs +57 -81
  30. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  31. package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
  32. package/lib/utils/ctvVastSignals.cjs +30 -36
  33. package/lib/utils/ctvVastSignals.cjs.map +1 -1
  34. package/lib/utils/tracking.cjs.map +1 -1
  35. package/lib/utils/tracking.d.cts +1 -1
  36. package/lib/utils/vastEnvironmentSignals.cjs +16 -36
  37. package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
  38. package/lib/utils/vastEnvironmentSignals.d.cts +0 -3
  39. package/lib/utils/vastMacros.cjs +13 -34
  40. package/lib/utils/vastMacros.cjs.map +1 -1
  41. package/lib/utils/vastMacros.d.cts +1 -3
  42. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { S as Scte35Marker, a as StormcloudVideoPlayerConfig, A as AdController } from '../types-cTqIKw_D.cjs';
1
+ import { S as Scte35Marker, a as StormcloudVideoPlayerConfig, A as AdController } from '../types-52ASml2N.cjs';
2
2
  import { AdTimingService } from './AdTimingService.cjs';
3
3
  import { AdConfigManager } from './AdConfigManager.cjs';
4
4
  import { Scte35CueManager } from './Scte35CueManager.cjs';
@@ -309,34 +309,8 @@ __export(AdConfigManager_exports, {
309
309
  });
310
310
  module.exports = __toCommonJS(AdConfigManager_exports);
311
311
  // src/utils/vastEnvironmentSignals.ts
312
- var AIRY_ANDROID_APP_ID = "com.freeairytv.android";
313
- var AIRY_WEBOS_APP_ID = "com.freeairytv.webos";
314
- var AIRY_TIZEN_APP_ID = "com.freeairytv.samsung";
315
- var AIRY_ROKU_APP_ID = "com.freeairytv.roku";
316
- var AIRY_APP_NAME = "AiryTV Movies & TV";
317
- var AIRY_DEFAULT_CONTENT_URL = "https://live.airy.tv";
318
312
  var CTV_SESSION_STORAGE_KEY = "stormcloud.ctv.sid";
319
313
  var PLAYER_ID_STORAGE_KEY = "stormcloud.player.id";
320
- var LG_TEST_APP_ID = "com.hulu.plus";
321
- var LG_TEST_APP_NAME = "Hulu";
322
- var LG_TEST_CONTENT_URL = "https://www.hulu.com/live-tv";
323
- var _lgTestDeviceId;
324
- function getLgTestDeviceId() {
325
- if (!_lgTestDeviceId) _lgTestDeviceId = createUuid();
326
- return _lgTestDeviceId;
327
- }
328
- function isLgWebOS() {
329
- if (typeof navigator === "undefined") return false;
330
- return /Web0S|webOS|LG Browser|LGSTB|LGE/i.test(navigator.userAgent);
331
- }
332
- function getDefaultAppId() {
333
- if (typeof navigator === "undefined") return AIRY_ANDROID_APP_ID;
334
- var ua = navigator.userAgent;
335
- if (/Web0S|webOS|LG Browser|LGSTB|LGE/i.test(ua)) return AIRY_WEBOS_APP_ID;
336
- if (/Tizen|Samsung/i.test(ua)) return AIRY_TIZEN_APP_ID;
337
- if (/Roku/i.test(ua)) return AIRY_ROKU_APP_ID;
338
- return AIRY_ANDROID_APP_ID;
339
- }
340
314
  var DEVICE_ID_STORAGE_KEYS = [
341
315
  "rdid",
342
316
  "ifa",
@@ -357,23 +331,29 @@ function resolveVastEnvironmentSignals(isCtv) {
357
331
  var _ref;
358
332
  var bridgeSignals = readNativeBridgeSignals();
359
333
  var platformDevice = readPlatformNativeDeviceId();
360
- var lg = isCtv && isLgWebOS();
361
- var deviceId = bridgeSignals.deviceId || readStoredDeviceId() || platformDevice.deviceId || (lg && platformDevice.limitAdTracking !== true ? getLgTestDeviceId() : void 0);
362
- var deviceIdType = bridgeSignals.deviceIdType || readStoredString("deviceIdType") || readStoredString("idtype") || platformDevice.deviceIdType || inferDeviceIdType() || (lg ? "lgudid" : void 0);
334
+ var realDeviceId = bridgeSignals.deviceId || readStoredDeviceId() || platformDevice.deviceId;
335
+ var deviceId = realDeviceId;
336
+ var deviceIdType = bridgeSignals.deviceIdType || readStoredString("deviceIdType") || readStoredString("idtype") || platformDevice.deviceIdType || inferDeviceIdType();
363
337
  var platformLat = bridgeSignals.deviceId ? bridgeSignals.limitAdTracking : platformDevice.limitAdTracking;
364
338
  var limitAdTracking = deviceId != null ? (_ref = platformLat !== null && platformLat !== void 0 ? platformLat : readStoredLimitAdTracking()) !== null && _ref !== void 0 ? _ref : false : void 0;
339
+ if (!deviceId && isCtv) {
340
+ var dpid = getOrCreateStoredUuid(PLAYER_ID_STORAGE_KEY);
341
+ if (dpid) {
342
+ var _ref1;
343
+ deviceId = dpid;
344
+ deviceIdType = "dpid";
345
+ limitAdTracking = (_ref1 = platformLat !== null && platformLat !== void 0 ? platformLat : readStoredLimitAdTracking()) !== null && _ref1 !== void 0 ? _ref1 : false;
346
+ }
347
+ }
365
348
  if (isCtv) {
366
349
  return _object_spread_props(_object_spread({
367
350
  isCtv: true,
368
- contentUrl: bridgeSignals.contentUrl || readStoredString("contentUrl") || (lg ? LG_TEST_CONTENT_URL : AIRY_DEFAULT_CONTENT_URL),
369
- appId: bridgeSignals.appId || readStoredString("appId") || readStoredString("msid") || (lg ? LG_TEST_APP_ID : getDefaultAppId()),
370
- appName: bridgeSignals.appName || readStoredString("appName") || readStoredString("an") || (lg ? LG_TEST_APP_NAME : AIRY_APP_NAME),
371
351
  sessionId: getOrCreateCtvSessionId()
372
352
  }, deviceId ? {
373
353
  deviceId: deviceId
374
- } : {}, deviceIdType ? {
354
+ } : {}, deviceId && deviceIdType ? {
375
355
  deviceIdType: deviceIdType
376
- } : {}, limitAdTracking != null ? {
356
+ } : {}, deviceId && limitAdTracking != null ? {
377
357
  limitAdTracking: limitAdTracking
378
358
  } : {}), {
379
359
  deviceTypeHint: 5
@@ -383,9 +363,9 @@ function resolveVastEnvironmentSignals(isCtv) {
383
363
  isCtv: false
384
364
  }, deviceId ? {
385
365
  deviceId: deviceId
386
- } : {}, deviceIdType ? {
366
+ } : {}, deviceId && deviceIdType ? {
387
367
  deviceIdType: deviceIdType
388
- } : {}, limitAdTracking != null ? {
368
+ } : {}, deviceId && limitAdTracking != null ? {
389
369
  limitAdTracking: limitAdTracking
390
370
  } : {});
391
371
  }
@@ -816,7 +796,6 @@ var UNEXPANDED_MACRO_PATTERN = /^(\[[^\]]*\]|\{[^}]*\}|%%[^%]*%%)$/;
816
796
  var INVALID_VAST_PARAM_KEY = /^\s|\s$/;
817
797
  var EXAMPLE_COM_URL = /example\.com/i;
818
798
  var CTV_UNSUPPORTED_PARAMS = [
819
- "description_url",
820
799
  "tfcd",
821
800
  "npa",
822
801
  "min_ad_duration",
@@ -907,18 +886,6 @@ var INLINE_DEVICE_MACRO_REPLACEMENTS = [
907
886
  return ctx.limitAdTracking != null ? ctx.limitAdTracking ? "1" : "0" : void 0;
908
887
  }
909
888
  },
910
- {
911
- pattern: /%%MSID%%/gi,
912
- getValue: function getValue(ctx) {
913
- return ctx.appId;
914
- }
915
- },
916
- {
917
- pattern: /%%APP_NAME%%/gi,
918
- getValue: function getValue(ctx) {
919
- return ctx.appName;
920
- }
921
- },
922
889
  {
923
890
  pattern: /%%SESSION_ID%%/gi,
924
891
  getValue: function getValue(ctx) {
@@ -1109,7 +1076,7 @@ function applyVastMacros(baseUrl, ctx) {
1109
1076
  return replaceCorrelatorFallback(expandedUrl, ctx.correlator);
1110
1077
  }
1111
1078
  var params = url.searchParams;
1112
- removeBrokenAppNameOrphans(params, ctx.appName);
1079
+ removeBrokenAppNameOrphans(params);
1113
1080
  params.set("correlator", ctx.correlator);
1114
1081
  params.set("scor", ctx.streamCorrelator);
1115
1082
  if (ctx.isCtv) {
@@ -1148,18 +1115,14 @@ function applyVastMacros(baseUrl, ctx) {
1148
1115
  if (ctx.podMaxAds != null) {
1149
1116
  params.set("pmad", String(Math.max(1, Math.round(ctx.podMaxAds))));
1150
1117
  }
1151
- var requestUrl = ctx.contentUrl || ctx.pageUrl;
1152
- if (requestUrl) {
1153
- params.set("url", requestUrl);
1154
- if (!ctx.isCtv) {
1155
- params.set("description_url", requestUrl);
1156
- }
1157
- } else {
1158
- var existingUrl = params.get("url") || "";
1159
- if (EXAMPLE_COM_URL.test(existingUrl)) {
1160
- params.delete("url");
1161
- params.delete("description_url");
1162
- }
1118
+ if (!ctx.isCtv && ctx.pageUrl) {
1119
+ params.set("url", ctx.pageUrl);
1120
+ params.set("description_url", ctx.pageUrl);
1121
+ }
1122
+ var existingUrl = params.get("url") || "";
1123
+ if (EXAMPLE_COM_URL.test(existingUrl)) {
1124
+ params.delete("url");
1125
+ params.delete("description_url");
1163
1126
  }
1164
1127
  if (ctx.adWillPlayMuted != null) {
1165
1128
  params.set("vpmute", ctx.adWillPlayMuted ? "1" : "0");
@@ -1167,13 +1130,6 @@ function applyVastMacros(baseUrl, ctx) {
1167
1130
  if (ctx.adWillAutoPlay != null) {
1168
1131
  params.set("vpa", ctx.adWillAutoPlay ? "auto" : "click");
1169
1132
  }
1170
- if (ctx.appId) {
1171
- params.set("msid", ctx.appId);
1172
- }
1173
- if (ctx.appName) {
1174
- removeBrokenAppNameOrphans(params, ctx.appName);
1175
- params.set("an", ctx.appName);
1176
- }
1177
1133
  if (ctx.sessionId) {
1178
1134
  params.set("sid", ctx.sessionId);
1179
1135
  }
@@ -1198,6 +1154,9 @@ function applyVastMacros(baseUrl, ctx) {
1198
1154
  if (ctx.adTest) {
1199
1155
  params.set("adtest", "on");
1200
1156
  }
1157
+ if (ctx.programTitle) {
1158
+ params.set("ct_ti", ctx.programTitle);
1159
+ }
1201
1160
  var staleKeys = [];
1202
1161
  params.forEach(function(value, key) {
1203
1162
  if (isMacroPlaceholder2(value)) {
@@ -1224,7 +1183,7 @@ function applyVastMacros(baseUrl, ctx) {
1224
1183
  }
1225
1184
  }
1226
1185
  }
1227
- removeBrokenAppNameOrphans(params, ctx.appName);
1186
+ removeBrokenAppNameOrphans(params);
1228
1187
  return url.toString();
1229
1188
  }
1230
1189
  function replaceCorrelatorFallback(baseUrl, correlator) {
@@ -2213,13 +2172,25 @@ var AdConfigManager = /*#__PURE__*/ function() {
2213
2172
  };
2214
2173
  }
2215
2174
  },
2175
+ {
2176
+ key: "getPalDescriptionUrl",
2177
+ value: function getPalDescriptionUrl() {
2178
+ if (!this.apiVastTagUrl) return void 0;
2179
+ try {
2180
+ var params = new URL(this.apiVastTagUrl).searchParams;
2181
+ return params.get("description_url") || params.get("url") || void 0;
2182
+ } catch (unused) {
2183
+ return void 0;
2184
+ }
2185
+ }
2186
+ },
2216
2187
  {
2217
2188
  key: "generatePodVastUrl",
2218
2189
  value: function generatePodVastUrl(baseUrl, podParams, adPlayer, palNonce, inAdBreak) {
2219
2190
  var _podParams_maxDurationMs;
2220
2191
  var adWillPlayMuted = inAdBreak ? adPlayer.getOriginalMutedState() : this.video.muted;
2221
2192
  var envSignals = resolveVastEnvironmentSignals(!!this.config.ctvAdRequest);
2222
- var urlWithMacros = applyVastMacros(baseUrl, {
2193
+ var urlWithMacros = applyVastMacros(baseUrl, _object_spread_props(_object_spread({
2223
2194
  correlator: this.viewCorrelator,
2224
2195
  streamCorrelator: this.streamCorrelator,
2225
2196
  pod: this.podCounter > 0 ? this.podCounter : void 0,
@@ -2227,20 +2198,20 @@ var AdConfigManager = /*#__PURE__*/ function() {
2227
2198
  podMinDurationMs: podParams.minDurationMs,
2228
2199
  podMaxDurationMs: podParams.maxDurationMs,
2229
2200
  isCtv: envSignals.isCtv,
2230
- contentUrl: envSignals.contentUrl,
2231
2201
  pageUrl: !envSignals.isCtv && typeof window !== "undefined" ? toDevSafeUrl(window.location.href) : void 0,
2232
2202
  adWillPlayMuted: adWillPlayMuted,
2233
2203
  adWillAutoPlay: !!this.config.autoplay,
2234
- appId: envSignals.appId,
2235
- appName: envSignals.appName,
2236
2204
  sessionId: envSignals.sessionId,
2237
2205
  deviceId: envSignals.deviceId,
2238
2206
  deviceIdType: envSignals.deviceIdType,
2239
2207
  limitAdTracking: envSignals.limitAdTracking,
2240
2208
  deviceTypeHint: envSignals.deviceTypeHint,
2241
- adTest: this.config.adTest,
2209
+ adTest: this.config.adTest
2210
+ }, this.config.programTitle ? {
2211
+ programTitle: this.config.programTitle
2212
+ } : {}), {
2242
2213
  consent: this.consentSignals
2243
- });
2214
+ }));
2244
2215
  var finalUrl = palNonce.injectNonce(urlWithMacros);
2245
2216
  console.log("[StormcloudVideoPlayer] Resolved optimized-pod request URL (pod=".concat(this.podCounter, ", pmad=").concat(podParams.maxAds, ", pmnd=").concat(podParams.minDurationMs, ", pmxd=").concat((_podParams_maxDurationMs = podParams.maxDurationMs) !== null && _podParams_maxDurationMs !== void 0 ? _podParams_maxDurationMs : "?", "):"), finalUrl);
2246
2217
  return finalUrl;