@dynamic-labs/ethereum 0.19.0-alpha.2 → 0.19.0-alpha.21

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 (118) hide show
  1. package/CHANGELOG.md +293 -0
  2. package/package.json +13 -10
  3. package/src/EthWalletConnector.cjs +189 -193
  4. package/src/EthWalletConnector.d.ts +298 -41
  5. package/src/EthWalletConnector.js +190 -194
  6. package/src/coinbase/client/client.cjs +76 -0
  7. package/src/coinbase/client/client.d.ts +6 -0
  8. package/src/coinbase/client/client.js +69 -0
  9. package/src/coinbase/client/index.d.ts +2 -0
  10. package/src/coinbase/client/types.d.ts +14 -0
  11. package/src/coinbase/coinbase.cjs +71 -0
  12. package/src/coinbase/coinbase.d.ts +535 -0
  13. package/src/coinbase/coinbase.js +67 -0
  14. package/src/coinbase/index.d.ts +3 -0
  15. package/src/constants.d.ts +1 -1
  16. package/src/ethProviderHelper.cjs +132 -209
  17. package/src/ethProviderHelper.d.ts +28 -36
  18. package/src/ethProviderHelper.js +133 -210
  19. package/src/index.cjs +30 -26
  20. package/src/index.d.ts +9 -8
  21. package/src/index.js +25 -20
  22. package/src/injected/BloctoInjected.cjs +6 -6
  23. package/src/injected/BloctoInjected.d.ts +4 -4
  24. package/src/injected/BloctoInjected.js +6 -6
  25. package/src/injected/BraveEvm.cjs +6 -6
  26. package/src/injected/BraveEvm.d.ts +4 -4
  27. package/src/injected/BraveEvm.js +6 -6
  28. package/src/injected/Dawn.cjs +6 -6
  29. package/src/injected/Dawn.d.ts +4 -4
  30. package/src/injected/Dawn.js +6 -6
  31. package/src/injected/ExodusEvm.cjs +8 -8
  32. package/src/injected/ExodusEvm.d.ts +5 -5
  33. package/src/injected/ExodusEvm.js +7 -7
  34. package/src/injected/Frame.cjs +6 -6
  35. package/src/injected/Frame.d.ts +4 -4
  36. package/src/injected/Frame.js +6 -6
  37. package/src/injected/GameStop.cjs +6 -6
  38. package/src/injected/GameStop.d.ts +4 -4
  39. package/src/injected/GameStop.js +6 -6
  40. package/src/injected/InjectedWalletBase.cjs +86 -65
  41. package/src/injected/InjectedWalletBase.d.ts +29 -24
  42. package/src/injected/InjectedWalletBase.js +86 -65
  43. package/src/injected/LegacyInjectedWalletBase.cjs +83 -0
  44. package/src/injected/LegacyInjectedWalletBase.d.ts +24 -0
  45. package/src/injected/LegacyInjectedWalletBase.js +81 -0
  46. package/src/injected/Opera.cjs +6 -6
  47. package/src/injected/Opera.d.ts +4 -4
  48. package/src/injected/Opera.js +6 -6
  49. package/src/injected/PhantomEvm.cjs +28 -28
  50. package/src/injected/PhantomEvm.d.ts +5 -5
  51. package/src/injected/PhantomEvm.js +28 -28
  52. package/src/injected/Rabby.cjs +8 -8
  53. package/src/injected/Rabby.d.ts +5 -5
  54. package/src/injected/Rabby.js +7 -7
  55. package/src/injected/Superb.cjs +6 -6
  56. package/src/injected/Superb.d.ts +4 -4
  57. package/src/injected/Superb.js +6 -6
  58. package/src/injected/Trust.cjs +8 -8
  59. package/src/injected/Trust.d.ts +5 -5
  60. package/src/injected/Trust.js +7 -7
  61. package/src/injected/Zerion.cjs +8 -8
  62. package/src/injected/Zerion.d.ts +5 -5
  63. package/src/injected/Zerion.js +7 -7
  64. package/src/injected/fetchInjectedWalletConnectors.cjs +33 -0
  65. package/src/injected/fetchInjectedWalletConnectors.d.ts +6 -0
  66. package/src/injected/fetchInjectedWalletConnectors.js +29 -0
  67. package/src/injected/index.d.ts +13 -16
  68. package/src/injected/legacyInjectedWallets.cjs +48 -0
  69. package/src/injected/legacyInjectedWallets.d.ts +3 -0
  70. package/src/injected/legacyInjectedWallets.js +43 -0
  71. package/src/legacyEthProviderHelper.cjs +187 -0
  72. package/src/legacyEthProviderHelper.d.ts +34 -0
  73. package/src/legacyEthProviderHelper.js +183 -0
  74. package/src/polyfills.cjs +11 -11
  75. package/src/polyfills.d.ts +1 -1
  76. package/src/polyfills.js +11 -11
  77. package/src/types.d.ts +37 -24
  78. package/src/utils/eventListenerHandlers.cjs +34 -0
  79. package/src/utils/eventListenerHandlers.d.ts +8 -0
  80. package/src/utils/eventListenerHandlers.js +30 -0
  81. package/src/utils/findEvmNetwork.cjs +13 -13
  82. package/src/utils/findEvmNetwork.d.ts +6 -6
  83. package/src/utils/findEvmNetwork.js +13 -13
  84. package/src/utils/isString.d.ts +1 -1
  85. package/src/utils/isUnsupportedProviderError/index.d.ts +1 -1
  86. package/src/utils/isUnsupportedProviderError/isUnsupportedProviderError.cjs +6 -6
  87. package/src/utils/isUnsupportedProviderError/isUnsupportedProviderError.d.ts +6 -6
  88. package/src/utils/isUnsupportedProviderError/isUnsupportedProviderError.js +6 -6
  89. package/src/utils/last.d.ts +1 -1
  90. package/src/utils/parseIntSafe.cjs +13 -13
  91. package/src/utils/parseIntSafe.d.ts +1 -1
  92. package/src/utils/parseIntSafe.js +13 -13
  93. package/src/walletConnect/client/client.cjs +179 -176
  94. package/src/walletConnect/client/client.d.ts +17 -17
  95. package/src/walletConnect/client/client.js +179 -176
  96. package/src/walletConnect/client/index.d.ts +1 -1
  97. package/src/walletConnect/client/types.d.ts +4 -4
  98. package/src/walletConnect/fetchWalletConnectWallets.cjs +37 -52
  99. package/src/walletConnect/fetchWalletConnectWallets.d.ts +9 -10
  100. package/src/walletConnect/fetchWalletConnectWallets.js +38 -52
  101. package/src/walletConnect/index.d.ts +3 -3
  102. package/src/walletConnect/walletConnect.cjs +131 -130
  103. package/src/walletConnect/walletConnect.d.ts +52 -50
  104. package/src/walletConnect/walletConnect.js +131 -130
  105. package/src/walletConnect/walletConnectV2.cjs +419 -374
  106. package/src/walletConnect/walletConnectV2.d.ts +326 -61
  107. package/src/walletConnect/walletConnectV2.js +420 -375
  108. package/src/injected/MetaMask.cjs +0 -15
  109. package/src/injected/MetaMask.d.ts +0 -5
  110. package/src/injected/MetaMask.js +0 -11
  111. package/src/injected/OKX.cjs +0 -15
  112. package/src/injected/OKX.d.ts +0 -5
  113. package/src/injected/OKX.js +0 -11
  114. package/src/injected/UnknownInjectedWallet.cjs +0 -14
  115. package/src/injected/UnknownInjectedWallet.d.ts +0 -4
  116. package/src/injected/UnknownInjectedWallet.js +0 -10
  117. package/src/injected/index.cjs +0 -53
  118. package/src/injected/index.js +0 -49
@@ -1,202 +1,198 @@
1
1
  import { __awaiter } from '../_virtual/_tslib.js';
2
- import { ethers } from 'ethers';
2
+ import { createPublicClient, http, formatEther } from 'viem';
3
3
  import { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
4
- import { parseEvmNetworks, DynamicError } from '@dynamic-labs/utils';
4
+ import { parseEvmNetworks, getOrMapViemChain, retryableFn, FALLBACK_UNDEFINED, DynamicError } from '@dynamic-labs/utils';
5
5
  import { ProviderChain } from '@dynamic-labs/rpc-providers';
6
6
  import { findEvmNetwork } from './utils/findEvmNetwork.js';
7
7
 
8
- class EthWalletConnector extends WalletConnectorBase {
9
- getRpcProvider() {
10
- var _a, _b, _c;
11
- return __awaiter(this, void 0, void 0, function* () {
12
- const networkId = (_a = (yield this.getNetwork())) !== null && _a !== void 0 ? _a : 1;
13
- if (this.evmNetworks.length === 0) {
14
- return undefined;
15
- }
16
- const configurations = {
17
- cosmos: [],
18
- evm: this.evmNetworks,
19
- solana: [],
20
- starknet: undefined,
21
- };
22
- return (_c = (_b = this.chainRpcProviders) === null || _b === void 0 ? void 0 : _b.getEvmProviderByChainId(configurations, networkId)) === null || _c === void 0 ? void 0 : _c.provider;
23
- });
24
- }
25
- constructor(props) {
26
- var _a;
27
- super(props);
28
- this.evmNetworkRpcMap = () => this.evmNetworks.reduce((acc, network) => {
29
- var _a;
30
- [acc[network.chainId]] = ((_a = network === null || network === void 0 ? void 0 : network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a.length)
31
- ? network.privateCustomerRpcUrls
32
- : network.rpcUrls;
33
- return acc;
34
- }, {});
35
- this.evmNetworks = parseEvmNetworks(props.evmNetworks);
36
- this.chainRpcProviders = props.chainRpcProviders;
37
- (_a = this.chainRpcProviders) === null || _a === void 0 ? void 0 : _a.registerChainProviders(ProviderChain.EVM, (config) => {
38
- const rpcProviders = {};
39
- if (config === null || config === void 0 ? void 0 : config.evm) {
40
- rpcProviders.evm = parseEvmNetworks(config.evm).map((network) => {
41
- var _a;
42
- const rpcUrl = ((_a = network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || network.rpcUrls[0];
43
- const provider = new ethers.providers.JsonRpcProvider(rpcUrl, network.chainId);
44
- return {
45
- chainId: network.chainId,
46
- chainName: network.name,
47
- provider,
48
- };
49
- });
50
- }
51
- return rpcProviders.evm;
52
- });
53
- }
54
- getNetwork() {
55
- return __awaiter(this, void 0, void 0, function* () {
56
- const provider = this.getWeb3Provider();
57
- if (!this.supportsNetworkSwitching ||
58
- !provider ||
59
- !('getNetwork' in provider)) {
60
- return Promise.resolve(undefined);
61
- }
62
- const network = yield provider.getNetwork();
63
- return Promise.resolve(network === null || network === void 0 ? void 0 : network.chainId);
64
- });
65
- }
66
- getNameService() {
67
- return __awaiter(this, void 0, void 0, function* () {
68
- const [[address], provider] = yield Promise.all([
69
- this.getConnectedAccounts(),
70
- this.getRpcProvider(),
71
- ]);
72
- if (!address || !provider || !('lookupAddress' in provider)) {
73
- return;
74
- }
75
- const [ensName, ensAvatar] = yield Promise.all([
76
- provider.lookupAddress(address),
77
- provider.getAvatar(address),
78
- ]);
79
- const ensData = {
80
- avatar: ensAvatar !== null && ensAvatar !== void 0 ? ensAvatar : undefined,
81
- name: ensName !== null && ensName !== void 0 ? ensName : undefined,
82
- };
83
- return ensData;
84
- });
85
- }
86
- getSigner() {
87
- var _a;
88
- return __awaiter(this, void 0, void 0, function* () {
89
- return (_a = this.getWeb3Provider()) === null || _a === void 0 ? void 0 : _a.getSigner();
90
- });
91
- }
92
- getBalance() {
93
- var _a;
94
- return __awaiter(this, void 0, void 0, function* () {
95
- // This is equivalent to getSigner().getAddress() but does not crash
96
- // if the signer is not available
97
- const [address] = yield this.getConnectedAccounts();
98
- if (!address)
99
- return;
100
- const result = yield ((_a = this.getWeb3Provider()) === null || _a === void 0 ? void 0 : _a.getBalance(address));
101
- if (!result)
102
- return;
103
- return ethers.utils.formatEther(result);
104
- });
105
- }
106
- supportsNetworkSwitching() {
107
- return true;
108
- }
109
- switchNetwork({ networkName, networkChainId, }) {
110
- return __awaiter(this, void 0, void 0, function* () {
111
- const network = findEvmNetwork({
112
- chainId: networkChainId,
113
- name: networkName,
114
- networks: this.evmNetworks,
115
- });
116
- if (!network) {
117
- throw new DynamicError(`Could not find network mapping for chain ${networkName ? networkName : networkChainId}`);
118
- }
119
- if (!this.supportsNetworkSwitching()) {
120
- throw new DynamicError('Network switching is not supported');
121
- }
122
- const provider = this.getWeb3Provider();
123
- if (!provider) {
124
- throw new DynamicError('Provider not found');
125
- }
126
- return this.providerSwitchNetwork({ network, provider });
127
- });
128
- }
129
- getConnectedAccounts() {
130
- return __awaiter(this, void 0, void 0, function* () {
131
- const provider = this.getWeb3Provider();
132
- if (!provider)
133
- return [];
134
- return provider.send('eth_accounts', []);
135
- });
136
- }
137
- providerSwitchNetwork({ network, provider, }) {
138
- var _a, _b, _c;
139
- return __awaiter(this, void 0, void 0, function* () {
140
- const { chainId } = network;
141
- const currentNetworkId = yield this.getNetwork();
142
- if (currentNetworkId && currentNetworkId === chainId) {
143
- return;
144
- }
145
- try {
146
- if (!this.supportsNetworkSwitching()) {
147
- throw new DynamicError('Network switching is not supported');
148
- }
149
- return yield provider.send('wallet_switchEthereumChain', [
150
- {
151
- chainId: `0x${chainId.toString(16)}`,
152
- },
153
- ]);
154
- }
155
- catch (error) {
156
- if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
157
- (typeof error === 'string' && error.includes('rejected'))) {
158
- throw new DynamicError("User rejected the wallet's request to switch network");
159
- }
160
- else if (error.code === 4902 ||
161
- error.message.includes('Unrecognized chain') ||
162
- // https://github.com/MetaMask/metamask-mobile/issues/3312#issuecomment-1065923294
163
- ((_c = (_b = error === null || error === void 0 ? void 0 : error.data) === null || _b === void 0 ? void 0 : _b.orginalError) === null || _c === void 0 ? void 0 : _c.code) === 4902) {
164
- // error code indicates the chain has not been added yet
165
- // https://docs.metamask.io/guide/rpc-api.html#usage-with-wallet-switchethereumchain
166
- return this.providerAddNetwork({ network, provider });
167
- }
168
- else {
169
- throw error;
170
- }
171
- }
172
- });
173
- }
174
- providerAddNetwork({ network, provider, }) {
175
- var _a;
176
- return __awaiter(this, void 0, void 0, function* () {
177
- const { blockExplorerUrls, chainId, nativeCurrency, rpcUrls, name } = network;
178
- try {
179
- return yield provider.send('wallet_addEthereumChain', [
180
- {
181
- blockExplorerUrls,
182
- chainId: `0x${chainId.toString(16)}`,
183
- chainName: name,
184
- nativeCurrency,
185
- rpcUrls,
186
- },
187
- ]);
188
- }
189
- catch (error) {
190
- if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
191
- (typeof error === 'string' && error.includes('rejected'))) {
192
- throw new DynamicError("User rejected the wallet's request to add network");
193
- }
194
- else {
195
- throw error;
196
- }
197
- }
198
- });
199
- }
8
+ class EthWalletConnector extends WalletConnectorBase {
9
+ getPublicClient() {
10
+ var _a, _b, _c;
11
+ return __awaiter(this, void 0, void 0, function* () {
12
+ const networkId = (_a = (yield this.getNetwork())) !== null && _a !== void 0 ? _a : 1;
13
+ if (this.evmNetworks.length === 0) {
14
+ return undefined;
15
+ }
16
+ const configurations = {
17
+ cosmos: [],
18
+ evm: this.evmNetworks,
19
+ solana: [],
20
+ starknet: undefined,
21
+ };
22
+ return (_c = (_b = this.chainRpcProviders) === null || _b === void 0 ? void 0 : _b.getEvmProviderByChainId(configurations, networkId)) === null || _c === void 0 ? void 0 : _c.provider;
23
+ });
24
+ }
25
+ constructor(props) {
26
+ var _a;
27
+ super(props);
28
+ this.evmNetworkRpcMap = () => this.evmNetworks.reduce((acc, network) => {
29
+ var _a;
30
+ [acc[network.chainId]] = ((_a = network === null || network === void 0 ? void 0 : network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a.length)
31
+ ? network.privateCustomerRpcUrls
32
+ : network.rpcUrls;
33
+ return acc;
34
+ }, {});
35
+ this.evmNetworks = parseEvmNetworks(props.evmNetworks);
36
+ this.chainRpcProviders = props.chainRpcProviders;
37
+ (_a = this.chainRpcProviders) === null || _a === void 0 ? void 0 : _a.registerChainProviders(ProviderChain.EVM, (config) => {
38
+ const rpcProviders = {};
39
+ if (config === null || config === void 0 ? void 0 : config.evm) {
40
+ rpcProviders.evm = parseEvmNetworks(config.evm).map((network) => {
41
+ var _a;
42
+ const rpcUrl = ((_a = network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || network.rpcUrls[0];
43
+ const provider = createPublicClient({
44
+ chain: getOrMapViemChain(network),
45
+ transport: http(rpcUrl),
46
+ });
47
+ return {
48
+ chainId: network.chainId,
49
+ chainName: network.name,
50
+ provider,
51
+ };
52
+ });
53
+ }
54
+ return rpcProviders.evm;
55
+ });
56
+ }
57
+ getNetwork() {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ const provider = this.getWalletClient();
60
+ if (!this.supportsNetworkSwitching || !provider) {
61
+ return Promise.resolve(undefined);
62
+ }
63
+ return retryableFn(provider.getChainId, {
64
+ fallbackValue: FALLBACK_UNDEFINED,
65
+ });
66
+ });
67
+ }
68
+ getNameService() {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ const [[address], rpcProvider] = yield Promise.all([
71
+ this.getConnectedAccounts(),
72
+ this.getPublicClient(),
73
+ ]);
74
+ if (!address || !rpcProvider) {
75
+ return;
76
+ }
77
+ const ensName = yield rpcProvider.getEnsName({
78
+ address: address,
79
+ });
80
+ const ensAvatar = ensName
81
+ ? yield rpcProvider.getEnsAvatar({
82
+ name: ensName,
83
+ })
84
+ : undefined;
85
+ const ensData = {
86
+ avatar: ensAvatar !== null && ensAvatar !== void 0 ? ensAvatar : undefined,
87
+ name: ensName !== null && ensName !== void 0 ? ensName : undefined,
88
+ };
89
+ return ensData;
90
+ });
91
+ }
92
+ getSigner() {
93
+ return __awaiter(this, void 0, void 0, function* () {
94
+ return this.getWalletClient();
95
+ });
96
+ }
97
+ getBalance() {
98
+ return __awaiter(this, void 0, void 0, function* () {
99
+ // This is equivalent to getSigner().getAddress() but does not crash
100
+ // if the signer is not available
101
+ const [address] = yield this.getConnectedAccounts();
102
+ if (!address)
103
+ return;
104
+ const client = yield this.getPublicClient();
105
+ const result = yield (client === null || client === void 0 ? void 0 : client.getBalance({
106
+ address: address,
107
+ }));
108
+ if (!result && result !== BigInt(0))
109
+ return;
110
+ return formatEther(result);
111
+ });
112
+ }
113
+ supportsNetworkSwitching() {
114
+ return true;
115
+ }
116
+ switchNetwork({ networkName, networkChainId, }) {
117
+ return __awaiter(this, void 0, void 0, function* () {
118
+ const network = findEvmNetwork({
119
+ chainId: networkChainId,
120
+ name: networkName,
121
+ networks: this.evmNetworks,
122
+ });
123
+ if (!network) {
124
+ throw new DynamicError(`Could not find network mapping for chain ${networkName ? networkName : networkChainId}`);
125
+ }
126
+ if (!this.supportsNetworkSwitching()) {
127
+ throw new DynamicError('Network switching is not supported');
128
+ }
129
+ const provider = this.getWalletClient();
130
+ if (!provider) {
131
+ throw new DynamicError('Provider not found');
132
+ }
133
+ return this.providerSwitchNetwork({ network, provider });
134
+ });
135
+ }
136
+ getConnectedAccounts() {
137
+ return __awaiter(this, void 0, void 0, function* () {
138
+ const provider = this.getWalletClient();
139
+ if (!provider)
140
+ return [];
141
+ return retryableFn(provider.getAddresses, {
142
+ fallbackValue: [],
143
+ });
144
+ });
145
+ }
146
+ providerSwitchNetwork({ network, provider, }) {
147
+ var _a, _b, _c;
148
+ return __awaiter(this, void 0, void 0, function* () {
149
+ const { chainId } = network;
150
+ const currentNetworkId = yield this.getNetwork();
151
+ if (currentNetworkId && currentNetworkId === chainId) {
152
+ return;
153
+ }
154
+ try {
155
+ if (!this.supportsNetworkSwitching()) {
156
+ throw new DynamicError('Network switching is not supported');
157
+ }
158
+ return yield provider.switchChain(getOrMapViemChain(network));
159
+ }
160
+ catch (error) {
161
+ if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
162
+ (typeof error === 'string' && error.includes('rejected'))) {
163
+ throw new DynamicError("User rejected the wallet's request to switch network");
164
+ }
165
+ else if (error.code === 4902 ||
166
+ error.message.includes('Unrecognized chain') ||
167
+ // https://github.com/MetaMask/metamask-mobile/issues/3312#issuecomment-1065923294
168
+ ((_c = (_b = error === null || error === void 0 ? void 0 : error.data) === null || _b === void 0 ? void 0 : _b.orginalError) === null || _c === void 0 ? void 0 : _c.code) === 4902) {
169
+ // error code indicates the chain has not been added yet
170
+ // https://docs.metamask.io/guide/rpc-api.html#usage-with-wallet-switchethereumchain
171
+ return this.providerAddNetwork({ network, provider });
172
+ }
173
+ else {
174
+ throw error;
175
+ }
176
+ }
177
+ });
178
+ }
179
+ providerAddNetwork({ network, provider, }) {
180
+ var _a;
181
+ return __awaiter(this, void 0, void 0, function* () {
182
+ try {
183
+ return yield provider.addChain({ chain: getOrMapViemChain(network) });
184
+ }
185
+ catch (error) {
186
+ if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
187
+ (typeof error === 'string' && error.includes('rejected'))) {
188
+ throw new DynamicError("User rejected the wallet's request to add network");
189
+ }
190
+ else {
191
+ throw error;
192
+ }
193
+ }
194
+ });
195
+ }
200
196
  }
201
197
 
202
198
  export { EthWalletConnector };
@@ -0,0 +1,76 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _tslib = require('../../../_virtual/_tslib.cjs');
6
+ var walletSdk = require('@coinbase/wallet-sdk');
7
+ var viem = require('viem');
8
+ var utils = require('@dynamic-labs/utils');
9
+ var constants = require('../../constants.cjs');
10
+
11
+ const jsonRpcUrl = `https://mainnet.infura.io/v3/${constants.INFURA_ID}`;
12
+ const chainId = 1;
13
+ let coinbaseProvider;
14
+ const getCoinbaseProvider = ({ opts: { appLogoUrl, appName = '', evmNetworks = [] } = {}, handlers, }) => {
15
+ var _a, _b;
16
+ if (!coinbaseProvider) {
17
+ const coinbaseWalletSDK = new walletSdk.CoinbaseWalletSDK({
18
+ appLogoUrl,
19
+ appName,
20
+ eventListener: {
21
+ onEvent: (eventType) => {
22
+ if (eventType === 'walletlink_sdk.disconnected') {
23
+ handlers === null || handlers === void 0 ? void 0 : handlers.onDisconnect();
24
+ }
25
+ },
26
+ },
27
+ headlessMode: true,
28
+ });
29
+ const network = evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.find((network) => network.chainId === chainId);
30
+ const rpcUrl = ((_a = network === null || network === void 0 ? void 0 : network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) ||
31
+ ((_b = network === null || network === void 0 ? void 0 : network.rpcUrls) === null || _b === void 0 ? void 0 : _b[0]) ||
32
+ jsonRpcUrl;
33
+ coinbaseProvider = coinbaseWalletSDK.makeWeb3Provider(rpcUrl, chainId);
34
+ }
35
+ return coinbaseProvider;
36
+ };
37
+ const killCoinbaseSession = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
38
+ if (coinbaseProvider) {
39
+ coinbaseProvider.close();
40
+ coinbaseProvider.disconnect();
41
+ }
42
+ });
43
+ const fetchPublicAddress = (coinbaseProviderOpts, opts) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
44
+ var _a;
45
+ const provider = getCoinbaseProvider({ opts: coinbaseProviderOpts });
46
+ const { qrUrl } = provider;
47
+ if (!qrUrl) {
48
+ throw new utils.DynamicError('no qr url available');
49
+ }
50
+ (_a = opts === null || opts === void 0 ? void 0 : opts.onDisplayUri) === null || _a === void 0 ? void 0 : _a.call(opts, qrUrl);
51
+ const [address] = yield provider.request({
52
+ method: 'eth_requestAccounts',
53
+ });
54
+ return address;
55
+ });
56
+ const signMessage = (coinbaseProviderOpts, messageToSign) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
57
+ const provider = getCoinbaseProvider({ opts: coinbaseProviderOpts });
58
+ const [address] = yield provider.request({
59
+ method: 'eth_requestAccounts',
60
+ });
61
+ try {
62
+ return yield provider.request({
63
+ method: 'personal_sign',
64
+ params: [viem.toHex(viem.toBytes(messageToSign)), address.toLowerCase()],
65
+ });
66
+ }
67
+ catch (err) {
68
+ yield provider.close();
69
+ return undefined;
70
+ }
71
+ });
72
+
73
+ exports.fetchPublicAddress = fetchPublicAddress;
74
+ exports.getCoinbaseProvider = getCoinbaseProvider;
75
+ exports.killCoinbaseSession = killCoinbaseSession;
76
+ exports.signMessage = signMessage;
@@ -0,0 +1,6 @@
1
+ import { FetchPublicAddressOpts } from '@dynamic-labs/wallet-connector-core';
2
+ import { GetCoinbaseProvider, GetCoinbaseProviderOpts } from './types';
3
+ export declare const getCoinbaseProvider: GetCoinbaseProvider;
4
+ export declare const killCoinbaseSession: () => Promise<void>;
5
+ export declare const fetchPublicAddress: (coinbaseProviderOpts: GetCoinbaseProviderOpts, opts?: FetchPublicAddressOpts) => Promise<string | undefined>;
6
+ export declare const signMessage: (coinbaseProviderOpts: GetCoinbaseProviderOpts, messageToSign: string) => Promise<string | undefined>;
@@ -0,0 +1,69 @@
1
+ import { __awaiter } from '../../../_virtual/_tslib.js';
2
+ import { CoinbaseWalletSDK } from '@coinbase/wallet-sdk';
3
+ import { toHex, toBytes } from 'viem';
4
+ import { DynamicError } from '@dynamic-labs/utils';
5
+ import { INFURA_ID } from '../../constants.js';
6
+
7
+ const jsonRpcUrl = `https://mainnet.infura.io/v3/${INFURA_ID}`;
8
+ const chainId = 1;
9
+ let coinbaseProvider;
10
+ const getCoinbaseProvider = ({ opts: { appLogoUrl, appName = '', evmNetworks = [] } = {}, handlers, }) => {
11
+ var _a, _b;
12
+ if (!coinbaseProvider) {
13
+ const coinbaseWalletSDK = new CoinbaseWalletSDK({
14
+ appLogoUrl,
15
+ appName,
16
+ eventListener: {
17
+ onEvent: (eventType) => {
18
+ if (eventType === 'walletlink_sdk.disconnected') {
19
+ handlers === null || handlers === void 0 ? void 0 : handlers.onDisconnect();
20
+ }
21
+ },
22
+ },
23
+ headlessMode: true,
24
+ });
25
+ const network = evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.find((network) => network.chainId === chainId);
26
+ const rpcUrl = ((_a = network === null || network === void 0 ? void 0 : network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) ||
27
+ ((_b = network === null || network === void 0 ? void 0 : network.rpcUrls) === null || _b === void 0 ? void 0 : _b[0]) ||
28
+ jsonRpcUrl;
29
+ coinbaseProvider = coinbaseWalletSDK.makeWeb3Provider(rpcUrl, chainId);
30
+ }
31
+ return coinbaseProvider;
32
+ };
33
+ const killCoinbaseSession = () => __awaiter(void 0, void 0, void 0, function* () {
34
+ if (coinbaseProvider) {
35
+ coinbaseProvider.close();
36
+ coinbaseProvider.disconnect();
37
+ }
38
+ });
39
+ const fetchPublicAddress = (coinbaseProviderOpts, opts) => __awaiter(void 0, void 0, void 0, function* () {
40
+ var _a;
41
+ const provider = getCoinbaseProvider({ opts: coinbaseProviderOpts });
42
+ const { qrUrl } = provider;
43
+ if (!qrUrl) {
44
+ throw new DynamicError('no qr url available');
45
+ }
46
+ (_a = opts === null || opts === void 0 ? void 0 : opts.onDisplayUri) === null || _a === void 0 ? void 0 : _a.call(opts, qrUrl);
47
+ const [address] = yield provider.request({
48
+ method: 'eth_requestAccounts',
49
+ });
50
+ return address;
51
+ });
52
+ const signMessage = (coinbaseProviderOpts, messageToSign) => __awaiter(void 0, void 0, void 0, function* () {
53
+ const provider = getCoinbaseProvider({ opts: coinbaseProviderOpts });
54
+ const [address] = yield provider.request({
55
+ method: 'eth_requestAccounts',
56
+ });
57
+ try {
58
+ return yield provider.request({
59
+ method: 'personal_sign',
60
+ params: [toHex(toBytes(messageToSign)), address.toLowerCase()],
61
+ });
62
+ }
63
+ catch (err) {
64
+ yield provider.close();
65
+ return undefined;
66
+ }
67
+ });
68
+
69
+ export { fetchPublicAddress, getCoinbaseProvider, killCoinbaseSession, signMessage };
@@ -0,0 +1,2 @@
1
+ export * from './client';
2
+ export * from './types';
@@ -0,0 +1,14 @@
1
+ import { CoinbaseWalletProvider } from '@coinbase/wallet-sdk';
2
+ import { GenericNetwork } from '@dynamic-labs/types';
3
+ export type GetCoinbaseProviderOpts = {
4
+ appLogoUrl?: string;
5
+ appName?: string;
6
+ evmNetworks?: GenericNetwork[];
7
+ };
8
+ export type CoinbaseProviderHandlerOpts = {
9
+ onDisconnect(): Promise<void>;
10
+ };
11
+ export type GetCoinbaseProvider = (args: {
12
+ handlers?: CoinbaseProviderHandlerOpts;
13
+ opts?: GetCoinbaseProviderOpts;
14
+ }) => CoinbaseWalletProvider;
@@ -0,0 +1,71 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _tslib = require('../../_virtual/_tslib.cjs');
6
+ var viem = require('viem');
7
+ var EthWalletConnector = require('../EthWalletConnector.cjs');
8
+ var legacyEthProviderHelper = require('../legacyEthProviderHelper.cjs');
9
+ var client = require('./client/client.cjs');
10
+
11
+ class Coinbase extends EthWalletConnector.EthWalletConnector {
12
+ constructor(_a) {
13
+ var { appName, appLogoUrl, evmNetworks } = _a, props = _tslib.__rest(_a, ["appName", "appLogoUrl", "evmNetworks"]);
14
+ super(Object.assign({ evmNetworks }, props));
15
+ this.name = 'Coinbase';
16
+ this.supportedChains = ['EVM', 'ETH'];
17
+ this.connectedChain = 'EVM';
18
+ this.canConnectViaQrCode = true;
19
+ this.coinbaseProviderOpts = {
20
+ appLogoUrl: appLogoUrl,
21
+ appName: appName,
22
+ evmNetworks: evmNetworks,
23
+ };
24
+ }
25
+ setupEventListeners() {
26
+ const provider = legacyEthProviderHelper.LegacyEthProviderHelper.findProvider(this.name);
27
+ if (!provider) {
28
+ return;
29
+ }
30
+ const { tearDownEventListeners } = legacyEthProviderHelper.LegacyEthProviderHelper._setupEventListeners(this.name, this, viem.createPublicClient({ transport: viem.custom(provider) }));
31
+ this.teardownEventListeners = tearDownEventListeners;
32
+ }
33
+ getWalletClient() {
34
+ if (this.isInstalledOnBrowser()) {
35
+ return legacyEthProviderHelper.LegacyEthProviderHelper.findWalletClient(this.name);
36
+ }
37
+ return viem.createWalletClient({
38
+ transport: viem.custom(client.getCoinbaseProvider({
39
+ opts: this.coinbaseProviderOpts,
40
+ })),
41
+ });
42
+ }
43
+ isInstalledOnBrowser() {
44
+ return legacyEthProviderHelper.LegacyEthProviderHelper.isInstalledHelper(this.name);
45
+ }
46
+ fetchPublicAddress(opts) {
47
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
48
+ if (this.isInstalledOnBrowser()) {
49
+ return legacyEthProviderHelper.LegacyEthProviderHelper.fetchPublicAddressWithName(this.name);
50
+ }
51
+ return client.fetchPublicAddress(this.coinbaseProviderOpts, opts);
52
+ });
53
+ }
54
+ signMessage(messageToSign) {
55
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
56
+ if (this.isInstalledOnBrowser()) {
57
+ return legacyEthProviderHelper.LegacyEthProviderHelper.signMessageWithName(messageToSign, this.name);
58
+ }
59
+ return client.signMessage(this.coinbaseProviderOpts, messageToSign);
60
+ });
61
+ }
62
+ endSession() {
63
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
64
+ if (this.isInstalledOnBrowser())
65
+ return;
66
+ client.killCoinbaseSession();
67
+ });
68
+ }
69
+ }
70
+
71
+ exports.Coinbase = Coinbase;