@cloudcare/browser-core 3.2.17 → 3.2.22

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 (151) hide show
  1. package/cjs/browser/pageExitObservable.js +1 -2
  2. package/cjs/browser/pageExitObservable.js.map +1 -1
  3. package/cjs/configuration/configuration.js +1 -2
  4. package/cjs/configuration/configuration.js.map +1 -1
  5. package/cjs/configuration/remoteConfiguration.js +214 -0
  6. package/cjs/configuration/remoteConfiguration.js.map +1 -0
  7. package/cjs/configuration/transportConfiguration.js +1 -0
  8. package/cjs/configuration/transportConfiguration.js.map +1 -1
  9. package/cjs/dataMap.js +8 -7
  10. package/cjs/dataMap.js.map +1 -1
  11. package/cjs/helper/byteUtils.js +2 -4
  12. package/cjs/helper/byteUtils.js.map +1 -1
  13. package/cjs/helper/createEventRateLimiter.js.map +1 -1
  14. package/cjs/helper/deviceInfo.js +5 -6
  15. package/cjs/helper/deviceInfo.js.map +1 -1
  16. package/cjs/helper/display.js +4 -8
  17. package/cjs/helper/display.js.map +1 -1
  18. package/cjs/helper/encoder.js.map +1 -1
  19. package/cjs/helper/enums.js +11 -22
  20. package/cjs/helper/enums.js.map +1 -1
  21. package/cjs/helper/errorTools.js +2 -4
  22. package/cjs/helper/errorTools.js.map +1 -1
  23. package/cjs/helper/eventEmitter.js +1 -2
  24. package/cjs/helper/eventEmitter.js.map +1 -1
  25. package/cjs/helper/instrumentMethod.js.map +1 -1
  26. package/cjs/helper/lifeCycle.js +1 -2
  27. package/cjs/helper/lifeCycle.js.map +1 -1
  28. package/cjs/helper/limitModification.js +7 -7
  29. package/cjs/helper/limitModification.js.map +1 -1
  30. package/cjs/helper/mobileUtil.js +5 -10
  31. package/cjs/helper/mobileUtil.js.map +1 -1
  32. package/cjs/helper/observable.js +1 -2
  33. package/cjs/helper/observable.js.map +1 -1
  34. package/cjs/helper/requestIdleCallback.js +1 -2
  35. package/cjs/helper/requestIdleCallback.js.map +1 -1
  36. package/cjs/helper/sanitize.js +1 -1
  37. package/cjs/helper/sanitize.js.map +1 -1
  38. package/cjs/helper/serialisation/const.js +1 -2
  39. package/cjs/helper/serialisation/const.js.map +1 -1
  40. package/cjs/helper/serialisation/contextManager.js +15 -15
  41. package/cjs/helper/serialisation/contextManager.js.map +1 -1
  42. package/cjs/helper/serialisation/customerDataTracker.js +4 -8
  43. package/cjs/helper/serialisation/customerDataTracker.js.map +1 -1
  44. package/cjs/helper/serialisation/jsonStringify.js +1 -1
  45. package/cjs/helper/serialisation/jsonStringify.js.map +1 -1
  46. package/cjs/helper/serialisation/rowData.js +1 -1
  47. package/cjs/helper/serialisation/rowData.js.map +1 -1
  48. package/cjs/helper/taskQueue.js +1 -2
  49. package/cjs/helper/taskQueue.js.map +1 -1
  50. package/cjs/helper/tools.js +74 -145
  51. package/cjs/helper/tools.js.map +1 -1
  52. package/cjs/helper/valueHistory.js +1 -2
  53. package/cjs/helper/valueHistory.js.map +1 -1
  54. package/cjs/index.js +12 -0
  55. package/cjs/index.js.map +1 -1
  56. package/cjs/init.js +1 -1
  57. package/cjs/init.js.map +1 -1
  58. package/cjs/report/reportObservable.js +1 -2
  59. package/cjs/report/reportObservable.js.map +1 -1
  60. package/cjs/session/sessionConstants.js +3 -6
  61. package/cjs/session/sessionConstants.js.map +1 -1
  62. package/cjs/session/sessionInCookie.js.map +1 -1
  63. package/cjs/session/sessionManagement.js +3 -3
  64. package/cjs/session/sessionManagement.js.map +1 -1
  65. package/cjs/session/sessionState.js +6 -11
  66. package/cjs/session/sessionState.js.map +1 -1
  67. package/cjs/session/sessionStore.js +1 -2
  68. package/cjs/session/sessionStore.js.map +1 -1
  69. package/cjs/session/sessionStoreOperations.js +2 -4
  70. package/cjs/session/sessionStoreOperations.js.map +1 -1
  71. package/cjs/synthetics/syntheticsWorkerValues.js +3 -6
  72. package/cjs/synthetics/syntheticsWorkerValues.js.map +1 -1
  73. package/cjs/telemetry/telemetry.js +1 -2
  74. package/cjs/telemetry/telemetry.js.map +1 -1
  75. package/cjs/telemetry/types.js +2 -4
  76. package/cjs/telemetry/types.js.map +1 -1
  77. package/cjs/tracekit/computeStackTrace.js +1 -3
  78. package/cjs/tracekit/computeStackTrace.js.map +1 -1
  79. package/cjs/tracekit/tracekit.js.map +1 -1
  80. package/cjs/transport/batch.js +1 -3
  81. package/cjs/transport/batch.js.map +1 -1
  82. package/cjs/transport/eventBridge.js +29 -3
  83. package/cjs/transport/eventBridge.js.map +1 -1
  84. package/cjs/transport/flushController.js.map +1 -1
  85. package/cjs/transport/httpRequest.js.map +1 -1
  86. package/cjs/transport/index.js +12 -0
  87. package/cjs/transport/index.js.map +1 -1
  88. package/cjs/transport/sendWithRetryStrategy.js +5 -10
  89. package/cjs/transport/sendWithRetryStrategy.js.map +1 -1
  90. package/cjs/transport/startBatchWithReplica.js.map +1 -1
  91. package/esm/configuration/remoteConfiguration.js +205 -0
  92. package/esm/configuration/remoteConfiguration.js.map +1 -0
  93. package/esm/configuration/transportConfiguration.js +1 -1
  94. package/esm/configuration/transportConfiguration.js.map +1 -1
  95. package/esm/dataMap.js +5 -1
  96. package/esm/dataMap.js.map +1 -1
  97. package/esm/helper/createEventRateLimiter.js.map +1 -1
  98. package/esm/helper/deviceInfo.js +4 -4
  99. package/esm/helper/deviceInfo.js.map +1 -1
  100. package/esm/helper/encoder.js.map +1 -1
  101. package/esm/helper/eventEmitter.js.map +1 -1
  102. package/esm/helper/instrumentMethod.js.map +1 -1
  103. package/esm/helper/lifeCycle.js.map +1 -1
  104. package/esm/helper/limitModification.js +7 -7
  105. package/esm/helper/mobileUtil.js.map +1 -1
  106. package/esm/helper/observable.js.map +1 -1
  107. package/esm/helper/requestIdleCallback.js.map +1 -1
  108. package/esm/helper/sanitize.js +1 -1
  109. package/esm/helper/serialisation/contextManager.js +15 -15
  110. package/esm/helper/serialisation/contextManager.js.map +1 -1
  111. package/esm/helper/serialisation/customerDataTracker.js.map +1 -1
  112. package/esm/helper/serialisation/jsonStringify.js +1 -1
  113. package/esm/helper/serialisation/rowData.js +1 -1
  114. package/esm/helper/taskQueue.js.map +1 -1
  115. package/esm/helper/tools.js +10 -8
  116. package/esm/helper/tools.js.map +1 -1
  117. package/esm/helper/valueHistory.js.map +1 -1
  118. package/esm/index.js +1 -0
  119. package/esm/index.js.map +1 -1
  120. package/esm/init.js +1 -1
  121. package/esm/init.js.map +1 -1
  122. package/esm/session/sessionInCookie.js.map +1 -1
  123. package/esm/session/sessionManagement.js +2 -1
  124. package/esm/session/sessionManagement.js.map +1 -1
  125. package/esm/session/sessionState.js +5 -9
  126. package/esm/session/sessionState.js.map +1 -1
  127. package/esm/session/sessionStore.js.map +1 -1
  128. package/esm/telemetry/telemetry.js.map +1 -1
  129. package/esm/tracekit/computeStackTrace.js +1 -3
  130. package/esm/tracekit/computeStackTrace.js.map +1 -1
  131. package/esm/tracekit/tracekit.js.map +1 -1
  132. package/esm/transport/batch.js +0 -1
  133. package/esm/transport/batch.js.map +1 -1
  134. package/esm/transport/eventBridge.js +27 -3
  135. package/esm/transport/eventBridge.js.map +1 -1
  136. package/esm/transport/flushController.js.map +1 -1
  137. package/esm/transport/httpRequest.js.map +1 -1
  138. package/esm/transport/index.js +1 -1
  139. package/esm/transport/index.js.map +1 -1
  140. package/esm/transport/sendWithRetryStrategy.js.map +1 -1
  141. package/esm/transport/startBatchWithReplica.js.map +1 -1
  142. package/package.json +24 -24
  143. package/src/configuration/remoteConfiguration.js +213 -0
  144. package/src/configuration/transportConfiguration.js +1 -1
  145. package/src/dataMap.js +7 -0
  146. package/src/index.js +1 -0
  147. package/src/session/sessionManagement.js +2 -1
  148. package/src/session/sessionState.js +0 -3
  149. package/src/transport/eventBridge.js +39 -4
  150. package/src/transport/index.js +6 -1
  151. package/types/index.d.ts +43 -2
@@ -30,7 +30,7 @@ function getEndPointUrl(configuration, type) {
30
30
  return endpoint
31
31
  }
32
32
 
33
- function trim(str) {
33
+ export function trim(str) {
34
34
  return str.replace(TRIM_REGIX, '')
35
35
  }
36
36
 
package/src/dataMap.js CHANGED
@@ -42,6 +42,10 @@ export var commonFields = {
42
42
  page_states: '_gc.page_states',
43
43
  session_sample_rate: '_gc.configuration.session_sample_rate',
44
44
  session_replay_sample_rate: '_gc.configuration.session_replay_sample_rate',
45
+ session_on_error_sample_rate:
46
+ '_gc.configuration.session_on_error_sample_rate',
47
+ session_replay_on_error_sample_rate:
48
+ '_gc.configuration.session_replay_on_error_sample_rate',
45
49
  drift: '_gc.drift'
46
50
  }
47
51
  // 需要用双引号将字符串类型的field value括起来, 这里有数组标示[string, path]
@@ -55,6 +59,9 @@ export var dataMap = {
55
59
  },
56
60
  fields: {
57
61
  sampled_for_replay: 'session.sampled_for_replay',
62
+ sampled_for_error_replay: 'session.sampled_for_error_replay',
63
+ sampled_for_error_session: 'session.sampled_for_error_session',
64
+ session_error_timestamp: 'session.error_timestamp_for_session',
58
65
  is_active: 'view.is_active',
59
66
  session_replay_stats: '_gc.replay_stats',
60
67
  session_is_active: 'session.is_active',
package/src/index.js CHANGED
@@ -27,6 +27,7 @@ export * from './helper/taskQueue'
27
27
  export * from './tracekit'
28
28
  export * from './configuration/configuration'
29
29
  export * from './configuration/transportConfiguration'
30
+ export * from './configuration/remoteConfiguration'
30
31
  export * from './browser/cookie'
31
32
  export * from './browser/fetchObservable'
32
33
  export * from './browser/xhrObservable'
@@ -64,7 +64,8 @@ export function startSessionManager(
64
64
  function buildSessionContext() {
65
65
  return {
66
66
  id: sessionStore.getSession().id,
67
- trackingType: sessionStore.getSession()[productKey]
67
+ trackingType: sessionStore.getSession()[productKey],
68
+ hasError: !!sessionStore.getSession().hasError
68
69
  }
69
70
  }
70
71
 
@@ -27,10 +27,7 @@ export function isSessionInExpiredState(session) {
27
27
  return session.isExpired !== undefined || !isActiveSession(session)
28
28
  }
29
29
 
30
- // An active session is a session in either `Tracked` or `NotTracked` state
31
30
  function isActiveSession(sessionState) {
32
- // created and expire can be undefined for versions which was not storing them
33
- // these checks could be removed when older versions will not be available/live anymore
34
31
  return (
35
32
  (sessionState.created === undefined ||
36
33
  dateNow() - Number(sessionState.created) < SESSION_TIME_OUT_DELAY) &&
@@ -11,14 +11,49 @@ export function getEventBridge() {
11
11
  }
12
12
 
13
13
  return {
14
- send(eventType, event) {
14
+ getCapabilities() {
15
+ return JSON.parse(
16
+ (eventBridgeGlobal.getCapabilities &&
17
+ eventBridgeGlobal.getCapabilities()) ||
18
+ '[]'
19
+ )
20
+ },
21
+ getPrivacyLevel() {
22
+ return (
23
+ eventBridgeGlobal.getPrivacyLevel && eventBridgeGlobal.getPrivacyLevel()
24
+ )
25
+ },
26
+ getAllowedWebViewHosts() {
27
+ return JSON.parse(eventBridgeGlobal.getAllowedWebViewHosts())
28
+ },
29
+ send(eventType, event, viewId) {
30
+ const view = viewId ? { id: viewId } : undefined
15
31
  eventBridgeGlobal.sendEvent(
16
- JSON.stringify({ name: eventType, data: event })
32
+ JSON.stringify({ name: eventType, data: event, view })
17
33
  )
18
34
  }
19
35
  }
20
36
  }
21
- export function canUseEventBridge() {
37
+ export const BridgeCapability = {
38
+ RECORDS: 'records'
39
+ }
40
+ export function bridgeSupports(capability) {
41
+ const bridge = getEventBridge()
42
+
43
+ return !!bridge && bridge.getCapabilities().includes(capability)
44
+ }
45
+ export function canUseEventBridge(
46
+ currentHost = getGlobalObject().location?.hostname
47
+ ) {
22
48
  var bridge = getEventBridge()
23
- return !!bridge
49
+
50
+ return (
51
+ !!bridge &&
52
+ bridge
53
+ .getAllowedWebViewHosts()
54
+ .some(
55
+ (allowedHost) =>
56
+ currentHost === allowedHost || currentHost.endsWith(`.${allowedHost}`)
57
+ )
58
+ )
24
59
  }
@@ -2,4 +2,9 @@ export { createHttpRequest } from './httpRequest'
2
2
  export { createBatch, processedMessageByDataMap } from './batch'
3
3
  export { startBatchWithReplica } from './startBatchWithReplica'
4
4
  export { createFlushController } from './flushController'
5
- export { getEventBridge, canUseEventBridge } from './eventBridge'
5
+ export {
6
+ getEventBridge,
7
+ canUseEventBridge,
8
+ bridgeSupports,
9
+ BridgeCapability
10
+ } from './eventBridge'
package/types/index.d.ts CHANGED
@@ -109,6 +109,16 @@ export declare const DefaultPrivacyLevel: {
109
109
  export type DefaultPrivacyLevel =
110
110
  (typeof DefaultPrivacyLevel)[keyof typeof DefaultPrivacyLevel]
111
111
 
112
+ export const NodePrivacyLevel = {
113
+ IGNORE: 'ignore',
114
+ HIDDEN: 'hidden',
115
+ ALLOW: DefaultPrivacyLevel.ALLOW,
116
+ MASK: DefaultPrivacyLevel.MASK,
117
+ MASK_USER_INPUT: DefaultPrivacyLevel.MASK_USER_INPUT
118
+ } as const
119
+ export type NodePrivacyLevel =
120
+ (typeof NodePrivacyLevel)[keyof typeof NodePrivacyLevel]
121
+
112
122
  export type MatchOption = string | RegExp | ((value: string) => boolean)
113
123
  export type TracingOption = {
114
124
  match: MatchOption
@@ -142,10 +152,26 @@ export interface RumBaseInitConfiguration extends InitConfiguration {
142
152
  allowedTracingUrls?: Array<MatchOption | TracingOption> | undefined
143
153
  defaultPrivacyLevel?: DefaultPrivacyLevel | undefined
144
154
  /**
145
- * Session Replay 数据采集百分比:
155
+ * 错误会话补偿采样率:
156
+ * - 当会话未被 `sessionSampleRate` 采样时,若会话期间发生错误,则按此比例采集
157
+ * 此类会话将在错误发生时开始记录事件,并持续记录直到会话结束。
158
+ * - 取值范围 0-100,100 表示全采错误会话,0 表示忽略错误会话
159
+ */
160
+ sessionOnErrorSampleRate?: number | undefined
161
+
162
+ /**
163
+ * Session Replay 全量采集采样率:
164
+ * - 用于控制所有会话重放的全量数据采集比例
165
+ * - 取值范围 0-100,100 表示全量采集,0 表示不采集
166
+ **/
167
+ sessionReplaySampleRate?: number | undefined
168
+
169
+ /** 错误会话重放补偿采样率:
170
+ * - 当会话未被 `sessionReplaySampleRate` 采样时,若会话期间发生错误,则按此比例采集
171
+ * 此类回放将记录错误发生前最多一分钟的事件,并持续记录直到会话结束。
146
172
  100 表示全收集;0 表示不收集。
147
173
  */
148
- sessionReplaySampleRate?: number | undefined
174
+ sessionReplayOnErrorSampleRate?: number | undefined
149
175
  /**
150
176
  * 是否开启用户行为采集。
151
177
  */
@@ -163,6 +189,14 @@ export interface RumBaseInitConfiguration extends InitConfiguration {
163
189
  * 压缩 RUM 数据请求内容,以减少发送大量数据时的带宽使用量。压缩在 Worker 线程中完成。
164
190
  */
165
191
  compressIntakeRequests?: boolean | undefined
192
+ /**
193
+ * 是否开启数据采集的远程配置功能,默认不开启
194
+ * 远程配置功能可以在不发布新版本的情况下,动态修改数据采集的配置项
195
+ * 例如:可以在远程配置中修改采样率、是否开启用户行为采集等
196
+ * 远程配置功能需要在观测云控制台中开启
197
+ *
198
+ */
199
+ remoteConfiguration?: boolean | undefined
166
200
  /**
167
201
  * 配置链路追踪工具类型,如果不配置默认为 ddtrace。目前支持 ddtrace、zipkin、skywalking_v3、jaeger、zipkin_single_header、w3c_traceparent 6 种数据类型。
168
202
  */
@@ -186,6 +220,13 @@ export interface RumBaseInitConfiguration extends InitConfiguration {
186
220
  * 是否开启 longAnimationFrame 采集,覆盖 longtask 采集,目前调试阶段
187
221
  */
188
222
  enableLongAnimationFrame?: boolean | undefined
223
+ /**
224
+ * session replay 是否屏蔽某个节点数据,可用于实现对某些特定 node 屏蔽效果
225
+ * @param node 节点对象
226
+ * @param privacyLevel 当前隐私等级
227
+ * @returns true 表示屏蔽该节点,false 表示不屏蔽节点 继续执行 privacyLevel 逻辑
228
+ */
229
+ shouldMaskNode?: (node: Node, privacyLevel: NodePrivacyLevel) => boolean
189
230
  }
190
231
  export type RumInitConfiguration = RumBaseInitConfiguration &
191
232
  DatakitInitConfiguration