@onekeyfe/hd-core 1.1.4-alpha.2 → 1.1.4-alpha.3

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 (64) hide show
  1. package/dist/api/BaseMethod.d.ts +2 -0
  2. package/dist/api/BaseMethod.d.ts.map +1 -1
  3. package/dist/api/allnetwork/AllNetworkGetAddress.d.ts +4 -28
  4. package/dist/api/allnetwork/AllNetworkGetAddress.d.ts.map +1 -1
  5. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts +47 -0
  6. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -0
  7. package/dist/api/allnetwork/AllNetworkGetAddressByLoop.d.ts +8 -0
  8. package/dist/api/allnetwork/AllNetworkGetAddressByLoop.d.ts.map +1 -0
  9. package/dist/api/btc/BTCGetPublicKey.d.ts.map +1 -1
  10. package/dist/api/cosmos/CosmosGetPublicKey.d.ts +1 -1
  11. package/dist/api/cosmos/CosmosGetPublicKey.d.ts.map +1 -1
  12. package/dist/api/device/DeviceUnlock.d.ts +0 -2
  13. package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
  14. package/dist/api/evm/EVMGetPublicKey.d.ts +1 -0
  15. package/dist/api/evm/EVMGetPublicKey.d.ts.map +1 -1
  16. package/dist/api/index.d.ts +1 -0
  17. package/dist/api/index.d.ts.map +1 -1
  18. package/dist/core/RequestQueue.d.ts +4 -0
  19. package/dist/core/RequestQueue.d.ts.map +1 -1
  20. package/dist/core/index.d.ts +3 -2
  21. package/dist/core/index.d.ts.map +1 -1
  22. package/dist/device/Device.d.ts +4 -1
  23. package/dist/device/Device.d.ts.map +1 -1
  24. package/dist/events/call.d.ts +9 -0
  25. package/dist/events/call.d.ts.map +1 -1
  26. package/dist/events/core.d.ts +2 -2
  27. package/dist/events/core.d.ts.map +1 -1
  28. package/dist/events/iframe.d.ts +11 -1
  29. package/dist/events/iframe.d.ts.map +1 -1
  30. package/dist/index.d.ts +41 -11
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +408 -195
  33. package/dist/inject.d.ts +3 -0
  34. package/dist/inject.d.ts.map +1 -1
  35. package/dist/types/api/allNetworkGetAddress.d.ts +12 -3
  36. package/dist/types/api/allNetworkGetAddress.d.ts.map +1 -1
  37. package/dist/types/api/evmGetPublicKey.d.ts +1 -0
  38. package/dist/types/api/evmGetPublicKey.d.ts.map +1 -1
  39. package/dist/types/api/index.d.ts +2 -1
  40. package/dist/types/api/index.d.ts.map +1 -1
  41. package/dist/utils/findDefectiveBatchDevice.d.ts +0 -5
  42. package/dist/utils/findDefectiveBatchDevice.d.ts.map +1 -1
  43. package/package.json +4 -4
  44. package/src/api/BaseMethod.ts +3 -0
  45. package/src/api/allnetwork/AllNetworkGetAddress.ts +19 -408
  46. package/src/api/allnetwork/AllNetworkGetAddressBase.ts +480 -0
  47. package/src/api/allnetwork/AllNetworkGetAddressByLoop.ts +161 -0
  48. package/src/api/btc/BTCGetPublicKey.ts +13 -0
  49. package/src/api/cosmos/CosmosGetPublicKey.ts +1 -1
  50. package/src/api/device/DeviceUnlock.ts +1 -48
  51. package/src/api/evm/EVMGetPublicKey.ts +9 -3
  52. package/src/api/index.ts +1 -0
  53. package/src/core/RequestQueue.ts +26 -0
  54. package/src/core/index.ts +42 -82
  55. package/src/device/Device.ts +66 -0
  56. package/src/events/call.ts +10 -0
  57. package/src/events/core.ts +7 -1
  58. package/src/events/iframe.ts +12 -1
  59. package/src/index.ts +2 -1
  60. package/src/inject.ts +47 -0
  61. package/src/types/api/allNetworkGetAddress.ts +17 -3
  62. package/src/types/api/evmGetPublicKey.ts +1 -0
  63. package/src/types/api/index.ts +2 -1
  64. package/src/utils/findDefectiveBatchDevice.ts +0 -29
package/dist/index.js CHANGED
@@ -26,6 +26,82 @@ var ByteBuffer__default = /*#__PURE__*/_interopDefaultLegacy(ByteBuffer);
26
26
  var BigNumber__default = /*#__PURE__*/_interopDefaultLegacy(BigNumber);
27
27
  var JSZip__default = /*#__PURE__*/_interopDefaultLegacy(JSZip);
28
28
 
29
+ /******************************************************************************
30
+ Copyright (c) Microsoft Corporation.
31
+
32
+ Permission to use, copy, modify, and/or distribute this software for any
33
+ purpose with or without fee is hereby granted.
34
+
35
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
36
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
37
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
38
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
39
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
40
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
41
+ PERFORMANCE OF THIS SOFTWARE.
42
+ ***************************************************************************** */
43
+
44
+ function __rest(s, e) {
45
+ var t = {};
46
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
47
+ t[p] = s[p];
48
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
49
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
50
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
51
+ t[p[i]] = s[p[i]];
52
+ }
53
+ return t;
54
+ }
55
+
56
+ function __awaiter(thisArg, _arguments, P, generator) {
57
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
58
+ return new (P || (P = Promise))(function (resolve, reject) {
59
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
60
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
61
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
62
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
63
+ });
64
+ }
65
+
66
+ function __values(o) {
67
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
68
+ if (m) return m.call(o);
69
+ if (o && typeof o.length === "number") return {
70
+ next: function () {
71
+ if (o && i >= o.length) o = void 0;
72
+ return { value: o && o[i++], done: !o };
73
+ }
74
+ };
75
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
76
+ }
77
+
78
+ function __asyncValues(o) {
79
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
80
+ var m = o[Symbol.asyncIterator], i;
81
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
82
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
83
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
84
+ }
85
+
86
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
87
+ var e = new Error(message);
88
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
89
+ };
90
+
91
+ const callbackManager = new Map();
92
+ const generateCallbackId = () => `callback_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
93
+ const registerCallback = (id, callback) => {
94
+ callbackManager.set(id, callback);
95
+ };
96
+ const executeCallback = (id, ...args) => {
97
+ const callback = callbackManager.get(id);
98
+ if (callback) {
99
+ callback(...args);
100
+ }
101
+ };
102
+ const cleanupCallback = (id) => {
103
+ callbackManager.delete(id);
104
+ };
29
105
  const inject = ({ call, cancel, dispose, eventEmitter, init, updateSettings, switchTransport, uiResponse, }) => {
30
106
  const api = Object.assign({ on: (type, fn) => {
31
107
  eventEmitter.on(type, fn);
@@ -77,6 +153,20 @@ const createCoreApi = (call) => ({
77
153
  getNextU2FCounter: (connectId, params) => call(Object.assign(Object.assign({}, params), { connectId, method: 'getNextU2FCounter' })),
78
154
  setU2FCounter: (connectId, params) => call(Object.assign(Object.assign({}, params), { connectId, method: 'setU2FCounter' })),
79
155
  allNetworkGetAddress: (connectId, deviceId, params) => call(Object.assign(Object.assign({}, params), { connectId, deviceId, method: 'allNetworkGetAddress' })),
156
+ allNetworkGetAddressByLoop: (connectId, deviceId, params) => {
157
+ const { onLoopItemResponse, onAllItemsResponse } = params, restParams = __rest(params, ["onLoopItemResponse", "onAllItemsResponse"]);
158
+ const callbackId = generateCallbackId();
159
+ registerCallback(callbackId, onLoopItemResponse);
160
+ const callbackIdFinish = generateCallbackId();
161
+ registerCallback(callbackIdFinish, (data) => {
162
+ onAllItemsResponse === null || onAllItemsResponse === void 0 ? void 0 : onAllItemsResponse(data);
163
+ cleanupCallback(callbackIdFinish);
164
+ cleanupCallback(callbackId);
165
+ });
166
+ return call(Object.assign(Object.assign({}, restParams), { connectId,
167
+ deviceId, method: 'allNetworkGetAddressByLoop', callbackId,
168
+ callbackIdFinish }));
169
+ },
80
170
  evmGetAddress: (connectId, deviceId, params) => call(Object.assign(Object.assign({}, params), { connectId, deviceId, method: 'evmGetAddress' })),
81
171
  evmGetPublicKey: (connectId, deviceId, params) => call(Object.assign(Object.assign({}, params), { connectId, deviceId, method: 'evmGetPublicKey' })),
82
172
  evmSignMessage: (connectId, deviceId, params) => call(Object.assign(Object.assign({}, params), { connectId, deviceId, method: 'evmSignMessage' })),
@@ -684,68 +774,6 @@ const topLevelInject = () => {
684
774
  return api;
685
775
  };
686
776
 
687
- /******************************************************************************
688
- Copyright (c) Microsoft Corporation.
689
-
690
- Permission to use, copy, modify, and/or distribute this software for any
691
- purpose with or without fee is hereby granted.
692
-
693
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
694
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
695
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
696
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
697
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
698
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
699
- PERFORMANCE OF THIS SOFTWARE.
700
- ***************************************************************************** */
701
-
702
- function __rest(s, e) {
703
- var t = {};
704
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
705
- t[p] = s[p];
706
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
707
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
708
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
709
- t[p[i]] = s[p[i]];
710
- }
711
- return t;
712
- }
713
-
714
- function __awaiter(thisArg, _arguments, P, generator) {
715
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
716
- return new (P || (P = Promise))(function (resolve, reject) {
717
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
718
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
719
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
720
- step((generator = generator.apply(thisArg, _arguments || [])).next());
721
- });
722
- }
723
-
724
- function __values(o) {
725
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
726
- if (m) return m.call(o);
727
- if (o && typeof o.length === "number") return {
728
- next: function () {
729
- if (o && i >= o.length) o = void 0;
730
- return { value: o && o[i++], done: !o };
731
- }
732
- };
733
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
734
- }
735
-
736
- function __asyncValues(o) {
737
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
738
- var m = o[Symbol.asyncIterator], i;
739
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
740
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
741
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
742
- }
743
-
744
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
745
- var e = new Error(message);
746
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
747
- };
748
-
749
777
  const LOG_EVENT = 'LOG_EVENT';
750
778
  const LOG = {
751
779
  OUTPUT: 'log-output',
@@ -25699,30 +25727,6 @@ const wait = (ms) => new Promise(resolve => {
25699
25727
  setTimeout(resolve, ms);
25700
25728
  });
25701
25729
 
25702
- const findDefectiveBatchDevice = (features) => {
25703
- if (!features)
25704
- return;
25705
- const { onekey_serial: onekeySerial, se_ver: seVer } = features;
25706
- if (!onekeySerial)
25707
- return;
25708
- const versionNum = +onekeySerial.slice(5);
25709
- if (Number.isNaN(versionNum))
25710
- return;
25711
- return versionNum >= 21032200001 && versionNum <= 21032201500 && seVer === '1.1.0.2';
25712
- };
25713
- const getDefectiveDeviceInfo = (features) => {
25714
- if (!findDefectiveBatchDevice(features))
25715
- return null;
25716
- const serialNo = getDeviceUUID(features);
25717
- const deviceType = getDeviceType(features);
25718
- const seVersion = features.se_ver;
25719
- return {
25720
- serialNo,
25721
- seVersion,
25722
- deviceType: deviceType || 'Unknown',
25723
- };
25724
- };
25725
-
25726
25730
  const CORE_EVENT = 'CORE_EVENT';
25727
25731
  const parseMessage = (messageData) => {
25728
25732
  const { data } = messageData;
@@ -25822,6 +25826,7 @@ const IFRAME = {
25822
25826
  CALL: 'iframe-call',
25823
25827
  CANCEL: 'iframe-cancel',
25824
25828
  SWITCH_TRANSPORT: 'iframe-switch-transport',
25829
+ CALLBACK: 'iframe-callback',
25825
25830
  };
25826
25831
  const createIFrameMessage = (type, payload) => ({
25827
25832
  event: UI_EVENT,
@@ -26715,6 +26720,15 @@ class Device extends events.exports {
26715
26720
  const env = DataManager.getSettings('env');
26716
26721
  if ((this.isUsedHere() && !this.keepSession && this.mainId) ||
26717
26722
  (this.mainId && DataManager.isBleConnect(env))) {
26723
+ if (this.pendingCallbackPromise) {
26724
+ try {
26725
+ Log$a.debug('Waiting for callback tasks to complete before releasing device (in release method)');
26726
+ yield this.pendingCallbackPromise.promise;
26727
+ }
26728
+ catch (error) {
26729
+ Log$a.error('Error waiting for callback tasks in release method:', error);
26730
+ }
26731
+ }
26718
26732
  if (this.commands) {
26719
26733
  this.commands.dispose(false);
26720
26734
  if (this.commands.callPromise) {
@@ -27095,6 +27109,46 @@ class Device extends events.exports {
27095
27109
  return res.message;
27096
27110
  });
27097
27111
  }
27112
+ supportUnlockVersionRange() {
27113
+ return {
27114
+ pro: {
27115
+ min: '4.15.0',
27116
+ },
27117
+ };
27118
+ }
27119
+ unlockDevice() {
27120
+ var _a;
27121
+ return __awaiter(this, void 0, void 0, function* () {
27122
+ const firmwareVersion = (_a = getDeviceFirmwareVersion(this.features)) === null || _a === void 0 ? void 0 : _a.join('.');
27123
+ const versionRange = getMethodVersionRange(this.features, type => this.supportUnlockVersionRange()[type]);
27124
+ if (versionRange && semver__default["default"].gte(firmwareVersion, versionRange.min)) {
27125
+ const res = yield this.commands.typedCall('UnLockDevice', 'UnLockDeviceResponse');
27126
+ if (this.features) {
27127
+ this.features.unlocked = res.message.unlocked == null ? null : res.message.unlocked;
27128
+ this.features.unlocked_attach_pin =
27129
+ res.message.unlocked_attach_pin == null ? undefined : res.message.unlocked_attach_pin;
27130
+ this.features.passphrase_protection =
27131
+ res.message.passphrase_protection == null ? null : res.message.passphrase_protection;
27132
+ return Promise.resolve(this.features);
27133
+ }
27134
+ const featuresRes = yield this.commands.typedCall('GetFeatures', 'Features');
27135
+ this._updateFeatures(featuresRes.message);
27136
+ return Promise.resolve(featuresRes.message);
27137
+ }
27138
+ const { type } = yield this.commands.typedCall('GetAddress', 'Address', {
27139
+ address_n: [toHardened(44), toHardened(1), toHardened(0), 0, 0],
27140
+ coin_name: 'Testnet',
27141
+ script_type: 'SPENDADDRESS',
27142
+ show_display: false,
27143
+ });
27144
+ if (type === 'CallMethodError') {
27145
+ throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, 'unlock device error');
27146
+ }
27147
+ const res = yield this.commands.typedCall('GetFeatures', 'Features');
27148
+ this._updateFeatures(res.message);
27149
+ return Promise.resolve(res.message);
27150
+ });
27151
+ }
27098
27152
  checkPassphraseStateSafety(passphraseState, useEmptyPassphrase, skipPassphraseCheck) {
27099
27153
  return __awaiter(this, void 0, void 0, function* () {
27100
27154
  if (!this.features)
@@ -28667,42 +28721,9 @@ class DeviceUnlock extends BaseMethod {
28667
28721
  init() {
28668
28722
  this.useDevicePassphraseState = false;
28669
28723
  }
28670
- supportUnlockVersionRange() {
28671
- return {
28672
- pro: {
28673
- min: '4.15.0',
28674
- },
28675
- };
28676
- }
28677
28724
  run() {
28678
- var _a;
28679
28725
  return __awaiter(this, void 0, void 0, function* () {
28680
- const firmwareVersion = (_a = getDeviceFirmwareVersion(this.device.features)) === null || _a === void 0 ? void 0 : _a.join('.');
28681
- const versionRange = getMethodVersionRange(this.device.features, type => this.supportUnlockVersionRange()[type]);
28682
- if (versionRange && semver__default["default"].gte(firmwareVersion, versionRange.min)) {
28683
- const res = yield this.device.commands.typedCall('UnLockDevice', 'UnLockDeviceResponse');
28684
- if (this.device.features) {
28685
- this.device.features.unlocked = res.message.unlocked == null ? null : res.message.unlocked;
28686
- this.device.features.unlocked_attach_pin =
28687
- res.message.unlocked_attach_pin == null ? undefined : res.message.unlocked_attach_pin;
28688
- this.device.features.passphrase_protection =
28689
- res.message.passphrase_protection == null ? null : res.message.passphrase_protection;
28690
- return Promise.resolve(this.device.features);
28691
- }
28692
- const featuresRes = yield this.device.commands.typedCall('GetFeatures', 'Features');
28693
- return Promise.resolve(featuresRes.message);
28694
- }
28695
- const { type } = yield this.device.commands.typedCall('GetAddress', 'Address', {
28696
- address_n: [toHardened(44), toHardened(1), toHardened(0), 0, 0],
28697
- coin_name: 'Testnet',
28698
- script_type: 'SPENDADDRESS',
28699
- show_display: false,
28700
- });
28701
- if (type === 'CallMethodError') {
28702
- throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, 'Get the passphrase state error');
28703
- }
28704
- const res = yield this.device.commands.typedCall('GetFeatures', 'Features');
28705
- return Promise.resolve(res.message);
28726
+ return this.device.unlockDevice();
28706
28727
  });
28707
28728
  }
28708
28729
  }
@@ -30065,12 +30086,17 @@ const networkConfigMap = {
30065
30086
  methodName: 'neoGetAddress',
30066
30087
  },
30067
30088
  };
30068
- class AllNetworkGetAddress extends BaseMethod {
30089
+ class AllNetworkGetAddressBase extends BaseMethod {
30090
+ constructor() {
30091
+ super(...arguments);
30092
+ this.abortController = null;
30093
+ }
30069
30094
  init() {
30095
+ var _a, _b;
30070
30096
  this.checkDeviceId = true;
30071
30097
  this.allowDeviceMode = [...this.allowDeviceMode, UI_REQUEST.NOT_INITIALIZE];
30072
30098
  validateParams(this.payload, [{ name: 'bundle', type: 'array' }]);
30073
- this.payload.bundle.forEach((batch) => {
30099
+ (_b = (_a = this.payload) === null || _a === void 0 ? void 0 : _a.bundle) === null || _b === void 0 ? void 0 : _b.forEach((batch) => {
30074
30100
  validateParams(batch, [
30075
30101
  { name: 'path', required: true },
30076
30102
  { name: 'network', type: 'string', required: true },
@@ -30096,7 +30122,7 @@ class AllNetworkGetAddress extends BaseMethod {
30096
30122
  _originalIndex: originalIndex,
30097
30123
  };
30098
30124
  }
30099
- callMethod(methodName, params) {
30125
+ callMethod(methodName, params, rootFingerprint) {
30100
30126
  var _a;
30101
30127
  return __awaiter(this, void 0, void 0, function* () {
30102
30128
  const method = findMethod({
@@ -30110,12 +30136,29 @@ class AllNetworkGetAddress extends BaseMethod {
30110
30136
  try {
30111
30137
  method.init();
30112
30138
  (_a = method.setDevice) === null || _a === void 0 ? void 0 : _a.call(method, this.device);
30139
+ method.context = this.context;
30140
+ const onSignalAbort = () => {
30141
+ var _a;
30142
+ (_a = this.abortController) === null || _a === void 0 ? void 0 : _a.abort(hdShared.HardwareErrorCodeMessage[hdShared.HardwareErrorCode.RepeatUnlocking]);
30143
+ };
30144
+ const _onDeviceButtonHandler = (...[device, request]) => {
30145
+ if (request.code === 'ButtonRequest_PinEntry' ||
30146
+ request.code === 'ButtonRequest_AttachPin') {
30147
+ onSignalAbort();
30148
+ }
30149
+ else {
30150
+ onDeviceButtonHandler(device, request);
30151
+ }
30152
+ };
30153
+ this.device.on(DEVICE.BUTTON, _onDeviceButtonHandler);
30154
+ this.device.on(DEVICE.PIN, onSignalAbort);
30155
+ this.device.on(DEVICE.PASSPHRASE, onSignalAbort);
30113
30156
  preCheckDeviceSupport(this.device, method);
30114
30157
  const response = yield method.run();
30115
30158
  if (!Array.isArray(response) || response.length === 0) {
30116
30159
  throw new Error('No response');
30117
30160
  }
30118
- result = response.map((item, index) => (Object.assign(Object.assign({}, params.bundle[index]._originRequestParams), { success: true, payload: item })));
30161
+ result = response.map((item, index) => (Object.assign(Object.assign({}, params.bundle[index]._originRequestParams), { success: true, payload: Object.assign(Object.assign({}, item), { rootFingerprint }) })));
30119
30162
  }
30120
30163
  catch (e) {
30121
30164
  const error = handleSkippableHardwareError(e, this.device, method);
@@ -30136,45 +30179,24 @@ class AllNetworkGetAddress extends BaseMethod {
30136
30179
  });
30137
30180
  }
30138
30181
  run() {
30139
- var _a, _b;
30140
30182
  return __awaiter(this, void 0, void 0, function* () {
30141
- const responses = [];
30142
- const resultMap = {};
30143
- const { bundle } = this.payload;
30144
- const methodGroups = bundle
30145
- .map((param, index) => this.generateMethodName({
30146
- network: param.network,
30147
- payload: param,
30148
- originalIndex: index,
30149
- }))
30150
- .reduce((acc, cur) => {
30151
- if (!acc[cur.methodName]) {
30152
- acc[cur.methodName] = [];
30153
- }
30154
- acc[cur.methodName].push(cur);
30155
- return acc;
30156
- }, {});
30157
- let i = 0;
30158
- for (const [methodName, params] of Object.entries(methodGroups)) {
30159
- const methodParams = {
30160
- bundle: params.map(param => (Object.assign({}, param.params))),
30161
- };
30162
- const response = yield this.callMethod(methodName, methodParams);
30163
- for (let i = 0; i < params.length; i++) {
30164
- const { _originRequestParams, _originalIndex } = params[i];
30165
- const responseKey = `${_originalIndex}`;
30166
- resultMap[responseKey] = Object.assign(Object.assign({}, _originRequestParams), response[i]);
30167
- }
30168
- if (((_b = (_a = this.payload) === null || _a === void 0 ? void 0 : _a.bundle) === null || _b === void 0 ? void 0 : _b.length) > 1) {
30169
- const progress = Math.round(((i + 1) / this.payload.bundle.length) * 100);
30170
- this.postMessage(createUiMessage(UI_REQUEST.DEVICE_PROGRESS, { progress }));
30183
+ const res = yield this.device.commands.typedCall('GetPublicKey', 'PublicKey', {
30184
+ address_n: [toHardened(44), toHardened(1), toHardened(0)],
30185
+ coin_name: 'Testnet',
30186
+ script_type: 'SPENDADDRESS',
30187
+ show_display: false,
30188
+ });
30189
+ this.postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_PIN_WINDOW));
30190
+ if (res.message.root_fingerprint == null) {
30191
+ throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.CallMethodInvalidParameter);
30192
+ }
30193
+ this.abortController = new AbortController();
30194
+ return this.getAllNetworkAddress(res.message.root_fingerprint).catch(e => {
30195
+ if (e instanceof hdShared.HardwareError && e.errorCode === hdShared.HardwareErrorCode.RepeatUnlocking) {
30196
+ throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RepeatUnlocking, e.message);
30171
30197
  }
30172
- i++;
30173
- }
30174
- for (let i = 0; i < bundle.length; i++) {
30175
- responses.push(resultMap[i]);
30176
- }
30177
- return Promise.resolve(responses);
30198
+ throw e;
30199
+ });
30178
30200
  });
30179
30201
  }
30180
30202
  }
@@ -30195,10 +30217,7 @@ function handleSkippableHardwareError(e, device, method) {
30195
30217
  let error;
30196
30218
  if (e instanceof hdShared.HardwareError && e.errorCode !== hdShared.HardwareErrorCode.RuntimeError) {
30197
30219
  const { errorCode } = e;
30198
- if (errorCode === hdShared.HardwareErrorCode.CallMethodInvalidParameter) {
30199
- error = e;
30200
- }
30201
- else if (errorCode === hdShared.HardwareErrorCode.CallMethodNeedUpgradeFirmware) {
30220
+ if (errorCode === hdShared.HardwareErrorCode.CallMethodNeedUpgradeFirmware) {
30202
30221
  error = e;
30203
30222
  }
30204
30223
  else if (errorCode === hdShared.HardwareErrorCode.DeviceNotSupportMethod) {
@@ -30224,6 +30243,164 @@ function handleSkippableHardwareError(e, device, method) {
30224
30243
  return error;
30225
30244
  }
30226
30245
 
30246
+ class AllNetworkGetAddress extends AllNetworkGetAddressBase {
30247
+ getAllNetworkAddress(rootFingerprint) {
30248
+ var _a, _b, _c, _d;
30249
+ return __awaiter(this, void 0, void 0, function* () {
30250
+ const responses = [];
30251
+ const resultMap = {};
30252
+ const { bundle } = this.payload;
30253
+ const methodGroups = bundle
30254
+ .map((param, index) => this.generateMethodName({
30255
+ network: param.network,
30256
+ payload: param,
30257
+ originalIndex: index,
30258
+ }))
30259
+ .reduce((acc, cur) => {
30260
+ if (!acc[cur.methodName]) {
30261
+ acc[cur.methodName] = [];
30262
+ }
30263
+ acc[cur.methodName].push(cur);
30264
+ return acc;
30265
+ }, {});
30266
+ let i = 0;
30267
+ for (const [methodName, params] of Object.entries(methodGroups)) {
30268
+ const methodParams = {
30269
+ bundle: params.map(param => (Object.assign({}, param.params))),
30270
+ };
30271
+ if ((_a = this.abortController) === null || _a === void 0 ? void 0 : _a.signal.aborted) {
30272
+ throw new Error(hdShared.HardwareErrorCodeMessage[hdShared.HardwareErrorCode.RepeatUnlocking]);
30273
+ }
30274
+ const response = yield this.callMethod(methodName, methodParams, rootFingerprint);
30275
+ if ((_b = this.abortController) === null || _b === void 0 ? void 0 : _b.signal.aborted) {
30276
+ throw new Error(hdShared.HardwareErrorCodeMessage[hdShared.HardwareErrorCode.RepeatUnlocking]);
30277
+ }
30278
+ for (let i = 0; i < params.length; i++) {
30279
+ const { _originRequestParams, _originalIndex } = params[i];
30280
+ const responseKey = `${_originalIndex}`;
30281
+ resultMap[responseKey] = Object.assign(Object.assign({}, _originRequestParams), response[i]);
30282
+ }
30283
+ if (((_d = (_c = this.payload) === null || _c === void 0 ? void 0 : _c.bundle) === null || _d === void 0 ? void 0 : _d.length) > 1) {
30284
+ const progress = Math.round(((i + 1) / this.payload.bundle.length) * 100);
30285
+ this.postMessage(createUiMessage(UI_REQUEST.DEVICE_PROGRESS, { progress }));
30286
+ }
30287
+ i++;
30288
+ }
30289
+ for (let i = 0; i < bundle.length; i++) {
30290
+ responses.push(resultMap[i]);
30291
+ }
30292
+ this.abortController = null;
30293
+ return Promise.resolve(responses);
30294
+ });
30295
+ }
30296
+ }
30297
+
30298
+ class AllNetworkGetAddressByLoop extends AllNetworkGetAddressBase {
30299
+ getAllNetworkAddress(rootFingerprint) {
30300
+ return __awaiter(this, void 0, void 0, function* () {
30301
+ const { callbackId, callbackIdFinish } = this.payload;
30302
+ if (!callbackId) {
30303
+ throw new Error('callbackId is required');
30304
+ }
30305
+ if (!callbackIdFinish) {
30306
+ throw new Error('callbackIdFinish is required');
30307
+ }
30308
+ const bundle = this.payload.bundle || [this.payload];
30309
+ const callbackPromise = this.processCallbacksInBackground(bundle, rootFingerprint, callbackId, callbackIdFinish);
30310
+ this.device.pendingCallbackPromise = hdShared.createDeferred(callbackPromise);
30311
+ if (this.context && this.payload.connectId) {
30312
+ this.context.registerCallbackTask(this.payload.connectId, this.device.pendingCallbackPromise);
30313
+ }
30314
+ return Promise.resolve([]);
30315
+ });
30316
+ }
30317
+ processCallbacksInBackground(bundle, rootFingerprint, callbackId, callbackIdFinish) {
30318
+ var _a, _b, _c;
30319
+ return __awaiter(this, void 0, void 0, function* () {
30320
+ try {
30321
+ const allResults = [];
30322
+ for (let i = 0; i < bundle.length; i++) {
30323
+ const item = bundle[i];
30324
+ if ((_a = this.abortController) === null || _a === void 0 ? void 0 : _a.signal.aborted) {
30325
+ throw new Error(hdShared.HardwareErrorCodeMessage[hdShared.HardwareErrorCode.RepeatUnlocking]);
30326
+ }
30327
+ const methodParams = this.generateMethodName({
30328
+ network: item.network,
30329
+ payload: item,
30330
+ originalIndex: i,
30331
+ });
30332
+ const singleMethodParams = {
30333
+ bundle: [methodParams.params],
30334
+ };
30335
+ const response = yield this.callMethod(methodParams.methodName, singleMethodParams, rootFingerprint);
30336
+ if ((_b = this.abortController) === null || _b === void 0 ? void 0 : _b.signal.aborted) {
30337
+ throw new Error(hdShared.HardwareErrorCodeMessage[hdShared.HardwareErrorCode.RepeatUnlocking]);
30338
+ }
30339
+ const singleResult = Object.assign(Object.assign({}, item), response[0]);
30340
+ allResults.push(singleResult);
30341
+ this.sendItemCallback(callbackId, singleResult, i);
30342
+ }
30343
+ this.sendFinishCallback({
30344
+ callbackId: callbackIdFinish,
30345
+ data: allResults,
30346
+ });
30347
+ }
30348
+ catch (error) {
30349
+ let errorCode = error.errorCode || error.code;
30350
+ let errorMessage = error.message;
30351
+ if (error instanceof hdShared.HardwareError) {
30352
+ errorCode = error.errorCode;
30353
+ errorMessage = error.message;
30354
+ }
30355
+ else if (error.message === hdShared.HardwareErrorCodeMessage[hdShared.HardwareErrorCode.RepeatUnlocking]) {
30356
+ errorCode = hdShared.HardwareErrorCode.RepeatUnlocking;
30357
+ errorMessage = error.message;
30358
+ }
30359
+ else {
30360
+ const hardwareError = hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, error.message);
30361
+ errorCode = hardwareError.errorCode;
30362
+ errorMessage = hardwareError.message;
30363
+ }
30364
+ this.sendFinishCallback({
30365
+ callbackId: callbackIdFinish,
30366
+ error: {
30367
+ success: false,
30368
+ payload: {
30369
+ error: errorMessage,
30370
+ code: errorCode,
30371
+ },
30372
+ },
30373
+ });
30374
+ }
30375
+ finally {
30376
+ (_c = this.context) === null || _c === void 0 ? void 0 : _c.cancelCallbackTasks(this.payload.connectId);
30377
+ this.abortController = null;
30378
+ }
30379
+ });
30380
+ }
30381
+ sendFinishCallback({ callbackId, data, error, }) {
30382
+ this.postMessage({
30383
+ event: IFRAME.CALLBACK,
30384
+ type: IFRAME.CALLBACK,
30385
+ payload: {
30386
+ callbackId,
30387
+ data,
30388
+ error,
30389
+ },
30390
+ });
30391
+ }
30392
+ sendItemCallback(callbackId, data, itemIndex) {
30393
+ this.postMessage({
30394
+ event: IFRAME.CALLBACK,
30395
+ type: IFRAME.CALLBACK,
30396
+ payload: {
30397
+ callbackId,
30398
+ data: Object.assign(Object.assign({}, data), { index: itemIndex }),
30399
+ },
30400
+ });
30401
+ }
30402
+ }
30403
+
30227
30404
  var bitcoin = [
30228
30405
  {
30229
30406
  name: "Bitcoin",
@@ -30798,6 +30975,15 @@ class BTCGetPublicKey extends BaseMethod {
30798
30975
  }
30799
30976
  }
30800
30977
  catch (error) {
30978
+ if (error instanceof hdShared.HardwareError) {
30979
+ const { errorCode } = error;
30980
+ if (errorCode === hdShared.HardwareErrorCode.PinCancelled ||
30981
+ errorCode === hdShared.HardwareErrorCode.ActionCancelled ||
30982
+ errorCode === hdShared.HardwareErrorCode.ResponseUnexpectTypeError ||
30983
+ errorCode === hdShared.HardwareErrorCode.PinInvalid) {
30984
+ throw error;
30985
+ }
30986
+ }
30801
30987
  responses = [];
30802
30988
  for (let i = 0; i < this.params.length; i++) {
30803
30989
  const param = this.params[i];
@@ -31637,6 +31823,7 @@ class EVMGetPublicKey extends BaseMethod {
31637
31823
  constructor() {
31638
31824
  super(...arguments);
31639
31825
  this.hasBundle = false;
31826
+ this.confirmShowOnOneKey = false;
31640
31827
  this.useBatch = false;
31641
31828
  }
31642
31829
  init() {
@@ -31644,7 +31831,8 @@ class EVMGetPublicKey extends BaseMethod {
31644
31831
  this.checkDeviceId = true;
31645
31832
  this.allowDeviceMode = [...this.allowDeviceMode, UI_REQUEST.NOT_INITIALIZE];
31646
31833
  this.hasBundle = !!((_a = this.payload) === null || _a === void 0 ? void 0 : _a.bundle);
31647
- this.useBatch = (_c = (_b = this.payload) === null || _b === void 0 ? void 0 : _b.bundle) === null || _c === void 0 ? void 0 : _c.every((item) => item.showOnOneKey !== true);
31834
+ this.confirmShowOnOneKey = (_c = (_b = this.payload) === null || _b === void 0 ? void 0 : _b.bundle) === null || _c === void 0 ? void 0 : _c.some((item) => !!item.showOnOneKey);
31835
+ this.useBatch = !this.confirmShowOnOneKey && this.hasBundle && this.payload.useBatch;
31648
31836
  const payload = this.hasBundle ? this.payload : { bundle: [this.payload] };
31649
31837
  validateParams(payload, [{ name: 'bundle', type: 'array' }]);
31650
31838
  this.params = [];
@@ -31680,7 +31868,7 @@ class EVMGetPublicKey extends BaseMethod {
31680
31868
  var _a;
31681
31869
  return __awaiter(this, void 0, void 0, function* () {
31682
31870
  const responses = [];
31683
- if (this.useBatch && this.hasBundle && supportBatchPublicKey((_a = this.device) === null || _a === void 0 ? void 0 : _a.features)) {
31871
+ if (this.useBatch && supportBatchPublicKey((_a = this.device) === null || _a === void 0 ? void 0 : _a.features)) {
31684
31872
  try {
31685
31873
  const res = yield batchGetPublickeys(this.device, this.params, 'secp256k1', 60, {
31686
31874
  includeNode: false,
@@ -38137,6 +38325,7 @@ var ApiMethods = /*#__PURE__*/Object.freeze({
38137
38325
  promptWebDeviceAccess: PromptWebDeviceAccess,
38138
38326
  cipherKeyValue: CipherKeyValue,
38139
38327
  allNetworkGetAddress: AllNetworkGetAddress,
38328
+ allNetworkGetAddressByLoop: AllNetworkGetAddressByLoop,
38140
38329
  btcGetAddress: BTCGetAddress,
38141
38330
  btcGetPublicKey: BTCGetPublicKey,
38142
38331
  btcSignMessage: BTCSignMessage,
@@ -38349,6 +38538,7 @@ const Log$1 = getLogger(exports.LoggerNames.Core);
38349
38538
  class RequestQueue {
38350
38539
  constructor() {
38351
38540
  this.requestQueue = new Map();
38541
+ this.pendingCallbackTasks = new Map();
38352
38542
  this.generateRequestId = (method) => {
38353
38543
  if (method && method.responseID != null) {
38354
38544
  return method.responseID;
@@ -38425,6 +38615,28 @@ class RequestQueue {
38425
38615
  releaseTask(requestId) {
38426
38616
  this.requestQueue.delete(requestId);
38427
38617
  }
38618
+ registerPendingCallbackTask(connectId, callbackPromise) {
38619
+ this.pendingCallbackTasks.set(connectId, callbackPromise);
38620
+ callbackPromise.promise.finally(() => {
38621
+ Log$1.debug(`Callback task completed for connectId: ${connectId}`);
38622
+ this.pendingCallbackTasks.delete(connectId);
38623
+ });
38624
+ }
38625
+ waitForPendingCallbackTasks(connectId) {
38626
+ return __awaiter(this, void 0, void 0, function* () {
38627
+ const pendingTask = this.pendingCallbackTasks.get(connectId);
38628
+ if (pendingTask) {
38629
+ Log$1.debug(`Waiting for pending callback task to complete for connectId: ${connectId}`);
38630
+ yield pendingTask.promise;
38631
+ }
38632
+ });
38633
+ }
38634
+ cancelCallbackTasks(connectId) {
38635
+ const pendingTask = this.pendingCallbackTasks.get(connectId);
38636
+ if (pendingTask) {
38637
+ pendingTask.resolve();
38638
+ }
38639
+ }
38428
38640
  }
38429
38641
 
38430
38642
  const getMutex = () => {
@@ -38547,6 +38759,9 @@ const onCallDevice = (context, message, method) => __awaiter(void 0, void 0, voi
38547
38759
  Log.debug('passphrase state change, clear device cache');
38548
38760
  DevicePool.clearDeviceCache(method.payload.connectId);
38549
38761
  }
38762
+ if (method.connectId) {
38763
+ yield context.waitForCallbackTasks(method.connectId);
38764
+ }
38550
38765
  yield waitForPendingPromise(getPrePendingCallPromise, setPrePendingCallPromise);
38551
38766
  const task = requestQueue.createTask(method);
38552
38767
  let device;
@@ -38570,6 +38785,7 @@ const onCallDevice = (context, message, method) => __awaiter(void 0, void 0, voi
38570
38785
  }
38571
38786
  Log.debug('Call API - setDevice: ', device.mainId);
38572
38787
  (_b = method.setDevice) === null || _b === void 0 ? void 0 : _b.call(method, device);
38788
+ method.context = context;
38573
38789
  device.on(DEVICE.PIN, onDevicePinHandler);
38574
38790
  device.on(DEVICE.BUTTON, onDeviceButtonHandler);
38575
38791
  device.on(DEVICE.PASSPHRASE, message.payload.useEmptyPassphrase ? onEmptyPassphraseHandler : onDevicePassphraseHandler);
@@ -38577,54 +38793,37 @@ const onCallDevice = (context, message, method) => __awaiter(void 0, void 0, voi
38577
38793
  device.on(DEVICE.FEATURES, onDeviceFeaturesHandler);
38578
38794
  device.on(DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE, onSelectDeviceInBootloaderForWebDeviceHandler);
38579
38795
  try {
38796
+ if (method.connectId) {
38797
+ yield context.waitForCallbackTasks(method.connectId);
38798
+ }
38580
38799
  yield waitForPendingPromise(getPrePendingCallPromise, setPrePendingCallPromise);
38581
38800
  const inner = () => __awaiter(void 0, void 0, void 0, function* () {
38582
38801
  var _c, _d, _e, _f, _g;
38583
38802
  const versionRange = getMethodVersionRange(device.features, type => method.getVersionRange()[type]);
38584
38803
  if (device.features) {
38585
38804
  yield DataManager.checkAndReloadData();
38586
- if (findDefectiveBatchDevice(device.features)) {
38587
- const defectiveInfo = getDefectiveDeviceInfo(device.features);
38588
- if (defectiveInfo) {
38589
- throw hdShared.createDefectiveFirmwareError(defectiveInfo.serialNo, defectiveInfo.seVersion || 'Unknown', defectiveInfo.deviceType, method.connectId, method.deviceId);
38590
- }
38591
- }
38592
38805
  const newVersionStatus = DataManager.getFirmwareStatus(device.features);
38593
38806
  const bleVersionStatus = DataManager.getBLEFirmwareStatus(device.features);
38594
- const currentFirmwareVersion = getDeviceFirmwareVersion(device.features).join('.');
38595
- const currentBleVersion = getDeviceBLEFirmwareVersion(device.features).join('.');
38596
38807
  if ((newVersionStatus === 'required' || bleVersionStatus === 'required') &&
38597
38808
  method.skipForceUpdateCheck === false) {
38598
- const currentVersions = {
38599
- firmware: currentFirmwareVersion,
38600
- ble: currentBleVersion,
38601
- };
38602
- if (newVersionStatus === 'required' && bleVersionStatus === 'required') {
38603
- throw hdShared.createNewFirmwareForceUpdateHardwareError(method.connectId, method.deviceId, 'both', currentVersions);
38604
- }
38605
- else if (newVersionStatus === 'required') {
38606
- throw hdShared.createNewFirmwareForceUpdateHardwareError(method.connectId, method.deviceId, 'firmware', currentVersions);
38607
- }
38608
- else {
38609
- throw hdShared.createNewFirmwareForceUpdateHardwareError(method.connectId, method.deviceId, 'ble', currentVersions);
38610
- }
38809
+ throw hdShared.createNewFirmwareForceUpdateHardwareError(method.connectId, method.deviceId);
38611
38810
  }
38612
38811
  if (versionRange) {
38613
- if (semver__default["default"].valid(versionRange.min) &&
38614
- semver__default["default"].lt(currentFirmwareVersion, versionRange.min)) {
38812
+ const currentVersion = getDeviceFirmwareVersion(device.features).join('.');
38813
+ if (semver__default["default"].valid(versionRange.min) && semver__default["default"].lt(currentVersion, versionRange.min)) {
38615
38814
  if (newVersionStatus === 'none' || newVersionStatus === 'valid') {
38616
- throw hdShared.createNewFirmwareUnReleaseHardwareError(currentFirmwareVersion, versionRange.min, method.name);
38815
+ throw hdShared.createNewFirmwareUnReleaseHardwareError(currentVersion, versionRange.min);
38617
38816
  }
38618
- return Promise.reject(hdShared.createNeedUpgradeFirmwareHardwareError(currentFirmwareVersion, versionRange.min, method.name));
38817
+ return Promise.reject(hdShared.createNeedUpgradeFirmwareHardwareError(currentVersion, versionRange.min));
38619
38818
  }
38620
38819
  if (versionRange.max &&
38621
38820
  semver__default["default"].valid(versionRange.max) &&
38622
- semver__default["default"].gte(currentFirmwareVersion, versionRange.max)) {
38623
- return Promise.reject(hdShared.createDeprecatedHardwareError(currentFirmwareVersion, versionRange.max, method.name));
38821
+ semver__default["default"].gte(currentVersion, versionRange.max)) {
38822
+ return Promise.reject(hdShared.createDeprecatedHardwareError(currentVersion, versionRange.max));
38624
38823
  }
38625
38824
  }
38626
38825
  else if (method.strictCheckDeviceSupport) {
38627
- throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.DeviceNotSupportMethod, `Method '${method.name}' is not supported by this device`);
38826
+ throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.DeviceNotSupportMethod);
38628
38827
  }
38629
38828
  }
38630
38829
  const unexpectedMode = device.hasUnexpectedMode(method.allowDeviceMode, method.requireDeviceMode);
@@ -38904,6 +39103,7 @@ const ensureConnected = (_context, method, pollingId, abortSignal) => __awaiter(
38904
39103
  hdShared.HardwareErrorCode.BleWriteCharacteristicError,
38905
39104
  hdShared.HardwareErrorCode.BleAlreadyConnected,
38906
39105
  hdShared.HardwareErrorCode.FirmwareUpdateLimitOneDevice,
39106
+ hdShared.HardwareErrorCode.SelectDevice,
38907
39107
  hdShared.HardwareErrorCode.DeviceDetectInBootloaderMode,
38908
39108
  hdShared.HardwareErrorCode.BleCharacteristicNotifyChangeFailure,
38909
39109
  hdShared.HardwareErrorCode.WebDeviceNotFoundOrNeedsPermission,
@@ -38934,6 +39134,7 @@ const cancel = (context, connectId) => {
38934
39134
  const { requestQueue, setPrePendingCallPromise } = context;
38935
39135
  if (connectId) {
38936
39136
  try {
39137
+ requestQueue.cancelCallbackTasks(connectId);
38937
39138
  const requestIds = requestQueue.getRequestTasksId();
38938
39139
  Log.debug(`Cancel Api connect requestQueues: length:${requestIds.length} requestIds:${requestIds.join(',')}`);
38939
39140
  const canceledDevices = [];
@@ -39114,6 +39315,11 @@ class Core extends events.exports {
39114
39315
  setPrePendingCallPromise: (promise) => {
39115
39316
  this.prePendingCallPromise = promise;
39116
39317
  },
39318
+ registerCallbackTask: (connectId, callbackPromise) => {
39319
+ this.requestQueue.registerPendingCallbackTask(connectId, callbackPromise);
39320
+ },
39321
+ waitForCallbackTasks: (connectId) => this.requestQueue.waitForPendingCallbackTasks(connectId),
39322
+ cancelCallbackTasks: (connectId) => this.requestQueue.cancelCallbackTasks(connectId),
39117
39323
  };
39118
39324
  }
39119
39325
  handleMessage(message) {
@@ -39155,6 +39361,11 @@ class Core extends events.exports {
39155
39361
  cancel(this.getCoreContext(), message.payload.connectId);
39156
39362
  break;
39157
39363
  }
39364
+ case IFRAME.CALLBACK: {
39365
+ Log.log('callback message: ', message);
39366
+ postMessage(message);
39367
+ break;
39368
+ }
39158
39369
  }
39159
39370
  return Promise.resolve(message);
39160
39371
  });
@@ -39253,6 +39464,7 @@ exports.UI_REQUEST = UI_REQUEST;
39253
39464
  exports.UI_RESPONSE = UI_RESPONSE;
39254
39465
  exports.checkNeedUpdateBootForClassicAndMini = checkNeedUpdateBootForClassicAndMini;
39255
39466
  exports.checkNeedUpdateBootForTouch = checkNeedUpdateBootForTouch;
39467
+ exports.cleanupCallback = cleanupCallback;
39256
39468
  exports.corsValidator = corsValidator;
39257
39469
  exports.createDeviceMessage = createDeviceMessage;
39258
39470
  exports.createErrorMessage = createErrorMessage;
@@ -39264,6 +39476,7 @@ exports.createUiMessage = createUiMessage;
39264
39476
  exports.createUiResponse = createUiResponse;
39265
39477
  exports["default"] = HardwareSdk;
39266
39478
  exports.enableLog = enableLog;
39479
+ exports.executeCallback = executeCallback;
39267
39480
  exports.getDeviceBLEFirmwareVersion = getDeviceBLEFirmwareVersion;
39268
39481
  exports.getDeviceBleName = getDeviceBleName;
39269
39482
  exports.getDeviceBoardloaderVersion = getDeviceBoardloaderVersion;