@@ -5,23 +5,28 @@ import { WalletInterface } from './interfaces'
5
5
6
6
export function getNetwork ( provider : any ) : Promise < number | any > {
7
7
return new Promise ( ( resolve , reject ) => {
8
- const params = {
8
+ const options = {
9
9
jsonrpc : '2.0' ,
10
10
method : 'net_version' ,
11
11
params : [ ] ,
12
12
id : 42
13
13
}
14
14
15
+ // use MetaMask parameter if there
16
+ if ( provider . chainId ) {
17
+ return resolve ( Number ( provider . chainId ) )
18
+ }
19
+
15
20
const callback = ( e : any , res : any ) => {
16
21
e && reject ( e )
17
22
const result = res && res . result
18
23
resolve ( result && Number ( result ) )
19
24
}
20
25
21
26
if ( typeof provider . sendAsync === 'function' ) {
22
- provider . sendAsync ( params , callback )
27
+ provider . sendAsync ( options , callback )
23
28
} else if ( typeof provider . send === 'function' ) {
24
- provider . send ( params , callback )
29
+ provider . send ( options , callback )
25
30
} else {
26
31
resolve ( null )
27
32
}
@@ -30,23 +35,30 @@ export function getNetwork(provider: any): Promise<number | any> {
30
35
31
36
export function getAddress ( provider : any ) : Promise < string | any > {
32
37
return new Promise ( ( resolve , reject ) => {
33
- const params = {
38
+ const options = {
34
39
jsonrpc : '2.0' ,
35
40
method : 'eth_accounts' ,
36
41
params : [ ] ,
37
42
id : 42
38
43
}
39
44
45
+ // use MetaMask request method if there
46
+ if ( provider . request ) {
47
+ return provider . request ( options ) . then ( ( res : string [ ] ) => {
48
+ return resolve ( res [ 0 ] )
49
+ } )
50
+ }
51
+
40
52
const callback = ( e : any , res : any ) => {
41
53
e && reject ( e )
42
54
const result = res && res . result && res . result [ 0 ]
43
55
resolve ( result )
44
56
}
45
57
46
58
if ( typeof provider . sendAsync === 'function' ) {
47
- provider . sendAsync ( params , callback )
59
+ provider . sendAsync ( options , callback )
48
60
} else if ( typeof provider . send === 'function' ) {
49
- provider . send ( params , callback )
61
+ provider . send ( options , callback )
50
62
} else {
51
63
resolve ( null )
52
64
}
@@ -65,23 +77,31 @@ export function getBalance(
65
77
return
66
78
}
67
79
68
- const params = {
80
+ const options = {
69
81
jsonrpc : '2.0' ,
70
82
method : 'eth_getBalance' ,
71
83
params : [ currentAddress , 'latest' ] ,
72
84
id : 42
73
85
}
74
86
87
+ // use MetaMask request method if there
88
+ if ( provider . request ) {
89
+ return provider
90
+ . request ( options )
91
+ . then ( ( res : string ) => ( res ? new BigNumber ( res ) . toString ( 10 ) : null ) )
92
+ . then ( resolve )
93
+ }
94
+
75
95
const callback = ( e : any , res : any ) => {
76
96
e && reject ( e )
77
97
const result = res && res . result
78
98
resolve ( result && new BigNumber ( result ) . toString ( 10 ) )
79
99
}
80
100
81
101
if ( typeof provider . sendAsync === 'function' ) {
82
- provider . sendAsync ( params , callback )
102
+ provider . sendAsync ( options , callback )
83
103
} else if ( typeof provider . send === 'function' ) {
84
- provider . send ( params , callback )
104
+ provider . send ( options , callback )
85
105
} else {
86
106
resolve ( null )
87
107
}
@@ -131,14 +151,19 @@ export function createModernProviderInterface(provider: any): WalletInterface {
131
151
connect : ( ) =>
132
152
new Promise (
133
153
( resolve : ( ) => void , reject : ( err : { message : string } ) => void ) => {
134
- provider
135
- . enable ( )
136
- . then ( resolve )
137
- . catch ( ( ) =>
138
- reject ( {
139
- message : 'This dapp needs access to your account information.'
154
+ const request = provider . request
155
+ ? getAddress ( provider ) . then ( ( address : string ) => {
156
+ return address
157
+ ? address
158
+ : provider . request ( { method : 'eth_requestAccounts' } )
140
159
} )
141
- )
160
+ : provider . enable ( )
161
+
162
+ return request . then ( resolve ) . catch ( ( ) =>
163
+ reject ( {
164
+ message : 'This dapp needs access to your account information.'
165
+ } )
166
+ )
142
167
}
143
168
) ,
144
169
name : getProviderName ( provider )
@@ -164,7 +189,7 @@ export function getProviderName(provider: any): string | undefined {
164
189
if ( ! provider ) return
165
190
166
191
if ( provider . isWalletIO ) {
167
- return 'wallet.io' ;
192
+ return 'wallet.io'
168
193
}
169
194
170
195
if ( provider . wallet === 'MEETONE' ) {
0 commit comments