@dynamic-labs/ethereum 0.19.0-alpha.7 → 0.19.0-alpha.9
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 +53 -0
- package/package.json +8 -8
- package/src/ethProviderHelper.cjs +54 -132
- package/src/ethProviderHelper.d.ts +20 -29
- package/src/ethProviderHelper.js +55 -133
- package/src/index.cjs +23 -21
- package/src/index.d.ts +1 -0
- package/src/index.js +18 -16
- package/src/injected/BloctoInjected.cjs +2 -2
- package/src/injected/BloctoInjected.d.ts +2 -2
- package/src/injected/BloctoInjected.js +2 -2
- package/src/injected/BraveEvm.cjs +2 -2
- package/src/injected/BraveEvm.d.ts +2 -2
- package/src/injected/BraveEvm.js +2 -2
- package/src/injected/Dawn.cjs +2 -2
- package/src/injected/Dawn.d.ts +2 -2
- package/src/injected/Dawn.js +2 -2
- package/src/injected/ExodusEvm.cjs +2 -2
- package/src/injected/ExodusEvm.d.ts +2 -2
- package/src/injected/ExodusEvm.js +2 -2
- package/src/injected/Frame.cjs +2 -2
- package/src/injected/Frame.d.ts +2 -2
- package/src/injected/Frame.js +2 -2
- package/src/injected/GameStop.cjs +2 -2
- package/src/injected/GameStop.d.ts +2 -2
- package/src/injected/GameStop.js +2 -2
- package/src/injected/InjectedWalletBase.cjs +23 -10
- package/src/injected/InjectedWalletBase.d.ts +6 -1
- package/src/injected/InjectedWalletBase.js +23 -10
- package/src/injected/LegacyInjectedWalletBase.cjs +77 -0
- package/src/injected/LegacyInjectedWalletBase.d.ts +24 -0
- package/src/injected/LegacyInjectedWalletBase.js +75 -0
- package/src/injected/MetaMask.cjs +2 -2
- package/src/injected/MetaMask.d.ts +2 -2
- package/src/injected/MetaMask.js +2 -2
- package/src/injected/Opera.cjs +2 -2
- package/src/injected/Opera.d.ts +2 -2
- package/src/injected/Opera.js +2 -2
- package/src/injected/PhantomEvm.cjs +2 -2
- package/src/injected/PhantomEvm.d.ts +2 -2
- package/src/injected/PhantomEvm.js +2 -2
- package/src/injected/Rabby.cjs +2 -2
- package/src/injected/Rabby.d.ts +2 -2
- package/src/injected/Rabby.js +2 -2
- package/src/injected/Superb.cjs +2 -2
- package/src/injected/Superb.d.ts +2 -2
- package/src/injected/Superb.js +2 -2
- package/src/injected/Trust.cjs +2 -2
- package/src/injected/Trust.d.ts +2 -2
- package/src/injected/Trust.js +2 -2
- package/src/injected/Zerion.cjs +2 -2
- package/src/injected/Zerion.d.ts +2 -2
- package/src/injected/Zerion.js +2 -2
- package/src/injected/fetchInjectedWalletConnectors.cjs +32 -0
- package/src/injected/fetchInjectedWalletConnectors.d.ts +6 -0
- package/src/injected/fetchInjectedWalletConnectors.js +28 -0
- package/src/injected/index.d.ts +2 -4
- package/src/injected/{index.cjs → legacyInjectedWallets.cjs} +19 -21
- package/src/injected/legacyInjectedWallets.d.ts +3 -0
- package/src/injected/legacyInjectedWallets.js +46 -0
- package/src/legacyEthProviderHelper.cjs +193 -0
- package/src/legacyEthProviderHelper.d.ts +33 -0
- package/src/legacyEthProviderHelper.js +189 -0
- package/src/types.d.ts +11 -0
- package/src/utils/eventListenerHandlers.cjs +34 -0
- package/src/utils/eventListenerHandlers.d.ts +8 -0
- package/src/utils/eventListenerHandlers.js +30 -0
- package/src/walletConnect/fetchWalletConnectWallets.cjs +1 -16
- package/src/walletConnect/fetchWalletConnectWallets.d.ts +0 -1
- package/src/walletConnect/fetchWalletConnectWallets.js +2 -16
- package/src/walletConnect/walletConnect.cjs +4 -4
- package/src/walletConnect/walletConnect.js +4 -4
- package/src/walletConnect/walletConnectV2.cjs +16 -9
- package/src/walletConnect/walletConnectV2.d.ts +1 -0
- package/src/walletConnect/walletConnectV2.js +16 -9
- 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.js +0 -49
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { BloctoInjected } from './BloctoInjected.js';
|
|
2
|
+
import { BraveEvm } from './BraveEvm.js';
|
|
3
|
+
import { Dawn } from './Dawn.js';
|
|
4
|
+
import { ExodusEvm } from './ExodusEvm.js';
|
|
5
|
+
import { Frame } from './Frame.js';
|
|
6
|
+
import { GameStop } from './GameStop.js';
|
|
7
|
+
import { MetaMask } from './MetaMask.js';
|
|
8
|
+
import { Opera } from './Opera.js';
|
|
9
|
+
import { PhantomEvm } from './PhantomEvm.js';
|
|
10
|
+
import { Trust } from './Trust.js';
|
|
11
|
+
import { Zerion } from './Zerion.js';
|
|
12
|
+
import { Superb } from './Superb.js';
|
|
13
|
+
import { Rabby } from './Rabby.js';
|
|
14
|
+
|
|
15
|
+
const legacyInjectedWallets = [
|
|
16
|
+
PhantomEvm,
|
|
17
|
+
BloctoInjected,
|
|
18
|
+
BraveEvm,
|
|
19
|
+
Dawn,
|
|
20
|
+
ExodusEvm,
|
|
21
|
+
Frame,
|
|
22
|
+
GameStop,
|
|
23
|
+
MetaMask,
|
|
24
|
+
Opera,
|
|
25
|
+
Trust,
|
|
26
|
+
Zerion,
|
|
27
|
+
Superb,
|
|
28
|
+
Rabby,
|
|
29
|
+
];
|
|
30
|
+
const filteredLegacyInjectedWalletKeys = [
|
|
31
|
+
'phantomevm',
|
|
32
|
+
'coinbase',
|
|
33
|
+
'bloctoinjected',
|
|
34
|
+
'dawn',
|
|
35
|
+
'exodusevm',
|
|
36
|
+
'frame',
|
|
37
|
+
'gamestop',
|
|
38
|
+
'metamask',
|
|
39
|
+
'opera',
|
|
40
|
+
'trust',
|
|
41
|
+
'zerion',
|
|
42
|
+
'superb',
|
|
43
|
+
'rabby',
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
export { filteredLegacyInjectedWalletKeys, legacyInjectedWallets };
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _tslib = require('../_virtual/_tslib.cjs');
|
|
6
|
+
var ethers = require('ethers');
|
|
7
|
+
var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
|
|
8
|
+
var isUnsupportedProviderError = require('./utils/isUnsupportedProviderError/isUnsupportedProviderError.cjs');
|
|
9
|
+
var eventListenerHandlers = require('./utils/eventListenerHandlers.cjs');
|
|
10
|
+
|
|
11
|
+
var _a;
|
|
12
|
+
class LegacyEthProviderHelper {
|
|
13
|
+
static installedProviderLookup(providerFlags) {
|
|
14
|
+
const allInstalledProviders = this.allInstalledProviders();
|
|
15
|
+
return walletConnectorCore.ProviderLookup(allInstalledProviders, providerFlags);
|
|
16
|
+
}
|
|
17
|
+
static allInstalledProviders() {
|
|
18
|
+
var _b;
|
|
19
|
+
const ethereumProviders = [];
|
|
20
|
+
if (window.ethereum) {
|
|
21
|
+
if (!window.ethereum.providers) {
|
|
22
|
+
ethereumProviders.push(window.ethereum);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
window.ethereum.providers.forEach((provider) => {
|
|
26
|
+
ethereumProviders.push(provider);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if ((_b = window.phantom) === null || _b === void 0 ? void 0 : _b.ethereum) {
|
|
31
|
+
ethereumProviders.push(window.phantom.ethereum);
|
|
32
|
+
}
|
|
33
|
+
if (window.zerionWallet) {
|
|
34
|
+
ethereumProviders.push(window.zerionWallet);
|
|
35
|
+
}
|
|
36
|
+
if (window.coinbaseWalletExtension) {
|
|
37
|
+
ethereumProviders.push(window.coinbaseWalletExtension);
|
|
38
|
+
}
|
|
39
|
+
if (window.superb) {
|
|
40
|
+
ethereumProviders.push(window.superb);
|
|
41
|
+
}
|
|
42
|
+
return ethereumProviders;
|
|
43
|
+
}
|
|
44
|
+
static isInstalledHelper(walletName) {
|
|
45
|
+
return this.findProvider(walletName) !== undefined;
|
|
46
|
+
}
|
|
47
|
+
static findProvider(walletName) {
|
|
48
|
+
var _b, _c;
|
|
49
|
+
try {
|
|
50
|
+
const provider = (_c = (_b = this.providers)[walletConnectorCore.normalizeWalletName(walletName)]) === null || _c === void 0 ? void 0 : _c.call(_b);
|
|
51
|
+
return provider === undefined
|
|
52
|
+
? undefined
|
|
53
|
+
: new ethers.ethers.providers.Web3Provider(provider, 'any'); // https://github.com/ethers-io/ethers.js/discussions/1480
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
if (isUnsupportedProviderError.isUnsupportedProviderError(err)) {
|
|
57
|
+
walletConnectorCore.logger.error(`ETH Provider is not supported ${err.value}`, err);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
walletConnectorCore.logger.error(`Could not find provider for ${walletName}`, err);
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
static fetchPublicAddressWithName(name) {
|
|
65
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
const provider = this.findProvider(name);
|
|
67
|
+
if (!provider) {
|
|
68
|
+
return Promise.resolve(undefined);
|
|
69
|
+
}
|
|
70
|
+
return this.fetchPublicAddressWithProvider(provider);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
static fetchPublicAddressWithProvider(provider) {
|
|
74
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
75
|
+
try {
|
|
76
|
+
const [lowercaseAddress] = yield provider.send('eth_requestAccounts', []);
|
|
77
|
+
const publicAddress = ethers.utils.getAddress(lowercaseAddress);
|
|
78
|
+
return publicAddress;
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
walletConnectorCore.logger.error(err);
|
|
82
|
+
return Promise.reject(err);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
static signMessageWithName(messageToSign, name) {
|
|
87
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
88
|
+
const walletAddress = yield this.fetchPublicAddressWithName(name);
|
|
89
|
+
if (!walletAddress) {
|
|
90
|
+
return Promise.resolve(undefined);
|
|
91
|
+
}
|
|
92
|
+
const provider = this.findProvider(name);
|
|
93
|
+
if (!provider) {
|
|
94
|
+
return Promise.resolve(undefined);
|
|
95
|
+
}
|
|
96
|
+
const signer = provider.getSigner();
|
|
97
|
+
const signedMessage = yield signer.signMessage(messageToSign);
|
|
98
|
+
return signedMessage;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
static _setupEventListeners(name, walletConnector, web3Provider) {
|
|
102
|
+
if (!web3Provider) {
|
|
103
|
+
return {
|
|
104
|
+
tearDownEventListeners: () => { },
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const externalProvider = web3Provider.provider;
|
|
108
|
+
const { handleAccountChange, handleChainChange, handleDisconnect } = eventListenerHandlers.eventListenerHandlers(walletConnector, web3Provider);
|
|
109
|
+
externalProvider.on('accountsChanged', handleAccountChange);
|
|
110
|
+
externalProvider.on('chainChanged', handleChainChange);
|
|
111
|
+
externalProvider.on('disconnect', handleDisconnect);
|
|
112
|
+
const tearDownEventListeners = () => {
|
|
113
|
+
const web3Provider = this.findProvider(name);
|
|
114
|
+
if (!web3Provider || !(web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.provider)) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const externalProvider = web3Provider.provider;
|
|
118
|
+
if (handleAccountChange) {
|
|
119
|
+
externalProvider.removeListener('accountsChanged', handleAccountChange);
|
|
120
|
+
}
|
|
121
|
+
if (handleChainChange) {
|
|
122
|
+
externalProvider.removeListener('chainChanged', handleChainChange);
|
|
123
|
+
}
|
|
124
|
+
if (handleDisconnect) {
|
|
125
|
+
externalProvider.removeListener('disconnect', handleDisconnect);
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
return {
|
|
129
|
+
tearDownEventListeners,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
_a = LegacyEthProviderHelper;
|
|
134
|
+
LegacyEthProviderHelper.MetamaskProvider = () =>
|
|
135
|
+
// Stop these wallets from showing up as MetaMask
|
|
136
|
+
_a.installedProviderLookup([
|
|
137
|
+
{ flag: 'isDawn', value: false },
|
|
138
|
+
{ flag: 'isBraveWallet', value: false },
|
|
139
|
+
{ flag: 'isTrustWallet', value: false },
|
|
140
|
+
{ flag: 'isExodus', value: false },
|
|
141
|
+
{ flag: 'isPhantom', value: false },
|
|
142
|
+
{ flag: 'isZerion', value: false },
|
|
143
|
+
{ flag: 'isMetaMask', value: true },
|
|
144
|
+
{ flag: 'isSuperb', value: false },
|
|
145
|
+
{ flag: 'isRabby', value: false },
|
|
146
|
+
]);
|
|
147
|
+
LegacyEthProviderHelper.BraveProvider = () => _a.installedProviderLookup([{ flag: 'isBraveWallet', value: true }]);
|
|
148
|
+
LegacyEthProviderHelper.DawnProvider = () => _a.installedProviderLookup([{ flag: 'isDawn', value: true }]);
|
|
149
|
+
LegacyEthProviderHelper.FrameProvider = () => _a.installedProviderLookup([{ flag: 'isFrame', value: true }]);
|
|
150
|
+
LegacyEthProviderHelper.CoinbaseProvider = () => _a.installedProviderLookup([{ flag: 'isCoinbaseWallet', value: true }]);
|
|
151
|
+
LegacyEthProviderHelper.OperaProvider = () => _a.installedProviderLookup([{ flag: 'isOpera', value: true }]);
|
|
152
|
+
LegacyEthProviderHelper.GameStopProvider = () => _a.installedProviderLookup([{ flag: 'isGamestop', value: true }]);
|
|
153
|
+
LegacyEthProviderHelper.ExodusProvider = () => _a.installedProviderLookup([{ flag: 'isExodus', value: true }]);
|
|
154
|
+
LegacyEthProviderHelper.BloctoProvider = () => _a.installedProviderLookup([{ flag: 'isBlocto', value: true }]);
|
|
155
|
+
LegacyEthProviderHelper.TrustWalletProvider = () => _a.installedProviderLookup([{ flag: 'isTrustWallet', value: true }]);
|
|
156
|
+
LegacyEthProviderHelper.PhantomProvider = () => _a.installedProviderLookup([{ flag: 'isPhantom', value: true }]);
|
|
157
|
+
LegacyEthProviderHelper.ZerionProvider = () => _a.installedProviderLookup([{ flag: 'isZerion', value: true }]);
|
|
158
|
+
LegacyEthProviderHelper.SuperbProvider = () => _a.installedProviderLookup([{ flag: 'isSuperb', value: true }]);
|
|
159
|
+
LegacyEthProviderHelper.RabbyProvider = () => _a.installedProviderLookup([{ flag: 'isRabby', value: true }]);
|
|
160
|
+
LegacyEthProviderHelper.UnknownInjectedProvider = () => _a.installedProviderLookup([
|
|
161
|
+
{ flag: 'isMetaMask', value: false },
|
|
162
|
+
{ flag: 'isExodus', value: false },
|
|
163
|
+
{ flag: 'isCoinbaseWallet', value: false },
|
|
164
|
+
{ flag: 'isBraveWallet', value: false },
|
|
165
|
+
{ flag: 'isGamestop', value: false },
|
|
166
|
+
{ flag: 'isFrame', value: false },
|
|
167
|
+
{ flag: 'isOpera', value: false },
|
|
168
|
+
{ flag: 'isBlocto', value: false },
|
|
169
|
+
{ flag: 'isTrustWallet', value: false },
|
|
170
|
+
{ flag: 'isPhantom', value: false },
|
|
171
|
+
{ flag: 'isZerion', value: false },
|
|
172
|
+
{ flag: 'isSuperb', value: false },
|
|
173
|
+
{ flag: 'isRabby', value: false },
|
|
174
|
+
]);
|
|
175
|
+
LegacyEthProviderHelper.providers = {
|
|
176
|
+
bloctoinjected: _a.BloctoProvider,
|
|
177
|
+
braveevm: _a.BraveProvider,
|
|
178
|
+
coinbase: _a.CoinbaseProvider,
|
|
179
|
+
dawn: _a.DawnProvider,
|
|
180
|
+
exodusevm: _a.ExodusProvider,
|
|
181
|
+
frame: _a.FrameProvider,
|
|
182
|
+
gamestop: _a.GameStopProvider,
|
|
183
|
+
injectedwallet: _a.UnknownInjectedProvider,
|
|
184
|
+
metamask: _a.MetamaskProvider,
|
|
185
|
+
opera: _a.OperaProvider,
|
|
186
|
+
phantomevm: _a.PhantomProvider,
|
|
187
|
+
rabby: _a.RabbyProvider,
|
|
188
|
+
superb: _a.SuperbProvider,
|
|
189
|
+
trust: _a.TrustWalletProvider,
|
|
190
|
+
zerion: _a.ZerionProvider,
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
exports.LegacyEthProviderHelper = LegacyEthProviderHelper;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
import { ProviderCondition, WalletConnector } from '@dynamic-labs/wallet-connector-core';
|
|
3
|
+
import { IEthereum, ProviderFlag, Provider } from './types';
|
|
4
|
+
export declare class LegacyEthProviderHelper {
|
|
5
|
+
static MetamaskProvider: Provider;
|
|
6
|
+
static BraveProvider: Provider;
|
|
7
|
+
static DawnProvider: Provider;
|
|
8
|
+
static FrameProvider: Provider;
|
|
9
|
+
static CoinbaseProvider: Provider;
|
|
10
|
+
static OperaProvider: Provider;
|
|
11
|
+
static GameStopProvider: Provider;
|
|
12
|
+
static ExodusProvider: Provider;
|
|
13
|
+
static BloctoProvider: Provider;
|
|
14
|
+
static TrustWalletProvider: Provider;
|
|
15
|
+
static PhantomProvider: Provider;
|
|
16
|
+
static ZerionProvider: Provider;
|
|
17
|
+
static SuperbProvider: Provider;
|
|
18
|
+
static RabbyProvider: Provider;
|
|
19
|
+
static UnknownInjectedProvider: Provider;
|
|
20
|
+
static providers: {
|
|
21
|
+
[wallet: string]: Provider;
|
|
22
|
+
};
|
|
23
|
+
static installedProviderLookup(providerFlags: Array<ProviderCondition<ProviderFlag>>): IEthereum | undefined;
|
|
24
|
+
static allInstalledProviders(): IEthereum[];
|
|
25
|
+
static isInstalledHelper(walletName: string): boolean;
|
|
26
|
+
static findProvider(walletName: string): ethers.providers.Web3Provider | undefined;
|
|
27
|
+
static fetchPublicAddressWithName(name: string): Promise<string | undefined>;
|
|
28
|
+
static fetchPublicAddressWithProvider(provider: ethers.providers.Web3Provider): Promise<string | undefined>;
|
|
29
|
+
static signMessageWithName(messageToSign: string, name: string): Promise<string | undefined>;
|
|
30
|
+
static _setupEventListeners(name: string, walletConnector: WalletConnector, web3Provider?: ethers.providers.Web3Provider): {
|
|
31
|
+
tearDownEventListeners: () => void;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { __awaiter } from '../_virtual/_tslib.js';
|
|
2
|
+
import { ethers, utils } from 'ethers';
|
|
3
|
+
import { ProviderLookup, normalizeWalletName, logger } from '@dynamic-labs/wallet-connector-core';
|
|
4
|
+
import { isUnsupportedProviderError } from './utils/isUnsupportedProviderError/isUnsupportedProviderError.js';
|
|
5
|
+
import { eventListenerHandlers } from './utils/eventListenerHandlers.js';
|
|
6
|
+
|
|
7
|
+
var _a;
|
|
8
|
+
class LegacyEthProviderHelper {
|
|
9
|
+
static installedProviderLookup(providerFlags) {
|
|
10
|
+
const allInstalledProviders = this.allInstalledProviders();
|
|
11
|
+
return ProviderLookup(allInstalledProviders, providerFlags);
|
|
12
|
+
}
|
|
13
|
+
static allInstalledProviders() {
|
|
14
|
+
var _b;
|
|
15
|
+
const ethereumProviders = [];
|
|
16
|
+
if (window.ethereum) {
|
|
17
|
+
if (!window.ethereum.providers) {
|
|
18
|
+
ethereumProviders.push(window.ethereum);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
window.ethereum.providers.forEach((provider) => {
|
|
22
|
+
ethereumProviders.push(provider);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if ((_b = window.phantom) === null || _b === void 0 ? void 0 : _b.ethereum) {
|
|
27
|
+
ethereumProviders.push(window.phantom.ethereum);
|
|
28
|
+
}
|
|
29
|
+
if (window.zerionWallet) {
|
|
30
|
+
ethereumProviders.push(window.zerionWallet);
|
|
31
|
+
}
|
|
32
|
+
if (window.coinbaseWalletExtension) {
|
|
33
|
+
ethereumProviders.push(window.coinbaseWalletExtension);
|
|
34
|
+
}
|
|
35
|
+
if (window.superb) {
|
|
36
|
+
ethereumProviders.push(window.superb);
|
|
37
|
+
}
|
|
38
|
+
return ethereumProviders;
|
|
39
|
+
}
|
|
40
|
+
static isInstalledHelper(walletName) {
|
|
41
|
+
return this.findProvider(walletName) !== undefined;
|
|
42
|
+
}
|
|
43
|
+
static findProvider(walletName) {
|
|
44
|
+
var _b, _c;
|
|
45
|
+
try {
|
|
46
|
+
const provider = (_c = (_b = this.providers)[normalizeWalletName(walletName)]) === null || _c === void 0 ? void 0 : _c.call(_b);
|
|
47
|
+
return provider === undefined
|
|
48
|
+
? undefined
|
|
49
|
+
: new ethers.providers.Web3Provider(provider, 'any'); // https://github.com/ethers-io/ethers.js/discussions/1480
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
if (isUnsupportedProviderError(err)) {
|
|
53
|
+
logger.error(`ETH Provider is not supported ${err.value}`, err);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
logger.error(`Could not find provider for ${walletName}`, err);
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
static fetchPublicAddressWithName(name) {
|
|
61
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
const provider = this.findProvider(name);
|
|
63
|
+
if (!provider) {
|
|
64
|
+
return Promise.resolve(undefined);
|
|
65
|
+
}
|
|
66
|
+
return this.fetchPublicAddressWithProvider(provider);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
static fetchPublicAddressWithProvider(provider) {
|
|
70
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
try {
|
|
72
|
+
const [lowercaseAddress] = yield provider.send('eth_requestAccounts', []);
|
|
73
|
+
const publicAddress = utils.getAddress(lowercaseAddress);
|
|
74
|
+
return publicAddress;
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
logger.error(err);
|
|
78
|
+
return Promise.reject(err);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
static signMessageWithName(messageToSign, name) {
|
|
83
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
const walletAddress = yield this.fetchPublicAddressWithName(name);
|
|
85
|
+
if (!walletAddress) {
|
|
86
|
+
return Promise.resolve(undefined);
|
|
87
|
+
}
|
|
88
|
+
const provider = this.findProvider(name);
|
|
89
|
+
if (!provider) {
|
|
90
|
+
return Promise.resolve(undefined);
|
|
91
|
+
}
|
|
92
|
+
const signer = provider.getSigner();
|
|
93
|
+
const signedMessage = yield signer.signMessage(messageToSign);
|
|
94
|
+
return signedMessage;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
static _setupEventListeners(name, walletConnector, web3Provider) {
|
|
98
|
+
if (!web3Provider) {
|
|
99
|
+
return {
|
|
100
|
+
tearDownEventListeners: () => { },
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
const externalProvider = web3Provider.provider;
|
|
104
|
+
const { handleAccountChange, handleChainChange, handleDisconnect } = eventListenerHandlers(walletConnector, web3Provider);
|
|
105
|
+
externalProvider.on('accountsChanged', handleAccountChange);
|
|
106
|
+
externalProvider.on('chainChanged', handleChainChange);
|
|
107
|
+
externalProvider.on('disconnect', handleDisconnect);
|
|
108
|
+
const tearDownEventListeners = () => {
|
|
109
|
+
const web3Provider = this.findProvider(name);
|
|
110
|
+
if (!web3Provider || !(web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.provider)) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const externalProvider = web3Provider.provider;
|
|
114
|
+
if (handleAccountChange) {
|
|
115
|
+
externalProvider.removeListener('accountsChanged', handleAccountChange);
|
|
116
|
+
}
|
|
117
|
+
if (handleChainChange) {
|
|
118
|
+
externalProvider.removeListener('chainChanged', handleChainChange);
|
|
119
|
+
}
|
|
120
|
+
if (handleDisconnect) {
|
|
121
|
+
externalProvider.removeListener('disconnect', handleDisconnect);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
return {
|
|
125
|
+
tearDownEventListeners,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
_a = LegacyEthProviderHelper;
|
|
130
|
+
LegacyEthProviderHelper.MetamaskProvider = () =>
|
|
131
|
+
// Stop these wallets from showing up as MetaMask
|
|
132
|
+
_a.installedProviderLookup([
|
|
133
|
+
{ flag: 'isDawn', value: false },
|
|
134
|
+
{ flag: 'isBraveWallet', value: false },
|
|
135
|
+
{ flag: 'isTrustWallet', value: false },
|
|
136
|
+
{ flag: 'isExodus', value: false },
|
|
137
|
+
{ flag: 'isPhantom', value: false },
|
|
138
|
+
{ flag: 'isZerion', value: false },
|
|
139
|
+
{ flag: 'isMetaMask', value: true },
|
|
140
|
+
{ flag: 'isSuperb', value: false },
|
|
141
|
+
{ flag: 'isRabby', value: false },
|
|
142
|
+
]);
|
|
143
|
+
LegacyEthProviderHelper.BraveProvider = () => _a.installedProviderLookup([{ flag: 'isBraveWallet', value: true }]);
|
|
144
|
+
LegacyEthProviderHelper.DawnProvider = () => _a.installedProviderLookup([{ flag: 'isDawn', value: true }]);
|
|
145
|
+
LegacyEthProviderHelper.FrameProvider = () => _a.installedProviderLookup([{ flag: 'isFrame', value: true }]);
|
|
146
|
+
LegacyEthProviderHelper.CoinbaseProvider = () => _a.installedProviderLookup([{ flag: 'isCoinbaseWallet', value: true }]);
|
|
147
|
+
LegacyEthProviderHelper.OperaProvider = () => _a.installedProviderLookup([{ flag: 'isOpera', value: true }]);
|
|
148
|
+
LegacyEthProviderHelper.GameStopProvider = () => _a.installedProviderLookup([{ flag: 'isGamestop', value: true }]);
|
|
149
|
+
LegacyEthProviderHelper.ExodusProvider = () => _a.installedProviderLookup([{ flag: 'isExodus', value: true }]);
|
|
150
|
+
LegacyEthProviderHelper.BloctoProvider = () => _a.installedProviderLookup([{ flag: 'isBlocto', value: true }]);
|
|
151
|
+
LegacyEthProviderHelper.TrustWalletProvider = () => _a.installedProviderLookup([{ flag: 'isTrustWallet', value: true }]);
|
|
152
|
+
LegacyEthProviderHelper.PhantomProvider = () => _a.installedProviderLookup([{ flag: 'isPhantom', value: true }]);
|
|
153
|
+
LegacyEthProviderHelper.ZerionProvider = () => _a.installedProviderLookup([{ flag: 'isZerion', value: true }]);
|
|
154
|
+
LegacyEthProviderHelper.SuperbProvider = () => _a.installedProviderLookup([{ flag: 'isSuperb', value: true }]);
|
|
155
|
+
LegacyEthProviderHelper.RabbyProvider = () => _a.installedProviderLookup([{ flag: 'isRabby', value: true }]);
|
|
156
|
+
LegacyEthProviderHelper.UnknownInjectedProvider = () => _a.installedProviderLookup([
|
|
157
|
+
{ flag: 'isMetaMask', value: false },
|
|
158
|
+
{ flag: 'isExodus', value: false },
|
|
159
|
+
{ flag: 'isCoinbaseWallet', value: false },
|
|
160
|
+
{ flag: 'isBraveWallet', value: false },
|
|
161
|
+
{ flag: 'isGamestop', value: false },
|
|
162
|
+
{ flag: 'isFrame', value: false },
|
|
163
|
+
{ flag: 'isOpera', value: false },
|
|
164
|
+
{ flag: 'isBlocto', value: false },
|
|
165
|
+
{ flag: 'isTrustWallet', value: false },
|
|
166
|
+
{ flag: 'isPhantom', value: false },
|
|
167
|
+
{ flag: 'isZerion', value: false },
|
|
168
|
+
{ flag: 'isSuperb', value: false },
|
|
169
|
+
{ flag: 'isRabby', value: false },
|
|
170
|
+
]);
|
|
171
|
+
LegacyEthProviderHelper.providers = {
|
|
172
|
+
bloctoinjected: _a.BloctoProvider,
|
|
173
|
+
braveevm: _a.BraveProvider,
|
|
174
|
+
coinbase: _a.CoinbaseProvider,
|
|
175
|
+
dawn: _a.DawnProvider,
|
|
176
|
+
exodusevm: _a.ExodusProvider,
|
|
177
|
+
frame: _a.FrameProvider,
|
|
178
|
+
gamestop: _a.GameStopProvider,
|
|
179
|
+
injectedwallet: _a.UnknownInjectedProvider,
|
|
180
|
+
metamask: _a.MetamaskProvider,
|
|
181
|
+
opera: _a.OperaProvider,
|
|
182
|
+
phantomevm: _a.PhantomProvider,
|
|
183
|
+
rabby: _a.RabbyProvider,
|
|
184
|
+
superb: _a.SuperbProvider,
|
|
185
|
+
trust: _a.TrustWalletProvider,
|
|
186
|
+
zerion: _a.ZerionProvider,
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
export { LegacyEthProviderHelper };
|
package/src/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
1
2
|
import { ProviderCondition } from '@dynamic-labs/wallet-connector-core';
|
|
2
3
|
declare global {
|
|
3
4
|
interface IWindowPhantom {
|
|
@@ -22,3 +23,13 @@ export type IEthereum = {
|
|
|
22
23
|
};
|
|
23
24
|
export type ProviderFlag = 'isDawn' | 'isBraveWallet' | 'isCoinbaseWallet' | 'isFrame' | 'isGamestop' | 'isMetaMask' | 'isExodus' | 'isOpera' | 'isBlocto' | 'isTrustWallet' | 'isZerion' | 'isPhantom' | 'isSuperb' | 'isRabby' | 'isOkxWallet';
|
|
24
25
|
export type EthProviderCondition = ProviderCondition<ProviderFlag>;
|
|
26
|
+
export type Provider = () => ethers.providers.ExternalProvider | undefined;
|
|
27
|
+
export type AccountChangeEventHandler = (accounts: string[]) => Promise<void>;
|
|
28
|
+
export type ChainChangeEventHandler = (chainId: string | number) => Promise<void>;
|
|
29
|
+
export type DisconnectEventHandler = (error?: {
|
|
30
|
+
code: number;
|
|
31
|
+
}) => Promise<void>;
|
|
32
|
+
export type ExternalProviderEventEmitter = ethers.providers.ExternalProvider & {
|
|
33
|
+
on: (event: string, listener: (...args: Array<any>) => unknown) => void;
|
|
34
|
+
removeListener: (event: string, listener: (...args: Array<any>) => unknown) => void;
|
|
35
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _tslib = require('../../_virtual/_tslib.cjs');
|
|
6
|
+
|
|
7
|
+
const eventListenerHandlers = (walletConnector, web3Provider) => {
|
|
8
|
+
const handleAccountChange = (accounts) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
9
|
+
if (accounts.length === 0) {
|
|
10
|
+
walletConnector.emit('disconnect');
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
walletConnector.emit('accountChange', { accounts });
|
|
14
|
+
});
|
|
15
|
+
const handleChainChange = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
const network = yield web3Provider.getNetwork();
|
|
17
|
+
walletConnector.emit('chainChange', {
|
|
18
|
+
chain: network.chainId.toString(),
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
const handleDisconnect = (error) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
22
|
+
if ((error === null || error === void 0 ? void 0 : error.code) === 1013) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
walletConnector.emit('disconnect');
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
handleAccountChange,
|
|
29
|
+
handleChainChange,
|
|
30
|
+
handleDisconnect,
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
exports.eventListenerHandlers = eventListenerHandlers;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Web3Provider } from '@ethersproject/providers';
|
|
2
|
+
import { WalletConnector } from '@dynamic-labs/wallet-connector-core';
|
|
3
|
+
import { AccountChangeEventHandler, ChainChangeEventHandler, DisconnectEventHandler } from '../types';
|
|
4
|
+
export declare const eventListenerHandlers: (walletConnector: WalletConnector, web3Provider: Web3Provider) => {
|
|
5
|
+
handleAccountChange: AccountChangeEventHandler;
|
|
6
|
+
handleChainChange: ChainChangeEventHandler;
|
|
7
|
+
handleDisconnect: DisconnectEventHandler;
|
|
8
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { __awaiter } from '../../_virtual/_tslib.js';
|
|
2
|
+
|
|
3
|
+
const eventListenerHandlers = (walletConnector, web3Provider) => {
|
|
4
|
+
const handleAccountChange = (accounts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
5
|
+
if (accounts.length === 0) {
|
|
6
|
+
walletConnector.emit('disconnect');
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
walletConnector.emit('accountChange', { accounts });
|
|
10
|
+
});
|
|
11
|
+
const handleChainChange = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
12
|
+
const network = yield web3Provider.getNetwork();
|
|
13
|
+
walletConnector.emit('chainChange', {
|
|
14
|
+
chain: network.chainId.toString(),
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
const handleDisconnect = (error) => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
|
+
if ((error === null || error === void 0 ? void 0 : error.code) === 1013) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
walletConnector.emit('disconnect');
|
|
22
|
+
});
|
|
23
|
+
return {
|
|
24
|
+
handleAccountChange,
|
|
25
|
+
handleChainChange,
|
|
26
|
+
handleDisconnect,
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export { eventListenerHandlers };
|
|
@@ -5,24 +5,10 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var walletConnectV2 = require('./walletConnectV2.cjs');
|
|
6
6
|
var walletConnect = require('./walletConnect.cjs');
|
|
7
7
|
|
|
8
|
-
// These wallets are either not supported or implement their
|
|
9
|
-
// own WalletConnect connector
|
|
10
|
-
const filteredWalletConnectWallets = [
|
|
11
|
-
'MetaMask',
|
|
12
|
-
'Gnosis Safe',
|
|
13
|
-
'Trust',
|
|
14
|
-
'lilico',
|
|
15
|
-
'Keplr',
|
|
16
|
-
'Zerion',
|
|
17
|
-
'Rabby',
|
|
18
|
-
'Exodus',
|
|
19
|
-
'OKX Wallet',
|
|
20
|
-
];
|
|
21
8
|
const fetchWalletConnectWallets = ({ isWalletConnectV2Enabled, walletBook, }) => {
|
|
22
9
|
var _a;
|
|
23
10
|
return Object.values((_a = walletBook === null || walletBook === void 0 ? void 0 : walletBook.wallets) !== null && _a !== void 0 ? _a : {})
|
|
24
|
-
.filter((wallet) => wallet.walletConnect &&
|
|
25
|
-
!filteredWalletConnectWallets.includes(wallet.shortName || wallet.name))
|
|
11
|
+
.filter((wallet) => wallet.walletConnect && !wallet.filterFromWalletConnect)
|
|
26
12
|
.map((wallet) => {
|
|
27
13
|
var _a;
|
|
28
14
|
const { shortName } = wallet;
|
|
@@ -59,5 +45,4 @@ const getWalletConnectConnector = ({ isWalletConnectV2Enabled, }) => isWalletCon
|
|
|
59
45
|
};
|
|
60
46
|
|
|
61
47
|
exports.fetchWalletConnectWallets = fetchWalletConnectWallets;
|
|
62
|
-
exports.filteredWalletConnectWallets = filteredWalletConnectWallets;
|
|
63
48
|
exports.getWalletConnectConnector = getWalletConnectConnector;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { WalletBookSchema } from '@dynamic-labs/wallet-book';
|
|
2
2
|
import { WalletConnectorConstructor } from '@dynamic-labs/wallet-connector-core';
|
|
3
|
-
export declare const filteredWalletConnectWallets: string[];
|
|
4
3
|
export declare const fetchWalletConnectWallets: ({ isWalletConnectV2Enabled, walletBook, }: {
|
|
5
4
|
isWalletConnectV2Enabled: boolean;
|
|
6
5
|
walletBook: WalletBookSchema;
|
|
@@ -1,24 +1,10 @@
|
|
|
1
1
|
import { WalletConnectV2 } from './walletConnectV2.js';
|
|
2
2
|
import { WalletConnect } from './walletConnect.js';
|
|
3
3
|
|
|
4
|
-
// These wallets are either not supported or implement their
|
|
5
|
-
// own WalletConnect connector
|
|
6
|
-
const filteredWalletConnectWallets = [
|
|
7
|
-
'MetaMask',
|
|
8
|
-
'Gnosis Safe',
|
|
9
|
-
'Trust',
|
|
10
|
-
'lilico',
|
|
11
|
-
'Keplr',
|
|
12
|
-
'Zerion',
|
|
13
|
-
'Rabby',
|
|
14
|
-
'Exodus',
|
|
15
|
-
'OKX Wallet',
|
|
16
|
-
];
|
|
17
4
|
const fetchWalletConnectWallets = ({ isWalletConnectV2Enabled, walletBook, }) => {
|
|
18
5
|
var _a;
|
|
19
6
|
return Object.values((_a = walletBook === null || walletBook === void 0 ? void 0 : walletBook.wallets) !== null && _a !== void 0 ? _a : {})
|
|
20
|
-
.filter((wallet) => wallet.walletConnect &&
|
|
21
|
-
!filteredWalletConnectWallets.includes(wallet.shortName || wallet.name))
|
|
7
|
+
.filter((wallet) => wallet.walletConnect && !wallet.filterFromWalletConnect)
|
|
22
8
|
.map((wallet) => {
|
|
23
9
|
var _a;
|
|
24
10
|
const { shortName } = wallet;
|
|
@@ -54,4 +40,4 @@ const getWalletConnectConnector = ({ isWalletConnectV2Enabled, }) => isWalletCon
|
|
|
54
40
|
}
|
|
55
41
|
};
|
|
56
42
|
|
|
57
|
-
export { fetchWalletConnectWallets,
|
|
43
|
+
export { fetchWalletConnectWallets, getWalletConnectConnector };
|
|
@@ -66,7 +66,7 @@ class WalletConnect extends EthWalletConnector.EthWalletConnector {
|
|
|
66
66
|
}
|
|
67
67
|
fetchPublicAddress(opts) {
|
|
68
68
|
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
69
|
-
return client.fetchWalletConnectEVMPublicAddress(walletBook.getWalletBookWallet(this.walletBook, this.
|
|
69
|
+
return client.fetchWalletConnectEVMPublicAddress(walletBook.getWalletBookWallet(this.walletBook, this.key), this.getClient(), this.deepLinkPreference, Object.assign(Object.assign({}, opts), { onConnect: (payload) => {
|
|
70
70
|
var _a;
|
|
71
71
|
(_a = opts === null || opts === void 0 ? void 0 : opts.onConnect) === null || _a === void 0 ? void 0 : _a.call(opts, payload);
|
|
72
72
|
this.connectedChain = payload.params[0].chainId ? 'EVM' : 'SOL';
|
|
@@ -75,7 +75,7 @@ class WalletConnect extends EthWalletConnector.EthWalletConnector {
|
|
|
75
75
|
}
|
|
76
76
|
getDeepLink() {
|
|
77
77
|
var _a;
|
|
78
|
-
const wallet = walletBook.getWalletBookWallet(this.walletBook, this.
|
|
78
|
+
const wallet = walletBook.getWalletBookWallet(this.walletBook, this.key);
|
|
79
79
|
if (!utils.isMobile() && !((_a = wallet.desktop) === null || _a === void 0 ? void 0 : _a.native)) {
|
|
80
80
|
return undefined;
|
|
81
81
|
}
|
|
@@ -88,7 +88,7 @@ class WalletConnect extends EthWalletConnector.EthWalletConnector {
|
|
|
88
88
|
}
|
|
89
89
|
signMessage(messageToSign) {
|
|
90
90
|
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
91
|
-
return client.signWalletConnectPersonalMessage(messageToSign, walletBook.getWalletBookWallet(this.walletBook, this.
|
|
91
|
+
return client.signWalletConnectPersonalMessage(messageToSign, walletBook.getWalletBookWallet(this.walletBook, this.key), this.getClient(), this.deepLinkPreference,
|
|
92
92
|
// don't call getRpcProvider until we really need to
|
|
93
93
|
() => _tslib.__awaiter(this, void 0, void 0, function* () { return this.getRpcProvider(); }));
|
|
94
94
|
});
|
|
@@ -120,7 +120,7 @@ class WalletConnect extends EthWalletConnector.EthWalletConnector {
|
|
|
120
120
|
}
|
|
121
121
|
if (utils.isMobile()) {
|
|
122
122
|
const deepLink = walletConnectorCore.getDeepLink({
|
|
123
|
-
metadata: walletBook.getWalletBookWallet(this.walletBook, this.
|
|
123
|
+
metadata: walletBook.getWalletBookWallet(this.walletBook, this.key),
|
|
124
124
|
mode: 'regular',
|
|
125
125
|
preference: this.deepLinkPreference,
|
|
126
126
|
uri: client.uri,
|