@wagmi/connectors 8.0.25 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/esm/baseAccount.js +16 -17
  2. package/dist/esm/baseAccount.js.map +1 -1
  3. package/dist/esm/coinbaseWallet.js +19 -20
  4. package/dist/esm/coinbaseWallet.js.map +1 -1
  5. package/dist/esm/exports/index.js +0 -1
  6. package/dist/esm/exports/index.js.map +1 -1
  7. package/dist/esm/metaMask.js +45 -45
  8. package/dist/esm/metaMask.js.map +1 -1
  9. package/dist/esm/safe.js +29 -38
  10. package/dist/esm/safe.js.map +1 -1
  11. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  12. package/dist/esm/version.js +1 -1
  13. package/dist/esm/version.js.map +1 -1
  14. package/dist/esm/walletConnect.js +24 -25
  15. package/dist/esm/walletConnect.js.map +1 -1
  16. package/dist/types/baseAccount.d.ts.map +1 -1
  17. package/dist/types/coinbaseWallet.d.ts.map +1 -1
  18. package/dist/types/exports/index.d.ts +0 -1
  19. package/dist/types/exports/index.d.ts.map +1 -1
  20. package/dist/types/safe.d.ts.map +1 -1
  21. package/dist/types/version.d.ts +1 -1
  22. package/dist/types/version.d.ts.map +1 -1
  23. package/dist/types/walletConnect.d.ts.map +1 -1
  24. package/package.json +1 -12
  25. package/src/baseAccount.ts +16 -17
  26. package/src/coinbaseWallet.ts +19 -20
  27. package/src/exports/index.ts +0 -1
  28. package/src/metaMask.ts +48 -48
  29. package/src/safe.ts +31 -41
  30. package/src/version.ts +1 -1
  31. package/src/walletConnect.ts +26 -29
  32. package/dist/esm/exports/porto.js +0 -2
  33. package/dist/esm/exports/porto.js.map +0 -1
  34. package/dist/esm/porto.js +0 -285
  35. package/dist/esm/porto.js.map +0 -1
  36. package/dist/types/exports/porto.d.ts +0 -2
  37. package/dist/types/exports/porto.d.ts.map +0 -1
  38. package/dist/types/porto.d.ts +0 -29
  39. package/dist/types/porto.d.ts.map +0 -1
  40. package/src/exports/porto.ts +0 -1
  41. package/src/porto.ts +0 -352
package/src/porto.ts DELETED
@@ -1,352 +0,0 @@
1
- import {
2
- ChainNotConfiguredError,
3
- type Connector,
4
- createConnector,
5
- } from '@wagmi/core'
6
- import type { ExactPartial } from '@wagmi/core/internal'
7
- import type { Porto, RpcSchema } from 'porto'
8
- import {
9
- type Address,
10
- getAddress,
11
- numberToHex,
12
- type ProviderConnectInfo,
13
- type RpcError,
14
- SwitchChainError,
15
- UserRejectedRequestError,
16
- withRetry,
17
- } from 'viem'
18
-
19
- /**
20
- * @deprecated https://ithaca.xyz/updates/sunsetting-porto
21
- */
22
- export type PortoParameters = ExactPartial<Porto.Config>
23
-
24
- /**
25
- * @deprecated https://ithaca.xyz/updates/sunsetting-porto
26
- */
27
- export function porto(parameters: PortoParameters = {}) {
28
- type Provider = ReturnType<typeof Porto.create>['provider']
29
- type ProviderWithEvents = Provider & {
30
- on: NonNullable<Provider['on']>
31
- removeListener: NonNullable<Provider['removeListener']>
32
- }
33
- type Properties = {
34
- connect<withCapabilities extends boolean = false>(parameters?: {
35
- chainId?: number | undefined
36
- capabilities?:
37
- | (RpcSchema.wallet_connect.Capabilities & {
38
- force?: boolean | undefined
39
- })
40
- | undefined
41
- isReconnecting?: boolean | undefined
42
- withCapabilities?: withCapabilities | boolean | undefined
43
- }): Promise<{
44
- accounts: withCapabilities extends true
45
- ? readonly {
46
- address: Address
47
- capabilities: RpcSchema.wallet_connect.ResponseCapabilities
48
- }[]
49
- : readonly Address[]
50
- chainId: number
51
- }>
52
- getPortoInstance(): Promise<Porto.Porto>
53
- onConnect(connectInfo: ProviderConnectInfo): void
54
- }
55
-
56
- const supportsEvents = (provider: Provider): provider is ProviderWithEvents =>
57
- typeof provider.on === 'function' &&
58
- typeof provider.removeListener === 'function'
59
-
60
- return createConnector<Provider, Properties>((wagmiConfig) => {
61
- const chains = wagmiConfig.chains ?? parameters.chains ?? []
62
-
63
- const transports = (() => {
64
- if (wagmiConfig.transports) return wagmiConfig.transports
65
- return parameters.transports
66
- })()
67
-
68
- let porto_promise: Promise<any> | undefined
69
-
70
- let accountsChanged: Connector['onAccountsChanged'] | undefined
71
- let chainChanged: Connector['onChainChanged'] | undefined
72
- let connect: Connector['onConnect'] | undefined
73
- let disconnect: Connector['onDisconnect'] | undefined
74
-
75
- return {
76
- async connect({ chainId = chains[0].id, ...rest } = {}) {
77
- const isReconnecting =
78
- ('isReconnecting' in rest && rest.isReconnecting) || false
79
- const withCapabilities =
80
- ('withCapabilities' in rest && rest.withCapabilities) || false
81
-
82
- let accounts: readonly (Address | { address: Address })[] = []
83
- let currentChainId: number | undefined
84
-
85
- if (isReconnecting) {
86
- ;[accounts, currentChainId] = await Promise.all([
87
- this.getAccounts().catch(() => []),
88
- this.getChainId().catch(() => undefined),
89
- ])
90
- if (chainId && currentChainId !== chainId) {
91
- const chain = await this.switchChain!({ chainId }).catch(
92
- (error) => {
93
- if (error.code === UserRejectedRequestError.code) throw error
94
- return { id: currentChainId }
95
- },
96
- )
97
- currentChainId = chain?.id ?? currentChainId
98
- }
99
- }
100
-
101
- const provider = (await this.getProvider()) as Provider
102
-
103
- try {
104
- if (!accounts?.length && !isReconnecting) {
105
- const { RpcSchema } = await (() => {
106
- // safe webpack optional peer dependency dynamic import
107
- try {
108
- return import(
109
- /* turbopackOptional: true */
110
- 'porto'
111
- )
112
- } catch {
113
- throw new Error('dependency "porto" not found')
114
- }
115
- })()
116
- const { z } = await (() => {
117
- // safe webpack optional peer dependency dynamic import
118
- try {
119
- return import(
120
- /* turbopackOptional: true */
121
- 'porto/internal'
122
- )
123
- } catch {
124
- throw new Error('dependency "porto/internal" not found')
125
- }
126
- })()
127
- const res = await provider.request({
128
- method: 'wallet_connect',
129
- params: [
130
- {
131
- ...('capabilities' in rest
132
- ? {
133
- capabilities: z.encode(
134
- RpcSchema.wallet_connect.Capabilities,
135
- rest.capabilities ?? {},
136
- ),
137
- }
138
- : {}),
139
- chainIds: [
140
- numberToHex(chainId),
141
- ...chains
142
- .filter((x) => x.id !== chainId)
143
- .map((x) => numberToHex(x.id)),
144
- ],
145
- },
146
- ],
147
- })
148
- accounts = res.accounts
149
- currentChainId = Number(res.chainIds[0])
150
- }
151
-
152
- if (!currentChainId) throw new ChainNotConfiguredError()
153
-
154
- // Manage EIP-1193 event listeners
155
- // https://eips.ethereum.org/EIPS/eip-1193#events
156
- if (supportsEvents(provider)) {
157
- if (connect) {
158
- provider.removeListener('connect', connect)
159
- connect = undefined
160
- }
161
- if (!accountsChanged) {
162
- accountsChanged = this.onAccountsChanged.bind(this)
163
- // Porto Provider uses Ox, which uses `readonly Address.Address[]` for `accountsChanged`,
164
- // while Connector `accountsChanged` is `string[]`
165
- provider.on('accountsChanged', accountsChanged as never)
166
- }
167
- if (!chainChanged) {
168
- chainChanged = this.onChainChanged.bind(this)
169
- provider.on('chainChanged', chainChanged)
170
- }
171
- if (!disconnect) {
172
- disconnect = this.onDisconnect.bind(this)
173
- provider.on('disconnect', disconnect)
174
- }
175
- }
176
-
177
- return {
178
- accounts: accounts.map((account) => {
179
- if (typeof account === 'object')
180
- return withCapabilities ? account : account.address
181
- return withCapabilities
182
- ? { address: account, capabilities: {} }
183
- : account
184
- }) as never,
185
- chainId: currentChainId,
186
- }
187
- } catch (err) {
188
- const error = err as RpcError
189
- if (error.code === UserRejectedRequestError.code)
190
- throw new UserRejectedRequestError(error)
191
- throw error
192
- }
193
- },
194
- async disconnect() {
195
- const provider = await this.getProvider()
196
-
197
- if (supportsEvents(provider)) {
198
- if (chainChanged) {
199
- provider.removeListener('chainChanged', chainChanged)
200
- chainChanged = undefined
201
- }
202
- if (disconnect) {
203
- provider.removeListener('disconnect', disconnect)
204
- disconnect = undefined
205
- }
206
- if (!connect) {
207
- connect = this.onConnect.bind(this)
208
- provider.on('connect', connect)
209
- }
210
- }
211
-
212
- await provider.request({ method: 'wallet_disconnect' })
213
- },
214
- async getAccounts() {
215
- const provider = await this.getProvider()
216
- const accounts = await provider.request({
217
- method: 'eth_accounts',
218
- })
219
- return accounts.map((x) => getAddress(x))
220
- },
221
- async getChainId() {
222
- const provider = await this.getProvider()
223
- const hexChainId = await provider.request({
224
- method: 'eth_chainId',
225
- })
226
- return Number(hexChainId)
227
- },
228
- async getPortoInstance() {
229
- porto_promise ??= (async () => {
230
- const { Porto } = await (() => {
231
- // safe webpack optional peer dependency dynamic import
232
- try {
233
- return import(
234
- /* turbopackOptional: true */
235
- 'porto'
236
- )
237
- } catch {
238
- throw new Error('dependency "porto" not found')
239
- }
240
- })()
241
- // @ts-ignore
242
- return Porto.create({
243
- ...parameters,
244
- announceProvider: false,
245
- // @ts-ignore
246
- chains,
247
- // @ts-ignore
248
- transports,
249
- })
250
- })()
251
- return await porto_promise
252
- },
253
- async getProvider() {
254
- return (await this.getPortoInstance()).provider
255
- },
256
- icon: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDIyIiBoZWlnaHQ9IjQyMiIgdmlld0JveD0iMCAwIDQyMiA0MjIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSI0MjIiIGhlaWdodD0iNDIyIiBmaWxsPSJibGFjayIvPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMV8xNSkiPgo8cGF0aCBkPSJNODEgMjg2LjM2NkM4MSAyODAuODkzIDg1LjQ1MDUgMjc2LjQ1NSA5MC45NDA0IDI3Ni40NTVIMzI5LjUxMUMzMzUuMDAxIDI3Ni40NTUgMzM5LjQ1MiAyODAuODkzIDMzOS40NTIgMjg2LjM2NlYzMDYuMTg4QzMzOS40NTIgMzExLjY2MiAzMzUuMDAxIDMxNi4wOTkgMzI5LjUxMSAzMTYuMDk5SDkwLjk0MDRDODUuNDUwNSAzMTYuMDk5IDgxIDMxMS42NjIgODEgMzA2LjE4OFYyODYuMzY2WiIgZmlsbD0id2hpdGUiIGZpbGwtb3BhY2l0eT0iMC41Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTAuOTQwNCAyMzQuODI4Qzg1LjQ1MDUgMjM0LjgyOCA4MSAyMzkuMjY2IDgxIDI0NC43MzlWMjcxLjUzMUM4My44NDMyIDI2OS42MzMgODcuMjYyMiAyNjguNTI2IDkwLjk0MDQgMjY4LjUyNkgzMjkuNTExQzMzMy4xODggMjY4LjUyNiAzMzYuNjA4IDI2OS42MzMgMzM5LjQ1MiAyNzEuNTMxVjI0NC43MzlDMzM5LjQ1MiAyMzkuMjY2IDMzNS4wMDEgMjM0LjgyOCAzMjkuNTExIDIzNC44MjhIOTAuOTQwNFpNMzM5LjQ1MiAyODYuMzY2QzMzOS40NTIgMjgwLjg5MyAzMzUuMDAxIDI3Ni40NTUgMzI5LjUxMSAyNzYuNDU1SDkwLjk0MDRDODUuNDUwNSAyNzYuNDU1IDgxIDI4MC44OTMgODEgMjg2LjM2NlYzMDYuMTlDODEgMzExLjY2NCA4NS40NTA1IDMxNi4xMDEgOTAuOTQwNCAzMTYuMTAxSDMyOS41MTFDMzM1LjAwMSAzMTYuMTAxIDMzOS40NTIgMzExLjY2NCAzMzkuNDUyIDMwNi4xOVYyODYuMzY2WiIgZmlsbD0id2hpdGUiIGZpbGwtb3BhY2l0eT0iMC41Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTAuOTQwNCAxOTMuMjAxQzg1LjQ1MDUgMTkzLjIwMSA4MSAxOTcuNjM4IDgxIDIwMy4xMTJWMjI5LjkwM0M4My44NDMyIDIyOC4wMDYgODcuMjYyMiAyMjYuODk5IDkwLjk0MDQgMjI2Ljg5OUgzMjkuNTExQzMzMy4xODggMjI2Ljg5OSAzMzYuNjA4IDIyOC4wMDYgMzM5LjQ1MiAyMjkuOTAzVjIwMy4xMTJDMzM5LjQ1MiAxOTcuNjM4IDMzNS4wMDEgMTkzLjIwMSAzMjkuNTExIDE5My4yMDFIOTAuOTQwNFpNMzM5LjQ1MiAyNDQuNzM5QzMzOS40NTIgMjM5LjI2NSAzMzUuMDAxIDIzNC44MjggMzI5LjUxMSAyMzQuODI4SDkwLjk0MDRDODUuNDUwNSAyMzQuODI4IDgxIDIzOS4yNjUgODEgMjQ0LjczOVYyNzEuNTNDODEuMjE3NSAyNzEuMzg1IDgxLjQzODMgMjcxLjI0NSA4MS42NjI0IDI3MS4xMDlDODMuODMyNSAyNjkuNzk0IDg2LjMwNTQgMjY4LjkyNyA4OC45NTIzIDI2OC42MzVDODkuNjA1MSAyNjguNTYzIDkwLjI2ODQgMjY4LjUyNiA5MC45NDA0IDI2OC41MjZIMzI5LjUxMUMzMzAuMTgzIDI2OC41MjYgMzMwLjg0NiAyNjguNTYzIDMzMS40OTggMjY4LjYzNUMzMzQuNDE5IDI2OC45NTcgMzM3LjEyOCAyNjkuOTggMzM5LjQ1MiAyNzEuNTNWMjQ0LjczOVpNMzM5LjQ1MiAyODYuMzY2QzMzOS40NTIgMjgxLjAyMSAzMzUuMjA2IDI3Ni42NjMgMzI5Ljg5MyAyNzYuNDYyQzMyOS43NjcgMjc2LjQ1NyAzMjkuNjQgMjc2LjQ1NSAzMjkuNTExIDI3Ni40NTVIOTAuOTQwNEM4NS40NTA1IDI3Ni40NTUgODEgMjgwLjg5MyA4MSAyODYuMzY2VjMwNi4xODhDODEgMzExLjY2MiA4NS40NTA1IDMxNi4xMDEgOTAuOTQwNCAzMTYuMTAxSDMyOS41MTFDMzM1LjAwMSAzMTYuMTAxIDMzOS40NTIgMzExLjY2MiAzMzkuNDUyIDMwNi4xODhWMjg2LjM2NloiIGZpbGw9IndoaXRlIiBmaWxsLW9wYWNpdHk9IjAuNSIvPgo8cGF0aCBvcGFjaXR5PSIwLjMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTguMDE0NiAxMDRDODguNjE3NyAxMDQgODEgMTExLjU5NSA4MSAxMjAuOTY1VjE4OC4yNzZDODMuODQzMiAxODYuMzc5IDg3LjI2MjIgMTg1LjI3MiA5MC45NDA0IDE4NS4yNzJIMzI5LjUxMUMzMzMuMTg4IDE4NS4yNzIgMzM2LjYwOCAxODYuMzc5IDMzOS40NTIgMTg4LjI3NlYxMjAuOTY1QzMzOS40NTIgMTExLjU5NSAzMzEuODMzIDEwNCAzMjIuNDM3IDEwNEg5OC4wMTQ2Wk0zMzkuNDUyIDIwMy4xMTJDMzM5LjQ1MiAxOTcuNjM4IDMzNS4wMDEgMTkzLjIwMSAzMjkuNTExIDE5My4yMDFIOTAuOTQwNEM4NS40NTA1IDE5My4yMDEgODEgMTk3LjYzOCA4MSAyMDMuMTEyVjIyOS45MDNDODEuMjE3NSAyMjkuNzU4IDgxLjQzODMgMjI5LjYxOCA4MS42NjI0IDIyOS40ODJDODMuODMyNSAyMjguMTY3IDg2LjMwNTQgMjI3LjMgODguOTUyMyAyMjcuMDA4Qzg5LjYwNTEgMjI2LjkzNiA5MC4yNjg0IDIyNi44OTkgOTAuOTQwNCAyMjYuODk5SDMyOS41MTFDMzMwLjE4MyAyMjYuODk5IDMzMC44NDYgMjI2LjkzNiAzMzEuNDk4IDIyNy4wMDhDMzM0LjQxOSAyMjcuMzMgMzM3LjEyOCAyMjguMzUyIDMzOS40NTIgMjI5LjkwM1YyMDMuMTEyWk0zMzkuNDUyIDI0NC43MzlDMzM5LjQ1MiAyMzkuMzkzIDMzNS4yMDYgMjM1LjAzNiAzMjkuODkzIDIzNC44MzVDMzI5Ljc2NyAyMzQuODMgMzI5LjY0IDIzNC44MjggMzI5LjUxMSAyMzQuODI4SDkwLjk0MDRDODUuNDUwNSAyMzQuODI4IDgxIDIzOS4yNjUgODEgMjQ0LjczOVYyNzEuNTNMODEuMDcwNyAyNzEuNDgzQzgxLjI2NTMgMjcxLjM1NSA4MS40NjI1IDI3MS4yMyA4MS42NjI0IDI3MS4xMDlDODEuOTA4MyAyNzAuOTYgODIuMTU4MSAyNzAuODE3IDgyLjQxMTcgMjcwLjY3OUM4NC4zOTUzIDI2OS42MDUgODYuNjA1NCAyNjguODk0IDg4Ljk1MjMgMjY4LjYzNUM4OS4wMDUyIDI2OC42MjkgODkuMDU4IDI2OC42MjQgODkuMTExIDI2OC42MThDODkuNzEyNSAyNjguNTU3IDkwLjMyMjggMjY4LjUyNiA5MC45NDA0IDI2OC41MjZIMzI5LjUxMUMzMjkuNzM4IDI2OC41MjYgMzI5Ljk2NSAyNjguNTMgMzMwLjE5MiAyNjguNTM5QzMzMC42MzEgMjY4LjU1NSAzMzEuMDY3IDI2OC41ODcgMzMxLjQ5OCAyNjguNjM1QzMzNC40MTkgMjY4Ljk1NyAzMzcuMTI4IDI2OS45OCAzMzkuNDUyIDI3MS41M1YyNDQuNzM5Wk0zMzkuNDUyIDI4Ni4zNjZDMzM5LjQ1MiAyODEuMDIxIDMzNS4yMDYgMjc2LjY2MyAzMjkuODkzIDI3Ni40NjJMMzI5Ljg2NSAyNzYuNDYxQzMyOS43NDggMjc2LjQ1NyAzMjkuNjI5IDI3Ni40NTUgMzI5LjUxMSAyNzYuNDU1SDkwLjk0MDRDODUuNDUwNSAyNzYuNDU1IDgxIDI4MC44OTMgODEgMjg2LjM2NlYzMDYuMTg4QzgxIDMxMS42NjIgODUuNDUwNSAzMTYuMTAxIDkwLjk0MDQgMzE2LjEwMUgzMjkuNTExQzMzNS4wMDEgMzE2LjEwMSAzMzkuNDUyIDMxMS42NjIgMzM5LjQ1MiAzMDYuMTg4VjI4Ni4zNjZaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMjY5Ljg2OCAxMzEuNzUyQzI2OS44NjggMTI2LjI3OCAyNzQuMzE4IDEyMS44NCAyNzkuODA4IDEyMS44NEgzMTEuNjE4QzMxNy4xMDggMTIxLjg0IDMyMS41NTggMTI2LjI3OCAzMjEuNTU4IDEzMS43NTJWMTYxLjQ4NUMzMjEuNTU4IDE2Ni45NTkgMzE3LjEwOCAxNzEuMzk2IDMxMS42MTggMTcxLjM5NkgyNzkuODA4QzI3NC4zMTggMTcxLjM5NiAyNjkuODY4IDE2Ni45NTkgMjY5Ljg2OCAxNjEuNDg1VjEzMS43NTJaIiBmaWxsPSJ3aGl0ZSIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzFfMTUiPgo8cmVjdCB3aWR0aD0iMjU5IiBoZWlnaHQ9IjIxMyIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDgxIDEwNCkiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K',
257
- id: 'xyz.ithaca.porto',
258
- async isAuthorized() {
259
- try {
260
- // Use retry strategy as some injected wallets (e.g. MetaMask) fail to
261
- // immediately resolve JSON-RPC requests on page load.
262
- const accounts = await withRetry(() => this.getAccounts())
263
- return !!accounts.length
264
- } catch {
265
- return false
266
- }
267
- },
268
- name: 'Porto',
269
- async onAccountsChanged(accounts) {
270
- wagmiConfig.emitter.emit('change', {
271
- accounts: accounts.map((x) => getAddress(x)),
272
- })
273
- },
274
- onChainChanged(chain) {
275
- const chainId = Number(chain)
276
- wagmiConfig.emitter.emit('change', { chainId })
277
- },
278
- async onConnect(connectInfo) {
279
- const accounts = await this.getAccounts()
280
- if (accounts.length === 0) return
281
-
282
- const chainId = Number(connectInfo.chainId)
283
- wagmiConfig.emitter.emit('connect', { accounts, chainId })
284
-
285
- // Manage EIP-1193 event listeners
286
- const provider = await this.getProvider()
287
- if (supportsEvents(provider)) {
288
- if (connect) {
289
- provider.removeListener('connect', connect)
290
- connect = undefined
291
- }
292
- if (!accountsChanged) {
293
- accountsChanged = this.onAccountsChanged.bind(this)
294
- // Porto Provider uses Ox, which uses `readonly Address.Address[]` for `accountsChanged`,
295
- // while Connector `accountsChanged` is `string[]`
296
- provider.on('accountsChanged', accountsChanged as never)
297
- }
298
- if (!chainChanged) {
299
- chainChanged = this.onChainChanged.bind(this)
300
- provider.on('chainChanged', chainChanged)
301
- }
302
- if (!disconnect) {
303
- disconnect = this.onDisconnect.bind(this)
304
- provider.on('disconnect', disconnect)
305
- }
306
- }
307
- },
308
- async onDisconnect(_error) {
309
- const provider = await this.getProvider()
310
-
311
- wagmiConfig.emitter.emit('disconnect')
312
-
313
- // Manage EIP-1193 event listeners
314
- if (supportsEvents(provider)) {
315
- if (chainChanged) {
316
- provider.removeListener('chainChanged', chainChanged)
317
- chainChanged = undefined
318
- }
319
- if (disconnect) {
320
- provider.removeListener('disconnect', disconnect)
321
- disconnect = undefined
322
- }
323
- if (!connect) {
324
- connect = this.onConnect.bind(this)
325
- provider.on('connect', connect)
326
- }
327
- }
328
- },
329
- async setup() {
330
- if (!connect) {
331
- const provider = await this.getProvider()
332
- if (!supportsEvents(provider)) return
333
- connect = this.onConnect.bind(this)
334
- provider.on('connect', connect)
335
- }
336
- },
337
- async switchChain({ chainId }) {
338
- const chain = chains.find((x) => x.id === chainId)
339
- if (!chain) throw new SwitchChainError(new ChainNotConfiguredError())
340
-
341
- const provider = await this.getProvider()
342
- await provider.request({
343
- method: 'wallet_switchEthereumChain',
344
- params: [{ chainId: numberToHex(chainId) }],
345
- })
346
-
347
- return chain
348
- },
349
- type: 'injected',
350
- }
351
- })
352
- }