@shware/analytics 0.0.7 → 0.1.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.
@@ -0,0 +1,193 @@
1
+ import { T as TrackTags, a as ThirdPartyTracker, b as ThirdPartyUserSetter, E as EventName, c as TrackProperties, d as TrackEventResponse, V as Visitor, e as VisitorProperties } from './shared/analytics.BsiFCGfy.mjs';
2
+ import { z } from 'zod';
3
+
4
+ interface Storage {
5
+ getItem: (key: string) => (string | null) | Promise<string | null>;
6
+ setItem: (key: string, value: string) => void | Promise<void>;
7
+ }
8
+ interface Options {
9
+ release: string;
10
+ storage: Storage;
11
+ endpoint: string;
12
+ getTags: () => TrackTags | Promise<TrackTags>;
13
+ getDeviceId: () => string | Promise<string>;
14
+ thirdPartyTrackers?: ThirdPartyTracker[];
15
+ thirdPartyUserSetters?: ThirdPartyUserSetter[];
16
+ }
17
+ declare function setupAnalytics(init: Options): void;
18
+
19
+ interface TrackOptions {
20
+ enableThirdPartyTracking?: boolean;
21
+ onSucceed?: (response?: TrackEventResponse) => void;
22
+ onError?: (error: unknown) => void;
23
+ }
24
+ declare function track<T extends EventName = EventName>(name: T, properties?: TrackProperties<T>, trackOptions?: TrackOptions): void;
25
+
26
+ declare function getVisitor(): Promise<Visitor>;
27
+ declare function setVisitor(properties: VisitorProperties): Promise<Visitor>;
28
+
29
+ declare const createTrackEventSchema: z.ZodObject<{
30
+ name: z.ZodString;
31
+ tags: z.ZodObject<{
32
+ os: z.ZodOptional<z.ZodString>;
33
+ os_name: z.ZodOptional<z.ZodString>;
34
+ os_version: z.ZodOptional<z.ZodString>;
35
+ browser: z.ZodOptional<z.ZodString>;
36
+ browser_name: z.ZodOptional<z.ZodString>;
37
+ browser_version: z.ZodOptional<z.ZodString>;
38
+ platform: z.ZodOptional<z.ZodEnum<["ios", "android", "web", "macos", "windows", "linux", "unknown"]>>;
39
+ device: z.ZodOptional<z.ZodString>;
40
+ device_id: z.ZodOptional<z.ZodString>;
41
+ device_type: z.ZodOptional<z.ZodString>;
42
+ device_vendor: z.ZodOptional<z.ZodString>;
43
+ device_pixel_ratio: z.ZodOptional<z.ZodString>;
44
+ screen_resolution: z.ZodOptional<z.ZodString>;
45
+ release: z.ZodOptional<z.ZodString>;
46
+ language: z.ZodOptional<z.ZodString>;
47
+ timezone: z.ZodOptional<z.ZodString>;
48
+ environment: z.ZodOptional<z.ZodEnum<["development", "production"]>>;
49
+ source_url: z.ZodOptional<z.ZodString>;
50
+ source: z.ZodOptional<z.ZodEnum<["web", "app", "offline"]>>;
51
+ fbc: z.ZodOptional<z.ZodString>;
52
+ fbp: z.ZodOptional<z.ZodString>;
53
+ gclid: z.ZodOptional<z.ZodString>;
54
+ utm_source: z.ZodOptional<z.ZodString>;
55
+ utm_medium: z.ZodOptional<z.ZodString>;
56
+ utm_campaign: z.ZodOptional<z.ZodString>;
57
+ utm_term: z.ZodOptional<z.ZodString>;
58
+ utm_content: z.ZodOptional<z.ZodString>;
59
+ }, "strip", z.ZodTypeAny, {
60
+ os?: string | undefined;
61
+ os_name?: string | undefined;
62
+ os_version?: string | undefined;
63
+ browser?: string | undefined;
64
+ browser_name?: string | undefined;
65
+ browser_version?: string | undefined;
66
+ platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
67
+ device?: string | undefined;
68
+ device_id?: string | undefined;
69
+ device_type?: string | undefined;
70
+ device_vendor?: string | undefined;
71
+ device_pixel_ratio?: string | undefined;
72
+ screen_resolution?: string | undefined;
73
+ release?: string | undefined;
74
+ language?: string | undefined;
75
+ timezone?: string | undefined;
76
+ environment?: "development" | "production" | undefined;
77
+ source_url?: string | undefined;
78
+ source?: "web" | "app" | "offline" | undefined;
79
+ fbc?: string | undefined;
80
+ fbp?: string | undefined;
81
+ gclid?: string | undefined;
82
+ utm_source?: string | undefined;
83
+ utm_medium?: string | undefined;
84
+ utm_campaign?: string | undefined;
85
+ utm_term?: string | undefined;
86
+ utm_content?: string | undefined;
87
+ }, {
88
+ os?: string | undefined;
89
+ os_name?: string | undefined;
90
+ os_version?: string | undefined;
91
+ browser?: string | undefined;
92
+ browser_name?: string | undefined;
93
+ browser_version?: string | undefined;
94
+ platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
95
+ device?: string | undefined;
96
+ device_id?: string | undefined;
97
+ device_type?: string | undefined;
98
+ device_vendor?: string | undefined;
99
+ device_pixel_ratio?: string | undefined;
100
+ screen_resolution?: string | undefined;
101
+ release?: string | undefined;
102
+ language?: string | undefined;
103
+ timezone?: string | undefined;
104
+ environment?: "development" | "production" | undefined;
105
+ source_url?: string | undefined;
106
+ source?: "web" | "app" | "offline" | undefined;
107
+ fbc?: string | undefined;
108
+ fbp?: string | undefined;
109
+ gclid?: string | undefined;
110
+ utm_source?: string | undefined;
111
+ utm_medium?: string | undefined;
112
+ utm_campaign?: string | undefined;
113
+ utm_term?: string | undefined;
114
+ utm_content?: string | undefined;
115
+ }>;
116
+ properties: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>;
117
+ }, "strip", z.ZodTypeAny, {
118
+ name: string;
119
+ tags: {
120
+ os?: string | undefined;
121
+ os_name?: string | undefined;
122
+ os_version?: string | undefined;
123
+ browser?: string | undefined;
124
+ browser_name?: string | undefined;
125
+ browser_version?: string | undefined;
126
+ platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
127
+ device?: string | undefined;
128
+ device_id?: string | undefined;
129
+ device_type?: string | undefined;
130
+ device_vendor?: string | undefined;
131
+ device_pixel_ratio?: string | undefined;
132
+ screen_resolution?: string | undefined;
133
+ release?: string | undefined;
134
+ language?: string | undefined;
135
+ timezone?: string | undefined;
136
+ environment?: "development" | "production" | undefined;
137
+ source_url?: string | undefined;
138
+ source?: "web" | "app" | "offline" | undefined;
139
+ fbc?: string | undefined;
140
+ fbp?: string | undefined;
141
+ gclid?: string | undefined;
142
+ utm_source?: string | undefined;
143
+ utm_medium?: string | undefined;
144
+ utm_campaign?: string | undefined;
145
+ utm_term?: string | undefined;
146
+ utm_content?: string | undefined;
147
+ };
148
+ properties: Record<string, string | number | boolean | null>;
149
+ }, {
150
+ name: string;
151
+ tags: {
152
+ os?: string | undefined;
153
+ os_name?: string | undefined;
154
+ os_version?: string | undefined;
155
+ browser?: string | undefined;
156
+ browser_name?: string | undefined;
157
+ browser_version?: string | undefined;
158
+ platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
159
+ device?: string | undefined;
160
+ device_id?: string | undefined;
161
+ device_type?: string | undefined;
162
+ device_vendor?: string | undefined;
163
+ device_pixel_ratio?: string | undefined;
164
+ screen_resolution?: string | undefined;
165
+ release?: string | undefined;
166
+ language?: string | undefined;
167
+ timezone?: string | undefined;
168
+ environment?: "development" | "production" | undefined;
169
+ source_url?: string | undefined;
170
+ source?: "web" | "app" | "offline" | undefined;
171
+ fbc?: string | undefined;
172
+ fbp?: string | undefined;
173
+ gclid?: string | undefined;
174
+ utm_source?: string | undefined;
175
+ utm_medium?: string | undefined;
176
+ utm_campaign?: string | undefined;
177
+ utm_term?: string | undefined;
178
+ utm_content?: string | undefined;
179
+ };
180
+ properties: Record<string, string | number | boolean | null>;
181
+ }>;
182
+ declare const createVisitorSchema: z.ZodObject<{
183
+ device_id: z.ZodString;
184
+ properties: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>;
185
+ }, "strip", z.ZodTypeAny, {
186
+ device_id: string;
187
+ properties: Record<string, string | number | boolean | null>;
188
+ }, {
189
+ device_id: string;
190
+ properties: Record<string, string | number | boolean | null>;
191
+ }>;
192
+
193
+ export { TrackProperties, TrackTags, VisitorProperties, createTrackEventSchema, createVisitorSchema, getVisitor, setVisitor, setupAnalytics, track };
package/dist/index.mjs ADDED
@@ -0,0 +1,137 @@
1
+ import axios from 'axios';
2
+ import retry from 'axios-retry';
3
+ import { TokenBucket } from 'limiter';
4
+ import { z } from 'zod';
5
+
6
+ const config = {
7
+ http: null,
8
+ release: "0.0.0",
9
+ storage: null,
10
+ getTags: null,
11
+ getDeviceId: null,
12
+ thirdPartyTrackers: [],
13
+ thirdPartyUserSetters: []
14
+ };
15
+ function setupAnalytics(init) {
16
+ config.release = init.release;
17
+ config.storage = init.storage;
18
+ config.getTags = init.getTags;
19
+ config.getDeviceId = init.getDeviceId;
20
+ config.thirdPartyTrackers = init.thirdPartyTrackers ?? [];
21
+ config.thirdPartyUserSetters = init.thirdPartyUserSetters ?? [];
22
+ config.http = axios.create({ baseURL: init.endpoint, withCredentials: true, adapter: "fetch" });
23
+ retry(config.http, { retries: 5, retryDelay: retry.exponentialDelay });
24
+ }
25
+
26
+ const key = "visitor_id";
27
+ async function getOrCreateVisitor() {
28
+ const visitorId = await config.storage.getItem(key);
29
+ if (visitorId) {
30
+ const response = await config.http.get(`/visitors/${visitorId}`);
31
+ return response.data;
32
+ } else {
33
+ const dto = {
34
+ device_id: await config.getDeviceId(),
35
+ properties: await config.getTags()
36
+ };
37
+ const response = await config.http.post(`/visitors`, dto);
38
+ await config.storage.setItem(key, response.data.id);
39
+ return response.data;
40
+ }
41
+ }
42
+ let visitor = null;
43
+ let visitorFetcher = null;
44
+ async function getVisitor() {
45
+ if (visitor) return visitor;
46
+ if (visitorFetcher) return visitorFetcher;
47
+ visitorFetcher = getOrCreateVisitor();
48
+ visitor = await visitorFetcher;
49
+ visitorFetcher = null;
50
+ return visitor;
51
+ }
52
+ async function setVisitor(properties) {
53
+ const dto = { properties };
54
+ const { id } = await getVisitor();
55
+ const response = await config.http.patch(`/visitors/${id}`, dto);
56
+ config.thirdPartyUserSetters.forEach((setter) => setter(properties));
57
+ visitor = response.data;
58
+ return response.data;
59
+ }
60
+
61
+ const defaultOptions = { enableThirdPartyTracking: true };
62
+ const REQUEST_TOKENS = 2;
63
+ const tokenBucket = new TokenBucket({
64
+ bucketSize: 20,
65
+ interval: "second",
66
+ tokensPerInterval: 1
67
+ });
68
+ async function trackAsync(name, properties, trackOptions = defaultOptions) {
69
+ try {
70
+ await tokenBucket.removeTokens(REQUEST_TOKENS);
71
+ const dto = {
72
+ name,
73
+ properties,
74
+ tags: await config.getTags(),
75
+ visitor_id: (await getVisitor()).id,
76
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
77
+ };
78
+ const { data } = await config.http.post(`/events`, dto);
79
+ if (!trackOptions.enableThirdPartyTracking || !config.thirdPartyTrackers) return;
80
+ config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, data.id));
81
+ trackOptions.onSucceed?.(data);
82
+ } catch (e) {
83
+ if (e instanceof Error) {
84
+ console.log("Failed to send track event:", e.message);
85
+ }
86
+ trackOptions.onError?.(e);
87
+ }
88
+ }
89
+ function track(name, properties, trackOptions = defaultOptions) {
90
+ trackAsync(name, properties, trackOptions).catch(console.error);
91
+ }
92
+
93
+ const createTrackEventSchema = z.object({
94
+ name: z.string().trim().min(1).max(64),
95
+ tags: z.object({
96
+ os: z.string().optional(),
97
+ os_name: z.string().optional(),
98
+ os_version: z.string().optional(),
99
+ browser: z.string().optional(),
100
+ browser_name: z.string().optional(),
101
+ browser_version: z.string().optional(),
102
+ platform: z.enum(["ios", "android", "web", "macos", "windows", "linux", "unknown"]).optional(),
103
+ device: z.string().optional(),
104
+ device_id: z.string().trim().min(1).max(36).optional(),
105
+ device_type: z.string().optional(),
106
+ device_vendor: z.string().optional(),
107
+ device_pixel_ratio: z.string().optional(),
108
+ screen_resolution: z.string().regex(/^\d+x\d+$/).optional(),
109
+ release: z.string().optional(),
110
+ language: z.string().optional(),
111
+ timezone: z.string().optional(),
112
+ environment: z.enum(["development", "production"]).optional(),
113
+ source_url: z.string().optional(),
114
+ source: z.enum(["web", "app", "offline"]).optional(),
115
+ fbc: z.string().optional(),
116
+ fbp: z.string().optional(),
117
+ gclid: z.string().optional(),
118
+ utm_source: z.string().optional(),
119
+ utm_medium: z.string().optional(),
120
+ utm_campaign: z.string().optional(),
121
+ utm_term: z.string().optional(),
122
+ utm_content: z.string().optional()
123
+ }),
124
+ properties: z.record(
125
+ z.string().trim().min(1).max(128),
126
+ z.union([z.string(), z.number(), z.boolean(), z.null()])
127
+ )
128
+ });
129
+ const createVisitorSchema = z.object({
130
+ device_id: z.string().trim().min(1).max(36),
131
+ properties: z.record(
132
+ z.string().trim().min(1).max(128),
133
+ z.union([z.string(), z.number(), z.boolean(), z.null()])
134
+ )
135
+ });
136
+
137
+ export { createTrackEventSchema, createVisitorSchema, getVisitor, setVisitor, setupAnalytics, track };
@@ -1,4 +1,4 @@
1
- export interface Item {
1
+ interface Item {
2
2
  item_brand?: string;
3
3
  item_id?: string;
4
4
  item_name?: string;
@@ -18,7 +18,7 @@ export interface Item {
18
18
  * ref: https://developers.google.com/analytics/devguides/collection/ga4/reference/events?client_type=gtag
19
19
  * ref: https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics.Event
20
20
  * */
21
- export type StandardEventProperties = {
21
+ type StandardEventProperties = {
22
22
  add_payment_info: {
23
23
  items?: Item[];
24
24
  currency?: string;
@@ -227,25 +227,12 @@ export type StandardEventProperties = {
227
227
  search_term: string;
228
228
  };
229
229
  };
230
- export type AllowedPropertyValues = string | number | boolean | null;
231
- export type EventName = Lowercase<string>;
232
- export type CustomEventProperties = Record<Lowercase<string>, AllowedPropertyValues>;
233
- export type TrackProperties<T extends EventName = EventName> = T extends keyof StandardEventProperties ? StandardEventProperties[T] : CustomEventProperties;
234
- export interface UserData {
235
- userId: string;
236
- email?: string;
237
- firstName?: string;
238
- lastName?: string;
239
- phone?: string;
240
- dateOfBirth?: string;
241
- gender?: string;
242
- city?: string;
243
- state?: string;
244
- postal?: string;
245
- country?: string;
246
- }
247
- export type ThirdPartyLogger = <T extends EventName = EventName>(name: T, properties?: TrackProperties<T>, event_id?: string) => void;
248
- export interface PlatformInfo {
230
+ type AllowedPropertyValues = string | number | boolean | null;
231
+ type EventName = Lowercase<string>;
232
+ type CustomEventProperties = Record<Lowercase<string>, AllowedPropertyValues>;
233
+ type TrackProperties<T extends EventName = EventName> = T extends keyof StandardEventProperties ? StandardEventProperties[T] : CustomEventProperties;
234
+ type ThirdPartyTracker = <T extends EventName = EventName>(name: T, properties?: TrackProperties<T>, event_id?: string) => void;
235
+ interface PlatformInfo {
249
236
  os?: string;
250
237
  os_name?: string;
251
238
  os_version?: string;
@@ -254,7 +241,7 @@ export interface PlatformInfo {
254
241
  browser_version?: string;
255
242
  platform?: 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';
256
243
  }
257
- export interface DeviceInfo {
244
+ interface DeviceInfo {
258
245
  device?: string;
259
246
  device_id?: string;
260
247
  device_type?: string;
@@ -262,17 +249,17 @@ export interface DeviceInfo {
262
249
  device_pixel_ratio?: string;
263
250
  screen_resolution?: `${number}x${number}`;
264
251
  }
265
- export interface EnvironmentInfo {
252
+ interface EnvironmentInfo {
266
253
  release?: string;
267
254
  language?: string;
268
255
  timezone?: string;
269
256
  environment?: 'development' | 'production';
270
257
  }
271
- export interface SourceInfo {
258
+ interface SourceInfo {
272
259
  source_url?: string;
273
260
  source?: 'app' | 'web' | 'offline';
274
261
  }
275
- export interface ThirdPartyFields {
262
+ interface ThirdPartyFields {
276
263
  /**
277
264
  * Meta pixel fields
278
265
  * ref: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/customer-information-parameters#fbc
@@ -280,35 +267,34 @@ export interface ThirdPartyFields {
280
267
  */
281
268
  fbc?: string;
282
269
  fbp?: string;
270
+ /**
271
+ * Google Analytics fields
272
+ */
273
+ gclid?: string;
283
274
  }
284
- export interface TrackTags extends PlatformInfo, DeviceInfo, EnvironmentInfo, SourceInfo, ThirdPartyFields {
285
- [key: string]: string | undefined;
275
+ interface UTMParams {
276
+ utm_source?: string;
277
+ utm_medium?: string;
278
+ utm_campaign?: string;
279
+ utm_term?: string;
280
+ utm_content?: string;
286
281
  }
287
- export interface CreateTrackEventDTO<T extends EventName = EventName> {
288
- name: string;
289
- tags: TrackTags;
290
- visitor_id: string;
291
- properties?: TrackProperties<T>;
292
- timestamp: string;
282
+ interface TrackTags extends PlatformInfo, DeviceInfo, EnvironmentInfo, SourceInfo, ThirdPartyFields, UTMParams {
283
+ [key: string]: string | undefined;
293
284
  }
294
- export interface TrackEventResponse {
285
+ interface TrackEventResponse {
295
286
  /**
296
287
  * track event id
297
288
  * some tracking system will use event_id and event_name for deduplication
298
289
  * */
299
290
  id: string;
300
291
  }
301
- export type VisitorProperties = Record<Lowercase<string>, AllowedPropertyValues | AllowedPropertyValues[] | undefined>;
302
- export interface Visitor {
292
+ type VisitorProperties = Record<Lowercase<string>, AllowedPropertyValues>;
293
+ interface Visitor {
303
294
  id: string;
304
295
  device_id: string;
305
296
  properties: VisitorProperties;
306
297
  }
307
- export interface CreateVisitorDTO {
308
- device_id: string;
309
- properties?: VisitorProperties;
310
- }
311
- export interface UpdateVisitorDTO {
312
- properties: VisitorProperties;
313
- }
314
- //# sourceMappingURL=types.d.ts.map
298
+ type ThirdPartyUserSetter = (properties: VisitorProperties) => void;
299
+
300
+ export type { EventName as E, TrackTags as T, Visitor as V, ThirdPartyTracker as a, ThirdPartyUserSetter as b, TrackProperties as c, TrackEventResponse as d, VisitorProperties as e };
package/dist/web.d.mts ADDED
@@ -0,0 +1,6 @@
1
+ import { T as TrackTags } from './shared/analytics.BsiFCGfy.mjs';
2
+
3
+ declare function getDeviceId(): string;
4
+ declare function getTags(release: string): TrackTags;
5
+
6
+ export { getDeviceId, getTags };
package/dist/web.mjs ADDED
@@ -0,0 +1,49 @@
1
+ import Bowser from 'bowser';
2
+ import cookie from 'cookie';
3
+ import { v4 } from 'uuid';
4
+
5
+ function getDeviceId() {
6
+ const cached = localStorage.getItem("device_id");
7
+ if (cached) return cached;
8
+ const id = crypto?.randomUUID ? crypto.randomUUID() : v4();
9
+ localStorage.setItem("device_id", id);
10
+ return id;
11
+ }
12
+ function getTags(release) {
13
+ const parser = Bowser.getParser(window.navigator.userAgent);
14
+ const params = new URLSearchParams(window.location.search);
15
+ const os = parser.getOS();
16
+ const browser = parser.getBrowser();
17
+ const platform = parser.getPlatform();
18
+ const parsed = cookie.parse(document.cookie);
19
+ const tags = {
20
+ os: `${os.name} ${os.version}`,
21
+ os_name: os.name,
22
+ os_version: os.version,
23
+ browser: `${browser.name} ${browser.version}`,
24
+ browser_name: browser.name,
25
+ browser_version: browser.version,
26
+ platform: "web",
27
+ device: platform.model,
28
+ device_id: getDeviceId(),
29
+ device_type: platform.type,
30
+ device_vendor: platform.vendor,
31
+ device_pixel_ratio: `${window.devicePixelRatio}`,
32
+ screen_resolution: `${window.screen.width}x${window.screen.height}`,
33
+ release,
34
+ language: navigator.language,
35
+ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
36
+ environment: process.env.NODE_ENV === "development" ? "development" : "production",
37
+ fbc: parsed._fbc,
38
+ fbp: parsed._fbp,
39
+ gclid: params.get("gclid") ?? void 0,
40
+ utm_source: params.get("utm_source") ?? void 0,
41
+ utm_medium: params.get("utm_medium") ?? void 0,
42
+ utm_campaign: params.get("utm_campaign") ?? void 0,
43
+ utm_term: params.get("utm_term") ?? void 0,
44
+ utm_content: params.get("utm_content") ?? void 0
45
+ };
46
+ return tags;
47
+ }
48
+
49
+ export { getDeviceId, getTags };
package/package.json CHANGED
@@ -1,20 +1,17 @@
1
1
  {
2
2
  "name": "@shware/analytics",
3
- "version": "0.0.7",
3
+ "version": "0.1.0",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "dev": "tsc --watch",
7
- "build": "tsc"
7
+ "build": "unbuild"
8
8
  },
9
+ "main": "./dist/index.mjs",
10
+ "module": "./dist/index.mjs",
11
+ "types": "./dist/index.d.mts",
9
12
  "exports": {
10
- ".": {
11
- "types": "./dist/index.d.ts",
12
- "default": "./dist/index.js"
13
- },
14
- "./web": {
15
- "types": "./dist/web.d.ts",
16
- "default": "./dist/web.js"
17
- }
13
+ ".": "./dist/index.mjs",
14
+ "./web": "./dist/web.mjs"
18
15
  },
19
16
  "files": [
20
17
  "dist"
@@ -25,7 +22,8 @@
25
22
  "bowser": "^2.11.0",
26
23
  "cookie": "^1.0.2",
27
24
  "limiter": "^3.0.0",
28
- "uuid": "^11.1.0"
25
+ "uuid": "^11.1.0",
26
+ "zod": "^3.24.2"
29
27
  },
30
28
  "devDependencies": {
31
29
  "@types/node": "^22.13.10",
package/dist/ga.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export declare const standardEventNames: readonly ["add_payment_info", "add_shipping_info", "add_to_cart", "add_to_wishlist", "begin_checkout", "close_convert_lead", "close_unconvert_lead", "disqualify_lead", "earn_virtual_currency", "generate_lead", "join_group", "level_end", "level_start", "level_up", "login", "post_score", "purchase", "qualify_lead", "refund", "remove_from_cart", "search", "select_content", "select_item", "select_promotion", "share", "sign_up", "spend_virtual_currency", "tutorial_begin", "tutorial_complete", "unlock_achievement", "view_cart", "view_item", "view_item_list", "view_promotion", "working_lead"];
2
- export declare const reservedEventNames: string[];
3
- //# sourceMappingURL=ga.d.ts.map
package/dist/ga.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"ga.d.ts","sourceRoot":"","sources":["../src/ga.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,klBAoCrB,CAAC;AAEX,eAAO,MAAM,kBAAkB,UAgC9B,CAAC"}
package/dist/ga.js DELETED
@@ -1,70 +0,0 @@
1
- export var standardEventNames = [
2
- 'add_payment_info',
3
- 'add_shipping_info',
4
- 'add_to_cart',
5
- 'add_to_wishlist',
6
- 'begin_checkout',
7
- 'close_convert_lead',
8
- 'close_unconvert_lead',
9
- 'disqualify_lead',
10
- 'earn_virtual_currency',
11
- 'generate_lead',
12
- 'join_group',
13
- 'level_end',
14
- 'level_start',
15
- 'level_up',
16
- 'login',
17
- 'post_score',
18
- 'purchase',
19
- 'qualify_lead',
20
- 'refund',
21
- 'remove_from_cart',
22
- 'search',
23
- 'select_content',
24
- 'select_item',
25
- 'select_promotion',
26
- 'share',
27
- 'sign_up',
28
- 'spend_virtual_currency',
29
- 'tutorial_begin',
30
- 'tutorial_complete',
31
- 'unlock_achievement',
32
- 'view_cart',
33
- 'view_item',
34
- 'view_item_list',
35
- 'view_promotion',
36
- 'working_lead',
37
- ];
38
- export var reservedEventNames = [
39
- 'ad_activeview',
40
- 'ad_click',
41
- 'ad_exposure',
42
- 'ad_query',
43
- 'ad_reward',
44
- 'adunit_exposure',
45
- 'app_background',
46
- 'app_clear_data',
47
- 'app_exception',
48
- 'app_remove',
49
- 'app_store_refund',
50
- 'app_store_subscription_cancel',
51
- 'app_store_subscription_convert',
52
- 'app_store_subscription_renew',
53
- 'app_update',
54
- 'app_upgrade',
55
- 'dynamic_link_app_open',
56
- 'dynamic_link_app_update',
57
- 'dynamic_link_first_open',
58
- 'error',
59
- 'first_open',
60
- 'first_visit',
61
- 'in_app_purchase',
62
- 'notification_dismiss',
63
- 'notification_foreground',
64
- 'notification_open',
65
- 'notification_receive',
66
- 'os_update',
67
- 'session_start',
68
- 'session_start_with_rollout',
69
- 'user_engagement',
70
- ];
package/dist/index.d.ts DELETED
@@ -1,5 +0,0 @@
1
- export { setupAnalytics } from './setup';
2
- export { track } from './track';
3
- export { getVisitor, setVisitor } from './visitor';
4
- export { VisitorProperties, TrackProperties, TrackTags } from './types';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC"}
package/dist/index.js DELETED
@@ -1,3 +0,0 @@
1
- export { setupAnalytics } from './setup';
2
- export { track } from './track';
3
- export { getVisitor, setVisitor } from './visitor';
package/dist/setup.d.ts DELETED
@@ -1,26 +0,0 @@
1
- import { AxiosInstance } from 'axios';
2
- import { ThirdPartyLogger, TrackTags } from './types';
3
- export interface Storage {
4
- getItem: (key: string) => (string | null) | Promise<string | null>;
5
- setItem: (key: string, value: string) => void | Promise<void>;
6
- }
7
- export interface Options {
8
- release: string;
9
- storage: Storage;
10
- endpoint: string;
11
- getTags: () => TrackTags | Promise<TrackTags>;
12
- getDeviceId: () => string | Promise<string>;
13
- thirdPartyLoggers?: ThirdPartyLogger[];
14
- }
15
- interface Config {
16
- release: string;
17
- storage: Storage;
18
- http: AxiosInstance;
19
- getTags: () => TrackTags | Promise<TrackTags>;
20
- getDeviceId: () => string | Promise<string>;
21
- thirdPartyLoggers: ThirdPartyLogger[];
22
- }
23
- export declare const config: Config;
24
- export declare function setupAnalytics(init: Options): void;
25
- export {};
26
- //# sourceMappingURL=setup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEtD,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9C,WAAW,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACxC;AAED,UAAU,MAAM;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9C,WAAW,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;CACvC;AAED,eAAO,MAAM,MAAM,EAAE,MAOpB,CAAC;AAEF,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,QAO3C"}
package/dist/setup.js DELETED
@@ -1,18 +0,0 @@
1
- import axios from 'axios';
2
- export var config = {
3
- http: null,
4
- release: '0.0.0',
5
- storage: null,
6
- getTags: null,
7
- getDeviceId: null,
8
- thirdPartyLoggers: [],
9
- };
10
- export function setupAnalytics(init) {
11
- var _a;
12
- config.release = init.release;
13
- config.storage = init.storage;
14
- config.getTags = init.getTags;
15
- config.getDeviceId = init.getDeviceId;
16
- config.thirdPartyLoggers = (_a = init.thirdPartyLoggers) !== null && _a !== void 0 ? _a : [];
17
- config.http = axios.create({ baseURL: init.endpoint, withCredentials: true, adapter: 'fetch' });
18
- }
package/dist/track.d.ts DELETED
@@ -1,8 +0,0 @@
1
- import { EventName, TrackProperties, TrackEventResponse } from './types';
2
- export interface TrackOptions {
3
- enableThirdPartyLogging?: boolean;
4
- onSucceed?: (response?: TrackEventResponse) => void;
5
- onError?: (error: unknown) => void;
6
- }
7
- export declare function track<T extends EventName = EventName>(name: T, properties?: TrackProperties<T>, trackOptions?: TrackOptions): void;
8
- //# sourceMappingURL=track.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../src/track.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,SAAS,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAI9F,MAAM,WAAW,YAAY;IAC3B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC;AAuCD,wBAAgB,KAAK,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACnD,IAAI,EAAE,CAAC,EACP,UAAU,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EAC/B,YAAY,GAAE,YAA6B,QAG5C"}
package/dist/track.js DELETED
@@ -1,96 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- var __generator = (this && this.__generator) || function (thisArg, body) {
11
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
- function verb(n) { return function (v) { return step([n, v]); }; }
14
- function step(op) {
15
- if (f) throw new TypeError("Generator is already executing.");
16
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
- if (y = 0, t) op = [op[0] & 2, t.value];
19
- switch (op[0]) {
20
- case 0: case 1: t = op; break;
21
- case 4: _.label++; return { value: op[1], done: false };
22
- case 5: _.label++; y = op[1]; op = [0]; continue;
23
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
- default:
25
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
- if (t[2]) _.ops.pop();
30
- _.trys.pop(); continue;
31
- }
32
- op = body.call(thisArg, _);
33
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
- }
36
- };
37
- import { TokenBucket } from 'limiter';
38
- import { config } from './setup';
39
- import { getVisitor } from './visitor';
40
- var defaultOptions = { enableThirdPartyLogging: true };
41
- var REQUEST_TOKENS = 2;
42
- var tokenBucket = new TokenBucket({
43
- bucketSize: 20,
44
- interval: 'second',
45
- tokensPerInterval: 1,
46
- });
47
- function trackAsync(name_1, properties_1) {
48
- return __awaiter(this, arguments, void 0, function (name, properties, trackOptions) {
49
- var dto, data_1, e_1;
50
- var _a;
51
- var _b, _c;
52
- if (trackOptions === void 0) { trackOptions = defaultOptions; }
53
- return __generator(this, function (_d) {
54
- switch (_d.label) {
55
- case 0:
56
- _d.trys.push([0, 5, , 6]);
57
- return [4 /*yield*/, tokenBucket.removeTokens(REQUEST_TOKENS)];
58
- case 1:
59
- _d.sent();
60
- _a = {
61
- name: name,
62
- properties: properties
63
- };
64
- return [4 /*yield*/, config.getTags()];
65
- case 2:
66
- _a.tags = _d.sent();
67
- return [4 /*yield*/, getVisitor()];
68
- case 3:
69
- dto = (_a.visitor_id = (_d.sent()).id,
70
- _a.timestamp = new Date().toISOString(),
71
- _a);
72
- return [4 /*yield*/, config.http.post("/events", dto)];
73
- case 4:
74
- data_1 = (_d.sent()).data;
75
- // send to third-party loggers, for example Google Analytics and Facebook Pixel
76
- if (!trackOptions.enableThirdPartyLogging || !config.thirdPartyLoggers)
77
- return [2 /*return*/];
78
- config.thirdPartyLoggers.forEach(function (logger) { return logger(name, properties, data_1.id); });
79
- (_b = trackOptions.onSucceed) === null || _b === void 0 ? void 0 : _b.call(trackOptions, data_1);
80
- return [3 /*break*/, 6];
81
- case 5:
82
- e_1 = _d.sent();
83
- if (e_1 instanceof Error) {
84
- console.log('Failed to send track event:', e_1.message);
85
- }
86
- (_c = trackOptions.onError) === null || _c === void 0 ? void 0 : _c.call(trackOptions, e_1);
87
- return [3 /*break*/, 6];
88
- case 6: return [2 /*return*/];
89
- }
90
- });
91
- });
92
- }
93
- export function track(name, properties, trackOptions) {
94
- if (trackOptions === void 0) { trackOptions = defaultOptions; }
95
- trackAsync(name, properties, trackOptions).catch(console.error);
96
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js DELETED
@@ -1 +0,0 @@
1
- export {};
package/dist/visitor.d.ts DELETED
@@ -1,4 +0,0 @@
1
- import type { Visitor, VisitorProperties } from './types';
2
- export declare function getVisitor(): Promise<Visitor>;
3
- export declare function setVisitor(properties: VisitorProperties): Promise<Visitor>;
4
- //# sourceMappingURL=visitor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"visitor.d.ts","sourceRoot":"","sources":["../src/visitor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsC,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAsB9F,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAOnD;AAED,wBAAsB,UAAU,CAAC,UAAU,EAAE,iBAAiB,oBAM7D"}
package/dist/visitor.js DELETED
@@ -1,112 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- var __generator = (this && this.__generator) || function (thisArg, body) {
11
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
- function verb(n) { return function (v) { return step([n, v]); }; }
14
- function step(op) {
15
- if (f) throw new TypeError("Generator is already executing.");
16
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
- if (y = 0, t) op = [op[0] & 2, t.value];
19
- switch (op[0]) {
20
- case 0: case 1: t = op; break;
21
- case 4: _.label++; return { value: op[1], done: false };
22
- case 5: _.label++; y = op[1]; op = [0]; continue;
23
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
- default:
25
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
- if (t[2]) _.ops.pop();
30
- _.trys.pop(); continue;
31
- }
32
- op = body.call(thisArg, _);
33
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
- }
36
- };
37
- import { config } from './setup';
38
- var key = 'visitor_id';
39
- function getOrCreateVisitor() {
40
- return __awaiter(this, void 0, void 0, function () {
41
- var visitorId, response, dto, response;
42
- var _a;
43
- return __generator(this, function (_b) {
44
- switch (_b.label) {
45
- case 0: return [4 /*yield*/, config.storage.getItem(key)];
46
- case 1:
47
- visitorId = _b.sent();
48
- if (!visitorId) return [3 /*break*/, 3];
49
- return [4 /*yield*/, config.http.get("/visitors/".concat(visitorId))];
50
- case 2:
51
- response = _b.sent();
52
- return [2 /*return*/, response.data];
53
- case 3:
54
- _a = {};
55
- return [4 /*yield*/, config.getDeviceId()];
56
- case 4:
57
- _a.device_id = _b.sent();
58
- return [4 /*yield*/, config.getTags()];
59
- case 5:
60
- dto = (_a.properties = _b.sent(),
61
- _a);
62
- return [4 /*yield*/, config.http.post("/visitors", dto)];
63
- case 6:
64
- response = _b.sent();
65
- return [4 /*yield*/, config.storage.setItem(key, response.data.id)];
66
- case 7:
67
- _b.sent();
68
- return [2 /*return*/, response.data];
69
- }
70
- });
71
- });
72
- }
73
- var visitor = null;
74
- var visitorFetcher = null;
75
- export function getVisitor() {
76
- return __awaiter(this, void 0, void 0, function () {
77
- return __generator(this, function (_a) {
78
- switch (_a.label) {
79
- case 0:
80
- if (visitor)
81
- return [2 /*return*/, visitor];
82
- if (visitorFetcher)
83
- return [2 /*return*/, visitorFetcher];
84
- visitorFetcher = getOrCreateVisitor();
85
- return [4 /*yield*/, visitorFetcher];
86
- case 1:
87
- visitor = _a.sent();
88
- visitorFetcher = null;
89
- return [2 /*return*/, visitor];
90
- }
91
- });
92
- });
93
- }
94
- export function setVisitor(properties) {
95
- return __awaiter(this, void 0, void 0, function () {
96
- var dto, id, response;
97
- return __generator(this, function (_a) {
98
- switch (_a.label) {
99
- case 0:
100
- dto = { properties: properties };
101
- return [4 /*yield*/, getVisitor()];
102
- case 1:
103
- id = (_a.sent()).id;
104
- return [4 /*yield*/, config.http.patch("/visitors/".concat(id), dto)];
105
- case 2:
106
- response = _a.sent();
107
- visitor = response.data;
108
- return [2 /*return*/, response.data];
109
- }
110
- });
111
- });
112
- }
package/dist/web.d.ts DELETED
@@ -1,4 +0,0 @@
1
- import { TrackTags } from './types';
2
- export declare function getDeviceId(): string;
3
- export declare function getTags(release: string): TrackTags;
4
- //# sourceMappingURL=web.d.ts.map
package/dist/web.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,wBAAgB,WAAW,WAM1B;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,aA4BtC"}
package/dist/web.js DELETED
@@ -1,40 +0,0 @@
1
- import Bowser from 'bowser';
2
- import cookie from 'cookie';
3
- import { v4 as uuidv4 } from 'uuid';
4
- export function getDeviceId() {
5
- var cached = localStorage.getItem('device_id');
6
- if (cached)
7
- return cached;
8
- var id = (crypto === null || crypto === void 0 ? void 0 : crypto.randomUUID) ? crypto.randomUUID() : uuidv4();
9
- localStorage.setItem('device_id', id);
10
- return id;
11
- }
12
- export function getTags(release) {
13
- var parser = Bowser.getParser(window.navigator.userAgent);
14
- var os = parser.getOS();
15
- var browser = parser.getBrowser();
16
- var platform = parser.getPlatform();
17
- var parsed = cookie.parse(document.cookie);
18
- var tags = {
19
- os: "".concat(os.name, " ").concat(os.version),
20
- os_name: os.name,
21
- os_version: os.version,
22
- browser: "".concat(browser.name, " ").concat(browser.version),
23
- browser_name: browser.name,
24
- browser_version: browser.version,
25
- platform: 'web',
26
- device: platform.model,
27
- device_id: getDeviceId(),
28
- device_type: platform.type,
29
- device_vendor: platform.vendor,
30
- device_pixel_ratio: "".concat(window.devicePixelRatio),
31
- screen_resolution: "".concat(window.screen.width, "x").concat(window.screen.height),
32
- release: release,
33
- language: navigator.language,
34
- timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
35
- environment: process.env.NODE_ENV === 'development' ? 'development' : 'production',
36
- fbc: parsed._fbc,
37
- fbp: parsed._fbp,
38
- };
39
- return tags;
40
- }