@ecency/wallets 1.5.40 → 1.5.42

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/internal/scrypt-guard.ts","../../src/modules/wallets/enums/ecency-wallet-currency.ts","../../src/modules/wallets/enums/ecency-wallet-basic-tokens.ts","../../src/modules/wallets/queries/use-get-external-wallet-query.ts","../../src/modules/wallets/queries/use-seed-phrase.ts","../../src/modules/wallets/queries/get-token-price-query-options.ts","../../src/modules/wallets/utils/delay.ts","../../src/modules/wallets/utils/get-wallet.ts","../../src/modules/wallets/utils/mnemonic-to-seed-bip-39.ts","../../src/modules/wallets/utils/derive-hive-bip44-keys.ts","../../src/modules/wallets/utils/derive-hive-master-password-keys.ts","../../src/modules/wallets/utils/detect-hive-key-derivation.ts","../../src/modules/wallets/utils/sign-digest.ts","../../src/modules/wallets/utils/sign-transaction.ts","../../src/modules/wallets/utils/encrypt-memo.ts","../../src/modules/wallets/utils/decrypt-memo.ts","../../src/modules/wallets/utils/sign-external-transaction.ts","../../src/modules/wallets/utils/build-external-transaction.ts","../../src/modules/wallets/utils/get-bound-fetch.ts","../../src/modules/wallets/queries/use-hive-keys-query.ts","../../src/modules/wallets/queries/get-all-tokens-list-query-options.ts","../../src/modules/wallets/queries/use-get-account-wallet-list-query.ts","../../src/modules/wallets/queries/get-tokens-operations-query-options.ts","../../src/modules/wallets/queries/use-wallets-cache-query.ts","../../src/modules/wallets/mutations/use-wallet-create.ts","../../src/modules/wallets/mutations/private-api/index.ts","../../src/modules/wallets/mutations/private-api/create-account-with-wallets.ts","../../src/modules/wallets/mutations/private-api/check-wallet-existence.ts","../../src/modules/wallets/mutations/private-api/update-account-with-wallets.ts","../../src/modules/wallets/functions/get-keys-from-seed.ts","../../src/modules/wallets/mutations/use-import-wallet.ts","../../src/modules/wallets/mutations/save-wallet-information-to-metadata.ts","../../src/index.ts"],"names":["EcencyWalletCurrency","EcencyWalletBasicTokens","useQuery","ConfigManager","mnemonicToSeedSync","PrivateKey","Memo","CONFIG","buildBtcPsbt","queryOptions","getQueryClient","getAccountFullQueryOptions","getPortfolioQueryOptions","useQueryClient","useMutation","options","username"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * The scrypt bsv package writes the version string to a global symbol and\n * warns when that symbol is already populated. In environments that reload\n * modules (Next.js dev server, Storybook, etc.) the stale value triggers\n * repeated warnings. Clearing the cached handle before our modules touch bsv\n * keeps the console quiet without requiring downstream wrappers.\n *\n * Similarly, bitcore-lib and bitcore-lib-inquisition check for duplicate instances\n * using global variables and throw errors when detected. We clear these globals\n * to prevent false positives in module reloading scenarios.\n */\nconst globalLike = globalThis as Record<string, unknown> & {\n _scrypt_bsv?: unknown;\n __scryptBsvPreviousVersion?: unknown;\n _bitcore?: unknown;\n __bitcorePreviousVersion?: unknown;\n};\n\nif (typeof globalLike._scrypt_bsv !== \"undefined\") {\n if (typeof globalLike._scrypt_bsv === \"string\") {\n globalLike.__scryptBsvPreviousVersion = globalLike._scrypt_bsv;\n }\n\n try {\n delete globalLike._scrypt_bsv;\n } catch {\n globalLike._scrypt_bsv = undefined;\n }\n}\n\n// Clear bitcore-lib global to prevent \"more than one instance\" errors\nif (typeof globalLike._bitcore !== \"undefined\") {\n if (typeof globalLike._bitcore === \"object\") {\n globalLike.__bitcorePreviousVersion = globalLike._bitcore;\n }\n\n try {\n delete globalLike._bitcore;\n } catch {\n globalLike._bitcore = undefined;\n }\n}\n\nexport function rememberScryptBsvVersion() {\n if (typeof globalLike._scrypt_bsv === \"string\") {\n globalLike.__scryptBsvPreviousVersion = globalLike._scrypt_bsv;\n }\n\n // Also remember bitcore version if it exists\n if (typeof globalLike._bitcore === \"object\") {\n globalLike.__bitcorePreviousVersion = globalLike._bitcore;\n }\n}\n","export enum EcencyWalletCurrency {\n BTC = \"BTC\",\n ETH = \"ETH\",\n BNB = \"BNB\",\n APT = \"APT\",\n TON = \"TON\",\n TRON = \"TRX\",\n SOL = \"SOL\",\n // DOGE = \"doge\",\n // LTC = \"litecoin\",\n // ADA = \"cardano\",\n // STX = \"stacks\",\n // NEAR = \"near\",\n // EOS = \"eos\",\n // SUI = \"sui\",\n}\n","export enum EcencyWalletBasicTokens {\n Points = \"POINTS\",\n HivePower = \"HP\",\n Hive = \"HIVE\",\n HiveDollar = \"HBD\"\n}\n","import { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { ConfigManager } from \"@ecency/sdk\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nconst currencyChainMap: Record<EcencyWalletCurrency, string> = {\n [EcencyWalletCurrency.BTC]: \"btc\",\n [EcencyWalletCurrency.ETH]: \"eth\",\n [EcencyWalletCurrency.BNB]: \"bnb\",\n [EcencyWalletCurrency.SOL]: \"sol\",\n [EcencyWalletCurrency.TRON]: \"tron\",\n [EcencyWalletCurrency.TON]: \"ton\",\n [EcencyWalletCurrency.APT]: \"apt\",\n};\n\ninterface PrivateApiBalanceResponse {\n chain: string;\n balance: number | string;\n unit: string;\n raw?: unknown;\n nodeId?: string;\n}\n\nexport interface ExternalWalletBalance {\n chain: string;\n unit: string;\n raw?: unknown;\n nodeId?: string;\n /**\n * Balance represented as a BigInt for convenience.\n */\n balanceBigInt: bigint;\n /**\n * Balance returned as a string to preserve precision for UIs that cannot\n * handle bigint values directly.\n */\n balanceString: string;\n}\n\nfunction normalizeBalance(balance: number | string): string {\n if (typeof balance === \"number\") {\n if (!Number.isFinite(balance)) {\n throw new Error(\"Private API returned a non-finite numeric balance\");\n }\n\n return Math.trunc(balance).toString();\n }\n\n if (typeof balance === \"string\") {\n const trimmed = balance.trim();\n\n if (trimmed === \"\") {\n throw new Error(\"Private API returned an empty balance string\");\n }\n\n return trimmed;\n }\n\n throw new Error(\"Private API returned balance in an unexpected format\");\n}\n\nfunction parsePrivateApiBalance(\n result: unknown,\n expectedChain: string\n): ExternalWalletBalance {\n if (!result || typeof result !== \"object\") {\n throw new Error(\"Private API returned an unexpected response\");\n }\n\n const { chain, balance, unit, raw, nodeId } =\n result as PrivateApiBalanceResponse;\n\n if (typeof chain !== \"string\" || chain !== expectedChain) {\n throw new Error(\"Private API response chain did not match request\");\n }\n\n if (typeof unit !== \"string\" || unit.length === 0) {\n throw new Error(\"Private API response is missing unit information\");\n }\n\n if (balance === undefined || balance === null) {\n throw new Error(\"Private API response is missing balance information\");\n }\n\n const balanceString = normalizeBalance(balance);\n\n let balanceBigInt: bigint;\n\n try {\n balanceBigInt = BigInt(balanceString);\n } catch (error) {\n throw new Error(\"Private API returned a balance that is not an integer\");\n }\n\n return {\n chain,\n unit,\n raw,\n nodeId:\n typeof nodeId === \"string\" && nodeId.length > 0 ? nodeId : undefined,\n balanceBigInt,\n balanceString,\n };\n}\n\nexport function useGetExternalWalletBalanceQuery(\n currency: EcencyWalletCurrency,\n address: string\n) {\n return useQuery<ExternalWalletBalance>({\n queryKey: [\"ecency-wallets\", \"external-wallet-balance\", currency, address],\n queryFn: async () => {\n const chain = currencyChainMap[currency];\n\n if (!chain) {\n throw new Error(`Unsupported currency ${currency}`);\n }\n\n const baseUrl = `${ConfigManager.getValidatedBaseUrl()}/private-api/balance/${chain}/${encodeURIComponent(\n address\n )}`;\n\n let primaryResponse: Response | undefined;\n let primaryError: unknown;\n\n try {\n primaryResponse = await fetch(baseUrl);\n } catch (error) {\n primaryError = error;\n }\n\n let response = primaryResponse;\n\n if (!response || !response.ok) {\n const fallbackUrl = `${baseUrl}?provider=chainz`;\n let fallbackError: unknown;\n\n try {\n const fallbackResponse = await fetch(fallbackUrl);\n\n if (fallbackResponse.ok) {\n response = fallbackResponse;\n } else {\n fallbackError = new Error(\n `Fallback provider responded with status ${fallbackResponse.status}`\n );\n }\n } catch (error) {\n fallbackError = error;\n }\n\n if (!response || !response.ok) {\n const failureReasons: string[] = [];\n\n if (primaryError) {\n const message =\n primaryError instanceof Error\n ? primaryError.message\n : String(primaryError);\n failureReasons.push(`primary provider failed: ${message}`);\n } else if (primaryResponse && !primaryResponse.ok) {\n failureReasons.push(\n `primary provider status ${primaryResponse.status}`\n );\n }\n\n if (fallbackError) {\n const message =\n fallbackError instanceof Error\n ? fallbackError.message\n : String(fallbackError);\n failureReasons.push(`fallback provider failed: ${message}`);\n }\n\n if (failureReasons.length === 0) {\n failureReasons.push(\"unknown error\");\n }\n\n throw new Error(\n `Private API request failed (${failureReasons.join(\", \")})`\n );\n }\n }\n\n const result = (await response.json()) as unknown;\n\n return parsePrivateApiBalance(result, chain);\n },\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport bip39 from \"bip39\";\n\nexport function useSeedPhrase(username: string) {\n return useQuery({\n queryKey: [\"ecency-wallets\", \"seed\", username],\n queryFn: async () => bip39.generateMnemonic(128),\n // CRITICAL: Prevent seed regeneration - cache forever\n // Once generated, the seed must NEVER change to ensure consistency between:\n // 1. Displayed seed phrase\n // 2. Downloaded seed file\n // 3. Keys sent to API for account creation\n staleTime: Infinity,\n gcTime: Infinity,\n });\n}\n","import { ConfigManager } from \"@ecency/sdk\";\nimport { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { LRUCache } from \"lru-cache\";\n\nconst options = {\n max: 500,\n // how long to live in ms\n ttl: 1000 * 60 * 5,\n // return stale items before removing from cache?\n allowStale: false,\n updateAgeOnGet: false,\n updateAgeOnHas: false,\n};\n\nconst cache = new LRUCache(options);\nconst undefinedValue = Symbol(\"undefined\");\n\nconst cacheSet = (key: string, value: any) =>\n cache.set(key, value === undefined ? undefinedValue : value);\n\nconst cacheGet = (key: string) => {\n const v = cache.get(key);\n return v === undefinedValue ? undefined : v;\n};\n\ninterface MarketDataQuote {\n last_updated: string;\n percent_change: number;\n price: number;\n}\n\ninterface MarketDataLatestResponse {\n [token: string]: {\n quotes?: {\n usd?: MarketDataQuote;\n btc?: MarketDataQuote;\n [fiat: string]: MarketDataQuote | undefined;\n };\n };\n}\n\nconst CURRENCY_TO_TOKEN_MAP: Record<string, string> = {\n [EcencyWalletCurrency.BTC]: \"btc\",\n [EcencyWalletCurrency.ETH]: \"eth\",\n [EcencyWalletCurrency.SOL]: \"sol\",\n [EcencyWalletCurrency.TON]: \"ton\",\n [EcencyWalletCurrency.TRON]: \"trx\",\n [EcencyWalletCurrency.APT]: \"apt\",\n [EcencyWalletCurrency.BNB]: \"bnb\",\n HBD: \"hbd\",\n HIVE: \"hive\",\n};\n\nconst MARKET_DATA_CACHE_KEY = \"market-data/latest\";\n\nconst normalizeCurrencyToToken = (currency: string) => {\n const upperCased = currency.toUpperCase();\n return CURRENCY_TO_TOKEN_MAP[upperCased] ?? currency.toLowerCase();\n};\n\nexport function getTokenPriceQueryOptions(currency?: string) {\n return queryOptions({\n queryKey: [\"ecency-wallets\", \"market-data\", currency],\n queryFn: async () => {\n if (!currency) {\n throw new Error(\n \"[SDK][Wallets][MarketData] – currency wasn`t provided\"\n );\n }\n\n const token = normalizeCurrencyToToken(currency);\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n\n let marketData = cacheGet(MARKET_DATA_CACHE_KEY) as\n | MarketDataLatestResponse\n | undefined;\n\n if (!marketData) {\n const httpResponse = await fetch(\n `${baseUrl}/private-api/market-data/latest`,\n {\n method: \"GET\",\n }\n );\n\n if (!httpResponse.ok) {\n throw new Error(\n `[SDK][Wallets][MarketData] – failed to fetch latest market data (${httpResponse.status})`\n );\n }\n\n const data = (await httpResponse.json()) as MarketDataLatestResponse;\n cacheSet(MARKET_DATA_CACHE_KEY, data);\n marketData = data;\n }\n\n const tokenData = marketData[token];\n\n if (!tokenData) {\n throw new Error(\n `[SDK][Wallets][MarketData] – missing market data for token: ${token}`\n );\n }\n\n const usdQuote = tokenData.quotes?.usd;\n\n if (!usdQuote) {\n throw new Error(\n `[SDK][Wallets][MarketData] – missing USD quote for token: ${token}`\n );\n }\n\n return Number(usdQuote.price);\n },\n enabled: !!currency,\n });\n}\n","export function delay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { BtcWallet } from \"@okxweb3/coin-bitcoin\";\nimport { EthWallet } from \"@okxweb3/coin-ethereum\";\nimport { TrxWallet } from \"@okxweb3/coin-tron\";\nimport { TonWallet } from \"@okxweb3/coin-ton\";\nimport { SolWallet } from \"@okxweb3/coin-solana\";\nimport { AptosWallet } from \"@okxweb3/coin-aptos\";\nimport { BaseWallet } from \"@okxweb3/coin-base\";\nimport { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\n\nexport function getWallet(\n currency: EcencyWalletCurrency\n): BaseWallet | undefined {\n switch (currency) {\n case EcencyWalletCurrency.BTC:\n return new BtcWallet();\n case EcencyWalletCurrency.ETH:\n case EcencyWalletCurrency.BNB:\n return new EthWallet();\n\n case EcencyWalletCurrency.TRON:\n return new TrxWallet();\n\n case EcencyWalletCurrency.TON:\n return new TonWallet();\n\n case EcencyWalletCurrency.SOL:\n return new SolWallet();\n\n case EcencyWalletCurrency.APT:\n return new AptosWallet();\n\n default:\n return undefined;\n }\n}\n","import { mnemonicToSeedSync } from \"bip39\";\n\nexport function mnemonicToSeedBip39(value: string) {\n return mnemonicToSeedSync(value).toString(\"hex\");\n}\n","import { mnemonicToSeedSync } from \"bip39\";\nimport { bip32 } from \"@okxweb3/crypto-lib\";\nimport { PrivateKey } from \"@hiveio/dhive\";\n\nexport type HiveRole = \"owner\" | \"active\" | \"posting\" | \"memo\";\n\nconst ROLE_INDEX: Record<HiveRole, number> = {\n owner: 0,\n active: 1,\n posting: 2,\n memo: 3,\n};\n\nexport function deriveHiveKey(\n mnemonic: string,\n role: HiveRole,\n accountIndex = 0\n) {\n const seed = mnemonicToSeedSync(mnemonic);\n const master = bip32.fromSeed(seed);\n const path = `m/44'/3054'/${accountIndex}'/0'/${ROLE_INDEX[role]}'`;\n const child = master.derivePath(path);\n if (!child.privateKey) {\n throw new Error(\"[Ecency][Wallets] - hive key derivation failed\");\n }\n const pk = PrivateKey.from(child.privateKey);\n return {\n privateKey: pk.toString(),\n publicKey: pk.createPublic().toString(),\n } as const;\n}\n\nexport function deriveHiveKeys(\n mnemonic: string,\n accountIndex = 0\n) {\n const owner = deriveHiveKey(mnemonic, \"owner\", accountIndex);\n const active = deriveHiveKey(mnemonic, \"active\", accountIndex);\n const posting = deriveHiveKey(mnemonic, \"posting\", accountIndex);\n const memo = deriveHiveKey(mnemonic, \"memo\", accountIndex);\n return {\n owner: owner.privateKey,\n active: active.privateKey,\n posting: posting.privateKey,\n memo: memo.privateKey,\n ownerPubkey: owner.publicKey,\n activePubkey: active.publicKey,\n postingPubkey: posting.publicKey,\n memoPubkey: memo.publicKey,\n } as const;\n}\n\n","import { PrivateKey } from \"@hiveio/dhive\";\nimport type { HiveRole } from \"./derive-hive-bip44-keys\";\n\nexport function deriveHiveMasterPasswordKey(\n username: string,\n masterPassword: string,\n role: HiveRole\n) {\n const pk = PrivateKey.fromLogin(username, masterPassword, role);\n return {\n privateKey: pk.toString(),\n publicKey: pk.createPublic().toString(),\n } as const;\n}\n\nexport function deriveHiveMasterPasswordKeys(\n username: string,\n masterPassword: string\n) {\n const owner = deriveHiveMasterPasswordKey(username, masterPassword, \"owner\");\n const active = deriveHiveMasterPasswordKey(username, masterPassword, \"active\");\n const posting = deriveHiveMasterPasswordKey(\n username,\n masterPassword,\n \"posting\"\n );\n const memo = deriveHiveMasterPasswordKey(username, masterPassword, \"memo\");\n return {\n owner: owner.privateKey,\n active: active.privateKey,\n posting: posting.privateKey,\n memo: memo.privateKey,\n ownerPubkey: owner.publicKey,\n activePubkey: active.publicKey,\n postingPubkey: posting.publicKey,\n memoPubkey: memo.publicKey,\n } as const;\n}\n","import { CONFIG, FullAccount, getAccountFullQueryOptions } from \"@ecency/sdk\";\nimport { PrivateKey } from \"@hiveio/dhive\";\nimport { deriveHiveKeys } from \"./derive-hive-bip44-keys\";\n\nexport type HiveKeyDerivation = \"bip44\" | \"master-password\" | \"unknown\";\n\nexport async function detectHiveKeyDerivation(\n username: string,\n seed: string,\n type: \"active\" | \"owner\" = \"active\"\n): Promise<HiveKeyDerivation> {\n const uname = username.trim().toLowerCase();\n\n // ensure we actually have data\n const account = (await CONFIG.queryClient.fetchQuery(\n getAccountFullQueryOptions(uname)\n )) as FullAccount;\n\n // pick the right authority based on `type`\n const auth = account[type];\n\n // --- BIP44 check (match selected authority) ---\n const bip44 = deriveHiveKeys(seed);\n const bip44Pub =\n type === \"owner\" ? bip44.ownerPubkey : bip44.activePubkey;\n\n const matchBip44 = auth.key_auths.some(([pub]) => String(pub) === bip44Pub);\n if (matchBip44) return \"bip44\";\n\n // --- Master password (legacy) check (match selected authority) ---\n const legacyPub = PrivateKey.fromLogin(uname, seed, type)\n .createPublic()\n .toString();\n\n const matchLegacy = auth.key_auths.some(([pub]) => String(pub) === legacyPub);\n if (matchLegacy) return \"master-password\";\n\n return \"unknown\";\n}\n","import { PrivateKey } from \"@hiveio/dhive\";\n\n/**\n * Sign a digest using the provided private key.\n * @param digest Digest as a Buffer or hex string.\n * @param privateKey Private key in WIF format.\n * @returns Hex encoded signature string.\n */\nexport function signDigest(digest: Buffer | string, privateKey: string): string {\n const key = PrivateKey.fromString(privateKey);\n const buf = typeof digest === \"string\" ? Buffer.from(digest, \"hex\") : digest;\n return key.sign(buf).toString();\n}\n\n","import { PrivateKey, Client } from \"@hiveio/dhive\";\nimport type {\n Transaction,\n SignedTransaction,\n TransactionConfirmation,\n} from \"@hiveio/dhive/lib/chain/transaction\";\nimport { cryptoUtils } from \"@hiveio/dhive/lib/crypto\";\n\n/**\n * Sign a transaction with the given private key.\n * Optionally a custom chain id can be provided.\n *\n * @param tx Transaction to sign.\n * @param privateKey Private key in WIF format.\n * @param chainId Optional chain id as a hex string.\n * @returns Signed transaction including the signature.\n */\nexport function signTx(\n tx: Transaction,\n privateKey: string,\n chainId?: string\n): SignedTransaction {\n const key = PrivateKey.fromString(privateKey);\n const chain = chainId ? Buffer.from(chainId, \"hex\") : undefined;\n return cryptoUtils.signTransaction(tx, key, chain);\n}\n\n/**\n * Sign a transaction and broadcast it to the network.\n * Optionally a custom chain id can be provided.\n *\n * @param client Hive client instance used for broadcasting.\n * @param tx Transaction to sign.\n * @param privateKey Private key in WIF format.\n * @param chainId Optional chain id as a hex string.\n * @returns Broadcast confirmation.\n */\nexport async function signTxAndBroadcast(\n client: Client,\n tx: Transaction,\n privateKey: string,\n chainId?: string\n): Promise<TransactionConfirmation> {\n const signed = signTx(tx, privateKey, chainId);\n return client.broadcast.send(signed);\n}\n\n","import { PrivateKey } from \"@hiveio/dhive\";\nimport type { Client } from \"@hiveio/dhive\";\nimport { Memo } from \"@hiveio/dhive/lib/memo\";\n\n/**\n * Encrypt a memo using explicit keys.\n * @param privateKey Sender's private memo key in WIF format.\n * @param publicKey Recipient's public memo key.\n * @param memo Memo text to encrypt.\n */\nexport function encryptMemoWithKeys(\n privateKey: string,\n publicKey: string,\n memo: string\n): string {\n return Memo.encode(PrivateKey.fromString(privateKey), publicKey, memo);\n}\n\n/**\n * Encrypt a memo by looking up the recipient's memo key from the blockchain.\n * @param client Hive client instance used to fetch account information.\n * @param fromPrivateKey Sender's private memo key.\n * @param toAccount Recipient account name.\n * @param memo Memo text to encrypt.\n */\nexport async function encryptMemoWithAccounts(\n client: Client,\n fromPrivateKey: string,\n toAccount: string,\n memo: string\n): Promise<string> {\n const [account] = await client.database.getAccounts([toAccount]);\n if (!account) {\n throw new Error(\"Account not found\");\n }\n return Memo.encode(PrivateKey.fromString(fromPrivateKey), account.memo_key, memo);\n}\n\n","import { PrivateKey } from \"@hiveio/dhive\";\nimport { Memo } from \"@hiveio/dhive/lib/memo\";\n\n/**\n * Decrypt an encrypted memo using the recipient's private key.\n * @param privateKey Private memo key in WIF format.\n * @param memo Encrypted memo string.\n */\nexport function decryptMemoWithKeys(privateKey: string, memo: string): string {\n return Memo.decode(PrivateKey.fromString(privateKey), memo);\n}\n\n/**\n * Decrypt a memo using account information.\n * This is an alias of {@link decryptMemoWithKeys} and provided for\n * API symmetry with {@link encryptMemoWithAccounts}.\n */\nexport const decryptMemoWithAccounts = decryptMemoWithKeys;\n\n","import { CONFIG } from \"@ecency/sdk\";\nimport { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { getWallet } from \"./get-wallet\";\nimport type { SignTxParams } from \"@okxweb3/coin-base\";\n\n/**\n * Sign a transaction for an external chain supported by okxweb3 wallets.\n *\n * @param currency Chain identifier.\n * @param params Signing parameters accepted by okxweb3 wallets.\n */\nexport async function signExternalTx(\n currency: EcencyWalletCurrency,\n params: SignTxParams\n) {\n const wallet = getWallet(currency);\n if (!wallet) throw new Error(\"Unsupported currency\");\n return wallet.signTransaction(params as any);\n}\n\n/**\n * Sign and broadcast a transaction for an external chain. The transaction is\n * signed locally and then sent to a public RPC endpoint for broadcasting.\n *\n * @param currency Chain identifier.\n * @param params Signing parameters accepted by okxweb3 wallets.\n * @returns RPC response or broadcasted transaction hash.\n */\nexport async function signExternalTxAndBroadcast(\n currency: EcencyWalletCurrency,\n params: SignTxParams\n) {\n const signed = await signExternalTx(currency, params);\n\n switch (currency) {\n case EcencyWalletCurrency.BTC: {\n const res = await fetch(\"https://mempool.space/api/tx\", {\n method: \"POST\",\n body: signed as any,\n });\n if (!res.ok) throw new Error(\"Broadcast failed\");\n return res.text();\n }\n case EcencyWalletCurrency.ETH:\n case EcencyWalletCurrency.BNB: {\n const rpcUrl =\n currency === EcencyWalletCurrency.ETH\n ? \"https://rpc.ankr.com/eth\"\n : \"https://bsc-dataseed.binance.org\";\n const res = await fetch(rpcUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"eth_sendRawTransaction\",\n params: [signed],\n }),\n });\n const json = await res.json();\n if (json.error) throw new Error(json.error.message);\n return json.result;\n }\n case EcencyWalletCurrency.SOL: {\n const res = await fetch(\n `https://rpc.helius.xyz/?api-key=${CONFIG.heliusApiKey}`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"sendTransaction\",\n params: [signed],\n }),\n }\n );\n const json = await res.json();\n if (json.error) throw new Error(json.error.message);\n return json.result;\n }\n case EcencyWalletCurrency.TRON: {\n const res = await fetch(\n \"https://api.trongrid.io/wallet/broadcasttransaction\",\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: typeof signed === \"string\" ? signed : JSON.stringify(signed),\n }\n );\n const json = await res.json();\n if (json.result === false) throw new Error(json.message);\n return json.txid || json.result;\n }\n case EcencyWalletCurrency.TON: {\n const res = await fetch(\"https://toncenter.com/api/v2/sendTransaction\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ boc: signed }),\n });\n const json = await res.json();\n if (json.error) throw new Error(json.error.message || json.result);\n return json.result;\n }\n case EcencyWalletCurrency.APT: {\n const res = await fetch(\n \"https://fullnode.mainnet.aptoslabs.com/v1/transactions\",\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: typeof signed === \"string\" ? signed : JSON.stringify(signed),\n }\n );\n if (!res.ok) throw new Error(\"Broadcast failed\");\n return res.json();\n }\n default:\n throw new Error(\"Unsupported currency\");\n }\n}\n\n","import { buildPsbt as buildBtcPsbt } from \"@okxweb3/coin-bitcoin\";\nimport type { utxoTx } from \"@okxweb3/coin-bitcoin/dist/type\";\nimport type { Network as BtcNetwork } from \"@okxweb3/coin-bitcoin/dist/bitcoinjs-lib\";\nimport type { EthTxParams } from \"@okxweb3/coin-ethereum/dist/EthWallet\";\nimport type { SolSignParam } from \"@okxweb3/coin-solana/dist/SolWallet\";\nimport type { TrxSignParam } from \"@okxweb3/coin-tron/dist/TrxWallet\";\nimport type { TxData as TonTxData } from \"@okxweb3/coin-ton/dist/api/types\";\nimport type { AptosParam } from \"@okxweb3/coin-aptos/dist/AptosWallet\";\nimport { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\n\n/**\n * Union type covering all chain-specific build parameters.\n */\nexport type ExternalTxParams =\n | utxoTx\n | EthTxParams\n | SolSignParam\n | TrxSignParam\n | TonTxData\n | AptosParam;\n\n/**\n * Build a Bitcoin PSBT from UTXO inputs and desired outputs.\n *\n * @param tx Transaction description accepted by @okxweb3/coin-bitcoin.\n * @returns Hex encoded PSBT ready for signing.\n */\nexport function buildPsbt(\n tx: utxoTx,\n network?: BtcNetwork,\n maximumFeeRate?: number\n) {\n return buildBtcPsbt(tx, network, maximumFeeRate);\n}\n\n/**\n * Helper returning raw Ethereum transaction data ready for signing.\n *\n * The returned object can be passed directly to signExternalTx.\n */\nexport function buildEthTx(data: EthTxParams): EthTxParams {\n return data;\n}\n\n/**\n * Helper returning Solana transaction params used by signExternalTx.\n */\nexport function buildSolTx(data: SolSignParam): SolSignParam {\n return data;\n}\n\n/**\n * Helper returning Tron transaction params used by signExternalTx.\n */\nexport function buildTronTx(data: TrxSignParam): TrxSignParam {\n return data;\n}\n\n/**\n * Helper returning TON transaction params used by signExternalTx.\n */\nexport function buildTonTx(data: TonTxData): TonTxData {\n return data;\n}\n\n/**\n * Helper returning Aptos transaction params used by signExternalTx.\n */\nexport function buildAptTx(data: AptosParam): AptosParam {\n return data;\n}\n\n/**\n * Build a transaction for an external chain supported by okxweb3 wallets.\n *\n * @param currency Chain identifier.\n * @param tx Chain specific transaction description.\n */\nexport function buildExternalTx(\n currency: EcencyWalletCurrency,\n tx: ExternalTxParams\n) {\n switch (currency) {\n case EcencyWalletCurrency.BTC:\n return buildPsbt(tx as utxoTx);\n case EcencyWalletCurrency.ETH:\n case EcencyWalletCurrency.BNB:\n return buildEthTx(tx as EthTxParams);\n case EcencyWalletCurrency.SOL:\n return buildSolTx(tx as SolSignParam);\n case EcencyWalletCurrency.TRON:\n return buildTronTx(tx as TrxSignParam);\n case EcencyWalletCurrency.TON:\n return buildTonTx(tx as TonTxData);\n case EcencyWalletCurrency.APT:\n return buildAptTx(tx as AptosParam);\n default:\n throw new Error(\"Unsupported currency\");\n }\n}\n","let cachedFetch: typeof globalThis.fetch | undefined;\n\nexport function getBoundFetch() {\n if (!cachedFetch) {\n if (typeof globalThis.fetch !== \"function\") {\n throw new Error(\"[Ecency][Wallets] - global fetch is not available\");\n }\n\n cachedFetch = globalThis.fetch.bind(globalThis);\n }\n\n return cachedFetch;\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useSeedPhrase } from \"./use-seed-phrase\";\nimport { EcencyHiveKeys } from \"@/modules/wallets/types\";\nimport {\n deriveHiveKeys,\n deriveHiveMasterPasswordKeys,\n detectHiveKeyDerivation,\n} from \"@/modules/wallets/utils\";\n\nexport function useHiveKeysQuery(username: string) {\n const { data: seed } = useSeedPhrase(username);\n\n return useQuery({\n queryKey: [\"ecencу-wallets\", \"hive-keys\", username, seed],\n staleTime: Infinity,\n queryFn: async () => {\n if (!seed) {\n throw new Error(\"[Ecency][Wallets] - no seed to create Hive account\");\n }\n\n const method = await detectHiveKeyDerivation(username, seed).catch(\n () => \"bip44\"\n );\n\n const keys =\n method === \"master-password\"\n ? deriveHiveMasterPasswordKeys(username, seed)\n : deriveHiveKeys(seed);\n\n return {\n username,\n ...keys,\n } as EcencyHiveKeys;\n },\n });\n}\n","import {\n getHiveEngineTokensBalancesQueryOptions,\n getHiveEngineTokensMetadataQueryOptions,\n} from \"@/modules/assets\";\nimport {\n HiveEngineTokenBalance,\n HiveEngineTokenMetadataResponse,\n} from \"@/modules/assets/hive-engine/types\";\nimport { getQueryClient } from \"@ecency/sdk\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { EcencyWalletBasicTokens, EcencyWalletCurrency } from \"../enums\";\n\nfunction createFallbackTokenMetadata(symbol: string): HiveEngineTokenMetadataResponse {\n return {\n issuer: \"\",\n symbol,\n name: symbol,\n metadata: \"{}\",\n precision: 0,\n maxSupply: \"0\",\n supply: \"0\",\n circulatingSupply: \"0\",\n stakingEnabled: false,\n unstakingCooldown: 0,\n delegationEnabled: false,\n undelegationCooldown: 0,\n numberTransactions: 0,\n totalStaked: \"0\",\n };\n}\n\nasync function getLayer2TokensMetadata(username?: string) {\n if (!username) {\n return [] as HiveEngineTokenMetadataResponse[];\n }\n\n let balances: HiveEngineTokenBalance[] = [];\n\n try {\n balances = await getQueryClient().fetchQuery(\n getHiveEngineTokensBalancesQueryOptions(username)\n );\n } catch {\n balances = [];\n }\n\n const uniqueSymbols = Array.from(\n new Set(\n balances\n .map((balance) => balance.symbol)\n .filter((symbol): symbol is string => Boolean(symbol))\n )\n );\n\n if (uniqueSymbols.length === 0) {\n return [] as HiveEngineTokenMetadataResponse[];\n }\n\n let metadataList: HiveEngineTokenMetadataResponse[] = [];\n\n try {\n metadataList = await getQueryClient().fetchQuery(\n getHiveEngineTokensMetadataQueryOptions(uniqueSymbols)\n );\n } catch {\n metadataList = [];\n }\n\n const metadataBySymbol = new Map(\n metadataList.map((token) => [token.symbol, token])\n );\n\n return uniqueSymbols.map(\n (symbol) => metadataBySymbol.get(symbol) ?? createFallbackTokenMetadata(symbol)\n );\n}\n\nexport function getAllTokensListQueryOptions(username?: string) {\n return queryOptions({\n queryKey: [\"ecency-wallets\", \"all-tokens-list\", username ?? null],\n queryFn: async () => {\n return {\n basic: [\n EcencyWalletBasicTokens.Points,\n EcencyWalletBasicTokens.Hive,\n EcencyWalletBasicTokens.HivePower,\n EcencyWalletBasicTokens.HiveDollar,\n ],\n external: Object.values(EcencyWalletCurrency),\n spk: [\"SPK\", \"LARYNX\", \"LP\"],\n layer2: await getLayer2TokensMetadata(username),\n };\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { EcencyWalletBasicTokens } from \"../enums\";\nimport {\n AccountProfile,\n FullAccount,\n getAccountFullQueryOptions,\n getQueryClient,\n getPortfolioQueryOptions,\n type PortfolioResponse,\n type PortfolioWalletItem,\n} from \"@ecency/sdk\";\n\ntype ProfileTokens = AccountProfile[\"tokens\"];\ntype ProfileToken = NonNullable<ProfileTokens>[number];\n\nfunction normalizeAccountTokens(tokens: ProfileTokens): ProfileToken[] {\n if (Array.isArray(tokens)) {\n return tokens.filter(Boolean) as ProfileToken[];\n }\n\n if (tokens && typeof tokens === \"object\") {\n return Object.values(tokens).flatMap((value) =>\n Array.isArray(value) ? (value.filter(Boolean) as ProfileToken[]) : []\n );\n }\n\n return [];\n}\n\nconst BASIC_TOKENS: string[] = [\n EcencyWalletBasicTokens.Points,\n EcencyWalletBasicTokens.Hive,\n EcencyWalletBasicTokens.HivePower,\n EcencyWalletBasicTokens.HiveDollar,\n];\n\nexport function getAccountWalletListQueryOptions(username: string, currency: string = \"usd\") {\n return queryOptions({\n queryKey: [\"ecency-wallets\", \"list\", username, currency],\n enabled: !!username,\n queryFn: async () => {\n const portfolioQuery = getPortfolioQueryOptions(username, currency, true);\n const queryClient = getQueryClient();\n const accountQuery = getAccountFullQueryOptions(username);\n\n let account: FullAccount | undefined;\n\n try {\n account = await queryClient.fetchQuery(accountQuery);\n } catch {\n // Best effort; fall back to defaults if account metadata is not available.\n }\n\n const tokenVisibility = new Map<string, boolean>();\n\n const accountTokens = normalizeAccountTokens(account?.profile?.tokens);\n\n accountTokens.forEach((token: ProfileToken) => {\n const symbol = token.symbol?.toUpperCase?.();\n\n if (!symbol) {\n return;\n }\n\n const showValue = (token as any)?.meta?.show;\n\n if (typeof showValue === \"boolean\") {\n tokenVisibility.set(symbol, showValue);\n }\n });\n\n const isTokenVisible = (symbol?: string) => {\n const normalized = symbol?.toUpperCase();\n\n if (!normalized) {\n return false;\n }\n\n if (BASIC_TOKENS.includes(normalized)) {\n return true;\n }\n\n return tokenVisibility.get(normalized) === true;\n };\n\n try {\n const portfolio: PortfolioResponse = await queryClient.fetchQuery(portfolioQuery);\n const tokensFromPortfolio: string[] = portfolio.wallets.map(\n (asset: PortfolioWalletItem) => asset.symbol\n );\n\n if (tokensFromPortfolio.length > 0) {\n const visibleTokens = tokensFromPortfolio\n .map((token: string) => token?.toUpperCase?.())\n .filter((token: string | undefined): token is string => Boolean(token))\n .filter(isTokenVisible);\n\n if (visibleTokens.length > 0) {\n return Array.from(new Set(visibleTokens));\n }\n }\n } catch {\n // Fallback to legacy behaviour when the portfolio endpoint is not accessible.\n }\n\n if (accountTokens.length > 0) {\n const list = [\n ...BASIC_TOKENS,\n ...accountTokens\n .map((token: ProfileToken) => token.symbol)\n .filter(isTokenVisible),\n ];\n\n return Array.from(new Set(list).values());\n }\n\n return [...BASIC_TOKENS];\n },\n });\n}\n","import { AssetOperation } from \"@/modules/assets\";\nimport {\n getQueryClient,\n getPortfolioQueryOptions,\n type PortfolioResponse,\n type PortfolioWalletItem,\n} from \"@ecency/sdk\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getTokenOperationsQueryOptions(\n token: string,\n username: string,\n isForOwner = false,\n currency: string = \"usd\"\n) {\n return queryOptions({\n queryKey: [\"wallets\", \"token-operations\", token, username, isForOwner, currency],\n queryFn: async () => {\n const queryClient = getQueryClient();\n const normalizedToken = token.toUpperCase();\n\n if (!username || !isForOwner) {\n return [] as AssetOperation[];\n }\n\n try {\n const portfolio: PortfolioResponse = await queryClient.fetchQuery(\n getPortfolioQueryOptions(username, currency, true)\n );\n const assetEntry = portfolio.wallets.find(\n (assetItem: PortfolioWalletItem) => assetItem.symbol.toUpperCase() === normalizedToken\n );\n\n if (!assetEntry) {\n return [] as AssetOperation[];\n }\n\n // Extract action IDs and map to AssetOperation enums\n const rawActions: Array<{ id: string; [key: string]: unknown }> = assetEntry.actions ?? [];\n const operations: AssetOperation[] = rawActions\n .map((action: { id: string; [key: string]: unknown } | string) => {\n // Extract the id field from action object\n if (typeof action === \"string\") return action;\n if (action && typeof action === \"object\") {\n const record = action as Record<string, unknown>;\n return (record.id ?? record.code ?? record.name ?? record.action) as string | undefined;\n }\n return undefined;\n })\n .filter((id: string | undefined): id is string => Boolean(id))\n .map((id: string) => {\n // Normalize: underscores to hyphens, lowercase\n const canonical = id.trim().toLowerCase().replace(/[\\s_]+/g, \"-\");\n\n // Primary mapping: API action IDs to AssetOperation enum values\n const aliasMap: Record<string, AssetOperation> = {\n // Common operations\n \"transfer\": AssetOperation.Transfer,\n \"ecency-point-transfer\": AssetOperation.Transfer,\n \"spkcc-spk-send\": AssetOperation.Transfer,\n\n // Savings operations\n \"transfer-to-savings\": AssetOperation.TransferToSavings,\n \"transfer-savings\": AssetOperation.TransferToSavings,\n \"savings-transfer\": AssetOperation.TransferToSavings,\n \"withdraw-from-savings\": AssetOperation.WithdrawFromSavings,\n \"transfer-from-savings\": AssetOperation.WithdrawFromSavings,\n \"withdraw-savings\": AssetOperation.WithdrawFromSavings,\n \"savings-withdraw\": AssetOperation.WithdrawFromSavings,\n\n // Vesting/Power operations\n \"transfer-to-vesting\": AssetOperation.PowerUp,\n \"powerup\": AssetOperation.PowerUp,\n \"power-up\": AssetOperation.PowerUp,\n \"withdraw-vesting\": AssetOperation.PowerDown,\n \"power-down\": AssetOperation.PowerDown,\n \"powerdown\": AssetOperation.PowerDown,\n\n // Delegation\n \"delegate\": AssetOperation.Delegate,\n \"delegate-vesting-shares\": AssetOperation.Delegate,\n \"hp-delegate\": AssetOperation.Delegate,\n \"delegate-hp\": AssetOperation.Delegate,\n \"delegate-power\": AssetOperation.Delegate,\n \"undelegate\": AssetOperation.Undelegate,\n \"undelegate-power\": AssetOperation.Undelegate,\n \"undelegate-token\": AssetOperation.Undelegate,\n\n // Staking (Layer 2)\n \"stake\": AssetOperation.Stake,\n \"stake-token\": AssetOperation.Stake,\n \"stake-power\": AssetOperation.Stake,\n \"unstake\": AssetOperation.Unstake,\n \"unstake-token\": AssetOperation.Unstake,\n \"unstake-power\": AssetOperation.Unstake,\n\n // Swap/Convert\n \"swap\": AssetOperation.Swap,\n \"swap-token\": AssetOperation.Swap,\n \"swap-tokens\": AssetOperation.Swap,\n \"convert\": AssetOperation.Convert,\n\n // Points operations\n \"promote\": AssetOperation.Promote,\n \"promote-post\": AssetOperation.Promote,\n \"promote-entry\": AssetOperation.Promote,\n \"boost\": AssetOperation.Promote,\n \"gift\": AssetOperation.Gift,\n \"gift-points\": AssetOperation.Gift,\n \"points-gift\": AssetOperation.Gift,\n \"claim\": AssetOperation.Claim,\n \"claim-rewards\": AssetOperation.Claim,\n \"claim-points\": AssetOperation.Claim,\n \"buy\": AssetOperation.Buy,\n \"buy-points\": AssetOperation.Buy,\n\n // Other\n \"claim-interest\": AssetOperation.ClaimInterest,\n \"withdraw-routes\": AssetOperation.WithdrawRoutes,\n \"withdrawroutes\": AssetOperation.WithdrawRoutes,\n \"lock\": AssetOperation.LockLiquidity,\n \"lock-liquidity\": AssetOperation.LockLiquidity,\n \"lock-liq\": AssetOperation.LockLiquidity,\n };\n\n // Check alias map first (primary method)\n const mapped = aliasMap[canonical];\n if (mapped) return mapped;\n\n // Fallback: try direct enum value match (for exact matches like \"transfer\", \"promote\")\n const directMatch = Object.values(AssetOperation).find(\n (op) => op.toLowerCase() === canonical\n );\n return directMatch;\n })\n .filter((op: AssetOperation | undefined): op is AssetOperation => Boolean(op))\n // Remove duplicates - API may return multiple actions that map to same operation\n .filter((op: AssetOperation, index: number, self: AssetOperation[]) => self.indexOf(op) === index);\n\n const isHiveOrHbd = [\"HIVE\", \"HBD\"].includes(normalizedToken);\n // Check if there's a non-zero savings balance\n const rawToken = assetEntry as any;\n const hasSavings = Number(rawToken.savings ?? 0) > 0;\n\n if (\n isHiveOrHbd &&\n !hasSavings\n ) {\n return operations.filter(\n (operation) => operation !== AssetOperation.WithdrawFromSavings\n );\n }\n\n return operations;\n } catch {\n return [];\n }\n },\n });\n}\n","import { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { EcencyWalletCurrency } from \"../enums\";\nimport { EcencyTokenMetadata } from \"../types\";\n\nexport function useWalletsCacheQuery(username?: string) {\n const queryClient = useQueryClient();\n const queryKey = [\"ecency-wallets\", \"wallets\", username] as const;\n\n const getCachedWallets = () =>\n queryClient.getQueryData<Map<EcencyWalletCurrency, EcencyTokenMetadata>>(queryKey);\n\n const createEmptyWalletMap = () =>\n new Map<EcencyWalletCurrency, EcencyTokenMetadata>();\n\n return useQuery<Map<EcencyWalletCurrency, EcencyTokenMetadata>>({\n queryKey,\n enabled: Boolean(username),\n initialData: () => getCachedWallets() ?? createEmptyWalletMap(),\n queryFn: async () => getCachedWallets() ?? createEmptyWalletMap(),\n staleTime: Infinity,\n });\n}\n","import { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { useSeedPhrase } from \"@/modules/wallets/queries\";\nimport { EcencyTokenMetadata } from \"@/modules/wallets/types\";\nimport { delay, getWallet } from \"@/modules/wallets/utils\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\n\nconst PATHS = {\n [EcencyWalletCurrency.BTC]: \"m/44'/0'/0'/0/0\", // Bitcoin (BIP44)\n [EcencyWalletCurrency.ETH]: \"m/44'/60'/0'/0/0\", // Ethereum (BIP44)\n [EcencyWalletCurrency.BNB]: \"m/44'/60'/0'/0/0\", // BNB Smart Chain (BIP44)\n [EcencyWalletCurrency.SOL]: \"m/44'/501'/0'/0'\", // Solana (BIP44)\n [EcencyWalletCurrency.TON]: \"m/44'/607'/0'\", // TON (BIP44)\n [EcencyWalletCurrency.TRON]: \"m/44'/195'/0'/0/0\", // Tron (BIP44)\n [EcencyWalletCurrency.APT]: \"m/44'/637'/0'/0'/0'\", // Aptos (BIP44)\n} as const;\n\n/**\n * Uses for creating wallet logically in the application\n *\n * Keep attention: this mutation doesn't save wallet to somewhere in a server\n */\nexport function useWalletCreate(\n username: string,\n currency: EcencyWalletCurrency,\n importedSeed?: string\n) {\n const { data: generatedMnemonic } = useSeedPhrase(username);\n const queryClient = useQueryClient();\n\n const createWallet = useMutation({\n mutationKey: [\"ecency-wallets\", \"create-wallet\", username, currency],\n mutationFn: async () => {\n const mnemonic = importedSeed || generatedMnemonic;\n if (!mnemonic) {\n throw new Error(\"[Ecency][Wallets] - No seed to create a wallet\");\n }\n\n const wallet = getWallet(currency);\n const privateKey = await wallet?.getDerivedPrivateKey({\n mnemonic,\n hdPath: PATHS[currency],\n });\n await delay(1000);\n const address = (await wallet?.getNewAddress({\n privateKey,\n })) as { address: string; publicKey: string };\n return {\n privateKey,\n address: address.address,\n publicKey: address.publicKey,\n username,\n currency,\n } as EcencyTokenMetadata;\n },\n onSuccess: (info) => {\n queryClient.setQueryData<Map<EcencyWalletCurrency, EcencyTokenMetadata>>(\n [\"ecency-wallets\", \"wallets\", info.username],\n (data) =>\n new Map(data ? Array.from(data.entries()) : []).set(\n info.currency as EcencyWalletCurrency,\n info\n )\n );\n },\n });\n const importWallet = () => {};\n\n return {\n createWallet,\n importWallet,\n };\n}\n","export * from \"./create-account-with-wallets\";\nexport * from \"./check-wallet-existence\";\nexport * from \"./update-account-with-wallets\";\n","import { ConfigManager } from \"@ecency/sdk\";\nimport { useHiveKeysQuery, useWalletsCacheQuery } from \"@/modules/wallets/queries\";\nimport { getBoundFetch } from \"@/modules/wallets/utils\";\nimport { useMutation } from \"@tanstack/react-query\";\n\ninterface Payload {\n currency: string;\n address: string;\n}\n\nexport function useCreateAccountWithWallets(username: string) {\n const { data } = useWalletsCacheQuery(username);\n const { data: hiveKeys } = useHiveKeysQuery(username);\n\n const fetchApi = getBoundFetch();\n\n return useMutation({\n mutationKey: [\"ecency-wallets\", \"create-account-with-wallets\", username],\n mutationFn: ({ currency, address }: Payload) =>\n fetchApi(`${ConfigManager.getValidatedBaseUrl()}/private-api/wallets-add`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n username,\n token: currency,\n address,\n meta: {\n ownerPublicKey: hiveKeys?.ownerPubkey,\n activePublicKey: hiveKeys?.activePubkey,\n postingPublicKey: hiveKeys?.postingPubkey,\n memoPublicKey: hiveKeys?.memoPubkey,\n\n ...Array.from(data?.entries() ?? []).reduce(\n (acc, [curr, info]) => ({\n ...acc,\n [curr]: info.address,\n }),\n {}\n ),\n },\n }),\n }),\n });\n}\n","import { ConfigManager } from \"@ecency/sdk\";\nimport { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { useMutation } from \"@tanstack/react-query\";\n\ninterface Payload {\n address: string;\n currency: EcencyWalletCurrency;\n}\n\nexport function useCheckWalletExistence() {\n return useMutation({\n mutationKey: [\"ecency-wallets\", \"check-wallet-existence\"],\n mutationFn: async ({ address, currency }: Payload) => {\n const response = await fetch(\n `${ConfigManager.getValidatedBaseUrl()}/private-api/wallets-exist`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n address,\n token: currency,\n }),\n }\n );\n const data = await response.json();\n return data.length === 0;\n },\n });\n}\n","import { ConfigManager } from \"@ecency/sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { getBoundFetch } from \"@/modules/wallets/utils\";\n\ninterface Payload {\n tokens: Record<string, string>;\n hiveKeys: {\n ownerPublicKey: string;\n activePublicKey: string;\n postingPublicKey: string;\n memoPublicKey: string;\n };\n}\n\nexport function useUpdateAccountWithWallets(\n username: string,\n accessToken: string | undefined\n) {\n const fetchApi = getBoundFetch();\n\n return useMutation({\n mutationKey: [\"ecency-wallets\", \"update-account-with-wallets\", username],\n mutationFn: async ({ tokens, hiveKeys }: Payload) => {\n const entries = Object.entries(tokens).filter(([, address]) => Boolean(address));\n\n if (entries.length === 0) {\n return new Response(null, { status: 204 });\n }\n\n const [primaryToken, primaryAddress] = entries[0] ?? [\"\", \"\"];\n\n if (!accessToken) {\n throw new Error(\n \"[SDK][Wallets][PrivateApi][WalletsAdd] – access token wasn`t found\"\n );\n }\n\n return fetchApi(`${ConfigManager.getValidatedBaseUrl()}/private-api/wallets-add`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n username,\n code: accessToken,\n token: primaryToken,\n address: primaryAddress,\n status: 3,\n meta: {\n ...Object.fromEntries(entries),\n ownerPublicKey: hiveKeys.ownerPublicKey,\n activePublicKey: hiveKeys.activePublicKey,\n postingPublicKey: hiveKeys.postingPublicKey,\n memoPublicKey: hiveKeys.memoPublicKey,\n },\n }),\n });\n },\n });\n}\n","import { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { BaseWallet } from \"@okxweb3/coin-base\";\n\n/**\n * These HD paths covers popular wallets like Trust, Meta, Ledger, Trezor\n * Supports also XVerse\n */\nconst HD_PATHS: Record<EcencyWalletCurrency, string[]> = {\n [EcencyWalletCurrency.BTC]: [\"m/84'/0'/0'/0/0\"],\n [EcencyWalletCurrency.ETH]: [\"m/84'/60'/0'/0/0\"], // its not working for Trust, Exodus, todo: check others below\n [EcencyWalletCurrency.BNB]: [\"m/84'/60'/0'/0/0\"],\n [EcencyWalletCurrency.SOL]: [\"m/84'/501'/0'/0/0\"],\n [EcencyWalletCurrency.TRON]: [\"m/44'/195'/0'/0'/0'\"],\n [EcencyWalletCurrency.APT]: [\"m/84'/637'/0'/0/0\"],\n [EcencyWalletCurrency.TON]: [\"m/44'/607'/0'\"],\n};\n\nexport async function getKeysFromSeed(\n mnemonic: string,\n wallet: BaseWallet,\n currency: EcencyWalletCurrency\n) {\n for (const hdPath of HD_PATHS[currency] || []) {\n try {\n const derivedPrivateKey = await wallet.getDerivedPrivateKey({\n mnemonic,\n hdPath,\n });\n\n const derivedPublicKey = await wallet.getNewAddress({\n privateKey: derivedPrivateKey,\n addressType:\n currency === EcencyWalletCurrency.BTC ? \"segwit_native\" : undefined,\n });\n\n return [derivedPrivateKey.toString(), derivedPublicKey.address] as const;\n } catch (error) {\n return [];\n }\n }\n return [];\n}\n","import { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { getKeysFromSeed } from \"@/modules/wallets/functions\";\nimport { EcencyTokenMetadata } from \"@/modules/wallets/types\";\nimport { getWallet } from \"@/modules/wallets/utils\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { EcencyWalletsPrivateApi } from \"./private-api-namespace\";\n\ninterface Payload {\n privateKeyOrSeed: string;\n}\n\n/**\n * This mutation uses for importing an existing wallet, validation and saving logically in application\n *\n * Keep attention: this mutation doesn't save wallet to somewhere in a server\n */\nexport function useImportWallet(\n username: string,\n currency: EcencyWalletCurrency\n) {\n const queryClient = useQueryClient();\n const { mutateAsync: checkWalletExistence } =\n EcencyWalletsPrivateApi.useCheckWalletExistence();\n\n return useMutation({\n mutationKey: [\"ecency-wallets\", \"import-wallet\", username, currency],\n mutationFn: async ({ privateKeyOrSeed }: Payload) => {\n const wallet = getWallet(currency);\n\n if (!wallet) {\n throw new Error(\"Cannot find token for this currency\");\n }\n\n const isSeed = privateKeyOrSeed.split(\" \").length === 12;\n let address;\n let privateKey = privateKeyOrSeed;\n\n if (isSeed) {\n [privateKey, address] = await getKeysFromSeed(\n privateKeyOrSeed,\n wallet,\n currency\n );\n } else {\n address = (\n await wallet.getNewAddress({\n privateKey: privateKeyOrSeed,\n })\n ).address;\n }\n\n if (!address || !privateKeyOrSeed) {\n throw new Error(\n \"Private key/seed phrase isn't matching with public key or token\"\n );\n }\n\n // Check wallet for existence in an Ecency's private API\n const hasChecked = await checkWalletExistence({\n address,\n currency,\n });\n if (!hasChecked) {\n throw new Error(\n \"This wallet has already in use by Hive account. Please, try another one\"\n );\n }\n\n return {\n privateKey,\n address,\n publicKey: \"\",\n };\n },\n onSuccess: ({ privateKey, publicKey, address }) => {\n queryClient.setQueryData<Map<EcencyWalletCurrency, EcencyTokenMetadata>>(\n [\"ecency-wallets\", \"wallets\", username],\n (data) =>\n new Map(data ? Array.from(data.entries()) : []).set(currency, {\n privateKey,\n publicKey,\n address,\n username,\n currency,\n type: \"CHAIN\",\n custom: true,\n })\n );\n },\n });\n}\n","import {\n AccountProfile,\n getAccountFullQueryOptions,\n useAccountUpdate,\n type AuthContext,\n} from \"@ecency/sdk\";\nimport {\n useMutation,\n useQuery,\n useQueryClient,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { EcencyTokenMetadata } from \"../types\";\nimport * as R from \"remeda\";\nimport { getAccountWalletListQueryOptions } from \"../queries\";\nimport { EcencyWalletCurrency } from \"../enums\";\n\nfunction getGroupedChainTokens(\n tokens?: AccountProfile[\"tokens\"],\n defaultShow?: boolean\n) {\n if (!tokens) {\n return {};\n }\n\n return R.pipe(\n tokens,\n R.filter(\n ({ type, symbol }) =>\n type === \"CHAIN\" ||\n Object.values(EcencyWalletCurrency).includes(symbol as any)\n ),\n R.map((item) => {\n const meta = {\n ...(item.meta ?? {}),\n } as Record<string, unknown>;\n\n if (typeof meta.show !== \"boolean\" && typeof defaultShow === \"boolean\") {\n meta.show = defaultShow;\n }\n\n return {\n ...item,\n meta,\n };\n }),\n // Chain tokens are unique by symbol, so indexing by symbol\n // gives a direct lookup map instead of an array-based grouping.\n R.indexBy(\n (item: NonNullable<AccountProfile[\"tokens\"]>[number]) => item.symbol\n )\n );\n}\n\n/**\n * Saving of token(s) metadata to Hive profile\n * It may contain: external wallets(see EcencyWalletCurrency), Hive tokens arrangement\n *\n * Basically, this mutation is a convenient wrapper for update profile operation\n */\ntype SaveWalletInformationOptions = Pick<\n UseMutationOptions<unknown, Error, EcencyTokenMetadata[]>,\n \"onSuccess\" | \"onError\"\n>;\n\nexport function useSaveWalletInformationToMetadata(\n username: string,\n auth?: AuthContext,\n options?: SaveWalletInformationOptions\n) {\n const queryClient = useQueryClient();\n\n const { data: accountData } = useQuery(getAccountFullQueryOptions(username));\n const { mutateAsync: updateProfile } = useAccountUpdate(username, auth);\n\n return useMutation({\n mutationKey: [\n \"ecency-wallets\",\n \"save-wallet-to-metadata\",\n accountData?.name,\n ],\n mutationFn: async (tokens: EcencyTokenMetadata[]) => {\n if (!accountData) {\n throw new Error(\"[SDK][Wallets] – no account data to save wallets\");\n }\n\n // Chain type tokens couldn't be deleted entirely from the profile list,\n // then visibility should be controlling using meta.show field\n const profileChainTokens = getGroupedChainTokens(\n accountData.profile?.tokens\n );\n\n const payloadTokens =\n (tokens.map(({ currency, type, privateKey, username, ...meta }) => ({\n symbol: currency!,\n type:\n type ??\n (Object.values(EcencyWalletCurrency).includes(currency as any)\n ? \"CHAIN\"\n : undefined),\n meta,\n })) as AccountProfile[\"tokens\"]) ?? [];\n\n const payloadChainTokens = getGroupedChainTokens(payloadTokens, true);\n const payloadNonChainTokens = payloadTokens.filter(\n ({ type, symbol }) =>\n type !== \"CHAIN\" &&\n !Object.values(EcencyWalletCurrency).includes(symbol as any)\n );\n\n const mergedChainTokens = R.pipe(\n profileChainTokens,\n R.mergeDeep(payloadChainTokens),\n R.values()\n );\n\n return updateProfile({\n tokens: [\n ...payloadNonChainTokens,\n ...mergedChainTokens,\n ] as AccountProfile[\"tokens\"],\n });\n },\n onError: options?.onError,\n onSuccess: (response, vars, context) => {\n (\n options?.onSuccess as\n | ((\n data: unknown,\n variables: EcencyTokenMetadata[],\n context: unknown\n ) => unknown)\n | undefined\n )?.(response, vars, context);\n queryClient.invalidateQueries({\n queryKey: getAccountWalletListQueryOptions(username).queryKey,\n });\n },\n });\n}\n","import { rememberScryptBsvVersion } from \"./internal/scrypt-guard\";\n\nrememberScryptBsvVersion();\n\nexport * from \"./modules/wallets\";\nexport * from \"./modules/assets\";\n"]}
1
+ {"version":3,"sources":["../../src/internal/scrypt-guard.ts","../../src/modules/wallets/enums/ecency-wallet-currency.ts","../../src/modules/wallets/enums/ecency-wallet-basic-tokens.ts","../../src/modules/wallets/queries/use-get-external-wallet-query.ts","../../src/modules/wallets/queries/use-seed-phrase.ts","../../src/modules/wallets/queries/get-token-price-query-options.ts","../../src/modules/wallets/utils/delay.ts","../../src/modules/wallets/utils/get-wallet.ts","../../src/modules/wallets/utils/mnemonic-to-seed-bip-39.ts","../../src/modules/wallets/utils/derive-hive-bip44-keys.ts","../../src/modules/wallets/utils/derive-hive-master-password-keys.ts","../../src/modules/wallets/utils/detect-hive-key-derivation.ts","../../src/modules/wallets/utils/sign-digest.ts","../../src/modules/wallets/utils/sign-transaction.ts","../../src/modules/wallets/utils/encrypt-memo.ts","../../src/modules/wallets/utils/decrypt-memo.ts","../../src/modules/wallets/utils/sign-external-transaction.ts","../../src/modules/wallets/utils/build-external-transaction.ts","../../src/modules/wallets/utils/get-bound-fetch.ts","../../src/modules/wallets/queries/use-hive-keys-query.ts","../../src/modules/wallets/queries/get-all-tokens-list-query-options.ts","../../src/modules/wallets/queries/use-get-account-wallet-list-query.ts","../../src/modules/wallets/queries/get-tokens-operations-query-options.ts","../../src/modules/wallets/queries/use-wallets-cache-query.ts","../../src/modules/wallets/mutations/use-wallet-create.ts","../../src/modules/wallets/mutations/private-api/index.ts","../../src/modules/wallets/mutations/private-api/create-account-with-wallets.ts","../../src/modules/wallets/mutations/private-api/check-wallet-existence.ts","../../src/modules/wallets/mutations/private-api/update-account-with-wallets.ts","../../src/modules/wallets/functions/get-keys-from-seed.ts","../../src/modules/wallets/mutations/use-import-wallet.ts","../../src/modules/wallets/mutations/save-wallet-information-to-metadata.ts","../../src/index.ts"],"names":["EcencyWalletCurrency","EcencyWalletBasicTokens","useQuery","ConfigManager","mnemonicToSeedSync","PrivateKey","Memo","CONFIG","buildBtcPsbt","queryOptions","getQueryClient","getAccountFullQueryOptions","getPortfolioQueryOptions","useQueryClient","useMutation","options","username"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * The scrypt bsv package writes the version string to a global symbol and\n * warns when that symbol is already populated. In environments that reload\n * modules (Next.js dev server, Storybook, etc.) the stale value triggers\n * repeated warnings. Clearing the cached handle before our modules touch bsv\n * keeps the console quiet without requiring downstream wrappers.\n *\n * Similarly, bitcore-lib and bitcore-lib-inquisition check for duplicate instances\n * using global variables and throw errors when detected. We clear these globals\n * to prevent false positives in module reloading scenarios.\n */\nconst globalLike = globalThis as Record<string, unknown> & {\n _scrypt_bsv?: unknown;\n __scryptBsvPreviousVersion?: unknown;\n _bitcore?: unknown;\n __bitcorePreviousVersion?: unknown;\n};\n\nif (typeof globalLike._scrypt_bsv !== \"undefined\") {\n if (typeof globalLike._scrypt_bsv === \"string\") {\n globalLike.__scryptBsvPreviousVersion = globalLike._scrypt_bsv;\n }\n\n try {\n delete globalLike._scrypt_bsv;\n } catch {\n globalLike._scrypt_bsv = undefined;\n }\n}\n\n// Clear bitcore-lib global to prevent \"more than one instance\" errors\nif (typeof globalLike._bitcore !== \"undefined\") {\n if (typeof globalLike._bitcore === \"object\") {\n globalLike.__bitcorePreviousVersion = globalLike._bitcore;\n }\n\n try {\n delete globalLike._bitcore;\n } catch {\n globalLike._bitcore = undefined;\n }\n}\n\nexport function rememberScryptBsvVersion() {\n if (typeof globalLike._scrypt_bsv === \"string\") {\n globalLike.__scryptBsvPreviousVersion = globalLike._scrypt_bsv;\n }\n\n // Also remember bitcore version if it exists\n if (typeof globalLike._bitcore === \"object\") {\n globalLike.__bitcorePreviousVersion = globalLike._bitcore;\n }\n}\n","export enum EcencyWalletCurrency {\n BTC = \"BTC\",\n ETH = \"ETH\",\n BNB = \"BNB\",\n APT = \"APT\",\n TON = \"TON\",\n TRON = \"TRX\",\n SOL = \"SOL\",\n // DOGE = \"doge\",\n // LTC = \"litecoin\",\n // ADA = \"cardano\",\n // STX = \"stacks\",\n // NEAR = \"near\",\n // EOS = \"eos\",\n // SUI = \"sui\",\n}\n","export enum EcencyWalletBasicTokens {\n Points = \"POINTS\",\n HivePower = \"HP\",\n Hive = \"HIVE\",\n HiveDollar = \"HBD\"\n}\n","import { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { ConfigManager } from \"@ecency/sdk\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nconst currencyChainMap: Record<EcencyWalletCurrency, string> = {\n [EcencyWalletCurrency.BTC]: \"btc\",\n [EcencyWalletCurrency.ETH]: \"eth\",\n [EcencyWalletCurrency.BNB]: \"bnb\",\n [EcencyWalletCurrency.SOL]: \"sol\",\n [EcencyWalletCurrency.TRON]: \"tron\",\n [EcencyWalletCurrency.TON]: \"ton\",\n [EcencyWalletCurrency.APT]: \"apt\",\n};\n\ninterface PrivateApiBalanceResponse {\n chain: string;\n balance: number | string;\n unit: string;\n raw?: unknown;\n nodeId?: string;\n}\n\nexport interface ExternalWalletBalance {\n chain: string;\n unit: string;\n raw?: unknown;\n nodeId?: string;\n /**\n * Balance represented as a BigInt for convenience.\n */\n balanceBigInt: bigint;\n /**\n * Balance returned as a string to preserve precision for UIs that cannot\n * handle bigint values directly.\n */\n balanceString: string;\n}\n\nfunction normalizeBalance(balance: number | string): string {\n if (typeof balance === \"number\") {\n if (!Number.isFinite(balance)) {\n throw new Error(\"Private API returned a non-finite numeric balance\");\n }\n\n return Math.trunc(balance).toString();\n }\n\n if (typeof balance === \"string\") {\n const trimmed = balance.trim();\n\n if (trimmed === \"\") {\n throw new Error(\"Private API returned an empty balance string\");\n }\n\n return trimmed;\n }\n\n throw new Error(\"Private API returned balance in an unexpected format\");\n}\n\nfunction parsePrivateApiBalance(\n result: unknown,\n expectedChain: string\n): ExternalWalletBalance {\n if (!result || typeof result !== \"object\") {\n throw new Error(\"Private API returned an unexpected response\");\n }\n\n const { chain, balance, unit, raw, nodeId } =\n result as PrivateApiBalanceResponse;\n\n if (typeof chain !== \"string\" || chain !== expectedChain) {\n throw new Error(\"Private API response chain did not match request\");\n }\n\n if (typeof unit !== \"string\" || unit.length === 0) {\n throw new Error(\"Private API response is missing unit information\");\n }\n\n if (balance === undefined || balance === null) {\n throw new Error(\"Private API response is missing balance information\");\n }\n\n const balanceString = normalizeBalance(balance);\n\n let balanceBigInt: bigint;\n\n try {\n balanceBigInt = BigInt(balanceString);\n } catch (error) {\n throw new Error(\"Private API returned a balance that is not an integer\");\n }\n\n return {\n chain,\n unit,\n raw,\n nodeId:\n typeof nodeId === \"string\" && nodeId.length > 0 ? nodeId : undefined,\n balanceBigInt,\n balanceString,\n };\n}\n\nexport function useGetExternalWalletBalanceQuery(\n currency: EcencyWalletCurrency,\n address: string\n) {\n return useQuery<ExternalWalletBalance>({\n queryKey: [\"ecency-wallets\", \"external-wallet-balance\", currency, address],\n queryFn: async () => {\n const chain = currencyChainMap[currency];\n\n if (!chain) {\n throw new Error(`Unsupported currency ${currency}`);\n }\n\n const baseUrl = `${ConfigManager.getValidatedBaseUrl()}/private-api/balance/${chain}/${encodeURIComponent(\n address\n )}`;\n\n let primaryResponse: Response | undefined;\n let primaryError: unknown;\n\n try {\n primaryResponse = await fetch(baseUrl);\n } catch (error) {\n primaryError = error;\n }\n\n let response = primaryResponse;\n\n if (!response || !response.ok) {\n const fallbackUrl = `${baseUrl}?provider=chainz`;\n let fallbackError: unknown;\n\n try {\n const fallbackResponse = await fetch(fallbackUrl);\n\n if (fallbackResponse.ok) {\n response = fallbackResponse;\n } else {\n fallbackError = new Error(\n `Fallback provider responded with status ${fallbackResponse.status}`\n );\n }\n } catch (error) {\n fallbackError = error;\n }\n\n if (!response || !response.ok) {\n const failureReasons: string[] = [];\n\n if (primaryError) {\n const message =\n primaryError instanceof Error\n ? primaryError.message\n : String(primaryError);\n failureReasons.push(`primary provider failed: ${message}`);\n } else if (primaryResponse && !primaryResponse.ok) {\n failureReasons.push(\n `primary provider status ${primaryResponse.status}`\n );\n }\n\n if (fallbackError) {\n const message =\n fallbackError instanceof Error\n ? fallbackError.message\n : String(fallbackError);\n failureReasons.push(`fallback provider failed: ${message}`);\n }\n\n if (failureReasons.length === 0) {\n failureReasons.push(\"unknown error\");\n }\n\n throw new Error(\n `Private API request failed (${failureReasons.join(\", \")})`\n );\n }\n }\n\n const result = (await response.json()) as unknown;\n\n return parsePrivateApiBalance(result, chain);\n },\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport bip39 from \"bip39\";\n\nexport function useSeedPhrase(username: string) {\n return useQuery({\n queryKey: [\"ecency-wallets\", \"seed\", username],\n queryFn: async () => bip39.generateMnemonic(128),\n // CRITICAL: Prevent seed regeneration - cache forever\n // Once generated, the seed must NEVER change to ensure consistency between:\n // 1. Displayed seed phrase\n // 2. Downloaded seed file\n // 3. Keys sent to API for account creation\n staleTime: Infinity,\n gcTime: Infinity,\n });\n}\n","import { ConfigManager } from \"@ecency/sdk\";\nimport { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { LRUCache } from \"lru-cache\";\n\nconst options = {\n max: 500,\n // how long to live in ms\n ttl: 1000 * 60 * 5,\n // return stale items before removing from cache?\n allowStale: false,\n updateAgeOnGet: false,\n updateAgeOnHas: false,\n};\n\nconst cache = new LRUCache(options);\nconst undefinedValue = Symbol(\"undefined\");\n\nconst cacheSet = (key: string, value: any) =>\n cache.set(key, value === undefined ? undefinedValue : value);\n\nconst cacheGet = (key: string) => {\n const v = cache.get(key);\n return v === undefinedValue ? undefined : v;\n};\n\ninterface MarketDataQuote {\n last_updated: string;\n percent_change: number;\n price: number;\n}\n\ninterface MarketDataLatestResponse {\n [token: string]: {\n quotes?: {\n usd?: MarketDataQuote;\n btc?: MarketDataQuote;\n [fiat: string]: MarketDataQuote | undefined;\n };\n };\n}\n\nconst CURRENCY_TO_TOKEN_MAP: Record<string, string> = {\n [EcencyWalletCurrency.BTC]: \"btc\",\n [EcencyWalletCurrency.ETH]: \"eth\",\n [EcencyWalletCurrency.SOL]: \"sol\",\n [EcencyWalletCurrency.TON]: \"ton\",\n [EcencyWalletCurrency.TRON]: \"trx\",\n [EcencyWalletCurrency.APT]: \"apt\",\n [EcencyWalletCurrency.BNB]: \"bnb\",\n HBD: \"hbd\",\n HIVE: \"hive\",\n};\n\nconst MARKET_DATA_CACHE_KEY = \"market-data/latest\";\n\nconst normalizeCurrencyToToken = (currency: string) => {\n const upperCased = currency.toUpperCase();\n return CURRENCY_TO_TOKEN_MAP[upperCased] ?? currency.toLowerCase();\n};\n\nexport function getTokenPriceQueryOptions(currency?: string) {\n return queryOptions({\n queryKey: [\"ecency-wallets\", \"market-data\", currency],\n queryFn: async () => {\n if (!currency) {\n throw new Error(\n \"[SDK][Wallets][MarketData] – currency wasn`t provided\"\n );\n }\n\n const token = normalizeCurrencyToToken(currency);\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n\n let marketData = cacheGet(MARKET_DATA_CACHE_KEY) as\n | MarketDataLatestResponse\n | undefined;\n\n if (!marketData) {\n const httpResponse = await fetch(\n `${baseUrl}/private-api/market-data/latest`,\n {\n method: \"GET\",\n }\n );\n\n if (!httpResponse.ok) {\n throw new Error(\n `[SDK][Wallets][MarketData] – failed to fetch latest market data (${httpResponse.status})`\n );\n }\n\n const data = (await httpResponse.json()) as MarketDataLatestResponse;\n cacheSet(MARKET_DATA_CACHE_KEY, data);\n marketData = data;\n }\n\n const tokenData = marketData[token];\n\n if (!tokenData) {\n throw new Error(\n `[SDK][Wallets][MarketData] – missing market data for token: ${token}`\n );\n }\n\n const usdQuote = tokenData.quotes?.usd;\n\n if (!usdQuote) {\n throw new Error(\n `[SDK][Wallets][MarketData] – missing USD quote for token: ${token}`\n );\n }\n\n return Number(usdQuote.price);\n },\n enabled: !!currency,\n });\n}\n","export function delay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { BtcWallet } from \"@okxweb3/coin-bitcoin\";\nimport { EthWallet } from \"@okxweb3/coin-ethereum\";\nimport { TrxWallet } from \"@okxweb3/coin-tron\";\nimport { TonWallet } from \"@okxweb3/coin-ton\";\nimport { SolWallet } from \"@okxweb3/coin-solana\";\nimport { AptosWallet } from \"@okxweb3/coin-aptos\";\nimport { BaseWallet } from \"@okxweb3/coin-base\";\nimport { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\n\nexport function getWallet(\n currency: EcencyWalletCurrency\n): BaseWallet | undefined {\n switch (currency) {\n case EcencyWalletCurrency.BTC:\n return new BtcWallet();\n case EcencyWalletCurrency.ETH:\n case EcencyWalletCurrency.BNB:\n return new EthWallet();\n\n case EcencyWalletCurrency.TRON:\n return new TrxWallet();\n\n case EcencyWalletCurrency.TON:\n return new TonWallet();\n\n case EcencyWalletCurrency.SOL:\n return new SolWallet();\n\n case EcencyWalletCurrency.APT:\n return new AptosWallet();\n\n default:\n return undefined;\n }\n}\n","import { mnemonicToSeedSync } from \"bip39\";\n\nexport function mnemonicToSeedBip39(value: string) {\n return mnemonicToSeedSync(value).toString(\"hex\");\n}\n","import { mnemonicToSeedSync } from \"bip39\";\nimport { bip32 } from \"@okxweb3/crypto-lib\";\nimport { PrivateKey } from \"@hiveio/dhive\";\n\nexport type HiveRole = \"owner\" | \"active\" | \"posting\" | \"memo\";\n\nconst ROLE_INDEX: Record<HiveRole, number> = {\n owner: 0,\n active: 1,\n posting: 2,\n memo: 3,\n};\n\nexport function deriveHiveKey(\n mnemonic: string,\n role: HiveRole,\n accountIndex = 0\n) {\n const seed = mnemonicToSeedSync(mnemonic);\n const master = bip32.fromSeed(seed);\n const path = `m/44'/3054'/${accountIndex}'/0'/${ROLE_INDEX[role]}'`;\n const child = master.derivePath(path);\n if (!child.privateKey) {\n throw new Error(\"[Ecency][Wallets] - hive key derivation failed\");\n }\n const pk = PrivateKey.from(child.privateKey);\n return {\n privateKey: pk.toString(),\n publicKey: pk.createPublic().toString(),\n } as const;\n}\n\nexport function deriveHiveKeys(\n mnemonic: string,\n accountIndex = 0\n) {\n const owner = deriveHiveKey(mnemonic, \"owner\", accountIndex);\n const active = deriveHiveKey(mnemonic, \"active\", accountIndex);\n const posting = deriveHiveKey(mnemonic, \"posting\", accountIndex);\n const memo = deriveHiveKey(mnemonic, \"memo\", accountIndex);\n return {\n owner: owner.privateKey,\n active: active.privateKey,\n posting: posting.privateKey,\n memo: memo.privateKey,\n ownerPubkey: owner.publicKey,\n activePubkey: active.publicKey,\n postingPubkey: posting.publicKey,\n memoPubkey: memo.publicKey,\n } as const;\n}\n\n","import { PrivateKey } from \"@hiveio/dhive\";\nimport type { HiveRole } from \"./derive-hive-bip44-keys\";\n\nexport function deriveHiveMasterPasswordKey(\n username: string,\n masterPassword: string,\n role: HiveRole\n) {\n const pk = PrivateKey.fromLogin(username, masterPassword, role);\n return {\n privateKey: pk.toString(),\n publicKey: pk.createPublic().toString(),\n } as const;\n}\n\nexport function deriveHiveMasterPasswordKeys(\n username: string,\n masterPassword: string\n) {\n const owner = deriveHiveMasterPasswordKey(username, masterPassword, \"owner\");\n const active = deriveHiveMasterPasswordKey(username, masterPassword, \"active\");\n const posting = deriveHiveMasterPasswordKey(\n username,\n masterPassword,\n \"posting\"\n );\n const memo = deriveHiveMasterPasswordKey(username, masterPassword, \"memo\");\n return {\n owner: owner.privateKey,\n active: active.privateKey,\n posting: posting.privateKey,\n memo: memo.privateKey,\n ownerPubkey: owner.publicKey,\n activePubkey: active.publicKey,\n postingPubkey: posting.publicKey,\n memoPubkey: memo.publicKey,\n } as const;\n}\n","import { CONFIG, FullAccount, getAccountFullQueryOptions } from \"@ecency/sdk\";\nimport { PrivateKey } from \"@hiveio/dhive\";\nimport { deriveHiveKeys } from \"./derive-hive-bip44-keys\";\n\nexport type HiveKeyDerivation = \"bip44\" | \"master-password\" | \"unknown\";\n\nexport async function detectHiveKeyDerivation(\n username: string,\n seed: string,\n type: \"active\" | \"owner\" = \"active\"\n): Promise<HiveKeyDerivation> {\n const uname = username.trim().toLowerCase();\n\n // ensure we actually have data\n const account = (await CONFIG.queryClient.fetchQuery(\n getAccountFullQueryOptions(uname)\n )) as FullAccount;\n\n // pick the right authority based on `type`\n const auth = account[type];\n\n // --- BIP44 check (match selected authority) ---\n const bip44 = deriveHiveKeys(seed);\n const bip44Pub =\n type === \"owner\" ? bip44.ownerPubkey : bip44.activePubkey;\n\n const matchBip44 = auth.key_auths.some(([pub]) => String(pub) === bip44Pub);\n if (matchBip44) return \"bip44\";\n\n // --- Master password (legacy) check (match selected authority) ---\n const legacyPub = PrivateKey.fromLogin(uname, seed, type)\n .createPublic()\n .toString();\n\n const matchLegacy = auth.key_auths.some(([pub]) => String(pub) === legacyPub);\n if (matchLegacy) return \"master-password\";\n\n return \"unknown\";\n}\n","import { PrivateKey } from \"@hiveio/dhive\";\n\n/**\n * Sign a digest using the provided private key.\n * @param digest Digest as a Buffer or hex string.\n * @param privateKey Private key in WIF format.\n * @returns Hex encoded signature string.\n */\nexport function signDigest(digest: Buffer | string, privateKey: string): string {\n const key = PrivateKey.fromString(privateKey);\n const buf = typeof digest === \"string\" ? Buffer.from(digest, \"hex\") : digest;\n return key.sign(buf).toString();\n}\n\n","import { PrivateKey, Client } from \"@hiveio/dhive\";\nimport type {\n Transaction,\n SignedTransaction,\n TransactionConfirmation,\n} from \"@hiveio/dhive/lib/chain/transaction\";\nimport { cryptoUtils } from \"@hiveio/dhive/lib/crypto\";\n\n/**\n * Sign a transaction with the given private key.\n * Optionally a custom chain id can be provided.\n *\n * @param tx Transaction to sign.\n * @param privateKey Private key in WIF format.\n * @param chainId Optional chain id as a hex string.\n * @returns Signed transaction including the signature.\n */\nexport function signTx(\n tx: Transaction,\n privateKey: string,\n chainId?: string\n): SignedTransaction {\n const key = PrivateKey.fromString(privateKey);\n const chain = chainId ? Buffer.from(chainId, \"hex\") : undefined;\n return cryptoUtils.signTransaction(tx, key, chain);\n}\n\n/**\n * Sign a transaction and broadcast it to the network.\n * Optionally a custom chain id can be provided.\n *\n * @param client Hive client instance used for broadcasting.\n * @param tx Transaction to sign.\n * @param privateKey Private key in WIF format.\n * @param chainId Optional chain id as a hex string.\n * @returns Broadcast confirmation.\n */\nexport async function signTxAndBroadcast(\n client: Client,\n tx: Transaction,\n privateKey: string,\n chainId?: string\n): Promise<TransactionConfirmation> {\n const signed = signTx(tx, privateKey, chainId);\n return client.broadcast.send(signed);\n}\n\n","import { PrivateKey } from \"@hiveio/dhive\";\nimport type { Client } from \"@hiveio/dhive\";\nimport { Memo } from \"@hiveio/dhive/lib/memo\";\n\n/**\n * Encrypt a memo using explicit keys.\n * @param privateKey Sender's private memo key in WIF format.\n * @param publicKey Recipient's public memo key.\n * @param memo Memo text to encrypt.\n */\nexport function encryptMemoWithKeys(\n privateKey: string,\n publicKey: string,\n memo: string\n): string {\n return Memo.encode(PrivateKey.fromString(privateKey), publicKey, memo);\n}\n\n/**\n * Encrypt a memo by looking up the recipient's memo key from the blockchain.\n * @param client Hive client instance used to fetch account information.\n * @param fromPrivateKey Sender's private memo key.\n * @param toAccount Recipient account name.\n * @param memo Memo text to encrypt.\n */\nexport async function encryptMemoWithAccounts(\n client: Client,\n fromPrivateKey: string,\n toAccount: string,\n memo: string\n): Promise<string> {\n const [account] = await client.database.getAccounts([toAccount]);\n if (!account) {\n throw new Error(\"Account not found\");\n }\n return Memo.encode(PrivateKey.fromString(fromPrivateKey), account.memo_key, memo);\n}\n\n","import { PrivateKey } from \"@hiveio/dhive\";\nimport { Memo } from \"@hiveio/dhive/lib/memo\";\n\n/**\n * Decrypt an encrypted memo using the recipient's private key.\n * @param privateKey Private memo key in WIF format.\n * @param memo Encrypted memo string.\n */\nexport function decryptMemoWithKeys(privateKey: string, memo: string): string {\n return Memo.decode(PrivateKey.fromString(privateKey), memo);\n}\n\n/**\n * Decrypt a memo using account information.\n * This is an alias of {@link decryptMemoWithKeys} and provided for\n * API symmetry with {@link encryptMemoWithAccounts}.\n */\nexport const decryptMemoWithAccounts = decryptMemoWithKeys;\n\n","import { CONFIG } from \"@ecency/sdk\";\nimport { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { getWallet } from \"./get-wallet\";\nimport type { SignTxParams } from \"@okxweb3/coin-base\";\n\n/**\n * Sign a transaction for an external chain supported by okxweb3 wallets.\n *\n * @param currency Chain identifier.\n * @param params Signing parameters accepted by okxweb3 wallets.\n */\nexport async function signExternalTx(\n currency: EcencyWalletCurrency,\n params: SignTxParams\n) {\n const wallet = getWallet(currency);\n if (!wallet) throw new Error(\"Unsupported currency\");\n return wallet.signTransaction(params as any);\n}\n\n/**\n * Sign and broadcast a transaction for an external chain. The transaction is\n * signed locally and then sent to a public RPC endpoint for broadcasting.\n *\n * @param currency Chain identifier.\n * @param params Signing parameters accepted by okxweb3 wallets.\n * @returns RPC response or broadcasted transaction hash.\n */\nexport async function signExternalTxAndBroadcast(\n currency: EcencyWalletCurrency,\n params: SignTxParams\n) {\n const signed = await signExternalTx(currency, params);\n\n switch (currency) {\n case EcencyWalletCurrency.BTC: {\n const res = await fetch(\"https://mempool.space/api/tx\", {\n method: \"POST\",\n body: signed as any,\n });\n if (!res.ok) throw new Error(\"Broadcast failed\");\n return res.text();\n }\n case EcencyWalletCurrency.ETH:\n case EcencyWalletCurrency.BNB: {\n const rpcUrl =\n currency === EcencyWalletCurrency.ETH\n ? \"https://rpc.ankr.com/eth\"\n : \"https://bsc-dataseed.binance.org\";\n const res = await fetch(rpcUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"eth_sendRawTransaction\",\n params: [signed],\n }),\n });\n const json = await res.json();\n if (json.error) throw new Error(json.error.message);\n return json.result;\n }\n case EcencyWalletCurrency.SOL: {\n const res = await fetch(\n `https://rpc.helius.xyz/?api-key=${CONFIG.heliusApiKey}`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"sendTransaction\",\n params: [signed],\n }),\n }\n );\n const json = await res.json();\n if (json.error) throw new Error(json.error.message);\n return json.result;\n }\n case EcencyWalletCurrency.TRON: {\n const res = await fetch(\n \"https://api.trongrid.io/wallet/broadcasttransaction\",\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: typeof signed === \"string\" ? signed : JSON.stringify(signed),\n }\n );\n const json = await res.json();\n if (json.result === false) throw new Error(json.message);\n return json.txid || json.result;\n }\n case EcencyWalletCurrency.TON: {\n const res = await fetch(\"https://toncenter.com/api/v2/sendTransaction\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ boc: signed }),\n });\n const json = await res.json();\n if (json.error) throw new Error(json.error.message || json.result);\n return json.result;\n }\n case EcencyWalletCurrency.APT: {\n const res = await fetch(\n \"https://fullnode.mainnet.aptoslabs.com/v1/transactions\",\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: typeof signed === \"string\" ? signed : JSON.stringify(signed),\n }\n );\n if (!res.ok) throw new Error(\"Broadcast failed\");\n return res.json();\n }\n default:\n throw new Error(\"Unsupported currency\");\n }\n}\n\n","import { buildPsbt as buildBtcPsbt } from \"@okxweb3/coin-bitcoin\";\nimport type { utxoTx } from \"@okxweb3/coin-bitcoin/dist/type\";\nimport type { Network as BtcNetwork } from \"@okxweb3/coin-bitcoin/dist/bitcoinjs-lib\";\nimport type { EthTxParams } from \"@okxweb3/coin-ethereum/dist/EthWallet\";\nimport type { SolSignParam } from \"@okxweb3/coin-solana/dist/SolWallet\";\nimport type { TrxSignParam } from \"@okxweb3/coin-tron/dist/TrxWallet\";\nimport type { TxData as TonTxData } from \"@okxweb3/coin-ton/dist/api/types\";\nimport type { AptosParam } from \"@okxweb3/coin-aptos/dist/AptosWallet\";\nimport { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\n\n/**\n * Union type covering all chain-specific build parameters.\n */\nexport type ExternalTxParams =\n | utxoTx\n | EthTxParams\n | SolSignParam\n | TrxSignParam\n | TonTxData\n | AptosParam;\n\n/**\n * Build a Bitcoin PSBT from UTXO inputs and desired outputs.\n *\n * @param tx Transaction description accepted by @okxweb3/coin-bitcoin.\n * @returns Hex encoded PSBT ready for signing.\n */\nexport function buildPsbt(\n tx: utxoTx,\n network?: BtcNetwork,\n maximumFeeRate?: number\n) {\n return buildBtcPsbt(tx, network, maximumFeeRate);\n}\n\n/**\n * Helper returning raw Ethereum transaction data ready for signing.\n *\n * The returned object can be passed directly to signExternalTx.\n */\nexport function buildEthTx(data: EthTxParams): EthTxParams {\n return data;\n}\n\n/**\n * Helper returning Solana transaction params used by signExternalTx.\n */\nexport function buildSolTx(data: SolSignParam): SolSignParam {\n return data;\n}\n\n/**\n * Helper returning Tron transaction params used by signExternalTx.\n */\nexport function buildTronTx(data: TrxSignParam): TrxSignParam {\n return data;\n}\n\n/**\n * Helper returning TON transaction params used by signExternalTx.\n */\nexport function buildTonTx(data: TonTxData): TonTxData {\n return data;\n}\n\n/**\n * Helper returning Aptos transaction params used by signExternalTx.\n */\nexport function buildAptTx(data: AptosParam): AptosParam {\n return data;\n}\n\n/**\n * Build a transaction for an external chain supported by okxweb3 wallets.\n *\n * @param currency Chain identifier.\n * @param tx Chain specific transaction description.\n */\nexport function buildExternalTx(\n currency: EcencyWalletCurrency,\n tx: ExternalTxParams\n) {\n switch (currency) {\n case EcencyWalletCurrency.BTC:\n return buildPsbt(tx as utxoTx);\n case EcencyWalletCurrency.ETH:\n case EcencyWalletCurrency.BNB:\n return buildEthTx(tx as EthTxParams);\n case EcencyWalletCurrency.SOL:\n return buildSolTx(tx as SolSignParam);\n case EcencyWalletCurrency.TRON:\n return buildTronTx(tx as TrxSignParam);\n case EcencyWalletCurrency.TON:\n return buildTonTx(tx as TonTxData);\n case EcencyWalletCurrency.APT:\n return buildAptTx(tx as AptosParam);\n default:\n throw new Error(\"Unsupported currency\");\n }\n}\n","let cachedFetch: typeof globalThis.fetch | undefined;\n\nexport function getBoundFetch() {\n if (!cachedFetch) {\n if (typeof globalThis.fetch !== \"function\") {\n throw new Error(\"[Ecency][Wallets] - global fetch is not available\");\n }\n\n cachedFetch = globalThis.fetch.bind(globalThis);\n }\n\n return cachedFetch;\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useSeedPhrase } from \"./use-seed-phrase\";\nimport { EcencyHiveKeys } from \"@/modules/wallets/types\";\nimport {\n deriveHiveKeys,\n deriveHiveMasterPasswordKeys,\n detectHiveKeyDerivation,\n} from \"@/modules/wallets/utils\";\n\nexport function useHiveKeysQuery(username: string) {\n const { data: seed } = useSeedPhrase(username);\n\n return useQuery({\n queryKey: [\"ecencу-wallets\", \"hive-keys\", username, seed],\n staleTime: Infinity,\n queryFn: async () => {\n if (!seed) {\n throw new Error(\"[Ecency][Wallets] - no seed to create Hive account\");\n }\n\n const method = await detectHiveKeyDerivation(username, seed).catch(\n () => \"bip44\"\n );\n\n const keys =\n method === \"master-password\"\n ? deriveHiveMasterPasswordKeys(username, seed)\n : deriveHiveKeys(seed);\n\n return {\n username,\n ...keys,\n } as EcencyHiveKeys;\n },\n });\n}\n","import {\n getHiveEngineTokensBalancesQueryOptions,\n getHiveEngineTokensMetadataQueryOptions,\n} from \"@/modules/assets\";\nimport {\n HiveEngineTokenBalance,\n HiveEngineTokenMetadataResponse,\n} from \"@/modules/assets/hive-engine/types\";\nimport { getQueryClient } from \"@ecency/sdk\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { EcencyWalletBasicTokens, EcencyWalletCurrency } from \"../enums\";\n\nfunction createFallbackTokenMetadata(symbol: string): HiveEngineTokenMetadataResponse {\n return {\n issuer: \"\",\n symbol,\n name: symbol,\n metadata: \"{}\",\n precision: 0,\n maxSupply: \"0\",\n supply: \"0\",\n circulatingSupply: \"0\",\n stakingEnabled: false,\n unstakingCooldown: 0,\n delegationEnabled: false,\n undelegationCooldown: 0,\n numberTransactions: 0,\n totalStaked: \"0\",\n };\n}\n\nasync function getLayer2TokensMetadata(username?: string) {\n if (!username) {\n return [] as HiveEngineTokenMetadataResponse[];\n }\n\n let balances: HiveEngineTokenBalance[] = [];\n\n try {\n balances = await getQueryClient().fetchQuery(\n getHiveEngineTokensBalancesQueryOptions(username)\n );\n } catch {\n balances = [];\n }\n\n const uniqueSymbols = Array.from(\n new Set(\n balances\n .map((balance) => balance.symbol)\n .filter((symbol): symbol is string => Boolean(symbol))\n )\n );\n\n if (uniqueSymbols.length === 0) {\n return [] as HiveEngineTokenMetadataResponse[];\n }\n\n let metadataList: HiveEngineTokenMetadataResponse[] = [];\n\n try {\n metadataList = await getQueryClient().fetchQuery(\n getHiveEngineTokensMetadataQueryOptions(uniqueSymbols)\n );\n } catch {\n metadataList = [];\n }\n\n const metadataBySymbol = new Map(\n metadataList.map((token) => [token.symbol, token])\n );\n\n return uniqueSymbols.map(\n (symbol) => metadataBySymbol.get(symbol) ?? createFallbackTokenMetadata(symbol)\n );\n}\n\nexport function getAllTokensListQueryOptions(username?: string) {\n return queryOptions({\n queryKey: [\"ecency-wallets\", \"all-tokens-list\", username ?? null],\n queryFn: async () => {\n return {\n basic: [\n EcencyWalletBasicTokens.Points,\n EcencyWalletBasicTokens.Hive,\n EcencyWalletBasicTokens.HivePower,\n EcencyWalletBasicTokens.HiveDollar,\n ],\n external: Object.values(EcencyWalletCurrency),\n spk: [\"SPK\", \"LARYNX\", \"LP\"],\n layer2: await getLayer2TokensMetadata(username),\n };\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { EcencyWalletBasicTokens } from \"../enums\";\nimport {\n AccountProfile,\n FullAccount,\n getAccountFullQueryOptions,\n getQueryClient,\n getPortfolioQueryOptions,\n type PortfolioResponse,\n type PortfolioWalletItem,\n} from \"@ecency/sdk\";\n\ntype ProfileTokens = AccountProfile[\"tokens\"];\ntype ProfileToken = NonNullable<ProfileTokens>[number];\n\nfunction normalizeAccountTokens(tokens: ProfileTokens): ProfileToken[] {\n if (Array.isArray(tokens)) {\n return tokens.filter(Boolean) as ProfileToken[];\n }\n\n if (tokens && typeof tokens === \"object\") {\n return Object.values(tokens).flatMap((value) =>\n Array.isArray(value) ? (value.filter(Boolean) as ProfileToken[]) : []\n );\n }\n\n return [];\n}\n\nconst BASIC_TOKENS: string[] = [\n EcencyWalletBasicTokens.Points,\n EcencyWalletBasicTokens.Hive,\n EcencyWalletBasicTokens.HivePower,\n EcencyWalletBasicTokens.HiveDollar,\n];\n\nexport function getAccountWalletListQueryOptions(username: string, currency: string = \"usd\") {\n return queryOptions({\n queryKey: [\"ecency-wallets\", \"list\", username, currency],\n enabled: !!username,\n queryFn: async () => {\n const portfolioQuery = getPortfolioQueryOptions(username, currency, true);\n const queryClient = getQueryClient();\n const accountQuery = getAccountFullQueryOptions(username);\n\n let account: FullAccount | undefined;\n\n try {\n account = await queryClient.fetchQuery(accountQuery);\n } catch {\n // Best effort; fall back to defaults if account metadata is not available.\n }\n\n const tokenVisibility = new Map<string, boolean>();\n\n const accountTokens = normalizeAccountTokens(account?.profile?.tokens);\n\n accountTokens.forEach((token: ProfileToken) => {\n const symbol = token.symbol?.toUpperCase?.();\n\n if (!symbol) {\n return;\n }\n\n const showValue = (token as any)?.meta?.show;\n\n if (typeof showValue === \"boolean\") {\n tokenVisibility.set(symbol, showValue);\n }\n });\n\n const isTokenVisible = (symbol?: string) => {\n const normalized = symbol?.toUpperCase();\n\n if (!normalized) {\n return false;\n }\n\n if (BASIC_TOKENS.includes(normalized)) {\n return true;\n }\n\n return tokenVisibility.get(normalized) === true;\n };\n\n try {\n const portfolio: PortfolioResponse = await queryClient.fetchQuery(portfolioQuery);\n const tokensFromPortfolio: string[] = portfolio.wallets.map(\n (asset: PortfolioWalletItem) => asset.symbol\n );\n\n if (tokensFromPortfolio.length > 0) {\n const visibleTokens = tokensFromPortfolio\n .map((token: string) => token?.toUpperCase?.())\n .filter((token: string | undefined): token is string => Boolean(token))\n .filter(isTokenVisible);\n\n if (visibleTokens.length > 0) {\n // Always include basic tokens (HP, HIVE, HBD, POINTS) even if\n // the portfolio API omits them from its response.\n return Array.from(new Set([...BASIC_TOKENS, ...visibleTokens]));\n }\n }\n } catch {\n // Fallback to legacy behaviour when the portfolio endpoint is not accessible.\n }\n\n if (accountTokens.length > 0) {\n const list = [\n ...BASIC_TOKENS,\n ...accountTokens\n .map((token: ProfileToken) => token.symbol)\n .filter(isTokenVisible),\n ];\n\n return Array.from(new Set(list).values());\n }\n\n return [...BASIC_TOKENS];\n },\n });\n}\n","import { AssetOperation } from \"@/modules/assets\";\nimport {\n getQueryClient,\n getPortfolioQueryOptions,\n type PortfolioResponse,\n type PortfolioWalletItem,\n} from \"@ecency/sdk\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getTokenOperationsQueryOptions(\n token: string,\n username: string,\n isForOwner = false,\n currency: string = \"usd\"\n) {\n return queryOptions({\n queryKey: [\"wallets\", \"token-operations\", token, username, isForOwner, currency],\n queryFn: async () => {\n const queryClient = getQueryClient();\n const normalizedToken = token.toUpperCase();\n\n if (!username || !isForOwner) {\n return [] as AssetOperation[];\n }\n\n try {\n const portfolio: PortfolioResponse = await queryClient.fetchQuery(\n getPortfolioQueryOptions(username, currency, true)\n );\n const assetEntry = portfolio.wallets.find(\n (assetItem: PortfolioWalletItem) => assetItem.symbol.toUpperCase() === normalizedToken\n );\n\n if (!assetEntry) {\n return [] as AssetOperation[];\n }\n\n // Extract action IDs and map to AssetOperation enums\n const rawActions: Array<{ id: string; [key: string]: unknown }> = assetEntry.actions ?? [];\n const operations: AssetOperation[] = rawActions\n .map((action: { id: string; [key: string]: unknown } | string) => {\n // Extract the id field from action object\n if (typeof action === \"string\") return action;\n if (action && typeof action === \"object\") {\n const record = action as Record<string, unknown>;\n return (record.id ?? record.code ?? record.name ?? record.action) as string | undefined;\n }\n return undefined;\n })\n .filter((id: string | undefined): id is string => Boolean(id))\n .map((id: string) => {\n // Normalize: underscores to hyphens, lowercase\n const canonical = id.trim().toLowerCase().replace(/[\\s_]+/g, \"-\");\n\n // Primary mapping: API action IDs to AssetOperation enum values\n const aliasMap: Record<string, AssetOperation> = {\n // Common operations\n \"transfer\": AssetOperation.Transfer,\n \"ecency-point-transfer\": AssetOperation.Transfer,\n \"spkcc-spk-send\": AssetOperation.Transfer,\n\n // Savings operations\n \"transfer-to-savings\": AssetOperation.TransferToSavings,\n \"transfer-savings\": AssetOperation.TransferToSavings,\n \"savings-transfer\": AssetOperation.TransferToSavings,\n \"withdraw-from-savings\": AssetOperation.WithdrawFromSavings,\n \"transfer-from-savings\": AssetOperation.WithdrawFromSavings,\n \"withdraw-savings\": AssetOperation.WithdrawFromSavings,\n \"savings-withdraw\": AssetOperation.WithdrawFromSavings,\n\n // Vesting/Power operations\n \"transfer-to-vesting\": AssetOperation.PowerUp,\n \"powerup\": AssetOperation.PowerUp,\n \"power-up\": AssetOperation.PowerUp,\n \"withdraw-vesting\": AssetOperation.PowerDown,\n \"power-down\": AssetOperation.PowerDown,\n \"powerdown\": AssetOperation.PowerDown,\n\n // Delegation\n \"delegate\": AssetOperation.Delegate,\n \"delegate-vesting-shares\": AssetOperation.Delegate,\n \"hp-delegate\": AssetOperation.Delegate,\n \"delegate-hp\": AssetOperation.Delegate,\n \"delegate-power\": AssetOperation.Delegate,\n \"undelegate\": AssetOperation.Undelegate,\n \"undelegate-power\": AssetOperation.Undelegate,\n \"undelegate-token\": AssetOperation.Undelegate,\n\n // Staking (Layer 2)\n \"stake\": AssetOperation.Stake,\n \"stake-token\": AssetOperation.Stake,\n \"stake-power\": AssetOperation.Stake,\n \"unstake\": AssetOperation.Unstake,\n \"unstake-token\": AssetOperation.Unstake,\n \"unstake-power\": AssetOperation.Unstake,\n\n // Swap/Convert\n \"swap\": AssetOperation.Swap,\n \"swap-token\": AssetOperation.Swap,\n \"swap-tokens\": AssetOperation.Swap,\n \"convert\": AssetOperation.Convert,\n\n // Points operations\n \"promote\": AssetOperation.Promote,\n \"promote-post\": AssetOperation.Promote,\n \"promote-entry\": AssetOperation.Promote,\n \"boost\": AssetOperation.Promote,\n \"gift\": AssetOperation.Gift,\n \"gift-points\": AssetOperation.Gift,\n \"points-gift\": AssetOperation.Gift,\n \"claim\": AssetOperation.Claim,\n \"claim-rewards\": AssetOperation.Claim,\n \"claim-points\": AssetOperation.Claim,\n \"buy\": AssetOperation.Buy,\n \"buy-points\": AssetOperation.Buy,\n\n // Other\n \"claim-interest\": AssetOperation.ClaimInterest,\n \"withdraw-routes\": AssetOperation.WithdrawRoutes,\n \"withdrawroutes\": AssetOperation.WithdrawRoutes,\n \"lock\": AssetOperation.LockLiquidity,\n \"lock-liquidity\": AssetOperation.LockLiquidity,\n \"lock-liq\": AssetOperation.LockLiquidity,\n };\n\n // Check alias map first (primary method)\n const mapped = aliasMap[canonical];\n if (mapped) return mapped;\n\n // Fallback: try direct enum value match (for exact matches like \"transfer\", \"promote\")\n const directMatch = Object.values(AssetOperation).find(\n (op) => op.toLowerCase() === canonical\n );\n return directMatch;\n })\n .filter((op: AssetOperation | undefined): op is AssetOperation => Boolean(op))\n // Remove duplicates - API may return multiple actions that map to same operation\n .filter((op: AssetOperation, index: number, self: AssetOperation[]) => self.indexOf(op) === index);\n\n const isHiveOrHbd = [\"HIVE\", \"HBD\"].includes(normalizedToken);\n // Check if there's a non-zero savings balance\n const rawToken = assetEntry as any;\n const hasSavings = Number(rawToken.savings ?? 0) > 0;\n\n if (\n isHiveOrHbd &&\n !hasSavings\n ) {\n return operations.filter(\n (operation) => operation !== AssetOperation.WithdrawFromSavings\n );\n }\n\n return operations;\n } catch {\n return [];\n }\n },\n });\n}\n","import { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { EcencyWalletCurrency } from \"../enums\";\nimport { EcencyTokenMetadata } from \"../types\";\n\nexport function useWalletsCacheQuery(username?: string) {\n const queryClient = useQueryClient();\n const queryKey = [\"ecency-wallets\", \"wallets\", username] as const;\n\n const getCachedWallets = () =>\n queryClient.getQueryData<Map<EcencyWalletCurrency, EcencyTokenMetadata>>(queryKey);\n\n const createEmptyWalletMap = () =>\n new Map<EcencyWalletCurrency, EcencyTokenMetadata>();\n\n return useQuery<Map<EcencyWalletCurrency, EcencyTokenMetadata>>({\n queryKey,\n enabled: Boolean(username),\n initialData: () => getCachedWallets() ?? createEmptyWalletMap(),\n queryFn: async () => getCachedWallets() ?? createEmptyWalletMap(),\n staleTime: Infinity,\n });\n}\n","import { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { useSeedPhrase } from \"@/modules/wallets/queries\";\nimport { EcencyTokenMetadata } from \"@/modules/wallets/types\";\nimport { delay, getWallet } from \"@/modules/wallets/utils\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\n\nconst PATHS = {\n [EcencyWalletCurrency.BTC]: \"m/44'/0'/0'/0/0\", // Bitcoin (BIP44)\n [EcencyWalletCurrency.ETH]: \"m/44'/60'/0'/0/0\", // Ethereum (BIP44)\n [EcencyWalletCurrency.BNB]: \"m/44'/60'/0'/0/0\", // BNB Smart Chain (BIP44)\n [EcencyWalletCurrency.SOL]: \"m/44'/501'/0'/0'\", // Solana (BIP44)\n [EcencyWalletCurrency.TON]: \"m/44'/607'/0'\", // TON (BIP44)\n [EcencyWalletCurrency.TRON]: \"m/44'/195'/0'/0/0\", // Tron (BIP44)\n [EcencyWalletCurrency.APT]: \"m/44'/637'/0'/0'/0'\", // Aptos (BIP44)\n} as const;\n\n/**\n * Uses for creating wallet logically in the application\n *\n * Keep attention: this mutation doesn't save wallet to somewhere in a server\n */\nexport function useWalletCreate(\n username: string,\n currency: EcencyWalletCurrency,\n importedSeed?: string\n) {\n const { data: generatedMnemonic } = useSeedPhrase(username);\n const queryClient = useQueryClient();\n\n const createWallet = useMutation({\n mutationKey: [\"ecency-wallets\", \"create-wallet\", username, currency],\n mutationFn: async () => {\n const mnemonic = importedSeed || generatedMnemonic;\n if (!mnemonic) {\n throw new Error(\"[Ecency][Wallets] - No seed to create a wallet\");\n }\n\n const wallet = getWallet(currency);\n const privateKey = await wallet?.getDerivedPrivateKey({\n mnemonic,\n hdPath: PATHS[currency],\n });\n await delay(1000);\n const address = (await wallet?.getNewAddress({\n privateKey,\n })) as { address: string; publicKey: string };\n return {\n privateKey,\n address: address.address,\n publicKey: address.publicKey,\n username,\n currency,\n } as EcencyTokenMetadata;\n },\n onSuccess: (info) => {\n queryClient.setQueryData<Map<EcencyWalletCurrency, EcencyTokenMetadata>>(\n [\"ecency-wallets\", \"wallets\", info.username],\n (data) =>\n new Map(data ? Array.from(data.entries()) : []).set(\n info.currency as EcencyWalletCurrency,\n info\n )\n );\n },\n });\n const importWallet = () => {};\n\n return {\n createWallet,\n importWallet,\n };\n}\n","export * from \"./create-account-with-wallets\";\nexport * from \"./check-wallet-existence\";\nexport * from \"./update-account-with-wallets\";\n","import { ConfigManager } from \"@ecency/sdk\";\nimport { useHiveKeysQuery, useWalletsCacheQuery } from \"@/modules/wallets/queries\";\nimport { getBoundFetch } from \"@/modules/wallets/utils\";\nimport { useMutation } from \"@tanstack/react-query\";\n\ninterface Payload {\n currency: string;\n address: string;\n}\n\nexport function useCreateAccountWithWallets(username: string) {\n const { data } = useWalletsCacheQuery(username);\n const { data: hiveKeys } = useHiveKeysQuery(username);\n\n const fetchApi = getBoundFetch();\n\n return useMutation({\n mutationKey: [\"ecency-wallets\", \"create-account-with-wallets\", username],\n mutationFn: ({ currency, address }: Payload) =>\n fetchApi(`${ConfigManager.getValidatedBaseUrl()}/private-api/wallets-add`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n username,\n token: currency,\n address,\n meta: {\n ownerPublicKey: hiveKeys?.ownerPubkey,\n activePublicKey: hiveKeys?.activePubkey,\n postingPublicKey: hiveKeys?.postingPubkey,\n memoPublicKey: hiveKeys?.memoPubkey,\n\n ...Array.from(data?.entries() ?? []).reduce(\n (acc, [curr, info]) => ({\n ...acc,\n [curr]: info.address,\n }),\n {}\n ),\n },\n }),\n }),\n });\n}\n","import { ConfigManager } from \"@ecency/sdk\";\nimport { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { useMutation } from \"@tanstack/react-query\";\n\ninterface Payload {\n address: string;\n currency: EcencyWalletCurrency;\n}\n\nexport function useCheckWalletExistence() {\n return useMutation({\n mutationKey: [\"ecency-wallets\", \"check-wallet-existence\"],\n mutationFn: async ({ address, currency }: Payload) => {\n const response = await fetch(\n `${ConfigManager.getValidatedBaseUrl()}/private-api/wallets-exist`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n address,\n token: currency,\n }),\n }\n );\n const data = await response.json();\n return data.length === 0;\n },\n });\n}\n","import { ConfigManager } from \"@ecency/sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { getBoundFetch } from \"@/modules/wallets/utils\";\n\ninterface Payload {\n tokens: Record<string, string>;\n hiveKeys: {\n ownerPublicKey: string;\n activePublicKey: string;\n postingPublicKey: string;\n memoPublicKey: string;\n };\n}\n\nexport function useUpdateAccountWithWallets(\n username: string,\n accessToken: string | undefined\n) {\n const fetchApi = getBoundFetch();\n\n return useMutation({\n mutationKey: [\"ecency-wallets\", \"update-account-with-wallets\", username],\n mutationFn: async ({ tokens, hiveKeys }: Payload) => {\n const entries = Object.entries(tokens).filter(([, address]) => Boolean(address));\n\n if (entries.length === 0) {\n return new Response(null, { status: 204 });\n }\n\n const [primaryToken, primaryAddress] = entries[0] ?? [\"\", \"\"];\n\n if (!accessToken) {\n throw new Error(\n \"[SDK][Wallets][PrivateApi][WalletsAdd] – access token wasn`t found\"\n );\n }\n\n return fetchApi(`${ConfigManager.getValidatedBaseUrl()}/private-api/wallets-add`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n username,\n code: accessToken,\n token: primaryToken,\n address: primaryAddress,\n status: 3,\n meta: {\n ...Object.fromEntries(entries),\n ownerPublicKey: hiveKeys.ownerPublicKey,\n activePublicKey: hiveKeys.activePublicKey,\n postingPublicKey: hiveKeys.postingPublicKey,\n memoPublicKey: hiveKeys.memoPublicKey,\n },\n }),\n });\n },\n });\n}\n","import { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { BaseWallet } from \"@okxweb3/coin-base\";\n\n/**\n * These HD paths covers popular wallets like Trust, Meta, Ledger, Trezor\n * Supports also XVerse\n */\nconst HD_PATHS: Record<EcencyWalletCurrency, string[]> = {\n [EcencyWalletCurrency.BTC]: [\"m/84'/0'/0'/0/0\"],\n [EcencyWalletCurrency.ETH]: [\"m/84'/60'/0'/0/0\"], // its not working for Trust, Exodus, todo: check others below\n [EcencyWalletCurrency.BNB]: [\"m/84'/60'/0'/0/0\"],\n [EcencyWalletCurrency.SOL]: [\"m/84'/501'/0'/0/0\"],\n [EcencyWalletCurrency.TRON]: [\"m/44'/195'/0'/0'/0'\"],\n [EcencyWalletCurrency.APT]: [\"m/84'/637'/0'/0/0\"],\n [EcencyWalletCurrency.TON]: [\"m/44'/607'/0'\"],\n};\n\nexport async function getKeysFromSeed(\n mnemonic: string,\n wallet: BaseWallet,\n currency: EcencyWalletCurrency\n) {\n for (const hdPath of HD_PATHS[currency] || []) {\n try {\n const derivedPrivateKey = await wallet.getDerivedPrivateKey({\n mnemonic,\n hdPath,\n });\n\n const derivedPublicKey = await wallet.getNewAddress({\n privateKey: derivedPrivateKey,\n addressType:\n currency === EcencyWalletCurrency.BTC ? \"segwit_native\" : undefined,\n });\n\n return [derivedPrivateKey.toString(), derivedPublicKey.address] as const;\n } catch (error) {\n return [];\n }\n }\n return [];\n}\n","import { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { getKeysFromSeed } from \"@/modules/wallets/functions\";\nimport { EcencyTokenMetadata } from \"@/modules/wallets/types\";\nimport { getWallet } from \"@/modules/wallets/utils\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { EcencyWalletsPrivateApi } from \"./private-api-namespace\";\n\ninterface Payload {\n privateKeyOrSeed: string;\n}\n\n/**\n * This mutation uses for importing an existing wallet, validation and saving logically in application\n *\n * Keep attention: this mutation doesn't save wallet to somewhere in a server\n */\nexport function useImportWallet(\n username: string,\n currency: EcencyWalletCurrency\n) {\n const queryClient = useQueryClient();\n const { mutateAsync: checkWalletExistence } =\n EcencyWalletsPrivateApi.useCheckWalletExistence();\n\n return useMutation({\n mutationKey: [\"ecency-wallets\", \"import-wallet\", username, currency],\n mutationFn: async ({ privateKeyOrSeed }: Payload) => {\n const wallet = getWallet(currency);\n\n if (!wallet) {\n throw new Error(\"Cannot find token for this currency\");\n }\n\n const isSeed = privateKeyOrSeed.split(\" \").length === 12;\n let address;\n let privateKey = privateKeyOrSeed;\n\n if (isSeed) {\n [privateKey, address] = await getKeysFromSeed(\n privateKeyOrSeed,\n wallet,\n currency\n );\n } else {\n address = (\n await wallet.getNewAddress({\n privateKey: privateKeyOrSeed,\n })\n ).address;\n }\n\n if (!address || !privateKeyOrSeed) {\n throw new Error(\n \"Private key/seed phrase isn't matching with public key or token\"\n );\n }\n\n // Check wallet for existence in an Ecency's private API\n const hasChecked = await checkWalletExistence({\n address,\n currency,\n });\n if (!hasChecked) {\n throw new Error(\n \"This wallet has already in use by Hive account. Please, try another one\"\n );\n }\n\n return {\n privateKey,\n address,\n publicKey: \"\",\n };\n },\n onSuccess: ({ privateKey, publicKey, address }) => {\n queryClient.setQueryData<Map<EcencyWalletCurrency, EcencyTokenMetadata>>(\n [\"ecency-wallets\", \"wallets\", username],\n (data) =>\n new Map(data ? Array.from(data.entries()) : []).set(currency, {\n privateKey,\n publicKey,\n address,\n username,\n currency,\n type: \"CHAIN\",\n custom: true,\n })\n );\n },\n });\n}\n","import {\n AccountProfile,\n getAccountFullQueryOptions,\n useAccountUpdate,\n type AuthContext,\n} from \"@ecency/sdk\";\nimport {\n useMutation,\n useQuery,\n useQueryClient,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { EcencyTokenMetadata } from \"../types\";\nimport * as R from \"remeda\";\nimport { getAccountWalletListQueryOptions } from \"../queries\";\nimport { EcencyWalletCurrency } from \"../enums\";\n\nfunction getGroupedChainTokens(\n tokens?: AccountProfile[\"tokens\"],\n defaultShow?: boolean\n) {\n if (!tokens) {\n return {};\n }\n\n return R.pipe(\n tokens,\n R.filter(\n ({ type, symbol }) =>\n type === \"CHAIN\" ||\n Object.values(EcencyWalletCurrency).includes(symbol as any)\n ),\n R.map((item) => {\n const meta = {\n ...(item.meta ?? {}),\n } as Record<string, unknown>;\n\n if (typeof meta.show !== \"boolean\" && typeof defaultShow === \"boolean\") {\n meta.show = defaultShow;\n }\n\n return {\n ...item,\n meta,\n };\n }),\n // Chain tokens are unique by symbol, so indexing by symbol\n // gives a direct lookup map instead of an array-based grouping.\n R.indexBy(\n (item: NonNullable<AccountProfile[\"tokens\"]>[number]) => item.symbol\n )\n );\n}\n\n/**\n * Saving of token(s) metadata to Hive profile\n * It may contain: external wallets(see EcencyWalletCurrency), Hive tokens arrangement\n *\n * Basically, this mutation is a convenient wrapper for update profile operation\n */\ntype SaveWalletInformationOptions = Pick<\n UseMutationOptions<unknown, Error, EcencyTokenMetadata[]>,\n \"onSuccess\" | \"onError\"\n>;\n\nexport function useSaveWalletInformationToMetadata(\n username: string,\n auth?: AuthContext,\n options?: SaveWalletInformationOptions\n) {\n const queryClient = useQueryClient();\n\n const { data: accountData } = useQuery(getAccountFullQueryOptions(username));\n const { mutateAsync: updateProfile } = useAccountUpdate(username, auth);\n\n return useMutation({\n mutationKey: [\n \"ecency-wallets\",\n \"save-wallet-to-metadata\",\n accountData?.name,\n ],\n mutationFn: async (tokens: EcencyTokenMetadata[]) => {\n if (!accountData) {\n throw new Error(\"[SDK][Wallets] – no account data to save wallets\");\n }\n\n // Chain type tokens couldn't be deleted entirely from the profile list,\n // then visibility should be controlling using meta.show field\n const profileChainTokens = getGroupedChainTokens(\n accountData.profile?.tokens\n );\n\n const payloadTokens =\n (tokens.map(({ currency, type, privateKey, username, ...meta }) => ({\n symbol: currency!,\n type:\n type ??\n (Object.values(EcencyWalletCurrency).includes(currency as any)\n ? \"CHAIN\"\n : undefined),\n meta,\n })) as AccountProfile[\"tokens\"]) ?? [];\n\n const payloadChainTokens = getGroupedChainTokens(payloadTokens, true);\n const payloadNonChainTokens = payloadTokens.filter(\n ({ type, symbol }) =>\n type !== \"CHAIN\" &&\n !Object.values(EcencyWalletCurrency).includes(symbol as any)\n );\n\n const mergedChainTokens = R.pipe(\n profileChainTokens,\n R.mergeDeep(payloadChainTokens),\n R.values()\n );\n\n return updateProfile({\n tokens: [\n ...payloadNonChainTokens,\n ...mergedChainTokens,\n ] as AccountProfile[\"tokens\"],\n });\n },\n onError: options?.onError,\n onSuccess: (response, vars, context) => {\n (\n options?.onSuccess as\n | ((\n data: unknown,\n variables: EcencyTokenMetadata[],\n context: unknown\n ) => unknown)\n | undefined\n )?.(response, vars, context);\n queryClient.invalidateQueries({\n queryKey: getAccountWalletListQueryOptions(username).queryKey,\n });\n },\n });\n}\n","import { rememberScryptBsvVersion } from \"./internal/scrypt-guard\";\n\nrememberScryptBsvVersion();\n\nexport * from \"./modules/wallets\";\nexport * from \"./modules/assets\";\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ecency/wallets",
3
3
  "private": false,
4
- "version": "1.5.40",
4
+ "version": "1.5.42",
5
5
  "description": "Ecency wallets",
6
6
  "repository": {
7
7
  "type": "git",