Skip to content

Commit 2cac2af

Browse files
authored
Merge pull request #252 from blocknative/develop
Release 1.3.6
2 parents ab5d0f6 + 9a7317c commit 2cac2af

File tree

7 files changed

+87
-33
lines changed

7 files changed

+87
-33
lines changed

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.3.5",
3+
"version": "1.3.6",
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/components/Modal.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
font-family: 'Helvetica Neue';
1616
justify-content: center;
1717
align-items: center;
18-
position: absolute;
18+
position: fixed;
1919
font-size: 16px;
2020
z-index: 99;
2121
top: 0;

src/interfaces.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ export interface TrezorOptions {
150150

151151
export interface LedgerOptions {
152152
rpcUrl: string
153+
LedgerTransport?: any
153154
}
154155

155156
export interface TorusOptions {
@@ -161,13 +162,12 @@ export interface TorusOptions {
161162
enabledVerifiers: TorusVerifierStatus
162163
}
163164

164-
165165
interface TorusVerifierStatus {
166-
google?: boolean;
167-
facebook?: boolean;
168-
reddit?: boolean;
169-
twitch?: boolean;
170-
discord?: boolean;
166+
google?: boolean
167+
facebook?: boolean
168+
reddit?: boolean
169+
twitch?: boolean
170+
discord?: boolean
171171
}
172172

173173
export interface AuthereumOptions {

src/modules/select/wallets/ledger.ts

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,15 @@ import * as EthereumTx from 'ethereumjs-tx'
1515
import buffer from 'buffer'
1616

1717
function ledger(options: LedgerOptions & CommonWalletOptions): WalletModule {
18-
const { rpcUrl, networkId, preferred, label, iconSrc, svg } = options
18+
const {
19+
rpcUrl,
20+
LedgerTransport,
21+
networkId,
22+
preferred,
23+
label,
24+
iconSrc,
25+
svg
26+
} = options
1927

2028
return {
2129
name: label || 'Ledger',
@@ -27,6 +35,7 @@ function ledger(options: LedgerOptions & CommonWalletOptions): WalletModule {
2735
const provider = await ledgerProvider({
2836
rpcUrl,
2937
networkId,
38+
LedgerTransport,
3039
BigNumber,
3140
networkName
3241
})
@@ -36,7 +45,7 @@ function ledger(options: LedgerOptions & CommonWalletOptions): WalletModule {
3645
interface: {
3746
name: 'Ledger',
3847
connect: provider.enable,
39-
disconnect: () => provider.stop(),
48+
disconnect: provider.disconnect,
4049
address: {
4150
get: async () => provider.getPrimaryAddress()
4251
},
@@ -61,10 +70,11 @@ function ledger(options: LedgerOptions & CommonWalletOptions): WalletModule {
6170
async function ledgerProvider(options: {
6271
networkId: number
6372
rpcUrl: string
73+
LedgerTransport: any
6474
BigNumber: any
6575
networkName: (id: number) => string
6676
}) {
67-
const { networkId, rpcUrl, BigNumber, networkName } = options
77+
const { networkId, rpcUrl, LedgerTransport, BigNumber, networkName } = options
6878
const basePath = networkIdToDerivationPath(networkId)
6979

7080
let addressToPath = new Map()
@@ -90,6 +100,27 @@ async function ledgerProvider(options: {
90100
provider.setPrimaryAccount = setPrimaryAccount
91101
provider.getBalance = getBalance
92102
provider.send = provider.sendAsync
103+
provider.disconnect = disconnect
104+
105+
let transport: any
106+
let eth: any
107+
108+
try {
109+
transport = LedgerTransport
110+
? await LedgerTransport.create()
111+
: await TransportU2F.create()
112+
113+
eth = new Eth(transport)
114+
} catch (error) {
115+
throw new Error('Error connecting to Ledger wallet')
116+
}
117+
118+
function disconnect() {
119+
transport.close()
120+
addressToPath = new Map()
121+
enabled = false
122+
provider.stop()
123+
}
93124

94125
function enable() {
95126
enabled = true
@@ -161,16 +192,6 @@ async function ledgerProvider(options: {
161192
paths.push(`${basePath}/0'/0`)
162193
}
163194

164-
let transport
165-
let eth
166-
167-
try {
168-
transport = await TransportU2F.create()
169-
eth = new Eth(transport)
170-
} catch (error) {
171-
reject({ message: 'Error connecting to Ledger wallet' })
172-
}
173-
174195
for (const path of paths) {
175196
try {
176197
const { address } = await eth.getAddress(path)
@@ -215,15 +236,6 @@ async function ledgerProvider(options: {
215236

216237
async function signTransaction(transactionData: any) {
217238
const path = [...addressToPath.values()][0]
218-
let transport
219-
let eth
220-
221-
try {
222-
transport = await TransportU2F.create()
223-
eth = new Eth(transport)
224-
} catch (error) {
225-
throw new Error('Error connecting to Ledger wallet')
226-
}
227239

228240
try {
229241
const transaction = new EthereumTx.Transaction(transactionData, {

src/validation.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,7 @@ export function validateWalletInit(
527527
appUrl,
528528
email,
529529
rpcUrl,
530+
LedgerTransport,
530531
buildEnv,
531532
buttonPosition,
532533
enableLogging,
@@ -551,6 +552,7 @@ export function validateWalletInit(
551552
'appUrl',
552553
'email',
553554
'rpcUrl',
555+
'LedgerTransport',
554556
'buildEnv',
555557
'buttonPosition',
556558
'enableLogging',
@@ -619,11 +621,17 @@ export function validateWalletInit(
619621
validateType({
620622
name: 'walletInit.appUrl',
621623
value: appUrl,
622-
623624
type: 'string',
624625
optional: true
625626
})
626627

628+
validateType({
629+
name: 'walletInit.LedgerTransport',
630+
value: LedgerTransport,
631+
type: 'function',
632+
optional: true
633+
})
634+
627635
validateType({
628636
name: 'walletInit.email',
629637
value: email,
@@ -660,7 +668,6 @@ export function validateWalletInit(
660668
optional: true
661669
})
662670

663-
664671
validateType({
665672
name: 'walletInit.enabledVerifiers',
666673
value: enabledVerifiers,

src/views/WalletCheck.svelte

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script lang="ts">
22
import { get } from 'svelte/store'
3-
3+
import { onDestroy, onMount } from 'svelte'
44
import { fade } from 'svelte/transition'
55
import BigNumber from 'bignumber.js'
66
@@ -54,6 +54,23 @@
5454
renderModule()
5555
}
5656
57+
function lockScroll() {
58+
window.scrollTo(0, 0)
59+
}
60+
61+
let originalOverflowValue: string
62+
63+
onMount(() => {
64+
originalOverflowValue = window.document.body.style.overflow
65+
window.document.body.style.overflow = 'hidden'
66+
window.addEventListener('scroll', lockScroll)
67+
})
68+
69+
onDestroy(() => {
70+
window.removeEventListener('scroll', lockScroll)
71+
window.document.body.style.overflow = originalOverflowValue
72+
})
73+
5774
async function renderModule() {
5875
checkingModule = true
5976

src/views/WalletSelect.svelte

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import BigNumber from 'bignumber.js'
33
import { get } from 'svelte/store'
44
import { fade } from 'svelte/transition'
5+
import { onDestroy, onMount } from 'svelte'
56
67
import { app, walletInterface, wallet, resetWalletState } from '../stores'
78
@@ -56,6 +57,23 @@
5657
let showingAllWalletModules = false
5758
const showAllWallets = () => (showingAllWalletModules = true)
5859
60+
function lockScroll() {
61+
window.scrollTo(0, 0)
62+
}
63+
64+
let originalOverflowValue: string
65+
66+
onMount(() => {
67+
originalOverflowValue = window.document.body.style.overflow
68+
window.document.body.style.overflow = 'hidden'
69+
window.addEventListener('scroll', lockScroll)
70+
})
71+
72+
onDestroy(() => {
73+
window.removeEventListener('scroll', lockScroll)
74+
window.document.body.style.overflow = originalOverflowValue
75+
})
76+
5977
renderWalletSelect()
6078
6179
async function renderWalletSelect() {

0 commit comments

Comments
 (0)