@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
@@ -1,4 +1,5 @@
1
1
  import { getInitCookie } from '../../browser/cookie'
2
+ import { globalObject, isWorkerEnvironment } from '../../tools/globalObject'
2
3
 
3
4
  export const SYNTHETICS_TEST_ID_COOKIE_NAME = 'openobserve-synthetics-public-id'
4
5
  export const SYNTHETICS_RESULT_ID_COOKIE_NAME = 'openobserve-synthetics-result-id'
@@ -11,8 +12,13 @@ export interface BrowserWindow extends Window {
11
12
  }
12
13
 
13
14
  export function willSyntheticsInjectRum(): boolean {
15
+ if (isWorkerEnvironment) {
16
+ // We don't expect to run synthetics tests in a worker environment
17
+ return false
18
+ }
19
+
14
20
  return Boolean(
15
- (window as BrowserWindow)._OO_SYNTHETICS_INJECTS_RUM || getInitCookie(SYNTHETICS_INJECTS_RUM_COOKIE_NAME)
21
+ (globalObject as BrowserWindow)._OO_SYNTHETICS_INJECTS_RUM || getInitCookie(SYNTHETICS_INJECTS_RUM_COOKIE_NAME)
16
22
  )
17
23
  }
18
24
 
@@ -22,6 +28,11 @@ export function getSyntheticsTestId(): string | undefined {
22
28
  }
23
29
 
24
30
  export function getSyntheticsResultId(): string | undefined {
25
- const value = (window as BrowserWindow)._OO_SYNTHETICS_RESULT_ID || getInitCookie(SYNTHETICS_RESULT_ID_COOKIE_NAME)
31
+ const value =
32
+ (window as BrowserWindow)._OO_SYNTHETICS_RESULT_ID || getInitCookie(SYNTHETICS_RESULT_ID_COOKIE_NAME)
26
33
  return typeof value === 'string' ? value : undefined
27
34
  }
35
+
36
+ export function isSyntheticsTest(): boolean {
37
+ return Boolean(getSyntheticsTestId() && getSyntheticsResultId())
38
+ }
@@ -0,0 +1,76 @@
1
+ import { DOCS_ORIGIN, MORE_DETAILS, display } from '../tools/display'
2
+ import type { Configuration } from './configuration'
3
+
4
+ export const TAG_SIZE_LIMIT = 200
5
+
6
+ // replaced at build time
7
+ declare const __BUILD_ENV__SDK_VERSION__: string
8
+
9
+ export function buildTags(configuration: Configuration): string[] {
10
+ const { env, service, version, datacenter, sdkVersion, variant } = configuration
11
+ const tags = [buildTag('sdk_version', sdkVersion ?? __BUILD_ENV__SDK_VERSION__)]
12
+
13
+ if (env) {
14
+ tags.push(buildTag('env', env))
15
+ }
16
+ if (service) {
17
+ tags.push(buildTag('service', service))
18
+ }
19
+ if (version) {
20
+ tags.push(buildTag('version', version))
21
+ }
22
+ if (datacenter) {
23
+ tags.push(buildTag('datacenter', datacenter))
24
+ }
25
+
26
+ if (variant) {
27
+ tags.push(buildTag('variant', variant))
28
+ }
29
+
30
+ return tags
31
+ }
32
+
33
+ export function buildTag(key: string, rawValue?: string) {
34
+ // See https://docs.datadoghq.com/getting_started/tagging/#defining-tags for tags syntax. Note
35
+ // that the backend may not follow the exact same rules, so we only want to display an informal
36
+ // warning.
37
+ const tag = rawValue ? `${key}:${rawValue}` : key
38
+
39
+ if (tag.length > TAG_SIZE_LIMIT || hasForbiddenCharacters(tag)) {
40
+ display.warn(
41
+ `Tag ${tag} doesn't meet tag requirements and will be sanitized. ${MORE_DETAILS} ${DOCS_ORIGIN}/getting_started/tagging/#defining-tags`
42
+ )
43
+ }
44
+
45
+ // Let the backend do most of the sanitization, but still make sure multiple tags can't be crafted
46
+ // by forging a value containing commas.
47
+ return sanitizeTag(tag)
48
+ }
49
+
50
+ export function sanitizeTag(tag: string) {
51
+ return tag.replace(/,/g, '_')
52
+ }
53
+
54
+ function hasForbiddenCharacters(rawValue: string) {
55
+ // Unicode property escapes is not supported in all browsers, so we use a try/catch.
56
+ // Todo: Remove the try/catch when dropping support for Chrome 63 and Firefox 67
57
+ // see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Unicode_character_class_escape#browser_compatibility
58
+ if (!supportUnicodePropertyEscapes()) {
59
+ return false
60
+ }
61
+
62
+ // We use the Unicode property escapes to match any character that is a letter including other languages like Chinese, Japanese, etc.
63
+ // p{Ll} matches a lowercase letter.
64
+ // p{Lo} matches a letter that is neither uppercase nor lowercase (ex: Japanese characters).
65
+ // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Unicode_character_class_escape#unicode_property_escapes_vs._character_classes
66
+ return new RegExp('[^\\p{Ll}\\p{Lo}0-9_:./-]', 'u').test(rawValue)
67
+ }
68
+
69
+ export function supportUnicodePropertyEscapes() {
70
+ try {
71
+ new RegExp('[\\p{Ll}]', 'u')
72
+ return true
73
+ } catch {
74
+ return false
75
+ }
76
+ }
@@ -1,14 +1,22 @@
1
+ export type { Telemetry } from './telemetry'
1
2
  export {
2
- Telemetry,
3
3
  TelemetryService,
4
+ TelemetryMetrics,
4
5
  addTelemetryDebug,
5
6
  addTelemetryError,
6
- startFakeTelemetry,
7
7
  resetTelemetry,
8
8
  startTelemetry,
9
- isTelemetryReplicationAllowed,
10
9
  addTelemetryConfiguration,
10
+ addTelemetryUsage,
11
+ addTelemetryMetrics,
12
+ getTelemetryObservable,
11
13
  } from './telemetry'
12
14
 
13
15
  export * from './rawTelemetryEvent.types'
14
- export * from './telemetryEvent.types'
16
+ export type {
17
+ TelemetryEvent,
18
+ TelemetryErrorEvent,
19
+ TelemetryDebugEvent,
20
+ TelemetryConfigurationEvent,
21
+ TelemetryUsageEvent,
22
+ } from './telemetryEvent.types'
@@ -1,8 +1,9 @@
1
- import type { TelemetryEvent, TelemetryConfigurationEvent } from './telemetryEvent.types'
1
+ import type { TelemetryEvent, TelemetryConfigurationEvent, TelemetryUsageEvent } from './telemetryEvent.types'
2
2
 
3
3
  export const TelemetryType = {
4
- log: 'log',
5
- configuration: 'configuration',
4
+ LOG: 'log',
5
+ CONFIGURATION: 'configuration',
6
+ USAGE: 'usage',
6
7
  } as const
7
8
 
8
9
  export const enum StatusType {
@@ -17,3 +18,5 @@ export interface RuntimeEnvInfo {
17
18
 
18
19
  export type RawTelemetryEvent = TelemetryEvent['telemetry']
19
20
  export type RawTelemetryConfiguration = TelemetryConfigurationEvent['telemetry']['configuration']
21
+ export type RawTelemetryUsage = TelemetryUsageEvent['telemetry']['usage']
22
+ export type RawTelemetryUsageFeature = TelemetryUsageEvent['telemetry']['usage']['feature']
@@ -1,27 +1,48 @@
1
1
  import type { Context } from '../../tools/serialisation/context'
2
2
  import { ConsoleApiName } from '../../tools/display'
3
- import { toStackTraceString, NO_ERROR_STACK_PRESENT_MESSAGE } from '../error/error'
3
+ import { NO_ERROR_STACK_PRESENT_MESSAGE, isError } from '../error/error'
4
+ import { toStackTraceString } from '../../tools/stackTrace/handlingStack'
4
5
  import { getExperimentalFeatures } from '../../tools/experimentalFeatures'
5
6
  import type { Configuration } from '../configuration'
6
- import { INTAKE_SITE_STAGING, INTAKE_SITE_US1_FED } from '../configuration'
7
- import { Observable } from '../../tools/observable'
8
- import { timeStampNow } from '../../tools/utils/timeUtils'
7
+ import { buildTags } from '../tags'
8
+ import { INTAKE_SITE_STAGING, INTAKE_SITE_US1_FED } from '../intakeSites'
9
+ import { BufferedObservable, Observable } from '../../tools/observable'
10
+ import { clocksNow } from '../../tools/utils/timeUtils'
9
11
  import { displayIfDebugEnabled, startMonitorErrorCollection } from '../../tools/monitor'
10
12
  import { sendToExtension } from '../../tools/sendToExtension'
11
- import { startsWith, arrayFrom, includes, assign } from '../../tools/utils/polyfills'
12
13
  import { performDraw } from '../../tools/utils/numberUtils'
13
14
  import { jsonStringify } from '../../tools/serialisation/jsonStringify'
14
15
  import { combine } from '../../tools/mergeInto'
16
+ import type { RawError } from '../error/error.types'
15
17
  import { NonErrorPrefix } from '../error/error.types'
16
- import type { StackTrace } from '../error/computeStackTrace'
17
- import { computeStackTrace } from '../error/computeStackTrace'
18
+ import type { StackTrace } from '../../tools/stackTrace/computeStackTrace'
19
+ import { computeStackTrace } from '../../tools/stackTrace/computeStackTrace'
18
20
  import { getConnectivity } from '../connectivity'
21
+ import {
22
+ canUseEventBridge,
23
+ createFlushController,
24
+ createHttpRequest,
25
+ getEventBridge,
26
+ createBatch,
27
+ } from '../../transport'
28
+ import type { Encoder } from '../../tools/encoder'
29
+ import type { PageMayExitEvent } from '../../browser/pageMayExitObservable'
30
+ import { DeflateEncoderStreamId } from '../deflate'
31
+ import type { AbstractHooks, RecursivePartial } from '../../tools/abstractHooks'
32
+ import { HookNames, DISCARDED } from '../../tools/abstractHooks'
33
+ import { globalObject, isWorkerEnvironment } from '../../tools/globalObject'
19
34
  import type { TelemetryEvent } from './telemetryEvent.types'
20
- import type { RawTelemetryConfiguration, RawTelemetryEvent, RuntimeEnvInfo } from './rawTelemetryEvent.types'
35
+ import type {
36
+ RawTelemetryConfiguration,
37
+ RawTelemetryEvent,
38
+ RuntimeEnvInfo,
39
+ RawTelemetryUsage,
40
+ } from './rawTelemetryEvent.types'
21
41
  import { StatusType, TelemetryType } from './rawTelemetryEvent.types'
22
42
 
23
43
  // replaced at build time
24
44
  declare const __BUILD_ENV__SDK_VERSION__: string
45
+ declare const __BUILD_ENV__SDK_SETUP__: string
25
46
 
26
47
  const ALLOWED_FRAME_URLS = [
27
48
  'http://localhost',
@@ -34,157 +55,265 @@ export const enum TelemetryService {
34
55
  }
35
56
 
36
57
  export interface Telemetry {
37
- setContextProvider: (provider: () => Context) => void
38
- observable: Observable<TelemetryEvent & Context>
58
+ stop: () => void
39
59
  enabled: boolean
60
+ metricsEnabled: boolean
40
61
  }
41
62
 
63
+ export const enum TelemetryMetrics {
64
+ CUSTOMER_DATA_METRIC_NAME = 'Customer data measures',
65
+ REMOTE_CONFIGURATION_METRIC_NAME = 'remote configuration metrics',
66
+ RECORDER_INIT_METRICS_TELEMETRY_NAME = 'Recorder init metrics',
67
+ SEGMENT_METRICS_TELEMETRY_NAME = 'Segment network request metrics',
68
+ INITIAL_VIEW_METRICS_TELEMETRY_NAME = 'Initial view metrics',
69
+ }
70
+
71
+ const METRIC_SAMPLE_RATE = 1
72
+
42
73
  const TELEMETRY_EXCLUDED_SITES: string[] = [INTAKE_SITE_US1_FED]
74
+ const MAX_TELEMETRY_EVENTS_PER_PAGE = 15
43
75
 
44
- const telemetryConfiguration: {
45
- maxEventsPerPage: number
46
- sentEventCount: number
47
- telemetryEnabled: boolean
48
- telemetryConfigurationEnabled: boolean
49
- } = { maxEventsPerPage: 0, sentEventCount: 0, telemetryEnabled: false, telemetryConfigurationEnabled: false }
76
+ let telemetryObservable: BufferedObservable<{ rawEvent: RawTelemetryEvent; metricName?: string }> | undefined
50
77
 
51
- let onRawTelemetryEventCollected: ((event: RawTelemetryEvent) => void) | undefined
78
+ export function getTelemetryObservable() {
79
+ if (!telemetryObservable) {
80
+ telemetryObservable = new BufferedObservable(100)
81
+ }
82
+ return telemetryObservable
83
+ }
52
84
 
53
- export function startTelemetry(telemetryService: TelemetryService, configuration: Configuration): Telemetry {
54
- let contextProvider: () => Context
85
+ export function startTelemetry(
86
+ telemetryService: TelemetryService,
87
+ configuration: Configuration,
88
+ hooks: AbstractHooks,
89
+ reportError: (error: RawError) => void,
90
+ pageMayExitObservable: Observable<PageMayExitEvent>,
91
+ createEncoder: (streamId: DeflateEncoderStreamId) => Encoder
92
+ ): Telemetry {
55
93
  const observable = new Observable<TelemetryEvent & Context>()
56
94
 
57
- telemetryConfiguration.telemetryEnabled =
58
- !includes(TELEMETRY_EXCLUDED_SITES, configuration.site) && performDraw(configuration.telemetrySampleRate)
59
- telemetryConfiguration.telemetryConfigurationEnabled =
60
- telemetryConfiguration.telemetryEnabled && performDraw(configuration.telemetryConfigurationSampleRate)
95
+ const { stop } = startTelemetryTransport(configuration, reportError, pageMayExitObservable, createEncoder, observable)
96
+
97
+ const { enabled, metricsEnabled } = startTelemetryCollection(telemetryService, configuration, hooks, observable)
98
+
99
+ return {
100
+ stop,
101
+ enabled,
102
+ metricsEnabled,
103
+ }
104
+ }
105
+
106
+ export function startTelemetryCollection(
107
+ telemetryService: TelemetryService,
108
+ configuration: Configuration,
109
+ hooks: AbstractHooks,
110
+ observable: Observable<TelemetryEvent & Context>,
111
+ metricSampleRate = METRIC_SAMPLE_RATE,
112
+ maxTelemetryEventsPerPage = MAX_TELEMETRY_EVENTS_PER_PAGE
113
+ ) {
114
+ const alreadySentEventsByKind: Record<string, Set<string>> = {}
115
+
116
+ const telemetryEnabled =
117
+ !TELEMETRY_EXCLUDED_SITES.includes(configuration.site) && performDraw(configuration.telemetrySampleRate)
118
+
119
+ const telemetryEnabledPerType = {
120
+ [TelemetryType.LOG]: telemetryEnabled,
121
+ [TelemetryType.CONFIGURATION]: telemetryEnabled && performDraw(configuration.telemetryConfigurationSampleRate),
122
+ [TelemetryType.USAGE]: telemetryEnabled && performDraw(configuration.telemetryUsageSampleRate),
123
+ // not an actual "type" but using a single draw for all metrics
124
+ metric: telemetryEnabled && performDraw(metricSampleRate),
125
+ }
61
126
 
62
127
  const runtimeEnvInfo = getRuntimeEnvInfo()
63
- onRawTelemetryEventCollected = (rawEvent: RawTelemetryEvent) => {
64
- if (telemetryConfiguration.telemetryEnabled) {
65
- const event = toTelemetryEvent(telemetryService, rawEvent, runtimeEnvInfo)
66
- observable.notify(event)
67
- sendToExtension('telemetry', event)
128
+ const telemetryObservable = getTelemetryObservable()
129
+ telemetryObservable.subscribe(({ rawEvent, metricName }) => {
130
+ if ((metricName && !telemetryEnabledPerType['metric']) || !telemetryEnabledPerType[rawEvent.type!]) {
131
+ return
132
+ }
133
+
134
+ const kind = metricName || (rawEvent.status as string | undefined) || rawEvent.type!
135
+ let alreadySentEvents = alreadySentEventsByKind[kind]
136
+ if (!alreadySentEvents) {
137
+ alreadySentEvents = alreadySentEventsByKind[kind] = new Set()
68
138
  }
69
- }
70
- startMonitorErrorCollection(addTelemetryError)
71
139
 
72
- assign(telemetryConfiguration, {
73
- maxEventsPerPage: configuration.maxTelemetryEventsPerPage,
74
- sentEventCount: 0,
140
+ if (alreadySentEvents.size >= maxTelemetryEventsPerPage) {
141
+ return
142
+ }
143
+
144
+ const stringifiedEvent = jsonStringify(rawEvent)!
145
+ if (alreadySentEvents.has(stringifiedEvent)) {
146
+ return
147
+ }
148
+
149
+ const defaultTelemetryEventAttributes = hooks.triggerHook(HookNames.AssembleTelemetry, {
150
+ startTime: clocksNow().relative,
151
+ })
152
+
153
+ if (defaultTelemetryEventAttributes === DISCARDED) {
154
+ return
155
+ }
156
+ const event = toTelemetryEvent(
157
+ defaultTelemetryEventAttributes as RecursivePartial<TelemetryEvent>,
158
+ telemetryService,
159
+ rawEvent,
160
+ runtimeEnvInfo
161
+ )
162
+ observable.notify(event)
163
+ sendToExtension('telemetry', event)
164
+ alreadySentEvents.add(stringifiedEvent)
75
165
  })
166
+ telemetryObservable.unbuffer()
167
+
168
+ startMonitorErrorCollection(addTelemetryError)
169
+
170
+ return {
171
+ enabled: telemetryEnabled,
172
+ metricsEnabled: telemetryEnabledPerType['metric'],
173
+ }
76
174
 
77
175
  function toTelemetryEvent(
176
+ defaultTelemetryEventAttributes: RecursivePartial<TelemetryEvent>,
78
177
  telemetryService: TelemetryService,
79
- event: RawTelemetryEvent,
178
+ rawEvent: RawTelemetryEvent,
80
179
  runtimeEnvInfo: RuntimeEnvInfo
81
180
  ): TelemetryEvent & Context {
82
- return combine(
83
- {
84
- type: 'telemetry' as const,
85
- date: timeStampNow(),
86
- service: telemetryService,
87
- version: __BUILD_ENV__SDK_VERSION__,
88
- source: 'browser' as const,
89
- _oo: {
90
- format_version: 2 as const,
91
- },
92
- telemetry: combine(event, {
93
- runtime_env: runtimeEnvInfo,
94
- connectivity: getConnectivity(),
95
- }),
96
- experimental_features: arrayFrom(getExperimentalFeatures()),
181
+ const clockNow = clocksNow()
182
+
183
+ const event = {
184
+ type: 'telemetry' as const,
185
+ date: clockNow.timeStamp,
186
+ service: telemetryService,
187
+ version: __BUILD_ENV__SDK_VERSION__,
188
+ source: 'browser' as const,
189
+ _oo: {
190
+ format_version: 2 as const,
97
191
  },
98
- contextProvider !== undefined ? contextProvider() : {}
99
- ) as TelemetryEvent & Context
100
- }
192
+ telemetry: combine(rawEvent, {
193
+ runtime_env: runtimeEnvInfo,
194
+ connectivity: getConnectivity(),
195
+ sdk_setup: __BUILD_ENV__SDK_SETUP__,
196
+ }) as TelemetryEvent['telemetry'],
197
+ ootags: buildTags(configuration).join(','),
198
+ experimental_features: Array.from(getExperimentalFeatures()),
199
+ }
101
200
 
102
- return {
103
- setContextProvider: (provider: () => Context) => {
104
- contextProvider = provider
105
- },
106
- observable,
107
- enabled: telemetryConfiguration.telemetryEnabled,
201
+ return combine(event, defaultTelemetryEventAttributes) as TelemetryEvent & Context
108
202
  }
109
203
  }
110
- function getRuntimeEnvInfo(): RuntimeEnvInfo {
204
+
205
+ function startTelemetryTransport(
206
+ configuration: Configuration,
207
+ reportError: (error: RawError) => void,
208
+ pageMayExitObservable: Observable<PageMayExitEvent>,
209
+ createEncoder: (streamId: DeflateEncoderStreamId) => Encoder,
210
+ telemetryObservable: Observable<TelemetryEvent & Context>
211
+ ) {
212
+ const cleanupTasks: Array<() => void> = []
213
+ if (canUseEventBridge()) {
214
+ const bridge = getEventBridge<'internal_telemetry', TelemetryEvent>()!
215
+ const telemetrySubscription = telemetryObservable.subscribe((event) => bridge.send('internal_telemetry', event))
216
+ cleanupTasks.push(telemetrySubscription.unsubscribe)
217
+ } else {
218
+ const endpoints = [configuration.rumEndpointBuilder]
219
+ if (configuration.replica && isTelemetryReplicationAllowed(configuration)) {
220
+ endpoints.push(configuration.replica.rumEndpointBuilder)
221
+ }
222
+ const telemetryBatch = createBatch({
223
+ encoder: createEncoder(DeflateEncoderStreamId.TELEMETRY),
224
+ request: createHttpRequest(endpoints, reportError),
225
+ flushController: createFlushController({
226
+ pageMayExitObservable,
227
+
228
+ // We don't use an actual session expire observable here, to make telemetry collection
229
+ // independent of the session. This allows to start and send telemetry events earlier.
230
+ sessionExpireObservable: new Observable(),
231
+ }),
232
+ })
233
+ cleanupTasks.push(telemetryBatch.stop)
234
+ const telemetrySubscription = telemetryObservable.subscribe(telemetryBatch.add)
235
+ cleanupTasks.push(telemetrySubscription.unsubscribe)
236
+ }
237
+
111
238
  return {
112
- is_local_file: window.location.protocol === 'file:',
113
- is_worker: 'WorkerGlobalScope' in self,
239
+ stop: () => cleanupTasks.forEach((task) => task()),
114
240
  }
115
241
  }
116
242
 
117
- export function startFakeTelemetry() {
118
- const events: RawTelemetryEvent[] = []
119
- assign(telemetryConfiguration, {
120
- maxEventsPerPage: Infinity,
121
- sentEventCount: 0,
122
- })
123
-
124
- onRawTelemetryEventCollected = (event: RawTelemetryEvent) => {
125
- events.push(event)
243
+ function getRuntimeEnvInfo(): RuntimeEnvInfo {
244
+ return {
245
+ is_local_file: globalObject.location?.protocol === 'file:',
246
+ is_worker: isWorkerEnvironment,
126
247
  }
127
-
128
- return events
129
248
  }
130
249
 
131
250
  export function resetTelemetry() {
132
- onRawTelemetryEventCollected = undefined
251
+ telemetryObservable = undefined
133
252
  }
134
253
 
135
254
  /**
136
255
  * Avoid mixing telemetry events from different data centers
137
256
  * but keep replicating staging events for reliability
138
257
  */
139
- export function isTelemetryReplicationAllowed(configuration: Configuration) {
258
+ function isTelemetryReplicationAllowed(configuration: Configuration) {
140
259
  return configuration.site === INTAKE_SITE_STAGING
141
260
  }
142
261
 
143
262
  export function addTelemetryDebug(message: string, context?: Context) {
144
263
  displayIfDebugEnabled(ConsoleApiName.debug, message, context)
145
- addTelemetry(
146
- assign(
147
- {
148
- type: TelemetryType.log,
149
- message,
150
- status: StatusType.debug,
151
- },
152
- context
153
- )
154
- )
264
+ getTelemetryObservable().notify({
265
+ rawEvent: {
266
+ type: TelemetryType.LOG,
267
+ message,
268
+ status: StatusType.debug,
269
+ ...context,
270
+ },
271
+ })
155
272
  }
156
273
 
157
274
  export function addTelemetryError(e: unknown, context?: Context) {
158
- addTelemetry(
159
- assign(
160
- {
161
- type: TelemetryType.log,
162
- status: StatusType.error,
163
- },
164
- formatError(e),
165
- context
166
- )
167
- )
275
+ getTelemetryObservable().notify({
276
+ rawEvent: {
277
+ type: TelemetryType.LOG,
278
+ status: StatusType.error,
279
+ ...formatError(e),
280
+ ...context,
281
+ },
282
+ })
168
283
  }
169
284
 
170
285
  export function addTelemetryConfiguration(configuration: RawTelemetryConfiguration) {
171
- if (telemetryConfiguration.telemetryConfigurationEnabled) {
172
- addTelemetry({
173
- type: TelemetryType.configuration,
286
+ getTelemetryObservable().notify({
287
+ rawEvent: {
288
+ type: TelemetryType.CONFIGURATION,
174
289
  configuration,
175
- })
176
- }
290
+ },
291
+ })
177
292
  }
178
293
 
179
- function addTelemetry(event: RawTelemetryEvent) {
180
- if (onRawTelemetryEventCollected && telemetryConfiguration.sentEventCount < telemetryConfiguration.maxEventsPerPage) {
181
- telemetryConfiguration.sentEventCount += 1
182
- onRawTelemetryEventCollected(event)
183
- }
294
+ export function addTelemetryMetrics(metricName: TelemetryMetrics, context?: Context) {
295
+ getTelemetryObservable().notify({
296
+ rawEvent: {
297
+ type: TelemetryType.LOG,
298
+ message: metricName,
299
+ status: StatusType.debug,
300
+ ...context,
301
+ },
302
+ metricName,
303
+ })
304
+ }
305
+
306
+ export function addTelemetryUsage(usage: RawTelemetryUsage) {
307
+ getTelemetryObservable().notify({
308
+ rawEvent: {
309
+ type: TelemetryType.USAGE,
310
+ usage,
311
+ },
312
+ })
184
313
  }
185
314
 
186
315
  export function formatError(e: unknown) {
187
- if (e instanceof Error) {
316
+ if (isError(e)) {
188
317
  const stackTrace = computeStackTrace(e)
189
318
  return {
190
319
  error: {
@@ -204,7 +333,7 @@ export function formatError(e: unknown) {
204
333
 
205
334
  export function scrubCustomerFrames(stackTrace: StackTrace) {
206
335
  stackTrace.stack = stackTrace.stack.filter(
207
- (frame) => !frame.url || ALLOWED_FRAME_URLS.some((allowedFrameUrl) => startsWith(frame.url!, allowedFrameUrl))
336
+ (frame) => !frame.url || ALLOWED_FRAME_URLS.some((allowedFrameUrl) => frame.url!.startsWith(allowedFrameUrl))
208
337
  )
209
338
  return stackTrace
210
339
  }