react-track-hooks 1.0.2 → 1.0.3
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 +146 -42
- package/dist/index.cjs.js +384 -70
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +14 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +384 -71
- package/dist/index.esm.js.map +1 -1
- package/dist/trackHooks.d.ts +7 -6
- package/dist/trackHooks.d.ts.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +6 -0
- package/dist/utils.d.ts.map +1 -0
- package/package.json +2 -2
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/types.ts","../src/trackHooks.ts"],"sourcesContent":["// src/types.ts\nexport enum TrackType {\n CLICK = 'click',\n EXPOSURE = 'exposure',\n PAGE_STAY = 'page_stay',\n CUSTOM = 'custom'\n}\n\nexport interface TrackParams {\n eventName: string;\n type: TrackType;\n [key: string]: any;\n}\n\n// 新增:全局配置类型\nexport interface TrackGlobalConfig {\n // 埋点上报接口 URL\n trackUrl: string;\n // 是否开启埋点\n enable?: boolean;\n // 重试配置\n retryConfig?: {\n maxRetryTimes: number;\n initialDelay: number;\n delayMultiplier: number;\n };\n}\n\n// 调整:TrackConfig 继承并扩展全局配置,支持单个 Hook 覆盖\nexport interface TrackConfig extends Partial<TrackGlobalConfig> {\n exposureOnce?: boolean;\n exposureThreshold?: number;\n}\n\nexport interface FailedTrackParams extends TrackParams {\n retryTime: number;\n retryCount?: number;\n}","// src/trackHooks.ts\nimport { useEffect, useRef, useCallback } from 'react';\nimport { TrackType, TrackParams, TrackConfig, TrackGlobalConfig, FailedTrackParams } from './types';\n\n// 全局配置(默认值),并提供修改全局配置的方法\nlet GLOBAL_TRACK_CONFIG: TrackGlobalConfig = {\n trackUrl: '/api/track', // 默认上报地址\n enable: true,\n retryConfig: {\n maxRetryTimes: 3,\n initialDelay: 1000,\n delayMultiplier: 2\n }\n};\n\n/**\n * 设置全局埋点配置(项目初始化时调用一次即可)\n * @param config 全局配置\n */\nexport const setTrackGlobalConfig = (config: Partial<TrackGlobalConfig>) => {\n GLOBAL_TRACK_CONFIG = { ...GLOBAL_TRACK_CONFIG, ...config };\n};\n\n// 2. 调整默认配置,合并全局配置\nconst getMergedDefaultConfig = (): TrackConfig => ({\n exposureOnce: true,\n exposureThreshold: 0.5,\n ...GLOBAL_TRACK_CONFIG // 继承全局配置(trackUrl、enable、retryConfig)\n});\n\n// ---------------------- 埋点发送 & 重试核心逻辑 ----------------------\nexport const getFailedTracks = (): FailedTrackParams[] => {\n try {\n return JSON.parse(localStorage.getItem('failedTracks') || '[]');\n } catch (error) {\n console.error('读取失败埋点数据失败:', error);\n return [];\n }\n};\n\nexport const saveFailedTracks = (tracks: FailedTrackParams[]) => {\n try {\n localStorage.setItem('failedTracks', JSON.stringify(tracks));\n } catch (error) {\n console.error('保存失败埋点数据失败:', error);\n }\n};\n\n/**\n * 重试失败的埋点(使用全局配置的 trackUrl)\n */\nexport const retryFailedTracks = async (force = false) => {\n const failedTracks = getFailedTracks();\n if (failedTracks.length === 0) return;\n\n const { retryConfig, trackUrl } = GLOBAL_TRACK_CONFIG;\n const retryableTracks = failedTracks.filter(track => {\n const currentRetryCount = track.retryCount || 0;\n const timeCondition = force || Date.now() - track.retryTime >= retryConfig!.initialDelay * Math.pow(retryConfig!.delayMultiplier, currentRetryCount);\n return currentRetryCount < retryConfig!.maxRetryTimes && timeCondition;\n });\n\n if (retryableTracks.length === 0) return;\n\n for (const track of retryableTracks) {\n try {\n // 使用全局配置的 trackUrl\n await fetch(trackUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n ...track,\n timestamp: Date.now(),\n userAgent: navigator.userAgent,\n url: window.location.href,\n referrer: document.referrer,\n retryCount: (track.retryCount || 0) + 1\n })\n });\n console.log('埋点重试成功:', track.eventName);\n const index = failedTracks.findIndex(t => t.retryTime === track.retryTime && t.eventName === track.eventName);\n if (index > -1) failedTracks.splice(index, 1);\n } catch (error) {\n console.error('埋点重试失败:', track.eventName, error);\n const index = failedTracks.findIndex(t => t.retryTime === track.retryTime && t.eventName === track.eventName);\n if (index > -1) {\n failedTracks[index].retryCount = (failedTracks[index].retryCount || 0) + 1;\n failedTracks[index].retryTime = Date.now();\n }\n }\n }\n\n saveFailedTracks(failedTracks);\n};\n\n/**\n * 通用埋点发送函数(支持单个 Hook 覆盖 trackUrl)\n * @param params 埋点参数\n * @param config 单个 Hook 的配置(可覆盖 trackUrl)\n */\nconst sendTrack = async (params: TrackParams, config: TrackConfig) => {\n if (!params.eventName) {\n console.warn('埋点缺少必要参数:eventName');\n return;\n }\n\n // 优先级:单个 Hook 配置 > 全局配置\n const finalTrackUrl = config.trackUrl || GLOBAL_TRACK_CONFIG.trackUrl;\n const isEnable = config.enable ?? GLOBAL_TRACK_CONFIG.enable;\n\n if (!isEnable) return;\n\n try {\n // 使用最终确定的 trackUrl 发送请求\n await fetch(finalTrackUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n ...params,\n timestamp: Date.now(),\n userAgent: navigator.userAgent,\n url: window.location.href,\n referrer: document.referrer\n })\n });\n console.log('埋点上报成功:', params);\n\n if (window.requestIdleCallback) {\n window.requestIdleCallback(() => retryFailedTracks(), { timeout: 2000 });\n } else {\n setTimeout(() => retryFailedTracks(), 1000);\n }\n } catch (error) {\n console.error('埋点上报失败:', error);\n const failedTracks = getFailedTracks();\n failedTracks.push({ ...params, retryTime: Date.now(), retryCount: 0 });\n saveFailedTracks(failedTracks);\n }\n};\n\n// ---------------------- 核心 Hooks 实现 ----------------------\nexport const useTrack = (params: TrackParams, config: TrackConfig = {}) => {\n // 合并默认配置(含全局配置)和单个 Hook 配置\n const mergedConfig = { ...getMergedDefaultConfig(), ...config };\n const trackRef = useRef(params);\n\n useEffect(() => {\n trackRef.current = params;\n }, [params]);\n\n const triggerTrack = useCallback((customParams = {}) => {\n const finalParams = {\n ...trackRef.current,\n ...customParams\n };\n // 把 mergedConfig 传给 sendTrack,支持覆盖 trackUrl\n sendTrack(finalParams, mergedConfig);\n }, [mergedConfig]);\n\n return { triggerTrack };\n};\n\nexport const useTrackClick = (\n eventName: string,\n customParams: Record<string, any> = {},\n config: TrackConfig = {}\n) => {\n const { triggerTrack } = useTrack(\n { eventName, type: TrackType.CLICK, ...customParams },\n config\n );\n\n const handleClick = useCallback((e?: React.MouseEvent, extraParams = {}) => {\n const clickParams = { clientX: e?.clientX || 0, clientY: e?.clientY || 0, ...extraParams };\n triggerTrack(clickParams);\n }, [triggerTrack]);\n\n return handleClick;\n};\n\nexport const useTrackExposure = <T extends HTMLElement = HTMLElement>(\n eventName: string,\n customParams: Record<string, any> = {},\n config: TrackConfig = {}\n) => {\n const mergedConfig = { ...getMergedDefaultConfig(), ...config };\n const { triggerTrack } = useTrack(\n { eventName, type: TrackType.EXPOSURE, ...customParams },\n mergedConfig\n );\n\n const targetRef = useRef<T>(null);\n const hasReported = useRef(false);\n\n useEffect(() => {\n if (!mergedConfig.enable) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting && !hasReported.current) {\n const exposureParams = {\n intersectionRatio: entry.intersectionRatio,\n boundingClientRect: entry.boundingClientRect,\n exposureTime: Date.now()\n };\n triggerTrack(exposureParams);\n\n if (mergedConfig.exposureOnce) {\n hasReported.current = true;\n observer.unobserve(entry.target);\n }\n }\n });\n },\n { threshold: mergedConfig.exposureThreshold }\n );\n\n const target = targetRef.current;\n if (target) observer.observe(target);\n\n return () => {\n if (target) observer.unobserve(target);\n observer.disconnect();\n };\n }, [mergedConfig, triggerTrack]);\n\n return targetRef;\n};\n\nexport const useTrackPageStay = (\n eventName: string,\n customParams: Record<string, any> = {},\n config: TrackConfig = {}\n) => {\n const { triggerTrack } = useTrack(\n { eventName, type: TrackType.PAGE_STAY, ...customParams },\n config\n );\n\n const startTime = useRef(Date.now());\n\n useEffect(() => {\n const handleVisibilityChange = () => {\n if (document.hidden) {\n const stayTime = Date.now() - startTime.current;\n triggerTrack({ stayTime });\n } else {\n startTime.current = Date.now();\n }\n };\n\n const handleBeforeUnload = () => {\n const stayTime = Date.now() - startTime.current;\n triggerTrack({ stayTime });\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n window.addEventListener('beforeunload', handleBeforeUnload);\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n window.removeEventListener('beforeunload', handleBeforeUnload);\n };\n }, [triggerTrack]);\n};\n\nexport const useTrackCustom = (\n eventName: string,\n customParams: Record<string, any> = {},\n config: TrackConfig = {}\n) => {\n const { triggerTrack } = useTrack(\n { eventName, type: TrackType.CUSTOM, ...customParams },\n config\n );\n\n return triggerTrack;\n};\n\nexport const useTrackRetryListener = () => {\n useEffect(() => {\n const initTimer = setTimeout(() => retryFailedTracks(), 3000);\n\n const handleVisibilityChange = () => {\n if (!document.hidden) {\n retryFailedTracks();\n }\n };\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n let idleCallbackId: number | null = null;\n const checkIdleRetry = () => {\n retryFailedTracks();\n idleCallbackId = window.requestIdleCallback(checkIdleRetry, { timeout: 30000 });\n };\n if (window.requestIdleCallback) {\n idleCallbackId = window.requestIdleCallback(checkIdleRetry, { timeout: 30000 });\n }\n\n return () => {\n clearTimeout(initTimer);\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n if (idleCallbackId !== null && window.cancelIdleCallback) {\n window.cancelIdleCallback(idleCallbackId);\n }\n };\n }, []);\n};"],"names":["TrackType","useRef","useEffect","useCallback"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/types.ts","../src/utils.ts","../src/trackHooks.ts"],"sourcesContent":["// src/types.ts\nexport enum TrackType {\n CLICK = 'click',\n EXPOSURE = 'exposure',\n PAGE_STAY = 'page_stay',\n CUSTOM = 'custom'\n}\n\nexport interface TrackParams {\n eventName: string;\n type: TrackType;\n [key: string]: any;\n}\n\n// 全局配置类型\nexport interface TrackGlobalConfig {\n // 埋点上报接口 URL\n trackUrl: string;\n // 批量上报接口 URL\n batchTrackUrl?: string;\n // 是否开启埋点\n enable?: boolean;\n // 是否开启批量上报\n enableBatch?: boolean\n // 重试配置\n retryConfig?: {\n maxRetryTimes: number;\n initialDelay: number;\n delayMultiplier: number;\n };\n // 批量上报配置\n batchConfig?: {\n batchSize: number, // 队列容量上限\n batchInterval: number, // 触发上报间隔\n }\n}\n\n// TrackConfig 继承并扩展全局配置,支持单个 Hook 覆盖\nexport interface TrackConfig extends Partial<TrackGlobalConfig> {\n exposureOnce?: boolean; // 曝光埋点仅生效一次\n exposureThreshold?: number; // 曝光埋点的阈值\n}\n\nexport interface FailedTrackParams extends TrackParams {\n retryTime: number; // 上次重试时间\n retryCount?: number; // 重试次数\n}","// 环境判断工具函数\nexport const isClient = () => {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n};\n\n/**\n * 安全设置 localStorage 数据\n */\nexport const safeLocalStorageSet = (key: string, data: any) => {\n if(!isClient()) return;\n try {\n // 限制存储大小(示例:最大500KB)\n const str = JSON.stringify(data);\n if (str.length > 500 * 1024) {\n console.warn('localStorage数据超过500KB,截断旧数据');\n // 保留最新的100条失败埋点\n if (key === 'failedTracks' && Array.isArray(data)) {\n localStorage.setItem(key, JSON.stringify(data.slice(-100)));\n return;\n }\n return;\n }\n localStorage.setItem(key, str);\n } catch (error) {\n console.error('写入localStorage失败:', error);\n }\n};","// src/trackHooks.ts\nimport { useEffect, useRef, useCallback } from 'react';\nimport { TrackType, TrackParams, TrackConfig, TrackGlobalConfig, FailedTrackParams } from './types';\nimport {isClient, safeLocalStorageSet} from \"./utils\";\n\n// 全局配置(默认值),并提供修改全局配置的方法\nlet GLOBAL_TRACK_CONFIG: TrackGlobalConfig = {\n trackUrl: '/api/track', // 默认上报地址\n batchTrackUrl: '/api/track/batch', // 批量上报地址\n enable: true,\n enableBatch: true, // 是否开启批量上报\n retryConfig: {\n maxRetryTimes: 3,\n initialDelay: 1000,\n delayMultiplier: 2\n },\n // 批量上报配置\n batchConfig: {\n batchSize: 10, // 队列达到10条时触发上报\n batchInterval: 5000, // 每5秒触发一次上报\n }\n};\n\n/**\n * 设置全局埋点配置(项目初始化时调用一次即可)\n * @param config 全局配置\n */\nexport const setTrackGlobalConfig = (config: Partial<TrackGlobalConfig>) => {\n GLOBAL_TRACK_CONFIG = { ...GLOBAL_TRACK_CONFIG, ...config };\n};\n\n// 2. 调整默认配置,合并全局配置\nexport const getMergedDefaultConfig = (): TrackConfig => ({\n exposureOnce: true,\n exposureThreshold: 0.5,\n ...GLOBAL_TRACK_CONFIG // 继承全局配置(trackUrl、enable、retryConfig)\n});\n\n\n/**\n * 通用埋点发送函数(支持单个 Hook 覆盖 trackUrl)\n * @param params 埋点参数\n * @param config 单个 Hook 的配置(可覆盖 trackUrl)\n */\nconst sendTrack = async (params: TrackParams, config: TrackConfig) => {\n // 服务端不执行\n if (!isClient()) return;\n if (!params.eventName) {\n console.warn('埋点缺少必要参数:eventName');\n return;\n }\n\n // 优先级:单个 Hook 配置 > 全局配置\n const finalTrackUrl = config.trackUrl || GLOBAL_TRACK_CONFIG.trackUrl;\n const isEnable = config.enable ?? GLOBAL_TRACK_CONFIG.enable;\n\n if (!isEnable) return;\n\n\n // 判断批量模式(单个Hook配置 > 全局配置)\n const enableBatch = config?.enableBatch ?? GLOBAL_TRACK_CONFIG?.enableBatch ?? true;\n\n if (enableBatch) {\n // 批量模式:入队 + 触发调度\n BATCH_TRACK_QUEUE.push(params);\n initBatchTimer(config);\n if (BATCH_TRACK_QUEUE.length >= (GLOBAL_TRACK_CONFIG.batchConfig?.batchSize ?? 10)) {\n processBatchQueue(config);\n }\n return;\n }\n\n try {\n // 使用最终确定的 trackUrl 发送请求\n const response = await fetch(finalTrackUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n ...params,\n timestamp: Date.now(),\n userAgent: navigator.userAgent,\n url: window.location.href,\n referrer: document.referrer\n })\n });\n\n if (!response.ok) {\n // 抛出包含状态码的异常,便于调试\n throw new Error(`HTTP 请求失败,状态码:${response.status}`);\n }\n\n console.log('埋点上报成功:', params);\n\n if (window.requestIdleCallback) {\n window.requestIdleCallback(() => retryFailedTracks(), { timeout: 2000 });\n } else {\n setTimeout(() => retryFailedTracks(), 1000);\n }\n } catch (error) {\n console.error('埋点上报失败:', error);\n const failedTracks = getFailedTracks();\n failedTracks.push({\n id: `${params.eventName}_${Date.now()}_${Math.random().toString(36).slice(2)}`,\n ...params,\n retryTime: Date.now(),\n retryCount: 0\n });\n saveFailedTracks(failedTracks);\n }\n};\n\n// ---------------------- 核心 Hooks 实现 ----------------------\nexport const useTrack = (params: TrackParams, config: TrackConfig = {}) => {\n // 合并默认配置(含全局配置)和单个 Hook 配置\n const mergedConfig = { ...getMergedDefaultConfig(), ...config };\n const trackRef = useRef(params);\n\n useEffect(() => {\n trackRef.current = params;\n }, [params]);\n\n const triggerTrack = useCallback((customParams = {}) => {\n const finalParams = {\n ...trackRef.current,\n ...customParams\n };\n // 把 mergedConfig 传给 sendTrack,支持覆盖 trackUrl\n sendTrack(finalParams, mergedConfig);\n }, [mergedConfig]);\n\n return { triggerTrack };\n};\n\nexport const useTrackClick = (\n eventName: string,\n customParams: Record<string, any> = {},\n config: TrackConfig = {}\n) => {\n const { triggerTrack } = useTrack(\n { eventName, type: TrackType.CLICK, ...customParams },\n config\n );\n\n const handleClick = useCallback((e?: React.MouseEvent, extraParams = {}) => {\n const clickParams = { clientX: e?.clientX || 0, clientY: e?.clientY || 0, ...extraParams };\n triggerTrack(clickParams);\n }, [triggerTrack]);\n\n return handleClick;\n};\n\nexport const useTrackExposure = <T extends HTMLElement = HTMLElement>(\n eventName: string,\n customParams: Record<string, any> = {},\n config: TrackConfig = {}\n) => {\n const mergedConfig = { ...getMergedDefaultConfig(), ...config };\n const { triggerTrack } = useTrack(\n { eventName, type: TrackType.EXPOSURE, ...customParams },\n mergedConfig\n );\n\n const targetRef = useRef<T>(null);\n const hasReported = useRef(false);\n\n useEffect(() => {\n if (!mergedConfig.enable) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting && !hasReported.current) {\n const exposureParams = {\n intersectionRatio: entry.intersectionRatio,\n boundingClientRect: entry.boundingClientRect,\n exposureTime: Date.now()\n };\n triggerTrack(exposureParams);\n\n if (mergedConfig.exposureOnce) {\n hasReported.current = true;\n observer.unobserve(entry.target);\n }\n }\n });\n },\n { threshold: mergedConfig.exposureThreshold }\n );\n\n const target = targetRef.current;\n if (target) observer.observe(target);\n\n return () => {\n if (target) observer.unobserve(target);\n observer.disconnect();\n };\n }, [mergedConfig, triggerTrack]);\n\n return targetRef;\n};\n\nexport const useTrackPageStay = (\n eventName: string,\n customParams: Record<string, any> = {},\n config: TrackConfig = {}\n) => {\n const { triggerTrack } = useTrack(\n { eventName, type: TrackType.PAGE_STAY, ...customParams },\n config\n );\n\n const startTime = useRef(Date.now());\n\n useEffect(() => {\n const handleVisibilityChange = () => {\n if (document.hidden) {\n const stayTime = Date.now() - startTime.current;\n triggerTrack({ stayTime });\n } else {\n startTime.current = Date.now();\n }\n };\n\n const handleBeforeUnload = () => {\n const stayTime = Date.now() - startTime.current;\n triggerTrack({ stayTime });\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n window.addEventListener('beforeunload', handleBeforeUnload);\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n window.removeEventListener('beforeunload', handleBeforeUnload);\n };\n }, [triggerTrack]);\n};\n\nexport const useTrackCustom = (\n eventName: string,\n customParams: Record<string, any> = {},\n config: TrackConfig = {}\n) => {\n const { triggerTrack } = useTrack(\n { eventName, type: TrackType.CUSTOM, ...customParams },\n config\n );\n\n return triggerTrack;\n};\n\n\n// ---------------------- 重试核心逻辑 ----------------------\n// 重试互斥锁,防止同时触发多次重试\nlet isRetryRunning = false;\n\nexport const getFailedTracks = (): FailedTrackParams[] => {\n if (!isClient()) return [];\n try {\n const rawData = localStorage.getItem('failedTracks');\n // 2. 空值直接返回空数组\n if (!rawData) return [];\n\n const parsedData = JSON.parse(rawData);\n // 3. 解析后不是数组 → 返回空数组\n if (!Array.isArray(parsedData)) {\n console.warn('failedTracks 存储的数据不是数组,已重置为空数组');\n localStorage.setItem('failedTracks', '[]'); // 重置错误数据\n return [];\n }\n return parsedData;\n } catch (error) {\n console.error('读取失败埋点数据失败:', error);\n return [];\n }\n};\n\nexport const saveFailedTracks = (tracks: FailedTrackParams[]) => {\n if (!isClient()) return;\n try {\n safeLocalStorageSet('failedTracks', tracks);\n } catch (error) {\n console.error('保存失败埋点数据失败:', error);\n }\n};\n\n/**\n * 重试失败的埋点\n */\nexport const retryFailedTracks = async (force = false) => {\n if (!isClient()) return;\n if (isRetryRunning) {\n console.debug('已有重试流程在执行,跳过本次触发');\n return;\n }\n isRetryRunning = true;\n\n try {\n let failedTracks = getFailedTracks();\n if (failedTracks.length === 0) return;\n\n const {\n retryConfig = { maxRetryTimes: 3, initialDelay: 1000, delayMultiplier: 2 },\n trackUrl,\n batchTrackUrl = trackUrl, // 批量接口默认使用单条接口\n enableBatch = false\n } = GLOBAL_TRACK_CONFIG;\n // 移除重复的默认值处理(前面已给retryConfig设默认值)\n const maxRetryTimes = retryConfig.maxRetryTimes;\n\n // 第一步:清理超过最大重试次数的埋点\n const [expiredTracks, validTracks] = failedTracks.reduce(\n (acc, track) => {\n const currentRetryCount = track.retryCount || 0;\n if (currentRetryCount >= maxRetryTimes) {\n acc[0].push(track);\n } else {\n acc[1].push(track);\n }\n return acc;\n },\n [[], []] as [FailedTrackParams[], FailedTrackParams[]]\n );\n failedTracks = validTracks;\n\n // 第二步:筛选可重试的有效埋点 指数退避算法\n const retryableTracks = failedTracks.filter(track => {\n const currentRetryCount = track.retryCount || 0;\n const backoffTime = retryConfig.initialDelay * Math.pow(retryConfig.delayMultiplier, currentRetryCount);\n const timeCondition = force || Date.now() - track.retryTime >= backoffTime;\n return timeCondition;\n });\n\n if (retryableTracks.length === 0) return;\n\n // 第三步:执行重试逻辑\n if (enableBatch) { // 批量上报\n const batchRetryTracks = retryableTracks.map(track => ({\n ...track,\n timestamp: Date.now(),\n userAgent: navigator.userAgent,\n url: window.location.href,\n referrer: document.referrer,\n retryCount: (track.retryCount || 0) + 1\n }));\n\n try {\n const response = await fetch(batchTrackUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(batchRetryTracks)\n });\n\n // 检查接口响应状态\n if (!response.ok) {\n throw new Error(`批量接口返回异常:${response.status} ${response.statusText}`);\n }\n\n console.log('批量埋点重试成功:', batchRetryTracks.length, '条');\n // 过滤掉重试成功的埋点\n failedTracks = failedTracks.filter(track =>\n !retryableTracks.some(item => item.id === track.id)\n );\n } catch (error) {\n console.error('批量埋点重试失败:', error);\n // 批量失败时更新重试次数和时间\n retryableTracks.forEach(track => {\n const index = failedTracks.findIndex(t => t.id === track.id);\n if (index > -1) {\n failedTracks[index].retryCount = (failedTracks[index].retryCount || 0) + 1;\n failedTracks[index].retryTime = Date.now();\n }\n });\n }\n } else { // 单条上报\n for (const track of retryableTracks) {\n try {\n const response = await fetch(trackUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n ...track,\n timestamp: Date.now(),\n userAgent: navigator.userAgent,\n url: window.location.href,\n referrer: document.referrer,\n retryCount: (track.retryCount || 0) + 1\n })\n });\n\n // 检查单条接口响应状态\n if (!response.ok) {\n throw new Error(`单条接口返回异常:${response.status} ${response.statusText}`);\n }\n\n console.log('埋点重试成功:', track.eventName, '(ID:', track.id, ')');\n const index = failedTracks.findIndex(t => t.id === track.id);\n if (index > -1) failedTracks.splice(index, 1);\n } catch (error) {\n console.error('埋点重试失败:', track.eventName, '(ID:', track.id, ')', error);\n const index = failedTracks.findIndex(t => t.id === track.id);\n if (index > -1) {\n failedTracks[index].retryCount = (failedTracks[index].retryCount || 0) + 1;\n failedTracks[index].retryTime = Date.now();\n }\n }\n }\n }\n\n // 第四步:保存最终的失败队列\n saveFailedTracks(failedTracks);\n } catch (error) {\n console.error('重试流程整体异常:', error);\n } finally {\n isRetryRunning = false;\n }\n};\n\n// 单例锁(全局变量)\nlet isRetryListenerRegistered = false;\nexport const useTrackRetryListener = () => {\n useEffect(() => {\n // 单例拦截:已注册过则直接返回\n if (isRetryListenerRegistered) return;\n isRetryListenerRegistered = true;\n\n // 1.首屏渲染3秒后进行重试\n const initTimer = setTimeout(() => retryFailedTracks(), 3000);\n\n // 2.页面切换监听 不可见->可见 进行重试\n const handleVisibilityChange = () => {\n if (!document.hidden) {\n retryFailedTracks();\n }\n };\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n // 3.周期性进行浏览器空闲重试,最迟30秒也会执行一次\n let idleCallbackId: number | null = null; // 空闲执行id\n let intervalId: number | null = null; // 定时器id\n\n const checkIdleRetry = () => {\n // 先检查失败队列是否为空\n const failedTracks = getFailedTracks();\n if (failedTracks.length === 0) {\n // 队列为空时,延迟1分钟再预约(减少空跑)\n setTimeout(() => {\n if (window.requestIdleCallback) {\n idleCallbackId = window.requestIdleCallback(checkIdleRetry, {timeout: 30000});\n }\n }, 60000);\n return;\n }\n\n // 进行失败重试\n retryFailedTracks();\n // 注册下一次的空闲回调\n if (window.requestIdleCallback) {\n idleCallbackId = window.requestIdleCallback(checkIdleRetry, {timeout: 30000});\n }\n };\n // 启用首次空闲回调\n if (window.requestIdleCallback) {\n idleCallbackId = window.requestIdleCallback(checkIdleRetry, { timeout: 30000 });\n } else{ // 防止浏览器不支持requestIdleCallback,兜底。每30秒执行一次\n intervalId = window.setInterval(retryFailedTracks, 30000);\n }\n\n return () => {\n // 清理首屏定时器\n if (initTimer) clearTimeout(initTimer);\n // 清理监听\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n // 清理空闲/周期重试\n if (intervalId) window.clearInterval(intervalId);\n if (idleCallbackId !== null && window.cancelIdleCallback) {\n window.cancelIdleCallback(idleCallbackId);\n }\n };\n }, []);\n};\n\n// ---------------------- 批量上报核心逻辑 ----------------------\n\n// 内存中的批量上报队列\nlet BATCH_TRACK_QUEUE: TrackParams[] = [];\n// 批量上报定时器\nlet BATCH_TIMER: number | null = null;\n// 防止并发上报的锁\nlet isBatchUploading = false;\n\n/**\n * 批量发送埋点函数\n * @param tracks 埋点数组\n * @param config 配置项\n */\nconst sendBatchTrack = async (tracks: TrackParams[], config: TrackConfig) => {\n if (tracks.length === 0) return;\n\n // 优先级:单个 Hook 配置 > 全局配置\n const finalBatchUrl = config.batchTrackUrl || GLOBAL_TRACK_CONFIG.batchTrackUrl || GLOBAL_TRACK_CONFIG.trackUrl;\n const isEnable = config.enable ?? GLOBAL_TRACK_CONFIG.enable;\n\n if (!isEnable) return;\n\n try {\n // 补充公共参数\n const tracksWithCommonParams = tracks.map(track => ({\n ...track,\n timestamp: Date.now(),\n userAgent: navigator.userAgent,\n url: window.location.href,\n referrer: document.referrer\n }));\n\n // 发送批量请求\n const response = await fetch(finalBatchUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ tracks: tracksWithCommonParams }) // 批量上报格式:{ tracks: [...] }\n });\n\n if (!response.ok) {\n // 抛出包含状态码的异常\n throw new Error(`HTTP 请求失败,状态码:${response.status}`);\n }\n\n console.log(`批量上报成功,共${tracks.length}条`, tracks);\n\n // 批量上报成功后,尝试重试失败的埋点\n if (window.requestIdleCallback) {\n window.requestIdleCallback(() => retryFailedTracks(), { timeout: 2000 });\n } else {\n setTimeout(() => retryFailedTracks(), 1000);\n }\n\n return true;\n } catch (error) {\n return false;\n }\n};\n\n/**\n * 处理批量队列(核心调度逻辑)\n */\nconst processBatchQueue = async (config: TrackConfig) => {\n // 1. 锁兜底:防止极端并发\n if (isBatchUploading) return;\n isBatchUploading = true;\n\n // 2. 同步备份+清空队列\n // 浅拷贝备份当前队列数据\n const tracksToUpload = [...BATCH_TRACK_QUEUE];\n // 立即清空队列,新数据会入新队列,不会被重复处理\n BATCH_TRACK_QUEUE = [];\n\n // 3. 空队列直接释放锁返回\n if (tracksToUpload.length === 0) {\n isBatchUploading = false;\n return;\n }\n\n try {\n // 4. 执行批量上报\n const success = await sendBatchTrack(tracksToUpload, config);\n\n // 5. 上报失败:拆分存入失败队列\n if (!success) {\n console.warn(`批量上报失败,${tracksToUpload.length}条数据转入失败队列`);\n const failedTracks = getFailedTracks();\n const newFailedTracks = tracksToUpload.map(track => ({\n id: `${track.eventName}_${Date.now()}_${Math.random().toString(36).slice(2)}`,\n ...track,\n retryTime: Date.now(),\n retryCount: 0\n }));\n // 合并失败队列并保存(限制大小,避免localStorage溢出)\n failedTracks.push(...newFailedTracks);\n saveFailedTracks(failedTracks.slice(-100)); // 只保留最新100条\n }\n } catch (error) {\n // 捕获未知异常:同样存入失败队列\n console.error('批量上报异常:', error);\n const failedTracks = getFailedTracks();\n const newFailedTracks = tracksToUpload.map(track => ({\n id: `${track.eventName}_${Date.now()}_${Math.random().toString(36).slice(2)}`,\n ...track,\n retryTime: Date.now(),\n retryCount: 0\n }));\n failedTracks.push(...newFailedTracks);\n saveFailedTracks(failedTracks.slice(-100));\n } finally {\n // 6. 释放锁(无论成功/失败/异常)\n isBatchUploading = false;\n\n // 7. 检查是否有新数据入队,有则触发下一次上报\n if (BATCH_TRACK_QUEUE.length > 0) {\n setTimeout(() => processBatchQueue(config), 100);\n }\n }\n};\n\n/**\n * 初始化批量上报定时器\n */\nconst initBatchTimer = (config: TrackConfig) => {\n // 清除旧定时器\n if (BATCH_TIMER) {\n clearTimeout(BATCH_TIMER);\n }\n\n const { batchConfig } = GLOBAL_TRACK_CONFIG;\n if (!GLOBAL_TRACK_CONFIG?.enableBatch) return;\n\n // 设置新定时器\n BATCH_TIMER = setTimeout(() => {\n processBatchQueue(config);\n }, batchConfig?.batchInterval || 5000);\n};\n\n\n"],"names":["TrackType","useRef","useEffect","useCallback"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,12 +13,18 @@ interface TrackParams {
|
|
|
13
13
|
}
|
|
14
14
|
interface TrackGlobalConfig {
|
|
15
15
|
trackUrl: string;
|
|
16
|
+
batchTrackUrl?: string;
|
|
16
17
|
enable?: boolean;
|
|
18
|
+
enableBatch?: boolean;
|
|
17
19
|
retryConfig?: {
|
|
18
20
|
maxRetryTimes: number;
|
|
19
21
|
initialDelay: number;
|
|
20
22
|
delayMultiplier: number;
|
|
21
23
|
};
|
|
24
|
+
batchConfig?: {
|
|
25
|
+
batchSize: number;
|
|
26
|
+
batchInterval: number;
|
|
27
|
+
};
|
|
22
28
|
}
|
|
23
29
|
interface TrackConfig extends Partial<TrackGlobalConfig> {
|
|
24
30
|
exposureOnce?: boolean;
|
|
@@ -34,12 +40,7 @@ interface FailedTrackParams extends TrackParams {
|
|
|
34
40
|
* @param config 全局配置
|
|
35
41
|
*/
|
|
36
42
|
declare const setTrackGlobalConfig: (config: Partial<TrackGlobalConfig>) => void;
|
|
37
|
-
declare const
|
|
38
|
-
declare const saveFailedTracks: (tracks: FailedTrackParams[]) => void;
|
|
39
|
-
/**
|
|
40
|
-
* 重试失败的埋点(使用全局配置的 trackUrl)
|
|
41
|
-
*/
|
|
42
|
-
declare const retryFailedTracks: (force?: boolean) => Promise<void>;
|
|
43
|
+
declare const getMergedDefaultConfig: () => TrackConfig;
|
|
43
44
|
declare const useTrack: (params: TrackParams, config?: TrackConfig) => {
|
|
44
45
|
triggerTrack: (customParams?: {}) => void;
|
|
45
46
|
};
|
|
@@ -47,7 +48,13 @@ declare const useTrackClick: (eventName: string, customParams?: Record<string, a
|
|
|
47
48
|
declare const useTrackExposure: <T extends HTMLElement = HTMLElement>(eventName: string, customParams?: Record<string, any>, config?: TrackConfig) => react.RefObject<T>;
|
|
48
49
|
declare const useTrackPageStay: (eventName: string, customParams?: Record<string, any>, config?: TrackConfig) => void;
|
|
49
50
|
declare const useTrackCustom: (eventName: string, customParams?: Record<string, any>, config?: TrackConfig) => (customParams?: {}) => void;
|
|
51
|
+
declare const getFailedTracks: () => FailedTrackParams[];
|
|
52
|
+
declare const saveFailedTracks: (tracks: FailedTrackParams[]) => void;
|
|
53
|
+
/**
|
|
54
|
+
* 重试失败的埋点
|
|
55
|
+
*/
|
|
56
|
+
declare const retryFailedTracks: (force?: boolean) => Promise<void>;
|
|
50
57
|
declare const useTrackRetryListener: () => void;
|
|
51
58
|
|
|
52
|
-
export { TrackType, getFailedTracks, retryFailedTracks, saveFailedTracks, setTrackGlobalConfig, useTrack, useTrackClick, useTrackCustom, useTrackExposure, useTrackPageStay, useTrackRetryListener };
|
|
59
|
+
export { TrackType, getFailedTracks, getMergedDefaultConfig, retryFailedTracks, saveFailedTracks, setTrackGlobalConfig, useTrack, useTrackClick, useTrackCustom, useTrackExposure, useTrackPageStay, useTrackRetryListener };
|
|
53
60
|
export type { FailedTrackParams, TrackConfig, TrackGlobalConfig, TrackParams };
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAGlI,OAAO,EACH,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,qBAAqB,GACxB,MAAM,cAAc,CAAC"}
|