@shware/analytics 0.1.4 → 0.1.5
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/index.cjs +201 -0
- package/dist/index.cjs.map +1 -0
- package/dist/{index.d.mts → index.d.cts} +300 -2
- package/dist/index.d.ts +501 -0
- package/dist/{index.mjs → index.js} +33 -19
- package/dist/index.js.map +1 -0
- package/dist/react/index.cjs +29 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +3 -0
- package/dist/react/index.d.ts +3 -0
- package/dist/react/index.js +8 -0
- package/dist/react/index.js.map +1 -0
- package/dist/web/index.cjs +88 -0
- package/dist/web/index.cjs.map +1 -0
- package/dist/web/index.d.cts +55 -0
- package/dist/web/index.d.ts +55 -0
- package/dist/{web.mjs → web/index.js} +10 -7
- package/dist/web/index.js.map +1 -0
- package/package.json +33 -4
- package/dist/shared/analytics.BsiFCGfy.d.mts +0 -300
- package/dist/web.d.mts +0 -6
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key2 of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key2) && key2 !== except)
|
|
16
|
+
__defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var src_exports = {};
|
|
32
|
+
__export(src_exports, {
|
|
33
|
+
createTrackEventSchema: () => createTrackEventSchema,
|
|
34
|
+
createVisitorSchema: () => createVisitorSchema,
|
|
35
|
+
getVisitor: () => getVisitor,
|
|
36
|
+
setVisitor: () => setVisitor,
|
|
37
|
+
setupAnalytics: () => setupAnalytics,
|
|
38
|
+
track: () => track,
|
|
39
|
+
updateVisitorSchema: () => updateVisitorSchema
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(src_exports);
|
|
42
|
+
|
|
43
|
+
// src/setup.ts
|
|
44
|
+
var import_axios = __toESM(require("axios"), 1);
|
|
45
|
+
var import_axios_retry = __toESM(require("axios-retry"), 1);
|
|
46
|
+
var config = {
|
|
47
|
+
http: null,
|
|
48
|
+
release: "0.0.0",
|
|
49
|
+
storage: null,
|
|
50
|
+
getTags: null,
|
|
51
|
+
getDeviceId: null,
|
|
52
|
+
thirdPartyTrackers: [],
|
|
53
|
+
thirdPartyUserSetters: []
|
|
54
|
+
};
|
|
55
|
+
function setupAnalytics(init) {
|
|
56
|
+
config.release = init.release;
|
|
57
|
+
config.storage = init.storage;
|
|
58
|
+
config.getTags = init.getTags;
|
|
59
|
+
config.getDeviceId = init.getDeviceId;
|
|
60
|
+
config.thirdPartyTrackers = init.thirdPartyTrackers ?? [];
|
|
61
|
+
config.thirdPartyUserSetters = init.thirdPartyUserSetters ?? [];
|
|
62
|
+
config.http = import_axios.default.create({ baseURL: init.endpoint, withCredentials: true, adapter: "fetch" });
|
|
63
|
+
(0, import_axios_retry.default)(config.http, { retries: 5, retryDelay: import_axios_retry.default.exponentialDelay });
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// src/track.ts
|
|
67
|
+
var import_limiter = require("limiter");
|
|
68
|
+
|
|
69
|
+
// src/visitor.ts
|
|
70
|
+
var key = "visitor_id";
|
|
71
|
+
async function getOrCreateVisitor() {
|
|
72
|
+
const visitorId = await config.storage.getItem(key);
|
|
73
|
+
if (visitorId) {
|
|
74
|
+
const response = await config.http.get(`/visitors/${visitorId}`);
|
|
75
|
+
return response.data;
|
|
76
|
+
} else {
|
|
77
|
+
const dto = {
|
|
78
|
+
device_id: await config.getDeviceId(),
|
|
79
|
+
properties: await config.getTags()
|
|
80
|
+
};
|
|
81
|
+
const response = await config.http.post(`/visitors`, dto);
|
|
82
|
+
await config.storage.setItem(key, response.data.id);
|
|
83
|
+
return response.data;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
var visitor = null;
|
|
87
|
+
var visitorFetcher = null;
|
|
88
|
+
async function getVisitor() {
|
|
89
|
+
if (visitor) return visitor;
|
|
90
|
+
if (visitorFetcher) return visitorFetcher;
|
|
91
|
+
visitorFetcher = getOrCreateVisitor();
|
|
92
|
+
visitor = await visitorFetcher;
|
|
93
|
+
visitorFetcher = null;
|
|
94
|
+
return visitor;
|
|
95
|
+
}
|
|
96
|
+
async function setVisitor(properties) {
|
|
97
|
+
const dto = { properties };
|
|
98
|
+
const { id } = await getVisitor();
|
|
99
|
+
const response = await config.http.patch(`/visitors/${id}`, dto);
|
|
100
|
+
config.thirdPartyUserSetters.forEach((setter) => setter(properties));
|
|
101
|
+
visitor = response.data;
|
|
102
|
+
return response.data;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// src/track.ts
|
|
106
|
+
var defaultOptions = { enableThirdPartyTracking: true };
|
|
107
|
+
var REQUEST_TOKENS = 2;
|
|
108
|
+
var tokenBucket = new import_limiter.TokenBucket({
|
|
109
|
+
bucketSize: 20,
|
|
110
|
+
interval: "second",
|
|
111
|
+
tokensPerInterval: 1
|
|
112
|
+
});
|
|
113
|
+
async function trackAsync(name, properties, trackOptions = defaultOptions) {
|
|
114
|
+
var _a, _b;
|
|
115
|
+
try {
|
|
116
|
+
await tokenBucket.removeTokens(REQUEST_TOKENS);
|
|
117
|
+
const dto = {
|
|
118
|
+
name,
|
|
119
|
+
properties,
|
|
120
|
+
tags: await config.getTags(),
|
|
121
|
+
visitor_id: (await getVisitor()).id,
|
|
122
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
123
|
+
};
|
|
124
|
+
const { data } = await config.http.post(`/events`, dto);
|
|
125
|
+
if (!trackOptions.enableThirdPartyTracking || !config.thirdPartyTrackers) return;
|
|
126
|
+
config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, data.id));
|
|
127
|
+
(_a = trackOptions.onSucceed) == null ? void 0 : _a.call(trackOptions, data);
|
|
128
|
+
} catch (e) {
|
|
129
|
+
if (e instanceof Error) {
|
|
130
|
+
console.log("Failed to send track event:", e.message);
|
|
131
|
+
}
|
|
132
|
+
(_b = trackOptions.onError) == null ? void 0 : _b.call(trackOptions, e);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function track(name, properties, trackOptions = defaultOptions) {
|
|
136
|
+
trackAsync(name, properties, trackOptions).catch(console.error);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// src/schema.ts
|
|
140
|
+
var import_zod = require("zod");
|
|
141
|
+
var createTrackEventSchema = import_zod.z.object({
|
|
142
|
+
name: import_zod.z.string().trim().min(1).max(64),
|
|
143
|
+
visitor_id: import_zod.z.coerce.bigint(),
|
|
144
|
+
tags: import_zod.z.object({
|
|
145
|
+
os: import_zod.z.string().optional(),
|
|
146
|
+
os_name: import_zod.z.string().optional(),
|
|
147
|
+
os_version: import_zod.z.string().optional(),
|
|
148
|
+
browser: import_zod.z.string().optional(),
|
|
149
|
+
browser_name: import_zod.z.string().optional(),
|
|
150
|
+
browser_version: import_zod.z.string().optional(),
|
|
151
|
+
platform: import_zod.z.enum(["ios", "android", "web", "macos", "windows", "linux", "unknown"]).optional(),
|
|
152
|
+
device: import_zod.z.string().optional(),
|
|
153
|
+
device_id: import_zod.z.string().trim().min(1).max(36).optional(),
|
|
154
|
+
device_type: import_zod.z.string().optional(),
|
|
155
|
+
device_vendor: import_zod.z.string().optional(),
|
|
156
|
+
device_pixel_ratio: import_zod.z.string().optional(),
|
|
157
|
+
screen_resolution: import_zod.z.string().regex(/^\d+x\d+$/).transform((v) => v).optional(),
|
|
158
|
+
release: import_zod.z.string().optional(),
|
|
159
|
+
language: import_zod.z.string().optional(),
|
|
160
|
+
timezone: import_zod.z.string().optional(),
|
|
161
|
+
environment: import_zod.z.enum(["development", "production"]).optional(),
|
|
162
|
+
source_url: import_zod.z.string().optional(),
|
|
163
|
+
source: import_zod.z.enum(["web", "app", "offline"]).optional(),
|
|
164
|
+
fbc: import_zod.z.string().optional(),
|
|
165
|
+
fbp: import_zod.z.string().optional(),
|
|
166
|
+
gclid: import_zod.z.string().optional(),
|
|
167
|
+
utm_source: import_zod.z.string().optional(),
|
|
168
|
+
utm_medium: import_zod.z.string().optional(),
|
|
169
|
+
utm_campaign: import_zod.z.string().optional(),
|
|
170
|
+
utm_term: import_zod.z.string().optional(),
|
|
171
|
+
utm_content: import_zod.z.string().optional()
|
|
172
|
+
}),
|
|
173
|
+
properties: import_zod.z.record(
|
|
174
|
+
import_zod.z.string().trim().min(1).max(128),
|
|
175
|
+
import_zod.z.union([import_zod.z.string().max(512), import_zod.z.number(), import_zod.z.boolean(), import_zod.z.null()])
|
|
176
|
+
).refine((data) => Object.keys(data).length <= 64)
|
|
177
|
+
});
|
|
178
|
+
var createVisitorSchema = import_zod.z.object({
|
|
179
|
+
device_id: import_zod.z.string().trim().min(1).max(36),
|
|
180
|
+
properties: import_zod.z.record(
|
|
181
|
+
import_zod.z.string().trim().min(1).max(128),
|
|
182
|
+
import_zod.z.union([import_zod.z.string().max(512), import_zod.z.number(), import_zod.z.boolean(), import_zod.z.null()])
|
|
183
|
+
).refine((data) => Object.keys(data).length <= 64)
|
|
184
|
+
});
|
|
185
|
+
var updateVisitorSchema = import_zod.z.object({
|
|
186
|
+
properties: import_zod.z.record(
|
|
187
|
+
import_zod.z.string().trim().min(1).max(128),
|
|
188
|
+
import_zod.z.union([import_zod.z.string().max(512), import_zod.z.number(), import_zod.z.boolean(), import_zod.z.null()])
|
|
189
|
+
).refine((data) => Object.keys(data).length <= 64)
|
|
190
|
+
});
|
|
191
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
192
|
+
0 && (module.exports = {
|
|
193
|
+
createTrackEventSchema,
|
|
194
|
+
createVisitorSchema,
|
|
195
|
+
getVisitor,
|
|
196
|
+
setVisitor,
|
|
197
|
+
setupAnalytics,
|
|
198
|
+
track,
|
|
199
|
+
updateVisitorSchema
|
|
200
|
+
});
|
|
201
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/setup.ts","../src/track.ts","../src/visitor.ts","../src/schema.ts"],"sourcesContent":["export { setupAnalytics } from './setup';\nexport { track } from './track';\nexport { getVisitor, setVisitor } from './visitor';\nexport { createTrackEventSchema, createVisitorSchema, updateVisitorSchema } from './schema';\nexport { type VisitorProperties, type TrackProperties, type TrackTags } from './types';\n","import axios, { AxiosInstance } from 'axios';\nimport retry from 'axios-retry';\nimport { ThirdPartyTracker, ThirdPartyUserSetter, TrackTags } from './types';\n\nexport interface Storage {\n getItem: (key: string) => (string | null) | Promise<string | null>;\n setItem: (key: string, value: string) => void | Promise<void>;\n}\n\nexport interface Options {\n release: string;\n storage: Storage;\n endpoint: string;\n getTags: () => TrackTags | Promise<TrackTags>;\n getDeviceId: () => string | Promise<string>;\n thirdPartyTrackers?: ThirdPartyTracker[];\n thirdPartyUserSetters?: ThirdPartyUserSetter[];\n}\n\ninterface Config {\n release: string;\n storage: Storage;\n http: AxiosInstance;\n getTags: () => TrackTags | Promise<TrackTags>;\n getDeviceId: () => string | Promise<string>;\n thirdPartyTrackers: ThirdPartyTracker[];\n thirdPartyUserSetters: ThirdPartyUserSetter[];\n}\n\nexport const config: Config = {\n http: null!,\n release: '0.0.0',\n storage: null!,\n getTags: null!,\n getDeviceId: null!,\n thirdPartyTrackers: [],\n thirdPartyUserSetters: [],\n};\n\nexport function setupAnalytics(init: Options) {\n config.release = init.release;\n config.storage = init.storage;\n config.getTags = init.getTags;\n config.getDeviceId = init.getDeviceId;\n config.thirdPartyTrackers = init.thirdPartyTrackers ?? [];\n config.thirdPartyUserSetters = init.thirdPartyUserSetters ?? [];\n config.http = axios.create({ baseURL: init.endpoint, withCredentials: true, adapter: 'fetch' });\n retry(config.http, { retries: 5, retryDelay: retry.exponentialDelay });\n}\n","import { TokenBucket } from 'limiter';\nimport { CreateTrackEventDTO, EventName, TrackProperties, TrackEventResponse } from './types';\nimport { config } from './setup';\nimport { getVisitor } from './visitor';\n\nexport interface TrackOptions {\n enableThirdPartyTracking?: boolean;\n onSucceed?: (response?: TrackEventResponse) => void;\n onError?: (error: unknown) => void;\n}\n\nconst defaultOptions: TrackOptions = { enableThirdPartyTracking: true };\n\nconst REQUEST_TOKENS = 2;\nconst tokenBucket = new TokenBucket({\n bucketSize: 20,\n interval: 'second',\n tokensPerInterval: 1,\n});\n\nasync function trackAsync<T extends EventName = EventName>(\n name: T,\n properties?: TrackProperties<T>,\n trackOptions: TrackOptions = defaultOptions\n) {\n try {\n await tokenBucket.removeTokens(REQUEST_TOKENS);\n const dto: CreateTrackEventDTO<T> = {\n name,\n properties,\n tags: await config.getTags(),\n visitor_id: (await getVisitor()).id,\n timestamp: new Date().toISOString(),\n };\n const { data } = await config.http.post<TrackEventResponse>(`/events`, dto);\n\n // send to third-party loggers, for example Google Analytics and Facebook Pixel\n if (!trackOptions.enableThirdPartyTracking || !config.thirdPartyTrackers) return;\n config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, data.id));\n trackOptions.onSucceed?.(data);\n } catch (e: unknown) {\n if (e instanceof Error) {\n console.log('Failed to send track event:', e.message);\n }\n trackOptions.onError?.(e);\n }\n}\n\nexport function track<T extends EventName = EventName>(\n name: T,\n properties?: TrackProperties<T>,\n trackOptions: TrackOptions = defaultOptions\n) {\n trackAsync(name, properties, trackOptions).catch(console.error);\n}\n","import { config } from './setup';\nimport type { CreateVisitorDTO, UpdateVisitorDTO, Visitor, VisitorProperties } from './types';\n\nconst key = 'visitor_id';\nasync function getOrCreateVisitor(): Promise<Visitor> {\n const visitorId = await config.storage.getItem(key);\n if (visitorId) {\n const response = await config.http.get<Visitor>(`/visitors/${visitorId}`);\n return response.data;\n } else {\n const dto: CreateVisitorDTO = {\n device_id: await config.getDeviceId(),\n properties: (await config.getTags()) as VisitorProperties,\n };\n const response = await config.http.post<Visitor>(`/visitors`, dto);\n await config.storage.setItem(key, response.data.id);\n return response.data;\n }\n}\n\nlet visitor: Visitor | null = null;\nlet visitorFetcher: Promise<Visitor> | null = null;\n\nexport async function getVisitor(): Promise<Visitor> {\n if (visitor) return visitor;\n if (visitorFetcher) return visitorFetcher;\n visitorFetcher = getOrCreateVisitor();\n visitor = await visitorFetcher;\n visitorFetcher = null;\n return visitor;\n}\n\nexport async function setVisitor(properties: VisitorProperties) {\n const dto: UpdateVisitorDTO = { properties };\n const { id } = await getVisitor();\n const response = await config.http.patch<Visitor>(`/visitors/${id}`, dto);\n config.thirdPartyUserSetters.forEach((setter) => setter(properties));\n visitor = response.data;\n return response.data;\n}\n","import { z } from 'zod';\n\nexport const createTrackEventSchema = z.object({\n name: z.string().trim().min(1).max(64),\n visitor_id: z.coerce.bigint(),\n tags: z.object({\n os: z.string().optional(),\n os_name: z.string().optional(),\n os_version: z.string().optional(),\n browser: z.string().optional(),\n browser_name: z.string().optional(),\n browser_version: z.string().optional(),\n platform: z.enum(['ios', 'android', 'web', 'macos', 'windows', 'linux', 'unknown']).optional(),\n device: z.string().optional(),\n device_id: z.string().trim().min(1).max(36).optional(),\n device_type: z.string().optional(),\n device_vendor: z.string().optional(),\n device_pixel_ratio: z.string().optional(),\n screen_resolution: z\n .string()\n .regex(/^\\d+x\\d+$/)\n .transform((v) => v as `${number}x${number}`)\n .optional(),\n release: z.string().optional(),\n language: z.string().optional(),\n timezone: z.string().optional(),\n environment: z.enum(['development', 'production']).optional(),\n source_url: z.string().optional(),\n source: z.enum(['web', 'app', 'offline']).optional(),\n fbc: z.string().optional(),\n fbp: z.string().optional(),\n gclid: z.string().optional(),\n utm_source: z.string().optional(),\n utm_medium: z.string().optional(),\n utm_campaign: z.string().optional(),\n utm_term: z.string().optional(),\n utm_content: z.string().optional(),\n }),\n properties: z\n .record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null()])\n )\n .refine((data) => Object.keys(data).length <= 64),\n});\n\nexport const createVisitorSchema = z.object({\n device_id: z.string().trim().min(1).max(36),\n properties: z\n .record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null()])\n )\n .refine((data) => Object.keys(data).length <= 64),\n});\n\nexport const updateVisitorSchema = z.object({\n properties: z\n .record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null()])\n )\n .refine((data) => Object.keys(data).length <= 64),\n});\n"],"mappings":"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","names":["axios","retry"]}
|
|
@@ -1,6 +1,304 @@
|
|
|
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
1
|
import { z } from 'zod';
|
|
3
2
|
|
|
3
|
+
interface Item {
|
|
4
|
+
item_brand?: string;
|
|
5
|
+
item_id?: string;
|
|
6
|
+
item_name?: string;
|
|
7
|
+
item_category?: string;
|
|
8
|
+
item_category2?: string;
|
|
9
|
+
item_category3?: string;
|
|
10
|
+
item_category4?: string;
|
|
11
|
+
item_category5?: string;
|
|
12
|
+
item_list_id?: string;
|
|
13
|
+
item_list_name?: string;
|
|
14
|
+
item_location_id?: string;
|
|
15
|
+
item_variant?: string;
|
|
16
|
+
quantity?: number;
|
|
17
|
+
price?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* ref: https://developers.google.com/analytics/devguides/collection/ga4/reference/events?client_type=gtag
|
|
21
|
+
* ref: https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics.Event
|
|
22
|
+
* */
|
|
23
|
+
type StandardEventProperties = {
|
|
24
|
+
add_payment_info: {
|
|
25
|
+
items?: Item[];
|
|
26
|
+
currency?: string;
|
|
27
|
+
value?: number;
|
|
28
|
+
coupon?: string;
|
|
29
|
+
payment_type?: string;
|
|
30
|
+
};
|
|
31
|
+
add_shipping_info: {
|
|
32
|
+
items?: Item[];
|
|
33
|
+
currency?: string;
|
|
34
|
+
value?: number;
|
|
35
|
+
coupon?: string;
|
|
36
|
+
shipping_tier?: string;
|
|
37
|
+
};
|
|
38
|
+
add_to_cart: {
|
|
39
|
+
items?: Item[];
|
|
40
|
+
currency?: string;
|
|
41
|
+
value?: number;
|
|
42
|
+
};
|
|
43
|
+
add_to_wishlist: {
|
|
44
|
+
items?: Item[];
|
|
45
|
+
currency?: string;
|
|
46
|
+
value?: number;
|
|
47
|
+
};
|
|
48
|
+
begin_checkout: {
|
|
49
|
+
currency?: string;
|
|
50
|
+
value?: number;
|
|
51
|
+
coupon?: string;
|
|
52
|
+
items?: Item[];
|
|
53
|
+
[key: string]: any;
|
|
54
|
+
};
|
|
55
|
+
close_convert_lead: {
|
|
56
|
+
currency: string;
|
|
57
|
+
value: number;
|
|
58
|
+
};
|
|
59
|
+
close_unconvert_lead: {
|
|
60
|
+
currency: string;
|
|
61
|
+
value: number;
|
|
62
|
+
unconvert_lead_reason?: string;
|
|
63
|
+
};
|
|
64
|
+
disqualify_lead: {
|
|
65
|
+
currency: string;
|
|
66
|
+
value: number;
|
|
67
|
+
disqualified_lead_reason?: string;
|
|
68
|
+
};
|
|
69
|
+
earn_virtual_currency: {
|
|
70
|
+
virtual_currency_name: string;
|
|
71
|
+
value: number;
|
|
72
|
+
};
|
|
73
|
+
generate_lead: {
|
|
74
|
+
currency?: string;
|
|
75
|
+
value?: number;
|
|
76
|
+
};
|
|
77
|
+
join_group: {
|
|
78
|
+
group_id: string;
|
|
79
|
+
};
|
|
80
|
+
level_end: {
|
|
81
|
+
level: number;
|
|
82
|
+
success?: string;
|
|
83
|
+
};
|
|
84
|
+
level_start: {
|
|
85
|
+
level: number;
|
|
86
|
+
};
|
|
87
|
+
level_up: {
|
|
88
|
+
level: number;
|
|
89
|
+
character?: string;
|
|
90
|
+
};
|
|
91
|
+
login: {
|
|
92
|
+
method: string;
|
|
93
|
+
};
|
|
94
|
+
post_score: {
|
|
95
|
+
score: number;
|
|
96
|
+
level?: number;
|
|
97
|
+
character?: string;
|
|
98
|
+
};
|
|
99
|
+
purchase: {
|
|
100
|
+
affiliation?: string;
|
|
101
|
+
coupon?: string;
|
|
102
|
+
currency?: string;
|
|
103
|
+
items?: Item[];
|
|
104
|
+
shipping?: number;
|
|
105
|
+
tax?: number;
|
|
106
|
+
value?: number;
|
|
107
|
+
transaction_id?: string;
|
|
108
|
+
[key: string]: any;
|
|
109
|
+
};
|
|
110
|
+
qualify_lead: {
|
|
111
|
+
currency: string;
|
|
112
|
+
value: number;
|
|
113
|
+
};
|
|
114
|
+
refund: {
|
|
115
|
+
affiliation?: string;
|
|
116
|
+
coupon?: string;
|
|
117
|
+
currency?: string;
|
|
118
|
+
items?: Item[];
|
|
119
|
+
shipping?: number;
|
|
120
|
+
tax?: number;
|
|
121
|
+
value?: number;
|
|
122
|
+
transaction_id?: string;
|
|
123
|
+
};
|
|
124
|
+
remove_from_cart: {
|
|
125
|
+
items?: Item[];
|
|
126
|
+
value?: number;
|
|
127
|
+
currency?: string;
|
|
128
|
+
};
|
|
129
|
+
search: {
|
|
130
|
+
search_term: string;
|
|
131
|
+
number_of_nights?: number;
|
|
132
|
+
number_of_rooms?: number;
|
|
133
|
+
number_of_passengers?: number;
|
|
134
|
+
origin?: string;
|
|
135
|
+
destination?: string;
|
|
136
|
+
start_date?: string;
|
|
137
|
+
end_date?: string;
|
|
138
|
+
travel_class?: string;
|
|
139
|
+
};
|
|
140
|
+
select_content: {
|
|
141
|
+
content_type: string;
|
|
142
|
+
item_id: string;
|
|
143
|
+
};
|
|
144
|
+
select_item: {
|
|
145
|
+
items?: Item[];
|
|
146
|
+
content_type: string;
|
|
147
|
+
item_list_id: string;
|
|
148
|
+
item_list_name: string;
|
|
149
|
+
};
|
|
150
|
+
select_promotion: {
|
|
151
|
+
creative_name: string;
|
|
152
|
+
creative_slot: string;
|
|
153
|
+
items?: Item[];
|
|
154
|
+
location_id: string;
|
|
155
|
+
promotion_id: string;
|
|
156
|
+
promotion_name: string;
|
|
157
|
+
};
|
|
158
|
+
share: {
|
|
159
|
+
content_type: string;
|
|
160
|
+
item_id: string;
|
|
161
|
+
method: string;
|
|
162
|
+
activity_type?: string | null;
|
|
163
|
+
post_id?: string;
|
|
164
|
+
};
|
|
165
|
+
sign_up: {
|
|
166
|
+
method: string;
|
|
167
|
+
};
|
|
168
|
+
spend_virtual_currency: {
|
|
169
|
+
item_name: string;
|
|
170
|
+
virtual_currency_name: string;
|
|
171
|
+
value: number;
|
|
172
|
+
};
|
|
173
|
+
tutorial_begin: undefined;
|
|
174
|
+
tutorial_complete: undefined;
|
|
175
|
+
unlock_achievement: {
|
|
176
|
+
achievement_id: string;
|
|
177
|
+
};
|
|
178
|
+
view_cart: {
|
|
179
|
+
items?: Item[];
|
|
180
|
+
currency?: string;
|
|
181
|
+
value?: number;
|
|
182
|
+
};
|
|
183
|
+
view_item: {
|
|
184
|
+
items?: Item[];
|
|
185
|
+
currency?: string;
|
|
186
|
+
value?: number;
|
|
187
|
+
};
|
|
188
|
+
view_item_list: {
|
|
189
|
+
items?: Item[];
|
|
190
|
+
item_list_id?: string;
|
|
191
|
+
item_list_name?: string;
|
|
192
|
+
};
|
|
193
|
+
view_promotion: {
|
|
194
|
+
items?: Item[];
|
|
195
|
+
location_id?: string;
|
|
196
|
+
creative_name?: string;
|
|
197
|
+
creative_slot?: string;
|
|
198
|
+
promotion_id?: string;
|
|
199
|
+
promotion_name?: string;
|
|
200
|
+
};
|
|
201
|
+
working_lead: {
|
|
202
|
+
currency: string;
|
|
203
|
+
value: number;
|
|
204
|
+
lead_status?: string;
|
|
205
|
+
};
|
|
206
|
+
ad_impression: {
|
|
207
|
+
value?: number;
|
|
208
|
+
currency?: string;
|
|
209
|
+
ad_format?: string;
|
|
210
|
+
ad_platform?: string;
|
|
211
|
+
ad_source?: string;
|
|
212
|
+
ad_unit_name?: string;
|
|
213
|
+
};
|
|
214
|
+
app_open: undefined;
|
|
215
|
+
campaign_details: {
|
|
216
|
+
source: string;
|
|
217
|
+
medium: string;
|
|
218
|
+
campaign: string;
|
|
219
|
+
term?: string;
|
|
220
|
+
content?: string;
|
|
221
|
+
aclid?: string;
|
|
222
|
+
cp1?: string;
|
|
223
|
+
};
|
|
224
|
+
screen_view: {
|
|
225
|
+
screen_name?: string;
|
|
226
|
+
screen_class?: string;
|
|
227
|
+
};
|
|
228
|
+
view_search_results: {
|
|
229
|
+
search_term: string;
|
|
230
|
+
};
|
|
231
|
+
};
|
|
232
|
+
type AllowedPropertyValues = string | number | boolean | null;
|
|
233
|
+
type EventName = Lowercase<string>;
|
|
234
|
+
type CustomEventProperties = Record<Lowercase<string>, AllowedPropertyValues>;
|
|
235
|
+
type TrackProperties<T extends EventName = EventName> = T extends keyof StandardEventProperties ? StandardEventProperties[T] : CustomEventProperties;
|
|
236
|
+
type ThirdPartyTracker = <T extends EventName = EventName>(name: T, properties?: TrackProperties<T>, event_id?: string) => void;
|
|
237
|
+
interface PlatformInfo {
|
|
238
|
+
os?: string;
|
|
239
|
+
os_name?: string;
|
|
240
|
+
os_version?: string;
|
|
241
|
+
browser?: string;
|
|
242
|
+
browser_name?: string;
|
|
243
|
+
browser_version?: string;
|
|
244
|
+
platform?: 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';
|
|
245
|
+
}
|
|
246
|
+
interface DeviceInfo {
|
|
247
|
+
device?: string;
|
|
248
|
+
device_id?: string;
|
|
249
|
+
device_type?: string;
|
|
250
|
+
device_vendor?: string;
|
|
251
|
+
device_pixel_ratio?: string;
|
|
252
|
+
screen_resolution?: `${number}x${number}`;
|
|
253
|
+
}
|
|
254
|
+
interface EnvironmentInfo {
|
|
255
|
+
release?: string;
|
|
256
|
+
language?: string;
|
|
257
|
+
timezone?: string;
|
|
258
|
+
environment?: 'development' | 'production';
|
|
259
|
+
}
|
|
260
|
+
interface SourceInfo {
|
|
261
|
+
source_url?: string;
|
|
262
|
+
source?: 'app' | 'web' | 'offline';
|
|
263
|
+
}
|
|
264
|
+
interface ThirdPartyFields {
|
|
265
|
+
/**
|
|
266
|
+
* Meta pixel fields
|
|
267
|
+
* ref: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/customer-information-parameters#fbc
|
|
268
|
+
* Stored in the _fbc/_fbp browser cookie under your domain
|
|
269
|
+
*/
|
|
270
|
+
fbc?: string;
|
|
271
|
+
fbp?: string;
|
|
272
|
+
/**
|
|
273
|
+
* Google Analytics fields
|
|
274
|
+
*/
|
|
275
|
+
gclid?: string;
|
|
276
|
+
}
|
|
277
|
+
interface UTMParams {
|
|
278
|
+
utm_source?: string;
|
|
279
|
+
utm_medium?: string;
|
|
280
|
+
utm_campaign?: string;
|
|
281
|
+
utm_term?: string;
|
|
282
|
+
utm_content?: string;
|
|
283
|
+
}
|
|
284
|
+
interface TrackTags extends PlatformInfo, DeviceInfo, EnvironmentInfo, SourceInfo, ThirdPartyFields, UTMParams {
|
|
285
|
+
[key: string]: string | undefined;
|
|
286
|
+
}
|
|
287
|
+
interface TrackEventResponse {
|
|
288
|
+
/**
|
|
289
|
+
* track event id
|
|
290
|
+
* some tracking system will use event_id and event_name for deduplication
|
|
291
|
+
* */
|
|
292
|
+
id: string;
|
|
293
|
+
}
|
|
294
|
+
type VisitorProperties = Record<Lowercase<string>, AllowedPropertyValues>;
|
|
295
|
+
interface Visitor {
|
|
296
|
+
id: string;
|
|
297
|
+
device_id: string;
|
|
298
|
+
properties: VisitorProperties;
|
|
299
|
+
}
|
|
300
|
+
type ThirdPartyUserSetter = (properties: VisitorProperties) => void;
|
|
301
|
+
|
|
4
302
|
interface Storage {
|
|
5
303
|
getItem: (key: string) => (string | null) | Promise<string | null>;
|
|
6
304
|
setItem: (key: string, value: string) => void | Promise<void>;
|
|
@@ -200,4 +498,4 @@ declare const updateVisitorSchema: z.ZodObject<{
|
|
|
200
498
|
properties: Record<string, string | number | boolean | null>;
|
|
201
499
|
}>;
|
|
202
500
|
|
|
203
|
-
export { TrackProperties, TrackTags, VisitorProperties, createTrackEventSchema, createVisitorSchema, getVisitor, setVisitor, setupAnalytics, track, updateVisitorSchema };
|
|
501
|
+
export { type TrackProperties, type TrackTags, type VisitorProperties, createTrackEventSchema, createVisitorSchema, getVisitor, setVisitor, setupAnalytics, track, updateVisitorSchema };
|