@wagmi/connectors 5.0.0 → 5.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/dist/esm/coinbaseWallet.js +276 -36
- package/dist/esm/coinbaseWallet.js.map +1 -1
- package/dist/esm/metaMask.js +75 -96
- package/dist/esm/metaMask.js.map +1 -1
- package/dist/esm/safe.js +20 -13
- 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 +147 -77
- package/dist/esm/walletConnect.js.map +1 -1
- package/dist/types/coinbaseWallet.d.ts +38 -7
- package/dist/types/coinbaseWallet.d.ts.map +1 -1
- package/dist/types/metaMask.d.ts +3 -10
- package/dist/types/metaMask.d.ts.map +1 -1
- package/dist/types/safe.d.ts +2 -2
- package/dist/types/safe.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/walletConnect.d.ts +5 -9
- package/dist/types/walletConnect.d.ts.map +1 -1
- package/package.json +7 -6
- package/src/coinbaseWallet.ts +384 -66
- package/src/metaMask.ts +92 -110
- package/src/safe.ts +29 -14
- package/src/version.ts +1 -1
- package/src/walletConnect.ts +173 -99
- package/dist/esm/exports/index.test-d.js +0 -4
- package/dist/esm/exports/index.test-d.js.map +0 -1
- package/dist/types/exports/index.test-d.d.ts +0 -2
- package/dist/types/exports/index.test-d.d.ts.map +0 -1
package/dist/esm/metaMask.js
CHANGED
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ChainNotConfiguredError, createConnector, normalizeChainId, } from '@wagmi/core';
|
|
1
|
+
import { ChainNotConfiguredError, createConnector } from '@wagmi/core';
|
|
3
2
|
import { ResourceUnavailableRpcError, RpcError, SwitchChainError, UserRejectedRequestError, getAddress, numberToHex, } from 'viem';
|
|
4
3
|
metaMask.type = 'metaMask';
|
|
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
|
-
*/
|
|
12
4
|
export function metaMask(parameters = {}) {
|
|
13
5
|
let sdk;
|
|
14
|
-
let
|
|
6
|
+
let provider;
|
|
7
|
+
let providerPromise;
|
|
15
8
|
return createConnector((config) => ({
|
|
16
9
|
id: 'metaMaskSDK',
|
|
17
10
|
name: 'MetaMask',
|
|
@@ -23,52 +16,20 @@ export function metaMask(parameters = {}) {
|
|
|
23
16
|
},
|
|
24
17
|
async connect({ chainId, isReconnecting } = {}) {
|
|
25
18
|
const provider = await this.getProvider();
|
|
26
|
-
let accounts =
|
|
27
|
-
if (
|
|
28
|
-
accounts = await this.getAccounts().catch(() =>
|
|
29
|
-
const isAuthorized = !!accounts?.length;
|
|
30
|
-
if (isAuthorized)
|
|
31
|
-
// Attempt to show another prompt for selecting account if already connected
|
|
32
|
-
try {
|
|
33
|
-
const permissions = (await provider.request({
|
|
34
|
-
method: 'wallet_requestPermissions',
|
|
35
|
-
params: [{ eth_accounts: {} }],
|
|
36
|
-
}));
|
|
37
|
-
accounts = permissions[0]?.caveats?.[0]?.value?.map(getAddress);
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
const error = err;
|
|
41
|
-
// Not all injected providers support `wallet_requestPermissions` (e.g. MetaMask iOS).
|
|
42
|
-
// Only bubble up error if user rejects request
|
|
43
|
-
if (error.code === UserRejectedRequestError.code)
|
|
44
|
-
throw new UserRejectedRequestError(error);
|
|
45
|
-
// Or prompt is already open
|
|
46
|
-
if (error.code === ResourceUnavailableRpcError.code)
|
|
47
|
-
throw error;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
19
|
+
let accounts = [];
|
|
20
|
+
if (isReconnecting)
|
|
21
|
+
accounts = await this.getAccounts().catch(() => []);
|
|
50
22
|
try {
|
|
51
23
|
if (!accounts?.length) {
|
|
52
24
|
const requestedAccounts = (await sdk.connect());
|
|
53
|
-
accounts = requestedAccounts.map(getAddress);
|
|
25
|
+
accounts = requestedAccounts.map((x) => getAddress(x));
|
|
54
26
|
}
|
|
55
27
|
provider.removeListener('connect', this.onConnect.bind(this));
|
|
56
28
|
provider.on('accountsChanged', this.onAccountsChanged.bind(this));
|
|
57
29
|
provider.on('chainChanged', this.onChainChanged);
|
|
58
30
|
provider.on('disconnect', this.onDisconnect.bind(this));
|
|
59
|
-
// Backward compatibility with older wallet (<7.3) version that return accounts before authorization
|
|
60
|
-
if (!sdk.isExtensionActive() && !sdk._getConnection()?.isAuthorized()) {
|
|
61
|
-
function waitForAuthorized() {
|
|
62
|
-
return new Promise((resolve) => {
|
|
63
|
-
const connection = sdk._getConnection();
|
|
64
|
-
const connector = connection?.getConnector();
|
|
65
|
-
connector?.once(EventType.AUTHORIZED, () => resolve(true));
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
await waitForAuthorized();
|
|
69
|
-
}
|
|
70
31
|
// Switch to chain if provided
|
|
71
|
-
let currentChainId = await this.getChainId();
|
|
32
|
+
let currentChainId = (await this.getChainId());
|
|
72
33
|
if (chainId && currentChainId !== chainId) {
|
|
73
34
|
const chain = await this.switchChain({ chainId }).catch((error) => {
|
|
74
35
|
if (error.code === UserRejectedRequestError.code)
|
|
@@ -104,49 +65,52 @@ export function metaMask(parameters = {}) {
|
|
|
104
65
|
const accounts = (await provider.request({
|
|
105
66
|
method: 'eth_accounts',
|
|
106
67
|
}));
|
|
107
|
-
return accounts.map(getAddress);
|
|
68
|
+
return accounts.map((x) => getAddress(x));
|
|
108
69
|
},
|
|
109
70
|
async getChainId() {
|
|
110
71
|
const provider = await this.getProvider();
|
|
111
|
-
const chainId = provider.
|
|
112
|
-
|
|
72
|
+
const chainId = provider.getChainId() ||
|
|
73
|
+
(await provider?.request({ method: 'eth_chainId' }));
|
|
74
|
+
return Number(chainId);
|
|
113
75
|
},
|
|
114
76
|
async getProvider() {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const regex = /^SDK state invalid -- undefined( mobile)? provider$/;
|
|
142
|
-
if (!regex.test(error.message))
|
|
143
|
-
throw error;
|
|
144
|
-
}
|
|
77
|
+
async function initProvider() {
|
|
78
|
+
// Unwrapping import for Vite compatibility.
|
|
79
|
+
// See: https://github.com/vitejs/vite/issues/9703
|
|
80
|
+
const { default: MetaMaskSDK_ } = await import('@metamask/sdk');
|
|
81
|
+
const MetaMaskSDK = (() => {
|
|
82
|
+
if (typeof MetaMaskSDK_ !== 'function' &&
|
|
83
|
+
typeof MetaMaskSDK_.default === 'function')
|
|
84
|
+
return MetaMaskSDK_.default;
|
|
85
|
+
return MetaMaskSDK_;
|
|
86
|
+
})();
|
|
87
|
+
sdk = new MetaMaskSDK({
|
|
88
|
+
dappMetadata: {},
|
|
89
|
+
...parameters,
|
|
90
|
+
_source: 'wagmi',
|
|
91
|
+
readonlyRPCMap: Object.fromEntries(config.chains.map((chain) => [
|
|
92
|
+
chain.id,
|
|
93
|
+
chain.rpcUrls.default.http[0],
|
|
94
|
+
])),
|
|
95
|
+
});
|
|
96
|
+
await sdk.init();
|
|
97
|
+
return sdk.getProvider();
|
|
98
|
+
}
|
|
99
|
+
if (!provider) {
|
|
100
|
+
if (!providerPromise)
|
|
101
|
+
providerPromise = initProvider();
|
|
102
|
+
provider = await providerPromise;
|
|
145
103
|
}
|
|
146
|
-
return
|
|
104
|
+
return provider;
|
|
147
105
|
},
|
|
148
106
|
async isAuthorized() {
|
|
149
107
|
try {
|
|
108
|
+
const isMobileBrowser = typeof navigator !== 'undefined'
|
|
109
|
+
? /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
|
|
110
|
+
: false;
|
|
111
|
+
// MetaMask Mobile doesn't support persisted sessions.
|
|
112
|
+
if (isMobileBrowser)
|
|
113
|
+
return false;
|
|
150
114
|
const isDisconnected =
|
|
151
115
|
// If shim exists in storage, connector is disconnected
|
|
152
116
|
await config.storage?.getItem('metaMaskSDK.disconnected');
|
|
@@ -159,7 +123,7 @@ export function metaMask(parameters = {}) {
|
|
|
159
123
|
return false;
|
|
160
124
|
}
|
|
161
125
|
},
|
|
162
|
-
async switchChain({ chainId }) {
|
|
126
|
+
async switchChain({ addEthereumChainParameter, chainId }) {
|
|
163
127
|
const provider = await this.getProvider();
|
|
164
128
|
const chain = config.chains.find((x) => x.id === chainId);
|
|
165
129
|
if (!chain)
|
|
@@ -187,23 +151,31 @@ export function metaMask(parameters = {}) {
|
|
|
187
151
|
?.data?.originalError?.code === 4902) {
|
|
188
152
|
try {
|
|
189
153
|
const { default: blockExplorer, ...blockExplorers } = chain.blockExplorers ?? {};
|
|
190
|
-
let blockExplorerUrls
|
|
191
|
-
if (
|
|
154
|
+
let blockExplorerUrls;
|
|
155
|
+
if (addEthereumChainParameter?.blockExplorerUrls)
|
|
156
|
+
blockExplorerUrls = addEthereumChainParameter.blockExplorerUrls;
|
|
157
|
+
else if (blockExplorer)
|
|
192
158
|
blockExplorerUrls = [
|
|
193
159
|
blockExplorer.url,
|
|
194
160
|
...Object.values(blockExplorers).map((x) => x.url),
|
|
195
161
|
];
|
|
162
|
+
let rpcUrls;
|
|
163
|
+
if (addEthereumChainParameter?.rpcUrls?.length)
|
|
164
|
+
rpcUrls = addEthereumChainParameter.rpcUrls;
|
|
165
|
+
else
|
|
166
|
+
rpcUrls = [chain.rpcUrls.default?.http[0] ?? ''];
|
|
167
|
+
const addEthereumChain = {
|
|
168
|
+
blockExplorerUrls,
|
|
169
|
+
chainId: numberToHex(chainId),
|
|
170
|
+
chainName: addEthereumChainParameter?.chainName ?? chain.name,
|
|
171
|
+
iconUrls: addEthereumChainParameter?.iconUrls,
|
|
172
|
+
nativeCurrency: addEthereumChainParameter?.nativeCurrency ??
|
|
173
|
+
chain.nativeCurrency,
|
|
174
|
+
rpcUrls,
|
|
175
|
+
};
|
|
196
176
|
await provider.request({
|
|
197
177
|
method: 'wallet_addEthereumChain',
|
|
198
|
-
params: [
|
|
199
|
-
{
|
|
200
|
-
chainId: numberToHex(chainId),
|
|
201
|
-
chainName: chain.name,
|
|
202
|
-
nativeCurrency: chain.nativeCurrency,
|
|
203
|
-
rpcUrls: [chain.rpcUrls.default?.http[0] ?? ''],
|
|
204
|
-
blockExplorerUrls,
|
|
205
|
-
},
|
|
206
|
-
],
|
|
178
|
+
params: [addEthereumChain],
|
|
207
179
|
});
|
|
208
180
|
const currentChainId = await this.getChainId();
|
|
209
181
|
if (currentChainId !== chainId)
|
|
@@ -231,17 +203,19 @@ export function metaMask(parameters = {}) {
|
|
|
231
203
|
}
|
|
232
204
|
// Regular change event
|
|
233
205
|
else
|
|
234
|
-
config.emitter.emit('change', {
|
|
206
|
+
config.emitter.emit('change', {
|
|
207
|
+
accounts: accounts.map((x) => getAddress(x)),
|
|
208
|
+
});
|
|
235
209
|
},
|
|
236
210
|
onChainChanged(chain) {
|
|
237
|
-
const chainId =
|
|
211
|
+
const chainId = Number(chain);
|
|
238
212
|
config.emitter.emit('change', { chainId });
|
|
239
213
|
},
|
|
240
214
|
async onConnect(connectInfo) {
|
|
241
215
|
const accounts = await this.getAccounts();
|
|
242
216
|
if (accounts.length === 0)
|
|
243
217
|
return;
|
|
244
|
-
const chainId =
|
|
218
|
+
const chainId = Number(connectInfo.chainId);
|
|
245
219
|
config.emitter.emit('connect', { accounts, chainId });
|
|
246
220
|
const provider = await this.getProvider();
|
|
247
221
|
if (provider) {
|
|
@@ -259,6 +233,11 @@ export function metaMask(parameters = {}) {
|
|
|
259
233
|
if (provider && !!(await this.getAccounts()).length)
|
|
260
234
|
return;
|
|
261
235
|
}
|
|
236
|
+
// Remove cached SDK properties.
|
|
237
|
+
if (typeof localStorage !== 'undefined') {
|
|
238
|
+
localStorage.removeItem('MMSDK_cached_address');
|
|
239
|
+
localStorage.removeItem('MMSDK_cached_chainId');
|
|
240
|
+
}
|
|
262
241
|
// No need to remove 'metaMaskSDK.disconnected' from storage because `onDisconnect` is typically
|
|
263
242
|
// only called when the wallet is disconnected through the wallet's interface, meaning the wallet
|
|
264
243
|
// actually disconnected and we don't need to simulate it.
|
package/dist/esm/metaMask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metaMask.js","sourceRoot":"","sources":["../../src/metaMask.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metaMask.js","sourceRoot":"","sources":["../../src/metaMask.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/safe.js
CHANGED
|
@@ -1,18 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { default as SafeAppsSDK } from '@safe-global/safe-apps-sdk';
|
|
3
|
-
import { ProviderNotFoundError, createConnector, normalizeChainId, } from '@wagmi/core';
|
|
1
|
+
import { ProviderNotFoundError, createConnector, } from '@wagmi/core';
|
|
4
2
|
import { getAddress } from 'viem';
|
|
5
3
|
safe.type = 'safe';
|
|
6
4
|
export function safe(parameters = {}) {
|
|
7
5
|
const { shimDisconnect = false } = parameters;
|
|
8
6
|
let provider_;
|
|
9
|
-
let
|
|
10
|
-
if (typeof SafeAppsSDK !== 'function' &&
|
|
11
|
-
typeof SafeAppsSDK.default === 'function')
|
|
12
|
-
SDK = SafeAppsSDK.default;
|
|
13
|
-
else
|
|
14
|
-
SDK = SafeAppsSDK;
|
|
15
|
-
const sdk = new SDK(parameters);
|
|
7
|
+
let disconnect;
|
|
16
8
|
return createConnector((config) => ({
|
|
17
9
|
id: 'safe',
|
|
18
10
|
name: 'Safe',
|
|
@@ -23,7 +15,10 @@ export function safe(parameters = {}) {
|
|
|
23
15
|
throw new ProviderNotFoundError();
|
|
24
16
|
const accounts = await this.getAccounts();
|
|
25
17
|
const chainId = await this.getChainId();
|
|
26
|
-
|
|
18
|
+
if (!disconnect) {
|
|
19
|
+
disconnect = this.onDisconnect.bind(this);
|
|
20
|
+
provider.on('disconnect', disconnect);
|
|
21
|
+
}
|
|
27
22
|
// Remove disconnected shim if it exists
|
|
28
23
|
if (shimDisconnect)
|
|
29
24
|
await config.storage?.removeItem('safe.disconnected');
|
|
@@ -33,7 +28,10 @@ export function safe(parameters = {}) {
|
|
|
33
28
|
const provider = await this.getProvider();
|
|
34
29
|
if (!provider)
|
|
35
30
|
throw new ProviderNotFoundError();
|
|
36
|
-
|
|
31
|
+
if (disconnect) {
|
|
32
|
+
provider.removeListener('disconnect', disconnect);
|
|
33
|
+
disconnect = undefined;
|
|
34
|
+
}
|
|
37
35
|
// Add shim signalling connector is disconnected
|
|
38
36
|
if (shimDisconnect)
|
|
39
37
|
await config.storage?.setItem('safe.disconnected', true);
|
|
@@ -50,9 +48,18 @@ export function safe(parameters = {}) {
|
|
|
50
48
|
if (!isIframe)
|
|
51
49
|
return;
|
|
52
50
|
if (!provider_) {
|
|
51
|
+
const { default: SafeAppsSDK } = await import('@safe-global/safe-apps-sdk');
|
|
52
|
+
let SDK;
|
|
53
|
+
if (typeof SafeAppsSDK !== 'function' &&
|
|
54
|
+
typeof SafeAppsSDK.default === 'function')
|
|
55
|
+
SDK = SafeAppsSDK.default;
|
|
56
|
+
else
|
|
57
|
+
SDK = SafeAppsSDK;
|
|
58
|
+
const sdk = new SDK(parameters);
|
|
53
59
|
const safe = await sdk.safe.getInfo();
|
|
54
60
|
if (!safe)
|
|
55
61
|
throw new Error('Could not load Safe information');
|
|
62
|
+
const { SafeAppProvider } = await import('@safe-global/safe-apps-provider');
|
|
56
63
|
provider_ = new SafeAppProvider(safe, sdk);
|
|
57
64
|
}
|
|
58
65
|
return provider_;
|
|
@@ -61,7 +68,7 @@ export function safe(parameters = {}) {
|
|
|
61
68
|
const provider = await this.getProvider();
|
|
62
69
|
if (!provider)
|
|
63
70
|
throw new ProviderNotFoundError();
|
|
64
|
-
return
|
|
71
|
+
return Number(provider.chainId);
|
|
65
72
|
},
|
|
66
73
|
async isAuthorized() {
|
|
67
74
|
try {
|
package/dist/esm/safe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe.js","sourceRoot":"","sources":["../../src/safe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"safe.js","sourceRoot":"","sources":["../../src/safe.ts"],"names":[],"mappings":"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"}
|