@kubesense/kubesense-browser-core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (725) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +3 -0
  3. package/cjs/boot/displayAlreadyInitializedError.d.ts +2 -0
  4. package/cjs/boot/displayAlreadyInitializedError.js +10 -0
  5. package/cjs/boot/displayAlreadyInitializedError.js.map +1 -0
  6. package/cjs/boot/init.d.ts +13 -0
  7. package/cjs/boot/init.js +39 -0
  8. package/cjs/boot/init.js.map +1 -0
  9. package/cjs/browser/addEventListener.d.ts +87 -0
  10. package/cjs/browser/addEventListener.js +55 -0
  11. package/cjs/browser/addEventListener.js.map +1 -0
  12. package/cjs/browser/browser.types.d.ts +51 -0
  13. package/cjs/browser/browser.types.js +6 -0
  14. package/cjs/browser/browser.types.js.map +1 -0
  15. package/cjs/browser/cookie.d.ts +26 -0
  16. package/cjs/browser/cookie.js +112 -0
  17. package/cjs/browser/cookie.js.map +1 -0
  18. package/cjs/browser/fetchObservable.d.ts +38 -0
  19. package/cjs/browser/fetchObservable.js +103 -0
  20. package/cjs/browser/fetchObservable.js.map +1 -0
  21. package/cjs/browser/pageMayExitObservable.d.ts +14 -0
  22. package/cjs/browser/pageMayExitObservable.js +45 -0
  23. package/cjs/browser/pageMayExitObservable.js.map +1 -0
  24. package/cjs/browser/runOnReadyState.d.ts +5 -0
  25. package/cjs/browser/runOnReadyState.js +20 -0
  26. package/cjs/browser/runOnReadyState.js.map +1 -0
  27. package/cjs/browser/xhrObservable.d.ts +24 -0
  28. package/cjs/browser/xhrObservable.js +86 -0
  29. package/cjs/browser/xhrObservable.js.map +1 -0
  30. package/cjs/domain/allowedTrackingOrigins.d.ts +4 -0
  31. package/cjs/domain/allowedTrackingOrigins.js +25 -0
  32. package/cjs/domain/allowedTrackingOrigins.js.map +1 -0
  33. package/cjs/domain/bufferedData.d.ts +14 -0
  34. package/cjs/domain/bufferedData.js +22 -0
  35. package/cjs/domain/bufferedData.js.map +1 -0
  36. package/cjs/domain/configuration/configuration.d.ts +284 -0
  37. package/cjs/domain/configuration/configuration.js +135 -0
  38. package/cjs/domain/configuration/configuration.js.map +1 -0
  39. package/cjs/domain/configuration/endpointBuilder.d.ts +12 -0
  40. package/cjs/domain/configuration/endpointBuilder.js +66 -0
  41. package/cjs/domain/configuration/endpointBuilder.js.map +1 -0
  42. package/cjs/domain/configuration/index.d.ts +6 -0
  43. package/cjs/domain/configuration/index.js +31 -0
  44. package/cjs/domain/configuration/index.js.map +1 -0
  45. package/cjs/domain/configuration/transportConfiguration.d.ts +21 -0
  46. package/cjs/domain/configuration/transportConfiguration.js +58 -0
  47. package/cjs/domain/configuration/transportConfiguration.js.map +1 -0
  48. package/cjs/domain/connectivity/connectivity.d.ts +14 -0
  49. package/cjs/domain/connectivity/connectivity.js +14 -0
  50. package/cjs/domain/connectivity/connectivity.js.map +1 -0
  51. package/cjs/domain/connectivity/index.d.ts +1 -0
  52. package/cjs/domain/connectivity/index.js +18 -0
  53. package/cjs/domain/connectivity/index.js.map +1 -0
  54. package/cjs/domain/console/consoleObservable.d.ts +21 -0
  55. package/cjs/domain/console/consoleObservable.js +84 -0
  56. package/cjs/domain/console/consoleObservable.js.map +1 -0
  57. package/cjs/domain/context/contextConstants.d.ts +21 -0
  58. package/cjs/domain/context/contextConstants.js +18 -0
  59. package/cjs/domain/context/contextConstants.js.map +1 -0
  60. package/cjs/domain/context/contextManager.d.ts +19 -0
  61. package/cjs/domain/context/contextManager.js +59 -0
  62. package/cjs/domain/context/contextManager.js.map +1 -0
  63. package/cjs/domain/context/contextUtils.d.ts +5 -0
  64. package/cjs/domain/context/contextUtils.js +16 -0
  65. package/cjs/domain/context/contextUtils.js.map +1 -0
  66. package/cjs/domain/context/defineContextMethod.d.ts +6 -0
  67. package/cjs/domain/context/defineContextMethod.js +21 -0
  68. package/cjs/domain/context/defineContextMethod.js.map +1 -0
  69. package/cjs/domain/context/storeContextManager.d.ts +6 -0
  70. package/cjs/domain/context/storeContextManager.js +40 -0
  71. package/cjs/domain/context/storeContextManager.js.map +1 -0
  72. package/cjs/domain/contexts/accountContext.d.ts +26 -0
  73. package/cjs/domain/contexts/accountContext.js +33 -0
  74. package/cjs/domain/contexts/accountContext.js.map +1 -0
  75. package/cjs/domain/contexts/globalContext.d.ts +18 -0
  76. package/cjs/domain/contexts/globalContext.js +21 -0
  77. package/cjs/domain/contexts/globalContext.js.map +1 -0
  78. package/cjs/domain/contexts/rumInternalContext.type.d.ts +14 -0
  79. package/cjs/domain/contexts/rumInternalContext.type.js +3 -0
  80. package/cjs/domain/contexts/rumInternalContext.type.js.map +1 -0
  81. package/cjs/domain/contexts/userContext.d.ts +31 -0
  82. package/cjs/domain/contexts/userContext.js +120 -0
  83. package/cjs/domain/contexts/userContext.js.map +1 -0
  84. package/cjs/domain/deflate/deflate.types.d.ts +40 -0
  85. package/cjs/domain/deflate/deflate.types.js +3 -0
  86. package/cjs/domain/deflate/deflate.types.js.map +1 -0
  87. package/cjs/domain/deflate/index.d.ts +1 -0
  88. package/cjs/domain/deflate/index.js +18 -0
  89. package/cjs/domain/deflate/index.js.map +1 -0
  90. package/cjs/domain/error/error.d.ts +23 -0
  91. package/cjs/domain/error/error.js +81 -0
  92. package/cjs/domain/error/error.js.map +1 -0
  93. package/cjs/domain/error/error.types.d.ts +47 -0
  94. package/cjs/domain/error/error.types.js +13 -0
  95. package/cjs/domain/error/error.types.js.map +1 -0
  96. package/cjs/domain/error/trackRuntimeError.d.ts +11 -0
  97. package/cjs/domain/error/trackRuntimeError.js +48 -0
  98. package/cjs/domain/error/trackRuntimeError.js.map +1 -0
  99. package/cjs/domain/eventRateLimiter/createEventRateLimiter.d.ts +5 -0
  100. package/cjs/domain/eventRateLimiter/createEventRateLimiter.js +41 -0
  101. package/cjs/domain/eventRateLimiter/createEventRateLimiter.js.map +1 -0
  102. package/cjs/domain/extension/extensionUtils.d.ts +10 -0
  103. package/cjs/domain/extension/extensionUtils.js +30 -0
  104. package/cjs/domain/extension/extensionUtils.js.map +1 -0
  105. package/cjs/domain/intakeSites.d.ts +4 -0
  106. package/cjs/domain/intakeSites.js +7 -0
  107. package/cjs/domain/intakeSites.js.map +1 -0
  108. package/cjs/domain/report/browser.types.d.ts +34 -0
  109. package/cjs/domain/report/browser.types.js +3 -0
  110. package/cjs/domain/report/browser.types.js.map +1 -0
  111. package/cjs/domain/report/reportObservable.d.ts +14 -0
  112. package/cjs/domain/report/reportObservable.js +99 -0
  113. package/cjs/domain/report/reportObservable.js.map +1 -0
  114. package/cjs/domain/resourceUtils.d.ts +18 -0
  115. package/cjs/domain/resourceUtils.js +20 -0
  116. package/cjs/domain/resourceUtils.js.map +1 -0
  117. package/cjs/domain/session/oldCookiesMigration.d.ts +11 -0
  118. package/cjs/domain/session/oldCookiesMigration.js +40 -0
  119. package/cjs/domain/session/oldCookiesMigration.js.map +1 -0
  120. package/cjs/domain/session/sessionConstants.d.ts +15 -0
  121. package/cjs/domain/session/sessionConstants.js +16 -0
  122. package/cjs/domain/session/sessionConstants.js.map +1 -0
  123. package/cjs/domain/session/sessionManager.d.ts +28 -0
  124. package/cjs/domain/session/sessionManager.js +201 -0
  125. package/cjs/domain/session/sessionManager.js.map +1 -0
  126. package/cjs/domain/session/sessionState.d.ts +16 -0
  127. package/cjs/domain/session/sessionState.js +70 -0
  128. package/cjs/domain/session/sessionState.js.map +1 -0
  129. package/cjs/domain/session/sessionStateValidation.d.ts +3 -0
  130. package/cjs/domain/session/sessionStateValidation.js +11 -0
  131. package/cjs/domain/session/sessionStateValidation.js.map +1 -0
  132. package/cjs/domain/session/sessionStore.d.ts +38 -0
  133. package/cjs/domain/session/sessionStore.js +186 -0
  134. package/cjs/domain/session/sessionStore.js.map +1 -0
  135. package/cjs/domain/session/sessionStoreOperations.d.ts +12 -0
  136. package/cjs/domain/session/sessionStoreOperations.js +119 -0
  137. package/cjs/domain/session/sessionStoreOperations.js.map +1 -0
  138. package/cjs/domain/session/storeStrategies/sessionInCookie.d.ts +12 -0
  139. package/cjs/domain/session/storeStrategies/sessionInCookie.js +104 -0
  140. package/cjs/domain/session/storeStrategies/sessionInCookie.js.map +1 -0
  141. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.d.ts +6 -0
  142. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js +42 -0
  143. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js.map +1 -0
  144. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.d.ts +16 -0
  145. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js +5 -0
  146. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js.map +1 -0
  147. package/cjs/domain/synthetics/syntheticsWorkerValues.d.ts +12 -0
  148. package/cjs/domain/synthetics/syntheticsWorkerValues.js +31 -0
  149. package/cjs/domain/synthetics/syntheticsWorkerValues.js.map +1 -0
  150. package/cjs/domain/tags.d.ts +6 -0
  151. package/cjs/domain/tags.js +66 -0
  152. package/cjs/domain/tags.js.map +1 -0
  153. package/cjs/domain/telemetry/index.d.ts +4 -0
  154. package/cjs/domain/telemetry/index.js +28 -0
  155. package/cjs/domain/telemetry/index.js.map +1 -0
  156. package/cjs/domain/telemetry/rawTelemetryEvent.types.d.ts +18 -0
  157. package/cjs/domain/telemetry/rawTelemetryEvent.types.js +9 -0
  158. package/cjs/domain/telemetry/rawTelemetryEvent.types.js.map +1 -0
  159. package/cjs/domain/telemetry/telemetry.d.ts +56 -0
  160. package/cjs/domain/telemetry/telemetry.js +245 -0
  161. package/cjs/domain/telemetry/telemetry.js.map +1 -0
  162. package/cjs/domain/telemetry/telemetryEvent.types.d.ts +866 -0
  163. package/cjs/domain/telemetry/telemetryEvent.types.js +7 -0
  164. package/cjs/domain/telemetry/telemetryEvent.types.js.map +1 -0
  165. package/cjs/domain/trackingConsent.d.ts +13 -0
  166. package/cjs/domain/trackingConsent.js +28 -0
  167. package/cjs/domain/trackingConsent.js.map +1 -0
  168. package/cjs/domain/userAgentData/index.d.ts +1 -0
  169. package/cjs/domain/userAgentData/index.js +18 -0
  170. package/cjs/domain/userAgentData/index.js.map +1 -0
  171. package/cjs/domain/userAgentData/userAgentData.d.ts +22 -0
  172. package/cjs/domain/userAgentData/userAgentData.js +109 -0
  173. package/cjs/domain/userAgentData/userAgentData.js.map +1 -0
  174. package/cjs/index.d.ts +101 -0
  175. package/cjs/index.js +199 -0
  176. package/cjs/index.js.map +1 -0
  177. package/cjs/tools/abstractHooks.d.ts +24 -0
  178. package/cjs/tools/abstractHooks.js +41 -0
  179. package/cjs/tools/abstractHooks.js.map +1 -0
  180. package/cjs/tools/abstractLifeCycle.d.ts +23 -0
  181. package/cjs/tools/abstractLifeCycle.js +28 -0
  182. package/cjs/tools/abstractLifeCycle.js.map +1 -0
  183. package/cjs/tools/boundedBuffer.d.ts +16 -0
  184. package/cjs/tools/boundedBuffer.js +32 -0
  185. package/cjs/tools/boundedBuffer.js.map +1 -0
  186. package/cjs/tools/catchUserErrors.d.ts +1 -0
  187. package/cjs/tools/catchUserErrors.js +15 -0
  188. package/cjs/tools/catchUserErrors.js.map +1 -0
  189. package/cjs/tools/display.d.ts +38 -0
  190. package/cjs/tools/display.js +44 -0
  191. package/cjs/tools/display.js.map +1 -0
  192. package/cjs/tools/encoder.d.ts +54 -0
  193. package/cjs/tools/encoder.js +40 -0
  194. package/cjs/tools/encoder.js.map +1 -0
  195. package/cjs/tools/experimentalFeatures.d.ts +21 -0
  196. package/cjs/tools/experimentalFeatures.js +50 -0
  197. package/cjs/tools/experimentalFeatures.js.map +1 -0
  198. package/cjs/tools/getZoneJsOriginalValue.d.ts +19 -0
  199. package/cjs/tools/getZoneJsOriginalValue.js +29 -0
  200. package/cjs/tools/getZoneJsOriginalValue.js.map +1 -0
  201. package/cjs/tools/globalObject.d.ts +19 -0
  202. package/cjs/tools/globalObject.js +44 -0
  203. package/cjs/tools/globalObject.js.map +1 -0
  204. package/cjs/tools/instrumentMethod.d.ts +75 -0
  205. package/cjs/tools/instrumentMethod.js +118 -0
  206. package/cjs/tools/instrumentMethod.js.map +1 -0
  207. package/cjs/tools/matchOption.d.ts +8 -0
  208. package/cjs/tools/matchOption.js +35 -0
  209. package/cjs/tools/matchOption.js.map +1 -0
  210. package/cjs/tools/mergeInto.d.ts +25 -0
  211. package/cjs/tools/mergeInto.js +98 -0
  212. package/cjs/tools/mergeInto.js.map +1 -0
  213. package/cjs/tools/monitor.d.ts +9 -0
  214. package/cjs/tools/monitor.js +61 -0
  215. package/cjs/tools/monitor.js.map +1 -0
  216. package/cjs/tools/observable.d.ts +30 -0
  217. package/cjs/tools/observable.js +89 -0
  218. package/cjs/tools/observable.js.map +1 -0
  219. package/cjs/tools/queueMicrotask.d.ts +1 -0
  220. package/cjs/tools/queueMicrotask.js +17 -0
  221. package/cjs/tools/queueMicrotask.js.map +1 -0
  222. package/cjs/tools/readBytesFromStream.d.ts +10 -0
  223. package/cjs/tools/readBytesFromStream.js +28 -0
  224. package/cjs/tools/readBytesFromStream.js.map +1 -0
  225. package/cjs/tools/requestIdleCallback.d.ts +12 -0
  226. package/cjs/tools/requestIdleCallback.js +35 -0
  227. package/cjs/tools/requestIdleCallback.js.map +1 -0
  228. package/cjs/tools/sendToExtension.d.ts +3 -0
  229. package/cjs/tools/sendToExtension.js +11 -0
  230. package/cjs/tools/sendToExtension.js.map +1 -0
  231. package/cjs/tools/serialisation/context.d.ts +9 -0
  232. package/cjs/tools/serialisation/context.js +3 -0
  233. package/cjs/tools/serialisation/context.js.map +1 -0
  234. package/cjs/tools/serialisation/jsonStringify.d.ts +13 -0
  235. package/cjs/tools/serialisation/jsonStringify.js +48 -0
  236. package/cjs/tools/serialisation/jsonStringify.js.map +1 -0
  237. package/cjs/tools/serialisation/sanitize.d.ts +18 -0
  238. package/cjs/tools/serialisation/sanitize.js +188 -0
  239. package/cjs/tools/serialisation/sanitize.js.map +1 -0
  240. package/cjs/tools/stackTrace/computeStackTrace.d.ts +25 -0
  241. package/cjs/tools/stackTrace/computeStackTrace.js +187 -0
  242. package/cjs/tools/stackTrace/computeStackTrace.js.map +1 -0
  243. package/cjs/tools/stackTrace/handlingStack.d.ts +10 -0
  244. package/cjs/tools/stackTrace/handlingStack.js +46 -0
  245. package/cjs/tools/stackTrace/handlingStack.js.map +1 -0
  246. package/cjs/tools/taskQueue.d.ts +15 -0
  247. package/cjs/tools/taskQueue.js +54 -0
  248. package/cjs/tools/taskQueue.js.map +1 -0
  249. package/cjs/tools/timer.d.ts +5 -0
  250. package/cjs/tools/timer.js +22 -0
  251. package/cjs/tools/timer.js.map +1 -0
  252. package/cjs/tools/utils/arrayUtils.d.ts +3 -0
  253. package/cjs/tools/utils/arrayUtils.js +20 -0
  254. package/cjs/tools/utils/arrayUtils.js.map +1 -0
  255. package/cjs/tools/utils/browserDetection.d.ts +8 -0
  256. package/cjs/tools/utils/browserDetection.js +33 -0
  257. package/cjs/tools/utils/browserDetection.js.map +1 -0
  258. package/cjs/tools/utils/byteUtils.d.ts +8 -0
  259. package/cjs/tools/utils/byteUtils.js +34 -0
  260. package/cjs/tools/utils/byteUtils.js.map +1 -0
  261. package/cjs/tools/utils/functionUtils.d.ts +8 -0
  262. package/cjs/tools/utils/functionUtils.js +43 -0
  263. package/cjs/tools/utils/functionUtils.js.map +1 -0
  264. package/cjs/tools/utils/numberUtils.d.ts +8 -0
  265. package/cjs/tools/utils/numberUtils.js +23 -0
  266. package/cjs/tools/utils/numberUtils.js.map +1 -0
  267. package/cjs/tools/utils/objectUtils.d.ts +10 -0
  268. package/cjs/tools/utils/objectUtils.js +23 -0
  269. package/cjs/tools/utils/objectUtils.js.map +1 -0
  270. package/cjs/tools/utils/polyfills.d.ts +7 -0
  271. package/cjs/tools/utils/polyfills.js +23 -0
  272. package/cjs/tools/utils/polyfills.js.map +1 -0
  273. package/cjs/tools/utils/responseUtils.d.ts +2 -0
  274. package/cjs/tools/utils/responseUtils.js +17 -0
  275. package/cjs/tools/utils/responseUtils.js.map +1 -0
  276. package/cjs/tools/utils/stringUtils.d.ts +23 -0
  277. package/cjs/tools/utils/stringUtils.js +91 -0
  278. package/cjs/tools/utils/stringUtils.js.map +1 -0
  279. package/cjs/tools/utils/timeUtils.d.ts +53 -0
  280. package/cjs/tools/utils/timeUtils.js +101 -0
  281. package/cjs/tools/utils/timeUtils.js.map +1 -0
  282. package/cjs/tools/utils/timezone.d.ts +1 -0
  283. package/cjs/tools/utils/timezone.js +13 -0
  284. package/cjs/tools/utils/timezone.js.map +1 -0
  285. package/cjs/tools/utils/typeUtils.d.ts +4 -0
  286. package/cjs/tools/utils/typeUtils.js +16 -0
  287. package/cjs/tools/utils/typeUtils.js.map +1 -0
  288. package/cjs/tools/utils/urlPolyfill.d.ts +5 -0
  289. package/cjs/tools/utils/urlPolyfill.js +59 -0
  290. package/cjs/tools/utils/urlPolyfill.js.map +1 -0
  291. package/cjs/tools/valueHistory.d.ts +27 -0
  292. package/cjs/tools/valueHistory.js +104 -0
  293. package/cjs/tools/valueHistory.js.map +1 -0
  294. package/cjs/transport/batch.d.ts +16 -0
  295. package/cjs/transport/batch.js +110 -0
  296. package/cjs/transport/batch.js.map +1 -0
  297. package/cjs/transport/eventBridge.d.ts +21 -0
  298. package/cjs/transport/eventBridge.js +46 -0
  299. package/cjs/transport/eventBridge.js.map +1 -0
  300. package/cjs/transport/flushController.d.ts +65 -0
  301. package/cjs/transport/flushController.js +123 -0
  302. package/cjs/transport/flushController.js.map +1 -0
  303. package/cjs/transport/httpRequest.d.ts +57 -0
  304. package/cjs/transport/httpRequest.js +107 -0
  305. package/cjs/transport/httpRequest.js.map +1 -0
  306. package/cjs/transport/index.d.ts +7 -0
  307. package/cjs/transport/index.js +15 -0
  308. package/cjs/transport/index.js.map +1 -0
  309. package/cjs/transport/sendWithRetryStrategy.d.ts +41 -0
  310. package/cjs/transport/sendWithRetryStrategy.js +163 -0
  311. package/cjs/transport/sendWithRetryStrategy.js.map +1 -0
  312. package/esm/boot/displayAlreadyInitializedError.d.ts +2 -0
  313. package/esm/boot/displayAlreadyInitializedError.js +7 -0
  314. package/esm/boot/displayAlreadyInitializedError.js.map +1 -0
  315. package/esm/boot/init.d.ts +13 -0
  316. package/esm/boot/init.js +35 -0
  317. package/esm/boot/init.js.map +1 -0
  318. package/esm/browser/addEventListener.d.ts +87 -0
  319. package/esm/browser/addEventListener.js +51 -0
  320. package/esm/browser/addEventListener.js.map +1 -0
  321. package/esm/browser/browser.types.d.ts +51 -0
  322. package/esm/browser/browser.types.js +5 -0
  323. package/esm/browser/browser.types.js.map +1 -0
  324. package/esm/browser/cookie.d.ts +26 -0
  325. package/esm/browser/cookie.js +101 -0
  326. package/esm/browser/cookie.js.map +1 -0
  327. package/esm/browser/fetchObservable.d.ts +38 -0
  328. package/esm/browser/fetchObservable.js +99 -0
  329. package/esm/browser/fetchObservable.js.map +1 -0
  330. package/esm/browser/pageMayExitObservable.d.ts +14 -0
  331. package/esm/browser/pageMayExitObservable.js +40 -0
  332. package/esm/browser/pageMayExitObservable.js.map +1 -0
  333. package/esm/browser/runOnReadyState.d.ts +5 -0
  334. package/esm/browser/runOnReadyState.js +16 -0
  335. package/esm/browser/runOnReadyState.js.map +1 -0
  336. package/esm/browser/xhrObservable.d.ts +24 -0
  337. package/esm/browser/xhrObservable.js +83 -0
  338. package/esm/browser/xhrObservable.js.map +1 -0
  339. package/esm/domain/allowedTrackingOrigins.d.ts +4 -0
  340. package/esm/domain/allowedTrackingOrigins.js +21 -0
  341. package/esm/domain/allowedTrackingOrigins.js.map +1 -0
  342. package/esm/domain/bufferedData.d.ts +14 -0
  343. package/esm/domain/bufferedData.js +19 -0
  344. package/esm/domain/bufferedData.js.map +1 -0
  345. package/esm/domain/configuration/configuration.d.ts +284 -0
  346. package/esm/domain/configuration/configuration.js +129 -0
  347. package/esm/domain/configuration/configuration.js.map +1 -0
  348. package/esm/domain/configuration/endpointBuilder.d.ts +12 -0
  349. package/esm/domain/configuration/endpointBuilder.js +62 -0
  350. package/esm/domain/configuration/endpointBuilder.js.map +1 -0
  351. package/esm/domain/configuration/index.d.ts +6 -0
  352. package/esm/domain/configuration/index.js +5 -0
  353. package/esm/domain/configuration/index.js.map +1 -0
  354. package/esm/domain/configuration/transportConfiguration.d.ts +21 -0
  355. package/esm/domain/configuration/transportConfiguration.js +54 -0
  356. package/esm/domain/configuration/transportConfiguration.js.map +1 -0
  357. package/esm/domain/connectivity/connectivity.d.ts +14 -0
  358. package/esm/domain/connectivity/connectivity.js +11 -0
  359. package/esm/domain/connectivity/connectivity.js.map +1 -0
  360. package/esm/domain/connectivity/index.d.ts +1 -0
  361. package/esm/domain/connectivity/index.js +2 -0
  362. package/esm/domain/connectivity/index.js.map +1 -0
  363. package/esm/domain/console/consoleObservable.d.ts +21 -0
  364. package/esm/domain/console/consoleObservable.js +80 -0
  365. package/esm/domain/console/consoleObservable.js.map +1 -0
  366. package/esm/domain/context/contextConstants.d.ts +21 -0
  367. package/esm/domain/context/contextConstants.js +15 -0
  368. package/esm/domain/context/contextConstants.js.map +1 -0
  369. package/esm/domain/context/contextManager.d.ts +19 -0
  370. package/esm/domain/context/contextManager.js +56 -0
  371. package/esm/domain/context/contextManager.js.map +1 -0
  372. package/esm/domain/context/contextUtils.d.ts +5 -0
  373. package/esm/domain/context/contextUtils.js +13 -0
  374. package/esm/domain/context/contextUtils.js.map +1 -0
  375. package/esm/domain/context/defineContextMethod.d.ts +6 -0
  376. package/esm/domain/context/defineContextMethod.js +17 -0
  377. package/esm/domain/context/defineContextMethod.js.map +1 -0
  378. package/esm/domain/context/storeContextManager.d.ts +6 -0
  379. package/esm/domain/context/storeContextManager.js +35 -0
  380. package/esm/domain/context/storeContextManager.js.map +1 -0
  381. package/esm/domain/contexts/accountContext.d.ts +26 -0
  382. package/esm/domain/contexts/accountContext.js +29 -0
  383. package/esm/domain/contexts/accountContext.js.map +1 -0
  384. package/esm/domain/contexts/globalContext.d.ts +18 -0
  385. package/esm/domain/contexts/globalContext.js +17 -0
  386. package/esm/domain/contexts/globalContext.js.map +1 -0
  387. package/esm/domain/contexts/rumInternalContext.type.d.ts +14 -0
  388. package/esm/domain/contexts/rumInternalContext.type.js +2 -0
  389. package/esm/domain/contexts/rumInternalContext.type.js.map +1 -0
  390. package/esm/domain/contexts/userContext.d.ts +31 -0
  391. package/esm/domain/contexts/userContext.js +116 -0
  392. package/esm/domain/contexts/userContext.js.map +1 -0
  393. package/esm/domain/deflate/deflate.types.d.ts +40 -0
  394. package/esm/domain/deflate/deflate.types.js +2 -0
  395. package/esm/domain/deflate/deflate.types.js.map +1 -0
  396. package/esm/domain/deflate/index.d.ts +1 -0
  397. package/esm/domain/deflate/index.js +2 -0
  398. package/esm/domain/deflate/index.js.map +1 -0
  399. package/esm/domain/error/error.d.ts +23 -0
  400. package/esm/domain/error/error.js +72 -0
  401. package/esm/domain/error/error.js.map +1 -0
  402. package/esm/domain/error/error.types.d.ts +47 -0
  403. package/esm/domain/error/error.types.js +10 -0
  404. package/esm/domain/error/error.types.js.map +1 -0
  405. package/esm/domain/error/trackRuntimeError.d.ts +11 -0
  406. package/esm/domain/error/trackRuntimeError.js +43 -0
  407. package/esm/domain/error/trackRuntimeError.js.map +1 -0
  408. package/esm/domain/eventRateLimiter/createEventRateLimiter.d.ts +5 -0
  409. package/esm/domain/eventRateLimiter/createEventRateLimiter.js +38 -0
  410. package/esm/domain/eventRateLimiter/createEventRateLimiter.js.map +1 -0
  411. package/esm/domain/extension/extensionUtils.d.ts +10 -0
  412. package/esm/domain/extension/extensionUtils.js +25 -0
  413. package/esm/domain/extension/extensionUtils.js.map +1 -0
  414. package/esm/domain/intakeSites.d.ts +4 -0
  415. package/esm/domain/intakeSites.js +4 -0
  416. package/esm/domain/intakeSites.js.map +1 -0
  417. package/esm/domain/report/browser.types.d.ts +34 -0
  418. package/esm/domain/report/browser.types.js +2 -0
  419. package/esm/domain/report/browser.types.js.map +1 -0
  420. package/esm/domain/report/reportObservable.d.ts +14 -0
  421. package/esm/domain/report/reportObservable.js +95 -0
  422. package/esm/domain/report/reportObservable.js.map +1 -0
  423. package/esm/domain/resourceUtils.d.ts +18 -0
  424. package/esm/domain/resourceUtils.js +17 -0
  425. package/esm/domain/resourceUtils.js.map +1 -0
  426. package/esm/domain/session/oldCookiesMigration.d.ts +11 -0
  427. package/esm/domain/session/oldCookiesMigration.js +36 -0
  428. package/esm/domain/session/oldCookiesMigration.js.map +1 -0
  429. package/esm/domain/session/sessionConstants.d.ts +15 -0
  430. package/esm/domain/session/sessionConstants.js +13 -0
  431. package/esm/domain/session/sessionConstants.js.map +1 -0
  432. package/esm/domain/session/sessionManager.d.ts +28 -0
  433. package/esm/domain/session/sessionManager.js +196 -0
  434. package/esm/domain/session/sessionManager.js.map +1 -0
  435. package/esm/domain/session/sessionState.d.ts +16 -0
  436. package/esm/domain/session/sessionState.js +60 -0
  437. package/esm/domain/session/sessionState.js.map +1 -0
  438. package/esm/domain/session/sessionStateValidation.d.ts +3 -0
  439. package/esm/domain/session/sessionStateValidation.js +7 -0
  440. package/esm/domain/session/sessionStateValidation.js.map +1 -0
  441. package/esm/domain/session/sessionStore.d.ts +38 -0
  442. package/esm/domain/session/sessionStore.js +180 -0
  443. package/esm/domain/session/sessionStore.js.map +1 -0
  444. package/esm/domain/session/sessionStoreOperations.d.ts +12 -0
  445. package/esm/domain/session/sessionStoreOperations.js +114 -0
  446. package/esm/domain/session/sessionStoreOperations.js.map +1 -0
  447. package/esm/domain/session/storeStrategies/sessionInCookie.d.ts +12 -0
  448. package/esm/domain/session/storeStrategies/sessionInCookie.js +98 -0
  449. package/esm/domain/session/storeStrategies/sessionInCookie.js.map +1 -0
  450. package/esm/domain/session/storeStrategies/sessionInLocalStorage.d.ts +6 -0
  451. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js +37 -0
  452. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js.map +1 -0
  453. package/esm/domain/session/storeStrategies/sessionStoreStrategy.d.ts +16 -0
  454. package/esm/domain/session/storeStrategies/sessionStoreStrategy.js +2 -0
  455. package/esm/domain/session/storeStrategies/sessionStoreStrategy.js.map +1 -0
  456. package/esm/domain/synthetics/syntheticsWorkerValues.d.ts +12 -0
  457. package/esm/domain/synthetics/syntheticsWorkerValues.js +24 -0
  458. package/esm/domain/synthetics/syntheticsWorkerValues.js.map +1 -0
  459. package/esm/domain/tags.d.ts +6 -0
  460. package/esm/domain/tags.js +59 -0
  461. package/esm/domain/tags.js.map +1 -0
  462. package/esm/domain/telemetry/index.d.ts +4 -0
  463. package/esm/domain/telemetry/index.js +3 -0
  464. package/esm/domain/telemetry/index.js.map +1 -0
  465. package/esm/domain/telemetry/rawTelemetryEvent.types.d.ts +18 -0
  466. package/esm/domain/telemetry/rawTelemetryEvent.types.js +6 -0
  467. package/esm/domain/telemetry/rawTelemetryEvent.types.js.map +1 -0
  468. package/esm/domain/telemetry/telemetry.d.ts +56 -0
  469. package/esm/domain/telemetry/telemetry.js +232 -0
  470. package/esm/domain/telemetry/telemetry.js.map +1 -0
  471. package/esm/domain/telemetry/telemetryEvent.types.d.ts +866 -0
  472. package/esm/domain/telemetry/telemetryEvent.types.js +6 -0
  473. package/esm/domain/telemetry/telemetryEvent.types.js.map +1 -0
  474. package/esm/domain/trackingConsent.d.ts +13 -0
  475. package/esm/domain/trackingConsent.js +24 -0
  476. package/esm/domain/trackingConsent.js.map +1 -0
  477. package/esm/domain/userAgentData/index.d.ts +1 -0
  478. package/esm/domain/userAgentData/index.js +2 -0
  479. package/esm/domain/userAgentData/index.js.map +1 -0
  480. package/esm/domain/userAgentData/userAgentData.d.ts +22 -0
  481. package/esm/domain/userAgentData/userAgentData.js +105 -0
  482. package/esm/domain/userAgentData/userAgentData.js.map +1 -0
  483. package/esm/index.d.ts +101 -0
  484. package/esm/index.js +77 -0
  485. package/esm/index.js.map +1 -0
  486. package/esm/tools/abstractHooks.d.ts +24 -0
  487. package/esm/tools/abstractHooks.js +37 -0
  488. package/esm/tools/abstractHooks.js.map +1 -0
  489. package/esm/tools/abstractLifeCycle.d.ts +23 -0
  490. package/esm/tools/abstractLifeCycle.js +24 -0
  491. package/esm/tools/abstractLifeCycle.js.map +1 -0
  492. package/esm/tools/boundedBuffer.d.ts +16 -0
  493. package/esm/tools/boundedBuffer.js +29 -0
  494. package/esm/tools/boundedBuffer.js.map +1 -0
  495. package/esm/tools/catchUserErrors.d.ts +1 -0
  496. package/esm/tools/catchUserErrors.js +12 -0
  497. package/esm/tools/catchUserErrors.js.map +1 -0
  498. package/esm/tools/display.d.ts +38 -0
  499. package/esm/tools/display.js +41 -0
  500. package/esm/tools/display.js.map +1 -0
  501. package/esm/tools/encoder.d.ts +54 -0
  502. package/esm/tools/encoder.js +37 -0
  503. package/esm/tools/encoder.js.map +1 -0
  504. package/esm/tools/experimentalFeatures.d.ts +21 -0
  505. package/esm/tools/experimentalFeatures.js +42 -0
  506. package/esm/tools/experimentalFeatures.js.map +1 -0
  507. package/esm/tools/getZoneJsOriginalValue.d.ts +19 -0
  508. package/esm/tools/getZoneJsOriginalValue.js +26 -0
  509. package/esm/tools/getZoneJsOriginalValue.js.map +1 -0
  510. package/esm/tools/globalObject.d.ts +19 -0
  511. package/esm/tools/globalObject.js +40 -0
  512. package/esm/tools/globalObject.js.map +1 -0
  513. package/esm/tools/instrumentMethod.d.ts +75 -0
  514. package/esm/tools/instrumentMethod.js +114 -0
  515. package/esm/tools/instrumentMethod.js.map +1 -0
  516. package/esm/tools/matchOption.d.ts +8 -0
  517. package/esm/tools/matchOption.js +31 -0
  518. package/esm/tools/matchOption.js.map +1 -0
  519. package/esm/tools/mergeInto.d.ts +25 -0
  520. package/esm/tools/mergeInto.js +93 -0
  521. package/esm/tools/mergeInto.js.map +1 -0
  522. package/esm/tools/monitor.d.ts +9 -0
  523. package/esm/tools/monitor.js +51 -0
  524. package/esm/tools/monitor.js.map +1 -0
  525. package/esm/tools/observable.d.ts +30 -0
  526. package/esm/tools/observable.js +83 -0
  527. package/esm/tools/observable.js.map +1 -0
  528. package/esm/tools/queueMicrotask.d.ts +1 -0
  529. package/esm/tools/queueMicrotask.js +14 -0
  530. package/esm/tools/queueMicrotask.js.map +1 -0
  531. package/esm/tools/readBytesFromStream.d.ts +10 -0
  532. package/esm/tools/readBytesFromStream.js +25 -0
  533. package/esm/tools/readBytesFromStream.js.map +1 -0
  534. package/esm/tools/requestIdleCallback.d.ts +12 -0
  535. package/esm/tools/requestIdleCallback.js +30 -0
  536. package/esm/tools/requestIdleCallback.js.map +1 -0
  537. package/esm/tools/sendToExtension.d.ts +3 -0
  538. package/esm/tools/sendToExtension.js +8 -0
  539. package/esm/tools/sendToExtension.js.map +1 -0
  540. package/esm/tools/serialisation/context.d.ts +9 -0
  541. package/esm/tools/serialisation/context.js +2 -0
  542. package/esm/tools/serialisation/context.js.map +1 -0
  543. package/esm/tools/serialisation/jsonStringify.d.ts +13 -0
  544. package/esm/tools/serialisation/jsonStringify.js +44 -0
  545. package/esm/tools/serialisation/jsonStringify.js.map +1 -0
  546. package/esm/tools/serialisation/sanitize.d.ts +18 -0
  547. package/esm/tools/serialisation/sanitize.js +185 -0
  548. package/esm/tools/serialisation/sanitize.js.map +1 -0
  549. package/esm/tools/stackTrace/computeStackTrace.d.ts +25 -0
  550. package/esm/tools/stackTrace/computeStackTrace.js +183 -0
  551. package/esm/tools/stackTrace/computeStackTrace.js.map +1 -0
  552. package/esm/tools/stackTrace/handlingStack.d.ts +10 -0
  553. package/esm/tools/stackTrace/handlingStack.js +41 -0
  554. package/esm/tools/stackTrace/handlingStack.js.map +1 -0
  555. package/esm/tools/taskQueue.d.ts +15 -0
  556. package/esm/tools/taskQueue.js +50 -0
  557. package/esm/tools/taskQueue.js.map +1 -0
  558. package/esm/tools/timer.d.ts +5 -0
  559. package/esm/tools/timer.js +16 -0
  560. package/esm/tools/timer.js.map +1 -0
  561. package/esm/tools/utils/arrayUtils.d.ts +3 -0
  562. package/esm/tools/utils/arrayUtils.js +15 -0
  563. package/esm/tools/utils/arrayUtils.js.map +1 -0
  564. package/esm/tools/utils/browserDetection.d.ts +8 -0
  565. package/esm/tools/utils/browserDetection.js +28 -0
  566. package/esm/tools/utils/browserDetection.js.map +1 -0
  567. package/esm/tools/utils/byteUtils.d.ts +8 -0
  568. package/esm/tools/utils/byteUtils.js +29 -0
  569. package/esm/tools/utils/byteUtils.js.map +1 -0
  570. package/esm/tools/utils/functionUtils.d.ts +8 -0
  571. package/esm/tools/utils/functionUtils.js +39 -0
  572. package/esm/tools/utils/functionUtils.js.map +1 -0
  573. package/esm/tools/utils/numberUtils.d.ts +8 -0
  574. package/esm/tools/utils/numberUtils.js +17 -0
  575. package/esm/tools/utils/numberUtils.js.map +1 -0
  576. package/esm/tools/utils/objectUtils.d.ts +10 -0
  577. package/esm/tools/utils/objectUtils.js +17 -0
  578. package/esm/tools/utils/objectUtils.js.map +1 -0
  579. package/esm/tools/utils/polyfills.d.ts +7 -0
  580. package/esm/tools/utils/polyfills.js +18 -0
  581. package/esm/tools/utils/polyfills.js.map +1 -0
  582. package/esm/tools/utils/responseUtils.d.ts +2 -0
  583. package/esm/tools/utils/responseUtils.js +13 -0
  584. package/esm/tools/utils/responseUtils.js.map +1 -0
  585. package/esm/tools/utils/stringUtils.d.ts +23 -0
  586. package/esm/tools/utils/stringUtils.js +84 -0
  587. package/esm/tools/utils/stringUtils.js.map +1 -0
  588. package/esm/tools/utils/timeUtils.d.ts +53 -0
  589. package/esm/tools/utils/timeUtils.js +84 -0
  590. package/esm/tools/utils/timeUtils.js.map +1 -0
  591. package/esm/tools/utils/timezone.d.ts +1 -0
  592. package/esm/tools/utils/timezone.js +10 -0
  593. package/esm/tools/utils/timezone.js.map +1 -0
  594. package/esm/tools/utils/typeUtils.d.ts +4 -0
  595. package/esm/tools/utils/typeUtils.js +13 -0
  596. package/esm/tools/utils/typeUtils.js.map +1 -0
  597. package/esm/tools/utils/urlPolyfill.d.ts +5 -0
  598. package/esm/tools/utils/urlPolyfill.js +52 -0
  599. package/esm/tools/utils/urlPolyfill.js.map +1 -0
  600. package/esm/tools/valueHistory.d.ts +27 -0
  601. package/esm/tools/valueHistory.js +100 -0
  602. package/esm/tools/valueHistory.js.map +1 -0
  603. package/esm/transport/batch.d.ts +16 -0
  604. package/esm/transport/batch.js +106 -0
  605. package/esm/transport/batch.js.map +1 -0
  606. package/esm/transport/eventBridge.d.ts +21 -0
  607. package/esm/transport/eventBridge.js +41 -0
  608. package/esm/transport/eventBridge.js.map +1 -0
  609. package/esm/transport/flushController.d.ts +65 -0
  610. package/esm/transport/flushController.js +119 -0
  611. package/esm/transport/flushController.js.map +1 -0
  612. package/esm/transport/httpRequest.d.ts +57 -0
  613. package/esm/transport/httpRequest.js +101 -0
  614. package/esm/transport/httpRequest.js.map +1 -0
  615. package/esm/transport/index.d.ts +7 -0
  616. package/esm/transport/index.js +5 -0
  617. package/esm/transport/index.js.map +1 -0
  618. package/esm/transport/sendWithRetryStrategy.d.ts +41 -0
  619. package/esm/transport/sendWithRetryStrategy.js +158 -0
  620. package/esm/transport/sendWithRetryStrategy.js.map +1 -0
  621. package/package.json +28 -0
  622. package/src/boot/displayAlreadyInitializedError.ts +8 -0
  623. package/src/boot/init.ts +54 -0
  624. package/src/browser/addEventListener.ts +145 -0
  625. package/src/browser/browser.types.ts +84 -0
  626. package/src/browser/cookie.ts +122 -0
  627. package/src/browser/fetchObservable.ts +167 -0
  628. package/src/browser/pageMayExitObservable.ts +56 -0
  629. package/src/browser/runOnReadyState.ts +25 -0
  630. package/src/browser/xhrObservable.ts +134 -0
  631. package/src/domain/allowedTrackingOrigins.ts +29 -0
  632. package/src/domain/bufferedData.ts +32 -0
  633. package/src/domain/configuration/configuration.ts +409 -0
  634. package/src/domain/configuration/endpointBuilder.ts +105 -0
  635. package/src/domain/configuration/index.ts +12 -0
  636. package/src/domain/configuration/transportConfiguration.ts +86 -0
  637. package/src/domain/connectivity/connectivity.ts +31 -0
  638. package/src/domain/connectivity/index.ts +1 -0
  639. package/src/domain/console/consoleObservable.ts +118 -0
  640. package/src/domain/context/contextConstants.ts +27 -0
  641. package/src/domain/context/contextManager.ts +81 -0
  642. package/src/domain/context/contextUtils.ts +14 -0
  643. package/src/domain/context/defineContextMethod.ts +31 -0
  644. package/src/domain/context/storeContextManager.ts +55 -0
  645. package/src/domain/contexts/accountContext.ts +47 -0
  646. package/src/domain/contexts/globalContext.ts +30 -0
  647. package/src/domain/contexts/rumInternalContext.type.ts +15 -0
  648. package/src/domain/contexts/userContext.ts +148 -0
  649. package/src/domain/deflate/deflate.types.ts +57 -0
  650. package/src/domain/deflate/index.ts +1 -0
  651. package/src/domain/error/error.ts +127 -0
  652. package/src/domain/error/error.types.ts +64 -0
  653. package/src/domain/error/trackRuntimeError.ts +50 -0
  654. package/src/domain/eventRateLimiter/createEventRateLimiter.ts +49 -0
  655. package/src/domain/extension/extensionUtils.ts +28 -0
  656. package/src/domain/intakeSites.ts +6 -0
  657. package/src/domain/report/browser.types.ts +38 -0
  658. package/src/domain/report/reportObservable.ts +133 -0
  659. package/src/domain/resourceUtils.ts +21 -0
  660. package/src/domain/session/README.md +193 -0
  661. package/src/domain/session/oldCookiesMigration.ts +42 -0
  662. package/src/domain/session/sessionConstants.ts +19 -0
  663. package/src/domain/session/sessionManager.ts +262 -0
  664. package/src/domain/session/sessionState.ts +83 -0
  665. package/src/domain/session/sessionStateValidation.ts +9 -0
  666. package/src/domain/session/sessionStore.ts +250 -0
  667. package/src/domain/session/sessionStoreOperations.ts +131 -0
  668. package/src/domain/session/storeStrategies/sessionInCookie.ts +146 -0
  669. package/src/domain/session/storeStrategies/sessionInLocalStorage.ts +44 -0
  670. package/src/domain/session/storeStrategies/sessionStoreStrategy.ts +16 -0
  671. package/src/domain/synthetics/syntheticsWorkerValues.ts +38 -0
  672. package/src/domain/tags.ts +75 -0
  673. package/src/domain/telemetry/index.ts +22 -0
  674. package/src/domain/telemetry/rawTelemetryEvent.types.ts +22 -0
  675. package/src/domain/telemetry/telemetry.ts +344 -0
  676. package/src/domain/telemetry/telemetryEvent.types.ts +907 -0
  677. package/src/domain/trackingConsent.ts +34 -0
  678. package/src/domain/userAgentData/index.ts +1 -0
  679. package/src/domain/userAgentData/userAgentData.ts +163 -0
  680. package/src/index.ts +169 -0
  681. package/src/tools/abstractHooks.ts +72 -0
  682. package/src/tools/abstractLifeCycle.ts +46 -0
  683. package/src/tools/boundedBuffer.ts +44 -0
  684. package/src/tools/catchUserErrors.ts +11 -0
  685. package/src/tools/display.ts +56 -0
  686. package/src/tools/encoder.ts +103 -0
  687. package/src/tools/experimentalFeatures.ts +52 -0
  688. package/src/tools/getZoneJsOriginalValue.ts +38 -0
  689. package/src/tools/globalObject.ts +51 -0
  690. package/src/tools/instrumentMethod.ts +170 -0
  691. package/src/tools/matchOption.ts +31 -0
  692. package/src/tools/mergeInto.ts +177 -0
  693. package/src/tools/monitor.ts +71 -0
  694. package/src/tools/observable.ts +103 -0
  695. package/src/tools/queueMicrotask.ts +13 -0
  696. package/src/tools/readBytesFromStream.ts +37 -0
  697. package/src/tools/requestIdleCallback.ts +40 -0
  698. package/src/tools/sendToExtension.ts +14 -0
  699. package/src/tools/serialisation/context.ts +11 -0
  700. package/src/tools/serialisation/jsonStringify.ts +53 -0
  701. package/src/tools/serialisation/sanitize.ts +273 -0
  702. package/src/tools/stackTrace/computeStackTrace.ts +251 -0
  703. package/src/tools/stackTrace/handlingStack.ts +48 -0
  704. package/src/tools/taskQueue.ts +63 -0
  705. package/src/tools/timer.ts +21 -0
  706. package/src/tools/utils/arrayUtils.ts +16 -0
  707. package/src/tools/utils/browserDetection.ts +39 -0
  708. package/src/tools/utils/byteUtils.ts +40 -0
  709. package/src/tools/utils/functionUtils.ts +45 -0
  710. package/src/tools/utils/numberUtils.ts +19 -0
  711. package/src/tools/utils/objectUtils.ts +19 -0
  712. package/src/tools/utils/polyfills.ts +23 -0
  713. package/src/tools/utils/responseUtils.ts +12 -0
  714. package/src/tools/utils/stringUtils.ts +86 -0
  715. package/src/tools/utils/timeUtils.ts +117 -0
  716. package/src/tools/utils/timezone.ts +9 -0
  717. package/src/tools/utils/typeUtils.ts +12 -0
  718. package/src/tools/utils/urlPolyfill.ts +55 -0
  719. package/src/tools/valueHistory.ts +151 -0
  720. package/src/transport/batch.ts +144 -0
  721. package/src/transport/eventBridge.ts +60 -0
  722. package/src/transport/flushController.ts +150 -0
  723. package/src/transport/httpRequest.ts +191 -0
  724. package/src/transport/index.ts +7 -0
  725. package/src/transport/sendWithRetryStrategy.ts +222 -0
@@ -0,0 +1,117 @@
1
+ import { isNumber, round } from './numberUtils'
2
+
3
+ export const ONE_SECOND = 1000
4
+ export const ONE_MINUTE = 60 * ONE_SECOND
5
+ export const ONE_HOUR = 60 * ONE_MINUTE
6
+ export const ONE_DAY = 24 * ONE_HOUR
7
+ export const ONE_YEAR = 365 * ONE_DAY
8
+
9
+ export type Duration = number & { d: 'Duration in ms' }
10
+ export type ServerDuration = number & { s: 'Duration in ns' }
11
+ export type TimeStamp = number & { t: 'Epoch time' }
12
+ export type RelativeTime = number & { r: 'Time relative to navigation start' } & { d: 'Duration in ms' }
13
+ export interface ClocksState {
14
+ relative: RelativeTime
15
+ timeStamp: TimeStamp
16
+ }
17
+
18
+ export function relativeToClocks(relative: RelativeTime) {
19
+ return { relative, timeStamp: getCorrectedTimeStamp(relative) }
20
+ }
21
+
22
+ export function timeStampToClocks(timeStamp: TimeStamp) {
23
+ return { relative: getRelativeTime(timeStamp), timeStamp }
24
+ }
25
+
26
+ function getCorrectedTimeStamp(relativeTime: RelativeTime) {
27
+ const correctedOrigin = (dateNow() - performance.now()) as TimeStamp
28
+ // apply correction only for positive drift
29
+ if (correctedOrigin > getNavigationStart()) {
30
+ return Math.round(addDuration(correctedOrigin, relativeTime)) as TimeStamp
31
+ }
32
+ return getTimeStamp(relativeTime)
33
+ }
34
+
35
+ export function currentDrift() {
36
+ return Math.round(dateNow() - addDuration(getNavigationStart(), performance.now() as Duration))
37
+ }
38
+
39
+ export function toServerDuration(duration: Duration): ServerDuration
40
+ export function toServerDuration(duration: Duration | undefined): ServerDuration | undefined
41
+ export function toServerDuration(duration: Duration | undefined) {
42
+ if (!isNumber(duration)) {
43
+ return duration
44
+ }
45
+ return round(duration * 1e6, 0) as ServerDuration
46
+ }
47
+
48
+ export function dateNow() {
49
+ // Do not use `Date.now` because sometimes websites are wrongly "polyfilling" it. For example, we
50
+ // had some users using a very old version of `datejs`, which patched `Date.now` to return a Date
51
+ // instance instead of a timestamp[1]. Those users are unlikely to fix this, so let's handle this
52
+ // case ourselves.
53
+ // [1]: https://github.com/datejs/Datejs/blob/97f5c7c58c5bc5accdab8aa7602b6ac56462d778/src/core-debug.js#L14-L16
54
+ return new Date().getTime()
55
+ }
56
+
57
+ export function timeStampNow() {
58
+ return dateNow() as TimeStamp
59
+ }
60
+
61
+ export function relativeNow() {
62
+ return performance.now() as RelativeTime
63
+ }
64
+
65
+ export function clocksNow() {
66
+ return { relative: relativeNow(), timeStamp: timeStampNow() }
67
+ }
68
+
69
+ export function clocksOrigin() {
70
+ return { relative: 0 as RelativeTime, timeStamp: getNavigationStart() }
71
+ }
72
+
73
+ export function elapsed(start: TimeStamp, end: TimeStamp): Duration
74
+ export function elapsed(start: RelativeTime, end: RelativeTime): Duration
75
+ export function elapsed(start: number, end: number) {
76
+ return (end - start) as Duration
77
+ }
78
+
79
+ export function addDuration(a: TimeStamp, b: Duration): TimeStamp
80
+ export function addDuration(a: RelativeTime, b: Duration): RelativeTime
81
+ export function addDuration(a: Duration, b: Duration): Duration
82
+ export function addDuration(a: number, b: number) {
83
+ return a + b
84
+ }
85
+
86
+ // Get the time since the navigation was started.
87
+ export function getRelativeTime(timestamp: TimeStamp) {
88
+ return (timestamp - getNavigationStart()) as RelativeTime
89
+ }
90
+
91
+ export function getTimeStamp(relativeTime: RelativeTime) {
92
+ return Math.round(addDuration(getNavigationStart(), relativeTime)) as TimeStamp
93
+ }
94
+
95
+ export function looksLikeRelativeTime(time: RelativeTime | TimeStamp): time is RelativeTime {
96
+ return time < ONE_YEAR
97
+ }
98
+
99
+ /**
100
+ * Navigation start slightly change on some rare cases
101
+ */
102
+ let navigationStart: TimeStamp | undefined
103
+
104
+ /**
105
+ * Notes: this does not use `performance.timeOrigin` because:
106
+ * - It doesn't seem to reflect the actual time on which the navigation has started: it may be much farther in the past,
107
+ * at least in Firefox 71. (see: https://bugzilla.mozilla.org/show_bug.cgi?id=1429926)
108
+ * - It is not supported in Safari <15
109
+ */
110
+ function getNavigationStart() {
111
+ if (navigationStart === undefined) {
112
+ // ServiceWorkers do not support navigationStart (it's deprecated), so we fallback to timeOrigin
113
+ navigationStart = (performance.timing?.navigationStart ?? performance.timeOrigin) as TimeStamp
114
+ }
115
+
116
+ return navigationStart
117
+ }
@@ -0,0 +1,9 @@
1
+ export function getTimeZone() {
2
+ try {
3
+ const intl = new Intl.DateTimeFormat()
4
+
5
+ return intl.resolvedOptions().timeZone
6
+ } catch {
7
+ return undefined
8
+ }
9
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Similar to `typeof`, but distinguish plain objects from `null` and arrays
3
+ */
4
+ export function getType(value: unknown) {
5
+ if (value === null) {
6
+ return 'null'
7
+ }
8
+ if (Array.isArray(value)) {
9
+ return 'array'
10
+ }
11
+ return typeof value
12
+ }
@@ -0,0 +1,55 @@
1
+ import { globalObject } from '../globalObject'
2
+
3
+ export function normalizeUrl(url: string) {
4
+ return buildUrl(url, location.href).href
5
+ }
6
+
7
+ export function isValidUrl(url: string) {
8
+ try {
9
+ return !!buildUrl(url)
10
+ } catch {
11
+ return false
12
+ }
13
+ }
14
+
15
+ export function getPathName(url: string) {
16
+ const pathname = buildUrl(url).pathname
17
+ return pathname[0] === '/' ? pathname : `/${pathname}`
18
+ }
19
+
20
+ export function buildUrl(url: string, base?: string) {
21
+ const { URL } = getPristineWindow()
22
+
23
+ try {
24
+ return base !== undefined ? new URL(url, base) : new URL(url)
25
+ } catch (error) {
26
+ throw new Error(`Failed to construct URL: ${String(error)}`)
27
+ }
28
+ }
29
+
30
+ /**
31
+ * Get native URL constructor from a clean iframe
32
+ * This avoids polyfill issues by getting the native implementation from a fresh iframe context
33
+ * Falls back to the original URL constructor if iframe approach fails
34
+ */
35
+ let getPristineGlobalObjectCache: Pick<typeof window, 'URL'> | undefined
36
+
37
+ export function getPristineWindow() {
38
+ if (!getPristineGlobalObjectCache) {
39
+ let iframe: HTMLIFrameElement | undefined
40
+ let pristineWindow: Window & typeof globalThis
41
+ try {
42
+ iframe = document.createElement('iframe')
43
+ iframe.style.display = 'none'
44
+ document.body.appendChild(iframe)
45
+ pristineWindow = iframe.contentWindow as Window & typeof globalThis
46
+ } catch {
47
+ pristineWindow = globalObject as unknown as Window & typeof globalThis
48
+ }
49
+ getPristineGlobalObjectCache = {
50
+ URL: pristineWindow.URL,
51
+ }
52
+ iframe?.remove()
53
+ }
54
+ return getPristineGlobalObjectCache
55
+ }
@@ -0,0 +1,151 @@
1
+ import { setInterval, clearInterval } from './timer'
2
+ import type { TimeoutId } from './timer'
3
+ import { removeItem } from './utils/arrayUtils'
4
+ import type { Duration, RelativeTime } from './utils/timeUtils'
5
+ import { addDuration, relativeNow, ONE_MINUTE } from './utils/timeUtils'
6
+
7
+ const END_OF_TIMES = Infinity as RelativeTime
8
+
9
+ export interface ValueHistoryEntry<T> {
10
+ startTime: RelativeTime
11
+ endTime: RelativeTime
12
+ value: T
13
+ remove(): void
14
+ close(endTime: RelativeTime): void
15
+ }
16
+
17
+ export const CLEAR_OLD_VALUES_INTERVAL = ONE_MINUTE
18
+
19
+ /**
20
+ * Store and keep track of values spans. This whole cache assumes that values are added in
21
+ * chronological order (i.e. all entries have an increasing start time).
22
+ */
23
+ export interface ValueHistory<Value> {
24
+ add: (value: Value, startTime: RelativeTime) => ValueHistoryEntry<Value>
25
+ find: (startTime?: RelativeTime, options?: { returnInactive: boolean }) => Value | undefined
26
+
27
+ closeActive: (endTime: RelativeTime) => void
28
+ findAll: (startTime?: RelativeTime, duration?: Duration) => Value[]
29
+ reset: () => void
30
+ stop: () => void
31
+ }
32
+
33
+ let cleanupHistoriesInterval: TimeoutId | null = null
34
+
35
+ const cleanupTasks: Set<() => void> = new Set()
36
+
37
+ function cleanupHistories() {
38
+ cleanupTasks.forEach((task) => task())
39
+ }
40
+
41
+ export function createValueHistory<Value>({
42
+ expireDelay,
43
+ maxEntries,
44
+ }: {
45
+ expireDelay: number
46
+ maxEntries?: number
47
+ }): ValueHistory<Value> {
48
+ let entries: Array<ValueHistoryEntry<Value>> = []
49
+
50
+ if (!cleanupHistoriesInterval) {
51
+ cleanupHistoriesInterval = setInterval(() => cleanupHistories(), CLEAR_OLD_VALUES_INTERVAL)
52
+ }
53
+
54
+ const clearExpiredValues = () => {
55
+ const oldTimeThreshold = relativeNow() - expireDelay
56
+ while (entries.length > 0 && entries[entries.length - 1].endTime < oldTimeThreshold) {
57
+ entries.pop()
58
+ }
59
+ }
60
+
61
+ cleanupTasks.add(clearExpiredValues)
62
+
63
+ /**
64
+ * Add a value to the history associated with a start time. Returns a reference to this newly
65
+ * added entry that can be removed or closed.
66
+ */
67
+ function add(value: Value, startTime: RelativeTime): ValueHistoryEntry<Value> {
68
+ const entry: ValueHistoryEntry<Value> = {
69
+ value,
70
+ startTime,
71
+ endTime: END_OF_TIMES,
72
+ remove: () => {
73
+ removeItem(entries, entry)
74
+ },
75
+ close: (endTime: RelativeTime) => {
76
+ entry.endTime = endTime
77
+ },
78
+ }
79
+
80
+ if (maxEntries && entries.length >= maxEntries) {
81
+ entries.pop()
82
+ }
83
+
84
+ entries.unshift(entry)
85
+
86
+ return entry
87
+ }
88
+
89
+ /**
90
+ * Return the latest value that was active during `startTime`, or the currently active value
91
+ * if no `startTime` is provided. This method assumes that entries are not overlapping.
92
+ *
93
+ * If `option.returnInactive` is true, returns the value at `startTime` (active or not).
94
+ */
95
+ function find(
96
+ startTime: RelativeTime = END_OF_TIMES,
97
+ options: { returnInactive: boolean } = { returnInactive: false }
98
+ ): Value | undefined {
99
+ for (const entry of entries) {
100
+ if (entry.startTime <= startTime) {
101
+ if (options.returnInactive || startTime <= entry.endTime) {
102
+ return entry.value
103
+ }
104
+ break
105
+ }
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Helper function to close the currently active value, if any. This method assumes that entries
111
+ * are not overlapping.
112
+ */
113
+ function closeActive(endTime: RelativeTime) {
114
+ const latestEntry = entries[0]
115
+ if (latestEntry && latestEntry.endTime === END_OF_TIMES) {
116
+ latestEntry.close(endTime)
117
+ }
118
+ }
119
+
120
+ /**
121
+ * Return all values with an active period overlapping with the duration,
122
+ * or all values that were active during `startTime` if no duration is provided,
123
+ * or all currently active values if no `startTime` is provided.
124
+ */
125
+ function findAll(startTime: RelativeTime = END_OF_TIMES, duration = 0 as Duration): Value[] {
126
+ const endTime = addDuration(startTime, duration)
127
+ return entries
128
+ .filter((entry) => entry.startTime <= endTime && startTime <= entry.endTime)
129
+ .map((entry) => entry.value)
130
+ }
131
+
132
+ /**
133
+ * Remove all entries from this collection.
134
+ */
135
+ function reset() {
136
+ entries = []
137
+ }
138
+
139
+ /**
140
+ * Stop internal garbage collection of past entries.
141
+ */
142
+ function stop() {
143
+ cleanupTasks.delete(clearExpiredValues)
144
+ if (cleanupTasks.size === 0 && cleanupHistoriesInterval) {
145
+ clearInterval(cleanupHistoriesInterval)
146
+ cleanupHistoriesInterval = null
147
+ }
148
+ }
149
+
150
+ return { add, find, closeActive, findAll, reset, stop }
151
+ }
@@ -0,0 +1,144 @@
1
+ import { DOCS_TROUBLESHOOTING, MORE_DETAILS, display } from '../tools/display'
2
+ import type { Context } from '../tools/serialisation/context'
3
+ import { objectValues } from '../tools/utils/polyfills'
4
+ import { isPageExitReason } from '../browser/pageMayExitObservable'
5
+ import { jsonStringify } from '../tools/serialisation/jsonStringify'
6
+ import type { Encoder, EncoderResult } from '../tools/encoder'
7
+ import { computeBytesCount, ONE_KIBI_BYTE } from '../tools/utils/byteUtils'
8
+ import type { HttpRequest, Payload } from './httpRequest'
9
+ import type { FlushController, FlushEvent } from './flushController'
10
+
11
+ export const MESSAGE_BYTES_LIMIT = 256 * ONE_KIBI_BYTE
12
+
13
+ export interface Batch {
14
+ flushController: FlushController
15
+ add: (message: Context) => void
16
+ upsert: (message: Context, key: string) => void
17
+ stop: () => void
18
+ }
19
+
20
+ export function createBatch({
21
+ encoder,
22
+ request,
23
+ flushController,
24
+ }: {
25
+ encoder: Encoder
26
+ request: HttpRequest
27
+ flushController: FlushController
28
+ }): Batch {
29
+ let upsertBuffer: { [key: string]: string } = {}
30
+ const flushSubscription = flushController.flushObservable.subscribe((event) => flush(event))
31
+
32
+ function push(serializedMessage: string, estimatedMessageBytesCount: number, key?: string) {
33
+ flushController.notifyBeforeAddMessage(estimatedMessageBytesCount)
34
+
35
+ if (key !== undefined) {
36
+ upsertBuffer[key] = serializedMessage
37
+ flushController.notifyAfterAddMessage()
38
+ } else {
39
+ encoder.write(encoder.isEmpty ? serializedMessage : `\n${serializedMessage}`, (realMessageBytesCount) => {
40
+ flushController.notifyAfterAddMessage(realMessageBytesCount - estimatedMessageBytesCount)
41
+ })
42
+ }
43
+ }
44
+
45
+ function hasMessageFor(key?: string): key is string {
46
+ return key !== undefined && upsertBuffer[key] !== undefined
47
+ }
48
+
49
+ function remove(key: string) {
50
+ const removedMessage = upsertBuffer[key]
51
+ delete upsertBuffer[key]
52
+ const messageBytesCount = encoder.estimateEncodedBytesCount(removedMessage)
53
+ flushController.notifyAfterRemoveMessage(messageBytesCount)
54
+ }
55
+
56
+ function addOrUpdate(message: Context, key?: string) {
57
+ const serializedMessage = jsonStringify(message)!
58
+
59
+ const estimatedMessageBytesCount = encoder.estimateEncodedBytesCount(serializedMessage)
60
+
61
+ if (estimatedMessageBytesCount >= MESSAGE_BYTES_LIMIT) {
62
+ display.warn(
63
+ `Discarded a message whose size was bigger than the maximum allowed size ${MESSAGE_BYTES_LIMIT / ONE_KIBI_BYTE}KiB. ${MORE_DETAILS} ${DOCS_TROUBLESHOOTING}/#technical-limitations`
64
+ )
65
+ return
66
+ }
67
+
68
+ if (hasMessageFor(key)) {
69
+ remove(key)
70
+ }
71
+
72
+ push(serializedMessage, estimatedMessageBytesCount, key)
73
+ }
74
+
75
+ function flush(event: FlushEvent) {
76
+ const upsertMessages = objectValues(upsertBuffer).join('\n')
77
+ upsertBuffer = {}
78
+
79
+ const pageMightExit = isPageExitReason(event.reason)
80
+ const send = pageMightExit ? request.sendOnExit : request.send
81
+
82
+ if (
83
+ pageMightExit &&
84
+ // Note: checking that the encoder is async is not strictly needed, but it's an optimization:
85
+ // if the encoder is async we need to send two requests in some cases (one for encoded data
86
+ // and the other for non-encoded data). But if it's not async, we don't have to worry about
87
+ // it and always send a single request.
88
+ encoder.isAsync
89
+ ) {
90
+ const encoderResult = encoder.finishSync()
91
+
92
+ // Send encoded messages
93
+ if (encoderResult.outputBytesCount) {
94
+ send(formatPayloadFromEncoder(encoderResult))
95
+ }
96
+
97
+ // Send messages that are not yet encoded at this point
98
+ const pendingMessages = [encoderResult.pendingData, upsertMessages].filter(Boolean).join('\n')
99
+ if (pendingMessages) {
100
+ send({
101
+ data: pendingMessages,
102
+ bytesCount: computeBytesCount(pendingMessages),
103
+ })
104
+ }
105
+ } else {
106
+ if (upsertMessages) {
107
+ encoder.write(encoder.isEmpty ? upsertMessages : `\n${upsertMessages}`)
108
+ }
109
+ encoder.finish((encoderResult) => {
110
+ send(formatPayloadFromEncoder(encoderResult))
111
+ })
112
+ }
113
+ }
114
+
115
+ return {
116
+ flushController,
117
+ add: addOrUpdate,
118
+ upsert: addOrUpdate,
119
+ stop: flushSubscription.unsubscribe,
120
+ }
121
+ }
122
+
123
+ function formatPayloadFromEncoder(encoderResult: EncoderResult): Payload {
124
+ let data: string | Blob
125
+ if (typeof encoderResult.output === 'string') {
126
+ data = encoderResult.output
127
+ } else {
128
+ data = new Blob([encoderResult.output], {
129
+ // This will set the 'Content-Type: text/plain' header. Reasoning:
130
+ // * The intake rejects the request if there is no content type.
131
+ // * The browser will issue CORS preflight requests if we set it to 'application/json', which
132
+ // could induce higher intake load (and maybe has other impacts).
133
+ // * Also it's not quite JSON, since we are concatenating multiple JSON objects separated by
134
+ // new lines.
135
+ type: 'text/plain',
136
+ })
137
+ }
138
+
139
+ return {
140
+ data,
141
+ bytesCount: encoderResult.outputBytesCount,
142
+ encoding: encoderResult.encoding,
143
+ }
144
+ }
@@ -0,0 +1,60 @@
1
+ import { getGlobalObject } from '../tools/globalObject'
2
+ import type { DefaultPrivacyLevel } from '../domain/configuration'
3
+
4
+ export interface BrowserWindowWithEventBridge extends Window {
5
+ KubsesenseEventBridge?: KubsesenseEventBridge
6
+ }
7
+
8
+ export interface KubsesenseEventBridge {
9
+ getCapabilities?(): string
10
+ getPrivacyLevel?(): DefaultPrivacyLevel
11
+ getAllowedWebViewHosts(): string
12
+ send(msg: string): void
13
+ }
14
+
15
+ export const enum BridgeCapability {
16
+ RECORDS = 'records',
17
+ }
18
+
19
+ export function getEventBridge<T, E>() {
20
+ const eventBridgeGlobal = getEventBridgeGlobal()
21
+
22
+ if (!eventBridgeGlobal) {
23
+ return
24
+ }
25
+
26
+ return {
27
+ getCapabilities() {
28
+ return JSON.parse(eventBridgeGlobal.getCapabilities?.() || '[]') as BridgeCapability[]
29
+ },
30
+ getPrivacyLevel() {
31
+ return eventBridgeGlobal.getPrivacyLevel?.()
32
+ },
33
+ getAllowedWebViewHosts() {
34
+ return JSON.parse(eventBridgeGlobal.getAllowedWebViewHosts()) as string[]
35
+ },
36
+ send(eventType: T, event: E, viewId?: string) {
37
+ const view = viewId ? { id: viewId } : undefined
38
+ eventBridgeGlobal.send(JSON.stringify({ eventType, event, view }))
39
+ },
40
+ }
41
+ }
42
+
43
+ export function bridgeSupports(capability: BridgeCapability): boolean {
44
+ const bridge = getEventBridge()
45
+ return !!bridge && bridge.getCapabilities().includes(capability)
46
+ }
47
+
48
+ export function canUseEventBridge(currentHost = getGlobalObject<Window>().location?.hostname): boolean {
49
+ const bridge = getEventBridge()
50
+ return (
51
+ !!bridge &&
52
+ bridge
53
+ .getAllowedWebViewHosts()
54
+ .some((allowedHost) => currentHost === allowedHost || currentHost.endsWith(`.${allowedHost}`))
55
+ )
56
+ }
57
+
58
+ function getEventBridgeGlobal() {
59
+ return getGlobalObject<BrowserWindowWithEventBridge>().KubsesenseEventBridge
60
+ }
@@ -0,0 +1,150 @@
1
+ import type { PageMayExitEvent, PageExitReason } from '../browser/pageMayExitObservable'
2
+ import { isWorkerEnvironment } from '../tools/globalObject'
3
+ import { Observable } from '../tools/observable'
4
+ import type { TimeoutId } from '../tools/timer'
5
+ import { clearTimeout, setTimeout } from '../tools/timer'
6
+ import { ONE_SECOND } from '../tools/utils/timeUtils'
7
+ import type { Duration } from '../tools/utils/timeUtils'
8
+ import { RECOMMENDED_REQUEST_BYTES_LIMIT } from './httpRequest'
9
+
10
+ export type FlushReason = PageExitReason | 'duration_limit' | 'bytes_limit' | 'messages_limit' | 'session_expire'
11
+
12
+ /**
13
+ * flush automatically, aim to be lower than ALB connection timeout
14
+ * to maximize connection reuse.
15
+ */
16
+ export const FLUSH_DURATION_LIMIT = (30 * ONE_SECOND) as Duration
17
+
18
+ /**
19
+ * When using the SDK in a Worker Environment, we limit the batch size to 1 to ensure it can be sent
20
+ * in a single event.
21
+ */
22
+ export const MESSAGES_LIMIT = isWorkerEnvironment ? 1 : 50
23
+
24
+ export type FlushController = ReturnType<typeof createFlushController>
25
+ export interface FlushEvent {
26
+ reason: FlushReason
27
+ bytesCount: number
28
+ messagesCount: number
29
+ }
30
+
31
+ interface FlushControllerOptions {
32
+ pageMayExitObservable: Observable<PageMayExitEvent>
33
+ sessionExpireObservable: Observable<void>
34
+ }
35
+
36
+ /**
37
+ * Returns a "flush controller", responsible of notifying when flushing a pool of pending data needs
38
+ * to happen. The implementation is designed to support both synchronous and asynchronous usages,
39
+ * but relies on invariants described in each method documentation to keep a coherent state.
40
+ */
41
+ export function createFlushController({ pageMayExitObservable, sessionExpireObservable }: FlushControllerOptions) {
42
+ const pageMayExitSubscription = pageMayExitObservable.subscribe((event) => flush(event.reason))
43
+ const sessionExpireSubscription = sessionExpireObservable.subscribe(() => flush('session_expire'))
44
+
45
+ const flushObservable = new Observable<FlushEvent>(() => () => {
46
+ pageMayExitSubscription.unsubscribe()
47
+ sessionExpireSubscription.unsubscribe()
48
+ })
49
+
50
+ let currentBytesCount = 0
51
+ let currentMessagesCount = 0
52
+
53
+ function flush(flushReason: FlushReason) {
54
+ if (currentMessagesCount === 0) {
55
+ return
56
+ }
57
+
58
+ const messagesCount = currentMessagesCount
59
+ const bytesCount = currentBytesCount
60
+
61
+ currentMessagesCount = 0
62
+ currentBytesCount = 0
63
+ cancelDurationLimitTimeout()
64
+
65
+ flushObservable.notify({
66
+ reason: flushReason,
67
+ messagesCount,
68
+ bytesCount,
69
+ })
70
+ }
71
+
72
+ let durationLimitTimeoutId: TimeoutId | undefined
73
+ function scheduleDurationLimitTimeout() {
74
+ if (durationLimitTimeoutId === undefined) {
75
+ durationLimitTimeoutId = setTimeout(() => {
76
+ flush('duration_limit')
77
+ }, FLUSH_DURATION_LIMIT)
78
+ }
79
+ }
80
+
81
+ function cancelDurationLimitTimeout() {
82
+ clearTimeout(durationLimitTimeoutId)
83
+ durationLimitTimeoutId = undefined
84
+ }
85
+
86
+ return {
87
+ flushObservable,
88
+ get messagesCount() {
89
+ return currentMessagesCount
90
+ },
91
+
92
+ /**
93
+ * Notifies that a message will be added to a pool of pending messages waiting to be flushed.
94
+ *
95
+ * This function needs to be called synchronously, right before adding the message, so no flush
96
+ * event can happen after `notifyBeforeAddMessage` and before adding the message.
97
+ *
98
+ * @param estimatedMessageBytesCount - an estimation of the message bytes count once it is
99
+ * actually added.
100
+ */
101
+ notifyBeforeAddMessage(estimatedMessageBytesCount: number) {
102
+ if (currentBytesCount + estimatedMessageBytesCount >= RECOMMENDED_REQUEST_BYTES_LIMIT) {
103
+ flush('bytes_limit')
104
+ }
105
+ // Consider the message to be added now rather than in `notifyAfterAddMessage`, because if no
106
+ // message was added yet and `notifyAfterAddMessage` is called asynchronously, we still want
107
+ // to notify when a flush is needed (for example on page exit).
108
+ currentMessagesCount += 1
109
+ currentBytesCount += estimatedMessageBytesCount
110
+ scheduleDurationLimitTimeout()
111
+ },
112
+
113
+ /**
114
+ * Notifies that a message *was* added to a pool of pending messages waiting to be flushed.
115
+ *
116
+ * This function can be called asynchronously after the message was added, but in this case it
117
+ * should not be called if a flush event occurred in between.
118
+ *
119
+ * @param messageBytesCountDiff - the difference between the estimated message bytes count and
120
+ * its actual bytes count once added to the pool.
121
+ */
122
+ notifyAfterAddMessage(messageBytesCountDiff = 0) {
123
+ currentBytesCount += messageBytesCountDiff
124
+
125
+ if (currentMessagesCount >= MESSAGES_LIMIT) {
126
+ flush('messages_limit')
127
+ } else if (currentBytesCount >= RECOMMENDED_REQUEST_BYTES_LIMIT) {
128
+ flush('bytes_limit')
129
+ }
130
+ },
131
+
132
+ /**
133
+ * Notifies that a message was removed from a pool of pending messages waiting to be flushed.
134
+ *
135
+ * This function needs to be called synchronously, right after removing the message, so no flush
136
+ * event can happen after removing the message and before `notifyAfterRemoveMessage`.
137
+ *
138
+ * @param messageBytesCount - the message bytes count that was added to the pool. Should
139
+ * correspond to the sum of bytes counts passed to `notifyBeforeAddMessage` and
140
+ * `notifyAfterAddMessage`.
141
+ */
142
+ notifyAfterRemoveMessage(messageBytesCount: number) {
143
+ currentBytesCount -= messageBytesCount
144
+ currentMessagesCount -= 1
145
+ if (currentMessagesCount === 0) {
146
+ cancelDurationLimitTimeout()
147
+ }
148
+ },
149
+ }
150
+ }