@openobserve/browser-core 0.2.11 → 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 (628) 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 +44 -35
  5. package/src/browser/{types.ts → browser.types.ts} +42 -0
  6. package/src/browser/cookie.ts +69 -15
  7. package/src/browser/fetchObservable.ts +97 -42
  8. package/src/browser/{pageExitObservable.ts → pageMayExitObservable.ts} +11 -24
  9. package/src/browser/runOnReadyState.ts +14 -4
  10. package/src/browser/xhrObservable.ts +45 -38
  11. package/src/domain/allowedTrackingOrigins.ts +30 -0
  12. package/src/domain/bufferedData.ts +32 -0
  13. package/src/domain/configuration/configuration.ts +366 -95
  14. package/src/domain/configuration/endpointBuilder.ts +48 -64
  15. package/src/domain/configuration/index.ts +6 -4
  16. package/src/domain/configuration/transportConfiguration.ts +42 -35
  17. package/src/domain/connectivity/connectivity.ts +31 -0
  18. package/src/domain/connectivity/index.ts +1 -0
  19. package/src/domain/console/consoleObservable.ts +59 -27
  20. package/src/domain/context/contextConstants.ts +27 -0
  21. package/src/domain/context/contextManager.ts +85 -0
  22. package/src/domain/context/contextUtils.ts +14 -0
  23. package/src/domain/context/defineContextMethod.ts +31 -0
  24. package/src/domain/context/storeContextManager.ts +55 -0
  25. package/src/domain/contexts/accountContext.ts +47 -0
  26. package/src/domain/contexts/globalContext.ts +30 -0
  27. package/src/domain/contexts/rumInternalContext.type.ts +15 -0
  28. package/src/domain/contexts/userContext.ts +64 -0
  29. package/src/domain/deflate/{types.ts → deflate.types.ts} +18 -2
  30. package/src/domain/deflate/index.ts +1 -1
  31. package/src/domain/error/error.ts +28 -84
  32. package/src/domain/error/error.types.ts +21 -4
  33. package/src/domain/error/trackRuntimeError.ts +37 -8
  34. package/src/domain/eventRateLimiter/createEventRateLimiter.ts +5 -2
  35. package/src/domain/extension/extensionUtils.ts +28 -0
  36. package/src/domain/intakeSites.ts +18 -0
  37. package/src/domain/report/browser.types.ts +12 -0
  38. package/src/domain/report/reportObservable.ts +37 -30
  39. package/src/domain/resourceUtils.ts +20 -16
  40. package/src/domain/session/README.md +193 -0
  41. package/src/domain/session/oldCookiesMigration.ts +7 -7
  42. package/src/domain/session/sessionConstants.ts +16 -1
  43. package/src/domain/session/sessionManager.ts +179 -15
  44. package/src/domain/session/sessionState.ts +49 -17
  45. package/src/domain/session/sessionStateValidation.ts +9 -0
  46. package/src/domain/session/sessionStore.ts +118 -55
  47. package/src/domain/session/sessionStoreOperations.ts +51 -32
  48. package/src/domain/session/storeStrategies/sessionInCookie.ts +113 -23
  49. package/src/domain/session/storeStrategies/sessionInLocalStorage.ts +11 -8
  50. package/src/domain/session/storeStrategies/sessionStoreStrategy.ts +6 -2
  51. package/src/domain/synthetics/syntheticsWorkerValues.ts +15 -4
  52. package/src/domain/tags.ts +76 -0
  53. package/src/domain/telemetry/index.ts +12 -4
  54. package/src/domain/telemetry/rawTelemetryEvent.types.ts +11 -3
  55. package/src/domain/telemetry/telemetry.ts +242 -98
  56. package/src/domain/telemetry/telemetryEvent.types.ts +530 -5
  57. package/src/domain/trackingConsent.ts +34 -0
  58. package/src/index.ts +92 -55
  59. package/src/tools/abstractHooks.ts +72 -0
  60. package/src/tools/abstractLifeCycle.ts +1 -0
  61. package/src/tools/boundedBuffer.ts +36 -8
  62. package/src/tools/display.ts +18 -13
  63. package/src/tools/encoder.ts +103 -0
  64. package/src/tools/experimentalFeatures.ts +18 -9
  65. package/src/tools/getZoneJsOriginalValue.ts +1 -1
  66. package/src/tools/{getGlobalObject.ts → globalObject.ts} +20 -0
  67. package/src/tools/instrumentMethod.ts +127 -66
  68. package/src/tools/matchOption.ts +1 -2
  69. package/src/tools/mergeInto.ts +16 -16
  70. package/src/tools/monitor.ts +14 -10
  71. package/src/tools/observable.ts +79 -15
  72. package/src/tools/queueMicrotask.ts +13 -0
  73. package/src/tools/readBytesFromStream.ts +24 -64
  74. package/src/tools/requestIdleCallback.ts +40 -0
  75. package/src/tools/sendToExtension.ts +3 -1
  76. package/src/tools/serialisation/context.ts +4 -1
  77. package/src/tools/serialisation/sanitize.ts +32 -14
  78. package/src/tools/stackTrace/computeStackTrace.ts +250 -0
  79. package/src/tools/stackTrace/handlingStack.ts +48 -0
  80. package/src/tools/taskQueue.ts +63 -0
  81. package/src/tools/timer.ts +1 -1
  82. package/src/tools/utils/arrayUtils.ts +11 -3
  83. package/src/tools/utils/browserDetection.ts +35 -3
  84. package/src/tools/utils/byteUtils.ts +13 -2
  85. package/src/tools/utils/functionUtils.ts +0 -2
  86. package/src/tools/utils/numberUtils.ts +2 -1
  87. package/src/tools/utils/objectUtils.ts +1 -3
  88. package/src/tools/utils/polyfills.ts +6 -110
  89. package/src/tools/utils/responseUtils.ts +1 -1
  90. package/src/tools/utils/stringUtils.ts +62 -4
  91. package/src/tools/utils/timeUtils.ts +18 -13
  92. package/src/tools/utils/timezone.ts +9 -0
  93. package/src/tools/utils/urlPolyfill.ts +29 -59
  94. package/src/tools/valueHistory.ts +66 -35
  95. package/src/transport/batch.ts +113 -61
  96. package/src/transport/eventBridge.ts +24 -5
  97. package/src/transport/flushController.ts +44 -23
  98. package/src/transport/httpRequest.ts +99 -71
  99. package/src/transport/index.ts +7 -4
  100. package/src/transport/sendWithRetryStrategy.ts +60 -41
  101. package/cjs/boot/init.d.ts +0 -5
  102. package/cjs/boot/init.js +0 -36
  103. package/cjs/boot/init.js.map +0 -1
  104. package/cjs/browser/addEventListener.d.ts +0 -76
  105. package/cjs/browser/addEventListener.js +0 -52
  106. package/cjs/browser/addEventListener.js.map +0 -1
  107. package/cjs/browser/cookie.d.ts +0 -10
  108. package/cjs/browser/cookie.js +0 -69
  109. package/cjs/browser/cookie.js.map +0 -1
  110. package/cjs/browser/fetchObservable.d.ts +0 -23
  111. package/cjs/browser/fetchObservable.js +0 -74
  112. package/cjs/browser/fetchObservable.js.map +0 -1
  113. package/cjs/browser/pageExitObservable.d.ts +0 -14
  114. package/cjs/browser/pageExitObservable.js +0 -58
  115. package/cjs/browser/pageExitObservable.js.map +0 -1
  116. package/cjs/browser/runOnReadyState.d.ts +0 -2
  117. package/cjs/browser/runOnReadyState.js +0 -15
  118. package/cjs/browser/runOnReadyState.js.map +0 -1
  119. package/cjs/browser/types.d.ts +0 -19
  120. package/cjs/browser/types.js +0 -6
  121. package/cjs/browser/types.js.map +0 -1
  122. package/cjs/browser/xhrObservable.d.ts +0 -22
  123. package/cjs/browser/xhrObservable.js +0 -93
  124. package/cjs/browser/xhrObservable.js.map +0 -1
  125. package/cjs/domain/configuration/configuration.d.ts +0 -67
  126. package/cjs/domain/configuration/configuration.js +0 -95
  127. package/cjs/domain/configuration/configuration.js.map +0 -1
  128. package/cjs/domain/configuration/endpointBuilder.d.ts +0 -14
  129. package/cjs/domain/configuration/endpointBuilder.js +0 -94
  130. package/cjs/domain/configuration/endpointBuilder.js.map +0 -1
  131. package/cjs/domain/configuration/index.d.ts +0 -3
  132. package/cjs/domain/configuration/index.js +0 -25
  133. package/cjs/domain/configuration/index.js.map +0 -1
  134. package/cjs/domain/configuration/intakeSites.d.ts +0 -5
  135. package/cjs/domain/configuration/intakeSites.js +0 -9
  136. package/cjs/domain/configuration/intakeSites.js.map +0 -1
  137. package/cjs/domain/configuration/tags.d.ts +0 -4
  138. package/cjs/domain/configuration/tags.js +0 -39
  139. package/cjs/domain/configuration/tags.js.map +0 -1
  140. package/cjs/domain/configuration/transportConfiguration.d.ts +0 -16
  141. package/cjs/domain/configuration/transportConfiguration.js +0 -42
  142. package/cjs/domain/configuration/transportConfiguration.js.map +0 -1
  143. package/cjs/domain/console/consoleObservable.d.ts +0 -11
  144. package/cjs/domain/console/consoleObservable.js +0 -75
  145. package/cjs/domain/console/consoleObservable.js.map +0 -1
  146. package/cjs/domain/deflate/index.d.ts +0 -1
  147. package/cjs/domain/deflate/index.js +0 -18
  148. package/cjs/domain/deflate/index.js.map +0 -1
  149. package/cjs/domain/deflate/types.d.ts +0 -26
  150. package/cjs/domain/deflate/types.js +0 -3
  151. package/cjs/domain/deflate/types.js.map +0 -1
  152. package/cjs/domain/error/error.d.ts +0 -28
  153. package/cjs/domain/error/error.js +0 -131
  154. package/cjs/domain/error/error.js.map +0 -1
  155. package/cjs/domain/error/error.types.d.ts +0 -40
  156. package/cjs/domain/error/error.types.js +0 -13
  157. package/cjs/domain/error/error.types.js.map +0 -1
  158. package/cjs/domain/error/trackRuntimeError.d.ts +0 -5
  159. package/cjs/domain/error/trackRuntimeError.js +0 -21
  160. package/cjs/domain/error/trackRuntimeError.js.map +0 -1
  161. package/cjs/domain/eventRateLimiter/createEventRateLimiter.d.ts +0 -5
  162. package/cjs/domain/eventRateLimiter/createEventRateLimiter.js +0 -40
  163. package/cjs/domain/eventRateLimiter/createEventRateLimiter.js.map +0 -1
  164. package/cjs/domain/report/browser.types.d.ts +0 -24
  165. package/cjs/domain/report/browser.types.js +0 -3
  166. package/cjs/domain/report/browser.types.js.map +0 -1
  167. package/cjs/domain/report/reportObservable.d.ts +0 -15
  168. package/cjs/domain/report/reportObservable.js +0 -94
  169. package/cjs/domain/report/reportObservable.js.map +0 -1
  170. package/cjs/domain/resourceUtils.d.ts +0 -16
  171. package/cjs/domain/resourceUtils.js +0 -3
  172. package/cjs/domain/resourceUtils.js.map +0 -1
  173. package/cjs/domain/session/oldCookiesMigration.d.ts +0 -11
  174. package/cjs/domain/session/oldCookiesMigration.js +0 -40
  175. package/cjs/domain/session/oldCookiesMigration.js.map +0 -1
  176. package/cjs/domain/session/sessionConstants.d.ts +0 -2
  177. package/cjs/domain/session/sessionConstants.js +0 -7
  178. package/cjs/domain/session/sessionConstants.js.map +0 -1
  179. package/cjs/domain/session/sessionManager.d.ts +0 -20
  180. package/cjs/domain/session/sessionManager.js +0 -65
  181. package/cjs/domain/session/sessionManager.js.map +0 -1
  182. package/cjs/domain/session/sessionState.d.ts +0 -11
  183. package/cjs/domain/session/sessionState.js +0 -45
  184. package/cjs/domain/session/sessionState.js.map +0 -1
  185. package/cjs/domain/session/sessionStore.d.ts +0 -34
  186. package/cjs/domain/session/sessionStore.js +0 -144
  187. package/cjs/domain/session/sessionStore.js.map +0 -1
  188. package/cjs/domain/session/sessionStoreOperations.d.ts +0 -15
  189. package/cjs/domain/session/sessionStoreOperations.js +0 -104
  190. package/cjs/domain/session/sessionStoreOperations.js.map +0 -1
  191. package/cjs/domain/session/storeStrategies/sessionInCookie.d.ts +0 -6
  192. package/cjs/domain/session/storeStrategies/sessionInCookie.js +0 -48
  193. package/cjs/domain/session/storeStrategies/sessionInCookie.js.map +0 -1
  194. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.d.ts +0 -3
  195. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js +0 -40
  196. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js.map +0 -1
  197. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.d.ts +0 -14
  198. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js +0 -5
  199. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js.map +0 -1
  200. package/cjs/domain/synthetics/syntheticsWorkerValues.d.ts +0 -11
  201. package/cjs/domain/synthetics/syntheticsWorkerValues.js +0 -22
  202. package/cjs/domain/synthetics/syntheticsWorkerValues.js.map +0 -1
  203. package/cjs/domain/telemetry/index.d.ts +0 -3
  204. package/cjs/domain/telemetry/index.js +0 -28
  205. package/cjs/domain/telemetry/index.js.map +0 -1
  206. package/cjs/domain/telemetry/rawTelemetryEvent.types.d.ts +0 -11
  207. package/cjs/domain/telemetry/rawTelemetryEvent.types.js +0 -8
  208. package/cjs/domain/telemetry/rawTelemetryEvent.types.js.map +0 -1
  209. package/cjs/domain/telemetry/telemetry.d.ts +0 -112
  210. package/cjs/domain/telemetry/telemetry.js +0 -146
  211. package/cjs/domain/telemetry/telemetry.js.map +0 -1
  212. package/cjs/domain/telemetry/telemetryEvent.types.d.ts +0 -375
  213. package/cjs/domain/telemetry/telemetryEvent.types.js +0 -7
  214. package/cjs/domain/telemetry/telemetryEvent.types.js.map +0 -1
  215. package/cjs/domain/tracekit/computeStackTrace.d.ts +0 -5
  216. package/cjs/domain/tracekit/computeStackTrace.js +0 -118
  217. package/cjs/domain/tracekit/computeStackTrace.js.map +0 -1
  218. package/cjs/domain/tracekit/index.d.ts +0 -3
  219. package/cjs/domain/tracekit/index.js +0 -8
  220. package/cjs/domain/tracekit/index.js.map +0 -1
  221. package/cjs/domain/tracekit/tracekit.d.ts +0 -35
  222. package/cjs/domain/tracekit/tracekit.js +0 -95
  223. package/cjs/domain/tracekit/tracekit.js.map +0 -1
  224. package/cjs/domain/tracekit/types.d.ts +0 -44
  225. package/cjs/domain/tracekit/types.js +0 -3
  226. package/cjs/domain/tracekit/types.js.map +0 -1
  227. package/cjs/domain/user/index.d.ts +0 -2
  228. package/cjs/domain/user/index.js +0 -19
  229. package/cjs/domain/user/index.js.map +0 -1
  230. package/cjs/domain/user/user.d.ts +0 -12
  231. package/cjs/domain/user/user.js +0 -35
  232. package/cjs/domain/user/user.js.map +0 -1
  233. package/cjs/domain/user/user.types.d.ts +0 -6
  234. package/cjs/domain/user/user.types.js +0 -3
  235. package/cjs/domain/user/user.types.js.map +0 -1
  236. package/cjs/index.d.ts +0 -63
  237. package/cjs/index.js +0 -155
  238. package/cjs/index.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 -45
  250. package/cjs/tools/display.js.map +0 -1
  251. package/cjs/tools/experimentalFeatures.d.ts +0 -24
  252. package/cjs/tools/experimentalFeatures.js +0 -47
  253. package/cjs/tools/experimentalFeatures.js.map +0 -1
  254. package/cjs/tools/getGlobalObject.d.ts +0 -4
  255. package/cjs/tools/getGlobalObject.js +0 -37
  256. package/cjs/tools/getGlobalObject.js.map +0 -1
  257. package/cjs/tools/getZoneJsOriginalValue.d.ts +0 -19
  258. package/cjs/tools/getZoneJsOriginalValue.js +0 -30
  259. package/cjs/tools/getZoneJsOriginalValue.js.map +0 -1
  260. package/cjs/tools/instrumentMethod.d.ts +0 -19
  261. package/cjs/tools/instrumentMethod.js +0 -83
  262. package/cjs/tools/instrumentMethod.js.map +0 -1
  263. package/cjs/tools/matchOption.d.ts +0 -8
  264. package/cjs/tools/matchOption.js +0 -38
  265. package/cjs/tools/matchOption.js.map +0 -1
  266. package/cjs/tools/mergeInto.d.ts +0 -25
  267. package/cjs/tools/mergeInto.js +0 -105
  268. package/cjs/tools/mergeInto.js.map +0 -1
  269. package/cjs/tools/monitor.d.ts +0 -9
  270. package/cjs/tools/monitor.js +0 -76
  271. package/cjs/tools/monitor.js.map +0 -1
  272. package/cjs/tools/observable.d.ts +0 -12
  273. package/cjs/tools/observable.js +0 -44
  274. package/cjs/tools/observable.js.map +0 -1
  275. package/cjs/tools/readBytesFromStream.d.ts +0 -11
  276. package/cjs/tools/readBytesFromStream.js +0 -64
  277. package/cjs/tools/readBytesFromStream.js.map +0 -1
  278. package/cjs/tools/sendToExtension.d.ts +0 -3
  279. package/cjs/tools/sendToExtension.js +0 -11
  280. package/cjs/tools/sendToExtension.js.map +0 -1
  281. package/cjs/tools/serialisation/context.d.ts +0 -6
  282. package/cjs/tools/serialisation/context.js +0 -3
  283. package/cjs/tools/serialisation/context.js.map +0 -1
  284. package/cjs/tools/serialisation/contextManager.d.ts +0 -21
  285. package/cjs/tools/serialisation/contextManager.js +0 -70
  286. package/cjs/tools/serialisation/contextManager.js.map +0 -1
  287. package/cjs/tools/serialisation/heavyCustomerDataWarning.d.ts +0 -8
  288. package/cjs/tools/serialisation/heavyCustomerDataWarning.js +0 -18
  289. package/cjs/tools/serialisation/heavyCustomerDataWarning.js.map +0 -1
  290. package/cjs/tools/serialisation/jsonStringify.d.ts +0 -14
  291. package/cjs/tools/serialisation/jsonStringify.js +0 -49
  292. package/cjs/tools/serialisation/jsonStringify.js.map +0 -1
  293. package/cjs/tools/serialisation/sanitize.d.ts +0 -18
  294. package/cjs/tools/serialisation/sanitize.js +0 -185
  295. package/cjs/tools/serialisation/sanitize.js.map +0 -1
  296. package/cjs/tools/timer.d.ts +0 -5
  297. package/cjs/tools/timer.js +0 -23
  298. package/cjs/tools/timer.js.map +0 -1
  299. package/cjs/tools/utils/arrayUtils.d.ts +0 -1
  300. package/cjs/tools/utils/arrayUtils.js +0 -11
  301. package/cjs/tools/utils/arrayUtils.js.map +0 -1
  302. package/cjs/tools/utils/browserDetection.d.ts +0 -2
  303. package/cjs/tools/utils/browserDetection.js +0 -12
  304. package/cjs/tools/utils/browserDetection.js.map +0 -1
  305. package/cjs/tools/utils/byteUtils.d.ts +0 -4
  306. package/cjs/tools/utils/byteUtils.js +0 -31
  307. package/cjs/tools/utils/byteUtils.js.map +0 -1
  308. package/cjs/tools/utils/functionUtils.d.ts +0 -9
  309. package/cjs/tools/utils/functionUtils.js +0 -48
  310. package/cjs/tools/utils/functionUtils.js.map +0 -1
  311. package/cjs/tools/utils/numberUtils.d.ts +0 -8
  312. package/cjs/tools/utils/numberUtils.js +0 -24
  313. package/cjs/tools/utils/numberUtils.js.map +0 -1
  314. package/cjs/tools/utils/objectUtils.d.ts +0 -10
  315. package/cjs/tools/utils/objectUtils.js +0 -26
  316. package/cjs/tools/utils/objectUtils.js.map +0 -1
  317. package/cjs/tools/utils/polyfills.d.ts +0 -24
  318. package/cjs/tools/utils/polyfills.js +0 -110
  319. package/cjs/tools/utils/polyfills.js.map +0 -1
  320. package/cjs/tools/utils/responseUtils.d.ts +0 -2
  321. package/cjs/tools/utils/responseUtils.js +0 -18
  322. package/cjs/tools/utils/responseUtils.js.map +0 -1
  323. package/cjs/tools/utils/stringUtils.d.ts +0 -7
  324. package/cjs/tools/utils/stringUtils.js +0 -32
  325. package/cjs/tools/utils/stringUtils.js.map +0 -1
  326. package/cjs/tools/utils/timeUtils.d.ts +0 -57
  327. package/cjs/tools/utils/timeUtils.js +0 -99
  328. package/cjs/tools/utils/timeUtils.js.map +0 -1
  329. package/cjs/tools/utils/typeUtils.d.ts +0 -4
  330. package/cjs/tools/utils/typeUtils.js +0 -17
  331. package/cjs/tools/utils/typeUtils.js.map +0 -1
  332. package/cjs/tools/utils/urlPolyfill.d.ts +0 -14
  333. package/cjs/tools/utils/urlPolyfill.js +0 -92
  334. package/cjs/tools/utils/urlPolyfill.js.map +0 -1
  335. package/cjs/tools/valueHistory.d.ts +0 -50
  336. package/cjs/tools/valueHistory.js +0 -106
  337. package/cjs/tools/valueHistory.js.map +0 -1
  338. package/cjs/transport/batch.d.ts +0 -19
  339. package/cjs/transport/batch.js +0 -79
  340. package/cjs/transport/batch.js.map +0 -1
  341. package/cjs/transport/eventBridge.d.ts +0 -12
  342. package/cjs/transport/eventBridge.js +0 -34
  343. package/cjs/transport/eventBridge.js.map +0 -1
  344. package/cjs/transport/flushController.d.ts +0 -48
  345. package/cjs/transport/flushController.js +0 -97
  346. package/cjs/transport/flushController.js.map +0 -1
  347. package/cjs/transport/httpRequest.d.ts +0 -37
  348. package/cjs/transport/httpRequest.js +0 -91
  349. package/cjs/transport/httpRequest.js.map +0 -1
  350. package/cjs/transport/index.d.ts +0 -4
  351. package/cjs/transport/index.js +0 -13
  352. package/cjs/transport/index.js.map +0 -1
  353. package/cjs/transport/sendWithRetryStrategy.d.ts +0 -39
  354. package/cjs/transport/sendWithRetryStrategy.js +0 -151
  355. package/cjs/transport/sendWithRetryStrategy.js.map +0 -1
  356. package/cjs/transport/startBatchWithReplica.d.ts +0 -15
  357. package/cjs/transport/startBatchWithReplica.js +0 -37
  358. package/cjs/transport/startBatchWithReplica.js.map +0 -1
  359. package/esm/boot/init.d.ts +0 -5
  360. package/esm/boot/init.js +0 -31
  361. package/esm/boot/init.js.map +0 -1
  362. package/esm/browser/addEventListener.d.ts +0 -76
  363. package/esm/browser/addEventListener.js +0 -47
  364. package/esm/browser/addEventListener.js.map +0 -1
  365. package/esm/browser/cookie.d.ts +0 -10
  366. package/esm/browser/cookie.js +0 -61
  367. package/esm/browser/cookie.js.map +0 -1
  368. package/esm/browser/fetchObservable.d.ts +0 -23
  369. package/esm/browser/fetchObservable.js +0 -70
  370. package/esm/browser/fetchObservable.js.map +0 -1
  371. package/esm/browser/pageExitObservable.d.ts +0 -14
  372. package/esm/browser/pageExitObservable.js +0 -53
  373. package/esm/browser/pageExitObservable.js.map +0 -1
  374. package/esm/browser/runOnReadyState.d.ts +0 -2
  375. package/esm/browser/runOnReadyState.js +0 -11
  376. package/esm/browser/runOnReadyState.js.map +0 -1
  377. package/esm/browser/types.d.ts +0 -19
  378. package/esm/browser/types.js +0 -5
  379. package/esm/browser/types.js.map +0 -1
  380. package/esm/browser/xhrObservable.d.ts +0 -22
  381. package/esm/browser/xhrObservable.js +0 -89
  382. package/esm/browser/xhrObservable.js.map +0 -1
  383. package/esm/domain/configuration/configuration.d.ts +0 -67
  384. package/esm/domain/configuration/configuration.js +0 -90
  385. package/esm/domain/configuration/configuration.js.map +0 -1
  386. package/esm/domain/configuration/endpointBuilder.d.ts +0 -14
  387. package/esm/domain/configuration/endpointBuilder.js +0 -90
  388. package/esm/domain/configuration/endpointBuilder.js.map +0 -1
  389. package/esm/domain/configuration/index.d.ts +0 -3
  390. package/esm/domain/configuration/index.js +0 -4
  391. package/esm/domain/configuration/index.js.map +0 -1
  392. package/esm/domain/configuration/intakeSites.d.ts +0 -5
  393. package/esm/domain/configuration/intakeSites.js +0 -6
  394. package/esm/domain/configuration/intakeSites.js.map +0 -1
  395. package/esm/domain/configuration/tags.d.ts +0 -4
  396. package/esm/domain/configuration/tags.js +0 -34
  397. package/esm/domain/configuration/tags.js.map +0 -1
  398. package/esm/domain/configuration/transportConfiguration.d.ts +0 -16
  399. package/esm/domain/configuration/transportConfiguration.js +0 -38
  400. package/esm/domain/configuration/transportConfiguration.js.map +0 -1
  401. package/esm/domain/console/consoleObservable.d.ts +0 -11
  402. package/esm/domain/console/consoleObservable.js +0 -70
  403. package/esm/domain/console/consoleObservable.js.map +0 -1
  404. package/esm/domain/deflate/index.d.ts +0 -1
  405. package/esm/domain/deflate/index.js +0 -2
  406. package/esm/domain/deflate/index.js.map +0 -1
  407. package/esm/domain/deflate/types.d.ts +0 -26
  408. package/esm/domain/deflate/types.js +0 -2
  409. package/esm/domain/deflate/types.js.map +0 -1
  410. package/esm/domain/error/error.d.ts +0 -28
  411. package/esm/domain/error/error.js +0 -121
  412. package/esm/domain/error/error.js.map +0 -1
  413. package/esm/domain/error/error.types.d.ts +0 -40
  414. package/esm/domain/error/error.types.js +0 -10
  415. package/esm/domain/error/error.types.js.map +0 -1
  416. package/esm/domain/error/trackRuntimeError.d.ts +0 -5
  417. package/esm/domain/error/trackRuntimeError.js +0 -17
  418. package/esm/domain/error/trackRuntimeError.js.map +0 -1
  419. package/esm/domain/eventRateLimiter/createEventRateLimiter.d.ts +0 -5
  420. package/esm/domain/eventRateLimiter/createEventRateLimiter.js +0 -36
  421. package/esm/domain/eventRateLimiter/createEventRateLimiter.js.map +0 -1
  422. package/esm/domain/report/browser.types.d.ts +0 -24
  423. package/esm/domain/report/browser.types.js +0 -2
  424. package/esm/domain/report/browser.types.js.map +0 -1
  425. package/esm/domain/report/reportObservable.d.ts +0 -15
  426. package/esm/domain/report/reportObservable.js +0 -90
  427. package/esm/domain/report/reportObservable.js.map +0 -1
  428. package/esm/domain/resourceUtils.d.ts +0 -16
  429. package/esm/domain/resourceUtils.js +0 -2
  430. package/esm/domain/resourceUtils.js.map +0 -1
  431. package/esm/domain/session/oldCookiesMigration.d.ts +0 -11
  432. package/esm/domain/session/oldCookiesMigration.js +0 -36
  433. package/esm/domain/session/oldCookiesMigration.js.map +0 -1
  434. package/esm/domain/session/sessionConstants.d.ts +0 -2
  435. package/esm/domain/session/sessionConstants.js +0 -4
  436. package/esm/domain/session/sessionConstants.js.map +0 -1
  437. package/esm/domain/session/sessionManager.d.ts +0 -20
  438. package/esm/domain/session/sessionManager.js +0 -60
  439. package/esm/domain/session/sessionManager.js.map +0 -1
  440. package/esm/domain/session/sessionState.d.ts +0 -11
  441. package/esm/domain/session/sessionState.js +0 -38
  442. package/esm/domain/session/sessionState.js.map +0 -1
  443. package/esm/domain/session/sessionStore.d.ts +0 -34
  444. package/esm/domain/session/sessionStore.js +0 -139
  445. package/esm/domain/session/sessionStore.js.map +0 -1
  446. package/esm/domain/session/sessionStoreOperations.d.ts +0 -15
  447. package/esm/domain/session/sessionStoreOperations.js +0 -99
  448. package/esm/domain/session/sessionStoreOperations.js.map +0 -1
  449. package/esm/domain/session/storeStrategies/sessionInCookie.d.ts +0 -6
  450. package/esm/domain/session/storeStrategies/sessionInCookie.js +0 -42
  451. package/esm/domain/session/storeStrategies/sessionInCookie.js.map +0 -1
  452. package/esm/domain/session/storeStrategies/sessionInLocalStorage.d.ts +0 -3
  453. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js +0 -35
  454. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js.map +0 -1
  455. package/esm/domain/session/storeStrategies/sessionStoreStrategy.d.ts +0 -14
  456. package/esm/domain/session/storeStrategies/sessionStoreStrategy.js +0 -2
  457. package/esm/domain/session/storeStrategies/sessionStoreStrategy.js.map +0 -1
  458. package/esm/domain/synthetics/syntheticsWorkerValues.d.ts +0 -11
  459. package/esm/domain/synthetics/syntheticsWorkerValues.js +0 -16
  460. package/esm/domain/synthetics/syntheticsWorkerValues.js.map +0 -1
  461. package/esm/domain/telemetry/index.d.ts +0 -3
  462. package/esm/domain/telemetry/index.js +0 -4
  463. package/esm/domain/telemetry/index.js.map +0 -1
  464. package/esm/domain/telemetry/rawTelemetryEvent.types.d.ts +0 -11
  465. package/esm/domain/telemetry/rawTelemetryEvent.types.js +0 -5
  466. package/esm/domain/telemetry/rawTelemetryEvent.types.js.map +0 -1
  467. package/esm/domain/telemetry/telemetry.d.ts +0 -112
  468. package/esm/domain/telemetry/telemetry.js +0 -134
  469. package/esm/domain/telemetry/telemetry.js.map +0 -1
  470. package/esm/domain/telemetry/telemetryEvent.types.d.ts +0 -375
  471. package/esm/domain/telemetry/telemetryEvent.types.js +0 -6
  472. package/esm/domain/telemetry/telemetryEvent.types.js.map +0 -1
  473. package/esm/domain/tracekit/computeStackTrace.d.ts +0 -5
  474. package/esm/domain/tracekit/computeStackTrace.js +0 -114
  475. package/esm/domain/tracekit/computeStackTrace.js.map +0 -1
  476. package/esm/domain/tracekit/index.d.ts +0 -3
  477. package/esm/domain/tracekit/index.js +0 -3
  478. package/esm/domain/tracekit/index.js.map +0 -1
  479. package/esm/domain/tracekit/tracekit.d.ts +0 -35
  480. package/esm/domain/tracekit/tracekit.js +0 -91
  481. package/esm/domain/tracekit/tracekit.js.map +0 -1
  482. package/esm/domain/tracekit/types.d.ts +0 -44
  483. package/esm/domain/tracekit/types.js +0 -2
  484. package/esm/domain/tracekit/types.js.map +0 -1
  485. package/esm/domain/user/index.d.ts +0 -2
  486. package/esm/domain/user/index.js +0 -3
  487. package/esm/domain/user/index.js.map +0 -1
  488. package/esm/domain/user/user.d.ts +0 -12
  489. package/esm/domain/user/user.js +0 -30
  490. package/esm/domain/user/user.js.map +0 -1
  491. package/esm/domain/user/user.types.d.ts +0 -6
  492. package/esm/domain/user/user.types.js +0 -2
  493. package/esm/domain/user/user.types.js.map +0 -1
  494. package/esm/index.d.ts +0 -63
  495. package/esm/index.js +0 -61
  496. package/esm/index.js.map +0 -1
  497. package/esm/tools/abstractLifeCycle.d.ts +0 -23
  498. package/esm/tools/abstractLifeCycle.js +0 -26
  499. package/esm/tools/abstractLifeCycle.js.map +0 -1
  500. package/esm/tools/boundedBuffer.d.ts +0 -5
  501. package/esm/tools/boundedBuffer.js +0 -19
  502. package/esm/tools/boundedBuffer.js.map +0 -1
  503. package/esm/tools/catchUserErrors.d.ts +0 -1
  504. package/esm/tools/catchUserErrors.js +0 -16
  505. package/esm/tools/catchUserErrors.js.map +0 -1
  506. package/esm/tools/display.d.ts +0 -35
  507. package/esm/tools/display.js +0 -41
  508. package/esm/tools/display.js.map +0 -1
  509. package/esm/tools/experimentalFeatures.d.ts +0 -24
  510. package/esm/tools/experimentalFeatures.js +0 -40
  511. package/esm/tools/experimentalFeatures.js.map +0 -1
  512. package/esm/tools/getGlobalObject.d.ts +0 -4
  513. package/esm/tools/getGlobalObject.js +0 -33
  514. package/esm/tools/getGlobalObject.js.map +0 -1
  515. package/esm/tools/getZoneJsOriginalValue.d.ts +0 -19
  516. package/esm/tools/getZoneJsOriginalValue.js +0 -26
  517. package/esm/tools/getZoneJsOriginalValue.js.map +0 -1
  518. package/esm/tools/instrumentMethod.d.ts +0 -19
  519. package/esm/tools/instrumentMethod.js +0 -77
  520. package/esm/tools/instrumentMethod.js.map +0 -1
  521. package/esm/tools/matchOption.d.ts +0 -8
  522. package/esm/tools/matchOption.js +0 -33
  523. package/esm/tools/matchOption.js.map +0 -1
  524. package/esm/tools/mergeInto.d.ts +0 -25
  525. package/esm/tools/mergeInto.js +0 -99
  526. package/esm/tools/mergeInto.js.map +0 -1
  527. package/esm/tools/monitor.d.ts +0 -9
  528. package/esm/tools/monitor.js +0 -66
  529. package/esm/tools/monitor.js.map +0 -1
  530. package/esm/tools/observable.d.ts +0 -12
  531. package/esm/tools/observable.js +0 -40
  532. package/esm/tools/observable.js.map +0 -1
  533. package/esm/tools/readBytesFromStream.d.ts +0 -11
  534. package/esm/tools/readBytesFromStream.js +0 -60
  535. package/esm/tools/readBytesFromStream.js.map +0 -1
  536. package/esm/tools/sendToExtension.d.ts +0 -3
  537. package/esm/tools/sendToExtension.js +0 -7
  538. package/esm/tools/sendToExtension.js.map +0 -1
  539. package/esm/tools/serialisation/context.d.ts +0 -6
  540. package/esm/tools/serialisation/context.js +0 -2
  541. package/esm/tools/serialisation/context.js.map +0 -1
  542. package/esm/tools/serialisation/contextManager.d.ts +0 -21
  543. package/esm/tools/serialisation/contextManager.js +0 -66
  544. package/esm/tools/serialisation/contextManager.js.map +0 -1
  545. package/esm/tools/serialisation/heavyCustomerDataWarning.d.ts +0 -8
  546. package/esm/tools/serialisation/heavyCustomerDataWarning.js +0 -14
  547. package/esm/tools/serialisation/heavyCustomerDataWarning.js.map +0 -1
  548. package/esm/tools/serialisation/jsonStringify.d.ts +0 -14
  549. package/esm/tools/serialisation/jsonStringify.js +0 -44
  550. package/esm/tools/serialisation/jsonStringify.js.map +0 -1
  551. package/esm/tools/serialisation/sanitize.d.ts +0 -18
  552. package/esm/tools/serialisation/sanitize.js +0 -181
  553. package/esm/tools/serialisation/sanitize.js.map +0 -1
  554. package/esm/tools/timer.d.ts +0 -5
  555. package/esm/tools/timer.js +0 -16
  556. package/esm/tools/timer.js.map +0 -1
  557. package/esm/tools/utils/arrayUtils.d.ts +0 -1
  558. package/esm/tools/utils/arrayUtils.js +0 -7
  559. package/esm/tools/utils/arrayUtils.js.map +0 -1
  560. package/esm/tools/utils/browserDetection.d.ts +0 -2
  561. package/esm/tools/utils/browserDetection.js +0 -7
  562. package/esm/tools/utils/browserDetection.js.map +0 -1
  563. package/esm/tools/utils/byteUtils.d.ts +0 -4
  564. package/esm/tools/utils/byteUtils.js +0 -26
  565. package/esm/tools/utils/byteUtils.js.map +0 -1
  566. package/esm/tools/utils/functionUtils.d.ts +0 -9
  567. package/esm/tools/utils/functionUtils.js +0 -43
  568. package/esm/tools/utils/functionUtils.js.map +0 -1
  569. package/esm/tools/utils/numberUtils.d.ts +0 -8
  570. package/esm/tools/utils/numberUtils.js +0 -17
  571. package/esm/tools/utils/numberUtils.js.map +0 -1
  572. package/esm/tools/utils/objectUtils.d.ts +0 -10
  573. package/esm/tools/utils/objectUtils.js +0 -19
  574. package/esm/tools/utils/objectUtils.js.map +0 -1
  575. package/esm/tools/utils/polyfills.d.ts +0 -24
  576. package/esm/tools/utils/polyfills.js +0 -95
  577. package/esm/tools/utils/polyfills.js.map +0 -1
  578. package/esm/tools/utils/responseUtils.d.ts +0 -2
  579. package/esm/tools/utils/responseUtils.js +0 -13
  580. package/esm/tools/utils/responseUtils.js.map +0 -1
  581. package/esm/tools/utils/stringUtils.d.ts +0 -7
  582. package/esm/tools/utils/stringUtils.js +0 -26
  583. package/esm/tools/utils/stringUtils.js.map +0 -1
  584. package/esm/tools/utils/timeUtils.d.ts +0 -57
  585. package/esm/tools/utils/timeUtils.js +0 -82
  586. package/esm/tools/utils/timeUtils.js.map +0 -1
  587. package/esm/tools/utils/typeUtils.d.ts +0 -4
  588. package/esm/tools/utils/typeUtils.js +0 -13
  589. package/esm/tools/utils/typeUtils.js.map +0 -1
  590. package/esm/tools/utils/urlPolyfill.d.ts +0 -14
  591. package/esm/tools/utils/urlPolyfill.js +0 -80
  592. package/esm/tools/utils/urlPolyfill.js.map +0 -1
  593. package/esm/tools/valueHistory.d.ts +0 -50
  594. package/esm/tools/valueHistory.js +0 -103
  595. package/esm/tools/valueHistory.js.map +0 -1
  596. package/esm/transport/batch.d.ts +0 -19
  597. package/esm/transport/batch.js +0 -76
  598. package/esm/transport/batch.js.map +0 -1
  599. package/esm/transport/eventBridge.d.ts +0 -12
  600. package/esm/transport/eventBridge.js +0 -29
  601. package/esm/transport/eventBridge.js.map +0 -1
  602. package/esm/transport/flushController.d.ts +0 -48
  603. package/esm/transport/flushController.js +0 -93
  604. package/esm/transport/flushController.js.map +0 -1
  605. package/esm/transport/httpRequest.d.ts +0 -37
  606. package/esm/transport/httpRequest.js +0 -85
  607. package/esm/transport/httpRequest.js.map +0 -1
  608. package/esm/transport/index.d.ts +0 -4
  609. package/esm/transport/index.js +0 -5
  610. package/esm/transport/index.js.map +0 -1
  611. package/esm/transport/sendWithRetryStrategy.d.ts +0 -39
  612. package/esm/transport/sendWithRetryStrategy.js +0 -146
  613. package/esm/transport/sendWithRetryStrategy.js.map +0 -1
  614. package/esm/transport/startBatchWithReplica.d.ts +0 -15
  615. package/esm/transport/startBatchWithReplica.js +0 -33
  616. package/esm/transport/startBatchWithReplica.js.map +0 -1
  617. package/src/domain/configuration/intakeSites.ts +0 -5
  618. package/src/domain/configuration/tags.ts +0 -43
  619. package/src/domain/tracekit/computeStackTrace.ts +0 -141
  620. package/src/domain/tracekit/index.ts +0 -3
  621. package/src/domain/tracekit/tracekit.ts +0 -96
  622. package/src/domain/tracekit/types.ts +0 -47
  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/tools/serialisation/contextManager.ts +0 -79
  627. package/src/tools/serialisation/heavyCustomerDataWarning.ts +0 -26
  628. package/src/transport/startBatchWithReplica.ts +0 -52
@@ -1,109 +1,170 @@
1
1
  import { setTimeout } from './timer'
2
2
  import { callMonitored } from './monitor'
3
3
  import { noop } from './utils/functionUtils'
4
+ import { createHandlingStack } from './stackTrace/handlingStack'
4
5
 
5
- export function instrumentMethod<OBJECT extends { [key: string]: any }, METHOD extends keyof OBJECT>(
6
- object: OBJECT,
6
+ /**
7
+ * Object passed to the callback of an instrumented method call. See `instrumentMethod` for more
8
+ * info.
9
+ */
10
+ export interface InstrumentedMethodCall<TARGET extends { [key: string]: any }, METHOD extends keyof TARGET> {
11
+ /**
12
+ * The target object on which the method was called.
13
+ */
14
+ target: TARGET
15
+
16
+ /**
17
+ * The parameters with which the method was called.
18
+ *
19
+ * Note: if needed, parameters can be mutated by the instrumentation
20
+ */
21
+ parameters: Parameters<TARGET[METHOD]>
22
+
23
+ /**
24
+ * Registers a callback that will be called after the original method is called, with the method
25
+ * result passed as argument.
26
+ */
27
+ onPostCall: (callback: PostCallCallback<TARGET, METHOD>) => void
28
+
29
+ /**
30
+ * The stack trace of the method call.
31
+ */
32
+ handlingStack?: string
33
+ }
34
+
35
+ type PostCallCallback<TARGET extends { [key: string]: any }, METHOD extends keyof TARGET> = (
36
+ result: ReturnType<TARGET[METHOD]>
37
+ ) => void
38
+
39
+ /**
40
+ * Instruments a method on a object, calling the given callback before the original method is
41
+ * invoked. The callback receives an object with information about the method call.
42
+ *
43
+ * This function makes sure that we are "good citizens" regarding third party instrumentations: when
44
+ * removing the instrumentation, the original method is usually restored, but if a third party
45
+ * instrumentation was set after ours, we keep it in place and just replace our instrumentation with
46
+ * a noop.
47
+ *
48
+ * Note: it is generally better to instrument methods that are "owned" by the object instead of ones
49
+ * that are inherited from the prototype chain. Example:
50
+ * * do: `instrumentMethod(Array.prototype, 'push', ...)`
51
+ * * don't: `instrumentMethod([], 'push', ...)`
52
+ *
53
+ * This method is also used to set event handler properties (ex: window.onerror = ...), as it has
54
+ * the same requirements as instrumenting a method:
55
+ * * if the event handler is already set by a third party, we need to call it and not just blindly
56
+ * override it.
57
+ * * if the event handler is set by a third party after us, we need to keep it in place when
58
+ * removing ours.
59
+ *
60
+ * @example
61
+ *
62
+ * instrumentMethod(window, 'fetch', ({ target, parameters, onPostCall }) => {
63
+ * console.log('Before calling fetch on', target, 'with parameters', parameters)
64
+ *
65
+ * onPostCall((result) => {
66
+ * console.log('After fetch calling on', target, 'with parameters', parameters, 'and result', result)
67
+ * })
68
+ * })
69
+ */
70
+ export function instrumentMethod<TARGET extends { [key: string]: any }, METHOD extends keyof TARGET & string>(
71
+ targetPrototype: TARGET,
7
72
  method: METHOD,
8
- instrumentationFactory: (
9
- original: OBJECT[METHOD]
10
- ) => (this: OBJECT, ...args: Parameters<OBJECT[METHOD]>) => ReturnType<OBJECT[METHOD]>
73
+ onPreCall: (this: null, callInfos: InstrumentedMethodCall<TARGET, METHOD>) => void,
74
+ { computeHandlingStack }: { computeHandlingStack?: boolean } = {}
11
75
  ) {
12
- const original = object[method]
76
+ let original = targetPrototype[method]
77
+
78
+ if (typeof original !== 'function') {
79
+ if (method in targetPrototype && method.startsWith('on')) {
80
+ original = noop as TARGET[METHOD]
81
+ } else {
82
+ return { stop: noop }
83
+ }
84
+ }
85
+
86
+ let stopped = false
87
+
88
+ const instrumentation = function (this: TARGET): ReturnType<TARGET[METHOD]> | undefined {
89
+ if (stopped) {
90
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call
91
+ return original.apply(this, arguments as unknown as Parameters<TARGET[METHOD]>)
92
+ }
13
93
 
14
- let instrumentation = instrumentationFactory(original)
94
+ const parameters = Array.from(arguments) as Parameters<TARGET[METHOD]>
15
95
 
16
- const instrumentationWrapper = function (this: OBJECT): ReturnType<OBJECT[METHOD]> | undefined {
17
- if (typeof instrumentation !== 'function') {
18
- return undefined
96
+ let postCallCallback: PostCallCallback<TARGET, METHOD> | undefined
97
+
98
+ callMonitored(onPreCall, null, [
99
+ {
100
+ target: this,
101
+ parameters,
102
+ onPostCall: (callback) => {
103
+ postCallCallback = callback
104
+ },
105
+ handlingStack: computeHandlingStack ? createHandlingStack('instrumented method') : undefined,
106
+ },
107
+ ])
108
+
109
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
110
+ const result = original.apply(this, parameters)
111
+
112
+ if (postCallCallback) {
113
+ callMonitored(postCallCallback, null, [result])
19
114
  }
115
+
20
116
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
21
- return instrumentation.apply(this, arguments as unknown as Parameters<OBJECT[METHOD]>)
117
+ return result
22
118
  }
23
- object[method] = instrumentationWrapper as OBJECT[METHOD]
119
+
120
+ targetPrototype[method] = instrumentation as TARGET[METHOD]
24
121
 
25
122
  return {
26
123
  stop: () => {
27
- if (object[method] === instrumentationWrapper) {
28
- object[method] = original
29
- } else {
30
- instrumentation = original
124
+ stopped = true
125
+ // If the instrumentation has been removed by a third party, keep the last one
126
+ if (targetPrototype[method] === instrumentation) {
127
+ targetPrototype[method] = original
31
128
  }
32
129
  },
33
130
  }
34
131
  }
35
132
 
36
- export function instrumentMethodAndCallOriginal<OBJECT extends { [key: string]: any }, METHOD extends keyof OBJECT>(
37
- object: OBJECT,
38
- method: METHOD,
39
- {
40
- before,
41
- after,
42
- }: {
43
- before?: (this: OBJECT, ...args: Parameters<OBJECT[METHOD]>) => void
44
- after?: (this: OBJECT, ...args: Parameters<OBJECT[METHOD]>) => void
45
- }
46
- ) {
47
- return instrumentMethod(
48
- object,
49
- method,
50
- (original) =>
51
- function () {
52
- const args = arguments as unknown as Parameters<OBJECT[METHOD]>
53
- let result
54
-
55
- if (before) {
56
- callMonitored(before, this, args)
57
- }
58
-
59
- if (typeof original === 'function') {
60
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call
61
- result = original.apply(this, args)
62
- }
63
-
64
- if (after) {
65
- callMonitored(after, this, args)
66
- }
67
-
68
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
69
- return result
70
- }
71
- )
72
- }
73
-
74
- export function instrumentSetter<OBJECT extends { [key: string]: any }, PROPERTY extends keyof OBJECT>(
75
- object: OBJECT,
133
+ export function instrumentSetter<TARGET extends { [key: string]: any }, PROPERTY extends keyof TARGET>(
134
+ targetPrototype: TARGET,
76
135
  property: PROPERTY,
77
- after: (thisObject: OBJECT, value: OBJECT[PROPERTY]) => void
136
+ after: (target: TARGET, value: TARGET[PROPERTY]) => void
78
137
  ) {
79
- const originalDescriptor = Object.getOwnPropertyDescriptor(object, property)
138
+ const originalDescriptor = Object.getOwnPropertyDescriptor(targetPrototype, property)
80
139
  if (!originalDescriptor || !originalDescriptor.set || !originalDescriptor.configurable) {
81
140
  return { stop: noop }
82
141
  }
83
142
 
84
- let instrumentation = (thisObject: OBJECT, value: OBJECT[PROPERTY]) => {
143
+ const stoppedInstrumentation = noop
144
+ let instrumentation = (target: TARGET, value: TARGET[PROPERTY]) => {
85
145
  // put hooked setter into event loop to avoid of set latency
86
146
  setTimeout(() => {
87
- after(thisObject, value)
147
+ if (instrumentation !== stoppedInstrumentation) {
148
+ after(target, value)
149
+ }
88
150
  }, 0)
89
151
  }
90
152
 
91
- const instrumentationWrapper = function (this: OBJECT, value: OBJECT[PROPERTY]) {
153
+ const instrumentationWrapper = function (this: TARGET, value: TARGET[PROPERTY]) {
92
154
  originalDescriptor.set!.call(this, value)
93
155
  instrumentation(this, value)
94
156
  }
95
157
 
96
- Object.defineProperty(object, property, {
158
+ Object.defineProperty(targetPrototype, property, {
97
159
  set: instrumentationWrapper,
98
160
  })
99
161
 
100
162
  return {
101
163
  stop: () => {
102
- if (Object.getOwnPropertyDescriptor(object, property)?.set === instrumentationWrapper) {
103
- Object.defineProperty(object, property, originalDescriptor)
104
- } else {
105
- instrumentation = noop
164
+ if (Object.getOwnPropertyDescriptor(targetPrototype, property)?.set === instrumentationWrapper) {
165
+ Object.defineProperty(targetPrototype, property, originalDescriptor)
106
166
  }
167
+ instrumentation = stoppedInstrumentation
107
168
  },
108
169
  }
109
170
  }
@@ -1,4 +1,3 @@
1
- import { startsWith } from './utils/polyfills'
2
1
  import { display } from './display'
3
2
  import { getType } from './utils/typeUtils'
4
3
 
@@ -22,7 +21,7 @@ export function matchList(list: MatchOption[], value: string, useStartsWith = fa
22
21
  } else if (item instanceof RegExp) {
23
22
  return item.test(value)
24
23
  } else if (typeof item === 'string') {
25
- return useStartsWith ? startsWith(value, item) : item === value
24
+ return useStartsWith ? value.startsWith(item) : item === value
26
25
  }
27
26
  } catch (e) {
28
27
  display.error(e)
@@ -5,22 +5,22 @@ type Merged<TDestination, TSource> =
5
5
  TSource extends undefined
6
6
  ? TDestination
7
7
  : // case 2 - destination is undefined - return source
8
- TDestination extends undefined
9
- ? TSource
10
- : // case 3 - source is an array - see if it merges or overwrites
11
- TSource extends any[]
12
- ? TDestination extends any[]
13
- ? TDestination & TSource
14
- : TSource
15
- : // case 4 - source is an object - see if it merges or overwrites
16
- TSource extends object
17
- ? TDestination extends object
18
- ? TDestination extends any[]
19
- ? TSource
20
- : TDestination & TSource
21
- : TSource
22
- : // case 5 - cannot merge - return source
23
- TSource
8
+ TDestination extends undefined
9
+ ? TSource
10
+ : // case 3 - source is an array - see if it merges or overwrites
11
+ TSource extends any[]
12
+ ? TDestination extends any[]
13
+ ? TDestination & TSource
14
+ : TSource
15
+ : // case 4 - source is an object - see if it merges or overwrites
16
+ TSource extends object
17
+ ? TDestination extends object
18
+ ? TDestination extends any[]
19
+ ? TSource
20
+ : TDestination & TSource
21
+ : TSource
22
+ : // case 5 - cannot merge - return source
23
+ TSource
24
24
 
25
25
  /**
26
26
  * Iterate over source and affect its sub values into destination, recursively.
@@ -1,4 +1,4 @@
1
- import { ConsoleApiName, display } from './display'
1
+ import { display } from './display'
2
2
 
3
3
  let onMonitorErrorCollected: undefined | ((error: unknown) => void)
4
4
  let debugMode = false
@@ -50,19 +50,23 @@ 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(ConsoleApiName.error, e)
54
- if (onMonitorErrorCollected) {
55
- try {
56
- onMonitorErrorCollected(e)
57
- } catch (e) {
58
- displayIfDebugEnabled(ConsoleApiName.error, 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
  }
63
67
 
64
- export function displayIfDebugEnabled(api: ConsoleApiName, ...args: any[]) {
68
+ export function displayIfDebugEnabled(...args: any[]) {
65
69
  if (debugMode) {
66
- display(api, '[MONITOR]', ...args)
70
+ display.error('[MONITOR]', ...args)
67
71
  }
68
72
  }
@@ -1,40 +1,104 @@
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
- constructor(private onFirstSubscribe?: () => (() => void) | void) {}
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() || 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>>) {
32
- const globalObservable = new Observable<T>(() => {
43
+ return new Observable<T>((globalObservable) => {
33
44
  const subscriptions: Subscription[] = observables.map((observable) =>
34
45
  observable.subscribe((data) => globalObservable.notify(data))
35
46
  )
36
47
  return () => subscriptions.forEach((subscription) => subscription.unsubscribe())
37
48
  })
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
+ }
38
58
 
39
- return globalObservable
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
+ }
40
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> {}