@wagmi/connectors 5.8.5 → 5.9.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/baseAccount.js +188 -0
- package/dist/esm/baseAccount.js.map +1 -0
- package/dist/esm/exports/index.js +1 -0
- 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/types/baseAccount.d.ts +14 -0
- package/dist/types/baseAccount.d.ts.map +1 -0
- package/dist/types/exports/index.d.ts +1 -0
- package/dist/types/exports/index.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +4 -3
- package/src/baseAccount.ts +240 -0
- package/src/exports/index.ts +2 -0
- package/src/version.ts +1 -1
package/dist/esm/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '5.
|
|
1
|
+
export const version = '5.9.0';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ProviderInterface, createBaseAccountSDK } from '@base-org/account';
|
|
2
|
+
import type { Mutable, Omit } from '@wagmi/core/internal';
|
|
3
|
+
import { type Address } from 'viem';
|
|
4
|
+
export type BaseAccountParameters = Mutable<Omit<Parameters<typeof createBaseAccountSDK>[0], 'appChainIds'>>;
|
|
5
|
+
export declare function baseAccount(parameters?: BaseAccountParameters): import("@wagmi/core").CreateConnectorFn<ProviderInterface, {
|
|
6
|
+
connect(parameters?: {
|
|
7
|
+
chainId?: number | undefined;
|
|
8
|
+
isReconnecting?: boolean | undefined;
|
|
9
|
+
}): Promise<{
|
|
10
|
+
accounts: readonly Address[];
|
|
11
|
+
chainId: number;
|
|
12
|
+
}>;
|
|
13
|
+
}, Record<string, unknown>>;
|
|
14
|
+
//# sourceMappingURL=baseAccount.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseAccount.d.ts","sourceRoot":"","sources":["../../src/baseAccount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAMhF,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAEL,KAAK,OAAO,EAOb,MAAM,MAAM,CAAA;AAEb,MAAM,MAAM,qBAAqB,GAAG,OAAO,CACzC,IAAI,CACF,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAC1C,aAAa,CACd,CACF,CAAA;AAED,wBAAgB,WAAW,CAAC,UAAU,GAAE,qBAA0B;yBAGzC;QACnB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KACrC,GAAG,OAAO,CAAC;QACV,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;QAC5B,OAAO,EAAE,MAAM,CAAA;KAChB,CAAC;4BA6ML"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { type InjectedParameters, injected, type MockParameters, mock, } from '@wagmi/core';
|
|
2
|
+
export { type BaseAccountParameters, baseAccount } from '../baseAccount.js';
|
|
2
3
|
export { type CoinbaseWalletParameters, coinbaseWallet, } from '../coinbaseWallet.js';
|
|
3
4
|
export { type MetaMaskParameters, metaMask } from '../metaMask.js';
|
|
4
5
|
export { type SafeParameters, safe } from '../safe.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;AAEpB,OAAO,EACL,KAAK,wBAAwB,EAC7B,cAAc,GACf,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,KAAK,kBAAkB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAElE,OAAO,EAAE,KAAK,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtD,OAAO,EACL,KAAK,uBAAuB,EAC5B,aAAa,GACd,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,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;AAEpB,OAAO,EAAE,KAAK,qBAAqB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE3E,OAAO,EACL,KAAK,wBAAwB,EAC7B,cAAc,GACf,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,KAAK,kBAAkB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAElE,OAAO,EAAE,KAAK,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtD,OAAO,EACL,KAAK,uBAAuB,EAC5B,aAAa,GACd,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/types/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "5.
|
|
1
|
+
export declare const version = "5.9.0";
|
|
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.
|
|
4
|
+
"version": "5.9.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"typescript": ">=5.0.4",
|
|
32
32
|
"viem": "2.x",
|
|
33
|
-
"@wagmi/core": "2.
|
|
33
|
+
"@wagmi/core": "2.18.0"
|
|
34
34
|
},
|
|
35
35
|
"peerDependenciesMeta": {
|
|
36
36
|
"typescript": {
|
|
@@ -38,7 +38,8 @@
|
|
|
38
38
|
}
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@
|
|
41
|
+
"@base-org/account": "1.0.2",
|
|
42
|
+
"@coinbase/wallet-sdk": "4.3.6",
|
|
42
43
|
"@metamask/sdk": "0.32.0",
|
|
43
44
|
"@safe-global/safe-apps-provider": "0.18.6",
|
|
44
45
|
"@safe-global/safe-apps-sdk": "9.1.0",
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import type { ProviderInterface, createBaseAccountSDK } from '@base-org/account'
|
|
2
|
+
import {
|
|
3
|
+
ChainNotConfiguredError,
|
|
4
|
+
type Connector,
|
|
5
|
+
createConnector,
|
|
6
|
+
} from '@wagmi/core'
|
|
7
|
+
import type { Mutable, Omit } from '@wagmi/core/internal'
|
|
8
|
+
import {
|
|
9
|
+
type AddEthereumChainParameter,
|
|
10
|
+
type Address,
|
|
11
|
+
type Hex,
|
|
12
|
+
type ProviderRpcError,
|
|
13
|
+
SwitchChainError,
|
|
14
|
+
UserRejectedRequestError,
|
|
15
|
+
getAddress,
|
|
16
|
+
numberToHex,
|
|
17
|
+
} from 'viem'
|
|
18
|
+
|
|
19
|
+
export type BaseAccountParameters = Mutable<
|
|
20
|
+
Omit<
|
|
21
|
+
Parameters<typeof createBaseAccountSDK>[0],
|
|
22
|
+
'appChainIds' // set via wagmi config
|
|
23
|
+
>
|
|
24
|
+
>
|
|
25
|
+
|
|
26
|
+
export function baseAccount(parameters: BaseAccountParameters = {}) {
|
|
27
|
+
type Provider = ProviderInterface
|
|
28
|
+
type Properties = {
|
|
29
|
+
connect(parameters?: {
|
|
30
|
+
chainId?: number | undefined
|
|
31
|
+
isReconnecting?: boolean | undefined
|
|
32
|
+
}): Promise<{
|
|
33
|
+
accounts: readonly Address[]
|
|
34
|
+
chainId: number
|
|
35
|
+
}>
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
let walletProvider: Provider | undefined
|
|
39
|
+
|
|
40
|
+
let accountsChanged: Connector['onAccountsChanged'] | undefined
|
|
41
|
+
let chainChanged: Connector['onChainChanged'] | undefined
|
|
42
|
+
let disconnect: Connector['onDisconnect'] | undefined
|
|
43
|
+
|
|
44
|
+
return createConnector<Provider, Properties>((config) => ({
|
|
45
|
+
id: 'baseAccount',
|
|
46
|
+
name: 'Base Account',
|
|
47
|
+
rdns: 'app.base.account',
|
|
48
|
+
type: 'baseAccount',
|
|
49
|
+
async connect({ chainId } = {}) {
|
|
50
|
+
try {
|
|
51
|
+
const provider = await this.getProvider()
|
|
52
|
+
const accounts = (
|
|
53
|
+
(await provider.request({
|
|
54
|
+
method: 'eth_requestAccounts',
|
|
55
|
+
params: [],
|
|
56
|
+
})) as string[]
|
|
57
|
+
).map((x) => getAddress(x))
|
|
58
|
+
|
|
59
|
+
if (!accountsChanged) {
|
|
60
|
+
accountsChanged = this.onAccountsChanged.bind(this)
|
|
61
|
+
provider.on('accountsChanged', accountsChanged)
|
|
62
|
+
}
|
|
63
|
+
if (!chainChanged) {
|
|
64
|
+
chainChanged = this.onChainChanged.bind(this)
|
|
65
|
+
provider.on('chainChanged', chainChanged)
|
|
66
|
+
}
|
|
67
|
+
if (!disconnect) {
|
|
68
|
+
disconnect = this.onDisconnect.bind(this)
|
|
69
|
+
provider.on('disconnect', disconnect)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Switch to chain if provided
|
|
73
|
+
let currentChainId = await this.getChainId()
|
|
74
|
+
if (chainId && currentChainId !== chainId) {
|
|
75
|
+
const chain = await this.switchChain!({ chainId }).catch((error) => {
|
|
76
|
+
if (error.code === UserRejectedRequestError.code) throw error
|
|
77
|
+
return { id: currentChainId }
|
|
78
|
+
})
|
|
79
|
+
currentChainId = chain?.id ?? currentChainId
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return { accounts, chainId: currentChainId }
|
|
83
|
+
} catch (error) {
|
|
84
|
+
if (
|
|
85
|
+
/(user closed modal|accounts received is empty|user denied account|request rejected)/i.test(
|
|
86
|
+
(error as Error).message,
|
|
87
|
+
)
|
|
88
|
+
)
|
|
89
|
+
throw new UserRejectedRequestError(error as Error)
|
|
90
|
+
throw error
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
async disconnect() {
|
|
94
|
+
const provider = await this.getProvider()
|
|
95
|
+
|
|
96
|
+
if (accountsChanged) {
|
|
97
|
+
provider.removeListener('accountsChanged', accountsChanged)
|
|
98
|
+
accountsChanged = undefined
|
|
99
|
+
}
|
|
100
|
+
if (chainChanged) {
|
|
101
|
+
provider.removeListener('chainChanged', chainChanged)
|
|
102
|
+
chainChanged = undefined
|
|
103
|
+
}
|
|
104
|
+
if (disconnect) {
|
|
105
|
+
provider.removeListener('disconnect', disconnect)
|
|
106
|
+
disconnect = undefined
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
provider.disconnect()
|
|
110
|
+
},
|
|
111
|
+
async getAccounts() {
|
|
112
|
+
const provider = await this.getProvider()
|
|
113
|
+
return (
|
|
114
|
+
(await provider.request({
|
|
115
|
+
method: 'eth_accounts',
|
|
116
|
+
})) as string[]
|
|
117
|
+
).map((x) => getAddress(x))
|
|
118
|
+
},
|
|
119
|
+
async getChainId() {
|
|
120
|
+
const provider = await this.getProvider()
|
|
121
|
+
const chainId = (await provider.request({
|
|
122
|
+
method: 'eth_chainId',
|
|
123
|
+
})) as Hex
|
|
124
|
+
return Number(chainId)
|
|
125
|
+
},
|
|
126
|
+
async getProvider() {
|
|
127
|
+
if (!walletProvider) {
|
|
128
|
+
const preference = (() => {
|
|
129
|
+
if (typeof parameters.preference === 'string')
|
|
130
|
+
return { options: parameters.preference }
|
|
131
|
+
return {
|
|
132
|
+
...parameters.preference,
|
|
133
|
+
options: parameters.preference?.options ?? 'all',
|
|
134
|
+
}
|
|
135
|
+
})()
|
|
136
|
+
|
|
137
|
+
const { createBaseAccountSDK } = await import('@base-org/account')
|
|
138
|
+
const sdk = createBaseAccountSDK({
|
|
139
|
+
...parameters,
|
|
140
|
+
appChainIds: config.chains.map((x) => x.id),
|
|
141
|
+
preference,
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
walletProvider = sdk.getProvider()
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return walletProvider
|
|
148
|
+
},
|
|
149
|
+
async isAuthorized() {
|
|
150
|
+
try {
|
|
151
|
+
const accounts = await this.getAccounts()
|
|
152
|
+
return !!accounts.length
|
|
153
|
+
} catch {
|
|
154
|
+
return false
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
async switchChain({ addEthereumChainParameter, chainId }) {
|
|
158
|
+
const chain = config.chains.find((chain) => chain.id === chainId)
|
|
159
|
+
if (!chain) throw new SwitchChainError(new ChainNotConfiguredError())
|
|
160
|
+
|
|
161
|
+
const provider = await this.getProvider()
|
|
162
|
+
|
|
163
|
+
try {
|
|
164
|
+
await provider.request({
|
|
165
|
+
method: 'wallet_switchEthereumChain',
|
|
166
|
+
params: [{ chainId: numberToHex(chain.id) }],
|
|
167
|
+
})
|
|
168
|
+
return chain
|
|
169
|
+
} catch (error) {
|
|
170
|
+
// Indicates chain is not added to provider
|
|
171
|
+
if ((error as ProviderRpcError).code === 4902) {
|
|
172
|
+
try {
|
|
173
|
+
let blockExplorerUrls: string[] | undefined
|
|
174
|
+
if (addEthereumChainParameter?.blockExplorerUrls)
|
|
175
|
+
blockExplorerUrls = addEthereumChainParameter.blockExplorerUrls
|
|
176
|
+
else
|
|
177
|
+
blockExplorerUrls = chain.blockExplorers?.default.url
|
|
178
|
+
? [chain.blockExplorers?.default.url]
|
|
179
|
+
: []
|
|
180
|
+
|
|
181
|
+
let rpcUrls: readonly string[]
|
|
182
|
+
if (addEthereumChainParameter?.rpcUrls?.length)
|
|
183
|
+
rpcUrls = addEthereumChainParameter.rpcUrls
|
|
184
|
+
else rpcUrls = [chain.rpcUrls.default?.http[0] ?? '']
|
|
185
|
+
|
|
186
|
+
const addEthereumChain = {
|
|
187
|
+
blockExplorerUrls,
|
|
188
|
+
chainId: numberToHex(chainId),
|
|
189
|
+
chainName: addEthereumChainParameter?.chainName ?? chain.name,
|
|
190
|
+
iconUrls: addEthereumChainParameter?.iconUrls,
|
|
191
|
+
nativeCurrency:
|
|
192
|
+
addEthereumChainParameter?.nativeCurrency ??
|
|
193
|
+
chain.nativeCurrency,
|
|
194
|
+
rpcUrls,
|
|
195
|
+
} satisfies AddEthereumChainParameter
|
|
196
|
+
|
|
197
|
+
await provider.request({
|
|
198
|
+
method: 'wallet_addEthereumChain',
|
|
199
|
+
params: [addEthereumChain],
|
|
200
|
+
})
|
|
201
|
+
|
|
202
|
+
return chain
|
|
203
|
+
} catch (error) {
|
|
204
|
+
throw new UserRejectedRequestError(error as Error)
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
throw new SwitchChainError(error as Error)
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
onAccountsChanged(accounts) {
|
|
212
|
+
if (accounts.length === 0) this.onDisconnect()
|
|
213
|
+
else
|
|
214
|
+
config.emitter.emit('change', {
|
|
215
|
+
accounts: accounts.map((x) => getAddress(x)),
|
|
216
|
+
})
|
|
217
|
+
},
|
|
218
|
+
onChainChanged(chain) {
|
|
219
|
+
const chainId = Number(chain)
|
|
220
|
+
config.emitter.emit('change', { chainId })
|
|
221
|
+
},
|
|
222
|
+
async onDisconnect(_error) {
|
|
223
|
+
config.emitter.emit('disconnect')
|
|
224
|
+
|
|
225
|
+
const provider = await this.getProvider()
|
|
226
|
+
if (accountsChanged) {
|
|
227
|
+
provider.removeListener('accountsChanged', accountsChanged)
|
|
228
|
+
accountsChanged = undefined
|
|
229
|
+
}
|
|
230
|
+
if (chainChanged) {
|
|
231
|
+
provider.removeListener('chainChanged', chainChanged)
|
|
232
|
+
chainChanged = undefined
|
|
233
|
+
}
|
|
234
|
+
if (disconnect) {
|
|
235
|
+
provider.removeListener('disconnect', disconnect)
|
|
236
|
+
disconnect = undefined
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
}))
|
|
240
|
+
}
|
package/src/exports/index.ts
CHANGED
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '5.
|
|
1
|
+
export const version = '5.9.0'
|