@tracelog/lib 0.0.8 → 0.2.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 (228) hide show
  1. package/README.md +58 -24
  2. package/dist/browser/tracelog.js +1934 -3226
  3. package/dist/cjs/api.d.ts +33 -19
  4. package/dist/cjs/api.js +111 -156
  5. package/dist/cjs/app.constants.d.ts +80 -1
  6. package/dist/cjs/app.constants.js +90 -3
  7. package/dist/cjs/app.d.ts +29 -44
  8. package/dist/cjs/app.js +114 -212
  9. package/dist/cjs/app.types.d.ts +2 -7
  10. package/dist/cjs/app.types.js +10 -21
  11. package/dist/cjs/constants/api.constants.js +11 -5
  12. package/dist/cjs/constants/config.constants.d.ts +75 -0
  13. package/dist/cjs/constants/config.constants.js +178 -0
  14. package/dist/cjs/constants/error.constants.d.ts +29 -0
  15. package/dist/cjs/constants/error.constants.js +50 -0
  16. package/dist/cjs/constants/index.d.ts +3 -6
  17. package/dist/cjs/constants/index.js +3 -6
  18. package/dist/cjs/constants/performance.constants.d.ts +28 -0
  19. package/dist/cjs/constants/performance.constants.js +43 -0
  20. package/dist/cjs/handlers/click.handler.d.ts +1 -0
  21. package/dist/cjs/handlers/click.handler.js +30 -49
  22. package/dist/cjs/handlers/error.handler.d.ts +11 -6
  23. package/dist/cjs/handlers/error.handler.js +91 -51
  24. package/dist/cjs/handlers/page-view.handler.js +38 -29
  25. package/dist/cjs/handlers/performance.handler.d.ts +3 -0
  26. package/dist/cjs/handlers/performance.handler.js +76 -37
  27. package/dist/cjs/handlers/scroll.handler.d.ts +15 -0
  28. package/dist/cjs/handlers/scroll.handler.js +105 -31
  29. package/dist/cjs/handlers/session.handler.d.ts +6 -20
  30. package/dist/cjs/handlers/session.handler.js +38 -326
  31. package/dist/cjs/integrations/google-analytics.integration.d.ts +0 -1
  32. package/dist/cjs/integrations/google-analytics.integration.js +27 -98
  33. package/dist/cjs/listeners/input-listener-managers.d.ts +18 -9
  34. package/dist/cjs/listeners/input-listener-managers.js +24 -33
  35. package/dist/cjs/listeners/touch-listener-manager.d.ts +1 -3
  36. package/dist/cjs/listeners/touch-listener-manager.js +1 -23
  37. package/dist/cjs/listeners/visibility-listener-manager.d.ts +1 -4
  38. package/dist/cjs/listeners/visibility-listener-manager.js +6 -42
  39. package/dist/cjs/managers/api.manager.d.ts +13 -3
  40. package/dist/cjs/managers/api.manager.js +35 -5
  41. package/dist/cjs/managers/config.manager.d.ts +53 -3
  42. package/dist/cjs/managers/config.manager.js +131 -62
  43. package/dist/cjs/managers/event.manager.d.ts +57 -36
  44. package/dist/cjs/managers/event.manager.js +266 -417
  45. package/dist/cjs/managers/sender.manager.d.ts +40 -22
  46. package/dist/cjs/managers/sender.manager.js +200 -198
  47. package/dist/cjs/managers/session.manager.d.ts +80 -66
  48. package/dist/cjs/managers/session.manager.js +267 -522
  49. package/dist/cjs/managers/state.manager.d.ts +33 -0
  50. package/dist/cjs/managers/state.manager.js +79 -6
  51. package/dist/cjs/managers/storage.manager.d.ts +26 -2
  52. package/dist/cjs/managers/storage.manager.js +67 -34
  53. package/dist/cjs/managers/tags.manager.d.ts +31 -7
  54. package/dist/cjs/managers/tags.manager.js +123 -241
  55. package/dist/cjs/managers/user.manager.d.ts +14 -5
  56. package/dist/cjs/managers/user.manager.js +17 -9
  57. package/dist/cjs/public-api.d.ts +10 -1
  58. package/dist/cjs/public-api.js +18 -24
  59. package/dist/cjs/test-bridge.d.ts +48 -0
  60. package/dist/cjs/test-bridge.js +110 -0
  61. package/dist/cjs/types/api.types.d.ts +21 -6
  62. package/dist/cjs/types/api.types.js +21 -6
  63. package/dist/cjs/types/config.types.d.ts +22 -84
  64. package/dist/cjs/types/emitter.types.d.ts +11 -0
  65. package/dist/cjs/types/emitter.types.js +8 -0
  66. package/dist/cjs/types/event.types.d.ts +8 -11
  67. package/dist/cjs/types/index.d.ts +3 -1
  68. package/dist/cjs/types/index.js +3 -1
  69. package/dist/cjs/types/queue.types.d.ts +1 -0
  70. package/dist/cjs/types/session.types.d.ts +0 -64
  71. package/dist/cjs/types/state.types.d.ts +1 -0
  72. package/dist/cjs/types/test-bridge.types.d.ts +38 -0
  73. package/dist/cjs/types/validation-error.types.d.ts +7 -0
  74. package/dist/cjs/types/validation-error.types.js +11 -1
  75. package/dist/cjs/types/window.types.d.ts +1 -8
  76. package/dist/cjs/utils/data/uuid.utils.d.ts +1 -1
  77. package/dist/cjs/utils/data/uuid.utils.js +7 -5
  78. package/dist/cjs/utils/emitter.utils.d.ts +8 -0
  79. package/dist/cjs/utils/emitter.utils.js +33 -0
  80. package/dist/cjs/utils/index.d.ts +1 -0
  81. package/dist/cjs/utils/index.js +1 -0
  82. package/dist/cjs/utils/logging/debug-logger.utils.d.ts +10 -51
  83. package/dist/cjs/utils/logging/debug-logger.utils.js +36 -127
  84. package/dist/cjs/utils/network/fetch-with-timeout.utils.d.ts +4 -0
  85. package/dist/cjs/utils/network/fetch-with-timeout.utils.js +25 -0
  86. package/dist/cjs/utils/network/index.d.ts +1 -0
  87. package/dist/cjs/utils/network/index.js +1 -0
  88. package/dist/cjs/utils/network/url.utils.js +2 -42
  89. package/dist/cjs/utils/security/sanitize.utils.d.ts +1 -8
  90. package/dist/cjs/utils/security/sanitize.utils.js +7 -41
  91. package/dist/cjs/utils/validations/config-validations.utils.d.ts +7 -0
  92. package/dist/cjs/utils/validations/config-validations.utils.js +77 -22
  93. package/dist/esm/api.d.ts +33 -19
  94. package/dist/esm/api.js +105 -118
  95. package/dist/esm/app.constants.d.ts +80 -1
  96. package/dist/esm/app.constants.js +89 -1
  97. package/dist/esm/app.d.ts +29 -44
  98. package/dist/esm/app.js +115 -213
  99. package/dist/esm/app.types.d.ts +2 -7
  100. package/dist/esm/app.types.js +1 -7
  101. package/dist/esm/constants/api.constants.js +10 -4
  102. package/dist/esm/constants/config.constants.d.ts +75 -0
  103. package/dist/esm/constants/config.constants.js +174 -0
  104. package/dist/esm/constants/error.constants.d.ts +29 -0
  105. package/dist/esm/constants/error.constants.js +47 -0
  106. package/dist/esm/constants/index.d.ts +3 -6
  107. package/dist/esm/constants/index.js +3 -6
  108. package/dist/esm/constants/performance.constants.d.ts +28 -0
  109. package/dist/esm/constants/performance.constants.js +40 -0
  110. package/dist/esm/handlers/click.handler.d.ts +1 -0
  111. package/dist/esm/handlers/click.handler.js +30 -49
  112. package/dist/esm/handlers/error.handler.d.ts +11 -6
  113. package/dist/esm/handlers/error.handler.js +91 -51
  114. package/dist/esm/handlers/page-view.handler.js +38 -29
  115. package/dist/esm/handlers/performance.handler.d.ts +3 -0
  116. package/dist/esm/handlers/performance.handler.js +71 -32
  117. package/dist/esm/handlers/scroll.handler.d.ts +15 -0
  118. package/dist/esm/handlers/scroll.handler.js +106 -32
  119. package/dist/esm/handlers/session.handler.d.ts +6 -20
  120. package/dist/esm/handlers/session.handler.js +38 -326
  121. package/dist/esm/integrations/google-analytics.integration.d.ts +0 -1
  122. package/dist/esm/integrations/google-analytics.integration.js +27 -98
  123. package/dist/esm/listeners/input-listener-managers.d.ts +18 -9
  124. package/dist/esm/listeners/input-listener-managers.js +23 -32
  125. package/dist/esm/listeners/touch-listener-manager.d.ts +1 -3
  126. package/dist/esm/listeners/touch-listener-manager.js +1 -23
  127. package/dist/esm/listeners/visibility-listener-manager.d.ts +1 -4
  128. package/dist/esm/listeners/visibility-listener-manager.js +6 -42
  129. package/dist/esm/managers/api.manager.d.ts +13 -3
  130. package/dist/esm/managers/api.manager.js +34 -3
  131. package/dist/esm/managers/config.manager.d.ts +53 -3
  132. package/dist/esm/managers/config.manager.js +133 -64
  133. package/dist/esm/managers/event.manager.d.ts +57 -36
  134. package/dist/esm/managers/event.manager.js +268 -419
  135. package/dist/esm/managers/sender.manager.d.ts +40 -22
  136. package/dist/esm/managers/sender.manager.js +201 -199
  137. package/dist/esm/managers/session.manager.d.ts +80 -66
  138. package/dist/esm/managers/session.manager.js +269 -524
  139. package/dist/esm/managers/state.manager.d.ts +33 -0
  140. package/dist/esm/managers/state.manager.js +78 -6
  141. package/dist/esm/managers/storage.manager.d.ts +26 -2
  142. package/dist/esm/managers/storage.manager.js +66 -33
  143. package/dist/esm/managers/tags.manager.d.ts +31 -7
  144. package/dist/esm/managers/tags.manager.js +124 -242
  145. package/dist/esm/managers/user.manager.d.ts +14 -5
  146. package/dist/esm/managers/user.manager.js +17 -9
  147. package/dist/esm/public-api.d.ts +10 -1
  148. package/dist/esm/public-api.js +14 -1
  149. package/dist/esm/test-bridge.d.ts +48 -0
  150. package/dist/esm/test-bridge.js +106 -0
  151. package/dist/esm/types/api.types.d.ts +21 -6
  152. package/dist/esm/types/api.types.js +21 -6
  153. package/dist/esm/types/config.types.d.ts +22 -84
  154. package/dist/esm/types/emitter.types.d.ts +11 -0
  155. package/dist/esm/types/emitter.types.js +5 -0
  156. package/dist/esm/types/event.types.d.ts +8 -11
  157. package/dist/esm/types/index.d.ts +3 -1
  158. package/dist/esm/types/index.js +3 -1
  159. package/dist/esm/types/queue.types.d.ts +1 -0
  160. package/dist/esm/types/session.types.d.ts +0 -64
  161. package/dist/esm/types/state.types.d.ts +1 -0
  162. package/dist/esm/types/test-bridge.types.d.ts +38 -0
  163. package/dist/esm/types/validation-error.types.d.ts +7 -0
  164. package/dist/esm/types/validation-error.types.js +9 -0
  165. package/dist/esm/types/window.types.d.ts +1 -8
  166. package/dist/esm/utils/data/uuid.utils.d.ts +1 -1
  167. package/dist/esm/utils/data/uuid.utils.js +7 -5
  168. package/dist/esm/utils/emitter.utils.d.ts +8 -0
  169. package/dist/esm/utils/emitter.utils.js +29 -0
  170. package/dist/esm/utils/index.d.ts +1 -0
  171. package/dist/esm/utils/index.js +1 -0
  172. package/dist/esm/utils/logging/debug-logger.utils.d.ts +10 -51
  173. package/dist/esm/utils/logging/debug-logger.utils.js +36 -127
  174. package/dist/esm/utils/network/fetch-with-timeout.utils.d.ts +4 -0
  175. package/dist/esm/utils/network/fetch-with-timeout.utils.js +22 -0
  176. package/dist/esm/utils/network/index.d.ts +1 -0
  177. package/dist/esm/utils/network/index.js +1 -0
  178. package/dist/esm/utils/network/url.utils.js +2 -42
  179. package/dist/esm/utils/security/sanitize.utils.d.ts +1 -8
  180. package/dist/esm/utils/security/sanitize.utils.js +6 -39
  181. package/dist/esm/utils/validations/config-validations.utils.d.ts +7 -0
  182. package/dist/esm/utils/validations/config-validations.utils.js +76 -22
  183. package/package.json +23 -16
  184. package/dist/browser/web-vitals-CCnqwnC8.mjs +0 -198
  185. package/dist/cjs/constants/browser.constants.d.ts +0 -3
  186. package/dist/cjs/constants/browser.constants.js +0 -41
  187. package/dist/cjs/constants/initialization.constants.d.ts +0 -40
  188. package/dist/cjs/constants/initialization.constants.js +0 -48
  189. package/dist/cjs/constants/limits.constants.d.ts +0 -25
  190. package/dist/cjs/constants/limits.constants.js +0 -40
  191. package/dist/cjs/constants/security.constants.d.ts +0 -1
  192. package/dist/cjs/constants/security.constants.js +0 -12
  193. package/dist/cjs/constants/timing.constants.d.ts +0 -22
  194. package/dist/cjs/constants/timing.constants.js +0 -34
  195. package/dist/cjs/constants/validation.constants.d.ts +0 -13
  196. package/dist/cjs/constants/validation.constants.js +0 -31
  197. package/dist/cjs/handlers/network.handler.d.ts +0 -16
  198. package/dist/cjs/handlers/network.handler.js +0 -136
  199. package/dist/cjs/managers/cross-tab-session.manager.d.ts +0 -170
  200. package/dist/cjs/managers/cross-tab-session.manager.js +0 -730
  201. package/dist/cjs/managers/sampling.manager.d.ts +0 -8
  202. package/dist/cjs/managers/sampling.manager.js +0 -53
  203. package/dist/cjs/managers/session-recovery.manager.d.ts +0 -65
  204. package/dist/cjs/managers/session-recovery.manager.js +0 -237
  205. package/dist/cjs/types/web-vitals.types.d.ts +0 -6
  206. package/dist/esm/constants/browser.constants.d.ts +0 -3
  207. package/dist/esm/constants/browser.constants.js +0 -38
  208. package/dist/esm/constants/initialization.constants.d.ts +0 -40
  209. package/dist/esm/constants/initialization.constants.js +0 -45
  210. package/dist/esm/constants/limits.constants.d.ts +0 -25
  211. package/dist/esm/constants/limits.constants.js +0 -37
  212. package/dist/esm/constants/security.constants.d.ts +0 -1
  213. package/dist/esm/constants/security.constants.js +0 -9
  214. package/dist/esm/constants/timing.constants.d.ts +0 -22
  215. package/dist/esm/constants/timing.constants.js +0 -31
  216. package/dist/esm/constants/validation.constants.d.ts +0 -13
  217. package/dist/esm/constants/validation.constants.js +0 -28
  218. package/dist/esm/handlers/network.handler.d.ts +0 -16
  219. package/dist/esm/handlers/network.handler.js +0 -132
  220. package/dist/esm/managers/cross-tab-session.manager.d.ts +0 -170
  221. package/dist/esm/managers/cross-tab-session.manager.js +0 -726
  222. package/dist/esm/managers/sampling.manager.d.ts +0 -8
  223. package/dist/esm/managers/sampling.manager.js +0 -49
  224. package/dist/esm/managers/session-recovery.manager.d.ts +0 -65
  225. package/dist/esm/managers/session-recovery.manager.js +0 -233
  226. package/dist/esm/types/web-vitals.types.d.ts +0 -6
  227. /package/dist/cjs/types/{web-vitals.types.js → test-bridge.types.js} +0 -0
  228. /package/dist/esm/types/{web-vitals.types.js → test-bridge.types.js} +0 -0
@@ -1,8 +0,0 @@
1
- import { EventType, WebVitalsData } from '../types';
2
- import { StateManager } from './state.manager';
3
- export declare class SamplingManager extends StateManager {
4
- shouldSampleEvent(type: EventType, webVitals?: WebVitalsData): boolean;
5
- private isSampledIn;
6
- private isWebVitalEventSampledIn;
7
- private getHash;
8
- }
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SamplingManager = void 0;
4
- const constants_1 = require("../constants");
5
- const types_1 = require("../types");
6
- const state_manager_1 = require("./state.manager");
7
- class SamplingManager extends state_manager_1.StateManager {
8
- shouldSampleEvent(type, webVitals) {
9
- const isQaMode = this.get('config')?.mode === 'qa' || this.get('config')?.mode === 'debug';
10
- if (isQaMode) {
11
- return true;
12
- }
13
- if (type === types_1.EventType.WEB_VITALS) {
14
- return this.isWebVitalEventSampledIn(webVitals?.type);
15
- }
16
- return this.isSampledIn();
17
- }
18
- isSampledIn() {
19
- const samplingRate = this.get('config').samplingRate ?? constants_1.DEFAULT_SAMPLING_RATE;
20
- if (samplingRate >= 1.0) {
21
- return true;
22
- }
23
- if (samplingRate <= 0) {
24
- return false;
25
- }
26
- const userHash = this.getHash(this.get('userId'));
27
- const userValue = (userHash % 100) / 100;
28
- const isSampled = userValue < samplingRate;
29
- return isSampled;
30
- }
31
- isWebVitalEventSampledIn(type) {
32
- const isLongTask = type === 'LONG_TASK';
33
- const rate = isLongTask ? constants_1.WEB_VITALS_LONG_TASK_SAMPLING : constants_1.WEB_VITALS_SAMPLING;
34
- if (rate >= 1)
35
- return true;
36
- if (rate <= 0)
37
- return false;
38
- const seed = `${this.get('userId')}|${isLongTask ? 'long_task' : 'web_vitals'}`;
39
- const hash = this.getHash(seed);
40
- const value = (hash % 100) / 100;
41
- return value < rate;
42
- }
43
- getHash(input) {
44
- let hash = 0;
45
- for (let i = 0; i < input.length; i++) {
46
- const char = input.charCodeAt(i);
47
- hash = (hash << 5) - hash + char;
48
- hash |= 0;
49
- }
50
- return Math.abs(hash);
51
- }
52
- }
53
- exports.SamplingManager = SamplingManager;
@@ -1,65 +0,0 @@
1
- import { SessionRecoveryConfig, SessionContext } from '../types/session.types';
2
- import { StateManager } from './state.manager';
3
- import { StorageManager } from './storage.manager';
4
- import { EventManager } from './event.manager';
5
- export declare class SessionRecoveryManager extends StateManager {
6
- private readonly config;
7
- private readonly storageManager;
8
- private readonly eventManager;
9
- private readonly projectId;
10
- private readonly debugMode;
11
- constructor(storageManager: StorageManager, projectId: string, eventManager?: EventManager, config?: Partial<SessionRecoveryConfig>);
12
- /**
13
- * Attempt to recover a session
14
- */
15
- attemptSessionRecovery(currentSessionId?: string): {
16
- recovered: boolean;
17
- recoveredSessionId?: string;
18
- context?: SessionContext;
19
- };
20
- /**
21
- * Calculate the recovery window with bounds checking
22
- */
23
- private calculateRecoveryWindow;
24
- /**
25
- * Check if session recovery can be attempted
26
- */
27
- private canAttemptRecovery;
28
- /**
29
- * Store session context for potential recovery
30
- */
31
- storeSessionContextForRecovery(sessionContext: SessionContext): void;
32
- /**
33
- * Get stored recovery attempts
34
- */
35
- private getStoredRecoveryAttempts;
36
- /**
37
- * Store recovery attempts
38
- */
39
- private storeRecoveryAttempts;
40
- /**
41
- * Get the last recovery attempt
42
- */
43
- private getLastRecoveryAttempt;
44
- /**
45
- * Clean up old recovery attempts
46
- */
47
- cleanupOldRecoveryAttempts(): void;
48
- /**
49
- * Check if there's a recoverable session.
50
- * Returns false when no recovery attempts are stored.
51
- */
52
- hasRecoverableSession(): boolean;
53
- /**
54
- * Get recovery window in milliseconds
55
- */
56
- getRecoveryWindowMs(): number;
57
- /**
58
- * Get max recovery attempts
59
- */
60
- getMaxRecoveryAttempts(): number;
61
- /**
62
- * Clear all stored recovery data
63
- */
64
- clearRecoveryData(): void;
65
- }
@@ -1,237 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SessionRecoveryManager = void 0;
4
- const constants_1 = require("../constants");
5
- const storage_constants_1 = require("../constants/storage.constants");
6
- const logging_1 = require("../utils/logging");
7
- const state_manager_1 = require("./state.manager");
8
- class SessionRecoveryManager extends state_manager_1.StateManager {
9
- constructor(storageManager, projectId, eventManager, config) {
10
- super();
11
- this.storageManager = storageManager;
12
- this.eventManager = eventManager ?? null;
13
- this.projectId = projectId;
14
- this.debugMode = (this.get('config')?.mode === 'qa' || this.get('config')?.mode === 'debug') ?? false;
15
- this.config = {
16
- recoveryWindowMs: this.calculateRecoveryWindow(),
17
- maxRecoveryAttempts: constants_1.MAX_SESSION_RECOVERY_ATTEMPTS,
18
- contextPreservation: true,
19
- ...config,
20
- };
21
- }
22
- /**
23
- * Attempt to recover a session
24
- */
25
- attemptSessionRecovery(currentSessionId) {
26
- if (this.debugMode) {
27
- logging_1.debugLog.debug('SessionRecovery', 'Attempting session recovery');
28
- }
29
- // Get stored recovery attempts
30
- const recoveryAttempts = this.getStoredRecoveryAttempts();
31
- const lastAttempt = this.getLastRecoveryAttempt();
32
- // Check if we can recover
33
- if (!this.canAttemptRecovery(lastAttempt)) {
34
- if (this.debugMode) {
35
- logging_1.debugLog.debug('SessionRecovery', 'Session recovery not possible - outside recovery window or max attempts reached');
36
- }
37
- return {
38
- recovered: false,
39
- };
40
- }
41
- // Get the last session context
42
- const lastSessionContext = lastAttempt?.context;
43
- if (!lastSessionContext) {
44
- if (this.debugMode) {
45
- logging_1.debugLog.debug('SessionRecovery', 'No session context available for recovery');
46
- }
47
- return {
48
- recovered: false,
49
- };
50
- }
51
- // Check if recovery is possible
52
- const now = Date.now();
53
- const timeSinceLastActivity = now - lastSessionContext.lastActivity;
54
- if (timeSinceLastActivity > this.config.recoveryWindowMs) {
55
- if (this.debugMode) {
56
- logging_1.debugLog.debug('SessionRecovery', 'Session recovery failed - outside recovery window');
57
- }
58
- return {
59
- recovered: false,
60
- };
61
- }
62
- // Perform recovery
63
- const recoveredSessionId = lastSessionContext.sessionId;
64
- const attemptNumber = (lastAttempt?.attempt ?? 0) + 1;
65
- // Create recovery attempt record
66
- const recoveryAttempt = {
67
- sessionId: currentSessionId ?? recoveredSessionId,
68
- timestamp: now,
69
- attempt: attemptNumber,
70
- context: {
71
- ...lastSessionContext,
72
- recoveryAttempts: attemptNumber,
73
- lastActivity: now,
74
- },
75
- };
76
- recoveryAttempts.push(recoveryAttempt);
77
- this.storeRecoveryAttempts(recoveryAttempts);
78
- if (this.debugMode) {
79
- logging_1.debugLog.debug('SessionRecovery', `Session recovery successful: recovery of session ${recoveredSessionId}`);
80
- }
81
- return {
82
- recovered: true,
83
- recoveredSessionId,
84
- context: recoveryAttempt.context,
85
- };
86
- }
87
- /**
88
- * Calculate the recovery window with bounds checking
89
- */
90
- calculateRecoveryWindow() {
91
- const sessionTimeout = this.get('config')?.sessionTimeout ?? constants_1.DEFAULT_SESSION_TIMEOUT_MS;
92
- const calculatedRecoveryWindow = sessionTimeout * constants_1.SESSION_RECOVERY_WINDOW_MULTIPLIER;
93
- const boundedRecoveryWindow = Math.max(Math.min(calculatedRecoveryWindow, constants_1.MAX_SESSION_RECOVERY_WINDOW_MS), constants_1.MIN_SESSION_RECOVERY_WINDOW_MS);
94
- if (this.debugMode) {
95
- if (calculatedRecoveryWindow > constants_1.MAX_SESSION_RECOVERY_WINDOW_MS) {
96
- logging_1.debugLog.warn('SessionRecovery', `Recovery window capped at ${constants_1.MAX_SESSION_RECOVERY_WINDOW_MS}ms (24h). Calculated: ${calculatedRecoveryWindow}ms`);
97
- }
98
- else if (calculatedRecoveryWindow < constants_1.MIN_SESSION_RECOVERY_WINDOW_MS) {
99
- logging_1.debugLog.warn('SessionRecovery', `Recovery window increased to minimum ${constants_1.MIN_SESSION_RECOVERY_WINDOW_MS}ms (2min). Calculated: ${calculatedRecoveryWindow}ms`);
100
- }
101
- }
102
- return boundedRecoveryWindow;
103
- }
104
- /**
105
- * Check if session recovery can be attempted
106
- */
107
- canAttemptRecovery(lastAttempt) {
108
- if (!lastAttempt) {
109
- return true; // First recovery attempt
110
- }
111
- const now = Date.now();
112
- const timeSinceLastActivity = now - lastAttempt.context.lastActivity;
113
- // Check if within recovery window
114
- if (timeSinceLastActivity > this.config.recoveryWindowMs) {
115
- return false;
116
- }
117
- // Check max attempts
118
- if (lastAttempt.attempt >= this.config.maxRecoveryAttempts) {
119
- return false;
120
- }
121
- return true;
122
- }
123
- /**
124
- * Store session context for potential recovery
125
- */
126
- storeSessionContextForRecovery(sessionContext) {
127
- try {
128
- const recoveryAttempts = this.getStoredRecoveryAttempts();
129
- // Create a recovery attempt record
130
- const recoveryAttempt = {
131
- sessionId: sessionContext.sessionId,
132
- timestamp: Date.now(),
133
- attempt: 0,
134
- context: sessionContext,
135
- };
136
- // Add to recovery attempts (keep only the latest few)
137
- recoveryAttempts.push(recoveryAttempt);
138
- const maxStoredRecoveryAttempts = 5;
139
- if (recoveryAttempts.length > maxStoredRecoveryAttempts) {
140
- recoveryAttempts.splice(0, recoveryAttempts.length - maxStoredRecoveryAttempts);
141
- }
142
- this.storeRecoveryAttempts(recoveryAttempts);
143
- if (this.debugMode) {
144
- logging_1.debugLog.debug('SessionRecovery', `Stored session context for recovery: ${sessionContext.sessionId}`);
145
- }
146
- }
147
- catch (error) {
148
- if (this.debugMode) {
149
- logging_1.debugLog.warn('SessionRecovery', 'Failed to store session context for recovery', { error });
150
- }
151
- }
152
- }
153
- /**
154
- * Get stored recovery attempts
155
- */
156
- getStoredRecoveryAttempts() {
157
- try {
158
- const stored = this.storageManager.getItem((0, storage_constants_1.SESSION_RECOVERY_KEY)(this.projectId));
159
- return stored ? JSON.parse(stored) : [];
160
- }
161
- catch (error) {
162
- if (this.debugMode) {
163
- const stored = this.storageManager.getItem((0, storage_constants_1.SESSION_RECOVERY_KEY)(this.projectId));
164
- logging_1.debugLog.warn('SessionRecovery', `Failed to parse stored recovery attempts for projectId ${this.projectId}. Data: ${stored}`, { error });
165
- }
166
- return [];
167
- }
168
- }
169
- /**
170
- * Store recovery attempts
171
- */
172
- storeRecoveryAttempts(attempts) {
173
- try {
174
- this.storageManager.setItem((0, storage_constants_1.SESSION_RECOVERY_KEY)(this.projectId), JSON.stringify(attempts));
175
- }
176
- catch (error) {
177
- if (this.debugMode) {
178
- logging_1.debugLog.warn('SessionRecovery', 'Failed to store recovery attempts', { error });
179
- }
180
- }
181
- }
182
- /**
183
- * Get the last recovery attempt
184
- */
185
- getLastRecoveryAttempt() {
186
- const attempts = this.getStoredRecoveryAttempts();
187
- return attempts.length > 0 ? attempts[attempts.length - 1] : null;
188
- }
189
- /**
190
- * Clean up old recovery attempts
191
- */
192
- cleanupOldRecoveryAttempts() {
193
- const attempts = this.getStoredRecoveryAttempts();
194
- const now = Date.now();
195
- // Remove attempts older than recovery window
196
- const validAttempts = attempts.filter((attempt) => now - attempt.timestamp <= this.config.recoveryWindowMs);
197
- if (validAttempts.length !== attempts.length) {
198
- this.storeRecoveryAttempts(validAttempts);
199
- if (this.debugMode) {
200
- logging_1.debugLog.debug('SessionRecovery', `Cleaned up ${attempts.length - validAttempts.length} old recovery attempts`);
201
- }
202
- }
203
- }
204
- /**
205
- * Check if there's a recoverable session.
206
- * Returns false when no recovery attempts are stored.
207
- */
208
- hasRecoverableSession() {
209
- const lastAttempt = this.getLastRecoveryAttempt();
210
- if (!lastAttempt) {
211
- return false;
212
- }
213
- return this.canAttemptRecovery(lastAttempt);
214
- }
215
- /**
216
- * Get recovery window in milliseconds
217
- */
218
- getRecoveryWindowMs() {
219
- return this.config.recoveryWindowMs;
220
- }
221
- /**
222
- * Get max recovery attempts
223
- */
224
- getMaxRecoveryAttempts() {
225
- return this.config.maxRecoveryAttempts;
226
- }
227
- /**
228
- * Clear all stored recovery data
229
- */
230
- clearRecoveryData() {
231
- this.storageManager.removeItem((0, storage_constants_1.SESSION_RECOVERY_KEY)(this.projectId));
232
- if (this.debugMode) {
233
- logging_1.debugLog.debug('SessionRecovery', 'Cleared all recovery data');
234
- }
235
- }
236
- }
237
- exports.SessionRecoveryManager = SessionRecoveryManager;
@@ -1,6 +0,0 @@
1
- import { WebVitalType } from './event.types';
2
- export type NavigationId = string;
3
- export interface VitalSample {
4
- type: WebVitalType;
5
- value: number;
6
- }
@@ -1,3 +0,0 @@
1
- export declare const HTML_DATA_ATTR_PREFIX = "data-tl";
2
- 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\"]"];
3
- export declare const UTM_PARAMS: string[];
@@ -1,38 +0,0 @@
1
- // Click tracking constants
2
- export const HTML_DATA_ATTR_PREFIX = 'data-tl';
3
- // Interactive element selectors for click tracking
4
- export const INTERACTIVE_SELECTORS = [
5
- 'button',
6
- 'a',
7
- 'input[type="button"]',
8
- 'input[type="submit"]',
9
- 'input[type="reset"]',
10
- 'input[type="checkbox"]',
11
- 'input[type="radio"]',
12
- 'select',
13
- 'textarea',
14
- '[role="button"]',
15
- '[role="link"]',
16
- '[role="tab"]',
17
- '[role="menuitem"]',
18
- '[role="option"]',
19
- '[role="checkbox"]',
20
- '[role="radio"]',
21
- '[role="switch"]',
22
- '[routerLink]',
23
- '[ng-click]',
24
- '[data-action]',
25
- '[data-click]',
26
- '[data-navigate]',
27
- '[data-toggle]',
28
- '[onclick]',
29
- '.btn',
30
- '.button',
31
- '.clickable',
32
- '.nav-link',
33
- '.menu-item',
34
- '[data-testid]',
35
- '[tabindex="0"]',
36
- ];
37
- // UTM parameters for tracking
38
- export const UTM_PARAMS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];
@@ -1,40 +0,0 @@
1
- /**
2
- * Constants for initialization and reliability patterns
3
- * These values control initialization behavior, retry logic, and circuit breaker patterns
4
- */
5
- export declare const INITIALIZATION_CONSTANTS: {
6
- /** Maximum number of retries when waiting for concurrent initialization */
7
- readonly MAX_CONCURRENT_RETRIES: 20;
8
- /** Delay between retries when waiting for concurrent initialization (ms) */
9
- readonly CONCURRENT_RETRY_DELAY_MS: 50;
10
- /** Timeout for overall initialization process (ms) */
11
- readonly INITIALIZATION_TIMEOUT_MS: 10000;
12
- };
13
- export declare const CIRCUIT_BREAKER_CONSTANTS: {
14
- /** Maximum number of consecutive failures before opening circuit */
15
- readonly MAX_FAILURES: 10;
16
- /** Initial backoff delay when circuit opens (ms) */
17
- readonly INITIAL_BACKOFF_DELAY_MS: 1000;
18
- /** Maximum backoff delay (ms) */
19
- readonly MAX_BACKOFF_DELAY_MS: 30000;
20
- /** Backoff multiplier for exponential backoff */
21
- readonly BACKOFF_MULTIPLIER: 2;
22
- /** Time-based recovery period for circuit breaker (ms) */
23
- readonly RECOVERY_TIME_MS: 30000;
24
- };
25
- export declare const SESSION_SYNC_CONSTANTS: {
26
- /** Timeout for session synchronization operations (ms) */
27
- readonly SYNC_TIMEOUT_MS: 2000;
28
- /** Maximum retry attempts for session operations */
29
- readonly MAX_RETRY_ATTEMPTS: 3;
30
- /** Delay before cleanup operations (ms) */
31
- readonly CLEANUP_DELAY_MS: 100;
32
- };
33
- export declare const CROSS_TAB_CONSTANTS: {
34
- /** Flag to prevent concurrent cross-tab manager initialization */
35
- readonly INITIALIZATION_LOCK_TIMEOUT_MS: 5000;
36
- };
37
- export declare const SCROLL_SUPPRESSION_CONSTANTS: {
38
- /** Multiplier for scroll debounce time when suppressing scroll events */
39
- readonly SUPPRESS_MULTIPLIER: 2;
40
- };
@@ -1,45 +0,0 @@
1
- /**
2
- * Constants for initialization and reliability patterns
3
- * These values control initialization behavior, retry logic, and circuit breaker patterns
4
- */
5
- // Initialization retry constants
6
- export const INITIALIZATION_CONSTANTS = {
7
- /** Maximum number of retries when waiting for concurrent initialization */
8
- MAX_CONCURRENT_RETRIES: 20,
9
- /** Delay between retries when waiting for concurrent initialization (ms) */
10
- CONCURRENT_RETRY_DELAY_MS: 50,
11
- /** Timeout for overall initialization process (ms) */
12
- INITIALIZATION_TIMEOUT_MS: 10000,
13
- };
14
- // Circuit breaker constants
15
- export const CIRCUIT_BREAKER_CONSTANTS = {
16
- /** Maximum number of consecutive failures before opening circuit */
17
- MAX_FAILURES: 10,
18
- /** Initial backoff delay when circuit opens (ms) */
19
- INITIAL_BACKOFF_DELAY_MS: 1000,
20
- /** Maximum backoff delay (ms) */
21
- MAX_BACKOFF_DELAY_MS: 30000,
22
- /** Backoff multiplier for exponential backoff */
23
- BACKOFF_MULTIPLIER: 2,
24
- /** Time-based recovery period for circuit breaker (ms) */
25
- RECOVERY_TIME_MS: 30000, // 30 seconds
26
- };
27
- // Session management constants
28
- export const SESSION_SYNC_CONSTANTS = {
29
- /** Timeout for session synchronization operations (ms) */
30
- SYNC_TIMEOUT_MS: 2000,
31
- /** Maximum retry attempts for session operations */
32
- MAX_RETRY_ATTEMPTS: 3,
33
- /** Delay before cleanup operations (ms) */
34
- CLEANUP_DELAY_MS: 100,
35
- };
36
- // Cross-tab coordination constants
37
- export const CROSS_TAB_CONSTANTS = {
38
- /** Flag to prevent concurrent cross-tab manager initialization */
39
- INITIALIZATION_LOCK_TIMEOUT_MS: 5000,
40
- };
41
- // Scroll suppression constants
42
- export const SCROLL_SUPPRESSION_CONSTANTS = {
43
- /** Multiplier for scroll debounce time when suppressing scroll events */
44
- SUPPRESS_MULTIPLIER: 2,
45
- };
@@ -1,25 +0,0 @@
1
- export declare const DEFAULT_MOTION_THRESHOLD = 2;
2
- export declare const SIGNIFICANT_SCROLL_DELTA = 10;
3
- export declare const DEFAULT_SAMPLING_RATE = 1;
4
- export declare const MIN_SAMPLING_RATE = 0;
5
- export declare const MAX_SAMPLING_RATE = 1;
6
- export declare const BATCH_SIZE_THRESHOLD = 50;
7
- export declare const MAX_EVENTS_QUEUE_LENGTH = 500;
8
- export declare const MIN_SESSION_TIMEOUT_MS = 30000;
9
- export declare const MAX_SESSION_TIMEOUT_MS = 86400000;
10
- export declare const MAX_CUSTOM_EVENT_NAME_LENGTH = 120;
11
- export declare const MAX_CUSTOM_EVENT_STRING_SIZE: number;
12
- export declare const MAX_CUSTOM_EVENT_KEYS = 10;
13
- export declare const MAX_CUSTOM_EVENT_ARRAY_SIZE = 10;
14
- export declare const MAX_TEXT_LENGTH = 255;
15
- export declare const MAX_STRING_LENGTH = 1000;
16
- export declare const MAX_ARRAY_LENGTH = 100;
17
- export declare const MAX_OBJECT_DEPTH = 3;
18
- export declare const PRECISION_TWO_DECIMALS: 2;
19
- export declare const PRECISION_FOUR_DECIMALS: 4;
20
- export declare const WEB_VITALS_SAMPLING: 0.75;
21
- export declare const WEB_VITALS_LONG_TASK_SAMPLING: 0.2;
22
- export declare const SYNC_XHR_TIMEOUT_MS = 2000;
23
- export declare const MAX_FINGERPRINTS = 1000;
24
- export declare const FINGERPRINT_CLEANUP_MULTIPLIER = 10;
25
- export declare const CLICK_COORDINATE_PRECISION = 10;
@@ -1,37 +0,0 @@
1
- // Motion and interaction thresholds
2
- export const DEFAULT_MOTION_THRESHOLD = 2;
3
- export const SIGNIFICANT_SCROLL_DELTA = 10;
4
- // Sampling and rate limits
5
- export const DEFAULT_SAMPLING_RATE = 1;
6
- export const MIN_SAMPLING_RATE = 0;
7
- export const MAX_SAMPLING_RATE = 1;
8
- // Queue and batch limits
9
- export const BATCH_SIZE_THRESHOLD = 50;
10
- export const MAX_EVENTS_QUEUE_LENGTH = 500;
11
- // Session timeout validation limits
12
- export const MIN_SESSION_TIMEOUT_MS = 30000; // 30 seconds minimum
13
- export const MAX_SESSION_TIMEOUT_MS = 86400000; // 24 hours maximum
14
- // Custom event validation limits
15
- export const MAX_CUSTOM_EVENT_NAME_LENGTH = 120;
16
- export const MAX_CUSTOM_EVENT_STRING_SIZE = 8 * 1024; // 8KB
17
- export const MAX_CUSTOM_EVENT_KEYS = 10;
18
- export const MAX_CUSTOM_EVENT_ARRAY_SIZE = 10;
19
- // Text content limits
20
- export const MAX_TEXT_LENGTH = 255; // For click tracking text content
21
- // Data sanitization limits
22
- export const MAX_STRING_LENGTH = 1000;
23
- export const MAX_ARRAY_LENGTH = 100;
24
- export const MAX_OBJECT_DEPTH = 3;
25
- // Precision for numeric metrics
26
- export const PRECISION_TWO_DECIMALS = 2;
27
- export const PRECISION_FOUR_DECIMALS = 4;
28
- // Web vitals sampling
29
- export const WEB_VITALS_SAMPLING = 0.75;
30
- export const WEB_VITALS_LONG_TASK_SAMPLING = 0.2;
31
- // Sync XHR timeout
32
- export const SYNC_XHR_TIMEOUT_MS = 2000; // 2 seconds
33
- // Event fingerprint management
34
- export const MAX_FINGERPRINTS = 1000; // Maximum fingerprints stored before cleanup
35
- export const FINGERPRINT_CLEANUP_MULTIPLIER = 10; // Cleanup fingerprints older than 10x threshold
36
- // Click coordinate precision
37
- export const CLICK_COORDINATE_PRECISION = 10; // Round click coordinates to nearest 10px
@@ -1 +0,0 @@
1
- export declare const XSS_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
@@ -1,9 +0,0 @@
1
- // XSS protection patterns
2
- export const XSS_PATTERNS = [
3
- /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
4
- /javascript:/gi,
5
- /on\w+\s*=/gi,
6
- /<iframe\b[^<]*(?:(?!<\/iframe>)<[^<]*)*<\/iframe>/gi,
7
- /<embed\b[^>]*>/gi,
8
- /<object\b[^<]*(?:(?!<\/object>)<[^<]*)*<\/object>/gi,
9
- ];
@@ -1,22 +0,0 @@
1
- export declare const DEFAULT_SESSION_TIMEOUT_MS: number;
2
- export declare const SESSION_HEARTBEAT_INTERVAL_MS = 30000;
3
- export declare const DEFAULT_THROTTLE_DELAY_MS = 1000;
4
- export declare const SCROLL_DEBOUNCE_TIME_MS = 250;
5
- export declare const DEFAULT_VISIBILITY_TIMEOUT_MS = 2000;
6
- export declare const DUPLICATE_EVENT_THRESHOLD_MS = 1000;
7
- export declare const EVENT_SENT_INTERVAL_MS = 10000;
8
- export declare const EVENT_SENT_INTERVAL_TEST_MS = 2500;
9
- export declare const RETRY_BACKOFF_INITIAL = 1000;
10
- export declare const RETRY_BACKOFF_MAX = 30000;
11
- export declare const RATE_LIMIT_INTERVAL = 1000;
12
- export declare const EVENT_EXPIRY_HOURS = 24;
13
- export declare const EVENT_PERSISTENCE_MAX_AGE_MS: number;
14
- export declare const LONG_TASK_THROTTLE_MS = 1000;
15
- export declare const SESSION_END_PRIORITY_DELAY_MS = 100;
16
- export declare const TAB_HEARTBEAT_INTERVAL_MS = 5000;
17
- export declare const TAB_ELECTION_TIMEOUT_MS = 2000;
18
- export declare const TAB_CLEANUP_DELAY_MS = 1000;
19
- export declare const SESSION_RECOVERY_WINDOW_MULTIPLIER = 2;
20
- export declare const MAX_SESSION_RECOVERY_ATTEMPTS = 3;
21
- export declare const MAX_SESSION_RECOVERY_WINDOW_MS: number;
22
- export declare const MIN_SESSION_RECOVERY_WINDOW_MS: number;
@@ -1,31 +0,0 @@
1
- // Session and timeout constants
2
- export const DEFAULT_SESSION_TIMEOUT_MS = 15 * 60 * 1000;
3
- export const SESSION_HEARTBEAT_INTERVAL_MS = 30000;
4
- // Throttling and debouncing constants
5
- export const DEFAULT_THROTTLE_DELAY_MS = 1000;
6
- export const SCROLL_DEBOUNCE_TIME_MS = 250;
7
- export const DEFAULT_VISIBILITY_TIMEOUT_MS = 2000;
8
- export const DUPLICATE_EVENT_THRESHOLD_MS = 1000;
9
- // Event processing intervals
10
- export const EVENT_SENT_INTERVAL_MS = 10000;
11
- export const EVENT_SENT_INTERVAL_TEST_MS = 2500;
12
- // Network timing
13
- export const RETRY_BACKOFF_INITIAL = 1000; // 1 second
14
- export const RETRY_BACKOFF_MAX = 30000; // 30 seconds
15
- export const RATE_LIMIT_INTERVAL = 1000; // 1 second
16
- // Event expiry
17
- export const EVENT_EXPIRY_HOURS = 24;
18
- export const EVENT_PERSISTENCE_MAX_AGE_MS = 24 * 60 * 60 * 1000; // 24 hours
19
- // Performance metrics
20
- export const LONG_TASK_THROTTLE_MS = DEFAULT_THROTTLE_DELAY_MS;
21
- // Session end coordination
22
- export const SESSION_END_PRIORITY_DELAY_MS = 100;
23
- // Cross-tab session management
24
- export const TAB_HEARTBEAT_INTERVAL_MS = 5000; // 5 seconds
25
- export const TAB_ELECTION_TIMEOUT_MS = 2000; // 2 seconds
26
- export const TAB_CLEANUP_DELAY_MS = 1000; // 1 second
27
- // Session recovery
28
- export const SESSION_RECOVERY_WINDOW_MULTIPLIER = 2; // 2x session timeout
29
- export const MAX_SESSION_RECOVERY_ATTEMPTS = 3;
30
- export const MAX_SESSION_RECOVERY_WINDOW_MS = 24 * 60 * 60 * 1000; // 24 hours max
31
- export const MIN_SESSION_RECOVERY_WINDOW_MS = 2 * 60 * 1000; // 2 minutes minimum
@@ -1,13 +0,0 @@
1
- import { ApiConfig } from '../types';
2
- export declare const ALLOWED_API_CONFIG_KEYS: Set<keyof ApiConfig>;
3
- export declare const VALIDATION_MESSAGES: {
4
- readonly MISSING_PROJECT_ID: "Project ID is required";
5
- readonly PROJECT_ID_EMPTY_AFTER_TRIM: "Project ID is required";
6
- readonly INVALID_SESSION_TIMEOUT: "Session timeout must be between 30000ms (30 seconds) and 86400000ms (24 hours)";
7
- readonly INVALID_SAMPLING_RATE: "Sampling rate must be between 0 and 1";
8
- readonly INVALID_ERROR_SAMPLING_RATE: "Error sampling must be between 0 and 1";
9
- readonly INVALID_GOOGLE_ANALYTICS_ID: "Google Analytics measurement ID is required when integration is enabled";
10
- readonly INVALID_SCROLL_CONTAINER_SELECTORS: "Scroll container selectors must be valid CSS selectors";
11
- readonly INVALID_GLOBAL_METADATA: "Global metadata must be an object";
12
- readonly INVALID_SENSITIVE_QUERY_PARAMS: "Sensitive query params must be an array of strings";
13
- };