stormcloud-video-player 0.8.60 → 0.8.62

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 (54) hide show
  1. package/dist/stormcloud-vp.min.js +1 -1
  2. package/lib/Player.cjs.map +1 -1
  3. package/lib/StormcloudPlayer.cjs +83 -29
  4. package/lib/StormcloudPlayer.cjs.map +1 -1
  5. package/lib/index.cjs +87 -31
  6. package/lib/index.cjs.map +1 -1
  7. package/lib/index.d.ts +4034 -0
  8. package/lib/index.js +13001 -0
  9. package/lib/index.js.map +1 -0
  10. package/lib/patterns.cjs.map +1 -1
  11. package/lib/player/AdBreakOrchestrator.cjs +3 -2
  12. package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
  13. package/lib/player/AdConfigManager.cjs +53 -11
  14. package/lib/player/AdConfigManager.cjs.map +1 -1
  15. package/lib/player/AdTimingService.cjs.map +1 -1
  16. package/lib/player/HlsEngine.cjs.map +1 -1
  17. package/lib/player/PlaceholderLayer.cjs.map +1 -1
  18. package/lib/player/PlayerControls.cjs.map +1 -1
  19. package/lib/player/Scte35CueManager.cjs.map +1 -1
  20. package/lib/player/Scte35Parser.cjs.map +1 -1
  21. package/lib/player/StormcloudVideoPlayer.cjs +83 -29
  22. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  23. package/lib/player/playerTypes.cjs.map +1 -1
  24. package/lib/players/FilePlayer.cjs.map +1 -1
  25. package/lib/players/HlsPlayer.cjs +83 -29
  26. package/lib/players/HlsPlayer.cjs.map +1 -1
  27. package/lib/players/index.cjs +83 -29
  28. package/lib/players/index.cjs.map +1 -1
  29. package/lib/props.cjs.map +1 -1
  30. package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
  31. package/lib/sdk/pal.cjs +9 -5
  32. package/lib/sdk/pal.cjs.map +1 -1
  33. package/lib/sdk/pal.d.cts +1 -0
  34. package/lib/types.cjs.map +1 -1
  35. package/lib/types.d.cts +1 -0
  36. package/lib/ui/StormcloudVideoPlayer.cjs +87 -31
  37. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  38. package/lib/utils/browserCompat.cjs.map +1 -1
  39. package/lib/utils/ctvVastSignals.cjs +25 -4
  40. package/lib/utils/ctvVastSignals.cjs.map +1 -1
  41. package/lib/utils/devUrl.cjs.map +1 -1
  42. package/lib/utils/polyfills.cjs.map +1 -1
  43. package/lib/utils/tracking.cjs +3 -2
  44. package/lib/utils/tracking.cjs.map +1 -1
  45. package/lib/utils/trackingIngest.cjs.map +1 -1
  46. package/lib/utils/vastEnvironmentSignals.cjs +27 -5
  47. package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
  48. package/lib/utils/vastEnvironmentSignals.d.cts +1 -1
  49. package/lib/utils/vastMacros.cjs +24 -4
  50. package/lib/utils/vastMacros.cjs.map +1 -1
  51. package/lib/utils/vastMacros.d.cts +2 -0
  52. package/lib/utils/vastTrackingMacros.cjs.map +1 -1
  53. package/lib/utils.cjs.map +1 -1
  54. package/package.json +5 -3
package/lib/sdk/pal.cjs CHANGED
@@ -220,6 +220,7 @@ function toDevSafeUrl(rawUrl) {
220
220
  // src/sdk/pal.ts
221
221
  var PAL_SDK_URL = "https://imasdk.googleapis.com/pal/sdkloader/pal.js";
222
222
  var _nonceLoader;
223
+ var _nonceLoaderAllowStorage;
223
224
  var _palLoadPromise;
224
225
  function loadPalSdk() {
225
226
  var _window_goog;
@@ -262,12 +263,15 @@ function loadPalSdk() {
262
263
  });
263
264
  return _palLoadPromise;
264
265
  }
265
- function getOrCreateNonceLoader() {
266
- if (_nonceLoader) return _nonceLoader;
266
+ function getOrCreateNonceLoader(allowStorage) {
267
+ if (_nonceLoader && _nonceLoaderAllowStorage === allowStorage) {
268
+ return _nonceLoader;
269
+ }
267
270
  var goog = window.goog;
268
271
  var consentSettings = new goog.pal.ConsentSettings();
269
- consentSettings.allowStorage = true;
272
+ consentSettings.allowStorage = allowStorage;
270
273
  _nonceLoader = new goog.pal.NonceLoader(consentSettings);
274
+ _nonceLoaderAllowStorage = allowStorage;
271
275
  return _nonceLoader;
272
276
  }
273
277
  function createPalNonceManager() {
@@ -276,7 +280,7 @@ function createPalNonceManager() {
276
280
  return {
277
281
  generateNonce: function generateNonce() {
278
282
  return _async_to_generator(function() {
279
- var options, _options_adWillAutoPlay, _options_adWillPlayMuted, _options_playerVolume, _options_continuousPlayback, loader, goog, request, manager, error;
283
+ var options, _options_allowStorage, _options_adWillAutoPlay, _options_adWillPlayMuted, _options_playerVolume, _options_continuousPlayback, loader, goog, request, manager, error;
280
284
  var _arguments = arguments;
281
285
  return _ts_generator(this, function(_state) {
282
286
  switch(_state.label){
@@ -296,7 +300,7 @@ function createPalNonceManager() {
296
300
  ];
297
301
  case 2:
298
302
  _state.sent();
299
- loader = getOrCreateNonceLoader();
303
+ loader = getOrCreateNonceLoader((_options_allowStorage = options.allowStorage) !== null && _options_allowStorage !== void 0 ? _options_allowStorage : true);
300
304
  goog = window.goog;
301
305
  request = new goog.pal.NonceRequest();
302
306
  request.adWillAutoPlay = (_options_adWillAutoPlay = options.adWillAutoPlay) !== null && _options_adWillAutoPlay !== void 0 ? _options_adWillAutoPlay : true;
@@ -1 +1 @@
1
- {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\sdk\\pal.cjs"],"names":[],"mappings":"AAAA","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/sdk/pal.ts\nvar pal_exports = {};\n__export(pal_exports, {\n createPalNonceManager: () => createPalNonceManager\n});\nmodule.exports = __toCommonJS(pal_exports);\n\n// src/utils/devUrl.ts\nvar PRIVATE_HOST_PATTERNS = [\n /^localhost$/i,\n /^127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/,\n /^0\\.0\\.0\\.0$/,\n /^::1$/,\n /^10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/,\n /^192\\.168\\.\\d{1,3}\\.\\d{1,3}$/,\n /^172\\.(1[6-9]|2\\d|3[0-1])\\.\\d{1,3}\\.\\d{1,3}$/\n];\nfunction isLocalDevHost(hostname) {\n const host = hostname.replace(/^\\[/, \"\").replace(/\\]$/, \"\").toLowerCase();\n if (!host) return false;\n if (host.endsWith(\".local\") || host.endsWith(\".localhost\")) return true;\n return PRIVATE_HOST_PATTERNS.some((pattern) => pattern.test(host));\n}\nfunction toDevSafeUrl(rawUrl) {\n if (!rawUrl) return rawUrl ?? \"\";\n let url;\n try {\n url = new URL(rawUrl);\n } catch {\n return rawUrl;\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n return rawUrl;\n }\n if (!isLocalDevHost(url.hostname)) {\n return rawUrl;\n }\n const cleanPath = url.pathname.replace(/\\/{2,}/g, \"/\") || \"/index.html\";\n return `file://${cleanPath}`;\n}\n\n// src/sdk/pal.ts\nvar PAL_SDK_URL = \"https://imasdk.googleapis.com/pal/sdkloader/pal.js\";\nvar _nonceLoader;\nvar _palLoadPromise;\nfunction loadPalSdk() {\n if (typeof window !== \"undefined\" && window.goog?.pal) {\n return Promise.resolve();\n }\n if (_palLoadPromise) return _palLoadPromise;\n _palLoadPromise = new Promise((resolve, reject) => {\n const existing = document.querySelector(\n 'script[data-pal=\"true\"]'\n );\n if (existing) {\n if (window.goog?.pal) {\n resolve();\n return;\n }\n const timeout = setTimeout(\n () => reject(new Error(\"PAL SDK load timeout\")),\n 1e4\n );\n existing.addEventListener(\"load\", () => {\n clearTimeout(timeout);\n resolve();\n });\n existing.addEventListener(\"error\", () => {\n clearTimeout(timeout);\n reject(new Error(\"PAL SDK load failed\"));\n });\n return;\n }\n const script = document.createElement(\"script\");\n script.src = PAL_SDK_URL;\n script.async = true;\n script.setAttribute(\"data-pal\", \"true\");\n script.onload = () => resolve();\n script.onerror = () => reject(new Error(\"PAL SDK load failed\"));\n document.head.appendChild(script);\n });\n return _palLoadPromise;\n}\nfunction getOrCreateNonceLoader() {\n if (_nonceLoader) return _nonceLoader;\n const goog = window.goog;\n const consentSettings = new goog.pal.ConsentSettings();\n consentSettings.allowStorage = true;\n _nonceLoader = new goog.pal.NonceLoader(consentSettings);\n return _nonceLoader;\n}\nfunction createPalNonceManager() {\n let currentNonce = \"\";\n let currentNonceManager;\n return {\n async generateNonce(options = {}) {\n try {\n await loadPalSdk();\n const loader = getOrCreateNonceLoader();\n const goog = window.goog;\n const request = new goog.pal.NonceRequest();\n request.adWillAutoPlay = options.adWillAutoPlay ?? true;\n request.adWillPlayMuted = options.adWillPlayMuted ?? false;\n request.playerVolume = options.playerVolume ?? (request.adWillPlayMuted ? 0 : 1);\n request.continuousPlayback = options.continuousPlayback ?? true;\n request.descriptionUrl = toDevSafeUrl(\n options.descriptionUrl || (typeof window !== \"undefined\" ? window.location.href : \"\")\n );\n request.iconsSupported = true;\n request.playerType = \"StormcloudVideoPlayer\";\n request.playerVersion = \"1.0\";\n request.supportedApiFrameworks = \"2,7,9\";\n request.url = toDevSafeUrl(\n options.descriptionUrl || (typeof window !== \"undefined\" ? window.location.href : \"\")\n );\n request.videoWidth = options.videoWidth || 640;\n request.videoHeight = options.videoHeight || 480;\n if (options.ppid) request.ppid = options.ppid;\n if (options.sessionId) request.sessionId = options.sessionId;\n console.log(\n \"[PAL] NonceRequest before generateNonce:\",\n JSON.stringify({\n adWillAutoPlay: request.adWillAutoPlay,\n adWillPlayMuted: request.adWillPlayMuted,\n playerVolume: request.playerVolume,\n continuousPlayback: request.continuousPlayback,\n descriptionUrl: request.descriptionUrl,\n iconsSupported: request.iconsSupported,\n playerType: request.playerType,\n playerVersion: request.playerVersion,\n supportedApiFrameworks: request.supportedApiFrameworks,\n url: request.url,\n videoWidth: request.videoWidth,\n videoHeight: request.videoHeight,\n ppid: request.ppid,\n sessionId: request.sessionId\n }, null, 2)\n );\n const manager = await loader.loadNonceManager(request);\n currentNonceManager = manager;\n currentNonce = manager.getNonce();\n console.log(\"[PAL] Nonce generated successfully\");\n return currentNonce;\n } catch (error) {\n console.warn(\"[PAL] Failed to generate nonce:\", error);\n currentNonce = \"\";\n currentNonceManager = void 0;\n return \"\";\n }\n },\n getCurrentNonce() {\n return currentNonce;\n },\n injectNonce(vastTagUrl) {\n if (!currentNonce || !vastTagUrl) return vastTagUrl;\n try {\n const url = new URL(vastTagUrl);\n url.searchParams.delete(\"paln\");\n url.searchParams.set(\"givn\", currentNonce);\n return url.toString();\n } catch {\n let base = vastTagUrl.replace(/([?&])paln=[^&]*/g, \"\").replace(/[?&]$/, \"\");\n const sep = base.includes(\"?\") ? \"&\" : \"?\";\n return `${base}${sep}givn=${encodeURIComponent(currentNonce)}`;\n }\n },\n sendPlaybackStart() {\n try {\n currentNonceManager?.sendPlaybackStart();\n } catch {\n }\n },\n sendPlaybackEnd() {\n try {\n currentNonceManager?.sendPlaybackEnd();\n } catch {\n }\n },\n sendAdClick() {\n try {\n currentNonceManager?.sendAdClick();\n } catch {\n }\n },\n sendAdTouch(event) {\n try {\n currentNonceManager?.sendAdTouch(event);\n } catch {\n }\n },\n reset() {\n currentNonce = \"\";\n currentNonceManager = void 0;\n }\n };\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n createPalNonceManager\n});\n"]}
1
+ {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\sdk\\pal.cjs"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","pal_exports","createPalNonceManager","module","exports","PRIVATE_HOST_PATTERNS","isLocalDevHost","hostname","host","replace","toLowerCase","endsWith","some","pattern","test","toDevSafeUrl","rawUrl","url","URL","protocol","cleanPath","pathname","PAL_SDK_URL","_nonceLoader","_nonceLoaderAllowStorage","_palLoadPromise","loadPalSdk","window","goog","pal","Promise","resolve","reject","existing","document","querySelector","timeout","setTimeout","Error","addEventListener","clearTimeout","script","createElement","src","async","setAttribute","onload","onerror","head","appendChild","getOrCreateNonceLoader","allowStorage","consentSettings","ConsentSettings","NonceLoader","currentNonce","currentNonceManager","generateNonce","options","loader","request","manager","error","NonceRequest","adWillAutoPlay","adWillPlayMuted","playerVolume","continuousPlayback","descriptionUrl","location","href","iconsSupported","playerType","playerVersion","supportedApiFrameworks","videoWidth","videoHeight","ppid","sessionId","console","log","JSON","stringify","loadNonceManager","getNonce","warn","getCurrentNonce","injectNonce","vastTagUrl","searchParams","delete","set","toString","base","sep","includes","encodeURIComponent","sendPlaybackStart","sendPlaybackEnd","sendAdClick","sendAdTouch","event","reset"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/sdk/pal.ts\nvar pal_exports = {};\n__export(pal_exports, {\n createPalNonceManager: () => createPalNonceManager\n});\nmodule.exports = __toCommonJS(pal_exports);\n\n// src/utils/devUrl.ts\nvar PRIVATE_HOST_PATTERNS = [\n /^localhost$/i,\n /^127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/,\n /^0\\.0\\.0\\.0$/,\n /^::1$/,\n /^10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/,\n /^192\\.168\\.\\d{1,3}\\.\\d{1,3}$/,\n /^172\\.(1[6-9]|2\\d|3[0-1])\\.\\d{1,3}\\.\\d{1,3}$/\n];\nfunction isLocalDevHost(hostname) {\n const host = hostname.replace(/^\\[/, \"\").replace(/\\]$/, \"\").toLowerCase();\n if (!host) return false;\n if (host.endsWith(\".local\") || host.endsWith(\".localhost\")) return true;\n return PRIVATE_HOST_PATTERNS.some((pattern) => pattern.test(host));\n}\nfunction toDevSafeUrl(rawUrl) {\n if (!rawUrl) return rawUrl ?? \"\";\n let url;\n try {\n url = new URL(rawUrl);\n } catch {\n return rawUrl;\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n return rawUrl;\n }\n if (!isLocalDevHost(url.hostname)) {\n return rawUrl;\n }\n const cleanPath = url.pathname.replace(/\\/{2,}/g, \"/\") || \"/index.html\";\n return `file://${cleanPath}`;\n}\n\n// src/sdk/pal.ts\nvar PAL_SDK_URL = \"https://imasdk.googleapis.com/pal/sdkloader/pal.js\";\nvar _nonceLoader;\nvar _nonceLoaderAllowStorage;\nvar _palLoadPromise;\nfunction loadPalSdk() {\n if (typeof window !== \"undefined\" && window.goog?.pal) {\n return Promise.resolve();\n }\n if (_palLoadPromise) return _palLoadPromise;\n _palLoadPromise = new Promise((resolve, reject) => {\n const existing = document.querySelector(\n 'script[data-pal=\"true\"]'\n );\n if (existing) {\n if (window.goog?.pal) {\n resolve();\n return;\n }\n const timeout = setTimeout(\n () => reject(new Error(\"PAL SDK load timeout\")),\n 1e4\n );\n existing.addEventListener(\"load\", () => {\n clearTimeout(timeout);\n resolve();\n });\n existing.addEventListener(\"error\", () => {\n clearTimeout(timeout);\n reject(new Error(\"PAL SDK load failed\"));\n });\n return;\n }\n const script = document.createElement(\"script\");\n script.src = PAL_SDK_URL;\n script.async = true;\n script.setAttribute(\"data-pal\", \"true\");\n script.onload = () => resolve();\n script.onerror = () => reject(new Error(\"PAL SDK load failed\"));\n document.head.appendChild(script);\n });\n return _palLoadPromise;\n}\nfunction getOrCreateNonceLoader(allowStorage) {\n if (_nonceLoader && _nonceLoaderAllowStorage === allowStorage) {\n return _nonceLoader;\n }\n const goog = window.goog;\n const consentSettings = new goog.pal.ConsentSettings();\n consentSettings.allowStorage = allowStorage;\n _nonceLoader = new goog.pal.NonceLoader(consentSettings);\n _nonceLoaderAllowStorage = allowStorage;\n return _nonceLoader;\n}\nfunction createPalNonceManager() {\n let currentNonce = \"\";\n let currentNonceManager;\n return {\n async generateNonce(options = {}) {\n try {\n await loadPalSdk();\n const loader = getOrCreateNonceLoader(options.allowStorage ?? true);\n const goog = window.goog;\n const request = new goog.pal.NonceRequest();\n request.adWillAutoPlay = options.adWillAutoPlay ?? true;\n request.adWillPlayMuted = options.adWillPlayMuted ?? false;\n request.playerVolume = options.playerVolume ?? (request.adWillPlayMuted ? 0 : 1);\n request.continuousPlayback = options.continuousPlayback ?? true;\n request.descriptionUrl = toDevSafeUrl(\n options.descriptionUrl || (typeof window !== \"undefined\" ? window.location.href : \"\")\n );\n request.iconsSupported = true;\n request.playerType = \"StormcloudVideoPlayer\";\n request.playerVersion = \"1.0\";\n request.supportedApiFrameworks = \"2,7,9\";\n request.url = toDevSafeUrl(\n options.descriptionUrl || (typeof window !== \"undefined\" ? window.location.href : \"\")\n );\n request.videoWidth = options.videoWidth || 640;\n request.videoHeight = options.videoHeight || 480;\n if (options.ppid) request.ppid = options.ppid;\n if (options.sessionId) request.sessionId = options.sessionId;\n console.log(\n \"[PAL] NonceRequest before generateNonce:\",\n JSON.stringify({\n adWillAutoPlay: request.adWillAutoPlay,\n adWillPlayMuted: request.adWillPlayMuted,\n playerVolume: request.playerVolume,\n continuousPlayback: request.continuousPlayback,\n descriptionUrl: request.descriptionUrl,\n iconsSupported: request.iconsSupported,\n playerType: request.playerType,\n playerVersion: request.playerVersion,\n supportedApiFrameworks: request.supportedApiFrameworks,\n url: request.url,\n videoWidth: request.videoWidth,\n videoHeight: request.videoHeight,\n ppid: request.ppid,\n sessionId: request.sessionId\n }, null, 2)\n );\n const manager = await loader.loadNonceManager(request);\n currentNonceManager = manager;\n currentNonce = manager.getNonce();\n console.log(\"[PAL] Nonce generated successfully\");\n return currentNonce;\n } catch (error) {\n console.warn(\"[PAL] Failed to generate nonce:\", error);\n currentNonce = \"\";\n currentNonceManager = void 0;\n return \"\";\n }\n },\n getCurrentNonce() {\n return currentNonce;\n },\n injectNonce(vastTagUrl) {\n if (!currentNonce || !vastTagUrl) return vastTagUrl;\n try {\n const url = new URL(vastTagUrl);\n url.searchParams.delete(\"paln\");\n url.searchParams.set(\"givn\", currentNonce);\n return url.toString();\n } catch {\n let base = vastTagUrl.replace(/([?&])paln=[^&]*/g, \"\").replace(/[?&]$/, \"\");\n const sep = base.includes(\"?\") ? \"&\" : \"?\";\n return `${base}${sep}givn=${encodeURIComponent(currentNonce)}`;\n }\n },\n sendPlaybackStart() {\n try {\n currentNonceManager?.sendPlaybackStart();\n } catch {\n }\n },\n sendPlaybackEnd() {\n try {\n currentNonceManager?.sendPlaybackEnd();\n } catch {\n }\n },\n sendAdClick() {\n try {\n currentNonceManager?.sendAdClick();\n } catch {\n }\n },\n sendAdTouch(event) {\n try {\n currentNonceManager?.sendAdTouch(event);\n } catch {\n }\n },\n reset() {\n currentNonce = \"\";\n currentNonceManager = void 0;\n }\n };\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n createPalNonceManager\n});\n"]}
package/lib/sdk/pal.d.cts CHANGED
@@ -13,6 +13,7 @@ interface PalNonceOptions {
13
13
  adWillPlayMuted?: boolean;
14
14
  playerVolume?: number;
15
15
  continuousPlayback?: boolean;
16
+ allowStorage?: boolean;
16
17
  }
17
18
  interface PalNonceManager {
18
19
  generateNonce(options?: PalNonceOptions): Promise<string>;
package/lib/types.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\types.cjs"],"names":["__defProp","Object","defineProperty"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mEACIA,QAAYC,EAAAA,IAAAA,KAAAA;oBAAAA,CAAAA,IAAAA,KAAAA,IAAAA;+BAAAA,GAAOC,CAAAA,CAAAA,IAAAA","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/types.ts\nvar types_exports = {};\nmodule.exports = __toCommonJS(types_exports);\n"]}
1
+ {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\types.cjs"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__copyProps","to","from","except","desc","key","call","get","enumerable","__toCommonJS","mod","value","types_exports","module","exports"],"mappings":"AAAA;;;;;AACA,IAAIA,YAAYC,OAAOC,cAAc;AACrC,IAAIC,mBAAmBF,OAAOG,wBAAwB;AACtD,IAAIC,oBAAoBJ,OAAOK,mBAAmB;AAClD,IAAIC,eAAeN,OAAOO,SAAS,CAACC,cAAc;AAClD,IAAIC,cAAc,qBAACC,IAAIC,MAAMC,QAAQC;IACnC,IAAIF,QAAQ,CAAA,OAAOA,qCAAP,SAAOA,KAAG,MAAM,YAAY,OAAOA,SAAS,YAAY;YAC7D,kCAAA,2BAAA;;;gBAAA,IAAIG,MAAJ;gBACH,IAAI,CAACR,aAAaS,IAAI,CAACL,IAAII,QAAQA,QAAQF,QACzCb,UAAUW,IAAII,KAAK;oBAAEE,KAAK,SAALA;+BAAWL,IAAI,CAACG,IAAI;;oBAAEG,YAAY,CAAEJ,CAAAA,OAAOX,iBAAiBS,MAAMG,IAAG,KAAMD,KAAKI,UAAU;gBAAC;;YAFpH,QAAK,YAAWb,kBAAkBO,0BAA7B,SAAA,6BAAA,QAAA,yBAAA;;YAAA;YAAA;;;qBAAA,6BAAA;oBAAA;;;oBAAA;0BAAA;;;;IAGP;IACA,OAAOD;AACT;AACA,IAAIQ,eAAe,sBAACC;WAAQV,YAAYV,UAAU,CAAC,GAAG,cAAc;QAAEqB,OAAO;IAAK,IAAID;;AAEtF,eAAe;AACf,IAAIE,gBAAgB,CAAC;AACrBC,OAAOC,OAAO,GAAGL,aAAaG","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/types.ts\nvar types_exports = {};\nmodule.exports = __toCommonJS(types_exports);\n"]}
package/lib/types.d.cts CHANGED
@@ -39,6 +39,7 @@ interface StormcloudVideoPlayerConfig {
39
39
  ctvAdRequest?: boolean;
40
40
  adTest?: boolean;
41
41
  programTitle?: string;
42
+ channelName?: string;
42
43
  podMaxAds?: number;
43
44
  podMaxDurationMs?: number;
44
45
  podExactDuration?: boolean;
@@ -2852,6 +2852,7 @@ function toDevSafeUrl(rawUrl) {
2852
2852
  // src/sdk/pal.ts
2853
2853
  var PAL_SDK_URL = "https://imasdk.googleapis.com/pal/sdkloader/pal.js";
2854
2854
  var _nonceLoader;
2855
+ var _nonceLoaderAllowStorage;
2855
2856
  var _palLoadPromise;
2856
2857
  function loadPalSdk() {
2857
2858
  var _window_goog;
@@ -2894,12 +2895,15 @@ function loadPalSdk() {
2894
2895
  });
2895
2896
  return _palLoadPromise;
2896
2897
  }
2897
- function getOrCreateNonceLoader() {
2898
- if (_nonceLoader) return _nonceLoader;
2898
+ function getOrCreateNonceLoader(allowStorage) {
2899
+ if (_nonceLoader && _nonceLoaderAllowStorage === allowStorage) {
2900
+ return _nonceLoader;
2901
+ }
2899
2902
  var goog = window.goog;
2900
2903
  var consentSettings = new goog.pal.ConsentSettings();
2901
- consentSettings.allowStorage = true;
2904
+ consentSettings.allowStorage = allowStorage;
2902
2905
  _nonceLoader = new goog.pal.NonceLoader(consentSettings);
2906
+ _nonceLoaderAllowStorage = allowStorage;
2903
2907
  return _nonceLoader;
2904
2908
  }
2905
2909
  function createPalNonceManager() {
@@ -2908,7 +2912,7 @@ function createPalNonceManager() {
2908
2912
  return {
2909
2913
  generateNonce: function generateNonce() {
2910
2914
  return _async_to_generator(function() {
2911
- var options, _options_adWillAutoPlay, _options_adWillPlayMuted, _options_playerVolume, _options_continuousPlayback, loader, goog, request, manager, error;
2915
+ var options, _options_allowStorage, _options_adWillAutoPlay, _options_adWillPlayMuted, _options_playerVolume, _options_continuousPlayback, loader, goog, request, manager, error;
2912
2916
  var _arguments = arguments;
2913
2917
  return _ts_generator(this, function(_state) {
2914
2918
  switch(_state.label){
@@ -2928,7 +2932,7 @@ function createPalNonceManager() {
2928
2932
  ];
2929
2933
  case 2:
2930
2934
  _state.sent();
2931
- loader = getOrCreateNonceLoader();
2935
+ loader = getOrCreateNonceLoader((_options_allowStorage = options.allowStorage) !== null && _options_allowStorage !== void 0 ? _options_allowStorage : true);
2932
2936
  goog = window.goog;
2933
2937
  request = new goog.pal.NonceRequest();
2934
2938
  request.adWillAutoPlay = (_options_adWillAutoPlay = options.adWillAutoPlay) !== null && _options_adWillAutoPlay !== void 0 ? _options_adWillAutoPlay : true;
@@ -3113,6 +3117,8 @@ function ingestPlayerTracking(licenseKey, channel, body) {
3113
3117
  }
3114
3118
  // src/utils/vastEnvironmentSignals.ts
3115
3119
  var CTV_SESSION_STORAGE_KEY = "stormcloud.ctv.sid";
3120
+ var WEB_SESSION_STORAGE_KEY = "stormcloud.web.sid";
3121
+ var inMemoryWebSessionId;
3116
3122
  var PLAYER_ID_STORAGE_KEY = "stormcloud.player.id";
3117
3123
  var DEVICE_ID_STORAGE_KEYS = [
3118
3124
  "rdid",
@@ -3134,7 +3140,7 @@ function resolveVastEnvironmentSignals(isCtv) {
3134
3140
  var _ref;
3135
3141
  var bridgeSignals = readNativeBridgeSignals();
3136
3142
  var platformDevice = readPlatformNativeDeviceId();
3137
- var realDeviceId = bridgeSignals.deviceId || readStoredDeviceId() || platformDevice.deviceId;
3143
+ var realDeviceId = bridgeSignals.deviceId || (isCtv ? readStoredDeviceId() : void 0) || platformDevice.deviceId;
3138
3144
  var deviceId = realDeviceId;
3139
3145
  var deviceIdType = bridgeSignals.deviceIdType || readStoredString("deviceIdType") || readStoredString("idtype") || platformDevice.deviceIdType || inferDeviceIdType();
3140
3146
  var platformLat = bridgeSignals.deviceId ? bridgeSignals.limitAdTracking : platformDevice.limitAdTracking;
@@ -3163,9 +3169,12 @@ function resolveVastEnvironmentSignals(isCtv) {
3163
3169
  deviceTypeHint: deviceTypeHint
3164
3170
  });
3165
3171
  }
3172
+ var webSessionId = getOrCreateWebSessionId();
3166
3173
  return _object_spread_props(_object_spread({
3167
3174
  isCtv: false
3168
- }, deviceId ? {
3175
+ }, webSessionId ? {
3176
+ sessionId: webSessionId
3177
+ } : {}, deviceId ? {
3169
3178
  deviceId: deviceId
3170
3179
  } : {}, deviceId && deviceIdType ? {
3171
3180
  deviceIdType: deviceIdType
@@ -3206,7 +3215,7 @@ var GAME_CONSOLE_UA = /PlayStation|Xbox|Nintendo/i;
3206
3215
  var CONNECTED_TV_UA = /Web0S|webOS|Tizen|SMART-TV|SmartTV|NetCast|BRAVIA|HbbTV|VIDAA|Hisense|Philips|Viera|AQUOS|Android TV|Google TV|\bTV\b/i;
3207
3216
  var FEATURE_PHONE_UA = /KAIOS|MIDP|J2ME|Series40|Opera Mini/i;
3208
3217
  function resolveDeviceTypeHint(isCtv) {
3209
- var override = readDeviceTypeHintOverride();
3218
+ var override = readDeviceTypeHintOverride(isCtv);
3210
3219
  if (override != null) return override;
3211
3220
  return inferDeviceTypeHint(isCtv);
3212
3221
  }
@@ -3233,7 +3242,7 @@ function inferDeviceTypeHint(isCtv) {
3233
3242
  if (/Mobile|Windows Phone|BlackBerry/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;
3234
3243
  return fallback;
3235
3244
  }
3236
- function readDeviceTypeHintOverride() {
3245
+ function readDeviceTypeHintOverride(isCtv) {
3237
3246
  if (typeof window === "undefined") return void 0;
3238
3247
  var keys = [
3239
3248
  "dth",
@@ -3282,6 +3291,7 @@ function readDeviceTypeHintOverride() {
3282
3291
  }
3283
3292
  }
3284
3293
  }
3294
+ if (!isCtv) return void 0;
3285
3295
  for(var _i = 0, _iter = [
3286
3296
  "stormcloud.dth",
3287
3297
  "dth"
@@ -3330,9 +3340,10 @@ function isEquivalentDeviceIdType(tagType, runtimeType) {
3330
3340
  return ANDROID_ID_TYPES.has(tag) && ANDROID_ID_TYPES.has(runtime);
3331
3341
  }
3332
3342
  function resolveNativeDeviceId() {
3343
+ var includeStored = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
3333
3344
  var bridgeSignals = readNativeBridgeSignals();
3334
3345
  var platformDevice = readPlatformNativeDeviceId();
3335
- var deviceId = bridgeSignals.deviceId || readStoredDeviceId() || platformDevice.deviceId;
3346
+ var deviceId = bridgeSignals.deviceId || (includeStored ? readStoredDeviceId() : void 0) || platformDevice.deviceId;
3336
3347
  if (!deviceId || isMacroPlaceholder(deviceId) || isZeroedAdId(deviceId)) {
3337
3348
  return void 0;
3338
3349
  }
@@ -3361,6 +3372,21 @@ function getOrCreateCtvSessionId() {
3361
3372
  writePersistentId(CTV_SESSION_STORAGE_KEY, sessionId);
3362
3373
  return sessionId;
3363
3374
  }
3375
+ function getOrCreateWebSessionId() {
3376
+ if (typeof window === "undefined") return void 0;
3377
+ try {
3378
+ var _window_sessionStorage;
3379
+ var existing = (_window_sessionStorage = window.sessionStorage) === null || _window_sessionStorage === void 0 ? void 0 : _window_sessionStorage.getItem(WEB_SESSION_STORAGE_KEY);
3380
+ if (existing && !isMacroPlaceholder(existing)) return existing;
3381
+ } catch (unused) {}
3382
+ var sessionId = inMemoryWebSessionId || createUuid();
3383
+ inMemoryWebSessionId = sessionId;
3384
+ try {
3385
+ var _window_sessionStorage1;
3386
+ (_window_sessionStorage1 = window.sessionStorage) === null || _window_sessionStorage1 === void 0 ? void 0 : _window_sessionStorage1.setItem(WEB_SESSION_STORAGE_KEY, sessionId);
3387
+ } catch (unused) {}
3388
+ return sessionId;
3389
+ }
3364
3390
  function readPersistentId(storageKey) {
3365
3391
  return readStoredString(storageKey) || readCookie(storageKey);
3366
3392
  }
@@ -3962,7 +3988,7 @@ function sha256Hex(input) {
3962
3988
  })();
3963
3989
  }
3964
3990
  function resolvePlayerIdentitySeed(clientInfo) {
3965
- var nativeDeviceId = resolveNativeDeviceId();
3991
+ var nativeDeviceId = resolveNativeDeviceId(clientInfo.isSmartTV);
3966
3992
  if (nativeDeviceId) {
3967
3993
  return "device:".concat(nativeDeviceId);
3968
3994
  }
@@ -4731,6 +4757,12 @@ function applyDeviceIdentityParams(params, ctx) {
4731
4757
  params.set("is_lat", latValue !== null && latValue !== void 0 ? latValue : isMacroPlaceholder2(tagLat) ? "0" : tagLat);
4732
4758
  return;
4733
4759
  }
4760
+ if (!ctx.isCtv) {
4761
+ params.delete("rdid");
4762
+ params.delete("idtype");
4763
+ params.delete("is_lat");
4764
+ return;
4765
+ }
4734
4766
  var tagRdidValid = Boolean(tagRdid && !isMacroPlaceholder2(tagRdid));
4735
4767
  var tagTypeValid = Boolean(tagType && !isMacroPlaceholder2(tagType));
4736
4768
  if (tagRdidValid && tagTypeValid && runtimeType && !isEquivalentDeviceIdType(tagType, runtimeType)) {
@@ -4885,15 +4917,24 @@ function applyVastMacros(baseUrl, ctx) {
4885
4917
  if (ctx.podMaxAds != null) {
4886
4918
  params.set("pmad", String(Math.max(1, Math.round(ctx.podMaxAds))));
4887
4919
  }
4888
- if (!ctx.isCtv && ctx.pageUrl) {
4889
- params.set("url", ctx.pageUrl);
4890
- params.set("description_url", ctx.pageUrl);
4891
- }
4892
4920
  var existingUrl = params.get("url") || "";
4893
4921
  if (EXAMPLE_COM_URL.test(existingUrl)) {
4894
4922
  params.delete("url");
4895
4923
  params.delete("description_url");
4896
4924
  }
4925
+ if (!ctx.isCtv && ctx.pageUrl) {
4926
+ if (isMacroPlaceholder2(params.get("url"))) {
4927
+ params.set("url", ctx.pageUrl);
4928
+ }
4929
+ if (isMacroPlaceholder2(params.get("description_url"))) {
4930
+ params.set("description_url", params.get("url") || ctx.pageUrl);
4931
+ }
4932
+ }
4933
+ if (!ctx.isCtv) {
4934
+ params.delete("an");
4935
+ params.delete("msid");
4936
+ params.delete("sid");
4937
+ }
4897
4938
  if (ctx.adWillPlayMuted != null) {
4898
4939
  params.set("vpmute", ctx.adWillPlayMuted ? "1" : "0");
4899
4940
  }
@@ -4927,6 +4968,9 @@ function applyVastMacros(baseUrl, ctx) {
4927
4968
  if (ctx.programTitle) {
4928
4969
  params.set("ct_ti", ctx.programTitle);
4929
4970
  }
4971
+ if (ctx.channelName) {
4972
+ params.set("ct_ch", ctx.channelName);
4973
+ }
4930
4974
  var staleKeys = [];
4931
4975
  params.forEach(function(value, key) {
4932
4976
  if (isMacroPlaceholder2(value)) {
@@ -4979,8 +5023,10 @@ function fetchConsentSignals() {
4979
5023
  tcfApi("addEventListener", 2, function(tcData, success) {
4980
5024
  if (settled) return;
4981
5025
  if (success && tcData && (tcData.eventStatus === "tcloaded" || tcData.eventStatus === "useractioncomplete")) {
5026
+ var _tcData_purpose_consents, _tcData_purpose;
4982
5027
  settled = true;
4983
5028
  signals.gdpr = tcData.gdprApplies ? "1" : "0";
5029
+ signals.storageAllowed = tcData.gdprApplies ? ((_tcData_purpose = tcData.purpose) === null || _tcData_purpose === void 0 ? void 0 : (_tcData_purpose_consents = _tcData_purpose.consents) === null || _tcData_purpose_consents === void 0 ? void 0 : _tcData_purpose_consents[1]) === true : true;
4984
5030
  if (typeof tcData.tcString === "string" && tcData.tcString) {
4985
5031
  signals.gdprConsent = tcData.tcString;
4986
5032
  }
@@ -6513,7 +6559,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
6513
6559
  pageUrl: !envSignals.isCtv && typeof window !== "undefined" ? toDevSafeUrl(window.location.href) : void 0,
6514
6560
  adWillPlayMuted: adWillPlayMuted,
6515
6561
  adWillAutoPlay: !!this.config.autoplay,
6516
- sessionId: envSignals.sessionId,
6562
+ sessionId: envSignals.isCtv || this.consentSignals.storageAllowed !== false ? envSignals.sessionId : void 0,
6517
6563
  deviceId: envSignals.deviceId,
6518
6564
  deviceIdType: envSignals.deviceIdType,
6519
6565
  limitAdTracking: envSignals.limitAdTracking,
@@ -6521,6 +6567,8 @@ var AdConfigManager = /*#__PURE__*/ function() {
6521
6567
  adTest: this.config.adTest
6522
6568
  }, this.config.programTitle ? {
6523
6569
  programTitle: this.config.programTitle
6570
+ } : {}, this.config.channelName ? {
6571
+ channelName: this.config.channelName
6524
6572
  } : {}), {
6525
6573
  consent: this.consentSignals
6526
6574
  }));
@@ -9641,7 +9689,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
9641
9689
  // ───────────────────────────────────────────────────────────────
9642
9690
  function load() {
9643
9691
  return _async_to_generator(function() {
9644
- var _this, _this_config_lowLatencyMode, error, palDescriptionUrl, continueLiveStreamDuringAds;
9692
+ var _this, error, palDescriptionUrl, continueLiveStreamDuringAds;
9645
9693
  return _ts_generator(this, function(_state) {
9646
9694
  switch(_state.label){
9647
9695
  case 0:
@@ -9677,19 +9725,25 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
9677
9725
  4
9678
9726
  ];
9679
9727
  case 4:
9680
- palDescriptionUrl = this.adConfig.getPalDescriptionUrl();
9681
- this.palNonce.generateNonce(_object_spread({
9682
- videoWidth: this.video.offsetWidth || this.video.clientWidth || 640,
9683
- videoHeight: this.video.offsetHeight || this.video.clientHeight || 480,
9684
- adWillAutoPlay: !!this.config.autoplay,
9685
- adWillPlayMuted: true,
9686
- playerVolume: 0,
9687
- continuousPlayback: (_this_config_lowLatencyMode = this.config.lowLatencyMode) !== null && _this_config_lowLatencyMode !== void 0 ? _this_config_lowLatencyMode : false
9688
- }, palDescriptionUrl ? {
9689
- descriptionUrl: palDescriptionUrl
9690
- } : {})).catch(function() {});
9691
- fetchConsentSignals().then(function(signals) {
9728
+ palDescriptionUrl = this.config.ctvAdRequest ? this.adConfig.getPalDescriptionUrl() : void 0;
9729
+ fetchConsentSignals().catch(function() {
9730
+ return {};
9731
+ }).then(function(signals) {
9732
+ var _this_config_lowLatencyMode;
9692
9733
  _this.adConfig.consentSignals = signals;
9734
+ var muted = _this.video.muted;
9735
+ return _this.palNonce.generateNonce(_object_spread({
9736
+ videoWidth: _this.video.offsetWidth || _this.video.clientWidth || 640,
9737
+ videoHeight: _this.video.offsetHeight || _this.video.clientHeight || 480,
9738
+ adWillAutoPlay: !!_this.config.autoplay,
9739
+ adWillPlayMuted: muted,
9740
+ playerVolume: muted ? 0 : _this.video.volume,
9741
+ continuousPlayback: (_this_config_lowLatencyMode = _this.config.lowLatencyMode) !== null && _this_config_lowLatencyMode !== void 0 ? _this_config_lowLatencyMode : false
9742
+ }, palDescriptionUrl ? {
9743
+ descriptionUrl: palDescriptionUrl
9744
+ } : {}, signals.storageAllowed != null ? {
9745
+ allowStorage: signals.storageAllowed
9746
+ } : {}));
9693
9747
  }).catch(function() {});
9694
9748
  this.adConfig.initializeTracking();
9695
9749
  if (!this.hlsEngine.shouldUseNativeHls(function() {
@@ -10411,7 +10465,7 @@ var CRITICAL_PROPS = [
10411
10465
  var CONTROLS_HIDE_DELAY = 3e3;
10412
10466
  var DEFAULT_PLAYER_ASPECT_RATIO = 16 / 9;
10413
10467
  var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
10414
- var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, isLiveStream = props.isLiveStream, driftToleranceMs = props.driftToleranceMs, immediateManifestAds = props.immediateManifestAds, debugAdTiming = props.debugAdTiming, showCustomControls = props.showCustomControls, hideLoadingIndicator = props.hideLoadingIndicator, onVolumeToggle = props.onVolumeToggle, onFullscreenToggle = props.onFullscreenToggle, onControlClick = props.onControlClick, onReady = props.onReady, wrapperClassName = props.wrapperClassName, wrapperStyle = props.wrapperStyle, className = props.className, style = props.style, controls = props.controls, playsInline = props.playsInline, preload = props.preload, poster = props.poster, children = props.children, licenseKey = props.licenseKey, vastMode = props.vastMode, vastTagUrl = props.vastTagUrl, isVmap = props.isVmap, vmapUrl = props.vmapUrl, minSegmentsBeforePlay = props.minSegmentsBeforePlay, ctvAdRequest = props.ctvAdRequest, programTitle = props.programTitle, restVideoAttrs = _object_without_properties(props, [
10468
+ var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, isLiveStream = props.isLiveStream, driftToleranceMs = props.driftToleranceMs, immediateManifestAds = props.immediateManifestAds, debugAdTiming = props.debugAdTiming, showCustomControls = props.showCustomControls, hideLoadingIndicator = props.hideLoadingIndicator, onVolumeToggle = props.onVolumeToggle, onFullscreenToggle = props.onFullscreenToggle, onControlClick = props.onControlClick, onReady = props.onReady, wrapperClassName = props.wrapperClassName, wrapperStyle = props.wrapperStyle, className = props.className, style = props.style, controls = props.controls, playsInline = props.playsInline, preload = props.preload, poster = props.poster, children = props.children, licenseKey = props.licenseKey, vastMode = props.vastMode, vastTagUrl = props.vastTagUrl, isVmap = props.isVmap, vmapUrl = props.vmapUrl, minSegmentsBeforePlay = props.minSegmentsBeforePlay, ctvAdRequest = props.ctvAdRequest, programTitle = props.programTitle, channelName = props.channelName, restVideoAttrs = _object_without_properties(props, [
10415
10469
  "src",
10416
10470
  "autoplay",
10417
10471
  "muted",
@@ -10443,7 +10497,8 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
10443
10497
  "vmapUrl",
10444
10498
  "minSegmentsBeforePlay",
10445
10499
  "ctvAdRequest",
10446
- "programTitle"
10500
+ "programTitle",
10501
+ "channelName"
10447
10502
  ]);
10448
10503
  var videoRef = (0, import_react.useRef)(null);
10449
10504
  var playerRef = (0, import_react.useRef)(null);
@@ -10635,6 +10690,7 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
10635
10690
  if (minSegmentsBeforePlay !== void 0) cfg.minSegmentsBeforePlay = minSegmentsBeforePlay;
10636
10691
  if (ctvAdRequest !== void 0) cfg.ctvAdRequest = ctvAdRequest;
10637
10692
  if (programTitle !== void 0) cfg.programTitle = programTitle;
10693
+ if (channelName !== void 0) cfg.channelName = channelName;
10638
10694
  var player = new StormcloudVideoPlayer(cfg);
10639
10695
  playerRef.current = player;
10640
10696
  player.load().then(function() {