@kubesense/kubesense-browser-core 1.7.0 → 2.0.0-beta.0

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 (935) hide show
  1. package/LICENSE +1 -1
  2. package/cjs/boot/displayAlreadyInitializedError.js +6 -7
  3. package/cjs/boot/displayAlreadyInitializedError.js.map +1 -1
  4. package/cjs/boot/init.d.ts +1 -0
  5. package/cjs/boot/init.js +26 -34
  6. package/cjs/boot/init.js.map +1 -1
  7. package/cjs/browser/addEventListener.d.ts +12 -9
  8. package/cjs/browser/addEventListener.js +107 -50
  9. package/cjs/browser/addEventListener.js.map +1 -1
  10. package/cjs/browser/browser.types.d.ts +0 -24
  11. package/cjs/browser/cookie.d.ts +4 -1
  12. package/cjs/browser/cookie.js +76 -89
  13. package/cjs/browser/cookie.js.map +1 -1
  14. package/cjs/browser/cookieAccess.d.ts +18 -0
  15. package/cjs/browser/cookieAccess.js +129 -0
  16. package/cjs/browser/cookieAccess.js.map +1 -0
  17. package/cjs/browser/fetch.d.ts +9 -0
  18. package/cjs/browser/fetch.js +18 -0
  19. package/cjs/browser/fetch.js.map +1 -0
  20. package/cjs/browser/fetchObservable.d.ts +3 -3
  21. package/cjs/browser/fetchObservable.js +79 -92
  22. package/cjs/browser/fetchObservable.js.map +1 -1
  23. package/cjs/browser/pageMayExitObservable.d.ts +1 -2
  24. package/cjs/browser/pageMayExitObservable.js +53 -51
  25. package/cjs/browser/pageMayExitObservable.js.map +1 -1
  26. package/cjs/browser/runOnReadyState.d.ts +2 -3
  27. package/cjs/browser/runOnReadyState.js +18 -17
  28. package/cjs/browser/runOnReadyState.js.map +1 -1
  29. package/cjs/browser/webSocketObservable.d.ts +44 -0
  30. package/cjs/browser/webSocketObservable.js +92 -0
  31. package/cjs/browser/webSocketObservable.js.map +1 -0
  32. package/cjs/browser/xhrObservable.d.ts +8 -3
  33. package/cjs/browser/xhrObservable.js +64 -77
  34. package/cjs/browser/xhrObservable.js.map +1 -1
  35. package/cjs/domain/allowedTrackingOrigins.d.ts +2 -2
  36. package/cjs/domain/allowedTrackingOrigins.js +27 -23
  37. package/cjs/domain/allowedTrackingOrigins.js.map +1 -1
  38. package/cjs/domain/bufferedData.d.ts +20 -6
  39. package/cjs/domain/bufferedData.js +41 -19
  40. package/cjs/domain/bufferedData.js.map +1 -1
  41. package/cjs/domain/configuration/configuration.d.ts +169 -76
  42. package/cjs/domain/configuration/configuration.js +159 -128
  43. package/cjs/domain/configuration/configuration.js.map +1 -1
  44. package/cjs/domain/configuration/index.d.ts +5 -7
  45. package/cjs/domain/configuration/remoteSdkConfig.d.ts +26 -6
  46. package/cjs/domain/configuration/remoteSdkConfig.js +152 -159
  47. package/cjs/domain/configuration/remoteSdkConfig.js.map +1 -1
  48. package/cjs/domain/connectivity/connectivity.d.ts +2 -10
  49. package/cjs/domain/connectivity/connectivity.js +13 -13
  50. package/cjs/domain/connectivity/connectivity.js.map +1 -1
  51. package/cjs/domain/console/consoleObservable.d.ts +1 -1
  52. package/cjs/domain/console/consoleObservable.js +62 -74
  53. package/cjs/domain/console/consoleObservable.js.map +1 -1
  54. package/cjs/domain/context/contextConstants.js +24 -15
  55. package/cjs/domain/context/contextConstants.js.map +1 -1
  56. package/cjs/domain/context/contextManager.js +49 -53
  57. package/cjs/domain/context/contextManager.js.map +1 -1
  58. package/cjs/domain/context/contextUtils.js +11 -12
  59. package/cjs/domain/context/contextUtils.js.map +1 -1
  60. package/cjs/domain/context/defineContextMethod.d.ts +2 -2
  61. package/cjs/domain/context/defineContextMethod.js +15 -16
  62. package/cjs/domain/context/defineContextMethod.js.map +1 -1
  63. package/cjs/domain/context/storeContextManager.d.ts +1 -2
  64. package/cjs/domain/context/storeContextManager.js +31 -33
  65. package/cjs/domain/context/storeContextManager.js.map +1 -1
  66. package/cjs/domain/contexts/accountContext.d.ts +2 -2
  67. package/cjs/domain/contexts/accountContext.js +26 -29
  68. package/cjs/domain/contexts/accountContext.js.map +1 -1
  69. package/cjs/domain/contexts/globalContext.d.ts +2 -2
  70. package/cjs/domain/contexts/globalContext.js +17 -17
  71. package/cjs/domain/contexts/globalContext.js.map +1 -1
  72. package/cjs/domain/contexts/tabContext.d.ts +4 -0
  73. package/cjs/domain/contexts/tabContext.js +28 -0
  74. package/cjs/domain/contexts/tabContext.js.map +1 -0
  75. package/cjs/domain/contexts/telemetrySessionContext.d.ts +4 -0
  76. package/cjs/domain/contexts/telemetrySessionContext.js +17 -0
  77. package/cjs/domain/contexts/telemetrySessionContext.js.map +1 -0
  78. package/cjs/domain/contexts/userContext.d.ts +8 -3
  79. package/cjs/domain/contexts/userContext.js +79 -114
  80. package/cjs/domain/contexts/userContext.js.map +1 -1
  81. package/cjs/domain/deflate/deflate.types.js +11 -2
  82. package/cjs/domain/deflate/deflate.types.js.map +1 -1
  83. package/cjs/domain/error/error.d.ts +14 -6
  84. package/cjs/domain/error/error.js +101 -70
  85. package/cjs/domain/error/error.js.map +1 -1
  86. package/cjs/domain/error/error.types.d.ts +6 -4
  87. package/cjs/domain/error/error.types.js +24 -11
  88. package/cjs/domain/error/error.types.js.map +1 -1
  89. package/cjs/domain/error/isError.d.ts +2 -0
  90. package/cjs/domain/error/isError.js +14 -0
  91. package/cjs/domain/error/isError.js.map +1 -0
  92. package/cjs/domain/error/trackRuntimeError.d.ts +3 -2
  93. package/cjs/domain/error/trackRuntimeError.js +44 -41
  94. package/cjs/domain/error/trackRuntimeError.js.map +1 -1
  95. package/cjs/domain/eventRateLimiter/createEventRateLimiter.d.ts +1 -2
  96. package/cjs/domain/eventRateLimiter/createEventRateLimiter.js +28 -38
  97. package/cjs/domain/eventRateLimiter/createEventRateLimiter.js.map +1 -1
  98. package/cjs/domain/extension/extensionUtils.js +20 -25
  99. package/cjs/domain/extension/extensionUtils.js.map +1 -1
  100. package/cjs/domain/geo/geocoding.js +64 -0
  101. package/cjs/domain/geo/geocoding.js.map +1 -0
  102. package/cjs/domain/geo/geolocation.js +72 -0
  103. package/cjs/domain/geo/geolocation.js.map +1 -0
  104. package/cjs/domain/report/reportObservable.d.ts +1 -2
  105. package/cjs/domain/report/reportObservable.js +76 -85
  106. package/cjs/domain/report/reportObservable.js.map +1 -1
  107. package/cjs/domain/resourceUtils.d.ts +1 -0
  108. package/cjs/domain/resourceUtils.js +20 -17
  109. package/cjs/domain/resourceUtils.js.map +1 -1
  110. package/cjs/domain/sampler.d.ts +11 -0
  111. package/cjs/domain/sampler.js +40 -0
  112. package/cjs/domain/sampler.js.map +1 -0
  113. package/cjs/domain/session/sessionConstants.d.ts +1 -0
  114. package/cjs/domain/session/sessionConstants.js +19 -13
  115. package/cjs/domain/session/sessionConstants.js.map +1 -1
  116. package/cjs/domain/session/sessionManager.d.ts +21 -13
  117. package/cjs/domain/session/sessionManager.js +254 -191
  118. package/cjs/domain/session/sessionManager.js.map +1 -1
  119. package/cjs/domain/session/sessionState.d.ts +10 -1
  120. package/cjs/domain/session/sessionState.js +72 -56
  121. package/cjs/domain/session/sessionState.js.map +1 -1
  122. package/cjs/domain/session/sessionStateValidation.js +7 -8
  123. package/cjs/domain/session/sessionStateValidation.js.map +1 -1
  124. package/cjs/domain/session/sessionStore.d.ts +4 -33
  125. package/cjs/domain/session/sessionStore.js +41 -181
  126. package/cjs/domain/session/sessionStore.js.map +1 -1
  127. package/cjs/domain/session/storeStrategies/sessionInCookie.d.ts +7 -11
  128. package/cjs/domain/session/storeStrategies/sessionInCookie.js +90 -96
  129. package/cjs/domain/session/storeStrategies/sessionInCookie.js.map +1 -1
  130. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.d.ts +1 -4
  131. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js +39 -38
  132. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js.map +1 -1
  133. package/cjs/domain/session/storeStrategies/sessionInMemory.d.ts +12 -0
  134. package/cjs/domain/session/storeStrategies/sessionInMemory.js +36 -0
  135. package/cjs/domain/session/storeStrategies/sessionInMemory.js.map +1 -0
  136. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.d.ts +16 -7
  137. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js +7 -4
  138. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js.map +1 -1
  139. package/cjs/domain/sourceCodeContext.d.ts +22 -0
  140. package/cjs/domain/sourceCodeContext.js +56 -0
  141. package/cjs/domain/sourceCodeContext.js.map +1 -0
  142. package/cjs/domain/synthetics/syntheticsWorkerValues.d.ts +9 -3
  143. package/cjs/domain/synthetics/syntheticsWorkerValues.js +37 -25
  144. package/cjs/domain/synthetics/syntheticsWorkerValues.js.map +1 -1
  145. package/cjs/domain/tags.d.ts +1 -2
  146. package/cjs/domain/tags.js +23 -57
  147. package/cjs/domain/tags.js.map +1 -1
  148. package/cjs/domain/telemetry/rawTelemetryEvent.types.js +8 -7
  149. package/cjs/domain/telemetry/rawTelemetryEvent.types.js.map +1 -1
  150. package/cjs/domain/telemetry/telemetry.d.ts +7 -8
  151. package/cjs/domain/telemetry/telemetry.js +192 -215
  152. package/cjs/domain/telemetry/telemetry.js.map +1 -1
  153. package/cjs/domain/telemetry/telemetryEvent.types.d.ts +161 -16
  154. package/cjs/domain/trackingConsent.d.ts +1 -0
  155. package/cjs/domain/trackingConsent.js +35 -24
  156. package/cjs/domain/trackingConsent.js.map +1 -1
  157. package/cjs/domain/userAgentData/userAgentData.js +65 -96
  158. package/cjs/domain/userAgentData/userAgentData.js.map +1 -1
  159. package/cjs/index.d.ts +34 -30
  160. package/cjs/index.js +297 -213
  161. package/cjs/tools/abstractLifeCycle.js +19 -26
  162. package/cjs/tools/abstractLifeCycle.js.map +1 -1
  163. package/cjs/tools/catchUserErrors.js +12 -12
  164. package/cjs/tools/catchUserErrors.js.map +1 -1
  165. package/cjs/tools/display.d.ts +1 -37
  166. package/cjs/tools/display.js +8 -43
  167. package/cjs/tools/display.js.map +1 -1
  168. package/cjs/tools/encoder.js +36 -37
  169. package/cjs/tools/encoder.js.map +1 -1
  170. package/cjs/tools/experimentalFeatures.d.ts +1 -4
  171. package/cjs/tools/experimentalFeatures.js +29 -40
  172. package/cjs/tools/experimentalFeatures.js.map +1 -1
  173. package/cjs/tools/getZoneJsOriginalValue.d.ts +1 -1
  174. package/cjs/tools/getZoneJsOriginalValue.js +22 -25
  175. package/cjs/tools/getZoneJsOriginalValue.js.map +1 -1
  176. package/cjs/tools/instrumentMethod.d.ts +57 -0
  177. package/cjs/tools/instrumentMethod.js +179 -112
  178. package/cjs/tools/instrumentMethod.js.map +1 -1
  179. package/cjs/tools/matchOption.d.ts +0 -1
  180. package/cjs/tools/matchOption.js +21 -31
  181. package/cjs/tools/matchOption.js.map +1 -1
  182. package/cjs/tools/mockable.d.ts +22 -0
  183. package/cjs/tools/mockable.js +28 -0
  184. package/cjs/tools/mockable.js.map +1 -0
  185. package/cjs/tools/observable.d.ts +3 -1
  186. package/cjs/tools/observable.js +75 -85
  187. package/cjs/tools/observable.js.map +1 -1
  188. package/cjs/tools/queueMicrotask.js +9 -14
  189. package/cjs/tools/queueMicrotask.js.map +1 -1
  190. package/cjs/tools/readBytesFromStream.d.ts +1 -6
  191. package/cjs/tools/readBytesFromStream.js +18 -25
  192. package/cjs/tools/readBytesFromStream.js.map +1 -1
  193. package/cjs/tools/requestIdleCallback.js +23 -29
  194. package/cjs/tools/requestIdleCallback.js.map +1 -1
  195. package/cjs/tools/sendToExtension.js +10 -8
  196. package/cjs/tools/sendToExtension.js.map +1 -1
  197. package/cjs/tools/serialisation/jsonStringify.js +37 -42
  198. package/cjs/tools/serialisation/jsonStringify.js.map +1 -1
  199. package/cjs/tools/serialisation/sanitize.d.ts +1 -0
  200. package/cjs/tools/serialisation/sanitize.js +112 -167
  201. package/cjs/tools/serialisation/sanitize.js.map +1 -1
  202. package/cjs/tools/serialisation/stringify.d.ts +2 -0
  203. package/cjs/tools/serialisation/stringify.js +18 -0
  204. package/cjs/tools/serialisation/stringify.js.map +1 -0
  205. package/cjs/tools/stackTrace/computeStackTrace.js +121 -159
  206. package/cjs/tools/stackTrace/computeStackTrace.js.map +1 -1
  207. package/cjs/tools/stackTrace/handlingStack.d.ts +1 -1
  208. package/cjs/tools/stackTrace/handlingStack.js +39 -38
  209. package/cjs/tools/stackTrace/handlingStack.js.map +1 -1
  210. package/cjs/tools/taskQueue.js +40 -49
  211. package/cjs/tools/taskQueue.js.map +1 -1
  212. package/cjs/tools/thenable.d.ts +8 -0
  213. package/cjs/tools/thenable.js +27 -0
  214. package/cjs/tools/thenable.js.map +1 -0
  215. package/cjs/tools/timer.d.ts +2 -1
  216. package/cjs/tools/timer.js +14 -13
  217. package/cjs/tools/timer.js.map +1 -1
  218. package/cjs/tools/utils/arrayUtils.d.ts +1 -0
  219. package/cjs/tools/utils/arrayUtils.js +17 -13
  220. package/cjs/tools/utils/arrayUtils.js.map +1 -1
  221. package/cjs/tools/utils/browserDetection.d.ts +1 -0
  222. package/cjs/tools/utils/browserDetection.js +25 -23
  223. package/cjs/tools/utils/browserDetection.js.map +1 -1
  224. package/cjs/tools/utils/byteUtils.js +20 -28
  225. package/cjs/tools/utils/byteUtils.js.map +1 -1
  226. package/cjs/tools/utils/functionUtils.js +33 -40
  227. package/cjs/tools/utils/functionUtils.js.map +1 -1
  228. package/cjs/tools/utils/numberUtils.d.ts +0 -6
  229. package/cjs/tools/utils/numberUtils.js +7 -18
  230. package/cjs/tools/utils/numberUtils.js.map +1 -1
  231. package/cjs/tools/utils/objectUtils.d.ts +2 -0
  232. package/cjs/tools/utils/objectUtils.js +27 -14
  233. package/cjs/tools/utils/objectUtils.js.map +1 -1
  234. package/cjs/tools/utils/polyfills.js +12 -16
  235. package/cjs/tools/utils/polyfills.js.map +1 -1
  236. package/cjs/tools/utils/responseUtils.js +11 -12
  237. package/cjs/tools/utils/responseUtils.js.map +1 -1
  238. package/cjs/tools/utils/stringUtils.d.ts +9 -0
  239. package/cjs/tools/utils/stringUtils.js +73 -77
  240. package/cjs/tools/utils/stringUtils.js.map +1 -1
  241. package/cjs/tools/utils/timezone.js +9 -10
  242. package/cjs/tools/utils/timezone.js.map +1 -1
  243. package/cjs/tools/valueHistory.d.ts +16 -3
  244. package/cjs/tools/valueHistory.js +113 -99
  245. package/cjs/tools/valueHistory.js.map +1 -1
  246. package/cjs/transport/batch.d.ts +11 -7
  247. package/cjs/transport/batch.js +93 -106
  248. package/cjs/transport/batch.js.map +1 -1
  249. package/cjs/transport/eventBridge.d.ts +6 -2
  250. package/cjs/transport/eventBridge.js +54 -38
  251. package/cjs/transport/eventBridge.js.map +1 -1
  252. package/cjs/transport/flushController.d.ts +6 -15
  253. package/cjs/transport/flushController.js +99 -118
  254. package/cjs/transport/flushController.js.map +1 -1
  255. package/cjs/transport/httpRequest.d.ts +8 -9
  256. package/cjs/transport/httpRequest.js +61 -97
  257. package/cjs/transport/httpRequest.js.map +1 -1
  258. package/cjs/transport/index.d.ts +3 -2
  259. package/cjs/transport/sendWithRetryStrategy.d.ts +9 -4
  260. package/cjs/transport/sendWithRetryStrategy.js +144 -148
  261. package/cjs/transport/sendWithRetryStrategy.js.map +1 -1
  262. package/esm/boot/displayAlreadyInitializedError.mjs +9 -0
  263. package/esm/boot/displayAlreadyInitializedError.mjs.map +1 -0
  264. package/esm/boot/init.mjs +30 -0
  265. package/esm/boot/init.mjs.map +1 -0
  266. package/esm/browser/addEventListener.mjs +107 -0
  267. package/esm/browser/addEventListener.mjs.map +1 -0
  268. package/esm/browser/cookie.mjs +92 -0
  269. package/esm/browser/cookie.mjs.map +1 -0
  270. package/esm/browser/cookieAccess.mjs +124 -0
  271. package/esm/browser/cookieAccess.mjs.map +1 -0
  272. package/esm/browser/fetch.mjs +18 -0
  273. package/esm/browser/fetch.mjs.map +1 -0
  274. package/esm/browser/fetchObservable.mjs +89 -0
  275. package/esm/browser/fetchObservable.mjs.map +1 -0
  276. package/esm/browser/pageMayExitObservable.mjs +56 -0
  277. package/esm/browser/pageMayExitObservable.mjs.map +1 -0
  278. package/esm/browser/runOnReadyState.mjs +19 -0
  279. package/esm/browser/runOnReadyState.mjs.map +1 -0
  280. package/esm/browser/webSocketObservable.mjs +92 -0
  281. package/esm/browser/webSocketObservable.mjs.map +1 -0
  282. package/esm/browser/xhrObservable.mjs +73 -0
  283. package/esm/browser/xhrObservable.mjs.map +1 -0
  284. package/esm/domain/allowedTrackingOrigins.mjs +27 -0
  285. package/esm/domain/allowedTrackingOrigins.mjs.map +1 -0
  286. package/esm/domain/bufferedData.mjs +43 -0
  287. package/esm/domain/bufferedData.mjs.map +1 -0
  288. package/esm/domain/configuration/configuration.mjs +163 -0
  289. package/esm/domain/configuration/configuration.mjs.map +1 -0
  290. package/esm/domain/configuration/remoteSdkConfig.mjs +163 -0
  291. package/esm/domain/configuration/remoteSdkConfig.mjs.map +1 -0
  292. package/esm/domain/connectivity/connectivity.mjs +16 -0
  293. package/esm/domain/connectivity/connectivity.mjs.map +1 -0
  294. package/esm/domain/console/consoleObservable.mjs +72 -0
  295. package/esm/domain/console/consoleObservable.mjs.map +1 -0
  296. package/esm/domain/context/contextConstants.mjs +25 -0
  297. package/esm/domain/context/contextConstants.mjs.map +1 -0
  298. package/esm/domain/context/contextManager.mjs +55 -0
  299. package/esm/domain/context/contextManager.mjs.map +1 -0
  300. package/esm/domain/context/contextUtils.mjs +15 -0
  301. package/esm/domain/context/contextUtils.mjs.map +1 -0
  302. package/esm/domain/context/defineContextMethod.mjs +19 -0
  303. package/esm/domain/context/defineContextMethod.mjs.map +1 -0
  304. package/esm/domain/context/storeContextManager.mjs +36 -0
  305. package/esm/domain/context/storeContextManager.mjs.map +1 -0
  306. package/esm/domain/contexts/accountContext.mjs +29 -0
  307. package/esm/domain/contexts/accountContext.mjs.map +1 -0
  308. package/esm/domain/contexts/globalContext.mjs +20 -0
  309. package/esm/domain/contexts/globalContext.mjs.map +1 -0
  310. package/esm/domain/contexts/tabContext.mjs +27 -0
  311. package/esm/domain/contexts/tabContext.mjs.map +1 -0
  312. package/esm/domain/contexts/telemetrySessionContext.mjs +17 -0
  313. package/esm/domain/contexts/telemetrySessionContext.mjs.map +1 -0
  314. package/esm/domain/contexts/userContext.mjs +88 -0
  315. package/esm/domain/contexts/userContext.mjs.map +1 -0
  316. package/esm/domain/deflate/deflate.types.mjs +12 -0
  317. package/esm/domain/deflate/deflate.types.mjs.map +1 -0
  318. package/esm/domain/error/error.mjs +104 -0
  319. package/esm/domain/error/error.mjs.map +1 -0
  320. package/esm/domain/error/error.types.mjs +24 -0
  321. package/esm/domain/error/error.types.mjs.map +1 -0
  322. package/esm/domain/error/isError.mjs +13 -0
  323. package/esm/domain/error/isError.mjs.map +1 -0
  324. package/esm/domain/error/trackRuntimeError.mjs +49 -0
  325. package/esm/domain/error/trackRuntimeError.mjs.map +1 -0
  326. package/esm/domain/eventRateLimiter/createEventRateLimiter.mjs +31 -0
  327. package/esm/domain/eventRateLimiter/createEventRateLimiter.mjs.map +1 -0
  328. package/esm/domain/extension/extensionUtils.mjs +23 -0
  329. package/esm/domain/extension/extensionUtils.mjs.map +1 -0
  330. package/esm/domain/geo/geocoding.mjs +60 -0
  331. package/esm/domain/geo/geocoding.mjs.map +1 -0
  332. package/esm/domain/geo/geolocation.mjs +69 -0
  333. package/esm/domain/geo/geolocation.mjs.map +1 -0
  334. package/esm/domain/report/reportObservable.mjs +89 -0
  335. package/esm/domain/report/reportObservable.mjs.map +1 -0
  336. package/esm/domain/resourceUtils.mjs +22 -0
  337. package/esm/domain/resourceUtils.mjs.map +1 -0
  338. package/esm/domain/sampler.mjs +37 -0
  339. package/esm/domain/sampler.mjs.map +1 -0
  340. package/esm/domain/session/sessionConstants.mjs +18 -0
  341. package/esm/domain/session/sessionConstants.mjs.map +1 -0
  342. package/esm/domain/session/sessionManager.mjs +258 -0
  343. package/esm/domain/session/sessionManager.mjs.map +1 -0
  344. package/esm/domain/session/sessionState.mjs +76 -0
  345. package/esm/domain/session/sessionState.mjs.map +1 -0
  346. package/esm/domain/session/sessionStateValidation.mjs +9 -0
  347. package/esm/domain/session/sessionStateValidation.mjs.map +1 -0
  348. package/esm/domain/session/sessionStore.mjs +45 -0
  349. package/esm/domain/session/sessionStore.mjs.map +1 -0
  350. package/esm/domain/session/storeStrategies/sessionInCookie.mjs +96 -0
  351. package/esm/domain/session/storeStrategies/sessionInCookie.mjs.map +1 -0
  352. package/esm/domain/session/storeStrategies/sessionInLocalStorage.mjs +42 -0
  353. package/esm/domain/session/storeStrategies/sessionInLocalStorage.mjs.map +1 -0
  354. package/esm/domain/session/storeStrategies/sessionInMemory.mjs +34 -0
  355. package/esm/domain/session/storeStrategies/sessionInMemory.mjs.map +1 -0
  356. package/esm/domain/session/storeStrategies/sessionStoreStrategy.mjs +7 -0
  357. package/esm/domain/session/storeStrategies/sessionStoreStrategy.mjs.map +1 -0
  358. package/esm/domain/sourceCodeContext.mjs +55 -0
  359. package/esm/domain/sourceCodeContext.mjs.map +1 -0
  360. package/esm/domain/synthetics/syntheticsWorkerValues.mjs +37 -0
  361. package/esm/domain/synthetics/syntheticsWorkerValues.mjs.map +1 -0
  362. package/esm/domain/tags.mjs +29 -0
  363. package/esm/domain/tags.mjs.map +1 -0
  364. package/esm/domain/telemetry/rawTelemetryEvent.types.mjs +10 -0
  365. package/esm/domain/telemetry/rawTelemetryEvent.types.mjs.map +1 -0
  366. package/esm/domain/telemetry/telemetry.mjs +210 -0
  367. package/esm/domain/telemetry/telemetry.mjs.map +1 -0
  368. package/esm/domain/trackingConsent.mjs +38 -0
  369. package/esm/domain/trackingConsent.mjs.map +1 -0
  370. package/esm/domain/userAgentData/userAgentData.mjs +77 -0
  371. package/esm/domain/userAgentData/userAgentData.mjs.map +1 -0
  372. package/esm/index.mjs +85 -0
  373. package/esm/tools/abstractLifeCycle.mjs +21 -0
  374. package/esm/tools/abstractLifeCycle.mjs.map +1 -0
  375. package/esm/tools/catchUserErrors.mjs +15 -0
  376. package/esm/tools/catchUserErrors.mjs.map +1 -0
  377. package/esm/tools/display.mjs +8 -0
  378. package/esm/tools/display.mjs.map +1 -0
  379. package/esm/tools/encoder.mjs +39 -0
  380. package/esm/tools/encoder.mjs.map +1 -0
  381. package/esm/tools/experimentalFeatures.mjs +35 -0
  382. package/esm/tools/experimentalFeatures.mjs.map +1 -0
  383. package/esm/tools/getZoneJsOriginalValue.mjs +26 -0
  384. package/esm/tools/getZoneJsOriginalValue.mjs.map +1 -0
  385. package/esm/tools/instrumentMethod.mjs +183 -0
  386. package/esm/tools/instrumentMethod.mjs.map +1 -0
  387. package/esm/tools/matchOption.mjs +25 -0
  388. package/esm/tools/matchOption.mjs.map +1 -0
  389. package/esm/tools/mockable.mjs +28 -0
  390. package/esm/tools/mockable.mjs.map +1 -0
  391. package/esm/tools/observable.mjs +77 -0
  392. package/esm/tools/observable.mjs.map +1 -0
  393. package/esm/tools/queueMicrotask.mjs +12 -0
  394. package/esm/tools/queueMicrotask.mjs.map +1 -0
  395. package/esm/tools/readBytesFromStream.mjs +21 -0
  396. package/esm/tools/readBytesFromStream.mjs.map +1 -0
  397. package/esm/tools/requestIdleCallback.mjs +28 -0
  398. package/esm/tools/requestIdleCallback.mjs.map +1 -0
  399. package/esm/tools/sendToExtension.mjs +13 -0
  400. package/esm/tools/sendToExtension.mjs.map +1 -0
  401. package/esm/tools/serialisation/jsonStringify.mjs +42 -0
  402. package/esm/tools/serialisation/jsonStringify.mjs.map +1 -0
  403. package/esm/tools/serialisation/sanitize.mjs +132 -0
  404. package/esm/tools/serialisation/sanitize.mjs.map +1 -0
  405. package/esm/tools/serialisation/stringify.mjs +17 -0
  406. package/esm/tools/serialisation/stringify.mjs.map +1 -0
  407. package/esm/tools/stackTrace/computeStackTrace.mjs +148 -0
  408. package/esm/tools/stackTrace/computeStackTrace.mjs.map +1 -0
  409. package/esm/tools/stackTrace/handlingStack.mjs +45 -0
  410. package/esm/tools/stackTrace/handlingStack.mjs.map +1 -0
  411. package/esm/tools/taskQueue.mjs +45 -0
  412. package/esm/tools/taskQueue.mjs.map +1 -0
  413. package/esm/tools/thenable.mjs +24 -0
  414. package/esm/tools/thenable.mjs.map +1 -0
  415. package/esm/tools/timer.mjs +20 -0
  416. package/esm/tools/timer.mjs.map +1 -0
  417. package/esm/tools/utils/arrayUtils.mjs +21 -0
  418. package/esm/tools/utils/arrayUtils.mjs.map +1 -0
  419. package/esm/tools/utils/browserDetection.mjs +31 -0
  420. package/esm/tools/utils/browserDetection.mjs.map +1 -0
  421. package/esm/tools/utils/byteUtils.mjs +23 -0
  422. package/esm/tools/utils/byteUtils.mjs.map +1 -0
  423. package/esm/tools/utils/functionUtils.mjs +35 -0
  424. package/esm/tools/utils/functionUtils.mjs.map +1 -0
  425. package/esm/tools/utils/numberUtils.mjs +11 -0
  426. package/esm/tools/utils/numberUtils.mjs.map +1 -0
  427. package/esm/tools/utils/objectUtils.mjs +31 -0
  428. package/esm/tools/utils/objectUtils.mjs.map +1 -0
  429. package/esm/tools/utils/polyfills.mjs +17 -0
  430. package/esm/tools/utils/polyfills.mjs.map +1 -0
  431. package/esm/tools/utils/responseUtils.mjs +15 -0
  432. package/esm/tools/utils/responseUtils.mjs.map +1 -0
  433. package/esm/tools/utils/stringUtils.mjs +81 -0
  434. package/esm/tools/utils/stringUtils.mjs.map +1 -0
  435. package/esm/tools/utils/timezone.mjs +12 -0
  436. package/esm/tools/utils/timezone.mjs.map +1 -0
  437. package/esm/tools/valueHistory.mjs +117 -0
  438. package/esm/tools/valueHistory.mjs.map +1 -0
  439. package/esm/transport/batch.mjs +96 -0
  440. package/esm/transport/batch.mjs.map +1 -0
  441. package/esm/transport/eventBridge.mjs +58 -0
  442. package/esm/transport/eventBridge.mjs.map +1 -0
  443. package/esm/transport/flushController.mjs +103 -0
  444. package/esm/transport/flushController.mjs.map +1 -0
  445. package/esm/transport/httpRequest.mjs +69 -0
  446. package/esm/transport/httpRequest.mjs.map +1 -0
  447. package/esm/transport/sendWithRetryStrategy.mjs +154 -0
  448. package/esm/transport/sendWithRetryStrategy.mjs.map +1 -0
  449. package/package.json +20 -11
  450. package/src/boot/displayAlreadyInitializedError.ts +4 -1
  451. package/src/boot/init.ts +3 -2
  452. package/src/browser/addEventListener.ts +43 -8
  453. package/src/browser/browser.types.ts +0 -32
  454. package/src/browser/cookie.ts +45 -30
  455. package/src/browser/cookieAccess.ts +172 -0
  456. package/src/browser/fetch.ts +14 -0
  457. package/src/browser/fetchObservable.ts +25 -26
  458. package/src/browser/pageMayExitObservable.ts +9 -5
  459. package/src/browser/runOnReadyState.ts +3 -8
  460. package/src/browser/webSocketObservable.ts +181 -0
  461. package/src/browser/xhrObservable.ts +22 -13
  462. package/src/domain/allowedTrackingOrigins.ts +7 -6
  463. package/src/domain/bufferedData.ts +41 -14
  464. package/src/domain/configuration/configuration.ts +121 -171
  465. package/src/domain/configuration/index.ts +6 -7
  466. package/src/domain/configuration/remoteSdkConfig.ts +65 -16
  467. package/src/domain/connectivity/connectivity.ts +11 -23
  468. package/src/domain/console/consoleObservable.ts +9 -5
  469. package/src/domain/context/contextManager.ts +6 -2
  470. package/src/domain/context/contextUtils.ts +1 -1
  471. package/src/domain/context/defineContextMethod.ts +4 -4
  472. package/src/domain/context/storeContextManager.ts +9 -6
  473. package/src/domain/contexts/accountContext.ts +5 -5
  474. package/src/domain/contexts/globalContext.ts +4 -5
  475. package/src/domain/contexts/tabContext.ts +43 -0
  476. package/src/domain/contexts/telemetrySessionContext.ts +26 -0
  477. package/src/domain/contexts/userContext.ts +21 -16
  478. package/src/domain/error/error.ts +83 -35
  479. package/src/domain/error/error.types.ts +6 -4
  480. package/src/domain/error/isError.ts +13 -0
  481. package/src/domain/error/trackRuntimeError.ts +11 -4
  482. package/src/domain/eventRateLimiter/createEventRateLimiter.ts +3 -9
  483. package/src/{tools/utils → domain/geo}/geocoding.ts +7 -18
  484. package/src/{tools/utils → domain/geo}/geolocation.ts +1 -1
  485. package/src/domain/report/reportObservable.ts +15 -8
  486. package/src/domain/resourceUtils.ts +1 -0
  487. package/src/domain/sampler.ts +59 -0
  488. package/src/domain/session/sessionConstants.ts +2 -1
  489. package/src/domain/session/sessionManager.ts +347 -178
  490. package/src/domain/session/sessionState.ts +71 -10
  491. package/src/domain/session/sessionStore.ts +53 -226
  492. package/src/domain/session/storeStrategies/sessionInCookie.ts +122 -107
  493. package/src/domain/session/storeStrategies/sessionInLocalStorage.ts +33 -21
  494. package/src/domain/session/storeStrategies/sessionInMemory.ts +55 -0
  495. package/src/domain/session/storeStrategies/sessionStoreStrategy.ts +28 -6
  496. package/src/domain/sourceCodeContext.ts +100 -0
  497. package/src/domain/synthetics/syntheticsWorkerValues.ts +47 -15
  498. package/src/domain/tags.ts +5 -19
  499. package/src/domain/telemetry/rawTelemetryEvent.types.ts +1 -1
  500. package/src/domain/telemetry/telemetry.ts +44 -52
  501. package/src/domain/telemetry/telemetryEvent.types.ts +177 -19
  502. package/src/domain/trackingConsent.ts +18 -3
  503. package/src/domain/userAgentData/userAgentData.ts +1 -1
  504. package/src/index.ts +59 -43
  505. package/src/tools/display.ts +2 -52
  506. package/src/tools/experimentalFeatures.ts +3 -4
  507. package/src/tools/getZoneJsOriginalValue.ts +3 -3
  508. package/src/tools/instrumentMethod.ts +228 -18
  509. package/src/tools/matchOption.ts +2 -6
  510. package/src/tools/mockable.ts +32 -0
  511. package/src/tools/observable.ts +11 -2
  512. package/src/tools/queueMicrotask.ts +8 -3
  513. package/src/tools/readBytesFromStream.ts +3 -12
  514. package/src/tools/requestIdleCallback.ts +2 -2
  515. package/src/tools/sendToExtension.ts +1 -1
  516. package/src/tools/serialisation/sanitize.ts +71 -64
  517. package/src/tools/serialisation/stringify.ts +18 -0
  518. package/src/tools/stackTrace/computeStackTrace.ts +19 -19
  519. package/src/tools/stackTrace/handlingStack.ts +15 -2
  520. package/src/tools/taskQueue.ts +5 -3
  521. package/src/tools/thenable.ts +23 -0
  522. package/src/tools/timer.ts +8 -7
  523. package/src/tools/utils/arrayUtils.ts +8 -2
  524. package/src/tools/utils/browserDetection.ts +8 -0
  525. package/src/tools/utils/byteUtils.ts +2 -6
  526. package/src/tools/utils/functionUtils.ts +2 -2
  527. package/src/tools/utils/numberUtils.ts +0 -12
  528. package/src/tools/utils/objectUtils.ts +20 -0
  529. package/src/tools/utils/stringUtils.ts +23 -1
  530. package/src/tools/valueHistory.ts +59 -18
  531. package/src/transport/batch.ts +50 -31
  532. package/src/transport/eventBridge.ts +24 -10
  533. package/src/transport/flushController.ts +22 -30
  534. package/src/transport/httpRequest.ts +18 -47
  535. package/src/transport/index.ts +3 -2
  536. package/src/transport/sendWithRetryStrategy.ts +29 -17
  537. package/cjs/browser/browser.types.js +0 -6
  538. package/cjs/browser/browser.types.js.map +0 -1
  539. package/cjs/domain/configuration/endpointBuilder.d.ts +0 -12
  540. package/cjs/domain/configuration/endpointBuilder.js +0 -66
  541. package/cjs/domain/configuration/endpointBuilder.js.map +0 -1
  542. package/cjs/domain/configuration/index.js +0 -44
  543. package/cjs/domain/configuration/index.js.map +0 -1
  544. package/cjs/domain/configuration/transportConfiguration.d.ts +0 -21
  545. package/cjs/domain/configuration/transportConfiguration.js +0 -58
  546. package/cjs/domain/configuration/transportConfiguration.js.map +0 -1
  547. package/cjs/domain/connectivity/index.js +0 -18
  548. package/cjs/domain/connectivity/index.js.map +0 -1
  549. package/cjs/domain/contexts/rumInternalContext.type.js +0 -3
  550. package/cjs/domain/contexts/rumInternalContext.type.js.map +0 -1
  551. package/cjs/domain/deflate/index.js +0 -18
  552. package/cjs/domain/deflate/index.js.map +0 -1
  553. package/cjs/domain/intakeSites.d.ts +0 -4
  554. package/cjs/domain/intakeSites.js +0 -7
  555. package/cjs/domain/intakeSites.js.map +0 -1
  556. package/cjs/domain/report/browser.types.js +0 -3
  557. package/cjs/domain/report/browser.types.js.map +0 -1
  558. package/cjs/domain/session/oldCookiesMigration.d.ts +0 -11
  559. package/cjs/domain/session/oldCookiesMigration.js +0 -40
  560. package/cjs/domain/session/oldCookiesMigration.js.map +0 -1
  561. package/cjs/domain/session/sessionStoreOperations.d.ts +0 -12
  562. package/cjs/domain/session/sessionStoreOperations.js +0 -119
  563. package/cjs/domain/session/sessionStoreOperations.js.map +0 -1
  564. package/cjs/domain/telemetry/index.js +0 -28
  565. package/cjs/domain/telemetry/index.js.map +0 -1
  566. package/cjs/domain/telemetry/telemetryEvent.types.js +0 -7
  567. package/cjs/domain/telemetry/telemetryEvent.types.js.map +0 -1
  568. package/cjs/domain/userAgentData/index.js +0 -18
  569. package/cjs/domain/userAgentData/index.js.map +0 -1
  570. package/cjs/index.js.map +0 -1
  571. package/cjs/tools/abstractHooks.d.ts +0 -24
  572. package/cjs/tools/abstractHooks.js +0 -41
  573. package/cjs/tools/abstractHooks.js.map +0 -1
  574. package/cjs/tools/boundedBuffer.d.ts +0 -16
  575. package/cjs/tools/boundedBuffer.js +0 -32
  576. package/cjs/tools/boundedBuffer.js.map +0 -1
  577. package/cjs/tools/globalObject.d.ts +0 -19
  578. package/cjs/tools/globalObject.js +0 -44
  579. package/cjs/tools/globalObject.js.map +0 -1
  580. package/cjs/tools/mergeInto.d.ts +0 -25
  581. package/cjs/tools/mergeInto.js +0 -98
  582. package/cjs/tools/mergeInto.js.map +0 -1
  583. package/cjs/tools/monitor.d.ts +0 -9
  584. package/cjs/tools/monitor.js +0 -61
  585. package/cjs/tools/monitor.js.map +0 -1
  586. package/cjs/tools/serialisation/context.js +0 -3
  587. package/cjs/tools/serialisation/context.js.map +0 -1
  588. package/cjs/tools/utils/geocoding.js +0 -80
  589. package/cjs/tools/utils/geocoding.js.map +0 -1
  590. package/cjs/tools/utils/geolocation.js +0 -77
  591. package/cjs/tools/utils/geolocation.js.map +0 -1
  592. package/cjs/tools/utils/timeUtils.d.ts +0 -53
  593. package/cjs/tools/utils/timeUtils.js +0 -101
  594. package/cjs/tools/utils/timeUtils.js.map +0 -1
  595. package/cjs/tools/utils/typeUtils.d.ts +0 -4
  596. package/cjs/tools/utils/typeUtils.js +0 -16
  597. package/cjs/tools/utils/typeUtils.js.map +0 -1
  598. package/cjs/tools/utils/urlPolyfill.d.ts +0 -5
  599. package/cjs/tools/utils/urlPolyfill.js +0 -59
  600. package/cjs/tools/utils/urlPolyfill.js.map +0 -1
  601. package/cjs/transport/index.js +0 -15
  602. package/cjs/transport/index.js.map +0 -1
  603. package/esm/boot/displayAlreadyInitializedError.d.ts +0 -2
  604. package/esm/boot/displayAlreadyInitializedError.js +0 -7
  605. package/esm/boot/displayAlreadyInitializedError.js.map +0 -1
  606. package/esm/boot/init.d.ts +0 -13
  607. package/esm/boot/init.js +0 -35
  608. package/esm/boot/init.js.map +0 -1
  609. package/esm/browser/addEventListener.d.ts +0 -87
  610. package/esm/browser/addEventListener.js +0 -51
  611. package/esm/browser/addEventListener.js.map +0 -1
  612. package/esm/browser/browser.types.d.ts +0 -51
  613. package/esm/browser/browser.types.js +0 -5
  614. package/esm/browser/browser.types.js.map +0 -1
  615. package/esm/browser/cookie.d.ts +0 -26
  616. package/esm/browser/cookie.js +0 -101
  617. package/esm/browser/cookie.js.map +0 -1
  618. package/esm/browser/fetchObservable.d.ts +0 -38
  619. package/esm/browser/fetchObservable.js +0 -99
  620. package/esm/browser/fetchObservable.js.map +0 -1
  621. package/esm/browser/pageMayExitObservable.d.ts +0 -14
  622. package/esm/browser/pageMayExitObservable.js +0 -51
  623. package/esm/browser/pageMayExitObservable.js.map +0 -1
  624. package/esm/browser/runOnReadyState.d.ts +0 -5
  625. package/esm/browser/runOnReadyState.js +0 -16
  626. package/esm/browser/runOnReadyState.js.map +0 -1
  627. package/esm/browser/xhrObservable.d.ts +0 -24
  628. package/esm/browser/xhrObservable.js +0 -83
  629. package/esm/browser/xhrObservable.js.map +0 -1
  630. package/esm/domain/allowedTrackingOrigins.d.ts +0 -4
  631. package/esm/domain/allowedTrackingOrigins.js +0 -21
  632. package/esm/domain/allowedTrackingOrigins.js.map +0 -1
  633. package/esm/domain/bufferedData.d.ts +0 -14
  634. package/esm/domain/bufferedData.js +0 -19
  635. package/esm/domain/bufferedData.js.map +0 -1
  636. package/esm/domain/configuration/configuration.d.ts +0 -284
  637. package/esm/domain/configuration/configuration.js +0 -129
  638. package/esm/domain/configuration/configuration.js.map +0 -1
  639. package/esm/domain/configuration/endpointBuilder.d.ts +0 -12
  640. package/esm/domain/configuration/endpointBuilder.js +0 -62
  641. package/esm/domain/configuration/endpointBuilder.js.map +0 -1
  642. package/esm/domain/configuration/index.d.ts +0 -8
  643. package/esm/domain/configuration/index.js +0 -6
  644. package/esm/domain/configuration/index.js.map +0 -1
  645. package/esm/domain/configuration/remoteSdkConfig.d.ts +0 -81
  646. package/esm/domain/configuration/remoteSdkConfig.js +0 -172
  647. package/esm/domain/configuration/remoteSdkConfig.js.map +0 -1
  648. package/esm/domain/configuration/transportConfiguration.d.ts +0 -21
  649. package/esm/domain/configuration/transportConfiguration.js +0 -54
  650. package/esm/domain/configuration/transportConfiguration.js.map +0 -1
  651. package/esm/domain/connectivity/connectivity.d.ts +0 -18
  652. package/esm/domain/connectivity/connectivity.js +0 -13
  653. package/esm/domain/connectivity/connectivity.js.map +0 -1
  654. package/esm/domain/connectivity/index.d.ts +0 -1
  655. package/esm/domain/connectivity/index.js +0 -2
  656. package/esm/domain/connectivity/index.js.map +0 -1
  657. package/esm/domain/console/consoleObservable.d.ts +0 -21
  658. package/esm/domain/console/consoleObservable.js +0 -80
  659. package/esm/domain/console/consoleObservable.js.map +0 -1
  660. package/esm/domain/context/contextConstants.d.ts +0 -21
  661. package/esm/domain/context/contextConstants.js +0 -15
  662. package/esm/domain/context/contextConstants.js.map +0 -1
  663. package/esm/domain/context/contextManager.d.ts +0 -19
  664. package/esm/domain/context/contextManager.js +0 -56
  665. package/esm/domain/context/contextManager.js.map +0 -1
  666. package/esm/domain/context/contextUtils.d.ts +0 -5
  667. package/esm/domain/context/contextUtils.js +0 -13
  668. package/esm/domain/context/contextUtils.js.map +0 -1
  669. package/esm/domain/context/defineContextMethod.d.ts +0 -6
  670. package/esm/domain/context/defineContextMethod.js +0 -17
  671. package/esm/domain/context/defineContextMethod.js.map +0 -1
  672. package/esm/domain/context/storeContextManager.d.ts +0 -6
  673. package/esm/domain/context/storeContextManager.js +0 -35
  674. package/esm/domain/context/storeContextManager.js.map +0 -1
  675. package/esm/domain/contexts/accountContext.d.ts +0 -26
  676. package/esm/domain/contexts/accountContext.js +0 -29
  677. package/esm/domain/contexts/accountContext.js.map +0 -1
  678. package/esm/domain/contexts/globalContext.d.ts +0 -18
  679. package/esm/domain/contexts/globalContext.js +0 -17
  680. package/esm/domain/contexts/globalContext.js.map +0 -1
  681. package/esm/domain/contexts/rumInternalContext.type.d.ts +0 -14
  682. package/esm/domain/contexts/rumInternalContext.type.js +0 -2
  683. package/esm/domain/contexts/rumInternalContext.type.js.map +0 -1
  684. package/esm/domain/contexts/userContext.d.ts +0 -32
  685. package/esm/domain/contexts/userContext.js +0 -120
  686. package/esm/domain/contexts/userContext.js.map +0 -1
  687. package/esm/domain/deflate/deflate.types.d.ts +0 -40
  688. package/esm/domain/deflate/deflate.types.js +0 -2
  689. package/esm/domain/deflate/deflate.types.js.map +0 -1
  690. package/esm/domain/deflate/index.d.ts +0 -1
  691. package/esm/domain/deflate/index.js +0 -2
  692. package/esm/domain/deflate/index.js.map +0 -1
  693. package/esm/domain/error/error.d.ts +0 -23
  694. package/esm/domain/error/error.js +0 -72
  695. package/esm/domain/error/error.js.map +0 -1
  696. package/esm/domain/error/error.types.d.ts +0 -47
  697. package/esm/domain/error/error.types.js +0 -10
  698. package/esm/domain/error/error.types.js.map +0 -1
  699. package/esm/domain/error/trackRuntimeError.d.ts +0 -11
  700. package/esm/domain/error/trackRuntimeError.js +0 -43
  701. package/esm/domain/error/trackRuntimeError.js.map +0 -1
  702. package/esm/domain/eventRateLimiter/createEventRateLimiter.d.ts +0 -5
  703. package/esm/domain/eventRateLimiter/createEventRateLimiter.js +0 -38
  704. package/esm/domain/eventRateLimiter/createEventRateLimiter.js.map +0 -1
  705. package/esm/domain/extension/extensionUtils.d.ts +0 -10
  706. package/esm/domain/extension/extensionUtils.js +0 -25
  707. package/esm/domain/extension/extensionUtils.js.map +0 -1
  708. package/esm/domain/intakeSites.d.ts +0 -4
  709. package/esm/domain/intakeSites.js +0 -4
  710. package/esm/domain/intakeSites.js.map +0 -1
  711. package/esm/domain/report/browser.types.d.ts +0 -34
  712. package/esm/domain/report/browser.types.js +0 -2
  713. package/esm/domain/report/browser.types.js.map +0 -1
  714. package/esm/domain/report/reportObservable.d.ts +0 -14
  715. package/esm/domain/report/reportObservable.js +0 -95
  716. package/esm/domain/report/reportObservable.js.map +0 -1
  717. package/esm/domain/resourceUtils.d.ts +0 -18
  718. package/esm/domain/resourceUtils.js +0 -17
  719. package/esm/domain/resourceUtils.js.map +0 -1
  720. package/esm/domain/session/oldCookiesMigration.d.ts +0 -11
  721. package/esm/domain/session/oldCookiesMigration.js +0 -36
  722. package/esm/domain/session/oldCookiesMigration.js.map +0 -1
  723. package/esm/domain/session/sessionConstants.d.ts +0 -15
  724. package/esm/domain/session/sessionConstants.js +0 -13
  725. package/esm/domain/session/sessionConstants.js.map +0 -1
  726. package/esm/domain/session/sessionManager.d.ts +0 -28
  727. package/esm/domain/session/sessionManager.js +0 -196
  728. package/esm/domain/session/sessionManager.js.map +0 -1
  729. package/esm/domain/session/sessionState.d.ts +0 -16
  730. package/esm/domain/session/sessionState.js +0 -60
  731. package/esm/domain/session/sessionState.js.map +0 -1
  732. package/esm/domain/session/sessionStateValidation.d.ts +0 -3
  733. package/esm/domain/session/sessionStateValidation.js +0 -7
  734. package/esm/domain/session/sessionStateValidation.js.map +0 -1
  735. package/esm/domain/session/sessionStore.d.ts +0 -38
  736. package/esm/domain/session/sessionStore.js +0 -180
  737. package/esm/domain/session/sessionStore.js.map +0 -1
  738. package/esm/domain/session/sessionStoreOperations.d.ts +0 -12
  739. package/esm/domain/session/sessionStoreOperations.js +0 -114
  740. package/esm/domain/session/sessionStoreOperations.js.map +0 -1
  741. package/esm/domain/session/storeStrategies/sessionInCookie.d.ts +0 -12
  742. package/esm/domain/session/storeStrategies/sessionInCookie.js +0 -98
  743. package/esm/domain/session/storeStrategies/sessionInCookie.js.map +0 -1
  744. package/esm/domain/session/storeStrategies/sessionInLocalStorage.d.ts +0 -6
  745. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js +0 -37
  746. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js.map +0 -1
  747. package/esm/domain/session/storeStrategies/sessionStoreStrategy.d.ts +0 -16
  748. package/esm/domain/session/storeStrategies/sessionStoreStrategy.js +0 -2
  749. package/esm/domain/session/storeStrategies/sessionStoreStrategy.js.map +0 -1
  750. package/esm/domain/synthetics/syntheticsWorkerValues.d.ts +0 -12
  751. package/esm/domain/synthetics/syntheticsWorkerValues.js +0 -24
  752. package/esm/domain/synthetics/syntheticsWorkerValues.js.map +0 -1
  753. package/esm/domain/tags.d.ts +0 -6
  754. package/esm/domain/tags.js +0 -59
  755. package/esm/domain/tags.js.map +0 -1
  756. package/esm/domain/telemetry/index.d.ts +0 -4
  757. package/esm/domain/telemetry/index.js +0 -3
  758. package/esm/domain/telemetry/index.js.map +0 -1
  759. package/esm/domain/telemetry/rawTelemetryEvent.types.d.ts +0 -18
  760. package/esm/domain/telemetry/rawTelemetryEvent.types.js +0 -6
  761. package/esm/domain/telemetry/rawTelemetryEvent.types.js.map +0 -1
  762. package/esm/domain/telemetry/telemetry.d.ts +0 -56
  763. package/esm/domain/telemetry/telemetry.js +0 -232
  764. package/esm/domain/telemetry/telemetry.js.map +0 -1
  765. package/esm/domain/telemetry/telemetryEvent.types.d.ts +0 -866
  766. package/esm/domain/telemetry/telemetryEvent.types.js +0 -6
  767. package/esm/domain/telemetry/telemetryEvent.types.js.map +0 -1
  768. package/esm/domain/trackingConsent.d.ts +0 -13
  769. package/esm/domain/trackingConsent.js +0 -24
  770. package/esm/domain/trackingConsent.js.map +0 -1
  771. package/esm/domain/userAgentData/index.d.ts +0 -1
  772. package/esm/domain/userAgentData/index.js +0 -2
  773. package/esm/domain/userAgentData/index.js.map +0 -1
  774. package/esm/domain/userAgentData/userAgentData.d.ts +0 -22
  775. package/esm/domain/userAgentData/userAgentData.js +0 -105
  776. package/esm/domain/userAgentData/userAgentData.js.map +0 -1
  777. package/esm/index.d.ts +0 -104
  778. package/esm/index.js +0 -79
  779. package/esm/index.js.map +0 -1
  780. package/esm/tools/abstractHooks.d.ts +0 -24
  781. package/esm/tools/abstractHooks.js +0 -37
  782. package/esm/tools/abstractHooks.js.map +0 -1
  783. package/esm/tools/abstractLifeCycle.d.ts +0 -23
  784. package/esm/tools/abstractLifeCycle.js +0 -24
  785. package/esm/tools/abstractLifeCycle.js.map +0 -1
  786. package/esm/tools/boundedBuffer.d.ts +0 -16
  787. package/esm/tools/boundedBuffer.js +0 -29
  788. package/esm/tools/boundedBuffer.js.map +0 -1
  789. package/esm/tools/catchUserErrors.d.ts +0 -1
  790. package/esm/tools/catchUserErrors.js +0 -12
  791. package/esm/tools/catchUserErrors.js.map +0 -1
  792. package/esm/tools/display.d.ts +0 -38
  793. package/esm/tools/display.js +0 -41
  794. package/esm/tools/display.js.map +0 -1
  795. package/esm/tools/encoder.d.ts +0 -54
  796. package/esm/tools/encoder.js +0 -37
  797. package/esm/tools/encoder.js.map +0 -1
  798. package/esm/tools/experimentalFeatures.d.ts +0 -21
  799. package/esm/tools/experimentalFeatures.js +0 -42
  800. package/esm/tools/experimentalFeatures.js.map +0 -1
  801. package/esm/tools/getZoneJsOriginalValue.d.ts +0 -19
  802. package/esm/tools/getZoneJsOriginalValue.js +0 -26
  803. package/esm/tools/getZoneJsOriginalValue.js.map +0 -1
  804. package/esm/tools/globalObject.d.ts +0 -19
  805. package/esm/tools/globalObject.js +0 -40
  806. package/esm/tools/globalObject.js.map +0 -1
  807. package/esm/tools/instrumentMethod.d.ts +0 -75
  808. package/esm/tools/instrumentMethod.js +0 -114
  809. package/esm/tools/instrumentMethod.js.map +0 -1
  810. package/esm/tools/matchOption.d.ts +0 -8
  811. package/esm/tools/matchOption.js +0 -31
  812. package/esm/tools/matchOption.js.map +0 -1
  813. package/esm/tools/mergeInto.d.ts +0 -25
  814. package/esm/tools/mergeInto.js +0 -93
  815. package/esm/tools/mergeInto.js.map +0 -1
  816. package/esm/tools/monitor.d.ts +0 -9
  817. package/esm/tools/monitor.js +0 -51
  818. package/esm/tools/monitor.js.map +0 -1
  819. package/esm/tools/observable.d.ts +0 -30
  820. package/esm/tools/observable.js +0 -83
  821. package/esm/tools/observable.js.map +0 -1
  822. package/esm/tools/queueMicrotask.d.ts +0 -1
  823. package/esm/tools/queueMicrotask.js +0 -14
  824. package/esm/tools/queueMicrotask.js.map +0 -1
  825. package/esm/tools/readBytesFromStream.d.ts +0 -10
  826. package/esm/tools/readBytesFromStream.js +0 -25
  827. package/esm/tools/readBytesFromStream.js.map +0 -1
  828. package/esm/tools/requestIdleCallback.d.ts +0 -12
  829. package/esm/tools/requestIdleCallback.js +0 -30
  830. package/esm/tools/requestIdleCallback.js.map +0 -1
  831. package/esm/tools/sendToExtension.d.ts +0 -3
  832. package/esm/tools/sendToExtension.js +0 -8
  833. package/esm/tools/sendToExtension.js.map +0 -1
  834. package/esm/tools/serialisation/context.d.ts +0 -9
  835. package/esm/tools/serialisation/context.js +0 -2
  836. package/esm/tools/serialisation/context.js.map +0 -1
  837. package/esm/tools/serialisation/jsonStringify.d.ts +0 -13
  838. package/esm/tools/serialisation/jsonStringify.js +0 -44
  839. package/esm/tools/serialisation/jsonStringify.js.map +0 -1
  840. package/esm/tools/serialisation/sanitize.d.ts +0 -18
  841. package/esm/tools/serialisation/sanitize.js +0 -185
  842. package/esm/tools/serialisation/sanitize.js.map +0 -1
  843. package/esm/tools/stackTrace/computeStackTrace.d.ts +0 -25
  844. package/esm/tools/stackTrace/computeStackTrace.js +0 -183
  845. package/esm/tools/stackTrace/computeStackTrace.js.map +0 -1
  846. package/esm/tools/stackTrace/handlingStack.d.ts +0 -10
  847. package/esm/tools/stackTrace/handlingStack.js +0 -41
  848. package/esm/tools/stackTrace/handlingStack.js.map +0 -1
  849. package/esm/tools/taskQueue.d.ts +0 -15
  850. package/esm/tools/taskQueue.js +0 -50
  851. package/esm/tools/taskQueue.js.map +0 -1
  852. package/esm/tools/timer.d.ts +0 -5
  853. package/esm/tools/timer.js +0 -16
  854. package/esm/tools/timer.js.map +0 -1
  855. package/esm/tools/utils/arrayUtils.d.ts +0 -3
  856. package/esm/tools/utils/arrayUtils.js +0 -15
  857. package/esm/tools/utils/arrayUtils.js.map +0 -1
  858. package/esm/tools/utils/browserDetection.d.ts +0 -8
  859. package/esm/tools/utils/browserDetection.js +0 -28
  860. package/esm/tools/utils/browserDetection.js.map +0 -1
  861. package/esm/tools/utils/byteUtils.d.ts +0 -8
  862. package/esm/tools/utils/byteUtils.js +0 -29
  863. package/esm/tools/utils/byteUtils.js.map +0 -1
  864. package/esm/tools/utils/functionUtils.d.ts +0 -8
  865. package/esm/tools/utils/functionUtils.js +0 -39
  866. package/esm/tools/utils/functionUtils.js.map +0 -1
  867. package/esm/tools/utils/geocoding.d.ts +0 -60
  868. package/esm/tools/utils/geocoding.js +0 -73
  869. package/esm/tools/utils/geocoding.js.map +0 -1
  870. package/esm/tools/utils/geolocation.d.ts +0 -24
  871. package/esm/tools/utils/geolocation.js +0 -71
  872. package/esm/tools/utils/geolocation.js.map +0 -1
  873. package/esm/tools/utils/numberUtils.d.ts +0 -8
  874. package/esm/tools/utils/numberUtils.js +0 -17
  875. package/esm/tools/utils/numberUtils.js.map +0 -1
  876. package/esm/tools/utils/objectUtils.d.ts +0 -10
  877. package/esm/tools/utils/objectUtils.js +0 -17
  878. package/esm/tools/utils/objectUtils.js.map +0 -1
  879. package/esm/tools/utils/polyfills.d.ts +0 -7
  880. package/esm/tools/utils/polyfills.js +0 -18
  881. package/esm/tools/utils/polyfills.js.map +0 -1
  882. package/esm/tools/utils/responseUtils.d.ts +0 -2
  883. package/esm/tools/utils/responseUtils.js +0 -13
  884. package/esm/tools/utils/responseUtils.js.map +0 -1
  885. package/esm/tools/utils/stringUtils.d.ts +0 -23
  886. package/esm/tools/utils/stringUtils.js +0 -84
  887. package/esm/tools/utils/stringUtils.js.map +0 -1
  888. package/esm/tools/utils/timeUtils.d.ts +0 -53
  889. package/esm/tools/utils/timeUtils.js +0 -84
  890. package/esm/tools/utils/timeUtils.js.map +0 -1
  891. package/esm/tools/utils/timezone.d.ts +0 -1
  892. package/esm/tools/utils/timezone.js +0 -10
  893. package/esm/tools/utils/timezone.js.map +0 -1
  894. package/esm/tools/utils/typeUtils.d.ts +0 -4
  895. package/esm/tools/utils/typeUtils.js +0 -13
  896. package/esm/tools/utils/typeUtils.js.map +0 -1
  897. package/esm/tools/utils/urlPolyfill.d.ts +0 -5
  898. package/esm/tools/utils/urlPolyfill.js +0 -52
  899. package/esm/tools/utils/urlPolyfill.js.map +0 -1
  900. package/esm/tools/valueHistory.d.ts +0 -27
  901. package/esm/tools/valueHistory.js +0 -100
  902. package/esm/tools/valueHistory.js.map +0 -1
  903. package/esm/transport/batch.d.ts +0 -16
  904. package/esm/transport/batch.js +0 -106
  905. package/esm/transport/batch.js.map +0 -1
  906. package/esm/transport/eventBridge.d.ts +0 -21
  907. package/esm/transport/eventBridge.js +0 -41
  908. package/esm/transport/eventBridge.js.map +0 -1
  909. package/esm/transport/flushController.d.ts +0 -65
  910. package/esm/transport/flushController.js +0 -119
  911. package/esm/transport/flushController.js.map +0 -1
  912. package/esm/transport/httpRequest.d.ts +0 -57
  913. package/esm/transport/httpRequest.js +0 -101
  914. package/esm/transport/httpRequest.js.map +0 -1
  915. package/esm/transport/index.d.ts +0 -7
  916. package/esm/transport/index.js +0 -5
  917. package/esm/transport/index.js.map +0 -1
  918. package/esm/transport/sendWithRetryStrategy.d.ts +0 -41
  919. package/esm/transport/sendWithRetryStrategy.js +0 -158
  920. package/esm/transport/sendWithRetryStrategy.js.map +0 -1
  921. package/src/domain/configuration/endpointBuilder.ts +0 -105
  922. package/src/domain/configuration/transportConfiguration.ts +0 -86
  923. package/src/domain/intakeSites.ts +0 -6
  924. package/src/domain/session/oldCookiesMigration.ts +0 -42
  925. package/src/domain/session/sessionStoreOperations.ts +0 -131
  926. package/src/tools/abstractHooks.ts +0 -72
  927. package/src/tools/boundedBuffer.ts +0 -44
  928. package/src/tools/globalObject.ts +0 -51
  929. package/src/tools/mergeInto.ts +0 -177
  930. package/src/tools/monitor.ts +0 -71
  931. package/src/tools/utils/timeUtils.ts +0 -117
  932. package/src/tools/utils/typeUtils.ts +0 -12
  933. package/src/tools/utils/urlPolyfill.ts +0 -55
  934. /package/cjs/{tools/utils → domain/geo}/geocoding.d.ts +0 -0
  935. /package/cjs/{tools/utils → domain/geo}/geolocation.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie.mjs","names":[],"sources":["../../src/browser/cookie.ts"],"sourcesContent":["import { ONE_SECOND } from '@kubesense/kubesense-js-core/time'\nimport { buildUrl, globalObject } from '@kubesense/kubesense-js-core/util'\nimport {\n findAllCommaSeparatedValues,\n findCommaSeparatedValue,\n findCommaSeparatedValues,\n generateUUID,\n} from '../tools/utils/stringUtils'\nimport type { Configuration } from '../domain/configuration'\n\nexport interface CookieOptions {\n secure?: boolean\n crossSite?: boolean\n partitioned?: boolean\n domain?: string\n}\n\nexport function setCookie(name: string, value: string, expireDelay: number = 0, options?: CookieOptions) {\n const date = new Date()\n date.setTime(date.getTime() + expireDelay)\n const expires = `expires=${date.toUTCString()}`\n const sameSite = options?.crossSite ? 'none' : 'strict'\n const domain = options?.domain ? `;domain=${options.domain}` : ''\n const secure = options?.secure ? ';secure' : ''\n const partitioned = options?.partitioned ? ';partitioned' : ''\n document.cookie = `${name}=${value};${expires};path=/;samesite=${sameSite}${domain}${secure}${partitioned}`\n}\n\n/**\n * Returns the value of the cookie with the given name\n * If there are multiple cookies with the same name, returns the first one\n */\nexport function getCookie(name: string) {\n const value = findCommaSeparatedValue(document.cookie, name)\n\n if (value === '') {\n return\n }\n\n return value\n}\n\n/**\n * Returns all the values of the cookies with the given name\n */\nexport function getCookies(name: string): string[] {\n return findAllCommaSeparatedValues(document.cookie).get(name) || []\n}\n\nlet initCookieParsed: Map<string, string> | undefined\n\n/**\n * Returns a cached value of the cookie. Use this during SDK initialization (and whenever possible)\n * to avoid accessing document.cookie multiple times.\n *\n * ⚠️ If there are multiple cookies with the same name, returns the LAST one (unlike `getCookie()`)\n */\nexport function getInitCookie(name: string) {\n if (!initCookieParsed) {\n initCookieParsed = findCommaSeparatedValues(document.cookie)\n }\n return initCookieParsed.get(name)\n}\n\nexport function resetInitCookies() {\n initCookieParsed = undefined\n}\n\nexport function deleteCookie(name: string, options?: CookieOptions) {\n setCookie(name, '', 0, options)\n}\n\n/**\n * No API to retrieve it, number of levels for subdomain and suffix are unknown\n * strategy: find the minimal domain on which cookies are allowed to be set\n * https://web.dev/same-site-same-origin/#site\n */\nlet getCurrentSiteCache: string | undefined\nexport function getCurrentSite(\n hostname = globalObject.location?.hostname ?? '',\n referrer = typeof document !== 'undefined' ? document.referrer : ''\n): string | undefined {\n // Cookie probing requires document.cookie, which is not available in Web Workers or Node.js\n if (typeof document === 'undefined') {\n return undefined\n }\n if (getCurrentSiteCache === undefined) {\n const defaultHostName = getCookieDefaultHostName(hostname, referrer)\n if (defaultHostName) {\n // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during\n // the test cookie lifetime\n const testCookieName = `kubesense_site_test_${generateUUID()}`\n const testCookieValue = 'test'\n\n const domainLevels = defaultHostName.split('.')\n let candidateDomain = domainLevels.pop()!\n while (domainLevels.length && !getCookie(testCookieName)) {\n candidateDomain = `${domainLevels.pop()!}.${candidateDomain}`\n setCookie(testCookieName, testCookieValue, ONE_SECOND, { domain: candidateDomain })\n }\n deleteCookie(testCookieName, { domain: candidateDomain })\n getCurrentSiteCache = candidateDomain\n }\n }\n\n return getCurrentSiteCache\n}\n\nfunction getCookieDefaultHostName(hostname: string, referrer: string) {\n try {\n return hostname || buildUrl(referrer).hostname\n } catch {\n // Ignore\n }\n}\n\nexport function resetGetCurrentSite() {\n getCurrentSiteCache = undefined\n}\n\nexport function buildCookieOptions(configuration: Configuration): CookieOptions | undefined {\n const cookieOptions: CookieOptions = {}\n\n cookieOptions.secure = configuration.useSecureSessionCookie || configuration.usePartitionedCrossSiteSessionCookie\n cookieOptions.crossSite = configuration.usePartitionedCrossSiteSessionCookie\n cookieOptions.partitioned = configuration.usePartitionedCrossSiteSessionCookie\n\n if (configuration.trackSessionAcrossSubdomains) {\n const currentSite = getCurrentSite()\n if (!currentSite) {\n return\n }\n cookieOptions.domain = currentSite\n }\n\n return cookieOptions\n}\n"],"mappings":";;;;AAiBA,SAAgB,UAAU,MAAc,OAAe,cAAsB,GAAG,SAAyB;CACvG,MAAM,uBAAO,IAAI,KAAK;CACtB,KAAK,QAAQ,KAAK,QAAQ,IAAI,WAAW;CACzC,MAAM,UAAU,WAAW,KAAK,YAAY;CAC5C,MAAM,WAAW,SAAS,YAAY,SAAS;CAC/C,MAAM,SAAS,SAAS,SAAS,WAAW,QAAQ,WAAW;CAC/D,MAAM,SAAS,SAAS,SAAS,YAAY;CAC7C,MAAM,cAAc,SAAS,cAAc,iBAAiB;CAC5D,SAAS,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,mBAAmB,WAAW,SAAS,SAAS;AAChG;;;;;AAMA,SAAgB,UAAU,MAAc;CACtC,MAAM,QAAQ,wBAAwB,SAAS,QAAQ,IAAI;CAE3D,IAAI,UAAU,IACZ;CAGF,OAAO;AACT;;;;AAKA,SAAgB,WAAW,MAAwB;CACjD,OAAO,4BAA4B,SAAS,MAAM,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC;AACpE;AAEA,IAAI;;;;;;;AAQJ,SAAgB,cAAc,MAAc;CAC1C,IAAI,CAAC,kBACH,mBAAmB,yBAAyB,SAAS,MAAM;CAE7D,OAAO,iBAAiB,IAAI,IAAI;AAClC;AAEA,SAAgB,mBAAmB;CACjC,mBAAmB,KAAA;AACrB;AAEA,SAAgB,aAAa,MAAc,SAAyB;CAClE,UAAU,MAAM,IAAI,GAAG,OAAO;AAChC;;;;;;AAOA,IAAI;AACJ,SAAgB,eACd,WAAW,aAAa,UAAU,YAAY,IAC9C,WAAW,OAAO,aAAa,cAAc,SAAS,WAAW,IAC7C;CAEpB,IAAI,OAAO,aAAa,aACtB;CAEF,IAAI,wBAAwB,KAAA,GAAW;EACrC,MAAM,kBAAkB,yBAAyB,UAAU,QAAQ;EACnE,IAAI,iBAAiB;GAGnB,MAAM,iBAAiB,uBAAuB,aAAa;GAC3D,MAAM,kBAAkB;GAExB,MAAM,eAAe,gBAAgB,MAAM,GAAG;GAC9C,IAAI,kBAAkB,aAAa,IAAI;GACvC,OAAO,aAAa,UAAU,CAAC,UAAU,cAAc,GAAG;IACxD,kBAAkB,GAAG,aAAa,IAAI,EAAG,GAAG;IAC5C,UAAU,gBAAgB,iBAAiB,YAAY,EAAE,QAAQ,gBAAgB,CAAC;GACpF;GACA,aAAa,gBAAgB,EAAE,QAAQ,gBAAgB,CAAC;GACxD,sBAAsB;EACxB;CACF;CAEA,OAAO;AACT;AAEA,SAAS,yBAAyB,UAAkB,UAAkB;CACpE,IAAI;EACF,OAAO,YAAY,SAAS,QAAQ,CAAC,CAAC;CACxC,QAAQ,CAER;AACF;AAMA,SAAgB,mBAAmB,eAAyD;CAC1F,MAAM,gBAA+B,CAAC;CAEtC,cAAc,SAAS,cAAc,0BAA0B,cAAc;CAC7E,cAAc,YAAY,cAAc;CACxC,cAAc,cAAc,cAAc;CAE1C,IAAI,cAAc,8BAA8B;EAC9C,MAAM,cAAc,eAAe;EACnC,IAAI,CAAC,aACH;EAEF,cAAc,SAAS;CACzB;CAEA,OAAO;AACT"}
@@ -0,0 +1,124 @@
1
+ import { Observable } from "../tools/observable.mjs";
2
+ import { generateUUID } from "../tools/utils/stringUtils.mjs";
3
+ import { display } from "../tools/display.mjs";
4
+ import { deleteCookie, getCookies, setCookie } from "./cookie.mjs";
5
+ import { mockable } from "../tools/mockable.mjs";
6
+ import { clearInterval, setInterval } from "../tools/timer.mjs";
7
+ import { addEventListener, isEventSupported } from "./addEventListener.mjs";
8
+ import { addTelemetryDebug } from "../domain/telemetry/telemetry.mjs";
9
+ import { globalObject } from "@kubesense/kubesense-js-core/util";
10
+ import { ONE_MINUTE, ONE_SECOND, dateNow } from "@kubesense/kubesense-js-core/time";
11
+ //#region src/browser/cookieAccess.ts
12
+ const TEST_COOKIE_NAME_PREFIX = "kubesense_cookie_test_";
13
+ async function areCookiesAuthorized(createAccess, cookieOptions) {
14
+ const testCookieName = `${TEST_COOKIE_NAME_PREFIX}${generateUUID()}`;
15
+ const testCookieValue = "test";
16
+ const access = createAccess(testCookieName, cookieOptions);
17
+ try {
18
+ await access.getAllAndSet(() => ({
19
+ value: testCookieValue,
20
+ expireDelay: ONE_MINUTE
21
+ }));
22
+ return (await access.getAll()).includes(testCookieValue);
23
+ } catch (error) {
24
+ display.error(error);
25
+ return false;
26
+ } finally {
27
+ try {
28
+ await access.delete();
29
+ } catch {}
30
+ }
31
+ }
32
+ function createCookieStoreAccess(cookieName, cookieOptions) {
33
+ const cookieStore = mockable(globalObject.cookieStore);
34
+ const observable = new Observable(() => {
35
+ return addEventListener(cookieStore, "change", (event) => {
36
+ if (event.changed.some((event) => event.name === cookieName) || event.deleted.some((event) => event.name === cookieName)) observable.notify();
37
+ }).stop;
38
+ });
39
+ return {
40
+ async getAll() {
41
+ return (await cookieStore.getAll(cookieName)).map((item) => item.value);
42
+ },
43
+ delete() {
44
+ return cookieStore.delete({
45
+ name: cookieName,
46
+ domain: cookieOptions.domain,
47
+ path: "/",
48
+ partitioned: cookieOptions.partitioned
49
+ });
50
+ },
51
+ async getAllAndSet(cb) {
52
+ const items = await cookieStore.getAll(cookieName);
53
+ const { value, expireDelay } = cb(items.map((item) => item.value));
54
+ try {
55
+ await cookieStore.set({
56
+ name: cookieName,
57
+ value,
58
+ expires: dateNow() + expireDelay,
59
+ path: "/",
60
+ sameSite: cookieOptions.crossSite ? "none" : "strict",
61
+ domain: cookieOptions.domain,
62
+ secure: cookieOptions.secure,
63
+ partitioned: cookieOptions.partitioned
64
+ });
65
+ } catch (error) {
66
+ if (!cookieName.startsWith("kubesense_cookie_test_")) {
67
+ const documentCookies = getCookies(cookieName);
68
+ addTelemetryDebug("Failed to set cookie using Cookie Store API", {
69
+ "error.message": error.message,
70
+ newValue: value,
71
+ cookieOptions: { ...cookieOptions },
72
+ cookies: items.map((item) => ({ ...item })),
73
+ cookieCount: items.length,
74
+ documentCookies
75
+ });
76
+ }
77
+ }
78
+ },
79
+ observable
80
+ };
81
+ }
82
+ const WATCH_COOKIE_INTERVAL_DELAY = ONE_SECOND;
83
+ function createDocumentCookieAccess(cookieName, cookieOptions) {
84
+ let previousCookieValues = getCookies(cookieName);
85
+ const observable = new Observable(() => {
86
+ const watchCookieIntervalId = setInterval(() => {
87
+ notifyCookieValueIfChanged(getCookies(cookieName));
88
+ }, WATCH_COOKIE_INTERVAL_DELAY);
89
+ return () => {
90
+ clearInterval(watchCookieIntervalId);
91
+ };
92
+ });
93
+ function notifyCookieValueIfChanged(cookieValues) {
94
+ if (String(cookieValues) !== String(previousCookieValues)) {
95
+ previousCookieValues = cookieValues;
96
+ observable.notify();
97
+ }
98
+ }
99
+ return {
100
+ getAll() {
101
+ return Promise.resolve(getCookies(cookieName));
102
+ },
103
+ async getAllAndSet(cb) {
104
+ const { value, expireDelay } = cb(getCookies(cookieName));
105
+ setCookie(cookieName, value, expireDelay, cookieOptions);
106
+ await Promise.resolve();
107
+ notifyCookieValueIfChanged([value]);
108
+ },
109
+ async delete() {
110
+ deleteCookie(cookieName, cookieOptions);
111
+ await Promise.resolve();
112
+ notifyCookieValueIfChanged([]);
113
+ },
114
+ observable
115
+ };
116
+ }
117
+ function isCookieStoreSupported() {
118
+ const cookieStore = mockable(globalObject.cookieStore);
119
+ return Boolean(cookieStore && isEventSupported(cookieStore, "change"));
120
+ }
121
+ //#endregion
122
+ export { TEST_COOKIE_NAME_PREFIX, WATCH_COOKIE_INTERVAL_DELAY, areCookiesAuthorized, createCookieStoreAccess, createDocumentCookieAccess, isCookieStoreSupported };
123
+
124
+ //# sourceMappingURL=cookieAccess.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookieAccess.mjs","names":[],"sources":["../../src/browser/cookieAccess.ts"],"sourcesContent":["import { ONE_MINUTE, ONE_SECOND, dateNow } from '@kubesense/kubesense-js-core/time'\nimport { globalObject } from '@kubesense/kubesense-js-core/util'\nimport { setInterval, clearInterval } from '../tools/timer'\nimport { Observable } from '../tools/observable'\nimport { mockable } from '../tools/mockable'\nimport { display } from '../tools/display'\nimport { generateUUID } from '../tools/utils/stringUtils'\nimport { addTelemetryDebug } from '../domain/telemetry'\nimport { addEventListener, DOM_EVENT, isEventSupported } from './addEventListener'\nimport { deleteCookie, getCookies, setCookie } from './cookie'\nimport type { CookieOptions } from './cookie'\n\nexport interface CookieAccess {\n getAll(): Promise<string[]>\n getAllAndSet(cb: (value: string[]) => { value: string; expireDelay: number }): Promise<void>\n delete(): Promise<void>\n observable: Observable<void>\n}\n\nexport type CookieAccessFactory = (cookieName: string, cookieOptions: CookieOptions) => CookieAccess\n\n// Used to identify capability-probe cookies so their write failures aren't reported as telemetry:\n// failing to write them is an expected outcome (it triggers the document.cookie fallback), not a bug.\nexport const TEST_COOKIE_NAME_PREFIX = 'kubesense_cookie_test_'\n\nexport async function areCookiesAuthorized(\n createAccess: CookieAccessFactory,\n cookieOptions: CookieOptions\n): Promise<boolean> {\n // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during\n // the test cookie lifetime\n const testCookieName = `${TEST_COOKIE_NAME_PREFIX}${generateUUID()}`\n const testCookieValue = 'test'\n const access = createAccess(testCookieName, cookieOptions)\n try {\n await access.getAllAndSet(() => ({ value: testCookieValue, expireDelay: ONE_MINUTE }))\n const values = await access.getAll()\n return values.includes(testCookieValue)\n } catch (error) {\n display.error(error)\n return false\n } finally {\n try {\n await access.delete()\n } catch {\n // Best-effort cleanup\n }\n }\n}\n\nexport function createCookieStoreAccess(cookieName: string, cookieOptions: CookieOptions): CookieAccess {\n const cookieStore = mockable(globalObject.cookieStore)!\n const observable = new Observable<void>(() => {\n const listener = addEventListener(cookieStore, DOM_EVENT.CHANGE, (event) => {\n // Based on our experimentation, we're assuming that entries for the same cookie cannot be in both the 'changed' and 'deleted' arrays.\n // However, due to ambiguity in the specification, we asked for clarification: https://github.com/WICG/cookie-store/issues/226\n const changeEvent =\n event.changed.some((event) => event.name === cookieName) ||\n event.deleted.some((event) => event.name === cookieName)\n if (changeEvent) {\n observable.notify()\n }\n })\n return listener.stop\n })\n\n return {\n async getAll() {\n const items = await cookieStore.getAll(cookieName)\n return items.map((item) => item.value)\n },\n\n delete() {\n return cookieStore.delete({\n name: cookieName,\n domain: cookieOptions.domain,\n path: '/',\n partitioned: cookieOptions.partitioned,\n })\n },\n\n async getAllAndSet(cb: (value: string[]) => { value: string; expireDelay: number }) {\n const items = await cookieStore.getAll(cookieName)\n\n const currentValues = items.map((item) => item.value)\n const { value, expireDelay } = cb(currentValues)\n\n try {\n await cookieStore.set({\n name: cookieName,\n value,\n expires: dateNow() + expireDelay,\n path: '/',\n sameSite: cookieOptions.crossSite ? 'none' : 'strict',\n domain: cookieOptions.domain,\n secure: cookieOptions.secure,\n partitioned: cookieOptions.partitioned,\n })\n } catch (error) {\n if (!cookieName.startsWith(TEST_COOKIE_NAME_PREFIX)) {\n const documentCookies = getCookies(cookieName)\n // monitor-until: 2026-10-01\n addTelemetryDebug('Failed to set cookie using Cookie Store API', {\n 'error.message': (error as Error).message,\n newValue: value,\n cookieOptions: {\n ...cookieOptions,\n },\n cookies: items.map((item) => ({\n ...item,\n })),\n cookieCount: items.length,\n documentCookies,\n })\n }\n }\n },\n\n observable,\n }\n}\n\nexport const WATCH_COOKIE_INTERVAL_DELAY = ONE_SECOND\nexport function createDocumentCookieAccess(cookieName: string, cookieOptions: CookieOptions): CookieAccess {\n let previousCookieValues = getCookies(cookieName)\n\n const observable = new Observable<void>(() => {\n const watchCookieIntervalId = setInterval(() => {\n const cookieValues = getCookies(cookieName)\n notifyCookieValueIfChanged(cookieValues)\n }, WATCH_COOKIE_INTERVAL_DELAY)\n\n return () => {\n clearInterval(watchCookieIntervalId)\n }\n })\n\n function notifyCookieValueIfChanged(cookieValues: string[]) {\n if (String(cookieValues) !== String(previousCookieValues)) {\n previousCookieValues = cookieValues\n observable.notify()\n }\n }\n\n return {\n getAll() {\n return Promise.resolve(getCookies(cookieName))\n },\n\n async getAllAndSet(cb: (value: string[]) => { value: string; expireDelay: number }) {\n const currentValue = getCookies(cookieName)\n const { value, expireDelay } = cb(currentValue)\n setCookie(cookieName, value, expireDelay, cookieOptions)\n await Promise.resolve()\n notifyCookieValueIfChanged([value])\n },\n\n async delete() {\n deleteCookie(cookieName, cookieOptions)\n await Promise.resolve()\n notifyCookieValueIfChanged([])\n },\n\n observable,\n }\n}\n\n// Salesforce LWS does not support the change event of CookieStore objects. https://developer.salesforce.com/tools/lws-distortion-viewer\nexport function isCookieStoreSupported(): boolean {\n const cookieStore = mockable(globalObject.cookieStore)\n return Boolean(cookieStore && isEventSupported(cookieStore, DOM_EVENT.CHANGE))\n}\n"],"mappings":";;;;;;;;;;;AAuBA,MAAa,0BAA0B;AAEvC,eAAsB,qBACpB,cACA,eACkB;CAGlB,MAAM,iBAAiB,GAAG,0BAA0B,aAAa;CACjE,MAAM,kBAAkB;CACxB,MAAM,SAAS,aAAa,gBAAgB,aAAa;CACzD,IAAI;EACF,MAAM,OAAO,oBAAoB;GAAE,OAAO;GAAiB,aAAa;EAAW,EAAE;EAErF,QAAO,MADc,OAAO,OAAO,EAAA,CACrB,SAAS,eAAe;CACxC,SAAS,OAAO;EACd,QAAQ,MAAM,KAAK;EACnB,OAAO;CACT,UAAU;EACR,IAAI;GACF,MAAM,OAAO,OAAO;EACtB,QAAQ,CAER;CACF;AACF;AAEA,SAAgB,wBAAwB,YAAoB,eAA4C;CACtG,MAAM,cAAc,SAAS,aAAa,WAAW;CACrD,MAAM,aAAa,IAAI,iBAAuB;EAW5C,OAViB,iBAAiB,aAAA,WAAgC,UAAU;GAM1E,IAFE,MAAM,QAAQ,MAAM,UAAU,MAAM,SAAS,UAAU,KACvD,MAAM,QAAQ,MAAM,UAAU,MAAM,SAAS,UAAU,GAEvD,WAAW,OAAO;EAEtB,CACc,CAAC,CAAC;CAClB,CAAC;CAED,OAAO;EACL,MAAM,SAAS;GAEb,QAAO,MADa,YAAY,OAAO,UAAU,EAAA,CACpC,KAAK,SAAS,KAAK,KAAK;EACvC;EAEA,SAAS;GACP,OAAO,YAAY,OAAO;IACxB,MAAM;IACN,QAAQ,cAAc;IACtB,MAAM;IACN,aAAa,cAAc;GAC7B,CAAC;EACH;EAEA,MAAM,aAAa,IAAiE;GAClF,MAAM,QAAQ,MAAM,YAAY,OAAO,UAAU;GAGjD,MAAM,EAAE,OAAO,gBAAgB,GADT,MAAM,KAAK,SAAS,KAAK,KACD,CAAC;GAE/C,IAAI;IACF,MAAM,YAAY,IAAI;KACpB,MAAM;KACN;KACA,SAAS,QAAQ,IAAI;KACrB,MAAM;KACN,UAAU,cAAc,YAAY,SAAS;KAC7C,QAAQ,cAAc;KACtB,QAAQ,cAAc;KACtB,aAAa,cAAc;IAC7B,CAAC;GACH,SAAS,OAAO;IACd,IAAI,CAAC,WAAW,WAAA,wBAAkC,GAAG;KACnD,MAAM,kBAAkB,WAAW,UAAU;KAE7C,kBAAkB,+CAA+C;MAC/D,iBAAkB,MAAgB;MAClC,UAAU;MACV,eAAe,EACb,GAAG,cACL;MACA,SAAS,MAAM,KAAK,UAAU,EAC5B,GAAG,KACL,EAAE;MACF,aAAa,MAAM;MACnB;KACF,CAAC;IACH;GACF;EACF;EAEA;CACF;AACF;AAEA,MAAa,8BAA8B;AAC3C,SAAgB,2BAA2B,YAAoB,eAA4C;CACzG,IAAI,uBAAuB,WAAW,UAAU;CAEhD,MAAM,aAAa,IAAI,iBAAuB;EAC5C,MAAM,wBAAwB,kBAAkB;GAE9C,2BADqB,WAAW,UACM,CAAC;EACzC,GAAG,2BAA2B;EAE9B,aAAa;GACX,cAAc,qBAAqB;EACrC;CACF,CAAC;CAED,SAAS,2BAA2B,cAAwB;EAC1D,IAAI,OAAO,YAAY,MAAM,OAAO,oBAAoB,GAAG;GACzD,uBAAuB;GACvB,WAAW,OAAO;EACpB;CACF;CAEA,OAAO;EACL,SAAS;GACP,OAAO,QAAQ,QAAQ,WAAW,UAAU,CAAC;EAC/C;EAEA,MAAM,aAAa,IAAiE;GAElF,MAAM,EAAE,OAAO,gBAAgB,GADV,WAAW,UACa,CAAC;GAC9C,UAAU,YAAY,OAAO,aAAa,aAAa;GACvD,MAAM,QAAQ,QAAQ;GACtB,2BAA2B,CAAC,KAAK,CAAC;EACpC;EAEA,MAAM,SAAS;GACb,aAAa,YAAY,aAAa;GACtC,MAAM,QAAQ,QAAQ;GACtB,2BAA2B,CAAC,CAAC;EAC/B;EAEA;CACF;AACF;AAGA,SAAgB,yBAAkC;CAChD,MAAM,cAAc,SAAS,aAAa,WAAW;CACrD,OAAO,QAAQ,eAAe,iBAAiB,aAAA,QAA6B,CAAC;AAC/E"}
@@ -0,0 +1,18 @@
1
+ import { getZoneJsOriginalValue } from "../tools/getZoneJsOriginalValue.mjs";
2
+ import { globalObject } from "@kubesense/kubesense-js-core/util";
3
+ //#region src/browser/fetch.ts
4
+ /**
5
+ * Make a fetch request using the native implementation, bypassing Zone.js patching.
6
+ * This prevents unnecessary Angular change detection cycles.
7
+ *
8
+ * @param input - The resource to fetch (URL or Request object)
9
+ * @param init - Optional fetch options
10
+ * @returns A Promise that resolves to the Response
11
+ */
12
+ function fetch(input, init) {
13
+ return getZoneJsOriginalValue(globalObject, "fetch")(input, init);
14
+ }
15
+ //#endregion
16
+ export { fetch };
17
+
18
+ //# sourceMappingURL=fetch.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.mjs","names":[],"sources":["../../src/browser/fetch.ts"],"sourcesContent":["import { globalObject } from '@kubesense/kubesense-js-core/util'\nimport { getZoneJsOriginalValue } from '../tools/getZoneJsOriginalValue'\n\n/**\n * Make a fetch request using the native implementation, bypassing Zone.js patching.\n * This prevents unnecessary Angular change detection cycles.\n *\n * @param input - The resource to fetch (URL or Request object)\n * @param init - Optional fetch options\n * @returns A Promise that resolves to the Response\n */\nexport function fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n return getZoneJsOriginalValue(globalObject, 'fetch')(input, init)\n}\n"],"mappings":";;;;;;;;;;;AAWA,SAAgB,MAAM,OAA0B,MAAuC;CACrF,OAAO,uBAAuB,cAAc,OAAO,CAAC,CAAC,OAAO,IAAI;AAClE"}
@@ -0,0 +1,89 @@
1
+ import { Observable } from "../tools/observable.mjs";
2
+ import { instrumentMethod } from "../tools/instrumentMethod.mjs";
3
+ import { tryToClone } from "../tools/utils/responseUtils.mjs";
4
+ import { readBytesFromStream } from "../tools/readBytesFromStream.mjs";
5
+ import { globalObject, normalizeUrl } from "@kubesense/kubesense-js-core/util";
6
+ import { monitorError } from "@kubesense/kubesense-js-core/monitor";
7
+ import { clocksNow } from "@kubesense/kubesense-js-core/time";
8
+ //#region src/browser/fetchObservable.ts
9
+ /**
10
+ * Action to take with the response body of a fetch request.
11
+ * Values are ordered by priority: higher values take precedence when multiple actions are requested.
12
+ */
13
+ let ResponseBodyAction = /* @__PURE__ */ function(ResponseBodyAction) {
14
+ ResponseBodyAction[ResponseBodyAction["IGNORE"] = 0] = "IGNORE";
15
+ ResponseBodyAction[ResponseBodyAction["COLLECT"] = 1] = "COLLECT";
16
+ return ResponseBodyAction;
17
+ }({});
18
+ let fetchObservable;
19
+ const responseBodyActionGetters = [];
20
+ function initFetchObservable({ responseBodyAction } = {}) {
21
+ if (responseBodyAction) responseBodyActionGetters.push(responseBodyAction);
22
+ if (!fetchObservable) fetchObservable = createFetchObservable();
23
+ return fetchObservable;
24
+ }
25
+ function createFetchObservable() {
26
+ return new Observable((observable) => {
27
+ if (!globalObject.fetch) return;
28
+ const { stop } = instrumentMethod(globalObject, "fetch", (call) => beforeSend(call, observable), { computeHandlingStack: true });
29
+ return stop;
30
+ });
31
+ }
32
+ function beforeSend({ parameters, onPostCall, handlingStack }, observable) {
33
+ const [input, init] = parameters;
34
+ let methodFromParams = init?.method;
35
+ if (methodFromParams === void 0 && input instanceof Request) methodFromParams = input.method;
36
+ const method = methodFromParams !== void 0 ? String(methodFromParams).toUpperCase() : "GET";
37
+ const url = input instanceof Request ? input.url : normalizeUrl(String(input));
38
+ const context = {
39
+ state: "start",
40
+ init,
41
+ input,
42
+ method,
43
+ startClocks: clocksNow(),
44
+ url,
45
+ handlingStack,
46
+ isAbortedOnStart: input instanceof Request && input.signal?.aborted || init?.signal?.aborted || false
47
+ };
48
+ observable.notify(context);
49
+ parameters[0] = context.input;
50
+ parameters[1] = context.init;
51
+ onPostCall((responsePromise) => {
52
+ afterSend(observable, responsePromise, context).catch(monitorError);
53
+ });
54
+ }
55
+ async function afterSend(observable, responsePromise, startContext) {
56
+ const context = startContext;
57
+ let response;
58
+ try {
59
+ response = await responsePromise;
60
+ } catch (error) {
61
+ observable.notify({
62
+ ...context,
63
+ state: "resolve",
64
+ status: 0,
65
+ isAborted: context.init?.signal?.aborted || error instanceof DOMException && error.code === DOMException.ABORT_ERR,
66
+ error
67
+ });
68
+ return;
69
+ }
70
+ context.response = response;
71
+ context.status = response.status;
72
+ context.responseType = response.type;
73
+ context.isAborted = false;
74
+ if (responseBodyActionGetters.reduce((action, getter) => Math.max(action, getter(context)), 0) === 1) {
75
+ const clonedResponse = tryToClone(response);
76
+ if (clonedResponse?.body) try {
77
+ const bytes = await readBytesFromStream(clonedResponse.body);
78
+ context.responseBody = new TextDecoder().decode(bytes);
79
+ } catch {}
80
+ }
81
+ observable.notify({
82
+ ...context,
83
+ state: "resolve"
84
+ });
85
+ }
86
+ //#endregion
87
+ export { ResponseBodyAction, initFetchObservable };
88
+
89
+ //# sourceMappingURL=fetchObservable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchObservable.mjs","names":[],"sources":["../../src/browser/fetchObservable.ts"],"sourcesContent":["import type { ClocksState } from '@kubesense/kubesense-js-core/time'\nimport { clocksNow } from '@kubesense/kubesense-js-core/time'\nimport { normalizeUrl, globalObject } from '@kubesense/kubesense-js-core/util'\nimport type { GlobalObject } from '@kubesense/kubesense-js-core/util'\nimport { monitorError } from '@kubesense/kubesense-js-core/monitor'\nimport type { InstrumentedMethodCall } from '../tools/instrumentMethod'\nimport { instrumentMethod } from '../tools/instrumentMethod'\nimport { Observable } from '../tools/observable'\nimport { readBytesFromStream } from '../tools/readBytesFromStream'\nimport { tryToClone } from '../tools/utils/responseUtils'\n\ninterface FetchContextBase {\n method: string\n startClocks: ClocksState\n input: unknown\n init?: RequestInit\n url: string\n handlingStack?: string\n isAbortedOnStart: boolean\n}\n\nexport interface FetchStartContext extends FetchContextBase {\n state: 'start'\n}\n\nexport interface FetchResolveContext extends FetchContextBase {\n state: 'resolve'\n status: number\n response?: Response\n responseBody?: string\n responseType?: string\n isAborted: boolean\n error?: Error\n}\n\nexport type FetchContext = FetchStartContext | FetchResolveContext\n\ntype ResponseBodyActionGetter = (context: FetchResolveContext) => ResponseBodyAction\n\n/**\n * Action to take with the response body of a fetch request.\n * Values are ordered by priority: higher values take precedence when multiple actions are requested.\n */\nexport const enum ResponseBodyAction {\n IGNORE = 0,\n COLLECT = 1,\n}\n\nlet fetchObservable: Observable<FetchContext> | undefined\nconst responseBodyActionGetters: ResponseBodyActionGetter[] = []\n\nexport function initFetchObservable({ responseBodyAction }: { responseBodyAction?: ResponseBodyActionGetter } = {}) {\n if (responseBodyAction) {\n responseBodyActionGetters.push(responseBodyAction)\n }\n if (!fetchObservable) {\n fetchObservable = createFetchObservable()\n }\n return fetchObservable\n}\n\nexport function resetFetchObservable() {\n fetchObservable = undefined\n responseBodyActionGetters.length = 0\n}\n\nfunction createFetchObservable() {\n return new Observable<FetchContext>((observable) => {\n // eslint-disable-next-line local-rules/disallow-zone-js-patched-values\n if (!globalObject.fetch) {\n return\n }\n\n const { stop } = instrumentMethod(globalObject, 'fetch', (call) => beforeSend(call, observable), {\n computeHandlingStack: true,\n })\n\n return stop\n })\n}\n\nfunction beforeSend(\n { parameters, onPostCall, handlingStack }: InstrumentedMethodCall<GlobalObject, 'fetch'>,\n observable: Observable<FetchContext>\n) {\n const [input, init] = parameters\n let methodFromParams = init?.method\n\n if (methodFromParams === undefined && input instanceof Request) {\n methodFromParams = input.method\n }\n\n const method = methodFromParams !== undefined ? String(methodFromParams).toUpperCase() : 'GET'\n const url = input instanceof Request ? input.url : normalizeUrl(String(input))\n const startClocks = clocksNow()\n\n const context: FetchStartContext = {\n state: 'start',\n init,\n input,\n method,\n startClocks,\n url,\n handlingStack,\n isAbortedOnStart: (input instanceof Request && input.signal?.aborted) || init?.signal?.aborted || false,\n }\n\n observable.notify(context)\n\n // Those properties can be changed by observable subscribers\n parameters[0] = context.input as RequestInfo | URL\n parameters[1] = context.init\n\n onPostCall((responsePromise) => {\n afterSend(observable, responsePromise, context).catch(monitorError)\n })\n}\n\nasync function afterSend(\n observable: Observable<FetchContext>,\n responsePromise: Promise<Response>,\n startContext: FetchStartContext\n) {\n const context = startContext as unknown as FetchResolveContext\n\n let response: Response\n\n try {\n response = await responsePromise\n } catch (error) {\n observable.notify({\n ...context,\n state: 'resolve',\n status: 0,\n isAborted:\n context.init?.signal?.aborted || (error instanceof DOMException && error.code === DOMException.ABORT_ERR),\n error: error as Error,\n })\n return\n }\n\n context.response = response\n context.status = response.status\n context.responseType = response.type\n context.isAborted = false\n\n const responseBodyCondition: ResponseBodyAction = responseBodyActionGetters.reduce<number>(\n (action, getter) => Math.max(action, getter(context)),\n ResponseBodyAction.IGNORE\n )\n\n if (responseBodyCondition === ResponseBodyAction.COLLECT) {\n const clonedResponse = tryToClone(response)\n if (clonedResponse?.body) {\n try {\n const bytes = await readBytesFromStream(clonedResponse.body)\n context.responseBody = new TextDecoder().decode(bytes)\n } catch {\n // Ignore errors when reading the response body (e.g., stream aborted, network errors)\n // This is not critical and should not be reported as an SDK error\n }\n }\n }\n\n observable.notify({ ...context, state: 'resolve' })\n}\n"],"mappings":";;;;;;;;;;;;AA2CA,IAAkB,qBAAX,yBAAA,oBAAA;CACL,mBAAA,mBAAA,YAAA,KAAA;CACA,mBAAA,mBAAA,aAAA,KAAA;;AACF,EAAA,CAAA,CAAA;AAEA,IAAI;AACJ,MAAM,4BAAwD,CAAC;AAE/D,SAAgB,oBAAoB,EAAE,uBAA0E,CAAC,GAAG;CAClH,IAAI,oBACF,0BAA0B,KAAK,kBAAkB;CAEnD,IAAI,CAAC,iBACH,kBAAkB,sBAAsB;CAE1C,OAAO;AACT;AAOA,SAAS,wBAAwB;CAC/B,OAAO,IAAI,YAA0B,eAAe;EAElD,IAAI,CAAC,aAAa,OAChB;EAGF,MAAM,EAAE,SAAS,iBAAiB,cAAc,UAAU,SAAS,WAAW,MAAM,UAAU,GAAG,EAC/F,sBAAsB,KACxB,CAAC;EAED,OAAO;CACT,CAAC;AACH;AAEA,SAAS,WACP,EAAE,YAAY,YAAY,iBAC1B,YACA;CACA,MAAM,CAAC,OAAO,QAAQ;CACtB,IAAI,mBAAmB,MAAM;CAE7B,IAAI,qBAAqB,KAAA,KAAa,iBAAiB,SACrD,mBAAmB,MAAM;CAG3B,MAAM,SAAS,qBAAqB,KAAA,IAAY,OAAO,gBAAgB,CAAC,CAAC,YAAY,IAAI;CACzF,MAAM,MAAM,iBAAiB,UAAU,MAAM,MAAM,aAAa,OAAO,KAAK,CAAC;CAG7E,MAAM,UAA6B;EACjC,OAAO;EACP;EACA;EACA;EACA,aAPkB,UAOR;EACV;EACA;EACA,kBAAmB,iBAAiB,WAAW,MAAM,QAAQ,WAAY,MAAM,QAAQ,WAAW;CACpG;CAEA,WAAW,OAAO,OAAO;CAGzB,WAAW,KAAK,QAAQ;CACxB,WAAW,KAAK,QAAQ;CAExB,YAAY,oBAAoB;EAC9B,UAAU,YAAY,iBAAiB,OAAO,CAAC,CAAC,MAAM,YAAY;CACpE,CAAC;AACH;AAEA,eAAe,UACb,YACA,iBACA,cACA;CACA,MAAM,UAAU;CAEhB,IAAI;CAEJ,IAAI;EACF,WAAW,MAAM;CACnB,SAAS,OAAO;EACd,WAAW,OAAO;GAChB,GAAG;GACH,OAAO;GACP,QAAQ;GACR,WACE,QAAQ,MAAM,QAAQ,WAAY,iBAAiB,gBAAgB,MAAM,SAAS,aAAa;GAC1F;EACT,CAAC;EACD;CACF;CAEA,QAAQ,WAAW;CACnB,QAAQ,SAAS,SAAS;CAC1B,QAAQ,eAAe,SAAS;CAChC,QAAQ,YAAY;CAOpB,IALkD,0BAA0B,QACzE,QAAQ,WAAW,KAAK,IAAI,QAAQ,OAAO,OAAO,CAAC,GAAA,CAI9B,MAAA,GAAkC;EACxD,MAAM,iBAAiB,WAAW,QAAQ;EAC1C,IAAI,gBAAgB,MAClB,IAAI;GACF,MAAM,QAAQ,MAAM,oBAAoB,eAAe,IAAI;GAC3D,QAAQ,eAAe,IAAI,YAAY,CAAC,CAAC,OAAO,KAAK;EACvD,QAAQ,CAGR;CAEJ;CAEA,WAAW,OAAO;EAAE,GAAG;EAAS,OAAO;CAAU,CAAC;AACpD"}
@@ -0,0 +1,56 @@
1
+ import { Observable } from "../tools/observable.mjs";
2
+ import { addEventListener, addEventListeners } from "./addEventListener.mjs";
3
+ import { objectValues } from "../tools/utils/polyfills.mjs";
4
+ import { globalObject } from "@kubesense/kubesense-js-core/util";
5
+ //#region src/browser/pageMayExitObservable.ts
6
+ const PageExitReason = {
7
+ HIDDEN: "visibility_hidden",
8
+ UNLOADING: "before_unload",
9
+ PAGEHIDE: "page_hide",
10
+ FROZEN: "page_frozen"
11
+ };
12
+ function createPageMayExitObservable() {
13
+ return new Observable((observable) => {
14
+ const window = globalObject.window;
15
+ if (!window) return;
16
+ const { stop: stopListeners } = addEventListeners(window, ["visibilitychange", "freeze"], (event) => {
17
+ if (event.type === "visibilitychange" && document.visibilityState === "hidden")
18
+ /**
19
+ * Only event that guarantee to fire on mobile devices when the page transitions to background state
20
+ * (e.g. when user switches to a different application, goes to homescreen, etc), or is being unloaded.
21
+ */
22
+ observable.notify({ reason: PageExitReason.HIDDEN });
23
+ else if (event.type === "freeze")
24
+ /**
25
+ * After transitioning in background a tab can be freezed to preserve resources. (cf: https://developer.chrome.com/blog/page-lifecycle-api)
26
+ * Allow to collect events happening between hidden and frozen state.
27
+ */
28
+ observable.notify({ reason: PageExitReason.FROZEN });
29
+ }, { capture: true });
30
+ const stopBeforeUnloadListener = addEventListener(window, "beforeunload", () => {
31
+ observable.notify({ reason: PageExitReason.UNLOADING });
32
+ }).stop;
33
+ /**
34
+ * Fires when the page is actually going away — a closed tab, a navigation,
35
+ * or a move into the bfcache — and unlike beforeunload it is not skipped on
36
+ * mobile or when the browser discards the tab. It does not fire on a plain
37
+ * tab switch, so it says "this page is done" in a way visibilitychange
38
+ * cannot.
39
+ */
40
+ const stopPageHideListener = addEventListener(window, "pagehide", () => {
41
+ observable.notify({ reason: PageExitReason.PAGEHIDE });
42
+ }).stop;
43
+ return () => {
44
+ stopListeners();
45
+ stopBeforeUnloadListener();
46
+ stopPageHideListener();
47
+ };
48
+ });
49
+ }
50
+ function isPageExitReason(reason) {
51
+ return objectValues(PageExitReason).includes(reason);
52
+ }
53
+ //#endregion
54
+ export { PageExitReason, createPageMayExitObservable, isPageExitReason };
55
+
56
+ //# sourceMappingURL=pageMayExitObservable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageMayExitObservable.mjs","names":[],"sources":["../../src/browser/pageMayExitObservable.ts"],"sourcesContent":["import { globalObject } from '@kubesense/kubesense-js-core/util'\nimport { Observable } from '../tools/observable'\nimport { objectValues } from '../tools/utils/polyfills'\nimport { addEventListeners, addEventListener, DOM_EVENT } from './addEventListener'\n\nexport const PageExitReason = {\n HIDDEN: 'visibility_hidden',\n UNLOADING: 'before_unload',\n PAGEHIDE: 'page_hide',\n FROZEN: 'page_frozen',\n} as const\n\nexport type PageExitReason = (typeof PageExitReason)[keyof typeof PageExitReason]\n\nexport interface PageMayExitEvent {\n reason: PageExitReason\n}\n\nexport function createPageMayExitObservable(): Observable<PageMayExitEvent> {\n return new Observable<PageMayExitEvent>((observable) => {\n const window = globalObject.window\n if (!window) {\n // Page exit is not observable in non-browser environments\n return\n }\n const { stop: stopListeners } = addEventListeners(\n window,\n [DOM_EVENT.VISIBILITY_CHANGE, DOM_EVENT.FREEZE],\n (event) => {\n if (event.type === DOM_EVENT.VISIBILITY_CHANGE && document.visibilityState === 'hidden') {\n /**\n * Only event that guarantee to fire on mobile devices when the page transitions to background state\n * (e.g. when user switches to a different application, goes to homescreen, etc), or is being unloaded.\n */\n observable.notify({ reason: PageExitReason.HIDDEN })\n } else if (event.type === DOM_EVENT.FREEZE) {\n /**\n * After transitioning in background a tab can be freezed to preserve resources. (cf: https://developer.chrome.com/blog/page-lifecycle-api)\n * Allow to collect events happening between hidden and frozen state.\n */\n observable.notify({ reason: PageExitReason.FROZEN })\n }\n },\n { capture: true }\n )\n\n const stopBeforeUnloadListener = addEventListener(window, DOM_EVENT.BEFORE_UNLOAD, () => {\n observable.notify({ reason: PageExitReason.UNLOADING })\n }).stop\n\n /**\n * Fires when the page is actually going away — a closed tab, a navigation,\n * or a move into the bfcache — and unlike beforeunload it is not skipped on\n * mobile or when the browser discards the tab. It does not fire on a plain\n * tab switch, so it says \"this page is done\" in a way visibilitychange\n * cannot.\n */\n const stopPageHideListener = addEventListener(window, DOM_EVENT.PAGE_HIDE, () => {\n observable.notify({ reason: PageExitReason.PAGEHIDE })\n }).stop\n\n return () => {\n stopListeners()\n stopBeforeUnloadListener()\n stopPageHideListener()\n }\n })\n}\n\nexport function isPageExitReason(reason: string): reason is PageExitReason {\n return objectValues(PageExitReason).includes(reason as PageExitReason)\n}\n"],"mappings":";;;;;AAKA,MAAa,iBAAiB;CAC5B,QAAQ;CACR,WAAW;CACX,UAAU;CACV,QAAQ;AACV;AAQA,SAAgB,8BAA4D;CAC1E,OAAO,IAAI,YAA8B,eAAe;EACtD,MAAM,SAAS,aAAa;EAC5B,IAAI,CAAC,QAEH;EAEF,MAAM,EAAE,MAAM,kBAAkB,kBAC9B,QACA,CAAA,oBAAA,QAA8C,IAC7C,UAAU;GACT,IAAI,MAAM,SAAA,sBAAwC,SAAS,oBAAoB;;;;;GAK7E,WAAW,OAAO,EAAE,QAAQ,eAAe,OAAO,CAAC;QAC9C,IAAI,MAAM,SAAA;;;;;GAKf,WAAW,OAAO,EAAE,QAAQ,eAAe,OAAO,CAAC;EAEvD,GACA,EAAE,SAAS,KAAK,CAClB;EAEA,MAAM,2BAA2B,iBAAiB,QAAA,sBAAuC;GACvF,WAAW,OAAO,EAAE,QAAQ,eAAe,UAAU,CAAC;EACxD,CAAC,CAAC,CAAC;;;;;;;;EASH,MAAM,uBAAuB,iBAAiB,QAAA,kBAAmC;GAC/E,WAAW,OAAO,EAAE,QAAQ,eAAe,SAAS,CAAC;EACvD,CAAC,CAAC,CAAC;EAEH,aAAa;GACX,cAAc;GACd,yBAAyB;GACzB,qBAAqB;EACvB;CACF,CAAC;AACH;AAEA,SAAgB,iBAAiB,QAA0C;CACzE,OAAO,aAAa,cAAc,CAAC,CAAC,SAAS,MAAwB;AACvE"}
@@ -0,0 +1,19 @@
1
+ import { noop } from "../tools/utils/functionUtils.mjs";
2
+ import { addEventListener } from "./addEventListener.mjs";
3
+ //#region src/browser/runOnReadyState.ts
4
+ function runOnReadyState(expectedReadyState, callback) {
5
+ if (document.readyState === expectedReadyState || document.readyState === "complete") {
6
+ callback();
7
+ return { stop: noop };
8
+ }
9
+ return addEventListener(window, expectedReadyState === "complete" ? "load" : "DOMContentLoaded", callback, { once: true });
10
+ }
11
+ function asyncRunOnReadyState(expectedReadyState) {
12
+ return new Promise((resolve) => {
13
+ runOnReadyState(expectedReadyState, resolve);
14
+ });
15
+ }
16
+ //#endregion
17
+ export { asyncRunOnReadyState, runOnReadyState };
18
+
19
+ //# sourceMappingURL=runOnReadyState.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runOnReadyState.mjs","names":[],"sources":["../../src/browser/runOnReadyState.ts"],"sourcesContent":["import { noop } from '../tools/utils/functionUtils'\nimport { DOM_EVENT, addEventListener } from './addEventListener'\n\nexport function runOnReadyState(\n expectedReadyState: 'complete' | 'interactive',\n callback: () => void\n): { stop: () => void } {\n if (document.readyState === expectedReadyState || document.readyState === 'complete') {\n callback()\n return { stop: noop }\n }\n const eventName = expectedReadyState === 'complete' ? DOM_EVENT.LOAD : DOM_EVENT.DOM_CONTENT_LOADED\n return addEventListener(window, eventName, callback, { once: true })\n}\n\nexport function asyncRunOnReadyState(expectedReadyState: 'complete' | 'interactive'): Promise<void> {\n return new Promise((resolve) => {\n runOnReadyState(expectedReadyState, resolve)\n })\n}\n"],"mappings":";;;AAGA,SAAgB,gBACd,oBACA,UACsB;CACtB,IAAI,SAAS,eAAe,sBAAsB,SAAS,eAAe,YAAY;EACpF,SAAS;EACT,OAAO,EAAE,MAAM,KAAK;CACtB;CAEA,OAAO,iBAAiB,QADN,uBAAuB,aAAA,SAAA,oBACE,UAAU,EAAE,MAAM,KAAK,CAAC;AACrE;AAEA,SAAgB,qBAAqB,oBAA+D;CAClG,OAAO,IAAI,SAAS,YAAY;EAC9B,gBAAgB,oBAAoB,OAAO;CAC7C,CAAC;AACH"}
@@ -0,0 +1,92 @@
1
+ import { Observable } from "../tools/observable.mjs";
2
+ import { instrumentConstructor, instrumentMethod } from "../tools/instrumentMethod.mjs";
3
+ import { addEventListener } from "./addEventListener.mjs";
4
+ import { computeBytesCount } from "../tools/utils/byteUtils.mjs";
5
+ import { globalObject } from "@kubesense/kubesense-js-core/util";
6
+ import { clocksNow } from "@kubesense/kubesense-js-core/time";
7
+ //#region src/browser/webSocketObservable.ts
8
+ function isGlobalWithWebSocket(global) {
9
+ return typeof global.WebSocket === "function";
10
+ }
11
+ let webSocketObservable;
12
+ function initWebSocketObservable() {
13
+ if (!webSocketObservable) webSocketObservable = createWebSocketObservable();
14
+ return webSocketObservable;
15
+ }
16
+ function createWebSocketObservable() {
17
+ return new Observable((observable) => {
18
+ if (!isGlobalWithWebSocket(globalObject)) return;
19
+ const { stop: stopInstrumentingConstructor } = instrumentConstructor(globalObject, "WebSocket", ({ parameters, onPostCall }) => {
20
+ const protocols = Array.isArray(parameters[1]) ? [].concat(parameters[1]) : parameters[1];
21
+ const startClocks = clocksNow();
22
+ onPostCall((instance) => {
23
+ observable.notify({
24
+ state: "connecting",
25
+ instance,
26
+ url: instance.url,
27
+ protocols,
28
+ startClocks
29
+ });
30
+ attachInstanceListeners(instance, observable);
31
+ });
32
+ });
33
+ const { stop: stopInstrumentingSend } = instrumentMethod(globalObject.WebSocket.prototype, "send", ({ target: instance, parameters: [data], onPostCall }) => {
34
+ const size = computePayloadSize(data);
35
+ const bufferedAmountPreSend = instance.bufferedAmount;
36
+ onPostCall(() => {
37
+ observable.notify({
38
+ state: "message-out",
39
+ instance,
40
+ size,
41
+ bufferedAmountPreSend,
42
+ at: clocksNow()
43
+ });
44
+ });
45
+ });
46
+ return () => {
47
+ stopInstrumentingConstructor();
48
+ stopInstrumentingSend();
49
+ };
50
+ });
51
+ }
52
+ function attachInstanceListeners(instance, observable) {
53
+ const { stop: stopOpen } = addEventListener(instance, "open", () => {
54
+ observable.notify({
55
+ state: "open",
56
+ instance,
57
+ openClocks: clocksNow(),
58
+ protocol: instance.protocol || ""
59
+ });
60
+ stopOpen();
61
+ });
62
+ const { stop: stopMessage } = addEventListener(instance, "message", (event) => {
63
+ observable.notify({
64
+ state: "message-in",
65
+ instance,
66
+ size: computePayloadSize(event.data),
67
+ at: clocksNow()
68
+ });
69
+ });
70
+ const { stop: stopClose } = addEventListener(instance, "close", (event) => {
71
+ observable.notify({
72
+ state: "closed",
73
+ instance,
74
+ code: event.code,
75
+ reason: event.reason,
76
+ wasClean: event.wasClean,
77
+ at: clocksNow()
78
+ });
79
+ stopMessage();
80
+ stopClose();
81
+ });
82
+ }
83
+ function computePayloadSize(data) {
84
+ if (typeof data === "string") return computeBytesCount(data);
85
+ if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) return data.byteLength;
86
+ if (typeof Blob !== "undefined" && data instanceof Blob) return data.size;
87
+ return 0;
88
+ }
89
+ //#endregion
90
+ export { initWebSocketObservable };
91
+
92
+ //# sourceMappingURL=webSocketObservable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webSocketObservable.mjs","names":[],"sources":["../../src/browser/webSocketObservable.ts"],"sourcesContent":["import type { ClocksState } from '@kubesense/kubesense-js-core/time'\nimport { clocksNow } from '@kubesense/kubesense-js-core/time'\nimport type { GlobalObject } from '@kubesense/kubesense-js-core/util'\nimport { globalObject } from '@kubesense/kubesense-js-core/util'\nimport { instrumentConstructor, instrumentMethod } from '../tools/instrumentMethod'\nimport { Observable } from '../tools/observable'\nimport { computeBytesCount } from '../tools/utils/byteUtils'\nimport { addEventListener } from './addEventListener'\n\ntype GlobalWithWebSocket = GlobalObject & { WebSocket: typeof WebSocket }\n\nfunction isGlobalWithWebSocket(global: GlobalObject): global is GlobalWithWebSocket {\n return typeof (global as { WebSocket?: unknown }).WebSocket === 'function'\n}\n\nexport interface WebSocketConnectingContext {\n state: 'connecting'\n instance: WebSocket\n url: string\n protocols?: string | string[]\n startClocks: ClocksState\n}\n\nexport interface WebSocketOpenContext {\n state: 'open'\n instance: WebSocket\n openClocks: ClocksState\n protocol: string\n}\n\nexport interface WebSocketMessageInContext {\n state: 'message-in'\n instance: WebSocket\n size: number\n at: ClocksState\n}\n\nexport interface WebSocketMessageOutContext {\n state: 'message-out'\n instance: WebSocket\n size: number\n bufferedAmountPreSend: number\n at: ClocksState\n}\n\nexport interface WebSocketClosedContext {\n state: 'closed'\n instance: WebSocket\n code: number\n reason: string\n wasClean: boolean\n at: ClocksState\n}\n\nexport type WebSocketContext =\n | WebSocketConnectingContext\n | WebSocketOpenContext\n | WebSocketMessageInContext\n | WebSocketMessageOutContext\n | WebSocketClosedContext\n\nlet webSocketObservable: Observable<WebSocketContext> | undefined\n\nexport function initWebSocketObservable(): Observable<WebSocketContext> {\n if (!webSocketObservable) {\n webSocketObservable = createWebSocketObservable()\n }\n\n return webSocketObservable\n}\n\nfunction createWebSocketObservable() {\n return new Observable<WebSocketContext>((observable) => {\n if (!isGlobalWithWebSocket(globalObject)) {\n return undefined\n }\n\n const { stop: stopInstrumentingConstructor } = instrumentConstructor(\n globalObject,\n 'WebSocket',\n ({ parameters, onPostCall }) => {\n const protocols = Array.isArray(parameters[1]) ? ([] as string[]).concat(parameters[1]) : parameters[1]\n const startClocks = clocksNow()\n\n onPostCall((instance) => {\n observable.notify({\n state: 'connecting',\n instance,\n url: instance.url,\n protocols,\n startClocks,\n })\n\n attachInstanceListeners(instance, observable)\n })\n }\n )\n\n const { stop: stopInstrumentingSend } = instrumentMethod(\n globalObject.WebSocket.prototype,\n 'send',\n ({ target: instance, parameters: [data], onPostCall }) => {\n const size = computePayloadSize(data)\n const bufferedAmountPreSend = instance.bufferedAmount\n\n onPostCall(() => {\n observable.notify({\n state: 'message-out',\n instance,\n size,\n bufferedAmountPreSend,\n at: clocksNow(),\n })\n })\n }\n )\n\n return () => {\n stopInstrumentingConstructor()\n stopInstrumentingSend()\n }\n })\n}\n\nfunction attachInstanceListeners(instance: WebSocket, observable: Observable<WebSocketContext>) {\n const { stop: stopOpen } = addEventListener(instance, 'open', () => {\n observable.notify({\n state: 'open',\n instance,\n openClocks: clocksNow(),\n protocol: instance.protocol || '',\n })\n\n stopOpen()\n })\n\n const { stop: stopMessage } = addEventListener(instance, 'message', (event) => {\n observable.notify({\n state: 'message-in',\n instance,\n size: computePayloadSize(event.data),\n at: clocksNow(),\n })\n })\n\n const { stop: stopClose } = addEventListener(instance, 'close', (event) => {\n observable.notify({\n state: 'closed',\n instance,\n code: event.code,\n reason: event.reason,\n wasClean: event.wasClean,\n at: clocksNow(),\n })\n\n stopMessage()\n stopClose()\n })\n}\n\nfunction computePayloadSize(data: unknown): number {\n if (typeof data === 'string') {\n return computeBytesCount(data)\n }\n if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) {\n return data.byteLength\n }\n if (typeof Blob !== 'undefined' && data instanceof Blob) {\n return data.size\n }\n return 0\n}\n\n/**\n * Reset the WebSocket observable global state. Test-only.\n *\n * @internal\n */\nexport function resetWebSocketObservable() {\n webSocketObservable = undefined\n}\n"],"mappings":";;;;;;;AAWA,SAAS,sBAAsB,QAAqD;CAClF,OAAO,OAAQ,OAAmC,cAAc;AAClE;AAgDA,IAAI;AAEJ,SAAgB,0BAAwD;CACtE,IAAI,CAAC,qBACH,sBAAsB,0BAA0B;CAGlD,OAAO;AACT;AAEA,SAAS,4BAA4B;CACnC,OAAO,IAAI,YAA8B,eAAe;EACtD,IAAI,CAAC,sBAAsB,YAAY,GACrC;EAGF,MAAM,EAAE,MAAM,iCAAiC,sBAC7C,cACA,cACC,EAAE,YAAY,iBAAiB;GAC9B,MAAM,YAAY,MAAM,QAAQ,WAAW,EAAE,IAAK,CAAC,CAAC,CAAc,OAAO,WAAW,EAAE,IAAI,WAAW;GACrG,MAAM,cAAc,UAAU;GAE9B,YAAY,aAAa;IACvB,WAAW,OAAO;KAChB,OAAO;KACP;KACA,KAAK,SAAS;KACd;KACA;IACF,CAAC;IAED,wBAAwB,UAAU,UAAU;GAC9C,CAAC;EACH,CACF;EAEA,MAAM,EAAE,MAAM,0BAA0B,iBACtC,aAAa,UAAU,WACvB,SACC,EAAE,QAAQ,UAAU,YAAY,CAAC,OAAO,iBAAiB;GACxD,MAAM,OAAO,mBAAmB,IAAI;GACpC,MAAM,wBAAwB,SAAS;GAEvC,iBAAiB;IACf,WAAW,OAAO;KAChB,OAAO;KACP;KACA;KACA;KACA,IAAI,UAAU;IAChB,CAAC;GACH,CAAC;EACH,CACF;EAEA,aAAa;GACX,6BAA6B;GAC7B,sBAAsB;EACxB;CACF,CAAC;AACH;AAEA,SAAS,wBAAwB,UAAqB,YAA0C;CAC9F,MAAM,EAAE,MAAM,aAAa,iBAAiB,UAAU,cAAc;EAClE,WAAW,OAAO;GAChB,OAAO;GACP;GACA,YAAY,UAAU;GACtB,UAAU,SAAS,YAAY;EACjC,CAAC;EAED,SAAS;CACX,CAAC;CAED,MAAM,EAAE,MAAM,gBAAgB,iBAAiB,UAAU,YAAY,UAAU;EAC7E,WAAW,OAAO;GAChB,OAAO;GACP;GACA,MAAM,mBAAmB,MAAM,IAAI;GACnC,IAAI,UAAU;EAChB,CAAC;CACH,CAAC;CAED,MAAM,EAAE,MAAM,cAAc,iBAAiB,UAAU,UAAU,UAAU;EACzE,WAAW,OAAO;GAChB,OAAO;GACP;GACA,MAAM,MAAM;GACZ,QAAQ,MAAM;GACd,UAAU,MAAM;GAChB,IAAI,UAAU;EAChB,CAAC;EAED,YAAY;EACZ,UAAU;CACZ,CAAC;AACH;AAEA,SAAS,mBAAmB,MAAuB;CACjD,IAAI,OAAO,SAAS,UAClB,OAAO,kBAAkB,IAAI;CAE/B,IAAI,gBAAgB,eAAe,YAAY,OAAO,IAAI,GACxD,OAAO,KAAK;CAEd,IAAI,OAAO,SAAS,eAAe,gBAAgB,MACjD,OAAO,KAAK;CAEd,OAAO;AACT"}
@@ -0,0 +1,73 @@
1
+ import { Observable } from "../tools/observable.mjs";
2
+ import { instrumentMethod } from "../tools/instrumentMethod.mjs";
3
+ import { addEventListener } from "./addEventListener.mjs";
4
+ import { globalObject, normalizeUrl } from "@kubesense/kubesense-js-core/util";
5
+ import { clocksNow, elapsed, timeStampNow } from "@kubesense/kubesense-js-core/time";
6
+ //#region src/browser/xhrObservable.ts
7
+ let xhrObservable;
8
+ const xhrContexts = /* @__PURE__ */ new WeakMap();
9
+ function initXhrObservable() {
10
+ if (!xhrObservable) xhrObservable = createXhrObservable();
11
+ return xhrObservable;
12
+ }
13
+ function createXhrObservable() {
14
+ if (!("XMLHttpRequest" in globalObject)) return new Observable();
15
+ return new Observable((observable) => {
16
+ const { stop: stopInstrumentingStart } = instrumentMethod(XMLHttpRequest.prototype, "open", openXhr);
17
+ const { stop: stopInstrumentingSend } = instrumentMethod(XMLHttpRequest.prototype, "send", (call) => {
18
+ sendXhr(call, observable);
19
+ }, { computeHandlingStack: true });
20
+ const { stop: stopInstrumentingAbort } = instrumentMethod(XMLHttpRequest.prototype, "abort", abortXhr);
21
+ return () => {
22
+ stopInstrumentingStart();
23
+ stopInstrumentingSend();
24
+ stopInstrumentingAbort();
25
+ };
26
+ });
27
+ }
28
+ function openXhr({ target: xhr, parameters: [method, url] }) {
29
+ xhrContexts.set(xhr, {
30
+ state: "open",
31
+ method: String(method).toUpperCase(),
32
+ url: normalizeUrl(String(url))
33
+ });
34
+ }
35
+ function sendXhr({ target: xhr, parameters: [body], handlingStack }, observable) {
36
+ const context = xhrContexts.get(xhr);
37
+ if (!context) return;
38
+ const startContext = context;
39
+ startContext.state = "start";
40
+ startContext.startClocks = clocksNow();
41
+ startContext.isAborted = false;
42
+ startContext.xhr = xhr;
43
+ startContext.handlingStack = handlingStack;
44
+ startContext.requestBody = body;
45
+ let hasBeenReported = false;
46
+ const { stop: stopInstrumentingOnReadyStateChange } = instrumentMethod(xhr, "onreadystatechange", () => {
47
+ if (xhr.readyState === XMLHttpRequest.DONE) onEnd();
48
+ });
49
+ const onEnd = () => {
50
+ unsubscribeLoadEndListener();
51
+ stopInstrumentingOnReadyStateChange();
52
+ if (hasBeenReported) return;
53
+ hasBeenReported = true;
54
+ const completeContext = context;
55
+ completeContext.duration = elapsed(startContext.startClocks.timeStamp, timeStampNow());
56
+ completeContext.status = xhr.status;
57
+ if (typeof xhr.response === "string") completeContext.responseBody = xhr.response;
58
+ observable.notify({
59
+ ...completeContext,
60
+ state: "complete"
61
+ });
62
+ };
63
+ const { stop: unsubscribeLoadEndListener } = addEventListener(xhr, "loadend", onEnd);
64
+ observable.notify(startContext);
65
+ }
66
+ function abortXhr({ target: xhr }) {
67
+ const context = xhrContexts.get(xhr);
68
+ if (context) context.isAborted = true;
69
+ }
70
+ //#endregion
71
+ export { initXhrObservable };
72
+
73
+ //# sourceMappingURL=xhrObservable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xhrObservable.mjs","names":[],"sources":["../../src/browser/xhrObservable.ts"],"sourcesContent":["import { elapsed, timeStampNow, clocksNow } from '@kubesense/kubesense-js-core/time'\nimport type { Duration, ClocksState } from '@kubesense/kubesense-js-core/time'\nimport { normalizeUrl, globalObject } from '@kubesense/kubesense-js-core/util'\nimport type { InstrumentedMethodCall } from '../tools/instrumentMethod'\nimport { instrumentMethod } from '../tools/instrumentMethod'\nimport { Observable } from '../tools/observable'\nimport { addEventListener } from './addEventListener'\n\nexport interface XhrOpenContext {\n state: 'open'\n method: string\n url: string\n}\n\nexport interface XhrStartContext extends Omit<XhrOpenContext, 'state'> {\n state: 'start'\n startClocks: ClocksState\n isAborted: boolean\n xhr: XMLHttpRequest\n handlingStack?: string\n requestBody?: unknown\n}\n\nexport interface XhrCompleteContext extends Omit<XhrStartContext, 'state'> {\n state: 'complete'\n duration: Duration\n status: number\n responseBody?: string\n}\n\nexport type XhrContext = XhrOpenContext | XhrStartContext | XhrCompleteContext\n\nlet xhrObservable: Observable<XhrContext> | undefined\nconst xhrContexts = new WeakMap<XMLHttpRequest, XhrContext>()\n\nexport function initXhrObservable() {\n if (!xhrObservable) {\n xhrObservable = createXhrObservable()\n }\n return xhrObservable\n}\n\nfunction createXhrObservable() {\n if (!('XMLHttpRequest' in globalObject)) {\n return new Observable<XhrContext>()\n }\n\n return new Observable<XhrContext>((observable) => {\n const { stop: stopInstrumentingStart } = instrumentMethod(XMLHttpRequest.prototype, 'open', openXhr)\n\n const { stop: stopInstrumentingSend } = instrumentMethod(\n XMLHttpRequest.prototype,\n 'send',\n (call) => {\n sendXhr(call, observable)\n },\n { computeHandlingStack: true }\n )\n\n const { stop: stopInstrumentingAbort } = instrumentMethod(XMLHttpRequest.prototype, 'abort', abortXhr)\n\n return () => {\n stopInstrumentingStart()\n stopInstrumentingSend()\n stopInstrumentingAbort()\n }\n })\n}\n\nfunction openXhr({ target: xhr, parameters: [method, url] }: InstrumentedMethodCall<XMLHttpRequest, 'open'>) {\n xhrContexts.set(xhr, {\n state: 'open',\n method: String(method).toUpperCase(),\n url: normalizeUrl(String(url)),\n })\n}\n\nfunction sendXhr(\n { target: xhr, parameters: [body], handlingStack }: InstrumentedMethodCall<XMLHttpRequest, 'send'>,\n observable: Observable<XhrContext>\n) {\n const context = xhrContexts.get(xhr)\n if (!context) {\n return\n }\n\n const startContext = context as XhrStartContext\n startContext.state = 'start'\n startContext.startClocks = clocksNow()\n startContext.isAborted = false\n startContext.xhr = xhr\n startContext.handlingStack = handlingStack\n startContext.requestBody = body\n\n let hasBeenReported = false\n\n const { stop: stopInstrumentingOnReadyStateChange } = instrumentMethod(xhr, 'onreadystatechange', () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n // Try to report the XHR as soon as possible, because the XHR may be mutated by the\n // application during a future event. For example, Angular is calling .abort() on\n // completed requests during an onreadystatechange event, so the status becomes '0'\n // before the request is collected.\n onEnd()\n }\n })\n\n const onEnd = () => {\n unsubscribeLoadEndListener()\n stopInstrumentingOnReadyStateChange()\n if (hasBeenReported) {\n return\n }\n hasBeenReported = true\n\n const completeContext = context as XhrCompleteContext\n completeContext.duration = elapsed(startContext.startClocks.timeStamp, timeStampNow())\n completeContext.status = xhr.status\n if (typeof xhr.response === 'string') {\n completeContext.responseBody = xhr.response\n }\n observable.notify({ ...completeContext, state: 'complete' })\n }\n\n const { stop: unsubscribeLoadEndListener } = addEventListener(xhr, 'loadend', onEnd)\n\n observable.notify(startContext)\n}\n\nfunction abortXhr({ target: xhr }: InstrumentedMethodCall<XMLHttpRequest, 'abort'>) {\n const context = xhrContexts.get(xhr) as XhrStartContext | undefined\n if (context) {\n context.isAborted = true\n }\n}\n\n/**\n * Reset the XHR observable global state. This is useful for testing to ensure clean state between tests.\n *\n * @internal\n */\nexport function resetXhrObservable() {\n xhrObservable = undefined\n}\n"],"mappings":";;;;;;AAgCA,IAAI;AACJ,MAAM,8BAAc,IAAI,QAAoC;AAE5D,SAAgB,oBAAoB;CAClC,IAAI,CAAC,eACH,gBAAgB,oBAAoB;CAEtC,OAAO;AACT;AAEA,SAAS,sBAAsB;CAC7B,IAAI,EAAE,oBAAoB,eACxB,OAAO,IAAI,WAAuB;CAGpC,OAAO,IAAI,YAAwB,eAAe;EAChD,MAAM,EAAE,MAAM,2BAA2B,iBAAiB,eAAe,WAAW,QAAQ,OAAO;EAEnG,MAAM,EAAE,MAAM,0BAA0B,iBACtC,eAAe,WACf,SACC,SAAS;GACR,QAAQ,MAAM,UAAU;EAC1B,GACA,EAAE,sBAAsB,KAAK,CAC/B;EAEA,MAAM,EAAE,MAAM,2BAA2B,iBAAiB,eAAe,WAAW,SAAS,QAAQ;EAErG,aAAa;GACX,uBAAuB;GACvB,sBAAsB;GACtB,uBAAuB;EACzB;CACF,CAAC;AACH;AAEA,SAAS,QAAQ,EAAE,QAAQ,KAAK,YAAY,CAAC,QAAQ,QAAwD;CAC3G,YAAY,IAAI,KAAK;EACnB,OAAO;EACP,QAAQ,OAAO,MAAM,CAAC,CAAC,YAAY;EACnC,KAAK,aAAa,OAAO,GAAG,CAAC;CAC/B,CAAC;AACH;AAEA,SAAS,QACP,EAAE,QAAQ,KAAK,YAAY,CAAC,OAAO,iBACnC,YACA;CACA,MAAM,UAAU,YAAY,IAAI,GAAG;CACnC,IAAI,CAAC,SACH;CAGF,MAAM,eAAe;CACrB,aAAa,QAAQ;CACrB,aAAa,cAAc,UAAU;CACrC,aAAa,YAAY;CACzB,aAAa,MAAM;CACnB,aAAa,gBAAgB;CAC7B,aAAa,cAAc;CAE3B,IAAI,kBAAkB;CAEtB,MAAM,EAAE,MAAM,wCAAwC,iBAAiB,KAAK,4BAA4B;EACtG,IAAI,IAAI,eAAe,eAAe,MAKpC,MAAM;CAEV,CAAC;CAED,MAAM,cAAc;EAClB,2BAA2B;EAC3B,oCAAoC;EACpC,IAAI,iBACF;EAEF,kBAAkB;EAElB,MAAM,kBAAkB;EACxB,gBAAgB,WAAW,QAAQ,aAAa,YAAY,WAAW,aAAa,CAAC;EACrF,gBAAgB,SAAS,IAAI;EAC7B,IAAI,OAAO,IAAI,aAAa,UAC1B,gBAAgB,eAAe,IAAI;EAErC,WAAW,OAAO;GAAE,GAAG;GAAiB,OAAO;EAAW,CAAC;CAC7D;CAEA,MAAM,EAAE,MAAM,+BAA+B,iBAAiB,KAAK,WAAW,KAAK;CAEnF,WAAW,OAAO,YAAY;AAChC;AAEA,SAAS,SAAS,EAAE,QAAQ,OAAwD;CAClF,MAAM,UAAU,YAAY,IAAI,GAAG;CACnC,IAAI,SACF,QAAQ,YAAY;AAExB"}
@@ -0,0 +1,27 @@
1
+ import { display } from "../tools/display.mjs";
2
+ import { matchList } from "../tools/matchOption.mjs";
3
+ import { mockable } from "../tools/mockable.mjs";
4
+ import { isUnsupportedExtensionEnvironment } from "./extension/extensionUtils.mjs";
5
+ import { globalObject } from "@kubesense/kubesense-js-core/util";
6
+ //#region src/domain/allowedTrackingOrigins.ts
7
+ const ERROR_DOES_NOT_HAVE_ALLOWED_TRACKING_ORIGIN = "Running the Browser SDK in a Web extension content script is forbidden unless the `allowedTrackingOrigins` option is provided.";
8
+ const ERROR_NOT_ALLOWED_TRACKING_ORIGIN = "SDK initialized on a non-allowed domain.";
9
+ function isAllowedTrackingOrigins(configuration, errorStack) {
10
+ const location = mockable(globalObject.location);
11
+ const windowOrigin = location ? location.origin : "";
12
+ const allowedTrackingOrigins = configuration.allowedTrackingOrigins;
13
+ if (!allowedTrackingOrigins) {
14
+ if (isUnsupportedExtensionEnvironment(windowOrigin, errorStack)) {
15
+ display.error(ERROR_DOES_NOT_HAVE_ALLOWED_TRACKING_ORIGIN);
16
+ return false;
17
+ }
18
+ return true;
19
+ }
20
+ const isAllowed = matchList(allowedTrackingOrigins, windowOrigin);
21
+ if (!isAllowed) display.error(ERROR_NOT_ALLOWED_TRACKING_ORIGIN);
22
+ return isAllowed;
23
+ }
24
+ //#endregion
25
+ export { ERROR_DOES_NOT_HAVE_ALLOWED_TRACKING_ORIGIN, ERROR_NOT_ALLOWED_TRACKING_ORIGIN, isAllowedTrackingOrigins };
26
+
27
+ //# sourceMappingURL=allowedTrackingOrigins.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allowedTrackingOrigins.mjs","names":[],"sources":["../../src/domain/allowedTrackingOrigins.ts"],"sourcesContent":["import { globalObject } from '@kubesense/kubesense-js-core/util'\nimport { display } from '../tools/display'\nimport { matchList } from '../tools/matchOption'\nimport { mockable } from '../tools/mockable'\nimport type { Configuration } from './configuration'\nimport { isUnsupportedExtensionEnvironment } from './extension/extensionUtils'\n\nexport const ERROR_DOES_NOT_HAVE_ALLOWED_TRACKING_ORIGIN =\n 'Running the Browser SDK in a Web extension content script is forbidden unless the `allowedTrackingOrigins` option is provided.'\nexport const ERROR_NOT_ALLOWED_TRACKING_ORIGIN = 'SDK initialized on a non-allowed domain.'\n\nexport function isAllowedTrackingOrigins(configuration: Configuration, errorStack: string): boolean {\n const location = mockable(globalObject.location)\n const windowOrigin = location ? location.origin : ''\n const allowedTrackingOrigins = configuration.allowedTrackingOrigins\n if (!allowedTrackingOrigins) {\n if (isUnsupportedExtensionEnvironment(windowOrigin, errorStack)) {\n display.error(ERROR_DOES_NOT_HAVE_ALLOWED_TRACKING_ORIGIN)\n\n return false\n }\n return true\n }\n\n const isAllowed = matchList(allowedTrackingOrigins, windowOrigin)\n if (!isAllowed) {\n display.error(ERROR_NOT_ALLOWED_TRACKING_ORIGIN)\n }\n return isAllowed\n}\n"],"mappings":";;;;;;AAOA,MAAa,8CACX;AACF,MAAa,oCAAoC;AAEjD,SAAgB,yBAAyB,eAA8B,YAA6B;CAClG,MAAM,WAAW,SAAS,aAAa,QAAQ;CAC/C,MAAM,eAAe,WAAW,SAAS,SAAS;CAClD,MAAM,yBAAyB,cAAc;CAC7C,IAAI,CAAC,wBAAwB;EAC3B,IAAI,kCAAkC,cAAc,UAAU,GAAG;GAC/D,QAAQ,MAAM,2CAA2C;GAEzD,OAAO;EACT;EACA,OAAO;CACT;CAEA,MAAM,YAAY,UAAU,wBAAwB,YAAY;CAChE,IAAI,CAAC,WACH,QAAQ,MAAM,iCAAiC;CAEjD,OAAO;AACT"}