@pratham.raval/browser-core 6.22.3

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 (710) hide show
  1. package/README.md +3 -0
  2. package/cjs/boot/displayAlreadyInitializedError.d.ts +2 -0
  3. package/cjs/boot/displayAlreadyInitializedError.js +10 -0
  4. package/cjs/boot/displayAlreadyInitializedError.js.map +1 -0
  5. package/cjs/boot/init.d.ts +14 -0
  6. package/cjs/boot/init.js +39 -0
  7. package/cjs/boot/init.js.map +1 -0
  8. package/cjs/browser/addEventListener.d.ts +87 -0
  9. package/cjs/browser/addEventListener.js +55 -0
  10. package/cjs/browser/addEventListener.js.map +1 -0
  11. package/cjs/browser/browser.types.d.ts +51 -0
  12. package/cjs/browser/browser.types.js +6 -0
  13. package/cjs/browser/browser.types.js.map +1 -0
  14. package/cjs/browser/cookie.d.ts +18 -0
  15. package/cjs/browser/cookie.js +101 -0
  16. package/cjs/browser/cookie.js.map +1 -0
  17. package/cjs/browser/fetchObservable.d.ts +25 -0
  18. package/cjs/browser/fetchObservable.js +79 -0
  19. package/cjs/browser/fetchObservable.js.map +1 -0
  20. package/cjs/browser/pageMayExitObservable.d.ts +14 -0
  21. package/cjs/browser/pageMayExitObservable.js +45 -0
  22. package/cjs/browser/pageMayExitObservable.js.map +1 -0
  23. package/cjs/browser/runOnReadyState.d.ts +5 -0
  24. package/cjs/browser/runOnReadyState.js +20 -0
  25. package/cjs/browser/runOnReadyState.js.map +1 -0
  26. package/cjs/browser/xhrObservable.d.ts +23 -0
  27. package/cjs/browser/xhrObservable.js +83 -0
  28. package/cjs/browser/xhrObservable.js.map +1 -0
  29. package/cjs/domain/allowedTrackingOrigins.d.ts +4 -0
  30. package/cjs/domain/allowedTrackingOrigins.js +25 -0
  31. package/cjs/domain/allowedTrackingOrigins.js.map +1 -0
  32. package/cjs/domain/bufferedData.d.ts +14 -0
  33. package/cjs/domain/bufferedData.js +22 -0
  34. package/cjs/domain/bufferedData.js.map +1 -0
  35. package/cjs/domain/configuration/configuration.d.ts +303 -0
  36. package/cjs/domain/configuration/configuration.js +152 -0
  37. package/cjs/domain/configuration/configuration.js.map +1 -0
  38. package/cjs/domain/configuration/endpointBuilder.d.ts +12 -0
  39. package/cjs/domain/configuration/endpointBuilder.js +78 -0
  40. package/cjs/domain/configuration/endpointBuilder.js.map +1 -0
  41. package/cjs/domain/configuration/index.d.ts +5 -0
  42. package/cjs/domain/configuration/index.js +16 -0
  43. package/cjs/domain/configuration/index.js.map +1 -0
  44. package/cjs/domain/configuration/transportConfiguration.d.ts +20 -0
  45. package/cjs/domain/configuration/transportConfiguration.js +54 -0
  46. package/cjs/domain/configuration/transportConfiguration.js.map +1 -0
  47. package/cjs/domain/connectivity/connectivity.d.ts +14 -0
  48. package/cjs/domain/connectivity/connectivity.js +14 -0
  49. package/cjs/domain/connectivity/connectivity.js.map +1 -0
  50. package/cjs/domain/connectivity/index.d.ts +1 -0
  51. package/cjs/domain/connectivity/index.js +18 -0
  52. package/cjs/domain/connectivity/index.js.map +1 -0
  53. package/cjs/domain/console/consoleObservable.d.ts +21 -0
  54. package/cjs/domain/console/consoleObservable.js +84 -0
  55. package/cjs/domain/console/consoleObservable.js.map +1 -0
  56. package/cjs/domain/context/contextConstants.d.ts +21 -0
  57. package/cjs/domain/context/contextConstants.js +18 -0
  58. package/cjs/domain/context/contextConstants.js.map +1 -0
  59. package/cjs/domain/context/contextManager.d.ts +19 -0
  60. package/cjs/domain/context/contextManager.js +60 -0
  61. package/cjs/domain/context/contextManager.js.map +1 -0
  62. package/cjs/domain/context/contextUtils.d.ts +5 -0
  63. package/cjs/domain/context/contextUtils.js +16 -0
  64. package/cjs/domain/context/contextUtils.js.map +1 -0
  65. package/cjs/domain/context/defineContextMethod.d.ts +6 -0
  66. package/cjs/domain/context/defineContextMethod.js +21 -0
  67. package/cjs/domain/context/defineContextMethod.js.map +1 -0
  68. package/cjs/domain/context/storeContextManager.d.ts +6 -0
  69. package/cjs/domain/context/storeContextManager.js +40 -0
  70. package/cjs/domain/context/storeContextManager.js.map +1 -0
  71. package/cjs/domain/contexts/accountContext.d.ts +26 -0
  72. package/cjs/domain/contexts/accountContext.js +33 -0
  73. package/cjs/domain/contexts/accountContext.js.map +1 -0
  74. package/cjs/domain/contexts/globalContext.d.ts +18 -0
  75. package/cjs/domain/contexts/globalContext.js +21 -0
  76. package/cjs/domain/contexts/globalContext.js.map +1 -0
  77. package/cjs/domain/contexts/rumInternalContext.type.d.ts +14 -0
  78. package/cjs/domain/contexts/rumInternalContext.type.js +3 -0
  79. package/cjs/domain/contexts/rumInternalContext.type.js.map +1 -0
  80. package/cjs/domain/contexts/userContext.d.ts +29 -0
  81. package/cjs/domain/contexts/userContext.js +45 -0
  82. package/cjs/domain/contexts/userContext.js.map +1 -0
  83. package/cjs/domain/deflate/deflate.types.d.ts +40 -0
  84. package/cjs/domain/deflate/deflate.types.js +3 -0
  85. package/cjs/domain/deflate/deflate.types.js.map +1 -0
  86. package/cjs/domain/deflate/index.d.ts +1 -0
  87. package/cjs/domain/deflate/index.js +18 -0
  88. package/cjs/domain/deflate/index.js.map +1 -0
  89. package/cjs/domain/error/error.d.ts +23 -0
  90. package/cjs/domain/error/error.js +74 -0
  91. package/cjs/domain/error/error.js.map +1 -0
  92. package/cjs/domain/error/error.types.d.ts +47 -0
  93. package/cjs/domain/error/error.types.js +13 -0
  94. package/cjs/domain/error/error.types.js.map +1 -0
  95. package/cjs/domain/error/trackRuntimeError.d.ts +11 -0
  96. package/cjs/domain/error/trackRuntimeError.js +48 -0
  97. package/cjs/domain/error/trackRuntimeError.js.map +1 -0
  98. package/cjs/domain/eventRateLimiter/createEventRateLimiter.d.ts +5 -0
  99. package/cjs/domain/eventRateLimiter/createEventRateLimiter.js +39 -0
  100. package/cjs/domain/eventRateLimiter/createEventRateLimiter.js.map +1 -0
  101. package/cjs/domain/extension/extensionUtils.d.ts +10 -0
  102. package/cjs/domain/extension/extensionUtils.js +30 -0
  103. package/cjs/domain/extension/extensionUtils.js.map +1 -0
  104. package/cjs/domain/intakeSites.d.ts +8 -0
  105. package/cjs/domain/intakeSites.js +11 -0
  106. package/cjs/domain/intakeSites.js.map +1 -0
  107. package/cjs/domain/report/browser.types.d.ts +34 -0
  108. package/cjs/domain/report/browser.types.js +3 -0
  109. package/cjs/domain/report/browser.types.js.map +1 -0
  110. package/cjs/domain/report/reportObservable.d.ts +14 -0
  111. package/cjs/domain/report/reportObservable.js +99 -0
  112. package/cjs/domain/report/reportObservable.js.map +1 -0
  113. package/cjs/domain/resourceUtils.d.ts +18 -0
  114. package/cjs/domain/resourceUtils.js +20 -0
  115. package/cjs/domain/resourceUtils.js.map +1 -0
  116. package/cjs/domain/session/oldCookiesMigration.d.ts +11 -0
  117. package/cjs/domain/session/oldCookiesMigration.js +40 -0
  118. package/cjs/domain/session/oldCookiesMigration.js.map +1 -0
  119. package/cjs/domain/session/sessionConstants.d.ts +15 -0
  120. package/cjs/domain/session/sessionConstants.js +16 -0
  121. package/cjs/domain/session/sessionConstants.js.map +1 -0
  122. package/cjs/domain/session/sessionManager.d.ts +28 -0
  123. package/cjs/domain/session/sessionManager.js +185 -0
  124. package/cjs/domain/session/sessionManager.js.map +1 -0
  125. package/cjs/domain/session/sessionState.d.ts +16 -0
  126. package/cjs/domain/session/sessionState.js +76 -0
  127. package/cjs/domain/session/sessionState.js.map +1 -0
  128. package/cjs/domain/session/sessionStateValidation.d.ts +3 -0
  129. package/cjs/domain/session/sessionStateValidation.js +11 -0
  130. package/cjs/domain/session/sessionStateValidation.js.map +1 -0
  131. package/cjs/domain/session/sessionStore.d.ts +38 -0
  132. package/cjs/domain/session/sessionStore.js +181 -0
  133. package/cjs/domain/session/sessionStore.js.map +1 -0
  134. package/cjs/domain/session/sessionStoreOperations.d.ts +12 -0
  135. package/cjs/domain/session/sessionStoreOperations.js +119 -0
  136. package/cjs/domain/session/sessionStoreOperations.js.map +1 -0
  137. package/cjs/domain/session/storeStrategies/sessionInCookie.d.ts +8 -0
  138. package/cjs/domain/session/storeStrategies/sessionInCookie.js +56 -0
  139. package/cjs/domain/session/storeStrategies/sessionInCookie.js.map +1 -0
  140. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.d.ts +4 -0
  141. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js +41 -0
  142. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js.map +1 -0
  143. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.d.ts +16 -0
  144. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js +5 -0
  145. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js.map +1 -0
  146. package/cjs/domain/synthetics/syntheticsWorkerValues.d.ts +12 -0
  147. package/cjs/domain/synthetics/syntheticsWorkerValues.js +31 -0
  148. package/cjs/domain/synthetics/syntheticsWorkerValues.js.map +1 -0
  149. package/cjs/domain/tags.d.ts +6 -0
  150. package/cjs/domain/tags.js +67 -0
  151. package/cjs/domain/tags.js.map +1 -0
  152. package/cjs/domain/telemetry/index.d.ts +4 -0
  153. package/cjs/domain/telemetry/index.js +28 -0
  154. package/cjs/domain/telemetry/index.js.map +1 -0
  155. package/cjs/domain/telemetry/rawTelemetryEvent.types.d.ts +18 -0
  156. package/cjs/domain/telemetry/rawTelemetryEvent.types.js +9 -0
  157. package/cjs/domain/telemetry/rawTelemetryEvent.types.js.map +1 -0
  158. package/cjs/domain/telemetry/telemetry.d.ts +56 -0
  159. package/cjs/domain/telemetry/telemetry.js +248 -0
  160. package/cjs/domain/telemetry/telemetry.js.map +1 -0
  161. package/cjs/domain/telemetry/telemetryEvent.types.d.ts +858 -0
  162. package/cjs/domain/telemetry/telemetryEvent.types.js +7 -0
  163. package/cjs/domain/telemetry/telemetryEvent.types.js.map +1 -0
  164. package/cjs/domain/trackingConsent.d.ts +13 -0
  165. package/cjs/domain/trackingConsent.js +28 -0
  166. package/cjs/domain/trackingConsent.js.map +1 -0
  167. package/cjs/index.d.ts +100 -0
  168. package/cjs/index.js +193 -0
  169. package/cjs/index.js.map +1 -0
  170. package/cjs/tools/abstractHooks.d.ts +24 -0
  171. package/cjs/tools/abstractHooks.js +41 -0
  172. package/cjs/tools/abstractHooks.js.map +1 -0
  173. package/cjs/tools/abstractLifeCycle.d.ts +23 -0
  174. package/cjs/tools/abstractLifeCycle.js +28 -0
  175. package/cjs/tools/abstractLifeCycle.js.map +1 -0
  176. package/cjs/tools/boundedBuffer.d.ts +16 -0
  177. package/cjs/tools/boundedBuffer.js +32 -0
  178. package/cjs/tools/boundedBuffer.js.map +1 -0
  179. package/cjs/tools/catchUserErrors.d.ts +1 -0
  180. package/cjs/tools/catchUserErrors.js +15 -0
  181. package/cjs/tools/catchUserErrors.js.map +1 -0
  182. package/cjs/tools/display.d.ts +38 -0
  183. package/cjs/tools/display.js +44 -0
  184. package/cjs/tools/display.js.map +1 -0
  185. package/cjs/tools/encoder.d.ts +54 -0
  186. package/cjs/tools/encoder.js +40 -0
  187. package/cjs/tools/encoder.js.map +1 -0
  188. package/cjs/tools/experimentalFeatures.d.ts +20 -0
  189. package/cjs/tools/experimentalFeatures.js +49 -0
  190. package/cjs/tools/experimentalFeatures.js.map +1 -0
  191. package/cjs/tools/getZoneJsOriginalValue.d.ts +19 -0
  192. package/cjs/tools/getZoneJsOriginalValue.js +29 -0
  193. package/cjs/tools/getZoneJsOriginalValue.js.map +1 -0
  194. package/cjs/tools/globalObject.d.ts +19 -0
  195. package/cjs/tools/globalObject.js +44 -0
  196. package/cjs/tools/globalObject.js.map +1 -0
  197. package/cjs/tools/instrumentMethod.d.ts +75 -0
  198. package/cjs/tools/instrumentMethod.js +118 -0
  199. package/cjs/tools/instrumentMethod.js.map +1 -0
  200. package/cjs/tools/matchOption.d.ts +8 -0
  201. package/cjs/tools/matchOption.js +35 -0
  202. package/cjs/tools/matchOption.js.map +1 -0
  203. package/cjs/tools/mergeInto.d.ts +25 -0
  204. package/cjs/tools/mergeInto.js +98 -0
  205. package/cjs/tools/mergeInto.js.map +1 -0
  206. package/cjs/tools/monitor.d.ts +9 -0
  207. package/cjs/tools/monitor.js +62 -0
  208. package/cjs/tools/monitor.js.map +1 -0
  209. package/cjs/tools/observable.d.ts +30 -0
  210. package/cjs/tools/observable.js +89 -0
  211. package/cjs/tools/observable.js.map +1 -0
  212. package/cjs/tools/queueMicrotask.d.ts +1 -0
  213. package/cjs/tools/queueMicrotask.js +17 -0
  214. package/cjs/tools/queueMicrotask.js.map +1 -0
  215. package/cjs/tools/readBytesFromStream.d.ts +11 -0
  216. package/cjs/tools/readBytesFromStream.js +63 -0
  217. package/cjs/tools/readBytesFromStream.js.map +1 -0
  218. package/cjs/tools/requestIdleCallback.d.ts +12 -0
  219. package/cjs/tools/requestIdleCallback.js +35 -0
  220. package/cjs/tools/requestIdleCallback.js.map +1 -0
  221. package/cjs/tools/sendToExtension.d.ts +3 -0
  222. package/cjs/tools/sendToExtension.js +11 -0
  223. package/cjs/tools/sendToExtension.js.map +1 -0
  224. package/cjs/tools/serialisation/context.d.ts +9 -0
  225. package/cjs/tools/serialisation/context.js +3 -0
  226. package/cjs/tools/serialisation/context.js.map +1 -0
  227. package/cjs/tools/serialisation/jsonStringify.d.ts +13 -0
  228. package/cjs/tools/serialisation/jsonStringify.js +48 -0
  229. package/cjs/tools/serialisation/jsonStringify.js.map +1 -0
  230. package/cjs/tools/serialisation/sanitize.d.ts +18 -0
  231. package/cjs/tools/serialisation/sanitize.js +188 -0
  232. package/cjs/tools/serialisation/sanitize.js.map +1 -0
  233. package/cjs/tools/stackTrace/computeStackTrace.d.ts +25 -0
  234. package/cjs/tools/stackTrace/computeStackTrace.js +187 -0
  235. package/cjs/tools/stackTrace/computeStackTrace.js.map +1 -0
  236. package/cjs/tools/stackTrace/handlingStack.d.ts +10 -0
  237. package/cjs/tools/stackTrace/handlingStack.js +46 -0
  238. package/cjs/tools/stackTrace/handlingStack.js.map +1 -0
  239. package/cjs/tools/taskQueue.d.ts +15 -0
  240. package/cjs/tools/taskQueue.js +54 -0
  241. package/cjs/tools/taskQueue.js.map +1 -0
  242. package/cjs/tools/timer.d.ts +5 -0
  243. package/cjs/tools/timer.js +22 -0
  244. package/cjs/tools/timer.js.map +1 -0
  245. package/cjs/tools/utils/arrayUtils.d.ts +3 -0
  246. package/cjs/tools/utils/arrayUtils.js +20 -0
  247. package/cjs/tools/utils/arrayUtils.js.map +1 -0
  248. package/cjs/tools/utils/browserDetection.d.ts +8 -0
  249. package/cjs/tools/utils/browserDetection.js +33 -0
  250. package/cjs/tools/utils/browserDetection.js.map +1 -0
  251. package/cjs/tools/utils/byteUtils.d.ts +8 -0
  252. package/cjs/tools/utils/byteUtils.js +30 -0
  253. package/cjs/tools/utils/byteUtils.js.map +1 -0
  254. package/cjs/tools/utils/functionUtils.d.ts +8 -0
  255. package/cjs/tools/utils/functionUtils.js +43 -0
  256. package/cjs/tools/utils/functionUtils.js.map +1 -0
  257. package/cjs/tools/utils/numberUtils.d.ts +9 -0
  258. package/cjs/tools/utils/numberUtils.js +24 -0
  259. package/cjs/tools/utils/numberUtils.js.map +1 -0
  260. package/cjs/tools/utils/objectUtils.d.ts +10 -0
  261. package/cjs/tools/utils/objectUtils.js +23 -0
  262. package/cjs/tools/utils/objectUtils.js.map +1 -0
  263. package/cjs/tools/utils/polyfills.d.ts +7 -0
  264. package/cjs/tools/utils/polyfills.js +23 -0
  265. package/cjs/tools/utils/polyfills.js.map +1 -0
  266. package/cjs/tools/utils/responseUtils.d.ts +2 -0
  267. package/cjs/tools/utils/responseUtils.js +17 -0
  268. package/cjs/tools/utils/responseUtils.js.map +1 -0
  269. package/cjs/tools/utils/stringUtils.d.ts +8 -0
  270. package/cjs/tools/utils/stringUtils.js +55 -0
  271. package/cjs/tools/utils/stringUtils.js.map +1 -0
  272. package/cjs/tools/utils/timeUtils.d.ts +53 -0
  273. package/cjs/tools/utils/timeUtils.js +101 -0
  274. package/cjs/tools/utils/timeUtils.js.map +1 -0
  275. package/cjs/tools/utils/timezone.d.ts +1 -0
  276. package/cjs/tools/utils/timezone.js +13 -0
  277. package/cjs/tools/utils/timezone.js.map +1 -0
  278. package/cjs/tools/utils/typeUtils.d.ts +4 -0
  279. package/cjs/tools/utils/typeUtils.js +16 -0
  280. package/cjs/tools/utils/typeUtils.js.map +1 -0
  281. package/cjs/tools/utils/urlPolyfill.d.ts +5 -0
  282. package/cjs/tools/utils/urlPolyfill.js +59 -0
  283. package/cjs/tools/utils/urlPolyfill.js.map +1 -0
  284. package/cjs/tools/valueHistory.d.ts +27 -0
  285. package/cjs/tools/valueHistory.js +104 -0
  286. package/cjs/tools/valueHistory.js.map +1 -0
  287. package/cjs/transport/batch.d.ts +16 -0
  288. package/cjs/transport/batch.js +108 -0
  289. package/cjs/transport/batch.js.map +1 -0
  290. package/cjs/transport/eventBridge.d.ts +21 -0
  291. package/cjs/transport/eventBridge.js +46 -0
  292. package/cjs/transport/eventBridge.js.map +1 -0
  293. package/cjs/transport/flushController.d.ts +58 -0
  294. package/cjs/transport/flushController.js +109 -0
  295. package/cjs/transport/flushController.js.map +1 -0
  296. package/cjs/transport/httpRequest.d.ts +51 -0
  297. package/cjs/transport/httpRequest.js +80 -0
  298. package/cjs/transport/httpRequest.js.map +1 -0
  299. package/cjs/transport/index.d.ts +7 -0
  300. package/cjs/transport/index.js +14 -0
  301. package/cjs/transport/index.js.map +1 -0
  302. package/cjs/transport/sendWithRetryStrategy.d.ts +41 -0
  303. package/cjs/transport/sendWithRetryStrategy.js +163 -0
  304. package/cjs/transport/sendWithRetryStrategy.js.map +1 -0
  305. package/esm/boot/displayAlreadyInitializedError.d.ts +2 -0
  306. package/esm/boot/displayAlreadyInitializedError.js +7 -0
  307. package/esm/boot/displayAlreadyInitializedError.js.map +1 -0
  308. package/esm/boot/init.d.ts +14 -0
  309. package/esm/boot/init.js +35 -0
  310. package/esm/boot/init.js.map +1 -0
  311. package/esm/browser/addEventListener.d.ts +87 -0
  312. package/esm/browser/addEventListener.js +51 -0
  313. package/esm/browser/addEventListener.js.map +1 -0
  314. package/esm/browser/browser.types.d.ts +51 -0
  315. package/esm/browser/browser.types.js +5 -0
  316. package/esm/browser/browser.types.js.map +1 -0
  317. package/esm/browser/cookie.d.ts +18 -0
  318. package/esm/browser/cookie.js +91 -0
  319. package/esm/browser/cookie.js.map +1 -0
  320. package/esm/browser/fetchObservable.d.ts +25 -0
  321. package/esm/browser/fetchObservable.js +75 -0
  322. package/esm/browser/fetchObservable.js.map +1 -0
  323. package/esm/browser/pageMayExitObservable.d.ts +14 -0
  324. package/esm/browser/pageMayExitObservable.js +40 -0
  325. package/esm/browser/pageMayExitObservable.js.map +1 -0
  326. package/esm/browser/runOnReadyState.d.ts +5 -0
  327. package/esm/browser/runOnReadyState.js +16 -0
  328. package/esm/browser/runOnReadyState.js.map +1 -0
  329. package/esm/browser/xhrObservable.d.ts +23 -0
  330. package/esm/browser/xhrObservable.js +80 -0
  331. package/esm/browser/xhrObservable.js.map +1 -0
  332. package/esm/domain/allowedTrackingOrigins.d.ts +4 -0
  333. package/esm/domain/allowedTrackingOrigins.js +21 -0
  334. package/esm/domain/allowedTrackingOrigins.js.map +1 -0
  335. package/esm/domain/bufferedData.d.ts +14 -0
  336. package/esm/domain/bufferedData.js +19 -0
  337. package/esm/domain/bufferedData.js.map +1 -0
  338. package/esm/domain/configuration/configuration.d.ts +303 -0
  339. package/esm/domain/configuration/configuration.js +146 -0
  340. package/esm/domain/configuration/configuration.js.map +1 -0
  341. package/esm/domain/configuration/endpointBuilder.d.ts +12 -0
  342. package/esm/domain/configuration/endpointBuilder.js +74 -0
  343. package/esm/domain/configuration/endpointBuilder.js.map +1 -0
  344. package/esm/domain/configuration/index.d.ts +5 -0
  345. package/esm/domain/configuration/index.js +4 -0
  346. package/esm/domain/configuration/index.js.map +1 -0
  347. package/esm/domain/configuration/transportConfiguration.d.ts +20 -0
  348. package/esm/domain/configuration/transportConfiguration.js +50 -0
  349. package/esm/domain/configuration/transportConfiguration.js.map +1 -0
  350. package/esm/domain/connectivity/connectivity.d.ts +14 -0
  351. package/esm/domain/connectivity/connectivity.js +11 -0
  352. package/esm/domain/connectivity/connectivity.js.map +1 -0
  353. package/esm/domain/connectivity/index.d.ts +1 -0
  354. package/esm/domain/connectivity/index.js +2 -0
  355. package/esm/domain/connectivity/index.js.map +1 -0
  356. package/esm/domain/console/consoleObservable.d.ts +21 -0
  357. package/esm/domain/console/consoleObservable.js +80 -0
  358. package/esm/domain/console/consoleObservable.js.map +1 -0
  359. package/esm/domain/context/contextConstants.d.ts +21 -0
  360. package/esm/domain/context/contextConstants.js +15 -0
  361. package/esm/domain/context/contextConstants.js.map +1 -0
  362. package/esm/domain/context/contextManager.d.ts +19 -0
  363. package/esm/domain/context/contextManager.js +57 -0
  364. package/esm/domain/context/contextManager.js.map +1 -0
  365. package/esm/domain/context/contextUtils.d.ts +5 -0
  366. package/esm/domain/context/contextUtils.js +13 -0
  367. package/esm/domain/context/contextUtils.js.map +1 -0
  368. package/esm/domain/context/defineContextMethod.d.ts +6 -0
  369. package/esm/domain/context/defineContextMethod.js +17 -0
  370. package/esm/domain/context/defineContextMethod.js.map +1 -0
  371. package/esm/domain/context/storeContextManager.d.ts +6 -0
  372. package/esm/domain/context/storeContextManager.js +35 -0
  373. package/esm/domain/context/storeContextManager.js.map +1 -0
  374. package/esm/domain/contexts/accountContext.d.ts +26 -0
  375. package/esm/domain/contexts/accountContext.js +29 -0
  376. package/esm/domain/contexts/accountContext.js.map +1 -0
  377. package/esm/domain/contexts/globalContext.d.ts +18 -0
  378. package/esm/domain/contexts/globalContext.js +17 -0
  379. package/esm/domain/contexts/globalContext.js.map +1 -0
  380. package/esm/domain/contexts/rumInternalContext.type.d.ts +14 -0
  381. package/esm/domain/contexts/rumInternalContext.type.js +2 -0
  382. package/esm/domain/contexts/rumInternalContext.type.js.map +1 -0
  383. package/esm/domain/contexts/userContext.d.ts +29 -0
  384. package/esm/domain/contexts/userContext.js +41 -0
  385. package/esm/domain/contexts/userContext.js.map +1 -0
  386. package/esm/domain/deflate/deflate.types.d.ts +40 -0
  387. package/esm/domain/deflate/deflate.types.js +2 -0
  388. package/esm/domain/deflate/deflate.types.js.map +1 -0
  389. package/esm/domain/deflate/index.d.ts +1 -0
  390. package/esm/domain/deflate/index.js +2 -0
  391. package/esm/domain/deflate/index.js.map +1 -0
  392. package/esm/domain/error/error.d.ts +23 -0
  393. package/esm/domain/error/error.js +65 -0
  394. package/esm/domain/error/error.js.map +1 -0
  395. package/esm/domain/error/error.types.d.ts +47 -0
  396. package/esm/domain/error/error.types.js +10 -0
  397. package/esm/domain/error/error.types.js.map +1 -0
  398. package/esm/domain/error/trackRuntimeError.d.ts +11 -0
  399. package/esm/domain/error/trackRuntimeError.js +43 -0
  400. package/esm/domain/error/trackRuntimeError.js.map +1 -0
  401. package/esm/domain/eventRateLimiter/createEventRateLimiter.d.ts +5 -0
  402. package/esm/domain/eventRateLimiter/createEventRateLimiter.js +36 -0
  403. package/esm/domain/eventRateLimiter/createEventRateLimiter.js.map +1 -0
  404. package/esm/domain/extension/extensionUtils.d.ts +10 -0
  405. package/esm/domain/extension/extensionUtils.js +25 -0
  406. package/esm/domain/extension/extensionUtils.js.map +1 -0
  407. package/esm/domain/intakeSites.d.ts +8 -0
  408. package/esm/domain/intakeSites.js +8 -0
  409. package/esm/domain/intakeSites.js.map +1 -0
  410. package/esm/domain/report/browser.types.d.ts +34 -0
  411. package/esm/domain/report/browser.types.js +2 -0
  412. package/esm/domain/report/browser.types.js.map +1 -0
  413. package/esm/domain/report/reportObservable.d.ts +14 -0
  414. package/esm/domain/report/reportObservable.js +95 -0
  415. package/esm/domain/report/reportObservable.js.map +1 -0
  416. package/esm/domain/resourceUtils.d.ts +18 -0
  417. package/esm/domain/resourceUtils.js +17 -0
  418. package/esm/domain/resourceUtils.js.map +1 -0
  419. package/esm/domain/session/oldCookiesMigration.d.ts +11 -0
  420. package/esm/domain/session/oldCookiesMigration.js +36 -0
  421. package/esm/domain/session/oldCookiesMigration.js.map +1 -0
  422. package/esm/domain/session/sessionConstants.d.ts +15 -0
  423. package/esm/domain/session/sessionConstants.js +13 -0
  424. package/esm/domain/session/sessionConstants.js.map +1 -0
  425. package/esm/domain/session/sessionManager.d.ts +28 -0
  426. package/esm/domain/session/sessionManager.js +180 -0
  427. package/esm/domain/session/sessionManager.js.map +1 -0
  428. package/esm/domain/session/sessionState.d.ts +16 -0
  429. package/esm/domain/session/sessionState.js +66 -0
  430. package/esm/domain/session/sessionState.js.map +1 -0
  431. package/esm/domain/session/sessionStateValidation.d.ts +3 -0
  432. package/esm/domain/session/sessionStateValidation.js +7 -0
  433. package/esm/domain/session/sessionStateValidation.js.map +1 -0
  434. package/esm/domain/session/sessionStore.d.ts +38 -0
  435. package/esm/domain/session/sessionStore.js +175 -0
  436. package/esm/domain/session/sessionStore.js.map +1 -0
  437. package/esm/domain/session/sessionStoreOperations.d.ts +12 -0
  438. package/esm/domain/session/sessionStoreOperations.js +114 -0
  439. package/esm/domain/session/sessionStoreOperations.js.map +1 -0
  440. package/esm/domain/session/storeStrategies/sessionInCookie.d.ts +8 -0
  441. package/esm/domain/session/storeStrategies/sessionInCookie.js +50 -0
  442. package/esm/domain/session/storeStrategies/sessionInCookie.js.map +1 -0
  443. package/esm/domain/session/storeStrategies/sessionInLocalStorage.d.ts +4 -0
  444. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js +37 -0
  445. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js.map +1 -0
  446. package/esm/domain/session/storeStrategies/sessionStoreStrategy.d.ts +16 -0
  447. package/esm/domain/session/storeStrategies/sessionStoreStrategy.js +2 -0
  448. package/esm/domain/session/storeStrategies/sessionStoreStrategy.js.map +1 -0
  449. package/esm/domain/synthetics/syntheticsWorkerValues.d.ts +12 -0
  450. package/esm/domain/synthetics/syntheticsWorkerValues.js +24 -0
  451. package/esm/domain/synthetics/syntheticsWorkerValues.js.map +1 -0
  452. package/esm/domain/tags.d.ts +6 -0
  453. package/esm/domain/tags.js +60 -0
  454. package/esm/domain/tags.js.map +1 -0
  455. package/esm/domain/telemetry/index.d.ts +4 -0
  456. package/esm/domain/telemetry/index.js +3 -0
  457. package/esm/domain/telemetry/index.js.map +1 -0
  458. package/esm/domain/telemetry/rawTelemetryEvent.types.d.ts +18 -0
  459. package/esm/domain/telemetry/rawTelemetryEvent.types.js +6 -0
  460. package/esm/domain/telemetry/rawTelemetryEvent.types.js.map +1 -0
  461. package/esm/domain/telemetry/telemetry.d.ts +56 -0
  462. package/esm/domain/telemetry/telemetry.js +235 -0
  463. package/esm/domain/telemetry/telemetry.js.map +1 -0
  464. package/esm/domain/telemetry/telemetryEvent.types.d.ts +858 -0
  465. package/esm/domain/telemetry/telemetryEvent.types.js +6 -0
  466. package/esm/domain/telemetry/telemetryEvent.types.js.map +1 -0
  467. package/esm/domain/trackingConsent.d.ts +13 -0
  468. package/esm/domain/trackingConsent.js +24 -0
  469. package/esm/domain/trackingConsent.js.map +1 -0
  470. package/esm/index.d.ts +100 -0
  471. package/esm/index.js +76 -0
  472. package/esm/index.js.map +1 -0
  473. package/esm/tools/abstractHooks.d.ts +24 -0
  474. package/esm/tools/abstractHooks.js +37 -0
  475. package/esm/tools/abstractHooks.js.map +1 -0
  476. package/esm/tools/abstractLifeCycle.d.ts +23 -0
  477. package/esm/tools/abstractLifeCycle.js +24 -0
  478. package/esm/tools/abstractLifeCycle.js.map +1 -0
  479. package/esm/tools/boundedBuffer.d.ts +16 -0
  480. package/esm/tools/boundedBuffer.js +29 -0
  481. package/esm/tools/boundedBuffer.js.map +1 -0
  482. package/esm/tools/catchUserErrors.d.ts +1 -0
  483. package/esm/tools/catchUserErrors.js +12 -0
  484. package/esm/tools/catchUserErrors.js.map +1 -0
  485. package/esm/tools/display.d.ts +38 -0
  486. package/esm/tools/display.js +41 -0
  487. package/esm/tools/display.js.map +1 -0
  488. package/esm/tools/encoder.d.ts +54 -0
  489. package/esm/tools/encoder.js +37 -0
  490. package/esm/tools/encoder.js.map +1 -0
  491. package/esm/tools/experimentalFeatures.d.ts +20 -0
  492. package/esm/tools/experimentalFeatures.js +41 -0
  493. package/esm/tools/experimentalFeatures.js.map +1 -0
  494. package/esm/tools/getZoneJsOriginalValue.d.ts +19 -0
  495. package/esm/tools/getZoneJsOriginalValue.js +26 -0
  496. package/esm/tools/getZoneJsOriginalValue.js.map +1 -0
  497. package/esm/tools/globalObject.d.ts +19 -0
  498. package/esm/tools/globalObject.js +40 -0
  499. package/esm/tools/globalObject.js.map +1 -0
  500. package/esm/tools/instrumentMethod.d.ts +75 -0
  501. package/esm/tools/instrumentMethod.js +114 -0
  502. package/esm/tools/instrumentMethod.js.map +1 -0
  503. package/esm/tools/matchOption.d.ts +8 -0
  504. package/esm/tools/matchOption.js +31 -0
  505. package/esm/tools/matchOption.js.map +1 -0
  506. package/esm/tools/mergeInto.d.ts +25 -0
  507. package/esm/tools/mergeInto.js +93 -0
  508. package/esm/tools/mergeInto.js.map +1 -0
  509. package/esm/tools/monitor.d.ts +9 -0
  510. package/esm/tools/monitor.js +52 -0
  511. package/esm/tools/monitor.js.map +1 -0
  512. package/esm/tools/observable.d.ts +30 -0
  513. package/esm/tools/observable.js +83 -0
  514. package/esm/tools/observable.js.map +1 -0
  515. package/esm/tools/queueMicrotask.d.ts +1 -0
  516. package/esm/tools/queueMicrotask.js +14 -0
  517. package/esm/tools/queueMicrotask.js.map +1 -0
  518. package/esm/tools/readBytesFromStream.d.ts +11 -0
  519. package/esm/tools/readBytesFromStream.js +60 -0
  520. package/esm/tools/readBytesFromStream.js.map +1 -0
  521. package/esm/tools/requestIdleCallback.d.ts +12 -0
  522. package/esm/tools/requestIdleCallback.js +30 -0
  523. package/esm/tools/requestIdleCallback.js.map +1 -0
  524. package/esm/tools/sendToExtension.d.ts +3 -0
  525. package/esm/tools/sendToExtension.js +8 -0
  526. package/esm/tools/sendToExtension.js.map +1 -0
  527. package/esm/tools/serialisation/context.d.ts +9 -0
  528. package/esm/tools/serialisation/context.js +2 -0
  529. package/esm/tools/serialisation/context.js.map +1 -0
  530. package/esm/tools/serialisation/jsonStringify.d.ts +13 -0
  531. package/esm/tools/serialisation/jsonStringify.js +44 -0
  532. package/esm/tools/serialisation/jsonStringify.js.map +1 -0
  533. package/esm/tools/serialisation/sanitize.d.ts +18 -0
  534. package/esm/tools/serialisation/sanitize.js +185 -0
  535. package/esm/tools/serialisation/sanitize.js.map +1 -0
  536. package/esm/tools/stackTrace/computeStackTrace.d.ts +25 -0
  537. package/esm/tools/stackTrace/computeStackTrace.js +183 -0
  538. package/esm/tools/stackTrace/computeStackTrace.js.map +1 -0
  539. package/esm/tools/stackTrace/handlingStack.d.ts +10 -0
  540. package/esm/tools/stackTrace/handlingStack.js +41 -0
  541. package/esm/tools/stackTrace/handlingStack.js.map +1 -0
  542. package/esm/tools/taskQueue.d.ts +15 -0
  543. package/esm/tools/taskQueue.js +50 -0
  544. package/esm/tools/taskQueue.js.map +1 -0
  545. package/esm/tools/timer.d.ts +5 -0
  546. package/esm/tools/timer.js +16 -0
  547. package/esm/tools/timer.js.map +1 -0
  548. package/esm/tools/utils/arrayUtils.d.ts +3 -0
  549. package/esm/tools/utils/arrayUtils.js +15 -0
  550. package/esm/tools/utils/arrayUtils.js.map +1 -0
  551. package/esm/tools/utils/browserDetection.d.ts +8 -0
  552. package/esm/tools/utils/browserDetection.js +28 -0
  553. package/esm/tools/utils/browserDetection.js.map +1 -0
  554. package/esm/tools/utils/byteUtils.d.ts +8 -0
  555. package/esm/tools/utils/byteUtils.js +25 -0
  556. package/esm/tools/utils/byteUtils.js.map +1 -0
  557. package/esm/tools/utils/functionUtils.d.ts +8 -0
  558. package/esm/tools/utils/functionUtils.js +39 -0
  559. package/esm/tools/utils/functionUtils.js.map +1 -0
  560. package/esm/tools/utils/numberUtils.d.ts +9 -0
  561. package/esm/tools/utils/numberUtils.js +18 -0
  562. package/esm/tools/utils/numberUtils.js.map +1 -0
  563. package/esm/tools/utils/objectUtils.d.ts +10 -0
  564. package/esm/tools/utils/objectUtils.js +17 -0
  565. package/esm/tools/utils/objectUtils.js.map +1 -0
  566. package/esm/tools/utils/polyfills.d.ts +7 -0
  567. package/esm/tools/utils/polyfills.js +18 -0
  568. package/esm/tools/utils/polyfills.js.map +1 -0
  569. package/esm/tools/utils/responseUtils.d.ts +2 -0
  570. package/esm/tools/utils/responseUtils.js +13 -0
  571. package/esm/tools/utils/responseUtils.js.map +1 -0
  572. package/esm/tools/utils/stringUtils.d.ts +8 -0
  573. package/esm/tools/utils/stringUtils.js +49 -0
  574. package/esm/tools/utils/stringUtils.js.map +1 -0
  575. package/esm/tools/utils/timeUtils.d.ts +53 -0
  576. package/esm/tools/utils/timeUtils.js +84 -0
  577. package/esm/tools/utils/timeUtils.js.map +1 -0
  578. package/esm/tools/utils/timezone.d.ts +1 -0
  579. package/esm/tools/utils/timezone.js +10 -0
  580. package/esm/tools/utils/timezone.js.map +1 -0
  581. package/esm/tools/utils/typeUtils.d.ts +4 -0
  582. package/esm/tools/utils/typeUtils.js +13 -0
  583. package/esm/tools/utils/typeUtils.js.map +1 -0
  584. package/esm/tools/utils/urlPolyfill.d.ts +5 -0
  585. package/esm/tools/utils/urlPolyfill.js +52 -0
  586. package/esm/tools/utils/urlPolyfill.js.map +1 -0
  587. package/esm/tools/valueHistory.d.ts +27 -0
  588. package/esm/tools/valueHistory.js +100 -0
  589. package/esm/tools/valueHistory.js.map +1 -0
  590. package/esm/transport/batch.d.ts +16 -0
  591. package/esm/transport/batch.js +105 -0
  592. package/esm/transport/batch.js.map +1 -0
  593. package/esm/transport/eventBridge.d.ts +21 -0
  594. package/esm/transport/eventBridge.js +41 -0
  595. package/esm/transport/eventBridge.js.map +1 -0
  596. package/esm/transport/flushController.d.ts +58 -0
  597. package/esm/transport/flushController.js +106 -0
  598. package/esm/transport/flushController.js.map +1 -0
  599. package/esm/transport/httpRequest.d.ts +51 -0
  600. package/esm/transport/httpRequest.js +75 -0
  601. package/esm/transport/httpRequest.js.map +1 -0
  602. package/esm/transport/index.d.ts +7 -0
  603. package/esm/transport/index.js +5 -0
  604. package/esm/transport/index.js.map +1 -0
  605. package/esm/transport/sendWithRetryStrategy.d.ts +41 -0
  606. package/esm/transport/sendWithRetryStrategy.js +158 -0
  607. package/esm/transport/sendWithRetryStrategy.js.map +1 -0
  608. package/package.json +31 -0
  609. package/src/boot/displayAlreadyInitializedError.ts +8 -0
  610. package/src/boot/init.ts +55 -0
  611. package/src/browser/addEventListener.ts +145 -0
  612. package/src/browser/browser.types.ts +82 -0
  613. package/src/browser/cookie.ts +107 -0
  614. package/src/browser/fetchObservable.ts +127 -0
  615. package/src/browser/pageMayExitObservable.ts +56 -0
  616. package/src/browser/runOnReadyState.ts +25 -0
  617. package/src/browser/xhrObservable.ts +130 -0
  618. package/src/domain/allowedTrackingOrigins.ts +30 -0
  619. package/src/domain/bufferedData.ts +32 -0
  620. package/src/domain/configuration/configuration.ts +472 -0
  621. package/src/domain/configuration/endpointBuilder.ts +119 -0
  622. package/src/domain/configuration/index.ts +11 -0
  623. package/src/domain/configuration/transportConfiguration.ts +78 -0
  624. package/src/domain/connectivity/connectivity.ts +31 -0
  625. package/src/domain/connectivity/index.ts +1 -0
  626. package/src/domain/console/consoleObservable.ts +118 -0
  627. package/src/domain/context/contextConstants.ts +27 -0
  628. package/src/domain/context/contextManager.ts +85 -0
  629. package/src/domain/context/contextUtils.ts +14 -0
  630. package/src/domain/context/defineContextMethod.ts +31 -0
  631. package/src/domain/context/storeContextManager.ts +55 -0
  632. package/src/domain/contexts/accountContext.ts +47 -0
  633. package/src/domain/contexts/globalContext.ts +30 -0
  634. package/src/domain/contexts/rumInternalContext.type.ts +15 -0
  635. package/src/domain/contexts/userContext.ts +64 -0
  636. package/src/domain/deflate/deflate.types.ts +57 -0
  637. package/src/domain/deflate/index.ts +1 -0
  638. package/src/domain/error/error.ts +103 -0
  639. package/src/domain/error/error.types.ts +64 -0
  640. package/src/domain/error/trackRuntimeError.ts +50 -0
  641. package/src/domain/eventRateLimiter/createEventRateLimiter.ts +46 -0
  642. package/src/domain/extension/extensionUtils.ts +28 -0
  643. package/src/domain/intakeSites.ts +17 -0
  644. package/src/domain/report/browser.types.ts +38 -0
  645. package/src/domain/report/reportObservable.ts +133 -0
  646. package/src/domain/resourceUtils.ts +21 -0
  647. package/src/domain/session/README.md +193 -0
  648. package/src/domain/session/oldCookiesMigration.ts +42 -0
  649. package/src/domain/session/sessionConstants.ts +19 -0
  650. package/src/domain/session/sessionManager.ts +244 -0
  651. package/src/domain/session/sessionState.ts +88 -0
  652. package/src/domain/session/sessionStateValidation.ts +9 -0
  653. package/src/domain/session/sessionStore.ts +244 -0
  654. package/src/domain/session/sessionStoreOperations.ts +131 -0
  655. package/src/domain/session/storeStrategies/sessionInCookie.ts +85 -0
  656. package/src/domain/session/storeStrategies/sessionInLocalStorage.ts +44 -0
  657. package/src/domain/session/storeStrategies/sessionStoreStrategy.ts +16 -0
  658. package/src/domain/synthetics/syntheticsWorkerValues.ts +38 -0
  659. package/src/domain/tags.ts +76 -0
  660. package/src/domain/telemetry/index.ts +22 -0
  661. package/src/domain/telemetry/rawTelemetryEvent.types.ts +22 -0
  662. package/src/domain/telemetry/telemetry.ts +345 -0
  663. package/src/domain/telemetry/telemetryEvent.types.ts +899 -0
  664. package/src/domain/trackingConsent.ts +34 -0
  665. package/src/index.ts +164 -0
  666. package/src/tools/abstractHooks.ts +72 -0
  667. package/src/tools/abstractLifeCycle.ts +46 -0
  668. package/src/tools/boundedBuffer.ts +45 -0
  669. package/src/tools/catchUserErrors.ts +11 -0
  670. package/src/tools/display.ts +56 -0
  671. package/src/tools/encoder.ts +103 -0
  672. package/src/tools/experimentalFeatures.ts +51 -0
  673. package/src/tools/getZoneJsOriginalValue.ts +38 -0
  674. package/src/tools/globalObject.ts +51 -0
  675. package/src/tools/instrumentMethod.ts +170 -0
  676. package/src/tools/matchOption.ts +31 -0
  677. package/src/tools/mergeInto.ts +177 -0
  678. package/src/tools/monitor.ts +72 -0
  679. package/src/tools/observable.ts +104 -0
  680. package/src/tools/queueMicrotask.ts +13 -0
  681. package/src/tools/readBytesFromStream.ts +77 -0
  682. package/src/tools/requestIdleCallback.ts +40 -0
  683. package/src/tools/sendToExtension.ts +14 -0
  684. package/src/tools/serialisation/context.ts +11 -0
  685. package/src/tools/serialisation/jsonStringify.ts +53 -0
  686. package/src/tools/serialisation/sanitize.ts +273 -0
  687. package/src/tools/stackTrace/computeStackTrace.ts +250 -0
  688. package/src/tools/stackTrace/handlingStack.ts +48 -0
  689. package/src/tools/taskQueue.ts +63 -0
  690. package/src/tools/timer.ts +21 -0
  691. package/src/tools/utils/arrayUtils.ts +15 -0
  692. package/src/tools/utils/browserDetection.ts +39 -0
  693. package/src/tools/utils/byteUtils.ts +35 -0
  694. package/src/tools/utils/functionUtils.ts +45 -0
  695. package/src/tools/utils/numberUtils.ts +20 -0
  696. package/src/tools/utils/objectUtils.ts +19 -0
  697. package/src/tools/utils/polyfills.ts +23 -0
  698. package/src/tools/utils/responseUtils.ts +12 -0
  699. package/src/tools/utils/stringUtils.ts +52 -0
  700. package/src/tools/utils/timeUtils.ts +117 -0
  701. package/src/tools/utils/timezone.ts +9 -0
  702. package/src/tools/utils/typeUtils.ts +12 -0
  703. package/src/tools/utils/urlPolyfill.ts +56 -0
  704. package/src/tools/valueHistory.ts +151 -0
  705. package/src/transport/batch.ts +144 -0
  706. package/src/transport/eventBridge.ts +61 -0
  707. package/src/transport/flushController.ts +144 -0
  708. package/src/transport/httpRequest.ts +164 -0
  709. package/src/transport/index.ts +7 -0
  710. package/src/transport/sendWithRetryStrategy.ts +222 -0
@@ -0,0 +1,11 @@
1
+ export interface Context {
2
+ [x: string]: ContextValue
3
+ }
4
+
5
+ export type ContextValue = string | number | boolean | Context | ContextArray | undefined | null
6
+
7
+ /**
8
+ * @hidden
9
+ */
10
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
11
+ export interface ContextArray extends Array<ContextValue> {}
@@ -0,0 +1,53 @@
1
+ import { noop } from '../utils/functionUtils'
2
+
3
+ /**
4
+ * Custom implementation of JSON.stringify that ignores some toJSON methods. We need to do that
5
+ * because some sites badly override toJSON on certain objects. Removing all toJSON methods from
6
+ * nested values would be too costly, so we just detach them from the root value, and native classes
7
+ * used to build JSON values (Array and Object).
8
+ *
9
+ * Note: this still assumes that JSON.stringify is correct.
10
+ */
11
+ export function jsonStringify(
12
+ value: unknown,
13
+ replacer?: Array<string | number>,
14
+ space?: string | number
15
+ ): string | undefined {
16
+ if (typeof value !== 'object' || value === null) {
17
+ return JSON.stringify(value)
18
+ }
19
+
20
+ // Note: The order matter here. We need to detach toJSON methods on parent classes before their
21
+ // subclasses.
22
+ const restoreObjectPrototypeToJson = detachToJsonMethod(Object.prototype)
23
+ const restoreArrayPrototypeToJson = detachToJsonMethod(Array.prototype)
24
+ const restoreValuePrototypeToJson = detachToJsonMethod(Object.getPrototypeOf(value))
25
+ const restoreValueToJson = detachToJsonMethod(value)
26
+
27
+ try {
28
+ return JSON.stringify(value, replacer, space)
29
+ } catch {
30
+ return '<error: unable to serialize object>'
31
+ } finally {
32
+ restoreObjectPrototypeToJson()
33
+ restoreArrayPrototypeToJson()
34
+ restoreValuePrototypeToJson()
35
+ restoreValueToJson()
36
+ }
37
+ }
38
+
39
+ export interface ObjectWithToJsonMethod {
40
+ toJSON?: () => unknown
41
+ }
42
+
43
+ export function detachToJsonMethod(value: object) {
44
+ const object = value as ObjectWithToJsonMethod
45
+ const objectToJson = object.toJSON
46
+ if (objectToJson) {
47
+ delete object.toJSON
48
+ return () => {
49
+ object.toJSON = objectToJson
50
+ }
51
+ }
52
+ return noop
53
+ }
@@ -0,0 +1,273 @@
1
+ import { display } from '../display'
2
+ import { ONE_KIBI_BYTE } from '../utils/byteUtils'
3
+ import type { Context, ContextArray, ContextValue } from './context'
4
+ import type { ObjectWithToJsonMethod } from './jsonStringify'
5
+ import { detachToJsonMethod } from './jsonStringify'
6
+
7
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
8
+ type PrimitivesAndFunctions = string | number | boolean | undefined | null | symbol | bigint | Function
9
+ type ExtendedContextValue = PrimitivesAndFunctions | object | ExtendedContext | ExtendedContextArray
10
+ interface ExtendedContext {
11
+ [key: string]: ExtendedContextValue
12
+ }
13
+ type ExtendedContextArray = ExtendedContextValue[]
14
+
15
+ interface ContainerElementToProcess {
16
+ source: ExtendedContextArray | ExtendedContext
17
+ target: ContextArray | Context
18
+ path: string
19
+ }
20
+
21
+ interface SanitizedEvent extends Context {
22
+ type: string
23
+ isTrusted: boolean
24
+ currentTarget: string | null | undefined
25
+ target: string | null | undefined
26
+ }
27
+
28
+ // The maximum size of a single event is 256KiB. By default, we ensure that user-provided data
29
+ // going through sanitize fits inside our events, while leaving room for other contexts, metadata, ...
30
+ const SANITIZE_DEFAULT_MAX_CHARACTER_COUNT = 220 * ONE_KIBI_BYTE
31
+
32
+ // Symbol for the root element of the JSONPath used for visited objects
33
+ const JSON_PATH_ROOT_ELEMENT = '$'
34
+
35
+ // When serializing (using JSON.stringify) a key of an object, { key: 42 } gets wrapped in quotes as "key".
36
+ // With the separator (:), we need to add 3 characters to the count.
37
+ const KEY_DECORATION_LENGTH = 3
38
+
39
+ /**
40
+ * Ensures user-provided data is 'safe' for the SDK
41
+ * - Deep clones data
42
+ * - Removes cyclic references
43
+ * - Transforms unserializable types to a string representation
44
+ *
45
+ * LIMITATIONS:
46
+ * - Size is in characters, not byte count (may differ according to character encoding)
47
+ * - Size does not take into account indentation that can be applied to JSON.stringify
48
+ * - Non-numerical properties of Arrays are ignored. Same behavior as JSON.stringify
49
+ *
50
+ * @param source - User-provided data meant to be serialized using JSON.stringify
51
+ * @param maxCharacterCount - Maximum number of characters allowed in serialized form
52
+ */
53
+ export function sanitize(source: string, maxCharacterCount?: number): string | undefined
54
+ export function sanitize(source: Context, maxCharacterCount?: number): Context
55
+ export function sanitize(source: unknown, maxCharacterCount?: number): ContextValue
56
+ export function sanitize(source: unknown, maxCharacterCount = SANITIZE_DEFAULT_MAX_CHARACTER_COUNT) {
57
+ // Unbind any toJSON function we may have on [] or {} prototypes
58
+ const restoreObjectPrototypeToJson = detachToJsonMethod(Object.prototype)
59
+ const restoreArrayPrototypeToJson = detachToJsonMethod(Array.prototype)
60
+
61
+ // Initial call to sanitizeProcessor - will populate containerQueue if source is an Array or a plain Object
62
+ const containerQueue: ContainerElementToProcess[] = []
63
+ const visitedObjectsWithPath = new WeakMap<object, string>()
64
+ const sanitizedData = sanitizeProcessor(
65
+ source as ExtendedContextValue,
66
+ JSON_PATH_ROOT_ELEMENT,
67
+ undefined,
68
+ containerQueue,
69
+ visitedObjectsWithPath
70
+ )
71
+ const serializedSanitizedData = JSON.stringify(sanitizedData)
72
+ let accumulatedCharacterCount = serializedSanitizedData ? serializedSanitizedData.length : 0
73
+
74
+ if (accumulatedCharacterCount > maxCharacterCount) {
75
+ warnOverCharacterLimit(maxCharacterCount, 'discarded', source)
76
+ return undefined
77
+ }
78
+
79
+ while (containerQueue.length > 0 && accumulatedCharacterCount < maxCharacterCount) {
80
+ const containerToProcess = containerQueue.shift()!
81
+ let separatorLength = 0 // 0 for the first element, 1 for subsequent elements
82
+
83
+ // Arrays and Objects have to be handled distinctly to ensure
84
+ // we do not pick up non-numerical properties from Arrays
85
+ if (Array.isArray(containerToProcess.source)) {
86
+ for (let key = 0; key < containerToProcess.source.length; key++) {
87
+ const targetData = sanitizeProcessor(
88
+ containerToProcess.source[key],
89
+ containerToProcess.path,
90
+ key,
91
+ containerQueue,
92
+ visitedObjectsWithPath
93
+ )
94
+
95
+ if (targetData !== undefined) {
96
+ accumulatedCharacterCount += JSON.stringify(targetData).length
97
+ } else {
98
+ // When an element of an Array (targetData) is undefined, it is serialized as null:
99
+ // JSON.stringify([undefined]) => '[null]' - This accounts for 4 characters
100
+ accumulatedCharacterCount += 4
101
+ }
102
+ accumulatedCharacterCount += separatorLength
103
+ separatorLength = 1
104
+ if (accumulatedCharacterCount > maxCharacterCount) {
105
+ warnOverCharacterLimit(maxCharacterCount, 'truncated', source)
106
+ break
107
+ }
108
+ ;(containerToProcess.target as ContextArray)[key] = targetData
109
+ }
110
+ } else {
111
+ for (const key in containerToProcess.source) {
112
+ if (Object.prototype.hasOwnProperty.call(containerToProcess.source, key)) {
113
+ const targetData = sanitizeProcessor(
114
+ containerToProcess.source[key],
115
+ containerToProcess.path,
116
+ key,
117
+ containerQueue,
118
+ visitedObjectsWithPath
119
+ )
120
+ // When a property of an object has an undefined value, it will be dropped during serialization:
121
+ // JSON.stringify({a:undefined}) => '{}'
122
+ if (targetData !== undefined) {
123
+ accumulatedCharacterCount +=
124
+ JSON.stringify(targetData).length + separatorLength + key.length + KEY_DECORATION_LENGTH
125
+ separatorLength = 1
126
+ }
127
+ if (accumulatedCharacterCount > maxCharacterCount) {
128
+ warnOverCharacterLimit(maxCharacterCount, 'truncated', source)
129
+ break
130
+ }
131
+ ;(containerToProcess.target as Context)[key] = targetData
132
+ }
133
+ }
134
+ }
135
+ }
136
+
137
+ // Rebind detached toJSON functions
138
+ restoreObjectPrototypeToJson()
139
+ restoreArrayPrototypeToJson()
140
+
141
+ return sanitizedData
142
+ }
143
+
144
+ /**
145
+ * Internal function to factorize the process common to the
146
+ * initial call to sanitize, and iterations for Arrays and Objects
147
+ *
148
+ */
149
+ function sanitizeProcessor(
150
+ source: ExtendedContextValue,
151
+ parentPath: string,
152
+ key: string | number | undefined,
153
+ queue: ContainerElementToProcess[],
154
+ visitedObjectsWithPath: WeakMap<object, string>
155
+ ) {
156
+ // Start by handling toJSON, as we want to sanitize its output
157
+ const sourceToSanitize = tryToApplyToJSON(source)
158
+
159
+ if (!sourceToSanitize || typeof sourceToSanitize !== 'object') {
160
+ return sanitizePrimitivesAndFunctions(sourceToSanitize)
161
+ }
162
+
163
+ const sanitizedSource = sanitizeObjects(sourceToSanitize)
164
+ if (sanitizedSource !== '[Object]' && sanitizedSource !== '[Array]' && sanitizedSource !== '[Error]') {
165
+ return sanitizedSource
166
+ }
167
+
168
+ // Handle potential cyclic references
169
+ // We need to use source as sourceToSanitize could be a reference to a new object
170
+ // At this stage, we know the source is an object type
171
+ const sourceAsObject = source as object
172
+ if (visitedObjectsWithPath.has(sourceAsObject)) {
173
+ return `[Reference seen at ${visitedObjectsWithPath.get(sourceAsObject)!}]`
174
+ }
175
+
176
+ // Add processed source to queue
177
+ const currentPath = key !== undefined ? `${parentPath}.${key}` : parentPath
178
+ const target = Array.isArray(sourceToSanitize) ? ([] as ContextArray) : ({} as Context)
179
+ visitedObjectsWithPath.set(sourceAsObject, currentPath)
180
+ queue.push({ source: sourceToSanitize as ExtendedContext | ExtendedContextArray, target, path: currentPath })
181
+
182
+ return target
183
+ }
184
+
185
+ /**
186
+ * Handles sanitization of simple, non-object types
187
+ *
188
+ */
189
+ function sanitizePrimitivesAndFunctions(value: PrimitivesAndFunctions) {
190
+ // BigInt cannot be serialized by JSON.stringify(), convert it to a string representation
191
+ if (typeof value === 'bigint') {
192
+ return `[BigInt] ${value.toString()}`
193
+ }
194
+ // Functions cannot be serialized by JSON.stringify(). Moreover, if a faulty toJSON is present, it needs to be converted
195
+ // so it won't prevent stringify from serializing later
196
+ if (typeof value === 'function') {
197
+ return `[Function] ${value.name || 'unknown'}`
198
+ }
199
+ // JSON.stringify() does not serialize symbols.
200
+ if (typeof value === 'symbol') {
201
+ // symbol.description is part of ES2019+
202
+ type symbolWithDescription = symbol & { description: string }
203
+ return `[Symbol] ${(value as symbolWithDescription).description || value.toString()}`
204
+ }
205
+
206
+ return value
207
+ }
208
+
209
+ /**
210
+ * Handles sanitization of object types
211
+ *
212
+ * LIMITATIONS
213
+ * - If a class defines a toStringTag Symbol, it will fall in the catch-all method and prevent enumeration of properties.
214
+ * To avoid this, a toJSON method can be defined.
215
+ */
216
+ function sanitizeObjects(value: object): string | SanitizedEvent {
217
+ try {
218
+ if (value instanceof Event) {
219
+ return sanitizeEvent(value)
220
+ }
221
+
222
+ if (value instanceof RegExp) {
223
+ return `[RegExp] ${value.toString()}`
224
+ }
225
+
226
+ // Handle all remaining object types in a generic way
227
+ const result = Object.prototype.toString.call(value)
228
+ const match = result.match(/\[object (.*)\]/)
229
+ if (match && match[1]) {
230
+ return `[${match[1]}]`
231
+ }
232
+ } catch {
233
+ // If the previous serialization attempts failed, and we cannot convert using
234
+ // Object.prototype.toString, declare the value unserializable
235
+ }
236
+ return '[Unserializable]'
237
+ }
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
+
248
+ /**
249
+ * Checks if a toJSON function exists and tries to execute it
250
+ *
251
+ */
252
+ function tryToApplyToJSON(value: ExtendedContextValue) {
253
+ const object = value as ObjectWithToJsonMethod
254
+ if (object && typeof object.toJSON === 'function') {
255
+ try {
256
+ return object.toJSON() as ExtendedContextValue
257
+ } catch {
258
+ // If toJSON fails, we continue by trying to serialize the value manually
259
+ }
260
+ }
261
+
262
+ return value
263
+ }
264
+
265
+ /**
266
+ * Helper function to display the warning when the accumulated character count is over the limit
267
+ */
268
+ function warnOverCharacterLimit(maxCharacterCount: number, changeType: 'discarded' | 'truncated', source: unknown) {
269
+ display.warn(
270
+ `The data provided has been ${changeType} as it is over the limit of ${maxCharacterCount} characters:`,
271
+ source
272
+ )
273
+ }
@@ -0,0 +1,250 @@
1
+ /**
2
+ * Cross-browser stack trace computation.
3
+ *
4
+ * Reference implementation: https://github.com/csnover/TraceKit/blob/04530298073c3823de72deb0b97e7b38ca7bcb59/tracekit.js
5
+ */
6
+
7
+ export interface StackFrame {
8
+ url?: string
9
+ func?: string
10
+ /** The arguments passed to the function, if known. */
11
+ args?: string[]
12
+ line?: number
13
+ column?: number
14
+ /** An array of source code lines; the middle element corresponds to the correct line. */
15
+ context?: string[]
16
+ }
17
+
18
+ export interface StackTrace {
19
+ name?: string
20
+ message?: string
21
+ url?: string
22
+ stack: StackFrame[]
23
+ incomplete?: boolean
24
+ partial?: boolean
25
+ }
26
+
27
+ const UNKNOWN_FUNCTION = '?'
28
+
29
+ export function computeStackTrace(ex: unknown): StackTrace {
30
+ const stack: StackFrame[] = []
31
+
32
+ let stackProperty = tryToGetString(ex, 'stack')
33
+ const exString = String(ex)
34
+ if (stackProperty && stackProperty.startsWith(exString)) {
35
+ stackProperty = stackProperty.slice(exString.length)
36
+ }
37
+ if (stackProperty) {
38
+ stackProperty.split('\n').forEach((line) => {
39
+ const stackFrame =
40
+ parseChromeLine(line) || parseChromeAnonymousLine(line) || parseWinLine(line) || parseGeckoLine(line)
41
+ if (stackFrame) {
42
+ if (!stackFrame.func && stackFrame.line) {
43
+ stackFrame.func = UNKNOWN_FUNCTION
44
+ }
45
+
46
+ stack.push(stackFrame)
47
+ }
48
+ })
49
+ }
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
+
74
+ return {
75
+ message: tryToGetString(ex, 'message'),
76
+ name: tryToGetString(ex, 'name'),
77
+ stack,
78
+ }
79
+ }
80
+ const fileUrl =
81
+ '((?:file|https?|blob|chrome-extension|electron|native|eval|webpack|snippet|<anonymous>|\\w+\\.|\\/).*?)'
82
+ const filePosition = '(?::(\\d+))'
83
+ const CHROME_LINE_RE = new RegExp(`^\\s*at (.*?) ?\\(${fileUrl}${filePosition}?${filePosition}?\\)?\\s*$`, 'i')
84
+
85
+ const CHROME_EVAL_RE = new RegExp(`\\((\\S*)${filePosition}${filePosition}\\)`)
86
+
87
+ function parseChromeLine(line: string): StackFrame | undefined {
88
+ const parts = CHROME_LINE_RE.exec(line)
89
+
90
+ if (!parts) {
91
+ return
92
+ }
93
+
94
+ const isNative = parts[2] && parts[2].indexOf('native') === 0 // start of line
95
+ const isEval = parts[2] && parts[2].indexOf('eval') === 0 // start of line
96
+ const submatch = CHROME_EVAL_RE.exec(parts[2])
97
+
98
+ if (isEval && submatch) {
99
+ // throw out eval line/column and use top-most line/column number
100
+ parts[2] = submatch[1] // url
101
+ parts[3] = submatch[2] // line
102
+ parts[4] = submatch[3] // column
103
+ }
104
+
105
+ return {
106
+ args: isNative ? [parts[2]] : [],
107
+ column: parts[4] ? +parts[4] : undefined,
108
+ func: parts[1] || UNKNOWN_FUNCTION,
109
+ line: parts[3] ? +parts[3] : undefined,
110
+ url: !isNative ? parts[2] : undefined,
111
+ }
112
+ }
113
+
114
+ const CHROME_ANONYMOUS_FUNCTION_RE = new RegExp(`^\\s*at ?${fileUrl}${filePosition}?${filePosition}??\\s*$`, 'i')
115
+
116
+ function parseChromeAnonymousLine(line: string): StackFrame | undefined {
117
+ const parts = CHROME_ANONYMOUS_FUNCTION_RE.exec(line)
118
+
119
+ if (!parts) {
120
+ return
121
+ }
122
+
123
+ return {
124
+ args: [],
125
+ column: parts[3] ? +parts[3] : undefined,
126
+ func: UNKNOWN_FUNCTION,
127
+ line: parts[2] ? +parts[2] : undefined,
128
+ url: parts[1],
129
+ }
130
+ }
131
+
132
+ const WINJS_LINE_RE =
133
+ /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i
134
+
135
+ function parseWinLine(line: string): StackFrame | undefined {
136
+ const parts = WINJS_LINE_RE.exec(line)
137
+ if (!parts) {
138
+ return
139
+ }
140
+
141
+ return {
142
+ args: [],
143
+ column: parts[4] ? +parts[4] : undefined,
144
+ func: parts[1] || UNKNOWN_FUNCTION,
145
+ line: +parts[3],
146
+ url: parts[2],
147
+ }
148
+ }
149
+
150
+ const GECKO_LINE_RE =
151
+ /^\s*(.*?)(?:\((.*?)\))?(?:(?:(?:^|@)((?:file|https?|blob|chrome|webpack|resource|capacitor|\[native).*?|[^@]*bundle|\[wasm code\])(?::(\d+))?(?::(\d+))?)|@)\s*$/i
152
+ const GECKO_EVAL_RE = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i
153
+
154
+ function parseGeckoLine(line: string): StackFrame | undefined {
155
+ const parts = GECKO_LINE_RE.exec(line)
156
+ if (!parts) {
157
+ return
158
+ }
159
+
160
+ const isEval = parts[3] && parts[3].indexOf(' > eval') > -1
161
+ const submatch = GECKO_EVAL_RE.exec(parts[3])
162
+
163
+ if (isEval && submatch) {
164
+ // throw out eval line/column and use top-most line number
165
+ parts[3] = submatch[1]
166
+ parts[4] = submatch[2]
167
+ parts[5] = undefined! // no column when eval
168
+ }
169
+
170
+ return {
171
+ args: parts[2] ? parts[2].split(',') : [],
172
+ column: parts[5] ? +parts[5] : undefined,
173
+ func: parts[1] || UNKNOWN_FUNCTION,
174
+ line: parts[4] ? +parts[4] : undefined,
175
+ url: parts[3],
176
+ }
177
+ }
178
+
179
+ function tryToGetString(candidate: unknown, property: string) {
180
+ if (typeof candidate !== 'object' || !candidate || !(property in candidate)) {
181
+ return undefined
182
+ }
183
+ const value = (candidate as { [k: string]: unknown })[property]
184
+ return typeof value === 'string' ? value : undefined
185
+ }
186
+
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
+ }
196
+ const { name, message } = tryToParseMessage(messageObj)
197
+ return {
198
+ name,
199
+ message,
200
+ stack: [{ url, column, line }],
201
+ }
202
+ }
203
+
204
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types
205
+ const ERROR_TYPES_RE =
206
+ /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?([\s\S]*)$/
207
+
208
+ function tryToParseMessage(messageObj: unknown) {
209
+ let name
210
+ let message
211
+ if ({}.toString.call(messageObj) === '[object String]') {
212
+ ;[, name, message] = ERROR_TYPES_RE.exec(messageObj as string)!
213
+ }
214
+ return { name, message }
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
+ }