Skip to content

Commit 7fbd63a

Browse files
committed
Merge branch 'develop'
2 parents 8118491 + 20260c3 commit 7fbd63a

19 files changed

+524
-88
lines changed

.prettierrc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44
"useTabs": false,
55
"semi": false,
66
"singleQuote": true,
7-
"trailingComma": "none"
7+
"trailingComma": "none",
8+
"arrowParens": "avoid"
89
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "bnc-onboard",
3-
"version": "1.5.0",
3+
"version": "1.7.0",
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",

src/interfaces.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ export interface Helpers {
102102
networkName: (id: number) => string
103103
getAddress: (provider: any) => Promise<string | any>
104104
getNetwork: (provider: any) => Promise<number | any>
105-
getBalance: (provider: any) => Promise<string | any>
105+
getBalance: (provider: any, address?: string) => Promise<string | any>
106106
resetWalletState: (options?: {
107107
disconnected: boolean
108108
walletName: string
@@ -116,7 +116,7 @@ export interface WalletInterface {
116116
address: StateSyncer
117117
network: StateSyncer
118118
balance: StateSyncer
119-
settings?: () => void
119+
dashboard?: () => void
120120
}
121121

122122
export interface StateSyncer {
@@ -130,7 +130,7 @@ export interface Wallet {
130130
type: 'hardware' | 'injected' | 'sdk'
131131
instance?: any
132132
connect?: () => Promise<{ message: string } | undefined>
133-
settings?: () => void
133+
dashboard?: () => void
134134
}
135135

136136
export interface CommonWalletOptions {

src/modules/select/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ function getModule(name: string): Promise<any> | undefined {
8282
return import('./wallets/trezor')
8383
case 'ledger':
8484
return import('./wallets/ledger')
85+
case 'imToken':
86+
return import('./wallets/imtoken')
8587
case 'unilogin':
8688
return import('./wallets/unilogin')
8789
default:
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
const imTokenIcon = `
2+
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 93 93">
3+
<defs>
4+
<linearGradient id="a" x1="97.185%" x2="-.038%" y1="3.105%" y2="99.699%">
5+
<stop offset="0%" stop-color="#11C4D1"/>
6+
<stop offset="100%" stop-color="#0062AD"/>
7+
</linearGradient>
8+
</defs>
9+
<g fill="none" fill-rule="nonzero">
10+
<path fill="url(#a)" d="M92.755 63.804s0 9.64-1.028 13.78c-1.028 4.187-2.985 7.06-5.09 9.202-2.154 2.142-4.993 4.09-9.3 5.112-4.356 1.023-13.754.974-13.754.974H29.417s-9.642 0-13.803-1.022c-4.16-1.071-7.097-2.97-9.25-5.113-2.155-2.142-4.112-4.966-5.091-9.3-1.028-4.333-.98-13.682-.98-13.682V29.671s0-9.64 1.029-13.78c1.027-4.187 2.985-7.06 5.09-9.202 2.154-2.142 4.993-4.09 9.3-5.113C20.068.554 29.466.603 29.466.603h34.166s9.642 0 13.803 1.022c4.16 1.071 7.097 2.97 9.25 5.113 2.154 2.142 4.112 4.966 5.091 9.3.98 4.333.98 13.682.98 13.682v34.084z"/>
11+
<path fill="#FFF" d="M78.267 28.795c1.909 26.244-15.614 38.71-31.326 40.073-14.587 1.265-28.292-7.304-29.467-20.597-.979-10.955 6.07-15.678 11.6-16.117 5.679-.486 10.427 3.263 10.867 7.84.392 4.382-2.447 6.427-4.454 6.573-1.566.146-3.524-.78-3.72-2.727-.147-1.704.538-1.899.342-3.7-.293-3.214-3.181-3.555-4.747-3.409-1.91.146-5.385 2.338-4.944 7.694.49 5.404 5.874 9.69 12.922 9.056 7.636-.682 12.971-6.378 13.363-14.412 0-.439.098-.828.293-1.218.098-.146.147-.292.294-.438.196-.292.392-.536.636-.779l.686-.682c3.328-3.019 15.37-10.225 26.676-7.985.098 0 .196.049.245.097.44 0 .685.341.734.73"/>
12+
</g>
13+
</svg>
14+
`
15+
16+
export default imTokenIcon

src/modules/select/wallets/authereum.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ function authereum(
5252
return loggedIn && instance.getBalance()
5353
}
5454
},
55-
settings: () =>
55+
dashboard: () =>
5656
openLink(
5757
`https://${
5858
networkId !== 1 ? `${networkName(networkId)}.` : ''

src/modules/select/wallets/imtoken.ts

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import { mobileWalletInstallMessage } from '../content'
2+
import { WalletModule, Helpers, CommonWalletOptions } from '../../../interfaces'
3+
4+
import imTokenIcon from '../wallet-icons/icon-imtoken'
5+
6+
function imtoken(
7+
options: CommonWalletOptions & { rpcUrl: string }
8+
): WalletModule {
9+
const { preferred, label, iconSrc, svg, rpcUrl } = options
10+
11+
return {
12+
name: label || 'imToken',
13+
iconSrc,
14+
svg: svg || imTokenIcon,
15+
wallet: async (helpers: Helpers) => {
16+
const { getProviderName, getBalance } = helpers
17+
const imTokenProvider = (window as any).ethereum
18+
const isImToken = getProviderName(imTokenProvider) === 'imToken'
19+
let createProvider
20+
21+
if (isImToken && rpcUrl) {
22+
createProvider = (await import('./providerEngine')).default
23+
}
24+
25+
const provider = createProvider ? createProvider({ rpcUrl }) : null
26+
27+
let warned = false
28+
29+
return {
30+
provider: imTokenProvider,
31+
interface: isImToken
32+
? {
33+
address: {
34+
get: () => Promise.resolve(imTokenProvider.selectedAddress)
35+
},
36+
network: {
37+
get: () =>
38+
Promise.resolve(Number(imTokenProvider.networkVersion))
39+
},
40+
balance: {
41+
get: () => {
42+
if (!provider) {
43+
if (!warned) {
44+
console.warn(
45+
'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.'
46+
)
47+
warned = true
48+
}
49+
50+
return Promise.resolve(null)
51+
}
52+
53+
return getBalance(provider, imTokenProvider.selectedAddress)
54+
}
55+
},
56+
name: getProviderName(imTokenProvider),
57+
connect: () => imTokenProvider.enable()
58+
}
59+
: null
60+
}
61+
},
62+
type: 'injected',
63+
link: `imtokenv2://navigate?screen=DappView&url=${window.location.href}`,
64+
installMessage: mobileWalletInstallMessage,
65+
mobile: true,
66+
preferred
67+
}
68+
}
69+
70+
export default imtoken

src/modules/select/wallets/ledger.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -101,27 +101,27 @@ async function ledgerProvider(options: {
101101
signTransaction: (transactionData: any, callback: any) => {
102102
signTransaction(transactionData)
103103
.then((res: string) => callback(null, res))
104-
.catch((err) => callback(err, null))
104+
.catch(err => callback(err, null))
105105
},
106106
processMessage: (messageData: any, callback: any) => {
107107
signMessage(messageData)
108108
.then((res: string) => callback(null, res))
109-
.catch((err) => callback(err, null))
109+
.catch(err => callback(err, null))
110110
},
111111
processPersonalMessage: (messageData: any, callback: any) => {
112112
signMessage(messageData)
113113
.then((res: string) => callback(null, res))
114-
.catch((err) => callback(err, null))
114+
.catch(err => callback(err, null))
115115
},
116116
signMessage: (messageData: any, callback: any) => {
117117
signMessage(messageData)
118118
.then((res: string) => callback(null, res))
119-
.catch((err) => callback(err, null))
119+
.catch(err => callback(err, null))
120120
},
121121
signPersonalMessage: (messageData: any, callback: any) => {
122122
signMessage(messageData)
123123
.then((res: string) => callback(null, res))
124-
.catch((err) => callback(err, null))
124+
.catch(err => callback(err, null))
125125
},
126126
rpcUrl
127127
})
@@ -296,8 +296,8 @@ async function ledgerProvider(options: {
296296
function getBalances(addresses: Array<string>) {
297297
return Promise.all(
298298
addresses.map(
299-
(address) =>
300-
new Promise(async (resolve) => {
299+
address =>
300+
new Promise(async resolve => {
301301
const balance = await getBalance(address)
302302
resolve({ address, balance })
303303
})

src/modules/select/wallets/portis.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ function portis(options: SdkWalletOptions & CommonWalletOptions): WalletModule {
6666
}, 1)
6767
})
6868
},
69-
settings: () => openLink('https://wallet.portis.io/')
69+
dashboard: () => openLink('https://wallet.portis.io/')
7070
}
7171
}
7272
},

src/modules/select/wallets/providerEngine.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,22 @@ function createProvider(config: any) {
99
getAccounts,
1010
signTransaction,
1111
rpcUrl,
12+
processMessage,
13+
processPersonalMessage,
1214
signMessage,
1315
signPersonalMessage
1416
} = config
1517

16-
const idMgmt = new HookedWalletSubprovider({
17-
getAccounts,
18-
signTransaction,
19-
signMessage,
20-
signPersonalMessage
21-
})
18+
const idMgmt =
19+
getAccounts &&
20+
new HookedWalletSubprovider({
21+
getAccounts,
22+
signTransaction,
23+
processMessage,
24+
processPersonalMessage,
25+
signMessage,
26+
signPersonalMessage
27+
})
2228

2329
const rpcSubProvider = new RpcSource({
2430
rpcUrl: rpcUrl.includes('http') ? rpcUrl : `https://${rpcUrl}`
@@ -28,7 +34,7 @@ function createProvider(config: any) {
2834

2935
provider.addProvider(new SubscriptionSubprovider())
3036
provider.addProvider(new FilterSubprovider())
31-
provider.addProvider(idMgmt)
37+
idMgmt && provider.addProvider(idMgmt)
3238
provider.addProvider(rpcSubProvider)
3339
provider.start()
3440

0 commit comments

Comments
 (0)