@dynamic-labs/multi-wallet 0.16.15 → 0.16.17-viem.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.
- package/CHANGELOG.md +14 -0
- package/package.json +4 -4
- package/src/getOrMapViemChain.cjs +77 -0
- package/src/getOrMapViemChain.d.ts +11 -0
- package/src/getOrMapViemChain.js +51 -0
- package/src/multi-wallet.cjs +2 -3
- package/src/multi-wallet.js +2 -3
- package/src/rpcProviders.cjs +6 -2
- package/src/rpcProviders.js +6 -2
- package/src/types.d.ts +16 -8
- package/src/utils/message.cjs +2 -2
- package/src/utils/message.js +1 -1
- package/src/utils/shouldLowercaseAddress.cjs +1 -1
- package/src/utils/shouldLowercaseAddress.js +1 -1
- package/src/wallets/algorand/myalgo.d.ts +1 -2
- package/src/wallets/clients/coinbase/coinbase.cjs +2 -2
- package/src/wallets/clients/coinbase/coinbase.js +2 -2
- package/src/wallets/clients/walletConnect/walletConnect.cjs +9 -5
- package/src/wallets/clients/walletConnect/walletConnect.d.ts +2 -2
- package/src/wallets/clients/walletConnect/walletConnect.js +9 -5
- package/src/wallets/ethereum/BloctoEvm.d.ts +4 -2
- package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.cjs +35 -14
- package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.d.ts +4 -4
- package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.js +35 -14
- package/src/wallets/ethereum/coinbase.cjs +18 -7
- package/src/wallets/ethereum/coinbase.d.ts +4 -2
- package/src/wallets/ethereum/coinbase.js +18 -7
- package/src/wallets/ethereum/ethProvider.cjs +13 -29
- package/src/wallets/ethereum/ethProvider.d.ts +7 -7
- package/src/wallets/ethereum/ethProvider.js +13 -29
- package/src/wallets/ethereum/ethProviderHelper.cjs +52 -34
- package/src/wallets/ethereum/ethProviderHelper.d.ts +20 -20
- package/src/wallets/ethereum/ethProviderHelper.js +52 -34
- package/src/wallets/ethereum/fortmatic.cjs +15 -7
- package/src/wallets/ethereum/fortmatic.d.ts +5 -3
- package/src/wallets/ethereum/fortmatic.js +15 -7
- package/src/wallets/ethereum/meta-mask.cjs +13 -2
- package/src/wallets/ethereum/meta-mask.d.ts +5 -3
- package/src/wallets/ethereum/meta-mask.js +13 -2
- package/src/wallets/walletConnect/walletConnect.cjs +8 -6
- package/src/wallets/walletConnect/walletConnect.d.ts +4 -4
- package/src/wallets/walletConnect/walletConnect.js +8 -6
- package/src/wallets/walletConnect/walletConnectV2.cjs +11 -7
- package/src/wallets/walletConnect/walletConnectV2.d.ts +4 -4
- package/src/wallets/walletConnect/walletConnectV2.js +11 -7
- package/src/wallets/window.d.ts +3 -1
- package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.cjs +0 -54
- package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.d.ts +0 -3
- package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.js +0 -50
- package/src/utils/assignConfirmationScreenToProvider/index.d.ts +0 -1
- package/src/utils/isFunction/isFunction.cjs +0 -8
- package/src/utils/isFunction/isFunction.js +0 -4
- package/src/wallets/ethereum/BloctoEvm.cjs +0 -140
- package/src/wallets/ethereum/BloctoEvm.js +0 -134
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LoginWithMagicLinkEvents, MagicUserMetadata, PromiEvent } from 'magic-sdk';
|
|
2
|
-
import {
|
|
2
|
+
import { PublicClient, WalletClient } from 'viem';
|
|
3
3
|
import { Chain, WalletConnector, WalletEventListeners } from '@dynamic-labs/wallet-connector-core';
|
|
4
4
|
import { WalletUiUtils } from '../../../../types';
|
|
5
5
|
import { CancellablePromise } from '../../../../utils/CancellablePromise';
|
|
@@ -39,9 +39,9 @@ export declare abstract class MagicWalletConnector extends MagicClientNetworkHan
|
|
|
39
39
|
getBalance(): Promise<string | undefined>;
|
|
40
40
|
getConnectedAccounts(): Promise<string[]>;
|
|
41
41
|
getNetwork(): Promise<number | undefined>;
|
|
42
|
-
getRpcProvider(): Promise<void |
|
|
43
|
-
getSigner(): Promise<
|
|
44
|
-
getWeb3Provider(): Promise<
|
|
42
|
+
getRpcProvider(): Promise<void | PublicClient | undefined>;
|
|
43
|
+
getSigner(): Promise<WalletClient>;
|
|
44
|
+
getWeb3Provider(): Promise<PublicClient>;
|
|
45
45
|
isInstalledOnBrowser(): boolean;
|
|
46
46
|
proveOwnership(messageToSign: string): Promise<string | undefined>;
|
|
47
47
|
setupEventListeners(listeners: WalletEventListeners): void;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
|
-
import {
|
|
3
|
-
import { DynamicError } from '../../../../errors.js';
|
|
2
|
+
import { formatEther, createWalletClient, custom, createPublicClient, fromHex } from 'viem';
|
|
4
3
|
import { logger } from '../../../../utils/logger.js';
|
|
5
|
-
import { assignConfirmationScreenToProvider } from '../../../../utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.js';
|
|
6
4
|
import { CancellablePromise } from '../../../../utils/CancellablePromise/CancellablePromise.js';
|
|
7
5
|
import { MagicClientNetworkHandler } from '../MagicClientNetworkHandler/MagicClientNetworkHandler.js';
|
|
8
6
|
|
|
@@ -80,12 +78,10 @@ class MagicWalletConnector extends MagicClientNetworkHandler {
|
|
|
80
78
|
}
|
|
81
79
|
getBalance() {
|
|
82
80
|
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
+
const signer = yield this.getSigner();
|
|
83
82
|
const provider = yield this.getWeb3Provider();
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const signer = provider.getSigner();
|
|
87
|
-
const userAddress = yield signer.getAddress();
|
|
88
|
-
return ethers.utils.formatEther(yield provider.getBalance(userAddress));
|
|
83
|
+
const [userAddress] = yield signer.getAddresses();
|
|
84
|
+
return formatEther(yield provider.getBalance({ address: userAddress }));
|
|
89
85
|
});
|
|
90
86
|
}
|
|
91
87
|
getConnectedAccounts() {
|
|
@@ -109,15 +105,37 @@ class MagicWalletConnector extends MagicClientNetworkHandler {
|
|
|
109
105
|
getSigner() {
|
|
110
106
|
return __awaiter(this, void 0, void 0, function* () {
|
|
111
107
|
const provider = yield this.getWeb3Provider();
|
|
112
|
-
return provider
|
|
108
|
+
return createWalletClient({ transport: custom(provider) });
|
|
113
109
|
});
|
|
114
110
|
}
|
|
115
111
|
getWeb3Provider() {
|
|
116
112
|
return __awaiter(this, void 0, void 0, function* () {
|
|
117
113
|
const client = this.getClient();
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
114
|
+
const publicClient = createPublicClient({
|
|
115
|
+
transport: custom({
|
|
116
|
+
request: (args) => __awaiter(this, void 0, void 0, function* () {
|
|
117
|
+
var _a, _b;
|
|
118
|
+
if (args.method === 'personal_sign') {
|
|
119
|
+
return this._walletUiUtils.signMessage({
|
|
120
|
+
handler: () => client.rpcProvider.request(args),
|
|
121
|
+
message: fromHex((_a = args.params) === null || _a === void 0 ? void 0 : _a[0], 'string'),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
else if (args.method === 'eth_sendTransaction') {
|
|
125
|
+
return this._walletUiUtils.sendTransaction({
|
|
126
|
+
handler: () => client.rpcProvider.request(args),
|
|
127
|
+
transaction: (_b = args.params) === null || _b === void 0 ? void 0 : _b[0],
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
return client.rpcProvider.request(args);
|
|
132
|
+
}
|
|
133
|
+
}),
|
|
134
|
+
}, {
|
|
135
|
+
retryCount: 0,
|
|
136
|
+
}),
|
|
137
|
+
});
|
|
138
|
+
return publicClient;
|
|
121
139
|
});
|
|
122
140
|
}
|
|
123
141
|
isInstalledOnBrowser() {
|
|
@@ -136,8 +154,11 @@ class MagicWalletConnector extends MagicClientNetworkHandler {
|
|
|
136
154
|
}
|
|
137
155
|
signMessage(messageToSign) {
|
|
138
156
|
return __awaiter(this, void 0, void 0, function* () {
|
|
139
|
-
const
|
|
140
|
-
return
|
|
157
|
+
const signer = yield this.getSigner();
|
|
158
|
+
return signer.signMessage({
|
|
159
|
+
account: (yield this.fetchPublicAddress()),
|
|
160
|
+
message: messageToSign,
|
|
161
|
+
});
|
|
141
162
|
});
|
|
142
163
|
}
|
|
143
164
|
supportsNetworkSwitching() {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var tslib = require('tslib');
|
|
4
|
-
var
|
|
4
|
+
var viem = require('viem');
|
|
5
5
|
var coinbase = require('../clients/coinbase/coinbase.cjs');
|
|
6
6
|
var normalizeWalletName = require('../../utils/normalizeWalletName/normalizeWalletName.cjs');
|
|
7
7
|
var ethProviderHelper = require('./ethProviderHelper.cjs');
|
|
@@ -27,18 +27,29 @@ class Coinbase extends ethProvider.EthProvider {
|
|
|
27
27
|
return normalizeWalletName.normalizeWalletName(this.name);
|
|
28
28
|
}
|
|
29
29
|
setupEventListeners(listeners) {
|
|
30
|
-
|
|
30
|
+
const provider = this.ethProviderHelper.findProvider(this.name);
|
|
31
|
+
if (!provider) {
|
|
32
|
+
return () => { };
|
|
33
|
+
}
|
|
34
|
+
return this.ethProviderHelper._setupEventListeners(listeners, this.name, viem.createPublicClient({
|
|
35
|
+
transport: viem.custom(provider),
|
|
36
|
+
}));
|
|
31
37
|
}
|
|
32
38
|
teardownEventListeners() {
|
|
33
39
|
return this.ethProviderHelper._teardownEventListeners(this.name);
|
|
34
40
|
}
|
|
35
41
|
getWeb3Provider() {
|
|
36
|
-
|
|
37
|
-
|
|
42
|
+
const provider = this.ethProviderHelper.findProvider(this.name);
|
|
43
|
+
if (this.isInstalledOnBrowser() && provider) {
|
|
44
|
+
return viem.createWalletClient({
|
|
45
|
+
transport: viem.custom(provider),
|
|
46
|
+
});
|
|
38
47
|
}
|
|
39
|
-
return
|
|
40
|
-
|
|
41
|
-
|
|
48
|
+
return viem.createWalletClient({
|
|
49
|
+
transport: viem.custom(coinbase.getCoinbaseProvider({
|
|
50
|
+
opts: this.coinbaseProviderOpts,
|
|
51
|
+
})),
|
|
52
|
+
});
|
|
42
53
|
}
|
|
43
54
|
isInstalledOnBrowser() {
|
|
44
55
|
return this.ethProviderHelper.isInstalledHelper(this.name);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { WalletClient } from 'viem';
|
|
2
2
|
import { Chain, FetchPublicAddressOpts, WalletConnector, WalletEventListeners } from '@dynamic-labs/wallet-connector-core';
|
|
3
3
|
import { EthProviderHelper } from './ethProviderHelper';
|
|
4
4
|
import { EthProvider } from './ethProvider';
|
|
@@ -17,10 +17,12 @@ declare class Coinbase extends EthProvider implements WalletConnector {
|
|
|
17
17
|
appName?: string;
|
|
18
18
|
evmNetworks: EvmNetwork[];
|
|
19
19
|
});
|
|
20
|
+
providerResources: string[] | undefined;
|
|
21
|
+
switchNetworkOnlyFromWallet: boolean | undefined;
|
|
20
22
|
get key(): string;
|
|
21
23
|
setupEventListeners(listeners: WalletEventListeners): () => void;
|
|
22
24
|
teardownEventListeners(): void;
|
|
23
|
-
getWeb3Provider():
|
|
25
|
+
getWeb3Provider(): WalletClient;
|
|
24
26
|
isInstalledOnBrowser(): boolean;
|
|
25
27
|
connect(): Promise<void>;
|
|
26
28
|
fetchPublicAddress(opts?: FetchPublicAddressOpts): Promise<string | undefined>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
|
-
import {
|
|
2
|
+
import { createPublicClient, custom, createWalletClient } from 'viem';
|
|
3
3
|
import { getCoinbaseProvider, fetchPublicAddress, signMessage, killCoinbaseSession } from '../clients/coinbase/coinbase.js';
|
|
4
4
|
import { normalizeWalletName } from '../../utils/normalizeWalletName/normalizeWalletName.js';
|
|
5
5
|
import { EthProviderHelper } from './ethProviderHelper.js';
|
|
@@ -25,18 +25,29 @@ class Coinbase extends EthProvider {
|
|
|
25
25
|
return normalizeWalletName(this.name);
|
|
26
26
|
}
|
|
27
27
|
setupEventListeners(listeners) {
|
|
28
|
-
|
|
28
|
+
const provider = this.ethProviderHelper.findProvider(this.name);
|
|
29
|
+
if (!provider) {
|
|
30
|
+
return () => { };
|
|
31
|
+
}
|
|
32
|
+
return this.ethProviderHelper._setupEventListeners(listeners, this.name, createPublicClient({
|
|
33
|
+
transport: custom(provider),
|
|
34
|
+
}));
|
|
29
35
|
}
|
|
30
36
|
teardownEventListeners() {
|
|
31
37
|
return this.ethProviderHelper._teardownEventListeners(this.name);
|
|
32
38
|
}
|
|
33
39
|
getWeb3Provider() {
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
const provider = this.ethProviderHelper.findProvider(this.name);
|
|
41
|
+
if (this.isInstalledOnBrowser() && provider) {
|
|
42
|
+
return createWalletClient({
|
|
43
|
+
transport: custom(provider),
|
|
44
|
+
});
|
|
36
45
|
}
|
|
37
|
-
return
|
|
38
|
-
|
|
39
|
-
|
|
46
|
+
return createWalletClient({
|
|
47
|
+
transport: custom(getCoinbaseProvider({
|
|
48
|
+
opts: this.coinbaseProviderOpts,
|
|
49
|
+
})),
|
|
50
|
+
});
|
|
40
51
|
}
|
|
41
52
|
isInstalledOnBrowser() {
|
|
42
53
|
return this.ethProviderHelper.isInstalledHelper(this.name);
|
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var tslib = require('tslib');
|
|
6
|
-
var
|
|
6
|
+
var viem = require('viem');
|
|
7
7
|
var errors = require('../../errors.cjs');
|
|
8
8
|
var rpcProviders = require('../../rpcProviders.cjs');
|
|
9
|
+
var getOrMapViemChain = require('../../getOrMapViemChain.cjs');
|
|
9
10
|
var evmNetwork = require('./evm-network.cjs');
|
|
10
11
|
|
|
11
12
|
class EthProvider {
|
|
@@ -33,16 +34,16 @@ class EthProvider {
|
|
|
33
34
|
}
|
|
34
35
|
constructor({ evmNetworks }) {
|
|
35
36
|
this.getBalance = () => tslib.__awaiter(this, void 0, void 0, function* () {
|
|
36
|
-
var _a;
|
|
37
37
|
// This is equivalent to getSigner().getAddress() but does not crash
|
|
38
38
|
// if the signer is not available
|
|
39
39
|
const [address] = yield this.getConnectedAccounts();
|
|
40
40
|
if (!address)
|
|
41
41
|
return;
|
|
42
|
-
const
|
|
43
|
-
|
|
42
|
+
const client = yield this.getRpcProvider();
|
|
43
|
+
const result = yield (client === null || client === void 0 ? void 0 : client.getBalance({ address: address }));
|
|
44
|
+
if (!result && result !== BigInt(0))
|
|
44
45
|
return;
|
|
45
|
-
return
|
|
46
|
+
return viem.formatEther(result);
|
|
46
47
|
});
|
|
47
48
|
this.evmNetworkRpcMap = () => this.evmNetworks.reduce((acc, network) => {
|
|
48
49
|
var _a;
|
|
@@ -55,20 +56,16 @@ class EthProvider {
|
|
|
55
56
|
}
|
|
56
57
|
getNetwork() {
|
|
57
58
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
58
|
-
const
|
|
59
|
-
if (!this.supportsNetworkSwitching ||
|
|
60
|
-
!provider ||
|
|
61
|
-
!('getNetwork' in provider)) {
|
|
59
|
+
const walletClient = this.getWeb3Provider();
|
|
60
|
+
if (!this.supportsNetworkSwitching || !walletClient) {
|
|
62
61
|
return Promise.resolve(undefined);
|
|
63
62
|
}
|
|
64
|
-
|
|
65
|
-
return Promise.resolve(network === null || network === void 0 ? void 0 : network.chainId);
|
|
63
|
+
return walletClient.getChainId();
|
|
66
64
|
});
|
|
67
65
|
}
|
|
68
66
|
getSigner() {
|
|
69
|
-
var _a;
|
|
70
67
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
71
|
-
return
|
|
68
|
+
return this.getWeb3Provider();
|
|
72
69
|
});
|
|
73
70
|
}
|
|
74
71
|
supportsNetworkSwitching() {
|
|
@@ -99,7 +96,7 @@ class EthProvider {
|
|
|
99
96
|
const provider = this.getWeb3Provider();
|
|
100
97
|
if (!provider)
|
|
101
98
|
return [];
|
|
102
|
-
return provider.
|
|
99
|
+
return provider.getAddresses();
|
|
103
100
|
});
|
|
104
101
|
}
|
|
105
102
|
providerSwitchNetwork({ network, provider, }) {
|
|
@@ -114,11 +111,7 @@ class EthProvider {
|
|
|
114
111
|
if (!this.supportsNetworkSwitching()) {
|
|
115
112
|
throw new errors.DynamicError('Network switching is not supported');
|
|
116
113
|
}
|
|
117
|
-
return yield provider.
|
|
118
|
-
{
|
|
119
|
-
chainId: `0x${chainId.toString(16)}`,
|
|
120
|
-
},
|
|
121
|
-
]);
|
|
114
|
+
return yield provider.switchChain(getOrMapViemChain.getOrMapViemChain(network));
|
|
122
115
|
}
|
|
123
116
|
catch (error) {
|
|
124
117
|
if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
|
|
@@ -142,17 +135,8 @@ class EthProvider {
|
|
|
142
135
|
providerAddNetwork({ network, provider, }) {
|
|
143
136
|
var _a;
|
|
144
137
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
145
|
-
const { blockExplorerUrls, chainId, nativeCurrency, rpcUrls, chainName } = network;
|
|
146
138
|
try {
|
|
147
|
-
return yield provider.
|
|
148
|
-
{
|
|
149
|
-
blockExplorerUrls,
|
|
150
|
-
chainId: `0x${chainId.toString(16)}`,
|
|
151
|
-
chainName,
|
|
152
|
-
nativeCurrency,
|
|
153
|
-
rpcUrls,
|
|
154
|
-
},
|
|
155
|
-
]);
|
|
139
|
+
return yield provider.addChain({ chain: getOrMapViemChain.getOrMapViemChain(network) });
|
|
156
140
|
}
|
|
157
141
|
catch (error) {
|
|
158
142
|
if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PublicClient, WalletClient } from 'viem';
|
|
2
2
|
import { EvmNetwork } from './evm-network';
|
|
3
3
|
export type SwitchNetworkOps = {
|
|
4
4
|
networkChainId?: number;
|
|
@@ -9,25 +9,25 @@ type EvmRpcMap = {
|
|
|
9
9
|
};
|
|
10
10
|
export declare abstract class EthProvider {
|
|
11
11
|
evmNetworks: EvmNetwork[];
|
|
12
|
-
abstract getWeb3Provider():
|
|
12
|
+
abstract getWeb3Provider(): WalletClient | undefined;
|
|
13
13
|
getDeepLink(): string | undefined;
|
|
14
|
-
getRpcProvider(): Promise<
|
|
14
|
+
getRpcProvider(): Promise<PublicClient | undefined>;
|
|
15
15
|
constructor({ evmNetworks }: {
|
|
16
16
|
evmNetworks: EvmNetwork[];
|
|
17
17
|
});
|
|
18
18
|
getNetwork(): Promise<number | undefined>;
|
|
19
|
-
getSigner(): Promise<
|
|
19
|
+
getSigner(): Promise<WalletClient | undefined>;
|
|
20
20
|
getBalance: () => Promise<string | undefined>;
|
|
21
21
|
supportsNetworkSwitching(): boolean;
|
|
22
22
|
switchNetwork({ networkName, networkChainId, }: SwitchNetworkOps): Promise<void>;
|
|
23
|
-
getConnectedAccounts(): Promise
|
|
23
|
+
getConnectedAccounts(): Promise<`0x${string}`[]>;
|
|
24
24
|
protected providerSwitchNetwork({ network, provider, }: {
|
|
25
25
|
network: EvmNetwork;
|
|
26
|
-
provider:
|
|
26
|
+
provider: WalletClient;
|
|
27
27
|
}): Promise<void>;
|
|
28
28
|
protected providerAddNetwork({ network, provider, }: {
|
|
29
29
|
network: EvmNetwork;
|
|
30
|
-
provider:
|
|
30
|
+
provider: WalletClient;
|
|
31
31
|
}): Promise<void>;
|
|
32
32
|
protected evmNetworkRpcMap: () => EvmRpcMap;
|
|
33
33
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
|
-
import {
|
|
2
|
+
import { formatEther } from 'viem';
|
|
3
3
|
import { DynamicError } from '../../errors.js';
|
|
4
4
|
import { getEvmDefaultRpcProvider, getEvmRpcProviderByChainId } from '../../rpcProviders.js';
|
|
5
|
+
import { getOrMapViemChain } from '../../getOrMapViemChain.js';
|
|
5
6
|
import { findEvmNetwork } from './evm-network.js';
|
|
6
7
|
|
|
7
8
|
class EthProvider {
|
|
@@ -29,16 +30,16 @@ class EthProvider {
|
|
|
29
30
|
}
|
|
30
31
|
constructor({ evmNetworks }) {
|
|
31
32
|
this.getBalance = () => __awaiter(this, void 0, void 0, function* () {
|
|
32
|
-
var _a;
|
|
33
33
|
// This is equivalent to getSigner().getAddress() but does not crash
|
|
34
34
|
// if the signer is not available
|
|
35
35
|
const [address] = yield this.getConnectedAccounts();
|
|
36
36
|
if (!address)
|
|
37
37
|
return;
|
|
38
|
-
const
|
|
39
|
-
|
|
38
|
+
const client = yield this.getRpcProvider();
|
|
39
|
+
const result = yield (client === null || client === void 0 ? void 0 : client.getBalance({ address: address }));
|
|
40
|
+
if (!result && result !== BigInt(0))
|
|
40
41
|
return;
|
|
41
|
-
return
|
|
42
|
+
return formatEther(result);
|
|
42
43
|
});
|
|
43
44
|
this.evmNetworkRpcMap = () => this.evmNetworks.reduce((acc, network) => {
|
|
44
45
|
var _a;
|
|
@@ -51,20 +52,16 @@ class EthProvider {
|
|
|
51
52
|
}
|
|
52
53
|
getNetwork() {
|
|
53
54
|
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
-
const
|
|
55
|
-
if (!this.supportsNetworkSwitching ||
|
|
56
|
-
!provider ||
|
|
57
|
-
!('getNetwork' in provider)) {
|
|
55
|
+
const walletClient = this.getWeb3Provider();
|
|
56
|
+
if (!this.supportsNetworkSwitching || !walletClient) {
|
|
58
57
|
return Promise.resolve(undefined);
|
|
59
58
|
}
|
|
60
|
-
|
|
61
|
-
return Promise.resolve(network === null || network === void 0 ? void 0 : network.chainId);
|
|
59
|
+
return walletClient.getChainId();
|
|
62
60
|
});
|
|
63
61
|
}
|
|
64
62
|
getSigner() {
|
|
65
|
-
var _a;
|
|
66
63
|
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
-
return
|
|
64
|
+
return this.getWeb3Provider();
|
|
68
65
|
});
|
|
69
66
|
}
|
|
70
67
|
supportsNetworkSwitching() {
|
|
@@ -95,7 +92,7 @@ class EthProvider {
|
|
|
95
92
|
const provider = this.getWeb3Provider();
|
|
96
93
|
if (!provider)
|
|
97
94
|
return [];
|
|
98
|
-
return provider.
|
|
95
|
+
return provider.getAddresses();
|
|
99
96
|
});
|
|
100
97
|
}
|
|
101
98
|
providerSwitchNetwork({ network, provider, }) {
|
|
@@ -110,11 +107,7 @@ class EthProvider {
|
|
|
110
107
|
if (!this.supportsNetworkSwitching()) {
|
|
111
108
|
throw new DynamicError('Network switching is not supported');
|
|
112
109
|
}
|
|
113
|
-
return yield provider.
|
|
114
|
-
{
|
|
115
|
-
chainId: `0x${chainId.toString(16)}`,
|
|
116
|
-
},
|
|
117
|
-
]);
|
|
110
|
+
return yield provider.switchChain(getOrMapViemChain(network));
|
|
118
111
|
}
|
|
119
112
|
catch (error) {
|
|
120
113
|
if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
|
|
@@ -138,17 +131,8 @@ class EthProvider {
|
|
|
138
131
|
providerAddNetwork({ network, provider, }) {
|
|
139
132
|
var _a;
|
|
140
133
|
return __awaiter(this, void 0, void 0, function* () {
|
|
141
|
-
const { blockExplorerUrls, chainId, nativeCurrency, rpcUrls, chainName } = network;
|
|
142
134
|
try {
|
|
143
|
-
return yield provider.
|
|
144
|
-
{
|
|
145
|
-
blockExplorerUrls,
|
|
146
|
-
chainId: `0x${chainId.toString(16)}`,
|
|
147
|
-
chainName,
|
|
148
|
-
nativeCurrency,
|
|
149
|
-
rpcUrls,
|
|
150
|
-
},
|
|
151
|
-
]);
|
|
135
|
+
return yield provider.addChain({ chain: getOrMapViemChain(network) });
|
|
152
136
|
}
|
|
153
137
|
catch (error) {
|
|
154
138
|
if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var tslib = require('tslib');
|
|
6
|
-
var
|
|
6
|
+
var viem = require('viem');
|
|
7
7
|
var normalizeWalletName = require('../../utils/normalizeWalletName/normalizeWalletName.cjs');
|
|
8
8
|
var ProviderLookup = require('../ProviderLookup.cjs');
|
|
9
9
|
var isUnsupportedProviderError = require('../../utils/isUnsupportedProviderError/isUnsupportedProviderError.cjs');
|
|
@@ -87,16 +87,10 @@ class EthProviderHelper {
|
|
|
87
87
|
}
|
|
88
88
|
return ethereumProviders;
|
|
89
89
|
}
|
|
90
|
-
isInstalledHelper(walletName) {
|
|
91
|
-
return this.findProvider(walletName) !== undefined;
|
|
92
|
-
}
|
|
93
90
|
findProvider(walletName) {
|
|
94
91
|
var _a, _b;
|
|
95
92
|
try {
|
|
96
|
-
|
|
97
|
-
return provider === undefined
|
|
98
|
-
? undefined
|
|
99
|
-
: new ethers.ethers.providers.Web3Provider(provider, 'any'); // https://github.com/ethers-io/ethers.js/discussions/1480
|
|
93
|
+
return (_b = (_a = this.providers)[normalizeWalletName.normalizeWalletName(walletName)]) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
100
94
|
}
|
|
101
95
|
catch (err) {
|
|
102
96
|
if (isUnsupportedProviderError.isUnsupportedProviderError(err)) {
|
|
@@ -107,20 +101,46 @@ class EthProviderHelper {
|
|
|
107
101
|
return undefined;
|
|
108
102
|
}
|
|
109
103
|
}
|
|
104
|
+
isInstalledHelper(walletName) {
|
|
105
|
+
return this.findProvider(walletName) !== undefined;
|
|
106
|
+
}
|
|
107
|
+
findWalletClient(walletName) {
|
|
108
|
+
var _a, _b;
|
|
109
|
+
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
110
|
+
try {
|
|
111
|
+
const provider = (_b = (_a = this.providers)[normalizeWalletName.normalizeWalletName(walletName)]) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
112
|
+
if (provider) {
|
|
113
|
+
const [account] = yield provider.request({
|
|
114
|
+
method: 'eth_requestAccounts',
|
|
115
|
+
});
|
|
116
|
+
return viem.createWalletClient({ account, transport: viem.custom(provider) });
|
|
117
|
+
}
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
if (isUnsupportedProviderError.isUnsupportedProviderError(err)) {
|
|
122
|
+
logger.logger.error(`ETH Provider is not supported ${err.value}`, err);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
logger.logger.error(`Could not find provider for ${walletName}`, err);
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
110
130
|
fetchPublicAddressWithName(name) {
|
|
111
131
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
112
|
-
const
|
|
113
|
-
if (!
|
|
132
|
+
const walletClient = yield this.findWalletClient(name);
|
|
133
|
+
if (!walletClient) {
|
|
114
134
|
return Promise.resolve(undefined);
|
|
115
135
|
}
|
|
116
|
-
return this.
|
|
136
|
+
return this.fetchPublicAddressWithWalletClient(walletClient);
|
|
117
137
|
});
|
|
118
138
|
}
|
|
119
|
-
|
|
139
|
+
fetchPublicAddressWithWalletClient(walletClient) {
|
|
120
140
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
121
141
|
try {
|
|
122
|
-
const [lowercaseAddress] = yield
|
|
123
|
-
const publicAddress =
|
|
142
|
+
const [lowercaseAddress] = yield walletClient.requestAddresses();
|
|
143
|
+
const publicAddress = viem.getAddress(lowercaseAddress);
|
|
124
144
|
return publicAddress;
|
|
125
145
|
}
|
|
126
146
|
catch (err) {
|
|
@@ -135,22 +155,24 @@ class EthProviderHelper {
|
|
|
135
155
|
if (!walletAddress) {
|
|
136
156
|
return Promise.resolve(undefined);
|
|
137
157
|
}
|
|
138
|
-
const
|
|
139
|
-
if (!
|
|
158
|
+
const walletClient = yield this.findWalletClient(name);
|
|
159
|
+
if (!walletClient) {
|
|
140
160
|
return Promise.resolve(undefined);
|
|
141
161
|
}
|
|
142
|
-
const
|
|
143
|
-
|
|
162
|
+
const signedMessage = yield walletClient.signMessage({
|
|
163
|
+
account: walletAddress,
|
|
164
|
+
message: messageToSign,
|
|
165
|
+
});
|
|
144
166
|
return signedMessage;
|
|
145
167
|
});
|
|
146
168
|
}
|
|
147
|
-
_setupEventListeners(listeners,
|
|
148
|
-
|
|
169
|
+
_setupEventListeners(listeners, walletName, publicClient) {
|
|
170
|
+
const provider = this.findProvider(walletName);
|
|
171
|
+
if (!provider) {
|
|
149
172
|
return () => {
|
|
150
173
|
// nothing to teardown
|
|
151
174
|
};
|
|
152
175
|
}
|
|
153
|
-
const externalProvider = web3Provider.provider;
|
|
154
176
|
this.handleAccountChange = (accounts) => tslib.__awaiter(this, void 0, void 0, function* () {
|
|
155
177
|
var _a, _b;
|
|
156
178
|
if (accounts.length === 0) {
|
|
@@ -161,8 +183,8 @@ class EthProviderHelper {
|
|
|
161
183
|
});
|
|
162
184
|
this.handleChainChange = () => tslib.__awaiter(this, void 0, void 0, function* () {
|
|
163
185
|
var _c;
|
|
164
|
-
const
|
|
165
|
-
yield ((_c = listeners.onChainChange) === null || _c === void 0 ? void 0 : _c.call(listeners,
|
|
186
|
+
const chainId = yield publicClient.getChainId();
|
|
187
|
+
yield ((_c = listeners.onChainChange) === null || _c === void 0 ? void 0 : _c.call(listeners, chainId.toString()));
|
|
166
188
|
});
|
|
167
189
|
this.handleDisconnect = (error) => tslib.__awaiter(this, void 0, void 0, function* () {
|
|
168
190
|
var _d;
|
|
@@ -171,25 +193,21 @@ class EthProviderHelper {
|
|
|
171
193
|
}
|
|
172
194
|
yield ((_d = listeners.onDisconnect) === null || _d === void 0 ? void 0 : _d.call(listeners));
|
|
173
195
|
});
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
196
|
+
provider.on('accountsChanged', this.handleAccountChange);
|
|
197
|
+
provider.on('chainChanged', this.handleChainChange);
|
|
198
|
+
provider.on('disconnect', this.handleDisconnect);
|
|
177
199
|
return () => { };
|
|
178
200
|
}
|
|
179
201
|
_teardownEventListeners(name) {
|
|
180
|
-
const
|
|
181
|
-
if (!
|
|
202
|
+
const provider = this.findProvider(name);
|
|
203
|
+
if (!provider) {
|
|
182
204
|
return;
|
|
183
205
|
}
|
|
184
|
-
const externalProvider = web3Provider.provider;
|
|
185
|
-
if (this.handleAccountChange) {
|
|
186
|
-
externalProvider.removeListener('accountsChanged', this.handleAccountChange);
|
|
187
|
-
}
|
|
188
206
|
if (this.handleChainChange) {
|
|
189
|
-
|
|
207
|
+
provider.removeListener('chainChanged', this.handleChainChange);
|
|
190
208
|
}
|
|
191
209
|
if (this.handleDisconnect) {
|
|
192
|
-
|
|
210
|
+
provider.removeListener('disconnect', this.handleDisconnect);
|
|
193
211
|
}
|
|
194
212
|
}
|
|
195
213
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PublicClient, WalletClient } from 'viem';
|
|
2
2
|
import { WalletEventListeners } from '@dynamic-labs/wallet-connector-core';
|
|
3
3
|
import { ProviderCondition, IEthereum } from '../window';
|
|
4
|
-
type Provider = () => ethers.providers.ExternalProvider | undefined;
|
|
5
4
|
type AccountChangeEventHandler = (accounts: string[]) => Promise<void>;
|
|
6
5
|
type ChainChangeEventHandler = (chainId: string | number) => Promise<void>;
|
|
7
6
|
type DisconnectEventHandler = (error?: {
|
|
@@ -11,30 +10,31 @@ export declare class EthProviderHelper {
|
|
|
11
10
|
handleAccountChange: AccountChangeEventHandler | undefined;
|
|
12
11
|
handleChainChange: ChainChangeEventHandler | undefined;
|
|
13
12
|
handleDisconnect: DisconnectEventHandler | undefined;
|
|
14
|
-
MetamaskProvider:
|
|
15
|
-
BraveProvider:
|
|
16
|
-
DawnProvider:
|
|
17
|
-
FrameProvider:
|
|
18
|
-
CoinbaseProvider:
|
|
19
|
-
OperaProvider:
|
|
20
|
-
GameStopProvider:
|
|
21
|
-
ExodusProvider:
|
|
22
|
-
BloctoProvider:
|
|
23
|
-
TrustWalletProvider:
|
|
24
|
-
PhantomProvider:
|
|
25
|
-
ZerionProvider:
|
|
26
|
-
UnknownInjectedProvider:
|
|
13
|
+
MetamaskProvider: () => IEthereum | undefined;
|
|
14
|
+
BraveProvider: () => IEthereum | undefined;
|
|
15
|
+
DawnProvider: () => IEthereum | undefined;
|
|
16
|
+
FrameProvider: () => IEthereum | undefined;
|
|
17
|
+
CoinbaseProvider: () => IEthereum | undefined;
|
|
18
|
+
OperaProvider: () => IEthereum | undefined;
|
|
19
|
+
GameStopProvider: () => IEthereum | undefined;
|
|
20
|
+
ExodusProvider: () => IEthereum | undefined;
|
|
21
|
+
BloctoProvider: () => IEthereum | undefined;
|
|
22
|
+
TrustWalletProvider: () => IEthereum | undefined;
|
|
23
|
+
PhantomProvider: () => IEthereum | undefined;
|
|
24
|
+
ZerionProvider: () => IEthereum | undefined;
|
|
25
|
+
UnknownInjectedProvider: () => IEthereum | undefined;
|
|
27
26
|
providers: {
|
|
28
|
-
[wallet: string]:
|
|
27
|
+
[wallet: string]: () => IEthereum | undefined;
|
|
29
28
|
};
|
|
30
29
|
installedProviderLookup(providerFlags: Array<ProviderCondition>): IEthereum | undefined;
|
|
31
30
|
allInstalledProviders(): IEthereum[];
|
|
31
|
+
findProvider(walletName: string): IEthereum | undefined;
|
|
32
32
|
isInstalledHelper(walletName: string): boolean;
|
|
33
|
-
|
|
34
|
-
fetchPublicAddressWithName(name: string): Promise
|
|
35
|
-
|
|
33
|
+
findWalletClient(walletName: string): Promise<WalletClient | undefined>;
|
|
34
|
+
fetchPublicAddressWithName(name: string): Promise<`0x${string}` | undefined>;
|
|
35
|
+
fetchPublicAddressWithWalletClient(walletClient: WalletClient): Promise<`0x${string}` | undefined>;
|
|
36
36
|
signMessageWithName(messageToSign: string, name: string): Promise<string | undefined>;
|
|
37
|
-
_setupEventListeners(listeners: WalletEventListeners,
|
|
37
|
+
_setupEventListeners(listeners: WalletEventListeners, walletName: string, publicClient: PublicClient): () => void;
|
|
38
38
|
_teardownEventListeners(name: string): void;
|
|
39
39
|
}
|
|
40
40
|
export {};
|