@dynamic-labs/multi-wallet 0.16.12-viem.1 → 0.16.13
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 +13 -3
- package/package.json +4 -4
- package/src/errors.cjs +2 -1
- package/src/errors.d.ts +6 -2
- package/src/errors.js +2 -1
- package/src/multi-wallet.cjs +4 -3
- package/src/multi-wallet.js +4 -3
- package/src/rpcProviders.cjs +2 -6
- package/src/rpcProviders.js +2 -6
- package/src/types.d.ts +8 -16
- package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.cjs +54 -0
- package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.d.ts +3 -0
- package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.js +50 -0
- package/src/utils/assignConfirmationScreenToProvider/index.d.ts +1 -0
- package/src/utils/isFunction/isFunction.cjs +8 -0
- package/src/utils/isFunction/isFunction.js +4 -0
- package/src/utils/message.cjs +2 -2
- package/src/utils/message.js +1 -1
- package/src/wallets/algorand/myalgo.d.ts +2 -1
- 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 +5 -9
- package/src/wallets/clients/walletConnect/walletConnect.d.ts +2 -2
- package/src/wallets/clients/walletConnect/walletConnect.js +5 -9
- package/src/wallets/ethereum/BloctoEvm.cjs +140 -0
- package/src/wallets/ethereum/BloctoEvm.d.ts +2 -4
- package/src/wallets/ethereum/BloctoEvm.js +134 -0
- package/src/wallets/ethereum/MagicConnector/MagicClientNetworkHandler/MagicClientNetworkHandler.cjs +37 -5
- package/src/wallets/ethereum/MagicConnector/MagicClientNetworkHandler/MagicClientNetworkHandler.d.ts +3 -0
- package/src/wallets/ethereum/MagicConnector/MagicClientNetworkHandler/MagicClientNetworkHandler.js +37 -5
- package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.cjs +14 -35
- package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.d.ts +4 -4
- package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.js +14 -35
- package/src/wallets/ethereum/coinbase.cjs +7 -18
- package/src/wallets/ethereum/coinbase.d.ts +2 -750
- package/src/wallets/ethereum/coinbase.js +7 -18
- package/src/wallets/ethereum/ethProvider.cjs +29 -13
- package/src/wallets/ethereum/ethProvider.d.ts +7 -7
- package/src/wallets/ethereum/ethProvider.js +29 -13
- package/src/wallets/ethereum/ethProviderHelper.cjs +34 -52
- package/src/wallets/ethereum/ethProviderHelper.d.ts +20 -20
- package/src/wallets/ethereum/ethProviderHelper.js +34 -52
- package/src/wallets/ethereum/fortmatic.cjs +7 -15
- package/src/wallets/ethereum/fortmatic.d.ts +3 -5
- package/src/wallets/ethereum/fortmatic.js +7 -15
- package/src/wallets/ethereum/meta-mask.cjs +2 -13
- package/src/wallets/ethereum/meta-mask.d.ts +3 -752
- package/src/wallets/ethereum/meta-mask.js +2 -13
- package/src/wallets/walletConnect/walletConnect.cjs +6 -8
- package/src/wallets/walletConnect/walletConnect.d.ts +4 -751
- package/src/wallets/walletConnect/walletConnect.js +6 -8
- package/src/wallets/walletConnect/walletConnectV2.cjs +7 -11
- package/src/wallets/walletConnect/walletConnectV2.d.ts +4 -751
- package/src/wallets/walletConnect/walletConnectV2.js +7 -11
- package/src/wallets/window.d.ts +1 -3
- package/src/getOrMapViemChain.cjs +0 -77
- package/src/getOrMapViemChain.d.ts +0 -11
- package/src/getOrMapViemChain.js +0 -51
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var tslib = require('tslib');
|
|
4
|
+
var BloctoSDK = require('@blocto/sdk');
|
|
5
|
+
var ethers = require('ethers');
|
|
6
|
+
var normalizeWalletName = require('../../utils/normalizeWalletName/normalizeWalletName.cjs');
|
|
7
|
+
var logger = require('../../utils/logger.cjs');
|
|
8
|
+
var ethProvider = require('./ethProvider.cjs');
|
|
9
|
+
var ethProviderHelper = require('./ethProviderHelper.cjs');
|
|
10
|
+
|
|
11
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
12
|
+
|
|
13
|
+
var BloctoSDK__default = /*#__PURE__*/_interopDefaultLegacy(BloctoSDK);
|
|
14
|
+
|
|
15
|
+
class BloctoEvm extends ethProvider.EthProvider {
|
|
16
|
+
constructor({ evmNetworks }) {
|
|
17
|
+
var _a, _b;
|
|
18
|
+
// Taken from : https://docs.blocto.app/blocto-sdk/javascript-sdk/evm-sdk/provider
|
|
19
|
+
const BLOCTO_SUPPORTED_CHAIN_IDS = [1, 4, 56, 97, 137, 80001, 43114, 43113];
|
|
20
|
+
const bloctoSupportedNetworks = evmNetworks.filter((n) => BLOCTO_SUPPORTED_CHAIN_IDS.includes(n.chainId));
|
|
21
|
+
super({ evmNetworks: bloctoSupportedNetworks });
|
|
22
|
+
this.LOCAL_STORAGE_KEY = 'dynamic_blocto_evm_chain_id';
|
|
23
|
+
this.name = 'bloctoevm';
|
|
24
|
+
this.canConnectViaQrCode = false;
|
|
25
|
+
this.canConnectViaCustodialService = true;
|
|
26
|
+
this.isWalletConnect = false;
|
|
27
|
+
this.connectedChain = 'EVM';
|
|
28
|
+
this.supportedChains = ['EVM', 'ETH'];
|
|
29
|
+
this.ethProviderHelper = new ethProviderHelper.EthProviderHelper();
|
|
30
|
+
this.supportsNetworkSwitching = () => false;
|
|
31
|
+
this.chainId =
|
|
32
|
+
Number(localStorage.getItem(this.LOCAL_STORAGE_KEY)) ||
|
|
33
|
+
((_a = bloctoSupportedNetworks.find((n) => n.chainId === 137)) === null || _a === void 0 ? void 0 : _a.chainId) ||
|
|
34
|
+
((_b = bloctoSupportedNetworks[0]) === null || _b === void 0 ? void 0 : _b.chainId);
|
|
35
|
+
}
|
|
36
|
+
get key() {
|
|
37
|
+
return normalizeWalletName.normalizeWalletName(this.name);
|
|
38
|
+
}
|
|
39
|
+
getClient() {
|
|
40
|
+
if (!this.client) {
|
|
41
|
+
const network = this.evmNetworks.find((n) => n.chainId === this.chainId);
|
|
42
|
+
if (network) {
|
|
43
|
+
this.client = new BloctoSDK__default["default"]({
|
|
44
|
+
ethereum: {
|
|
45
|
+
chainId: `0x${this.chainId.toString(16)}`,
|
|
46
|
+
rpc: network.rpcUrls[0],
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
logger.logger.error("Couldn't find a configured network for Blocto EVM");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return this.client;
|
|
55
|
+
}
|
|
56
|
+
getWeb3Provider() {
|
|
57
|
+
const client = this.getClient();
|
|
58
|
+
// If there are no accounts yet, we shouldn't wrap the provider in ethers
|
|
59
|
+
if (client && client.ethereum && client.ethereum.accounts.length > 0) {
|
|
60
|
+
return new ethers.ethers.providers.Web3Provider(client.ethereum);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// We are calling the client directly and not via Web3Provider because if we will wrap it in Ethers,
|
|
67
|
+
// Ethers will be making retries on failure. This becomes an issue on the connect step.
|
|
68
|
+
// When Blocto's modal closes prior to receiving a response with the address on the connect step,
|
|
69
|
+
// then ethers would retry and the modal will open again.
|
|
70
|
+
fetchPublicAddress() {
|
|
71
|
+
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
72
|
+
try {
|
|
73
|
+
const client = this.getClient();
|
|
74
|
+
if (client && client.ethereum) {
|
|
75
|
+
const addresses = yield client.ethereum.request({
|
|
76
|
+
method: 'eth_requestAccounts',
|
|
77
|
+
});
|
|
78
|
+
if (addresses.length > 0) {
|
|
79
|
+
return addresses[0];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
logger.logger.error(e);
|
|
86
|
+
return Promise.reject(e);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
connect() {
|
|
91
|
+
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
yield this.fetchPublicAddress();
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
isInstalledOnBrowser() {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
proveOwnership(messageToSign) {
|
|
99
|
+
return this.signMessage(messageToSign);
|
|
100
|
+
}
|
|
101
|
+
signMessage(messageToSign) {
|
|
102
|
+
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
103
|
+
try {
|
|
104
|
+
const signer = yield this.getSigner();
|
|
105
|
+
return yield (signer === null || signer === void 0 ? void 0 : signer.signMessage(messageToSign));
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
if (e.message === 'User declined the signing request') {
|
|
109
|
+
return Promise.reject({ code: '4001' });
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
return Promise.reject(e);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
endSession() {
|
|
118
|
+
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
119
|
+
const client = this.getClient();
|
|
120
|
+
localStorage.removeItem('sdk.session');
|
|
121
|
+
if (client && client.ethereum && client.ethereum.accounts.length > 0) {
|
|
122
|
+
yield client.ethereum.request({ method: 'wallet_disconnect' });
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
// *********************
|
|
127
|
+
// Unimplemented methods
|
|
128
|
+
// *********************
|
|
129
|
+
switchNetwork() {
|
|
130
|
+
return Promise.resolve();
|
|
131
|
+
}
|
|
132
|
+
setupEventListeners() {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
teardownEventListeners() {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
module.exports = BloctoEvm;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
2
|
import { Chain, WalletConnector } from '@dynamic-labs/wallet-connector-core';
|
|
3
3
|
import { EvmNetwork } from './evm-network';
|
|
4
4
|
import { EthProvider } from './ethProvider';
|
|
@@ -18,11 +18,9 @@ declare class BloctoEvm extends EthProvider implements WalletConnector {
|
|
|
18
18
|
constructor({ evmNetworks }: {
|
|
19
19
|
evmNetworks: EvmNetwork[];
|
|
20
20
|
});
|
|
21
|
-
providerResources: string[] | undefined;
|
|
22
|
-
switchNetworkOnlyFromWallet: boolean | undefined;
|
|
23
21
|
get key(): string;
|
|
24
22
|
private getClient;
|
|
25
|
-
getWeb3Provider():
|
|
23
|
+
getWeb3Provider(): ethers.providers.Web3Provider | undefined;
|
|
26
24
|
fetchPublicAddress(): Promise<string | undefined>;
|
|
27
25
|
connect(): Promise<void>;
|
|
28
26
|
isInstalledOnBrowser(): boolean;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { __awaiter } from 'tslib';
|
|
2
|
+
import BloctoSDK from '@blocto/sdk';
|
|
3
|
+
import { ethers } from 'ethers';
|
|
4
|
+
import { normalizeWalletName } from '../../utils/normalizeWalletName/normalizeWalletName.js';
|
|
5
|
+
import { logger } from '../../utils/logger.js';
|
|
6
|
+
import { EthProvider } from './ethProvider.js';
|
|
7
|
+
import { EthProviderHelper } from './ethProviderHelper.js';
|
|
8
|
+
|
|
9
|
+
class BloctoEvm extends EthProvider {
|
|
10
|
+
constructor({ evmNetworks }) {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
// Taken from : https://docs.blocto.app/blocto-sdk/javascript-sdk/evm-sdk/provider
|
|
13
|
+
const BLOCTO_SUPPORTED_CHAIN_IDS = [1, 4, 56, 97, 137, 80001, 43114, 43113];
|
|
14
|
+
const bloctoSupportedNetworks = evmNetworks.filter((n) => BLOCTO_SUPPORTED_CHAIN_IDS.includes(n.chainId));
|
|
15
|
+
super({ evmNetworks: bloctoSupportedNetworks });
|
|
16
|
+
this.LOCAL_STORAGE_KEY = 'dynamic_blocto_evm_chain_id';
|
|
17
|
+
this.name = 'bloctoevm';
|
|
18
|
+
this.canConnectViaQrCode = false;
|
|
19
|
+
this.canConnectViaCustodialService = true;
|
|
20
|
+
this.isWalletConnect = false;
|
|
21
|
+
this.connectedChain = 'EVM';
|
|
22
|
+
this.supportedChains = ['EVM', 'ETH'];
|
|
23
|
+
this.ethProviderHelper = new EthProviderHelper();
|
|
24
|
+
this.supportsNetworkSwitching = () => false;
|
|
25
|
+
this.chainId =
|
|
26
|
+
Number(localStorage.getItem(this.LOCAL_STORAGE_KEY)) ||
|
|
27
|
+
((_a = bloctoSupportedNetworks.find((n) => n.chainId === 137)) === null || _a === void 0 ? void 0 : _a.chainId) ||
|
|
28
|
+
((_b = bloctoSupportedNetworks[0]) === null || _b === void 0 ? void 0 : _b.chainId);
|
|
29
|
+
}
|
|
30
|
+
get key() {
|
|
31
|
+
return normalizeWalletName(this.name);
|
|
32
|
+
}
|
|
33
|
+
getClient() {
|
|
34
|
+
if (!this.client) {
|
|
35
|
+
const network = this.evmNetworks.find((n) => n.chainId === this.chainId);
|
|
36
|
+
if (network) {
|
|
37
|
+
this.client = new BloctoSDK({
|
|
38
|
+
ethereum: {
|
|
39
|
+
chainId: `0x${this.chainId.toString(16)}`,
|
|
40
|
+
rpc: network.rpcUrls[0],
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
logger.error("Couldn't find a configured network for Blocto EVM");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return this.client;
|
|
49
|
+
}
|
|
50
|
+
getWeb3Provider() {
|
|
51
|
+
const client = this.getClient();
|
|
52
|
+
// If there are no accounts yet, we shouldn't wrap the provider in ethers
|
|
53
|
+
if (client && client.ethereum && client.ethereum.accounts.length > 0) {
|
|
54
|
+
return new ethers.providers.Web3Provider(client.ethereum);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// We are calling the client directly and not via Web3Provider because if we will wrap it in Ethers,
|
|
61
|
+
// Ethers will be making retries on failure. This becomes an issue on the connect step.
|
|
62
|
+
// When Blocto's modal closes prior to receiving a response with the address on the connect step,
|
|
63
|
+
// then ethers would retry and the modal will open again.
|
|
64
|
+
fetchPublicAddress() {
|
|
65
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
try {
|
|
67
|
+
const client = this.getClient();
|
|
68
|
+
if (client && client.ethereum) {
|
|
69
|
+
const addresses = yield client.ethereum.request({
|
|
70
|
+
method: 'eth_requestAccounts',
|
|
71
|
+
});
|
|
72
|
+
if (addresses.length > 0) {
|
|
73
|
+
return addresses[0];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
logger.error(e);
|
|
80
|
+
return Promise.reject(e);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
connect() {
|
|
85
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
86
|
+
yield this.fetchPublicAddress();
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
isInstalledOnBrowser() {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
proveOwnership(messageToSign) {
|
|
93
|
+
return this.signMessage(messageToSign);
|
|
94
|
+
}
|
|
95
|
+
signMessage(messageToSign) {
|
|
96
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
97
|
+
try {
|
|
98
|
+
const signer = yield this.getSigner();
|
|
99
|
+
return yield (signer === null || signer === void 0 ? void 0 : signer.signMessage(messageToSign));
|
|
100
|
+
}
|
|
101
|
+
catch (e) {
|
|
102
|
+
if (e.message === 'User declined the signing request') {
|
|
103
|
+
return Promise.reject({ code: '4001' });
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
return Promise.reject(e);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
endSession() {
|
|
112
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
113
|
+
const client = this.getClient();
|
|
114
|
+
localStorage.removeItem('sdk.session');
|
|
115
|
+
if (client && client.ethereum && client.ethereum.accounts.length > 0) {
|
|
116
|
+
yield client.ethereum.request({ method: 'wallet_disconnect' });
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
// *********************
|
|
121
|
+
// Unimplemented methods
|
|
122
|
+
// *********************
|
|
123
|
+
switchNetwork() {
|
|
124
|
+
return Promise.resolve();
|
|
125
|
+
}
|
|
126
|
+
setupEventListeners() {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
teardownEventListeners() {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export { BloctoEvm as default };
|
package/src/wallets/ethereum/MagicConnector/MagicClientNetworkHandler/MagicClientNetworkHandler.cjs
CHANGED
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var tslib = require('tslib');
|
|
6
6
|
var magicSdk = require('magic-sdk');
|
|
7
|
+
var logger = require('../../../../utils/logger.cjs');
|
|
7
8
|
|
|
8
9
|
// these are based off of Magic's EthNetworkName type
|
|
9
10
|
const chainNameToChainIdMap = {
|
|
@@ -25,15 +26,21 @@ class MagicClientNetworkHandler {
|
|
|
25
26
|
this._config = config;
|
|
26
27
|
this._apiKey = apiKey;
|
|
27
28
|
this.evmNetworks = evmNetworks;
|
|
28
|
-
this.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
if (this.lastUsedNetworkId) {
|
|
30
|
+
this._networkId = this.lastUsedNetworkId;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
this._networkId =
|
|
34
|
+
typeof (config === null || config === void 0 ? void 0 : config.network) === 'string'
|
|
35
|
+
? chainNameToChainIdMap[config.network]
|
|
36
|
+
: (_b = (_a = config === null || config === void 0 ? void 0 : config.network) === null || _a === void 0 ? void 0 : _a.chainId) !== null && _b !== void 0 ? _b : 1;
|
|
37
|
+
}
|
|
32
38
|
}
|
|
33
39
|
selectNetwork(networkChainId) {
|
|
34
40
|
var _a;
|
|
35
41
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
36
42
|
this._networkId = networkChainId;
|
|
43
|
+
this.lastUsedNetworkId = networkChainId;
|
|
37
44
|
(_a = this.onChainChanged) === null || _a === void 0 ? void 0 : _a.call(this, networkChainId);
|
|
38
45
|
});
|
|
39
46
|
}
|
|
@@ -91,6 +98,31 @@ class MagicClientNetworkHandler {
|
|
|
91
98
|
var _a;
|
|
92
99
|
return (_a = this.evmNetworks.find((evmNetwork) => evmNetwork.networkId === networkId)) === null || _a === void 0 ? void 0 : _a.chainId;
|
|
93
100
|
}
|
|
94
|
-
|
|
101
|
+
get lastUsedNetworkId() {
|
|
102
|
+
const savedNetworkIdText = localStorage.getItem(MagicClientNetworkHandler.lastUsedNetworkIdStorageKey);
|
|
103
|
+
if (!savedNetworkIdText)
|
|
104
|
+
return undefined;
|
|
105
|
+
try {
|
|
106
|
+
const networkId = parseInt(savedNetworkIdText);
|
|
107
|
+
if (isNaN(networkId)) {
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
return networkId;
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
logger.logger.error(err);
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
set lastUsedNetworkId(networkId) {
|
|
118
|
+
if (networkId === undefined) {
|
|
119
|
+
localStorage.removeItem(MagicClientNetworkHandler.lastUsedNetworkIdStorageKey);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
localStorage.setItem(MagicClientNetworkHandler.lastUsedNetworkIdStorageKey, networkId.toString());
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
MagicClientNetworkHandler.lastUsedNetworkIdStorageKey = 'magic-last-used-network-id';
|
|
95
127
|
|
|
96
128
|
exports.MagicClientNetworkHandler = MagicClientNetworkHandler;
|
package/src/wallets/ethereum/MagicConnector/MagicClientNetworkHandler/MagicClientNetworkHandler.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare abstract class MagicClientNetworkHandler {
|
|
|
11
11
|
private _networkId;
|
|
12
12
|
private _config;
|
|
13
13
|
evmNetworks: EvmNetwork[];
|
|
14
|
+
static lastUsedNetworkIdStorageKey: string;
|
|
14
15
|
constructor({ apiKey, evmNetworks, config }: MagicClientNetworkHandlerProps);
|
|
15
16
|
abstract onChainChanged?(networkChainId: number): void;
|
|
16
17
|
selectNetwork(networkChainId: number): Promise<void>;
|
|
@@ -21,4 +22,6 @@ export declare abstract class MagicClientNetworkHandler {
|
|
|
21
22
|
private get configNetworkId();
|
|
22
23
|
private _getRpcUrlByNetworkId;
|
|
23
24
|
private _getChainIdByNetworkId;
|
|
25
|
+
get lastUsedNetworkId(): number | undefined;
|
|
26
|
+
set lastUsedNetworkId(networkId: number | undefined);
|
|
24
27
|
}
|
package/src/wallets/ethereum/MagicConnector/MagicClientNetworkHandler/MagicClientNetworkHandler.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
2
|
import { Magic } from 'magic-sdk';
|
|
3
|
+
import { logger } from '../../../../utils/logger.js';
|
|
3
4
|
|
|
4
5
|
// these are based off of Magic's EthNetworkName type
|
|
5
6
|
const chainNameToChainIdMap = {
|
|
@@ -21,15 +22,21 @@ class MagicClientNetworkHandler {
|
|
|
21
22
|
this._config = config;
|
|
22
23
|
this._apiKey = apiKey;
|
|
23
24
|
this.evmNetworks = evmNetworks;
|
|
24
|
-
this.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
if (this.lastUsedNetworkId) {
|
|
26
|
+
this._networkId = this.lastUsedNetworkId;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
this._networkId =
|
|
30
|
+
typeof (config === null || config === void 0 ? void 0 : config.network) === 'string'
|
|
31
|
+
? chainNameToChainIdMap[config.network]
|
|
32
|
+
: (_b = (_a = config === null || config === void 0 ? void 0 : config.network) === null || _a === void 0 ? void 0 : _a.chainId) !== null && _b !== void 0 ? _b : 1;
|
|
33
|
+
}
|
|
28
34
|
}
|
|
29
35
|
selectNetwork(networkChainId) {
|
|
30
36
|
var _a;
|
|
31
37
|
return __awaiter(this, void 0, void 0, function* () {
|
|
32
38
|
this._networkId = networkChainId;
|
|
39
|
+
this.lastUsedNetworkId = networkChainId;
|
|
33
40
|
(_a = this.onChainChanged) === null || _a === void 0 ? void 0 : _a.call(this, networkChainId);
|
|
34
41
|
});
|
|
35
42
|
}
|
|
@@ -87,6 +94,31 @@ class MagicClientNetworkHandler {
|
|
|
87
94
|
var _a;
|
|
88
95
|
return (_a = this.evmNetworks.find((evmNetwork) => evmNetwork.networkId === networkId)) === null || _a === void 0 ? void 0 : _a.chainId;
|
|
89
96
|
}
|
|
90
|
-
|
|
97
|
+
get lastUsedNetworkId() {
|
|
98
|
+
const savedNetworkIdText = localStorage.getItem(MagicClientNetworkHandler.lastUsedNetworkIdStorageKey);
|
|
99
|
+
if (!savedNetworkIdText)
|
|
100
|
+
return undefined;
|
|
101
|
+
try {
|
|
102
|
+
const networkId = parseInt(savedNetworkIdText);
|
|
103
|
+
if (isNaN(networkId)) {
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
return networkId;
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
logger.error(err);
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
set lastUsedNetworkId(networkId) {
|
|
114
|
+
if (networkId === undefined) {
|
|
115
|
+
localStorage.removeItem(MagicClientNetworkHandler.lastUsedNetworkIdStorageKey);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
localStorage.setItem(MagicClientNetworkHandler.lastUsedNetworkIdStorageKey, networkId.toString());
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
MagicClientNetworkHandler.lastUsedNetworkIdStorageKey = 'magic-last-used-network-id';
|
|
91
123
|
|
|
92
124
|
export { MagicClientNetworkHandler };
|
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var tslib = require('tslib');
|
|
6
|
-
var
|
|
6
|
+
var ethers = require('ethers');
|
|
7
|
+
var errors = require('../../../../errors.cjs');
|
|
7
8
|
var logger = require('../../../../utils/logger.cjs');
|
|
9
|
+
var assignConfirmationScreenToProvider = require('../../../../utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.cjs');
|
|
8
10
|
var CancellablePromise = require('../../../../utils/CancellablePromise/CancellablePromise.cjs');
|
|
9
11
|
var MagicClientNetworkHandler = require('../MagicClientNetworkHandler/MagicClientNetworkHandler.cjs');
|
|
10
12
|
|
|
@@ -82,10 +84,12 @@ class MagicWalletConnector extends MagicClientNetworkHandler.MagicClientNetworkH
|
|
|
82
84
|
}
|
|
83
85
|
getBalance() {
|
|
84
86
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
85
|
-
const signer = yield this.getSigner();
|
|
86
87
|
const provider = yield this.getWeb3Provider();
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
if (!provider)
|
|
89
|
+
throw new errors.DynamicError('No provider');
|
|
90
|
+
const signer = provider.getSigner();
|
|
91
|
+
const userAddress = yield signer.getAddress();
|
|
92
|
+
return ethers.ethers.utils.formatEther(yield provider.getBalance(userAddress));
|
|
89
93
|
});
|
|
90
94
|
}
|
|
91
95
|
getConnectedAccounts() {
|
|
@@ -109,37 +113,15 @@ class MagicWalletConnector extends MagicClientNetworkHandler.MagicClientNetworkH
|
|
|
109
113
|
getSigner() {
|
|
110
114
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
111
115
|
const provider = yield this.getWeb3Provider();
|
|
112
|
-
return
|
|
116
|
+
return provider.getSigner();
|
|
113
117
|
});
|
|
114
118
|
}
|
|
115
119
|
getWeb3Provider() {
|
|
116
120
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
117
121
|
const client = this.getClient();
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
var _a, _b;
|
|
122
|
-
if (args.method === 'personal_sign') {
|
|
123
|
-
return this._walletUiUtils.signMessage({
|
|
124
|
-
handler: () => client.rpcProvider.request(args),
|
|
125
|
-
message: viem.fromHex((_a = args.params) === null || _a === void 0 ? void 0 : _a[0], 'string'),
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
else if (args.method === 'eth_sendTransaction') {
|
|
129
|
-
return this._walletUiUtils.sendTransaction({
|
|
130
|
-
handler: () => client.rpcProvider.request(args),
|
|
131
|
-
transaction: (_b = args.params) === null || _b === void 0 ? void 0 : _b[0],
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
return client.rpcProvider.request(args);
|
|
136
|
-
}
|
|
137
|
-
}),
|
|
138
|
-
}, {
|
|
139
|
-
retryCount: 0,
|
|
140
|
-
}),
|
|
141
|
-
});
|
|
142
|
-
return publicClient;
|
|
122
|
+
const provider = new ethers.ethers.providers.Web3Provider(client.rpcProvider);
|
|
123
|
+
assignConfirmationScreenToProvider.assignConfirmationScreenToProvider(provider, this._walletUiUtils);
|
|
124
|
+
return provider;
|
|
143
125
|
});
|
|
144
126
|
}
|
|
145
127
|
isInstalledOnBrowser() {
|
|
@@ -158,11 +140,8 @@ class MagicWalletConnector extends MagicClientNetworkHandler.MagicClientNetworkH
|
|
|
158
140
|
}
|
|
159
141
|
signMessage(messageToSign) {
|
|
160
142
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
161
|
-
const
|
|
162
|
-
return
|
|
163
|
-
account: (yield this.fetchPublicAddress()),
|
|
164
|
-
message: messageToSign,
|
|
165
|
-
});
|
|
143
|
+
const provider = yield this.getWeb3Provider();
|
|
144
|
+
return provider.getSigner().signMessage(messageToSign);
|
|
166
145
|
});
|
|
167
146
|
}
|
|
168
147
|
supportsNetworkSwitching() {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LoginWithMagicLinkEvents, MagicUserMetadata, PromiEvent } from 'magic-sdk';
|
|
2
|
-
import {
|
|
2
|
+
import { ethers } from 'ethers';
|
|
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 | ethers.providers.JsonRpcProvider | undefined>;
|
|
43
|
+
getSigner(): Promise<ethers.providers.JsonRpcSigner | undefined>;
|
|
44
|
+
getWeb3Provider(): Promise<ethers.providers.Web3Provider>;
|
|
45
45
|
isInstalledOnBrowser(): boolean;
|
|
46
46
|
proveOwnership(messageToSign: string): Promise<string | undefined>;
|
|
47
47
|
setupEventListeners(listeners: WalletEventListeners): void;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
|
-
import {
|
|
2
|
+
import { ethers } from 'ethers';
|
|
3
|
+
import { DynamicError } from '../../../../errors.js';
|
|
3
4
|
import { logger } from '../../../../utils/logger.js';
|
|
5
|
+
import { assignConfirmationScreenToProvider } from '../../../../utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.js';
|
|
4
6
|
import { CancellablePromise } from '../../../../utils/CancellablePromise/CancellablePromise.js';
|
|
5
7
|
import { MagicClientNetworkHandler } from '../MagicClientNetworkHandler/MagicClientNetworkHandler.js';
|
|
6
8
|
|
|
@@ -78,10 +80,12 @@ class MagicWalletConnector extends MagicClientNetworkHandler {
|
|
|
78
80
|
}
|
|
79
81
|
getBalance() {
|
|
80
82
|
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
-
const signer = yield this.getSigner();
|
|
82
83
|
const provider = yield this.getWeb3Provider();
|
|
83
|
-
|
|
84
|
-
|
|
84
|
+
if (!provider)
|
|
85
|
+
throw new DynamicError('No provider');
|
|
86
|
+
const signer = provider.getSigner();
|
|
87
|
+
const userAddress = yield signer.getAddress();
|
|
88
|
+
return ethers.utils.formatEther(yield provider.getBalance(userAddress));
|
|
85
89
|
});
|
|
86
90
|
}
|
|
87
91
|
getConnectedAccounts() {
|
|
@@ -105,37 +109,15 @@ class MagicWalletConnector extends MagicClientNetworkHandler {
|
|
|
105
109
|
getSigner() {
|
|
106
110
|
return __awaiter(this, void 0, void 0, function* () {
|
|
107
111
|
const provider = yield this.getWeb3Provider();
|
|
108
|
-
return
|
|
112
|
+
return provider.getSigner();
|
|
109
113
|
});
|
|
110
114
|
}
|
|
111
115
|
getWeb3Provider() {
|
|
112
116
|
return __awaiter(this, void 0, void 0, function* () {
|
|
113
117
|
const client = this.getClient();
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
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;
|
|
118
|
+
const provider = new ethers.providers.Web3Provider(client.rpcProvider);
|
|
119
|
+
assignConfirmationScreenToProvider(provider, this._walletUiUtils);
|
|
120
|
+
return provider;
|
|
139
121
|
});
|
|
140
122
|
}
|
|
141
123
|
isInstalledOnBrowser() {
|
|
@@ -154,11 +136,8 @@ class MagicWalletConnector extends MagicClientNetworkHandler {
|
|
|
154
136
|
}
|
|
155
137
|
signMessage(messageToSign) {
|
|
156
138
|
return __awaiter(this, void 0, void 0, function* () {
|
|
157
|
-
const
|
|
158
|
-
return
|
|
159
|
-
account: (yield this.fetchPublicAddress()),
|
|
160
|
-
message: messageToSign,
|
|
161
|
-
});
|
|
139
|
+
const provider = yield this.getWeb3Provider();
|
|
140
|
+
return provider.getSigner().signMessage(messageToSign);
|
|
162
141
|
});
|
|
163
142
|
}
|
|
164
143
|
supportsNetworkSwitching() {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var tslib = require('tslib');
|
|
4
|
-
var
|
|
4
|
+
var ethers = require('ethers');
|
|
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,29 +27,18 @@ class Coinbase extends ethProvider.EthProvider {
|
|
|
27
27
|
return normalizeWalletName.normalizeWalletName(this.name);
|
|
28
28
|
}
|
|
29
29
|
setupEventListeners(listeners) {
|
|
30
|
-
|
|
31
|
-
if (!provider) {
|
|
32
|
-
return () => { };
|
|
33
|
-
}
|
|
34
|
-
return this.ethProviderHelper._setupEventListeners(listeners, this.name, viem.createPublicClient({
|
|
35
|
-
transport: viem.custom(provider),
|
|
36
|
-
}));
|
|
30
|
+
return this.ethProviderHelper._setupEventListeners(listeners, this.getWeb3Provider());
|
|
37
31
|
}
|
|
38
32
|
teardownEventListeners() {
|
|
39
33
|
return this.ethProviderHelper._teardownEventListeners(this.name);
|
|
40
34
|
}
|
|
41
35
|
getWeb3Provider() {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return viem.createWalletClient({
|
|
45
|
-
transport: viem.custom(provider),
|
|
46
|
-
});
|
|
36
|
+
if (this.isInstalledOnBrowser()) {
|
|
37
|
+
return this.ethProviderHelper.findProvider(this.name);
|
|
47
38
|
}
|
|
48
|
-
return
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
})),
|
|
52
|
-
});
|
|
39
|
+
return new ethers.ethers.providers.Web3Provider(coinbase.getCoinbaseProvider({
|
|
40
|
+
opts: this.coinbaseProviderOpts,
|
|
41
|
+
}), 'any');
|
|
53
42
|
}
|
|
54
43
|
isInstalledOnBrowser() {
|
|
55
44
|
return this.ethProviderHelper.isInstalledHelper(this.name);
|