@tracelog/lib 0.5.4 → 0.6.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 (200) hide show
  1. package/README.md +157 -180
  2. package/dist/browser/tracelog.esm.js +1007 -1357
  3. package/dist/browser/tracelog.js +2 -2
  4. package/dist/cjs/api.d.ts +12 -2
  5. package/dist/cjs/api.js +63 -27
  6. package/dist/cjs/app.d.ts +2 -2
  7. package/dist/cjs/app.js +26 -32
  8. package/dist/cjs/constants/config.constants.d.ts +4 -2
  9. package/dist/cjs/constants/config.constants.js +6 -18
  10. package/dist/cjs/constants/index.d.ts +0 -1
  11. package/dist/cjs/constants/index.js +0 -1
  12. package/dist/cjs/constants/storage.constants.d.ts +3 -2
  13. package/dist/cjs/constants/storage.constants.js +4 -4
  14. package/dist/cjs/handlers/click.handler.js +3 -6
  15. package/dist/cjs/handlers/error.handler.js +1 -11
  16. package/dist/cjs/handlers/page-view.handler.js +0 -4
  17. package/dist/cjs/handlers/performance.handler.js +14 -29
  18. package/dist/cjs/handlers/scroll.handler.js +7 -6
  19. package/dist/cjs/handlers/session.handler.js +7 -6
  20. package/dist/cjs/integrations/google-analytics.integration.js +2 -6
  21. package/dist/cjs/listeners/activity-listener-manager.js +3 -3
  22. package/dist/cjs/listeners/input-listener-managers.js +3 -3
  23. package/dist/cjs/listeners/touch-listener-manager.js +3 -3
  24. package/dist/cjs/listeners/unload-listener-manager.js +3 -3
  25. package/dist/cjs/listeners/visibility-listener-manager.js +3 -3
  26. package/dist/cjs/managers/event.manager.d.ts +2 -1
  27. package/dist/cjs/managers/event.manager.js +60 -38
  28. package/dist/cjs/managers/sender.manager.js +29 -36
  29. package/dist/cjs/managers/session.manager.js +5 -13
  30. package/dist/cjs/managers/state.manager.d.ts +0 -3
  31. package/dist/cjs/managers/state.manager.js +1 -43
  32. package/dist/cjs/managers/storage.manager.d.ts +16 -2
  33. package/dist/cjs/managers/storage.manager.js +73 -19
  34. package/dist/cjs/managers/user.manager.d.ts +1 -1
  35. package/dist/cjs/managers/user.manager.js +2 -2
  36. package/dist/cjs/public-api.d.ts +3 -3
  37. package/dist/cjs/public-api.js +1 -1
  38. package/dist/cjs/test-bridge.d.ts +1 -0
  39. package/dist/cjs/test-bridge.js +37 -2
  40. package/dist/cjs/types/config.types.d.ts +15 -18
  41. package/dist/cjs/types/config.types.js +6 -0
  42. package/dist/cjs/types/event.types.d.ts +1 -13
  43. package/dist/cjs/types/index.d.ts +0 -2
  44. package/dist/cjs/types/index.js +0 -2
  45. package/dist/cjs/types/mode.types.d.ts +1 -2
  46. package/dist/cjs/types/mode.types.js +0 -1
  47. package/dist/cjs/types/queue.types.d.ts +0 -6
  48. package/dist/cjs/types/state.types.d.ts +2 -0
  49. package/dist/cjs/types/test-bridge.types.d.ts +2 -2
  50. package/dist/cjs/types/validation-error.types.d.ts +0 -6
  51. package/dist/cjs/types/validation-error.types.js +1 -10
  52. package/dist/cjs/utils/browser/device-detector.utils.js +2 -24
  53. package/dist/cjs/utils/browser/index.d.ts +1 -0
  54. package/dist/cjs/utils/browser/index.js +1 -0
  55. package/dist/cjs/utils/browser/qa-mode.utils.d.ts +13 -0
  56. package/dist/cjs/utils/browser/qa-mode.utils.js +43 -0
  57. package/dist/cjs/utils/browser/utm-params.utils.js +0 -15
  58. package/dist/cjs/utils/data/uuid.utils.d.ts +13 -0
  59. package/dist/cjs/utils/data/uuid.utils.js +37 -1
  60. package/dist/cjs/utils/index.d.ts +1 -1
  61. package/dist/cjs/utils/index.js +1 -1
  62. package/dist/cjs/utils/logging.utils.d.ts +6 -0
  63. package/dist/cjs/utils/logging.utils.js +25 -0
  64. package/dist/cjs/utils/network/index.d.ts +0 -1
  65. package/dist/cjs/utils/network/index.js +0 -1
  66. package/dist/cjs/utils/network/url.utils.d.ts +2 -8
  67. package/dist/cjs/utils/network/url.utils.js +46 -90
  68. package/dist/cjs/utils/security/sanitize.utils.d.ts +1 -13
  69. package/dist/cjs/utils/security/sanitize.utils.js +15 -178
  70. package/dist/cjs/utils/validations/config-validations.utils.d.ts +3 -9
  71. package/dist/cjs/utils/validations/config-validations.utils.js +48 -94
  72. package/dist/cjs/utils/validations/event-validations.utils.js +11 -5
  73. package/dist/cjs/utils/validations/index.d.ts +0 -1
  74. package/dist/cjs/utils/validations/index.js +0 -1
  75. package/dist/cjs/utils/validations/metadata-validations.utils.js +0 -1
  76. package/dist/cjs/utils/validations/type-guards.utils.d.ts +2 -2
  77. package/dist/cjs/utils/validations/type-guards.utils.js +50 -4
  78. package/dist/esm/api.d.ts +12 -2
  79. package/dist/esm/api.js +62 -27
  80. package/dist/esm/app.d.ts +2 -2
  81. package/dist/esm/app.js +28 -34
  82. package/dist/esm/constants/config.constants.d.ts +4 -2
  83. package/dist/esm/constants/config.constants.js +4 -16
  84. package/dist/esm/constants/index.d.ts +0 -1
  85. package/dist/esm/constants/index.js +0 -1
  86. package/dist/esm/constants/storage.constants.d.ts +3 -2
  87. package/dist/esm/constants/storage.constants.js +3 -2
  88. package/dist/esm/handlers/click.handler.js +3 -6
  89. package/dist/esm/handlers/error.handler.js +1 -11
  90. package/dist/esm/handlers/page-view.handler.js +0 -4
  91. package/dist/esm/handlers/performance.handler.js +14 -29
  92. package/dist/esm/handlers/scroll.handler.js +7 -6
  93. package/dist/esm/handlers/session.handler.js +7 -6
  94. package/dist/esm/integrations/google-analytics.integration.js +3 -7
  95. package/dist/esm/listeners/activity-listener-manager.js +3 -3
  96. package/dist/esm/listeners/input-listener-managers.js +3 -3
  97. package/dist/esm/listeners/touch-listener-manager.js +3 -3
  98. package/dist/esm/listeners/unload-listener-manager.js +3 -3
  99. package/dist/esm/listeners/visibility-listener-manager.js +3 -3
  100. package/dist/esm/managers/event.manager.d.ts +2 -1
  101. package/dist/esm/managers/event.manager.js +62 -40
  102. package/dist/esm/managers/sender.manager.js +31 -38
  103. package/dist/esm/managers/session.manager.js +5 -13
  104. package/dist/esm/managers/state.manager.d.ts +0 -3
  105. package/dist/esm/managers/state.manager.js +1 -43
  106. package/dist/esm/managers/storage.manager.d.ts +16 -2
  107. package/dist/esm/managers/storage.manager.js +73 -19
  108. package/dist/esm/managers/user.manager.d.ts +1 -1
  109. package/dist/esm/managers/user.manager.js +2 -2
  110. package/dist/esm/public-api.d.ts +3 -3
  111. package/dist/esm/public-api.js +1 -1
  112. package/dist/esm/test-bridge.d.ts +1 -0
  113. package/dist/esm/test-bridge.js +37 -2
  114. package/dist/esm/types/config.types.d.ts +15 -18
  115. package/dist/esm/types/config.types.js +5 -1
  116. package/dist/esm/types/event.types.d.ts +1 -13
  117. package/dist/esm/types/index.d.ts +0 -2
  118. package/dist/esm/types/index.js +0 -2
  119. package/dist/esm/types/mode.types.d.ts +1 -2
  120. package/dist/esm/types/mode.types.js +0 -1
  121. package/dist/esm/types/queue.types.d.ts +0 -6
  122. package/dist/esm/types/state.types.d.ts +2 -0
  123. package/dist/esm/types/test-bridge.types.d.ts +2 -2
  124. package/dist/esm/types/validation-error.types.d.ts +0 -6
  125. package/dist/esm/types/validation-error.types.js +0 -8
  126. package/dist/esm/utils/browser/device-detector.utils.js +2 -24
  127. package/dist/esm/utils/browser/index.d.ts +1 -0
  128. package/dist/esm/utils/browser/index.js +1 -0
  129. package/dist/esm/utils/browser/qa-mode.utils.d.ts +13 -0
  130. package/dist/esm/utils/browser/qa-mode.utils.js +39 -0
  131. package/dist/esm/utils/browser/utm-params.utils.js +0 -15
  132. package/dist/esm/utils/data/uuid.utils.d.ts +13 -0
  133. package/dist/esm/utils/data/uuid.utils.js +35 -0
  134. package/dist/esm/utils/index.d.ts +1 -1
  135. package/dist/esm/utils/index.js +1 -1
  136. package/dist/esm/utils/logging.utils.d.ts +6 -0
  137. package/dist/esm/utils/logging.utils.js +20 -0
  138. package/dist/esm/utils/network/index.d.ts +0 -1
  139. package/dist/esm/utils/network/index.js +0 -1
  140. package/dist/esm/utils/network/url.utils.d.ts +2 -8
  141. package/dist/esm/utils/network/url.utils.js +45 -88
  142. package/dist/esm/utils/security/sanitize.utils.d.ts +1 -13
  143. package/dist/esm/utils/security/sanitize.utils.js +15 -176
  144. package/dist/esm/utils/validations/config-validations.utils.d.ts +3 -9
  145. package/dist/esm/utils/validations/config-validations.utils.js +49 -94
  146. package/dist/esm/utils/validations/event-validations.utils.js +11 -5
  147. package/dist/esm/utils/validations/index.d.ts +0 -1
  148. package/dist/esm/utils/validations/index.js +0 -1
  149. package/dist/esm/utils/validations/metadata-validations.utils.js +0 -1
  150. package/dist/esm/utils/validations/type-guards.utils.d.ts +2 -2
  151. package/dist/esm/utils/validations/type-guards.utils.js +50 -4
  152. package/package.json +1 -1
  153. package/dist/cjs/app.types.d.ts +0 -2
  154. package/dist/cjs/app.types.js +0 -12
  155. package/dist/cjs/constants/api.constants.d.ts +0 -6
  156. package/dist/cjs/constants/api.constants.js +0 -14
  157. package/dist/cjs/managers/api.manager.d.ts +0 -13
  158. package/dist/cjs/managers/api.manager.js +0 -44
  159. package/dist/cjs/managers/config.builder.d.ts +0 -33
  160. package/dist/cjs/managers/config.builder.js +0 -116
  161. package/dist/cjs/managers/config.manager.d.ts +0 -56
  162. package/dist/cjs/managers/config.manager.js +0 -157
  163. package/dist/cjs/managers/tags.manager.d.ts +0 -36
  164. package/dist/cjs/managers/tags.manager.js +0 -171
  165. package/dist/cjs/types/api.types.d.ts +0 -52
  166. package/dist/cjs/types/api.types.js +0 -56
  167. package/dist/cjs/types/tag.types.d.ts +0 -43
  168. package/dist/cjs/types/tag.types.js +0 -31
  169. package/dist/cjs/utils/logging/debug-logger.utils.d.ts +0 -14
  170. package/dist/cjs/utils/logging/debug-logger.utils.js +0 -47
  171. package/dist/cjs/utils/logging/index.d.ts +0 -1
  172. package/dist/cjs/utils/logging/index.js +0 -5
  173. package/dist/cjs/utils/network/fetch-with-timeout.utils.d.ts +0 -4
  174. package/dist/cjs/utils/network/fetch-with-timeout.utils.js +0 -25
  175. package/dist/cjs/utils/validations/url-validations.utils.d.ts +0 -15
  176. package/dist/cjs/utils/validations/url-validations.utils.js +0 -47
  177. package/dist/esm/app.types.d.ts +0 -2
  178. package/dist/esm/app.types.js +0 -1
  179. package/dist/esm/constants/api.constants.d.ts +0 -6
  180. package/dist/esm/constants/api.constants.js +0 -11
  181. package/dist/esm/managers/api.manager.d.ts +0 -13
  182. package/dist/esm/managers/api.manager.js +0 -41
  183. package/dist/esm/managers/config.builder.d.ts +0 -33
  184. package/dist/esm/managers/config.builder.js +0 -112
  185. package/dist/esm/managers/config.manager.d.ts +0 -56
  186. package/dist/esm/managers/config.manager.js +0 -153
  187. package/dist/esm/managers/tags.manager.d.ts +0 -36
  188. package/dist/esm/managers/tags.manager.js +0 -167
  189. package/dist/esm/types/api.types.d.ts +0 -52
  190. package/dist/esm/types/api.types.js +0 -53
  191. package/dist/esm/types/tag.types.d.ts +0 -43
  192. package/dist/esm/types/tag.types.js +0 -28
  193. package/dist/esm/utils/logging/debug-logger.utils.d.ts +0 -14
  194. package/dist/esm/utils/logging/debug-logger.utils.js +0 -44
  195. package/dist/esm/utils/logging/index.d.ts +0 -1
  196. package/dist/esm/utils/logging/index.js +0 -1
  197. package/dist/esm/utils/network/fetch-with-timeout.utils.d.ts +0 -4
  198. package/dist/esm/utils/network/fetch-with-timeout.utils.js +0 -22
  199. package/dist/esm/utils/validations/url-validations.utils.d.ts +0 -15
  200. package/dist/esm/utils/validations/url-validations.utils.js +0 -42
package/dist/cjs/app.js CHANGED
@@ -1,8 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.App = void 0;
4
- const api_manager_1 = require("./managers/api.manager");
5
- const config_manager_1 = require("./managers/config.manager");
6
4
  const event_manager_1 = require("./managers/event.manager");
7
5
  const user_manager_1 = require("./managers/user.manager");
8
6
  const state_manager_1 = require("./managers/state.manager");
@@ -30,27 +28,25 @@ class App extends state_manager_1.StateManager {
30
28
  get initialized() {
31
29
  return this.isInitialized;
32
30
  }
33
- async init(appConfig) {
31
+ async init(config) {
34
32
  if (this.isInitialized) {
35
33
  return;
36
34
  }
37
- if (!appConfig.id?.trim()) {
38
- throw new Error('Project ID is required');
39
- }
40
35
  this.managers.storage = new storage_manager_1.StorageManager();
41
36
  try {
42
- await this.setupState(appConfig);
37
+ this.setupState(config);
43
38
  await this.setupIntegrations();
44
39
  this.managers.event = new event_manager_1.EventManager(this.managers.storage, this.integrations.googleAnalytics, this.emitter);
45
- this.initializeHandlers();
46
- await this.managers.event.recoverPersistedEvents().catch(() => {
47
- utils_1.debugLog.warn('App', 'Failed to recover persisted events');
40
+ await this.initializeHandlers();
41
+ await this.managers.event.recoverPersistedEvents().catch((error) => {
42
+ (0, utils_1.log)('warn', 'Failed to recover persisted events', { error });
48
43
  });
49
44
  this.isInitialized = true;
50
45
  }
51
46
  catch (error) {
52
47
  await this.destroy(true);
53
- throw new Error(`TraceLog initialization failed: ${error}`);
48
+ const errorMessage = error instanceof Error ? error.message : String(error);
49
+ throw new Error(`[TraceLog] TraceLog initialization failed: ${errorMessage}`);
54
50
  }
55
51
  }
56
52
  sendCustomEvent(name, metadata) {
@@ -59,9 +55,8 @@ class App extends state_manager_1.StateManager {
59
55
  }
60
56
  const { valid, error, sanitizedMetadata } = (0, utils_1.isEventValid)(name, metadata);
61
57
  if (!valid) {
62
- const config = this.get('config');
63
- if (config?.mode === 'qa' || config?.mode === 'debug') {
64
- throw new Error(`Custom event "${name}" validation failed: ${error}`);
58
+ if (this.get('mode') === types_1.Mode.QA) {
59
+ throw new Error(`[TraceLog] Custom event "${name}" validation failed: ${error}`);
65
60
  }
66
61
  return;
67
62
  }
@@ -90,8 +85,8 @@ class App extends state_manager_1.StateManager {
90
85
  try {
91
86
  await handler.stopTracking();
92
87
  }
93
- catch {
94
- utils_1.debugLog.warn('App', 'Failed to stop tracking');
88
+ catch (error) {
89
+ (0, utils_1.log)('warn', 'Failed to stop tracking', { error });
95
90
  }
96
91
  });
97
92
  await Promise.allSettled(handlerCleanups);
@@ -108,22 +103,25 @@ class App extends state_manager_1.StateManager {
108
103
  this.isInitialized = false;
109
104
  this.handlers = {};
110
105
  }
111
- async setupState(appConfig) {
112
- const apiUrl = (0, api_manager_1.getApiUrlForProject)(appConfig.id, appConfig.allowHttp);
113
- this.set('apiUrl', apiUrl);
114
- const configManager = new config_manager_1.ConfigManager();
115
- const config = await configManager.get(apiUrl, appConfig);
106
+ setupState(config) {
116
107
  this.set('config', config);
117
- const userId = user_manager_1.UserManager.getId(this.managers.storage, config.id);
108
+ const userId = user_manager_1.UserManager.getId(this.managers.storage);
118
109
  this.set('userId', userId);
119
- this.set('device', (0, utils_1.getDeviceType)());
110
+ const apiUrl = (0, utils_1.getApiUrl)(config);
111
+ this.set('apiUrl', apiUrl);
112
+ const device = (0, utils_1.getDeviceType)();
113
+ this.set('device', device);
120
114
  const pageUrl = (0, utils_1.normalizeUrl)(window.location.href, config.sensitiveQueryParams);
121
115
  this.set('pageUrl', pageUrl);
116
+ const mode = (0, utils_1.detectQaMode)() ? types_1.Mode.QA : undefined;
117
+ if (mode) {
118
+ this.set('mode', mode);
119
+ }
122
120
  }
123
121
  async setupIntegrations() {
124
122
  const config = this.get('config');
125
123
  const measurementId = config.integrations?.googleAnalytics?.measurementId;
126
- if (!config.ipExcluded && measurementId?.trim()) {
124
+ if (measurementId?.trim()) {
127
125
  try {
128
126
  this.integrations.googleAnalytics = new google_analytics_integration_1.GoogleAnalyticsIntegration();
129
127
  await this.integrations.googleAnalytics.initialize();
@@ -133,13 +131,9 @@ class App extends state_manager_1.StateManager {
133
131
  }
134
132
  }
135
133
  }
136
- initializeHandlers() {
134
+ async initializeHandlers() {
137
135
  this.handlers.session = new session_handler_1.SessionHandler(this.managers.storage, this.managers.event);
138
- this.handlers.session.startTracking().catch((error) => {
139
- utils_1.debugLog.error('App', 'Session handler failed to start', {
140
- message: error instanceof Error ? error.message : 'Unknown error',
141
- });
142
- });
136
+ await this.handlers.session.startTracking();
143
137
  const onPageView = () => {
144
138
  this.set('suppressNextScroll', true);
145
139
  if (this.suppressNextScrollTimer) {
@@ -156,8 +150,8 @@ class App extends state_manager_1.StateManager {
156
150
  this.handlers.scroll = new scroll_handler_1.ScrollHandler(this.managers.event);
157
151
  this.handlers.scroll.startTracking();
158
152
  this.handlers.performance = new performance_handler_1.PerformanceHandler(this.managers.event);
159
- this.handlers.performance.startTracking().catch(() => {
160
- utils_1.debugLog.warn('App', 'Failed to start performance tracking');
153
+ this.handlers.performance.startTracking().catch((error) => {
154
+ (0, utils_1.log)('warn', 'Failed to start performance tracking', { error });
161
155
  });
162
156
  this.handlers.error = new error_handler_1.ErrorHandler(this.managers.event);
163
157
  this.handlers.error.startTracking();
@@ -29,6 +29,7 @@ export declare const MAX_CUSTOM_EVENT_NAME_LENGTH = 120;
29
29
  export declare const MAX_CUSTOM_EVENT_STRING_SIZE: number;
30
30
  export declare const MAX_CUSTOM_EVENT_KEYS = 10;
31
31
  export declare const MAX_CUSTOM_EVENT_ARRAY_SIZE = 10;
32
+ export declare const MAX_NESTED_OBJECT_KEYS = 20;
32
33
  export declare const MAX_TEXT_LENGTH = 255;
33
34
  export declare const MAX_STRING_LENGTH = 1000;
34
35
  export declare const MAX_ARRAY_LENGTH = 100;
@@ -38,7 +39,7 @@ export declare const SYNC_XHR_TIMEOUT_MS = 2000;
38
39
  export declare const MAX_FINGERPRINTS = 1000;
39
40
  export declare const FINGERPRINT_CLEANUP_MULTIPLIER = 10;
40
41
  export declare const MAX_FINGERPRINTS_HARD_LIMIT = 2000;
41
- export declare const HTML_DATA_ATTR_PREFIX = "data-tl";
42
+ export declare const HTML_DATA_ATTR_PREFIX = "data-tlog";
42
43
  export declare const INTERACTIVE_SELECTORS: readonly ["button", "a", "input[type=\"button\"]", "input[type=\"submit\"]", "input[type=\"reset\"]", "input[type=\"checkbox\"]", "input[type=\"radio\"]", "select", "textarea", "[role=\"button\"]", "[role=\"link\"]", "[role=\"tab\"]", "[role=\"menuitem\"]", "[role=\"option\"]", "[role=\"checkbox\"]", "[role=\"radio\"]", "[role=\"switch\"]", "[routerLink]", "[ng-click]", "[data-action]", "[data-click]", "[data-navigate]", "[data-toggle]", "[onclick]", ".btn", ".button", ".clickable", ".nav-link", ".menu-item", "[data-testid]", "[tabindex=\"0\"]"];
43
44
  export declare const UTM_PARAMS: string[];
44
45
  export declare const INITIALIZATION_MAX_CONCURRENT_RETRIES = 20;
@@ -60,13 +61,14 @@ export declare const RETRY_BACKOFF_INITIAL = 1000;
60
61
  export declare const RETRY_BACKOFF_MAX = 30000;
61
62
  export declare const RATE_LIMIT_INTERVAL = 1000;
62
63
  export declare const MAX_RETRY_ATTEMPTS = 10;
63
- export declare const ALLOWED_API_CONFIG_KEYS: Set<"mode" | "samplingRate" | "excludedUrlPaths" | keyof import("../types").ExclusiveApiConfig>;
64
64
  export declare const VALIDATION_MESSAGES: {
65
65
  readonly MISSING_PROJECT_ID: "Project ID is required";
66
66
  readonly PROJECT_ID_EMPTY_AFTER_TRIM: "Project ID is required";
67
67
  readonly INVALID_SESSION_TIMEOUT: "Session timeout must be between 30000ms (30 seconds) and 86400000ms (24 hours)";
68
68
  readonly INVALID_SAMPLING_RATE: "Sampling rate must be between 0 and 1";
69
69
  readonly INVALID_ERROR_SAMPLING_RATE: "Error sampling must be between 0 and 1";
70
+ readonly INVALID_TRACELOG_PROJECT_ID: "TraceLog project ID is required when integration is enabled";
71
+ readonly INVALID_CUSTOM_API_URL: "Custom API URL is required when integration is enabled";
70
72
  readonly INVALID_GOOGLE_ANALYTICS_ID: "Google Analytics measurement ID is required when integration is enabled";
71
73
  readonly INVALID_SCROLL_CONTAINER_SELECTORS: "Scroll container selectors must be valid CSS selectors";
72
74
  readonly INVALID_GLOBAL_METADATA: "Global metadata must be an object";
@@ -4,8 +4,8 @@
4
4
  * This file centralizes all timing, limits, browser, and initialization constants
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.SESSION_RECOVERY_WINDOW_MULTIPLIER = exports.TAB_CLEANUP_DELAY_MS = exports.TAB_ELECTION_TIMEOUT_MS = exports.TAB_HEARTBEAT_INTERVAL_MS = exports.CROSS_TAB_INITIALIZATION_LOCK_TIMEOUT_MS = exports.SESSION_CLEANUP_DELAY_MS = exports.SESSION_MAX_RETRY_ATTEMPTS = exports.SESSION_SYNC_TIMEOUT_MS = exports.INITIALIZATION_TIMEOUT_MS = exports.INITIALIZATION_CONCURRENT_RETRY_DELAY_MS = exports.INITIALIZATION_MAX_CONCURRENT_RETRIES = exports.UTM_PARAMS = exports.INTERACTIVE_SELECTORS = exports.HTML_DATA_ATTR_PREFIX = exports.MAX_FINGERPRINTS_HARD_LIMIT = exports.FINGERPRINT_CLEANUP_MULTIPLIER = exports.MAX_FINGERPRINTS = exports.SYNC_XHR_TIMEOUT_MS = exports.PRECISION_TWO_DECIMALS = exports.MAX_OBJECT_DEPTH = exports.MAX_ARRAY_LENGTH = exports.MAX_STRING_LENGTH = exports.MAX_TEXT_LENGTH = exports.MAX_CUSTOM_EVENT_ARRAY_SIZE = exports.MAX_CUSTOM_EVENT_KEYS = exports.MAX_CUSTOM_EVENT_STRING_SIZE = exports.MAX_CUSTOM_EVENT_NAME_LENGTH = exports.MAX_SESSION_TIMEOUT_MS = exports.MIN_SESSION_TIMEOUT_MS = exports.BATCH_SIZE_THRESHOLD = exports.MAX_SAMPLING_RATE = exports.MIN_SAMPLING_RATE = exports.DEFAULT_SAMPLING_RATE = exports.MAX_SCROLL_EVENTS_PER_SESSION = exports.SCROLL_MIN_EVENT_INTERVAL_MS = exports.MIN_SCROLL_DEPTH_CHANGE = exports.SIGNIFICANT_SCROLL_DELTA = exports.DEFAULT_MOTION_THRESHOLD = exports.MAX_METADATA_SIZE = exports.REQUEST_TIMEOUT_MS = exports.RETRY_DELAY_MS = exports.MAX_RETRIES = exports.MAX_EVENTS_QUEUE_LENGTH = exports.EVENT_PERSISTENCE_MAX_AGE_MS = exports.EVENT_EXPIRY_HOURS = exports.DEFAULT_VISIBILITY_TIMEOUT_MS = exports.SCROLL_DEBOUNCE_TIME_MS = exports.EVENT_SENT_INTERVAL_MS = exports.DUPLICATE_EVENT_THRESHOLD_MS = exports.DEFAULT_SESSION_TIMEOUT = void 0;
8
- exports.XSS_PATTERNS = exports.VALIDATION_MESSAGES = exports.ALLOWED_API_CONFIG_KEYS = exports.MAX_RETRY_ATTEMPTS = exports.RATE_LIMIT_INTERVAL = exports.RETRY_BACKOFF_MAX = exports.RETRY_BACKOFF_INITIAL = exports.SCROLL_SUPPRESS_MULTIPLIER = exports.MIN_SESSION_RECOVERY_WINDOW_MS = exports.MAX_SESSION_RECOVERY_WINDOW_MS = exports.MAX_SESSION_RECOVERY_ATTEMPTS = void 0;
7
+ exports.TAB_CLEANUP_DELAY_MS = exports.TAB_ELECTION_TIMEOUT_MS = exports.TAB_HEARTBEAT_INTERVAL_MS = exports.CROSS_TAB_INITIALIZATION_LOCK_TIMEOUT_MS = exports.SESSION_CLEANUP_DELAY_MS = exports.SESSION_MAX_RETRY_ATTEMPTS = exports.SESSION_SYNC_TIMEOUT_MS = exports.INITIALIZATION_TIMEOUT_MS = exports.INITIALIZATION_CONCURRENT_RETRY_DELAY_MS = exports.INITIALIZATION_MAX_CONCURRENT_RETRIES = exports.UTM_PARAMS = exports.INTERACTIVE_SELECTORS = exports.HTML_DATA_ATTR_PREFIX = exports.MAX_FINGERPRINTS_HARD_LIMIT = exports.FINGERPRINT_CLEANUP_MULTIPLIER = exports.MAX_FINGERPRINTS = exports.SYNC_XHR_TIMEOUT_MS = exports.PRECISION_TWO_DECIMALS = exports.MAX_OBJECT_DEPTH = exports.MAX_ARRAY_LENGTH = exports.MAX_STRING_LENGTH = exports.MAX_TEXT_LENGTH = exports.MAX_NESTED_OBJECT_KEYS = exports.MAX_CUSTOM_EVENT_ARRAY_SIZE = exports.MAX_CUSTOM_EVENT_KEYS = exports.MAX_CUSTOM_EVENT_STRING_SIZE = exports.MAX_CUSTOM_EVENT_NAME_LENGTH = exports.MAX_SESSION_TIMEOUT_MS = exports.MIN_SESSION_TIMEOUT_MS = exports.BATCH_SIZE_THRESHOLD = exports.MAX_SAMPLING_RATE = exports.MIN_SAMPLING_RATE = exports.DEFAULT_SAMPLING_RATE = exports.MAX_SCROLL_EVENTS_PER_SESSION = exports.SCROLL_MIN_EVENT_INTERVAL_MS = exports.MIN_SCROLL_DEPTH_CHANGE = exports.SIGNIFICANT_SCROLL_DELTA = exports.DEFAULT_MOTION_THRESHOLD = exports.MAX_METADATA_SIZE = exports.REQUEST_TIMEOUT_MS = exports.RETRY_DELAY_MS = exports.MAX_RETRIES = exports.MAX_EVENTS_QUEUE_LENGTH = exports.EVENT_PERSISTENCE_MAX_AGE_MS = exports.EVENT_EXPIRY_HOURS = exports.DEFAULT_VISIBILITY_TIMEOUT_MS = exports.SCROLL_DEBOUNCE_TIME_MS = exports.EVENT_SENT_INTERVAL_MS = exports.DUPLICATE_EVENT_THRESHOLD_MS = exports.DEFAULT_SESSION_TIMEOUT = void 0;
8
+ exports.XSS_PATTERNS = exports.VALIDATION_MESSAGES = exports.MAX_RETRY_ATTEMPTS = exports.RATE_LIMIT_INTERVAL = exports.RETRY_BACKOFF_MAX = exports.RETRY_BACKOFF_INITIAL = exports.SCROLL_SUPPRESS_MULTIPLIER = exports.MIN_SESSION_RECOVERY_WINDOW_MS = exports.MAX_SESSION_RECOVERY_WINDOW_MS = exports.MAX_SESSION_RECOVERY_ATTEMPTS = exports.SESSION_RECOVERY_WINDOW_MULTIPLIER = void 0;
9
9
  // ============================================================================
10
10
  // SESSION & TIMING
11
11
  // ============================================================================
@@ -46,6 +46,7 @@ exports.MAX_CUSTOM_EVENT_NAME_LENGTH = 120;
46
46
  exports.MAX_CUSTOM_EVENT_STRING_SIZE = 8 * 1024; // 8KB
47
47
  exports.MAX_CUSTOM_EVENT_KEYS = 10;
48
48
  exports.MAX_CUSTOM_EVENT_ARRAY_SIZE = 10;
49
+ exports.MAX_NESTED_OBJECT_KEYS = 20; // Maximum keys in nested objects within arrays
49
50
  // Text content limits
50
51
  exports.MAX_TEXT_LENGTH = 255; // For click tracking text content
51
52
  // Data sanitization limits
@@ -63,7 +64,7 @@ exports.MAX_FINGERPRINTS_HARD_LIMIT = 2000; // Hard limit for aggressive cleanup
63
64
  // ============================================================================
64
65
  // BROWSER & HTML
65
66
  // ============================================================================
66
- exports.HTML_DATA_ATTR_PREFIX = 'data-tl';
67
+ exports.HTML_DATA_ATTR_PREFIX = 'data-tlog';
67
68
  // Interactive element selectors for click tracking
68
69
  exports.INTERACTIVE_SELECTORS = [
69
70
  'button',
@@ -137,31 +138,18 @@ exports.MAX_RETRY_ATTEMPTS = 10;
137
138
  // ============================================================================
138
139
  // VALIDATION
139
140
  // ============================================================================
140
- // Allowed API config keys for runtime validation
141
- exports.ALLOWED_API_CONFIG_KEYS = new Set([
142
- 'mode',
143
- 'tags',
144
- 'samplingRate',
145
- 'excludedUrlPaths',
146
- 'ipExcluded',
147
- ]);
148
141
  // Validation error messages - standardized across all layers
149
142
  exports.VALIDATION_MESSAGES = {
150
- // Project ID validation - consistent message across all layers
151
143
  MISSING_PROJECT_ID: 'Project ID is required',
152
144
  PROJECT_ID_EMPTY_AFTER_TRIM: 'Project ID is required',
153
- // Session timeout validation
154
145
  INVALID_SESSION_TIMEOUT: `Session timeout must be between ${exports.MIN_SESSION_TIMEOUT_MS}ms (30 seconds) and ${exports.MAX_SESSION_TIMEOUT_MS}ms (24 hours)`,
155
- // Sampling rate validation
156
146
  INVALID_SAMPLING_RATE: 'Sampling rate must be between 0 and 1',
157
147
  INVALID_ERROR_SAMPLING_RATE: 'Error sampling must be between 0 and 1',
158
- // Integration validation
148
+ INVALID_TRACELOG_PROJECT_ID: 'TraceLog project ID is required when integration is enabled',
149
+ INVALID_CUSTOM_API_URL: 'Custom API URL is required when integration is enabled',
159
150
  INVALID_GOOGLE_ANALYTICS_ID: 'Google Analytics measurement ID is required when integration is enabled',
160
- // UI validation
161
151
  INVALID_SCROLL_CONTAINER_SELECTORS: 'Scroll container selectors must be valid CSS selectors',
162
- // Global metadata validation
163
152
  INVALID_GLOBAL_METADATA: 'Global metadata must be an object',
164
- // Array validation
165
153
  INVALID_SENSITIVE_QUERY_PARAMS: 'Sensitive query params must be an array of strings',
166
154
  };
167
155
  // ============================================================================
@@ -1,4 +1,3 @@
1
- export * from './api.constants';
2
1
  export * from './config.constants';
3
2
  export * from './storage.constants';
4
3
  export * from './performance.constants';
@@ -14,7 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./api.constants"), exports);
18
17
  __exportStar(require("./config.constants"), exports);
19
18
  __exportStar(require("./storage.constants"), exports);
20
19
  __exportStar(require("./performance.constants"), exports);
@@ -1,5 +1,6 @@
1
- export declare const STORAGE_BASE_KEY = "tl";
2
- export declare const USER_ID_KEY: (id: string) => string;
1
+ export declare const STORAGE_BASE_KEY = "tlog";
2
+ export declare const QA_MODE_KEY = "tlog:qa_mode";
3
+ export declare const USER_ID_KEY = "tlog:uid";
3
4
  export declare const QUEUE_KEY: (id: string) => string;
4
5
  export declare const SESSION_STORAGE_KEY: (id: string) => string;
5
6
  export declare const CROSS_TAB_SESSION_KEY: (id: string) => string;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BROADCAST_CHANNEL_NAME = exports.SESSION_RECOVERY_KEY = exports.TAB_SPECIFIC_INFO_KEY = exports.TAB_INFO_KEY = exports.CROSS_TAB_SESSION_KEY = exports.SESSION_STORAGE_KEY = exports.QUEUE_KEY = exports.USER_ID_KEY = exports.STORAGE_BASE_KEY = void 0;
4
- exports.STORAGE_BASE_KEY = 'tl';
5
- const USER_ID_KEY = (id) => (id ? `${exports.STORAGE_BASE_KEY}:${id}:uid` : `${exports.STORAGE_BASE_KEY}:uid`);
6
- exports.USER_ID_KEY = USER_ID_KEY;
3
+ exports.BROADCAST_CHANNEL_NAME = exports.SESSION_RECOVERY_KEY = exports.TAB_SPECIFIC_INFO_KEY = exports.TAB_INFO_KEY = exports.CROSS_TAB_SESSION_KEY = exports.SESSION_STORAGE_KEY = exports.QUEUE_KEY = exports.USER_ID_KEY = exports.QA_MODE_KEY = exports.STORAGE_BASE_KEY = void 0;
4
+ exports.STORAGE_BASE_KEY = 'tlog';
5
+ exports.QA_MODE_KEY = `${exports.STORAGE_BASE_KEY}:qa_mode`;
6
+ exports.USER_ID_KEY = `${exports.STORAGE_BASE_KEY}:uid`;
7
7
  const QUEUE_KEY = (id) => (id ? `${exports.STORAGE_BASE_KEY}:${id}:queue` : `${exports.STORAGE_BASE_KEY}:queue`);
8
8
  exports.QUEUE_KEY = QUEUE_KEY;
9
9
  const SESSION_STORAGE_KEY = (id) => id ? `${exports.STORAGE_BASE_KEY}:${id}:session` : `${exports.STORAGE_BASE_KEY}:session`;
@@ -4,7 +4,7 @@ exports.ClickHandler = void 0;
4
4
  const constants_1 = require("../constants");
5
5
  const types_1 = require("../types");
6
6
  const state_manager_1 = require("../managers/state.manager");
7
- const logging_1 = require("../utils/logging");
7
+ const utils_1 = require("@/utils");
8
8
  class ClickHandler extends state_manager_1.StateManager {
9
9
  constructor(eventManager) {
10
10
  super();
@@ -23,7 +23,7 @@ class ClickHandler extends state_manager_1.StateManager {
23
23
  ? target.parentElement
24
24
  : null;
25
25
  if (!clickedElement) {
26
- logging_1.debugLog.warn('ClickHandler', 'Click target not found or not an element');
26
+ (0, utils_1.log)('warn', 'Click target not found or not an element');
27
27
  return;
28
28
  }
29
29
  const trackingElement = this.findTrackingElement(clickedElement);
@@ -75,10 +75,7 @@ class ClickHandler extends state_manager_1.StateManager {
75
75
  }
76
76
  }
77
77
  catch (error) {
78
- logging_1.debugLog.warn('ClickHandler', 'Invalid selector in element search', {
79
- selector,
80
- error: error instanceof Error ? error.message : 'Unknown error',
81
- });
78
+ (0, utils_1.log)('warn', 'Invalid selector in element search', { error, data: { selector } });
82
79
  continue;
83
80
  }
84
81
  }
@@ -4,7 +4,6 @@ exports.ErrorHandler = void 0;
4
4
  const state_manager_1 = require("../managers/state.manager");
5
5
  const types_1 = require("../types");
6
6
  const error_constants_1 = require("../constants/error.constants");
7
- const logging_1 = require("../utils/logging");
8
7
  /**
9
8
  * Simplified error handler for tracking JavaScript errors and unhandled promise rejections
10
9
  * Includes PII sanitization and sampling support
@@ -21,11 +20,6 @@ class ErrorHandler extends state_manager_1.StateManager {
21
20
  if (this.shouldSuppressError(types_1.ErrorType.JS_ERROR, sanitizedMessage)) {
22
21
  return;
23
22
  }
24
- logging_1.debugLog.warn('ErrorHandler', 'JS error captured', {
25
- message: sanitizedMessage,
26
- filename: event.filename,
27
- line: event.lineno,
28
- });
29
23
  this.eventManager.track({
30
24
  type: types_1.EventType.ERROR,
31
25
  error_data: {
@@ -46,7 +40,6 @@ class ErrorHandler extends state_manager_1.StateManager {
46
40
  if (this.shouldSuppressError(types_1.ErrorType.PROMISE_REJECTION, sanitizedMessage)) {
47
41
  return;
48
42
  }
49
- logging_1.debugLog.warn('ErrorHandler', 'Promise rejection captured', { message: sanitizedMessage });
50
43
  this.eventManager.track({
51
44
  type: types_1.EventType.ERROR,
52
45
  error_data: {
@@ -110,10 +103,7 @@ class ErrorHandler extends state_manager_1.StateManager {
110
103
  }
111
104
  this.recentErrors.set(key, now);
112
105
  if (this.recentErrors.size > error_constants_1.MAX_TRACKED_ERRORS_HARD_LIMIT) {
113
- logging_1.debugLog.warn('ErrorHandler', 'Hard limit exceeded, clearing all tracked errors', {
114
- size: this.recentErrors.size,
115
- limit: error_constants_1.MAX_TRACKED_ERRORS_HARD_LIMIT,
116
- });
106
+ // Hard limit exceeded, clearing all tracked errors
117
107
  this.recentErrors.clear();
118
108
  this.recentErrors.set(key, now);
119
109
  return false;
@@ -4,7 +4,6 @@ exports.PageViewHandler = void 0;
4
4
  const types_1 = require("../types");
5
5
  const utils_1 = require("../utils");
6
6
  const state_manager_1 = require("../managers/state.manager");
7
- const logging_1 = require("../utils/logging");
8
7
  class PageViewHandler extends state_manager_1.StateManager {
9
8
  constructor(eventManager, onTrack) {
10
9
  super();
@@ -16,7 +15,6 @@ class PageViewHandler extends state_manager_1.StateManager {
16
15
  }
17
16
  this.onTrack();
18
17
  const fromUrl = this.get('pageUrl');
19
- logging_1.debugLog.debug('PageViewHandler', 'Page navigation detected', { from: fromUrl, to: normalizedUrl });
20
18
  this.set('pageUrl', normalizedUrl);
21
19
  const pageViewData = this.extractPageViewData();
22
20
  this.eventManager.track({
@@ -30,7 +28,6 @@ class PageViewHandler extends state_manager_1.StateManager {
30
28
  this.onTrack = onTrack;
31
29
  }
32
30
  startTracking() {
33
- logging_1.debugLog.debug('PageViewHandler', 'Starting page view tracking');
34
31
  this.trackInitialPageView();
35
32
  window.addEventListener('popstate', this.trackCurrentPage, true);
36
33
  window.addEventListener('hashchange', this.trackCurrentPage, true);
@@ -38,7 +35,6 @@ class PageViewHandler extends state_manager_1.StateManager {
38
35
  this.patchHistory('replaceState');
39
36
  }
40
37
  stopTracking() {
41
- logging_1.debugLog.debug('PageViewHandler', 'Stopping page view tracking');
42
38
  window.removeEventListener('popstate', this.trackCurrentPage, true);
43
39
  window.removeEventListener('hashchange', this.trackCurrentPage, true);
44
40
  if (this.originalPushState) {
@@ -37,15 +37,14 @@ exports.PerformanceHandler = void 0;
37
37
  const state_manager_1 = require("../managers/state.manager");
38
38
  const types_1 = require("../types");
39
39
  const constants_1 = require("../constants");
40
- const performance_constants_1 = require("../constants/performance.constants");
41
- const logging_1 = require("../utils/logging");
40
+ const utils_1 = require("@/utils");
42
41
  class PerformanceHandler extends state_manager_1.StateManager {
43
42
  constructor(eventManager) {
44
43
  super();
45
44
  this.reportedByNav = new Map();
46
45
  this.observers = [];
47
46
  this.lastLongTaskSentAt = 0;
48
- this.vitalThresholds = performance_constants_1.WEB_VITALS_THRESHOLDS;
47
+ this.vitalThresholds = constants_1.WEB_VITALS_THRESHOLDS;
49
48
  this.eventManager = eventManager;
50
49
  }
51
50
  async startTracking() {
@@ -58,10 +57,7 @@ class PerformanceHandler extends state_manager_1.StateManager {
58
57
  obs.disconnect();
59
58
  }
60
59
  catch (error) {
61
- logging_1.debugLog.warn('PerformanceHandler', 'Failed to disconnect performance observer', {
62
- error: error instanceof Error ? error.message : 'Unknown error',
63
- observerIndex: index,
64
- });
60
+ (0, utils_1.log)('warn', 'Failed to disconnect performance observer', { error, data: { observerIndex: index } });
65
61
  }
66
62
  });
67
63
  this.observers.length = 0;
@@ -134,9 +130,7 @@ class PerformanceHandler extends state_manager_1.StateManager {
134
130
  onINP(report('INP'));
135
131
  }
136
132
  catch (error) {
137
- logging_1.debugLog.warn('PerformanceHandler', 'Failed to load web-vitals library, using fallback', {
138
- error: error instanceof Error ? error.message : 'Unknown error',
139
- });
133
+ (0, utils_1.log)('warn', 'Failed to load web-vitals library, using fallback', { error });
140
134
  this.observeWebVitalsFallback();
141
135
  }
142
136
  }
@@ -157,9 +151,7 @@ class PerformanceHandler extends state_manager_1.StateManager {
157
151
  }
158
152
  }
159
153
  catch (error) {
160
- logging_1.debugLog.warn('PerformanceHandler', 'Failed to report TTFB', {
161
- error: error instanceof Error ? error.message : 'Unknown error',
162
- });
154
+ (0, utils_1.log)('warn', 'Failed to report TTFB', { error });
163
155
  }
164
156
  }
165
157
  observeLongTasks() {
@@ -201,7 +193,7 @@ class PerformanceHandler extends state_manager_1.StateManager {
201
193
  }
202
194
  trackWebVital(type, value) {
203
195
  if (!Number.isFinite(value)) {
204
- logging_1.debugLog.warn('PerformanceHandler', 'Invalid web vital value', { type, value });
196
+ (0, utils_1.log)('warn', 'Invalid web vital value', { data: { type, value } });
205
197
  return;
206
198
  }
207
199
  this.eventManager.track({
@@ -224,9 +216,7 @@ class PerformanceHandler extends state_manager_1.StateManager {
224
216
  return `${timestamp.toFixed(2)}_${window.location.pathname}_${random}`;
225
217
  }
226
218
  catch (error) {
227
- logging_1.debugLog.warn('PerformanceHandler', 'Failed to get navigation ID', {
228
- error: error instanceof Error ? error.message : 'Unknown error',
229
- });
219
+ (0, utils_1.log)('warn', 'Failed to get navigation ID', { error });
230
220
  return null;
231
221
  }
232
222
  }
@@ -246,9 +236,9 @@ class PerformanceHandler extends state_manager_1.StateManager {
246
236
  cb(list, observer);
247
237
  }
248
238
  catch (callbackError) {
249
- logging_1.debugLog.warn('PerformanceHandler', 'Observer callback failed', {
250
- type,
251
- error: callbackError instanceof Error ? callbackError.message : 'Unknown error',
239
+ (0, utils_1.log)('warn', 'Observer callback failed', {
240
+ error: callbackError,
241
+ data: { type },
252
242
  });
253
243
  }
254
244
  if (once) {
@@ -267,25 +257,20 @@ class PerformanceHandler extends state_manager_1.StateManager {
267
257
  return true;
268
258
  }
269
259
  catch (error) {
270
- logging_1.debugLog.warn('PerformanceHandler', 'Failed to create performance observer', {
271
- type,
272
- error: error instanceof Error ? error.message : 'Unknown error',
260
+ (0, utils_1.log)('warn', 'Failed to create performance observer', {
261
+ error,
262
+ data: { type },
273
263
  });
274
264
  return false;
275
265
  }
276
266
  }
277
267
  shouldSendVital(type, value) {
278
268
  if (typeof value !== 'number' || !Number.isFinite(value)) {
279
- logging_1.debugLog.warn('PerformanceHandler', 'Invalid web vital value', { type, value });
269
+ (0, utils_1.log)('warn', 'Invalid web vital value', { data: { type, value } });
280
270
  return false;
281
271
  }
282
272
  const threshold = this.vitalThresholds[type];
283
273
  if (typeof threshold === 'number' && value <= threshold) {
284
- logging_1.debugLog.debug('PerformanceHandler', 'Web vital below threshold, skipping', {
285
- type,
286
- value,
287
- threshold,
288
- });
289
274
  return false;
290
275
  }
291
276
  return true;
@@ -4,7 +4,7 @@ exports.ScrollHandler = void 0;
4
4
  const constants_1 = require("../constants");
5
5
  const types_1 = require("../types");
6
6
  const state_manager_1 = require("../managers/state.manager");
7
- const logging_1 = require("../utils/logging");
7
+ const utils_1 = require("../utils");
8
8
  class ScrollHandler extends state_manager_1.StateManager {
9
9
  constructor(eventManager) {
10
10
  super();
@@ -144,8 +144,8 @@ class ScrollHandler extends state_manager_1.StateManager {
144
144
  return;
145
145
  }
146
146
  this.limitWarningLogged = true;
147
- logging_1.debugLog.warn('ScrollHandler', 'Max scroll events per session reached', {
148
- limit: this.maxEventsPerSession,
147
+ (0, utils_1.log)('warn', 'Max scroll events per session reached', {
148
+ data: { limit: this.maxEventsPerSession },
149
149
  });
150
150
  }
151
151
  applyConfigOverrides() {
@@ -214,9 +214,10 @@ class ScrollHandler extends state_manager_1.StateManager {
214
214
  return document.querySelector(selector);
215
215
  }
216
216
  catch (error) {
217
- logging_1.debugLog.clientWarn('ScrollHandler', 'Invalid CSS selector', {
218
- selector,
219
- error: error instanceof Error ? error.message : 'Unknown error',
217
+ (0, utils_1.log)('warn', 'Invalid CSS selector', {
218
+ error,
219
+ data: { selector },
220
+ showToClient: true,
220
221
  });
221
222
  return null;
222
223
  }
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SessionHandler = void 0;
4
4
  const session_manager_1 = require("../managers/session.manager");
5
5
  const state_manager_1 = require("../managers/state.manager");
6
- const logging_1 = require("../utils/logging");
6
+ const utils_1 = require("../utils");
7
7
  class SessionHandler extends state_manager_1.StateManager {
8
8
  constructor(storageManager, eventManager) {
9
9
  super();
@@ -17,16 +17,19 @@ class SessionHandler extends state_manager_1.StateManager {
17
17
  return;
18
18
  }
19
19
  if (this.destroyed) {
20
- logging_1.debugLog.warn('SessionHandler', 'Cannot start tracking on destroyed handler');
20
+ (0, utils_1.log)('warn', 'Cannot start tracking on destroyed handler');
21
21
  return;
22
22
  }
23
- const projectId = this.get('config')?.id;
23
+ const config = this.get('config');
24
+ const projectId = config?.integrations?.tracelog?.projectId ?? config?.integrations?.custom?.apiUrl ?? 'default';
24
25
  if (!projectId) {
25
26
  throw new Error('Cannot start session tracking: config not available');
26
27
  }
27
28
  try {
28
29
  this.sessionManager = new session_manager_1.SessionManager(this.storageManager, this.eventManager, projectId);
29
30
  await this.sessionManager.startTracking();
31
+ // Flush any events that were buffered during initialization
32
+ this.eventManager.flushPendingEvents();
30
33
  }
31
34
  catch (error) {
32
35
  if (this.sessionManager) {
@@ -38,9 +41,7 @@ class SessionHandler extends state_manager_1.StateManager {
38
41
  }
39
42
  this.sessionManager = null;
40
43
  }
41
- logging_1.debugLog.error('SessionHandler', 'Failed to start session tracking', {
42
- error: error instanceof Error ? error.message : 'Unknown error',
43
- });
44
+ (0, utils_1.log)('error', 'Failed to start session tracking', { error });
44
45
  throw error;
45
46
  }
46
47
  }
@@ -27,9 +27,7 @@ class GoogleAnalyticsIntegration extends state_manager_1.StateManager {
27
27
  this.isInitialized = true;
28
28
  }
29
29
  catch (error) {
30
- utils_1.debugLog.error('GoogleAnalyticsIntegration', 'Initialization failed', {
31
- error: error instanceof Error ? error.message : 'Unknown error',
32
- });
30
+ (0, utils_1.log)('error', 'Google Analytics initialization failed', { error });
33
31
  }
34
32
  }
35
33
  trackEvent(eventName, metadata) {
@@ -41,9 +39,7 @@ class GoogleAnalyticsIntegration extends state_manager_1.StateManager {
41
39
  window.gtag('event', eventName, normalizedMetadata);
42
40
  }
43
41
  catch (error) {
44
- utils_1.debugLog.error('GoogleAnalyticsIntegration', 'Event tracking failed', {
45
- error: error instanceof Error ? error.message : 'Unknown error',
46
- });
42
+ (0, utils_1.log)('error', 'Google Analytics event tracking failed', { error });
47
43
  }
48
44
  }
49
45
  cleanup() {
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ActivityListenerManager = void 0;
4
- const logging_1 = require("../utils/logging");
4
+ const utils_1 = require("../utils");
5
5
  class ActivityListenerManager {
6
6
  constructor(onActivity) {
7
7
  this.options = { passive: true };
@@ -14,7 +14,7 @@ class ActivityListenerManager {
14
14
  window.addEventListener('focus', this.onActivity, this.options);
15
15
  }
16
16
  catch (error) {
17
- logging_1.debugLog.error('ActivityListenerManager', 'Failed to setup activity listeners', { error });
17
+ (0, utils_1.log)('error', 'Failed to setup activity listeners', { error });
18
18
  throw error;
19
19
  }
20
20
  }
@@ -25,7 +25,7 @@ class ActivityListenerManager {
25
25
  window.removeEventListener('focus', this.onActivity);
26
26
  }
27
27
  catch (error) {
28
- logging_1.debugLog.warn('ActivityListenerManager', 'Error during activity listeners cleanup', { error });
28
+ (0, utils_1.log)('warn', 'Error during activity listeners cleanup', { error });
29
29
  }
30
30
  }
31
31
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.KeyboardListenerManager = exports.MouseListenerManager = void 0;
4
- const logging_1 = require("../utils/logging");
4
+ const utils_1 = require("../utils");
5
5
  /**
6
6
  * Base class for input listener managers to reduce code duplication
7
7
  */
@@ -17,7 +17,7 @@ class BaseInputListenerManager {
17
17
  });
18
18
  }
19
19
  catch (error) {
20
- logging_1.debugLog.error(this.logPrefix, `Failed to setup ${this.logPrefix.toLowerCase()} listeners`, { error });
20
+ (0, utils_1.log)('error', `Failed to setup ${this.logPrefix.toLowerCase()} listeners`, { error });
21
21
  }
22
22
  }
23
23
  cleanup() {
@@ -27,7 +27,7 @@ class BaseInputListenerManager {
27
27
  });
28
28
  }
29
29
  catch (error) {
30
- logging_1.debugLog.warn(this.logPrefix, `Error during ${this.logPrefix.toLowerCase()} listeners cleanup`, { error });
30
+ (0, utils_1.log)('warn', `Error during ${this.logPrefix.toLowerCase()} listeners cleanup`, { error });
31
31
  }
32
32
  }
33
33
  }