@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.
- package/dist/track/index.cjs +45 -20
- package/dist/track/index.cjs.map +1 -1
- package/dist/track/index.d.cts +2 -2
- package/dist/track/index.d.ts +2 -2
- package/dist/track/index.mjs +45 -20
- package/dist/track/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/track/index.cjs
CHANGED
|
@@ -33,32 +33,57 @@ var tokenBucket = new import_limiter.TokenBucket({
|
|
|
33
33
|
interval: "second",
|
|
34
34
|
tokensPerInterval: 1
|
|
35
35
|
});
|
|
36
|
-
async function
|
|
37
|
-
var _a
|
|
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
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
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
|
-
|
|
61
|
-
|
|
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 = {
|
package/dist/track/index.cjs.map
CHANGED
|
@@ -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\
|
|
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"]}
|
package/dist/track/index.d.cts
CHANGED
|
@@ -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>,
|
|
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 };
|
package/dist/track/index.d.ts
CHANGED
|
@@ -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>,
|
|
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 };
|
package/dist/track/index.mjs
CHANGED
|
@@ -9,32 +9,57 @@ var tokenBucket = new TokenBucket({
|
|
|
9
9
|
interval: "second",
|
|
10
10
|
tokensPerInterval: 1
|
|
11
11
|
});
|
|
12
|
-
async function
|
|
13
|
-
var _a
|
|
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
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
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
|
-
|
|
37
|
-
|
|
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
|
package/dist/track/index.mjs.map
CHANGED
|
@@ -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\
|
|
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"]}
|