1- import { InjectionMessage , InjectionMessageInstance , MessageKeyType } from '../message' ;
1+ import {
2+ WalletResponse ,
3+ WalletResponseExecuteType ,
4+ WalletResponseFailureType ,
5+ WalletResponseStatus ,
6+ WalletResponseType ,
7+ } from '@adena-wallet/sdk' ;
28import { v4 as uuidv4 } from 'uuid' ;
9+
310import {
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
1129type 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-
2931export 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,
0 commit comments