@shware/analytics 3.4.1 → 3.5.1
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/constants/storage.cjs +1 -0
- package/dist/constants/storage.cjs.map +1 -1
- package/dist/constants/storage.d.cts +1 -0
- package/dist/constants/storage.d.ts +1 -0
- package/dist/constants/storage.mjs +1 -0
- package/dist/constants/storage.mjs.map +1 -1
- package/dist/hooks/use-click-id-persistence.cjs +27 -9
- package/dist/hooks/use-click-id-persistence.cjs.map +1 -1
- package/dist/hooks/use-click-id-persistence.mjs +27 -9
- package/dist/hooks/use-click-id-persistence.mjs.map +1 -1
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +2 -1
- package/dist/index.mjs.map +1 -1
- package/dist/native/posthog.cjs +30 -0
- package/dist/native/posthog.cjs.map +1 -1
- package/dist/native/posthog.d.cts +2 -1
- package/dist/native/posthog.d.ts +2 -1
- package/dist/native/posthog.mjs +6 -0
- package/dist/native/posthog.mjs.map +1 -1
- package/dist/schema/index.d.cts +0 -27
- package/dist/schema/index.d.ts +0 -27
- package/dist/web/index.cjs +1 -1
- package/dist/web/index.cjs.map +1 -1
- package/dist/web/index.mjs +1 -1
- package/dist/web/index.mjs.map +1 -1
- package/package.json +16 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/constants/storage.ts"],"sourcesContent":["export const keys = {\n device_id: 'device_id',\n visitor_id: 'visitor_id',\n first_open_time: 'first_open_time',\n first_visit_time: 'first_visit_time',\n // click ids\n fbc: 'fbc',\n rdt_cid: 'rdt_cid',\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,OAAO;AAAA,EAClB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,kBAAkB;AAAA;AAAA,EAElB,KAAK;AAAA,EACL,SAAS;AACX;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/constants/storage.ts"],"sourcesContent":["export const keys = {\n device_id: 'device_id',\n visitor_id: 'visitor_id',\n first_open_time: 'first_open_time',\n first_visit_time: 'first_visit_time',\n // click ids\n fbc: 'fbc',\n fbclid: 'fbclid',\n rdt_cid: 'rdt_cid',\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,OAAO;AAAA,EAClB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,kBAAkB;AAAA;AAAA,EAElB,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,SAAS;AACX;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/constants/storage.ts"],"sourcesContent":["export const keys = {\n device_id: 'device_id',\n visitor_id: 'visitor_id',\n first_open_time: 'first_open_time',\n first_visit_time: 'first_visit_time',\n // click ids\n fbc: 'fbc',\n rdt_cid: 'rdt_cid',\n} as const;\n"],"mappings":";AAAO,IAAM,OAAO;AAAA,EAClB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,kBAAkB;AAAA;AAAA,EAElB,KAAK;AAAA,EACL,SAAS;AACX;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/constants/storage.ts"],"sourcesContent":["export const keys = {\n device_id: 'device_id',\n visitor_id: 'visitor_id',\n first_open_time: 'first_open_time',\n first_visit_time: 'first_visit_time',\n // click ids\n fbc: 'fbc',\n fbclid: 'fbclid',\n rdt_cid: 'rdt_cid',\n} as const;\n"],"mappings":";AAAO,IAAM,OAAO;AAAA,EAClB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,kBAAkB;AAAA;AAAA,EAElB,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,SAAS;AACX;","names":[]}
|
|
@@ -24,29 +24,47 @@ __export(use_click_id_persistence_exports, {
|
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(use_click_id_persistence_exports);
|
|
26
26
|
var import_utils = require("@shware/utils");
|
|
27
|
+
var import_cookie = require("cookie");
|
|
27
28
|
var import_react = require("react");
|
|
28
29
|
var import_storage = require("../constants/storage.cjs");
|
|
30
|
+
var TTL_MS = 90 * 24 * 60 * 60 * 1e3;
|
|
29
31
|
function setCookie(name, value, ttlInMs) {
|
|
30
32
|
const d = /* @__PURE__ */ new Date();
|
|
31
33
|
d.setTime(d.getTime() + ttlInMs);
|
|
32
34
|
const expires = `expires=${d.toUTCString()}`;
|
|
33
35
|
document.cookie = `${name}=${value}; ${expires}; path=/; SameSite=Lax; Secure`;
|
|
34
36
|
}
|
|
37
|
+
function extractFbclid(fbc) {
|
|
38
|
+
const parts = fbc.split(".");
|
|
39
|
+
return parts.length >= 4 ? parts.slice(3).join(".") : void 0;
|
|
40
|
+
}
|
|
41
|
+
function persist(cookieName, storageKey, cookieValue, newValue) {
|
|
42
|
+
if (newValue) {
|
|
43
|
+
setCookie(cookieName, newValue, TTL_MS);
|
|
44
|
+
import_utils.expiringStorage.setItem(storageKey, newValue, TTL_MS);
|
|
45
|
+
} else {
|
|
46
|
+
const stored = import_utils.expiringStorage.getItem(storageKey);
|
|
47
|
+
if (cookieValue && !stored) {
|
|
48
|
+
import_utils.expiringStorage.setItem(storageKey, cookieValue, TTL_MS);
|
|
49
|
+
} else if (!cookieValue && stored) {
|
|
50
|
+
setCookie(cookieName, stored, TTL_MS);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
35
54
|
function useClickIdPersistence() {
|
|
36
55
|
(0, import_react.useEffect)(() => {
|
|
37
56
|
const params = new URLSearchParams(window.location.search);
|
|
57
|
+
const parsed = (0, import_cookie.parseCookie)(document.cookie);
|
|
38
58
|
const fbclid = params.get("fbclid");
|
|
39
|
-
const
|
|
40
|
-
const
|
|
59
|
+
const existingFbc = parsed._fbc ?? import_utils.expiringStorage.getItem(import_storage.keys.fbc);
|
|
60
|
+
const fbclidChanged = fbclid && extractFbclid(existingFbc ?? "") !== fbclid;
|
|
61
|
+
const newFbc = fbclidChanged ? `fb.1.${Date.now()}.${fbclid}` : void 0;
|
|
62
|
+
persist("_fbc", import_storage.keys.fbc, parsed._fbc, newFbc);
|
|
41
63
|
if (fbclid) {
|
|
42
|
-
|
|
43
|
-
setCookie("_fbc", fbc, ttlMs);
|
|
44
|
-
import_utils.expiringStorage.setItem(import_storage.keys.fbc, fbc, ttlMs);
|
|
45
|
-
}
|
|
46
|
-
if (rdt_cid) {
|
|
47
|
-
setCookie("_rdt_cid", rdt_cid, ttlMs);
|
|
48
|
-
import_utils.expiringStorage.setItem(import_storage.keys.rdt_cid, rdt_cid, ttlMs);
|
|
64
|
+
import_utils.expiringStorage.setItem(import_storage.keys.fbclid, fbclid, TTL_MS);
|
|
49
65
|
}
|
|
66
|
+
const rdt_cid = params.get("rdt_cid");
|
|
67
|
+
persist("_rdt_cid", import_storage.keys.rdt_cid, parsed._rdt_cid, rdt_cid ?? void 0);
|
|
50
68
|
}, []);
|
|
51
69
|
}
|
|
52
70
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/use-click-id-persistence.ts"],"sourcesContent":["import { expiringStorage } from '@shware/utils';\nimport { useEffect } from 'react';\nimport { keys } from '../constants/storage';\n\nfunction setCookie(name: string, value: string, ttlInMs: number) {\n const d = new Date();\n d.setTime(d.getTime() + ttlInMs);\n const expires = `expires=${d.toUTCString()}`;\n document.cookie = `${name}=${value}; ${expires}; path=/; SameSite=Lax; Secure`;\n}\n\n// todo: do not set tracking cookies before the user has granted consent where required.\n// reference: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/#3--store-clickid\n// reference: https://watsspace.com/blog/meta-conversions-api-fbc-and-fbp-parameters/\nexport function useClickIdPersistence() {\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n const fbclid = params.get('fbclid');\n const
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-click-id-persistence.ts"],"sourcesContent":["import { expiringStorage } from '@shware/utils';\nimport { parseCookie } from 'cookie';\nimport { useEffect } from 'react';\nimport { keys } from '../constants/storage';\n\n// common practice ~90 days\nconst TTL_MS = 90 * 24 * 60 * 60 * 1000;\n\nfunction setCookie(name: string, value: string, ttlInMs: number) {\n const d = new Date();\n d.setTime(d.getTime() + ttlInMs);\n const expires = `expires=${d.toUTCString()}`;\n document.cookie = `${name}=${value}; ${expires}; path=/; SameSite=Lax; Secure`;\n}\n\n/** Extract the raw fbclid portion from a formatted fbc string (fb.1.ts.FBCLID) */\nfunction extractFbclid(fbc: string): string | undefined {\n // fb.<subdomainIndex>.<creationTime>.<fbclid>\n const parts = fbc.split('.');\n return parts.length >= 4 ? parts.slice(3).join('.') : undefined;\n}\n\n/**\n * Persist a click-id value across cookie + localStorage.\n * - cookie: readable by third-party SDKs (e.g. Meta Pixel)\n * - localStorage (via expiringStorage): survives Safari ITP JS-cookie caps\n *\n * If only one store has the value, sync it to the other.\n */\nfunction persist(\n cookieName: string,\n storageKey: string,\n cookieValue: string | undefined,\n newValue: string | undefined\n) {\n if (newValue) {\n setCookie(cookieName, newValue, TTL_MS);\n expiringStorage.setItem(storageKey, newValue, TTL_MS);\n } else {\n const stored = expiringStorage.getItem<string>(storageKey);\n if (cookieValue && !stored) {\n // cookie → localStorage: back up before ITP wipes the cookie\n expiringStorage.setItem(storageKey, cookieValue, TTL_MS);\n } else if (!cookieValue && stored) {\n // localStorage → cookie: restore so third-party SDKs (Meta Pixel) can read it\n setCookie(cookieName, stored, TTL_MS);\n }\n }\n}\n\n// todo: do not set tracking cookies before the user has granted consent where required.\n// reference: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/#3--store-clickid\n// reference: https://watsspace.com/blog/meta-conversions-api-fbc-and-fbp-parameters/\nexport function useClickIdPersistence() {\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n const parsed = parseCookie(document.cookie);\n\n // --- Meta fbc ---\n const fbclid = params.get('fbclid');\n const existingFbc = parsed._fbc ?? expiringStorage.getItem<string>(keys.fbc);\n // Only build a new fbc if the fbclid actually changed (preserve original creationTime otherwise).\n const fbclidChanged = fbclid && extractFbclid(existingFbc ?? '') !== fbclid;\n const newFbc = fbclidChanged ? `fb.1.${Date.now()}.${fbclid}` : undefined;\n\n persist('_fbc', keys.fbc, parsed._fbc, newFbc);\n\n // Also persist raw fbclid so the server-side Conversions API fallback\n // (fbc reconstruction from fbclid) works even after SPA navigation.\n if (fbclid) {\n expiringStorage.setItem(keys.fbclid, fbclid, TTL_MS);\n }\n\n // --- Reddit rdt_cid ---\n const rdt_cid = params.get('rdt_cid');\n persist('_rdt_cid', keys.rdt_cid, parsed._rdt_cid, rdt_cid ?? undefined);\n }, []);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAgC;AAChC,oBAA4B;AAC5B,mBAA0B;AAC1B,qBAAqB;AAGrB,IAAM,SAAS,KAAK,KAAK,KAAK,KAAK;AAEnC,SAAS,UAAU,MAAc,OAAe,SAAiB;AAC/D,QAAM,IAAI,oBAAI,KAAK;AACnB,IAAE,QAAQ,EAAE,QAAQ,IAAI,OAAO;AAC/B,QAAM,UAAU,WAAW,EAAE,YAAY,CAAC;AAC1C,WAAS,SAAS,GAAG,IAAI,IAAI,KAAK,KAAK,OAAO;AAChD;AAGA,SAAS,cAAc,KAAiC;AAEtD,QAAM,QAAQ,IAAI,MAAM,GAAG;AAC3B,SAAO,MAAM,UAAU,IAAI,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI;AACxD;AASA,SAAS,QACP,YACA,YACA,aACA,UACA;AACA,MAAI,UAAU;AACZ,cAAU,YAAY,UAAU,MAAM;AACtC,iCAAgB,QAAQ,YAAY,UAAU,MAAM;AAAA,EACtD,OAAO;AACL,UAAM,SAAS,6BAAgB,QAAgB,UAAU;AACzD,QAAI,eAAe,CAAC,QAAQ;AAE1B,mCAAgB,QAAQ,YAAY,aAAa,MAAM;AAAA,IACzD,WAAW,CAAC,eAAe,QAAQ;AAEjC,gBAAU,YAAY,QAAQ,MAAM;AAAA,IACtC;AAAA,EACF;AACF;AAKO,SAAS,wBAAwB;AACtC,8BAAU,MAAM;AACd,UAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,UAAM,aAAS,2BAAY,SAAS,MAAM;AAG1C,UAAM,SAAS,OAAO,IAAI,QAAQ;AAClC,UAAM,cAAc,OAAO,QAAQ,6BAAgB,QAAgB,oBAAK,GAAG;AAE3E,UAAM,gBAAgB,UAAU,cAAc,eAAe,EAAE,MAAM;AACrE,UAAM,SAAS,gBAAgB,QAAQ,KAAK,IAAI,CAAC,IAAI,MAAM,KAAK;AAEhE,YAAQ,QAAQ,oBAAK,KAAK,OAAO,MAAM,MAAM;AAI7C,QAAI,QAAQ;AACV,mCAAgB,QAAQ,oBAAK,QAAQ,QAAQ,MAAM;AAAA,IACrD;AAGA,UAAM,UAAU,OAAO,IAAI,SAAS;AACpC,YAAQ,YAAY,oBAAK,SAAS,OAAO,UAAU,WAAW,MAAS;AAAA,EACzE,GAAG,CAAC,CAAC;AACP;","names":[]}
|
|
@@ -1,28 +1,46 @@
|
|
|
1
1
|
// src/hooks/use-click-id-persistence.ts
|
|
2
2
|
import { expiringStorage } from "@shware/utils";
|
|
3
|
+
import { parseCookie } from "cookie";
|
|
3
4
|
import { useEffect } from "react";
|
|
4
5
|
import { keys } from "../constants/storage.mjs";
|
|
6
|
+
var TTL_MS = 90 * 24 * 60 * 60 * 1e3;
|
|
5
7
|
function setCookie(name, value, ttlInMs) {
|
|
6
8
|
const d = /* @__PURE__ */ new Date();
|
|
7
9
|
d.setTime(d.getTime() + ttlInMs);
|
|
8
10
|
const expires = `expires=${d.toUTCString()}`;
|
|
9
11
|
document.cookie = `${name}=${value}; ${expires}; path=/; SameSite=Lax; Secure`;
|
|
10
12
|
}
|
|
13
|
+
function extractFbclid(fbc) {
|
|
14
|
+
const parts = fbc.split(".");
|
|
15
|
+
return parts.length >= 4 ? parts.slice(3).join(".") : void 0;
|
|
16
|
+
}
|
|
17
|
+
function persist(cookieName, storageKey, cookieValue, newValue) {
|
|
18
|
+
if (newValue) {
|
|
19
|
+
setCookie(cookieName, newValue, TTL_MS);
|
|
20
|
+
expiringStorage.setItem(storageKey, newValue, TTL_MS);
|
|
21
|
+
} else {
|
|
22
|
+
const stored = expiringStorage.getItem(storageKey);
|
|
23
|
+
if (cookieValue && !stored) {
|
|
24
|
+
expiringStorage.setItem(storageKey, cookieValue, TTL_MS);
|
|
25
|
+
} else if (!cookieValue && stored) {
|
|
26
|
+
setCookie(cookieName, stored, TTL_MS);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
11
30
|
function useClickIdPersistence() {
|
|
12
31
|
useEffect(() => {
|
|
13
32
|
const params = new URLSearchParams(window.location.search);
|
|
33
|
+
const parsed = parseCookie(document.cookie);
|
|
14
34
|
const fbclid = params.get("fbclid");
|
|
15
|
-
const
|
|
16
|
-
const
|
|
35
|
+
const existingFbc = parsed._fbc ?? expiringStorage.getItem(keys.fbc);
|
|
36
|
+
const fbclidChanged = fbclid && extractFbclid(existingFbc ?? "") !== fbclid;
|
|
37
|
+
const newFbc = fbclidChanged ? `fb.1.${Date.now()}.${fbclid}` : void 0;
|
|
38
|
+
persist("_fbc", keys.fbc, parsed._fbc, newFbc);
|
|
17
39
|
if (fbclid) {
|
|
18
|
-
|
|
19
|
-
setCookie("_fbc", fbc, ttlMs);
|
|
20
|
-
expiringStorage.setItem(keys.fbc, fbc, ttlMs);
|
|
21
|
-
}
|
|
22
|
-
if (rdt_cid) {
|
|
23
|
-
setCookie("_rdt_cid", rdt_cid, ttlMs);
|
|
24
|
-
expiringStorage.setItem(keys.rdt_cid, rdt_cid, ttlMs);
|
|
40
|
+
expiringStorage.setItem(keys.fbclid, fbclid, TTL_MS);
|
|
25
41
|
}
|
|
42
|
+
const rdt_cid = params.get("rdt_cid");
|
|
43
|
+
persist("_rdt_cid", keys.rdt_cid, parsed._rdt_cid, rdt_cid ?? void 0);
|
|
26
44
|
}, []);
|
|
27
45
|
}
|
|
28
46
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/use-click-id-persistence.ts"],"sourcesContent":["import { expiringStorage } from '@shware/utils';\nimport { useEffect } from 'react';\nimport { keys } from '../constants/storage';\n\nfunction setCookie(name: string, value: string, ttlInMs: number) {\n const d = new Date();\n d.setTime(d.getTime() + ttlInMs);\n const expires = `expires=${d.toUTCString()}`;\n document.cookie = `${name}=${value}; ${expires}; path=/; SameSite=Lax; Secure`;\n}\n\n// todo: do not set tracking cookies before the user has granted consent where required.\n// reference: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/#3--store-clickid\n// reference: https://watsspace.com/blog/meta-conversions-api-fbc-and-fbp-parameters/\nexport function useClickIdPersistence() {\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n const fbclid = params.get('fbclid');\n const
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-click-id-persistence.ts"],"sourcesContent":["import { expiringStorage } from '@shware/utils';\nimport { parseCookie } from 'cookie';\nimport { useEffect } from 'react';\nimport { keys } from '../constants/storage';\n\n// common practice ~90 days\nconst TTL_MS = 90 * 24 * 60 * 60 * 1000;\n\nfunction setCookie(name: string, value: string, ttlInMs: number) {\n const d = new Date();\n d.setTime(d.getTime() + ttlInMs);\n const expires = `expires=${d.toUTCString()}`;\n document.cookie = `${name}=${value}; ${expires}; path=/; SameSite=Lax; Secure`;\n}\n\n/** Extract the raw fbclid portion from a formatted fbc string (fb.1.ts.FBCLID) */\nfunction extractFbclid(fbc: string): string | undefined {\n // fb.<subdomainIndex>.<creationTime>.<fbclid>\n const parts = fbc.split('.');\n return parts.length >= 4 ? parts.slice(3).join('.') : undefined;\n}\n\n/**\n * Persist a click-id value across cookie + localStorage.\n * - cookie: readable by third-party SDKs (e.g. Meta Pixel)\n * - localStorage (via expiringStorage): survives Safari ITP JS-cookie caps\n *\n * If only one store has the value, sync it to the other.\n */\nfunction persist(\n cookieName: string,\n storageKey: string,\n cookieValue: string | undefined,\n newValue: string | undefined\n) {\n if (newValue) {\n setCookie(cookieName, newValue, TTL_MS);\n expiringStorage.setItem(storageKey, newValue, TTL_MS);\n } else {\n const stored = expiringStorage.getItem<string>(storageKey);\n if (cookieValue && !stored) {\n // cookie → localStorage: back up before ITP wipes the cookie\n expiringStorage.setItem(storageKey, cookieValue, TTL_MS);\n } else if (!cookieValue && stored) {\n // localStorage → cookie: restore so third-party SDKs (Meta Pixel) can read it\n setCookie(cookieName, stored, TTL_MS);\n }\n }\n}\n\n// todo: do not set tracking cookies before the user has granted consent where required.\n// reference: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/#3--store-clickid\n// reference: https://watsspace.com/blog/meta-conversions-api-fbc-and-fbp-parameters/\nexport function useClickIdPersistence() {\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n const parsed = parseCookie(document.cookie);\n\n // --- Meta fbc ---\n const fbclid = params.get('fbclid');\n const existingFbc = parsed._fbc ?? expiringStorage.getItem<string>(keys.fbc);\n // Only build a new fbc if the fbclid actually changed (preserve original creationTime otherwise).\n const fbclidChanged = fbclid && extractFbclid(existingFbc ?? '') !== fbclid;\n const newFbc = fbclidChanged ? `fb.1.${Date.now()}.${fbclid}` : undefined;\n\n persist('_fbc', keys.fbc, parsed._fbc, newFbc);\n\n // Also persist raw fbclid so the server-side Conversions API fallback\n // (fbc reconstruction from fbclid) works even after SPA navigation.\n if (fbclid) {\n expiringStorage.setItem(keys.fbclid, fbclid, TTL_MS);\n }\n\n // --- Reddit rdt_cid ---\n const rdt_cid = params.get('rdt_cid');\n persist('_rdt_cid', keys.rdt_cid, parsed._rdt_cid, rdt_cid ?? undefined);\n }, []);\n}\n"],"mappings":";AAAA,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;AAC1B,SAAS,YAAY;AAGrB,IAAM,SAAS,KAAK,KAAK,KAAK,KAAK;AAEnC,SAAS,UAAU,MAAc,OAAe,SAAiB;AAC/D,QAAM,IAAI,oBAAI,KAAK;AACnB,IAAE,QAAQ,EAAE,QAAQ,IAAI,OAAO;AAC/B,QAAM,UAAU,WAAW,EAAE,YAAY,CAAC;AAC1C,WAAS,SAAS,GAAG,IAAI,IAAI,KAAK,KAAK,OAAO;AAChD;AAGA,SAAS,cAAc,KAAiC;AAEtD,QAAM,QAAQ,IAAI,MAAM,GAAG;AAC3B,SAAO,MAAM,UAAU,IAAI,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI;AACxD;AASA,SAAS,QACP,YACA,YACA,aACA,UACA;AACA,MAAI,UAAU;AACZ,cAAU,YAAY,UAAU,MAAM;AACtC,oBAAgB,QAAQ,YAAY,UAAU,MAAM;AAAA,EACtD,OAAO;AACL,UAAM,SAAS,gBAAgB,QAAgB,UAAU;AACzD,QAAI,eAAe,CAAC,QAAQ;AAE1B,sBAAgB,QAAQ,YAAY,aAAa,MAAM;AAAA,IACzD,WAAW,CAAC,eAAe,QAAQ;AAEjC,gBAAU,YAAY,QAAQ,MAAM;AAAA,IACtC;AAAA,EACF;AACF;AAKO,SAAS,wBAAwB;AACtC,YAAU,MAAM;AACd,UAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,UAAM,SAAS,YAAY,SAAS,MAAM;AAG1C,UAAM,SAAS,OAAO,IAAI,QAAQ;AAClC,UAAM,cAAc,OAAO,QAAQ,gBAAgB,QAAgB,KAAK,GAAG;AAE3E,UAAM,gBAAgB,UAAU,cAAc,eAAe,EAAE,MAAM;AACrE,UAAM,SAAS,gBAAgB,QAAQ,KAAK,IAAI,CAAC,IAAI,MAAM,KAAK;AAEhE,YAAQ,QAAQ,KAAK,KAAK,OAAO,MAAM,MAAM;AAI7C,QAAI,QAAQ;AACV,sBAAgB,QAAQ,KAAK,QAAQ,QAAQ,MAAM;AAAA,IACrD;AAGA,UAAM,UAAU,OAAO,IAAI,SAAS;AACpC,YAAQ,YAAY,KAAK,SAAS,OAAO,UAAU,WAAW,MAAS;AAAA,EACzE,GAAG,CAAC,CAAC;AACP;","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -30,6 +30,7 @@ __export(index_exports, {
|
|
|
30
30
|
createVisitorSchema: () => import_schema.createVisitorSchema,
|
|
31
31
|
getLink: () => import_link.getLink,
|
|
32
32
|
getVisitor: () => import_visitor.getVisitor,
|
|
33
|
+
sendBeacon: () => import_track.sendBeacon,
|
|
33
34
|
sendFeedback: () => import_feedback.sendFeedback,
|
|
34
35
|
setVisitor: () => import_visitor.setVisitor,
|
|
35
36
|
setupAnalytics: () => import_setup.setupAnalytics,
|
|
@@ -60,6 +61,7 @@ var import_use_track_impression = require("./hooks/use-track-impression.cjs");
|
|
|
60
61
|
createVisitorSchema,
|
|
61
62
|
getLink,
|
|
62
63
|
getVisitor,
|
|
64
|
+
sendBeacon,
|
|
63
65
|
sendFeedback,
|
|
64
66
|
setVisitor,
|
|
65
67
|
setupAnalytics,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { setupAnalytics } from './setup/index';\nexport { track, trackAsync } from './track/index';\nexport { getVisitor, setVisitor } from './visitor/index';\nexport { sendFeedback } from './feedback/index';\nexport { createLink, getLink, type Link } from './link/index';\nexport {\n ALL_PLATFORMS,\n ALL_ENVIRONMENTS,\n createTrackEventSchemaV1,\n createTrackEventSchema,\n createVisitorSchema,\n updateVisitorSchema,\n createFeedbackSchema,\n createLinkSchema,\n type CreateFeedbackDTO,\n type CreateLinkDTO,\n} from './schema/index';\nexport { stripeMinorUnits } from './utils/stripe';\nexport { useTrackImpression } from './hooks/use-track-impression';\n\nexport type {\n Platform,\n Environment,\n TrackTags,\n TrackProperties,\n AllowedPropertyValues,\n UserProvidedData,\n} from './track/types';\nexport type { VisitorProperties } from './visitor/types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA+B;AAC/B,
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { setupAnalytics } from './setup/index';\nexport { track, trackAsync, sendBeacon } from './track/index';\nexport { getVisitor, setVisitor } from './visitor/index';\nexport { sendFeedback } from './feedback/index';\nexport { createLink, getLink, type Link } from './link/index';\nexport {\n ALL_PLATFORMS,\n ALL_ENVIRONMENTS,\n createTrackEventSchemaV1,\n createTrackEventSchema,\n createVisitorSchema,\n updateVisitorSchema,\n createFeedbackSchema,\n createLinkSchema,\n type CreateFeedbackDTO,\n type CreateLinkDTO,\n} from './schema/index';\nexport { stripeMinorUnits } from './utils/stripe';\nexport { useTrackImpression } from './hooks/use-track-impression';\n\nexport type {\n Platform,\n Environment,\n TrackTags,\n TrackProperties,\n AllowedPropertyValues,\n UserProvidedData,\n} from './track/types';\nexport type { VisitorProperties } from './visitor/types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA+B;AAC/B,mBAA8C;AAC9C,qBAAuC;AACvC,sBAA6B;AAC7B,kBAA+C;AAC/C,oBAWO;AACP,oBAAiC;AACjC,kCAAmC;","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { setupAnalytics } from './setup/index.cjs';
|
|
2
|
-
export { track, trackAsync } from './track/index.cjs';
|
|
2
|
+
export { sendBeacon, track, trackAsync } from './track/index.cjs';
|
|
3
3
|
export { getVisitor, setVisitor } from './visitor/index.cjs';
|
|
4
4
|
export { sendFeedback } from './feedback/index.cjs';
|
|
5
5
|
export { Link, createLink, getLink } from './link/index.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { setupAnalytics } from './setup/index.js';
|
|
2
|
-
export { track, trackAsync } from './track/index.js';
|
|
2
|
+
export { sendBeacon, track, trackAsync } from './track/index.js';
|
|
3
3
|
export { getVisitor, setVisitor } from './visitor/index.js';
|
|
4
4
|
export { sendFeedback } from './feedback/index.js';
|
|
5
5
|
export { Link, createLink, getLink } from './link/index.js';
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
2
|
import { setupAnalytics } from "./setup/index.mjs";
|
|
3
|
-
import { track, trackAsync } from "./track/index.mjs";
|
|
3
|
+
import { track, trackAsync, sendBeacon } from "./track/index.mjs";
|
|
4
4
|
import { getVisitor, setVisitor } from "./visitor/index.mjs";
|
|
5
5
|
import { sendFeedback } from "./feedback/index.mjs";
|
|
6
6
|
import { createLink, getLink } from "./link/index.mjs";
|
|
@@ -27,6 +27,7 @@ export {
|
|
|
27
27
|
createVisitorSchema,
|
|
28
28
|
getLink,
|
|
29
29
|
getVisitor,
|
|
30
|
+
sendBeacon,
|
|
30
31
|
sendFeedback,
|
|
31
32
|
setVisitor,
|
|
32
33
|
setupAnalytics,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { setupAnalytics } from './setup/index';\nexport { track, trackAsync } from './track/index';\nexport { getVisitor, setVisitor } from './visitor/index';\nexport { sendFeedback } from './feedback/index';\nexport { createLink, getLink, type Link } from './link/index';\nexport {\n ALL_PLATFORMS,\n ALL_ENVIRONMENTS,\n createTrackEventSchemaV1,\n createTrackEventSchema,\n createVisitorSchema,\n updateVisitorSchema,\n createFeedbackSchema,\n createLinkSchema,\n type CreateFeedbackDTO,\n type CreateLinkDTO,\n} from './schema/index';\nexport { stripeMinorUnits } from './utils/stripe';\nexport { useTrackImpression } from './hooks/use-track-impression';\n\nexport type {\n Platform,\n Environment,\n TrackTags,\n TrackProperties,\n AllowedPropertyValues,\n UserProvidedData,\n} from './track/types';\nexport type { VisitorProperties } from './visitor/types';\n"],"mappings":";AAAA,SAAS,sBAAsB;AAC/B,SAAS,OAAO,kBAAkB;
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { setupAnalytics } from './setup/index';\nexport { track, trackAsync, sendBeacon } from './track/index';\nexport { getVisitor, setVisitor } from './visitor/index';\nexport { sendFeedback } from './feedback/index';\nexport { createLink, getLink, type Link } from './link/index';\nexport {\n ALL_PLATFORMS,\n ALL_ENVIRONMENTS,\n createTrackEventSchemaV1,\n createTrackEventSchema,\n createVisitorSchema,\n updateVisitorSchema,\n createFeedbackSchema,\n createLinkSchema,\n type CreateFeedbackDTO,\n type CreateLinkDTO,\n} from './schema/index';\nexport { stripeMinorUnits } from './utils/stripe';\nexport { useTrackImpression } from './hooks/use-track-impression';\n\nexport type {\n Platform,\n Environment,\n TrackTags,\n TrackProperties,\n AllowedPropertyValues,\n UserProvidedData,\n} from './track/types';\nexport type { VisitorProperties } from './visitor/types';\n"],"mappings":";AAAA,SAAS,sBAAsB;AAC/B,SAAS,OAAO,YAAY,kBAAkB;AAC9C,SAAS,YAAY,kBAAkB;AACvC,SAAS,oBAAoB;AAC7B,SAAS,YAAY,eAA0B;AAC/C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,wBAAwB;AACjC,SAAS,0BAA0B;","names":[]}
|
package/dist/native/posthog.cjs
CHANGED
|
@@ -1,2 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/native/posthog.ts
|
|
21
|
+
var posthog_exports = {};
|
|
22
|
+
__export(posthog_exports, {
|
|
23
|
+
setupPosthog: () => setupPosthog
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(posthog_exports);
|
|
26
|
+
function setupPosthog() {
|
|
27
|
+
}
|
|
28
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
29
|
+
0 && (module.exports = {
|
|
30
|
+
setupPosthog
|
|
31
|
+
});
|
|
2
32
|
//# sourceMappingURL=posthog.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/native/posthog.ts"],"sourcesContent":["export function setupPosthog() {}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,SAAS,eAAe;AAAC;","names":[]}
|
package/dist/native/posthog.d.ts
CHANGED
package/dist/native/posthog.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/native/posthog.ts"],"sourcesContent":["export function setupPosthog() {}\n"],"mappings":";AAAO,SAAS,eAAe;AAAC;","names":[]}
|
package/dist/schema/index.d.cts
CHANGED
|
@@ -301,42 +301,15 @@ declare const createFeedbackSchema: z.ZodMiniObject<{
|
|
|
301
301
|
* @see https://support.google.com/analytics/answer/10917952
|
|
302
302
|
* */
|
|
303
303
|
declare const createLinkSchema: z.ZodMiniObject<{
|
|
304
|
-
/** The URL that the user is redirected to. */
|
|
305
304
|
url: z.ZodMiniURL;
|
|
306
|
-
/**
|
|
307
|
-
* Campaign ID. Used to identify a specific campaign or promotion. This is a required key for GA4
|
|
308
|
-
* data import. Use the same IDs that you use when uploading campaign cost data.
|
|
309
|
-
*/
|
|
310
305
|
utm_id: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<string | undefined, string>>>;
|
|
311
|
-
/** Referrer, for example: google, newsletter4, billboard */
|
|
312
306
|
utm_source: z.ZodMiniString<string>;
|
|
313
|
-
/** Marketing medium, for example: cpc, banner, email */
|
|
314
307
|
utm_medium: z.ZodMiniString<string>;
|
|
315
|
-
/** Product, slogan, promo code, for example: spring_sale */
|
|
316
308
|
utm_campaign: z.ZodMiniString<string>;
|
|
317
|
-
/** Paid keyword */
|
|
318
309
|
utm_term: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<string | undefined, string>>>;
|
|
319
|
-
/**
|
|
320
|
-
* Use to differentiate creatives. For example, if you have two call-to-action links within the
|
|
321
|
-
* same email message, you can use utm_content and set different values for each so you can tell
|
|
322
|
-
* which version is more effective.
|
|
323
|
-
*/
|
|
324
310
|
utm_content: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<string | undefined, string>>>;
|
|
325
|
-
/**
|
|
326
|
-
* The platform responsible for directing traffic to a given Analytics property (such as a buying
|
|
327
|
-
* platform that sets budgets and targeting criteria or a platform that manages organic traffic
|
|
328
|
-
* data). For example: Search Ads 360 or Display & Video 360.
|
|
329
|
-
*/
|
|
330
311
|
utm_source_platform: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<string | undefined, string>>>;
|
|
331
|
-
/**
|
|
332
|
-
* Type of creative, for example: display, native, video, search, utm_creative_format is not
|
|
333
|
-
* currently reported in Google Analytics 4 properties.
|
|
334
|
-
*/
|
|
335
312
|
utm_creative_format: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<string | undefined, string>>>;
|
|
336
|
-
/**
|
|
337
|
-
* Targeting criteria applied to a campaign, for example: remarketing, prospecting,
|
|
338
|
-
* utm_marketing_tactic is not currently reported in Google Analytics 4 properties.
|
|
339
|
-
* */
|
|
340
313
|
utm_marketing_tactic: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<string | undefined, string>>>;
|
|
341
314
|
}, z.core.$strip>;
|
|
342
315
|
type CreateTrackEventDTO = z.output<typeof createTrackEventSchema>;
|
package/dist/schema/index.d.ts
CHANGED
|
@@ -301,42 +301,15 @@ declare const createFeedbackSchema: z.ZodMiniObject<{
|
|
|
301
301
|
* @see https://support.google.com/analytics/answer/10917952
|
|
302
302
|
* */
|
|
303
303
|
declare const createLinkSchema: z.ZodMiniObject<{
|
|
304
|
-
/** The URL that the user is redirected to. */
|
|
305
304
|
url: z.ZodMiniURL;
|
|
306
|
-
/**
|
|
307
|
-
* Campaign ID. Used to identify a specific campaign or promotion. This is a required key for GA4
|
|
308
|
-
* data import. Use the same IDs that you use when uploading campaign cost data.
|
|
309
|
-
*/
|
|
310
305
|
utm_id: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<string | undefined, string>>>;
|
|
311
|
-
/** Referrer, for example: google, newsletter4, billboard */
|
|
312
306
|
utm_source: z.ZodMiniString<string>;
|
|
313
|
-
/** Marketing medium, for example: cpc, banner, email */
|
|
314
307
|
utm_medium: z.ZodMiniString<string>;
|
|
315
|
-
/** Product, slogan, promo code, for example: spring_sale */
|
|
316
308
|
utm_campaign: z.ZodMiniString<string>;
|
|
317
|
-
/** Paid keyword */
|
|
318
309
|
utm_term: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<string | undefined, string>>>;
|
|
319
|
-
/**
|
|
320
|
-
* Use to differentiate creatives. For example, if you have two call-to-action links within the
|
|
321
|
-
* same email message, you can use utm_content and set different values for each so you can tell
|
|
322
|
-
* which version is more effective.
|
|
323
|
-
*/
|
|
324
310
|
utm_content: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<string | undefined, string>>>;
|
|
325
|
-
/**
|
|
326
|
-
* The platform responsible for directing traffic to a given Analytics property (such as a buying
|
|
327
|
-
* platform that sets budgets and targeting criteria or a platform that manages organic traffic
|
|
328
|
-
* data). For example: Search Ads 360 or Display & Video 360.
|
|
329
|
-
*/
|
|
330
311
|
utm_source_platform: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<string | undefined, string>>>;
|
|
331
|
-
/**
|
|
332
|
-
* Type of creative, for example: display, native, video, search, utm_creative_format is not
|
|
333
|
-
* currently reported in Google Analytics 4 properties.
|
|
334
|
-
*/
|
|
335
312
|
utm_creative_format: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<string | undefined, string>>>;
|
|
336
|
-
/**
|
|
337
|
-
* Targeting criteria applied to a campaign, for example: remarketing, prospecting,
|
|
338
|
-
* utm_marketing_tactic is not currently reported in Google Analytics 4 properties.
|
|
339
|
-
* */
|
|
340
313
|
utm_marketing_tactic: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<string | undefined, string>>>;
|
|
341
314
|
}, z.core.$strip>;
|
|
342
315
|
type CreateTrackEventDTO = z.output<typeof createTrackEventSchema>;
|
package/dist/web/index.cjs
CHANGED
|
@@ -83,7 +83,7 @@ async function getTags() {
|
|
|
83
83
|
// meta ads
|
|
84
84
|
fbc: parsed._fbc ?? import_utils.expiringStorage.getItem(import_storage.keys.fbc) ?? void 0,
|
|
85
85
|
fbp: parsed._fbp,
|
|
86
|
-
fbclid: params.get("fbclid") ?? void 0,
|
|
86
|
+
fbclid: params.get("fbclid") ?? import_utils.expiringStorage.getItem(import_storage.keys.fbclid) ?? void 0,
|
|
87
87
|
ad_id: params.get("ad_id") ?? void 0,
|
|
88
88
|
ad_name: params.get("ad_name") ?? void 0,
|
|
89
89
|
adset_id: params.get("adset_id") ?? void 0,
|
package/dist/web/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/web/index.ts"],"sourcesContent":["import { expiringStorage } from '@shware/utils';\nimport Bowser from 'bowser';\nimport { parseCookie } from 'cookie';\nimport { v4 as uuidv4 } from 'uuid';\nimport { keys } from '../constants/storage';\nimport { getLink } from '../link/index';\nimport { type Storage, cache, config } from '../setup/index';\nimport type { TrackTags } from '../track/types';\n\nexport function getDeviceId() {\n const cached = localStorage.getItem(keys.device_id);\n if (cached) return cached;\n const id = crypto?.randomUUID ? crypto.randomUUID() : uuidv4();\n localStorage.setItem(keys.device_id, id);\n return id;\n}\n\nexport async function getTags() {\n const parser = Bowser.getParser(window.navigator.userAgent);\n const params = new URLSearchParams(window.location.search);\n const os = parser.getOS();\n const browser = parser.getBrowser();\n const platform = parser.getPlatform();\n const parsed = parseCookie(document.cookie);\n\n const linkId = params.get('s');\n const link = linkId ? await getLink(linkId) : null;\n\n const tags: TrackTags = {\n os: `${os.name} ${os.version}`,\n os_name: os.name,\n os_version: os.version,\n browser: `${browser.name} ${browser.version}`,\n browser_name: browser.name,\n browser_version: browser.version,\n platform: 'web',\n device: platform.model,\n device_id: getDeviceId(),\n device_type: platform.type,\n device_vendor: platform.vendor,\n device_pixel_ratio: window.devicePixelRatio,\n screen_width: window.screen.width,\n screen_height: window.screen.height,\n screen_resolution: `${window.screen.width}x${window.screen.height}`,\n release: config.release,\n language: navigator.language,\n time_zone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n environment: process.env.NODE_ENV === 'development' ? 'development' : 'production',\n source: 'web',\n source_url: window.location.origin + window.location.pathname,\n // meta ads\n fbc: parsed._fbc ?? expiringStorage.getItem<string>(keys.fbc) ?? undefined,\n fbp: parsed._fbp,\n fbclid: params.get('fbclid') ?? undefined,\n ad_id: params.get('ad_id') ?? undefined,\n ad_name: params.get('ad_name') ?? undefined,\n adset_id: params.get('adset_id') ?? undefined,\n adset_name: params.get('adset_name') ?? undefined,\n campaign_id: params.get('campaign_id') ?? undefined,\n campaign_name: params.get('campaign_name') ?? undefined,\n placement: params.get('placement') ?? undefined,\n site_source_name: params.get('site_source_name') ?? undefined,\n // google ads\n gclid: params.get('gclid') ?? undefined,\n gclsrc: params.get('gclsrc') ?? undefined,\n gad_source: params.get('gad_source') ?? undefined,\n gad_campaignid: params.get('gad_campaignid') ?? undefined,\n // reddit ads\n rdt_cid:\n params.get('rdt_cid') ??\n parsed._rdt_cid ??\n expiringStorage.getItem<string>(keys.rdt_cid) ??\n undefined,\n rdt_uuid: parsed._rdt_uuid,\n // linkedin ads: get click id from url params or first-party cookie\n li_fat_id: params.get('li_fat_id') ?? parsed.li_fat_id ?? undefined,\n // click ids\n dclid: params.get('dclid') ?? undefined,\n ko_click_id: params.get('ko_click_id') ?? undefined,\n msclkid: params.get('msclkid') ?? undefined,\n sccid: params.get('sccid') ?? undefined,\n ttclid: params.get('ttclid') ?? undefined,\n twclid: params.get('twclid') ?? undefined,\n wbraid: params.get('wbraid') ?? undefined,\n yclid: params.get('yclid') ?? undefined,\n // utm params\n utm_source: link?.utm_source ?? params.get('utm_source') ?? undefined,\n utm_medium: link?.utm_medium ?? params.get('utm_medium') ?? undefined,\n utm_campaign: link?.utm_campaign ?? params.get('utm_campaign') ?? undefined,\n utm_term: link?.utm_term ?? params.get('utm_term') ?? undefined,\n utm_content: link?.utm_content ?? params.get('utm_content') ?? undefined,\n utm_id: link?.utm_id ?? params.get('utm_id') ?? undefined,\n utm_source_platform:\n link?.utm_source_platform ?? params.get('utm_source_platform') ?? undefined,\n utm_creative_format:\n link?.utm_creative_format ?? params.get('utm_creative_format') ?? undefined,\n utm_marketing_tactic:\n link?.utm_marketing_tactic ?? params.get('utm_marketing_tactic') ?? undefined,\n };\n\n cache.tags = tags;\n return tags;\n}\n\nconst map = new Map<string, string>();\n\nexport const storage: Storage = {\n getItem: (key) => {\n try {\n return localStorage.getItem(key);\n } catch {\n console.error('localStorage is not available');\n return map.get(key) ?? null;\n }\n },\n setItem: (key, value) => {\n try {\n localStorage.setItem(key, value);\n } catch {\n console.error('localStorage is not available');\n map.set(key, value);\n }\n },\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAgC;AAChC,oBAAmB;AACnB,oBAA4B;AAC5B,kBAA6B;AAC7B,qBAAqB;AACrB,kBAAwB;AACxB,mBAA4C;AAGrC,SAAS,cAAc;AAC5B,QAAM,SAAS,aAAa,QAAQ,oBAAK,SAAS;AAClD,MAAI,OAAQ,QAAO;AACnB,QAAM,MAAK,iCAAQ,cAAa,OAAO,WAAW,QAAI,YAAAA,IAAO;AAC7D,eAAa,QAAQ,oBAAK,WAAW,EAAE;AACvC,SAAO;AACT;AAEA,eAAsB,UAAU;AAC9B,QAAM,SAAS,cAAAC,QAAO,UAAU,OAAO,UAAU,SAAS;AAC1D,QAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,QAAM,KAAK,OAAO,MAAM;AACxB,QAAM,UAAU,OAAO,WAAW;AAClC,QAAM,WAAW,OAAO,YAAY;AACpC,QAAM,aAAS,2BAAY,SAAS,MAAM;AAE1C,QAAM,SAAS,OAAO,IAAI,GAAG;AAC7B,QAAM,OAAO,SAAS,UAAM,qBAAQ,MAAM,IAAI;AAE9C,QAAM,OAAkB;AAAA,IACtB,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,OAAO;AAAA,IAC5B,SAAS,GAAG;AAAA,IACZ,YAAY,GAAG;AAAA,IACf,SAAS,GAAG,QAAQ,IAAI,IAAI,QAAQ,OAAO;AAAA,IAC3C,cAAc,QAAQ;AAAA,IACtB,iBAAiB,QAAQ;AAAA,IACzB,UAAU;AAAA,IACV,QAAQ,SAAS;AAAA,IACjB,WAAW,YAAY;AAAA,IACvB,aAAa,SAAS;AAAA,IACtB,eAAe,SAAS;AAAA,IACxB,oBAAoB,OAAO;AAAA,IAC3B,cAAc,OAAO,OAAO;AAAA,IAC5B,eAAe,OAAO,OAAO;AAAA,IAC7B,mBAAmB,GAAG,OAAO,OAAO,KAAK,IAAI,OAAO,OAAO,MAAM;AAAA,IACjE,SAAS,oBAAO;AAAA,IAChB,UAAU,UAAU;AAAA,IACpB,WAAW,KAAK,eAAe,EAAE,gBAAgB,EAAE;AAAA,IACnD,aAAa,QAAQ,IAAI,aAAa,gBAAgB,gBAAgB;AAAA,IACtE,QAAQ;AAAA,IACR,YAAY,OAAO,SAAS,SAAS,OAAO,SAAS;AAAA;AAAA,IAErD,KAAK,OAAO,QAAQ,6BAAgB,QAAgB,oBAAK,GAAG,KAAK;AAAA,IACjE,KAAK,OAAO;AAAA,IACZ,QAAQ,OAAO,IAAI,QAAQ,KAAK;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/web/index.ts"],"sourcesContent":["import { expiringStorage } from '@shware/utils';\nimport Bowser from 'bowser';\nimport { parseCookie } from 'cookie';\nimport { v4 as uuidv4 } from 'uuid';\nimport { keys } from '../constants/storage';\nimport { getLink } from '../link/index';\nimport { type Storage, cache, config } from '../setup/index';\nimport type { TrackTags } from '../track/types';\n\nexport function getDeviceId() {\n const cached = localStorage.getItem(keys.device_id);\n if (cached) return cached;\n const id = crypto?.randomUUID ? crypto.randomUUID() : uuidv4();\n localStorage.setItem(keys.device_id, id);\n return id;\n}\n\nexport async function getTags() {\n const parser = Bowser.getParser(window.navigator.userAgent);\n const params = new URLSearchParams(window.location.search);\n const os = parser.getOS();\n const browser = parser.getBrowser();\n const platform = parser.getPlatform();\n const parsed = parseCookie(document.cookie);\n\n const linkId = params.get('s');\n const link = linkId ? await getLink(linkId) : null;\n\n const tags: TrackTags = {\n os: `${os.name} ${os.version}`,\n os_name: os.name,\n os_version: os.version,\n browser: `${browser.name} ${browser.version}`,\n browser_name: browser.name,\n browser_version: browser.version,\n platform: 'web',\n device: platform.model,\n device_id: getDeviceId(),\n device_type: platform.type,\n device_vendor: platform.vendor,\n device_pixel_ratio: window.devicePixelRatio,\n screen_width: window.screen.width,\n screen_height: window.screen.height,\n screen_resolution: `${window.screen.width}x${window.screen.height}`,\n release: config.release,\n language: navigator.language,\n time_zone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n environment: process.env.NODE_ENV === 'development' ? 'development' : 'production',\n source: 'web',\n source_url: window.location.origin + window.location.pathname,\n // meta ads\n fbc: parsed._fbc ?? expiringStorage.getItem<string>(keys.fbc) ?? undefined,\n fbp: parsed._fbp,\n fbclid: params.get('fbclid') ?? expiringStorage.getItem<string>(keys.fbclid) ?? undefined,\n ad_id: params.get('ad_id') ?? undefined,\n ad_name: params.get('ad_name') ?? undefined,\n adset_id: params.get('adset_id') ?? undefined,\n adset_name: params.get('adset_name') ?? undefined,\n campaign_id: params.get('campaign_id') ?? undefined,\n campaign_name: params.get('campaign_name') ?? undefined,\n placement: params.get('placement') ?? undefined,\n site_source_name: params.get('site_source_name') ?? undefined,\n // google ads\n gclid: params.get('gclid') ?? undefined,\n gclsrc: params.get('gclsrc') ?? undefined,\n gad_source: params.get('gad_source') ?? undefined,\n gad_campaignid: params.get('gad_campaignid') ?? undefined,\n // reddit ads\n rdt_cid:\n params.get('rdt_cid') ??\n parsed._rdt_cid ??\n expiringStorage.getItem<string>(keys.rdt_cid) ??\n undefined,\n rdt_uuid: parsed._rdt_uuid,\n // linkedin ads: get click id from url params or first-party cookie\n li_fat_id: params.get('li_fat_id') ?? parsed.li_fat_id ?? undefined,\n // click ids\n dclid: params.get('dclid') ?? undefined,\n ko_click_id: params.get('ko_click_id') ?? undefined,\n msclkid: params.get('msclkid') ?? undefined,\n sccid: params.get('sccid') ?? undefined,\n ttclid: params.get('ttclid') ?? undefined,\n twclid: params.get('twclid') ?? undefined,\n wbraid: params.get('wbraid') ?? undefined,\n yclid: params.get('yclid') ?? undefined,\n // utm params\n utm_source: link?.utm_source ?? params.get('utm_source') ?? undefined,\n utm_medium: link?.utm_medium ?? params.get('utm_medium') ?? undefined,\n utm_campaign: link?.utm_campaign ?? params.get('utm_campaign') ?? undefined,\n utm_term: link?.utm_term ?? params.get('utm_term') ?? undefined,\n utm_content: link?.utm_content ?? params.get('utm_content') ?? undefined,\n utm_id: link?.utm_id ?? params.get('utm_id') ?? undefined,\n utm_source_platform:\n link?.utm_source_platform ?? params.get('utm_source_platform') ?? undefined,\n utm_creative_format:\n link?.utm_creative_format ?? params.get('utm_creative_format') ?? undefined,\n utm_marketing_tactic:\n link?.utm_marketing_tactic ?? params.get('utm_marketing_tactic') ?? undefined,\n };\n\n cache.tags = tags;\n return tags;\n}\n\nconst map = new Map<string, string>();\n\nexport const storage: Storage = {\n getItem: (key) => {\n try {\n return localStorage.getItem(key);\n } catch {\n console.error('localStorage is not available');\n return map.get(key) ?? null;\n }\n },\n setItem: (key, value) => {\n try {\n localStorage.setItem(key, value);\n } catch {\n console.error('localStorage is not available');\n map.set(key, value);\n }\n },\n};\n"],"mappings":"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","names":["uuidv4","Bowser"]}
|
package/dist/web/index.mjs
CHANGED
|
@@ -47,7 +47,7 @@ async function getTags() {
|
|
|
47
47
|
// meta ads
|
|
48
48
|
fbc: parsed._fbc ?? expiringStorage.getItem(keys.fbc) ?? void 0,
|
|
49
49
|
fbp: parsed._fbp,
|
|
50
|
-
fbclid: params.get("fbclid") ?? void 0,
|
|
50
|
+
fbclid: params.get("fbclid") ?? expiringStorage.getItem(keys.fbclid) ?? void 0,
|
|
51
51
|
ad_id: params.get("ad_id") ?? void 0,
|
|
52
52
|
ad_name: params.get("ad_name") ?? void 0,
|
|
53
53
|
adset_id: params.get("adset_id") ?? void 0,
|
package/dist/web/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/web/index.ts"],"sourcesContent":["import { expiringStorage } from '@shware/utils';\nimport Bowser from 'bowser';\nimport { parseCookie } from 'cookie';\nimport { v4 as uuidv4 } from 'uuid';\nimport { keys } from '../constants/storage';\nimport { getLink } from '../link/index';\nimport { type Storage, cache, config } from '../setup/index';\nimport type { TrackTags } from '../track/types';\n\nexport function getDeviceId() {\n const cached = localStorage.getItem(keys.device_id);\n if (cached) return cached;\n const id = crypto?.randomUUID ? crypto.randomUUID() : uuidv4();\n localStorage.setItem(keys.device_id, id);\n return id;\n}\n\nexport async function getTags() {\n const parser = Bowser.getParser(window.navigator.userAgent);\n const params = new URLSearchParams(window.location.search);\n const os = parser.getOS();\n const browser = parser.getBrowser();\n const platform = parser.getPlatform();\n const parsed = parseCookie(document.cookie);\n\n const linkId = params.get('s');\n const link = linkId ? await getLink(linkId) : null;\n\n const tags: TrackTags = {\n os: `${os.name} ${os.version}`,\n os_name: os.name,\n os_version: os.version,\n browser: `${browser.name} ${browser.version}`,\n browser_name: browser.name,\n browser_version: browser.version,\n platform: 'web',\n device: platform.model,\n device_id: getDeviceId(),\n device_type: platform.type,\n device_vendor: platform.vendor,\n device_pixel_ratio: window.devicePixelRatio,\n screen_width: window.screen.width,\n screen_height: window.screen.height,\n screen_resolution: `${window.screen.width}x${window.screen.height}`,\n release: config.release,\n language: navigator.language,\n time_zone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n environment: process.env.NODE_ENV === 'development' ? 'development' : 'production',\n source: 'web',\n source_url: window.location.origin + window.location.pathname,\n // meta ads\n fbc: parsed._fbc ?? expiringStorage.getItem<string>(keys.fbc) ?? undefined,\n fbp: parsed._fbp,\n fbclid: params.get('fbclid') ?? undefined,\n ad_id: params.get('ad_id') ?? undefined,\n ad_name: params.get('ad_name') ?? undefined,\n adset_id: params.get('adset_id') ?? undefined,\n adset_name: params.get('adset_name') ?? undefined,\n campaign_id: params.get('campaign_id') ?? undefined,\n campaign_name: params.get('campaign_name') ?? undefined,\n placement: params.get('placement') ?? undefined,\n site_source_name: params.get('site_source_name') ?? undefined,\n // google ads\n gclid: params.get('gclid') ?? undefined,\n gclsrc: params.get('gclsrc') ?? undefined,\n gad_source: params.get('gad_source') ?? undefined,\n gad_campaignid: params.get('gad_campaignid') ?? undefined,\n // reddit ads\n rdt_cid:\n params.get('rdt_cid') ??\n parsed._rdt_cid ??\n expiringStorage.getItem<string>(keys.rdt_cid) ??\n undefined,\n rdt_uuid: parsed._rdt_uuid,\n // linkedin ads: get click id from url params or first-party cookie\n li_fat_id: params.get('li_fat_id') ?? parsed.li_fat_id ?? undefined,\n // click ids\n dclid: params.get('dclid') ?? undefined,\n ko_click_id: params.get('ko_click_id') ?? undefined,\n msclkid: params.get('msclkid') ?? undefined,\n sccid: params.get('sccid') ?? undefined,\n ttclid: params.get('ttclid') ?? undefined,\n twclid: params.get('twclid') ?? undefined,\n wbraid: params.get('wbraid') ?? undefined,\n yclid: params.get('yclid') ?? undefined,\n // utm params\n utm_source: link?.utm_source ?? params.get('utm_source') ?? undefined,\n utm_medium: link?.utm_medium ?? params.get('utm_medium') ?? undefined,\n utm_campaign: link?.utm_campaign ?? params.get('utm_campaign') ?? undefined,\n utm_term: link?.utm_term ?? params.get('utm_term') ?? undefined,\n utm_content: link?.utm_content ?? params.get('utm_content') ?? undefined,\n utm_id: link?.utm_id ?? params.get('utm_id') ?? undefined,\n utm_source_platform:\n link?.utm_source_platform ?? params.get('utm_source_platform') ?? undefined,\n utm_creative_format:\n link?.utm_creative_format ?? params.get('utm_creative_format') ?? undefined,\n utm_marketing_tactic:\n link?.utm_marketing_tactic ?? params.get('utm_marketing_tactic') ?? undefined,\n };\n\n cache.tags = tags;\n return tags;\n}\n\nconst map = new Map<string, string>();\n\nexport const storage: Storage = {\n getItem: (key) => {\n try {\n return localStorage.getItem(key);\n } catch {\n console.error('localStorage is not available');\n return map.get(key) ?? null;\n }\n },\n setItem: (key, value) => {\n try {\n localStorage.setItem(key, value);\n } catch {\n console.error('localStorage is not available');\n map.set(key, value);\n }\n },\n};\n"],"mappings":";AAAA,SAAS,uBAAuB;AAChC,OAAO,YAAY;AACnB,SAAS,mBAAmB;AAC5B,SAAS,MAAM,cAAc;AAC7B,SAAS,YAAY;AACrB,SAAS,eAAe;AACxB,SAAuB,OAAO,cAAc;AAGrC,SAAS,cAAc;AAC5B,QAAM,SAAS,aAAa,QAAQ,KAAK,SAAS;AAClD,MAAI,OAAQ,QAAO;AACnB,QAAM,MAAK,iCAAQ,cAAa,OAAO,WAAW,IAAI,OAAO;AAC7D,eAAa,QAAQ,KAAK,WAAW,EAAE;AACvC,SAAO;AACT;AAEA,eAAsB,UAAU;AAC9B,QAAM,SAAS,OAAO,UAAU,OAAO,UAAU,SAAS;AAC1D,QAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,QAAM,KAAK,OAAO,MAAM;AACxB,QAAM,UAAU,OAAO,WAAW;AAClC,QAAM,WAAW,OAAO,YAAY;AACpC,QAAM,SAAS,YAAY,SAAS,MAAM;AAE1C,QAAM,SAAS,OAAO,IAAI,GAAG;AAC7B,QAAM,OAAO,SAAS,MAAM,QAAQ,MAAM,IAAI;AAE9C,QAAM,OAAkB;AAAA,IACtB,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,OAAO;AAAA,IAC5B,SAAS,GAAG;AAAA,IACZ,YAAY,GAAG;AAAA,IACf,SAAS,GAAG,QAAQ,IAAI,IAAI,QAAQ,OAAO;AAAA,IAC3C,cAAc,QAAQ;AAAA,IACtB,iBAAiB,QAAQ;AAAA,IACzB,UAAU;AAAA,IACV,QAAQ,SAAS;AAAA,IACjB,WAAW,YAAY;AAAA,IACvB,aAAa,SAAS;AAAA,IACtB,eAAe,SAAS;AAAA,IACxB,oBAAoB,OAAO;AAAA,IAC3B,cAAc,OAAO,OAAO;AAAA,IAC5B,eAAe,OAAO,OAAO;AAAA,IAC7B,mBAAmB,GAAG,OAAO,OAAO,KAAK,IAAI,OAAO,OAAO,MAAM;AAAA,IACjE,SAAS,OAAO;AAAA,IAChB,UAAU,UAAU;AAAA,IACpB,WAAW,KAAK,eAAe,EAAE,gBAAgB,EAAE;AAAA,IACnD,aAAa,QAAQ,IAAI,aAAa,gBAAgB,gBAAgB;AAAA,IACtE,QAAQ;AAAA,IACR,YAAY,OAAO,SAAS,SAAS,OAAO,SAAS;AAAA;AAAA,IAErD,KAAK,OAAO,QAAQ,gBAAgB,QAAgB,KAAK,GAAG,KAAK;AAAA,IACjE,KAAK,OAAO;AAAA,IACZ,QAAQ,OAAO,IAAI,QAAQ,KAAK;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/web/index.ts"],"sourcesContent":["import { expiringStorage } from '@shware/utils';\nimport Bowser from 'bowser';\nimport { parseCookie } from 'cookie';\nimport { v4 as uuidv4 } from 'uuid';\nimport { keys } from '../constants/storage';\nimport { getLink } from '../link/index';\nimport { type Storage, cache, config } from '../setup/index';\nimport type { TrackTags } from '../track/types';\n\nexport function getDeviceId() {\n const cached = localStorage.getItem(keys.device_id);\n if (cached) return cached;\n const id = crypto?.randomUUID ? crypto.randomUUID() : uuidv4();\n localStorage.setItem(keys.device_id, id);\n return id;\n}\n\nexport async function getTags() {\n const parser = Bowser.getParser(window.navigator.userAgent);\n const params = new URLSearchParams(window.location.search);\n const os = parser.getOS();\n const browser = parser.getBrowser();\n const platform = parser.getPlatform();\n const parsed = parseCookie(document.cookie);\n\n const linkId = params.get('s');\n const link = linkId ? await getLink(linkId) : null;\n\n const tags: TrackTags = {\n os: `${os.name} ${os.version}`,\n os_name: os.name,\n os_version: os.version,\n browser: `${browser.name} ${browser.version}`,\n browser_name: browser.name,\n browser_version: browser.version,\n platform: 'web',\n device: platform.model,\n device_id: getDeviceId(),\n device_type: platform.type,\n device_vendor: platform.vendor,\n device_pixel_ratio: window.devicePixelRatio,\n screen_width: window.screen.width,\n screen_height: window.screen.height,\n screen_resolution: `${window.screen.width}x${window.screen.height}`,\n release: config.release,\n language: navigator.language,\n time_zone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n environment: process.env.NODE_ENV === 'development' ? 'development' : 'production',\n source: 'web',\n source_url: window.location.origin + window.location.pathname,\n // meta ads\n fbc: parsed._fbc ?? expiringStorage.getItem<string>(keys.fbc) ?? undefined,\n fbp: parsed._fbp,\n fbclid: params.get('fbclid') ?? expiringStorage.getItem<string>(keys.fbclid) ?? undefined,\n ad_id: params.get('ad_id') ?? undefined,\n ad_name: params.get('ad_name') ?? undefined,\n adset_id: params.get('adset_id') ?? undefined,\n adset_name: params.get('adset_name') ?? undefined,\n campaign_id: params.get('campaign_id') ?? undefined,\n campaign_name: params.get('campaign_name') ?? undefined,\n placement: params.get('placement') ?? undefined,\n site_source_name: params.get('site_source_name') ?? undefined,\n // google ads\n gclid: params.get('gclid') ?? undefined,\n gclsrc: params.get('gclsrc') ?? undefined,\n gad_source: params.get('gad_source') ?? undefined,\n gad_campaignid: params.get('gad_campaignid') ?? undefined,\n // reddit ads\n rdt_cid:\n params.get('rdt_cid') ??\n parsed._rdt_cid ??\n expiringStorage.getItem<string>(keys.rdt_cid) ??\n undefined,\n rdt_uuid: parsed._rdt_uuid,\n // linkedin ads: get click id from url params or first-party cookie\n li_fat_id: params.get('li_fat_id') ?? parsed.li_fat_id ?? undefined,\n // click ids\n dclid: params.get('dclid') ?? undefined,\n ko_click_id: params.get('ko_click_id') ?? undefined,\n msclkid: params.get('msclkid') ?? undefined,\n sccid: params.get('sccid') ?? undefined,\n ttclid: params.get('ttclid') ?? undefined,\n twclid: params.get('twclid') ?? undefined,\n wbraid: params.get('wbraid') ?? undefined,\n yclid: params.get('yclid') ?? undefined,\n // utm params\n utm_source: link?.utm_source ?? params.get('utm_source') ?? undefined,\n utm_medium: link?.utm_medium ?? params.get('utm_medium') ?? undefined,\n utm_campaign: link?.utm_campaign ?? params.get('utm_campaign') ?? undefined,\n utm_term: link?.utm_term ?? params.get('utm_term') ?? undefined,\n utm_content: link?.utm_content ?? params.get('utm_content') ?? undefined,\n utm_id: link?.utm_id ?? params.get('utm_id') ?? undefined,\n utm_source_platform:\n link?.utm_source_platform ?? params.get('utm_source_platform') ?? undefined,\n utm_creative_format:\n link?.utm_creative_format ?? params.get('utm_creative_format') ?? undefined,\n utm_marketing_tactic:\n link?.utm_marketing_tactic ?? params.get('utm_marketing_tactic') ?? undefined,\n };\n\n cache.tags = tags;\n return tags;\n}\n\nconst map = new Map<string, string>();\n\nexport const storage: Storage = {\n getItem: (key) => {\n try {\n return localStorage.getItem(key);\n } catch {\n console.error('localStorage is not available');\n return map.get(key) ?? null;\n }\n },\n setItem: (key, value) => {\n try {\n localStorage.setItem(key, value);\n } catch {\n console.error('localStorage is not available');\n map.set(key, value);\n }\n },\n};\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shware/analytics",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -70,32 +70,32 @@
|
|
|
70
70
|
"dependencies": {
|
|
71
71
|
"bowser": "^2.14.1",
|
|
72
72
|
"cookie": "^1.1.1",
|
|
73
|
-
"uuid": "^
|
|
73
|
+
"uuid": "^14.0.0",
|
|
74
74
|
"web-vitals": "^5.2.0",
|
|
75
|
-
"zod": "^4.3
|
|
76
|
-
"@shware/utils": "^1.
|
|
75
|
+
"zod": "^4.4.3",
|
|
76
|
+
"@shware/utils": "^1.4.1"
|
|
77
77
|
},
|
|
78
78
|
"devDependencies": {
|
|
79
79
|
"@types/facebook-nodejs-business-sdk": "^23",
|
|
80
80
|
"@types/node": "^25",
|
|
81
81
|
"@types/react": "^19",
|
|
82
|
-
"typescript": "^6.0.
|
|
83
|
-
"vitest": "^4.1.
|
|
82
|
+
"typescript": "^6.0.3",
|
|
83
|
+
"vitest": "^4.1.5",
|
|
84
84
|
"@repo/typescript-config": "0.0.0"
|
|
85
85
|
},
|
|
86
86
|
"peerDependencies": {
|
|
87
|
-
"@react-native-firebase/analytics": "^
|
|
88
|
-
"@tanstack/react-router": "^1.
|
|
89
|
-
"expo-application": "^55.0.
|
|
90
|
-
"expo-clipboard": "^55.0.
|
|
91
|
-
"expo-crypto": "^55.0.
|
|
92
|
-
"expo-device": "^55.0.
|
|
93
|
-
"expo-localization": "^55.0.
|
|
94
|
-
"expo-sqlite": "^55.0.
|
|
95
|
-
"expo-tracking-transparency": "^55.0.
|
|
87
|
+
"@react-native-firebase/analytics": "^24.0.0",
|
|
88
|
+
"@tanstack/react-router": "^1.169.1",
|
|
89
|
+
"expo-application": "^55.0.14",
|
|
90
|
+
"expo-clipboard": "^55.0.13",
|
|
91
|
+
"expo-crypto": "^55.0.14",
|
|
92
|
+
"expo-device": "^55.0.15",
|
|
93
|
+
"expo-localization": "^55.0.13",
|
|
94
|
+
"expo-sqlite": "^55.0.15",
|
|
95
|
+
"expo-tracking-transparency": "^55.0.13",
|
|
96
96
|
"facebook-nodejs-business-sdk": "^24",
|
|
97
97
|
"next": "^16",
|
|
98
|
-
"posthog-js": "^1.
|
|
98
|
+
"posthog-js": "^1.372.6",
|
|
99
99
|
"react": "^19",
|
|
100
100
|
"react-native": "^0.83.0",
|
|
101
101
|
"react-native-fbsdk-next": "^13.4.3",
|