@onekeyfe/hd-transport 1.2.0-alpha.170 → 1.2.0-alpha.172
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__/protocol-v2.test.js +105 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +30 -5
- package/dist/protocols/v2/session.d.ts +2 -0
- package/dist/protocols/v2/session.d.ts.map +1 -1
- package/dist/types/transport.d.ts +1 -0
- package/dist/types/transport.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/protocols/v2/session.ts +37 -2
- package/src/types/transport.ts +3 -1
|
@@ -1003,6 +1003,111 @@ describe('Protocol V2 framing and session', () => {
|
|
|
1003
1003
|
expect(result).toEqual({ type: 'WriteCompleted', message: {} });
|
|
1004
1004
|
});
|
|
1005
1005
|
|
|
1006
|
+
test('session consumes a delayed write-only response without completing the next call', async () => {
|
|
1007
|
+
const requestSuccess = ProtocolV2.encodeFrame(schemas, 'Success', {
|
|
1008
|
+
message: 'install accepted',
|
|
1009
|
+
});
|
|
1010
|
+
const statusResponse = ProtocolV2.encodeFrame(schemas, 'DeviceFirmwareUpdateStatus', {
|
|
1011
|
+
records: [{ target_id: 6, status: 1, path: 'vol0:/coprocessor.bin' }],
|
|
1012
|
+
});
|
|
1013
|
+
const prepareCall = jest.fn();
|
|
1014
|
+
const onResponseAfterWrite = jest.fn();
|
|
1015
|
+
const readFrame = jest
|
|
1016
|
+
.fn()
|
|
1017
|
+
.mockResolvedValueOnce(rewriteSeq(requestSuccess, 1))
|
|
1018
|
+
.mockResolvedValueOnce(rewriteSeq(statusResponse, 2));
|
|
1019
|
+
const session = new ProtocolV2Session({
|
|
1020
|
+
schemas,
|
|
1021
|
+
router: 1,
|
|
1022
|
+
prepareCall,
|
|
1023
|
+
writeFrame: () => Promise.resolve(),
|
|
1024
|
+
readFrame,
|
|
1025
|
+
});
|
|
1026
|
+
|
|
1027
|
+
await expect(
|
|
1028
|
+
session.call(
|
|
1029
|
+
'DeviceFirmwareUpdateRequest',
|
|
1030
|
+
{},
|
|
1031
|
+
{
|
|
1032
|
+
returnAfterWrite: true,
|
|
1033
|
+
expectedTypes: ['Success'],
|
|
1034
|
+
onResponseAfterWrite,
|
|
1035
|
+
}
|
|
1036
|
+
)
|
|
1037
|
+
).resolves.toEqual({ type: 'WriteCompleted', message: {} });
|
|
1038
|
+
|
|
1039
|
+
await expect(
|
|
1040
|
+
session.call(
|
|
1041
|
+
'Ping',
|
|
1042
|
+
{ message: 'status-poll' },
|
|
1043
|
+
{
|
|
1044
|
+
expectedTypes: ['DeviceFirmwareUpdateStatus'],
|
|
1045
|
+
}
|
|
1046
|
+
)
|
|
1047
|
+
).resolves.toMatchObject({
|
|
1048
|
+
type: 'DeviceFirmwareUpdateStatus',
|
|
1049
|
+
message: {
|
|
1050
|
+
records: [{ target_id: 6, status: 1, path: 'vol0:/coprocessor.bin' }],
|
|
1051
|
+
},
|
|
1052
|
+
});
|
|
1053
|
+
|
|
1054
|
+
expect(prepareCall).toHaveBeenCalledTimes(1);
|
|
1055
|
+
expect(onResponseAfterWrite).toHaveBeenCalledWith({
|
|
1056
|
+
type: 'Success',
|
|
1057
|
+
message: { message: 'install accepted' },
|
|
1058
|
+
});
|
|
1059
|
+
expect(readFrame).toHaveBeenCalledTimes(2);
|
|
1060
|
+
});
|
|
1061
|
+
|
|
1062
|
+
test('session preserves a delayed write-only Failure for the next caller', async () => {
|
|
1063
|
+
const requestFailure = ProtocolV2.encodeFrame(schemas, 'Failure', {
|
|
1064
|
+
code: 4,
|
|
1065
|
+
message: 'install cancelled',
|
|
1066
|
+
});
|
|
1067
|
+
const prepareCall = jest.fn();
|
|
1068
|
+
const onResponseAfterWrite = jest.fn();
|
|
1069
|
+
const readFrame = jest.fn().mockResolvedValueOnce(rewriteSeq(requestFailure, 1));
|
|
1070
|
+
const session = new ProtocolV2Session({
|
|
1071
|
+
schemas,
|
|
1072
|
+
router: 1,
|
|
1073
|
+
prepareCall,
|
|
1074
|
+
writeFrame: () => Promise.resolve(),
|
|
1075
|
+
readFrame,
|
|
1076
|
+
});
|
|
1077
|
+
|
|
1078
|
+
await expect(
|
|
1079
|
+
session.call(
|
|
1080
|
+
'DeviceFirmwareUpdateRequest',
|
|
1081
|
+
{},
|
|
1082
|
+
{
|
|
1083
|
+
returnAfterWrite: true,
|
|
1084
|
+
expectedTypes: ['Success'],
|
|
1085
|
+
onResponseAfterWrite,
|
|
1086
|
+
}
|
|
1087
|
+
)
|
|
1088
|
+
).resolves.toEqual({ type: 'WriteCompleted', message: {} });
|
|
1089
|
+
|
|
1090
|
+
await expect(
|
|
1091
|
+
session.call(
|
|
1092
|
+
'Ping',
|
|
1093
|
+
{ message: 'status-poll' },
|
|
1094
|
+
{
|
|
1095
|
+
expectedTypes: ['DeviceFirmwareUpdateStatus'],
|
|
1096
|
+
}
|
|
1097
|
+
)
|
|
1098
|
+
).resolves.toMatchObject({
|
|
1099
|
+
type: 'Failure',
|
|
1100
|
+
message: {
|
|
1101
|
+
code: 4,
|
|
1102
|
+
message: 'install cancelled',
|
|
1103
|
+
},
|
|
1104
|
+
});
|
|
1105
|
+
|
|
1106
|
+
expect(prepareCall).toHaveBeenCalledTimes(1);
|
|
1107
|
+
expect(onResponseAfterWrite).not.toHaveBeenCalled();
|
|
1108
|
+
expect(readFrame).toHaveBeenCalledTimes(1);
|
|
1109
|
+
});
|
|
1110
|
+
|
|
1006
1111
|
test('probeProtocolV2 accepts Success as a normal V2 probe response', async () => {
|
|
1007
1112
|
await expect(
|
|
1008
1113
|
probeProtocolV2({
|
package/dist/index.d.ts
CHANGED
|
@@ -342,7 +342,7 @@ type AcquireInput = {
|
|
|
342
342
|
* transport must probe the protocol on the wire, bypassing any cached result.
|
|
343
343
|
*/
|
|
344
344
|
forceProtocolDetection?: boolean;
|
|
345
|
-
/** Reuse expectedProtocol
|
|
345
|
+
/** Reuse expectedProtocol only when this transport previously confirmed it for the same endpoint. */
|
|
346
346
|
skipProtocolProbe?: boolean;
|
|
347
347
|
};
|
|
348
348
|
type MessageFromOneKey = {
|
|
@@ -362,6 +362,8 @@ type TransportCallOptions = {
|
|
|
362
362
|
onWriteCompleted?: (metrics: TransportWriteMetrics) => void;
|
|
363
363
|
/** Resolve after the complete request frame is written without waiting for a response. */
|
|
364
364
|
returnAfterWrite?: boolean;
|
|
365
|
+
/** Observe the delayed terminal response of a write-only call while a later call is active. */
|
|
366
|
+
onResponseAfterWrite?: (response: MessageFromOneKey) => void;
|
|
365
367
|
/** Prefer acknowledged BLE characteristic writes for this call when supported. */
|
|
366
368
|
writeWithResponse?: boolean;
|
|
367
369
|
};
|
|
@@ -6688,6 +6690,7 @@ type ProtocolV2CallOptions = {
|
|
|
6688
6690
|
onIntermediateResponse?: (response: MessageFromOneKey) => void;
|
|
6689
6691
|
onWriteCompleted?: (metrics: TransportWriteMetrics) => void;
|
|
6690
6692
|
returnAfterWrite?: boolean;
|
|
6693
|
+
onResponseAfterWrite?: (response: MessageFromOneKey) => void;
|
|
6691
6694
|
writeWithResponse?: boolean;
|
|
6692
6695
|
};
|
|
6693
6696
|
|
|
@@ -6701,6 +6704,7 @@ declare class ProtocolV2Session {
|
|
|
6701
6704
|
private readonly sequenceCursor;
|
|
6702
6705
|
private pendingCall;
|
|
6703
6706
|
private pendingWrite;
|
|
6707
|
+
private pendingResponseAfterWrite?;
|
|
6704
6708
|
private lastResponseSequence?;
|
|
6705
6709
|
constructor(options: ProtocolV2SessionOptions);
|
|
6706
6710
|
call(name: string, data: Record<string, unknown>, callOptions?: ProtocolV2CallOptions): Promise<MessageFromOneKey>;
|
package/dist/index.js
CHANGED
|
@@ -1141,8 +1141,10 @@ class ProtocolV2Session {
|
|
|
1141
1141
|
? {}
|
|
1142
1142
|
: { writeWithResponse: callOptions.writeWithResponse })), { generation, signal: abortController.signal });
|
|
1143
1143
|
const runCall = () => __awaiter(this, void 0, void 0, function* () {
|
|
1144
|
-
var _a, _b, _c, _d, _e, _f;
|
|
1145
|
-
|
|
1144
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
1145
|
+
if (!this.pendingResponseAfterWrite) {
|
|
1146
|
+
yield (prepareCall === null || prepareCall === void 0 ? void 0 : prepareCall(baseCallContext));
|
|
1147
|
+
}
|
|
1146
1148
|
const protoSeq = this.sequenceCursor.next();
|
|
1147
1149
|
const frame = ProtocolV2.encodeFrame(schemas, name, data, {
|
|
1148
1150
|
packetSrc,
|
|
@@ -1164,6 +1166,12 @@ class ProtocolV2Session {
|
|
|
1164
1166
|
(_b = logger === null || logger === void 0 ? void 0 : logger.error) === null || _b === void 0 ? void 0 : _b.call(logger, `${logPrefix} write metrics callback failed: ${String(error)}`);
|
|
1165
1167
|
}
|
|
1166
1168
|
if (callOptions.returnAfterWrite) {
|
|
1169
|
+
if ((_c = callOptions.expectedTypes) === null || _c === void 0 ? void 0 : _c.length) {
|
|
1170
|
+
this.pendingResponseAfterWrite = {
|
|
1171
|
+
expectedTypes: new Set(callOptions.expectedTypes),
|
|
1172
|
+
onResponse: callOptions.onResponseAfterWrite,
|
|
1173
|
+
};
|
|
1174
|
+
}
|
|
1167
1175
|
return { type: 'WriteCompleted', message: {} };
|
|
1168
1176
|
}
|
|
1169
1177
|
while (!abortController.signal.aborted) {
|
|
@@ -1208,14 +1216,31 @@ class ProtocolV2Session {
|
|
|
1208
1216
|
}
|
|
1209
1217
|
this.lastResponseSequence = decoded.seq;
|
|
1210
1218
|
const response = call(decoded);
|
|
1211
|
-
|
|
1212
|
-
|
|
1219
|
+
const { pendingResponseAfterWrite } = this;
|
|
1220
|
+
let belongsToWriteOnlyCall = false;
|
|
1221
|
+
if (pendingResponseAfterWrite) {
|
|
1222
|
+
belongsToWriteOnlyCall = pendingResponseAfterWrite.expectedTypes.has(response.type);
|
|
1223
|
+
if (belongsToWriteOnlyCall || COMMON_TERMINAL_RESPONSE_TYPES.has(response.type)) {
|
|
1224
|
+
this.pendingResponseAfterWrite = undefined;
|
|
1225
|
+
if (belongsToWriteOnlyCall) {
|
|
1226
|
+
try {
|
|
1227
|
+
(_d = pendingResponseAfterWrite.onResponse) === null || _d === void 0 ? void 0 : _d.call(pendingResponseAfterWrite, response);
|
|
1228
|
+
}
|
|
1229
|
+
catch (error) {
|
|
1230
|
+
(_e = logger === null || logger === void 0 ? void 0 : logger.error) === null || _e === void 0 ? void 0 : _e.call(logger, `${logPrefix} delayed response callback failed: ${String(error)}`);
|
|
1231
|
+
}
|
|
1232
|
+
}
|
|
1233
|
+
}
|
|
1234
|
+
}
|
|
1235
|
+
if (belongsToWriteOnlyCall) ;
|
|
1236
|
+
else if ((_f = callOptions.intermediateTypes) === null || _f === void 0 ? void 0 : _f.includes(response.type)) {
|
|
1237
|
+
(_g = callOptions.onIntermediateResponse) === null || _g === void 0 ? void 0 : _g.call(callOptions, response);
|
|
1213
1238
|
}
|
|
1214
1239
|
else if (isExpectedTerminalResponse(response, callOptions.expectedTypes)) {
|
|
1215
1240
|
return response;
|
|
1216
1241
|
}
|
|
1217
1242
|
else if (!shouldReduceDebug) {
|
|
1218
|
-
(
|
|
1243
|
+
(_h = logger === null || logger === void 0 ? void 0 : logger.debug) === null || _h === void 0 ? void 0 : _h.call(logger, `[${logPrefix}] skip unexpected response for ${name}: expected=${(_j = callOptions.expectedTypes) === null || _j === void 0 ? void 0 : _j.join('|')} got=${response.type}`);
|
|
1219
1244
|
}
|
|
1220
1245
|
}
|
|
1221
1246
|
}
|
|
@@ -40,6 +40,7 @@ export type ProtocolV2CallOptions = {
|
|
|
40
40
|
onIntermediateResponse?: (response: MessageFromOneKey) => void;
|
|
41
41
|
onWriteCompleted?: (metrics: TransportWriteMetrics) => void;
|
|
42
42
|
returnAfterWrite?: boolean;
|
|
43
|
+
onResponseAfterWrite?: (response: MessageFromOneKey) => void;
|
|
43
44
|
writeWithResponse?: boolean;
|
|
44
45
|
};
|
|
45
46
|
export { concatUint8Arrays, ProtocolV2FrameAssembler };
|
|
@@ -54,6 +55,7 @@ export declare class ProtocolV2Session {
|
|
|
54
55
|
private readonly sequenceCursor;
|
|
55
56
|
private pendingCall;
|
|
56
57
|
private pendingWrite;
|
|
58
|
+
private pendingResponseAfterWrite?;
|
|
57
59
|
private lastResponseSequence?;
|
|
58
60
|
constructor(options: ProtocolV2SessionOptions);
|
|
59
61
|
call(name: string, data: Record<string, unknown>, callOptions?: ProtocolV2CallOptions): Promise<MessageFromOneKey>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/protocols/v2/session.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/protocols/v2/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,6 +55,7 @@ export type TransportCallOptions = {
|
|
|
55
55
|
onIntermediateResponse?: (response: MessageFromOneKey) => void;
|
|
56
56
|
onWriteCompleted?: (metrics: TransportWriteMetrics) => void;
|
|
57
57
|
returnAfterWrite?: boolean;
|
|
58
|
+
onResponseAfterWrite?: (response: MessageFromOneKey) => void;
|
|
58
59
|
writeWithResponse?: boolean;
|
|
59
60
|
};
|
|
60
61
|
type ITransportInitFn = (logger?: any, emitter?: EventEmitter, plugin?: LowlevelTransportSharedPlugin) => Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/types/transport.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/types/transport.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/hd-transport",
|
|
3
|
-
"version": "1.2.0-alpha.
|
|
3
|
+
"version": "1.2.0-alpha.172",
|
|
4
4
|
"description": "Transport layer abstractions and utilities for OneKey hardware SDK.",
|
|
5
5
|
"author": "OneKey",
|
|
6
6
|
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
|
|
@@ -28,5 +28,5 @@
|
|
|
28
28
|
"long": "^4.0.0",
|
|
29
29
|
"protobufjs": "^6.11.2"
|
|
30
30
|
},
|
|
31
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "4c6c4a4fcc52bcdd0b3ec9c36454b2074fa17a8c"
|
|
32
32
|
}
|
|
@@ -60,6 +60,7 @@ export type ProtocolV2CallOptions = {
|
|
|
60
60
|
onIntermediateResponse?: (response: MessageFromOneKey) => void;
|
|
61
61
|
onWriteCompleted?: (metrics: TransportWriteMetrics) => void;
|
|
62
62
|
returnAfterWrite?: boolean;
|
|
63
|
+
onResponseAfterWrite?: (response: MessageFromOneKey) => void;
|
|
63
64
|
writeWithResponse?: boolean;
|
|
64
65
|
};
|
|
65
66
|
|
|
@@ -199,6 +200,11 @@ export class ProtocolV2Session {
|
|
|
199
200
|
// response, but their frames must never interleave with the active request write.
|
|
200
201
|
private pendingWrite: Promise<unknown> = Promise.resolve();
|
|
201
202
|
|
|
203
|
+
private pendingResponseAfterWrite?: {
|
|
204
|
+
expectedTypes: Set<string>;
|
|
205
|
+
onResponse?: (response: MessageFromOneKey) => void;
|
|
206
|
+
};
|
|
207
|
+
|
|
202
208
|
private lastResponseSequence?: number;
|
|
203
209
|
|
|
204
210
|
constructor(options: ProtocolV2SessionOptions) {
|
|
@@ -297,7 +303,11 @@ export class ProtocolV2Session {
|
|
|
297
303
|
};
|
|
298
304
|
|
|
299
305
|
const runCall = async (): Promise<MessageFromOneKey> => {
|
|
300
|
-
|
|
306
|
+
// A write-only call may still have a terminal response in flight. Preserve
|
|
307
|
+
// the continuous receive queue until the next call consumes that response.
|
|
308
|
+
if (!this.pendingResponseAfterWrite) {
|
|
309
|
+
await prepareCall?.(baseCallContext);
|
|
310
|
+
}
|
|
301
311
|
const protoSeq = this.sequenceCursor.next();
|
|
302
312
|
const frame = ProtocolV2.encodeFrame(schemas, name, data, {
|
|
303
313
|
packetSrc,
|
|
@@ -323,6 +333,12 @@ export class ProtocolV2Session {
|
|
|
323
333
|
}
|
|
324
334
|
|
|
325
335
|
if (callOptions.returnAfterWrite) {
|
|
336
|
+
if (callOptions.expectedTypes?.length) {
|
|
337
|
+
this.pendingResponseAfterWrite = {
|
|
338
|
+
expectedTypes: new Set(callOptions.expectedTypes),
|
|
339
|
+
onResponse: callOptions.onResponseAfterWrite,
|
|
340
|
+
};
|
|
341
|
+
}
|
|
326
342
|
return { type: 'WriteCompleted', message: {} };
|
|
327
343
|
}
|
|
328
344
|
|
|
@@ -395,7 +411,26 @@ export class ProtocolV2Session {
|
|
|
395
411
|
this.lastResponseSequence = decoded.seq;
|
|
396
412
|
|
|
397
413
|
const response = check.call(decoded);
|
|
398
|
-
|
|
414
|
+
const { pendingResponseAfterWrite } = this;
|
|
415
|
+
let belongsToWriteOnlyCall = false;
|
|
416
|
+
if (pendingResponseAfterWrite) {
|
|
417
|
+
belongsToWriteOnlyCall = pendingResponseAfterWrite.expectedTypes.has(response.type);
|
|
418
|
+
if (belongsToWriteOnlyCall || COMMON_TERMINAL_RESPONSE_TYPES.has(response.type)) {
|
|
419
|
+
this.pendingResponseAfterWrite = undefined;
|
|
420
|
+
if (belongsToWriteOnlyCall) {
|
|
421
|
+
try {
|
|
422
|
+
pendingResponseAfterWrite.onResponse?.(response);
|
|
423
|
+
} catch (error) {
|
|
424
|
+
logger?.error?.(
|
|
425
|
+
`${logPrefix} delayed response callback failed: ${String(error)}`
|
|
426
|
+
);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
if (belongsToWriteOnlyCall) {
|
|
432
|
+
// The delayed response belongs to the preceding write-only call.
|
|
433
|
+
} else if (callOptions.intermediateTypes?.includes(response.type)) {
|
|
399
434
|
callOptions.onIntermediateResponse?.(response);
|
|
400
435
|
} else if (isExpectedTerminalResponse(response, callOptions.expectedTypes)) {
|
|
401
436
|
return response;
|
package/src/types/transport.ts
CHANGED
|
@@ -59,7 +59,7 @@ export type AcquireInput = {
|
|
|
59
59
|
* transport must probe the protocol on the wire, bypassing any cached result.
|
|
60
60
|
*/
|
|
61
61
|
forceProtocolDetection?: boolean;
|
|
62
|
-
/** Reuse expectedProtocol
|
|
62
|
+
/** Reuse expectedProtocol only when this transport previously confirmed it for the same endpoint. */
|
|
63
63
|
skipProtocolProbe?: boolean;
|
|
64
64
|
};
|
|
65
65
|
|
|
@@ -79,6 +79,8 @@ export type TransportCallOptions = {
|
|
|
79
79
|
onWriteCompleted?: (metrics: TransportWriteMetrics) => void;
|
|
80
80
|
/** Resolve after the complete request frame is written without waiting for a response. */
|
|
81
81
|
returnAfterWrite?: boolean;
|
|
82
|
+
/** Observe the delayed terminal response of a write-only call while a later call is active. */
|
|
83
|
+
onResponseAfterWrite?: (response: MessageFromOneKey) => void;
|
|
82
84
|
/** Prefer acknowledged BLE characteristic writes for this call when supported. */
|
|
83
85
|
writeWithResponse?: boolean;
|
|
84
86
|
};
|