@wagmi/connectors 4.0.0 → 4.0.2
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/README.md +13 -0
- package/dist/esm/coinbaseWallet.js +20 -19
- package/dist/esm/coinbaseWallet.js.map +1 -1
- package/dist/esm/exports/index.js +7 -0
- package/dist/esm/exports/index.js.map +1 -0
- package/dist/esm/exports/index.test-d.js.map +1 -0
- package/dist/esm/metaMask.js +266 -0
- package/dist/esm/metaMask.js.map +1 -0
- package/dist/esm/safe.js +19 -16
- package/dist/esm/safe.js.map +1 -1
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/walletConnect.js +15 -16
- package/dist/esm/walletConnect.js.map +1 -1
- package/dist/types/coinbaseWallet.d.ts +3 -0
- package/dist/types/coinbaseWallet.d.ts.map +1 -1
- package/dist/types/exports/index.d.ts +7 -0
- package/dist/types/exports/index.d.ts.map +1 -0
- package/dist/types/exports/index.test-d.d.ts.map +1 -0
- package/dist/types/metaMask.d.ts +13 -0
- package/dist/types/metaMask.d.ts.map +1 -0
- package/dist/types/safe.d.ts +5 -2
- package/dist/types/safe.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/walletConnect.d.ts +3 -0
- package/dist/types/walletConnect.d.ts.map +1 -1
- package/package.json +21 -38
- package/src/coinbaseWallet.ts +20 -19
- package/src/exports/index.ts +22 -0
- package/src/metaMask.ts +334 -0
- package/src/safe.ts +26 -20
- package/src/version.ts +1 -1
- package/src/walletConnect.ts +15 -20
- package/dist/esm/index.js +0 -7
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/index.test-d.js.map +0 -1
- package/dist/esm/injected.js +0 -372
- package/dist/esm/injected.js.map +0 -1
- package/dist/esm/ledger.js +0 -162
- package/dist/esm/ledger.js.map +0 -1
- package/dist/types/index.d.ts +0 -7
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.test-d.d.ts.map +0 -1
- package/dist/types/injected.d.ts +0 -381
- package/dist/types/injected.d.ts.map +0 -1
- package/dist/types/ledger.d.ts +0 -18
- package/dist/types/ledger.d.ts.map +0 -1
- package/src/index.ts +0 -17
- package/src/injected.ts +0 -527
- package/src/ledger.ts +0 -210
- /package/dist/esm/{index.test-d.js → exports/index.test-d.js} +0 -0
- /package/dist/types/{index.test-d.d.ts → exports/index.test-d.d.ts} +0 -0
package/src/ledger.ts
DELETED
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type EthereumProvider,
|
|
3
|
-
SupportedProviders,
|
|
4
|
-
loadConnectKit,
|
|
5
|
-
} from '@ledgerhq/connect-kit-loader'
|
|
6
|
-
import {
|
|
7
|
-
ChainNotConfiguredError,
|
|
8
|
-
createConnector,
|
|
9
|
-
normalizeChainId,
|
|
10
|
-
} from '@wagmi/core'
|
|
11
|
-
import {
|
|
12
|
-
type ProviderConnectInfo,
|
|
13
|
-
type ProviderRpcError,
|
|
14
|
-
SwitchChainError,
|
|
15
|
-
UserRejectedRequestError,
|
|
16
|
-
getAddress,
|
|
17
|
-
numberToHex,
|
|
18
|
-
} from 'viem'
|
|
19
|
-
|
|
20
|
-
export type LedgerParameters = {
|
|
21
|
-
enableDebugLogs?: boolean | undefined
|
|
22
|
-
optionalEvents?: string[] | undefined
|
|
23
|
-
optionalMethods?: string[] | undefined
|
|
24
|
-
projectId?: string | undefined
|
|
25
|
-
requiredChains?: number[] | undefined
|
|
26
|
-
requiredEvents?: string[] | undefined
|
|
27
|
-
requiredMethods?: string[] | undefined
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export function ledger(parameters: LedgerParameters = {}) {
|
|
31
|
-
type Provider = EthereumProvider
|
|
32
|
-
type Properties = {
|
|
33
|
-
onConnect(connectInfo: ProviderConnectInfo): void
|
|
34
|
-
onSessionDelete(data: { topic: string }): void
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
let provider_: Provider | undefined
|
|
38
|
-
let providerPromise: Promise<typeof provider_>
|
|
39
|
-
|
|
40
|
-
return createConnector<Provider, Properties>((config) => ({
|
|
41
|
-
id: 'ledger',
|
|
42
|
-
name: 'Ledger',
|
|
43
|
-
async setup() {
|
|
44
|
-
const provider = await this.getProvider()
|
|
45
|
-
if (!provider) return
|
|
46
|
-
provider.on('connect', this.onConnect.bind(this))
|
|
47
|
-
provider.on('session_delete', this.onSessionDelete.bind(this))
|
|
48
|
-
},
|
|
49
|
-
async connect({ chainId } = {}) {
|
|
50
|
-
try {
|
|
51
|
-
const provider = await this.getProvider()
|
|
52
|
-
|
|
53
|
-
// TODO: Update this logic to be more stable (a la WalletConnect connector)
|
|
54
|
-
// Don't request accounts if we have a session, like when reloading with
|
|
55
|
-
// an active WC v2 session
|
|
56
|
-
if (!provider.session)
|
|
57
|
-
await provider.request({ method: 'eth_requestAccounts' })
|
|
58
|
-
|
|
59
|
-
const accounts = await this.getAccounts()
|
|
60
|
-
|
|
61
|
-
provider.removeListener('connect', this.onConnect.bind(this))
|
|
62
|
-
provider.on('accountsChanged', this.onAccountsChanged.bind(this))
|
|
63
|
-
provider.on('chainChanged', this.onChainChanged)
|
|
64
|
-
provider.on('disconnect', this.onDisconnect.bind(this))
|
|
65
|
-
provider.on('session_delete', this.onSessionDelete.bind(this))
|
|
66
|
-
|
|
67
|
-
// Switch to chain if provided
|
|
68
|
-
let currentChainId = await this.getChainId()
|
|
69
|
-
if (chainId && currentChainId !== chainId) {
|
|
70
|
-
const chain = await this.switchChain!({ chainId }).catch(() => ({
|
|
71
|
-
id: currentChainId,
|
|
72
|
-
}))
|
|
73
|
-
currentChainId = chain?.id ?? currentChainId
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return { accounts, chainId: currentChainId }
|
|
77
|
-
} catch (error) {
|
|
78
|
-
if (/user rejected/i.test((error as ProviderRpcError)?.message))
|
|
79
|
-
throw new UserRejectedRequestError(error as Error)
|
|
80
|
-
throw error
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
async disconnect() {
|
|
84
|
-
const provider = await this.getProvider()
|
|
85
|
-
try {
|
|
86
|
-
await provider?.disconnect?.().catch(() => {})
|
|
87
|
-
} catch (error) {
|
|
88
|
-
if (!/No matching key/i.test((error as Error).message)) throw error
|
|
89
|
-
} finally {
|
|
90
|
-
provider.removeListener(
|
|
91
|
-
'accountsChanged',
|
|
92
|
-
this.onAccountsChanged.bind(this),
|
|
93
|
-
)
|
|
94
|
-
provider.removeListener('chainChanged', this.onChainChanged)
|
|
95
|
-
provider.removeListener('disconnect', this.onDisconnect.bind(this))
|
|
96
|
-
provider.removeListener(
|
|
97
|
-
'session_delete',
|
|
98
|
-
this.onSessionDelete.bind(this),
|
|
99
|
-
)
|
|
100
|
-
provider.on('connect', this.onConnect.bind(this))
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
async getAccounts() {
|
|
104
|
-
const provider = await this.getProvider()
|
|
105
|
-
return (await provider.request<string[]>({ method: 'eth_accounts' })).map(
|
|
106
|
-
getAddress,
|
|
107
|
-
)
|
|
108
|
-
},
|
|
109
|
-
async getProvider({ chainId } = {}) {
|
|
110
|
-
async function initProvider() {
|
|
111
|
-
const connectKit = await loadConnectKit()
|
|
112
|
-
if (parameters.enableDebugLogs) connectKit.enableDebugLogs()
|
|
113
|
-
|
|
114
|
-
const {
|
|
115
|
-
optionalEvents,
|
|
116
|
-
optionalMethods,
|
|
117
|
-
projectId,
|
|
118
|
-
requiredChains,
|
|
119
|
-
requiredEvents,
|
|
120
|
-
requiredMethods,
|
|
121
|
-
} = parameters
|
|
122
|
-
connectKit.checkSupport({
|
|
123
|
-
chains: requiredChains,
|
|
124
|
-
events: requiredEvents,
|
|
125
|
-
methods: requiredMethods,
|
|
126
|
-
optionalChains: config.chains.map(({ id }) => id),
|
|
127
|
-
optionalEvents,
|
|
128
|
-
optionalMethods,
|
|
129
|
-
projectId,
|
|
130
|
-
providerType: SupportedProviders.Ethereum,
|
|
131
|
-
rpcMap: Object.fromEntries(
|
|
132
|
-
config.chains.map((chain) => [
|
|
133
|
-
chain.id,
|
|
134
|
-
chain.rpcUrls.default.http[0]!,
|
|
135
|
-
]),
|
|
136
|
-
),
|
|
137
|
-
walletConnectVersion: 2,
|
|
138
|
-
})
|
|
139
|
-
|
|
140
|
-
return (await connectKit.getProvider()) as unknown as EthereumProvider
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
if (!provider_) {
|
|
144
|
-
if (!providerPromise) providerPromise = initProvider()
|
|
145
|
-
provider_ = await providerPromise
|
|
146
|
-
}
|
|
147
|
-
if (chainId) await this.switchChain!({ chainId })
|
|
148
|
-
return provider_!
|
|
149
|
-
},
|
|
150
|
-
async getChainId() {
|
|
151
|
-
const provider = await this.getProvider()
|
|
152
|
-
const chainId = await provider.request({ method: 'eth_chainId' })
|
|
153
|
-
return normalizeChainId(chainId)
|
|
154
|
-
},
|
|
155
|
-
async isAuthorized() {
|
|
156
|
-
try {
|
|
157
|
-
const accounts = await this.getAccounts()
|
|
158
|
-
return !!accounts.length
|
|
159
|
-
} catch {
|
|
160
|
-
return false
|
|
161
|
-
}
|
|
162
|
-
},
|
|
163
|
-
async switchChain({ chainId }) {
|
|
164
|
-
const chain = config.chains.find((chain) => chain.id === chainId)
|
|
165
|
-
if (!chain) throw new SwitchChainError(new ChainNotConfiguredError())
|
|
166
|
-
|
|
167
|
-
try {
|
|
168
|
-
const provider = await this.getProvider()
|
|
169
|
-
await provider.request({
|
|
170
|
-
method: 'wallet_switchEthereumChain',
|
|
171
|
-
params: [{ chainId: numberToHex(chainId) }],
|
|
172
|
-
})
|
|
173
|
-
return chain
|
|
174
|
-
} catch (error) {
|
|
175
|
-
const message =
|
|
176
|
-
typeof error === 'string'
|
|
177
|
-
? error
|
|
178
|
-
: (error as ProviderRpcError)?.message
|
|
179
|
-
if (/user rejected request/i.test(message))
|
|
180
|
-
throw new UserRejectedRequestError(error as Error)
|
|
181
|
-
|
|
182
|
-
throw new SwitchChainError(error as Error)
|
|
183
|
-
}
|
|
184
|
-
},
|
|
185
|
-
onAccountsChanged(accounts) {
|
|
186
|
-
if (accounts.length === 0) config.emitter.emit('disconnect')
|
|
187
|
-
else config.emitter.emit('change', { accounts: accounts.map(getAddress) })
|
|
188
|
-
},
|
|
189
|
-
onChainChanged(chain) {
|
|
190
|
-
const chainId = normalizeChainId(chain)
|
|
191
|
-
config.emitter.emit('change', { chainId })
|
|
192
|
-
},
|
|
193
|
-
async onConnect(connectInfo) {
|
|
194
|
-
const chainId = normalizeChainId(connectInfo.chainId)
|
|
195
|
-
const accounts = await this.getAccounts()
|
|
196
|
-
config.emitter.emit('connect', { accounts, chainId })
|
|
197
|
-
},
|
|
198
|
-
async onDisconnect(_error) {
|
|
199
|
-
config.emitter.emit('disconnect')
|
|
200
|
-
|
|
201
|
-
const provider = await this.getProvider()
|
|
202
|
-
provider.removeListener('accountsChanged', this.onAccountsChanged)
|
|
203
|
-
provider.removeListener('chainChanged', this.onChainChanged)
|
|
204
|
-
provider.removeListener('disconnect', this.onDisconnect.bind(this))
|
|
205
|
-
},
|
|
206
|
-
onSessionDelete() {
|
|
207
|
-
this.onDisconnect()
|
|
208
|
-
},
|
|
209
|
-
}))
|
|
210
|
-
}
|
|
File without changes
|
|
File without changes
|