@earthworm/wallet-sdk 0.2.0 → 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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @earthworm/wallet-sdk
2
2
 
3
- Browser EVM wallet SDK for DApps (MetaMask, Coinbase, TronLink, EIP-6963, contract reads).
3
+ Browser EVM wallet SDK for DApps (MetaMask, Coinbase, TronLink, TokenPocket, contract reads).
4
4
 
5
5
  ## Install
6
6
 
@@ -11,14 +11,67 @@ pnpm add @earthworm/wallet-sdk ethers
11
11
  ## Usage
12
12
 
13
13
  ```ts
14
- import { initWalletSdk, getWalletSdkConfig, walletEvents } from "@earthworm/wallet-sdk";
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
- isMainnet: true, //是否使用测试环境bsc
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 };
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "@earthworm/wallet-sdk",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "EVM wallet utilities for browser DApps",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
+ "engines": {
8
+ "node": ">=20.0.0"
9
+ },
7
10
  "publishConfig": {
8
11
  "access": "public"
9
12
  },
@@ -21,10 +24,10 @@
21
24
  },
22
25
  "keywords": [
23
26
  "ethereum",
24
- "wallet",
25
- "eip6963",
26
27
  "ethers",
27
- "dapp"
28
+ "dapp",
29
+ "wallets",
30
+ "bsc"
28
31
  ],
29
32
  "license": "MIT",
30
33
  "author": "Alex",