@onekeyfe/hd-core 1.2.0-alpha.3 → 1.2.0-alpha.4
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__/preInitialize.test.ts +33 -0
- package/__tests__/protocol-v2.test.ts +1377 -480
- package/dist/api/FileRead.d.ts.map +1 -1
- package/dist/api/FileWrite.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV4.d.ts +20 -2
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
- package/dist/api/firmware/getBinary.d.ts +4 -0
- package/dist/api/firmware/getBinary.d.ts.map +1 -1
- package/dist/api/index.d.ts +5 -10
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts +6 -0
- package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts.map +1 -0
- package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts +7 -0
- package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts.map +1 -0
- package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts +1 -1
- package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts +1 -1
- package/dist/api/protocol-v2/{DeviceGetDeviceInfo.d.ts → DeviceInfoGet.d.ts} +10 -10
- package/dist/api/protocol-v2/DeviceInfoGet.d.ts.map +1 -0
- package/dist/api/protocol-v2/{FilesystemFixPermission.d.ts → FilesystemPermissionFix.d.ts} +2 -2
- package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts.map +1 -0
- package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts +6 -0
- package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -0
- package/dist/api/protocol-v2/helpers.d.ts +24 -18
- package/dist/api/protocol-v2/helpers.d.ts.map +1 -1
- package/dist/api/ton/TonSignData.d.ts +1 -5
- package/dist/api/ton/TonSignData.d.ts.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/data-manager/DataManager.d.ts +1 -1
- 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 +4 -1
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/deviceProfile/buildDeviceFeatures.d.ts.map +1 -1
- package/dist/deviceProfile/buildDeviceProfile.d.ts.map +1 -1
- package/dist/index.d.ts +79 -54
- package/dist/index.js +1537 -1528
- package/dist/inject.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/features.d.ts +12 -14
- package/dist/protocols/protocol-v2/features.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/firmware.d.ts +10 -9
- package/dist/protocols/protocol-v2/firmware.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdate.d.ts +1 -6
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/dist/types/api/getDeviceInfo.d.ts +2 -0
- package/dist/types/api/getDeviceInfo.d.ts.map +1 -1
- package/dist/types/api/index.d.ts +6 -11
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/types/api/protocolV2.d.ts +12 -17
- package/dist/types/api/protocolV2.d.ts.map +1 -1
- package/dist/types/device.d.ts +1 -0
- 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 +29 -2
- package/dist/types/settings.d.ts.map +1 -1
- package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
- package/dist/utils/patch.d.ts +1 -1
- package/dist/utils/patch.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/FileRead.ts +14 -1
- package/src/api/FileWrite.ts +14 -1
- package/src/api/FirmwareUpdateV4.ts +933 -197
- package/src/api/GetOnekeyFeatures.ts +1 -1
- package/src/api/device/DeviceRebootToBoardloader.ts +4 -4
- package/src/api/device/DeviceRebootToBootloader.ts +4 -4
- package/src/api/firmware/FirmwareUpdateBaseMethod.ts +11 -4
- package/src/api/index.ts +5 -10
- package/src/api/protocol-v2/{FactoryGetDeviceInfo.ts → DeviceFactoryInfoGet.ts} +3 -3
- package/src/api/protocol-v2/DeviceFactoryInfoSet.ts +32 -0
- package/src/api/protocol-v2/DeviceFirmwareUpdate.ts +3 -5
- package/src/api/protocol-v2/DeviceGetFirmwareUpdateStatus.ts +2 -2
- package/src/api/protocol-v2/{DeviceGetDeviceInfo.ts → DeviceInfoGet.ts} +52 -22
- package/src/api/protocol-v2/DeviceReboot.ts +1 -1
- package/src/api/protocol-v2/{FilesystemFixPermission.ts → FilesystemPermissionFix.ts} +2 -2
- package/src/api/protocol-v2/{GetProtoVersion.ts → ProtocolInfoRequest.ts} +2 -2
- package/src/api/protocol-v2/helpers.ts +59 -43
- package/src/api/ton/TonSignData.ts +1 -5
- package/src/core/index.ts +19 -5
- package/src/data/messages/messages-protocol-v2.json +486 -1072
- package/src/data-manager/DataManager.ts +7 -0
- package/src/data-manager/connectSettings.ts +0 -6
- package/src/device/Device.ts +25 -14
- package/src/deviceProfile/buildDeviceFeatures.ts +60 -63
- package/src/deviceProfile/buildDeviceProfile.ts +77 -58
- package/src/inject.ts +10 -16
- package/src/protocols/protocol-v2/features.ts +26 -63
- package/src/protocols/protocol-v2/firmware.ts +11 -36
- package/src/types/api/firmwareUpdate.ts +10 -20
- package/src/types/api/getDeviceInfo.ts +2 -0
- package/src/types/api/index.ts +10 -20
- package/src/types/api/protocolV2.ts +22 -42
- package/src/types/device.ts +1 -0
- package/src/types/params.ts +4 -0
- package/src/types/settings.ts +44 -35
- package/src/utils/deviceFeaturesUtils.ts +45 -10
- package/dist/api/protocol-v2/DevReboot.d.ts +0 -7
- package/dist/api/protocol-v2/DevReboot.d.ts.map +0 -1
- package/dist/api/protocol-v2/DeviceGetDeviceInfo.d.ts.map +0 -1
- package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts +0 -6
- package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts.map +0 -1
- package/dist/api/protocol-v2/FactoryDeviceInfoSettings.d.ts +0 -7
- package/dist/api/protocol-v2/FactoryDeviceInfoSettings.d.ts.map +0 -1
- package/dist/api/protocol-v2/FactoryGetDeviceInfo.d.ts +0 -6
- package/dist/api/protocol-v2/FactoryGetDeviceInfo.d.ts.map +0 -1
- package/dist/api/protocol-v2/FilesystemFixPermission.d.ts.map +0 -1
- package/dist/api/protocol-v2/GetProtoVersion.d.ts +0 -6
- package/dist/api/protocol-v2/GetProtoVersion.d.ts.map +0 -1
- package/src/api/protocol-v2/DevReboot.ts +0 -24
- package/src/api/protocol-v2/DeviceGetOnboardingStatus.ts +0 -16
- package/src/api/protocol-v2/FactoryDeviceInfoSettings.ts +0 -29
|
@@ -34,6 +34,7 @@ const Log = getLogger(LoggerNames.Core);
|
|
|
34
34
|
|
|
35
35
|
export const FIRMWARE_FIELDS = [
|
|
36
36
|
'firmware',
|
|
37
|
+
'firmware-v1',
|
|
37
38
|
'firmware-v2',
|
|
38
39
|
'firmware-v8',
|
|
39
40
|
'firmware-btc-v8',
|
|
@@ -46,6 +47,7 @@ export type ProtobufMessageSchema = ProtocolV1MessageSchema | 'v2Schema';
|
|
|
46
47
|
|
|
47
48
|
const FIRMWARE_FIELD_TYPE_MAP: Readonly<Record<IFirmwareField, EFirmwareType>> = {
|
|
48
49
|
firmware: EFirmwareType.Universal,
|
|
50
|
+
'firmware-v1': EFirmwareType.Universal,
|
|
49
51
|
'firmware-v2': EFirmwareType.Universal,
|
|
50
52
|
'firmware-v8': EFirmwareType.Universal,
|
|
51
53
|
'firmware-btc-v8': EFirmwareType.BitcoinOnly,
|
|
@@ -87,6 +89,10 @@ export default class DataManager {
|
|
|
87
89
|
firmware: [],
|
|
88
90
|
ble: [],
|
|
89
91
|
},
|
|
92
|
+
[EDeviceType.Pro2]: {
|
|
93
|
+
firmware: [],
|
|
94
|
+
ble: [],
|
|
95
|
+
},
|
|
90
96
|
[EDeviceType.ClassicPure]: {
|
|
91
97
|
firmware: [],
|
|
92
98
|
ble: [],
|
|
@@ -447,6 +453,7 @@ export default class DataManager {
|
|
|
447
453
|
[EDeviceType.Mini]: this.enrichFirmwareReleaseInfo(data.mini),
|
|
448
454
|
[EDeviceType.Touch]: this.enrichFirmwareReleaseInfo(data.touch),
|
|
449
455
|
[EDeviceType.Pro]: this.enrichFirmwareReleaseInfo(data.pro),
|
|
456
|
+
[EDeviceType.Pro2]: this.enrichFirmwareReleaseInfo(data.pro2),
|
|
450
457
|
};
|
|
451
458
|
this.assets = {
|
|
452
459
|
bridge: data.bridge,
|
|
@@ -27,8 +27,6 @@ const initialSettings: ConnectSettings = {
|
|
|
27
27
|
env: 'web',
|
|
28
28
|
lazyLoad: false,
|
|
29
29
|
timestamp: new Date().getTime(),
|
|
30
|
-
// 临时开关:仅用于本地/测试固件兼容;正式链路默认调用真实 DevGetDeviceInfo。
|
|
31
|
-
protocolV2DeviceInfoMockEnabled: false,
|
|
32
30
|
};
|
|
33
31
|
|
|
34
32
|
export const getEnv = () => {
|
|
@@ -117,10 +115,6 @@ export const parseConnectSettings = (input: Partial<ConnectSettings> = {}) => {
|
|
|
117
115
|
settings.fetchConfig = input.fetchConfig;
|
|
118
116
|
}
|
|
119
117
|
|
|
120
|
-
if (typeof input.protocolV2DeviceInfoMockEnabled === 'boolean') {
|
|
121
|
-
settings.protocolV2DeviceInfoMockEnabled = input.protocolV2DeviceInfoMockEnabled;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
118
|
return settings;
|
|
125
119
|
};
|
|
126
120
|
|
package/src/device/Device.ts
CHANGED
|
@@ -76,6 +76,7 @@ export type InitOptions = {
|
|
|
76
76
|
passphraseState?: string;
|
|
77
77
|
deriveCardano?: boolean;
|
|
78
78
|
connectProtocol?: HardwareConnectProtocol;
|
|
79
|
+
protocolV2DeviceInfoTimeoutMs?: number;
|
|
79
80
|
};
|
|
80
81
|
|
|
81
82
|
export type RunOptions = {
|
|
@@ -187,7 +188,7 @@ export class Device extends EventEmitter {
|
|
|
187
188
|
/**
|
|
188
189
|
* 唯一设备状态缓存。
|
|
189
190
|
*
|
|
190
|
-
* V1 直接保存原生 Features;V2 保存由
|
|
191
|
+
* V1 直接保存原生 Features;V2 保存由 DeviceInfoGet 映射出的
|
|
191
192
|
* Features 视图。Device 不再保存 profile,结构化 DeviceProfile 只作为
|
|
192
193
|
* getDeviceInfo() 的 API 返回值存在。
|
|
193
194
|
*/
|
|
@@ -197,7 +198,7 @@ export class Device extends EventEmitter {
|
|
|
197
198
|
* 是否需要更新设备信息。
|
|
198
199
|
*
|
|
199
200
|
* 历史名称保留用于兼容现有调用语义;对 V2 表示 features 需要由
|
|
200
|
-
*
|
|
201
|
+
* DeviceInfoGet 刷新。
|
|
201
202
|
*/
|
|
202
203
|
featuresNeedsReload = false;
|
|
203
204
|
|
|
@@ -326,7 +327,10 @@ export class Device extends EventEmitter {
|
|
|
326
327
|
});
|
|
327
328
|
}
|
|
328
329
|
|
|
329
|
-
async acquire(
|
|
330
|
+
async acquire(
|
|
331
|
+
connectProtocol?: HardwareConnectProtocol,
|
|
332
|
+
options?: { throwOnRunPromiseError?: boolean }
|
|
333
|
+
) {
|
|
330
334
|
const env = DataManager.getSettings('env');
|
|
331
335
|
const mainIdKey = DataManager.isBleConnect(env) ? 'id' : 'session';
|
|
332
336
|
const expectedProtocol = connectProtocol ?? this.originalDescriptor.protocolType;
|
|
@@ -375,6 +379,9 @@ export class Device extends EventEmitter {
|
|
|
375
379
|
|
|
376
380
|
this.commands = new DeviceCommands(this, this.mainId ?? '');
|
|
377
381
|
} catch (error) {
|
|
382
|
+
if (options?.throwOnRunPromiseError) {
|
|
383
|
+
throw error;
|
|
384
|
+
}
|
|
378
385
|
if (this.runPromise) {
|
|
379
386
|
this.runPromise.reject(error);
|
|
380
387
|
} else {
|
|
@@ -477,7 +484,7 @@ export class Device extends EventEmitter {
|
|
|
477
484
|
/**
|
|
478
485
|
* 唯一协议判别器。
|
|
479
486
|
*
|
|
480
|
-
* descriptor.protocolType 是协议探测后的结果;V2 features 由
|
|
487
|
+
* descriptor.protocolType 是协议探测后的结果;V2 features 由 DeviceInfoGet
|
|
481
488
|
* 映射产生。
|
|
482
489
|
* 全 SDK 的协议分支都必须走这里,不要直接读 originalDescriptor.protocolType
|
|
483
490
|
* 或从 features 反推。
|
|
@@ -506,9 +513,8 @@ export class Device extends EventEmitter {
|
|
|
506
513
|
const serialNo = this.getCurrentSerialNo();
|
|
507
514
|
if (serialNo) return serialNo;
|
|
508
515
|
|
|
509
|
-
// connectId 是 SDK 内部连接路由 key
|
|
510
|
-
//
|
|
511
|
-
// features.serialNo / deviceId 的业务语义。
|
|
516
|
+
// connectId 是 SDK 内部连接路由 key。这里兜底到 transport descriptor,
|
|
517
|
+
// 不改变 features.serialNo / deviceId 的业务语义。
|
|
512
518
|
return this.originalDescriptor.path || this.originalDescriptor.id || '';
|
|
513
519
|
}
|
|
514
520
|
|
|
@@ -741,13 +747,16 @@ export class Device extends EventEmitter {
|
|
|
741
747
|
if (this.isProtocolV2()) {
|
|
742
748
|
this.passphraseState = options?.passphraseState;
|
|
743
749
|
if (this.features && !this.featuresNeedsReload && !options?.initSession) {
|
|
750
|
+
if (this.features.bootloaderMode) {
|
|
751
|
+
return;
|
|
752
|
+
}
|
|
744
753
|
// 不能直接信任缓存 features:设备端 wipe / 完成初始化 / 改 label 后
|
|
745
754
|
// features 会永久陈旧。每次 run 做一次轻量 status 刷新(不含 fw/SE),
|
|
746
755
|
// 用字段级合并保留已有版本和 SE 信息。
|
|
747
|
-
await this._refreshProtocolV2Status();
|
|
756
|
+
await this._refreshProtocolV2Status(options);
|
|
748
757
|
return;
|
|
749
758
|
}
|
|
750
|
-
await this._initializeProtocolV2();
|
|
759
|
+
await this._initializeProtocolV2(options);
|
|
751
760
|
return;
|
|
752
761
|
}
|
|
753
762
|
|
|
@@ -797,10 +806,10 @@ export class Device extends EventEmitter {
|
|
|
797
806
|
/**
|
|
798
807
|
* Device initialization over Protocol V2.
|
|
799
808
|
*
|
|
800
|
-
* Protocol V2 不走传统 Initialize/GetFeatures;直接用
|
|
809
|
+
* Protocol V2 不走传统 Initialize/GetFeatures;直接用 DeviceInfoGet
|
|
801
810
|
* 生成唯一的 features 状态。
|
|
802
811
|
*/
|
|
803
|
-
private async _initializeProtocolV2() {
|
|
812
|
+
private async _initializeProtocolV2(options?: InitOptions) {
|
|
804
813
|
Log.debug('Initialize device via Protocol V2 features adapter');
|
|
805
814
|
|
|
806
815
|
try {
|
|
@@ -809,6 +818,7 @@ export class Device extends EventEmitter {
|
|
|
809
818
|
// 且 reject 后底层调用仍会残留。
|
|
810
819
|
const deviceInfo = await requestProtocolV2DeviceInfo({
|
|
811
820
|
commands: this.commands,
|
|
821
|
+
timeoutMs: options?.protocolV2DeviceInfoTimeoutMs,
|
|
812
822
|
});
|
|
813
823
|
// 默认请求不含 SE/hash 数据,scope 如实标注为 basic;
|
|
814
824
|
// 完整数据由 getDeviceInfo(scope:'verify'|'full') 获取。
|
|
@@ -824,15 +834,16 @@ export class Device extends EventEmitter {
|
|
|
824
834
|
/**
|
|
825
835
|
* Protocol V2 的轻量状态刷新(每次 run 前调用)。
|
|
826
836
|
*
|
|
827
|
-
* 请求 hw +
|
|
828
|
-
*
|
|
837
|
+
* 请求 hw + coprocessor + status(不含 fw/SE target):status 提供 init_states / label /
|
|
838
|
+
* passphrase_enabled 等会在设备端变化的字段;hw/coprocessor 提供 serialNo / bleName。
|
|
829
839
|
* versions 为空时按字段级合并保留旧值,verify 数据不会被降级。
|
|
830
840
|
*/
|
|
831
|
-
private async _refreshProtocolV2Status() {
|
|
841
|
+
private async _refreshProtocolV2Status(options?: InitOptions) {
|
|
832
842
|
try {
|
|
833
843
|
const deviceInfo = await requestProtocolV2DeviceInfo({
|
|
834
844
|
commands: this.commands,
|
|
835
845
|
request: PROTOCOL_V2_STATUS_DEVICE_INFO_REQUEST,
|
|
846
|
+
timeoutMs: options?.protocolV2DeviceInfoTimeoutMs,
|
|
836
847
|
});
|
|
837
848
|
const features = this.updateProtocolV2Features(deviceInfo);
|
|
838
849
|
Log.debug('Protocol V2 features (status refresh):', features);
|
|
@@ -2,22 +2,8 @@ import { EDeviceType, EFirmwareType } from '@onekeyfe/hd-shared';
|
|
|
2
2
|
|
|
3
3
|
import type { Features } from '../types';
|
|
4
4
|
import type { PROTO } from '../constants';
|
|
5
|
-
import type {
|
|
6
|
-
|
|
7
|
-
type ProtocolV2DeviceInfoCompat = ProtocolV2DeviceInfo & {
|
|
8
|
-
fw?: ProtocolV2DeviceInfo['fw'] & {
|
|
9
|
-
application?: DevFirmwareImageInfo | null;
|
|
10
|
-
application_data?: DevFirmwareImageInfo | null;
|
|
11
|
-
bootloader?: DevFirmwareImageInfo | null;
|
|
12
|
-
romloader?: DevFirmwareImageInfo | null;
|
|
13
|
-
};
|
|
14
|
-
coprocessor?: {
|
|
15
|
-
application?: DevFirmwareImageInfo | null;
|
|
16
|
-
bootloader?: DevFirmwareImageInfo | null;
|
|
17
|
-
bt_adv_name?: string | null;
|
|
18
|
-
bt_mac?: unknown;
|
|
19
|
-
} | null;
|
|
20
|
-
};
|
|
5
|
+
import type { DeviceFirmwareImageInfo, ProtocolV2DeviceInfo } from '@onekeyfe/hd-transport';
|
|
6
|
+
import { isProtocolV2BootloaderDeviceInfo } from '../protocols/protocol-v2/features';
|
|
21
7
|
|
|
22
8
|
type ProtocolV1FeaturesCompat = PROTO.Features &
|
|
23
9
|
Partial<PROTO.OnekeyFeatures> & {
|
|
@@ -26,7 +12,7 @@ type ProtocolV1FeaturesCompat = PROTO.Features &
|
|
|
26
12
|
onekey_serial?: string;
|
|
27
13
|
};
|
|
28
14
|
|
|
29
|
-
const getImageVersion = (image?:
|
|
15
|
+
const getImageVersion = (image?: DeviceFirmwareImageInfo | null) => image?.version ?? null;
|
|
30
16
|
|
|
31
17
|
const bytesToHex = (value: unknown): string | undefined => {
|
|
32
18
|
if (!value) return undefined;
|
|
@@ -42,9 +28,9 @@ const bytesToHex = (value: unknown): string | undefined => {
|
|
|
42
28
|
return undefined;
|
|
43
29
|
};
|
|
44
30
|
|
|
45
|
-
const getImageBuildId = (image?:
|
|
31
|
+
const getImageBuildId = (image?: DeviceFirmwareImageInfo | null) => image?.build_id ?? undefined;
|
|
46
32
|
|
|
47
|
-
const getImageHash = (image?:
|
|
33
|
+
const getImageHash = (image?: DeviceFirmwareImageInfo | null) => bytesToHex(image?.hash);
|
|
48
34
|
|
|
49
35
|
const firstValue = <T>(...values: Array<T | null | undefined>) =>
|
|
50
36
|
values.find(value => value !== undefined && value !== null);
|
|
@@ -226,7 +212,7 @@ export const buildProtocolV1FeaturesPayload = (
|
|
|
226
212
|
/**
|
|
227
213
|
* Protocol V2 的结构化 `Features` 构建器。
|
|
228
214
|
*
|
|
229
|
-
* 这是 Device 内部唯一缓存状态。字段只来自
|
|
215
|
+
* 这是 Device 内部唯一缓存状态。字段只来自 DeviceInfoGet 或前一次 features
|
|
230
216
|
* 缓存的同名字段级合并;不存在协议等价语义的字段保持 null/空值,不再通过
|
|
231
217
|
* DeviceProfile 或 transport path 做身份兜底。
|
|
232
218
|
*/
|
|
@@ -234,11 +220,12 @@ export const buildProtocolV2FeaturesPayload = (
|
|
|
234
220
|
deviceInfo?: ProtocolV2DeviceInfo,
|
|
235
221
|
previous?: Features
|
|
236
222
|
): Features => {
|
|
237
|
-
const info = deviceInfo
|
|
238
|
-
const fwApplication =
|
|
239
|
-
const fwBootloader =
|
|
240
|
-
const fwBoard = firstValue(info?.fw?.application_data, info?.fw?.
|
|
241
|
-
const bleApplication =
|
|
223
|
+
const info = deviceInfo;
|
|
224
|
+
const fwApplication = info?.fw?.application;
|
|
225
|
+
const fwBootloader = info?.fw?.bootloader;
|
|
226
|
+
const fwBoard = firstValue(info?.fw?.application_data, info?.fw?.romloader);
|
|
227
|
+
const bleApplication = info?.coprocessor?.application;
|
|
228
|
+
const status = info?.status;
|
|
242
229
|
|
|
243
230
|
const firmwareVersion = firstMeaningfulVersion(
|
|
244
231
|
getImageVersion(fwApplication),
|
|
@@ -250,17 +237,26 @@ export const buildProtocolV2FeaturesPayload = (
|
|
|
250
237
|
);
|
|
251
238
|
const boardVersion = firstMeaningfulVersion(getImageVersion(fwBoard), previous?.boardVersion);
|
|
252
239
|
const bleVersion = firstMeaningfulVersion(getImageVersion(bleApplication), previous?.bleVersion);
|
|
253
|
-
const deviceId =
|
|
240
|
+
const deviceId = status?.device_id ?? null;
|
|
254
241
|
const serialNo = firstValue(info?.hw?.serial_no, previous?.serialNo) ?? '';
|
|
255
|
-
const label =
|
|
256
|
-
const bleName = firstValue(info?.coprocessor?.bt_adv_name,
|
|
257
|
-
const initialized = firstValue(
|
|
258
|
-
const passphraseProtection =
|
|
259
|
-
|
|
260
|
-
const
|
|
261
|
-
const
|
|
262
|
-
|
|
263
|
-
const
|
|
242
|
+
const label = previous?.label ?? null;
|
|
243
|
+
const bleName = firstValue(info?.coprocessor?.bt_adv_name, previous?.bleName);
|
|
244
|
+
const initialized = firstValue(status?.init_states, previous?.initialized) ?? null;
|
|
245
|
+
const passphraseProtection = status?.passphrase_enabled ?? null;
|
|
246
|
+
const language = previous?.language ?? null;
|
|
247
|
+
const backupRequired = firstValue(status?.backup_required, previous?.backupRequired) ?? null;
|
|
248
|
+
const bleEnabled = previous?.bleEnabled;
|
|
249
|
+
const unlocked = firstValue(status?.unlocked, previous?.unlocked) ?? null;
|
|
250
|
+
const attachToPinEnabled = status?.attach_to_pin_enabled ?? null;
|
|
251
|
+
const unlockedAttachPin = status?.unlocked_by_attach_to_pin ?? undefined;
|
|
252
|
+
const bootloaderMode = isProtocolV2BootloaderDeviceInfo(info);
|
|
253
|
+
const mode = bootloaderMode
|
|
254
|
+
? 'bootloader'
|
|
255
|
+
: initialized === false
|
|
256
|
+
? 'notInitialized'
|
|
257
|
+
: initialized === true
|
|
258
|
+
? 'normal'
|
|
259
|
+
: 'unknown';
|
|
264
260
|
|
|
265
261
|
return {
|
|
266
262
|
protocol: 'V2',
|
|
@@ -274,10 +270,10 @@ export const buildProtocolV2FeaturesPayload = (
|
|
|
274
270
|
label,
|
|
275
271
|
bleName: bleName ?? null,
|
|
276
272
|
capabilities: [],
|
|
277
|
-
mode
|
|
273
|
+
mode,
|
|
278
274
|
initialized,
|
|
279
|
-
bootloaderMode
|
|
280
|
-
unlocked
|
|
275
|
+
bootloaderMode,
|
|
276
|
+
unlocked,
|
|
281
277
|
firmwarePresent: previous?.firmwarePresent ?? null,
|
|
282
278
|
passphraseProtection,
|
|
283
279
|
pinProtection: null,
|
|
@@ -291,6 +287,7 @@ export const buildProtocolV2FeaturesPayload = (
|
|
|
291
287
|
sdProtection: null,
|
|
292
288
|
wipeCodeProtection: null,
|
|
293
289
|
passphraseAlwaysOnDevice: null,
|
|
290
|
+
attachToPinEnabled,
|
|
294
291
|
safetyChecks: null,
|
|
295
292
|
autoLockDelayMs: null,
|
|
296
293
|
displayRotation: null,
|
|
@@ -300,35 +297,35 @@ export const buildProtocolV2FeaturesPayload = (
|
|
|
300
297
|
boardVersion,
|
|
301
298
|
bleVersion,
|
|
302
299
|
se01Version: firstMeaningfulVersion(
|
|
303
|
-
getImageVersion(
|
|
300
|
+
getImageVersion(info?.se1?.application),
|
|
304
301
|
previous?.se01Version
|
|
305
302
|
),
|
|
306
303
|
se02Version: firstMeaningfulVersion(
|
|
307
|
-
getImageVersion(
|
|
304
|
+
getImageVersion(info?.se2?.application),
|
|
308
305
|
previous?.se02Version
|
|
309
306
|
),
|
|
310
307
|
se03Version: firstMeaningfulVersion(
|
|
311
|
-
getImageVersion(
|
|
308
|
+
getImageVersion(info?.se3?.application),
|
|
312
309
|
previous?.se03Version
|
|
313
310
|
),
|
|
314
311
|
se04Version: firstMeaningfulVersion(
|
|
315
|
-
getImageVersion(
|
|
312
|
+
getImageVersion(info?.se4?.application),
|
|
316
313
|
previous?.se04Version
|
|
317
314
|
),
|
|
318
315
|
se01BootVersion: firstMeaningfulVersion(
|
|
319
|
-
getImageVersion(
|
|
316
|
+
getImageVersion(info?.se1?.bootloader),
|
|
320
317
|
previous?.se01BootVersion
|
|
321
318
|
),
|
|
322
319
|
se02BootVersion: firstMeaningfulVersion(
|
|
323
|
-
getImageVersion(
|
|
320
|
+
getImageVersion(info?.se2?.bootloader),
|
|
324
321
|
previous?.se02BootVersion
|
|
325
322
|
),
|
|
326
323
|
se03BootVersion: firstMeaningfulVersion(
|
|
327
|
-
getImageVersion(
|
|
324
|
+
getImageVersion(info?.se3?.bootloader),
|
|
328
325
|
previous?.se03BootVersion
|
|
329
326
|
),
|
|
330
327
|
se04BootVersion: firstMeaningfulVersion(
|
|
331
|
-
getImageVersion(
|
|
328
|
+
getImageVersion(info?.se4?.bootloader),
|
|
332
329
|
previous?.se04BootVersion
|
|
333
330
|
),
|
|
334
331
|
seVersion: previous?.seVersion ?? null,
|
|
@@ -341,26 +338,26 @@ export const buildProtocolV2FeaturesPayload = (
|
|
|
341
338
|
boardHash: getImageHash(fwBoard) ?? previous?.verify?.boardHash,
|
|
342
339
|
bleBuildId: getImageBuildId(bleApplication) ?? previous?.verify?.bleBuildId,
|
|
343
340
|
bleHash: getImageHash(bleApplication) ?? previous?.verify?.bleHash,
|
|
344
|
-
se01BuildId: getImageBuildId(
|
|
345
|
-
se01Hash: getImageHash(
|
|
346
|
-
se02BuildId: getImageBuildId(
|
|
347
|
-
se02Hash: getImageHash(
|
|
348
|
-
se03BuildId: getImageBuildId(
|
|
349
|
-
se03Hash: getImageHash(
|
|
350
|
-
se04BuildId: getImageBuildId(
|
|
351
|
-
se04Hash: getImageHash(
|
|
352
|
-
se01BootBuildId: getImageBuildId(
|
|
353
|
-
se01BootHash: getImageHash(
|
|
354
|
-
se02BootBuildId: getImageBuildId(
|
|
355
|
-
se02BootHash: getImageHash(
|
|
356
|
-
se03BootBuildId: getImageBuildId(
|
|
357
|
-
se03BootHash: getImageHash(
|
|
358
|
-
se04BootBuildId: getImageBuildId(
|
|
359
|
-
se04BootHash: getImageHash(
|
|
341
|
+
se01BuildId: getImageBuildId(info?.se1?.application) ?? previous?.verify?.se01BuildId,
|
|
342
|
+
se01Hash: getImageHash(info?.se1?.application) ?? previous?.verify?.se01Hash,
|
|
343
|
+
se02BuildId: getImageBuildId(info?.se2?.application) ?? previous?.verify?.se02BuildId,
|
|
344
|
+
se02Hash: getImageHash(info?.se2?.application) ?? previous?.verify?.se02Hash,
|
|
345
|
+
se03BuildId: getImageBuildId(info?.se3?.application) ?? previous?.verify?.se03BuildId,
|
|
346
|
+
se03Hash: getImageHash(info?.se3?.application) ?? previous?.verify?.se03Hash,
|
|
347
|
+
se04BuildId: getImageBuildId(info?.se4?.application) ?? previous?.verify?.se04BuildId,
|
|
348
|
+
se04Hash: getImageHash(info?.se4?.application) ?? previous?.verify?.se04Hash,
|
|
349
|
+
se01BootBuildId: getImageBuildId(info?.se1?.bootloader) ?? previous?.verify?.se01BootBuildId,
|
|
350
|
+
se01BootHash: getImageHash(info?.se1?.bootloader) ?? previous?.verify?.se01BootHash,
|
|
351
|
+
se02BootBuildId: getImageBuildId(info?.se2?.bootloader) ?? previous?.verify?.se02BootBuildId,
|
|
352
|
+
se02BootHash: getImageHash(info?.se2?.bootloader) ?? previous?.verify?.se02BootHash,
|
|
353
|
+
se03BootBuildId: getImageBuildId(info?.se3?.bootloader) ?? previous?.verify?.se03BootBuildId,
|
|
354
|
+
se03BootHash: getImageHash(info?.se3?.bootloader) ?? previous?.verify?.se03BootHash,
|
|
355
|
+
se04BootBuildId: getImageBuildId(info?.se4?.bootloader) ?? previous?.verify?.se04BootBuildId,
|
|
356
|
+
se04BootHash: getImageHash(info?.se4?.bootloader) ?? previous?.verify?.se04BootHash,
|
|
360
357
|
},
|
|
361
358
|
sessionId: previous?.sessionId ?? null,
|
|
362
359
|
passphraseState: previous?.passphraseState,
|
|
363
|
-
unlockedAttachPin
|
|
360
|
+
unlockedAttachPin,
|
|
364
361
|
raw: {
|
|
365
362
|
protocolV2DeviceInfo: deviceInfo,
|
|
366
363
|
},
|
|
@@ -25,7 +25,8 @@ import type {
|
|
|
25
25
|
GetDeviceInfoParams,
|
|
26
26
|
} from '../types/api/getDeviceInfo';
|
|
27
27
|
import type { Features, OnekeyFeatures } from '../types';
|
|
28
|
-
import type {
|
|
28
|
+
import type { DeviceFirmwareImageInfo, ProtocolV2DeviceInfo } from '@onekeyfe/hd-transport';
|
|
29
|
+
import { isProtocolV2BootloaderDeviceInfo } from '../protocols/protocol-v2/features';
|
|
29
30
|
|
|
30
31
|
type BuildProtocolV1ProfileParams = {
|
|
31
32
|
protocol?: DeviceInfoProtocol;
|
|
@@ -68,11 +69,11 @@ const bytesToHex = (value: unknown): string | undefined => {
|
|
|
68
69
|
return undefined;
|
|
69
70
|
};
|
|
70
71
|
|
|
71
|
-
const getImageVersion = (image?:
|
|
72
|
+
const getImageVersion = (image?: DeviceFirmwareImageInfo | null) => image?.version ?? null;
|
|
72
73
|
|
|
73
|
-
const getImageBuildId = (image?:
|
|
74
|
+
const getImageBuildId = (image?: DeviceFirmwareImageInfo | null) => image?.build_id ?? undefined;
|
|
74
75
|
|
|
75
|
-
const getImageHash = (image?:
|
|
76
|
+
const getImageHash = (image?: DeviceFirmwareImageInfo | null) => bytesToHex(image?.hash);
|
|
76
77
|
|
|
77
78
|
const shouldIncludeVerify = (scope?: GetDeviceInfoParams['scope']) =>
|
|
78
79
|
scope === 'verify' || scope === 'full';
|
|
@@ -86,6 +87,7 @@ const getDeviceMode = (features?: Features): DeviceInfoStatus['mode'] => {
|
|
|
86
87
|
};
|
|
87
88
|
|
|
88
89
|
const getProtocolV2Mode = (deviceInfo?: ProtocolV2DeviceInfo): DeviceInfoStatus['mode'] => {
|
|
90
|
+
if (isProtocolV2BootloaderDeviceInfo(deviceInfo)) return 'bootloader';
|
|
89
91
|
const initialized = deviceInfo?.status?.init_states;
|
|
90
92
|
if (initialized === false) return 'notInitialized';
|
|
91
93
|
if (initialized === true) return 'normal';
|
|
@@ -147,20 +149,25 @@ const normalizeV1Versions = (
|
|
|
147
149
|
),
|
|
148
150
|
});
|
|
149
151
|
|
|
150
|
-
const normalizeV2Versions = (deviceInfo?: ProtocolV2DeviceInfo): DeviceProfileVersions =>
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
152
|
+
const normalizeV2Versions = (deviceInfo?: ProtocolV2DeviceInfo): DeviceProfileVersions => {
|
|
153
|
+
const info = deviceInfo;
|
|
154
|
+
return {
|
|
155
|
+
firmware: firstMeaningfulVersion(getImageVersion(info?.fw?.application)),
|
|
156
|
+
bootloader: firstMeaningfulVersion(getImageVersion(info?.fw?.bootloader)),
|
|
157
|
+
board: firstMeaningfulVersion(
|
|
158
|
+
getImageVersion(info?.fw?.application_data ?? info?.fw?.romloader)
|
|
159
|
+
),
|
|
160
|
+
ble: firstMeaningfulVersion(getImageVersion(info?.coprocessor?.application)),
|
|
161
|
+
se01: firstMeaningfulVersion(getImageVersion(info?.se1?.application)),
|
|
162
|
+
se02: firstMeaningfulVersion(getImageVersion(info?.se2?.application)),
|
|
163
|
+
se03: firstMeaningfulVersion(getImageVersion(info?.se3?.application)),
|
|
164
|
+
se04: firstMeaningfulVersion(getImageVersion(info?.se4?.application)),
|
|
165
|
+
se01Boot: firstMeaningfulVersion(getImageVersion(info?.se1?.bootloader)),
|
|
166
|
+
se02Boot: firstMeaningfulVersion(getImageVersion(info?.se2?.bootloader)),
|
|
167
|
+
se03Boot: firstMeaningfulVersion(getImageVersion(info?.se3?.bootloader)),
|
|
168
|
+
se04Boot: firstMeaningfulVersion(getImageVersion(info?.se4?.bootloader)),
|
|
169
|
+
};
|
|
170
|
+
};
|
|
164
171
|
|
|
165
172
|
// V2 状态由 normalizeV2Status 处理,这里只服务 buildProfileFromProtocolV1 的 V1 路径。
|
|
166
173
|
const normalizeV1Status = (features?: Features): DeviceInfoStatus => ({
|
|
@@ -169,23 +176,31 @@ const normalizeV1Status = (features?: Features): DeviceInfoStatus => ({
|
|
|
169
176
|
bootloaderMode: features?.bootloaderMode ?? null,
|
|
170
177
|
unlocked: features?.unlocked ?? null,
|
|
171
178
|
passphraseProtection: features?.passphraseProtection ?? null,
|
|
179
|
+
attachToPinEnabled: features?.attachToPinEnabled ?? null,
|
|
180
|
+
unlockedAttachPin: features?.unlockedAttachPin ?? null,
|
|
172
181
|
backupRequired: features?.backupRequired ?? null,
|
|
173
182
|
noBackup: features?.noBackup ?? null,
|
|
174
183
|
language: features?.language ?? null,
|
|
175
184
|
bleEnabled: features?.bleEnabled ?? null,
|
|
176
185
|
});
|
|
177
186
|
|
|
178
|
-
const normalizeV2Status = (deviceInfo?: ProtocolV2DeviceInfo): DeviceInfoStatus =>
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
187
|
+
const normalizeV2Status = (deviceInfo?: ProtocolV2DeviceInfo): DeviceInfoStatus => {
|
|
188
|
+
const status = deviceInfo?.status;
|
|
189
|
+
const bootloaderMode = isProtocolV2BootloaderDeviceInfo(deviceInfo);
|
|
190
|
+
return {
|
|
191
|
+
mode: getProtocolV2Mode(deviceInfo),
|
|
192
|
+
initialized: status?.init_states ?? null,
|
|
193
|
+
bootloaderMode,
|
|
194
|
+
unlocked: status?.unlocked ?? null,
|
|
195
|
+
passphraseProtection: status?.passphrase_enabled ?? null,
|
|
196
|
+
attachToPinEnabled: status?.attach_to_pin_enabled ?? null,
|
|
197
|
+
unlockedAttachPin: status?.unlocked_by_attach_to_pin ?? null,
|
|
198
|
+
backupRequired: status?.backup_required ?? null,
|
|
199
|
+
noBackup: null,
|
|
200
|
+
language: null,
|
|
201
|
+
bleEnabled: null,
|
|
202
|
+
};
|
|
203
|
+
};
|
|
189
204
|
|
|
190
205
|
const normalizeV1Verify = (
|
|
191
206
|
features?: Features,
|
|
@@ -223,32 +238,35 @@ const normalizeV1Verify = (
|
|
|
223
238
|
se04BootHash: protocolV1OneKeyFeatures?.onekey_se04_boot_hash ?? features?.verify?.se04BootHash,
|
|
224
239
|
});
|
|
225
240
|
|
|
226
|
-
const normalizeV2Verify = (deviceInfo?: ProtocolV2DeviceInfo): DeviceProfileVerify =>
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
241
|
+
const normalizeV2Verify = (deviceInfo?: ProtocolV2DeviceInfo): DeviceProfileVerify => {
|
|
242
|
+
const info = deviceInfo;
|
|
243
|
+
return {
|
|
244
|
+
firmwareBuildId: getImageBuildId(info?.fw?.application),
|
|
245
|
+
firmwareHash: getImageHash(info?.fw?.application),
|
|
246
|
+
bootloaderBuildId: getImageBuildId(info?.fw?.bootloader),
|
|
247
|
+
bootloaderHash: getImageHash(info?.fw?.bootloader),
|
|
248
|
+
boardBuildId: getImageBuildId(info?.fw?.application_data ?? info?.fw?.romloader),
|
|
249
|
+
boardHash: getImageHash(info?.fw?.application_data ?? info?.fw?.romloader),
|
|
250
|
+
bleBuildId: getImageBuildId(info?.coprocessor?.application),
|
|
251
|
+
bleHash: getImageHash(info?.coprocessor?.application),
|
|
252
|
+
se01BuildId: getImageBuildId(info?.se1?.application),
|
|
253
|
+
se01Hash: getImageHash(info?.se1?.application),
|
|
254
|
+
se02BuildId: getImageBuildId(info?.se2?.application),
|
|
255
|
+
se02Hash: getImageHash(info?.se2?.application),
|
|
256
|
+
se03BuildId: getImageBuildId(info?.se3?.application),
|
|
257
|
+
se03Hash: getImageHash(info?.se3?.application),
|
|
258
|
+
se04BuildId: getImageBuildId(info?.se4?.application),
|
|
259
|
+
se04Hash: getImageHash(info?.se4?.application),
|
|
260
|
+
se01BootBuildId: getImageBuildId(info?.se1?.bootloader),
|
|
261
|
+
se01BootHash: getImageHash(info?.se1?.bootloader),
|
|
262
|
+
se02BootBuildId: getImageBuildId(info?.se2?.bootloader),
|
|
263
|
+
se02BootHash: getImageHash(info?.se2?.bootloader),
|
|
264
|
+
se03BootBuildId: getImageBuildId(info?.se3?.bootloader),
|
|
265
|
+
se03BootHash: getImageHash(info?.se3?.bootloader),
|
|
266
|
+
se04BootBuildId: getImageBuildId(info?.se4?.bootloader),
|
|
267
|
+
se04BootHash: getImageHash(info?.se4?.bootloader),
|
|
268
|
+
};
|
|
269
|
+
};
|
|
252
270
|
|
|
253
271
|
const normalizeRaw = ({
|
|
254
272
|
features,
|
|
@@ -304,10 +322,11 @@ export function buildProfileFromProtocolV2({
|
|
|
304
322
|
scope = 'basic',
|
|
305
323
|
includeRaw = false,
|
|
306
324
|
}: BuildProtocolV2ProfileParams): DeviceProfile {
|
|
307
|
-
const
|
|
325
|
+
const info = deviceInfo;
|
|
326
|
+
const deviceId = info?.status?.device_id || '';
|
|
308
327
|
const serialNo = deviceInfo?.hw?.serial_no || '';
|
|
309
|
-
const label =
|
|
310
|
-
const bleName =
|
|
328
|
+
const label = null;
|
|
329
|
+
const bleName = info?.coprocessor?.bt_adv_name ?? null;
|
|
311
330
|
const verify = normalizeV2Verify(deviceInfo);
|
|
312
331
|
|
|
313
332
|
return {
|
package/src/inject.ts
CHANGED
|
@@ -151,28 +151,22 @@ export const createCoreApi = (
|
|
|
151
151
|
deviceRebootToBootloader: connectId => call({ connectId, method: 'deviceRebootToBootloader' }),
|
|
152
152
|
|
|
153
153
|
// File system & device control API (Protocol V2 only)
|
|
154
|
-
|
|
154
|
+
protocolInfoRequest: (connectId, params) =>
|
|
155
|
+
call({ ...params, connectId, method: 'protocolInfoRequest' }),
|
|
155
156
|
ping: (connectId, params) => call({ ...params, connectId, method: 'ping' }),
|
|
156
157
|
deviceReboot: (connectId, params) => call({ ...params, connectId, method: 'deviceReboot' }),
|
|
157
|
-
|
|
158
|
-
call({ ...params, connectId, method: '
|
|
159
|
-
deviceGetOnboardingStatus: (connectId, params) =>
|
|
160
|
-
call({ ...params, connectId, method: 'deviceGetOnboardingStatus' }),
|
|
158
|
+
deviceInfoGet: (connectId, params) =>
|
|
159
|
+
call({ ...params, connectId, method: 'deviceInfoGet' }),
|
|
161
160
|
deviceFirmwareUpdate: (connectId, params) =>
|
|
162
161
|
call({ ...params, connectId, method: 'deviceFirmwareUpdate' }),
|
|
163
162
|
deviceGetFirmwareUpdateStatus: (connectId, params) =>
|
|
164
163
|
call({ ...params, connectId, method: 'deviceGetFirmwareUpdateStatus' }),
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
call({ ...params, connectId, method: 'devGetFirmwareUpdateStatus' }),
|
|
172
|
-
factoryDeviceInfoSettings: (connectId, params) =>
|
|
173
|
-
call({ ...params, connectId, method: 'factoryDeviceInfoSettings' }),
|
|
174
|
-
factoryGetDeviceInfo: connectId => call({ connectId, method: 'factoryGetDeviceInfo' }),
|
|
175
|
-
filesystemFixPermission: connectId => call({ connectId, method: 'filesystemFixPermission' }),
|
|
164
|
+
deviceFactoryInfoSet: (connectId, params) =>
|
|
165
|
+
call({ ...params, connectId, method: 'deviceFactoryInfoSet' }),
|
|
166
|
+
deviceFactoryInfoGet: (connectId, params) =>
|
|
167
|
+
call({ ...params, connectId, method: 'deviceFactoryInfoGet' }),
|
|
168
|
+
filesystemPermissionFix: (connectId, params) =>
|
|
169
|
+
call({ ...params, connectId, method: 'filesystemPermissionFix' }),
|
|
176
170
|
fileRead: (connectId, params) => call({ ...params, connectId, method: 'fileRead' }),
|
|
177
171
|
fileWrite: (connectId, params) => call({ ...params, connectId, method: 'fileWrite' }),
|
|
178
172
|
fileDelete: (connectId, params) => call({ ...params, connectId, method: 'fileDelete' }),
|