@@ -2,7 +2,12 @@ import UniversalProvider from '@walletconnect/universal-provider'
22import { JsonRpcProvider , formatEther , getAddress } from 'ethers'
33
44import { 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'
611import {
712 AccountController ,
813 type CombinedProvider ,
@@ -401,134 +406,146 @@ export class EthersAdapter extends AdapterBlueprint {
401406 chainId,
402407 socialUri
403408 } : 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 ) )
405411
406- if ( ! connector ) {
407- throw new Error ( 'Connector not found' )
408- }
412+ if ( ! connector ) {
413+ throw new Error ( 'Connector not found' )
414+ }
409415
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+ } )
416422
417- if ( connection ) {
418- const caipNetwork = connection . caipNetwork
423+ if ( connection ) {
424+ const caipNetwork = connection . caipNetwork
419425
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+ }
423429
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+ } )
430436
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+ }
437444 }
438445 }
439- }
440446
441- const selectedProvider = connector ?. provider as Provider
447+ const selectedProvider = connector ?. provider as Provider
442448
443- if ( ! selectedProvider ) {
444- throw new Error ( 'Provider not found' )
445- }
449+ if ( ! selectedProvider ) {
450+ throw new Error ( 'Provider not found' )
451+ }
446452
447- let accounts : string [ ] = [ ]
453+ let accounts : string [ ] = [ ]
448454
449- let requestChainId : string | undefined = undefined
455+ let requestChainId : string | undefined = undefined
450456
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+ } )
460466
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+ )
462470
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+ } )
464484
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+ } )
476494
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+ } )
486498
487- requestChainId = await selectedProvider . request ( {
488- method : 'eth_chainId'
489- } )
499+ const caipNetwork = this . getCaipNetworks ( ) . find (
500+ n => n . id . toString ( ) === chainId ?. toString ( )
501+ )
490502
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+ }
492507
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+ }
496517 }
497518
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 )
506533 }
507534 }
508535
509- this . emit ( 'accountChanged' , {
536+ return {
510537 address : this . toChecksummedAddress ( accounts [ 0 ] as Address ) ,
511538 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 )
523546 }
524- }
525547
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
532549 }
533550 }
534551
0 commit comments