stormcloud-video-player 0.3.14 → 0.3.17

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 (36) hide show
  1. package/dist/stormcloud-vp.min.js +1 -10
  2. package/lib/index.cjs +8282 -6531
  3. package/lib/index.cjs.map +1 -1
  4. package/lib/index.d.cts +2 -0
  5. package/lib/index.d.ts +2 -0
  6. package/lib/index.js +8112 -6495
  7. package/lib/index.js.map +1 -1
  8. package/lib/player/StormcloudVideoPlayer.cjs +5575 -3981
  9. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  10. package/lib/player/StormcloudVideoPlayer.d.cts +1 -1
  11. package/lib/players/FilePlayer.cjs +556 -225
  12. package/lib/players/FilePlayer.cjs.map +1 -1
  13. package/lib/players/HlsPlayer.cjs +5845 -4163
  14. package/lib/players/HlsPlayer.cjs.map +1 -1
  15. package/lib/players/HlsPlayer.d.cts +1 -1
  16. package/lib/players/index.cjs +6142 -4371
  17. package/lib/players/index.cjs.map +1 -1
  18. package/lib/sdk/hlsAdPlayer.cjs +954 -699
  19. package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
  20. package/lib/sdk/hlsAdPlayer.d.cts +1 -1
  21. package/lib/sdk/ima.cjs +1034 -809
  22. package/lib/sdk/ima.cjs.map +1 -1
  23. package/lib/sdk/ima.d.cts +1 -1
  24. package/lib/{types-t9jEJXZy.d.cts → types-CryTJVCC.d.cts} +1 -0
  25. package/lib/ui/StormcloudVideoPlayer.cjs +6992 -5561
  26. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  27. package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
  28. package/lib/utils/browserCompat.cjs +241 -194
  29. package/lib/utils/browserCompat.cjs.map +1 -1
  30. package/lib/utils/polyfills.cjs +379 -214
  31. package/lib/utils/polyfills.cjs.map +1 -1
  32. package/lib/utils/tracking.cjs +559 -257
  33. package/lib/utils/tracking.cjs.map +1 -1
  34. package/lib/utils/tracking.d.cts +1 -1
  35. package/package.json +6 -1
  36. package/rollup.config.js +22 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/players/FilePlayer.tsx","../../src/patterns.ts"],"sourcesContent":["import { Component } from \"react\";\nimport { canPlay } from \"../patterns\";\n\nexport interface FilePlayerProps {\n src: string;\n videoElement?: HTMLVideoElement;\n onMount?: (player: any) => void;\n onReady?: () => void;\n onPlay?: () => void;\n onPause?: () => void;\n onEnded?: () => void;\n onLoaded?: () => void;\n onError?: (error: any) => void;\n autoplay?: boolean;\n muted?: boolean;\n loop?: boolean;\n controls?: boolean;\n playsInline?: boolean;\n preload?: string;\n poster?: string;\n}\n\nexport default class FilePlayer extends Component<FilePlayerProps> {\n static displayName = \"FilePlayer\";\n\n static canPlay = canPlay.file;\n\n private mounted = false;\n private ready = false;\n\n componentDidMount() {\n this.mounted = true;\n this.load();\n }\n\n componentWillUnmount() {\n this.mounted = false;\n }\n\n componentDidUpdate(prevProps: FilePlayerProps) {\n if (prevProps.src !== this.props.src) {\n this.load();\n }\n }\n\n load = () => {\n if (!this.props.videoElement || !this.props.src) return;\n\n const video = this.props.videoElement;\n\n const handleLoadedMetadata = () => {\n if (this.mounted && !this.ready) {\n this.ready = true;\n this.props.onReady?.();\n }\n };\n\n const handlePlay = () => {\n if (this.mounted) {\n this.props.onPlay?.();\n }\n };\n\n const handlePause = () => {\n if (this.mounted) {\n this.props.onPause?.();\n }\n };\n\n const handleEnded = () => {\n if (this.mounted) {\n this.props.onEnded?.();\n }\n };\n\n const handleError = (error: any) => {\n if (this.mounted) {\n this.props.onError?.(error);\n }\n };\n\n const handleLoadedData = () => {\n if (this.mounted) {\n this.props.onLoaded?.();\n }\n };\n\n video.addEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.addEventListener(\"play\", handlePlay);\n video.addEventListener(\"pause\", handlePause);\n video.addEventListener(\"ended\", handleEnded);\n video.addEventListener(\"error\", handleError);\n video.addEventListener(\"loadeddata\", handleLoadedData);\n\n video.src = this.props.src;\n if (this.props.autoplay !== undefined) video.autoplay = this.props.autoplay;\n if (this.props.muted !== undefined) video.muted = this.props.muted;\n if (this.props.loop !== undefined) video.loop = this.props.loop;\n if (this.props.controls !== undefined) video.controls = this.props.controls;\n if (this.props.playsInline !== undefined)\n video.playsInline = this.props.playsInline;\n if (this.props.preload !== undefined)\n video.preload = this.props.preload as \"\" | \"metadata\" | \"none\" | \"auto\";\n if (this.props.poster !== undefined) video.poster = this.props.poster;\n\n this.props.onMount?.(this);\n\n return () => {\n video.removeEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.removeEventListener(\"play\", handlePlay);\n video.removeEventListener(\"pause\", handlePause);\n video.removeEventListener(\"ended\", handleEnded);\n video.removeEventListener(\"error\", handleError);\n video.removeEventListener(\"loadeddata\", handleLoadedData);\n };\n };\n\n play = () => {\n if (this.props.videoElement) {\n const video = this.props.videoElement;\n const hasValidSource =\n video.src ||\n (video.currentSrc && video.currentSrc !== \"\") ||\n video.readyState >= 1;\n\n if (hasValidSource) {\n video.play()?.catch((error) => {\n console.error(\"[FilePlayer] Failed to play:\", error);\n this.props.onError?.(error);\n });\n } else {\n console.warn(\"[FilePlayer] Cannot play: video has no valid source\");\n }\n }\n };\n\n pause = () => {\n if (this.props.videoElement) {\n this.props.videoElement.pause();\n }\n };\n\n stop = () => {\n this.pause();\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = 0;\n }\n };\n\n seekTo = (seconds: number, keepPlaying?: boolean) => {\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = seconds;\n if (!keepPlaying) {\n this.pause();\n }\n }\n };\n\n setVolume = (volume: number) => {\n if (this.props.videoElement) {\n this.props.videoElement.volume = Math.max(0, Math.min(1, volume));\n }\n };\n\n mute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = true;\n }\n };\n\n unmute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = false;\n }\n };\n\n setPlaybackRate = (rate: number) => {\n if (this.props.videoElement && rate > 0) {\n this.props.videoElement.playbackRate = rate;\n }\n };\n\n setLoop = (loop: boolean) => {\n if (this.props.videoElement) {\n this.props.videoElement.loop = loop;\n }\n };\n\n getDuration = (): number | null => {\n if (this.props.videoElement && isFinite(this.props.videoElement.duration)) {\n return this.props.videoElement.duration;\n }\n return null;\n };\n\n getCurrentTime = (): number | null => {\n if (\n this.props.videoElement &&\n isFinite(this.props.videoElement.currentTime)\n ) {\n return this.props.videoElement.currentTime;\n }\n return null;\n };\n\n getSecondsLoaded = (): number | null => {\n if (\n this.props.videoElement &&\n this.props.videoElement.buffered.length > 0\n ) {\n return this.props.videoElement.buffered.end(\n this.props.videoElement.buffered.length - 1\n );\n }\n return null;\n };\n\n getInternalPlayer = (key = \"player\") => {\n if (key === \"video\") return this.props.videoElement;\n return null;\n };\n\n enablePIP = async () => {\n if (\n this.props.videoElement &&\n \"requestPictureInPicture\" in this.props.videoElement\n ) {\n try {\n await (this.props.videoElement as any).requestPictureInPicture();\n } catch (error) {\n console.warn(\"Picture-in-Picture failed:\", error);\n }\n }\n };\n\n disablePIP = async () => {\n if (document.pictureInPictureElement) {\n try {\n await document.exitPictureInPicture();\n } catch (error) {\n console.warn(\"Exit Picture-in-Picture failed:\", error);\n }\n }\n };\n\n render() {\n return null;\n }\n}\n","export const HLS_EXTENSIONS = /\\.(m3u8)($|\\?)/i;\nexport const HLS_PATHS = /\\/hls\\//i;\nexport const DASH_EXTENSIONS = /\\.(mpd)($|\\?)/i;\nexport const VIDEO_EXTENSIONS = /\\.(mp4|webm|ogg|avi|mov|wmv|flv|mkv)($|\\?)/i;\nexport const AUDIO_EXTENSIONS = /\\.(mp3|wav|ogg|aac|wma|flac|m4a)($|\\?)/i;\n\nexport const canPlay = {\n hls: (url: string): boolean => {\n if (!url || typeof url !== \"string\") return false;\n return HLS_EXTENSIONS.test(url) || HLS_PATHS.test(url);\n },\n\n dash: (url: string): boolean => {\n if (!url || typeof url !== \"string\") return false;\n return DASH_EXTENSIONS.test(url);\n },\n\n video: (url: string): boolean => {\n if (!url || typeof url !== \"string\") return false;\n return VIDEO_EXTENSIONS.test(url);\n },\n\n audio: (url: string): boolean => {\n if (!url || typeof url !== \"string\") return false;\n return AUDIO_EXTENSIONS.test(url);\n },\n\n file: (url: string): boolean => {\n if (!url || typeof url !== \"string\") return false;\n return VIDEO_EXTENSIONS.test(url) || AUDIO_EXTENSIONS.test(url);\n },\n};\n"],"mappings":"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","names":["_a","_b"]}
1
+ {"version":3,"sources":["/home/ubuntu24/Dev/stormcloud-vp/lib/players/FilePlayer.cjs"],"names":["__getOwnPropNames","Object","getOwnPropertyNames","__export","target","all","name","__defProp","get","enumerable","__copyProps","to","from","except","desc","key","__hasOwnProp","call","__getOwnPropDesc"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAGIA,oBAAoBC,OAAOC,mBAAmB;;;;;;YAElD,KAAA;mBAAA,SAAA,EAAIC,WAAW,SAACC,QAAQC;gBACtB,IAAK,CAAA,GAAIC,IAAAA,GAAAA,CAAQD,IACfE,UAAUH,QAAQE,MAAM;oBAAEE,CAAAA,IAAKH,GAAG,CAACC,KAAK;kBAAEG,YAAY;;;;8BAAK;gBAC/D,IAAA,CAAA,OAAA,GAAA;YACA,EAAIC,cAAc,SAACC,IAAIC,MAAMC,QAAQC;;;cACnC,IAAIF,QAAQ,CAAA;+CAAA,GAAOA,MAAAA,+BAAP,SAAOA,KAAG,MAAM,YAAY,OAAOA,SAAS,YAAY;wBAC7D,MAAA,GAAA,KAAA,IAAA,CAAA,KAAA,CAAA,GAAA,EAAA,IAAA,2BAAA;;;0BAAA,IAAIG,MAAJ;;;0BACH,IAAI,CAACC,aAAaC,IAAI,CAACN,IAAII,QAAQA,QAAQF,QACzCN,UAAUI,IAAII,KAAK;;gCAAEP,KAAK;yCAAMI,IAAI,CAACG,IAAI;;;;;oBAAEN,EAAAA,GAAAA,OAAY,CAAEK,CAAAA,OAAOI,iBAAiBN,MAAMG,IAAG,KAAMD,KAAKL,UAAU;gBAAC,EAAA,GAAA,QAAA,IAAA","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/players/FilePlayer.tsx\nvar FilePlayer_exports = {};\n__export(FilePlayer_exports, {\n default: () => FilePlayer\n});\nmodule.exports = __toCommonJS(FilePlayer_exports);\nvar import_react = require(\"react\");\n\n// src/patterns.ts\nvar HLS_EXTENSIONS = /\\.(m3u8)($|\\?)/i;\nvar HLS_PATHS = /\\/hls\\//i;\nvar DASH_EXTENSIONS = /\\.(mpd)($|\\?)/i;\nvar VIDEO_EXTENSIONS = /\\.(mp4|webm|ogg|avi|mov|wmv|flv|mkv)($|\\?)/i;\nvar AUDIO_EXTENSIONS = /\\.(mp3|wav|ogg|aac|wma|flac|m4a)($|\\?)/i;\nvar canPlay = {\n hls: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return HLS_EXTENSIONS.test(url) || HLS_PATHS.test(url);\n },\n dash: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return DASH_EXTENSIONS.test(url);\n },\n video: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return VIDEO_EXTENSIONS.test(url);\n },\n audio: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return AUDIO_EXTENSIONS.test(url);\n },\n file: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return VIDEO_EXTENSIONS.test(url) || AUDIO_EXTENSIONS.test(url);\n }\n};\n\n// src/players/FilePlayer.tsx\nvar FilePlayer = class extends import_react.Component {\n constructor() {\n super(...arguments);\n this.mounted = false;\n this.ready = false;\n this.load = () => {\n if (!this.props.videoElement || !this.props.src) return;\n const video = this.props.videoElement;\n const handleLoadedMetadata = () => {\n if (this.mounted && !this.ready) {\n this.ready = true;\n this.props.onReady?.();\n }\n };\n const handlePlay = () => {\n if (this.mounted) {\n this.props.onPlay?.();\n }\n };\n const handlePause = () => {\n if (this.mounted) {\n this.props.onPause?.();\n }\n };\n const handleEnded = () => {\n if (this.mounted) {\n this.props.onEnded?.();\n }\n };\n const handleError = (error) => {\n if (this.mounted) {\n this.props.onError?.(error);\n }\n };\n const handleLoadedData = () => {\n if (this.mounted) {\n this.props.onLoaded?.();\n }\n };\n video.addEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.addEventListener(\"play\", handlePlay);\n video.addEventListener(\"pause\", handlePause);\n video.addEventListener(\"ended\", handleEnded);\n video.addEventListener(\"error\", handleError);\n video.addEventListener(\"loadeddata\", handleLoadedData);\n video.src = this.props.src;\n if (this.props.autoplay !== void 0) video.autoplay = this.props.autoplay;\n if (this.props.muted !== void 0) video.muted = this.props.muted;\n if (this.props.loop !== void 0) video.loop = this.props.loop;\n if (this.props.controls !== void 0) video.controls = this.props.controls;\n if (this.props.playsInline !== void 0)\n video.playsInline = this.props.playsInline;\n if (this.props.preload !== void 0)\n video.preload = this.props.preload;\n if (this.props.poster !== void 0) video.poster = this.props.poster;\n this.props.onMount?.(this);\n return () => {\n video.removeEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.removeEventListener(\"play\", handlePlay);\n video.removeEventListener(\"pause\", handlePause);\n video.removeEventListener(\"ended\", handleEnded);\n video.removeEventListener(\"error\", handleError);\n video.removeEventListener(\"loadeddata\", handleLoadedData);\n };\n };\n this.play = () => {\n if (this.props.videoElement) {\n const video = this.props.videoElement;\n const hasValidSource = video.src || video.currentSrc && video.currentSrc !== \"\" || video.readyState >= 1;\n if (hasValidSource) {\n video.play()?.catch((error) => {\n console.error(\"[FilePlayer] Failed to play:\", error);\n this.props.onError?.(error);\n });\n } else {\n console.warn(\"[FilePlayer] Cannot play: video has no valid source\");\n }\n }\n };\n this.pause = () => {\n if (this.props.videoElement) {\n this.props.videoElement.pause();\n }\n };\n this.stop = () => {\n this.pause();\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = 0;\n }\n };\n this.seekTo = (seconds, keepPlaying) => {\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = seconds;\n if (!keepPlaying) {\n this.pause();\n }\n }\n };\n this.setVolume = (volume) => {\n if (this.props.videoElement) {\n this.props.videoElement.volume = Math.max(0, Math.min(1, volume));\n }\n };\n this.mute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = true;\n }\n };\n this.unmute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = false;\n }\n };\n this.setPlaybackRate = (rate) => {\n if (this.props.videoElement && rate > 0) {\n this.props.videoElement.playbackRate = rate;\n }\n };\n this.setLoop = (loop) => {\n if (this.props.videoElement) {\n this.props.videoElement.loop = loop;\n }\n };\n this.getDuration = () => {\n if (this.props.videoElement && isFinite(this.props.videoElement.duration)) {\n return this.props.videoElement.duration;\n }\n return null;\n };\n this.getCurrentTime = () => {\n if (this.props.videoElement && isFinite(this.props.videoElement.currentTime)) {\n return this.props.videoElement.currentTime;\n }\n return null;\n };\n this.getSecondsLoaded = () => {\n if (this.props.videoElement && this.props.videoElement.buffered.length > 0) {\n return this.props.videoElement.buffered.end(\n this.props.videoElement.buffered.length - 1\n );\n }\n return null;\n };\n this.getInternalPlayer = (key = \"player\") => {\n if (key === \"video\") return this.props.videoElement;\n return null;\n };\n this.enablePIP = async () => {\n if (this.props.videoElement && \"requestPictureInPicture\" in this.props.videoElement) {\n try {\n await this.props.videoElement.requestPictureInPicture();\n } catch (error) {\n console.warn(\"Picture-in-Picture failed:\", error);\n }\n }\n };\n this.disablePIP = async () => {\n if (document.pictureInPictureElement) {\n try {\n await document.exitPictureInPicture();\n } catch (error) {\n console.warn(\"Exit Picture-in-Picture failed:\", error);\n }\n }\n };\n }\n componentDidMount() {\n this.mounted = true;\n this.load();\n }\n componentWillUnmount() {\n this.mounted = false;\n }\n componentDidUpdate(prevProps) {\n if (prevProps.src !== this.props.src) {\n this.load();\n }\n }\n render() {\n return null;\n }\n};\nFilePlayer.displayName = \"FilePlayer\";\nFilePlayer.canPlay = canPlay.file;\n"]}