Skip to content

Commit 8120617

Browse files
authored
Merge pull request #433 from blocknative/develop
Release 1.13.1
2 parents 31351a0 + 2290ac3 commit 8120617

File tree

10 files changed

+152
-106
lines changed

10 files changed

+152
-106
lines changed

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "bnc-onboard",
3-
"version": "1.13.0",
3+
"version": "1.13.1",
44
"description": "Onboard users to web3 by allowing them to select a wallet, get that wallet ready to transact and have access to synced wallet state.",
55
"keywords": [
66
"ethereum",
@@ -47,7 +47,6 @@
4747
"dependencies": {
4848
"@ledgerhq/hw-app-eth": "^5.21.0",
4949
"@ledgerhq/hw-transport-u2f": "^5.21.0",
50-
"@ledgerhq/hw-transport-webusb": "^5.22.0",
5150
"@portis/web3": "^2.0.0-beta.57",
5251
"@toruslabs/torus-embed": "^1.8.2",
5352
"@unilogin/provider": "^0.6.1",

rollup.config.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ export default {
7272
'ethereumjs-util',
7373
'hdkey',
7474
'@ledgerhq/hw-transport-u2f',
75-
'@ledgerhq/hw-transport-webusb',
7675
'@ledgerhq/hw-app-eth',
7776
'util',
7877
'assert',

src/@types/index.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ declare module 'ethereumjs-util'
1212
declare module 'hdkey'
1313
declare module '@ledgerhq/hw-app-eth'
1414
declare module '@ledgerhq/hw-transport-u2f'
15-
declare module '@ledgerhq/hw-transport-webusb'
1615

1716
declare module '*.png'
1817
declare module '*.svg'

src/modules/select/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ function getModule(name: string): Promise<any> | undefined {
9797
return import('./wallets/mykey')
9898
case 'huobiwallet':
9999
return import('./wallets/huobiwallet')
100+
case 'wallet.io':
101+
return import('./wallets/wallet-io')
100102
case 'hyperpay':
101103
return import('./wallets/hyperpay')
102104
default:
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
const walletIoIcon = `
2+
<svg width="40" height="40" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3+
<!-- Generator: Sketch 61 (89581) - https://sketch.com -->
4+
<title>io</title>
5+
<desc>Created with Sketch.</desc>
6+
<defs>
7+
<linearGradient x1="0%" y1="100%" x2="100%" y2="0%" id="linearGradient-1">
8+
<stop stop-color="#1550FF" offset="0%"></stop>
9+
<stop stop-color="#0D8DFF" offset="100%"></stop>
10+
</linearGradient>
11+
</defs>
12+
<g id="io" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(0.000000, 0.000000)">
13+
<g id="编组">
14+
<rect id="矩形" fill="url(#linearGradient-1)" x="0" y="0" width="1024" height="1024" rx="192"></rect>
15+
<g id="2" transform="translate(142.000000, 354.000000)" fill="#FFFFFF" fill-rule="nonzero">
16+
<path d="M731.739038,157.885431 L653.658027,240.742988 C643.041073,252.009426 625.301078,252.535937 614.03464,241.918982 C612.84708,240.799883 611.75951,239.579221 610.784322,238.270905 L529.136156,128.731487 C521.006704,117.824991 521.881341,102.656017 531.210479,92.7561767 L609.29149,9.89862053 C619.908444,-1.36781768 637.648439,-1.89432843 648.914877,8.72262585 C650.102437,9.84172546 651.190007,11.0623873 652.165195,12.3707028 L733.813361,121.910121 C741.942813,132.816618 741.068176,147.985591 731.739038,157.885431 Z" id="路径"></path>
17+
<path d="M586.491167,312.367718 L508.410156,395.225274 C497.793202,406.491713 480.053207,407.018223 468.786769,396.401269 C467.599209,395.282169 466.511639,394.061508 465.536451,392.753192 L268.220049,128.032931 C260.090597,117.126435 260.965235,101.957461 270.294372,92.0576207 L348.375384,9.20006454 C358.992338,-2.06637367 376.732333,-2.59288442 387.998771,8.02406986 C389.18633,9.14316947 390.2739,10.3638313 391.249089,11.6721468 L588.56549,276.392408 C596.694942,287.298904 595.820305,302.467878 586.491167,312.367718 Z" id="路径" opacity="0.75"></path>
18+
<path d="M586.345922,312.172858 L508.264911,395.030414 C497.647957,406.296852 479.907962,406.823363 468.641524,396.206409 C467.453965,395.087309 466.366395,393.866647 465.391206,392.558332 L369.686767,264.160976 L486.808283,139.874642 L588.420246,276.197548 C596.549698,287.104044 595.67506,302.273017 586.345922,312.172858 Z" id="路径"></path>
19+
<path d="M128.683329,11.9400119 L325.99973,276.660273 C334.129182,287.566769 333.254545,302.735743 323.925407,312.635583 L245.844396,395.493139 C235.227442,406.759578 217.487447,407.286088 206.221009,396.669134 C205.033449,395.550035 203.945879,394.329373 202.970691,393.021057 L5.65428933,128.300796 C-2.47516249,117.3943 -1.60052498,102.225326 7.72861266,92.3254858 L85.8096237,9.46792962 C96.426578,-1.79850858 114.166573,-2.32501933 125.433011,8.29193494 C126.620571,9.41103455 127.708141,10.6316964 128.683329,11.9400119 Z" id="路径" opacity="0.5"></path>
20+
<path d="M224.568875,140.58034 L326.180837,276.903246 C334.310289,287.809742 333.435651,302.978716 324.106514,312.878556 L246.025503,395.736112 C235.408548,407.002551 217.668554,407.529061 206.402115,396.912107 C205.214556,395.793008 204.126986,394.572346 203.151797,393.26403 L107.447358,264.866675 L224.568875,140.58034 Z" id="路径" opacity="0.5"></path>
21+
</g>
22+
</g>
23+
</g>
24+
</svg>
25+
`
26+
27+
export default walletIoIcon

src/modules/select/wallets/ledger.ts

Lines changed: 19 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
import {
2-
LedgerOptions,
3-
WalletModule,
4-
Helpers,
5-
Browser,
6-
OS
7-
} from '../../../interfaces'
1+
import { LedgerOptions, WalletModule, Helpers } from '../../../interfaces'
82

93
import ledgerIcon from '../wallet-icons/icon-ledger'
104

@@ -27,17 +21,15 @@ function ledger(options: LedgerOptions & { networkId: number }): WalletModule {
2721
svg: svg || ledgerIcon,
2822
iconSrc,
2923
wallet: async (helpers: Helpers) => {
30-
const { BigNumber, networkName, resetWalletState, browser, os } = helpers
24+
const { BigNumber, networkName, resetWalletState } = helpers
3125

3226
const provider = await ledgerProvider({
3327
rpcUrl,
3428
networkId,
35-
CustomLedgerTransport: LedgerTransport,
29+
LedgerTransport,
3630
BigNumber,
3731
networkName,
38-
resetWalletState,
39-
browser,
40-
os
32+
resetWalletState
4133
})
4234

4335
return {
@@ -72,18 +64,17 @@ function ledger(options: LedgerOptions & { networkId: number }): WalletModule {
7264
async function ledgerProvider(options: {
7365
networkId: number
7466
rpcUrl: string
75-
CustomLedgerTransport: any
67+
LedgerTransport: any
7668
BigNumber: any
7769
networkName: (id: number) => string
7870
resetWalletState: (options?: {
7971
disconnected: boolean
8072
walletName: string
8173
}) => void
82-
browser: Browser
83-
os: OS
8474
}) {
8575
const { default: createProvider } = await import('./providerEngine')
8676
const { generateAddresses, isValidPath } = await import('./hd-wallet')
77+
const { default: TransportU2F } = await import('@ledgerhq/hw-transport-u2f')
8778
const { default: Eth } = await import('@ledgerhq/hw-app-eth')
8879

8980
const EthereumTx = await import('ethereumjs-tx')
@@ -93,12 +84,10 @@ async function ledgerProvider(options: {
9384
const {
9485
networkId,
9586
rpcUrl,
96-
CustomLedgerTransport,
87+
LedgerTransport,
9788
BigNumber,
9889
networkName,
99-
resetWalletState,
100-
browser,
101-
os
90+
resetWalletState
10291
} = options
10392

10493
let dPath = ''
@@ -158,14 +147,10 @@ async function ledgerProvider(options: {
158147
provider.isCustomPath = isCustomPath
159148

160149
let transport: any
161-
let transportSubscription: any
162150
let eth: any
163151

164152
function disconnect() {
165153
transport && transport.close()
166-
transportSubscription &&
167-
transportSubscription.unsubscribe &&
168-
transportSubscription.unsubscribe()
169154
provider.stop()
170155
resetWalletState({ disconnected: true, walletName: 'Ledger' })
171156
}
@@ -200,54 +185,27 @@ async function ledgerProvider(options: {
200185

201186
async function createTransport() {
202187
try {
188+
transport = LedgerTransport
189+
? await LedgerTransport.create()
190+
: await TransportU2F.create()
191+
192+
eth = new Eth(transport)
193+
203194
const observer = {
204195
next: (event: any) => {
205196
if (event.type === 'remove') {
206197
disconnect()
207198
}
208199
},
209-
error: (error: any) => {
210-
throw new Error(error)
211-
},
200+
error: () => {},
212201
complete: () => {}
213202
}
214203

215-
if (CustomLedgerTransport) {
216-
transport = await CustomLedgerTransport.create()
217-
transportSubscription = CustomLedgerTransport.listen(observer)
218-
} else {
219-
if (
220-
os.name === 'Windows' &&
221-
parseInt(os.versionName) >= 11 &&
222-
(browser.name === 'Internet Explorer' || browser.name === 'Firefox')
223-
) {
224-
throw new Error(
225-
`OS: ${os.name} ${os.versionName} and Browser: ${browser.name} are not compatible with Ledger wallets, please switch to Chrome browser to continue.`
226-
)
227-
} else if (
228-
(os.name === 'macOS' || os.name === 'Linux') &&
229-
(browser.name === 'Firefox' || browser.name === 'Safari')
230-
) {
231-
const { default: TransportU2F } = await import(
232-
'@ledgerhq/hw-transport-u2f'
233-
)
234-
235-
transport = await TransportU2F.create()
236-
} else {
237-
const { default: TransportWebUsb } = await import(
238-
'@ledgerhq/hw-transport-webusb'
239-
)
240-
241-
transport = await TransportWebUsb.create()
242-
transportSubscription = TransportWebUsb.listen(observer)
243-
}
244-
}
245-
246-
eth = new Eth(transport)
204+
LedgerTransport
205+
? LedgerTransport.listen(observer)
206+
: TransportU2F.listen(observer)
247207
} catch (error) {
248-
throw new Error(
249-
'An error occurred when trying to connect to your Ledger wallet'
250-
)
208+
throw new Error('Error connecting to Ledger wallet')
251209
}
252210
}
253211

src/modules/select/wallets/opera-touch.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,38 @@ function operaTouch(options: CommonWalletOptions): WalletModule {
1313
iconSrcSet: iconSrc || operaTouchIcon2x,
1414
svg,
1515
wallet: async (helpers: Helpers) => {
16-
const { getProviderName, createModernProviderInterface } = helpers
16+
const { getProviderName, getAddress, getBalance, getNetwork } = helpers
1717

1818
const provider =
1919
(window as any).ethereum ||
2020
((window as any).web3 && (window as any).web3.currentProvider)
2121

22+
let enabled = false
23+
2224
return {
2325
provider,
2426
interface:
2527
provider && getProviderName(provider) === undefined
26-
? createModernProviderInterface(provider)
28+
? {
29+
name: 'Opera Touch',
30+
connect: () =>
31+
provider.enable().then((res: any) => {
32+
enabled = true
33+
return res
34+
}),
35+
address: {
36+
get: () =>
37+
enabled ? getAddress(provider) : Promise.resolve(null)
38+
},
39+
network: {
40+
get: () =>
41+
enabled ? getNetwork(provider) : Promise.resolve(null)
42+
},
43+
balance: {
44+
get: () =>
45+
enabled ? getBalance(provider) : Promise.resolve(null)
46+
}
47+
}
2748
: null
2849
}
2950
},
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import { mobileWalletInstallMessage } from '../content'
2+
import {
3+
WalletModule,
4+
Helpers,
5+
InjectedWithBalanceOptions
6+
} from '../../../interfaces'
7+
8+
import walletIoIcon from '../wallet-icons/icon-wallet-io'
9+
10+
function walletIoWallet(options: InjectedWithBalanceOptions): WalletModule {
11+
const { preferred, label, svg, rpcUrl } = options
12+
13+
return {
14+
name: label || 'wallet.io',
15+
svg: svg || walletIoIcon,
16+
wallet: async (helpers: Helpers) => {
17+
const { getProviderName, getAddress, getNetwork, getBalance } = helpers
18+
const walletIoProvider =
19+
(window as any).ethereum ||
20+
((window as any).web3 && (window as any).web3.currentProvider)
21+
22+
const isWalleIoWallet =
23+
getProviderName(walletIoProvider) === 'wallet.io'
24+
let createProvider
25+
26+
if (isWalleIoWallet && rpcUrl) {
27+
createProvider = (await import('./providerEngine')).default
28+
}
29+
30+
const provider = createProvider ? createProvider({ rpcUrl }) : null
31+
32+
let warned = false
33+
34+
return {
35+
provider: walletIoProvider,
36+
interface: isWalleIoWallet
37+
? {
38+
address: {
39+
get: () => getAddress(walletIoProvider)
40+
},
41+
network: {
42+
get: () => getNetwork(walletIoProvider)
43+
},
44+
balance: {
45+
get: async () => {
46+
if (!provider) {
47+
if (!warned) {
48+
console.warn(
49+
'The wallet.io Wallet provider does not allow rpc calls preventing Onboard.js from getting the balance. You can pass in a "rpcUrl" to the wallet.io Wallet initialization object to get the balance.'
50+
)
51+
warned = true
52+
}
53+
54+
return null
55+
}
56+
57+
const address = await getAddress(walletIoProvider)
58+
59+
return getBalance(provider, address)
60+
}
61+
},
62+
name: getProviderName(walletIoProvider)
63+
}
64+
: null
65+
}
66+
},
67+
type: 'injected',
68+
link: 'http://wallet.io/',
69+
installMessage: mobileWalletInstallMessage,
70+
mobile: true,
71+
preferred
72+
}
73+
}
74+
75+
export default walletIoWallet

src/utilities.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,10 @@ export function createLegacyProviderInterface(provider: any): WalletInterface {
163163
export function getProviderName(provider: any): string | undefined {
164164
if (!provider) return
165165

166+
if (provider.isWalletIO) {
167+
return 'wallet.io';
168+
}
169+
166170
if (provider.wallet === 'MEETONE') {
167171
return 'MEETONE'
168172
}

0 commit comments

Comments
 (0)