@shware/analytics 2.11.5 → 2.11.6
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/native/fingerprint.cjs +4 -3
- package/dist/native/fingerprint.cjs.map +1 -1
- package/dist/native/fingerprint.d.cts +1 -0
- package/dist/native/fingerprint.d.ts +1 -0
- package/dist/native/fingerprint.mjs +12 -4
- package/dist/native/fingerprint.mjs.map +1 -1
- package/dist/schema/index.cjs +1 -1
- package/dist/schema/index.cjs.map +1 -1
- package/dist/schema/index.d.cts +3 -3
- package/dist/schema/index.d.ts +3 -3
- package/dist/schema/index.mjs +1 -1
- package/dist/schema/index.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -36,7 +36,7 @@ async function getDeterministicFingerprint() {
|
|
|
36
36
|
return { click_id: params.get("click_id") ?? null };
|
|
37
37
|
}
|
|
38
38
|
async function getProbabilisticFingerprint(shouldUseClipboard = true) {
|
|
39
|
-
var _a, _b, _c, _d;
|
|
39
|
+
var _a, _b, _c, _d, _e;
|
|
40
40
|
const screen = import_react_native.Dimensions.get("screen");
|
|
41
41
|
const screen_width = Math.floor(screen.width);
|
|
42
42
|
const screen_height = Math.floor(screen.height);
|
|
@@ -45,6 +45,7 @@ async function getProbabilisticFingerprint(shouldUseClipboard = true) {
|
|
|
45
45
|
os: import_expo_device.osName && import_expo_device.osVersion ? `${import_expo_device.osName} ${import_expo_device.osVersion}` : null,
|
|
46
46
|
os_name: import_expo_device.osName,
|
|
47
47
|
os_version: import_expo_device.osVersion,
|
|
48
|
+
cpu_architecture: ((_a = import_expo_device.supportedCpuArchitectures) == null ? void 0 : _a.at(0)) ?? null,
|
|
48
49
|
platform: import_react_native.Platform.OS,
|
|
49
50
|
device: import_expo_device.modelName,
|
|
50
51
|
device_vendor: import_expo_device.manufacturer,
|
|
@@ -53,8 +54,8 @@ async function getProbabilisticFingerprint(shouldUseClipboard = true) {
|
|
|
53
54
|
screen_width,
|
|
54
55
|
screen_height,
|
|
55
56
|
screen_resolution: `${screen_width}x${screen_height}`,
|
|
56
|
-
language: ((
|
|
57
|
-
time_zone: ((
|
|
57
|
+
language: ((_c = (_b = (0, import_expo_localization.getLocales)()) == null ? void 0 : _b[0]) == null ? void 0 : _c.languageTag) ?? null,
|
|
58
|
+
time_zone: ((_e = (_d = (0, import_expo_localization.getCalendars)()) == null ? void 0 : _d[0]) == null ? void 0 : _e.timeZone) ?? null,
|
|
58
59
|
install_referrer,
|
|
59
60
|
pasted_link: shouldUseClipboard ? await (0, import_expo_clipboard.getStringAsync)() : null,
|
|
60
61
|
timestamp: Date.now()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/native/fingerprint.ts"],"sourcesContent":["/**\n * reference: https://docs.swmansion.com/detour/docs/Architecture/matching\n *\n */\nimport { getInstallReferrerAsync } from 'expo-application';\nimport { getStringAsync } from 'expo-clipboard';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/native/fingerprint.ts"],"sourcesContent":["/**\n * reference: https://docs.swmansion.com/detour/docs/Architecture/matching\n *\n */\nimport { getInstallReferrerAsync } from 'expo-application';\nimport { getStringAsync } from 'expo-clipboard';\nimport {\n manufacturer,\n modelId,\n modelName,\n osName,\n osVersion,\n supportedCpuArchitectures,\n} from 'expo-device';\nimport { getCalendars, getLocales } from 'expo-localization';\nimport { Dimensions, PixelRatio, Platform } from 'react-native';\n\n// used when install referrer on android is available\nexport type DeterministicFingerprint = {\n click_id: string | null;\n};\n\nexport type ProbabilisticFingerprint = {\n os: string | null;\n os_name: string | null;\n os_version: string | null;\n cpu_architecture: string | null;\n platform: 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';\n device: string | null;\n device_vendor: string | null;\n device_model_id: string | null;\n device_pixel_ratio: number;\n screen_width: number;\n screen_height: number;\n screen_resolution: string;\n language: string | null;\n time_zone: string | null;\n install_referrer: string | null;\n pasted_link: string | null;\n timestamp: number; // 7 days validity\n};\n\nexport async function getDeterministicFingerprint(): Promise<DeterministicFingerprint> {\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : null;\n if (!install_referrer) return { click_id: null };\n const params = new URLSearchParams(install_referrer);\n return { click_id: params.get('click_id') ?? null };\n}\n\nexport async function getProbabilisticFingerprint(\n shouldUseClipboard: boolean = true\n): Promise<ProbabilisticFingerprint> {\n const screen = Dimensions.get('screen');\n const screen_width = Math.floor(screen.width);\n const screen_height = Math.floor(screen.height);\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : null;\n\n return {\n os: osName && osVersion ? `${osName} ${osVersion}` : null,\n os_name: osName,\n os_version: osVersion,\n cpu_architecture: supportedCpuArchitectures?.at(0) ?? null,\n platform: Platform.OS,\n device: modelName,\n device_vendor: manufacturer,\n device_model_id: modelId,\n device_pixel_ratio: PixelRatio.get(),\n screen_width,\n screen_height,\n screen_resolution: `${screen_width}x${screen_height}`,\n language: getLocales()?.[0]?.languageTag ?? null,\n time_zone: getCalendars()?.[0]?.timeZone ?? null,\n install_referrer,\n pasted_link: shouldUseClipboard ? await getStringAsync() : null,\n timestamp: Date.now(),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,8BAAwC;AACxC,4BAA+B;AAC/B,yBAOO;AACP,+BAAyC;AACzC,0BAAiD;AA2BjD,eAAsB,8BAAiE;AACrF,QAAM,mBAAmB,6BAAS,OAAO,YAAY,UAAM,iDAAwB,IAAI;AACvF,MAAI,CAAC,iBAAkB,QAAO,EAAE,UAAU,KAAK;AAC/C,QAAM,SAAS,IAAI,gBAAgB,gBAAgB;AACnD,SAAO,EAAE,UAAU,OAAO,IAAI,UAAU,KAAK,KAAK;AACpD;AAEA,eAAsB,4BACpB,qBAA8B,MACK;AAnDrC;AAoDE,QAAM,SAAS,+BAAW,IAAI,QAAQ;AACtC,QAAM,eAAe,KAAK,MAAM,OAAO,KAAK;AAC5C,QAAM,gBAAgB,KAAK,MAAM,OAAO,MAAM;AAC9C,QAAM,mBAAmB,6BAAS,OAAO,YAAY,UAAM,iDAAwB,IAAI;AAEvF,SAAO;AAAA,IACL,IAAI,6BAAU,+BAAY,GAAG,yBAAM,IAAI,4BAAS,KAAK;AAAA,IACrD,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,oBAAkB,yEAA2B,GAAG,OAAM;AAAA,IACtD,UAAU,6BAAS;AAAA,IACnB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,oBAAoB,+BAAW,IAAI;AAAA,IACnC;AAAA,IACA;AAAA,IACA,mBAAmB,GAAG,YAAY,IAAI,aAAa;AAAA,IACnD,YAAU,oDAAW,MAAX,mBAAe,OAAf,mBAAmB,gBAAe;AAAA,IAC5C,aAAW,sDAAa,MAAb,mBAAiB,OAAjB,mBAAqB,aAAY;AAAA,IAC5C;AAAA,IACA,aAAa,qBAAqB,UAAM,sCAAe,IAAI;AAAA,IAC3D,WAAW,KAAK,IAAI;AAAA,EACtB;AACF;","names":[]}
|
|
@@ -5,6 +5,7 @@ type ProbabilisticFingerprint = {
|
|
|
5
5
|
os: string | null;
|
|
6
6
|
os_name: string | null;
|
|
7
7
|
os_version: string | null;
|
|
8
|
+
cpu_architecture: string | null;
|
|
8
9
|
platform: 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';
|
|
9
10
|
device: string | null;
|
|
10
11
|
device_vendor: string | null;
|
|
@@ -5,6 +5,7 @@ type ProbabilisticFingerprint = {
|
|
|
5
5
|
os: string | null;
|
|
6
6
|
os_name: string | null;
|
|
7
7
|
os_version: string | null;
|
|
8
|
+
cpu_architecture: string | null;
|
|
8
9
|
platform: 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';
|
|
9
10
|
device: string | null;
|
|
10
11
|
device_vendor: string | null;
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
// src/native/fingerprint.ts
|
|
2
2
|
import { getInstallReferrerAsync } from "expo-application";
|
|
3
3
|
import { getStringAsync } from "expo-clipboard";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
manufacturer,
|
|
6
|
+
modelId,
|
|
7
|
+
modelName,
|
|
8
|
+
osName,
|
|
9
|
+
osVersion,
|
|
10
|
+
supportedCpuArchitectures
|
|
11
|
+
} from "expo-device";
|
|
5
12
|
import { getCalendars, getLocales } from "expo-localization";
|
|
6
13
|
import { Dimensions, PixelRatio, Platform } from "react-native";
|
|
7
14
|
async function getDeterministicFingerprint() {
|
|
@@ -11,7 +18,7 @@ async function getDeterministicFingerprint() {
|
|
|
11
18
|
return { click_id: params.get("click_id") ?? null };
|
|
12
19
|
}
|
|
13
20
|
async function getProbabilisticFingerprint(shouldUseClipboard = true) {
|
|
14
|
-
var _a, _b, _c, _d;
|
|
21
|
+
var _a, _b, _c, _d, _e;
|
|
15
22
|
const screen = Dimensions.get("screen");
|
|
16
23
|
const screen_width = Math.floor(screen.width);
|
|
17
24
|
const screen_height = Math.floor(screen.height);
|
|
@@ -20,6 +27,7 @@ async function getProbabilisticFingerprint(shouldUseClipboard = true) {
|
|
|
20
27
|
os: osName && osVersion ? `${osName} ${osVersion}` : null,
|
|
21
28
|
os_name: osName,
|
|
22
29
|
os_version: osVersion,
|
|
30
|
+
cpu_architecture: ((_a = supportedCpuArchitectures) == null ? void 0 : _a.at(0)) ?? null,
|
|
23
31
|
platform: Platform.OS,
|
|
24
32
|
device: modelName,
|
|
25
33
|
device_vendor: manufacturer,
|
|
@@ -28,8 +36,8 @@ async function getProbabilisticFingerprint(shouldUseClipboard = true) {
|
|
|
28
36
|
screen_width,
|
|
29
37
|
screen_height,
|
|
30
38
|
screen_resolution: `${screen_width}x${screen_height}`,
|
|
31
|
-
language: ((
|
|
32
|
-
time_zone: ((
|
|
39
|
+
language: ((_c = (_b = getLocales()) == null ? void 0 : _b[0]) == null ? void 0 : _c.languageTag) ?? null,
|
|
40
|
+
time_zone: ((_e = (_d = getCalendars()) == null ? void 0 : _d[0]) == null ? void 0 : _e.timeZone) ?? null,
|
|
33
41
|
install_referrer,
|
|
34
42
|
pasted_link: shouldUseClipboard ? await getStringAsync() : null,
|
|
35
43
|
timestamp: Date.now()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/native/fingerprint.ts"],"sourcesContent":["/**\n * reference: https://docs.swmansion.com/detour/docs/Architecture/matching\n *\n */\nimport { getInstallReferrerAsync } from 'expo-application';\nimport { getStringAsync } from 'expo-clipboard';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/native/fingerprint.ts"],"sourcesContent":["/**\n * reference: https://docs.swmansion.com/detour/docs/Architecture/matching\n *\n */\nimport { getInstallReferrerAsync } from 'expo-application';\nimport { getStringAsync } from 'expo-clipboard';\nimport {\n manufacturer,\n modelId,\n modelName,\n osName,\n osVersion,\n supportedCpuArchitectures,\n} from 'expo-device';\nimport { getCalendars, getLocales } from 'expo-localization';\nimport { Dimensions, PixelRatio, Platform } from 'react-native';\n\n// used when install referrer on android is available\nexport type DeterministicFingerprint = {\n click_id: string | null;\n};\n\nexport type ProbabilisticFingerprint = {\n os: string | null;\n os_name: string | null;\n os_version: string | null;\n cpu_architecture: string | null;\n platform: 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';\n device: string | null;\n device_vendor: string | null;\n device_model_id: string | null;\n device_pixel_ratio: number;\n screen_width: number;\n screen_height: number;\n screen_resolution: string;\n language: string | null;\n time_zone: string | null;\n install_referrer: string | null;\n pasted_link: string | null;\n timestamp: number; // 7 days validity\n};\n\nexport async function getDeterministicFingerprint(): Promise<DeterministicFingerprint> {\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : null;\n if (!install_referrer) return { click_id: null };\n const params = new URLSearchParams(install_referrer);\n return { click_id: params.get('click_id') ?? null };\n}\n\nexport async function getProbabilisticFingerprint(\n shouldUseClipboard: boolean = true\n): Promise<ProbabilisticFingerprint> {\n const screen = Dimensions.get('screen');\n const screen_width = Math.floor(screen.width);\n const screen_height = Math.floor(screen.height);\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : null;\n\n return {\n os: osName && osVersion ? `${osName} ${osVersion}` : null,\n os_name: osName,\n os_version: osVersion,\n cpu_architecture: supportedCpuArchitectures?.at(0) ?? null,\n platform: Platform.OS,\n device: modelName,\n device_vendor: manufacturer,\n device_model_id: modelId,\n device_pixel_ratio: PixelRatio.get(),\n screen_width,\n screen_height,\n screen_resolution: `${screen_width}x${screen_height}`,\n language: getLocales()?.[0]?.languageTag ?? null,\n time_zone: getCalendars()?.[0]?.timeZone ?? null,\n install_referrer,\n pasted_link: shouldUseClipboard ? await getStringAsync() : null,\n timestamp: Date.now(),\n };\n}\n"],"mappings":";AAIA,SAAS,+BAA+B;AACxC,SAAS,sBAAsB;AAC/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,cAAc,kBAAkB;AACzC,SAAS,YAAY,YAAY,gBAAgB;AA2BjD,eAAsB,8BAAiE;AACrF,QAAM,mBAAmB,SAAS,OAAO,YAAY,MAAM,wBAAwB,IAAI;AACvF,MAAI,CAAC,iBAAkB,QAAO,EAAE,UAAU,KAAK;AAC/C,QAAM,SAAS,IAAI,gBAAgB,gBAAgB;AACnD,SAAO,EAAE,UAAU,OAAO,IAAI,UAAU,KAAK,KAAK;AACpD;AAEA,eAAsB,4BACpB,qBAA8B,MACK;AAnDrC;AAoDE,QAAM,SAAS,WAAW,IAAI,QAAQ;AACtC,QAAM,eAAe,KAAK,MAAM,OAAO,KAAK;AAC5C,QAAM,gBAAgB,KAAK,MAAM,OAAO,MAAM;AAC9C,QAAM,mBAAmB,SAAS,OAAO,YAAY,MAAM,wBAAwB,IAAI;AAEvF,SAAO;AAAA,IACL,IAAI,UAAU,YAAY,GAAG,MAAM,IAAI,SAAS,KAAK;AAAA,IACrD,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,oBAAkB,sDAA2B,GAAG,OAAM;AAAA,IACtD,UAAU,SAAS;AAAA,IACnB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,oBAAoB,WAAW,IAAI;AAAA,IACnC;AAAA,IACA;AAAA,IACA,mBAAmB,GAAG,YAAY,IAAI,aAAa;AAAA,IACnD,YAAU,sBAAW,MAAX,mBAAe,OAAf,mBAAmB,gBAAe;AAAA,IAC5C,aAAW,wBAAa,MAAb,mBAAiB,OAAjB,mBAAqB,aAAY;AAAA,IAC5C;AAAA,IACA,aAAa,qBAAqB,MAAM,eAAe,IAAI;AAAA,IAC3D,WAAW,KAAK,IAAI;AAAA,EACtB;AACF;","names":[]}
|
package/dist/schema/index.cjs
CHANGED
|
@@ -49,7 +49,7 @@ var tagsSchema = (0, import_mini.object)({
|
|
|
49
49
|
device_id: (0, import_mini.optional)((0, import_mini.string)().check((0, import_mini.trim)(), (0, import_mini.minLength)(1), (0, import_mini.maxLength)(36))),
|
|
50
50
|
device_type: (0, import_mini.optional)((0, import_mini.string)()),
|
|
51
51
|
device_vendor: (0, import_mini.optional)((0, import_mini.string)()),
|
|
52
|
-
device_pixel_ratio: (0, import_mini.optional)((0, import_mini.
|
|
52
|
+
device_pixel_ratio: (0, import_mini.optional)((0, import_mini.number)()),
|
|
53
53
|
screen_width: (0, import_mini.optional)((0, import_mini.number)()),
|
|
54
54
|
screen_height: (0, import_mini.optional)((0, import_mini.number)()),
|
|
55
55
|
screen_resolution: (0, import_mini.optional)(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schema/index.ts"],"sourcesContent":["import {\n enum as _enum,\n null as _null,\n array,\n boolean,\n coerce,\n email,\n iso,\n maxLength,\n minLength,\n number,\n object,\n optional,\n pipe,\n record,\n refine,\n regex,\n string,\n transform,\n trim,\n union,\n url,\n uuid,\n type z,\n} from 'zod/mini';\n\nconst items = array(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n )\n);\n\nexport const tagsSchema = object({\n os: optional(string()),\n os_name: optional(string()),\n os_version: optional(string()),\n browser: optional(string()),\n browser_name: optional(string()),\n browser_version: optional(string()),\n platform: optional(_enum(['ios', 'android', 'web', 'macos', 'windows', 'linux', 'unknown'])),\n device: optional(string()),\n device_id: optional(string().check(trim(), minLength(1), maxLength(36))),\n device_type: optional(string()),\n device_vendor: optional(string()),\n device_pixel_ratio: optional(string()),\n screen_width: optional(number()),\n screen_height: optional(number()),\n screen_resolution: optional(\n pipe(\n string().check(regex(/^\\d+x\\d+$/)),\n transform((v) => v as `${number}x${number}`)\n )\n ),\n release: optional(string()),\n language: optional(string()),\n time_zone: optional(string()),\n environment: optional(_enum(['development', 'production'])),\n source_url: optional(string()),\n source: optional(_enum(['web', 'app', 'offline'])),\n // app info\n advertising_id: optional(string()),\n install_referrer: optional(string()),\n // meta ads\n fbc: optional(string()),\n fbp: optional(string()),\n fbclid: optional(string()),\n ad_id: optional(string()),\n ad_name: optional(string()),\n adset_id: optional(string()),\n adset_name: optional(string()),\n campaign_id: optional(string()),\n campaign_name: optional(string()),\n placement: optional(string()),\n site_source_name: optional(string()),\n // google ads\n gclid: optional(string()),\n gclsrc: optional(string()),\n gad_source: optional(string()),\n gad_campaignid: optional(string()),\n // reddit ads\n rdt_cid: optional(string()),\n rdt_uuid: optional(string()),\n // click ids\n dclid: optional(string()),\n ko_click_id: optional(string()),\n li_fat_id: optional(string()),\n msclkid: optional(string()),\n sccid: optional(string()),\n ttclid: optional(string()),\n twclid: optional(string()),\n wbraid: optional(string()),\n yclid: optional(string()),\n // utm params\n utm_source: optional(string()),\n utm_medium: optional(string()),\n utm_campaign: optional(string()),\n utm_term: optional(string()),\n utm_content: optional(string()),\n utm_id: optional(string()),\n utm_source_platform: optional(string()),\n utm_creative_format: optional(string()),\n utm_marketing_tactic: optional(string()),\n});\n\nexport const propertiesSchema = optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null(), items])\n ).check(refine((data) => Object.keys(data).length <= 64))\n);\n\n/** @deprecated */\nexport const createTrackEventSchemaV1 = array(\n object({\n name: string().check(trim(), minLength(1), maxLength(64)),\n visitor_id: coerce.bigint(),\n timestamp: iso.datetime(),\n tags: tagsSchema,\n properties: propertiesSchema,\n })\n).check(minLength(1), maxLength(100));\n\nexport const createTrackEventSchema = array(\n object({\n name: string().check(trim(), minLength(1), maxLength(64)),\n visitor_id: uuid(),\n timestamp: iso.datetime(),\n tags: tagsSchema,\n properties: propertiesSchema,\n })\n).check(minLength(1), maxLength(100));\n\nexport const createVisitorSchema = object({\n device_id: string().check(trim(), minLength(1), maxLength(36)),\n properties: optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n ).check(refine((data) => Object.keys(data).length <= 64))\n ),\n});\n\nexport const updateVisitorSchema = object({\n user_id: optional(uuid()),\n properties: optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n ).check(refine((data) => Object.keys(data).length <= 64))\n ),\n});\n\nexport const createFeedbackSchema = object({\n name: string().check(minLength(1), maxLength(256)),\n email: email().check(maxLength(320)),\n message: string().check(minLength(1), maxLength(65536)),\n});\n\nconst noEmptyString = pipe(\n string().check(maxLength(256)),\n transform((v) => (v ? v : undefined))\n);\n\n/**\n * The schema for creating a link.\n * @see https://support.google.com/analytics/answer/10917952\n * */\nexport const createLinkSchema = object({\n /** The URL that the user is redirected to. */\n url: url().check(minLength(1), maxLength(1024)), // required\n\n /**\n * Campaign ID. Used to identify a specific campaign or promotion. This is a required key for GA4\n * data import. Use the same IDs that you use when uploading campaign cost data.\n */\n utm_id: optional(noEmptyString),\n\n /** Referrer, for example: google, newsletter4, billboard */\n utm_source: string().check(minLength(1), maxLength(256)), // required\n\n /** Marketing medium, for example: cpc, banner, email */\n utm_medium: string().check(minLength(1), maxLength(256)), // required\n\n /** Product, slogan, promo code, for example: spring_sale */\n utm_campaign: string().check(minLength(1), maxLength(256)), // required\n\n /** Paid keyword */\n utm_term: optional(noEmptyString),\n\n /**\n * Use to differentiate creatives. For example, if you have two call-to-action links within the\n * same email message, you can use utm_content and set different values for each so you can tell\n * which version is more effective.\n */\n utm_content: optional(noEmptyString),\n\n /**\n * The platform responsible for directing traffic to a given Analytics property (such as a buying\n * platform that sets budgets and targeting criteria or a platform that manages organic traffic\n * data). For example: Search Ads 360 or Display & Video 360.\n */\n utm_source_platform: optional(noEmptyString),\n\n /**\n * Type of creative, for example: display, native, video, search, utm_creative_format is not\n * currently reported in Google Analytics 4 properties.\n */\n utm_creative_format: optional(noEmptyString),\n\n /**\n * Targeting criteria applied to a campaign, for example: remarketing, prospecting,\n * utm_marketing_tactic is not currently reported in Google Analytics 4 properties.\n * */\n utm_marketing_tactic: optional(noEmptyString),\n});\n\nexport type CreateFeedbackDTO = z.output<typeof createFeedbackSchema>;\nexport type CreateLinkDTO = z.output<typeof createLinkSchema>;\n"],"mappings":"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","names":["_null","_enum"]}
|
|
1
|
+
{"version":3,"sources":["../../src/schema/index.ts"],"sourcesContent":["import {\n enum as _enum,\n null as _null,\n array,\n boolean,\n coerce,\n email,\n iso,\n maxLength,\n minLength,\n number,\n object,\n optional,\n pipe,\n record,\n refine,\n regex,\n string,\n transform,\n trim,\n union,\n url,\n uuid,\n type z,\n} from 'zod/mini';\n\nconst items = array(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n )\n);\n\nexport const tagsSchema = object({\n os: optional(string()),\n os_name: optional(string()),\n os_version: optional(string()),\n browser: optional(string()),\n browser_name: optional(string()),\n browser_version: optional(string()),\n platform: optional(_enum(['ios', 'android', 'web', 'macos', 'windows', 'linux', 'unknown'])),\n device: optional(string()),\n device_id: optional(string().check(trim(), minLength(1), maxLength(36))),\n device_type: optional(string()),\n device_vendor: optional(string()),\n device_pixel_ratio: optional(number()),\n screen_width: optional(number()),\n screen_height: optional(number()),\n screen_resolution: optional(\n pipe(\n string().check(regex(/^\\d+x\\d+$/)),\n transform((v) => v as `${number}x${number}`)\n )\n ),\n release: optional(string()),\n language: optional(string()),\n time_zone: optional(string()),\n environment: optional(_enum(['development', 'production'])),\n source_url: optional(string()),\n source: optional(_enum(['web', 'app', 'offline'])),\n // app info\n advertising_id: optional(string()),\n install_referrer: optional(string()),\n // meta ads\n fbc: optional(string()),\n fbp: optional(string()),\n fbclid: optional(string()),\n ad_id: optional(string()),\n ad_name: optional(string()),\n adset_id: optional(string()),\n adset_name: optional(string()),\n campaign_id: optional(string()),\n campaign_name: optional(string()),\n placement: optional(string()),\n site_source_name: optional(string()),\n // google ads\n gclid: optional(string()),\n gclsrc: optional(string()),\n gad_source: optional(string()),\n gad_campaignid: optional(string()),\n // reddit ads\n rdt_cid: optional(string()),\n rdt_uuid: optional(string()),\n // click ids\n dclid: optional(string()),\n ko_click_id: optional(string()),\n li_fat_id: optional(string()),\n msclkid: optional(string()),\n sccid: optional(string()),\n ttclid: optional(string()),\n twclid: optional(string()),\n wbraid: optional(string()),\n yclid: optional(string()),\n // utm params\n utm_source: optional(string()),\n utm_medium: optional(string()),\n utm_campaign: optional(string()),\n utm_term: optional(string()),\n utm_content: optional(string()),\n utm_id: optional(string()),\n utm_source_platform: optional(string()),\n utm_creative_format: optional(string()),\n utm_marketing_tactic: optional(string()),\n});\n\nexport const propertiesSchema = optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null(), items])\n ).check(refine((data) => Object.keys(data).length <= 64))\n);\n\n/** @deprecated */\nexport const createTrackEventSchemaV1 = array(\n object({\n name: string().check(trim(), minLength(1), maxLength(64)),\n visitor_id: coerce.bigint(),\n timestamp: iso.datetime(),\n tags: tagsSchema,\n properties: propertiesSchema,\n })\n).check(minLength(1), maxLength(100));\n\nexport const createTrackEventSchema = array(\n object({\n name: string().check(trim(), minLength(1), maxLength(64)),\n visitor_id: uuid(),\n timestamp: iso.datetime(),\n tags: tagsSchema,\n properties: propertiesSchema,\n })\n).check(minLength(1), maxLength(100));\n\nexport const createVisitorSchema = object({\n device_id: string().check(trim(), minLength(1), maxLength(36)),\n properties: optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n ).check(refine((data) => Object.keys(data).length <= 64))\n ),\n});\n\nexport const updateVisitorSchema = object({\n user_id: optional(uuid()),\n properties: optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n ).check(refine((data) => Object.keys(data).length <= 64))\n ),\n});\n\nexport const createFeedbackSchema = object({\n name: string().check(minLength(1), maxLength(256)),\n email: email().check(maxLength(320)),\n message: string().check(minLength(1), maxLength(65536)),\n});\n\nconst noEmptyString = pipe(\n string().check(maxLength(256)),\n transform((v) => (v ? v : undefined))\n);\n\n/**\n * The schema for creating a link.\n * @see https://support.google.com/analytics/answer/10917952\n * */\nexport const createLinkSchema = object({\n /** The URL that the user is redirected to. */\n url: url().check(minLength(1), maxLength(1024)), // required\n\n /**\n * Campaign ID. Used to identify a specific campaign or promotion. This is a required key for GA4\n * data import. Use the same IDs that you use when uploading campaign cost data.\n */\n utm_id: optional(noEmptyString),\n\n /** Referrer, for example: google, newsletter4, billboard */\n utm_source: string().check(minLength(1), maxLength(256)), // required\n\n /** Marketing medium, for example: cpc, banner, email */\n utm_medium: string().check(minLength(1), maxLength(256)), // required\n\n /** Product, slogan, promo code, for example: spring_sale */\n utm_campaign: string().check(minLength(1), maxLength(256)), // required\n\n /** Paid keyword */\n utm_term: optional(noEmptyString),\n\n /**\n * Use to differentiate creatives. For example, if you have two call-to-action links within the\n * same email message, you can use utm_content and set different values for each so you can tell\n * which version is more effective.\n */\n utm_content: optional(noEmptyString),\n\n /**\n * The platform responsible for directing traffic to a given Analytics property (such as a buying\n * platform that sets budgets and targeting criteria or a platform that manages organic traffic\n * data). For example: Search Ads 360 or Display & Video 360.\n */\n utm_source_platform: optional(noEmptyString),\n\n /**\n * Type of creative, for example: display, native, video, search, utm_creative_format is not\n * currently reported in Google Analytics 4 properties.\n */\n utm_creative_format: optional(noEmptyString),\n\n /**\n * Targeting criteria applied to a campaign, for example: remarketing, prospecting,\n * utm_marketing_tactic is not currently reported in Google Analytics 4 properties.\n * */\n utm_marketing_tactic: optional(noEmptyString),\n});\n\nexport type CreateFeedbackDTO = z.output<typeof createFeedbackSchema>;\nexport type CreateLinkDTO = z.output<typeof createLinkSchema>;\n"],"mappings":"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","names":["_null","_enum"]}
|
package/dist/schema/index.d.cts
CHANGED
|
@@ -20,7 +20,7 @@ declare const tagsSchema: z.ZodMiniObject<{
|
|
|
20
20
|
device_id: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
21
21
|
device_type: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
22
22
|
device_vendor: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
23
|
-
device_pixel_ratio: z.ZodMiniOptional<z.
|
|
23
|
+
device_pixel_ratio: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
24
24
|
screen_width: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
25
25
|
screen_height: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
26
26
|
screen_resolution: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<`${number}x${number}`, string>>>;
|
|
@@ -101,7 +101,7 @@ declare const createTrackEventSchemaV1: z.ZodMiniArray<z.ZodMiniObject<{
|
|
|
101
101
|
device_id: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
102
102
|
device_type: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
103
103
|
device_vendor: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
104
|
-
device_pixel_ratio: z.ZodMiniOptional<z.
|
|
104
|
+
device_pixel_ratio: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
105
105
|
screen_width: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
106
106
|
screen_height: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
107
107
|
screen_resolution: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<`${number}x${number}`, string>>>;
|
|
@@ -182,7 +182,7 @@ declare const createTrackEventSchema: z.ZodMiniArray<z.ZodMiniObject<{
|
|
|
182
182
|
device_id: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
183
183
|
device_type: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
184
184
|
device_vendor: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
185
|
-
device_pixel_ratio: z.ZodMiniOptional<z.
|
|
185
|
+
device_pixel_ratio: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
186
186
|
screen_width: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
187
187
|
screen_height: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
188
188
|
screen_resolution: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<`${number}x${number}`, string>>>;
|
package/dist/schema/index.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ declare const tagsSchema: z.ZodMiniObject<{
|
|
|
20
20
|
device_id: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
21
21
|
device_type: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
22
22
|
device_vendor: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
23
|
-
device_pixel_ratio: z.ZodMiniOptional<z.
|
|
23
|
+
device_pixel_ratio: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
24
24
|
screen_width: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
25
25
|
screen_height: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
26
26
|
screen_resolution: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<`${number}x${number}`, string>>>;
|
|
@@ -101,7 +101,7 @@ declare const createTrackEventSchemaV1: z.ZodMiniArray<z.ZodMiniObject<{
|
|
|
101
101
|
device_id: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
102
102
|
device_type: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
103
103
|
device_vendor: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
104
|
-
device_pixel_ratio: z.ZodMiniOptional<z.
|
|
104
|
+
device_pixel_ratio: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
105
105
|
screen_width: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
106
106
|
screen_height: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
107
107
|
screen_resolution: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<`${number}x${number}`, string>>>;
|
|
@@ -182,7 +182,7 @@ declare const createTrackEventSchema: z.ZodMiniArray<z.ZodMiniObject<{
|
|
|
182
182
|
device_id: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
183
183
|
device_type: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
184
184
|
device_vendor: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
185
|
-
device_pixel_ratio: z.ZodMiniOptional<z.
|
|
185
|
+
device_pixel_ratio: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
186
186
|
screen_width: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
187
187
|
screen_height: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
188
188
|
screen_resolution: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<`${number}x${number}`, string>>>;
|
package/dist/schema/index.mjs
CHANGED
|
@@ -41,7 +41,7 @@ var tagsSchema = object({
|
|
|
41
41
|
device_id: optional(string().check(trim(), minLength(1), maxLength(36))),
|
|
42
42
|
device_type: optional(string()),
|
|
43
43
|
device_vendor: optional(string()),
|
|
44
|
-
device_pixel_ratio: optional(
|
|
44
|
+
device_pixel_ratio: optional(number()),
|
|
45
45
|
screen_width: optional(number()),
|
|
46
46
|
screen_height: optional(number()),
|
|
47
47
|
screen_resolution: optional(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schema/index.ts"],"sourcesContent":["import {\n enum as _enum,\n null as _null,\n array,\n boolean,\n coerce,\n email,\n iso,\n maxLength,\n minLength,\n number,\n object,\n optional,\n pipe,\n record,\n refine,\n regex,\n string,\n transform,\n trim,\n union,\n url,\n uuid,\n type z,\n} from 'zod/mini';\n\nconst items = array(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n )\n);\n\nexport const tagsSchema = object({\n os: optional(string()),\n os_name: optional(string()),\n os_version: optional(string()),\n browser: optional(string()),\n browser_name: optional(string()),\n browser_version: optional(string()),\n platform: optional(_enum(['ios', 'android', 'web', 'macos', 'windows', 'linux', 'unknown'])),\n device: optional(string()),\n device_id: optional(string().check(trim(), minLength(1), maxLength(36))),\n device_type: optional(string()),\n device_vendor: optional(string()),\n device_pixel_ratio: optional(string()),\n screen_width: optional(number()),\n screen_height: optional(number()),\n screen_resolution: optional(\n pipe(\n string().check(regex(/^\\d+x\\d+$/)),\n transform((v) => v as `${number}x${number}`)\n )\n ),\n release: optional(string()),\n language: optional(string()),\n time_zone: optional(string()),\n environment: optional(_enum(['development', 'production'])),\n source_url: optional(string()),\n source: optional(_enum(['web', 'app', 'offline'])),\n // app info\n advertising_id: optional(string()),\n install_referrer: optional(string()),\n // meta ads\n fbc: optional(string()),\n fbp: optional(string()),\n fbclid: optional(string()),\n ad_id: optional(string()),\n ad_name: optional(string()),\n adset_id: optional(string()),\n adset_name: optional(string()),\n campaign_id: optional(string()),\n campaign_name: optional(string()),\n placement: optional(string()),\n site_source_name: optional(string()),\n // google ads\n gclid: optional(string()),\n gclsrc: optional(string()),\n gad_source: optional(string()),\n gad_campaignid: optional(string()),\n // reddit ads\n rdt_cid: optional(string()),\n rdt_uuid: optional(string()),\n // click ids\n dclid: optional(string()),\n ko_click_id: optional(string()),\n li_fat_id: optional(string()),\n msclkid: optional(string()),\n sccid: optional(string()),\n ttclid: optional(string()),\n twclid: optional(string()),\n wbraid: optional(string()),\n yclid: optional(string()),\n // utm params\n utm_source: optional(string()),\n utm_medium: optional(string()),\n utm_campaign: optional(string()),\n utm_term: optional(string()),\n utm_content: optional(string()),\n utm_id: optional(string()),\n utm_source_platform: optional(string()),\n utm_creative_format: optional(string()),\n utm_marketing_tactic: optional(string()),\n});\n\nexport const propertiesSchema = optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null(), items])\n ).check(refine((data) => Object.keys(data).length <= 64))\n);\n\n/** @deprecated */\nexport const createTrackEventSchemaV1 = array(\n object({\n name: string().check(trim(), minLength(1), maxLength(64)),\n visitor_id: coerce.bigint(),\n timestamp: iso.datetime(),\n tags: tagsSchema,\n properties: propertiesSchema,\n })\n).check(minLength(1), maxLength(100));\n\nexport const createTrackEventSchema = array(\n object({\n name: string().check(trim(), minLength(1), maxLength(64)),\n visitor_id: uuid(),\n timestamp: iso.datetime(),\n tags: tagsSchema,\n properties: propertiesSchema,\n })\n).check(minLength(1), maxLength(100));\n\nexport const createVisitorSchema = object({\n device_id: string().check(trim(), minLength(1), maxLength(36)),\n properties: optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n ).check(refine((data) => Object.keys(data).length <= 64))\n ),\n});\n\nexport const updateVisitorSchema = object({\n user_id: optional(uuid()),\n properties: optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n ).check(refine((data) => Object.keys(data).length <= 64))\n ),\n});\n\nexport const createFeedbackSchema = object({\n name: string().check(minLength(1), maxLength(256)),\n email: email().check(maxLength(320)),\n message: string().check(minLength(1), maxLength(65536)),\n});\n\nconst noEmptyString = pipe(\n string().check(maxLength(256)),\n transform((v) => (v ? v : undefined))\n);\n\n/**\n * The schema for creating a link.\n * @see https://support.google.com/analytics/answer/10917952\n * */\nexport const createLinkSchema = object({\n /** The URL that the user is redirected to. */\n url: url().check(minLength(1), maxLength(1024)), // required\n\n /**\n * Campaign ID. Used to identify a specific campaign or promotion. This is a required key for GA4\n * data import. Use the same IDs that you use when uploading campaign cost data.\n */\n utm_id: optional(noEmptyString),\n\n /** Referrer, for example: google, newsletter4, billboard */\n utm_source: string().check(minLength(1), maxLength(256)), // required\n\n /** Marketing medium, for example: cpc, banner, email */\n utm_medium: string().check(minLength(1), maxLength(256)), // required\n\n /** Product, slogan, promo code, for example: spring_sale */\n utm_campaign: string().check(minLength(1), maxLength(256)), // required\n\n /** Paid keyword */\n utm_term: optional(noEmptyString),\n\n /**\n * Use to differentiate creatives. For example, if you have two call-to-action links within the\n * same email message, you can use utm_content and set different values for each so you can tell\n * which version is more effective.\n */\n utm_content: optional(noEmptyString),\n\n /**\n * The platform responsible for directing traffic to a given Analytics property (such as a buying\n * platform that sets budgets and targeting criteria or a platform that manages organic traffic\n * data). For example: Search Ads 360 or Display & Video 360.\n */\n utm_source_platform: optional(noEmptyString),\n\n /**\n * Type of creative, for example: display, native, video, search, utm_creative_format is not\n * currently reported in Google Analytics 4 properties.\n */\n utm_creative_format: optional(noEmptyString),\n\n /**\n * Targeting criteria applied to a campaign, for example: remarketing, prospecting,\n * utm_marketing_tactic is not currently reported in Google Analytics 4 properties.\n * */\n utm_marketing_tactic: optional(noEmptyString),\n});\n\nexport type CreateFeedbackDTO = z.output<typeof createFeedbackSchema>;\nexport type CreateLinkDTO = z.output<typeof createLinkSchema>;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/schema/index.ts"],"sourcesContent":["import {\n enum as _enum,\n null as _null,\n array,\n boolean,\n coerce,\n email,\n iso,\n maxLength,\n minLength,\n number,\n object,\n optional,\n pipe,\n record,\n refine,\n regex,\n string,\n transform,\n trim,\n union,\n url,\n uuid,\n type z,\n} from 'zod/mini';\n\nconst items = array(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n )\n);\n\nexport const tagsSchema = object({\n os: optional(string()),\n os_name: optional(string()),\n os_version: optional(string()),\n browser: optional(string()),\n browser_name: optional(string()),\n browser_version: optional(string()),\n platform: optional(_enum(['ios', 'android', 'web', 'macos', 'windows', 'linux', 'unknown'])),\n device: optional(string()),\n device_id: optional(string().check(trim(), minLength(1), maxLength(36))),\n device_type: optional(string()),\n device_vendor: optional(string()),\n device_pixel_ratio: optional(number()),\n screen_width: optional(number()),\n screen_height: optional(number()),\n screen_resolution: optional(\n pipe(\n string().check(regex(/^\\d+x\\d+$/)),\n transform((v) => v as `${number}x${number}`)\n )\n ),\n release: optional(string()),\n language: optional(string()),\n time_zone: optional(string()),\n environment: optional(_enum(['development', 'production'])),\n source_url: optional(string()),\n source: optional(_enum(['web', 'app', 'offline'])),\n // app info\n advertising_id: optional(string()),\n install_referrer: optional(string()),\n // meta ads\n fbc: optional(string()),\n fbp: optional(string()),\n fbclid: optional(string()),\n ad_id: optional(string()),\n ad_name: optional(string()),\n adset_id: optional(string()),\n adset_name: optional(string()),\n campaign_id: optional(string()),\n campaign_name: optional(string()),\n placement: optional(string()),\n site_source_name: optional(string()),\n // google ads\n gclid: optional(string()),\n gclsrc: optional(string()),\n gad_source: optional(string()),\n gad_campaignid: optional(string()),\n // reddit ads\n rdt_cid: optional(string()),\n rdt_uuid: optional(string()),\n // click ids\n dclid: optional(string()),\n ko_click_id: optional(string()),\n li_fat_id: optional(string()),\n msclkid: optional(string()),\n sccid: optional(string()),\n ttclid: optional(string()),\n twclid: optional(string()),\n wbraid: optional(string()),\n yclid: optional(string()),\n // utm params\n utm_source: optional(string()),\n utm_medium: optional(string()),\n utm_campaign: optional(string()),\n utm_term: optional(string()),\n utm_content: optional(string()),\n utm_id: optional(string()),\n utm_source_platform: optional(string()),\n utm_creative_format: optional(string()),\n utm_marketing_tactic: optional(string()),\n});\n\nexport const propertiesSchema = optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null(), items])\n ).check(refine((data) => Object.keys(data).length <= 64))\n);\n\n/** @deprecated */\nexport const createTrackEventSchemaV1 = array(\n object({\n name: string().check(trim(), minLength(1), maxLength(64)),\n visitor_id: coerce.bigint(),\n timestamp: iso.datetime(),\n tags: tagsSchema,\n properties: propertiesSchema,\n })\n).check(minLength(1), maxLength(100));\n\nexport const createTrackEventSchema = array(\n object({\n name: string().check(trim(), minLength(1), maxLength(64)),\n visitor_id: uuid(),\n timestamp: iso.datetime(),\n tags: tagsSchema,\n properties: propertiesSchema,\n })\n).check(minLength(1), maxLength(100));\n\nexport const createVisitorSchema = object({\n device_id: string().check(trim(), minLength(1), maxLength(36)),\n properties: optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n ).check(refine((data) => Object.keys(data).length <= 64))\n ),\n});\n\nexport const updateVisitorSchema = object({\n user_id: optional(uuid()),\n properties: optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n ).check(refine((data) => Object.keys(data).length <= 64))\n ),\n});\n\nexport const createFeedbackSchema = object({\n name: string().check(minLength(1), maxLength(256)),\n email: email().check(maxLength(320)),\n message: string().check(minLength(1), maxLength(65536)),\n});\n\nconst noEmptyString = pipe(\n string().check(maxLength(256)),\n transform((v) => (v ? v : undefined))\n);\n\n/**\n * The schema for creating a link.\n * @see https://support.google.com/analytics/answer/10917952\n * */\nexport const createLinkSchema = object({\n /** The URL that the user is redirected to. */\n url: url().check(minLength(1), maxLength(1024)), // required\n\n /**\n * Campaign ID. Used to identify a specific campaign or promotion. This is a required key for GA4\n * data import. Use the same IDs that you use when uploading campaign cost data.\n */\n utm_id: optional(noEmptyString),\n\n /** Referrer, for example: google, newsletter4, billboard */\n utm_source: string().check(minLength(1), maxLength(256)), // required\n\n /** Marketing medium, for example: cpc, banner, email */\n utm_medium: string().check(minLength(1), maxLength(256)), // required\n\n /** Product, slogan, promo code, for example: spring_sale */\n utm_campaign: string().check(minLength(1), maxLength(256)), // required\n\n /** Paid keyword */\n utm_term: optional(noEmptyString),\n\n /**\n * Use to differentiate creatives. For example, if you have two call-to-action links within the\n * same email message, you can use utm_content and set different values for each so you can tell\n * which version is more effective.\n */\n utm_content: optional(noEmptyString),\n\n /**\n * The platform responsible for directing traffic to a given Analytics property (such as a buying\n * platform that sets budgets and targeting criteria or a platform that manages organic traffic\n * data). For example: Search Ads 360 or Display & Video 360.\n */\n utm_source_platform: optional(noEmptyString),\n\n /**\n * Type of creative, for example: display, native, video, search, utm_creative_format is not\n * currently reported in Google Analytics 4 properties.\n */\n utm_creative_format: optional(noEmptyString),\n\n /**\n * Targeting criteria applied to a campaign, for example: remarketing, prospecting,\n * utm_marketing_tactic is not currently reported in Google Analytics 4 properties.\n * */\n utm_marketing_tactic: optional(noEmptyString),\n});\n\nexport type CreateFeedbackDTO = z.output<typeof createFeedbackSchema>;\nexport type CreateLinkDTO = z.output<typeof createLinkSchema>;\n"],"mappings":"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","names":[]}
|