@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.
@@ -1,2 +1,2 @@
1
- export const version = '5.11.0';
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,eAAe,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACzD,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,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"}
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"}
@@ -1,2 +1,2 @@
1
- export declare const version = "5.11.0";
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.0",
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.18"
49
+ "porto": "0.2.19"
50
50
  },
51
51
  "contributors": [
52
52
  "awkweb.eth <t@wevm.dev>",
@@ -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.0'
1
+ export const version = '5.11.1'