trodo-node 1.0.0
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/README.md +192 -0
- package/dist/cjs/TrodoClient.js +113 -0
- package/dist/cjs/TrodoClient.js.map +1 -0
- package/dist/cjs/UserContext.js +166 -0
- package/dist/cjs/UserContext.js.map +1 -0
- package/dist/cjs/api/ApiClient.js +144 -0
- package/dist/cjs/api/ApiClient.js.map +1 -0
- package/dist/cjs/api/endpoints.js +26 -0
- package/dist/cjs/api/endpoints.js.map +1 -0
- package/dist/cjs/auto/AutoEventManager.js +70 -0
- package/dist/cjs/auto/AutoEventManager.js.map +1 -0
- package/dist/cjs/index.js +141 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/managers/GroupManager.js +84 -0
- package/dist/cjs/managers/GroupManager.js.map +1 -0
- package/dist/cjs/managers/PeopleManager.js +75 -0
- package/dist/cjs/managers/PeopleManager.js.map +1 -0
- package/dist/cjs/queue/BatchFlusher.js +35 -0
- package/dist/cjs/queue/BatchFlusher.js.map +1 -0
- package/dist/cjs/queue/EventQueue.js +27 -0
- package/dist/cjs/queue/EventQueue.js.map +1 -0
- package/dist/cjs/session/ServerSession.js +113 -0
- package/dist/cjs/session/ServerSession.js.map +1 -0
- package/dist/cjs/session/SessionManager.js +54 -0
- package/dist/cjs/session/SessionManager.js.map +1 -0
- package/dist/cjs/types/index.js +6 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/esm/TrodoClient.d.ts +39 -0
- package/dist/esm/TrodoClient.d.ts.map +1 -0
- package/dist/esm/TrodoClient.js +109 -0
- package/dist/esm/TrodoClient.js.map +1 -0
- package/dist/esm/UserContext.d.ts +40 -0
- package/dist/esm/UserContext.d.ts.map +1 -0
- package/dist/esm/UserContext.js +162 -0
- package/dist/esm/UserContext.js.map +1 -0
- package/dist/esm/api/ApiClient.d.ts +40 -0
- package/dist/esm/api/ApiClient.d.ts.map +1 -0
- package/dist/esm/api/ApiClient.js +107 -0
- package/dist/esm/api/ApiClient.js.map +1 -0
- package/dist/esm/api/endpoints.d.ts +24 -0
- package/dist/esm/api/endpoints.d.ts.map +1 -0
- package/dist/esm/api/endpoints.js +23 -0
- package/dist/esm/api/endpoints.js.map +1 -0
- package/dist/esm/auto/AutoEventManager.d.ts +16 -0
- package/dist/esm/auto/AutoEventManager.d.ts.map +1 -0
- package/dist/esm/auto/AutoEventManager.js +66 -0
- package/dist/esm/auto/AutoEventManager.js.map +1 -0
- package/dist/esm/index.d.ts +81 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +108 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/managers/GroupManager.d.ts +14 -0
- package/dist/esm/managers/GroupManager.d.ts.map +1 -0
- package/dist/esm/managers/GroupManager.js +80 -0
- package/dist/esm/managers/GroupManager.js.map +1 -0
- package/dist/esm/managers/PeopleManager.d.ts +20 -0
- package/dist/esm/managers/PeopleManager.d.ts.map +1 -0
- package/dist/esm/managers/PeopleManager.js +71 -0
- package/dist/esm/managers/PeopleManager.js.map +1 -0
- package/dist/esm/queue/BatchFlusher.d.ts +13 -0
- package/dist/esm/queue/BatchFlusher.d.ts.map +1 -0
- package/dist/esm/queue/BatchFlusher.js +31 -0
- package/dist/esm/queue/BatchFlusher.js.map +1 -0
- package/dist/esm/queue/EventQueue.d.ts +14 -0
- package/dist/esm/queue/EventQueue.d.ts.map +1 -0
- package/dist/esm/queue/EventQueue.js +23 -0
- package/dist/esm/queue/EventQueue.js.map +1 -0
- package/dist/esm/session/ServerSession.d.ts +6 -0
- package/dist/esm/session/ServerSession.d.ts.map +1 -0
- package/dist/esm/session/ServerSession.js +74 -0
- package/dist/esm/session/ServerSession.js.map +1 -0
- package/dist/esm/session/SessionManager.d.ts +12 -0
- package/dist/esm/session/SessionManager.d.ts.map +1 -0
- package/dist/esm/session/SessionManager.js +50 -0
- package/dist/esm/session/SessionManager.js.map +1 -0
- package/dist/esm/types/index.d.ts +110 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +5 -0
- package/dist/esm/types/index.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
let _cryptoModule = null;
|
|
2
|
+
async function getCrypto() {
|
|
3
|
+
if (_cryptoModule)
|
|
4
|
+
return _cryptoModule;
|
|
5
|
+
if (typeof globalThis.crypto?.randomUUID === 'function') {
|
|
6
|
+
_cryptoModule = globalThis.crypto;
|
|
7
|
+
return _cryptoModule;
|
|
8
|
+
}
|
|
9
|
+
const nodeCrypto = await import('crypto');
|
|
10
|
+
_cryptoModule = nodeCrypto;
|
|
11
|
+
return _cryptoModule;
|
|
12
|
+
}
|
|
13
|
+
export async function generateUUID() {
|
|
14
|
+
const c = await getCrypto();
|
|
15
|
+
return c.randomUUID();
|
|
16
|
+
}
|
|
17
|
+
export function nowIso() {
|
|
18
|
+
return new Date().toISOString();
|
|
19
|
+
}
|
|
20
|
+
export async function createServerSession(siteId, distinctId, sessionId) {
|
|
21
|
+
return {
|
|
22
|
+
sessionId: sessionId ?? (await generateUUID()),
|
|
23
|
+
siteId,
|
|
24
|
+
distinctId,
|
|
25
|
+
startTime: nowIso(),
|
|
26
|
+
lastActivity: Date.now(),
|
|
27
|
+
confirmed: false,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export function buildSessionPayload(session) {
|
|
31
|
+
return {
|
|
32
|
+
session_id: session.sessionId,
|
|
33
|
+
site_id: session.siteId,
|
|
34
|
+
user_id: session.distinctId,
|
|
35
|
+
distinct_id: session.distinctId,
|
|
36
|
+
team_id: null,
|
|
37
|
+
start_time: session.startTime,
|
|
38
|
+
end_time: null,
|
|
39
|
+
last_activity: session.lastActivity,
|
|
40
|
+
duration: 0,
|
|
41
|
+
pages_viewed: 0,
|
|
42
|
+
is_bounce: false,
|
|
43
|
+
previous_session_id: null,
|
|
44
|
+
time_since_last_session: null,
|
|
45
|
+
entry_page: null,
|
|
46
|
+
exit_page: null,
|
|
47
|
+
referrer: 'server',
|
|
48
|
+
ip_address: null,
|
|
49
|
+
city: null,
|
|
50
|
+
region: null,
|
|
51
|
+
country: null,
|
|
52
|
+
browser_name: null,
|
|
53
|
+
browser_version: null,
|
|
54
|
+
device_type: 'server',
|
|
55
|
+
os: null,
|
|
56
|
+
resolution: null,
|
|
57
|
+
user_agent: null,
|
|
58
|
+
language: null,
|
|
59
|
+
wallet_address: null,
|
|
60
|
+
wallet_type: null,
|
|
61
|
+
chain_name: null,
|
|
62
|
+
is_web3_user: false,
|
|
63
|
+
wallet_connected: false,
|
|
64
|
+
utm_source: null,
|
|
65
|
+
utm_medium: null,
|
|
66
|
+
utm_campaign: null,
|
|
67
|
+
utm_term: null,
|
|
68
|
+
utm_content: null,
|
|
69
|
+
utm_id: null,
|
|
70
|
+
visited_pages: [],
|
|
71
|
+
active_time_ms: 0,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=ServerSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerSession.js","sourceRoot":"","sources":["../../../src/session/ServerSession.ts"],"names":[],"mappings":"AAEA,IAAI,aAAa,GAAyC,IAAI,CAAC;AAE/D,KAAK,UAAU,SAAS;IACtB,IAAI,aAAa;QAAE,OAAO,aAA6C,CAAC;IACxE,IAAI,OAAO,UAAU,CAAC,MAAM,EAAE,UAAU,KAAK,UAAU,EAAE,CAAC;QACxD,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC;QAClC,OAAO,aAA6C,CAAC;IACvD,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,aAAa,GAAG,UAAU,CAAC;IAC3B,OAAO,aAA6C,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;IAC5B,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAc,EACd,UAAkB,EAClB,SAAkB;IAElB,OAAO;QACL,SAAS,EAAE,SAAS,IAAI,CAAC,MAAM,YAAY,EAAE,CAAC;QAC9C,MAAM;QACN,UAAU;QACV,SAAS,EAAE,MAAM,EAAE;QACnB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;QACxB,SAAS,EAAE,KAAK;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAsB;IAEtB,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,OAAO,EAAE,OAAO,CAAC,UAAU;QAC3B,WAAW,EAAE,OAAO,CAAC,UAAU;QAC/B,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,OAAO,CAAC,YAAY;QACnC,QAAQ,EAAE,CAAC;QACX,YAAY,EAAE,CAAC;QACf,SAAS,EAAE,KAAK;QAChB,mBAAmB,EAAE,IAAI;QACzB,uBAAuB,EAAE,IAAI;QAC7B,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,QAAQ;QAClB,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,IAAI;QACrB,WAAW,EAAE,QAAQ;QACrB,EAAE,EAAE,IAAI;QACR,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,IAAI;QACpB,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,KAAK;QACnB,gBAAgB,EAAE,KAAK;QACvB,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,EAAE;QACjB,cAAc,EAAE,CAAC;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ServerSession, ForUserOptions } from '../types/index.js';
|
|
2
|
+
import type { ApiClient } from '../api/ApiClient.js';
|
|
3
|
+
export declare class SessionManager {
|
|
4
|
+
private readonly sessions;
|
|
5
|
+
private readonly pendingConfirmations;
|
|
6
|
+
getOrCreate(distinctId: string, siteId: string, options?: ForUserOptions): Promise<ServerSession>;
|
|
7
|
+
ensureConfirmed(session: ServerSession, apiClient: ApiClient): Promise<void>;
|
|
8
|
+
update(distinctId: string, patch: Partial<ServerSession>): void;
|
|
9
|
+
invalidate(distinctId: string): void;
|
|
10
|
+
getGlobalSession(siteId: string): Promise<ServerSession>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=SessionManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../../../src/session/SessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAoC;IAEnE,WAAW,CACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,aAAa,CAAC;IAcnB,eAAe,CACnB,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC;IAuBhB,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAK/D,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKpC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAGzD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { createServerSession, buildSessionPayload, } from './ServerSession.js';
|
|
2
|
+
export class SessionManager {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.sessions = new Map();
|
|
5
|
+
this.pendingConfirmations = new Map();
|
|
6
|
+
}
|
|
7
|
+
async getOrCreate(distinctId, siteId, options) {
|
|
8
|
+
const key = distinctId;
|
|
9
|
+
const existing = this.sessions.get(key);
|
|
10
|
+
if (existing)
|
|
11
|
+
return existing;
|
|
12
|
+
const session = await createServerSession(siteId, distinctId, options?.sessionId);
|
|
13
|
+
this.sessions.set(key, session);
|
|
14
|
+
return session;
|
|
15
|
+
}
|
|
16
|
+
async ensureConfirmed(session, apiClient) {
|
|
17
|
+
if (session.confirmed)
|
|
18
|
+
return;
|
|
19
|
+
const key = session.distinctId;
|
|
20
|
+
const pending = this.pendingConfirmations.get(key);
|
|
21
|
+
if (pending)
|
|
22
|
+
return pending;
|
|
23
|
+
const promise = apiClient
|
|
24
|
+
.postTrack(buildSessionPayload(session))
|
|
25
|
+
.then(() => {
|
|
26
|
+
session.confirmed = true;
|
|
27
|
+
this.pendingConfirmations.delete(key);
|
|
28
|
+
})
|
|
29
|
+
.catch(() => {
|
|
30
|
+
// Silently ignore — session confirmation failure should not block events
|
|
31
|
+
session.confirmed = true;
|
|
32
|
+
this.pendingConfirmations.delete(key);
|
|
33
|
+
});
|
|
34
|
+
this.pendingConfirmations.set(key, promise);
|
|
35
|
+
return promise;
|
|
36
|
+
}
|
|
37
|
+
update(distinctId, patch) {
|
|
38
|
+
const session = this.sessions.get(distinctId);
|
|
39
|
+
if (session)
|
|
40
|
+
Object.assign(session, patch);
|
|
41
|
+
}
|
|
42
|
+
invalidate(distinctId) {
|
|
43
|
+
this.sessions.delete(distinctId);
|
|
44
|
+
this.pendingConfirmations.delete(distinctId);
|
|
45
|
+
}
|
|
46
|
+
getGlobalSession(siteId) {
|
|
47
|
+
return this.getOrCreate('server_global', siteId);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=SessionManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/session/SessionManager.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAG5B,MAAM,OAAO,cAAc;IAA3B;QACmB,aAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC5C,yBAAoB,GAAG,IAAI,GAAG,EAAyB,CAAC;IA2D3E,CAAC;IAzDC,KAAK,CAAC,WAAW,CACf,UAAkB,EAClB,MAAc,EACd,OAAwB;QAExB,MAAM,GAAG,GAAG,UAAU,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,MAAM,OAAO,GAAG,MAAM,mBAAmB,CACvC,MAAM,EACN,UAAU,EACV,OAAO,EAAE,SAAS,CACnB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,OAAsB,EACtB,SAAoB;QAEpB,IAAI,OAAO,CAAC,SAAS;YAAE,OAAO;QAE9B,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAE5B,MAAM,OAAO,GAAG,SAAS;aACtB,SAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;aACvC,IAAI,CAAC,GAAG,EAAE;YACT,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,yEAAyE;YACzE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,UAAkB,EAAE,KAA6B;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,OAAO;YAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,UAAU,CAAC,UAAkB;QAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,gBAAgB,CAAC,MAAc;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;CACF"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
export interface TrodoConfig {
|
|
2
|
+
/** Your Trodo site ID (same as used in the frontend SDK) */
|
|
3
|
+
siteId: string;
|
|
4
|
+
/** API base URL. Default: 'https://sdkapi.trodo.ai' */
|
|
5
|
+
apiBase?: string;
|
|
6
|
+
/** HTTP request timeout in ms. Default: 10000 */
|
|
7
|
+
timeout?: number;
|
|
8
|
+
/** Number of retries on network/5xx errors. Default: 2 */
|
|
9
|
+
retries?: number;
|
|
10
|
+
/** Enable event batching. Default: false */
|
|
11
|
+
batchEnabled?: boolean;
|
|
12
|
+
/** Flush batch when this many events are queued. Default: 50 */
|
|
13
|
+
batchSize?: number;
|
|
14
|
+
/** Flush batch every N ms. Default: 5000 */
|
|
15
|
+
batchFlushIntervalMs?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Enable auto events (backend: unhandled exception/rejection tracking).
|
|
18
|
+
* Default: false
|
|
19
|
+
*/
|
|
20
|
+
autoEvents?: boolean;
|
|
21
|
+
/** Called on any API error (instead of silent failure). */
|
|
22
|
+
onError?: (error: Error) => void;
|
|
23
|
+
/** Log API calls and errors to stderr. Default: false */
|
|
24
|
+
debug?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface ForUserOptions {
|
|
27
|
+
/**
|
|
28
|
+
* Explicit session ID to use. Pass a frontend session ID (from cookie/header)
|
|
29
|
+
* to correlate backend events with the same browser session.
|
|
30
|
+
*/
|
|
31
|
+
sessionId?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Override the distinctId. By default forUser(distinctId) uses the provided
|
|
34
|
+
* value directly. This option lets you supply a pre-computed value.
|
|
35
|
+
*/
|
|
36
|
+
distinctId?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface ServerSession {
|
|
39
|
+
sessionId: string;
|
|
40
|
+
siteId: string;
|
|
41
|
+
distinctId: string;
|
|
42
|
+
startTime: string;
|
|
43
|
+
lastActivity: number;
|
|
44
|
+
confirmed: boolean;
|
|
45
|
+
}
|
|
46
|
+
export interface TrackOptions {
|
|
47
|
+
/** event_category. Default: 'custom' */
|
|
48
|
+
category?: string;
|
|
49
|
+
/** ISO 8601 timestamp. Default: now */
|
|
50
|
+
timestamp?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface EventPayload {
|
|
53
|
+
event_type: 'custom' | 'auto';
|
|
54
|
+
event_name: string;
|
|
55
|
+
event_category: string;
|
|
56
|
+
session_id: string;
|
|
57
|
+
user_id: string;
|
|
58
|
+
custom_properties?: Record<string, unknown>;
|
|
59
|
+
page_data?: null;
|
|
60
|
+
auto_event_data?: Record<string, unknown> | null;
|
|
61
|
+
element_data?: null;
|
|
62
|
+
override_data?: null;
|
|
63
|
+
}
|
|
64
|
+
export interface IdentifyResult {
|
|
65
|
+
success: boolean;
|
|
66
|
+
merged?: boolean;
|
|
67
|
+
newUserId?: string;
|
|
68
|
+
distinctId?: string;
|
|
69
|
+
newDistinctId?: string;
|
|
70
|
+
error?: string;
|
|
71
|
+
}
|
|
72
|
+
export interface WalletAddressResult {
|
|
73
|
+
success: boolean;
|
|
74
|
+
merged?: boolean;
|
|
75
|
+
newUserId?: string;
|
|
76
|
+
error?: string;
|
|
77
|
+
}
|
|
78
|
+
export interface ResetResult {
|
|
79
|
+
success: boolean;
|
|
80
|
+
distinctId?: string;
|
|
81
|
+
error?: string;
|
|
82
|
+
}
|
|
83
|
+
export interface PeopleInterface {
|
|
84
|
+
set(properties: Record<string, unknown>): Promise<ApiResult>;
|
|
85
|
+
setOnce(properties: Record<string, unknown>): Promise<ApiResult>;
|
|
86
|
+
unset(keys: string | string[]): Promise<ApiResult>;
|
|
87
|
+
increment(key: string, amount?: number): Promise<ApiResult>;
|
|
88
|
+
append(key: string, values: unknown[]): Promise<ApiResult>;
|
|
89
|
+
union(key: string, values: unknown[]): Promise<ApiResult>;
|
|
90
|
+
remove(key: string, values: unknown[]): Promise<ApiResult>;
|
|
91
|
+
trackCharge(amount: number, properties?: Record<string, unknown>): Promise<ApiResult>;
|
|
92
|
+
clearCharges(): Promise<ApiResult>;
|
|
93
|
+
deleteUser(): Promise<ApiResult>;
|
|
94
|
+
}
|
|
95
|
+
export interface GroupProfile {
|
|
96
|
+
set(properties: Record<string, unknown>): Promise<ApiResult>;
|
|
97
|
+
set_once(properties: Record<string, unknown>): Promise<ApiResult>;
|
|
98
|
+
union(listName: string, values: unknown[]): Promise<ApiResult>;
|
|
99
|
+
remove(listName: string, value: unknown): Promise<ApiResult>;
|
|
100
|
+
unset(property: string): Promise<ApiResult>;
|
|
101
|
+
increment(property: string, value?: number): Promise<ApiResult>;
|
|
102
|
+
append(property: string, value: unknown): Promise<ApiResult>;
|
|
103
|
+
delete(): Promise<ApiResult>;
|
|
104
|
+
}
|
|
105
|
+
export interface ApiResult {
|
|
106
|
+
success?: boolean;
|
|
107
|
+
error?: string;
|
|
108
|
+
[key: string]: unknown;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E"}
|
package/package.json
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "trodo-node",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Trodo Analytics SDK for Node.js — server-side event tracking",
|
|
5
|
+
"main": "dist/cjs/index.js",
|
|
6
|
+
"module": "dist/esm/index.js",
|
|
7
|
+
"types": "dist/types/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/esm/index.js",
|
|
11
|
+
"require": "./dist/cjs/index.js",
|
|
12
|
+
"types": "./dist/types/index.d.ts"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "npm run build:esm && npm run build:cjs",
|
|
21
|
+
"build:esm": "tsc -p tsconfig.json",
|
|
22
|
+
"build:cjs": "tsc -p tsconfig.cjs.json",
|
|
23
|
+
"test": "jest",
|
|
24
|
+
"test:coverage": "jest --coverage",
|
|
25
|
+
"lint": "eslint src/**/*.ts",
|
|
26
|
+
"prepublishOnly": "npm run build"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"analytics",
|
|
30
|
+
"tracking",
|
|
31
|
+
"trodo",
|
|
32
|
+
"server-side",
|
|
33
|
+
"nodejs"
|
|
34
|
+
],
|
|
35
|
+
"license": "ISC",
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=16.0.0"
|
|
38
|
+
},
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"node-fetch": "^3.0.0"
|
|
41
|
+
},
|
|
42
|
+
"peerDependenciesMeta": {
|
|
43
|
+
"node-fetch": {
|
|
44
|
+
"optional": true
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/jest": "^29.5.12",
|
|
49
|
+
"@types/node": "^20.12.7",
|
|
50
|
+
"@typescript-eslint/eslint-plugin": "^7.7.1",
|
|
51
|
+
"@typescript-eslint/parser": "^7.7.1",
|
|
52
|
+
"eslint": "^8.57.0",
|
|
53
|
+
"jest": "^29.7.0",
|
|
54
|
+
"nock": "^13.5.4",
|
|
55
|
+
"ts-jest": "^29.1.2",
|
|
56
|
+
"typescript": "^5.4.5"
|
|
57
|
+
},
|
|
58
|
+
"jest": {
|
|
59
|
+
"preset": "ts-jest",
|
|
60
|
+
"testEnvironment": "node",
|
|
61
|
+
"testMatch": [
|
|
62
|
+
"**/tests/**/*.test.ts"
|
|
63
|
+
],
|
|
64
|
+
"collectCoverageFrom": [
|
|
65
|
+
"src/**/*.ts"
|
|
66
|
+
],
|
|
67
|
+
"moduleNameMapper": {
|
|
68
|
+
"^(\\.{1,2}/.*)\\.js$": "$1"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|