@wagmi/connectors 3.1.1 → 4.0.0-alpha.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.
- package/README.md +6 -39
- package/dist/esm/coinbaseWallet.js +141 -0
- package/dist/esm/coinbaseWallet.js.map +1 -0
- 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 +4 -0
- package/dist/esm/exports/index.test-d.js.map +1 -0
- package/dist/esm/injected.js +372 -0
- package/dist/esm/injected.js.map +1 -0
- package/dist/esm/ledger.js +162 -0
- package/dist/esm/ledger.js.map +1 -0
- package/dist/esm/safe.js +88 -0
- package/dist/esm/safe.js.map +1 -0
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -0
- package/dist/esm/version.js +2 -0
- package/dist/esm/version.js.map +1 -0
- package/dist/esm/walletConnect.js +280 -0
- package/dist/esm/walletConnect.js.map +1 -0
- package/dist/types/coinbaseWallet.d.ts +21 -0
- package/dist/types/coinbaseWallet.d.ts.map +1 -0
- 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 +2 -0
- package/dist/types/exports/index.test-d.d.ts.map +1 -0
- package/dist/types/injected.d.ts +382 -0
- package/dist/types/injected.d.ts.map +1 -0
- package/dist/types/ledger.d.ts +18 -0
- package/dist/types/ledger.d.ts.map +1 -0
- package/dist/types/safe.d.ts +18 -0
- package/dist/types/safe.d.ts.map +1 -0
- package/dist/types/version.d.ts +2 -0
- package/dist/types/version.d.ts.map +1 -0
- package/dist/types/walletConnect.d.ts +63 -0
- package/dist/types/walletConnect.d.ts.map +1 -0
- package/package.json +43 -82
- package/src/coinbaseWallet.ts +207 -0
- package/src/exports/index.ts +17 -0
- package/src/injected.ts +535 -0
- package/src/ledger.ts +210 -0
- package/src/safe.ts +114 -0
- package/src/version.ts +1 -0
- package/src/walletConnect.ts +394 -0
- package/coinbaseWallet/package.json +0 -4
- package/dist/base-70e3a8a9.d.ts +0 -142
- package/dist/chunk-2UFLHRLT.js +0 -391
- package/dist/chunk-OQILYQDO.js +0 -15
- package/dist/chunk-UGBGYVBH.js +0 -22
- package/dist/chunk-W65LBPLT.js +0 -58
- package/dist/coinbaseWallet.d.ts +0 -62
- package/dist/coinbaseWallet.js +0 -216
- package/dist/index.d.ts +0 -20
- package/dist/index.js +0 -16
- package/dist/injected.d.ts +0 -64
- package/dist/injected.js +0 -9
- package/dist/ledger.d.ts +0 -69
- package/dist/ledger.js +0 -261
- package/dist/metaMask.d.ts +0 -33
- package/dist/metaMask.js +0 -144
- package/dist/mock/index.d.ts +0 -80
- package/dist/mock/index.js +0 -200
- package/dist/safe.d.ts +0 -53
- package/dist/safe.js +0 -129
- package/dist/walletConnect.d.ts +0 -109
- package/dist/walletConnect.js +0 -325
- package/dist/walletConnectLegacy.d.ts +0 -38
- package/dist/walletConnectLegacy.js +0 -179
- package/injected/package.json +0 -4
- package/ledger/package.json +0 -4
- package/metaMask/package.json +0 -4
- package/mock/package.json +0 -4
- package/safe/package.json +0 -4
- package/walletConnect/package.json +0 -4
- package/walletConnectLegacy/package.json +0 -4
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { SupportedProviders, loadConnectKit, } from '@ledgerhq/connect-kit-loader';
|
|
2
|
+
import { ChainNotConfiguredError, createConnector, normalizeChainId, } from '@wagmi/core';
|
|
3
|
+
import { SwitchChainError, UserRejectedRequestError, getAddress, numberToHex, } from 'viem';
|
|
4
|
+
export function ledger(parameters = {}) {
|
|
5
|
+
let provider_;
|
|
6
|
+
let providerPromise;
|
|
7
|
+
return createConnector((config) => ({
|
|
8
|
+
id: 'ledger',
|
|
9
|
+
name: 'Ledger',
|
|
10
|
+
async setup() {
|
|
11
|
+
const provider = await this.getProvider();
|
|
12
|
+
if (!provider)
|
|
13
|
+
return;
|
|
14
|
+
provider.on('connect', this.onConnect.bind(this));
|
|
15
|
+
provider.on('session_delete', this.onSessionDelete.bind(this));
|
|
16
|
+
},
|
|
17
|
+
async connect({ chainId } = {}) {
|
|
18
|
+
try {
|
|
19
|
+
const provider = await this.getProvider();
|
|
20
|
+
// TODO: Update this logic to be more stable (a la WalletConnect connector)
|
|
21
|
+
// Don't request accounts if we have a session, like when reloading with
|
|
22
|
+
// an active WC v2 session
|
|
23
|
+
if (!provider.session)
|
|
24
|
+
await provider.request({ method: 'eth_requestAccounts' });
|
|
25
|
+
const accounts = await this.getAccounts();
|
|
26
|
+
provider.removeListener('connect', this.onConnect.bind(this));
|
|
27
|
+
provider.on('accountsChanged', this.onAccountsChanged.bind(this));
|
|
28
|
+
provider.on('chainChanged', this.onChainChanged);
|
|
29
|
+
provider.on('disconnect', this.onDisconnect.bind(this));
|
|
30
|
+
provider.on('session_delete', this.onSessionDelete.bind(this));
|
|
31
|
+
// Switch to chain if provided
|
|
32
|
+
let currentChainId = await this.getChainId();
|
|
33
|
+
if (chainId && currentChainId !== chainId) {
|
|
34
|
+
const chain = await this.switchChain({ chainId }).catch(() => ({
|
|
35
|
+
id: currentChainId,
|
|
36
|
+
}));
|
|
37
|
+
currentChainId = chain?.id ?? currentChainId;
|
|
38
|
+
}
|
|
39
|
+
return { accounts, chainId: currentChainId };
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
if (/user rejected/i.test(error?.message))
|
|
43
|
+
throw new UserRejectedRequestError(error);
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
async disconnect() {
|
|
48
|
+
const provider = await this.getProvider();
|
|
49
|
+
try {
|
|
50
|
+
await provider?.disconnect?.().catch(() => { });
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
if (!/No matching key/i.test(error.message))
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
provider.removeListener('accountsChanged', this.onAccountsChanged.bind(this));
|
|
58
|
+
provider.removeListener('chainChanged', this.onChainChanged);
|
|
59
|
+
provider.removeListener('disconnect', this.onDisconnect.bind(this));
|
|
60
|
+
provider.removeListener('session_delete', this.onSessionDelete.bind(this));
|
|
61
|
+
provider.on('connect', this.onConnect.bind(this));
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
async getAccounts() {
|
|
65
|
+
const provider = await this.getProvider();
|
|
66
|
+
return (await provider.request({ method: 'eth_accounts' })).map(getAddress);
|
|
67
|
+
},
|
|
68
|
+
async getProvider({ chainId } = {}) {
|
|
69
|
+
async function initProvider() {
|
|
70
|
+
const connectKit = await loadConnectKit();
|
|
71
|
+
if (parameters.enableDebugLogs)
|
|
72
|
+
connectKit.enableDebugLogs();
|
|
73
|
+
const { optionalEvents, optionalMethods, projectId, requiredChains, requiredEvents, requiredMethods, } = parameters;
|
|
74
|
+
connectKit.checkSupport({
|
|
75
|
+
chains: requiredChains,
|
|
76
|
+
events: requiredEvents,
|
|
77
|
+
methods: requiredMethods,
|
|
78
|
+
optionalChains: config.chains.map(({ id }) => id),
|
|
79
|
+
optionalEvents,
|
|
80
|
+
optionalMethods,
|
|
81
|
+
projectId,
|
|
82
|
+
providerType: SupportedProviders.Ethereum,
|
|
83
|
+
rpcMap: Object.fromEntries(config.chains.map((chain) => [
|
|
84
|
+
chain.id,
|
|
85
|
+
chain.rpcUrls.default.http[0],
|
|
86
|
+
])),
|
|
87
|
+
walletConnectVersion: 2,
|
|
88
|
+
});
|
|
89
|
+
return (await connectKit.getProvider());
|
|
90
|
+
}
|
|
91
|
+
if (!provider_) {
|
|
92
|
+
if (!providerPromise)
|
|
93
|
+
providerPromise = initProvider();
|
|
94
|
+
provider_ = await providerPromise;
|
|
95
|
+
}
|
|
96
|
+
if (chainId)
|
|
97
|
+
await this.switchChain({ chainId });
|
|
98
|
+
return provider_;
|
|
99
|
+
},
|
|
100
|
+
async getChainId() {
|
|
101
|
+
const provider = await this.getProvider();
|
|
102
|
+
const chainId = await provider.request({ method: 'eth_chainId' });
|
|
103
|
+
return normalizeChainId(chainId);
|
|
104
|
+
},
|
|
105
|
+
async isAuthorized() {
|
|
106
|
+
try {
|
|
107
|
+
const accounts = await this.getAccounts();
|
|
108
|
+
return !!accounts.length;
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
async switchChain({ chainId }) {
|
|
115
|
+
const chain = config.chains.find((chain) => chain.id === chainId);
|
|
116
|
+
if (!chain)
|
|
117
|
+
throw new SwitchChainError(new ChainNotConfiguredError());
|
|
118
|
+
try {
|
|
119
|
+
const provider = await this.getProvider();
|
|
120
|
+
await provider.request({
|
|
121
|
+
method: 'wallet_switchEthereumChain',
|
|
122
|
+
params: [{ chainId: numberToHex(chainId) }],
|
|
123
|
+
});
|
|
124
|
+
return chain;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
const message = typeof error === 'string'
|
|
128
|
+
? error
|
|
129
|
+
: error?.message;
|
|
130
|
+
if (/user rejected request/i.test(message))
|
|
131
|
+
throw new UserRejectedRequestError(error);
|
|
132
|
+
throw new SwitchChainError(error);
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
onAccountsChanged(accounts) {
|
|
136
|
+
if (accounts.length === 0)
|
|
137
|
+
config.emitter.emit('disconnect');
|
|
138
|
+
else
|
|
139
|
+
config.emitter.emit('change', { accounts: accounts.map(getAddress) });
|
|
140
|
+
},
|
|
141
|
+
onChainChanged(chain) {
|
|
142
|
+
const chainId = normalizeChainId(chain);
|
|
143
|
+
config.emitter.emit('change', { chainId });
|
|
144
|
+
},
|
|
145
|
+
async onConnect(connectInfo) {
|
|
146
|
+
const chainId = normalizeChainId(connectInfo.chainId);
|
|
147
|
+
const accounts = await this.getAccounts();
|
|
148
|
+
config.emitter.emit('connect', { accounts, chainId });
|
|
149
|
+
},
|
|
150
|
+
async onDisconnect(_error) {
|
|
151
|
+
config.emitter.emit('disconnect');
|
|
152
|
+
const provider = await this.getProvider();
|
|
153
|
+
provider.removeListener('accountsChanged', this.onAccountsChanged);
|
|
154
|
+
provider.removeListener('chainChanged', this.onChainChanged);
|
|
155
|
+
provider.removeListener('disconnect', this.onDisconnect.bind(this));
|
|
156
|
+
},
|
|
157
|
+
onSessionDelete() {
|
|
158
|
+
this.onDisconnect();
|
|
159
|
+
},
|
|
160
|
+
}));
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=ledger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/ledger.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/safe.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { SafeAppProvider } from '@safe-global/safe-apps-provider';
|
|
2
|
+
import { default as SafeAppsSDK } from '@safe-global/safe-apps-sdk';
|
|
3
|
+
import { ProviderNotFoundError } from '@wagmi/core';
|
|
4
|
+
import { createConnector, normalizeChainId } from '@wagmi/core';
|
|
5
|
+
import { getAddress } from 'viem';
|
|
6
|
+
export function safe(parameters = {}) {
|
|
7
|
+
const shimDisconnectStorageKey = 'safe.shimDisconnect';
|
|
8
|
+
let provider_;
|
|
9
|
+
let SDK;
|
|
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);
|
|
16
|
+
return createConnector((config) => ({
|
|
17
|
+
id: 'safe',
|
|
18
|
+
name: 'Safe',
|
|
19
|
+
async connect() {
|
|
20
|
+
// Only allowed in iframe context
|
|
21
|
+
const isIframe = typeof window !== 'undefined' && window?.parent !== window;
|
|
22
|
+
if (!isIframe)
|
|
23
|
+
throw new ProviderNotFoundError();
|
|
24
|
+
const provider = await this.getProvider();
|
|
25
|
+
if (!provider)
|
|
26
|
+
throw new ProviderNotFoundError();
|
|
27
|
+
const accounts = await this.getAccounts();
|
|
28
|
+
const chainId = await this.getChainId();
|
|
29
|
+
provider.on('disconnect', this.onDisconnect.bind(this));
|
|
30
|
+
// Add shim to storage signalling wallet is connected
|
|
31
|
+
if (parameters.shimDisconnect)
|
|
32
|
+
await config.storage?.setItem(shimDisconnectStorageKey, true);
|
|
33
|
+
return { accounts, chainId };
|
|
34
|
+
},
|
|
35
|
+
async disconnect() {
|
|
36
|
+
const provider = await this.getProvider();
|
|
37
|
+
provider.removeListener('disconnect', this.onDisconnect.bind(this));
|
|
38
|
+
// Remove shim signalling wallet is disconnected
|
|
39
|
+
if (parameters.shimDisconnect)
|
|
40
|
+
await config.storage?.removeItem(shimDisconnectStorageKey);
|
|
41
|
+
},
|
|
42
|
+
async getAccounts() {
|
|
43
|
+
const provider = await this.getProvider();
|
|
44
|
+
if (!provider)
|
|
45
|
+
throw new ProviderNotFoundError();
|
|
46
|
+
return (await provider.request({ method: 'eth_accounts' })).map(getAddress);
|
|
47
|
+
},
|
|
48
|
+
async getProvider() {
|
|
49
|
+
if (!provider_) {
|
|
50
|
+
const safe = await sdk.safe.getInfo();
|
|
51
|
+
if (!safe)
|
|
52
|
+
throw new Error('Could not load Safe information');
|
|
53
|
+
provider_ = new SafeAppProvider(safe, sdk);
|
|
54
|
+
}
|
|
55
|
+
return provider_;
|
|
56
|
+
},
|
|
57
|
+
async getChainId() {
|
|
58
|
+
const provider = await this.getProvider();
|
|
59
|
+
if (!provider)
|
|
60
|
+
throw new ProviderNotFoundError();
|
|
61
|
+
return normalizeChainId(provider.chainId);
|
|
62
|
+
},
|
|
63
|
+
async isAuthorized() {
|
|
64
|
+
try {
|
|
65
|
+
const isDisconnected = parameters.shimDisconnect &&
|
|
66
|
+
// If shim does not exist in storage, wallet is disconnected
|
|
67
|
+
!(await config.storage?.getItem(shimDisconnectStorageKey));
|
|
68
|
+
if (isDisconnected)
|
|
69
|
+
return false;
|
|
70
|
+
const accounts = await this.getAccounts();
|
|
71
|
+
return !!accounts.length;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
onAccountsChanged() {
|
|
78
|
+
// Not relevant for Safe because changing account requires app reload.
|
|
79
|
+
},
|
|
80
|
+
onChainChanged() {
|
|
81
|
+
// Not relevant for Safe because Safe smart contract wallets only exist on single chain.
|
|
82
|
+
},
|
|
83
|
+
onDisconnect() {
|
|
84
|
+
config.emitter.emit('disconnect');
|
|
85
|
+
},
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=safe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe.js","sourceRoot":"","sources":["../../src/safe.ts"],"names":[],"mappings":"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"}
|