@broxus/evm-connect 1.13.7 → 1.14.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 (110) hide show
  1. package/dist/index.d.mts +453 -0
  2. package/dist/index.d.ts +453 -0
  3. package/dist/index.js +4954 -0
  4. package/dist/index.mjs +4954 -0
  5. package/dist/inheritance.min.css +3 -0
  6. package/dist/react.d.mts +116 -0
  7. package/dist/react.d.ts +116 -0
  8. package/dist/react.js +4860 -0
  9. package/dist/react.mjs +4860 -0
  10. package/dist/sdk.d.mts +346 -0
  11. package/dist/sdk.d.ts +346 -0
  12. package/dist/sdk.js +4860 -0
  13. package/dist/sdk.mjs +4860 -0
  14. package/dist/standalone.min.css +1 -0
  15. package/dist/uikit.min.css +1 -1
  16. package/lib/cjs/_react.js +25 -0
  17. package/lib/cjs/_sdk.js +22 -0
  18. package/lib/cjs/components/{EvmConnectButton/index.js → EvmConnectButton.js} +4 -4
  19. package/lib/cjs/components/{EvmConnectDialog/index.js → EvmConnectDialog.js} +12 -6
  20. package/lib/cjs/components/EvmConnectionRequest.js +80 -0
  21. package/lib/cjs/components/{EvmConnector/index.js → EvmConnector.js} +4 -5
  22. package/lib/cjs/components/{EvmProvidersDispatcher/ProviderButton/index.js → EvmProviderButton.js} +8 -9
  23. package/lib/cjs/components/{EvmProvidersDispatcher/index.js → EvmProvidersDispatcher.js} +24 -16
  24. package/lib/cjs/components/EvmProvidersList.js +49 -0
  25. package/lib/cjs/context/EvmWalletProvidersContext.js +4 -5
  26. package/lib/cjs/context/EvmWalletServiceContext.js +4 -4
  27. package/lib/cjs/hooks/index.js +1 -0
  28. package/lib/cjs/hooks/useContext.js +44 -0
  29. package/lib/cjs/hooks/useRecentConnectionMeta.js +7 -35
  30. package/lib/cjs/intl/index.js +1 -1
  31. package/lib/cjs/services/EvmWalletService.js +1 -1
  32. package/lib/cjs/styles/inheritance.css +71 -0
  33. package/lib/cjs/styles/inheritance.js +4 -0
  34. package/lib/cjs/styles/standalone.css +68 -0
  35. package/lib/cjs/styles/standalone.js +4 -0
  36. package/lib/cjs/styles/style.css +538 -0
  37. package/lib/cjs/styles/uikit.js +3 -0
  38. package/lib/cjs/utils/index.js +2 -1
  39. package/lib/cjs/utils/recent-connection-meta.js +37 -0
  40. package/lib/cjs/utils/{convert-network-to-chain-params.js → to-chain-params.js} +2 -2
  41. package/lib/esm/_react.d.ts +9 -0
  42. package/lib/esm/_react.js +9 -0
  43. package/lib/esm/_sdk.d.ts +6 -0
  44. package/lib/esm/_sdk.js +6 -0
  45. package/lib/esm/components/{EvmConnectButton/index.d.ts → EvmConnectButton.d.ts} +3 -3
  46. package/lib/esm/components/{EvmConnectButton/index.js → EvmConnectButton.js} +4 -4
  47. package/lib/esm/components/{EvmConnectDialog/index.d.ts → EvmConnectDialog.d.ts} +0 -1
  48. package/lib/esm/components/{EvmConnectDialog/index.js → EvmConnectDialog.js} +12 -6
  49. package/lib/esm/components/EvmConnectionRequest.d.ts +4 -0
  50. package/lib/esm/components/EvmConnectionRequest.js +41 -0
  51. package/lib/esm/components/{EvmConnector/index.d.ts → EvmConnector.d.ts} +1 -2
  52. package/lib/esm/components/{EvmConnector/index.js → EvmConnector.js} +4 -5
  53. package/lib/esm/components/EvmProviderButton.d.ts +10 -0
  54. package/lib/esm/components/{EvmProvidersDispatcher/ProviderButton/index.js → EvmProviderButton.js} +7 -8
  55. package/lib/esm/components/{EvmProvidersDispatcher/index.d.ts → EvmProvidersDispatcher.d.ts} +0 -1
  56. package/lib/esm/components/EvmProvidersDispatcher.js +40 -0
  57. package/lib/esm/components/EvmProvidersList.d.ts +4 -0
  58. package/lib/esm/components/EvmProvidersList.js +13 -0
  59. package/lib/esm/connectors/EIP6963Connector.d.ts +1 -2
  60. package/lib/esm/connectors/MetaMask.d.ts +1 -1
  61. package/lib/esm/context/EvmWalletProvidersContext.js +3 -4
  62. package/lib/esm/context/EvmWalletServiceContext.js +2 -2
  63. package/lib/esm/core/EthereumConnector.d.ts +1 -1
  64. package/lib/esm/hooks/index.d.ts +1 -0
  65. package/lib/esm/hooks/index.js +1 -0
  66. package/lib/esm/hooks/useContext.d.ts +2 -0
  67. package/lib/esm/hooks/useContext.js +8 -0
  68. package/lib/esm/hooks/useEIP6963Connections.d.ts +1 -1
  69. package/lib/esm/hooks/useOrderedConnections.d.ts +1 -2
  70. package/lib/esm/hooks/useRecentConnectionMeta.d.ts +1 -9
  71. package/lib/esm/hooks/useRecentConnectionMeta.js +5 -31
  72. package/lib/esm/intl/index.d.ts +115 -0
  73. package/lib/esm/intl/index.js +1 -1
  74. package/lib/esm/services/EvmWalletService.js +2 -2
  75. package/lib/esm/styles/inheritance.css +71 -0
  76. package/lib/esm/styles/inheritance.d.ts +2 -0
  77. package/lib/esm/styles/inheritance.js +2 -0
  78. package/lib/esm/styles/standalone.css +68 -0
  79. package/lib/esm/styles/standalone.d.ts +2 -0
  80. package/lib/esm/styles/standalone.js +2 -0
  81. package/lib/esm/styles/style.css +538 -0
  82. package/lib/esm/styles/uikit.js +1 -0
  83. package/lib/esm/types.d.ts +7 -1
  84. package/lib/esm/utils/index.d.ts +2 -1
  85. package/lib/esm/utils/index.js +2 -1
  86. package/lib/esm/utils/recent-connection-meta.d.ts +4 -0
  87. package/lib/esm/utils/recent-connection-meta.js +32 -0
  88. package/lib/esm/utils/to-chain-params.d.ts +2 -0
  89. package/lib/esm/utils/{convert-network-to-chain-params.js → to-chain-params.js} +1 -1
  90. package/package.json +52 -29
  91. package/dist/index.cjs.js +0 -2
  92. package/dist/index.esm.js +0 -2
  93. package/dist/style.min.css +0 -1
  94. package/lib/cjs/components/EvmConnectDialog/index.css +0 -142
  95. package/lib/cjs/components/EvmConnector/index.css +0 -46
  96. package/lib/cjs/components/EvmProvidersDispatcher/ConnectionRequest/index.css +0 -44
  97. package/lib/cjs/components/EvmProvidersDispatcher/ConnectionRequest/index.js +0 -75
  98. package/lib/cjs/components/EvmProvidersDispatcher/ProviderButton/index.css +0 -54
  99. package/lib/cjs/components/EvmProvidersDispatcher/index.css +0 -13
  100. package/lib/esm/components/EvmConnectDialog/index.css +0 -142
  101. package/lib/esm/components/EvmConnector/index.css +0 -46
  102. package/lib/esm/components/EvmProvidersDispatcher/ConnectionRequest/index.css +0 -44
  103. package/lib/esm/components/EvmProvidersDispatcher/ConnectionRequest/index.d.ts +0 -5
  104. package/lib/esm/components/EvmProvidersDispatcher/ConnectionRequest/index.js +0 -36
  105. package/lib/esm/components/EvmProvidersDispatcher/ProviderButton/index.css +0 -54
  106. package/lib/esm/components/EvmProvidersDispatcher/ProviderButton/index.d.ts +0 -11
  107. package/lib/esm/components/EvmProvidersDispatcher/index.css +0 -13
  108. package/lib/esm/components/EvmProvidersDispatcher/index.js +0 -32
  109. package/lib/esm/utils/convert-network-to-chain-params.d.ts +0 -2
  110. /package/lib/esm/{uikit.d.ts → styles/uikit.d.ts} +0 -0
package/dist/sdk.d.mts ADDED
@@ -0,0 +1,346 @@
1
+ import Web3, { Web3APISpec, Web3EthExecutionAPI, EIP1193Provider, Web3BaseProvider, MetaMaskProvider, ProviderRpcError, EthExecutionAPI, EIP6963ProviderInfo, ProviderConnectInfo } from 'web3';
2
+ import { NetworkConfigBase, AbstractStore, NativeCurrency } from '@broxus/js-core';
3
+ import detectEthereumProvider from '@metamask/detect-provider';
4
+ import EthereumProvider, { EthereumProviderOptions } from '@walletconnect/ethereum-provider';
5
+ import { IReactionDisposer } from 'mobx';
6
+
7
+ type EvmBasedNetwork = 'evm';
8
+ interface EvmNetworkConfig extends NetworkConfigBase<string> {
9
+ transactionType?: string | string[];
10
+ type: EvmBasedNetwork;
11
+ }
12
+ type SupportedProviders<API extends Web3APISpec = Web3EthExecutionAPI> = EIP1193Provider<API> | Web3BaseProvider<API> | MetaMaskProvider<API>;
13
+ declare enum EthereumConnectionType {
14
+ INJECTED = "INJECTED",
15
+ COINBASE_WALLET = "COINBASE_WALLET",
16
+ WALLET_CONNECT_V2 = "WALLET_CONNECT_V2",
17
+ EIP_6963_INJECTED = "EIP_6963_INJECTED"
18
+ }
19
+ declare enum EIP6963Event {
20
+ REQUEST_PROVIDER = "eip6963:requestProvider",
21
+ ANNOUNCE_PROVIDER = "eip6963:announceProvider"
22
+ }
23
+ interface WatchAssetParameters {
24
+ address: string;
25
+ decimals: number;
26
+ image?: string;
27
+ symbol: string;
28
+ }
29
+ interface AddEthereumChainParams {
30
+ blockExplorerUrls?: string[];
31
+ chainId: number;
32
+ chainName: string;
33
+ iconUrls?: string[];
34
+ nativeCurrency: {
35
+ decimals: 18;
36
+ name: string;
37
+ symbol: string;
38
+ };
39
+ rpcUrls: string[];
40
+ }
41
+ interface RecentConnectionMeta {
42
+ chainId?: string;
43
+ disconnected?: boolean;
44
+ providerId: string;
45
+ type?: EthereumConnectionType;
46
+ }
47
+ type EvmProviderAvailablePlatforms = 'ios' | 'android' | 'chromeExtension' | 'firefoxExtension';
48
+ type EvmProviderPlatformLinks = Partial<Record<EvmProviderAvailablePlatforms, string>>;
49
+ interface EvmWalletProviderConfig {
50
+ connector: EthereumConnector;
51
+ id: string;
52
+ info: {
53
+ description?: string;
54
+ icon?: string;
55
+ links?: EvmProviderPlatformLinks & {
56
+ homepage?: string;
57
+ universalLink?: string;
58
+ };
59
+ name: string;
60
+ rdns?: string;
61
+ };
62
+ isRecent?: boolean;
63
+ }
64
+
65
+ interface EthereumConnectorCtorParams {
66
+ onDisconnect?: (err: ProviderRpcError) => Promise<void> | void;
67
+ }
68
+ interface EthereumConnectorData {
69
+ accounts?: string[];
70
+ chainId?: number;
71
+ }
72
+ interface EthereumConnectorState {
73
+ isConnecting?: boolean;
74
+ isDisconnecting?: boolean;
75
+ isInitialized?: boolean;
76
+ isInitializing?: boolean;
77
+ }
78
+ declare abstract class EthereumConnector extends AbstractStore<EthereumConnectorData, EthereumConnectorState> {
79
+ protected readonly params?: Readonly<EthereumConnectorCtorParams> | undefined;
80
+ readonly type?: EthereumConnectionType;
81
+ /**
82
+ * An
83
+ * EIP-1193 ({@link https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md}) and
84
+ * EIP-1102 ({@link https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1102.md}) compliant provider.
85
+ * May also comply with EIP-3085 ({@link https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3085.md}).
86
+ * This property must be defined while the connector is active.
87
+ */
88
+ provider?: SupportedProviders<EthExecutionAPI>;
89
+ protected constructor(params?: Readonly<EthereumConnectorCtorParams> | undefined);
90
+ abstract connect(...args: unknown[]): Promise<void>;
91
+ abstract disconnect(...args: unknown[]): Promise<void>;
92
+ addNetwork(chainParams: AddEthereumChainParams): Promise<void>;
93
+ switchNetwork(chainIdOrParams: number | AddEthereumChainParams): Promise<void>;
94
+ watchAsset(params: WatchAssetParameters): Promise<true>;
95
+ get accounts(): EthereumConnectorData['accounts'];
96
+ get chainId(): EthereumConnectorData['chainId'];
97
+ get isConnecting(): EthereumConnectorState['isConnecting'];
98
+ get isDisconnecting(): EthereumConnectorState['isDisconnecting'];
99
+ get isInitialized(): EthereumConnectorState['isInitialized'];
100
+ get isInitializing(): EthereumConnectorState['isInitializing'];
101
+ protected handleAccountsChanged(accounts: string[]): void;
102
+ protected handleChainChanged(chainId: string): void;
103
+ protected handleDisconnect(err: ProviderRpcError): void;
104
+ }
105
+
106
+ interface EvmWalletServiceCtorParams {
107
+ autoInit?: boolean;
108
+ defaultNetworkId?: number;
109
+ /**
110
+ * List of supported networks
111
+ */
112
+ networks?: Readonly<EvmNetworkConfig[]>;
113
+ providerId?: string;
114
+ /**
115
+ * List of supported Providers
116
+ */
117
+ providers?: Readonly<EvmWalletProviderConfig[]>;
118
+ }
119
+ interface EvmWalletServiceData {
120
+ balance?: string;
121
+ networks: Readonly<EvmNetworkConfig[]>;
122
+ }
123
+ interface EvmWalletServiceState {
124
+ isSyncing?: boolean;
125
+ providerId?: string;
126
+ }
127
+ declare class EvmWalletService extends AbstractStore<EvmWalletServiceData, EvmWalletServiceState> {
128
+ protected readonly params?: Readonly<EvmWalletServiceCtorParams> | undefined;
129
+ readonly name = "EvmWalletService";
130
+ constructor(params?: Readonly<EvmWalletServiceCtorParams> | undefined);
131
+ /**
132
+ * Define current provider connector
133
+ * @returns {EthereumConnector|undefined}
134
+ */
135
+ get connector(): EthereumConnector | undefined;
136
+ init(): Promise<void>;
137
+ /**
138
+ * Manually connect to the wallet
139
+ * @returns {Promise<void>}
140
+ */
141
+ connect(networkIdOParams?: number | AddEthereumChainParams): Promise<void>;
142
+ /**
143
+ * Manually disconnect from the wallet
144
+ * @param {boolean} force
145
+ * @returns {Promise<void>}
146
+ */
147
+ disconnect(force?: boolean): Promise<void>;
148
+ /**
149
+ * Add network to the current connected wallet
150
+ * @param {AddEthereumChainParams} chainParams
151
+ * @returns {Promise<void>}
152
+ */
153
+ addNetwork(chainParams: AddEthereumChainParams): Promise<void>;
154
+ /**
155
+ * Switch network or add a new one if not exists in the current connected wallet
156
+ * @param {number|AddEthereumChainParams} chainIdOrParams
157
+ * @returns {Promise<void>}
158
+ */
159
+ switchNetwork(chainIdOrParams: number | AddEthereumChainParams): Promise<void>;
160
+ /**
161
+ * Request to the wallet for watch asset
162
+ * @param {WatchAssetParameters} params
163
+ * @returns {Promise<true | undefined>}
164
+ */
165
+ watchAsset(params: WatchAssetParameters): Promise<true | undefined>;
166
+ /**
167
+ * An independent RPC connection that allows you to receive data from the blockchain without being
168
+ * able to send transactions.
169
+ *
170
+ * This connection does not require connection permissions and wrapped on `Web3` interface.
171
+ * @returns {Web3|undefined}
172
+ */
173
+ get connection(): Web3 | undefined;
174
+ /**
175
+ * Returns current Web3 Instance
176
+ */
177
+ get provider(): Web3 | undefined;
178
+ /**
179
+ * Returns computed wallet balance value
180
+ * @returns {EvmWalletServiceData["balance"]}
181
+ */
182
+ get balance(): EvmWalletServiceData['balance'];
183
+ /**
184
+ * List of the supported networks
185
+ * @returns {EvmWalletServiceData["networks"]}
186
+ */
187
+ get networks(): EvmWalletServiceData['networks'];
188
+ /**
189
+ * Returns `true` if wallet contract is updating
190
+ * @returns {EvmWalletServiceState["isSyncing"]}
191
+ */
192
+ get isSyncing(): EvmWalletServiceState['isSyncing'];
193
+ /**
194
+ A unique identifier of the connected wallet (provider)
195
+ * @returns {EvmWalletServiceState["providerId"]}
196
+ */
197
+ get providerId(): EvmWalletServiceState['providerId'];
198
+ /**
199
+ * Returns computed wallet address value
200
+ * @returns {string|undefined}
201
+ */
202
+ get address(): string | undefined;
203
+ /**
204
+ * Returns wallet native currency
205
+ * @returns {Readonly<NativeCurrency<string>>}
206
+ */
207
+ get currency(): Readonly<NativeCurrency<string>>;
208
+ /**
209
+ * Returns `true` if provider is available.
210
+ * That means extension is installed and activated, else `false`
211
+ * @returns {boolean}
212
+ */
213
+ get hasProvider(): boolean;
214
+ /**
215
+ * Returns `true` if wallet is connected
216
+ * @returns {boolean}
217
+ */
218
+ get isConnected(): boolean;
219
+ /**
220
+ * Returns `true` if wallet is initialized and connected
221
+ * @returns {boolean}
222
+ */
223
+ get isReady(): boolean;
224
+ /**
225
+ * Checks network support
226
+ * @returns {boolean}
227
+ */
228
+ get isUnsupportedNetwork(): boolean;
229
+ /**
230
+ * Returns current network config
231
+ * @returns {Readonly<EvmNetworkConfig|undefined>}
232
+ */
233
+ get network(): Readonly<EvmNetworkConfig | undefined>;
234
+ /**
235
+ Returns details about current connected provider
236
+ * @returns {EvmWalletProviderConfig["info"]|undefined}
237
+ */
238
+ get providerInfo(): EvmWalletProviderConfig['info'] | undefined;
239
+ /**
240
+ * The list of the supported providers
241
+ * @returns {Readonly<EvmWalletProviderConfig[]|undefined>}
242
+ */
243
+ get providers(): Readonly<EvmWalletProviderConfig[]>;
244
+ /**
245
+ * Returns current network chain id
246
+ * @returns {EthereumConnector["chainId"]}
247
+ */
248
+ get chainId(): EthereumConnector['chainId'];
249
+ /**
250
+ * Returns `true` if wallet is connecting
251
+ * @returns {EthereumConnector["isConnecting"]}
252
+ */
253
+ get isConnecting(): EthereumConnector['isConnecting'];
254
+ /**
255
+ * Returns `true` if wallet is disconnecting
256
+ * @returns {EthereumConnector["isDisconnecting"]}
257
+ */
258
+ get isDisconnecting(): EthereumConnector['isDisconnecting'];
259
+ /**
260
+ * Returns `true` if wallet is initialized
261
+ * @returns {EthereumConnector["isInitialized"]}
262
+ */
263
+ get isInitialized(): EthereumConnector['isInitialized'];
264
+ /**
265
+ * Returns `true` if wallet is initializing
266
+ * @returns {EthereumConnector["isInitializing"]}
267
+ */
268
+ get isInitializing(): EthereumConnector['isInitializing'];
269
+ /**
270
+ * Sync account balance
271
+ */
272
+ protected syncBalance(): Promise<void>;
273
+ /**
274
+ * Trying to resolve EVM Wallet connection
275
+ * @protected
276
+ */
277
+ protected _init(): Promise<void>;
278
+ protected accountDisposer: IReactionDisposer | undefined;
279
+ protected networkDisposer: IReactionDisposer | undefined;
280
+ }
281
+
282
+ interface EIP6963ConnectorCtorParams extends EthereumConnectorCtorParams {
283
+ info: EIP6963ProviderInfo;
284
+ provider: Readonly<SupportedProviders<EthExecutionAPI>>;
285
+ }
286
+ declare class EIP6963Connector extends EthereumConnector {
287
+ protected readonly params: Readonly<EIP6963ConnectorCtorParams>;
288
+ readonly type = EthereumConnectionType.EIP_6963_INJECTED;
289
+ constructor(params: Readonly<EIP6963ConnectorCtorParams>);
290
+ connect(chainIdOrParams?: number | AddEthereumChainParams): Promise<void>;
291
+ disconnect(): Promise<void>;
292
+ protected init(): Promise<void>;
293
+ protected handleConnect({ chainId }: ProviderConnectInfo): void;
294
+ }
295
+
296
+ interface MetaMaskEthereumProvider extends MetaMaskProvider<EthExecutionAPI> {
297
+ isConnected?: () => boolean;
298
+ providers?: MetaMaskEthereumProvider[];
299
+ get accounts(): string[];
300
+ get chainId(): string;
301
+ }
302
+ interface MetaMaskCtorParams extends EthereumConnectorCtorParams {
303
+ options?: Parameters<typeof detectEthereumProvider>[0];
304
+ }
305
+ declare class MetaMask extends EthereumConnector {
306
+ protected readonly params?: Readonly<MetaMaskCtorParams> | undefined;
307
+ readonly type = EthereumConnectionType.INJECTED;
308
+ provider?: MetaMaskEthereumProvider;
309
+ constructor(params?: Readonly<MetaMaskCtorParams> | undefined);
310
+ connect(chainIdOrParams?: number | AddEthereumChainParams): Promise<void>;
311
+ disconnect(): Promise<void>;
312
+ protected init(): Promise<void>;
313
+ protected handleConnect({ chainId }: ProviderConnectInfo): void;
314
+ }
315
+
316
+ interface WalletConnectOptions extends Omit<EthereumProviderOptions, 'rpcMap'> {
317
+ rpcMap?: Record<number, string | string[]>;
318
+ }
319
+ interface WalletConnectCtorParams extends EthereumConnectorCtorParams {
320
+ options: WalletConnectOptions;
321
+ }
322
+ declare class WalletConnect extends EthereumConnector {
323
+ protected readonly params: Readonly<WalletConnectCtorParams>;
324
+ readonly type = EthereumConnectionType.WALLET_CONNECT_V2;
325
+ provider?: EthereumProvider;
326
+ protected readonly options: WalletConnectOptions;
327
+ constructor(params: Readonly<WalletConnectCtorParams>);
328
+ connect(chainIdOrParams?: number | AddEthereumChainParams): Promise<void>;
329
+ disconnect(): Promise<void>;
330
+ protected init(): Promise<void>;
331
+ protected createProvider(): Promise<EthereumProvider>;
332
+ }
333
+
334
+ declare function getEvmProviderPlatformLink(links: EvmProviderPlatformLinks): [EvmProviderAvailablePlatforms, string | undefined] | undefined;
335
+
336
+ declare function parseChainId(chainId: string | number): number;
337
+
338
+ declare function isRecentConnectionMeta(value: any): value is RecentConnectionMeta;
339
+ declare function storeRecentConnectionMeta(meta: RecentConnectionMeta | undefined, storageKey?: string): void;
340
+ declare function getRecentConnectionMeta(storageKey?: string): RecentConnectionMeta | undefined;
341
+
342
+ declare function toChainParams(network: EvmNetworkConfig): AddEthereumChainParams;
343
+
344
+ declare const EVM_RECENT_CONNECTION = "EVM_RECENT_CONNECTION";
345
+
346
+ export { type AddEthereumChainParams, EIP6963Connector, type EIP6963ConnectorCtorParams, EIP6963Event, EVM_RECENT_CONNECTION, EthereumConnectionType, EthereumConnector, type EthereumConnectorCtorParams, type EthereumConnectorData, type EthereumConnectorState, type EvmNetworkConfig, type EvmProviderAvailablePlatforms, type EvmProviderPlatformLinks, type EvmWalletProviderConfig, EvmWalletService, type EvmWalletServiceCtorParams, type EvmWalletServiceData, type EvmWalletServiceState, MetaMask, type MetaMaskCtorParams, type RecentConnectionMeta, type SupportedProviders, WalletConnect, type WalletConnectCtorParams, type WalletConnectOptions, type WatchAssetParameters, getEvmProviderPlatformLink, getRecentConnectionMeta, isRecentConnectionMeta, parseChainId, storeRecentConnectionMeta, toChainParams };
package/dist/sdk.d.ts ADDED
@@ -0,0 +1,346 @@
1
+ import Web3, { Web3APISpec, Web3EthExecutionAPI, EIP1193Provider, Web3BaseProvider, MetaMaskProvider, ProviderRpcError, EthExecutionAPI, EIP6963ProviderInfo, ProviderConnectInfo } from 'web3';
2
+ import { NetworkConfigBase, AbstractStore, NativeCurrency } from '@broxus/js-core';
3
+ import detectEthereumProvider from '@metamask/detect-provider';
4
+ import EthereumProvider, { EthereumProviderOptions } from '@walletconnect/ethereum-provider';
5
+ import { IReactionDisposer } from 'mobx';
6
+
7
+ type EvmBasedNetwork = 'evm';
8
+ interface EvmNetworkConfig extends NetworkConfigBase<string> {
9
+ transactionType?: string | string[];
10
+ type: EvmBasedNetwork;
11
+ }
12
+ type SupportedProviders<API extends Web3APISpec = Web3EthExecutionAPI> = EIP1193Provider<API> | Web3BaseProvider<API> | MetaMaskProvider<API>;
13
+ declare enum EthereumConnectionType {
14
+ INJECTED = "INJECTED",
15
+ COINBASE_WALLET = "COINBASE_WALLET",
16
+ WALLET_CONNECT_V2 = "WALLET_CONNECT_V2",
17
+ EIP_6963_INJECTED = "EIP_6963_INJECTED"
18
+ }
19
+ declare enum EIP6963Event {
20
+ REQUEST_PROVIDER = "eip6963:requestProvider",
21
+ ANNOUNCE_PROVIDER = "eip6963:announceProvider"
22
+ }
23
+ interface WatchAssetParameters {
24
+ address: string;
25
+ decimals: number;
26
+ image?: string;
27
+ symbol: string;
28
+ }
29
+ interface AddEthereumChainParams {
30
+ blockExplorerUrls?: string[];
31
+ chainId: number;
32
+ chainName: string;
33
+ iconUrls?: string[];
34
+ nativeCurrency: {
35
+ decimals: 18;
36
+ name: string;
37
+ symbol: string;
38
+ };
39
+ rpcUrls: string[];
40
+ }
41
+ interface RecentConnectionMeta {
42
+ chainId?: string;
43
+ disconnected?: boolean;
44
+ providerId: string;
45
+ type?: EthereumConnectionType;
46
+ }
47
+ type EvmProviderAvailablePlatforms = 'ios' | 'android' | 'chromeExtension' | 'firefoxExtension';
48
+ type EvmProviderPlatformLinks = Partial<Record<EvmProviderAvailablePlatforms, string>>;
49
+ interface EvmWalletProviderConfig {
50
+ connector: EthereumConnector;
51
+ id: string;
52
+ info: {
53
+ description?: string;
54
+ icon?: string;
55
+ links?: EvmProviderPlatformLinks & {
56
+ homepage?: string;
57
+ universalLink?: string;
58
+ };
59
+ name: string;
60
+ rdns?: string;
61
+ };
62
+ isRecent?: boolean;
63
+ }
64
+
65
+ interface EthereumConnectorCtorParams {
66
+ onDisconnect?: (err: ProviderRpcError) => Promise<void> | void;
67
+ }
68
+ interface EthereumConnectorData {
69
+ accounts?: string[];
70
+ chainId?: number;
71
+ }
72
+ interface EthereumConnectorState {
73
+ isConnecting?: boolean;
74
+ isDisconnecting?: boolean;
75
+ isInitialized?: boolean;
76
+ isInitializing?: boolean;
77
+ }
78
+ declare abstract class EthereumConnector extends AbstractStore<EthereumConnectorData, EthereumConnectorState> {
79
+ protected readonly params?: Readonly<EthereumConnectorCtorParams> | undefined;
80
+ readonly type?: EthereumConnectionType;
81
+ /**
82
+ * An
83
+ * EIP-1193 ({@link https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md}) and
84
+ * EIP-1102 ({@link https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1102.md}) compliant provider.
85
+ * May also comply with EIP-3085 ({@link https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3085.md}).
86
+ * This property must be defined while the connector is active.
87
+ */
88
+ provider?: SupportedProviders<EthExecutionAPI>;
89
+ protected constructor(params?: Readonly<EthereumConnectorCtorParams> | undefined);
90
+ abstract connect(...args: unknown[]): Promise<void>;
91
+ abstract disconnect(...args: unknown[]): Promise<void>;
92
+ addNetwork(chainParams: AddEthereumChainParams): Promise<void>;
93
+ switchNetwork(chainIdOrParams: number | AddEthereumChainParams): Promise<void>;
94
+ watchAsset(params: WatchAssetParameters): Promise<true>;
95
+ get accounts(): EthereumConnectorData['accounts'];
96
+ get chainId(): EthereumConnectorData['chainId'];
97
+ get isConnecting(): EthereumConnectorState['isConnecting'];
98
+ get isDisconnecting(): EthereumConnectorState['isDisconnecting'];
99
+ get isInitialized(): EthereumConnectorState['isInitialized'];
100
+ get isInitializing(): EthereumConnectorState['isInitializing'];
101
+ protected handleAccountsChanged(accounts: string[]): void;
102
+ protected handleChainChanged(chainId: string): void;
103
+ protected handleDisconnect(err: ProviderRpcError): void;
104
+ }
105
+
106
+ interface EvmWalletServiceCtorParams {
107
+ autoInit?: boolean;
108
+ defaultNetworkId?: number;
109
+ /**
110
+ * List of supported networks
111
+ */
112
+ networks?: Readonly<EvmNetworkConfig[]>;
113
+ providerId?: string;
114
+ /**
115
+ * List of supported Providers
116
+ */
117
+ providers?: Readonly<EvmWalletProviderConfig[]>;
118
+ }
119
+ interface EvmWalletServiceData {
120
+ balance?: string;
121
+ networks: Readonly<EvmNetworkConfig[]>;
122
+ }
123
+ interface EvmWalletServiceState {
124
+ isSyncing?: boolean;
125
+ providerId?: string;
126
+ }
127
+ declare class EvmWalletService extends AbstractStore<EvmWalletServiceData, EvmWalletServiceState> {
128
+ protected readonly params?: Readonly<EvmWalletServiceCtorParams> | undefined;
129
+ readonly name = "EvmWalletService";
130
+ constructor(params?: Readonly<EvmWalletServiceCtorParams> | undefined);
131
+ /**
132
+ * Define current provider connector
133
+ * @returns {EthereumConnector|undefined}
134
+ */
135
+ get connector(): EthereumConnector | undefined;
136
+ init(): Promise<void>;
137
+ /**
138
+ * Manually connect to the wallet
139
+ * @returns {Promise<void>}
140
+ */
141
+ connect(networkIdOParams?: number | AddEthereumChainParams): Promise<void>;
142
+ /**
143
+ * Manually disconnect from the wallet
144
+ * @param {boolean} force
145
+ * @returns {Promise<void>}
146
+ */
147
+ disconnect(force?: boolean): Promise<void>;
148
+ /**
149
+ * Add network to the current connected wallet
150
+ * @param {AddEthereumChainParams} chainParams
151
+ * @returns {Promise<void>}
152
+ */
153
+ addNetwork(chainParams: AddEthereumChainParams): Promise<void>;
154
+ /**
155
+ * Switch network or add a new one if not exists in the current connected wallet
156
+ * @param {number|AddEthereumChainParams} chainIdOrParams
157
+ * @returns {Promise<void>}
158
+ */
159
+ switchNetwork(chainIdOrParams: number | AddEthereumChainParams): Promise<void>;
160
+ /**
161
+ * Request to the wallet for watch asset
162
+ * @param {WatchAssetParameters} params
163
+ * @returns {Promise<true | undefined>}
164
+ */
165
+ watchAsset(params: WatchAssetParameters): Promise<true | undefined>;
166
+ /**
167
+ * An independent RPC connection that allows you to receive data from the blockchain without being
168
+ * able to send transactions.
169
+ *
170
+ * This connection does not require connection permissions and wrapped on `Web3` interface.
171
+ * @returns {Web3|undefined}
172
+ */
173
+ get connection(): Web3 | undefined;
174
+ /**
175
+ * Returns current Web3 Instance
176
+ */
177
+ get provider(): Web3 | undefined;
178
+ /**
179
+ * Returns computed wallet balance value
180
+ * @returns {EvmWalletServiceData["balance"]}
181
+ */
182
+ get balance(): EvmWalletServiceData['balance'];
183
+ /**
184
+ * List of the supported networks
185
+ * @returns {EvmWalletServiceData["networks"]}
186
+ */
187
+ get networks(): EvmWalletServiceData['networks'];
188
+ /**
189
+ * Returns `true` if wallet contract is updating
190
+ * @returns {EvmWalletServiceState["isSyncing"]}
191
+ */
192
+ get isSyncing(): EvmWalletServiceState['isSyncing'];
193
+ /**
194
+ A unique identifier of the connected wallet (provider)
195
+ * @returns {EvmWalletServiceState["providerId"]}
196
+ */
197
+ get providerId(): EvmWalletServiceState['providerId'];
198
+ /**
199
+ * Returns computed wallet address value
200
+ * @returns {string|undefined}
201
+ */
202
+ get address(): string | undefined;
203
+ /**
204
+ * Returns wallet native currency
205
+ * @returns {Readonly<NativeCurrency<string>>}
206
+ */
207
+ get currency(): Readonly<NativeCurrency<string>>;
208
+ /**
209
+ * Returns `true` if provider is available.
210
+ * That means extension is installed and activated, else `false`
211
+ * @returns {boolean}
212
+ */
213
+ get hasProvider(): boolean;
214
+ /**
215
+ * Returns `true` if wallet is connected
216
+ * @returns {boolean}
217
+ */
218
+ get isConnected(): boolean;
219
+ /**
220
+ * Returns `true` if wallet is initialized and connected
221
+ * @returns {boolean}
222
+ */
223
+ get isReady(): boolean;
224
+ /**
225
+ * Checks network support
226
+ * @returns {boolean}
227
+ */
228
+ get isUnsupportedNetwork(): boolean;
229
+ /**
230
+ * Returns current network config
231
+ * @returns {Readonly<EvmNetworkConfig|undefined>}
232
+ */
233
+ get network(): Readonly<EvmNetworkConfig | undefined>;
234
+ /**
235
+ Returns details about current connected provider
236
+ * @returns {EvmWalletProviderConfig["info"]|undefined}
237
+ */
238
+ get providerInfo(): EvmWalletProviderConfig['info'] | undefined;
239
+ /**
240
+ * The list of the supported providers
241
+ * @returns {Readonly<EvmWalletProviderConfig[]|undefined>}
242
+ */
243
+ get providers(): Readonly<EvmWalletProviderConfig[]>;
244
+ /**
245
+ * Returns current network chain id
246
+ * @returns {EthereumConnector["chainId"]}
247
+ */
248
+ get chainId(): EthereumConnector['chainId'];
249
+ /**
250
+ * Returns `true` if wallet is connecting
251
+ * @returns {EthereumConnector["isConnecting"]}
252
+ */
253
+ get isConnecting(): EthereumConnector['isConnecting'];
254
+ /**
255
+ * Returns `true` if wallet is disconnecting
256
+ * @returns {EthereumConnector["isDisconnecting"]}
257
+ */
258
+ get isDisconnecting(): EthereumConnector['isDisconnecting'];
259
+ /**
260
+ * Returns `true` if wallet is initialized
261
+ * @returns {EthereumConnector["isInitialized"]}
262
+ */
263
+ get isInitialized(): EthereumConnector['isInitialized'];
264
+ /**
265
+ * Returns `true` if wallet is initializing
266
+ * @returns {EthereumConnector["isInitializing"]}
267
+ */
268
+ get isInitializing(): EthereumConnector['isInitializing'];
269
+ /**
270
+ * Sync account balance
271
+ */
272
+ protected syncBalance(): Promise<void>;
273
+ /**
274
+ * Trying to resolve EVM Wallet connection
275
+ * @protected
276
+ */
277
+ protected _init(): Promise<void>;
278
+ protected accountDisposer: IReactionDisposer | undefined;
279
+ protected networkDisposer: IReactionDisposer | undefined;
280
+ }
281
+
282
+ interface EIP6963ConnectorCtorParams extends EthereumConnectorCtorParams {
283
+ info: EIP6963ProviderInfo;
284
+ provider: Readonly<SupportedProviders<EthExecutionAPI>>;
285
+ }
286
+ declare class EIP6963Connector extends EthereumConnector {
287
+ protected readonly params: Readonly<EIP6963ConnectorCtorParams>;
288
+ readonly type = EthereumConnectionType.EIP_6963_INJECTED;
289
+ constructor(params: Readonly<EIP6963ConnectorCtorParams>);
290
+ connect(chainIdOrParams?: number | AddEthereumChainParams): Promise<void>;
291
+ disconnect(): Promise<void>;
292
+ protected init(): Promise<void>;
293
+ protected handleConnect({ chainId }: ProviderConnectInfo): void;
294
+ }
295
+
296
+ interface MetaMaskEthereumProvider extends MetaMaskProvider<EthExecutionAPI> {
297
+ isConnected?: () => boolean;
298
+ providers?: MetaMaskEthereumProvider[];
299
+ get accounts(): string[];
300
+ get chainId(): string;
301
+ }
302
+ interface MetaMaskCtorParams extends EthereumConnectorCtorParams {
303
+ options?: Parameters<typeof detectEthereumProvider>[0];
304
+ }
305
+ declare class MetaMask extends EthereumConnector {
306
+ protected readonly params?: Readonly<MetaMaskCtorParams> | undefined;
307
+ readonly type = EthereumConnectionType.INJECTED;
308
+ provider?: MetaMaskEthereumProvider;
309
+ constructor(params?: Readonly<MetaMaskCtorParams> | undefined);
310
+ connect(chainIdOrParams?: number | AddEthereumChainParams): Promise<void>;
311
+ disconnect(): Promise<void>;
312
+ protected init(): Promise<void>;
313
+ protected handleConnect({ chainId }: ProviderConnectInfo): void;
314
+ }
315
+
316
+ interface WalletConnectOptions extends Omit<EthereumProviderOptions, 'rpcMap'> {
317
+ rpcMap?: Record<number, string | string[]>;
318
+ }
319
+ interface WalletConnectCtorParams extends EthereumConnectorCtorParams {
320
+ options: WalletConnectOptions;
321
+ }
322
+ declare class WalletConnect extends EthereumConnector {
323
+ protected readonly params: Readonly<WalletConnectCtorParams>;
324
+ readonly type = EthereumConnectionType.WALLET_CONNECT_V2;
325
+ provider?: EthereumProvider;
326
+ protected readonly options: WalletConnectOptions;
327
+ constructor(params: Readonly<WalletConnectCtorParams>);
328
+ connect(chainIdOrParams?: number | AddEthereumChainParams): Promise<void>;
329
+ disconnect(): Promise<void>;
330
+ protected init(): Promise<void>;
331
+ protected createProvider(): Promise<EthereumProvider>;
332
+ }
333
+
334
+ declare function getEvmProviderPlatformLink(links: EvmProviderPlatformLinks): [EvmProviderAvailablePlatforms, string | undefined] | undefined;
335
+
336
+ declare function parseChainId(chainId: string | number): number;
337
+
338
+ declare function isRecentConnectionMeta(value: any): value is RecentConnectionMeta;
339
+ declare function storeRecentConnectionMeta(meta: RecentConnectionMeta | undefined, storageKey?: string): void;
340
+ declare function getRecentConnectionMeta(storageKey?: string): RecentConnectionMeta | undefined;
341
+
342
+ declare function toChainParams(network: EvmNetworkConfig): AddEthereumChainParams;
343
+
344
+ declare const EVM_RECENT_CONNECTION = "EVM_RECENT_CONNECTION";
345
+
346
+ export { type AddEthereumChainParams, EIP6963Connector, type EIP6963ConnectorCtorParams, EIP6963Event, EVM_RECENT_CONNECTION, EthereumConnectionType, EthereumConnector, type EthereumConnectorCtorParams, type EthereumConnectorData, type EthereumConnectorState, type EvmNetworkConfig, type EvmProviderAvailablePlatforms, type EvmProviderPlatformLinks, type EvmWalletProviderConfig, EvmWalletService, type EvmWalletServiceCtorParams, type EvmWalletServiceData, type EvmWalletServiceState, MetaMask, type MetaMaskCtorParams, type RecentConnectionMeta, type SupportedProviders, WalletConnect, type WalletConnectCtorParams, type WalletConnectOptions, type WatchAssetParameters, getEvmProviderPlatformLink, getRecentConnectionMeta, isRecentConnectionMeta, parseChainId, storeRecentConnectionMeta, toChainParams };