@zubari/sdk 0.1.26 → 0.1.27

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.
@@ -4,11 +4,11 @@ var ethers = require('ethers');
4
4
  var viem = require('viem');
5
5
  var chains = require('viem/chains');
6
6
  var bip39 = require('@scure/bip39');
7
- var english_js = require('@scure/bip39/wordlists/english.js');
7
+ var english = require('@scure/bip39/wordlists/english');
8
8
  var bip32 = require('@scure/bip32');
9
9
  var base = require('@scure/base');
10
- var sha2_js = require('@noble/hashes/sha2.js');
11
- var legacy_js = require('@noble/hashes/legacy.js');
10
+ var sha256 = require('@noble/hashes/sha256');
11
+ var ripemd160 = require('@noble/hashes/ripemd160');
12
12
 
13
13
  // src/config/networks.ts
14
14
  var NETWORKS = {
@@ -98,6 +98,11 @@ var NETWORKS = {
98
98
  }
99
99
  };
100
100
  var TESTNET_NETWORKS = {
101
+ bitcoin: {
102
+ name: "Bitcoin Testnet",
103
+ rpcUrl: "https://blockstream.info/testnet/api",
104
+ explorerUrl: "https://mempool.space/testnet"
105
+ },
101
106
  ethereum: {
102
107
  name: "Sepolia",
103
108
  chainId: 11155111,
@@ -911,7 +916,7 @@ function deriveBitcoinAddress(seed, network = "testnet") {
911
916
  if (!child.publicKey) {
912
917
  throw new Error("Failed to derive public key");
913
918
  }
914
- const pubKeyHash = legacy_js.ripemd160(sha2_js.sha256(child.publicKey));
919
+ const pubKeyHash = ripemd160.ripemd160(sha256.sha256(child.publicKey));
915
920
  const witnessVersion = 0;
916
921
  const words = base.bech32.toWords(pubKeyHash);
917
922
  words.unshift(witnessVersion);
@@ -952,7 +957,7 @@ async function deriveTonAddress(seed) {
952
957
  const publicKey = keypair.publicKey;
953
958
  const workchain = 0;
954
959
  const flags = 17;
955
- const hash = sha2_js.sha256(publicKey);
960
+ const hash = sha256.sha256(publicKey);
956
961
  const addressData = new Uint8Array(34);
957
962
  addressData[0] = flags;
958
963
  addressData[1] = workchain;
@@ -989,7 +994,7 @@ function deriveTronAddress(seed) {
989
994
  for (let i = 0; i < 20; i++) {
990
995
  addressBytes[i + 1] = parseInt(ethAddressHex.slice(i * 2, i * 2 + 2), 16);
991
996
  }
992
- const tronBase58check = base.base58check(sha2_js.sha256);
997
+ const tronBase58check = base.base58check(sha256.sha256);
993
998
  return tronBase58check.encode(addressBytes);
994
999
  } catch (error) {
995
1000
  console.error("TRON address derivation failed:", error);
@@ -1004,7 +1009,7 @@ function deriveSparkAddress(seed, network = "testnet") {
1004
1009
  if (!child.publicKey) {
1005
1010
  throw new Error("Failed to derive public key");
1006
1011
  }
1007
- const pubKeyHash = legacy_js.ripemd160(sha2_js.sha256(child.publicKey));
1012
+ const pubKeyHash = ripemd160.ripemd160(sha256.sha256(child.publicKey));
1008
1013
  const witnessVersion = 0;
1009
1014
  const words = base.bech32.toWords(pubKeyHash);
1010
1015
  words.unshift(witnessVersion);
@@ -1062,10 +1067,10 @@ async function deriveAllAddresses(seed, network = "testnet") {
1062
1067
  return addresses;
1063
1068
  }
1064
1069
  function isValidSeed(seed) {
1065
- return bip39.validateMnemonic(seed, english_js.wordlist);
1070
+ return bip39.validateMnemonic(seed, english.wordlist);
1066
1071
  }
1067
1072
  function generateSeedPhrase() {
1068
- return bip39.generateMnemonic(english_js.wordlist);
1073
+ return bip39.generateMnemonic(english.wordlist);
1069
1074
  }
1070
1075
 
1071
1076
  // src/services/ZubariWdkService.ts
@@ -1843,6 +1848,33 @@ var WalletManager = class _WalletManager {
1843
1848
  console.warn("Failed to save addresses to storage:", error);
1844
1849
  }
1845
1850
  }
1851
+ /**
1852
+ * Normalize an address value - extract string from object format if needed
1853
+ * Handles both string addresses and object format {chain, address, path}
1854
+ */
1855
+ normalizeAddress(value) {
1856
+ if (typeof value === "string") {
1857
+ return value;
1858
+ }
1859
+ if (value && typeof value === "object" && "address" in value) {
1860
+ const addr = value.address;
1861
+ return typeof addr === "string" ? addr : null;
1862
+ }
1863
+ return null;
1864
+ }
1865
+ /**
1866
+ * Normalize all addresses in an object - extract strings from object format
1867
+ */
1868
+ normalizeAddresses(addresses) {
1869
+ const normalized = {};
1870
+ for (const [chain, value] of Object.entries(addresses)) {
1871
+ const addr = this.normalizeAddress(value);
1872
+ if (addr) {
1873
+ normalized[chain] = addr;
1874
+ }
1875
+ }
1876
+ return normalized;
1877
+ }
1846
1878
  /**
1847
1879
  * Load derived addresses from storage
1848
1880
  */
@@ -1850,8 +1882,11 @@ var WalletManager = class _WalletManager {
1850
1882
  try {
1851
1883
  const stored = await this.storage.getItem(STORAGE_KEYS.DERIVED_ADDRESSES);
1852
1884
  if (stored) {
1853
- const addresses = JSON.parse(stored);
1854
- console.log("Loaded derived addresses from storage:", Object.keys(addresses));
1885
+ const rawAddresses = JSON.parse(stored);
1886
+ console.log("[WalletManager] Raw addresses from storage:", rawAddresses);
1887
+ const addresses = this.normalizeAddresses(rawAddresses);
1888
+ console.log("[WalletManager] Normalized addresses:", addresses);
1889
+ await this.saveAddressesToStorage(addresses);
1855
1890
  return addresses;
1856
1891
  }
1857
1892
  } catch (error) {
@@ -1889,8 +1924,15 @@ var WalletManager = class _WalletManager {
1889
1924
  * Returns cached address or null - use deriveAllAddressesAsync to derive addresses
1890
1925
  */
1891
1926
  getAddressForChain(chain) {
1892
- if (this.derivedAddresses[chain]) {
1893
- return this.derivedAddresses[chain];
1927
+ const cachedValue = this.derivedAddresses[chain];
1928
+ if (cachedValue) {
1929
+ console.log(`[WalletManager] getAddressForChain(${chain}) cached value:`, cachedValue, "type:", typeof cachedValue);
1930
+ const addr = this.normalizeAddress(cachedValue);
1931
+ console.log(`[WalletManager] getAddressForChain(${chain}) normalized:`, addr);
1932
+ if (addr) {
1933
+ this.derivedAddresses[chain] = addr;
1934
+ return addr;
1935
+ }
1894
1936
  }
1895
1937
  if (chain === "ethereum" && this.currentSeed) {
1896
1938
  this.derivedAddresses[chain] = _WalletManager.deriveAddressForChain(this.currentSeed, chain);
@@ -1902,7 +1944,7 @@ var WalletManager = class _WalletManager {
1902
1944
  * Get all derived addresses
1903
1945
  */
1904
1946
  getAllAddresses() {
1905
- return { ...this.derivedAddresses };
1947
+ return this.normalizeAddresses(this.derivedAddresses);
1906
1948
  }
1907
1949
  /**
1908
1950
  * Set the selected chain
@@ -1944,6 +1986,7 @@ var WalletManager = class _WalletManager {
1944
1986
  let balance = "0";
1945
1987
  if (chain === "ethereum") {
1946
1988
  const viemChain = this.config.network === "mainnet" ? chains.mainnet : chains.sepolia;
1989
+ console.log(`[WalletManager] Fetching ${chain} balance for ${address} using RPC: ${this.config.rpcUrl}`);
1947
1990
  const client = viem.createPublicClient({
1948
1991
  chain: viemChain,
1949
1992
  transport: viem.http(this.config.rpcUrl, {
@@ -1958,8 +2001,9 @@ var WalletManager = class _WalletManager {
1958
2001
  address
1959
2002
  });
1960
2003
  balance = viem.formatEther(rawBalance);
2004
+ console.log(`[WalletManager] ${chain} balance fetched: ${balance} (raw: ${rawBalance})`);
1961
2005
  } catch (error) {
1962
- console.warn(`Failed to fetch ${chain} balance:`, error);
2006
+ console.error(`[WalletManager] Failed to fetch ${chain} balance from ${this.config.rpcUrl}:`, error);
1963
2007
  }
1964
2008
  } else if (chain === "bitcoin") {
1965
2009
  const isMainnet = this.config.network === "mainnet" || address.startsWith("bc1") || address.startsWith("1") || address.startsWith("3");