@broxus/evm-connect 1.0.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/LICENSE +21 -0
- package/README.md +182 -0
- package/dist/cjs/components/EvmConnectButton/index.d.ts +21 -0
- package/dist/cjs/components/EvmConnectButton/index.js +52 -0
- package/dist/cjs/components/EvmConnectDialog/index.css +130 -0
- package/dist/cjs/components/EvmConnectDialog/index.d.ts +11 -0
- package/dist/cjs/components/EvmConnectDialog/index.js +65 -0
- package/dist/cjs/components/EvmConnector/index.css +37 -0
- package/dist/cjs/components/EvmConnector/index.d.ts +20 -0
- package/dist/cjs/components/EvmConnector/index.js +97 -0
- package/dist/cjs/components/EvmProvidersDispatcher/ConnectionRequest/index.css +43 -0
- package/dist/cjs/components/EvmProvidersDispatcher/ConnectionRequest/index.d.ts +3 -0
- package/dist/cjs/components/EvmProvidersDispatcher/ConnectionRequest/index.js +65 -0
- package/dist/cjs/components/EvmProvidersDispatcher/ProviderButton/index.css +54 -0
- package/dist/cjs/components/EvmProvidersDispatcher/ProviderButton/index.d.ts +11 -0
- package/dist/cjs/components/EvmProvidersDispatcher/ProviderButton/index.js +93 -0
- package/dist/cjs/components/EvmProvidersDispatcher/index.css +13 -0
- package/dist/cjs/components/EvmProvidersDispatcher/index.d.ts +5 -0
- package/dist/cjs/components/EvmProvidersDispatcher/index.js +49 -0
- package/dist/cjs/components/index.d.ts +4 -0
- package/dist/cjs/components/index.js +20 -0
- package/dist/cjs/constants.d.ts +1 -0
- package/dist/cjs/constants.js +4 -0
- package/dist/cjs/context/EvmWalletProvidersContext.d.ts +20 -0
- package/dist/cjs/context/EvmWalletProvidersContext.js +95 -0
- package/dist/cjs/context/EvmWalletServiceContext.d.ts +10 -0
- package/dist/cjs/context/EvmWalletServiceContext.js +55 -0
- package/dist/cjs/context/index.d.ts +2 -0
- package/dist/cjs/context/index.js +18 -0
- package/dist/cjs/core/EIP6963Connector.d.ts +17 -0
- package/dist/cjs/core/EIP6963Connector.js +127 -0
- package/dist/cjs/core/EthereumConnector.d.ts +43 -0
- package/dist/cjs/core/EthereumConnector.js +190 -0
- package/dist/cjs/core/MetaMask.d.ts +24 -0
- package/dist/cjs/core/MetaMask.js +159 -0
- package/dist/cjs/core/WalletConnect.d.ts +20 -0
- package/dist/cjs/core/WalletConnect.js +141 -0
- package/dist/cjs/core/index.d.ts +4 -0
- package/dist/cjs/core/index.js +20 -0
- package/dist/cjs/hooks/index.d.ts +4 -0
- package/dist/cjs/hooks/index.js +20 -0
- package/dist/cjs/hooks/useEIP6963Connections.d.ts +6 -0
- package/dist/cjs/hooks/useEIP6963Connections.js +47 -0
- package/dist/cjs/hooks/useFilteredConnections.d.ts +2 -0
- package/dist/cjs/hooks/useFilteredConnections.js +7 -0
- package/dist/cjs/hooks/useOrderedConnections.d.ts +2 -0
- package/dist/cjs/hooks/useOrderedConnections.js +41 -0
- package/dist/cjs/hooks/useRecentConnectionMeta.d.ts +15 -0
- package/dist/cjs/hooks/useRecentConnectionMeta.js +80 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.js +24 -0
- package/dist/cjs/intl/index.d.ts +107 -0
- package/dist/cjs/intl/index.js +110 -0
- package/dist/cjs/services/EvmWalletService.d.ts +165 -0
- package/dist/cjs/services/EvmWalletService.js +430 -0
- package/dist/cjs/services/index.d.ts +1 -0
- package/dist/cjs/services/index.js +17 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/cjs/types.d.ts +47 -0
- package/dist/cjs/types.js +15 -0
- package/dist/cjs/utils/get-evm-provider-platform-link.d.ts +2 -0
- package/dist/cjs/utils/get-evm-provider-platform-link.js +14 -0
- package/dist/cjs/utils/index.d.ts +2 -0
- package/dist/cjs/utils/index.js +18 -0
- package/dist/cjs/utils/parse-chain-id.d.ts +1 -0
- package/dist/cjs/utils/parse-chain-id.js +7 -0
- package/dist/esm/components/EvmConnectButton/index.d.ts +21 -0
- package/dist/esm/components/EvmConnectButton/index.js +26 -0
- package/dist/esm/components/EvmConnectDialog/index.css +130 -0
- package/dist/esm/components/EvmConnectDialog/index.d.ts +11 -0
- package/dist/esm/components/EvmConnectDialog/index.js +36 -0
- package/dist/esm/components/EvmConnector/index.css +37 -0
- package/dist/esm/components/EvmConnector/index.d.ts +20 -0
- package/dist/esm/components/EvmConnector/index.js +68 -0
- package/dist/esm/components/EvmProvidersDispatcher/ConnectionRequest/index.css +43 -0
- package/dist/esm/components/EvmProvidersDispatcher/ConnectionRequest/index.d.ts +3 -0
- package/dist/esm/components/EvmProvidersDispatcher/ConnectionRequest/index.js +35 -0
- package/dist/esm/components/EvmProvidersDispatcher/ProviderButton/index.css +54 -0
- package/dist/esm/components/EvmProvidersDispatcher/ProviderButton/index.d.ts +11 -0
- package/dist/esm/components/EvmProvidersDispatcher/ProviderButton/index.js +64 -0
- package/dist/esm/components/EvmProvidersDispatcher/index.css +13 -0
- package/dist/esm/components/EvmProvidersDispatcher/index.d.ts +5 -0
- package/dist/esm/components/EvmProvidersDispatcher/index.js +23 -0
- package/dist/esm/components/index.d.ts +4 -0
- package/dist/esm/components/index.js +4 -0
- package/dist/esm/constants.d.ts +1 -0
- package/dist/esm/constants.js +1 -0
- package/dist/esm/context/EvmWalletProvidersContext.d.ts +20 -0
- package/dist/esm/context/EvmWalletProvidersContext.js +68 -0
- package/dist/esm/context/EvmWalletServiceContext.d.ts +10 -0
- package/dist/esm/context/EvmWalletServiceContext.js +28 -0
- package/dist/esm/context/index.d.ts +2 -0
- package/dist/esm/context/index.js +2 -0
- package/dist/esm/core/EIP6963Connector.d.ts +17 -0
- package/dist/esm/core/EIP6963Connector.js +123 -0
- package/dist/esm/core/EthereumConnector.d.ts +43 -0
- package/dist/esm/core/EthereumConnector.js +186 -0
- package/dist/esm/core/MetaMask.d.ts +24 -0
- package/dist/esm/core/MetaMask.js +152 -0
- package/dist/esm/core/WalletConnect.d.ts +20 -0
- package/dist/esm/core/WalletConnect.js +134 -0
- package/dist/esm/core/index.d.ts +4 -0
- package/dist/esm/core/index.js +4 -0
- package/dist/esm/hooks/index.d.ts +4 -0
- package/dist/esm/hooks/index.js +4 -0
- package/dist/esm/hooks/useEIP6963Connections.d.ts +6 -0
- package/dist/esm/hooks/useEIP6963Connections.js +20 -0
- package/dist/esm/hooks/useFilteredConnections.d.ts +2 -0
- package/dist/esm/hooks/useFilteredConnections.js +3 -0
- package/dist/esm/hooks/useOrderedConnections.d.ts +2 -0
- package/dist/esm/hooks/useOrderedConnections.js +14 -0
- package/dist/esm/hooks/useRecentConnectionMeta.d.ts +15 -0
- package/dist/esm/hooks/useRecentConnectionMeta.js +51 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.js +8 -0
- package/dist/esm/intl/index.d.ts +107 -0
- package/dist/esm/intl/index.js +108 -0
- package/dist/esm/services/EvmWalletService.d.ts +165 -0
- package/dist/esm/services/EvmWalletService.js +423 -0
- package/dist/esm/services/index.d.ts +1 -0
- package/dist/esm/services/index.js +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/esm/types.d.ts +47 -0
- package/dist/esm/types.js +12 -0
- package/dist/esm/utils/get-evm-provider-platform-link.d.ts +2 -0
- package/dist/esm/utils/get-evm-provider-platform-link.js +10 -0
- package/dist/esm/utils/index.d.ts +2 -0
- package/dist/esm/utils/index.js +2 -0
- package/dist/esm/utils/parse-chain-id.d.ts +1 -0
- package/dist/esm/utils/parse-chain-id.js +3 -0
- package/package.json +82 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { type EvmNetworkConfig } from '@broxus/js-bridge-essentials';
|
|
2
|
+
import { AbstractStore, type NativeCurrency } from '@broxus/js-core';
|
|
3
|
+
import { type IReactionDisposer } from 'mobx';
|
|
4
|
+
import Web3 from 'web3';
|
|
5
|
+
import { type EthereumConnector } from '../core';
|
|
6
|
+
import { type AddEthereumChainParams, type EvmWalletProviderConfig } from '../types';
|
|
7
|
+
export interface EvmWalletServiceCtorParams {
|
|
8
|
+
defaultNetworkId?: number;
|
|
9
|
+
/**
|
|
10
|
+
* List of supported networks
|
|
11
|
+
*/
|
|
12
|
+
networks?: Readonly<EvmNetworkConfig[]>;
|
|
13
|
+
providerId?: string;
|
|
14
|
+
/**
|
|
15
|
+
* List of supported Providers
|
|
16
|
+
*/
|
|
17
|
+
providers?: Readonly<EvmWalletProviderConfig[]>;
|
|
18
|
+
}
|
|
19
|
+
export interface EvmWalletServiceData {
|
|
20
|
+
balance?: string;
|
|
21
|
+
networks: Readonly<EvmNetworkConfig[]>;
|
|
22
|
+
}
|
|
23
|
+
export interface EvmWalletServiceState {
|
|
24
|
+
isSyncing?: boolean;
|
|
25
|
+
providerId?: string;
|
|
26
|
+
}
|
|
27
|
+
export declare class EvmWalletService extends AbstractStore<EvmWalletServiceData, EvmWalletServiceState> {
|
|
28
|
+
protected readonly params?: Readonly<EvmWalletServiceCtorParams> | undefined;
|
|
29
|
+
constructor(params?: Readonly<EvmWalletServiceCtorParams> | undefined);
|
|
30
|
+
/**
|
|
31
|
+
* Manually connect to the wallet
|
|
32
|
+
* @returns {Promise<void>}
|
|
33
|
+
*/
|
|
34
|
+
connect(): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Manually disconnect from the wallet
|
|
37
|
+
* @returns {Promise<void>}
|
|
38
|
+
*/
|
|
39
|
+
disconnect(force?: boolean): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Switch network or add a new one if not exists in the current connected wallet
|
|
42
|
+
* @param {number|AddEthereumChainParams} chainIdOrParams
|
|
43
|
+
* @returns {Promise<void>}
|
|
44
|
+
*/
|
|
45
|
+
switchNetwork(chainIdOrParams: number | AddEthereumChainParams): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Define current provider connector
|
|
48
|
+
* @returns {EthereumConnector|undefined}
|
|
49
|
+
*/
|
|
50
|
+
get connector(): EthereumConnector | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* An independent RPC connection that allows you to receive data from the blockchain without being
|
|
53
|
+
* able to send transactions.
|
|
54
|
+
*
|
|
55
|
+
* This connection does not require connection permissions and wrapped on `Web3` interface.
|
|
56
|
+
* @returns {Web3|undefined}
|
|
57
|
+
*/
|
|
58
|
+
get connection(): Web3 | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Returns current Web3 Instance
|
|
61
|
+
*/
|
|
62
|
+
get provider(): Web3 | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* Returns computed wallet balance value
|
|
65
|
+
* @returns {EvmWalletServiceData["balance"]}
|
|
66
|
+
*/
|
|
67
|
+
get balance(): EvmWalletServiceData['balance'];
|
|
68
|
+
/**
|
|
69
|
+
* List of the supported networks
|
|
70
|
+
* @returns {EvmWalletServiceData["networks"]}
|
|
71
|
+
*/
|
|
72
|
+
get networks(): EvmWalletServiceData['networks'];
|
|
73
|
+
/**
|
|
74
|
+
* Returns `true` if wallet contract is updating
|
|
75
|
+
* @returns {EvmWalletServiceState["isSyncing"]}
|
|
76
|
+
*/
|
|
77
|
+
get isSyncing(): EvmWalletServiceState['isSyncing'];
|
|
78
|
+
/**
|
|
79
|
+
A unique identifier of the connected wallet (provider)
|
|
80
|
+
* @returns {EvmWalletServiceState["providerId"]}
|
|
81
|
+
*/
|
|
82
|
+
get providerId(): EvmWalletServiceState['providerId'];
|
|
83
|
+
/**
|
|
84
|
+
* Returns computed wallet address value
|
|
85
|
+
* @returns {string|undefined}
|
|
86
|
+
*/
|
|
87
|
+
get address(): string | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* Returns wallet native currency
|
|
90
|
+
* @returns {Readonly<NativeCurrency<string>>}
|
|
91
|
+
*/
|
|
92
|
+
get currency(): Readonly<NativeCurrency<string>>;
|
|
93
|
+
/**
|
|
94
|
+
* Returns `true` if provider is available.
|
|
95
|
+
* That means extension is installed and activated, else `false`
|
|
96
|
+
* @returns {boolean}
|
|
97
|
+
*/
|
|
98
|
+
get hasProvider(): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Returns `true` if wallet is connected
|
|
101
|
+
* @returns {boolean}
|
|
102
|
+
*/
|
|
103
|
+
get isConnected(): boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Returns `true` if wallet is initialized and connected
|
|
106
|
+
* @returns {boolean}
|
|
107
|
+
*/
|
|
108
|
+
get isReady(): boolean;
|
|
109
|
+
/**
|
|
110
|
+
* Checks network support
|
|
111
|
+
* @returns {boolean}
|
|
112
|
+
*/
|
|
113
|
+
get isUnsupportedNetwork(): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Returns current network config
|
|
116
|
+
* @returns {Readonly<EvmNetworkConfig|undefined>}
|
|
117
|
+
*/
|
|
118
|
+
get network(): Readonly<EvmNetworkConfig | undefined>;
|
|
119
|
+
/**
|
|
120
|
+
Returns details about current connected provider
|
|
121
|
+
* @returns {EvmWalletProviderConfig["info"]|undefined}
|
|
122
|
+
*/
|
|
123
|
+
get providerInfo(): EvmWalletProviderConfig['info'] | undefined;
|
|
124
|
+
/**
|
|
125
|
+
* The list of the supported providers
|
|
126
|
+
* @returns {Readonly<EvmWalletProviderConfig[]|undefined>}
|
|
127
|
+
*/
|
|
128
|
+
get providers(): Readonly<EvmWalletProviderConfig[] | undefined>;
|
|
129
|
+
/**
|
|
130
|
+
* Returns current network chain id
|
|
131
|
+
* @returns {EthereumConnector["chainId"]}
|
|
132
|
+
*/
|
|
133
|
+
get chainId(): EthereumConnector['chainId'];
|
|
134
|
+
/**
|
|
135
|
+
* Returns `true` if wallet is connecting
|
|
136
|
+
* @returns {EthereumConnector["isConnecting"]}
|
|
137
|
+
*/
|
|
138
|
+
get isConnecting(): EthereumConnector['isConnecting'];
|
|
139
|
+
/**
|
|
140
|
+
* Returns `true` if wallet is disconnecting
|
|
141
|
+
* @returns {EthereumConnector["isDisconnecting"]}
|
|
142
|
+
*/
|
|
143
|
+
get isDisconnecting(): EthereumConnector['isDisconnecting'];
|
|
144
|
+
/**
|
|
145
|
+
* Returns `true` if wallet is initialized
|
|
146
|
+
* @returns {EthereumConnector["isInitialized"]}
|
|
147
|
+
*/
|
|
148
|
+
get isInitialized(): EthereumConnector['isInitialized'];
|
|
149
|
+
/**
|
|
150
|
+
* Returns `true` if wallet is initializing
|
|
151
|
+
* @returns {EthereumConnector["isInitializing"]}
|
|
152
|
+
*/
|
|
153
|
+
get isInitializing(): EthereumConnector['isInitializing'];
|
|
154
|
+
/**
|
|
155
|
+
* Sync account balance
|
|
156
|
+
*/
|
|
157
|
+
protected syncBalance(): Promise<void>;
|
|
158
|
+
/**
|
|
159
|
+
* Trying to resolve EVM Wallet connection
|
|
160
|
+
* @protected
|
|
161
|
+
*/
|
|
162
|
+
protected init(): Promise<void>;
|
|
163
|
+
protected accountDisposer: IReactionDisposer | undefined;
|
|
164
|
+
protected networkDisposer: IReactionDisposer | undefined;
|
|
165
|
+
}
|
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.EvmWalletService = void 0;
|
|
16
|
+
const js_core_1 = require("@broxus/js-core");
|
|
17
|
+
const js_utils_1 = require("@broxus/js-utils");
|
|
18
|
+
const mobx_1 = require("mobx");
|
|
19
|
+
const web3_1 = __importDefault(require("web3"));
|
|
20
|
+
class EvmWalletService extends js_core_1.AbstractStore {
|
|
21
|
+
params;
|
|
22
|
+
constructor(params) {
|
|
23
|
+
super();
|
|
24
|
+
this.params = params;
|
|
25
|
+
this.setData(() => ({
|
|
26
|
+
networks: params?.networks || [],
|
|
27
|
+
}));
|
|
28
|
+
this.setState(() => ({
|
|
29
|
+
isSyncing: undefined,
|
|
30
|
+
providerId: params?.providerId,
|
|
31
|
+
}));
|
|
32
|
+
(0, mobx_1.makeObservable)(this);
|
|
33
|
+
this.init().catch(reason => {
|
|
34
|
+
(0, js_utils_1.error)('Wallet init failed with an error', reason);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Manually connect to the wallet
|
|
39
|
+
* @returns {Promise<void>}
|
|
40
|
+
*/
|
|
41
|
+
async connect() {
|
|
42
|
+
if (this.isConnecting || this.isDisconnecting) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const defaultNetworkId = this.params?.defaultNetworkId ?? this.network?.chainId ?? 1;
|
|
47
|
+
const chainParams = this.networks.find(network => network.chainId === defaultNetworkId?.toString());
|
|
48
|
+
await this.connector?.connect(chainParams ?? 1);
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
(0, js_utils_1.error)('EVM Wallet connect error', e);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Manually disconnect from the wallet
|
|
56
|
+
* @returns {Promise<void>}
|
|
57
|
+
*/
|
|
58
|
+
async disconnect(force) {
|
|
59
|
+
if ((this.isConnecting || this.isDisconnecting) && !force) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
await this.connector?.disconnect();
|
|
64
|
+
this.setData('balance', undefined);
|
|
65
|
+
this.setState('providerId', undefined);
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
(0, js_utils_1.error)('EVM Wallet disconnect error', e);
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
//
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Switch network or add a new one if not exists in the current connected wallet
|
|
76
|
+
* @param {number|AddEthereumChainParams} chainIdOrParams
|
|
77
|
+
* @returns {Promise<void>}
|
|
78
|
+
*/
|
|
79
|
+
async switchNetwork(chainIdOrParams) {
|
|
80
|
+
await this.connector?.switchNetwork(chainIdOrParams);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Define current provider connector
|
|
84
|
+
* @returns {EthereumConnector|undefined}
|
|
85
|
+
*/
|
|
86
|
+
get connector() {
|
|
87
|
+
return this.providers?.find(config => config.id === this.providerId)?.connector;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* An independent RPC connection that allows you to receive data from the blockchain without being
|
|
91
|
+
* able to send transactions.
|
|
92
|
+
*
|
|
93
|
+
* This connection does not require connection permissions and wrapped on `Web3` interface.
|
|
94
|
+
* @returns {Web3|undefined}
|
|
95
|
+
*/
|
|
96
|
+
get connection() {
|
|
97
|
+
return this.network?.rpcUrl ? new web3_1.default(new web3_1.default.providers.HttpProvider(this.network.rpcUrl)) : this.provider;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Returns current Web3 Instance
|
|
101
|
+
*/
|
|
102
|
+
get provider() {
|
|
103
|
+
return this.connector?.provider != null ? new web3_1.default(this.connector.provider) : undefined;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Returns computed wallet balance value
|
|
107
|
+
* @returns {EvmWalletServiceData["balance"]}
|
|
108
|
+
*/
|
|
109
|
+
get balance() {
|
|
110
|
+
return this._data.balance ?? '0';
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* List of the supported networks
|
|
114
|
+
* @returns {EvmWalletServiceData["networks"]}
|
|
115
|
+
*/
|
|
116
|
+
get networks() {
|
|
117
|
+
return this._data?.networks;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Returns `true` if wallet contract is updating
|
|
121
|
+
* @returns {EvmWalletServiceState["isSyncing"]}
|
|
122
|
+
*/
|
|
123
|
+
get isSyncing() {
|
|
124
|
+
return this._state.isSyncing;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
A unique identifier of the connected wallet (provider)
|
|
128
|
+
* @returns {EvmWalletServiceState["providerId"]}
|
|
129
|
+
*/
|
|
130
|
+
get providerId() {
|
|
131
|
+
return this._state.providerId;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Returns computed wallet address value
|
|
135
|
+
* @returns {string|undefined}
|
|
136
|
+
*/
|
|
137
|
+
get address() {
|
|
138
|
+
return this.connector?.accounts?.[0];
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Returns wallet native currency
|
|
142
|
+
* @returns {Readonly<NativeCurrency<string>>}
|
|
143
|
+
*/
|
|
144
|
+
get currency() {
|
|
145
|
+
return {
|
|
146
|
+
balance: this.balance,
|
|
147
|
+
decimals: this.network?.currency.decimals ?? 18,
|
|
148
|
+
icon: this.network?.currency.icon,
|
|
149
|
+
name: this.network?.currency.name,
|
|
150
|
+
symbol: this.network?.currency.symbol || 'ETH',
|
|
151
|
+
wrappedCurrencyAddress: this.network?.currency.wrappedCurrencyAddress,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Returns `true` if provider is available.
|
|
156
|
+
* That means extension is installed and activated, else `false`
|
|
157
|
+
* @returns {boolean}
|
|
158
|
+
*/
|
|
159
|
+
get hasProvider() {
|
|
160
|
+
return this.connector?.provider != null;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Returns `true` if wallet is connected
|
|
164
|
+
* @returns {boolean}
|
|
165
|
+
*/
|
|
166
|
+
get isConnected() {
|
|
167
|
+
return this.address !== undefined;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Returns `true` if wallet is initialized and connected
|
|
171
|
+
* @returns {boolean}
|
|
172
|
+
*/
|
|
173
|
+
get isReady() {
|
|
174
|
+
return (!this.isInitializing
|
|
175
|
+
&& !this.isConnecting
|
|
176
|
+
&& !this.isDisconnecting
|
|
177
|
+
&& this.isInitialized === true
|
|
178
|
+
&& this.isConnected);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Checks network support
|
|
182
|
+
* @returns {boolean}
|
|
183
|
+
*/
|
|
184
|
+
get isUnsupportedNetwork() {
|
|
185
|
+
if (this.chainId == null) {
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
return !(this.networks?.map(network => network.chainId)?.includes(this.chainId.toString()) ?? false);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Returns current network config
|
|
192
|
+
* @returns {Readonly<EvmNetworkConfig|undefined>}
|
|
193
|
+
*/
|
|
194
|
+
get network() {
|
|
195
|
+
return this.networks?.find(network => network.type === 'evm' && network.chainId === this.chainId?.toString());
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
Returns details about current connected provider
|
|
199
|
+
* @returns {EvmWalletProviderConfig["info"]|undefined}
|
|
200
|
+
*/
|
|
201
|
+
get providerInfo() {
|
|
202
|
+
return this.providers?.find(config => config.id === this.providerId)?.info;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* The list of the supported providers
|
|
206
|
+
* @returns {Readonly<EvmWalletProviderConfig[]|undefined>}
|
|
207
|
+
*/
|
|
208
|
+
get providers() {
|
|
209
|
+
return this.params?.providers;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Returns current network chain id
|
|
213
|
+
* @returns {EthereumConnector["chainId"]}
|
|
214
|
+
*/
|
|
215
|
+
get chainId() {
|
|
216
|
+
return this.connector?.chainId;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Returns `true` if wallet is connecting
|
|
220
|
+
* @returns {EthereumConnector["isConnecting"]}
|
|
221
|
+
*/
|
|
222
|
+
get isConnecting() {
|
|
223
|
+
return this.connector?.isConnecting;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Returns `true` if wallet is disconnecting
|
|
227
|
+
* @returns {EthereumConnector["isDisconnecting"]}
|
|
228
|
+
*/
|
|
229
|
+
get isDisconnecting() {
|
|
230
|
+
return this.connector?.isDisconnecting;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Returns `true` if wallet is initialized
|
|
234
|
+
* @returns {EthereumConnector["isInitialized"]}
|
|
235
|
+
*/
|
|
236
|
+
get isInitialized() {
|
|
237
|
+
return this.connector?.isInitialized;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Returns `true` if wallet is initializing
|
|
241
|
+
* @returns {EthereumConnector["isInitializing"]}
|
|
242
|
+
*/
|
|
243
|
+
get isInitializing() {
|
|
244
|
+
return this.connector?.isInitializing;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Sync account balance
|
|
248
|
+
*/
|
|
249
|
+
async syncBalance() {
|
|
250
|
+
if (!this.provider) {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
try {
|
|
254
|
+
if (this.address) {
|
|
255
|
+
this.setState('isSyncing', this.isSyncing === undefined);
|
|
256
|
+
const balance = await this.provider.eth.getBalance(this.address);
|
|
257
|
+
this.setData('balance', balance.toString());
|
|
258
|
+
(0, js_utils_1.debug)(`Sync EVM balance: ${balance}`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
catch (e) {
|
|
262
|
+
(0, js_utils_1.error)('Sync EVM balance failed with an error', e);
|
|
263
|
+
this.setData('balance', undefined);
|
|
264
|
+
}
|
|
265
|
+
finally {
|
|
266
|
+
this.setState('isSyncing', false);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Trying to resolve EVM Wallet connection
|
|
271
|
+
* @protected
|
|
272
|
+
*/
|
|
273
|
+
async init() {
|
|
274
|
+
this.accountDisposer = (0, mobx_1.reaction)(() => this.address, async (address, prevAddress) => {
|
|
275
|
+
if (address?.toLowerCase() !== prevAddress?.toLowerCase()) {
|
|
276
|
+
this.setState('isSyncing', undefined);
|
|
277
|
+
}
|
|
278
|
+
await this.syncBalance();
|
|
279
|
+
});
|
|
280
|
+
this.networkDisposer = (0, mobx_1.reaction)(() => this.chainId, async (chainId, prevChainId) => {
|
|
281
|
+
if (chainId !== prevChainId) {
|
|
282
|
+
this.setState('isSyncing', undefined);
|
|
283
|
+
}
|
|
284
|
+
await this.syncBalance();
|
|
285
|
+
});
|
|
286
|
+
const handler = (0, js_utils_1.debounce)(async () => {
|
|
287
|
+
await this.syncBalance();
|
|
288
|
+
handler();
|
|
289
|
+
}, 10_000);
|
|
290
|
+
handler();
|
|
291
|
+
}
|
|
292
|
+
accountDisposer;
|
|
293
|
+
networkDisposer;
|
|
294
|
+
}
|
|
295
|
+
exports.EvmWalletService = EvmWalletService;
|
|
296
|
+
__decorate([
|
|
297
|
+
mobx_1.action.bound,
|
|
298
|
+
__metadata("design:type", Function),
|
|
299
|
+
__metadata("design:paramtypes", []),
|
|
300
|
+
__metadata("design:returntype", Promise)
|
|
301
|
+
], EvmWalletService.prototype, "connect", null);
|
|
302
|
+
__decorate([
|
|
303
|
+
mobx_1.action.bound,
|
|
304
|
+
__metadata("design:type", Function),
|
|
305
|
+
__metadata("design:paramtypes", [Boolean]),
|
|
306
|
+
__metadata("design:returntype", Promise)
|
|
307
|
+
], EvmWalletService.prototype, "disconnect", null);
|
|
308
|
+
__decorate([
|
|
309
|
+
mobx_1.action.bound,
|
|
310
|
+
__metadata("design:type", Function),
|
|
311
|
+
__metadata("design:paramtypes", [Object]),
|
|
312
|
+
__metadata("design:returntype", Promise)
|
|
313
|
+
], EvmWalletService.prototype, "switchNetwork", null);
|
|
314
|
+
__decorate([
|
|
315
|
+
mobx_1.computed,
|
|
316
|
+
__metadata("design:type", Object),
|
|
317
|
+
__metadata("design:paramtypes", [])
|
|
318
|
+
], EvmWalletService.prototype, "connector", null);
|
|
319
|
+
__decorate([
|
|
320
|
+
mobx_1.computed,
|
|
321
|
+
__metadata("design:type", Object),
|
|
322
|
+
__metadata("design:paramtypes", [])
|
|
323
|
+
], EvmWalletService.prototype, "connection", null);
|
|
324
|
+
__decorate([
|
|
325
|
+
mobx_1.computed,
|
|
326
|
+
__metadata("design:type", Object),
|
|
327
|
+
__metadata("design:paramtypes", [])
|
|
328
|
+
], EvmWalletService.prototype, "provider", null);
|
|
329
|
+
__decorate([
|
|
330
|
+
mobx_1.computed,
|
|
331
|
+
__metadata("design:type", Object),
|
|
332
|
+
__metadata("design:paramtypes", [])
|
|
333
|
+
], EvmWalletService.prototype, "balance", null);
|
|
334
|
+
__decorate([
|
|
335
|
+
mobx_1.computed,
|
|
336
|
+
__metadata("design:type", Object),
|
|
337
|
+
__metadata("design:paramtypes", [])
|
|
338
|
+
], EvmWalletService.prototype, "networks", null);
|
|
339
|
+
__decorate([
|
|
340
|
+
mobx_1.computed,
|
|
341
|
+
__metadata("design:type", Object),
|
|
342
|
+
__metadata("design:paramtypes", [])
|
|
343
|
+
], EvmWalletService.prototype, "isSyncing", null);
|
|
344
|
+
__decorate([
|
|
345
|
+
mobx_1.computed,
|
|
346
|
+
__metadata("design:type", Object),
|
|
347
|
+
__metadata("design:paramtypes", [])
|
|
348
|
+
], EvmWalletService.prototype, "providerId", null);
|
|
349
|
+
__decorate([
|
|
350
|
+
mobx_1.computed,
|
|
351
|
+
__metadata("design:type", Object),
|
|
352
|
+
__metadata("design:paramtypes", [])
|
|
353
|
+
], EvmWalletService.prototype, "address", null);
|
|
354
|
+
__decorate([
|
|
355
|
+
mobx_1.computed,
|
|
356
|
+
__metadata("design:type", Object),
|
|
357
|
+
__metadata("design:paramtypes", [])
|
|
358
|
+
], EvmWalletService.prototype, "currency", null);
|
|
359
|
+
__decorate([
|
|
360
|
+
mobx_1.computed,
|
|
361
|
+
__metadata("design:type", Boolean),
|
|
362
|
+
__metadata("design:paramtypes", [])
|
|
363
|
+
], EvmWalletService.prototype, "hasProvider", null);
|
|
364
|
+
__decorate([
|
|
365
|
+
mobx_1.computed,
|
|
366
|
+
__metadata("design:type", Boolean),
|
|
367
|
+
__metadata("design:paramtypes", [])
|
|
368
|
+
], EvmWalletService.prototype, "isConnected", null);
|
|
369
|
+
__decorate([
|
|
370
|
+
mobx_1.computed,
|
|
371
|
+
__metadata("design:type", Boolean),
|
|
372
|
+
__metadata("design:paramtypes", [])
|
|
373
|
+
], EvmWalletService.prototype, "isReady", null);
|
|
374
|
+
__decorate([
|
|
375
|
+
mobx_1.computed,
|
|
376
|
+
__metadata("design:type", Boolean),
|
|
377
|
+
__metadata("design:paramtypes", [])
|
|
378
|
+
], EvmWalletService.prototype, "isUnsupportedNetwork", null);
|
|
379
|
+
__decorate([
|
|
380
|
+
mobx_1.computed,
|
|
381
|
+
__metadata("design:type", Object),
|
|
382
|
+
__metadata("design:paramtypes", [])
|
|
383
|
+
], EvmWalletService.prototype, "network", null);
|
|
384
|
+
__decorate([
|
|
385
|
+
mobx_1.computed,
|
|
386
|
+
__metadata("design:type", Object),
|
|
387
|
+
__metadata("design:paramtypes", [])
|
|
388
|
+
], EvmWalletService.prototype, "providerInfo", null);
|
|
389
|
+
__decorate([
|
|
390
|
+
mobx_1.computed,
|
|
391
|
+
__metadata("design:type", Object),
|
|
392
|
+
__metadata("design:paramtypes", [])
|
|
393
|
+
], EvmWalletService.prototype, "providers", null);
|
|
394
|
+
__decorate([
|
|
395
|
+
mobx_1.computed,
|
|
396
|
+
__metadata("design:type", Object),
|
|
397
|
+
__metadata("design:paramtypes", [])
|
|
398
|
+
], EvmWalletService.prototype, "chainId", null);
|
|
399
|
+
__decorate([
|
|
400
|
+
mobx_1.computed,
|
|
401
|
+
__metadata("design:type", Object),
|
|
402
|
+
__metadata("design:paramtypes", [])
|
|
403
|
+
], EvmWalletService.prototype, "isConnecting", null);
|
|
404
|
+
__decorate([
|
|
405
|
+
mobx_1.computed,
|
|
406
|
+
__metadata("design:type", Object),
|
|
407
|
+
__metadata("design:paramtypes", [])
|
|
408
|
+
], EvmWalletService.prototype, "isDisconnecting", null);
|
|
409
|
+
__decorate([
|
|
410
|
+
mobx_1.computed,
|
|
411
|
+
__metadata("design:type", Object),
|
|
412
|
+
__metadata("design:paramtypes", [])
|
|
413
|
+
], EvmWalletService.prototype, "isInitialized", null);
|
|
414
|
+
__decorate([
|
|
415
|
+
mobx_1.computed,
|
|
416
|
+
__metadata("design:type", Object),
|
|
417
|
+
__metadata("design:paramtypes", [])
|
|
418
|
+
], EvmWalletService.prototype, "isInitializing", null);
|
|
419
|
+
__decorate([
|
|
420
|
+
mobx_1.action.bound,
|
|
421
|
+
__metadata("design:type", Function),
|
|
422
|
+
__metadata("design:paramtypes", []),
|
|
423
|
+
__metadata("design:returntype", Promise)
|
|
424
|
+
], EvmWalletService.prototype, "syncBalance", null);
|
|
425
|
+
__decorate([
|
|
426
|
+
mobx_1.action.bound,
|
|
427
|
+
__metadata("design:type", Function),
|
|
428
|
+
__metadata("design:paramtypes", []),
|
|
429
|
+
__metadata("design:returntype", Promise)
|
|
430
|
+
], EvmWalletService.prototype, "init", null);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../services/EvmWalletService';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("../services/EvmWalletService"), exports);
|