stormcloud-video-player 0.8.56 → 0.8.57
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/README.md +2 -2
- package/dist/stormcloud-vp.min.js +1 -3
- package/lib/index.cjs +161 -283
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +12 -29
- package/lib/index.d.ts +12 -29
- package/lib/index.js +141 -227
- package/lib/index.js.map +1 -1
- package/lib/player/AdBreakOrchestrator.cjs +118 -188
- package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
- package/lib/player/AdConfigManager.cjs +103 -200
- package/lib/player/AdConfigManager.cjs.map +1 -1
- package/lib/player/AdConfigManager.d.cts +0 -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 +134 -205
- 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 +134 -205
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/index.cjs +134 -205
- package/lib/players/index.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
- package/lib/sdk/pal.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.cjs +134 -205
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/utils/browserCompat.cjs.map +1 -1
- 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 +134 -199
- package/lib/utils/tracking.cjs.map +1 -1
- package/lib/utils/trackingIngest.cjs +322 -0
- package/lib/utils/trackingIngest.cjs.map +1 -0
- package/lib/utils/trackingIngest.d.cts +14 -0
- package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
- package/lib/utils/vastMacros.cjs.map +1 -1
- package/lib/utils/vastTrackingMacros.cjs.map +1 -1
- package/package.json +1 -3
- package/lib/utils/mqttClient.cjs +0 -305
- package/lib/utils/mqttClient.cjs.map +0 -1
- package/lib/utils/mqttClient.d.cts +0 -13
- package/lib/utils/mqttConfig.cjs +0 -139
- package/lib/utils/mqttConfig.cjs.map +0 -1
- package/lib/utils/mqttConfig.d.cts +0 -20
- package/src/certs/emqxsl-ca.crt +0 -22
package/lib/sdk/pal.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/ubuntu24-new/Dev/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":["/home/ubuntu24-new/Dev/stormcloud-vp/lib/sdk/pal.cjs","../../src/sdk/pal.ts","../../src/utils/devUrl.ts"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","__hasOwnProp","call","__toCommonJS","mod","value","pal_exports","createPalNonceManager","module","exports","PRIVATE_HOST_PATTERNS","isLocalDevHost","host","hostname","replace","toLowerCase","endsWith","some","pattern","test","toDevSafeUrl","rawUrl","url","URL","protocol","cleanPath","pathname"],"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 _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","import { toDevSafeUrl } from \"../utils/devUrl\";\n\ndeclare global {\n interface Window {\n goog?: any;\n }\n}\n\nconst PAL_SDK_URL =\n \"https://imasdk.googleapis.com/pal/sdkloader/pal.js\";\n\nlet _nonceLoader: any | undefined;\nlet _palLoadPromise: Promise<void> | undefined;\n\nfunction loadPalSdk(): Promise<void> {\n if (typeof window !== \"undefined\" && window.goog?.pal) {\n return Promise.resolve();\n }\n\n if (_palLoadPromise) return _palLoadPromise;\n\n _palLoadPromise = new Promise<void>((resolve, reject) => {\n const existing = document.querySelector(\n 'script[data-pal=\"true\"]'\n ) as HTMLScriptElement | null;\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 10000\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\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\n return _palLoadPromise;\n}\n\nfunction getOrCreateNonceLoader(): any {\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}\n\nexport interface PalNonceOptions {\n videoWidth?: number;\n videoHeight?: number;\n descriptionUrl?: string;\n ppid?: string;\n sessionId?: string;\n adWillAutoPlay?: boolean;\n adWillPlayMuted?: boolean;\n playerVolume?: number;\n continuousPlayback?: boolean;\n}\n\nexport interface PalNonceManager {\n generateNonce(options?: PalNonceOptions): Promise<string>;\n\n getCurrentNonce(): string;\n\n injectNonce(vastTagUrl: string): string;\n\n sendPlaybackStart(): void;\n\n sendPlaybackEnd(): void;\n\n sendAdClick(): void;\n\n sendAdTouch(event: MouseEvent | TouchEvent): void;\n\n reset(): void;\n}\n\nexport function createPalNonceManager(): PalNonceManager {\n let currentNonce = \"\";\n let currentNonceManager: any | undefined;\n\n return {\n async generateNonce(options: PalNonceOptions = {}): Promise<string> {\n try {\n await loadPalSdk();\n\n const loader = getOrCreateNonceLoader();\n const goog = window.goog;\n\n const request = new goog.pal.NonceRequest();\n request.adWillAutoPlay = options.adWillAutoPlay ?? true;\n request.adWillPlayMuted = options.adWillPlayMuted ?? false;\n request.playerVolume =\n options.playerVolume ?? (request.adWillPlayMuted ? 0 : 1);\n request.continuousPlayback = options.continuousPlayback ?? true;\n request.descriptionUrl = toDevSafeUrl(\n options.descriptionUrl ||\n (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 ||\n (typeof window !== \"undefined\" ? window.location.href : \"\")\n );\n request.videoWidth = options.videoWidth || 640;\n request.videoHeight = options.videoHeight || 480;\n\n if (options.ppid) request.ppid = options.ppid;\n if (options.sessionId) request.sessionId = options.sessionId;\n\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\n const manager = await loader.loadNonceManager(request);\n currentNonceManager = manager;\n currentNonce = manager.getNonce() as string;\n\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 = undefined;\n return \"\";\n }\n },\n\n getCurrentNonce(): string {\n return currentNonce;\n },\n\n injectNonce(vastTagUrl: string): string {\n if (!currentNonce || !vastTagUrl) return vastTagUrl;\n\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\n .replace(/([?&])paln=[^&]*/g, \"\")\n .replace(/[?&]$/, \"\");\n const sep = base.includes(\"?\") ? \"&\" : \"?\";\n return `${base}${sep}givn=${encodeURIComponent(currentNonce)}`;\n }\n },\n\n sendPlaybackStart(): void {\n try {\n currentNonceManager?.sendPlaybackStart();\n } catch {}\n },\n\n sendPlaybackEnd(): void {\n try {\n currentNonceManager?.sendPlaybackEnd();\n } catch {}\n },\n\n sendAdClick(): void {\n try {\n currentNonceManager?.sendAdClick();\n } catch {}\n },\n\n sendAdTouch(event: MouseEvent | TouchEvent): void {\n try {\n currentNonceManager?.sendAdTouch(event);\n } catch {}\n },\n\n reset(): void {\n currentNonce = \"\";\n currentNonceManager = undefined;\n },\n };\n}\n","const PRIVATE_HOST_PATTERNS: RegExp[] = [\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];\n\nexport function isLocalDevHost(hostname: string): boolean {\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}\n\nexport function toDevSafeUrl(rawUrl: string | undefined): string {\n if (!rawUrl) return rawUrl ?? \"\";\n\n let url: URL;\n try {\n url = new URL(rawUrl);\n } catch {\n return rawUrl;\n }\n\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n return rawUrl;\n }\n\n if (!isLocalDevHost(url.hostname)) {\n return rawUrl;\n }\n\n const cleanPath = url.pathname.replace(/\\/{2,}/g, \"/\") || \"/index.html\";\n return `file://${cleanPath}`;\n}\n"]}
|
|
@@ -2455,163 +2455,83 @@ function createPalNonceManager() {
|
|
|
2455
2455
|
}
|
|
2456
2456
|
};
|
|
2457
2457
|
}
|
|
2458
|
-
// src/utils/
|
|
2459
|
-
var
|
|
2458
|
+
// src/utils/trackingIngest.ts
|
|
2459
|
+
var DEFAULT_TRACKING_INGEST_CONFIG = {
|
|
2460
2460
|
enabled: true,
|
|
2461
|
-
|
|
2462
|
-
brokerPort: 8883,
|
|
2463
|
-
wsPort: 8084,
|
|
2464
|
-
username: "for-sonifi",
|
|
2465
|
-
password: "sonifi-mqtt",
|
|
2466
|
-
topicPrefix: "adstorm/players",
|
|
2467
|
-
qos: 1
|
|
2461
|
+
baseUrl: "https://player-analytics-ingest-api-760490581852.us-central1.run.app/api/adstorm/player-tracking"
|
|
2468
2462
|
};
|
|
2469
|
-
var
|
|
2470
|
-
function
|
|
2471
|
-
|
|
2472
|
-
}
|
|
2473
|
-
function isMQTTEnabled() {
|
|
2474
|
-
return mqttConfig.enabled;
|
|
2475
|
-
}
|
|
2476
|
-
function buildMQTTBrokerUrl() {
|
|
2477
|
-
if (mqttConfig.brokerUrl) return mqttConfig.brokerUrl;
|
|
2478
|
-
return "wss://".concat(mqttConfig.brokerAddress, ":").concat(mqttConfig.wsPort, "/mqtt");
|
|
2479
|
-
}
|
|
2480
|
-
function buildPlayerTopic(licenseKey, channel) {
|
|
2481
|
-
return "".concat(mqttConfig.topicPrefix, "/").concat(licenseKey, "/").concat(channel);
|
|
2482
|
-
}
|
|
2483
|
-
// src/utils/mqttClient.ts
|
|
2484
|
-
var import_mqtt = __toESM(require("mqtt"), 1);
|
|
2485
|
-
var LOG = "[StormcloudVideoPlayer][MQTT]";
|
|
2486
|
-
var KEEPALIVE_SECONDS = 30;
|
|
2487
|
-
var CONNECT_TIMEOUT_MS = 1e4;
|
|
2488
|
-
var RECONNECT_BASE_MS = 5e3;
|
|
2489
|
-
var RECONNECT_MAX_MS = 6e4;
|
|
2490
|
-
var MAX_RECONNECT_ATTEMPTS = 8;
|
|
2491
|
-
var COOLDOWN_MS = 10 * 6e4;
|
|
2492
|
-
var client = null;
|
|
2493
|
-
var status = "disconnected";
|
|
2494
|
-
var reconnectAttempts = 0;
|
|
2495
|
-
var reconnectTimer = null;
|
|
2496
|
-
var stopped = false;
|
|
2497
|
-
function clearReconnectTimer() {
|
|
2498
|
-
if (reconnectTimer) {
|
|
2499
|
-
clearTimeout(reconnectTimer);
|
|
2500
|
-
reconnectTimer = null;
|
|
2501
|
-
}
|
|
2502
|
-
}
|
|
2503
|
-
function teardownClient() {
|
|
2504
|
-
if (client) {
|
|
2505
|
-
try {
|
|
2506
|
-
client.removeAllListeners();
|
|
2507
|
-
client.end(true);
|
|
2508
|
-
} catch (unused) {}
|
|
2509
|
-
client = null;
|
|
2510
|
-
}
|
|
2511
|
-
}
|
|
2512
|
-
function scheduleReconnect() {
|
|
2513
|
-
if (stopped || !isMQTTEnabled() || reconnectTimer) return;
|
|
2514
|
-
if (reconnectAttempts >= MAX_RECONNECT_ATTEMPTS) {
|
|
2515
|
-
console.warn("".concat(LOG, " giving up after ").concat(reconnectAttempts, " attempts; cooling down for ").concat(COOLDOWN_MS / 6e4, "m"));
|
|
2516
|
-
teardownClient();
|
|
2517
|
-
status = "disconnected";
|
|
2518
|
-
reconnectTimer = setTimeout(function() {
|
|
2519
|
-
reconnectTimer = null;
|
|
2520
|
-
reconnectAttempts = 0;
|
|
2521
|
-
openConnection();
|
|
2522
|
-
}, COOLDOWN_MS);
|
|
2523
|
-
return;
|
|
2524
|
-
}
|
|
2525
|
-
var delay = Math.min(RECONNECT_MAX_MS, RECONNECT_BASE_MS * Math.pow(2, reconnectAttempts));
|
|
2526
|
-
var jitter = Math.floor(Math.random() * 1e3);
|
|
2527
|
-
reconnectAttempts += 1;
|
|
2528
|
-
reconnectTimer = setTimeout(function() {
|
|
2529
|
-
reconnectTimer = null;
|
|
2530
|
-
openConnection();
|
|
2531
|
-
}, delay + jitter);
|
|
2532
|
-
}
|
|
2533
|
-
function openConnection() {
|
|
2534
|
-
if (stopped || !isMQTTEnabled()) return;
|
|
2535
|
-
teardownClient();
|
|
2536
|
-
var url = buildMQTTBrokerUrl();
|
|
2537
|
-
status = "connecting";
|
|
2538
|
-
var clientId = "stormcloud-vp-".concat(Math.random().toString(36).slice(2, 9));
|
|
2539
|
-
try {
|
|
2540
|
-
client = import_mqtt.default.connect(url, {
|
|
2541
|
-
clientId: clientId,
|
|
2542
|
-
username: mqttConfig.username,
|
|
2543
|
-
password: mqttConfig.password,
|
|
2544
|
-
keepalive: KEEPALIVE_SECONDS,
|
|
2545
|
-
clean: true,
|
|
2546
|
-
// Disable MQTT.js internal reconnect; we manage reconnection ourselves.
|
|
2547
|
-
reconnectPeriod: 0,
|
|
2548
|
-
connectTimeout: CONNECT_TIMEOUT_MS,
|
|
2549
|
-
queueQoSZero: false,
|
|
2550
|
-
reschedulePings: true,
|
|
2551
|
-
// Root-cause fix for the Tizen 4.0 "Keepalive timeout" loop: MQTT.js's
|
|
2552
|
-
// default timerVariant "auto" runs the keepalive interval inside a
|
|
2553
|
-
// Blob-URL Web Worker (via worker-timers). On Samsung Tizen 4.0 (old
|
|
2554
|
-
// WebKit) served from a file:// origin that worker can't tick reliably,
|
|
2555
|
-
// so the keepalive counter trips onKeepaliveTimeout almost immediately
|
|
2556
|
-
// after connect. Force the native setInterval timer instead; the main
|
|
2557
|
-
// thread is free because video is decoded by the native AVPlay pipeline.
|
|
2558
|
-
timerVariant: "native"
|
|
2559
|
-
});
|
|
2560
|
-
} catch (err) {
|
|
2561
|
-
status = "error";
|
|
2562
|
-
console.warn("".concat(LOG, " connect() threw:"), err);
|
|
2563
|
-
scheduleReconnect();
|
|
2564
|
-
return;
|
|
2565
|
-
}
|
|
2566
|
-
client.on("connect", function() {
|
|
2567
|
-
status = "connected";
|
|
2568
|
-
reconnectAttempts = 0;
|
|
2569
|
-
clearReconnectTimer();
|
|
2570
|
-
console.info("".concat(LOG, " connected to ").concat(url));
|
|
2571
|
-
});
|
|
2572
|
-
client.on("offline", function() {
|
|
2573
|
-
if (status === "connected") status = "disconnected";
|
|
2574
|
-
console.warn("".concat(LOG, " offline"));
|
|
2575
|
-
scheduleReconnect();
|
|
2576
|
-
});
|
|
2577
|
-
client.on("error", function(err) {
|
|
2578
|
-
status = "error";
|
|
2579
|
-
console.warn("".concat(LOG, " error:"), err.message);
|
|
2580
|
-
scheduleReconnect();
|
|
2581
|
-
});
|
|
2582
|
-
client.on("close", function() {
|
|
2583
|
-
if (status === "connected") status = "disconnected";
|
|
2584
|
-
scheduleReconnect();
|
|
2585
|
-
});
|
|
2463
|
+
var trackingIngestConfig = _object_spread({}, DEFAULT_TRACKING_INGEST_CONFIG);
|
|
2464
|
+
function isTrackingIngestEnabled() {
|
|
2465
|
+
return trackingIngestConfig.enabled === true;
|
|
2586
2466
|
}
|
|
2587
|
-
function
|
|
2588
|
-
|
|
2589
|
-
stopped = false;
|
|
2590
|
-
reconnectAttempts = 0;
|
|
2591
|
-
openConnection();
|
|
2467
|
+
function normalizeIngestBaseUrl(baseUrl) {
|
|
2468
|
+
return baseUrl.replace(/\/+$/, "");
|
|
2592
2469
|
}
|
|
2593
|
-
function
|
|
2594
|
-
|
|
2595
|
-
|
|
2470
|
+
function buildTrackingIngestUrl(channel) {
|
|
2471
|
+
var base = normalizeIngestBaseUrl(trackingIngestConfig.baseUrl);
|
|
2472
|
+
if (channel === "impressions") {
|
|
2473
|
+
return "".concat(base, "/impressions/ingest");
|
|
2596
2474
|
}
|
|
2475
|
+
return "".concat(base, "/metrics/ingest");
|
|
2597
2476
|
}
|
|
2598
|
-
function
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
2477
|
+
function ingestPlayerTracking(licenseKey, channel, body) {
|
|
2478
|
+
return _async_to_generator(function() {
|
|
2479
|
+
var response, error;
|
|
2480
|
+
return _ts_generator(this, function(_state) {
|
|
2481
|
+
switch(_state.label){
|
|
2482
|
+
case 0:
|
|
2483
|
+
if (!isTrackingIngestEnabled() || !licenseKey) {
|
|
2484
|
+
return [
|
|
2485
|
+
2,
|
|
2486
|
+
false
|
|
2487
|
+
];
|
|
2488
|
+
}
|
|
2489
|
+
_state.label = 1;
|
|
2490
|
+
case 1:
|
|
2491
|
+
_state.trys.push([
|
|
2492
|
+
1,
|
|
2493
|
+
3,
|
|
2494
|
+
,
|
|
2495
|
+
4
|
|
2496
|
+
]);
|
|
2497
|
+
return [
|
|
2498
|
+
4,
|
|
2499
|
+
fetch(buildTrackingIngestUrl(channel), {
|
|
2500
|
+
method: "POST",
|
|
2501
|
+
headers: {
|
|
2502
|
+
"Content-Type": "application/json",
|
|
2503
|
+
Authorization: "License-Key ".concat(licenseKey)
|
|
2504
|
+
},
|
|
2505
|
+
body: JSON.stringify(body)
|
|
2506
|
+
})
|
|
2507
|
+
];
|
|
2508
|
+
case 2:
|
|
2509
|
+
response = _state.sent();
|
|
2510
|
+
if (!response.ok) {
|
|
2511
|
+
console.warn("[StormcloudVideoPlayer] Tracking ingest failed (".concat(response.status, ") for ").concat(channel));
|
|
2512
|
+
return [
|
|
2513
|
+
2,
|
|
2514
|
+
false
|
|
2515
|
+
];
|
|
2516
|
+
}
|
|
2517
|
+
return [
|
|
2518
|
+
2,
|
|
2519
|
+
true
|
|
2520
|
+
];
|
|
2521
|
+
case 3:
|
|
2522
|
+
error = _state.sent();
|
|
2523
|
+
console.warn("[StormcloudVideoPlayer] Tracking ingest error for ".concat(channel, ":"), error);
|
|
2524
|
+
return [
|
|
2525
|
+
2,
|
|
2526
|
+
false
|
|
2527
|
+
];
|
|
2528
|
+
case 4:
|
|
2529
|
+
return [
|
|
2530
|
+
2
|
|
2531
|
+
];
|
|
2532
|
+
}
|
|
2609
2533
|
});
|
|
2610
|
-
|
|
2611
|
-
} catch (err) {
|
|
2612
|
-
console.warn("".concat(LOG, " publish failed on ").concat(topic, ":"), err);
|
|
2613
|
-
return false;
|
|
2614
|
-
}
|
|
2534
|
+
})();
|
|
2615
2535
|
}
|
|
2616
2536
|
// src/utils/vastEnvironmentSignals.ts
|
|
2617
2537
|
var AIRY_ANDROID_APP_ID = "com.freeairytv.android";
|
|
@@ -3382,7 +3302,7 @@ function getBrowserID(clientInfo) {
|
|
|
3382
3302
|
})();
|
|
3383
3303
|
}
|
|
3384
3304
|
function canPublish(licenseKey) {
|
|
3385
|
-
return Boolean(
|
|
3305
|
+
return Boolean(isTrackingIngestEnabled() && licenseKey);
|
|
3386
3306
|
}
|
|
3387
3307
|
function buildPlayerMetricEvent() {
|
|
3388
3308
|
return _async_to_generator(function() {
|
|
@@ -3424,10 +3344,6 @@ function buildPlayerMetricEvent() {
|
|
|
3424
3344
|
});
|
|
3425
3345
|
}).apply(this, arguments);
|
|
3426
3346
|
}
|
|
3427
|
-
function publishTracking(licenseKey, channel, body) {
|
|
3428
|
-
ensureMQTTClient();
|
|
3429
|
-
publishMQTT(buildPlayerTopic(licenseKey, channel), body);
|
|
3430
|
-
}
|
|
3431
3347
|
function sendInitialTracking(_0) {
|
|
3432
3348
|
return _async_to_generator(function(licenseKey) {
|
|
3433
3349
|
var context, metricEvent, error;
|
|
@@ -3443,9 +3359,9 @@ function sendInitialTracking(_0) {
|
|
|
3443
3359
|
case 1:
|
|
3444
3360
|
_state.trys.push([
|
|
3445
3361
|
1,
|
|
3446
|
-
|
|
3362
|
+
4,
|
|
3447
3363
|
,
|
|
3448
|
-
|
|
3364
|
+
5
|
|
3449
3365
|
]);
|
|
3450
3366
|
return [
|
|
3451
3367
|
4,
|
|
@@ -3456,23 +3372,28 @@ function sendInitialTracking(_0) {
|
|
|
3456
3372
|
];
|
|
3457
3373
|
case 2:
|
|
3458
3374
|
metricEvent = _state.sent();
|
|
3459
|
-
publishTracking(licenseKey, "metrics", {
|
|
3460
|
-
events: [
|
|
3461
|
-
metricEvent
|
|
3462
|
-
]
|
|
3463
|
-
});
|
|
3464
3375
|
return [
|
|
3465
|
-
|
|
3466
|
-
|
|
3376
|
+
4,
|
|
3377
|
+
ingestPlayerTracking(licenseKey, "metrics", {
|
|
3378
|
+
events: [
|
|
3379
|
+
metricEvent
|
|
3380
|
+
]
|
|
3381
|
+
})
|
|
3467
3382
|
];
|
|
3468
3383
|
case 3:
|
|
3384
|
+
_state.sent();
|
|
3385
|
+
return [
|
|
3386
|
+
3,
|
|
3387
|
+
5
|
|
3388
|
+
];
|
|
3389
|
+
case 4:
|
|
3469
3390
|
error = _state.sent();
|
|
3470
3391
|
console.error("[StormcloudVideoPlayer] Error sending initial tracking data:", error);
|
|
3471
3392
|
return [
|
|
3472
3393
|
3,
|
|
3473
|
-
|
|
3394
|
+
5
|
|
3474
3395
|
];
|
|
3475
|
-
case
|
|
3396
|
+
case 5:
|
|
3476
3397
|
return [
|
|
3477
3398
|
2
|
|
3478
3399
|
];
|
|
@@ -3583,9 +3504,9 @@ function sendAdImpressionTracking(_0, _1) {
|
|
|
3583
3504
|
case 1:
|
|
3584
3505
|
_state.trys.push([
|
|
3585
3506
|
1,
|
|
3586
|
-
|
|
3507
|
+
5,
|
|
3587
3508
|
,
|
|
3588
|
-
|
|
3509
|
+
6
|
|
3589
3510
|
]);
|
|
3590
3511
|
return [
|
|
3591
3512
|
4,
|
|
@@ -3595,29 +3516,43 @@ function sendAdImpressionTracking(_0, _1) {
|
|
|
3595
3516
|
];
|
|
3596
3517
|
case 2:
|
|
3597
3518
|
metricEvent = _state.sent();
|
|
3598
|
-
publishTracking(licenseKey, "heartbeat", metricEvent);
|
|
3599
|
-
publishTracking(licenseKey, "impressions", {
|
|
3600
|
-
events: [
|
|
3601
|
-
{
|
|
3602
|
-
player_id: metricEvent.player_id,
|
|
3603
|
-
ad_played_count: 1,
|
|
3604
|
-
ad_url: adImpressionInfo.adUrl,
|
|
3605
|
-
capture_at: adImpressionInfo.timestamp
|
|
3606
|
-
}
|
|
3607
|
-
]
|
|
3608
|
-
});
|
|
3609
3519
|
return [
|
|
3610
|
-
|
|
3611
|
-
|
|
3520
|
+
4,
|
|
3521
|
+
ingestPlayerTracking(licenseKey, "metrics", {
|
|
3522
|
+
events: [
|
|
3523
|
+
metricEvent
|
|
3524
|
+
]
|
|
3525
|
+
})
|
|
3612
3526
|
];
|
|
3613
3527
|
case 3:
|
|
3528
|
+
_state.sent();
|
|
3529
|
+
return [
|
|
3530
|
+
4,
|
|
3531
|
+
ingestPlayerTracking(licenseKey, "impressions", {
|
|
3532
|
+
events: [
|
|
3533
|
+
{
|
|
3534
|
+
player_id: metricEvent.player_id,
|
|
3535
|
+
ad_played_count: 1,
|
|
3536
|
+
ad_url: adImpressionInfo.adUrl,
|
|
3537
|
+
capture_at: adImpressionInfo.timestamp
|
|
3538
|
+
}
|
|
3539
|
+
]
|
|
3540
|
+
})
|
|
3541
|
+
];
|
|
3542
|
+
case 4:
|
|
3543
|
+
_state.sent();
|
|
3544
|
+
return [
|
|
3545
|
+
3,
|
|
3546
|
+
6
|
|
3547
|
+
];
|
|
3548
|
+
case 5:
|
|
3614
3549
|
error = _state.sent();
|
|
3615
3550
|
console.error("[StormcloudVideoPlayer] Error sending ad impression tracking:", error);
|
|
3616
3551
|
return [
|
|
3617
3552
|
3,
|
|
3618
|
-
|
|
3553
|
+
6
|
|
3619
3554
|
];
|
|
3620
|
-
case
|
|
3555
|
+
case 6:
|
|
3621
3556
|
return [
|
|
3622
3557
|
2
|
|
3623
3558
|
];
|
|
@@ -3640,9 +3575,9 @@ function sendHeartbeat(_0) {
|
|
|
3640
3575
|
case 1:
|
|
3641
3576
|
_state.trys.push([
|
|
3642
3577
|
1,
|
|
3643
|
-
|
|
3578
|
+
4,
|
|
3644
3579
|
,
|
|
3645
|
-
|
|
3580
|
+
5
|
|
3646
3581
|
]);
|
|
3647
3582
|
return [
|
|
3648
3583
|
4,
|
|
@@ -3650,19 +3585,28 @@ function sendHeartbeat(_0) {
|
|
|
3650
3585
|
];
|
|
3651
3586
|
case 2:
|
|
3652
3587
|
heartbeatData = _state.sent();
|
|
3653
|
-
publishTracking(licenseKey, "heartbeat", heartbeatData);
|
|
3654
3588
|
return [
|
|
3655
|
-
|
|
3656
|
-
|
|
3589
|
+
4,
|
|
3590
|
+
ingestPlayerTracking(licenseKey, "metrics", {
|
|
3591
|
+
events: [
|
|
3592
|
+
heartbeatData
|
|
3593
|
+
]
|
|
3594
|
+
})
|
|
3657
3595
|
];
|
|
3658
3596
|
case 3:
|
|
3597
|
+
_state.sent();
|
|
3598
|
+
return [
|
|
3599
|
+
3,
|
|
3600
|
+
5
|
|
3601
|
+
];
|
|
3602
|
+
case 4:
|
|
3659
3603
|
error = _state.sent();
|
|
3660
3604
|
console.error("[StormcloudVideoPlayer] Error sending heartbeat:", error);
|
|
3661
3605
|
return [
|
|
3662
3606
|
3,
|
|
3663
|
-
|
|
3607
|
+
5
|
|
3664
3608
|
];
|
|
3665
|
-
case
|
|
3609
|
+
case 5:
|
|
3666
3610
|
return [
|
|
3667
3611
|
2
|
|
3668
3612
|
];
|
|
@@ -5536,7 +5480,6 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
5536
5480
|
];
|
|
5537
5481
|
case 4:
|
|
5538
5482
|
data = _state.sent();
|
|
5539
|
-
this.applyMqttConfigFromResponse(data);
|
|
5540
5483
|
imaPayload = (_data_response = data.response) === null || _data_response === void 0 ? void 0 : (_data_response_ima = _data_response.ima) === null || _data_response_ima === void 0 ? void 0 : (_data_response_ima_publisherdeskima = _data_response_ima["publisherdesk.ima"]) === null || _data_response_ima_publisherdeskima === void 0 ? void 0 : _data_response_ima_publisherdeskima.payload;
|
|
5541
5484
|
if (imaPayload) {
|
|
5542
5485
|
decodedPayload = imaPayload;
|
|
@@ -5570,20 +5513,6 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
5570
5513
|
}).call(this);
|
|
5571
5514
|
}
|
|
5572
5515
|
},
|
|
5573
|
-
{
|
|
5574
|
-
key: "applyMqttConfigFromResponse",
|
|
5575
|
-
value: function applyMqttConfigFromResponse(data) {
|
|
5576
|
-
var _data_response;
|
|
5577
|
-
var mqttConfig2 = (_data_response = data.response) === null || _data_response === void 0 ? void 0 : _data_response.mqtt_config;
|
|
5578
|
-
if (!mqttConfig2 || (typeof mqttConfig2 === "undefined" ? "undefined" : _type_of(mqttConfig2)) !== "object") {
|
|
5579
|
-
return;
|
|
5580
|
-
}
|
|
5581
|
-
applyMQTTConfig(mqttConfig2);
|
|
5582
|
-
if (this.debug) {
|
|
5583
|
-
console.log("[StormcloudVideoPlayer] Applied MQTT config from /ads/web:", mqttConfig2);
|
|
5584
|
-
}
|
|
5585
|
-
}
|
|
5586
|
-
},
|
|
5587
5516
|
{
|
|
5588
5517
|
key: "fetchAndParseVmap",
|
|
5589
5518
|
value: function fetchAndParseVmap(vmapUrl) {
|