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.
Files changed (80) hide show
  1. package/README.md +192 -0
  2. package/dist/cjs/TrodoClient.js +113 -0
  3. package/dist/cjs/TrodoClient.js.map +1 -0
  4. package/dist/cjs/UserContext.js +166 -0
  5. package/dist/cjs/UserContext.js.map +1 -0
  6. package/dist/cjs/api/ApiClient.js +144 -0
  7. package/dist/cjs/api/ApiClient.js.map +1 -0
  8. package/dist/cjs/api/endpoints.js +26 -0
  9. package/dist/cjs/api/endpoints.js.map +1 -0
  10. package/dist/cjs/auto/AutoEventManager.js +70 -0
  11. package/dist/cjs/auto/AutoEventManager.js.map +1 -0
  12. package/dist/cjs/index.js +141 -0
  13. package/dist/cjs/index.js.map +1 -0
  14. package/dist/cjs/managers/GroupManager.js +84 -0
  15. package/dist/cjs/managers/GroupManager.js.map +1 -0
  16. package/dist/cjs/managers/PeopleManager.js +75 -0
  17. package/dist/cjs/managers/PeopleManager.js.map +1 -0
  18. package/dist/cjs/queue/BatchFlusher.js +35 -0
  19. package/dist/cjs/queue/BatchFlusher.js.map +1 -0
  20. package/dist/cjs/queue/EventQueue.js +27 -0
  21. package/dist/cjs/queue/EventQueue.js.map +1 -0
  22. package/dist/cjs/session/ServerSession.js +113 -0
  23. package/dist/cjs/session/ServerSession.js.map +1 -0
  24. package/dist/cjs/session/SessionManager.js +54 -0
  25. package/dist/cjs/session/SessionManager.js.map +1 -0
  26. package/dist/cjs/types/index.js +6 -0
  27. package/dist/cjs/types/index.js.map +1 -0
  28. package/dist/esm/TrodoClient.d.ts +39 -0
  29. package/dist/esm/TrodoClient.d.ts.map +1 -0
  30. package/dist/esm/TrodoClient.js +109 -0
  31. package/dist/esm/TrodoClient.js.map +1 -0
  32. package/dist/esm/UserContext.d.ts +40 -0
  33. package/dist/esm/UserContext.d.ts.map +1 -0
  34. package/dist/esm/UserContext.js +162 -0
  35. package/dist/esm/UserContext.js.map +1 -0
  36. package/dist/esm/api/ApiClient.d.ts +40 -0
  37. package/dist/esm/api/ApiClient.d.ts.map +1 -0
  38. package/dist/esm/api/ApiClient.js +107 -0
  39. package/dist/esm/api/ApiClient.js.map +1 -0
  40. package/dist/esm/api/endpoints.d.ts +24 -0
  41. package/dist/esm/api/endpoints.d.ts.map +1 -0
  42. package/dist/esm/api/endpoints.js +23 -0
  43. package/dist/esm/api/endpoints.js.map +1 -0
  44. package/dist/esm/auto/AutoEventManager.d.ts +16 -0
  45. package/dist/esm/auto/AutoEventManager.d.ts.map +1 -0
  46. package/dist/esm/auto/AutoEventManager.js +66 -0
  47. package/dist/esm/auto/AutoEventManager.js.map +1 -0
  48. package/dist/esm/index.d.ts +81 -0
  49. package/dist/esm/index.d.ts.map +1 -0
  50. package/dist/esm/index.js +108 -0
  51. package/dist/esm/index.js.map +1 -0
  52. package/dist/esm/managers/GroupManager.d.ts +14 -0
  53. package/dist/esm/managers/GroupManager.d.ts.map +1 -0
  54. package/dist/esm/managers/GroupManager.js +80 -0
  55. package/dist/esm/managers/GroupManager.js.map +1 -0
  56. package/dist/esm/managers/PeopleManager.d.ts +20 -0
  57. package/dist/esm/managers/PeopleManager.d.ts.map +1 -0
  58. package/dist/esm/managers/PeopleManager.js +71 -0
  59. package/dist/esm/managers/PeopleManager.js.map +1 -0
  60. package/dist/esm/queue/BatchFlusher.d.ts +13 -0
  61. package/dist/esm/queue/BatchFlusher.d.ts.map +1 -0
  62. package/dist/esm/queue/BatchFlusher.js +31 -0
  63. package/dist/esm/queue/BatchFlusher.js.map +1 -0
  64. package/dist/esm/queue/EventQueue.d.ts +14 -0
  65. package/dist/esm/queue/EventQueue.d.ts.map +1 -0
  66. package/dist/esm/queue/EventQueue.js +23 -0
  67. package/dist/esm/queue/EventQueue.js.map +1 -0
  68. package/dist/esm/session/ServerSession.d.ts +6 -0
  69. package/dist/esm/session/ServerSession.d.ts.map +1 -0
  70. package/dist/esm/session/ServerSession.js +74 -0
  71. package/dist/esm/session/ServerSession.js.map +1 -0
  72. package/dist/esm/session/SessionManager.d.ts +12 -0
  73. package/dist/esm/session/SessionManager.d.ts.map +1 -0
  74. package/dist/esm/session/SessionManager.js +50 -0
  75. package/dist/esm/session/SessionManager.js.map +1 -0
  76. package/dist/esm/types/index.d.ts +110 -0
  77. package/dist/esm/types/index.d.ts.map +1 -0
  78. package/dist/esm/types/index.js +5 -0
  79. package/dist/esm/types/index.js.map +1 -0
  80. package/package.json +71 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../../src/api/endpoints.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG;IACvB,KAAK,EAAiB,gBAAgB;IACtC,MAAM,EAAgB,aAAa;IACnC,WAAW,EAAW,kBAAkB;IACxC,QAAQ,EAAc,mBAAmB;IACzC,cAAc,EAAQ,yBAAyB;IAC/C,KAAK,EAAiB,gBAAgB;IACtC,UAAU,EAAY,qBAAqB;IAC3C,eAAe,EAAO,0BAA0B;IAChD,YAAY,EAAU,uBAAuB;IAC7C,gBAAgB,EAAM,2BAA2B;IACjD,aAAa,EAAS,wBAAwB;IAC9C,YAAY,EAAU,uBAAuB;IAC7C,aAAa,EAAS,wBAAwB;IAC9C,mBAAmB,EAAG,8BAA8B;IACpD,oBAAoB,EAAE,+BAA+B;IACrD,kBAAkB,EAAI,6BAA6B;IACnD,UAAU,EAAY,2BAA2B;IACjD,UAAU,EAAY,2BAA2B;IACjD,aAAa,EAAS,8BAA8B;IACpD,cAAc,EAAQ,yBAAyB;CACvC,CAAC"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AutoEventManager = void 0;
4
+ const ServerSession_js_1 = require("../session/ServerSession.js");
5
+ class AutoEventManager {
6
+ constructor(siteId, apiClient, sessionManager) {
7
+ this.enabled = false;
8
+ this._uncaughtHandler = null;
9
+ this._rejectionHandler = null;
10
+ this.siteId = siteId;
11
+ this.apiClient = apiClient;
12
+ this.sessionManager = sessionManager;
13
+ }
14
+ enable() {
15
+ if (this.enabled)
16
+ return;
17
+ this.enabled = true;
18
+ this._uncaughtHandler = (err) => {
19
+ void this.trackError(err, 'UncaughtException', 'critical');
20
+ };
21
+ this._rejectionHandler = (reason) => {
22
+ const err = reason instanceof Error ? reason : new Error(String(reason));
23
+ void this.trackError(err, 'UnhandledRejection', 'critical');
24
+ };
25
+ process.on('uncaughtException', this._uncaughtHandler);
26
+ process.on('unhandledRejection', this._rejectionHandler);
27
+ }
28
+ disable() {
29
+ if (!this.enabled)
30
+ return;
31
+ this.enabled = false;
32
+ if (this._uncaughtHandler) {
33
+ process.removeListener('uncaughtException', this._uncaughtHandler);
34
+ this._uncaughtHandler = null;
35
+ }
36
+ if (this._rejectionHandler) {
37
+ process.removeListener('unhandledRejection', this._rejectionHandler);
38
+ this._rejectionHandler = null;
39
+ }
40
+ }
41
+ isEnabled() {
42
+ return this.enabled;
43
+ }
44
+ async trackError(err, errorType, severity, distinctId = 'server_global') {
45
+ const session = await this.sessionManager.getOrCreate(distinctId, this.siteId);
46
+ await this.sessionManager.ensureConfirmed(session, this.apiClient);
47
+ const event = {
48
+ event_type: 'auto',
49
+ event_name: 'server_error',
50
+ event_category: 'error',
51
+ session_id: session.sessionId,
52
+ user_id: session.distinctId,
53
+ custom_properties: {
54
+ error_type: errorType,
55
+ message: err.message,
56
+ stack: err.stack ?? null,
57
+ runtime: 'nodejs',
58
+ severity,
59
+ timestamp: (0, ServerSession_js_1.nowIso)(),
60
+ },
61
+ page_data: null,
62
+ auto_event_data: null,
63
+ element_data: null,
64
+ override_data: null,
65
+ };
66
+ await this.apiClient.postEvent(event);
67
+ }
68
+ }
69
+ exports.AutoEventManager = AutoEventManager;
70
+ //# sourceMappingURL=AutoEventManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutoEventManager.js","sourceRoot":"","sources":["../../../src/auto/AutoEventManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ /**
3
+ * trodo-node — Trodo Analytics SDK for Node.js
4
+ *
5
+ * Usage (singleton):
6
+ * import trodo from 'trodo-node';
7
+ * trodo.init({ siteId: 'your-site-id' });
8
+ * const user = trodo.forUser('user-123');
9
+ * await user.track('purchase_completed', { amount: 99.99 });
10
+ *
11
+ * Usage (class):
12
+ * import { TrodoClient } from 'trodo-node';
13
+ * const client = new TrodoClient({ siteId: 'your-site-id' });
14
+ */
15
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ var desc = Object.getOwnPropertyDescriptor(m, k);
18
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
+ desc = { enumerable: true, get: function() { return m[k]; } };
20
+ }
21
+ Object.defineProperty(o, k2, desc);
22
+ }) : (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ o[k2] = m[k];
25
+ }));
26
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
27
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.people = exports.UserContext = exports.TrodoClient = void 0;
31
+ exports.init = init;
32
+ exports.forUser = forUser;
33
+ exports.track = track;
34
+ exports.identify = identify;
35
+ exports.walletAddress = walletAddress;
36
+ exports.reset = reset;
37
+ exports.set_group = set_group;
38
+ exports.add_group = add_group;
39
+ exports.remove_group = remove_group;
40
+ exports.get_group = get_group;
41
+ exports.enableAutoEvents = enableAutoEvents;
42
+ exports.disableAutoEvents = disableAutoEvents;
43
+ exports.flush = flush;
44
+ exports.shutdown = shutdown;
45
+ var TrodoClient_js_1 = require("./TrodoClient.js");
46
+ Object.defineProperty(exports, "TrodoClient", { enumerable: true, get: function () { return TrodoClient_js_1.TrodoClient; } });
47
+ var UserContext_js_1 = require("./UserContext.js");
48
+ Object.defineProperty(exports, "UserContext", { enumerable: true, get: function () { return UserContext_js_1.UserContext; } });
49
+ __exportStar(require("./types/index.js"), exports);
50
+ const TrodoClient_js_2 = require("./TrodoClient.js");
51
+ // ============================================================================
52
+ // Singleton convenience API
53
+ // ============================================================================
54
+ let _client = null;
55
+ function getClient() {
56
+ if (!_client) {
57
+ throw new Error('trodo-node: Call trodo.init({ siteId }) before using the SDK.');
58
+ }
59
+ return _client;
60
+ }
61
+ /** Initialise the singleton SDK instance. Returns the client for chaining. */
62
+ function init(config) {
63
+ _client = new TrodoClient_js_2.TrodoClient(config);
64
+ return _client;
65
+ }
66
+ /** Return a UserContext bound to the given distinctId. */
67
+ function forUser(distinctId, options) {
68
+ return getClient().forUser(distinctId, options);
69
+ }
70
+ /** Track an event for a user (direct-call pattern). */
71
+ async function track(distinctId, eventName, properties, options) {
72
+ return getClient().track(distinctId, eventName, properties, options);
73
+ }
74
+ /** Alias a user's distinctId to an external identifier. */
75
+ async function identify(distinctId, identifyId) {
76
+ return getClient().identify(distinctId, identifyId);
77
+ }
78
+ /** Associate a wallet address with a user. */
79
+ async function walletAddress(distinctId, walletAddr) {
80
+ return getClient().walletAddress(distinctId, walletAddr);
81
+ }
82
+ /** Reset a user's session. */
83
+ async function reset(distinctId) {
84
+ return getClient().reset(distinctId);
85
+ }
86
+ exports.people = {
87
+ set: (d, p) => getClient().people.set(d, p),
88
+ setOnce: (d, p) => getClient().people.setOnce(d, p),
89
+ unset: (d, k) => getClient().people.unset(d, k),
90
+ increment: (d, k, a) => getClient().people.increment(d, k, a),
91
+ append: (d, k, v) => getClient().people.append(d, k, v),
92
+ union: (d, k, v) => getClient().people.union(d, k, v),
93
+ remove: (d, k, v) => getClient().people.remove(d, k, v),
94
+ trackCharge: (d, a, p) => getClient().people.trackCharge(d, a, p),
95
+ clearCharges: (d) => getClient().people.clearCharges(d),
96
+ deleteUser: (d) => getClient().people.deleteUser(d),
97
+ };
98
+ function set_group(distinctId, groupKey, groupId) {
99
+ return getClient().set_group(distinctId, groupKey, groupId);
100
+ }
101
+ function add_group(distinctId, groupKey, groupId) {
102
+ return getClient().add_group(distinctId, groupKey, groupId);
103
+ }
104
+ function remove_group(distinctId, groupKey, groupId) {
105
+ return getClient().remove_group(distinctId, groupKey, groupId);
106
+ }
107
+ function get_group(distinctId, groupKey, groupId) {
108
+ return getClient().get_group(distinctId, groupKey, groupId);
109
+ }
110
+ function enableAutoEvents() {
111
+ getClient().enableAutoEvents();
112
+ }
113
+ function disableAutoEvents() {
114
+ getClient().disableAutoEvents();
115
+ }
116
+ async function flush() {
117
+ return getClient().flush();
118
+ }
119
+ async function shutdown() {
120
+ return getClient().shutdown();
121
+ }
122
+ // Default export: the singleton namespace (matches frontend SDK pattern)
123
+ const trodo = {
124
+ init,
125
+ forUser,
126
+ track,
127
+ identify,
128
+ walletAddress,
129
+ reset,
130
+ people: exports.people,
131
+ set_group,
132
+ add_group,
133
+ remove_group,
134
+ get_group,
135
+ enableAutoEvents,
136
+ disableAutoEvents,
137
+ flush,
138
+ shutdown,
139
+ };
140
+ exports.default = trodo;
141
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GroupManager = void 0;
4
+ const endpoints_js_1 = require("../api/endpoints.js");
5
+ class GroupProfileImpl {
6
+ constructor(apiClient, siteId, distinctId, groupKey, groupId) {
7
+ this.apiClient = apiClient;
8
+ this.siteId = siteId;
9
+ this.distinctId = distinctId;
10
+ this.groupKey = groupKey;
11
+ this.groupId = groupId;
12
+ }
13
+ base() {
14
+ return {
15
+ siteId: this.siteId,
16
+ userId: this.distinctId,
17
+ groupKey: this.groupKey,
18
+ groupId: this.groupId,
19
+ };
20
+ }
21
+ call(method, extra) {
22
+ return this.apiClient.postGroup(`${endpoints_js_1.ENDPOINTS.GROUPS_PROFILE}/${method}`, { ...this.base(), ...extra });
23
+ }
24
+ set(properties) {
25
+ return this.call('set', { properties });
26
+ }
27
+ set_once(properties) {
28
+ return this.call('set_once', { properties });
29
+ }
30
+ union(listName, values) {
31
+ return this.call('union', { listName, values });
32
+ }
33
+ remove(listName, value) {
34
+ return this.call('remove', { listName, value });
35
+ }
36
+ unset(property) {
37
+ return this.call('unset', { property });
38
+ }
39
+ increment(property, value = 1) {
40
+ return this.call('increment', { property, value });
41
+ }
42
+ append(property, value) {
43
+ return this.call('append', { property, value });
44
+ }
45
+ delete() {
46
+ return this.call('delete');
47
+ }
48
+ }
49
+ class GroupManager {
50
+ constructor(apiClient, siteId, getDistinctId) {
51
+ this.apiClient = apiClient;
52
+ this.siteId = siteId;
53
+ this.getDistinctId = getDistinctId;
54
+ }
55
+ base() {
56
+ return { siteId: this.siteId, userId: this.getDistinctId() };
57
+ }
58
+ async set_group(groupKey, groupId) {
59
+ return this.apiClient.postGroup(endpoints_js_1.ENDPOINTS.GROUPS_SET, {
60
+ ...this.base(),
61
+ groupKey,
62
+ groupId,
63
+ });
64
+ }
65
+ async add_group(groupKey, groupId) {
66
+ return this.apiClient.postGroup(endpoints_js_1.ENDPOINTS.GROUPS_ADD, {
67
+ ...this.base(),
68
+ groupKey,
69
+ groupId,
70
+ });
71
+ }
72
+ async remove_group(groupKey, groupId) {
73
+ return this.apiClient.postGroup(endpoints_js_1.ENDPOINTS.GROUPS_REMOVE, {
74
+ ...this.base(),
75
+ groupKey,
76
+ groupId,
77
+ });
78
+ }
79
+ get_group(groupKey, groupId) {
80
+ return new GroupProfileImpl(this.apiClient, this.siteId, this.getDistinctId(), groupKey, groupId);
81
+ }
82
+ }
83
+ exports.GroupManager = GroupManager;
84
+ //# sourceMappingURL=GroupManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupManager.js","sourceRoot":"","sources":["../../../src/managers/GroupManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PeopleManager = void 0;
4
+ const endpoints_js_1 = require("../api/endpoints.js");
5
+ class PeopleManager {
6
+ constructor(apiClient, siteId, getDistinctId) {
7
+ this.apiClient = apiClient;
8
+ this.siteId = siteId;
9
+ this.getDistinctId = getDistinctId;
10
+ }
11
+ base() {
12
+ return { siteId: this.siteId, userId: this.getDistinctId() };
13
+ }
14
+ async set(properties) {
15
+ return this.apiClient.postPeople(endpoints_js_1.ENDPOINTS.PEOPLE_SET, {
16
+ ...this.base(),
17
+ properties,
18
+ });
19
+ }
20
+ async setOnce(properties) {
21
+ return this.apiClient.postPeople(endpoints_js_1.ENDPOINTS.PEOPLE_SET_ONCE, {
22
+ ...this.base(),
23
+ properties,
24
+ });
25
+ }
26
+ async unset(keys) {
27
+ return this.apiClient.postPeople(endpoints_js_1.ENDPOINTS.PEOPLE_UNSET, {
28
+ ...this.base(),
29
+ keys: Array.isArray(keys) ? keys : [keys],
30
+ });
31
+ }
32
+ async increment(key, amount = 1) {
33
+ return this.apiClient.postPeople(endpoints_js_1.ENDPOINTS.PEOPLE_INCREMENT, {
34
+ ...this.base(),
35
+ key,
36
+ amount,
37
+ });
38
+ }
39
+ async append(key, values) {
40
+ return this.apiClient.postPeople(endpoints_js_1.ENDPOINTS.PEOPLE_APPEND, {
41
+ ...this.base(),
42
+ key,
43
+ values,
44
+ });
45
+ }
46
+ async union(key, values) {
47
+ return this.apiClient.postPeople(endpoints_js_1.ENDPOINTS.PEOPLE_UNION, {
48
+ ...this.base(),
49
+ key,
50
+ values,
51
+ });
52
+ }
53
+ async remove(key, values) {
54
+ return this.apiClient.postPeople(endpoints_js_1.ENDPOINTS.PEOPLE_REMOVE, {
55
+ ...this.base(),
56
+ key,
57
+ values,
58
+ });
59
+ }
60
+ async trackCharge(amount, properties) {
61
+ return this.apiClient.postPeople(endpoints_js_1.ENDPOINTS.PEOPLE_TRACK_CHARGE, {
62
+ ...this.base(),
63
+ amount,
64
+ properties: properties ?? {},
65
+ });
66
+ }
67
+ async clearCharges() {
68
+ return this.apiClient.postPeople(endpoints_js_1.ENDPOINTS.PEOPLE_CLEAR_CHARGES, this.base());
69
+ }
70
+ async deleteUser() {
71
+ return this.apiClient.postPeople(endpoints_js_1.ENDPOINTS.PEOPLE_DELETE_USER, this.base());
72
+ }
73
+ }
74
+ exports.PeopleManager = PeopleManager;
75
+ //# sourceMappingURL=PeopleManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PeopleManager.js","sourceRoot":"","sources":["../../../src/managers/PeopleManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BatchFlusher = void 0;
4
+ class BatchFlusher {
5
+ constructor(queue, apiClient, flushIntervalMs) {
6
+ this.queue = queue;
7
+ this.apiClient = apiClient;
8
+ this.flushIntervalMs = flushIntervalMs;
9
+ this.timer = null;
10
+ }
11
+ start() {
12
+ if (this.timer)
13
+ return;
14
+ this.timer = setInterval(() => {
15
+ void this.flush();
16
+ }, this.flushIntervalMs);
17
+ // Allow the Node.js process to exit even if the timer is active
18
+ if (this.timer.unref)
19
+ this.timer.unref();
20
+ }
21
+ stop() {
22
+ if (this.timer) {
23
+ clearInterval(this.timer);
24
+ this.timer = null;
25
+ }
26
+ }
27
+ async flush() {
28
+ const events = this.queue.drain();
29
+ if (events.length === 0)
30
+ return;
31
+ await this.apiClient.postBulkEvents(events);
32
+ }
33
+ }
34
+ exports.BatchFlusher = BatchFlusher;
35
+ //# sourceMappingURL=BatchFlusher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BatchFlusher.js","sourceRoot":"","sources":["../../../src/queue/BatchFlusher.ts"],"names":[],"mappings":";;;AAGA,MAAa,YAAY;IAGvB,YACmB,KAAiB,EACjB,SAAoB,EACpB,eAAuB;QAFvB,UAAK,GAAL,KAAK,CAAY;QACjB,cAAS,GAAT,SAAS,CAAW;QACpB,oBAAe,GAAf,eAAe,CAAQ;QALlC,UAAK,GAA0C,IAAI,CAAC;IAMzD,CAAC;IAEJ,KAAK;QACH,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACzB,gEAAgE;QAChE,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAChC,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;CACF;AA9BD,oCA8BC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventQueue = void 0;
4
+ class EventQueue {
5
+ constructor(maxSize) {
6
+ this.queue = [];
7
+ this.maxSize = maxSize;
8
+ }
9
+ /**
10
+ * Enqueue an event. Returns true if the flush threshold has been reached.
11
+ */
12
+ enqueue(event) {
13
+ this.queue.push(event);
14
+ return this.queue.length >= this.maxSize;
15
+ }
16
+ /** Atomically take all queued events and reset the queue. */
17
+ drain() {
18
+ const events = this.queue;
19
+ this.queue = [];
20
+ return events;
21
+ }
22
+ size() {
23
+ return this.queue.length;
24
+ }
25
+ }
26
+ exports.EventQueue = EventQueue;
27
+ //# sourceMappingURL=EventQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventQueue.js","sourceRoot":"","sources":["../../../src/queue/EventQueue.ts"],"names":[],"mappings":";;;AAEA,MAAa,UAAU;IAIrB,YAAY,OAAe;QAHnB,UAAK,GAAmB,EAAE,CAAC;QAIjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,KAAmB;QACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC;IAC3C,CAAC;IAED,6DAA6D;IAC7D,KAAK;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;CACF;AA1BD,gCA0BC"}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.generateUUID = generateUUID;
37
+ exports.nowIso = nowIso;
38
+ exports.createServerSession = createServerSession;
39
+ exports.buildSessionPayload = buildSessionPayload;
40
+ let _cryptoModule = null;
41
+ async function getCrypto() {
42
+ if (_cryptoModule)
43
+ return _cryptoModule;
44
+ if (typeof globalThis.crypto?.randomUUID === 'function') {
45
+ _cryptoModule = globalThis.crypto;
46
+ return _cryptoModule;
47
+ }
48
+ const nodeCrypto = await Promise.resolve().then(() => __importStar(require('crypto')));
49
+ _cryptoModule = nodeCrypto;
50
+ return _cryptoModule;
51
+ }
52
+ async function generateUUID() {
53
+ const c = await getCrypto();
54
+ return c.randomUUID();
55
+ }
56
+ function nowIso() {
57
+ return new Date().toISOString();
58
+ }
59
+ async function createServerSession(siteId, distinctId, sessionId) {
60
+ return {
61
+ sessionId: sessionId ?? (await generateUUID()),
62
+ siteId,
63
+ distinctId,
64
+ startTime: nowIso(),
65
+ lastActivity: Date.now(),
66
+ confirmed: false,
67
+ };
68
+ }
69
+ function buildSessionPayload(session) {
70
+ return {
71
+ session_id: session.sessionId,
72
+ site_id: session.siteId,
73
+ user_id: session.distinctId,
74
+ distinct_id: session.distinctId,
75
+ team_id: null,
76
+ start_time: session.startTime,
77
+ end_time: null,
78
+ last_activity: session.lastActivity,
79
+ duration: 0,
80
+ pages_viewed: 0,
81
+ is_bounce: false,
82
+ previous_session_id: null,
83
+ time_since_last_session: null,
84
+ entry_page: null,
85
+ exit_page: null,
86
+ referrer: 'server',
87
+ ip_address: null,
88
+ city: null,
89
+ region: null,
90
+ country: null,
91
+ browser_name: null,
92
+ browser_version: null,
93
+ device_type: 'server',
94
+ os: null,
95
+ resolution: null,
96
+ user_agent: null,
97
+ language: null,
98
+ wallet_address: null,
99
+ wallet_type: null,
100
+ chain_name: null,
101
+ is_web3_user: false,
102
+ wallet_connected: false,
103
+ utm_source: null,
104
+ utm_medium: null,
105
+ utm_campaign: null,
106
+ utm_term: null,
107
+ utm_content: null,
108
+ utm_id: null,
109
+ visited_pages: [],
110
+ active_time_ms: 0,
111
+ };
112
+ }
113
+ //# sourceMappingURL=ServerSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerSession.js","sourceRoot":"","sources":["../../../src/session/ServerSession.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,oCAGC;AAED,wBAEC;AAED,kDAaC;AAED,kDA6CC;AAlFD,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,wDAAa,QAAQ,GAAC,CAAC;IAC1C,aAAa,GAAG,UAAU,CAAC;IAC3B,OAAO,aAA6C,CAAC;AACvD,CAAC;AAEM,KAAK,UAAU,YAAY;IAChC,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;IAC5B,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;AACxB,CAAC;AAED,SAAgB,MAAM;IACpB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAEM,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,SAAgB,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,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionManager = void 0;
4
+ const ServerSession_js_1 = require("./ServerSession.js");
5
+ class SessionManager {
6
+ constructor() {
7
+ this.sessions = new Map();
8
+ this.pendingConfirmations = new Map();
9
+ }
10
+ async getOrCreate(distinctId, siteId, options) {
11
+ const key = distinctId;
12
+ const existing = this.sessions.get(key);
13
+ if (existing)
14
+ return existing;
15
+ const session = await (0, ServerSession_js_1.createServerSession)(siteId, distinctId, options?.sessionId);
16
+ this.sessions.set(key, session);
17
+ return session;
18
+ }
19
+ async ensureConfirmed(session, apiClient) {
20
+ if (session.confirmed)
21
+ return;
22
+ const key = session.distinctId;
23
+ const pending = this.pendingConfirmations.get(key);
24
+ if (pending)
25
+ return pending;
26
+ const promise = apiClient
27
+ .postTrack((0, ServerSession_js_1.buildSessionPayload)(session))
28
+ .then(() => {
29
+ session.confirmed = true;
30
+ this.pendingConfirmations.delete(key);
31
+ })
32
+ .catch(() => {
33
+ // Silently ignore — session confirmation failure should not block events
34
+ session.confirmed = true;
35
+ this.pendingConfirmations.delete(key);
36
+ });
37
+ this.pendingConfirmations.set(key, promise);
38
+ return promise;
39
+ }
40
+ update(distinctId, patch) {
41
+ const session = this.sessions.get(distinctId);
42
+ if (session)
43
+ Object.assign(session, patch);
44
+ }
45
+ invalidate(distinctId) {
46
+ this.sessions.delete(distinctId);
47
+ this.pendingConfirmations.delete(distinctId);
48
+ }
49
+ getGlobalSession(siteId) {
50
+ return this.getOrCreate('server_global', siteId);
51
+ }
52
+ }
53
+ exports.SessionManager = SessionManager;
54
+ //# sourceMappingURL=SessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/session/SessionManager.ts"],"names":[],"mappings":";;;AACA,yDAG4B;AAG5B,MAAa,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,IAAA,sCAAmB,EACvC,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,IAAA,sCAAmB,EAAC,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;AA7DD,wCA6DC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ // ============================================================================
3
+ // TRODO NODE SDK — TYPE DEFINITIONS
4
+ // ============================================================================
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=index.js.map
@@ -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"}