Skip to content

Commit b5cbd56

Browse files
authored
Revert "Fix contradictory typing of IFrameMessageResponse and refactor into modular types (#207)" (#213)
This reverts commit 2f0da8f.
1 parent 4f24e1d commit b5cbd56

File tree

3 files changed

+58
-74
lines changed

3 files changed

+58
-74
lines changed

Diff for: jest.config.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ module.exports = {
4141
// An object that configures minimum threshold enforcement for coverage results
4242
coverageThreshold: {
4343
global: {
44-
branches: 68.06,
44+
branches: 65.42,
4545
functions: 88.57,
46-
lines: 81.29,
47-
statements: 81.21,
46+
lines: 81.63,
47+
statements: 81.55,
4848
},
4949
},
5050

Diff for: src/ledger-iframe-bridge.test.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { hasProperty } from '@metamask/utils';
22

33
import {
4-
type IFrameMessageResponse,
54
IFrameMessageAction,
65
LedgerIframeBridge,
76
} from './ledger-iframe-bridge';
@@ -63,7 +62,7 @@ describe('LedgerIframeBridge', function () {
6362
*/
6463
function stubKeyringIFramePostMessage(
6564
bridgeInstance: LedgerIframeBridge,
66-
fn: (message: IFrameMessageResponse) => void,
65+
fn: (message: any) => void,
6766
) {
6867
if (!isIFrameValid(bridgeInstance.iframe)) {
6968
throw new Error('the iframe is not valid');

Diff for: src/ledger-iframe-bridge.ts

+54-69
Original file line numberDiff line numberDiff line change
@@ -22,58 +22,46 @@ export enum IFrameMessageAction {
2222
LedgerSignTypedData = 'ledger-sign-typed-data',
2323
}
2424

25-
type IFrameMessageResponseStub<
26-
SuccessResult extends Record<string, unknown>,
27-
FailureResult = Error,
28-
> = {
25+
type IFrameMessageResponse<TAction extends IFrameMessageAction> = {
26+
action: TAction;
2927
messageId: number;
3028
} & (
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+
))
3363
);
3464

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-
7765
type IFrameMessage<TAction extends IFrameMessageAction> = {
7866
action: TAction;
7967
params?: Readonly<Record<string, unknown>>;
@@ -92,15 +80,17 @@ export class LedgerIframeBridge implements LedgerBridge {
9280

9381
eventListener?: (eventMessage: {
9482
origin: string;
95-
data: IFrameMessageResponse;
83+
data: IFrameMessageResponse<IFrameMessageAction>;
9684
}) => void;
9785

9886
isDeviceConnected = false;
9987

10088
currentMessageId = 0;
10189

102-
messageCallbacks: Record<number, (response: IFrameMessageResponse) => void> =
103-
{};
90+
messageCallbacks: Record<
91+
number,
92+
(response: IFrameMessageResponse<IFrameMessageAction>) => void
93+
> = {};
10494

10595
delayedPromise?: {
10696
resolve: (value: boolean) => void;
@@ -129,12 +119,10 @@ export class LedgerIframeBridge implements LedgerBridge {
129119
action: IFrameMessageAction.LedgerMakeApp,
130120
},
131121
(response) => {
132-
if ('success' in response && response.success) {
122+
if (response.success) {
133123
resolve(true);
134-
} else if ('error' in response) {
135-
reject(response.error);
136124
} else {
137-
reject(new Error('Unknown error occurred'));
125+
reject(response.error);
138126
}
139127
},
140128
);
@@ -159,8 +147,8 @@ export class LedgerIframeBridge implements LedgerBridge {
159147
action: IFrameMessageAction.LedgerUpdateTransport,
160148
params: { transportType },
161149
},
162-
(response) => {
163-
if ('success' in response && response.success) {
150+
({ success }) => {
151+
if (success) {
164152
return resolve(true);
165153
}
166154
return reject(new Error('Ledger transport could not be updated'));
@@ -235,16 +223,11 @@ export class LedgerIframeBridge implements LedgerBridge {
235223
action,
236224
params,
237225
},
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);
246229
}
247-
return reject(new Error('Unknown error occurred'));
230+
return reject(payload.error);
248231
},
249232
);
250233
});
@@ -284,7 +267,7 @@ export class LedgerIframeBridge implements LedgerBridge {
284267
bridgeUrl: string,
285268
eventMessage: {
286269
origin: string;
287-
data: IFrameMessageResponse;
270+
data: IFrameMessageResponse<IFrameMessageAction>;
288271
},
289272
) {
290273
if (eventMessage.origin !== this.#getOrigin(bridgeUrl)) {
@@ -306,7 +289,7 @@ export class LedgerIframeBridge implements LedgerBridge {
306289

307290
#sendMessage<TAction extends IFrameMessageAction>(
308291
message: IFrameMessage<TAction>,
309-
callback: (response: IFrameMessageResponse) => void,
292+
callback: (response: IFrameMessageResponse<TAction>) => void,
310293
) {
311294
this.currentMessageId += 1;
312295

@@ -316,7 +299,9 @@ export class LedgerIframeBridge implements LedgerBridge {
316299
target: LEDGER_IFRAME_ID,
317300
};
318301

319-
this.messageCallbacks[this.currentMessageId] = callback;
302+
this.messageCallbacks[this.currentMessageId] = callback as (
303+
response: IFrameMessageResponse<IFrameMessageAction>,
304+
) => void;
320305

321306
if (!this.iframeLoaded || !this.iframe || !this.iframe.contentWindow) {
322307
throw new Error('The iframe is not loaded yet');

0 commit comments

Comments
 (0)