Skip to content

Commit 2105126

Browse files
committed
Initialize Ledger Transport only when needed
1 parent 3fd1cfc commit 2105126

File tree

1 file changed

+34
-10
lines changed

1 file changed

+34
-10
lines changed

src/modules/select/wallets/ledger.ts

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -137,16 +137,6 @@ async function ledgerProvider(options: {
137137
let transport: any
138138
let eth: any
139139

140-
try {
141-
transport = LedgerTransport
142-
? await LedgerTransport.create()
143-
: await TransportU2F.create()
144-
145-
eth = new Eth(transport)
146-
} catch (error) {
147-
throw new Error('Error connecting to Ledger wallet')
148-
}
149-
150140
function disconnect() {
151141
transport.close()
152142
dPath = ''
@@ -183,6 +173,32 @@ async function ledgerProvider(options: {
183173
return customPath
184174
}
185175

176+
async function createTransport() {
177+
try {
178+
transport = LedgerTransport
179+
? await LedgerTransport.create()
180+
: await TransportU2F.create()
181+
182+
eth = new Eth(transport)
183+
184+
const observer = {
185+
next: (event: any) => {
186+
if (event.type === 'remove') {
187+
disconnect()
188+
}
189+
},
190+
error: () => {},
191+
complete: () => {}
192+
}
193+
194+
LedgerTransport
195+
? LedgerTransport.listen(observer)
196+
: TransportU2F.listen(observer)
197+
} catch (error) {
198+
throw new Error('Error connecting to Ledger wallet')
199+
}
200+
}
201+
186202
function enable() {
187203
enabled = true
188204
return getAccounts()
@@ -205,6 +221,10 @@ async function ledgerProvider(options: {
205221
}
206222

207223
async function getAddress(path: string) {
224+
if (!eth) {
225+
await createTransport()
226+
}
227+
208228
try {
209229
const result = await eth.getAddress(path)
210230
return result.address
@@ -216,6 +236,10 @@ async function ledgerProvider(options: {
216236
throw new Error('a derivation path is needed to get the public key')
217237
}
218238

239+
if (!eth) {
240+
await createTransport()
241+
}
242+
219243
try {
220244
const result = await eth.getAddress(dPath, false, true)
221245
const { publicKey, chainCode } = result

0 commit comments

Comments
 (0)