stone-analytics 0.0.11 → 0.0.13
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 +3 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,6 @@ type TAnalyticsData = {
|
|
|
7
7
|
params?: TAnalyticsVisitParams;
|
|
8
8
|
};
|
|
9
9
|
type TAnalyticsVisitParams = {
|
|
10
|
-
abTestGroup?: string;
|
|
11
10
|
st_event_id?: string;
|
|
12
11
|
st_client_id?: string;
|
|
13
12
|
st_session_id?: string;
|
|
@@ -20,4 +19,6 @@ type TAnalyticsVisitParams = {
|
|
|
20
19
|
|
|
21
20
|
declare const sendAnalytics: (data: TAnalyticsData) => void;
|
|
22
21
|
|
|
23
|
-
|
|
22
|
+
declare const useInitializeMetrics: () => {};
|
|
23
|
+
|
|
24
|
+
export { sendAnalytics, setClientId, setSessionId, useInitializeMetrics };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var p=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var E=(e,t)=>{for(var s in t)p(e,s,{get:t[s],enumerable:!0})},P=(e,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of S(t))!C.call(e,o)&&o!==s&&p(e,o,{get:()=>t[o],enumerable:!(n=h(t,o))||n.enumerable});return e};var A=e=>P(p({},"__esModule",{value:!0}),e);var x={};E(x,{sendAnalytics:()=>a,setClientId:()=>f,setSessionId:()=>d,useInitializeMetrics:()=>L});module.exports=A(x);var _=require("cookies-next");var m=()=>String(Date.now())+String(Math.floor(Math.random()*9e8)+1e8);var d=()=>{let e=m();(0,_.setCookie)("st_session_id",e)},f=()=>{let e=m();(0,_.setCookie)("st_client_id",e,{maxAge:31536e3})};var l=require("cookies-next");var u=e=>{var t,s;if(typeof window<"u"){let n=process.env.NEXT_PUBLIC_IS_TEST==="true",o=window.location.pathname,i=window.location.href,r={event:e.event,st_event_id:(t=e.params)==null?void 0:t.st_event_id,abTestGroup:(s=e.params)==null?void 0:s.abTestGroup,page_path:o,page_url:i};e.params.st_session_id&&(r.st_session_id=e.params.st_session_id),e.params.st_client_id&&(r.st_client_id=e.params.st_client_id),e.params.project&&(r.project=e.params.project),e.params.lot_id&&(r.lot_id=e.params.lot_id),n||(window.dataLayer=window.dataLayer||[],window.dataLayer.push(r),console.log("dataLayerPush:",r))}};var T=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 y=async e=>{if(typeof window<"u"){let t=process.env.NEXT_PUBLIC_IS_TEST==="true",s="https://stone.ru/api/analytics/send-event",n=window.location.pathname,o=window.location.href,i={event:e.event,name:e.name,payload:{...e.params,page_path:n,page_url:o}};try{t&&(await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)}),console.log("sendAnalyticsToAPI:",i))}catch{console.log("can't sendAnalyticsToAPI")}}else return};var a=e=>{let t=process.env.NEXT_PUBLIC_IS_TEST==="true";e.params=e.params||{},e.params.st_event_id=m();let s=String((0,l.getCookie)("_ym_uid"));s&&s!=""&&(e.params.ym_client_id=s);let n=String((0,l.getCookie)("_ga"));n&&n!=""&&(e.params.ga_client_id=n);let o=String((0,l.getCookie)("st_client_id"));o&&o!=""&&(e.params.st_client_id=o);let i=String((0,l.getCookie)("st_session_id"));i&&i!=""&&(e.params.st_session_id=i),t||(u({event:e.event,params:e.params}),T({target:e.event,params:e.params}),y({event:e.event,name:e.name,params:e.params}))};var c=require("cookies-next");var g=require("react"),L=()=>{let e=!!(0,c.getCookie)("st_client_id"),t=!!(0,c.getCookie)("st_session_id");return e||f(),t||(d(),a({event:"session_start",name:"\u041D\u0430\u0447\u0430\u043B\u043E \u0441\u0435\u0441\u0441\u0438\u0438"})),(0,g.useEffect)(()=>{let s=localStorage.getItem("tabCount"),n=s?parseInt(s):0;n<0&&(localStorage.setItem("tabCount",String(0)),n=0),n++,n&&localStorage.setItem("tabCount",String(n));let o=()=>{let i=localStorage.getItem("tabCount");if(i&&typeof window<"u"){let r=String(Number(i)-1),v=window.scrollY,w=document.documentElement.scrollHeight-document.documentElement.clientHeight,I=v/w*100;a({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:I.toFixed(0)+"%"}}),r==="0"&&(a({event:"session_end",name:"\u041A\u043E\u043D\u0435\u0446 \u0441\u0435\u0441\u0441\u0438\u0438"}),(0,c.setCookie)("st_session_id",null)),localStorage.setItem("tabCount",r)}};return window.addEventListener("beforeunload",o),()=>{window.removeEventListener("beforeunload",o)}},[]),(0,g.useEffect)(()=>{let s,n=()=>{clearTimeout(s),s=setTimeout(()=>{(0,c.setCookie)("st_session_id",null),a({event:"timeout_30min",name:"\u041A\u043E\u043D\u0435\u0446 \u0441\u0435\u0441\u0441\u0438\u0438"})},18e5)},o=["mousemove","click","touchstart","scroll","keydown"];return o.forEach(i=>{window.addEventListener(i,n)}),n(),()=>{o.forEach(i=>{window.removeEventListener(i,n)}),clearTimeout(s)}},[]),{}};0&&(module.exports={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/setId.ts","../src/utils/makeUID.ts","../src/sendAnalytics/sendAnalytics.ts","../src/dataLayerPush/dataLayerPush.ts","../src/ymTarget/ymaTarget.ts","../src/sendAnalyticsToAPI/sendAnalyticsToAPI.ts"],"sourcesContent":["export * from './utils/setId'\nexport * from './sendAnalytics/sendAnalytics'\n","import { setCookie } from 'cookies-next'\nimport { makeTimeBasedUID } from './makeUID'\n\nexport const setSessionId = (): void => {\n\tconst newId = makeTimeBasedUID()\n\tsetCookie('st_session_id', newId)\n}\n\nexport const setClientId = (): void => {\n\tconst newId = makeTimeBasedUID()\n\t//на год\n\tsetCookie('st_client_id', newId, { maxAge: 31536000 })\n}\n\n","export const makeTimeBasedUID = (): string => {\n\treturn (\n\t\tString(Date.now()) + String(Math.floor(Math.random() * (999999999 - 100000000 + 1)) + 100000000)\n\t)\n}","import { getCookie } from 'cookies-next'\nimport { TAnalyticsData } from '../types/analytics'\nimport { dataLayerPush } from '../dataLayerPush/dataLayerPush'\nimport { ymTarget } from '../ymTarget/ymaTarget'\nimport { sendAnalyticsToAPI } from '../sendAnalyticsToAPI/sendAnalyticsToAPI'\nimport { makeTimeBasedUID } from '../utils/makeUID'\n\nexport const sendAnalytics = (data: TAnalyticsData) => {\n\tconst isTest = process.env.NEXT_PUBLIC_IS_TEST === 'true'\n\n\tdata.params = data.params || {}\n\t//event_id - Уникальный ID события\n\tdata.params.st_event_id = makeTimeBasedUID()\n\n\tconst _ym_uid = String(getCookie('_ym_uid'))\n\tif (_ym_uid && _ym_uid != '') {\n\t\tdata.params.ym_client_id = _ym_uid\n\t}\n\tconst _ga = String(getCookie('_ga'))\n\tif (_ga && _ga != '') {\n\t\tdata.params.ga_client_id = _ga\n\t}\n\tconst st_client_id = String(getCookie('st_client_id'))\n\tif (st_client_id && st_client_id != '') {\n\t\tdata.params.st_client_id = st_client_id\n\t}\n\tconst st_session_id = String(getCookie('st_session_id'))\n\tif (st_session_id && st_session_id != '') {\n\t\tdata.params.st_session_id = st_session_id\n\t}\n\n\tif (!isTest) {\n\t\tdataLayerPush({ event: data.event, params: data.params })\n\t\tymTarget({ target: data.event, params: data.params })\n\t\tsendAnalyticsToAPI({ event: data.event, name: data.name, params: data.params })\n\t}\n}\n\n","import { TAnalyticsVisitParams } from '../types/analytics'\n\nexport type TGADataLayer = {\n\tevent: string\n\tparams: TAnalyticsVisitParams\n}\n\nexport type DataLayerPush = {\n\tevent: string\n\tpage_path: string\n\tpage_url: string\n\tst_event_id?: string\n\tst_client_id?: string\n\tst_session_id?: string\n\tabTestGroup?: string\n\tproject?: string\n\tlot_id?: string | number\n}\n\ndeclare global {\n\tinterface Window {\n\t\tdataLayer: DataLayerPush[]\n\t}\n}\n\nexport const dataLayerPush = (data: TGADataLayer) => {\n\tif (typeof window !== 'undefined') {\n\t\tconst isTest = process.env.NEXT_PUBLIC_IS_TEST === 'true'\n\t\tconst pathname = window.location.pathname\n\t\tconst href = window.location.href\n\t\tconst layerEvent: DataLayerPush = {\n\t\t\tevent: data.event,\n\t\t\tst_event_id: data.params?.st_event_id,\n\t\t\tabTestGroup: data.params?.abTestGroup,\n\t\t\tpage_path: pathname,\n\t\t\tpage_url: href,\n\t\t}\n\t\tif (data.params.st_session_id) {\n\t\t\tlayerEvent.st_session_id = data.params.st_session_id\n\t\t}\n\t\tif (data.params.st_client_id) {\n\t\t\tlayerEvent.st_client_id = data.params.st_client_id\n\t\t}\n\t\tif (data.params.project) {\n\t\t\tlayerEvent.project = data.params.project\n\t\t}\n\t\tif (data.params.lot_id) {\n\t\t\tlayerEvent.lot_id = data.params.lot_id\n\t\t}\n\n\t\tif (!isTest) {\n\t\t\twindow.dataLayer = window.dataLayer || []\n\t\t\twindow.dataLayer.push(layerEvent)\n\n\t\t\tconsole.log('dataLayerPush:', layerEvent)\n\t\t}\n\t}\n}\n\n","import { TAnalyticsVisitParams } from '../types/analytics'\n\nexport type TYMTarget = {\n\ttarget: string\n\tparams: TAnalyticsVisitParams\n}\n\ndeclare let ym: any\n/**\n * Отправка события в Яндек метрику\n * @param data\n */\nexport const ymTarget = (data: TYMTarget) => {\n\tif (typeof ym !== 'undefined' && typeof window !== 'undefined') {\n\t\tconst isTest = process.env.NEXT_PUBLIC_IS_TEST === 'true'\n\t\tif (\n\t\t\ttypeof process.env.NEXT_PUBLIC_YM_COUNTER == 'undefined' ||\n\t\t\t!process.env.NEXT_PUBLIC_YM_COUNTER\n\t\t) {\n\t\t\tconsole.log('Yandex counter не определен в конфиге .env.local')\n\t\t}\n\t\tif (!isTest) {\n\t\t\tym(process.env.NEXT_PUBLIC_YM_COUNTER, 'reachGoal', data.target, data.params)\n\n\t\t\tconsole.log(\n\t\t\t\t'Yandex Metrika ' + process.env.NEXT_PUBLIC_YM_COUNTER + ' reachGoal: ' + data.target,\n\t\t\t\tdata.params\n\t\t\t)\n\t\t}\n\t} else {\n\t\tconsole.log('Yandex Metrika не найдена')\n\t}\n}\n\n","import { TAnalyticsVisitParams } from '../types/analytics'\n\nexport type TAnalyticsApiData = {\n\tevent: string\n\tname: string\n\tmouse_X?: string\n\tmouse_Y?: string\n\tparams: TAnalyticsVisitParams\n}\n\nexport const sendAnalyticsToAPI = async (data: TAnalyticsApiData) => {\n\tif (typeof window !== 'undefined') {\n\t\tconst isNeedSend = process.env.NEXT_PUBLIC_IS_TEST === 'false'\n\t\tconst url = `https://stone.ru/api/analytics/send-event`\n\t\tconst pathname = window.location.pathname\n\t\tconst href = window.location.href\n\n\t\tconst formData = {\n\t\t\tevent: data.event,\n\t\t\tname: data.name,\n\t\t\tpayload: { ...data.params, ...{ page_path: pathname, page_url: href } },\n\t\t}\n\t\ttry {\n\t\t\tif (isNeedSend) {\n\t\t\t\tawait fetch(url, {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t},\n\t\t\t\t\tbody: JSON.stringify(formData),\n\t\t\t\t})\n\t\t\t\tconsole.log('sendAnalyticsToAPI:', formData)\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log(\"can't sendAnalyticsToAPI\")\n\t\t}\n\t} else return\n}\n\n"],"mappings":"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","names":["src_exports","__export","sendAnalytics","setClientId","setSessionId","__toCommonJS","import_cookies_next","makeTimeBasedUID","setSessionId","newId","makeTimeBasedUID","setClientId","import_cookies_next","dataLayerPush","data","_a","_b","isTest","pathname","href","layerEvent","ymTarget","data","isTest","sendAnalyticsToAPI","data","isNeedSend","url","pathname","href","formData","sendAnalytics","data","isTest","makeTimeBasedUID","_ym_uid","_ga","st_client_id","st_session_id","dataLayerPush","ymTarget","sendAnalyticsToAPI"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/setId.ts","../src/utils/makeUID.ts","../src/sendAnalytics/sendAnalytics.ts","../src/dataLayerPush/dataLayerPush.ts","../src/ymTarget/ymaTarget.ts","../src/sendAnalyticsToAPI/sendAnalyticsToAPI.ts","../src/hooks/useInitializeMetrics.ts"],"sourcesContent":["export * from './utils/setId'\nexport * from './sendAnalytics/sendAnalytics'\nexport * from './hooks/useInitializeMetrics'","import { setCookie } from 'cookies-next'\nimport { makeTimeBasedUID } from './makeUID'\n\nexport const setSessionId = (): void => {\n\tconst newId = makeTimeBasedUID()\n\tsetCookie('st_session_id', newId)\n}\n\nexport const setClientId = (): void => {\n\tconst newId = makeTimeBasedUID()\n\t//на год\n\tsetCookie('st_client_id', newId, { maxAge: 31536000 })\n}\n\n","export const makeTimeBasedUID = (): string => {\n\treturn (\n\t\tString(Date.now()) + String(Math.floor(Math.random() * (999999999 - 100000000 + 1)) + 100000000)\n\t)\n}","import { getCookie } from 'cookies-next'\nimport { TAnalyticsData } from '../types/analytics'\nimport { dataLayerPush } from '../dataLayerPush/dataLayerPush'\nimport { ymTarget } from '../ymTarget/ymaTarget'\nimport { sendAnalyticsToAPI } from '../sendAnalyticsToAPI/sendAnalyticsToAPI'\nimport { makeTimeBasedUID } from '../utils/makeUID'\n\nexport const sendAnalytics = (data: TAnalyticsData) => {\n\tconst isTest = process.env.NEXT_PUBLIC_IS_TEST === 'true'\n\n\tdata.params = data.params || {}\n\t//event_id - Уникальный ID события\n\tdata.params.st_event_id = makeTimeBasedUID()\n\n\tconst _ym_uid = String(getCookie('_ym_uid'))\n\tif (_ym_uid && _ym_uid != '') {\n\t\tdata.params.ym_client_id = _ym_uid\n\t}\n\tconst _ga = String(getCookie('_ga'))\n\tif (_ga && _ga != '') {\n\t\tdata.params.ga_client_id = _ga\n\t}\n\tconst st_client_id = String(getCookie('st_client_id'))\n\tif (st_client_id && st_client_id != '') {\n\t\tdata.params.st_client_id = st_client_id\n\t}\n\tconst st_session_id = String(getCookie('st_session_id'))\n\tif (st_session_id && st_session_id != '') {\n\t\tdata.params.st_session_id = st_session_id\n\t}\n\n\tif (!isTest) {\n\t\tdataLayerPush({ event: data.event, params: data.params })\n\t\tymTarget({ target: data.event, params: data.params })\n\t\tsendAnalyticsToAPI({ event: data.event, name: data.name, params: data.params })\n\t}\n}\n\n","import { TAnalyticsVisitParams } from '../types/analytics'\n\nexport type TGADataLayer = {\n\tevent: string\n\tparams: TAnalyticsVisitParams\n}\n\nexport type DataLayerPush = {\n\tevent: string\n\tpage_path: string\n\tpage_url: string\n\tst_event_id?: string\n\tst_client_id?: string\n\tst_session_id?: string\n\tabTestGroup?: string\n\tproject?: string\n\tlot_id?: string | number\n}\n\ndeclare global {\n\tinterface Window {\n\t\tdataLayer: DataLayerPush[]\n\t}\n}\n\nexport const dataLayerPush = (data: TGADataLayer) => {\n\tif (typeof window !== 'undefined') {\n\t\tconst isTest = process.env.NEXT_PUBLIC_IS_TEST === 'true'\n\t\tconst pathname = window.location.pathname\n\t\tconst href = window.location.href\n\t\tconst layerEvent: DataLayerPush = {\n\t\t\tevent: data.event,\n\t\t\tst_event_id: data.params?.st_event_id,\n\t\t\tabTestGroup: data.params?.abTestGroup,\n\t\t\tpage_path: pathname,\n\t\t\tpage_url: href,\n\t\t}\n\t\tif (data.params.st_session_id) {\n\t\t\tlayerEvent.st_session_id = data.params.st_session_id\n\t\t}\n\t\tif (data.params.st_client_id) {\n\t\t\tlayerEvent.st_client_id = data.params.st_client_id\n\t\t}\n\t\tif (data.params.project) {\n\t\t\tlayerEvent.project = data.params.project\n\t\t}\n\t\tif (data.params.lot_id) {\n\t\t\tlayerEvent.lot_id = data.params.lot_id\n\t\t}\n\n\t\tif (!isTest) {\n\t\t\twindow.dataLayer = window.dataLayer || []\n\t\t\twindow.dataLayer.push(layerEvent)\n\n\t\t\tconsole.log('dataLayerPush:', layerEvent)\n\t\t}\n\t}\n}\n\n","import { TAnalyticsVisitParams } from '../types/analytics'\n\nexport type TYMTarget = {\n\ttarget: string\n\tparams: TAnalyticsVisitParams\n}\n\ndeclare let ym: any\n/**\n * Отправка события в Яндек метрику\n * @param data\n */\nexport const ymTarget = (data: TYMTarget) => {\n\tif (typeof ym !== 'undefined' && typeof window !== 'undefined') {\n\t\tconst isTest = process.env.NEXT_PUBLIC_IS_TEST === 'true'\n\t\tif (\n\t\t\ttypeof process.env.NEXT_PUBLIC_YM_COUNTER == 'undefined' ||\n\t\t\t!process.env.NEXT_PUBLIC_YM_COUNTER\n\t\t) {\n\t\t\tconsole.log('Yandex counter не определен в конфиге .env.local')\n\t\t}\n\t\tif (!isTest) {\n\t\t\tym(process.env.NEXT_PUBLIC_YM_COUNTER, 'reachGoal', data.target, data.params)\n\n\t\t\tconsole.log(\n\t\t\t\t'Yandex Metrika ' + process.env.NEXT_PUBLIC_YM_COUNTER + ' reachGoal: ' + data.target,\n\t\t\t\tdata.params\n\t\t\t)\n\t\t}\n\t} else {\n\t\tconsole.log('Yandex Metrika не найдена')\n\t}\n}\n\n","import { TAnalyticsVisitParams } from '../types/analytics'\n\nexport type TAnalyticsApiData = {\n\tevent: string\n\tname: string\n\tmouse_X?: string\n\tmouse_Y?: string\n\tparams: TAnalyticsVisitParams\n}\n\nexport const sendAnalyticsToAPI = async (data: TAnalyticsApiData) => {\n\tif (typeof window !== 'undefined') {\n\t\tconst isNeedSend = process.env.NEXT_PUBLIC_IS_TEST === 'true'\n\t\tconst url = `https://stone.ru/api/analytics/send-event`\n\t\tconst pathname = window.location.pathname\n\t\tconst href = window.location.href\n\n\t\tconst formData = {\n\t\t\tevent: data.event,\n\t\t\tname: data.name,\n\t\t\tpayload: { ...data.params, ...{ page_path: pathname, page_url: href } },\n\t\t}\n\t\ttry {\n\t\t\tif (isNeedSend) {\n\t\t\t\tawait fetch(url, {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t},\n\t\t\t\t\tbody: JSON.stringify(formData),\n\t\t\t\t})\n\t\t\t\tconsole.log('sendAnalyticsToAPI:', formData)\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log(\"can't sendAnalyticsToAPI\")\n\t\t}\n\t} else return\n}\n\n","import { getCookie, setCookie } from 'cookies-next'\r\nimport { setClientId, setSessionId } from '../utils/setId'\r\nimport { sendAnalytics } from '../sendAnalytics/sendAnalytics'\r\nimport { useEffect } from 'react'\r\n\r\nexport const useInitializeMetrics = () => {\r\n\tconst isClientId = Boolean(getCookie('st_client_id'))\r\n\tconst isSessionId = Boolean(getCookie('st_session_id'))\r\n\r\n\tif (!isClientId) setClientId()\r\n\tif (!isSessionId) {\r\n\t\tsetSessionId()\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\tsetCookie('st_session_id', null)\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\tsetCookie('st_session_id', null)\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"],"mappings":"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","names":["src_exports","__export","sendAnalytics","setClientId","setSessionId","useInitializeMetrics","__toCommonJS","import_cookies_next","makeTimeBasedUID","setSessionId","newId","makeTimeBasedUID","setClientId","import_cookies_next","dataLayerPush","data","_a","_b","isTest","pathname","href","layerEvent","ymTarget","data","isTest","sendAnalyticsToAPI","data","isNeedSend","url","pathname","href","formData","sendAnalytics","data","isTest","makeTimeBasedUID","_ym_uid","_ga","st_client_id","st_session_id","dataLayerPush","ymTarget","sendAnalyticsToAPI","import_cookies_next","import_react","useInitializeMetrics","isClientId","isSessionId","setClientId","setSessionId","sendAnalytics","tabCountStorage","tabCount","handleBeforeUnload","scrollTop","scrollHeight","scrollPercent","inactivityTimer","resetInactivityTimer","events","event"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stone-analytics",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"description": "send stanal",
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -22,9 +22,11 @@
|
|
|
22
22
|
"prepublishOnly": "npm run build"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"cookies-next": "^2.1.2"
|
|
25
|
+
"cookies-next": "^2.1.2",
|
|
26
|
+
"react": "18.2.0"
|
|
26
27
|
},
|
|
27
28
|
"devDependencies": {
|
|
29
|
+
"@types/react": "19.0.1",
|
|
28
30
|
"tsup": "^7.0.0",
|
|
29
31
|
"typescript": "^5.8.2"
|
|
30
32
|
},
|