@zubari/sdk 0.5.6 → 0.5.8

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.mjs CHANGED
@@ -1,4 +1,10 @@
1
1
  import { HDNodeWallet, Wallet } from 'ethers';
2
+ import { mnemonicToSeedSync, validateMnemonic, generateMnemonic } from '@scure/bip39';
3
+ import { wordlist } from '@scure/bip39/wordlists/english';
4
+ import { HDKey } from '@scure/bip32';
5
+ import { bech32, base58check } from '@scure/base';
6
+ import { sha256 } from '@noble/hashes/sha256';
7
+ import { ripemd160 } from '@noble/hashes/ripemd160';
2
8
  import { createPublicClient, http, formatEther, getAddress } from 'viem';
3
9
  import { mainnet, sepolia } from 'viem/chains';
4
10
 
@@ -604,37 +610,12 @@ var DERIVATION_PATHS2 = {
604
610
  solana: `${DERIVATION_PATHS.solana}/0'`,
605
611
  spark: `${DERIVATION_PATHS.spark}/0`
606
612
  };
607
- var _crypto = null;
608
- async function loadCrypto() {
609
- if (_crypto) return _crypto;
610
- const [bip39, bip39Words, bip32, scureBase, sha256Mod, ripemd160Mod] = await Promise.all([
611
- import('@scure/bip39'),
612
- import('@scure/bip39/wordlists/english'),
613
- import('@scure/bip32'),
614
- import('@scure/base'),
615
- import('@noble/hashes/sha256'),
616
- import('@noble/hashes/ripemd160')
617
- ]);
618
- _crypto = {
619
- mnemonicToSeedSync: bip39.mnemonicToSeedSync,
620
- validateMnemonic: bip39.validateMnemonic,
621
- generateMnemonic: bip39.generateMnemonic,
622
- wordlist: bip39Words.wordlist,
623
- HDKey: bip32.HDKey,
624
- bech32: scureBase.bech32,
625
- base58check: scureBase.base58check,
626
- sha256: sha256Mod.sha256,
627
- ripemd160: ripemd160Mod.ripemd160
628
- };
629
- return _crypto;
630
- }
631
613
  function deriveEthereumAddress(seed) {
632
614
  const hdNode = HDNodeWallet.fromPhrase(seed, void 0, DERIVATION_PATHS2.ethereum);
633
615
  return hdNode.address;
634
616
  }
635
- async function deriveBitcoinAddress(seed, network = "mainnet") {
617
+ function deriveBitcoinAddress(seed, network = "mainnet") {
636
618
  try {
637
- const { mnemonicToSeedSync, HDKey, sha256, ripemd160, bech32 } = await loadCrypto();
638
619
  const seedBytes = mnemonicToSeedSync(seed);
639
620
  const hdKey = HDKey.fromMasterSeed(seedBytes);
640
621
  const path = network === "testnet" ? DERIVATION_PATHS2.bitcoin_testnet : DERIVATION_PATHS2.bitcoin_mainnet;
@@ -656,14 +637,13 @@ async function deriveBitcoinAddress(seed, network = "mainnet") {
656
637
  }
657
638
  async function deriveSolanaAddress(seed) {
658
639
  try {
659
- const [crypto2, ed25519, nacl, bs58Module] = await Promise.all([
660
- loadCrypto(),
640
+ const [ed25519, nacl, bs58Module] = await Promise.all([
661
641
  import('ed25519-hd-key'),
662
642
  import('tweetnacl'),
663
643
  import('bs58')
664
644
  ]);
665
645
  const bs58 = bs58Module.default || bs58Module;
666
- const seedBytes = crypto2.mnemonicToSeedSync(seed);
646
+ const seedBytes = mnemonicToSeedSync(seed);
667
647
  const derived = ed25519.derivePath(DERIVATION_PATHS2.solana, Buffer.from(seedBytes).toString("hex"));
668
648
  const keypair = nacl.sign.keyPair.fromSeed(new Uint8Array(derived.key));
669
649
  return bs58.encode(keypair.publicKey);
@@ -674,18 +654,17 @@ async function deriveSolanaAddress(seed) {
674
654
  }
675
655
  async function deriveTonAddress(seed) {
676
656
  try {
677
- const [crypto2, ed25519, nacl] = await Promise.all([
678
- loadCrypto(),
657
+ const [ed25519, nacl] = await Promise.all([
679
658
  import('ed25519-hd-key'),
680
659
  import('tweetnacl')
681
660
  ]);
682
- const seedBytes = crypto2.mnemonicToSeedSync(seed);
661
+ const seedBytes = mnemonicToSeedSync(seed);
683
662
  const derived = ed25519.derivePath(DERIVATION_PATHS2.ton, Buffer.from(seedBytes).toString("hex"));
684
663
  const keypair = nacl.sign.keyPair.fromSeed(new Uint8Array(derived.key));
685
664
  const publicKey = keypair.publicKey;
686
665
  const workchain = 0;
687
666
  const flags = 17;
688
- const hash = crypto2.sha256(publicKey);
667
+ const hash = sha256(publicKey);
689
668
  const addressData = new Uint8Array(34);
690
669
  addressData[0] = flags;
691
670
  addressData[1] = workchain;
@@ -713,9 +692,8 @@ function crc16(data) {
713
692
  }
714
693
  return crc;
715
694
  }
716
- async function deriveTronAddress(seed) {
695
+ function deriveTronAddress(seed) {
717
696
  try {
718
- const { sha256, base58check } = await loadCrypto();
719
697
  const hdNode = HDNodeWallet.fromPhrase(seed, void 0, DERIVATION_PATHS2.tron);
720
698
  const ethAddressHex = hdNode.address.slice(2).toLowerCase();
721
699
  const addressBytes = new Uint8Array(21);
@@ -730,9 +708,8 @@ async function deriveTronAddress(seed) {
730
708
  throw error;
731
709
  }
732
710
  }
733
- async function deriveSparkAddress(seed, network = "mainnet") {
711
+ function deriveSparkAddress(seed, network = "mainnet") {
734
712
  try {
735
- const { mnemonicToSeedSync, HDKey, sha256, ripemd160, bech32 } = await loadCrypto();
736
713
  const seedBytes = mnemonicToSeedSync(seed);
737
714
  const hdKey = HDKey.fromMasterSeed(seedBytes);
738
715
  const child = hdKey.derive(DERIVATION_PATHS2.spark);
@@ -760,37 +737,46 @@ async function deriveAllAddresses(seed, network = "mainnet") {
760
737
  solana: null,
761
738
  spark: null
762
739
  };
763
- await loadCrypto();
764
740
  try {
765
741
  addresses.ethereum = deriveEthereumAddress(seed);
766
742
  } catch (e) {
767
743
  console.error("ETH derivation failed:", e);
768
744
  }
769
- const [btcResult, sparkResult, tronResult, solResult, tonResult] = await Promise.allSettled([
770
- deriveBitcoinAddress(seed, network),
771
- deriveSparkAddress(seed, network),
772
- deriveTronAddress(seed),
745
+ try {
746
+ addresses.bitcoin = deriveBitcoinAddress(seed, network);
747
+ } catch (e) {
748
+ console.error("BTC derivation failed:", e);
749
+ }
750
+ try {
751
+ addresses.spark = deriveSparkAddress(seed, network);
752
+ } catch (e) {
753
+ console.error("Spark derivation failed:", e);
754
+ }
755
+ try {
756
+ addresses.tron = deriveTronAddress(seed);
757
+ } catch (e) {
758
+ console.error("TRON derivation failed:", e);
759
+ }
760
+ const [solResult, tonResult] = await Promise.allSettled([
773
761
  deriveSolanaAddress(seed),
774
762
  deriveTonAddress(seed)
775
763
  ]);
776
- if (btcResult.status === "fulfilled") addresses.bitcoin = btcResult.value;
777
- else console.error("BTC derivation failed:", btcResult.reason);
778
- if (sparkResult.status === "fulfilled") addresses.spark = sparkResult.value;
779
- else console.error("Spark derivation failed:", sparkResult.reason);
780
- if (tronResult.status === "fulfilled") addresses.tron = tronResult.value;
781
- else console.error("TRON derivation failed:", tronResult.reason);
782
- if (solResult.status === "fulfilled") addresses.solana = solResult.value;
783
- else console.error("SOL derivation failed:", solResult.reason);
784
- if (tonResult.status === "fulfilled") addresses.ton = tonResult.value;
785
- else console.error("TON derivation failed:", tonResult.reason);
764
+ if (solResult.status === "fulfilled") {
765
+ addresses.solana = solResult.value;
766
+ } else {
767
+ console.error("SOL derivation failed:", solResult.reason);
768
+ }
769
+ if (tonResult.status === "fulfilled") {
770
+ addresses.ton = tonResult.value;
771
+ } else {
772
+ console.error("TON derivation failed:", tonResult.reason);
773
+ }
786
774
  return addresses;
787
775
  }
788
- async function isValidSeed(seed) {
789
- const { validateMnemonic, wordlist } = await loadCrypto();
776
+ function isValidSeed(seed) {
790
777
  return validateMnemonic(seed, wordlist);
791
778
  }
792
- async function generateSeedPhrase() {
793
- const { generateMnemonic, wordlist } = await loadCrypto();
779
+ function generateSeedPhrase() {
794
780
  return generateMnemonic(wordlist);
795
781
  }
796
782
 
@@ -1034,7 +1020,7 @@ var ZubariWdkService = class {
1034
1020
  };
1035
1021
  if (!addresses.spark) {
1036
1022
  try {
1037
- addresses.spark = await deriveSparkAddress(seed, this.config.network);
1023
+ addresses.spark = deriveSparkAddress(seed, this.config.network);
1038
1024
  } catch (e) {
1039
1025
  console.warn("Browser Spark derivation fallback failed:", e);
1040
1026
  }
@@ -1270,13 +1256,13 @@ var ZubariWdkService = class {
1270
1256
  address = deriveEthereumAddress(seed);
1271
1257
  break;
1272
1258
  case "bitcoin":
1273
- address = await deriveBitcoinAddress(seed, this.config.network);
1259
+ address = deriveBitcoinAddress(seed, this.config.network);
1274
1260
  break;
1275
1261
  case "tron":
1276
- address = await deriveTronAddress(seed);
1262
+ address = deriveTronAddress(seed);
1277
1263
  break;
1278
1264
  case "spark":
1279
- address = await deriveSparkAddress(seed, this.config.network);
1265
+ address = deriveSparkAddress(seed, this.config.network);
1280
1266
  break;
1281
1267
  case "solana":
1282
1268
  address = await deriveSolanaAddress(seed);
@@ -2234,7 +2220,9 @@ var WalletManager = class _WalletManager {
2234
2220
  storage: config.storage || createSecureStorage(),
2235
2221
  enabledChains: config.enabledChains || SUPPORTED_CHAINS,
2236
2222
  apiUrl: config.apiUrl || process.env.NEXT_PUBLIC_API_URL || "https://ckgwifsxka.us-east-2.awsapprunner.com",
2237
- accessToken: config.accessToken
2223
+ accessToken: config.accessToken,
2224
+ chainRpcUrls: config.chainRpcUrls || {},
2225
+ tronApiKey: config.tronApiKey
2238
2226
  };
2239
2227
  this.storage = this.config.storage;
2240
2228
  this.wdkService = getZubariWdkService({
@@ -2796,7 +2784,7 @@ var WalletManager = class _WalletManager {
2796
2784
  }
2797
2785
  }
2798
2786
  } else if (chain === "solana") {
2799
- const rpcUrl = this.config.network === "mainnet" ? "https://api.mainnet-beta.solana.com" : "https://api.devnet.solana.com";
2787
+ const rpcUrl = this.config.chainRpcUrls.solana || (this.config.network === "mainnet" ? "https://api.mainnet-beta.solana.com" : "https://api.devnet.solana.com");
2800
2788
  try {
2801
2789
  const response = await fetch(rpcUrl, {
2802
2790
  method: "POST",
@@ -2853,8 +2841,12 @@ var WalletManager = class _WalletManager {
2853
2841
  const tronConfig = getNetworkConfig("tron", this.config.network !== "mainnet");
2854
2842
  const baseUrl = tronConfig.rpcUrl;
2855
2843
  try {
2844
+ const tronHeaders = { "Accept": "application/json" };
2845
+ if (this.config.tronApiKey) {
2846
+ tronHeaders["TRON-PRO-API-KEY"] = this.config.tronApiKey;
2847
+ }
2856
2848
  const response = await fetch(`${baseUrl}/v1/accounts/${address}`, {
2857
- headers: { "Accept": "application/json" }
2849
+ headers: tronHeaders
2858
2850
  });
2859
2851
  if (response.ok) {
2860
2852
  const data = await response.json();
@@ -2980,7 +2972,7 @@ var WalletManager = class _WalletManager {
2980
2972
  if (result.status === "fulfilled") {
2981
2973
  return result.value;
2982
2974
  }
2983
- console.error(`Failed to fetch balance for ${chain}:`, result.reason);
2975
+ console.warn(`Failed to fetch balance for ${chain}:`, result.reason);
2984
2976
  const networkConfig = this.getChainConfig(chain);
2985
2977
  return {
2986
2978
  chain,