@tengence/track-sdk-web 1.1.4 → 1.2.0
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 +292 -1
- package/dist/client.d.ts +40 -4
- package/dist/index.d.ts +5 -1
- package/dist/index.mjs +1 -1
- package/dist/index.umd.d.ts +2 -0
- package/dist/interface/index.d.ts +51 -7
- package/dist/plugin/behavior.d.ts +3 -1
- package/dist/plugin/error.d.ts +1 -1
- package/dist/plugin/expose.d.ts +2 -2
- package/dist/plugin/form.d.ts +3 -0
- package/dist/tengence-track-sdk@1.1.10.js +1 -0
- package/dist/tengence-track-sdk@1.1.11.js +1 -0
- package/dist/tengence-track-sdk@1.1.12.js +1 -0
- package/dist/tengence-track-sdk@1.1.13.js +1 -0
- package/dist/tengence-track-sdk@1.1.14.js +1 -0
- package/dist/tengence-track-sdk@1.1.15.js +1 -0
- package/dist/tengence-track-sdk@1.1.16.js +1 -0
- package/dist/tengence-track-sdk@1.1.17.js +1 -0
- package/dist/tengence-track-sdk@1.1.5.js +1 -0
- package/dist/tengence-track-sdk@1.1.6.js +1 -0
- package/dist/tengence-track-sdk@1.1.7.js +1 -0
- package/dist/tengence-track-sdk@1.1.8.js +1 -0
- package/dist/tengence-track-sdk@1.1.9.js +1 -0
- package/dist/tengence-track-sdk@1.2.0.js +1 -0
- package/dist/utils/hash.d.ts +16 -0
- package/dist/utils/helper.d.ts +21 -0
- package/dist/utils/logger.d.ts +2 -2
- package/dist/utils/md5.d.ts +2 -0
- package/dist/utils/request.d.ts +25 -9
- package/package.json +15 -2
|
@@ -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||"common",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.0",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:"common",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:"common",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:"common",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:"common",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:"common",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:"common",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:"common",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:"common",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:"common",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}}));
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 轻量字符串哈希(djb2,替代原 485 行自实现 MD5)
|
|
3
|
+
*
|
|
4
|
+
* 用途:错误去重指纹(errorUuid)等**非加密**场景——只需确定性 + 低碰撞,
|
|
5
|
+
* 无需密码学强度。djb2 是业界通用指纹散列(Redis hash、Java String.hashCode
|
|
6
|
+
* 同类),约 10 行实现,dist 体积减小 ~4KB。
|
|
7
|
+
*
|
|
8
|
+
* 返回 32 位无符号整数的 8 位小写十六进制串(固定长度,便于拼接与展示)。
|
|
9
|
+
*/
|
|
10
|
+
export declare const djb2Hash: (str: string) => string;
|
|
11
|
+
/**
|
|
12
|
+
* djb2 变体(倒序遍历 + 异或混合),与 djb2Hash 组合输出 64bit 指纹。
|
|
13
|
+
* 单独 32bit 指纹在错误去重集合(上限 1000 条)中碰撞率约 2^-32,
|
|
14
|
+
* 双哈希拼接后降至 2^-64,保持无加密依赖、体积不变。
|
|
15
|
+
*/
|
|
16
|
+
export declare const djb2XorHash: (str: string) => string;
|
package/dist/utils/helper.d.ts
CHANGED
|
@@ -44,11 +44,32 @@ export declare const whenReady: (callback: () => void) => void;
|
|
|
44
44
|
* 格式化并保留两位小数,若值无效则返回 null
|
|
45
45
|
*/
|
|
46
46
|
export declare function safeFixed(v: number | undefined): number | null;
|
|
47
|
+
/**
|
|
48
|
+
* 生成指定字节数的随机 hex 串(2*bytes 个 hex 字符)。
|
|
49
|
+
* 随机源使用 Web Crypto crypto.getRandomValues(CSPRNG,HTTPS/HTTP 均可用),
|
|
50
|
+
* 仅当 Web Crypto 完全不可用时退化为 Math.random(理论极罕见,非安全上下文兜底)。
|
|
51
|
+
* 用于 trace_id / span_id 等 W3C Trace Context 标识。
|
|
52
|
+
*/
|
|
47
53
|
export declare function getIdGenerator(bytes: number): () => string;
|
|
48
54
|
export declare function generateTraceId(): string;
|
|
49
55
|
export declare function generateSpanId(): string;
|
|
56
|
+
/**
|
|
57
|
+
* 生成无横杠 32 位 hex 的 UUID v4(128bit,CSPRNG,RFC 4122 v4 语义)。
|
|
58
|
+
* 主路径用 crypto.getRandomValues 直接构造(版本位/变体位正确),
|
|
59
|
+
* 输出统一去掉横杠 —— 复制分享友好、存储紧凑、URL 无需转义,
|
|
60
|
+
* 与 collect 服务端兜底 device_id(32hex)形式一致。
|
|
61
|
+
* 用于 event_id / device_id / session_id 等需要唯一标识的场景。
|
|
62
|
+
*/
|
|
63
|
+
export declare function generateId(): string;
|
|
50
64
|
export declare const getErrorKey: (event: ErrorEvent | Event) => "resource" | "cors" | "js";
|
|
51
65
|
export declare const getErrorUuid: (str: string) => string;
|
|
52
66
|
export declare const isChromeExtensionError: (event: ErrorEvent) => boolean;
|
|
53
67
|
export declare function shouldSample(probability: number): boolean;
|
|
54
68
|
export declare function isVisible(element: Element): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* 浏览器全局隐私控制信号(GPC,Global Privacy Control):
|
|
71
|
+
* 用户在浏览器层选择"不出售/不分享我的数据"时,navigator.globalPrivacyControl === true;
|
|
72
|
+
* 不支持或未开启时为 undefined/false → 返回 false。读取零成本(单布尔),
|
|
73
|
+
* init 时读取一次 + 每次 report 前复查(浏览器无 GPC 变化事件)。
|
|
74
|
+
*/
|
|
75
|
+
export declare function isGpcActive(): boolean;
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ReportData } from "@/interface";
|
|
2
2
|
/**
|
|
3
3
|
* 彩色打印埋点数据
|
|
4
|
-
* @param method
|
|
4
|
+
* @param method 上报方式(Fetch / XHR / RealTimeFetch 等)
|
|
5
5
|
* @param data 上报数据数组
|
|
6
6
|
*/
|
|
7
|
-
export declare const logTrackData: (method:
|
|
7
|
+
export declare const logTrackData: (method: string, data: ReportData[]) => void;
|
package/dist/utils/md5.d.ts
CHANGED
package/dist/utils/request.d.ts
CHANGED
|
@@ -1,24 +1,40 @@
|
|
|
1
1
|
type RequestMethod = "GET" | "POST";
|
|
2
|
+
/**
|
|
3
|
+
* 鉴权错误(401/403),供上层识别并触发 token 刷新
|
|
4
|
+
*/
|
|
5
|
+
export declare class AuthError extends Error {
|
|
6
|
+
status: number;
|
|
7
|
+
constructor(status: number, message?: string);
|
|
8
|
+
}
|
|
2
9
|
interface AjaxOptions {
|
|
3
10
|
method: RequestMethod;
|
|
4
11
|
url: string;
|
|
5
12
|
data?: any;
|
|
6
13
|
headers?: Record<string, string>;
|
|
7
14
|
withCredentials?: boolean;
|
|
15
|
+
timeoutMs?: number;
|
|
8
16
|
}
|
|
9
17
|
/**
|
|
10
|
-
*
|
|
18
|
+
* ajax请求(XHR,作为 fetch 不可用时的回退)
|
|
19
|
+
* @param {AjaxOptions} params 请求配置
|
|
11
20
|
*/
|
|
12
|
-
export declare const
|
|
21
|
+
export declare const ajax: <T>({ method, url, data, headers, withCredentials, timeoutMs, }: AjaxOptions) => Promise<T>;
|
|
13
22
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
23
|
+
* 无鉴权 JSON POST(供 SDK 内部换取 accessToken 使用,不携带 Authorization 头)
|
|
24
|
+
* 与 postJsonWithAuth 相同的 fetch 优先、网络失败回退 XHR 策略。
|
|
25
|
+
* HTTP 状态错误(服务端已响应)直接抛出,不回退 XHR。
|
|
26
|
+
* @param url 请求地址(鉴权地址)
|
|
27
|
+
* @param payload 请求体(如 {"module":"track"})
|
|
28
|
+
* @param timeoutMs 请求超时(毫秒,G2;默认 10s 由调用方传 options.requestTimeout)
|
|
16
29
|
*/
|
|
17
|
-
export declare const
|
|
30
|
+
export declare const postJson: <T>(url: string, payload: any, timeoutMs?: number) => Promise<T>;
|
|
18
31
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* @param
|
|
32
|
+
* 带 Bearer 鉴权的 JSON POST:优先 fetch keepalive,不支持/网络失败时回退 XHR。
|
|
33
|
+
* 彻底弃用 sendBeacon(无法携带 Authorization 头)。
|
|
34
|
+
* @param url 上报地址
|
|
35
|
+
* @param payload 上报数据
|
|
36
|
+
* @param credential accessToken 或 apiKey(作为 Bearer)
|
|
37
|
+
* @param timeoutMs 请求超时(毫秒,G2);0/undefined 不设超时(页面卸载补发路径)
|
|
22
38
|
*/
|
|
23
|
-
export declare const
|
|
39
|
+
export declare const postJsonWithAuth: <T>(url: string, payload: any, credential?: string, timeoutMs?: number) => Promise<T>;
|
|
24
40
|
export {};
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tengence/track-sdk-web",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "tengence web client track sdk",
|
|
5
5
|
"main": "dist/index.mjs",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
7
|
+
"unpkg": "dist/tengence-track-sdk@1.1.17.js",
|
|
7
8
|
"exports": {
|
|
8
9
|
".": {
|
|
9
10
|
"import": {
|
|
@@ -15,13 +16,21 @@
|
|
|
15
16
|
"scripts": {
|
|
16
17
|
"build": "rollup --c rollup.config.ts --configPlugin typescript",
|
|
17
18
|
"release": "npm publish --access public --registry https://registry.npmjs.org/",
|
|
18
|
-
"deploy": "
|
|
19
|
+
"deploy": "node scripts/deploy.mjs",
|
|
20
|
+
"publish:all": "npm run build && npm run release && npm run deploy",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"test:watch": "vitest",
|
|
23
|
+
"test:e2e": "node scripts/smoke-test.mjs",
|
|
24
|
+
"typecheck": "tsc --noEmit"
|
|
19
25
|
},
|
|
20
26
|
"private": false,
|
|
21
27
|
"author": "tengence",
|
|
22
28
|
"license": "ISC",
|
|
23
29
|
"devDependencies": {
|
|
30
|
+
"@babel/core": "^7.29.7",
|
|
31
|
+
"@babel/preset-env": "^7.29.7",
|
|
24
32
|
"@rollup/plugin-alias": "^5.1.1",
|
|
33
|
+
"@rollup/plugin-babel": "^7.1.0",
|
|
25
34
|
"@rollup/plugin-commonjs": "^28.0.1",
|
|
26
35
|
"@rollup/plugin-json": "^6.1.0",
|
|
27
36
|
"@rollup/plugin-node-resolve": "^15.3.0",
|
|
@@ -29,10 +38,14 @@
|
|
|
29
38
|
"@rollup/plugin-typescript": "^12.1.1",
|
|
30
39
|
"@types/node": "^22.13.1",
|
|
31
40
|
"cors": "^2.8.5",
|
|
41
|
+
"dotenv": "^17.4.2",
|
|
32
42
|
"express": "^4.21.2",
|
|
43
|
+
"jsdom": "^30.1.3",
|
|
33
44
|
"rollup": "^4.34.6",
|
|
45
|
+
"ssh2": "^1.17.0",
|
|
34
46
|
"tslib": "^2.8.0",
|
|
35
47
|
"typescript": "^4.9.5",
|
|
48
|
+
"vitest": "^5.0.5",
|
|
36
49
|
"web-vitals": "^5.1.0"
|
|
37
50
|
},
|
|
38
51
|
"files": [
|