@@ -32,7 +32,7 @@ function ledger(options: LedgerOptions & { networkId: number }): WalletModule {
32
32
const provider = await ledgerProvider ( {
33
33
rpcUrl,
34
34
networkId,
35
- LedgerTransport,
35
+ CustomLedgerTransport : LedgerTransport ,
36
36
BigNumber,
37
37
networkName,
38
38
resetWalletState,
@@ -158,10 +158,14 @@ async function ledgerProvider(options: {
158
158
provider . isCustomPath = isCustomPath
159
159
160
160
let transport : any
161
+ let transportSubscription : any
161
162
let eth : any
162
163
163
164
function disconnect ( ) {
164
165
transport && transport . close ( )
166
+ transportSubscription &&
167
+ transportSubscription . unsubscribe &&
168
+ transportSubscription . unsubscribe ( )
165
169
provider . stop ( )
166
170
resetWalletState ( { disconnected : true , walletName : 'Ledger' } )
167
171
}
@@ -196,15 +200,19 @@ async function ledgerProvider(options: {
196
200
197
201
async function createTransport ( ) {
198
202
try {
199
- const observer = ( event : any ) => {
200
- if ( event . type === 'remove' ) {
201
- disconnect ( )
202
- }
203
+ const observer = {
204
+ next : ( event : any ) => {
205
+ if ( event . type === 'remove' ) {
206
+ disconnect ( )
207
+ }
208
+ } ,
209
+ error : console . log ,
210
+ complete : console . log
203
211
}
204
212
205
213
if ( CustomLedgerTransport ) {
206
214
transport = await CustomLedgerTransport . create ( )
207
- CustomLedgerTransport . listen ( observer )
215
+ transportSubscription = CustomLedgerTransport . listen ( observer )
208
216
} else {
209
217
if (
210
218
os . name === 'Windows' &&
@@ -215,21 +223,21 @@ async function ledgerProvider(options: {
215
223
`OS: ${ os . name } ${ os . versionName } and Browser: ${ browser . name } are not compatible with Ledger wallets, please switch to Chrome browser to continue.`
216
224
)
217
225
} else if (
218
- os . name === 'macOS' &&
226
+ ( os . name === 'macOS' || os . name === 'Linux' ) &&
219
227
( browser . name === 'Firefox' || browser . name === 'Safari' )
220
228
) {
221
229
const { default : TransportU2F } = await import (
222
230
'@ledgerhq/hw-transport-u2f'
223
231
)
224
232
225
- transport = TransportU2F . create ( )
233
+ transport = await TransportU2F . create ( )
226
234
} else {
227
235
const { default : TransportWebUsb } = await import (
228
236
'@ledgerhq/hw-transport-webusb'
229
237
)
230
238
231
- transport = TransportWebUsb . create ( )
232
- CustomLedgerTransport . listen ( observer )
239
+ transport = await TransportWebUsb . create ( )
240
+ transportSubscription = TransportWebUsb . listen ( observer )
233
241
}
234
242
}
235
243
0 commit comments