@rk911/tracker-sdk 1.6.5 → 1.6.7

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/core/compat.js CHANGED
@@ -178,6 +178,9 @@ export function createPageStayMixin(tracker) {
178
178
  } catch (e) {}
179
179
  if (!route) return
180
180
  this._pageStayRoute = route.charAt(0) === '/' ? route : '/' + route
181
+ this._pageStayReferrer = tracker.getReferrer() || null
182
+ // 解决 onLoad 内打点 pageRoute 错位问题:进入新页面 onLoad 时立即同步更新 SDK 路由状态
183
+ tracker.updatePageRoute(this._pageStayRoute)
181
184
  this._pageStayTitle = ''
182
185
  try {
183
186
  if (typeof document !== 'undefined' && document.title) {
@@ -332,6 +335,7 @@ export function createPageStayMixin(tracker) {
332
335
 
333
336
  tracker.track('page_stay', {
334
337
  pageRoute: this._pageStayRoute,
338
+ referrer: this._pageStayReferrer || tracker.getReferrer() || null,
335
339
  pageTitle: this._pageStayTitle || null,
336
340
  duration: duration,
337
341
  frontUrl: stayFrontUrl,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rk911/tracker-sdk",
3
- "version": "1.6.5",
3
+ "version": "1.6.7",
4
4
  "description": "人康多端埋点 SDK — 自动化采集 + 手动埋点兼容",
5
5
  "main": "index.js",
6
6
  "module": "index.js",
@@ -188,37 +188,16 @@ export class ApiWatchPlugin {
188
188
  return str
189
189
  }
190
190
 
191
+ // header 直接透传(不再做混淆/截断)——原 _encryptValue 会把 token 截断成前16字节
192
+ // 导致后台无法还原([解码失败]),已移除。敏感 header 现以明文上报。
191
193
  _filterHeaders(headers) {
192
194
  if (!headers || typeof headers !== 'object') return null
193
- var filtered = {}
194
- var sensitiveKeys = ['authorization', 'token', 'rsb-token', 'cookie', 'set-cookie']
195
+ var copy = {}
195
196
  for (var key in headers) {
196
197
  if (!headers.hasOwnProperty(key)) continue
197
- if (sensitiveKeys.indexOf(key.toLowerCase()) >= 0) {
198
- filtered[key] = this._encryptValue(headers[key])
199
- } else {
200
- filtered[key] = headers[key]
201
- }
202
- }
203
- return filtered
204
- }
205
-
206
- _encryptValue(value) {
207
- if (!value) return ''
208
- try {
209
- var encoded = encodeURIComponent(value)
210
- var result = ''
211
- for (var i = 0; i < encoded.length; i++) {
212
- result += String.fromCharCode(encoded.charCodeAt(i) ^ 0x5A)
213
- }
214
- var full = btoa(result)
215
- if (full.length > 16) {
216
- return 'ENC:' + full.substring(0, 16) + '...'
217
- }
218
- return 'ENC:' + full
219
- } catch (e) {
220
- return ''
198
+ copy[key] = headers[key]
221
199
  }
200
+ return copy
222
201
  }
223
202
 
224
203
  destroy() {
package/plugins/click.js CHANGED
@@ -261,6 +261,19 @@ export class ClickPlugin {
261
261
  var text = (container.innerText || container.textContent || '').trim()
262
262
  // 排除空文本
263
263
  if (!text) return ''
264
+ // 若包含换行符(弹窗/引导层容器),提取最符合按钮特性的短行
265
+ if (text.indexOf('\n') > -1) {
266
+ var lines = text.split('\n').map(function (l) { return l.trim() }).filter(Boolean)
267
+ if (lines.length > 0) {
268
+ for (var i = lines.length - 1; i >= 0; i--) {
269
+ if (lines[i].length > 0 && lines[i].length <= 12) {
270
+ text = lines[i]
271
+ break
272
+ }
273
+ }
274
+ if (text.indexOf('\n') > -1) text = lines[0]
275
+ }
276
+ }
264
277
  // 排除图标字体单字符(Unicode 私用区)
265
278
  if (text.length === 1 && text.charCodeAt(0) > 0xe000) return ''
266
279
  // [PROJECT-ADAPT] 设计工具命名过滤
@@ -57,7 +57,8 @@ export class JsErrorPlugin {
57
57
  }
58
58
  }
59
59
 
60
- var fingerprint = 'vue|' + message + '|' + componentName + '|' + (info || '')
60
+ var route = this._getCurrentRoute()
61
+ var fingerprint = 'vue|' + route + '|' + message + '|' + componentName + '|' + (info || '')
61
62
 
62
63
  if (this._isDuplicate(fingerprint)) return
63
64
  if (!this._shouldReport()) return
@@ -90,6 +90,9 @@ export class PageViewPlugin {
90
90
  // 去重:同一个页面不重复上报
91
91
  if (currentPage === this._lastPage) return
92
92
 
93
+ // 锁定进页时刻的时间戳(避免被后方的 title 异步重试链延迟 100~500ms)
94
+ var entryTimestamp = adapter.getTimestamp()
95
+
93
96
  // 防抖:同路由 500ms 内不重复上报(防框架路由重入导致的竞态)
94
97
  var now = Date.now()
95
98
  if (this._lastFiredRoute === currentPage && now - this._lastFiredTime < 500) return
@@ -144,6 +147,7 @@ export class PageViewPlugin {
144
147
  pageRoute: currentPage,
145
148
  page: currentPage,
146
149
  pageTitle: title,
150
+ timestamp: entryTimestamp,
147
151
  })
148
152
  }
149
153
  reportWithTitle()