@pioneer-platform/pioneer-sdk 4.20.9 → 4.20.10

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.cjs CHANGED
@@ -40,7 +40,7 @@ var __export = (target, all) => {
40
40
  });
41
41
  };
42
42
 
43
- // node_modules/@pioneer-platform/pioneer-client/lib/index.js
43
+ // ../pioneer-client/lib/index.js
44
44
  var require_lib = __commonJS((exports2) => {
45
45
  var __assign = exports2 && exports2.__assign || function() {
46
46
  __assign = Object.assign || function(t) {
@@ -432,7 +432,7 @@ var require_lib = __commonJS((exports2) => {
432
432
  exports2.default = Pioneer;
433
433
  });
434
434
 
435
- // node_modules/coinselect/utils.js
435
+ // ../../../node_modules/coinselect/utils.js
436
436
  var require_utils = __commonJS((exports2, module2) => {
437
437
  var TX_EMPTY_SIZE = 4 + 1 + 1 + 4;
438
438
  var TX_INPUT_BASE = 32 + 4 + 1 + 4;
@@ -505,7 +505,7 @@ var require_utils = __commonJS((exports2, module2) => {
505
505
  };
506
506
  });
507
507
 
508
- // node_modules/coinselect/accumulative.js
508
+ // ../../../node_modules/coinselect/accumulative.js
509
509
  var require_accumulative = __commonJS((exports2, module2) => {
510
510
  var utils = require_utils();
511
511
  module2.exports = function accumulative(utxos, outputs, feeRate) {
@@ -537,7 +537,7 @@ var require_accumulative = __commonJS((exports2, module2) => {
537
537
  };
538
538
  });
539
539
 
540
- // node_modules/coinselect/blackjack.js
540
+ // ../../../node_modules/coinselect/blackjack.js
541
541
  var require_blackjack = __commonJS((exports2, module2) => {
542
542
  var utils = require_utils();
543
543
  module2.exports = function blackjack(utxos, outputs, feeRate) {
@@ -566,7 +566,7 @@ var require_blackjack = __commonJS((exports2, module2) => {
566
566
  };
567
567
  });
568
568
 
569
- // node_modules/coinselect/index.js
569
+ // ../../../node_modules/coinselect/index.js
570
570
  var require_coinselect = __commonJS((exports2, module2) => {
571
571
  var accumulative = require_accumulative();
572
572
  var blackjack = require_blackjack();
@@ -585,7 +585,7 @@ var require_coinselect = __commonJS((exports2, module2) => {
585
585
  };
586
586
  });
587
587
 
588
- // node_modules/coinselect/split.js
588
+ // ../../../node_modules/coinselect/split.js
589
589
  var require_split = __commonJS((exports2, module2) => {
590
590
  var utils = require_utils();
591
591
  module2.exports = function split(utxos, outputs, feeRate) {
@@ -669,19 +669,32 @@ async function getEvmCharts(params) {
669
669
  return balances;
670
670
  }
671
671
  console.log(tag, "Using EVM address for portfolio:", primaryAddress);
672
+ await fetchStableCoins(pioneer, primaryAddress, blockchains, balances, context);
672
673
  try {
673
- let portfolio = await pioneer.GetPortfolio({ address: primaryAddress });
674
- portfolio = portfolio.data;
674
+ let portfolio = await pioneer.GetPortfolio({
675
+ networkId: "eip155:1",
676
+ address: primaryAddress
677
+ });
678
+ portfolio = portfolio.data?.data || portfolio.data;
675
679
  if (!portfolio || !portfolio.balances) {
676
680
  console.error(tag, "No portfolio.balances found:", portfolio);
677
681
  return balances;
678
682
  }
683
+ console.log(tag, `Portfolio returned ${portfolio.balances.length} balances`);
684
+ let processedCount = 0;
685
+ let skippedCount = 0;
679
686
  for (const balance of portfolio.balances) {
680
687
  const processedBalance = processPortfolioBalance(balance, primaryAddress, context, blockchains);
681
- if (processedBalance && !checkDuplicateBalance(balances, processedBalance.caip, processedBalance.pubkey)) {
682
- balances.push(processedBalance);
688
+ if (processedBalance) {
689
+ if (!checkDuplicateBalance(balances, processedBalance.caip, processedBalance.pubkey)) {
690
+ balances.push(processedBalance);
691
+ processedCount++;
692
+ }
693
+ } else {
694
+ skippedCount++;
683
695
  }
684
696
  }
697
+ console.log(tag, `Processed ${processedCount} balances, skipped ${skippedCount}`);
685
698
  if (portfolio.tokens && portfolio.tokens.length > 0) {
686
699
  console.log(tag, "Processing portfolio.tokens:", portfolio.tokens.length);
687
700
  for (const token of portfolio.tokens) {
@@ -702,7 +715,8 @@ function processPortfolioBalance(balance, primaryAddress, context, blockchains)
702
715
  return null;
703
716
  }
704
717
  const networkId = balance.caip.split("/")[0];
705
- if (!blockchains.includes(networkId)) {
718
+ const isEip155 = networkId.startsWith("eip155:");
719
+ if (!isEip155 && !blockchains.includes(networkId)) {
706
720
  return null;
707
721
  }
708
722
  const assetInfo = hydrateAssetData(balance.caip);
@@ -759,7 +773,8 @@ function processPortfolioToken(token, primaryAddress, context, blockchains) {
759
773
  } else if (token.networkId && token.networkId.includes("/")) {
760
774
  extractedNetworkId = token.networkId.split("/")[0];
761
775
  }
762
- if (!blockchains.includes(extractedNetworkId)) {
776
+ const isEip155 = extractedNetworkId.startsWith("eip155:");
777
+ if (!isEip155 && !blockchains.includes(extractedNetworkId)) {
763
778
  return null;
764
779
  }
765
780
  const tokenAssetInfo = hydrateAssetData(token.assetCaip);
@@ -787,6 +802,33 @@ function processPortfolioToken(token, primaryAddress, context, blockchains) {
787
802
  };
788
803
  return chartBalance;
789
804
  }
805
+ async function fetchStableCoins(pioneer, primaryAddress, blockchains, balances, context) {
806
+ console.log(tag, "Fetching stable coins for redundancy...");
807
+ const supportedNetworks = ["eip155:1", "eip155:137", "eip155:8453", "eip155:56"];
808
+ const networksToCheck = blockchains.filter((net) => supportedNetworks.includes(net));
809
+ if (networksToCheck.length === 0) {
810
+ console.log(tag, "No supported networks for stable coins");
811
+ return;
812
+ }
813
+ console.log(tag, `Checking stable coins on ${networksToCheck.length} networks`);
814
+ for (const networkId of networksToCheck) {
815
+ try {
816
+ const response = await pioneer.GetStableCoins({ networkId, address: primaryAddress });
817
+ const stableCoins = response?.data?.tokens || [];
818
+ console.log(tag, `Found ${stableCoins.length} stable coins on ${networkId}`);
819
+ for (const token of stableCoins) {
820
+ const chartBalance = processPortfolioToken(token, primaryAddress, context, blockchains);
821
+ if (chartBalance && !checkDuplicateBalance(balances, chartBalance.caip, chartBalance.pubkey)) {
822
+ balances.push(chartBalance);
823
+ console.log(tag, `Added stable coin: ${chartBalance.symbol} = ${chartBalance.balance}`);
824
+ }
825
+ }
826
+ } catch (error) {
827
+ console.error(tag, `Error fetching stable coins for ${networkId}:`, error.message);
828
+ }
829
+ }
830
+ console.log(tag, `Stable coin redundancy complete. Total balances: ${balances.length}`);
831
+ }
790
832
 
791
833
  // src/charts/maya.ts
792
834
  var tag2 = "| charts-maya |";
@@ -982,7 +1024,7 @@ var getCharts = async (blockchains, pioneer, pubkeys, context) => {
982
1024
  }
983
1025
  };
984
1026
 
985
- // node_modules/@coinmasters/types/dist/index.es.js
1027
+ // ../../../node_modules/@coinmasters/types/dist/index.es.js
986
1028
  var n = /* @__PURE__ */ ((e) => (e.INVALID_INPUT_PARAMETERS = "1000", e.UNKNOWN_PROVIDERS = "1001", e.CANNOT_FIND_INBOUND_ADDRESS = "1002", e.NO_INBOUND_ADDRESSES = "1003", e.CHAIN_HALTED_OR_UNSUPPORTED = "1004", e.MISSING_INPUT_PARAMETER = "1005", e.INVALID_TYPE_GENERIC = "1100", e.INVALID_NUMBER_STRING = "1101", e.INVALID_NUMBER = "1102", e.INVALID_BOOLEAN = "1103", e.INVALID_OBJECT = "1104", e.INVALID_ARRAY = "1105", e.SELL_AMOUNT_MUST_BE_POSITIVE_INTEGER = "2000", e.SELL_BUY_ASSETS_ARE_THE_SAME = "2001", e.MISSING_SOURCE_ADDRESS_FOR_SYNTH = "2002", e.AFF_ADDRESS_AND_BPS_OR_NEITHER = "2003", e.AFF_ADDRESS_TOO_LONG = "2004", e.AFF_BPS_INTEGER_0_100 = "2005", e.SOURCE_ADDRESS_INVALID_FOR_SELL_CHAIN = "2006", e.DESTINATION_ADDRESS_INVALID_FOR_BUY_CHAIN = "2007", e.PREFERRED_PROFVIDER_NOT_SUPPORTED = "2008", e.DESTINATION_ADDRESS_SMART_CONTRACT = "2009", e.BUY_AMOUNT_MUST_BE_POSITIVE_INTEGER = "2010", e.SOURCE_ADDRESS_SMART_CONTRACT = "2011", e.INVALID_PROVIDER = "2100", e.MISSING_CROSS_CHAIN_PROVIDER = "2101", e.MISSING_AVAX_PROVIDER = "2102", e.MISSING_BSC_PROVIDER = "2103", e.MISSING_ETH_PROVIDER = "2104", e.INVALID_PROVIDER_FOR_SWAP_OUT = "2105", e.MISSING_ARB_PROVIDER = "2106", e.INVALID_CHAIN = "2200", e.INVALID_ASSET = "2201", e.INVALID_ASSET_IDENTIFIER = "2202", e.UNSUPPORTED_CHAIN = "2204", e.UNSUPPORTED_ASSET = "2203", e.UNSUPPORTED_ASSET_FOR_SWAPOUT = "2205", e.INVALID_SOURCE_ADDRESS = "2300", e.INVALID_DESTINATION_ADDRESS = "2301", e.THORNODE_QUOTE_GENERIC_ERROR = "3000", e.NOT_ENOUGH_SYNTH_BALANCE = "3001", e.SYNTH_MINTING_CAP_REACHED = "3002", e.INVALID_QUOTE_MODE = "4000", e.NO_QUOTES = "4001", e.SERVICE_UNAVAILABLE_GENERIC = "5000", e.MISSING_GAS_DATA_GENERIC = "5100", e.MISSING_TOKEN_INFO_GENERIC = "5200", e.CANT_FIND_TOKEN_LIST = "5201", e.NO_PRICE = "5202", e.PRICE_IS_STALE = "5203", e.ADDRESS_NOT_WHITELISTED = "6000", e.ADDRESS_ALREADY_CLAIMED = "6001", e.TEMPORARY_ERROR = "9999", e))(n || {});
987
1029
  var b = {
988
1030
  [n.INVALID_INPUT_PARAMETERS]: "Invalid input parameters: {0}.",
package/dist/index.es.js CHANGED
@@ -23,7 +23,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
23
23
  throw Error('Dynamic require of "' + x + '" is not supported');
24
24
  });
25
25
 
26
- // node_modules/@pioneer-platform/pioneer-client/lib/index.js
26
+ // ../pioneer-client/lib/index.js
27
27
  var require_lib = __commonJS((exports) => {
28
28
  var __assign = exports && exports.__assign || function() {
29
29
  __assign = Object.assign || function(t) {
@@ -415,7 +415,7 @@ var require_lib = __commonJS((exports) => {
415
415
  exports.default = Pioneer;
416
416
  });
417
417
 
418
- // node_modules/coinselect/utils.js
418
+ // ../../../node_modules/coinselect/utils.js
419
419
  var require_utils = __commonJS((exports, module) => {
420
420
  var TX_EMPTY_SIZE = 4 + 1 + 1 + 4;
421
421
  var TX_INPUT_BASE = 32 + 4 + 1 + 4;
@@ -488,7 +488,7 @@ var require_utils = __commonJS((exports, module) => {
488
488
  };
489
489
  });
490
490
 
491
- // node_modules/coinselect/accumulative.js
491
+ // ../../../node_modules/coinselect/accumulative.js
492
492
  var require_accumulative = __commonJS((exports, module) => {
493
493
  var utils = require_utils();
494
494
  module.exports = function accumulative(utxos, outputs, feeRate) {
@@ -520,7 +520,7 @@ var require_accumulative = __commonJS((exports, module) => {
520
520
  };
521
521
  });
522
522
 
523
- // node_modules/coinselect/blackjack.js
523
+ // ../../../node_modules/coinselect/blackjack.js
524
524
  var require_blackjack = __commonJS((exports, module) => {
525
525
  var utils = require_utils();
526
526
  module.exports = function blackjack(utxos, outputs, feeRate) {
@@ -549,7 +549,7 @@ var require_blackjack = __commonJS((exports, module) => {
549
549
  };
550
550
  });
551
551
 
552
- // node_modules/coinselect/index.js
552
+ // ../../../node_modules/coinselect/index.js
553
553
  var require_coinselect = __commonJS((exports, module) => {
554
554
  var accumulative = require_accumulative();
555
555
  var blackjack = require_blackjack();
@@ -568,7 +568,7 @@ var require_coinselect = __commonJS((exports, module) => {
568
568
  };
569
569
  });
570
570
 
571
- // node_modules/coinselect/split.js
571
+ // ../../../node_modules/coinselect/split.js
572
572
  var require_split = __commonJS((exports, module) => {
573
573
  var utils = require_utils();
574
574
  module.exports = function split(utxos, outputs, feeRate) {
@@ -841,19 +841,32 @@ async function getEvmCharts(params) {
841
841
  return balances;
842
842
  }
843
843
  console.log(tag, "Using EVM address for portfolio:", primaryAddress);
844
+ await fetchStableCoins(pioneer, primaryAddress, blockchains, balances, context);
844
845
  try {
845
- let portfolio = await pioneer.GetPortfolio({ address: primaryAddress });
846
- portfolio = portfolio.data;
846
+ let portfolio = await pioneer.GetPortfolio({
847
+ networkId: "eip155:1",
848
+ address: primaryAddress
849
+ });
850
+ portfolio = portfolio.data?.data || portfolio.data;
847
851
  if (!portfolio || !portfolio.balances) {
848
852
  console.error(tag, "No portfolio.balances found:", portfolio);
849
853
  return balances;
850
854
  }
855
+ console.log(tag, `Portfolio returned ${portfolio.balances.length} balances`);
856
+ let processedCount = 0;
857
+ let skippedCount = 0;
851
858
  for (const balance of portfolio.balances) {
852
859
  const processedBalance = processPortfolioBalance(balance, primaryAddress, context, blockchains);
853
- if (processedBalance && !checkDuplicateBalance(balances, processedBalance.caip, processedBalance.pubkey)) {
854
- balances.push(processedBalance);
860
+ if (processedBalance) {
861
+ if (!checkDuplicateBalance(balances, processedBalance.caip, processedBalance.pubkey)) {
862
+ balances.push(processedBalance);
863
+ processedCount++;
864
+ }
865
+ } else {
866
+ skippedCount++;
855
867
  }
856
868
  }
869
+ console.log(tag, `Processed ${processedCount} balances, skipped ${skippedCount}`);
857
870
  if (portfolio.tokens && portfolio.tokens.length > 0) {
858
871
  console.log(tag, "Processing portfolio.tokens:", portfolio.tokens.length);
859
872
  for (const token of portfolio.tokens) {
@@ -874,7 +887,8 @@ function processPortfolioBalance(balance, primaryAddress, context, blockchains)
874
887
  return null;
875
888
  }
876
889
  const networkId = balance.caip.split("/")[0];
877
- if (!blockchains.includes(networkId)) {
890
+ const isEip155 = networkId.startsWith("eip155:");
891
+ if (!isEip155 && !blockchains.includes(networkId)) {
878
892
  return null;
879
893
  }
880
894
  const assetInfo = hydrateAssetData(balance.caip);
@@ -931,7 +945,8 @@ function processPortfolioToken(token, primaryAddress, context, blockchains) {
931
945
  } else if (token.networkId && token.networkId.includes("/")) {
932
946
  extractedNetworkId = token.networkId.split("/")[0];
933
947
  }
934
- if (!blockchains.includes(extractedNetworkId)) {
948
+ const isEip155 = extractedNetworkId.startsWith("eip155:");
949
+ if (!isEip155 && !blockchains.includes(extractedNetworkId)) {
935
950
  return null;
936
951
  }
937
952
  const tokenAssetInfo = hydrateAssetData(token.assetCaip);
@@ -959,6 +974,33 @@ function processPortfolioToken(token, primaryAddress, context, blockchains) {
959
974
  };
960
975
  return chartBalance;
961
976
  }
977
+ async function fetchStableCoins(pioneer, primaryAddress, blockchains, balances, context) {
978
+ console.log(tag, "Fetching stable coins for redundancy...");
979
+ const supportedNetworks = ["eip155:1", "eip155:137", "eip155:8453", "eip155:56"];
980
+ const networksToCheck = blockchains.filter((net) => supportedNetworks.includes(net));
981
+ if (networksToCheck.length === 0) {
982
+ console.log(tag, "No supported networks for stable coins");
983
+ return;
984
+ }
985
+ console.log(tag, `Checking stable coins on ${networksToCheck.length} networks`);
986
+ for (const networkId of networksToCheck) {
987
+ try {
988
+ const response = await pioneer.GetStableCoins({ networkId, address: primaryAddress });
989
+ const stableCoins = response?.data?.tokens || [];
990
+ console.log(tag, `Found ${stableCoins.length} stable coins on ${networkId}`);
991
+ for (const token of stableCoins) {
992
+ const chartBalance = processPortfolioToken(token, primaryAddress, context, blockchains);
993
+ if (chartBalance && !checkDuplicateBalance(balances, chartBalance.caip, chartBalance.pubkey)) {
994
+ balances.push(chartBalance);
995
+ console.log(tag, `Added stable coin: ${chartBalance.symbol} = ${chartBalance.balance}`);
996
+ }
997
+ }
998
+ } catch (error) {
999
+ console.error(tag, `Error fetching stable coins for ${networkId}:`, error.message);
1000
+ }
1001
+ }
1002
+ console.log(tag, `Stable coin redundancy complete. Total balances: ${balances.length}`);
1003
+ }
962
1004
 
963
1005
  // src/charts/maya.ts
964
1006
  var tag2 = "| charts-maya |";
@@ -1154,7 +1196,7 @@ var getCharts = async (blockchains, pioneer, pubkeys, context) => {
1154
1196
  }
1155
1197
  };
1156
1198
 
1157
- // node_modules/@coinmasters/types/dist/index.es.js
1199
+ // ../../../node_modules/@coinmasters/types/dist/index.es.js
1158
1200
  var n = /* @__PURE__ */ ((e) => (e.INVALID_INPUT_PARAMETERS = "1000", e.UNKNOWN_PROVIDERS = "1001", e.CANNOT_FIND_INBOUND_ADDRESS = "1002", e.NO_INBOUND_ADDRESSES = "1003", e.CHAIN_HALTED_OR_UNSUPPORTED = "1004", e.MISSING_INPUT_PARAMETER = "1005", e.INVALID_TYPE_GENERIC = "1100", e.INVALID_NUMBER_STRING = "1101", e.INVALID_NUMBER = "1102", e.INVALID_BOOLEAN = "1103", e.INVALID_OBJECT = "1104", e.INVALID_ARRAY = "1105", e.SELL_AMOUNT_MUST_BE_POSITIVE_INTEGER = "2000", e.SELL_BUY_ASSETS_ARE_THE_SAME = "2001", e.MISSING_SOURCE_ADDRESS_FOR_SYNTH = "2002", e.AFF_ADDRESS_AND_BPS_OR_NEITHER = "2003", e.AFF_ADDRESS_TOO_LONG = "2004", e.AFF_BPS_INTEGER_0_100 = "2005", e.SOURCE_ADDRESS_INVALID_FOR_SELL_CHAIN = "2006", e.DESTINATION_ADDRESS_INVALID_FOR_BUY_CHAIN = "2007", e.PREFERRED_PROFVIDER_NOT_SUPPORTED = "2008", e.DESTINATION_ADDRESS_SMART_CONTRACT = "2009", e.BUY_AMOUNT_MUST_BE_POSITIVE_INTEGER = "2010", e.SOURCE_ADDRESS_SMART_CONTRACT = "2011", e.INVALID_PROVIDER = "2100", e.MISSING_CROSS_CHAIN_PROVIDER = "2101", e.MISSING_AVAX_PROVIDER = "2102", e.MISSING_BSC_PROVIDER = "2103", e.MISSING_ETH_PROVIDER = "2104", e.INVALID_PROVIDER_FOR_SWAP_OUT = "2105", e.MISSING_ARB_PROVIDER = "2106", e.INVALID_CHAIN = "2200", e.INVALID_ASSET = "2201", e.INVALID_ASSET_IDENTIFIER = "2202", e.UNSUPPORTED_CHAIN = "2204", e.UNSUPPORTED_ASSET = "2203", e.UNSUPPORTED_ASSET_FOR_SWAPOUT = "2205", e.INVALID_SOURCE_ADDRESS = "2300", e.INVALID_DESTINATION_ADDRESS = "2301", e.THORNODE_QUOTE_GENERIC_ERROR = "3000", e.NOT_ENOUGH_SYNTH_BALANCE = "3001", e.SYNTH_MINTING_CAP_REACHED = "3002", e.INVALID_QUOTE_MODE = "4000", e.NO_QUOTES = "4001", e.SERVICE_UNAVAILABLE_GENERIC = "5000", e.MISSING_GAS_DATA_GENERIC = "5100", e.MISSING_TOKEN_INFO_GENERIC = "5200", e.CANT_FIND_TOKEN_LIST = "5201", e.NO_PRICE = "5202", e.PRICE_IS_STALE = "5203", e.ADDRESS_NOT_WHITELISTED = "6000", e.ADDRESS_ALREADY_CLAIMED = "6001", e.TEMPORARY_ERROR = "9999", e))(n || {});
1159
1201
  var b2 = {
1160
1202
  [n.INVALID_INPUT_PARAMETERS]: "Invalid input parameters: {0}.",
package/dist/index.js CHANGED
@@ -23,7 +23,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
23
23
  throw Error('Dynamic require of "' + x + '" is not supported');
24
24
  });
25
25
 
26
- // node_modules/@pioneer-platform/pioneer-client/lib/index.js
26
+ // ../pioneer-client/lib/index.js
27
27
  var require_lib = __commonJS((exports) => {
28
28
  var __assign = exports && exports.__assign || function() {
29
29
  __assign = Object.assign || function(t) {
@@ -415,7 +415,7 @@ var require_lib = __commonJS((exports) => {
415
415
  exports.default = Pioneer;
416
416
  });
417
417
 
418
- // node_modules/coinselect/utils.js
418
+ // ../../../node_modules/coinselect/utils.js
419
419
  var require_utils = __commonJS((exports, module) => {
420
420
  var TX_EMPTY_SIZE = 4 + 1 + 1 + 4;
421
421
  var TX_INPUT_BASE = 32 + 4 + 1 + 4;
@@ -488,7 +488,7 @@ var require_utils = __commonJS((exports, module) => {
488
488
  };
489
489
  });
490
490
 
491
- // node_modules/coinselect/accumulative.js
491
+ // ../../../node_modules/coinselect/accumulative.js
492
492
  var require_accumulative = __commonJS((exports, module) => {
493
493
  var utils = require_utils();
494
494
  module.exports = function accumulative(utxos, outputs, feeRate) {
@@ -520,7 +520,7 @@ var require_accumulative = __commonJS((exports, module) => {
520
520
  };
521
521
  });
522
522
 
523
- // node_modules/coinselect/blackjack.js
523
+ // ../../../node_modules/coinselect/blackjack.js
524
524
  var require_blackjack = __commonJS((exports, module) => {
525
525
  var utils = require_utils();
526
526
  module.exports = function blackjack(utxos, outputs, feeRate) {
@@ -549,7 +549,7 @@ var require_blackjack = __commonJS((exports, module) => {
549
549
  };
550
550
  });
551
551
 
552
- // node_modules/coinselect/index.js
552
+ // ../../../node_modules/coinselect/index.js
553
553
  var require_coinselect = __commonJS((exports, module) => {
554
554
  var accumulative = require_accumulative();
555
555
  var blackjack = require_blackjack();
@@ -568,7 +568,7 @@ var require_coinselect = __commonJS((exports, module) => {
568
568
  };
569
569
  });
570
570
 
571
- // node_modules/coinselect/split.js
571
+ // ../../../node_modules/coinselect/split.js
572
572
  var require_split = __commonJS((exports, module) => {
573
573
  var utils = require_utils();
574
574
  module.exports = function split(utxos, outputs, feeRate) {
@@ -841,19 +841,32 @@ async function getEvmCharts(params) {
841
841
  return balances;
842
842
  }
843
843
  console.log(tag, "Using EVM address for portfolio:", primaryAddress);
844
+ await fetchStableCoins(pioneer, primaryAddress, blockchains, balances, context);
844
845
  try {
845
- let portfolio = await pioneer.GetPortfolio({ address: primaryAddress });
846
- portfolio = portfolio.data;
846
+ let portfolio = await pioneer.GetPortfolio({
847
+ networkId: "eip155:1",
848
+ address: primaryAddress
849
+ });
850
+ portfolio = portfolio.data?.data || portfolio.data;
847
851
  if (!portfolio || !portfolio.balances) {
848
852
  console.error(tag, "No portfolio.balances found:", portfolio);
849
853
  return balances;
850
854
  }
855
+ console.log(tag, `Portfolio returned ${portfolio.balances.length} balances`);
856
+ let processedCount = 0;
857
+ let skippedCount = 0;
851
858
  for (const balance of portfolio.balances) {
852
859
  const processedBalance = processPortfolioBalance(balance, primaryAddress, context, blockchains);
853
- if (processedBalance && !checkDuplicateBalance(balances, processedBalance.caip, processedBalance.pubkey)) {
854
- balances.push(processedBalance);
860
+ if (processedBalance) {
861
+ if (!checkDuplicateBalance(balances, processedBalance.caip, processedBalance.pubkey)) {
862
+ balances.push(processedBalance);
863
+ processedCount++;
864
+ }
865
+ } else {
866
+ skippedCount++;
855
867
  }
856
868
  }
869
+ console.log(tag, `Processed ${processedCount} balances, skipped ${skippedCount}`);
857
870
  if (portfolio.tokens && portfolio.tokens.length > 0) {
858
871
  console.log(tag, "Processing portfolio.tokens:", portfolio.tokens.length);
859
872
  for (const token of portfolio.tokens) {
@@ -874,7 +887,8 @@ function processPortfolioBalance(balance, primaryAddress, context, blockchains)
874
887
  return null;
875
888
  }
876
889
  const networkId = balance.caip.split("/")[0];
877
- if (!blockchains.includes(networkId)) {
890
+ const isEip155 = networkId.startsWith("eip155:");
891
+ if (!isEip155 && !blockchains.includes(networkId)) {
878
892
  return null;
879
893
  }
880
894
  const assetInfo = hydrateAssetData(balance.caip);
@@ -931,7 +945,8 @@ function processPortfolioToken(token, primaryAddress, context, blockchains) {
931
945
  } else if (token.networkId && token.networkId.includes("/")) {
932
946
  extractedNetworkId = token.networkId.split("/")[0];
933
947
  }
934
- if (!blockchains.includes(extractedNetworkId)) {
948
+ const isEip155 = extractedNetworkId.startsWith("eip155:");
949
+ if (!isEip155 && !blockchains.includes(extractedNetworkId)) {
935
950
  return null;
936
951
  }
937
952
  const tokenAssetInfo = hydrateAssetData(token.assetCaip);
@@ -959,6 +974,33 @@ function processPortfolioToken(token, primaryAddress, context, blockchains) {
959
974
  };
960
975
  return chartBalance;
961
976
  }
977
+ async function fetchStableCoins(pioneer, primaryAddress, blockchains, balances, context) {
978
+ console.log(tag, "Fetching stable coins for redundancy...");
979
+ const supportedNetworks = ["eip155:1", "eip155:137", "eip155:8453", "eip155:56"];
980
+ const networksToCheck = blockchains.filter((net) => supportedNetworks.includes(net));
981
+ if (networksToCheck.length === 0) {
982
+ console.log(tag, "No supported networks for stable coins");
983
+ return;
984
+ }
985
+ console.log(tag, `Checking stable coins on ${networksToCheck.length} networks`);
986
+ for (const networkId of networksToCheck) {
987
+ try {
988
+ const response = await pioneer.GetStableCoins({ networkId, address: primaryAddress });
989
+ const stableCoins = response?.data?.tokens || [];
990
+ console.log(tag, `Found ${stableCoins.length} stable coins on ${networkId}`);
991
+ for (const token of stableCoins) {
992
+ const chartBalance = processPortfolioToken(token, primaryAddress, context, blockchains);
993
+ if (chartBalance && !checkDuplicateBalance(balances, chartBalance.caip, chartBalance.pubkey)) {
994
+ balances.push(chartBalance);
995
+ console.log(tag, `Added stable coin: ${chartBalance.symbol} = ${chartBalance.balance}`);
996
+ }
997
+ }
998
+ } catch (error) {
999
+ console.error(tag, `Error fetching stable coins for ${networkId}:`, error.message);
1000
+ }
1001
+ }
1002
+ console.log(tag, `Stable coin redundancy complete. Total balances: ${balances.length}`);
1003
+ }
962
1004
 
963
1005
  // src/charts/maya.ts
964
1006
  var tag2 = "| charts-maya |";
@@ -1154,7 +1196,7 @@ var getCharts = async (blockchains, pioneer, pubkeys, context) => {
1154
1196
  }
1155
1197
  };
1156
1198
 
1157
- // node_modules/@coinmasters/types/dist/index.es.js
1199
+ // ../../../node_modules/@coinmasters/types/dist/index.es.js
1158
1200
  var n = /* @__PURE__ */ ((e) => (e.INVALID_INPUT_PARAMETERS = "1000", e.UNKNOWN_PROVIDERS = "1001", e.CANNOT_FIND_INBOUND_ADDRESS = "1002", e.NO_INBOUND_ADDRESSES = "1003", e.CHAIN_HALTED_OR_UNSUPPORTED = "1004", e.MISSING_INPUT_PARAMETER = "1005", e.INVALID_TYPE_GENERIC = "1100", e.INVALID_NUMBER_STRING = "1101", e.INVALID_NUMBER = "1102", e.INVALID_BOOLEAN = "1103", e.INVALID_OBJECT = "1104", e.INVALID_ARRAY = "1105", e.SELL_AMOUNT_MUST_BE_POSITIVE_INTEGER = "2000", e.SELL_BUY_ASSETS_ARE_THE_SAME = "2001", e.MISSING_SOURCE_ADDRESS_FOR_SYNTH = "2002", e.AFF_ADDRESS_AND_BPS_OR_NEITHER = "2003", e.AFF_ADDRESS_TOO_LONG = "2004", e.AFF_BPS_INTEGER_0_100 = "2005", e.SOURCE_ADDRESS_INVALID_FOR_SELL_CHAIN = "2006", e.DESTINATION_ADDRESS_INVALID_FOR_BUY_CHAIN = "2007", e.PREFERRED_PROFVIDER_NOT_SUPPORTED = "2008", e.DESTINATION_ADDRESS_SMART_CONTRACT = "2009", e.BUY_AMOUNT_MUST_BE_POSITIVE_INTEGER = "2010", e.SOURCE_ADDRESS_SMART_CONTRACT = "2011", e.INVALID_PROVIDER = "2100", e.MISSING_CROSS_CHAIN_PROVIDER = "2101", e.MISSING_AVAX_PROVIDER = "2102", e.MISSING_BSC_PROVIDER = "2103", e.MISSING_ETH_PROVIDER = "2104", e.INVALID_PROVIDER_FOR_SWAP_OUT = "2105", e.MISSING_ARB_PROVIDER = "2106", e.INVALID_CHAIN = "2200", e.INVALID_ASSET = "2201", e.INVALID_ASSET_IDENTIFIER = "2202", e.UNSUPPORTED_CHAIN = "2204", e.UNSUPPORTED_ASSET = "2203", e.UNSUPPORTED_ASSET_FOR_SWAPOUT = "2205", e.INVALID_SOURCE_ADDRESS = "2300", e.INVALID_DESTINATION_ADDRESS = "2301", e.THORNODE_QUOTE_GENERIC_ERROR = "3000", e.NOT_ENOUGH_SYNTH_BALANCE = "3001", e.SYNTH_MINTING_CAP_REACHED = "3002", e.INVALID_QUOTE_MODE = "4000", e.NO_QUOTES = "4001", e.SERVICE_UNAVAILABLE_GENERIC = "5000", e.MISSING_GAS_DATA_GENERIC = "5100", e.MISSING_TOKEN_INFO_GENERIC = "5200", e.CANT_FIND_TOKEN_LIST = "5201", e.NO_PRICE = "5202", e.PRICE_IS_STALE = "5203", e.ADDRESS_NOT_WHITELISTED = "6000", e.ADDRESS_ALREADY_CLAIMED = "6001", e.TEMPORARY_ERROR = "9999", e))(n || {});
1159
1201
  var b2 = {
1160
1202
  [n.INVALID_INPUT_PARAMETERS]: "Invalid input parameters: {0}.",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "author": "highlander",
3
3
  "name": "@pioneer-platform/pioneer-sdk",
4
- "version": "4.20.9",
4
+ "version": "4.20.10",
5
5
  "dependencies": {
6
6
  "@keepkey/keepkey-sdk": "^0.2.62",
7
7
  "@pioneer-platform/loggerdog": "^8.11.0",
@@ -48,6 +48,8 @@
48
48
  },
49
49
  "react-native": "./src/index.ts",
50
50
  "repository": "https://github.com/thorswap/SwapKit.git",
51
+ "type": "module",
52
+ "types": "./dist/index.d.ts",
51
53
  "scripts": {
52
54
  "build": "bash scripts/build.sh",
53
55
  "build:watch": "nodemon --watch src --exec 'bun run build'",
@@ -55,7 +57,5 @@
55
57
  "lint": "eslint ./ --ext .ts,.tsx --fix; tsc --noEmit",
56
58
  "test": "echo 'vitest --run'",
57
59
  "test:coverage": "echo 'vitest run --coverage'"
58
- },
59
- "type": "module",
60
- "types": "./dist/index.d.ts"
61
- }
60
+ }
61
+ }
package/src/charts/evm.ts CHANGED
@@ -6,7 +6,7 @@ const tag = '| charts-evm |';
6
6
  export async function getEvmCharts(params: ChartParams): Promise<ChartBalance[]> {
7
7
  const { blockchains, pioneer, pubkeys, context } = params;
8
8
  const balances: ChartBalance[] = [];
9
-
9
+
10
10
  // Find the primary address for portfolio lookup
11
11
  // ONLY use EVM addresses since the portfolio endpoint uses Zapper which only supports Ethereum
12
12
  const evmPubkey = pubkeys.find(
@@ -28,22 +28,45 @@ export async function getEvmCharts(params: ChartParams): Promise<ChartBalance[]>
28
28
 
29
29
  console.log(tag, 'Using EVM address for portfolio:', primaryAddress);
30
30
 
31
+ // REDUNDANCY: Fetch stable coins from dedicated endpoint for ALL EVM networks
32
+ // This ensures USDC/USDT balances are always available even if Zapper fails
33
+ await fetchStableCoins(pioneer, primaryAddress, blockchains, balances, context);
34
+
31
35
  try {
32
- let portfolio = await pioneer.GetPortfolio({ address: primaryAddress });
33
- portfolio = portfolio.data;
36
+ // NOTE: Zapper API returns portfolio data across ALL networks for a given address
37
+ // We use eip155:1 as the networkId parameter, but Zapper will return data for all EVM chains
38
+ let portfolio = await pioneer.GetPortfolio({
39
+ networkId: 'eip155:1', // Required by endpoint, but Zapper returns all networks
40
+ address: primaryAddress
41
+ });
42
+
43
+ // Handle double-wrapped response from Swagger client
44
+ // Server returns { data: { balances: [...] } }
45
+ // Swagger client wraps as { data: { data: { balances: [...] } } }
46
+ portfolio = portfolio.data?.data || portfolio.data;
34
47
 
35
48
  if (!portfolio || !portfolio.balances) {
36
49
  console.error(tag, 'No portfolio.balances found:', portfolio);
37
50
  return balances;
38
51
  }
39
52
 
53
+ console.log(tag, `Portfolio returned ${portfolio.balances.length} balances`);
54
+
40
55
  // Process main balances
56
+ let processedCount = 0;
57
+ let skippedCount = 0;
41
58
  for (const balance of portfolio.balances) {
42
59
  const processedBalance = processPortfolioBalance(balance, primaryAddress, context, blockchains);
43
- if (processedBalance && !checkDuplicateBalance(balances, processedBalance.caip, processedBalance.pubkey)) {
44
- balances.push(processedBalance);
60
+ if (processedBalance) {
61
+ if (!checkDuplicateBalance(balances, processedBalance.caip, processedBalance.pubkey)) {
62
+ balances.push(processedBalance);
63
+ processedCount++;
64
+ }
65
+ } else {
66
+ skippedCount++;
45
67
  }
46
68
  }
69
+ console.log(tag, `Processed ${processedCount} balances, skipped ${skippedCount}`);
47
70
 
48
71
  // Process tokens from portfolio (if they exist)
49
72
  if (portfolio.tokens && portfolio.tokens.length > 0) {
@@ -76,9 +99,11 @@ function processPortfolioBalance(
76
99
 
77
100
  // Always derive networkId from CAIP
78
101
  const networkId = balance.caip.split('/')[0];
79
-
80
- // Skip if not in requested blockchains
81
- if (!blockchains.includes(networkId)) {
102
+
103
+ // Accept ALL EIP155 chains (since we have eip155:* pubkey)
104
+ // For non-EVM chains, check if explicitly in blockchains list
105
+ const isEip155 = networkId.startsWith('eip155:');
106
+ if (!isEip155 && !blockchains.includes(networkId)) {
82
107
  return null;
83
108
  }
84
109
 
@@ -162,8 +187,10 @@ function processPortfolioToken(
162
187
  extractedNetworkId = token.networkId.split('/')[0];
163
188
  }
164
189
 
165
- // Skip if not in requested blockchains
166
- if (!blockchains.includes(extractedNetworkId)) {
190
+ // Accept ALL EIP155 chains (since we have eip155:* pubkey)
191
+ // For non-EVM chains, check if explicitly in blockchains list
192
+ const isEip155 = extractedNetworkId.startsWith('eip155:');
193
+ if (!isEip155 && !blockchains.includes(extractedNetworkId)) {
167
194
  return null;
168
195
  }
169
196
 
@@ -196,4 +223,58 @@ function processPortfolioToken(
196
223
  };
197
224
 
198
225
  return chartBalance;
226
+ }
227
+
228
+ /**
229
+ * Fetch hardcoded stable coins from dedicated endpoint
230
+ * This provides redundancy for USDC/USDT balances using direct web3 queries
231
+ */
232
+ async function fetchStableCoins(
233
+ pioneer: any,
234
+ primaryAddress: string,
235
+ blockchains: string[],
236
+ balances: ChartBalance[],
237
+ context: string
238
+ ): Promise<void> {
239
+ console.log(tag, 'Fetching stable coins for redundancy...');
240
+
241
+ // Networks that support stable coins endpoint
242
+ const supportedNetworks = ['eip155:1', 'eip155:137', 'eip155:8453', 'eip155:56'];
243
+
244
+ // Filter to only supported EVM networks
245
+ const networksToCheck = blockchains.filter(net => supportedNetworks.includes(net));
246
+
247
+ if (networksToCheck.length === 0) {
248
+ console.log(tag, 'No supported networks for stable coins');
249
+ return;
250
+ }
251
+
252
+ console.log(tag, `Checking stable coins on ${networksToCheck.length} networks`);
253
+
254
+ // Fetch stable coins for each network
255
+ for (const networkId of networksToCheck) {
256
+ try {
257
+ const response = await pioneer.GetStableCoins({ networkId, address: primaryAddress });
258
+ const stableCoins = response?.data?.tokens || [];
259
+
260
+ console.log(tag, `Found ${stableCoins.length} stable coins on ${networkId}`);
261
+
262
+ // Process each stable coin
263
+ for (const token of stableCoins) {
264
+ // Convert to ChartBalance format
265
+ const chartBalance = processPortfolioToken(token, primaryAddress, context, blockchains);
266
+
267
+ // Add if not already in balances (avoid duplicates)
268
+ if (chartBalance && !checkDuplicateBalance(balances, chartBalance.caip, chartBalance.pubkey)) {
269
+ balances.push(chartBalance);
270
+ console.log(tag, `Added stable coin: ${chartBalance.symbol} = ${chartBalance.balance}`);
271
+ }
272
+ }
273
+ } catch (error: any) {
274
+ console.error(tag, `Error fetching stable coins for ${networkId}:`, error.message);
275
+ // Continue with other networks even if one fails
276
+ }
277
+ }
278
+
279
+ console.log(tag, `Stable coin redundancy complete. Total balances: ${balances.length}`);
199
280
  }
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Stable Coins Configuration
3
+ *
4
+ * Hardcoded list of stable coin and high-priority token addresses across chains.
5
+ * This ensures we ALWAYS fetch balances for these tokens, even if the API fails.
6
+ */
7
+
8
+ export interface TokenConfig {
9
+ symbol: string;
10
+ name: string;
11
+ address: string;
12
+ networkId: string;
13
+ caip: string;
14
+ decimals: number;
15
+ icon?: string;
16
+ coingeckoId?: string;
17
+ }
18
+
19
+ /**
20
+ * Ethereum Mainnet Tokens (eip155:1)
21
+ */
22
+ export const ETHEREUM_STABLE_COINS: TokenConfig[] = [
23
+ // USDC - Circle USD Coin
24
+ {
25
+ symbol: 'USDC',
26
+ name: 'USD Coin',
27
+ address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
28
+ networkId: 'eip155:1',
29
+ caip: 'eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
30
+ decimals: 6,
31
+ coingeckoId: 'usd-coin',
32
+ },
33
+
34
+ // USDT - Tether USD
35
+ {
36
+ symbol: 'USDT',
37
+ name: 'Tether USD',
38
+ address: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
39
+ networkId: 'eip155:1',
40
+ caip: 'eip155:1/erc20:0xdAC17F958D2ee523a2206206994597C13D831ec7',
41
+ decimals: 6,
42
+ coingeckoId: 'tether',
43
+ },
44
+
45
+ // DAI - Dai Stablecoin
46
+ {
47
+ symbol: 'DAI',
48
+ name: 'Dai Stablecoin',
49
+ address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
50
+ networkId: 'eip155:1',
51
+ caip: 'eip155:1/erc20:0x6B175474E89094C44Da98b954EedeAC495271d0F',
52
+ decimals: 18,
53
+ coingeckoId: 'dai',
54
+ },
55
+ ];
56
+
57
+ /**
58
+ * Polygon (MATIC) Tokens (eip155:137)
59
+ */
60
+ export const POLYGON_STABLE_COINS: TokenConfig[] = [
61
+ // USDC on Polygon
62
+ {
63
+ symbol: 'USDC',
64
+ name: 'USD Coin (Polygon)',
65
+ address: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',
66
+ networkId: 'eip155:137',
67
+ caip: 'eip155:137/erc20:0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',
68
+ decimals: 6,
69
+ coingeckoId: 'usd-coin',
70
+ },
71
+
72
+ // USDT on Polygon
73
+ {
74
+ symbol: 'USDT',
75
+ name: 'Tether USD (Polygon)',
76
+ address: '0xc2132D05D31c914a87C6611C10748AEb04B58e8F',
77
+ networkId: 'eip155:137',
78
+ caip: 'eip155:137/erc20:0xc2132D05D31c914a87C6611C10748AEb04B58e8F',
79
+ decimals: 6,
80
+ coingeckoId: 'tether',
81
+ },
82
+ ];
83
+
84
+ /**
85
+ * Base Tokens (eip155:8453)
86
+ */
87
+ export const BASE_STABLE_COINS: TokenConfig[] = [
88
+ // USDC on Base
89
+ {
90
+ symbol: 'USDC',
91
+ name: 'USD Coin (Base)',
92
+ address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
93
+ networkId: 'eip155:8453',
94
+ caip: 'eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
95
+ decimals: 6,
96
+ coingeckoId: 'usd-coin',
97
+ },
98
+ ];
99
+
100
+ /**
101
+ * BSC (BNB Smart Chain) Tokens (eip155:56)
102
+ */
103
+ export const BSC_STABLE_COINS: TokenConfig[] = [
104
+ // USDT on BSC
105
+ {
106
+ symbol: 'USDT',
107
+ name: 'Tether USD (BSC)',
108
+ address: '0x55d398326f99059fF775485246999027B3197955',
109
+ networkId: 'eip155:56',
110
+ caip: 'eip155:56/erc20:0x55d398326f99059fF775485246999027B3197955',
111
+ decimals: 18,
112
+ coingeckoId: 'tether',
113
+ },
114
+
115
+ // USDC on BSC
116
+ {
117
+ symbol: 'USDC',
118
+ name: 'USD Coin (BSC)',
119
+ address: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d',
120
+ networkId: 'eip155:56',
121
+ caip: 'eip155:56/erc20:0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d',
122
+ decimals: 18,
123
+ coingeckoId: 'usd-coin',
124
+ },
125
+ ];
126
+
127
+ /**
128
+ * All stable coins aggregated by network
129
+ */
130
+ export const STABLE_COINS_BY_NETWORK: Record<string, TokenConfig[]> = {
131
+ 'eip155:1': ETHEREUM_STABLE_COINS,
132
+ 'eip155:137': POLYGON_STABLE_COINS,
133
+ 'eip155:8453': BASE_STABLE_COINS,
134
+ 'eip155:56': BSC_STABLE_COINS,
135
+ };
136
+
137
+ /**
138
+ * Get all stable coins for a specific network
139
+ */
140
+ export function getStableCoinsForNetwork(networkId: string): TokenConfig[] {
141
+ return STABLE_COINS_BY_NETWORK[networkId] || [];
142
+ }
143
+
144
+ /**
145
+ * Get all stable coins across all networks
146
+ */
147
+ export function getAllStableCoins(): TokenConfig[] {
148
+ return [
149
+ ...ETHEREUM_STABLE_COINS,
150
+ ...POLYGON_STABLE_COINS,
151
+ ...BASE_STABLE_COINS,
152
+ ...BSC_STABLE_COINS,
153
+ ];
154
+ }
155
+
156
+ /**
157
+ * Check if a token address is a known stable coin
158
+ */
159
+ export function isKnownStableCoin(networkId: string, address: string): boolean {
160
+ const coins = getStableCoinsForNetwork(networkId);
161
+ return coins.some(coin => coin.address.toLowerCase() === address.toLowerCase());
162
+ }