@dynamic-labs/ethereum 4.9.1 → 4.9.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.
Files changed (28) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +11 -11
  5. package/src/EthereumWalletConnectors.cjs +3 -1
  6. package/src/EthereumWalletConnectors.js +3 -1
  7. package/src/injected/InjectedWalletBase.cjs +8 -2
  8. package/src/injected/InjectedWalletBase.js +8 -2
  9. package/src/metaMask/MetaMaskConnector.cjs +3 -0
  10. package/src/metaMask/MetaMaskConnector.d.ts +1 -0
  11. package/src/metaMask/MetaMaskConnector.js +3 -0
  12. package/src/metaMask/utils/createMetaMaskSDKDisplayUriState.cjs +1 -0
  13. package/src/metaMask/utils/createMetaMaskSDKDisplayUriState.d.ts +1 -0
  14. package/src/metaMask/utils/createMetaMaskSDKDisplayUriState.js +1 -0
  15. package/src/walletConnect/WalletConnectConnector/WalletConnectConnector.cjs +292 -0
  16. package/src/walletConnect/{walletConnect.d.ts → WalletConnectConnector/WalletConnectConnector.d.ts} +14 -53
  17. package/src/walletConnect/WalletConnectConnector/WalletConnectConnector.js +288 -0
  18. package/src/walletConnect/WalletConnectConnector/index.d.ts +1 -0
  19. package/src/walletConnect/WalletConnectProvider/WalletConnectProvider.cjs +212 -0
  20. package/src/walletConnect/WalletConnectProvider/WalletConnectProvider.d.ts +10 -1
  21. package/src/walletConnect/WalletConnectProvider/WalletConnectProvider.js +204 -0
  22. package/src/walletConnect/index.d.ts +1 -1
  23. package/src/walletConnect/utils/fetchWalletConnectWallets.cjs +2 -2
  24. package/src/walletConnect/utils/fetchWalletConnectWallets.js +2 -2
  25. package/src/walletConnect/utils/getWalletConnectConnector.cjs +2 -2
  26. package/src/walletConnect/utils/getWalletConnectConnector.js +2 -2
  27. package/src/walletConnect/walletConnect.cjs +0 -504
  28. package/src/walletConnect/walletConnect.js +0 -495
@@ -0,0 +1,204 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../_virtual/_tslib.js';
3
+ import EthereumProvider from '@walletconnect/ethereum-provider';
4
+ import { performPlatformSpecificConnectionMethod } from '@dynamic-labs/wallet-connector-core';
5
+ import { parseIntSafe, DynamicError } from '@dynamic-labs/utils';
6
+ import { logger } from '../../utils/logger.js';
7
+
8
+ var _a;
9
+ class WalletConnectProvider {
10
+ constructor() {
11
+ throw new Error('WalletConnectProvider is not instantiable');
12
+ }
13
+ static getMappedChainsByPreferredOrder() {
14
+ const allChains = _a.enabledNetworks.map((network) => `eip155:${network.chainId}`);
15
+ const reorderedChains = _a.preferredChains.filter((chain) => allChains.includes(chain));
16
+ const remainingChains = allChains.filter((chain) => !_a.preferredChains.includes(chain));
17
+ return [...reorderedChains, ...remainingChains].map((chain) => Number(chain.split(':')[1]));
18
+ }
19
+ }
20
+ _a = WalletConnectProvider;
21
+ WalletConnectProvider.isInitializing = false;
22
+ WalletConnectProvider.isInitialized = false;
23
+ WalletConnectProvider.enabledNetworks = [];
24
+ WalletConnectProvider.preferredChains = [];
25
+ WalletConnectProvider.evmNetworkRpcMap = {};
26
+ WalletConnectProvider.eventListenersSetup = false;
27
+ WalletConnectProvider.accountChangedHandler = () => { };
28
+ WalletConnectProvider.chainChangedHandler = () => { };
29
+ WalletConnectProvider.disconnectHandler = () => { };
30
+ /**
31
+ * Initializes the provider. This method should only be called once.
32
+ * Does not start a connection.
33
+ */
34
+ WalletConnectProvider.init = (...args_1) => __awaiter(void 0, [...args_1], void 0, function* ({ storePrefix = 'dynamic-wc2', } = {}) {
35
+ logger.debug('[WalletConnectProvider] init', {
36
+ isInitialized: _a.isInitialized,
37
+ isInitializing: _a.isInitializing,
38
+ });
39
+ if (_a.isInitializing ||
40
+ _a.isInitialized) {
41
+ return;
42
+ }
43
+ _a.isInitializing = true;
44
+ logger.debug('[WalletConnectProvider] initializing');
45
+ _a.providerInitPromise = EthereumProvider.init({
46
+ customStoragePrefix: storePrefix,
47
+ disableProviderPing: true,
48
+ optionalChains: _a.getMappedChainsByPreferredOrder(),
49
+ optionalEvents: ['chainChanged', 'accountsChanged'],
50
+ optionalMethods: [
51
+ 'eth_chainId',
52
+ 'eth_signTypedData',
53
+ 'eth_signTransaction',
54
+ 'eth_sign',
55
+ 'personal_sign',
56
+ 'eth_sendTransaction',
57
+ 'eth_signTypedData_v4',
58
+ 'wallet_switchEthereumChain',
59
+ 'wallet_addEthereumChain',
60
+ ],
61
+ projectId: _a.projectId,
62
+ rpcMap: _a.evmNetworkRpcMap,
63
+ showQrModal: false,
64
+ });
65
+ _a.provider =
66
+ yield _a.providerInitPromise;
67
+ _a.isInitialized = true;
68
+ _a.isInitializing = false;
69
+ logger.debug('[WalletConnectProvider] initialized');
70
+ });
71
+ /**
72
+ * Connects to a wallet. This method should be called whenever a new wallet connection is needed.
73
+ * If the wallet is already connected when the page is refreshed, this method does not need to be called.
74
+ */
75
+ WalletConnectProvider.connect = (_b) => __awaiter(void 0, [_b], void 0, function* ({ deepLinks, deepLinkPreference, connectionOpts, }) {
76
+ const handleDisplayURI = (uri) => {
77
+ var _b;
78
+ logger.debug('[WalletConnectProvider] handleDisplayURI', uri);
79
+ _a.connectionUri = uri;
80
+ performPlatformSpecificConnectionMethod(_a.connectionUri, deepLinks, {
81
+ onDesktopUri: connectionOpts === null || connectionOpts === void 0 ? void 0 : connectionOpts.onDesktopUri,
82
+ onDisplayUri: connectionOpts === null || connectionOpts === void 0 ? void 0 : connectionOpts.onDisplayUri,
83
+ }, deepLinkPreference);
84
+ logger.debug('[WalletConnectProvider] removing display_uri event listener');
85
+ (_b = _a.provider) === null || _b === void 0 ? void 0 : _b.off('display_uri', handleDisplayURI);
86
+ };
87
+ if (!_a.provider) {
88
+ logger.error('[WalletConnectProvider] connect - provider is not initialized');
89
+ throw new DynamicError('WalletConnectProvider is not initialized');
90
+ }
91
+ // this is in case the user just cancels the deeplink prompt (i.e. in mobile/Safari)
92
+ // in this case, the connection is not rejected, so the "enable" promise is just pending
93
+ // so on retry, we should just use the same uri to handle that promise
94
+ if (_a.connectionUri) {
95
+ handleDisplayURI(_a.connectionUri);
96
+ return;
97
+ }
98
+ logger.debug('[WalletConnectProvider] adding display_uri event listener');
99
+ _a.provider.on('display_uri', handleDisplayURI);
100
+ try {
101
+ // enable = connect to the provider
102
+ const result = yield _a.provider.enable();
103
+ logger.debug('[WalletConnectProvider] connected to WalletConnect', result);
104
+ return result;
105
+ }
106
+ catch (error) {
107
+ logger.error('[WalletConnectProvider] Failed to connect to WalletConnect', error);
108
+ const customError = new DynamicError('Connection rejected. Please try again.');
109
+ customError.code = 'connection_rejected';
110
+ throw customError;
111
+ }
112
+ finally {
113
+ // Reset the connection URI after it's been consumed
114
+ _a.connectionUri = undefined;
115
+ }
116
+ });
117
+ /**
118
+ * Disconnects from a wallet. This method should be called whenever we need to disconnect from a wallet.
119
+ * It will kill the connection, but not the provider.
120
+ */
121
+ WalletConnectProvider.disconnect = () => __awaiter(void 0, void 0, void 0, function* () {
122
+ if (!_a.provider) {
123
+ logger.debug('[WalletConnectProvider] disconnect - provider is not initialized');
124
+ return;
125
+ }
126
+ _a.connectionUri = undefined;
127
+ logger.debug('[WalletConnectProvider] disconnecting from WalletConnect');
128
+ try {
129
+ yield _a.provider.disconnect();
130
+ }
131
+ catch (error) {
132
+ logger.error('[WalletConnectProvider] Failed to disconnect from WalletConnect', error);
133
+ }
134
+ });
135
+ /**
136
+ * Waits for the provider to be initialized and returns the EthereumProvider instance.
137
+ * We should use this wherever possible (async methods), to ensure the provider is initialized.
138
+ */
139
+ WalletConnectProvider.awaitAndGetProvider = () => __awaiter(void 0, void 0, void 0, function* () { return _a.providerInitPromise; });
140
+ /**
141
+ * Returns the EthereumProvider instance.
142
+ * Used when we need to access the provider synchronously.
143
+ */
144
+ WalletConnectProvider.getProvider = () => _a.provider;
145
+ WalletConnectProvider.getConnectionUri = () => _a.connectionUri;
146
+ WalletConnectProvider.handleChainChangedEvent = (chain, onChainChanged) => {
147
+ logger.debug('[WalletConnectProvider] handling chain change event', {
148
+ chain,
149
+ });
150
+ const chainId = parseIntSafe(chain);
151
+ if (!chainId) {
152
+ return;
153
+ }
154
+ onChainChanged === null || onChainChanged === void 0 ? void 0 : onChainChanged(chainId);
155
+ };
156
+ WalletConnectProvider.handleAccountChangedEvent = (accounts, onAccountChanged) => {
157
+ logger.debug('[WalletConnectProvider] handling account change event', {
158
+ accounts,
159
+ });
160
+ const [account] = accounts;
161
+ const address = account.includes(':') ? account.split(':').pop() : account;
162
+ if (!address) {
163
+ return;
164
+ }
165
+ onAccountChanged === null || onAccountChanged === void 0 ? void 0 : onAccountChanged(address);
166
+ };
167
+ /**
168
+ * Sets up event listeners for the provider.
169
+ */
170
+ WalletConnectProvider.setupEventListeners = ({ onChainChanged, onAccountChanged, onDisconnect, }) => {
171
+ if (!_a.provider ||
172
+ _a.eventListenersSetup) {
173
+ return;
174
+ }
175
+ _a.chainChangedHandler = (chainId) => {
176
+ _a.handleChainChangedEvent(chainId, onChainChanged);
177
+ };
178
+ _a.accountChangedHandler = (account) => {
179
+ _a.handleAccountChangedEvent(account, onAccountChanged);
180
+ };
181
+ _a.disconnectHandler = () => {
182
+ logger.debug('[WalletConnectProvider] handling disconnect event');
183
+ onDisconnect === null || onDisconnect === void 0 ? void 0 : onDisconnect();
184
+ };
185
+ _a.provider.on('accountsChanged', _a.accountChangedHandler);
186
+ _a.provider.on('chainChanged', _a.chainChangedHandler);
187
+ _a.provider.on('disconnect', _a.disconnectHandler);
188
+ _a.eventListenersSetup = true;
189
+ };
190
+ /**
191
+ * Tears down event listeners for the provider.
192
+ */
193
+ WalletConnectProvider.teardownEventListeners = () => {
194
+ if (!_a.provider ||
195
+ !_a.eventListenersSetup) {
196
+ return;
197
+ }
198
+ _a.provider.off('accountsChanged', _a.accountChangedHandler);
199
+ _a.provider.off('chainChanged', _a.chainChangedHandler);
200
+ _a.provider.off('disconnect', _a.disconnectHandler);
201
+ _a.eventListenersSetup = false;
202
+ };
203
+
204
+ export { WalletConnectProvider };
@@ -1,2 +1,2 @@
1
- export { WalletConnect } from './walletConnect';
1
+ export { WalletConnectConnector } from './WalletConnectConnector';
2
2
  export { fetchWalletConnectWallets, getWalletConnectConnector } from './utils';
@@ -3,7 +3,7 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var walletConnect = require('../walletConnect.cjs');
6
+ var WalletConnectConnector = require('../WalletConnectConnector/WalletConnectConnector.cjs');
7
7
 
8
8
  const fetchWalletConnectWallets = ({ walletBook, }) => {
9
9
  var _a;
@@ -12,7 +12,7 @@ const fetchWalletConnectWallets = ({ walletBook, }) => {
12
12
  .map(([key, wallet]) => {
13
13
  const { shortName } = wallet;
14
14
  const name = shortName || wallet.name;
15
- return class extends walletConnect.WalletConnect {
15
+ return class extends WalletConnectConnector.WalletConnectConnector {
16
16
  constructor(props) {
17
17
  super(Object.assign(Object.assign({}, props), { walletName: name }));
18
18
  this.overrideKey = key;
@@ -1,5 +1,5 @@
1
1
  'use client'
2
- import { WalletConnect } from '../walletConnect.js';
2
+ import { WalletConnectConnector } from '../WalletConnectConnector/WalletConnectConnector.js';
3
3
 
4
4
  const fetchWalletConnectWallets = ({ walletBook, }) => {
5
5
  var _a;
@@ -8,7 +8,7 @@ const fetchWalletConnectWallets = ({ walletBook, }) => {
8
8
  .map(([key, wallet]) => {
9
9
  const { shortName } = wallet;
10
10
  const name = shortName || wallet.name;
11
- return class extends WalletConnect {
11
+ return class extends WalletConnectConnector {
12
12
  constructor(props) {
13
13
  super(Object.assign(Object.assign({}, props), { walletName: name }));
14
14
  this.overrideKey = key;
@@ -3,9 +3,9 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var walletConnect = require('../walletConnect.cjs');
6
+ var WalletConnectConnector = require('../WalletConnectConnector/WalletConnectConnector.cjs');
7
7
 
8
- const getWalletConnectConnector = () => class extends walletConnect.WalletConnect {
8
+ const getWalletConnectConnector = () => class extends WalletConnectConnector.WalletConnectConnector {
9
9
  constructor(props) {
10
10
  super(Object.assign(Object.assign({}, props), { walletName: 'WalletConnect' }));
11
11
  }
@@ -1,7 +1,7 @@
1
1
  'use client'
2
- import { WalletConnect } from '../walletConnect.js';
2
+ import { WalletConnectConnector } from '../WalletConnectConnector/WalletConnectConnector.js';
3
3
 
4
- const getWalletConnectConnector = () => class extends WalletConnect {
4
+ const getWalletConnectConnector = () => class extends WalletConnectConnector {
5
5
  constructor(props) {
6
6
  super(Object.assign(Object.assign({}, props), { walletName: 'WalletConnect' }));
7
7
  }