@wagmi/connectors 5.11.0 → 5.11.1
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 +1 -1
- package/dist/esm/exports/index.js.map +1 -1
- package/dist/esm/porto.js +238 -0
- package/dist/esm/porto.js.map +1 -0
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/types/exports/index.d.ts +1 -1
- package/dist/types/exports/index.d.ts.map +1 -1
- package/dist/types/porto.d.ts +22 -0
- package/dist/types/porto.d.ts.map +1 -0
- package/dist/types/version.d.ts +1 -1
- package/package.json +2 -2
- package/src/exports/index.ts +1 -1
- package/src/porto.ts +295 -0
- package/src/version.ts +1 -1
package/dist/esm/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '5.11.
|
|
1
|
+
export const version = '5.11.1';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export { type InjectedParameters, injected, type MockParameters, mock, } from '@wagmi/core';
|
|
2
|
-
export { type PortoParameters, porto } from 'porto/wagmi';
|
|
3
2
|
export { type BaseAccountParameters, baseAccount } from '../baseAccount.js';
|
|
4
3
|
export { type CoinbaseWalletParameters, coinbaseWallet, } from '../coinbaseWallet.js';
|
|
5
4
|
export { type GeminiParameters, gemini } from '../gemini.js';
|
|
6
5
|
export { type MetaMaskParameters, metaMask } from '../metaMask.js';
|
|
6
|
+
export { type PortoParameters, porto } from '../porto.js';
|
|
7
7
|
export { type SafeParameters, safe } from '../safe.js';
|
|
8
8
|
export { version } from '../version.js';
|
|
9
9
|
export { type WalletConnectParameters, walletConnect, } from '../walletConnect.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/exports/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,kBAAkB,EACvB,QAAQ,EACR,KAAK,cAAc,EACnB,IAAI,GACL,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/exports/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,kBAAkB,EACvB,QAAQ,EACR,KAAK,cAAc,EACnB,IAAI,GACL,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,KAAK,qBAAqB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EACL,KAAK,wBAAwB,EAC7B,cAAc,GACf,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,KAAK,kBAAkB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,KAAK,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EACL,KAAK,uBAAuB,EAC5B,aAAa,GACd,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ExactPartial } from '@wagmi/core/internal';
|
|
2
|
+
import { type Porto, RpcSchema } from 'porto';
|
|
3
|
+
import { type Address, type ProviderConnectInfo } from 'viem';
|
|
4
|
+
export type PortoParameters = ExactPartial<Porto.Config>;
|
|
5
|
+
export declare function porto(parameters?: PortoParameters): import("@wagmi/core").CreateConnectorFn<import("porto").Provider, {
|
|
6
|
+
connect<withCapabilities extends boolean = false>(parameters?: {
|
|
7
|
+
chainId?: number | undefined;
|
|
8
|
+
capabilities?: (RpcSchema.wallet_connect.Capabilities & {
|
|
9
|
+
force?: boolean | undefined;
|
|
10
|
+
}) | undefined;
|
|
11
|
+
isReconnecting?: boolean | undefined;
|
|
12
|
+
withCapabilities?: withCapabilities | boolean | undefined;
|
|
13
|
+
}): Promise<{
|
|
14
|
+
accounts: withCapabilities extends true ? readonly {
|
|
15
|
+
address: Address;
|
|
16
|
+
capabilities: RpcSchema.wallet_connect.ResponseCapabilities;
|
|
17
|
+
}[] : readonly Address[];
|
|
18
|
+
chainId: number;
|
|
19
|
+
}>;
|
|
20
|
+
onConnect(connectInfo: ProviderConnectInfo): void;
|
|
21
|
+
}, Record<string, unknown>>;
|
|
22
|
+
//# sourceMappingURL=porto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"porto.d.ts","sourceRoot":"","sources":["../../src/porto.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,KAAK,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE7C,OAAO,EACL,KAAK,OAAO,EAGZ,KAAK,mBAAmB,EAKzB,MAAM,MAAM,CAAA;AAEb,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AAExD,wBAAgB,KAAK,CAAC,UAAU,GAAE,eAAoB;YAG1C,gBAAgB,SAAS,OAAO,uBAAuB;QAC7D,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B,YAAY,CAAC,EACT,CAAC,SAAS,CAAC,cAAc,CAAC,YAAY,GAAG;YACvC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;SAC5B,CAAC,GACF,SAAS,CAAA;QACb,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QACpC,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,OAAO,GAAG,SAAS,CAAA;KAC1D,GAAG,OAAO,CAAC;QACV,QAAQ,EAAE,gBAAgB,SAAS,IAAI,GACnC,SAAS;YACP,OAAO,EAAE,OAAO,CAAA;YAChB,YAAY,EAAE,SAAS,CAAC,cAAc,CAAC,oBAAoB,CAAA;SAC5D,EAAE,GACH,SAAS,OAAO,EAAE,CAAA;QACtB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAC;2BACqB,mBAAmB,GAAG,IAAI;4BA4PpD"}
|
package/dist/types/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "5.11.
|
|
1
|
+
export declare const version = "5.11.1";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wagmi/connectors",
|
|
3
3
|
"description": "Collection of connectors for Wagmi",
|
|
4
|
-
"version": "5.11.
|
|
4
|
+
"version": "5.11.1",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@safe-global/safe-apps-sdk": "9.1.0",
|
|
47
47
|
"@walletconnect/ethereum-provider": "2.21.1",
|
|
48
48
|
"cbw-sdk": "npm:@coinbase/wallet-sdk@3.9.3",
|
|
49
|
-
"porto": "0.2.
|
|
49
|
+
"porto": "0.2.19"
|
|
50
50
|
},
|
|
51
51
|
"contributors": [
|
|
52
52
|
"awkweb.eth <t@wevm.dev>",
|
package/src/exports/index.ts
CHANGED
|
@@ -5,7 +5,6 @@ export {
|
|
|
5
5
|
type MockParameters,
|
|
6
6
|
mock,
|
|
7
7
|
} from '@wagmi/core'
|
|
8
|
-
export { type PortoParameters, porto } from 'porto/wagmi'
|
|
9
8
|
export { type BaseAccountParameters, baseAccount } from '../baseAccount.js'
|
|
10
9
|
export {
|
|
11
10
|
type CoinbaseWalletParameters,
|
|
@@ -13,6 +12,7 @@ export {
|
|
|
13
12
|
} from '../coinbaseWallet.js'
|
|
14
13
|
export { type GeminiParameters, gemini } from '../gemini.js'
|
|
15
14
|
export { type MetaMaskParameters, metaMask } from '../metaMask.js'
|
|
15
|
+
export { type PortoParameters, porto } from '../porto.js'
|
|
16
16
|
export { type SafeParameters, safe } from '../safe.js'
|
|
17
17
|
export { version } from '../version.js'
|
|
18
18
|
export {
|
package/src/porto.ts
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
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 { z } from 'porto/internal'
|
|
9
|
+
import {
|
|
10
|
+
type Address,
|
|
11
|
+
getAddress,
|
|
12
|
+
numberToHex,
|
|
13
|
+
type ProviderConnectInfo,
|
|
14
|
+
type RpcError,
|
|
15
|
+
SwitchChainError,
|
|
16
|
+
UserRejectedRequestError,
|
|
17
|
+
withRetry,
|
|
18
|
+
} from 'viem'
|
|
19
|
+
|
|
20
|
+
export type PortoParameters = ExactPartial<Porto.Config>
|
|
21
|
+
|
|
22
|
+
export function porto(parameters: PortoParameters = {}) {
|
|
23
|
+
type Provider = ReturnType<typeof Porto.create>['provider']
|
|
24
|
+
type Properties = {
|
|
25
|
+
connect<withCapabilities extends boolean = false>(parameters?: {
|
|
26
|
+
chainId?: number | undefined
|
|
27
|
+
capabilities?:
|
|
28
|
+
| (RpcSchema.wallet_connect.Capabilities & {
|
|
29
|
+
force?: boolean | undefined
|
|
30
|
+
})
|
|
31
|
+
| undefined
|
|
32
|
+
isReconnecting?: boolean | undefined
|
|
33
|
+
withCapabilities?: withCapabilities | boolean | undefined
|
|
34
|
+
}): Promise<{
|
|
35
|
+
accounts: withCapabilities extends true
|
|
36
|
+
? readonly {
|
|
37
|
+
address: Address
|
|
38
|
+
capabilities: RpcSchema.wallet_connect.ResponseCapabilities
|
|
39
|
+
}[]
|
|
40
|
+
: readonly Address[]
|
|
41
|
+
chainId: number
|
|
42
|
+
}>
|
|
43
|
+
onConnect(connectInfo: ProviderConnectInfo): void
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return createConnector<Provider, Properties>((wagmiConfig) => {
|
|
47
|
+
const chains = wagmiConfig.chains ?? parameters.chains ?? []
|
|
48
|
+
|
|
49
|
+
const transports = (() => {
|
|
50
|
+
if (wagmiConfig.transports) return wagmiConfig.transports
|
|
51
|
+
return parameters.transports
|
|
52
|
+
})()
|
|
53
|
+
|
|
54
|
+
let porto_promise: Promise<any> | undefined
|
|
55
|
+
|
|
56
|
+
let accountsChanged: Connector['onAccountsChanged'] | undefined
|
|
57
|
+
let chainChanged: Connector['onChainChanged'] | undefined
|
|
58
|
+
let connect: Connector['onConnect'] | undefined
|
|
59
|
+
let disconnect: Connector['onDisconnect'] | undefined
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
async connect({ chainId = chains[0].id, ...rest } = {}) {
|
|
63
|
+
const isReconnecting =
|
|
64
|
+
('isReconnecting' in rest && rest.isReconnecting) || false
|
|
65
|
+
const withCapabilities =
|
|
66
|
+
('withCapabilities' in rest && rest.withCapabilities) || false
|
|
67
|
+
|
|
68
|
+
let accounts: readonly (Address | { address: Address })[] = []
|
|
69
|
+
let currentChainId: number | undefined
|
|
70
|
+
|
|
71
|
+
if (isReconnecting) {
|
|
72
|
+
;[accounts, currentChainId] = await Promise.all([
|
|
73
|
+
this.getAccounts().catch(() => []),
|
|
74
|
+
this.getChainId().catch(() => undefined),
|
|
75
|
+
])
|
|
76
|
+
if (chainId && currentChainId !== chainId) {
|
|
77
|
+
const chain = await this.switchChain!({ chainId }).catch(
|
|
78
|
+
(error) => {
|
|
79
|
+
if (error.code === UserRejectedRequestError.code) throw error
|
|
80
|
+
return { id: currentChainId }
|
|
81
|
+
},
|
|
82
|
+
)
|
|
83
|
+
currentChainId = chain?.id ?? currentChainId
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const provider = (await this.getProvider()) as Provider
|
|
88
|
+
|
|
89
|
+
try {
|
|
90
|
+
if (!accounts?.length && !isReconnecting) {
|
|
91
|
+
const res = await provider.request({
|
|
92
|
+
method: 'wallet_connect',
|
|
93
|
+
params: [
|
|
94
|
+
{
|
|
95
|
+
...('capabilities' in rest
|
|
96
|
+
? {
|
|
97
|
+
capabilities: z.encode(
|
|
98
|
+
RpcSchema.wallet_connect.Capabilities,
|
|
99
|
+
rest.capabilities ?? {},
|
|
100
|
+
),
|
|
101
|
+
}
|
|
102
|
+
: {}),
|
|
103
|
+
chainIds: [
|
|
104
|
+
numberToHex(chainId),
|
|
105
|
+
...chains
|
|
106
|
+
.filter((x) => x.id !== chainId)
|
|
107
|
+
.map((x) => numberToHex(x.id)),
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
})
|
|
112
|
+
accounts = res.accounts
|
|
113
|
+
currentChainId = Number(res.chainIds[0])
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (!currentChainId) throw new ChainNotConfiguredError()
|
|
117
|
+
|
|
118
|
+
// Manage EIP-1193 event listeners
|
|
119
|
+
// https://eips.ethereum.org/EIPS/eip-1193#events
|
|
120
|
+
if (connect) {
|
|
121
|
+
provider.removeListener('connect', connect)
|
|
122
|
+
connect = undefined
|
|
123
|
+
}
|
|
124
|
+
if (!accountsChanged) {
|
|
125
|
+
accountsChanged = this.onAccountsChanged.bind(this)
|
|
126
|
+
// Porto Provider uses Ox, which uses `readonly Address.Address[]` for `accountsChanged`,
|
|
127
|
+
// while Connector `accountsChanged` is `string[]`
|
|
128
|
+
provider.on('accountsChanged', accountsChanged as never)
|
|
129
|
+
}
|
|
130
|
+
if (!chainChanged) {
|
|
131
|
+
chainChanged = this.onChainChanged.bind(this)
|
|
132
|
+
provider.on('chainChanged', chainChanged)
|
|
133
|
+
}
|
|
134
|
+
if (!disconnect) {
|
|
135
|
+
disconnect = this.onDisconnect.bind(this)
|
|
136
|
+
provider.on('disconnect', disconnect)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return {
|
|
140
|
+
accounts: accounts.map((account) => {
|
|
141
|
+
if (typeof account === 'object')
|
|
142
|
+
return withCapabilities ? account : account.address
|
|
143
|
+
return withCapabilities
|
|
144
|
+
? { address: account, capabilities: {} }
|
|
145
|
+
: account
|
|
146
|
+
}) as never,
|
|
147
|
+
chainId: currentChainId,
|
|
148
|
+
}
|
|
149
|
+
} catch (err) {
|
|
150
|
+
const error = err as RpcError
|
|
151
|
+
if (error.code === UserRejectedRequestError.code)
|
|
152
|
+
throw new UserRejectedRequestError(error)
|
|
153
|
+
throw error
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
async disconnect() {
|
|
157
|
+
const provider = await this.getProvider()
|
|
158
|
+
|
|
159
|
+
if (chainChanged) {
|
|
160
|
+
provider.removeListener('chainChanged', chainChanged)
|
|
161
|
+
chainChanged = undefined
|
|
162
|
+
}
|
|
163
|
+
if (disconnect) {
|
|
164
|
+
provider.removeListener('disconnect', disconnect)
|
|
165
|
+
disconnect = undefined
|
|
166
|
+
}
|
|
167
|
+
if (!connect) {
|
|
168
|
+
connect = this.onConnect.bind(this)
|
|
169
|
+
provider.on('connect', connect)
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
await provider.request({ method: 'wallet_disconnect' })
|
|
173
|
+
},
|
|
174
|
+
async getAccounts() {
|
|
175
|
+
const provider = await this.getProvider()
|
|
176
|
+
const accounts = await provider.request({
|
|
177
|
+
method: 'eth_accounts',
|
|
178
|
+
})
|
|
179
|
+
return accounts.map((x) => getAddress(x))
|
|
180
|
+
},
|
|
181
|
+
async getChainId() {
|
|
182
|
+
const provider = await this.getProvider()
|
|
183
|
+
const hexChainId = await provider.request({
|
|
184
|
+
method: 'eth_chainId',
|
|
185
|
+
})
|
|
186
|
+
return Number(hexChainId)
|
|
187
|
+
},
|
|
188
|
+
async getProvider() {
|
|
189
|
+
porto_promise ??= (async () => {
|
|
190
|
+
const { Porto } = await import('porto')
|
|
191
|
+
return Porto.create({
|
|
192
|
+
...parameters,
|
|
193
|
+
announceProvider: false,
|
|
194
|
+
chains: chains as never,
|
|
195
|
+
transports: transports as never,
|
|
196
|
+
})
|
|
197
|
+
})()
|
|
198
|
+
return (await porto_promise).provider
|
|
199
|
+
},
|
|
200
|
+
icon: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDIyIiBoZWlnaHQ9IjQyMiIgdmlld0JveD0iMCAwIDQyMiA0MjIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSI0MjIiIGhlaWdodD0iNDIyIiBmaWxsPSJibGFjayIvPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMV8xNSkiPgo8cGF0aCBkPSJNODEgMjg2LjM2NkM4MSAyODAuODkzIDg1LjQ1MDUgMjc2LjQ1NSA5MC45NDA0IDI3Ni40NTVIMzI5LjUxMUMzMzUuMDAxIDI3Ni40NTUgMzM5LjQ1MiAyODAuODkzIDMzOS40NTIgMjg2LjM2NlYzMDYuMTg4QzMzOS40NTIgMzExLjY2MiAzMzUuMDAxIDMxNi4wOTkgMzI5LjUxMSAzMTYuMDk5SDkwLjk0MDRDODUuNDUwNSAzMTYuMDk5IDgxIDMxMS42NjIgODEgMzA2LjE4OFYyODYuMzY2WiIgZmlsbD0id2hpdGUiIGZpbGwtb3BhY2l0eT0iMC41Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTAuOTQwNCAyMzQuODI4Qzg1LjQ1MDUgMjM0LjgyOCA4MSAyMzkuMjY2IDgxIDI0NC43MzlWMjcxLjUzMUM4My44NDMyIDI2OS42MzMgODcuMjYyMiAyNjguNTI2IDkwLjk0MDQgMjY4LjUyNkgzMjkuNTExQzMzMy4xODggMjY4LjUyNiAzMzYuNjA4IDI2OS42MzMgMzM5LjQ1MiAyNzEuNTMxVjI0NC43MzlDMzM5LjQ1MiAyMzkuMjY2IDMzNS4wMDEgMjM0LjgyOCAzMjkuNTExIDIzNC44MjhIOTAuOTQwNFpNMzM5LjQ1MiAyODYuMzY2QzMzOS40NTIgMjgwLjg5MyAzMzUuMDAxIDI3Ni40NTUgMzI5LjUxMSAyNzYuNDU1SDkwLjk0MDRDODUuNDUwNSAyNzYuNDU1IDgxIDI4MC44OTMgODEgMjg2LjM2NlYzMDYuMTlDODEgMzExLjY2NCA4NS40NTA1IDMxNi4xMDEgOTAuOTQwNCAzMTYuMTAxSDMyOS41MTFDMzM1LjAwMSAzMTYuMTAxIDMzOS40NTIgMzExLjY2NCAzMzkuNDUyIDMwNi4xOVYyODYuMzY2WiIgZmlsbD0id2hpdGUiIGZpbGwtb3BhY2l0eT0iMC41Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTAuOTQwNCAxOTMuMjAxQzg1LjQ1MDUgMTkzLjIwMSA4MSAxOTcuNjM4IDgxIDIwMy4xMTJWMjI5LjkwM0M4My44NDMyIDIyOC4wMDYgODcuMjYyMiAyMjYuODk5IDkwLjk0MDQgMjI2Ljg5OUgzMjkuNTExQzMzMy4xODggMjI2Ljg5OSAzMzYuNjA4IDIyOC4wMDYgMzM5LjQ1MiAyMjkuOTAzVjIwMy4xMTJDMzM5LjQ1MiAxOTcuNjM4IDMzNS4wMDEgMTkzLjIwMSAzMjkuNTExIDE5My4yMDFIOTAuOTQwNFpNMzM5LjQ1MiAyNDQuNzM5QzMzOS40NTIgMjM5LjI2NSAzMzUuMDAxIDIzNC44MjggMzI5LjUxMSAyMzQuODI4SDkwLjk0MDRDODUuNDUwNSAyMzQuODI4IDgxIDIzOS4yNjUgODEgMjQ0LjczOVYyNzEuNTNDODEuMjE3NSAyNzEuMzg1IDgxLjQzODMgMjcxLjI0NSA4MS42NjI0IDI3MS4xMDlDODMuODMyNSAyNjkuNzk0IDg2LjMwNTQgMjY4LjkyNyA4OC45NTIzIDI2OC42MzVDODkuNjA1MSAyNjguNTYzIDkwLjI2ODQgMjY4LjUyNiA5MC45NDA0IDI2OC41MjZIMzI5LjUxMUMzMzAuMTgzIDI2OC41MjYgMzMwLjg0NiAyNjguNTYzIDMzMS40OTggMjY4LjYzNUMzMzQuNDE5IDI2OC45NTcgMzM3LjEyOCAyNjkuOTggMzM5LjQ1MiAyNzEuNTNWMjQ0LjczOVpNMzM5LjQ1MiAyODYuMzY2QzMzOS40NTIgMjgxLjAyMSAzMzUuMjA2IDI3Ni42NjMgMzI5Ljg5MyAyNzYuNDYyQzMyOS43NjcgMjc2LjQ1NyAzMjkuNjQgMjc2LjQ1NSAzMjkuNTExIDI3Ni40NTVIOTAuOTQwNEM4NS40NTA1IDI3Ni40NTUgODEgMjgwLjg5MyA4MSAyODYuMzY2VjMwNi4xODhDODEgMzExLjY2MiA4NS40NTA1IDMxNi4xMDEgOTAuOTQwNCAzMTYuMTAxSDMyOS41MTFDMzM1LjAwMSAzMTYuMTAxIDMzOS40NTIgMzExLjY2MiAzMzkuNDUyIDMwNi4xODhWMjg2LjM2NloiIGZpbGw9IndoaXRlIiBmaWxsLW9wYWNpdHk9IjAuNSIvPgo8cGF0aCBvcGFjaXR5PSIwLjMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTguMDE0NiAxMDRDODguNjE3NyAxMDQgODEgMTExLjU5NSA4MSAxMjAuOTY1VjE4OC4yNzZDODMuODQzMiAxODYuMzc5IDg3LjI2MjIgMTg1LjI3MiA5MC45NDA0IDE4NS4yNzJIMzI5LjUxMUMzMzMuMTg4IDE4NS4yNzIgMzM2LjYwOCAxODYuMzc5IDMzOS40NTIgMTg4LjI3NlYxMjAuOTY1QzMzOS40NTIgMTExLjU5NSAzMzEuODMzIDEwNCAzMjIuNDM3IDEwNEg5OC4wMTQ2Wk0zMzkuNDUyIDIwMy4xMTJDMzM5LjQ1MiAxOTcuNjM4IDMzNS4wMDEgMTkzLjIwMSAzMjkuNTExIDE5My4yMDFIOTAuOTQwNEM4NS40NTA1IDE5My4yMDEgODEgMTk3LjYzOCA4MSAyMDMuMTEyVjIyOS45MDNDODEuMjE3NSAyMjkuNzU4IDgxLjQzODMgMjI5LjYxOCA4MS42NjI0IDIyOS40ODJDODMuODMyNSAyMjguMTY3IDg2LjMwNTQgMjI3LjMgODguOTUyMyAyMjcuMDA4Qzg5LjYwNTEgMjI2LjkzNiA5MC4yNjg0IDIyNi44OTkgOTAuOTQwNCAyMjYuODk5SDMyOS41MTFDMzMwLjE4MyAyMjYuODk5IDMzMC44NDYgMjI2LjkzNiAzMzEuNDk4IDIyNy4wMDhDMzM0LjQxOSAyMjcuMzMgMzM3LjEyOCAyMjguMzUyIDMzOS40NTIgMjI5LjkwM1YyMDMuMTEyWk0zMzkuNDUyIDI0NC43MzlDMzM5LjQ1MiAyMzkuMzkzIDMzNS4yMDYgMjM1LjAzNiAzMjkuODkzIDIzNC44MzVDMzI5Ljc2NyAyMzQuODMgMzI5LjY0IDIzNC44MjggMzI5LjUxMSAyMzQuODI4SDkwLjk0MDRDODUuNDUwNSAyMzQuODI4IDgxIDIzOS4yNjUgODEgMjQ0LjczOVYyNzEuNTNMODEuMDcwNyAyNzEuNDgzQzgxLjI2NTMgMjcxLjM1NSA4MS40NjI1IDI3MS4yMyA4MS42NjI0IDI3MS4xMDlDODEuOTA4MyAyNzAuOTYgODIuMTU4MSAyNzAuODE3IDgyLjQxMTcgMjcwLjY3OUM4NC4zOTUzIDI2OS42MDUgODYuNjA1NCAyNjguODk0IDg4Ljk1MjMgMjY4LjYzNUM4OS4wMDUyIDI2OC42MjkgODkuMDU4IDI2OC42MjQgODkuMTExIDI2OC42MThDODkuNzEyNSAyNjguNTU3IDkwLjMyMjggMjY4LjUyNiA5MC45NDA0IDI2OC41MjZIMzI5LjUxMUMzMjkuNzM4IDI2OC41MjYgMzI5Ljk2NSAyNjguNTMgMzMwLjE5MiAyNjguNTM5QzMzMC42MzEgMjY4LjU1NSAzMzEuMDY3IDI2OC41ODcgMzMxLjQ5OCAyNjguNjM1QzMzNC40MTkgMjY4Ljk1NyAzMzcuMTI4IDI2OS45OCAzMzkuNDUyIDI3MS41M1YyNDQuNzM5Wk0zMzkuNDUyIDI4Ni4zNjZDMzM5LjQ1MiAyODEuMDIxIDMzNS4yMDYgMjc2LjY2MyAzMjkuODkzIDI3Ni40NjJMMzI5Ljg2NSAyNzYuNDYxQzMyOS43NDggMjc2LjQ1NyAzMjkuNjI5IDI3Ni40NTUgMzI5LjUxMSAyNzYuNDU1SDkwLjk0MDRDODUuNDUwNSAyNzYuNDU1IDgxIDI4MC44OTMgODEgMjg2LjM2NlYzMDYuMTg4QzgxIDMxMS42NjIgODUuNDUwNSAzMTYuMTAxIDkwLjk0MDQgMzE2LjEwMUgzMjkuNTExQzMzNS4wMDEgMzE2LjEwMSAzMzkuNDUyIDMxMS42NjIgMzM5LjQ1MiAzMDYuMTg4VjI4Ni4zNjZaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMjY5Ljg2OCAxMzEuNzUyQzI2OS44NjggMTI2LjI3OCAyNzQuMzE4IDEyMS44NCAyNzkuODA4IDEyMS44NEgzMTEuNjE4QzMxNy4xMDggMTIxLjg0IDMyMS41NTggMTI2LjI3OCAzMjEuNTU4IDEzMS43NTJWMTYxLjQ4NUMzMjEuNTU4IDE2Ni45NTkgMzE3LjEwOCAxNzEuMzk2IDMxMS42MTggMTcxLjM5NkgyNzkuODA4QzI3NC4zMTggMTcxLjM5NiAyNjkuODY4IDE2Ni45NTkgMjY5Ljg2OCAxNjEuNDg1VjEzMS43NTJaIiBmaWxsPSJ3aGl0ZSIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzFfMTUiPgo8cmVjdCB3aWR0aD0iMjU5IiBoZWlnaHQ9IjIxMyIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDgxIDEwNCkiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K',
|
|
201
|
+
id: 'xyz.ithaca.porto',
|
|
202
|
+
async isAuthorized() {
|
|
203
|
+
try {
|
|
204
|
+
// Use retry strategy as some injected wallets (e.g. MetaMask) fail to
|
|
205
|
+
// immediately resolve JSON-RPC requests on page load.
|
|
206
|
+
const accounts = await withRetry(() => this.getAccounts())
|
|
207
|
+
return !!accounts.length
|
|
208
|
+
} catch {
|
|
209
|
+
return false
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
name: 'Porto',
|
|
213
|
+
async onAccountsChanged(accounts) {
|
|
214
|
+
wagmiConfig.emitter.emit('change', {
|
|
215
|
+
accounts: accounts.map((x) => getAddress(x)),
|
|
216
|
+
})
|
|
217
|
+
},
|
|
218
|
+
onChainChanged(chain) {
|
|
219
|
+
const chainId = Number(chain)
|
|
220
|
+
wagmiConfig.emitter.emit('change', { chainId })
|
|
221
|
+
},
|
|
222
|
+
async onConnect(connectInfo) {
|
|
223
|
+
const accounts = await this.getAccounts()
|
|
224
|
+
if (accounts.length === 0) return
|
|
225
|
+
|
|
226
|
+
const chainId = Number(connectInfo.chainId)
|
|
227
|
+
wagmiConfig.emitter.emit('connect', { accounts, chainId })
|
|
228
|
+
|
|
229
|
+
// Manage EIP-1193 event listeners
|
|
230
|
+
const provider = await this.getProvider()
|
|
231
|
+
if (provider) {
|
|
232
|
+
if (connect) {
|
|
233
|
+
provider.removeListener('connect', connect)
|
|
234
|
+
connect = undefined
|
|
235
|
+
}
|
|
236
|
+
if (!accountsChanged) {
|
|
237
|
+
accountsChanged = this.onAccountsChanged.bind(this)
|
|
238
|
+
// Porto Provider uses Ox, which uses `readonly Address.Address[]` for `accountsChanged`,
|
|
239
|
+
// while Connector `accountsChanged` is `string[]`
|
|
240
|
+
provider.on('accountsChanged', accountsChanged as never)
|
|
241
|
+
}
|
|
242
|
+
if (!chainChanged) {
|
|
243
|
+
chainChanged = this.onChainChanged.bind(this)
|
|
244
|
+
provider.on('chainChanged', chainChanged)
|
|
245
|
+
}
|
|
246
|
+
if (!disconnect) {
|
|
247
|
+
disconnect = this.onDisconnect.bind(this)
|
|
248
|
+
provider.on('disconnect', disconnect)
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
async onDisconnect(_error) {
|
|
253
|
+
const provider = await this.getProvider()
|
|
254
|
+
|
|
255
|
+
wagmiConfig.emitter.emit('disconnect')
|
|
256
|
+
|
|
257
|
+
// Manage EIP-1193 event listeners
|
|
258
|
+
if (provider) {
|
|
259
|
+
if (chainChanged) {
|
|
260
|
+
provider.removeListener('chainChanged', chainChanged)
|
|
261
|
+
chainChanged = undefined
|
|
262
|
+
}
|
|
263
|
+
if (disconnect) {
|
|
264
|
+
provider.removeListener('disconnect', disconnect)
|
|
265
|
+
disconnect = undefined
|
|
266
|
+
}
|
|
267
|
+
if (!connect) {
|
|
268
|
+
connect = this.onConnect.bind(this)
|
|
269
|
+
provider.on('connect', connect)
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
},
|
|
273
|
+
async setup() {
|
|
274
|
+
if (!connect) {
|
|
275
|
+
const provider = await this.getProvider()
|
|
276
|
+
connect = this.onConnect.bind(this)
|
|
277
|
+
provider.on('connect', connect)
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
async switchChain({ chainId }) {
|
|
281
|
+
const chain = chains.find((x) => x.id === chainId)
|
|
282
|
+
if (!chain) throw new SwitchChainError(new ChainNotConfiguredError())
|
|
283
|
+
|
|
284
|
+
const provider = await this.getProvider()
|
|
285
|
+
await provider.request({
|
|
286
|
+
method: 'wallet_switchEthereumChain',
|
|
287
|
+
params: [{ chainId: numberToHex(chainId) }],
|
|
288
|
+
})
|
|
289
|
+
|
|
290
|
+
return chain
|
|
291
|
+
},
|
|
292
|
+
type: 'injected',
|
|
293
|
+
}
|
|
294
|
+
})
|
|
295
|
+
}
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '5.11.
|
|
1
|
+
export const version = '5.11.1'
|