@onekeyfe/hd-core 0.1.3 → 0.1.6
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/FirmwareUpdate.d.ts.map +1 -1
- package/dist/api/btc/BTCSignTransaction.d.ts.map +1 -1
- package/dist/api/btc/helpers/btcParamsUtils.d.ts.map +1 -1
- package/dist/api/btc/helpers/signtx.d.ts.map +1 -1
- package/dist/api/btc/helpers/signtxLegacy.d.ts.map +1 -1
- package/dist/api/evm/EVMSignTransaction.d.ts.map +1 -1
- package/dist/api/evm/EVMSignTypedData.d.ts +1 -2
- package/dist/api/evm/EVMSignTypedData.d.ts.map +1 -1
- package/dist/api/firmware/getBinary.d.ts.map +1 -1
- package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
- package/dist/api/helpers/paramsValidator.d.ts.map +1 -1
- package/dist/api/helpers/pathUtils.d.ts.map +1 -1
- package/dist/api/helpers/typeNameUtils.d.ts.map +1 -1
- package/dist/api/nem/NEMSignTransaction.d.ts.map +1 -1
- package/dist/api/utils.d.ts.map +1 -1
- package/dist/constants/errors.d.ts +1 -26
- package/dist/constants/errors.d.ts.map +1 -1
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/data-manager/TransportManager.d.ts.map +1 -1
- package/dist/device/Device.d.ts +2 -2
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/device/DeviceCommands.d.ts.map +1 -1
- package/dist/device/DeviceConnector.d.ts +2 -2
- package/dist/device/DeviceConnector.d.ts.map +1 -1
- package/dist/events/core.d.ts +1 -1
- package/dist/events/core.d.ts.map +1 -1
- package/dist/events/ui-promise.d.ts +1 -1
- package/dist/events/ui-promise.d.ts.map +1 -1
- package/dist/index.d.ts +87 -134
- package/dist/index.js +125 -165
- package/dist/types/params.d.ts +1 -1
- package/dist/types/params.d.ts.map +1 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/versionUtils.d.ts +1 -1
- package/package.json +4 -3
- package/src/api/FirmwareUpdate.ts +10 -4
- package/src/api/btc/BTCSignTransaction.ts +3 -3
- package/src/api/btc/helpers/btcParamsUtils.ts +10 -4
- package/src/api/btc/helpers/signtx.ts +33 -15
- package/src/api/btc/helpers/signtxLegacy.ts +33 -12
- package/src/api/evm/EVMSignTransaction.ts +5 -2
- package/src/api/evm/EVMSignTypedData.ts +2 -2
- package/src/api/firmware/getBinary.ts +9 -4
- package/src/api/firmware/uploadFirmware.ts +4 -3
- package/src/api/helpers/bigNumberUtils.ts +4 -4
- package/src/api/helpers/paramsValidator.ts +3 -2
- package/src/api/helpers/pathUtils.ts +6 -3
- package/src/api/helpers/typeNameUtils.ts +7 -4
- package/src/api/nem/NEMSignTransaction.ts +5 -2
- package/src/api/utils.ts +6 -3
- package/src/constants/errors.ts +6 -46
- package/src/constants/index.ts +1 -1
- package/src/core/index.ts +17 -23
- package/src/data-manager/TransportManager.ts +5 -2
- package/src/device/Device.ts +11 -6
- package/src/device/DeviceCommands.ts +34 -12
- package/src/device/DeviceConnector.ts +4 -4
- package/src/events/call.ts +1 -1
- package/src/events/core.ts +11 -7
- package/src/events/ui-promise.ts +1 -1
- package/src/types/params.ts +1 -1
- package/src/utils/index.ts +0 -1
- package/dist/utils/deferred.d.ts +0 -9
- package/dist/utils/deferred.d.ts.map +0 -1
- package/src/utils/deferred.ts +0 -35
package/src/api/utils.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
1
2
|
import * as ApiMethods from './index';
|
|
2
|
-
import { TypedError } from '../constants/errors';
|
|
3
3
|
import { IFrameCallMessage } from '../events';
|
|
4
4
|
|
|
5
5
|
export function findMethod(message: IFrameCallMessage & { id?: number }) {
|
|
6
6
|
const { method } = message.payload;
|
|
7
7
|
if (typeof method !== 'string') {
|
|
8
|
-
throw TypedError(
|
|
8
|
+
throw ERRORS.TypedError(HardwareErrorCode.CallMethodInvalidParameter, 'Method is not set');
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
// @ts-expect-error
|
|
@@ -14,5 +14,8 @@ export function findMethod(message: IFrameCallMessage & { id?: number }) {
|
|
|
14
14
|
return new MethodConstructor(message);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
throw TypedError(
|
|
17
|
+
throw ERRORS.TypedError(
|
|
18
|
+
HardwareErrorCode.CallMethodInvalidParameter,
|
|
19
|
+
`Method ${method} is not set`
|
|
20
|
+
);
|
|
18
21
|
}
|
package/src/constants/errors.ts
CHANGED
|
@@ -1,49 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
// methods error
|
|
3
|
-
Method_InvalidParameter: '',
|
|
4
|
-
Call_API: '',
|
|
5
|
-
Call_NotResponse: 'No response data',
|
|
6
|
-
Method_FirmwareUpdate_DownloadFailed: '',
|
|
1
|
+
import { HardwareError, ERRORS } from '@onekeyfe/hd-shared';
|
|
7
2
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
Device_InitializeFailed: '',
|
|
14
|
-
Device_Interrupted: 'The device is performing other operations',
|
|
15
|
-
Not_Use_Onekey_Device: 'Please use onekey device',
|
|
16
|
-
|
|
17
|
-
// runtime error
|
|
18
|
-
Runtime: '',
|
|
19
|
-
|
|
20
|
-
// iframe error
|
|
21
|
-
Init_NotInitialized: 'Init_NotInitialized',
|
|
22
|
-
Init_IframeBlocked: 'Init_IframeBlocked',
|
|
23
|
-
Init_IframeTimeout: 'Init_IframeTimeout',
|
|
24
|
-
Init_AlreadyInitialized: 'Init_AlreadyInitialized',
|
|
25
|
-
Init_IframeLoadFail: 'Init_IframeLoadFail',
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export class OnekeyError extends Error {
|
|
29
|
-
code: string;
|
|
30
|
-
|
|
31
|
-
message: string;
|
|
32
|
-
|
|
33
|
-
constructor(code: string, message: string) {
|
|
34
|
-
super(message);
|
|
35
|
-
this.code = code;
|
|
36
|
-
this.message = message;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export const TypedError = (id: keyof typeof ERROR_CODES, message?: string) =>
|
|
41
|
-
new OnekeyError(id, message || ERROR_CODES[id]);
|
|
42
|
-
|
|
43
|
-
// serialize Error/TypeError object into payload error type (Error object/class is converted to string while sent via postMessage)
|
|
44
|
-
export const serializeError = (payload: any) => {
|
|
45
|
-
if (payload && payload.error instanceof Error) {
|
|
46
|
-
return { error: payload.error.message, code: payload.error.code };
|
|
3
|
+
export const safeThrowError = (error: any) => {
|
|
4
|
+
if (error instanceof HardwareError) {
|
|
5
|
+
throw error;
|
|
6
|
+
} else {
|
|
7
|
+
throw ERRORS.TypedError(error);
|
|
47
8
|
}
|
|
48
|
-
return payload;
|
|
49
9
|
};
|
package/src/constants/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { safeThrowError } from './errors';
|
|
2
2
|
export { Messages as PROTO } from '@onekeyfe/hd-transport';
|
package/src/core/index.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import semver from 'semver';
|
|
2
2
|
import EventEmitter from 'events';
|
|
3
3
|
import { OneKeyDeviceInfo } from '@onekeyfe/hd-transport';
|
|
4
|
-
import { ERRORS } from '
|
|
4
|
+
import { createDeferred, Deferred, ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
5
5
|
import { Device, DeviceEvents } from '../device/Device';
|
|
6
6
|
import { DeviceList } from '../device/DeviceList';
|
|
7
7
|
import { findMethod } from '../api/utils';
|
|
8
8
|
import { DataManager } from '../data-manager';
|
|
9
9
|
import { enableLog } from '../utils/logger';
|
|
10
|
-
import { initLog
|
|
10
|
+
import { initLog } from '../utils';
|
|
11
11
|
import {
|
|
12
12
|
CoreMessage,
|
|
13
13
|
createResponseMessage,
|
|
@@ -45,12 +45,7 @@ const deviceCacheMap = new Map<string, Device>();
|
|
|
45
45
|
|
|
46
46
|
export const callAPI = async (message: CoreMessage) => {
|
|
47
47
|
if (!message.id || !message.payload || message.type !== IFRAME.CALL) {
|
|
48
|
-
return Promise.reject(
|
|
49
|
-
ERRORS.TypedError(
|
|
50
|
-
'Method_InvalidParameter',
|
|
51
|
-
'onCall: message.id or message.payload is missing'
|
|
52
|
-
)
|
|
53
|
-
);
|
|
48
|
+
return Promise.reject(ERRORS.TypedError('on call: message.id or message.payload is missing'));
|
|
54
49
|
}
|
|
55
50
|
|
|
56
51
|
// find api method
|
|
@@ -70,10 +65,7 @@ export const callAPI = async (message: CoreMessage) => {
|
|
|
70
65
|
const response = await method.run();
|
|
71
66
|
return createResponseMessage(method.responseID, true, response);
|
|
72
67
|
} catch (error) {
|
|
73
|
-
return createResponseMessage(method.responseID, false, {
|
|
74
|
-
code: error.code,
|
|
75
|
-
error: error.message ?? error,
|
|
76
|
-
});
|
|
68
|
+
return createResponseMessage(method.responseID, false, { error });
|
|
77
69
|
}
|
|
78
70
|
}
|
|
79
71
|
|
|
@@ -123,7 +115,7 @@ export const callAPI = async (message: CoreMessage) => {
|
|
|
123
115
|
if (semver.valid(versionRange.min) && semver.lt(currentVersion, versionRange.min)) {
|
|
124
116
|
return Promise.reject(
|
|
125
117
|
ERRORS.TypedError(
|
|
126
|
-
|
|
118
|
+
HardwareErrorCode.DeviceFwException,
|
|
127
119
|
`Device firmware version is too low, please update to ${versionRange.min}`
|
|
128
120
|
)
|
|
129
121
|
);
|
|
@@ -135,7 +127,7 @@ export const callAPI = async (message: CoreMessage) => {
|
|
|
135
127
|
) {
|
|
136
128
|
return Promise.reject(
|
|
137
129
|
ERRORS.TypedError(
|
|
138
|
-
|
|
130
|
+
HardwareErrorCode.DeviceFwException,
|
|
139
131
|
`Device firmware version is too high, this method has been deprecated in ${versionRange.max}`
|
|
140
132
|
)
|
|
141
133
|
);
|
|
@@ -148,7 +140,9 @@ export const callAPI = async (message: CoreMessage) => {
|
|
|
148
140
|
method.requireDeviceMode
|
|
149
141
|
);
|
|
150
142
|
if (unexpectedMode) {
|
|
151
|
-
return Promise.reject(
|
|
143
|
+
return Promise.reject(
|
|
144
|
+
ERRORS.TypedError(HardwareErrorCode.DeviceUnexpectedMode, unexpectedMode)
|
|
145
|
+
);
|
|
152
146
|
}
|
|
153
147
|
|
|
154
148
|
// const deviceTypeException = method.checkDeviceType();
|
|
@@ -168,7 +162,7 @@ export const callAPI = async (message: CoreMessage) => {
|
|
|
168
162
|
_callPromise?.resolve(messageResponse);
|
|
169
163
|
} catch (error) {
|
|
170
164
|
Log.debug('Call API - Inner Method Run Error: ', error);
|
|
171
|
-
messageResponse = createResponseMessage(method.responseID, false, error
|
|
165
|
+
messageResponse = createResponseMessage(method.responseID, false, { error });
|
|
172
166
|
_callPromise?.resolve(messageResponse);
|
|
173
167
|
}
|
|
174
168
|
};
|
|
@@ -180,11 +174,11 @@ export const callAPI = async (message: CoreMessage) => {
|
|
|
180
174
|
return await _callPromise.promise;
|
|
181
175
|
} catch (e) {
|
|
182
176
|
console.log('Device Run Error: ', e);
|
|
183
|
-
return createResponseMessage(method.responseID, false, e
|
|
177
|
+
return createResponseMessage(method.responseID, false, { error: e });
|
|
184
178
|
}
|
|
185
179
|
} catch (error) {
|
|
186
|
-
messageResponse = createResponseMessage(method.responseID, false, error);
|
|
187
|
-
_callPromise?.reject(ERRORS.TypedError(
|
|
180
|
+
messageResponse = createResponseMessage(method.responseID, false, { error });
|
|
181
|
+
_callPromise?.reject(ERRORS.TypedError(HardwareErrorCode.CallMethodError, error.message));
|
|
188
182
|
Log.debug('Call API - Run Error: ', error);
|
|
189
183
|
} finally {
|
|
190
184
|
const response = messageResponse;
|
|
@@ -219,7 +213,7 @@ async function initDeviceList(method: BaseMethod) {
|
|
|
219
213
|
|
|
220
214
|
function initDevice(method: BaseMethod) {
|
|
221
215
|
if (!_deviceList) {
|
|
222
|
-
throw ERRORS.TypedError(
|
|
216
|
+
throw ERRORS.TypedError(HardwareErrorCode.DeviceListNotInitialized);
|
|
223
217
|
}
|
|
224
218
|
|
|
225
219
|
let device: Device | typeof undefined;
|
|
@@ -230,11 +224,11 @@ function initDevice(method: BaseMethod) {
|
|
|
230
224
|
} else if (allDevices.length === 1) {
|
|
231
225
|
[device] = allDevices;
|
|
232
226
|
} else if (allDevices.length > 1) {
|
|
233
|
-
throw ERRORS.TypedError(
|
|
227
|
+
throw ERRORS.TypedError(HardwareErrorCode.SelectDevice);
|
|
234
228
|
}
|
|
235
229
|
|
|
236
230
|
if (!device) {
|
|
237
|
-
throw ERRORS.TypedError(
|
|
231
|
+
throw ERRORS.TypedError(HardwareErrorCode.DeviceNotFound);
|
|
238
232
|
}
|
|
239
233
|
|
|
240
234
|
// inject properties
|
|
@@ -245,7 +239,7 @@ function initDevice(method: BaseMethod) {
|
|
|
245
239
|
|
|
246
240
|
function initDeviceForBle(method: BaseMethod) {
|
|
247
241
|
if (!method.connectId && !_deviceList) {
|
|
248
|
-
throw ERRORS.TypedError(
|
|
242
|
+
throw ERRORS.TypedError(HardwareErrorCode.DeviceListNotInitialized);
|
|
249
243
|
}
|
|
250
244
|
|
|
251
245
|
if (!method.connectId) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Transport } from '@onekeyfe/hd-transport';
|
|
2
|
-
import { ERRORS } from '
|
|
2
|
+
import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
3
3
|
import { initLog } from '../utils';
|
|
4
4
|
import DataManager from './DataManager';
|
|
5
5
|
|
|
@@ -57,7 +57,10 @@ export default class TransportManager {
|
|
|
57
57
|
await this.transport.configure(JSON.stringify(messages));
|
|
58
58
|
this.currentMessages = messages;
|
|
59
59
|
} catch (error) {
|
|
60
|
-
throw ERRORS.TypedError(
|
|
60
|
+
throw ERRORS.TypedError(
|
|
61
|
+
HardwareErrorCode.TransportInvalidProtobuf,
|
|
62
|
+
`Transport_InvalidProtobuf: ${error.message as unknown as string}`
|
|
63
|
+
);
|
|
61
64
|
}
|
|
62
65
|
}
|
|
63
66
|
|
package/src/device/Device.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import EventEmitter from 'events';
|
|
2
2
|
import { OneKeyDeviceInfo as DeviceDescriptor } from '@onekeyfe/hd-transport';
|
|
3
|
+
import { createDeferred, Deferred, HardwareErrorCode, ERRORS } from '@onekeyfe/hd-shared';
|
|
3
4
|
|
|
4
5
|
import DeviceConnector from './DeviceConnector';
|
|
5
6
|
import { DeviceCommands } from './DeviceCommands';
|
|
6
7
|
|
|
7
|
-
import { initLog
|
|
8
|
+
import { initLog } from '../utils';
|
|
8
9
|
import {
|
|
9
10
|
getDeviceFirmwareVersion,
|
|
10
11
|
getDeviceLabel,
|
|
@@ -15,7 +16,7 @@ import {
|
|
|
15
16
|
import type { Features, Device as DeviceTyped, UnavailableCapabilities } from '../types';
|
|
16
17
|
import { DEVICE, DeviceButtonRequestPayload } from '../events';
|
|
17
18
|
import { UI_REQUEST } from '../constants/ui-request';
|
|
18
|
-
import {
|
|
19
|
+
import { PROTO } from '../constants';
|
|
19
20
|
import { DataManager } from '../data-manager';
|
|
20
21
|
|
|
21
22
|
type RunOptions = {
|
|
@@ -266,7 +267,7 @@ export class Device extends EventEmitter {
|
|
|
266
267
|
* 后续看是否有需要依据 listen 返回结果更新
|
|
267
268
|
* @param descriptor
|
|
268
269
|
*/
|
|
269
|
-
updateDescriptor(descriptor: DeviceDescriptor) {
|
|
270
|
+
updateDescriptor(descriptor: DeviceDescriptor, forceUpdate = false) {
|
|
270
271
|
const env = DataManager.getSettings('env');
|
|
271
272
|
if (env === 'react-native') {
|
|
272
273
|
return;
|
|
@@ -277,12 +278,16 @@ export class Device extends EventEmitter {
|
|
|
277
278
|
if (originalSession !== upcomingSession) {
|
|
278
279
|
this.originalDescriptor.session = upcomingSession;
|
|
279
280
|
}
|
|
281
|
+
|
|
282
|
+
if (forceUpdate) {
|
|
283
|
+
this.originalDescriptor = descriptor;
|
|
284
|
+
}
|
|
280
285
|
}
|
|
281
286
|
|
|
282
287
|
updateFromCache(device: Device) {
|
|
283
288
|
this.mainId = device.mainId;
|
|
284
289
|
this.commands = device.commands;
|
|
285
|
-
this.updateDescriptor(device.originalDescriptor);
|
|
290
|
+
this.updateDescriptor(device.originalDescriptor, true);
|
|
286
291
|
if (device.features) {
|
|
287
292
|
this._updateFeatures(device.features);
|
|
288
293
|
}
|
|
@@ -311,7 +316,7 @@ export class Device extends EventEmitter {
|
|
|
311
316
|
this.runPromise = null;
|
|
312
317
|
return Promise.reject(
|
|
313
318
|
ERRORS.TypedError(
|
|
314
|
-
|
|
319
|
+
HardwareErrorCode.DeviceInitializeFailed,
|
|
315
320
|
`Initialize failed: ${error.message as string}, code: ${error.code as string}`
|
|
316
321
|
)
|
|
317
322
|
);
|
|
@@ -347,7 +352,7 @@ export class Device extends EventEmitter {
|
|
|
347
352
|
this.commands.dispose();
|
|
348
353
|
}
|
|
349
354
|
if (this.runPromise) {
|
|
350
|
-
this.runPromise.reject(ERRORS.TypedError(
|
|
355
|
+
this.runPromise.reject(ERRORS.TypedError(HardwareErrorCode.DeviceInterruptedFromOutside));
|
|
351
356
|
}
|
|
352
357
|
}
|
|
353
358
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Transport, Messages } from '@onekeyfe/hd-transport';
|
|
2
|
+
import { ERRORS, HardwareError, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
2
3
|
import TransportManager from '../data-manager/TransportManager';
|
|
3
|
-
import { ERRORS } from '../constants';
|
|
4
4
|
import { initLog } from '../utils';
|
|
5
5
|
import type { Device } from './Device';
|
|
6
6
|
import { DEVICE } from '../events';
|
|
@@ -26,7 +26,7 @@ const assertType = (res: DefaultMessageResponse, resType: string | string[]) =>
|
|
|
26
26
|
const splitResTypes = Array.isArray(resType) ? resType : resType.split('|');
|
|
27
27
|
if (!splitResTypes.includes(res.type)) {
|
|
28
28
|
throw ERRORS.TypedError(
|
|
29
|
-
|
|
29
|
+
HardwareErrorCode.RuntimeError,
|
|
30
30
|
`assertType: Response of unexpected type: ${res.type}. Should be ${resType as string}`
|
|
31
31
|
);
|
|
32
32
|
}
|
|
@@ -100,7 +100,10 @@ export class DeviceCommands {
|
|
|
100
100
|
msg?: DefaultMessageResponse['message']
|
|
101
101
|
) {
|
|
102
102
|
if (this.disposed) {
|
|
103
|
-
throw ERRORS.TypedError(
|
|
103
|
+
throw ERRORS.TypedError(
|
|
104
|
+
HardwareErrorCode.RuntimeError,
|
|
105
|
+
'typedCall: DeviceCommands already disposed'
|
|
106
|
+
);
|
|
104
107
|
}
|
|
105
108
|
|
|
106
109
|
const response = await this._commonCall(type, msg);
|
|
@@ -126,20 +129,34 @@ export class DeviceCommands {
|
|
|
126
129
|
console.log('_filterCommonTypes: ', res);
|
|
127
130
|
if (res.type === 'Failure') {
|
|
128
131
|
const { code } = res.message;
|
|
129
|
-
|
|
132
|
+
const { message } = res.message;
|
|
133
|
+
let error: HardwareError | null = null;
|
|
130
134
|
// Model One does not send any message in firmware update
|
|
131
135
|
if (code === 'Failure_FirmwareError' && !message) {
|
|
132
|
-
|
|
136
|
+
error = ERRORS.TypedError(HardwareErrorCode.FirmwareError);
|
|
133
137
|
}
|
|
134
138
|
// Failure_ActionCancelled message could be also missing
|
|
135
|
-
if (code === 'Failure_ActionCancelled'
|
|
136
|
-
|
|
139
|
+
if (code === 'Failure_ActionCancelled') {
|
|
140
|
+
error = ERRORS.TypedError(HardwareErrorCode.ActionCancelled);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (code === 'Failure_PinInvalid') {
|
|
144
|
+
error = ERRORS.TypedError(HardwareErrorCode.PinInvalid, message);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (code === 'Failure_PinCancelled') {
|
|
148
|
+
error = ERRORS.TypedError(HardwareErrorCode.PinCancelled);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (error) {
|
|
152
|
+
return Promise.reject(error);
|
|
137
153
|
}
|
|
138
|
-
|
|
154
|
+
|
|
139
155
|
return Promise.reject(
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
156
|
+
ERRORS.TypedError(
|
|
157
|
+
HardwareErrorCode.RuntimeError,
|
|
158
|
+
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
159
|
+
`${(code as any) || 'Failure_UnknownCode'},${message || 'Failure_UnknownMessage'}`
|
|
143
160
|
)
|
|
144
161
|
);
|
|
145
162
|
}
|
|
@@ -204,7 +221,12 @@ export class DeviceCommands {
|
|
|
204
221
|
});
|
|
205
222
|
} else {
|
|
206
223
|
console.warn('[DeviceCommands] [call] PIN callback not configured, cancelling request');
|
|
207
|
-
reject(
|
|
224
|
+
reject(
|
|
225
|
+
ERRORS.TypedError(
|
|
226
|
+
HardwareErrorCode.RuntimeError,
|
|
227
|
+
'_promptPin: PIN callback not configured'
|
|
228
|
+
)
|
|
229
|
+
);
|
|
208
230
|
}
|
|
209
231
|
});
|
|
210
232
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Transport, OneKeyDeviceInfo as DeviceDescriptor } from '@onekeyfe/hd-transport';
|
|
2
|
+
import { safeThrowError } from '../constants';
|
|
2
3
|
import { DataManager } from '../data-manager';
|
|
3
4
|
import TransportManager from '../data-manager/TransportManager';
|
|
4
5
|
import { initLog } from '../utils';
|
|
@@ -98,8 +99,7 @@ export default class DeviceConnector {
|
|
|
98
99
|
Log.debug('diff result: ', diff);
|
|
99
100
|
return diff;
|
|
100
101
|
} catch (error) {
|
|
101
|
-
|
|
102
|
-
// empty
|
|
102
|
+
safeThrowError(error);
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
|
|
@@ -152,7 +152,7 @@ export default class DeviceConnector {
|
|
|
152
152
|
}
|
|
153
153
|
return res;
|
|
154
154
|
} catch (error) {
|
|
155
|
-
|
|
155
|
+
safeThrowError(error);
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
158
|
|
|
@@ -161,7 +161,7 @@ export default class DeviceConnector {
|
|
|
161
161
|
const res = await this.transport.release(session, onclose);
|
|
162
162
|
return res;
|
|
163
163
|
} catch (error) {
|
|
164
|
-
|
|
164
|
+
safeThrowError(error);
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
167
|
|
package/src/events/call.ts
CHANGED
package/src/events/core.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { HardwareError } from '@onekeyfe/hd-shared';
|
|
1
2
|
import { Unsuccessful } from '../types/params';
|
|
2
3
|
import { IFrameCallMessage, IFrameCancelMessage } from './call';
|
|
3
4
|
import { DeviceEventMessage } from './device';
|
|
@@ -40,10 +41,13 @@ export const parseMessage = (messageData: any): CoreMessage => {
|
|
|
40
41
|
return message;
|
|
41
42
|
};
|
|
42
43
|
|
|
43
|
-
export const createErrorMessage = (error: Error & { code?: string }): Unsuccessful =>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
error: error.message,
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
export const createErrorMessage = (error: Error & { code?: string | number }): Unsuccessful => {
|
|
45
|
+
let payload = { error: error.message, code: error.code };
|
|
46
|
+
if (error instanceof HardwareError) {
|
|
47
|
+
payload = { error: error.message, code: error.errorCode };
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
success: false,
|
|
51
|
+
payload,
|
|
52
|
+
};
|
|
53
|
+
};
|
package/src/events/ui-promise.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import type { Deferred } from '@onekeyfe/hd-shared';
|
|
1
2
|
import type { DEVICE } from './device';
|
|
2
3
|
import type { Device } from '../device/Device';
|
|
3
4
|
import type { UiResponseEvent } from './ui-response';
|
|
4
|
-
import type { Deferred } from '../utils/deferred';
|
|
5
5
|
|
|
6
6
|
export type UiPromiseResponse =
|
|
7
7
|
| UiResponseEvent
|
package/src/types/params.ts
CHANGED
package/src/utils/index.ts
CHANGED
package/dist/utils/deferred.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export declare type Deferred<T, I = any, D = any> = {
|
|
2
|
-
id?: I;
|
|
3
|
-
data?: D;
|
|
4
|
-
promise: Promise<T>;
|
|
5
|
-
resolve: (t: T) => void;
|
|
6
|
-
reject: (e: Error) => void;
|
|
7
|
-
};
|
|
8
|
-
export declare function create<T, I = any, D = any>(arg?: I, data?: D): Deferred<T, I, D>;
|
|
9
|
-
//# sourceMappingURL=deferred.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"deferred.d.ts","sourceRoot":"","sources":["../../src/utils/deferred.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI;IAC1C,EAAE,CAAC,EAAE,CAAC,CAAC;IACP,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;IACxB,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;CAC5B,CAAC;AAEF,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CA0BhF"}
|
package/src/utils/deferred.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
export type Deferred<T, I = any, D = any> = {
|
|
2
|
-
id?: I;
|
|
3
|
-
data?: D;
|
|
4
|
-
promise: Promise<T>;
|
|
5
|
-
resolve: (t: T) => void;
|
|
6
|
-
reject: (e: Error) => void;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
export function create<T, I = any, D = any>(arg?: I, data?: D): Deferred<T, I, D> {
|
|
10
|
-
let localResolve: (t: T) => void = (_t: T) => {};
|
|
11
|
-
let localReject: (e?: Error) => void = (_e?: Error) => {};
|
|
12
|
-
let id: I | undefined;
|
|
13
|
-
|
|
14
|
-
// eslint-disable-next-line no-async-promise-executor
|
|
15
|
-
const promise: Promise<T> = new Promise(async (resolve, reject) => {
|
|
16
|
-
localResolve = resolve;
|
|
17
|
-
localReject = reject;
|
|
18
|
-
if (typeof arg === 'function') {
|
|
19
|
-
try {
|
|
20
|
-
await arg();
|
|
21
|
-
} catch (error) {
|
|
22
|
-
reject(error);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
if (typeof arg === 'string') id = arg;
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
return {
|
|
29
|
-
id,
|
|
30
|
-
data,
|
|
31
|
-
resolve: localResolve,
|
|
32
|
-
reject: localReject,
|
|
33
|
-
promise,
|
|
34
|
-
};
|
|
35
|
-
}
|