@wagmi/connectors 3.1.1 → 4.0.0-alpha.0

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 (73) hide show
  1. package/dist/esm/coinbaseWallet.js +141 -0
  2. package/dist/esm/coinbaseWallet.js.map +1 -0
  3. package/dist/esm/index.js +7 -0
  4. package/dist/esm/index.js.map +1 -0
  5. package/dist/esm/index.test-d.js +4 -0
  6. package/dist/esm/index.test-d.js.map +1 -0
  7. package/dist/esm/injected.js +372 -0
  8. package/dist/esm/injected.js.map +1 -0
  9. package/dist/esm/ledger.js +162 -0
  10. package/dist/esm/ledger.js.map +1 -0
  11. package/dist/esm/safe.js +88 -0
  12. package/dist/esm/safe.js.map +1 -0
  13. package/dist/esm/tsconfig.build.tsbuildinfo +1 -0
  14. package/dist/esm/version.js +2 -0
  15. package/dist/esm/version.js.map +1 -0
  16. package/dist/esm/walletConnect.js +280 -0
  17. package/dist/esm/walletConnect.js.map +1 -0
  18. package/dist/types/coinbaseWallet.d.ts +21 -0
  19. package/dist/types/coinbaseWallet.d.ts.map +1 -0
  20. package/dist/types/index.d.ts +7 -0
  21. package/dist/types/index.d.ts.map +1 -0
  22. package/dist/types/index.test-d.d.ts +2 -0
  23. package/dist/types/index.test-d.d.ts.map +1 -0
  24. package/dist/types/injected.d.ts +382 -0
  25. package/dist/types/injected.d.ts.map +1 -0
  26. package/dist/types/ledger.d.ts +18 -0
  27. package/dist/types/ledger.d.ts.map +1 -0
  28. package/dist/types/safe.d.ts +18 -0
  29. package/dist/types/safe.d.ts.map +1 -0
  30. package/dist/types/version.d.ts +2 -0
  31. package/dist/types/version.d.ts.map +1 -0
  32. package/dist/types/walletConnect.d.ts +63 -0
  33. package/dist/types/walletConnect.d.ts.map +1 -0
  34. package/package.json +44 -83
  35. package/src/coinbaseWallet.ts +207 -0
  36. package/src/index.ts +17 -0
  37. package/src/injected.ts +535 -0
  38. package/src/ledger.ts +210 -0
  39. package/src/safe.ts +114 -0
  40. package/src/version.ts +1 -0
  41. package/src/walletConnect.ts +394 -0
  42. package/README.md +0 -46
  43. package/coinbaseWallet/package.json +0 -4
  44. package/dist/base-70e3a8a9.d.ts +0 -142
  45. package/dist/chunk-2UFLHRLT.js +0 -391
  46. package/dist/chunk-OQILYQDO.js +0 -15
  47. package/dist/chunk-UGBGYVBH.js +0 -22
  48. package/dist/chunk-W65LBPLT.js +0 -58
  49. package/dist/coinbaseWallet.d.ts +0 -62
  50. package/dist/coinbaseWallet.js +0 -216
  51. package/dist/index.d.ts +0 -20
  52. package/dist/index.js +0 -16
  53. package/dist/injected.d.ts +0 -64
  54. package/dist/injected.js +0 -9
  55. package/dist/ledger.d.ts +0 -69
  56. package/dist/ledger.js +0 -261
  57. package/dist/metaMask.d.ts +0 -33
  58. package/dist/metaMask.js +0 -144
  59. package/dist/mock/index.d.ts +0 -80
  60. package/dist/mock/index.js +0 -200
  61. package/dist/safe.d.ts +0 -53
  62. package/dist/safe.js +0 -129
  63. package/dist/walletConnect.d.ts +0 -109
  64. package/dist/walletConnect.js +0 -325
  65. package/dist/walletConnectLegacy.d.ts +0 -38
  66. package/dist/walletConnectLegacy.js +0 -179
  67. package/injected/package.json +0 -4
  68. package/ledger/package.json +0 -4
  69. package/metaMask/package.json +0 -4
  70. package/mock/package.json +0 -4
  71. package/safe/package.json +0 -4
  72. package/walletConnect/package.json +0 -4
  73. 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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"}
@@ -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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"}