@wagmi/connectors 4.0.0 → 4.0.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.
Files changed (52) hide show
  1. package/README.md +13 -0
  2. package/dist/esm/coinbaseWallet.js +15 -16
  3. package/dist/esm/coinbaseWallet.js.map +1 -1
  4. package/dist/esm/exports/index.js +7 -0
  5. package/dist/esm/exports/index.js.map +1 -0
  6. package/dist/esm/exports/index.test-d.js.map +1 -0
  7. package/dist/esm/metaMask.js +264 -0
  8. package/dist/esm/metaMask.js.map +1 -0
  9. package/dist/esm/safe.js +19 -16
  10. package/dist/esm/safe.js.map +1 -1
  11. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  12. package/dist/esm/version.js +1 -1
  13. package/dist/esm/walletConnect.js +15 -16
  14. package/dist/esm/walletConnect.js.map +1 -1
  15. package/dist/types/coinbaseWallet.d.ts +3 -0
  16. package/dist/types/coinbaseWallet.d.ts.map +1 -1
  17. package/dist/types/exports/index.d.ts +7 -0
  18. package/dist/types/exports/index.d.ts.map +1 -0
  19. package/dist/types/exports/index.test-d.d.ts.map +1 -0
  20. package/dist/types/metaMask.d.ts +13 -0
  21. package/dist/types/metaMask.d.ts.map +1 -0
  22. package/dist/types/safe.d.ts +5 -2
  23. package/dist/types/safe.d.ts.map +1 -1
  24. package/dist/types/version.d.ts +1 -1
  25. package/dist/types/walletConnect.d.ts +3 -0
  26. package/dist/types/walletConnect.d.ts.map +1 -1
  27. package/package.json +21 -38
  28. package/src/coinbaseWallet.ts +16 -16
  29. package/src/exports/index.ts +22 -0
  30. package/src/metaMask.ts +333 -0
  31. package/src/safe.ts +26 -20
  32. package/src/version.ts +1 -1
  33. package/src/walletConnect.ts +15 -20
  34. package/dist/esm/index.js +0 -7
  35. package/dist/esm/index.js.map +0 -1
  36. package/dist/esm/index.test-d.js.map +0 -1
  37. package/dist/esm/injected.js +0 -372
  38. package/dist/esm/injected.js.map +0 -1
  39. package/dist/esm/ledger.js +0 -162
  40. package/dist/esm/ledger.js.map +0 -1
  41. package/dist/types/index.d.ts +0 -7
  42. package/dist/types/index.d.ts.map +0 -1
  43. package/dist/types/index.test-d.d.ts.map +0 -1
  44. package/dist/types/injected.d.ts +0 -381
  45. package/dist/types/injected.d.ts.map +0 -1
  46. package/dist/types/ledger.d.ts +0 -18
  47. package/dist/types/ledger.d.ts.map +0 -1
  48. package/src/index.ts +0 -17
  49. package/src/injected.ts +0 -527
  50. package/src/ledger.ts +0 -210
  51. /package/dist/esm/{index.test-d.js → exports/index.test-d.js} +0 -0
  52. /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
- }