@wagmi/connectors 4.1.25 → 4.1.27
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/metaMask.js +37 -78
- package/dist/esm/metaMask.js.map +1 -1
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/types/metaMask.d.ts +2 -9
- package/dist/types/metaMask.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +3 -3
- package/src/metaMask.ts +44 -88
- package/src/version.ts +1 -1
package/dist/esm/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '4.1.
|
|
1
|
+
export const version = '4.1.27';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/dist/types/metaMask.d.ts
CHANGED
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
import { type MetaMaskSDKOptions, type SDKProvider } from '@metamask/sdk';
|
|
2
|
-
import type { Evaluate, ExactPartial
|
|
2
|
+
import type { Evaluate, ExactPartial } from '@wagmi/core/internal';
|
|
3
3
|
import { type ProviderConnectInfo } from 'viem';
|
|
4
|
-
export type MetaMaskParameters = Evaluate<ExactPartial<Omit<MetaMaskSDKOptions, '
|
|
5
|
-
/**
|
|
6
|
-
* @deprecated
|
|
7
|
-
*
|
|
8
|
-
* __Warning__ This connector has a large file size due to the underlying `@metamask/sdk`. For mobile
|
|
9
|
-
* support, it is recommended to use {@link walletConnect}. For desktop support, you should rely on Multi Injected
|
|
10
|
-
* Provider Discovery (EIP-6963) via the Wagmi {@link Config}.
|
|
11
|
-
*/
|
|
4
|
+
export type MetaMaskParameters = Evaluate<ExactPartial<Omit<MetaMaskSDKOptions, '_source' | 'readonlyRPCMap'>>>;
|
|
12
5
|
export declare function metaMask(parameters?: MetaMaskParameters): import("@wagmi/core").CreateConnectorFn<SDKProvider, {
|
|
13
6
|
onConnect(connectInfo: ProviderConnectInfo): void;
|
|
14
7
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metaMask.d.ts","sourceRoot":"","sources":["../../src/metaMask.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"metaMask.d.ts","sourceRoot":"","sources":["../../src/metaMask.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,eAAe,CAAA;AAEtB,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAEL,KAAK,mBAAmB,EAQzB,MAAM,MAAM,CAAA;AAEb,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CACvC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,gBAAgB,CAAC,CAAC,CACrE,CAAA;AAQD,wBAAgB,QAAQ,CAAC,UAAU,GAAE,kBAAuB;2BAGjC,mBAAmB,GAAG,IAAI;;gCAEF,IAAI;GAwQtD;yBA7Qe,QAAQ"}
|
package/dist/types/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "4.1.
|
|
1
|
+
export declare const version = "4.1.27";
|
|
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": "4.1.
|
|
4
|
+
"version": "4.1.27",
|
|
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.6.
|
|
33
|
+
"@wagmi/core": "2.6.18"
|
|
34
34
|
},
|
|
35
35
|
"peerDependenciesMeta": {
|
|
36
36
|
"typescript": {
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@coinbase/wallet-sdk": "3.9.1",
|
|
42
|
-
"@metamask/sdk": "0.
|
|
42
|
+
"@metamask/sdk": "0.18.6",
|
|
43
43
|
"@safe-global/safe-apps-provider": "0.18.1",
|
|
44
44
|
"@safe-global/safe-apps-sdk": "8.1.0",
|
|
45
45
|
"@walletconnect/ethereum-provider": "2.11.2",
|
package/src/metaMask.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
|
-
EventType,
|
|
3
2
|
type MetaMaskSDK,
|
|
4
3
|
type MetaMaskSDKOptions,
|
|
5
4
|
type SDKProvider,
|
|
6
5
|
} from '@metamask/sdk'
|
|
7
6
|
import { ChainNotConfiguredError, createConnector } from '@wagmi/core'
|
|
8
|
-
import type { Evaluate, ExactPartial
|
|
7
|
+
import type { Evaluate, ExactPartial } from '@wagmi/core/internal'
|
|
9
8
|
import {
|
|
10
9
|
type Address,
|
|
11
10
|
type ProviderConnectInfo,
|
|
@@ -14,31 +13,20 @@ import {
|
|
|
14
13
|
RpcError,
|
|
15
14
|
SwitchChainError,
|
|
16
15
|
UserRejectedRequestError,
|
|
17
|
-
type WalletPermission,
|
|
18
16
|
getAddress,
|
|
19
17
|
numberToHex,
|
|
20
18
|
} from 'viem'
|
|
21
19
|
|
|
22
20
|
export type MetaMaskParameters = Evaluate<
|
|
23
|
-
ExactPartial<
|
|
24
|
-
Omit<
|
|
25
|
-
MetaMaskSDKOptions,
|
|
26
|
-
| 'checkInstallationImmediately'
|
|
27
|
-
| 'checkInstallationOnAllCalls'
|
|
28
|
-
| 'defaultReadOnlyChainId'
|
|
29
|
-
| 'readonlyRPCMap'
|
|
30
|
-
>
|
|
31
|
-
>
|
|
21
|
+
ExactPartial<Omit<MetaMaskSDKOptions, '_source' | 'readonlyRPCMap'>>
|
|
32
22
|
>
|
|
33
23
|
|
|
24
|
+
const isMobileBrowser =
|
|
25
|
+
/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
|
|
26
|
+
navigator.userAgent,
|
|
27
|
+
)
|
|
28
|
+
|
|
34
29
|
metaMask.type = 'metaMask' as const
|
|
35
|
-
/**
|
|
36
|
-
* @deprecated
|
|
37
|
-
*
|
|
38
|
-
* __Warning__ This connector has a large file size due to the underlying `@metamask/sdk`. For mobile
|
|
39
|
-
* support, it is recommended to use {@link walletConnect}. For desktop support, you should rely on Multi Injected
|
|
40
|
-
* Provider Discovery (EIP-6963) via the Wagmi {@link Config}.
|
|
41
|
-
*/
|
|
42
30
|
export function metaMask(parameters: MetaMaskParameters = {}) {
|
|
43
31
|
type Provider = SDKProvider
|
|
44
32
|
type Properties = {
|
|
@@ -48,7 +36,8 @@ export function metaMask(parameters: MetaMaskParameters = {}) {
|
|
|
48
36
|
type Listener = Parameters<Provider['on']>[1]
|
|
49
37
|
|
|
50
38
|
let sdk: MetaMaskSDK
|
|
51
|
-
let
|
|
39
|
+
let provider: Provider | undefined
|
|
40
|
+
let providerPromise: Promise<typeof provider>
|
|
52
41
|
|
|
53
42
|
return createConnector<Provider, Properties, StorageItem>((config) => ({
|
|
54
43
|
id: 'metaMaskSDK',
|
|
@@ -62,30 +51,8 @@ export function metaMask(parameters: MetaMaskParameters = {}) {
|
|
|
62
51
|
async connect({ chainId, isReconnecting } = {}) {
|
|
63
52
|
const provider = await this.getProvider()
|
|
64
53
|
|
|
65
|
-
let accounts: readonly Address[]
|
|
66
|
-
if (
|
|
67
|
-
accounts = await this.getAccounts().catch(() => null)
|
|
68
|
-
const isAuthorized = !!accounts?.length
|
|
69
|
-
if (isAuthorized)
|
|
70
|
-
// Attempt to show another prompt for selecting account if already connected
|
|
71
|
-
try {
|
|
72
|
-
const permissions = (await provider.request({
|
|
73
|
-
method: 'wallet_requestPermissions',
|
|
74
|
-
params: [{ eth_accounts: {} }],
|
|
75
|
-
})) as WalletPermission[]
|
|
76
|
-
accounts = (permissions[0]?.caveats?.[0]?.value as string[])?.map(
|
|
77
|
-
(x) => getAddress(x),
|
|
78
|
-
)
|
|
79
|
-
} catch (err) {
|
|
80
|
-
const error = err as RpcError
|
|
81
|
-
// Not all injected providers support `wallet_requestPermissions` (e.g. MetaMask iOS).
|
|
82
|
-
// Only bubble up error if user rejects request
|
|
83
|
-
if (error.code === UserRejectedRequestError.code)
|
|
84
|
-
throw new UserRejectedRequestError(error)
|
|
85
|
-
// Or prompt is already open
|
|
86
|
-
if (error.code === ResourceUnavailableRpcError.code) throw error
|
|
87
|
-
}
|
|
88
|
-
}
|
|
54
|
+
let accounts: readonly Address[] = []
|
|
55
|
+
if (isReconnecting) accounts = await this.getAccounts().catch(() => [])
|
|
89
56
|
|
|
90
57
|
try {
|
|
91
58
|
if (!accounts?.length) {
|
|
@@ -104,20 +71,8 @@ export function metaMask(parameters: MetaMaskParameters = {}) {
|
|
|
104
71
|
provider.on('chainChanged', this.onChainChanged as Listener)
|
|
105
72
|
provider.on('disconnect', this.onDisconnect.bind(this) as Listener)
|
|
106
73
|
|
|
107
|
-
// Backward compatibility with older wallet (<7.3) version that return accounts before authorization
|
|
108
|
-
if (!sdk.isExtensionActive() && !sdk._getConnection()?.isAuthorized()) {
|
|
109
|
-
function waitForAuthorized() {
|
|
110
|
-
return new Promise((resolve) => {
|
|
111
|
-
const connection = sdk._getConnection()
|
|
112
|
-
const connector = connection?.getConnector()
|
|
113
|
-
connector?.once(EventType.AUTHORIZED, () => resolve(true))
|
|
114
|
-
})
|
|
115
|
-
}
|
|
116
|
-
await waitForAuthorized()
|
|
117
|
-
}
|
|
118
|
-
|
|
119
74
|
// Switch to chain if provided
|
|
120
|
-
let currentChainId = await this.getChainId()
|
|
75
|
+
let currentChainId = (await this.getChainId()) as number
|
|
121
76
|
if (chainId && currentChainId !== chainId) {
|
|
122
77
|
const chain = await this.switchChain!({ chainId }).catch((error) => {
|
|
123
78
|
if (error.code === UserRejectedRequestError.code) throw error
|
|
@@ -164,44 +119,39 @@ export function metaMask(parameters: MetaMaskParameters = {}) {
|
|
|
164
119
|
async getChainId() {
|
|
165
120
|
const provider = await this.getProvider()
|
|
166
121
|
const chainId =
|
|
167
|
-
provider.
|
|
122
|
+
provider.getChainId() ||
|
|
123
|
+
(await provider?.request({ method: 'eth_chainId' }))
|
|
168
124
|
return Number(chainId)
|
|
169
125
|
},
|
|
170
126
|
async getProvider() {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
_source: 'wagmi',
|
|
187
|
-
...parameters,
|
|
188
|
-
checkInstallationImmediately: false,
|
|
189
|
-
checkInstallationOnAllCalls: false,
|
|
190
|
-
})
|
|
191
|
-
await sdk.init()
|
|
192
|
-
}
|
|
193
|
-
try {
|
|
194
|
-
walletProvider = sdk.getProvider()
|
|
195
|
-
} catch (error) {
|
|
196
|
-
// TODO: SDK sometimes throws errors when MM extension or mobile provider is not detected (don't throw for those errors)
|
|
197
|
-
const regex = /^SDK state invalid -- undefined( mobile)? provider$/
|
|
198
|
-
if (!regex.test((error as Error).message)) throw error
|
|
199
|
-
}
|
|
127
|
+
async function initProvider() {
|
|
128
|
+
const { MetaMaskSDK } = await import('@metamask/sdk')
|
|
129
|
+
sdk = new MetaMaskSDK({
|
|
130
|
+
dappMetadata: {},
|
|
131
|
+
...parameters,
|
|
132
|
+
_source: 'wagmi',
|
|
133
|
+
readonlyRPCMap: Object.fromEntries(
|
|
134
|
+
config.chains.map((chain) => [
|
|
135
|
+
chain.id,
|
|
136
|
+
chain.rpcUrls.default.http[0]!,
|
|
137
|
+
]),
|
|
138
|
+
),
|
|
139
|
+
})
|
|
140
|
+
await sdk.init()
|
|
141
|
+
return sdk.getProvider()!
|
|
200
142
|
}
|
|
201
|
-
|
|
143
|
+
|
|
144
|
+
if (!provider) {
|
|
145
|
+
if (!providerPromise) providerPromise = initProvider()
|
|
146
|
+
provider = await providerPromise
|
|
147
|
+
}
|
|
148
|
+
return provider!
|
|
202
149
|
},
|
|
203
150
|
async isAuthorized() {
|
|
204
151
|
try {
|
|
152
|
+
// MetaMask Mobile doesn't support persisted sessions.
|
|
153
|
+
if (isMobileBrowser) return false
|
|
154
|
+
|
|
205
155
|
const isDisconnected =
|
|
206
156
|
// If shim exists in storage, connector is disconnected
|
|
207
157
|
await config.storage?.getItem('metaMaskSDK.disconnected')
|
|
@@ -326,6 +276,12 @@ export function metaMask(parameters: MetaMaskParameters = {}) {
|
|
|
326
276
|
if (provider && !!(await this.getAccounts()).length) return
|
|
327
277
|
}
|
|
328
278
|
|
|
279
|
+
// Remove cached SDK properties.
|
|
280
|
+
if (typeof localStorage !== 'undefined') {
|
|
281
|
+
localStorage.removeItem('MMSDK_cached_address')
|
|
282
|
+
localStorage.removeItem('MMSDK_cached_chainId')
|
|
283
|
+
}
|
|
284
|
+
|
|
329
285
|
// No need to remove 'metaMaskSDK.disconnected' from storage because `onDisconnect` is typically
|
|
330
286
|
// only called when the wallet is disconnected through the wallet's interface, meaning the wallet
|
|
331
287
|
// actually disconnected and we don't need to simulate it.
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '4.1.
|
|
1
|
+
export const version = '4.1.27'
|