customer-chat-sdk 1.0.48 → 1.0.50

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.
@@ -48,7 +48,7 @@ export interface UploadConfig {
48
48
  * 二进制配置接口(用于新的消息格式)
49
49
  */
50
50
  export interface BinaryConfig {
51
- sign: number;
51
+ sign: string;
52
52
  type: number;
53
53
  topic: string;
54
54
  routingKey: string;
@@ -305,6 +305,10 @@ export declare class ScreenshotManager {
305
305
  * 获取最新截图
306
306
  */
307
307
  private getLatestScreenshot;
308
+ /**
309
+ * 发送压缩后的截图到 iframe
310
+ */
311
+ private sendCompressedScreenshotToIframe;
308
312
  /**
309
313
  * 启用/禁用截图功能
310
314
  */
@@ -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":"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"}
@@ -14634,13 +14634,13 @@ class ScreenshotManager {
14634
14634
  const configStr = typeof data === 'string' ? data : JSON.stringify(data);
14635
14635
  const config = JSON.parse(configStr);
14636
14636
  // 检查是否包含二进制配置所需的字段
14637
- if (typeof config.sign === 'number' &&
14637
+ if (typeof config.sign === 'string' &&
14638
14638
  typeof config.type === 'number' &&
14639
14639
  typeof config.topic === 'string' &&
14640
14640
  typeof config.routingKey === 'string' &&
14641
14641
  typeof config.ttl === 'number') {
14642
14642
  return {
14643
- sign: config.sign,
14643
+ sign: String(config.sign),
14644
14644
  type: config.type,
14645
14645
  topic: config.topic,
14646
14646
  routingKey: config.routingKey,
@@ -14687,7 +14687,9 @@ class ScreenshotManager {
14687
14687
  try {
14688
14688
  await this.takeScreenshot();
14689
14689
  // 如果配置了二进制模式,发送二进制数据
14690
- if (this.currentBinaryConfig) {
14690
+ // 注意:如果启用了压缩,会在 Worker 压缩完成后自动发送(在 onmessage 中处理)
14691
+ // 如果没有启用压缩,立即发送
14692
+ if (this.currentBinaryConfig && !this.options.compress) {
14691
14693
  const latestScreenshot = this.getLatestScreenshot();
14692
14694
  if (latestScreenshot) {
14693
14695
  try {
@@ -14728,6 +14730,12 @@ class ScreenshotManager {
14728
14730
  }
14729
14731
  }
14730
14732
  }
14733
+ else if (this.currentBinaryConfig && this.options.compress) {
14734
+ // 启用了压缩,等待 Worker 压缩完成后在 onmessage 中发送
14735
+ if (!this.options.silentMode) {
14736
+ console.log('📸 [轮询] 等待 Worker 压缩完成后发送到 iframe...');
14737
+ }
14738
+ }
14731
14739
  }
14732
14740
  catch (error) {
14733
14741
  if (!this.options.silentMode) {
@@ -14915,9 +14923,32 @@ class ScreenshotManager {
14915
14923
  });
14916
14924
  }
14917
14925
  else {
14926
+ // Worker 不可用,如果配置了二进制模式,直接发送原始截图
14918
14927
  if (!this.options.silentMode) {
14919
14928
  console.warn('📸 ⚠️ Worker 不可用,跳过压缩(使用原始截图)');
14920
14929
  }
14930
+ // Worker 不可用时,如果配置了二进制模式,立即发送原始截图
14931
+ if (this.currentBinaryConfig && this.sendToIframeCallback) {
14932
+ const latestScreenshot = this.getLatestScreenshot();
14933
+ if (latestScreenshot) {
14934
+ try {
14935
+ const imageBuffer = this.dataUrlToArrayBuffer(latestScreenshot);
14936
+ const configBuffer = this.buildBinaryConfig(this.currentBinaryConfig);
14937
+ const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
14938
+ const message = {
14939
+ type: 'screenshotBinary',
14940
+ data: combinedBuffer
14941
+ };
14942
+ this.sendToIframeCallback(message);
14943
+ if (!this.options.silentMode) {
14944
+ console.log('📸 [Worker 不可用] ✅ 原始截图已发送到 iframe');
14945
+ }
14946
+ }
14947
+ catch (error) {
14948
+ console.error('📸 [Worker 不可用] ❌ 发送原始截图失败:', error);
14949
+ }
14950
+ }
14951
+ }
14921
14952
  }
14922
14953
  }
14923
14954
  this.error = null;
@@ -16934,21 +16965,30 @@ class ScreenshotManager {
16934
16965
  const { type, data } = e.data;
16935
16966
  if (type === 'SCREENSHOT_RESULT' && data?.compressed) {
16936
16967
  const compressed = data.compressed;
16937
- // 更新截图历史记录
16938
- if (this.screenshotHistory.length > 0) {
16968
+ // 更新截图历史记录(压缩成功或失败都会更新)
16969
+ if (this.screenshotHistory.length > 0 && compressed.dataUrl) {
16939
16970
  this.screenshotHistory[this.screenshotHistory.length - 1] = compressed.dataUrl;
16940
16971
  // 打印压缩统计信息
16941
- if (!this.options.silentMode && compressed.originalSize && compressed.compressedSize) {
16942
- const originalKB = (compressed.originalSize * 0.75 / 1024).toFixed(2);
16943
- const compressedKB = (compressed.compressedSize * 0.75 / 1024).toFixed(2);
16944
- const ratio = compressed.compressionRatio || '0';
16945
- console.log('📸 [Worker 压缩] ✅ 压缩完成');
16946
- console.log(` 原始大小: ${originalKB} KB`);
16947
- console.log(` 压缩后: ${compressedKB} KB`);
16948
- console.log(` 压缩率: ${ratio}%`);
16972
+ if (!this.options.silentMode) {
16949
16973
  if (compressed.error) {
16950
- console.warn(` ⚠️ 压缩警告: ${compressed.error}`);
16974
+ // 压缩失败,使用原始数据
16975
+ console.warn('📸 [Worker 压缩] ⚠️ 压缩失败,使用原始截图');
16976
+ console.warn(` ⚠️ 错误: ${compressed.error}`);
16951
16977
  }
16978
+ else if (compressed.originalSize && compressed.compressedSize) {
16979
+ // 压缩成功,显示统计信息
16980
+ const originalKB = (compressed.originalSize * 0.75 / 1024).toFixed(2);
16981
+ const compressedKB = (compressed.compressedSize * 0.75 / 1024).toFixed(2);
16982
+ const ratio = compressed.compressionRatio || '0';
16983
+ console.log('📸 [Worker 压缩] ✅ 压缩完成');
16984
+ console.log(` 原始大小: ${originalKB} KB`);
16985
+ console.log(` 压缩后: ${compressedKB} KB`);
16986
+ console.log(` 压缩率: ${ratio}%`);
16987
+ }
16988
+ }
16989
+ // 压缩完成后(无论成功或失败),如果配置了二进制模式,发送数据到 iframe
16990
+ if (this.currentBinaryConfig && compressed.dataUrl) {
16991
+ this.sendCompressedScreenshotToIframe(compressed.dataUrl);
16952
16992
  }
16953
16993
  }
16954
16994
  }
@@ -16958,6 +16998,28 @@ class ScreenshotManager {
16958
16998
  if (!this.options.silentMode) {
16959
16999
  console.warn('📸 Worker 压缩失败,使用原始截图');
16960
17000
  }
17001
+ // Worker 发生错误时,如果配置了二进制模式,发送原始截图
17002
+ if (this.currentBinaryConfig && this.sendToIframeCallback) {
17003
+ const latestScreenshot = this.getLatestScreenshot();
17004
+ if (latestScreenshot) {
17005
+ try {
17006
+ const imageBuffer = this.dataUrlToArrayBuffer(latestScreenshot);
17007
+ const configBuffer = this.buildBinaryConfig(this.currentBinaryConfig);
17008
+ const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
17009
+ const message = {
17010
+ type: 'screenshotBinary',
17011
+ data: combinedBuffer
17012
+ };
17013
+ this.sendToIframeCallback(message);
17014
+ if (!this.options.silentMode) {
17015
+ console.log('📸 [Worker 错误] ✅ 原始截图已发送到 iframe');
17016
+ }
17017
+ }
17018
+ catch (error) {
17019
+ console.error('📸 [Worker 错误] ❌ 发送原始截图失败:', error);
17020
+ }
17021
+ }
17022
+ }
16961
17023
  };
16962
17024
  // 注意:不要立即 revokeObjectURL,因为 Worker 需要这个 URL 保持有效
16963
17025
  // 在 destroy() 方法中清理 Worker 时再 revoke
@@ -17038,7 +17100,11 @@ class ScreenshotManager {
17038
17100
  const encoder = new TextEncoder();
17039
17101
  let offset = 0;
17040
17102
  // sign: 8字节 (BigInt64)
17041
- view.setBigInt64(offset, BigInt(config.sign));
17103
+ // 将字符串转换为 BigInt(支持数字字符串,如 "1234567890")
17104
+ const signValue = typeof config.sign === 'string'
17105
+ ? BigInt(config.sign)
17106
+ : BigInt(String(config.sign));
17107
+ view.setBigInt64(offset, signValue);
17042
17108
  offset += 8;
17043
17109
  // type: 1字节 (Uint8)
17044
17110
  view.setUint8(offset, config.type);
@@ -17086,53 +17152,63 @@ class ScreenshotManager {
17086
17152
  if (success) {
17087
17153
  // 截图完成后,等待一小段时间确保数据已保存
17088
17154
  await new Promise(resolve => setTimeout(resolve, 100));
17089
- // 获取最新截图并转换为二进制
17090
- const latestScreenshot = this.getLatestScreenshot();
17091
- if (latestScreenshot) {
17092
- try {
17093
- // 计算 base64 大小
17094
- const base64Data = latestScreenshot.split(',')[1] || '';
17095
- const base64Size = base64Data.length;
17096
- // 将截图转换为 ArrayBuffer
17097
- const imageBuffer = this.dataUrlToArrayBuffer(latestScreenshot);
17098
- const imageBufferSize = imageBuffer.byteLength;
17099
- // 构建配置的二进制结构
17100
- const configBuffer = this.buildBinaryConfig(config);
17101
- const configBufferSize = configBuffer.byteLength;
17102
- // 合并配置字节和图片字节(配置在前)
17103
- const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
17104
- const combinedBufferSize = combinedBuffer.byteLength;
17105
- // 打印大小信息
17106
- if (!this.options.silentMode) {
17107
- console.log('📸 [大小统计]');
17108
- console.log(` Base64 大小: ${base64Size} 字符`);
17109
- console.log(` 图片字节大小: ${(imageBufferSize / 1024).toFixed(2)} KB (${imageBufferSize} 字节)`);
17110
- console.log(` 配置字节大小: ${configBufferSize} 字节`);
17111
- console.log(` 拼接后总大小: ${(combinedBufferSize / 1024).toFixed(2)} KB (${combinedBufferSize} 字节)`);
17112
- }
17113
- // 发送二进制数据到 iframe
17114
- if (this.sendToIframeCallback) {
17115
- const message = {
17116
- type: 'screenshotBinary',
17117
- data: combinedBuffer
17118
- };
17119
- this.sendToIframeCallback(message);
17155
+ // 如果启用了压缩,等待 Worker 压缩完成后在 onmessage 中自动发送
17156
+ // 如果没有启用压缩,立即发送原始截图
17157
+ if (!this.options.compress) {
17158
+ // 没有压缩,直接发送原始截图
17159
+ const latestScreenshot = this.getLatestScreenshot();
17160
+ if (latestScreenshot) {
17161
+ try {
17162
+ // 计算 base64 大小
17163
+ const base64Data = latestScreenshot.split(',')[1] || '';
17164
+ const base64Size = base64Data.length;
17165
+ // 将截图转换为 ArrayBuffer
17166
+ const imageBuffer = this.dataUrlToArrayBuffer(latestScreenshot);
17167
+ const imageBufferSize = imageBuffer.byteLength;
17168
+ // 构建配置的二进制结构
17169
+ const configBuffer = this.buildBinaryConfig(config);
17170
+ const configBufferSize = configBuffer.byteLength;
17171
+ // 合并配置字节和图片字节(配置在前)
17172
+ const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
17173
+ const combinedBufferSize = combinedBuffer.byteLength;
17174
+ // 打印大小信息
17120
17175
  if (!this.options.silentMode) {
17121
- console.log('📸 [iframe] ✅ 二进制数据已发送到 iframe');
17176
+ console.log('📸 [大小统计]');
17177
+ console.log(` Base64 大小: ${base64Size} 字符`);
17178
+ console.log(` 图片字节大小: ${(imageBufferSize / 1024).toFixed(2)} KB (${imageBufferSize} 字节)`);
17179
+ console.log(` 配置字节大小: ${configBufferSize} 字节`);
17180
+ console.log(` 拼接后总大小: ${(combinedBufferSize / 1024).toFixed(2)} KB (${combinedBufferSize} 字节)`);
17181
+ }
17182
+ // 发送二进制数据到 iframe
17183
+ if (this.sendToIframeCallback) {
17184
+ const message = {
17185
+ type: 'screenshotBinary',
17186
+ data: combinedBuffer
17187
+ };
17188
+ this.sendToIframeCallback(message);
17189
+ if (!this.options.silentMode) {
17190
+ console.log('📸 [iframe] ✅ 二进制数据已发送到 iframe');
17191
+ }
17192
+ }
17193
+ else {
17194
+ console.error('📸 [iframe] ❌ 无法发送二进制数据:未提供发送消息的回调函数');
17122
17195
  }
17123
17196
  }
17124
- else {
17125
- console.error('📸 [iframe] ❌ 无法发送二进制数据:未提供发送消息的回调函数');
17197
+ catch (error) {
17198
+ console.error('📸 [iframe] ❌ 处理二进制数据失败:', error);
17199
+ this.uploadError = error instanceof Error ? error.message : String(error);
17126
17200
  }
17127
17201
  }
17128
- catch (error) {
17129
- console.error('📸 [iframe] ❌ 处理二进制数据失败:', error);
17130
- this.uploadError = error instanceof Error ? error.message : String(error);
17202
+ else {
17203
+ if (!this.options.silentMode) {
17204
+ console.warn('📸 [iframe] 截图完成但未找到截图数据');
17205
+ }
17131
17206
  }
17132
17207
  }
17133
17208
  else {
17209
+ // 启用了压缩,等待 Worker 压缩完成后在 onmessage 中自动发送
17134
17210
  if (!this.options.silentMode) {
17135
- console.warn('📸 [iframe] 截图完成但未找到截图数据');
17211
+ console.log('📸 [iframe] 等待 Worker 压缩完成后发送到 iframe...');
17136
17212
  }
17137
17213
  }
17138
17214
  }
@@ -17148,6 +17224,48 @@ class ScreenshotManager {
17148
17224
  getLatestScreenshot() {
17149
17225
  return this.screenshotHistory[this.screenshotHistory.length - 1] || null;
17150
17226
  }
17227
+ /**
17228
+ * 发送压缩后的截图到 iframe
17229
+ */
17230
+ sendCompressedScreenshotToIframe(dataUrl) {
17231
+ if (!this.currentBinaryConfig || !this.sendToIframeCallback) {
17232
+ return;
17233
+ }
17234
+ try {
17235
+ // 计算 base64 大小
17236
+ const base64Data = dataUrl.split(',')[1] || '';
17237
+ const base64Size = base64Data.length;
17238
+ // 将截图转换为 ArrayBuffer
17239
+ const imageBuffer = this.dataUrlToArrayBuffer(dataUrl);
17240
+ const imageBufferSize = imageBuffer.byteLength;
17241
+ // 构建配置的二进制结构
17242
+ const configBuffer = this.buildBinaryConfig(this.currentBinaryConfig);
17243
+ const configBufferSize = configBuffer.byteLength;
17244
+ // 合并配置字节和图片字节(配置在前)
17245
+ const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
17246
+ const combinedBufferSize = combinedBuffer.byteLength;
17247
+ // 打印大小信息
17248
+ if (!this.options.silentMode) {
17249
+ console.log('📸 [压缩后-大小统计]');
17250
+ console.log(` Base64 大小: ${base64Size} 字符`);
17251
+ console.log(` 图片字节大小: ${(imageBufferSize / 1024).toFixed(2)} KB (${imageBufferSize} 字节)`);
17252
+ console.log(` 配置字节大小: ${configBufferSize} 字节`);
17253
+ console.log(` 拼接后总大小: ${(combinedBufferSize / 1024).toFixed(2)} KB (${combinedBufferSize} 字节)`);
17254
+ }
17255
+ // 发送二进制数据到 iframe
17256
+ const message = {
17257
+ type: 'screenshotBinary',
17258
+ data: combinedBuffer
17259
+ };
17260
+ this.sendToIframeCallback(message);
17261
+ if (!this.options.silentMode) {
17262
+ console.log('📸 [压缩后] ✅ 二进制数据已发送到 iframe');
17263
+ }
17264
+ }
17265
+ catch (error) {
17266
+ console.error('📸 [压缩后] ❌ 处理二进制数据失败:', error);
17267
+ }
17268
+ }
17151
17269
  /**
17152
17270
  * 启用/禁用截图功能
17153
17271
  */