@vexor-video/player 0.0.0-stage → 0.1.1
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/CHANGELOG.md +5 -0
- package/LICENSE +21 -0
- package/README.md +221 -2
- package/dist/chunk-NBWDQALI.js +290 -0
- package/dist/chunk-NBWDQALI.js.map +1 -0
- package/dist/index.cjs +1312 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +306 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +120 -0
- package/dist/index.d.ts +120 -0
- package/dist/index.js +991 -0
- package/dist/index.js.map +1 -0
- package/dist/vanilla-BZJjSEad.d.cts +66 -0
- package/dist/vanilla-BZJjSEad.d.ts +66 -0
- package/dist/vanilla.cjs +325 -0
- package/dist/vanilla.cjs.map +1 -0
- package/dist/vanilla.d.cts +1 -0
- package/dist/vanilla.d.ts +1 -0
- package/dist/vanilla.js +7 -0
- package/dist/vanilla.js.map +1 -0
- package/dist/vexor-player.global.js +45 -0
- package/dist/vexor-player.global.js.map +1 -0
- package/package.json +58 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/vanilla.ts","../src/vanilla/player.ts","../src/native-token-refresh.ts"],"sourcesContent":["export { createVexorPlayer } from \"./vanilla/player\";\nexport type { VanillaPlayerInstance } from \"./vanilla/player\";\nexport type { VexorVanillaPlayerOptions } from \"./vanilla/types\";\nexport type { WatermarkConfig } from \"./shared-types\";\n","import Hls from \"hls.js\";\nimport type { VexorVanillaPlayerOptions } from \"./types\";\nimport { startNativeTokenRefresh } from \"../native-token-refresh\";\n\nexport interface VanillaPlayerInstance {\n play: () => Promise<void>;\n pause: () => void;\n seek: (seconds: number) => void;\n destroy: () => void;\n getElement: () => HTMLVideoElement;\n}\n\n/** Mount the Vexor player into an element without requiring React. */\nexport function createVexorPlayer(\n target: HTMLElement | string,\n options: VexorVanillaPlayerOptions\n): VanillaPlayerInstance {\n const container = typeof target === \"string\" ? document.querySelector<HTMLElement>(target) : target;\n if (!container) throw new Error(`Target container not found: ${String(target)}`);\n const initialUrl = options.src ?? (options.assetId\n ? `${(options.baseUrl || \"https://api.vexor.et\").replace(/\\/+$/, \"\")}/v1/playback/${encodeURIComponent(options.assetId)}/master.m3u8${options.token ? `?token=${encodeURIComponent(options.token)}` : \"\"}`\n : \"\");\n if (!initialUrl) throw new Error(\"Provide either src or assetId to create the Vexor player.\");\n\n const hadPlayerClass = container.classList.contains(\"vexor-player\");\n const hadProtectedClass = container.classList.contains(\"is-protected\");\n container.classList.add(\"vexor-player\");\n\n const video = document.createElement(\"video\");\n video.className = \"vexor-video\";\n video.controls = options.controls ?? true;\n video.playsInline = true;\n video.preload = options.preload ?? \"metadata\";\n if (options.poster) video.poster = options.poster;\n if (options.autoPlay) video.autoplay = true;\n if (options.muted) video.muted = true;\n if (options.loop) video.loop = true;\n container.appendChild(video);\n\n let watermarkElement: HTMLDivElement | null = null;\n let watermarkTimer: ReturnType<typeof setInterval> | undefined;\n if (options.watermark) {\n const watermark = typeof options.watermark === \"string\"\n ? { text: options.watermark, position: \"dynamic\" as const, intervalSeconds: 15, opacity: 0.35 }\n : { position: \"dynamic\" as const, intervalSeconds: 15, opacity: 0.35, ...options.watermark };\n watermarkElement = document.createElement(\"div\");\n watermarkElement.className = \"vexor-watermark\";\n watermarkElement.textContent = watermark.text;\n watermarkElement.style.opacity = String(Math.max(0, Math.min(1, watermark.opacity ?? 0.35)));\n watermarkElement.style.fontSize = typeof watermark.fontSize === \"number\" ? `${watermark.fontSize}px` : watermark.fontSize ?? \"12px\";\n watermarkElement.style.color = watermark.color ?? \"#ffffff\";\n\n const placeWatermark = () => {\n watermarkElement!.style.removeProperty(\"top\");\n watermarkElement!.style.removeProperty(\"right\");\n watermarkElement!.style.removeProperty(\"bottom\");\n watermarkElement!.style.removeProperty(\"left\");\n watermarkElement!.style.removeProperty(\"transform\");\n switch (watermark.position) {\n case \"top-left\": watermarkElement!.style.cssText += \";top:16px;left:16px\"; break;\n case \"top-right\": watermarkElement!.style.cssText += \";top:16px;right:16px\"; break;\n case \"bottom-left\": watermarkElement!.style.cssText += \";bottom:48px;left:16px\"; break;\n case \"bottom-right\": watermarkElement!.style.cssText += \";bottom:48px;right:16px\"; break;\n case \"center\": watermarkElement!.style.cssText += \";top:50%;left:50%;transform:translate(-50%,-50%)\"; break;\n default:\n watermarkElement!.style.top = `${10 + Math.floor(Math.random() * 70)}%`;\n watermarkElement!.style.left = `${10 + Math.floor(Math.random() * 70)}%`;\n }\n };\n placeWatermark();\n if (watermark.position === \"dynamic\") {\n watermarkTimer = setInterval(placeWatermark, Math.max(2, watermark.intervalSeconds || 15) * 1000);\n }\n container.appendChild(watermarkElement);\n }\n\n const onContextMenu = (event: Event) => event.preventDefault();\n const onDragStart = (event: Event) => event.preventDefault();\n if (options.protect) {\n container.classList.add(\"is-protected\");\n container.addEventListener(\"contextmenu\", onContextMenu);\n video.addEventListener(\"contextmenu\", onContextMenu);\n video.addEventListener(\"dragstart\", onDragStart);\n }\n\n let activeUrl = initialUrl;\n\n let hls: Hls | null = null;\n let nativeTokenRefresh: ReturnType<typeof startNativeTokenRefresh> | null = null;\n let nativeErrorListener: (() => void) | undefined;\n let destroyed = false;\n let refreshPromise: Promise<string> | null = null;\n let resumeAfterRefresh: { time: number; shouldPlay: boolean } | null = null;\n let hasSignaledReady = false;\n let activeParams = new URL(activeUrl, document.baseURI).search;\n const useFallback = (error?: { code: string; message: string; fatal: boolean }) => {\n if (options.fallbackSrc) {\n if (hls) hls.destroy();\n hls = null;\n video.src = options.fallbackSrc;\n video.load();\n } else if (error) options.onError?.(error);\n };\n const signalReady = () => {\n if (hasSignaledReady) return;\n hasSignaledReady = true;\n options.onReady?.();\n };\n const onLoaded = () => {\n signalReady();\n const resume = resumeAfterRefresh;\n resumeAfterRefresh = null;\n if (resume && Number.isFinite(resume.time)) video.currentTime = resume.time;\n if ((resume?.shouldPlay || options.autoPlay) && !destroyed) video.play().catch(() => {});\n };\n\n video.addEventListener(\"loadedmetadata\", onLoaded);\n video.addEventListener(\"loadeddata\", onLoaded);\n const onPlay = () => options.onPlay?.();\n const onPause = () => options.onPause?.();\n const onEnded = () => options.onEnded?.();\n video.addEventListener(\"play\", onPlay);\n video.addEventListener(\"pause\", onPause);\n video.addEventListener(\"ended\", onEnded);\n const onTimeUpdate = () => options.onTimeUpdate?.(video.currentTime, video.duration);\n video.addEventListener(\"timeupdate\", onTimeUpdate);\n\n const isHlsUrl = activeUrl.includes(\".m3u8\") || activeUrl.includes(\"/playback/\");\n if (isHlsUrl && Hls.isSupported()) {\n class TokenAwareLoader extends Hls.DefaultConfig.loader {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n load(context: any, config: any, callbacks: any) {\n if (activeParams && context?.url) {\n try {\n const sourceUrl = new URL(activeUrl, document.baseURI);\n const childUrl = new URL(context.url, sourceUrl);\n if (childUrl.origin === sourceUrl.origin && !childUrl.searchParams.has(\"token\")) {\n new URLSearchParams(activeParams).forEach((value, key) => {\n if (!childUrl.searchParams.has(key)) childUrl.searchParams.set(key, value);\n });\n context.url = childUrl.toString();\n }\n } catch {\n // Leave an unparseable child URL unchanged.\n }\n }\n super.load(context, config, callbacks);\n }\n }\n hls = new Hls({ enableWorker: true, loader: TokenAwareLoader as any, fLoader: TokenAwareLoader as any, pLoader: TokenAwareLoader as any });\n const activeHls = hls;\n activeHls.on(Hls.Events.MANIFEST_PARSED, () => {\n if (hls !== activeHls || destroyed) return;\n const resume = resumeAfterRefresh;\n resumeAfterRefresh = null;\n signalReady();\n if (resume && Number.isFinite(resume.time)) video.currentTime = resume.time;\n if ((resume?.shouldPlay || options.autoPlay) && !destroyed) video.play().catch(() => {});\n });\n activeHls.on(Hls.Events.ERROR, async (_event, data) => {\n if (hls !== activeHls || destroyed) return;\n if ((data.response?.code === 401 || data.response?.code === 403) && options.refreshToken) {\n try {\n refreshPromise ??= options.refreshToken();\n const newToken = await refreshPromise;\n refreshPromise = null;\n if (newToken && hls === activeHls && !destroyed) {\n resumeAfterRefresh = { time: video.currentTime, shouldPlay: !video.paused };\n const url = new URL(activeUrl, document.baseURI);\n url.searchParams.set(\"token\", newToken);\n activeUrl = url.toString();\n activeParams = url.search;\n activeHls.loadSource(activeUrl);\n activeHls.startLoad();\n return;\n }\n } catch {\n refreshPromise = null;\n }\n }\n if (hls !== activeHls || destroyed) return;\n if (data.fatal) useFallback({ code: data.details || \"MEDIA_PLAYBACK_ERROR\", message: `Failed to stream video: ${data.details || \"network error\"}`, fatal: true });\n });\n activeHls.loadSource(activeUrl);\n activeHls.attachMedia(video);\n } else if (isHlsUrl && video.canPlayType(\"application/vnd.apple.mpegurl\")) {\n video.src = activeUrl;\n nativeTokenRefresh = startNativeTokenRefresh(video, activeUrl, options.refreshToken);\n nativeErrorListener = () => {\n void nativeTokenRefresh?.refreshNow().then((refreshed) => {\n if (refreshed || destroyed) return;\n video.removeEventListener(\"error\", nativeErrorListener!);\n useFallback({ code: \"NATIVE_HLS_ERROR\", message: \"Failed to play native HLS stream\", fatal: true });\n });\n };\n video.addEventListener(\"error\", nativeErrorListener);\n } else if (!isHlsUrl || options.fallbackSrc) {\n video.src = isHlsUrl ? options.fallbackSrc! : activeUrl;\n } else {\n useFallback({ code: \"HLS_UNSUPPORTED\", message: \"This browser does not support HLS playback.\", fatal: true });\n }\n\n return {\n play: () => video.play(),\n pause: () => video.pause(),\n seek: (seconds) => { video.currentTime = Math.max(0, Math.min(seconds, video.duration || seconds)); },\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n nativeTokenRefresh?.stop();\n if (hls) hls.destroy();\n hls = null;\n if (watermarkTimer) clearInterval(watermarkTimer);\n container.removeEventListener(\"contextmenu\", onContextMenu);\n video.removeEventListener(\"contextmenu\", onContextMenu);\n video.removeEventListener(\"dragstart\", onDragStart);\n video.removeEventListener(\"loadedmetadata\", onLoaded);\n video.removeEventListener(\"loadeddata\", onLoaded);\n video.removeEventListener(\"play\", onPlay);\n video.removeEventListener(\"pause\", onPause);\n video.removeEventListener(\"ended\", onEnded);\n video.removeEventListener(\"timeupdate\", onTimeUpdate);\n if (nativeErrorListener) video.removeEventListener(\"error\", nativeErrorListener);\n video.pause();\n video.removeAttribute(\"src\");\n video.load();\n video.remove();\n watermarkElement?.remove();\n if (!hadPlayerClass) container.classList.remove(\"vexor-player\");\n if (options.protect && !hadProtectedClass) container.classList.remove(\"is-protected\");\n },\n getElement: () => video,\n };\n}\n","const TOKEN_REFRESH_INTERVAL_MS = 4 * 60 * 1000;\nconst TOKEN_REFRESH_RETRY_MS = 30 * 1000;\n\n/**\n * Refresh native-HLS playback before Vexor's five-minute token expires.\n * Browsers do not expose the native HLS request status to JavaScript, so this\n * timer complements the reactive 401/403 handling used by hls.js.\n */\nexport function startNativeTokenRefresh(\n video: HTMLVideoElement,\n initialUrl: string,\n refreshToken?: () => Promise<string>,\n): { refreshNow: () => Promise<boolean>; stop: () => void } {\n let currentUrl = initialUrl;\n let disposed = false;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let refreshInFlight: Promise<boolean> | null = null;\n let restoreListener: (() => void) | undefined;\n\n const schedule = (delay = TOKEN_REFRESH_INTERVAL_MS) => {\n if (!refreshToken || disposed) return;\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => void refreshNow(), delay);\n };\n\n const refreshNow = (): Promise<boolean> => {\n if (!refreshToken || disposed) return Promise.resolve(false);\n if (refreshInFlight) return refreshInFlight;\n\n refreshInFlight = (async () => {\n try {\n const token = await refreshToken();\n if (disposed || !token) return false;\n\n const nextUrl = new URL(currentUrl, document.baseURI);\n nextUrl.searchParams.set(\"token\", token);\n currentUrl = nextUrl.toString();\n\n const resumeTime = video.currentTime;\n const shouldResume = !video.paused;\n restoreListener = () => {\n restoreListener = undefined;\n if (disposed) return;\n if (Number.isFinite(resumeTime) && resumeTime > 0) {\n try {\n video.currentTime = resumeTime;\n } catch {\n // The new manifest may not have loaded enough media to seek yet.\n }\n }\n if (shouldResume) video.play().catch(() => {});\n };\n video.addEventListener(\"loadedmetadata\", restoreListener, { once: true });\n video.src = currentUrl;\n video.load();\n schedule();\n return true;\n } catch {\n // Retry soon; do not keep using a token that is about to expire.\n schedule(TOKEN_REFRESH_RETRY_MS);\n return false;\n } finally {\n refreshInFlight = null;\n }\n })();\n\n return refreshInFlight;\n };\n\n schedule();\n\n return {\n refreshNow,\n stop: () => {\n disposed = true;\n if (timer) clearTimeout(timer);\n if (restoreListener) video.removeEventListener(\"loadedmetadata\", restoreListener);\n },\n };\n}\n"],"mappings":"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","names":["Hls"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { V as VanillaPlayerInstance, a as VexorVanillaPlayerOptions, W as WatermarkConfig, c as createVexorPlayer } from './vanilla-BZJjSEad.cjs';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { V as VanillaPlayerInstance, a as VexorVanillaPlayerOptions, W as WatermarkConfig, c as createVexorPlayer } from './vanilla-BZJjSEad.js';
|
package/dist/vanilla.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|