@ecency/wallets 1.5.8 → 1.5.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.
@@ -1816,8 +1816,23 @@ declare function useWalletsCacheQuery(username?: string): _tanstack_react_query.
1816
1816
 
1817
1817
  interface VisionPortfolioWalletItem {
1818
1818
  symbol: string;
1819
- info: GeneralAssetInfo;
1820
- operations: AssetOperation[];
1819
+ name: string;
1820
+ title?: string;
1821
+ price?: number;
1822
+ accountBalance?: number;
1823
+ apr?: number;
1824
+ layer?: string;
1825
+ pendingRewards?: number;
1826
+ parts?: {
1827
+ name: string;
1828
+ balance: number;
1829
+ }[];
1830
+ actions?: Array<{
1831
+ id: string;
1832
+ [key: string]: unknown;
1833
+ } | string>;
1834
+ fiatRate?: number;
1835
+ fiatCurrency?: string;
1821
1836
  }
1822
1837
  interface VisionPortfolioResponse {
1823
1838
  username: string;
@@ -1,4 +1,4 @@
1
- import { CONFIG, getAccountFullQueryOptions, getQueryClient, getDynamicPropsQueryOptions, useBroadcastMutation, getSpkMarkets, getSpkWallet, getHiveEngineTokensMarket, getHiveEngineTokensBalances, getHiveEngineTokensMetadata, getHiveEngineTokenTransactions, getHiveEngineTokenMetrics, getHiveEngineUnclaimedRewards, EcencyAnalytics, useAccountUpdate } from '@ecency/sdk';
1
+ import { CONFIG, getAccountFullQueryOptions, getQueryClient, getDynamicPropsQueryOptions, useBroadcastMutation, getSpkMarkets, getSpkWallet, getHiveEngineTokensMarket, getHiveEngineTokensBalances, getHiveEngineTokensMetadata, getHiveEngineTokenTransactions, getHiveEngineTokenMetrics, getHiveEngineUnclaimedRewards, EcencyAnalytics, useAccountUpdate, getCurrencyRate } from '@ecency/sdk';
2
2
  export { getHiveEngineMetrics, getHiveEngineOpenOrders, getHiveEngineOrderBook, getHiveEngineTradeHistory } from '@ecency/sdk';
3
3
  import { useQuery, queryOptions, infiniteQueryOptions, useQueryClient, useMutation } from '@tanstack/react-query';
4
4
  import bip39, { mnemonicToSeedSync } from 'bip39';
@@ -2876,51 +2876,6 @@ function getAllTokensListQueryOptions(username) {
2876
2876
  }
2877
2877
  });
2878
2878
  }
2879
- var ACTION_ALIAS_MAP = {
2880
- "transfer-to-savings": "transfer-saving" /* TransferToSavings */,
2881
- "transfer-savings": "transfer-saving" /* TransferToSavings */,
2882
- "savings-transfer": "transfer-saving" /* TransferToSavings */,
2883
- "withdraw-from-savings": "withdraw-saving" /* WithdrawFromSavings */,
2884
- "withdraw-savings": "withdraw-saving" /* WithdrawFromSavings */,
2885
- "savings-withdraw": "withdraw-saving" /* WithdrawFromSavings */,
2886
- "transfer-from-savings": "withdraw-saving" /* WithdrawFromSavings */,
2887
- "powerup": "power-up" /* PowerUp */,
2888
- "power-down": "power-down" /* PowerDown */,
2889
- "powerdown": "power-down" /* PowerDown */,
2890
- "withdraw-vesting": "power-down" /* PowerDown */,
2891
- "hp-delegate": "delegate" /* Delegate */,
2892
- "delegate-hp": "delegate" /* Delegate */,
2893
- "delegate-power": "delegate" /* Delegate */,
2894
- "delegate-vesting-shares": "delegate" /* Delegate */,
2895
- "undelegate-power": "undelegate" /* Undelegate */,
2896
- "undelegate-token": "undelegate" /* Undelegate */,
2897
- "stake-token": "stake" /* Stake */,
2898
- "stake-power": "stake" /* Stake */,
2899
- "unstake-token": "unstake" /* Unstake */,
2900
- "unstake-power": "unstake" /* Unstake */,
2901
- "transfer-to-vesting": "power-up" /* PowerUp */,
2902
- "lock-liquidity": "lock" /* LockLiquidity */,
2903
- "lock-liq": "lock" /* LockLiquidity */,
2904
- "gift-points": "gift" /* Gift */,
2905
- "points-gift": "gift" /* Gift */,
2906
- "promote-post": "promote" /* Promote */,
2907
- "promote-entry": "promote" /* Promote */,
2908
- boost: "promote" /* Promote */,
2909
- convert: "swap" /* Swap */,
2910
- "swap-token": "swap" /* Swap */,
2911
- "swap_tokens": "swap" /* Swap */,
2912
- "claim-points": "claim" /* Claim */,
2913
- "claim-rewards": "claim" /* Claim */,
2914
- "buy-points": "buy" /* Buy */,
2915
- "ecency-point-transfer": "transfer" /* Transfer */,
2916
- "spkcc-spk-send": "transfer" /* Transfer */,
2917
- "withdraw-routes": "withdraw-routes" /* WithdrawRoutes */,
2918
- "withdrawroutes": "withdraw-routes" /* WithdrawRoutes */,
2919
- "claim-interest": "claim-interest" /* ClaimInterest */
2920
- };
2921
- var KNOWN_OPERATION_VALUES = new Map(
2922
- Object.values(AssetOperation).map((value) => [value, value])
2923
- );
2924
2879
  var DERIVED_PART_KEY_MAP = {
2925
2880
  liquid: ["liquid", "liquidBalance", "liquid_amount", "liquidTokens"],
2926
2881
  savings: ["savings", "savingsBalance", "savings_amount"],
@@ -3086,34 +3041,6 @@ function normalizeExtraDataParts(rawExtraData) {
3086
3041
  }).filter((part) => Boolean(part));
3087
3042
  return parts.length ? parts : void 0;
3088
3043
  }
3089
- function normalizeActionKey(value) {
3090
- return value.trim().toLowerCase().replace(/[\s_]+/g, "-");
3091
- }
3092
- function mapActions(rawActions) {
3093
- if (!rawActions) {
3094
- return [];
3095
- }
3096
- const rawList = Array.isArray(rawActions) ? rawActions : [rawActions];
3097
- const result = [];
3098
- for (const raw of rawList) {
3099
- let candidate;
3100
- if (typeof raw === "string") {
3101
- candidate = raw;
3102
- } else if (raw && typeof raw === "object") {
3103
- const record = raw;
3104
- candidate = normalizeString(record.code) ?? normalizeString(record.id) ?? normalizeString(record.name) ?? normalizeString(record.action);
3105
- }
3106
- if (!candidate) {
3107
- continue;
3108
- }
3109
- const canonical = normalizeActionKey(candidate);
3110
- const operation = KNOWN_OPERATION_VALUES.get(canonical) ?? ACTION_ALIAS_MAP[canonical];
3111
- if (operation && !result.includes(operation)) {
3112
- result.push(operation);
3113
- }
3114
- }
3115
- return result;
3116
- }
3117
3044
  function parseToken(rawToken) {
3118
3045
  if (!rawToken || typeof rawToken !== "object") {
3119
3046
  return void 0;
@@ -3143,19 +3070,17 @@ function parseToken(rawToken) {
3143
3070
  const pendingRewards = normalizeNumber(token.pendingRewards);
3144
3071
  return {
3145
3072
  symbol: normalizedSymbol,
3146
- info: {
3147
- name: normalizedSymbol,
3148
- title,
3149
- price,
3150
- accountBalance,
3151
- apr: apr ?? void 0,
3152
- layer: layer ?? void 0,
3153
- pendingRewards: pendingRewards ?? void 0,
3154
- parts
3155
- },
3156
- operations: mapActions(
3157
- token.actions ?? token.available_actions ?? token.availableActions ?? token.operations ?? token.supportedActions
3158
- )
3073
+ name: normalizedSymbol,
3074
+ title,
3075
+ price,
3076
+ accountBalance,
3077
+ apr: apr ? Number.parseFloat(apr) : void 0,
3078
+ layer: layer ?? void 0,
3079
+ pendingRewards: pendingRewards ?? void 0,
3080
+ parts,
3081
+ actions: token.actions ?? token.available_actions ?? token.availableActions ?? token.operations ?? token.supportedActions,
3082
+ fiatRate: normalizeNumber(token.fiatRate) ?? void 0,
3083
+ fiatCurrency: normalizeString(token.fiatCurrency) ?? void 0
3159
3084
  };
3160
3085
  }
3161
3086
  function extractTokens(payload) {
@@ -3312,7 +3237,7 @@ function getAccountWalletListQueryOptions(username, currency = "usd") {
3312
3237
  try {
3313
3238
  const portfolio = await queryClient.fetchQuery(portfolioQuery);
3314
3239
  const tokensFromPortfolio = portfolio.wallets.map(
3315
- (asset) => asset.info.name
3240
+ (asset) => asset.name
3316
3241
  );
3317
3242
  if (tokensFromPortfolio.length > 0) {
3318
3243
  const visibleTokens = tokensFromPortfolio.map((token) => token?.toUpperCase?.()).filter((token) => Boolean(token)).filter(isTokenVisible);
@@ -3766,14 +3691,39 @@ function getAccountWalletAssetInfoQueryOptions(username, asset, options2 = { ref
3766
3691
  }
3767
3692
  return queryClient.getQueryData(queryOptions43.queryKey);
3768
3693
  };
3694
+ const convertPriceToUserCurrency = async (assetInfo) => {
3695
+ if (!assetInfo || currency === "usd") {
3696
+ return assetInfo;
3697
+ }
3698
+ try {
3699
+ const conversionRate = await getCurrencyRate(currency);
3700
+ return {
3701
+ ...assetInfo,
3702
+ price: assetInfo.price * conversionRate
3703
+ };
3704
+ } catch (error) {
3705
+ console.warn(`Failed to convert price from USD to ${currency}:`, error);
3706
+ return assetInfo;
3707
+ }
3708
+ };
3769
3709
  const portfolioQuery = getVisionPortfolioQueryOptions(username, currency);
3770
3710
  const getPortfolioAssetInfo = async () => {
3771
3711
  try {
3772
3712
  const portfolio = await queryClient.fetchQuery(portfolioQuery);
3773
3713
  const assetInfo = portfolio.wallets.find(
3774
- (assetItem) => assetItem.info.name === asset.toUpperCase()
3714
+ (assetItem) => assetItem.name === asset.toUpperCase()
3775
3715
  );
3776
- return assetInfo?.info;
3716
+ if (!assetInfo) return void 0;
3717
+ return {
3718
+ name: assetInfo.name,
3719
+ title: assetInfo.title,
3720
+ price: assetInfo.price ?? assetInfo.fiatRate ?? 0,
3721
+ accountBalance: assetInfo.accountBalance ?? 0,
3722
+ apr: assetInfo.apr,
3723
+ layer: assetInfo.layer,
3724
+ pendingRewards: assetInfo.pendingRewards,
3725
+ parts: assetInfo.parts
3726
+ };
3777
3727
  } catch (e) {
3778
3728
  return void 0;
3779
3729
  }
@@ -3782,63 +3732,56 @@ function getAccountWalletAssetInfoQueryOptions(username, asset, options2 = { ref
3782
3732
  queryKey: ["ecency-wallets", "asset-info", username, asset, currency],
3783
3733
  queryFn: async () => {
3784
3734
  const portfolioAssetInfo = await getPortfolioAssetInfo();
3785
- if (portfolioAssetInfo) {
3735
+ if (portfolioAssetInfo && portfolioAssetInfo.price > 0) {
3786
3736
  return portfolioAssetInfo;
3787
3737
  }
3738
+ let assetInfo;
3788
3739
  if (asset === "HIVE") {
3789
- return fetchQuery(getHiveAssetGeneralInfoQueryOptions(username));
3740
+ assetInfo = await fetchQuery(getHiveAssetGeneralInfoQueryOptions(username));
3790
3741
  } else if (asset === "HP") {
3791
- return fetchQuery(getHivePowerAssetGeneralInfoQueryOptions(username));
3742
+ assetInfo = await fetchQuery(getHivePowerAssetGeneralInfoQueryOptions(username));
3792
3743
  } else if (asset === "HBD") {
3793
- return fetchQuery(getHbdAssetGeneralInfoQueryOptions(username));
3744
+ assetInfo = await fetchQuery(getHbdAssetGeneralInfoQueryOptions(username));
3794
3745
  } else if (asset === "SPK") {
3795
- return fetchQuery(getSpkAssetGeneralInfoQueryOptions(username));
3746
+ assetInfo = await fetchQuery(getSpkAssetGeneralInfoQueryOptions(username));
3796
3747
  } else if (asset === "LARYNX") {
3797
- return fetchQuery(getLarynxAssetGeneralInfoQueryOptions(username));
3748
+ assetInfo = await fetchQuery(getLarynxAssetGeneralInfoQueryOptions(username));
3798
3749
  } else if (asset === "LP") {
3799
- return fetchQuery(getLarynxPowerAssetGeneralInfoQueryOptions(username));
3750
+ assetInfo = await fetchQuery(getLarynxPowerAssetGeneralInfoQueryOptions(username));
3800
3751
  } else if (asset === "POINTS") {
3801
- return fetchQuery(getPointsAssetGeneralInfoQueryOptions(username));
3752
+ assetInfo = await fetchQuery(getPointsAssetGeneralInfoQueryOptions(username));
3802
3753
  } else if (asset === "APT") {
3803
- return fetchQuery(getAptAssetGeneralInfoQueryOptions(username));
3754
+ assetInfo = await fetchQuery(getAptAssetGeneralInfoQueryOptions(username));
3804
3755
  } else if (asset === "BNB") {
3805
- return fetchQuery(getBnbAssetGeneralInfoQueryOptions(username));
3756
+ assetInfo = await fetchQuery(getBnbAssetGeneralInfoQueryOptions(username));
3806
3757
  } else if (asset === "BTC") {
3807
- return fetchQuery(getBtcAssetGeneralInfoQueryOptions(username));
3758
+ assetInfo = await fetchQuery(getBtcAssetGeneralInfoQueryOptions(username));
3808
3759
  } else if (asset === "ETH") {
3809
- return fetchQuery(getEthAssetGeneralInfoQueryOptions(username));
3760
+ assetInfo = await fetchQuery(getEthAssetGeneralInfoQueryOptions(username));
3810
3761
  } else if (asset === "SOL") {
3811
- return fetchQuery(getSolAssetGeneralInfoQueryOptions(username));
3762
+ assetInfo = await fetchQuery(getSolAssetGeneralInfoQueryOptions(username));
3812
3763
  } else if (asset === "TON") {
3813
- return fetchQuery(getTonAssetGeneralInfoQueryOptions(username));
3764
+ assetInfo = await fetchQuery(getTonAssetGeneralInfoQueryOptions(username));
3814
3765
  } else if (asset === "TRX") {
3815
- return fetchQuery(getTronAssetGeneralInfoQueryOptions(username));
3816
- }
3817
- const balances = await queryClient.ensureQueryData(
3818
- getHiveEngineTokensBalancesQueryOptions(username)
3819
- );
3820
- if (balances.some((balance) => balance.symbol === asset)) {
3821
- return await fetchQuery(
3822
- getHiveEngineTokenGeneralInfoQueryOptions(username, asset)
3823
- );
3766
+ assetInfo = await fetchQuery(getTronAssetGeneralInfoQueryOptions(username));
3824
3767
  } else {
3825
- throw new Error(
3826
- "[SDK][Wallets] \u2013 has requested unrecognized asset info"
3768
+ const balances = await queryClient.ensureQueryData(
3769
+ getHiveEngineTokensBalancesQueryOptions(username)
3827
3770
  );
3771
+ if (balances.some((balance) => balance.symbol === asset)) {
3772
+ assetInfo = await fetchQuery(
3773
+ getHiveEngineTokenGeneralInfoQueryOptions(username, asset)
3774
+ );
3775
+ } else {
3776
+ throw new Error(
3777
+ "[SDK][Wallets] \u2013 has requested unrecognized asset info"
3778
+ );
3779
+ }
3828
3780
  }
3781
+ return await convertPriceToUserCurrency(assetInfo);
3829
3782
  }
3830
3783
  });
3831
3784
  }
3832
- function normalizePartKey2(value) {
3833
- return value.trim().toLowerCase().replace(/[\s-]+/g, "_");
3834
- }
3835
- function hasNonZeroSavingsBalance(parts) {
3836
- return Boolean(
3837
- parts?.some(
3838
- (part) => normalizePartKey2(part.name) === "savings" && Number(part.balance) > 0
3839
- )
3840
- );
3841
- }
3842
3785
  function getTokenOperationsQueryOptions(token, username, isForOwner = false, currency = "usd") {
3843
3786
  return queryOptions({
3844
3787
  queryKey: ["wallets", "token-operations", token, username, isForOwner, currency],
@@ -3853,16 +3796,93 @@ function getTokenOperationsQueryOptions(token, username, isForOwner = false, cur
3853
3796
  getVisionPortfolioQueryOptions(username, currency)
3854
3797
  );
3855
3798
  const assetEntry = portfolio.wallets.find(
3856
- (assetItem) => assetItem.info.name === normalizedToken
3799
+ (assetItem) => assetItem.symbol?.toUpperCase() === normalizedToken
3857
3800
  );
3858
3801
  if (!assetEntry) {
3859
3802
  return [];
3860
3803
  }
3861
- const operations = assetEntry.operations ?? [];
3862
- const isHiveOrHbd = ["HIVE", "HBD"].includes(
3863
- assetEntry.info.name.toUpperCase()
3864
- );
3865
- if (isHiveOrHbd && !hasNonZeroSavingsBalance(assetEntry.info.parts)) {
3804
+ const rawActions = assetEntry.actions ?? [];
3805
+ const operations = rawActions.map((action) => {
3806
+ if (typeof action === "string") return action;
3807
+ if (action && typeof action === "object") {
3808
+ const record = action;
3809
+ return record.id ?? record.code ?? record.name ?? record.action;
3810
+ }
3811
+ return void 0;
3812
+ }).filter((id) => Boolean(id)).map((id) => {
3813
+ const canonical = id.trim().toLowerCase().replace(/[\s_]+/g, "-");
3814
+ const aliasMap = {
3815
+ // Common operations
3816
+ "transfer": "transfer" /* Transfer */,
3817
+ "ecency-point-transfer": "transfer" /* Transfer */,
3818
+ "spkcc-spk-send": "transfer" /* Transfer */,
3819
+ // Savings operations
3820
+ "transfer-to-savings": "transfer-saving" /* TransferToSavings */,
3821
+ "transfer-savings": "transfer-saving" /* TransferToSavings */,
3822
+ "savings-transfer": "transfer-saving" /* TransferToSavings */,
3823
+ "withdraw-from-savings": "withdraw-saving" /* WithdrawFromSavings */,
3824
+ "transfer-from-savings": "withdraw-saving" /* WithdrawFromSavings */,
3825
+ "withdraw-savings": "withdraw-saving" /* WithdrawFromSavings */,
3826
+ "savings-withdraw": "withdraw-saving" /* WithdrawFromSavings */,
3827
+ // Vesting/Power operations
3828
+ "transfer-to-vesting": "power-up" /* PowerUp */,
3829
+ "powerup": "power-up" /* PowerUp */,
3830
+ "power-up": "power-up" /* PowerUp */,
3831
+ "withdraw-vesting": "power-down" /* PowerDown */,
3832
+ "power-down": "power-down" /* PowerDown */,
3833
+ "powerdown": "power-down" /* PowerDown */,
3834
+ // Delegation
3835
+ "delegate": "delegate" /* Delegate */,
3836
+ "delegate-vesting-shares": "delegate" /* Delegate */,
3837
+ "hp-delegate": "delegate" /* Delegate */,
3838
+ "delegate-hp": "delegate" /* Delegate */,
3839
+ "delegate-power": "delegate" /* Delegate */,
3840
+ "undelegate": "undelegate" /* Undelegate */,
3841
+ "undelegate-power": "undelegate" /* Undelegate */,
3842
+ "undelegate-token": "undelegate" /* Undelegate */,
3843
+ // Staking (Layer 2)
3844
+ "stake": "stake" /* Stake */,
3845
+ "stake-token": "stake" /* Stake */,
3846
+ "stake-power": "stake" /* Stake */,
3847
+ "unstake": "unstake" /* Unstake */,
3848
+ "unstake-token": "unstake" /* Unstake */,
3849
+ "unstake-power": "unstake" /* Unstake */,
3850
+ // Swap/Convert
3851
+ "swap": "swap" /* Swap */,
3852
+ "swap-token": "swap" /* Swap */,
3853
+ "swap-tokens": "swap" /* Swap */,
3854
+ "convert": "swap" /* Swap */,
3855
+ // Points operations
3856
+ "promote": "promote" /* Promote */,
3857
+ "promote-post": "promote" /* Promote */,
3858
+ "promote-entry": "promote" /* Promote */,
3859
+ "boost": "promote" /* Promote */,
3860
+ "gift": "gift" /* Gift */,
3861
+ "gift-points": "gift" /* Gift */,
3862
+ "points-gift": "gift" /* Gift */,
3863
+ "claim": "claim" /* Claim */,
3864
+ "claim-rewards": "claim" /* Claim */,
3865
+ "claim-points": "claim" /* Claim */,
3866
+ "buy": "buy" /* Buy */,
3867
+ "buy-points": "buy" /* Buy */,
3868
+ // Other
3869
+ "claim-interest": "claim-interest" /* ClaimInterest */,
3870
+ "withdraw-routes": "withdraw-routes" /* WithdrawRoutes */,
3871
+ "withdrawroutes": "withdraw-routes" /* WithdrawRoutes */,
3872
+ "lock": "lock" /* LockLiquidity */,
3873
+ "lock-liquidity": "lock" /* LockLiquidity */,
3874
+ "lock-liq": "lock" /* LockLiquidity */
3875
+ };
3876
+ const mapped = aliasMap[canonical];
3877
+ if (mapped) return mapped;
3878
+ const directMatch = Object.values(AssetOperation).find(
3879
+ (op) => op.toLowerCase() === canonical
3880
+ );
3881
+ return directMatch;
3882
+ }).filter((op) => Boolean(op));
3883
+ const isHiveOrHbd = ["HIVE", "HBD"].includes(normalizedToken);
3884
+ const hasSavings = Number(assetEntry.savings ?? 0) > 0;
3885
+ if (isHiveOrHbd && !hasSavings) {
3866
3886
  return operations.filter(
3867
3887
  (operation) => operation !== "withdraw-saving" /* WithdrawFromSavings */
3868
3888
  );