Skip to content

Commit cb15871

Browse files
authored
feat: apply the adena-wallet-sdk response type (#594)
1 parent 6c5ca2f commit cb15871

File tree

26 files changed

+1047
-488
lines changed

26 files changed

+1047
-488
lines changed

packages/adena-extension/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
"webpack-merge": "^5.10.0"
7676
},
7777
"dependencies": {
78+
"@adena-wallet/sdk": "^0.0.1",
7879
"@gnolang/gno-js-client": "1.3.0",
7980
"@gnolang/tm2-js-client": "1.2.1",
8081
"@tanstack/react-query": "^4.36.1",

packages/adena-extension/src/inject.ts

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
1+
import { WalletResponse } from '@adena-wallet/sdk';
2+
import manifest from '@public/manifest.json';
3+
14
import { EVENT_KEYS } from '@common/constants/event-key.constant';
5+
6+
import { AdenaExecutor } from './inject/executor/executor';
27
import {
3-
AdenaExecutor,
4-
RequestAddedNetworkMessage,
5-
RequestDoContractMessage,
6-
} from './inject/executor/executor';
7-
import manifest from '@public/manifest.json';
8+
AddEstablishResponse,
9+
AddNetworkParams,
10+
AddNetworkResponse,
11+
DoContractResponse,
12+
GetAccountResponse,
13+
SignTxResponse,
14+
SwitchNetworkResponse,
15+
TransactionParams,
16+
} from './inject/types';
817

918
function callbackCustomEvent<T>(event: CustomEvent<T>, callback: (message: T) => void): void {
1019
event.stopImmediatePropagation();
@@ -14,37 +23,37 @@ function callbackCustomEvent<T>(event: CustomEvent<T>, callback: (message: T) =>
1423
const init = (): void => {
1524
const adena = {
1625
version: manifest.version,
17-
async AddEstablish(name: string): Promise<unknown> {
26+
async AddEstablish(name: string): Promise<AddEstablishResponse> {
1827
const executor = new AdenaExecutor();
1928
const response = await executor.addEstablish(name);
2029
return response;
2130
},
22-
async DoContract(message: RequestDoContractMessage): Promise<unknown> {
31+
async DoContract(message: TransactionParams): Promise<DoContractResponse> {
2332
const executor = new AdenaExecutor();
2433
const response = await executor.doContract(message);
2534
return response;
2635
},
27-
async GetAccount(): Promise<unknown> {
36+
async GetAccount(): Promise<GetAccountResponse> {
2837
const executor = new AdenaExecutor();
2938
const response = await executor.getAccount();
3039
return response;
3140
},
32-
async Sign(message: RequestDoContractMessage): Promise<unknown> {
41+
async Sign(message: TransactionParams): Promise<WalletResponse<unknown>> {
3342
const executor = new AdenaExecutor();
3443
const response = await executor.signAmino(message);
3544
return response;
3645
},
37-
async SignTx(message: RequestDoContractMessage): Promise<unknown> {
46+
async SignTx(message: TransactionParams): Promise<SignTxResponse> {
3847
const executor = new AdenaExecutor();
3948
const response = await executor.signTx(message);
4049
return response;
4150
},
42-
async AddNetwork(chain: RequestAddedNetworkMessage): Promise<unknown> {
51+
async AddNetwork(chain: AddNetworkParams): Promise<AddNetworkResponse> {
4352
const executor = new AdenaExecutor();
4453
const response = await executor.addNetwork(chain);
4554
return response;
4655
},
47-
async SwitchNetwork(chainId: string): Promise<unknown> {
56+
async SwitchNetwork(chainId: string): Promise<SwitchNetworkResponse> {
4857
const executor = new AdenaExecutor();
4958
const response = await executor.switchNetwork(chainId);
5059
return response;

packages/adena-extension/src/inject/executor/executor.ts

Lines changed: 69 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,41 @@
1-
import { InjectionMessage, InjectionMessageInstance, MessageKeyType } from '../message';
1+
import {
2+
WalletResponse,
3+
WalletResponseExecuteType,
4+
WalletResponseFailureType,
5+
WalletResponseStatus,
6+
WalletResponseType,
7+
} from '@adena-wallet/sdk';
28
import { v4 as uuidv4 } from 'uuid';
9+
310
import {
411
validateDoContractRequest,
512
validateTransactionMessageOfAddPkg,
613
validateTransactionMessageOfBankSend,
714
validateTransactionMessageOfRun,
815
validateTransactionMessageOfVmCall,
916
} from '@common/validation/validation-message';
17+
import {
18+
AddEstablishResponse,
19+
AddNetworkParams,
20+
AddNetworkResponse,
21+
DoContractResponse,
22+
GetAccountResponse,
23+
SignTxResponse,
24+
SwitchNetworkResponse,
25+
TransactionParams,
26+
} from '@inject/types';
27+
import { InjectionMessage, InjectionMessageInstance } from '../message';
1028

1129
type Params = { [key in string]: any };
1230

13-
export interface RequestAddedNetworkMessage {
14-
chainId: string;
15-
chainName: string;
16-
rpcUrl: string;
17-
}
18-
19-
export interface RequestDoContractMessage {
20-
messages: Array<{
21-
type: string;
22-
value: { [key in string]: any };
23-
}>;
24-
gasFee: number;
25-
gasWanted: number;
26-
memo?: string;
27-
}
28-
2931
export class AdenaExecutor {
3032
private eventKey;
3133

3234
private isListen;
3335

3436
private eventMessage: InjectionMessage | undefined;
3537

36-
private resolver: ((message: unknown) => void) | undefined;
38+
private resolver: ((message: WalletResponse<unknown>) => void) | undefined;
3739

3840
private messages: {
3941
[key in string]: { request: InjectionMessage; response: InjectionMessage | undefined };
@@ -56,90 +58,104 @@ export class AdenaExecutor {
5658
return AdenaExecutor.instance;
5759
};
5860

59-
public addEstablish = (name?: string): Promise<unknown> => {
60-
const eventMessage = AdenaExecutor.createEventMessage('ADD_ESTABLISH', {
61+
public addEstablish = (name?: string): Promise<AddEstablishResponse> => {
62+
const eventMessage = AdenaExecutor.createEventMessage(WalletResponseExecuteType.ADD_ESTABLISH, {
6163
name: name ?? 'Unknown',
6264
});
63-
return this.sendEventMessage(eventMessage);
65+
return this.sendEventMessage<boolean>(eventMessage);
6466
};
6567

66-
public doContract = (params: RequestDoContractMessage): Promise<unknown> => {
68+
public doContract = (params: TransactionParams): Promise<DoContractResponse> => {
6769
const result = this.validateContractMessage(params);
6870
if (result) {
6971
return this.sendEventMessage(result);
7072
}
71-
const eventMessage = AdenaExecutor.createEventMessage('DO_CONTRACT', params);
73+
const eventMessage = AdenaExecutor.createEventMessage(
74+
WalletResponseExecuteType.DO_CONTRACT,
75+
params,
76+
);
7277
return this.sendEventMessage(eventMessage);
7378
};
7479

75-
public getAccount = (): Promise<unknown> => {
76-
const eventMessage = AdenaExecutor.createEventMessage('GET_ACCOUNT');
80+
public getAccount = (): Promise<GetAccountResponse> => {
81+
const eventMessage = AdenaExecutor.createEventMessage(WalletResponseExecuteType.GET_ACCOUNT);
7782
return this.sendEventMessage(eventMessage);
7883
};
7984

80-
public signAmino = (params: RequestDoContractMessage): Promise<unknown> => {
85+
public signAmino = (params: TransactionParams): Promise<WalletResponse<unknown>> => {
8186
const result = this.validateContractMessage(params);
8287
if (result) {
8388
return this.sendEventMessage(result);
8489
}
85-
const eventMessage = AdenaExecutor.createEventMessage('SIGN_AMINO', params);
90+
const eventMessage = AdenaExecutor.createEventMessage(
91+
WalletResponseExecuteType.SIGN_AMINO,
92+
params,
93+
);
8694
return this.sendEventMessage(eventMessage);
8795
};
8896

89-
public signTx = (params: RequestDoContractMessage): Promise<unknown> => {
97+
public signTx = (params: TransactionParams): Promise<SignTxResponse> => {
9098
const result = this.validateContractMessage(params);
9199
if (result) {
92100
return this.sendEventMessage(result);
93101
}
94-
const eventMessage = AdenaExecutor.createEventMessage('SIGN_TX', params);
102+
const eventMessage = AdenaExecutor.createEventMessage(
103+
WalletResponseExecuteType.SIGN_TX,
104+
params,
105+
);
95106
return this.sendEventMessage(eventMessage);
96107
};
97108

98-
public addNetwork = (chain: RequestAddedNetworkMessage): Promise<unknown> => {
99-
const eventMessage = AdenaExecutor.createEventMessage('ADD_NETWORK', { ...chain });
109+
public addNetwork = (chain: AddNetworkParams): Promise<AddNetworkResponse> => {
110+
const eventMessage = AdenaExecutor.createEventMessage(WalletResponseExecuteType.ADD_NETWORK, {
111+
...chain,
112+
});
100113
return this.sendEventMessage(eventMessage);
101114
};
102115

103-
public switchNetwork = (chainId: string): Promise<unknown> => {
104-
const eventMessage = AdenaExecutor.createEventMessage('SWITCH_NETWORK', { chainId });
116+
public switchNetwork = (chainId: string): Promise<SwitchNetworkResponse> => {
117+
const eventMessage = AdenaExecutor.createEventMessage(
118+
WalletResponseExecuteType.SWITCH_NETWORK,
119+
{ chainId },
120+
);
105121
return this.sendEventMessage(eventMessage);
106122
};
107123

108-
private validateContractMessage = (
109-
params: RequestDoContractMessage,
110-
): InjectionMessage | undefined => {
124+
private validateContractMessage = (params: TransactionParams): InjectionMessage | undefined => {
111125
if (!validateDoContractRequest(params)) {
112-
return InjectionMessageInstance.failure('INVALID_FORMAT');
126+
return InjectionMessageInstance.failure(WalletResponseFailureType.INVALID_FORMAT);
113127
}
114128
for (const message of params.messages) {
115129
switch (message.type) {
116130
case '/bank.MsgSend':
117131
if (!validateTransactionMessageOfBankSend(message)) {
118-
return InjectionMessageInstance.failure('INVALID_FORMAT');
132+
return InjectionMessageInstance.failure(WalletResponseFailureType.INVALID_FORMAT);
119133
}
120134
break;
121135
case '/vm.m_call':
122136
if (!validateTransactionMessageOfVmCall(message)) {
123-
return InjectionMessageInstance.failure('INVALID_FORMAT');
137+
return InjectionMessageInstance.failure(WalletResponseFailureType.INVALID_FORMAT);
124138
}
125139
break;
126140
case '/vm.m_addpkg':
127141
if (!validateTransactionMessageOfAddPkg(message)) {
128-
return InjectionMessageInstance.failure('INVALID_FORMAT');
142+
return InjectionMessageInstance.failure(WalletResponseFailureType.INVALID_FORMAT);
129143
}
130144
break;
131145
case '/vm.m_run':
132146
if (!validateTransactionMessageOfRun(message)) {
133-
return InjectionMessageInstance.failure('INVALID_FORMAT');
147+
return InjectionMessageInstance.failure(WalletResponseFailureType.INVALID_FORMAT);
134148
}
135149
break;
136150
default:
137-
return InjectionMessageInstance.failure('UNSUPPORTED_TYPE');
151+
return InjectionMessageInstance.failure(WalletResponseFailureType.UNSUPPORTED_TYPE);
138152
}
139153
}
140154
};
141155

142-
private sendEventMessage = (eventMessage: InjectionMessage): Promise<unknown> => {
156+
private sendEventMessage = <T = unknown>(
157+
eventMessage: InjectionMessage,
158+
): Promise<WalletResponse<T>> => {
143159
this.listen();
144160
this.eventMessage = {
145161
...eventMessage,
@@ -153,8 +169,8 @@ export class AdenaExecutor {
153169
response: undefined,
154170
};
155171

156-
return new Promise((resolver) => {
157-
this.resolver = resolver;
172+
return new Promise<WalletResponse<T>>((resolver) => {
173+
this.resolver = resolver as (message: WalletResponse<unknown>) => void;
158174
}).finally(() => this.unlisten());
159175
};
160176

@@ -171,11 +187,14 @@ export class AdenaExecutor {
171187
window.removeEventListener('message', this.messageHandler, true);
172188
};
173189

174-
private static createEventMessage = (type: MessageKeyType, params?: Params): InjectionMessage => {
190+
private static createEventMessage = (
191+
type: WalletResponseType,
192+
params?: Params,
193+
): InjectionMessage => {
175194
return InjectionMessageInstance.request(type, params);
176195
};
177196

178-
private messageHandler = (event: MessageEvent<InjectionMessage | any>): void => {
197+
private messageHandler = (event: MessageEvent<InjectionMessage>): void => {
179198
const eventData = event.data;
180199
if (eventData.status) {
181200
const { key, status, data, code, message, type } = eventData;
@@ -187,7 +206,7 @@ export class AdenaExecutor {
187206
this.unlisten();
188207
this.resolver &&
189208
this.resolver({
190-
status,
209+
status: status as WalletResponseStatus,
191210
data,
192211
code,
193212
message,
@@ -198,8 +217,8 @@ export class AdenaExecutor {
198217
this.unlisten();
199218
this.resolver &&
200219
this.resolver({
201-
status,
202-
data: Object.keys(data).length > 0 ? data : null,
220+
status: status as WalletResponseStatus,
221+
data: Object.keys(data || {}).length > 0 ? data : null,
203222
code,
204223
message,
205224
type,

packages/adena-extension/src/inject/message/message-handler.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { WalletResponseFailureType } from '@adena-wallet/sdk';
12
import { HandlerMethod } from '.';
23
import { InjectionMessage, InjectionMessageInstance } from './message';
34
import { existsPopups, removePopups } from './methods';
@@ -47,7 +48,9 @@ export class MessageHandler {
4748
existsWallet = false;
4849
}
4950
if (!existsWallet) {
50-
sendResponse(InjectionMessageInstance.failure('NO_ACCOUNT', {}, message.key));
51+
sendResponse(
52+
InjectionMessageInstance.failure(WalletResponseFailureType.NO_ACCOUNT, {}, message.key),
53+
);
5154
return;
5255
}
5356
const isPopup = await existsPopups();
@@ -72,7 +75,7 @@ export class MessageHandler {
7275
.catch(() => {
7376
sendResponse(
7477
InjectionMessageInstance.failure(
75-
'UNRESOLVED_TRANSACTION_EXISTS',
78+
WalletResponseFailureType.UNRESOLVED_TRANSACTION_EXISTS,
7679
message,
7780
message.key,
7881
),
@@ -98,7 +101,11 @@ export class MessageHandler {
98101
})
99102
.catch(() => {
100103
sendResponse(
101-
InjectionMessageInstance.failure('UNEXPECTED_ERROR', message, message.key),
104+
InjectionMessageInstance.failure(
105+
WalletResponseFailureType.UNEXPECTED_ERROR,
106+
message,
107+
message.key,
108+
),
102109
);
103110
});
104111
break;

0 commit comments

Comments
 (0)