ctc-track-plugin
Version:
uniapp 小程序埋点劫持
2 lines • 8.7 kB
JavaScript
import{shallowRef as f,watchEffect as B}from"vue";var m=class{static genUrl(t,n){if(n&&typeof n=="object"){let r=[],a=[","];for(let s in n)if(Object.prototype.hasOwnProperty.call(n,s)){let o=n[s],u=`${s}=${encodeURIComponent(o||"")}`;if(o&&typeof o=="string"){for(let g of a)if(o.includes(g)){let l=new RegExp(`${encodeURIComponent(g)}`,"g");u=u.replace(l,g)}}r.push(u)}r.length>0&&(t=t+"?"+r.join("&"))}return t}};function T(){let e=getCurrentPages(),t;if(e&&e.length>0){let n=e[e.length-1];t={fullPath:m.genUrl(n.route,n.options),route:n.route,options:n.options}}return t}import{md5 as D}from"js-md5";var c={DEFAULT_BATCH_SIZE:10,DEFAULT_INTERVAL_TIME:1e4,DEFAULT_RETRY_COUNT:3,DEFAULT_ACTIVE_SWITCH:1,DEFAULT_AUTO_SWITCH:1,CLIENT_TYPE:"2",RANDOM_MIN:1e3,RANDOM_MAX:9e3,HTTP_NOT_FOUND:404,HTTP_BAD_GATEWAY:502,REQUEST_SUCCESSFUL:0,CONFIG_API_PATH:"/event-api/event/config/configManage",REPORT_API_PATH:"/event-api/event/dataReport",IGNORED_PAGE_KEYS:["easycom","globalStyle","tabBar","pages"]},d,I={trackCount:1},F=()=>{let e=new Date,t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0"),a=String(e.getHours()).padStart(2,"0"),s=String(e.getMinutes()).padStart(2,"0"),o=String(e.getSeconds()).padStart(2,"0");return`${t}-${n}-${r} ${a}:${s}:${o}`},$=()=>{let e=uni.getSystemInfoSync().deviceId,t=new Date().getTime(),n=Math.floor(Math.random()*c.RANDOM_MAX)+c.RANDOM_MIN;return`${e}${t}${n}`},M=(e,t)=>{let n=$();return D(`${e}${n}${t}`)},H=()=>`${$()}${I.trackCount}`,x=/[^/]+$/,_=e=>{var t;return(t=e.match(x))==null?void 0:t[0]},h=(e,t)=>{let n=t.pages.find(r=>r.path===e||_(r.path)===_(e));if(n)return n;for(let r in t){if(c.IGNORED_PAGE_KEYS.includes(r))continue;let a=t[r];for(let s of a){let o=s.pages.find(u=>`${s.root}/${u.path}`===e||_(u.path)===_(e));if(o)return o}}return null},P=f(c.DEFAULT_BATCH_SIZE),E=f(c.DEFAULT_INTERVAL_TIME),R=f(c.DEFAULT_RETRY_COUNT),O=f(c.DEFAULT_ACTIVE_SWITCH),p=f(c.DEFAULT_AUTO_SWITCH),N=()=>{var n;let e=uni.getStorageSync("user");if(!e)return console.log("\u672A\u83B7\u53D6\u5230user\u503C"),{jwt:null,usertype:"customer"};let t=((n=JSON.parse(e))==null?void 0:n.userInfo)??{jwt:null,usertype:"customer"};return{jwt:t.jwt,usertype:t.usertype}},L=(e,t,n)=>{let r=e?`${e}${t}${n}`:`${t}${n}`;return D(r)},j=e=>{var n;if(console.log(e,"config response"),e.statusCode===c.HTTP_NOT_FOUND||e.statusCode===c.HTTP_BAD_GATEWAY){i.error("\u83B7\u53D6\u57CB\u70B9\u914D\u7F6E\u53C2\u6570\u5931\u8D25");return}if(e.data.status!==c.REQUEST_SUCCESSFUL){i.error("\u83B7\u53D6\u57CB\u70B9\u914D\u7F6E\u53C2\u6570\u5931\u8D25",e.data.msg);return}let t=(n=e.data)==null?void 0:n.data;t&&(P.value=t.batchSize??c.DEFAULT_BATCH_SIZE,E.value=t.intervalTime??c.DEFAULT_INTERVAL_TIME,R.value=t.retryCount??c.DEFAULT_RETRY_COUNT,O.value=t.activeSwitch??c.DEFAULT_ACTIVE_SWITCH,p.value=t.autoSwitch??c.DEFAULT_AUTO_SWITCH)},Y=(e={})=>{if(!d){i.error("\u57CB\u70B9URL\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u83B7\u53D6\u914D\u7F6E\u53C2\u6570");return}let t=Math.floor(new Date().getTime()/1e3),{jwt:n,usertype:r}=N(),a=(e==null?void 0:e.usertype)??r,o={sign:L(n,t,a),timestamp:t,usertype:a};n&&(o.Authorization=n),uni.request({url:`${d}${c.CONFIG_API_PATH}`,method:"POST",data:{clientType:c.CLIENT_TYPE,device:uni.getSystemInfoSync().deviceId},header:o,success:j,fail:()=>console.log("\u83B7\u53D6\u57CB\u70B9\u914D\u7F6E\u53C2\u6570\u5931\u8D25")})},i={success:(e,t)=>{console.log(`[\u57CB\u70B9\u6210\u529F] ${e}`,t||"")},error:(e,t)=>{console.error(`[\u57CB\u70B9\u9519\u8BEF] ${e}`,t||"")},info:(e,t)=>{console.log(`[\u57CB\u70B9\u4FE1\u606F] ${e}`,t||"")}},G=e=>e!==c.HTTP_NOT_FOUND&&e!==c.HTTP_BAD_GATEWAY,b=()=>d?`${d}${c.REPORT_API_PATH}`:(i.error("\u57CB\u70B9URL\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u751F\u6210\u4E0A\u62A5URL"),""),W=(e,t)=>{if(!b()){i.error("\u65E0\u6CD5\u83B7\u53D6\u4E0A\u62A5URL\uFF0C\u53D6\u6D88\u57CB\u70B9\u6570\u636E\u53D1\u9001");return}let r=Math.floor(new Date().getTime()/1e3),{jwt:a,usertype:s}=N(),o=(t==null?void 0:t.usertype)??s,g={sign:L(a,r,o),timestamp:r,usertype:o};a&&(g.Authorization=a),uni.request({header:g,method:"POST",url:b(),data:e,success:l=>{G(l.statusCode)?i.success("\u57CB\u70B9\u4E8B\u4EF6\u63D0\u4EA4\u6210\u529F",l):i.error("\u57CB\u70B9\u4E8B\u4EF6\u63D0\u4EA4\u5931\u8D25",`\u72B6\u6001\u7801: ${l.statusCode}`)},fail:l=>{i.error("\u57CB\u70B9\u4E8B\u4EF6\u63D0\u4EA4\u5931\u8D25",l)}})},z=()=>new Promise((e,t)=>{uni.getNetworkType({success({networkType:n}){e(n)},fail:n=>{t(n)}})}),V=()=>{var r;let e=uni.getStorageSync("user");if(!e)return i.info("\u672A\u83B7\u53D6\u5230user\u503C"),{userid:null,userType:null};let{userid:t,userType:n}=((r=JSON.parse(e))==null?void 0:r.userInfo)??{userid:null,userType:null};return{userid:t,userType:n}},Z=()=>{let{deviceId:e,uniPlatform:t,osName:n,osVersion:r,deviceModel:a,deviceBrand:s,ua:o}=uni.getSystemInfoSync();return{device_id:e,platform:t,os:n,osVersion:r,model:a,brand:s,ua:o,terminal_type:t==="mp-weixin"?"\u5FAE\u4FE1\u5C0F\u7A0B\u5E8F":"h5\u9875\u9762"}},K=async(e={})=>{let t=T(),n=await z(),{userid:r,userType:a}=V(),s=Z();return{event_timestamp:F(),page_url:t==null?void 0:t.route,extra_params:JSON.stringify({}),user_id:r,user_type:a,network_type:n,session_id:H(),...s,...e}},Q=e=>{if(typeof e=="object"&&e!==null){let{event_id:t,...n}=e;return{event_id:t,extra_params:JSON.stringify(n)}}return{event_id:e}},X=e=>{if(e.content)return{is_element:!1};let t=T();return{is_element:!0,element_id:null,element_type:e.tag,element_name:`${t==null?void 0:t.route}_${e.text}`}},U=class{batch=[];timer=null;batchSize;interval;retryCount;constructor(t,n,r){i.info("\u521D\u59CB\u5316BatchProcessor",{batchSize:t,intervalTime:n,retryCount:r}),this.batchSize=t,this.interval=n,this.retryCount=r}async sendBatch(t={}){if(this.batch.length===0)return;let n=this.retryCount,r=!1;for(;n>0&&!r;)try{i.info("\u53D1\u9001\u6279\u6B21\u6570\u636E",`${this.batch.length}\u6761\u8BB0\u5F55`),W({eventList:this.batch},t),r=!0,this.batch=[]}catch(a){n--,n===0&&i.error("\u6279\u6B21\u91CD\u8BD5\u540E\u4ECD\u5931\u8D25",a)}}async addToBatch(t,n={}){let r=await K(n),a=X(t),s=t.content?Q(t.content):{};this.batch.push({...r,...a,...s}),this.batch.length>=this.batchSize?(i.info("\u6279\u6B21\u5927\u5C0F\u8FBE\u5230\u9608\u503C\uFF0C\u7ACB\u5373\u53D1\u9001",`${this.batch.length}/${this.batchSize}`),await this.sendBatch(n)):this.timer||(i.info("\u542F\u52A8\u5B9A\u65F6\u5668",`${this.interval}\u79D2\u540E\u53D1\u9001`),this.timer=setTimeout(async()=>{await this.sendBatch(n),this.timer=null},this.interval*1e3))}},y;B(()=>{(P.value||E.value||R.value)&&(y=new U(P.value,E.value,R.value))});var J=e=>e.content&&O.value===0?(i.info("\u4E3B\u52A8\u4E0A\u62A5\u5F00\u5173\u5DF2\u5173\u95ED"),!1):!e.content&&p.value===0?(i.info("\u81EA\u52A8\u4E0A\u62A5\u5F00\u5173\u5DF2\u5173\u95ED"),!1):!0,C=async(e,t,n={})=>{J(e)&&(I.trackCount++,await(y==null?void 0:y.addToBatch(e,{...n,event_type:t,id:M(t,new Date().getTime())})))},w=(e,t,n,r={})=>{var a,s,o;return{content:{event_id:(r==null?void 0:r.event_id)||((a=e==null?void 0:e.style)==null?void 0:a.navigationBarTitleText)},pageOptions:{page_id:(s=e==null?void 0:e.style)==null?void 0:s.navigationBarTitleText,refer_page_id:(o=t==null?void 0:t.style)==null?void 0:o.navigationBarTitleText,refer_page_url:n,...r,event_type:"page_view",id:M("page_view",new Date().getTime())}}},q={install(e,t,n){t.baseUrl||i.error("\u8BF7\u4F20\u5165baseUrl\u53C2\u6570"),d=t.baseUrl,Y(t);let r=async s=>{if(!d){i.error("\u57CB\u70B9URL\u672A\u914D\u7F6E\uFF0C\u8BF7\u5148\u4F20\u5165baseUrl\u53C2\u6570");return}i.info("\u624B\u52A8/\u81EA\u52A8\u57CB\u70B9\u89E6\u53D1",s),await C(s,"click",t)},a=async(s,o={},u)=>{if(!d){i.error("\u57CB\u70B9URL\u672A\u914D\u7F6E\uFF0C\u8BF7\u5148\u4F20\u5165baseUrl\u53C2\u6570");return}if(p.value===0&&u){i.info("\u81EA\u52A8\u4E0A\u62A5\u5F00\u5173\u5DF2\u5173\u95ED\uFF0C\u8DF3\u8FC7\u9875\u9762\u57CB\u70B9");return}let g=getCurrentPages(),l=g[g.length-1].route,S=h(l,n),v=h(s.slice(1),n),{content:A,pageOptions:k}=w(v,S,l||"",{...t,...o,page_url:s});await C({content:A},"page_view",k),i.success("\u9875\u9762\u8DF3\u8F6C\u57CB\u70B9\u6210\u529F",s)};e.config.globalProperties.sendMd=r,e.config.globalProperties.sendPageMd=a,uni.addInterceptor("navigateTo",{invoke(s){i.info("\u9875\u9762\u8DF3\u8F6C\u62E6\u622A",s)},success(s){if(p.value===0)return;let o=getCurrentPages(),u=T(),g=h(u==null?void 0:u.route,n),l=o[o.length-2].route,S=h(l,n),{content:v,pageOptions:A}=w(g,S,l||"",t);C({content:v},"page_view",A),i.success("\u9875\u9762\u8DF3\u8F6C\u57CB\u70B9\u6210\u529F",s)}})}},oe=q;export{oe as default,Y as handleInitConfigParams};
//# sourceMappingURL=bury.js.map