@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
@@ -50,13 +50,17 @@ export function callMonitored<T extends (...args: any[]) => any>(
50
50
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
51
51
  return fn.apply(context, args)
52
52
  } catch (e) {
53
- displayIfDebugEnabled(e)
54
- if (onMonitorErrorCollected) {
55
- try {
56
- onMonitorErrorCollected(e)
57
- } catch (e) {
58
- displayIfDebugEnabled(e)
59
- }
53
+ monitorError(e)
54
+ }
55
+ }
56
+
57
+ export function monitorError(e: unknown) {
58
+ displayIfDebugEnabled(e)
59
+ if (onMonitorErrorCollected) {
60
+ try {
61
+ onMonitorErrorCollected(e)
62
+ } catch (e) {
63
+ displayIfDebugEnabled(e)
60
64
  }
61
65
  }
62
66
  }
@@ -1,31 +1,42 @@
1
+ import { queueMicrotask } from './queueMicrotask'
2
+
1
3
  export interface Subscription {
2
4
  unsubscribe: () => void
3
5
  }
4
6
 
7
+ type Observer<T> = (data: T) => void
8
+
9
+ // eslint-disable-next-line no-restricted-syntax
5
10
  export class Observable<T> {
6
- private observers: Array<(data: T) => void> = []
11
+ protected observers: Array<Observer<T>> = []
7
12
  private onLastUnsubscribe?: () => void
8
13
 
9
14
  constructor(private onFirstSubscribe?: (observable: Observable<T>) => (() => void) | void) {}
10
15
 
11
- subscribe(f: (data: T) => void): Subscription {
12
- if (!this.observers.length && this.onFirstSubscribe) {
13
- this.onLastUnsubscribe = this.onFirstSubscribe(this) || undefined
14
- }
15
- this.observers.push(f)
16
+ subscribe(observer: Observer<T>): Subscription {
17
+ this.addObserver(observer)
16
18
  return {
17
- unsubscribe: () => {
18
- this.observers = this.observers.filter((other) => f !== other)
19
- if (!this.observers.length && this.onLastUnsubscribe) {
20
- this.onLastUnsubscribe()
21
- }
22
- },
19
+ unsubscribe: () => this.removeObserver(observer),
23
20
  }
24
21
  }
25
22
 
26
23
  notify(data: T) {
27
24
  this.observers.forEach((observer) => observer(data))
28
25
  }
26
+
27
+ protected addObserver(observer: Observer<T>) {
28
+ this.observers.push(observer)
29
+ if (this.observers.length === 1 && this.onFirstSubscribe) {
30
+ this.onLastUnsubscribe = this.onFirstSubscribe(this) || undefined
31
+ }
32
+ }
33
+
34
+ protected removeObserver(observer: Observer<T>) {
35
+ this.observers = this.observers.filter((other) => observer !== other)
36
+ if (!this.observers.length && this.onLastUnsubscribe) {
37
+ this.onLastUnsubscribe()
38
+ }
39
+ }
29
40
  }
30
41
 
31
42
  export function mergeObservables<T>(...observables: Array<Observable<T>>) {
@@ -36,3 +47,58 @@ export function mergeObservables<T>(...observables: Array<Observable<T>>) {
36
47
  return () => subscriptions.forEach((subscription) => subscription.unsubscribe())
37
48
  })
38
49
  }
50
+
51
+ // eslint-disable-next-line no-restricted-syntax
52
+ export class BufferedObservable<T> extends Observable<T> {
53
+ private buffer: T[] = []
54
+
55
+ constructor(private maxBufferSize: number) {
56
+ super()
57
+ }
58
+
59
+ notify(data: T) {
60
+ this.buffer.push(data)
61
+ if (this.buffer.length > this.maxBufferSize) {
62
+ this.buffer.shift()
63
+ }
64
+ super.notify(data)
65
+ }
66
+
67
+ subscribe(observer: Observer<T>): Subscription {
68
+ let closed = false
69
+
70
+ const subscription = {
71
+ unsubscribe: () => {
72
+ closed = true
73
+ this.removeObserver(observer)
74
+ },
75
+ }
76
+
77
+ queueMicrotask(() => {
78
+ for (const data of this.buffer) {
79
+ if (closed) {
80
+ return
81
+ }
82
+ observer(data)
83
+ }
84
+
85
+ if (!closed) {
86
+ this.addObserver(observer)
87
+ }
88
+ })
89
+
90
+ return subscription
91
+ }
92
+
93
+ /**
94
+ * Drop buffered data and don't buffer future data. This is to avoid leaking memory when it's not
95
+ * needed anymore. This can be seen as a performance optimization, and things will work probably
96
+ * even if this method isn't called, but still useful to clarify our intent and lowering our
97
+ * memory impact.
98
+ */
99
+ unbuffer() {
100
+ queueMicrotask(() => {
101
+ this.maxBufferSize = this.buffer.length = 0
102
+ })
103
+ }
104
+ }
@@ -0,0 +1,13 @@
1
+ import { monitor } from './monitor'
2
+ import { globalObject } from './globalObject'
3
+
4
+ export function queueMicrotask(callback: () => void) {
5
+ const nativeImplementation = globalObject.queueMicrotask?.bind(globalObject)
6
+
7
+ if (typeof nativeImplementation === 'function') {
8
+ nativeImplementation(monitor(callback))
9
+ } else {
10
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises -- the callback is monitored, so it'll never throw
11
+ Promise.resolve().then(monitor(callback))
12
+ }
13
+ }
@@ -1,77 +1,37 @@
1
- import { monitor } from './monitor'
1
+ import type { Uint8ArrayBuffer } from './utils/byteUtils'
2
+ import { concatBuffers } from './utils/byteUtils'
2
3
  import { noop } from './utils/functionUtils'
3
4
 
4
- type Options = {
5
- bytesLimit: number
5
+ interface Options {
6
+ // TODO(next-major): always collect stream body when `trackEarlyRequests` is removed, as we don't
7
+ // need to use this function to just wait for the end of the stream without collecting it
6
8
  collectStreamBody?: boolean
7
9
  }
10
+
8
11
  /**
9
- * Read bytes from a ReadableStream until at least `limit` bytes have been read (or until the end of
10
- * the stream). The callback is invoked with the at most `limit` bytes, and indicates that the limit
11
- * has been exceeded if more bytes were available.
12
+ * Read bytes from a ReadableStream until the end of the stream.
13
+ * Returns the bytes if collectStreamBody is true, otherwise returns undefined.
12
14
  */
13
- export function readBytesFromStream(
14
- stream: ReadableStream<Uint8Array>,
15
- callback: (error?: Error, bytes?: Uint8Array, limitExceeded?: boolean) => void,
16
- options: Options
17
- ) {
15
+ export async function readBytesFromStream(stream: ReadableStream<Uint8ArrayBuffer>, options: Options) {
18
16
  const reader = stream.getReader()
19
- const chunks: Uint8Array[] = []
20
- let readBytesCount = 0
21
-
22
- readMore()
23
-
24
- function readMore() {
25
- reader.read().then(
26
- monitor((result: ReadableStreamReadResult<Uint8Array>) => {
27
- if (result.done) {
28
- onDone()
29
- return
30
- }
31
-
32
- if (options.collectStreamBody) {
33
- chunks.push(result.value)
34
- }
35
- readBytesCount += result.value.length
36
-
37
- if (readBytesCount > options.bytesLimit) {
38
- onDone()
39
- } else {
40
- readMore()
41
- }
42
- }),
43
- monitor((error) => callback(error))
44
- )
45
- }
17
+ const chunks: Uint8ArrayBuffer[] = []
46
18
 
47
- function onDone() {
48
- reader.cancel().catch(
49
- // we don't care if cancel fails, but we still need to catch the error to avoid reporting it
50
- // as an unhandled rejection
51
- noop
52
- )
19
+ while (true) {
20
+ const result = await reader.read()
21
+ if (result.done) {
22
+ break
23
+ }
53
24
 
54
- let bytes: Uint8Array | undefined
55
- let limitExceeded: boolean | undefined
56
25
  if (options.collectStreamBody) {
57
- let completeBuffer: Uint8Array
58
- if (chunks.length === 1) {
59
- // optimization: if the response is small enough to fit in a single buffer (provided by the browser), just
60
- // use it directly.
61
- completeBuffer = chunks[0]
62
- } else {
63
- // else, we need to copy buffers into a larger buffer to concatenate them.
64
- completeBuffer = new Uint8Array(readBytesCount)
65
- let offset = 0
66
- chunks.forEach((chunk) => {
67
- completeBuffer.set(chunk, offset)
68
- offset += chunk.length
69
- })
70
- }
71
- bytes = completeBuffer.slice(0, options.bytesLimit)
72
- limitExceeded = completeBuffer.length > options.bytesLimit
26
+ chunks.push(result.value)
73
27
  }
74
-
75
- callback(undefined, bytes, limitExceeded)
76
28
  }
29
+
30
+ reader.cancel().catch(
31
+ // we don't care if cancel fails, but we still need to catch the error to avoid reporting it
32
+ // as an unhandled rejection
33
+ noop
34
+ )
35
+
36
+ return options.collectStreamBody ? concatBuffers(chunks) : undefined
77
37
  }
@@ -0,0 +1,40 @@
1
+ import { setTimeout, clearTimeout } from './timer'
2
+ import { monitor } from './monitor'
3
+ import { dateNow } from './utils/timeUtils'
4
+
5
+ // This type is not yet supported in TS 3.8. Imported from the TS source until we upgrade the
6
+ // minimum supported TS version.
7
+ // https://github.com/microsoft/TypeScript/blob/13c374a868c926f6a907666a5599992c1351b773/src/lib/dom.generated.d.ts#L9513-L9516
8
+ export interface IdleDeadline {
9
+ readonly didTimeout: boolean
10
+ timeRemaining(): DOMHighResTimeStamp
11
+ }
12
+
13
+ /**
14
+ * 'requestIdleCallback' with a shim.
15
+ */
16
+ export function requestIdleCallback(callback: (deadline: IdleDeadline) => void, opts?: { timeout?: number }) {
17
+ // Note: check both 'requestIdleCallback' and 'cancelIdleCallback' existence because some polyfills only implement 'requestIdleCallback'.
18
+ if (window.requestIdleCallback && window.cancelIdleCallback) {
19
+ const id = window.requestIdleCallback(monitor(callback), opts)
20
+ return () => window.cancelIdleCallback(id)
21
+ }
22
+ return requestIdleCallbackShim(callback)
23
+ }
24
+
25
+ export const MAX_TASK_TIME = 50
26
+
27
+ /*
28
+ * Shim from https://developer.chrome.com/blog/using-requestidlecallback#checking_for_requestidlecallback
29
+ * Note: there is no simple way to support the "timeout" option, so we ignore it.
30
+ */
31
+ export function requestIdleCallbackShim(callback: (deadline: IdleDeadline) => void) {
32
+ const start = dateNow()
33
+ const timeoutId = setTimeout(() => {
34
+ callback({
35
+ didTimeout: false,
36
+ timeRemaining: () => Math.max(0, MAX_TASK_TIME - (dateNow() - start)),
37
+ })
38
+ }, 0)
39
+ return () => clearTimeout(timeoutId)
40
+ }
@@ -1,3 +1,5 @@
1
+ import { globalObject } from './globalObject'
2
+
1
3
  interface BrowserWindow {
2
4
  __ooBrowserSdkExtensionCallback?: (message: unknown) => void
3
5
  }
@@ -5,7 +7,7 @@ interface BrowserWindow {
5
7
  type ExtensionMessageType = 'logs' | 'record' | 'rum' | 'telemetry'
6
8
 
7
9
  export function sendToExtension(type: ExtensionMessageType, payload: unknown) {
8
- const callback = (window as BrowserWindow).__ooBrowserSdkExtensionCallback
10
+ const callback = (globalObject as BrowserWindow).__ooBrowserSdkExtensionCallback
9
11
  if (callback) {
10
12
  callback({ type, payload })
11
13
  }
@@ -4,5 +4,8 @@ export interface Context {
4
4
 
5
5
  export type ContextValue = string | number | boolean | Context | ContextArray | undefined | null
6
6
 
7
- // eslint-disable-next-line @typescript-eslint/no-empty-interface
7
+ /**
8
+ * @hidden
9
+ */
10
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
8
11
  export interface ContextArray extends Array<ContextValue> {}
@@ -4,18 +4,27 @@ import type { Context, ContextArray, ContextValue } from './context'
4
4
  import type { ObjectWithToJsonMethod } from './jsonStringify'
5
5
  import { detachToJsonMethod } from './jsonStringify'
6
6
 
7
- // eslint-disable-next-line @typescript-eslint/ban-types
7
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
8
8
  type PrimitivesAndFunctions = string | number | boolean | undefined | null | symbol | bigint | Function
9
9
  type ExtendedContextValue = PrimitivesAndFunctions | object | ExtendedContext | ExtendedContextArray
10
- type ExtendedContext = { [key: string]: ExtendedContextValue }
10
+ interface ExtendedContext {
11
+ [key: string]: ExtendedContextValue
12
+ }
11
13
  type ExtendedContextArray = ExtendedContextValue[]
12
14
 
13
- type ContainerElementToProcess = {
15
+ interface ContainerElementToProcess {
14
16
  source: ExtendedContextArray | ExtendedContext
15
17
  target: ContextArray | Context
16
18
  path: string
17
19
  }
18
20
 
21
+ interface SanitizedEvent extends Context {
22
+ type: string
23
+ isTrusted: boolean
24
+ currentTarget: string | null | undefined
25
+ target: string | null | undefined
26
+ }
27
+
19
28
  // The maximum size of a single event is 256KiB. By default, we ensure that user-provided data
20
29
  // going through sanitize fits inside our events, while leaving room for other contexts, metadata, ...
21
30
  const SANITIZE_DEFAULT_MAX_CHARACTER_COUNT = 220 * ONE_KIBI_BYTE
@@ -38,8 +47,8 @@ const KEY_DECORATION_LENGTH = 3
38
47
  * - Size does not take into account indentation that can be applied to JSON.stringify
39
48
  * - Non-numerical properties of Arrays are ignored. Same behavior as JSON.stringify
40
49
  *
41
- * @param source User-provided data meant to be serialized using JSON.stringify
42
- * @param maxCharacterCount Maximum number of characters allowed in serialized form
50
+ * @param source - User-provided data meant to be serialized using JSON.stringify
51
+ * @param maxCharacterCount - Maximum number of characters allowed in serialized form
43
52
  */
44
53
  export function sanitize(source: string, maxCharacterCount?: number): string | undefined
45
54
  export function sanitize(source: Context, maxCharacterCount?: number): Context
@@ -59,7 +68,9 @@ export function sanitize(source: unknown, maxCharacterCount = SANITIZE_DEFAULT_M
59
68
  containerQueue,
60
69
  visitedObjectsWithPath
61
70
  )
62
- let accumulatedCharacterCount = JSON.stringify(sanitizedData)?.length || 0
71
+ const serializedSanitizedData = JSON.stringify(sanitizedData)
72
+ let accumulatedCharacterCount = serializedSanitizedData ? serializedSanitizedData.length : 0
73
+
63
74
  if (accumulatedCharacterCount > maxCharacterCount) {
64
75
  warnOverCharacterLimit(maxCharacterCount, 'discarded', source)
65
76
  return undefined
@@ -201,17 +212,15 @@ function sanitizePrimitivesAndFunctions(value: PrimitivesAndFunctions) {
201
212
  * LIMITATIONS
202
213
  * - If a class defines a toStringTag Symbol, it will fall in the catch-all method and prevent enumeration of properties.
203
214
  * To avoid this, a toJSON method can be defined.
204
- * - IE11 does not return a distinct type for objects such as Map, WeakMap, ... These objects will pass through and their
205
- * properties enumerated if any.
206
- *
207
215
  */
208
- function sanitizeObjects(value: object) {
216
+ function sanitizeObjects(value: object): string | SanitizedEvent {
209
217
  try {
210
- // Handle events - Keep a simple implementation to avoid breaking changes
211
218
  if (value instanceof Event) {
212
- return {
213
- isTrusted: value.isTrusted,
214
- }
219
+ return sanitizeEvent(value)
220
+ }
221
+
222
+ if (value instanceof RegExp) {
223
+ return `[RegExp] ${value.toString()}`
215
224
  }
216
225
 
217
226
  // Handle all remaining object types in a generic way
@@ -227,6 +236,15 @@ function sanitizeObjects(value: object) {
227
236
  return '[Unserializable]'
228
237
  }
229
238
 
239
+ function sanitizeEvent(event: Event): SanitizedEvent {
240
+ return {
241
+ type: event.type,
242
+ isTrusted: event.isTrusted,
243
+ currentTarget: event.currentTarget ? (sanitizeObjects(event.currentTarget) as string) : null,
244
+ target: event.target ? (sanitizeObjects(event.target) as string) : null,
245
+ }
246
+ }
247
+
230
248
  /**
231
249
  * Checks if a toJSON function exists and tries to execute it
232
250
  *
@@ -4,8 +4,6 @@
4
4
  * Reference implementation: https://github.com/csnover/TraceKit/blob/04530298073c3823de72deb0b97e7b38ca7bcb59/tracekit.js
5
5
  */
6
6
 
7
- import { startsWith } from '../../tools/utils/polyfills'
8
-
9
7
  export interface StackFrame {
10
8
  url?: string
11
9
  func?: string
@@ -33,7 +31,7 @@ export function computeStackTrace(ex: unknown): StackTrace {
33
31
 
34
32
  let stackProperty = tryToGetString(ex, 'stack')
35
33
  const exString = String(ex)
36
- if (stackProperty && startsWith(stackProperty, exString)) {
34
+ if (stackProperty && stackProperty.startsWith(exString)) {
37
35
  stackProperty = stackProperty.slice(exString.length)
38
36
  }
39
37
  if (stackProperty) {
@@ -50,13 +48,37 @@ export function computeStackTrace(ex: unknown): StackTrace {
50
48
  })
51
49
  }
52
50
 
51
+ if (stack.length > 0 && isWronglyReportingCustomErrors() && ex instanceof Error) {
52
+ // if we are wrongly reporting custom errors
53
+ const constructors: string[] = []
54
+
55
+ // go through each inherited constructor
56
+ let currentPrototype: object | undefined = ex
57
+ while (
58
+ (currentPrototype = Object.getPrototypeOf(currentPrototype)) &&
59
+ isNonNativeClassPrototype(currentPrototype)
60
+ ) {
61
+ const constructorName = currentPrototype.constructor?.name || UNKNOWN_FUNCTION
62
+ constructors.push(constructorName)
63
+ }
64
+
65
+ // traverse the stacktrace in reverse order because the stacktrace starts with the last inherited constructor
66
+ // we check constructor names to ensure we remove the correct frame (and there isn't a weird unsupported environment behavior)
67
+ for (let i = constructors.length - 1; i >= 0 && stack[0]?.func === constructors[i]; i--) {
68
+ // if the first stack frame is the custom error constructor
69
+ // null stack frames may represent frames that failed to be parsed because the error class did not have a constructor
70
+ stack.shift() // remove it
71
+ }
72
+ }
73
+
53
74
  return {
54
75
  message: tryToGetString(ex, 'message'),
55
76
  name: tryToGetString(ex, 'name'),
56
77
  stack,
57
78
  }
58
79
  }
59
- const fileUrl = '((?:file|https?|blob|chrome-extension|native|eval|webpack|snippet|<anonymous>|\\w+\\.|\\/).*?)'
80
+ const fileUrl =
81
+ '((?:file|https?|blob|chrome-extension|electron|native|eval|webpack|snippet|<anonymous>|\\w+\\.|\\/).*?)'
60
82
  const filePosition = '(?::(\\d+))'
61
83
  const CHROME_LINE_RE = new RegExp(`^\\s*at (.*?) ?\\(${fileUrl}${filePosition}?${filePosition}?\\)?\\s*$`, 'i')
62
84
 
@@ -126,7 +148,7 @@ function parseWinLine(line: string): StackFrame | undefined {
126
148
  }
127
149
 
128
150
  const GECKO_LINE_RE =
129
- /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|capacitor|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i
151
+ /^\s*(.*?)(?:\((.*?)\))?(?:(?:(?:^|@)((?:file|https?|blob|chrome|webpack|resource|capacitor|\[native).*?|[^@]*bundle|\[wasm code\])(?::(\d+))?(?::(\d+))?)|@)\s*$/i
130
152
  const GECKO_EVAL_RE = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i
131
153
 
132
154
  function parseGeckoLine(line: string): StackFrame | undefined {
@@ -162,13 +184,20 @@ function tryToGetString(candidate: unknown, property: string) {
162
184
  return typeof value === 'string' ? value : undefined
163
185
  }
164
186
 
165
- export function computeStackTraceFromOnErrorMessage(messageObj: unknown, url?: string, line?: number, column?: number) {
166
- const stack = [{ url, column, line }]
187
+ export function computeStackTraceFromOnErrorMessage(
188
+ messageObj: unknown,
189
+ url?: string,
190
+ line?: number,
191
+ column?: number
192
+ ): StackTrace | undefined {
193
+ if (url === undefined) {
194
+ return
195
+ }
167
196
  const { name, message } = tryToParseMessage(messageObj)
168
197
  return {
169
198
  name,
170
199
  message,
171
- stack,
200
+ stack: [{ url, column, line }],
172
201
  }
173
202
  }
174
203
 
@@ -184,3 +213,38 @@ function tryToParseMessage(messageObj: unknown) {
184
213
  }
185
214
  return { name, message }
186
215
  }
216
+
217
+ // Custom error stacktrace fix
218
+ // Some browsers (safari/firefox) add the error constructor as a frame in the stacktrace
219
+ // In order to normalize the stacktrace, we need to remove it
220
+
221
+ function isNonNativeClassPrototype(prototype: object) {
222
+ return String(prototype.constructor).startsWith('class ')
223
+ }
224
+
225
+ let isWronglyReportingCustomErrorsCache: boolean | undefined
226
+
227
+ function isWronglyReportingCustomErrors() {
228
+ if (isWronglyReportingCustomErrorsCache !== undefined) {
229
+ return isWronglyReportingCustomErrorsCache
230
+ }
231
+
232
+ /* eslint-disable no-restricted-syntax */
233
+ class DatadogTestCustomError extends Error {
234
+ constructor() {
235
+ super()
236
+ this.name = 'Error' // set name to Error so that no browser would default to the constructor name
237
+ }
238
+ }
239
+
240
+ const [customError, nativeError] = [DatadogTestCustomError, Error].map((errConstructor) => new errConstructor()) // so that both errors should exactly have the same stacktrace
241
+
242
+ isWronglyReportingCustomErrorsCache =
243
+ // If customError is not a class, it means that this was built with ES5 as target, converting the class to a normal object.
244
+ // Thus, error constructors will be reported on all browsers, which is the expected behavior.
245
+ isNonNativeClassPrototype(Object.getPrototypeOf(customError)) &&
246
+ // If the browser is correctly reporting the stacktrace, the normal error stacktrace should be the same as the custom error stacktrace
247
+ nativeError.stack !== customError.stack
248
+
249
+ return isWronglyReportingCustomErrorsCache
250
+ }
@@ -0,0 +1,48 @@
1
+ import { callMonitored } from '../monitor'
2
+ import type { StackTrace } from './computeStackTrace'
3
+ import { computeStackTrace } from './computeStackTrace'
4
+
5
+ /**
6
+ * Creates a stacktrace without SDK internal frames.
7
+ * Constraints:
8
+ * - Has to be called at the utmost position of the call stack.
9
+ * - No monitored function should encapsulate it, that is why we need to use callMonitored inside it.
10
+ */
11
+ export function createHandlingStack(
12
+ type: 'console error' | 'action' | 'error' | 'instrumented method' | 'log' | 'react error'
13
+ ): string {
14
+ /**
15
+ * Skip the two internal frames:
16
+ * - SDK API (console.error, ...)
17
+ * - this function
18
+ * in order to keep only the user calls
19
+ */
20
+ const internalFramesToSkip = 2
21
+ const error = new Error(type)
22
+ error.name = 'HandlingStack'
23
+ let formattedStack: string
24
+
25
+ callMonitored(() => {
26
+ const stackTrace = computeStackTrace(error)
27
+ stackTrace.stack = stackTrace.stack.slice(internalFramesToSkip)
28
+ formattedStack = toStackTraceString(stackTrace)
29
+ })
30
+
31
+ return formattedStack!
32
+ }
33
+
34
+ export function toStackTraceString(stack: StackTrace) {
35
+ let result = formatErrorMessage(stack)
36
+ stack.stack.forEach((frame) => {
37
+ const func = frame.func === '?' ? '<anonymous>' : frame.func
38
+ const args = frame.args && frame.args.length > 0 ? `(${frame.args.join(', ')})` : ''
39
+ const line = frame.line ? `:${frame.line}` : ''
40
+ const column = frame.line && frame.column ? `:${frame.column}` : ''
41
+ result += `\n at ${func!}${args} @ ${frame.url!}${line}${column}`
42
+ })
43
+ return result
44
+ }
45
+
46
+ export function formatErrorMessage(stack: StackTrace) {
47
+ return `${stack.name || 'Error'}: ${stack.message!}`
48
+ }
@@ -0,0 +1,63 @@
1
+ import { ONE_SECOND } from './utils/timeUtils'
2
+ import { requestIdleCallback } from './requestIdleCallback'
3
+
4
+ /**
5
+ * Maximum delay before starting to execute tasks in the queue. We don't want to wait too long
6
+ * before running tasks, as it might hurt reliability (ex: if the user navigates away, we might lose
7
+ * the opportunity to send some data). We also don't want to run tasks too often, as it might hurt
8
+ * performance.
9
+ */
10
+ const IDLE_CALLBACK_TIMEOUT = ONE_SECOND
11
+
12
+ /**
13
+ * Maximum amount of time allocated to running tasks when a timeout (`IDLE_CALLBACK_TIMEOUT`) is
14
+ * reached. We should not run tasks for too long as it will hurt performance, but we should still
15
+ * run some tasks to avoid postponing them forever.
16
+ *
17
+ * Rational: Running tasks for 30ms every second (IDLE_CALLBACK_TIMEOUT) should be acceptable.
18
+ */
19
+ export const MAX_EXECUTION_TIME_ON_TIMEOUT = 30
20
+
21
+ export interface TaskQueue {
22
+ push(task: Task): void
23
+ stop(): void
24
+ }
25
+
26
+ type Task = () => void
27
+
28
+ export function createTaskQueue(): TaskQueue {
29
+ const pendingTasks: Task[] = []
30
+
31
+ function run(deadline: IdleDeadline) {
32
+ let executionTimeRemaining: () => number
33
+ if (deadline.didTimeout) {
34
+ const start = performance.now()
35
+ executionTimeRemaining = () => MAX_EXECUTION_TIME_ON_TIMEOUT - (performance.now() - start)
36
+ } else {
37
+ executionTimeRemaining = deadline.timeRemaining.bind(deadline)
38
+ }
39
+
40
+ while (executionTimeRemaining() > 0 && pendingTasks.length) {
41
+ pendingTasks.shift()!()
42
+ }
43
+
44
+ if (pendingTasks.length) {
45
+ scheduleNextRun()
46
+ }
47
+ }
48
+
49
+ function scheduleNextRun() {
50
+ requestIdleCallback(run, { timeout: IDLE_CALLBACK_TIMEOUT })
51
+ }
52
+
53
+ return {
54
+ push(task) {
55
+ if (pendingTasks.push(task) === 1) {
56
+ scheduleNextRun()
57
+ }
58
+ },
59
+ stop() {
60
+ pendingTasks.length = 0
61
+ },
62
+ }
63
+ }
@@ -1,6 +1,6 @@
1
1
  import { getZoneJsOriginalValue } from './getZoneJsOriginalValue'
2
2
  import { monitor } from './monitor'
3
- import { getGlobalObject } from './getGlobalObject'
3
+ import { getGlobalObject } from './globalObject'
4
4
 
5
5
  export type TimeoutId = ReturnType<typeof globalThis.setTimeout>
6
6
 
@@ -1,7 +1,15 @@
1
- import { arrayFrom } from './polyfills'
2
-
3
1
  export function removeDuplicates<T>(array: T[]) {
4
2
  const set = new Set<T>()
5
3
  array.forEach((item) => set.add(item))
6
- return arrayFrom(set)
4
+ return Array.from(set)
5
+ }
6
+
7
+ export function removeItem<T>(array: T[], item: T) {
8
+ const index = array.indexOf(item)
9
+ if (index >= 0) {
10
+ array.splice(index, 1)
11
+ }
12
+ }
13
+ export function isNonEmptyArray<T>(value: unknown): value is T[] {
14
+ return Array.isArray(value) && value.length > 0
7
15
  }