@tracelog/lib 0.0.1

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 (301) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +217 -0
  3. package/dist/browser/tracelog.js +4040 -0
  4. package/dist/browser/web-vitals-CCnqwnC8.mjs +198 -0
  5. package/dist/cjs/api.d.ts +46 -0
  6. package/dist/cjs/api.js +224 -0
  7. package/dist/cjs/app.constants.d.ts +1 -0
  8. package/dist/cjs/app.constants.js +5 -0
  9. package/dist/cjs/app.d.ts +59 -0
  10. package/dist/cjs/app.js +272 -0
  11. package/dist/cjs/app.types.d.ts +6 -0
  12. package/dist/cjs/app.types.js +22 -0
  13. package/dist/cjs/constants/api.constants.d.ts +4 -0
  14. package/dist/cjs/constants/api.constants.js +18 -0
  15. package/dist/cjs/constants/browser.constants.d.ts +3 -0
  16. package/dist/cjs/constants/browser.constants.js +41 -0
  17. package/dist/cjs/constants/index.d.ts +8 -0
  18. package/dist/cjs/constants/index.js +24 -0
  19. package/dist/cjs/constants/initialization.constants.d.ts +40 -0
  20. package/dist/cjs/constants/initialization.constants.js +48 -0
  21. package/dist/cjs/constants/limits.constants.d.ts +25 -0
  22. package/dist/cjs/constants/limits.constants.js +40 -0
  23. package/dist/cjs/constants/security.constants.d.ts +1 -0
  24. package/dist/cjs/constants/security.constants.js +12 -0
  25. package/dist/cjs/constants/storage.constants.d.ts +9 -0
  26. package/dist/cjs/constants/storage.constants.js +22 -0
  27. package/dist/cjs/constants/timing.constants.d.ts +22 -0
  28. package/dist/cjs/constants/timing.constants.js +34 -0
  29. package/dist/cjs/constants/validation.constants.d.ts +13 -0
  30. package/dist/cjs/constants/validation.constants.js +31 -0
  31. package/dist/cjs/handlers/click.handler.d.ts +17 -0
  32. package/dist/cjs/handlers/click.handler.js +199 -0
  33. package/dist/cjs/handlers/error.handler.d.ts +15 -0
  34. package/dist/cjs/handlers/error.handler.js +97 -0
  35. package/dist/cjs/handlers/network.handler.d.ts +16 -0
  36. package/dist/cjs/handlers/network.handler.js +136 -0
  37. package/dist/cjs/handlers/page-view.handler.d.ts +15 -0
  38. package/dist/cjs/handlers/page-view.handler.js +83 -0
  39. package/dist/cjs/handlers/performance.handler.d.ts +19 -0
  40. package/dist/cjs/handlers/performance.handler.js +255 -0
  41. package/dist/cjs/handlers/scroll.handler.d.ts +16 -0
  42. package/dist/cjs/handlers/scroll.handler.js +138 -0
  43. package/dist/cjs/handlers/session.handler.d.ts +29 -0
  44. package/dist/cjs/handlers/session.handler.js +357 -0
  45. package/dist/cjs/integrations/google-analytics.integration.d.ts +18 -0
  46. package/dist/cjs/integrations/google-analytics.integration.js +159 -0
  47. package/dist/cjs/listeners/activity-listener-manager.d.ts +8 -0
  48. package/dist/cjs/listeners/activity-listener-manager.js +32 -0
  49. package/dist/cjs/listeners/index.d.ts +6 -0
  50. package/dist/cjs/listeners/index.js +14 -0
  51. package/dist/cjs/listeners/input-listener-managers.d.ts +15 -0
  52. package/dist/cjs/listeners/input-listener-managers.js +58 -0
  53. package/dist/cjs/listeners/listeners.types.d.ts +4 -0
  54. package/dist/cjs/listeners/listeners.types.js +2 -0
  55. package/dist/cjs/listeners/touch-listener-manager.d.ts +10 -0
  56. package/dist/cjs/listeners/touch-listener-manager.js +56 -0
  57. package/dist/cjs/listeners/unload-listener-manager.d.ts +8 -0
  58. package/dist/cjs/listeners/unload-listener-manager.js +30 -0
  59. package/dist/cjs/listeners/visibility-listener-manager.d.ts +12 -0
  60. package/dist/cjs/listeners/visibility-listener-manager.js +83 -0
  61. package/dist/cjs/managers/api.manager.d.ts +3 -0
  62. package/dist/cjs/managers/api.manager.js +14 -0
  63. package/dist/cjs/managers/config.manager.d.ts +7 -0
  64. package/dist/cjs/managers/config.manager.js +94 -0
  65. package/dist/cjs/managers/cross-tab-session.manager.d.ts +170 -0
  66. package/dist/cjs/managers/cross-tab-session.manager.js +730 -0
  67. package/dist/cjs/managers/event.manager.d.ts +61 -0
  68. package/dist/cjs/managers/event.manager.js +508 -0
  69. package/dist/cjs/managers/sampling.manager.d.ts +8 -0
  70. package/dist/cjs/managers/sampling.manager.js +53 -0
  71. package/dist/cjs/managers/sender.manager.d.ts +46 -0
  72. package/dist/cjs/managers/sender.manager.js +304 -0
  73. package/dist/cjs/managers/session-recovery.manager.d.ts +65 -0
  74. package/dist/cjs/managers/session-recovery.manager.js +237 -0
  75. package/dist/cjs/managers/session.manager.d.ts +72 -0
  76. package/dist/cjs/managers/session.manager.js +587 -0
  77. package/dist/cjs/managers/state.manager.d.ts +5 -0
  78. package/dist/cjs/managers/state.manager.js +23 -0
  79. package/dist/cjs/managers/storage.manager.d.ts +10 -0
  80. package/dist/cjs/managers/storage.manager.js +81 -0
  81. package/dist/cjs/managers/tags.manager.d.ts +12 -0
  82. package/dist/cjs/managers/tags.manager.js +289 -0
  83. package/dist/cjs/managers/user.manager.d.ts +7 -0
  84. package/dist/cjs/managers/user.manager.js +22 -0
  85. package/dist/cjs/public-api.d.ts +1 -0
  86. package/dist/cjs/public-api.js +37 -0
  87. package/dist/cjs/types/api.types.d.ts +21 -0
  88. package/dist/cjs/types/api.types.js +25 -0
  89. package/dist/cjs/types/common.types.d.ts +1 -0
  90. package/dist/cjs/types/common.types.js +2 -0
  91. package/dist/cjs/types/config.types.d.ts +104 -0
  92. package/dist/cjs/types/config.types.js +2 -0
  93. package/dist/cjs/types/device.types.d.ts +6 -0
  94. package/dist/cjs/types/device.types.js +10 -0
  95. package/dist/cjs/types/event.types.d.ts +104 -0
  96. package/dist/cjs/types/event.types.js +25 -0
  97. package/dist/cjs/types/index.d.ts +13 -0
  98. package/dist/cjs/types/index.js +29 -0
  99. package/dist/cjs/types/log.types.d.ts +4 -0
  100. package/dist/cjs/types/log.types.js +2 -0
  101. package/dist/cjs/types/mode.types.d.ts +7 -0
  102. package/dist/cjs/types/mode.types.js +11 -0
  103. package/dist/cjs/types/queue.types.d.ts +23 -0
  104. package/dist/cjs/types/queue.types.js +2 -0
  105. package/dist/cjs/types/session.types.d.ts +65 -0
  106. package/dist/cjs/types/session.types.js +2 -0
  107. package/dist/cjs/types/state.types.d.ts +12 -0
  108. package/dist/cjs/types/state.types.js +2 -0
  109. package/dist/cjs/types/tag.types.d.ts +43 -0
  110. package/dist/cjs/types/tag.types.js +31 -0
  111. package/dist/cjs/types/validation-error.types.d.ts +42 -0
  112. package/dist/cjs/types/validation-error.types.js +68 -0
  113. package/dist/cjs/types/web-vitals.types.d.ts +6 -0
  114. package/dist/cjs/types/web-vitals.types.js +2 -0
  115. package/dist/cjs/types/window.types.d.ts +17 -0
  116. package/dist/cjs/types/window.types.js +2 -0
  117. package/dist/cjs/utils/browser/device-detector.utils.d.ts +6 -0
  118. package/dist/cjs/utils/browser/device-detector.utils.js +71 -0
  119. package/dist/cjs/utils/browser/index.d.ts +2 -0
  120. package/dist/cjs/utils/browser/index.js +18 -0
  121. package/dist/cjs/utils/browser/utm-params.utils.d.ts +6 -0
  122. package/dist/cjs/utils/browser/utm-params.utils.js +37 -0
  123. package/dist/cjs/utils/data/index.d.ts +1 -0
  124. package/dist/cjs/utils/data/index.js +17 -0
  125. package/dist/cjs/utils/data/uuid.utils.d.ts +5 -0
  126. package/dist/cjs/utils/data/uuid.utils.js +18 -0
  127. package/dist/cjs/utils/index.d.ts +6 -0
  128. package/dist/cjs/utils/index.js +22 -0
  129. package/dist/cjs/utils/logging/debug-logger.utils.d.ts +56 -0
  130. package/dist/cjs/utils/logging/debug-logger.utils.js +139 -0
  131. package/dist/cjs/utils/logging/index.d.ts +1 -0
  132. package/dist/cjs/utils/logging/index.js +5 -0
  133. package/dist/cjs/utils/network/index.d.ts +1 -0
  134. package/dist/cjs/utils/network/index.js +17 -0
  135. package/dist/cjs/utils/network/url.utils.d.ts +20 -0
  136. package/dist/cjs/utils/network/url.utils.js +172 -0
  137. package/dist/cjs/utils/security/index.d.ts +1 -0
  138. package/dist/cjs/utils/security/index.js +17 -0
  139. package/dist/cjs/utils/security/sanitize.utils.d.ts +32 -0
  140. package/dist/cjs/utils/security/sanitize.utils.js +319 -0
  141. package/dist/cjs/utils/validations/config-validations.utils.d.ts +42 -0
  142. package/dist/cjs/utils/validations/config-validations.utils.js +297 -0
  143. package/dist/cjs/utils/validations/event-validations.utils.d.ts +12 -0
  144. package/dist/cjs/utils/validations/event-validations.utils.js +30 -0
  145. package/dist/cjs/utils/validations/index.d.ts +5 -0
  146. package/dist/cjs/utils/validations/index.js +21 -0
  147. package/dist/cjs/utils/validations/metadata-validations.utils.d.ts +22 -0
  148. package/dist/cjs/utils/validations/metadata-validations.utils.js +115 -0
  149. package/dist/cjs/utils/validations/type-guards.utils.d.ts +6 -0
  150. package/dist/cjs/utils/validations/type-guards.utils.js +31 -0
  151. package/dist/cjs/utils/validations/url-validations.utils.d.ts +15 -0
  152. package/dist/cjs/utils/validations/url-validations.utils.js +47 -0
  153. package/dist/esm/api.d.ts +46 -0
  154. package/dist/esm/api.js +183 -0
  155. package/dist/esm/app.constants.d.ts +1 -0
  156. package/dist/esm/app.constants.js +1 -0
  157. package/dist/esm/app.d.ts +59 -0
  158. package/dist/esm/app.js +268 -0
  159. package/dist/esm/app.types.d.ts +6 -0
  160. package/dist/esm/app.types.js +6 -0
  161. package/dist/esm/constants/api.constants.d.ts +4 -0
  162. package/dist/esm/constants/api.constants.js +14 -0
  163. package/dist/esm/constants/browser.constants.d.ts +3 -0
  164. package/dist/esm/constants/browser.constants.js +38 -0
  165. package/dist/esm/constants/index.d.ts +8 -0
  166. package/dist/esm/constants/index.js +8 -0
  167. package/dist/esm/constants/initialization.constants.d.ts +40 -0
  168. package/dist/esm/constants/initialization.constants.js +45 -0
  169. package/dist/esm/constants/limits.constants.d.ts +25 -0
  170. package/dist/esm/constants/limits.constants.js +37 -0
  171. package/dist/esm/constants/security.constants.d.ts +1 -0
  172. package/dist/esm/constants/security.constants.js +9 -0
  173. package/dist/esm/constants/storage.constants.d.ts +9 -0
  174. package/dist/esm/constants/storage.constants.js +11 -0
  175. package/dist/esm/constants/timing.constants.d.ts +22 -0
  176. package/dist/esm/constants/timing.constants.js +31 -0
  177. package/dist/esm/constants/validation.constants.d.ts +13 -0
  178. package/dist/esm/constants/validation.constants.js +28 -0
  179. package/dist/esm/handlers/click.handler.d.ts +17 -0
  180. package/dist/esm/handlers/click.handler.js +195 -0
  181. package/dist/esm/handlers/error.handler.d.ts +15 -0
  182. package/dist/esm/handlers/error.handler.js +93 -0
  183. package/dist/esm/handlers/network.handler.d.ts +16 -0
  184. package/dist/esm/handlers/network.handler.js +132 -0
  185. package/dist/esm/handlers/page-view.handler.d.ts +15 -0
  186. package/dist/esm/handlers/page-view.handler.js +79 -0
  187. package/dist/esm/handlers/performance.handler.d.ts +19 -0
  188. package/dist/esm/handlers/performance.handler.js +218 -0
  189. package/dist/esm/handlers/scroll.handler.d.ts +16 -0
  190. package/dist/esm/handlers/scroll.handler.js +134 -0
  191. package/dist/esm/handlers/session.handler.d.ts +29 -0
  192. package/dist/esm/handlers/session.handler.js +353 -0
  193. package/dist/esm/integrations/google-analytics.integration.d.ts +18 -0
  194. package/dist/esm/integrations/google-analytics.integration.js +155 -0
  195. package/dist/esm/listeners/activity-listener-manager.d.ts +8 -0
  196. package/dist/esm/listeners/activity-listener-manager.js +28 -0
  197. package/dist/esm/listeners/index.d.ts +6 -0
  198. package/dist/esm/listeners/index.js +5 -0
  199. package/dist/esm/listeners/input-listener-managers.d.ts +15 -0
  200. package/dist/esm/listeners/input-listener-managers.js +53 -0
  201. package/dist/esm/listeners/listeners.types.d.ts +4 -0
  202. package/dist/esm/listeners/listeners.types.js +1 -0
  203. package/dist/esm/listeners/touch-listener-manager.d.ts +10 -0
  204. package/dist/esm/listeners/touch-listener-manager.js +52 -0
  205. package/dist/esm/listeners/unload-listener-manager.d.ts +8 -0
  206. package/dist/esm/listeners/unload-listener-manager.js +26 -0
  207. package/dist/esm/listeners/visibility-listener-manager.d.ts +12 -0
  208. package/dist/esm/listeners/visibility-listener-manager.js +79 -0
  209. package/dist/esm/managers/api.manager.d.ts +3 -0
  210. package/dist/esm/managers/api.manager.js +10 -0
  211. package/dist/esm/managers/config.manager.d.ts +7 -0
  212. package/dist/esm/managers/config.manager.js +90 -0
  213. package/dist/esm/managers/cross-tab-session.manager.d.ts +170 -0
  214. package/dist/esm/managers/cross-tab-session.manager.js +726 -0
  215. package/dist/esm/managers/event.manager.d.ts +61 -0
  216. package/dist/esm/managers/event.manager.js +504 -0
  217. package/dist/esm/managers/sampling.manager.d.ts +8 -0
  218. package/dist/esm/managers/sampling.manager.js +49 -0
  219. package/dist/esm/managers/sender.manager.d.ts +46 -0
  220. package/dist/esm/managers/sender.manager.js +300 -0
  221. package/dist/esm/managers/session-recovery.manager.d.ts +65 -0
  222. package/dist/esm/managers/session-recovery.manager.js +233 -0
  223. package/dist/esm/managers/session.manager.d.ts +72 -0
  224. package/dist/esm/managers/session.manager.js +583 -0
  225. package/dist/esm/managers/state.manager.d.ts +5 -0
  226. package/dist/esm/managers/state.manager.js +19 -0
  227. package/dist/esm/managers/storage.manager.d.ts +10 -0
  228. package/dist/esm/managers/storage.manager.js +77 -0
  229. package/dist/esm/managers/tags.manager.d.ts +12 -0
  230. package/dist/esm/managers/tags.manager.js +285 -0
  231. package/dist/esm/managers/user.manager.d.ts +7 -0
  232. package/dist/esm/managers/user.manager.js +18 -0
  233. package/dist/esm/public-api.d.ts +1 -0
  234. package/dist/esm/public-api.js +1 -0
  235. package/dist/esm/types/api.types.d.ts +21 -0
  236. package/dist/esm/types/api.types.js +22 -0
  237. package/dist/esm/types/common.types.d.ts +1 -0
  238. package/dist/esm/types/common.types.js +1 -0
  239. package/dist/esm/types/config.types.d.ts +104 -0
  240. package/dist/esm/types/config.types.js +1 -0
  241. package/dist/esm/types/device.types.d.ts +6 -0
  242. package/dist/esm/types/device.types.js +7 -0
  243. package/dist/esm/types/event.types.d.ts +104 -0
  244. package/dist/esm/types/event.types.js +22 -0
  245. package/dist/esm/types/index.d.ts +13 -0
  246. package/dist/esm/types/index.js +13 -0
  247. package/dist/esm/types/log.types.d.ts +4 -0
  248. package/dist/esm/types/log.types.js +1 -0
  249. package/dist/esm/types/mode.types.d.ts +7 -0
  250. package/dist/esm/types/mode.types.js +8 -0
  251. package/dist/esm/types/queue.types.d.ts +23 -0
  252. package/dist/esm/types/queue.types.js +1 -0
  253. package/dist/esm/types/session.types.d.ts +65 -0
  254. package/dist/esm/types/session.types.js +1 -0
  255. package/dist/esm/types/state.types.d.ts +12 -0
  256. package/dist/esm/types/state.types.js +1 -0
  257. package/dist/esm/types/tag.types.d.ts +43 -0
  258. package/dist/esm/types/tag.types.js +28 -0
  259. package/dist/esm/types/validation-error.types.d.ts +42 -0
  260. package/dist/esm/types/validation-error.types.js +59 -0
  261. package/dist/esm/types/web-vitals.types.d.ts +6 -0
  262. package/dist/esm/types/web-vitals.types.js +1 -0
  263. package/dist/esm/types/window.types.d.ts +17 -0
  264. package/dist/esm/types/window.types.js +1 -0
  265. package/dist/esm/utils/browser/device-detector.utils.d.ts +6 -0
  266. package/dist/esm/utils/browser/device-detector.utils.js +67 -0
  267. package/dist/esm/utils/browser/index.d.ts +2 -0
  268. package/dist/esm/utils/browser/index.js +2 -0
  269. package/dist/esm/utils/browser/utm-params.utils.d.ts +6 -0
  270. package/dist/esm/utils/browser/utm-params.utils.js +33 -0
  271. package/dist/esm/utils/data/index.d.ts +1 -0
  272. package/dist/esm/utils/data/index.js +1 -0
  273. package/dist/esm/utils/data/uuid.utils.d.ts +5 -0
  274. package/dist/esm/utils/data/uuid.utils.js +14 -0
  275. package/dist/esm/utils/index.d.ts +6 -0
  276. package/dist/esm/utils/index.js +6 -0
  277. package/dist/esm/utils/logging/debug-logger.utils.d.ts +56 -0
  278. package/dist/esm/utils/logging/debug-logger.utils.js +136 -0
  279. package/dist/esm/utils/logging/index.d.ts +1 -0
  280. package/dist/esm/utils/logging/index.js +1 -0
  281. package/dist/esm/utils/network/index.d.ts +1 -0
  282. package/dist/esm/utils/network/index.js +1 -0
  283. package/dist/esm/utils/network/url.utils.d.ts +20 -0
  284. package/dist/esm/utils/network/url.utils.js +166 -0
  285. package/dist/esm/utils/security/index.d.ts +1 -0
  286. package/dist/esm/utils/security/index.js +1 -0
  287. package/dist/esm/utils/security/sanitize.utils.d.ts +32 -0
  288. package/dist/esm/utils/security/sanitize.utils.js +311 -0
  289. package/dist/esm/utils/validations/config-validations.utils.d.ts +42 -0
  290. package/dist/esm/utils/validations/config-validations.utils.js +289 -0
  291. package/dist/esm/utils/validations/event-validations.utils.d.ts +12 -0
  292. package/dist/esm/utils/validations/event-validations.utils.js +26 -0
  293. package/dist/esm/utils/validations/index.d.ts +5 -0
  294. package/dist/esm/utils/validations/index.js +5 -0
  295. package/dist/esm/utils/validations/metadata-validations.utils.d.ts +22 -0
  296. package/dist/esm/utils/validations/metadata-validations.utils.js +110 -0
  297. package/dist/esm/utils/validations/type-guards.utils.d.ts +6 -0
  298. package/dist/esm/utils/validations/type-guards.utils.js +27 -0
  299. package/dist/esm/utils/validations/url-validations.utils.d.ts +15 -0
  300. package/dist/esm/utils/validations/url-validations.utils.js +42 -0
  301. package/package.json +80 -0
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StorageManager = void 0;
4
+ const logging_1 = require("../utils/logging");
5
+ class StorageManager {
6
+ constructor() {
7
+ this.storage = null;
8
+ this.fallbackStorage = new Map();
9
+ this.storageAvailable = false;
10
+ this.storage = this.init();
11
+ this.storageAvailable = this.storage !== null;
12
+ if (!this.storageAvailable) {
13
+ logging_1.debugLog.warn('StorageManager', 'localStorage not available, using memory fallback');
14
+ }
15
+ }
16
+ getItem(key) {
17
+ if (!this.storageAvailable) {
18
+ return this.fallbackStorage.get(key) ?? null;
19
+ }
20
+ try {
21
+ if (this.storage) {
22
+ return this.storage.getItem(key);
23
+ }
24
+ return this.fallbackStorage.get(key) ?? null;
25
+ }
26
+ catch (error) {
27
+ logging_1.debugLog.warn('StorageManager', 'Storage getItem failed, using memory fallback', { key, error });
28
+ this.storageAvailable = false;
29
+ return this.fallbackStorage.get(key) ?? null;
30
+ }
31
+ }
32
+ setItem(key, value) {
33
+ if (!this.storageAvailable) {
34
+ this.fallbackStorage.set(key, value);
35
+ return;
36
+ }
37
+ try {
38
+ if (this.storage) {
39
+ this.storage.setItem(key, value);
40
+ return;
41
+ }
42
+ this.fallbackStorage.set(key, value);
43
+ }
44
+ catch (error) {
45
+ logging_1.debugLog.warn('StorageManager', 'Storage setItem failed, using memory fallback', { key, error });
46
+ this.storageAvailable = false;
47
+ this.fallbackStorage.set(key, value);
48
+ }
49
+ }
50
+ removeItem(key) {
51
+ if (!this.storageAvailable) {
52
+ this.fallbackStorage.delete(key);
53
+ return;
54
+ }
55
+ try {
56
+ if (this.storage) {
57
+ this.storage.removeItem(key);
58
+ return;
59
+ }
60
+ this.fallbackStorage.delete(key);
61
+ }
62
+ catch (error) {
63
+ logging_1.debugLog.warn('StorageManager', 'Storage removeItem failed, using memory fallback', { key, error });
64
+ this.storageAvailable = false;
65
+ this.fallbackStorage.delete(key);
66
+ }
67
+ }
68
+ init() {
69
+ try {
70
+ const test = '__storage_test__';
71
+ const storage = window['localStorage'];
72
+ storage.setItem(test, test);
73
+ storage.removeItem(test);
74
+ return storage;
75
+ }
76
+ catch {
77
+ return null;
78
+ }
79
+ }
80
+ }
81
+ exports.StorageManager = StorageManager;
@@ -0,0 +1,12 @@
1
+ import { DeviceType, EventData } from '../types';
2
+ import { StateManager } from './state.manager';
3
+ export declare class TagsManager extends StateManager {
4
+ getEventTagsIds(event: EventData, deviceType: DeviceType): string[];
5
+ private checkEventTypePageView;
6
+ private checkEventTypeClick;
7
+ private matchUrlMatches;
8
+ private matchDeviceType;
9
+ private matchElementSelector;
10
+ private matchUtmCondition;
11
+ private checkElementFieldEquals;
12
+ }
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TagsManager = void 0;
4
+ const types_1 = require("../types");
5
+ const state_manager_1 = require("./state.manager");
6
+ class TagsManager extends state_manager_1.StateManager {
7
+ getEventTagsIds(event, deviceType) {
8
+ switch (event.type) {
9
+ case types_1.EventType.PAGE_VIEW: {
10
+ return this.checkEventTypePageView(event, deviceType);
11
+ }
12
+ case types_1.EventType.CLICK: {
13
+ return this.checkEventTypeClick(event, deviceType);
14
+ }
15
+ default: {
16
+ return [];
17
+ }
18
+ }
19
+ }
20
+ checkEventTypePageView(event, deviceType) {
21
+ const tags = this.get('config')?.tags?.filter((tag) => tag.triggerType === types_1.EventType.PAGE_VIEW) ?? [];
22
+ if (tags.length === 0) {
23
+ return [];
24
+ }
25
+ const matchedTagIds = [];
26
+ for (const tag of tags) {
27
+ const { id, logicalOperator, conditions } = tag;
28
+ const results = [];
29
+ for (const condition of conditions) {
30
+ switch (condition.type) {
31
+ case types_1.TagConditionType.URL_MATCHES: {
32
+ results.push(this.matchUrlMatches(condition, event.page_url));
33
+ break;
34
+ }
35
+ case types_1.TagConditionType.DEVICE_TYPE: {
36
+ results.push(this.matchDeviceType(condition, deviceType));
37
+ break;
38
+ }
39
+ case types_1.TagConditionType.UTM_SOURCE: {
40
+ results.push(this.matchUtmCondition(condition, event.utm?.source));
41
+ break;
42
+ }
43
+ case types_1.TagConditionType.UTM_MEDIUM: {
44
+ results.push(this.matchUtmCondition(condition, event.utm?.medium));
45
+ break;
46
+ }
47
+ case types_1.TagConditionType.UTM_CAMPAIGN: {
48
+ results.push(this.matchUtmCondition(condition, event.utm?.campaign));
49
+ break;
50
+ }
51
+ }
52
+ }
53
+ let isMatch = false;
54
+ isMatch = logicalOperator === types_1.TagLogicalOperator.AND ? results.every(Boolean) : results.some(Boolean);
55
+ if (isMatch) {
56
+ matchedTagIds.push(id);
57
+ }
58
+ }
59
+ return matchedTagIds;
60
+ }
61
+ checkEventTypeClick(event, deviceType) {
62
+ const tags = this.get('config')?.tags?.filter((tag) => tag.triggerType === types_1.EventType.CLICK) ?? [];
63
+ if (tags.length === 0) {
64
+ return [];
65
+ }
66
+ const matchedTagIds = [];
67
+ for (const tag of tags) {
68
+ const { id, logicalOperator, conditions } = tag;
69
+ const results = [];
70
+ for (const condition of conditions) {
71
+ if (!event.click_data) {
72
+ results.push(false);
73
+ continue;
74
+ }
75
+ const clickData = event.click_data;
76
+ switch (condition.type) {
77
+ case types_1.TagConditionType.ELEMENT_MATCHES: {
78
+ results.push(this.matchElementSelector(condition, clickData));
79
+ break;
80
+ }
81
+ case types_1.TagConditionType.DEVICE_TYPE: {
82
+ results.push(this.matchDeviceType(condition, deviceType));
83
+ break;
84
+ }
85
+ case types_1.TagConditionType.URL_MATCHES: {
86
+ results.push(this.matchUrlMatches(condition, event.page_url));
87
+ break;
88
+ }
89
+ case types_1.TagConditionType.UTM_SOURCE: {
90
+ results.push(this.matchUtmCondition(condition, event.utm?.source));
91
+ break;
92
+ }
93
+ case types_1.TagConditionType.UTM_MEDIUM: {
94
+ results.push(this.matchUtmCondition(condition, event.utm?.medium));
95
+ break;
96
+ }
97
+ case types_1.TagConditionType.UTM_CAMPAIGN: {
98
+ results.push(this.matchUtmCondition(condition, event.utm?.campaign));
99
+ break;
100
+ }
101
+ }
102
+ }
103
+ let isMatch = false;
104
+ isMatch = logicalOperator === types_1.TagLogicalOperator.AND ? results.every(Boolean) : results.some(Boolean);
105
+ if (isMatch) {
106
+ matchedTagIds.push(id);
107
+ }
108
+ }
109
+ return matchedTagIds;
110
+ }
111
+ matchUrlMatches(condition, url) {
112
+ if (condition.type !== types_1.TagConditionType.URL_MATCHES) {
113
+ return false;
114
+ }
115
+ const targetValue = condition.value.toLowerCase();
116
+ const targetUrl = url.toLowerCase();
117
+ switch (condition.operator) {
118
+ case types_1.TagConditionOperator.EQUALS: {
119
+ return targetUrl === targetValue;
120
+ }
121
+ case types_1.TagConditionOperator.CONTAINS: {
122
+ return targetUrl.includes(targetValue);
123
+ }
124
+ case types_1.TagConditionOperator.STARTS_WITH: {
125
+ return targetUrl.startsWith(targetValue);
126
+ }
127
+ case types_1.TagConditionOperator.ENDS_WITH: {
128
+ return targetUrl.endsWith(targetValue);
129
+ }
130
+ case types_1.TagConditionOperator.REGEX: {
131
+ try {
132
+ const regex = new RegExp(targetValue, 'gi');
133
+ return regex.test(targetUrl);
134
+ }
135
+ catch {
136
+ return false;
137
+ }
138
+ }
139
+ default: {
140
+ return false;
141
+ }
142
+ }
143
+ }
144
+ matchDeviceType(condition, deviceType) {
145
+ if (condition.type !== types_1.TagConditionType.DEVICE_TYPE) {
146
+ return false;
147
+ }
148
+ const targetValue = condition.value.toLowerCase();
149
+ const targetDevice = deviceType.toLowerCase();
150
+ switch (condition.operator) {
151
+ case types_1.TagConditionOperator.EQUALS: {
152
+ return targetDevice === targetValue;
153
+ }
154
+ case types_1.TagConditionOperator.CONTAINS: {
155
+ return targetDevice.includes(targetValue);
156
+ }
157
+ case types_1.TagConditionOperator.STARTS_WITH: {
158
+ return targetDevice.startsWith(targetValue);
159
+ }
160
+ case types_1.TagConditionOperator.ENDS_WITH: {
161
+ return targetDevice.endsWith(targetValue);
162
+ }
163
+ case types_1.TagConditionOperator.REGEX: {
164
+ try {
165
+ const regex = new RegExp(targetValue, 'gi');
166
+ return regex.test(targetDevice);
167
+ }
168
+ catch {
169
+ return false;
170
+ }
171
+ }
172
+ default: {
173
+ return false;
174
+ }
175
+ }
176
+ }
177
+ matchElementSelector(condition, clickData) {
178
+ if (condition.type !== types_1.TagConditionType.ELEMENT_MATCHES) {
179
+ return false;
180
+ }
181
+ const elementData = [
182
+ clickData.id ?? '',
183
+ clickData.class ?? '',
184
+ clickData.tag ?? '',
185
+ clickData.text ?? '',
186
+ clickData.href ?? '',
187
+ clickData.title ?? '',
188
+ clickData.alt ?? '',
189
+ clickData.role ?? '',
190
+ clickData.ariaLabel ?? '',
191
+ ...Object.values(clickData.dataAttributes ?? {}),
192
+ ].join(' ');
193
+ const targetValue = condition.value.toLowerCase();
194
+ const targetElementData = elementData.toLowerCase();
195
+ switch (condition.operator) {
196
+ case types_1.TagConditionOperator.EQUALS: {
197
+ return this.checkElementFieldEquals(clickData, targetValue);
198
+ }
199
+ case types_1.TagConditionOperator.CONTAINS: {
200
+ return targetElementData.includes(targetValue);
201
+ }
202
+ case types_1.TagConditionOperator.STARTS_WITH: {
203
+ return targetElementData.startsWith(targetValue);
204
+ }
205
+ case types_1.TagConditionOperator.ENDS_WITH: {
206
+ return targetElementData.endsWith(targetValue);
207
+ }
208
+ case types_1.TagConditionOperator.REGEX: {
209
+ try {
210
+ const regex = new RegExp(targetValue, 'gi');
211
+ return regex.test(targetElementData);
212
+ }
213
+ catch {
214
+ return false;
215
+ }
216
+ }
217
+ default: {
218
+ return false;
219
+ }
220
+ }
221
+ }
222
+ matchUtmCondition(condition, utmValue) {
223
+ if (![types_1.TagConditionType.UTM_SOURCE, types_1.TagConditionType.UTM_MEDIUM, types_1.TagConditionType.UTM_CAMPAIGN].includes(condition.type)) {
224
+ return false;
225
+ }
226
+ const value = utmValue ?? '';
227
+ const targetValue = condition.value.toLowerCase();
228
+ const targetUtmValue = value.toLowerCase();
229
+ switch (condition.operator) {
230
+ case types_1.TagConditionOperator.EQUALS: {
231
+ return targetUtmValue === targetValue;
232
+ }
233
+ case types_1.TagConditionOperator.CONTAINS: {
234
+ return targetUtmValue.includes(targetValue);
235
+ }
236
+ case types_1.TagConditionOperator.STARTS_WITH: {
237
+ return targetUtmValue.startsWith(targetValue);
238
+ }
239
+ case types_1.TagConditionOperator.ENDS_WITH: {
240
+ return targetUtmValue.endsWith(targetValue);
241
+ }
242
+ case types_1.TagConditionOperator.REGEX: {
243
+ try {
244
+ const regex = new RegExp(targetValue, 'gi');
245
+ return regex.test(targetUtmValue);
246
+ }
247
+ catch {
248
+ return false;
249
+ }
250
+ }
251
+ default: {
252
+ return false;
253
+ }
254
+ }
255
+ }
256
+ checkElementFieldEquals(clickData, targetValue) {
257
+ const fields = [
258
+ clickData.id,
259
+ clickData.class,
260
+ clickData.tag,
261
+ clickData.text,
262
+ clickData.href,
263
+ clickData.title,
264
+ clickData.alt,
265
+ clickData.role,
266
+ clickData.ariaLabel,
267
+ ];
268
+ for (const field of fields) {
269
+ if (field) {
270
+ const fieldValue = field.toLowerCase();
271
+ const target = targetValue.toLowerCase();
272
+ if (fieldValue === target) {
273
+ return true;
274
+ }
275
+ }
276
+ }
277
+ if (clickData.dataAttributes) {
278
+ for (const dataValue of Object.values(clickData.dataAttributes)) {
279
+ const fieldValue = dataValue.toLowerCase();
280
+ const target = targetValue.toLowerCase();
281
+ if (fieldValue === target) {
282
+ return true;
283
+ }
284
+ }
285
+ }
286
+ return false;
287
+ }
288
+ }
289
+ exports.TagsManager = TagsManager;
@@ -0,0 +1,7 @@
1
+ import { StateManager } from './state.manager';
2
+ import { StorageManager } from './storage.manager';
3
+ export declare class UserManager extends StateManager {
4
+ private readonly storageManager;
5
+ constructor(storageManager: StorageManager);
6
+ getId(): string;
7
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserManager = void 0;
4
+ const constants_1 = require("../constants");
5
+ const utils_1 = require("../utils");
6
+ const state_manager_1 = require("./state.manager");
7
+ class UserManager extends state_manager_1.StateManager {
8
+ constructor(storageManager) {
9
+ super();
10
+ this.storageManager = storageManager;
11
+ }
12
+ getId() {
13
+ const storedUserId = this.storageManager.getItem((0, constants_1.USER_ID_KEY)(this.get('config')?.id));
14
+ if (storedUserId) {
15
+ return storedUserId;
16
+ }
17
+ const newUserId = (0, utils_1.generateUUID)();
18
+ this.storageManager.setItem((0, constants_1.USER_ID_KEY)(this.get('config')?.id), newUserId);
19
+ return newUserId;
20
+ }
21
+ }
22
+ exports.UserManager = UserManager;
@@ -0,0 +1 @@
1
+ export * as TraceLog from './api';
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TraceLog = void 0;
37
+ exports.TraceLog = __importStar(require("./api"));
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Special project IDs for testing and development
3
+ *
4
+ * Both automatically force mode: 'debug' but differ in HTTP behavior:
5
+ * - HttpSkip: NO network calls (pure offline testing)
6
+ * - HttpLocal: Makes network calls to local server (integration testing)
7
+ */
8
+ export declare enum SpecialProjectId {
9
+ /**
10
+ * Skips ALL HTTP calls - no config fetch, no event sending
11
+ * Uses default local config, forces debug mode
12
+ * Perfect for pure offline E2E testing
13
+ */
14
+ HttpSkip = "http-skip",
15
+ /**
16
+ * Makes HTTP calls to window.location.origin instead of production API
17
+ * Fetches config and sends events to local server, forces debug mode
18
+ * Perfect for local development with running middleware
19
+ */
20
+ HttpLocal = "http-local"
21
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SpecialProjectId = void 0;
4
+ /**
5
+ * Special project IDs for testing and development
6
+ *
7
+ * Both automatically force mode: 'debug' but differ in HTTP behavior:
8
+ * - HttpSkip: NO network calls (pure offline testing)
9
+ * - HttpLocal: Makes network calls to local server (integration testing)
10
+ */
11
+ var SpecialProjectId;
12
+ (function (SpecialProjectId) {
13
+ /**
14
+ * Skips ALL HTTP calls - no config fetch, no event sending
15
+ * Uses default local config, forces debug mode
16
+ * Perfect for pure offline E2E testing
17
+ */
18
+ SpecialProjectId["HttpSkip"] = "http-skip";
19
+ /**
20
+ * Makes HTTP calls to window.location.origin instead of production API
21
+ * Fetches config and sends events to local server, forces debug mode
22
+ * Perfect for local development with running middleware
23
+ */
24
+ SpecialProjectId["HttpLocal"] = "http-local";
25
+ })(SpecialProjectId || (exports.SpecialProjectId = SpecialProjectId = {}));
@@ -0,0 +1 @@
1
+ export type MetadataType = string | number | boolean | string[];
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,104 @@
1
+ import { MetadataType } from './common.types';
2
+ import { TagConfig } from './tag.types';
3
+ import { Mode } from './mode.types';
4
+ export type Config = ApiConfig & AppConfig;
5
+ export interface ApiConfig {
6
+ /**
7
+ * Logging mode for the library.
8
+ * - 'qa': Shows client-facing logs only (INFO, CLIENT_WARN, CLIENT_ERROR)
9
+ * - 'debug': Shows all logs including internal library errors
10
+ */
11
+ mode?: Mode;
12
+ /**
13
+ * Sampling rate as a percentage (0-1) to control how many events are sent.
14
+ * A value of 1 means all events are sent, while 0.5 means only half of events are sent.
15
+ */
16
+ samplingRate?: number;
17
+ /**
18
+ * Array of tag configurations for categorizing and filtering events.
19
+ * Tags help organize and segment tracking data for analysis.
20
+ */
21
+ tags?: TagConfig[];
22
+ /**
23
+ * Array of URL path patterns to exclude from tracking.
24
+ * Events will not be sent for pages matching these patterns.
25
+ */
26
+ excludedUrlPaths?: string[];
27
+ /**
28
+ * Flag to indicate if IP addresses should be excluded from tracking.
29
+ * When true, IP addresses will not be collected or sent with events.
30
+ * This is useful for privacy compliance and reducing data exposure.
31
+ */
32
+ ipExcluded?: boolean;
33
+ }
34
+ export interface AppConfig {
35
+ /**
36
+ * Unique project identifier.
37
+ */
38
+ id: string;
39
+ /**
40
+ * Session timeout in milliseconds. After this period of inactivity,
41
+ * a new session will be started for subsequent events.
42
+ *
43
+ * **Timeout Guidelines:**
44
+ * - **15 minutes (default)**: Recommended for most applications, aligns with security best practices
45
+ * - **30 minutes**: Standard for content-heavy sites (matches Google Analytics default)
46
+ * - **45-60 minutes**: Consider for sites with long-form content, videos, or documentation
47
+ * - **5-10 minutes**: Use for security-sensitive applications requiring frequent re-authentication
48
+ *
49
+ * **Impact on Analytics:**
50
+ * - Shorter timeouts = Higher session count, higher bounce rate, potentially lower conversion rates
51
+ * - Longer timeouts = Lower session count, more accurate user journey tracking, better conversion attribution
52
+ *
53
+ * **When to Adjust:**
54
+ * - Match your application's auto-logout timeout if applicable
55
+ * - Increase for content where users frequently pause (tutorials, long articles, videos)
56
+ * - Decrease for applications with sensitive data or frequent security requirements
57
+ * - Monitor bounce rates and conversion funnels when changing this value
58
+ *
59
+ * @default 900000 (15 minutes)
60
+ * @min 30000 (30 seconds)
61
+ * @max 86400000 (24 hours)
62
+ */
63
+ sessionTimeout?: number;
64
+ /**
65
+ * Metadata that will be automatically attached to all tracking events.
66
+ * These key-value pairs provide additional context for every event sent.
67
+ */
68
+ globalMetadata?: Record<string, MetadataType>;
69
+ /**
70
+ * CSS selectors for custom scroll containers. Can be a single selector string
71
+ * or an array of selectors. Used to track scroll events within specific elements
72
+ * instead of the default window scroll.
73
+ */
74
+ scrollContainerSelectors?: string | string[];
75
+ /**
76
+ * Allow HTTP requests to be made. This is useful for testing and development.
77
+ */
78
+ allowHttp?: boolean;
79
+ /**
80
+ * Array of query parameters to be removed from the URL.
81
+ */
82
+ sensitiveQueryParams?: string[];
83
+ /**
84
+ * Sampling rate for error events (0-1).
85
+ * Controls how many error and network error events are captured.
86
+ * @default 0.1 for production, 1.0 for qa/debug mode
87
+ */
88
+ errorSampling?: number;
89
+ /**
90
+ * Optional integrations configuration.
91
+ */
92
+ integrations?: {
93
+ /**
94
+ * Google Analytics integration configuration.
95
+ */
96
+ googleAnalytics?: {
97
+ /**
98
+ * Google Analytics measurement ID.
99
+ * Required for initializing the Google Analytics integration.
100
+ */
101
+ measurementId: string;
102
+ };
103
+ };
104
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ export declare enum DeviceType {
2
+ Mobile = "mobile",
3
+ Tablet = "tablet",
4
+ Desktop = "desktop",
5
+ Unknown = "unknown"
6
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeviceType = void 0;
4
+ var DeviceType;
5
+ (function (DeviceType) {
6
+ DeviceType["Mobile"] = "mobile";
7
+ DeviceType["Tablet"] = "tablet";
8
+ DeviceType["Desktop"] = "desktop";
9
+ DeviceType["Unknown"] = "unknown";
10
+ })(DeviceType || (exports.DeviceType = DeviceType = {}));