@shware/analytics 0.3.6 → 0.3.8

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 CHANGED
@@ -26,6 +26,7 @@ __export(index_exports, {
26
26
  setVisitor: () => import_visitor.setVisitor,
27
27
  setupAnalytics: () => import_setup.setupAnalytics,
28
28
  track: () => import_track.track,
29
+ trackAsync: () => import_track.trackAsync,
29
30
  updateVisitorSchema: () => import_schema.updateVisitorSchema
30
31
  });
31
32
  module.exports = __toCommonJS(index_exports);
@@ -41,6 +42,7 @@ var import_schema = require("./schema/index.cjs");
41
42
  setVisitor,
42
43
  setupAnalytics,
43
44
  track,
45
+ trackAsync,
44
46
  updateVisitorSchema
45
47
  });
46
48
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { setupAnalytics } from './setup/index';\nexport { track } from './track/index';\nexport { getVisitor, setVisitor } from './visitor/index';\nexport { createTrackEventSchema, createVisitorSchema, updateVisitorSchema } from './schema/index';\nexport type { TrackProperties, TrackTags, AllowedPropertyValues } from './track/types';\nexport type { VisitorProperties } from './visitor/types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA+B;AAC/B,mBAAsB;AACtB,qBAAuC;AACvC,oBAAiF;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { setupAnalytics } from './setup/index';\nexport { track, trackAsync } from './track/index';\nexport { getVisitor, setVisitor } from './visitor/index';\nexport { createTrackEventSchema, createVisitorSchema, updateVisitorSchema } from './schema/index';\nexport type { TrackProperties, TrackTags, AllowedPropertyValues } from './track/types';\nexport type { VisitorProperties } from './visitor/types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA+B;AAC/B,mBAAkC;AAClC,qBAAuC;AACvC,oBAAiF;","names":[]}
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { setupAnalytics } from './setup/index.cjs';
2
- export { track } from './track/index.cjs';
2
+ export { track, trackAsync } from './track/index.cjs';
3
3
  export { getVisitor, setVisitor } from './visitor/index.cjs';
4
4
  export { createTrackEventSchema, createVisitorSchema, updateVisitorSchema } from './schema/index.cjs';
5
5
  export { AllowedPropertyValues, TrackProperties, TrackTags } from './track/types.cjs';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { setupAnalytics } from './setup/index.js';
2
- export { track } from './track/index.js';
2
+ export { track, trackAsync } from './track/index.js';
3
3
  export { getVisitor, setVisitor } from './visitor/index.js';
4
4
  export { createTrackEventSchema, createVisitorSchema, updateVisitorSchema } from './schema/index.js';
5
5
  export { AllowedPropertyValues, TrackProperties, TrackTags } from './track/types.js';
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  // src/index.ts
2
2
  import { setupAnalytics } from "./setup/index.mjs";
3
- import { track } from "./track/index.mjs";
3
+ import { track, trackAsync } from "./track/index.mjs";
4
4
  import { getVisitor, setVisitor } from "./visitor/index.mjs";
5
5
  import { createTrackEventSchema, createVisitorSchema, updateVisitorSchema } from "./schema/index.mjs";
6
6
  export {
@@ -10,6 +10,7 @@ export {
10
10
  setVisitor,
11
11
  setupAnalytics,
12
12
  track,
13
+ trackAsync,
13
14
  updateVisitorSchema
14
15
  };
15
16
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { setupAnalytics } from './setup/index';\nexport { track } from './track/index';\nexport { getVisitor, setVisitor } from './visitor/index';\nexport { createTrackEventSchema, createVisitorSchema, updateVisitorSchema } from './schema/index';\nexport type { TrackProperties, TrackTags, AllowedPropertyValues } from './track/types';\nexport type { VisitorProperties } from './visitor/types';\n"],"mappings":";AAAA,SAAS,sBAAsB;AAC/B,SAAS,aAAa;AACtB,SAAS,YAAY,kBAAkB;AACvC,SAAS,wBAAwB,qBAAqB,2BAA2B;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { setupAnalytics } from './setup/index';\nexport { track, trackAsync } from './track/index';\nexport { getVisitor, setVisitor } from './visitor/index';\nexport { createTrackEventSchema, createVisitorSchema, updateVisitorSchema } from './schema/index';\nexport type { TrackProperties, TrackTags, AllowedPropertyValues } from './track/types';\nexport type { VisitorProperties } from './visitor/types';\n"],"mappings":";AAAA,SAAS,sBAAsB;AAC/B,SAAS,OAAO,kBAAkB;AAClC,SAAS,YAAY,kBAAkB;AACvC,SAAS,wBAAwB,qBAAqB,2BAA2B;","names":[]}
@@ -34,28 +34,28 @@ declare const createTrackEventSchema: z.ZodArray<z.ZodObject<{
34
34
  utm_term: z.ZodOptional<z.ZodString>;
35
35
  utm_content: z.ZodOptional<z.ZodString>;
36
36
  }, "strip", z.ZodTypeAny, {
37
- gclid?: string | undefined;
38
- language?: string | undefined;
39
- screen_resolution?: `${number}x${number}` | undefined;
40
37
  os?: string | undefined;
41
38
  os_name?: string | undefined;
42
39
  os_version?: string | undefined;
43
40
  browser?: string | undefined;
44
41
  browser_name?: string | undefined;
45
42
  browser_version?: string | undefined;
46
- platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
43
+ platform?: "unknown" | "ios" | "android" | "web" | "macos" | "windows" | "linux" | undefined;
47
44
  device?: string | undefined;
48
45
  device_id?: string | undefined;
49
46
  device_type?: string | undefined;
50
47
  device_vendor?: string | undefined;
51
48
  device_pixel_ratio?: string | undefined;
49
+ screen_resolution?: `${number}x${number}` | undefined;
52
50
  release?: string | undefined;
51
+ language?: string | undefined;
53
52
  timezone?: string | undefined;
54
53
  environment?: "development" | "production" | undefined;
55
54
  source_url?: string | undefined;
56
55
  source?: "web" | "app" | "offline" | undefined;
57
56
  fbc?: string | undefined;
58
57
  fbp?: string | undefined;
58
+ gclid?: string | undefined;
59
59
  advertising_id?: string | undefined;
60
60
  utm_source?: string | undefined;
61
61
  utm_medium?: string | undefined;
@@ -63,28 +63,28 @@ declare const createTrackEventSchema: z.ZodArray<z.ZodObject<{
63
63
  utm_term?: string | undefined;
64
64
  utm_content?: string | undefined;
65
65
  }, {
66
- gclid?: string | undefined;
67
- language?: string | undefined;
68
- screen_resolution?: string | undefined;
69
66
  os?: string | undefined;
70
67
  os_name?: string | undefined;
71
68
  os_version?: string | undefined;
72
69
  browser?: string | undefined;
73
70
  browser_name?: string | undefined;
74
71
  browser_version?: string | undefined;
75
- platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
72
+ platform?: "unknown" | "ios" | "android" | "web" | "macos" | "windows" | "linux" | undefined;
76
73
  device?: string | undefined;
77
74
  device_id?: string | undefined;
78
75
  device_type?: string | undefined;
79
76
  device_vendor?: string | undefined;
80
77
  device_pixel_ratio?: string | undefined;
78
+ screen_resolution?: string | undefined;
81
79
  release?: string | undefined;
80
+ language?: string | undefined;
82
81
  timezone?: string | undefined;
83
82
  environment?: "development" | "production" | undefined;
84
83
  source_url?: string | undefined;
85
84
  source?: "web" | "app" | "offline" | undefined;
86
85
  fbc?: string | undefined;
87
86
  fbp?: string | undefined;
87
+ gclid?: string | undefined;
88
88
  advertising_id?: string | undefined;
89
89
  utm_source?: string | undefined;
90
90
  utm_medium?: string | undefined;
@@ -94,32 +94,32 @@ declare const createTrackEventSchema: z.ZodArray<z.ZodObject<{
94
94
  }>;
95
95
  properties: z.ZodOptional<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>, "many">]>>, Record<string, string | number | boolean | Record<string, string | number | boolean | null>[] | null>, Record<string, string | number | boolean | Record<string, string | number | boolean | null>[] | null>>>;
96
96
  }, "strip", z.ZodTypeAny, {
97
- visitor_id: bigint;
98
97
  name: string;
98
+ visitor_id: bigint;
99
99
  timestamp: string;
100
100
  tags: {
101
- gclid?: string | undefined;
102
- language?: string | undefined;
103
- screen_resolution?: `${number}x${number}` | undefined;
104
101
  os?: string | undefined;
105
102
  os_name?: string | undefined;
106
103
  os_version?: string | undefined;
107
104
  browser?: string | undefined;
108
105
  browser_name?: string | undefined;
109
106
  browser_version?: string | undefined;
110
- platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
107
+ platform?: "unknown" | "ios" | "android" | "web" | "macos" | "windows" | "linux" | undefined;
111
108
  device?: string | undefined;
112
109
  device_id?: string | undefined;
113
110
  device_type?: string | undefined;
114
111
  device_vendor?: string | undefined;
115
112
  device_pixel_ratio?: string | undefined;
113
+ screen_resolution?: `${number}x${number}` | undefined;
116
114
  release?: string | undefined;
115
+ language?: string | undefined;
117
116
  timezone?: string | undefined;
118
117
  environment?: "development" | "production" | undefined;
119
118
  source_url?: string | undefined;
120
119
  source?: "web" | "app" | "offline" | undefined;
121
120
  fbc?: string | undefined;
122
121
  fbp?: string | undefined;
122
+ gclid?: string | undefined;
123
123
  advertising_id?: string | undefined;
124
124
  utm_source?: string | undefined;
125
125
  utm_medium?: string | undefined;
@@ -129,32 +129,32 @@ declare const createTrackEventSchema: z.ZodArray<z.ZodObject<{
129
129
  };
130
130
  properties?: Record<string, string | number | boolean | Record<string, string | number | boolean | null>[] | null> | undefined;
131
131
  }, {
132
- visitor_id: bigint;
133
132
  name: string;
133
+ visitor_id: bigint;
134
134
  timestamp: string;
135
135
  tags: {
136
- gclid?: string | undefined;
137
- language?: string | undefined;
138
- screen_resolution?: string | undefined;
139
136
  os?: string | undefined;
140
137
  os_name?: string | undefined;
141
138
  os_version?: string | undefined;
142
139
  browser?: string | undefined;
143
140
  browser_name?: string | undefined;
144
141
  browser_version?: string | undefined;
145
- platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
142
+ platform?: "unknown" | "ios" | "android" | "web" | "macos" | "windows" | "linux" | undefined;
146
143
  device?: string | undefined;
147
144
  device_id?: string | undefined;
148
145
  device_type?: string | undefined;
149
146
  device_vendor?: string | undefined;
150
147
  device_pixel_ratio?: string | undefined;
148
+ screen_resolution?: string | undefined;
151
149
  release?: string | undefined;
150
+ language?: string | undefined;
152
151
  timezone?: string | undefined;
153
152
  environment?: "development" | "production" | undefined;
154
153
  source_url?: string | undefined;
155
154
  source?: "web" | "app" | "offline" | undefined;
156
155
  fbc?: string | undefined;
157
156
  fbp?: string | undefined;
157
+ gclid?: string | undefined;
158
158
  advertising_id?: string | undefined;
159
159
  utm_source?: string | undefined;
160
160
  utm_medium?: string | undefined;
@@ -34,28 +34,28 @@ declare const createTrackEventSchema: z.ZodArray<z.ZodObject<{
34
34
  utm_term: z.ZodOptional<z.ZodString>;
35
35
  utm_content: z.ZodOptional<z.ZodString>;
36
36
  }, "strip", z.ZodTypeAny, {
37
- gclid?: string | undefined;
38
- language?: string | undefined;
39
- screen_resolution?: `${number}x${number}` | undefined;
40
37
  os?: string | undefined;
41
38
  os_name?: string | undefined;
42
39
  os_version?: string | undefined;
43
40
  browser?: string | undefined;
44
41
  browser_name?: string | undefined;
45
42
  browser_version?: string | undefined;
46
- platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
43
+ platform?: "unknown" | "ios" | "android" | "web" | "macos" | "windows" | "linux" | undefined;
47
44
  device?: string | undefined;
48
45
  device_id?: string | undefined;
49
46
  device_type?: string | undefined;
50
47
  device_vendor?: string | undefined;
51
48
  device_pixel_ratio?: string | undefined;
49
+ screen_resolution?: `${number}x${number}` | undefined;
52
50
  release?: string | undefined;
51
+ language?: string | undefined;
53
52
  timezone?: string | undefined;
54
53
  environment?: "development" | "production" | undefined;
55
54
  source_url?: string | undefined;
56
55
  source?: "web" | "app" | "offline" | undefined;
57
56
  fbc?: string | undefined;
58
57
  fbp?: string | undefined;
58
+ gclid?: string | undefined;
59
59
  advertising_id?: string | undefined;
60
60
  utm_source?: string | undefined;
61
61
  utm_medium?: string | undefined;
@@ -63,28 +63,28 @@ declare const createTrackEventSchema: z.ZodArray<z.ZodObject<{
63
63
  utm_term?: string | undefined;
64
64
  utm_content?: string | undefined;
65
65
  }, {
66
- gclid?: string | undefined;
67
- language?: string | undefined;
68
- screen_resolution?: string | undefined;
69
66
  os?: string | undefined;
70
67
  os_name?: string | undefined;
71
68
  os_version?: string | undefined;
72
69
  browser?: string | undefined;
73
70
  browser_name?: string | undefined;
74
71
  browser_version?: string | undefined;
75
- platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
72
+ platform?: "unknown" | "ios" | "android" | "web" | "macos" | "windows" | "linux" | undefined;
76
73
  device?: string | undefined;
77
74
  device_id?: string | undefined;
78
75
  device_type?: string | undefined;
79
76
  device_vendor?: string | undefined;
80
77
  device_pixel_ratio?: string | undefined;
78
+ screen_resolution?: string | undefined;
81
79
  release?: string | undefined;
80
+ language?: string | undefined;
82
81
  timezone?: string | undefined;
83
82
  environment?: "development" | "production" | undefined;
84
83
  source_url?: string | undefined;
85
84
  source?: "web" | "app" | "offline" | undefined;
86
85
  fbc?: string | undefined;
87
86
  fbp?: string | undefined;
87
+ gclid?: string | undefined;
88
88
  advertising_id?: string | undefined;
89
89
  utm_source?: string | undefined;
90
90
  utm_medium?: string | undefined;
@@ -94,32 +94,32 @@ declare const createTrackEventSchema: z.ZodArray<z.ZodObject<{
94
94
  }>;
95
95
  properties: z.ZodOptional<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>, "many">]>>, Record<string, string | number | boolean | Record<string, string | number | boolean | null>[] | null>, Record<string, string | number | boolean | Record<string, string | number | boolean | null>[] | null>>>;
96
96
  }, "strip", z.ZodTypeAny, {
97
- visitor_id: bigint;
98
97
  name: string;
98
+ visitor_id: bigint;
99
99
  timestamp: string;
100
100
  tags: {
101
- gclid?: string | undefined;
102
- language?: string | undefined;
103
- screen_resolution?: `${number}x${number}` | undefined;
104
101
  os?: string | undefined;
105
102
  os_name?: string | undefined;
106
103
  os_version?: string | undefined;
107
104
  browser?: string | undefined;
108
105
  browser_name?: string | undefined;
109
106
  browser_version?: string | undefined;
110
- platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
107
+ platform?: "unknown" | "ios" | "android" | "web" | "macos" | "windows" | "linux" | undefined;
111
108
  device?: string | undefined;
112
109
  device_id?: string | undefined;
113
110
  device_type?: string | undefined;
114
111
  device_vendor?: string | undefined;
115
112
  device_pixel_ratio?: string | undefined;
113
+ screen_resolution?: `${number}x${number}` | undefined;
116
114
  release?: string | undefined;
115
+ language?: string | undefined;
117
116
  timezone?: string | undefined;
118
117
  environment?: "development" | "production" | undefined;
119
118
  source_url?: string | undefined;
120
119
  source?: "web" | "app" | "offline" | undefined;
121
120
  fbc?: string | undefined;
122
121
  fbp?: string | undefined;
122
+ gclid?: string | undefined;
123
123
  advertising_id?: string | undefined;
124
124
  utm_source?: string | undefined;
125
125
  utm_medium?: string | undefined;
@@ -129,32 +129,32 @@ declare const createTrackEventSchema: z.ZodArray<z.ZodObject<{
129
129
  };
130
130
  properties?: Record<string, string | number | boolean | Record<string, string | number | boolean | null>[] | null> | undefined;
131
131
  }, {
132
- visitor_id: bigint;
133
132
  name: string;
133
+ visitor_id: bigint;
134
134
  timestamp: string;
135
135
  tags: {
136
- gclid?: string | undefined;
137
- language?: string | undefined;
138
- screen_resolution?: string | undefined;
139
136
  os?: string | undefined;
140
137
  os_name?: string | undefined;
141
138
  os_version?: string | undefined;
142
139
  browser?: string | undefined;
143
140
  browser_name?: string | undefined;
144
141
  browser_version?: string | undefined;
145
- platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
142
+ platform?: "unknown" | "ios" | "android" | "web" | "macos" | "windows" | "linux" | undefined;
146
143
  device?: string | undefined;
147
144
  device_id?: string | undefined;
148
145
  device_type?: string | undefined;
149
146
  device_vendor?: string | undefined;
150
147
  device_pixel_ratio?: string | undefined;
148
+ screen_resolution?: string | undefined;
151
149
  release?: string | undefined;
150
+ language?: string | undefined;
152
151
  timezone?: string | undefined;
153
152
  environment?: "development" | "production" | undefined;
154
153
  source_url?: string | undefined;
155
154
  source?: "web" | "app" | "offline" | undefined;
156
155
  fbc?: string | undefined;
157
156
  fbp?: string | undefined;
157
+ gclid?: string | undefined;
158
158
  advertising_id?: string | undefined;
159
159
  utm_source?: string | undefined;
160
160
  utm_medium?: string | undefined;
@@ -20,7 +20,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/track/index.ts
21
21
  var track_exports = {};
22
22
  __export(track_exports, {
23
- track: () => track
23
+ track: () => track,
24
+ trackAsync: () => trackAsync
24
25
  });
25
26
  module.exports = __toCommonJS(track_exports);
26
27
  var import_limiter = require("limiter");
@@ -85,8 +86,12 @@ function track(name, properties, options = defaultOptions) {
85
86
  sendEvents(copy);
86
87
  }, delay);
87
88
  }
89
+ async function trackAsync(name, properties, options = defaultOptions) {
90
+ await sendEvents([{ name, properties, options, timestamp: (/* @__PURE__ */ new Date()).toISOString() }]);
91
+ }
88
92
  // Annotate the CommonJS export names for ESM import in node:
89
93
  0 && (module.exports = {
90
- track
94
+ track,
95
+ trackAsync
91
96
  });
92
97
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { TokenBucket } from 'limiter';\nimport { config } from '../setup/index';\nimport { getVisitor } from '../visitor/index';\nimport type {\n CreateTrackEventDTO,\n EventName,\n TrackName,\n TrackProperties,\n TrackEventResponse,\n} from './types';\n\nexport interface TrackOptions {\n enableThirdPartyTracking?: boolean;\n onSucceed?: (response?: TrackEventResponse[number]) => 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\ntype Item = {\n name: TrackName<any>;\n properties: TrackProperties<any>;\n timestamp: string;\n options: TrackOptions;\n};\n\nasync function sendEvents(events: Item[]) {\n try {\n if (events.length === 0) return;\n await tokenBucket.removeTokens(REQUEST_TOKENS);\n\n const tags = await config.getTags();\n const visitor_id = (await getVisitor()).id;\n const dto: CreateTrackEventDTO = events.map((event) => ({\n name: event.name,\n properties: event.properties,\n tags,\n visitor_id,\n timestamp: event.timestamp,\n }));\n const { data } = await config.http.post<TrackEventResponse>(`/events`, dto);\n let index = 0;\n while (events.length > 0) {\n const { options, name, properties } = events.shift()!;\n const eventId = data[index].id;\n options.onSucceed?.({ id: eventId });\n index++;\n if (!options.enableThirdPartyTracking || !config.thirdPartyTrackers) continue;\n config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, eventId));\n }\n } catch (e: unknown) {\n if (e instanceof Error) console.log('Failed to send track event:', e.message);\n events.forEach((event) => event.options.onError?.(e));\n }\n}\n\nconst batch = 10;\nconst delay = 2000;\nconst list: Item[] = [];\nlet timer: ReturnType<typeof setTimeout> | null = null;\n\nexport function track<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n list.push({ name, properties, options, timestamp: new Date().toISOString() });\n if (list.length >= batch) {\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = null;\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n }, delay);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA4B;AAC5B,mBAAuB;AACvB,qBAA2B;AAe3B,IAAM,iBAA+B,EAAE,0BAA0B,KAAK;AAEtE,IAAM,iBAAiB;AACvB,IAAM,cAAc,IAAI,2BAAY;AAAA,EAClC,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,mBAAmB;AACrB,CAAC;AASD,eAAe,WAAW,QAAgB;AAjC1C;AAkCE,MAAI;AACF,QAAI,OAAO,WAAW,EAAG;AACzB,UAAM,YAAY,aAAa,cAAc;AAE7C,UAAM,OAAO,MAAM,oBAAO,QAAQ;AAClC,UAAM,cAAc,UAAM,2BAAW,GAAG;AACxC,UAAM,MAA2B,OAAO,IAAI,CAAC,WAAW;AAAA,MACtD,MAAM,MAAM;AAAA,MACZ,YAAY,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA,WAAW,MAAM;AAAA,IACnB,EAAE;AACF,UAAM,EAAE,KAAK,IAAI,MAAM,oBAAO,KAAK,KAAyB,WAAW,GAAG;AAC1E,QAAI,QAAQ;AACZ,WAAO,OAAO,SAAS,GAAG;AACxB,YAAM,EAAE,SAAS,MAAM,WAAW,IAAI,OAAO,MAAM;AACnD,YAAM,UAAU,KAAK,KAAK,EAAE;AAC5B,oBAAQ,cAAR,iCAAoB,EAAE,IAAI,QAAQ;AAClC;AACA,UAAI,CAAC,QAAQ,4BAA4B,CAAC,oBAAO,mBAAoB;AACrE,0BAAO,mBAAmB,QAAQ,CAAC,YAAY,QAAQ,MAAM,YAAY,OAAO,CAAC;AAAA,IACnF;AAAA,EACF,SAAS,GAAY;AACnB,QAAI,aAAa,MAAO,SAAQ,IAAI,+BAA+B,EAAE,OAAO;AAC5E,WAAO,QAAQ,CAAC,UAAO;AA3D3B,UAAAA,KAAA;AA2D8B,oBAAAA,MAAA,MAAM,SAAQ,YAAd,wBAAAA,KAAwB;AAAA,KAAE;AAAA,EACtD;AACF;AAEA,IAAM,QAAQ;AACd,IAAM,QAAQ;AACd,IAAM,OAAe,CAAC;AACtB,IAAI,QAA8C;AAE3C,SAAS,MACd,MACA,YACA,UAAwB,gBACxB;AACA,OAAK,KAAK,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AAC5E,MAAI,KAAK,UAAU,OAAO;AACxB,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AACf;AAAA,EACF;AACA,MAAI,MAAO,cAAa,KAAK;AAC7B,UAAQ,WAAW,MAAM;AACvB,YAAQ;AACR,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AAAA,EACjB,GAAG,KAAK;AACV;","names":["_a"]}
1
+ {"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { TokenBucket } from 'limiter';\nimport { config } from '../setup/index';\nimport { getVisitor } from '../visitor/index';\nimport type {\n CreateTrackEventDTO,\n EventName,\n TrackName,\n TrackProperties,\n TrackEventResponse,\n} from './types';\n\nexport interface TrackOptions {\n enableThirdPartyTracking?: boolean;\n onSucceed?: (response?: TrackEventResponse[number]) => 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\ntype Item = {\n name: TrackName<any>;\n properties: TrackProperties<any>;\n timestamp: string;\n options: TrackOptions;\n};\n\nasync function sendEvents(events: Item[]) {\n try {\n if (events.length === 0) return;\n await tokenBucket.removeTokens(REQUEST_TOKENS);\n\n const tags = await config.getTags();\n const visitor_id = (await getVisitor()).id;\n const dto: CreateTrackEventDTO = events.map((event) => ({\n name: event.name,\n properties: event.properties,\n tags,\n visitor_id,\n timestamp: event.timestamp,\n }));\n const { data } = await config.http.post<TrackEventResponse>(`/events`, dto);\n let index = 0;\n while (events.length > 0) {\n const { options, name, properties } = events.shift()!;\n const eventId = data[index].id;\n options.onSucceed?.({ id: eventId });\n index++;\n if (!options.enableThirdPartyTracking || !config.thirdPartyTrackers) continue;\n config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, eventId));\n }\n } catch (e: unknown) {\n if (e instanceof Error) console.log('Failed to send track event:', e.message);\n events.forEach((event) => event.options.onError?.(e));\n }\n}\n\nconst batch = 10;\nconst delay = 2000;\nconst list: Item[] = [];\nlet timer: ReturnType<typeof setTimeout> | null = null;\n\nexport function track<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n list.push({ name, properties, options, timestamp: new Date().toISOString() });\n if (list.length >= batch) {\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = null;\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n }, delay);\n}\n\nexport async function trackAsync<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n await sendEvents([{ name, properties, options, timestamp: new Date().toISOString() }]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA4B;AAC5B,mBAAuB;AACvB,qBAA2B;AAe3B,IAAM,iBAA+B,EAAE,0BAA0B,KAAK;AAEtE,IAAM,iBAAiB;AACvB,IAAM,cAAc,IAAI,2BAAY;AAAA,EAClC,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,mBAAmB;AACrB,CAAC;AASD,eAAe,WAAW,QAAgB;AAjC1C;AAkCE,MAAI;AACF,QAAI,OAAO,WAAW,EAAG;AACzB,UAAM,YAAY,aAAa,cAAc;AAE7C,UAAM,OAAO,MAAM,oBAAO,QAAQ;AAClC,UAAM,cAAc,UAAM,2BAAW,GAAG;AACxC,UAAM,MAA2B,OAAO,IAAI,CAAC,WAAW;AAAA,MACtD,MAAM,MAAM;AAAA,MACZ,YAAY,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA,WAAW,MAAM;AAAA,IACnB,EAAE;AACF,UAAM,EAAE,KAAK,IAAI,MAAM,oBAAO,KAAK,KAAyB,WAAW,GAAG;AAC1E,QAAI,QAAQ;AACZ,WAAO,OAAO,SAAS,GAAG;AACxB,YAAM,EAAE,SAAS,MAAM,WAAW,IAAI,OAAO,MAAM;AACnD,YAAM,UAAU,KAAK,KAAK,EAAE;AAC5B,oBAAQ,cAAR,iCAAoB,EAAE,IAAI,QAAQ;AAClC;AACA,UAAI,CAAC,QAAQ,4BAA4B,CAAC,oBAAO,mBAAoB;AACrE,0BAAO,mBAAmB,QAAQ,CAAC,YAAY,QAAQ,MAAM,YAAY,OAAO,CAAC;AAAA,IACnF;AAAA,EACF,SAAS,GAAY;AACnB,QAAI,aAAa,MAAO,SAAQ,IAAI,+BAA+B,EAAE,OAAO;AAC5E,WAAO,QAAQ,CAAC,UAAO;AA3D3B,UAAAA,KAAA;AA2D8B,oBAAAA,MAAA,MAAM,SAAQ,YAAd,wBAAAA,KAAwB;AAAA,KAAE;AAAA,EACtD;AACF;AAEA,IAAM,QAAQ;AACd,IAAM,QAAQ;AACd,IAAM,OAAe,CAAC;AACtB,IAAI,QAA8C;AAE3C,SAAS,MACd,MACA,YACA,UAAwB,gBACxB;AACA,OAAK,KAAK,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AAC5E,MAAI,KAAK,UAAU,OAAO;AACxB,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AACf;AAAA,EACF;AACA,MAAI,MAAO,cAAa,KAAK;AAC7B,UAAQ,WAAW,MAAM;AACvB,YAAQ;AACR,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AAAA,EACjB,GAAG,KAAK;AACV;AAEA,eAAsB,WACpB,MACA,YACA,UAAwB,gBACxB;AACA,QAAM,WAAW,CAAC,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC,CAAC;AACvF;","names":["_a"]}
@@ -7,5 +7,6 @@ interface TrackOptions {
7
7
  onError?: (error: unknown) => void;
8
8
  }
9
9
  declare function track<T extends EventName = EventName>(name: TrackName<T>, properties?: TrackProperties<T>, options?: TrackOptions): void;
10
+ declare function trackAsync<T extends EventName = EventName>(name: TrackName<T>, properties?: TrackProperties<T>, options?: TrackOptions): Promise<void>;
10
11
 
11
- export { type TrackOptions, track };
12
+ export { type TrackOptions, track, trackAsync };
@@ -7,5 +7,6 @@ interface TrackOptions {
7
7
  onError?: (error: unknown) => void;
8
8
  }
9
9
  declare function track<T extends EventName = EventName>(name: TrackName<T>, properties?: TrackProperties<T>, options?: TrackOptions): void;
10
+ declare function trackAsync<T extends EventName = EventName>(name: TrackName<T>, properties?: TrackProperties<T>, options?: TrackOptions): Promise<void>;
10
11
 
11
- export { type TrackOptions, track };
12
+ export { type TrackOptions, track, trackAsync };
@@ -61,7 +61,11 @@ function track(name, properties, options = defaultOptions) {
61
61
  sendEvents(copy);
62
62
  }, delay);
63
63
  }
64
+ async function trackAsync(name, properties, options = defaultOptions) {
65
+ await sendEvents([{ name, properties, options, timestamp: (/* @__PURE__ */ new Date()).toISOString() }]);
66
+ }
64
67
  export {
65
- track
68
+ track,
69
+ trackAsync
66
70
  };
67
71
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { TokenBucket } from 'limiter';\nimport { config } from '../setup/index';\nimport { getVisitor } from '../visitor/index';\nimport type {\n CreateTrackEventDTO,\n EventName,\n TrackName,\n TrackProperties,\n TrackEventResponse,\n} from './types';\n\nexport interface TrackOptions {\n enableThirdPartyTracking?: boolean;\n onSucceed?: (response?: TrackEventResponse[number]) => 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\ntype Item = {\n name: TrackName<any>;\n properties: TrackProperties<any>;\n timestamp: string;\n options: TrackOptions;\n};\n\nasync function sendEvents(events: Item[]) {\n try {\n if (events.length === 0) return;\n await tokenBucket.removeTokens(REQUEST_TOKENS);\n\n const tags = await config.getTags();\n const visitor_id = (await getVisitor()).id;\n const dto: CreateTrackEventDTO = events.map((event) => ({\n name: event.name,\n properties: event.properties,\n tags,\n visitor_id,\n timestamp: event.timestamp,\n }));\n const { data } = await config.http.post<TrackEventResponse>(`/events`, dto);\n let index = 0;\n while (events.length > 0) {\n const { options, name, properties } = events.shift()!;\n const eventId = data[index].id;\n options.onSucceed?.({ id: eventId });\n index++;\n if (!options.enableThirdPartyTracking || !config.thirdPartyTrackers) continue;\n config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, eventId));\n }\n } catch (e: unknown) {\n if (e instanceof Error) console.log('Failed to send track event:', e.message);\n events.forEach((event) => event.options.onError?.(e));\n }\n}\n\nconst batch = 10;\nconst delay = 2000;\nconst list: Item[] = [];\nlet timer: ReturnType<typeof setTimeout> | null = null;\n\nexport function track<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n list.push({ name, properties, options, timestamp: new Date().toISOString() });\n if (list.length >= batch) {\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = null;\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n }, delay);\n}\n"],"mappings":";AAAA,SAAS,mBAAmB;AAC5B,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAe3B,IAAM,iBAA+B,EAAE,0BAA0B,KAAK;AAEtE,IAAM,iBAAiB;AACvB,IAAM,cAAc,IAAI,YAAY;AAAA,EAClC,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,mBAAmB;AACrB,CAAC;AASD,eAAe,WAAW,QAAgB;AAjC1C;AAkCE,MAAI;AACF,QAAI,OAAO,WAAW,EAAG;AACzB,UAAM,YAAY,aAAa,cAAc;AAE7C,UAAM,OAAO,MAAM,OAAO,QAAQ;AAClC,UAAM,cAAc,MAAM,WAAW,GAAG;AACxC,UAAM,MAA2B,OAAO,IAAI,CAAC,WAAW;AAAA,MACtD,MAAM,MAAM;AAAA,MACZ,YAAY,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA,WAAW,MAAM;AAAA,IACnB,EAAE;AACF,UAAM,EAAE,KAAK,IAAI,MAAM,OAAO,KAAK,KAAyB,WAAW,GAAG;AAC1E,QAAI,QAAQ;AACZ,WAAO,OAAO,SAAS,GAAG;AACxB,YAAM,EAAE,SAAS,MAAM,WAAW,IAAI,OAAO,MAAM;AACnD,YAAM,UAAU,KAAK,KAAK,EAAE;AAC5B,oBAAQ,cAAR,iCAAoB,EAAE,IAAI,QAAQ;AAClC;AACA,UAAI,CAAC,QAAQ,4BAA4B,CAAC,OAAO,mBAAoB;AACrE,aAAO,mBAAmB,QAAQ,CAAC,YAAY,QAAQ,MAAM,YAAY,OAAO,CAAC;AAAA,IACnF;AAAA,EACF,SAAS,GAAY;AACnB,QAAI,aAAa,MAAO,SAAQ,IAAI,+BAA+B,EAAE,OAAO;AAC5E,WAAO,QAAQ,CAAC,UAAO;AA3D3B,UAAAA,KAAA;AA2D8B,oBAAAA,MAAA,MAAM,SAAQ,YAAd,wBAAAA,KAAwB;AAAA,KAAE;AAAA,EACtD;AACF;AAEA,IAAM,QAAQ;AACd,IAAM,QAAQ;AACd,IAAM,OAAe,CAAC;AACtB,IAAI,QAA8C;AAE3C,SAAS,MACd,MACA,YACA,UAAwB,gBACxB;AACA,OAAK,KAAK,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AAC5E,MAAI,KAAK,UAAU,OAAO;AACxB,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AACf;AAAA,EACF;AACA,MAAI,MAAO,cAAa,KAAK;AAC7B,UAAQ,WAAW,MAAM;AACvB,YAAQ;AACR,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AAAA,EACjB,GAAG,KAAK;AACV;","names":["_a"]}
1
+ {"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { TokenBucket } from 'limiter';\nimport { config } from '../setup/index';\nimport { getVisitor } from '../visitor/index';\nimport type {\n CreateTrackEventDTO,\n EventName,\n TrackName,\n TrackProperties,\n TrackEventResponse,\n} from './types';\n\nexport interface TrackOptions {\n enableThirdPartyTracking?: boolean;\n onSucceed?: (response?: TrackEventResponse[number]) => 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\ntype Item = {\n name: TrackName<any>;\n properties: TrackProperties<any>;\n timestamp: string;\n options: TrackOptions;\n};\n\nasync function sendEvents(events: Item[]) {\n try {\n if (events.length === 0) return;\n await tokenBucket.removeTokens(REQUEST_TOKENS);\n\n const tags = await config.getTags();\n const visitor_id = (await getVisitor()).id;\n const dto: CreateTrackEventDTO = events.map((event) => ({\n name: event.name,\n properties: event.properties,\n tags,\n visitor_id,\n timestamp: event.timestamp,\n }));\n const { data } = await config.http.post<TrackEventResponse>(`/events`, dto);\n let index = 0;\n while (events.length > 0) {\n const { options, name, properties } = events.shift()!;\n const eventId = data[index].id;\n options.onSucceed?.({ id: eventId });\n index++;\n if (!options.enableThirdPartyTracking || !config.thirdPartyTrackers) continue;\n config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, eventId));\n }\n } catch (e: unknown) {\n if (e instanceof Error) console.log('Failed to send track event:', e.message);\n events.forEach((event) => event.options.onError?.(e));\n }\n}\n\nconst batch = 10;\nconst delay = 2000;\nconst list: Item[] = [];\nlet timer: ReturnType<typeof setTimeout> | null = null;\n\nexport function track<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n list.push({ name, properties, options, timestamp: new Date().toISOString() });\n if (list.length >= batch) {\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = null;\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n }, delay);\n}\n\nexport async function trackAsync<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n await sendEvents([{ name, properties, options, timestamp: new Date().toISOString() }]);\n}\n"],"mappings":";AAAA,SAAS,mBAAmB;AAC5B,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAe3B,IAAM,iBAA+B,EAAE,0BAA0B,KAAK;AAEtE,IAAM,iBAAiB;AACvB,IAAM,cAAc,IAAI,YAAY;AAAA,EAClC,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,mBAAmB;AACrB,CAAC;AASD,eAAe,WAAW,QAAgB;AAjC1C;AAkCE,MAAI;AACF,QAAI,OAAO,WAAW,EAAG;AACzB,UAAM,YAAY,aAAa,cAAc;AAE7C,UAAM,OAAO,MAAM,OAAO,QAAQ;AAClC,UAAM,cAAc,MAAM,WAAW,GAAG;AACxC,UAAM,MAA2B,OAAO,IAAI,CAAC,WAAW;AAAA,MACtD,MAAM,MAAM;AAAA,MACZ,YAAY,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA,WAAW,MAAM;AAAA,IACnB,EAAE;AACF,UAAM,EAAE,KAAK,IAAI,MAAM,OAAO,KAAK,KAAyB,WAAW,GAAG;AAC1E,QAAI,QAAQ;AACZ,WAAO,OAAO,SAAS,GAAG;AACxB,YAAM,EAAE,SAAS,MAAM,WAAW,IAAI,OAAO,MAAM;AACnD,YAAM,UAAU,KAAK,KAAK,EAAE;AAC5B,oBAAQ,cAAR,iCAAoB,EAAE,IAAI,QAAQ;AAClC;AACA,UAAI,CAAC,QAAQ,4BAA4B,CAAC,OAAO,mBAAoB;AACrE,aAAO,mBAAmB,QAAQ,CAAC,YAAY,QAAQ,MAAM,YAAY,OAAO,CAAC;AAAA,IACnF;AAAA,EACF,SAAS,GAAY;AACnB,QAAI,aAAa,MAAO,SAAQ,IAAI,+BAA+B,EAAE,OAAO;AAC5E,WAAO,QAAQ,CAAC,UAAO;AA3D3B,UAAAA,KAAA;AA2D8B,oBAAAA,MAAA,MAAM,SAAQ,YAAd,wBAAAA,KAAwB;AAAA,KAAE;AAAA,EACtD;AACF;AAEA,IAAM,QAAQ;AACd,IAAM,QAAQ;AACd,IAAM,OAAe,CAAC;AACtB,IAAI,QAA8C;AAE3C,SAAS,MACd,MACA,YACA,UAAwB,gBACxB;AACA,OAAK,KAAK,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AAC5E,MAAI,KAAK,UAAU,OAAO;AACxB,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AACf;AAAA,EACF;AACA,MAAI,MAAO,cAAa,KAAK;AAC7B,UAAQ,WAAW,MAAM;AACvB,YAAQ;AACR,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AAAA,EACjB,GAAG,KAAK;AACV;AAEA,eAAsB,WACpB,MACA,YACA,UAAwB,gBACxB;AACA,QAAM,WAAW,CAAC,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC,CAAC;AACvF;","names":["_a"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shware/analytics",
3
- "version": "0.3.6",
3
+ "version": "0.3.8",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "scripts": {