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