@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.
- package/dist/api/BaseMethod.d.ts +2 -0
- package/dist/api/BaseMethod.d.ts.map +1 -1
- package/dist/api/allnetwork/AllNetworkGetAddress.d.ts +4 -28
- package/dist/api/allnetwork/AllNetworkGetAddress.d.ts.map +1 -1
- package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts +47 -0
- package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -0
- package/dist/api/allnetwork/AllNetworkGetAddressByLoop.d.ts +8 -0
- package/dist/api/allnetwork/AllNetworkGetAddressByLoop.d.ts.map +1 -0
- package/dist/api/btc/BTCGetPublicKey.d.ts.map +1 -1
- package/dist/api/cosmos/CosmosGetPublicKey.d.ts +1 -1
- package/dist/api/cosmos/CosmosGetPublicKey.d.ts.map +1 -1
- package/dist/api/device/DeviceUnlock.d.ts +0 -2
- package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
- package/dist/api/evm/EVMGetPublicKey.d.ts +1 -0
- package/dist/api/evm/EVMGetPublicKey.d.ts.map +1 -1
- package/dist/api/index.d.ts +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/core/RequestQueue.d.ts +4 -0
- package/dist/core/RequestQueue.d.ts.map +1 -1
- package/dist/core/index.d.ts +3 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/device/Device.d.ts +4 -1
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/events/call.d.ts +9 -0
- package/dist/events/call.d.ts.map +1 -1
- package/dist/events/core.d.ts +2 -2
- package/dist/events/core.d.ts.map +1 -1
- package/dist/events/iframe.d.ts +11 -1
- package/dist/events/iframe.d.ts.map +1 -1
- package/dist/index.d.ts +41 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +408 -195
- package/dist/inject.d.ts +3 -0
- package/dist/inject.d.ts.map +1 -1
- package/dist/types/api/allNetworkGetAddress.d.ts +12 -3
- package/dist/types/api/allNetworkGetAddress.d.ts.map +1 -1
- package/dist/types/api/evmGetPublicKey.d.ts +1 -0
- package/dist/types/api/evmGetPublicKey.d.ts.map +1 -1
- package/dist/types/api/index.d.ts +2 -1
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/utils/findDefectiveBatchDevice.d.ts +0 -5
- package/dist/utils/findDefectiveBatchDevice.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/BaseMethod.ts +3 -0
- package/src/api/allnetwork/AllNetworkGetAddress.ts +19 -408
- package/src/api/allnetwork/AllNetworkGetAddressBase.ts +480 -0
- package/src/api/allnetwork/AllNetworkGetAddressByLoop.ts +161 -0
- package/src/api/btc/BTCGetPublicKey.ts +13 -0
- package/src/api/cosmos/CosmosGetPublicKey.ts +1 -1
- package/src/api/device/DeviceUnlock.ts +1 -48
- package/src/api/evm/EVMGetPublicKey.ts +9 -3
- package/src/api/index.ts +1 -0
- package/src/core/RequestQueue.ts +26 -0
- package/src/core/index.ts +42 -82
- package/src/device/Device.ts +66 -0
- package/src/events/call.ts +10 -0
- package/src/events/core.ts +7 -1
- package/src/events/iframe.ts +12 -1
- package/src/index.ts +2 -1
- package/src/inject.ts +47 -0
- package/src/types/api/allNetworkGetAddress.ts +17 -3
- package/src/types/api/evmGetPublicKey.ts +1 -0
- package/src/types/api/index.ts +2 -1
- 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
|
-
|
|
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
|
|
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
|
|
30142
|
-
|
|
30143
|
-
|
|
30144
|
-
|
|
30145
|
-
|
|
30146
|
-
|
|
30147
|
-
|
|
30148
|
-
|
|
30149
|
-
|
|
30150
|
-
|
|
30151
|
-
|
|
30152
|
-
|
|
30153
|
-
|
|
30154
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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 &&
|
|
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
|
-
|
|
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
|
-
|
|
38614
|
-
|
|
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(
|
|
38815
|
+
throw hdShared.createNewFirmwareUnReleaseHardwareError(currentVersion, versionRange.min);
|
|
38617
38816
|
}
|
|
38618
|
-
return Promise.reject(hdShared.createNeedUpgradeFirmwareHardwareError(
|
|
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(
|
|
38623
|
-
return Promise.reject(hdShared.createDeprecatedHardwareError(
|
|
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
|
|
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;
|