@@ -18,20 +18,16 @@ import { initLog } from '../utils/debug';
18
18
import * as hdnodeUtils from '../utils/hdnodeUtils' ;
19
19
import { getScriptType , getSerializedPath , isTaprootPath , toHardened } from '../utils/pathUtils' ;
20
20
21
- type MessageType = Messages . MessageType ;
22
- type MessageKey = keyof MessageType ;
23
- type TypedPayload < T extends MessageKey > = {
24
- type : T ;
25
- message : MessageType [ T ] ;
26
- } ;
27
- type TypedCallResponseMap = {
28
- [ K in keyof MessageType ] : TypedPayload < K > ;
29
- } ;
30
- type DefaultPayloadMessage = TypedCallResponseMap [ keyof MessageType ] ;
21
+ type TypedCall = Messages . TypedCall ;
22
+
23
+ export type { TypedCall } ;
31
24
32
25
const logger = initLog ( 'DeviceCommands' ) ;
33
26
34
- const assertType = ( res : DefaultPayloadMessage , resType : MessageKey | MessageKey [ ] ) => {
27
+ const assertType = (
28
+ res : Messages . MessageResponse ,
29
+ resType : Messages . MessageKey | Messages . MessageKey [ ] ,
30
+ ) => {
35
31
const splitResTypes = Array . isArray ( resType ) ? resType : resType . split ( '|' ) ;
36
32
if ( ! splitResTypes . includes ( res . type ) ) {
37
33
throw ERRORS . TypedError (
@@ -295,10 +291,10 @@ export class DeviceCommands {
295
291
}
296
292
297
293
// Sends an async message to the opened device.
298
- private async call (
299
- type : MessageKey ,
300
- msg : DefaultPayloadMessage [ 'message' ] = { } ,
301
- ) : Promise < DefaultPayloadMessage > {
294
+ private async call < T extends Messages . MessageKey > (
295
+ type : T ,
296
+ msg : Messages . MessagePayload < T > ,
297
+ ) : Promise < Messages . MessageResponse > {
302
298
logger . debug ( 'Sending' , type , filterForLog ( type , msg ) ) ;
303
299
304
300
this . callPromise = this . transport . call ( {
@@ -327,32 +323,30 @@ export class DeviceCommands {
327
323
filterForLog ( res . payload . type , res . payload . message ) ,
328
324
) ;
329
325
330
- // TODO: https://github.com/trezor/trezor-suite/issues/5301
331
- // @ts -expect-error
332
326
return res . payload ;
333
327
}
334
328
335
- typedCall < T extends MessageKey , R extends MessageKey [ ] > (
329
+ typedCall < T extends Messages . MessageKey , R extends Messages . MessageKey [ ] > (
336
330
type : T ,
337
331
resType : R ,
338
- msg ?: MessageType [ T ] ,
339
- ) : Promise < TypedCallResponseMap [ R [ number ] ] > ;
340
- typedCall < T extends MessageKey , R extends MessageKey > (
332
+ msg ?: Messages . MessagePayload < T > ,
333
+ ) : Promise < Messages . MessageResponse < R [ number ] > > ;
334
+ typedCall < T extends Messages . MessageKey , R extends Messages . MessageKey > (
341
335
type : T ,
342
336
resType : R ,
343
- msg ?: MessageType [ T ] ,
344
- ) : Promise < TypedPayload < R > > ;
337
+ msg ?: Messages . MessagePayload < T > ,
338
+ ) : Promise < Messages . MessageResponse < R > > ;
345
339
async typedCall (
346
- type : MessageKey ,
347
- resType : MessageKey | MessageKey [ ] ,
348
- msg ?: DefaultPayloadMessage [ 'message' ] ,
340
+ type : Messages . MessageKey ,
341
+ resType : Messages . MessageKey | Messages . MessageKey [ ] ,
342
+ msg : Messages . MessagePayload = { } ,
349
343
) {
350
344
if ( this . disposed ) {
351
345
throw ERRORS . TypedError ( 'Runtime' , 'typedCall: DeviceCommands already disposed' ) ;
352
346
}
353
347
// Assert message type
354
348
// msg is allowed to be undefined for some calls, in that case the schema is an empty object
355
- Assert ( Messages . MessageType . properties [ type ] , msg ?? { } ) ;
349
+ Assert ( Messages . MessageType . properties [ type ] , msg ) ;
356
350
const response = await this . _commonCall ( type , msg ) ;
357
351
try {
358
352
assertType ( response , resType ) ;
@@ -380,7 +374,7 @@ export class DeviceCommands {
380
374
return response ;
381
375
}
382
376
383
- async _commonCall ( type : MessageKey , msg ?: DefaultPayloadMessage [ 'message' ] ) {
377
+ async _commonCall < T extends Messages . MessageKey > ( type : T , msg : Messages . MessagePayload < T > ) {
384
378
if ( this . disposed ) {
385
379
throw ERRORS . TypedError ( 'Runtime' , 'typedCall: DeviceCommands already disposed' ) ;
386
380
}
@@ -389,7 +383,7 @@ export class DeviceCommands {
389
383
return this . _filterCommonTypes ( resp ) ;
390
384
}
391
385
392
- _filterCommonTypes ( res : DefaultPayloadMessage ) : Promise < DefaultPayloadMessage > {
386
+ _filterCommonTypes ( res : Messages . MessageResponse ) : Promise < Messages . MessageResponse > {
393
387
this . device . clearCancelableAction ( ) ;
394
388
395
389
if ( res . type === 'Failure' ) {
@@ -589,5 +583,3 @@ export class DeviceCommands {
589
583
}
590
584
}
591
585
}
592
-
593
- export type TypedCall = DeviceCommands [ 'typedCall' ] ;
0 commit comments