solo-analytics 0.2.0 → 0.3.2
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 +228 -326
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +125 -0
- package/dist/index.d.ts +124 -3
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +52 -36
- package/dist/composables/useSoloAnalytics.d.ts +0 -46
- package/dist/composables/useSoloAnalytics.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/solo-analytics.js +0 -475
- package/dist/solo-analytics.js.map +0 -1
- package/dist/solo-analytics.umd.cjs +0 -2
- package/dist/solo-analytics.umd.cjs.map +0 -1
- package/dist/types/analytics.d.ts +0 -87
- package/dist/types/analytics.d.ts.map +0 -1
- package/dist/utils/features.d.ts +0 -24
- package/dist/utils/features.d.ts.map +0 -1
- package/dist/utils/location.d.ts +0 -6
- package/dist/utils/location.d.ts.map +0 -1
- package/dist/utils/network.d.ts +0 -6
- package/dist/utils/network.d.ts.map +0 -1
- package/dist/utils/parseUserAgent.d.ts +0 -16
- package/dist/utils/parseUserAgent.d.ts.map +0 -1
- package/dist/utils/performance.d.ts +0 -6
- package/dist/utils/performance.d.ts.map +0 -1
- package/dist/utils/scheduleIdle.d.ts +0 -6
- package/dist/utils/scheduleIdle.d.ts.map +0 -1
- package/dist/utils/screen.d.ts +0 -6
- package/dist/utils/screen.d.ts.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"solo-analytics.umd.cjs","sources":["../src/utils/parseUserAgent.ts","../src/utils/performance.ts","../src/utils/network.ts","../src/utils/screen.ts","../src/utils/location.ts","../src/utils/scheduleIdle.ts","../src/utils/features.ts","../src/composables/useSoloAnalytics.ts"],"sourcesContent":["import { BrowserInfo, OSInfo, DeviceInfo } from '../types/analytics';\n\nexport interface ParseUserAgentOptions {\n vendor?: string;\n innerWidth?: number;\n innerHeight?: number;\n maxTouchPoints?: number;\n}\n\n/**\n * Parses the user agent string and returns detailed information about browser, OS, and device\n */\nexport function parseUserAgent(\n ua: string,\n options: ParseUserAgentOptions = {},\n): {\n browser: BrowserInfo;\n os: OSInfo;\n device: DeviceInfo;\n} {\n const vendor =\n options.vendor ??\n (typeof navigator !== 'undefined' ? navigator.vendor : '');\n const innerWidth =\n options.innerWidth ??\n (typeof window !== 'undefined' ? window.innerWidth : 1024);\n const innerHeight =\n options.innerHeight ??\n (typeof window !== 'undefined' ? window.innerHeight : 768);\n const maxTouchPoints =\n options.maxTouchPoints ??\n (typeof navigator !== 'undefined' && 'maxTouchPoints' in navigator\n ? navigator.maxTouchPoints\n : 0);\n\n // Browser detection\n const getBrowser = (): BrowserInfo => {\n const browsers = [\n { name: 'Edge', regex: /Edg(?:e|A|iOS)?\\/([0-9\\.]+)/ },\n { name: 'Samsung Browser', regex: /SamsungBrowser\\/([0-9\\.]+)/ },\n { name: 'Opera', regex: /(?:Opera|OPR)\\/([0-9\\.]+)/ },\n { name: 'Firefox', regex: /Firefox\\/([0-9\\.]+)/ },\n { name: 'Chrome', regex: /Chrome\\/([0-9\\.]+)/ },\n { name: 'Safari', regex: /Version\\/([0-9\\.]+).*Safari/ },\n { name: 'IE', regex: /MSIE|Trident/ }\n ];\n\n for (const browser of browsers) {\n const match = ua.match(browser.regex);\n if (match) {\n const version = match[1] || '';\n const major = version.split('.')[0] || '';\n\n // Engine detection\n let engine = 'Unknown';\n let engineVersion = '';\n \n if (ua.includes('AppleWebKit')) {\n const webkitMatch = ua.match(/AppleWebKit\\/([0-9\\.]+)/);\n engine = 'WebKit';\n engineVersion = webkitMatch ? webkitMatch[1] : '';\n } else if (ua.includes('Gecko')) {\n engine = 'Gecko';\n const geckoMatch = ua.match(/rv:([0-9\\.]+)/);\n engineVersion = geckoMatch ? geckoMatch[1] : '';\n } else if (ua.includes('Trident')) {\n engine = 'Trident';\n const tridentMatch = ua.match(/Trident\\/([0-9\\.]+)/);\n engineVersion = tridentMatch ? tridentMatch[1] : '';\n }\n \n return {\n name: browser.name,\n version,\n major,\n userAgent: ua,\n vendor,\n engine,\n engineVersion\n };\n }\n }\n\n return {\n name: 'Unknown',\n version: '',\n major: '',\n userAgent: ua,\n vendor,\n engine: 'Unknown',\n engineVersion: ''\n };\n };\n\n // OS detection\n const getOS = (): OSInfo => {\n const osMatchers = [\n { name: 'iOS', regex: /iPhone|iPad|iPod/ },\n { name: 'Android', regex: /Android ([0-9\\.]+)/ },\n { name: 'Windows', regex: /Windows NT ([0-9\\.]+)/ },\n { name: 'macOS', regex: /Mac OS X ([0-9_\\.]+)/ },\n { name: 'Linux', regex: /Linux/ }\n ];\n\n for (const os of osMatchers) {\n const match = ua.match(os.regex);\n if (match) {\n let version = '';\n if (match[1]) {\n version = os.name === 'macOS' \n ? match[1].replace(/_/g, '.') \n : match[1];\n }\n \n return {\n name: os.name,\n version,\n architecture: ua.includes('x64') || ua.includes('x86_64') ? '64-bit' : '32-bit'\n };\n }\n }\n\n return {\n name: 'Unknown',\n version: '',\n architecture: ua.includes('x64') || ua.includes('x86_64') ? '64-bit' : '32-bit'\n };\n };\n\n // Device detection\n const getDevice = (): DeviceInfo => {\n const isMobileDevice = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua);\n const isTablet = /iPad|Android(?!.*Mobile)/i.test(ua);\n \n let vendor = 'Unknown';\n let model = 'Unknown';\n \n if (ua.includes('iPhone') || ua.includes('iPad') || ua.includes('iPod')) {\n vendor = 'Apple';\n if (ua.includes('iPhone')) model = 'iPhone';\n if (ua.includes('iPad')) model = 'iPad';\n if (ua.includes('iPod')) model = 'iPod';\n } else if (ua.includes('Samsung')) {\n vendor = 'Samsung';\n } else if (ua.includes('Pixel')) {\n vendor = 'Google';\n const pixelMatch = ua.match(/Pixel ([0-9XL]+)/);\n if (pixelMatch) model = `Pixel ${pixelMatch[1]}`;\n }\n \n const deviceType = isTablet ? 'tablet' : (isMobileDevice ? 'mobile' : 'desktop');\n \n return {\n type: deviceType,\n vendor,\n model,\n orientation: innerHeight > innerWidth ? 'portrait' : 'landscape',\n isMobile: deviceType === 'mobile',\n isTablet: deviceType === 'tablet',\n isDesktop: deviceType === 'desktop',\n touch: maxTouchPoints > 0,\n };\n };\n\n return {\n browser: getBrowser(),\n os: getOS(),\n device: getDevice()\n };\n}","import { PerformanceInfo } from '../types/analytics';\n\n/**\n * Collects performance metrics from browser APIs\n */\nexport function getPerformanceInfo(): PerformanceInfo {\n const getNavigationInfo = () => {\n if (!window.performance || !window.performance.navigation) {\n return { type: 'Unknown', redirectCount: 0 };\n }\n \n const navTypes = ['navigate', 'reload', 'back_forward', 'prerender'];\n const navType = navTypes[window.performance.navigation.type] || 'Unknown';\n \n return {\n type: navType,\n redirectCount: window.performance.navigation.redirectCount\n };\n };\n\n const getTimingInfo = () => {\n if (!window.performance || !window.performance.timing) {\n return {\n loadTime: 0,\n domContentLoaded: 0,\n firstPaint: null,\n firstContentfulPaint: null\n };\n }\n\n const timing = window.performance.timing;\n const loadTime = timing.loadEventEnd - timing.navigationStart;\n const domContentLoaded = timing.domContentLoadedEventEnd - timing.navigationStart;\n\n // Get first paint and first contentful paint\n let firstPaint = null;\n let firstContentfulPaint = null;\n\n if (window.performance && typeof window.performance.getEntriesByType === 'function') {\n const paintMetrics = window.performance.getEntriesByType('paint');\n \n const fp = paintMetrics.find(entry => entry.name === 'first-paint');\n const fcp = paintMetrics.find(entry => entry.name === 'first-contentful-paint');\n \n if (fp) firstPaint = fp.startTime;\n if (fcp) firstContentfulPaint = fcp.startTime;\n }\n\n return {\n loadTime,\n domContentLoaded,\n firstPaint,\n firstContentfulPaint\n };\n };\n\n const getMemoryInfo = () => {\n // @ts-ignore: performance.memory is non-standard (Chrome only)\n if (window.performance && window.performance.memory) {\n // @ts-ignore\n const memory = window.performance.memory;\n return {\n jsHeapSizeLimit: memory.jsHeapSizeLimit,\n totalJSHeapSize: memory.totalJSHeapSize,\n usedJSHeapSize: memory.usedJSHeapSize\n };\n }\n return null;\n };\n\n return {\n memory: getMemoryInfo(),\n navigation: getNavigationInfo(),\n timing: getTimingInfo()\n };\n} ","import { NetworkInfo } from '../types/analytics';\n\n/**\n * Collects network information from browser APIs\n */\nexport function getNetworkInfo(): NetworkInfo {\n const online = typeof navigator !== 'undefined' ? navigator.onLine : false;\n \n // Default values\n let effectiveType = 'unknown';\n let downlink = 0;\n let rtt = 0;\n let saveData = false;\n\n // NetworkInformation API (limited browser support)\n // @ts-ignore: connection property is non-standard\n if (navigator && navigator.connection) {\n // @ts-ignore\n const connection = navigator.connection;\n \n effectiveType = connection.effectiveType || effectiveType;\n downlink = connection.downlink || downlink;\n rtt = connection.rtt || rtt;\n saveData = connection.saveData || saveData;\n }\n\n return {\n online,\n effectiveType,\n downlink,\n rtt,\n saveData\n };\n} ","import { ScreenInfo } from '../types/analytics';\n\n/**\n * Collects screen information from browser APIs\n */\nexport function getScreenInfo(): ScreenInfo {\n if (typeof window === 'undefined' || typeof screen === 'undefined') {\n return {\n width: 0,\n height: 0,\n availWidth: 0,\n availHeight: 0,\n colorDepth: 0,\n orientation: 'unknown',\n pixelRatio: 1,\n touchPoints: 0\n };\n }\n\n // Get screen orientation\n let orientation = 'unknown';\n if (window.innerHeight > window.innerWidth) {\n orientation = 'portrait';\n } else {\n orientation = 'landscape';\n }\n\n // Try to get more precise orientation if available\n // @ts-ignore: screen.orientation is non-standard\n if (screen.orientation && screen.orientation.type) {\n // @ts-ignore\n orientation = screen.orientation.type;\n }\n\n // Get pixel ratio\n const pixelRatio = window.devicePixelRatio || 1;\n\n // Get touch points\n const touchPoints = navigator.maxTouchPoints || 0;\n\n return {\n width: screen.width,\n height: screen.height,\n availWidth: screen.availWidth,\n availHeight: screen.availHeight,\n colorDepth: screen.colorDepth,\n orientation,\n pixelRatio,\n touchPoints\n };\n} ","import { LocationInfo } from '../types/analytics';\n\n/**\n * Collects location and environment information from browser APIs\n */\nexport function getLocationInfo(): LocationInfo {\n if (typeof window === 'undefined' || typeof navigator === 'undefined') {\n return {\n timeZone: '',\n language: '',\n languages: [],\n isRestricted: false,\n doNotTrack: null,\n cookiesEnabled: false,\n localStorage: false,\n sessionStorage: false\n };\n }\n\n // Get timezone\n const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n // Get language info\n const language = navigator.language || '';\n const languages = navigator.languages ? Array.from(navigator.languages) : [language];\n\n // Check if window is restricted (e.g., iframe with restricted access)\n let isRestricted = false;\n try {\n isRestricted = window.self !== window.top;\n } catch (e) {\n isRestricted = true;\n }\n\n // Check Do Not Track setting\n let doNotTrack = null;\n if (navigator.doNotTrack === '1' || navigator.doNotTrack === 'yes') {\n doNotTrack = true;\n } else if (navigator.doNotTrack === '0' || navigator.doNotTrack === 'no') {\n doNotTrack = false;\n }\n\n // Check if cookies are enabled\n const cookiesEnabled = navigator.cookieEnabled;\n\n // Check for storage availability\n const checkStorage = (type: 'localStorage' | 'sessionStorage'): boolean => {\n try {\n const storage = window[type];\n const testKey = `__test_${type}__`;\n storage.setItem(testKey, 'test');\n storage.removeItem(testKey);\n return true;\n } catch (e) {\n return false;\n }\n };\n\n return {\n timeZone,\n language,\n languages,\n isRestricted,\n doNotTrack,\n cookiesEnabled,\n localStorage: checkStorage('localStorage'),\n sessionStorage: checkStorage('sessionStorage')\n };\n} ","/**\n * Schedules work during browser idle time to avoid blocking the main thread.\n * Falls back to setTimeout when requestIdleCallback is unavailable.\n */\nexport function scheduleIdle(callback: () => void | Promise<void>, timeout = 2000): void {\n if (typeof window === 'undefined') {\n void Promise.resolve().then(callback);\n return;\n }\n\n const run = (): void => {\n void Promise.resolve(callback());\n };\n\n if ('requestIdleCallback' in window) {\n window.requestIdleCallback(() => run(), { timeout });\n return;\n }\n\n setTimeout(run, 0);\n}\n","/**\n * Detects if the current browser is running in incognito/private mode\n */\nexport async function detectIncognito(): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n // First attempt: Test IndexedDB availability\n if (typeof window === 'undefined') {\n resolve(false);\n return;\n }\n\n const db = indexedDB.open('test');\n db.onerror = () => resolve(true);\n db.onsuccess = () => resolve(false);\n\n // Fallback: If no response after a timeout, assume not incognito\n setTimeout(() => resolve(false), 1000);\n });\n}\n\n/**\n * Checks for device media capabilities (camera/microphone)\n */\nexport async function checkMediaCapabilities(): Promise<{ \n hasCamera: boolean | null; \n hasMicrophone: boolean | null \n}> {\n if (typeof navigator === 'undefined' || !navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return { hasCamera: null, hasMicrophone: null };\n }\n\n try {\n const devices = await navigator.mediaDevices.enumerateDevices();\n const hasCamera = devices.some(device => device.kind === 'videoinput');\n const hasMicrophone = devices.some(device => device.kind === 'audioinput');\n\n return { hasCamera, hasMicrophone };\n } catch (e) {\n return { hasCamera: null, hasMicrophone: null };\n }\n}\n\n/**\n * Checks for device battery status\n */\nexport async function getBatteryInfo(): Promise<{\n hasBattery: boolean | null;\n level: number | null;\n charging: boolean | null;\n}> {\n // @ts-ignore: getBattery method is non-standard\n if (typeof navigator === 'undefined' || !navigator.getBattery) {\n return { hasBattery: null, level: null, charging: null };\n }\n\n try {\n // @ts-ignore\n const battery = await navigator.getBattery();\n return {\n hasBattery: true,\n level: battery.level,\n charging: battery.charging\n };\n } catch (e) {\n return { hasBattery: null, level: null, charging: null };\n }\n}\n\n/**\n * Checks permission status for various browser features\n */\nexport async function checkPermissions(): Promise<Record<string, string>> {\n if (typeof navigator === 'undefined' || !navigator.permissions || !navigator.permissions.query) {\n return {};\n }\n\n const permissions: Record<string, string> = {};\n const featuresToCheck = [\n 'geolocation',\n 'notifications',\n 'push',\n 'midi',\n 'camera',\n 'microphone',\n 'background-sync',\n 'accelerometer',\n 'gyroscope',\n 'magnetometer',\n ];\n\n const results = await Promise.all(\n featuresToCheck.map(async (feature) => {\n try {\n const result = await navigator.permissions!.query({ name: feature as PermissionName });\n return [feature, result.state] as const;\n } catch {\n return [feature, 'not-supported'] as const;\n }\n }),\n );\n\n for (const [feature, state] of results) {\n permissions[feature] = state;\n }\n\n return permissions;\n} ","import { SoloAnalyticsInfo } from '../types/analytics';\n\nimport { parseUserAgent } from '../utils/parseUserAgent';\nimport { getPerformanceInfo } from '../utils/performance';\nimport { getNetworkInfo } from '../utils/network';\nimport { getScreenInfo } from '../utils/screen';\nimport { getLocationInfo } from '../utils/location';\nimport { scheduleIdle } from '../utils/scheduleIdle';\nimport {\n detectIncognito,\n checkMediaCapabilities,\n getBatteryInfo,\n checkPermissions,\n} from '../utils/features';\n\n/**\n * Type definition for analytics options\n */\nexport interface SoloAnalyticsOptions {\n /** Automatically refresh dynamic data (network, performance) */\n autoRefresh?: boolean;\n /** Refresh interval in milliseconds (default: 30000) */\n refreshInterval?: number;\n /** Track page visibility changes */\n trackVisibility?: boolean;\n /**\n * Run expensive async probes (incognito, battery, media, permissions).\n * Set to `false` to skip entirely and reduce main-thread work.\n * @default true\n */\n detectFeatures?: boolean;\n /**\n * Defer async feature probes to idle time via requestIdleCallback.\n * Sync data (UA, screen, network) is collected immediately.\n * @default true\n */\n lazyFeatures?: boolean;\n}\n\n/**\n * Type definition for the return value of useSoloAnalytics\n */\nexport interface SoloAnalyticsReturn {\n data: SoloAnalyticsInfo;\n refresh: () => Promise<void>;\n isMobile: boolean;\n isTablet: boolean;\n isDesktop: boolean;\n isOnline: boolean;\n isVisible: boolean;\n browserName: string;\n osName: string;\n destroy: () => void;\n}\n\nconst createInitialData = (): SoloAnalyticsInfo => ({\n browser: {\n name: '',\n version: '',\n major: '',\n userAgent: '',\n vendor: '',\n engine: '',\n engineVersion: '',\n },\n os: {\n name: '',\n version: '',\n architecture: '',\n },\n device: {\n type: 'unknown',\n vendor: '',\n model: '',\n orientation: 'portrait',\n isMobile: false,\n isTablet: false,\n isDesktop: false,\n touch: false,\n },\n network: {\n online: false,\n effectiveType: '',\n downlink: 0,\n rtt: 0,\n saveData: false,\n },\n screen: {\n width: 0,\n height: 0,\n availWidth: 0,\n availHeight: 0,\n colorDepth: 0,\n orientation: '',\n pixelRatio: 1,\n touchPoints: 0,\n },\n performance: {\n memory: null,\n navigation: {\n type: '',\n redirectCount: 0,\n },\n timing: {\n loadTime: 0,\n domContentLoaded: 0,\n firstPaint: null,\n firstContentfulPaint: null,\n },\n },\n location: {\n timeZone: '',\n language: '',\n languages: [],\n isRestricted: false,\n doNotTrack: null,\n cookiesEnabled: false,\n localStorage: false,\n sessionStorage: false,\n },\n pageVisibility: 'visible',\n referrer: '',\n isIncognito: false,\n hasCamera: null,\n hasMicrophone: null,\n hasBattery: null,\n batteryLevel: null,\n batteryCharging: null,\n permissions: {},\n});\n\n/**\n * A function that provides comprehensive browser, device, and performance analytics.\n * @param options Configuration options\n * @returns Object with analytics data and helper methods\n */\nexport function useSoloAnalytics(options: SoloAnalyticsOptions = {}): SoloAnalyticsReturn {\n const {\n autoRefresh = false,\n refreshInterval = 30000,\n trackVisibility = true,\n detectFeatures = true,\n lazyFeatures = true,\n } = options;\n\n const analyticsData = createInitialData();\n\n let visibilityChangeListener: (() => void) | null = null;\n let refreshTimer: ReturnType<typeof setInterval> | null = null;\n let destroyed = false;\n\n const collectSyncData = (): void => {\n if (typeof navigator === 'undefined' || typeof window === 'undefined') {\n return;\n }\n\n const userAgent = navigator.userAgent;\n const { browser, os, device } = parseUserAgent(userAgent);\n\n Object.assign(analyticsData, {\n browser,\n os,\n device,\n screen: getScreenInfo(),\n location: getLocationInfo(),\n referrer: document.referrer,\n });\n };\n\n const collectAsyncFeatures = async (): Promise<void> => {\n if (!detectFeatures || destroyed) {\n return;\n }\n\n const [isIncognito, media, battery, permissions] = await Promise.all([\n detectIncognito(),\n checkMediaCapabilities(),\n getBatteryInfo(),\n checkPermissions(),\n ]);\n\n if (destroyed) {\n return;\n }\n\n Object.assign(analyticsData, {\n isIncognito,\n hasCamera: media.hasCamera,\n hasMicrophone: media.hasMicrophone,\n hasBattery: battery.hasBattery,\n batteryLevel: battery.level,\n batteryCharging: battery.charging,\n permissions,\n });\n };\n\n const collectDynamicData = (): void => {\n if (typeof navigator === 'undefined' || typeof window === 'undefined') {\n return;\n }\n\n Object.assign(analyticsData, {\n network: getNetworkInfo(),\n performance: getPerformanceInfo(),\n pageVisibility: document.visibilityState === 'visible' ? 'visible' : 'hidden',\n });\n };\n\n const runFeatureDetection = (): void => {\n if (!detectFeatures) {\n return;\n }\n\n const run = (): void => {\n void collectAsyncFeatures();\n };\n\n if (lazyFeatures) {\n scheduleIdle(run);\n return;\n }\n\n run();\n };\n\n if (trackVisibility && typeof document !== 'undefined') {\n const handleVisibilityChange = (): void => {\n analyticsData.pageVisibility =\n document.visibilityState === 'visible' ? 'visible' : 'hidden';\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n visibilityChangeListener = handleVisibilityChange;\n }\n\n if (autoRefresh && typeof window !== 'undefined') {\n refreshTimer = setInterval(collectDynamicData, refreshInterval);\n }\n\n const init = (): void => {\n collectSyncData();\n collectDynamicData();\n runFeatureDetection();\n };\n\n init();\n\n const refresh = async (): Promise<void> => {\n collectSyncData();\n collectDynamicData();\n await collectAsyncFeatures();\n };\n\n const destroy = (): void => {\n destroyed = true;\n\n if (refreshTimer !== null) {\n clearInterval(refreshTimer);\n refreshTimer = null;\n }\n\n if (visibilityChangeListener && typeof document !== 'undefined') {\n document.removeEventListener('visibilitychange', visibilityChangeListener);\n visibilityChangeListener = null;\n }\n };\n\n return {\n data: analyticsData,\n refresh,\n destroy,\n get isMobile(): boolean {\n return analyticsData.device.isMobile;\n },\n get isTablet(): boolean {\n return analyticsData.device.isTablet;\n },\n get isDesktop(): boolean {\n return analyticsData.device.isDesktop;\n },\n get isOnline(): boolean {\n return analyticsData.network.online;\n },\n get isVisible(): boolean {\n return analyticsData.pageVisibility === 'visible';\n },\n get browserName(): string {\n return analyticsData.browser.name;\n },\n get osName(): string {\n return analyticsData.os.name;\n },\n };\n}\n"],"names":["parseUserAgent","ua","options","vendor","innerWidth","innerHeight","maxTouchPoints","getBrowser","browsers","browser","match","version","major","engine","engineVersion","webkitMatch","geckoMatch","tridentMatch","getOS","osMatchers","os","getDevice","isMobileDevice","isTablet","model","pixelMatch","deviceType","getPerformanceInfo","getNavigationInfo","getTimingInfo","timing","loadTime","domContentLoaded","firstPaint","firstContentfulPaint","paintMetrics","fp","entry","fcp","memory","getNetworkInfo","online","effectiveType","downlink","rtt","saveData","connection","getScreenInfo","orientation","pixelRatio","touchPoints","getLocationInfo","timeZone","language","languages","isRestricted","doNotTrack","cookiesEnabled","checkStorage","type","storage","testKey","scheduleIdle","callback","timeout","run","detectIncognito","resolve","db","checkMediaCapabilities","devices","hasCamera","device","hasMicrophone","getBatteryInfo","battery","checkPermissions","permissions","featuresToCheck","results","feature","result","state","createInitialData","useSoloAnalytics","autoRefresh","refreshInterval","trackVisibility","detectFeatures","lazyFeatures","analyticsData","visibilityChangeListener","refreshTimer","destroyed","collectSyncData","userAgent","collectAsyncFeatures","isIncognito","media","collectDynamicData","runFeatureDetection","handleVisibilityChange"],"mappings":"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"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
export interface BrowserInfo {
|
|
2
|
-
name: string;
|
|
3
|
-
version: string;
|
|
4
|
-
major: string;
|
|
5
|
-
userAgent: string;
|
|
6
|
-
vendor: string;
|
|
7
|
-
engine: string;
|
|
8
|
-
engineVersion: string;
|
|
9
|
-
}
|
|
10
|
-
export interface OSInfo {
|
|
11
|
-
name: string;
|
|
12
|
-
version: string;
|
|
13
|
-
architecture: string;
|
|
14
|
-
}
|
|
15
|
-
export interface DeviceInfo {
|
|
16
|
-
type: 'mobile' | 'tablet' | 'desktop' | 'unknown';
|
|
17
|
-
vendor: string;
|
|
18
|
-
model: string;
|
|
19
|
-
orientation: 'portrait' | 'landscape';
|
|
20
|
-
isMobile: boolean;
|
|
21
|
-
isTablet: boolean;
|
|
22
|
-
isDesktop: boolean;
|
|
23
|
-
touch: boolean;
|
|
24
|
-
}
|
|
25
|
-
export interface NetworkInfo {
|
|
26
|
-
online: boolean;
|
|
27
|
-
effectiveType: string;
|
|
28
|
-
downlink: number;
|
|
29
|
-
rtt: number;
|
|
30
|
-
saveData: boolean;
|
|
31
|
-
}
|
|
32
|
-
export interface ScreenInfo {
|
|
33
|
-
width: number;
|
|
34
|
-
height: number;
|
|
35
|
-
availWidth: number;
|
|
36
|
-
availHeight: number;
|
|
37
|
-
colorDepth: number;
|
|
38
|
-
orientation: string;
|
|
39
|
-
pixelRatio: number;
|
|
40
|
-
touchPoints: number;
|
|
41
|
-
}
|
|
42
|
-
export interface PerformanceInfo {
|
|
43
|
-
memory: {
|
|
44
|
-
jsHeapSizeLimit: number;
|
|
45
|
-
totalJSHeapSize: number;
|
|
46
|
-
usedJSHeapSize: number;
|
|
47
|
-
} | null;
|
|
48
|
-
navigation: {
|
|
49
|
-
type: string;
|
|
50
|
-
redirectCount: number;
|
|
51
|
-
};
|
|
52
|
-
timing: {
|
|
53
|
-
loadTime: number;
|
|
54
|
-
domContentLoaded: number;
|
|
55
|
-
firstPaint: number | null;
|
|
56
|
-
firstContentfulPaint: number | null;
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
export interface LocationInfo {
|
|
60
|
-
timeZone: string;
|
|
61
|
-
language: string;
|
|
62
|
-
languages: string[];
|
|
63
|
-
isRestricted: boolean;
|
|
64
|
-
doNotTrack: boolean | null;
|
|
65
|
-
cookiesEnabled: boolean;
|
|
66
|
-
localStorage: boolean;
|
|
67
|
-
sessionStorage: boolean;
|
|
68
|
-
}
|
|
69
|
-
export interface SoloAnalyticsInfo {
|
|
70
|
-
browser: BrowserInfo;
|
|
71
|
-
os: OSInfo;
|
|
72
|
-
device: DeviceInfo;
|
|
73
|
-
network: NetworkInfo;
|
|
74
|
-
screen: ScreenInfo;
|
|
75
|
-
performance: PerformanceInfo;
|
|
76
|
-
location: LocationInfo;
|
|
77
|
-
pageVisibility: 'visible' | 'hidden';
|
|
78
|
-
referrer: string;
|
|
79
|
-
isIncognito: boolean;
|
|
80
|
-
hasCamera: boolean | null;
|
|
81
|
-
hasMicrophone: boolean | null;
|
|
82
|
-
hasBattery: boolean | null;
|
|
83
|
-
batteryLevel: number | null;
|
|
84
|
-
batteryCharging: boolean | null;
|
|
85
|
-
permissions: Record<string, string>;
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/types/analytics.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/features.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Detects if the current browser is running in incognito/private mode
|
|
3
|
-
*/
|
|
4
|
-
export declare function detectIncognito(): Promise<boolean>;
|
|
5
|
-
/**
|
|
6
|
-
* Checks for device media capabilities (camera/microphone)
|
|
7
|
-
*/
|
|
8
|
-
export declare function checkMediaCapabilities(): Promise<{
|
|
9
|
-
hasCamera: boolean | null;
|
|
10
|
-
hasMicrophone: boolean | null;
|
|
11
|
-
}>;
|
|
12
|
-
/**
|
|
13
|
-
* Checks for device battery status
|
|
14
|
-
*/
|
|
15
|
-
export declare function getBatteryInfo(): Promise<{
|
|
16
|
-
hasBattery: boolean | null;
|
|
17
|
-
level: number | null;
|
|
18
|
-
charging: boolean | null;
|
|
19
|
-
}>;
|
|
20
|
-
/**
|
|
21
|
-
* Checks permission status for various browser features
|
|
22
|
-
*/
|
|
23
|
-
export declare function checkPermissions(): Promise<Record<string, string>>;
|
|
24
|
-
//# sourceMappingURL=features.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../src/utils/features.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAexD;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IACtD,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,OAAO,GAAG,IAAI,CAAA;CAC9B,CAAC,CAcD;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC;IAC9C,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;CAC1B,CAAC,CAiBD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAmCxE"}
|
package/dist/utils/location.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../src/utils/location.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CA+D9C"}
|
package/dist/utils/network.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;GAEG;AACH,wBAAgB,cAAc,IAAI,WAAW,CA4B5C"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { BrowserInfo, OSInfo, DeviceInfo } from '../types/analytics';
|
|
2
|
-
export interface ParseUserAgentOptions {
|
|
3
|
-
vendor?: string;
|
|
4
|
-
innerWidth?: number;
|
|
5
|
-
innerHeight?: number;
|
|
6
|
-
maxTouchPoints?: number;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Parses the user agent string and returns detailed information about browser, OS, and device
|
|
10
|
-
*/
|
|
11
|
-
export declare function parseUserAgent(ua: string, options?: ParseUserAgentOptions): {
|
|
12
|
-
browser: BrowserInfo;
|
|
13
|
-
os: OSInfo;
|
|
14
|
-
device: DeviceInfo;
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=parseUserAgent.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseUserAgent.d.ts","sourceRoot":"","sources":["../../src/utils/parseUserAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,qBAA0B,GAClC;IACD,OAAO,EAAE,WAAW,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;CACpB,CAsJA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../src/utils/performance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAsEpD"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Schedules work during browser idle time to avoid blocking the main thread.
|
|
3
|
-
* Falls back to setTimeout when requestIdleCallback is unavailable.
|
|
4
|
-
*/
|
|
5
|
-
export declare function scheduleIdle(callback: () => void | Promise<void>, timeout?: number): void;
|
|
6
|
-
//# sourceMappingURL=scheduleIdle.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scheduleIdle.d.ts","sourceRoot":"","sources":["../../src/utils/scheduleIdle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,SAAO,GAAG,IAAI,CAgBvF"}
|
package/dist/utils/screen.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../src/utils/screen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD;;GAEG;AACH,wBAAgB,aAAa,IAAI,UAAU,CA6C1C"}
|