@ecency/wallets 2.0.6 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/browser/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import * as R from 'remeda';
|
|
|
5
5
|
import { LRUCache } from 'lru-cache';
|
|
6
6
|
import { mnemonicToSeedSync } from 'bip39';
|
|
7
7
|
import { HDKey } from '@scure/bip32';
|
|
8
|
-
import { PrivateKey } from '@
|
|
8
|
+
import { PrivateKey } from '@ecency/hive-tx';
|
|
9
9
|
|
|
10
10
|
var __defProp = Object.defineProperty;
|
|
11
11
|
var __export = (target, all) => {
|
|
@@ -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/mutations/private-api/index.ts","../../src/modules/wallets/utils/get-bound-fetch.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/queries/use-get-external-wallet-query.ts","../../src/modules/wallets/queries/get-token-price-query-options.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/mutations/save-wallet-information-to-metadata.ts","../../src/modules/wallets/utils/metamask-evm-transfer.ts","../../src/modules/wallets/utils/metamask-sol-transfer.ts","../../src/modules/wallets/mutations/use-external-transfer.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/metamask-discovery.ts","../../src/index.ts"],"names":["EcencyWalletCurrency","EcencyWalletBasicTokens","useMutation","ConfigManager","queryOptions","getQueryClient","getPortfolioQueryOptions","options","useQuery","getAccountFullQueryOptions","username","AMOUNT_REGEX","useQueryClient","PrivateKey"],"mappings":"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","file":"index.js","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 SOL = \"SOL\",\n}\n","export enum EcencyWalletBasicTokens {\n Points = \"POINTS\",\n HivePower = \"HP\",\n Hive = \"HIVE\",\n HiveDollar = \"HBD\"\n}\n","export * from \"./create-account-with-wallets\";\nexport * from \"./check-wallet-existence\";\nexport * from \"./update-account-with-wallets\";\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 { ConfigManager } from \"@ecency/sdk\";\nimport { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { getBoundFetch } from \"@/modules/wallets/utils/get-bound-fetch\";\nimport { useMutation } from \"@tanstack/react-query\";\n\ninterface HiveKeys {\n ownerPublicKey?: string;\n activePublicKey?: string;\n postingPublicKey?: string;\n memoPublicKey?: string;\n}\n\ninterface Payload {\n currency: EcencyWalletCurrency;\n address: string;\n hiveKeys?: HiveKeys;\n walletAddresses?: Partial<Record<EcencyWalletCurrency, string>>;\n}\n\nexport function useCreateAccountWithWallets(username: string) {\n const fetchApi = getBoundFetch();\n\n return useMutation({\n mutationKey: [\"ecency-wallets\", \"create-account-with-wallets\", username],\n mutationFn: async ({ currency, address, hiveKeys, walletAddresses }: Payload) => {\n const addresses: Record<string, string> = {};\n if (walletAddresses) {\n for (const [k, v] of Object.entries(walletAddresses)) {\n if (v) addresses[k] = v;\n }\n }\n\n const response = await 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 ...hiveKeys,\n ...addresses,\n [currency]: address\n },\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Account creation failed (${response.status})`);\n }\n\n return response;\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/get-bound-fetch\";\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 { 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};\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 { 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.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","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 {\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 { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\n\ninterface RequestArguments {\n method: string;\n params?: unknown[] | Record<string, unknown>;\n}\n\ninterface EthereumProvider {\n isMetaMask?: boolean;\n request<T = unknown>(args: RequestArguments): Promise<T>;\n}\n\ndeclare global {\n interface Window {\n ethereum?: EthereumProvider;\n }\n}\n\nfunction getEthereum(): EthereumProvider {\n if (typeof window === \"undefined\" || !window.ethereum) {\n throw new Error(\"MetaMask not found\");\n }\n return window.ethereum;\n}\n\nconst WEI_PER_ETH = 1000000000000000000n;\n\nconst EVM_CHAIN_CONFIG: Record<string, { chainId: string; name: string; rpcUrl: string; explorerUrl: string }> = {\n [EcencyWalletCurrency.ETH]: {\n chainId: \"0x1\",\n name: \"Ethereum Mainnet\",\n rpcUrl: \"https://rpc.ankr.com/eth\",\n explorerUrl: \"https://etherscan.io/tx/\"\n },\n [EcencyWalletCurrency.BNB]: {\n chainId: \"0x38\",\n name: \"BNB Smart Chain\",\n rpcUrl: \"https://bsc-dataseed.binance.org\",\n explorerUrl: \"https://bscscan.com/tx/\"\n }\n};\n\nexport function getEvmChainConfig(currency: EcencyWalletCurrency) {\n const config = EVM_CHAIN_CONFIG[currency];\n if (!config) throw new Error(`Unsupported EVM currency: ${currency}`);\n return config;\n}\n\nexport function getEvmExplorerUrl(currency: EcencyWalletCurrency, txHash: string) {\n return `${getEvmChainConfig(currency).explorerUrl}${txHash}`;\n}\n\nexport async function ensureEvmChain(currency: EcencyWalletCurrency): Promise<void> {\n const ethereum = getEthereum();\n\n const { chainId, name, rpcUrl } = getEvmChainConfig(currency);\n const currentChainId = await ethereum.request<string>({ method: \"eth_chainId\" });\n\n if (currentChainId === chainId) return;\n\n try {\n await ethereum.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId }]\n });\n } catch (err: unknown) {\n // Chain not added — add it\n if (typeof err === \"object\" && err !== null && \"code\" in err && (err as { code: number }).code === 4902) {\n await ethereum.request({\n method: \"wallet_addEthereumChain\",\n params: [{\n chainId,\n chainName: name,\n rpcUrls: [rpcUrl],\n nativeCurrency: {\n name: currency === EcencyWalletCurrency.ETH ? \"Ether\" : \"BNB\",\n symbol: currency === EcencyWalletCurrency.ETH ? \"ETH\" : \"BNB\",\n decimals: 18\n }\n }]\n });\n } else {\n throw err;\n }\n }\n}\n\nexport async function estimateEvmGas(\n from: string,\n to: string,\n valueHex: string,\n currency: EcencyWalletCurrency\n): Promise<{ gasLimit: string; gasPrice: string; estimatedFeeWei: bigint }> {\n const ethereum = getEthereum();\n\n await ensureEvmChain(currency);\n\n const [gasLimit, gasPrice] = await Promise.all([\n ethereum.request<string>({\n method: \"eth_estimateGas\",\n params: [{ from, to, value: valueHex }]\n }),\n ethereum.request<string>({ method: \"eth_gasPrice\" })\n ]);\n\n const estimatedFeeWei = BigInt(gasLimit) * BigInt(gasPrice);\n\n return { gasLimit, gasPrice, estimatedFeeWei };\n}\n\nexport function formatWei(wei: bigint, decimals = 6): string {\n const whole = wei / WEI_PER_ETH;\n const rem = wei % WEI_PER_ETH;\n if (rem === 0n) return whole.toString();\n\n const scale = 10n ** BigInt(decimals);\n const fractional = (rem * scale) / WEI_PER_ETH;\n const fracStr = fractional.toString().padStart(decimals, \"0\").replace(/0+$/, \"\");\n return fracStr ? `${whole}.${fracStr}` : whole.toString();\n}\n\nconst AMOUNT_REGEX = /^\\d+(\\.\\d+)?$/;\n\nexport function parseToWei(amount: string): string {\n const trimmed = amount.trim();\n if (!AMOUNT_REGEX.test(trimmed)) {\n throw new Error(`Invalid amount: \"${amount}\"`);\n }\n\n const [whole, fraction = \"\"] = trimmed.split(\".\");\n if (!/^\\d+$/.test(whole) || (fraction && !/^\\d+$/.test(fraction))) {\n throw new Error(`Invalid amount: \"${amount}\"`);\n }\n\n const paddedFraction = fraction.padEnd(18, \"0\").slice(0, 18);\n const wei = BigInt(whole) * WEI_PER_ETH + BigInt(paddedFraction);\n return \"0x\" + wei.toString(16);\n}\n\nexport async function sendEvmTransfer(\n to: string,\n amountWei: string,\n currency: EcencyWalletCurrency\n): Promise<string> {\n const ethereum = getEthereum();\n\n await ensureEvmChain(currency);\n\n const accounts = await ethereum.request<string[]>({ method: \"eth_requestAccounts\" });\n const from = accounts[0];\n if (!from) throw new Error(\"No MetaMask account connected\");\n\n const txHash = await ethereum.request<string>({\n method: \"eth_sendTransaction\",\n params: [{\n from,\n to,\n value: amountWei\n }]\n });\n\n return txHash;\n}\n","import { ConfigManager } from \"@ecency/sdk\";\n\nconst SOL_EXPLORER_URL = \"https://explorer.solana.com/tx/\";\nconst LAMPORTS_PER_SOL = 1_000_000_000n;\nconst AMOUNT_REGEX = /^\\d+(\\.\\d+)?$/;\n\nexport function getSolExplorerUrl(signature: string) {\n return `${SOL_EXPLORER_URL}${signature}`;\n}\n\nexport function parseToLamports(amount: string): bigint {\n const trimmed = amount.trim();\n if (!AMOUNT_REGEX.test(trimmed)) {\n throw new Error(`Invalid amount: \"${amount}\"`);\n }\n\n const [whole, fraction = \"\"] = trimmed.split(\".\");\n if (!/^\\d+$/.test(whole) || (fraction && !/^\\d+$/.test(fraction))) {\n throw new Error(`Invalid amount: \"${amount}\"`);\n }\n\n if (fraction.length > 9 && fraction.slice(9).replace(/0/g, \"\").length > 0) {\n throw new Error(`Amount has more than 9 decimal places: \"${amount}\"`);\n }\n\n const paddedFraction = fraction.padEnd(9, \"0\").slice(0, 9);\n return BigInt(whole) * LAMPORTS_PER_SOL + BigInt(paddedFraction);\n}\n\nexport function formatLamports(lamports: bigint, decimals = 6): string {\n const whole = lamports / LAMPORTS_PER_SOL;\n const rem = lamports % LAMPORTS_PER_SOL;\n if (rem === 0n) return whole.toString();\n\n const scale = 10n ** BigInt(decimals);\n const fractional = (rem * scale) / LAMPORTS_PER_SOL;\n const fracStr = fractional.toString().padStart(decimals, \"0\").replace(/0+$/, \"\");\n return fracStr ? `${whole}.${fracStr}` : whole.toString();\n}\n\ninterface JsonRpcResponse<T> {\n jsonrpc: string;\n id: number | string;\n result?: T;\n error?: { code?: number; message?: string };\n}\n\n/**\n * Call a Solana JSON-RPC method via the Ecency private API proxy.\n * This avoids hitting the public Solana RPC directly from the browser\n * (which returns 403). The proxy forwards to a Chainstack dedicated node.\n */\nasync function solRpc<T>(method: string, params: unknown[] = []): Promise<T> {\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const response = await fetch(`${baseUrl}/private-api/rpc/sol`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ jsonrpc: \"2.0\", id: 1, method, params })\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => \"\");\n throw new Error(`SOL RPC ${method} failed: ${response.status} ${response.statusText}${text ? ` — ${text}` : \"\"}`);\n }\n\n const json: JsonRpcResponse<T> = await response.json();\n if (json.error) {\n throw new Error(json.error.message || `SOL RPC ${method} failed`);\n }\n return json.result as T;\n}\n\nasync function getMetaMaskSolanaWallet(): Promise<any> {\n const { getWallets } = await import(\"@wallet-standard/app\");\n const walletsApi = getWallets();\n const wallets = walletsApi.get();\n\n // Only select a MetaMask wallet that supports Solana signing\n const mmWallet = wallets.find(\n (w: any) =>\n w.name.toLowerCase().includes(\"metamask\") &&\n w.features[\"standard:connect\"] &&\n w.features[\"solana:signAndSendTransaction\"]\n );\n\n if (!mmWallet) {\n throw new Error(\"MetaMask Solana wallet not found. Enable Solana in MetaMask settings.\");\n }\n\n return mmWallet;\n}\n\nexport async function sendSolTransfer(\n to: string,\n amountSol: string\n): Promise<string> {\n const mmWallet = await getMetaMaskSolanaWallet();\n\n // Connect to get accounts\n const connectFeature = mmWallet.features[\"standard:connect\"] as any;\n await connectFeature.connect();\n\n const solAccount = mmWallet.accounts?.find(\n (acc: any) => acc.chains?.some((c: string) => c.startsWith(\"solana:\"))\n );\n\n if (!solAccount) {\n throw new Error(\"No Solana account found in MetaMask.\");\n }\n\n // Use @solana/web3.js for transaction building (dynamic import to avoid bundle bloat)\n const { PublicKey, SystemProgram, Transaction } = await import(\"@solana/web3.js\");\n\n const fromPubkey = new PublicKey(solAccount.address);\n const toPubkey = new PublicKey(to);\n const lamports = parseToLamports(amountSol);\n\n const transaction = new Transaction().add(\n SystemProgram.transfer({\n fromPubkey,\n toPubkey,\n lamports\n })\n );\n\n // Fetch blockhash via Ecency RPC proxy (avoids 403 from public Solana RPC)\n const blockhashResult = await solRpc<{ value: { blockhash: string } }>(\n \"getLatestBlockhash\",\n [{ commitment: \"finalized\" }]\n );\n transaction.recentBlockhash = blockhashResult.value.blockhash;\n transaction.feePayer = fromPubkey;\n\n // Serialize the transaction for signing via Wallet Standard\n const serializedTx = transaction.serialize({\n requireAllSignatures: false,\n verifySignatures: false\n });\n\n const signAndSendFeature = mmWallet.features[\"solana:signAndSendTransaction\"] as any;\n if (!signAndSendFeature) {\n throw new Error(\"MetaMask does not support Solana transaction signing. Please update MetaMask.\");\n }\n\n const [result] = await signAndSendFeature.signAndSendTransaction({\n account: solAccount,\n transaction: serializedTx,\n chain: \"solana:mainnet\"\n });\n\n // Result contains the signature — either a string or Uint8Array\n if (typeof result.signature === \"string\") {\n return result.signature;\n }\n\n // Encode Uint8Array to base58 (standard Solana signature format)\n const { base58 } = await import(\"@scure/base\");\n return base58.encode(new Uint8Array(result.signature));\n}\n","import { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { sendEvmTransfer, parseToWei } from \"@/modules/wallets/utils/metamask-evm-transfer\";\nimport { sendSolTransfer } from \"@/modules/wallets/utils/metamask-sol-transfer\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\n\nexport type TransferableCurrency =\n | EcencyWalletCurrency.ETH\n | EcencyWalletCurrency.BNB\n | EcencyWalletCurrency.SOL;\n\ninterface ExternalTransferPayload {\n to: string;\n amount: string;\n}\n\nexport function useExternalTransfer(currency: TransferableCurrency) {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationKey: [\"ecency-wallets\", \"external-transfer\", currency],\n mutationFn: async ({ to, amount }: ExternalTransferPayload) => {\n switch (currency) {\n case EcencyWalletCurrency.ETH:\n case EcencyWalletCurrency.BNB: {\n const valueHex = parseToWei(amount);\n const txHash = await sendEvmTransfer(to, valueHex, currency);\n return { txHash, currency };\n }\n case EcencyWalletCurrency.SOL: {\n const signature = await sendSolTransfer(to, amount);\n return { txHash: signature, currency };\n }\n }\n },\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: [\"ecency-wallets\", \"external-wallet-balance\"]\n });\n }\n });\n}\n","import { mnemonicToSeedSync } from \"bip39\";\nimport { HDKey } from \"@scure/bip32\";\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 = HDKey.fromMasterSeed(seed);\n const path = `m/44'/3054'/${accountIndex}'/0'/${ROLE_INDEX[role]}'`;\n const child = master.derive(path);\n if (!child.privateKey) {\n throw new Error(\"[Ecency][Wallets] - hive key derivation failed\");\n }\n const pk = PrivateKey.from(Buffer.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 { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\n\nexport type WalletAddressMap = Partial<Record<EcencyWalletCurrency, string>>;\n\n/** Chain prefixes we look for in Wallet Standard accounts */\nconst CHAIN_PREFIX_MAP: Record<string, EcencyWalletCurrency> = {\n \"solana:\": EcencyWalletCurrency.SOL,\n \"bip122:\": EcencyWalletCurrency.BTC\n};\n\nconst HIVE_SNAP_ID = \"npm:@hiveio/metamask-snap\";\n\nexport interface HivePublicKey {\n publicKey: string;\n role?: string;\n accountIndex: number;\n addressIndex: number;\n}\n\ninterface WalletStandardWallet {\n name: string;\n chains: readonly string[];\n features: Record<string, unknown>;\n accounts: ReadonlyArray<{\n address: string;\n chains: readonly string[];\n }>;\n}\n\n/**\n * Fetch non-EVM addresses from MetaMask via the Wallet Standard protocol.\n *\n * MetaMask registers non-EVM wallets (Solana, Bitcoin) as separate Wallet Standard\n * wallets — they are NOT accessible through window.ethereum (EVM-only provider).\n */\nexport async function fetchMultichainAddresses(): Promise<WalletAddressMap> {\n const addresses: WalletAddressMap = {};\n\n try {\n const { getWallets } = await import(\"@wallet-standard/app\");\n const walletsApi = getWallets();\n const wallets = walletsApi.get();\n\n // Iterate ALL MetaMask wallet registrations — MetaMask may expose\n // separate entries per chain (e.g., one for Solana, one for Bitcoin)\n const mmWallets = wallets.filter(\n (w: WalletStandardWallet) =>\n w.name.toLowerCase().includes(\"metamask\") &&\n w.features[\"standard:connect\"]\n ) as WalletStandardWallet[];\n\n for (const mmWallet of mmWallets) {\n try {\n const connectFeature = mmWallet.features[\"standard:connect\"] as\n { connect: () => Promise<void> };\n await connectFeature.connect();\n } catch (connectErr) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\"[MetaMask multichain] wallet connect failed, trying next:\", connectErr);\n }\n continue;\n }\n\n for (const account of mmWallet.accounts ?? []) {\n if (!account.address || !Array.isArray(account.chains)) continue;\n\n for (const [prefix, currency] of Object.entries(CHAIN_PREFIX_MAP)) {\n if (addresses[currency]) continue;\n if (account.chains.some((c: string) => c.startsWith(prefix))) {\n addresses[currency] = account.address;\n }\n }\n }\n }\n } catch (e) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\"[MetaMask multichain] wallet standard discovery failed:\", e);\n }\n }\n\n return addresses;\n}\n\n/**\n * Fetch the EVM address from MetaMask via window.ethereum.\n * Returns the first connected account address, or undefined on failure.\n */\nexport async function fetchEvmAddress(): Promise<string | undefined> {\n if (typeof window === \"undefined\" || !window.ethereum?.isMetaMask) return undefined;\n\n try {\n const accounts = await window.ethereum.request({\n method: \"eth_requestAccounts\"\n }) as string[] | undefined;\n\n return accounts?.[0] ?? undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Discover all wallet addresses from MetaMask (EVM + non-EVM).\n * Returns a map of currency -> address. Partial results are returned on failure.\n */\nexport async function discoverMetaMaskWallets(): Promise<WalletAddressMap> {\n const addresses: WalletAddressMap = {};\n\n // EVM address (shared for ETH + BNB)\n const evmAddress = await fetchEvmAddress();\n if (evmAddress) {\n addresses[EcencyWalletCurrency.ETH] = evmAddress;\n addresses[EcencyWalletCurrency.BNB] = evmAddress;\n }\n\n // Non-EVM addresses via Wallet Standard\n const multichainAddresses = await fetchMultichainAddresses();\n Object.assign(addresses, multichainAddresses);\n\n return addresses;\n}\n\n/**\n * Install the Hive Snap in MetaMask.\n */\nexport async function installHiveSnap(): Promise<void> {\n if (typeof window === \"undefined\" || !window.ethereum) {\n throw new Error(\"MetaMask is not available\");\n }\n await window.ethereum.request({\n method: \"wallet_requestSnaps\",\n params: { [HIVE_SNAP_ID]: {} }\n });\n}\n\n/**\n * Get Hive public keys from the MetaMask Hive Snap.\n * Returns owner, active, posting, and memo public keys.\n */\nexport async function getHivePublicKeys(): Promise<HivePublicKey[]> {\n if (typeof window === \"undefined\" || !window.ethereum) {\n throw new Error(\"MetaMask is not available\");\n }\n\n const result = await window.ethereum.request({\n method: \"wallet_invokeSnap\",\n params: {\n snapId: HIVE_SNAP_ID,\n request: {\n method: \"hive_getPublicKeys\",\n params: {\n keys: [\n { role: \"owner\", accountIndex: 0 },\n { role: \"active\", accountIndex: 0 },\n { role: \"posting\", accountIndex: 0 },\n { role: \"memo\", accountIndex: 0 }\n ]\n }\n }\n }\n }) as { publicKeys?: unknown } | undefined;\n\n const keys = result?.publicKeys;\n if (!Array.isArray(keys)) {\n throw new Error(\"Hive Snap returned invalid response — expected publicKeys array\");\n }\n\n return keys as HivePublicKey[];\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/mutations/private-api/index.ts","../../src/modules/wallets/utils/get-bound-fetch.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/queries/use-get-external-wallet-query.ts","../../src/modules/wallets/queries/get-token-price-query-options.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/mutations/save-wallet-information-to-metadata.ts","../../src/modules/wallets/utils/metamask-evm-transfer.ts","../../src/modules/wallets/utils/metamask-sol-transfer.ts","../../src/modules/wallets/mutations/use-external-transfer.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/metamask-discovery.ts","../../src/index.ts"],"names":["EcencyWalletCurrency","EcencyWalletBasicTokens","useMutation","ConfigManager","queryOptions","getQueryClient","getPortfolioQueryOptions","options","useQuery","getAccountFullQueryOptions","username","AMOUNT_REGEX","useQueryClient","PrivateKey"],"mappings":"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","file":"index.js","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 SOL = \"SOL\",\n}\n","export enum EcencyWalletBasicTokens {\n Points = \"POINTS\",\n HivePower = \"HP\",\n Hive = \"HIVE\",\n HiveDollar = \"HBD\"\n}\n","export * from \"./create-account-with-wallets\";\nexport * from \"./check-wallet-existence\";\nexport * from \"./update-account-with-wallets\";\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 { ConfigManager } from \"@ecency/sdk\";\nimport { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { getBoundFetch } from \"@/modules/wallets/utils/get-bound-fetch\";\nimport { useMutation } from \"@tanstack/react-query\";\n\ninterface HiveKeys {\n ownerPublicKey?: string;\n activePublicKey?: string;\n postingPublicKey?: string;\n memoPublicKey?: string;\n}\n\ninterface Payload {\n currency: EcencyWalletCurrency;\n address: string;\n hiveKeys?: HiveKeys;\n walletAddresses?: Partial<Record<EcencyWalletCurrency, string>>;\n}\n\nexport function useCreateAccountWithWallets(username: string) {\n const fetchApi = getBoundFetch();\n\n return useMutation({\n mutationKey: [\"ecency-wallets\", \"create-account-with-wallets\", username],\n mutationFn: async ({ currency, address, hiveKeys, walletAddresses }: Payload) => {\n const addresses: Record<string, string> = {};\n if (walletAddresses) {\n for (const [k, v] of Object.entries(walletAddresses)) {\n if (v) addresses[k] = v;\n }\n }\n\n const response = await 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 ...hiveKeys,\n ...addresses,\n [currency]: address\n },\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Account creation failed (${response.status})`);\n }\n\n return response;\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/get-bound-fetch\";\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 { 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};\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 { 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.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","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 {\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 { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\n\ninterface RequestArguments {\n method: string;\n params?: unknown[] | Record<string, unknown>;\n}\n\ninterface EthereumProvider {\n isMetaMask?: boolean;\n request<T = unknown>(args: RequestArguments): Promise<T>;\n}\n\ndeclare global {\n interface Window {\n ethereum?: EthereumProvider;\n }\n}\n\nfunction getEthereum(): EthereumProvider {\n if (typeof window === \"undefined\" || !window.ethereum) {\n throw new Error(\"MetaMask not found\");\n }\n return window.ethereum;\n}\n\nconst WEI_PER_ETH = 1000000000000000000n;\n\nconst EVM_CHAIN_CONFIG: Record<string, { chainId: string; name: string; rpcUrl: string; explorerUrl: string }> = {\n [EcencyWalletCurrency.ETH]: {\n chainId: \"0x1\",\n name: \"Ethereum Mainnet\",\n rpcUrl: \"https://rpc.ankr.com/eth\",\n explorerUrl: \"https://etherscan.io/tx/\"\n },\n [EcencyWalletCurrency.BNB]: {\n chainId: \"0x38\",\n name: \"BNB Smart Chain\",\n rpcUrl: \"https://bsc-dataseed.binance.org\",\n explorerUrl: \"https://bscscan.com/tx/\"\n }\n};\n\nexport function getEvmChainConfig(currency: EcencyWalletCurrency) {\n const config = EVM_CHAIN_CONFIG[currency];\n if (!config) throw new Error(`Unsupported EVM currency: ${currency}`);\n return config;\n}\n\nexport function getEvmExplorerUrl(currency: EcencyWalletCurrency, txHash: string) {\n return `${getEvmChainConfig(currency).explorerUrl}${txHash}`;\n}\n\nexport async function ensureEvmChain(currency: EcencyWalletCurrency): Promise<void> {\n const ethereum = getEthereum();\n\n const { chainId, name, rpcUrl } = getEvmChainConfig(currency);\n const currentChainId = await ethereum.request<string>({ method: \"eth_chainId\" });\n\n if (currentChainId === chainId) return;\n\n try {\n await ethereum.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId }]\n });\n } catch (err: unknown) {\n // Chain not added — add it\n if (typeof err === \"object\" && err !== null && \"code\" in err && (err as { code: number }).code === 4902) {\n await ethereum.request({\n method: \"wallet_addEthereumChain\",\n params: [{\n chainId,\n chainName: name,\n rpcUrls: [rpcUrl],\n nativeCurrency: {\n name: currency === EcencyWalletCurrency.ETH ? \"Ether\" : \"BNB\",\n symbol: currency === EcencyWalletCurrency.ETH ? \"ETH\" : \"BNB\",\n decimals: 18\n }\n }]\n });\n } else {\n throw err;\n }\n }\n}\n\nexport async function estimateEvmGas(\n from: string,\n to: string,\n valueHex: string,\n currency: EcencyWalletCurrency\n): Promise<{ gasLimit: string; gasPrice: string; estimatedFeeWei: bigint }> {\n const ethereum = getEthereum();\n\n await ensureEvmChain(currency);\n\n const [gasLimit, gasPrice] = await Promise.all([\n ethereum.request<string>({\n method: \"eth_estimateGas\",\n params: [{ from, to, value: valueHex }]\n }),\n ethereum.request<string>({ method: \"eth_gasPrice\" })\n ]);\n\n const estimatedFeeWei = BigInt(gasLimit) * BigInt(gasPrice);\n\n return { gasLimit, gasPrice, estimatedFeeWei };\n}\n\nexport function formatWei(wei: bigint, decimals = 6): string {\n const whole = wei / WEI_PER_ETH;\n const rem = wei % WEI_PER_ETH;\n if (rem === 0n) return whole.toString();\n\n const scale = 10n ** BigInt(decimals);\n const fractional = (rem * scale) / WEI_PER_ETH;\n const fracStr = fractional.toString().padStart(decimals, \"0\").replace(/0+$/, \"\");\n return fracStr ? `${whole}.${fracStr}` : whole.toString();\n}\n\nconst AMOUNT_REGEX = /^\\d+(\\.\\d+)?$/;\n\nexport function parseToWei(amount: string): string {\n const trimmed = amount.trim();\n if (!AMOUNT_REGEX.test(trimmed)) {\n throw new Error(`Invalid amount: \"${amount}\"`);\n }\n\n const [whole, fraction = \"\"] = trimmed.split(\".\");\n if (!/^\\d+$/.test(whole) || (fraction && !/^\\d+$/.test(fraction))) {\n throw new Error(`Invalid amount: \"${amount}\"`);\n }\n\n const paddedFraction = fraction.padEnd(18, \"0\").slice(0, 18);\n const wei = BigInt(whole) * WEI_PER_ETH + BigInt(paddedFraction);\n return \"0x\" + wei.toString(16);\n}\n\nexport async function sendEvmTransfer(\n to: string,\n amountWei: string,\n currency: EcencyWalletCurrency\n): Promise<string> {\n const ethereum = getEthereum();\n\n await ensureEvmChain(currency);\n\n const accounts = await ethereum.request<string[]>({ method: \"eth_requestAccounts\" });\n const from = accounts[0];\n if (!from) throw new Error(\"No MetaMask account connected\");\n\n const txHash = await ethereum.request<string>({\n method: \"eth_sendTransaction\",\n params: [{\n from,\n to,\n value: amountWei\n }]\n });\n\n return txHash;\n}\n","import { ConfigManager } from \"@ecency/sdk\";\n\nconst SOL_EXPLORER_URL = \"https://explorer.solana.com/tx/\";\nconst LAMPORTS_PER_SOL = 1_000_000_000n;\nconst AMOUNT_REGEX = /^\\d+(\\.\\d+)?$/;\n\nexport function getSolExplorerUrl(signature: string) {\n return `${SOL_EXPLORER_URL}${signature}`;\n}\n\nexport function parseToLamports(amount: string): bigint {\n const trimmed = amount.trim();\n if (!AMOUNT_REGEX.test(trimmed)) {\n throw new Error(`Invalid amount: \"${amount}\"`);\n }\n\n const [whole, fraction = \"\"] = trimmed.split(\".\");\n if (!/^\\d+$/.test(whole) || (fraction && !/^\\d+$/.test(fraction))) {\n throw new Error(`Invalid amount: \"${amount}\"`);\n }\n\n if (fraction.length > 9 && fraction.slice(9).replace(/0/g, \"\").length > 0) {\n throw new Error(`Amount has more than 9 decimal places: \"${amount}\"`);\n }\n\n const paddedFraction = fraction.padEnd(9, \"0\").slice(0, 9);\n return BigInt(whole) * LAMPORTS_PER_SOL + BigInt(paddedFraction);\n}\n\nexport function formatLamports(lamports: bigint, decimals = 6): string {\n const whole = lamports / LAMPORTS_PER_SOL;\n const rem = lamports % LAMPORTS_PER_SOL;\n if (rem === 0n) return whole.toString();\n\n const scale = 10n ** BigInt(decimals);\n const fractional = (rem * scale) / LAMPORTS_PER_SOL;\n const fracStr = fractional.toString().padStart(decimals, \"0\").replace(/0+$/, \"\");\n return fracStr ? `${whole}.${fracStr}` : whole.toString();\n}\n\ninterface JsonRpcResponse<T> {\n jsonrpc: string;\n id: number | string;\n result?: T;\n error?: { code?: number; message?: string };\n}\n\n/**\n * Call a Solana JSON-RPC method via the Ecency private API proxy.\n * This avoids hitting the public Solana RPC directly from the browser\n * (which returns 403). The proxy forwards to a Chainstack dedicated node.\n */\nasync function solRpc<T>(method: string, params: unknown[] = []): Promise<T> {\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const response = await fetch(`${baseUrl}/private-api/rpc/sol`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ jsonrpc: \"2.0\", id: 1, method, params })\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => \"\");\n throw new Error(`SOL RPC ${method} failed: ${response.status} ${response.statusText}${text ? ` — ${text}` : \"\"}`);\n }\n\n const json: JsonRpcResponse<T> = await response.json();\n if (json.error) {\n throw new Error(json.error.message || `SOL RPC ${method} failed`);\n }\n return json.result as T;\n}\n\nasync function getMetaMaskSolanaWallet(): Promise<any> {\n const { getWallets } = await import(\"@wallet-standard/app\");\n const walletsApi = getWallets();\n const wallets = walletsApi.get();\n\n // Only select a MetaMask wallet that supports Solana signing\n const mmWallet = wallets.find(\n (w: any) =>\n w.name.toLowerCase().includes(\"metamask\") &&\n w.features[\"standard:connect\"] &&\n w.features[\"solana:signAndSendTransaction\"]\n );\n\n if (!mmWallet) {\n throw new Error(\"MetaMask Solana wallet not found. Enable Solana in MetaMask settings.\");\n }\n\n return mmWallet;\n}\n\nexport async function sendSolTransfer(\n to: string,\n amountSol: string\n): Promise<string> {\n const mmWallet = await getMetaMaskSolanaWallet();\n\n // Connect to get accounts\n const connectFeature = mmWallet.features[\"standard:connect\"] as any;\n await connectFeature.connect();\n\n const solAccount = mmWallet.accounts?.find(\n (acc: any) => acc.chains?.some((c: string) => c.startsWith(\"solana:\"))\n );\n\n if (!solAccount) {\n throw new Error(\"No Solana account found in MetaMask.\");\n }\n\n // Use @solana/web3.js for transaction building (dynamic import to avoid bundle bloat)\n const { PublicKey, SystemProgram, Transaction } = await import(\"@solana/web3.js\");\n\n const fromPubkey = new PublicKey(solAccount.address);\n const toPubkey = new PublicKey(to);\n const lamports = parseToLamports(amountSol);\n\n const transaction = new Transaction().add(\n SystemProgram.transfer({\n fromPubkey,\n toPubkey,\n lamports\n })\n );\n\n // Fetch blockhash via Ecency RPC proxy (avoids 403 from public Solana RPC)\n const blockhashResult = await solRpc<{ value: { blockhash: string } }>(\n \"getLatestBlockhash\",\n [{ commitment: \"finalized\" }]\n );\n transaction.recentBlockhash = blockhashResult.value.blockhash;\n transaction.feePayer = fromPubkey;\n\n // Serialize the transaction for signing via Wallet Standard\n const serializedTx = transaction.serialize({\n requireAllSignatures: false,\n verifySignatures: false\n });\n\n const signAndSendFeature = mmWallet.features[\"solana:signAndSendTransaction\"] as any;\n if (!signAndSendFeature) {\n throw new Error(\"MetaMask does not support Solana transaction signing. Please update MetaMask.\");\n }\n\n const [result] = await signAndSendFeature.signAndSendTransaction({\n account: solAccount,\n transaction: serializedTx,\n chain: \"solana:mainnet\"\n });\n\n // Result contains the signature — either a string or Uint8Array\n if (typeof result.signature === \"string\") {\n return result.signature;\n }\n\n // Encode Uint8Array to base58 (standard Solana signature format)\n const { base58 } = await import(\"@scure/base\");\n return base58.encode(new Uint8Array(result.signature));\n}\n","import { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\nimport { sendEvmTransfer, parseToWei } from \"@/modules/wallets/utils/metamask-evm-transfer\";\nimport { sendSolTransfer } from \"@/modules/wallets/utils/metamask-sol-transfer\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\n\nexport type TransferableCurrency =\n | EcencyWalletCurrency.ETH\n | EcencyWalletCurrency.BNB\n | EcencyWalletCurrency.SOL;\n\ninterface ExternalTransferPayload {\n to: string;\n amount: string;\n}\n\nexport function useExternalTransfer(currency: TransferableCurrency) {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationKey: [\"ecency-wallets\", \"external-transfer\", currency],\n mutationFn: async ({ to, amount }: ExternalTransferPayload) => {\n switch (currency) {\n case EcencyWalletCurrency.ETH:\n case EcencyWalletCurrency.BNB: {\n const valueHex = parseToWei(amount);\n const txHash = await sendEvmTransfer(to, valueHex, currency);\n return { txHash, currency };\n }\n case EcencyWalletCurrency.SOL: {\n const signature = await sendSolTransfer(to, amount);\n return { txHash: signature, currency };\n }\n }\n },\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: [\"ecency-wallets\", \"external-wallet-balance\"]\n });\n }\n });\n}\n","import { mnemonicToSeedSync } from \"bip39\";\nimport { HDKey } from \"@scure/bip32\";\nimport { PrivateKey } from \"@ecency/hive-tx\";\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 = HDKey.fromMasterSeed(seed);\n const path = `m/44'/3054'/${accountIndex}'/0'/${ROLE_INDEX[role]}'`;\n const child = master.derive(path);\n if (!child.privateKey) {\n throw new Error(\"[Ecency][Wallets] - hive key derivation failed\");\n }\n const pk = PrivateKey.from(Buffer.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 \"@ecency/hive-tx\";\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 \"@ecency/hive-tx\";\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 { EcencyWalletCurrency } from \"@/modules/wallets/enums\";\n\nexport type WalletAddressMap = Partial<Record<EcencyWalletCurrency, string>>;\n\n/** Chain prefixes we look for in Wallet Standard accounts */\nconst CHAIN_PREFIX_MAP: Record<string, EcencyWalletCurrency> = {\n \"solana:\": EcencyWalletCurrency.SOL,\n \"bip122:\": EcencyWalletCurrency.BTC\n};\n\nconst HIVE_SNAP_ID = \"npm:@hiveio/metamask-snap\";\n\nexport interface HivePublicKey {\n publicKey: string;\n role?: string;\n accountIndex: number;\n addressIndex: number;\n}\n\ninterface WalletStandardWallet {\n name: string;\n chains: readonly string[];\n features: Record<string, unknown>;\n accounts: ReadonlyArray<{\n address: string;\n chains: readonly string[];\n }>;\n}\n\n/**\n * Fetch non-EVM addresses from MetaMask via the Wallet Standard protocol.\n *\n * MetaMask registers non-EVM wallets (Solana, Bitcoin) as separate Wallet Standard\n * wallets — they are NOT accessible through window.ethereum (EVM-only provider).\n */\nexport async function fetchMultichainAddresses(): Promise<WalletAddressMap> {\n const addresses: WalletAddressMap = {};\n\n try {\n const { getWallets } = await import(\"@wallet-standard/app\");\n const walletsApi = getWallets();\n const wallets = walletsApi.get();\n\n // Iterate ALL MetaMask wallet registrations — MetaMask may expose\n // separate entries per chain (e.g., one for Solana, one for Bitcoin)\n const mmWallets = wallets.filter(\n (w: WalletStandardWallet) =>\n w.name.toLowerCase().includes(\"metamask\") &&\n w.features[\"standard:connect\"]\n ) as WalletStandardWallet[];\n\n for (const mmWallet of mmWallets) {\n try {\n const connectFeature = mmWallet.features[\"standard:connect\"] as\n { connect: () => Promise<void> };\n await connectFeature.connect();\n } catch (connectErr) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\"[MetaMask multichain] wallet connect failed, trying next:\", connectErr);\n }\n continue;\n }\n\n for (const account of mmWallet.accounts ?? []) {\n if (!account.address || !Array.isArray(account.chains)) continue;\n\n for (const [prefix, currency] of Object.entries(CHAIN_PREFIX_MAP)) {\n if (addresses[currency]) continue;\n if (account.chains.some((c: string) => c.startsWith(prefix))) {\n addresses[currency] = account.address;\n }\n }\n }\n }\n } catch (e) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\"[MetaMask multichain] wallet standard discovery failed:\", e);\n }\n }\n\n return addresses;\n}\n\n/**\n * Fetch the EVM address from MetaMask via window.ethereum.\n * Returns the first connected account address, or undefined on failure.\n */\nexport async function fetchEvmAddress(): Promise<string | undefined> {\n if (typeof window === \"undefined\" || !window.ethereum?.isMetaMask) return undefined;\n\n try {\n const accounts = await window.ethereum.request({\n method: \"eth_requestAccounts\"\n }) as string[] | undefined;\n\n return accounts?.[0] ?? undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Discover all wallet addresses from MetaMask (EVM + non-EVM).\n * Returns a map of currency -> address. Partial results are returned on failure.\n */\nexport async function discoverMetaMaskWallets(): Promise<WalletAddressMap> {\n const addresses: WalletAddressMap = {};\n\n // EVM address (shared for ETH + BNB)\n const evmAddress = await fetchEvmAddress();\n if (evmAddress) {\n addresses[EcencyWalletCurrency.ETH] = evmAddress;\n addresses[EcencyWalletCurrency.BNB] = evmAddress;\n }\n\n // Non-EVM addresses via Wallet Standard\n const multichainAddresses = await fetchMultichainAddresses();\n Object.assign(addresses, multichainAddresses);\n\n return addresses;\n}\n\n/**\n * Install the Hive Snap in MetaMask.\n */\nexport async function installHiveSnap(): Promise<void> {\n if (typeof window === \"undefined\" || !window.ethereum) {\n throw new Error(\"MetaMask is not available\");\n }\n await window.ethereum.request({\n method: \"wallet_requestSnaps\",\n params: { [HIVE_SNAP_ID]: {} }\n });\n}\n\n/**\n * Get Hive public keys from the MetaMask Hive Snap.\n * Returns owner, active, posting, and memo public keys.\n */\nexport async function getHivePublicKeys(): Promise<HivePublicKey[]> {\n if (typeof window === \"undefined\" || !window.ethereum) {\n throw new Error(\"MetaMask is not available\");\n }\n\n const result = await window.ethereum.request({\n method: \"wallet_invokeSnap\",\n params: {\n snapId: HIVE_SNAP_ID,\n request: {\n method: \"hive_getPublicKeys\",\n params: {\n keys: [\n { role: \"owner\", accountIndex: 0 },\n { role: \"active\", accountIndex: 0 },\n { role: \"posting\", accountIndex: 0 },\n { role: \"memo\", accountIndex: 0 }\n ]\n }\n }\n }\n }) as { publicKeys?: unknown } | undefined;\n\n const keys = result?.publicKeys;\n if (!Array.isArray(keys)) {\n throw new Error(\"Hive Snap returned invalid response — expected publicKeys array\");\n }\n\n return keys as HivePublicKey[];\n}\n","import { rememberScryptBsvVersion } from \"./internal/scrypt-guard\";\n\nrememberScryptBsvVersion();\n\nexport * from \"./modules/wallets\";\nexport * from \"./modules/assets\";\n"]}
|
package/dist/node/index.cjs
CHANGED
|
@@ -6,7 +6,7 @@ var R = require('remeda');
|
|
|
6
6
|
var lruCache = require('lru-cache');
|
|
7
7
|
var bip39 = require('bip39');
|
|
8
8
|
var bip32 = require('@scure/bip32');
|
|
9
|
-
var
|
|
9
|
+
var hiveTx = require('@ecency/hive-tx');
|
|
10
10
|
|
|
11
11
|
function _interopNamespace(e) {
|
|
12
12
|
if (e && e.__esModule) return e;
|
|
@@ -977,7 +977,7 @@ function deriveHiveKey(mnemonic, role, accountIndex = 0) {
|
|
|
977
977
|
if (!child.privateKey) {
|
|
978
978
|
throw new Error("[Ecency][Wallets] - hive key derivation failed");
|
|
979
979
|
}
|
|
980
|
-
const pk =
|
|
980
|
+
const pk = hiveTx.PrivateKey.from(Buffer.from(child.privateKey));
|
|
981
981
|
return {
|
|
982
982
|
privateKey: pk.toString(),
|
|
983
983
|
publicKey: pk.createPublic().toString()
|
|
@@ -1000,7 +1000,7 @@ function deriveHiveKeys(mnemonic, accountIndex = 0) {
|
|
|
1000
1000
|
};
|
|
1001
1001
|
}
|
|
1002
1002
|
function deriveHiveMasterPasswordKey(username, masterPassword, role) {
|
|
1003
|
-
const pk =
|
|
1003
|
+
const pk = hiveTx.PrivateKey.fromLogin(username, masterPassword, role);
|
|
1004
1004
|
return {
|
|
1005
1005
|
privateKey: pk.toString(),
|
|
1006
1006
|
publicKey: pk.createPublic().toString()
|
|
@@ -1036,7 +1036,7 @@ async function detectHiveKeyDerivation(username, seed, type = "active") {
|
|
|
1036
1036
|
const bip44Pub = type === "owner" ? bip44.ownerPubkey : bip44.activePubkey;
|
|
1037
1037
|
const matchBip44 = auth.key_auths.some(([pub]) => String(pub) === bip44Pub);
|
|
1038
1038
|
if (matchBip44) return "bip44";
|
|
1039
|
-
const legacyPub =
|
|
1039
|
+
const legacyPub = hiveTx.PrivateKey.fromLogin(uname, seed, type).createPublic().toString();
|
|
1040
1040
|
const matchLegacy = auth.key_auths.some(([pub]) => String(pub) === legacyPub);
|
|
1041
1041
|
if (matchLegacy) return "master-password";
|
|
1042
1042
|
return "unknown";
|