@onekeyfe/hd-core 1.2.0-alpha.80 → 1.2.0-alpha.82
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__/check-firmware-release-protocol-v2.test.ts +30 -0
- package/__tests__/protocol-v2.test.ts +176 -0
- package/dist/api/CheckBLEFirmwareRelease.d.ts +1 -1
- package/dist/api/CheckBLEFirmwareRelease.d.ts.map +1 -1
- package/dist/api/CheckBootloaderRelease.d.ts +1 -1
- package/dist/api/CheckBootloaderRelease.d.ts.map +1 -1
- package/dist/api/CheckFirmwareRelease.d.ts +1 -1
- package/dist/api/CheckFirmwareRelease.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV4.d.ts +1 -0
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +53 -37
- package/dist/types/api/checkBLEFirmwareRelease.d.ts +1 -1
- package/dist/types/api/checkBLEFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/checkBootloaderRelease.d.ts +1 -1
- package/dist/types/api/checkBootloaderRelease.d.ts.map +1 -1
- package/dist/types/api/checkFirmwareRelease.d.ts +1 -1
- package/dist/types/api/checkFirmwareRelease.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/CheckBLEFirmwareRelease.ts +4 -10
- package/src/api/CheckBootloaderRelease.ts +1 -8
- package/src/api/CheckFirmwareRelease.ts +6 -12
- package/src/api/FirmwareUpdateV4.ts +61 -21
- package/src/types/api/checkBLEFirmwareRelease.ts +1 -1
- package/src/types/api/checkBootloaderRelease.ts +1 -1
- package/src/types/api/checkFirmwareRelease.ts +1 -1
|
@@ -162,3 +162,33 @@ describe.each(['pro2', 'neo'] as const)('Protocol V2 release checks for %s', dev
|
|
|
162
162
|
expect(allMethod.getSupportedProtocols()).toEqual(['V1', 'V2']);
|
|
163
163
|
});
|
|
164
164
|
});
|
|
165
|
+
|
|
166
|
+
test('returns null from optional release probes when device features are unavailable', async () => {
|
|
167
|
+
const deviceWithoutFeatures = {
|
|
168
|
+
isProtocolV2: jest.fn(() => true),
|
|
169
|
+
features: undefined,
|
|
170
|
+
getDeviceState: jest.fn(),
|
|
171
|
+
};
|
|
172
|
+
const firmwareMethod = new CheckFirmwareRelease({
|
|
173
|
+
id: 1,
|
|
174
|
+
payload: { method: 'checkFirmwareRelease' },
|
|
175
|
+
});
|
|
176
|
+
const bleMethod = new CheckBLEFirmwareRelease({
|
|
177
|
+
id: 2,
|
|
178
|
+
payload: { method: 'checkBLEFirmwareRelease' },
|
|
179
|
+
});
|
|
180
|
+
const bootloaderMethod = new CheckBootloaderRelease({
|
|
181
|
+
id: 3,
|
|
182
|
+
payload: { method: 'checkBootloaderRelease' },
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
firmwareMethod.device = deviceWithoutFeatures as unknown as CheckFirmwareRelease['device'];
|
|
186
|
+
bleMethod.device = deviceWithoutFeatures as unknown as CheckBLEFirmwareRelease['device'];
|
|
187
|
+
bootloaderMethod.device = deviceWithoutFeatures as unknown as CheckBootloaderRelease['device'];
|
|
188
|
+
|
|
189
|
+
await expect(firmwareMethod.run()).resolves.toBeNull();
|
|
190
|
+
await expect(bleMethod.run()).resolves.toBeNull();
|
|
191
|
+
await expect(bootloaderMethod.run()).resolves.toBeNull();
|
|
192
|
+
expect(deviceWithoutFeatures.isProtocolV2).not.toHaveBeenCalled();
|
|
193
|
+
expect(deviceWithoutFeatures.getDeviceState).not.toHaveBeenCalled();
|
|
194
|
+
});
|
|
@@ -5860,6 +5860,80 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
5860
5860
|
getFirmwareLatestReleaseSpy.mockRestore();
|
|
5861
5861
|
});
|
|
5862
5862
|
|
|
5863
|
+
test('downloads only firmware targets that are missing from an explicit mixed payload', async () => {
|
|
5864
|
+
const explicitApplicationBinary = new Uint8Array([1]).buffer;
|
|
5865
|
+
const remoteCoprocessorBinary = new Uint8Array([2]).buffer;
|
|
5866
|
+
const method = new FirmwareUpdateV4({
|
|
5867
|
+
id: 1,
|
|
5868
|
+
payload: {
|
|
5869
|
+
method: 'firmwareUpdateV4',
|
|
5870
|
+
platform: 'web',
|
|
5871
|
+
targetsToUpdate: ['app_v1', 'coprocessor'],
|
|
5872
|
+
},
|
|
5873
|
+
});
|
|
5874
|
+
method.init();
|
|
5875
|
+
|
|
5876
|
+
const getSysResourceBinarySpy = jest
|
|
5877
|
+
.spyOn(firmwareBinaryApi, 'getSysResourceBinary')
|
|
5878
|
+
.mockResolvedValue({ binary: remoteCoprocessorBinary });
|
|
5879
|
+
const getFirmwareLatestReleaseSpy = jest
|
|
5880
|
+
.spyOn(DataManager, 'getFirmwareLatestRelease')
|
|
5881
|
+
.mockReturnValue({
|
|
5882
|
+
required: false,
|
|
5883
|
+
version: [1, 0, 0],
|
|
5884
|
+
url: 'https://example.com/applicationP1.pp.bin',
|
|
5885
|
+
installOrder: ['applicationP1', 'coprocessor'],
|
|
5886
|
+
components: {
|
|
5887
|
+
applicationP1: {
|
|
5888
|
+
target: 'APPLICATION_P1',
|
|
5889
|
+
url: 'https://example.com/applicationP1.pp.bin',
|
|
5890
|
+
},
|
|
5891
|
+
coprocessor: {
|
|
5892
|
+
target: 'COPROCESSOR',
|
|
5893
|
+
url: 'https://example.com/coprocessor.pp.bin',
|
|
5894
|
+
},
|
|
5895
|
+
},
|
|
5896
|
+
fingerprint: '',
|
|
5897
|
+
changelog: {
|
|
5898
|
+
'zh-CN': '',
|
|
5899
|
+
'en-US': '',
|
|
5900
|
+
},
|
|
5901
|
+
});
|
|
5902
|
+
|
|
5903
|
+
const remoteBinaries = await (method as any).prepareRemoteProtocolV2Binaries(
|
|
5904
|
+
'universal',
|
|
5905
|
+
{ deviceType: 'pro2', firmwareVersion: '0.0.0' },
|
|
5906
|
+
[
|
|
5907
|
+
{
|
|
5908
|
+
fileName: 'application_p1.bin',
|
|
5909
|
+
binary: explicitApplicationBinary,
|
|
5910
|
+
targetId: 4,
|
|
5911
|
+
kind: 'firmware',
|
|
5912
|
+
},
|
|
5913
|
+
]
|
|
5914
|
+
);
|
|
5915
|
+
|
|
5916
|
+
expect(getSysResourceBinarySpy).toHaveBeenCalledTimes(1);
|
|
5917
|
+
expect(getSysResourceBinarySpy).toHaveBeenCalledWith('https://example.com/coprocessor.pp.bin');
|
|
5918
|
+
expect(remoteBinaries.installItems).toEqual([
|
|
5919
|
+
{
|
|
5920
|
+
fileName: 'application_p1.bin',
|
|
5921
|
+
binary: explicitApplicationBinary,
|
|
5922
|
+
targetId: 4,
|
|
5923
|
+
kind: 'firmware',
|
|
5924
|
+
},
|
|
5925
|
+
{
|
|
5926
|
+
fileName: 'coprocessor.bin',
|
|
5927
|
+
binary: remoteCoprocessorBinary,
|
|
5928
|
+
targetId: 6,
|
|
5929
|
+
kind: 'firmware',
|
|
5930
|
+
},
|
|
5931
|
+
]);
|
|
5932
|
+
|
|
5933
|
+
getSysResourceBinarySpy.mockRestore();
|
|
5934
|
+
getFirmwareLatestReleaseSpy.mockRestore();
|
|
5935
|
+
});
|
|
5936
|
+
|
|
5863
5937
|
test('ignores an unsupported remote ROMLOADER component when installing selected targets', async () => {
|
|
5864
5938
|
const method = new FirmwareUpdateV4({
|
|
5865
5939
|
id: 1,
|
|
@@ -6195,6 +6269,108 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
6195
6269
|
);
|
|
6196
6270
|
});
|
|
6197
6271
|
|
|
6272
|
+
test('downloads every missing firmware target when manifest resources are already prepared', async () => {
|
|
6273
|
+
const resourceBundle = createProtocolV2OkppBinary();
|
|
6274
|
+
const applicationBinary = new Uint8Array([7]).buffer;
|
|
6275
|
+
const remoteBinaries = {
|
|
6276
|
+
bootloaderBinary: null,
|
|
6277
|
+
fwBinaryMap: [
|
|
6278
|
+
{
|
|
6279
|
+
fileName: 'application_p1.bin',
|
|
6280
|
+
binary: applicationBinary,
|
|
6281
|
+
targetId: 4,
|
|
6282
|
+
},
|
|
6283
|
+
],
|
|
6284
|
+
installItems: [
|
|
6285
|
+
{
|
|
6286
|
+
fileName: 'application_p1.bin',
|
|
6287
|
+
binary: applicationBinary,
|
|
6288
|
+
targetId: 4,
|
|
6289
|
+
kind: 'firmware',
|
|
6290
|
+
},
|
|
6291
|
+
],
|
|
6292
|
+
};
|
|
6293
|
+
const method = new FirmwareUpdateV4({
|
|
6294
|
+
id: 1,
|
|
6295
|
+
payload: {
|
|
6296
|
+
method: 'firmwareUpdateV4',
|
|
6297
|
+
platform: 'web',
|
|
6298
|
+
targetsToUpdate: ['app_v1', 'resource'],
|
|
6299
|
+
resourceFiles: [
|
|
6300
|
+
{
|
|
6301
|
+
binary: resourceBundle,
|
|
6302
|
+
devicePath: 'vol0:/bundles/images/images.okpkg',
|
|
6303
|
+
},
|
|
6304
|
+
],
|
|
6305
|
+
},
|
|
6306
|
+
});
|
|
6307
|
+
method.init();
|
|
6308
|
+
(method as any).captureProtocolV2PhysicalIdentity = jest.fn().mockResolvedValue(undefined);
|
|
6309
|
+
(method as any).device = stubDevice({
|
|
6310
|
+
originalDescriptor: { protocolType: 'V2' },
|
|
6311
|
+
features: { deviceType: 'pro2', firmwareVersion: '0.0.0', capabilities: [] },
|
|
6312
|
+
});
|
|
6313
|
+
(method as any).prepareRemoteProtocolV2Binaries = jest.fn().mockResolvedValue(remoteBinaries);
|
|
6314
|
+
(method as any).executeProtocolV2Update = jest.fn().mockResolvedValue(undefined);
|
|
6315
|
+
method.postTipMessage = jest.fn();
|
|
6316
|
+
|
|
6317
|
+
await method.run();
|
|
6318
|
+
|
|
6319
|
+
expect(forceReloadDataSpy).toHaveBeenCalledTimes(1);
|
|
6320
|
+
expect((method as any).prepareRemoteProtocolV2Binaries).toHaveBeenCalledWith(
|
|
6321
|
+
'universal',
|
|
6322
|
+
expect.objectContaining({ deviceType: 'pro2' }),
|
|
6323
|
+
[]
|
|
6324
|
+
);
|
|
6325
|
+
expect((method as any).executeProtocolV2Update).toHaveBeenCalledWith({
|
|
6326
|
+
bootloaderBinary: null,
|
|
6327
|
+
fwBinaryMap: remoteBinaries.fwBinaryMap,
|
|
6328
|
+
installItems: remoteBinaries.installItems,
|
|
6329
|
+
resourceBundles: [
|
|
6330
|
+
{
|
|
6331
|
+
name: 'images.okpkg',
|
|
6332
|
+
binary: resourceBundle,
|
|
6333
|
+
devicePath: 'vol0:/bundles/images/images.okpkg',
|
|
6334
|
+
version: [1, 2, 3],
|
|
6335
|
+
payloadHash: '11'.repeat(64),
|
|
6336
|
+
headerHash: '22'.repeat(64),
|
|
6337
|
+
},
|
|
6338
|
+
],
|
|
6339
|
+
});
|
|
6340
|
+
});
|
|
6341
|
+
|
|
6342
|
+
test('rejects a mixed resource plan when the requested firmware release is unavailable', async () => {
|
|
6343
|
+
const resourceBundle = createProtocolV2OkppBinary();
|
|
6344
|
+
const method = new FirmwareUpdateV4({
|
|
6345
|
+
id: 1,
|
|
6346
|
+
payload: {
|
|
6347
|
+
method: 'firmwareUpdateV4',
|
|
6348
|
+
platform: 'web',
|
|
6349
|
+
targetsToUpdate: ['app_v1', 'resource'],
|
|
6350
|
+
resourceFiles: [
|
|
6351
|
+
{
|
|
6352
|
+
binary: resourceBundle,
|
|
6353
|
+
devicePath: 'vol0:/bundles/images/images.okpkg',
|
|
6354
|
+
},
|
|
6355
|
+
],
|
|
6356
|
+
},
|
|
6357
|
+
});
|
|
6358
|
+
method.init();
|
|
6359
|
+
(method as any).captureProtocolV2PhysicalIdentity = jest.fn().mockResolvedValue(undefined);
|
|
6360
|
+
(method as any).device = stubDevice({
|
|
6361
|
+
originalDescriptor: { protocolType: 'V2' },
|
|
6362
|
+
features: { deviceType: 'pro2', firmwareVersion: '0.0.0', capabilities: [] },
|
|
6363
|
+
});
|
|
6364
|
+
jest.spyOn(DataManager, 'getFirmwareLatestRelease').mockReturnValue(undefined);
|
|
6365
|
+
(method as any).executeProtocolV2Update = jest.fn();
|
|
6366
|
+
method.postTipMessage = jest.fn();
|
|
6367
|
+
|
|
6368
|
+
await expect(method.run()).rejects.toThrow(
|
|
6369
|
+
'Protocol V2 firmware release is unavailable for requested targets: app_v1'
|
|
6370
|
+
);
|
|
6371
|
+
expect((method as any).executeProtocolV2Update).not.toHaveBeenCalled();
|
|
6372
|
+
});
|
|
6373
|
+
|
|
6198
6374
|
test('combines prepared firmware components with explicit manifest resource files', async () => {
|
|
6199
6375
|
const resourceBundle = createProtocolV2OkppBinary();
|
|
6200
6376
|
const method = new FirmwareUpdateV4({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckBLEFirmwareRelease.d.ts","sourceRoot":"","sources":["../../src/api/CheckBLEFirmwareRelease.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CheckBLEFirmwareRelease.d.ts","sourceRoot":"","sources":["../../src/api/CheckBLEFirmwareRelease.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAY1C,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,UAAU;IAC7D,qBAAqB;IAIrB,IAAI;IAUE,GAAG;;;;;;;;;CA2BV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckBootloaderRelease.d.ts","sourceRoot":"","sources":["../../src/api/CheckBootloaderRelease.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CheckBootloaderRelease.d.ts","sourceRoot":"","sources":["../../src/api/CheckBootloaderRelease.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAc1C,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,UAAU;IAC5D,qBAAqB;IAIrB,IAAI;IAME,GAAG;;;;;;;;;;CAqCV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckFirmwareRelease.d.ts","sourceRoot":"","sources":["../../src/api/CheckFirmwareRelease.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CheckFirmwareRelease.d.ts","sourceRoot":"","sources":["../../src/api/CheckFirmwareRelease.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAa1C,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,UAAU;IAC1D,qBAAqB;IAIrB,IAAI;IAUE,GAAG;;;;;;;;;CA6BV"}
|
|
@@ -40,6 +40,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
40
40
|
private verifyProtocolV2ReconnectIdentity;
|
|
41
41
|
private prepareBootloaderBinary;
|
|
42
42
|
private hasExplicitProtocolV2Payload;
|
|
43
|
+
private getMissingProtocolV2FirmwareTargets;
|
|
43
44
|
private buildProtocolV2InstallItems;
|
|
44
45
|
private getRemoteComponentEntries;
|
|
45
46
|
private getRemoteComponentTarget;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkD,MAAM,qBAAqB,CAAC;AAyBlG,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAmB/E,OAAO,KAAK,EAEV,sBAAsB,EAEvB,MAAM,6BAA6B,CAAC;AA6CrC,wBAAgB,wCAAwC,CACtD,UAAU,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,EAC5C,MAAM,EAAE,sBAAsB,QAgB/B;AA6UD,eAAO,MAAM,oCAAoC,WACvC,WAAW,GAAG,UAAU,eACnB,MAAM,GAAG,SAAS,YAKhC,CAAC;AAEF,eAAO,MAAM,iCAAiC,0BACrB,MAAM,uBACR,MAAM,iBACZ,MAAM,eACR,MAAM,SAsBpB,CAAC;AAUF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,wBAAwB,CAAC,sBAAsB,CAAC;IAC5F,OAAO,CAAC,8BAA8B,CAAC,CAAS;IAEhD,OAAO,CAAC,sBAAsB,CAAC,CAAS;IAExC,qBAAqB;IAIrB,OAAO,CAAC,yBAAyB,CAA4B;IAE7D,OAAO,CAAC,2BAA2B,CAAS;IAE5C,OAAO,CAAC,iCAAiC,CAA6B;IAEtE,OAAO,CAAC,6BAA6B,CAAC,CAAW;IAEjD,OAAO,CAAC,6BAA6B,CAAS;IAE9C,IAAI;IAoHJ,OAAO,CAAC,8BAA8B;IAwBhC,GAAG;;;;;YAKK,aAAa;
|
|
1
|
+
{"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkD,MAAM,qBAAqB,CAAC;AAyBlG,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAmB/E,OAAO,KAAK,EAEV,sBAAsB,EAEvB,MAAM,6BAA6B,CAAC;AA6CrC,wBAAgB,wCAAwC,CACtD,UAAU,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,EAC5C,MAAM,EAAE,sBAAsB,QAgB/B;AA6UD,eAAO,MAAM,oCAAoC,WACvC,WAAW,GAAG,UAAU,eACnB,MAAM,GAAG,SAAS,YAKhC,CAAC;AAEF,eAAO,MAAM,iCAAiC,0BACrB,MAAM,uBACR,MAAM,iBACZ,MAAM,eACR,MAAM,SAsBpB,CAAC;AAUF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,wBAAwB,CAAC,sBAAsB,CAAC;IAC5F,OAAO,CAAC,8BAA8B,CAAC,CAAS;IAEhD,OAAO,CAAC,sBAAsB,CAAC,CAAS;IAExC,qBAAqB;IAIrB,OAAO,CAAC,yBAAyB,CAA4B;IAE7D,OAAO,CAAC,2BAA2B,CAAS;IAE5C,OAAO,CAAC,iCAAiC,CAA6B;IAEtE,OAAO,CAAC,6BAA6B,CAAC,CAAW;IAEjD,OAAO,CAAC,6BAA6B,CAAS;IAE9C,IAAI;IAoHJ,OAAO,CAAC,8BAA8B;IAwBhC,GAAG;;;;;YAKK,aAAa;YAgHb,4BAA4B;YAkB5B,0BAA0B;YAY1B,8BAA8B;YAK9B,+BAA+B;YAqD/B,gCAAgC;YAmDhC,8BAA8B;IAkC5C,OAAO,CAAC,8BAA8B;IA0BtC,OAAO,CAAC,kCAAkC;IAc1C,OAAO,CAAC,gCAAgC;IAsDxC,OAAO,CAAC,6BAA6B;YAsBvB,2BAA2B;IAWzC,OAAO,CAAC,yBAAyB;IAKjC,OAAO,CAAC,kCAAkC;IAS1C,OAAO,CAAC,8BAA8B;YAMxB,iCAAiC;YAOjC,iCAAiC;YAkBjC,iCAAiC;IAM/C,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,4BAA4B;IAIpC,OAAO,CAAC,mCAAmC;IAY3C,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,wBAAwB;YAkBlB,iCAAiC;YAmCjC,+BAA+B;IA6E7C,OAAO,CAAC,sCAAsC;IA0C9C,OAAO,CAAC,6BAA6B;YAMvB,8BAA8B;YA8C9B,kCAAkC;IA4BhD,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,yBAAyB;IAc3B,6BAA6B;YAgCrB,+BAA+B;IAkD7C,OAAO,CAAC,6BAA6B;IAkCrC,OAAO,CAAC,8BAA8B;YA8CxB,uBAAuB;YAiCvB,6BAA6B;YAa7B,uBAAuB;YA6CvB,8BAA8B;YA8D9B,6BAA6B;IAuE3C,OAAO,CAAC,mCAAmC;YAI7B,0BAA0B;IAaxC,OAAO,CAAC,4BAA4B;IAyGpC,OAAO,CAAC,6BAA6B;YAcvB,uCAAuC;YA0JvC,gCAAgC;YAehC,yBAAyB;YAQzB,8BAA8B;IAQ5C,OAAO,CAAC,0BAA0B;YAkBpB,mCAAmC;YAWnC,qCAAqC;YAgDrC,yBAAyB;YA8DzB,8BAA8B;IAU5C,OAAO,CAAC,kCAAkC;YAQ5B,cAAc;YAuCd,6BAA6B;YAW7B,0BAA0B;YAS1B,6BAA6B;YAmB7B,gBAAgB;IAiB9B,OAAO,CAAC,qBAAqB;CAM9B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1545,7 +1545,7 @@ type CheckAllFirmwareReleaseParams = {
|
|
|
1545
1545
|
};
|
|
1546
1546
|
declare function checkAllFirmwareRelease(connectId?: string, params?: CommonParams & CheckAllFirmwareReleaseParams): Response<AllFirmwareRelease>;
|
|
1547
1547
|
|
|
1548
|
-
type CheckBootloaderReleaseResponse = FirmwareReleaseCheckResult;
|
|
1548
|
+
type CheckBootloaderReleaseResponse = FirmwareReleaseCheckResult | null;
|
|
1549
1549
|
type CheckBootloaderReleaseParams = {
|
|
1550
1550
|
willUpdateFirmwareVersion?: string;
|
|
1551
1551
|
firmwareType?: EFirmwareType;
|
|
@@ -1622,9 +1622,9 @@ declare function openWalletSession(connectId: string, params: CommonParams & Ope
|
|
|
1622
1622
|
type CheckFirmwareReleaseParams = {
|
|
1623
1623
|
firmwareType?: EFirmwareType;
|
|
1624
1624
|
};
|
|
1625
|
-
declare function checkFirmwareRelease(connectId?: string, params?: CheckFirmwareReleaseParams): Response<FirmwareReleaseCheckResult>;
|
|
1625
|
+
declare function checkFirmwareRelease(connectId?: string, params?: CheckFirmwareReleaseParams): Response<FirmwareReleaseCheckResult | null>;
|
|
1626
1626
|
|
|
1627
|
-
declare function checkBLEFirmwareRelease(connectId?: string): Response<FirmwareReleaseCheckResult>;
|
|
1627
|
+
declare function checkBLEFirmwareRelease(connectId?: string): Response<FirmwareReleaseCheckResult | null>;
|
|
1628
1628
|
|
|
1629
1629
|
interface FirmwareUpdateCapabilities {
|
|
1630
1630
|
planSchemaVersion: 2;
|
package/dist/index.js
CHANGED
|
@@ -47750,6 +47750,8 @@ class CheckFirmwareRelease extends BaseMethod {
|
|
|
47750
47750
|
var _a;
|
|
47751
47751
|
return __awaiter(this, void 0, void 0, function* () {
|
|
47752
47752
|
const payload = this.payload;
|
|
47753
|
+
if (!this.device.features)
|
|
47754
|
+
return null;
|
|
47753
47755
|
if (this.device.isProtocolV2()) {
|
|
47754
47756
|
const { state, firmwareType, release } = yield loadProtocolV2FirmwareReleaseContext({
|
|
47755
47757
|
device: this.device,
|
|
@@ -47764,13 +47766,10 @@ class CheckFirmwareRelease extends BaseMethod {
|
|
|
47764
47766
|
}), PROTOCOL_V2_MAIN_FIRMWARE_TARGETS);
|
|
47765
47767
|
return toProtocolV2FirmwareReleaseInfo({ plan, state, release });
|
|
47766
47768
|
}
|
|
47767
|
-
|
|
47768
|
-
|
|
47769
|
-
|
|
47770
|
-
|
|
47771
|
-
return releaseInfo;
|
|
47772
|
-
}
|
|
47773
|
-
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, 'checkFirmwareRelease requires initialized device features');
|
|
47769
|
+
const deviceFirmwareType = this.device.getCurrentFirmwareType();
|
|
47770
|
+
const firmwareType = (_a = payload.firmwareType) !== null && _a !== void 0 ? _a : deviceFirmwareType;
|
|
47771
|
+
const releaseInfo = getFirmwareReleaseInfo(this.device.features, firmwareType);
|
|
47772
|
+
return releaseInfo;
|
|
47774
47773
|
});
|
|
47775
47774
|
}
|
|
47776
47775
|
}
|
|
@@ -47790,6 +47789,8 @@ class CheckBLEFirmwareRelease extends BaseMethod {
|
|
|
47790
47789
|
}
|
|
47791
47790
|
run() {
|
|
47792
47791
|
return __awaiter(this, void 0, void 0, function* () {
|
|
47792
|
+
if (!this.device.features)
|
|
47793
|
+
return null;
|
|
47793
47794
|
if (this.device.isProtocolV2()) {
|
|
47794
47795
|
const { state, firmwareType, release } = yield loadProtocolV2FirmwareReleaseContext({
|
|
47795
47796
|
device: this.device,
|
|
@@ -47807,11 +47808,8 @@ class CheckBLEFirmwareRelease extends BaseMethod {
|
|
|
47807
47808
|
release: getProtocolV2ComponentReleaseInfo(plan, 'COPROCESSOR'),
|
|
47808
47809
|
});
|
|
47809
47810
|
}
|
|
47810
|
-
|
|
47811
|
-
|
|
47812
|
-
return releaseInfo;
|
|
47813
|
-
}
|
|
47814
|
-
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, 'checkBLEFirmwareRelease requires initialized device features');
|
|
47811
|
+
const releaseInfo = getBleFirmwareReleaseInfo(this.device.features);
|
|
47812
|
+
return releaseInfo;
|
|
47815
47813
|
});
|
|
47816
47814
|
}
|
|
47817
47815
|
}
|
|
@@ -47882,9 +47880,8 @@ class CheckBootloaderRelease extends BaseMethod {
|
|
|
47882
47880
|
run() {
|
|
47883
47881
|
var _a;
|
|
47884
47882
|
return __awaiter(this, void 0, void 0, function* () {
|
|
47885
|
-
if (!this.device.features)
|
|
47886
|
-
|
|
47887
|
-
}
|
|
47883
|
+
if (!this.device.features)
|
|
47884
|
+
return null;
|
|
47888
47885
|
const { features } = this.device;
|
|
47889
47886
|
const payload = this.payload;
|
|
47890
47887
|
if (this.device.isProtocolV2()) {
|
|
@@ -51536,7 +51533,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
51536
51533
|
});
|
|
51537
51534
|
}
|
|
51538
51535
|
runProtocolV2() {
|
|
51539
|
-
var _a, _b, _c, _d, _e;
|
|
51536
|
+
var _a, _b, _c, _d, _e, _f;
|
|
51540
51537
|
return __awaiter(this, void 0, void 0, function* () {
|
|
51541
51538
|
yield this.captureProtocolV2PhysicalIdentity();
|
|
51542
51539
|
const deviceFeatures = yield this.getProtocolV2DeviceFeatures();
|
|
@@ -51564,7 +51561,14 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
51564
51561
|
resourceBundles = this.prepareExplicitProtocolV2ResourceFiles();
|
|
51565
51562
|
fwBinaryMap = this.collectExplicitTargetBinaries();
|
|
51566
51563
|
bootloaderBinary = this.prepareBootloaderBinary();
|
|
51567
|
-
const
|
|
51564
|
+
const explicitInstallItems = this.buildProtocolV2InstallItems({
|
|
51565
|
+
bootloaderBinary,
|
|
51566
|
+
fwBinaryMap,
|
|
51567
|
+
});
|
|
51568
|
+
const missingFirmwareTargets = this.getMissingProtocolV2FirmwareTargets(explicitInstallItems);
|
|
51569
|
+
const needsRemoteFirmware = ((_e = this.params.targetsToUpdate) === null || _e === void 0 ? void 0 : _e.length)
|
|
51570
|
+
? missingFirmwareTargets.length > 0
|
|
51571
|
+
: !this.hasExplicitProtocolV2Payload(explicitInstallItems);
|
|
51568
51572
|
if (needsPreparedResources) {
|
|
51569
51573
|
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, 'Protocol V2 resource manifest must be prepared by the external firmware host', {
|
|
51570
51574
|
firmwareUpdateCode: 'FirmwareArtifactsNotPrepared',
|
|
@@ -51581,7 +51585,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
51581
51585
|
yield DataManager.forceReloadData();
|
|
51582
51586
|
}
|
|
51583
51587
|
if (needsRemoteFirmware) {
|
|
51584
|
-
const remoteBinaries = yield this.prepareRemoteProtocolV2Binaries(firmwareType, deviceFeatures);
|
|
51588
|
+
const remoteBinaries = yield this.prepareRemoteProtocolV2Binaries(firmwareType, deviceFeatures, explicitInstallItems);
|
|
51585
51589
|
bootloaderBinary = remoteBinaries.bootloaderBinary;
|
|
51586
51590
|
fwBinaryMap = remoteBinaries.fwBinaryMap;
|
|
51587
51591
|
installItems = remoteBinaries.installItems;
|
|
@@ -51592,7 +51596,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
51592
51596
|
if (typeof err === 'object' &&
|
|
51593
51597
|
err !== null &&
|
|
51594
51598
|
'params' in err &&
|
|
51595
|
-
((
|
|
51599
|
+
((_f = err.params) === null || _f === void 0 ? void 0 : _f.firmwareUpdateCode) === 'FirmwareArtifactsNotPrepared') {
|
|
51596
51600
|
throw err;
|
|
51597
51601
|
}
|
|
51598
51602
|
if (err instanceof hdShared.HardwareError && err.errorCode === hdShared.HardwareErrorCode.NetworkError) {
|
|
@@ -51907,11 +51911,17 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
51907
51911
|
var _a;
|
|
51908
51912
|
return (_a = this.params.bootloaderBinary) !== null && _a !== void 0 ? _a : null;
|
|
51909
51913
|
}
|
|
51910
|
-
hasExplicitProtocolV2Payload(
|
|
51914
|
+
hasExplicitProtocolV2Payload(installItems) {
|
|
51915
|
+
var _a;
|
|
51916
|
+
return !!((_a = this.params.resourceFiles) === null || _a === void 0 ? void 0 : _a.length) || installItems.length > 0;
|
|
51917
|
+
}
|
|
51918
|
+
getMissingProtocolV2FirmwareTargets(installItems) {
|
|
51911
51919
|
var _a;
|
|
51912
|
-
|
|
51913
|
-
|
|
51914
|
-
|
|
51920
|
+
const preparedTargets = new Set(installItems.flatMap(item => {
|
|
51921
|
+
const target = PROTOCOL_V2_UPDATE_TARGET_BY_TARGET_ID.get(item.targetId);
|
|
51922
|
+
return target ? [target] : [];
|
|
51923
|
+
}));
|
|
51924
|
+
return ((_a = this.params.targetsToUpdate) !== null && _a !== void 0 ? _a : []).filter(target => target !== 'resource' && !preparedTargets.has(target));
|
|
51915
51925
|
}
|
|
51916
51926
|
buildProtocolV2InstallItems({ bootloaderBinary, fwBinaryMap, }) {
|
|
51917
51927
|
const installItems = [];
|
|
@@ -51974,7 +51984,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
51974
51984
|
return Object.assign(Object.assign({}, target), { binary });
|
|
51975
51985
|
});
|
|
51976
51986
|
}
|
|
51977
|
-
prepareRemoteProtocolV2Binaries(firmwareType, features) {
|
|
51987
|
+
prepareRemoteProtocolV2Binaries(firmwareType, features, explicitInstallItems = []) {
|
|
51978
51988
|
var _a, _b;
|
|
51979
51989
|
return __awaiter(this, void 0, void 0, function* () {
|
|
51980
51990
|
const release = DataManager.getFirmwareLatestRelease(features, firmwareType);
|
|
@@ -51982,6 +51992,10 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
51982
51992
|
const fwBinaryMap = [];
|
|
51983
51993
|
const installItems = [];
|
|
51984
51994
|
if (!release) {
|
|
51995
|
+
const missingFirmwareTargets = this.getMissingProtocolV2FirmwareTargets(explicitInstallItems);
|
|
51996
|
+
if (missingFirmwareTargets.length > 0) {
|
|
51997
|
+
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, `Protocol V2 firmware release is unavailable for requested targets: ${missingFirmwareTargets.join(', ')}`);
|
|
51998
|
+
}
|
|
51985
51999
|
return {
|
|
51986
52000
|
bootloaderBinary,
|
|
51987
52001
|
fwBinaryMap,
|
|
@@ -51990,6 +52004,8 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
51990
52004
|
}
|
|
51991
52005
|
const entries = this.getRemoteComponentEntries(release);
|
|
51992
52006
|
const targetsToUpdate = new Set((_a = this.params.targetsToUpdate) !== null && _a !== void 0 ? _a : []);
|
|
52007
|
+
const explicitInstallItemByTargetId = new Map(explicitInstallItems.map(item => [item.targetId, item]));
|
|
52008
|
+
const preparedTargets = new Set();
|
|
51993
52009
|
for (const [key, component] of entries) {
|
|
51994
52010
|
const targetName = (_b = component.target) === null || _b === void 0 ? void 0 : _b.toUpperCase();
|
|
51995
52011
|
const target = PROTOCOL_V2_REMOTE_COMPONENT_TARGETS[targetName];
|
|
@@ -51997,27 +52013,27 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
51997
52013
|
? PROTOCOL_V2_UPDATE_TARGET_BY_TARGET_ID.get(target.targetId)
|
|
51998
52014
|
: undefined;
|
|
51999
52015
|
if (updateTarget && targetsToUpdate.has(updateTarget)) {
|
|
52000
|
-
const
|
|
52001
|
-
|
|
52002
|
-
|
|
52003
|
-
|
|
52004
|
-
fileName: remoteBinary.fileName,
|
|
52005
|
-
binary: remoteBinary.binary,
|
|
52006
|
-
targetId: remoteBinary.targetId,
|
|
52007
|
-
kind: remoteBinary.kind,
|
|
52008
|
-
});
|
|
52016
|
+
const explicitInstallItem = explicitInstallItemByTargetId.get(target.targetId);
|
|
52017
|
+
const installItem = explicitInstallItem !== null && explicitInstallItem !== void 0 ? explicitInstallItem : (yield this.downloadRemoteProtocolV2Component(key, component));
|
|
52018
|
+
if (installItem.kind === 'bootloader') {
|
|
52019
|
+
bootloaderBinary = installItem.binary;
|
|
52009
52020
|
}
|
|
52010
52021
|
else {
|
|
52011
52022
|
const binaryEntry = {
|
|
52012
|
-
fileName:
|
|
52013
|
-
binary:
|
|
52014
|
-
targetId:
|
|
52023
|
+
fileName: installItem.fileName,
|
|
52024
|
+
binary: installItem.binary,
|
|
52025
|
+
targetId: installItem.targetId,
|
|
52015
52026
|
};
|
|
52016
52027
|
fwBinaryMap.push(binaryEntry);
|
|
52017
|
-
installItems.push(Object.assign(Object.assign({}, binaryEntry), { kind: remoteBinary.kind }));
|
|
52018
52028
|
}
|
|
52029
|
+
installItems.push(Object.assign({}, installItem));
|
|
52030
|
+
preparedTargets.add(updateTarget);
|
|
52019
52031
|
}
|
|
52020
52032
|
}
|
|
52033
|
+
const missingTarget = Array.from(targetsToUpdate).find(target => target !== 'resource' && !preparedTargets.has(target));
|
|
52034
|
+
if (missingTarget) {
|
|
52035
|
+
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, `Protocol V2 release does not contain requested target ${missingTarget}`);
|
|
52036
|
+
}
|
|
52021
52037
|
return {
|
|
52022
52038
|
bootloaderBinary,
|
|
52023
52039
|
fwBinaryMap,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Response } from '../params';
|
|
2
2
|
import type { FirmwareReleaseCheckResult } from './checkAllFirmwareRelease';
|
|
3
|
-
export declare function checkBLEFirmwareRelease(connectId?: string): Response<FirmwareReleaseCheckResult>;
|
|
3
|
+
export declare function checkBLEFirmwareRelease(connectId?: string): Response<FirmwareReleaseCheckResult | null>;
|
|
4
4
|
//# sourceMappingURL=checkBLEFirmwareRelease.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkBLEFirmwareRelease.d.ts","sourceRoot":"","sources":["../../../src/types/api/checkBLEFirmwareRelease.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,SAAS,CAAC,EAAE,MAAM,GACjB,QAAQ,CAAC,0BAA0B,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"checkBLEFirmwareRelease.d.ts","sourceRoot":"","sources":["../../../src/types/api/checkBLEFirmwareRelease.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,SAAS,CAAC,EAAE,MAAM,GACjB,QAAQ,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
2
2
|
import type { CommonParams, Response } from '../params';
|
|
3
3
|
import type { FirmwareReleaseCheckResult } from './checkAllFirmwareRelease';
|
|
4
|
-
export type CheckBootloaderReleaseResponse = FirmwareReleaseCheckResult;
|
|
4
|
+
export type CheckBootloaderReleaseResponse = FirmwareReleaseCheckResult | null;
|
|
5
5
|
export type CheckBootloaderReleaseParams = {
|
|
6
6
|
willUpdateFirmwareVersion?: string;
|
|
7
7
|
firmwareType?: EFirmwareType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkBootloaderRelease.d.ts","sourceRoot":"","sources":["../../../src/types/api/checkBootloaderRelease.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,MAAM,8BAA8B,GAAG,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"checkBootloaderRelease.d.ts","sourceRoot":"","sources":["../../../src/types/api/checkBootloaderRelease.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,MAAM,8BAA8B,GAAG,0BAA0B,GAAG,IAAI,CAAC;AAE/E,MAAM,MAAM,4BAA4B,GAAG;IACzC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC5C,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,YAAY,GAAG,4BAA4B,GACnD,QAAQ,CAAC,8BAA8B,CAAC,CAAC"}
|
|
@@ -4,5 +4,5 @@ import type { FirmwareReleaseCheckResult } from './checkAllFirmwareRelease';
|
|
|
4
4
|
export type CheckFirmwareReleaseParams = {
|
|
5
5
|
firmwareType?: EFirmwareType;
|
|
6
6
|
};
|
|
7
|
-
export declare function checkFirmwareRelease(connectId?: string, params?: CheckFirmwareReleaseParams): Response<FirmwareReleaseCheckResult>;
|
|
7
|
+
export declare function checkFirmwareRelease(connectId?: string, params?: CheckFirmwareReleaseParams): Response<FirmwareReleaseCheckResult | null>;
|
|
8
8
|
//# sourceMappingURL=checkFirmwareRelease.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkFirmwareRelease.d.ts","sourceRoot":"","sources":["../../../src/types/api/checkFirmwareRelease.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,MAAM,0BAA0B,GAAG;IACvC,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,0BAA0B,GAClC,QAAQ,CAAC,0BAA0B,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"checkFirmwareRelease.d.ts","sourceRoot":"","sources":["../../../src/types/api/checkFirmwareRelease.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,MAAM,0BAA0B,GAAG;IACvC,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,0BAA0B,GAClC,QAAQ,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/hd-core",
|
|
3
|
-
"version": "1.2.0-alpha.
|
|
3
|
+
"version": "1.2.0-alpha.82",
|
|
4
4
|
"description": "Core processes and APIs for communicating with OneKey hardware devices.",
|
|
5
5
|
"author": "OneKey",
|
|
6
6
|
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"url": "https://github.com/OneKeyHQ/hardware-js-sdk/issues"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@onekeyfe/hd-shared": "1.2.0-alpha.
|
|
29
|
-
"@onekeyfe/hd-transport": "1.2.0-alpha.
|
|
28
|
+
"@onekeyfe/hd-shared": "1.2.0-alpha.82",
|
|
29
|
+
"@onekeyfe/hd-transport": "1.2.0-alpha.82",
|
|
30
30
|
"axios": "1.15.2",
|
|
31
31
|
"bignumber.js": "^9.0.2",
|
|
32
32
|
"bytebuffer": "^5.0.1",
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"@types/w3c-web-usb": "^1.0.10",
|
|
45
45
|
"@types/web-bluetooth": "^0.0.21"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "7b2b6f5b2f046f5ff2e35e14735ba3918c258054"
|
|
48
48
|
}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
2
|
-
|
|
3
1
|
import { BaseMethod } from './BaseMethod';
|
|
4
2
|
import { UI_REQUEST } from '../constants/ui-request';
|
|
5
3
|
import { getBleFirmwareReleaseInfo } from './firmware/releaseHelper';
|
|
@@ -28,6 +26,8 @@ export default class CheckBLEFirmwareRelease extends BaseMethod {
|
|
|
28
26
|
}
|
|
29
27
|
|
|
30
28
|
async run() {
|
|
29
|
+
if (!this.device.features) return null;
|
|
30
|
+
|
|
31
31
|
if (this.device.isProtocolV2()) {
|
|
32
32
|
const { state, firmwareType, release } = await loadProtocolV2FirmwareReleaseContext({
|
|
33
33
|
device: this.device,
|
|
@@ -49,13 +49,7 @@ export default class CheckBLEFirmwareRelease extends BaseMethod {
|
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return releaseInfo;
|
|
55
|
-
}
|
|
56
|
-
throw ERRORS.TypedError(
|
|
57
|
-
HardwareErrorCode.RuntimeError,
|
|
58
|
-
'checkBLEFirmwareRelease requires initialized device features'
|
|
59
|
-
);
|
|
52
|
+
const releaseInfo = getBleFirmwareReleaseInfo(this.device.features);
|
|
53
|
+
return releaseInfo;
|
|
60
54
|
}
|
|
61
55
|
}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
2
|
-
|
|
3
1
|
import { BaseMethod } from './BaseMethod';
|
|
4
2
|
import { UI_REQUEST } from '../constants/ui-request';
|
|
5
3
|
import { getBootloaderReleaseInfo } from './firmware/releaseHelper';
|
|
@@ -26,12 +24,7 @@ export default class CheckBootloaderRelease extends BaseMethod {
|
|
|
26
24
|
}
|
|
27
25
|
|
|
28
26
|
async run() {
|
|
29
|
-
if (!this.device.features)
|
|
30
|
-
throw ERRORS.TypedError(
|
|
31
|
-
HardwareErrorCode.RuntimeError,
|
|
32
|
-
'checkBootloaderRelease requires initialized device features'
|
|
33
|
-
);
|
|
34
|
-
}
|
|
27
|
+
if (!this.device.features) return null;
|
|
35
28
|
const { features } = this.device;
|
|
36
29
|
const payload = this.payload as CheckBootloaderReleaseParams;
|
|
37
30
|
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
2
|
-
|
|
3
1
|
import { BaseMethod } from './BaseMethod';
|
|
4
2
|
import { UI_REQUEST } from '../constants/ui-request';
|
|
5
3
|
import { getFirmwareReleaseInfo } from './firmware/releaseHelper';
|
|
@@ -31,6 +29,8 @@ export default class CheckFirmwareRelease extends BaseMethod {
|
|
|
31
29
|
async run() {
|
|
32
30
|
const payload = this.payload as CheckFirmwareReleaseParams;
|
|
33
31
|
|
|
32
|
+
if (!this.device.features) return null;
|
|
33
|
+
|
|
34
34
|
if (this.device.isProtocolV2()) {
|
|
35
35
|
const { state, firmwareType, release } = await loadProtocolV2FirmwareReleaseContext({
|
|
36
36
|
device: this.device,
|
|
@@ -49,16 +49,10 @@ export default class CheckFirmwareRelease extends BaseMethod {
|
|
|
49
49
|
return toProtocolV2FirmwareReleaseInfo({ plan, state, release });
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const firmwareType = payload.firmwareType ?? deviceFirmwareType;
|
|
52
|
+
const deviceFirmwareType = this.device.getCurrentFirmwareType();
|
|
53
|
+
const firmwareType = payload.firmwareType ?? deviceFirmwareType;
|
|
55
54
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
throw ERRORS.TypedError(
|
|
60
|
-
HardwareErrorCode.RuntimeError,
|
|
61
|
-
'checkFirmwareRelease requires initialized device features'
|
|
62
|
-
);
|
|
55
|
+
const releaseInfo = getFirmwareReleaseInfo(this.device.features, firmwareType);
|
|
56
|
+
return releaseInfo;
|
|
63
57
|
}
|
|
64
58
|
}
|
|
@@ -683,7 +683,14 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
683
683
|
resourceBundles = this.prepareExplicitProtocolV2ResourceFiles();
|
|
684
684
|
fwBinaryMap = this.collectExplicitTargetBinaries();
|
|
685
685
|
bootloaderBinary = this.prepareBootloaderBinary();
|
|
686
|
-
const
|
|
686
|
+
const explicitInstallItems = this.buildProtocolV2InstallItems({
|
|
687
|
+
bootloaderBinary,
|
|
688
|
+
fwBinaryMap,
|
|
689
|
+
});
|
|
690
|
+
const missingFirmwareTargets = this.getMissingProtocolV2FirmwareTargets(explicitInstallItems);
|
|
691
|
+
const needsRemoteFirmware = this.params.targetsToUpdate?.length
|
|
692
|
+
? missingFirmwareTargets.length > 0
|
|
693
|
+
: !this.hasExplicitProtocolV2Payload(explicitInstallItems);
|
|
687
694
|
if (needsPreparedResources) {
|
|
688
695
|
throw ERRORS.TypedError(
|
|
689
696
|
HardwareErrorCode.RuntimeError,
|
|
@@ -713,7 +720,8 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
713
720
|
if (needsRemoteFirmware) {
|
|
714
721
|
const remoteBinaries = await this.prepareRemoteProtocolV2Binaries(
|
|
715
722
|
firmwareType,
|
|
716
|
-
deviceFeatures
|
|
723
|
+
deviceFeatures,
|
|
724
|
+
explicitInstallItems
|
|
717
725
|
);
|
|
718
726
|
bootloaderBinary = remoteBinaries.bootloaderBinary;
|
|
719
727
|
fwBinaryMap = remoteBinaries.fwBinaryMap;
|
|
@@ -1110,11 +1118,19 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
1110
1118
|
return this.params.bootloaderBinary ?? null;
|
|
1111
1119
|
}
|
|
1112
1120
|
|
|
1113
|
-
private hasExplicitProtocolV2Payload(
|
|
1114
|
-
return
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1121
|
+
private hasExplicitProtocolV2Payload(installItems: ProtocolV2InstallItem[]) {
|
|
1122
|
+
return !!this.params.resourceFiles?.length || installItems.length > 0;
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
private getMissingProtocolV2FirmwareTargets(installItems: ProtocolV2InstallItem[]) {
|
|
1126
|
+
const preparedTargets = new Set(
|
|
1127
|
+
installItems.flatMap(item => {
|
|
1128
|
+
const target = PROTOCOL_V2_UPDATE_TARGET_BY_TARGET_ID.get(item.targetId);
|
|
1129
|
+
return target ? [target] : [];
|
|
1130
|
+
})
|
|
1131
|
+
);
|
|
1132
|
+
return (this.params.targetsToUpdate ?? []).filter(
|
|
1133
|
+
target => target !== 'resource' && !preparedTargets.has(target)
|
|
1118
1134
|
);
|
|
1119
1135
|
}
|
|
1120
1136
|
|
|
@@ -1210,7 +1226,11 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
1210
1226
|
};
|
|
1211
1227
|
}
|
|
1212
1228
|
|
|
1213
|
-
private async prepareRemoteProtocolV2Binaries(
|
|
1229
|
+
private async prepareRemoteProtocolV2Binaries(
|
|
1230
|
+
firmwareType: EFirmwareType,
|
|
1231
|
+
features: Features,
|
|
1232
|
+
explicitInstallItems: ProtocolV2InstallItem[] = []
|
|
1233
|
+
) {
|
|
1214
1234
|
const release = DataManager.getFirmwareLatestRelease(features, firmwareType);
|
|
1215
1235
|
|
|
1216
1236
|
let bootloaderBinary: ArrayBuffer | null = null;
|
|
@@ -1218,6 +1238,15 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
1218
1238
|
const installItems: ProtocolV2InstallItem[] = [];
|
|
1219
1239
|
|
|
1220
1240
|
if (!release) {
|
|
1241
|
+
const missingFirmwareTargets = this.getMissingProtocolV2FirmwareTargets(explicitInstallItems);
|
|
1242
|
+
if (missingFirmwareTargets.length > 0) {
|
|
1243
|
+
throw ERRORS.TypedError(
|
|
1244
|
+
HardwareErrorCode.RuntimeError,
|
|
1245
|
+
`Protocol V2 firmware release is unavailable for requested targets: ${missingFirmwareTargets.join(
|
|
1246
|
+
', '
|
|
1247
|
+
)}`
|
|
1248
|
+
);
|
|
1249
|
+
}
|
|
1221
1250
|
return {
|
|
1222
1251
|
bootloaderBinary,
|
|
1223
1252
|
fwBinaryMap,
|
|
@@ -1227,6 +1256,10 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
1227
1256
|
|
|
1228
1257
|
const entries = this.getRemoteComponentEntries(release);
|
|
1229
1258
|
const targetsToUpdate = new Set(this.params.targetsToUpdate ?? []);
|
|
1259
|
+
const explicitInstallItemByTargetId = new Map(
|
|
1260
|
+
explicitInstallItems.map(item => [item.targetId, item] as const)
|
|
1261
|
+
);
|
|
1262
|
+
const preparedTargets = new Set<FirmwareUpdateV4Target>();
|
|
1230
1263
|
|
|
1231
1264
|
for (const [key, component] of entries) {
|
|
1232
1265
|
const targetName = component.target?.toUpperCase();
|
|
@@ -1235,27 +1268,34 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
1235
1268
|
? PROTOCOL_V2_UPDATE_TARGET_BY_TARGET_ID.get(target.targetId)
|
|
1236
1269
|
: undefined;
|
|
1237
1270
|
if (updateTarget && targetsToUpdate.has(updateTarget)) {
|
|
1238
|
-
const
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
binary: remoteBinary.binary,
|
|
1244
|
-
targetId: remoteBinary.targetId,
|
|
1245
|
-
kind: remoteBinary.kind,
|
|
1246
|
-
});
|
|
1271
|
+
const explicitInstallItem = explicitInstallItemByTargetId.get(target.targetId);
|
|
1272
|
+
const installItem =
|
|
1273
|
+
explicitInstallItem ?? (await this.downloadRemoteProtocolV2Component(key, component));
|
|
1274
|
+
if (installItem.kind === 'bootloader') {
|
|
1275
|
+
bootloaderBinary = installItem.binary;
|
|
1247
1276
|
} else {
|
|
1248
1277
|
const binaryEntry = {
|
|
1249
|
-
fileName:
|
|
1250
|
-
binary:
|
|
1251
|
-
targetId:
|
|
1278
|
+
fileName: installItem.fileName,
|
|
1279
|
+
binary: installItem.binary,
|
|
1280
|
+
targetId: installItem.targetId,
|
|
1252
1281
|
};
|
|
1253
1282
|
fwBinaryMap.push(binaryEntry);
|
|
1254
|
-
installItems.push({ ...binaryEntry, kind: remoteBinary.kind });
|
|
1255
1283
|
}
|
|
1284
|
+
installItems.push({ ...installItem });
|
|
1285
|
+
preparedTargets.add(updateTarget);
|
|
1256
1286
|
}
|
|
1257
1287
|
}
|
|
1258
1288
|
|
|
1289
|
+
const missingTarget = Array.from(targetsToUpdate).find(
|
|
1290
|
+
target => target !== 'resource' && !preparedTargets.has(target)
|
|
1291
|
+
);
|
|
1292
|
+
if (missingTarget) {
|
|
1293
|
+
throw ERRORS.TypedError(
|
|
1294
|
+
HardwareErrorCode.RuntimeError,
|
|
1295
|
+
`Protocol V2 release does not contain requested target ${missingTarget}`
|
|
1296
|
+
);
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1259
1299
|
return {
|
|
1260
1300
|
bootloaderBinary,
|
|
1261
1301
|
fwBinaryMap,
|
|
@@ -2,7 +2,7 @@ import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
|
2
2
|
import type { CommonParams, Response } from '../params';
|
|
3
3
|
import type { FirmwareReleaseCheckResult } from './checkAllFirmwareRelease';
|
|
4
4
|
|
|
5
|
-
export type CheckBootloaderReleaseResponse = FirmwareReleaseCheckResult;
|
|
5
|
+
export type CheckBootloaderReleaseResponse = FirmwareReleaseCheckResult | null;
|
|
6
6
|
|
|
7
7
|
export type CheckBootloaderReleaseParams = {
|
|
8
8
|
willUpdateFirmwareVersion?: string;
|