@openobserve/browser-core 0.2.11-rc1 → 0.2.12-beta.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 (626) hide show
  1. package/package.json +6 -5
  2. package/src/boot/displayAlreadyInitializedError.ts +8 -0
  3. package/src/boot/init.ts +29 -15
  4. package/src/browser/addEventListener.ts +13 -10
  5. package/src/browser/{types.ts → browser.types.ts} +42 -0
  6. package/src/browser/cookie.ts +49 -14
  7. package/src/browser/fetchObservable.ts +80 -21
  8. package/src/browser/{pageExitObservable.ts → pageMayExitObservable.ts} +11 -22
  9. package/src/browser/runOnReadyState.ts +14 -4
  10. package/src/browser/xhrObservable.ts +17 -4
  11. package/src/domain/allowedTrackingOrigins.ts +30 -0
  12. package/src/domain/bufferedData.ts +32 -0
  13. package/src/domain/configuration/configuration.ts +352 -83
  14. package/src/domain/configuration/endpointBuilder.ts +29 -32
  15. package/src/domain/configuration/index.ts +6 -5
  16. package/src/domain/configuration/transportConfiguration.ts +42 -35
  17. package/src/domain/connectivity/connectivity.ts +5 -1
  18. package/src/domain/console/consoleObservable.ts +57 -21
  19. package/src/domain/context/contextConstants.ts +22 -0
  20. package/src/domain/context/contextManager.ts +48 -11
  21. package/src/domain/context/contextUtils.ts +14 -0
  22. package/src/domain/context/defineContextMethod.ts +31 -0
  23. package/src/domain/context/storeContextManager.ts +7 -3
  24. package/src/domain/contexts/accountContext.ts +47 -0
  25. package/src/domain/contexts/globalContext.ts +30 -0
  26. package/src/domain/contexts/rumInternalContext.type.ts +15 -0
  27. package/src/domain/contexts/userContext.ts +64 -0
  28. package/src/domain/deflate/{types.ts → deflate.types.ts} +6 -4
  29. package/src/domain/deflate/index.ts +1 -1
  30. package/src/domain/error/error.ts +28 -84
  31. package/src/domain/error/error.types.ts +10 -2
  32. package/src/domain/error/trackRuntimeError.ts +29 -32
  33. package/src/domain/eventRateLimiter/createEventRateLimiter.ts +5 -2
  34. package/src/domain/extension/extensionUtils.ts +28 -0
  35. package/src/domain/intakeSites.ts +18 -0
  36. package/src/domain/report/reportObservable.ts +35 -30
  37. package/src/domain/resourceUtils.ts +20 -16
  38. package/src/domain/session/README.md +193 -0
  39. package/src/domain/session/oldCookiesMigration.ts +2 -2
  40. package/src/domain/session/sessionConstants.ts +16 -1
  41. package/src/domain/session/sessionManager.ts +179 -15
  42. package/src/domain/session/sessionState.ts +49 -17
  43. package/src/domain/session/sessionStateValidation.ts +9 -0
  44. package/src/domain/session/sessionStore.ts +118 -55
  45. package/src/domain/session/sessionStoreOperations.ts +47 -20
  46. package/src/domain/session/storeStrategies/sessionInCookie.ts +105 -26
  47. package/src/domain/session/storeStrategies/sessionInLocalStorage.ts +10 -8
  48. package/src/domain/session/storeStrategies/sessionStoreStrategy.ts +5 -2
  49. package/src/domain/synthetics/syntheticsWorkerValues.ts +13 -2
  50. package/src/domain/tags.ts +76 -0
  51. package/src/domain/telemetry/index.ts +12 -4
  52. package/src/domain/telemetry/rawTelemetryEvent.types.ts +6 -3
  53. package/src/domain/telemetry/telemetry.ts +235 -106
  54. package/src/domain/telemetry/telemetryEvent.types.ts +514 -5
  55. package/src/domain/trackingConsent.ts +34 -0
  56. package/src/index.ts +90 -59
  57. package/src/tools/abstractHooks.ts +72 -0
  58. package/src/tools/abstractLifeCycle.ts +1 -0
  59. package/src/tools/boundedBuffer.ts +36 -8
  60. package/src/tools/display.ts +4 -0
  61. package/src/tools/encoder.ts +3 -2
  62. package/src/tools/experimentalFeatures.ts +18 -7
  63. package/src/tools/getZoneJsOriginalValue.ts +1 -1
  64. package/src/tools/{getGlobalObject.ts → globalObject.ts} +20 -0
  65. package/src/tools/instrumentMethod.ts +58 -41
  66. package/src/tools/matchOption.ts +1 -2
  67. package/src/tools/monitor.ts +11 -7
  68. package/src/tools/observable.ts +78 -12
  69. package/src/tools/queueMicrotask.ts +13 -0
  70. package/src/tools/readBytesFromStream.ts +24 -64
  71. package/src/tools/requestIdleCallback.ts +40 -0
  72. package/src/tools/sendToExtension.ts +3 -1
  73. package/src/tools/serialisation/context.ts +4 -1
  74. package/src/tools/serialisation/sanitize.ts +32 -14
  75. package/src/{domain/error → tools/stackTrace}/computeStackTrace.ts +72 -8
  76. package/src/tools/stackTrace/handlingStack.ts +48 -0
  77. package/src/tools/taskQueue.ts +63 -0
  78. package/src/tools/timer.ts +1 -1
  79. package/src/tools/utils/arrayUtils.ts +11 -3
  80. package/src/tools/utils/browserDetection.ts +0 -9
  81. package/src/tools/utils/byteUtils.ts +13 -2
  82. package/src/tools/utils/functionUtils.ts +0 -2
  83. package/src/tools/utils/numberUtils.ts +2 -1
  84. package/src/tools/utils/objectUtils.ts +1 -3
  85. package/src/tools/utils/polyfills.ts +6 -107
  86. package/src/tools/utils/responseUtils.ts +1 -1
  87. package/src/tools/utils/stringUtils.ts +34 -2
  88. package/src/tools/utils/timeUtils.ts +18 -13
  89. package/src/tools/utils/timezone.ts +9 -0
  90. package/src/tools/utils/urlPolyfill.ts +29 -59
  91. package/src/tools/valueHistory.ts +66 -35
  92. package/src/transport/batch.ts +77 -80
  93. package/src/transport/eventBridge.ts +24 -5
  94. package/src/transport/flushController.ts +27 -21
  95. package/src/transport/httpRequest.ts +92 -71
  96. package/src/transport/index.ts +7 -4
  97. package/src/transport/sendWithRetryStrategy.ts +55 -36
  98. package/cjs/boot/init.d.ts +0 -5
  99. package/cjs/boot/init.js +0 -36
  100. package/cjs/boot/init.js.map +0 -1
  101. package/cjs/browser/addEventListener.d.ts +0 -84
  102. package/cjs/browser/addEventListener.js +0 -94
  103. package/cjs/browser/addEventListener.js.map +0 -1
  104. package/cjs/browser/cookie.d.ts +0 -17
  105. package/cjs/browser/cookie.js +0 -86
  106. package/cjs/browser/cookie.js.map +0 -1
  107. package/cjs/browser/fetchObservable.d.ts +0 -23
  108. package/cjs/browser/fetchObservable.js +0 -69
  109. package/cjs/browser/fetchObservable.js.map +0 -1
  110. package/cjs/browser/pageExitObservable.d.ts +0 -14
  111. package/cjs/browser/pageExitObservable.js +0 -57
  112. package/cjs/browser/pageExitObservable.js.map +0 -1
  113. package/cjs/browser/runOnReadyState.d.ts +0 -2
  114. package/cjs/browser/runOnReadyState.js +0 -15
  115. package/cjs/browser/runOnReadyState.js.map +0 -1
  116. package/cjs/browser/types.d.ts +0 -19
  117. package/cjs/browser/types.js +0 -6
  118. package/cjs/browser/types.js.map +0 -1
  119. package/cjs/browser/xhrObservable.d.ts +0 -21
  120. package/cjs/browser/xhrObservable.js +0 -85
  121. package/cjs/browser/xhrObservable.js.map +0 -1
  122. package/cjs/domain/configuration/configuration.d.ts +0 -72
  123. package/cjs/domain/configuration/configuration.js +0 -94
  124. package/cjs/domain/configuration/configuration.js.map +0 -1
  125. package/cjs/domain/configuration/endpointBuilder.d.ts +0 -10
  126. package/cjs/domain/configuration/endpointBuilder.js +0 -84
  127. package/cjs/domain/configuration/endpointBuilder.js.map +0 -1
  128. package/cjs/domain/configuration/index.d.ts +0 -4
  129. package/cjs/domain/configuration/index.js +0 -27
  130. package/cjs/domain/configuration/index.js.map +0 -1
  131. package/cjs/domain/configuration/intakeSites.d.ts +0 -5
  132. package/cjs/domain/configuration/intakeSites.js +0 -9
  133. package/cjs/domain/configuration/intakeSites.js.map +0 -1
  134. package/cjs/domain/configuration/tags.d.ts +0 -4
  135. package/cjs/domain/configuration/tags.js +0 -39
  136. package/cjs/domain/configuration/tags.js.map +0 -1
  137. package/cjs/domain/configuration/transportConfiguration.d.ts +0 -16
  138. package/cjs/domain/configuration/transportConfiguration.js +0 -42
  139. package/cjs/domain/configuration/transportConfiguration.js.map +0 -1
  140. package/cjs/domain/connectivity/connectivity.d.ts +0 -13
  141. package/cjs/domain/connectivity/connectivity.js +0 -14
  142. package/cjs/domain/connectivity/connectivity.js.map +0 -1
  143. package/cjs/domain/connectivity/index.d.ts +0 -1
  144. package/cjs/domain/connectivity/index.js +0 -18
  145. package/cjs/domain/connectivity/index.js.map +0 -1
  146. package/cjs/domain/console/consoleObservable.d.ts +0 -11
  147. package/cjs/domain/console/consoleObservable.js +0 -72
  148. package/cjs/domain/console/consoleObservable.js.map +0 -1
  149. package/cjs/domain/context/contextConstants.d.ts +0 -5
  150. package/cjs/domain/context/contextConstants.js +0 -3
  151. package/cjs/domain/context/contextConstants.js.map +0 -1
  152. package/cjs/domain/context/contextManager.d.ts +0 -12
  153. package/cjs/domain/context/contextManager.js +0 -43
  154. package/cjs/domain/context/contextManager.js.map +0 -1
  155. package/cjs/domain/context/customerDataTracker.d.ts +0 -45
  156. package/cjs/domain/context/customerDataTracker.js +0 -107
  157. package/cjs/domain/context/customerDataTracker.js.map +0 -1
  158. package/cjs/domain/context/storeContextManager.d.ts +0 -6
  159. package/cjs/domain/context/storeContextManager.js +0 -38
  160. package/cjs/domain/context/storeContextManager.js.map +0 -1
  161. package/cjs/domain/deflate/types.d.ts +0 -0
  162. package/cjs/domain/deflate/types.js +0 -3
  163. package/cjs/domain/deflate/types.js.map +0 -1
  164. package/cjs/domain/error/computeStackTrace.d.ts +0 -33
  165. package/cjs/domain/error/computeStackTrace.js +0 -142
  166. package/cjs/domain/error/computeStackTrace.js.map +0 -1
  167. package/cjs/domain/error/error.d.ts +0 -28
  168. package/cjs/domain/error/error.js +0 -131
  169. package/cjs/domain/error/error.js.map +0 -1
  170. package/cjs/domain/error/error.types.d.ts +0 -40
  171. package/cjs/domain/error/error.types.js +0 -13
  172. package/cjs/domain/error/error.types.js.map +0 -1
  173. package/cjs/domain/error/trackRuntimeError.d.ts +0 -13
  174. package/cjs/domain/error/trackRuntimeError.js +0 -54
  175. package/cjs/domain/error/trackRuntimeError.js.map +0 -1
  176. package/cjs/domain/eventRateLimiter/createEventRateLimiter.d.ts +0 -5
  177. package/cjs/domain/eventRateLimiter/createEventRateLimiter.js +0 -40
  178. package/cjs/domain/eventRateLimiter/createEventRateLimiter.js.map +0 -1
  179. package/cjs/domain/report/browser.types.d.ts +0 -34
  180. package/cjs/domain/report/browser.types.js +0 -3
  181. package/cjs/domain/report/browser.types.js.map +0 -1
  182. package/cjs/domain/report/reportObservable.d.ts +0 -17
  183. package/cjs/domain/report/reportObservable.js +0 -94
  184. package/cjs/domain/report/reportObservable.js.map +0 -1
  185. package/cjs/domain/resourceUtils.d.ts +0 -16
  186. package/cjs/domain/resourceUtils.js +0 -3
  187. package/cjs/domain/resourceUtils.js.map +0 -1
  188. package/cjs/domain/session/oldCookiesMigration.d.ts +0 -11
  189. package/cjs/domain/session/oldCookiesMigration.js +0 -40
  190. package/cjs/domain/session/oldCookiesMigration.js.map +0 -1
  191. package/cjs/domain/session/sessionConstants.d.ts +0 -2
  192. package/cjs/domain/session/sessionConstants.js +0 -7
  193. package/cjs/domain/session/sessionConstants.js.map +0 -1
  194. package/cjs/domain/session/sessionManager.d.ts +0 -20
  195. package/cjs/domain/session/sessionManager.js +0 -65
  196. package/cjs/domain/session/sessionManager.js.map +0 -1
  197. package/cjs/domain/session/sessionState.d.ts +0 -11
  198. package/cjs/domain/session/sessionState.js +0 -45
  199. package/cjs/domain/session/sessionState.js.map +0 -1
  200. package/cjs/domain/session/sessionStore.d.ts +0 -34
  201. package/cjs/domain/session/sessionStore.js +0 -144
  202. package/cjs/domain/session/sessionStore.js.map +0 -1
  203. package/cjs/domain/session/sessionStoreOperations.d.ts +0 -10
  204. package/cjs/domain/session/sessionStoreOperations.js +0 -96
  205. package/cjs/domain/session/sessionStoreOperations.js.map +0 -1
  206. package/cjs/domain/session/storeStrategies/sessionInCookie.d.ts +0 -6
  207. package/cjs/domain/session/storeStrategies/sessionInCookie.js +0 -59
  208. package/cjs/domain/session/storeStrategies/sessionInCookie.js.map +0 -1
  209. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.d.ts +0 -3
  210. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js +0 -41
  211. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js.map +0 -1
  212. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.d.ts +0 -15
  213. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js +0 -5
  214. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js.map +0 -1
  215. package/cjs/domain/synthetics/syntheticsWorkerValues.d.ts +0 -11
  216. package/cjs/domain/synthetics/syntheticsWorkerValues.js +0 -22
  217. package/cjs/domain/synthetics/syntheticsWorkerValues.js.map +0 -1
  218. package/cjs/domain/telemetry/index.d.ts +0 -3
  219. package/cjs/domain/telemetry/index.js +0 -28
  220. package/cjs/domain/telemetry/index.js.map +0 -1
  221. package/cjs/domain/telemetry/rawTelemetryEvent.types.d.ts +0 -15
  222. package/cjs/domain/telemetry/rawTelemetryEvent.types.js +0 -8
  223. package/cjs/domain/telemetry/rawTelemetryEvent.types.js.map +0 -1
  224. package/cjs/domain/telemetry/telemetry.d.ts +0 -116
  225. package/cjs/domain/telemetry/telemetry.js +0 -157
  226. package/cjs/domain/telemetry/telemetry.js.map +0 -1
  227. package/cjs/domain/telemetry/telemetryEvent.types.d.ts +0 -391
  228. package/cjs/domain/telemetry/telemetryEvent.types.js +0 -7
  229. package/cjs/domain/telemetry/telemetryEvent.types.js.map +0 -1
  230. package/cjs/domain/user/index.d.ts +0 -2
  231. package/cjs/domain/user/index.js +0 -19
  232. package/cjs/domain/user/index.js.map +0 -1
  233. package/cjs/domain/user/user.d.ts +0 -12
  234. package/cjs/domain/user/user.js +0 -35
  235. package/cjs/domain/user/user.js.map +0 -1
  236. package/cjs/domain/user/user.types.d.ts +0 -6
  237. package/cjs/domain/user/user.types.js +0 -3
  238. package/cjs/domain/user/user.types.js.map +0 -1
  239. package/cjs/tools/abstractLifeCycle.d.ts +0 -23
  240. package/cjs/tools/abstractLifeCycle.js +0 -29
  241. package/cjs/tools/abstractLifeCycle.js.map +0 -1
  242. package/cjs/tools/boundedBuffer.d.ts +0 -5
  243. package/cjs/tools/boundedBuffer.js +0 -22
  244. package/cjs/tools/boundedBuffer.js.map +0 -1
  245. package/cjs/tools/catchUserErrors.d.ts +0 -1
  246. package/cjs/tools/catchUserErrors.js +0 -20
  247. package/cjs/tools/catchUserErrors.js.map +0 -1
  248. package/cjs/tools/display.d.ts +0 -35
  249. package/cjs/tools/display.js +0 -41
  250. package/cjs/tools/display.js.map +0 -1
  251. package/cjs/tools/encoder.d.ts +0 -53
  252. package/cjs/tools/encoder.js +0 -41
  253. package/cjs/tools/encoder.js.map +0 -1
  254. package/cjs/tools/experimentalFeatures.d.ts +0 -22
  255. package/cjs/tools/experimentalFeatures.js +0 -45
  256. package/cjs/tools/experimentalFeatures.js.map +0 -1
  257. package/cjs/tools/getGlobalObject.d.ts +0 -4
  258. package/cjs/tools/getGlobalObject.js +0 -37
  259. package/cjs/tools/getGlobalObject.js.map +0 -1
  260. package/cjs/tools/getZoneJsOriginalValue.d.ts +0 -19
  261. package/cjs/tools/getZoneJsOriginalValue.js +0 -30
  262. package/cjs/tools/getZoneJsOriginalValue.js.map +0 -1
  263. package/cjs/tools/instrumentMethod.d.ts +0 -59
  264. package/cjs/tools/instrumentMethod.js +0 -106
  265. package/cjs/tools/instrumentMethod.js.map +0 -1
  266. package/cjs/tools/matchOption.d.ts +0 -8
  267. package/cjs/tools/matchOption.js +0 -38
  268. package/cjs/tools/matchOption.js.map +0 -1
  269. package/cjs/tools/mergeInto.d.ts +0 -25
  270. package/cjs/tools/mergeInto.js +0 -105
  271. package/cjs/tools/mergeInto.js.map +0 -1
  272. package/cjs/tools/monitor.d.ts +0 -8
  273. package/cjs/tools/monitor.js +0 -76
  274. package/cjs/tools/monitor.js.map +0 -1
  275. package/cjs/tools/observable.d.ts +0 -12
  276. package/cjs/tools/observable.js +0 -43
  277. package/cjs/tools/observable.js.map +0 -1
  278. package/cjs/tools/readBytesFromStream.d.ts +0 -11
  279. package/cjs/tools/readBytesFromStream.js +0 -64
  280. package/cjs/tools/readBytesFromStream.js.map +0 -1
  281. package/cjs/tools/sendToExtension.d.ts +0 -3
  282. package/cjs/tools/sendToExtension.js +0 -11
  283. package/cjs/tools/sendToExtension.js.map +0 -1
  284. package/cjs/tools/serialisation/context.d.ts +0 -6
  285. package/cjs/tools/serialisation/context.js +0 -3
  286. package/cjs/tools/serialisation/context.js.map +0 -1
  287. package/cjs/tools/serialisation/jsonStringify.d.ts +0 -13
  288. package/cjs/tools/serialisation/jsonStringify.js +0 -49
  289. package/cjs/tools/serialisation/jsonStringify.js.map +0 -1
  290. package/cjs/tools/serialisation/sanitize.d.ts +0 -18
  291. package/cjs/tools/serialisation/sanitize.js +0 -185
  292. package/cjs/tools/serialisation/sanitize.js.map +0 -1
  293. package/cjs/tools/timer.d.ts +0 -5
  294. package/cjs/tools/timer.js +0 -23
  295. package/cjs/tools/timer.js.map +0 -1
  296. package/cjs/tools/utils/arrayUtils.d.ts +0 -1
  297. package/cjs/tools/utils/arrayUtils.js +0 -11
  298. package/cjs/tools/utils/arrayUtils.js.map +0 -1
  299. package/cjs/tools/utils/browserDetection.d.ts +0 -10
  300. package/cjs/tools/utils/browserDetection.js +0 -42
  301. package/cjs/tools/utils/browserDetection.js.map +0 -1
  302. package/cjs/tools/utils/byteUtils.d.ts +0 -4
  303. package/cjs/tools/utils/byteUtils.js +0 -31
  304. package/cjs/tools/utils/byteUtils.js.map +0 -1
  305. package/cjs/tools/utils/functionUtils.d.ts +0 -9
  306. package/cjs/tools/utils/functionUtils.js +0 -48
  307. package/cjs/tools/utils/functionUtils.js.map +0 -1
  308. package/cjs/tools/utils/numberUtils.d.ts +0 -8
  309. package/cjs/tools/utils/numberUtils.js +0 -24
  310. package/cjs/tools/utils/numberUtils.js.map +0 -1
  311. package/cjs/tools/utils/objectUtils.d.ts +0 -10
  312. package/cjs/tools/utils/objectUtils.js +0 -26
  313. package/cjs/tools/utils/objectUtils.js.map +0 -1
  314. package/cjs/tools/utils/polyfills.d.ts +0 -24
  315. package/cjs/tools/utils/polyfills.js +0 -110
  316. package/cjs/tools/utils/polyfills.js.map +0 -1
  317. package/cjs/tools/utils/responseUtils.d.ts +0 -2
  318. package/cjs/tools/utils/responseUtils.js +0 -18
  319. package/cjs/tools/utils/responseUtils.js.map +0 -1
  320. package/cjs/tools/utils/stringUtils.d.ts +0 -8
  321. package/cjs/tools/utils/stringUtils.js +0 -59
  322. package/cjs/tools/utils/stringUtils.js.map +0 -1
  323. package/cjs/tools/utils/timeUtils.d.ts +0 -57
  324. package/cjs/tools/utils/timeUtils.js +0 -99
  325. package/cjs/tools/utils/timeUtils.js.map +0 -1
  326. package/cjs/tools/utils/typeUtils.d.ts +0 -4
  327. package/cjs/tools/utils/typeUtils.js +0 -17
  328. package/cjs/tools/utils/typeUtils.js.map +0 -1
  329. package/cjs/tools/utils/urlPolyfill.d.ts +0 -14
  330. package/cjs/tools/utils/urlPolyfill.js +0 -92
  331. package/cjs/tools/utils/urlPolyfill.js.map +0 -1
  332. package/cjs/tools/valueHistory.d.ts +0 -50
  333. package/cjs/tools/valueHistory.js +0 -106
  334. package/cjs/tools/valueHistory.js.map +0 -1
  335. package/cjs/transport/batch.d.ts +0 -21
  336. package/cjs/transport/batch.js +0 -123
  337. package/cjs/transport/batch.js.map +0 -1
  338. package/cjs/transport/eventBridge.d.ts +0 -12
  339. package/cjs/transport/eventBridge.js +0 -34
  340. package/cjs/transport/eventBridge.js.map +0 -1
  341. package/cjs/transport/flushController.d.ts +0 -58
  342. package/cjs/transport/flushController.js +0 -112
  343. package/cjs/transport/flushController.js.map +0 -1
  344. package/cjs/transport/httpRequest.d.ts +0 -38
  345. package/cjs/transport/httpRequest.js +0 -95
  346. package/cjs/transport/httpRequest.js.map +0 -1
  347. package/cjs/transport/index.d.ts +0 -4
  348. package/cjs/transport/index.js +0 -13
  349. package/cjs/transport/index.js.map +0 -1
  350. package/cjs/transport/sendWithRetryStrategy.d.ts +0 -39
  351. package/cjs/transport/sendWithRetryStrategy.js +0 -151
  352. package/cjs/transport/sendWithRetryStrategy.js.map +0 -1
  353. package/cjs/transport/startBatchWithReplica.d.ts +0 -20
  354. package/cjs/transport/startBatchWithReplica.js +0 -42
  355. package/cjs/transport/startBatchWithReplica.js.map +0 -1
  356. package/esm/boot/init.d.ts +0 -5
  357. package/esm/boot/init.js +0 -31
  358. package/esm/boot/init.js.map +0 -1
  359. package/esm/browser/addEventListener.d.ts +0 -84
  360. package/esm/browser/addEventListener.js +0 -89
  361. package/esm/browser/addEventListener.js.map +0 -1
  362. package/esm/browser/cookie.d.ts +0 -17
  363. package/esm/browser/cookie.js +0 -76
  364. package/esm/browser/cookie.js.map +0 -1
  365. package/esm/browser/fetchObservable.d.ts +0 -23
  366. package/esm/browser/fetchObservable.js +0 -65
  367. package/esm/browser/fetchObservable.js.map +0 -1
  368. package/esm/browser/pageExitObservable.d.ts +0 -14
  369. package/esm/browser/pageExitObservable.js +0 -52
  370. package/esm/browser/pageExitObservable.js.map +0 -1
  371. package/esm/browser/runOnReadyState.d.ts +0 -2
  372. package/esm/browser/runOnReadyState.js +0 -11
  373. package/esm/browser/runOnReadyState.js.map +0 -1
  374. package/esm/browser/types.d.ts +0 -19
  375. package/esm/browser/types.js +0 -5
  376. package/esm/browser/types.js.map +0 -1
  377. package/esm/browser/xhrObservable.d.ts +0 -21
  378. package/esm/browser/xhrObservable.js +0 -81
  379. package/esm/browser/xhrObservable.js.map +0 -1
  380. package/esm/domain/configuration/configuration.d.ts +0 -72
  381. package/esm/domain/configuration/configuration.js +0 -89
  382. package/esm/domain/configuration/configuration.js.map +0 -1
  383. package/esm/domain/configuration/endpointBuilder.d.ts +0 -10
  384. package/esm/domain/configuration/endpointBuilder.js +0 -80
  385. package/esm/domain/configuration/endpointBuilder.js.map +0 -1
  386. package/esm/domain/configuration/index.d.ts +0 -4
  387. package/esm/domain/configuration/index.js +0 -5
  388. package/esm/domain/configuration/index.js.map +0 -1
  389. package/esm/domain/configuration/intakeSites.d.ts +0 -5
  390. package/esm/domain/configuration/intakeSites.js +0 -6
  391. package/esm/domain/configuration/intakeSites.js.map +0 -1
  392. package/esm/domain/configuration/tags.d.ts +0 -4
  393. package/esm/domain/configuration/tags.js +0 -34
  394. package/esm/domain/configuration/tags.js.map +0 -1
  395. package/esm/domain/configuration/transportConfiguration.d.ts +0 -16
  396. package/esm/domain/configuration/transportConfiguration.js +0 -38
  397. package/esm/domain/configuration/transportConfiguration.js.map +0 -1
  398. package/esm/domain/connectivity/connectivity.d.ts +0 -13
  399. package/esm/domain/connectivity/connectivity.js +0 -10
  400. package/esm/domain/connectivity/connectivity.js.map +0 -1
  401. package/esm/domain/connectivity/index.d.ts +0 -1
  402. package/esm/domain/connectivity/index.js +0 -2
  403. package/esm/domain/connectivity/index.js.map +0 -1
  404. package/esm/domain/console/consoleObservable.d.ts +0 -11
  405. package/esm/domain/console/consoleObservable.js +0 -67
  406. package/esm/domain/console/consoleObservable.js.map +0 -1
  407. package/esm/domain/context/contextConstants.d.ts +0 -5
  408. package/esm/domain/context/contextConstants.js +0 -2
  409. package/esm/domain/context/contextConstants.js.map +0 -1
  410. package/esm/domain/context/contextManager.d.ts +0 -12
  411. package/esm/domain/context/contextManager.js +0 -39
  412. package/esm/domain/context/contextManager.js.map +0 -1
  413. package/esm/domain/context/customerDataTracker.d.ts +0 -45
  414. package/esm/domain/context/customerDataTracker.js +0 -102
  415. package/esm/domain/context/customerDataTracker.js.map +0 -1
  416. package/esm/domain/context/storeContextManager.d.ts +0 -6
  417. package/esm/domain/context/storeContextManager.js +0 -32
  418. package/esm/domain/context/storeContextManager.js.map +0 -1
  419. package/esm/domain/deflate/index.d.ts +0 -1
  420. package/esm/domain/deflate/index.js +0 -2
  421. package/esm/domain/deflate/index.js.map +0 -1
  422. package/esm/domain/deflate/types.d.ts +0 -38
  423. package/esm/domain/deflate/types.js +0 -2
  424. package/esm/domain/deflate/types.js.map +0 -1
  425. package/esm/domain/error/computeStackTrace.d.ts +0 -33
  426. package/esm/domain/error/computeStackTrace.js +0 -137
  427. package/esm/domain/error/computeStackTrace.js.map +0 -1
  428. package/esm/domain/error/error.d.ts +0 -28
  429. package/esm/domain/error/error.js +0 -121
  430. package/esm/domain/error/error.js.map +0 -1
  431. package/esm/domain/error/error.types.d.ts +0 -40
  432. package/esm/domain/error/error.types.js +0 -10
  433. package/esm/domain/error/error.types.js.map +0 -1
  434. package/esm/domain/error/trackRuntimeError.d.ts +0 -13
  435. package/esm/domain/error/trackRuntimeError.js +0 -48
  436. package/esm/domain/error/trackRuntimeError.js.map +0 -1
  437. package/esm/domain/eventRateLimiter/createEventRateLimiter.d.ts +0 -5
  438. package/esm/domain/eventRateLimiter/createEventRateLimiter.js +0 -36
  439. package/esm/domain/eventRateLimiter/createEventRateLimiter.js.map +0 -1
  440. package/esm/domain/report/browser.types.d.ts +0 -34
  441. package/esm/domain/report/browser.types.js +0 -2
  442. package/esm/domain/report/browser.types.js.map +0 -1
  443. package/esm/domain/report/reportObservable.d.ts +0 -17
  444. package/esm/domain/report/reportObservable.js +0 -90
  445. package/esm/domain/report/reportObservable.js.map +0 -1
  446. package/esm/domain/resourceUtils.d.ts +0 -16
  447. package/esm/domain/resourceUtils.js +0 -2
  448. package/esm/domain/resourceUtils.js.map +0 -1
  449. package/esm/domain/session/oldCookiesMigration.d.ts +0 -11
  450. package/esm/domain/session/oldCookiesMigration.js +0 -36
  451. package/esm/domain/session/oldCookiesMigration.js.map +0 -1
  452. package/esm/domain/session/sessionConstants.d.ts +0 -2
  453. package/esm/domain/session/sessionConstants.js +0 -4
  454. package/esm/domain/session/sessionConstants.js.map +0 -1
  455. package/esm/domain/session/sessionManager.d.ts +0 -20
  456. package/esm/domain/session/sessionManager.js +0 -60
  457. package/esm/domain/session/sessionManager.js.map +0 -1
  458. package/esm/domain/session/sessionState.d.ts +0 -11
  459. package/esm/domain/session/sessionState.js +0 -38
  460. package/esm/domain/session/sessionState.js.map +0 -1
  461. package/esm/domain/session/sessionStore.d.ts +0 -34
  462. package/esm/domain/session/sessionStore.js +0 -139
  463. package/esm/domain/session/sessionStore.js.map +0 -1
  464. package/esm/domain/session/sessionStoreOperations.d.ts +0 -10
  465. package/esm/domain/session/sessionStoreOperations.js +0 -92
  466. package/esm/domain/session/sessionStoreOperations.js.map +0 -1
  467. package/esm/domain/session/storeStrategies/sessionInCookie.d.ts +0 -6
  468. package/esm/domain/session/storeStrategies/sessionInCookie.js +0 -53
  469. package/esm/domain/session/storeStrategies/sessionInCookie.js.map +0 -1
  470. package/esm/domain/session/storeStrategies/sessionInLocalStorage.d.ts +0 -3
  471. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js +0 -36
  472. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js.map +0 -1
  473. package/esm/domain/session/storeStrategies/sessionStoreStrategy.d.ts +0 -15
  474. package/esm/domain/session/storeStrategies/sessionStoreStrategy.js +0 -2
  475. package/esm/domain/session/storeStrategies/sessionStoreStrategy.js.map +0 -1
  476. package/esm/domain/synthetics/syntheticsWorkerValues.d.ts +0 -11
  477. package/esm/domain/synthetics/syntheticsWorkerValues.js +0 -16
  478. package/esm/domain/synthetics/syntheticsWorkerValues.js.map +0 -1
  479. package/esm/domain/telemetry/index.d.ts +0 -3
  480. package/esm/domain/telemetry/index.js +0 -4
  481. package/esm/domain/telemetry/index.js.map +0 -1
  482. package/esm/domain/telemetry/rawTelemetryEvent.types.d.ts +0 -15
  483. package/esm/domain/telemetry/rawTelemetryEvent.types.js +0 -5
  484. package/esm/domain/telemetry/rawTelemetryEvent.types.js.map +0 -1
  485. package/esm/domain/telemetry/telemetry.d.ts +0 -116
  486. package/esm/domain/telemetry/telemetry.js +0 -145
  487. package/esm/domain/telemetry/telemetry.js.map +0 -1
  488. package/esm/domain/telemetry/telemetryEvent.types.d.ts +0 -391
  489. package/esm/domain/telemetry/telemetryEvent.types.js +0 -6
  490. package/esm/domain/telemetry/telemetryEvent.types.js.map +0 -1
  491. package/esm/domain/user/index.d.ts +0 -2
  492. package/esm/domain/user/index.js +0 -3
  493. package/esm/domain/user/index.js.map +0 -1
  494. package/esm/domain/user/user.d.ts +0 -12
  495. package/esm/domain/user/user.js +0 -30
  496. package/esm/domain/user/user.js.map +0 -1
  497. package/esm/domain/user/user.types.d.ts +0 -6
  498. package/esm/domain/user/user.types.js +0 -2
  499. package/esm/domain/user/user.types.js.map +0 -1
  500. package/esm/index.d.ts +0 -67
  501. package/esm/index.js +0 -64
  502. package/esm/index.js.map +0 -1
  503. package/esm/tools/abstractLifeCycle.d.ts +0 -23
  504. package/esm/tools/abstractLifeCycle.js +0 -26
  505. package/esm/tools/abstractLifeCycle.js.map +0 -1
  506. package/esm/tools/boundedBuffer.d.ts +0 -5
  507. package/esm/tools/boundedBuffer.js +0 -19
  508. package/esm/tools/boundedBuffer.js.map +0 -1
  509. package/esm/tools/catchUserErrors.d.ts +0 -1
  510. package/esm/tools/catchUserErrors.js +0 -16
  511. package/esm/tools/catchUserErrors.js.map +0 -1
  512. package/esm/tools/display.d.ts +0 -35
  513. package/esm/tools/display.js +0 -38
  514. package/esm/tools/display.js.map +0 -1
  515. package/esm/tools/encoder.d.ts +0 -53
  516. package/esm/tools/encoder.js +0 -37
  517. package/esm/tools/encoder.js.map +0 -1
  518. package/esm/tools/experimentalFeatures.d.ts +0 -22
  519. package/esm/tools/experimentalFeatures.js +0 -38
  520. package/esm/tools/experimentalFeatures.js.map +0 -1
  521. package/esm/tools/getGlobalObject.d.ts +0 -4
  522. package/esm/tools/getGlobalObject.js +0 -33
  523. package/esm/tools/getGlobalObject.js.map +0 -1
  524. package/esm/tools/getZoneJsOriginalValue.d.ts +0 -19
  525. package/esm/tools/getZoneJsOriginalValue.js +0 -26
  526. package/esm/tools/getZoneJsOriginalValue.js.map +0 -1
  527. package/esm/tools/instrumentMethod.d.ts +0 -59
  528. package/esm/tools/instrumentMethod.js +0 -101
  529. package/esm/tools/instrumentMethod.js.map +0 -1
  530. package/esm/tools/matchOption.d.ts +0 -8
  531. package/esm/tools/matchOption.js +0 -33
  532. package/esm/tools/matchOption.js.map +0 -1
  533. package/esm/tools/mergeInto.d.ts +0 -25
  534. package/esm/tools/mergeInto.js +0 -99
  535. package/esm/tools/mergeInto.js.map +0 -1
  536. package/esm/tools/monitor.d.ts +0 -8
  537. package/esm/tools/monitor.js +0 -66
  538. package/esm/tools/monitor.js.map +0 -1
  539. package/esm/tools/observable.d.ts +0 -12
  540. package/esm/tools/observable.js +0 -39
  541. package/esm/tools/observable.js.map +0 -1
  542. package/esm/tools/readBytesFromStream.d.ts +0 -11
  543. package/esm/tools/readBytesFromStream.js +0 -60
  544. package/esm/tools/readBytesFromStream.js.map +0 -1
  545. package/esm/tools/sendToExtension.d.ts +0 -3
  546. package/esm/tools/sendToExtension.js +0 -7
  547. package/esm/tools/sendToExtension.js.map +0 -1
  548. package/esm/tools/serialisation/context.d.ts +0 -6
  549. package/esm/tools/serialisation/context.js +0 -2
  550. package/esm/tools/serialisation/context.js.map +0 -1
  551. package/esm/tools/serialisation/jsonStringify.d.ts +0 -13
  552. package/esm/tools/serialisation/jsonStringify.js +0 -44
  553. package/esm/tools/serialisation/jsonStringify.js.map +0 -1
  554. package/esm/tools/serialisation/sanitize.d.ts +0 -18
  555. package/esm/tools/serialisation/sanitize.js +0 -181
  556. package/esm/tools/serialisation/sanitize.js.map +0 -1
  557. package/esm/tools/timer.d.ts +0 -5
  558. package/esm/tools/timer.js +0 -16
  559. package/esm/tools/timer.js.map +0 -1
  560. package/esm/tools/utils/arrayUtils.d.ts +0 -1
  561. package/esm/tools/utils/arrayUtils.js +0 -7
  562. package/esm/tools/utils/arrayUtils.js.map +0 -1
  563. package/esm/tools/utils/browserDetection.d.ts +0 -10
  564. package/esm/tools/utils/browserDetection.js +0 -35
  565. package/esm/tools/utils/browserDetection.js.map +0 -1
  566. package/esm/tools/utils/byteUtils.d.ts +0 -4
  567. package/esm/tools/utils/byteUtils.js +0 -26
  568. package/esm/tools/utils/byteUtils.js.map +0 -1
  569. package/esm/tools/utils/functionUtils.d.ts +0 -9
  570. package/esm/tools/utils/functionUtils.js +0 -43
  571. package/esm/tools/utils/functionUtils.js.map +0 -1
  572. package/esm/tools/utils/numberUtils.d.ts +0 -8
  573. package/esm/tools/utils/numberUtils.js +0 -17
  574. package/esm/tools/utils/numberUtils.js.map +0 -1
  575. package/esm/tools/utils/objectUtils.d.ts +0 -10
  576. package/esm/tools/utils/objectUtils.js +0 -19
  577. package/esm/tools/utils/objectUtils.js.map +0 -1
  578. package/esm/tools/utils/polyfills.d.ts +0 -24
  579. package/esm/tools/utils/polyfills.js +0 -95
  580. package/esm/tools/utils/polyfills.js.map +0 -1
  581. package/esm/tools/utils/responseUtils.d.ts +0 -2
  582. package/esm/tools/utils/responseUtils.js +0 -13
  583. package/esm/tools/utils/responseUtils.js.map +0 -1
  584. package/esm/tools/utils/stringUtils.d.ts +0 -8
  585. package/esm/tools/utils/stringUtils.js +0 -52
  586. package/esm/tools/utils/stringUtils.js.map +0 -1
  587. package/esm/tools/utils/timeUtils.d.ts +0 -57
  588. package/esm/tools/utils/timeUtils.js +0 -82
  589. package/esm/tools/utils/timeUtils.js.map +0 -1
  590. package/esm/tools/utils/typeUtils.d.ts +0 -4
  591. package/esm/tools/utils/typeUtils.js +0 -13
  592. package/esm/tools/utils/typeUtils.js.map +0 -1
  593. package/esm/tools/utils/urlPolyfill.d.ts +0 -14
  594. package/esm/tools/utils/urlPolyfill.js +0 -80
  595. package/esm/tools/utils/urlPolyfill.js.map +0 -1
  596. package/esm/tools/valueHistory.d.ts +0 -50
  597. package/esm/tools/valueHistory.js +0 -103
  598. package/esm/tools/valueHistory.js.map +0 -1
  599. package/esm/transport/batch.d.ts +0 -21
  600. package/esm/transport/batch.js +0 -120
  601. package/esm/transport/batch.js.map +0 -1
  602. package/esm/transport/eventBridge.d.ts +0 -12
  603. package/esm/transport/eventBridge.js +0 -29
  604. package/esm/transport/eventBridge.js.map +0 -1
  605. package/esm/transport/flushController.d.ts +0 -58
  606. package/esm/transport/flushController.js +0 -108
  607. package/esm/transport/flushController.js.map +0 -1
  608. package/esm/transport/httpRequest.d.ts +0 -38
  609. package/esm/transport/httpRequest.js +0 -89
  610. package/esm/transport/httpRequest.js.map +0 -1
  611. package/esm/transport/index.d.ts +0 -4
  612. package/esm/transport/index.js +0 -5
  613. package/esm/transport/index.js.map +0 -1
  614. package/esm/transport/sendWithRetryStrategy.d.ts +0 -39
  615. package/esm/transport/sendWithRetryStrategy.js +0 -146
  616. package/esm/transport/sendWithRetryStrategy.js.map +0 -1
  617. package/esm/transport/startBatchWithReplica.d.ts +0 -20
  618. package/esm/transport/startBatchWithReplica.js +0 -38
  619. package/esm/transport/startBatchWithReplica.js.map +0 -1
  620. package/src/domain/configuration/intakeSites.ts +0 -5
  621. package/src/domain/configuration/tags.ts +0 -43
  622. package/src/domain/context/customerDataTracker.ts +0 -134
  623. package/src/domain/user/index.ts +0 -2
  624. package/src/domain/user/user.ts +0 -33
  625. package/src/domain/user/user.types.ts +0 -6
  626. package/src/transport/startBatchWithReplica.ts +0 -68
@@ -0,0 +1,193 @@
1
+ ## possible states:
2
+
3
+ | state | value |
4
+ | ----------------------- | ------------------------------------------------------------ |
5
+ | NotStarted<sup>\*</sup> | `{}` |
6
+ | Expired | `{expired: '1'}` or `expire > 15 minutes` or `created > 4H` |
7
+ | Tracked | `{id: 'xxxx-xx-xx}` |
8
+ | NotTracked | `{rum: 0}` or `{logs: 0}` |
9
+
10
+ (<sup>\*</sup>) `NotStarted` is a state that can happen in a few different ways:
11
+
12
+ - First load of the page if there is no cookie present already
13
+ - After the cookie has been deleted by a 3rd party (user, ad blocker, ...)
14
+ - After the cookie has expired (it is deleted by the browser)
15
+
16
+ Other terminology:
17
+
18
+ - A _started_ session is a session that is either `Expired`, `Tracked`, or `NotTracked`.
19
+ - An _active_ session is a session that is either `Tracked` or `NotTracked`.
20
+
21
+ ## start session
22
+
23
+ ```mermaid
24
+ stateDiagram-v2
25
+ state fork_state <<fork>>
26
+ state fork_state2 <<fork>>
27
+
28
+ [*] --> fork_state
29
+
30
+ fork_state --> NotStarted
31
+ fork_state --> Expired
32
+ fork_state --> Tracked
33
+ fork_state --> NotTracked
34
+ NotStarted --> Expired: startSession()
35
+
36
+ Expired --> fork_state2
37
+ Tracked --> fork_state2
38
+ NotTracked --> fork_state2
39
+ fork_state2 --> [*]: expandOrRenew()
40
+ ```
41
+
42
+ ## On User Activity
43
+
44
+ ```mermaid
45
+ stateDiagram-v2
46
+ state fork_state <<fork>>
47
+
48
+ [*] --> fork_state
49
+
50
+ fork_state --> [*]: expandOrRenew()
51
+ ```
52
+
53
+ ## On Visibility Change
54
+
55
+ ```mermaid
56
+ stateDiagram-v2
57
+ state fork_state <<fork>>
58
+ state visibility <<choice>>
59
+
60
+ [*] --> visibility: VisibilityChange
61
+
62
+ visibility --> [*]: hidden
63
+ visibility --> fork_state : visible
64
+
65
+ fork_state --> [*]: extendOrExpire()
66
+ ```
67
+
68
+ ## On resume from frozen state
69
+
70
+ ```mermaid
71
+ stateDiagram-v2
72
+ state fork_state <<fork>>
73
+ state fork_state2 <<fork>>
74
+
75
+ [*] --> fork_state: Resume
76
+
77
+ fork_state --> NotStarted
78
+ fork_state --> Expired
79
+ fork_state --> Tracked
80
+ fork_state --> NotTracked
81
+
82
+ NotStarted --> Expired: restartSession()
83
+ Expired --> fork_state2
84
+ Tracked --> fork_state2
85
+ NotTracked --> fork_state2
86
+
87
+ fork_state2 --> [*]: extendOrExpire()
88
+ ```
89
+
90
+ ## Watch (every second)
91
+
92
+ ```mermaid
93
+ stateDiagram-v2
94
+ state fork_state <<fork>>
95
+
96
+
97
+ [*] --> fork_state
98
+ fork_state --> [*]: extendOrExpire()
99
+ ```
100
+
101
+ ## 3rd party cookie clearing
102
+
103
+ ```mermaid
104
+ stateDiagram-v2
105
+ state fork_state <<fork>>
106
+ state join_state <<join>>
107
+ NotStarted2: NotStarted
108
+
109
+ [*] --> fork_state
110
+
111
+ fork_state --> NotStarted
112
+ fork_state --> Expired
113
+ fork_state --> Tracked
114
+ fork_state --> NotTracked
115
+
116
+ Expired --> join_state
117
+ Tracked --> join_state
118
+ NotTracked --> join_state
119
+ NotStarted --> join_state
120
+
121
+ join_state --> NotStarted2 : clearCookies()
122
+
123
+ NotStarted2 --> [*]
124
+ ```
125
+
126
+ ## Expand Or Renew
127
+
128
+ ```mermaid
129
+ stateDiagram-v2
130
+ state fork_state <<fork>>
131
+ state fork_state2 <<fork>>
132
+ state fork_state3 <<fork>>
133
+
134
+
135
+ state expandOrRenew() {
136
+ [*] --> fork_state: expandOrRenew()
137
+ Tracked2: Tracked
138
+ NotTracked2: NotTracked
139
+
140
+ fork_state --> NotStarted
141
+ fork_state --> Expired
142
+ fork_state --> Tracked
143
+ fork_state --> NotTracked
144
+
145
+ NotStarted --> [*]
146
+
147
+ Expired --> fork_state2: renew()
148
+ Tracked --> fork_state2: extend()
149
+ NotTracked --> fork_state2: extend()
150
+
151
+ fork_state2 --> fork_state3: computeTrackingType()
152
+
153
+ fork_state3 --> Tracked2
154
+ fork_state3 --> NotTracked2
155
+
156
+ Tracked2 --> [*]
157
+ NotTracked2 --> [*]
158
+ }
159
+ ```
160
+
161
+ > [!NOTE]
162
+ > Because `computeTrackingType()` happens at every `expandOrRenew()`, it is in theory possible to switch from `Tracked` to `NotTracked` and vice versa within an active session. However, this is not expected to happen in practice at this time.
163
+
164
+ ## Extend Or Expire
165
+
166
+ ```mermaid
167
+ stateDiagram-v2
168
+ state fork_state <<fork>>
169
+
170
+ state extendOrExpire() {
171
+ [*] --> fork_state : extendOrExpire()
172
+ Tracked2: Tracked
173
+ NotTracked2: NotTracked
174
+ Expired2: Expired
175
+
176
+ fork_state --> NotStarted
177
+ fork_state --> Expired
178
+ fork_state --> Tracked
179
+ fork_state --> NotTracked
180
+
181
+ Tracked --> Tracked2: extend()
182
+ NotTracked --> NotTracked2: extend()
183
+ Expired --> Expired2: expire()
184
+
185
+ NotStarted --> [*]
186
+ Tracked2 --> [*]
187
+ NotTracked2 --> [*]
188
+ Expired2 --> [*]
189
+ }
190
+ ```
191
+
192
+ > [!NOTE]
193
+ > Because a session time out can result in an `Expired` state, `expire()` explicitly normalizes the state to `isExpired=1`
@@ -2,7 +2,7 @@ import { getInitCookie } from '../../browser/cookie'
2
2
  import type { SessionStoreStrategy } from './storeStrategies/sessionStoreStrategy'
3
3
  import { SESSION_STORE_KEY } from './storeStrategies/sessionStoreStrategy'
4
4
  import type { SessionState } from './sessionState'
5
- import { expandSessionState, isSessionInExpiredState } from './sessionState'
5
+ import { expandSessionState, isSessionStarted } from './sessionState'
6
6
 
7
7
  export const OLD_SESSION_COOKIE_NAME = '_oo'
8
8
  export const OLD_RUM_COOKIE_NAME = '_oo_r'
@@ -34,7 +34,7 @@ export function tryOldCookiesMigration(cookieStoreStrategy: SessionStoreStrategy
34
34
  session[RUM_SESSION_KEY] = oldRumType
35
35
  }
36
36
 
37
- if (!isSessionInExpiredState(session)) {
37
+ if (isSessionStarted(session)) {
38
38
  expandSessionState(session)
39
39
  cookieStoreStrategy.persistSession(session)
40
40
  }
@@ -1,4 +1,19 @@
1
- import { ONE_HOUR, ONE_MINUTE } from '../../tools/utils/timeUtils'
1
+ import { ONE_HOUR, ONE_MINUTE, ONE_YEAR } from '../../tools/utils/timeUtils'
2
2
 
3
3
  export const SESSION_TIME_OUT_DELAY = 4 * ONE_HOUR
4
4
  export const SESSION_EXPIRATION_DELAY = 15 * ONE_MINUTE
5
+ export const SESSION_COOKIE_EXPIRATION_DELAY = ONE_YEAR
6
+ export const SESSION_NOT_TRACKED = '0'
7
+
8
+ /**
9
+ * @internal
10
+ */
11
+ export const SessionPersistence = {
12
+ COOKIE: 'cookie',
13
+ LOCAL_STORAGE: 'local-storage',
14
+ } as const
15
+
16
+ /**
17
+ * @inline
18
+ */
19
+ export type SessionPersistence = (typeof SessionPersistence)[keyof typeof SessionPersistence]
@@ -1,24 +1,44 @@
1
- import type { Observable } from '../../tools/observable'
1
+ import { Observable } from '../../tools/observable'
2
2
  import type { Context } from '../../tools/serialisation/context'
3
- import { ValueHistory } from '../../tools/valueHistory'
3
+ import { createValueHistory } from '../../tools/valueHistory'
4
4
  import type { RelativeTime } from '../../tools/utils/timeUtils'
5
- import { relativeNow, clocksOrigin, ONE_MINUTE } from '../../tools/utils/timeUtils'
6
- import { DOM_EVENT, addEventListener, addEventListeners } from '../../browser/addEventListener'
5
+ import { clocksOrigin, dateNow, ONE_MINUTE, relativeNow } from '../../tools/utils/timeUtils'
6
+ import { addEventListener, addEventListeners, DOM_EVENT } from '../../browser/addEventListener'
7
7
  import { clearInterval, setInterval } from '../../tools/timer'
8
8
  import type { Configuration } from '../configuration'
9
- import { SESSION_TIME_OUT_DELAY } from './sessionConstants'
9
+ import type { TrackingConsentState } from '../trackingConsent'
10
+ import { addTelemetryDebug } from '../telemetry'
11
+ import { isSyntheticsTest } from '../synthetics/syntheticsWorkerValues'
12
+ import type { CookieStore } from '../../browser/browser.types'
13
+ import { getCurrentSite } from '../../browser/cookie'
14
+ import { ExperimentalFeature, isExperimentalFeatureEnabled } from '../../tools/experimentalFeatures'
15
+ import { findLast } from '../../tools/utils/polyfills'
16
+ import { monitorError } from '../../tools/monitor'
17
+ import { SESSION_NOT_TRACKED, SESSION_TIME_OUT_DELAY, SessionPersistence } from './sessionConstants'
10
18
  import { startSessionStore } from './sessionStore'
19
+ import type { SessionState } from './sessionState'
20
+ import { toSessionState } from './sessionState'
21
+ import { retrieveSessionCookie } from './storeStrategies/sessionInCookie'
22
+ import { SESSION_STORE_KEY } from './storeStrategies/sessionStoreStrategy'
23
+ import { retrieveSessionFromLocalStorage } from './storeStrategies/sessionInLocalStorage'
11
24
 
12
25
  export interface SessionManager<TrackingType extends string> {
13
- findActiveSession: (startTime?: RelativeTime) => SessionContext<TrackingType> | undefined
26
+ findSession: (
27
+ startTime?: RelativeTime,
28
+ options?: { returnInactive: boolean }
29
+ ) => SessionContext<TrackingType> | undefined
14
30
  renewObservable: Observable<void>
15
31
  expireObservable: Observable<void>
32
+ sessionStateUpdateObservable: Observable<{ previousState: SessionState; newState: SessionState }>
16
33
  expire: () => void
34
+ updateSessionState: (state: Partial<SessionState>) => void
17
35
  }
18
36
 
19
37
  export interface SessionContext<TrackingType extends string> extends Context {
20
38
  id: string
21
39
  trackingType: TrackingType
40
+ isReplayForced: boolean
41
+ anonymousId: string | undefined
22
42
  }
23
43
 
24
44
  export const VISIBILITY_CHECK_DELAY = ONE_MINUTE
@@ -28,40 +48,91 @@ let stopCallbacks: Array<() => void> = []
28
48
  export function startSessionManager<TrackingType extends string>(
29
49
  configuration: Configuration,
30
50
  productKey: string,
31
- computeSessionState: (rawTrackingType?: string) => { trackingType: TrackingType; isTracked: boolean }
51
+ computeTrackingType: (rawTrackingType?: string) => TrackingType,
52
+ trackingConsentState: TrackingConsentState
32
53
  ): SessionManager<TrackingType> {
54
+ const renewObservable = new Observable<void>()
55
+ const expireObservable = new Observable<void>()
56
+
33
57
  // TODO - Improve configuration type and remove assertion
34
- const sessionStore = startSessionStore(configuration.sessionStoreStrategyType!, productKey, computeSessionState)
58
+ const sessionStore = startSessionStore(
59
+ configuration.sessionStoreStrategyType!,
60
+ configuration,
61
+ productKey,
62
+ computeTrackingType
63
+ )
35
64
  stopCallbacks.push(() => sessionStore.stop())
36
65
 
37
- const sessionContextHistory = new ValueHistory<SessionContext<TrackingType>>(SESSION_CONTEXT_TIMEOUT_DELAY)
66
+ const sessionContextHistory = createValueHistory<SessionContext<TrackingType>>({
67
+ expireDelay: SESSION_CONTEXT_TIMEOUT_DELAY,
68
+ })
38
69
  stopCallbacks.push(() => sessionContextHistory.stop())
39
70
 
40
71
  sessionStore.renewObservable.subscribe(() => {
41
72
  sessionContextHistory.add(buildSessionContext(), relativeNow())
73
+ renewObservable.notify()
42
74
  })
43
75
  sessionStore.expireObservable.subscribe(() => {
76
+ expireObservable.notify()
44
77
  sessionContextHistory.closeActive(relativeNow())
45
78
  })
46
79
 
80
+ // We expand/renew session unconditionally as tracking consent is always granted when the session
81
+ // manager is started.
47
82
  sessionStore.expandOrRenewSession()
48
83
  sessionContextHistory.add(buildSessionContext(), clocksOrigin().relative)
84
+ if (isExperimentalFeatureEnabled(ExperimentalFeature.SHORT_SESSION_INVESTIGATION)) {
85
+ const session = sessionStore.getSession()
86
+ if (session) {
87
+ detectSessionIdChange(configuration, session)
88
+ }
89
+ }
49
90
 
50
- trackActivity(configuration, () => sessionStore.expandOrRenewSession())
91
+ trackingConsentState.observable.subscribe(() => {
92
+ if (trackingConsentState.isGranted()) {
93
+ sessionStore.expandOrRenewSession()
94
+ } else {
95
+ sessionStore.expire(false)
96
+ }
97
+ })
98
+
99
+ trackActivity(configuration, () => {
100
+ if (trackingConsentState.isGranted()) {
101
+ sessionStore.expandOrRenewSession()
102
+ }
103
+ })
51
104
  trackVisibility(configuration, () => sessionStore.expandSession())
105
+ trackResume(configuration, () => sessionStore.restartSession())
52
106
 
53
107
  function buildSessionContext() {
108
+ const session = sessionStore.getSession()
109
+
110
+ if (!session) {
111
+ reportUnexpectedSessionState(configuration).catch(() => void 0) // Ignore errors
112
+
113
+ return {
114
+ id: 'invalid',
115
+ trackingType: SESSION_NOT_TRACKED as TrackingType,
116
+ isReplayForced: false,
117
+ anonymousId: undefined,
118
+ }
119
+ }
120
+
54
121
  return {
55
- id: sessionStore.getSession().id!,
56
- trackingType: sessionStore.getSession()[productKey] as TrackingType,
122
+ id: session.id!,
123
+ trackingType: session[productKey] as TrackingType,
124
+ isReplayForced: !!session.forcedReplay,
125
+ anonymousId: session.anonymousId,
57
126
  }
58
127
  }
59
128
 
60
129
  return {
61
- findActiveSession: (startTime) => sessionContextHistory.find(startTime),
62
- renewObservable: sessionStore.renewObservable,
63
- expireObservable: sessionStore.expireObservable,
130
+ findSession: (startTime, options) => sessionContextHistory.find(startTime, options),
131
+ renewObservable,
132
+ expireObservable,
133
+ sessionStateUpdateObservable: sessionStore.sessionStateUpdateObservable,
64
134
  expire: sessionStore.expire,
135
+ updateSessionState: sessionStore.updateSessionState,
65
136
  }
66
137
  }
67
138
 
@@ -96,3 +167,96 @@ function trackVisibility(configuration: Configuration, expandSession: () => void
96
167
  clearInterval(visibilityCheckInterval)
97
168
  })
98
169
  }
170
+
171
+ function trackResume(configuration: Configuration, cb: () => void) {
172
+ const { stop } = addEventListener(configuration, window, DOM_EVENT.RESUME, cb, { capture: true })
173
+ stopCallbacks.push(stop)
174
+ }
175
+
176
+ async function reportUnexpectedSessionState(configuration: Configuration) {
177
+ const sessionStoreStrategyType = configuration.sessionStoreStrategyType
178
+ if (!sessionStoreStrategyType) {
179
+ return
180
+ }
181
+
182
+ let rawSession
183
+ let cookieContext
184
+
185
+ if (sessionStoreStrategyType.type === SessionPersistence.COOKIE) {
186
+ rawSession = retrieveSessionCookie(sessionStoreStrategyType.cookieOptions, configuration)
187
+
188
+ cookieContext = {
189
+ cookie: await getSessionCookies(),
190
+ currentDomain: `${window.location.protocol}//${window.location.hostname}`,
191
+ }
192
+ } else {
193
+ rawSession = retrieveSessionFromLocalStorage()
194
+ }
195
+ // monitor-until: forever, could be handy to troubleshoot issues until session manager rework
196
+ addTelemetryDebug('Unexpected session state', {
197
+ sessionStoreStrategyType: sessionStoreStrategyType.type,
198
+ session: rawSession,
199
+ isSyntheticsTest: isSyntheticsTest(),
200
+ createdTimestamp: rawSession?.created,
201
+ expireTimestamp: rawSession?.expire,
202
+ ...cookieContext,
203
+ })
204
+ }
205
+
206
+ function detectSessionIdChange(configuration: Configuration, initialSessionState: SessionState) {
207
+ if (!window.cookieStore || !initialSessionState.created) {
208
+ return
209
+ }
210
+
211
+ const sessionCreatedTime = Number(initialSessionState.created)
212
+ const sdkInitTime = dateNow()
213
+
214
+ const { stop } = addEventListener(configuration, cookieStore as CookieStore, DOM_EVENT.CHANGE, listener)
215
+ stopCallbacks.push(stop)
216
+
217
+ function listener(event: CookieChangeEvent) {
218
+ const changed = findLast(event.changed, (change): change is CookieListItem => change.name === SESSION_STORE_KEY)
219
+ if (!changed) {
220
+ return
221
+ }
222
+
223
+ const sessionAge = dateNow() - sessionCreatedTime
224
+ if (sessionAge > 14 * ONE_MINUTE) {
225
+ // The session might have expired just because it's too old or lack activity
226
+ stop()
227
+ } else {
228
+ const newSessionState = toSessionState(changed.value)
229
+ if (newSessionState.id && newSessionState.id !== initialSessionState.id) {
230
+ stop()
231
+ const time = dateNow() - sdkInitTime
232
+ getSessionCookies()
233
+ .then((cookie) => {
234
+ // monitor-until: 2025-12-01, after RUM-10845 investigation done
235
+ addTelemetryDebug('Session cookie changed', {
236
+ time,
237
+ session_age: sessionAge,
238
+ old: initialSessionState,
239
+ new: newSessionState,
240
+ cookie,
241
+ })
242
+ })
243
+ .catch(monitorError)
244
+ }
245
+ }
246
+ }
247
+ }
248
+
249
+ async function getSessionCookies(): Promise<{ count: number; domain: string }> {
250
+ let sessionCookies: string[] | Awaited<ReturnType<CookieStore['getAll']>>
251
+ if ('cookieStore' in window) {
252
+ sessionCookies = await (window as { cookieStore: CookieStore }).cookieStore.getAll(SESSION_STORE_KEY)
253
+ } else {
254
+ sessionCookies = document.cookie.split(/\s*;\s*/).filter((cookie) => cookie.startsWith(SESSION_STORE_KEY))
255
+ }
256
+
257
+ return {
258
+ count: sessionCookies.length,
259
+ domain: getCurrentSite() || 'undefined',
260
+ ...sessionCookies,
261
+ }
262
+ }
@@ -1,32 +1,66 @@
1
1
  import { isEmptyObject } from '../../tools/utils/objectUtils'
2
2
  import { objectEntries } from '../../tools/utils/polyfills'
3
3
  import { dateNow } from '../../tools/utils/timeUtils'
4
- import { SESSION_EXPIRATION_DELAY } from './sessionConstants'
5
-
6
- const SESSION_ENTRY_REGEXP = /^([a-z]+)=([a-z0-9-]+)$/
7
- const SESSION_ENTRY_SEPARATOR = '&'
4
+ import type { Configuration } from '../configuration'
5
+ import { SESSION_EXPIRATION_DELAY, SESSION_TIME_OUT_DELAY } from './sessionConstants'
6
+ import { isValidSessionString, SESSION_ENTRY_REGEXP, SESSION_ENTRY_SEPARATOR } from './sessionStateValidation'
7
+ export const EXPIRED = '1'
8
8
 
9
9
  export interface SessionState {
10
10
  id?: string
11
11
  created?: string
12
12
  expire?: string
13
- lock?: string
13
+ isExpired?: typeof EXPIRED
14
14
 
15
15
  [key: string]: string | undefined
16
16
  }
17
17
 
18
- export function isSessionInExpiredState(session: SessionState) {
18
+ export function getExpiredSessionState(
19
+ previousSessionState: SessionState | undefined,
20
+ configuration: Configuration
21
+ ): SessionState {
22
+ const expiredSessionState: SessionState = {
23
+ isExpired: EXPIRED,
24
+ }
25
+ if (configuration.trackAnonymousUser && previousSessionState?.anonymousId) {
26
+ expiredSessionState.anonymousId = previousSessionState?.anonymousId
27
+ }
28
+ return expiredSessionState
29
+ }
30
+
31
+ export function isSessionInNotStartedState(session: SessionState) {
19
32
  return isEmptyObject(session)
20
33
  }
21
34
 
35
+ export function isSessionStarted(session: SessionState) {
36
+ return !isSessionInNotStartedState(session)
37
+ }
38
+
39
+ export function isSessionInExpiredState(session: SessionState) {
40
+ return session.isExpired !== undefined || !isActiveSession(session)
41
+ }
42
+
43
+ // An active session is a session in either `Tracked` or `NotTracked` state
44
+ function isActiveSession(sessionState: SessionState) {
45
+ // created and expire can be undefined for versions which was not storing them
46
+ // these checks could be removed when older versions will not be available/live anymore
47
+ return (
48
+ (sessionState.created === undefined || dateNow() - Number(sessionState.created) < SESSION_TIME_OUT_DELAY) &&
49
+ (sessionState.expire === undefined || dateNow() < Number(sessionState.expire))
50
+ )
51
+ }
52
+
22
53
  export function expandSessionState(session: SessionState) {
23
54
  session.expire = String(dateNow() + SESSION_EXPIRATION_DELAY)
24
55
  }
25
56
 
26
57
  export function toSessionString(session: SessionState) {
27
- return objectEntries(session)
28
- .map(([key, value]) => `${key}=${value as string}`)
29
- .join(SESSION_ENTRY_SEPARATOR)
58
+ return (
59
+ objectEntries(session)
60
+ // we use `aid` as a key for anonymousId
61
+ .map(([key, value]) => (key === 'anonymousId' ? `aid=${value}` : `${key}=${value}`))
62
+ .join(SESSION_ENTRY_SEPARATOR)
63
+ )
30
64
  }
31
65
 
32
66
  export function toSessionState(sessionString: string | undefined | null) {
@@ -36,16 +70,14 @@ export function toSessionState(sessionString: string | undefined | null) {
36
70
  const matches = SESSION_ENTRY_REGEXP.exec(entry)
37
71
  if (matches !== null) {
38
72
  const [, key, value] = matches
39
- session[key] = value
73
+ if (key === 'aid') {
74
+ // we use `aid` as a key for anonymousId
75
+ session.anonymousId = value
76
+ } else {
77
+ session[key] = value
78
+ }
40
79
  }
41
80
  })
42
81
  }
43
82
  return session
44
83
  }
45
-
46
- function isValidSessionString(sessionString: string | undefined | null): sessionString is string {
47
- return (
48
- !!sessionString &&
49
- (sessionString.indexOf(SESSION_ENTRY_SEPARATOR) !== -1 || SESSION_ENTRY_REGEXP.test(sessionString))
50
- )
51
- }
@@ -0,0 +1,9 @@
1
+ export const SESSION_ENTRY_REGEXP = /^([a-zA-Z]+)=([a-z0-9-]+)$/
2
+ export const SESSION_ENTRY_SEPARATOR = '&'
3
+
4
+ export function isValidSessionString(sessionString: string | undefined | null): sessionString is string {
5
+ return (
6
+ !!sessionString &&
7
+ (sessionString.indexOf(SESSION_ENTRY_SEPARATOR) !== -1 || SESSION_ENTRY_REGEXP.test(sessionString))
8
+ )
9
+ }