@cloudcare/browser-core 1.1.3 → 1.2.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 (134) hide show
  1. package/cjs/{cookie.js → browser/cookie.js} +6 -37
  2. package/cjs/browser/fetchObservable.js +91 -0
  3. package/cjs/browser/xhrObservable.js +118 -0
  4. package/cjs/configuration/configuration.js +70 -0
  5. package/cjs/configuration/transportConfiguration.js +64 -0
  6. package/cjs/console/consoleObservable.js +84 -0
  7. package/cjs/dataMap.js +26 -21
  8. package/cjs/error/trackRuntimeError.js +27 -0
  9. package/cjs/helper/catchUserErrors.js +20 -0
  10. package/cjs/helper/contextHistory.js +134 -0
  11. package/cjs/helper/createEventRateLimiter.js +47 -0
  12. package/cjs/helper/deviceInfo.js +8 -25
  13. package/cjs/helper/display.js +31 -0
  14. package/cjs/helper/enums.js +28 -2
  15. package/cjs/helper/errorTools.js +63 -2
  16. package/cjs/helper/instrumentMethod.js +93 -0
  17. package/cjs/helper/lifeCycle.js +5 -3
  18. package/cjs/helper/observable.js +40 -2
  19. package/cjs/helper/tools.js +185 -9
  20. package/cjs/index.js +153 -23
  21. package/cjs/init.js +17 -27
  22. package/cjs/report/reportObservable.js +112 -0
  23. package/cjs/session/sessionConstants.js +13 -0
  24. package/cjs/session/sessionCookieStore.js +188 -0
  25. package/cjs/session/sessionManagement.js +96 -0
  26. package/cjs/session/sessionStore.js +150 -0
  27. package/cjs/synthetics/syntheticsWorkerValues.js +32 -0
  28. package/cjs/synthetics/usr.js +32 -0
  29. package/cjs/tracekit/computeStackTrace.js +73 -563
  30. package/cjs/tracekit/index.js +3 -15
  31. package/cjs/tracekit/tracekit.js +113 -0
  32. package/cjs/transport/batch.js +332 -0
  33. package/cjs/transport/httpRequest.js +112 -0
  34. package/cjs/transport/index.js +29 -0
  35. package/cjs/transport/sendWithRetryStrategy.js +177 -0
  36. package/cjs/transport/startBatchWithReplica.js +24 -0
  37. package/esm/{cookie.js → browser/cookie.js} +4 -35
  38. package/esm/browser/fetchObservable.js +77 -0
  39. package/esm/browser/xhrObservable.js +106 -0
  40. package/esm/configuration/configuration.js +55 -0
  41. package/esm/configuration/transportConfiguration.js +54 -0
  42. package/esm/console/consoleObservable.js +70 -0
  43. package/esm/dataMap.js +26 -21
  44. package/esm/error/trackRuntimeError.js +16 -0
  45. package/esm/helper/catchUserErrors.js +12 -0
  46. package/esm/helper/contextHistory.js +106 -0
  47. package/esm/helper/createEventRateLimiter.js +38 -0
  48. package/esm/helper/deviceInfo.js +6 -25
  49. package/esm/helper/display.js +21 -0
  50. package/esm/helper/enums.js +25 -1
  51. package/esm/helper/errorTools.js +58 -3
  52. package/esm/helper/instrumentMethod.js +81 -0
  53. package/esm/helper/lifeCycle.js +5 -3
  54. package/esm/helper/observable.js +39 -3
  55. package/esm/helper/tools.js +147 -1
  56. package/esm/index.js +17 -7
  57. package/esm/init.js +17 -22
  58. package/esm/report/reportObservable.js +98 -0
  59. package/esm/session/sessionConstants.js +3 -0
  60. package/esm/session/sessionCookieStore.js +168 -0
  61. package/esm/session/sessionManagement.js +78 -0
  62. package/esm/session/sessionStore.js +139 -0
  63. package/esm/synthetics/syntheticsWorkerValues.js +15 -0
  64. package/esm/synthetics/usr.js +18 -0
  65. package/esm/tracekit/computeStackTrace.js +73 -557
  66. package/esm/tracekit/index.js +1 -1
  67. package/esm/tracekit/tracekit.js +103 -0
  68. package/esm/transport/batch.js +316 -0
  69. package/esm/transport/httpRequest.js +104 -0
  70. package/esm/transport/index.js +3 -0
  71. package/esm/transport/sendWithRetryStrategy.js +165 -0
  72. package/esm/transport/startBatchWithReplica.js +15 -0
  73. package/package.json +2 -2
  74. package/src/.DS_Store +0 -0
  75. package/src/{cookie.js → browser/cookie.js} +6 -34
  76. package/src/browser/fetchObservable.js +86 -0
  77. package/src/browser/xhrObservable.js +102 -0
  78. package/src/configuration/configuration.js +61 -0
  79. package/src/configuration/transportConfiguration.js +42 -0
  80. package/src/console/consoleObservable.js +65 -0
  81. package/src/dataMap.js +26 -21
  82. package/src/error/trackRuntimeError.js +19 -0
  83. package/src/helper/catchUserErrors.js +12 -0
  84. package/src/helper/contextHistory.js +85 -0
  85. package/src/helper/createEventRateLimiter.js +37 -0
  86. package/src/helper/deviceInfo.js +5 -51
  87. package/src/helper/display.js +21 -0
  88. package/src/helper/enums.js +38 -14
  89. package/src/helper/errorTools.js +76 -12
  90. package/src/helper/instrumentMethod.js +97 -0
  91. package/src/helper/lifeCycle.js +5 -3
  92. package/src/helper/observable.js +33 -2
  93. package/src/helper/tools.js +135 -4
  94. package/src/index.js +18 -7
  95. package/src/init.js +17 -18
  96. package/src/report/reportObservable.js +113 -0
  97. package/src/session/sessionConstants.js +3 -0
  98. package/src/session/sessionCookieStore.js +159 -0
  99. package/src/session/sessionManagement.js +89 -0
  100. package/src/session/sessionStore.js +139 -0
  101. package/src/synthetics/syntheticsWorkerValues.js +22 -0
  102. package/src/synthetics/usr.js +18 -0
  103. package/src/tracekit/computeStackTrace.js +75 -551
  104. package/src/tracekit/index.js +1 -1
  105. package/src/tracekit/tracekit.js +100 -0
  106. package/src/transport/batch.js +289 -0
  107. package/src/transport/httpRequest.js +109 -0
  108. package/src/transport/index.js +3 -0
  109. package/src/transport/sendWithRetryStrategy.js +186 -0
  110. package/src/transport/startBatchWithReplica.js +26 -0
  111. package/cjs/configuration.js +0 -193
  112. package/cjs/errorCollection.js +0 -167
  113. package/cjs/fetchProxy.js +0 -161
  114. package/cjs/helper/errorFilter.js +0 -47
  115. package/cjs/sessionManagement.js +0 -221
  116. package/cjs/tracekit/report.js +0 -289
  117. package/cjs/transport.js +0 -373
  118. package/cjs/xhrProxy.js +0 -122
  119. package/esm/configuration.js +0 -176
  120. package/esm/errorCollection.js +0 -141
  121. package/esm/fetchProxy.js +0 -115
  122. package/esm/helper/errorFilter.js +0 -38
  123. package/esm/sessionManagement.js +0 -195
  124. package/esm/tracekit/report.js +0 -273
  125. package/esm/transport.js +0 -357
  126. package/esm/xhrProxy.js +0 -110
  127. package/src/configuration.js +0 -161
  128. package/src/errorCollection.js +0 -170
  129. package/src/fetchProxy.js +0 -108
  130. package/src/helper/errorFilter.js +0 -38
  131. package/src/sessionManagement.js +0 -224
  132. package/src/tracekit/report.js +0 -284
  133. package/src/transport.js +0 -380
  134. package/src/xhrProxy.js +0 -106
@@ -0,0 +1,139 @@
1
+ import { COOKIE_ACCESS_DELAY } from '../browser/cookie'
2
+ import { Observable } from '../helper/observable'
3
+ import { dateNow, UUID, throttle } from '../helper/tools'
4
+ import { SESSION_TIME_OUT_DELAY } from './sessionConstants'
5
+ import { retrieveSession, withCookieLockAccess } from './sessionCookieStore'
6
+
7
+ /**
8
+ * Different session concepts:
9
+ * - tracked, the session has an id and is updated along the user navigation
10
+ * - not tracked, the session does not have an id but it is updated along the user navigation
11
+ * - inactive, no session in store or session expired, waiting for a renew session
12
+ */
13
+ export function startSessionStore(
14
+ options,
15
+ productKey,
16
+ computeSessionState
17
+ ) {
18
+ var renewObservable = new Observable()
19
+ var expireObservable = new Observable()
20
+
21
+ var watchSessionTimeoutId = setInterval(watchSession, COOKIE_ACCESS_DELAY)
22
+ var sessionCache = retrieveActiveSession()
23
+
24
+ function expandOrRenewSession() {
25
+ var isTracked
26
+ withCookieLockAccess({
27
+ options: options,
28
+ process: function(cookieSession){
29
+ var synchronizedSession = synchronizeSession(cookieSession)
30
+ isTracked = expandOrRenewCookie(synchronizedSession)
31
+ return synchronizedSession
32
+ },
33
+ after: function(cookieSession) {
34
+ if (isTracked && !hasSessionInCache()) {
35
+ renewSession(cookieSession)
36
+ }
37
+ sessionCache = cookieSession
38
+ },
39
+ })
40
+ }
41
+
42
+ function expandSession() {
43
+ withCookieLockAccess({
44
+ options: options,
45
+ process: function(cookieSession) {
46
+ return (hasSessionInCache() ? synchronizeSession(cookieSession) : undefined)
47
+ },
48
+ })
49
+ }
50
+
51
+ /**
52
+ * allows two behaviors:
53
+ * - if the session is active, synchronize the session cache without updating the session cookie
54
+ * - if the session is not active, clear the session cookie and expire the session cache
55
+ */
56
+ function watchSession() {
57
+ withCookieLockAccess({
58
+ options:options,
59
+ process: function(cookieSession) {
60
+ return (!isActiveSession(cookieSession) ? {} : undefined)
61
+ },
62
+ after: synchronizeSession,
63
+ })
64
+ }
65
+
66
+ function synchronizeSession(cookieSession) {
67
+ if (!isActiveSession(cookieSession)) {
68
+ cookieSession = {}
69
+ }
70
+ if (hasSessionInCache()) {
71
+ if (isSessionInCacheOutdated(cookieSession)) {
72
+ expireSession()
73
+ } else {
74
+ sessionCache = cookieSession
75
+ }
76
+ }
77
+ return cookieSession
78
+ }
79
+
80
+ function expandOrRenewCookie(cookieSession) {
81
+ var sessionState= computeSessionState(cookieSession[productKey])
82
+ var trackingType = sessionState.trackingType
83
+ var isTracked = sessionState.isTracked
84
+ cookieSession[productKey] = trackingType
85
+ if (isTracked && !cookieSession.id) {
86
+ cookieSession.id = UUID()
87
+ cookieSession.created = String(dateNow())
88
+ }
89
+ return isTracked
90
+ }
91
+
92
+ function hasSessionInCache() {
93
+ return sessionCache[productKey] !== undefined
94
+ }
95
+
96
+ function isSessionInCacheOutdated(cookieSession) {
97
+ return sessionCache.id !== cookieSession.id || sessionCache[productKey] !== cookieSession[productKey]
98
+ }
99
+
100
+ function expireSession() {
101
+ sessionCache = {}
102
+ expireObservable.notify()
103
+ }
104
+
105
+ function renewSession(cookieSession) {
106
+ sessionCache = cookieSession
107
+ renewObservable.notify()
108
+ }
109
+
110
+ function retrieveActiveSession() {
111
+ var session = retrieveSession()
112
+ if (isActiveSession(session)) {
113
+ return session
114
+ }
115
+ return {}
116
+ }
117
+
118
+ function isActiveSession(session) {
119
+ // created and expire can be undefined for versions which was not storing them
120
+ // these checks could be removed when older versions will not be available/live anymore
121
+ return (
122
+ (session.created === undefined || dateNow() - Number(session.created) < SESSION_TIME_OUT_DELAY) &&
123
+ (session.expire === undefined || dateNow() < Number(session.expire))
124
+ )
125
+ }
126
+
127
+ return {
128
+ expandOrRenewSession: throttle(expandOrRenewSession, COOKIE_ACCESS_DELAY),
129
+ expandSession: expandSession,
130
+ getSession: function() {
131
+ return sessionCache
132
+ },
133
+ renewObservable:renewObservable,
134
+ expireObservable:expireObservable,
135
+ stop: function() {
136
+ clearInterval(watchSessionTimeoutId)
137
+ },
138
+ }
139
+ }
@@ -0,0 +1,22 @@
1
+ import { getCookie } from '../browser/cookie'
2
+
3
+ export const SYNTHETICS_TEST_ID_COOKIE_NAME = 'guance-synthetics-public-id'
4
+ export const SYNTHETICS_RESULT_ID_COOKIE_NAME = 'guance-synthetics-result-id'
5
+ export const SYNTHETICS_INJECTS_RUM_COOKIE_NAME = 'guance-synthetics-injects-rum'
6
+
7
+
8
+ export function willSyntheticsInjectRum() {
9
+ return Boolean(
10
+ window._GUANCE_SYNTHETICS_INJECTS_RUM || getCookie(SYNTHETICS_INJECTS_RUM_COOKIE_NAME)
11
+ )
12
+ }
13
+
14
+ export function getSyntheticsTestId() {
15
+ var value = window._GUANCE_SYNTHETICS_PUBLIC_ID || getCookie(SYNTHETICS_TEST_ID_COOKIE_NAME)
16
+ return typeof value === 'string' ? value : undefined
17
+ }
18
+
19
+ export function getSyntheticsResultId() {
20
+ const value = window._GUANCE_SYNTHETICS_RESULT_ID || getCookie(SYNTHETICS_RESULT_ID_COOKIE_NAME)
21
+ return typeof value === 'string' ? value : undefined
22
+ }
@@ -0,0 +1,18 @@
1
+ import { getCookie, setCookie } from '../browser/cookie'
2
+ import { ONE_HOUR, UUID } from '../helper/tools'
3
+
4
+ export var ANONYMOUS_ID_COOKIE_NAME = '_dataflulx_usr_id'
5
+ export var ANONYMOUS_ID_EXPIRATION = 60 * 24 * ONE_HOUR
6
+
7
+ export var startCacheUsrCache = function(configuration) {
8
+ var usrCacheId = getCookie(ANONYMOUS_ID_COOKIE_NAME)
9
+ if (!usrCacheId) {
10
+ usrCacheId = UUID()
11
+ setCookie(ANONYMOUS_ID_COOKIE_NAME, usrCacheId, ANONYMOUS_ID_EXPIRATION, configuration.cookieOptions)
12
+ }
13
+ return {
14
+ getUsrId: function() {
15
+ return usrCacheId
16
+ }
17
+ }
18
+ }