stone-analytics 0.0.19 → 0.0.20
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/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ type TAnalyticsVisitParams = {
|
|
|
21
21
|
date?: string;
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
-
declare const sendAnalytics: (data: TAnalyticsData
|
|
24
|
+
declare const sendAnalytics: (data: TAnalyticsData) => void;
|
|
25
25
|
|
|
26
26
|
declare const useInitializeMetrics: () => {};
|
|
27
27
|
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var m=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var P=Object.prototype.hasOwnProperty;var A=(e,t)=>{for(var n in t)m(e,n,{get:t[n],enumerable:!0})},D=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of E(t))!P.call(e,o)&&o!==n&&m(e,o,{get:()=>t[o],enumerable:!(i=L(t,o))||i.enumerable});return e};var x=e=>D(m({},"__esModule",{value:!0}),e);var U={};A(U,{checkTimeStamp:()=>p,sendAnalytics:()=>c,setClientId:()=>d,setSessionId:()=>_,useInitializeMetrics:()=>N});module.exports=x(U);var l=()=>String(Date.now())+String(Math.floor(Math.random()*9e8)+1e8);var S=typeof localStorage<"u",p=e=>{if(!e)return!1;let t=new Date(e.split("_")[0]),n=new Date(new Date().toISOString());return n.getFullYear()>t.getFullYear()&&n.getMonth()>=t.getMonth()&&n.getDate()>=t.getDate()},_=()=>{let e=l(),t=new Date().toISOString();S&&localStorage.setItem("st_session_id",t+"_"+e)},d=()=>{let e=l(),t=new Date().toISOString();S&&localStorage.setItem("st_client_id",t+"_"+e)};var g=require("cookies-next");var h=e=>{var t,n;if(typeof window<"u"){let i=process.env.NEXT_PUBLIC_IS_TEST==="true",o=window.location.pathname,s=window.location.href,a={event:e.event,st_event_id:(t=e.params)==null?void 0:t.st_event_id,abTestGroup:(n=e.params)==null?void 0:n.abTestGroup,page_path:o,page_url:s};e.params.st_session_id&&(a.st_session_id=e.params.st_session_id),e.params.st_client_id&&(a.st_client_id=e.params.st_client_id),e.params.project&&(a.project=e.params.project),e.params.lot_id&&(a.lot_id=e.params.lot_id),i||(window.dataLayer=window.dataLayer||[],window.dataLayer.push(a),console.log("dataLayerPush:",a))}};var y=e=>{if(typeof ym<"u"&&typeof window<"u"){let t=process.env.NEXT_PUBLIC_IS_TEST==="true";(typeof process.env.NEXT_PUBLIC_YM_COUNTER>"u"||!process.env.NEXT_PUBLIC_YM_COUNTER)&&console.log("Yandex counter \u043D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D \u0432 \u043A\u043E\u043D\u0444\u0438\u0433\u0435 .env.local"),t||(ym(process.env.NEXT_PUBLIC_YM_COUNTER,"reachGoal",e.target,e.params),console.log("Yandex Metrika "+process.env.NEXT_PUBLIC_YM_COUNTER+" reachGoal: "+e.target,e.params))}else console.log("Yandex Metrika \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430")};var T=async e=>{if(typeof window<"u"){let t=process.env.NEXT_PUBLIC_IS_TEST==="true",n="https://stone.ru/api/analytics/send-event",i=window.location.pathname,o=window.location.href,s={event:e.event,name:e.name,payload:{...e.params,page_path:i,page_url:o}};try{t||(await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)}),console.log("sendAnalyticsToAPI:",s))}catch{console.log("can't sendAnalyticsToAPI")}}else return};var c=e=>{let t=typeof localStorage<"u",n=process.env.NEXT_PUBLIC_IS_TEST==="true";e.params=e.params||{},e.params.st_event_id=l(),e.params.date=new Date().toISOString();let i=String((0,g.getCookie)("_ym_uid"));i&&i!=""&&(e.params.ym_client_id=i);let o=String((0,g.getCookie)("_ga"));o&&o!=""&&(e.params.ga_client_id=o);let s=t?localStorage.getItem("st_client_id"):void 0;s&&s!=""&&(e.params.st_client_id=s);let a=t?localStorage.getItem("st_session_id"):void 0;a&&a!=""&&(e.params.st_session_id=a);let r=t?localStorage.getItem("st_client_hash_id"):void 0;r&&r!=""&&(e.params.st_client_hash_id=r),n||(h({event:e.event,params:e.params}),y({target:e.event,params:e.params}),T({event:e.event,name:e.name,params:e.params}))};var f=require("react");var b=typeof localStorage<"u",M=(e,t=0)=>{let n=3735928559^t,i=1103547991^t;for(let o=0,s;o<e.length;o++)s=e.charCodeAt(o),n=Math.imul(n^s,2654435761),i=Math.imul(i^s,1597334677);return n=Math.imul(n^n>>>16,2246822507)^Math.imul(i^i>>>13,3266489909),i=Math.imul(i^i>>>16,2246822507)^Math.imul(n^n>>>13,3266489909),4294967296*(2097151&i)+(n>>>0)},B=()=>{var e,t;if(typeof window<"u"){let n=(navigator==null?void 0:navigator.userAgent)+"|"+((e=window==null?void 0:window.screen)==null?void 0:e.width)+"|"+((t=window==null?void 0:window.screen)==null?void 0:t.height)+"|"+(navigator==null?void 0:navigator.language)+"|"+(navigator==null?void 0:navigator.cookieEnabled);return M(n)}},I=()=>{let e=B();b&&e&&localStorage.setItem("st_client_hash_id",String(e))};var N=()=>{let e=typeof localStorage<"u",t=!!(e&&localStorage.getItem("st_client_id")),n=!!(e&&localStorage.getItem("st_session_id")),i=p(e?localStorage.getItem("st_client_id"):null);return(!t||i)&&d(),n||(_(),I(),c({event:"session_start",name:"\u041D\u0430\u0447\u0430\u043B\u043E \u0441\u0435\u0441\u0441\u0438\u0438"})),(0,f.useEffect)(()=>{let o=localStorage.getItem("tabCount"),s=o?parseInt(o):0;s<0&&(localStorage.setItem("tabCount",String(0)),s=0),s++,s&&localStorage.setItem("tabCount",String(s));let a=()=>{let r=localStorage.getItem("tabCount");if(r&&typeof window<"u"){let u=String(Number(r)-1),w=window.scrollY,v=document.documentElement.scrollHeight-document.documentElement.clientHeight,C=w/v*100;c({event:"scroll",name:"\u041F\u0435\u0440\u0435\u0445\u043E\u0434 \u0438\u043B\u0438 \u0443\u0445\u043E\u0434 \u0441\u043E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B",params:{scroll_percent:C.toFixed(0)+"%"}}),u==="0"&&(c({event:"session_end",name:"\u041A\u043E\u043D\u0435\u0446 \u0441\u0435\u0441\u0441\u0438\u0438"}),localStorage.setItem("st_session_id",""),localStorage.setItem("st_client_hash_id","")),localStorage.setItem("tabCount",u)}};return window.addEventListener("beforeunload",a),()=>{window.removeEventListener("beforeunload",a)}},[]),(0,f.useEffect)(()=>{let o,s=()=>{clearTimeout(o),o=setTimeout(()=>{localStorage.setItem("st_session_id",""),localStorage.setItem("st_client_hash_id",""),c({event:"timeout_30min",name:"\u041A\u043E\u043D\u0435\u0446 \u0441\u0435\u0441\u0441\u0438\u0438"})},18e5)},a=["mousemove","click","touchstart","scroll","keydown"];return a.forEach(r=>{window.addEventListener(r,s)}),s(),()=>{a.forEach(r=>{window.removeEventListener(r,s)}),clearTimeout(o)}},[]),{}};0&&(module.exports={checkTimeStamp,sendAnalytics,setClientId,setSessionId,useInitializeMetrics});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils/makeUID.ts","../src/utils/sessionClientId.ts","../src/sendAnalytics/sendAnalytics.ts","../src/dataLayerPush/dataLayerPush.ts","../src/ymTarget/ymaTarget.ts","../src/sendAnalyticsToAPI/sendAnalyticsToAPI.ts","../src/hooks/useInitializeMetrics.ts","../src/utils/hashId.ts"],"sourcesContent":["export * from './utils/sessionClientId'\r\nexport * from './sendAnalytics/sendAnalytics'\r\nexport * from './hooks/useInitializeMetrics'","export const makeTimeBasedUID = (): string => {\r\n\treturn (\r\n\t\tString(Date.now()) + String(Math.floor(Math.random() * (999999999 - 100000000 + 1)) + 100000000)\r\n\t)\r\n}","import {makeTimeBasedUID} from './makeUID'\r\n\r\nconst isLocalStorage = typeof localStorage !== 'undefined'\r\n\r\nconst checkTimeStamp = (clientId: string | null) => {\r\n if (!clientId) return false\r\n\r\n const ISOSDate = new Date(clientId.split('_')[0])\r\n const ISOSDateNow = new Date(new Date().toISOString())\r\n\r\n return (\r\n ISOSDateNow.getFullYear() > ISOSDate.getFullYear() &&\r\n ISOSDateNow.getMonth() >= ISOSDate.getMonth() &&\r\n ISOSDateNow.getDate() >= ISOSDate.getDate()\r\n )\r\n}\r\n\r\nconst setSessionId = () => {\r\n const newId = makeTimeBasedUID()\r\n const timeStamp = new Date().toISOString()\r\n if (isLocalStorage) localStorage.setItem('st_session_id', timeStamp + '_' + newId)\r\n}\r\n\r\nconst setClientId = () => {\r\n const newId = makeTimeBasedUID()\r\n const timeStamp = new Date().toISOString()\r\n if (isLocalStorage) localStorage.setItem('st_client_id', timeStamp + '_' + newId)\r\n}\r\n\r\n\r\nexport {setClientId, setSessionId, checkTimeStamp}","import { getCookie } from 'cookies-next'\r\nimport { TAnalyticsData } from '../types/analytics'\r\nimport { dataLayerPush } from '../dataLayerPush/dataLayerPush'\r\nimport { ymTarget } from '../ymTarget/ymaTarget'\r\nimport { sendAnalyticsToAPI } from '../sendAnalyticsToAPI/sendAnalyticsToAPI'\r\nimport { makeTimeBasedUID } from '../utils/makeUID'\r\n\r\nlet isYMReady = false\r\ndeclare let ym: any\r\n\r\nconst waitForYM = (callback: () => void) => {\r\n\tif (isYMReady) {\r\n\t\tcallback()\r\n\t\treturn\r\n\t}\r\n\r\n\tif (typeof window !== 'undefined') {\r\n\t\tif (typeof ym !== 'undefined') {\r\n\t\t\tisYMReady = true\r\n\t\t\tcallback()\r\n\t\t} else {\r\n\t\t\tdocument.addEventListener(\r\n\t\t\t\t'yacounter' + process.env.NEXT_PUBLIC_YM_COUNTER + 'inited',\r\n\t\t\t\t() => {\r\n\t\t\t\t\tisYMReady = true\r\n\t\t\t\t\tcallback()\r\n\t\t\t\t},\r\n\t\t\t\t{ once: true }\r\n\t\t\t)\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport const sendAnalytics = (data: TAnalyticsData, waitForYMFlag: boolean = false) => {\r\n\tconst isLocalStorage = typeof localStorage !== 'undefined'\r\n\tconst isTest = process.env.NEXT_PUBLIC_IS_TEST === 'true'\r\n\r\n\tdata.params = data.params || {}\r\n\tdata.params.st_event_id = makeTimeBasedUID()\r\n\tdata.params.date = new Date().toISOString()\r\n\r\n\tconst _ym_uid = String(getCookie('_ym_uid'))\r\n\tif (_ym_uid && _ym_uid !== '') {\r\n\t\tdata.params.ym_client_id = _ym_uid\r\n\t}\r\n\tconst _ga = String(getCookie('_ga'))\r\n\tif (_ga && _ga !== '') {\r\n\t\tdata.params.ga_client_id = _ga\r\n\t}\r\n\r\n\tconst st_client_id = isLocalStorage ? localStorage.getItem('st_client_id') : undefined\r\n\tif (st_client_id && st_client_id !== '') {\r\n\t\tdata.params.st_client_id = st_client_id\r\n\t}\r\n\r\n\tconst st_session_id = isLocalStorage ? localStorage.getItem('st_session_id') : undefined\r\n\tif (st_session_id && st_session_id !== '') {\r\n\t\tdata.params.st_session_id = st_session_id\r\n\t}\r\n\r\n\tconst st_client_hash_id = isLocalStorage ? localStorage.getItem('st_client_hash_id') : undefined\r\n\tif (st_client_hash_id && st_client_hash_id !== '') {\r\n\t\tdata.params.st_client_hash_id = st_client_hash_id\r\n\t}\r\n\r\n\tif (!isTest) {\r\n\t\tdataLayerPush({ event: data.event, params: data.params })\r\n\t\tymTarget({ target: data.event, params: data.params })\r\n\r\n\t\tif (waitForYMFlag) {\r\n\t\t\twaitForYM(() =>\r\n\t\t\t\tsendAnalyticsToAPI({ event: data.event, name: data.name, params: data.params })\r\n\t\t\t)\r\n\t\t} else {\r\n\t\t\tsendAnalyticsToAPI({ event: data.event, name: data.name, params: data.params })\r\n\t\t}\r\n\t}\r\n}\r\n","import { TAnalyticsVisitParams } from '../types/analytics'\r\n\r\nexport type TGADataLayer = {\r\n\tevent: string\r\n\tparams: TAnalyticsVisitParams\r\n}\r\n\r\nexport type DataLayerPush = {\r\n\tevent: string\r\n\tpage_path: string\r\n\tpage_url: string\r\n\tst_event_id?: string\r\n\tst_client_id?: string\r\n\tst_session_id?: string\r\n\tabTestGroup?: string\r\n\tproject?: string\r\n\tlot_id?: string | number\r\n}\r\n\r\ndeclare global {\r\n\tinterface Window {\r\n\t\tdataLayer: DataLayerPush[]\r\n\t}\r\n}\r\n\r\nexport const dataLayerPush = (data: TGADataLayer) => {\r\n\tif (typeof window !== 'undefined') {\r\n\t\tconst isTest = process.env.NEXT_PUBLIC_IS_TEST === 'true'\r\n\t\tconst pathname = window.location.pathname\r\n\t\tconst href = window.location.href\r\n\t\tconst layerEvent: DataLayerPush = {\r\n\t\t\tevent: data.event,\r\n\t\t\tst_event_id: data.params?.st_event_id,\r\n\t\t\tabTestGroup: data.params?.abTestGroup,\r\n\t\t\tpage_path: pathname,\r\n\t\t\tpage_url: href,\r\n\t\t}\r\n\t\tif (data.params.st_session_id) {\r\n\t\t\tlayerEvent.st_session_id = data.params.st_session_id\r\n\t\t}\r\n\t\tif (data.params.st_client_id) {\r\n\t\t\tlayerEvent.st_client_id = data.params.st_client_id\r\n\t\t}\r\n\t\tif (data.params.project) {\r\n\t\t\tlayerEvent.project = data.params.project\r\n\t\t}\r\n\t\tif (data.params.lot_id) {\r\n\t\t\tlayerEvent.lot_id = data.params.lot_id\r\n\t\t}\r\n\r\n\t\tif (!isTest) {\r\n\t\t\twindow.dataLayer = window.dataLayer || []\r\n\t\t\twindow.dataLayer.push(layerEvent)\r\n\r\n\t\t\tconsole.log('dataLayerPush:', layerEvent)\r\n\t\t}\r\n\t}\r\n}\r\n\r\n","import { TAnalyticsVisitParams } from '../types/analytics'\r\n\r\nexport type TYMTarget = {\r\n\ttarget: string\r\n\tparams: TAnalyticsVisitParams\r\n}\r\n\r\ndeclare let ym: any\r\n/**\r\n * Отправка события в Яндек метрику\r\n * @param data\r\n */\r\nexport const ymTarget = (data: TYMTarget) => {\r\n\tif (typeof ym !== 'undefined' && typeof window !== 'undefined') {\r\n\t\tconst isTest = process.env.NEXT_PUBLIC_IS_TEST === 'true'\r\n\t\tif (\r\n\t\t\ttypeof process.env.NEXT_PUBLIC_YM_COUNTER == 'undefined' ||\r\n\t\t\t!process.env.NEXT_PUBLIC_YM_COUNTER\r\n\t\t) {\r\n\t\t\tconsole.log('Yandex counter не определен в конфиге .env.local')\r\n\t\t}\r\n\t\tif (!isTest) {\r\n\t\t\tym(process.env.NEXT_PUBLIC_YM_COUNTER, 'reachGoal', data.target, data.params)\r\n\r\n\t\t\tconsole.log(\r\n\t\t\t\t'Yandex Metrika ' + process.env.NEXT_PUBLIC_YM_COUNTER + ' reachGoal: ' + data.target,\r\n\t\t\t\tdata.params\r\n\t\t\t)\r\n\t\t}\r\n\t} else {\r\n\t\tconsole.log('Yandex Metrika не найдена')\r\n\t}\r\n}\r\n\r\n","import { TAnalyticsVisitParams } from '../types/analytics'\r\n\r\nexport type TAnalyticsApiData = {\r\n\tevent: string\r\n\tname: string\r\n\tmouse_X?: string\r\n\tmouse_Y?: string\r\n\tparams: TAnalyticsVisitParams\r\n}\r\n\r\nexport const sendAnalyticsToAPI = async (data: TAnalyticsApiData) => {\r\n\tif (typeof window !== 'undefined') {\r\n\t\tconst isTest = process.env.NEXT_PUBLIC_IS_TEST === 'true'\r\n\t\tconst url = `https://stone.ru/api/analytics/send-event`\r\n\t\tconst pathname = window.location.pathname\r\n\t\tconst href = window.location.href\r\n\r\n\t\tconst formData = {\r\n\t\t\tevent: data.event,\r\n\t\t\tname: data.name,\r\n\t\t\tpayload: { ...data.params, ...{ page_path: pathname, page_url: href } },\r\n\t\t}\r\n\t\ttry {\r\n\t\t\tif (!isTest) {\r\n\t\t\t\tawait fetch(url, {\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\theaders: {\r\n\t\t\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\t\t},\r\n\t\t\t\t\tbody: JSON.stringify(formData),\r\n\t\t\t\t})\r\n\t\t\t\tconsole.log('sendAnalyticsToAPI:', formData)\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\tconsole.log(\"can't sendAnalyticsToAPI\")\r\n\t\t}\r\n\t} else return\r\n}\r\n\r\n","import { checkTimeStamp, setClientId, setSessionId } from '../utils/sessionClientId'\r\nimport { sendAnalytics } from '../sendAnalytics/sendAnalytics'\r\nimport { useEffect } from 'react'\r\nimport { setBrowserId } from '../utils/hashId'\r\n\r\nexport const useInitializeMetrics = () => {\r\n\tconst isLocalStorage = typeof localStorage !== 'undefined'\r\n\r\n\tconst isClientId = Boolean(isLocalStorage ? localStorage.getItem('st_client_id') : null)\r\n\tconst isSessionId = Boolean(isLocalStorage ? localStorage.getItem('st_session_id') : null)\r\n\tconst isYearPast = checkTimeStamp(isLocalStorage ? localStorage.getItem('st_client_id') : null)\r\n\r\n\tif (!isClientId || isYearPast) setClientId()\r\n\r\n\tif (!isSessionId) {\r\n\t\tsetSessionId()\r\n\t\tsetBrowserId()\r\n\t\tsendAnalytics(\r\n\t\t\t{\r\n\t\t\t\tevent: 'session_start',\r\n\t\t\t\tname: 'Начало сессии',\r\n\t\t\t},\r\n\t\t\ttrue\r\n\t\t)\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tconst tabCountStorage = localStorage.getItem('tabCount')\r\n\r\n\t\t// При открытии вкладки\r\n\t\tlet tabCount = tabCountStorage ? parseInt(tabCountStorage) : 0\r\n\t\tif (tabCount < 0) {\r\n\t\t\tlocalStorage.setItem('tabCount', String(0))\r\n\t\t\ttabCount = 0\r\n\t\t}\r\n\r\n\t\ttabCount++\r\n\t\tif (tabCount) localStorage.setItem('tabCount', String(tabCount))\r\n\r\n\t\t// Обработчик для закрытия вкладки\r\n\t\tconst handleBeforeUnload = () => {\r\n\t\t\tconst tabCountStorage = localStorage.getItem('tabCount')\r\n\t\t\tif (tabCountStorage && typeof window !== 'undefined') {\r\n\t\t\t\tconst tabCount = String(Number(tabCountStorage) - 1)\r\n\t\t\t\tconst scrollTop = window.scrollY\r\n\t\t\t\tconst scrollHeight =\r\n\t\t\t\t\tdocument.documentElement.scrollHeight - document.documentElement.clientHeight\r\n\t\t\t\tconst scrollPercent = (scrollTop / scrollHeight) * 100\r\n\r\n\t\t\t\tsendAnalytics({\r\n\t\t\t\t\tevent: 'scroll',\r\n\t\t\t\t\tname: 'Переход или уход со страницы',\r\n\t\t\t\t\tparams: { scroll_percent: scrollPercent.toFixed(0) + '%' },\r\n\t\t\t\t})\r\n\r\n\t\t\t\tif (tabCount === '0') {\r\n\t\t\t\t\tsendAnalytics({\r\n\t\t\t\t\t\tevent: 'session_end',\r\n\t\t\t\t\t\tname: 'Конец сессии',\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t\tlocalStorage.setItem('st_session_id', '')\r\n\t\t\t\t\tlocalStorage.setItem('st_client_hash_id', '')\r\n\t\t\t\t}\r\n\t\t\t\tlocalStorage.setItem('tabCount', tabCount)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\twindow.addEventListener('beforeunload', handleBeforeUnload)\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener('beforeunload', handleBeforeUnload)\r\n\t\t}\r\n\t}, [])\r\n\r\n\tuseEffect(() => {\r\n\t\tlet inactivityTimer: NodeJS.Timeout\r\n\r\n\t\tconst resetInactivityTimer = () => {\r\n\t\t\tclearTimeout(inactivityTimer)\r\n\t\t\t// 30 минут\r\n\t\t\tinactivityTimer = setTimeout(() => {\r\n\t\t\t\tlocalStorage.setItem('st_session_id', '')\r\n\t\t\t\tlocalStorage.setItem('st_client_hash_id', '')\r\n\r\n\t\t\t\tsendAnalytics({\r\n\t\t\t\t\tevent: 'timeout_30min',\r\n\t\t\t\t\tname: 'Конец сессии',\r\n\t\t\t\t})\r\n\t\t\t}, 30 * 60 * 1000)\r\n\t\t}\r\n\r\n\t\tconst events = ['mousemove', 'click', 'touchstart', 'scroll', 'keydown']\r\n\t\tevents.forEach((event) => {\r\n\t\t\twindow.addEventListener(event, resetInactivityTimer)\r\n\t\t})\r\n\r\n\t\t// Запускаем таймер при монтировании компонента\r\n\t\tresetInactivityTimer()\r\n\t\treturn () => {\r\n\t\t\tevents.forEach((event) => {\r\n\t\t\t\twindow.removeEventListener(event, resetInactivityTimer)\r\n\t\t\t})\r\n\t\t\tclearTimeout(inactivityTimer)\r\n\t\t}\r\n\t}, [])\r\n\r\n\treturn {}\r\n}\r\n","const isLocalStorage = typeof localStorage !== 'undefined'\r\n\r\nconst getStringHash = (str: string, seed = 0) => {\r\n let h1 = 0xdeadbeef ^ seed,\r\n h2 = 0x41c6ce57 ^ seed\r\n for (let i = 0, ch; i < str.length; i++) {\r\n ch = str.charCodeAt(i)\r\n h1 = Math.imul(h1 ^ ch, 2654435761)\r\n h2 = Math.imul(h2 ^ ch, 1597334677)\r\n }\r\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909)\r\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909)\r\n return 4294967296 * (2097151 & h2) + (h1 >>> 0)\r\n}\r\n\r\nconst getClientHashId = () => {\r\n if (typeof window !== 'undefined') {\r\n\r\n const userBrowserString =\r\n navigator?.userAgent +\r\n '|' +\r\n window?.screen?.width +\r\n '|' +\r\n window?.screen?.height +\r\n '|' +\r\n navigator?.language +\r\n '|' +\r\n navigator?.cookieEnabled\r\n return getStringHash(userBrowserString)\r\n }\r\n}\r\n\r\nconst setBrowserId = () => {\r\n const newId = getClientHashId()\r\n\r\n if (isLocalStorage && newId) localStorage.setItem('st_client_hash_id', String(newId))\r\n}\r\n\r\nexport {getClientHashId, setBrowserId}"],"mappings":"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","names":["src_exports","__export","checkTimeStamp","sendAnalytics","setClientId","setSessionId","useInitializeMetrics","__toCommonJS","makeTimeBasedUID","isLocalStorage","checkTimeStamp","clientId","ISOSDate","ISOSDateNow","setSessionId","newId","makeTimeBasedUID","timeStamp","setClientId","import_cookies_next","dataLayerPush","data","_a","_b","isTest","pathname","href","layerEvent","ymTarget","data","isTest","sendAnalyticsToAPI","data","isTest","url","pathname","href","formData","isYMReady","waitForYM","callback","sendAnalytics","data","waitForYMFlag","isLocalStorage","isTest","makeTimeBasedUID","_ym_uid","_ga","st_client_id","st_session_id","st_client_hash_id","dataLayerPush","ymTarget","sendAnalyticsToAPI","import_react","isLocalStorage","getStringHash","str","seed","h1","h2","i","ch","getClientHashId","_a","_b","userBrowserString","setBrowserId","newId","useInitializeMetrics","isLocalStorage","isClientId","isSessionId","isYearPast","checkTimeStamp","setClientId","setSessionId","setBrowserId","sendAnalytics","tabCountStorage","tabCount","handleBeforeUnload","scrollTop","scrollHeight","scrollPercent","inactivityTimer","resetInactivityTimer","events","event"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/makeUID.ts","../src/utils/sessionClientId.ts","../src/sendAnalytics/sendAnalytics.ts","../src/dataLayerPush/dataLayerPush.ts","../src/ymTarget/ymaTarget.ts","../src/sendAnalyticsToAPI/sendAnalyticsToAPI.ts","../src/hooks/useInitializeMetrics.ts","../src/utils/hashId.ts"],"sourcesContent":["export * from './utils/sessionClientId'\r\nexport * from './sendAnalytics/sendAnalytics'\r\nexport * from './hooks/useInitializeMetrics'","export const makeTimeBasedUID = (): string => {\r\n\treturn (\r\n\t\tString(Date.now()) + String(Math.floor(Math.random() * (999999999 - 100000000 + 1)) + 100000000)\r\n\t)\r\n}","import {makeTimeBasedUID} from './makeUID'\r\n\r\nconst isLocalStorage = typeof localStorage !== 'undefined'\r\n\r\nconst checkTimeStamp = (clientId: string | null) => {\r\n if (!clientId) return false\r\n\r\n const ISOSDate = new Date(clientId.split('_')[0])\r\n const ISOSDateNow = new Date(new Date().toISOString())\r\n\r\n return (\r\n ISOSDateNow.getFullYear() > ISOSDate.getFullYear() &&\r\n ISOSDateNow.getMonth() >= ISOSDate.getMonth() &&\r\n ISOSDateNow.getDate() >= ISOSDate.getDate()\r\n )\r\n}\r\n\r\nconst setSessionId = () => {\r\n const newId = makeTimeBasedUID()\r\n const timeStamp = new Date().toISOString()\r\n if (isLocalStorage) localStorage.setItem('st_session_id', timeStamp + '_' + newId)\r\n}\r\n\r\nconst setClientId = () => {\r\n const newId = makeTimeBasedUID()\r\n const timeStamp = new Date().toISOString()\r\n if (isLocalStorage) localStorage.setItem('st_client_id', timeStamp + '_' + newId)\r\n}\r\n\r\n\r\nexport {setClientId, setSessionId, checkTimeStamp}","import { getCookie } from 'cookies-next'\r\nimport { TAnalyticsData } from '../types/analytics'\r\nimport { dataLayerPush } from '../dataLayerPush/dataLayerPush'\r\nimport { ymTarget } from '../ymTarget/ymaTarget'\r\nimport { sendAnalyticsToAPI } from '../sendAnalyticsToAPI/sendAnalyticsToAPI'\r\nimport { makeTimeBasedUID } from '../utils/makeUID'\r\n\r\nexport const sendAnalytics = (data: TAnalyticsData) => {\r\n\tconst isLocalStorage = typeof localStorage !== 'undefined'\r\n\tconst isTest = process.env.NEXT_PUBLIC_IS_TEST === 'true'\r\n\r\n\tdata.params = data.params || {}\r\n\tdata.params.st_event_id = makeTimeBasedUID()\r\n\tdata.params.date = new Date().toISOString()\r\n\r\n\tconst _ym_uid = String(getCookie('_ym_uid'))\r\n\tif (_ym_uid && _ym_uid != '') {\r\n\t\tdata.params.ym_client_id = _ym_uid\r\n\t}\r\n\tconst _ga = String(getCookie('_ga'))\r\n\tif (_ga && _ga != '') {\r\n\t\tdata.params.ga_client_id = _ga\r\n\t}\r\n\r\n\tconst st_client_id = isLocalStorage ? localStorage.getItem('st_client_id') : undefined\r\n\tif (st_client_id && st_client_id != '') {\r\n\t\tdata.params.st_client_id = st_client_id\r\n\t}\r\n\r\n\tconst st_session_id = isLocalStorage ? localStorage.getItem('st_session_id') : undefined\r\n\tif (st_session_id && st_session_id != '') {\r\n\t\tdata.params.st_session_id = st_session_id\r\n\t}\r\n\r\n\tconst st_client_hash_id = isLocalStorage ? localStorage.getItem('st_client_hash_id') : undefined\r\n\tif (st_client_hash_id && st_client_hash_id != '') {\r\n\t\tdata.params.st_client_hash_id = st_client_hash_id\r\n\t}\r\n\r\n\tif (!isTest) {\r\n\t\tdataLayerPush({ event: data.event, params: data.params })\r\n\t\tymTarget({ target: data.event, params: data.params })\r\n\t\tsendAnalyticsToAPI({ event: data.event, name: data.name, params: data.params })\r\n\t}\r\n}\r\n","import { TAnalyticsVisitParams } from '../types/analytics'\r\n\r\nexport type TGADataLayer = {\r\n\tevent: string\r\n\tparams: TAnalyticsVisitParams\r\n}\r\n\r\nexport type DataLayerPush = {\r\n\tevent: string\r\n\tpage_path: string\r\n\tpage_url: string\r\n\tst_event_id?: string\r\n\tst_client_id?: string\r\n\tst_session_id?: string\r\n\tabTestGroup?: string\r\n\tproject?: string\r\n\tlot_id?: string | number\r\n}\r\n\r\ndeclare global {\r\n\tinterface Window {\r\n\t\tdataLayer: DataLayerPush[]\r\n\t}\r\n}\r\n\r\nexport const dataLayerPush = (data: TGADataLayer) => {\r\n\tif (typeof window !== 'undefined') {\r\n\t\tconst isTest = process.env.NEXT_PUBLIC_IS_TEST === 'true'\r\n\t\tconst pathname = window.location.pathname\r\n\t\tconst href = window.location.href\r\n\t\tconst layerEvent: DataLayerPush = {\r\n\t\t\tevent: data.event,\r\n\t\t\tst_event_id: data.params?.st_event_id,\r\n\t\t\tabTestGroup: data.params?.abTestGroup,\r\n\t\t\tpage_path: pathname,\r\n\t\t\tpage_url: href,\r\n\t\t}\r\n\t\tif (data.params.st_session_id) {\r\n\t\t\tlayerEvent.st_session_id = data.params.st_session_id\r\n\t\t}\r\n\t\tif (data.params.st_client_id) {\r\n\t\t\tlayerEvent.st_client_id = data.params.st_client_id\r\n\t\t}\r\n\t\tif (data.params.project) {\r\n\t\t\tlayerEvent.project = data.params.project\r\n\t\t}\r\n\t\tif (data.params.lot_id) {\r\n\t\t\tlayerEvent.lot_id = data.params.lot_id\r\n\t\t}\r\n\r\n\t\tif (!isTest) {\r\n\t\t\twindow.dataLayer = window.dataLayer || []\r\n\t\t\twindow.dataLayer.push(layerEvent)\r\n\r\n\t\t\tconsole.log('dataLayerPush:', layerEvent)\r\n\t\t}\r\n\t}\r\n}\r\n\r\n","import { TAnalyticsVisitParams } from '../types/analytics'\r\n\r\nexport type TYMTarget = {\r\n\ttarget: string\r\n\tparams: TAnalyticsVisitParams\r\n}\r\n\r\ndeclare let ym: any\r\n/**\r\n * Отправка события в Яндек метрику\r\n * @param data\r\n */\r\nexport const ymTarget = (data: TYMTarget) => {\r\n\tif (typeof ym !== 'undefined' && typeof window !== 'undefined') {\r\n\t\tconst isTest = process.env.NEXT_PUBLIC_IS_TEST === 'true'\r\n\t\tif (\r\n\t\t\ttypeof process.env.NEXT_PUBLIC_YM_COUNTER == 'undefined' ||\r\n\t\t\t!process.env.NEXT_PUBLIC_YM_COUNTER\r\n\t\t) {\r\n\t\t\tconsole.log('Yandex counter не определен в конфиге .env.local')\r\n\t\t}\r\n\t\tif (!isTest) {\r\n\t\t\tym(process.env.NEXT_PUBLIC_YM_COUNTER, 'reachGoal', data.target, data.params)\r\n\r\n\t\t\tconsole.log(\r\n\t\t\t\t'Yandex Metrika ' + process.env.NEXT_PUBLIC_YM_COUNTER + ' reachGoal: ' + data.target,\r\n\t\t\t\tdata.params\r\n\t\t\t)\r\n\t\t}\r\n\t} else {\r\n\t\tconsole.log('Yandex Metrika не найдена')\r\n\t}\r\n}\r\n\r\n","import { TAnalyticsVisitParams } from '../types/analytics'\r\n\r\nexport type TAnalyticsApiData = {\r\n\tevent: string\r\n\tname: string\r\n\tmouse_X?: string\r\n\tmouse_Y?: string\r\n\tparams: TAnalyticsVisitParams\r\n}\r\n\r\nexport const sendAnalyticsToAPI = async (data: TAnalyticsApiData) => {\r\n\tif (typeof window !== 'undefined') {\r\n\t\tconst isTest = process.env.NEXT_PUBLIC_IS_TEST === 'true'\r\n\t\tconst url = `https://stone.ru/api/analytics/send-event`\r\n\t\tconst pathname = window.location.pathname\r\n\t\tconst href = window.location.href\r\n\r\n\t\tconst formData = {\r\n\t\t\tevent: data.event,\r\n\t\t\tname: data.name,\r\n\t\t\tpayload: { ...data.params, ...{ page_path: pathname, page_url: href } },\r\n\t\t}\r\n\t\ttry {\r\n\t\t\tif (!isTest) {\r\n\t\t\t\tawait fetch(url, {\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\theaders: {\r\n\t\t\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\t\t},\r\n\t\t\t\t\tbody: JSON.stringify(formData),\r\n\t\t\t\t})\r\n\t\t\t\tconsole.log('sendAnalyticsToAPI:', formData)\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\tconsole.log(\"can't sendAnalyticsToAPI\")\r\n\t\t}\r\n\t} else return\r\n}\r\n\r\n","import { checkTimeStamp, setClientId, setSessionId } from '../utils/sessionClientId'\r\nimport { sendAnalytics } from '../sendAnalytics/sendAnalytics'\r\nimport { useEffect } from 'react'\r\nimport { setBrowserId } from '../utils/hashId'\r\n\r\nexport const useInitializeMetrics = () => {\r\n\tconst isLocalStorage = typeof localStorage !== 'undefined'\r\n\r\n\tconst isClientId = Boolean(isLocalStorage ? localStorage.getItem('st_client_id') : null)\r\n\tconst isSessionId = Boolean(isLocalStorage ? localStorage.getItem('st_session_id') : null)\r\n\tconst isYearPast = checkTimeStamp(isLocalStorage ? localStorage.getItem('st_client_id') : null)\r\n\r\n\tif (!isClientId || isYearPast) setClientId()\r\n\r\n\tif (!isSessionId) {\r\n\t\tsetSessionId()\r\n\t\tsetBrowserId()\r\n\t\tsendAnalytics({\r\n\t\t\tevent: 'session_start',\r\n\t\t\tname: 'Начало сессии',\r\n\t\t})\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tconst tabCountStorage = localStorage.getItem('tabCount')\r\n\r\n\t\t// При открытии вкладки\r\n\t\tlet tabCount = tabCountStorage ? parseInt(tabCountStorage) : 0\r\n\t\tif (tabCount < 0) {\r\n\t\t\tlocalStorage.setItem('tabCount', String(0))\r\n\t\t\ttabCount = 0\r\n\t\t}\r\n\r\n\t\ttabCount++\r\n\t\tif (tabCount) localStorage.setItem('tabCount', String(tabCount))\r\n\r\n\t\t// Обработчик для закрытия вкладки\r\n\t\tconst handleBeforeUnload = () => {\r\n\t\t\tconst tabCountStorage = localStorage.getItem('tabCount')\r\n\t\t\tif (tabCountStorage && typeof window !== 'undefined') {\r\n\t\t\t\tconst tabCount = String(Number(tabCountStorage) - 1)\r\n\t\t\t\tconst scrollTop = window.scrollY\r\n\t\t\t\tconst scrollHeight =\r\n\t\t\t\t\tdocument.documentElement.scrollHeight - document.documentElement.clientHeight\r\n\t\t\t\tconst scrollPercent = (scrollTop / scrollHeight) * 100\r\n\r\n\t\t\t\tsendAnalytics({\r\n\t\t\t\t\tevent: 'scroll',\r\n\t\t\t\t\tname: 'Переход или уход со страницы',\r\n\t\t\t\t\tparams: { scroll_percent: scrollPercent.toFixed(0) + '%' },\r\n\t\t\t\t})\r\n\r\n\t\t\t\tif (tabCount === '0') {\r\n\t\t\t\t\tsendAnalytics({\r\n\t\t\t\t\t\tevent: 'session_end',\r\n\t\t\t\t\t\tname: 'Конец сессии',\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t\tlocalStorage.setItem('st_session_id', '')\r\n\t\t\t\t\tlocalStorage.setItem('st_client_hash_id', '')\r\n\t\t\t\t}\r\n\t\t\t\tlocalStorage.setItem('tabCount', tabCount)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\twindow.addEventListener('beforeunload', handleBeforeUnload)\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener('beforeunload', handleBeforeUnload)\r\n\t\t}\r\n\t}, [])\r\n\r\n\tuseEffect(() => {\r\n\t\tlet inactivityTimer: NodeJS.Timeout\r\n\r\n\t\tconst resetInactivityTimer = () => {\r\n\t\t\tclearTimeout(inactivityTimer)\r\n\t\t\t// 30 минут\r\n\t\t\tinactivityTimer = setTimeout(() => {\r\n\t\t\t\tlocalStorage.setItem('st_session_id', '')\r\n\t\t\t\tlocalStorage.setItem('st_client_hash_id', '')\r\n\r\n\t\t\t\tsendAnalytics({\r\n\t\t\t\t\tevent: 'timeout_30min',\r\n\t\t\t\t\tname: 'Конец сессии',\r\n\t\t\t\t})\r\n\t\t\t}, 30 * 60 * 1000)\r\n\t\t}\r\n\r\n\t\tconst events = ['mousemove', 'click', 'touchstart', 'scroll', 'keydown']\r\n\t\tevents.forEach((event) => {\r\n\t\t\twindow.addEventListener(event, resetInactivityTimer)\r\n\t\t})\r\n\r\n\t\t// Запускаем таймер при монтировании компонента\r\n\t\tresetInactivityTimer()\r\n\t\treturn () => {\r\n\t\t\tevents.forEach((event) => {\r\n\t\t\t\twindow.removeEventListener(event, resetInactivityTimer)\r\n\t\t\t})\r\n\t\t\tclearTimeout(inactivityTimer)\r\n\t\t}\r\n\t}, [])\r\n\r\n\treturn {}\r\n}\r\n","const isLocalStorage = typeof localStorage !== 'undefined'\r\n\r\nconst getStringHash = (str: string, seed = 0) => {\r\n let h1 = 0xdeadbeef ^ seed,\r\n h2 = 0x41c6ce57 ^ seed\r\n for (let i = 0, ch; i < str.length; i++) {\r\n ch = str.charCodeAt(i)\r\n h1 = Math.imul(h1 ^ ch, 2654435761)\r\n h2 = Math.imul(h2 ^ ch, 1597334677)\r\n }\r\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909)\r\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909)\r\n return 4294967296 * (2097151 & h2) + (h1 >>> 0)\r\n}\r\n\r\nconst getClientHashId = () => {\r\n if (typeof window !== 'undefined') {\r\n\r\n const userBrowserString =\r\n navigator?.userAgent +\r\n '|' +\r\n window?.screen?.width +\r\n '|' +\r\n window?.screen?.height +\r\n '|' +\r\n navigator?.language +\r\n '|' +\r\n navigator?.cookieEnabled\r\n return getStringHash(userBrowserString)\r\n }\r\n}\r\n\r\nconst setBrowserId = () => {\r\n const newId = getClientHashId()\r\n\r\n if (isLocalStorage && newId) localStorage.setItem('st_client_hash_id', String(newId))\r\n}\r\n\r\nexport {getClientHashId, setBrowserId}"],"mappings":"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","names":["src_exports","__export","checkTimeStamp","sendAnalytics","setClientId","setSessionId","useInitializeMetrics","__toCommonJS","makeTimeBasedUID","isLocalStorage","checkTimeStamp","clientId","ISOSDate","ISOSDateNow","setSessionId","newId","makeTimeBasedUID","timeStamp","setClientId","import_cookies_next","dataLayerPush","data","_a","_b","isTest","pathname","href","layerEvent","ymTarget","data","isTest","sendAnalyticsToAPI","data","isTest","url","pathname","href","formData","sendAnalytics","data","isLocalStorage","isTest","makeTimeBasedUID","_ym_uid","_ga","st_client_id","st_session_id","st_client_hash_id","dataLayerPush","ymTarget","sendAnalyticsToAPI","import_react","isLocalStorage","getStringHash","str","seed","h1","h2","i","ch","getClientHashId","_a","_b","userBrowserString","setBrowserId","newId","useInitializeMetrics","isLocalStorage","isClientId","isSessionId","isYearPast","checkTimeStamp","setClientId","setSessionId","setBrowserId","sendAnalytics","tabCountStorage","tabCount","handleBeforeUnload","scrollTop","scrollHeight","scrollPercent","inactivityTimer","resetInactivityTimer","events","event"]}
|