@onekeyfe/hd-core 1.2.0-alpha.41 → 1.2.0-alpha.43
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 +78 -0
- package/__tests__/DeviceEventRegistration.test.ts +6 -0
- package/__tests__/check-all-firmware-release-protocol-v2.test.ts +14 -1
- package/__tests__/connectSettings.test.ts +5 -47
- package/__tests__/deviceUploadNft.test.ts +272 -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__/logBlockEvent.test.ts +1 -1
- package/__tests__/open-wallet-session.test.ts +366 -31
- package/__tests__/pro2Nft.test.ts +108 -0
- package/__tests__/protocol-v2-resources.test.ts +204 -0
- package/__tests__/protocol-v2-ui-lifecycle.test.ts +91 -0
- package/__tests__/protocol-v2-unlock-policy.test.ts +196 -35
- package/__tests__/protocol-v2.test.ts +568 -957
- package/__tests__/protocolV2UiInteraction.test.ts +63 -0
- package/__tests__/public-pro2-api-boundary.test.ts +1 -0
- package/__tests__/uiProgressThrottle.test.ts +74 -0
- package/dist/api/BaseMethod.d.ts +3 -1
- package/dist/api/BaseMethod.d.ts.map +1 -1
- package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV2.d.ts +0 -11
- 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 +6 -25
- 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/allnetwork/AllNetworkGetAddressBase.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 +0 -8
- 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 +2 -0
- package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -1
- package/dist/api/index.d.ts +1 -0
- package/dist/api/index.d.ts.map +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/stellar/StellarSignTransaction.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/data-manager/DataManager.d.ts +3 -2
- package/dist/data-manager/DataManager.d.ts.map +1 -1
- package/dist/data-manager/connectSettings.d.ts.map +1 -1
- package/dist/device/Device.d.ts +24 -4
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/device/DeviceCommands.d.ts +4 -4
- 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-request.d.ts +28 -2
- package/dist/events/ui-request.d.ts.map +1 -1
- package/dist/index.d.ts +115 -184
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2051 -3349
- package/dist/inject.d.ts.map +1 -1
- package/dist/lowLevelInject.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/features.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 +4 -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 +1 -4
- package/dist/types/api/checkAllFirmwareRelease.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 +1 -4
- package/dist/types/api/export.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdate.d.ts +0 -69
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/dist/types/api/index.d.ts +3 -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/settings.d.ts +12 -13
- package/dist/types/settings.d.ts.map +1 -1
- package/dist/utils/deviceFeaturesUtils.d.ts +2 -0
- package/dist/utils/deviceFeaturesUtils.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 +40 -53
- package/src/api/FirmwareUpdateV2.ts +120 -298
- package/src/api/FirmwareUpdateV3.ts +57 -263
- package/src/api/FirmwareUpdateV4.ts +307 -912
- package/src/api/GetPassphraseState.ts +7 -1
- package/src/api/OpenWalletSession.ts +54 -17
- package/src/api/allnetwork/AllNetworkGetAddressBase.ts +32 -11
- package/src/api/device/DeviceUnlock.ts +1 -1
- package/src/api/device/DeviceUpdateBootloader.ts +6 -122
- package/src/api/firmware/FirmwareUpdateBaseMethod.ts +0 -57
- package/src/api/firmware/updateBootloader.ts +4 -19
- package/src/api/firmware/uploadFirmware.ts +22 -140
- package/src/api/helpers/protocolV2FileWrite.ts +11 -4
- package/src/api/index.ts +1 -0
- package/src/api/protocol-v2/DeviceUploadNft.ts +189 -0
- package/src/api/protocol-v2/ProtocolInfoRequest.ts +3 -1
- package/src/core/deviceEventRegistration.ts +4 -0
- package/src/core/index.ts +136 -77
- package/src/data/messages/messages-protocol-v2.json +68 -0
- package/src/data-manager/DataManager.ts +63 -38
- package/src/data-manager/connectSettings.ts +0 -11
- package/src/device/Device.ts +203 -21
- package/src/events/device.ts +4 -0
- package/src/events/logBlockEvent.ts +1 -0
- package/src/events/ui-request.ts +33 -2
- package/src/index.ts +0 -5
- package/src/inject.ts +3 -22
- package/src/lowLevelInject.ts +1 -5
- package/src/protocols/protocol-v2/features.ts +9 -2
- package/src/protocols/protocol-v2/resources.ts +233 -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 +124 -0
- package/src/protocols/protocol-v2/walletSession.ts +154 -30
- package/src/topLevelInject.ts +1 -5
- package/src/types/api/checkAllFirmwareRelease.ts +1 -4
- package/src/types/api/deviceUpdateBootloader.ts +0 -6
- package/src/types/api/export.ts +0 -18
- package/src/types/api/firmwareUpdate.ts +0 -76
- package/src/types/api/index.ts +2 -14
- package/src/types/api/protocolV2.ts +13 -0
- package/src/types/settings.ts +26 -13
- package/src/utils/deviceFeaturesUtils.ts +4 -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__/firmware-update/check-all-firmware-release.test.ts +0 -175
- 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-capabilities.test.ts +0 -13
- package/__tests__/firmware-update/firmware-update-plan.test.ts +0 -593
- package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +0 -213
- 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 -30
- 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 -745
- package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +0 -392
- 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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
2
|
-
import { DeviceSessionPinType } from '@onekeyfe/hd-transport';
|
|
2
|
+
import { DeviceSessionPinType, DeviceSessionSeedDomain } from '@onekeyfe/hd-transport';
|
|
3
3
|
|
|
4
4
|
import { DEVICE } from '../../events';
|
|
5
5
|
import { assertCompleteDeviceSession } from './deviceSession';
|
|
@@ -38,32 +38,74 @@ export async function refreshProtocolV2DeviceStatus(device: Device) {
|
|
|
38
38
|
return device.updateProtocolV2Status(status);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
export async function ensureProtocolV2WalletSessionUnlocked(device: Device) {
|
|
42
|
+
if (!device.isProtocolV2() || device.isBootloader?.() || device.isRomloader?.()) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
await refreshProtocolV2DeviceStatus(device);
|
|
47
|
+
if (device.state?.status.unlocked !== false) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
await device.unlockDevice(DeviceSessionPinType.Main, {
|
|
52
|
+
source: 'unlock-coordinator',
|
|
53
|
+
reason: 'device-locked',
|
|
54
|
+
deviceOnly: true,
|
|
44
55
|
});
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const negotiateEventlessWalletSession = async (device: Device) => {
|
|
60
|
+
await device.ensureProtocolV2RuntimeContext();
|
|
45
61
|
};
|
|
46
62
|
|
|
47
63
|
const getDeviceSession = async (device: Device, request: DeviceSessionGet) =>
|
|
48
64
|
device.commands.typedCall('DeviceSessionGet', 'DeviceSession', request);
|
|
49
65
|
|
|
66
|
+
const buildDeviceSessionGetRequest = ({
|
|
67
|
+
sessionId,
|
|
68
|
+
expectedPassphraseState,
|
|
69
|
+
deriveCardano,
|
|
70
|
+
}: {
|
|
71
|
+
sessionId?: string;
|
|
72
|
+
expectedPassphraseState?: string;
|
|
73
|
+
deriveCardano?: boolean;
|
|
74
|
+
} = {}): DeviceSessionGet => ({
|
|
75
|
+
...(sessionId ? { session_id: sessionId } : {}),
|
|
76
|
+
...(expectedPassphraseState ? { btc_test_address: expectedPassphraseState } : {}),
|
|
77
|
+
seed_domains:
|
|
78
|
+
deriveCardano === undefined
|
|
79
|
+
? []
|
|
80
|
+
: [
|
|
81
|
+
DeviceSessionSeedDomain.SeedDomain_Standard,
|
|
82
|
+
...(deriveCardano ? [DeviceSessionSeedDomain.SeedDomain_Cardano] : []),
|
|
83
|
+
],
|
|
84
|
+
});
|
|
85
|
+
|
|
50
86
|
const askDevicePassphrase = async (device: Device, requestPayload: DeviceSessionAskPassphrase) => {
|
|
51
87
|
await device.commands.typedCall('DeviceSessionAskPassphrase', 'Success', requestPayload);
|
|
52
88
|
await refreshProtocolV2DeviceStatus(device);
|
|
53
89
|
};
|
|
54
90
|
|
|
55
|
-
const selectDeviceSession = async (
|
|
91
|
+
const selectDeviceSession = async (
|
|
92
|
+
device: Device,
|
|
93
|
+
expectedPassphraseState?: string,
|
|
94
|
+
deriveCardano?: boolean
|
|
95
|
+
) => {
|
|
56
96
|
const existsAttachPinUser = device.features?.attachToPinEnabled === true;
|
|
57
97
|
const metadata = {
|
|
58
98
|
source: 'wallet-session-coordinator' as const,
|
|
59
99
|
reason: expectedPassphraseState ? ('session-recovery' as const) : ('open-wallet' as const),
|
|
60
100
|
...(expectedPassphraseState ? { expectedPassphraseState } : {}),
|
|
61
101
|
};
|
|
102
|
+
const passphraseInteraction = device.createProtocolV2UiPhaseMetadata?.('passphrase', 'start');
|
|
62
103
|
const response = await device.commands.promptPassphrase(
|
|
63
104
|
{
|
|
64
105
|
existsAttachPinUser,
|
|
65
106
|
deviceOnly: false,
|
|
66
107
|
...metadata,
|
|
108
|
+
...(passphraseInteraction ? { interaction: passphraseInteraction } : {}),
|
|
67
109
|
},
|
|
68
110
|
{ cancelDeviceOnReject: false }
|
|
69
111
|
);
|
|
@@ -102,9 +144,16 @@ const selectDeviceSession = async (device: Device, expectedPassphraseState?: str
|
|
|
102
144
|
'Attach PIN wallet selection is unavailable on this device.'
|
|
103
145
|
);
|
|
104
146
|
}
|
|
105
|
-
device.
|
|
106
|
-
|
|
107
|
-
|
|
147
|
+
const attachPinInteraction = device.createProtocolV2UiPhaseMetadata?.('pin', 'start');
|
|
148
|
+
device.emit(DEVICE.ATTACH_PIN_ON_DEVICE, device, {
|
|
149
|
+
...metadata,
|
|
150
|
+
...(attachPinInteraction ? { interaction: attachPinInteraction } : {}),
|
|
151
|
+
});
|
|
152
|
+
await device.unlockDevice(DeviceSessionPinType.AttachToPin, {
|
|
153
|
+
emitUiEvent: false,
|
|
154
|
+
interaction: attachPinInteraction,
|
|
155
|
+
});
|
|
156
|
+
return getDeviceSession(device, buildDeviceSessionGetRequest({ deriveCardano }));
|
|
108
157
|
}
|
|
109
158
|
|
|
110
159
|
if (hasHostPassphrase) {
|
|
@@ -112,12 +161,15 @@ const selectDeviceSession = async (device: Device, expectedPassphraseState?: str
|
|
|
112
161
|
passphrase: hostPassphrase,
|
|
113
162
|
on_device: false,
|
|
114
163
|
});
|
|
115
|
-
return getDeviceSession(device, {});
|
|
164
|
+
return getDeviceSession(device, buildDeviceSessionGetRequest({ deriveCardano }));
|
|
116
165
|
}
|
|
117
166
|
|
|
118
|
-
device.emit(DEVICE.PASSPHRASE_ON_DEVICE, device,
|
|
167
|
+
device.emit(DEVICE.PASSPHRASE_ON_DEVICE, device, {
|
|
168
|
+
...metadata,
|
|
169
|
+
...(passphraseInteraction ? { interaction: passphraseInteraction } : {}),
|
|
170
|
+
});
|
|
119
171
|
await askDevicePassphrase(device, { on_device: true });
|
|
120
|
-
return getDeviceSession(device, {});
|
|
172
|
+
return getDeviceSession(device, buildDeviceSessionGetRequest({ deriveCardano }));
|
|
121
173
|
};
|
|
122
174
|
|
|
123
175
|
export async function getProtocolV2WalletSession(
|
|
@@ -128,7 +180,9 @@ export async function getProtocolV2WalletSession(
|
|
|
128
180
|
initSession?: boolean;
|
|
129
181
|
expectedPassphraseState?: string;
|
|
130
182
|
onlyMainPin?: boolean;
|
|
183
|
+
selectMainWalletBeforeRestore?: boolean;
|
|
131
184
|
resumeOnly?: boolean;
|
|
185
|
+
deriveCardano?: boolean;
|
|
132
186
|
}
|
|
133
187
|
) {
|
|
134
188
|
const forceWalletSelection =
|
|
@@ -161,17 +215,60 @@ export async function getProtocolV2WalletSession(
|
|
|
161
215
|
: undefined;
|
|
162
216
|
let response;
|
|
163
217
|
let resumed = false;
|
|
218
|
+
let mainWalletSelected =
|
|
219
|
+
options?.onlyMainPin === true &&
|
|
220
|
+
device.features?.unlocked === true &&
|
|
221
|
+
device.features?.unlockedAttachPin === false;
|
|
222
|
+
|
|
223
|
+
const clearCurrentWalletSession = () => {
|
|
224
|
+
if (options?.onlyMainPin) {
|
|
225
|
+
device.clearStandardInternalState?.();
|
|
226
|
+
} else {
|
|
227
|
+
device.clearInternalState();
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
const rejectMismatchedAttachPinWallet = async () => {
|
|
232
|
+
const features = await refreshProtocolV2DeviceStatus(device);
|
|
233
|
+
if (features.unlockedAttachPin !== true) {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
try {
|
|
238
|
+
await device.lockDevice();
|
|
239
|
+
} catch {
|
|
240
|
+
// Reject the mismatched Attach PIN wallet even when older firmware cannot lock.
|
|
241
|
+
}
|
|
242
|
+
clearCurrentWalletSession();
|
|
243
|
+
throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckUnlockTypeError);
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
const selectMainWallet = async (force = false) => {
|
|
247
|
+
if (force || !mainWalletSelected) {
|
|
248
|
+
await device.unlockDevice(DeviceSessionPinType.Main, {
|
|
249
|
+
source: 'wallet-session-coordinator',
|
|
250
|
+
reason: expectedPassphraseState ? 'session-recovery' : 'open-wallet',
|
|
251
|
+
deviceOnly: true,
|
|
252
|
+
});
|
|
253
|
+
mainWalletSelected = true;
|
|
254
|
+
}
|
|
255
|
+
};
|
|
164
256
|
|
|
165
257
|
if (options?.onlyMainPin) {
|
|
166
258
|
expectedPassphraseState = cachedStandardSession?.passphraseState;
|
|
167
259
|
if (cachedStandardSession) {
|
|
168
260
|
try {
|
|
169
|
-
if (
|
|
170
|
-
await
|
|
261
|
+
if (options?.selectMainWalletBeforeRestore) {
|
|
262
|
+
await selectMainWallet();
|
|
171
263
|
}
|
|
172
|
-
response = await getDeviceSession(
|
|
173
|
-
|
|
174
|
-
|
|
264
|
+
response = await getDeviceSession(
|
|
265
|
+
device,
|
|
266
|
+
buildDeviceSessionGetRequest({
|
|
267
|
+
sessionId: cachedStandardSession.sessionId,
|
|
268
|
+
expectedPassphraseState,
|
|
269
|
+
deriveCardano: options?.deriveCardano,
|
|
270
|
+
})
|
|
271
|
+
);
|
|
175
272
|
resumed = true;
|
|
176
273
|
} catch (error) {
|
|
177
274
|
device.clearStandardInternalState?.();
|
|
@@ -183,12 +280,22 @@ export async function getProtocolV2WalletSession(
|
|
|
183
280
|
}
|
|
184
281
|
|
|
185
282
|
if (!response) {
|
|
186
|
-
await
|
|
187
|
-
response = await getDeviceSession(
|
|
283
|
+
await selectMainWallet();
|
|
284
|
+
response = await getDeviceSession(
|
|
285
|
+
device,
|
|
286
|
+
buildDeviceSessionGetRequest({ deriveCardano: options?.deriveCardano })
|
|
287
|
+
);
|
|
188
288
|
}
|
|
189
289
|
} else if (cachedSessionId && expectedPassphraseState) {
|
|
190
290
|
try {
|
|
191
|
-
response = await getDeviceSession(
|
|
291
|
+
response = await getDeviceSession(
|
|
292
|
+
device,
|
|
293
|
+
buildDeviceSessionGetRequest({
|
|
294
|
+
sessionId: cachedSessionId,
|
|
295
|
+
expectedPassphraseState,
|
|
296
|
+
deriveCardano: options?.deriveCardano,
|
|
297
|
+
})
|
|
298
|
+
);
|
|
192
299
|
resumed = true;
|
|
193
300
|
} catch (error) {
|
|
194
301
|
device.clearInternalState();
|
|
@@ -197,6 +304,20 @@ export async function getProtocolV2WalletSession(
|
|
|
197
304
|
}
|
|
198
305
|
resumed = false;
|
|
199
306
|
}
|
|
307
|
+
} else if (expectedPassphraseState) {
|
|
308
|
+
try {
|
|
309
|
+
response = await getDeviceSession(
|
|
310
|
+
device,
|
|
311
|
+
buildDeviceSessionGetRequest({
|
|
312
|
+
expectedPassphraseState,
|
|
313
|
+
deriveCardano: options?.deriveCardano,
|
|
314
|
+
})
|
|
315
|
+
);
|
|
316
|
+
} catch (error) {
|
|
317
|
+
if (options?.resumeOnly || !isWalletSessionInvalidError(error)) {
|
|
318
|
+
throw error;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
200
321
|
}
|
|
201
322
|
|
|
202
323
|
if (!response) {
|
|
@@ -204,7 +325,7 @@ export async function getProtocolV2WalletSession(
|
|
|
204
325
|
device.clearInternalState();
|
|
205
326
|
throw ERRORS.TypedError(HardwareErrorCode.WalletSessionInvalid);
|
|
206
327
|
}
|
|
207
|
-
response = await selectDeviceSession(device, expectedPassphraseState);
|
|
328
|
+
response = await selectDeviceSession(device, expectedPassphraseState, options?.deriveCardano);
|
|
208
329
|
}
|
|
209
330
|
|
|
210
331
|
let { message } = response;
|
|
@@ -220,17 +341,21 @@ export async function getProtocolV2WalletSession(
|
|
|
220
341
|
}
|
|
221
342
|
if (expectedPassphraseState && expectedPassphraseState !== message.btc_test_address) {
|
|
222
343
|
resumed = false;
|
|
344
|
+
await rejectMismatchedAttachPinWallet();
|
|
223
345
|
if (options?.resumeOnly) {
|
|
224
346
|
device.clearInternalState();
|
|
225
347
|
throw ERRORS.TypedError(HardwareErrorCode.WalletSessionInvalid);
|
|
226
348
|
}
|
|
227
349
|
if (options?.onlyMainPin) {
|
|
228
350
|
device.clearStandardInternalState?.();
|
|
229
|
-
await
|
|
230
|
-
response = await getDeviceSession(
|
|
351
|
+
await selectMainWallet(true);
|
|
352
|
+
response = await getDeviceSession(
|
|
353
|
+
device,
|
|
354
|
+
buildDeviceSessionGetRequest({ deriveCardano: options?.deriveCardano })
|
|
355
|
+
);
|
|
231
356
|
} else {
|
|
232
357
|
device.clearInternalState();
|
|
233
|
-
response = await selectDeviceSession(device, expectedPassphraseState);
|
|
358
|
+
response = await selectDeviceSession(device, expectedPassphraseState, options?.deriveCardano);
|
|
234
359
|
}
|
|
235
360
|
message = response.message;
|
|
236
361
|
try {
|
|
@@ -244,11 +369,8 @@ export async function getProtocolV2WalletSession(
|
|
|
244
369
|
throw error;
|
|
245
370
|
}
|
|
246
371
|
if (expectedPassphraseState !== message.btc_test_address) {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
} else {
|
|
250
|
-
device.clearInternalState();
|
|
251
|
-
}
|
|
372
|
+
await rejectMismatchedAttachPinWallet();
|
|
373
|
+
clearCurrentWalletSession();
|
|
252
374
|
throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckPassphraseStateError);
|
|
253
375
|
}
|
|
254
376
|
}
|
|
@@ -269,17 +391,19 @@ export async function getProtocolV2WalletSession(
|
|
|
269
391
|
return {
|
|
270
392
|
passphraseState: message.btc_test_address,
|
|
271
393
|
newSession: message.session_id,
|
|
272
|
-
unlockedAttachPin:
|
|
394
|
+
unlockedAttachPin: mainWalletSelected ? false : undefined,
|
|
273
395
|
resumed,
|
|
274
396
|
};
|
|
275
397
|
}
|
|
276
398
|
|
|
277
399
|
export async function restoreProtocolV2WalletSession(
|
|
278
400
|
device: Device,
|
|
279
|
-
expectedPassphraseState: string
|
|
401
|
+
expectedPassphraseState: string,
|
|
402
|
+
deriveCardano?: boolean
|
|
280
403
|
) {
|
|
281
404
|
return getProtocolV2WalletSession(device, {
|
|
282
405
|
expectedPassphraseState,
|
|
283
406
|
resumeOnly: true,
|
|
407
|
+
deriveCardano,
|
|
284
408
|
});
|
|
285
409
|
}
|
package/src/topLevelInject.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import EventEmitter from 'events';
|
|
2
2
|
|
|
3
3
|
import { createCoreApi } from './inject';
|
|
4
|
-
import { unregisterFirmwareUpdateHostBinding } from './api/firmware/FirmwareHostBinding';
|
|
5
4
|
|
|
6
5
|
import type { ConnectSettings } from './types/settings';
|
|
7
6
|
import type { CoreApi } from './types/api';
|
|
@@ -47,10 +46,7 @@ export const topLevelInject = () => {
|
|
|
47
46
|
lowLevelApi?.removeAllListeners(type);
|
|
48
47
|
},
|
|
49
48
|
|
|
50
|
-
dispose:
|
|
51
|
-
unregisterFirmwareUpdateHostBinding();
|
|
52
|
-
await lowLevelApi?.dispose();
|
|
53
|
-
},
|
|
49
|
+
dispose: () => lowLevelApi?.dispose(),
|
|
54
50
|
|
|
55
51
|
uiResponse: response => lowLevelApi?.uiResponse(response),
|
|
56
52
|
|
|
@@ -12,7 +12,6 @@ import type {
|
|
|
12
12
|
IProtocolV2FirmwareComponentTarget,
|
|
13
13
|
} from '../settings';
|
|
14
14
|
import type { FirmwareUpdateV4Target } from './firmwareUpdate';
|
|
15
|
-
import type { FirmwareUpdatePlan, FirmwareUpdatePlanForceTarget } from './firmwareUpdatePlan';
|
|
16
15
|
|
|
17
16
|
export type FirmwareRelease = {
|
|
18
17
|
shouldUpdate?: boolean;
|
|
@@ -60,18 +59,16 @@ export type AllFirmwareRelease = {
|
|
|
60
59
|
status?: ProtocolV2FirmwareReleaseStatus;
|
|
61
60
|
hasUpgrade?: boolean;
|
|
62
61
|
required?: boolean;
|
|
62
|
+
resourceStatus?: 'valid' | 'outdated' | 'unknown';
|
|
63
63
|
currentVersions?: DeviceStateVersions;
|
|
64
64
|
components?: ProtocolV2FirmwareComponentRelease[];
|
|
65
65
|
targetsToUpdate?: FirmwareUpdateV4Target[];
|
|
66
66
|
release?: IFirmwareReleaseInfo;
|
|
67
|
-
firmwareUpdatePlan?: FirmwareUpdatePlan;
|
|
68
67
|
};
|
|
69
68
|
|
|
70
69
|
export type CheckAllFirmwareReleaseParams = {
|
|
71
70
|
checkBridgeRelease?: boolean;
|
|
72
71
|
firmwareType?: EFirmwareType;
|
|
73
|
-
platform?: 'native' | 'desktop' | 'ext' | 'web' | 'web-embed';
|
|
74
|
-
forceUpdateTargets?: FirmwareUpdatePlanForceTarget[];
|
|
75
72
|
};
|
|
76
73
|
|
|
77
74
|
export declare function checkAllFirmwareRelease(
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
import type { Success } from '@onekeyfe/hd-transport';
|
|
2
2
|
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
3
|
-
import type { FirmwareArtifactReader, FirmwareArtifactReference } from './firmwareUpdate';
|
|
4
|
-
import type { FirmwareUpdatePreparedPlan } from './firmwareUpdatePreparedPlan';
|
|
5
3
|
import type { Response } from '../params';
|
|
6
4
|
|
|
7
5
|
export type DeviceUpdateBootloaderParams = {
|
|
8
|
-
preparedPlan?: FirmwareUpdatePreparedPlan;
|
|
9
|
-
hostBindingGeneration?: number;
|
|
10
6
|
binary?: ArrayBuffer;
|
|
11
|
-
artifact?: FirmwareArtifactReference;
|
|
12
|
-
artifactReader?: FirmwareArtifactReader;
|
|
13
7
|
firmwareType?: EFirmwareType;
|
|
14
8
|
};
|
|
15
9
|
|
package/src/types/api/export.ts
CHANGED
|
@@ -25,30 +25,12 @@ export type {
|
|
|
25
25
|
DeviceUploadResourceResponse,
|
|
26
26
|
} from './deviceUploadResource';
|
|
27
27
|
export type {
|
|
28
|
-
FirmwareArtifactReader,
|
|
29
|
-
FirmwareArtifactReference,
|
|
30
|
-
FirmwareUpdateHostBinding,
|
|
31
|
-
FirmwareUpdateArtifactParams,
|
|
32
28
|
FirmwareUpdateParams,
|
|
33
29
|
FirmwareUpdateBinaryParams,
|
|
34
30
|
FirmwareUpdateV3Params,
|
|
35
31
|
FirmwareUpdateV4Params,
|
|
36
32
|
FirmwareUpdateV4Target,
|
|
37
33
|
} from './firmwareUpdate';
|
|
38
|
-
export type {
|
|
39
|
-
FirmwareUpdatePlan,
|
|
40
|
-
FirmwareUpdatePlanArtifact,
|
|
41
|
-
FirmwareUpdatePlanArtifactRole,
|
|
42
|
-
FirmwareUpdatePlanForceTarget,
|
|
43
|
-
FirmwareUpdatePlanTarget,
|
|
44
|
-
} from './firmwareUpdatePlan';
|
|
45
|
-
export type {
|
|
46
|
-
FirmwareUpdatePreparedArtifact,
|
|
47
|
-
FirmwareUpdatePreparedArtifactInput,
|
|
48
|
-
FirmwareUpdatePreparedEntry,
|
|
49
|
-
FirmwareUpdatePreparedPlan,
|
|
50
|
-
} from './firmwareUpdatePreparedPlan';
|
|
51
|
-
export type { FirmwareUpdateCapabilities } from './firmwareUpdateCapabilities';
|
|
52
34
|
export type { AllFirmwareRelease } from './checkAllFirmwareRelease';
|
|
53
35
|
export type {
|
|
54
36
|
ProtocolV2FirmwareComponentRelease,
|
|
@@ -1,53 +1,14 @@
|
|
|
1
1
|
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
2
2
|
import type { PROTO } from '../../constants';
|
|
3
3
|
import type { Params, Response } from '../params';
|
|
4
|
-
import type { FirmwareUpdatePreparedPlan } from './firmwareUpdatePreparedPlan';
|
|
5
4
|
|
|
6
5
|
type IUpdateType = 'firmware' | 'ble';
|
|
7
6
|
|
|
8
|
-
export interface FirmwareArtifactReference {
|
|
9
|
-
artifactRef: string;
|
|
10
|
-
size: number;
|
|
11
|
-
sha256: string;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface FirmwareArtifactReader {
|
|
15
|
-
open(input: { artifactRef: string }): Promise<{
|
|
16
|
-
readerId: string;
|
|
17
|
-
size: number;
|
|
18
|
-
}>;
|
|
19
|
-
read(input: { readerId: string; offset: number; length: number }): Promise<{
|
|
20
|
-
data: ArrayBuffer;
|
|
21
|
-
bytesRead: number;
|
|
22
|
-
eof: boolean;
|
|
23
|
-
}>;
|
|
24
|
-
close(input: { readerId: string }): Promise<void>;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export interface FirmwareUpdateHostBinding {
|
|
28
|
-
artifactReader: FirmwareArtifactReader;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
7
|
export interface FirmwareUpdateBinaryParams {
|
|
32
8
|
binary: ArrayBuffer;
|
|
33
9
|
updateType: IUpdateType;
|
|
34
10
|
}
|
|
35
11
|
|
|
36
|
-
export interface FirmwareUpdateArtifactParams {
|
|
37
|
-
preparedPlan: FirmwareUpdatePreparedPlan;
|
|
38
|
-
hostBindingGeneration: number;
|
|
39
|
-
artifact: FirmwareArtifactReference;
|
|
40
|
-
resourceArtifact?: FirmwareArtifactReference;
|
|
41
|
-
resourceEntries?: Array<{
|
|
42
|
-
entryName: string;
|
|
43
|
-
artifact: FirmwareArtifactReference;
|
|
44
|
-
}>;
|
|
45
|
-
updateType: IUpdateType;
|
|
46
|
-
forcedUpdateRes?: boolean;
|
|
47
|
-
isUpdateBootloader?: boolean;
|
|
48
|
-
firmwareType?: EFirmwareType;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
12
|
export interface FirmwareUpdateParams {
|
|
52
13
|
version?: number[];
|
|
53
14
|
updateType: IUpdateType;
|
|
@@ -76,14 +37,8 @@ export declare function firmwareUpdateV2(
|
|
|
76
37
|
connectId: string | undefined,
|
|
77
38
|
params: Params<FirmwareUpdateBinaryParams & Platform>
|
|
78
39
|
): Response<PROTO.Success>;
|
|
79
|
-
export declare function firmwareUpdateV2(
|
|
80
|
-
connectId: string | undefined,
|
|
81
|
-
params: Params<FirmwareUpdateArtifactParams & Platform>
|
|
82
|
-
): Response<PROTO.Success>;
|
|
83
40
|
|
|
84
41
|
export interface FirmwareUpdateV3Params {
|
|
85
|
-
preparedPlan?: FirmwareUpdatePreparedPlan;
|
|
86
|
-
hostBindingGeneration?: number;
|
|
87
42
|
bleVersion?: number[];
|
|
88
43
|
bleBinary?: ArrayBuffer;
|
|
89
44
|
chunkSize?: number;
|
|
@@ -100,17 +55,6 @@ export interface FirmwareUpdateV3Params {
|
|
|
100
55
|
firmwareType?: EFirmwareType;
|
|
101
56
|
|
|
102
57
|
platform: IPlatform;
|
|
103
|
-
|
|
104
|
-
artifactReader?: FirmwareArtifactReader;
|
|
105
|
-
artifacts?: {
|
|
106
|
-
ble?: FirmwareArtifactReference;
|
|
107
|
-
firmware?: FirmwareArtifactReference;
|
|
108
|
-
bootloader?: FirmwareArtifactReference;
|
|
109
|
-
resourceEntries?: Array<{
|
|
110
|
-
entryName: string;
|
|
111
|
-
artifact: FirmwareArtifactReference;
|
|
112
|
-
}>;
|
|
113
|
-
};
|
|
114
58
|
}
|
|
115
59
|
|
|
116
60
|
/**
|
|
@@ -129,14 +73,10 @@ export type FirmwareUpdateV4Target =
|
|
|
129
73
|
| 'se04';
|
|
130
74
|
|
|
131
75
|
export interface FirmwareUpdateV4Params {
|
|
132
|
-
preparedPlan?: FirmwareUpdatePreparedPlan;
|
|
133
|
-
hostBindingGeneration?: number;
|
|
134
76
|
platform: IPlatform;
|
|
135
|
-
expectedDeviceId?: string;
|
|
136
77
|
chunkSize?: number;
|
|
137
78
|
firmwareType?: EFirmwareType;
|
|
138
79
|
targetsToUpdate?: FirmwareUpdateV4Target[];
|
|
139
|
-
expectedTargetVersions?: Partial<Record<FirmwareUpdateV4Target, string>>;
|
|
140
80
|
|
|
141
81
|
/** FW_MGMT_TARGET_ROMLOADER = 2; Pro2 cannot install it through firmwareUpdateV4. */
|
|
142
82
|
romloaderBinary?: ArrayBuffer;
|
|
@@ -162,24 +102,8 @@ export interface FirmwareUpdateV4Params {
|
|
|
162
102
|
binary: ArrayBuffer;
|
|
163
103
|
devicePath: string;
|
|
164
104
|
}>;
|
|
165
|
-
artifactReader?: FirmwareArtifactReader;
|
|
166
|
-
componentArtifacts?: Partial<
|
|
167
|
-
Record<Exclude<FirmwareUpdateV4Target, 'resource'>, FirmwareArtifactReference>
|
|
168
|
-
>;
|
|
169
|
-
resourceBundleArtifacts?: Array<{
|
|
170
|
-
name: string;
|
|
171
|
-
artifact: FirmwareArtifactReference;
|
|
172
|
-
}>;
|
|
173
105
|
}
|
|
174
106
|
|
|
175
|
-
export declare function registerFirmwareUpdateHostBinding(
|
|
176
|
-
binding: FirmwareUpdateHostBinding
|
|
177
|
-
): number;
|
|
178
|
-
|
|
179
|
-
export declare function unregisterFirmwareUpdateHostBinding(generation?: number): boolean;
|
|
180
|
-
|
|
181
|
-
export declare function getFirmwareUpdateHostBindingGeneration(): number;
|
|
182
|
-
|
|
183
107
|
export declare function firmwareUpdateV3(
|
|
184
108
|
connectId: string | undefined,
|
|
185
109
|
params: Params<FirmwareUpdateV3Params>
|
package/src/types/api/index.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
deviceGetOnboardingStatus,
|
|
3
3
|
deviceReboot,
|
|
4
|
+
deviceUploadNft,
|
|
4
5
|
deviceUploadWallpaper,
|
|
5
6
|
testProtocolV2Ping,
|
|
6
7
|
uploadPortfolio,
|
|
@@ -30,15 +31,7 @@ import type {
|
|
|
30
31
|
firmwareUpdateV2,
|
|
31
32
|
firmwareUpdateV3,
|
|
32
33
|
firmwareUpdateV4,
|
|
33
|
-
getFirmwareUpdateHostBindingGeneration,
|
|
34
|
-
registerFirmwareUpdateHostBinding,
|
|
35
|
-
unregisterFirmwareUpdateHostBinding,
|
|
36
34
|
} from './firmwareUpdate';
|
|
37
|
-
import type { getFirmwareUpdateCapabilities } from './firmwareUpdateCapabilities';
|
|
38
|
-
import type {
|
|
39
|
-
prepareFirmwareUpdatePlan,
|
|
40
|
-
validateFirmwareUpdatePreparedPlan,
|
|
41
|
-
} from './firmwareUpdatePreparedPlan';
|
|
42
35
|
import type { promptWebDeviceAccess } from './promptWebDeviceAccess';
|
|
43
36
|
import type { deviceReset } from './deviceReset';
|
|
44
37
|
import type { deviceRecovery } from './deviceRecovery';
|
|
@@ -235,12 +228,6 @@ export type CoreApi = {
|
|
|
235
228
|
firmwareUpdateV2: typeof firmwareUpdateV2;
|
|
236
229
|
firmwareUpdateV3: typeof firmwareUpdateV3;
|
|
237
230
|
firmwareUpdateV4: typeof firmwareUpdateV4;
|
|
238
|
-
registerFirmwareUpdateHostBinding: typeof registerFirmwareUpdateHostBinding;
|
|
239
|
-
unregisterFirmwareUpdateHostBinding: typeof unregisterFirmwareUpdateHostBinding;
|
|
240
|
-
getFirmwareUpdateHostBindingGeneration: typeof getFirmwareUpdateHostBindingGeneration;
|
|
241
|
-
getFirmwareUpdateCapabilities: typeof getFirmwareUpdateCapabilities;
|
|
242
|
-
prepareFirmwareUpdatePlan: typeof prepareFirmwareUpdatePlan;
|
|
243
|
-
validateFirmwareUpdatePreparedPlan: typeof validateFirmwareUpdatePreparedPlan;
|
|
244
231
|
cipherKeyValue: typeof cipherKeyValue;
|
|
245
232
|
|
|
246
233
|
/**
|
|
@@ -248,6 +235,7 @@ export type CoreApi = {
|
|
|
248
235
|
*/
|
|
249
236
|
deviceReboot: typeof deviceReboot;
|
|
250
237
|
deviceGetOnboardingStatus: typeof deviceGetOnboardingStatus;
|
|
238
|
+
deviceUploadNft: typeof deviceUploadNft;
|
|
251
239
|
deviceUploadWallpaper: typeof deviceUploadWallpaper;
|
|
252
240
|
uploadPortfolio: typeof uploadPortfolio;
|
|
253
241
|
|
|
@@ -5,6 +5,10 @@ import type {
|
|
|
5
5
|
DeviceUploadWallpaperParams,
|
|
6
6
|
DeviceUploadWallpaperResponse,
|
|
7
7
|
} from '../../api/protocol-v2/DeviceUploadWallpaper';
|
|
8
|
+
import type {
|
|
9
|
+
DeviceUploadNftParams,
|
|
10
|
+
DeviceUploadNftResponse,
|
|
11
|
+
} from '../../api/protocol-v2/DeviceUploadNft';
|
|
8
12
|
|
|
9
13
|
// Re-export implementation parameter types as the single source of truth.
|
|
10
14
|
export type { DeviceRebootParams, RebootTypeInput } from '../../api/protocol-v2/helpers';
|
|
@@ -12,6 +16,10 @@ export type {
|
|
|
12
16
|
DeviceUploadWallpaperParams,
|
|
13
17
|
DeviceUploadWallpaperResponse,
|
|
14
18
|
} from '../../api/protocol-v2/DeviceUploadWallpaper';
|
|
19
|
+
export type {
|
|
20
|
+
DeviceUploadNftParams,
|
|
21
|
+
DeviceUploadNftResponse,
|
|
22
|
+
} from '../../api/protocol-v2/DeviceUploadNft';
|
|
15
23
|
|
|
16
24
|
// ── Shared response shapes (Protocol V2 file system) ────────────────────
|
|
17
25
|
|
|
@@ -52,6 +60,11 @@ export declare function deviceUploadWallpaper(
|
|
|
52
60
|
params: CommonParams & DeviceUploadWallpaperParams
|
|
53
61
|
): Response<DeviceUploadWallpaperResponse>;
|
|
54
62
|
|
|
63
|
+
export declare function deviceUploadNft(
|
|
64
|
+
connectId: string,
|
|
65
|
+
params: CommonParams & DeviceUploadNftParams
|
|
66
|
+
): Response<DeviceUploadNftResponse>;
|
|
67
|
+
|
|
55
68
|
export declare function uploadPortfolio(
|
|
56
69
|
connectId: string,
|
|
57
70
|
params: {
|