@casoon/trackr 0.1.0 → 0.1.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.
@@ -22,15 +22,27 @@ function track(name, props) {
22
22
  }
23
23
  function trackPageview() {
24
24
  if (!config) return;
25
+ const utm = getUtmParams();
25
26
  sendEvent({
26
27
  type: "pageview",
27
28
  url: getPath(),
28
29
  referrer: document.referrer ? new URL(document.referrer).hostname : void 0,
30
+ ...Object.keys(utm).length > 0 && { utm },
29
31
  ts: Date.now()
30
32
  });
31
33
  }
32
34
  function getPath() {
33
- return window.location.pathname;
35
+ return window.location.pathname + window.location.search;
36
+ }
37
+ function getUtmParams() {
38
+ const params = new URLSearchParams(window.location.search);
39
+ const utm = {};
40
+ const keys = ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"];
41
+ for (const key of keys) {
42
+ const value = params.get(key);
43
+ if (value) utm[key] = value;
44
+ }
45
+ return utm;
34
46
  }
35
47
  function sendEvent(event) {
36
48
  if (!config) return;
@@ -55,4 +67,4 @@ export {
55
67
  init,
56
68
  track
57
69
  };
58
- //# sourceMappingURL=chunk-ABUPERUQ.js.map
70
+ //# sourceMappingURL=chunk-4EAYUMKF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client/index.ts"],"sourcesContent":["import type { TrackrConfig } from \"../types.js\";\n\nlet config: TrackrConfig | null = null;\n\nexport function init(options: TrackrConfig): void {\n config = options;\n trackPageview();\n\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"popstate\", trackPageview);\n }\n}\n\nexport function track(name: string, props?: Record<string, string | number | boolean>): void {\n if (!config) {\n console.warn(\"[trackr] Not initialized. Call init() first.\");\n return;\n }\n\n sendEvent({\n type: \"event\",\n name,\n url: getPath(),\n props,\n ts: Date.now()\n });\n}\n\nfunction trackPageview(): void {\n if (!config) return;\n\n const utm = getUtmParams();\n\n sendEvent({\n type: \"pageview\",\n url: getPath(),\n referrer: document.referrer ? new URL(document.referrer).hostname : undefined,\n ...(Object.keys(utm).length > 0 && { utm }),\n ts: Date.now()\n });\n}\n\nfunction getPath(): string {\n return window.location.pathname + window.location.search;\n}\n\nfunction getUtmParams(): Record<string, string> {\n const params = new URLSearchParams(window.location.search);\n const utm: Record<string, string> = {};\n const keys = [\"utm_source\", \"utm_medium\", \"utm_campaign\", \"utm_term\", \"utm_content\"];\n\n for (const key of keys) {\n const value = params.get(key);\n if (value) utm[key] = value;\n }\n\n return utm;\n}\n\nfunction sendEvent(event: Record<string, unknown>): void {\n if (!config) return;\n\n const body = JSON.stringify(event);\n\n if (navigator.sendBeacon) {\n navigator.sendBeacon(config.endpoint, body);\n } else {\n fetch(config.endpoint, {\n method: \"POST\",\n body,\n keepalive: true,\n headers: { \"Content-Type\": \"application/json\" }\n }).catch(() => {});\n }\n\n if (config.debug) {\n console.log(\"[trackr]\", event);\n }\n}\n"],"mappings":";AAEA,IAAI,SAA8B;AAE3B,SAAS,KAAK,SAA6B;AAChD,WAAS;AACT,gBAAc;AAEd,MAAI,OAAO,WAAW,aAAa;AACjC,WAAO,iBAAiB,YAAY,aAAa;AAAA,EACnD;AACF;AAEO,SAAS,MAAM,MAAc,OAAyD;AAC3F,MAAI,CAAC,QAAQ;AACX,YAAQ,KAAK,8CAA8C;AAC3D;AAAA,EACF;AAEA,YAAU;AAAA,IACR,MAAM;AAAA,IACN;AAAA,IACA,KAAK,QAAQ;AAAA,IACb;AAAA,IACA,IAAI,KAAK,IAAI;AAAA,EACf,CAAC;AACH;AAEA,SAAS,gBAAsB;AAC7B,MAAI,CAAC,OAAQ;AAEb,QAAM,MAAM,aAAa;AAEzB,YAAU;AAAA,IACR,MAAM;AAAA,IACN,KAAK,QAAQ;AAAA,IACb,UAAU,SAAS,WAAW,IAAI,IAAI,SAAS,QAAQ,EAAE,WAAW;AAAA,IACpE,GAAI,OAAO,KAAK,GAAG,EAAE,SAAS,KAAK,EAAE,IAAI;AAAA,IACzC,IAAI,KAAK,IAAI;AAAA,EACf,CAAC;AACH;AAEA,SAAS,UAAkB;AACzB,SAAO,OAAO,SAAS,WAAW,OAAO,SAAS;AACpD;AAEA,SAAS,eAAuC;AAC9C,QAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,QAAM,MAA8B,CAAC;AACrC,QAAM,OAAO,CAAC,cAAc,cAAc,gBAAgB,YAAY,aAAa;AAEnF,aAAW,OAAO,MAAM;AACtB,UAAM,QAAQ,OAAO,IAAI,GAAG;AAC5B,QAAI,MAAO,KAAI,GAAG,IAAI;AAAA,EACxB;AAEA,SAAO;AACT;AAEA,SAAS,UAAU,OAAsC;AACvD,MAAI,CAAC,OAAQ;AAEb,QAAM,OAAO,KAAK,UAAU,KAAK;AAEjC,MAAI,UAAU,YAAY;AACxB,cAAU,WAAW,OAAO,UAAU,IAAI;AAAA,EAC5C,OAAO;AACL,UAAM,OAAO,UAAU;AAAA,MACrB,QAAQ;AAAA,MACR;AAAA,MACA,WAAW;AAAA,MACX,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,IAChD,CAAC,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EACnB;AAEA,MAAI,OAAO,OAAO;AAChB,YAAQ,IAAI,YAAY,KAAK;AAAA,EAC/B;AACF;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  init,
3
3
  track
4
- } from "../chunk-ABUPERUQ.js";
4
+ } from "../chunk-4EAYUMKF.js";
5
5
  import "../chunk-7D4SUZUM.js";
6
6
  export {
7
7
  init,
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  init,
3
3
  track
4
- } from "./chunk-ABUPERUQ.js";
4
+ } from "./chunk-4EAYUMKF.js";
5
5
  import {
6
6
  createHandler
7
7
  } from "./chunk-L3N32JO4.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@casoon/trackr",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Privacy-first, GDPR-native analytics for static sites.",
5
5
  "author": "Joern Seidel <joern@casoon.de>",
6
6
  "license": "LGPL-3.0-or-later",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/client/index.ts"],"sourcesContent":["import type { TrackrConfig } from \"../types.js\";\n\nlet config: TrackrConfig | null = null;\n\nexport function init(options: TrackrConfig): void {\n config = options;\n trackPageview();\n \n if (typeof window !== \"undefined\") {\n window.addEventListener(\"popstate\", trackPageview);\n }\n}\n\nexport function track(name: string, props?: Record<string, string | number | boolean>): void {\n if (!config) {\n console.warn(\"[trackr] Not initialized. Call init() first.\");\n return;\n }\n \n sendEvent({\n type: \"event\",\n name,\n url: getPath(),\n props,\n ts: Date.now()\n });\n}\n\nfunction trackPageview(): void {\n if (!config) return;\n \n sendEvent({\n type: \"pageview\",\n url: getPath(),\n referrer: document.referrer ? new URL(document.referrer).hostname : undefined,\n ts: Date.now()\n });\n}\n\nfunction getPath(): string {\n return window.location.pathname;\n}\n\nfunction sendEvent(event: Record<string, unknown>): void {\n if (!config) return;\n \n const body = JSON.stringify(event);\n \n if (navigator.sendBeacon) {\n navigator.sendBeacon(config.endpoint, body);\n } else {\n fetch(config.endpoint, {\n method: \"POST\",\n body,\n keepalive: true,\n headers: { \"Content-Type\": \"application/json\" }\n }).catch(() => {});\n }\n \n if (config.debug) {\n console.log(\"[trackr]\", event);\n }\n}\n"],"mappings":";AAEA,IAAI,SAA8B;AAE3B,SAAS,KAAK,SAA6B;AAChD,WAAS;AACT,gBAAc;AAEd,MAAI,OAAO,WAAW,aAAa;AACjC,WAAO,iBAAiB,YAAY,aAAa;AAAA,EACnD;AACF;AAEO,SAAS,MAAM,MAAc,OAAyD;AAC3F,MAAI,CAAC,QAAQ;AACX,YAAQ,KAAK,8CAA8C;AAC3D;AAAA,EACF;AAEA,YAAU;AAAA,IACR,MAAM;AAAA,IACN;AAAA,IACA,KAAK,QAAQ;AAAA,IACb;AAAA,IACA,IAAI,KAAK,IAAI;AAAA,EACf,CAAC;AACH;AAEA,SAAS,gBAAsB;AAC7B,MAAI,CAAC,OAAQ;AAEb,YAAU;AAAA,IACR,MAAM;AAAA,IACN,KAAK,QAAQ;AAAA,IACb,UAAU,SAAS,WAAW,IAAI,IAAI,SAAS,QAAQ,EAAE,WAAW;AAAA,IACpE,IAAI,KAAK,IAAI;AAAA,EACf,CAAC;AACH;AAEA,SAAS,UAAkB;AACzB,SAAO,OAAO,SAAS;AACzB;AAEA,SAAS,UAAU,OAAsC;AACvD,MAAI,CAAC,OAAQ;AAEb,QAAM,OAAO,KAAK,UAAU,KAAK;AAEjC,MAAI,UAAU,YAAY;AACxB,cAAU,WAAW,OAAO,UAAU,IAAI;AAAA,EAC5C,OAAO;AACL,UAAM,OAAO,UAAU;AAAA,MACrB,QAAQ;AAAA,MACR;AAAA,MACA,WAAW;AAAA,MACX,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,IAChD,CAAC,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EACnB;AAEA,MAAI,OAAO,OAAO;AAChB,YAAQ,IAAI,YAAY,KAAK;AAAA,EAC/B;AACF;","names":[]}