Skip to content

Commit 48787a9

Browse files
committed
feat(add on event): add on event
1 parent 608b5de commit 48787a9

File tree

6 files changed

+80
-12
lines changed

6 files changed

+80
-12
lines changed

example/basic-dapp/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -361,15 +361,18 @@ async function walletInitialized() {
361361
}
362362

363363
provider.on('accountsChanged', (accounts) => {
364-
console.log('accountsChcanged, accounts = ', accounts)
364+
console.log('accountsChanged, accounts = ', accounts)
365365
if (!accounts.length) return unAuthed()
366366
authed(accounts[0])
367367
})
368368

369369
provider.on('chainChanged', (chainId) => {
370+
console.log('chainChanged called', chainId)
370371
getElement('chainId').innerHTML = chainId
371372
provider.request({ method: 'cfx_netVersion' }).then((networkId) => {
372-
getElement('networkId').innerHTML = networkId
373+
setTimeout(() => {
374+
getElement('networkId').innerHTML = networkId
375+
}, 800)
373376
})
374377
})
375378

src/config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
* @author Littleor <me@littleor.cn>
33
* @since 2022/2/12
44
*/
5-
export const BASE_URL = 'http://192.168.31.149:10086/#/'
5+
export const BASE_URL = 'https://app.anyweb.cc/#/'
66
export const API_BASE_URL = 'https://api.anyweb.cc'

src/provider.ts

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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'
1216
import { callIframe, readCache, setCache } from './utils/common'
1317
import config from '../package.json'
1418
import { 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
}

src/utils/common.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import * as forge from 'node-forge'
66
import axios from 'axios'
77
import { API_BASE_URL, BASE_URL } from '../config'
8-
import { IAuthResult } from './types'
8+
import { IAuthResult } from './interface'
99
import { Provider } from '../provider'
1010

1111
/**
@@ -125,6 +125,7 @@ export const readCache = (provider: Provider) => {
125125
provider.address = result.address
126126
provider.networkId = result.networkId
127127
provider.chainId = result.chainId
128+
provider.url = result.url
128129
}
129130
} catch (e) {
130131
provider.logger.error(e)
@@ -137,11 +138,12 @@ export const setCache = (data: IAuthResult, provider: Provider) => {
137138
'anyweb_info',
138139
JSON.stringify({
139140
...data,
140-
expires: 10 * 60 * 1000 + new Date().getTime(),
141+
expires: 1 * 60 * 1000 + new Date().getTime(),
141142
})
142143
)
143144
provider.address = data.address
144145
provider.networkId = data.networkId
145146
provider.chainId = data.chainId
147+
provider.url = data.url
146148
return data
147149
}

src/utils/interface.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* @author Littleor <me@littleor.cn>
3+
* @since 2022/2/18
4+
*/
5+
6+
export interface IAuthResult {
7+
chainId: number
8+
networkId: number
9+
address: string[]
10+
url: string
11+
}
12+
13+
export interface IProviderRpcError extends Error {
14+
message: string
15+
code: number
16+
data?: unknown
17+
}
18+
19+
export interface IProviderConnectInfo {
20+
readonly chainId: string
21+
}
22+
23+
export interface IProviderMessage {
24+
readonly type: string
25+
readonly data: unknown
26+
}

src/utils/types.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,3 @@ export type ConsoleLike = Pick<
66
Console,
77
'log' | 'warn' | 'error' | 'debug' | 'info' | 'trace'
88
>
9-
10-
export interface IAuthResult {
11-
chainId: number
12-
networkId: number
13-
address: string[]
14-
}

0 commit comments

Comments
 (0)