@shware/analytics 3.4.1 → 3.5.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/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/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/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 +1 -1
|
@@ -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/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/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":";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,gBAAgB,QAAgB,KAAK,MAAM,KAAK;AAAA,IAChF,OAAO,OAAO,IAAI,OAAO,KAAK;AAAA,IAC9B,SAAS,OAAO,IAAI,SAAS,KAAK;AAAA,IAClC,UAAU,OAAO,IAAI,UAAU,KAAK;AAAA,IACpC,YAAY,OAAO,IAAI,YAAY,KAAK;AAAA,IACxC,aAAa,OAAO,IAAI,aAAa,KAAK;AAAA,IAC1C,eAAe,OAAO,IAAI,eAAe,KAAK;AAAA,IAC9C,WAAW,OAAO,IAAI,WAAW,KAAK;AAAA,IACtC,kBAAkB,OAAO,IAAI,kBAAkB,KAAK;AAAA;AAAA,IAEpD,OAAO,OAAO,IAAI,OAAO,KAAK;AAAA,IAC9B,QAAQ,OAAO,IAAI,QAAQ,KAAK;AAAA,IAChC,YAAY,OAAO,IAAI,YAAY,KAAK;AAAA,IACxC,gBAAgB,OAAO,IAAI,gBAAgB,KAAK;AAAA;AAAA,IAEhD,SACE,OAAO,IAAI,SAAS,KACpB,OAAO,YACP,gBAAgB,QAAgB,KAAK,OAAO,KAC5C;AAAA,IACF,UAAU,OAAO;AAAA;AAAA,IAEjB,WAAW,OAAO,IAAI,WAAW,KAAK,OAAO,aAAa;AAAA;AAAA,IAE1D,OAAO,OAAO,IAAI,OAAO,KAAK;AAAA,IAC9B,aAAa,OAAO,IAAI,aAAa,KAAK;AAAA,IAC1C,SAAS,OAAO,IAAI,SAAS,KAAK;AAAA,IAClC,OAAO,OAAO,IAAI,OAAO,KAAK;AAAA,IAC9B,QAAQ,OAAO,IAAI,QAAQ,KAAK;AAAA,IAChC,QAAQ,OAAO,IAAI,QAAQ,KAAK;AAAA,IAChC,QAAQ,OAAO,IAAI,QAAQ,KAAK;AAAA,IAChC,OAAO,OAAO,IAAI,OAAO,KAAK;AAAA;AAAA,IAE9B,aAAY,6BAAM,eAAc,OAAO,IAAI,YAAY,KAAK;AAAA,IAC5D,aAAY,6BAAM,eAAc,OAAO,IAAI,YAAY,KAAK;AAAA,IAC5D,eAAc,6BAAM,iBAAgB,OAAO,IAAI,cAAc,KAAK;AAAA,IAClE,WAAU,6BAAM,aAAY,OAAO,IAAI,UAAU,KAAK;AAAA,IACtD,cAAa,6BAAM,gBAAe,OAAO,IAAI,aAAa,KAAK;AAAA,IAC/D,SAAQ,6BAAM,WAAU,OAAO,IAAI,QAAQ,KAAK;AAAA,IAChD,sBACE,6BAAM,wBAAuB,OAAO,IAAI,qBAAqB,KAAK;AAAA,IACpE,sBACE,6BAAM,wBAAuB,OAAO,IAAI,qBAAqB,KAAK;AAAA,IACpE,uBACE,6BAAM,yBAAwB,OAAO,IAAI,sBAAsB,KAAK;AAAA,EACxE;AAEA,QAAM,OAAO;AACb,SAAO;AACT;AAEA,IAAM,MAAM,oBAAI,IAAoB;AAE7B,IAAM,UAAmB;AAAA,EAC9B,SAAS,CAAC,QAAQ;AAChB,QAAI;AACF,aAAO,aAAa,QAAQ,GAAG;AAAA,IACjC,QAAQ;AACN,cAAQ,MAAM,+BAA+B;AAC7C,aAAO,IAAI,IAAI,GAAG,KAAK;AAAA,IACzB;AAAA,EACF;AAAA,EACA,SAAS,CAAC,KAAK,UAAU;AACvB,QAAI;AACF,mBAAa,QAAQ,KAAK,KAAK;AAAA,IACjC,QAAQ;AACN,cAAQ,MAAM,+BAA+B;AAC7C,UAAI,IAAI,KAAK,KAAK;AAAA,IACpB;AAAA,EACF;AACF;","names":[]}
|