@wagmi/core 0.2.0-next.9 → 0.2.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 (90) hide show
  1. package/LICENSE +2 -2
  2. package/README.md +30 -0
  3. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.d.ts +1 -11
  4. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.dev.js +236 -0
  5. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.js +6 -15
  6. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.prod.js +236 -0
  7. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.esm.js +214 -0
  8. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.d.ts +1 -11
  9. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.dev.js +250 -0
  10. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.js +6 -15
  11. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.prod.js +250 -0
  12. package/connectors/mock/dist/wagmi-core-connectors-mock.esm.js +241 -0
  13. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.d.ts +1 -11
  14. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.dev.js +183 -0
  15. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.js +6 -15
  16. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.prod.js +183 -0
  17. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.esm.js +161 -0
  18. package/dist/base-30d4fad4.cjs.prod.js +544 -0
  19. package/dist/base-a0d63eb0.cjs.dev.js +544 -0
  20. package/dist/base-f0102d32.esm.js +517 -0
  21. package/dist/classPrivateMethodGet-656c08a7.cjs.prod.js +19 -0
  22. package/dist/classPrivateMethodGet-9b9cd39b.cjs.dev.js +19 -0
  23. package/dist/classPrivateMethodGet-e0eaacfc.esm.js +16 -0
  24. package/dist/declarations/src/actions/accounts/connect.d.ts +16 -0
  25. package/dist/declarations/src/actions/accounts/disconnect.d.ts +1 -0
  26. package/dist/declarations/src/actions/accounts/fetchBalance.d.ts +20 -0
  27. package/dist/declarations/src/actions/accounts/fetchSigner.d.ts +3 -0
  28. package/dist/declarations/src/actions/accounts/getAccount.d.ts +7 -0
  29. package/dist/declarations/src/actions/accounts/getNetwork.d.ts +9 -0
  30. package/dist/declarations/src/actions/accounts/index.d.ts +12 -0
  31. package/dist/declarations/src/actions/accounts/signMessage.d.ts +9 -0
  32. package/dist/declarations/src/actions/accounts/signTypedData.d.ts +13 -0
  33. package/dist/declarations/src/actions/accounts/switchNetwork.d.ts +6 -0
  34. package/dist/declarations/src/actions/accounts/watchAccount.d.ts +4 -0
  35. package/dist/declarations/src/actions/accounts/watchNetwork.d.ts +3 -0
  36. package/dist/declarations/src/actions/accounts/watchSigner.d.ts +3 -0
  37. package/dist/declarations/src/actions/contracts/getContract.d.ts +11 -0
  38. package/dist/declarations/src/actions/contracts/index.d.ts +5 -0
  39. package/dist/declarations/src/actions/contracts/readContract.d.ts +14 -0
  40. package/dist/declarations/src/actions/contracts/watchContractEvent.d.ts +14 -0
  41. package/dist/declarations/src/actions/contracts/watchReadContract.d.ts +7 -0
  42. package/dist/declarations/src/actions/contracts/writeContract.d.ts +11 -0
  43. package/dist/declarations/src/actions/ens/fetchEnsAddress.d.ts +8 -0
  44. package/dist/declarations/src/actions/ens/fetchEnsAvatar.d.ts +8 -0
  45. package/dist/declarations/src/actions/ens/fetchEnsName.d.ts +8 -0
  46. package/dist/declarations/src/actions/ens/fetchEnsResolver.d.ts +9 -0
  47. package/dist/declarations/src/actions/ens/index.d.ts +4 -0
  48. package/dist/declarations/src/actions/index.d.ts +7 -0
  49. package/dist/declarations/src/actions/network-status/fetchBlockNumber.d.ts +5 -0
  50. package/dist/declarations/src/actions/network-status/fetchFeeData.d.ts +16 -0
  51. package/dist/declarations/src/actions/network-status/index.d.ts +3 -0
  52. package/dist/declarations/src/actions/network-status/watchBlockNumber.d.ts +6 -0
  53. package/dist/declarations/src/actions/providers/getProvider.d.ts +7 -0
  54. package/dist/declarations/src/actions/providers/getWebSocketProvider.d.ts +7 -0
  55. package/dist/declarations/src/actions/providers/index.d.ts +4 -0
  56. package/dist/declarations/src/actions/providers/watchProvider.d.ts +4 -0
  57. package/dist/declarations/src/actions/providers/watchWebSocketProvider.d.ts +4 -0
  58. package/dist/declarations/src/actions/tokens/fetchToken.d.ts +20 -0
  59. package/dist/declarations/src/actions/tokens/index.d.ts +1 -0
  60. package/dist/declarations/src/actions/transactions/index.d.ts +2 -0
  61. package/dist/declarations/src/actions/transactions/sendTransaction.d.ts +7 -0
  62. package/dist/declarations/src/actions/transactions/waitForTransaction.d.ts +17 -0
  63. package/dist/declarations/src/client.d.ts +81 -0
  64. package/dist/declarations/src/connectors/base.d.ts +56 -0
  65. package/dist/declarations/src/connectors/coinbaseWallet.d.ts +52 -0
  66. package/dist/declarations/src/connectors/index.d.ts +2 -0
  67. package/dist/declarations/src/connectors/injected.d.ts +47 -0
  68. package/dist/declarations/src/connectors/mock/connector.d.ts +37 -0
  69. package/dist/declarations/src/connectors/mock/index.d.ts +2 -0
  70. package/dist/declarations/src/connectors/mock/provider.d.ts +42 -0
  71. package/dist/declarations/src/connectors/walletConnect.d.ts +32 -0
  72. package/dist/declarations/src/constants/abis.d.ts +2 -0
  73. package/dist/declarations/src/constants/blockExplorers.d.ts +9 -0
  74. package/dist/declarations/src/constants/chains.d.ts +21 -0
  75. package/dist/declarations/src/constants/index.d.ts +7 -0
  76. package/dist/declarations/src/constants/rpcs.d.ts +9 -0
  77. package/dist/declarations/src/constants/units.d.ts +1 -0
  78. package/dist/declarations/src/errors.d.ts +28 -0
  79. package/dist/declarations/src/index.d.ts +12 -0
  80. package/dist/declarations/src/storage.d.ts +12 -0
  81. package/dist/declarations/src/types/index.d.ts +85 -0
  82. package/dist/declarations/src/utils/getInjectedName.d.ts +1 -0
  83. package/dist/declarations/src/utils/index.d.ts +2 -0
  84. package/dist/declarations/src/utils/normalizeChainId.d.ts +1 -0
  85. package/dist/wagmi-core.cjs.d.ts +1 -11
  86. package/dist/wagmi-core.cjs.dev.js +1204 -0
  87. package/dist/wagmi-core.cjs.js +6 -15
  88. package/dist/wagmi-core.cjs.prod.js +1204 -0
  89. package/dist/wagmi-core.esm.js +1139 -0
  90. package/package.json +17 -8
@@ -0,0 +1,1204 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var classPrivateMethodGet = require('./classPrivateMethodGet-9b9cd39b.cjs.dev.js');
6
+ var base = require('./base-a0d63eb0.cjs.dev.js');
7
+ var ethers = require('ethers');
8
+ var create = require('zustand/vanilla');
9
+ var middleware = require('zustand/middleware');
10
+ var utils = require('ethers/lib/utils');
11
+ var ethers$1 = require('ethers/lib/ethers');
12
+ require('eventemitter3');
13
+
14
+ function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
15
+
16
+ var create__default = /*#__PURE__*/_interopDefault(create);
17
+
18
+ // https://ethereum.org/en/developers/docs/standards/tokens/erc-20
19
+ const erc20ABI = ['event Approval(address indexed _owner, address indexed _spender, uint256 _value)', 'event Transfer(address indexed _from, address indexed _to, uint256 _value)', 'function allowance(address _owner, address _spender) public view returns (uint256 remaining)', 'function approve(address _spender, uint256 _value) public returns (bool success)', 'function balanceOf(address _owner) public view returns (uint256 balance)', 'function decimals() public view returns (uint8)', 'function name() public view returns (string)', 'function symbol() public view returns (string)', 'function totalSupply() public view returns (uint256)', 'function transfer(address _to, uint256 _value) public returns (bool success)', 'function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)']; // https://ethereum.org/en/developers/docs/standards/tokens/erc-721
20
+
21
+ const erc721ABI = ['event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);', 'event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);', 'event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);', 'function approve(address _approved, uint256 _tokenId) external payable;', 'function balanceOf(address _owner) external view returns (uint256);', 'function getApproved(uint256 _tokenId) external view returns (address);', 'function isApprovedForAll(address _owner, address _operator) external view returns (bool);', 'function name() view returns (string memory)', 'function ownerOf(uint256 _tokenId) external view returns (address);', 'function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;', 'function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;', 'function setApprovalForAll(address _operator, bool _approved) external;', 'function symbol() view returns (string memory)', 'function tokenByIndex(uint256 _index) view returns (uint256)', 'function tokenOfOwnerByIndex(address _owner, uint256 _index) view returns (uint256 tokenId)', 'function tokenURI(uint256 _tokenId) view returns (string memory)', 'function totalSupply() view returns (uint256)', 'function transferFrom(address _from, address _to, uint256 _tokenId) external payable;'];
22
+
23
+ // https://github.com/ethers-io/ethers.js/blob/master/packages/units/src.ts/index.ts#L10-L18
24
+ const units = ['wei', 'kwei', 'mwei', 'gwei', 'szabo', 'finney', 'ether'];
25
+
26
+ const injectedProvidersLookup = {
27
+ isMetaMask: 'MetaMask',
28
+ // Place other options below in alphabetical order
29
+ isBraveWallet: 'Brave Wallet',
30
+ isCoinbaseWallet: 'Coinbase Wallet',
31
+ isFrame: 'Frame',
32
+ isTally: 'Tally'
33
+ };
34
+ const injectedOptions = Object.entries(injectedProvidersLookup);
35
+ function getInjectedName(ethereum) {
36
+ if (!ethereum) return 'Injected';
37
+
38
+ for (const [key, val] of injectedOptions) {
39
+ if (ethereum[key]) return val;
40
+ }
41
+
42
+ return 'Injected';
43
+ }
44
+
45
+ const shimKey = 'injected.shimDisconnect';
46
+
47
+ var _provider = /*#__PURE__*/new WeakMap();
48
+
49
+ class InjectedConnector extends base.Connector {
50
+ constructor(config) {
51
+ super({ ...config,
52
+ options: {
53
+ shimDisconnect: true,
54
+ ...(config === null || config === void 0 ? void 0 : config.options)
55
+ }
56
+ });
57
+
58
+ base._defineProperty(this, "id", 'injected');
59
+
60
+ base._defineProperty(this, "name", void 0);
61
+
62
+ base._defineProperty(this, "ready", typeof window != 'undefined' && !!window.ethereum);
63
+
64
+ base._classPrivateFieldInitSpec(this, _provider, {
65
+ writable: true,
66
+ value: void 0
67
+ });
68
+
69
+ base._defineProperty(this, "onAccountsChanged", accounts => {
70
+ if (accounts.length === 0) this.emit('disconnect');else this.emit('change', {
71
+ account: utils.getAddress(accounts[0])
72
+ });
73
+ });
74
+
75
+ base._defineProperty(this, "onChainChanged", chainId => {
76
+ const id = base.normalizeChainId(chainId);
77
+ const unsupported = this.isChainUnsupported(id);
78
+ this.emit('change', {
79
+ chain: {
80
+ id,
81
+ unsupported
82
+ }
83
+ });
84
+ });
85
+
86
+ base._defineProperty(this, "onDisconnect", () => {
87
+ var _this$options, _getClient$storage;
88
+
89
+ this.emit('disconnect');
90
+ if ((_this$options = this.options) !== null && _this$options !== void 0 && _this$options.shimDisconnect) (_getClient$storage = getClient().storage) === null || _getClient$storage === void 0 ? void 0 : _getClient$storage.removeItem(shimKey);
91
+ });
92
+
93
+ let name = 'Injected';
94
+ if (typeof window !== 'undefined') name = getInjectedName(window.ethereum);
95
+ this.name = name;
96
+ }
97
+
98
+ async connect() {
99
+ try {
100
+ var _this$options2, _getClient$storage2;
101
+
102
+ const provider = await this.getProvider();
103
+ if (!provider) throw new base.ConnectorNotFoundError();
104
+
105
+ if (provider.on) {
106
+ provider.on('accountsChanged', this.onAccountsChanged);
107
+ provider.on('chainChanged', this.onChainChanged);
108
+ provider.on('disconnect', this.onDisconnect);
109
+ }
110
+
111
+ this.emit('message', {
112
+ type: 'connecting'
113
+ });
114
+ const account = await this.getAccount();
115
+ const id = await this.getChainId();
116
+ const unsupported = this.isChainUnsupported(id);
117
+ if ((_this$options2 = this.options) !== null && _this$options2 !== void 0 && _this$options2.shimDisconnect) (_getClient$storage2 = getClient().storage) === null || _getClient$storage2 === void 0 ? void 0 : _getClient$storage2.setItem(shimKey, true);
118
+ return {
119
+ account,
120
+ chain: {
121
+ id,
122
+ unsupported
123
+ },
124
+ provider
125
+ };
126
+ } catch (error) {
127
+ if (error.code === 4001) throw new base.UserRejectedRequestError();
128
+ throw error;
129
+ }
130
+ }
131
+
132
+ async disconnect() {
133
+ var _this$options3, _getClient$storage3;
134
+
135
+ const provider = await this.getProvider();
136
+ if (!(provider !== null && provider !== void 0 && provider.removeListener)) return;
137
+ provider.removeListener('accountsChanged', this.onAccountsChanged);
138
+ provider.removeListener('chainChanged', this.onChainChanged);
139
+ provider.removeListener('disconnect', this.onDisconnect);
140
+ if ((_this$options3 = this.options) !== null && _this$options3 !== void 0 && _this$options3.shimDisconnect) (_getClient$storage3 = getClient().storage) === null || _getClient$storage3 === void 0 ? void 0 : _getClient$storage3.removeItem(shimKey);
141
+ }
142
+
143
+ async getAccount() {
144
+ const provider = await this.getProvider();
145
+ if (!provider) throw new base.ConnectorNotFoundError();
146
+ const accounts = await provider.request({
147
+ method: 'eth_requestAccounts'
148
+ }); // return checksum address
149
+
150
+ return utils.getAddress(accounts[0]);
151
+ }
152
+
153
+ async getChainId() {
154
+ const provider = await this.getProvider();
155
+ if (!provider) throw new base.ConnectorNotFoundError();
156
+ return await provider.request({
157
+ method: 'eth_chainId'
158
+ }).then(base.normalizeChainId);
159
+ }
160
+
161
+ async getProvider() {
162
+ if (typeof window !== 'undefined' && !!window.ethereum) base._classPrivateFieldSet(this, _provider, window.ethereum);
163
+ return base._classPrivateFieldGet(this, _provider);
164
+ }
165
+
166
+ async getSigner() {
167
+ const [provider, account] = await Promise.all([this.getProvider(), this.getAccount()]);
168
+ return new ethers.providers.Web3Provider(provider).getSigner(account);
169
+ }
170
+
171
+ async isAuthorized() {
172
+ try {
173
+ var _this$options4, _getClient$storage4;
174
+
175
+ if ((_this$options4 = this.options) !== null && _this$options4 !== void 0 && _this$options4.shimDisconnect && !((_getClient$storage4 = getClient().storage) !== null && _getClient$storage4 !== void 0 && _getClient$storage4.getItem(shimKey))) return false;
176
+ const provider = await this.getProvider();
177
+ if (!provider) throw new base.ConnectorNotFoundError();
178
+ const accounts = await provider.request({
179
+ method: 'eth_accounts'
180
+ });
181
+ const account = accounts[0];
182
+ return !!account;
183
+ } catch {
184
+ return false;
185
+ }
186
+ }
187
+
188
+ async switchChain(chainId) {
189
+ const provider = await this.getProvider();
190
+ if (!provider) throw new base.ConnectorNotFoundError();
191
+ const id = utils.hexValue(chainId);
192
+
193
+ try {
194
+ var _chains$find;
195
+
196
+ await provider.request({
197
+ method: 'wallet_switchEthereumChain',
198
+ params: [{
199
+ chainId: id
200
+ }]
201
+ });
202
+ const chains = [...this.chains, ...base.allChains];
203
+ return (_chains$find = chains.find(x => x.id === chainId)) !== null && _chains$find !== void 0 ? _chains$find : {
204
+ id: chainId,
205
+ name: "Chain ".concat(id),
206
+ rpcUrls: {
207
+ default: ''
208
+ }
209
+ };
210
+ } catch (error) {
211
+ // Indicates chain is not added to provider
212
+ if (error.code === 4902) {
213
+ try {
214
+ const chain = this.chains.find(x => x.id === chainId);
215
+ if (!chain) throw new base.ChainNotConfiguredError();
216
+ await provider.request({
217
+ method: 'wallet_addEthereumChain',
218
+ params: [{
219
+ chainId: id,
220
+ chainName: chain.name,
221
+ nativeCurrency: chain.nativeCurrency,
222
+ rpcUrls: this.getRpcUrls(chain),
223
+ blockExplorerUrls: this.getBlockExplorerUrls(chain)
224
+ }]
225
+ });
226
+ return chain;
227
+ } catch (addError) {
228
+ throw new base.AddChainError();
229
+ }
230
+ } else if (error.code === 4001) throw new base.UserRejectedRequestError();else throw new base.SwitchChainError();
231
+ }
232
+ }
233
+
234
+ async watchAsset(_ref) {
235
+ let {
236
+ address,
237
+ decimals = 18,
238
+ image,
239
+ symbol
240
+ } = _ref;
241
+ const provider = await this.getProvider();
242
+ if (!provider) throw new base.ConnectorNotFoundError();
243
+ return await provider.request({
244
+ method: 'wallet_watchAsset',
245
+ params: {
246
+ type: 'ERC20',
247
+ options: {
248
+ address,
249
+ decimals,
250
+ image,
251
+ symbol
252
+ }
253
+ }
254
+ });
255
+ }
256
+
257
+ }
258
+
259
+ const noopStorage = {
260
+ getItem: _key => '',
261
+ setItem: (_key, _value) => null,
262
+ removeItem: _key => null
263
+ };
264
+ function createStorage(_ref) {
265
+ let {
266
+ storage,
267
+ key: prefix = 'wagmi'
268
+ } = _ref;
269
+ return { ...storage,
270
+ getItem: function (key) {
271
+ let defaultState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
272
+ const value = storage.getItem("".concat(prefix, ".").concat(key));
273
+
274
+ try {
275
+ return value ? JSON.parse(value) : defaultState;
276
+ } catch (error) {
277
+ console.warn(error);
278
+ return defaultState;
279
+ }
280
+ },
281
+ setItem: (key, value) => {
282
+ if (value === null) {
283
+ storage.removeItem("".concat(prefix, ".").concat(key));
284
+ } else {
285
+ try {
286
+ storage.setItem("".concat(prefix, ".").concat(key), JSON.stringify(value));
287
+ } catch (err) {
288
+ console.error(err);
289
+ }
290
+ }
291
+ },
292
+ removeItem: key => storage.removeItem("".concat(prefix, ".").concat(key))
293
+ };
294
+ }
295
+
296
+ const storeKey = 'store';
297
+
298
+ var _lastUsedConnector = /*#__PURE__*/new WeakMap();
299
+
300
+ var _addEffects = /*#__PURE__*/new WeakSet();
301
+
302
+ class Client {
303
+ constructor() {
304
+ var _config$autoConnect, _config$connectors, _config$provider, _config$storage;
305
+
306
+ let config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
307
+
308
+ classPrivateMethodGet._classPrivateMethodInitSpec(this, _addEffects);
309
+
310
+ base._defineProperty(this, "config", void 0);
311
+
312
+ base._defineProperty(this, "storage", void 0);
313
+
314
+ base._defineProperty(this, "store", void 0);
315
+
316
+ base._classPrivateFieldInitSpec(this, _lastUsedConnector, {
317
+ writable: true,
318
+ value: void 0
319
+ });
320
+
321
+ // Set default values for config
322
+ const autoConnect = (_config$autoConnect = config.autoConnect) !== null && _config$autoConnect !== void 0 ? _config$autoConnect : false;
323
+
324
+ const _connectors = (_config$connectors = config.connectors) !== null && _config$connectors !== void 0 ? _config$connectors : [new InjectedConnector()];
325
+
326
+ const _provider = (_config$provider = config.provider) !== null && _config$provider !== void 0 ? _config$provider : config => {
327
+ try {
328
+ return ethers.getDefaultProvider(config.chainId);
329
+ } catch {
330
+ return ethers.getDefaultProvider();
331
+ }
332
+ };
333
+
334
+ const storage = (_config$storage = config.storage) !== null && _config$storage !== void 0 ? _config$storage : createStorage({
335
+ storage: typeof window !== 'undefined' ? window.localStorage : noopStorage
336
+ });
337
+ const _webSocketProvider = config.webSocketProvider; // Check status for autoConnect flag
338
+
339
+ let status = 'disconnected';
340
+
341
+ let _chainId;
342
+
343
+ if (autoConnect) {
344
+ try {
345
+ var _JSON$parse, _JSON$parse$state, _data$chain;
346
+
347
+ const rawState = storage.getItem(storeKey, '');
348
+ const data = (_JSON$parse = JSON.parse(rawState || '{}')) === null || _JSON$parse === void 0 ? void 0 : (_JSON$parse$state = _JSON$parse.state) === null || _JSON$parse$state === void 0 ? void 0 : _JSON$parse$state.data; // If account exists in localStorage, set status to reconnecting
349
+
350
+ status = data !== null && data !== void 0 && data.account ? 'reconnecting' : 'connecting';
351
+ _chainId = data === null || data === void 0 ? void 0 : (_data$chain = data.chain) === null || _data$chain === void 0 ? void 0 : _data$chain.id; // eslint-disable-next-line no-empty
352
+ } catch (_error) {}
353
+ } // Evaluate initial store values
354
+
355
+
356
+ const connectors_ = typeof _connectors === 'function' ? _connectors({
357
+ chainId: _chainId
358
+ }) : _connectors;
359
+ const provider_ = typeof _provider === 'function' ? _provider({
360
+ chainId: _chainId
361
+ }) : _provider;
362
+ const webSocketProvider_ = typeof _webSocketProvider === 'function' ? _webSocketProvider({
363
+ chainId: _chainId
364
+ }) : _webSocketProvider; // Create store
365
+
366
+ this.store = create__default["default"](middleware.subscribeWithSelector(middleware.persist(() => ({
367
+ connectors: connectors_,
368
+ provider: provider_,
369
+ status,
370
+ webSocketProvider: webSocketProvider_
371
+ }), {
372
+ name: storeKey,
373
+ getStorage: () => storage,
374
+ partialize: state => {
375
+ var _state$data, _state$data2;
376
+
377
+ return { ...(autoConnect && {
378
+ data: {
379
+ account: state === null || state === void 0 ? void 0 : (_state$data = state.data) === null || _state$data === void 0 ? void 0 : _state$data.account,
380
+ chain: state === null || state === void 0 ? void 0 : (_state$data2 = state.data) === null || _state$data2 === void 0 ? void 0 : _state$data2.chain
381
+ }
382
+ }),
383
+ chains: state === null || state === void 0 ? void 0 : state.chains
384
+ };
385
+ },
386
+ version: 1
387
+ })));
388
+ this.config = {
389
+ autoConnect,
390
+ connectors: _connectors,
391
+ provider: _provider,
392
+ storage,
393
+ webSocketProvider: _webSocketProvider
394
+ };
395
+ this.storage = storage;
396
+
397
+ base._classPrivateFieldSet(this, _lastUsedConnector, storage === null || storage === void 0 ? void 0 : storage.getItem('wallet'));
398
+
399
+ classPrivateMethodGet._classPrivateMethodGet(this, _addEffects, _addEffects2).call(this);
400
+ }
401
+
402
+ get chains() {
403
+ return this.store.getState().chains;
404
+ }
405
+
406
+ get connectors() {
407
+ return this.store.getState().connectors;
408
+ }
409
+
410
+ get connector() {
411
+ return this.store.getState().connector;
412
+ }
413
+
414
+ get data() {
415
+ return this.store.getState().data;
416
+ }
417
+
418
+ get error() {
419
+ return this.store.getState().error;
420
+ }
421
+
422
+ get provider() {
423
+ return this.store.getState().provider;
424
+ }
425
+
426
+ get status() {
427
+ return this.store.getState().status;
428
+ }
429
+
430
+ get subscribe() {
431
+ return this.store.subscribe;
432
+ }
433
+
434
+ get webSocketProvider() {
435
+ return this.store.getState().webSocketProvider;
436
+ }
437
+
438
+ setState(updater) {
439
+ const newState = typeof updater === 'function' ? updater(this.store.getState()) : updater;
440
+ this.store.setState(newState, true);
441
+ }
442
+
443
+ clearState() {
444
+ this.setState(x => ({ ...x,
445
+ connector: undefined,
446
+ data: undefined,
447
+ error: undefined,
448
+ status: 'disconnected'
449
+ }));
450
+ }
451
+
452
+ async destroy() {
453
+ var _this$connector$disco, _this$connector;
454
+
455
+ if (this.connector) await ((_this$connector$disco = (_this$connector = this.connector).disconnect) === null || _this$connector$disco === void 0 ? void 0 : _this$connector$disco.call(_this$connector));
456
+ this.clearState();
457
+ this.store.destroy();
458
+ }
459
+
460
+ async autoConnect() {
461
+ if (!this.connectors.length) return; // Try last used connector first
462
+
463
+ const sorted = base._classPrivateFieldGet(this, _lastUsedConnector) ? [...this.connectors].sort(x => x.id === base._classPrivateFieldGet(this, _lastUsedConnector) ? -1 : 1) : this.connectors;
464
+ let connected = false;
465
+
466
+ for (const connector of sorted) {
467
+ if (!connector.ready || !connector.isAuthorized) continue;
468
+ const isAuthorized = await connector.isAuthorized();
469
+ if (!isAuthorized) continue;
470
+ const data = await connector.connect();
471
+ this.setState(x => ({ ...x,
472
+ connector,
473
+ chains: connector === null || connector === void 0 ? void 0 : connector.chains,
474
+ data,
475
+ status: 'connected'
476
+ }));
477
+ connected = true;
478
+ break;
479
+ } // If connecting didn't succeed, set to disconnected
480
+
481
+
482
+ if (!connected) this.setState(x => ({ ...x,
483
+ status: 'disconnected'
484
+ }));
485
+ return this.data;
486
+ }
487
+
488
+ setLastUsedConnector() {
489
+ var _this$storage;
490
+
491
+ let lastUsedConnector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
492
+ (_this$storage = this.storage) === null || _this$storage === void 0 ? void 0 : _this$storage.setItem('wallet', lastUsedConnector);
493
+ }
494
+
495
+ }
496
+
497
+ function _addEffects2() {
498
+ const onChange = data => {
499
+ this.setState(x => ({ ...x,
500
+ data: { ...x.data,
501
+ ...data
502
+ }
503
+ }));
504
+ };
505
+
506
+ const onDisconnect = () => {
507
+ this.clearState();
508
+ };
509
+
510
+ const onError = error => {
511
+ this.setState(x => ({ ...x,
512
+ error
513
+ }));
514
+ };
515
+
516
+ this.store.subscribe(_ref => {
517
+ let {
518
+ connector
519
+ } = _ref;
520
+ return connector;
521
+ }, (connector, prevConnector) => {
522
+ var _prevConnector$off, _prevConnector$off2, _prevConnector$off3, _connector$on, _connector$on2, _connector$on3;
523
+
524
+ prevConnector === null || prevConnector === void 0 ? void 0 : (_prevConnector$off = prevConnector.off) === null || _prevConnector$off === void 0 ? void 0 : _prevConnector$off.call(prevConnector, 'change', onChange);
525
+ prevConnector === null || prevConnector === void 0 ? void 0 : (_prevConnector$off2 = prevConnector.off) === null || _prevConnector$off2 === void 0 ? void 0 : _prevConnector$off2.call(prevConnector, 'disconnect', onDisconnect);
526
+ prevConnector === null || prevConnector === void 0 ? void 0 : (_prevConnector$off3 = prevConnector.off) === null || _prevConnector$off3 === void 0 ? void 0 : _prevConnector$off3.call(prevConnector, 'error', onError);
527
+ if (!connector) return;
528
+ (_connector$on = connector.on) === null || _connector$on === void 0 ? void 0 : _connector$on.call(connector, 'change', onChange);
529
+ (_connector$on2 = connector.on) === null || _connector$on2 === void 0 ? void 0 : _connector$on2.call(connector, 'disconnect', onDisconnect);
530
+ (_connector$on3 = connector.on) === null || _connector$on3 === void 0 ? void 0 : _connector$on3.call(connector, 'error', onError);
531
+ });
532
+ const {
533
+ connectors,
534
+ provider,
535
+ webSocketProvider
536
+ } = this.config;
537
+ const subscribeConnectors = typeof connectors === 'function';
538
+ const subscribeProvider = typeof provider === 'function';
539
+ const subscribeWebSocketProvider = typeof webSocketProvider === 'function';
540
+ if (subscribeConnectors || subscribeProvider || subscribeWebSocketProvider) this.store.subscribe(_ref2 => {
541
+ var _data$chain2;
542
+
543
+ let {
544
+ data
545
+ } = _ref2;
546
+ return data === null || data === void 0 ? void 0 : (_data$chain2 = data.chain) === null || _data$chain2 === void 0 ? void 0 : _data$chain2.id;
547
+ }, chainId => {
548
+ this.setState(x => ({ ...x,
549
+ connectors: subscribeConnectors ? connectors({
550
+ chainId
551
+ }) : x.connectors,
552
+ provider: subscribeProvider ? provider({
553
+ chainId
554
+ }) : x.provider,
555
+ webSocketProvider: subscribeWebSocketProvider ? webSocketProvider({
556
+ chainId
557
+ }) : x.webSocketProvider
558
+ }));
559
+ });
560
+ }
561
+
562
+ let client;
563
+ function createClient(config) {
564
+ const client_ = new Client(config);
565
+ client = client_;
566
+ return client_;
567
+ }
568
+ function getClient() {
569
+ return client;
570
+ }
571
+
572
+ async function connect(_ref) {
573
+ let {
574
+ connector
575
+ } = _ref;
576
+ const activeConnector = client.connector;
577
+ if (connector.id === (activeConnector === null || activeConnector === void 0 ? void 0 : activeConnector.id)) throw new base.ConnectorAlreadyConnectedError();
578
+ const data = await connector.connect();
579
+ client.setLastUsedConnector(connector.id);
580
+ client.setState(x => ({ ...x,
581
+ connector,
582
+ chains: connector === null || connector === void 0 ? void 0 : connector.chains,
583
+ data
584
+ }));
585
+ client.storage.setItem('connected', true);
586
+ return { ...data,
587
+ connector
588
+ };
589
+ }
590
+
591
+ async function disconnect() {
592
+ const client = getClient();
593
+ if (client.connector) await client.connector.disconnect();
594
+ client.clearState();
595
+ client.storage.removeItem('connected');
596
+ }
597
+
598
+ function getProvider() {
599
+ let {
600
+ chainId
601
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
602
+ const client = getClient();
603
+ if (chainId && typeof client.config.provider === 'function') return client.config.provider({
604
+ chainId
605
+ });
606
+ return client.provider;
607
+ }
608
+
609
+ function getWebSocketProvider() {
610
+ let {
611
+ chainId
612
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
613
+ const client = getClient();
614
+ if (chainId && typeof client.config.webSocketProvider === 'function') return client.config.webSocketProvider({
615
+ chainId
616
+ });
617
+ return client.webSocketProvider;
618
+ }
619
+
620
+ function watchProvider(args, callback) {
621
+ const client = getClient();
622
+
623
+ const handleChange = async () => callback(getProvider(args));
624
+
625
+ const unsubscribe = client.subscribe(_ref => {
626
+ let {
627
+ provider
628
+ } = _ref;
629
+ return provider;
630
+ }, handleChange);
631
+ return unsubscribe;
632
+ }
633
+
634
+ function watchWebSocketProvider(args, callback) {
635
+ const client = getClient();
636
+
637
+ const handleChange = async () => callback(getWebSocketProvider(args));
638
+
639
+ const unsubscribe = client.subscribe(_ref => {
640
+ let {
641
+ webSocketProvider
642
+ } = _ref;
643
+ return webSocketProvider;
644
+ }, handleChange);
645
+ return unsubscribe;
646
+ }
647
+
648
+ async function fetchBalance(_ref) {
649
+ var _client$connector$cha, _client$connector, _chain$nativeCurrency, _chain$nativeCurrency2, _chain$nativeCurrency3, _chain$nativeCurrency4;
650
+
651
+ let {
652
+ addressOrName,
653
+ chainId,
654
+ formatUnits: unit = 'ether',
655
+ token
656
+ } = _ref;
657
+ const client = getClient();
658
+ const provider = getProvider({
659
+ chainId
660
+ });
661
+
662
+ if (token) {
663
+ const contract = new ethers$1.Contract(token, erc20ABI, provider);
664
+ const [value, decimals, symbol] = await Promise.all([contract.balanceOf(addressOrName), contract.decimals(), contract.symbol()]);
665
+ return {
666
+ decimals,
667
+ formatted: utils.formatUnits(value, unit),
668
+ symbol,
669
+ unit,
670
+ value
671
+ };
672
+ }
673
+
674
+ const chains = [...((_client$connector$cha = (_client$connector = client.connector) === null || _client$connector === void 0 ? void 0 : _client$connector.chains) !== null && _client$connector$cha !== void 0 ? _client$connector$cha : []), ...base.allChains];
675
+ const value = await provider.getBalance(addressOrName);
676
+ const chain = chains.find(x => x.id === provider.network.chainId);
677
+ return {
678
+ decimals: (_chain$nativeCurrency = chain === null || chain === void 0 ? void 0 : (_chain$nativeCurrency2 = chain.nativeCurrency) === null || _chain$nativeCurrency2 === void 0 ? void 0 : _chain$nativeCurrency2.decimals) !== null && _chain$nativeCurrency !== void 0 ? _chain$nativeCurrency : 18,
679
+ formatted: utils.formatUnits(value, unit),
680
+ symbol: (_chain$nativeCurrency3 = chain === null || chain === void 0 ? void 0 : (_chain$nativeCurrency4 = chain.nativeCurrency) === null || _chain$nativeCurrency4 === void 0 ? void 0 : _chain$nativeCurrency4.symbol) !== null && _chain$nativeCurrency3 !== void 0 ? _chain$nativeCurrency3 : 'ETH',
681
+ unit,
682
+ value
683
+ };
684
+ }
685
+
686
+ async function fetchSigner() {
687
+ var _client$connector, _client$connector$get;
688
+
689
+ const client = getClient();
690
+ const signer = (await ((_client$connector = client.connector) === null || _client$connector === void 0 ? void 0 : (_client$connector$get = _client$connector.getSigner) === null || _client$connector$get === void 0 ? void 0 : _client$connector$get.call(_client$connector))) || null;
691
+ return signer;
692
+ }
693
+
694
+ function getAccount() {
695
+ const {
696
+ data,
697
+ connector
698
+ } = getClient();
699
+ return {
700
+ address: data === null || data === void 0 ? void 0 : data.account,
701
+ connector
702
+ };
703
+ }
704
+
705
+ function getNetwork() {
706
+ var _client$data, _client$data$chain, _client$chains, _find, _client$data2;
707
+
708
+ const client = getClient();
709
+ const chainId = (_client$data = client.data) === null || _client$data === void 0 ? void 0 : (_client$data$chain = _client$data.chain) === null || _client$data$chain === void 0 ? void 0 : _client$data$chain.id;
710
+ const activeChains = (_client$chains = client.chains) !== null && _client$chains !== void 0 ? _client$chains : [];
711
+ const activeChain = (_find = [...activeChains, ...base.allChains].find(x => x.id === chainId)) !== null && _find !== void 0 ? _find : {
712
+ id: chainId,
713
+ name: "Chain ".concat(chainId),
714
+ rpcUrls: {
715
+ default: ''
716
+ }
717
+ };
718
+ return {
719
+ chain: chainId ? { ...activeChain,
720
+ ...((_client$data2 = client.data) === null || _client$data2 === void 0 ? void 0 : _client$data2.chain),
721
+ id: chainId
722
+ } : undefined,
723
+ chains: activeChains
724
+ };
725
+ }
726
+
727
+ async function signMessage(args) {
728
+ try {
729
+ const signer = await fetchSigner();
730
+ if (!signer) throw new base.ConnectorNotFoundError();
731
+ return await signer.signMessage(args.message);
732
+ } catch (error_) {
733
+ let error = error_;
734
+ if (error_.code === 4001) error = new base.UserRejectedRequestError();
735
+ throw error;
736
+ }
737
+ }
738
+
739
+ async function signTypedData(args) {
740
+ try {
741
+ const signer = await fetchSigner();
742
+ if (!signer) throw new base.ConnectorNotFoundError(); // Method name may be changed in the future, see https://docs.ethers.io/v5/api/signer/#Signer-signTypedData
743
+
744
+ return await signer._signTypedData(args.domain, args.types, args.value);
745
+ } catch (error_) {
746
+ let error = error_;
747
+ if (error_.code === 4001) error = new base.UserRejectedRequestError();
748
+ throw error;
749
+ }
750
+ }
751
+
752
+ async function switchNetwork(_ref) {
753
+ var _client$connector;
754
+
755
+ let {
756
+ chainId
757
+ } = _ref;
758
+ const client = getClient();
759
+ if (!((_client$connector = client.connector) !== null && _client$connector !== void 0 && _client$connector.switchChain)) throw new base.SwitchChainNotSupportedError();
760
+ const chain = await client.connector.switchChain(chainId);
761
+ return chain;
762
+ }
763
+
764
+ function watchAccount(callback) {
765
+ const client = getClient();
766
+
767
+ const handleChange = () => callback(getAccount());
768
+
769
+ const unsubscribe = client.subscribe(_ref => {
770
+ let {
771
+ data,
772
+ connector
773
+ } = _ref;
774
+ return {
775
+ account: data === null || data === void 0 ? void 0 : data.account,
776
+ connector
777
+ };
778
+ }, handleChange, {
779
+ equalityFn: (selected, previous) => selected.account === previous.account && selected.connector === previous.connector
780
+ });
781
+ return unsubscribe;
782
+ }
783
+
784
+ function watchNetwork(callback) {
785
+ const client = getClient();
786
+
787
+ const handleChange = () => callback(getNetwork());
788
+
789
+ const unsubscribe = client.subscribe(_ref => {
790
+ var _data$chain;
791
+
792
+ let {
793
+ data,
794
+ chains
795
+ } = _ref;
796
+ return {
797
+ chainId: data === null || data === void 0 ? void 0 : (_data$chain = data.chain) === null || _data$chain === void 0 ? void 0 : _data$chain.id,
798
+ chains
799
+ };
800
+ }, handleChange, {
801
+ equalityFn: (selected, previous) => selected.chainId === previous.chainId && selected.chains === previous.chains
802
+ });
803
+ return unsubscribe;
804
+ }
805
+
806
+ function watchSigner(callback) {
807
+ const client = getClient();
808
+
809
+ const handleChange = async () => callback(await fetchSigner());
810
+
811
+ const unsubscribe = client.subscribe(_ref => {
812
+ var _data$chain;
813
+
814
+ let {
815
+ data,
816
+ connector
817
+ } = _ref;
818
+ return {
819
+ account: data === null || data === void 0 ? void 0 : data.account,
820
+ chainId: data === null || data === void 0 ? void 0 : (_data$chain = data.chain) === null || _data$chain === void 0 ? void 0 : _data$chain.id,
821
+ connector
822
+ };
823
+ }, handleChange, {
824
+ equalityFn: (selected, previous) => selected.account === previous.account && selected.chainId === previous.chainId && selected.connector === previous.connector
825
+ });
826
+ return unsubscribe;
827
+ }
828
+
829
+ function getContract(_ref) {
830
+ let {
831
+ addressOrName,
832
+ contractInterface,
833
+ signerOrProvider
834
+ } = _ref;
835
+ return new ethers$1.Contract(addressOrName, contractInterface, signerOrProvider);
836
+ }
837
+
838
+ async function readContract(contractConfig, functionName) {
839
+ let {
840
+ args,
841
+ chainId,
842
+ overrides
843
+ } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
844
+ const provider = getProvider({
845
+ chainId
846
+ });
847
+ const contract = getContract({
848
+ signerOrProvider: provider,
849
+ ...contractConfig
850
+ });
851
+ const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
852
+ const contractFunction = contract[functionName];
853
+ if (!contractFunction) console.warn("\"".concat(functionName, "\" does not in interface for contract \"").concat(contractConfig.addressOrName, "\""));
854
+ const response = await (contractFunction === null || contractFunction === void 0 ? void 0 : contractFunction(...params));
855
+ return response;
856
+ }
857
+
858
+ function watchContractEvent(
859
+ /** Contract configuration */
860
+ contractArgs,
861
+ /** Event name to listen to */
862
+ eventName, callback) {
863
+ let {
864
+ chainId,
865
+ once
866
+ } = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
867
+ let contract;
868
+
869
+ const watchEvent = async () => {
870
+ if (contract) {
871
+ var _contract;
872
+
873
+ (_contract = contract) === null || _contract === void 0 ? void 0 : _contract.off(eventName, callback);
874
+ }
875
+
876
+ contract = getContract({
877
+ signerOrProvider: getWebSocketProvider({
878
+ chainId
879
+ }) || getProvider({
880
+ chainId
881
+ }),
882
+ ...contractArgs
883
+ });
884
+ if (once) contract.once(eventName, callback);else contract.on(eventName, callback);
885
+ };
886
+
887
+ watchEvent();
888
+ const client = getClient();
889
+ const unsubscribe = client.subscribe(_ref => {
890
+ let {
891
+ provider,
892
+ webSocketProvider
893
+ } = _ref;
894
+ return {
895
+ provider,
896
+ webSocketProvider
897
+ };
898
+ }, watchEvent, {
899
+ equalityFn: (selected, previous) => selected.provider === previous.provider && selected.webSocketProvider === previous.webSocketProvider
900
+ });
901
+ return () => {
902
+ var _contract2;
903
+
904
+ (_contract2 = contract) === null || _contract2 === void 0 ? void 0 : _contract2.off(eventName, callback);
905
+ unsubscribe();
906
+ };
907
+ }
908
+
909
+ async function fetchBlockNumber() {
910
+ let {
911
+ chainId
912
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
913
+ const provider = getProvider({
914
+ chainId
915
+ });
916
+ const blockNumber = await provider.getBlockNumber();
917
+ return blockNumber;
918
+ }
919
+
920
+ function watchBlockNumber(args, callback) {
921
+ var _client$webSocketProv;
922
+
923
+ let prevProvider;
924
+
925
+ const createListener = provider => {
926
+ if (prevProvider) {
927
+ var _prevProvider;
928
+
929
+ (_prevProvider = prevProvider) === null || _prevProvider === void 0 ? void 0 : _prevProvider.off('block', callback);
930
+ }
931
+
932
+ provider.on('block', callback);
933
+ prevProvider = provider;
934
+ };
935
+
936
+ const client = getClient();
937
+ const provider_ = (_client$webSocketProv = client.webSocketProvider) !== null && _client$webSocketProv !== void 0 ? _client$webSocketProv : client.provider;
938
+ if (args.listen) createListener(provider_);
939
+ const unsubscribe = client.subscribe(_ref => {
940
+ let {
941
+ provider,
942
+ webSocketProvider
943
+ } = _ref;
944
+ return {
945
+ provider,
946
+ webSocketProvider
947
+ };
948
+ }, async _ref2 => {
949
+ let {
950
+ provider,
951
+ webSocketProvider
952
+ } = _ref2;
953
+ const provider_ = webSocketProvider !== null && webSocketProvider !== void 0 ? webSocketProvider : provider;
954
+
955
+ if (args.listen && provider_) {
956
+ createListener(provider_);
957
+ }
958
+
959
+ callback(await fetchBlockNumber());
960
+ }, {
961
+ equalityFn: (selected, previous) => selected.provider === previous.provider && selected.webSocketProvider === previous.webSocketProvider
962
+ });
963
+ return () => {
964
+ unsubscribe();
965
+ provider_ === null || provider_ === void 0 ? void 0 : provider_.off('block', callback);
966
+ };
967
+ }
968
+
969
+ function watchReadContract(contractConfig, functionName) {
970
+ var _config$listenToBlock;
971
+
972
+ let config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
973
+ let callback = arguments.length > 3 ? arguments[3] : undefined;
974
+ const client = getClient();
975
+
976
+ const handleChange = async () => callback(await readContract(contractConfig, functionName, config));
977
+
978
+ const unwatch = ((_config$listenToBlock = config.listenToBlock) !== null && _config$listenToBlock !== void 0 ? _config$listenToBlock : true) ? watchBlockNumber({
979
+ listen: true
980
+ }, handleChange) : undefined;
981
+ const unsubscribe = client.subscribe(_ref => {
982
+ let {
983
+ provider
984
+ } = _ref;
985
+ return provider;
986
+ }, handleChange);
987
+ return () => {
988
+ unsubscribe();
989
+ unwatch === null || unwatch === void 0 ? void 0 : unwatch();
990
+ };
991
+ }
992
+
993
+ async function writeContract(contractConfig, functionName) {
994
+ let {
995
+ args,
996
+ overrides
997
+ } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
998
+ const client = getClient();
999
+ if (!client.connector) throw new base.ConnectorNotFoundError();
1000
+ const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
1001
+
1002
+ try {
1003
+ const signer = await client.connector.getSigner();
1004
+ const contract = getContract(contractConfig);
1005
+ const contractWithSigner = contract.connect(signer);
1006
+ const contractFunction = contractWithSigner[functionName];
1007
+ if (!contractFunction) console.warn("\"".concat(functionName, "\" does not in interface for contract \"").concat(contractConfig.addressOrName, "\""));
1008
+ const response = await contractFunction(...params);
1009
+ return response;
1010
+ } catch (error_) {
1011
+ let error = error_;
1012
+ if (error_.code === 4001) error = new base.UserRejectedRequestError();
1013
+ throw error;
1014
+ }
1015
+ }
1016
+
1017
+ async function fetchEnsAddress(_ref) {
1018
+ let {
1019
+ chainId,
1020
+ name
1021
+ } = _ref;
1022
+ const provider = getProvider({
1023
+ chainId
1024
+ });
1025
+ const address = await provider.resolveName(name);
1026
+
1027
+ try {
1028
+ return address ? utils.getAddress(address) : null;
1029
+ } catch (_error) {
1030
+ return null;
1031
+ }
1032
+ }
1033
+
1034
+ async function fetchEnsAvatar(_ref) {
1035
+ let {
1036
+ addressOrName,
1037
+ chainId
1038
+ } = _ref;
1039
+ const provider = getProvider({
1040
+ chainId
1041
+ }); // TODO: Update with more advanced logic
1042
+ // https://github.com/ensdomains/ens-avatar
1043
+
1044
+ const avatar = await provider.getAvatar(addressOrName);
1045
+ return avatar;
1046
+ }
1047
+
1048
+ async function fetchEnsName(_ref) {
1049
+ let {
1050
+ address,
1051
+ chainId
1052
+ } = _ref;
1053
+ const provider = getProvider({
1054
+ chainId
1055
+ });
1056
+ return await provider.lookupAddress(address);
1057
+ }
1058
+
1059
+ async function fetchEnsResolver(_ref) {
1060
+ let {
1061
+ chainId,
1062
+ name
1063
+ } = _ref;
1064
+ const provider = getProvider({
1065
+ chainId
1066
+ });
1067
+ const resolver = await provider.getResolver(name);
1068
+ return resolver;
1069
+ }
1070
+
1071
+ async function fetchFeeData() {
1072
+ let {
1073
+ chainId,
1074
+ formatUnits: units = 'wei'
1075
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1076
+ const provider = getProvider({
1077
+ chainId
1078
+ });
1079
+ const feeData = await provider.getFeeData();
1080
+ const formatted = {
1081
+ gasPrice: utils.formatUnits(feeData.gasPrice, units),
1082
+ maxFeePerGas: utils.formatUnits(feeData.maxFeePerGas, units),
1083
+ maxPriorityFeePerGas: utils.formatUnits(feeData.maxPriorityFeePerGas, units)
1084
+ };
1085
+ return { ...feeData,
1086
+ formatted
1087
+ };
1088
+ }
1089
+
1090
+ async function fetchToken(_ref) {
1091
+ let {
1092
+ address,
1093
+ chainId,
1094
+ formatUnits: units = 'ether'
1095
+ } = _ref;
1096
+ const provider = getProvider({
1097
+ chainId
1098
+ });
1099
+ const contract = new ethers$1.Contract(address, erc20ABI, provider);
1100
+ const [symbol, decimals, totalSupply] = await Promise.all([contract.symbol(), contract.decimals(), contract.totalSupply()]);
1101
+ const token = {
1102
+ address,
1103
+ decimals,
1104
+ symbol,
1105
+ totalSupply: {
1106
+ formatted: utils.formatUnits(totalSupply, units),
1107
+ value: totalSupply
1108
+ }
1109
+ };
1110
+ return token;
1111
+ }
1112
+
1113
+ async function sendTransaction(args) {
1114
+ try {
1115
+ const signer = await fetchSigner();
1116
+ if (!signer) throw new base.ConnectorNotFoundError();
1117
+ const transaction = await signer.sendTransaction(args.request);
1118
+ return transaction;
1119
+ } catch (error_) {
1120
+ let error = error_;
1121
+ if (error_.code === 4001) error = new base.UserRejectedRequestError();
1122
+ throw error;
1123
+ }
1124
+ }
1125
+
1126
+ async function waitForTransaction(_ref) {
1127
+ let {
1128
+ chainId,
1129
+ confirmations,
1130
+ hash,
1131
+ timeout,
1132
+ wait: wait_
1133
+ } = _ref;
1134
+ let promise;
1135
+
1136
+ if (hash) {
1137
+ const provider = getProvider({
1138
+ chainId
1139
+ });
1140
+ promise = provider.waitForTransaction(hash, confirmations, timeout);
1141
+ } else if (wait_) promise = wait_(confirmations);else throw new Error('hash or wait is required');
1142
+
1143
+ return await promise;
1144
+ }
1145
+
1146
+ exports.AddChainError = base.AddChainError;
1147
+ exports.ChainNotConfiguredError = base.ChainNotConfiguredError;
1148
+ exports.Connector = base.Connector;
1149
+ exports.ConnectorAlreadyConnectedError = base.ConnectorAlreadyConnectedError;
1150
+ exports.ConnectorNotFoundError = base.ConnectorNotFoundError;
1151
+ exports.SwitchChainError = base.SwitchChainError;
1152
+ exports.SwitchChainNotSupportedError = base.SwitchChainNotSupportedError;
1153
+ exports.UserRejectedRequestError = base.UserRejectedRequestError;
1154
+ exports.alchemyRpcUrls = base.alchemyRpcUrls;
1155
+ exports.allChains = base.allChains;
1156
+ exports.chain = base.chain;
1157
+ exports.chainId = base.chainId;
1158
+ exports.defaultChains = base.defaultChains;
1159
+ exports.defaultL2Chains = base.defaultL2Chains;
1160
+ exports.etherscanBlockExplorers = base.etherscanBlockExplorers;
1161
+ exports.infuraRpcUrls = base.infuraRpcUrls;
1162
+ exports.normalizeChainId = base.normalizeChainId;
1163
+ exports.Client = Client;
1164
+ exports.InjectedConnector = InjectedConnector;
1165
+ exports.WagmiClient = Client;
1166
+ exports.connect = connect;
1167
+ exports.createClient = createClient;
1168
+ exports.createStorage = createStorage;
1169
+ exports.createWagmiClient = createClient;
1170
+ exports.createWagmiStorage = createStorage;
1171
+ exports.disconnect = disconnect;
1172
+ exports.erc20ABI = erc20ABI;
1173
+ exports.erc721ABI = erc721ABI;
1174
+ exports.fetchBalance = fetchBalance;
1175
+ exports.fetchBlockNumber = fetchBlockNumber;
1176
+ exports.fetchEnsAddress = fetchEnsAddress;
1177
+ exports.fetchEnsAvatar = fetchEnsAvatar;
1178
+ exports.fetchEnsName = fetchEnsName;
1179
+ exports.fetchEnsResolver = fetchEnsResolver;
1180
+ exports.fetchFeeData = fetchFeeData;
1181
+ exports.fetchSigner = fetchSigner;
1182
+ exports.fetchToken = fetchToken;
1183
+ exports.getAccount = getAccount;
1184
+ exports.getContract = getContract;
1185
+ exports.getNetwork = getNetwork;
1186
+ exports.getProvider = getProvider;
1187
+ exports.getWebSocketProvider = getWebSocketProvider;
1188
+ exports.noopStorage = noopStorage;
1189
+ exports.readContract = readContract;
1190
+ exports.sendTransaction = sendTransaction;
1191
+ exports.signMessage = signMessage;
1192
+ exports.signTypedData = signTypedData;
1193
+ exports.switchNetwork = switchNetwork;
1194
+ exports.units = units;
1195
+ exports.waitForTransaction = waitForTransaction;
1196
+ exports.watchAccount = watchAccount;
1197
+ exports.watchBlockNumber = watchBlockNumber;
1198
+ exports.watchContractEvent = watchContractEvent;
1199
+ exports.watchNetwork = watchNetwork;
1200
+ exports.watchProvider = watchProvider;
1201
+ exports.watchReadContract = watchReadContract;
1202
+ exports.watchSigner = watchSigner;
1203
+ exports.watchWebSocketProvider = watchWebSocketProvider;
1204
+ exports.writeContract = writeContract;