@earthworm/wallet-sdk 0.2.1 → 0.2.2
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/README.md +54 -1
- package/dist/index.d.ts +27 -1
- package/dist/index.js +38 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,14 +11,67 @@ pnpm add @earthworm/wallet-sdk ethers
|
|
|
11
11
|
## Usage
|
|
12
12
|
|
|
13
13
|
```ts
|
|
14
|
-
import {
|
|
14
|
+
import {
|
|
15
|
+
initWalletSdk,
|
|
16
|
+
getWalletSdkConfig,
|
|
17
|
+
walletEvents,
|
|
18
|
+
setWalletEventProvider,
|
|
19
|
+
ensureTargetNetwork,
|
|
20
|
+
requestWallet,
|
|
21
|
+
resolveMetaMaskInjectedProvider,
|
|
22
|
+
isEthereumProvider,
|
|
23
|
+
isCoinbaseProvider,
|
|
24
|
+
isTokenPocketProvider,
|
|
25
|
+
isTronLinkProvider,
|
|
26
|
+
} from "@earthworm/wallet-sdk";
|
|
15
27
|
|
|
16
28
|
initWalletSdk({
|
|
17
29
|
isMainnet: true, // Set to true for mainnet, false for testnet
|
|
18
30
|
contract: { address: "0x...", abi: [] },
|
|
19
31
|
});
|
|
20
32
|
|
|
33
|
+
// Detect installed wallets
|
|
34
|
+
if (isEthereumProvider()) {
|
|
35
|
+
console.log("MetaMask is available");
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (isCoinbaseProvider()) {
|
|
39
|
+
console.log("Coinbase Wallet is available");
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (isTokenPocketProvider()) {
|
|
43
|
+
console.log("TokenPocket is available");
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (isTronLinkProvider()) {
|
|
47
|
+
console.log("TronLink is available");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const provider = resolveMetaMaskInjectedProvider();
|
|
51
|
+
setWalletEventProvider(provider ?? null);
|
|
52
|
+
|
|
21
53
|
walletEvents.on("accountsChanged", (accounts) => {
|
|
22
54
|
console.log(accounts);
|
|
23
55
|
});
|
|
56
|
+
|
|
57
|
+
walletEvents.on("chainChanged", (chainId) => {
|
|
58
|
+
console.log("Network changed:", chainId); // hex chainId, e.g. "0x38"
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
async function switchToConfiguredNetwork() {
|
|
62
|
+
const provider = resolveMetaMaskInjectedProvider();
|
|
63
|
+
if (!provider) return;
|
|
64
|
+
|
|
65
|
+
const { chainId, chain } = getWalletSdkConfig();
|
|
66
|
+
|
|
67
|
+
await ensureTargetNetwork({
|
|
68
|
+
targetChainId: chainId,
|
|
69
|
+
getCurrentChainId: () => requestWallet(provider, "eth_chainId") as Promise<string>,
|
|
70
|
+
switchChain: (chainId) =>
|
|
71
|
+
requestWallet(provider, "wallet_switchEthereumChain", [{ chainId }]),
|
|
72
|
+
addChain: (chainParams) =>
|
|
73
|
+
requestWallet(provider, "wallet_addEthereumChain", [chainParams]),
|
|
74
|
+
chainParams: chain,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
24
77
|
```
|
package/dist/index.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ type WalletEventProvider = Eip1193Provider & {
|
|
|
20
20
|
type InjectedEthereumProvider = WalletEventProvider & {
|
|
21
21
|
isMetaMask?: boolean;
|
|
22
22
|
isCoinbaseWallet?: boolean;
|
|
23
|
+
isTokenPocket?: boolean;
|
|
23
24
|
isTronLink?: boolean;
|
|
24
25
|
isTronLinkWallet?: boolean;
|
|
25
26
|
providers?: InjectedEthereumProvider[];
|
|
@@ -98,6 +99,11 @@ declare function findMetaMaskEip6963Provider(): ethers.Eip1193Provider | undefin
|
|
|
98
99
|
* @returns Coinbase EIP-1193 provider;未找到为 `undefined`。
|
|
99
100
|
*/
|
|
100
101
|
declare function findCoinbaseEip6963Provider(): ethers.Eip1193Provider | undefined;
|
|
102
|
+
/**
|
|
103
|
+
* 查找 TokenPocket 的 EIP-6963 provider。
|
|
104
|
+
* @returns TokenPocket EIP-1193 provider;未找到为 `undefined`。
|
|
105
|
+
*/
|
|
106
|
+
declare function findTokenPocketEip6963Provider(): ethers.Eip1193Provider | undefined;
|
|
101
107
|
/**
|
|
102
108
|
* 是否通过 EIP-6963 检测到 MetaMask。
|
|
103
109
|
* @returns 检测到为 `true`,否则 `false`。
|
|
@@ -108,6 +114,11 @@ declare function hasMetaMaskEip6963Provider(): boolean;
|
|
|
108
114
|
* @returns 检测到为 `true`,否则 `false`。
|
|
109
115
|
*/
|
|
110
116
|
declare function hasCoinbaseEip6963Provider(): boolean;
|
|
117
|
+
/**
|
|
118
|
+
* 是否通过 EIP-6963 检测到 TokenPocket。
|
|
119
|
+
* @returns 检测到为 `true`,否则 `false`。
|
|
120
|
+
*/
|
|
121
|
+
declare function hasTokenPocketEip6963Provider(): boolean;
|
|
111
122
|
|
|
112
123
|
/**
|
|
113
124
|
* 获取与 EIP-1193 provider 绑定的共享 BrowserProvider(同一实例复用)。
|
|
@@ -131,6 +142,11 @@ declare function resolveMetaMaskInjectedProvider(): WalletEventProvider | undefi
|
|
|
131
142
|
* @returns Coinbase {@link WalletEventProvider};未找到为 `undefined`。
|
|
132
143
|
*/
|
|
133
144
|
declare function resolveCoinbaseInjectedProvider(): WalletEventProvider | undefined;
|
|
145
|
+
/**
|
|
146
|
+
* 解析 TokenPocket injected provider(tokenpocket.ethereum → EIP-6963 → providers 数组 → 根 ethereum)。
|
|
147
|
+
* @returns TokenPocket {@link WalletEventProvider};未找到为 `undefined`。
|
|
148
|
+
*/
|
|
149
|
+
declare function resolveTokenPocketInjectedProvider(): WalletEventProvider | undefined;
|
|
134
150
|
/**
|
|
135
151
|
* 是否检测到 MetaMask injected provider。
|
|
136
152
|
* @returns 检测到为 `true`,否则 `false`。
|
|
@@ -141,6 +157,11 @@ declare function hasMetaMaskInjectedProvider(): boolean;
|
|
|
141
157
|
* @returns 检测到为 `true`,否则 `false`。
|
|
142
158
|
*/
|
|
143
159
|
declare function hasCoinbaseInjectedProvider(): boolean;
|
|
160
|
+
/**
|
|
161
|
+
* 是否检测到 TokenPocket(扩展、tokenpocket.ethereum 或 injected)。
|
|
162
|
+
* @returns 检测到为 `true`,否则 `false`。
|
|
163
|
+
*/
|
|
164
|
+
declare function hasTokenPocketInjectedProvider(): boolean;
|
|
144
165
|
/**
|
|
145
166
|
* 缓存当前可用的多钱包聚合根 provider(`ethereum.providers.length > 1`)。
|
|
146
167
|
* 非浏览器环境无操作。
|
|
@@ -379,6 +400,11 @@ declare function isEthereumProvider(): boolean;
|
|
|
379
400
|
* @returns 浏览器中检测到 Coinbase 为 `true`;非浏览器或未检测到为 `false`。
|
|
380
401
|
*/
|
|
381
402
|
declare function isCoinbaseProvider(): boolean;
|
|
403
|
+
/**
|
|
404
|
+
* 是否检测到 TokenPocket(injected 或 EIP-6963)。
|
|
405
|
+
* @returns 浏览器中检测到 TokenPocket 为 `true`;非浏览器或未检测到为 `false`。
|
|
406
|
+
*/
|
|
407
|
+
declare function isTokenPocketProvider(): boolean;
|
|
382
408
|
/**
|
|
383
409
|
* 是否检测到通用 injected 以太坊钱包(含多钱包聚合器)。
|
|
384
410
|
* @returns 浏览器中存在可用 injected provider 为 `true`;否则 `false`。
|
|
@@ -560,4 +586,4 @@ declare const ERC20_ABI: ({
|
|
|
560
586
|
stateMutability?: undefined;
|
|
561
587
|
})[];
|
|
562
588
|
|
|
563
|
-
export { BSC_NETWORK, BSC_TESTNET_NETWORK, type ChainConfig, type ChainNativeCurrency, type ContractConfig, ERC20_ABI, ERC20_DECIMALS, ERC20_DECIMALS_ABI, type Eip6963ProviderDetail, type Eip6963ProviderInfo, type EthereumRequestParams, type EvmReadProvider, type GetContractReadOptions, type InjectedEthereumProvider, type MutableRef, USDT_CONFIG, USDT_CONTRACT_ADDRESSES, type WalletEventProvider, type WalletEvents, type WalletProviderEventListener, type WalletProviderEventMap, type WalletProviderEventName, type WalletSdkConfig, type WalletSdkInitOptions, assertBrowser, bindBrowserProvider, clearWalletRuntime, connectWalletAccount, createJsonRpcReadProvider, discoverWalletProviders, ensureTargetNetwork, findCoinbaseEip6963Provider, findDiscoveredProvider, findMetaMaskEip6963Provider, getAggregatedInjectedProvider, getConfiguredReadProvider, getContractDecimals, getContractPrice, getInjectedEthereumProviders, getReadProviderWithFallback, getSharedBrowserProvider, getWalletEventProvider, getWalletSdkConfig, hasAggregatedInjectedProvider, hasCoinbaseEip6963Provider, hasCoinbaseInjectedProvider, hasDeployedContract, hasMetaMaskEip6963Provider, hasMetaMaskInjectedProvider, hasRecoverableAggregatorProvider, initWalletSdk, isBrowser, isCoinbaseProvider, isContractDeployed, isEthereumProvider, isInjectedProvider, isTronLinkProvider, isWalletSdkInitialized, readErc20Decimals, rememberAggregatorProvider, requestWallet, resetWalletSdkConfig, resolveChainByMainnet, resolveChainConfig, resolveCoinbaseInjectedProvider, resolveMetaMaskInjectedProvider, resolveUsdtByMainnet, resolveUsdtContractAddress, setWalletEventProvider, setWalletReadProvider, syncWalletAccountAddress, toChainIdDecimal, walletEvents };
|
|
589
|
+
export { BSC_NETWORK, BSC_TESTNET_NETWORK, type ChainConfig, type ChainNativeCurrency, type ContractConfig, ERC20_ABI, ERC20_DECIMALS, ERC20_DECIMALS_ABI, type Eip6963ProviderDetail, type Eip6963ProviderInfo, type EthereumRequestParams, type EvmReadProvider, type GetContractReadOptions, type InjectedEthereumProvider, type MutableRef, USDT_CONFIG, USDT_CONTRACT_ADDRESSES, type WalletEventProvider, type WalletEvents, type WalletProviderEventListener, type WalletProviderEventMap, type WalletProviderEventName, type WalletSdkConfig, type WalletSdkInitOptions, assertBrowser, bindBrowserProvider, clearWalletRuntime, connectWalletAccount, createJsonRpcReadProvider, discoverWalletProviders, ensureTargetNetwork, findCoinbaseEip6963Provider, findDiscoveredProvider, findMetaMaskEip6963Provider, findTokenPocketEip6963Provider, getAggregatedInjectedProvider, getConfiguredReadProvider, getContractDecimals, getContractPrice, getInjectedEthereumProviders, getReadProviderWithFallback, getSharedBrowserProvider, getWalletEventProvider, getWalletSdkConfig, hasAggregatedInjectedProvider, hasCoinbaseEip6963Provider, hasCoinbaseInjectedProvider, hasDeployedContract, hasMetaMaskEip6963Provider, hasMetaMaskInjectedProvider, hasRecoverableAggregatorProvider, hasTokenPocketEip6963Provider, hasTokenPocketInjectedProvider, initWalletSdk, isBrowser, isCoinbaseProvider, isContractDeployed, isEthereumProvider, isInjectedProvider, isTokenPocketProvider, isTronLinkProvider, isWalletSdkInitialized, readErc20Decimals, rememberAggregatorProvider, requestWallet, resetWalletSdkConfig, resolveChainByMainnet, resolveChainConfig, resolveCoinbaseInjectedProvider, resolveMetaMaskInjectedProvider, resolveTokenPocketInjectedProvider, resolveUsdtByMainnet, resolveUsdtContractAddress, setWalletEventProvider, setWalletReadProvider, syncWalletAccountAddress, toChainIdDecimal, walletEvents };
|
package/dist/index.js
CHANGED
|
@@ -19,6 +19,7 @@ function assertBrowser(apiName) {
|
|
|
19
19
|
// src/wallet/eip6963.ts
|
|
20
20
|
var METAMASK_RDNS = "io.metamask";
|
|
21
21
|
var COINBASE_RDNS = "com.coinbase.wallet";
|
|
22
|
+
var TOKENPOCKET_RDNS = "com.tokenpocket";
|
|
22
23
|
var discoveredProviders = [];
|
|
23
24
|
var discoveryPromise = null;
|
|
24
25
|
function discoverWalletProviders(timeoutMs = 500) {
|
|
@@ -59,12 +60,20 @@ function findCoinbaseEip6963Provider() {
|
|
|
59
60
|
(detail) => detail.info.rdns === COINBASE_RDNS || detail.info.name.toLowerCase().includes("coinbase")
|
|
60
61
|
);
|
|
61
62
|
}
|
|
63
|
+
function findTokenPocketEip6963Provider() {
|
|
64
|
+
return findDiscoveredProvider(
|
|
65
|
+
(detail) => detail.info.rdns === TOKENPOCKET_RDNS || detail.info.name.toLowerCase().includes("tokenpocket")
|
|
66
|
+
);
|
|
67
|
+
}
|
|
62
68
|
function hasMetaMaskEip6963Provider() {
|
|
63
69
|
return Boolean(findMetaMaskEip6963Provider());
|
|
64
70
|
}
|
|
65
71
|
function hasCoinbaseEip6963Provider() {
|
|
66
72
|
return Boolean(findCoinbaseEip6963Provider());
|
|
67
73
|
}
|
|
74
|
+
function hasTokenPocketEip6963Provider() {
|
|
75
|
+
return Boolean(findTokenPocketEip6963Provider());
|
|
76
|
+
}
|
|
68
77
|
var providerCache = /* @__PURE__ */ new WeakMap();
|
|
69
78
|
function getSharedBrowserProvider(ethereum) {
|
|
70
79
|
const cached = providerCache.get(ethereum);
|
|
@@ -96,6 +105,9 @@ var isMetaMaskLikeProvider = (provider) => {
|
|
|
96
105
|
var isCoinbaseLikeProvider = (provider) => {
|
|
97
106
|
return Boolean(provider.isCoinbaseWallet && !provider.isTronLink && !provider.isTronLinkWallet);
|
|
98
107
|
};
|
|
108
|
+
var isTokenPocketLikeProvider = (provider) => {
|
|
109
|
+
return Boolean(provider.isTokenPocket && !provider.isTronLink && !provider.isTronLinkWallet);
|
|
110
|
+
};
|
|
99
111
|
var isTronLinkLikeProvider = (provider) => {
|
|
100
112
|
return Boolean(provider.isTronLink || provider.isTronLinkWallet);
|
|
101
113
|
};
|
|
@@ -163,6 +175,24 @@ function resolveCoinbaseInjectedProvider() {
|
|
|
163
175
|
}
|
|
164
176
|
return void 0;
|
|
165
177
|
}
|
|
178
|
+
function resolveTokenPocketInjectedProvider() {
|
|
179
|
+
if (isRequestableProvider(window.tokenpocket?.ethereum)) {
|
|
180
|
+
return window.tokenpocket.ethereum;
|
|
181
|
+
}
|
|
182
|
+
const fromEip6963 = findTokenPocketEip6963Provider();
|
|
183
|
+
if (fromEip6963 && isRequestableProvider(fromEip6963)) {
|
|
184
|
+
return fromEip6963;
|
|
185
|
+
}
|
|
186
|
+
const fromProviders = getInjectedEthereumProviders().find(isTokenPocketLikeProvider);
|
|
187
|
+
if (fromProviders) {
|
|
188
|
+
return fromProviders;
|
|
189
|
+
}
|
|
190
|
+
const ethereum = window.ethereum;
|
|
191
|
+
if (ethereum && isTokenPocketLikeProvider(ethereum)) {
|
|
192
|
+
return ethereum;
|
|
193
|
+
}
|
|
194
|
+
return void 0;
|
|
195
|
+
}
|
|
166
196
|
function hasMetaMaskInjectedProvider() {
|
|
167
197
|
return Boolean(resolveMetaMaskInjectedProvider());
|
|
168
198
|
}
|
|
@@ -171,6 +201,9 @@ function hasCoinbaseInjectedProvider() {
|
|
|
171
201
|
window.coinbaseWalletExtension || window.coinbaseWalletRequestProvider || window.coinbaseSolana || resolveCoinbaseInjectedProvider()
|
|
172
202
|
);
|
|
173
203
|
}
|
|
204
|
+
function hasTokenPocketInjectedProvider() {
|
|
205
|
+
return Boolean(resolveTokenPocketInjectedProvider());
|
|
206
|
+
}
|
|
174
207
|
var cachedAggregatorProvider;
|
|
175
208
|
var cachedAggregatorProviderCount = 0;
|
|
176
209
|
var isMultiWalletAggregator = (provider) => {
|
|
@@ -872,6 +905,10 @@ function isCoinbaseProvider() {
|
|
|
872
905
|
if (!isBrowser) return false;
|
|
873
906
|
return hasCoinbaseInjectedProvider();
|
|
874
907
|
}
|
|
908
|
+
function isTokenPocketProvider() {
|
|
909
|
+
if (!isBrowser) return false;
|
|
910
|
+
return hasTokenPocketInjectedProvider() || hasTokenPocketEip6963Provider();
|
|
911
|
+
}
|
|
875
912
|
function isInjectedProvider() {
|
|
876
913
|
if (!isBrowser) return false;
|
|
877
914
|
return hasAggregatedInjectedProvider();
|
|
@@ -881,4 +918,4 @@ function isTronLinkProvider() {
|
|
|
881
918
|
return Boolean(window.tron?.request || window.tronLink);
|
|
882
919
|
}
|
|
883
920
|
|
|
884
|
-
export { BSC_NETWORK, BSC_TESTNET_NETWORK, ERC20_ABI, ERC20_DECIMALS, ERC20_DECIMALS_ABI, USDT_CONFIG, USDT_CONTRACT_ADDRESSES, assertBrowser, bindBrowserProvider, clearWalletRuntime, connectWalletAccount, createJsonRpcReadProvider, discoverWalletProviders, ensureTargetNetwork, findCoinbaseEip6963Provider, findDiscoveredProvider, findMetaMaskEip6963Provider, getAggregatedInjectedProvider, getConfiguredReadProvider, getContractDecimals, getContractPrice, getInjectedEthereumProviders, getReadProviderWithFallback, getSharedBrowserProvider, getWalletEventProvider, getWalletSdkConfig, hasAggregatedInjectedProvider, hasCoinbaseEip6963Provider, hasCoinbaseInjectedProvider, hasDeployedContract, hasMetaMaskEip6963Provider, hasMetaMaskInjectedProvider, hasRecoverableAggregatorProvider, initWalletSdk, isBrowser, isCoinbaseProvider, isContractDeployed, isEthereumProvider, isInjectedProvider, isTronLinkProvider, isWalletSdkInitialized, readErc20Decimals, rememberAggregatorProvider, requestWallet, resetWalletSdkConfig, resolveChainByMainnet, resolveChainConfig, resolveCoinbaseInjectedProvider, resolveMetaMaskInjectedProvider, resolveUsdtByMainnet, resolveUsdtContractAddress, setWalletEventProvider, setWalletReadProvider, syncWalletAccountAddress, toChainIdDecimal, walletEvents };
|
|
921
|
+
export { BSC_NETWORK, BSC_TESTNET_NETWORK, ERC20_ABI, ERC20_DECIMALS, ERC20_DECIMALS_ABI, USDT_CONFIG, USDT_CONTRACT_ADDRESSES, assertBrowser, bindBrowserProvider, clearWalletRuntime, connectWalletAccount, createJsonRpcReadProvider, discoverWalletProviders, ensureTargetNetwork, findCoinbaseEip6963Provider, findDiscoveredProvider, findMetaMaskEip6963Provider, findTokenPocketEip6963Provider, getAggregatedInjectedProvider, getConfiguredReadProvider, getContractDecimals, getContractPrice, getInjectedEthereumProviders, getReadProviderWithFallback, getSharedBrowserProvider, getWalletEventProvider, getWalletSdkConfig, hasAggregatedInjectedProvider, hasCoinbaseEip6963Provider, hasCoinbaseInjectedProvider, hasDeployedContract, hasMetaMaskEip6963Provider, hasMetaMaskInjectedProvider, hasRecoverableAggregatorProvider, hasTokenPocketEip6963Provider, hasTokenPocketInjectedProvider, initWalletSdk, isBrowser, isCoinbaseProvider, isContractDeployed, isEthereumProvider, isInjectedProvider, isTokenPocketProvider, isTronLinkProvider, isWalletSdkInitialized, readErc20Decimals, rememberAggregatorProvider, requestWallet, resetWalletSdkConfig, resolveChainByMainnet, resolveChainConfig, resolveCoinbaseInjectedProvider, resolveMetaMaskInjectedProvider, resolveTokenPocketInjectedProvider, resolveUsdtByMainnet, resolveUsdtContractAddress, setWalletEventProvider, setWalletReadProvider, syncWalletAccountAddress, toChainIdDecimal, walletEvents };
|