@onekeyfe/hd-core
Advanced tools
Comparing version 0.1.1 to 0.1.2
@@ -11,2 +11,3 @@ export declare const ERROR_CODES: { | ||
Device_InitializeFailed: string; | ||
Device_Interrupted: string; | ||
Not_Use_Onekey_Device: string; | ||
@@ -13,0 +14,0 @@ Runtime: string; |
@@ -7,2 +7,3 @@ /// <reference types="node" /> | ||
export declare const callAPI: (message: CoreMessage) => Promise<any>; | ||
export declare const cancel: (connectId?: string | undefined) => void; | ||
export default class Core extends EventEmitter { | ||
@@ -9,0 +10,0 @@ handleMessage(message: CoreMessage): Promise<any>; |
@@ -35,3 +35,2 @@ /// <reference types="node" /> | ||
internalState: string[]; | ||
loaded: boolean; | ||
needReloadDevice: boolean; | ||
@@ -51,4 +50,6 @@ keepSession: boolean; | ||
updateDescriptor(descriptor: DeviceDescriptor): void; | ||
updateFromCache(device: Device): void; | ||
run(fn?: () => Promise<void>, options?: RunOptions): Promise<void>; | ||
_runInner<T>(fn: (() => Promise<T>) | undefined, options: RunOptions): Promise<undefined>; | ||
interruption(): void; | ||
getMode(): "normal" | "bootloader" | "initialize" | "seedless"; | ||
@@ -55,0 +56,0 @@ getFirmwareVersion(): import("../types").IVersionArray | null; |
@@ -30,2 +30,9 @@ import { IFRAME } from './iframe'; | ||
} | ||
export interface IFrameCancelMessage { | ||
event: typeof IFRAME.CANCEL; | ||
type: typeof IFRAME.CANCEL; | ||
payload: { | ||
connectId?: string; | ||
}; | ||
} | ||
export declare const RESPONSE_EVENT = "RESPONSE_EVENT"; | ||
@@ -32,0 +39,0 @@ export interface MethodResponseMessage { |
import { Unsuccessful } from '../types/params'; | ||
import { IFrameCallMessage } from './call'; | ||
import { IFrameCallMessage, IFrameCancelMessage } from './call'; | ||
import { DeviceEventMessage } from './device'; | ||
@@ -11,3 +11,3 @@ import { IFrameEventMessage } from './iframe'; | ||
success?: true | false; | ||
} & (IFrameEventMessage | IFrameCallMessage | UiResponseMessage | UiEventMessage | DeviceEventMessage); | ||
} & (IFrameEventMessage | IFrameCallMessage | IFrameCancelMessage | UiResponseMessage | UiEventMessage | DeviceEventMessage); | ||
export declare type PostMessageEvent = MessageEvent<any>; | ||
@@ -14,0 +14,0 @@ export declare const parseMessage: (messageData: any) => CoreMessage; |
@@ -8,2 +8,3 @@ import type { ConnectSettings } from '../types'; | ||
readonly CALL: "iframe-call"; | ||
readonly CANCEL: "iframe-cancel"; | ||
}; | ||
@@ -10,0 +11,0 @@ export interface IFrameInit { |
@@ -39,2 +39,3 @@ import EventEmitter, { EventEmitter as EventEmitter$1 } from 'events'; | ||
Device_InitializeFailed: string; | ||
Device_Interrupted: string; | ||
Not_Use_Onekey_Device: string; | ||
@@ -915,3 +916,3 @@ Runtime: string; | ||
uiResponse: typeof uiResponse; | ||
cancel: (params?: string) => void; | ||
cancel: (connectId?: string) => void; | ||
searchDevices: typeof searchDevices; | ||
@@ -1050,2 +1051,3 @@ getFeatures: typeof getFeatures; | ||
readonly CALL: "iframe-call"; | ||
readonly CANCEL: "iframe-cancel"; | ||
}; | ||
@@ -1095,2 +1097,9 @@ interface IFrameInit { | ||
} | ||
interface IFrameCancelMessage { | ||
event: typeof IFRAME.CANCEL; | ||
type: typeof IFRAME.CANCEL; | ||
payload: { | ||
connectId?: string; | ||
}; | ||
} | ||
declare const RESPONSE_EVENT = "RESPONSE_EVENT"; | ||
@@ -1124,3 +1133,3 @@ interface MethodResponseMessage { | ||
success?: true | false; | ||
} & (IFrameEventMessage | IFrameCallMessage | UiResponseMessage | UiEventMessage | DeviceEventMessage); | ||
} & (IFrameEventMessage | IFrameCallMessage | IFrameCancelMessage | UiResponseMessage | UiEventMessage | DeviceEventMessage); | ||
declare type PostMessageEvent = MessageEvent<any>; | ||
@@ -1305,3 +1314,2 @@ declare const parseMessage: (messageData: any) => CoreMessage; | ||
internalState: string[]; | ||
loaded: boolean; | ||
needReloadDevice: boolean; | ||
@@ -1321,4 +1329,6 @@ keepSession: boolean; | ||
updateDescriptor(descriptor: OneKeyDeviceInfo): void; | ||
updateFromCache(device: Device): void; | ||
run(fn?: () => Promise<void>, options?: RunOptions): Promise<void>; | ||
_runInner<T>(fn: (() => Promise<T>) | undefined, options: RunOptions): Promise<undefined>; | ||
interruption(): void; | ||
getMode(): "normal" | "bootloader" | "initialize" | "seedless"; | ||
@@ -1396,2 +1406,2 @@ getFirmwareVersion(): IVersionArray | null; | ||
export { AccountAddress, AccountAddresses, AssetsMap, BTCAddress, BTCGetAddressParams, BTCGetPublicKeyParams, BTCPublicKey, BTCSignMessageParams, BTCSignTransactionParams, BTCVerifyMessageParams, CORE_EVENT, CallMethod, CallMethodAnyResponse, CallMethodKeys, CallMethodPayload, CallMethodResponse, CallMethodUnion, CipheredKeyValue, CipheredKeyValueParams, CommonParams, ConnectSettings, Core, CoreApi, CoreMessage, DEFAULT_PRIORITY, DEVICE, DEVICE_EVENT, DataManager, Deferred, Device$1 as Device, DeviceButtonRequest, DeviceButtonRequestPayload, DeviceChangePinParams, DeviceEvent, DeviceEventListenerFn, DeviceEventMessage, DeviceFirmwareRange, DeviceFlagsParams, DeviceMode, DeviceRecoveryParams, DeviceResetParams, DeviceSettingsParams, DeviceStatus, DeviceTypeMap, errors as ERRORS, EVMAccessList, EVMAddress, EVMGetAddressParams, EVMGetPublicKeyParams, EVMPublicKey, EVMSignMessageEIP712Params, EVMSignMessageParams, EVMSignTransactionParams, EVMSignTypedDataParams, EVMSignedTx, EVMTransaction, EVMTransactionEIP1559, EVMVerifyMessageParams, EthereumSignTypedDataMessage, EthereumSignTypedDataTypeProperty, EthereumSignTypedDataTypes, Features, FirmwareProgress, FirmwareRange, FirmwareRelease, IBLEFirmwareReleaseInfo, IDeviceBLEFirmwareStatus, IDeviceFirmwareStatus, IDeviceModel, IDeviceType, IFRAME, IFirmwareReleaseInfo, IFrameBridge, IFrameCallMessage, IFrameEvent, IFrameEventMessage, IFrameInit, ILocale, ITransportStatus, IVersionArray, KnownDevice, MajorVersion, MethodResponseMessage, NEMAddress, NEMAggregateModificationTransaction, NEMGetAddressParams, NEMImportanceTransaction, NEMMosaic, NEMMosaicCreationTransaction, NEMMultisigTransaction, NEMProvisionNamespaceTransaction, NEMSignTransactionParams, NEMSupplyChangeTransaction, NEMTransaction, NEMTransferTransaction, Params, PostMessageEvent, RESPONSE_EVENT, RefTransaction, ReleaseInfo, RemoteConfigResponse, Response, SearchDevice, SignedTransaction, SolanaAddress, SolanaGetAddressParams, SolanaSignTransactionParams, SolanaSignedTx, StarcoinAddress, StarcoinGetAddressParams, StarcoinGetPublicKeyParams, StarcoinPublicKey, StarcoinSignMessageParams, StarcoinSignTransactionParams, StarcoinVerifyMessageParams, StellarAddress, StellarAsset, StellarGetAddressParams, StellarOperation, StellarSignTransactionParams, StellarTransaction, StrictFeatures, Success, TransactionOptions, TransportReleaseStatus, UI_EVENT, UI_REQUEST, UI_RESPONSE, UiEvent, UiEventMessage, UiPromise, UiPromiseResponse, UiRequestButton, UiRequestDeviceAction, UiRequestWithoutPayload, UiResponseEvent, UiResponseMessage, UiResponsePin, UnavailableCapabilities, UnavailableCapability, Unsuccessful, VersionArray, corsValidator, create, createDeviceMessage, createErrorMessage, createIFrameMessage, createResponseMessage, createUiMessage, createUiResponse, HardwareSdk as default, enableLog, getDeviceLabel, getDeviceType, getDeviceTypeByBleName, getDeviceTypeByDeviceId, getDeviceUUID, getEnv, getHDPath, getScriptType, getTimeStamp, httpRequest, init as initCore, initLog, isValidVersionArray, isValidVersionString, normalizeVersionArray, parseConnectSettings, parseMessage, versionCompare, versionSplit }; | ||
export { AccountAddress, AccountAddresses, AssetsMap, BTCAddress, BTCGetAddressParams, BTCGetPublicKeyParams, BTCPublicKey, BTCSignMessageParams, BTCSignTransactionParams, BTCVerifyMessageParams, CORE_EVENT, CallMethod, CallMethodAnyResponse, CallMethodKeys, CallMethodPayload, CallMethodResponse, CallMethodUnion, CipheredKeyValue, CipheredKeyValueParams, CommonParams, ConnectSettings, Core, CoreApi, CoreMessage, DEFAULT_PRIORITY, DEVICE, DEVICE_EVENT, DataManager, Deferred, Device$1 as Device, DeviceButtonRequest, DeviceButtonRequestPayload, DeviceChangePinParams, DeviceEvent, DeviceEventListenerFn, DeviceEventMessage, DeviceFirmwareRange, DeviceFlagsParams, DeviceMode, DeviceRecoveryParams, DeviceResetParams, DeviceSettingsParams, DeviceStatus, DeviceTypeMap, errors as ERRORS, EVMAccessList, EVMAddress, EVMGetAddressParams, EVMGetPublicKeyParams, EVMPublicKey, EVMSignMessageEIP712Params, EVMSignMessageParams, EVMSignTransactionParams, EVMSignTypedDataParams, EVMSignedTx, EVMTransaction, EVMTransactionEIP1559, EVMVerifyMessageParams, EthereumSignTypedDataMessage, EthereumSignTypedDataTypeProperty, EthereumSignTypedDataTypes, Features, FirmwareProgress, FirmwareRange, FirmwareRelease, IBLEFirmwareReleaseInfo, IDeviceBLEFirmwareStatus, IDeviceFirmwareStatus, IDeviceModel, IDeviceType, IFRAME, IFirmwareReleaseInfo, IFrameBridge, IFrameCallMessage, IFrameCancelMessage, IFrameEvent, IFrameEventMessage, IFrameInit, ILocale, ITransportStatus, IVersionArray, KnownDevice, MajorVersion, MethodResponseMessage, NEMAddress, NEMAggregateModificationTransaction, NEMGetAddressParams, NEMImportanceTransaction, NEMMosaic, NEMMosaicCreationTransaction, NEMMultisigTransaction, NEMProvisionNamespaceTransaction, NEMSignTransactionParams, NEMSupplyChangeTransaction, NEMTransaction, NEMTransferTransaction, Params, PostMessageEvent, RESPONSE_EVENT, RefTransaction, ReleaseInfo, RemoteConfigResponse, Response, SearchDevice, SignedTransaction, SolanaAddress, SolanaGetAddressParams, SolanaSignTransactionParams, SolanaSignedTx, StarcoinAddress, StarcoinGetAddressParams, StarcoinGetPublicKeyParams, StarcoinPublicKey, StarcoinSignMessageParams, StarcoinSignTransactionParams, StarcoinVerifyMessageParams, StellarAddress, StellarAsset, StellarGetAddressParams, StellarOperation, StellarSignTransactionParams, StellarTransaction, StrictFeatures, Success, TransactionOptions, TransportReleaseStatus, UI_EVENT, UI_REQUEST, UI_RESPONSE, UiEvent, UiEventMessage, UiPromise, UiPromiseResponse, UiRequestButton, UiRequestDeviceAction, UiRequestWithoutPayload, UiResponseEvent, UiResponseMessage, UiResponsePin, UnavailableCapabilities, UnavailableCapability, Unsuccessful, VersionArray, corsValidator, create, createDeviceMessage, createErrorMessage, createIFrameMessage, createResponseMessage, createUiMessage, createUiResponse, HardwareSdk as default, enableLog, getDeviceLabel, getDeviceType, getDeviceTypeByBleName, getDeviceTypeByDeviceId, getDeviceUUID, getEnv, getHDPath, getScriptType, getTimeStamp, httpRequest, init as initCore, initLog, isValidVersionArray, isValidVersionString, normalizeVersionArray, parseConnectSettings, parseMessage, versionCompare, versionSplit }; |
@@ -52,3 +52,3 @@ import { on, off, removeAllListeners } from './event'; | ||
uiResponse: typeof uiResponse; | ||
cancel: (params?: string) => void; | ||
cancel: (connectId?: string) => void; | ||
searchDevices: typeof searchDevices; | ||
@@ -55,0 +55,0 @@ getFeatures: typeof getFeatures; |
{ | ||
"name": "@onekeyfe/hd-core", | ||
"version": "0.1.1", | ||
"version": "0.1.2", | ||
"description": "> TODO: description", | ||
@@ -28,3 +28,3 @@ "author": "OneKey", | ||
"dependencies": { | ||
"@onekeyfe/hd-transport": "^0.1.1", | ||
"@onekeyfe/hd-transport": "^0.1.2", | ||
"axios": "^0.27.2", | ||
@@ -39,3 +39,3 @@ "bignumber.js": "^9.0.2", | ||
}, | ||
"gitHead": "006c48af97498aad26719d9839979ecc2c55aea6" | ||
"gitHead": "5640e7870a99d8f3bade996fb5f57af055c749d8" | ||
} |
@@ -14,2 +14,3 @@ export const ERROR_CODES = { | ||
Device_InitializeFailed: '', | ||
Device_Interrupted: 'The device is performing other operations', | ||
Not_Use_Onekey_Device: 'Please use onekey device', | ||
@@ -16,0 +17,0 @@ |
@@ -44,2 +44,4 @@ import semver from 'semver'; | ||
const deviceCacheMap = new Map<string, Device>(); | ||
export const callAPI = async (message: CoreMessage) => { | ||
@@ -254,3 +256,9 @@ if (!message.id || !message.payload || message.type !== IFRAME.CALL) { | ||
const device = Device.fromDescriptor({ id: method.connectId } as OneKeyDeviceInfo); | ||
let device: Device; | ||
if (deviceCacheMap.has(method.connectId)) { | ||
device = deviceCacheMap.get(method.connectId) as Device; | ||
} else { | ||
device = Device.fromDescriptor({ id: method.connectId } as OneKeyDeviceInfo); | ||
deviceCacheMap.set(method.connectId, device); | ||
} | ||
device.deviceConnector = _connector; | ||
@@ -260,2 +268,17 @@ return device; | ||
export const cancel = (connectId?: string) => { | ||
const env = DataManager.getSettings('env'); | ||
if (connectId) { | ||
let device; | ||
if (env === 'react-native') { | ||
device = initDeviceForBle({ connectId } as BaseMethod); | ||
} else { | ||
device = initDevice({ connectId } as BaseMethod); | ||
} | ||
device?.interruption(); | ||
} | ||
cleanup(); | ||
closePopup(); | ||
}; | ||
const cleanup = () => { | ||
@@ -352,2 +375,6 @@ _uiPromises = []; | ||
} | ||
case IFRAME.CANCEL: { | ||
cancel(message.payload.connectId); | ||
break; | ||
} | ||
default: | ||
@@ -354,0 +381,0 @@ break; |
@@ -88,4 +88,2 @@ import EventEmitter from 'events'; | ||
loaded = false; | ||
needReloadDevice = false; | ||
@@ -285,6 +283,15 @@ | ||
updateFromCache(device: Device) { | ||
this.mainId = device.mainId; | ||
this.commands = device.commands; | ||
this.updateDescriptor(device.originalDescriptor); | ||
if (device.features) { | ||
this._updateFeatures(device.features); | ||
} | ||
} | ||
async run(fn?: () => Promise<void>, options?: RunOptions) { | ||
if (this.runPromise) { | ||
Log.error('[Device] run error:', 'Device is running'); | ||
throw ERRORS.TypedError('Device_CallInProgress'); | ||
this.interruption(); | ||
Log.debug('[Device] run error:', 'Device is running, but will cancel previous operate'); | ||
} | ||
@@ -324,7 +331,2 @@ | ||
// reload features | ||
if (this.loaded && this.features) { | ||
await this.getFeatures(); | ||
} | ||
if ( | ||
@@ -344,6 +346,11 @@ (!this.keepSession && typeof options.keepSession !== 'boolean') || | ||
this.runPromise = null; | ||
} | ||
if (!this.loaded) { | ||
this.loaded = true; | ||
interruption() { | ||
if (this.commands) { | ||
this.commands.dispose(); | ||
} | ||
if (this.runPromise) { | ||
this.runPromise.reject(ERRORS.TypedError('Device_Interrupted')); | ||
} | ||
} | ||
@@ -350,0 +357,0 @@ |
@@ -59,3 +59,7 @@ import type { Transport, Messages } from '@onekeyfe/hd-transport'; | ||
this.disposed = true; | ||
if (this._cancelableRequest) { | ||
this._cancelableRequest(); | ||
} | ||
this._cancelableRequest = undefined; | ||
this.transport.cancel?.(); | ||
} | ||
@@ -62,0 +66,0 @@ |
@@ -5,3 +5,8 @@ import EventEmitter from 'events'; | ||
import { getDeviceUUID } from '../utils/deviceFeaturesUtils'; | ||
import { initLog } from '../utils'; | ||
const cacheDeviceMap = new Map<string, Device>(); | ||
const Log = initLog('DeviceList'); | ||
export class DeviceList extends EventEmitter { | ||
@@ -24,3 +29,3 @@ devices: Record<string, Device> = {}; | ||
for await (const descriptor of descriptorList) { | ||
const device = Device.fromDescriptor(descriptor); | ||
let device = Device.fromDescriptor(descriptor); | ||
device.deviceConnector = this.connector; | ||
@@ -35,3 +40,10 @@ await device.connect(); | ||
const uuid = getDeviceUUID(device.features); | ||
if (cacheDeviceMap.has(uuid)) { | ||
const cache = cacheDeviceMap.get(uuid); | ||
cache?.updateFromCache(device); | ||
device = cache as Device; | ||
Log.debug('use cache device: ', uuid); | ||
} | ||
this.devices[uuid] = device; | ||
cacheDeviceMap.set(uuid, device); | ||
} | ||
@@ -38,0 +50,0 @@ } |
@@ -49,2 +49,8 @@ import { serializeError } from '../constants/errors'; | ||
export interface IFrameCancelMessage { | ||
event: typeof IFRAME.CANCEL; | ||
type: typeof IFRAME.CANCEL; | ||
payload: { connectId?: string }; | ||
} | ||
export const RESPONSE_EVENT = 'RESPONSE_EVENT'; | ||
@@ -51,0 +57,0 @@ |
import { Unsuccessful } from '../types/params'; | ||
import { IFrameCallMessage } from './call'; | ||
import { IFrameCallMessage, IFrameCancelMessage } from './call'; | ||
import { DeviceEventMessage } from './device'; | ||
@@ -16,2 +16,3 @@ import { IFrameEventMessage } from './iframe'; | ||
| IFrameCallMessage | ||
| IFrameCancelMessage | ||
| UiResponseMessage | ||
@@ -18,0 +19,0 @@ | UiEventMessage |
@@ -9,2 +9,3 @@ import type { ConnectSettings } from '../types'; | ||
CALL: 'iframe-call', | ||
CANCEL: 'iframe-cancel', | ||
} as const; | ||
@@ -11,0 +12,0 @@ |
@@ -57,3 +57,3 @@ import { on, off, removeAllListeners } from './event'; | ||
uiResponse: typeof uiResponse; | ||
cancel: (params?: string) => void; | ||
cancel: (connectId?: string) => void; | ||
@@ -60,0 +60,0 @@ /** |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1055982
32757