@@ -8,10 +8,16 @@ import {
88 IProvider ,
99 IRequestArguments ,
1010} from './interface/provider'
11- import { ConsoleLike , IAuthResult } from './utils/types'
11+ import {
12+ IAuthResult ,
13+ IProviderConnectInfo ,
14+ IProviderRpcError ,
15+ } from './utils/interface'
1216import { callIframe , readCache , setCache } from './utils/common'
1317import config from '../package.json'
1418import { AddressType , getAddressType } from './utils/address'
19+ import { IProviderMessage } from './utils/interface'
20+ import { ConsoleLike } from './utils/types'
1521
1622/**
1723 * AnyWeb Provider
@@ -27,6 +33,15 @@ export class Provider implements IProvider {
2733 address : string [ ] = [ ]
2834 networkId = - 1
2935 chainId = - 1
36+ url = ''
37+ events : {
38+ onConnect ?: ( connectInfo : IProviderConnectInfo ) => void
39+ onDisconnect ?: ( error : IProviderRpcError ) => void
40+ onChainChanged ?: ( chainId : string ) => void
41+ onAccountsChanged ?: ( accounts : string [ ] ) => void
42+ onMessage ?: ( message : IProviderMessage ) => void
43+ onNetworkChanged ?: ( networkId : string ) => void
44+ } = { }
3045
3146 constructor ( { logger, appId } : BaseProviderOptions ) {
3247 if ( ! logger ) {
@@ -139,6 +154,12 @@ export class Provider implements IProvider {
139154 authType : 'account' ,
140155 } ) ) as IAuthResult
141156 setCache ( result , this )
157+ this . events . onAccountsChanged &&
158+ this . events . onAccountsChanged ( result . address )
159+ this . events . onChainChanged &&
160+ this . events . onChainChanged ( String ( result . chainId ) )
161+ this . events . onNetworkChanged &&
162+ this . events . onNetworkChanged ( String ( result . networkId ) )
142163 return this . address
143164 case 'cfx_sendTransaction' :
144165 const paramsObj = params
@@ -187,5 +208,27 @@ export class Provider implements IProvider {
187208 type,
188209 listener,
189210 } )
211+ switch ( type ) {
212+ case 'connect' :
213+ this . events . onConnect = listener
214+ break
215+ case 'disconnect' :
216+ this . events . onDisconnect = listener
217+ break
218+ case 'chainChanged' :
219+ this . events . onChainChanged = listener
220+ break
221+ case 'accountsChanged' :
222+ this . events . onAccountsChanged = listener
223+ break
224+ case 'message' :
225+ this . events . onMessage = listener
226+ break
227+ case 'networkChanged' :
228+ this . events . onNetworkChanged = listener
229+ break
230+ default :
231+ break
232+ }
190233 }
191234}
0 commit comments