@shware/analytics 2.17.2 → 2.18.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/dist/hooks/{use-screen-view-analytics.cjs → use-app-analytics.cjs} +30 -31
- package/dist/hooks/use-app-analytics.cjs.map +1 -0
- package/dist/hooks/use-app-analytics.d.cts +3 -0
- package/dist/hooks/use-app-analytics.d.ts +3 -0
- package/dist/hooks/use-app-analytics.mjs +50 -0
- package/dist/hooks/use-app-analytics.mjs.map +1 -0
- package/dist/hooks/use-outbound-click-analytics.cjs +58 -0
- package/dist/hooks/use-outbound-click-analytics.cjs.map +1 -0
- package/dist/hooks/use-outbound-click-analytics.d.cts +7 -0
- package/dist/hooks/use-outbound-click-analytics.d.ts +7 -0
- package/dist/hooks/use-outbound-click-analytics.mjs +33 -0
- package/dist/hooks/use-outbound-click-analytics.mjs.map +1 -0
- package/dist/hooks/use-web-analytics.cjs +128 -0
- package/dist/hooks/use-web-analytics.cjs.map +1 -0
- package/dist/hooks/{use-web-session-analytics.d.cts → use-web-analytics.d.cts} +2 -2
- package/dist/hooks/{use-web-session-analytics.d.ts → use-web-analytics.d.ts} +2 -2
- package/dist/hooks/use-web-analytics.mjs +103 -0
- package/dist/hooks/use-web-analytics.mjs.map +1 -0
- package/dist/native/index.cjs +3 -6
- package/dist/native/index.cjs.map +1 -1
- package/dist/native/index.d.cts +1 -2
- package/dist/native/index.d.ts +1 -2
- package/dist/native/index.mjs +2 -4
- package/dist/native/index.mjs.map +1 -1
- package/dist/next/index.cjs +4 -4
- package/dist/next/index.cjs.map +1 -1
- package/dist/next/index.mjs +4 -4
- package/dist/next/index.mjs.map +1 -1
- package/dist/react-router/index.cjs +4 -4
- package/dist/react-router/index.cjs.map +1 -1
- package/dist/react-router/index.mjs +4 -4
- package/dist/react-router/index.mjs.map +1 -1
- package/dist/setup/session.cjs +77 -22
- package/dist/setup/session.cjs.map +1 -1
- package/dist/setup/session.d.cts +27 -9
- package/dist/setup/session.d.ts +27 -9
- package/dist/setup/session.mjs +76 -18
- package/dist/setup/session.mjs.map +1 -1
- package/dist/track/gtag.cjs.map +1 -1
- package/dist/track/gtag.d.cts +1 -2
- package/dist/track/gtag.d.ts +1 -2
- package/dist/track/gtag.mjs.map +1 -1
- package/dist/track/index.cjs +6 -8
- package/dist/track/index.cjs.map +1 -1
- package/dist/track/index.mjs +7 -14
- package/dist/track/index.mjs.map +1 -1
- package/package.json +3 -3
- package/dist/hooks/use-app-session-analytics.cjs +0 -68
- package/dist/hooks/use-app-session-analytics.cjs.map +0 -1
- package/dist/hooks/use-app-session-analytics.d.cts +0 -3
- package/dist/hooks/use-app-session-analytics.d.ts +0 -3
- package/dist/hooks/use-app-session-analytics.mjs +0 -43
- package/dist/hooks/use-app-session-analytics.mjs.map +0 -1
- package/dist/hooks/use-page-view-analytics.cjs +0 -82
- package/dist/hooks/use-page-view-analytics.cjs.map +0 -1
- package/dist/hooks/use-page-view-analytics.d.cts +0 -3
- package/dist/hooks/use-page-view-analytics.d.ts +0 -3
- package/dist/hooks/use-page-view-analytics.mjs +0 -57
- package/dist/hooks/use-page-view-analytics.mjs.map +0 -1
- package/dist/hooks/use-screen-view-analytics.cjs.map +0 -1
- package/dist/hooks/use-screen-view-analytics.d.cts +0 -3
- package/dist/hooks/use-screen-view-analytics.d.ts +0 -3
- package/dist/hooks/use-screen-view-analytics.mjs +0 -51
- package/dist/hooks/use-screen-view-analytics.mjs.map +0 -1
- package/dist/hooks/use-web-session-analytics.cjs +0 -137
- package/dist/hooks/use-web-session-analytics.cjs.map +0 -1
- package/dist/hooks/use-web-session-analytics.mjs +0 -112
- package/dist/hooks/use-web-session-analytics.mjs.map +0 -1
package/dist/native/index.mjs
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// src/native/index.ts
|
|
2
2
|
import { getDeviceId, getDeviceType, getTags, storage } from "./setup.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { useAppSessionAnalytics } from "../hooks/use-app-session-analytics.mjs";
|
|
3
|
+
import { useAppAnalytics } from "../hooks/use-app-analytics.mjs";
|
|
5
4
|
import { getDeterministicFingerprint, getProbabilisticFingerprint } from "./fingerprint.mjs";
|
|
6
5
|
export {
|
|
7
6
|
getDeterministicFingerprint,
|
|
@@ -10,7 +9,6 @@ export {
|
|
|
10
9
|
getProbabilisticFingerprint,
|
|
11
10
|
getTags,
|
|
12
11
|
storage,
|
|
13
|
-
|
|
14
|
-
useScreenViewAnalytics
|
|
12
|
+
useAppAnalytics
|
|
15
13
|
};
|
|
16
14
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/native/index.ts"],"sourcesContent":["export { getDeviceId, getDeviceType, getTags, storage } from './setup';\nexport {
|
|
1
|
+
{"version":3,"sources":["../../src/native/index.ts"],"sourcesContent":["export { getDeviceId, getDeviceType, getTags, storage } from './setup';\nexport { useAppAnalytics } from '../hooks/use-app-analytics';\nexport { getDeterministicFingerprint, getProbabilisticFingerprint } from './fingerprint';\n\nexport type { DeterministicFingerprint, ProbabilisticFingerprint } from './fingerprint';\n"],"mappings":";AAAA,SAAS,aAAa,eAAe,SAAS,eAAe;AAC7D,SAAS,uBAAuB;AAChC,SAAS,6BAA6B,mCAAmC;","names":[]}
|
package/dist/next/index.cjs
CHANGED
|
@@ -38,8 +38,8 @@ var import_navigation = require("next/navigation");
|
|
|
38
38
|
var import_script = __toESM(require("next/script"), 1);
|
|
39
39
|
var import_web_vitals = require("next/web-vitals");
|
|
40
40
|
var import_use_click_id_persistence = require("../hooks/use-click-id-persistence.cjs");
|
|
41
|
-
var
|
|
42
|
-
var
|
|
41
|
+
var import_use_outbound_click_analytics = require("../hooks/use-outbound-click-analytics.cjs");
|
|
42
|
+
var import_use_web_analytics = require("../hooks/use-web-analytics.cjs");
|
|
43
43
|
var import_track = require("../track/index.cjs");
|
|
44
44
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
45
45
|
function Analytics({
|
|
@@ -55,8 +55,8 @@ function Analytics({
|
|
|
55
55
|
}) {
|
|
56
56
|
(0, import_use_click_id_persistence.useClickIdPersistence)();
|
|
57
57
|
const pathname = (0, import_navigation.usePathname)();
|
|
58
|
-
(0,
|
|
59
|
-
(0,
|
|
58
|
+
(0, import_use_web_analytics.useWebAnalytics)(pathname);
|
|
59
|
+
(0, import_use_outbound_click_analytics.useOutboundClickAnalytics)();
|
|
60
60
|
(0, import_web_vitals.useReportWebVitals)((metric) => {
|
|
61
61
|
if (!reportWebVitals) return;
|
|
62
62
|
const properties = {
|
package/dist/next/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/next/index.tsx"],"sourcesContent":["'use client';\n\nimport { usePathname } from 'next/navigation';\nimport Script from 'next/script';\nimport { useReportWebVitals } from 'next/web-vitals';\nimport { useClickIdPersistence } from '../hooks/use-click-id-persistence';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/next/index.tsx"],"sourcesContent":["'use client';\n\nimport { usePathname } from 'next/navigation';\nimport Script from 'next/script';\nimport { useReportWebVitals } from 'next/web-vitals';\nimport { useClickIdPersistence } from '../hooks/use-click-id-persistence';\nimport { useOutboundClickAnalytics } from '../hooks/use-outbound-click-analytics';\nimport { useWebAnalytics } from '../hooks/use-web-analytics';\nimport { track } from '../track/index';\nimport type { PixelId as MetaPixelId } from '../track/fbq';\nimport type { GaId, GtmId } from '../track/gtag';\nimport type { PixelId as RedditPixelId } from '../track/rdt';\n\ntype HotjarId = `${number}`;\n\ninterface Props {\n gaId?: GaId;\n gtmId?: GtmId;\n hotjarId?: HotjarId;\n metaPixelId?: MetaPixelId;\n redditPixelId?: RedditPixelId;\n linkedInPartnerId?: `${number}`;\n facebookAppId?: string;\n nonce?: string;\n debugMode?: boolean;\n reportWebVitals?: boolean;\n}\n\nexport function Analytics({\n gaId,\n nonce,\n debugMode,\n metaPixelId,\n hotjarId,\n redditPixelId,\n linkedInPartnerId,\n facebookAppId,\n reportWebVitals = true,\n}: Props) {\n useClickIdPersistence();\n\n const pathname = usePathname();\n useWebAnalytics(pathname);\n useOutboundClickAnalytics();\n\n useReportWebVitals((metric) => {\n if (!reportWebVitals) return;\n const properties = {\n id: metric.id,\n rating: metric.rating,\n value: metric.value,\n delta: metric.delta,\n navigation_type: metric.navigationType,\n non_interaction: true, // avoids affecting bounce rate.\n };\n track(metric.name, properties);\n });\n\n return (\n <>\n {facebookAppId && <meta property=\"fb:app_id\" content={facebookAppId} />}\n {gaId && (\n <>\n <Script\n id=\"gtag\"\n nonce={nonce}\n src={`https://www.googletagmanager.com/gtag/js?id=${gaId}`}\n />\n <Script\n nonce={nonce}\n id=\"gtag-init\"\n dangerouslySetInnerHTML={{\n __html: `\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', '${gaId}'${debugMode ? \" ,{ 'debug_mode': true }\" : ''});\n `,\n }}\n />\n </>\n )}\n {metaPixelId && (\n <Script\n id=\"meta-pixel\"\n strategy=\"afterInteractive\"\n dangerouslySetInnerHTML={{\n __html: `\n !(function (f, b, e, v, n, t, s) {\n if (f.fbq) return;\n n = f.fbq = function () {\n n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments);\n };\n if (!f._fbq) f._fbq = n;\n n.push = n;\n n.loaded = !0;\n n.version = '2.0';\n n.queue = [];\n t = b.createElement(e);\n t.async = !0;\n t.src = v;\n s = b.getElementsByTagName(e)[0];\n s.parentNode.insertBefore(t, s);\n })(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');\n fbq('init', '${metaPixelId}');\n fbq('track', 'PageView');`,\n }}\n />\n )}\n {redditPixelId && (\n <Script\n id=\"reddit-pixel\"\n strategy=\"afterInteractive\"\n dangerouslySetInnerHTML={{\n __html: `\n !function(w,d) {\n if(!w.rdt) {\n var p = w.rdt = function() {\n p.sendEvent ? p.sendEvent.apply(p,arguments) : p.callQueue.push(arguments)\n };\n p.callQueue = [];\n var t = d.createElement(\"script\");\n t.src = \"https://www.redditstatic.com/ads/pixel.js\";\n t.async = !0;\n var s = d.getElementsByTagName(\"script\")[0];\n s.parentNode.insertBefore(t,s)\n }\n }(window, document);\n rdt('init', '${redditPixelId}');\n rdt('track', 'PageVisit');`,\n }}\n />\n )}\n {linkedInPartnerId && (\n <Script\n id=\"linkedin-insight-tag\"\n strategy=\"afterInteractive\"\n dangerouslySetInnerHTML={{\n __html: `\n _linkedin_partner_id = \"${linkedInPartnerId}\";\n window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];\n window._linkedin_data_partner_ids.push(_linkedin_partner_id);\n\n (function(l) {\n if (!l){\n window.lintrk = function(a,b){ \n window.lintrk.q.push([a,b])\n };\n window.lintrk.q=[]\n }\n var s = document.getElementsByTagName(\"script\")[0];\n var b = document.createElement(\"script\");\n b.type = \"text/javascript\";b.async = true;\n b.src = \"https://snap.licdn.com/li.lms-analytics/insight.min.js\";\n s.parentNode.insertBefore(b, s);\n })(window.lintrk);\n `,\n }}\n />\n )}\n {hotjarId && (\n <Script\n id=\"hotjar\"\n strategy=\"afterInteractive\"\n dangerouslySetInnerHTML={{\n __html: `\n (function(h,o,t,j,a,r){\n h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};\n h._hjSettings={hjid:${hotjarId},hjsv:6};\n a=o.getElementsByTagName('head')[0];\n r=o.createElement('script');r.async=1;\n r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;\n a.appendChild(r);\n })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');\n `,\n }}\n />\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,wBAA4B;AAC5B,oBAAmB;AACnB,wBAAmC;AACnC,sCAAsC;AACtC,0CAA0C;AAC1C,+BAAgC;AAChC,mBAAsB;AAoDE;AAhCjB,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AACpB,GAAU;AACR,6DAAsB;AAEtB,QAAM,eAAW,+BAAY;AAC7B,gDAAgB,QAAQ;AACxB,qEAA0B;AAE1B,4CAAmB,CAAC,WAAW;AAC7B,QAAI,CAAC,gBAAiB;AACtB,UAAM,aAAa;AAAA,MACjB,IAAI,OAAO;AAAA,MACX,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,iBAAiB,OAAO;AAAA,MACxB,iBAAiB;AAAA;AAAA,IACnB;AACA,4BAAM,OAAO,MAAM,UAAU;AAAA,EAC/B,CAAC;AAED,SACE,4EACG;AAAA,qBAAiB,4CAAC,UAAK,UAAS,aAAY,SAAS,eAAe;AAAA,IACpE,QACC,4EACE;AAAA;AAAA,QAAC,cAAAA;AAAA,QAAA;AAAA,UACC,IAAG;AAAA,UACH;AAAA,UACA,KAAK,+CAA+C,IAAI;AAAA;AAAA,MAC1D;AAAA,MACA;AAAA,QAAC,cAAAA;AAAA,QAAA;AAAA,UACC;AAAA,UACA,IAAG;AAAA,UACH,yBAAyB;AAAA,YACvB,QAAQ;AAAA;AAAA;AAAA;AAAA,gCAIU,IAAI,IAAI,YAAY,6BAA6B,EAAE;AAAA;AAAA,UAEvE;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IAED,eACC;AAAA,MAAC,cAAAA;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH,UAAS;AAAA,QACT,yBAAyB;AAAA,UACvB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAiBO,WAAW;AAAA;AAAA,QAE5B;AAAA;AAAA,IACF;AAAA,IAED,iBACC;AAAA,MAAC,cAAAA;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH,UAAS;AAAA,QACT,yBAAyB;AAAA,UACvB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAcO,aAAa;AAAA;AAAA,QAE9B;AAAA;AAAA,IACF;AAAA,IAED,qBACC;AAAA,MAAC,cAAAA;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH,UAAS;AAAA,QACT,yBAAyB;AAAA,UACvB,QAAQ;AAAA,wCACoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAkB/C;AAAA;AAAA,IACF;AAAA,IAED,YACC;AAAA,MAAC,cAAAA;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH,UAAS;AAAA,QACT,yBAAyB;AAAA,UACvB,QAAQ;AAAA;AAAA;AAAA,oCAGgB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOlC;AAAA;AAAA,IACF;AAAA,KAEJ;AAEJ;","names":["Script"]}
|
package/dist/next/index.mjs
CHANGED
|
@@ -5,8 +5,8 @@ import { usePathname } from "next/navigation";
|
|
|
5
5
|
import Script from "next/script";
|
|
6
6
|
import { useReportWebVitals } from "next/web-vitals";
|
|
7
7
|
import { useClickIdPersistence } from "../hooks/use-click-id-persistence.mjs";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { useOutboundClickAnalytics } from "../hooks/use-outbound-click-analytics.mjs";
|
|
9
|
+
import { useWebAnalytics } from "../hooks/use-web-analytics.mjs";
|
|
10
10
|
import { track } from "../track/index.mjs";
|
|
11
11
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
12
12
|
function Analytics({
|
|
@@ -22,8 +22,8 @@ function Analytics({
|
|
|
22
22
|
}) {
|
|
23
23
|
useClickIdPersistence();
|
|
24
24
|
const pathname = usePathname();
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
useWebAnalytics(pathname);
|
|
26
|
+
useOutboundClickAnalytics();
|
|
27
27
|
useReportWebVitals((metric) => {
|
|
28
28
|
if (!reportWebVitals) return;
|
|
29
29
|
const properties = {
|
package/dist/next/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/next/index.tsx"],"sourcesContent":["'use client';\n\nimport { usePathname } from 'next/navigation';\nimport Script from 'next/script';\nimport { useReportWebVitals } from 'next/web-vitals';\nimport { useClickIdPersistence } from '../hooks/use-click-id-persistence';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/next/index.tsx"],"sourcesContent":["'use client';\n\nimport { usePathname } from 'next/navigation';\nimport Script from 'next/script';\nimport { useReportWebVitals } from 'next/web-vitals';\nimport { useClickIdPersistence } from '../hooks/use-click-id-persistence';\nimport { useOutboundClickAnalytics } from '../hooks/use-outbound-click-analytics';\nimport { useWebAnalytics } from '../hooks/use-web-analytics';\nimport { track } from '../track/index';\nimport type { PixelId as MetaPixelId } from '../track/fbq';\nimport type { GaId, GtmId } from '../track/gtag';\nimport type { PixelId as RedditPixelId } from '../track/rdt';\n\ntype HotjarId = `${number}`;\n\ninterface Props {\n gaId?: GaId;\n gtmId?: GtmId;\n hotjarId?: HotjarId;\n metaPixelId?: MetaPixelId;\n redditPixelId?: RedditPixelId;\n linkedInPartnerId?: `${number}`;\n facebookAppId?: string;\n nonce?: string;\n debugMode?: boolean;\n reportWebVitals?: boolean;\n}\n\nexport function Analytics({\n gaId,\n nonce,\n debugMode,\n metaPixelId,\n hotjarId,\n redditPixelId,\n linkedInPartnerId,\n facebookAppId,\n reportWebVitals = true,\n}: Props) {\n useClickIdPersistence();\n\n const pathname = usePathname();\n useWebAnalytics(pathname);\n useOutboundClickAnalytics();\n\n useReportWebVitals((metric) => {\n if (!reportWebVitals) return;\n const properties = {\n id: metric.id,\n rating: metric.rating,\n value: metric.value,\n delta: metric.delta,\n navigation_type: metric.navigationType,\n non_interaction: true, // avoids affecting bounce rate.\n };\n track(metric.name, properties);\n });\n\n return (\n <>\n {facebookAppId && <meta property=\"fb:app_id\" content={facebookAppId} />}\n {gaId && (\n <>\n <Script\n id=\"gtag\"\n nonce={nonce}\n src={`https://www.googletagmanager.com/gtag/js?id=${gaId}`}\n />\n <Script\n nonce={nonce}\n id=\"gtag-init\"\n dangerouslySetInnerHTML={{\n __html: `\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', '${gaId}'${debugMode ? \" ,{ 'debug_mode': true }\" : ''});\n `,\n }}\n />\n </>\n )}\n {metaPixelId && (\n <Script\n id=\"meta-pixel\"\n strategy=\"afterInteractive\"\n dangerouslySetInnerHTML={{\n __html: `\n !(function (f, b, e, v, n, t, s) {\n if (f.fbq) return;\n n = f.fbq = function () {\n n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments);\n };\n if (!f._fbq) f._fbq = n;\n n.push = n;\n n.loaded = !0;\n n.version = '2.0';\n n.queue = [];\n t = b.createElement(e);\n t.async = !0;\n t.src = v;\n s = b.getElementsByTagName(e)[0];\n s.parentNode.insertBefore(t, s);\n })(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');\n fbq('init', '${metaPixelId}');\n fbq('track', 'PageView');`,\n }}\n />\n )}\n {redditPixelId && (\n <Script\n id=\"reddit-pixel\"\n strategy=\"afterInteractive\"\n dangerouslySetInnerHTML={{\n __html: `\n !function(w,d) {\n if(!w.rdt) {\n var p = w.rdt = function() {\n p.sendEvent ? p.sendEvent.apply(p,arguments) : p.callQueue.push(arguments)\n };\n p.callQueue = [];\n var t = d.createElement(\"script\");\n t.src = \"https://www.redditstatic.com/ads/pixel.js\";\n t.async = !0;\n var s = d.getElementsByTagName(\"script\")[0];\n s.parentNode.insertBefore(t,s)\n }\n }(window, document);\n rdt('init', '${redditPixelId}');\n rdt('track', 'PageVisit');`,\n }}\n />\n )}\n {linkedInPartnerId && (\n <Script\n id=\"linkedin-insight-tag\"\n strategy=\"afterInteractive\"\n dangerouslySetInnerHTML={{\n __html: `\n _linkedin_partner_id = \"${linkedInPartnerId}\";\n window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];\n window._linkedin_data_partner_ids.push(_linkedin_partner_id);\n\n (function(l) {\n if (!l){\n window.lintrk = function(a,b){ \n window.lintrk.q.push([a,b])\n };\n window.lintrk.q=[]\n }\n var s = document.getElementsByTagName(\"script\")[0];\n var b = document.createElement(\"script\");\n b.type = \"text/javascript\";b.async = true;\n b.src = \"https://snap.licdn.com/li.lms-analytics/insight.min.js\";\n s.parentNode.insertBefore(b, s);\n })(window.lintrk);\n `,\n }}\n />\n )}\n {hotjarId && (\n <Script\n id=\"hotjar\"\n strategy=\"afterInteractive\"\n dangerouslySetInnerHTML={{\n __html: `\n (function(h,o,t,j,a,r){\n h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};\n h._hjSettings={hjid:${hotjarId},hjsv:6};\n a=o.getElementsByTagName('head')[0];\n r=o.createElement('script');r.async=1;\n r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;\n a.appendChild(r);\n })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');\n `,\n }}\n />\n )}\n </>\n );\n}\n"],"mappings":";;;AAEA,SAAS,mBAAmB;AAC5B,OAAO,YAAY;AACnB,SAAS,0BAA0B;AACnC,SAAS,6BAA6B;AACtC,SAAS,iCAAiC;AAC1C,SAAS,uBAAuB;AAChC,SAAS,aAAa;AAoDE,SAEhB,UAFgB,KAEhB,YAFgB;AAhCjB,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AACpB,GAAU;AACR,wBAAsB;AAEtB,QAAM,WAAW,YAAY;AAC7B,kBAAgB,QAAQ;AACxB,4BAA0B;AAE1B,qBAAmB,CAAC,WAAW;AAC7B,QAAI,CAAC,gBAAiB;AACtB,UAAM,aAAa;AAAA,MACjB,IAAI,OAAO;AAAA,MACX,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,iBAAiB,OAAO;AAAA,MACxB,iBAAiB;AAAA;AAAA,IACnB;AACA,UAAM,OAAO,MAAM,UAAU;AAAA,EAC/B,CAAC;AAED,SACE,iCACG;AAAA,qBAAiB,oBAAC,UAAK,UAAS,aAAY,SAAS,eAAe;AAAA,IACpE,QACC,iCACE;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,IAAG;AAAA,UACH;AAAA,UACA,KAAK,+CAA+C,IAAI;AAAA;AAAA,MAC1D;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,IAAG;AAAA,UACH,yBAAyB;AAAA,YACvB,QAAQ;AAAA;AAAA;AAAA;AAAA,gCAIU,IAAI,IAAI,YAAY,6BAA6B,EAAE;AAAA;AAAA,UAEvE;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IAED,eACC;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,UAAS;AAAA,QACT,yBAAyB;AAAA,UACvB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAiBO,WAAW;AAAA;AAAA,QAE5B;AAAA;AAAA,IACF;AAAA,IAED,iBACC;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,UAAS;AAAA,QACT,yBAAyB;AAAA,UACvB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAcO,aAAa;AAAA;AAAA,QAE9B;AAAA;AAAA,IACF;AAAA,IAED,qBACC;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,UAAS;AAAA,QACT,yBAAyB;AAAA,UACvB,QAAQ;AAAA,wCACoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAkB/C;AAAA;AAAA,IACF;AAAA,IAED,YACC;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,UAAS;AAAA,QACT,yBAAyB;AAAA,UACvB,QAAQ;AAAA;AAAA;AAAA,oCAGgB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOlC;AAAA;AAAA,IACF;AAAA,KAEJ;AAEJ;","names":[]}
|
|
@@ -27,8 +27,8 @@ var import_react = require("react");
|
|
|
27
27
|
var import_react_router = require("react-router");
|
|
28
28
|
var import_web_vitals = require("web-vitals");
|
|
29
29
|
var import_use_click_id_persistence = require("../hooks/use-click-id-persistence.cjs");
|
|
30
|
-
var
|
|
31
|
-
var
|
|
30
|
+
var import_use_outbound_click_analytics = require("../hooks/use-outbound-click-analytics.cjs");
|
|
31
|
+
var import_use_web_analytics = require("../hooks/use-web-analytics.cjs");
|
|
32
32
|
var import_track = require("../track/index.cjs");
|
|
33
33
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
34
34
|
function useReportWebVitals(reportWebVitalsFn) {
|
|
@@ -53,8 +53,8 @@ function Analytics({
|
|
|
53
53
|
}) {
|
|
54
54
|
(0, import_use_click_id_persistence.useClickIdPersistence)();
|
|
55
55
|
const { pathname } = (0, import_react_router.useLocation)();
|
|
56
|
-
(0,
|
|
57
|
-
(0,
|
|
56
|
+
(0, import_use_web_analytics.useWebAnalytics)(pathname);
|
|
57
|
+
(0, import_use_outbound_click_analytics.useOutboundClickAnalytics)();
|
|
58
58
|
useReportWebVitals((metric) => {
|
|
59
59
|
if (!reportWebVitals) return;
|
|
60
60
|
const properties = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/react-router/index.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { useLocation } from 'react-router';\nimport { type Metric, onCLS, onFCP, onINP, onLCP, onTTFB } from 'web-vitals';\nimport { useClickIdPersistence } from '../hooks/use-click-id-persistence';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/react-router/index.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { useLocation } from 'react-router';\nimport { type Metric, onCLS, onFCP, onINP, onLCP, onTTFB } from 'web-vitals';\nimport { useClickIdPersistence } from '../hooks/use-click-id-persistence';\nimport { useOutboundClickAnalytics } from '../hooks/use-outbound-click-analytics';\nimport { useWebAnalytics } from '../hooks/use-web-analytics';\nimport { track } from '../track/index';\nimport type { PixelId as MetaPixelId } from '../track/fbq';\nimport type { GaId, GtmId } from '../track/gtag';\nimport type { PixelId as RedditPixelId } from '../track/rdt';\n\ntype HotjarId = `${number}`;\n\nfunction useReportWebVitals(reportWebVitalsFn: (metric: Metric) => void) {\n useEffect(() => {\n onCLS(reportWebVitalsFn);\n onLCP(reportWebVitalsFn);\n onINP(reportWebVitalsFn);\n onFCP(reportWebVitalsFn);\n onTTFB(reportWebVitalsFn);\n }, [reportWebVitalsFn]);\n}\n\ninterface Props {\n gaId?: GaId;\n gtmId?: GtmId;\n metaPixelId?: MetaPixelId;\n redditPixelId?: RedditPixelId;\n linkedInPartnerId?: `${number}`;\n hotjarId?: HotjarId;\n facebookAppId?: string;\n nonce?: string;\n debugMode?: boolean;\n reportWebVitals?: boolean;\n}\n\nexport function Analytics({\n gaId,\n nonce,\n debugMode,\n metaPixelId,\n redditPixelId,\n linkedInPartnerId,\n hotjarId,\n facebookAppId,\n reportWebVitals = true,\n}: Props) {\n useClickIdPersistence();\n\n const { pathname } = useLocation();\n useWebAnalytics(pathname);\n useOutboundClickAnalytics();\n\n useReportWebVitals((metric) => {\n if (!reportWebVitals) return;\n const properties = {\n id: metric.id,\n rating: metric.rating,\n value: metric.value,\n delta: metric.delta,\n navigation_type: metric.navigationType,\n non_interaction: true, // avoids affecting bounce rate.\n };\n track(metric.name, properties);\n });\n\n return (\n <>\n {facebookAppId && <meta property=\"fb:app_id\" content={facebookAppId} />}\n {gaId && (\n <>\n <script\n async\n id=\"gtag\"\n nonce={nonce}\n src={`https://www.googletagmanager.com/gtag/js?id=${gaId}`}\n />\n <script\n async\n nonce={nonce}\n id=\"gtag-init\"\n dangerouslySetInnerHTML={{\n __html: `\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', '${gaId}'${debugMode ? \" ,{ 'debug_mode': true }\" : ''});\n `,\n }}\n />\n </>\n )}\n {metaPixelId && (\n <script\n async\n id=\"meta-pixel\"\n dangerouslySetInnerHTML={{\n __html: `\n !(function (f, b, e, v, n, t, s) {\n if (f.fbq) return;\n n = f.fbq = function () {\n n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments);\n };\n if (!f._fbq) f._fbq = n;\n n.push = n;\n n.loaded = !0;\n n.version = '2.0';\n n.queue = [];\n t = b.createElement(e);\n t.async = !0;\n t.src = v;\n s = b.getElementsByTagName(e)[0];\n s.parentNode.insertBefore(t, s);\n })(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');\n fbq('init', '${metaPixelId}');\n fbq('track', 'PageView');`,\n }}\n />\n )}\n {redditPixelId && (\n <script\n async\n id=\"reddit-pixel\"\n dangerouslySetInnerHTML={{\n __html: `\n !function(w,d) {\n if(!w.rdt) {\n var p = w.rdt = function() {\n p.sendEvent ? p.sendEvent.apply(p,arguments) : p.callQueue.push(arguments)\n };\n p.callQueue = [];\n var t = d.createElement(\"script\");\n t.src = \"https://www.redditstatic.com/ads/pixel.js\";\n t.async = !0;\n var s = d.getElementsByTagName(\"script\")[0];\n s.parentNode.insertBefore(t,s)\n }\n }(window, document);\n rdt('init', '${redditPixelId}');\n rdt('track', 'PageVisit');`,\n }}\n />\n )}\n {linkedInPartnerId && (\n <script\n async\n id=\"linkedin-insight-tag\"\n dangerouslySetInnerHTML={{\n __html: `\n _linkedin_partner_id = \"${linkedInPartnerId}\";\n window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];\n window._linkedin_data_partner_ids.push(_linkedin_partner_id);\n\n (function(l) {\n if (!l){\n window.lintrk = function(a,b){\n window.lintrk.q.push([a,b])\n };\n window.lintrk.q=[]\n }\n var s = document.getElementsByTagName(\"script\")[0];\n var b = document.createElement(\"script\");\n b.type = \"text/javascript\";b.async = true;\n b.src = \"https://snap.licdn.com/li.lms-analytics/insight.min.js\";\n s.parentNode.insertBefore(b, s);\n })(window.lintrk);\n `,\n }}\n />\n )}\n {hotjarId && (\n <script\n async\n id=\"hotjar\"\n dangerouslySetInnerHTML={{\n __html: `\n (function(h,o,t,j,a,r){\n h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};\n h._hjSettings={hjid:${hotjarId},hjsv:6};\n a=o.getElementsByTagName('head')[0];\n r=o.createElement('script');r.async=1;\n r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;\n a.appendChild(r);\n })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');\n `,\n }}\n />\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA0B;AAC1B,0BAA4B;AAC5B,wBAAgE;AAChE,sCAAsC;AACtC,0CAA0C;AAC1C,+BAAgC;AAChC,mBAAsB;AA8DE;AAvDxB,SAAS,mBAAmB,mBAA6C;AACvE,8BAAU,MAAM;AACd,iCAAM,iBAAiB;AACvB,iCAAM,iBAAiB;AACvB,iCAAM,iBAAiB;AACvB,iCAAM,iBAAiB;AACvB,kCAAO,iBAAiB;AAAA,EAC1B,GAAG,CAAC,iBAAiB,CAAC;AACxB;AAeO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AACpB,GAAU;AACR,6DAAsB;AAEtB,QAAM,EAAE,SAAS,QAAI,iCAAY;AACjC,gDAAgB,QAAQ;AACxB,qEAA0B;AAE1B,qBAAmB,CAAC,WAAW;AAC7B,QAAI,CAAC,gBAAiB;AACtB,UAAM,aAAa;AAAA,MACjB,IAAI,OAAO;AAAA,MACX,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,iBAAiB,OAAO;AAAA,MACxB,iBAAiB;AAAA;AAAA,IACnB;AACA,4BAAM,OAAO,MAAM,UAAU;AAAA,EAC/B,CAAC;AAED,SACE,4EACG;AAAA,qBAAiB,4CAAC,UAAK,UAAS,aAAY,SAAS,eAAe;AAAA,IACpE,QACC,4EACE;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAK;AAAA,UACL,IAAG;AAAA,UACH;AAAA,UACA,KAAK,+CAA+C,IAAI;AAAA;AAAA,MAC1D;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,OAAK;AAAA,UACL;AAAA,UACA,IAAG;AAAA,UACH,yBAAyB;AAAA,YACvB,QAAQ;AAAA;AAAA;AAAA;AAAA,gCAIU,IAAI,IAAI,YAAY,6BAA6B,EAAE;AAAA;AAAA,UAEvE;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IAED,eACC;AAAA,MAAC;AAAA;AAAA,QACC,OAAK;AAAA,QACL,IAAG;AAAA,QACH,yBAAyB;AAAA,UACvB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAiBO,WAAW;AAAA;AAAA,QAE5B;AAAA;AAAA,IACF;AAAA,IAED,iBACC;AAAA,MAAC;AAAA;AAAA,QACC,OAAK;AAAA,QACL,IAAG;AAAA,QACH,yBAAyB;AAAA,UACvB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAcO,aAAa;AAAA;AAAA,QAE9B;AAAA;AAAA,IACF;AAAA,IAED,qBACC;AAAA,MAAC;AAAA;AAAA,QACC,OAAK;AAAA,QACL,IAAG;AAAA,QACH,yBAAyB;AAAA,UACvB,QAAQ;AAAA,sCACkB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAkB7C;AAAA;AAAA,IACF;AAAA,IAED,YACC;AAAA,MAAC;AAAA;AAAA,QACC,OAAK;AAAA,QACL,IAAG;AAAA,QACH,yBAAyB;AAAA,UACvB,QAAQ;AAAA;AAAA;AAAA,oCAGgB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOlC;AAAA;AAAA,IACF;AAAA,KAEJ;AAEJ;","names":[]}
|
|
@@ -3,8 +3,8 @@ import { useEffect } from "react";
|
|
|
3
3
|
import { useLocation } from "react-router";
|
|
4
4
|
import { onCLS, onFCP, onINP, onLCP, onTTFB } from "web-vitals";
|
|
5
5
|
import { useClickIdPersistence } from "../hooks/use-click-id-persistence.mjs";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { useOutboundClickAnalytics } from "../hooks/use-outbound-click-analytics.mjs";
|
|
7
|
+
import { useWebAnalytics } from "../hooks/use-web-analytics.mjs";
|
|
8
8
|
import { track } from "../track/index.mjs";
|
|
9
9
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
10
10
|
function useReportWebVitals(reportWebVitalsFn) {
|
|
@@ -29,8 +29,8 @@ function Analytics({
|
|
|
29
29
|
}) {
|
|
30
30
|
useClickIdPersistence();
|
|
31
31
|
const { pathname } = useLocation();
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
useWebAnalytics(pathname);
|
|
33
|
+
useOutboundClickAnalytics();
|
|
34
34
|
useReportWebVitals((metric) => {
|
|
35
35
|
if (!reportWebVitals) return;
|
|
36
36
|
const properties = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/react-router/index.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { useLocation } from 'react-router';\nimport { type Metric, onCLS, onFCP, onINP, onLCP, onTTFB } from 'web-vitals';\nimport { useClickIdPersistence } from '../hooks/use-click-id-persistence';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/react-router/index.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { useLocation } from 'react-router';\nimport { type Metric, onCLS, onFCP, onINP, onLCP, onTTFB } from 'web-vitals';\nimport { useClickIdPersistence } from '../hooks/use-click-id-persistence';\nimport { useOutboundClickAnalytics } from '../hooks/use-outbound-click-analytics';\nimport { useWebAnalytics } from '../hooks/use-web-analytics';\nimport { track } from '../track/index';\nimport type { PixelId as MetaPixelId } from '../track/fbq';\nimport type { GaId, GtmId } from '../track/gtag';\nimport type { PixelId as RedditPixelId } from '../track/rdt';\n\ntype HotjarId = `${number}`;\n\nfunction useReportWebVitals(reportWebVitalsFn: (metric: Metric) => void) {\n useEffect(() => {\n onCLS(reportWebVitalsFn);\n onLCP(reportWebVitalsFn);\n onINP(reportWebVitalsFn);\n onFCP(reportWebVitalsFn);\n onTTFB(reportWebVitalsFn);\n }, [reportWebVitalsFn]);\n}\n\ninterface Props {\n gaId?: GaId;\n gtmId?: GtmId;\n metaPixelId?: MetaPixelId;\n redditPixelId?: RedditPixelId;\n linkedInPartnerId?: `${number}`;\n hotjarId?: HotjarId;\n facebookAppId?: string;\n nonce?: string;\n debugMode?: boolean;\n reportWebVitals?: boolean;\n}\n\nexport function Analytics({\n gaId,\n nonce,\n debugMode,\n metaPixelId,\n redditPixelId,\n linkedInPartnerId,\n hotjarId,\n facebookAppId,\n reportWebVitals = true,\n}: Props) {\n useClickIdPersistence();\n\n const { pathname } = useLocation();\n useWebAnalytics(pathname);\n useOutboundClickAnalytics();\n\n useReportWebVitals((metric) => {\n if (!reportWebVitals) return;\n const properties = {\n id: metric.id,\n rating: metric.rating,\n value: metric.value,\n delta: metric.delta,\n navigation_type: metric.navigationType,\n non_interaction: true, // avoids affecting bounce rate.\n };\n track(metric.name, properties);\n });\n\n return (\n <>\n {facebookAppId && <meta property=\"fb:app_id\" content={facebookAppId} />}\n {gaId && (\n <>\n <script\n async\n id=\"gtag\"\n nonce={nonce}\n src={`https://www.googletagmanager.com/gtag/js?id=${gaId}`}\n />\n <script\n async\n nonce={nonce}\n id=\"gtag-init\"\n dangerouslySetInnerHTML={{\n __html: `\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', '${gaId}'${debugMode ? \" ,{ 'debug_mode': true }\" : ''});\n `,\n }}\n />\n </>\n )}\n {metaPixelId && (\n <script\n async\n id=\"meta-pixel\"\n dangerouslySetInnerHTML={{\n __html: `\n !(function (f, b, e, v, n, t, s) {\n if (f.fbq) return;\n n = f.fbq = function () {\n n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments);\n };\n if (!f._fbq) f._fbq = n;\n n.push = n;\n n.loaded = !0;\n n.version = '2.0';\n n.queue = [];\n t = b.createElement(e);\n t.async = !0;\n t.src = v;\n s = b.getElementsByTagName(e)[0];\n s.parentNode.insertBefore(t, s);\n })(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');\n fbq('init', '${metaPixelId}');\n fbq('track', 'PageView');`,\n }}\n />\n )}\n {redditPixelId && (\n <script\n async\n id=\"reddit-pixel\"\n dangerouslySetInnerHTML={{\n __html: `\n !function(w,d) {\n if(!w.rdt) {\n var p = w.rdt = function() {\n p.sendEvent ? p.sendEvent.apply(p,arguments) : p.callQueue.push(arguments)\n };\n p.callQueue = [];\n var t = d.createElement(\"script\");\n t.src = \"https://www.redditstatic.com/ads/pixel.js\";\n t.async = !0;\n var s = d.getElementsByTagName(\"script\")[0];\n s.parentNode.insertBefore(t,s)\n }\n }(window, document);\n rdt('init', '${redditPixelId}');\n rdt('track', 'PageVisit');`,\n }}\n />\n )}\n {linkedInPartnerId && (\n <script\n async\n id=\"linkedin-insight-tag\"\n dangerouslySetInnerHTML={{\n __html: `\n _linkedin_partner_id = \"${linkedInPartnerId}\";\n window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];\n window._linkedin_data_partner_ids.push(_linkedin_partner_id);\n\n (function(l) {\n if (!l){\n window.lintrk = function(a,b){\n window.lintrk.q.push([a,b])\n };\n window.lintrk.q=[]\n }\n var s = document.getElementsByTagName(\"script\")[0];\n var b = document.createElement(\"script\");\n b.type = \"text/javascript\";b.async = true;\n b.src = \"https://snap.licdn.com/li.lms-analytics/insight.min.js\";\n s.parentNode.insertBefore(b, s);\n })(window.lintrk);\n `,\n }}\n />\n )}\n {hotjarId && (\n <script\n async\n id=\"hotjar\"\n dangerouslySetInnerHTML={{\n __html: `\n (function(h,o,t,j,a,r){\n h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};\n h._hjSettings={hjid:${hotjarId},hjsv:6};\n a=o.getElementsByTagName('head')[0];\n r=o.createElement('script');r.async=1;\n r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;\n a.appendChild(r);\n })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');\n `,\n }}\n />\n )}\n </>\n );\n}\n"],"mappings":";AAAA,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAC5B,SAAsB,OAAO,OAAO,OAAO,OAAO,cAAc;AAChE,SAAS,6BAA6B;AACtC,SAAS,iCAAiC;AAC1C,SAAS,uBAAuB;AAChC,SAAS,aAAa;AA8DE,SAEhB,UAFgB,KAEhB,YAFgB;AAvDxB,SAAS,mBAAmB,mBAA6C;AACvE,YAAU,MAAM;AACd,UAAM,iBAAiB;AACvB,UAAM,iBAAiB;AACvB,UAAM,iBAAiB;AACvB,UAAM,iBAAiB;AACvB,WAAO,iBAAiB;AAAA,EAC1B,GAAG,CAAC,iBAAiB,CAAC;AACxB;AAeO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AACpB,GAAU;AACR,wBAAsB;AAEtB,QAAM,EAAE,SAAS,IAAI,YAAY;AACjC,kBAAgB,QAAQ;AACxB,4BAA0B;AAE1B,qBAAmB,CAAC,WAAW;AAC7B,QAAI,CAAC,gBAAiB;AACtB,UAAM,aAAa;AAAA,MACjB,IAAI,OAAO;AAAA,MACX,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,iBAAiB,OAAO;AAAA,MACxB,iBAAiB;AAAA;AAAA,IACnB;AACA,UAAM,OAAO,MAAM,UAAU;AAAA,EAC/B,CAAC;AAED,SACE,iCACG;AAAA,qBAAiB,oBAAC,UAAK,UAAS,aAAY,SAAS,eAAe;AAAA,IACpE,QACC,iCACE;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAK;AAAA,UACL,IAAG;AAAA,UACH;AAAA,UACA,KAAK,+CAA+C,IAAI;AAAA;AAAA,MAC1D;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,OAAK;AAAA,UACL;AAAA,UACA,IAAG;AAAA,UACH,yBAAyB;AAAA,YACvB,QAAQ;AAAA;AAAA;AAAA;AAAA,gCAIU,IAAI,IAAI,YAAY,6BAA6B,EAAE;AAAA;AAAA,UAEvE;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IAED,eACC;AAAA,MAAC;AAAA;AAAA,QACC,OAAK;AAAA,QACL,IAAG;AAAA,QACH,yBAAyB;AAAA,UACvB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAiBO,WAAW;AAAA;AAAA,QAE5B;AAAA;AAAA,IACF;AAAA,IAED,iBACC;AAAA,MAAC;AAAA;AAAA,QACC,OAAK;AAAA,QACL,IAAG;AAAA,QACH,yBAAyB;AAAA,UACvB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAcO,aAAa;AAAA;AAAA,QAE9B;AAAA;AAAA,IACF;AAAA,IAED,qBACC;AAAA,MAAC;AAAA;AAAA,QACC,OAAK;AAAA,QACL,IAAG;AAAA,QACH,yBAAyB;AAAA,UACvB,QAAQ;AAAA,sCACkB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAkB7C;AAAA;AAAA,IACF;AAAA,IAED,YACC;AAAA,MAAC;AAAA;AAAA,QACC,OAAK;AAAA,QACL,IAAG;AAAA,QACH,yBAAyB;AAAA,UACvB,QAAQ;AAAA;AAAA;AAAA,oCAGgB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOlC;AAAA;AAAA,IACF;AAAA,KAEJ;AAEJ;","names":[]}
|
package/dist/setup/session.cjs
CHANGED
|
@@ -21,34 +21,89 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var session_exports = {};
|
|
22
22
|
__export(session_exports, {
|
|
23
23
|
SESSION_TIMEOUT: () => SESSION_TIMEOUT,
|
|
24
|
-
|
|
25
|
-
isSessionExpired: () => isSessionExpired,
|
|
26
|
-
resetSession: () => resetSession,
|
|
27
|
-
updateSessionActiveTime: () => updateSessionActiveTime
|
|
24
|
+
session: () => session
|
|
28
25
|
});
|
|
29
26
|
module.exports = __toCommonJS(session_exports);
|
|
30
27
|
var import_uuid = require("uuid");
|
|
31
28
|
var SESSION_TIMEOUT = 30 * 60 * 1e3;
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
29
|
+
var Session = class {
|
|
30
|
+
id;
|
|
31
|
+
startTime;
|
|
32
|
+
lastActiveTime;
|
|
33
|
+
accumulatedTime;
|
|
34
|
+
active;
|
|
35
|
+
visible;
|
|
36
|
+
focused;
|
|
37
|
+
constructor() {
|
|
38
|
+
this.id = (0, import_uuid.v7)();
|
|
39
|
+
this.startTime = Date.now();
|
|
40
|
+
this.lastActiveTime = Date.now();
|
|
41
|
+
this.accumulatedTime = 0;
|
|
42
|
+
this.active = true;
|
|
43
|
+
this.visible = typeof document !== "undefined" ? document.visibilityState === "visible" : true;
|
|
44
|
+
this.focused = typeof document !== "undefined" ? document.hasFocus() : true;
|
|
45
|
+
}
|
|
46
|
+
getId = () => this.id;
|
|
47
|
+
isActive = () => this.active;
|
|
48
|
+
isVisible = () => this.visible;
|
|
49
|
+
isFocused = () => this.focused;
|
|
50
|
+
isExpired = () => Date.now() - this.lastActiveTime > SESSION_TIMEOUT;
|
|
51
|
+
updateLastActiveTime = () => {
|
|
52
|
+
this.lastActiveTime = Date.now();
|
|
53
|
+
};
|
|
54
|
+
updateActive = (active) => {
|
|
55
|
+
this.active = active;
|
|
56
|
+
};
|
|
57
|
+
refresh = () => {
|
|
58
|
+
this.id = (0, import_uuid.v7)();
|
|
59
|
+
this.lastActiveTime = Date.now();
|
|
60
|
+
};
|
|
61
|
+
updateAccumulator = () => {
|
|
62
|
+
const now = Date.now();
|
|
63
|
+
if (this.focused && this.visible && this.active) {
|
|
64
|
+
const delta = now - this.startTime;
|
|
65
|
+
if (delta > 0 && delta < SESSION_TIMEOUT) {
|
|
66
|
+
this.accumulatedTime += delta;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
this.startTime = now;
|
|
70
|
+
};
|
|
71
|
+
focus = () => {
|
|
72
|
+
this.updateAccumulator();
|
|
73
|
+
this.updateLastActiveTime();
|
|
74
|
+
this.focused = true;
|
|
75
|
+
};
|
|
76
|
+
blur = () => {
|
|
77
|
+
this.updateAccumulator();
|
|
78
|
+
this.focused = false;
|
|
79
|
+
};
|
|
80
|
+
pageshow = () => {
|
|
81
|
+
this.updateAccumulator();
|
|
82
|
+
this.updateLastActiveTime();
|
|
83
|
+
this.active = true;
|
|
84
|
+
};
|
|
85
|
+
pagehide = () => {
|
|
86
|
+
this.updateAccumulator();
|
|
87
|
+
this.active = false;
|
|
88
|
+
};
|
|
89
|
+
visibilitychange = (state) => {
|
|
90
|
+
this.updateAccumulator();
|
|
91
|
+
if (state === "visible") {
|
|
92
|
+
this.updateLastActiveTime();
|
|
93
|
+
}
|
|
94
|
+
this.visible = state === "visible";
|
|
95
|
+
};
|
|
96
|
+
flush = () => {
|
|
97
|
+
this.updateAccumulator();
|
|
98
|
+
const engagementTime = this.accumulatedTime;
|
|
99
|
+
this.accumulatedTime = 0;
|
|
100
|
+
return engagementTime;
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
var session = new Session();
|
|
46
104
|
// Annotate the CommonJS export names for ESM import in node:
|
|
47
105
|
0 && (module.exports = {
|
|
48
106
|
SESSION_TIMEOUT,
|
|
49
|
-
|
|
50
|
-
isSessionExpired,
|
|
51
|
-
resetSession,
|
|
52
|
-
updateSessionActiveTime
|
|
107
|
+
session
|
|
53
108
|
});
|
|
54
109
|
//# sourceMappingURL=session.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/setup/session.ts"],"sourcesContent":["import { v7 as uuidv7 } from 'uuid';\n\nexport
|
|
1
|
+
{"version":3,"sources":["../../src/setup/session.ts"],"sourcesContent":["import { v7 as uuidv7 } from 'uuid';\n\nexport const SESSION_TIMEOUT = 30 * 60 * 1000;\n\nclass Session {\n private id: string;\n private startTime: number;\n private lastActiveTime: number;\n private accumulatedTime: number;\n\n private active: boolean;\n private visible: boolean;\n private focused: boolean;\n\n constructor() {\n this.id = uuidv7();\n this.startTime = Date.now();\n this.lastActiveTime = Date.now();\n this.accumulatedTime = 0;\n\n this.active = true;\n this.visible = typeof document !== 'undefined' ? document.visibilityState === 'visible' : true;\n this.focused = typeof document !== 'undefined' ? document.hasFocus() : true;\n }\n\n getId = () => this.id;\n\n isActive = () => this.active;\n isVisible = () => this.visible;\n isFocused = () => this.focused;\n isExpired = () => Date.now() - this.lastActiveTime > SESSION_TIMEOUT;\n\n updateLastActiveTime = () => {\n this.lastActiveTime = Date.now();\n };\n\n updateActive = (active: boolean) => {\n this.active = active;\n };\n\n refresh = () => {\n this.id = uuidv7();\n this.lastActiveTime = Date.now();\n };\n\n updateAccumulator = () => {\n const now = Date.now();\n if (this.focused && this.visible && this.active) {\n const delta = now - this.startTime;\n if (delta > 0 && delta < SESSION_TIMEOUT) {\n this.accumulatedTime += delta;\n }\n }\n this.startTime = now;\n };\n\n focus = () => {\n this.updateAccumulator();\n this.updateLastActiveTime();\n this.focused = true;\n };\n\n blur = () => {\n this.updateAccumulator();\n this.focused = false;\n };\n\n pageshow = () => {\n this.updateAccumulator();\n this.updateLastActiveTime();\n this.active = true;\n };\n\n pagehide = () => {\n this.updateAccumulator();\n this.active = false;\n };\n\n visibilitychange = (state: DocumentVisibilityState) => {\n this.updateAccumulator();\n if (state === 'visible') {\n this.updateLastActiveTime();\n }\n this.visible = state === 'visible';\n };\n\n flush = () => {\n this.updateAccumulator();\n const engagementTime = this.accumulatedTime;\n this.accumulatedTime = 0;\n return engagementTime;\n };\n}\n\nexport const session = new Session();\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA6B;AAEtB,IAAM,kBAAkB,KAAK,KAAK;AAEzC,IAAM,UAAN,MAAc;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAER,cAAc;AACZ,SAAK,SAAK,YAAAA,IAAO;AACjB,SAAK,YAAY,KAAK,IAAI;AAC1B,SAAK,iBAAiB,KAAK,IAAI;AAC/B,SAAK,kBAAkB;AAEvB,SAAK,SAAS;AACd,SAAK,UAAU,OAAO,aAAa,cAAc,SAAS,oBAAoB,YAAY;AAC1F,SAAK,UAAU,OAAO,aAAa,cAAc,SAAS,SAAS,IAAI;AAAA,EACzE;AAAA,EAEA,QAAQ,MAAM,KAAK;AAAA,EAEnB,WAAW,MAAM,KAAK;AAAA,EACtB,YAAY,MAAM,KAAK;AAAA,EACvB,YAAY,MAAM,KAAK;AAAA,EACvB,YAAY,MAAM,KAAK,IAAI,IAAI,KAAK,iBAAiB;AAAA,EAErD,uBAAuB,MAAM;AAC3B,SAAK,iBAAiB,KAAK,IAAI;AAAA,EACjC;AAAA,EAEA,eAAe,CAAC,WAAoB;AAClC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,UAAU,MAAM;AACd,SAAK,SAAK,YAAAA,IAAO;AACjB,SAAK,iBAAiB,KAAK,IAAI;AAAA,EACjC;AAAA,EAEA,oBAAoB,MAAM;AACxB,UAAM,MAAM,KAAK,IAAI;AACrB,QAAI,KAAK,WAAW,KAAK,WAAW,KAAK,QAAQ;AAC/C,YAAM,QAAQ,MAAM,KAAK;AACzB,UAAI,QAAQ,KAAK,QAAQ,iBAAiB;AACxC,aAAK,mBAAmB;AAAA,MAC1B;AAAA,IACF;AACA,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,QAAQ,MAAM;AACZ,SAAK,kBAAkB;AACvB,SAAK,qBAAqB;AAC1B,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,OAAO,MAAM;AACX,SAAK,kBAAkB;AACvB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,WAAW,MAAM;AACf,SAAK,kBAAkB;AACvB,SAAK,qBAAqB;AAC1B,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,WAAW,MAAM;AACf,SAAK,kBAAkB;AACvB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,mBAAmB,CAAC,UAAmC;AACrD,SAAK,kBAAkB;AACvB,QAAI,UAAU,WAAW;AACvB,WAAK,qBAAqB;AAAA,IAC5B;AACA,SAAK,UAAU,UAAU;AAAA,EAC3B;AAAA,EAEA,QAAQ,MAAM;AACZ,SAAK,kBAAkB;AACvB,UAAM,iBAAiB,KAAK;AAC5B,SAAK,kBAAkB;AACvB,WAAO;AAAA,EACT;AACF;AAEO,IAAM,UAAU,IAAI,QAAQ;","names":["uuidv7"]}
|
package/dist/setup/session.d.cts
CHANGED
|
@@ -1,11 +1,29 @@
|
|
|
1
|
-
type Session = {
|
|
2
|
-
id: string;
|
|
3
|
-
lastActiveTime: number;
|
|
4
|
-
};
|
|
5
1
|
declare const SESSION_TIMEOUT: number;
|
|
6
|
-
declare
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
declare class Session {
|
|
3
|
+
private id;
|
|
4
|
+
private startTime;
|
|
5
|
+
private lastActiveTime;
|
|
6
|
+
private accumulatedTime;
|
|
7
|
+
private active;
|
|
8
|
+
private visible;
|
|
9
|
+
private focused;
|
|
10
|
+
constructor();
|
|
11
|
+
getId: () => string;
|
|
12
|
+
isActive: () => boolean;
|
|
13
|
+
isVisible: () => boolean;
|
|
14
|
+
isFocused: () => boolean;
|
|
15
|
+
isExpired: () => boolean;
|
|
16
|
+
updateLastActiveTime: () => void;
|
|
17
|
+
updateActive: (active: boolean) => void;
|
|
18
|
+
refresh: () => void;
|
|
19
|
+
updateAccumulator: () => void;
|
|
20
|
+
focus: () => void;
|
|
21
|
+
blur: () => void;
|
|
22
|
+
pageshow: () => void;
|
|
23
|
+
pagehide: () => void;
|
|
24
|
+
visibilitychange: (state: DocumentVisibilityState) => void;
|
|
25
|
+
flush: () => number;
|
|
26
|
+
}
|
|
27
|
+
declare const session: Session;
|
|
10
28
|
|
|
11
|
-
export { SESSION_TIMEOUT,
|
|
29
|
+
export { SESSION_TIMEOUT, session };
|
package/dist/setup/session.d.ts
CHANGED
|
@@ -1,11 +1,29 @@
|
|
|
1
|
-
type Session = {
|
|
2
|
-
id: string;
|
|
3
|
-
lastActiveTime: number;
|
|
4
|
-
};
|
|
5
1
|
declare const SESSION_TIMEOUT: number;
|
|
6
|
-
declare
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
declare class Session {
|
|
3
|
+
private id;
|
|
4
|
+
private startTime;
|
|
5
|
+
private lastActiveTime;
|
|
6
|
+
private accumulatedTime;
|
|
7
|
+
private active;
|
|
8
|
+
private visible;
|
|
9
|
+
private focused;
|
|
10
|
+
constructor();
|
|
11
|
+
getId: () => string;
|
|
12
|
+
isActive: () => boolean;
|
|
13
|
+
isVisible: () => boolean;
|
|
14
|
+
isFocused: () => boolean;
|
|
15
|
+
isExpired: () => boolean;
|
|
16
|
+
updateLastActiveTime: () => void;
|
|
17
|
+
updateActive: (active: boolean) => void;
|
|
18
|
+
refresh: () => void;
|
|
19
|
+
updateAccumulator: () => void;
|
|
20
|
+
focus: () => void;
|
|
21
|
+
blur: () => void;
|
|
22
|
+
pageshow: () => void;
|
|
23
|
+
pagehide: () => void;
|
|
24
|
+
visibilitychange: (state: DocumentVisibilityState) => void;
|
|
25
|
+
flush: () => number;
|
|
26
|
+
}
|
|
27
|
+
declare const session: Session;
|
|
10
28
|
|
|
11
|
-
export { SESSION_TIMEOUT,
|
|
29
|
+
export { SESSION_TIMEOUT, session };
|
package/dist/setup/session.mjs
CHANGED
|
@@ -1,25 +1,83 @@
|
|
|
1
1
|
// src/setup/session.ts
|
|
2
2
|
import { v7 as uuidv7 } from "uuid";
|
|
3
3
|
var SESSION_TIMEOUT = 30 * 60 * 1e3;
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
4
|
+
var Session = class {
|
|
5
|
+
id;
|
|
6
|
+
startTime;
|
|
7
|
+
lastActiveTime;
|
|
8
|
+
accumulatedTime;
|
|
9
|
+
active;
|
|
10
|
+
visible;
|
|
11
|
+
focused;
|
|
12
|
+
constructor() {
|
|
13
|
+
this.id = uuidv7();
|
|
14
|
+
this.startTime = Date.now();
|
|
15
|
+
this.lastActiveTime = Date.now();
|
|
16
|
+
this.accumulatedTime = 0;
|
|
17
|
+
this.active = true;
|
|
18
|
+
this.visible = typeof document !== "undefined" ? document.visibilityState === "visible" : true;
|
|
19
|
+
this.focused = typeof document !== "undefined" ? document.hasFocus() : true;
|
|
20
|
+
}
|
|
21
|
+
getId = () => this.id;
|
|
22
|
+
isActive = () => this.active;
|
|
23
|
+
isVisible = () => this.visible;
|
|
24
|
+
isFocused = () => this.focused;
|
|
25
|
+
isExpired = () => Date.now() - this.lastActiveTime > SESSION_TIMEOUT;
|
|
26
|
+
updateLastActiveTime = () => {
|
|
27
|
+
this.lastActiveTime = Date.now();
|
|
28
|
+
};
|
|
29
|
+
updateActive = (active) => {
|
|
30
|
+
this.active = active;
|
|
31
|
+
};
|
|
32
|
+
refresh = () => {
|
|
33
|
+
this.id = uuidv7();
|
|
34
|
+
this.lastActiveTime = Date.now();
|
|
35
|
+
};
|
|
36
|
+
updateAccumulator = () => {
|
|
37
|
+
const now = Date.now();
|
|
38
|
+
if (this.focused && this.visible && this.active) {
|
|
39
|
+
const delta = now - this.startTime;
|
|
40
|
+
if (delta > 0 && delta < SESSION_TIMEOUT) {
|
|
41
|
+
this.accumulatedTime += delta;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
this.startTime = now;
|
|
45
|
+
};
|
|
46
|
+
focus = () => {
|
|
47
|
+
this.updateAccumulator();
|
|
48
|
+
this.updateLastActiveTime();
|
|
49
|
+
this.focused = true;
|
|
50
|
+
};
|
|
51
|
+
blur = () => {
|
|
52
|
+
this.updateAccumulator();
|
|
53
|
+
this.focused = false;
|
|
54
|
+
};
|
|
55
|
+
pageshow = () => {
|
|
56
|
+
this.updateAccumulator();
|
|
57
|
+
this.updateLastActiveTime();
|
|
58
|
+
this.active = true;
|
|
59
|
+
};
|
|
60
|
+
pagehide = () => {
|
|
61
|
+
this.updateAccumulator();
|
|
62
|
+
this.active = false;
|
|
63
|
+
};
|
|
64
|
+
visibilitychange = (state) => {
|
|
65
|
+
this.updateAccumulator();
|
|
66
|
+
if (state === "visible") {
|
|
67
|
+
this.updateLastActiveTime();
|
|
68
|
+
}
|
|
69
|
+
this.visible = state === "visible";
|
|
70
|
+
};
|
|
71
|
+
flush = () => {
|
|
72
|
+
this.updateAccumulator();
|
|
73
|
+
const engagementTime = this.accumulatedTime;
|
|
74
|
+
this.accumulatedTime = 0;
|
|
75
|
+
return engagementTime;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
var session = new Session();
|
|
18
79
|
export {
|
|
19
80
|
SESSION_TIMEOUT,
|
|
20
|
-
|
|
21
|
-
isSessionExpired,
|
|
22
|
-
resetSession,
|
|
23
|
-
updateSessionActiveTime
|
|
81
|
+
session
|
|
24
82
|
};
|
|
25
83
|
//# sourceMappingURL=session.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/setup/session.ts"],"sourcesContent":["import { v7 as uuidv7 } from 'uuid';\n\nexport
|
|
1
|
+
{"version":3,"sources":["../../src/setup/session.ts"],"sourcesContent":["import { v7 as uuidv7 } from 'uuid';\n\nexport const SESSION_TIMEOUT = 30 * 60 * 1000;\n\nclass Session {\n private id: string;\n private startTime: number;\n private lastActiveTime: number;\n private accumulatedTime: number;\n\n private active: boolean;\n private visible: boolean;\n private focused: boolean;\n\n constructor() {\n this.id = uuidv7();\n this.startTime = Date.now();\n this.lastActiveTime = Date.now();\n this.accumulatedTime = 0;\n\n this.active = true;\n this.visible = typeof document !== 'undefined' ? document.visibilityState === 'visible' : true;\n this.focused = typeof document !== 'undefined' ? document.hasFocus() : true;\n }\n\n getId = () => this.id;\n\n isActive = () => this.active;\n isVisible = () => this.visible;\n isFocused = () => this.focused;\n isExpired = () => Date.now() - this.lastActiveTime > SESSION_TIMEOUT;\n\n updateLastActiveTime = () => {\n this.lastActiveTime = Date.now();\n };\n\n updateActive = (active: boolean) => {\n this.active = active;\n };\n\n refresh = () => {\n this.id = uuidv7();\n this.lastActiveTime = Date.now();\n };\n\n updateAccumulator = () => {\n const now = Date.now();\n if (this.focused && this.visible && this.active) {\n const delta = now - this.startTime;\n if (delta > 0 && delta < SESSION_TIMEOUT) {\n this.accumulatedTime += delta;\n }\n }\n this.startTime = now;\n };\n\n focus = () => {\n this.updateAccumulator();\n this.updateLastActiveTime();\n this.focused = true;\n };\n\n blur = () => {\n this.updateAccumulator();\n this.focused = false;\n };\n\n pageshow = () => {\n this.updateAccumulator();\n this.updateLastActiveTime();\n this.active = true;\n };\n\n pagehide = () => {\n this.updateAccumulator();\n this.active = false;\n };\n\n visibilitychange = (state: DocumentVisibilityState) => {\n this.updateAccumulator();\n if (state === 'visible') {\n this.updateLastActiveTime();\n }\n this.visible = state === 'visible';\n };\n\n flush = () => {\n this.updateAccumulator();\n const engagementTime = this.accumulatedTime;\n this.accumulatedTime = 0;\n return engagementTime;\n };\n}\n\nexport const session = new Session();\n"],"mappings":";AAAA,SAAS,MAAM,cAAc;AAEtB,IAAM,kBAAkB,KAAK,KAAK;AAEzC,IAAM,UAAN,MAAc;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAER,cAAc;AACZ,SAAK,KAAK,OAAO;AACjB,SAAK,YAAY,KAAK,IAAI;AAC1B,SAAK,iBAAiB,KAAK,IAAI;AAC/B,SAAK,kBAAkB;AAEvB,SAAK,SAAS;AACd,SAAK,UAAU,OAAO,aAAa,cAAc,SAAS,oBAAoB,YAAY;AAC1F,SAAK,UAAU,OAAO,aAAa,cAAc,SAAS,SAAS,IAAI;AAAA,EACzE;AAAA,EAEA,QAAQ,MAAM,KAAK;AAAA,EAEnB,WAAW,MAAM,KAAK;AAAA,EACtB,YAAY,MAAM,KAAK;AAAA,EACvB,YAAY,MAAM,KAAK;AAAA,EACvB,YAAY,MAAM,KAAK,IAAI,IAAI,KAAK,iBAAiB;AAAA,EAErD,uBAAuB,MAAM;AAC3B,SAAK,iBAAiB,KAAK,IAAI;AAAA,EACjC;AAAA,EAEA,eAAe,CAAC,WAAoB;AAClC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,UAAU,MAAM;AACd,SAAK,KAAK,OAAO;AACjB,SAAK,iBAAiB,KAAK,IAAI;AAAA,EACjC;AAAA,EAEA,oBAAoB,MAAM;AACxB,UAAM,MAAM,KAAK,IAAI;AACrB,QAAI,KAAK,WAAW,KAAK,WAAW,KAAK,QAAQ;AAC/C,YAAM,QAAQ,MAAM,KAAK;AACzB,UAAI,QAAQ,KAAK,QAAQ,iBAAiB;AACxC,aAAK,mBAAmB;AAAA,MAC1B;AAAA,IACF;AACA,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,QAAQ,MAAM;AACZ,SAAK,kBAAkB;AACvB,SAAK,qBAAqB;AAC1B,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,OAAO,MAAM;AACX,SAAK,kBAAkB;AACvB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,WAAW,MAAM;AACf,SAAK,kBAAkB;AACvB,SAAK,qBAAqB;AAC1B,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,WAAW,MAAM;AACf,SAAK,kBAAkB;AACvB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,mBAAmB,CAAC,UAAmC;AACrD,SAAK,kBAAkB;AACvB,QAAI,UAAU,WAAW;AACvB,WAAK,qBAAqB;AAAA,IAC5B;AACA,SAAK,UAAU,UAAU;AAAA,EAC3B;AAAA,EAEA,QAAQ,MAAM;AACZ,SAAK,kBAAkB;AACvB,UAAM,iBAAiB,KAAK;AAC5B,SAAK,kBAAkB;AACvB,WAAO;AAAA,EACT;AACF;AAEO,IAAM,UAAU,IAAI,QAAQ;","names":[]}
|