stormcloud-video-player 0.8.60 → 0.8.61
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/Player.cjs.map +1 -1
- package/lib/StormcloudPlayer.cjs +83 -29
- package/lib/StormcloudPlayer.cjs.map +1 -1
- package/lib/index.cjs +87 -31
- package/lib/index.cjs.map +1 -1
- package/lib/patterns.cjs.map +1 -1
- package/lib/player/AdBreakOrchestrator.cjs +3 -2
- package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
- package/lib/player/AdConfigManager.cjs +53 -11
- package/lib/player/AdConfigManager.cjs.map +1 -1
- package/lib/player/AdTimingService.cjs.map +1 -1
- package/lib/player/HlsEngine.cjs.map +1 -1
- package/lib/player/PlaceholderLayer.cjs.map +1 -1
- package/lib/player/PlayerControls.cjs.map +1 -1
- package/lib/player/Scte35CueManager.cjs.map +1 -1
- package/lib/player/Scte35Parser.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +83 -29
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/playerTypes.cjs.map +1 -1
- package/lib/players/FilePlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.cjs +83 -29
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/index.cjs +83 -29
- package/lib/players/index.cjs.map +1 -1
- package/lib/props.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
- package/lib/sdk/pal.cjs +9 -5
- package/lib/sdk/pal.cjs.map +1 -1
- package/lib/sdk/pal.d.cts +1 -0
- package/lib/types.cjs.map +1 -1
- package/lib/types.d.cts +1 -0
- package/lib/ui/StormcloudVideoPlayer.cjs +87 -31
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/utils/browserCompat.cjs.map +1 -1
- package/lib/utils/ctvVastSignals.cjs +25 -4
- package/lib/utils/ctvVastSignals.cjs.map +1 -1
- package/lib/utils/devUrl.cjs.map +1 -1
- package/lib/utils/polyfills.cjs.map +1 -1
- package/lib/utils/tracking.cjs +3 -2
- package/lib/utils/tracking.cjs.map +1 -1
- package/lib/utils/trackingIngest.cjs.map +1 -1
- package/lib/utils/vastEnvironmentSignals.cjs +27 -5
- package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
- package/lib/utils/vastEnvironmentSignals.d.cts +1 -1
- package/lib/utils/vastMacros.cjs +24 -4
- package/lib/utils/vastMacros.cjs.map +1 -1
- package/lib/utils/vastMacros.d.cts +2 -0
- package/lib/utils/vastTrackingMacros.cjs.map +1 -1
- package/lib/utils.cjs.map +1 -1
- package/package.json +1 -1
package/lib/Player.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\Player.cjs"],"names":[],"mappings":"AAAA","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\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 __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/Player.tsx\nvar Player_exports = {};\n__export(Player_exports, {\n default: () => Player\n});\nmodule.exports = __toCommonJS(Player_exports);\nvar import_react2 = __toESM(require(\"react\"), 1);\n\n// src/sdk/hlsAdPlayer.ts\nvar import_hls = __toESM(require(\"hls.js\"), 1);\n\n// src/utils/trackingIngest.ts\nvar DEFAULT_TRACKING_INGEST_CONFIG = {\n enabled: true,\n baseUrl: \"https://player-analytics-ingest-api-760490581852.us-central1.run.app/api/adstorm/player-tracking\"\n};\nvar trackingIngestConfig = {\n ...DEFAULT_TRACKING_INGEST_CONFIG\n};\n\n// src/utils/vastEnvironmentSignals.ts\nvar DEVICE_TYPE_HINT = {\n FEATURE_PHONE: 1,\n SMARTPHONE: 2,\n DESKTOP: 3,\n TABLET: 4,\n CONNECTED_TV: 5,\n GAME_CONSOLE: 6,\n SET_TOP_BOX: 7\n};\nvar DEVICE_TYPE_HINT_ALIASES = {\n featurephone: DEVICE_TYPE_HINT.FEATURE_PHONE,\n smartphone: DEVICE_TYPE_HINT.SMARTPHONE,\n mobile: DEVICE_TYPE_HINT.SMARTPHONE,\n phone: DEVICE_TYPE_HINT.SMARTPHONE,\n desktop: DEVICE_TYPE_HINT.DESKTOP,\n pc: DEVICE_TYPE_HINT.DESKTOP,\n tablet: DEVICE_TYPE_HINT.TABLET,\n ctv: DEVICE_TYPE_HINT.CONNECTED_TV,\n tv: DEVICE_TYPE_HINT.CONNECTED_TV,\n connectedtv: DEVICE_TYPE_HINT.CONNECTED_TV,\n smarttv: DEVICE_TYPE_HINT.CONNECTED_TV,\n console: DEVICE_TYPE_HINT.GAME_CONSOLE,\n gameconsole: DEVICE_TYPE_HINT.GAME_CONSOLE,\n stb: DEVICE_TYPE_HINT.SET_TOP_BOX,\n settopbox: DEVICE_TYPE_HINT.SET_TOP_BOX\n};\nvar PERSISTENT_ID_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5;\n\n// src/player/HlsEngine.ts\nvar import_hls2 = __toESM(require(\"hls.js\"), 1);\n\n// src/props.ts\nvar noop = () => {\n};\nvar defaultProps = {\n playing: false,\n loop: false,\n controls: true,\n volume: 1,\n muted: false,\n playbackRate: 1,\n width: \"100%\",\n height: \"auto\",\n style: {},\n progressInterval: 1e3,\n playsInline: false,\n autoplay: false,\n preload: \"metadata\",\n poster: \"\",\n className: \"\",\n wrapperClassName: \"\",\n wrapperStyle: {},\n allowNativeHls: false,\n lowLatencyMode: false,\n driftToleranceMs: 1e3,\n immediateManifestAds: true,\n debugAdTiming: false,\n showCustomControls: false,\n hideLoadingIndicator: false,\n licenseKey: \"\",\n isVmap: false,\n vmapUrl: \"\",\n adFailsafeTimeoutMs: 1e4,\n minSegmentsBeforePlay: 2,\n onStart: noop,\n onPlay: noop,\n onPause: noop,\n onBuffer: noop,\n onBufferEnd: noop,\n onEnded: noop,\n onError: noop,\n onDuration: noop,\n onSeek: noop,\n onProgress: noop,\n onVolumeToggle: noop,\n onFullscreenToggle: noop,\n onControlClick: noop\n};\n\n// src/utils.ts\nvar import_react = require(\"react\");\nvar isMediaStream = (url) => {\n return typeof window !== \"undefined\" && window.MediaStream && url instanceof window.MediaStream;\n};\nvar IS_BROWSER = typeof window !== \"undefined\" && window.document;\nvar IS_GLOBAL = typeof globalThis !== \"undefined\" && globalThis.window && globalThis.window.document;\nvar IS_IOS = IS_BROWSER && /iPad|iPhone|iPod/.test(navigator.userAgent);\nvar IS_SAFARI = IS_BROWSER && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n// src/Player.tsx\nvar SEEK_ON_PLAY_EXPIRY = 5e3;\nvar Player = class extends import_react2.Component {\n constructor() {\n super(...arguments);\n this.mounted = false;\n this.isReady = false;\n this.isPlaying = false;\n this.isLoading = true;\n this.loadOnReady = null;\n this.startOnPlay = true;\n this.seekOnPlay = null;\n this.onDurationCalled = false;\n this.handlePlayerMount = (player) => {\n if (this.player) {\n this.progress();\n return;\n }\n this.player = player;\n this.player.load(this.props.src);\n this.progress();\n };\n this.getInternalPlayer = (key) => {\n if (!this.player) return null;\n return this.player.getInternalPlayer(key);\n };\n this.progress = () => {\n if (this.props.src && this.player && this.isReady) {\n const playedSeconds = this.getCurrentTime() || 0;\n const loadedSeconds = this.getSecondsLoaded();\n const duration = this.getDuration();\n if (duration) {\n const progress = {\n playedSeconds,\n played: playedSeconds / duration,\n loaded: 0,\n loadedSeconds: 0\n };\n if (loadedSeconds !== null) {\n progress.loadedSeconds = loadedSeconds;\n progress.loaded = loadedSeconds / duration;\n }\n if (progress.playedSeconds !== this.prevPlayed || progress.loadedSeconds !== this.prevLoaded) {\n this.props.onProgress?.(progress);\n }\n this.prevPlayed = progress.playedSeconds;\n this.prevLoaded = progress.loadedSeconds;\n }\n }\n this.progressTimeout = window.setTimeout(\n this.progress,\n this.props.progressInterval || 1e3\n );\n };\n this.handleReady = () => {\n if (!this.mounted) return;\n this.isReady = true;\n this.isLoading = false;\n const { onReady, playing, volume, muted } = this.props;\n onReady();\n if (!muted && volume !== null) {\n this.player.setVolume(volume);\n }\n if (this.loadOnReady) {\n this.player.load(this.loadOnReady, true);\n this.loadOnReady = null;\n } else if (playing) {\n this.player.play();\n }\n this.handleDurationCheck();\n };\n this.handlePlay = () => {\n this.isPlaying = true;\n this.isLoading = false;\n const { onStart, onPlay, playbackRate } = this.props;\n if (this.startOnPlay) {\n if (this.player.setPlaybackRate && playbackRate !== 1) {\n this.player.setPlaybackRate(playbackRate);\n }\n onStart?.();\n this.startOnPlay = false;\n }\n onPlay?.();\n if (this.seekOnPlay) {\n this.seekTo(this.seekOnPlay);\n this.seekOnPlay = null;\n }\n this.handleDurationCheck();\n };\n this.handlePause = (e) => {\n this.isPlaying = false;\n if (!this.isLoading) {\n this.props.onPause?.(e);\n }\n };\n this.handleEnded = () => {\n const { activePlayer, loop, onEnded } = this.props;\n if (activePlayer.loopOnEnded && loop) {\n this.seekTo(0);\n }\n if (!loop) {\n this.isPlaying = false;\n onEnded?.();\n }\n };\n this.handleError = (...args) => {\n this.isLoading = false;\n this.props.onError?.(args[0], args[1], args[2], args[3]);\n };\n this.handleDurationCheck = () => {\n clearTimeout(this.durationCheckTimeout);\n const duration = this.getDuration();\n if (duration) {\n if (!this.onDurationCalled) {\n this.props.onDuration?.(duration);\n this.onDurationCalled = true;\n }\n } else {\n this.durationCheckTimeout = window.setTimeout(\n this.handleDurationCheck,\n 100\n );\n }\n };\n this.handleLoaded = () => {\n this.isLoading = false;\n };\n }\n componentDidMount() {\n this.mounted = true;\n }\n componentWillUnmount() {\n clearTimeout(this.progressTimeout);\n clearTimeout(this.durationCheckTimeout);\n this.mounted = false;\n }\n componentDidUpdate(prevProps) {\n if (!this.player) return;\n const { src, playing, volume, muted, playbackRate, loop, activePlayer } = this.props;\n if (prevProps.src !== src) {\n if (this.isLoading && !activePlayer.forceLoad && !isMediaStream(src)) {\n console.warn(\n `StormcloudPlayer: the attempt to load ${src} is being deferred until the player has loaded`\n );\n this.loadOnReady = src || null;\n return;\n }\n this.isLoading = true;\n this.startOnPlay = true;\n this.onDurationCalled = false;\n this.player.load(src, this.isReady);\n }\n if (!prevProps.playing && playing && !this.isPlaying) {\n this.player.play();\n }\n if (prevProps.playing && !playing && this.isPlaying) {\n this.player.pause();\n }\n if (prevProps.volume !== volume && volume !== null) {\n this.player.setVolume(volume);\n }\n if (prevProps.muted !== muted) {\n if (muted) {\n this.player.mute();\n } else {\n this.player.unmute();\n if (volume !== null) {\n setTimeout(() => this.player.setVolume(volume));\n }\n }\n }\n if (prevProps.playbackRate !== playbackRate && this.player.setPlaybackRate) {\n this.player.setPlaybackRate(playbackRate);\n }\n if (prevProps.loop !== loop && this.player.setLoop) {\n this.player.setLoop(loop);\n }\n }\n getDuration() {\n if (!this.isReady) return null;\n return this.player.getDuration();\n }\n getCurrentTime() {\n if (!this.isReady) return null;\n return this.player.getCurrentTime();\n }\n getSecondsLoaded() {\n if (!this.isReady) return null;\n return this.player.getSecondsLoaded();\n }\n seekTo(amount, type, keepPlaying) {\n if (!this.isReady) {\n if (amount !== 0) {\n this.seekOnPlay = amount;\n setTimeout(() => {\n this.seekOnPlay = null;\n }, SEEK_ON_PLAY_EXPIRY);\n }\n return;\n }\n const isFraction = !type ? amount > 0 && amount < 1 : type === \"fraction\";\n if (isFraction) {\n const duration = this.player.getDuration();\n if (!duration) {\n console.warn(\n \"StormcloudPlayer: could not seek using fraction \\u2013 duration not yet available\"\n );\n return;\n }\n this.player.seekTo(duration * amount, keepPlaying);\n return;\n }\n this.player.seekTo(amount, keepPlaying);\n }\n render() {\n const Player2 = this.props.activePlayer;\n if (!Player2) {\n return null;\n }\n return import_react2.default.createElement(Player2, {\n ...this.props,\n onMount: this.handlePlayerMount,\n onReady: this.handleReady,\n onPlay: this.handlePlay,\n onPause: this.handlePause,\n onEnded: this.handleEnded,\n onLoaded: this.handleLoaded,\n onError: this.handleError\n });\n }\n};\nPlayer.displayName = \"Player\";\nPlayer.defaultProps = defaultProps;\n"]}
|
|
1
|
+
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\Player.cjs"],"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","Player_exports","default","Player","module","exports","import_react2","require","import_hls","DEFAULT_TRACKING_INGEST_CONFIG","enabled","baseUrl","trackingIngestConfig","DEVICE_TYPE_HINT","FEATURE_PHONE","SMARTPHONE","DESKTOP","TABLET","CONNECTED_TV","GAME_CONSOLE","SET_TOP_BOX","DEVICE_TYPE_HINT_ALIASES","featurephone","smartphone","mobile","phone","desktop","pc","tablet","ctv","tv","connectedtv","smarttv","console","gameconsole","stb","settopbox","PERSISTENT_ID_COOKIE_MAX_AGE","import_hls2","noop","defaultProps","playing","loop","controls","volume","muted","playbackRate","width","height","style","progressInterval","playsInline","autoplay","preload","poster","className","wrapperClassName","wrapperStyle","allowNativeHls","lowLatencyMode","driftToleranceMs","immediateManifestAds","debugAdTiming","showCustomControls","hideLoadingIndicator","licenseKey","isVmap","vmapUrl","adFailsafeTimeoutMs","minSegmentsBeforePlay","onStart","onPlay","onPause","onBuffer","onBufferEnd","onEnded","onError","onDuration","onSeek","onProgress","onVolumeToggle","onFullscreenToggle","onControlClick","import_react","isMediaStream","url","window","MediaStream","IS_BROWSER","document","IS_GLOBAL","globalThis","IS_IOS","test","navigator","userAgent","IS_SAFARI","SEEK_ON_PLAY_EXPIRY","arguments","mounted","isReady","isPlaying","isLoading","loadOnReady","startOnPlay","seekOnPlay","onDurationCalled","handlePlayerMount","player","progress","load","props","src","getInternalPlayer","playedSeconds","getCurrentTime","loadedSeconds","getSecondsLoaded","duration","getDuration","played","loaded","prevPlayed","prevLoaded","progressTimeout","setTimeout","handleReady","onReady","setVolume","play","handleDurationCheck","handlePlay","setPlaybackRate","seekTo","handlePause","e","handleEnded","activePlayer","loopOnEnded","handleError","args","clearTimeout","durationCheckTimeout","handleLoaded","componentDidMount","componentWillUnmount","componentDidUpdate","prevProps","forceLoad","warn","pause","mute","unmute","setLoop","amount","type","keepPlaying","isFraction","render","Player2","createElement","onMount","onLoaded","Component","displayName"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\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 __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/Player.tsx\nvar Player_exports = {};\n__export(Player_exports, {\n default: () => Player\n});\nmodule.exports = __toCommonJS(Player_exports);\nvar import_react2 = __toESM(require(\"react\"), 1);\n\n// src/sdk/hlsAdPlayer.ts\nvar import_hls = __toESM(require(\"hls.js\"), 1);\n\n// src/utils/trackingIngest.ts\nvar DEFAULT_TRACKING_INGEST_CONFIG = {\n enabled: true,\n baseUrl: \"https://player-analytics-ingest-api-760490581852.us-central1.run.app/api/adstorm/player-tracking\"\n};\nvar trackingIngestConfig = {\n ...DEFAULT_TRACKING_INGEST_CONFIG\n};\n\n// src/utils/vastEnvironmentSignals.ts\nvar DEVICE_TYPE_HINT = {\n FEATURE_PHONE: 1,\n SMARTPHONE: 2,\n DESKTOP: 3,\n TABLET: 4,\n CONNECTED_TV: 5,\n GAME_CONSOLE: 6,\n SET_TOP_BOX: 7\n};\nvar DEVICE_TYPE_HINT_ALIASES = {\n featurephone: DEVICE_TYPE_HINT.FEATURE_PHONE,\n smartphone: DEVICE_TYPE_HINT.SMARTPHONE,\n mobile: DEVICE_TYPE_HINT.SMARTPHONE,\n phone: DEVICE_TYPE_HINT.SMARTPHONE,\n desktop: DEVICE_TYPE_HINT.DESKTOP,\n pc: DEVICE_TYPE_HINT.DESKTOP,\n tablet: DEVICE_TYPE_HINT.TABLET,\n ctv: DEVICE_TYPE_HINT.CONNECTED_TV,\n tv: DEVICE_TYPE_HINT.CONNECTED_TV,\n connectedtv: DEVICE_TYPE_HINT.CONNECTED_TV,\n smarttv: DEVICE_TYPE_HINT.CONNECTED_TV,\n console: DEVICE_TYPE_HINT.GAME_CONSOLE,\n gameconsole: DEVICE_TYPE_HINT.GAME_CONSOLE,\n stb: DEVICE_TYPE_HINT.SET_TOP_BOX,\n settopbox: DEVICE_TYPE_HINT.SET_TOP_BOX\n};\nvar PERSISTENT_ID_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5;\n\n// src/player/HlsEngine.ts\nvar import_hls2 = __toESM(require(\"hls.js\"), 1);\n\n// src/props.ts\nvar noop = () => {\n};\nvar defaultProps = {\n playing: false,\n loop: false,\n controls: true,\n volume: 1,\n muted: false,\n playbackRate: 1,\n width: \"100%\",\n height: \"auto\",\n style: {},\n progressInterval: 1e3,\n playsInline: false,\n autoplay: false,\n preload: \"metadata\",\n poster: \"\",\n className: \"\",\n wrapperClassName: \"\",\n wrapperStyle: {},\n allowNativeHls: false,\n lowLatencyMode: false,\n driftToleranceMs: 1e3,\n immediateManifestAds: true,\n debugAdTiming: false,\n showCustomControls: false,\n hideLoadingIndicator: false,\n licenseKey: \"\",\n isVmap: false,\n vmapUrl: \"\",\n adFailsafeTimeoutMs: 1e4,\n minSegmentsBeforePlay: 2,\n onStart: noop,\n onPlay: noop,\n onPause: noop,\n onBuffer: noop,\n onBufferEnd: noop,\n onEnded: noop,\n onError: noop,\n onDuration: noop,\n onSeek: noop,\n onProgress: noop,\n onVolumeToggle: noop,\n onFullscreenToggle: noop,\n onControlClick: noop\n};\n\n// src/utils.ts\nvar import_react = require(\"react\");\nvar isMediaStream = (url) => {\n return typeof window !== \"undefined\" && window.MediaStream && url instanceof window.MediaStream;\n};\nvar IS_BROWSER = typeof window !== \"undefined\" && window.document;\nvar IS_GLOBAL = typeof globalThis !== \"undefined\" && globalThis.window && globalThis.window.document;\nvar IS_IOS = IS_BROWSER && /iPad|iPhone|iPod/.test(navigator.userAgent);\nvar IS_SAFARI = IS_BROWSER && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n// src/Player.tsx\nvar SEEK_ON_PLAY_EXPIRY = 5e3;\nvar Player = class extends import_react2.Component {\n constructor() {\n super(...arguments);\n this.mounted = false;\n this.isReady = false;\n this.isPlaying = false;\n this.isLoading = true;\n this.loadOnReady = null;\n this.startOnPlay = true;\n this.seekOnPlay = null;\n this.onDurationCalled = false;\n this.handlePlayerMount = (player) => {\n if (this.player) {\n this.progress();\n return;\n }\n this.player = player;\n this.player.load(this.props.src);\n this.progress();\n };\n this.getInternalPlayer = (key) => {\n if (!this.player) return null;\n return this.player.getInternalPlayer(key);\n };\n this.progress = () => {\n if (this.props.src && this.player && this.isReady) {\n const playedSeconds = this.getCurrentTime() || 0;\n const loadedSeconds = this.getSecondsLoaded();\n const duration = this.getDuration();\n if (duration) {\n const progress = {\n playedSeconds,\n played: playedSeconds / duration,\n loaded: 0,\n loadedSeconds: 0\n };\n if (loadedSeconds !== null) {\n progress.loadedSeconds = loadedSeconds;\n progress.loaded = loadedSeconds / duration;\n }\n if (progress.playedSeconds !== this.prevPlayed || progress.loadedSeconds !== this.prevLoaded) {\n this.props.onProgress?.(progress);\n }\n this.prevPlayed = progress.playedSeconds;\n this.prevLoaded = progress.loadedSeconds;\n }\n }\n this.progressTimeout = window.setTimeout(\n this.progress,\n this.props.progressInterval || 1e3\n );\n };\n this.handleReady = () => {\n if (!this.mounted) return;\n this.isReady = true;\n this.isLoading = false;\n const { onReady, playing, volume, muted } = this.props;\n onReady();\n if (!muted && volume !== null) {\n this.player.setVolume(volume);\n }\n if (this.loadOnReady) {\n this.player.load(this.loadOnReady, true);\n this.loadOnReady = null;\n } else if (playing) {\n this.player.play();\n }\n this.handleDurationCheck();\n };\n this.handlePlay = () => {\n this.isPlaying = true;\n this.isLoading = false;\n const { onStart, onPlay, playbackRate } = this.props;\n if (this.startOnPlay) {\n if (this.player.setPlaybackRate && playbackRate !== 1) {\n this.player.setPlaybackRate(playbackRate);\n }\n onStart?.();\n this.startOnPlay = false;\n }\n onPlay?.();\n if (this.seekOnPlay) {\n this.seekTo(this.seekOnPlay);\n this.seekOnPlay = null;\n }\n this.handleDurationCheck();\n };\n this.handlePause = (e) => {\n this.isPlaying = false;\n if (!this.isLoading) {\n this.props.onPause?.(e);\n }\n };\n this.handleEnded = () => {\n const { activePlayer, loop, onEnded } = this.props;\n if (activePlayer.loopOnEnded && loop) {\n this.seekTo(0);\n }\n if (!loop) {\n this.isPlaying = false;\n onEnded?.();\n }\n };\n this.handleError = (...args) => {\n this.isLoading = false;\n this.props.onError?.(args[0], args[1], args[2], args[3]);\n };\n this.handleDurationCheck = () => {\n clearTimeout(this.durationCheckTimeout);\n const duration = this.getDuration();\n if (duration) {\n if (!this.onDurationCalled) {\n this.props.onDuration?.(duration);\n this.onDurationCalled = true;\n }\n } else {\n this.durationCheckTimeout = window.setTimeout(\n this.handleDurationCheck,\n 100\n );\n }\n };\n this.handleLoaded = () => {\n this.isLoading = false;\n };\n }\n componentDidMount() {\n this.mounted = true;\n }\n componentWillUnmount() {\n clearTimeout(this.progressTimeout);\n clearTimeout(this.durationCheckTimeout);\n this.mounted = false;\n }\n componentDidUpdate(prevProps) {\n if (!this.player) return;\n const { src, playing, volume, muted, playbackRate, loop, activePlayer } = this.props;\n if (prevProps.src !== src) {\n if (this.isLoading && !activePlayer.forceLoad && !isMediaStream(src)) {\n console.warn(\n `StormcloudPlayer: the attempt to load ${src} is being deferred until the player has loaded`\n );\n this.loadOnReady = src || null;\n return;\n }\n this.isLoading = true;\n this.startOnPlay = true;\n this.onDurationCalled = false;\n this.player.load(src, this.isReady);\n }\n if (!prevProps.playing && playing && !this.isPlaying) {\n this.player.play();\n }\n if (prevProps.playing && !playing && this.isPlaying) {\n this.player.pause();\n }\n if (prevProps.volume !== volume && volume !== null) {\n this.player.setVolume(volume);\n }\n if (prevProps.muted !== muted) {\n if (muted) {\n this.player.mute();\n } else {\n this.player.unmute();\n if (volume !== null) {\n setTimeout(() => this.player.setVolume(volume));\n }\n }\n }\n if (prevProps.playbackRate !== playbackRate && this.player.setPlaybackRate) {\n this.player.setPlaybackRate(playbackRate);\n }\n if (prevProps.loop !== loop && this.player.setLoop) {\n this.player.setLoop(loop);\n }\n }\n getDuration() {\n if (!this.isReady) return null;\n return this.player.getDuration();\n }\n getCurrentTime() {\n if (!this.isReady) return null;\n return this.player.getCurrentTime();\n }\n getSecondsLoaded() {\n if (!this.isReady) return null;\n return this.player.getSecondsLoaded();\n }\n seekTo(amount, type, keepPlaying) {\n if (!this.isReady) {\n if (amount !== 0) {\n this.seekOnPlay = amount;\n setTimeout(() => {\n this.seekOnPlay = null;\n }, SEEK_ON_PLAY_EXPIRY);\n }\n return;\n }\n const isFraction = !type ? amount > 0 && amount < 1 : type === \"fraction\";\n if (isFraction) {\n const duration = this.player.getDuration();\n if (!duration) {\n console.warn(\n \"StormcloudPlayer: could not seek using fraction \\u2013 duration not yet available\"\n );\n return;\n }\n this.player.seekTo(duration * amount, keepPlaying);\n return;\n }\n this.player.seekTo(amount, keepPlaying);\n }\n render() {\n const Player2 = this.props.activePlayer;\n if (!Player2) {\n return null;\n }\n return import_react2.default.createElement(Player2, {\n ...this.props,\n onMount: this.handlePlayerMount,\n onReady: this.handleReady,\n onPlay: this.handlePlay,\n onPause: this.handlePause,\n onEnded: this.handleEnded,\n onLoaded: this.handleLoaded,\n onError: this.handleError\n });\n }\n};\nPlayer.displayName = \"Player\";\nPlayer.defaultProps = defaultProps;\n"]}
|
package/lib/StormcloudPlayer.cjs
CHANGED
|
@@ -2865,6 +2865,7 @@ function toDevSafeUrl(rawUrl) {
|
|
|
2865
2865
|
// src/sdk/pal.ts
|
|
2866
2866
|
var PAL_SDK_URL = "https://imasdk.googleapis.com/pal/sdkloader/pal.js";
|
|
2867
2867
|
var _nonceLoader;
|
|
2868
|
+
var _nonceLoaderAllowStorage;
|
|
2868
2869
|
var _palLoadPromise;
|
|
2869
2870
|
function loadPalSdk() {
|
|
2870
2871
|
var _window_goog;
|
|
@@ -2907,12 +2908,15 @@ function loadPalSdk() {
|
|
|
2907
2908
|
});
|
|
2908
2909
|
return _palLoadPromise;
|
|
2909
2910
|
}
|
|
2910
|
-
function getOrCreateNonceLoader() {
|
|
2911
|
-
if (_nonceLoader)
|
|
2911
|
+
function getOrCreateNonceLoader(allowStorage) {
|
|
2912
|
+
if (_nonceLoader && _nonceLoaderAllowStorage === allowStorage) {
|
|
2913
|
+
return _nonceLoader;
|
|
2914
|
+
}
|
|
2912
2915
|
var goog = window.goog;
|
|
2913
2916
|
var consentSettings = new goog.pal.ConsentSettings();
|
|
2914
|
-
consentSettings.allowStorage =
|
|
2917
|
+
consentSettings.allowStorage = allowStorage;
|
|
2915
2918
|
_nonceLoader = new goog.pal.NonceLoader(consentSettings);
|
|
2919
|
+
_nonceLoaderAllowStorage = allowStorage;
|
|
2916
2920
|
return _nonceLoader;
|
|
2917
2921
|
}
|
|
2918
2922
|
function createPalNonceManager() {
|
|
@@ -2921,7 +2925,7 @@ function createPalNonceManager() {
|
|
|
2921
2925
|
return {
|
|
2922
2926
|
generateNonce: function generateNonce() {
|
|
2923
2927
|
return _async_to_generator(function() {
|
|
2924
|
-
var options, _options_adWillAutoPlay, _options_adWillPlayMuted, _options_playerVolume, _options_continuousPlayback, loader, goog, request, manager, error;
|
|
2928
|
+
var options, _options_allowStorage, _options_adWillAutoPlay, _options_adWillPlayMuted, _options_playerVolume, _options_continuousPlayback, loader, goog, request, manager, error;
|
|
2925
2929
|
var _arguments = arguments;
|
|
2926
2930
|
return _ts_generator(this, function(_state) {
|
|
2927
2931
|
switch(_state.label){
|
|
@@ -2941,7 +2945,7 @@ function createPalNonceManager() {
|
|
|
2941
2945
|
];
|
|
2942
2946
|
case 2:
|
|
2943
2947
|
_state.sent();
|
|
2944
|
-
loader = getOrCreateNonceLoader();
|
|
2948
|
+
loader = getOrCreateNonceLoader((_options_allowStorage = options.allowStorage) !== null && _options_allowStorage !== void 0 ? _options_allowStorage : true);
|
|
2945
2949
|
goog = window.goog;
|
|
2946
2950
|
request = new goog.pal.NonceRequest();
|
|
2947
2951
|
request.adWillAutoPlay = (_options_adWillAutoPlay = options.adWillAutoPlay) !== null && _options_adWillAutoPlay !== void 0 ? _options_adWillAutoPlay : true;
|
|
@@ -3126,6 +3130,8 @@ function ingestPlayerTracking(licenseKey, channel, body) {
|
|
|
3126
3130
|
}
|
|
3127
3131
|
// src/utils/vastEnvironmentSignals.ts
|
|
3128
3132
|
var CTV_SESSION_STORAGE_KEY = "stormcloud.ctv.sid";
|
|
3133
|
+
var WEB_SESSION_STORAGE_KEY = "stormcloud.web.sid";
|
|
3134
|
+
var inMemoryWebSessionId;
|
|
3129
3135
|
var PLAYER_ID_STORAGE_KEY = "stormcloud.player.id";
|
|
3130
3136
|
var DEVICE_ID_STORAGE_KEYS = [
|
|
3131
3137
|
"rdid",
|
|
@@ -3147,7 +3153,7 @@ function resolveVastEnvironmentSignals(isCtv) {
|
|
|
3147
3153
|
var _ref;
|
|
3148
3154
|
var bridgeSignals = readNativeBridgeSignals();
|
|
3149
3155
|
var platformDevice = readPlatformNativeDeviceId();
|
|
3150
|
-
var realDeviceId = bridgeSignals.deviceId || readStoredDeviceId() || platformDevice.deviceId;
|
|
3156
|
+
var realDeviceId = bridgeSignals.deviceId || (isCtv ? readStoredDeviceId() : void 0) || platformDevice.deviceId;
|
|
3151
3157
|
var deviceId = realDeviceId;
|
|
3152
3158
|
var deviceIdType = bridgeSignals.deviceIdType || readStoredString("deviceIdType") || readStoredString("idtype") || platformDevice.deviceIdType || inferDeviceIdType();
|
|
3153
3159
|
var platformLat = bridgeSignals.deviceId ? bridgeSignals.limitAdTracking : platformDevice.limitAdTracking;
|
|
@@ -3176,9 +3182,12 @@ function resolveVastEnvironmentSignals(isCtv) {
|
|
|
3176
3182
|
deviceTypeHint: deviceTypeHint
|
|
3177
3183
|
});
|
|
3178
3184
|
}
|
|
3185
|
+
var webSessionId = getOrCreateWebSessionId();
|
|
3179
3186
|
return _object_spread_props(_object_spread({
|
|
3180
3187
|
isCtv: false
|
|
3181
|
-
},
|
|
3188
|
+
}, webSessionId ? {
|
|
3189
|
+
sessionId: webSessionId
|
|
3190
|
+
} : {}, deviceId ? {
|
|
3182
3191
|
deviceId: deviceId
|
|
3183
3192
|
} : {}, deviceId && deviceIdType ? {
|
|
3184
3193
|
deviceIdType: deviceIdType
|
|
@@ -3219,7 +3228,7 @@ var GAME_CONSOLE_UA = /PlayStation|Xbox|Nintendo/i;
|
|
|
3219
3228
|
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;
|
|
3220
3229
|
var FEATURE_PHONE_UA = /KAIOS|MIDP|J2ME|Series40|Opera Mini/i;
|
|
3221
3230
|
function resolveDeviceTypeHint(isCtv) {
|
|
3222
|
-
var override = readDeviceTypeHintOverride();
|
|
3231
|
+
var override = readDeviceTypeHintOverride(isCtv);
|
|
3223
3232
|
if (override != null) return override;
|
|
3224
3233
|
return inferDeviceTypeHint(isCtv);
|
|
3225
3234
|
}
|
|
@@ -3246,7 +3255,7 @@ function inferDeviceTypeHint(isCtv) {
|
|
|
3246
3255
|
if (/Mobile|Windows Phone|BlackBerry/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;
|
|
3247
3256
|
return fallback;
|
|
3248
3257
|
}
|
|
3249
|
-
function readDeviceTypeHintOverride() {
|
|
3258
|
+
function readDeviceTypeHintOverride(isCtv) {
|
|
3250
3259
|
if (typeof window === "undefined") return void 0;
|
|
3251
3260
|
var keys = [
|
|
3252
3261
|
"dth",
|
|
@@ -3295,6 +3304,7 @@ function readDeviceTypeHintOverride() {
|
|
|
3295
3304
|
}
|
|
3296
3305
|
}
|
|
3297
3306
|
}
|
|
3307
|
+
if (!isCtv) return void 0;
|
|
3298
3308
|
for(var _i = 0, _iter = [
|
|
3299
3309
|
"stormcloud.dth",
|
|
3300
3310
|
"dth"
|
|
@@ -3343,9 +3353,10 @@ function isEquivalentDeviceIdType(tagType, runtimeType) {
|
|
|
3343
3353
|
return ANDROID_ID_TYPES.has(tag) && ANDROID_ID_TYPES.has(runtime);
|
|
3344
3354
|
}
|
|
3345
3355
|
function resolveNativeDeviceId() {
|
|
3356
|
+
var includeStored = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
3346
3357
|
var bridgeSignals = readNativeBridgeSignals();
|
|
3347
3358
|
var platformDevice = readPlatformNativeDeviceId();
|
|
3348
|
-
var deviceId = bridgeSignals.deviceId || readStoredDeviceId() || platformDevice.deviceId;
|
|
3359
|
+
var deviceId = bridgeSignals.deviceId || (includeStored ? readStoredDeviceId() : void 0) || platformDevice.deviceId;
|
|
3349
3360
|
if (!deviceId || isMacroPlaceholder(deviceId) || isZeroedAdId(deviceId)) {
|
|
3350
3361
|
return void 0;
|
|
3351
3362
|
}
|
|
@@ -3374,6 +3385,21 @@ function getOrCreateCtvSessionId() {
|
|
|
3374
3385
|
writePersistentId(CTV_SESSION_STORAGE_KEY, sessionId);
|
|
3375
3386
|
return sessionId;
|
|
3376
3387
|
}
|
|
3388
|
+
function getOrCreateWebSessionId() {
|
|
3389
|
+
if (typeof window === "undefined") return void 0;
|
|
3390
|
+
try {
|
|
3391
|
+
var _window_sessionStorage;
|
|
3392
|
+
var existing = (_window_sessionStorage = window.sessionStorage) === null || _window_sessionStorage === void 0 ? void 0 : _window_sessionStorage.getItem(WEB_SESSION_STORAGE_KEY);
|
|
3393
|
+
if (existing && !isMacroPlaceholder(existing)) return existing;
|
|
3394
|
+
} catch (unused) {}
|
|
3395
|
+
var sessionId = inMemoryWebSessionId || createUuid();
|
|
3396
|
+
inMemoryWebSessionId = sessionId;
|
|
3397
|
+
try {
|
|
3398
|
+
var _window_sessionStorage1;
|
|
3399
|
+
(_window_sessionStorage1 = window.sessionStorage) === null || _window_sessionStorage1 === void 0 ? void 0 : _window_sessionStorage1.setItem(WEB_SESSION_STORAGE_KEY, sessionId);
|
|
3400
|
+
} catch (unused) {}
|
|
3401
|
+
return sessionId;
|
|
3402
|
+
}
|
|
3377
3403
|
function readPersistentId(storageKey) {
|
|
3378
3404
|
return readStoredString(storageKey) || readCookie(storageKey);
|
|
3379
3405
|
}
|
|
@@ -3975,7 +4001,7 @@ function sha256Hex(input) {
|
|
|
3975
4001
|
})();
|
|
3976
4002
|
}
|
|
3977
4003
|
function resolvePlayerIdentitySeed(clientInfo) {
|
|
3978
|
-
var nativeDeviceId = resolveNativeDeviceId();
|
|
4004
|
+
var nativeDeviceId = resolveNativeDeviceId(clientInfo.isSmartTV);
|
|
3979
4005
|
if (nativeDeviceId) {
|
|
3980
4006
|
return "device:".concat(nativeDeviceId);
|
|
3981
4007
|
}
|
|
@@ -4744,6 +4770,12 @@ function applyDeviceIdentityParams(params, ctx) {
|
|
|
4744
4770
|
params.set("is_lat", latValue !== null && latValue !== void 0 ? latValue : isMacroPlaceholder2(tagLat) ? "0" : tagLat);
|
|
4745
4771
|
return;
|
|
4746
4772
|
}
|
|
4773
|
+
if (!ctx.isCtv) {
|
|
4774
|
+
params.delete("rdid");
|
|
4775
|
+
params.delete("idtype");
|
|
4776
|
+
params.delete("is_lat");
|
|
4777
|
+
return;
|
|
4778
|
+
}
|
|
4747
4779
|
var tagRdidValid = Boolean(tagRdid && !isMacroPlaceholder2(tagRdid));
|
|
4748
4780
|
var tagTypeValid = Boolean(tagType && !isMacroPlaceholder2(tagType));
|
|
4749
4781
|
if (tagRdidValid && tagTypeValid && runtimeType && !isEquivalentDeviceIdType(tagType, runtimeType)) {
|
|
@@ -4898,15 +4930,24 @@ function applyVastMacros(baseUrl, ctx) {
|
|
|
4898
4930
|
if (ctx.podMaxAds != null) {
|
|
4899
4931
|
params.set("pmad", String(Math.max(1, Math.round(ctx.podMaxAds))));
|
|
4900
4932
|
}
|
|
4901
|
-
if (!ctx.isCtv && ctx.pageUrl) {
|
|
4902
|
-
params.set("url", ctx.pageUrl);
|
|
4903
|
-
params.set("description_url", ctx.pageUrl);
|
|
4904
|
-
}
|
|
4905
4933
|
var existingUrl = params.get("url") || "";
|
|
4906
4934
|
if (EXAMPLE_COM_URL.test(existingUrl)) {
|
|
4907
4935
|
params.delete("url");
|
|
4908
4936
|
params.delete("description_url");
|
|
4909
4937
|
}
|
|
4938
|
+
if (!ctx.isCtv && ctx.pageUrl) {
|
|
4939
|
+
if (isMacroPlaceholder2(params.get("url"))) {
|
|
4940
|
+
params.set("url", ctx.pageUrl);
|
|
4941
|
+
}
|
|
4942
|
+
if (isMacroPlaceholder2(params.get("description_url"))) {
|
|
4943
|
+
params.set("description_url", params.get("url") || ctx.pageUrl);
|
|
4944
|
+
}
|
|
4945
|
+
}
|
|
4946
|
+
if (!ctx.isCtv) {
|
|
4947
|
+
params.delete("an");
|
|
4948
|
+
params.delete("msid");
|
|
4949
|
+
params.delete("sid");
|
|
4950
|
+
}
|
|
4910
4951
|
if (ctx.adWillPlayMuted != null) {
|
|
4911
4952
|
params.set("vpmute", ctx.adWillPlayMuted ? "1" : "0");
|
|
4912
4953
|
}
|
|
@@ -4940,6 +4981,9 @@ function applyVastMacros(baseUrl, ctx) {
|
|
|
4940
4981
|
if (ctx.programTitle) {
|
|
4941
4982
|
params.set("ct_ti", ctx.programTitle);
|
|
4942
4983
|
}
|
|
4984
|
+
if (ctx.channelName) {
|
|
4985
|
+
params.set("ct_ch", ctx.channelName);
|
|
4986
|
+
}
|
|
4943
4987
|
var staleKeys = [];
|
|
4944
4988
|
params.forEach(function(value, key) {
|
|
4945
4989
|
if (isMacroPlaceholder2(value)) {
|
|
@@ -4992,8 +5036,10 @@ function fetchConsentSignals() {
|
|
|
4992
5036
|
tcfApi("addEventListener", 2, function(tcData, success) {
|
|
4993
5037
|
if (settled) return;
|
|
4994
5038
|
if (success && tcData && (tcData.eventStatus === "tcloaded" || tcData.eventStatus === "useractioncomplete")) {
|
|
5039
|
+
var _tcData_purpose_consents, _tcData_purpose;
|
|
4995
5040
|
settled = true;
|
|
4996
5041
|
signals.gdpr = tcData.gdprApplies ? "1" : "0";
|
|
5042
|
+
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;
|
|
4997
5043
|
if (typeof tcData.tcString === "string" && tcData.tcString) {
|
|
4998
5044
|
signals.gdprConsent = tcData.tcString;
|
|
4999
5045
|
}
|
|
@@ -6526,7 +6572,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
6526
6572
|
pageUrl: !envSignals.isCtv && typeof window !== "undefined" ? toDevSafeUrl(window.location.href) : void 0,
|
|
6527
6573
|
adWillPlayMuted: adWillPlayMuted,
|
|
6528
6574
|
adWillAutoPlay: !!this.config.autoplay,
|
|
6529
|
-
sessionId: envSignals.sessionId,
|
|
6575
|
+
sessionId: envSignals.isCtv || this.consentSignals.storageAllowed !== false ? envSignals.sessionId : void 0,
|
|
6530
6576
|
deviceId: envSignals.deviceId,
|
|
6531
6577
|
deviceIdType: envSignals.deviceIdType,
|
|
6532
6578
|
limitAdTracking: envSignals.limitAdTracking,
|
|
@@ -6534,6 +6580,8 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
6534
6580
|
adTest: this.config.adTest
|
|
6535
6581
|
}, this.config.programTitle ? {
|
|
6536
6582
|
programTitle: this.config.programTitle
|
|
6583
|
+
} : {}, this.config.channelName ? {
|
|
6584
|
+
channelName: this.config.channelName
|
|
6537
6585
|
} : {}), {
|
|
6538
6586
|
consent: this.consentSignals
|
|
6539
6587
|
}));
|
|
@@ -9654,7 +9702,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
9654
9702
|
// ───────────────────────────────────────────────────────────────
|
|
9655
9703
|
function load() {
|
|
9656
9704
|
return _async_to_generator(function() {
|
|
9657
|
-
var _this,
|
|
9705
|
+
var _this, error, palDescriptionUrl, continueLiveStreamDuringAds;
|
|
9658
9706
|
return _ts_generator(this, function(_state) {
|
|
9659
9707
|
switch(_state.label){
|
|
9660
9708
|
case 0:
|
|
@@ -9690,19 +9738,25 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
9690
9738
|
4
|
|
9691
9739
|
];
|
|
9692
9740
|
case 4:
|
|
9693
|
-
palDescriptionUrl = this.adConfig.getPalDescriptionUrl();
|
|
9694
|
-
|
|
9695
|
-
|
|
9696
|
-
|
|
9697
|
-
|
|
9698
|
-
adWillPlayMuted: true,
|
|
9699
|
-
playerVolume: 0,
|
|
9700
|
-
continuousPlayback: (_this_config_lowLatencyMode = this.config.lowLatencyMode) !== null && _this_config_lowLatencyMode !== void 0 ? _this_config_lowLatencyMode : false
|
|
9701
|
-
}, palDescriptionUrl ? {
|
|
9702
|
-
descriptionUrl: palDescriptionUrl
|
|
9703
|
-
} : {})).catch(function() {});
|
|
9704
|
-
fetchConsentSignals().then(function(signals) {
|
|
9741
|
+
palDescriptionUrl = this.config.ctvAdRequest ? this.adConfig.getPalDescriptionUrl() : void 0;
|
|
9742
|
+
fetchConsentSignals().catch(function() {
|
|
9743
|
+
return {};
|
|
9744
|
+
}).then(function(signals) {
|
|
9745
|
+
var _this_config_lowLatencyMode;
|
|
9705
9746
|
_this.adConfig.consentSignals = signals;
|
|
9747
|
+
var muted = _this.video.muted;
|
|
9748
|
+
return _this.palNonce.generateNonce(_object_spread({
|
|
9749
|
+
videoWidth: _this.video.offsetWidth || _this.video.clientWidth || 640,
|
|
9750
|
+
videoHeight: _this.video.offsetHeight || _this.video.clientHeight || 480,
|
|
9751
|
+
adWillAutoPlay: !!_this.config.autoplay,
|
|
9752
|
+
adWillPlayMuted: muted,
|
|
9753
|
+
playerVolume: muted ? 0 : _this.video.volume,
|
|
9754
|
+
continuousPlayback: (_this_config_lowLatencyMode = _this.config.lowLatencyMode) !== null && _this_config_lowLatencyMode !== void 0 ? _this_config_lowLatencyMode : false
|
|
9755
|
+
}, palDescriptionUrl ? {
|
|
9756
|
+
descriptionUrl: palDescriptionUrl
|
|
9757
|
+
} : {}, signals.storageAllowed != null ? {
|
|
9758
|
+
allowStorage: signals.storageAllowed
|
|
9759
|
+
} : {}));
|
|
9706
9760
|
}).catch(function() {});
|
|
9707
9761
|
this.adConfig.initializeTracking();
|
|
9708
9762
|
if (!this.hlsEngine.shouldUseNativeHls(function() {
|