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.
@@ -7,6 +7,9 @@ function _array_like_to_array(arr, len) {
7
7
  function _array_with_holes(arr) {
8
8
  if (Array.isArray(arr)) return arr;
9
9
  }
10
+ function _array_without_holes(arr) {
11
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
12
+ }
10
13
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
11
14
  try {
12
15
  var info = gen[key](arg);
@@ -68,6 +71,9 @@ function _define_property(obj, key, value) {
68
71
  }
69
72
  return obj;
70
73
  }
74
+ function _iterable_to_array(iter) {
75
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
76
+ }
71
77
  function _iterable_to_array_limit(arr, i) {
72
78
  var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
73
79
  if (_i == null) return;
@@ -95,6 +101,9 @@ function _iterable_to_array_limit(arr, i) {
95
101
  function _non_iterable_rest() {
96
102
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
97
103
  }
104
+ function _non_iterable_spread() {
105
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
106
+ }
98
107
  function _object_spread(target) {
99
108
  for(var i = 1; i < arguments.length; i++){
100
109
  var source = arguments[i] != null ? arguments[i] : {};
@@ -137,6 +146,9 @@ function _object_spread_props(target, source) {
137
146
  function _sliced_to_array(arr, i) {
138
147
  return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
139
148
  }
149
+ function _to_consumable_array(arr) {
150
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
151
+ }
140
152
  function _type_of(obj) {
141
153
  "@swc/helpers - typeof";
142
154
  return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
@@ -316,9 +328,20 @@ __export(AdConfigManager_exports, {
316
328
  module.exports = __toCommonJS(AdConfigManager_exports);
317
329
  // src/utils/vastEnvironmentSignals.ts
318
330
  var AIRY_ANDROID_APP_ID = "com.freeairytv.android";
331
+ var AIRY_WEBOS_APP_ID = "com.freeairytv.webos";
332
+ var AIRY_TIZEN_APP_ID = "com.freeairytv.samsung";
333
+ var AIRY_ROKU_APP_ID = "com.freeairytv.roku";
319
334
  var AIRY_APP_NAME = "AiryTV Movies & TV";
320
335
  var AIRY_DEFAULT_CONTENT_URL = "https://live.airy.tv";
321
336
  var CTV_SESSION_STORAGE_KEY = "stormcloud.ctv.sid";
337
+ function getDefaultAppId() {
338
+ if (typeof navigator === "undefined") return AIRY_ANDROID_APP_ID;
339
+ var ua = navigator.userAgent;
340
+ if (/Web0S|webOS|LG Browser|LGSTB|LGE/i.test(ua)) return AIRY_WEBOS_APP_ID;
341
+ if (/Tizen|Samsung/i.test(ua)) return AIRY_TIZEN_APP_ID;
342
+ if (/Roku/i.test(ua)) return AIRY_ROKU_APP_ID;
343
+ return AIRY_ANDROID_APP_ID;
344
+ }
322
345
  var DEVICE_ID_STORAGE_KEYS = [
323
346
  "rdid",
324
347
  "ifa",
@@ -345,7 +368,7 @@ function resolveVastEnvironmentSignals(isCtv) {
345
368
  return _object_spread_props(_object_spread({
346
369
  isCtv: true,
347
370
  contentUrl: bridgeSignals.contentUrl || readStoredString("contentUrl") || AIRY_DEFAULT_CONTENT_URL,
348
- appId: bridgeSignals.appId || readStoredString("appId") || readStoredString("msid") || AIRY_ANDROID_APP_ID,
371
+ appId: bridgeSignals.appId || readStoredString("appId") || readStoredString("msid") || getDefaultAppId(),
349
372
  appName: bridgeSignals.appName || readStoredString("appName") || readStoredString("an") || AIRY_APP_NAME,
350
373
  sessionId: getOrCreateCtvSessionId()
351
374
  }, deviceId ? {
@@ -642,7 +665,6 @@ var CTV_UNSUPPORTED_PARAMS = [
642
665
  "max_ad_duration",
643
666
  "unviewed_position_start",
644
667
  "impl",
645
- "scor",
646
668
  "vad_type",
647
669
  "gdpr",
648
670
  "gdpr_consent",
@@ -891,6 +913,29 @@ function normalizeVastTagUrl(raw) {
891
913
  if (!raw) return raw;
892
914
  try {
893
915
  var url = new URL(raw);
916
+ var anValue = url.searchParams.get("an");
917
+ if (anValue !== null) {
918
+ var orphanFragments = [];
919
+ url.searchParams.forEach(function(_value, key) {
920
+ if (key && INVALID_VAST_PARAM_KEY.test(key)) {
921
+ orphanFragments.push(key.trim());
922
+ }
923
+ });
924
+ if (orphanFragments.length > 0) {
925
+ var reconstructed = [
926
+ anValue.trimEnd()
927
+ ].concat(_to_consumable_array(orphanFragments)).filter(Boolean).join(" & ");
928
+ url.searchParams.forEach(function(_value, key) {
929
+ if (key && INVALID_VAST_PARAM_KEY.test(key)) {
930
+ url.searchParams.delete(key);
931
+ }
932
+ });
933
+ url.searchParams.set("an", reconstructed);
934
+ return url.toString().replace(/([?&]an=)([^&]*)/, function(_match, prefix, val) {
935
+ return prefix + val.replace(/\+/g, "%20");
936
+ });
937
+ }
938
+ }
894
939
  removeBrokenAppNameOrphans(url.searchParams);
895
940
  return url.toString();
896
941
  } catch (unused) {
@@ -908,6 +953,7 @@ function applyVastMacros(baseUrl, ctx) {
908
953
  var params = url.searchParams;
909
954
  removeBrokenAppNameOrphans(params, ctx.appName);
910
955
  params.set("correlator", ctx.correlator);
956
+ params.set("scor", ctx.streamCorrelator);
911
957
  if (ctx.isCtv) {
912
958
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
913
959
  try {
@@ -929,8 +975,6 @@ function applyVastMacros(baseUrl, ctx) {
929
975
  }
930
976
  }
931
977
  }
932
- } else {
933
- params.set("scor", ctx.streamCorrelator);
934
978
  }
935
979
  if (ctx.pod != null) {
936
980
  params.set("pod", String(ctx.pod));
@@ -1517,7 +1561,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
1517
1561
  key: "fetchAdConfiguration",
1518
1562
  value: function fetchAdConfiguration() {
1519
1563
  return _async_to_generator(function() {
1520
- 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;
1564
+ 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;
1521
1565
  return _ts_generator(this, function(_state) {
1522
1566
  switch(_state.label){
1523
1567
  case 0:
@@ -1601,9 +1645,16 @@ var AdConfigManager = /*#__PURE__*/ function() {
1601
1645
  data = _state.sent();
1602
1646
  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;
1603
1647
  if (imaPayload) {
1604
- this.apiVastTagUrl = normalizeVastTagUrl(imaPayload);
1648
+ decodedPayload = imaPayload;
1649
+ try {
1650
+ decodedPayload = decodeURIComponent(imaPayload);
1651
+ } catch (unused) {
1652
+ console.warn("[StormcloudVideoPlayer] imaPayload was not URI-encoded; using as-is:", imaPayload);
1653
+ }
1654
+ console.log("[StormcloudVideoPlayer] Raw VAST tag URL (from API):", decodedPayload);
1655
+ this.apiVastTagUrl = normalizeVastTagUrl(decodedPayload);
1605
1656
  if (this.debug) {
1606
- console.log("[StormcloudVideoPlayer] Extracted VAST tag URL from /ads/web:", this.apiVastTagUrl);
1657
+ console.log("[StormcloudVideoPlayer] Normalized VAST tag URL:", this.apiVastTagUrl);
1607
1658
  }
1608
1659
  } else {
1609
1660
  if (this.debug) {
@@ -1937,7 +1988,9 @@ var AdConfigManager = /*#__PURE__*/ function() {
1937
1988
  adTest: this.config.adTest,
1938
1989
  consent: this.consentSignals
1939
1990
  });
1940
- urls.push(palNonce.injectNonce(urlWithMacros));
1991
+ var finalUrl = palNonce.injectNonce(urlWithMacros);
1992
+ console.log("[StormcloudVideoPlayer] Resolved ad request URL (pod=".concat(this.podCounter, ", pos=").concat(this.adRequestPositionInBreak, "):"), finalUrl);
1993
+ urls.push(finalUrl);
1941
1994
  }
1942
1995
  return urls;
1943
1996
  }