@wagmi/connectors 8.0.26 → 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.
- package/dist/esm/exports/index.js +0 -1
- package/dist/esm/exports/index.js.map +1 -1
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/types/exports/index.d.ts +0 -1
- package/dist/types/exports/index.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.d.ts.map +1 -1
- package/package.json +1 -12
- package/src/exports/index.ts +0 -1
- package/src/version.ts +1 -1
- package/dist/esm/exports/porto.js +0 -2
- package/dist/esm/exports/porto.js.map +0 -1
- package/dist/esm/porto.js +0 -268
- package/dist/esm/porto.js.map +0 -1
- package/dist/types/exports/porto.d.ts +0 -2
- package/dist/types/exports/porto.d.ts.map +0 -1
- package/dist/types/porto.d.ts +0 -29
- package/dist/types/porto.d.ts.map +0 -1
- package/src/exports/porto.ts +0 -1
- package/src/porto.ts +0 -337
package/src/porto.ts
DELETED
|
@@ -1,337 +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 import(
|
|
106
|
-
/* turbopackOptional: true */
|
|
107
|
-
'porto'
|
|
108
|
-
)
|
|
109
|
-
const { z } = await import(
|
|
110
|
-
/* turbopackOptional: true */
|
|
111
|
-
'porto/internal'
|
|
112
|
-
)
|
|
113
|
-
const res = await provider.request({
|
|
114
|
-
method: 'wallet_connect',
|
|
115
|
-
params: [
|
|
116
|
-
{
|
|
117
|
-
...('capabilities' in rest
|
|
118
|
-
? {
|
|
119
|
-
capabilities: z.encode(
|
|
120
|
-
RpcSchema.wallet_connect.Capabilities,
|
|
121
|
-
rest.capabilities ?? {},
|
|
122
|
-
),
|
|
123
|
-
}
|
|
124
|
-
: {}),
|
|
125
|
-
chainIds: [
|
|
126
|
-
numberToHex(chainId),
|
|
127
|
-
...chains
|
|
128
|
-
.filter((x) => x.id !== chainId)
|
|
129
|
-
.map((x) => numberToHex(x.id)),
|
|
130
|
-
],
|
|
131
|
-
},
|
|
132
|
-
],
|
|
133
|
-
})
|
|
134
|
-
accounts = res.accounts
|
|
135
|
-
currentChainId = Number(res.chainIds[0])
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
if (!currentChainId) throw new ChainNotConfiguredError()
|
|
139
|
-
|
|
140
|
-
// Manage EIP-1193 event listeners
|
|
141
|
-
// https://eips.ethereum.org/EIPS/eip-1193#events
|
|
142
|
-
if (supportsEvents(provider)) {
|
|
143
|
-
if (connect) {
|
|
144
|
-
provider.removeListener('connect', connect)
|
|
145
|
-
connect = undefined
|
|
146
|
-
}
|
|
147
|
-
if (!accountsChanged) {
|
|
148
|
-
accountsChanged = this.onAccountsChanged.bind(this)
|
|
149
|
-
// Porto Provider uses Ox, which uses `readonly Address.Address[]` for `accountsChanged`,
|
|
150
|
-
// while Connector `accountsChanged` is `string[]`
|
|
151
|
-
provider.on('accountsChanged', accountsChanged as never)
|
|
152
|
-
}
|
|
153
|
-
if (!chainChanged) {
|
|
154
|
-
chainChanged = this.onChainChanged.bind(this)
|
|
155
|
-
provider.on('chainChanged', chainChanged)
|
|
156
|
-
}
|
|
157
|
-
if (!disconnect) {
|
|
158
|
-
disconnect = this.onDisconnect.bind(this)
|
|
159
|
-
provider.on('disconnect', disconnect)
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
return {
|
|
164
|
-
accounts: accounts.map((account) => {
|
|
165
|
-
if (typeof account === 'object')
|
|
166
|
-
return withCapabilities ? account : account.address
|
|
167
|
-
return withCapabilities
|
|
168
|
-
? { address: account, capabilities: {} }
|
|
169
|
-
: account
|
|
170
|
-
}) as never,
|
|
171
|
-
chainId: currentChainId,
|
|
172
|
-
}
|
|
173
|
-
} catch (err) {
|
|
174
|
-
const error = err as RpcError
|
|
175
|
-
if (error.code === UserRejectedRequestError.code)
|
|
176
|
-
throw new UserRejectedRequestError(error)
|
|
177
|
-
throw error
|
|
178
|
-
}
|
|
179
|
-
},
|
|
180
|
-
async disconnect() {
|
|
181
|
-
const provider = await this.getProvider()
|
|
182
|
-
|
|
183
|
-
if (supportsEvents(provider)) {
|
|
184
|
-
if (chainChanged) {
|
|
185
|
-
provider.removeListener('chainChanged', chainChanged)
|
|
186
|
-
chainChanged = undefined
|
|
187
|
-
}
|
|
188
|
-
if (disconnect) {
|
|
189
|
-
provider.removeListener('disconnect', disconnect)
|
|
190
|
-
disconnect = undefined
|
|
191
|
-
}
|
|
192
|
-
if (!connect) {
|
|
193
|
-
connect = this.onConnect.bind(this)
|
|
194
|
-
provider.on('connect', connect)
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
await provider.request({ method: 'wallet_disconnect' })
|
|
199
|
-
},
|
|
200
|
-
async getAccounts() {
|
|
201
|
-
const provider = await this.getProvider()
|
|
202
|
-
const accounts = await provider.request({
|
|
203
|
-
method: 'eth_accounts',
|
|
204
|
-
})
|
|
205
|
-
return accounts.map((x) => getAddress(x))
|
|
206
|
-
},
|
|
207
|
-
async getChainId() {
|
|
208
|
-
const provider = await this.getProvider()
|
|
209
|
-
const hexChainId = await provider.request({
|
|
210
|
-
method: 'eth_chainId',
|
|
211
|
-
})
|
|
212
|
-
return Number(hexChainId)
|
|
213
|
-
},
|
|
214
|
-
async getPortoInstance() {
|
|
215
|
-
porto_promise ??= (async () => {
|
|
216
|
-
// safe webpack optional peer dependency dynamic import
|
|
217
|
-
try {
|
|
218
|
-
const { Porto } = await import(
|
|
219
|
-
/* turbopackOptional: true */
|
|
220
|
-
'porto'
|
|
221
|
-
)
|
|
222
|
-
// @ts-ignore
|
|
223
|
-
return Porto.create({
|
|
224
|
-
...parameters,
|
|
225
|
-
announceProvider: false,
|
|
226
|
-
// @ts-ignore
|
|
227
|
-
chains,
|
|
228
|
-
// @ts-ignore
|
|
229
|
-
transports,
|
|
230
|
-
})
|
|
231
|
-
} catch (error) {
|
|
232
|
-
// biome-ignore lint/complexity/noUselessCatch: try block marks dependency as optional for webpack
|
|
233
|
-
throw error
|
|
234
|
-
}
|
|
235
|
-
})()
|
|
236
|
-
return await porto_promise
|
|
237
|
-
},
|
|
238
|
-
async getProvider() {
|
|
239
|
-
return (await this.getPortoInstance()).provider
|
|
240
|
-
},
|
|
241
|
-
icon: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDIyIiBoZWlnaHQ9IjQyMiIgdmlld0JveD0iMCAwIDQyMiA0MjIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSI0MjIiIGhlaWdodD0iNDIyIiBmaWxsPSJibGFjayIvPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMV8xNSkiPgo8cGF0aCBkPSJNODEgMjg2LjM2NkM4MSAyODAuODkzIDg1LjQ1MDUgMjc2LjQ1NSA5MC45NDA0IDI3Ni40NTVIMzI5LjUxMUMzMzUuMDAxIDI3Ni40NTUgMzM5LjQ1MiAyODAuODkzIDMzOS40NTIgMjg2LjM2NlYzMDYuMTg4QzMzOS40NTIgMzExLjY2MiAzMzUuMDAxIDMxNi4wOTkgMzI5LjUxMSAzMTYuMDk5SDkwLjk0MDRDODUuNDUwNSAzMTYuMDk5IDgxIDMxMS42NjIgODEgMzA2LjE4OFYyODYuMzY2WiIgZmlsbD0id2hpdGUiIGZpbGwtb3BhY2l0eT0iMC41Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTAuOTQwNCAyMzQuODI4Qzg1LjQ1MDUgMjM0LjgyOCA4MSAyMzkuMjY2IDgxIDI0NC43MzlWMjcxLjUzMUM4My44NDMyIDI2OS42MzMgODcuMjYyMiAyNjguNTI2IDkwLjk0MDQgMjY4LjUyNkgzMjkuNTExQzMzMy4xODggMjY4LjUyNiAzMzYuNjA4IDI2OS42MzMgMzM5LjQ1MiAyNzEuNTMxVjI0NC43MzlDMzM5LjQ1MiAyMzkuMjY2IDMzNS4wMDEgMjM0LjgyOCAzMjkuNTExIDIzNC44MjhIOTAuOTQwNFpNMzM5LjQ1MiAyODYuMzY2QzMzOS40NTIgMjgwLjg5MyAzMzUuMDAxIDI3Ni40NTUgMzI5LjUxMSAyNzYuNDU1SDkwLjk0MDRDODUuNDUwNSAyNzYuNDU1IDgxIDI4MC44OTMgODEgMjg2LjM2NlYzMDYuMTlDODEgMzExLjY2NCA4NS40NTA1IDMxNi4xMDEgOTAuOTQwNCAzMTYuMTAxSDMyOS41MTFDMzM1LjAwMSAzMTYuMTAxIDMzOS40NTIgMzExLjY2NCAzMzkuNDUyIDMwNi4xOVYyODYuMzY2WiIgZmlsbD0id2hpdGUiIGZpbGwtb3BhY2l0eT0iMC41Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTAuOTQwNCAxOTMuMjAxQzg1LjQ1MDUgMTkzLjIwMSA4MSAxOTcuNjM4IDgxIDIwMy4xMTJWMjI5LjkwM0M4My44NDMyIDIyOC4wMDYgODcuMjYyMiAyMjYuODk5IDkwLjk0MDQgMjI2Ljg5OUgzMjkuNTExQzMzMy4xODggMjI2Ljg5OSAzMzYuNjA4IDIyOC4wMDYgMzM5LjQ1MiAyMjkuOTAzVjIwMy4xMTJDMzM5LjQ1MiAxOTcuNjM4IDMzNS4wMDEgMTkzLjIwMSAzMjkuNTExIDE5My4yMDFIOTAuOTQwNFpNMzM5LjQ1MiAyNDQuNzM5QzMzOS40NTIgMjM5LjI2NSAzMzUuMDAxIDIzNC44MjggMzI5LjUxMSAyMzQuODI4SDkwLjk0MDRDODUuNDUwNSAyMzQuODI4IDgxIDIzOS4yNjUgODEgMjQ0LjczOVYyNzEuNTNDODEuMjE3NSAyNzEuMzg1IDgxLjQzODMgMjcxLjI0NSA4MS42NjI0IDI3MS4xMDlDODMuODMyNSAyNjkuNzk0IDg2LjMwNTQgMjY4LjkyNyA4OC45NTIzIDI2OC42MzVDODkuNjA1MSAyNjguNTYzIDkwLjI2ODQgMjY4LjUyNiA5MC45NDA0IDI2OC41MjZIMzI5LjUxMUMzMzAuMTgzIDI2OC41MjYgMzMwLjg0NiAyNjguNTYzIDMzMS40OTggMjY4LjYzNUMzMzQuNDE5IDI2OC45NTcgMzM3LjEyOCAyNjkuOTggMzM5LjQ1MiAyNzEuNTNWMjQ0LjczOVpNMzM5LjQ1MiAyODYuMzY2QzMzOS40NTIgMjgxLjAyMSAzMzUuMjA2IDI3Ni42NjMgMzI5Ljg5MyAyNzYuNDYyQzMyOS43NjcgMjc2LjQ1NyAzMjkuNjQgMjc2LjQ1NSAzMjkuNTExIDI3Ni40NTVIOTAuOTQwNEM4NS40NTA1IDI3Ni40NTUgODEgMjgwLjg5MyA4MSAyODYuMzY2VjMwNi4xODhDODEgMzExLjY2MiA4NS40NTA1IDMxNi4xMDEgOTAuOTQwNCAzMTYuMTAxSDMyOS41MTFDMzM1LjAwMSAzMTYuMTAxIDMzOS40NTIgMzExLjY2MiAzMzkuNDUyIDMwNi4xODhWMjg2LjM2NloiIGZpbGw9IndoaXRlIiBmaWxsLW9wYWNpdHk9IjAuNSIvPgo8cGF0aCBvcGFjaXR5PSIwLjMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTguMDE0NiAxMDRDODguNjE3NyAxMDQgODEgMTExLjU5NSA4MSAxMjAuOTY1VjE4OC4yNzZDODMuODQzMiAxODYuMzc5IDg3LjI2MjIgMTg1LjI3MiA5MC45NDA0IDE4NS4yNzJIMzI5LjUxMUMzMzMuMTg4IDE4NS4yNzIgMzM2LjYwOCAxODYuMzc5IDMzOS40NTIgMTg4LjI3NlYxMjAuOTY1QzMzOS40NTIgMTExLjU5NSAzMzEuODMzIDEwNCAzMjIuNDM3IDEwNEg5OC4wMTQ2Wk0zMzkuNDUyIDIwMy4xMTJDMzM5LjQ1MiAxOTcuNjM4IDMzNS4wMDEgMTkzLjIwMSAzMjkuNTExIDE5My4yMDFIOTAuOTQwNEM4NS40NTA1IDE5My4yMDEgODEgMTk3LjYzOCA4MSAyMDMuMTEyVjIyOS45MDNDODEuMjE3NSAyMjkuNzU4IDgxLjQzODMgMjI5LjYxOCA4MS42NjI0IDIyOS40ODJDODMuODMyNSAyMjguMTY3IDg2LjMwNTQgMjI3LjMgODguOTUyMyAyMjcuMDA4Qzg5LjYwNTEgMjI2LjkzNiA5MC4yNjg0IDIyNi44OTkgOTAuOTQwNCAyMjYuODk5SDMyOS41MTFDMzMwLjE4MyAyMjYuODk5IDMzMC44NDYgMjI2LjkzNiAzMzEuNDk4IDIyNy4wMDhDMzM0LjQxOSAyMjcuMzMgMzM3LjEyOCAyMjguMzUyIDMzOS40NTIgMjI5LjkwM1YyMDMuMTEyWk0zMzkuNDUyIDI0NC43MzlDMzM5LjQ1MiAyMzkuMzkzIDMzNS4yMDYgMjM1LjAzNiAzMjkuODkzIDIzNC44MzVDMzI5Ljc2NyAyMzQuODMgMzI5LjY0IDIzNC44MjggMzI5LjUxMSAyMzQuODI4SDkwLjk0MDRDODUuNDUwNSAyMzQuODI4IDgxIDIzOS4yNjUgODEgMjQ0LjczOVYyNzEuNTNMODEuMDcwNyAyNzEuNDgzQzgxLjI2NTMgMjcxLjM1NSA4MS40NjI1IDI3MS4yMyA4MS42NjI0IDI3MS4xMDlDODEuOTA4MyAyNzAuOTYgODIuMTU4MSAyNzAuODE3IDgyLjQxMTcgMjcwLjY3OUM4NC4zOTUzIDI2OS42MDUgODYuNjA1NCAyNjguODk0IDg4Ljk1MjMgMjY4LjYzNUM4OS4wMDUyIDI2OC42MjkgODkuMDU4IDI2OC42MjQgODkuMTExIDI2OC42MThDODkuNzEyNSAyNjguNTU3IDkwLjMyMjggMjY4LjUyNiA5MC45NDA0IDI2OC41MjZIMzI5LjUxMUMzMjkuNzM4IDI2OC41MjYgMzI5Ljk2NSAyNjguNTMgMzMwLjE5MiAyNjguNTM5QzMzMC42MzEgMjY4LjU1NSAzMzEuMDY3IDI2OC41ODcgMzMxLjQ5OCAyNjguNjM1QzMzNC40MTkgMjY4Ljk1NyAzMzcuMTI4IDI2OS45OCAzMzkuNDUyIDI3MS41M1YyNDQuNzM5Wk0zMzkuNDUyIDI4Ni4zNjZDMzM5LjQ1MiAyODEuMDIxIDMzNS4yMDYgMjc2LjY2MyAzMjkuODkzIDI3Ni40NjJMMzI5Ljg2NSAyNzYuNDYxQzMyOS43NDggMjc2LjQ1NyAzMjkuNjI5IDI3Ni40NTUgMzI5LjUxMSAyNzYuNDU1SDkwLjk0MDRDODUuNDUwNSAyNzYuNDU1IDgxIDI4MC44OTMgODEgMjg2LjM2NlYzMDYuMTg4QzgxIDMxMS42NjIgODUuNDUwNSAzMTYuMTAxIDkwLjk0MDQgMzE2LjEwMUgzMjkuNTExQzMzNS4wMDEgMzE2LjEwMSAzMzkuNDUyIDMxMS42NjIgMzM5LjQ1MiAzMDYuMTg4VjI4Ni4zNjZaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMjY5Ljg2OCAxMzEuNzUyQzI2OS44NjggMTI2LjI3OCAyNzQuMzE4IDEyMS44NCAyNzkuODA4IDEyMS44NEgzMTEuNjE4QzMxNy4xMDggMTIxLjg0IDMyMS41NTggMTI2LjI3OCAzMjEuNTU4IDEzMS43NTJWMTYxLjQ4NUMzMjEuNTU4IDE2Ni45NTkgMzE3LjEwOCAxNzEuMzk2IDMxMS42MTggMTcxLjM5NkgyNzkuODA4QzI3NC4zMTggMTcxLjM5NiAyNjkuODY4IDE2Ni45NTkgMjY5Ljg2OCAxNjEuNDg1VjEzMS43NTJaIiBmaWxsPSJ3aGl0ZSIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzFfMTUiPgo8cmVjdCB3aWR0aD0iMjU5IiBoZWlnaHQ9IjIxMyIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDgxIDEwNCkiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K',
|
|
242
|
-
id: 'xyz.ithaca.porto',
|
|
243
|
-
async isAuthorized() {
|
|
244
|
-
try {
|
|
245
|
-
// Use retry strategy as some injected wallets (e.g. MetaMask) fail to
|
|
246
|
-
// immediately resolve JSON-RPC requests on page load.
|
|
247
|
-
const accounts = await withRetry(() => this.getAccounts())
|
|
248
|
-
return !!accounts.length
|
|
249
|
-
} catch {
|
|
250
|
-
return false
|
|
251
|
-
}
|
|
252
|
-
},
|
|
253
|
-
name: 'Porto',
|
|
254
|
-
async onAccountsChanged(accounts) {
|
|
255
|
-
wagmiConfig.emitter.emit('change', {
|
|
256
|
-
accounts: accounts.map((x) => getAddress(x)),
|
|
257
|
-
})
|
|
258
|
-
},
|
|
259
|
-
onChainChanged(chain) {
|
|
260
|
-
const chainId = Number(chain)
|
|
261
|
-
wagmiConfig.emitter.emit('change', { chainId })
|
|
262
|
-
},
|
|
263
|
-
async onConnect(connectInfo) {
|
|
264
|
-
const accounts = await this.getAccounts()
|
|
265
|
-
if (accounts.length === 0) return
|
|
266
|
-
|
|
267
|
-
const chainId = Number(connectInfo.chainId)
|
|
268
|
-
wagmiConfig.emitter.emit('connect', { accounts, chainId })
|
|
269
|
-
|
|
270
|
-
// Manage EIP-1193 event listeners
|
|
271
|
-
const provider = await this.getProvider()
|
|
272
|
-
if (supportsEvents(provider)) {
|
|
273
|
-
if (connect) {
|
|
274
|
-
provider.removeListener('connect', connect)
|
|
275
|
-
connect = undefined
|
|
276
|
-
}
|
|
277
|
-
if (!accountsChanged) {
|
|
278
|
-
accountsChanged = this.onAccountsChanged.bind(this)
|
|
279
|
-
// Porto Provider uses Ox, which uses `readonly Address.Address[]` for `accountsChanged`,
|
|
280
|
-
// while Connector `accountsChanged` is `string[]`
|
|
281
|
-
provider.on('accountsChanged', accountsChanged as never)
|
|
282
|
-
}
|
|
283
|
-
if (!chainChanged) {
|
|
284
|
-
chainChanged = this.onChainChanged.bind(this)
|
|
285
|
-
provider.on('chainChanged', chainChanged)
|
|
286
|
-
}
|
|
287
|
-
if (!disconnect) {
|
|
288
|
-
disconnect = this.onDisconnect.bind(this)
|
|
289
|
-
provider.on('disconnect', disconnect)
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
},
|
|
293
|
-
async onDisconnect(_error) {
|
|
294
|
-
const provider = await this.getProvider()
|
|
295
|
-
|
|
296
|
-
wagmiConfig.emitter.emit('disconnect')
|
|
297
|
-
|
|
298
|
-
// Manage EIP-1193 event listeners
|
|
299
|
-
if (supportsEvents(provider)) {
|
|
300
|
-
if (chainChanged) {
|
|
301
|
-
provider.removeListener('chainChanged', chainChanged)
|
|
302
|
-
chainChanged = undefined
|
|
303
|
-
}
|
|
304
|
-
if (disconnect) {
|
|
305
|
-
provider.removeListener('disconnect', disconnect)
|
|
306
|
-
disconnect = undefined
|
|
307
|
-
}
|
|
308
|
-
if (!connect) {
|
|
309
|
-
connect = this.onConnect.bind(this)
|
|
310
|
-
provider.on('connect', connect)
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
},
|
|
314
|
-
async setup() {
|
|
315
|
-
if (!connect) {
|
|
316
|
-
const provider = await this.getProvider()
|
|
317
|
-
if (!supportsEvents(provider)) return
|
|
318
|
-
connect = this.onConnect.bind(this)
|
|
319
|
-
provider.on('connect', connect)
|
|
320
|
-
}
|
|
321
|
-
},
|
|
322
|
-
async switchChain({ chainId }) {
|
|
323
|
-
const chain = chains.find((x) => x.id === chainId)
|
|
324
|
-
if (!chain) throw new SwitchChainError(new ChainNotConfiguredError())
|
|
325
|
-
|
|
326
|
-
const provider = await this.getProvider()
|
|
327
|
-
await provider.request({
|
|
328
|
-
method: 'wallet_switchEthereumChain',
|
|
329
|
-
params: [{ chainId: numberToHex(chainId) }],
|
|
330
|
-
})
|
|
331
|
-
|
|
332
|
-
return chain
|
|
333
|
-
},
|
|
334
|
-
type: 'injected',
|
|
335
|
-
}
|
|
336
|
-
})
|
|
337
|
-
}
|