@onekeyfe/hd-core 1.2.0-alpha.67 → 1.2.0-alpha.69
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/__tests__/AllNetworkGetAddressBase.tracing.test.ts +313 -0
- package/__tests__/DeviceCommands.test.ts +59 -13
- package/__tests__/DeviceEventRegistration.test.ts +6 -0
- package/__tests__/check-all-firmware-release-protocol-v2.test.ts +226 -3
- package/__tests__/connectSettings.test.ts +5 -47
- package/__tests__/core-initialization.test.ts +23 -0
- package/__tests__/device-connector-protocol.test.ts +81 -0
- package/__tests__/device-lifecycle-events.test.ts +105 -3
- package/__tests__/device-pool-state.test.ts +22 -0
- package/__tests__/device-settings.test.ts +39 -18
- package/__tests__/device-state-contract.test.ts +1 -0
- package/__tests__/device-state-mapper.test.ts +13 -1
- package/__tests__/device-utils.test.ts +48 -1
- package/__tests__/deviceSettings.test.ts +11 -1
- package/__tests__/deviceUploadNft.test.ts +316 -0
- package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +31 -59
- package/__tests__/get-device-state.test.ts +132 -12
- package/__tests__/homescreen.test.ts +41 -1
- package/__tests__/kaspa-use-tweak-pro2.test.ts +2 -2
- package/__tests__/kaspaSignTransaction.test.ts +3 -26
- package/__tests__/logBlockEvent.test.ts +1 -1
- package/__tests__/method-protocol-support.test.ts +19 -0
- package/__tests__/open-wallet-session.test.ts +568 -37
- package/__tests__/pro2Nft.test.ts +108 -0
- package/__tests__/protocol-binding.test.ts +89 -0
- package/__tests__/protocol-v2-firmware-targets.test.ts +33 -1
- package/__tests__/protocol-v2-resources.test.ts +343 -0
- package/__tests__/protocol-v2-ui-lifecycle.test.ts +91 -0
- package/__tests__/protocol-v2-unlock-policy.test.ts +300 -37
- package/__tests__/protocol-v2.test.ts +1586 -1213
- package/__tests__/protocolV2FileWrite.test.ts +193 -0
- package/__tests__/protocolV2UiInteraction.test.ts +63 -0
- package/__tests__/public-pro2-api-boundary.test.ts +1 -0
- package/__tests__/search-devices.test.ts +12 -3
- package/__tests__/tron-sign-message-init.test.ts +2 -2
- package/__tests__/uiProgressThrottle.test.ts +74 -0
- package/__tests__/uiPromiseRegistry.test.ts +115 -0
- package/dist/api/BaseMethod.d.ts +3 -1
- package/dist/api/BaseMethod.d.ts.map +1 -1
- package/dist/api/CheckAllFirmwareRelease.d.ts +3 -1
- package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
- package/dist/api/DetectDeviceConnectProtocol.d.ts +7 -0
- package/dist/api/DetectDeviceConnectProtocol.d.ts.map +1 -0
- package/dist/api/FirmwareUpdate.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV2.d.ts +0 -10
- package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV3.d.ts +3 -7
- package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV4.d.ts +15 -27
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/api/GetPassphraseState.d.ts.map +1 -1
- package/dist/api/OpenWalletSession.d.ts.map +1 -1
- package/dist/api/SearchDevices.d.ts.map +1 -1
- package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
- package/dist/api/device/DeviceSettings.d.ts.map +1 -1
- package/dist/api/device/DeviceUnlock.d.ts +2 -2
- package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
- package/dist/api/device/DeviceUpdateBootloader.d.ts +1 -5
- package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +4 -11
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
- package/dist/api/firmware/getBinary.d.ts +0 -7
- package/dist/api/firmware/getBinary.d.ts.map +1 -1
- package/dist/api/firmware/updateBootloader.d.ts +0 -2
- package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
- package/dist/api/firmware/uploadFirmware.d.ts +1 -9
- package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
- package/dist/api/helpers/protocolV2FileWrite.d.ts +9 -0
- package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -1
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/kaspa/KaspaGetAddress.d.ts +1 -1
- package/dist/api/kaspa/KaspaSignTransaction.d.ts +1 -1
- package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -1
- package/dist/api/polkadot/PolkadotGetAddress.d.ts +1 -1
- package/dist/api/polkadot/networks.d.ts +1 -1
- package/dist/api/protocol-v2/DeviceUploadNft.d.ts +31 -0
- package/dist/api/protocol-v2/DeviceUploadNft.d.ts.map +1 -0
- package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -1
- package/dist/api/protocol-v2/helpers.d.ts.map +1 -1
- package/dist/api/solana/SolSignMessage.d.ts +1 -1
- package/dist/api/solana/SolSignOffchainMessage.d.ts +1 -1
- package/dist/api/solana/SolSignTransaction.d.ts +2 -2
- package/dist/api/stellar/StellarSignTransaction.d.ts +1 -1
- package/dist/api/sui/SuiGetAddress.d.ts +1 -1
- package/dist/api/sui/SuiGetPublicKey.d.ts +1 -1
- package/dist/api/sui/SuiSignMessage.d.ts +1 -1
- package/dist/api/sui/SuiSignTransaction.d.ts +1 -1
- package/dist/api/ton/TonGetAddress.d.ts +1 -1
- package/dist/api/ton/TonSignMessage.d.ts +1 -1
- package/dist/api/ton/TonSignProof.d.ts +1 -1
- package/dist/api/tron/TronSignMessage.d.ts +2 -2
- package/dist/api/tron/TronSignTransaction.d.ts +1 -1
- package/dist/core/deviceEventRegistration.d.ts +2 -0
- package/dist/core/deviceEventRegistration.d.ts.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/uiPromiseRegistry.d.ts +6 -0
- package/dist/core/uiPromiseRegistry.d.ts.map +1 -0
- package/dist/data-manager/DataManager.d.ts +9 -4
- package/dist/data-manager/DataManager.d.ts.map +1 -1
- package/dist/data-manager/TransportManager.d.ts.map +1 -1
- package/dist/data-manager/connectSettings.d.ts.map +1 -1
- package/dist/device/Device.d.ts +29 -6
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/device/DeviceCommands.d.ts +4 -4
- package/dist/device/DeviceCommands.d.ts.map +1 -1
- package/dist/device/DeviceConnector.d.ts +2 -1
- package/dist/device/DeviceConnector.d.ts.map +1 -1
- package/dist/device/DevicePool.d.ts.map +1 -1
- package/dist/deviceProfile/protocolV2DeviceIdentity.d.ts.map +1 -1
- package/dist/events/device.d.ts +4 -0
- package/dist/events/device.d.ts.map +1 -1
- package/dist/events/logBlockEvent.d.ts.map +1 -1
- package/dist/events/ui-promise.d.ts +4 -2
- package/dist/events/ui-promise.d.ts.map +1 -1
- package/dist/events/ui-request.d.ts +31 -2
- package/dist/events/ui-request.d.ts.map +1 -1
- package/dist/events/ui-response.d.ts +10 -2
- package/dist/events/ui-response.d.ts.map +1 -1
- package/dist/index.d.ts +243 -247
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3135 -3785
- package/dist/inject.d.ts +6 -1
- package/dist/inject.d.ts.map +1 -1
- package/dist/lowLevelInject.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/features.d.ts +0 -4
- package/dist/protocols/protocol-v2/features.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/firmware.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/resources.d.ts +30 -0
- package/dist/protocols/protocol-v2/resources.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/uiInteraction.d.ts +7 -4
- package/dist/protocols/protocol-v2/uiInteraction.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/unlockPolicy.d.ts +1 -3
- package/dist/protocols/protocol-v2/unlockPolicy.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts +22 -0
- package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/walletSession.d.ts +6 -1
- package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -1
- package/dist/topLevelInject.d.ts.map +1 -1
- package/dist/types/api/checkAllFirmwareRelease.d.ts +3 -5
- package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/detectDeviceConnectProtocol.d.ts +4 -0
- package/dist/types/api/detectDeviceConnectProtocol.d.ts.map +1 -0
- package/dist/types/api/deviceUnlock.d.ts +5 -1
- package/dist/types/api/deviceUnlock.d.ts.map +1 -1
- package/dist/types/api/deviceUpdateBootloader.d.ts +0 -6
- package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
- package/dist/types/api/export.d.ts +2 -4
- package/dist/types/api/export.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdate.d.ts +4 -70
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/dist/types/api/index.d.ts +7 -10
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/types/api/protocolV2.d.ts +3 -0
- package/dist/types/api/protocolV2.d.ts.map +1 -1
- package/dist/types/device.d.ts +2 -2
- package/dist/types/device.d.ts.map +1 -1
- package/dist/types/params.d.ts +1 -0
- package/dist/types/params.d.ts.map +1 -1
- package/dist/types/settings.d.ts +38 -21
- package/dist/types/settings.d.ts.map +1 -1
- package/dist/utils/deviceFeaturesCompat.d.ts +0 -1
- package/dist/utils/deviceFeaturesCompat.d.ts.map +1 -1
- package/dist/utils/deviceFeaturesUtils.d.ts +4 -0
- package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
- package/dist/utils/deviceInfoUtils.d.ts.map +1 -1
- package/dist/utils/deviceSettings.d.ts.map +1 -1
- package/dist/utils/homescreen.d.ts +4 -0
- package/dist/utils/homescreen.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/patch.d.ts +1 -1
- package/dist/utils/patch.d.ts.map +1 -1
- package/dist/utils/pro2Nft.d.ts +31 -0
- package/dist/utils/pro2Nft.d.ts.map +1 -0
- package/dist/utils/pro2Wallpaper.d.ts +10 -0
- package/dist/utils/pro2Wallpaper.d.ts.map +1 -1
- package/dist/utils/uiProgressThrottle.d.ts +3 -0
- package/dist/utils/uiProgressThrottle.d.ts.map +1 -0
- package/package.json +4 -4
- package/src/api/BaseMethod.ts +8 -10
- package/src/api/CheckAllFirmwareRelease.ts +78 -64
- package/src/api/DetectDeviceConnectProtocol.ts +18 -0
- package/src/api/FirmwareUpdate.ts +7 -15
- package/src/api/FirmwareUpdateV2.ts +126 -298
- package/src/api/FirmwareUpdateV3.ts +63 -265
- package/src/api/FirmwareUpdateV4.ts +645 -1018
- package/src/api/GetPassphraseState.ts +7 -1
- package/src/api/OpenWalletSession.ts +71 -17
- package/src/api/SearchDevices.ts +3 -1
- package/src/api/allnetwork/AllNetworkGetAddress.ts +21 -21
- package/src/api/allnetwork/AllNetworkGetAddressBase.ts +36 -11
- package/src/api/device/DeviceSettings.ts +5 -4
- package/src/api/device/DeviceUnlock.ts +8 -3
- package/src/api/device/DeviceUpdateBootloader.ts +6 -125
- package/src/api/firmware/FirmwareUpdateBaseMethod.ts +27 -83
- package/src/api/firmware/updateBootloader.ts +4 -19
- package/src/api/firmware/uploadFirmware.ts +39 -144
- package/src/api/helpers/protocolV2FileWrite.ts +252 -63
- package/src/api/index.ts +2 -0
- package/src/api/kaspa/KaspaGetAddress.ts +1 -1
- package/src/api/kaspa/KaspaSignTransaction.ts +2 -13
- package/src/api/polkadot/networks.ts +3 -3
- package/src/api/protocol-v2/DeviceUploadNft.ts +197 -0
- package/src/api/protocol-v2/ProtocolInfoRequest.ts +3 -1
- package/src/api/protocol-v2/helpers.ts +1 -1
- package/src/api/solana/SolSignMessage.ts +1 -1
- package/src/api/solana/SolSignOffchainMessage.ts +1 -1
- package/src/api/solana/SolSignTransaction.ts +2 -2
- package/src/api/sui/SuiGetAddress.ts +1 -1
- package/src/api/sui/SuiGetPublicKey.ts +1 -1
- package/src/api/sui/SuiSignMessage.ts +1 -1
- package/src/api/sui/SuiSignTransaction.ts +1 -1
- package/src/api/ton/TonGetAddress.ts +1 -1
- package/src/api/ton/TonSignMessage.ts +1 -1
- package/src/api/ton/TonSignProof.ts +1 -1
- package/src/api/tron/TronSignMessage.ts +2 -2
- package/src/api/tron/TronSignTransaction.ts +1 -1
- package/src/core/deviceEventRegistration.ts +4 -0
- package/src/core/index.ts +213 -111
- package/src/core/uiPromiseRegistry.ts +63 -0
- package/src/data/messages/messages-protocol-v2.json +25 -0
- package/src/data-manager/DataManager.ts +113 -41
- package/src/data-manager/TransportManager.ts +6 -0
- package/src/data-manager/connectSettings.ts +0 -11
- package/src/device/Device.ts +274 -49
- package/src/device/DeviceCommands.ts +31 -4
- package/src/device/DeviceConnector.ts +33 -13
- package/src/device/DevicePool.ts +21 -7
- package/src/deviceProfile/buildDeviceFeatures.ts +2 -2
- package/src/deviceProfile/protocolV2DeviceIdentity.ts +3 -0
- package/src/events/device.ts +4 -0
- package/src/events/logBlockEvent.ts +1 -0
- package/src/events/ui-promise.ts +4 -2
- package/src/events/ui-request.ts +36 -2
- package/src/events/ui-response.ts +12 -2
- package/src/index.ts +0 -5
- package/src/inject.ts +60 -24
- package/src/lowLevelInject.ts +7 -8
- package/src/protocols/protocol-v2/features.ts +10 -7
- package/src/protocols/protocol-v2/firmware.ts +2 -0
- package/src/protocols/protocol-v2/resources.ts +394 -0
- package/src/protocols/protocol-v2/uiInteraction.ts +46 -6
- package/src/protocols/protocol-v2/unlockPolicy.ts +1 -105
- package/src/protocols/protocol-v2/unlockPolicyRunner.ts +131 -0
- package/src/protocols/protocol-v2/walletSession.ts +214 -36
- package/src/topLevelInject.ts +7 -8
- package/src/types/api/checkAllFirmwareRelease.ts +3 -5
- package/src/types/api/detectDeviceConnectProtocol.ts +6 -0
- package/src/types/api/deviceUnlock.ts +12 -1
- package/src/types/api/deviceUpdateBootloader.ts +0 -6
- package/src/types/api/export.ts +1 -18
- package/src/types/api/firmwareUpdate.ts +6 -78
- package/src/types/api/index.ts +13 -14
- package/src/types/api/protocolV2.ts +13 -0
- package/src/types/device.ts +15 -3
- package/src/types/params.ts +7 -1
- package/src/types/settings.ts +61 -22
- package/src/utils/deviceFeaturesCompat.ts +5 -6
- package/src/utils/deviceFeaturesUtils.ts +14 -3
- package/src/utils/deviceInfoUtils.ts +2 -0
- package/src/utils/deviceSettings.ts +3 -0
- package/src/utils/homescreen.ts +32 -6
- package/src/utils/index.ts +6 -1
- package/src/utils/pro2Nft.ts +142 -0
- package/src/utils/pro2Wallpaper.ts +35 -8
- package/src/utils/uiProgressThrottle.ts +63 -0
- package/__tests__/device-initialize-timeout.test.ts +0 -56
- package/__tests__/firmware-update/check-all-firmware-release.test.ts +0 -175
- package/__tests__/firmware-update/device-update-bootloader.test.ts +0 -87
- package/__tests__/firmware-update/firmware-artifact-source.test.ts +0 -119
- package/__tests__/firmware-update/firmware-host-binding.test.ts +0 -70
- package/__tests__/firmware-update/firmware-preparation-error.test.ts +0 -27
- package/__tests__/firmware-update/firmware-update-bootloader-poll.test.ts +0 -200
- package/__tests__/firmware-update/firmware-update-capabilities.test.ts +0 -13
- package/__tests__/firmware-update/firmware-update-plan-bootloader-identity.test.ts +0 -394
- package/__tests__/firmware-update/firmware-update-plan.test.ts +0 -593
- package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +0 -231
- package/__tests__/firmware-update/firmware-update-v3-reconnect.test.ts +0 -58
- package/__tests__/firmware-update/firmware-upload-source.test.ts +0 -70
- package/dist/api/firmware/FirmwareArtifactSource.d.ts +0 -25
- package/dist/api/firmware/FirmwareArtifactSource.d.ts.map +0 -1
- package/dist/api/firmware/FirmwareHostBinding.d.ts +0 -6
- package/dist/api/firmware/FirmwareHostBinding.d.ts.map +0 -1
- package/dist/api/firmware/FirmwarePreparationError.d.ts +0 -3
- package/dist/api/firmware/FirmwarePreparationError.d.ts.map +0 -1
- package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts +0 -3
- package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts.map +0 -1
- package/dist/api/firmware/FirmwareUpdatePlan.d.ts +0 -25
- package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +0 -1
- package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +0 -32
- package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +0 -1
- package/dist/api/firmware/progressThrottle.d.ts +0 -3
- package/dist/api/firmware/progressThrottle.d.ts.map +0 -1
- package/dist/protocols/protocol-v2/lockedError.d.ts +0 -2
- package/dist/protocols/protocol-v2/lockedError.d.ts.map +0 -1
- package/dist/protocols/protocol-v2/unlockRetry.d.ts +0 -10
- package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +0 -1
- package/dist/types/api/firmwareUpdateCapabilities.d.ts +0 -9
- package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +0 -1
- package/dist/types/api/firmwareUpdatePlan.d.ts +0 -28
- package/dist/types/api/firmwareUpdatePlan.d.ts.map +0 -1
- package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +0 -42
- package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +0 -1
- package/src/api/firmware/FirmwareArtifactSource.ts +0 -278
- package/src/api/firmware/FirmwareHostBinding.ts +0 -100
- package/src/api/firmware/FirmwarePreparationError.ts +0 -12
- package/src/api/firmware/FirmwareUpdateCapabilities.ts +0 -9
- package/src/api/firmware/FirmwareUpdatePlan.ts +0 -772
- package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +0 -449
- package/src/api/firmware/progressThrottle.ts +0 -44
- package/src/protocols/protocol-v2/lockedError.ts +0 -10
- package/src/protocols/protocol-v2/unlockRetry.ts +0 -109
- package/src/types/api/firmwareUpdateCapabilities.ts +0 -9
- package/src/types/api/firmwareUpdatePlan.ts +0 -38
- package/src/types/api/firmwareUpdatePreparedPlan.ts +0 -53
|
@@ -14,45 +14,18 @@ import { BaseMethod } from './BaseMethod';
|
|
|
14
14
|
import { validateParams } from './helpers/paramsValidator';
|
|
15
15
|
import { DevicePool } from '../device/DevicePool';
|
|
16
16
|
import { getBinary, getInfo, getSysResourceBinary } from './firmware/getBinary';
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
updateResources,
|
|
20
|
-
updateResourcesFromSources,
|
|
21
|
-
uploadFirmwareFromSource,
|
|
22
|
-
} from './firmware/uploadFirmware';
|
|
23
|
-
import { BOOTLOADER_POLL_INITIALIZE_TIMEOUT_MS } from './firmware/FirmwareUpdateBaseMethod';
|
|
24
|
-
import { LoggerNames, getDeviceType, getDeviceUUID, getLogger, wait } from '../utils';
|
|
25
|
-
import { resolveDeviceBootloaderMode } from '../utils/deviceFeaturesCompat';
|
|
17
|
+
import { updateResources, uploadFirmware } from './firmware/uploadFirmware';
|
|
18
|
+
import { LoggerNames, getLogger, wait } from '../utils';
|
|
26
19
|
import { FirmwareUpdateTipMessage, createUiMessage } from '../events/ui-request';
|
|
27
20
|
import { DeviceModelToTypes } from '../types';
|
|
28
21
|
import { DataManager } from '../data-manager';
|
|
29
22
|
import { DEVICE } from '../events';
|
|
30
|
-
import { type FirmwareByteSource, openFirmwareByteSource } from './firmware/FirmwareArtifactSource';
|
|
31
|
-
import { resolveFirmwareUpdateHostBinding } from './firmware/FirmwareHostBinding';
|
|
32
|
-
import {
|
|
33
|
-
assertFirmwareUpdatePreparedPlanBinding,
|
|
34
|
-
assertFirmwareUpdatePreparedPlanDeviceIdentity,
|
|
35
|
-
getFirmwareUpdateResourceName,
|
|
36
|
-
} from './firmware/FirmwareUpdatePreparedPlan';
|
|
37
23
|
|
|
38
24
|
import type { Features, KnownDevice } from '../types';
|
|
39
25
|
import type { FirmwareBinary } from './firmware/getBinary';
|
|
40
|
-
import type {
|
|
41
|
-
FirmwareArtifactReader,
|
|
42
|
-
FirmwareArtifactReference,
|
|
43
|
-
} from '../types/api/firmwareUpdate';
|
|
44
|
-
import type { FirmwareUpdatePreparedPlan } from '../types/api/firmwareUpdatePreparedPlan';
|
|
45
26
|
|
|
46
27
|
type Params = {
|
|
47
28
|
binary?: ArrayBuffer;
|
|
48
|
-
artifact?: FirmwareArtifactReference;
|
|
49
|
-
resourceEntries?: Array<{
|
|
50
|
-
entryName: string;
|
|
51
|
-
artifact: FirmwareArtifactReference;
|
|
52
|
-
}>;
|
|
53
|
-
artifactReader?: FirmwareArtifactReader;
|
|
54
|
-
preparedPlan?: FirmwareUpdatePreparedPlan;
|
|
55
|
-
platform?: FirmwareUpdatePreparedPlan['platform'];
|
|
56
29
|
version?: number[];
|
|
57
30
|
updateType: 'firmware' | 'ble';
|
|
58
31
|
forcedUpdateRes?: boolean;
|
|
@@ -133,13 +106,6 @@ const normalizeFirmwareBinary = (binary: unknown): FirmwareBinary | undefined =>
|
|
|
133
106
|
return normalized.buffer;
|
|
134
107
|
};
|
|
135
108
|
|
|
136
|
-
const toArrayBuffer = (binary: FirmwareBinary): ArrayBuffer => {
|
|
137
|
-
if (binary instanceof ArrayBuffer) {
|
|
138
|
-
return binary;
|
|
139
|
-
}
|
|
140
|
-
return new Uint8Array(binary.buffer, binary.byteOffset, binary.byteLength).slice().buffer;
|
|
141
|
-
};
|
|
142
|
-
|
|
143
109
|
export default class FirmwareUpdateV2 extends BaseMethod<Params> {
|
|
144
110
|
checkPromise: Deferred<any> | null = null;
|
|
145
111
|
|
|
@@ -186,32 +152,6 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
|
|
|
186
152
|
binary: payload.binary,
|
|
187
153
|
};
|
|
188
154
|
}
|
|
189
|
-
|
|
190
|
-
if ('artifact' in payload) {
|
|
191
|
-
const hostBinding = resolveFirmwareUpdateHostBinding(payload.hostBindingGeneration);
|
|
192
|
-
const target = payload.isUpdateBootloader ? 'bootloader' : payload.updateType;
|
|
193
|
-
const resourceBindings = (payload.resourceEntries ?? []).map(
|
|
194
|
-
(entry: { entryName: string; artifact: FirmwareArtifactReference }) => ({
|
|
195
|
-
target: 'resource' as const,
|
|
196
|
-
entryName: entry.entryName,
|
|
197
|
-
artifact: entry.artifact,
|
|
198
|
-
})
|
|
199
|
-
);
|
|
200
|
-
assertFirmwareUpdatePreparedPlanBinding({
|
|
201
|
-
preparedPlan: payload.preparedPlan,
|
|
202
|
-
executor: 'v2',
|
|
203
|
-
platform: payload.platform,
|
|
204
|
-
scopeTargets: [target, ...(target === 'firmware' ? (['resource'] as const) : [])],
|
|
205
|
-
bindings: [{ target, artifact: payload.artifact }, ...resourceBindings],
|
|
206
|
-
});
|
|
207
|
-
this.params = {
|
|
208
|
-
...this.params,
|
|
209
|
-
preparedPlan: payload.preparedPlan,
|
|
210
|
-
artifact: payload.artifact,
|
|
211
|
-
resourceEntries: payload.resourceEntries,
|
|
212
|
-
artifactReader: hostBinding.artifactReader,
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
155
|
}
|
|
216
156
|
|
|
217
157
|
postTipMessage = (message: string) => {
|
|
@@ -247,10 +187,6 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
|
|
|
247
187
|
this.checkPromise = createDeferred();
|
|
248
188
|
const env = DataManager.getSettings('env');
|
|
249
189
|
const isBleReconnect = connectId && DataManager.isBleConnect(env);
|
|
250
|
-
// Tracks the in-flight BLE probe so interval ticks never overlap: a superseded
|
|
251
|
-
// Initialize left pending on the V1 transport is exactly what later times out
|
|
252
|
-
// and used to tear down the connection mid-firmware-upload.
|
|
253
|
-
let bleProbeInFlight = false;
|
|
254
190
|
|
|
255
191
|
Log.log('FirmwareUpdateV2 [checkDeviceToBootloader] isBleReconnect: ', isBleReconnect);
|
|
256
192
|
|
|
@@ -298,18 +234,14 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
|
|
|
298
234
|
}
|
|
299
235
|
|
|
300
236
|
if (isBleReconnect) {
|
|
301
|
-
if (bleProbeInFlight) return;
|
|
302
|
-
bleProbeInFlight = true;
|
|
303
237
|
try {
|
|
304
238
|
await this.device.deviceConnector?.acquire(
|
|
305
239
|
this.device.originalDescriptor.id,
|
|
306
240
|
null,
|
|
307
|
-
true
|
|
241
|
+
true,
|
|
242
|
+
this.payload.connectProtocol ?? this.device.originalDescriptor.protocolType
|
|
308
243
|
);
|
|
309
|
-
|
|
310
|
-
// frees the slot for the next tick instead of hanging into the
|
|
311
|
-
// 30s reboot budget.
|
|
312
|
-
await this.device.initialize({ timeoutMs: BOOTLOADER_POLL_INITIALIZE_TIMEOUT_MS });
|
|
244
|
+
await this.device.initialize();
|
|
313
245
|
if (this.device.isBootloader()) {
|
|
314
246
|
clearInterval(intervalTimer);
|
|
315
247
|
this.checkPromise?.resolve(true);
|
|
@@ -317,8 +249,6 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
|
|
|
317
249
|
} catch (e) {
|
|
318
250
|
// ignore error because of device is not connected
|
|
319
251
|
Log.log('catch Bluetooth error when device is restarting: ', e);
|
|
320
|
-
} finally {
|
|
321
|
-
bleProbeInFlight = false;
|
|
322
252
|
}
|
|
323
253
|
} else {
|
|
324
254
|
await this._checkDeviceInBootloaderMode(connectId, intervalTimer, timeoutTimer);
|
|
@@ -343,7 +273,9 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
|
|
|
343
273
|
) {
|
|
344
274
|
const deviceDiff = await this.device.deviceConnector?.enumerate();
|
|
345
275
|
const devicesDescriptor = deviceDiff?.descriptors ?? [];
|
|
346
|
-
const { deviceList } = await DevicePool.getDevices(devicesDescriptor, connectId
|
|
276
|
+
const { deviceList } = await DevicePool.getDevices(devicesDescriptor, connectId, {
|
|
277
|
+
connectProtocol: this.payload.connectProtocol ?? this.device.originalDescriptor.protocolType,
|
|
278
|
+
});
|
|
347
279
|
|
|
348
280
|
if (deviceList.length === 1 && deviceList[0]?.isBootloader()) {
|
|
349
281
|
// should update current device from cache
|
|
@@ -412,255 +344,151 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
|
|
|
412
344
|
const { features, commands } = device;
|
|
413
345
|
const deviceType = device.getCurrentDeviceType();
|
|
414
346
|
|
|
415
|
-
// Protocol V2 (Pro2) uses DeviceFirmwareUpdate and must not enter this legacy flow.
|
|
416
|
-
if (device.isProtocolV2()) {
|
|
417
|
-
throw ERRORS.TypedError(
|
|
418
|
-
HardwareErrorCode.RuntimeError,
|
|
419
|
-
'Protocol V2 firmware update must use firmwareUpdateV4'
|
|
420
|
-
);
|
|
421
|
-
}
|
|
422
|
-
if (params.preparedPlan) {
|
|
423
|
-
assertFirmwareUpdatePreparedPlanDeviceIdentity({
|
|
424
|
-
preparedPlan: params.preparedPlan,
|
|
425
|
-
deviceIdentity: getDeviceUUID(features) || undefined,
|
|
426
|
-
bootloaderMode: resolveDeviceBootloaderMode(features),
|
|
427
|
-
deviceModel: String(getDeviceType(features)),
|
|
428
|
-
});
|
|
429
|
-
}
|
|
430
|
-
|
|
431
347
|
const deviceFirmwareType = device.getCurrentFirmwareType();
|
|
432
348
|
const firmwareType = params.firmwareType ?? deviceFirmwareType;
|
|
433
349
|
|
|
434
350
|
this.checkVersionForCopyTouchResource(features, firmwareType);
|
|
435
351
|
|
|
436
|
-
let
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
}
|
|
352
|
+
let preparedBinary: FirmwareBinary | undefined;
|
|
353
|
+
const acquireFirmwareBinary = async (): Promise<FirmwareBinary> => {
|
|
354
|
+
try {
|
|
355
|
+
if (preparedBinary) {
|
|
356
|
+
return preparedBinary;
|
|
357
|
+
}
|
|
443
358
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
}
|
|
449
|
-
const source = await openFirmwareByteSource({
|
|
450
|
-
binary: toArrayBuffer(binary),
|
|
451
|
-
});
|
|
452
|
-
if (!source) {
|
|
453
|
-
throw new Error('firmware binary is empty or invalid');
|
|
454
|
-
}
|
|
455
|
-
preparedSource = source;
|
|
456
|
-
return source;
|
|
359
|
+
if (params.binary !== undefined) {
|
|
360
|
+
preparedBinary = normalizeFirmwareBinary(params.binary);
|
|
361
|
+
if (!preparedBinary) {
|
|
362
|
+
throw new Error('firmware binary is empty or invalid');
|
|
457
363
|
}
|
|
364
|
+
return preparedBinary;
|
|
365
|
+
}
|
|
458
366
|
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
throw new Error('firmware artifact is not prepared');
|
|
466
|
-
}
|
|
467
|
-
preparedSource = source;
|
|
468
|
-
return source;
|
|
469
|
-
}
|
|
367
|
+
if (!device.features) {
|
|
368
|
+
throw ERRORS.TypedError(
|
|
369
|
+
HardwareErrorCode.RuntimeError,
|
|
370
|
+
'no features found for this device'
|
|
371
|
+
);
|
|
372
|
+
}
|
|
470
373
|
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
374
|
+
this.postTipMessage('DownloadFirmware');
|
|
375
|
+
const firmware = await getBinary({
|
|
376
|
+
features: device.features,
|
|
377
|
+
version: params.version,
|
|
378
|
+
updateType: params.updateType,
|
|
379
|
+
isUpdateBootloader: params.isUpdateBootloader,
|
|
380
|
+
firmwareType,
|
|
381
|
+
requestOptions: FIRMWARE_DOWNLOAD_REQUEST_OPTIONS,
|
|
382
|
+
});
|
|
383
|
+
preparedBinary = normalizeFirmwareBinary(firmware.binary);
|
|
384
|
+
if (!preparedBinary) {
|
|
385
|
+
throw new Error('downloaded firmware binary is empty or invalid');
|
|
386
|
+
}
|
|
387
|
+
this.postTipMessage('DownloadFirmwareSuccess');
|
|
388
|
+
return preparedBinary;
|
|
389
|
+
} catch (err) {
|
|
390
|
+
throw ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateDownloadFailed, err.message ?? err);
|
|
391
|
+
}
|
|
392
|
+
};
|
|
477
393
|
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
'Firmware must be prepared by the external firmware host',
|
|
485
|
-
{
|
|
486
|
-
firmwareUpdateCode: 'FirmwareArtifactsNotPrepared',
|
|
487
|
-
artifactName: 'firmware',
|
|
488
|
-
}
|
|
489
|
-
);
|
|
490
|
-
}
|
|
394
|
+
if (!device.isBootloader() && features) {
|
|
395
|
+
const serialNo = device.getCurrentSerialNo();
|
|
396
|
+
// should go to bootloader mode manually
|
|
397
|
+
if (this.isEnteredManuallyBoot()) {
|
|
398
|
+
return Promise.reject(ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateManuallyEnterBoot));
|
|
399
|
+
}
|
|
491
400
|
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
401
|
+
// check & upgrade firmware resource
|
|
402
|
+
if (this.isSupportResourceUpdate(params.updateType)) {
|
|
403
|
+
this.postTipMessage('CheckLatestUiResource');
|
|
404
|
+
const resourceUrl = DataManager.getSysResourcesLatestRelease({
|
|
405
|
+
features,
|
|
406
|
+
forcedUpdateRes: params.forcedUpdateRes,
|
|
407
|
+
firmwareType,
|
|
408
|
+
});
|
|
409
|
+
if (resourceUrl) {
|
|
410
|
+
this.postTipMessage('DownloadLatestUiResource');
|
|
411
|
+
const resource = await getSysResourceBinary(resourceUrl);
|
|
412
|
+
this.postTipMessage('DownloadLatestUiResourceSuccess');
|
|
413
|
+
if (resource) {
|
|
414
|
+
await updateResources(
|
|
415
|
+
this.device.getCommands().typedCall.bind(this.device.getCommands()),
|
|
416
|
+
this.postMessage,
|
|
417
|
+
device,
|
|
418
|
+
resource.binary
|
|
419
|
+
);
|
|
510
420
|
}
|
|
511
|
-
preparedSource = source;
|
|
512
|
-
this.postTipMessage('DownloadFirmwareSuccess');
|
|
513
|
-
return source;
|
|
514
|
-
} catch (err) {
|
|
515
|
-
throw normalizeFirmwarePreparationError(err);
|
|
516
421
|
}
|
|
517
|
-
}
|
|
422
|
+
}
|
|
518
423
|
|
|
519
|
-
if
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
424
|
+
// check if the device commands has been disposed
|
|
425
|
+
this.device?.commands?.checkDisposed();
|
|
426
|
+
|
|
427
|
+
// A failed firmware download must leave the device in normal mode.
|
|
428
|
+
await acquireFirmwareBinary();
|
|
429
|
+
|
|
430
|
+
// The request may outlive the current transport command instance.
|
|
431
|
+
this.device?.commands?.checkDisposed();
|
|
432
|
+
|
|
433
|
+
// auto go to bootloader mode
|
|
434
|
+
try {
|
|
435
|
+
this.postTipMessage('AutoRebootToBootloader');
|
|
436
|
+
const bootRes = await commands.typedCall('DeviceBackToBoot', 'Success');
|
|
437
|
+
// @ts-expect-error
|
|
438
|
+
if (bootRes.type === 'CallMethodError') {
|
|
439
|
+
throw ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure);
|
|
524
440
|
}
|
|
441
|
+
this.postTipMessage('GoToBootloaderSuccess');
|
|
442
|
+
this.checkDeviceToBootloader(this.payload.connectId);
|
|
525
443
|
|
|
526
|
-
//
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
// check & upgrade firmware resource
|
|
530
|
-
if (this.isSupportResourceUpdate(params.updateType)) {
|
|
531
|
-
this.postTipMessage('CheckLatestUiResource');
|
|
532
|
-
const resourceUrl = DataManager.getSysResourcesLatestRelease({
|
|
533
|
-
features,
|
|
534
|
-
forcedUpdateRes: params.forcedUpdateRes,
|
|
535
|
-
firmwareType,
|
|
536
|
-
});
|
|
537
|
-
if (resourceUrl) {
|
|
538
|
-
this.postTipMessage('DownloadLatestUiResource');
|
|
539
|
-
if (params.resourceEntries?.length) {
|
|
540
|
-
const sources: Array<{
|
|
541
|
-
entryName: string;
|
|
542
|
-
source: FirmwareByteSource;
|
|
543
|
-
}> = [];
|
|
544
|
-
try {
|
|
545
|
-
for (const entry of params.resourceEntries) {
|
|
546
|
-
const resourceName = getFirmwareUpdateResourceName(entry.entryName);
|
|
547
|
-
const source = await openFirmwareByteSource({
|
|
548
|
-
artifact: entry.artifact,
|
|
549
|
-
reader: params.artifactReader,
|
|
550
|
-
});
|
|
551
|
-
if (!source) {
|
|
552
|
-
throw new Error('Firmware resource entry is not prepared');
|
|
553
|
-
}
|
|
554
|
-
sources.push({ entryName: resourceName, source });
|
|
555
|
-
}
|
|
556
|
-
await updateResourcesFromSources(
|
|
557
|
-
this.device.getCommands().typedCall.bind(this.device.getCommands()),
|
|
558
|
-
this.postMessage,
|
|
559
|
-
device,
|
|
560
|
-
sources.map(entry => ({
|
|
561
|
-
entryName: entry.entryName,
|
|
562
|
-
source: entry.source,
|
|
563
|
-
}))
|
|
564
|
-
);
|
|
565
|
-
} finally {
|
|
566
|
-
await Promise.all(
|
|
567
|
-
sources.map(entry => entry.source.close().catch(() => undefined))
|
|
568
|
-
);
|
|
569
|
-
}
|
|
570
|
-
this.postTipMessage('DownloadLatestUiResourceSuccess');
|
|
571
|
-
} else {
|
|
572
|
-
if (
|
|
573
|
-
params.artifactReader ||
|
|
574
|
-
DataManager.getSettings('firmwareManifestMode') === 'external-only'
|
|
575
|
-
) {
|
|
576
|
-
throw ERRORS.TypedError(
|
|
577
|
-
HardwareErrorCode.RuntimeError,
|
|
578
|
-
'Firmware resource must be prepared by the external firmware host',
|
|
579
|
-
{
|
|
580
|
-
firmwareUpdateCode: 'FirmwareArtifactsNotPrepared',
|
|
581
|
-
artifactName: 'resource',
|
|
582
|
-
}
|
|
583
|
-
);
|
|
584
|
-
}
|
|
585
|
-
const resourceBinary: ArrayBuffer | Buffer = (await getSysResourceBinary(resourceUrl))
|
|
586
|
-
.binary;
|
|
587
|
-
this.postTipMessage('DownloadLatestUiResourceSuccess');
|
|
588
|
-
await updateResources(
|
|
589
|
-
this.device.getCommands().typedCall.bind(this.device.getCommands()),
|
|
590
|
-
this.postMessage,
|
|
591
|
-
device,
|
|
592
|
-
resourceBinary
|
|
593
|
-
);
|
|
594
|
-
}
|
|
595
|
-
}
|
|
444
|
+
// force clean classic device cache so that the device can initialize again
|
|
445
|
+
if (DeviceModelToTypes.model_classic.includes(deviceType)) {
|
|
446
|
+
DevicePool.clearDeviceCache(serialNo);
|
|
596
447
|
}
|
|
448
|
+
delete DevicePool.devicesCache[''];
|
|
449
|
+
await this.checkPromise?.promise;
|
|
450
|
+
this.checkPromise = null;
|
|
597
451
|
|
|
598
|
-
//
|
|
452
|
+
// check if the device commands has been disposed
|
|
599
453
|
this.device?.commands?.checkDisposed();
|
|
600
454
|
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
this.postTipMessage('GoToBootloaderSuccess');
|
|
610
|
-
this.checkDeviceToBootloader(this.payload.connectId);
|
|
611
|
-
|
|
612
|
-
// force clean classic device cache so that the device can initialize again
|
|
613
|
-
if (DeviceModelToTypes.model_classic.includes(deviceType)) {
|
|
614
|
-
DevicePool.clearDeviceCache(serialNo);
|
|
615
|
-
}
|
|
616
|
-
delete DevicePool.devicesCache[''];
|
|
617
|
-
await this.checkPromise?.promise;
|
|
618
|
-
this.checkPromise = null;
|
|
619
|
-
|
|
620
|
-
// check if the device commands has been disposed
|
|
621
|
-
this.device?.commands?.checkDisposed();
|
|
622
|
-
|
|
623
|
-
/**
|
|
624
|
-
* Touch 1 with bootloader v2.5.0 issue: BLE chip need more time for looking up name, here change the delay time to 3000ms after rebooting.
|
|
625
|
-
*/
|
|
626
|
-
const isTouch = DeviceModelToTypes.model_touch.includes(deviceType);
|
|
627
|
-
await wait(isTouch ? 3000 : 1500);
|
|
628
|
-
} catch (e) {
|
|
629
|
-
if (e instanceof HardwareError) {
|
|
630
|
-
return Promise.reject(e);
|
|
631
|
-
}
|
|
632
|
-
console.log('auto go to bootloader mode failed: ', e);
|
|
633
|
-
return Promise.reject(
|
|
634
|
-
ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure)
|
|
635
|
-
);
|
|
455
|
+
/**
|
|
456
|
+
* Touch 1 with bootloader v2.5.0 issue: BLE chip need more time for looking up name, here change the delay time to 3000ms after rebooting.
|
|
457
|
+
*/
|
|
458
|
+
const isTouch = DeviceModelToTypes.model_touch.includes(deviceType);
|
|
459
|
+
await wait(isTouch ? 3000 : 1500);
|
|
460
|
+
} catch (e) {
|
|
461
|
+
if (e instanceof HardwareError) {
|
|
462
|
+
return Promise.reject(e);
|
|
636
463
|
}
|
|
464
|
+
console.log('auto go to bootloader mode failed: ', e);
|
|
465
|
+
return Promise.reject(
|
|
466
|
+
ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure)
|
|
467
|
+
);
|
|
637
468
|
}
|
|
469
|
+
}
|
|
638
470
|
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
// check if the device commands has been disposed
|
|
643
|
-
this.device?.commands?.checkDisposed();
|
|
471
|
+
// Devices already in bootloader mode still acquire through the same helper.
|
|
472
|
+
const binary = await acquireFirmwareBinary();
|
|
644
473
|
|
|
645
|
-
|
|
474
|
+
// check if the device commands has been disposed
|
|
475
|
+
this.device?.commands?.checkDisposed();
|
|
646
476
|
|
|
647
|
-
|
|
648
|
-
params.updateType,
|
|
649
|
-
this.device.getCommands().typedCall.bind(this.device.getCommands()),
|
|
650
|
-
this.postMessage,
|
|
651
|
-
device,
|
|
652
|
-
source,
|
|
653
|
-
true,
|
|
654
|
-
params.isUpdateBootloader
|
|
655
|
-
);
|
|
477
|
+
await this.device.acquire();
|
|
656
478
|
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
479
|
+
const response = await uploadFirmware(
|
|
480
|
+
params.updateType,
|
|
481
|
+
this.device.getCommands().typedCall.bind(this.device.getCommands()),
|
|
482
|
+
this.postMessage,
|
|
483
|
+
device,
|
|
484
|
+
{ payload: binary, rebootOnSuccess: true },
|
|
485
|
+
params.isUpdateBootloader
|
|
486
|
+
);
|
|
660
487
|
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
await preparedSource?.close().catch(() => undefined);
|
|
488
|
+
if (this.connectId) {
|
|
489
|
+
DevicePool.clearDeviceCache(this.connectId);
|
|
664
490
|
}
|
|
491
|
+
|
|
492
|
+
return response;
|
|
665
493
|
}
|
|
666
494
|
}
|