Skip to content

Commit 8ea4a20

Browse files
authored
Merge pull request #446 from blocknative/enhancement/metamask-update
Enhancement: MetaMask update Closes #445
2 parents 8625f5a + 88c8bdf commit 8ea4a20

File tree

1 file changed

+42
-17
lines changed

1 file changed

+42
-17
lines changed

src/utilities.ts

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,28 @@ import { WalletInterface } from './interfaces'
55

66
export function getNetwork(provider: any): Promise<number | any> {
77
return new Promise((resolve, reject) => {
8-
const params = {
8+
const options = {
99
jsonrpc: '2.0',
1010
method: 'net_version',
1111
params: [],
1212
id: 42
1313
}
1414

15+
// use MetaMask parameter if there
16+
if (provider.chainId) {
17+
return resolve(Number(provider.chainId))
18+
}
19+
1520
const callback = (e: any, res: any) => {
1621
e && reject(e)
1722
const result = res && res.result
1823
resolve(result && Number(result))
1924
}
2025

2126
if (typeof provider.sendAsync === 'function') {
22-
provider.sendAsync(params, callback)
27+
provider.sendAsync(options, callback)
2328
} else if (typeof provider.send === 'function') {
24-
provider.send(params, callback)
29+
provider.send(options, callback)
2530
} else {
2631
resolve(null)
2732
}
@@ -30,23 +35,30 @@ export function getNetwork(provider: any): Promise<number | any> {
3035

3136
export function getAddress(provider: any): Promise<string | any> {
3237
return new Promise((resolve, reject) => {
33-
const params = {
38+
const options = {
3439
jsonrpc: '2.0',
3540
method: 'eth_accounts',
3641
params: [],
3742
id: 42
3843
}
3944

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+
4052
const callback = (e: any, res: any) => {
4153
e && reject(e)
4254
const result = res && res.result && res.result[0]
4355
resolve(result)
4456
}
4557

4658
if (typeof provider.sendAsync === 'function') {
47-
provider.sendAsync(params, callback)
59+
provider.sendAsync(options, callback)
4860
} else if (typeof provider.send === 'function') {
49-
provider.send(params, callback)
61+
provider.send(options, callback)
5062
} else {
5163
resolve(null)
5264
}
@@ -65,23 +77,31 @@ export function getBalance(
6577
return
6678
}
6779

68-
const params = {
80+
const options = {
6981
jsonrpc: '2.0',
7082
method: 'eth_getBalance',
7183
params: [currentAddress, 'latest'],
7284
id: 42
7385
}
7486

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+
7595
const callback = (e: any, res: any) => {
7696
e && reject(e)
7797
const result = res && res.result
7898
resolve(result && new BigNumber(result).toString(10))
7999
}
80100

81101
if (typeof provider.sendAsync === 'function') {
82-
provider.sendAsync(params, callback)
102+
provider.sendAsync(options, callback)
83103
} else if (typeof provider.send === 'function') {
84-
provider.send(params, callback)
104+
provider.send(options, callback)
85105
} else {
86106
resolve(null)
87107
}
@@ -131,14 +151,19 @@ export function createModernProviderInterface(provider: any): WalletInterface {
131151
connect: () =>
132152
new Promise(
133153
(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' })
140159
})
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+
)
142167
}
143168
),
144169
name: getProviderName(provider)
@@ -164,7 +189,7 @@ export function getProviderName(provider: any): string | undefined {
164189
if (!provider) return
165190

166191
if (provider.isWalletIO) {
167-
return 'wallet.io';
192+
return 'wallet.io'
168193
}
169194

170195
if (provider.wallet === 'MEETONE') {

0 commit comments

Comments
 (0)