@tengence/track-sdk-web 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.mjs +1 -1
- package/dist/interface/index.d.ts +1 -1
- package/dist/tengence-track-sdk@1.2.1.js +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -4,10 +4,10 @@ Tengence Web 行为埋点 SDK。上报统一走 `Authorization: Bearer`,凭证
|
|
|
4
4
|
|
|
5
5
|
## 安装与引入
|
|
6
6
|
|
|
7
|
-
UMD
|
|
7
|
+
UMD(**生产环境务必固定版本号**:升级显式改版本、可回滚;`@latest` 仅作预览用途):
|
|
8
8
|
|
|
9
9
|
```html
|
|
10
|
-
<script src="https://static.tengence.com/track/tengence-track-sdk@
|
|
10
|
+
<script src="https://static.tengence.com/track/tengence-track-sdk@1.2.0.js"></script>
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
## 初始化
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
class e extends Error{status;constructor(e,t){super(t||`[TM]: Auth error ${e}`),this.name="AuthError",this.status=e}}const t=({method:e,url:t,data:r,headers:n={},withCredentials:o=!1,timeoutMs:i})=>new Promise(((a,s)=>{const c=new XMLHttpRequest;c.open(e,t,!0),i&&(c.timeout=i),Object.keys(n).forEach((e=>{c.setRequestHeader(e,n[e])})),c.withCredentials=!!o,c.onreadystatechange=()=>{if(4===c.readyState)if(c.status>=200&&c.status<300)try{const e=JSON.parse(c.responseText);a(e)}catch(e){s(e)}else{const e=new Error(`[TM]: Request failed with status ${c.status}`);e.status=c.status,s(e)}},c.onerror=()=>{s(new Error("[TM]: Network error"))},c.ontimeout=()=>{const e=new Error("[TM]: Request timeout");e.timeout=!0,s(e)},r?c.send(r):c.send()})),r=(e,t,r)=>{if(!r)return fetch(e,t);const n=new AbortController,o=setTimeout((()=>n.abort()),r);return fetch(e,{...t,signal:n.signal}).catch((e=>{if(e&&"AbortError"===e.name){const e=new Error("[TM]: Request timeout");throw e.timeout=!0,e}throw e})).finally((()=>clearTimeout(o)))},n=(n,o,i,a)=>{const s={"Content-Type":"application/json"};i&&(s.Authorization=`Bearer ${i}`);const c=()=>t({method:"POST",url:n,data:JSON.stringify(o),headers:s,withCredentials:!0,timeoutMs:a});return"function"!=typeof fetch?c():r(n,{method:"POST",keepalive:!0,credentials:"include",headers:s,body:JSON.stringify(o)},a).then((t=>{if(401===t.status||403===t.status)throw new e(t.status,`[TM]: Auth error ${t.status}`);if(429===t.status){const e=new Error("[TM]: Request throttled with status 429");e.status=429;const r=t.headers.get("Retry-After");if(r){const t=parseInt(r,10);isNaN(t)||(e.retryAfter=1e3*t)}throw e}if(!t.ok){const e=new Error(`[TM]: Request failed with status ${t.status}`);throw e.status=t.status,e}return t.json()})).catch((t=>{if(t instanceof e)throw t;if(t&&t.status)throw t;return c()}))},o=window.requestIdleCallback||window.requestAnimationFrame||(e=>setTimeout(e,17));function i(e,t=150,r=!1){let n=null;return function(...o){const i=this,a=r&&!n;n&&clearTimeout(n),n=setTimeout((()=>{n=null,r||e.apply(i,o)}),t),a&&e.apply(i,o)}}const a=(e,t=300)=>{let r=0;return function(...n){const o=Date.now();o-r>=t&&(r=o,e.apply(this,n))}};function s(e,t=""){if(!e)return t;const r=e.parentElement,{id:n}=e,o=e.tagName.toLowerCase(),i=t?`>${t}`:"";return r&&r!==document.documentElement&&r!==document.body?n?`#${n}${i}`:s(r,`${o}${i}`):`${o}${i}`}const c=()=>{if(window.performance?.navigation)return performance.navigation.type;if(window.performance?.getEntriesByType){const e=performance.getEntriesByType("navigation");if(e.length>0)return e[0].type}return 255},l=e=>{"prerendering"in document&&document.prerendering?(e=>{"prerendering"in document&&document.prerendering?addEventListener("prerenderingchange",(()=>e()),!0):e()})((()=>l(e))):"complete"!==document?.readyState?addEventListener("load",(()=>l(e)),!0):setTimeout(e)};function d(e){return"number"!=typeof e||!isFinite(e)||e<0?null:Math.round(100*e)/100}function u(){const e=new Uint8Array(16);if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues)crypto.getRandomValues(e);else for(let t=0;t<16;t++)e[t]=Math.floor(256*Math.random());e[6]=15&e[6]|64,e[8]=63&e[8]|128;let t="";for(let r=0;r<16;r++)t+=(e[r]<16?"0":"")+e[r].toString(16);return t}const m=e=>e instanceof ErrorEvent?"Script error."===e.message?"cors":"js":"resource",p=e=>(e=>{let t=5381;for(let r=0;r<e.length;r++)t=(t<<5)+t+e.charCodeAt(r)>>>0;return t.toString(16).padStart(8,"0")})(e)+(e=>{let t=5381;for(let r=e.length-1;r>=0;r--)t=((t<<5)+t^e.charCodeAt(r))>>>0;return t.toString(16).padStart(8,"0")})(e);const f={view:"#3b82f6",click:"#06b6d4",expose:"#8b5cf6",enter:"#10b981",leave:"#f59e0b",stay:"#84cc16",cart:"#ec4899",buy:"#ef4444",pay:"#dc2626",default:"#6b7280"},h={view:"👁️",click:"👆",expose:"✨",enter:"🚪",leave:"👋",stay:"⏱️",cart:"🛒",buy:"💰",pay:"💳",default:"📊"},g={common:"#3b82f6",behavior:"#10b981",performance:"#f59e0b",error:"#ef4444",custom:"#8b5cf6",default:"#6b7280"},y=(e,t)=>{t.forEach(((t,r)=>{const n=t.event_type||"unknown",o=t.data_type||"common",i=(e=>f[e]||f.default)(n),a=(e=>g[e]||g.default)(o),s=(e=>h[e]||h.default)(n);let c=t.event_detail;if("string"==typeof c)try{c=JSON.parse(c)}catch(e){}console.groupCollapsed(`%c${s} [TM-${e}] %c${o.toUpperCase()}%c → %c${n.toUpperCase()}%c #${r+1}`,"color: #6b7280; font-weight: bold;",`color: ${a}; font-weight: bold; background: ${a}20; padding: 2px 6px; border-radius: 3px;`,"color: #6b7280;",`color: ${i}; font-weight: bold; background: ${i}20; padding: 2px 6px; border-radius: 3px;`,"color: #6b7280; font-weight: normal;");const l={...t,event_detail:c};console.log("%c"+JSON.stringify(l,null,2),"color: #6b7280; font-family: monospace; font-size: 11px; line-height: 1.5;"),console.groupEnd()})),console.log(`%c✅ [TM] 本次通过 ${e} 上报 ${t.length} 条埋点数据`,"color: #10b981; font-weight: bold; font-size: 12px; padding: 4px 8px; background: #10b98120; border-radius: 4px; border-left: 3px solid #10b981;")};let w;const v="TRACK_MONITOR_DATA",T="MONITOR_REAL_TIME_DATA",_="TRACK_MONITOR_USER",b="tengence_device_id",S="tengence_register_properties",E="TRACK_MONITOR_LOGGER",k="tengence_tracking_enabled",x=2e3,M="tengence_access_token";let A=null,L=null;const C=e=>((e,n,o)=>{const i={"Content-Type":"application/json"},a=()=>t({method:"POST",url:e,data:JSON.stringify(n),headers:i,withCredentials:!0,timeoutMs:o});return"function"!=typeof fetch?a():r(e,{method:"POST",credentials:"include",headers:i,body:JSON.stringify(n)},o).then((e=>{if(!e.ok){const t=new Error(`[TM]: Request failed with status ${e.status}`);throw t.status=e.status,t}return e.json()})).catch((e=>{if(e&&e.status)throw e;return a()}))})(e,{},w?.requestTimeout).then((e=>{const t=e&&e.data,r=t&&t.accessToken,n=t&&t.accessExpAt;if(!r||"number"!=typeof n)throw new Error("[TM]: authUrl 响应缺少 accessToken/accessExpAt");return((e,t)=>{A={token:e,expAt:t};try{localStorage.setItem(M,JSON.stringify({token:e,expAt:t}))}catch(e){}})(r,n),r})),R=e=>{const t=(()=>{if(A)return A;try{const e=localStorage.getItem(M);if(!e)return null;const t=JSON.parse(e);if(t&&"string"==typeof t.token&&t.token&&"number"==typeof t.expAt)return A={token:t.token,expAt:t.expAt},A}catch(e){}return null})();return(r=t)&&r.token.length>0&&r.expAt-6e4>Date.now()?Promise.resolve(t.token):(L||(L=C(e).catch((e=>{throw e})).finally((()=>{L=null}))),L);var r},I={timer:null,promise:null},$={timer:null,promise:null},q=e=>{const t=JSON.stringify(e);return(new TextEncoder).encode(t).length/1024};let N=null;const P=()=>{if(N)return N;try{const e=localStorage.getItem(S),t=e?JSON.parse(e):{};return N=t,t}catch(e){return console.error("[TM]: get register properties fail: ",e),{}}},O=e=>{N=e;try{localStorage.setItem(S,JSON.stringify(e))}catch(e){console.error("[TM]: save register properties fail: ",e)}},U=e=>{if(!e||"object"!=typeof e||Array.isArray(e))return void console.error("[TM]: registerGlobalProperties props must be a plain object");const t={...P(),...e},r=Object.keys(t);if(r.length>50){const e={};return r.slice(0,50).forEach((r=>{e[r]=t[r]})),console.warn("[TM]: register properties exceed max 50 keys, extra keys dropped"),void O(e)}O(t)},B=e=>{const t=document.cookie.match(new RegExp("(?:^|;\\s*)"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):void 0},z=e=>{document.cookie=`${b}=${encodeURIComponent(e)}; Max-Age=63072000; Path=/; Secure; SameSite=Lax`};let D;const F=()=>{if(D)return D;try{let e=localStorage.getItem(b);if(e)return B(b)||z(e),D=e;const t=B(b);if(t){try{localStorage.setItem(b,t)}catch(e){}return D=t}e=u();try{localStorage.setItem(b,e)}catch(e){}return z(e),D=e}catch(e){return void console.error("[TM]: get or create device id fail: ",e)}},j="tengence_session_id",H=()=>{try{const e=sessionStorage.getItem(j);let t=e?JSON.parse(e):null;const r=Date.now();return!t||!t.id||r-t.lastActiveAt>18e5?(t={id:u(),lastActiveAt:r},sessionStorage.setItem(j,JSON.stringify(t))):(t.lastActiveAt=r,sessionStorage.setItem(j,JSON.stringify(t))),t.id}catch(e){return}},J=(e,t)=>{try{const r=new URL(e,location.href);if(!r.searchParams.toString())return e;if(t&&t.length){const e=[];for(const n of t){const t=r.searchParams.get(n);null!==t&&e.push(`${n}=${encodeURIComponent(t)}`)}r.search=e.length?`?${e.join("&")}`:""}else r.search="";return r.toString()}catch(t){return e}},K=(e,t,r)=>{if("string"==typeof e)return t>0&&e.length>t?e.slice(0,t)+"...[truncated]":e;if(Array.isArray(e))return e.map((e=>K(e,t,r)));if(e&&"object"==typeof e){const n={};for(const o of Object.keys(e)){const i=e[o];"string"==typeof i&&/(^|_)url$|(^|_)href$|^referrer$/i.test(o)&&/^https?:\/\//i.test(i)?n[o]=J(i,r):n[o]=K(i,t,r)}return n}return e},W=e=>{const t={page_url:location.href,hostname:window.location.hostname||window.location.host,os:window.navigator.platform,user_id:localStorage.getItem(_)||void 0,user_agent:window.navigator.userAgent,screen_width:window.screen.width,screen_height:window.screen.height,lib_version:"1.2.0",lib_type:"js",event_time:Date.now(),timezone_offset:(new Date).getTimezoneOffset().toString()},r=w?.sanitize;let n;try{n="string"==typeof e.event_detail?e.event_detail:JSON.stringify(r&&(r.maxTextLength>0||r.stripQuery)?K(e.event_detail,r.maxTextLength,r.preserveQueryKeys):e.event_detail)}catch(e){return Y("serialize_failed","事件 event_detail 序列化失败(循环引用/BigInt?),该事件丢弃",{error:e}),void console.warn("[TM]: event_detail 序列化失败,该事件丢弃",e)}return{session_id:e.session_id||(w?.enableAutoSessionId?H():void 0),request_id:e.request_id,event_id:e.event_id||u(),spm:e.spm,data_type:e.data_type||"behavior",event_type:e.event_type,event_detail:n,...t,page_url:r&&r.stripQuery?J(t.page_url,r.preserveQueryKeys):t.page_url,device_id:F(),register_properties:JSON.stringify(P()),platform:e.platform||X}};let X;const Q=()=>{try{return"true"===localStorage.getItem(E)}catch(e){return!1}},G=(e,t,r,n,o)=>void 0===e?t:"number"!=typeof e||Number.isNaN(e)||e<r||e>n?(console.warn(`[TM]: 配置 ${o}=${e} 非法,回退默认值 ${t}`),t):e,V=(e,t)=>{try{w?.onDrop?.(e,t)}catch(e){}},Y=(e,t,r)=>{w?.isLogger&&console.error(`[TM]: ${t}`);try{w?.onError?.({code:e,message:t,context:r})}catch(e){}},Z=()=>{try{const e=localStorage.getItem(k);return null===e||"1"===e}catch(e){return!0}},ee=t=>{const r=t.apiKey;let i;const a=/Android|iPhone|iPad|iPod|Mobile/i.test(window.navigator.userAgent);X=t.platform||(a?"h5":"web"),w={pushUrl:t.pushUrl||"https://api.tengence.com/v1/push/event",authUrl:t.authUrl,realTimeUrl:t.realTimeUrl,cacheNumber:G(t.cacheNumber,100,1,1/0,"cacheNumber"),reportInterval:G(t.reportInterval,5e3,100,1/0,"reportInterval"),realTimeReportInterval:G(t.realTimeReportInterval,200,100,1/0,"realTimeReportInterval"),maxCacheSize:G(t.maxCacheSize,56,1,1/0,"maxCacheSize"),maxRetries:G(t.maxRetries,10,0,1/0,"maxRetries"),isLogger:t.isLogger??Q(),errorTraceRate:G(t.errorTraceRate,.5,0,1,"errorTraceRate"),resourceFlowLimit:G(t.resourceFlowLimit,15,0,200,"resourceFlowLimit"),traceBehavior:t.traceBehavior??!0,tracePerformance:t.tracePerformance??!0,traceError:t.traceError??!0,sanitize:!1===t.sanitize?{stripQuery:!1,maxTextLength:0,preserveQueryKeys:[]}:{stripQuery:t.sanitize?.stripQuery??!1,maxTextLength:G(t.sanitize?.maxTextLength,0,0,1/0,"sanitize.maxTextLength"),preserveQueryKeys:t.sanitize?.preserveQueryKeys||[]},enableAutoSessionId:t.enableAutoSessionId??!1,enableTracking:t.enableTracking??Z(),respectGpc:t.respectGpc??!0,requestTimeout:G(t.requestTimeout,1e4,1e3,6e4,"requestTimeout"),beforeSend:t.beforeSend,onDrop:t.onDrop,onError:t.onError};let{pushUrl:s,authUrl:c,realTimeUrl:l,cacheNumber:d,reportInterval:u,realTimeReportInterval:m,maxCacheSize:p,maxRetries:f}=w;r||c||(console.error("[TM]: 未配置 apiKey 或 authUrl,SDK 无法获取上报凭证,数据将不会上报。请配置 apiKey(直连)或 authUrl(自动换取 accessToken),或调用 setToken 注入 accessToken。"),Y("init_missing_credential","未配置 apiKey 或 authUrl,SDK 无法获取上报凭证,数据将不会上报。请配置 apiKey(直连)或 authUrl(自动换取 accessToken),或调用 setToken 注入 accessToken。"));const h={retryCount:0,nextRetryAt:0,retryExhausted:!1,halveBatch:!1},g={retryCount:0,nextRetryAt:0,retryExhausted:!1,halveBatch:!1},b=e=>{try{localStorage.setItem(_,e)}catch(e){console.error("[TM]: monitor bind user fail: ",e)}},S=()=>{localStorage.removeItem(_)},L={},C={},N=new Set;let P=null;const O=()=>{null!==P&&(clearTimeout(P),P=null),N.size&&(N.forEach((e=>{try{localStorage.setItem(e,JSON.stringify(L[e]||[]))}catch(t){Y("queue_write_failed","写入本地缓存队列失败(隐私模式/容量满?),本次数据仅保留内存",{key:e,error:t})}})),N.clear())},B=e=>{if(L[e])return L[e];let t=[];try{t=JSON.parse(localStorage.getItem(e)||"[]")}catch(t){Y("queue_read_failed","读取本地缓存队列失败,按空队列处理",{key:e,error:t})}return L[e]=t,C[e]=t.reduce(((e,t)=>e+q(t)),0),L[e]},z=(e,t)=>{N.delete(e),L[e]=t,C[e]=t.reduce(((e,t)=>e+q(t)),0);try{localStorage.setItem(e,JSON.stringify(t))}catch(t){Y("queue_write_failed","写入本地缓存队列失败(隐私模式/容量满?),队列清空处理",{key:e,error:t});try{localStorage.setItem(e,"[]")}catch(t){Y("localstorage_unavailable","localStorage 不可用,本次数据仅保留内存",{key:e,error:t})}}},D=e=>{i=e},F=async(t,o,a=!1)=>{const d=t&&l?l:s;let u;try{u=r||i||(c?await R(c):void 0)}catch(e){throw Y("token_fetch_failed","从 authUrl 获取 accessToken 失败,本批暂不上报(保留队列待重试)",{authUrl:c,error:e}),e}if(!u)throw Y("init_missing_credential","未配置 apiKey/authUrl 且未注入 accessToken,本次数据未上报(保留缓存队列待重试)"),new Error("[TM]: credential missing, skip report");w?.isLogger&&y(t?"RealTimeFetch":"Fetch",o);const m=w?.beforeSend?(()=>{let e;try{e=w.beforeSend(o)}catch(e){Y("before_send_failed","beforeSend 钩子抛错,本次按原始数据发送",{error:e})}return Array.isArray(e)?e:o})():o,p=a?void 0:w?.requestTimeout;return n(d,{data:m},u,p).catch((async t=>{const o=t?.status;if((t instanceof e||401===o||403===o)&&!r&&!i&&c){(()=>{A=null;try{localStorage.removeItem(M)}catch(e){}})();const e=await R(c).catch((()=>{}));if(e)return n(d,{data:m},e,p);Y("token_invalid","上报 401/403 且刷新 accessToken 失败,本批暂不上报(保留队列待重试)",{authUrl:c})}throw t}))},j=(e,t)=>{const r=new Set(t.filter((e=>!!e)));if(!r.size)return;const n=B(e);if(!n.length)return;const o=n.filter((e=>e.event_id&&!r.has(e.event_id)));o.length!==n.length&&z(e,o)},H=(e,t,r=0)=>{const n=(t?m:u)*Math.pow(2,e)*(.8+.4*Math.random()),o=Math.min(n,6e4);return Math.max(o,r)},J=(e,t)=>{const r=q(t);if(r>=64)return V([t],"item_too_large"),void console.warn("[TM]: 单条事件超过体积上限(64KB),丢弃该条");const n=B(e);if(n.unshift(t),C[e]+=r,n.length>x){const t=n.length-x,r=n.splice(n.length-t,n.length);C[e]=n.reduce(((e,t)=>e+q(t)),0),V(r,"queue_overflow"),console.warn(`[TM]: 队列超过上限(2000条),丢弃最旧 ${t} 条`)}(e=>{N.add(e),null===P&&(P=setTimeout((()=>{P=null,O()}),200))})(e),K(e,C[e]>=p)},K=(e,t=!1,r=!1)=>{if(!w?.enableTracking)return;let n=B(e);if(!n.length)return;const o=(e=>e===T)(e),i=o?$:I,a=(e=>e?g:h)(o);if(a.halveBatch&&n.length>1&&(n=n.slice(0,Math.ceil(n.length/2))),a.retryExhausted)return;if(Date.now()<a.nextRetryAt)return void(null===i.timer&&(i.timer=setTimeout((()=>{i.timer=null,K(e)}),a.nextRetryAt-Date.now())));if(0!==a.retryCount||(n.length>=d||t)){if(null!==i.timer&&(clearTimeout(i.timer),i.timer=null),i.promise)return;i.promise=(async(e,t,r,n,o=!1)=>{const i=[];let a=[],s=0;for(const e of t){const t=1024*q(e);a.length&&s+t>65536&&(i.push(a),a=[],s=0),a.push(e),s+=t}a.length&&i.push(a);for(const t of i){const n=await F(r,t,o),i=n?.data?.accepted_ids,a=n?.data?.rejected_ids;if(Array.isArray(i)){if(j(e,i),Array.isArray(a)&&a.length){const r=new Set(a);j(e,a);const n=t.filter((e=>e.event_id&&r.has(e.event_id)));n.length&&V(n,"server_rejected"),console.warn(`[TM]: 服务端校验拒绝 ${a.length} 条(永久性拒绝),已从队列移除并通知 onDrop`)}}else j(e,t.map((e=>e.event_id))),w?.isLogger&&console.warn("[TM]: 响应缺少 accepted_ids,按整批成功清理")}n.retryCount=0,n.nextRetryAt=0,n.halveBatch=!1})(e,n,o,a,r).catch((e=>{((e,t,r,n,o)=>{t?.timeout&&Y("request_timeout","上报请求超时,数据保留队列按退避重试",{url:r&&l?l:s,timeoutMs:w?.requestTimeout});const i=t?.status;if(413===i)return void(o.length>1?(n.halveBatch=!0,n.retryCount++,n.nextRetryAt=Date.now()+H(n.retryCount,r,0),console.warn(`[TM]: 批次过大(HTTP 413),降容半批重发(本批 ${o.length} 条)`)):(n.retryExhausted=!0,V(o,"rejected_4xx"),console.warn("[TM]: 单条事件仍超限(HTTP 413),数据保留在队列")));if(i&&i>=400&&i<500&&401!==i&&403!==i&&408!==i&&410!==i&&429!==i)return n.retryExhausted=!0,V(o,"rejected_4xx"),void console.warn(`[TM]: 批次提交被服务端拒绝(HTTP ${i}),数据保留在队列并暂停自动重试`);if(n.retryCount++,n.retryCount>f)return n.retryExhausted=!0,V(o,"retries_exhausted"),void console.warn(`[TM]: 重试次数已达上限(${f}),数据保留在队列(不丢弃),待下次会话或手动触发重试`);const a=429===i&&t?.retryAfter||0;n.nextRetryAt=Date.now()+H(n.retryCount,r,a),console.error(`[TM]: send report fail, retryCount: ${n.retryCount}, next retry after ${Math.round((n.nextRetryAt-Date.now())/1e3)}s`)})(0,e,o,a,n)})).finally((()=>{i.timer=null,i.promise=null,K(e)}))}else if(null===i.timer){const t=o?m:u;i.timer=setTimeout((()=>{i.timer=null,K(e,!0)}),t)}},ee=e=>{if(!w?.enableTracking||w?.respectGpc&&function(){const e="undefined"!=typeof navigator?navigator:void 0;return!0===e?.globalPrivacyControl}())return void(w?.isLogger&&console.warn("[TM]: 用户已选择退出采集(enableTracking=false 或 GPC 信号开启),本事件忽略"));if(!e||"object"!=typeof e)return void console.error("[TM]: track data must be an object");const t=!0===e.track_real_time,r=W(e);if(r)try{J(t&&l?T:v,r)}catch(e){Y("enqueue_failed","事件入队失败",{error:e})}},te=(e,t,r)=>{ee("string"==typeof e?{event_type:e,event_detail:t,...r}:e)},re=()=>{K(v,!0),K(T,!0);const e=[I.promise,$.promise].filter((e=>!!e));return Promise.all(e).then((()=>{}))},ne=()=>{w.isLogger=!0;try{localStorage.setItem(E,"true")}catch(e){console.error("[TM]: enable logger fail:",e)}},oe=()=>{w.isLogger=!1;try{localStorage.setItem(E,"false")}catch(e){console.error("[TM]: disable logger fail:",e)}};o((()=>{K(v,!0),K(T,!0)}));const ie=e=>("boolean"==typeof e&&(w.enableTracking=e,(e=>{try{localStorage.setItem(k,e?"1":"0")}catch(e){}})(e),e?w?.isLogger&&console.warn("[TM]: 恢复采集"):(z(v,[]),z(T,[]),w?.isLogger&&console.warn("[TM]: 用户已选择退出采集,已清空未上报队列"))),!0===w?.enableTracking);return window.trackMonitor={track:te,flush:re,bindUser:b,unBindUser:S,enableLogger:ne,disableLogger:oe,setToken:D,registerGlobalProperties:U,enableTracking:ie},{client:{track:te,flush:re,bindUser:b,unBindUser:S,enableLogger:ne,disableLogger:oe,setToken:D,registerGlobalProperties:U,enableTracking:ie},beforeClose:()=>{const e=()=>{O(),K(v,!0,!0),K(T,!0,!0)};window.addEventListener("beforeunload",e),window.addEventListener("pagehide",e),document.addEventListener("visibilitychange",(()=>{"hidden"===document.visibilityState&&e()})),window.addEventListener("online",e)}}},te=(re=16,function(){const e=new Uint8Array(re);if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues)crypto.getRandomValues(e);else for(let t=0;t<re;t++)e[t]=Math.floor(256*Math.random());let t="";for(let r=0;r<re;r++)t+=(e[r]<16?"0":"")+e[r].toString(16);return t})();var re;const ne=e=>{const t=history[e];return function(){const r=t.apply(this,arguments),n=new Event(e);return window.dispatchEvent(n),r}},oe=e=>{window.addEventListener("replaceState",(t=>e(t)),!0),window.addEventListener("pushState",(t=>e(t)),!0)},ie=e=>{window.addEventListener("popstate",(t=>e(t)),!0)},ae=[25,50,75,90],se=e=>{history.pushState=ne("pushState"),history.replaceState=ne("replaceState"),(()=>{let e="";const t=()=>{const t=window.location.href;if(t===e)return;const{host:r,hostname:n,href:o,protocol:i,origin:a,port:s,pathname:l,search:d,hash:u}=window.location,m={host:r,hostname:n,href:o,protocol:i,origin:a,port:s,pathname:l,search:d,hash:u,title:document.title,language:navigator.language.substring(0,2),user_agent:navigator.userAgent,win_screen:`${window.screen.width}x${window.screen.height}`,doc_screen:`${document.documentElement.clientWidth}x${document.documentElement.clientHeight}`,referrer:document.referrer,type:c()};window.trackMonitor.track({data_type:"common",event_type:"page_view",event_detail:m}),e=t},r=i(t,200);t(),ie((()=>{r()})),oe((()=>{r()})),window.addEventListener("popstate",(()=>{r()}))})(),(()=>{let e=document.referrer,t=window.location.href,r=Date.now(),n=!0;const o=(n=!1)=>{if(window.location.href!==t||n){const n=Date.now()-r;n>200&&window.trackMonitor.track({data_type:"common",event_type:"page_leave",event_detail:{url:t,referrer:e,duration:n}}),r=Date.now(),e=t,t=window.location.href}},a=i(o);o(),ie((()=>{a()})),oe((()=>{a()})),document.addEventListener("visibilitychange",(()=>{"hidden"===document.visibilityState?n&&(n=!1,o(!0)):(n=!0,r=Date.now())})),window.addEventListener("beforeunload",(()=>{n&&(n=!1,o(!0))}),!0)})(),(()=>{const e=a((e=>{const t=function(e){if(!e)return;if(["A","INPUT","TEXTAREA","BUTTON"].includes(e.tagName))return e;if(e.hasAttribute("track-click"))return e;return e.closest("a, button, [track-click]")||void 0}(e.target);if(!t)return;const r={element_id:t.id,element_content:t.textContent?.trim().slice(0,200)||null,element_class_name:t.className||null,element_name:t.getAttribute("name")||null,element_type:t.tagName.toLowerCase(),element_path:s(t),scroll_width:document.documentElement.scrollWidth,scroll_height:document.documentElement.scrollHeight,pageX:e.pageX,pageY:e.pageY,ratio:window.devicePixelRatio||1};window.trackMonitor.track({data_type:"common",event_type:"click",event_detail:r})}));window.addEventListener("click",e,!0)})(),!1!==e?.enableScroll&&(()=>{const e=new Set,t=a((()=>{const r=document.documentElement,n=r.scrollHeight-r.clientHeight;if(n<=0)return;const o=Math.round((window.scrollY||r.scrollTop)/n*100),i=ae.filter((t=>o>=t&&!e.has(t)));i.length&&(i.forEach((t=>{e.add(t),window.trackMonitor.track({data_type:"common",event_type:"scroll",event_detail:{scroll_depth:t}})})),e.has(90)&&window.removeEventListener("scroll",t))}),300);window.addEventListener("scroll",t,{passive:!0})})()};let ce=null,le=null;const de="track-expose",ue="track-view",me=e=>{try{le=new WeakMap}catch(e){console.error("[TM]: create WeakMap fail: ",e)}const t=(e,t=!1)=>{const n=le?.get(e);if(n&&!t)return;n&&(n.viewTimer&&clearTimeout(n.viewTimer),n.exposeTimer&&clearTimeout(n.exposeTimer));const o=e.dataset.durationView||500,i=e.dataset.durationExpose||500;le?.set(e,{duration_view:o,duration_expose:i,viewTimer:null,exposeTimer:null}),ce?.observe(e),t&&function(e){if(!(e instanceof Element))return!1;if(!function e(t){if(!t)return!0;const r=window.getComputedStyle(t);return"none"!==r.display&&"hidden"!==r.visibility&&0!==parseFloat(r.opacity)&&e(t.parentElement)}(e))return!1;const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)}(e)&&r(e)},r=t=>{const r=le?.get(t);if(!r)return;const o=t.dataset.eventDetail,i=t.dataset.traceid??void 0,a=t.dataset.spm,s=t.hasAttribute("track-real-time"),c=t.hasAttribute(ue),l=t.hasAttribute(de);c&&l?r.exposeTimer=window.setTimeout((()=>{e({spm:a,request_id:i,data_type:"common",event_type:"view_expose",event_detail:o,track_real_time:s}),t.removeAttribute(ue),r.exposeTimer=null}),parseInt(r.duration_expose,10)):(c&&(r.viewTimer=window.setTimeout((()=>{e({spm:a,request_id:i,data_type:"common",event_type:"view",event_detail:o,track_real_time:s}),t.removeAttribute(ue),l&&r.exposeTimer||n(t),r.viewTimer=null}),parseInt(r.duration_view,10))),l&&(r.exposeTimer=window.setTimeout((()=>{e({spm:a,request_id:i,data_type:"common",event_type:"expose",event_detail:o,track_real_time:s}),r.exposeTimer=null}),parseInt(r.duration_expose,10))))},n=e=>{const t=le?.get(e);t&&(ce?.unobserve(e),t.viewTimer&&clearTimeout(t.viewTimer),t.exposeTimer&&clearTimeout(t.exposeTimer),le?.delete(e))},o=e=>{e.forEach((e=>{const t=e.target,o=le?.get(t);o&&(o.viewTimer&&(clearTimeout(o.viewTimer),o.viewTimer=null),o.exposeTimer&&(clearTimeout(o.exposeTimer),o.exposeTimer=null),e.isIntersecting&&(r(t),t.hasAttribute(ue)||t.hasAttribute(de)||n(t)))}))};ce=(()=>{let e=null;try{e=new IntersectionObserver(o,{root:null,threshold:.5})}catch(e){console.error("[TM]: create IntersectionObserver fail: ",e)}return e})();new Set([...document.querySelectorAll(`[${de}]`),...document.querySelectorAll(`[${ue}]`)]).forEach((e=>t(e))),new MutationObserver((e=>{e.forEach((e=>{if("attributes"===e.type&&e.target instanceof HTMLElement){const r=e.target,o=e.attributeName,i=["data-event-detail","data-traceid","data-spm","data-duration-view","data-duration-expose"];r.hasAttribute(de)||r.hasAttribute(ue)?i.includes(o)?t(r,!0):o!==de&&o!==ue||t(r,!1):n(r)}else"childList"===e.type&&(e.addedNodes.forEach((e=>{if(e instanceof HTMLElement)if(e.hasAttribute(de)||e.hasAttribute(ue))t(e);else{new Set([...e.querySelectorAll(`[${de}]`),...e.querySelectorAll(`[${ue}]`)]).forEach((e=>t(e)))}})),e.removedNodes.forEach((e=>{if(e instanceof HTMLElement){const t=le?.get(e);if(t)n(e);else{new Set([...e.querySelectorAll(`[${de}]`),...e.querySelectorAll(`[${ue}]`)]).forEach((e=>n(e)))}}})))}))})).observe(document.body||document.documentElement,{attributes:!0,childList:!0,subtree:!0})},pe=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;function fe(e){const t=e.match(pe);if(!t)return{};return{filename:t[2],functionName:t[1]||"",lineno:parseInt(t[3],10)||void 0,colno:parseInt(t[4],10)||void 0}}function he(e){try{const{stack:t}=e;if(!t)return[];const r=[];for(const e of t.split("\n").slice(1)){const t=fe(e);!t||t.filename?.includes("chrome-extension://")||t.filename?.includes("node_modules")||t.filename?.includes("<anonymous>")||r.push(t)}return r.slice(0,10)}catch(e){return[]}}const ge=new Set,ye=(e,t)=>{if((r=w?.errorTraceRate??.5)<0||r>1?(console.warn("[TM]: probability should be between 0 and 1"),0):Math.random()<r){if(window.trackMonitor.track(t),ge.size>=1e3){const e=ge.values().next().value;void 0!==e&&ge.delete(e)}ge.add(e)}var r},we=()=>{window.addEventListener("error",(e=>{(e=>{if(e instanceof ErrorEvent&&"Script error."===e.message){const t=p("js-Script error.");if(ge.has(t))return;return void ye(t,{data_type:"error",event_type:"js",event_detail:{traceId:te,msg:'Script error.(跨域脚本未加载 crossorigin 属性,无法获取堆栈;建议脚本加 crossorigin="anonymous")',target:"",stack:[],errorUuid:t,meta:{filename:e.filename,colno:e.colno,lineno:e.lineno,crossorigin_missing:!0}}})}if("js"!==m(e))return;if((e=>{const t=e.error?.stack||"";return/chrome-extension:\/\//.test(t)})(e))return;const t=p(`js-${e.message}-${e.filename}`);if(ge.has(t))return;const r=he(e.error),n={traceId:te,msg:e.message,target:r[0]?`${r[0].filename?.split("?")[0]}:${r[0].lineno}:${r[0].colno}`:"",stack:r,errorUuid:t,meta:{filename:e.filename,colno:e.colno,lineno:e.lineno}};ye(t,{data_type:"error",event_type:"js",event_detail:n})})(e)}),!0)},ve=()=>{window.addEventListener("error",(e=>{(e=>{if("resource"!==m(e))return;const t=e.target,r=p(`resource-${t.src}-${t.tagName}`);if(ge.has(r))return;const n={traceId:te,msg:`加载${t.tagName}失败`,target:t.src?.split("?")[0],errorUuid:r,meta:{url:t.src,html:t.outerHTML,tagName:t.tagName}};ye(r,{data_type:"error",event_type:"resource",event_detail:n})})(e)}),!0)},Te=()=>{window.addEventListener("unhandledrejection",(e=>(e=>{const t=e.reason?.message||e.reason,r=p(`unhandledrejection-${t}`);if(ge.has(r))return;const n={traceId:te,msg:t,stack:he(e.reason),errorUuid:r};ye(r,{data_type:"error",event_type:"unhandledrejection",event_detail:n})})(e)),!0)},_e=()=>{const e=(e,t,r)=>{var n;if("string"!=typeof(n=e.url)||![w?.pushUrl,w?.authUrl,w?.realTimeUrl].filter((e=>!!e)).some((e=>0===n.indexOf(e))))if(t){const n=p(`http-${t}-${e.url}-${r}`);if(ge.has(n))return;const o={traceId:te,errorType:t,msg:r,target:e.url.split("?")[0],errorUuid:n,request:e};ye(n,{data_type:"error",event_type:"http",event_detail:o})}else if(e.status>=400){let r=e.statusText;const n=p(`http-${t="http_error"}-${e.url}-${r}`);if(ge.has(n))return;const o={traceId:te,errorUuid:n,errorType:t,target:e.url.split("?")[0],msg:r,request:e};ye(n,{data_type:"error",event_type:"http",event_detail:o})}};((e,t)=>{if("XMLHttpRequest"in window&&"function"==typeof window.XMLHttpRequest){const e=window.XMLHttpRequest;window.oXMLHttpRequest||(window.oXMLHttpRequest=e),window.XMLHttpRequest=function(){const r=new e,{open:n,send:o}=r;let i={};r.open=(e,t,o,a,s)=>{void 0===o&&(o=!0),i.method=e,i.url=t,n.call(r,e,t,o,a,s)},r.send=e=>{i.requestTime=(new Date).getTime(),o.call(r,e)};const a=(e,n)=>{const{status:o,statusText:a}=r,s=(new Date).getTime();i={...i,status:o,statusText:a,responseTime:s,duration:s-i.requestTime},"function"==typeof t&&t(i,e,n)};return r.addEventListener("loadend",(()=>a())),r.addEventListener("error",(()=>a("net_error","ERR_NETWORK"))),r.addEventListener("abort",(()=>a("cannel_request","ERR_CANCELED"))),r.addEventListener("timeout",(()=>a("timeout","ERR_NETWORK"))),r}}})(0,e),((e,t)=>{if("fetch"in window&&"function"==typeof window.fetch){const e=window.fetch;window.oFetch||(window.oFetch=e),window.fetch=async(r,n)=>{let o={};return o.method=n?.method||"",o.url=(r&&"string"!=typeof r?r?.url:r)||"",o.requestTime=(new Date).getTime(),e.call(window,r,n).then((async e=>{if("function"==typeof t){const r=e.clone(),n=(new Date).getTime();o={...o,status:r.status,statusText:r.statusText,responseTime:n,duration:n-o.requestTime},t(o)}return e})).catch((e=>{if("function"==typeof t){const r=(new Date).getTime();o={...o,responseTime:r,duration:r-o.requestTime},"AbortError"===e.name?t(o,"cannel_request","ERR_CANCELED"):t(o,"net_error","ERR_NETWORK")}return Promise.reject(e)}))}}})(0,e)};const be=new WeakSet,Se=e=>({form_id:e.id||null,form_class:"string"==typeof e.className?e.className:null,form_name:e.getAttribute("name")||null,form_action:e.getAttribute("action")||null,form_text:(e.textContent||"").trim().slice(0,200)||null});let Ee=-1;const ke=e=>{addEventListener("pageshow",(t=>{t.persisted&&(Ee=t.timeStamp,e(t))}),!0)},xe=(e,t,r,n)=>{let o,i;return a=>{t.value>=0&&(a||n)&&(i=t.value-(o??0),(i||void 0===o)&&(o=t.value,t.delta=i,t.rating=((e,t)=>e>t[1]?"poor":e>t[0]?"needs-improvement":"good")(t.value,r),e(t)))}},Me=e=>{requestAnimationFrame((()=>requestAnimationFrame((()=>e()))))},Ae=()=>{const e=performance.getEntriesByType("navigation")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},Le=()=>{const e=Ae();return e?.activationStart??0},Ce=(e,t=-1)=>{const r=Ae();let n="navigate";return Ee>=0?n="back-forward-cache":r&&(document.prerendering||Le()>0?n="prerender":document.wasDiscarded?n="restore":r.type&&(n=r.type.replace(/_/g,"-"))),{name:e,value:t,rating:"good",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:n}},Re=new WeakMap;function Ie(e,t){return Re.get(e)||Re.set(e,new t),Re.get(e)}class $e{t;i=0;o=[];h(e){if(e.hadRecentInput)return;const t=this.o[0],r=this.o.at(-1);this.i&&t&&r&&e.startTime-r.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e)}}const qe=(e,t,r={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){const n=new PerformanceObserver((e=>{Promise.resolve().then((()=>{t(e.getEntries())}))}));return n.observe({type:e,buffered:!0,...r}),n}}catch{}},Ne=e=>{let t=!1;return()=>{t||(e(),t=!0)}};let Pe=-1;const Oe=new Set,Ue=()=>"hidden"!==document.visibilityState||document.prerendering?1/0:0,Be=e=>{if("hidden"===document.visibilityState){if("visibilitychange"===e.type)for(const e of Oe)e();isFinite(Pe)||(Pe="visibilitychange"===e.type?e.timeStamp:0,removeEventListener("prerenderingchange",Be,!0))}},ze=()=>{if(Pe<0){const e=Le(),t=document.prerendering?void 0:globalThis.performance.getEntriesByType("visibility-state").filter((t=>"hidden"===t.name&&t.startTime>e))[0]?.startTime;Pe=t??Ue(),addEventListener("visibilitychange",Be,!0),addEventListener("prerenderingchange",Be,!0),ke((()=>{setTimeout((()=>{Pe=Ue()}))}))}return{get firstHiddenTime(){return Pe},onHidden(e){Oe.add(e)}}},De=e=>{document.prerendering?addEventListener("prerenderingchange",(()=>e()),!0):e()},Fe=[1800,3e3],je=(e,t={})=>{De((()=>{const r=ze();let n,o=Ce("FCP");const i=qe("paint",(e=>{for(const t of e)"first-contentful-paint"===t.name&&(i.disconnect(),t.startTime<r.firstHiddenTime&&(o.value=Math.max(t.startTime-Le(),0),o.entries.push(t),n(!0)))}));i&&(n=xe(e,o,Fe,t.reportAllChanges),ke((r=>{o=Ce("FCP"),n=xe(e,o,Fe,t.reportAllChanges),Me((()=>{o.value=performance.now()-r.timeStamp,n(!0)}))})))}))},He=[.1,.25];let Je=0,Ke=1/0,We=0;const Xe=e=>{for(const t of e)t.interactionId&&(Ke=Math.min(Ke,t.interactionId),We=Math.max(We,t.interactionId),Je=We?(We-Ke)/7+1:0)};let Qe;const Ge=()=>Qe?Je:performance.interactionCount??0;let Ve=0;class Ye{u=[];l=new Map;m;p;v(){Ve=Ge(),this.u.length=0,this.l.clear()}L(){const e=Math.min(this.u.length-1,Math.floor((Ge()-Ve)/50));return this.u[e]}h(e){if(this.m?.(e),!e.interactionId&&"first-input"!==e.entryType)return;const t=this.u.at(-1);let r=this.l.get(e.interactionId);if(r||this.u.length<10||e.duration>t.P){if(r?e.duration>r.P?(r.entries=[e],r.P=e.duration):e.duration===r.P&&e.startTime===r.entries[0].startTime&&r.entries.push(e):(r={id:e.interactionId,entries:[e],P:e.duration},this.l.set(r.id,r),this.u.push(r)),this.u.sort(((e,t)=>t.P-e.P)),this.u.length>10){const e=this.u.splice(10);for(const t of e)this.l.delete(t.id)}this.p?.(r)}}}const Ze=e=>{const t=globalThis.requestIdleCallback||setTimeout;"hidden"===document.visibilityState?e():(e=Ne(e),addEventListener("visibilitychange",e,{once:!0,capture:!0}),t((()=>{e(),removeEventListener("visibilitychange",e,{capture:!0})})))},et=[200,500],tt=(e,t={})=>{if(!globalThis.PerformanceEventTiming||!("interactionId"in PerformanceEventTiming.prototype))return;const r=ze();De((()=>{"interactionCount"in performance||Qe||(Qe=qe("event",Xe,{type:"event",buffered:!0,durationThreshold:0}));let n,o=Ce("INP");const i=Ie(t,Ye),a=e=>{Ze((()=>{for(const t of e)i.h(t);const t=i.L();t&&t.P!==o.value&&(o.value=t.P,o.entries=t.entries,n())}))},s=qe("event",a,{durationThreshold:t.durationThreshold??40});n=xe(e,o,et,t.reportAllChanges),s&&(s.observe({type:"first-input",buffered:!0}),r.onHidden((()=>{a(s.takeRecords()),n(!0)})),ke((()=>{i.v(),o=Ce("INP"),n=xe(e,o,et,t.reportAllChanges)})))}))};class rt{m;h(e){this.m?.(e)}}const nt=[2500,4e3],ot=[800,1800],it=e=>{document.prerendering?De((()=>it(e))):"complete"!==document.readyState?addEventListener("load",(()=>it(e)),!0):setTimeout(e)};function at(){const e={ttfb:null,lcp:null,fp:null,fcp:null,connectionRtt:null,ttfbRequestTime:null,inp:null,cls:null,dcl:null,loadTime:null};((e,t={})=>{De((()=>{const r=ze();let n,o=Ce("LCP");const i=Ie(t,rt),a=e=>{t.reportAllChanges||(e=e.slice(-1));for(const t of e)i.h(t),t.startTime<r.firstHiddenTime&&(o.value=Math.max(t.startTime-Le(),0),o.entries=[t],n())},s=qe("largest-contentful-paint",a);if(s){n=xe(e,o,nt,t.reportAllChanges);const r=Ne((()=>{a(s.takeRecords()),s.disconnect(),n(!0)})),i=e=>{e.isTrusted&&(Ze(r),removeEventListener(e.type,i,{capture:!0}))};for(const e of["keydown","click","visibilitychange"])addEventListener(e,i,{capture:!0});ke((r=>{o=Ce("LCP"),n=xe(e,o,nt,t.reportAllChanges),Me((()=>{o.value=performance.now()-r.timeStamp,n(!0)}))}))}}))})((t=>{e.lcp=d(t.value)}),{reportAllChanges:!0}),((e,t={})=>{const r=ze();je(Ne((()=>{let n,o=Ce("CLS",0);const i=Ie(t,$e),a=e=>{for(const t of e)i.h(t);i.i>o.value&&(o.value=i.i,o.entries=i.o,n())},s=qe("layout-shift",a);s&&(n=xe(e,o,He,t.reportAllChanges),r.onHidden((()=>{a(s.takeRecords()),n(!0)})),ke((()=>{i.i=0,o=Ce("CLS",0),n=xe(e,o,He,t.reportAllChanges),Me((()=>n()))})),setTimeout(n))})))})((t=>{e.cls=Math.round(1e4*t.value)/1e4}),{reportAllChanges:!0}),tt((t=>{e.inp=d(t.value)}),{reportAllChanges:!0}),((e,t={})=>{let r=Ce("TTFB"),n=xe(e,r,ot,t.reportAllChanges);it((()=>{const o=Ae();o&&(r.value=Math.max(o.responseStart-Le(),0),r.entries=[o],n(!0),ke((()=>{r=Ce("TTFB",0),n=xe(e,r,ot,t.reportAllChanges),n(!0)})))}))})((t=>{e.ttfb=d(t.value)})),je((t=>{e.fcp=d(t.value)}));const t=()=>{(()=>{try{performance.getEntriesByType("paint").forEach((t=>{"first-paint"===t.name&&(e.fp=d(t.startTime))}))}catch(e){console.warn("[TM]: Failed to collect FP:",e)}try{const t=navigator.connection||navigator.mozConnection||navigator.webkitConnection;t&&void 0!==t.rtt&&(e.connectionRtt=t.rtt)}catch(e){console.warn("[TM]: Failed to collect Connection RTT:",e)}try{const t=performance.getEntriesByType("navigation")[0];if(t){const{responseStart:r,requestStart:n}=t;r>0&&n>0&&n<=r&&(e.ttfbRequestTime=d(r-n))}}catch(e){console.warn("[TM]: Failed to collect TTFB Request Time:",e)}try{const t=performance.getEntriesByType("navigation")[0];if(t){const{domContentLoadedEventEnd:r,loadEventEnd:n,fetchStart:o}=t;r>0&&o>0&&(e.dcl=d(r-o)),n>0&&o>0&&(e.loadTime=d(n-o))}}catch(e){console.warn("[TM]: Failed to collect DCL and Load Time:",e)}})(),window.trackMonitor.track({data_type:"performance",event_type:"metrics",event_detail:{traceId:te,data:e}})};let r=0;const n=()=>{const e=Date.now();e-r<3e4||(r=e,t())};window.addEventListener("beforeunload",t),window.addEventListener("pagehide",n),document.addEventListener("visibilitychange",(()=>{"hidden"===document.visibilityState&&n()}))}const st="__tengence_sdk",ct=e=>{if("undefined"!=typeof window&&window.trackMonitor&&window.trackMonitor[st])return console.warn("[TM]: init 已调用过,复用现有实例(如需重建请刷新页面)"),window.trackMonitor;const{client:t,beforeClose:r}=ee(e);var n;return me(t.track),!1!==e.traceBehavior&&se({enableScroll:e.enableScroll}),!1!==e.enableFormTrack&&(n=t.track,document.addEventListener("focusin",(e=>{const t=e.target;if(!(r=t)||"INPUT"!==r.tagName&&"SELECT"!==r.tagName&&"TEXTAREA"!==r.tagName)return;var r;const o=t.closest("form");o&&!be.has(o)&&(be.add(o),n({data_type:"common",event_type:"form_start",event_detail:Se(o)}))}),!0),document.addEventListener("submit",(e=>{const t=e.target;if(!t||"FORM"!==t.tagName)return;const r=e.submitter;n({data_type:"common",event_type:"form_submit",event_detail:{...Se(t),submitter_id:r?.id||null,submitter_text:(r?.textContent||"").trim().slice(0,200)||null}})}),!0)),!1!==e.traceError&&(we(),ve(),Te(),_e()),!1!==e.tracePerformance&&l((()=>{!function(){const e=window.performance||window.msPerformance;if(!e)return{dnsLookupTime:null,tcpConnectTime:null,ttfb:null,transferTime:null,domParseTime:null,domCompleteTime:null,loadEventTime:null,totalPageLoad:null};const t=e.getEntriesByType&&"function"==typeof e.getEntriesByType?e.getEntriesByType("navigation"):void 0,r=Array.isArray(t)?t[0]:void 0;let n=null;if(r)n=r;else{const t=e.timing;t&&(n={startTime:0,domainLookupStart:t.domainLookupStart,domainLookupEnd:t.domainLookupEnd,connectStart:t.connectStart,connectEnd:t.connectEnd,requestStart:t.requestStart,responseStart:t.responseStart,responseEnd:t.responseEnd,domInteractive:t.domInteractive,domComplete:t.domComplete,loadEventEnd:t.loadEventEnd,fetchStart:t.fetchStart},!n.requestStart&&t.fetchStart&&(n.requestStart=t.fetchStart))}const o={dnsLookupTime:n?d(n.domainLookupEnd-n.domainLookupStart):null,tcpConnectTime:n?d(n.connectEnd-n.connectStart):null,ttfb:n?d(n.responseStart-(n.requestStart??n.fetchStart??0)):null,transferTime:n?d(n.responseEnd-n.responseStart):null,domParseTime:n?d(n.domInteractive-n.responseEnd):null,domCompleteTime:n?d(n.domComplete-n.domInteractive):null,loadEventTime:n?d(n.loadEventEnd-(n.domComplete??0)):null,totalPageLoad:n?d((n.loadEventEnd??performance.now())-(n.startTime??0)):null};window.trackMonitor.track({data_type:"performance",event_type:"navigation_timing",event_detail:{traceId:te,data:o}})}(),function(){const e=window.performance||window.msPerformance;if(!e)return[];const t=[];if(e.getEntriesByType){const r=(e.getEntriesByType("resource")||[]).map((e=>{const t="number"==typeof e.redirectEnd&&"number"==typeof e.redirectStart?d(e.redirectEnd-e.redirectStart):null,r="number"==typeof e.domainLookupEnd&&"number"==typeof e.domainLookupStart?d(e.domainLookupEnd-e.domainLookupStart):null,n="number"==typeof e.connectEnd&&"number"==typeof e.connectStart?d(e.connectEnd-e.connectStart):null,o="number"==typeof e.requestStart&&"number"==typeof e.fetchStart?d(e.requestStart-e.fetchStart):null,i="number"==typeof e.responseStart&&"number"==typeof e.requestStart?d(e.responseStart-e.requestStart):null,a="number"==typeof e.responseEnd&&"number"==typeof e.responseStart?d(e.responseEnd-e.responseStart):null,s="number"==typeof e.duration?d(e.duration):null,c="number"==typeof e.startTime?d(e.startTime):null,l="number"==typeof e.transferSize&&isFinite(e.transferSize)&&e.transferSize>=0?Math.round(e.transferSize):null,u="number"==typeof e.encodedBodySize&&isFinite(e.encodedBodySize)&&e.encodedBodySize>=0?Math.round(e.encodedBodySize):null,m="number"==typeof e.decodedBodySize&&isFinite(e.decodedBodySize)&&e.decodedBodySize>=0?Math.round(e.decodedBodySize):null;return{name:e.name,initiatorType:e.initiatorType||"",startTime:c,duration:s,redirectTime:t,cacheTime:o,dnsTime:r,connectTime:n,requestTime:i,responseTime:a,transferSize:l,encodedBodySize:u,decodedBodySize:m}}));r.sort(((e,t)=>(t.duration??0)-(e.duration??0)));const n=w?.resourceFlowLimit??15;if(0===n)return;for(let e=0;e<Math.min(n,r.length);e++)t.push(r[e]);if(!t.length)return}window.trackMonitor.track({data_type:"performance",event_type:"resource_flow",event_detail:{traceId:te,data:t}})}(),at()})),l((()=>{r()})),window.trackMonitor[st]=!0,window.trackMonitor};export{ct as default};
|
|
1
|
+
class e extends Error{status;constructor(e,t){super(t||`[TM]: Auth error ${e}`),this.name="AuthError",this.status=e}}const t=({method:e,url:t,data:r,headers:n={},withCredentials:o=!1,timeoutMs:i})=>new Promise(((a,s)=>{const c=new XMLHttpRequest;c.open(e,t,!0),i&&(c.timeout=i),Object.keys(n).forEach((e=>{c.setRequestHeader(e,n[e])})),c.withCredentials=!!o,c.onreadystatechange=()=>{if(4===c.readyState)if(c.status>=200&&c.status<300)try{const e=JSON.parse(c.responseText);a(e)}catch(e){s(e)}else{const e=new Error(`[TM]: Request failed with status ${c.status}`);e.status=c.status,s(e)}},c.onerror=()=>{s(new Error("[TM]: Network error"))},c.ontimeout=()=>{const e=new Error("[TM]: Request timeout");e.timeout=!0,s(e)},r?c.send(r):c.send()})),r=(e,t,r)=>{if(!r)return fetch(e,t);const n=new AbortController,o=setTimeout((()=>n.abort()),r);return fetch(e,{...t,signal:n.signal}).catch((e=>{if(e&&"AbortError"===e.name){const e=new Error("[TM]: Request timeout");throw e.timeout=!0,e}throw e})).finally((()=>clearTimeout(o)))},n=(n,o,i,a)=>{const s={"Content-Type":"application/json"};i&&(s.Authorization=`Bearer ${i}`);const c=()=>t({method:"POST",url:n,data:JSON.stringify(o),headers:s,withCredentials:!0,timeoutMs:a});return"function"!=typeof fetch?c():r(n,{method:"POST",keepalive:!0,credentials:"include",headers:s,body:JSON.stringify(o)},a).then((t=>{if(401===t.status||403===t.status)throw new e(t.status,`[TM]: Auth error ${t.status}`);if(429===t.status){const e=new Error("[TM]: Request throttled with status 429");e.status=429;const r=t.headers.get("Retry-After");if(r){const t=parseInt(r,10);isNaN(t)||(e.retryAfter=1e3*t)}throw e}if(!t.ok){const e=new Error(`[TM]: Request failed with status ${t.status}`);throw e.status=t.status,e}return t.json()})).catch((t=>{if(t instanceof e)throw t;if(t&&t.status)throw t;return c()}))},o=window.requestIdleCallback||window.requestAnimationFrame||(e=>setTimeout(e,17));function i(e,t=150,r=!1){let n=null;return function(...o){const i=this,a=r&&!n;n&&clearTimeout(n),n=setTimeout((()=>{n=null,r||e.apply(i,o)}),t),a&&e.apply(i,o)}}const a=(e,t=300)=>{let r=0;return function(...n){const o=Date.now();o-r>=t&&(r=o,e.apply(this,n))}};function s(e,t=""){if(!e)return t;const r=e.parentElement,{id:n}=e,o=e.tagName.toLowerCase(),i=t?`>${t}`:"";return r&&r!==document.documentElement&&r!==document.body?n?`#${n}${i}`:s(r,`${o}${i}`):`${o}${i}`}const c=()=>{if(window.performance?.navigation)return performance.navigation.type;if(window.performance?.getEntriesByType){const e=performance.getEntriesByType("navigation");if(e.length>0)return e[0].type}return 255},l=e=>{"prerendering"in document&&document.prerendering?(e=>{"prerendering"in document&&document.prerendering?addEventListener("prerenderingchange",(()=>e()),!0):e()})((()=>l(e))):"complete"!==document?.readyState?addEventListener("load",(()=>l(e)),!0):setTimeout(e)};function d(e){return"number"!=typeof e||!isFinite(e)||e<0?null:Math.round(100*e)/100}function u(){const e=new Uint8Array(16);if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues)crypto.getRandomValues(e);else for(let t=0;t<16;t++)e[t]=Math.floor(256*Math.random());e[6]=15&e[6]|64,e[8]=63&e[8]|128;let t="";for(let r=0;r<16;r++)t+=(e[r]<16?"0":"")+e[r].toString(16);return t}const m=e=>e instanceof ErrorEvent?"Script error."===e.message?"cors":"js":"resource",p=e=>(e=>{let t=5381;for(let r=0;r<e.length;r++)t=(t<<5)+t+e.charCodeAt(r)>>>0;return t.toString(16).padStart(8,"0")})(e)+(e=>{let t=5381;for(let r=e.length-1;r>=0;r--)t=((t<<5)+t^e.charCodeAt(r))>>>0;return t.toString(16).padStart(8,"0")})(e);const f={view:"#3b82f6",click:"#06b6d4",expose:"#8b5cf6",enter:"#10b981",leave:"#f59e0b",stay:"#84cc16",cart:"#ec4899",buy:"#ef4444",pay:"#dc2626",default:"#6b7280"},h={view:"👁️",click:"👆",expose:"✨",enter:"🚪",leave:"👋",stay:"⏱️",cart:"🛒",buy:"💰",pay:"💳",default:"📊"},g={common:"#3b82f6",behavior:"#10b981",performance:"#f59e0b",error:"#ef4444",custom:"#8b5cf6",default:"#6b7280"},y=(e,t)=>{t.forEach(((t,r)=>{const n=t.event_type||"unknown",o=t.data_type||"auto",i=(e=>f[e]||f.default)(n),a=(e=>g[e]||g.default)(o),s=(e=>h[e]||h.default)(n);let c=t.event_detail;if("string"==typeof c)try{c=JSON.parse(c)}catch(e){}console.groupCollapsed(`%c${s} [TM-${e}] %c${o.toUpperCase()}%c → %c${n.toUpperCase()}%c #${r+1}`,"color: #6b7280; font-weight: bold;",`color: ${a}; font-weight: bold; background: ${a}20; padding: 2px 6px; border-radius: 3px;`,"color: #6b7280;",`color: ${i}; font-weight: bold; background: ${i}20; padding: 2px 6px; border-radius: 3px;`,"color: #6b7280; font-weight: normal;");const l={...t,event_detail:c};console.log("%c"+JSON.stringify(l,null,2),"color: #6b7280; font-family: monospace; font-size: 11px; line-height: 1.5;"),console.groupEnd()})),console.log(`%c✅ [TM] 本次通过 ${e} 上报 ${t.length} 条埋点数据`,"color: #10b981; font-weight: bold; font-size: 12px; padding: 4px 8px; background: #10b98120; border-radius: 4px; border-left: 3px solid #10b981;")};let w;const v="TRACK_MONITOR_DATA",T="MONITOR_REAL_TIME_DATA",_="TRACK_MONITOR_USER",b="tengence_device_id",S="tengence_register_properties",E="TRACK_MONITOR_LOGGER",k="tengence_tracking_enabled",x=2e3,M="tengence_access_token";let A=null,L=null;const C=e=>((e,n,o)=>{const i={"Content-Type":"application/json"},a=()=>t({method:"POST",url:e,data:JSON.stringify(n),headers:i,withCredentials:!0,timeoutMs:o});return"function"!=typeof fetch?a():r(e,{method:"POST",credentials:"include",headers:i,body:JSON.stringify(n)},o).then((e=>{if(!e.ok){const t=new Error(`[TM]: Request failed with status ${e.status}`);throw t.status=e.status,t}return e.json()})).catch((e=>{if(e&&e.status)throw e;return a()}))})(e,{},w?.requestTimeout).then((e=>{const t=e&&e.data,r=t&&t.accessToken,n=t&&t.accessExpAt;if(!r||"number"!=typeof n)throw new Error("[TM]: authUrl 响应缺少 accessToken/accessExpAt");return((e,t)=>{A={token:e,expAt:t};try{localStorage.setItem(M,JSON.stringify({token:e,expAt:t}))}catch(e){}})(r,n),r})),R=e=>{const t=(()=>{if(A)return A;try{const e=localStorage.getItem(M);if(!e)return null;const t=JSON.parse(e);if(t&&"string"==typeof t.token&&t.token&&"number"==typeof t.expAt)return A={token:t.token,expAt:t.expAt},A}catch(e){}return null})();return(r=t)&&r.token.length>0&&r.expAt-6e4>Date.now()?Promise.resolve(t.token):(L||(L=C(e).catch((e=>{throw e})).finally((()=>{L=null}))),L);var r},I={timer:null,promise:null},$={timer:null,promise:null},q=e=>{const t=JSON.stringify(e);return(new TextEncoder).encode(t).length/1024};let N=null;const P=()=>{if(N)return N;try{const e=localStorage.getItem(S),t=e?JSON.parse(e):{};return N=t,t}catch(e){return console.error("[TM]: get register properties fail: ",e),{}}},O=e=>{N=e;try{localStorage.setItem(S,JSON.stringify(e))}catch(e){console.error("[TM]: save register properties fail: ",e)}},U=e=>{if(!e||"object"!=typeof e||Array.isArray(e))return void console.error("[TM]: registerGlobalProperties props must be a plain object");const t={...P(),...e},r=Object.keys(t);if(r.length>50){const e={};return r.slice(0,50).forEach((r=>{e[r]=t[r]})),console.warn("[TM]: register properties exceed max 50 keys, extra keys dropped"),void O(e)}O(t)},B=e=>{const t=document.cookie.match(new RegExp("(?:^|;\\s*)"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):void 0},z=e=>{document.cookie=`${b}=${encodeURIComponent(e)}; Max-Age=63072000; Path=/; Secure; SameSite=Lax`};let D;const F=()=>{if(D)return D;try{let e=localStorage.getItem(b);if(e)return B(b)||z(e),D=e;const t=B(b);if(t){try{localStorage.setItem(b,t)}catch(e){}return D=t}e=u();try{localStorage.setItem(b,e)}catch(e){}return z(e),D=e}catch(e){return void console.error("[TM]: get or create device id fail: ",e)}},j="tengence_session_id",H=()=>{try{const e=sessionStorage.getItem(j);let t=e?JSON.parse(e):null;const r=Date.now();return!t||!t.id||r-t.lastActiveAt>18e5?(t={id:u(),lastActiveAt:r},sessionStorage.setItem(j,JSON.stringify(t))):(t.lastActiveAt=r,sessionStorage.setItem(j,JSON.stringify(t))),t.id}catch(e){return}},J=(e,t)=>{try{const r=new URL(e,location.href);if(!r.searchParams.toString())return e;if(t&&t.length){const e=[];for(const n of t){const t=r.searchParams.get(n);null!==t&&e.push(`${n}=${encodeURIComponent(t)}`)}r.search=e.length?`?${e.join("&")}`:""}else r.search="";return r.toString()}catch(t){return e}},K=(e,t,r)=>{if("string"==typeof e)return t>0&&e.length>t?e.slice(0,t)+"...[truncated]":e;if(Array.isArray(e))return e.map((e=>K(e,t,r)));if(e&&"object"==typeof e){const n={};for(const o of Object.keys(e)){const i=e[o];"string"==typeof i&&/(^|_)url$|(^|_)href$|^referrer$/i.test(o)&&/^https?:\/\//i.test(i)?n[o]=J(i,r):n[o]=K(i,t,r)}return n}return e},W=e=>{const t={page_url:location.href,hostname:window.location.hostname||window.location.host,os:window.navigator.platform,user_id:localStorage.getItem(_)||void 0,user_agent:window.navigator.userAgent,screen_width:window.screen.width,screen_height:window.screen.height,lib_version:"1.2.1",lib_type:"js",event_time:Date.now(),timezone_offset:(new Date).getTimezoneOffset().toString()},r=w?.sanitize;let n;try{n="string"==typeof e.event_detail?e.event_detail:JSON.stringify(r&&(r.maxTextLength>0||r.stripQuery)?K(e.event_detail,r.maxTextLength,r.preserveQueryKeys):e.event_detail)}catch(e){return Y("serialize_failed","事件 event_detail 序列化失败(循环引用/BigInt?),该事件丢弃",{error:e}),void console.warn("[TM]: event_detail 序列化失败,该事件丢弃",e)}return{session_id:e.session_id||(w?.enableAutoSessionId?H():void 0),request_id:e.request_id,event_id:e.event_id||u(),spm:e.spm,data_type:e.data_type||"behavior",event_type:e.event_type,event_detail:n,...t,page_url:r&&r.stripQuery?J(t.page_url,r.preserveQueryKeys):t.page_url,device_id:F(),register_properties:JSON.stringify(P()),platform:e.platform||X}};let X;const Q=()=>{try{return"true"===localStorage.getItem(E)}catch(e){return!1}},G=(e,t,r,n,o)=>void 0===e?t:"number"!=typeof e||Number.isNaN(e)||e<r||e>n?(console.warn(`[TM]: 配置 ${o}=${e} 非法,回退默认值 ${t}`),t):e,V=(e,t)=>{try{w?.onDrop?.(e,t)}catch(e){}},Y=(e,t,r)=>{w?.isLogger&&console.error(`[TM]: ${t}`);try{w?.onError?.({code:e,message:t,context:r})}catch(e){}},Z=()=>{try{const e=localStorage.getItem(k);return null===e||"1"===e}catch(e){return!0}},ee=t=>{const r=t.apiKey;let i;const a=/Android|iPhone|iPad|iPod|Mobile/i.test(window.navigator.userAgent);X=t.platform||(a?"h5":"web"),w={pushUrl:t.pushUrl||"https://api.tengence.com/v1/push/event",authUrl:t.authUrl,realTimeUrl:t.realTimeUrl,cacheNumber:G(t.cacheNumber,100,1,1/0,"cacheNumber"),reportInterval:G(t.reportInterval,5e3,100,1/0,"reportInterval"),realTimeReportInterval:G(t.realTimeReportInterval,200,100,1/0,"realTimeReportInterval"),maxCacheSize:G(t.maxCacheSize,56,1,1/0,"maxCacheSize"),maxRetries:G(t.maxRetries,10,0,1/0,"maxRetries"),isLogger:t.isLogger??Q(),errorTraceRate:G(t.errorTraceRate,.5,0,1,"errorTraceRate"),resourceFlowLimit:G(t.resourceFlowLimit,15,0,200,"resourceFlowLimit"),traceBehavior:t.traceBehavior??!0,tracePerformance:t.tracePerformance??!0,traceError:t.traceError??!0,sanitize:!1===t.sanitize?{stripQuery:!1,maxTextLength:0,preserveQueryKeys:[]}:{stripQuery:t.sanitize?.stripQuery??!1,maxTextLength:G(t.sanitize?.maxTextLength,0,0,1/0,"sanitize.maxTextLength"),preserveQueryKeys:t.sanitize?.preserveQueryKeys||[]},enableAutoSessionId:t.enableAutoSessionId??!1,enableTracking:t.enableTracking??Z(),respectGpc:t.respectGpc??!0,requestTimeout:G(t.requestTimeout,1e4,1e3,6e4,"requestTimeout"),beforeSend:t.beforeSend,onDrop:t.onDrop,onError:t.onError};let{pushUrl:s,authUrl:c,realTimeUrl:l,cacheNumber:d,reportInterval:u,realTimeReportInterval:m,maxCacheSize:p,maxRetries:f}=w;r||c||(console.error("[TM]: 未配置 apiKey 或 authUrl,SDK 无法获取上报凭证,数据将不会上报。请配置 apiKey(直连)或 authUrl(自动换取 accessToken),或调用 setToken 注入 accessToken。"),Y("init_missing_credential","未配置 apiKey 或 authUrl,SDK 无法获取上报凭证,数据将不会上报。请配置 apiKey(直连)或 authUrl(自动换取 accessToken),或调用 setToken 注入 accessToken。"));const h={retryCount:0,nextRetryAt:0,retryExhausted:!1,halveBatch:!1},g={retryCount:0,nextRetryAt:0,retryExhausted:!1,halveBatch:!1},b=e=>{try{localStorage.setItem(_,e)}catch(e){console.error("[TM]: monitor bind user fail: ",e)}},S=()=>{localStorage.removeItem(_)},L={},C={},N=new Set;let P=null;const O=()=>{null!==P&&(clearTimeout(P),P=null),N.size&&(N.forEach((e=>{try{localStorage.setItem(e,JSON.stringify(L[e]||[]))}catch(t){Y("queue_write_failed","写入本地缓存队列失败(隐私模式/容量满?),本次数据仅保留内存",{key:e,error:t})}})),N.clear())},B=e=>{if(L[e])return L[e];let t=[];try{t=JSON.parse(localStorage.getItem(e)||"[]")}catch(t){Y("queue_read_failed","读取本地缓存队列失败,按空队列处理",{key:e,error:t})}return L[e]=t,C[e]=t.reduce(((e,t)=>e+q(t)),0),L[e]},z=(e,t)=>{N.delete(e),L[e]=t,C[e]=t.reduce(((e,t)=>e+q(t)),0);try{localStorage.setItem(e,JSON.stringify(t))}catch(t){Y("queue_write_failed","写入本地缓存队列失败(隐私模式/容量满?),队列清空处理",{key:e,error:t});try{localStorage.setItem(e,"[]")}catch(t){Y("localstorage_unavailable","localStorage 不可用,本次数据仅保留内存",{key:e,error:t})}}},D=e=>{i=e},F=async(t,o,a=!1)=>{const d=t&&l?l:s;let u;try{u=r||i||(c?await R(c):void 0)}catch(e){throw Y("token_fetch_failed","从 authUrl 获取 accessToken 失败,本批暂不上报(保留队列待重试)",{authUrl:c,error:e}),e}if(!u)throw Y("init_missing_credential","未配置 apiKey/authUrl 且未注入 accessToken,本次数据未上报(保留缓存队列待重试)"),new Error("[TM]: credential missing, skip report");w?.isLogger&&y(t?"RealTimeFetch":"Fetch",o);const m=w?.beforeSend?(()=>{let e;try{e=w.beforeSend(o)}catch(e){Y("before_send_failed","beforeSend 钩子抛错,本次按原始数据发送",{error:e})}return Array.isArray(e)?e:o})():o,p=a?void 0:w?.requestTimeout;return n(d,{data:m},u,p).catch((async t=>{const o=t?.status;if((t instanceof e||401===o||403===o)&&!r&&!i&&c){(()=>{A=null;try{localStorage.removeItem(M)}catch(e){}})();const e=await R(c).catch((()=>{}));if(e)return n(d,{data:m},e,p);Y("token_invalid","上报 401/403 且刷新 accessToken 失败,本批暂不上报(保留队列待重试)",{authUrl:c})}throw t}))},j=(e,t)=>{const r=new Set(t.filter((e=>!!e)));if(!r.size)return;const n=B(e);if(!n.length)return;const o=n.filter((e=>e.event_id&&!r.has(e.event_id)));o.length!==n.length&&z(e,o)},H=(e,t,r=0)=>{const n=(t?m:u)*Math.pow(2,e)*(.8+.4*Math.random()),o=Math.min(n,6e4);return Math.max(o,r)},J=(e,t)=>{const r=q(t);if(r>=64)return V([t],"item_too_large"),void console.warn("[TM]: 单条事件超过体积上限(64KB),丢弃该条");const n=B(e);if(n.unshift(t),C[e]+=r,n.length>x){const t=n.length-x,r=n.splice(n.length-t,n.length);C[e]=n.reduce(((e,t)=>e+q(t)),0),V(r,"queue_overflow"),console.warn(`[TM]: 队列超过上限(2000条),丢弃最旧 ${t} 条`)}(e=>{N.add(e),null===P&&(P=setTimeout((()=>{P=null,O()}),200))})(e),K(e,C[e]>=p)},K=(e,t=!1,r=!1)=>{if(!w?.enableTracking)return;let n=B(e);if(!n.length)return;const o=(e=>e===T)(e),i=o?$:I,a=(e=>e?g:h)(o);if(a.halveBatch&&n.length>1&&(n=n.slice(0,Math.ceil(n.length/2))),a.retryExhausted)return;if(Date.now()<a.nextRetryAt)return void(null===i.timer&&(i.timer=setTimeout((()=>{i.timer=null,K(e)}),a.nextRetryAt-Date.now())));if(0!==a.retryCount||(n.length>=d||t)){if(null!==i.timer&&(clearTimeout(i.timer),i.timer=null),i.promise)return;i.promise=(async(e,t,r,n,o=!1)=>{const i=[];let a=[],s=0;for(const e of t){const t=1024*q(e);a.length&&s+t>65536&&(i.push(a),a=[],s=0),a.push(e),s+=t}a.length&&i.push(a);for(const t of i){const n=await F(r,t,o),i=n?.data?.accepted_ids,a=n?.data?.rejected_ids;if(Array.isArray(i)){if(j(e,i),Array.isArray(a)&&a.length){const r=new Set(a);j(e,a);const n=t.filter((e=>e.event_id&&r.has(e.event_id)));n.length&&V(n,"server_rejected"),console.warn(`[TM]: 服务端校验拒绝 ${a.length} 条(永久性拒绝),已从队列移除并通知 onDrop`)}}else j(e,t.map((e=>e.event_id))),w?.isLogger&&console.warn("[TM]: 响应缺少 accepted_ids,按整批成功清理")}n.retryCount=0,n.nextRetryAt=0,n.halveBatch=!1})(e,n,o,a,r).catch((e=>{((e,t,r,n,o)=>{t?.timeout&&Y("request_timeout","上报请求超时,数据保留队列按退避重试",{url:r&&l?l:s,timeoutMs:w?.requestTimeout});const i=t?.status;if(413===i)return void(o.length>1?(n.halveBatch=!0,n.retryCount++,n.nextRetryAt=Date.now()+H(n.retryCount,r,0),console.warn(`[TM]: 批次过大(HTTP 413),降容半批重发(本批 ${o.length} 条)`)):(n.retryExhausted=!0,V(o,"rejected_4xx"),console.warn("[TM]: 单条事件仍超限(HTTP 413),数据保留在队列")));if(i&&i>=400&&i<500&&401!==i&&403!==i&&408!==i&&410!==i&&429!==i)return n.retryExhausted=!0,V(o,"rejected_4xx"),void console.warn(`[TM]: 批次提交被服务端拒绝(HTTP ${i}),数据保留在队列并暂停自动重试`);if(n.retryCount++,n.retryCount>f)return n.retryExhausted=!0,V(o,"retries_exhausted"),void console.warn(`[TM]: 重试次数已达上限(${f}),数据保留在队列(不丢弃),待下次会话或手动触发重试`);const a=429===i&&t?.retryAfter||0;n.nextRetryAt=Date.now()+H(n.retryCount,r,a),console.error(`[TM]: send report fail, retryCount: ${n.retryCount}, next retry after ${Math.round((n.nextRetryAt-Date.now())/1e3)}s`)})(0,e,o,a,n)})).finally((()=>{i.timer=null,i.promise=null,K(e)}))}else if(null===i.timer){const t=o?m:u;i.timer=setTimeout((()=>{i.timer=null,K(e,!0)}),t)}},ee=e=>{if(!w?.enableTracking||w?.respectGpc&&function(){const e="undefined"!=typeof navigator?navigator:void 0;return!0===e?.globalPrivacyControl}())return void(w?.isLogger&&console.warn("[TM]: 用户已选择退出采集(enableTracking=false 或 GPC 信号开启),本事件忽略"));if(!e||"object"!=typeof e)return void console.error("[TM]: track data must be an object");const t=!0===e.track_real_time,r=W(e);if(r)try{J(t&&l?T:v,r)}catch(e){Y("enqueue_failed","事件入队失败",{error:e})}},te=(e,t,r)=>{ee("string"==typeof e?{event_type:e,event_detail:t,...r}:e)},re=()=>{K(v,!0),K(T,!0);const e=[I.promise,$.promise].filter((e=>!!e));return Promise.all(e).then((()=>{}))},ne=()=>{w.isLogger=!0;try{localStorage.setItem(E,"true")}catch(e){console.error("[TM]: enable logger fail:",e)}},oe=()=>{w.isLogger=!1;try{localStorage.setItem(E,"false")}catch(e){console.error("[TM]: disable logger fail:",e)}};o((()=>{K(v,!0),K(T,!0)}));const ie=e=>("boolean"==typeof e&&(w.enableTracking=e,(e=>{try{localStorage.setItem(k,e?"1":"0")}catch(e){}})(e),e?w?.isLogger&&console.warn("[TM]: 恢复采集"):(z(v,[]),z(T,[]),w?.isLogger&&console.warn("[TM]: 用户已选择退出采集,已清空未上报队列"))),!0===w?.enableTracking);return window.trackMonitor={track:te,flush:re,bindUser:b,unBindUser:S,enableLogger:ne,disableLogger:oe,setToken:D,registerGlobalProperties:U,enableTracking:ie},{client:{track:te,flush:re,bindUser:b,unBindUser:S,enableLogger:ne,disableLogger:oe,setToken:D,registerGlobalProperties:U,enableTracking:ie},beforeClose:()=>{const e=()=>{O(),K(v,!0,!0),K(T,!0,!0)};window.addEventListener("beforeunload",e),window.addEventListener("pagehide",e),document.addEventListener("visibilitychange",(()=>{"hidden"===document.visibilityState&&e()})),window.addEventListener("online",e)}}},te=(re=16,function(){const e=new Uint8Array(re);if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues)crypto.getRandomValues(e);else for(let t=0;t<re;t++)e[t]=Math.floor(256*Math.random());let t="";for(let r=0;r<re;r++)t+=(e[r]<16?"0":"")+e[r].toString(16);return t})();var re;const ne=e=>{const t=history[e];return function(){const r=t.apply(this,arguments),n=new Event(e);return window.dispatchEvent(n),r}},oe=e=>{window.addEventListener("replaceState",(t=>e(t)),!0),window.addEventListener("pushState",(t=>e(t)),!0)},ie=e=>{window.addEventListener("popstate",(t=>e(t)),!0)},ae=[25,50,75,90],se=e=>{history.pushState=ne("pushState"),history.replaceState=ne("replaceState"),(()=>{let e="";const t=()=>{const t=window.location.href;if(t===e)return;const{host:r,hostname:n,href:o,protocol:i,origin:a,port:s,pathname:l,search:d,hash:u}=window.location,m={host:r,hostname:n,href:o,protocol:i,origin:a,port:s,pathname:l,search:d,hash:u,title:document.title,language:navigator.language.substring(0,2),user_agent:navigator.userAgent,win_screen:`${window.screen.width}x${window.screen.height}`,doc_screen:`${document.documentElement.clientWidth}x${document.documentElement.clientHeight}`,referrer:document.referrer,type:c()};window.trackMonitor.track({data_type:"auto",event_type:"page_view",event_detail:m}),e=t},r=i(t,200);t(),ie((()=>{r()})),oe((()=>{r()})),window.addEventListener("popstate",(()=>{r()}))})(),(()=>{let e=document.referrer,t=window.location.href,r=Date.now(),n=!0;const o=(n=!1)=>{if(window.location.href!==t||n){const n=Date.now()-r;n>200&&window.trackMonitor.track({data_type:"auto",event_type:"page_leave",event_detail:{url:t,referrer:e,duration:n}}),r=Date.now(),e=t,t=window.location.href}},a=i(o);o(),ie((()=>{a()})),oe((()=>{a()})),document.addEventListener("visibilitychange",(()=>{"hidden"===document.visibilityState?n&&(n=!1,o(!0)):(n=!0,r=Date.now())})),window.addEventListener("beforeunload",(()=>{n&&(n=!1,o(!0))}),!0)})(),(()=>{const e=a((e=>{const t=function(e){if(!e)return;if(["A","INPUT","TEXTAREA","BUTTON"].includes(e.tagName))return e;if(e.hasAttribute("track-click"))return e;return e.closest("a, button, [track-click]")||void 0}(e.target);if(!t)return;const r={element_id:t.id,element_content:t.textContent?.trim().slice(0,200)||null,element_class_name:t.className||null,element_name:t.getAttribute("name")||null,element_type:t.tagName.toLowerCase(),element_path:s(t),scroll_width:document.documentElement.scrollWidth,scroll_height:document.documentElement.scrollHeight,pageX:e.pageX,pageY:e.pageY,ratio:window.devicePixelRatio||1};window.trackMonitor.track({data_type:"auto",event_type:"click",event_detail:r})}));window.addEventListener("click",e,!0)})(),!1!==e?.enableScroll&&(()=>{const e=new Set,t=a((()=>{const r=document.documentElement,n=r.scrollHeight-r.clientHeight;if(n<=0)return;const o=Math.round((window.scrollY||r.scrollTop)/n*100),i=ae.filter((t=>o>=t&&!e.has(t)));i.length&&(i.forEach((t=>{e.add(t),window.trackMonitor.track({data_type:"auto",event_type:"scroll",event_detail:{scroll_depth:t}})})),e.has(90)&&window.removeEventListener("scroll",t))}),300);window.addEventListener("scroll",t,{passive:!0})})()};let ce=null,le=null;const de="track-expose",ue="track-view",me=e=>{try{le=new WeakMap}catch(e){console.error("[TM]: create WeakMap fail: ",e)}const t=(e,t=!1)=>{const n=le?.get(e);if(n&&!t)return;n&&(n.viewTimer&&clearTimeout(n.viewTimer),n.exposeTimer&&clearTimeout(n.exposeTimer));const o=e.dataset.durationView||500,i=e.dataset.durationExpose||500;le?.set(e,{duration_view:o,duration_expose:i,viewTimer:null,exposeTimer:null}),ce?.observe(e),t&&function(e){if(!(e instanceof Element))return!1;if(!function e(t){if(!t)return!0;const r=window.getComputedStyle(t);return"none"!==r.display&&"hidden"!==r.visibility&&0!==parseFloat(r.opacity)&&e(t.parentElement)}(e))return!1;const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)}(e)&&r(e)},r=t=>{const r=le?.get(t);if(!r)return;const o=t.dataset.eventDetail,i=t.dataset.traceid??void 0,a=t.dataset.spm,s=t.hasAttribute("track-real-time"),c=t.hasAttribute(ue),l=t.hasAttribute(de);c&&l?r.exposeTimer=window.setTimeout((()=>{e({spm:a,request_id:i,data_type:"auto",event_type:"view_expose",event_detail:o,track_real_time:s}),t.removeAttribute(ue),r.exposeTimer=null}),parseInt(r.duration_expose,10)):(c&&(r.viewTimer=window.setTimeout((()=>{e({spm:a,request_id:i,data_type:"auto",event_type:"view",event_detail:o,track_real_time:s}),t.removeAttribute(ue),l&&r.exposeTimer||n(t),r.viewTimer=null}),parseInt(r.duration_view,10))),l&&(r.exposeTimer=window.setTimeout((()=>{e({spm:a,request_id:i,data_type:"auto",event_type:"expose",event_detail:o,track_real_time:s}),r.exposeTimer=null}),parseInt(r.duration_expose,10))))},n=e=>{const t=le?.get(e);t&&(ce?.unobserve(e),t.viewTimer&&clearTimeout(t.viewTimer),t.exposeTimer&&clearTimeout(t.exposeTimer),le?.delete(e))},o=e=>{e.forEach((e=>{const t=e.target,o=le?.get(t);o&&(o.viewTimer&&(clearTimeout(o.viewTimer),o.viewTimer=null),o.exposeTimer&&(clearTimeout(o.exposeTimer),o.exposeTimer=null),e.isIntersecting&&(r(t),t.hasAttribute(ue)||t.hasAttribute(de)||n(t)))}))};ce=(()=>{let e=null;try{e=new IntersectionObserver(o,{root:null,threshold:.5})}catch(e){console.error("[TM]: create IntersectionObserver fail: ",e)}return e})();new Set([...document.querySelectorAll(`[${de}]`),...document.querySelectorAll(`[${ue}]`)]).forEach((e=>t(e))),new MutationObserver((e=>{e.forEach((e=>{if("attributes"===e.type&&e.target instanceof HTMLElement){const r=e.target,o=e.attributeName,i=["data-event-detail","data-traceid","data-spm","data-duration-view","data-duration-expose"];r.hasAttribute(de)||r.hasAttribute(ue)?i.includes(o)?t(r,!0):o!==de&&o!==ue||t(r,!1):n(r)}else"childList"===e.type&&(e.addedNodes.forEach((e=>{if(e instanceof HTMLElement)if(e.hasAttribute(de)||e.hasAttribute(ue))t(e);else{new Set([...e.querySelectorAll(`[${de}]`),...e.querySelectorAll(`[${ue}]`)]).forEach((e=>t(e)))}})),e.removedNodes.forEach((e=>{if(e instanceof HTMLElement){const t=le?.get(e);if(t)n(e);else{new Set([...e.querySelectorAll(`[${de}]`),...e.querySelectorAll(`[${ue}]`)]).forEach((e=>n(e)))}}})))}))})).observe(document.body||document.documentElement,{attributes:!0,childList:!0,subtree:!0})},pe=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;function fe(e){const t=e.match(pe);if(!t)return{};return{filename:t[2],functionName:t[1]||"",lineno:parseInt(t[3],10)||void 0,colno:parseInt(t[4],10)||void 0}}function he(e){try{const{stack:t}=e;if(!t)return[];const r=[];for(const e of t.split("\n").slice(1)){const t=fe(e);!t||t.filename?.includes("chrome-extension://")||t.filename?.includes("node_modules")||t.filename?.includes("<anonymous>")||r.push(t)}return r.slice(0,10)}catch(e){return[]}}const ge=new Set,ye=(e,t)=>{if((r=w?.errorTraceRate??.5)<0||r>1?(console.warn("[TM]: probability should be between 0 and 1"),0):Math.random()<r){if(window.trackMonitor.track(t),ge.size>=1e3){const e=ge.values().next().value;void 0!==e&&ge.delete(e)}ge.add(e)}var r},we=()=>{window.addEventListener("error",(e=>{(e=>{if(e instanceof ErrorEvent&&"Script error."===e.message){const t=p("js-Script error.");if(ge.has(t))return;return void ye(t,{data_type:"error",event_type:"js",event_detail:{traceId:te,msg:'Script error.(跨域脚本未加载 crossorigin 属性,无法获取堆栈;建议脚本加 crossorigin="anonymous")',target:"",stack:[],errorUuid:t,meta:{filename:e.filename,colno:e.colno,lineno:e.lineno,crossorigin_missing:!0}}})}if("js"!==m(e))return;if((e=>{const t=e.error?.stack||"";return/chrome-extension:\/\//.test(t)})(e))return;const t=p(`js-${e.message}-${e.filename}`);if(ge.has(t))return;const r=he(e.error),n={traceId:te,msg:e.message,target:r[0]?`${r[0].filename?.split("?")[0]}:${r[0].lineno}:${r[0].colno}`:"",stack:r,errorUuid:t,meta:{filename:e.filename,colno:e.colno,lineno:e.lineno}};ye(t,{data_type:"error",event_type:"js",event_detail:n})})(e)}),!0)},ve=()=>{window.addEventListener("error",(e=>{(e=>{if("resource"!==m(e))return;const t=e.target,r=p(`resource-${t.src}-${t.tagName}`);if(ge.has(r))return;const n={traceId:te,msg:`加载${t.tagName}失败`,target:t.src?.split("?")[0],errorUuid:r,meta:{url:t.src,html:t.outerHTML,tagName:t.tagName}};ye(r,{data_type:"error",event_type:"resource",event_detail:n})})(e)}),!0)},Te=()=>{window.addEventListener("unhandledrejection",(e=>(e=>{const t=e.reason?.message||e.reason,r=p(`unhandledrejection-${t}`);if(ge.has(r))return;const n={traceId:te,msg:t,stack:he(e.reason),errorUuid:r};ye(r,{data_type:"error",event_type:"unhandledrejection",event_detail:n})})(e)),!0)},_e=()=>{const e=(e,t,r)=>{var n;if("string"!=typeof(n=e.url)||![w?.pushUrl,w?.authUrl,w?.realTimeUrl].filter((e=>!!e)).some((e=>0===n.indexOf(e))))if(t){const n=p(`http-${t}-${e.url}-${r}`);if(ge.has(n))return;const o={traceId:te,errorType:t,msg:r,target:e.url.split("?")[0],errorUuid:n,request:e};ye(n,{data_type:"error",event_type:"http",event_detail:o})}else if(e.status>=400){let r=e.statusText;const n=p(`http-${t="http_error"}-${e.url}-${r}`);if(ge.has(n))return;const o={traceId:te,errorUuid:n,errorType:t,target:e.url.split("?")[0],msg:r,request:e};ye(n,{data_type:"error",event_type:"http",event_detail:o})}};((e,t)=>{if("XMLHttpRequest"in window&&"function"==typeof window.XMLHttpRequest){const e=window.XMLHttpRequest;window.oXMLHttpRequest||(window.oXMLHttpRequest=e),window.XMLHttpRequest=function(){const r=new e,{open:n,send:o}=r;let i={};r.open=(e,t,o,a,s)=>{void 0===o&&(o=!0),i.method=e,i.url=t,n.call(r,e,t,o,a,s)},r.send=e=>{i.requestTime=(new Date).getTime(),o.call(r,e)};const a=(e,n)=>{const{status:o,statusText:a}=r,s=(new Date).getTime();i={...i,status:o,statusText:a,responseTime:s,duration:s-i.requestTime},"function"==typeof t&&t(i,e,n)};return r.addEventListener("loadend",(()=>a())),r.addEventListener("error",(()=>a("net_error","ERR_NETWORK"))),r.addEventListener("abort",(()=>a("cannel_request","ERR_CANCELED"))),r.addEventListener("timeout",(()=>a("timeout","ERR_NETWORK"))),r}}})(0,e),((e,t)=>{if("fetch"in window&&"function"==typeof window.fetch){const e=window.fetch;window.oFetch||(window.oFetch=e),window.fetch=async(r,n)=>{let o={};return o.method=n?.method||"",o.url=(r&&"string"!=typeof r?r?.url:r)||"",o.requestTime=(new Date).getTime(),e.call(window,r,n).then((async e=>{if("function"==typeof t){const r=e.clone(),n=(new Date).getTime();o={...o,status:r.status,statusText:r.statusText,responseTime:n,duration:n-o.requestTime},t(o)}return e})).catch((e=>{if("function"==typeof t){const r=(new Date).getTime();o={...o,responseTime:r,duration:r-o.requestTime},"AbortError"===e.name?t(o,"cannel_request","ERR_CANCELED"):t(o,"net_error","ERR_NETWORK")}return Promise.reject(e)}))}}})(0,e)};const be=new WeakSet,Se=e=>({form_id:e.id||null,form_class:"string"==typeof e.className?e.className:null,form_name:e.getAttribute("name")||null,form_action:e.getAttribute("action")||null,form_text:(e.textContent||"").trim().slice(0,200)||null});let Ee=-1;const ke=e=>{addEventListener("pageshow",(t=>{t.persisted&&(Ee=t.timeStamp,e(t))}),!0)},xe=(e,t,r,n)=>{let o,i;return a=>{t.value>=0&&(a||n)&&(i=t.value-(o??0),(i||void 0===o)&&(o=t.value,t.delta=i,t.rating=((e,t)=>e>t[1]?"poor":e>t[0]?"needs-improvement":"good")(t.value,r),e(t)))}},Me=e=>{requestAnimationFrame((()=>requestAnimationFrame((()=>e()))))},Ae=()=>{const e=performance.getEntriesByType("navigation")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},Le=()=>{const e=Ae();return e?.activationStart??0},Ce=(e,t=-1)=>{const r=Ae();let n="navigate";return Ee>=0?n="back-forward-cache":r&&(document.prerendering||Le()>0?n="prerender":document.wasDiscarded?n="restore":r.type&&(n=r.type.replace(/_/g,"-"))),{name:e,value:t,rating:"good",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:n}},Re=new WeakMap;function Ie(e,t){return Re.get(e)||Re.set(e,new t),Re.get(e)}class $e{t;i=0;o=[];h(e){if(e.hadRecentInput)return;const t=this.o[0],r=this.o.at(-1);this.i&&t&&r&&e.startTime-r.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e)}}const qe=(e,t,r={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){const n=new PerformanceObserver((e=>{Promise.resolve().then((()=>{t(e.getEntries())}))}));return n.observe({type:e,buffered:!0,...r}),n}}catch{}},Ne=e=>{let t=!1;return()=>{t||(e(),t=!0)}};let Pe=-1;const Oe=new Set,Ue=()=>"hidden"!==document.visibilityState||document.prerendering?1/0:0,Be=e=>{if("hidden"===document.visibilityState){if("visibilitychange"===e.type)for(const e of Oe)e();isFinite(Pe)||(Pe="visibilitychange"===e.type?e.timeStamp:0,removeEventListener("prerenderingchange",Be,!0))}},ze=()=>{if(Pe<0){const e=Le(),t=document.prerendering?void 0:globalThis.performance.getEntriesByType("visibility-state").filter((t=>"hidden"===t.name&&t.startTime>e))[0]?.startTime;Pe=t??Ue(),addEventListener("visibilitychange",Be,!0),addEventListener("prerenderingchange",Be,!0),ke((()=>{setTimeout((()=>{Pe=Ue()}))}))}return{get firstHiddenTime(){return Pe},onHidden(e){Oe.add(e)}}},De=e=>{document.prerendering?addEventListener("prerenderingchange",(()=>e()),!0):e()},Fe=[1800,3e3],je=(e,t={})=>{De((()=>{const r=ze();let n,o=Ce("FCP");const i=qe("paint",(e=>{for(const t of e)"first-contentful-paint"===t.name&&(i.disconnect(),t.startTime<r.firstHiddenTime&&(o.value=Math.max(t.startTime-Le(),0),o.entries.push(t),n(!0)))}));i&&(n=xe(e,o,Fe,t.reportAllChanges),ke((r=>{o=Ce("FCP"),n=xe(e,o,Fe,t.reportAllChanges),Me((()=>{o.value=performance.now()-r.timeStamp,n(!0)}))})))}))},He=[.1,.25];let Je=0,Ke=1/0,We=0;const Xe=e=>{for(const t of e)t.interactionId&&(Ke=Math.min(Ke,t.interactionId),We=Math.max(We,t.interactionId),Je=We?(We-Ke)/7+1:0)};let Qe;const Ge=()=>Qe?Je:performance.interactionCount??0;let Ve=0;class Ye{u=[];l=new Map;m;p;v(){Ve=Ge(),this.u.length=0,this.l.clear()}L(){const e=Math.min(this.u.length-1,Math.floor((Ge()-Ve)/50));return this.u[e]}h(e){if(this.m?.(e),!e.interactionId&&"first-input"!==e.entryType)return;const t=this.u.at(-1);let r=this.l.get(e.interactionId);if(r||this.u.length<10||e.duration>t.P){if(r?e.duration>r.P?(r.entries=[e],r.P=e.duration):e.duration===r.P&&e.startTime===r.entries[0].startTime&&r.entries.push(e):(r={id:e.interactionId,entries:[e],P:e.duration},this.l.set(r.id,r),this.u.push(r)),this.u.sort(((e,t)=>t.P-e.P)),this.u.length>10){const e=this.u.splice(10);for(const t of e)this.l.delete(t.id)}this.p?.(r)}}}const Ze=e=>{const t=globalThis.requestIdleCallback||setTimeout;"hidden"===document.visibilityState?e():(e=Ne(e),addEventListener("visibilitychange",e,{once:!0,capture:!0}),t((()=>{e(),removeEventListener("visibilitychange",e,{capture:!0})})))},et=[200,500],tt=(e,t={})=>{if(!globalThis.PerformanceEventTiming||!("interactionId"in PerformanceEventTiming.prototype))return;const r=ze();De((()=>{"interactionCount"in performance||Qe||(Qe=qe("event",Xe,{type:"event",buffered:!0,durationThreshold:0}));let n,o=Ce("INP");const i=Ie(t,Ye),a=e=>{Ze((()=>{for(const t of e)i.h(t);const t=i.L();t&&t.P!==o.value&&(o.value=t.P,o.entries=t.entries,n())}))},s=qe("event",a,{durationThreshold:t.durationThreshold??40});n=xe(e,o,et,t.reportAllChanges),s&&(s.observe({type:"first-input",buffered:!0}),r.onHidden((()=>{a(s.takeRecords()),n(!0)})),ke((()=>{i.v(),o=Ce("INP"),n=xe(e,o,et,t.reportAllChanges)})))}))};class rt{m;h(e){this.m?.(e)}}const nt=[2500,4e3],ot=[800,1800],it=e=>{document.prerendering?De((()=>it(e))):"complete"!==document.readyState?addEventListener("load",(()=>it(e)),!0):setTimeout(e)};function at(){const e={ttfb:null,lcp:null,fp:null,fcp:null,connectionRtt:null,ttfbRequestTime:null,inp:null,cls:null,dcl:null,loadTime:null};((e,t={})=>{De((()=>{const r=ze();let n,o=Ce("LCP");const i=Ie(t,rt),a=e=>{t.reportAllChanges||(e=e.slice(-1));for(const t of e)i.h(t),t.startTime<r.firstHiddenTime&&(o.value=Math.max(t.startTime-Le(),0),o.entries=[t],n())},s=qe("largest-contentful-paint",a);if(s){n=xe(e,o,nt,t.reportAllChanges);const r=Ne((()=>{a(s.takeRecords()),s.disconnect(),n(!0)})),i=e=>{e.isTrusted&&(Ze(r),removeEventListener(e.type,i,{capture:!0}))};for(const e of["keydown","click","visibilitychange"])addEventListener(e,i,{capture:!0});ke((r=>{o=Ce("LCP"),n=xe(e,o,nt,t.reportAllChanges),Me((()=>{o.value=performance.now()-r.timeStamp,n(!0)}))}))}}))})((t=>{e.lcp=d(t.value)}),{reportAllChanges:!0}),((e,t={})=>{const r=ze();je(Ne((()=>{let n,o=Ce("CLS",0);const i=Ie(t,$e),a=e=>{for(const t of e)i.h(t);i.i>o.value&&(o.value=i.i,o.entries=i.o,n())},s=qe("layout-shift",a);s&&(n=xe(e,o,He,t.reportAllChanges),r.onHidden((()=>{a(s.takeRecords()),n(!0)})),ke((()=>{i.i=0,o=Ce("CLS",0),n=xe(e,o,He,t.reportAllChanges),Me((()=>n()))})),setTimeout(n))})))})((t=>{e.cls=Math.round(1e4*t.value)/1e4}),{reportAllChanges:!0}),tt((t=>{e.inp=d(t.value)}),{reportAllChanges:!0}),((e,t={})=>{let r=Ce("TTFB"),n=xe(e,r,ot,t.reportAllChanges);it((()=>{const o=Ae();o&&(r.value=Math.max(o.responseStart-Le(),0),r.entries=[o],n(!0),ke((()=>{r=Ce("TTFB",0),n=xe(e,r,ot,t.reportAllChanges),n(!0)})))}))})((t=>{e.ttfb=d(t.value)})),je((t=>{e.fcp=d(t.value)}));const t=()=>{(()=>{try{performance.getEntriesByType("paint").forEach((t=>{"first-paint"===t.name&&(e.fp=d(t.startTime))}))}catch(e){console.warn("[TM]: Failed to collect FP:",e)}try{const t=navigator.connection||navigator.mozConnection||navigator.webkitConnection;t&&void 0!==t.rtt&&(e.connectionRtt=t.rtt)}catch(e){console.warn("[TM]: Failed to collect Connection RTT:",e)}try{const t=performance.getEntriesByType("navigation")[0];if(t){const{responseStart:r,requestStart:n}=t;r>0&&n>0&&n<=r&&(e.ttfbRequestTime=d(r-n))}}catch(e){console.warn("[TM]: Failed to collect TTFB Request Time:",e)}try{const t=performance.getEntriesByType("navigation")[0];if(t){const{domContentLoadedEventEnd:r,loadEventEnd:n,fetchStart:o}=t;r>0&&o>0&&(e.dcl=d(r-o)),n>0&&o>0&&(e.loadTime=d(n-o))}}catch(e){console.warn("[TM]: Failed to collect DCL and Load Time:",e)}})(),window.trackMonitor.track({data_type:"performance",event_type:"metrics",event_detail:{traceId:te,data:e}})};let r=0;const n=()=>{const e=Date.now();e-r<3e4||(r=e,t())};window.addEventListener("beforeunload",t),window.addEventListener("pagehide",n),document.addEventListener("visibilitychange",(()=>{"hidden"===document.visibilityState&&n()}))}const st="__tengence_sdk",ct=e=>{if("undefined"!=typeof window&&window.trackMonitor&&window.trackMonitor[st])return console.warn("[TM]: init 已调用过,复用现有实例(如需重建请刷新页面)"),window.trackMonitor;const{client:t,beforeClose:r}=ee(e);var n;return me(t.track),!1!==e.traceBehavior&&se({enableScroll:e.enableScroll}),!1!==e.enableFormTrack&&(n=t.track,document.addEventListener("focusin",(e=>{const t=e.target;if(!(r=t)||"INPUT"!==r.tagName&&"SELECT"!==r.tagName&&"TEXTAREA"!==r.tagName)return;var r;const o=t.closest("form");o&&!be.has(o)&&(be.add(o),n({data_type:"auto",event_type:"form_start",event_detail:Se(o)}))}),!0),document.addEventListener("submit",(e=>{const t=e.target;if(!t||"FORM"!==t.tagName)return;const r=e.submitter;n({data_type:"auto",event_type:"form_submit",event_detail:{...Se(t),submitter_id:r?.id||null,submitter_text:(r?.textContent||"").trim().slice(0,200)||null}})}),!0)),!1!==e.traceError&&(we(),ve(),Te(),_e()),!1!==e.tracePerformance&&l((()=>{!function(){const e=window.performance||window.msPerformance;if(!e)return{dnsLookupTime:null,tcpConnectTime:null,ttfb:null,transferTime:null,domParseTime:null,domCompleteTime:null,loadEventTime:null,totalPageLoad:null};const t=e.getEntriesByType&&"function"==typeof e.getEntriesByType?e.getEntriesByType("navigation"):void 0,r=Array.isArray(t)?t[0]:void 0;let n=null;if(r)n=r;else{const t=e.timing;t&&(n={startTime:0,domainLookupStart:t.domainLookupStart,domainLookupEnd:t.domainLookupEnd,connectStart:t.connectStart,connectEnd:t.connectEnd,requestStart:t.requestStart,responseStart:t.responseStart,responseEnd:t.responseEnd,domInteractive:t.domInteractive,domComplete:t.domComplete,loadEventEnd:t.loadEventEnd,fetchStart:t.fetchStart},!n.requestStart&&t.fetchStart&&(n.requestStart=t.fetchStart))}const o={dnsLookupTime:n?d(n.domainLookupEnd-n.domainLookupStart):null,tcpConnectTime:n?d(n.connectEnd-n.connectStart):null,ttfb:n?d(n.responseStart-(n.requestStart??n.fetchStart??0)):null,transferTime:n?d(n.responseEnd-n.responseStart):null,domParseTime:n?d(n.domInteractive-n.responseEnd):null,domCompleteTime:n?d(n.domComplete-n.domInteractive):null,loadEventTime:n?d(n.loadEventEnd-(n.domComplete??0)):null,totalPageLoad:n?d((n.loadEventEnd??performance.now())-(n.startTime??0)):null};window.trackMonitor.track({data_type:"performance",event_type:"navigation_timing",event_detail:{traceId:te,data:o}})}(),function(){const e=window.performance||window.msPerformance;if(!e)return[];const t=[];if(e.getEntriesByType){const r=(e.getEntriesByType("resource")||[]).map((e=>{const t="number"==typeof e.redirectEnd&&"number"==typeof e.redirectStart?d(e.redirectEnd-e.redirectStart):null,r="number"==typeof e.domainLookupEnd&&"number"==typeof e.domainLookupStart?d(e.domainLookupEnd-e.domainLookupStart):null,n="number"==typeof e.connectEnd&&"number"==typeof e.connectStart?d(e.connectEnd-e.connectStart):null,o="number"==typeof e.requestStart&&"number"==typeof e.fetchStart?d(e.requestStart-e.fetchStart):null,i="number"==typeof e.responseStart&&"number"==typeof e.requestStart?d(e.responseStart-e.requestStart):null,a="number"==typeof e.responseEnd&&"number"==typeof e.responseStart?d(e.responseEnd-e.responseStart):null,s="number"==typeof e.duration?d(e.duration):null,c="number"==typeof e.startTime?d(e.startTime):null,l="number"==typeof e.transferSize&&isFinite(e.transferSize)&&e.transferSize>=0?Math.round(e.transferSize):null,u="number"==typeof e.encodedBodySize&&isFinite(e.encodedBodySize)&&e.encodedBodySize>=0?Math.round(e.encodedBodySize):null,m="number"==typeof e.decodedBodySize&&isFinite(e.decodedBodySize)&&e.decodedBodySize>=0?Math.round(e.decodedBodySize):null;return{name:e.name,initiatorType:e.initiatorType||"",startTime:c,duration:s,redirectTime:t,cacheTime:o,dnsTime:r,connectTime:n,requestTime:i,responseTime:a,transferSize:l,encodedBodySize:u,decodedBodySize:m}}));r.sort(((e,t)=>(t.duration??0)-(e.duration??0)));const n=w?.resourceFlowLimit??15;if(0===n)return;for(let e=0;e<Math.min(n,r.length);e++)t.push(r[e]);if(!t.length)return}window.trackMonitor.track({data_type:"performance",event_type:"resource_flow",event_detail:{traceId:te,data:t}})}(),at()})),l((()=>{r()})),window.trackMonitor[st]=!0,window.trackMonitor};export{ct as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type DataType = "
|
|
1
|
+
export type DataType = "auto" | "behavior" | "performance" | "error" | "custom";
|
|
2
2
|
export type EventType = "click" | "expose" | "view" | "cart" | "buy" | "pay" | "leave";
|
|
3
3
|
export interface SanitizeOptions {
|
|
4
4
|
stripQuery?: boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TrackSDK={})}(this,(function(e){"use strict";var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},t(e,n)};var n=function(){return n=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)};function r(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{l(r.next(e))}catch(e){i(e)}}function c(e){try{l(r.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,c)}l((r=r.apply(e,t||[])).next())}))}function o(e,t){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=c(0),a.throw=c(1),a.return=c(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(c){return function(l){return function(c){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return i.label++,{value:c[1],done:!1};case 5:i.label++,r=c[1],c=[0];continue;case 7:c=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){i=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){i.label=c[1];break}if(6===c[0]&&i.label<o[1]){i.label=o[1],o=c;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(c);break}o[2]&&i.ops.pop(),i.trys.pop();continue}c=t.call(e,i)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,l])}}}function i(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function a(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function c(e,t,n){if(n||2===arguments.length)for(var r,o=0,i=t.length;o<i;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}"function"==typeof SuppressedError&&SuppressedError;var l=function(e){function n(t,n){var r=e.call(this,n||"[TM]: Auth error ".concat(t))||this;return Object.defineProperty(r,"status",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),r.name="AuthError",r.status=t,r}return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}(n,e),n}(Error),u=function(e){var t=e.method,n=e.url,r=e.data,o=e.headers,i=void 0===o?{}:o,a=e.withCredentials,c=void 0!==a&&a,l=e.timeoutMs;return new Promise((function(e,o){var a=new XMLHttpRequest;a.open(t,n,!0),l&&(a.timeout=l),Object.keys(i).forEach((function(e){a.setRequestHeader(e,i[e])})),a.withCredentials=!!c,a.onreadystatechange=function(){if(4===a.readyState)if(a.status>=200&&a.status<300)try{var t=JSON.parse(a.responseText);e(t)}catch(e){o(e)}else{var n=new Error("[TM]: Request failed with status ".concat(a.status));n.status=a.status,o(n)}},a.onerror=function(){o(new Error("[TM]: Network error"))},a.ontimeout=function(){var e=new Error("[TM]: Request timeout");e.timeout=!0,o(e)},"POST"===t&&r?a.send(r):a.send()}))},s=function(e,t,r){if(!r)return fetch(e,t);var o=new AbortController,i=setTimeout((function(){return o.abort()}),r);return fetch(e,n(n({},t),{signal:o.signal})).catch((function(e){if(e&&"AbortError"===e.name){var t=new Error("[TM]: Request timeout");throw t.timeout=!0,t}throw e})).finally((function(){return clearTimeout(i)}))},d=function(e,t,n,r){var o={"Content-Type":"application/json"};n&&(o.Authorization="Bearer ".concat(n));var i=function(){return u({method:"POST",url:e,data:JSON.stringify(t),headers:o,withCredentials:!0,timeoutMs:r})};return"function"!=typeof fetch?i():s(e,{method:"POST",keepalive:!0,credentials:"include",headers:o,body:JSON.stringify(t)},r).then((function(e){if(401===e.status||403===e.status)throw new l(e.status,"[TM]: Auth error ".concat(e.status));if(429===e.status){(r=new Error("[TM]: Request throttled with status 429")).status=429;var t=e.headers.get("Retry-After");if(t){var n=parseInt(t,10);isNaN(n)||(r.retryAfter=1e3*n)}throw r}var r;if(!e.ok)throw(r=new Error("[TM]: Request failed with status ".concat(e.status))).status=e.status,r;return e.json()})).catch((function(e){if(e instanceof l)throw e;if(e&&e.status)throw e;return i()}))},f=window.requestIdleCallback||window.requestAnimationFrame||function(e){return setTimeout(e,17)};function v(e,t,n){void 0===t&&(t=150),void 0===n&&(n=!1);var r=null;return function(){for(var o=[],i=0;i<arguments.length;i++)o[i]=arguments[i];var a=this,c=n&&!r;r&&clearTimeout(r),r=setTimeout((function(){r=null,n||e.apply(a,o)}),t),c&&e.apply(a,o)}}var p=function(e,t){void 0===t&&(t=300);var n=0;return function(){for(var r=[],o=0;o<arguments.length;o++)r[o]=arguments[o];var i=Date.now();i-n>=t&&(n=i,e.apply(this,r))}};function m(e,t){if(void 0===t&&(t=""),!e)return t;var n=e.parentElement,r=e.id,o=e.tagName.toLowerCase(),i=t?">".concat(t):"";return n&&n!==document.documentElement&&n!==document.body?r?"#".concat(r).concat(i):m(n,"".concat(o).concat(i)):"".concat(o).concat(i)}var h=function(){var e,t;if(null===(e=window.performance)||void 0===e?void 0:e.navigation)return performance.navigation.type;if(null===(t=window.performance)||void 0===t?void 0:t.getEntriesByType){var n=performance.getEntriesByType("navigation");if(n.length>0)return n[0].type}return 255},y=function(e){"prerendering"in document&&document.prerendering?function(e){"prerendering"in document&&document.prerendering?addEventListener("prerenderingchange",(function(){return e()}),!0):e()}((function(){return y(e)})):"complete"!==(null===document||void 0===document?void 0:document.readyState)?addEventListener("load",(function(){return y(e)}),!0):setTimeout(e)};function g(e){return"number"!=typeof e||!isFinite(e)||e<0?null:Math.round(100*e)/100}function w(){var e=new Uint8Array(16);if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues)crypto.getRandomValues(e);else for(var t=0;t<16;t++)e[t]=Math.floor(256*Math.random());e[6]=15&e[6]|64,e[8]=63&e[8]|128;var n="";for(t=0;t<16;t++)n+=(e[t]<16?"0":"")+e[t].toString(16);return n}var T=function(e){return e instanceof ErrorEvent?"Script error."===e.message?"cors":"js":"resource"},b=function(e){return function(e){for(var t=5381,n=0;n<e.length;n++)t=(t<<5)+t+e.charCodeAt(n)>>>0;return t.toString(16).padStart(8,"0")}(e)+function(e){for(var t=5381,n=e.length-1;n>=0;n--)t=((t<<5)+t^e.charCodeAt(n))>>>0;return t.toString(16).padStart(8,"0")}(e)};var _,S,E,x={view:"#3b82f6",click:"#06b6d4",expose:"#8b5cf6",enter:"#10b981",leave:"#f59e0b",stay:"#84cc16",cart:"#ec4899",buy:"#ef4444",pay:"#dc2626",default:"#6b7280"},k={view:"👁️",click:"👆",expose:"✨",enter:"🚪",leave:"👋",stay:"⏱️",cart:"🛒",buy:"💰",pay:"💳",default:"📊"},M={common:"#3b82f6",behavior:"#10b981",performance:"#f59e0b",error:"#ef4444",custom:"#8b5cf6",default:"#6b7280"},A=function(e,t){t.forEach((function(t,r){var o=t.event_type||"unknown",i=t.data_type||"auto",a=function(e){return x[e]||x.default}(o),c=function(e){return M[e]||M.default}(i),l=function(e){return k[e]||k.default}(o),u=t.event_detail;if("string"==typeof u)try{u=JSON.parse(u)}catch(e){}console.groupCollapsed("%c".concat(l," [TM-").concat(e,"] %c").concat(i.toUpperCase(),"%c → %c").concat(o.toUpperCase(),"%c #").concat(r+1),"color: #6b7280; font-weight: bold;","color: ".concat(c,"; font-weight: bold; background: ").concat(c,"20; padding: 2px 6px; border-radius: 3px;"),"color: #6b7280;","color: ".concat(a,"; font-weight: bold; background: ").concat(a,"20; padding: 2px 6px; border-radius: 3px;"),"color: #6b7280; font-weight: normal;");var s=n(n({},t),{event_detail:u});console.log("%c"+JSON.stringify(s,null,2),"color: #6b7280; font-family: monospace; font-size: 11px; line-height: 1.5;"),console.groupEnd()})),console.log("%c✅ [TM] 本次通过 ".concat(e," 上报 ").concat(t.length," 条埋点数据"),"color: #10b981; font-weight: bold; font-size: 12px; padding: 4px 8px; background: #10b98120; border-radius: 4px; border-left: 3px solid #10b981;")},L=void 0,C="TRACK_MONITOR_DATA",R="MONITOR_REAL_TIME_DATA",I="TRACK_MONITOR_USER",O="tengence_device_id",P="tengence_register_properties",q="TRACK_MONITOR_LOGGER",N="tengence_tracking_enabled",j=2e3,U="tengence_access_token",B=null,D=null,z=function(e){return(t=e,n={},r=null==L?void 0:L.requestTimeout,o={"Content-Type":"application/json"},i=function(){return u({method:"POST",url:t,data:JSON.stringify(n),headers:o,withCredentials:!0,timeoutMs:r})},"function"!=typeof fetch?i():s(t,{method:"POST",credentials:"include",headers:o,body:JSON.stringify(n)},r).then((function(e){if(!e.ok){var t=new Error("[TM]: Request failed with status ".concat(e.status));throw t.status=e.status,t}return e.json()})).catch((function(e){if(e&&e.status)throw e;return i()}))).then((function(e){var t=e&&e.data,n=t&&t.accessToken,r=t&&t.accessExpAt;if(!n||"number"!=typeof r)throw new Error("[TM]: authUrl 响应缺少 accessToken/accessExpAt");return function(e,t){B={token:e,expAt:t};try{localStorage.setItem(U,JSON.stringify({token:e,expAt:t}))}catch(e){}}(n,r),n}));var t,n,r,o,i},F=function(e){var t,n=function(){if(B)return B;try{var e=localStorage.getItem(U);if(!e)return null;var t=JSON.parse(e);if(t&&"string"==typeof t.token&&t.token&&"number"==typeof t.expAt)return B={token:t.token,expAt:t.expAt}}catch(e){}return null}();return(t=n)&&t.token.length>0&&t.expAt-6e4>Date.now()?Promise.resolve(n.token):(D||(D=z(e).catch((function(e){throw e})).finally((function(){D=null}))),D)},H={timer:null,promise:null},K={timer:null,promise:null},J=function(e){var t=JSON.stringify(e);return(new TextEncoder).encode(t).length/1024},W=null,X=function(){if(W)return W;try{var e=localStorage.getItem(P),t=e?JSON.parse(e):{};return W=t,t}catch(e){return console.error("[TM]: get register properties fail: ",e),{}}},G=function(e){W=e;try{localStorage.setItem(P,JSON.stringify(e))}catch(e){console.error("[TM]: save register properties fail: ",e)}},Q=function(e){if(e&&"object"==typeof e&&!Array.isArray(e)){var t=n(n({},X()),e),r=Object.keys(t);if(r.length>50){var o={};return r.slice(0,50).forEach((function(e){o[e]=t[e]})),console.warn("[TM]: register properties exceed max ".concat(50," keys, extra keys dropped")),void G(o)}G(t)}else console.error("[TM]: registerGlobalProperties props must be a plain object")},V=function(e){var t=document.cookie.match(new RegExp("(?:^|;\\s*)"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):void 0},$=function(e){document.cookie="".concat(O,"=").concat(encodeURIComponent(e),"; Max-Age=63072000; Path=/; Secure; SameSite=Lax")},Y=function(){if(_)return _;try{var e=localStorage.getItem(O);if(e)return V(O)||$(e),_=e;var t=V(O);if(t){try{localStorage.setItem(O,t)}catch(e){}return _=t}e=w();try{localStorage.setItem(O,e)}catch(e){}return $(e),_=e}catch(e){return void console.error("[TM]: get or create device id fail: ",e)}},Z="tengence_session_id",ee=function(){try{var e=sessionStorage.getItem(Z),t=e?JSON.parse(e):null,n=Date.now();return!t||!t.id||n-t.lastActiveAt>18e5?(t={id:w(),lastActiveAt:n},sessionStorage.setItem(Z,JSON.stringify(t))):(t.lastActiveAt=n,sessionStorage.setItem(Z,JSON.stringify(t))),t.id}catch(e){return}},te=function(e,t){var n,r;try{var o=new URL(e,location.href);if(!o.searchParams.toString())return e;if(t&&t.length){var a=[];try{for(var c=i(t),l=c.next();!l.done;l=c.next()){var u=l.value,s=o.searchParams.get(u);null!==s&&a.push("".concat(u,"=").concat(encodeURIComponent(s)))}}catch(e){n={error:e}}finally{try{l&&!l.done&&(r=c.return)&&r.call(c)}finally{if(n)throw n.error}}o.search=a.length?"?".concat(a.join("&")):""}else o.search="";return o.toString()}catch(t){return e}},ne=function(e,t,n){var r,o;if("string"==typeof e)return t>0&&e.length>t?e.slice(0,t)+"...[truncated]":e;if(Array.isArray(e))return e.map((function(e){return ne(e,t,n)}));if(e&&"object"==typeof e){var a={};try{for(var c=i(Object.keys(e)),l=c.next();!l.done;l=c.next()){var u=l.value,s=e[u];"string"==typeof s&&/(^|_)url$|(^|_)href$|^referrer$/i.test(u)&&/^https?:\/\//i.test(s)?a[u]=te(s,n):a[u]=ne(s,t,n)}}catch(e){r={error:e}}finally{try{l&&!l.done&&(o=c.return)&&o.call(c)}finally{if(r)throw r.error}}return a}return e},re=function(e){var t,r={page_url:location.href,hostname:window.location.hostname||window.location.host,os:window.navigator.platform,user_id:localStorage.getItem(I)||void 0,user_agent:window.navigator.userAgent,screen_width:window.screen.width,screen_height:window.screen.height,lib_version:"1.2.1",lib_type:"js",event_time:Date.now(),timezone_offset:(new Date).getTimezoneOffset().toString()},o=null==L?void 0:L.sanitize;try{t="string"==typeof e.event_detail?e.event_detail:JSON.stringify(o&&(o.maxTextLength>0||o.stripQuery)?ne(e.event_detail,o.maxTextLength,o.preserveQueryKeys):e.event_detail)}catch(e){return ce("serialize_failed","事件 event_detail 序列化失败(循环引用/BigInt?),该事件丢弃",{error:e}),void console.warn("[TM]: event_detail 序列化失败,该事件丢弃",e)}return n(n({session_id:e.session_id||((null==L?void 0:L.enableAutoSessionId)?ee():void 0),request_id:e.request_id,event_id:e.event_id||w(),spm:e.spm,data_type:e.data_type||"behavior",event_type:e.event_type,event_detail:t},r),{page_url:o&&o.stripQuery?te(r.page_url,o.preserveQueryKeys):r.page_url,device_id:Y(),register_properties:JSON.stringify(X()),platform:e.platform||S})},oe=function(){try{return"true"===localStorage.getItem(q)}catch(e){return!1}},ie=function(e,t,n,r,o){return void 0===e?t:"number"!=typeof e||Number.isNaN(e)||e<n||e>r?(console.warn("[TM]: 配置 ".concat(o,"=").concat(e," 非法,回退默认值 ").concat(t)),t):e},ae=function(e,t){var n;try{null===(n=null==L?void 0:L.onDrop)||void 0===n||n.call(L,e,t)}catch(e){}},ce=function(e,t,n){var r;(null==L?void 0:L.isLogger)&&console.error("[TM]: ".concat(t));try{null===(r=null==L?void 0:L.onError)||void 0===r||r.call(L,{code:e,message:t,context:n})}catch(e){}},le=function(){try{var e=localStorage.getItem(N);return null===e||"1"===e}catch(e){return!0}},ue=function(e){var t,a,c,u,s,v,p,m,h,y,g,w=e.apiKey,T=void 0,b=/Android|iPhone|iPad|iPod|Mobile/i.test(window.navigator.userAgent);S=e.platform||(b?"h5":"web");var _=(L={pushUrl:e.pushUrl||"https://api.tengence.com/v1/push/event",authUrl:e.authUrl,realTimeUrl:e.realTimeUrl,cacheNumber:ie(e.cacheNumber,100,1,1/0,"cacheNumber"),reportInterval:ie(e.reportInterval,5e3,100,1/0,"reportInterval"),realTimeReportInterval:ie(e.realTimeReportInterval,200,100,1/0,"realTimeReportInterval"),maxCacheSize:ie(e.maxCacheSize,56,1,1/0,"maxCacheSize"),maxRetries:ie(e.maxRetries,10,0,1/0,"maxRetries"),isLogger:null!==(t=e.isLogger)&&void 0!==t?t:oe(),errorTraceRate:ie(e.errorTraceRate,.5,0,1,"errorTraceRate"),resourceFlowLimit:ie(e.resourceFlowLimit,15,0,200,"resourceFlowLimit"),traceBehavior:null===(a=e.traceBehavior)||void 0===a||a,tracePerformance:null===(c=e.tracePerformance)||void 0===c||c,traceError:null===(u=e.traceError)||void 0===u||u,sanitize:!1===e.sanitize?{stripQuery:!1,maxTextLength:0,preserveQueryKeys:[]}:{stripQuery:null!==(v=null===(s=e.sanitize)||void 0===s?void 0:s.stripQuery)&&void 0!==v&&v,maxTextLength:ie(null===(p=e.sanitize)||void 0===p?void 0:p.maxTextLength,0,0,1/0,"sanitize.maxTextLength"),preserveQueryKeys:(null===(m=e.sanitize)||void 0===m?void 0:m.preserveQueryKeys)||[]},enableAutoSessionId:null!==(h=e.enableAutoSessionId)&&void 0!==h&&h,enableTracking:null!==(y=e.enableTracking)&&void 0!==y?y:le(),respectGpc:null===(g=e.respectGpc)||void 0===g||g,requestTimeout:ie(e.requestTimeout,1e4,1e3,6e4,"requestTimeout"),beforeSend:e.beforeSend,onDrop:e.onDrop,onError:e.onError}).pushUrl,E=L.authUrl,x=L.realTimeUrl,k=L.cacheNumber,M=L.reportInterval,O=L.realTimeReportInterval,P=L.maxCacheSize,D=L.maxRetries;w||E||(console.error("[TM]: 未配置 apiKey 或 authUrl,SDK 无法获取上报凭证,数据将不会上报。请配置 apiKey(直连)或 authUrl(自动换取 accessToken),或调用 setToken 注入 accessToken。"),ce("init_missing_credential","未配置 apiKey 或 authUrl,SDK 无法获取上报凭证,数据将不会上报。请配置 apiKey(直连)或 authUrl(自动换取 accessToken),或调用 setToken 注入 accessToken。"));var z={retryCount:0,nextRetryAt:0,retryExhausted:!1,halveBatch:!1},W={retryCount:0,nextRetryAt:0,retryExhausted:!1,halveBatch:!1},X=function(e){try{localStorage.setItem(I,e)}catch(e){console.error("[TM]: monitor bind user fail: ",e)}},G=function(){localStorage.removeItem(I)},V={},$={},Y=new Set,Z=null,ee=function(){null!==Z&&(clearTimeout(Z),Z=null),Y.size&&(Y.forEach((function(e){try{localStorage.setItem(e,JSON.stringify(V[e]||[]))}catch(t){ce("queue_write_failed","写入本地缓存队列失败(隐私模式/容量满?),本次数据仅保留内存",{key:e,error:t})}})),Y.clear())},te=function(e){if(V[e])return V[e];var t=[];try{t=JSON.parse(localStorage.getItem(e)||"[]")}catch(t){ce("queue_read_failed","读取本地缓存队列失败,按空队列处理",{key:e,error:t})}return V[e]=t,$[e]=t.reduce((function(e,t){return e+J(t)}),0),V[e]},ne=function(e,t){Y.delete(e),V[e]=t,$[e]=t.reduce((function(e,t){return e+J(t)}),0);try{localStorage.setItem(e,JSON.stringify(t))}catch(t){ce("queue_write_failed","写入本地缓存队列失败(隐私模式/容量满?),队列清空处理",{key:e,error:t});try{localStorage.setItem(e,"[]")}catch(t){ce("localstorage_unavailable","localStorage 不可用,本次数据仅保留内存",{key:e,error:t})}}},ue=function(e){T=e},se=function(e,t,n){return void 0===n&&(n=!1),r(void 0,void 0,void 0,(function(){var i,a,c,u,s,f,v;return o(this,(function(p){switch(p.label){case 0:i=e&&x?x:_,p.label=1;case 1:return p.trys.push([1,6,,7]),(c=w||T)?[3,5]:E?[4,F(E)]:[3,3];case 2:return u=p.sent(),[3,4];case 3:u=void 0,p.label=4;case 4:c=u,p.label=5;case 5:return a=c,[3,7];case 6:throw s=p.sent(),ce("token_fetch_failed","从 authUrl 获取 accessToken 失败,本批暂不上报(保留队列待重试)",{authUrl:E,error:s}),s;case 7:if(!a)throw ce("init_missing_credential","未配置 apiKey/authUrl 且未注入 accessToken,本次数据未上报(保留缓存队列待重试)"),new Error("[TM]: credential missing, skip report");return(null==L?void 0:L.isLogger)&&A(e?"RealTimeFetch":"Fetch",t),f=(null==L?void 0:L.beforeSend)?function(){var e;try{e=L.beforeSend(t)}catch(e){ce("before_send_failed","beforeSend 钩子抛错,本次按原始数据发送",{error:e})}return Array.isArray(e)?e:t}():t,v=n||null==L?void 0:L.requestTimeout,[2,d(i,{data:f},a,v).catch((function(e){return r(void 0,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t=null==e?void 0:e.status,e instanceof l||401===t||403===t?w||T||!E?[3,2]:(function(){B=null;try{localStorage.removeItem(U)}catch(e){}}(),[4,F(E).catch((function(){}))]):[3,2];case 1:if(n=r.sent())return[2,d(i,{data:f},n,v)];ce("token_invalid","上报 401/403 且刷新 accessToken 失败,本批暂不上报(保留队列待重试)",{authUrl:E}),r.label=2;case 2:throw e}}))}))}))]}}))}))},de=function(e,t){var n=new Set(t.filter((function(e){return!!e})));if(n.size){var r=te(e);if(r.length){var o=r.filter((function(e){return e.event_id&&!n.has(e.event_id)}));o.length!==r.length&&ne(e,o)}}},fe=function(e,t,n){void 0===n&&(n=0);var r=(t?O:M)*Math.pow(2,e)*(.8+.4*Math.random()),o=Math.min(r,6e4);return Math.max(o,n)},ve=function(e,t){var n=J(t);if(n>=64)return ae([t],"item_too_large"),void console.warn("[TM]: 单条事件超过体积上限(".concat(64,"KB),丢弃该条"));var r=te(e);if(r.unshift(t),$[e]+=n,r.length>j){var o=r.length-j,i=r.splice(r.length-o,r.length);$[e]=r.reduce((function(e,t){return e+J(t)}),0),ae(i,"queue_overflow"),console.warn("[TM]: 队列超过上限(".concat(j,"条),丢弃最旧 ").concat(o," 条"))}!function(e){Y.add(e),null===Z&&(Z=setTimeout((function(){Z=null,ee()}),200))}(e),pe(e,$[e]>=P)},pe=function(e,t,n){if(void 0===t&&(t=!1),void 0===n&&(n=!1),null==L?void 0:L.enableTracking){var a=te(e);if(a.length){var c=function(e){return e===R}(e),l=c?K:H,u=function(e){return e?W:z}(c);if(u.halveBatch&&a.length>1&&(a=a.slice(0,Math.ceil(a.length/2))),!u.retryExhausted)if(Date.now()<u.nextRetryAt)null===l.timer&&(l.timer=setTimeout((function(){l.timer=null,pe(e)}),u.nextRetryAt-Date.now()));else if(0!==u.retryCount||(a.length>=k||t)){if(null!==l.timer&&(clearTimeout(l.timer),l.timer=null),l.promise)return;l.promise=function(e,t,n,a,c){return void 0===c&&(c=!1),r(void 0,void 0,void 0,(function(){var r,l,u,s,d,f,v,p,m,h,y,g,w,T,b,_,S,E;return o(this,(function(x){switch(x.label){case 0:r=[],l=[],u=0;try{for(s=i(t),d=s.next();!d.done;d=s.next())f=d.value,v=1024*J(f),l.length&&u+v>65536&&(r.push(l),l=[],u=0),l.push(f),u+=v}catch(e){w={error:e}}finally{try{d&&!d.done&&(T=s.return)&&T.call(s)}finally{if(w)throw w.error}}l.length&&r.push(l),p=function(t){var r,i,a,l,u;return o(this,(function(o){switch(o.label){case 0:return[4,se(n,t,c)];case 1:return r=o.sent(),i=null===(S=null==r?void 0:r.data)||void 0===S?void 0:S.accepted_ids,a=null===(E=null==r?void 0:r.data)||void 0===E?void 0:E.rejected_ids,Array.isArray(i)?(de(e,i),Array.isArray(a)&&a.length&&(l=new Set(a),de(e,a),u=t.filter((function(e){return e.event_id&&l.has(e.event_id)})),u.length&&ae(u,"server_rejected"),console.warn("[TM]: 服务端校验拒绝 ".concat(a.length," 条(永久性拒绝),已从队列移除并通知 onDrop")))):(de(e,t.map((function(e){return e.event_id}))),(null==L?void 0:L.isLogger)&&console.warn("[TM]: 响应缺少 accepted_ids,按整批成功清理")),[2]}}))},x.label=1;case 1:x.trys.push([1,6,7,8]),m=i(r),h=m.next(),x.label=2;case 2:return h.done?[3,5]:(y=h.value,[5,p(y)]);case 3:x.sent(),x.label=4;case 4:return h=m.next(),[3,2];case 5:return[3,8];case 6:return g=x.sent(),b={error:g},[3,8];case 7:try{h&&!h.done&&(_=m.return)&&_.call(m)}finally{if(b)throw b.error}return[7];case 8:return a.retryCount=0,a.nextRetryAt=0,a.halveBatch=!1,[2]}}))}))}(e,a,c,u,n).catch((function(e){!function(e,t,n,r,o){(null==t?void 0:t.timeout)&&ce("request_timeout","上报请求超时,数据保留队列按退避重试",{url:n&&x?x:_,timeoutMs:null==L?void 0:L.requestTimeout});var i=null==t?void 0:t.status;if(413!==i){if(i&&i>=400&&i<500&&401!==i&&403!==i&&408!==i&&410!==i&&429!==i)return r.retryExhausted=!0,ae(o,"rejected_4xx"),void console.warn("[TM]: 批次提交被服务端拒绝(HTTP ".concat(i,"),数据保留在队列并暂停自动重试"));if(r.retryCount++,r.retryCount>D)return r.retryExhausted=!0,ae(o,"retries_exhausted"),void console.warn("[TM]: 重试次数已达上限(".concat(D,"),数据保留在队列(不丢弃),待下次会话或手动触发重试"));var a=429===i&&(null==t?void 0:t.retryAfter)||0;r.nextRetryAt=Date.now()+fe(r.retryCount,n,a),console.error("[TM]: send report fail, retryCount: ".concat(r.retryCount,", next retry after ").concat(Math.round((r.nextRetryAt-Date.now())/1e3),"s"))}else o.length>1?(r.halveBatch=!0,r.retryCount++,r.nextRetryAt=Date.now()+fe(r.retryCount,n,0),console.warn("[TM]: 批次过大(HTTP 413),降容半批重发(本批 ".concat(o.length," 条)"))):(r.retryExhausted=!0,ae(o,"rejected_4xx"),console.warn("[TM]: 单条事件仍超限(HTTP 413),数据保留在队列"))}(0,e,c,u,a)})).finally((function(){l.timer=null,l.promise=null,pe(e)}))}else if(null===l.timer){var s=c?O:M;l.timer=setTimeout((function(){l.timer=null,pe(e,!0)}),s)}}}},me=function(e){var t;if(!(null==L?void 0:L.enableTracking)||(null==L?void 0:L.respectGpc)&&!0===(null==(t="undefined"!=typeof navigator?navigator:void 0)?void 0:t.globalPrivacyControl))(null==L?void 0:L.isLogger)&&console.warn("[TM]: 用户已选择退出采集(enableTracking=false 或 GPC 信号开启),本事件忽略");else if(e&&"object"==typeof e){var n=!0===e.track_real_time,r=re(e);if(r)try{ve(n&&x?R:C,r)}catch(e){ce("enqueue_failed","事件入队失败",{error:e})}}else console.error("[TM]: track data must be an object")},he=function(e,t,r){me("string"==typeof e?n({event_type:e,event_detail:t},r):e)},ye=function(){pe(C,!0),pe(R,!0);var e=[H.promise,K.promise].filter((function(e){return!!e}));return Promise.all(e).then((function(){}))},ge=function(){L.isLogger=!0;try{localStorage.setItem(q,"true")}catch(e){console.error("[TM]: enable logger fail:",e)}},we=function(){L.isLogger=!1;try{localStorage.setItem(q,"false")}catch(e){console.error("[TM]: disable logger fail:",e)}};f((function(){pe(C,!0),pe(R,!0)}));var Te=function(e){return"boolean"==typeof e&&(L.enableTracking=e,function(e){try{localStorage.setItem(N,e?"1":"0")}catch(e){}}(e),e?(null==L?void 0:L.isLogger)&&console.warn("[TM]: 恢复采集"):(ne(C,[]),ne(R,[]),(null==L?void 0:L.isLogger)&&console.warn("[TM]: 用户已选择退出采集,已清空未上报队列"))),!0===(null==L?void 0:L.enableTracking)};return window.trackMonitor={track:he,flush:ye,bindUser:X,unBindUser:G,enableLogger:ge,disableLogger:we,setToken:ue,registerGlobalProperties:Q,enableTracking:Te},{client:{track:he,flush:ye,bindUser:X,unBindUser:G,enableLogger:ge,disableLogger:we,setToken:ue,registerGlobalProperties:Q,enableTracking:Te},beforeClose:function(){var e=function(){ee(),pe(C,!0,!0),pe(R,!0,!0)};window.addEventListener("beforeunload",e),window.addEventListener("pagehide",e),document.addEventListener("visibilitychange",(function(){"hidden"===document.visibilityState&&e()})),window.addEventListener("online",e)}}},se=(E=16,function(){var e=new Uint8Array(E);if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues)crypto.getRandomValues(e);else for(var t=0;t<E;t++)e[t]=Math.floor(256*Math.random());var n="";for(t=0;t<E;t++)n+=(e[t]<16?"0":"")+e[t].toString(16);return n})(),de=function(e){var t=history[e];return function(){var n=t.apply(this,arguments),r=new Event(e);return window.dispatchEvent(r),n}},fe=function(e){window.addEventListener("replaceState",(function(t){return e(t)}),!0),window.addEventListener("pushState",(function(t){return e(t)}),!0)},ve=function(e){window.addEventListener("popstate",(function(t){return e(t)}),!0)},pe=[25,50,75,90],me=function(e){var t,n,r;history.pushState=de("pushState"),history.replaceState=de("replaceState"),t="",r=v(n=function(){var e=window.location.href;if(e!==t){var n=window.location,r={host:n.host,hostname:n.hostname,href:n.href,protocol:n.protocol,origin:n.origin,port:n.port,pathname:n.pathname,search:n.search,hash:n.hash,title:document.title,language:navigator.language.substring(0,2),user_agent:navigator.userAgent,win_screen:"".concat(window.screen.width,"x").concat(window.screen.height),doc_screen:"".concat(document.documentElement.clientWidth,"x").concat(document.documentElement.clientHeight),referrer:document.referrer,type:h()};window.trackMonitor.track({data_type:"auto",event_type:"page_view",event_detail:r}),t=e}},200),n(),ve((function(){r()})),fe((function(){r()})),window.addEventListener("popstate",(function(){r()})),function(){var e=document.referrer,t=window.location.href,n=Date.now(),r=!0,o=function(r){if(void 0===r&&(r=!1),window.location.href!==t||r){var o=Date.now()-n;o>200&&window.trackMonitor.track({data_type:"auto",event_type:"page_leave",event_detail:{url:t,referrer:e,duration:o}}),n=Date.now(),e=t,t=window.location.href}},i=v(o);o(),ve((function(){i()})),fe((function(){i()})),document.addEventListener("visibilitychange",(function(){"hidden"===document.visibilityState?r&&(r=!1,o(!0)):(r=!0,n=Date.now())})),window.addEventListener("beforeunload",(function(){r&&(r=!1,o(!0))}),!0)}(),function(){var e=p((function(e){var t,n=function(e){if(e)return["A","INPUT","TEXTAREA","BUTTON"].includes(e.tagName)||e.hasAttribute("track-click")?e:e.closest("a, button, [track-click]")||void 0}(e.target);if(n){var r={element_id:n.id,element_content:(null===(t=n.textContent)||void 0===t?void 0:t.trim().slice(0,200))||null,element_class_name:n.className||null,element_name:n.getAttribute("name")||null,element_type:n.tagName.toLowerCase(),element_path:m(n),scroll_width:document.documentElement.scrollWidth,scroll_height:document.documentElement.scrollHeight,pageX:e.pageX,pageY:e.pageY,ratio:window.devicePixelRatio||1};window.trackMonitor.track({data_type:"auto",event_type:"click",event_detail:r})}}));window.addEventListener("click",e,!0)}(),!1!==(null==e?void 0:e.enableScroll)&&function(){var e=new Set,t=p((function(){var n=document.documentElement,r=n.scrollHeight-n.clientHeight;if(!(r<=0)){var o=Math.round((window.scrollY||n.scrollTop)/r*100),i=pe.filter((function(t){return o>=t&&!e.has(t)}));i.length&&(i.forEach((function(t){e.add(t),window.trackMonitor.track({data_type:"auto",event_type:"scroll",event_detail:{scroll_depth:t}})})),e.has(90)&&window.removeEventListener("scroll",t))}}),300);window.addEventListener("scroll",t,{passive:!0})}()},he=null,ye=null,ge="track-expose",we="track-view",Te=function(e){try{ye=new WeakMap}catch(e){console.error("[TM]: create WeakMap fail: ",e)}var t=function(e,t){void 0===t&&(t=!1);var r=null==ye?void 0:ye.get(e);if(!r||t){r&&(r.viewTimer&&clearTimeout(r.viewTimer),r.exposeTimer&&clearTimeout(r.exposeTimer));var o=e.dataset.durationView||500,i=e.dataset.durationExpose||500;null==ye||ye.set(e,{duration_view:o,duration_expose:i,viewTimer:null,exposeTimer:null}),null==he||he.observe(e),t&&function(e){if(!(e instanceof Element))return!1;if(!function e(t){if(!t)return!0;var n=window.getComputedStyle(t);return"none"!==n.display&&"hidden"!==n.visibility&&0!==parseFloat(n.opacity)&&e(t.parentElement)}(e))return!1;var t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)}(e)&&n(e)}},n=function(t){var n,o=null==ye?void 0:ye.get(t);if(o){var i=t.dataset.eventDetail,a=null!==(n=t.dataset.traceid)&&void 0!==n?n:void 0,c=t.dataset.spm,l=t.hasAttribute("track-real-time"),u=t.hasAttribute(we),s=t.hasAttribute(ge);u&&s?o.exposeTimer=window.setTimeout((function(){e({spm:c,request_id:a,data_type:"auto",event_type:"view_expose",event_detail:i,track_real_time:l}),t.removeAttribute(we),o.exposeTimer=null}),parseInt(o.duration_expose,10)):(u&&(o.viewTimer=window.setTimeout((function(){e({spm:c,request_id:a,data_type:"auto",event_type:"view",event_detail:i,track_real_time:l}),t.removeAttribute(we),s&&o.exposeTimer||r(t),o.viewTimer=null}),parseInt(o.duration_view,10))),s&&(o.exposeTimer=window.setTimeout((function(){e({spm:c,request_id:a,data_type:"auto",event_type:"expose",event_detail:i,track_real_time:l}),o.exposeTimer=null}),parseInt(o.duration_expose,10))))}},r=function(e){var t=null==ye?void 0:ye.get(e);t&&(null==he||he.unobserve(e),t.viewTimer&&clearTimeout(t.viewTimer),t.exposeTimer&&clearTimeout(t.exposeTimer),null==ye||ye.delete(e))},o=function(e){e.forEach((function(e){var t=e.target,o=null==ye?void 0:ye.get(t);o&&(o.viewTimer&&(clearTimeout(o.viewTimer),o.viewTimer=null),o.exposeTimer&&(clearTimeout(o.exposeTimer),o.exposeTimer=null),e.isIntersecting&&(n(t),t.hasAttribute(we)||t.hasAttribute(ge)||r(t)))}))};he=function(){var e=null;try{e=new IntersectionObserver(o,{root:null,threshold:.5})}catch(e){console.error("[TM]: create IntersectionObserver fail: ",e)}return e}(),new Set(c(c([],a(document.querySelectorAll("[".concat(ge,"]"))),!1),a(document.querySelectorAll("[".concat(we,"]"))),!1)).forEach((function(e){return t(e)})),new MutationObserver((function(e){e.forEach((function(e){if("attributes"===e.type&&e.target instanceof HTMLElement){var n=e.target,o=e.attributeName;n.hasAttribute(ge)||n.hasAttribute(we)?["data-event-detail","data-traceid","data-spm","data-duration-view","data-duration-expose"].includes(o)?t(n,!0):o!==ge&&o!==we||t(n,!1):r(n)}else"childList"===e.type&&(e.addedNodes.forEach((function(e){e instanceof HTMLElement&&(e.hasAttribute(ge)||e.hasAttribute(we)?t(e):new Set(c(c([],a(e.querySelectorAll("[".concat(ge,"]"))),!1),a(e.querySelectorAll("[".concat(we,"]"))),!1)).forEach((function(e){return t(e)})))})),e.removedNodes.forEach((function(e){e instanceof HTMLElement&&((null==ye?void 0:ye.get(e))?r(e):new Set(c(c([],a(e.querySelectorAll("[".concat(ge,"]"))),!1),a(e.querySelectorAll("[".concat(we,"]"))),!1)).forEach((function(e){return r(e)})))})))}))})).observe(document.body||document.documentElement,{attributes:!0,childList:!0,subtree:!0})},be=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;function _e(e){var t=e.match(be);return t?{filename:t[2],functionName:t[1]||"",lineno:parseInt(t[3],10)||void 0,colno:parseInt(t[4],10)||void 0}:{}}function Se(e){var t,n,r,o,a;try{var c=e.stack;if(!c)return[];var l=[];try{for(var u=i(c.split("\n").slice(1)),s=u.next();!s.done;s=u.next()){var d=_e(s.value);!d||(null===(r=d.filename)||void 0===r?void 0:r.includes("chrome-extension://"))||(null===(o=d.filename)||void 0===o?void 0:o.includes("node_modules"))||(null===(a=d.filename)||void 0===a?void 0:a.includes("<anonymous>"))||l.push(d)}}catch(e){t={error:e}}finally{try{s&&!s.done&&(n=u.return)&&n.call(u)}finally{if(t)throw t.error}}return l.slice(0,10)}catch(e){return[]}}var Ee=new Set,xe=function(e,t){var n,r;if((r=null!==(n=null==L?void 0:L.errorTraceRate)&&void 0!==n?n:.5)<0||r>1?(console.warn("[TM]: probability should be between 0 and 1"),0):Math.random()<r){if(window.trackMonitor.track(t),Ee.size>=1e3){var o=Ee.values().next().value;void 0!==o&&Ee.delete(o)}Ee.add(e)}},ke=function(){window.addEventListener("error",(function(e){!function(e){var t;if(e instanceof ErrorEvent&&"Script error."===e.message){var n=b("js-Script error.");if(Ee.has(n))return;xe(n,{data_type:"error",event_type:"js",event_detail:{traceId:se,msg:'Script error.(跨域脚本未加载 crossorigin 属性,无法获取堆栈;建议脚本加 crossorigin="anonymous")',target:"",stack:[],errorUuid:n,meta:{filename:e.filename,colno:e.colno,lineno:e.lineno,crossorigin_missing:!0}}})}else if("js"===T(e)&&!function(e){var t,n=(null===(t=e.error)||void 0===t?void 0:t.stack)||"";return/chrome-extension:\/\//.test(n)}(e)){var r=b("js-".concat(e.message,"-").concat(e.filename));if(!Ee.has(r)){var o=Se(e.error),i={traceId:se,msg:e.message,target:o[0]?"".concat(null===(t=o[0].filename)||void 0===t?void 0:t.split("?")[0],":").concat(o[0].lineno,":").concat(o[0].colno):"",stack:o,errorUuid:r,meta:{filename:e.filename,colno:e.colno,lineno:e.lineno}};xe(r,{data_type:"error",event_type:"js",event_detail:i})}}}(e)}),!0)},Me=function(){window.addEventListener("error",(function(e){!function(e){var t;if("resource"===T(e)){var n=e.target,r=b("resource-".concat(n.src,"-").concat(n.tagName));if(!Ee.has(r)){var o={traceId:se,msg:"加载".concat(n.tagName,"失败"),target:null===(t=n.src)||void 0===t?void 0:t.split("?")[0],errorUuid:r,meta:{url:n.src,html:n.outerHTML,tagName:n.tagName}};xe(r,{data_type:"error",event_type:"resource",event_detail:o})}}}(e)}),!0)},Ae=function(){window.addEventListener("unhandledrejection",(function(e){return function(e){var t,n=(null===(t=e.reason)||void 0===t?void 0:t.message)||e.reason,r=b("".concat("unhandledrejection","-").concat(n));if(!Ee.has(r)){var o={traceId:se,msg:n,stack:Se(e.reason),errorUuid:r};xe(r,{data_type:"error",event_type:"unhandledrejection",event_detail:o})}}(e)}),!0)},Le=function(){var e=function(e,t,n){var r;if("string"!=typeof(r=e.url)||![null==L?void 0:L.pushUrl,null==L?void 0:L.authUrl,null==L?void 0:L.realTimeUrl].filter((function(e){return!!e})).some((function(e){return 0===r.indexOf(e)})))if(t){var o=b("http-".concat(t,"-").concat(e.url,"-").concat(n));if(Ee.has(o))return;var i={traceId:se,errorType:t,msg:n,target:e.url.split("?")[0],errorUuid:o,request:e};xe(o,{data_type:"error",event_type:"http",event_detail:i})}else if(e.status>=400){var a=e.statusText;o=b("http-".concat(t="http_error","-").concat(e.url,"-").concat(a));if(Ee.has(o))return;i={traceId:se,errorUuid:o,errorType:t,target:e.url.split("?")[0],msg:a,request:e};xe(o,{data_type:"error",event_type:"http",event_detail:i})}};!function(e,t){if("XMLHttpRequest"in window&&"function"==typeof window.XMLHttpRequest){var r=window.XMLHttpRequest;window.oXMLHttpRequest||(window.oXMLHttpRequest=r),window.XMLHttpRequest=function(){var e=new r,o=e.open,i=e.send,a={};e.open=function(t,n,r,i,c){void 0===r&&(r=!0),a.method=t,a.url=n,o.call(e,t,n,r,i,c)},e.send=function(t){a.requestTime=(new Date).getTime(),i.call(e,t)};var c=function(r,o){var i=e.status,c=e.statusText,l=(new Date).getTime();a=n(n({},a),{status:i,statusText:c,responseTime:l,duration:l-a.requestTime}),"function"==typeof t&&t(a,r,o)};return e.addEventListener("loadend",(function(){return c()})),e.addEventListener("error",(function(){return c("net_error","ERR_NETWORK")})),e.addEventListener("abort",(function(){return c("cannel_request","ERR_CANCELED")})),e.addEventListener("timeout",(function(){return c("timeout","ERR_NETWORK")})),e}}}(0,e),function(e,t){if("fetch"in window&&"function"==typeof window.fetch){var i=window.fetch;window.oFetch||(window.oFetch=i),window.fetch=function(e,a){return r(void 0,void 0,void 0,(function(){var c;return o(this,(function(l){return(c={}).method=(null==a?void 0:a.method)||"",c.url=(e&&"string"!=typeof e?null==e?void 0:e.url:e)||"",c.requestTime=(new Date).getTime(),[2,i.call(window,e,a).then((function(e){return r(void 0,void 0,void 0,(function(){var r,i;return o(this,(function(o){return"function"==typeof t&&(r=e.clone(),i=(new Date).getTime(),c=n(n({},c),{status:r.status,statusText:r.statusText,responseTime:i,duration:i-c.requestTime}),t(c)),[2,e]}))}))})).catch((function(e){if("function"==typeof t){var r=(new Date).getTime();c=n(n({},c),{responseTime:r,duration:r-c.requestTime}),"AbortError"===e.name?t(c,"cannel_request","ERR_CANCELED"):t(c,"net_error","ERR_NETWORK")}return Promise.reject(e)}))]}))}))}}}(0,e)};var Ce=new WeakSet,Re=function(e){return{form_id:e.id||null,form_class:"string"==typeof e.className?e.className:null,form_name:e.getAttribute("name")||null,form_action:e.getAttribute("action")||null,form_text:(e.textContent||"").trim().slice(0,200)||null}};function Ie(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t);if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Oe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var Pe=-1,qe=e=>{addEventListener("pageshow",(t=>{t.persisted&&(Pe=t.timeStamp,e(t))}),!0)},Ne=(e,t,n,r)=>{var o,i;return a=>{t.value>=0&&(a||r)&&(((i=t.value-(null!=o?o:0))||void 0===o)&&(o=t.value,t.delta=i,t.rating=((e,t)=>e>t[1]?"poor":e>t[0]?"needs-improvement":"good")(t.value,n),e(t)))}},je=e=>{requestAnimationFrame((()=>requestAnimationFrame((()=>e()))))},Ue=()=>{var e=performance.getEntriesByType("navigation")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},Be=()=>{var e,t=Ue();return null!==(e=null==t?void 0:t.activationStart)&&void 0!==e?e:0},De=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,n=Ue(),r="navigate";return Pe>=0?r="back-forward-cache":n&&(document.prerendering||Be()>0?r="prerender":document.wasDiscarded?r="restore":n.type&&(r=n.type.replace(/_/g,"-"))),{name:e,value:t,rating:"good",delta:0,entries:[],id:"v5-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:r}},ze=new WeakMap;function Fe(e,t){return ze.get(e)||ze.set(e,new t),ze.get(e)}class He{constructor(){Ie(this,"t",void 0),Ie(this,"i",0),Ie(this,"o",[])}h(e){var t;if(!e.hadRecentInput){var n=this.o[0],r=this.o.at(-1);this.i&&n&&r&&e.startTime-r.startTime<1e3&&e.startTime-n.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),null===(t=this.t)||void 0===t||t.call(this,e)}}}var Ke,Je=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var r=new PerformanceObserver((e=>{Promise.resolve().then((()=>{t(e.getEntries())}))}));return r.observe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Oe(Object(n),!0).forEach((function(t){Ie(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Oe(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({type:e,buffered:!0},n)),r}}catch(e){}},We=e=>{var t=!1;return()=>{t||(e(),t=!0)}},Xe=-1,Ge=new Set,Qe=()=>"hidden"!==document.visibilityState||document.prerendering?1/0:0,Ve=e=>{if("hidden"===document.visibilityState){if("visibilitychange"===e.type)for(var t of Ge)t();isFinite(Xe)||(Xe="visibilitychange"===e.type?e.timeStamp:0,removeEventListener("prerenderingchange",Ve,!0))}},$e=()=>{if(Xe<0){var e,t=Be(),n=document.prerendering||null===(e=globalThis.performance.getEntriesByType("visibility-state").filter((e=>"hidden"===e.name&&e.startTime>t))[0])||void 0===e?void 0:e.startTime;Xe=null!=n?n:Qe(),addEventListener("visibilitychange",Ve,!0),addEventListener("prerenderingchange",Ve,!0),qe((()=>{setTimeout((()=>{Xe=Qe()}))}))}return{get firstHiddenTime(){return Xe},onHidden(e){Ge.add(e)}}},Ye=e=>{document.prerendering?addEventListener("prerenderingchange",(()=>e()),!0):e()},Ze=[1800,3e3],et=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Ye((()=>{var n,r=$e(),o=De("FCP"),i=Je("paint",(e=>{for(var t of e)"first-contentful-paint"===t.name&&(i.disconnect(),t.startTime<r.firstHiddenTime&&(o.value=Math.max(t.startTime-Be(),0),o.entries.push(t),n(!0)))}));i&&(n=Ne(e,o,Ze,t.reportAllChanges),qe((r=>{o=De("FCP"),n=Ne(e,o,Ze,t.reportAllChanges),je((()=>{o.value=performance.now()-r.timeStamp,n(!0)}))})))}))},tt=[.1,.25],nt=0,rt=1/0,ot=0,it=e=>{for(var t of e)t.interactionId&&(rt=Math.min(rt,t.interactionId),ot=Math.max(ot,t.interactionId),nt=ot?(ot-rt)/7+1:0)},at=()=>{var e;return Ke?nt:null!==(e=performance.interactionCount)&&void 0!==e?e:0},ct=0;class lt{constructor(){Ie(this,"u",[]),Ie(this,"l",new Map),Ie(this,"m",void 0),Ie(this,"p",void 0)}v(){ct=at(),this.u.length=0,this.l.clear()}L(){var e=Math.min(this.u.length-1,Math.floor((at()-ct)/50));return this.u[e]}h(e){var t;if(null!==(t=this.m)&&void 0!==t&&t.call(this,e),e.interactionId||"first-input"===e.entryType){var n=this.u.at(-1),r=this.l.get(e.interactionId);if(r||this.u.length<10||e.duration>n.P){var o;if(r?e.duration>r.P?(r.entries=[e],r.P=e.duration):e.duration===r.P&&e.startTime===r.entries[0].startTime&&r.entries.push(e):(r={id:e.interactionId,entries:[e],P:e.duration},this.l.set(r.id,r),this.u.push(r)),this.u.sort(((e,t)=>t.P-e.P)),this.u.length>10){var i=this.u.splice(10);for(var a of i)this.l.delete(a.id)}null===(o=this.p)||void 0===o||o.call(this,r)}}}}var ut=e=>{var t=globalThis.requestIdleCallback||setTimeout;"hidden"===document.visibilityState?e():(e=We(e),addEventListener("visibilitychange",e,{once:!0,capture:!0}),t((()=>{e(),removeEventListener("visibilitychange",e,{capture:!0})})))},st=[200,500],dt=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(globalThis.PerformanceEventTiming&&"interactionId"in PerformanceEventTiming.prototype){var n=$e();Ye((()=>{var r;"interactionCount"in performance||Ke||(Ke=Je("event",it,{type:"event",buffered:!0,durationThreshold:0}));var o,i=De("INP"),a=Fe(t,lt),c=e=>{ut((()=>{for(var t of e)a.h(t);var n=a.L();n&&n.P!==i.value&&(i.value=n.P,i.entries=n.entries,o())}))},l=Je("event",c,{durationThreshold:null!==(r=t.durationThreshold)&&void 0!==r?r:40});o=Ne(e,i,st,t.reportAllChanges),l&&(l.observe({type:"first-input",buffered:!0}),n.onHidden((()=>{c(l.takeRecords()),o(!0)})),qe((()=>{a.v(),i=De("INP"),o=Ne(e,i,st,t.reportAllChanges)})))}))}};class ft{constructor(){Ie(this,"m",void 0)}h(e){var t;null===(t=this.m)||void 0===t||t.call(this,e)}}var vt=[2500,4e3],pt=[800,1800],mt=e=>{document.prerendering?Ye((()=>mt(e))):"complete"!==document.readyState?addEventListener("load",(()=>mt(e)),!0):setTimeout(e)};function ht(){var e={ttfb:null,lcp:null,fp:null,fcp:null,connectionRtt:null,ttfbRequestTime:null,inp:null,cls:null,dcl:null,loadTime:null};!function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Ye((()=>{var n,r=$e(),o=De("LCP"),i=Fe(t,ft),a=e=>{for(var a of(t.reportAllChanges||(e=e.slice(-1)),e))i.h(a),a.startTime<r.firstHiddenTime&&(o.value=Math.max(a.startTime-Be(),0),o.entries=[a],n())},c=Je("largest-contentful-paint",a);if(c){n=Ne(e,o,vt,t.reportAllChanges);var l=We((()=>{a(c.takeRecords()),c.disconnect(),n(!0)})),u=e=>{e.isTrusted&&(ut(l),removeEventListener(e.type,u,{capture:!0}))};for(var s of["keydown","click","visibilitychange"])addEventListener(s,u,{capture:!0});qe((r=>{o=De("LCP"),n=Ne(e,o,vt,t.reportAllChanges),je((()=>{o.value=performance.now()-r.timeStamp,n(!0)}))}))}}))}((function(t){e.lcp=g(t.value)}),{reportAllChanges:!0}),function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=$e();et(We((()=>{var r,o=De("CLS",0),i=Fe(t,He),a=e=>{for(var t of e)i.h(t);i.i>o.value&&(o.value=i.i,o.entries=i.o,r())},c=Je("layout-shift",a);c&&(r=Ne(e,o,tt,t.reportAllChanges),n.onHidden((()=>{a(c.takeRecords()),r(!0)})),qe((()=>{i.i=0,o=De("CLS",0),r=Ne(e,o,tt,t.reportAllChanges),je((()=>r()))})),setTimeout(r))})))}((function(t){e.cls=Math.round(1e4*t.value)/1e4}),{reportAllChanges:!0}),dt((function(t){e.inp=g(t.value)}),{reportAllChanges:!0}),function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=De("TTFB"),r=Ne(e,n,pt,t.reportAllChanges);mt((()=>{var o=Ue();o&&(n.value=Math.max(o.responseStart-Be(),0),n.entries=[o],r(!0),qe((()=>{n=De("TTFB",0),(r=Ne(e,n,pt,t.reportAllChanges))(!0)})))}))}((function(t){e.ttfb=g(t.value)})),et((function(t){e.fcp=g(t.value)}));var t=function(){!function(){try{performance.getEntriesByType("paint").forEach((function(t){"first-paint"===t.name&&(e.fp=g(t.startTime))}))}catch(e){console.warn("[TM]: Failed to collect FP:",e)}try{var t=navigator.connection||navigator.mozConnection||navigator.webkitConnection;t&&void 0!==t.rtt&&(e.connectionRtt=t.rtt)}catch(e){console.warn("[TM]: Failed to collect Connection RTT:",e)}try{if(o=performance.getEntriesByType("navigation")[0]){var n=o.responseStart,r=o.requestStart;n>0&&r>0&&r<=n&&(e.ttfbRequestTime=g(n-r))}}catch(e){console.warn("[TM]: Failed to collect TTFB Request Time:",e)}try{var o;if(o=performance.getEntriesByType("navigation")[0]){var i=o.domContentLoadedEventEnd,a=o.loadEventEnd,c=o.fetchStart;i>0&&c>0&&(e.dcl=g(i-c)),a>0&&c>0&&(e.loadTime=g(a-c))}}catch(e){console.warn("[TM]: Failed to collect DCL and Load Time:",e)}}(),window.trackMonitor.track({data_type:"performance",event_type:"metrics",event_detail:{traceId:se,data:e}})},n=0,r=function(){var e=Date.now();e-n<3e4||(n=e,t())};window.addEventListener("beforeunload",t),window.addEventListener("pagehide",r),document.addEventListener("visibilitychange",(function(){"hidden"===document.visibilityState&&r()}))}var yt="__tengence_sdk";e.init=function(e){if("undefined"!=typeof window&&window.trackMonitor&&window.trackMonitor[yt])return console.warn("[TM]: init 已调用过,复用现有实例(如需重建请刷新页面)"),window.trackMonitor;var t,r=ue(e),o=r.client,i=r.beforeClose;return Te(o.track),!1!==e.traceBehavior&&me({enableScroll:e.enableScroll}),!1!==e.enableFormTrack&&(t=o.track,document.addEventListener("focusin",(function(e){var n=e.target;if((r=n)&&("INPUT"===r.tagName||"SELECT"===r.tagName||"TEXTAREA"===r.tagName)){var r,o=n.closest("form");o&&!Ce.has(o)&&(Ce.add(o),t({data_type:"auto",event_type:"form_start",event_detail:Re(o)}))}}),!0),document.addEventListener("submit",(function(e){var r=e.target;if(r&&"FORM"===r.tagName){var o=e.submitter;t({data_type:"auto",event_type:"form_submit",event_detail:n(n({},Re(r)),{submitter_id:(null==o?void 0:o.id)||null,submitter_text:((null==o?void 0:o.textContent)||"").trim().slice(0,200)||null})})}}),!0)),!1!==e.traceError&&(ke(),Me(),Ae(),Le()),!1!==e.tracePerformance&&y((function(){!function(){var e,t,n,r,o,i=window.performance||window.msPerformance;if(!i)return{dnsLookupTime:null,tcpConnectTime:null,ttfb:null,transferTime:null,domParseTime:null,domCompleteTime:null,loadEventTime:null,totalPageLoad:null};var a=i.getEntriesByType&&"function"==typeof i.getEntriesByType?i.getEntriesByType("navigation"):void 0,c=Array.isArray(a)?a[0]:void 0,l=null;if(c)l=c;else{var u=i.timing;u&&!(l={startTime:0,domainLookupStart:u.domainLookupStart,domainLookupEnd:u.domainLookupEnd,connectStart:u.connectStart,connectEnd:u.connectEnd,requestStart:u.requestStart,responseStart:u.responseStart,responseEnd:u.responseEnd,domInteractive:u.domInteractive,domComplete:u.domComplete,loadEventEnd:u.loadEventEnd,fetchStart:u.fetchStart}).requestStart&&u.fetchStart&&(l.requestStart=u.fetchStart)}var s={dnsLookupTime:l?g(l.domainLookupEnd-l.domainLookupStart):null,tcpConnectTime:l?g(l.connectEnd-l.connectStart):null,ttfb:l?g(l.responseStart-(null!==(t=null!==(e=l.requestStart)&&void 0!==e?e:l.fetchStart)&&void 0!==t?t:0)):null,transferTime:l?g(l.responseEnd-l.responseStart):null,domParseTime:l?g(l.domInteractive-l.responseEnd):null,domCompleteTime:l?g(l.domComplete-l.domInteractive):null,loadEventTime:l?g(l.loadEventEnd-(null!==(n=l.domComplete)&&void 0!==n?n:0)):null,totalPageLoad:l?g((null!==(r=l.loadEventEnd)&&void 0!==r?r:performance.now())-(null!==(o=l.startTime)&&void 0!==o?o:0)):null};window.trackMonitor.track({data_type:"performance",event_type:"navigation_timing",event_detail:{traceId:se,data:s}})}(),function(){var e,t=window.performance||window.msPerformance;if(!t)return[];var n=[];if(t.getEntriesByType){var r=(t.getEntriesByType("resource")||[]).map((function(e){var t="number"==typeof e.redirectEnd&&"number"==typeof e.redirectStart?g(e.redirectEnd-e.redirectStart):null,n="number"==typeof e.domainLookupEnd&&"number"==typeof e.domainLookupStart?g(e.domainLookupEnd-e.domainLookupStart):null,r="number"==typeof e.connectEnd&&"number"==typeof e.connectStart?g(e.connectEnd-e.connectStart):null,o="number"==typeof e.requestStart&&"number"==typeof e.fetchStart?g(e.requestStart-e.fetchStart):null,i="number"==typeof e.responseStart&&"number"==typeof e.requestStart?g(e.responseStart-e.requestStart):null,a="number"==typeof e.responseEnd&&"number"==typeof e.responseStart?g(e.responseEnd-e.responseStart):null,c="number"==typeof e.duration?g(e.duration):null,l="number"==typeof e.startTime?g(e.startTime):null,u="number"==typeof e.transferSize&&isFinite(e.transferSize)&&e.transferSize>=0?Math.round(e.transferSize):null,s="number"==typeof e.encodedBodySize&&isFinite(e.encodedBodySize)&&e.encodedBodySize>=0?Math.round(e.encodedBodySize):null,d="number"==typeof e.decodedBodySize&&isFinite(e.decodedBodySize)&&e.decodedBodySize>=0?Math.round(e.decodedBodySize):null;return{name:e.name,initiatorType:e.initiatorType||"",startTime:l,duration:c,redirectTime:t,cacheTime:o,dnsTime:n,connectTime:r,requestTime:i,responseTime:a,transferSize:u,encodedBodySize:s,decodedBodySize:d}}));r.sort((function(e,t){var n,r;return(null!==(n=t.duration)&&void 0!==n?n:0)-(null!==(r=e.duration)&&void 0!==r?r:0)}));var o=null!==(e=null==L?void 0:L.resourceFlowLimit)&&void 0!==e?e:15;if(0===o)return;for(var i=0;i<Math.min(o,r.length);i++)n.push(r[i]);if(!n.length)return}window.trackMonitor.track({data_type:"performance",event_type:"resource_flow",event_detail:{traceId:se,data:n}})}(),ht()})),y((function(){i()})),window.trackMonitor[yt]=!0,window.trackMonitor}}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tengence/track-sdk-web",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "tengence web client track sdk",
|
|
5
5
|
"main": "dist/index.mjs",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -54,4 +54,4 @@
|
|
|
54
54
|
"engines": {
|
|
55
55
|
"node": "20"
|
|
56
56
|
}
|
|
57
|
-
}
|
|
57
|
+
}
|