@tracelog/lib 0.1.0 → 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 -3297
  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 +16 -10
  28. package/dist/cjs/handlers/scroll.handler.js +119 -185
  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 +16 -10
  118. package/dist/esm/handlers/scroll.handler.js +120 -186
  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 -27
  190. package/dist/cjs/constants/limits.constants.js +0 -43
  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 -27
  211. package/dist/esm/constants/limits.constants.js +0 -40
  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
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # TraceLog Library
2
2
 
3
- A lightweight TypeScript Library for web analytics and user behavior tracking. Automatically captures clicks, scrolls, page views, and performance metrics with cross-tab session management and privacy-first design.
3
+ A lightweight TypeScript library for web analytics and user behavior tracking. Automatically captures clicks, scrolls, page views, and performance metrics with cross-tab session management and privacy-first design.
4
4
 
5
5
  ## Features
6
6
 
@@ -9,6 +9,7 @@ A lightweight TypeScript Library for web analytics and user behavior tracking. A
9
9
  - **Privacy-first** - Built-in PII sanitization, IP exclusion options, and configurable data sampling.
10
10
  - **Framework agnostic** - Works with vanilla JS, React, Vue, Angular, or any web application.
11
11
  - **Lightweight** - Only one dependency (`web-vitals`) with dual ESM/CJS support.
12
+ - **Event-driven** - Real-time event subscription with `on()` and `off()` methods for custom integrations.
12
13
 
13
14
  ## Installation
14
15
 
@@ -32,15 +33,15 @@ A lightweight TypeScript Library for web analytics and user behavior tracking. A
32
33
  Initialize tracking with your project ID and start capturing events immediately:
33
34
 
34
35
  ```typescript
35
- import * as TraceLog from '@tracelog/lib';
36
+ import { tracelog } from '@tracelog/lib';
36
37
 
37
38
  // Initialize tracking
38
- await TraceLog.init({
39
+ await tracelog.init({
39
40
  id: 'your-project-id'
40
41
  });
41
42
 
42
43
  // Send custom events
43
- TraceLog.event('user_signup', {
44
+ tracelog.event('user_signup', {
44
45
  method: 'email',
45
46
  plan: 'premium'
46
47
  });
@@ -52,7 +53,7 @@ TraceLog.event('user_signup', {
52
53
 
53
54
  **Basic tracking with configuration:**
54
55
  ```typescript
55
- await TraceLog.init({
56
+ await tracelog.init({
56
57
  id: 'your-project-id',
57
58
  sessionTimeout: 30 * 60 * 1000 // 30 minutes
58
59
  });
@@ -60,7 +61,7 @@ await TraceLog.init({
60
61
 
61
62
  **Custom events with metadata:**
62
63
  ```typescript
63
- TraceLog.event('product_viewed', {
64
+ tracelog.event('product_viewed', {
64
65
  productId: 'abc-123',
65
66
  category: 'electronics',
66
67
  price: 299.99,
@@ -70,7 +71,7 @@ TraceLog.event('product_viewed', {
70
71
 
71
72
  **Privacy-focused configuration:**
72
73
  ```typescript
73
- await TraceLog.init({
74
+ await tracelog.init({
74
75
  id: 'your-project-id',
75
76
  sensitiveQueryParams: ['token', 'session_id'],
76
77
  excludedUrlPaths: ['/admin/*', '/internal'],
@@ -83,24 +84,49 @@ await TraceLog.init({
83
84
  **Core methods:**
84
85
  - `init(config: AppConfig): Promise<void>` - Initialize tracking with project configuration.
85
86
  - `event(name: string, metadata?: Record<string, MetadataType>): void` - Send custom event with optional metadata.
86
- - `destroy(): void` - Clean up all tracking and remove event listeners.
87
+ - `on(event: string, callback: Function): void` - Subscribe to events emitted by TraceLog.
88
+ - `off(event: string, callback: Function): void` - Unsubscribe from events emitted by TraceLog.
89
+ - `isInitialized(): boolean` - Check if the library has been initialized.
90
+ - `destroy(): Promise<void>` - Clean up all tracking and remove event listeners.
87
91
 
88
92
  **Key configuration options:**
89
93
  - `config.id`: Your unique project identifier (required).
90
94
  - `config.sessionTimeout`: Session timeout in milliseconds (default: 15 minutes).
91
95
  - `config.globalMetadata`: Metadata automatically attached to all events.
96
+ - `config.mode`: Logging mode controlling verbosity ('qa', 'debug', etc.).
97
+ - `config.samplingRate`: Event sampling rate between 0 and 1.
98
+ - `config.errorSampling`: Error event sampling rate between 0 and 1.
99
+ - `config.excludedUrlPaths`: URL path patterns to ignore during tracking.
100
+ - `config.sensitiveQueryParams`: Query parameters to remove before tracking URLs.
101
+ - `config.allowHttp`: Enable HTTP requests for testing environments.
102
+ - `config.scrollContainerSelectors`: Custom scroll containers to monitor.
103
+ - `config.integrations`: Third-party integration configurations.
92
104
 
93
105
  **Metadata types:** `string | number | boolean | string[]`
94
106
 
107
+
95
108
  ## Configuration
96
109
 
97
110
  **Environment-based settings:**
98
111
  - Use `samplingRate: 0.1` to reduce data volume in high-traffic applications
99
112
  - Configure `sessionTimeout` to match your application's user session length
100
113
 
114
+ **Event subscription**
115
+ ```typescript
116
+ // Subscribe to individual events as they are tracked
117
+ tracelog.on('event', (eventData) => {
118
+ console.log('Event tracked:', eventData.type, eventData);
119
+ });
120
+
121
+ // Subscribe to event queue batches being sent
122
+ tracelog.on('queue', (queueData) => {
123
+ console.log('Events queued for sending:', queueData.events.length);
124
+ });
125
+ ```
126
+
101
127
  **Google Analytics integration:**
102
128
  ```typescript
103
- await TraceLog.init({
129
+ await tracelog.init({
104
130
  id: 'your-project-id',
105
131
  integrations: {
106
132
  googleAnalytics: {
@@ -113,7 +139,7 @@ await TraceLog.init({
113
139
  ## Compatibility
114
140
 
115
141
  - **Runtime**: Modern browsers (Chrome 60+, Firefox 55+, Safari 12+)
116
- - **Module formats**: ESM, CommonJS, UMD
142
+ - **Module formats**: ESM, CommonJS
117
143
  - **TypeScript**: Full type definitions included
118
144
  - **Frameworks**: React, Vue, Angular, Svelte, vanilla JS
119
145
 
@@ -121,35 +147,40 @@ await TraceLog.init({
121
147
 
122
148
  **Development mode** → Set `NODE_ENV=dev` for event-based logging to `window` → Use browser console for runtime debugging.
123
149
 
124
- **Log levels** → `qa` mode shows CLIENT_ERROR, CLIENT_WARN, INFO → `debug` mode shows all levels → Configure via server-side settings.
150
+ **Log levels** → `qa` mode shows CLIENT_ERROR, CLIENT_WARN, INFO → `debug` mode shows all levels → Configure via `mode` parameter.
125
151
 
126
152
  ```typescript
127
- // Enable debug logging (forces debug mode)
128
- await TraceLog.init({ id: SpecialProjectId.HttpSkip });
129
-
130
- // Listen to debug events in development
131
- window.addEventListener('tracelog:log', (event) => {
132
- console.log(event.detail); // { timestamp, level, namespace, message, data? }
153
+ // Enable debug logging
154
+ await tracelog.init({
155
+ id: 'your-project-id',
156
+ mode: 'debug' // or 'qa' for less verbose logging
133
157
  });
158
+
159
+ // Debug logs are automatically shown in console based on mode
160
+ // No additional event listeners needed
161
+
162
+ // Check if library is initialized
163
+ if (tracelog.isInitialized()) {
164
+ console.log('TraceLog is ready');
165
+ }
134
166
  ```
135
167
 
136
168
  ## CI/CD Integration
137
169
 
138
- **Automated health checks** → Validates library integrity before deployment → Detects critical issues early.
170
+ **Automated testing** → Validates library integrity before deployment → Detects critical issues early.
139
171
 
140
172
  ```bash
141
- # Install and run health check
173
+ # Install and run tests
142
174
  npm ci && npx playwright install --with-deps
143
175
  npm run build:all
144
- npm run ci:health-check # Standard mode (allows warnings)
145
- npm run ci:health-strict # Strict mode (blocks on any anomalies)
176
+ npm run test:e2e # E2E tests for validation
146
177
  ```
147
178
 
148
179
  **GitHub Actions** → Pre-configured workflows available:
149
180
  - `health-check.yml` - Runs on PR and push
150
181
  - `release-quality-gate.yml` - Validates releases
151
182
 
152
- **Exit codes** → `0` = healthy deploy approved → `1` = critical issues deploy blocked
183
+ **Exit codes** → `0` = tests passed → `1` = critical issues detected
153
184
 
154
185
  ## Troubleshooting
155
186
 
@@ -157,7 +188,7 @@ npm run ci:health-strict # Strict mode (blocks on any anomalies)
157
188
 
158
189
  **High memory usage** → Reduce `sessionTimeout` → Lower `samplingRate` → Check for event listener leaks (call `destroy()` on cleanup).
159
190
 
160
- **CI health check failures** → Verify Playwright installation → Check Node.js ≥18 → Review anomaly detection patterns.
191
+ **CI test failures** → Verify Playwright installation → Check Node.js ≥20 → Review test patterns.
161
192
 
162
193
  ## Development & Contributing
163
194
 
@@ -169,6 +200,8 @@ npm install
169
200
  npm run build:all # Build ESM + CJS + Browser
170
201
  npm run check # Lint + format check
171
202
  npm run test:e2e # Run E2E tests
203
+ npm run test:unit # Run unit tests
204
+ npm run test:coverage # Run tests with coverage
172
205
  ```
173
206
 
174
207
  ### Development Workflow
@@ -201,8 +234,9 @@ This project uses a **branch protection strategy** to ensure code quality:
201
234
  ### Quality Standards
202
235
  - **Code Quality**: ESLint + Prettier enforced in CI
203
236
  - **Type Safety**: TypeScript strict mode required
204
- - **Testing**: E2E tests with Playwright for all features
237
+ - **Testing**: Unit tests with Vitest, E2E tests with Playwright for all features
205
238
  - **Security**: Dependency vulnerability scanning
239
+ - **Coverage**: Comprehensive test coverage with automated reporting
206
240
 
207
241
  ## Versioning
208
242