@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.
- package/cjs/browser/pageExitObservable.js +1 -2
- package/cjs/browser/pageExitObservable.js.map +1 -1
- package/cjs/configuration/configuration.js +1 -2
- package/cjs/configuration/configuration.js.map +1 -1
- package/cjs/configuration/remoteConfiguration.js +214 -0
- package/cjs/configuration/remoteConfiguration.js.map +1 -0
- package/cjs/configuration/transportConfiguration.js +1 -0
- package/cjs/configuration/transportConfiguration.js.map +1 -1
- package/cjs/dataMap.js +8 -7
- package/cjs/dataMap.js.map +1 -1
- package/cjs/helper/byteUtils.js +2 -4
- package/cjs/helper/byteUtils.js.map +1 -1
- package/cjs/helper/createEventRateLimiter.js.map +1 -1
- package/cjs/helper/deviceInfo.js +5 -6
- package/cjs/helper/deviceInfo.js.map +1 -1
- package/cjs/helper/display.js +4 -8
- package/cjs/helper/display.js.map +1 -1
- package/cjs/helper/encoder.js.map +1 -1
- package/cjs/helper/enums.js +11 -22
- package/cjs/helper/enums.js.map +1 -1
- package/cjs/helper/errorTools.js +2 -4
- package/cjs/helper/errorTools.js.map +1 -1
- package/cjs/helper/eventEmitter.js +1 -2
- package/cjs/helper/eventEmitter.js.map +1 -1
- package/cjs/helper/instrumentMethod.js.map +1 -1
- package/cjs/helper/lifeCycle.js +1 -2
- package/cjs/helper/lifeCycle.js.map +1 -1
- package/cjs/helper/limitModification.js +7 -7
- package/cjs/helper/limitModification.js.map +1 -1
- package/cjs/helper/mobileUtil.js +5 -10
- package/cjs/helper/mobileUtil.js.map +1 -1
- package/cjs/helper/observable.js +1 -2
- package/cjs/helper/observable.js.map +1 -1
- package/cjs/helper/requestIdleCallback.js +1 -2
- package/cjs/helper/requestIdleCallback.js.map +1 -1
- package/cjs/helper/sanitize.js +1 -1
- package/cjs/helper/sanitize.js.map +1 -1
- package/cjs/helper/serialisation/const.js +1 -2
- package/cjs/helper/serialisation/const.js.map +1 -1
- package/cjs/helper/serialisation/contextManager.js +15 -15
- package/cjs/helper/serialisation/contextManager.js.map +1 -1
- package/cjs/helper/serialisation/customerDataTracker.js +4 -8
- package/cjs/helper/serialisation/customerDataTracker.js.map +1 -1
- package/cjs/helper/serialisation/jsonStringify.js +1 -1
- package/cjs/helper/serialisation/jsonStringify.js.map +1 -1
- package/cjs/helper/serialisation/rowData.js +1 -1
- package/cjs/helper/serialisation/rowData.js.map +1 -1
- package/cjs/helper/taskQueue.js +1 -2
- package/cjs/helper/taskQueue.js.map +1 -1
- package/cjs/helper/tools.js +74 -145
- package/cjs/helper/tools.js.map +1 -1
- package/cjs/helper/valueHistory.js +1 -2
- package/cjs/helper/valueHistory.js.map +1 -1
- package/cjs/index.js +12 -0
- package/cjs/index.js.map +1 -1
- package/cjs/init.js +1 -1
- package/cjs/init.js.map +1 -1
- package/cjs/report/reportObservable.js +1 -2
- package/cjs/report/reportObservable.js.map +1 -1
- package/cjs/session/sessionConstants.js +3 -6
- package/cjs/session/sessionConstants.js.map +1 -1
- package/cjs/session/sessionInCookie.js.map +1 -1
- package/cjs/session/sessionManagement.js +3 -3
- package/cjs/session/sessionManagement.js.map +1 -1
- package/cjs/session/sessionState.js +6 -11
- package/cjs/session/sessionState.js.map +1 -1
- package/cjs/session/sessionStore.js +1 -2
- package/cjs/session/sessionStore.js.map +1 -1
- package/cjs/session/sessionStoreOperations.js +2 -4
- package/cjs/session/sessionStoreOperations.js.map +1 -1
- package/cjs/synthetics/syntheticsWorkerValues.js +3 -6
- package/cjs/synthetics/syntheticsWorkerValues.js.map +1 -1
- package/cjs/telemetry/telemetry.js +1 -2
- package/cjs/telemetry/telemetry.js.map +1 -1
- package/cjs/telemetry/types.js +2 -4
- package/cjs/telemetry/types.js.map +1 -1
- package/cjs/tracekit/computeStackTrace.js +1 -3
- package/cjs/tracekit/computeStackTrace.js.map +1 -1
- package/cjs/tracekit/tracekit.js.map +1 -1
- package/cjs/transport/batch.js +1 -3
- package/cjs/transport/batch.js.map +1 -1
- package/cjs/transport/eventBridge.js +29 -3
- package/cjs/transport/eventBridge.js.map +1 -1
- package/cjs/transport/flushController.js.map +1 -1
- package/cjs/transport/httpRequest.js.map +1 -1
- package/cjs/transport/index.js +12 -0
- package/cjs/transport/index.js.map +1 -1
- package/cjs/transport/sendWithRetryStrategy.js +5 -10
- package/cjs/transport/sendWithRetryStrategy.js.map +1 -1
- package/cjs/transport/startBatchWithReplica.js.map +1 -1
- package/esm/configuration/remoteConfiguration.js +205 -0
- package/esm/configuration/remoteConfiguration.js.map +1 -0
- package/esm/configuration/transportConfiguration.js +1 -1
- package/esm/configuration/transportConfiguration.js.map +1 -1
- package/esm/dataMap.js +5 -1
- package/esm/dataMap.js.map +1 -1
- package/esm/helper/createEventRateLimiter.js.map +1 -1
- package/esm/helper/deviceInfo.js +4 -4
- package/esm/helper/deviceInfo.js.map +1 -1
- package/esm/helper/encoder.js.map +1 -1
- package/esm/helper/eventEmitter.js.map +1 -1
- package/esm/helper/instrumentMethod.js.map +1 -1
- package/esm/helper/lifeCycle.js.map +1 -1
- package/esm/helper/limitModification.js +7 -7
- package/esm/helper/mobileUtil.js.map +1 -1
- package/esm/helper/observable.js.map +1 -1
- package/esm/helper/requestIdleCallback.js.map +1 -1
- package/esm/helper/sanitize.js +1 -1
- package/esm/helper/serialisation/contextManager.js +15 -15
- package/esm/helper/serialisation/contextManager.js.map +1 -1
- package/esm/helper/serialisation/customerDataTracker.js.map +1 -1
- package/esm/helper/serialisation/jsonStringify.js +1 -1
- package/esm/helper/serialisation/rowData.js +1 -1
- package/esm/helper/taskQueue.js.map +1 -1
- package/esm/helper/tools.js +10 -8
- package/esm/helper/tools.js.map +1 -1
- package/esm/helper/valueHistory.js.map +1 -1
- package/esm/index.js +1 -0
- package/esm/index.js.map +1 -1
- package/esm/init.js +1 -1
- package/esm/init.js.map +1 -1
- package/esm/session/sessionInCookie.js.map +1 -1
- package/esm/session/sessionManagement.js +2 -1
- package/esm/session/sessionManagement.js.map +1 -1
- package/esm/session/sessionState.js +5 -9
- package/esm/session/sessionState.js.map +1 -1
- package/esm/session/sessionStore.js.map +1 -1
- package/esm/telemetry/telemetry.js.map +1 -1
- package/esm/tracekit/computeStackTrace.js +1 -3
- package/esm/tracekit/computeStackTrace.js.map +1 -1
- package/esm/tracekit/tracekit.js.map +1 -1
- package/esm/transport/batch.js +0 -1
- package/esm/transport/batch.js.map +1 -1
- package/esm/transport/eventBridge.js +27 -3
- package/esm/transport/eventBridge.js.map +1 -1
- package/esm/transport/flushController.js.map +1 -1
- package/esm/transport/httpRequest.js.map +1 -1
- package/esm/transport/index.js +1 -1
- package/esm/transport/index.js.map +1 -1
- package/esm/transport/sendWithRetryStrategy.js.map +1 -1
- package/esm/transport/startBatchWithReplica.js.map +1 -1
- package/package.json +24 -24
- package/src/configuration/remoteConfiguration.js +213 -0
- package/src/configuration/transportConfiguration.js +1 -1
- package/src/dataMap.js +7 -0
- package/src/index.js +1 -0
- package/src/session/sessionManagement.js +2 -1
- package/src/session/sessionState.js +0 -3
- package/src/transport/eventBridge.js +39 -4
- package/src/transport/index.js +6 -1
- package/types/index.d.ts +43 -2
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
|
-
|
|
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
|
|
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
|
-
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
!!bridge &&
|
|
52
|
+
bridge
|
|
53
|
+
.getAllowedWebViewHosts()
|
|
54
|
+
.some(
|
|
55
|
+
(allowedHost) =>
|
|
56
|
+
currentHost === allowedHost || currentHost.endsWith(`.${allowedHost}`)
|
|
57
|
+
)
|
|
58
|
+
)
|
|
24
59
|
}
|
package/src/transport/index.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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
|
-
|
|
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
|