@openobserve/browser-core 0.2.11-rc1 → 0.2.12-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (626) hide show
  1. package/package.json +6 -5
  2. package/src/boot/displayAlreadyInitializedError.ts +8 -0
  3. package/src/boot/init.ts +29 -15
  4. package/src/browser/addEventListener.ts +13 -10
  5. package/src/browser/{types.ts → browser.types.ts} +42 -0
  6. package/src/browser/cookie.ts +49 -14
  7. package/src/browser/fetchObservable.ts +80 -21
  8. package/src/browser/{pageExitObservable.ts → pageMayExitObservable.ts} +11 -22
  9. package/src/browser/runOnReadyState.ts +14 -4
  10. package/src/browser/xhrObservable.ts +17 -4
  11. package/src/domain/allowedTrackingOrigins.ts +30 -0
  12. package/src/domain/bufferedData.ts +32 -0
  13. package/src/domain/configuration/configuration.ts +352 -83
  14. package/src/domain/configuration/endpointBuilder.ts +29 -32
  15. package/src/domain/configuration/index.ts +6 -5
  16. package/src/domain/configuration/transportConfiguration.ts +42 -35
  17. package/src/domain/connectivity/connectivity.ts +5 -1
  18. package/src/domain/console/consoleObservable.ts +57 -21
  19. package/src/domain/context/contextConstants.ts +22 -0
  20. package/src/domain/context/contextManager.ts +48 -11
  21. package/src/domain/context/contextUtils.ts +14 -0
  22. package/src/domain/context/defineContextMethod.ts +31 -0
  23. package/src/domain/context/storeContextManager.ts +7 -3
  24. package/src/domain/contexts/accountContext.ts +47 -0
  25. package/src/domain/contexts/globalContext.ts +30 -0
  26. package/src/domain/contexts/rumInternalContext.type.ts +15 -0
  27. package/src/domain/contexts/userContext.ts +64 -0
  28. package/src/domain/deflate/{types.ts → deflate.types.ts} +6 -4
  29. package/src/domain/deflate/index.ts +1 -1
  30. package/src/domain/error/error.ts +28 -84
  31. package/src/domain/error/error.types.ts +10 -2
  32. package/src/domain/error/trackRuntimeError.ts +29 -32
  33. package/src/domain/eventRateLimiter/createEventRateLimiter.ts +5 -2
  34. package/src/domain/extension/extensionUtils.ts +28 -0
  35. package/src/domain/intakeSites.ts +18 -0
  36. package/src/domain/report/reportObservable.ts +35 -30
  37. package/src/domain/resourceUtils.ts +20 -16
  38. package/src/domain/session/README.md +193 -0
  39. package/src/domain/session/oldCookiesMigration.ts +2 -2
  40. package/src/domain/session/sessionConstants.ts +16 -1
  41. package/src/domain/session/sessionManager.ts +179 -15
  42. package/src/domain/session/sessionState.ts +49 -17
  43. package/src/domain/session/sessionStateValidation.ts +9 -0
  44. package/src/domain/session/sessionStore.ts +118 -55
  45. package/src/domain/session/sessionStoreOperations.ts +47 -20
  46. package/src/domain/session/storeStrategies/sessionInCookie.ts +105 -26
  47. package/src/domain/session/storeStrategies/sessionInLocalStorage.ts +10 -8
  48. package/src/domain/session/storeStrategies/sessionStoreStrategy.ts +5 -2
  49. package/src/domain/synthetics/syntheticsWorkerValues.ts +13 -2
  50. package/src/domain/tags.ts +76 -0
  51. package/src/domain/telemetry/index.ts +12 -4
  52. package/src/domain/telemetry/rawTelemetryEvent.types.ts +6 -3
  53. package/src/domain/telemetry/telemetry.ts +235 -106
  54. package/src/domain/telemetry/telemetryEvent.types.ts +514 -5
  55. package/src/domain/trackingConsent.ts +34 -0
  56. package/src/index.ts +90 -59
  57. package/src/tools/abstractHooks.ts +72 -0
  58. package/src/tools/abstractLifeCycle.ts +1 -0
  59. package/src/tools/boundedBuffer.ts +36 -8
  60. package/src/tools/display.ts +4 -0
  61. package/src/tools/encoder.ts +3 -2
  62. package/src/tools/experimentalFeatures.ts +18 -7
  63. package/src/tools/getZoneJsOriginalValue.ts +1 -1
  64. package/src/tools/{getGlobalObject.ts → globalObject.ts} +20 -0
  65. package/src/tools/instrumentMethod.ts +58 -41
  66. package/src/tools/matchOption.ts +1 -2
  67. package/src/tools/monitor.ts +11 -7
  68. package/src/tools/observable.ts +78 -12
  69. package/src/tools/queueMicrotask.ts +13 -0
  70. package/src/tools/readBytesFromStream.ts +24 -64
  71. package/src/tools/requestIdleCallback.ts +40 -0
  72. package/src/tools/sendToExtension.ts +3 -1
  73. package/src/tools/serialisation/context.ts +4 -1
  74. package/src/tools/serialisation/sanitize.ts +32 -14
  75. package/src/{domain/error → tools/stackTrace}/computeStackTrace.ts +72 -8
  76. package/src/tools/stackTrace/handlingStack.ts +48 -0
  77. package/src/tools/taskQueue.ts +63 -0
  78. package/src/tools/timer.ts +1 -1
  79. package/src/tools/utils/arrayUtils.ts +11 -3
  80. package/src/tools/utils/browserDetection.ts +0 -9
  81. package/src/tools/utils/byteUtils.ts +13 -2
  82. package/src/tools/utils/functionUtils.ts +0 -2
  83. package/src/tools/utils/numberUtils.ts +2 -1
  84. package/src/tools/utils/objectUtils.ts +1 -3
  85. package/src/tools/utils/polyfills.ts +6 -107
  86. package/src/tools/utils/responseUtils.ts +1 -1
  87. package/src/tools/utils/stringUtils.ts +34 -2
  88. package/src/tools/utils/timeUtils.ts +18 -13
  89. package/src/tools/utils/timezone.ts +9 -0
  90. package/src/tools/utils/urlPolyfill.ts +29 -59
  91. package/src/tools/valueHistory.ts +66 -35
  92. package/src/transport/batch.ts +77 -80
  93. package/src/transport/eventBridge.ts +24 -5
  94. package/src/transport/flushController.ts +27 -21
  95. package/src/transport/httpRequest.ts +92 -71
  96. package/src/transport/index.ts +7 -4
  97. package/src/transport/sendWithRetryStrategy.ts +55 -36
  98. package/cjs/boot/init.d.ts +0 -5
  99. package/cjs/boot/init.js +0 -36
  100. package/cjs/boot/init.js.map +0 -1
  101. package/cjs/browser/addEventListener.d.ts +0 -84
  102. package/cjs/browser/addEventListener.js +0 -94
  103. package/cjs/browser/addEventListener.js.map +0 -1
  104. package/cjs/browser/cookie.d.ts +0 -17
  105. package/cjs/browser/cookie.js +0 -86
  106. package/cjs/browser/cookie.js.map +0 -1
  107. package/cjs/browser/fetchObservable.d.ts +0 -23
  108. package/cjs/browser/fetchObservable.js +0 -69
  109. package/cjs/browser/fetchObservable.js.map +0 -1
  110. package/cjs/browser/pageExitObservable.d.ts +0 -14
  111. package/cjs/browser/pageExitObservable.js +0 -57
  112. package/cjs/browser/pageExitObservable.js.map +0 -1
  113. package/cjs/browser/runOnReadyState.d.ts +0 -2
  114. package/cjs/browser/runOnReadyState.js +0 -15
  115. package/cjs/browser/runOnReadyState.js.map +0 -1
  116. package/cjs/browser/types.d.ts +0 -19
  117. package/cjs/browser/types.js +0 -6
  118. package/cjs/browser/types.js.map +0 -1
  119. package/cjs/browser/xhrObservable.d.ts +0 -21
  120. package/cjs/browser/xhrObservable.js +0 -85
  121. package/cjs/browser/xhrObservable.js.map +0 -1
  122. package/cjs/domain/configuration/configuration.d.ts +0 -72
  123. package/cjs/domain/configuration/configuration.js +0 -94
  124. package/cjs/domain/configuration/configuration.js.map +0 -1
  125. package/cjs/domain/configuration/endpointBuilder.d.ts +0 -10
  126. package/cjs/domain/configuration/endpointBuilder.js +0 -84
  127. package/cjs/domain/configuration/endpointBuilder.js.map +0 -1
  128. package/cjs/domain/configuration/index.d.ts +0 -4
  129. package/cjs/domain/configuration/index.js +0 -27
  130. package/cjs/domain/configuration/index.js.map +0 -1
  131. package/cjs/domain/configuration/intakeSites.d.ts +0 -5
  132. package/cjs/domain/configuration/intakeSites.js +0 -9
  133. package/cjs/domain/configuration/intakeSites.js.map +0 -1
  134. package/cjs/domain/configuration/tags.d.ts +0 -4
  135. package/cjs/domain/configuration/tags.js +0 -39
  136. package/cjs/domain/configuration/tags.js.map +0 -1
  137. package/cjs/domain/configuration/transportConfiguration.d.ts +0 -16
  138. package/cjs/domain/configuration/transportConfiguration.js +0 -42
  139. package/cjs/domain/configuration/transportConfiguration.js.map +0 -1
  140. package/cjs/domain/connectivity/connectivity.d.ts +0 -13
  141. package/cjs/domain/connectivity/connectivity.js +0 -14
  142. package/cjs/domain/connectivity/connectivity.js.map +0 -1
  143. package/cjs/domain/connectivity/index.d.ts +0 -1
  144. package/cjs/domain/connectivity/index.js +0 -18
  145. package/cjs/domain/connectivity/index.js.map +0 -1
  146. package/cjs/domain/console/consoleObservable.d.ts +0 -11
  147. package/cjs/domain/console/consoleObservable.js +0 -72
  148. package/cjs/domain/console/consoleObservable.js.map +0 -1
  149. package/cjs/domain/context/contextConstants.d.ts +0 -5
  150. package/cjs/domain/context/contextConstants.js +0 -3
  151. package/cjs/domain/context/contextConstants.js.map +0 -1
  152. package/cjs/domain/context/contextManager.d.ts +0 -12
  153. package/cjs/domain/context/contextManager.js +0 -43
  154. package/cjs/domain/context/contextManager.js.map +0 -1
  155. package/cjs/domain/context/customerDataTracker.d.ts +0 -45
  156. package/cjs/domain/context/customerDataTracker.js +0 -107
  157. package/cjs/domain/context/customerDataTracker.js.map +0 -1
  158. package/cjs/domain/context/storeContextManager.d.ts +0 -6
  159. package/cjs/domain/context/storeContextManager.js +0 -38
  160. package/cjs/domain/context/storeContextManager.js.map +0 -1
  161. package/cjs/domain/deflate/types.d.ts +0 -0
  162. package/cjs/domain/deflate/types.js +0 -3
  163. package/cjs/domain/deflate/types.js.map +0 -1
  164. package/cjs/domain/error/computeStackTrace.d.ts +0 -33
  165. package/cjs/domain/error/computeStackTrace.js +0 -142
  166. package/cjs/domain/error/computeStackTrace.js.map +0 -1
  167. package/cjs/domain/error/error.d.ts +0 -28
  168. package/cjs/domain/error/error.js +0 -131
  169. package/cjs/domain/error/error.js.map +0 -1
  170. package/cjs/domain/error/error.types.d.ts +0 -40
  171. package/cjs/domain/error/error.types.js +0 -13
  172. package/cjs/domain/error/error.types.js.map +0 -1
  173. package/cjs/domain/error/trackRuntimeError.d.ts +0 -13
  174. package/cjs/domain/error/trackRuntimeError.js +0 -54
  175. package/cjs/domain/error/trackRuntimeError.js.map +0 -1
  176. package/cjs/domain/eventRateLimiter/createEventRateLimiter.d.ts +0 -5
  177. package/cjs/domain/eventRateLimiter/createEventRateLimiter.js +0 -40
  178. package/cjs/domain/eventRateLimiter/createEventRateLimiter.js.map +0 -1
  179. package/cjs/domain/report/browser.types.d.ts +0 -34
  180. package/cjs/domain/report/browser.types.js +0 -3
  181. package/cjs/domain/report/browser.types.js.map +0 -1
  182. package/cjs/domain/report/reportObservable.d.ts +0 -17
  183. package/cjs/domain/report/reportObservable.js +0 -94
  184. package/cjs/domain/report/reportObservable.js.map +0 -1
  185. package/cjs/domain/resourceUtils.d.ts +0 -16
  186. package/cjs/domain/resourceUtils.js +0 -3
  187. package/cjs/domain/resourceUtils.js.map +0 -1
  188. package/cjs/domain/session/oldCookiesMigration.d.ts +0 -11
  189. package/cjs/domain/session/oldCookiesMigration.js +0 -40
  190. package/cjs/domain/session/oldCookiesMigration.js.map +0 -1
  191. package/cjs/domain/session/sessionConstants.d.ts +0 -2
  192. package/cjs/domain/session/sessionConstants.js +0 -7
  193. package/cjs/domain/session/sessionConstants.js.map +0 -1
  194. package/cjs/domain/session/sessionManager.d.ts +0 -20
  195. package/cjs/domain/session/sessionManager.js +0 -65
  196. package/cjs/domain/session/sessionManager.js.map +0 -1
  197. package/cjs/domain/session/sessionState.d.ts +0 -11
  198. package/cjs/domain/session/sessionState.js +0 -45
  199. package/cjs/domain/session/sessionState.js.map +0 -1
  200. package/cjs/domain/session/sessionStore.d.ts +0 -34
  201. package/cjs/domain/session/sessionStore.js +0 -144
  202. package/cjs/domain/session/sessionStore.js.map +0 -1
  203. package/cjs/domain/session/sessionStoreOperations.d.ts +0 -10
  204. package/cjs/domain/session/sessionStoreOperations.js +0 -96
  205. package/cjs/domain/session/sessionStoreOperations.js.map +0 -1
  206. package/cjs/domain/session/storeStrategies/sessionInCookie.d.ts +0 -6
  207. package/cjs/domain/session/storeStrategies/sessionInCookie.js +0 -59
  208. package/cjs/domain/session/storeStrategies/sessionInCookie.js.map +0 -1
  209. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.d.ts +0 -3
  210. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js +0 -41
  211. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js.map +0 -1
  212. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.d.ts +0 -15
  213. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js +0 -5
  214. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js.map +0 -1
  215. package/cjs/domain/synthetics/syntheticsWorkerValues.d.ts +0 -11
  216. package/cjs/domain/synthetics/syntheticsWorkerValues.js +0 -22
  217. package/cjs/domain/synthetics/syntheticsWorkerValues.js.map +0 -1
  218. package/cjs/domain/telemetry/index.d.ts +0 -3
  219. package/cjs/domain/telemetry/index.js +0 -28
  220. package/cjs/domain/telemetry/index.js.map +0 -1
  221. package/cjs/domain/telemetry/rawTelemetryEvent.types.d.ts +0 -15
  222. package/cjs/domain/telemetry/rawTelemetryEvent.types.js +0 -8
  223. package/cjs/domain/telemetry/rawTelemetryEvent.types.js.map +0 -1
  224. package/cjs/domain/telemetry/telemetry.d.ts +0 -116
  225. package/cjs/domain/telemetry/telemetry.js +0 -157
  226. package/cjs/domain/telemetry/telemetry.js.map +0 -1
  227. package/cjs/domain/telemetry/telemetryEvent.types.d.ts +0 -391
  228. package/cjs/domain/telemetry/telemetryEvent.types.js +0 -7
  229. package/cjs/domain/telemetry/telemetryEvent.types.js.map +0 -1
  230. package/cjs/domain/user/index.d.ts +0 -2
  231. package/cjs/domain/user/index.js +0 -19
  232. package/cjs/domain/user/index.js.map +0 -1
  233. package/cjs/domain/user/user.d.ts +0 -12
  234. package/cjs/domain/user/user.js +0 -35
  235. package/cjs/domain/user/user.js.map +0 -1
  236. package/cjs/domain/user/user.types.d.ts +0 -6
  237. package/cjs/domain/user/user.types.js +0 -3
  238. package/cjs/domain/user/user.types.js.map +0 -1
  239. package/cjs/tools/abstractLifeCycle.d.ts +0 -23
  240. package/cjs/tools/abstractLifeCycle.js +0 -29
  241. package/cjs/tools/abstractLifeCycle.js.map +0 -1
  242. package/cjs/tools/boundedBuffer.d.ts +0 -5
  243. package/cjs/tools/boundedBuffer.js +0 -22
  244. package/cjs/tools/boundedBuffer.js.map +0 -1
  245. package/cjs/tools/catchUserErrors.d.ts +0 -1
  246. package/cjs/tools/catchUserErrors.js +0 -20
  247. package/cjs/tools/catchUserErrors.js.map +0 -1
  248. package/cjs/tools/display.d.ts +0 -35
  249. package/cjs/tools/display.js +0 -41
  250. package/cjs/tools/display.js.map +0 -1
  251. package/cjs/tools/encoder.d.ts +0 -53
  252. package/cjs/tools/encoder.js +0 -41
  253. package/cjs/tools/encoder.js.map +0 -1
  254. package/cjs/tools/experimentalFeatures.d.ts +0 -22
  255. package/cjs/tools/experimentalFeatures.js +0 -45
  256. package/cjs/tools/experimentalFeatures.js.map +0 -1
  257. package/cjs/tools/getGlobalObject.d.ts +0 -4
  258. package/cjs/tools/getGlobalObject.js +0 -37
  259. package/cjs/tools/getGlobalObject.js.map +0 -1
  260. package/cjs/tools/getZoneJsOriginalValue.d.ts +0 -19
  261. package/cjs/tools/getZoneJsOriginalValue.js +0 -30
  262. package/cjs/tools/getZoneJsOriginalValue.js.map +0 -1
  263. package/cjs/tools/instrumentMethod.d.ts +0 -59
  264. package/cjs/tools/instrumentMethod.js +0 -106
  265. package/cjs/tools/instrumentMethod.js.map +0 -1
  266. package/cjs/tools/matchOption.d.ts +0 -8
  267. package/cjs/tools/matchOption.js +0 -38
  268. package/cjs/tools/matchOption.js.map +0 -1
  269. package/cjs/tools/mergeInto.d.ts +0 -25
  270. package/cjs/tools/mergeInto.js +0 -105
  271. package/cjs/tools/mergeInto.js.map +0 -1
  272. package/cjs/tools/monitor.d.ts +0 -8
  273. package/cjs/tools/monitor.js +0 -76
  274. package/cjs/tools/monitor.js.map +0 -1
  275. package/cjs/tools/observable.d.ts +0 -12
  276. package/cjs/tools/observable.js +0 -43
  277. package/cjs/tools/observable.js.map +0 -1
  278. package/cjs/tools/readBytesFromStream.d.ts +0 -11
  279. package/cjs/tools/readBytesFromStream.js +0 -64
  280. package/cjs/tools/readBytesFromStream.js.map +0 -1
  281. package/cjs/tools/sendToExtension.d.ts +0 -3
  282. package/cjs/tools/sendToExtension.js +0 -11
  283. package/cjs/tools/sendToExtension.js.map +0 -1
  284. package/cjs/tools/serialisation/context.d.ts +0 -6
  285. package/cjs/tools/serialisation/context.js +0 -3
  286. package/cjs/tools/serialisation/context.js.map +0 -1
  287. package/cjs/tools/serialisation/jsonStringify.d.ts +0 -13
  288. package/cjs/tools/serialisation/jsonStringify.js +0 -49
  289. package/cjs/tools/serialisation/jsonStringify.js.map +0 -1
  290. package/cjs/tools/serialisation/sanitize.d.ts +0 -18
  291. package/cjs/tools/serialisation/sanitize.js +0 -185
  292. package/cjs/tools/serialisation/sanitize.js.map +0 -1
  293. package/cjs/tools/timer.d.ts +0 -5
  294. package/cjs/tools/timer.js +0 -23
  295. package/cjs/tools/timer.js.map +0 -1
  296. package/cjs/tools/utils/arrayUtils.d.ts +0 -1
  297. package/cjs/tools/utils/arrayUtils.js +0 -11
  298. package/cjs/tools/utils/arrayUtils.js.map +0 -1
  299. package/cjs/tools/utils/browserDetection.d.ts +0 -10
  300. package/cjs/tools/utils/browserDetection.js +0 -42
  301. package/cjs/tools/utils/browserDetection.js.map +0 -1
  302. package/cjs/tools/utils/byteUtils.d.ts +0 -4
  303. package/cjs/tools/utils/byteUtils.js +0 -31
  304. package/cjs/tools/utils/byteUtils.js.map +0 -1
  305. package/cjs/tools/utils/functionUtils.d.ts +0 -9
  306. package/cjs/tools/utils/functionUtils.js +0 -48
  307. package/cjs/tools/utils/functionUtils.js.map +0 -1
  308. package/cjs/tools/utils/numberUtils.d.ts +0 -8
  309. package/cjs/tools/utils/numberUtils.js +0 -24
  310. package/cjs/tools/utils/numberUtils.js.map +0 -1
  311. package/cjs/tools/utils/objectUtils.d.ts +0 -10
  312. package/cjs/tools/utils/objectUtils.js +0 -26
  313. package/cjs/tools/utils/objectUtils.js.map +0 -1
  314. package/cjs/tools/utils/polyfills.d.ts +0 -24
  315. package/cjs/tools/utils/polyfills.js +0 -110
  316. package/cjs/tools/utils/polyfills.js.map +0 -1
  317. package/cjs/tools/utils/responseUtils.d.ts +0 -2
  318. package/cjs/tools/utils/responseUtils.js +0 -18
  319. package/cjs/tools/utils/responseUtils.js.map +0 -1
  320. package/cjs/tools/utils/stringUtils.d.ts +0 -8
  321. package/cjs/tools/utils/stringUtils.js +0 -59
  322. package/cjs/tools/utils/stringUtils.js.map +0 -1
  323. package/cjs/tools/utils/timeUtils.d.ts +0 -57
  324. package/cjs/tools/utils/timeUtils.js +0 -99
  325. package/cjs/tools/utils/timeUtils.js.map +0 -1
  326. package/cjs/tools/utils/typeUtils.d.ts +0 -4
  327. package/cjs/tools/utils/typeUtils.js +0 -17
  328. package/cjs/tools/utils/typeUtils.js.map +0 -1
  329. package/cjs/tools/utils/urlPolyfill.d.ts +0 -14
  330. package/cjs/tools/utils/urlPolyfill.js +0 -92
  331. package/cjs/tools/utils/urlPolyfill.js.map +0 -1
  332. package/cjs/tools/valueHistory.d.ts +0 -50
  333. package/cjs/tools/valueHistory.js +0 -106
  334. package/cjs/tools/valueHistory.js.map +0 -1
  335. package/cjs/transport/batch.d.ts +0 -21
  336. package/cjs/transport/batch.js +0 -123
  337. package/cjs/transport/batch.js.map +0 -1
  338. package/cjs/transport/eventBridge.d.ts +0 -12
  339. package/cjs/transport/eventBridge.js +0 -34
  340. package/cjs/transport/eventBridge.js.map +0 -1
  341. package/cjs/transport/flushController.d.ts +0 -58
  342. package/cjs/transport/flushController.js +0 -112
  343. package/cjs/transport/flushController.js.map +0 -1
  344. package/cjs/transport/httpRequest.d.ts +0 -38
  345. package/cjs/transport/httpRequest.js +0 -95
  346. package/cjs/transport/httpRequest.js.map +0 -1
  347. package/cjs/transport/index.d.ts +0 -4
  348. package/cjs/transport/index.js +0 -13
  349. package/cjs/transport/index.js.map +0 -1
  350. package/cjs/transport/sendWithRetryStrategy.d.ts +0 -39
  351. package/cjs/transport/sendWithRetryStrategy.js +0 -151
  352. package/cjs/transport/sendWithRetryStrategy.js.map +0 -1
  353. package/cjs/transport/startBatchWithReplica.d.ts +0 -20
  354. package/cjs/transport/startBatchWithReplica.js +0 -42
  355. package/cjs/transport/startBatchWithReplica.js.map +0 -1
  356. package/esm/boot/init.d.ts +0 -5
  357. package/esm/boot/init.js +0 -31
  358. package/esm/boot/init.js.map +0 -1
  359. package/esm/browser/addEventListener.d.ts +0 -84
  360. package/esm/browser/addEventListener.js +0 -89
  361. package/esm/browser/addEventListener.js.map +0 -1
  362. package/esm/browser/cookie.d.ts +0 -17
  363. package/esm/browser/cookie.js +0 -76
  364. package/esm/browser/cookie.js.map +0 -1
  365. package/esm/browser/fetchObservable.d.ts +0 -23
  366. package/esm/browser/fetchObservable.js +0 -65
  367. package/esm/browser/fetchObservable.js.map +0 -1
  368. package/esm/browser/pageExitObservable.d.ts +0 -14
  369. package/esm/browser/pageExitObservable.js +0 -52
  370. package/esm/browser/pageExitObservable.js.map +0 -1
  371. package/esm/browser/runOnReadyState.d.ts +0 -2
  372. package/esm/browser/runOnReadyState.js +0 -11
  373. package/esm/browser/runOnReadyState.js.map +0 -1
  374. package/esm/browser/types.d.ts +0 -19
  375. package/esm/browser/types.js +0 -5
  376. package/esm/browser/types.js.map +0 -1
  377. package/esm/browser/xhrObservable.d.ts +0 -21
  378. package/esm/browser/xhrObservable.js +0 -81
  379. package/esm/browser/xhrObservable.js.map +0 -1
  380. package/esm/domain/configuration/configuration.d.ts +0 -72
  381. package/esm/domain/configuration/configuration.js +0 -89
  382. package/esm/domain/configuration/configuration.js.map +0 -1
  383. package/esm/domain/configuration/endpointBuilder.d.ts +0 -10
  384. package/esm/domain/configuration/endpointBuilder.js +0 -80
  385. package/esm/domain/configuration/endpointBuilder.js.map +0 -1
  386. package/esm/domain/configuration/index.d.ts +0 -4
  387. package/esm/domain/configuration/index.js +0 -5
  388. package/esm/domain/configuration/index.js.map +0 -1
  389. package/esm/domain/configuration/intakeSites.d.ts +0 -5
  390. package/esm/domain/configuration/intakeSites.js +0 -6
  391. package/esm/domain/configuration/intakeSites.js.map +0 -1
  392. package/esm/domain/configuration/tags.d.ts +0 -4
  393. package/esm/domain/configuration/tags.js +0 -34
  394. package/esm/domain/configuration/tags.js.map +0 -1
  395. package/esm/domain/configuration/transportConfiguration.d.ts +0 -16
  396. package/esm/domain/configuration/transportConfiguration.js +0 -38
  397. package/esm/domain/configuration/transportConfiguration.js.map +0 -1
  398. package/esm/domain/connectivity/connectivity.d.ts +0 -13
  399. package/esm/domain/connectivity/connectivity.js +0 -10
  400. package/esm/domain/connectivity/connectivity.js.map +0 -1
  401. package/esm/domain/connectivity/index.d.ts +0 -1
  402. package/esm/domain/connectivity/index.js +0 -2
  403. package/esm/domain/connectivity/index.js.map +0 -1
  404. package/esm/domain/console/consoleObservable.d.ts +0 -11
  405. package/esm/domain/console/consoleObservable.js +0 -67
  406. package/esm/domain/console/consoleObservable.js.map +0 -1
  407. package/esm/domain/context/contextConstants.d.ts +0 -5
  408. package/esm/domain/context/contextConstants.js +0 -2
  409. package/esm/domain/context/contextConstants.js.map +0 -1
  410. package/esm/domain/context/contextManager.d.ts +0 -12
  411. package/esm/domain/context/contextManager.js +0 -39
  412. package/esm/domain/context/contextManager.js.map +0 -1
  413. package/esm/domain/context/customerDataTracker.d.ts +0 -45
  414. package/esm/domain/context/customerDataTracker.js +0 -102
  415. package/esm/domain/context/customerDataTracker.js.map +0 -1
  416. package/esm/domain/context/storeContextManager.d.ts +0 -6
  417. package/esm/domain/context/storeContextManager.js +0 -32
  418. package/esm/domain/context/storeContextManager.js.map +0 -1
  419. package/esm/domain/deflate/index.d.ts +0 -1
  420. package/esm/domain/deflate/index.js +0 -2
  421. package/esm/domain/deflate/index.js.map +0 -1
  422. package/esm/domain/deflate/types.d.ts +0 -38
  423. package/esm/domain/deflate/types.js +0 -2
  424. package/esm/domain/deflate/types.js.map +0 -1
  425. package/esm/domain/error/computeStackTrace.d.ts +0 -33
  426. package/esm/domain/error/computeStackTrace.js +0 -137
  427. package/esm/domain/error/computeStackTrace.js.map +0 -1
  428. package/esm/domain/error/error.d.ts +0 -28
  429. package/esm/domain/error/error.js +0 -121
  430. package/esm/domain/error/error.js.map +0 -1
  431. package/esm/domain/error/error.types.d.ts +0 -40
  432. package/esm/domain/error/error.types.js +0 -10
  433. package/esm/domain/error/error.types.js.map +0 -1
  434. package/esm/domain/error/trackRuntimeError.d.ts +0 -13
  435. package/esm/domain/error/trackRuntimeError.js +0 -48
  436. package/esm/domain/error/trackRuntimeError.js.map +0 -1
  437. package/esm/domain/eventRateLimiter/createEventRateLimiter.d.ts +0 -5
  438. package/esm/domain/eventRateLimiter/createEventRateLimiter.js +0 -36
  439. package/esm/domain/eventRateLimiter/createEventRateLimiter.js.map +0 -1
  440. package/esm/domain/report/browser.types.d.ts +0 -34
  441. package/esm/domain/report/browser.types.js +0 -2
  442. package/esm/domain/report/browser.types.js.map +0 -1
  443. package/esm/domain/report/reportObservable.d.ts +0 -17
  444. package/esm/domain/report/reportObservable.js +0 -90
  445. package/esm/domain/report/reportObservable.js.map +0 -1
  446. package/esm/domain/resourceUtils.d.ts +0 -16
  447. package/esm/domain/resourceUtils.js +0 -2
  448. package/esm/domain/resourceUtils.js.map +0 -1
  449. package/esm/domain/session/oldCookiesMigration.d.ts +0 -11
  450. package/esm/domain/session/oldCookiesMigration.js +0 -36
  451. package/esm/domain/session/oldCookiesMigration.js.map +0 -1
  452. package/esm/domain/session/sessionConstants.d.ts +0 -2
  453. package/esm/domain/session/sessionConstants.js +0 -4
  454. package/esm/domain/session/sessionConstants.js.map +0 -1
  455. package/esm/domain/session/sessionManager.d.ts +0 -20
  456. package/esm/domain/session/sessionManager.js +0 -60
  457. package/esm/domain/session/sessionManager.js.map +0 -1
  458. package/esm/domain/session/sessionState.d.ts +0 -11
  459. package/esm/domain/session/sessionState.js +0 -38
  460. package/esm/domain/session/sessionState.js.map +0 -1
  461. package/esm/domain/session/sessionStore.d.ts +0 -34
  462. package/esm/domain/session/sessionStore.js +0 -139
  463. package/esm/domain/session/sessionStore.js.map +0 -1
  464. package/esm/domain/session/sessionStoreOperations.d.ts +0 -10
  465. package/esm/domain/session/sessionStoreOperations.js +0 -92
  466. package/esm/domain/session/sessionStoreOperations.js.map +0 -1
  467. package/esm/domain/session/storeStrategies/sessionInCookie.d.ts +0 -6
  468. package/esm/domain/session/storeStrategies/sessionInCookie.js +0 -53
  469. package/esm/domain/session/storeStrategies/sessionInCookie.js.map +0 -1
  470. package/esm/domain/session/storeStrategies/sessionInLocalStorage.d.ts +0 -3
  471. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js +0 -36
  472. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js.map +0 -1
  473. package/esm/domain/session/storeStrategies/sessionStoreStrategy.d.ts +0 -15
  474. package/esm/domain/session/storeStrategies/sessionStoreStrategy.js +0 -2
  475. package/esm/domain/session/storeStrategies/sessionStoreStrategy.js.map +0 -1
  476. package/esm/domain/synthetics/syntheticsWorkerValues.d.ts +0 -11
  477. package/esm/domain/synthetics/syntheticsWorkerValues.js +0 -16
  478. package/esm/domain/synthetics/syntheticsWorkerValues.js.map +0 -1
  479. package/esm/domain/telemetry/index.d.ts +0 -3
  480. package/esm/domain/telemetry/index.js +0 -4
  481. package/esm/domain/telemetry/index.js.map +0 -1
  482. package/esm/domain/telemetry/rawTelemetryEvent.types.d.ts +0 -15
  483. package/esm/domain/telemetry/rawTelemetryEvent.types.js +0 -5
  484. package/esm/domain/telemetry/rawTelemetryEvent.types.js.map +0 -1
  485. package/esm/domain/telemetry/telemetry.d.ts +0 -116
  486. package/esm/domain/telemetry/telemetry.js +0 -145
  487. package/esm/domain/telemetry/telemetry.js.map +0 -1
  488. package/esm/domain/telemetry/telemetryEvent.types.d.ts +0 -391
  489. package/esm/domain/telemetry/telemetryEvent.types.js +0 -6
  490. package/esm/domain/telemetry/telemetryEvent.types.js.map +0 -1
  491. package/esm/domain/user/index.d.ts +0 -2
  492. package/esm/domain/user/index.js +0 -3
  493. package/esm/domain/user/index.js.map +0 -1
  494. package/esm/domain/user/user.d.ts +0 -12
  495. package/esm/domain/user/user.js +0 -30
  496. package/esm/domain/user/user.js.map +0 -1
  497. package/esm/domain/user/user.types.d.ts +0 -6
  498. package/esm/domain/user/user.types.js +0 -2
  499. package/esm/domain/user/user.types.js.map +0 -1
  500. package/esm/index.d.ts +0 -67
  501. package/esm/index.js +0 -64
  502. package/esm/index.js.map +0 -1
  503. package/esm/tools/abstractLifeCycle.d.ts +0 -23
  504. package/esm/tools/abstractLifeCycle.js +0 -26
  505. package/esm/tools/abstractLifeCycle.js.map +0 -1
  506. package/esm/tools/boundedBuffer.d.ts +0 -5
  507. package/esm/tools/boundedBuffer.js +0 -19
  508. package/esm/tools/boundedBuffer.js.map +0 -1
  509. package/esm/tools/catchUserErrors.d.ts +0 -1
  510. package/esm/tools/catchUserErrors.js +0 -16
  511. package/esm/tools/catchUserErrors.js.map +0 -1
  512. package/esm/tools/display.d.ts +0 -35
  513. package/esm/tools/display.js +0 -38
  514. package/esm/tools/display.js.map +0 -1
  515. package/esm/tools/encoder.d.ts +0 -53
  516. package/esm/tools/encoder.js +0 -37
  517. package/esm/tools/encoder.js.map +0 -1
  518. package/esm/tools/experimentalFeatures.d.ts +0 -22
  519. package/esm/tools/experimentalFeatures.js +0 -38
  520. package/esm/tools/experimentalFeatures.js.map +0 -1
  521. package/esm/tools/getGlobalObject.d.ts +0 -4
  522. package/esm/tools/getGlobalObject.js +0 -33
  523. package/esm/tools/getGlobalObject.js.map +0 -1
  524. package/esm/tools/getZoneJsOriginalValue.d.ts +0 -19
  525. package/esm/tools/getZoneJsOriginalValue.js +0 -26
  526. package/esm/tools/getZoneJsOriginalValue.js.map +0 -1
  527. package/esm/tools/instrumentMethod.d.ts +0 -59
  528. package/esm/tools/instrumentMethod.js +0 -101
  529. package/esm/tools/instrumentMethod.js.map +0 -1
  530. package/esm/tools/matchOption.d.ts +0 -8
  531. package/esm/tools/matchOption.js +0 -33
  532. package/esm/tools/matchOption.js.map +0 -1
  533. package/esm/tools/mergeInto.d.ts +0 -25
  534. package/esm/tools/mergeInto.js +0 -99
  535. package/esm/tools/mergeInto.js.map +0 -1
  536. package/esm/tools/monitor.d.ts +0 -8
  537. package/esm/tools/monitor.js +0 -66
  538. package/esm/tools/monitor.js.map +0 -1
  539. package/esm/tools/observable.d.ts +0 -12
  540. package/esm/tools/observable.js +0 -39
  541. package/esm/tools/observable.js.map +0 -1
  542. package/esm/tools/readBytesFromStream.d.ts +0 -11
  543. package/esm/tools/readBytesFromStream.js +0 -60
  544. package/esm/tools/readBytesFromStream.js.map +0 -1
  545. package/esm/tools/sendToExtension.d.ts +0 -3
  546. package/esm/tools/sendToExtension.js +0 -7
  547. package/esm/tools/sendToExtension.js.map +0 -1
  548. package/esm/tools/serialisation/context.d.ts +0 -6
  549. package/esm/tools/serialisation/context.js +0 -2
  550. package/esm/tools/serialisation/context.js.map +0 -1
  551. package/esm/tools/serialisation/jsonStringify.d.ts +0 -13
  552. package/esm/tools/serialisation/jsonStringify.js +0 -44
  553. package/esm/tools/serialisation/jsonStringify.js.map +0 -1
  554. package/esm/tools/serialisation/sanitize.d.ts +0 -18
  555. package/esm/tools/serialisation/sanitize.js +0 -181
  556. package/esm/tools/serialisation/sanitize.js.map +0 -1
  557. package/esm/tools/timer.d.ts +0 -5
  558. package/esm/tools/timer.js +0 -16
  559. package/esm/tools/timer.js.map +0 -1
  560. package/esm/tools/utils/arrayUtils.d.ts +0 -1
  561. package/esm/tools/utils/arrayUtils.js +0 -7
  562. package/esm/tools/utils/arrayUtils.js.map +0 -1
  563. package/esm/tools/utils/browserDetection.d.ts +0 -10
  564. package/esm/tools/utils/browserDetection.js +0 -35
  565. package/esm/tools/utils/browserDetection.js.map +0 -1
  566. package/esm/tools/utils/byteUtils.d.ts +0 -4
  567. package/esm/tools/utils/byteUtils.js +0 -26
  568. package/esm/tools/utils/byteUtils.js.map +0 -1
  569. package/esm/tools/utils/functionUtils.d.ts +0 -9
  570. package/esm/tools/utils/functionUtils.js +0 -43
  571. package/esm/tools/utils/functionUtils.js.map +0 -1
  572. package/esm/tools/utils/numberUtils.d.ts +0 -8
  573. package/esm/tools/utils/numberUtils.js +0 -17
  574. package/esm/tools/utils/numberUtils.js.map +0 -1
  575. package/esm/tools/utils/objectUtils.d.ts +0 -10
  576. package/esm/tools/utils/objectUtils.js +0 -19
  577. package/esm/tools/utils/objectUtils.js.map +0 -1
  578. package/esm/tools/utils/polyfills.d.ts +0 -24
  579. package/esm/tools/utils/polyfills.js +0 -95
  580. package/esm/tools/utils/polyfills.js.map +0 -1
  581. package/esm/tools/utils/responseUtils.d.ts +0 -2
  582. package/esm/tools/utils/responseUtils.js +0 -13
  583. package/esm/tools/utils/responseUtils.js.map +0 -1
  584. package/esm/tools/utils/stringUtils.d.ts +0 -8
  585. package/esm/tools/utils/stringUtils.js +0 -52
  586. package/esm/tools/utils/stringUtils.js.map +0 -1
  587. package/esm/tools/utils/timeUtils.d.ts +0 -57
  588. package/esm/tools/utils/timeUtils.js +0 -82
  589. package/esm/tools/utils/timeUtils.js.map +0 -1
  590. package/esm/tools/utils/typeUtils.d.ts +0 -4
  591. package/esm/tools/utils/typeUtils.js +0 -13
  592. package/esm/tools/utils/typeUtils.js.map +0 -1
  593. package/esm/tools/utils/urlPolyfill.d.ts +0 -14
  594. package/esm/tools/utils/urlPolyfill.js +0 -80
  595. package/esm/tools/utils/urlPolyfill.js.map +0 -1
  596. package/esm/tools/valueHistory.d.ts +0 -50
  597. package/esm/tools/valueHistory.js +0 -103
  598. package/esm/tools/valueHistory.js.map +0 -1
  599. package/esm/transport/batch.d.ts +0 -21
  600. package/esm/transport/batch.js +0 -120
  601. package/esm/transport/batch.js.map +0 -1
  602. package/esm/transport/eventBridge.d.ts +0 -12
  603. package/esm/transport/eventBridge.js +0 -29
  604. package/esm/transport/eventBridge.js.map +0 -1
  605. package/esm/transport/flushController.d.ts +0 -58
  606. package/esm/transport/flushController.js +0 -108
  607. package/esm/transport/flushController.js.map +0 -1
  608. package/esm/transport/httpRequest.d.ts +0 -38
  609. package/esm/transport/httpRequest.js +0 -89
  610. package/esm/transport/httpRequest.js.map +0 -1
  611. package/esm/transport/index.d.ts +0 -4
  612. package/esm/transport/index.js +0 -5
  613. package/esm/transport/index.js.map +0 -1
  614. package/esm/transport/sendWithRetryStrategy.d.ts +0 -39
  615. package/esm/transport/sendWithRetryStrategy.js +0 -146
  616. package/esm/transport/sendWithRetryStrategy.js.map +0 -1
  617. package/esm/transport/startBatchWithReplica.d.ts +0 -20
  618. package/esm/transport/startBatchWithReplica.js +0 -38
  619. package/esm/transport/startBatchWithReplica.js.map +0 -1
  620. package/src/domain/configuration/intakeSites.ts +0 -5
  621. package/src/domain/configuration/tags.ts +0 -43
  622. package/src/domain/context/customerDataTracker.ts +0 -134
  623. package/src/domain/user/index.ts +0 -2
  624. package/src/domain/user/user.ts +0 -33
  625. package/src/domain/user/user.types.ts +0 -6
  626. package/src/transport/startBatchWithReplica.ts +0 -68
package/package.json CHANGED
@@ -1,22 +1,23 @@
1
1
  {
2
2
  "name": "@openobserve/browser-core",
3
- "version": "0.2.11-rc1",
3
+ "version": "0.2.12-beta.1",
4
4
  "license": "Apache-2.0",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
7
7
  "types": "cjs/index.d.ts",
8
8
  "sideEffects": false,
9
9
  "scripts": {
10
- "build": "run-p build:cjs build:esm",
11
- "build:cjs": "rm -rf cjs && tsc -p tsconfig.cjs.json && yarn replace-build-env cjs",
12
- "build:esm": "rm -rf esm && tsc -p tsconfig.esm.json && yarn replace-build-env esm",
13
- "replace-build-env": "node ../../scripts/build/replace-build-env.js"
10
+ "build": "node ../../scripts/build/build-package.ts --modules"
14
11
  },
15
12
  "repository": {
16
13
  "type": "git",
17
14
  "url": "https://github.com/openobserve/browser-sdk.git",
18
15
  "directory": "packages/core"
19
16
  },
17
+ "devDependencies": {
18
+ "@types/pako": "2.0.4",
19
+ "pako": "2.1.0"
20
+ },
20
21
  "volta": {
21
22
  "extends": "../../package.json"
22
23
  },
@@ -0,0 +1,8 @@
1
+ import type { InitConfiguration } from '../domain/configuration'
2
+ import { display } from '../tools/display'
3
+
4
+ export function displayAlreadyInitializedError(sdkName: 'DD_RUM' | 'DD_LOGS', initConfiguration: InitConfiguration) {
5
+ if (!initConfiguration.silentMultipleInit) {
6
+ display.error(`${sdkName} is already initialized.`)
7
+ }
8
+ }
package/src/boot/init.ts CHANGED
@@ -1,24 +1,35 @@
1
1
  import { catchUserErrors } from '../tools/catchUserErrors'
2
2
  import { setDebugMode } from '../tools/monitor'
3
- import { assign } from '../tools/utils/polyfills'
3
+ import { display } from '../tools/display'
4
4
 
5
5
  // replaced at build time
6
6
  declare const __BUILD_ENV__SDK_VERSION__: string
7
7
 
8
- export function makePublicApi<T>(stub: T): T & { onReady(callback: () => void): void; version: string } {
9
- const publicApi = assign(
10
- {
11
- version: __BUILD_ENV__SDK_VERSION__,
8
+ export interface PublicApi {
9
+ /**
10
+ * Version of the Logs browser SDK
11
+ */
12
+ version: string
12
13
 
13
- // This API method is intentionally not monitored, since the only thing executed is the
14
- // user-provided 'callback'. All SDK usages executed in the callback should be monitored, and
15
- // we don't want to interfere with the user uncaught exceptions.
16
- onReady(callback: () => void) {
17
- callback()
18
- },
14
+ /**
15
+ * For CDN async setup: Early RUM API calls must be wrapped in the `window.DD_RUM.onReady()` callback. This ensures the code only gets executed once the SDK is properly loaded.
16
+ *
17
+ * See [CDN async setup](https://docs.datadoghq.com/real_user_monitoring/browser/#cdn-async) for further information.
18
+ */
19
+ onReady: (callback: () => void) => void
20
+ }
21
+
22
+ export function makePublicApi<T extends PublicApi>(stub: Omit<T, keyof PublicApi>): T {
23
+ const publicApi = {
24
+ version: __BUILD_ENV__SDK_VERSION__,
25
+ // This API method is intentionally not monitored, since the only thing executed is the
26
+ // user-provided 'callback'. All SDK usages executed in the callback should be monitored, and
27
+ // we don't want to interfere with the user uncaught exceptions.
28
+ onReady(callback: () => void) {
29
+ callback()
19
30
  },
20
- stub
21
- )
31
+ ...stub,
32
+ }
22
33
 
23
34
  // Add a "hidden" property to set debug mode. We define it that way to hide it
24
35
  // as much as possible but of course it's not a real protection.
@@ -29,11 +40,14 @@ export function makePublicApi<T>(stub: T): T & { onReady(callback: () => void):
29
40
  enumerable: false,
30
41
  })
31
42
 
32
- return publicApi
43
+ return publicApi as T
33
44
  }
34
45
 
35
46
  export function defineGlobal<Global, Name extends keyof Global>(global: Global, name: Name, api: Global[Name]) {
36
- const existingGlobalVariable = global[name] as { q?: Array<() => void> } | undefined
47
+ const existingGlobalVariable = global[name] as { q?: Array<() => void>; version?: string } | undefined
48
+ if (existingGlobalVariable && !existingGlobalVariable.q && existingGlobalVariable.version) {
49
+ display.warn('SDK is loaded more than once. This is unsupported and might have unexpected behavior.')
50
+ }
37
51
  global[name] = api
38
52
  if (existingGlobalVariable && existingGlobalVariable.q) {
39
53
  existingGlobalVariable.q.forEach((fn) => catchUserErrors(fn, 'onReady callback threw an error:')())
@@ -1,13 +1,10 @@
1
1
  import { monitor } from '../tools/monitor'
2
2
  import { getZoneJsOriginalValue } from '../tools/getZoneJsOriginalValue'
3
- import type { Configuration } from '../domain/configuration'
4
- import type { VisualViewport, VisualViewportEventMap } from './types'
3
+ import type { CookieStore, CookieStoreEventMap, VisualViewport, VisualViewportEventMap } from './browser.types'
5
4
 
6
5
  export type TrustableEvent<E extends Event = Event> = E & { __ddIsTrusted?: boolean }
7
6
 
8
- // We want to use a real enum (i.e. not a const enum) here, to be able to iterate over it to automatically add _ddIsTrusted in e2e tests
9
- // eslint-disable-next-line no-restricted-syntax
10
- export enum DOM_EVENT {
7
+ export const enum DOM_EVENT {
11
8
  BEFORE_UNLOAD = 'beforeunload',
12
9
  CLICK = 'click',
13
10
  DBL_CLICK = 'dblclick',
@@ -75,7 +72,9 @@ type EventMapFor<T> = T extends Window
75
72
  ? PerformanceEventMap
76
73
  : T extends Worker
77
74
  ? WorkerEventMap
78
- : Record<never, never>
75
+ : T extends CookieStore
76
+ ? CookieStoreEventMap
77
+ : Record<never, never>
79
78
 
80
79
  /**
81
80
  * Add an event listener to an event target object (Window, Element, mock object...). This provides
@@ -88,7 +87,7 @@ type EventMapFor<T> = T extends Window
88
87
  * * returns a `stop` function to remove the listener
89
88
  */
90
89
  export function addEventListener<Target extends EventTarget, EventName extends keyof EventMapFor<Target> & string>(
91
- configuration: Configuration,
90
+ configuration: { allowUntrustedEvents?: boolean | undefined },
92
91
  eventTarget: Target,
93
92
  eventName: EventName,
94
93
  listener: (event: EventMapFor<Target>[EventName] & { type: EventName }) => void,
@@ -110,7 +109,7 @@ export function addEventListener<Target extends EventTarget, EventName extends k
110
109
  * * with `once: true`, the listener will be called at most once, even if different events are listened
111
110
  */
112
111
  export function addEventListeners<Target extends EventTarget, EventName extends keyof EventMapFor<Target> & string>(
113
- configuration: Configuration,
112
+ configuration: { allowUntrustedEvents?: boolean | undefined },
114
113
  eventTarget: Target,
115
114
  eventNames: EventName[],
116
115
  listener: (event: EventMapFor<Target>[EventName] & { type: EventName }) => void,
@@ -128,11 +127,15 @@ export function addEventListeners<Target extends EventTarget, EventName extends
128
127
 
129
128
  const options = passive ? { capture, passive } : capture
130
129
 
131
- const add = getZoneJsOriginalValue(eventTarget, 'addEventListener')
130
+ // Use the window.EventTarget.prototype when possible to avoid wrong overrides (e.g: https://github.com/salesforce/lwc/issues/1824)
131
+ const listenerTarget =
132
+ window.EventTarget && eventTarget instanceof EventTarget ? window.EventTarget.prototype : eventTarget
133
+
134
+ const add = getZoneJsOriginalValue(listenerTarget, 'addEventListener')
132
135
  eventNames.forEach((eventName) => add.call(eventTarget, eventName, listenerWithMonitor, options))
133
136
 
134
137
  function stop() {
135
- const remove = getZoneJsOriginalValue(eventTarget, 'removeEventListener')
138
+ const remove = getZoneJsOriginalValue(listenerTarget, 'removeEventListener')
136
139
  eventNames.forEach((eventName) => remove.call(eventTarget, eventName, listenerWithMonitor, options))
137
140
  }
138
141
 
@@ -38,3 +38,45 @@ export interface VisualViewport extends EventTarget {
38
38
  options?: boolean | EventListenerOptions
39
39
  ): void
40
40
  }
41
+
42
+ export interface WeakRef<T extends object> {
43
+ readonly [Symbol.toStringTag]: 'WeakRef'
44
+
45
+ deref(): T | undefined
46
+ }
47
+
48
+ export interface WeakRefConstructor {
49
+ readonly prototype: WeakRef<any>
50
+
51
+ new <T extends object>(target: T): WeakRef<T>
52
+ }
53
+
54
+ export interface CookieStore extends EventTarget {
55
+ get(name: string): Promise<unknown>
56
+ getAll(name?: string): Promise<
57
+ Array<{
58
+ name: string
59
+ value: string
60
+ domain?: string
61
+ path?: string
62
+ expires?: number
63
+ secure?: boolean
64
+ sameSite?: 'strict' | 'lax' | 'none'
65
+ partitioned?: boolean
66
+ }>
67
+ >
68
+ }
69
+
70
+ export interface CookieStoreEventMap {
71
+ change: CookieChangeEvent
72
+ }
73
+
74
+ export interface CookieChangeItem {
75
+ name: string
76
+ value: string | undefined
77
+ }
78
+
79
+ export type CookieChangeEvent = Event & {
80
+ changed: CookieChangeItem[]
81
+ deleted: CookieChangeItem[]
82
+ }
@@ -1,6 +1,12 @@
1
1
  import { display } from '../tools/display'
2
2
  import { ONE_MINUTE, ONE_SECOND } from '../tools/utils/timeUtils'
3
- import { findCommaSeparatedValue, findCommaSeparatedValues, generateUUID } from '../tools/utils/stringUtils'
3
+ import {
4
+ findAllCommaSeparatedValues,
5
+ findCommaSeparatedValue,
6
+ findCommaSeparatedValues,
7
+ generateUUID,
8
+ } from '../tools/utils/stringUtils'
9
+ import { buildUrl } from '../tools/utils/urlPolyfill'
4
10
 
5
11
  export interface CookieOptions {
6
12
  secure?: boolean
@@ -9,7 +15,7 @@ export interface CookieOptions {
9
15
  domain?: string
10
16
  }
11
17
 
12
- export function setCookie(name: string, value: string, expireDelay: number, options?: CookieOptions) {
18
+ export function setCookie(name: string, value: string, expireDelay: number = 0, options?: CookieOptions) {
13
19
  const date = new Date()
14
20
  date.setTime(date.getTime() + expireDelay)
15
21
  const expires = `expires=${date.toUTCString()}`
@@ -20,15 +26,28 @@ export function setCookie(name: string, value: string, expireDelay: number, opti
20
26
  document.cookie = `${name}=${value};${expires};path=/;samesite=${sameSite}${domain}${secure}${partitioned}`
21
27
  }
22
28
 
29
+ /**
30
+ * Returns the value of the cookie with the given name
31
+ * If there are multiple cookies with the same name, returns the first one
32
+ */
23
33
  export function getCookie(name: string) {
24
34
  return findCommaSeparatedValue(document.cookie, name)
25
35
  }
26
36
 
37
+ /**
38
+ * Returns all the values of the cookies with the given name
39
+ */
40
+ export function getCookies(name: string): string[] {
41
+ return findAllCommaSeparatedValues(document.cookie).get(name) || []
42
+ }
43
+
27
44
  let initCookieParsed: Map<string, string> | undefined
28
45
 
29
46
  /**
30
47
  * Returns a cached value of the cookie. Use this during SDK initialization (and whenever possible)
31
48
  * to avoid accessing document.cookie multiple times.
49
+ *
50
+ * ⚠️ If there are multiple cookies with the same name, returns the LAST one (unlike `getCookie()`)
32
51
  */
33
52
  export function getInitCookie(name: string) {
34
53
  if (!initCookieParsed) {
@@ -70,21 +89,37 @@ export function areCookiesAuthorized(options: CookieOptions): boolean {
70
89
  * https://web.dev/same-site-same-origin/#site
71
90
  */
72
91
  let getCurrentSiteCache: string | undefined
73
- export function getCurrentSite() {
92
+ export function getCurrentSite(hostname = location.hostname, referrer = document.referrer): string | undefined {
74
93
  if (getCurrentSiteCache === undefined) {
75
- // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during
76
- // the test cookie lifetime
77
- const testCookieName = `oo_site_test_${generateUUID()}`
78
- const testCookieValue = 'test'
94
+ const defaultHostName = getCookieDefaultHostName(hostname, referrer)
95
+ if (defaultHostName) {
96
+ // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during
97
+ // the test cookie lifetime
98
+ const testCookieName = `oo_site_test_${generateUUID()}`
99
+ const testCookieValue = 'test'
79
100
 
80
- const domainLevels = window.location.hostname.split('.')
81
- let candidateDomain = domainLevels.pop()!
82
- while (domainLevels.length && !getCookie(testCookieName)) {
83
- candidateDomain = `${domainLevels.pop()!}.${candidateDomain}`
84
- setCookie(testCookieName, testCookieValue, ONE_SECOND, { domain: candidateDomain })
101
+ const domainLevels = defaultHostName.split('.')
102
+ let candidateDomain = domainLevels.pop()!
103
+ while (domainLevels.length && !getCookie(testCookieName)) {
104
+ candidateDomain = `${domainLevels.pop()!}.${candidateDomain}`
105
+ setCookie(testCookieName, testCookieValue, ONE_SECOND, { domain: candidateDomain })
106
+ }
107
+ deleteCookie(testCookieName, { domain: candidateDomain })
108
+ getCurrentSiteCache = candidateDomain
85
109
  }
86
- deleteCookie(testCookieName, { domain: candidateDomain })
87
- getCurrentSiteCache = candidateDomain
88
110
  }
111
+
89
112
  return getCurrentSiteCache
90
113
  }
114
+
115
+ function getCookieDefaultHostName(hostname: string, referrer: string) {
116
+ try {
117
+ return hostname || buildUrl(referrer).hostname
118
+ } catch {
119
+ // Ignore
120
+ }
121
+ }
122
+
123
+ export function resetGetCurrentSite() {
124
+ getCurrentSiteCache = undefined
125
+ }
@@ -1,10 +1,14 @@
1
1
  import type { InstrumentedMethodCall } from '../tools/instrumentMethod'
2
2
  import { instrumentMethod } from '../tools/instrumentMethod'
3
- import { monitor } from '../tools/monitor'
3
+ import { monitorError } from '../tools/monitor'
4
4
  import { Observable } from '../tools/observable'
5
5
  import type { ClocksState } from '../tools/utils/timeUtils'
6
6
  import { clocksNow } from '../tools/utils/timeUtils'
7
7
  import { normalizeUrl } from '../tools/utils/urlPolyfill'
8
+ import type { GlobalObject } from '../tools/globalObject'
9
+ import { globalObject } from '../tools/globalObject'
10
+ import { readBytesFromStream } from '../tools/readBytesFromStream'
11
+ import { tryToClone } from '../tools/utils/responseUtils'
8
12
 
9
13
  interface FetchContextBase {
10
14
  method: string
@@ -12,6 +16,7 @@ interface FetchContextBase {
12
16
  input: unknown
13
17
  init?: RequestInit
14
18
  url: string
19
+ handlingStack?: string
15
20
  }
16
21
 
17
22
  export interface FetchStartContext extends FetchContextBase {
@@ -22,6 +27,7 @@ export interface FetchResolveContext extends FetchContextBase {
22
27
  state: 'resolve'
23
28
  status: number
24
29
  response?: Response
30
+ responseBody?: string
25
31
  responseType?: string
26
32
  isAborted: boolean
27
33
  error?: Error
@@ -29,29 +35,54 @@ export interface FetchResolveContext extends FetchContextBase {
29
35
 
30
36
  export type FetchContext = FetchStartContext | FetchResolveContext
31
37
 
38
+ type ResponseBodyActionGetter = (context: FetchResolveContext) => ResponseBodyAction
39
+
40
+ /**
41
+ * Action to take with the response body of a fetch request.
42
+ * Values are ordered by priority: higher values take precedence when multiple actions are requested.
43
+ */
44
+ export const enum ResponseBodyAction {
45
+ IGNORE = 0,
46
+ // TODO(next-major): Remove the "WAIT" action when `trackEarlyRequests` is removed, as the
47
+ // duration of fetch requests will always come from PerformanceResourceTiming
48
+ WAIT = 1,
49
+ COLLECT = 2,
50
+ }
51
+
32
52
  let fetchObservable: Observable<FetchContext> | undefined
53
+ const responseBodyActionGetters: ResponseBodyActionGetter[] = []
33
54
 
34
- export function initFetchObservable() {
55
+ export function initFetchObservable({ responseBodyAction }: { responseBodyAction?: ResponseBodyActionGetter } = {}) {
56
+ if (responseBodyAction) {
57
+ responseBodyActionGetters.push(responseBodyAction)
58
+ }
35
59
  if (!fetchObservable) {
36
60
  fetchObservable = createFetchObservable()
37
61
  }
38
62
  return fetchObservable
39
63
  }
40
64
 
65
+ export function resetFetchObservable() {
66
+ fetchObservable = undefined
67
+ responseBodyActionGetters.length = 0
68
+ }
69
+
41
70
  function createFetchObservable() {
42
71
  return new Observable<FetchContext>((observable) => {
43
- if (!window.fetch) {
72
+ if (!globalObject.fetch) {
44
73
  return
45
74
  }
46
75
 
47
- const { stop } = instrumentMethod(window, 'fetch', (call) => beforeSend(call, observable))
76
+ const { stop } = instrumentMethod(globalObject, 'fetch', (call) => beforeSend(call, observable), {
77
+ computeHandlingStack: true,
78
+ })
48
79
 
49
80
  return stop
50
81
  })
51
82
  }
52
83
 
53
84
  function beforeSend(
54
- { parameters, onPostCall }: InstrumentedMethodCall<Window, 'fetch'>,
85
+ { parameters, onPostCall, handlingStack }: InstrumentedMethodCall<GlobalObject, 'fetch'>,
55
86
  observable: Observable<FetchContext>
56
87
  ) {
57
88
  const [input, init] = parameters
@@ -72,6 +103,7 @@ function beforeSend(
72
103
  method,
73
104
  startClocks,
74
105
  url,
106
+ handlingStack,
75
107
  }
76
108
 
77
109
  observable.notify(context)
@@ -80,29 +112,56 @@ function beforeSend(
80
112
  parameters[0] = context.input as RequestInfo | URL
81
113
  parameters[1] = context.init
82
114
 
83
- onPostCall((responsePromise) => afterSend(observable, responsePromise, context))
115
+ onPostCall((responsePromise) => {
116
+ afterSend(observable, responsePromise, context).catch(monitorError)
117
+ })
84
118
  }
85
119
 
86
- function afterSend(
120
+ async function afterSend(
87
121
  observable: Observable<FetchContext>,
88
122
  responsePromise: Promise<Response>,
89
123
  startContext: FetchStartContext
90
124
  ) {
91
- const reportFetch = (response: Response | Error) => {
92
- const context = startContext as unknown as FetchResolveContext
93
- context.state = 'resolve'
94
- if ('stack' in response || response instanceof Error) {
95
- context.status = 0
96
- context.isAborted = response instanceof DOMException && response.code === DOMException.ABORT_ERR
97
- context.error = response
98
- } else if ('status' in response) {
99
- context.response = response
100
- context.responseType = response.type
101
- context.status = response.status
102
- context.isAborted = false
103
- }
125
+ const context = startContext as unknown as FetchResolveContext
126
+ context.state = 'resolve'
127
+
128
+ let response: Response
129
+
130
+ try {
131
+ response = await responsePromise
132
+ } catch (error) {
133
+ context.status = 0
134
+ context.isAborted =
135
+ context.init?.signal?.aborted || (error instanceof DOMException && error.code === DOMException.ABORT_ERR)
136
+ context.error = error as Error
104
137
  observable.notify(context)
138
+ return
105
139
  }
106
140
 
107
- responsePromise.then(monitor(reportFetch), monitor(reportFetch))
141
+ context.response = response
142
+ context.status = response.status
143
+ context.responseType = response.type
144
+ context.isAborted = false
145
+
146
+ const responseBodyCondition = responseBodyActionGetters.reduce(
147
+ (action, getter) => Math.max(action, getter(context)),
148
+ ResponseBodyAction.IGNORE
149
+ ) as ResponseBodyAction
150
+
151
+ if (responseBodyCondition !== ResponseBodyAction.IGNORE) {
152
+ const clonedResponse = tryToClone(response)
153
+ if (clonedResponse && clonedResponse.body) {
154
+ try {
155
+ const bytes = await readBytesFromStream(clonedResponse.body, {
156
+ collectStreamBody: responseBodyCondition === ResponseBodyAction.COLLECT,
157
+ })
158
+ context.responseBody = bytes && new TextDecoder().decode(bytes)
159
+ } catch {
160
+ // Ignore errors when reading the response body (e.g., stream aborted, network errors)
161
+ // This is not critical and should not be reported as an SDK error
162
+ }
163
+ }
164
+ }
165
+
166
+ observable.notify(context)
108
167
  }
@@ -1,7 +1,5 @@
1
- import { isExperimentalFeatureEnabled, ExperimentalFeature } from '../tools/experimentalFeatures'
2
1
  import { Observable } from '../tools/observable'
3
- import { objectValues, includes } from '../tools/utils/polyfills'
4
- import { noop } from '../tools/utils/functionUtils'
2
+ import { objectValues } from '../tools/utils/polyfills'
5
3
  import type { Configuration } from '../domain/configuration'
6
4
  import { addEventListeners, addEventListener, DOM_EVENT } from './addEventListener'
7
5
 
@@ -14,24 +12,18 @@ export const PageExitReason = {
14
12
 
15
13
  export type PageExitReason = (typeof PageExitReason)[keyof typeof PageExitReason]
16
14
 
17
- export interface PageExitEvent {
15
+ export interface PageMayExitEvent {
18
16
  reason: PageExitReason
19
17
  }
20
18
 
21
- export function createPageExitObservable(configuration: Configuration): Observable<PageExitEvent> {
22
- return new Observable<PageExitEvent>((observable) => {
23
- const pagehideEnabled = isExperimentalFeatureEnabled(ExperimentalFeature.PAGEHIDE)
19
+ export function createPageMayExitObservable(configuration: Configuration): Observable<PageMayExitEvent> {
20
+ return new Observable<PageMayExitEvent>((observable) => {
24
21
  const { stop: stopListeners } = addEventListeners(
25
22
  configuration,
26
23
  window,
27
- [DOM_EVENT.VISIBILITY_CHANGE, DOM_EVENT.FREEZE, DOM_EVENT.PAGE_HIDE],
24
+ [DOM_EVENT.VISIBILITY_CHANGE, DOM_EVENT.FREEZE],
28
25
  (event) => {
29
- if (event.type === DOM_EVENT.PAGE_HIDE && pagehideEnabled) {
30
- /**
31
- * Only event that detect page unload events while being compatible with the back/forward cache (bfcache)
32
- */
33
- observable.notify({ reason: PageExitReason.PAGEHIDE })
34
- } else if (event.type === DOM_EVENT.VISIBILITY_CHANGE && document.visibilityState === 'hidden') {
26
+ if (event.type === DOM_EVENT.VISIBILITY_CHANGE && document.visibilityState === 'hidden') {
35
27
  /**
36
28
  * Only event that guarantee to fire on mobile devices when the page transitions to background state
37
29
  * (e.g. when user switches to a different application, goes to homescreen, etc), or is being unloaded.
@@ -48,12 +40,9 @@ export function createPageExitObservable(configuration: Configuration): Observab
48
40
  { capture: true }
49
41
  )
50
42
 
51
- let stopBeforeUnloadListener = noop
52
- if (!pagehideEnabled) {
53
- stopBeforeUnloadListener = addEventListener(configuration, window, DOM_EVENT.BEFORE_UNLOAD, () => {
54
- observable.notify({ reason: PageExitReason.UNLOADING })
55
- }).stop
56
- }
43
+ const stopBeforeUnloadListener = addEventListener(configuration, window, DOM_EVENT.BEFORE_UNLOAD, () => {
44
+ observable.notify({ reason: PageExitReason.UNLOADING })
45
+ }).stop
57
46
 
58
47
  return () => {
59
48
  stopListeners()
@@ -62,6 +51,6 @@ export function createPageExitObservable(configuration: Configuration): Observab
62
51
  })
63
52
  }
64
53
 
65
- export function isPageExitReason(reason: string | undefined): reason is PageExitReason {
66
- return includes(objectValues(PageExitReason), reason)
54
+ export function isPageExitReason(reason: string): reason is PageExitReason {
55
+ return objectValues(PageExitReason).includes(reason as PageExitReason)
67
56
  }
@@ -1,15 +1,25 @@
1
1
  import type { Configuration } from '../domain/configuration'
2
+ import { noop } from '../tools/utils/functionUtils'
2
3
  import { DOM_EVENT, addEventListener } from './addEventListener'
3
4
 
4
5
  export function runOnReadyState(
5
6
  configuration: Configuration,
6
7
  expectedReadyState: 'complete' | 'interactive',
7
8
  callback: () => void
8
- ) {
9
+ ): { stop: () => void } {
9
10
  if (document.readyState === expectedReadyState || document.readyState === 'complete') {
10
11
  callback()
11
- } else {
12
- const eventName = expectedReadyState === 'complete' ? DOM_EVENT.LOAD : DOM_EVENT.DOM_CONTENT_LOADED
13
- addEventListener(configuration, window, eventName, callback, { once: true })
12
+ return { stop: noop }
14
13
  }
14
+ const eventName = expectedReadyState === 'complete' ? DOM_EVENT.LOAD : DOM_EVENT.DOM_CONTENT_LOADED
15
+ return addEventListener(configuration, window, eventName, callback, { once: true })
16
+ }
17
+
18
+ export function asyncRunOnReadyState(
19
+ configuration: Configuration,
20
+ expectedReadyState: 'complete' | 'interactive'
21
+ ): Promise<void> {
22
+ return new Promise((resolve) => {
23
+ runOnReadyState(configuration, expectedReadyState, resolve)
24
+ })
15
25
  }
@@ -19,12 +19,15 @@ export interface XhrStartContext extends Omit<XhrOpenContext, 'state'> {
19
19
  startClocks: ClocksState
20
20
  isAborted: boolean
21
21
  xhr: XMLHttpRequest
22
+ handlingStack?: string
23
+ requestBody?: unknown
22
24
  }
23
25
 
24
26
  export interface XhrCompleteContext extends Omit<XhrStartContext, 'state'> {
25
27
  state: 'complete'
26
28
  duration: Duration
27
29
  status: number
30
+ responseBody?: string
28
31
  }
29
32
 
30
33
  export type XhrContext = XhrOpenContext | XhrStartContext | XhrCompleteContext
@@ -43,9 +46,14 @@ function createXhrObservable(configuration: Configuration) {
43
46
  return new Observable<XhrContext>((observable) => {
44
47
  const { stop: stopInstrumentingStart } = instrumentMethod(XMLHttpRequest.prototype, 'open', openXhr)
45
48
 
46
- const { stop: stopInstrumentingSend } = instrumentMethod(XMLHttpRequest.prototype, 'send', (call) => {
47
- sendXhr(call, configuration, observable)
48
- })
49
+ const { stop: stopInstrumentingSend } = instrumentMethod(
50
+ XMLHttpRequest.prototype,
51
+ 'send',
52
+ (call) => {
53
+ sendXhr(call, configuration, observable)
54
+ },
55
+ { computeHandlingStack: true }
56
+ )
49
57
 
50
58
  const { stop: stopInstrumentingAbort } = instrumentMethod(XMLHttpRequest.prototype, 'abort', abortXhr)
51
59
 
@@ -66,7 +74,7 @@ function openXhr({ target: xhr, parameters: [method, url] }: InstrumentedMethodC
66
74
  }
67
75
 
68
76
  function sendXhr(
69
- { target: xhr }: InstrumentedMethodCall<XMLHttpRequest, 'send'>,
77
+ { target: xhr, parameters: [body], handlingStack }: InstrumentedMethodCall<XMLHttpRequest, 'send'>,
70
78
  configuration: Configuration,
71
79
  observable: Observable<XhrContext>
72
80
  ) {
@@ -80,6 +88,8 @@ function sendXhr(
80
88
  startContext.startClocks = clocksNow()
81
89
  startContext.isAborted = false
82
90
  startContext.xhr = xhr
91
+ startContext.handlingStack = handlingStack
92
+ startContext.requestBody = body
83
93
 
84
94
  let hasBeenReported = false
85
95
 
@@ -105,6 +115,9 @@ function sendXhr(
105
115
  completeContext.state = 'complete'
106
116
  completeContext.duration = elapsed(startContext.startClocks.timeStamp, timeStampNow())
107
117
  completeContext.status = xhr.status
118
+ if (typeof xhr.response === 'string') {
119
+ completeContext.responseBody = xhr.response
120
+ }
108
121
  observable.notify(shallowClone(completeContext))
109
122
  }
110
123