@@ -2,58 +2,67 @@ import { mobileWalletInstallMessage } from '../content'
2
2
import { WalletModule , Helpers , CommonWalletOptions } from '../../../interfaces'
3
3
4
4
import imTokenIcon from '../wallet-icons/icon-imtoken'
5
+ import createProvider from './providerEngine'
5
6
6
7
function imtoken ( options : CommonWalletOptions ) : WalletModule {
7
- const { preferred, label, iconSrc, svg } = options
8
+ const { preferred, label, iconSrc, svg, rpcUrl } = options
8
9
9
10
return {
10
11
name : label || 'imToken' ,
11
12
iconSrc,
12
13
svg : svg || imTokenIcon ,
13
14
wallet : async ( helpers : Helpers ) => {
14
- const { getProviderName, getBalance } = helpers
15
+ const { getProviderName } = helpers
16
+ const imTokenProvider = ( window as any ) . ethereum
17
+ const provider = rpcUrl ? createProvider ( { rpcUrl } ) : null
15
18
16
- const provider =
17
- ( window as any ) . ethereum ||
18
- ( ( window as any ) . web3 && ( window as any ) . web3 . currentProvider )
19
+ let warned = false
19
20
20
21
return {
21
- provider,
22
+ provider : provider || imTokenProvider ,
22
23
interface :
23
- provider && getProviderName ( provider ) === 'imToken'
24
+ imTokenProvider && getProviderName ( imTokenProvider ) === 'imToken'
24
25
? {
25
26
address : {
26
- get : ( ) => Promise . resolve ( provider . selectedAddress )
27
+ get : ( ) => Promise . resolve ( imTokenProvider . selectedAddress ) ,
27
28
} ,
28
29
network : {
29
- get : ( ) => Promise . resolve ( Number ( provider . networkVersion ) )
30
+ get : ( ) =>
31
+ Promise . resolve ( Number ( imTokenProvider . networkVersion ) ) ,
30
32
} ,
31
33
balance : {
32
34
get : ( ) => {
35
+ if ( ! provider ) {
36
+ ! warned &&
37
+ console . warn (
38
+ 'The imToken provider does not allow rpc calls preventing Onboard.js from getting the balance. You can pass in a "rpcUrl" to the imToken wallet initialization object to get the balance.'
39
+ )
40
+ return Promise . resolve ( null )
41
+ }
33
42
const params = {
34
43
jsonrpc : '2.0' ,
35
44
method : 'eth_getBalance' ,
36
- params : [ provider . selectedAddress , 'latest' ] ,
37
- id : 42
45
+ params : [ imTokenProvider . selectedAddress , 'latest' ] ,
46
+ id : 42 ,
38
47
}
39
48
40
49
return provider . sendAsync ( params ) . then ( ( res : any ) => {
41
50
console . log ( 'balance result:' , res )
42
51
return res
43
52
} )
44
- }
53
+ } ,
45
54
} ,
46
- name : getProviderName ( provider ) ,
47
- connect : ( ) => provider . enable ( )
55
+ name : getProviderName ( imTokenProvider ) ,
56
+ connect : ( ) => imTokenProvider . enable ( ) ,
48
57
}
49
- : null
58
+ : null ,
50
59
}
51
60
} ,
52
61
type : 'injected' ,
53
62
link : `imtokenv2://navigate?screen=DappView&url=${ window . location . href } ` ,
54
63
installMessage : mobileWalletInstallMessage ,
55
64
mobile : true ,
56
- preferred
65
+ preferred,
57
66
}
58
67
}
59
68
0 commit comments