@earthworm/wallet-sdk 0.2.1 → 0.2.3

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/dist/index.js CHANGED
@@ -1,26 +1,84 @@
1
- import { BrowserProvider, Contract, JsonRpcProvider, formatUnits } from 'ethers';
2
-
3
- // src/utils/chain.ts
4
- function toChainIdDecimal(chainId, fallback) {
5
- const decimal = Number.parseInt(chainId, 16);
6
- if (Number.isFinite(decimal)) return decimal;
7
- if (fallback !== void 0) return fallback;
8
- return Number.NaN;
9
- }
10
-
11
- // src/utils/env.ts
12
- var isBrowser = typeof window !== "undefined";
13
- function assertBrowser(apiName) {
14
- if (!isBrowser) {
15
- throw new Error(`[wallet-sdk] ${apiName} is only available in the browser`);
16
- }
17
- }
1
+ export { applyWalletAccountsChangedEffect } from './chunk-BUZ26NFL.js';
2
+ export { ensureTargetNetwork, switchToConfiguredNetwork } from './chunk-TPFOHQNS.js';
3
+ import { isBrowser } from './chunk-Z2EMFRMV.js';
4
+ export { BSC_NETWORK, BSC_TESTNET_NETWORK, ERC20_ABI, ERC20_DECIMALS, ERC20_DECIMALS_ABI, SUPPORTED_BSC_CHAIN_IDS, USDT_CONFIG, WalletEvents, assertBrowser, bindBrowserProvider, bindWalletProvider, clearJsonRpcReadProviderCache, clearWalletRuntime, connectWallet, connectWalletAccount, createJsonRpcReadProvider, disconnectWallet, emitWalletEvent, getActiveWalletKey, getConfiguredReadProvider, getConnectedAddress, getContractDecimals, getContractPrice, getReadProviderWithFallback, getSelectedWalletProvider, getSharedBrowserProvider, getWalletAccounts, getWalletBrowserProvider, getWalletEventProvider, getWalletSdkConfig, getWalletSigner, hasDeployedContract, initWalletSdk, isBrowser, isContractDeployed, isWalletConnected, isWalletSdkInitialized, normalizeSupportedBscChainId, readConfiguredUsdtDecimals, readErc20Balance, readErc20Decimals, readUsdtBalance, refreshWalletAccounts, refreshWalletReadProvider, requestWallet, resetWalletSdkConfig, resolveChainConfig, resolveWalletKey, setWalletEventProvider, setWalletReadProvider, switchWalletAccount, syncConnectedWalletAccount, syncWalletAccountAddress, syncWalletRuntimeProvider, toChainIdDecimal, walletEvents } from './chunk-Z2EMFRMV.js';
18
5
 
19
6
  // src/wallet/eip6963.ts
20
- var METAMASK_RDNS = "io.metamask";
21
- var COINBASE_RDNS = "com.coinbase.wallet";
7
+ var EIP6963_ANNOUNCE = "eip6963:announceProvider";
8
+ var EIP6963_REQUEST = "eip6963:requestProvider";
9
+ var TIP6963_ANNOUNCE = "TIP6963:announceProvider";
10
+ var TIP6963_REQUEST = "TIP6963:requestProvider";
11
+ var Wallet6963Name = /* @__PURE__ */ ((Wallet6963Name2) => {
12
+ Wallet6963Name2["MetaMask"] = "metamask";
13
+ Wallet6963Name2["Coinbase"] = "coinbase";
14
+ Wallet6963Name2["TokenPocket"] = "tokenpocket";
15
+ Wallet6963Name2["TronLink"] = "tronlink";
16
+ return Wallet6963Name2;
17
+ })(Wallet6963Name || {});
18
+ var Wallet6963Rdns = /* @__PURE__ */ ((Wallet6963Rdns2) => {
19
+ Wallet6963Rdns2["MetaMask"] = "io.metamask";
20
+ Wallet6963Rdns2["Coinbase"] = "com.coinbase.wallet";
21
+ Wallet6963Rdns2["TokenPocket"] = "com.tokenpocket";
22
+ Wallet6963Rdns2["TronLink"] = "org.tronlink.www";
23
+ Wallet6963Rdns2["TronLinkAlt"] = "io.tronlink";
24
+ return Wallet6963Rdns2;
25
+ })(Wallet6963Rdns || {});
26
+ function normalizeWalletName(name) {
27
+ return name.toLowerCase();
28
+ }
29
+ function matchExactWalletName(name, walletName) {
30
+ return normalizeWalletName(name) === walletName;
31
+ }
32
+ function matchIncludesWalletName(name, walletName) {
33
+ return normalizeWalletName(name).includes(walletName);
34
+ }
35
+ var WALLET_6963_MATCHERS = {
36
+ metamask: {
37
+ rdns: ["io.metamask" /* MetaMask */],
38
+ matchName: (name) => matchExactWalletName(name, "metamask" /* MetaMask */)
39
+ },
40
+ coinbase: {
41
+ rdns: ["com.coinbase.wallet" /* Coinbase */],
42
+ matchName: (name) => matchIncludesWalletName(name, "coinbase" /* Coinbase */)
43
+ },
44
+ tokenpocket: {
45
+ rdns: ["com.tokenpocket" /* TokenPocket */],
46
+ matchName: (name) => matchIncludesWalletName(name, "tokenpocket" /* TokenPocket */)
47
+ },
48
+ tronlink: {
49
+ rdns: ["org.tronlink.www" /* TronLink */, "io.tronlink" /* TronLinkAlt */],
50
+ matchName: (name) => matchIncludesWalletName(name, "tronlink" /* TronLink */)
51
+ }
52
+ };
22
53
  var discoveredProviders = [];
23
54
  var discoveryPromise = null;
55
+ function getProviderDedupKey(detail) {
56
+ const rdns = detail.info.rdns?.trim().toLowerCase();
57
+ if (rdns) {
58
+ return `rdns:${rdns}`;
59
+ }
60
+ return `name:${normalizeWalletName(detail.info.name)}`;
61
+ }
62
+ function collectProviderDetail(providers, detail) {
63
+ if (!detail?.provider) return;
64
+ if (providers.some((item) => item.info.uuid === detail.info.uuid)) return;
65
+ const dedupKey = getProviderDedupKey(detail);
66
+ if (providers.some((item) => getProviderDedupKey(item) === dedupKey)) return;
67
+ providers.push(detail);
68
+ }
69
+ function matchesWallet6963(detail, matcher) {
70
+ const rdns = detail.info.rdns.toLowerCase();
71
+ return matcher.rdns.includes(rdns) || matcher.matchName(detail.info.name);
72
+ }
73
+ function defineWallet6963Provider(matcher) {
74
+ const find = () => findDiscoveredProvider((detail) => matchesWallet6963(detail, matcher));
75
+ const has = () => Boolean(find());
76
+ return { find, has };
77
+ }
78
+ var metamask6963 = defineWallet6963Provider(WALLET_6963_MATCHERS.metamask);
79
+ var coinbase6963 = defineWallet6963Provider(WALLET_6963_MATCHERS.coinbase);
80
+ var tokenPocket6963 = defineWallet6963Provider(WALLET_6963_MATCHERS.tokenpocket);
81
+ var tronLink6963 = defineWallet6963Provider(WALLET_6963_MATCHERS.tronlink);
24
82
  function discoverWalletProviders(timeoutMs = 500) {
25
83
  if (!isBrowser) {
26
84
  return Promise.resolve([]);
@@ -31,50 +89,35 @@ function discoverWalletProviders(timeoutMs = 500) {
31
89
  discoveryPromise = new Promise((resolve) => {
32
90
  const providers = [];
33
91
  const onAnnounce = (event) => {
34
- const detail = event.detail;
35
- if (!detail?.provider) return;
36
- if (providers.some((item) => item.info.uuid === detail.info.uuid)) return;
37
- providers.push(detail);
92
+ collectProviderDetail(providers, event.detail);
38
93
  };
39
- window.addEventListener("eip6963:announceProvider", onAnnounce);
40
- window.dispatchEvent(new Event("eip6963:requestProvider"));
94
+ window.addEventListener(EIP6963_ANNOUNCE, onAnnounce);
95
+ window.addEventListener(TIP6963_ANNOUNCE, onAnnounce);
96
+ window.dispatchEvent(new Event(EIP6963_REQUEST));
97
+ window.dispatchEvent(new Event(TIP6963_REQUEST));
41
98
  window.setTimeout(() => {
42
- window.removeEventListener("eip6963:announceProvider", onAnnounce);
99
+ window.removeEventListener(EIP6963_ANNOUNCE, onAnnounce);
100
+ window.removeEventListener(TIP6963_ANNOUNCE, onAnnounce);
43
101
  discoveredProviders = providers;
44
102
  resolve(providers);
45
103
  }, timeoutMs);
46
104
  });
47
105
  return discoveryPromise;
48
106
  }
107
+ if (isBrowser) {
108
+ void discoverWalletProviders();
109
+ }
49
110
  function findDiscoveredProvider(match) {
50
111
  return discoveredProviders.find(match)?.provider;
51
112
  }
52
- function findMetaMaskEip6963Provider() {
53
- return findDiscoveredProvider(
54
- (detail) => detail.info.rdns === METAMASK_RDNS || detail.info.name.toLowerCase() === "metamask"
55
- );
56
- }
57
- function findCoinbaseEip6963Provider() {
58
- return findDiscoveredProvider(
59
- (detail) => detail.info.rdns === COINBASE_RDNS || detail.info.name.toLowerCase().includes("coinbase")
60
- );
61
- }
62
- function hasMetaMaskEip6963Provider() {
63
- return Boolean(findMetaMaskEip6963Provider());
64
- }
65
- function hasCoinbaseEip6963Provider() {
66
- return Boolean(findCoinbaseEip6963Provider());
67
- }
68
- var providerCache = /* @__PURE__ */ new WeakMap();
69
- function getSharedBrowserProvider(ethereum) {
70
- const cached = providerCache.get(ethereum);
71
- if (cached) {
72
- return cached;
73
- }
74
- const provider = new BrowserProvider(ethereum);
75
- providerCache.set(ethereum, provider);
76
- return provider;
77
- }
113
+ var findMetaMaskEip6963Provider = metamask6963.find;
114
+ var findCoinbaseEip6963Provider = coinbase6963.find;
115
+ var findTokenPocketEip6963Provider = tokenPocket6963.find;
116
+ var findTronLinkEip6963Provider = tronLink6963.find;
117
+ var hasMetaMaskEip6963Provider = metamask6963.has;
118
+ var hasCoinbaseEip6963Provider = coinbase6963.has;
119
+ var hasTokenPocketEip6963Provider = tokenPocket6963.has;
120
+ var hasTronLinkEip6963Provider = tronLink6963.has;
78
121
 
79
122
  // src/wallet/injected-providers.ts
80
123
  var isRequestableProvider = (provider) => {
@@ -90,12 +133,15 @@ function getInjectedEthereumProviders() {
90
133
  }
91
134
  var isMetaMaskLikeProvider = (provider) => {
92
135
  return Boolean(
93
- provider.isMetaMask && !provider.isCoinbaseWallet && !provider.isTronLink && !provider.isTronLinkWallet
136
+ provider.isMetaMask && !provider.isCoinbaseWallet && !provider.isTokenPocket && !provider.isTronLink && !provider.isTronLinkWallet
94
137
  );
95
138
  };
96
139
  var isCoinbaseLikeProvider = (provider) => {
97
140
  return Boolean(provider.isCoinbaseWallet && !provider.isTronLink && !provider.isTronLinkWallet);
98
141
  };
142
+ var isTokenPocketLikeProvider = (provider) => {
143
+ return Boolean(provider.isTokenPocket && !provider.isTronLink && !provider.isTronLinkWallet);
144
+ };
99
145
  var isTronLinkLikeProvider = (provider) => {
100
146
  return Boolean(provider.isTronLink || provider.isTronLinkWallet);
101
147
  };
@@ -163,6 +209,45 @@ function resolveCoinbaseInjectedProvider() {
163
209
  }
164
210
  return void 0;
165
211
  }
212
+ function resolveTokenPocketInjectedProvider() {
213
+ if (isRequestableProvider(window.tokenpocket?.ethereum)) {
214
+ return window.tokenpocket.ethereum;
215
+ }
216
+ const fromEip6963 = findTokenPocketEip6963Provider();
217
+ if (fromEip6963 && isRequestableProvider(fromEip6963)) {
218
+ return fromEip6963;
219
+ }
220
+ const fromProviders = getInjectedEthereumProviders().find(isTokenPocketLikeProvider);
221
+ if (fromProviders) {
222
+ return fromProviders;
223
+ }
224
+ const ethereum = window.ethereum;
225
+ if (ethereum && isTokenPocketLikeProvider(ethereum)) {
226
+ return ethereum;
227
+ }
228
+ return void 0;
229
+ }
230
+ function resolveTronLinkInjectedProvider() {
231
+ const fromEip6963 = findTronLinkEip6963Provider();
232
+ if (fromEip6963 && isRequestableProvider(fromEip6963)) {
233
+ return fromEip6963;
234
+ }
235
+ const ethereum = window.ethereum;
236
+ const fromProviders = getInjectedEthereumProviders().find(isTronLinkLikeProvider);
237
+ if (fromProviders) {
238
+ return fromProviders;
239
+ }
240
+ if (ethereum && isTronLinkLikeProvider(ethereum)) {
241
+ return ethereum;
242
+ }
243
+ if (isRequestableProvider(window.tronLink)) {
244
+ return window.tronLink;
245
+ }
246
+ if (isRequestableProvider(window.tron)) {
247
+ return window.tron;
248
+ }
249
+ return void 0;
250
+ }
166
251
  function hasMetaMaskInjectedProvider() {
167
252
  return Boolean(resolveMetaMaskInjectedProvider());
168
253
  }
@@ -171,6 +256,12 @@ function hasCoinbaseInjectedProvider() {
171
256
  window.coinbaseWalletExtension || window.coinbaseWalletRequestProvider || window.coinbaseSolana || resolveCoinbaseInjectedProvider()
172
257
  );
173
258
  }
259
+ function hasTokenPocketInjectedProvider() {
260
+ return Boolean(resolveTokenPocketInjectedProvider());
261
+ }
262
+ function hasTronLinkInjectedProvider() {
263
+ return Boolean(resolveTronLinkInjectedProvider());
264
+ }
174
265
  var cachedAggregatorProvider;
175
266
  var cachedAggregatorProviderCount = 0;
176
267
  var isMultiWalletAggregator = (provider) => {
@@ -232,637 +323,6 @@ function hasAggregatedInjectedProvider() {
232
323
  return isRequestableProvider(window.ethereum);
233
324
  }
234
325
 
235
- // src/abi/erc20.ts
236
- var ERC20_ABI = [
237
- {
238
- constant: true,
239
- inputs: [],
240
- name: "name",
241
- outputs: [
242
- {
243
- name: "",
244
- type: "string"
245
- }
246
- ],
247
- payable: false,
248
- stateMutability: "view",
249
- type: "function"
250
- },
251
- {
252
- constant: false,
253
- inputs: [
254
- {
255
- name: "_spender",
256
- type: "address"
257
- },
258
- {
259
- name: "_value",
260
- type: "uint256"
261
- }
262
- ],
263
- name: "approve",
264
- outputs: [
265
- {
266
- name: "success",
267
- type: "bool"
268
- }
269
- ],
270
- payable: false,
271
- stateMutability: "nonpayable",
272
- type: "function"
273
- },
274
- {
275
- constant: true,
276
- inputs: [],
277
- name: "totalSupply",
278
- outputs: [
279
- {
280
- name: "",
281
- type: "uint256"
282
- }
283
- ],
284
- payable: false,
285
- stateMutability: "view",
286
- type: "function"
287
- },
288
- {
289
- constant: false,
290
- inputs: [
291
- {
292
- name: "_from",
293
- type: "address"
294
- },
295
- {
296
- name: "_to",
297
- type: "address"
298
- },
299
- {
300
- name: "_value",
301
- type: "uint256"
302
- }
303
- ],
304
- name: "transferFrom",
305
- outputs: [
306
- {
307
- name: "success",
308
- type: "bool"
309
- }
310
- ],
311
- payable: false,
312
- stateMutability: "nonpayable",
313
- type: "function"
314
- },
315
- {
316
- constant: true,
317
- inputs: [],
318
- name: "decimals",
319
- outputs: [
320
- {
321
- name: "",
322
- type: "uint8"
323
- }
324
- ],
325
- payable: false,
326
- stateMutability: "view",
327
- type: "function"
328
- },
329
- {
330
- constant: false,
331
- inputs: [
332
- {
333
- name: "_value",
334
- type: "uint256"
335
- }
336
- ],
337
- name: "burn",
338
- outputs: [],
339
- payable: false,
340
- stateMutability: "nonpayable",
341
- type: "function"
342
- },
343
- {
344
- constant: true,
345
- inputs: [
346
- {
347
- name: "_owner",
348
- type: "address"
349
- }
350
- ],
351
- name: "balanceOf",
352
- outputs: [
353
- {
354
- name: "balance",
355
- type: "uint256"
356
- }
357
- ],
358
- payable: false,
359
- stateMutability: "view",
360
- type: "function"
361
- },
362
- {
363
- constant: false,
364
- inputs: [
365
- {
366
- name: "_from",
367
- type: "address"
368
- },
369
- {
370
- name: "_value",
371
- type: "uint256"
372
- }
373
- ],
374
- name: "burnFrom",
375
- outputs: [],
376
- payable: false,
377
- stateMutability: "nonpayable",
378
- type: "function"
379
- },
380
- {
381
- constant: false,
382
- inputs: [
383
- {
384
- name: "_to",
385
- type: "address[]"
386
- },
387
- {
388
- name: "_value",
389
- type: "uint256[]"
390
- }
391
- ],
392
- name: "transferArray",
393
- outputs: [],
394
- payable: false,
395
- stateMutability: "nonpayable",
396
- type: "function"
397
- },
398
- {
399
- constant: true,
400
- inputs: [],
401
- name: "symbol",
402
- outputs: [
403
- {
404
- name: "",
405
- type: "string"
406
- }
407
- ],
408
- payable: false,
409
- stateMutability: "view",
410
- type: "function"
411
- },
412
- {
413
- constant: false,
414
- inputs: [
415
- {
416
- name: "_to",
417
- type: "address"
418
- },
419
- {
420
- name: "_value",
421
- type: "uint256"
422
- }
423
- ],
424
- name: "transfer",
425
- outputs: [
426
- {
427
- name: "success",
428
- type: "bool"
429
- }
430
- ],
431
- payable: false,
432
- stateMutability: "nonpayable",
433
- type: "function"
434
- },
435
- {
436
- constant: true,
437
- inputs: [
438
- {
439
- name: "_owner",
440
- type: "address"
441
- },
442
- {
443
- name: "_spender",
444
- type: "address"
445
- }
446
- ],
447
- name: "allowance",
448
- outputs: [
449
- {
450
- name: "remaining",
451
- type: "uint256"
452
- }
453
- ],
454
- payable: false,
455
- stateMutability: "view",
456
- type: "function"
457
- },
458
- {
459
- inputs: [
460
- {
461
- name: "_tokenName",
462
- type: "string"
463
- },
464
- {
465
- name: "_tokenSymbol",
466
- type: "string"
467
- },
468
- {
469
- name: "_decimalUnits",
470
- type: "uint8"
471
- },
472
- {
473
- name: "_initialAmount",
474
- type: "uint256"
475
- }
476
- ],
477
- payable: false,
478
- stateMutability: "nonpayable",
479
- type: "constructor"
480
- },
481
- {
482
- anonymous: false,
483
- inputs: [
484
- {
485
- indexed: true,
486
- name: "from",
487
- type: "address"
488
- },
489
- {
490
- indexed: true,
491
- name: "to",
492
- type: "address"
493
- },
494
- {
495
- indexed: false,
496
- name: "value",
497
- type: "uint256"
498
- }
499
- ],
500
- name: "Transfer",
501
- type: "event"
502
- },
503
- {
504
- anonymous: false,
505
- inputs: [
506
- {
507
- indexed: true,
508
- name: "owner",
509
- type: "address"
510
- },
511
- {
512
- indexed: true,
513
- name: "spender",
514
- type: "address"
515
- },
516
- {
517
- indexed: false,
518
- name: "value",
519
- type: "uint256"
520
- }
521
- ],
522
- name: "Approval",
523
- type: "event"
524
- }
525
- ];
526
-
527
- // src/config/networks.ts
528
- var BSC_NETWORK = {
529
- chainId: "0x38",
530
- chainName: "BNB Smart Chain",
531
- nativeCurrency: {
532
- name: "BNB",
533
- symbol: "BNB",
534
- decimals: 18
535
- },
536
- rpcUrls: [
537
- "https://bsc-dataseed.binance.org/",
538
- "https://bsc-dataseed1.binance.org/",
539
- "https://bsc-dataseed2.binance.org/"
540
- ],
541
- blockExplorerUrls: ["https://bscscan.com"]
542
- };
543
- var BSC_TESTNET_NETWORK = {
544
- chainId: "0x61",
545
- chainName: "BNB Smart Chain Testnet",
546
- nativeCurrency: {
547
- name: "tBNB",
548
- symbol: "tBNB",
549
- decimals: 18
550
- },
551
- rpcUrls: [
552
- "https://data-seed-prebsc-1-s1.bnbchain.org:8545/",
553
- "https://data-seed-prebsc-2-s1.bnbchain.org:8545/",
554
- "https://data-seed-prebsc-1-s2.bnbchain.org:8545/"
555
- ],
556
- blockExplorerUrls: ["https://testnet.bscscan.com"]
557
- };
558
-
559
- // src/config/resolve-chain.ts
560
- var USDT_CONTRACT_ADDRESSES = {
561
- [BSC_NETWORK.chainId]: "0x55d398326f99059fF775485246999027B3197955",
562
- [BSC_TESTNET_NETWORK.chainId]: "0x66E972502A34A625828C544a1914E8D8cc2A9dE5"
563
- };
564
- function resolveUsdtContractAddress(chainId) {
565
- const address = USDT_CONTRACT_ADDRESSES[chainId];
566
- if (!address) {
567
- throw new Error(`[wallet-sdk] Unsupported chainId for USDT: ${chainId}`);
568
- }
569
- return address;
570
- }
571
- function resolveChainByMainnet(isMainnet) {
572
- return isMainnet ? BSC_NETWORK : BSC_TESTNET_NETWORK;
573
- }
574
- function resolveUsdtByMainnet(isMainnet) {
575
- return resolveUsdtContractAddress(resolveChainByMainnet(isMainnet).chainId);
576
- }
577
- function resolveChainConfig(chainId) {
578
- if (chainId === BSC_NETWORK.chainId) {
579
- return BSC_NETWORK;
580
- }
581
- if (chainId === BSC_TESTNET_NETWORK.chainId) {
582
- return BSC_TESTNET_NETWORK;
583
- }
584
- throw new Error(`[wallet-sdk] Unsupported chainId: ${chainId}`);
585
- }
586
-
587
- // src/config/usdt.ts
588
- var USDT_CONFIG = {
589
- symbol: "USDT",
590
- name: "Tether USD",
591
- decimals: 18,
592
- contractAbi: ERC20_ABI
593
- };
594
- var ERC20_DECIMALS = USDT_CONFIG.decimals;
595
-
596
- // src/core/contract.ts
597
- var ERC20_DECIMALS_ABI = ["function decimals() view returns (uint8)"];
598
- async function hasDeployedContract(readProvider, address) {
599
- const code = await readProvider.getCode(address);
600
- return Boolean(code && code !== "0x");
601
- }
602
- async function readErc20Decimals(readProvider, tokenAddress, erc20Abi = ERC20_DECIMALS_ABI, fallback = ERC20_DECIMALS) {
603
- if (!await hasDeployedContract(readProvider, tokenAddress)) {
604
- throw new Error(`[wallet-sdk] Token contract not deployed: ${tokenAddress}`);
605
- }
606
- try {
607
- const tokenContract = new Contract(tokenAddress, erc20Abi, readProvider);
608
- const decimals = Number(await tokenContract.getFunction("decimals").staticCall());
609
- return Number.isFinite(decimals) && decimals >= 0 ? decimals : fallback;
610
- } catch {
611
- return fallback;
612
- }
613
- }
614
-
615
- // src/core/init.ts
616
- var CONFIG_KEY = "__WALLET_SDK_CONFIG__";
617
- function getStoredConfig() {
618
- return globalThis[CONFIG_KEY] ?? null;
619
- }
620
- function storeConfig(config) {
621
- globalThis[CONFIG_KEY] = config;
622
- }
623
- function buildConfig(options) {
624
- const chain = resolveChainByMainnet(options.isMainnet);
625
- return {
626
- isMainnet: options.isMainnet,
627
- chainId: chain.chainId,
628
- chain,
629
- contract: {
630
- address: options.contract.address,
631
- abi: options.contract.abi
632
- },
633
- usdt: {
634
- address: resolveUsdtByMainnet(options.isMainnet),
635
- abi: USDT_CONFIG.contractAbi,
636
- symbol: USDT_CONFIG.symbol,
637
- name: USDT_CONFIG.name,
638
- decimals: USDT_CONFIG.decimals
639
- }
640
- };
641
- }
642
- function initWalletSdk(options) {
643
- const config = buildConfig(options);
644
- storeConfig(config);
645
- return config;
646
- }
647
- function getWalletSdkConfig() {
648
- const config = getStoredConfig();
649
- if (!config) {
650
- throw new Error("[wallet-sdk] initWalletSdk() must be called before using the library");
651
- }
652
- return config;
653
- }
654
- function isWalletSdkInitialized() {
655
- return getStoredConfig() !== null;
656
- }
657
- function resetWalletSdkConfig() {
658
- delete globalThis[CONFIG_KEY];
659
- }
660
- function createJsonRpcReadProvider(rpcUrl, chainIdHex, cache) {
661
- if (cache?.current) return cache.current;
662
- const provider = new JsonRpcProvider(rpcUrl, toChainIdDecimal(chainIdHex), {
663
- staticNetwork: true
664
- });
665
- if (cache) {
666
- cache.current = provider;
667
- }
668
- return provider;
669
- }
670
- function getReadProviderWithFallback(walletProvider, rpcConfig, fallbackCache) {
671
- if (walletProvider) return walletProvider;
672
- const rpcUrl = rpcConfig.rpcUrls[0];
673
- if (!rpcUrl || !rpcConfig.chainId) {
674
- throw new Error("RPC config is missing");
675
- }
676
- return createJsonRpcReadProvider(rpcUrl, rpcConfig.chainId, fallbackCache);
677
- }
678
-
679
- // src/core/contract-read.ts
680
- var readProviderCache = { current: null };
681
- var walletReadProvider = null;
682
- function setWalletReadProvider(provider) {
683
- walletReadProvider = provider;
684
- }
685
- function getConfiguredReadProvider() {
686
- const { chain } = getWalletSdkConfig();
687
- return getReadProviderWithFallback(walletReadProvider, chain, readProviderCache);
688
- }
689
- async function isContractDeployed(contractAddress) {
690
- return hasDeployedContract(getConfiguredReadProvider(), contractAddress);
691
- }
692
- async function getContractDecimals(contractAddress, options) {
693
- const readProvider = getConfiguredReadProvider();
694
- if (!await hasDeployedContract(readProvider, contractAddress)) {
695
- throw new Error(`[wallet-sdk] Contract not deployed: ${contractAddress}`);
696
- }
697
- const tokenContract = new Contract(contractAddress, options.abi, readProvider);
698
- const decimals = await tokenContract.getFunction(options.method).staticCall();
699
- return Number(decimals);
700
- }
701
- async function getContractPrice(contractAddress, options) {
702
- const readProvider = getConfiguredReadProvider();
703
- if (!await hasDeployedContract(readProvider, contractAddress)) {
704
- throw new Error(`[wallet-sdk] Contract not deployed: ${contractAddress}`);
705
- }
706
- const tokenContract = new Contract(contractAddress, options.abi, readProvider);
707
- const price = await tokenContract.getFunction(options.method).staticCall();
708
- const decimals = await getContractDecimals(contractAddress, { abi: options.abi, method: "decimals" });
709
- return formatUnits(price, decimals);
710
- }
711
-
712
- // src/core/network.ts
713
- async function ensureTargetNetwork(options) {
714
- const currentChainId = await options.getCurrentChainId();
715
- if (currentChainId.toLowerCase() === options.targetChainId.toLowerCase()) return;
716
- try {
717
- await options.switchChain(options.targetChainId);
718
- } catch (err) {
719
- const error = err;
720
- if (error?.code !== 4902 && error?.info?.error?.code !== 4902) {
721
- throw err;
722
- }
723
- await options.addChain(options.chainParams);
724
- await options.switchChain(options.targetChainId);
725
- }
726
- }
727
-
728
- // src/wallet/common.ts
729
- function bindBrowserProvider(eip1193, cache) {
730
- const nextProvider = getSharedBrowserProvider(eip1193);
731
- if (cache.value !== nextProvider) {
732
- cache.value = nextProvider;
733
- }
734
- return nextProvider;
735
- }
736
- async function requestWallet(eip1193, method, params) {
737
- return eip1193.request({
738
- method,
739
- ...params === void 0 ? {} : { params }
740
- });
741
- }
742
- async function connectWalletAccount(requestAccounts, getProvider, setSigner, markConnected) {
743
- const accounts = await requestAccounts() || [];
744
- if (!accounts.length) {
745
- throw new Error("No accounts returned");
746
- }
747
- const sourceProvider = getProvider();
748
- const nextSigner = await sourceProvider.getSigner();
749
- const address = await nextSigner.getAddress();
750
- setSigner(nextSigner);
751
- markConnected();
752
- return { address, signer: nextSigner };
753
- }
754
- async function syncWalletAccountAddress(getProvider, setSigner, markConnected, nextAddress) {
755
- const sourceProvider = getProvider();
756
- const nextSigner = nextAddress ? await sourceProvider.getSigner(nextAddress) : await sourceProvider.getSigner();
757
- const address = nextAddress || await nextSigner.getAddress();
758
- setSigner(nextSigner);
759
- markConnected();
760
- return { address, signer: nextSigner };
761
- }
762
- function clearWalletRuntime(cache) {
763
- cache.provider.value = null;
764
- cache.signer.value = null;
765
- if (cache.selectedProvider) {
766
- cache.selectedProvider.value = null;
767
- }
768
- }
769
-
770
- // src/wallet/events.ts
771
- var eventHandlers = {};
772
- var providerBridges = /* @__PURE__ */ new WeakMap();
773
- var walletEventProvider = null;
774
- var boundProvider = null;
775
- function hasRegisteredHandlers() {
776
- return Object.values(eventHandlers).some((handlers) => handlers && handlers.size > 0);
777
- }
778
- function dispatch(event, payload) {
779
- const handlers = eventHandlers[event];
780
- if (!handlers) return;
781
- for (const handler of handlers) {
782
- void handler(payload);
783
- }
784
- }
785
- function unbindProvider(provider) {
786
- const bridgeHandlers = providerBridges.get(provider);
787
- if (!bridgeHandlers) return;
788
- for (const [event, handler] of Object.entries(bridgeHandlers)) {
789
- provider.removeListener(event, handler);
790
- }
791
- providerBridges.delete(provider);
792
- }
793
- function syncProviderBinding() {
794
- if (boundProvider) {
795
- unbindProvider(boundProvider);
796
- boundProvider = null;
797
- }
798
- if (!walletEventProvider || !hasRegisteredHandlers()) {
799
- return;
800
- }
801
- const bridgeHandlers = {};
802
- if (eventHandlers.accountsChanged?.size) {
803
- bridgeHandlers.accountsChanged = (...args) => {
804
- dispatch("accountsChanged", args[0] ?? []);
805
- };
806
- }
807
- if (eventHandlers.chainChanged?.size) {
808
- bridgeHandlers.chainChanged = (...args) => {
809
- dispatch("chainChanged", String(args[0] ?? ""));
810
- };
811
- }
812
- for (const [event, handler] of Object.entries(bridgeHandlers)) {
813
- walletEventProvider.removeListener(event, handler);
814
- walletEventProvider.on(event, handler);
815
- }
816
- providerBridges.set(walletEventProvider, bridgeHandlers);
817
- boundProvider = walletEventProvider;
818
- }
819
- function setWalletEventProvider(provider) {
820
- walletEventProvider = provider;
821
- syncProviderBinding();
822
- }
823
- function getWalletEventProvider() {
824
- if (!walletEventProvider) {
825
- throw new Error("[wallet-sdk] Wallet event provider is not set");
826
- }
827
- return walletEventProvider;
828
- }
829
- function registerEvent(event, listener) {
830
- assertBrowser("walletEvents.on");
831
- if (!eventHandlers[event]) {
832
- eventHandlers[event] = /* @__PURE__ */ new Set();
833
- }
834
- eventHandlers[event].add(listener);
835
- syncProviderBinding();
836
- }
837
- function unregisterEvent(event, listener) {
838
- if (!isBrowser) return;
839
- if (listener) {
840
- eventHandlers[event]?.delete(listener);
841
- } else {
842
- eventHandlers[event]?.clear();
843
- }
844
- syncProviderBinding();
845
- }
846
- function clearEvents() {
847
- if (!isBrowser) return;
848
- for (const event of Object.keys(eventHandlers)) {
849
- eventHandlers[event]?.clear();
850
- }
851
- syncProviderBinding();
852
- }
853
- var WalletEventsEmitter = class {
854
- on(event, listener) {
855
- registerEvent(event, listener);
856
- }
857
- off(event, listener) {
858
- unregisterEvent(event, listener);
859
- }
860
- clear() {
861
- clearEvents();
862
- }
863
- };
864
- var walletEvents = new WalletEventsEmitter();
865
-
866
326
  // src/wallet/detection.ts
867
327
  function isEthereumProvider() {
868
328
  if (!isBrowser) return false;
@@ -872,13 +332,17 @@ function isCoinbaseProvider() {
872
332
  if (!isBrowser) return false;
873
333
  return hasCoinbaseInjectedProvider();
874
334
  }
335
+ function isTokenPocketProvider() {
336
+ if (!isBrowser) return false;
337
+ return hasTokenPocketInjectedProvider() || hasTokenPocketEip6963Provider();
338
+ }
875
339
  function isInjectedProvider() {
876
340
  if (!isBrowser) return false;
877
341
  return hasAggregatedInjectedProvider();
878
342
  }
879
343
  function isTronLinkProvider() {
880
344
  if (!isBrowser) return false;
881
- return Boolean(window.tron?.request || window.tronLink);
345
+ return hasTronLinkInjectedProvider() || hasTronLinkEip6963Provider();
882
346
  }
883
347
 
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 };
348
+ export { Wallet6963Name, Wallet6963Rdns, discoverWalletProviders, findCoinbaseEip6963Provider, findDiscoveredProvider, findMetaMaskEip6963Provider, findTokenPocketEip6963Provider, findTronLinkEip6963Provider, getAggregatedInjectedProvider, getInjectedEthereumProviders, hasAggregatedInjectedProvider, hasCoinbaseEip6963Provider, hasCoinbaseInjectedProvider, hasMetaMaskEip6963Provider, hasMetaMaskInjectedProvider, hasRecoverableAggregatorProvider, hasTokenPocketEip6963Provider, hasTokenPocketInjectedProvider, hasTronLinkEip6963Provider, hasTronLinkInjectedProvider, isCoinbaseProvider, isEthereumProvider, isInjectedProvider, isTokenPocketProvider, isTronLinkProvider, rememberAggregatorProvider, resolveCoinbaseInjectedProvider, resolveMetaMaskInjectedProvider, resolveTokenPocketInjectedProvider, resolveTronLinkInjectedProvider };