@aranova/tracking-next 0.2.2

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/server.js ADDED
@@ -0,0 +1,72 @@
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/server.ts
21
+ var server_exports = {};
22
+ __export(server_exports, {
23
+ getTrackingParamsServer: () => getTrackingParamsServer
24
+ });
25
+ module.exports = __toCommonJS(server_exports);
26
+ var import_server_only = require("server-only");
27
+ var import_headers = require("next/headers");
28
+
29
+ // ../tracking-core/src/tracking.ts
30
+ var TRACKING_PARAM_KEYS = [
31
+ "gclid",
32
+ "fbclid",
33
+ "utm_source",
34
+ "utm_medium",
35
+ "utm_campaign",
36
+ "utm_term",
37
+ "utm_content"
38
+ ];
39
+ function createEmptyTrackingParams() {
40
+ return {
41
+ gclid: null,
42
+ fbclid: null,
43
+ utm_source: null,
44
+ utm_medium: null,
45
+ utm_campaign: null,
46
+ utm_term: null,
47
+ utm_content: null
48
+ };
49
+ }
50
+ function normalizeTrackingCookieValue(value) {
51
+ return typeof value === "string" && value.length > 0 ? value : null;
52
+ }
53
+ function getTrackingParamsFromCookieReader(readCookie) {
54
+ return TRACKING_PARAM_KEYS.reduce((params, key) => {
55
+ params[key] = normalizeTrackingCookieValue(readCookie(key));
56
+ return params;
57
+ }, createEmptyTrackingParams());
58
+ }
59
+
60
+ // src/server.ts
61
+ function getCookieStore() {
62
+ return (0, import_headers.cookies)();
63
+ }
64
+ function getTrackingParamsServer() {
65
+ const cookieStore = getCookieStore();
66
+ return getTrackingParamsFromCookieReader((key) => cookieStore.get(key)?.value);
67
+ }
68
+ // Annotate the CommonJS export names for ESM import in node:
69
+ 0 && (module.exports = {
70
+ getTrackingParamsServer
71
+ });
72
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server.ts","../../tracking-core/src/tracking.ts"],"sourcesContent":["import 'server-only';\n\nimport { cookies } from 'next/headers';\n\nimport { getTrackingParamsFromCookieReader, type TrackingParams } from '../../tracking-core/src/index';\n\ninterface CookieValue {\n value: string;\n}\n\ninterface CookieStore {\n get(name: string): CookieValue | undefined;\n}\n\nfunction getCookieStore(): CookieStore {\n return cookies() as unknown as CookieStore;\n}\n\nexport function getTrackingParamsServer(): TrackingParams {\n const cookieStore = getCookieStore();\n return getTrackingParamsFromCookieReader((key) => cookieStore.get(key)?.value);\n}\n","import type { TrackingParams } from './types';\n\nexport const TRACKING_COOKIE_MAX_AGE_SECONDS = 7_776_000;\n\nexport const TRACKING_PARAM_KEYS = [\n 'gclid',\n 'fbclid',\n 'utm_source',\n 'utm_medium',\n 'utm_campaign',\n 'utm_term',\n 'utm_content',\n] as const;\n\nexport type TrackingParamKey = (typeof TRACKING_PARAM_KEYS)[number];\n\nexport function createEmptyTrackingParams(): TrackingParams {\n return {\n gclid: null,\n fbclid: null,\n utm_source: null,\n utm_medium: null,\n utm_campaign: null,\n utm_term: null,\n utm_content: null,\n };\n}\n\nexport function normalizeTrackingCookieValue(value: unknown): string | null {\n return typeof value === 'string' && value.length > 0 ? value : null;\n}\n\nexport function getTrackingParamsFromCookieReader(\n readCookie: (key: TrackingParamKey) => unknown,\n): TrackingParams {\n return TRACKING_PARAM_KEYS.reduce<TrackingParams>((params, key) => {\n params[key] = normalizeTrackingCookieValue(readCookie(key));\n return params;\n }, createEmptyTrackingParams());\n}\n\nexport function getTrackingQueryValues(\n searchParams: Pick<URLSearchParams, 'get'>,\n): Partial<Record<TrackingParamKey, string>> {\n return TRACKING_PARAM_KEYS.reduce<Partial<Record<TrackingParamKey, string>>>((params, key) => {\n const value = searchParams.get(key);\n\n if (typeof value === 'string' && value.trim().length > 0) {\n params[key] = value;\n }\n\n return params;\n }, {});\n}\n\nexport function getCookieValueFromDocument(key: TrackingParamKey): string | null {\n if (typeof document === 'undefined')\n return null;\n\n const cookies = document.cookie ? document.cookie.split('; ') : [];\n const match = cookies.find((cookie) => cookie.startsWith(`${key}=`));\n\n if (!match)\n return null;\n\n const [, rawValue = ''] = match.split('=');\n return normalizeTrackingCookieValue(decodeURIComponent(rawValue));\n}\n\nexport function setTrackingCookie(\n key: TrackingParamKey,\n value: string,\n maxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n): void {\n if (typeof document === 'undefined')\n return;\n\n const encodedValue = encodeURIComponent(value);\n document.cookie = `${key}=${encodedValue}; Max-Age=${maxAgeSeconds}; Path=/; SameSite=Lax`;\n}\n\nexport function persistTrackingParamsFromSearchParams(\n searchParams: Pick<URLSearchParams, 'get'>,\n maxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n): Partial<Record<TrackingParamKey, string>> {\n const trackingValues = getTrackingQueryValues(searchParams);\n\n Object.entries(trackingValues).forEach(([key, value]) => {\n setTrackingCookie(key as TrackingParamKey, value, maxAgeSeconds);\n });\n\n return trackingValues;\n}\n\nexport function captureTrackingParamsFromLocation(\n url = typeof window === 'undefined' ? '' : window.location.href,\n maxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n): TrackingParams {\n const resolvedUrl = typeof window === 'undefined'\n ? new URL(url || 'https://example.invalid')\n : new URL(url, window.location.origin);\n persistTrackingParamsFromSearchParams(resolvedUrl.searchParams, maxAgeSeconds);\n return getTrackingParamsFromCookieReader(getCookieValueFromDocument);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAO;AAEP,qBAAwB;;;ACEjB,IAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,SAAS,4BAA4C;AAC1D,SAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AACF;AAEO,SAAS,6BAA6B,OAA+B;AAC1E,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AACjE;AAEO,SAAS,kCACd,YACgB;AAChB,SAAO,oBAAoB,OAAuB,CAAC,QAAQ,QAAQ;AACjE,WAAO,GAAG,IAAI,6BAA6B,WAAW,GAAG,CAAC;AAC1D,WAAO;AAAA,EACT,GAAG,0BAA0B,CAAC;AAChC;;;ADzBA,SAAS,iBAA8B;AACrC,aAAO,wBAAQ;AACjB;AAEO,SAAS,0BAA0C;AACxD,QAAM,cAAc,eAAe;AACnC,SAAO,kCAAkC,CAAC,QAAQ,YAAY,IAAI,GAAG,GAAG,KAAK;AAC/E;","names":[]}
@@ -0,0 +1,47 @@
1
+ // src/server.ts
2
+ import "server-only";
3
+ import { cookies } from "next/headers";
4
+
5
+ // ../tracking-core/src/tracking.ts
6
+ var TRACKING_PARAM_KEYS = [
7
+ "gclid",
8
+ "fbclid",
9
+ "utm_source",
10
+ "utm_medium",
11
+ "utm_campaign",
12
+ "utm_term",
13
+ "utm_content"
14
+ ];
15
+ function createEmptyTrackingParams() {
16
+ return {
17
+ gclid: null,
18
+ fbclid: null,
19
+ utm_source: null,
20
+ utm_medium: null,
21
+ utm_campaign: null,
22
+ utm_term: null,
23
+ utm_content: null
24
+ };
25
+ }
26
+ function normalizeTrackingCookieValue(value) {
27
+ return typeof value === "string" && value.length > 0 ? value : null;
28
+ }
29
+ function getTrackingParamsFromCookieReader(readCookie) {
30
+ return TRACKING_PARAM_KEYS.reduce((params, key) => {
31
+ params[key] = normalizeTrackingCookieValue(readCookie(key));
32
+ return params;
33
+ }, createEmptyTrackingParams());
34
+ }
35
+
36
+ // src/server.ts
37
+ function getCookieStore() {
38
+ return cookies();
39
+ }
40
+ function getTrackingParamsServer() {
41
+ const cookieStore = getCookieStore();
42
+ return getTrackingParamsFromCookieReader((key) => cookieStore.get(key)?.value);
43
+ }
44
+ export {
45
+ getTrackingParamsServer
46
+ };
47
+ //# sourceMappingURL=server.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server.ts","../../tracking-core/src/tracking.ts"],"sourcesContent":["import 'server-only';\n\nimport { cookies } from 'next/headers';\n\nimport { getTrackingParamsFromCookieReader, type TrackingParams } from '../../tracking-core/src/index';\n\ninterface CookieValue {\n value: string;\n}\n\ninterface CookieStore {\n get(name: string): CookieValue | undefined;\n}\n\nfunction getCookieStore(): CookieStore {\n return cookies() as unknown as CookieStore;\n}\n\nexport function getTrackingParamsServer(): TrackingParams {\n const cookieStore = getCookieStore();\n return getTrackingParamsFromCookieReader((key) => cookieStore.get(key)?.value);\n}\n","import type { TrackingParams } from './types';\n\nexport const TRACKING_COOKIE_MAX_AGE_SECONDS = 7_776_000;\n\nexport const TRACKING_PARAM_KEYS = [\n 'gclid',\n 'fbclid',\n 'utm_source',\n 'utm_medium',\n 'utm_campaign',\n 'utm_term',\n 'utm_content',\n] as const;\n\nexport type TrackingParamKey = (typeof TRACKING_PARAM_KEYS)[number];\n\nexport function createEmptyTrackingParams(): TrackingParams {\n return {\n gclid: null,\n fbclid: null,\n utm_source: null,\n utm_medium: null,\n utm_campaign: null,\n utm_term: null,\n utm_content: null,\n };\n}\n\nexport function normalizeTrackingCookieValue(value: unknown): string | null {\n return typeof value === 'string' && value.length > 0 ? value : null;\n}\n\nexport function getTrackingParamsFromCookieReader(\n readCookie: (key: TrackingParamKey) => unknown,\n): TrackingParams {\n return TRACKING_PARAM_KEYS.reduce<TrackingParams>((params, key) => {\n params[key] = normalizeTrackingCookieValue(readCookie(key));\n return params;\n }, createEmptyTrackingParams());\n}\n\nexport function getTrackingQueryValues(\n searchParams: Pick<URLSearchParams, 'get'>,\n): Partial<Record<TrackingParamKey, string>> {\n return TRACKING_PARAM_KEYS.reduce<Partial<Record<TrackingParamKey, string>>>((params, key) => {\n const value = searchParams.get(key);\n\n if (typeof value === 'string' && value.trim().length > 0) {\n params[key] = value;\n }\n\n return params;\n }, {});\n}\n\nexport function getCookieValueFromDocument(key: TrackingParamKey): string | null {\n if (typeof document === 'undefined')\n return null;\n\n const cookies = document.cookie ? document.cookie.split('; ') : [];\n const match = cookies.find((cookie) => cookie.startsWith(`${key}=`));\n\n if (!match)\n return null;\n\n const [, rawValue = ''] = match.split('=');\n return normalizeTrackingCookieValue(decodeURIComponent(rawValue));\n}\n\nexport function setTrackingCookie(\n key: TrackingParamKey,\n value: string,\n maxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n): void {\n if (typeof document === 'undefined')\n return;\n\n const encodedValue = encodeURIComponent(value);\n document.cookie = `${key}=${encodedValue}; Max-Age=${maxAgeSeconds}; Path=/; SameSite=Lax`;\n}\n\nexport function persistTrackingParamsFromSearchParams(\n searchParams: Pick<URLSearchParams, 'get'>,\n maxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n): Partial<Record<TrackingParamKey, string>> {\n const trackingValues = getTrackingQueryValues(searchParams);\n\n Object.entries(trackingValues).forEach(([key, value]) => {\n setTrackingCookie(key as TrackingParamKey, value, maxAgeSeconds);\n });\n\n return trackingValues;\n}\n\nexport function captureTrackingParamsFromLocation(\n url = typeof window === 'undefined' ? '' : window.location.href,\n maxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n): TrackingParams {\n const resolvedUrl = typeof window === 'undefined'\n ? new URL(url || 'https://example.invalid')\n : new URL(url, window.location.origin);\n persistTrackingParamsFromSearchParams(resolvedUrl.searchParams, maxAgeSeconds);\n return getTrackingParamsFromCookieReader(getCookieValueFromDocument);\n}\n"],"mappings":";AAAA,OAAO;AAEP,SAAS,eAAe;;;ACEjB,IAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,SAAS,4BAA4C;AAC1D,SAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AACF;AAEO,SAAS,6BAA6B,OAA+B;AAC1E,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AACjE;AAEO,SAAS,kCACd,YACgB;AAChB,SAAO,oBAAoB,OAAuB,CAAC,QAAQ,QAAQ;AACjE,WAAO,GAAG,IAAI,6BAA6B,WAAW,GAAG,CAAC;AAC1D,WAAO;AAAA,EACT,GAAG,0BAA0B,CAAC;AAChC;;;ADzBA,SAAS,iBAA8B;AACrC,SAAO,QAAQ;AACjB;AAEO,SAAS,0BAA0C;AACxD,QAAM,cAAc,eAAe;AACnC,SAAO,kCAAkC,CAAC,QAAQ,YAAY,IAAI,GAAG,GAAG,KAAK;AAC/E;","names":[]}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@aranova/tracking-next",
3
+ "version": "0.2.2",
4
+ "private": false,
5
+ "description": "Next.js tracking utilities for Aranova client sites",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "main": "./dist/index.js",
10
+ "module": "./dist/index.mjs",
11
+ "types": "./dist/index.d.ts",
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/AranovaIO/aranova_internal.git",
15
+ "directory": "packages/tracking-next"
16
+ },
17
+ "homepage": "https://github.com/AranovaIO/aranova_internal/tree/master/packages/tracking-next",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.mjs",
22
+ "require": "./dist/index.js"
23
+ },
24
+ "./server": {
25
+ "types": "./dist/server.d.ts",
26
+ "import": "./dist/server.mjs",
27
+ "require": "./dist/server.js"
28
+ },
29
+ "./middleware": {
30
+ "types": "./dist/middleware.d.ts",
31
+ "import": "./dist/middleware.mjs",
32
+ "require": "./dist/middleware.js"
33
+ }
34
+ },
35
+ "scripts": {
36
+ "build": "tsup",
37
+ "dev": "tsup --watch",
38
+ "test": "vitest",
39
+ "test:run": "vitest run",
40
+ "prepublishOnly": "npm run build"
41
+ },
42
+ "peerDependencies": {
43
+ "next": ">=14.0.0",
44
+ "react": ">=18.0.0"
45
+ },
46
+ "dependencies": {
47
+ "server-only": "^0.0.1"
48
+ },
49
+ "devDependencies": {
50
+ "@types/react": "^19.2.2",
51
+ "jsdom": "^29.0.1",
52
+ "react": "^19.2.0",
53
+ "tsup": "^8.5.1",
54
+ "typescript": "^5.7.3",
55
+ "vitest": "^4.1.4"
56
+ },
57
+ "publishConfig": {
58
+ "registry": "https://registry.npmjs.org",
59
+ "access": "public"
60
+ }
61
+ }