stormcloud-video-player 0.8.13 → 0.8.14

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/ubuntu24-new/Dev/stormcloud-vp/lib/utils/vastMacros.cjs","../../src/utils/vastMacros.ts"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","__getOwnPropNames","getOwnPropertyDescriptor","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","vastMacros_exports","applyVastMacros","fetchConsentSignals","generateCorrelator","module","exports","crypto","getRandomValues","buf","Uint32Array","String","Math","floor","random","Number","MAX_SAFE_INTEGER","UNEXPANDED_MACRO_PATTERN","baseUrl","ctx","url","URL","replaceCorrelatorFallback","correlator","params","searchParams","set","streamCorrelator","pod","adPosition","pageUrl","adWillPlayMuted","adWillAutoPlay","deviceId","deviceIdType","limitAdTracking","delete","consent","gdpr","gdprConsent","usPrivacy","adTest","staleKeys","forEach","test","push","toString","correlatorRegex","replace","sep","includes","signals","window","Promise","resolve","tasks","tcfApi","__tcfapi","settled","tcData","success"],"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/utils/vastMacros.ts\nvar vastMacros_exports = {};\n__export(vastMacros_exports, {\n applyVastMacros: () => applyVastMacros,\n fetchConsentSignals: () => fetchConsentSignals,\n generateCorrelator: () => generateCorrelator\n});\nmodule.exports = __toCommonJS(vastMacros_exports);\nfunction generateCorrelator() {\n if (typeof crypto !== \"undefined\" && crypto.getRandomValues) {\n try {\n const buf = new Uint32Array(2);\n crypto.getRandomValues(buf);\n const value = (buf[0] ?? 0) * 2097152 + ((buf[1] ?? 0) & 2097151);\n if (value > 0) {\n return String(value);\n }\n } catch {\n }\n }\n return String(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1);\n}\nvar UNEXPANDED_MACRO_PATTERN = /^(\\[[^\\]]*\\]|\\{[^}]*\\}|%%[^%]*%%)$/;\nfunction applyVastMacros(baseUrl, ctx) {\n let url;\n try {\n url = new URL(baseUrl);\n } catch {\n return replaceCorrelatorFallback(baseUrl, ctx.correlator);\n }\n const params = url.searchParams;\n params.set(\"correlator\", ctx.correlator);\n params.set(\"scor\", ctx.streamCorrelator);\n if (ctx.pod != null) {\n params.set(\"pod\", String(ctx.pod));\n }\n if (ctx.adPosition != null) {\n params.set(\"ppos\", String(ctx.adPosition));\n }\n if (ctx.pageUrl) {\n params.set(\"url\", ctx.pageUrl);\n params.set(\"description_url\", ctx.pageUrl);\n }\n if (ctx.adWillPlayMuted != null) {\n params.set(\"vpmute\", ctx.adWillPlayMuted ? \"1\" : \"0\");\n }\n if (ctx.adWillAutoPlay != null) {\n params.set(\"vpa\", ctx.adWillAutoPlay ? \"auto\" : \"click\");\n }\n if (ctx.deviceId && ctx.deviceIdType) {\n params.set(\"rdid\", ctx.deviceId);\n params.set(\"idtype\", ctx.deviceIdType);\n params.set(\"is_lat\", ctx.limitAdTracking ? \"1\" : \"0\");\n } else {\n params.delete(\"rdid\");\n params.delete(\"idtype\");\n params.delete(\"is_lat\");\n }\n const consent = ctx.consent;\n if (consent?.gdpr != null) {\n params.set(\"gdpr\", consent.gdpr);\n }\n if (consent?.gdprConsent != null) {\n params.set(\"gdpr_consent\", consent.gdprConsent);\n }\n if (consent?.usPrivacy != null) {\n params.set(\"us_privacy\", consent.usPrivacy);\n }\n if (ctx.adTest) {\n params.set(\"adtest\", \"on\");\n }\n const staleKeys = [];\n params.forEach((value, key) => {\n if (UNEXPANDED_MACRO_PATTERN.test(value)) {\n staleKeys.push(key);\n }\n });\n for (const key of staleKeys) {\n params.delete(key);\n }\n return url.toString();\n}\nfunction replaceCorrelatorFallback(baseUrl, correlator) {\n const correlatorRegex = /([?&])correlator=([^&]*)/;\n if (correlatorRegex.test(baseUrl)) {\n return baseUrl.replace(correlatorRegex, `$1correlator=${correlator}`);\n }\n const sep = baseUrl.includes(\"?\") ? \"&\" : \"?\";\n return `${baseUrl}${sep}correlator=${correlator}`;\n}\nfunction fetchConsentSignals(timeoutMs = 1500) {\n const signals = {};\n if (typeof window === \"undefined\") {\n return Promise.resolve(signals);\n }\n const tasks = [];\n const tcfApi = window.__tcfapi;\n if (typeof tcfApi === \"function\") {\n tasks.push(\n new Promise((resolve) => {\n let settled = false;\n try {\n tcfApi(\"addEventListener\", 2, (tcData, success) => {\n if (settled) return;\n if (success && tcData && (tcData.eventStatus === \"tcloaded\" || tcData.eventStatus === \"useractioncomplete\")) {\n settled = true;\n signals.gdpr = tcData.gdprApplies ? \"1\" : \"0\";\n if (typeof tcData.tcString === \"string\" && tcData.tcString) {\n signals.gdprConsent = tcData.tcString;\n }\n try {\n tcfApi(\"removeEventListener\", 2, () => {\n }, tcData.listenerId);\n } catch {\n }\n resolve();\n }\n });\n } catch {\n resolve();\n }\n setTimeout(() => {\n if (!settled) {\n settled = true;\n resolve();\n }\n }, timeoutMs);\n })\n );\n }\n const uspApi = window.__uspapi;\n if (typeof uspApi === \"function\") {\n tasks.push(\n new Promise((resolve) => {\n try {\n uspApi(\"getUSPData\", 1, (data, success) => {\n if (success && typeof data?.uspString === \"string\" && data.uspString) {\n signals.usPrivacy = data.uspString;\n }\n resolve();\n });\n } catch {\n resolve();\n }\n setTimeout(resolve, timeoutMs);\n })\n );\n }\n if (tasks.length === 0) {\n return Promise.resolve(signals);\n }\n return Promise.all(tasks).then(() => signals);\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n applyVastMacros,\n fetchConsentSignals,\n generateCorrelator\n});\n","export interface VastConsentSignals {\n gdpr?: string | undefined;\n gdprConsent?: string | undefined;\n usPrivacy?: string | undefined;\n}\n\nexport interface VastMacroContext {\n correlator: string;\n streamCorrelator: string;\n pod?: number | undefined;\n adPosition?: number | undefined;\n pageUrl?: string | undefined;\n adWillPlayMuted?: boolean | undefined;\n adWillAutoPlay?: boolean | undefined;\n deviceId?: string | undefined;\n deviceIdType?: string | undefined;\n limitAdTracking?: boolean | undefined;\n adTest?: boolean | undefined;\n consent?: VastConsentSignals | undefined;\n}\n\nexport function generateCorrelator(): string {\n if (typeof crypto !== \"undefined\" && crypto.getRandomValues) {\n try {\n const buf = new Uint32Array(2);\n crypto.getRandomValues(buf);\n const value = (buf[0] ?? 0) * 0x200000 + ((buf[1] ?? 0) & 0x1fffff);\n if (value > 0) {\n return String(value);\n }\n } catch {\n }\n }\n return String(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1);\n}\n\nconst UNEXPANDED_MACRO_PATTERN = /^(\\[[^\\]]*\\]|\\{[^}]*\\}|%%[^%]*%%)$/;\n\nexport function applyVastMacros(\n baseUrl: string,\n ctx: VastMacroContext\n): string {\n let url: URL;\n try {\n url = new URL(baseUrl);\n } catch {\n return replaceCorrelatorFallback(baseUrl, ctx.correlator);\n }\n\n const params = url.searchParams;\n\n params.set(\"correlator\", ctx.correlator);\n params.set(\"scor\", ctx.streamCorrelator);\n\n if (ctx.pod != null) {\n params.set(\"pod\", String(ctx.pod));\n }\n if (ctx.adPosition != null) {\n params.set(\"ppos\", String(ctx.adPosition));\n }\n\n if (ctx.pageUrl) {\n params.set(\"url\", ctx.pageUrl);\n params.set(\"description_url\", ctx.pageUrl);\n }\n\n if (ctx.adWillPlayMuted != null) {\n params.set(\"vpmute\", ctx.adWillPlayMuted ? \"1\" : \"0\");\n }\n if (ctx.adWillAutoPlay != null) {\n params.set(\"vpa\", ctx.adWillAutoPlay ? \"auto\" : \"click\");\n }\n\n if (ctx.deviceId && ctx.deviceIdType) {\n params.set(\"rdid\", ctx.deviceId);\n params.set(\"idtype\", ctx.deviceIdType);\n params.set(\"is_lat\", ctx.limitAdTracking ? \"1\" : \"0\");\n } else {\n params.delete(\"rdid\");\n params.delete(\"idtype\");\n params.delete(\"is_lat\");\n }\n\n const consent = ctx.consent;\n if (consent?.gdpr != null) {\n params.set(\"gdpr\", consent.gdpr);\n }\n if (consent?.gdprConsent != null) {\n params.set(\"gdpr_consent\", consent.gdprConsent);\n }\n if (consent?.usPrivacy != null) {\n params.set(\"us_privacy\", consent.usPrivacy);\n }\n\n if (ctx.adTest) {\n params.set(\"adtest\", \"on\");\n }\n\n const staleKeys: string[] = [];\n params.forEach((value, key) => {\n if (UNEXPANDED_MACRO_PATTERN.test(value)) {\n staleKeys.push(key);\n }\n });\n for (const key of staleKeys) {\n params.delete(key);\n }\n\n return url.toString();\n}\n\nfunction replaceCorrelatorFallback(baseUrl: string, correlator: string): string {\n const correlatorRegex = /([?&])correlator=([^&]*)/;\n if (correlatorRegex.test(baseUrl)) {\n return baseUrl.replace(correlatorRegex, `$1correlator=${correlator}`);\n }\n const sep = baseUrl.includes(\"?\") ? \"&\" : \"?\";\n return `${baseUrl}${sep}correlator=${correlator}`;\n}\n\nexport function fetchConsentSignals(\n timeoutMs: number = 1500\n): Promise<VastConsentSignals> {\n const signals: VastConsentSignals = {};\n if (typeof window === \"undefined\") {\n return Promise.resolve(signals);\n }\n\n const tasks: Promise<void>[] = [];\n\n const tcfApi = (window as any).__tcfapi;\n if (typeof tcfApi === \"function\") {\n tasks.push(\n new Promise<void>((resolve) => {\n let settled = false;\n try {\n tcfApi(\"addEventListener\", 2, (tcData: any, success: boolean) => {\n if (settled) return;\n if (\n success &&\n tcData &&\n (tcData.eventStatus === \"tcloaded\" ||\n tcData.eventStatus === \"useractioncomplete\")\n ) {\n settled = true;\n signals.gdpr = tcData.gdprApplies ? \"1\" : \"0\";\n if (typeof tcData.tcString === \"string\" && tcData.tcString) {\n signals.gdprConsent = tcData.tcString;\n }\n try {\n tcfApi(\"removeEventListener\", 2, () => {}, tcData.listenerId);\n } catch {}\n resolve();\n }\n });\n } catch {\n resolve();\n }\n setTimeout(() => {\n if (!settled) {\n settled = true;\n resolve();\n }\n }, timeoutMs);\n })\n );\n }\n\n const uspApi = (window as any).__uspapi;\n if (typeof uspApi === \"function\") {\n tasks.push(\n new Promise<void>((resolve) => {\n try {\n uspApi(\"getUSPData\", 1, (data: any, success: boolean) => {\n if (success && typeof data?.uspString === \"string\" && data.uspString) {\n signals.usPrivacy = data.uspString;\n }\n resolve();\n });\n } catch {\n resolve();\n }\n setTimeout(resolve, timeoutMs);\n })\n );\n }\n\n if (tasks.length === 0) {\n return Promise.resolve(signals);\n }\n\n return Promise.all(tasks).then(() => signals);\n}\n"]}
1
+ {"version":3,"sources":["/home/ubuntu24-new/Dev/stormcloud-vp/lib/utils/vastMacros.cjs","../../src/utils/vastMacros.ts"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","__getOwnPropNames","getOwnPropertyDescriptor","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","vastMacros_exports","applyVastMacros","fetchConsentSignals","generateCorrelator","module","exports","crypto","getRandomValues","buf","Uint32Array","String","Math","floor","random","Number","MAX_SAFE_INTEGER","UNEXPANDED_MACRO_PATTERN","CTV_UNSUPPORTED_PARAMS","baseUrl","ctx","url","URL","replaceCorrelatorFallback","correlator","params","searchParams","set","isCtv","delete","streamCorrelator","pod","adPosition","requestUrl","contentUrl","pageUrl","adWillPlayMuted","adWillAutoPlay","appId","appName","sessionId","deviceTypeHint","deviceId","deviceIdType","limitAdTracking","consent","gdpr","gdprConsent","usPrivacy","adTest","staleKeys","forEach","push","toString","correlatorRegex","test","replace"],"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/utils/vastMacros.ts\nvar vastMacros_exports = {};\n__export(vastMacros_exports, {\n applyVastMacros: () => applyVastMacros,\n fetchConsentSignals: () => fetchConsentSignals,\n generateCorrelator: () => generateCorrelator\n});\nmodule.exports = __toCommonJS(vastMacros_exports);\nfunction generateCorrelator() {\n if (typeof crypto !== \"undefined\" && crypto.getRandomValues) {\n try {\n const buf = new Uint32Array(2);\n crypto.getRandomValues(buf);\n const value = (buf[0] ?? 0) * 2097152 + ((buf[1] ?? 0) & 2097151);\n if (value > 0) {\n return String(value);\n }\n } catch {\n }\n }\n return String(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1);\n}\nvar UNEXPANDED_MACRO_PATTERN = /^(\\[[^\\]]*\\]|\\{[^}]*\\}|%%[^%]*%%)$/;\nvar CTV_UNSUPPORTED_PARAMS = [\n \"description_url\",\n \"tfcd\",\n \"npa\",\n \"min_ad_duration\",\n \"max_ad_duration\",\n \"unviewed_position_start\",\n \"impl\",\n \"scor\",\n \"vad_type\",\n \"gdpr\",\n \"gdpr_consent\",\n \"us_privacy\"\n];\nfunction applyVastMacros(baseUrl, ctx) {\n let url;\n try {\n url = new URL(baseUrl);\n } catch {\n return replaceCorrelatorFallback(baseUrl, ctx.correlator);\n }\n const params = url.searchParams;\n params.set(\"correlator\", ctx.correlator);\n if (ctx.isCtv) {\n for (const key of CTV_UNSUPPORTED_PARAMS) {\n params.delete(key);\n }\n } else {\n params.set(\"scor\", ctx.streamCorrelator);\n }\n if (ctx.pod != null) {\n params.set(\"pod\", String(ctx.pod));\n }\n if (ctx.adPosition != null) {\n params.set(\"ppos\", String(ctx.adPosition));\n }\n const requestUrl = ctx.contentUrl || ctx.pageUrl;\n if (requestUrl) {\n params.set(\"url\", requestUrl);\n if (!ctx.isCtv) {\n params.set(\"description_url\", requestUrl);\n }\n }\n if (ctx.adWillPlayMuted != null) {\n params.set(\"vpmute\", ctx.adWillPlayMuted ? \"1\" : \"0\");\n }\n if (ctx.adWillAutoPlay != null) {\n params.set(\"vpa\", ctx.adWillAutoPlay ? \"auto\" : \"click\");\n }\n if (ctx.appId) {\n params.set(\"msid\", ctx.appId);\n }\n if (ctx.appName) {\n params.set(\"an\", ctx.appName);\n }\n if (ctx.sessionId) {\n params.set(\"sid\", ctx.sessionId);\n }\n if (ctx.deviceTypeHint != null) {\n params.set(\"dth\", String(ctx.deviceTypeHint));\n } else if (ctx.isCtv) {\n params.set(\"dth\", \"5\");\n }\n if (ctx.deviceId && ctx.deviceIdType) {\n params.set(\"rdid\", ctx.deviceId);\n params.set(\"idtype\", ctx.deviceIdType);\n params.set(\"is_lat\", ctx.limitAdTracking ? \"1\" : \"0\");\n } else {\n params.delete(\"rdid\");\n params.delete(\"idtype\");\n params.delete(\"is_lat\");\n }\n if (!ctx.isCtv) {\n const consent = ctx.consent;\n if (consent?.gdpr != null) {\n params.set(\"gdpr\", consent.gdpr);\n }\n if (consent?.gdprConsent != null) {\n params.set(\"gdpr_consent\", consent.gdprConsent);\n }\n if (consent?.usPrivacy != null) {\n params.set(\"us_privacy\", consent.usPrivacy);\n }\n }\n if (ctx.adTest) {\n params.set(\"adtest\", \"on\");\n }\n const staleKeys = [];\n params.forEach((value, key) => {\n if (UNEXPANDED_MACRO_PATTERN.test(value)) {\n staleKeys.push(key);\n }\n });\n for (const key of staleKeys) {\n params.delete(key);\n }\n return url.toString();\n}\nfunction replaceCorrelatorFallback(baseUrl, correlator) {\n const correlatorRegex = /([?&])correlator=([^&]*)/;\n if (correlatorRegex.test(baseUrl)) {\n return baseUrl.replace(correlatorRegex, `$1correlator=${correlator}`);\n }\n const sep = baseUrl.includes(\"?\") ? \"&\" : \"?\";\n return `${baseUrl}${sep}correlator=${correlator}`;\n}\nfunction fetchConsentSignals(timeoutMs = 1500) {\n const signals = {};\n if (typeof window === \"undefined\") {\n return Promise.resolve(signals);\n }\n const tasks = [];\n const tcfApi = window.__tcfapi;\n if (typeof tcfApi === \"function\") {\n tasks.push(\n new Promise((resolve) => {\n let settled = false;\n try {\n tcfApi(\"addEventListener\", 2, (tcData, success) => {\n if (settled) return;\n if (success && tcData && (tcData.eventStatus === \"tcloaded\" || tcData.eventStatus === \"useractioncomplete\")) {\n settled = true;\n signals.gdpr = tcData.gdprApplies ? \"1\" : \"0\";\n if (typeof tcData.tcString === \"string\" && tcData.tcString) {\n signals.gdprConsent = tcData.tcString;\n }\n try {\n tcfApi(\"removeEventListener\", 2, () => {\n }, tcData.listenerId);\n } catch {\n }\n resolve();\n }\n });\n } catch {\n resolve();\n }\n setTimeout(() => {\n if (!settled) {\n settled = true;\n resolve();\n }\n }, timeoutMs);\n })\n );\n }\n const uspApi = window.__uspapi;\n if (typeof uspApi === \"function\") {\n tasks.push(\n new Promise((resolve) => {\n try {\n uspApi(\"getUSPData\", 1, (data, success) => {\n if (success && typeof data?.uspString === \"string\" && data.uspString) {\n signals.usPrivacy = data.uspString;\n }\n resolve();\n });\n } catch {\n resolve();\n }\n setTimeout(resolve, timeoutMs);\n })\n );\n }\n if (tasks.length === 0) {\n return Promise.resolve(signals);\n }\n return Promise.all(tasks).then(() => signals);\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n applyVastMacros,\n fetchConsentSignals,\n generateCorrelator\n});\n","export interface VastConsentSignals {\n gdpr?: string | undefined;\n gdprConsent?: string | undefined;\n usPrivacy?: string | undefined;\n}\n\nexport interface VastMacroContext {\n correlator: string;\n streamCorrelator: string;\n pod?: number | undefined;\n adPosition?: number | undefined;\n isCtv?: boolean | undefined;\n contentUrl?: string | undefined;\n pageUrl?: string | undefined;\n adWillPlayMuted?: boolean | undefined;\n adWillAutoPlay?: boolean | undefined;\n appId?: string | undefined;\n appName?: string | undefined;\n sessionId?: string | undefined;\n deviceId?: string | undefined;\n deviceIdType?: string | undefined;\n limitAdTracking?: boolean | undefined;\n deviceTypeHint?: number | undefined;\n adTest?: boolean | undefined;\n consent?: VastConsentSignals | undefined;\n}\n\nexport function generateCorrelator(): string {\n if (typeof crypto !== \"undefined\" && crypto.getRandomValues) {\n try {\n const buf = new Uint32Array(2);\n crypto.getRandomValues(buf);\n const value = (buf[0] ?? 0) * 0x200000 + ((buf[1] ?? 0) & 0x1fffff);\n if (value > 0) {\n return String(value);\n }\n } catch {\n }\n }\n return String(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1);\n}\n\nconst UNEXPANDED_MACRO_PATTERN = /^(\\[[^\\]]*\\]|\\{[^}]*\\}|%%[^%]*%%)$/;\nconst CTV_UNSUPPORTED_PARAMS = [\n \"description_url\",\n \"tfcd\",\n \"npa\",\n \"min_ad_duration\",\n \"max_ad_duration\",\n \"unviewed_position_start\",\n \"impl\",\n \"scor\",\n \"vad_type\",\n \"gdpr\",\n \"gdpr_consent\",\n \"us_privacy\",\n];\n\nexport function applyVastMacros(\n baseUrl: string,\n ctx: VastMacroContext\n): string {\n let url: URL;\n try {\n url = new URL(baseUrl);\n } catch {\n return replaceCorrelatorFallback(baseUrl, ctx.correlator);\n }\n\n const params = url.searchParams;\n\n params.set(\"correlator\", ctx.correlator);\n if (ctx.isCtv) {\n for (const key of CTV_UNSUPPORTED_PARAMS) {\n params.delete(key);\n }\n } else {\n params.set(\"scor\", ctx.streamCorrelator);\n }\n\n if (ctx.pod != null) {\n params.set(\"pod\", String(ctx.pod));\n }\n if (ctx.adPosition != null) {\n params.set(\"ppos\", String(ctx.adPosition));\n }\n\n const requestUrl = ctx.contentUrl || ctx.pageUrl;\n if (requestUrl) {\n params.set(\"url\", requestUrl);\n if (!ctx.isCtv) {\n params.set(\"description_url\", requestUrl);\n }\n }\n\n if (ctx.adWillPlayMuted != null) {\n params.set(\"vpmute\", ctx.adWillPlayMuted ? \"1\" : \"0\");\n }\n if (ctx.adWillAutoPlay != null) {\n params.set(\"vpa\", ctx.adWillAutoPlay ? \"auto\" : \"click\");\n }\n\n if (ctx.appId) {\n params.set(\"msid\", ctx.appId);\n }\n if (ctx.appName) {\n params.set(\"an\", ctx.appName);\n }\n if (ctx.sessionId) {\n params.set(\"sid\", ctx.sessionId);\n }\n if (ctx.deviceTypeHint != null) {\n params.set(\"dth\", String(ctx.deviceTypeHint));\n } else if (ctx.isCtv) {\n params.set(\"dth\", \"5\");\n }\n\n if (ctx.deviceId && ctx.deviceIdType) {\n params.set(\"rdid\", ctx.deviceId);\n params.set(\"idtype\", ctx.deviceIdType);\n params.set(\"is_lat\", ctx.limitAdTracking ? \"1\" : \"0\");\n } else {\n params.delete(\"rdid\");\n params.delete(\"idtype\");\n params.delete(\"is_lat\");\n }\n\n if (!ctx.isCtv) {\n const consent = ctx.consent;\n if (consent?.gdpr != null) {\n params.set(\"gdpr\", consent.gdpr);\n }\n if (consent?.gdprConsent != null) {\n params.set(\"gdpr_consent\", consent.gdprConsent);\n }\n if (consent?.usPrivacy != null) {\n params.set(\"us_privacy\", consent.usPrivacy);\n }\n }\n\n if (ctx.adTest) {\n params.set(\"adtest\", \"on\");\n }\n\n const staleKeys: string[] = [];\n params.forEach((value, key) => {\n if (UNEXPANDED_MACRO_PATTERN.test(value)) {\n staleKeys.push(key);\n }\n });\n for (const key of staleKeys) {\n params.delete(key);\n }\n\n return url.toString();\n}\n\nfunction replaceCorrelatorFallback(baseUrl: string, correlator: string): string {\n const correlatorRegex = /([?&])correlator=([^&]*)/;\n if (correlatorRegex.test(baseUrl)) {\n return baseUrl.replace(correlatorRegex, `$1correlator=${correlator}`);\n }\n const sep = baseUrl.includes(\"?\") ? \"&\" : \"?\";\n return `${baseUrl}${sep}correlator=${correlator}`;\n}\n\nexport function fetchConsentSignals(\n timeoutMs: number = 1500\n): Promise<VastConsentSignals> {\n const signals: VastConsentSignals = {};\n if (typeof window === \"undefined\") {\n return Promise.resolve(signals);\n }\n\n const tasks: Promise<void>[] = [];\n\n const tcfApi = (window as any).__tcfapi;\n if (typeof tcfApi === \"function\") {\n tasks.push(\n new Promise<void>((resolve) => {\n let settled = false;\n try {\n tcfApi(\"addEventListener\", 2, (tcData: any, success: boolean) => {\n if (settled) return;\n if (\n success &&\n tcData &&\n (tcData.eventStatus === \"tcloaded\" ||\n tcData.eventStatus === \"useractioncomplete\")\n ) {\n settled = true;\n signals.gdpr = tcData.gdprApplies ? \"1\" : \"0\";\n if (typeof tcData.tcString === \"string\" && tcData.tcString) {\n signals.gdprConsent = tcData.tcString;\n }\n try {\n tcfApi(\"removeEventListener\", 2, () => {}, tcData.listenerId);\n } catch {}\n resolve();\n }\n });\n } catch {\n resolve();\n }\n setTimeout(() => {\n if (!settled) {\n settled = true;\n resolve();\n }\n }, timeoutMs);\n })\n );\n }\n\n const uspApi = (window as any).__uspapi;\n if (typeof uspApi === \"function\") {\n tasks.push(\n new Promise<void>((resolve) => {\n try {\n uspApi(\"getUSPData\", 1, (data: any, success: boolean) => {\n if (success && typeof data?.uspString === \"string\" && data.uspString) {\n signals.usPrivacy = data.uspString;\n }\n resolve();\n });\n } catch {\n resolve();\n }\n setTimeout(resolve, timeoutMs);\n })\n );\n }\n\n if (tasks.length === 0) {\n return Promise.resolve(signals);\n }\n\n return Promise.all(tasks).then(() => signals);\n}\n"]}
@@ -8,12 +8,18 @@ interface VastMacroContext {
8
8
  streamCorrelator: string;
9
9
  pod?: number | undefined;
10
10
  adPosition?: number | undefined;
11
+ isCtv?: boolean | undefined;
12
+ contentUrl?: string | undefined;
11
13
  pageUrl?: string | undefined;
12
14
  adWillPlayMuted?: boolean | undefined;
13
15
  adWillAutoPlay?: boolean | undefined;
16
+ appId?: string | undefined;
17
+ appName?: string | undefined;
18
+ sessionId?: string | undefined;
14
19
  deviceId?: string | undefined;
15
20
  deviceIdType?: string | undefined;
16
21
  limitAdTracking?: boolean | undefined;
22
+ deviceTypeHint?: number | undefined;
17
23
  adTest?: boolean | undefined;
18
24
  consent?: VastConsentSignals | undefined;
19
25
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stormcloud-video-player",
3
- "version": "0.8.13",
3
+ "version": "0.8.14",
4
4
  "main": "lib/index.js",
5
5
  "typings": "lib/index.d.ts",
6
6
  "scripts": {