@ecency/wallets 1.4.26 → 1.4.28

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.
@@ -2675,16 +2675,400 @@ function getAllTokensListQueryOptions(username) {
2675
2675
  }
2676
2676
  });
2677
2677
  }
2678
+ var ACTION_ALIAS_MAP = {
2679
+ "transfer-to-savings": "transfer-saving" /* TransferToSavings */,
2680
+ "transfer-savings": "transfer-saving" /* TransferToSavings */,
2681
+ "savings-transfer": "transfer-saving" /* TransferToSavings */,
2682
+ "withdraw-from-savings": "withdraw-saving" /* WithdrawFromSavings */,
2683
+ "withdraw-savings": "withdraw-saving" /* WithdrawFromSavings */,
2684
+ "savings-withdraw": "withdraw-saving" /* WithdrawFromSavings */,
2685
+ "powerup": "power-up" /* PowerUp */,
2686
+ "power-down": "power-down" /* PowerDown */,
2687
+ "powerdown": "power-down" /* PowerDown */,
2688
+ "hp-delegate": "delegate" /* Delegate */,
2689
+ "delegate-hp": "delegate" /* Delegate */,
2690
+ "delegate-power": "delegate" /* Delegate */,
2691
+ "undelegate-power": "undelegate" /* Undelegate */,
2692
+ "undelegate-token": "undelegate" /* Undelegate */,
2693
+ "stake-token": "stake" /* Stake */,
2694
+ "stake-power": "stake" /* Stake */,
2695
+ "unstake-token": "unstake" /* Unstake */,
2696
+ "unstake-power": "unstake" /* Unstake */,
2697
+ "lock-liquidity": "lock" /* LockLiquidity */,
2698
+ "lock-liq": "lock" /* LockLiquidity */,
2699
+ "gift-points": "gift" /* Gift */,
2700
+ "points-gift": "gift" /* Gift */,
2701
+ "promote-post": "promote" /* Promote */,
2702
+ "promote-entry": "promote" /* Promote */,
2703
+ "claim-points": "claim" /* Claim */,
2704
+ "claim-rewards": "claim" /* Claim */,
2705
+ "buy-points": "buy" /* Buy */,
2706
+ "swap-token": "swap" /* Swap */,
2707
+ "swap-tokens": "swap" /* Swap */,
2708
+ "withdraw-routes": "withdraw-routes" /* WithdrawRoutes */,
2709
+ "withdrawroutes": "withdraw-routes" /* WithdrawRoutes */,
2710
+ "claim-interest": "claim-interest" /* ClaimInterest */
2711
+ };
2712
+ var KNOWN_OPERATION_VALUES = new Map(
2713
+ Object.values(AssetOperation).map((value) => [value, value])
2714
+ );
2715
+ var DERIVED_PART_KEY_MAP = {
2716
+ liquid: ["liquid", "liquidBalance", "liquid_amount", "liquidTokens"],
2717
+ savings: ["savings", "savingsBalance", "savings_amount"],
2718
+ staked: ["staked", "stakedBalance", "staking", "stake", "power"],
2719
+ delegated: ["delegated", "delegatedBalance", "delegationsOut"],
2720
+ received: ["received", "receivedBalance", "delegationsIn"],
2721
+ pending: [
2722
+ "pending",
2723
+ "pendingRewards",
2724
+ "unclaimed",
2725
+ "unclaimedBalance",
2726
+ "pendingReward"
2727
+ ]
2728
+ };
2729
+ var EXTRA_DATA_PART_KEY_MAP = {
2730
+ delegated: "outgoing_delegations",
2731
+ outgoing: "outgoing_delegations",
2732
+ delegations_out: "outgoing_delegations",
2733
+ delegated_hive_power: "outgoing_delegations",
2734
+ delegated_hp: "outgoing_delegations",
2735
+ received: "incoming_delegations",
2736
+ incoming: "incoming_delegations",
2737
+ delegations_in: "incoming_delegations",
2738
+ received_hive_power: "incoming_delegations",
2739
+ received_hp: "incoming_delegations",
2740
+ powering_down: "pending_power_down",
2741
+ power_down: "pending_power_down",
2742
+ powering_down_hive_power: "pending_power_down"
2743
+ };
2744
+ function normalizeString(value) {
2745
+ if (typeof value === "string") {
2746
+ const trimmed = value.trim();
2747
+ return trimmed.length > 0 ? trimmed : void 0;
2748
+ }
2749
+ return void 0;
2750
+ }
2751
+ function normalizeNumber(value) {
2752
+ if (typeof value === "number" && Number.isFinite(value)) {
2753
+ return value;
2754
+ }
2755
+ if (typeof value === "string") {
2756
+ const trimmed = value.trim();
2757
+ if (!trimmed) {
2758
+ return void 0;
2759
+ }
2760
+ const direct = Number.parseFloat(trimmed);
2761
+ if (Number.isFinite(direct)) {
2762
+ return direct;
2763
+ }
2764
+ const sanitized = trimmed.replace(/,/g, "");
2765
+ const match = sanitized.match(/[-+]?\d+(?:\.\d+)?/);
2766
+ if (match) {
2767
+ const parsed = Number.parseFloat(match[0]);
2768
+ if (Number.isFinite(parsed)) {
2769
+ return parsed;
2770
+ }
2771
+ }
2772
+ }
2773
+ return void 0;
2774
+ }
2775
+ function normalizeApr(value) {
2776
+ const numeric = normalizeNumber(value);
2777
+ if (numeric === void 0) {
2778
+ if (typeof value === "string") {
2779
+ const trimmed = value.trim();
2780
+ return trimmed.length > 0 ? trimmed : void 0;
2781
+ }
2782
+ return void 0;
2783
+ }
2784
+ return numeric.toString();
2785
+ }
2786
+ function normalizeParts(rawParts) {
2787
+ if (Array.isArray(rawParts)) {
2788
+ const parsed = rawParts.map((item) => {
2789
+ if (!item || typeof item !== "object") {
2790
+ return void 0;
2791
+ }
2792
+ const name = normalizeString(
2793
+ item.name ?? item.label ?? item.type ?? item.part
2794
+ );
2795
+ const balance = normalizeNumber(
2796
+ item.balance ?? item.amount ?? item.value
2797
+ );
2798
+ if (!name || balance === void 0) {
2799
+ return void 0;
2800
+ }
2801
+ return { name, balance };
2802
+ }).filter((item) => Boolean(item));
2803
+ return parsed.length ? parsed : void 0;
2804
+ }
2805
+ if (rawParts && typeof rawParts === "object") {
2806
+ const parsed = Object.entries(rawParts).map(([name, amount]) => {
2807
+ const balance = normalizeNumber(amount);
2808
+ if (!name || balance === void 0) {
2809
+ return void 0;
2810
+ }
2811
+ return { name, balance };
2812
+ }).filter((item) => Boolean(item));
2813
+ return parsed.length ? parsed : void 0;
2814
+ }
2815
+ return void 0;
2816
+ }
2817
+ function deriveParts(record) {
2818
+ const derived = Object.entries(DERIVED_PART_KEY_MAP).map(([name, keys]) => {
2819
+ for (const key of keys) {
2820
+ const value = normalizeNumber(record[key]);
2821
+ if (value !== void 0) {
2822
+ return { name, balance: value };
2823
+ }
2824
+ }
2825
+ return void 0;
2826
+ }).filter((item) => Boolean(item));
2827
+ return derived.length ? derived : void 0;
2828
+ }
2829
+ function normalizePartKey(value) {
2830
+ return value.trim().toLowerCase().replace(/[\s-]+/g, "_");
2831
+ }
2832
+ function mergeParts(...sources) {
2833
+ const order = [];
2834
+ const values2 = /* @__PURE__ */ new Map();
2835
+ for (const parts of sources) {
2836
+ if (!parts) {
2837
+ continue;
2838
+ }
2839
+ for (const part of parts) {
2840
+ if (!part?.name || typeof part.balance !== "number") {
2841
+ continue;
2842
+ }
2843
+ const existing = values2.get(part.name);
2844
+ if (existing === void 0) {
2845
+ order.push(part.name);
2846
+ values2.set(part.name, part.balance);
2847
+ } else {
2848
+ values2.set(part.name, existing + part.balance);
2849
+ }
2850
+ }
2851
+ }
2852
+ return order.length ? order.map((name) => ({ name, balance: values2.get(name) })) : void 0;
2853
+ }
2854
+ function normalizeExtraDataParts(rawExtraData) {
2855
+ const items = Array.isArray(rawExtraData) ? rawExtraData : rawExtraData && typeof rawExtraData === "object" ? Object.values(rawExtraData) : [];
2856
+ const parts = items.map((item) => {
2857
+ if (!item || typeof item !== "object") {
2858
+ return void 0;
2859
+ }
2860
+ const record = item;
2861
+ const keyCandidate = normalizeString(record.dataKey) ?? normalizeString(record.key) ?? normalizeString(record.name);
2862
+ if (!keyCandidate) {
2863
+ return void 0;
2864
+ }
2865
+ const canonical = normalizePartKey(keyCandidate);
2866
+ const partName = EXTRA_DATA_PART_KEY_MAP[canonical];
2867
+ if (!partName) {
2868
+ return void 0;
2869
+ }
2870
+ const balance = normalizeNumber(
2871
+ record.balance ?? record.amount ?? record.value ?? record.displayValue ?? record.text
2872
+ );
2873
+ if (balance === void 0) {
2874
+ return void 0;
2875
+ }
2876
+ return { name: partName, balance: Math.abs(balance) };
2877
+ }).filter((part) => Boolean(part));
2878
+ return parts.length ? parts : void 0;
2879
+ }
2880
+ function normalizeActionKey(value) {
2881
+ return value.trim().toLowerCase().replace(/[\s_]+/g, "-");
2882
+ }
2883
+ function mapActions(rawActions) {
2884
+ if (!rawActions) {
2885
+ return [];
2886
+ }
2887
+ const rawList = Array.isArray(rawActions) ? rawActions : [rawActions];
2888
+ const result = [];
2889
+ for (const raw of rawList) {
2890
+ let candidate;
2891
+ if (typeof raw === "string") {
2892
+ candidate = raw;
2893
+ } else if (raw && typeof raw === "object") {
2894
+ const record = raw;
2895
+ candidate = normalizeString(record.code) ?? normalizeString(record.name) ?? normalizeString(record.action);
2896
+ }
2897
+ if (!candidate) {
2898
+ continue;
2899
+ }
2900
+ const canonical = normalizeActionKey(candidate);
2901
+ const operation = KNOWN_OPERATION_VALUES.get(canonical) ?? ACTION_ALIAS_MAP[canonical];
2902
+ if (operation && !result.includes(operation)) {
2903
+ result.push(operation);
2904
+ }
2905
+ }
2906
+ return result;
2907
+ }
2908
+ function parseToken(rawToken) {
2909
+ if (!rawToken || typeof rawToken !== "object") {
2910
+ return void 0;
2911
+ }
2912
+ const token = rawToken;
2913
+ const symbol = normalizeString(token.symbol) ?? normalizeString(token.asset) ?? normalizeString(token.name);
2914
+ if (!symbol) {
2915
+ return void 0;
2916
+ }
2917
+ const normalizedSymbol = symbol.toUpperCase();
2918
+ const title = normalizeString(token.title) ?? normalizeString(token.display) ?? normalizeString(token.label) ?? normalizeString(token.friendlyName) ?? normalizeString(token.name) ?? normalizedSymbol;
2919
+ const price = normalizeNumber(token.fiatRate) ?? normalizeNumber(token.price) ?? normalizeNumber(token.priceUsd) ?? normalizeNumber(token.usdPrice) ?? normalizeNumber(token.metrics?.price) ?? normalizeNumber(
2920
+ token.metrics?.priceUsd
2921
+ ) ?? 0;
2922
+ const apr = normalizeApr(token.apr) ?? normalizeApr(token.aprPercent) ?? normalizeApr(token.metrics?.apr) ?? normalizeApr(
2923
+ token.metrics?.aprPercent
2924
+ );
2925
+ const baseParts = normalizeParts(
2926
+ token.parts ?? token.balances ?? token.sections ?? token.breakdown ?? token.accountBreakdown ?? token.walletParts
2927
+ ) ?? deriveParts(token);
2928
+ const parts = mergeParts(
2929
+ baseParts,
2930
+ normalizeExtraDataParts(
2931
+ token.extraData ?? token.extra_data ?? token.extra ?? token.badges
2932
+ )
2933
+ );
2934
+ const accountBalance = normalizeNumber(token.balance) ?? normalizeNumber(token.accountBalance) ?? normalizeNumber(token.totalBalance) ?? normalizeNumber(token.total) ?? normalizeNumber(token.amount) ?? (baseParts ? baseParts.reduce((total, part) => total + (part.balance ?? 0), 0) : parts ? parts.reduce((total, part) => total + (part.balance ?? 0), 0) : 0);
2935
+ const layer = normalizeString(token.layer) ?? normalizeString(token.chain) ?? normalizeString(token.category) ?? normalizeString(token.type);
2936
+ return {
2937
+ symbol: normalizedSymbol,
2938
+ info: {
2939
+ name: normalizedSymbol,
2940
+ title,
2941
+ price,
2942
+ accountBalance,
2943
+ apr: apr ?? void 0,
2944
+ layer: layer ?? void 0,
2945
+ parts
2946
+ },
2947
+ operations: mapActions(
2948
+ token.actions ?? token.available_actions ?? token.availableActions ?? token.operations ?? token.supportedActions
2949
+ )
2950
+ };
2951
+ }
2952
+ function extractTokens(payload) {
2953
+ if (!payload || typeof payload !== "object") {
2954
+ return [];
2955
+ }
2956
+ const containers = [payload];
2957
+ const record = payload;
2958
+ if (record.data && typeof record.data === "object") {
2959
+ containers.push(record.data);
2960
+ }
2961
+ if (record.result && typeof record.result === "object") {
2962
+ containers.push(record.result);
2963
+ }
2964
+ if (record.portfolio && typeof record.portfolio === "object") {
2965
+ containers.push(record.portfolio);
2966
+ }
2967
+ for (const container of containers) {
2968
+ if (Array.isArray(container)) {
2969
+ return container;
2970
+ }
2971
+ if (container && typeof container === "object") {
2972
+ for (const key of [
2973
+ "wallets",
2974
+ "tokens",
2975
+ "assets",
2976
+ "items",
2977
+ "portfolio",
2978
+ "balances"
2979
+ ]) {
2980
+ const value = container[key];
2981
+ if (Array.isArray(value)) {
2982
+ return value;
2983
+ }
2984
+ }
2985
+ }
2986
+ }
2987
+ return [];
2988
+ }
2989
+ function resolveUsername(payload) {
2990
+ if (!payload || typeof payload !== "object") {
2991
+ return void 0;
2992
+ }
2993
+ const record = payload;
2994
+ return normalizeString(record.username) ?? normalizeString(record.name) ?? normalizeString(record.account);
2995
+ }
2996
+ function getVisionPortfolioQueryOptions(username) {
2997
+ return reactQuery.queryOptions({
2998
+ queryKey: [
2999
+ "ecency-wallets",
3000
+ "portfolio",
3001
+ "v2",
3002
+ username,
3003
+ "only-enabled"
3004
+ ],
3005
+ enabled: Boolean(username),
3006
+ staleTime: 6e4,
3007
+ refetchInterval: 12e4,
3008
+ queryFn: async () => {
3009
+ if (!username) {
3010
+ throw new Error("[SDK][Wallets] \u2013 username is required");
3011
+ }
3012
+ if (!sdk.CONFIG.privateApiHost) {
3013
+ throw new Error(
3014
+ "[SDK][Wallets] \u2013 privateApiHost isn't configured for portfolio"
3015
+ );
3016
+ }
3017
+ const endpoint = `${sdk.CONFIG.privateApiHost}/wallet-api/portfolio-v2`;
3018
+ const response = await fetch(endpoint, {
3019
+ method: "POST",
3020
+ headers: {
3021
+ Accept: "application/json",
3022
+ "Content-Type": "application/json"
3023
+ },
3024
+ body: JSON.stringify({ username, onlyEnabled: true })
3025
+ });
3026
+ if (!response.ok) {
3027
+ throw new Error(
3028
+ `[SDK][Wallets] \u2013 Vision portfolio request failed(${response.status})`
3029
+ );
3030
+ }
3031
+ const payload = await response.json();
3032
+ const tokens = extractTokens(payload).map((item) => parseToken(item)).filter((item) => Boolean(item));
3033
+ if (!tokens.length) {
3034
+ throw new Error(
3035
+ "[SDK][Wallets] \u2013 Vision portfolio payload contained no tokens"
3036
+ );
3037
+ }
3038
+ return {
3039
+ username: resolveUsername(payload) ?? username,
3040
+ currency: normalizeString(
3041
+ payload?.currency
3042
+ )?.toUpperCase(),
3043
+ wallets: tokens
3044
+ };
3045
+ }
3046
+ });
3047
+ }
3048
+
3049
+ // src/modules/wallets/queries/use-get-account-wallet-list-query.ts
2678
3050
  function getAccountWalletListQueryOptions(username) {
2679
3051
  return reactQuery.queryOptions({
2680
3052
  queryKey: ["ecency-wallets", "list", username],
2681
3053
  enabled: !!username,
2682
3054
  queryFn: async () => {
3055
+ const portfolioQuery = getVisionPortfolioQueryOptions(username);
3056
+ const queryClient = sdk.getQueryClient();
3057
+ try {
3058
+ const portfolio = await queryClient.fetchQuery(portfolioQuery);
3059
+ const tokensFromPortfolio = portfolio.wallets.map(
3060
+ (asset) => asset.info.name
3061
+ );
3062
+ if (tokensFromPortfolio.length > 0) {
3063
+ return Array.from(new Set(tokensFromPortfolio));
3064
+ }
3065
+ } catch {
3066
+ }
2683
3067
  const accountQuery = sdk.getAccountFullQueryOptions(username);
2684
- await sdk.getQueryClient().fetchQuery({
3068
+ await queryClient.fetchQuery({
2685
3069
  queryKey: accountQuery.queryKey
2686
3070
  });
2687
- const account = sdk.getQueryClient().getQueryData(
3071
+ const account = queryClient.getQueryData(
2688
3072
  accountQuery.queryKey
2689
3073
  );
2690
3074
  if (account?.profile?.tokens instanceof Array) {
@@ -3130,17 +3514,33 @@ function getTronAssetGeneralInfoQueryOptions(username) {
3130
3514
  // src/modules/wallets/queries/get-account-wallet-asset-info-query-options.ts
3131
3515
  function getAccountWalletAssetInfoQueryOptions(username, asset, options2 = { refetch: false }) {
3132
3516
  const queryClient = sdk.getQueryClient();
3133
- const fetchQuery = async (queryOptions39) => {
3517
+ const fetchQuery = async (queryOptions40) => {
3134
3518
  if (options2.refetch) {
3135
- await queryClient.fetchQuery(queryOptions39);
3519
+ await queryClient.fetchQuery(queryOptions40);
3136
3520
  } else {
3137
- await queryClient.prefetchQuery(queryOptions39);
3521
+ await queryClient.prefetchQuery(queryOptions40);
3522
+ }
3523
+ return queryClient.getQueryData(queryOptions40.queryKey);
3524
+ };
3525
+ const portfolioQuery = getVisionPortfolioQueryOptions(username);
3526
+ const getPortfolioAssetInfo = async () => {
3527
+ try {
3528
+ const portfolio = await queryClient.fetchQuery(portfolioQuery);
3529
+ const assetInfo = portfolio.wallets.find(
3530
+ (assetItem) => assetItem.info.name === asset.toUpperCase()
3531
+ );
3532
+ return assetInfo?.info;
3533
+ } catch {
3534
+ return void 0;
3138
3535
  }
3139
- return queryClient.getQueryData(queryOptions39.queryKey);
3140
3536
  };
3141
3537
  return reactQuery.queryOptions({
3142
3538
  queryKey: ["ecency-wallets", "asset-info", username, asset],
3143
3539
  queryFn: async () => {
3540
+ const portfolioAssetInfo = await getPortfolioAssetInfo();
3541
+ if (portfolioAssetInfo) {
3542
+ return portfolioAssetInfo;
3543
+ }
3144
3544
  if (asset === "HIVE") {
3145
3545
  return fetchQuery(getHiveAssetGeneralInfoQueryOptions(username));
3146
3546
  } else if (asset === "HP") {
@@ -3190,145 +3590,21 @@ function getTokenOperationsQueryOptions(token, username, isForOwner = false) {
3190
3590
  queryKey: ["wallets", "token-operations", token, username, isForOwner],
3191
3591
  queryFn: async () => {
3192
3592
  const queryClient = sdk.getQueryClient();
3193
- const ensureAssetInfo = async () => {
3194
- if (!isForOwner || !username) {
3195
- return void 0;
3196
- }
3197
- return await queryClient.ensureQueryData(
3198
- getAccountWalletAssetInfoQueryOptions(username, token)
3199
- );
3200
- };
3201
- switch (token) {
3202
- case "HIVE" /* Hive */: {
3203
- const assetInfo = await ensureAssetInfo();
3204
- const savingsBalance = assetInfo?.parts?.find(
3205
- (part) => part.name === "savings"
3206
- )?.balance;
3207
- const pendingSavingsWithdrawAmount = await (async () => {
3208
- if (!isForOwner || !username) {
3209
- return 0;
3210
- }
3211
- try {
3212
- const response = await sdk.CONFIG.hiveClient.database.call(
3213
- "get_savings_withdraw_from",
3214
- [username]
3215
- );
3216
- return response.reduce((total, request) => {
3217
- const parsed = parseAsset(request.amount);
3218
- return parsed.symbol === "HIVE" /* HIVE */ ? total + parsed.amount : total;
3219
- }, 0);
3220
- } catch {
3221
- return 0;
3222
- }
3223
- })();
3224
- const hasAvailableSavingsWithdraw = typeof savingsBalance === "number" && savingsBalance - pendingSavingsWithdrawAmount > 1e-6;
3225
- return [
3226
- "transfer" /* Transfer */,
3227
- ...isForOwner ? [
3228
- ...hasAvailableSavingsWithdraw ? ["withdraw-saving" /* WithdrawFromSavings */] : [],
3229
- "transfer-saving" /* TransferToSavings */,
3230
- "power-up" /* PowerUp */,
3231
- "swap" /* Swap */
3232
- ] : []
3233
- ];
3234
- }
3235
- case "HP" /* HivePower */:
3236
- return [
3237
- "delegate" /* Delegate */,
3238
- ...isForOwner ? ["power-down" /* PowerDown */, "withdraw-routes" /* WithdrawRoutes */] : ["power-up" /* PowerUp */]
3239
- ];
3240
- case "HBD" /* HiveDollar */: {
3241
- const assetInfo = await ensureAssetInfo();
3242
- const savingsBalance = assetInfo?.parts?.find(
3243
- (part) => part.name === "savings"
3244
- )?.balance;
3245
- const pendingSavingsWithdrawAmount = await (async () => {
3246
- if (!isForOwner || !username) {
3247
- return 0;
3248
- }
3249
- try {
3250
- const response = await sdk.CONFIG.hiveClient.database.call(
3251
- "get_savings_withdraw_from",
3252
- [username]
3253
- );
3254
- return response.reduce((total, request) => {
3255
- const parsed = parseAsset(request.amount);
3256
- return parsed.symbol === "HBD" /* HBD */ ? total + parsed.amount : total;
3257
- }, 0);
3258
- } catch {
3259
- return 0;
3260
- }
3261
- })();
3262
- const hasAvailableSavingsWithdraw = typeof savingsBalance === "number" && savingsBalance - pendingSavingsWithdrawAmount > 1e-6;
3263
- return [
3264
- "transfer" /* Transfer */,
3265
- ...isForOwner ? [
3266
- ...hasAvailableSavingsWithdraw ? ["withdraw-saving" /* WithdrawFromSavings */] : [],
3267
- "transfer-saving" /* TransferToSavings */,
3268
- "swap" /* Swap */
3269
- ] : []
3270
- ];
3271
- }
3272
- case "POINTS" /* Points */:
3273
- return [
3274
- "gift" /* Gift */,
3275
- ...isForOwner ? [
3276
- "promote" /* Promote */,
3277
- "claim" /* Claim */,
3278
- "buy" /* Buy */
3279
- ] : []
3280
- ];
3281
- case "SPK":
3282
- return ["transfer" /* Transfer */];
3283
- case "LARYNX":
3284
- return [
3285
- "transfer" /* Transfer */,
3286
- ...isForOwner ? ["power-up" /* PowerUp */, "lock" /* LockLiquidity */] : []
3287
- ];
3288
- case "LP":
3289
- return [
3290
- "delegate" /* Delegate */,
3291
- ...isForOwner ? ["power-down" /* PowerDown */] : []
3292
- ];
3293
- case "APT":
3294
- case "BNB":
3295
- case "BTC":
3296
- case "ETH":
3297
- case "SOL":
3298
- case "TON":
3299
- case "TRX":
3300
- return [];
3301
- }
3593
+ const normalizedToken = token.toUpperCase();
3302
3594
  if (!username) {
3303
- return ["transfer" /* Transfer */];
3595
+ return [];
3596
+ }
3597
+ try {
3598
+ const portfolio = await queryClient.fetchQuery(
3599
+ getVisionPortfolioQueryOptions(username)
3600
+ );
3601
+ const assetEntry = portfolio.wallets.find(
3602
+ (assetItem) => assetItem.info.name === normalizedToken
3603
+ );
3604
+ return assetEntry?.operations ?? [];
3605
+ } catch {
3606
+ return [];
3304
3607
  }
3305
- const balancesListQuery = getHiveEngineTokensBalancesQueryOptions(username);
3306
- const balances = await queryClient.ensureQueryData(balancesListQuery);
3307
- const tokensQuery = getHiveEngineTokensMetadataQueryOptions(
3308
- balances.map((b) => b.symbol)
3309
- );
3310
- const tokens = await queryClient.ensureQueryData(tokensQuery);
3311
- const balanceInfo = balances.find((m) => m.symbol === token);
3312
- const tokenInfo = tokens.find((t) => t.symbol === token);
3313
- const canDelegate = isForOwner && tokenInfo?.delegationEnabled && balanceInfo && parseFloat(balanceInfo.delegationsOut) !== parseFloat(balanceInfo.balance);
3314
- const canUndelegate = isForOwner && parseFloat(balanceInfo?.delegationsOut ?? "0") > 0;
3315
- const stakeBalance = parseFloat(balanceInfo?.stake ?? "0");
3316
- const pendingUnstakeBalance = parseFloat(
3317
- balanceInfo?.pendingUnstake ?? "0"
3318
- );
3319
- const supportsStakingFeature = Boolean(
3320
- tokenInfo?.stakingEnabled || (tokenInfo?.unstakingCooldown ?? 0) > 0 || parseFloat(tokenInfo?.totalStaked ?? "0") > 0
3321
- );
3322
- const hasStakingBalances = stakeBalance > 0 || pendingUnstakeBalance > 0;
3323
- const canStake = isForOwner && Boolean(tokenInfo?.stakingEnabled);
3324
- const canUnstake = isForOwner && (supportsStakingFeature || hasStakingBalances);
3325
- return [
3326
- "transfer" /* Transfer */,
3327
- ...canDelegate ? ["delegate" /* Delegate */] : [],
3328
- ...canUndelegate ? ["undelegate" /* Undelegate */] : [],
3329
- ...canStake ? ["stake" /* Stake */] : [],
3330
- ...canUnstake ? ["unstake" /* Unstake */] : []
3331
- ];
3332
3608
  }
3333
3609
  });
3334
3610
  }
@@ -3819,6 +4095,7 @@ exports.getSpkAssetGeneralInfoQueryOptions = getSpkAssetGeneralInfoQueryOptions;
3819
4095
  exports.getSpkMarketsQueryOptions = getSpkMarketsQueryOptions;
3820
4096
  exports.getTokenOperationsQueryOptions = getTokenOperationsQueryOptions;
3821
4097
  exports.getTokenPriceQueryOptions = getTokenPriceQueryOptions;
4098
+ exports.getVisionPortfolioQueryOptions = getVisionPortfolioQueryOptions;
3822
4099
  exports.getWallet = getWallet;
3823
4100
  exports.hasWalletHiveAuthBroadcast = hasWalletHiveAuthBroadcast;
3824
4101
  exports.isEmptyDate = isEmptyDate;