@@ -22,58 +22,46 @@ export enum IFrameMessageAction {
22
22
LedgerSignTypedData = 'ledger-sign-typed-data' ,
23
23
}
24
24
25
- type IFrameMessageResponseStub <
26
- SuccessResult extends Record < string , unknown > ,
27
- FailureResult = Error ,
28
- > = {
25
+ type IFrameMessageResponse < TAction extends IFrameMessageAction > = {
26
+ action : TAction ;
29
27
messageId : number ;
30
28
} & (
31
- | { success : true ; payload : SuccessResult }
32
- | { success : false ; payload : { error : FailureResult } }
29
+ | {
30
+ action : IFrameMessageAction . LedgerConnectionChange ;
31
+ payload : { connected : boolean } ;
32
+ }
33
+ | ( {
34
+ action : IFrameMessageAction . LedgerMakeApp ;
35
+ } & ( { success : true } | { success : false ; error ?: unknown } ) )
36
+ | {
37
+ action : IFrameMessageAction . LedgerUpdateTransport ;
38
+ success : boolean ;
39
+ }
40
+ | ( {
41
+ action : IFrameMessageAction . LedgerUnlock ;
42
+ } & (
43
+ | { success : true ; payload : GetPublicKeyResponse }
44
+ | { success : false ; payload : { error : Error } }
45
+ ) )
46
+ | ( {
47
+ action : IFrameMessageAction . LedgerSignTransaction ;
48
+ } & (
49
+ | { success : true ; payload : LedgerSignTransactionResponse }
50
+ | { success : false ; payload : { error : Error } }
51
+ ) )
52
+ | ( {
53
+ action :
54
+ | IFrameMessageAction . LedgerSignPersonalMessage
55
+ | IFrameMessageAction . LedgerSignTypedData ;
56
+ } & (
57
+ | {
58
+ success : true ;
59
+ payload : LedgerSignMessageResponse | LedgerSignTypedDataResponse ;
60
+ }
61
+ | { success : false ; payload : { error : Error } }
62
+ ) )
33
63
) ;
34
64
35
- type LedgerConnectionChangeActionResponse = {
36
- messageId : number ;
37
- action : IFrameMessageAction . LedgerConnectionChange ;
38
- payload : { connected : boolean } ;
39
- } ;
40
-
41
- type LedgerMakeAppActionResponse = {
42
- messageId : number ;
43
- action : IFrameMessageAction . LedgerMakeApp ;
44
- } & ( { success : true } | { success : false ; error ?: unknown } ) ;
45
-
46
- type LedgerUpdateTransportActionResponse = {
47
- messageId : number ;
48
- action : IFrameMessageAction . LedgerUpdateTransport ;
49
- success : boolean ;
50
- } ;
51
-
52
- type LedgerUnlockActionResponse = {
53
- action : IFrameMessageAction . LedgerUnlock ;
54
- } & IFrameMessageResponseStub < GetPublicKeyResponse > ;
55
-
56
- type LedgerSignTransactionActionResponse = {
57
- action : IFrameMessageAction . LedgerSignTransaction ;
58
- } & IFrameMessageResponseStub < LedgerSignTransactionResponse > ;
59
-
60
- type LedgerSignPersonalMessageActionResponse = {
61
- action : IFrameMessageAction . LedgerSignPersonalMessage ;
62
- } & IFrameMessageResponseStub < LedgerSignMessageResponse > ;
63
-
64
- type LedgerSignTypedDataActionResponse = {
65
- action : IFrameMessageAction . LedgerSignTypedData ;
66
- } & IFrameMessageResponseStub < LedgerSignTypedDataResponse > ;
67
-
68
- export type IFrameMessageResponse =
69
- | LedgerConnectionChangeActionResponse
70
- | LedgerMakeAppActionResponse
71
- | LedgerUpdateTransportActionResponse
72
- | LedgerUnlockActionResponse
73
- | LedgerSignTransactionActionResponse
74
- | LedgerSignPersonalMessageActionResponse
75
- | LedgerSignTypedDataActionResponse ;
76
-
77
65
type IFrameMessage < TAction extends IFrameMessageAction > = {
78
66
action : TAction ;
79
67
params ?: Readonly < Record < string , unknown > > ;
@@ -92,15 +80,17 @@ export class LedgerIframeBridge implements LedgerBridge {
92
80
93
81
eventListener ?: ( eventMessage : {
94
82
origin : string ;
95
- data : IFrameMessageResponse ;
83
+ data : IFrameMessageResponse < IFrameMessageAction > ;
96
84
} ) => void ;
97
85
98
86
isDeviceConnected = false ;
99
87
100
88
currentMessageId = 0 ;
101
89
102
- messageCallbacks : Record < number , ( response : IFrameMessageResponse ) => void > =
103
- { } ;
90
+ messageCallbacks : Record <
91
+ number ,
92
+ ( response : IFrameMessageResponse < IFrameMessageAction > ) => void
93
+ > = { } ;
104
94
105
95
delayedPromise ?: {
106
96
resolve : ( value : boolean ) => void ;
@@ -129,12 +119,10 @@ export class LedgerIframeBridge implements LedgerBridge {
129
119
action : IFrameMessageAction . LedgerMakeApp ,
130
120
} ,
131
121
( response ) => {
132
- if ( 'success' in response && response . success ) {
122
+ if ( response . success ) {
133
123
resolve ( true ) ;
134
- } else if ( 'error' in response ) {
135
- reject ( response . error ) ;
136
124
} else {
137
- reject ( new Error ( 'Unknown error occurred' ) ) ;
125
+ reject ( response . error ) ;
138
126
}
139
127
} ,
140
128
) ;
@@ -159,8 +147,8 @@ export class LedgerIframeBridge implements LedgerBridge {
159
147
action : IFrameMessageAction . LedgerUpdateTransport ,
160
148
params : { transportType } ,
161
149
} ,
162
- ( response ) => {
163
- if ( 'success' in response && response . success ) {
150
+ ( { success } ) => {
151
+ if ( success ) {
164
152
return resolve ( true ) ;
165
153
}
166
154
return reject ( new Error ( 'Ledger transport could not be updated' ) ) ;
@@ -235,16 +223,11 @@ export class LedgerIframeBridge implements LedgerBridge {
235
223
action,
236
224
params,
237
225
} ,
238
- ( response ) => {
239
- if ( 'payload' in response && response . payload ) {
240
- if ( 'success' in response && response . success ) {
241
- return resolve ( response . payload ) ;
242
- }
243
- if ( 'error' in response . payload ) {
244
- return reject ( response . payload . error ) ;
245
- }
226
+ ( { success, payload } ) => {
227
+ if ( success ) {
228
+ return resolve ( payload ) ;
246
229
}
247
- return reject ( new Error ( 'Unknown error occurred' ) ) ;
230
+ return reject ( payload . error ) ;
248
231
} ,
249
232
) ;
250
233
} ) ;
@@ -284,7 +267,7 @@ export class LedgerIframeBridge implements LedgerBridge {
284
267
bridgeUrl : string ,
285
268
eventMessage : {
286
269
origin : string ;
287
- data : IFrameMessageResponse ;
270
+ data : IFrameMessageResponse < IFrameMessageAction > ;
288
271
} ,
289
272
) {
290
273
if ( eventMessage . origin !== this . #getOrigin( bridgeUrl ) ) {
@@ -306,7 +289,7 @@ export class LedgerIframeBridge implements LedgerBridge {
306
289
307
290
#sendMessage< TAction extends IFrameMessageAction > (
308
291
message : IFrameMessage < TAction > ,
309
- callback : ( response : IFrameMessageResponse ) => void ,
292
+ callback : ( response : IFrameMessageResponse < TAction > ) => void ,
310
293
) {
311
294
this . currentMessageId += 1 ;
312
295
@@ -316,7 +299,9 @@ export class LedgerIframeBridge implements LedgerBridge {
316
299
target : LEDGER_IFRAME_ID ,
317
300
} ;
318
301
319
- this . messageCallbacks [ this . currentMessageId ] = callback ;
302
+ this . messageCallbacks [ this . currentMessageId ] = callback as (
303
+ response : IFrameMessageResponse < IFrameMessageAction > ,
304
+ ) => void ;
320
305
321
306
if ( ! this . iframeLoaded || ! this . iframe || ! this . iframe . contentWindow ) {
322
307
throw new Error ( 'The iframe is not loaded yet' ) ;
0 commit comments