@zeewain/3d-avatar-sdk 1.2.0 → 1.2.2

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 (55) hide show
  1. package/README.md +6 -5
  2. package/dist/assets/Build/webgl.data.unityweb +0 -0
  3. package/dist/assets/Build/webgl.framework.js.unityweb +0 -0
  4. package/dist/assets/Build/webgl.wasm.unityweb +0 -0
  5. package/dist/examples/test-umd/index.html +762 -0
  6. package/dist/examples/test-vue2/.eslintignore +45 -0
  7. package/dist/examples/test-vue2/.eslintrc.js +174 -0
  8. package/dist/examples/test-vue2/.stylelintignore +50 -0
  9. package/dist/examples/test-vue2/.stylelintrc.js +79 -0
  10. package/dist/examples/test-vue2/README.md +139 -0
  11. package/dist/examples/test-vue2/babel.config.js +14 -0
  12. package/dist/examples/test-vue2/package.json +53 -0
  13. package/dist/examples/test-vue2/pnpm-lock.yaml +8776 -0
  14. package/dist/examples/test-vue2/public/index.html +19 -0
  15. package/dist/examples/test-vue2/setup.js +170 -0
  16. package/dist/examples/test-vue2/src/App.vue +943 -0
  17. package/dist/examples/test-vue2/src/components/BroadcastAPI.vue +666 -0
  18. package/dist/examples/test-vue2/src/components/CameraAPI.vue +414 -0
  19. package/dist/examples/test-vue2/src/components/GlobalConfig.vue +200 -0
  20. package/dist/examples/test-vue2/src/components/InfoCards.vue +294 -0
  21. package/dist/examples/test-vue2/src/components/InitAPI.vue +334 -0
  22. package/dist/examples/test-vue2/src/components/LogPanel.vue +249 -0
  23. package/dist/examples/test-vue2/src/components/MotionControlAPI.vue +400 -0
  24. package/dist/examples/test-vue2/src/components/UnityPreview.vue +201 -0
  25. package/dist/examples/test-vue2/src/main.js +16 -0
  26. package/dist/examples/test-vue2/vue.config.js +41 -0
  27. package/dist/examples/test-vue3/.eslintrc +3 -0
  28. package/dist/examples/test-vue3/.stylelintignore +3 -0
  29. package/dist/examples/test-vue3/.stylelintrc +48 -0
  30. package/dist/examples/test-vue3/README.md +236 -0
  31. package/dist/examples/test-vue3/env.d.ts +8 -0
  32. package/dist/examples/test-vue3/index.html +95 -0
  33. package/dist/examples/test-vue3/package.json +55 -0
  34. package/dist/examples/test-vue3/pnpm-lock.yaml +4636 -0
  35. package/dist/examples/test-vue3/setup.js +167 -0
  36. package/dist/examples/test-vue3/src/App.vue +962 -0
  37. package/dist/examples/test-vue3/src/components/BroadcastAPI.vue +636 -0
  38. package/dist/examples/test-vue3/src/components/CameraAPI.vue +376 -0
  39. package/dist/examples/test-vue3/src/components/GlobalConfig.vue +213 -0
  40. package/dist/examples/test-vue3/src/components/InfoCards.vue +288 -0
  41. package/dist/examples/test-vue3/src/components/InitAPI.vue +339 -0
  42. package/dist/examples/test-vue3/src/components/LogPanel.vue +236 -0
  43. package/dist/examples/test-vue3/src/components/MotionControlAPI.vue +373 -0
  44. package/dist/examples/test-vue3/src/components/UnityPreview.vue +189 -0
  45. package/dist/examples/test-vue3/src/main.ts +12 -0
  46. package/dist/examples/test-vue3/src/types.ts +9 -0
  47. package/dist/examples/test-vue3/tsconfig.json +44 -0
  48. package/dist/examples/test-vue3/tsconfig.node.json +14 -0
  49. package/dist/examples/test-vue3/vite.config.ts +75 -0
  50. package/dist/index.d.ts +142 -132
  51. package/dist/index.es5.js +93 -41
  52. package/dist/index.es5.umd.js +93 -41
  53. package/dist/index.esm.js +101 -42
  54. package/dist/index.umd.cjs +101 -42
  55. package/package.json +4 -3
package/dist/index.es5.js CHANGED
@@ -12147,7 +12147,7 @@ var ZEEAvatarSDKLib = (function (exports) {
12147
12147
  NetworkErrorCode[NetworkErrorCode["CONNECTION_FAILED"] = 1001] = "CONNECTION_FAILED";
12148
12148
  /** 请求超时 */
12149
12149
  NetworkErrorCode[NetworkErrorCode["REQUEST_TIMEOUT"] = 1002] = "REQUEST_TIMEOUT";
12150
- /** 服务器错误 */
12150
+ /** 服务错误 */
12151
12151
  NetworkErrorCode[NetworkErrorCode["SERVER_ERROR"] = 1003] = "SERVER_ERROR";
12152
12152
  /** 未授权访问 */
12153
12153
  NetworkErrorCode[NetworkErrorCode["UNAUTHORIZED"] = 1004] = "UNAUTHORIZED";
@@ -12169,6 +12169,12 @@ var ZEEAvatarSDKLib = (function (exports) {
12169
12169
  OperationErrorCode[OperationErrorCode["OPERATION_TIMEOUT"] = 2004] = "OPERATION_TIMEOUT";
12170
12170
  /** 操作被取消 */
12171
12171
  OperationErrorCode[OperationErrorCode["OPERATION_CANCELLED"] = 2005] = "OPERATION_CANCELLED";
12172
+ /** 用户权益额度不存在 */
12173
+ OperationErrorCode[OperationErrorCode["BROADCAST_EQUITY_NOT_EXIST"] = 2006] = "BROADCAST_EQUITY_NOT_EXIST";
12174
+ /** 用户权益额度不足 */
12175
+ OperationErrorCode[OperationErrorCode["BROADCAST_EQUITY_NOT_ENOUGH"] = 2007] = "BROADCAST_EQUITY_NOT_ENOUGH";
12176
+ /** 用户权益额度冻结失败 */
12177
+ OperationErrorCode[OperationErrorCode["BROADCAST_EQUITY_FREEZE_FAILED"] = 2008] = "BROADCAST_EQUITY_FREEZE_FAILED";
12172
12178
  })(exports.OperationErrorCode || (exports.OperationErrorCode = {}));
12173
12179
  /**
12174
12180
  * 资源错误码 (3xxx)
@@ -12254,6 +12260,15 @@ var ZEEAvatarSDKLib = (function (exports) {
12254
12260
  }, _a[exports.OperationErrorCode.OPERATION_CANCELLED] = {
12255
12261
  category: exports.ErrorCategory.OPERATION,
12256
12262
  message: '操作被取消'
12263
+ }, _a[exports.OperationErrorCode.BROADCAST_EQUITY_NOT_EXIST] = {
12264
+ category: exports.ErrorCategory.OPERATION,
12265
+ message: '用户权益额度不存在'
12266
+ }, _a[exports.OperationErrorCode.BROADCAST_EQUITY_NOT_ENOUGH] = {
12267
+ category: exports.ErrorCategory.OPERATION,
12268
+ message: '用户权益额度不足'
12269
+ }, _a[exports.OperationErrorCode.BROADCAST_EQUITY_FREEZE_FAILED] = {
12270
+ category: exports.ErrorCategory.OPERATION,
12271
+ message: '用户权益额度冻结失败'
12257
12272
  },
12258
12273
  // 资源错误
12259
12274
  _a[exports.ResourceErrorCode.LOAD_FAILED] = {
@@ -12550,7 +12565,8 @@ var ZEEAvatarSDKLib = (function (exports) {
12550
12565
  operation: operation,
12551
12566
  code: code,
12552
12567
  message: message,
12553
- data: dataObj
12568
+ data: dataObj,
12569
+ originalData: data
12554
12570
  });
12555
12571
  var callback = this.pendingCallbacks.get(operation);
12556
12572
  if (!callback) {
@@ -12850,7 +12866,7 @@ var ZEEAvatarSDKLib = (function (exports) {
12850
12866
  console.warn("[Unity Warning] ".concat(message), data);
12851
12867
  };
12852
12868
  SimpleLogger.prototype.error = function (message, error, data) {
12853
- console.error("[Unity Error] ".concat(message), error, data);
12869
+ console.error("[Unity Error] ".concat(message), error, error instanceof SDKError ? error.code : null, data);
12854
12870
  };
12855
12871
  return SimpleLogger;
12856
12872
  }();
@@ -12899,7 +12915,6 @@ var ZEEAvatarSDKLib = (function (exports) {
12899
12915
  __extends(AvatarService, _super);
12900
12916
  /**
12901
12917
  * 构造函数
12902
- * @param unityInstance - Unity实例对象
12903
12918
  * @param config - 可选的服务配置,用于覆盖默认配置
12904
12919
  * @description 初始化Avatar API,设置Unity实例和配置
12905
12920
  * @example
@@ -13335,6 +13350,7 @@ var ZEEAvatarSDKLib = (function (exports) {
13335
13350
  withModule = true;
13336
13351
  }
13337
13352
  if (((_a = this.config) === null || _a === void 0 ? void 0 : _a.env) === 'custom' && ((_b = this.config) === null || _b === void 0 ? void 0 : _b.apiUrl)) {
13353
+ // 如果环境为自定义,则直接返回配置的API,无需添加模块路径
13338
13354
  return this.config.apiUrl;
13339
13355
  }
13340
13356
  return ((_d = getEnvConfig(((_c = this.config) === null || _c === void 0 ? void 0 : _c.env) || 'prod', withModule)) === null || _d === void 0 ? void 0 : _d.apiBaseUrl) || '';
@@ -13413,16 +13429,11 @@ var ZEEAvatarSDKLib = (function (exports) {
13413
13429
  UnityLoader.prototype.createContainer = function () {
13414
13430
  var container = document.getElementById(this.config.containerId);
13415
13431
  if (!container) {
13416
- throw new Error("Container element with ID \"".concat(this.config.containerId, "\" not found"));
13432
+ throw new TypeError("Avatar container element with ID \"".concat(this.config.containerId, "\" not found"));
13433
+ } else if (!(container instanceof HTMLDivElement)) {
13434
+ throw new TypeError('Avatar container element must be a div element');
13417
13435
  }
13418
- container.style.width = '100%';
13419
- container.style.height = '100%';
13420
13436
  container.style.position = 'relative';
13421
- // 移除容器提示元素
13422
- var containerTip = document.getElementById('unity-container-tip');
13423
- if (containerTip) {
13424
- containerTip.remove();
13425
- }
13426
13437
  return container;
13427
13438
  };
13428
13439
  /**
@@ -13476,11 +13487,15 @@ var ZEEAvatarSDKLib = (function (exports) {
13476
13487
  return __generator(this, function (_a) {
13477
13488
  switch (_a.label) {
13478
13489
  case 0:
13479
- canvas = document.createElement('canvas');
13480
- canvas.id = 'unity-canvas';
13481
- canvas.style.width = '100%';
13482
- canvas.style.height = '100%';
13483
- container.appendChild(canvas);
13490
+ canvas = container.querySelector('#unity-canvas');
13491
+ // 避免重复创建
13492
+ if (!canvas) {
13493
+ canvas = document.createElement('canvas');
13494
+ canvas.id = 'unity-canvas';
13495
+ canvas.style.width = '100%';
13496
+ canvas.style.height = '100%';
13497
+ container.appendChild(canvas);
13498
+ }
13484
13499
  // 移动设备适配
13485
13500
  if (/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)) {
13486
13501
  meta = document.createElement('meta');
@@ -13810,22 +13825,27 @@ var ZEEAvatarSDKLib = (function (exports) {
13810
13825
  // 触发对应的事件回调(仅在成功时)
13811
13826
  if (code === 0) {
13812
13827
  switch (operation) {
13828
+ case exports.BroadcastOperationType.START_BROADCAST:
13829
+ if (isBroadcastCompleted) {
13830
+ (_b = (_a = this.callbacks).onFinish) === null || _b === void 0 ? void 0 : _b.call(_a);
13831
+ }
13832
+ break;
13813
13833
  case exports.BroadcastOperationType.PAUSE_BROADCAST:
13814
- (_b = (_a = this.callbacks).onPause) === null || _b === void 0 ? void 0 : _b.call(_a);
13834
+ (_d = (_c = this.callbacks).onPause) === null || _d === void 0 ? void 0 : _d.call(_c);
13815
13835
  this.logger.debug('Broadcast paused callback triggered');
13816
13836
  break;
13817
13837
  case exports.BroadcastOperationType.RESUME_BROADCAST:
13818
- (_d = (_c = this.callbacks).onResume) === null || _d === void 0 ? void 0 : _d.call(_c);
13838
+ (_f = (_e = this.callbacks).onResume) === null || _f === void 0 ? void 0 : _f.call(_e);
13819
13839
  this.logger.debug('Broadcast resumed callback triggered');
13820
13840
  break;
13821
13841
  case exports.BroadcastOperationType.STOP_BROADCAST:
13822
- (_f = (_e = this.callbacks).onStop) === null || _f === void 0 ? void 0 : _f.call(_e);
13823
- if (isBroadcastCompleted) {
13824
- (_h = (_g = this.callbacks).onFinish) === null || _h === void 0 ? void 0 : _h.call(_g);
13825
- }
13842
+ (_h = (_g = this.callbacks).onStop) === null || _h === void 0 ? void 0 : _h.call(_g);
13826
13843
  this.logger.debug('Broadcast stopped callback triggered');
13827
13844
  break;
13828
13845
  }
13846
+ } else {
13847
+ var error = SDKError.createFromUnityError(code, "Unity operation '".concat(operation, "' failed: ").concat(message));
13848
+ this.handleError(error);
13829
13849
  }
13830
13850
  };
13831
13851
  /**
@@ -13899,7 +13919,7 @@ var ZEEAvatarSDKLib = (function (exports) {
13899
13919
  _c.label = 2;
13900
13920
  case 2:
13901
13921
  _c.trys.push([2, 4,, 5]);
13902
- apiUrl = "".concat(this.getApiBaseUrl()).concat(this.getBroadcastApiPath(params.type));
13922
+ apiUrl = "".concat(ConfigManager.getInstance().getApiBaseUrl(true)).concat(this.getBroadcastApiPath(params.type));
13903
13923
  requestBody = {
13904
13924
  humanCode: params.humanCode,
13905
13925
  speed: params.speed,
@@ -13936,7 +13956,7 @@ var ZEEAvatarSDKLib = (function (exports) {
13936
13956
  var response = JSON.parse(event.data);
13937
13957
  // 错误处理
13938
13958
  if (response.code !== 0) {
13939
- _this.handleError(new SDKError(exports.NetworkErrorCode.SERVER_ERROR, response.message || '未知服务器错误'));
13959
+ _this.handleBroadcastError(response.code);
13940
13960
  return;
13941
13961
  }
13942
13962
  // 流式播报
@@ -13975,7 +13995,10 @@ var ZEEAvatarSDKLib = (function (exports) {
13975
13995
  },
13976
13996
  onerror: function onerror(error) {
13977
13997
  _this.logger.error('Broadcast stream error', error);
13978
- _this.handleError(new SDKError(exports.OperationErrorCode.OPERATION_FAILED, '播报流错误', error));
13998
+ var sdkError = new SDKError(exports.OperationErrorCode.OPERATION_FAILED, '服务出错了', error);
13999
+ _this.handleError(sdkError);
14000
+ // 必须抛出错误,否则会循环重试请求
14001
+ throw new Error("\u670D\u52A1\u51FA\u9519\u4E86".concat(sdkError.message));
13979
14002
  }
13980
14003
  })];
13981
14004
  case 3:
@@ -14147,16 +14170,6 @@ var ZEEAvatarSDKLib = (function (exports) {
14147
14170
  enumerable: false,
14148
14171
  configurable: true
14149
14172
  });
14150
- /**
14151
- * 获取API基础URL
14152
- * @returns string 返回当前环境的API基础URL
14153
- * @description 根据当前环境配置获取API基础URL
14154
- * @private
14155
- */
14156
- BroadcastService.prototype.getApiBaseUrl = function () {
14157
- var configManager = ConfigManager.getInstance();
14158
- return configManager.getApiBaseUrl();
14159
- };
14160
14173
  /**
14161
14174
  * 获取播报API路径
14162
14175
  * @param type - 播报类型
@@ -14166,10 +14179,19 @@ var ZEEAvatarSDKLib = (function (exports) {
14166
14179
  * @private
14167
14180
  */
14168
14181
  BroadcastService.prototype.getBroadcastApiPath = function (type) {
14182
+ var env = ConfigManager.getInstance().getEnv();
14169
14183
  switch (type) {
14170
14184
  case exports.BroadcastType.TEXT:
14185
+ // 临时处理,开发和测试环境使用新接口
14186
+ if (env === 'dev' || env === 'test') {
14187
+ return '/aiep-openapi/avatar-interaction/v1/broadcast/text';
14188
+ }
14171
14189
  return '/dh-talker/user/agent/broadcast/text';
14172
14190
  case exports.BroadcastType.AUDIO:
14191
+ // 临时处理,开发和测试环境使用新接口
14192
+ if (env === 'dev' || env === 'test') {
14193
+ return '/aiep-openapi/avatar-interaction/v1/broadcast/audio';
14194
+ }
14173
14195
  return '/dh-talker/user/agent/broadcast/customAudio';
14174
14196
  default:
14175
14197
  throw new SDKError(exports.ConfigErrorCode.INVALID_CONFIG, "\u672A\u77E5\u7684\u64AD\u62A5\u7C7B\u578B: ".concat(type));
@@ -14210,6 +14232,31 @@ var ZEEAvatarSDKLib = (function (exports) {
14210
14232
  // 触发错误回调
14211
14233
  (_b = (_a = this.callbacks).onError) === null || _b === void 0 ? void 0 : _b.call(_a, error);
14212
14234
  };
14235
+ /**
14236
+ * 处理播报错误
14237
+ * @param errorCode - 错误码
14238
+ * @description 处理播报过程中的错误
14239
+ * @private
14240
+ */
14241
+ BroadcastService.prototype.handleBroadcastError = function (errorCode) {
14242
+ // 用户权益额度不存在错误码 14001
14243
+ // 用户权益额度不足错误码 14002
14244
+ // 用户权益额度冻结失败 14003
14245
+ switch (errorCode) {
14246
+ case 14001:
14247
+ this.handleError(new SDKError(exports.OperationErrorCode.BROADCAST_EQUITY_NOT_EXIST, '用户权益额度不存在'));
14248
+ break;
14249
+ case 14002:
14250
+ this.handleError(new SDKError(exports.OperationErrorCode.BROADCAST_EQUITY_NOT_ENOUGH, '用户权益额度不足'));
14251
+ break;
14252
+ case 14003:
14253
+ this.handleError(new SDKError(exports.OperationErrorCode.BROADCAST_EQUITY_FREEZE_FAILED, '用户权益额度冻结失败'));
14254
+ break;
14255
+ default:
14256
+ this.handleError(new SDKError(exports.OperationErrorCode.OPERATION_FAILED, '播报服务错误'));
14257
+ break;
14258
+ }
14259
+ };
14213
14260
  return BroadcastService;
14214
14261
  }(UnityBaseService);
14215
14262
 
@@ -14323,10 +14370,13 @@ var ZEEAvatarSDKLib = (function (exports) {
14323
14370
  */
14324
14371
  ZEEAvatarLoader.prototype.destroy = function () {
14325
14372
  if (this.unityInstance) {
14326
- // 移除DOM容器
14373
+ // 移除DOM容器下的canvas元素
14327
14374
  var container = document.getElementById(this.getContainerId());
14328
14375
  if (container) {
14329
- container.remove();
14376
+ var canvas = container.querySelector('#unity-canvas');
14377
+ if (canvas) {
14378
+ canvas.remove();
14379
+ }
14330
14380
  }
14331
14381
  // 退出Unity实例
14332
14382
  if (typeof this.unityInstance.Quit === 'function') {
@@ -14345,10 +14395,12 @@ var ZEEAvatarSDKLib = (function (exports) {
14345
14395
  * @protected
14346
14396
  */
14347
14397
  ZEEAvatarLoader.prototype.initGlobalConfig = function () {
14348
- var params = __assign(__assign({}, ConfigManager.getInstance().getConfig()), {
14398
+ var params = {
14349
14399
  token: ConfigManager.getInstance().getToken(),
14350
- apiBaseUrl: ConfigManager.getInstance().getApiBaseUrl(false)
14351
- });
14400
+ apiBaseUrl: ConfigManager.getInstance().getApiBaseUrl(false),
14401
+ idleMotionList: ConfigManager.getInstance().getConfig().idleMotionList,
14402
+ assetsUrl: ConfigManager.getInstance().getConfig().assetsUrl
14403
+ };
14352
14404
  console.warn('[ Send Unity message ]: AvatarSDK.InitializeConfig', params);
14353
14405
  this.unityInstance.SendMessage('AvatarSDK', 'InitializeConfig', JSON.stringify(params));
14354
14406
  };
@@ -12150,7 +12150,7 @@
12150
12150
  NetworkErrorCode[NetworkErrorCode["CONNECTION_FAILED"] = 1001] = "CONNECTION_FAILED";
12151
12151
  /** 请求超时 */
12152
12152
  NetworkErrorCode[NetworkErrorCode["REQUEST_TIMEOUT"] = 1002] = "REQUEST_TIMEOUT";
12153
- /** 服务器错误 */
12153
+ /** 服务错误 */
12154
12154
  NetworkErrorCode[NetworkErrorCode["SERVER_ERROR"] = 1003] = "SERVER_ERROR";
12155
12155
  /** 未授权访问 */
12156
12156
  NetworkErrorCode[NetworkErrorCode["UNAUTHORIZED"] = 1004] = "UNAUTHORIZED";
@@ -12172,6 +12172,12 @@
12172
12172
  OperationErrorCode[OperationErrorCode["OPERATION_TIMEOUT"] = 2004] = "OPERATION_TIMEOUT";
12173
12173
  /** 操作被取消 */
12174
12174
  OperationErrorCode[OperationErrorCode["OPERATION_CANCELLED"] = 2005] = "OPERATION_CANCELLED";
12175
+ /** 用户权益额度不存在 */
12176
+ OperationErrorCode[OperationErrorCode["BROADCAST_EQUITY_NOT_EXIST"] = 2006] = "BROADCAST_EQUITY_NOT_EXIST";
12177
+ /** 用户权益额度不足 */
12178
+ OperationErrorCode[OperationErrorCode["BROADCAST_EQUITY_NOT_ENOUGH"] = 2007] = "BROADCAST_EQUITY_NOT_ENOUGH";
12179
+ /** 用户权益额度冻结失败 */
12180
+ OperationErrorCode[OperationErrorCode["BROADCAST_EQUITY_FREEZE_FAILED"] = 2008] = "BROADCAST_EQUITY_FREEZE_FAILED";
12175
12181
  })(exports.OperationErrorCode || (exports.OperationErrorCode = {}));
12176
12182
  /**
12177
12183
  * 资源错误码 (3xxx)
@@ -12257,6 +12263,15 @@
12257
12263
  }, _a[exports.OperationErrorCode.OPERATION_CANCELLED] = {
12258
12264
  category: exports.ErrorCategory.OPERATION,
12259
12265
  message: '操作被取消'
12266
+ }, _a[exports.OperationErrorCode.BROADCAST_EQUITY_NOT_EXIST] = {
12267
+ category: exports.ErrorCategory.OPERATION,
12268
+ message: '用户权益额度不存在'
12269
+ }, _a[exports.OperationErrorCode.BROADCAST_EQUITY_NOT_ENOUGH] = {
12270
+ category: exports.ErrorCategory.OPERATION,
12271
+ message: '用户权益额度不足'
12272
+ }, _a[exports.OperationErrorCode.BROADCAST_EQUITY_FREEZE_FAILED] = {
12273
+ category: exports.ErrorCategory.OPERATION,
12274
+ message: '用户权益额度冻结失败'
12260
12275
  },
12261
12276
  // 资源错误
12262
12277
  _a[exports.ResourceErrorCode.LOAD_FAILED] = {
@@ -12553,7 +12568,8 @@
12553
12568
  operation: operation,
12554
12569
  code: code,
12555
12570
  message: message,
12556
- data: dataObj
12571
+ data: dataObj,
12572
+ originalData: data
12557
12573
  });
12558
12574
  var callback = this.pendingCallbacks.get(operation);
12559
12575
  if (!callback) {
@@ -12853,7 +12869,7 @@
12853
12869
  console.warn("[Unity Warning] ".concat(message), data);
12854
12870
  };
12855
12871
  SimpleLogger.prototype.error = function (message, error, data) {
12856
- console.error("[Unity Error] ".concat(message), error, data);
12872
+ console.error("[Unity Error] ".concat(message), error, error instanceof SDKError ? error.code : null, data);
12857
12873
  };
12858
12874
  return SimpleLogger;
12859
12875
  }();
@@ -12902,7 +12918,6 @@
12902
12918
  __extends(AvatarService, _super);
12903
12919
  /**
12904
12920
  * 构造函数
12905
- * @param unityInstance - Unity实例对象
12906
12921
  * @param config - 可选的服务配置,用于覆盖默认配置
12907
12922
  * @description 初始化Avatar API,设置Unity实例和配置
12908
12923
  * @example
@@ -13338,6 +13353,7 @@
13338
13353
  withModule = true;
13339
13354
  }
13340
13355
  if (((_a = this.config) === null || _a === void 0 ? void 0 : _a.env) === 'custom' && ((_b = this.config) === null || _b === void 0 ? void 0 : _b.apiUrl)) {
13356
+ // 如果环境为自定义,则直接返回配置的API,无需添加模块路径
13341
13357
  return this.config.apiUrl;
13342
13358
  }
13343
13359
  return ((_d = getEnvConfig(((_c = this.config) === null || _c === void 0 ? void 0 : _c.env) || 'prod', withModule)) === null || _d === void 0 ? void 0 : _d.apiBaseUrl) || '';
@@ -13416,16 +13432,11 @@
13416
13432
  UnityLoader.prototype.createContainer = function () {
13417
13433
  var container = document.getElementById(this.config.containerId);
13418
13434
  if (!container) {
13419
- throw new Error("Container element with ID \"".concat(this.config.containerId, "\" not found"));
13435
+ throw new TypeError("Avatar container element with ID \"".concat(this.config.containerId, "\" not found"));
13436
+ } else if (!(container instanceof HTMLDivElement)) {
13437
+ throw new TypeError('Avatar container element must be a div element');
13420
13438
  }
13421
- container.style.width = '100%';
13422
- container.style.height = '100%';
13423
13439
  container.style.position = 'relative';
13424
- // 移除容器提示元素
13425
- var containerTip = document.getElementById('unity-container-tip');
13426
- if (containerTip) {
13427
- containerTip.remove();
13428
- }
13429
13440
  return container;
13430
13441
  };
13431
13442
  /**
@@ -13479,11 +13490,15 @@
13479
13490
  return __generator(this, function (_a) {
13480
13491
  switch (_a.label) {
13481
13492
  case 0:
13482
- canvas = document.createElement('canvas');
13483
- canvas.id = 'unity-canvas';
13484
- canvas.style.width = '100%';
13485
- canvas.style.height = '100%';
13486
- container.appendChild(canvas);
13493
+ canvas = container.querySelector('#unity-canvas');
13494
+ // 避免重复创建
13495
+ if (!canvas) {
13496
+ canvas = document.createElement('canvas');
13497
+ canvas.id = 'unity-canvas';
13498
+ canvas.style.width = '100%';
13499
+ canvas.style.height = '100%';
13500
+ container.appendChild(canvas);
13501
+ }
13487
13502
  // 移动设备适配
13488
13503
  if (/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)) {
13489
13504
  meta = document.createElement('meta');
@@ -13813,22 +13828,27 @@
13813
13828
  // 触发对应的事件回调(仅在成功时)
13814
13829
  if (code === 0) {
13815
13830
  switch (operation) {
13831
+ case exports.BroadcastOperationType.START_BROADCAST:
13832
+ if (isBroadcastCompleted) {
13833
+ (_b = (_a = this.callbacks).onFinish) === null || _b === void 0 ? void 0 : _b.call(_a);
13834
+ }
13835
+ break;
13816
13836
  case exports.BroadcastOperationType.PAUSE_BROADCAST:
13817
- (_b = (_a = this.callbacks).onPause) === null || _b === void 0 ? void 0 : _b.call(_a);
13837
+ (_d = (_c = this.callbacks).onPause) === null || _d === void 0 ? void 0 : _d.call(_c);
13818
13838
  this.logger.debug('Broadcast paused callback triggered');
13819
13839
  break;
13820
13840
  case exports.BroadcastOperationType.RESUME_BROADCAST:
13821
- (_d = (_c = this.callbacks).onResume) === null || _d === void 0 ? void 0 : _d.call(_c);
13841
+ (_f = (_e = this.callbacks).onResume) === null || _f === void 0 ? void 0 : _f.call(_e);
13822
13842
  this.logger.debug('Broadcast resumed callback triggered');
13823
13843
  break;
13824
13844
  case exports.BroadcastOperationType.STOP_BROADCAST:
13825
- (_f = (_e = this.callbacks).onStop) === null || _f === void 0 ? void 0 : _f.call(_e);
13826
- if (isBroadcastCompleted) {
13827
- (_h = (_g = this.callbacks).onFinish) === null || _h === void 0 ? void 0 : _h.call(_g);
13828
- }
13845
+ (_h = (_g = this.callbacks).onStop) === null || _h === void 0 ? void 0 : _h.call(_g);
13829
13846
  this.logger.debug('Broadcast stopped callback triggered');
13830
13847
  break;
13831
13848
  }
13849
+ } else {
13850
+ var error = SDKError.createFromUnityError(code, "Unity operation '".concat(operation, "' failed: ").concat(message));
13851
+ this.handleError(error);
13832
13852
  }
13833
13853
  };
13834
13854
  /**
@@ -13902,7 +13922,7 @@
13902
13922
  _c.label = 2;
13903
13923
  case 2:
13904
13924
  _c.trys.push([2, 4,, 5]);
13905
- apiUrl = "".concat(this.getApiBaseUrl()).concat(this.getBroadcastApiPath(params.type));
13925
+ apiUrl = "".concat(ConfigManager.getInstance().getApiBaseUrl(true)).concat(this.getBroadcastApiPath(params.type));
13906
13926
  requestBody = {
13907
13927
  humanCode: params.humanCode,
13908
13928
  speed: params.speed,
@@ -13939,7 +13959,7 @@
13939
13959
  var response = JSON.parse(event.data);
13940
13960
  // 错误处理
13941
13961
  if (response.code !== 0) {
13942
- _this.handleError(new SDKError(exports.NetworkErrorCode.SERVER_ERROR, response.message || '未知服务器错误'));
13962
+ _this.handleBroadcastError(response.code);
13943
13963
  return;
13944
13964
  }
13945
13965
  // 流式播报
@@ -13978,7 +13998,10 @@
13978
13998
  },
13979
13999
  onerror: function onerror(error) {
13980
14000
  _this.logger.error('Broadcast stream error', error);
13981
- _this.handleError(new SDKError(exports.OperationErrorCode.OPERATION_FAILED, '播报流错误', error));
14001
+ var sdkError = new SDKError(exports.OperationErrorCode.OPERATION_FAILED, '服务出错了', error);
14002
+ _this.handleError(sdkError);
14003
+ // 必须抛出错误,否则会循环重试请求
14004
+ throw new Error("\u670D\u52A1\u51FA\u9519\u4E86".concat(sdkError.message));
13982
14005
  }
13983
14006
  })];
13984
14007
  case 3:
@@ -14150,16 +14173,6 @@
14150
14173
  enumerable: false,
14151
14174
  configurable: true
14152
14175
  });
14153
- /**
14154
- * 获取API基础URL
14155
- * @returns string 返回当前环境的API基础URL
14156
- * @description 根据当前环境配置获取API基础URL
14157
- * @private
14158
- */
14159
- BroadcastService.prototype.getApiBaseUrl = function () {
14160
- var configManager = ConfigManager.getInstance();
14161
- return configManager.getApiBaseUrl();
14162
- };
14163
14176
  /**
14164
14177
  * 获取播报API路径
14165
14178
  * @param type - 播报类型
@@ -14169,10 +14182,19 @@
14169
14182
  * @private
14170
14183
  */
14171
14184
  BroadcastService.prototype.getBroadcastApiPath = function (type) {
14185
+ var env = ConfigManager.getInstance().getEnv();
14172
14186
  switch (type) {
14173
14187
  case exports.BroadcastType.TEXT:
14188
+ // 临时处理,开发和测试环境使用新接口
14189
+ if (env === 'dev' || env === 'test') {
14190
+ return '/aiep-openapi/avatar-interaction/v1/broadcast/text';
14191
+ }
14174
14192
  return '/dh-talker/user/agent/broadcast/text';
14175
14193
  case exports.BroadcastType.AUDIO:
14194
+ // 临时处理,开发和测试环境使用新接口
14195
+ if (env === 'dev' || env === 'test') {
14196
+ return '/aiep-openapi/avatar-interaction/v1/broadcast/audio';
14197
+ }
14176
14198
  return '/dh-talker/user/agent/broadcast/customAudio';
14177
14199
  default:
14178
14200
  throw new SDKError(exports.ConfigErrorCode.INVALID_CONFIG, "\u672A\u77E5\u7684\u64AD\u62A5\u7C7B\u578B: ".concat(type));
@@ -14213,6 +14235,31 @@
14213
14235
  // 触发错误回调
14214
14236
  (_b = (_a = this.callbacks).onError) === null || _b === void 0 ? void 0 : _b.call(_a, error);
14215
14237
  };
14238
+ /**
14239
+ * 处理播报错误
14240
+ * @param errorCode - 错误码
14241
+ * @description 处理播报过程中的错误
14242
+ * @private
14243
+ */
14244
+ BroadcastService.prototype.handleBroadcastError = function (errorCode) {
14245
+ // 用户权益额度不存在错误码 14001
14246
+ // 用户权益额度不足错误码 14002
14247
+ // 用户权益额度冻结失败 14003
14248
+ switch (errorCode) {
14249
+ case 14001:
14250
+ this.handleError(new SDKError(exports.OperationErrorCode.BROADCAST_EQUITY_NOT_EXIST, '用户权益额度不存在'));
14251
+ break;
14252
+ case 14002:
14253
+ this.handleError(new SDKError(exports.OperationErrorCode.BROADCAST_EQUITY_NOT_ENOUGH, '用户权益额度不足'));
14254
+ break;
14255
+ case 14003:
14256
+ this.handleError(new SDKError(exports.OperationErrorCode.BROADCAST_EQUITY_FREEZE_FAILED, '用户权益额度冻结失败'));
14257
+ break;
14258
+ default:
14259
+ this.handleError(new SDKError(exports.OperationErrorCode.OPERATION_FAILED, '播报服务错误'));
14260
+ break;
14261
+ }
14262
+ };
14216
14263
  return BroadcastService;
14217
14264
  }(UnityBaseService);
14218
14265
 
@@ -14326,10 +14373,13 @@
14326
14373
  */
14327
14374
  ZEEAvatarLoader.prototype.destroy = function () {
14328
14375
  if (this.unityInstance) {
14329
- // 移除DOM容器
14376
+ // 移除DOM容器下的canvas元素
14330
14377
  var container = document.getElementById(this.getContainerId());
14331
14378
  if (container) {
14332
- container.remove();
14379
+ var canvas = container.querySelector('#unity-canvas');
14380
+ if (canvas) {
14381
+ canvas.remove();
14382
+ }
14333
14383
  }
14334
14384
  // 退出Unity实例
14335
14385
  if (typeof this.unityInstance.Quit === 'function') {
@@ -14348,10 +14398,12 @@
14348
14398
  * @protected
14349
14399
  */
14350
14400
  ZEEAvatarLoader.prototype.initGlobalConfig = function () {
14351
- var params = __assign(__assign({}, ConfigManager.getInstance().getConfig()), {
14401
+ var params = {
14352
14402
  token: ConfigManager.getInstance().getToken(),
14353
- apiBaseUrl: ConfigManager.getInstance().getApiBaseUrl(false)
14354
- });
14403
+ apiBaseUrl: ConfigManager.getInstance().getApiBaseUrl(false),
14404
+ idleMotionList: ConfigManager.getInstance().getConfig().idleMotionList,
14405
+ assetsUrl: ConfigManager.getInstance().getConfig().assetsUrl
14406
+ };
14355
14407
  console.warn('[ Send Unity message ]: AvatarSDK.InitializeConfig', params);
14356
14408
  this.unityInstance.SendMessage('AvatarSDK', 'InitializeConfig', JSON.stringify(params));
14357
14409
  };