Skip to content

Commit f8e7306

Browse files
Fix/update (#584)
* fix: update * feat: support blur resource * chore: release 1.1.16-alpha.1
1 parent 7683332 commit f8e7306

File tree

21 files changed

+157
-72
lines changed

21 files changed

+157
-72
lines changed

packages/connect-examples/electron-example/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "hardware-example",
33
"productName": "HardwareExample",
44
"executableName": "onekey-hardware-example",
5-
"version": "1.1.15",
5+
"version": "1.1.16-alpha.1",
66
"author": "OneKey",
77
"description": "End-to-end encrypted workspaces for teams",
88
"main": "dist/index.js",
@@ -22,7 +22,7 @@
2222
"ts:check": "yarn tsc --noEmit"
2323
},
2424
"dependencies": {
25-
"@onekeyfe/hd-transport-electron": "1.1.15",
25+
"@onekeyfe/hd-transport-electron": "1.1.16-alpha.1",
2626
"@stoprocent/noble": "2.3.4",
2727
"debug": "4.3.4",
2828
"electron-is-dev": "^3.0.1",

packages/connect-examples/expo-example/package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "expo-example",
3-
"version": "1.1.15",
3+
"version": "1.1.16-alpha.1",
44
"scripts": {
55
"start": "cross-env CONNECT_SRC=https://localhost:8087/ yarn expo start --dev-client",
66
"android": "yarn expo run:android",
@@ -19,10 +19,10 @@
1919
"@noble/ed25519": "^2.1.0",
2020
"@noble/hashes": "^1.3.3",
2121
"@noble/secp256k1": "^1.7.1",
22-
"@onekeyfe/hd-ble-sdk": "1.1.15",
23-
"@onekeyfe/hd-common-connect-sdk": "1.1.15",
24-
"@onekeyfe/hd-core": "1.1.15",
25-
"@onekeyfe/hd-web-sdk": "1.1.15",
22+
"@onekeyfe/hd-ble-sdk": "1.1.16-alpha.1",
23+
"@onekeyfe/hd-common-connect-sdk": "1.1.16-alpha.1",
24+
"@onekeyfe/hd-core": "1.1.16-alpha.1",
25+
"@onekeyfe/hd-web-sdk": "1.1.16-alpha.1",
2626
"@onekeyfe/react-native-ble-utils": "^0.1.3",
2727
"@polkadot/util-crypto": "13.1.1",
2828
"@react-native-async-storage/async-storage": "1.21.0",

packages/connect-examples/expo-example/src/components/PlaygroundExecutor.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,11 @@ const PlaygroundExecutor: React.FC<PlaygroundExecutorProps> = ({
7373
console.info('[REQUEST] call sdk', { method });
7474
res = await (sdk as any)[method]();
7575
} else if (methodPayload.noDeviceIdReq) {
76-
if (!selectedDevice) return intl.formatMessage({ id: 'tip__need_connect_device_first' });
76+
// if (!selectedDevice) return intl.formatMessage({ id: 'tip__need_connect_device_first' });
7777
console.info('[REQUEST] call sdk', { method, connectId, params: requestParams });
7878
res = await (sdk as any)[method](connectId, requestParams);
7979
} else {
80-
if (!selectedDevice) return intl.formatMessage({ id: 'tip__need_connect_device_first' });
80+
// if (!selectedDevice) return intl.formatMessage({ id: 'tip__need_connect_device_first' });
8181
console.info('[REQUEST] call sdk', { method, connectId, deviceId, params: requestParams });
8282
res = await (sdk as any)[method](connectId, deviceId, requestParams);
8383
}

packages/connect-examples/expo-playground/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "onekey-hardware-playground",
3-
"version": "1.1.15",
3+
"version": "1.1.16-alpha.1",
44
"private": true,
55
"sideEffects": [
66
"app/utils/shim.js",
@@ -17,9 +17,9 @@
1717
},
1818
"dependencies": {
1919
"@noble/hashes": "^1.8.0",
20-
"@onekeyfe/hd-core": "1.1.15",
21-
"@onekeyfe/hd-shared": "1.1.15",
22-
"@onekeyfe/hd-web-sdk": "1.1.15",
20+
"@onekeyfe/hd-core": "1.1.16-alpha.1",
21+
"@onekeyfe/hd-shared": "1.1.16-alpha.1",
22+
"@onekeyfe/hd-web-sdk": "1.1.16-alpha.1",
2323
"@radix-ui/react-checkbox": "^1.3.2",
2424
"@radix-ui/react-dialog": "^1.1.14",
2525
"@radix-ui/react-dropdown-menu": "^2.1.15",

packages/core/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@onekeyfe/hd-core",
3-
"version": "1.1.15",
3+
"version": "1.1.16-alpha.1",
44
"description": "Core processes and APIs for communicating with OneKey hardware devices.",
55
"author": "OneKey",
66
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
@@ -25,8 +25,8 @@
2525
"url": "https://github.com/OneKeyHQ/hardware-js-sdk/issues"
2626
},
2727
"dependencies": {
28-
"@onekeyfe/hd-shared": "1.1.15",
29-
"@onekeyfe/hd-transport": "1.1.15",
28+
"@onekeyfe/hd-shared": "1.1.16-alpha.1",
29+
"@onekeyfe/hd-transport": "1.1.16-alpha.1",
3030
"axios": "1.12.2",
3131
"bignumber.js": "^9.0.2",
3232
"bytebuffer": "^5.0.1",

packages/core/src/api/device/DeviceUploadResource.ts

Lines changed: 66 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,20 @@ import { DeviceModelToTypes, DeviceUploadResourceParams } from '../../types';
99
import { BaseMethod } from '../BaseMethod';
1010
import { validateParams } from '../helpers/paramsValidator';
1111
import { hexToBytes } from '../helpers/hexUtils';
12-
import { createUiMessage, UI_REQUEST } from '../../events';
1312
import { getDeviceType, getDeviceFirmwareVersion } from '../../utils';
1413
import { PROTO } from '../../constants';
1514

1615
export default class DeviceUploadResource extends BaseMethod<ResourceUpload> {
1716
paramsData = {
1817
data: new Uint8Array(),
1918
thumbnailData: new Uint8Array(),
19+
blurData: new Uint8Array(),
20+
};
21+
22+
private uploadProgress = {
23+
totalBytes: 0,
24+
uploadedBytes: 0,
25+
currentFile: 'main' as 'main' | 'thumbnail' | 'blur',
2026
};
2127

2228
getVersionRange() {
@@ -52,20 +58,28 @@ export default class DeviceUploadResource extends BaseMethod<ResourceUpload> {
5258
{ name: 'suffix', type: 'string', required: true },
5359
{ name: 'dataHex', type: 'string', required: true },
5460
{ name: 'thumbnailDataHex', type: 'string', required: true },
61+
{ name: 'blurDataHex', type: 'hexString', required: true },
5562
{ name: 'resType', type: 'number', required: true },
5663
{ name: 'nftMetaData', type: 'string' },
5764
{ name: 'fileNameNoExt', type: 'string' },
5865
]);
5966

60-
const { suffix, dataHex, thumbnailDataHex, resType, nftMetaData } = this
67+
const { suffix, dataHex, thumbnailDataHex, blurDataHex, resType, nftMetaData } = this
6168
.payload as DeviceUploadResourceParams;
6269

6370
// init params
6471
this.paramsData = {
65-
data: hexToBytes(dataHex),
66-
thumbnailData: hexToBytes(thumbnailDataHex),
72+
data: new Uint8Array(hexToBytes(dataHex)),
73+
thumbnailData: new Uint8Array(hexToBytes(thumbnailDataHex)),
74+
blurData: new Uint8Array(hexToBytes(blurDataHex)),
6775
};
6876

77+
this.uploadProgress.totalBytes =
78+
this.paramsData.data.byteLength +
79+
this.paramsData.thumbnailData.byteLength +
80+
this.paramsData.blurData.byteLength;
81+
this.uploadProgress.uploadedBytes = 0;
82+
6983
const fileHash = bytesToHex(blake2s(this.payload.dataHex)).slice(0, 8);
7084
const file_name_no_ext = isEmpty(this.payload.fileNameNoExt)
7185
? `${resType === 0 ? 'wp' : 'nft'}-${fileHash}-${Math.floor(Date.now() / 1000)}`
@@ -75,48 +89,86 @@ export default class DeviceUploadResource extends BaseMethod<ResourceUpload> {
7589
extension: suffix,
7690
data_length: this.paramsData.data.byteLength,
7791
zoom_data_length: this.paramsData.thumbnailData.byteLength,
92+
blur_data_length: this.paramsData.blurData.byteLength,
7893
res_type: resType,
7994
nft_meta_data: nftMetaData,
8095
file_name_no_ext,
8196
};
8297
}
8398

99+
private getDataChunk(sourceData: Uint8Array, offset: number, length: number): Uint8Array {
100+
const endOffset = Math.min(offset + length, sourceData.byteLength);
101+
102+
return sourceData.subarray(offset, endOffset);
103+
}
104+
105+
private updateProgress(chunkSize: number, requestType: string) {
106+
this.uploadProgress.uploadedBytes += chunkSize;
107+
108+
if (requestType === 'ResourceRequest') {
109+
this.uploadProgress.currentFile = 'main';
110+
} else if (requestType === 'ZoomRequest') {
111+
this.uploadProgress.currentFile = 'thumbnail';
112+
} else {
113+
this.uploadProgress.currentFile = 'blur';
114+
}
115+
116+
const progress = Math.round(
117+
(this.uploadProgress.uploadedBytes / this.uploadProgress.totalBytes) * 100
118+
);
119+
120+
if (process.env.NODE_ENV === 'development') {
121+
console.log(`Upload progress: ${progress}% (${this.uploadProgress.currentFile})`);
122+
}
123+
}
124+
84125
processResourceRequest = async (
85126
res:
86127
| TypedResponseMessage<'ResourceRequest'>
87128
| TypedResponseMessage<'ZoomRequest'>
129+
| TypedResponseMessage<'BlurRequest'>
88130
| TypedResponseMessage<'Success'>
89131
): Promise<Success> => {
90132
if (res.type === 'Success') {
91133
return res.message;
92134
}
93135

94136
const { offset, data_length } = res.message;
95-
const { data, thumbnailData } = this.paramsData;
137+
const { data, thumbnailData, blurData } = this.paramsData;
96138

97139
if (offset === undefined) {
98140
throw new Error('offset is undefined');
99141
}
100142

101-
let payload: Uint8Array;
102-
if (res.type === 'ResourceRequest') {
103-
payload = new Uint8Array(data.slice(offset, Math.min(offset + data_length, data.byteLength)));
104-
} else {
105-
payload = new Uint8Array(
106-
thumbnailData.slice(offset, Math.min(offset + data_length, thumbnailData.byteLength))
107-
);
143+
let sourceData: Uint8Array;
144+
145+
switch (res.type) {
146+
case 'ResourceRequest':
147+
sourceData = data;
148+
break;
149+
case 'BlurRequest':
150+
sourceData = blurData;
151+
break;
152+
case 'ZoomRequest':
153+
sourceData = thumbnailData;
154+
break;
155+
default:
156+
throw new Error('Invalid request type');
108157
}
109158

159+
const payload = this.getDataChunk(sourceData, offset, data_length);
110160
const digest = blake2s(payload);
111161

162+
this.updateProgress(payload.byteLength, res.type);
163+
112164
const resourceAckParams = {
113165
data_chunk: bytesToHex(payload),
114166
hash: bytesToHex(digest),
115167
};
116168

117169
const response = await this.device.commands.typedCall(
118170
'ResourceAck',
119-
['ResourceRequest', 'ZoomRequest', 'Success'],
171+
['ResourceRequest', 'ZoomRequest', 'BlurRequest', 'Success'],
120172
resourceAckParams
121173
);
122174
return this.processResourceRequest(response);
@@ -129,12 +181,10 @@ export default class DeviceUploadResource extends BaseMethod<ResourceUpload> {
129181

130182
const res = await this.device.commands.typedCall(
131183
'ResourceUpload',
132-
['ResourceRequest', 'ZoomRequest', 'Success'],
184+
['ResourceRequest', 'ZoomRequest', 'BlurRequest', 'Success'],
133185
this.params
134186
);
135187

136-
this.postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_WINDOW));
137-
138188
return this.processResourceRequest(res);
139189
}
140190
}

packages/core/src/data-manager/MessagesConfig.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,19 @@ type DeviceVersionConfig = {
1010

1111
export const PROTOBUF_MESSAGE_CONFIG: DeviceVersionConfig = {
1212
model_mini: [
13+
// Classic1s starts from 3.5.0, so use latest by default
14+
// Only use v1 for specific old versions (< 3.3.0)
1315
{ minVersion: '3.3.0', messageVersion: 'latest' },
14-
{ minVersion: '0.0.0', messageVersion: 'v1' },
16+
{ minVersion: '0.0.1', messageVersion: 'v1' },
17+
// Fallback to latest for unknown versions (0.0.0) to prevent device type detection issues
18+
{ minVersion: '0.0.0', messageVersion: 'latest' },
1519
],
1620
model_touch: [
21+
// Use latest by default for Touch/Pro
22+
// Only use v1 for specific old versions (< 4.5.0)
1723
{ minVersion: '4.5.0', messageVersion: 'latest' },
18-
{ minVersion: '0.0.0', messageVersion: 'v1' },
24+
{ minVersion: '0.0.1', messageVersion: 'v1' },
25+
// Fallback to latest for unknown versions (0.0.0)
26+
{ minVersion: '0.0.0', messageVersion: 'latest' },
1927
],
2028
};

packages/core/src/data/messages/messages.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7534,6 +7534,10 @@
75347534
"file_name_no_ext": {
75357535
"type": "string",
75367536
"id": 6
7537+
},
7538+
"blur_data_length": {
7539+
"type": "uint32",
7540+
"id": 7
75377541
}
75387542
},
75397543
"nested": {
@@ -7558,6 +7562,19 @@
75587562
}
75597563
}
75607564
},
7565+
"BlurRequest": {
7566+
"fields": {
7567+
"offset": {
7568+
"type": "uint32",
7569+
"id": 1
7570+
},
7571+
"data_length": {
7572+
"rule": "required",
7573+
"type": "uint32",
7574+
"id": 2
7575+
}
7576+
}
7577+
},
75617578
"ResourceRequest": {
75627579
"fields": {
75637580
"offset": {
@@ -12369,6 +12386,7 @@
1236912386
"MessageType_NFTWriteData": 10015,
1237012387
"MessageType_ResourceUpload": 10018,
1237112388
"MessageType_ZoomRequest": 10019,
12389+
"MessageType_BlurRequest": 10032,
1237212390
"MessageType_ResourceRequest": 10020,
1237312391
"MessageType_ResourceAck": 10021,
1237412392
"MessageType_ResourceUpdate": 10022,

packages/core/src/types/api/deviceUploadResource.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export type DeviceUploadResourceParams = {
55
suffix: string;
66
dataHex: string;
77
thumbnailDataHex: string;
8+
blurDataHex: string;
89
resType: ResourceType;
910
nftMetaData: string;
1011
fileNameNoExt?: string;

packages/hd-ble-sdk/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@onekeyfe/hd-ble-sdk",
3-
"version": "1.1.15",
3+
"version": "1.1.16-alpha.1",
44
"author": "OneKey",
55
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
66
"license": "ISC",
@@ -20,8 +20,8 @@
2020
"lint:fix": "eslint . --fix"
2121
},
2222
"dependencies": {
23-
"@onekeyfe/hd-core": "1.1.15",
24-
"@onekeyfe/hd-shared": "1.1.15",
25-
"@onekeyfe/hd-transport-react-native": "1.1.15"
23+
"@onekeyfe/hd-core": "1.1.16-alpha.1",
24+
"@onekeyfe/hd-shared": "1.1.16-alpha.1",
25+
"@onekeyfe/hd-transport-react-native": "1.1.16-alpha.1"
2626
}
2727
}

0 commit comments

Comments
 (0)