customer-chat-sdk 1.0.67 → 1.0.68

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.
@@ -85,6 +85,8 @@ export declare class ScreenshotManager {
85
85
  private messageHandler;
86
86
  private dynamicInterval;
87
87
  private expirationTimer;
88
+ private isCurrentTaskCompleted;
89
+ private scheduleNextFn;
88
90
  private imageProxyCache;
89
91
  private indexedDBCache;
90
92
  private indexedDBReady;
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenshotManager.d.ts","sourceRoot":"","sources":["../../src/core/ScreenshotManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScreenshotManager.d.ts","sourceRoot":"","sources":["../../src/core/ScreenshotManager.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;IACtC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,mBAAmB,GAAG,SAAS,GAAG,aAAa,CAAA;IACxD,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,cAAc,GAAG,QAAQ,GAAG,YAAY,CAAA;IAC3F,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,aAAa,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;IACvC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;CACjB;AA4BD;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAyH;IACxI,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,eAAe,CAAI;IAC3B,OAAO,CAAC,iBAAiB,CAAe;IACxC,OAAO,CAAC,kBAAkB,CAAI;IAC9B,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,SAAS,CAAQ;IAGzB,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,mBAAmB,CAA4B;IACvD,OAAO,CAAC,oBAAoB,CAAqC;IAGjE,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,eAAe,CAA8B;IAGrD,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,qBAAqB,CAAY;IACzC,OAAO,CAAC,aAAa,CAAe;IAGpC,OAAO,CAAC,sBAAsB,CAAQ;IAGtC,OAAO,CAAC,eAAe,CAAqE;IAC5F,OAAO,CAAC,iBAAiB,CAAQ;IAGjC,OAAO,CAAC,cAAc,CAA8D;IAGpF,OAAO,CAAC,eAAe,CAAsB;IAG7C,OAAO,CAAC,eAAe,CAA8B;IAGrD,OAAO,CAAC,sBAAsB,CAAO;IAGrC,OAAO,CAAC,cAAc,CAA4B;IAGlD,OAAO,CAAC,eAAe,CAA4D;IAGnF,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,cAAc,CAAQ;IAG9B,OAAO,CAAC,oBAAoB,CAAoC;IAChE,OAAO,CAAC,oBAAoB,CAAyB;IAGrD,OAAO,CAAC,YAAY,CAAQ;IAG5B,OAAO,CAAC,kBAAkB,CAAqC;IAC/D,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,2BAA2B,CAAI;IAGvC,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,sBAAsB,CAAwD;gBAE1E,aAAa,EAAE,WAAW,GAAG,IAAI,EAAE,OAAO,GAAE,iBAAsB,EAAE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI;IAqElH;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI;IAsBnD;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAgE5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAcrC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6F3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA8BzB;;OAEG;IACH,eAAe,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAmK9C;;OAEG;IACH,cAAc,IAAI,IAAI;IAqBtB;;OAEG;IACG,WAAW,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3D;;OAEG;YACW,cAAc;IA8P5B;;;;;;OAMG;YACW,yBAAyB;IA+KvC;;;;;;;;;;;;;;;;OAgBG;YACW,6BAA6B;IA4W3C;;;;;;;;;;;;;;;;;OAiBG;YACW,kCAAkC;IA0oBhD;;OAEG;YACW,sBAAsB;IA0BpC;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAuBhC;;OAEG;YACW,aAAa;IA4B3B;;OAEG;YACW,iBAAiB;IAsC/B;;OAEG;YACW,iBAAiB;IAwB/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;YACW,qBAAqB;IA0BnC;;OAEG;YACW,mBAAmB;IAiEjC;;OAEG;YACW,yBAAyB;IAuDvC;;OAEG;YACW,oBAAoB;IAclC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+CxB;;OAEG;YACW,uBAAuB;IA2ErC;;OAEG;YACW,UAAU;IAmDxB;;OAEG;YACW,yBAAyB;IAsFvC;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;YACW,mBAAmB;IA8BjC;;;OAGG;YACW,qBAAqB;IAqCnC;;OAEG;YACW,YAAY;IAa1B;;;OAGG;YACW,sBAAsB;IAoEpC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;OAEG;IACH,OAAO,CAAC,YAAY;IAoWpB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkChC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAYjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,iBAAiB;IAiDzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;YACW,2BAA2B;IAoHzC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAoFxC;;;;;OAKG;IACH,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI;IACzD,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IACpD,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,GAAG,IAAI;IAClE,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IACvE,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAwD1E;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAO9B;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IA+D3D;;OAEG;IACH,OAAO,IAAI,IAAI;IAoEf;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAqCtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;OAEG;IACH,QAAQ;;;;;;;;;CAWT"}
@@ -14338,6 +14338,10 @@ class ScreenshotManager {
14338
14338
  this.dynamicInterval = null;
14339
14339
  // 过期定时器
14340
14340
  this.expirationTimer = null;
14341
+ // 当前任务完成标志(用于串行定时任务)
14342
+ this.isCurrentTaskCompleted = true;
14343
+ // 保存 scheduleNext 函数引用(用于在压缩完成后触发下一次任务)
14344
+ this.scheduleNextFn = null;
14341
14345
  // 图片代理缓存(带过期时间)
14342
14346
  this.imageProxyCache = new Map();
14343
14347
  // IndexedDB 缓存(持久化)
@@ -14680,9 +14684,28 @@ class ScreenshotManager {
14680
14684
  this.worker = this.createWorker();
14681
14685
  }
14682
14686
  // 设置定时器(使用递归 setTimeout,确保等待前一个完成)
14683
- // 这样可以避免 setInterval 不等待异步完成的问题
14687
+ // 串行执行:必须等待上次任务完成后才进行下次任务
14684
14688
  const scheduleNext = async () => {
14689
+ // 如果上次任务还没完成,等待完成
14690
+ if (!this.isCurrentTaskCompleted) {
14691
+ if (!this.options.silentMode) {
14692
+ console.log('📸 [定时] 等待上次任务完成...');
14693
+ }
14694
+ // 每100ms检查一次任务是否完成
14695
+ const checkInterval = setInterval(() => {
14696
+ if (this.isCurrentTaskCompleted && this.isRunning) {
14697
+ clearInterval(checkInterval);
14698
+ scheduleNext();
14699
+ }
14700
+ else if (!this.isRunning) {
14701
+ clearInterval(checkInterval);
14702
+ }
14703
+ }, 100);
14704
+ return;
14705
+ }
14685
14706
  if (this.isRunning && this.isEnabled && !document.hidden) {
14707
+ // 标记任务开始
14708
+ this.isCurrentTaskCompleted = false;
14686
14709
  // 记录定时开始时间
14687
14710
  const scheduleStartTime = performance.now();
14688
14711
  if (!this.options.silentMode) {
@@ -14750,25 +14773,36 @@ class ScreenshotManager {
14750
14773
  console.error('📸 [轮询] ❌ 处理二进制数据失败:', error);
14751
14774
  }
14752
14775
  }
14776
+ // 任务完成(无压缩模式)
14777
+ this.isCurrentTaskCompleted = true;
14753
14778
  }
14754
14779
  else if (this.currentBinaryConfig && this.options.compress) {
14755
14780
  // 启用了压缩,等待 Worker 压缩完成后在 onmessage 中发送
14781
+ // 任务完成标志会在压缩完成的回调中设置
14756
14782
  if (!this.options.silentMode) {
14757
14783
  console.log('📸 [轮询] 等待 Worker 压缩完成后发送到 iframe...');
14758
14784
  }
14759
14785
  }
14786
+ else {
14787
+ // 没有二进制配置,任务完成
14788
+ this.isCurrentTaskCompleted = true;
14789
+ }
14760
14790
  }
14761
14791
  catch (error) {
14762
14792
  if (!this.options.silentMode) {
14763
14793
  console.error('📸 [轮询] 截图失败:', error);
14764
14794
  }
14795
+ // 任务失败,标记为完成
14796
+ this.isCurrentTaskCompleted = true;
14765
14797
  }
14766
14798
  }
14767
- // 如果还在运行,安排下一次截图
14768
- if (this.isRunning) {
14799
+ // 如果还在运行且任务已完成,安排下一次截图
14800
+ if (this.isRunning && this.isCurrentTaskCompleted) {
14769
14801
  this.screenshotTimer = setTimeout(scheduleNext, currentInterval);
14770
14802
  }
14771
14803
  };
14804
+ // 保存 scheduleNext 函数引用,以便在压缩完成的回调中使用
14805
+ this.scheduleNextFn = scheduleNext;
14772
14806
  // 立即开始第一次
14773
14807
  scheduleNext();
14774
14808
  // 注意:不再立即执行一次,因为已经在 takeScreenshotAndUpload 中执行了
@@ -14788,6 +14822,9 @@ class ScreenshotManager {
14788
14822
  clearInterval(this.screenshotTimer);
14789
14823
  this.screenshotTimer = null;
14790
14824
  }
14825
+ // 清理任务状态
14826
+ this.isCurrentTaskCompleted = true;
14827
+ this.scheduleNextFn = null;
14791
14828
  }
14792
14829
  /**
14793
14830
  * 手动截图一次(允许在未启用时也执行,用于测试)
@@ -17160,6 +17197,16 @@ class ScreenshotManager {
17160
17197
  this.sendCompressedScreenshotToIframe(compressed.dataUrl, scheduleStartTime, compressEndTime);
17161
17198
  }
17162
17199
  }
17200
+ // 任务完成(压缩模式)- 无论是否成功,都要标记为完成
17201
+ this.isCurrentTaskCompleted = true;
17202
+ // 如果还在运行,触发下一次任务
17203
+ if (this.isRunning && this.scheduleNextFn) {
17204
+ const currentInterval = this.dynamicInterval || this.options.interval;
17205
+ this.screenshotTimer = setTimeout(() => {
17206
+ this.screenshotTimer = null;
17207
+ this.scheduleNextFn?.();
17208
+ }, currentInterval);
17209
+ }
17163
17210
  }
17164
17211
  };
17165
17212
  newWorker.onerror = (e) => {
@@ -17189,6 +17236,16 @@ class ScreenshotManager {
17189
17236
  }
17190
17237
  }
17191
17238
  }
17239
+ // Worker 错误时,任务也完成
17240
+ this.isCurrentTaskCompleted = true;
17241
+ // 如果还在运行,触发下一次任务
17242
+ if (this.isRunning && this.scheduleNextFn) {
17243
+ const currentInterval = this.dynamicInterval || this.options.interval;
17244
+ this.screenshotTimer = setTimeout(() => {
17245
+ this.screenshotTimer = null;
17246
+ this.scheduleNextFn?.();
17247
+ }, currentInterval);
17248
+ }
17192
17249
  };
17193
17250
  // 注意:不要立即 revokeObjectURL,因为 Worker 需要这个 URL 保持有效
17194
17251
  // 在 destroy() 方法中清理 Worker 时再 revoke
@@ -14334,6 +14334,10 @@ class ScreenshotManager {
14334
14334
  this.dynamicInterval = null;
14335
14335
  // 过期定时器
14336
14336
  this.expirationTimer = null;
14337
+ // 当前任务完成标志(用于串行定时任务)
14338
+ this.isCurrentTaskCompleted = true;
14339
+ // 保存 scheduleNext 函数引用(用于在压缩完成后触发下一次任务)
14340
+ this.scheduleNextFn = null;
14337
14341
  // 图片代理缓存(带过期时间)
14338
14342
  this.imageProxyCache = new Map();
14339
14343
  // IndexedDB 缓存(持久化)
@@ -14676,9 +14680,28 @@ class ScreenshotManager {
14676
14680
  this.worker = this.createWorker();
14677
14681
  }
14678
14682
  // 设置定时器(使用递归 setTimeout,确保等待前一个完成)
14679
- // 这样可以避免 setInterval 不等待异步完成的问题
14683
+ // 串行执行:必须等待上次任务完成后才进行下次任务
14680
14684
  const scheduleNext = async () => {
14685
+ // 如果上次任务还没完成,等待完成
14686
+ if (!this.isCurrentTaskCompleted) {
14687
+ if (!this.options.silentMode) {
14688
+ console.log('📸 [定时] 等待上次任务完成...');
14689
+ }
14690
+ // 每100ms检查一次任务是否完成
14691
+ const checkInterval = setInterval(() => {
14692
+ if (this.isCurrentTaskCompleted && this.isRunning) {
14693
+ clearInterval(checkInterval);
14694
+ scheduleNext();
14695
+ }
14696
+ else if (!this.isRunning) {
14697
+ clearInterval(checkInterval);
14698
+ }
14699
+ }, 100);
14700
+ return;
14701
+ }
14681
14702
  if (this.isRunning && this.isEnabled && !document.hidden) {
14703
+ // 标记任务开始
14704
+ this.isCurrentTaskCompleted = false;
14682
14705
  // 记录定时开始时间
14683
14706
  const scheduleStartTime = performance.now();
14684
14707
  if (!this.options.silentMode) {
@@ -14746,25 +14769,36 @@ class ScreenshotManager {
14746
14769
  console.error('📸 [轮询] ❌ 处理二进制数据失败:', error);
14747
14770
  }
14748
14771
  }
14772
+ // 任务完成(无压缩模式)
14773
+ this.isCurrentTaskCompleted = true;
14749
14774
  }
14750
14775
  else if (this.currentBinaryConfig && this.options.compress) {
14751
14776
  // 启用了压缩,等待 Worker 压缩完成后在 onmessage 中发送
14777
+ // 任务完成标志会在压缩完成的回调中设置
14752
14778
  if (!this.options.silentMode) {
14753
14779
  console.log('📸 [轮询] 等待 Worker 压缩完成后发送到 iframe...');
14754
14780
  }
14755
14781
  }
14782
+ else {
14783
+ // 没有二进制配置,任务完成
14784
+ this.isCurrentTaskCompleted = true;
14785
+ }
14756
14786
  }
14757
14787
  catch (error) {
14758
14788
  if (!this.options.silentMode) {
14759
14789
  console.error('📸 [轮询] 截图失败:', error);
14760
14790
  }
14791
+ // 任务失败,标记为完成
14792
+ this.isCurrentTaskCompleted = true;
14761
14793
  }
14762
14794
  }
14763
- // 如果还在运行,安排下一次截图
14764
- if (this.isRunning) {
14795
+ // 如果还在运行且任务已完成,安排下一次截图
14796
+ if (this.isRunning && this.isCurrentTaskCompleted) {
14765
14797
  this.screenshotTimer = setTimeout(scheduleNext, currentInterval);
14766
14798
  }
14767
14799
  };
14800
+ // 保存 scheduleNext 函数引用,以便在压缩完成的回调中使用
14801
+ this.scheduleNextFn = scheduleNext;
14768
14802
  // 立即开始第一次
14769
14803
  scheduleNext();
14770
14804
  // 注意:不再立即执行一次,因为已经在 takeScreenshotAndUpload 中执行了
@@ -14784,6 +14818,9 @@ class ScreenshotManager {
14784
14818
  clearInterval(this.screenshotTimer);
14785
14819
  this.screenshotTimer = null;
14786
14820
  }
14821
+ // 清理任务状态
14822
+ this.isCurrentTaskCompleted = true;
14823
+ this.scheduleNextFn = null;
14787
14824
  }
14788
14825
  /**
14789
14826
  * 手动截图一次(允许在未启用时也执行,用于测试)
@@ -17156,6 +17193,16 @@ class ScreenshotManager {
17156
17193
  this.sendCompressedScreenshotToIframe(compressed.dataUrl, scheduleStartTime, compressEndTime);
17157
17194
  }
17158
17195
  }
17196
+ // 任务完成(压缩模式)- 无论是否成功,都要标记为完成
17197
+ this.isCurrentTaskCompleted = true;
17198
+ // 如果还在运行,触发下一次任务
17199
+ if (this.isRunning && this.scheduleNextFn) {
17200
+ const currentInterval = this.dynamicInterval || this.options.interval;
17201
+ this.screenshotTimer = setTimeout(() => {
17202
+ this.screenshotTimer = null;
17203
+ this.scheduleNextFn?.();
17204
+ }, currentInterval);
17205
+ }
17159
17206
  }
17160
17207
  };
17161
17208
  newWorker.onerror = (e) => {
@@ -17185,6 +17232,16 @@ class ScreenshotManager {
17185
17232
  }
17186
17233
  }
17187
17234
  }
17235
+ // Worker 错误时,任务也完成
17236
+ this.isCurrentTaskCompleted = true;
17237
+ // 如果还在运行,触发下一次任务
17238
+ if (this.isRunning && this.scheduleNextFn) {
17239
+ const currentInterval = this.dynamicInterval || this.options.interval;
17240
+ this.screenshotTimer = setTimeout(() => {
17241
+ this.screenshotTimer = null;
17242
+ this.scheduleNextFn?.();
17243
+ }, currentInterval);
17244
+ }
17188
17245
  };
17189
17246
  // 注意:不要立即 revokeObjectURL,因为 Worker 需要这个 URL 保持有效
17190
17247
  // 在 destroy() 方法中清理 Worker 时再 revoke