@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.
- package/CHANGELOG.md +293 -0
- package/package.json +13 -10
- package/src/EthWalletConnector.cjs +189 -193
- package/src/EthWalletConnector.d.ts +298 -41
- package/src/EthWalletConnector.js +190 -194
- package/src/coinbase/client/client.cjs +76 -0
- package/src/coinbase/client/client.d.ts +6 -0
- package/src/coinbase/client/client.js +69 -0
- package/src/coinbase/client/index.d.ts +2 -0
- package/src/coinbase/client/types.d.ts +14 -0
- package/src/coinbase/coinbase.cjs +71 -0
- package/src/coinbase/coinbase.d.ts +535 -0
- package/src/coinbase/coinbase.js +67 -0
- package/src/coinbase/index.d.ts +3 -0
- package/src/constants.d.ts +1 -1
- package/src/ethProviderHelper.cjs +132 -209
- package/src/ethProviderHelper.d.ts +28 -36
- package/src/ethProviderHelper.js +133 -210
- package/src/index.cjs +30 -26
- package/src/index.d.ts +9 -8
- package/src/index.js +25 -20
- package/src/injected/BloctoInjected.cjs +6 -6
- package/src/injected/BloctoInjected.d.ts +4 -4
- package/src/injected/BloctoInjected.js +6 -6
- package/src/injected/BraveEvm.cjs +6 -6
- package/src/injected/BraveEvm.d.ts +4 -4
- package/src/injected/BraveEvm.js +6 -6
- package/src/injected/Dawn.cjs +6 -6
- package/src/injected/Dawn.d.ts +4 -4
- package/src/injected/Dawn.js +6 -6
- package/src/injected/ExodusEvm.cjs +8 -8
- package/src/injected/ExodusEvm.d.ts +5 -5
- package/src/injected/ExodusEvm.js +7 -7
- package/src/injected/Frame.cjs +6 -6
- package/src/injected/Frame.d.ts +4 -4
- package/src/injected/Frame.js +6 -6
- package/src/injected/GameStop.cjs +6 -6
- package/src/injected/GameStop.d.ts +4 -4
- package/src/injected/GameStop.js +6 -6
- package/src/injected/InjectedWalletBase.cjs +86 -65
- package/src/injected/InjectedWalletBase.d.ts +29 -24
- package/src/injected/InjectedWalletBase.js +86 -65
- package/src/injected/LegacyInjectedWalletBase.cjs +83 -0
- package/src/injected/LegacyInjectedWalletBase.d.ts +24 -0
- package/src/injected/LegacyInjectedWalletBase.js +81 -0
- package/src/injected/Opera.cjs +6 -6
- package/src/injected/Opera.d.ts +4 -4
- package/src/injected/Opera.js +6 -6
- package/src/injected/PhantomEvm.cjs +28 -28
- package/src/injected/PhantomEvm.d.ts +5 -5
- package/src/injected/PhantomEvm.js +28 -28
- package/src/injected/Rabby.cjs +8 -8
- package/src/injected/Rabby.d.ts +5 -5
- package/src/injected/Rabby.js +7 -7
- package/src/injected/Superb.cjs +6 -6
- package/src/injected/Superb.d.ts +4 -4
- package/src/injected/Superb.js +6 -6
- package/src/injected/Trust.cjs +8 -8
- package/src/injected/Trust.d.ts +5 -5
- package/src/injected/Trust.js +7 -7
- package/src/injected/Zerion.cjs +8 -8
- package/src/injected/Zerion.d.ts +5 -5
- package/src/injected/Zerion.js +7 -7
- package/src/injected/fetchInjectedWalletConnectors.cjs +33 -0
- package/src/injected/fetchInjectedWalletConnectors.d.ts +6 -0
- package/src/injected/fetchInjectedWalletConnectors.js +29 -0
- package/src/injected/index.d.ts +13 -16
- package/src/injected/legacyInjectedWallets.cjs +48 -0
- package/src/injected/legacyInjectedWallets.d.ts +3 -0
- package/src/injected/legacyInjectedWallets.js +43 -0
- package/src/legacyEthProviderHelper.cjs +187 -0
- package/src/legacyEthProviderHelper.d.ts +34 -0
- package/src/legacyEthProviderHelper.js +183 -0
- package/src/polyfills.cjs +11 -11
- package/src/polyfills.d.ts +1 -1
- package/src/polyfills.js +11 -11
- package/src/types.d.ts +37 -24
- package/src/utils/eventListenerHandlers.cjs +34 -0
- package/src/utils/eventListenerHandlers.d.ts +8 -0
- package/src/utils/eventListenerHandlers.js +30 -0
- package/src/utils/findEvmNetwork.cjs +13 -13
- package/src/utils/findEvmNetwork.d.ts +6 -6
- package/src/utils/findEvmNetwork.js +13 -13
- package/src/utils/isString.d.ts +1 -1
- package/src/utils/isUnsupportedProviderError/index.d.ts +1 -1
- package/src/utils/isUnsupportedProviderError/isUnsupportedProviderError.cjs +6 -6
- package/src/utils/isUnsupportedProviderError/isUnsupportedProviderError.d.ts +6 -6
- package/src/utils/isUnsupportedProviderError/isUnsupportedProviderError.js +6 -6
- package/src/utils/last.d.ts +1 -1
- package/src/utils/parseIntSafe.cjs +13 -13
- package/src/utils/parseIntSafe.d.ts +1 -1
- package/src/utils/parseIntSafe.js +13 -13
- package/src/walletConnect/client/client.cjs +179 -176
- package/src/walletConnect/client/client.d.ts +17 -17
- package/src/walletConnect/client/client.js +179 -176
- package/src/walletConnect/client/index.d.ts +1 -1
- package/src/walletConnect/client/types.d.ts +4 -4
- package/src/walletConnect/fetchWalletConnectWallets.cjs +37 -52
- package/src/walletConnect/fetchWalletConnectWallets.d.ts +9 -10
- package/src/walletConnect/fetchWalletConnectWallets.js +38 -52
- package/src/walletConnect/index.d.ts +3 -3
- package/src/walletConnect/walletConnect.cjs +131 -130
- package/src/walletConnect/walletConnect.d.ts +52 -50
- package/src/walletConnect/walletConnect.js +131 -130
- package/src/walletConnect/walletConnectV2.cjs +419 -374
- package/src/walletConnect/walletConnectV2.d.ts +326 -61
- package/src/walletConnect/walletConnectV2.js +420 -375
- package/src/injected/MetaMask.cjs +0 -15
- package/src/injected/MetaMask.d.ts +0 -5
- package/src/injected/MetaMask.js +0 -11
- package/src/injected/OKX.cjs +0 -15
- package/src/injected/OKX.d.ts +0 -5
- package/src/injected/OKX.js +0 -11
- package/src/injected/UnknownInjectedWallet.cjs +0 -14
- package/src/injected/UnknownInjectedWallet.d.ts +0 -4
- package/src/injected/UnknownInjectedWallet.js +0 -10
- package/src/injected/index.cjs +0 -53
- package/src/injected/index.js +0 -49
|
@@ -1,202 +1,198 @@
|
|
|
1
1
|
import { __awaiter } from '../_virtual/_tslib.js';
|
|
2
|
-
import {
|
|
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
|
-
|
|
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 =
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
return
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
if (!
|
|
124
|
-
throw new DynamicError(
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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,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;
|