@@ -2,7 +2,12 @@ import UniversalProvider from '@walletconnect/universal-provider'
2
2
import { JsonRpcProvider , formatEther , getAddress } from 'ethers'
3
3
4
4
import { type AppKitOptions , WcConstantsUtil , WcHelpersUtil } from '@reown/appkit'
5
- import { ConstantsUtil as CommonConstantsUtil , ParseUtil } from '@reown/appkit-common'
5
+ import {
6
+ ConstantsUtil as CommonConstantsUtil ,
7
+ ErrorUtil ,
8
+ ParseUtil ,
9
+ UserRejectedRequestError
10
+ } from '@reown/appkit-common'
6
11
import {
7
12
AccountController ,
8
13
type CombinedProvider ,
@@ -401,134 +406,146 @@ export class EthersAdapter extends AdapterBlueprint {
401
406
chainId,
402
407
socialUri
403
408
} : AdapterBlueprint . ConnectParams ) : Promise < AdapterBlueprint . ConnectResult > {
404
- const connector = this . connectors . find ( c => HelpersUtil . isLowerCaseMatch ( c . id , id ) )
409
+ try {
410
+ const connector = this . connectors . find ( c => HelpersUtil . isLowerCaseMatch ( c . id , id ) )
405
411
406
- if ( ! connector ) {
407
- throw new Error ( 'Connector not found' )
408
- }
412
+ if ( ! connector ) {
413
+ throw new Error ( 'Connector not found' )
414
+ }
409
415
410
- const connection = this . connectionManager ?. getConnection ( {
411
- address,
412
- connectorId : id ,
413
- connections : this . connections ,
414
- connectors : this . connectors
415
- } )
416
+ const connection = this . connectionManager ?. getConnection ( {
417
+ address,
418
+ connectorId : id ,
419
+ connections : this . connections ,
420
+ connectors : this . connectors
421
+ } )
416
422
417
- if ( connection ) {
418
- const caipNetwork = connection . caipNetwork
423
+ if ( connection ) {
424
+ const caipNetwork = connection . caipNetwork
419
425
420
- if ( ! caipNetwork ) {
421
- throw new Error ( 'EthersAdapter:connect - could not find the caipNetwork to connect' )
422
- }
426
+ if ( ! caipNetwork ) {
427
+ throw new Error ( 'EthersAdapter:connect - could not find the caipNetwork to connect' )
428
+ }
423
429
424
- if ( connection . account ) {
425
- this . emit ( 'accountChanged' , {
426
- address : this . toChecksummedAddress ( connection . account . address ) ,
427
- chainId : caipNetwork . id ,
428
- connector
429
- } )
430
+ if ( connection . account ) {
431
+ this . emit ( 'accountChanged' , {
432
+ address : this . toChecksummedAddress ( connection . account . address ) ,
433
+ chainId : caipNetwork . id ,
434
+ connector
435
+ } )
430
436
431
- return {
432
- address : this . toChecksummedAddress ( connection . account . address ) ,
433
- chainId : caipNetwork . id ,
434
- provider : connector . provider ,
435
- type : connector . type ,
436
- id
437
+ return {
438
+ address : this . toChecksummedAddress ( connection . account . address ) ,
439
+ chainId : caipNetwork . id ,
440
+ provider : connector . provider ,
441
+ type : connector . type ,
442
+ id
443
+ }
437
444
}
438
445
}
439
- }
440
446
441
- const selectedProvider = connector ?. provider as Provider
447
+ const selectedProvider = connector ?. provider as Provider
442
448
443
- if ( ! selectedProvider ) {
444
- throw new Error ( 'Provider not found' )
445
- }
449
+ if ( ! selectedProvider ) {
450
+ throw new Error ( 'Provider not found' )
451
+ }
446
452
447
- let accounts : string [ ] = [ ]
453
+ let accounts : string [ ] = [ ]
448
454
449
- let requestChainId : string | undefined = undefined
455
+ let requestChainId : string | undefined = undefined
450
456
451
- if ( type === ConstantsUtil . CONNECTOR_TYPE_AUTH ) {
452
- const { address : _address , accounts : authAccounts } =
453
- await SIWXUtil . authConnectorAuthenticate ( {
454
- authConnector : selectedProvider as unknown as W3mFrameProvider ,
455
- chainNamespace : CommonConstantsUtil . CHAIN . EVM ,
456
- chainId,
457
- socialUri,
458
- preferredAccountType : getPreferredAccountType ( 'eip155' )
459
- } )
457
+ if ( type === ConstantsUtil . CONNECTOR_TYPE_AUTH ) {
458
+ const { address : _address , accounts : authAccounts } =
459
+ await SIWXUtil . authConnectorAuthenticate ( {
460
+ authConnector : selectedProvider as unknown as W3mFrameProvider ,
461
+ chainNamespace : CommonConstantsUtil . CHAIN . EVM ,
462
+ chainId,
463
+ socialUri,
464
+ preferredAccountType : getPreferredAccountType ( 'eip155' )
465
+ } )
460
466
461
- const caipNetwork = this . getCaipNetworks ( ) . find ( n => n . id . toString ( ) === chainId ?. toString ( ) )
467
+ const caipNetwork = this . getCaipNetworks ( ) . find (
468
+ n => n . id . toString ( ) === chainId ?. toString ( )
469
+ )
462
470
463
- accounts = [ _address ]
471
+ accounts = [ _address ]
472
+
473
+ this . addConnection ( {
474
+ connectorId : id ,
475
+ accounts : authAccounts
476
+ ? authAccounts . map ( account => ( { address : account . address } ) )
477
+ : accounts . map ( account => ( { address : account } ) ) ,
478
+ caipNetwork,
479
+ auth : {
480
+ name : StorageUtil . getConnectedSocialProvider ( ) ,
481
+ username : StorageUtil . getConnectedSocialUsername ( )
482
+ }
483
+ } )
464
484
465
- this . addConnection ( {
466
- connectorId : id ,
467
- accounts : authAccounts
468
- ? authAccounts . map ( account => ( { address : account . address } ) )
469
- : accounts . map ( account => ( { address : account } ) ) ,
470
- caipNetwork,
471
- auth : {
472
- name : StorageUtil . getConnectedSocialProvider ( ) ,
473
- username : StorageUtil . getConnectedSocialUsername ( )
474
- }
475
- } )
485
+ this . emit ( 'accountChanged' , {
486
+ address : this . toChecksummedAddress ( accounts [ 0 ] as Address ) ,
487
+ chainId : Number ( chainId ) ,
488
+ connector
489
+ } )
490
+ } else {
491
+ accounts = await selectedProvider . request ( {
492
+ method : 'eth_requestAccounts'
493
+ } )
476
494
477
- this . emit ( 'accountChanged' , {
478
- address : this . toChecksummedAddress ( accounts [ 0 ] as Address ) ,
479
- chainId : Number ( chainId ) ,
480
- connector
481
- } )
482
- } else {
483
- accounts = await selectedProvider . request ( {
484
- method : 'eth_requestAccounts'
485
- } )
495
+ requestChainId = await selectedProvider . request ( {
496
+ method : 'eth_chainId'
497
+ } )
486
498
487
- requestChainId = await selectedProvider . request ( {
488
- method : 'eth_chainId'
489
- } )
499
+ const caipNetwork = this . getCaipNetworks ( ) . find (
500
+ n => n . id . toString ( ) === chainId ?. toString ( )
501
+ )
490
502
491
- const caipNetwork = this . getCaipNetworks ( ) . find ( n => n . id . toString ( ) === chainId ?. toString ( ) )
503
+ if ( requestChainId !== chainId ) {
504
+ if ( ! caipNetwork ) {
505
+ throw new Error ( 'EthersAdapter:connect - could not find the caipNetwork to switch' )
506
+ }
492
507
493
- if ( requestChainId !== chainId ) {
494
- if ( ! caipNetwork ) {
495
- throw new Error ( 'EthersAdapter:connect - could not find the caipNetwork to switch' )
508
+ try {
509
+ await this . switchNetwork ( {
510
+ caipNetwork,
511
+ provider : selectedProvider ,
512
+ providerType : type as ConnectorType
513
+ } )
514
+ } catch ( error ) {
515
+ throw new Error ( 'EthersAdapter:connect - Switch network failed' )
516
+ }
496
517
}
497
518
498
- try {
499
- await this . switchNetwork ( {
500
- caipNetwork,
501
- provider : selectedProvider ,
502
- providerType : type as ConnectorType
503
- } )
504
- } catch ( error ) {
505
- throw new Error ( 'EthersAdapter:connect - Switch network failed' )
519
+ this . emit ( 'accountChanged' , {
520
+ address : this . toChecksummedAddress ( accounts [ 0 ] as Address ) ,
521
+ chainId : Number ( chainId ) ,
522
+ connector
523
+ } )
524
+
525
+ this . addConnection ( {
526
+ connectorId : id ,
527
+ accounts : accounts . map ( account => ( { address : account } ) ) ,
528
+ caipNetwork
529
+ } )
530
+
531
+ if ( connector . id !== CommonConstantsUtil . CONNECTOR_ID . WALLET_CONNECT ) {
532
+ this . listenProviderEvents ( id , selectedProvider )
506
533
}
507
534
}
508
535
509
- this . emit ( 'accountChanged' , {
536
+ return {
510
537
address : this . toChecksummedAddress ( accounts [ 0 ] as Address ) ,
511
538
chainId : Number ( chainId ) ,
512
- connector
513
- } )
514
-
515
- this . addConnection ( {
516
- connectorId : id ,
517
- accounts : accounts . map ( account => ( { address : account } ) ) ,
518
- caipNetwork
519
- } )
520
-
521
- if ( connector . id !== CommonConstantsUtil . CONNECTOR_ID . WALLET_CONNECT ) {
522
- this . listenProviderEvents ( id , selectedProvider )
539
+ provider : selectedProvider ,
540
+ type : type as ConnectorType ,
541
+ id
542
+ }
543
+ } catch ( err ) {
544
+ if ( ErrorUtil . isUserRejectedRequestError ( err ) ) {
545
+ throw new UserRejectedRequestError ( err )
523
546
}
524
- }
525
547
526
- return {
527
- address : this . toChecksummedAddress ( accounts [ 0 ] as Address ) ,
528
- chainId : Number ( chainId ) ,
529
- provider : selectedProvider ,
530
- type : type as ConnectorType ,
531
- id
548
+ throw err
532
549
}
533
550
}
534
551
0 commit comments