@shware/analytics 2.15.1 → 2.15.3
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/setup/index.cjs +0 -14
- package/dist/setup/index.cjs.map +1 -1
- package/dist/setup/index.d.cts +1 -7
- package/dist/setup/index.d.ts +1 -7
- package/dist/setup/index.mjs +0 -12
- package/dist/setup/index.mjs.map +1 -1
- package/dist/setup/session.cjs +52 -0
- package/dist/setup/session.cjs.map +1 -0
- package/dist/setup/session.d.cts +10 -0
- package/dist/setup/session.d.ts +10 -0
- package/dist/setup/session.mjs +24 -0
- package/dist/setup/session.mjs.map +1 -0
- package/dist/track/index.cjs +15 -2
- package/dist/track/index.cjs.map +1 -1
- package/dist/track/index.mjs +21 -3
- package/dist/track/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/setup/index.cjs
CHANGED
|
@@ -22,25 +22,13 @@ var setup_exports = {};
|
|
|
22
22
|
__export(setup_exports, {
|
|
23
23
|
cache: () => cache,
|
|
24
24
|
config: () => config,
|
|
25
|
-
getSession: () => getSession,
|
|
26
|
-
resetSession: () => resetSession,
|
|
27
25
|
setupAnalytics: () => setupAnalytics
|
|
28
26
|
});
|
|
29
27
|
module.exports = __toCommonJS(setup_exports);
|
|
30
|
-
var import_uuid = require("uuid");
|
|
31
28
|
var cache = {
|
|
32
29
|
tags: null,
|
|
33
30
|
visitor: null
|
|
34
31
|
};
|
|
35
|
-
var session = { id: (0, import_uuid.v7)(), lastActiveTimestamp: Date.now() };
|
|
36
|
-
function getSession() {
|
|
37
|
-
return session;
|
|
38
|
-
}
|
|
39
|
-
function resetSession() {
|
|
40
|
-
session.id = (0, import_uuid.v7)();
|
|
41
|
-
session.lastActiveTimestamp = Date.now();
|
|
42
|
-
return session;
|
|
43
|
-
}
|
|
44
32
|
var config = {
|
|
45
33
|
endpoint: "",
|
|
46
34
|
release: "0.0.0",
|
|
@@ -71,8 +59,6 @@ function setupAnalytics(init) {
|
|
|
71
59
|
0 && (module.exports = {
|
|
72
60
|
cache,
|
|
73
61
|
config,
|
|
74
|
-
getSession,
|
|
75
|
-
resetSession,
|
|
76
62
|
setupAnalytics
|
|
77
63
|
});
|
|
78
64
|
//# sourceMappingURL=index.cjs.map
|
package/dist/setup/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/setup/index.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../src/setup/index.ts"],"sourcesContent":["import type { ThirdPartyTracker, TrackTags } from '../track/types';\nimport type { ThirdPartyUserSetter, Visitor } from '../visitor/types';\n\nexport interface Storage {\n getItem: (key: string) => string | null;\n setItem: (key: string, value: string) => 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 getHeaders?: () => Record<string, string> | Promise<Record<string, string>>;\n thirdPartyTrackers?: ThirdPartyTracker[];\n thirdPartyUserSetters?: ThirdPartyUserSetter[];\n}\n\ninterface Config {\n release: string;\n endpoint: string;\n storage: Storage;\n getTags: () => TrackTags | Promise<TrackTags>;\n getDeviceId: () => string | Promise<string>;\n getHeaders: () => Record<string, string> | Promise<Record<string, string>>;\n thirdPartyTrackers: ThirdPartyTracker[];\n thirdPartyUserSetters: ThirdPartyUserSetter[];\n}\n\ninterface Cache {\n tags: TrackTags | null;\n visitor: Visitor | null;\n}\n\nexport const cache: Cache = {\n tags: null,\n visitor: null,\n};\n\nexport const config: Config = {\n endpoint: '',\n release: '0.0.0',\n storage: null!,\n getTags: null!,\n getDeviceId: null!,\n getHeaders: null!,\n thirdPartyTrackers: [],\n thirdPartyUserSetters: [],\n};\n\nexport function setupAnalytics(init: Options) {\n config.release = init.release;\n config.storage = init.storage;\n config.endpoint = init.endpoint.endsWith('/') ? init.endpoint.slice(0, -1) : init.endpoint;\n config.getTags = init.getTags;\n config.getDeviceId = init.getDeviceId;\n config.getHeaders = async () => ({\n 'Content-Type': 'application/json',\n ...(await init.getHeaders?.()),\n });\n config.thirdPartyTrackers = init.thirdPartyTrackers ?? [];\n config.thirdPartyUserSetters = init.thirdPartyUserSetters ?? [];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmCO,IAAM,QAAe;AAAA,EAC1B,MAAM;AAAA,EACN,SAAS;AACX;AAEO,IAAM,SAAiB;AAAA,EAC5B,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,oBAAoB,CAAC;AAAA,EACrB,uBAAuB,CAAC;AAC1B;AAEO,SAAS,eAAe,MAAe;AAC5C,SAAO,UAAU,KAAK;AACtB,SAAO,UAAU,KAAK;AACtB,SAAO,WAAW,KAAK,SAAS,SAAS,GAAG,IAAI,KAAK,SAAS,MAAM,GAAG,EAAE,IAAI,KAAK;AAClF,SAAO,UAAU,KAAK;AACtB,SAAO,cAAc,KAAK;AAC1B,SAAO,aAAa,YAAS;AAzD/B;AAyDmC;AAAA,MAC/B,gBAAgB;AAAA,MAChB,GAAI,QAAM,UAAK,eAAL;AAAA,IACZ;AAAA;AACA,SAAO,qBAAqB,KAAK,sBAAsB,CAAC;AACxD,SAAO,wBAAwB,KAAK,yBAAyB,CAAC;AAChE;","names":[]}
|
package/dist/setup/index.d.cts
CHANGED
|
@@ -31,13 +31,7 @@ interface Cache {
|
|
|
31
31
|
visitor: Visitor | null;
|
|
32
32
|
}
|
|
33
33
|
declare const cache: Cache;
|
|
34
|
-
type Session = {
|
|
35
|
-
id: string;
|
|
36
|
-
lastActiveTimestamp: number;
|
|
37
|
-
};
|
|
38
|
-
declare function getSession(): Session;
|
|
39
|
-
declare function resetSession(): Session;
|
|
40
34
|
declare const config: Config;
|
|
41
35
|
declare function setupAnalytics(init: Options): void;
|
|
42
36
|
|
|
43
|
-
export { type Options, type Storage, cache, config,
|
|
37
|
+
export { type Options, type Storage, cache, config, setupAnalytics };
|
package/dist/setup/index.d.ts
CHANGED
|
@@ -31,13 +31,7 @@ interface Cache {
|
|
|
31
31
|
visitor: Visitor | null;
|
|
32
32
|
}
|
|
33
33
|
declare const cache: Cache;
|
|
34
|
-
type Session = {
|
|
35
|
-
id: string;
|
|
36
|
-
lastActiveTimestamp: number;
|
|
37
|
-
};
|
|
38
|
-
declare function getSession(): Session;
|
|
39
|
-
declare function resetSession(): Session;
|
|
40
34
|
declare const config: Config;
|
|
41
35
|
declare function setupAnalytics(init: Options): void;
|
|
42
36
|
|
|
43
|
-
export { type Options, type Storage, cache, config,
|
|
37
|
+
export { type Options, type Storage, cache, config, setupAnalytics };
|
package/dist/setup/index.mjs
CHANGED
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
// src/setup/index.ts
|
|
2
|
-
import { v7 as uuidv7 } from "uuid";
|
|
3
2
|
var cache = {
|
|
4
3
|
tags: null,
|
|
5
4
|
visitor: null
|
|
6
5
|
};
|
|
7
|
-
var session = { id: uuidv7(), lastActiveTimestamp: Date.now() };
|
|
8
|
-
function getSession() {
|
|
9
|
-
return session;
|
|
10
|
-
}
|
|
11
|
-
function resetSession() {
|
|
12
|
-
session.id = uuidv7();
|
|
13
|
-
session.lastActiveTimestamp = Date.now();
|
|
14
|
-
return session;
|
|
15
|
-
}
|
|
16
6
|
var config = {
|
|
17
7
|
endpoint: "",
|
|
18
8
|
release: "0.0.0",
|
|
@@ -42,8 +32,6 @@ function setupAnalytics(init) {
|
|
|
42
32
|
export {
|
|
43
33
|
cache,
|
|
44
34
|
config,
|
|
45
|
-
getSession,
|
|
46
|
-
resetSession,
|
|
47
35
|
setupAnalytics
|
|
48
36
|
};
|
|
49
37
|
//# sourceMappingURL=index.mjs.map
|
package/dist/setup/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/setup/index.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../src/setup/index.ts"],"sourcesContent":["import type { ThirdPartyTracker, TrackTags } from '../track/types';\nimport type { ThirdPartyUserSetter, Visitor } from '../visitor/types';\n\nexport interface Storage {\n getItem: (key: string) => string | null;\n setItem: (key: string, value: string) => 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 getHeaders?: () => Record<string, string> | Promise<Record<string, string>>;\n thirdPartyTrackers?: ThirdPartyTracker[];\n thirdPartyUserSetters?: ThirdPartyUserSetter[];\n}\n\ninterface Config {\n release: string;\n endpoint: string;\n storage: Storage;\n getTags: () => TrackTags | Promise<TrackTags>;\n getDeviceId: () => string | Promise<string>;\n getHeaders: () => Record<string, string> | Promise<Record<string, string>>;\n thirdPartyTrackers: ThirdPartyTracker[];\n thirdPartyUserSetters: ThirdPartyUserSetter[];\n}\n\ninterface Cache {\n tags: TrackTags | null;\n visitor: Visitor | null;\n}\n\nexport const cache: Cache = {\n tags: null,\n visitor: null,\n};\n\nexport const config: Config = {\n endpoint: '',\n release: '0.0.0',\n storage: null!,\n getTags: null!,\n getDeviceId: null!,\n getHeaders: null!,\n thirdPartyTrackers: [],\n thirdPartyUserSetters: [],\n};\n\nexport function setupAnalytics(init: Options) {\n config.release = init.release;\n config.storage = init.storage;\n config.endpoint = init.endpoint.endsWith('/') ? init.endpoint.slice(0, -1) : init.endpoint;\n config.getTags = init.getTags;\n config.getDeviceId = init.getDeviceId;\n config.getHeaders = async () => ({\n 'Content-Type': 'application/json',\n ...(await init.getHeaders?.()),\n });\n config.thirdPartyTrackers = init.thirdPartyTrackers ?? [];\n config.thirdPartyUserSetters = init.thirdPartyUserSetters ?? [];\n}\n"],"mappings":";AAmCO,IAAM,QAAe;AAAA,EAC1B,MAAM;AAAA,EACN,SAAS;AACX;AAEO,IAAM,SAAiB;AAAA,EAC5B,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,oBAAoB,CAAC;AAAA,EACrB,uBAAuB,CAAC;AAC1B;AAEO,SAAS,eAAe,MAAe;AAC5C,SAAO,UAAU,KAAK;AACtB,SAAO,UAAU,KAAK;AACtB,SAAO,WAAW,KAAK,SAAS,SAAS,GAAG,IAAI,KAAK,SAAS,MAAM,GAAG,EAAE,IAAI,KAAK;AAClF,SAAO,UAAU,KAAK;AACtB,SAAO,cAAc,KAAK;AAC1B,SAAO,aAAa,YAAS;AAzD/B;AAyDmC;AAAA,MAC/B,gBAAgB;AAAA,MAChB,GAAI,QAAM,UAAK,eAAL;AAAA,IACZ;AAAA;AACA,SAAO,qBAAqB,KAAK,sBAAsB,CAAC;AACxD,SAAO,wBAAwB,KAAK,yBAAyB,CAAC;AAChE;","names":[]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/setup/session.ts
|
|
21
|
+
var session_exports = {};
|
|
22
|
+
__export(session_exports, {
|
|
23
|
+
getCurrentSession: () => getCurrentSession,
|
|
24
|
+
isSessionExpired: () => isSessionExpired,
|
|
25
|
+
resetSession: () => resetSession,
|
|
26
|
+
updateSessionActiveTime: () => updateSessionActiveTime
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(session_exports);
|
|
29
|
+
var import_uuid = require("uuid");
|
|
30
|
+
var SESSION_TIMEOUT = 30 * 60 * 1e3;
|
|
31
|
+
var session = { id: (0, import_uuid.v7)(), lastActiveTime: Date.now() };
|
|
32
|
+
function updateSessionActiveTime() {
|
|
33
|
+
session.lastActiveTime = Date.now();
|
|
34
|
+
}
|
|
35
|
+
function resetSession() {
|
|
36
|
+
session.id = (0, import_uuid.v7)();
|
|
37
|
+
session.lastActiveTime = Date.now();
|
|
38
|
+
}
|
|
39
|
+
function getCurrentSession() {
|
|
40
|
+
return session;
|
|
41
|
+
}
|
|
42
|
+
function isSessionExpired() {
|
|
43
|
+
return Date.now() - session.lastActiveTime > SESSION_TIMEOUT;
|
|
44
|
+
}
|
|
45
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
46
|
+
0 && (module.exports = {
|
|
47
|
+
getCurrentSession,
|
|
48
|
+
isSessionExpired,
|
|
49
|
+
resetSession,
|
|
50
|
+
updateSessionActiveTime
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=session.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/setup/session.ts"],"sourcesContent":["import { v7 as uuidv7 } from 'uuid';\n\nexport type Session = { id: string; lastActiveTime: number };\n\nconst SESSION_TIMEOUT = 30 * 60 * 1000;\nconst session: Session = { id: uuidv7(), lastActiveTime: Date.now() };\n\nexport function updateSessionActiveTime() {\n session.lastActiveTime = Date.now();\n}\n\nexport function resetSession() {\n session.id = uuidv7();\n session.lastActiveTime = Date.now();\n}\n\nexport function getCurrentSession() {\n return session;\n}\n\nexport function isSessionExpired() {\n return Date.now() - session.lastActiveTime > SESSION_TIMEOUT;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA6B;AAI7B,IAAM,kBAAkB,KAAK,KAAK;AAClC,IAAM,UAAmB,EAAE,QAAI,YAAAA,IAAO,GAAG,gBAAgB,KAAK,IAAI,EAAE;AAE7D,SAAS,0BAA0B;AACxC,UAAQ,iBAAiB,KAAK,IAAI;AACpC;AAEO,SAAS,eAAe;AAC7B,UAAQ,SAAK,YAAAA,IAAO;AACpB,UAAQ,iBAAiB,KAAK,IAAI;AACpC;AAEO,SAAS,oBAAoB;AAClC,SAAO;AACT;AAEO,SAAS,mBAAmB;AACjC,SAAO,KAAK,IAAI,IAAI,QAAQ,iBAAiB;AAC/C;","names":["uuidv7"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type Session = {
|
|
2
|
+
id: string;
|
|
3
|
+
lastActiveTime: number;
|
|
4
|
+
};
|
|
5
|
+
declare function updateSessionActiveTime(): void;
|
|
6
|
+
declare function resetSession(): void;
|
|
7
|
+
declare function getCurrentSession(): Session;
|
|
8
|
+
declare function isSessionExpired(): boolean;
|
|
9
|
+
|
|
10
|
+
export { type Session, getCurrentSession, isSessionExpired, resetSession, updateSessionActiveTime };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type Session = {
|
|
2
|
+
id: string;
|
|
3
|
+
lastActiveTime: number;
|
|
4
|
+
};
|
|
5
|
+
declare function updateSessionActiveTime(): void;
|
|
6
|
+
declare function resetSession(): void;
|
|
7
|
+
declare function getCurrentSession(): Session;
|
|
8
|
+
declare function isSessionExpired(): boolean;
|
|
9
|
+
|
|
10
|
+
export { type Session, getCurrentSession, isSessionExpired, resetSession, updateSessionActiveTime };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// src/setup/session.ts
|
|
2
|
+
import { v7 as uuidv7 } from "uuid";
|
|
3
|
+
var SESSION_TIMEOUT = 30 * 60 * 1e3;
|
|
4
|
+
var session = { id: uuidv7(), lastActiveTime: Date.now() };
|
|
5
|
+
function updateSessionActiveTime() {
|
|
6
|
+
session.lastActiveTime = Date.now();
|
|
7
|
+
}
|
|
8
|
+
function resetSession() {
|
|
9
|
+
session.id = uuidv7();
|
|
10
|
+
session.lastActiveTime = Date.now();
|
|
11
|
+
}
|
|
12
|
+
function getCurrentSession() {
|
|
13
|
+
return session;
|
|
14
|
+
}
|
|
15
|
+
function isSessionExpired() {
|
|
16
|
+
return Date.now() - session.lastActiveTime > SESSION_TIMEOUT;
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
getCurrentSession,
|
|
20
|
+
isSessionExpired,
|
|
21
|
+
resetSession,
|
|
22
|
+
updateSessionActiveTime
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=session.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/setup/session.ts"],"sourcesContent":["import { v7 as uuidv7 } from 'uuid';\n\nexport type Session = { id: string; lastActiveTime: number };\n\nconst SESSION_TIMEOUT = 30 * 60 * 1000;\nconst session: Session = { id: uuidv7(), lastActiveTime: Date.now() };\n\nexport function updateSessionActiveTime() {\n session.lastActiveTime = Date.now();\n}\n\nexport function resetSession() {\n session.id = uuidv7();\n session.lastActiveTime = Date.now();\n}\n\nexport function getCurrentSession() {\n return session;\n}\n\nexport function isSessionExpired() {\n return Date.now() - session.lastActiveTime > SESSION_TIMEOUT;\n}\n"],"mappings":";AAAA,SAAS,MAAM,cAAc;AAI7B,IAAM,kBAAkB,KAAK,KAAK;AAClC,IAAM,UAAmB,EAAE,IAAI,OAAO,GAAG,gBAAgB,KAAK,IAAI,EAAE;AAE7D,SAAS,0BAA0B;AACxC,UAAQ,iBAAiB,KAAK,IAAI;AACpC;AAEO,SAAS,eAAe;AAC7B,UAAQ,KAAK,OAAO;AACpB,UAAQ,iBAAiB,KAAK,IAAI;AACpC;AAEO,SAAS,oBAAoB;AAClC,SAAO;AACT;AAEO,SAAS,mBAAmB;AACjC,SAAO,KAAK,IAAI,IAAI,QAAQ,iBAAiB;AAC/C;","names":[]}
|
package/dist/track/index.cjs
CHANGED
|
@@ -26,6 +26,7 @@ __export(track_exports, {
|
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(track_exports);
|
|
28
28
|
var import_setup = require("../setup/index.cjs");
|
|
29
|
+
var import_session = require("../setup/session.cjs");
|
|
29
30
|
var import_fetch = require("../utils/fetch.cjs");
|
|
30
31
|
var import_token_bucket = require("../utils/token-bucket.cjs");
|
|
31
32
|
var import_visitor = require("../visitor/index.cjs");
|
|
@@ -35,10 +36,21 @@ async function sendEvents(events) {
|
|
|
35
36
|
var _a;
|
|
36
37
|
try {
|
|
37
38
|
if (events.length === 0) return;
|
|
39
|
+
if ((0, import_session.isSessionExpired)()) {
|
|
40
|
+
(0, import_session.resetSession)();
|
|
41
|
+
events.unshift({
|
|
42
|
+
name: "session_start",
|
|
43
|
+
properties: {},
|
|
44
|
+
options: { enableThirdPartyTracking: false },
|
|
45
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
46
|
+
});
|
|
47
|
+
} else {
|
|
48
|
+
(0, import_session.updateSessionActiveTime)();
|
|
49
|
+
}
|
|
38
50
|
await tokenBucket.removeTokens();
|
|
39
51
|
const tags = await import_setup.config.getTags();
|
|
40
52
|
const visitor_id = (await (0, import_visitor.getVisitor)()).id;
|
|
41
|
-
const session = (0,
|
|
53
|
+
const session = (0, import_session.getCurrentSession)();
|
|
42
54
|
const dto = events.map((event) => ({
|
|
43
55
|
name: event.name,
|
|
44
56
|
properties: event.properties,
|
|
@@ -99,7 +111,8 @@ async function trackAsync(name, properties, options = defaultOptions) {
|
|
|
99
111
|
}
|
|
100
112
|
function sendBeacon(name, properties) {
|
|
101
113
|
if (!import_setup.cache.tags || !import_setup.cache.visitor) return;
|
|
102
|
-
|
|
114
|
+
(0, import_session.updateSessionActiveTime)();
|
|
115
|
+
const session = (0, import_session.getCurrentSession)();
|
|
103
116
|
const dto = [
|
|
104
117
|
{
|
|
105
118
|
name,
|
package/dist/track/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { cache, config
|
|
1
|
+
{"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { cache, config } from '../setup/index';\nimport {\n getCurrentSession,\n isSessionExpired,\n resetSession,\n updateSessionActiveTime,\n} from '../setup/session';\nimport { fetch } from '../utils/fetch';\nimport { TokenBucket } from '../utils/token-bucket';\nimport { getVisitor } from '../visitor/index';\nimport type {\n CreateTrackEventDTO,\n EventName,\n TrackEventResponse,\n TrackName,\n TrackProperties,\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 };\nconst tokenBucket = new TokenBucket({ rate: 1, capacity: 20, requested: 2 });\n\ntype Item = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n name: TrackName<any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-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\n if (isSessionExpired()) {\n resetSession();\n events.unshift({\n name: 'session_start',\n properties: {},\n options: { enableThirdPartyTracking: false },\n timestamp: new Date().toISOString(),\n });\n } else {\n updateSessionActiveTime();\n }\n\n await tokenBucket.removeTokens();\n\n const tags = await config.getTags();\n const visitor_id = (await getVisitor()).id;\n const session = getCurrentSession();\n const dto: CreateTrackEventDTO = events.map((event) => ({\n name: event.name,\n properties: event.properties,\n tags,\n visitor_id,\n session_id: session.id,\n timestamp: event.timestamp,\n }));\n\n const response = await fetch(`${config.endpoint}/events`, {\n method: 'POST',\n credentials: 'include',\n headers: await config.getHeaders(),\n body: JSON.stringify(dto),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to send track event: ${response.status} ${await response.text()}`);\n }\n\n const data = (await response.json()) as TrackEventResponse;\n\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(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\nexport function sendBeacon<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>\n) {\n if (!cache.tags || !cache.visitor) return;\n\n updateSessionActiveTime();\n const session = getCurrentSession();\n const dto: CreateTrackEventDTO<T> = [\n {\n name,\n properties,\n tags: cache.tags,\n visitor_id: cache.visitor.id,\n session_id: session.id,\n timestamp: new Date().toISOString(),\n },\n ];\n const blob = new Blob([JSON.stringify(dto)], { type: 'application/json' });\n navigator.sendBeacon(`${config.endpoint}/events`, blob);\n}\n"],"mappings":"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","names":["_a"]}
|
package/dist/track/index.mjs
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
// src/track/index.ts
|
|
2
|
-
import { cache, config
|
|
2
|
+
import { cache, config } from "../setup/index.mjs";
|
|
3
|
+
import {
|
|
4
|
+
getCurrentSession,
|
|
5
|
+
isSessionExpired,
|
|
6
|
+
resetSession,
|
|
7
|
+
updateSessionActiveTime
|
|
8
|
+
} from "../setup/session.mjs";
|
|
3
9
|
import { fetch } from "../utils/fetch.mjs";
|
|
4
10
|
import { TokenBucket } from "../utils/token-bucket.mjs";
|
|
5
11
|
import { getVisitor } from "../visitor/index.mjs";
|
|
@@ -9,10 +15,21 @@ async function sendEvents(events) {
|
|
|
9
15
|
var _a;
|
|
10
16
|
try {
|
|
11
17
|
if (events.length === 0) return;
|
|
18
|
+
if (isSessionExpired()) {
|
|
19
|
+
resetSession();
|
|
20
|
+
events.unshift({
|
|
21
|
+
name: "session_start",
|
|
22
|
+
properties: {},
|
|
23
|
+
options: { enableThirdPartyTracking: false },
|
|
24
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
25
|
+
});
|
|
26
|
+
} else {
|
|
27
|
+
updateSessionActiveTime();
|
|
28
|
+
}
|
|
12
29
|
await tokenBucket.removeTokens();
|
|
13
30
|
const tags = await config.getTags();
|
|
14
31
|
const visitor_id = (await getVisitor()).id;
|
|
15
|
-
const session =
|
|
32
|
+
const session = getCurrentSession();
|
|
16
33
|
const dto = events.map((event) => ({
|
|
17
34
|
name: event.name,
|
|
18
35
|
properties: event.properties,
|
|
@@ -73,7 +90,8 @@ async function trackAsync(name, properties, options = defaultOptions) {
|
|
|
73
90
|
}
|
|
74
91
|
function sendBeacon(name, properties) {
|
|
75
92
|
if (!cache.tags || !cache.visitor) return;
|
|
76
|
-
|
|
93
|
+
updateSessionActiveTime();
|
|
94
|
+
const session = getCurrentSession();
|
|
77
95
|
const dto = [
|
|
78
96
|
{
|
|
79
97
|
name,
|
package/dist/track/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { cache, config
|
|
1
|
+
{"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { cache, config } from '../setup/index';\nimport {\n getCurrentSession,\n isSessionExpired,\n resetSession,\n updateSessionActiveTime,\n} from '../setup/session';\nimport { fetch } from '../utils/fetch';\nimport { TokenBucket } from '../utils/token-bucket';\nimport { getVisitor } from '../visitor/index';\nimport type {\n CreateTrackEventDTO,\n EventName,\n TrackEventResponse,\n TrackName,\n TrackProperties,\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 };\nconst tokenBucket = new TokenBucket({ rate: 1, capacity: 20, requested: 2 });\n\ntype Item = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n name: TrackName<any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-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\n if (isSessionExpired()) {\n resetSession();\n events.unshift({\n name: 'session_start',\n properties: {},\n options: { enableThirdPartyTracking: false },\n timestamp: new Date().toISOString(),\n });\n } else {\n updateSessionActiveTime();\n }\n\n await tokenBucket.removeTokens();\n\n const tags = await config.getTags();\n const visitor_id = (await getVisitor()).id;\n const session = getCurrentSession();\n const dto: CreateTrackEventDTO = events.map((event) => ({\n name: event.name,\n properties: event.properties,\n tags,\n visitor_id,\n session_id: session.id,\n timestamp: event.timestamp,\n }));\n\n const response = await fetch(`${config.endpoint}/events`, {\n method: 'POST',\n credentials: 'include',\n headers: await config.getHeaders(),\n body: JSON.stringify(dto),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to send track event: ${response.status} ${await response.text()}`);\n }\n\n const data = (await response.json()) as TrackEventResponse;\n\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(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\nexport function sendBeacon<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>\n) {\n if (!cache.tags || !cache.visitor) return;\n\n updateSessionActiveTime();\n const session = getCurrentSession();\n const dto: CreateTrackEventDTO<T> = [\n {\n name,\n properties,\n tags: cache.tags,\n visitor_id: cache.visitor.id,\n session_id: session.id,\n timestamp: new Date().toISOString(),\n },\n ];\n const blob = new Blob([JSON.stringify(dto)], { type: 'application/json' });\n navigator.sendBeacon(`${config.endpoint}/events`, blob);\n}\n"],"mappings":"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","names":["_a"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shware/analytics",
|
|
3
|
-
"version": "2.15.
|
|
3
|
+
"version": "2.15.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -69,8 +69,8 @@
|
|
|
69
69
|
"@types/node": "^24.10.2",
|
|
70
70
|
"@types/react": "^19.2.7",
|
|
71
71
|
"typescript": "^5.9.3",
|
|
72
|
-
"@repo/
|
|
73
|
-
"@repo/
|
|
72
|
+
"@repo/eslint-config": "0.0.10",
|
|
73
|
+
"@repo/typescript-config": "0.0.0"
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
76
|
"@react-native-firebase/analytics": "^23.3.1",
|