@shware/analytics 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33,32 +33,57 @@ var tokenBucket = new import_limiter.TokenBucket({
33
33
  interval: "second",
34
34
  tokensPerInterval: 1
35
35
  });
36
- async function trackAsync(name, properties, trackOptions = defaultOptions) {
37
- var _a, _b;
36
+ async function sendEvents(events) {
37
+ var _a;
38
38
  try {
39
+ if (events.length === 0) return;
39
40
  await tokenBucket.removeTokens(REQUEST_TOKENS);
40
- const dto = [
41
- {
42
- name,
43
- properties,
44
- tags: await import_setup.config.getTags(),
45
- visitor_id: (await (0, import_visitor.getVisitor)()).id,
46
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
47
- }
48
- ];
41
+ const tags = await import_setup.config.getTags();
42
+ const visitor_id = (await (0, import_visitor.getVisitor)()).id;
43
+ const dto = events.map((event) => ({
44
+ name: event.name,
45
+ properties: event.properties,
46
+ tags,
47
+ visitor_id,
48
+ timestamp: event.timestamp
49
+ }));
49
50
  const { data } = await import_setup.config.http.post(`/events`, dto);
50
- if (!trackOptions.enableThirdPartyTracking || !import_setup.config.thirdPartyTrackers) return;
51
- import_setup.config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, data[0].id));
52
- (_a = trackOptions.onSucceed) == null ? void 0 : _a.call(trackOptions, data);
53
- } catch (e) {
54
- if (e instanceof Error) {
55
- console.log("Failed to send track event:", e.message);
51
+ let index = 0;
52
+ while (events.length > 0) {
53
+ const { options, name, properties } = events.shift();
54
+ const eventId = data[index].id;
55
+ (_a = options.onSucceed) == null ? void 0 : _a.call(options, { id: eventId });
56
+ index++;
57
+ if (!options.enableThirdPartyTracking || !import_setup.config.thirdPartyTrackers) continue;
58
+ import_setup.config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, eventId));
56
59
  }
57
- (_b = trackOptions.onError) == null ? void 0 : _b.call(trackOptions, e);
60
+ } catch (e) {
61
+ if (e instanceof Error) console.log("Failed to send track event:", e.message);
62
+ events.forEach((event) => {
63
+ var _a2, _b;
64
+ return (_b = (_a2 = event.options).onError) == null ? void 0 : _b.call(_a2, e);
65
+ });
58
66
  }
59
67
  }
60
- function track(name, properties, trackOptions = defaultOptions) {
61
- trackAsync(name, properties, trackOptions).catch(console.error);
68
+ var batch = 10;
69
+ var delay = 2e3;
70
+ var list = [];
71
+ var timer = null;
72
+ function track(name, properties, options = defaultOptions) {
73
+ list.push({ name, properties, options, timestamp: (/* @__PURE__ */ new Date()).toISOString() });
74
+ if (list.length >= batch) {
75
+ const copy = [...list];
76
+ list.length = 0;
77
+ sendEvents(copy);
78
+ return;
79
+ }
80
+ if (timer) clearTimeout(timer);
81
+ timer = setTimeout(() => {
82
+ timer = null;
83
+ const copy = [...list];
84
+ list.length = 0;
85
+ sendEvents(copy);
86
+ }, delay);
62
87
  }
63
88
  // Annotate the CommonJS export names for ESM import in node:
64
89
  0 && (module.exports = {
@@ -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) => 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>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n trackOptions: TrackOptions = defaultOptions\n) {\n try {\n await tokenBucket.removeTokens(REQUEST_TOKENS);\n const dto: CreateTrackEventDTO<T> = [\n {\n name,\n properties,\n tags: await config.getTags(),\n visitor_id: (await getVisitor()).id,\n timestamp: new Date().toISOString(),\n },\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[0].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: TrackName<T>,\n properties?: TrackProperties<T>,\n trackOptions: TrackOptions = defaultOptions\n) {\n trackAsync(name, properties, trackOptions).catch(console.error);\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;AAED,eAAe,WACb,MACA,YACA,eAA6B,gBAC7B;AA9BF;AA+BE,MAAI;AACF,UAAM,YAAY,aAAa,cAAc;AAC7C,UAAM,MAA8B;AAAA,MAClC;AAAA,QACE;AAAA,QACA;AAAA,QACA,MAAM,MAAM,oBAAO,QAAQ;AAAA,QAC3B,aAAa,UAAM,2BAAW,GAAG;AAAA,QACjC,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MACpC;AAAA,IACF;AACA,UAAM,EAAE,KAAK,IAAI,MAAM,oBAAO,KAAK,KAAyB,WAAW,GAAG;AAG1E,QAAI,CAAC,aAAa,4BAA4B,CAAC,oBAAO,mBAAoB;AAC1E,wBAAO,mBAAmB,QAAQ,CAAC,YAAY,QAAQ,MAAM,YAAY,KAAK,CAAC,EAAE,EAAE,CAAC;AACpF,uBAAa,cAAb,sCAAyB;AAAA,EAC3B,SAAS,GAAY;AACnB,QAAI,aAAa,OAAO;AACtB,cAAQ,IAAI,+BAA+B,EAAE,OAAO;AAAA,IACtD;AACA,uBAAa,YAAb,sCAAuB;AAAA,EACzB;AACF;AAEO,SAAS,MACd,MACA,YACA,eAA6B,gBAC7B;AACA,aAAW,MAAM,YAAY,YAAY,EAAE,MAAM,QAAQ,KAAK;AAChE;","names":[]}
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"]}
@@ -3,9 +3,9 @@ import './gtag.cjs';
3
3
 
4
4
  interface TrackOptions {
5
5
  enableThirdPartyTracking?: boolean;
6
- onSucceed?: (response?: TrackEventResponse) => void;
6
+ onSucceed?: (response?: TrackEventResponse[number]) => void;
7
7
  onError?: (error: unknown) => void;
8
8
  }
9
- declare function track<T extends EventName = EventName>(name: TrackName<T>, properties?: TrackProperties<T>, trackOptions?: TrackOptions): void;
9
+ declare function track<T extends EventName = EventName>(name: TrackName<T>, properties?: TrackProperties<T>, options?: TrackOptions): void;
10
10
 
11
11
  export { type TrackOptions, track };
@@ -3,9 +3,9 @@ import './gtag.js';
3
3
 
4
4
  interface TrackOptions {
5
5
  enableThirdPartyTracking?: boolean;
6
- onSucceed?: (response?: TrackEventResponse) => void;
6
+ onSucceed?: (response?: TrackEventResponse[number]) => void;
7
7
  onError?: (error: unknown) => void;
8
8
  }
9
- declare function track<T extends EventName = EventName>(name: TrackName<T>, properties?: TrackProperties<T>, trackOptions?: TrackOptions): void;
9
+ declare function track<T extends EventName = EventName>(name: TrackName<T>, properties?: TrackProperties<T>, options?: TrackOptions): void;
10
10
 
11
11
  export { type TrackOptions, track };
@@ -9,32 +9,57 @@ var tokenBucket = new TokenBucket({
9
9
  interval: "second",
10
10
  tokensPerInterval: 1
11
11
  });
12
- async function trackAsync(name, properties, trackOptions = defaultOptions) {
13
- var _a, _b;
12
+ async function sendEvents(events) {
13
+ var _a;
14
14
  try {
15
+ if (events.length === 0) return;
15
16
  await tokenBucket.removeTokens(REQUEST_TOKENS);
16
- const dto = [
17
- {
18
- name,
19
- properties,
20
- tags: await config.getTags(),
21
- visitor_id: (await getVisitor()).id,
22
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
23
- }
24
- ];
17
+ const tags = await config.getTags();
18
+ const visitor_id = (await getVisitor()).id;
19
+ const dto = events.map((event) => ({
20
+ name: event.name,
21
+ properties: event.properties,
22
+ tags,
23
+ visitor_id,
24
+ timestamp: event.timestamp
25
+ }));
25
26
  const { data } = await config.http.post(`/events`, dto);
26
- if (!trackOptions.enableThirdPartyTracking || !config.thirdPartyTrackers) return;
27
- config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, data[0].id));
28
- (_a = trackOptions.onSucceed) == null ? void 0 : _a.call(trackOptions, data);
29
- } catch (e) {
30
- if (e instanceof Error) {
31
- console.log("Failed to send track event:", e.message);
27
+ let index = 0;
28
+ while (events.length > 0) {
29
+ const { options, name, properties } = events.shift();
30
+ const eventId = data[index].id;
31
+ (_a = options.onSucceed) == null ? void 0 : _a.call(options, { id: eventId });
32
+ index++;
33
+ if (!options.enableThirdPartyTracking || !config.thirdPartyTrackers) continue;
34
+ config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, eventId));
32
35
  }
33
- (_b = trackOptions.onError) == null ? void 0 : _b.call(trackOptions, e);
36
+ } catch (e) {
37
+ if (e instanceof Error) console.log("Failed to send track event:", e.message);
38
+ events.forEach((event) => {
39
+ var _a2, _b;
40
+ return (_b = (_a2 = event.options).onError) == null ? void 0 : _b.call(_a2, e);
41
+ });
34
42
  }
35
43
  }
36
- function track(name, properties, trackOptions = defaultOptions) {
37
- trackAsync(name, properties, trackOptions).catch(console.error);
44
+ var batch = 10;
45
+ var delay = 2e3;
46
+ var list = [];
47
+ var timer = null;
48
+ function track(name, properties, options = defaultOptions) {
49
+ list.push({ name, properties, options, timestamp: (/* @__PURE__ */ new Date()).toISOString() });
50
+ if (list.length >= batch) {
51
+ const copy = [...list];
52
+ list.length = 0;
53
+ sendEvents(copy);
54
+ return;
55
+ }
56
+ if (timer) clearTimeout(timer);
57
+ timer = setTimeout(() => {
58
+ timer = null;
59
+ const copy = [...list];
60
+ list.length = 0;
61
+ sendEvents(copy);
62
+ }, delay);
38
63
  }
39
64
  export {
40
65
  track
@@ -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) => 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>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n trackOptions: TrackOptions = defaultOptions\n) {\n try {\n await tokenBucket.removeTokens(REQUEST_TOKENS);\n const dto: CreateTrackEventDTO<T> = [\n {\n name,\n properties,\n tags: await config.getTags(),\n visitor_id: (await getVisitor()).id,\n timestamp: new Date().toISOString(),\n },\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[0].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: TrackName<T>,\n properties?: TrackProperties<T>,\n trackOptions: TrackOptions = defaultOptions\n) {\n trackAsync(name, properties, trackOptions).catch(console.error);\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;AAED,eAAe,WACb,MACA,YACA,eAA6B,gBAC7B;AA9BF;AA+BE,MAAI;AACF,UAAM,YAAY,aAAa,cAAc;AAC7C,UAAM,MAA8B;AAAA,MAClC;AAAA,QACE;AAAA,QACA;AAAA,QACA,MAAM,MAAM,OAAO,QAAQ;AAAA,QAC3B,aAAa,MAAM,WAAW,GAAG;AAAA,QACjC,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MACpC;AAAA,IACF;AACA,UAAM,EAAE,KAAK,IAAI,MAAM,OAAO,KAAK,KAAyB,WAAW,GAAG;AAG1E,QAAI,CAAC,aAAa,4BAA4B,CAAC,OAAO,mBAAoB;AAC1E,WAAO,mBAAmB,QAAQ,CAAC,YAAY,QAAQ,MAAM,YAAY,KAAK,CAAC,EAAE,EAAE,CAAC;AACpF,uBAAa,cAAb,sCAAyB;AAAA,EAC3B,SAAS,GAAY;AACnB,QAAI,aAAa,OAAO;AACtB,cAAQ,IAAI,+BAA+B,EAAE,OAAO;AAAA,IACtD;AACA,uBAAa,YAAb,sCAAuB;AAAA,EACzB;AACF;AAEO,SAAS,MACd,MACA,YACA,eAA6B,gBAC7B;AACA,aAAW,MAAM,YAAY,YAAY,EAAE,MAAM,QAAQ,KAAK;AAChE;","names":[]}
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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shware/analytics",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "scripts": {