@tcswap/helpers 4.5.17 → 4.5.19
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/api/index.cjs +2 -2
- package/dist/api/index.cjs.map +3 -3
- package/dist/api/index.js +2 -2
- package/dist/api/index.js.map +3 -3
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +5 -5
- package/dist/index.js +3 -3
- package/dist/index.js.map +5 -5
- package/dist/types/api/index.d.ts +4 -0
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/types/api/uswap/endpoints.d.ts +4 -0
- package/dist/types/api/uswap/endpoints.d.ts.map +1 -1
- package/dist/types/api/uswap/types.d.ts +6 -0
- package/dist/types/api/uswap/types.d.ts.map +1 -1
- package/dist/types/modules/assetValue.d.ts +1 -0
- package/dist/types/modules/assetValue.d.ts.map +1 -1
- package/dist/types/utils/asset.d.ts +2 -1
- package/dist/types/utils/asset.d.ts.map +1 -1
- package/dist/types/utils/validators.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/api/uswap/types.ts +2 -0
- package/src/modules/assetValue.ts +86 -7
- package/src/utils/asset.ts +33 -1
- package/src/utils/validators.ts +3 -0
package/dist/index.js.map
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
"sources": ["../src/index.ts", "../src/modules/assetValue.ts", "../src/utils/asset.ts", "../src/modules/uSwapConfig.ts", "../src/types/derivationPath.ts", "../src/types/quotes.ts", "../src/types/sdk.ts", "../src/types/wallet.ts", "../src/modules/uSwapError.ts", "../src/modules/requestClient.ts", "../src/utils/chains.ts", "../src/utils/others.ts", "../src/utils/validators.ts", "../src/modules/bigIntArithmetics.ts", "../src/modules/feeMultiplier.ts", "../src/modules/uSwapNumber.ts", "../src/utils/derivationPath.ts", "../src/utils/explorerUrls.ts", "../src/utils/liquidity.ts", "../src/utils/memo.ts", "../src/utils/wallets.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nexport * from \"@tcswap/tokens\";\nexport * from \"@tcswap/types\";\n/**\n * Modules\n */\nexport * from \"./modules/assetValue\";\nexport * from \"./modules/bigIntArithmetics\";\nexport * from \"./modules/feeMultiplier\";\nexport * from \"./modules/requestClient\";\nexport * from \"./modules/uSwapConfig\";\nexport * from \"./modules/uSwapError\";\nexport * from \"./modules/uSwapNumber\";\n/**\n * Types\n */\nexport * from \"./types\";\n/**\n * Utils\n */\nexport * from \"./utils/asset\";\nexport * from \"./utils/chains\";\nexport * from \"./utils/derivationPath\";\nexport * from \"./utils/explorerUrls\";\nexport * from \"./utils/liquidity\";\nexport * from \"./utils/memo\";\nexport * from \"./utils/others\";\nexport * from \"./utils/validators\";\nexport * from \"./utils/wallets\";\n",
|
|
6
|
-
"/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport type { TokenListName, TokenNames, TokenTax } from \"@tcswap/tokens\";\nimport { AllChains, Chain, type ChainId, type EVMChain, EVMChains, getChainConfig } from \"@tcswap/types\";\nimport { getAddress } from \"ethers\";\nimport { match } from \"ts-pattern\";\nimport {\n assetFromString,\n type CommonAssetString,\n fetchTokenInfo,\n getAssetType,\n getCommonAssetInfo,\n isGasAsset,\n} from \"../utils/asset\";\nimport { warnOnce } from \"../utils/others\";\nimport { validateIdentifier } from \"../utils/validators\";\n\nimport type { NumberPrimitives } from \"./bigIntArithmetics\";\nimport { BigIntArithmetics, formatBigIntToSafeValue } from \"./bigIntArithmetics\";\nimport { USwapError } from \"./uSwapError\";\nimport type { SwapKitValueType } from \"./uSwapNumber\";\n\nconst CASE_SENSITIVE_CHAINS: Chain[] = [Chain.Solana, Chain.Tron, Chain.Near, Chain.Sui];\nconst TC_CHAINS: Chain[] = [Chain.THORChain, Chain.Maya];\n\nconst staticTokensMap = new Map<\n TokenNames | (string & {}),\n { tax?: TokenTax; decimal: number; identifier: string; logoURI?: string }\n>();\n\nconst chainAddressIdentifierMap = new Map<string, string>();\n\nconst asyncTokenCache = new Map<string, { identifier: string; decimals: number; timestamp: number }>();\nconst CACHE_TTL = 3600000;\n\nfunction getCachedTokenInfo(key: string) {\n const cached = asyncTokenCache.get(key);\n\n if (cached?.timestamp && Date.now() - cached.timestamp > CACHE_TTL) {\n asyncTokenCache.delete(key);\n return undefined;\n }\n\n return cached;\n}\n\nfunction setCachedTokenInfo(key: string, info: { identifier: string; decimals: number }) {\n if (asyncTokenCache.size > 1000) {\n const firstKey = asyncTokenCache.keys().next().value;\n if (firstKey) asyncTokenCache.delete(firstKey);\n }\n\n asyncTokenCache.set(key, { ...info, timestamp: Date.now() });\n}\n\ntype ConditionalAssetValueReturn<T extends { asyncTokenLookup?: boolean }> = T[\"asyncTokenLookup\"] extends true\n ? Promise<AssetValue>\n : AssetValue;\n\ntype AssetIdentifier =\n | { asset: CommonAssetString | TokenNames }\n | { asset: string }\n | { chain: Chain; address?: string };\n\ntype AssetValueFromParams = AssetIdentifier & {\n value?: NumberPrimitives | SwapKitValueType;\n fromBaseDecimal?: number;\n asyncTokenLookup?: boolean;\n};\n\nexport class AssetValue extends BigIntArithmetics {\n address?: string;\n chain: Chain;\n isGasAsset = false;\n isSynthetic = false;\n isTradeAsset = false;\n symbol: string;\n tax?: TokenTax;\n ticker: string;\n type: ReturnType<typeof getAssetType>;\n chainId: ChainId;\n\n constructor({\n value,\n decimal,\n tax,\n chain,\n symbol,\n identifier,\n }: { decimal: number; value: SwapKitValueType; tax?: TokenTax } & (\n | { chain: Chain; symbol: string; identifier?: never }\n | { identifier: string; chain?: never; symbol?: never }\n )) {\n super(typeof value === \"object\" ? value : { decimal, value });\n\n const assetInfo = getAssetInfo(identifier || `${chain}.${symbol}`);\n\n this.type = getAssetType(assetInfo);\n this.tax = tax;\n this.chain = assetInfo.chain;\n this.ticker = assetInfo.ticker;\n this.symbol = assetInfo.symbol;\n this.address = assetInfo.address;\n this.isSynthetic = assetInfo.isSynthetic;\n this.isTradeAsset = assetInfo.isTradeAsset;\n this.isGasAsset = assetInfo.isGasAsset;\n this.chainId = getChainConfig(assetInfo.chain).chainId;\n }\n\n toString({ includeSynthProtocol }: { includeSynthProtocol?: boolean } = {}) {\n return (this.isSynthetic || this.isTradeAsset) && !includeSynthProtocol\n ? this.symbol\n : `${this.chain}.${this.symbol}`;\n }\n\n toUrl() {\n if (this.isSynthetic) {\n return `${this.chain}.${this.symbol.replace(/\\//g, \".\")}`;\n }\n\n if (this.isTradeAsset) {\n return `${this.chain}.${this.symbol.replace(/~/g, \"..\")}`;\n }\n\n const encodedSymbol = this.symbol.replace(/\\./g, \"__\");\n return `${this.chain}.${encodedSymbol}`;\n }\n\n getIconUrl() {\n const token = staticTokensMap.get(this.toString());\n return token?.logoURI;\n }\n\n eqAsset({ chain, symbol }: { chain: Chain; symbol: string }) {\n return this.chain === chain && this.symbol === symbol;\n }\n\n eq(assetValue: AssetValue) {\n return this.eqAsset(assetValue) && this.eqValue(assetValue);\n }\n\n static fromUrl(urlAsset: string, value: NumberPrimitives = 0) {\n const firstDotIndex = urlAsset.indexOf(\".\");\n\n if (firstDotIndex === -1) {\n throw new USwapError({ errorKey: \"helpers_invalid_asset_url\", info: { urlAsset } });\n }\n\n const chain = urlAsset.slice(0, firstDotIndex);\n const rest = urlAsset.slice(firstDotIndex + 1);\n\n const asset = match({ chain: chain as Chain, rest })\n .when(\n ({ rest }) => rest.includes(\"..\"),\n ({ chain, rest }) => `${chain}.${rest.replace(/\\.\\./g, \"~\")}`,\n )\n .when(\n ({ chain, rest }) => TC_CHAINS.includes(chain) && rest.includes(\".\"),\n ({ chain, rest }) => `${chain}.${rest.replace(/\\./g, \"/\")}`,\n )\n .otherwise(({ chain, rest }) => `${chain}.${rest.replace(/__/g, \".\")}`);\n\n return AssetValue.from({ asset, value });\n }\n\n static from<T extends {}>({\n value = 0,\n fromBaseDecimal,\n asyncTokenLookup,\n ...fromAssetOrChain\n }: T & AssetValueFromParams): ConditionalAssetValueReturn<T> {\n const parsedValue = value instanceof BigIntArithmetics ? value.getValue(\"string\") : value;\n const assetOrChain = getAssetString(fromAssetOrChain);\n\n const isChainAddressCombo = !assetOrChain.startsWith(Chain.Sui) && assetOrChain.includes(\":\");\n\n if (asyncTokenLookup && isChainAddressCombo) {\n const [chain, address] = assetOrChain.split(\":\") as [Chain, string];\n\n return createAsyncAssetValue({ address, chain, fromBaseDecimal, parsedValue }) as ConditionalAssetValueReturn<T>;\n }\n\n const fallbackIdentifier = isChainAddressCombo ? assetOrChain.split(\":\").join(\".UNKNOWN-\") : assetOrChain;\n\n const { identifier: unsafeIdentifier, decimal: commonAssetDecimal } = getCommonAssetInfo(\n fallbackIdentifier as CommonAssetString,\n );\n\n const { chain, isSynthetic, isTradeAsset, address } = getAssetInfo(unsafeIdentifier);\n const { baseDecimal } = getChainConfig(chain);\n\n const token = staticTokensMap.get(\n CASE_SENSITIVE_CHAINS.includes(chain)\n ? (unsafeIdentifier as TokenNames)\n : (unsafeIdentifier.toUpperCase() as TokenNames),\n );\n\n if (!token && asyncTokenLookup && !isSynthetic && !isTradeAsset) {\n return (async () => {\n const { ticker } = assetFromString(unsafeIdentifier);\n const tokenData = await fetchTokenData({ address, chain, ticker });\n return createAssetValue({\n decimal: tokenData.decimals,\n identifier: tokenData.identifier,\n value: fromBaseDecimal ? safeValue(BigInt(parsedValue), fromBaseDecimal) : parsedValue,\n });\n })() as ConditionalAssetValueReturn<T>;\n }\n\n const tokenDecimal = token?.decimal || commonAssetDecimal;\n\n warnOnce({\n condition: !tokenDecimal && !asyncTokenLookup,\n id: `assetValue_static_decimal_not_found_${chain}`,\n warning: `Couldn't find static decimal for one or more tokens on ${chain} (Using default ${baseDecimal} decimal as fallback).\nThis can result in incorrect calculations and mess with amount sent on transactions.\nYou can load static assets by installing @tcswap/tokens package and calling AssetValue.loadStaticAssets()\nor by passing asyncTokenLookup: true to the from() function, which will make it async and return a promise.`,\n });\n\n const { decimal, identifier, tax } = token || {\n decimal: tokenDecimal || baseDecimal,\n identifier: unsafeIdentifier,\n };\n\n const adjustedValue = fromBaseDecimal\n ? safeValue(BigInt(parsedValue), fromBaseDecimal)\n : safeValue(parsedValue, decimal);\n\n const assetValue =\n isSynthetic || isTradeAsset\n ? createSyntheticAssetValue(identifier, adjustedValue)\n : createAssetValue({ decimal, identifier, tax, value: adjustedValue });\n\n return assetValue as ConditionalAssetValueReturn<T>;\n }\n\n static async loadStaticAssets(listNames?: TokenListName[]) {\n const { loadTokenLists } = await import(\"@tcswap/tokens\");\n const lists = await loadTokenLists(listNames);\n\n for (const { tokens } of Object.values(lists)) {\n for (const { identifier, chain, ...rest } of tokens) {\n const chainConfig = getChainConfig(chain as Chain);\n\n const tokenKey = (\n CASE_SENSITIVE_CHAINS.includes(chainConfig.chain) ? identifier : identifier.toUpperCase()\n ) as TokenNames;\n const tokenDecimal = \"decimals\" in rest ? rest.decimals : chainConfig.baseDecimal;\n\n const tokenInfo = {\n decimal: tokenDecimal,\n identifier,\n logoURI: \"logoURI\" in rest ? (rest.logoURI as string) : undefined,\n tax: \"tax\" in rest ? (rest.tax as TokenTax) : undefined,\n };\n\n staticTokensMap.set(tokenKey, tokenInfo);\n\n // Also populate chain:address map for quick lookups\n if (\"address\" in rest && rest.address) {\n const lookupKey = CASE_SENSITIVE_CHAINS.includes(chainConfig.chain)\n ? `${chainConfig.chain}:${rest.address}`\n : `${chainConfig.chain}:${rest.address.toUpperCase()}`;\n chainAddressIdentifierMap.set(lookupKey, identifier);\n }\n }\n }\n\n return true;\n }\n\n static setStaticAssets(\n tokenMap: Map<\n string,\n { tax?: TokenTax; identifier: string; chain: Chain; address?: string } & (\n | { decimal: number }\n | { decimals: number }\n )\n >,\n ) {\n staticTokensMap.clear();\n chainAddressIdentifierMap.clear();\n\n for (const [key, value] of tokenMap.entries()) {\n const tokenKey = (\n CASE_SENSITIVE_CHAINS.includes(value.chain) ? value.identifier : value.identifier.toUpperCase()\n ) as TokenNames;\n const tokenDecimal = \"decimals\" in value ? value.decimals : value.decimal;\n const tokenInfo = { ...value, decimal: tokenDecimal, identifier: tokenKey };\n\n staticTokensMap.set(key, tokenInfo);\n\n if (value.address) {\n const lookupKey = CASE_SENSITIVE_CHAINS.includes(value.chain)\n ? `${value.chain}:${value.address}`\n : `${value.chain}:${value.address.toUpperCase()}`;\n chainAddressIdentifierMap.set(lookupKey, value.identifier);\n }\n }\n return true;\n }\n\n static get staticAssets() {\n return staticTokensMap;\n }\n}\n\nexport function getMinAmountByChain(chain: Chain) {\n const asset = AssetValue.from({ chain });\n\n return match(chain)\n .with(Chain.Bitcoin, Chain.Litecoin, Chain.BitcoinCash, Chain.Dash, () => asset.set(0.00010001))\n .with(Chain.Dogecoin, () => asset.set(1.00000001))\n .with(Chain.Avalanche, Chain.Ethereum, Chain.Arbitrum, Chain.BinanceSmartChain, () => asset.set(0.00000001))\n .with(Chain.THORChain, Chain.Maya, () => asset.set(0))\n .with(Chain.Cosmos, Chain.Kujira, () => asset.set(0.000001))\n .otherwise(() => asset.set(0.00000001));\n}\n\nasync function fetchTokenData({ chain, address, ticker }: { chain: Chain; address?: string; ticker?: string }) {\n const isCaseSensitiveChain = CASE_SENSITIVE_CHAINS.includes(chain);\n\n const cacheKey = isCaseSensitiveChain\n ? `${chain}:${address || ticker}`\n : `${chain}:${address || ticker}`.toUpperCase();\n\n const cached = getCachedTokenInfo(cacheKey);\n if (cached) {\n return cached;\n }\n\n if (!address) {\n const { baseDecimal } = getChainConfig(chain);\n return { decimals: baseDecimal, identifier: `${chain}.${ticker || \"UNKNOWN\"}` };\n }\n\n const tokenInfo = await fetchTokenInfo({ address, chain });\n\n const identifier = `${chain}.${tokenInfo.ticker || ticker || \"UNKNOWN\"}-${address}`;\n\n warnOnce({\n condition: !!(!tokenInfo.ticker && ticker),\n id: `async_token_lookup_failed_${chain}_${address}`,\n warning: `Could not fetch token metadata for ${chain}:${address} from chain. Using user-provided ticker (${ticker}) with baseDecimal (${tokenInfo.decimals}).`,\n });\n\n // only cache if we got a proper ticker back\n tokenInfo.ticker && setCachedTokenInfo(cacheKey, { decimals: tokenInfo.decimals, identifier });\n\n return { decimals: tokenInfo.decimals, identifier };\n}\n\nfunction createAssetValue({\n identifier,\n decimal,\n value,\n tax,\n}: {\n identifier: string;\n decimal: number;\n value: NumberPrimitives;\n tax?: TokenTax;\n}) {\n validateIdentifier(identifier);\n return new AssetValue({ decimal, identifier, tax, value: safeValue(value, decimal) });\n}\n\nfunction createSyntheticAssetValue(identifier: string, value: NumberPrimitives = 0) {\n const chain = identifier.includes(\".\") ? (identifier.split(\".\")?.[0]?.toUpperCase() as Chain) : undefined;\n const isMayaOrThor = chain ? TC_CHAINS.includes(chain) : false;\n\n const assetSeparator = identifier.slice(0, 14).includes(\"~\") ? \"~\" : \"/\";\n\n const [synthChain, symbol] = isMayaOrThor\n ? identifier.split(\".\").slice(1).join().split(assetSeparator)\n : identifier.split(assetSeparator);\n\n if (!(synthChain && symbol)) {\n throw new USwapError({ errorKey: \"helpers_invalid_asset_identifier\", info: { identifier } });\n }\n\n return new AssetValue({\n decimal: 8,\n identifier: `${chain || Chain.THORChain}.${synthChain}${assetSeparator}${symbol}`,\n value: safeValue(value, 8),\n });\n}\n\nasync function createAsyncAssetValue({\n address,\n chain,\n fromBaseDecimal,\n parsedValue,\n}: {\n address: string;\n chain: Chain;\n fromBaseDecimal?: number;\n parsedValue: NumberPrimitives;\n}): Promise<AssetValue> {\n const { decimals, identifier } = await fetchTokenData({ address, chain });\n const value = fromBaseDecimal ? safeValue(BigInt(parsedValue), fromBaseDecimal) : parsedValue;\n return createAssetValue({ decimal: decimals, identifier, value });\n}\n\nfunction safeValue(value: NumberPrimitives, decimal: number) {\n return typeof value === \"bigint\" ? formatBigIntToSafeValue({ bigIntDecimal: decimal, decimal, value }) : value;\n}\n\nfunction validateAssetChain(assetOrChain: AssetIdentifier) {\n const chain = match(assetOrChain)\n .when(\n (x): x is { chain: Chain } => \"chain\" in x && x.chain !== undefined,\n ({ chain }) => chain,\n )\n .otherwise((x) => {\n const assetInfo = assetFromString((x as { asset: string }).asset);\n return assetInfo.synth ? Chain.THORChain : assetInfo.chain;\n });\n\n // TODO: move to USwapConfig chains once we support it throughout sdk\n if (!AllChains.includes(chain.toUpperCase() as Chain)) {\n throw new USwapError({\n errorKey: \"helpers_invalid_asset_identifier\",\n info: { message: \"Please use the AssetValue constructor for unsupported chains\" },\n });\n }\n}\n\nfunction getAssetString(assetOrChain: AssetIdentifier) {\n validateAssetChain(assetOrChain);\n\n if (\"chain\" in assetOrChain) {\n const { chain, address } = assetOrChain;\n\n if (address) {\n const lookupKey = CASE_SENSITIVE_CHAINS.includes(chain as Chain)\n ? `${chain}:${address}`\n : `${chain}:${address.toUpperCase()}`;\n const identifier = chainAddressIdentifierMap.get(lookupKey);\n if (identifier) return identifier;\n return lookupKey;\n }\n\n return chain;\n }\n\n const { chain, symbol } = assetFromString(assetOrChain.asset);\n const isNativeChain = getAssetType({ chain, symbol }) === \"Native\";\n\n return isNativeChain ? chain : assetOrChain.asset;\n}\n\nfunction getSyntheticOrTradeAssetInfo(identifier: string, isSynthetic: boolean, isTradeAsset: boolean) {\n const splitIdentifier = identifier.split(\".\");\n const identifierChain = splitIdentifier[0]?.toUpperCase() as Chain;\n const isThorOrMaya = TC_CHAINS.includes(identifierChain);\n\n const assetSeparator = isTradeAsset ? \"~\" : \"/\";\n\n const [synthChain, synthSymbol = \"\"] = isThorOrMaya\n ? splitIdentifier.slice(1).join(\".\").split(assetSeparator)\n : identifier.split(assetSeparator);\n\n if (!(synthChain && synthSymbol)) {\n throw new USwapError({ errorKey: \"helpers_invalid_asset_identifier\", info: { identifier } });\n }\n\n // Get the ticker from the base symbol (e.g., \"AVAX\" from \"AVAX/AVAX\")\n const { ticker, address } = getAssetBaseInfo({ chain: synthChain as Chain, symbol: synthSymbol });\n const finalSymbol = `${synthChain}${assetSeparator}${synthSymbol}`;\n\n return { address, chain: identifierChain, isGasAsset: false, isSynthetic, isTradeAsset, symbol: finalSymbol, ticker };\n}\n\nfunction getNormalAssetInfo(identifier: string) {\n const firstDotIndex = identifier.indexOf(\".\");\n const chain = (firstDotIndex === -1 ? identifier : identifier.slice(0, firstDotIndex)).toUpperCase() as Chain;\n const assetSymbol = firstDotIndex === -1 ? identifier : identifier.slice(firstDotIndex + 1);\n\n const { address, ticker } = getAssetBaseInfo({ chain, symbol: assetSymbol });\n\n let formattedAddress: string | undefined;\n try {\n formattedAddress =\n address && EVMChains.includes(chain as EVMChain) && getAddress(address) ? getAddress(address) : address;\n } catch {\n formattedAddress = address;\n }\n\n const finalSymbol = formattedAddress ? `${ticker}-${formattedAddress}` : assetSymbol;\n\n return {\n address: formattedAddress,\n chain,\n isGasAsset: isGasAsset({ chain, symbol: assetSymbol }),\n isSynthetic: false,\n isTradeAsset: false,\n symbol: finalSymbol,\n ticker,\n };\n}\n\nfunction getAssetInfo(identifier: string) {\n const shortIdentifier = identifier.slice(0, 14);\n const isSynthetic = shortIdentifier.includes(\"/\");\n const isTradeAsset = shortIdentifier.includes(\"~\");\n\n if (isSynthetic || isTradeAsset) {\n return getSyntheticOrTradeAssetInfo(identifier, isSynthetic, isTradeAsset);\n }\n\n return getNormalAssetInfo(identifier);\n}\n\nfunction parseSymbolWithSeparator(symbol: string, useFirst = false) {\n const dashIndex = useFirst ? symbol.indexOf(\"-\") : symbol.lastIndexOf(\"-\");\n\n if (dashIndex === -1) {\n return { address: undefined, ticker: symbol };\n }\n\n const ticker = symbol.slice(0, dashIndex);\n const address = symbol.slice(dashIndex + 1);\n return { address, ticker };\n}\n\nfunction getAssetBaseInfo({ symbol, chain }: { symbol: string; chain: Chain }) {\n const { ticker, address } = parseSymbolWithSeparator(symbol, chain === Chain.Near);\n\n const finalAddress = address && !CASE_SENSITIVE_CHAINS.includes(chain) ? address.toLowerCase() : address;\n\n return { address: finalAddress, ticker };\n}\n",
|
|
7
|
-
"import type { TokenNames } from \"@tcswap/tokens\";\nimport { Chain, type EVMChain, EVMChains, getChainConfig, UTXOChains } from \"@tcswap/types\";\nimport { match } from \"ts-pattern\";\nimport type { AssetValue } from \"../modules/assetValue\";\nimport { RequestClient } from \"../modules/requestClient\";\nimport { getRPCUrl } from \"./chains\";\n\nexport type CommonAssetString = (typeof CommonAssetStrings)[number] | Chain;\n\nexport type ConditionalAssetValueReturn<T extends boolean> = T extends true ? Promise<AssetValue[]> : AssetValue[];\n\nexport const CommonAssetStrings = [\n `${Chain.Maya}.MAYA`,\n `${Chain.Maya}.CACAO`,\n `${Chain.Ethereum}.THOR`,\n `${Chain.Ethereum}.vTHOR`,\n `${Chain.Kujira}.USK`,\n `${Chain.Ethereum}.FLIP`,\n `${Chain.Radix}.XRD`,\n] as const;\n\ntype RadixResourceResponse = {\n at_ledger_state?: any;\n manager: {\n resource_type: string;\n divisibility: { substate_type: string; is_locked: boolean; value: { divisibility: number } };\n };\n owner_role?: any;\n};\nconst ethGasChains = [Chain.Arbitrum, Chain.Aurora, Chain.Base, Chain.Ethereum, Chain.Optimism] as const;\n\nasync function getRadixAssetDecimals(address: string) {\n const { baseDecimal } = getChainConfig(Chain.Radix);\n\n try {\n const rpcUrl = await getRPCUrl(Chain.Radix);\n\n const { manager } = await RequestClient.post<RadixResourceResponse>(`${rpcUrl}/state/resource`, {\n body: JSON.stringify({ network: \"mainnet\", resource_address: address }),\n headers: { Accept: \"*/*\", \"Content-Type\": \"application/json\" },\n });\n\n return manager?.divisibility?.value?.divisibility;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to fetch Radix asset decimals for ${address}: ${errorMessage}`);\n return baseDecimal;\n }\n}\n\nasync function getRadixAssetTicker(address: string) {\n try {\n const rpcUrl = await getRPCUrl(Chain.Radix);\n\n const response = await RequestClient.post<{\n items: Array<{\n address: string;\n explicit_metadata?: { items: Array<{ key: string; value: { typed: { value: string; type: string } } }> };\n }>;\n }>(`${rpcUrl}/state/entity/details`, {\n body: JSON.stringify({ addresses: [address], opt_ins: { explicit_metadata: [\"symbol\"] } }),\n headers: { Accept: \"*/*\", \"Content-Type\": \"application/json\" },\n });\n\n const symbolMetadata = response.items[0]?.explicit_metadata?.items.find((item) => item.key === \"symbol\");\n return symbolMetadata?.value.typed.value || undefined;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to fetch Radix asset symbol for ${address}: ${errorMessage}`);\n return \"\";\n }\n}\n\nasync function callEVMContract({\n chain,\n address,\n methodHex,\n id,\n}: {\n chain: EVMChain;\n address: string;\n methodHex: string;\n id: number;\n}) {\n const rpcUrl = await getRPCUrl(chain);\n return RequestClient.post<{ result: string }>(rpcUrl, {\n body: JSON.stringify({\n id,\n jsonrpc: \"2.0\",\n method: \"eth_call\",\n params: [{ data: methodHex, to: address.toLowerCase() }, \"latest\"],\n }),\n headers: { accept: \"*/*\", \"cache-control\": \"no-cache\", \"content-type\": \"application/json\" },\n });\n}\n\nasync function decodeABIString(hexResult: string) {\n if (!hexResult || hexResult === \"0x\") return \"UNKNOWN\";\n\n try {\n const { AbiCoder } = await import(\"ethers\");\n const abiCoder = AbiCoder.defaultAbiCoder();\n const decoded = abiCoder.decode([\"string\"], hexResult);\n return decoded[0].trim();\n } catch (error) {\n console.warn(`Failed to decode ABI string from ${hexResult}: ${error}`);\n return \"UNKNOWN\";\n }\n}\n\nfunction decodeABIUint8(hexResult: string, fallback: number) {\n if (!hexResult || hexResult === \"0x\") return fallback;\n\n try {\n return Number(hexResult);\n } catch (error) {\n console.warn(`Failed to decode ABI uint8 from ${hexResult}: ${error}`);\n return fallback;\n }\n}\n\nasync function getEVMAssetDecimals({ chain, address }: { chain: EVMChain; address: string }) {\n const { baseDecimal } = getChainConfig(chain);\n\n const formattedAddress = address.toLowerCase();\n\n if (address === \"\" || !formattedAddress.startsWith(\"0x\")) return baseDecimal;\n\n const decimalResponse = await callEVMContract({ address, chain, id: 2, methodHex: \"0x313ce567\" }).catch(\n (error: Error) => {\n console.warn(`Could not fetch decimals for ${address} on ${chain}: ${error.message}`);\n return { result: \"\" };\n },\n );\n\n const decimals = decodeABIUint8(decimalResponse.result, baseDecimal);\n return decimals;\n}\n\nasync function getEVMAssetTicker({ chain, address }: { chain: EVMChain; address: string }) {\n const formattedAddress = address.toLowerCase();\n\n if (formattedAddress === \"\" || !formattedAddress.startsWith(\"0x\")) return undefined;\n\n const tickerResponse = await callEVMContract({ address, chain, id: 1, methodHex: \"0x95d89b41\" }).catch(\n (error: Error) => {\n console.warn(`Could not fetch symbol for ${address} on ${chain}: ${error.message}`);\n return { result: \"\" };\n },\n );\n\n const ticker = await decodeABIString(tickerResponse.result);\n\n return ticker;\n}\n\nexport function fetchTokenInfo({ chain, address }: { chain: Chain; address: string }) {\n const { baseDecimal } = getChainConfig(chain);\n const defaultResult = { decimals: baseDecimal, ticker: undefined };\n\n return match(chain)\n .with(...EVMChains, async () => {\n try {\n const { isAddress, getAddress } = await import(\"ethers\");\n\n if (!isAddress(getAddress(address.replace(/^0X/, \"0x\")))) return defaultResult;\n\n const [ticker, decimals] = await Promise.all([\n getEVMAssetTicker({ address, chain: chain as EVMChain }),\n getEVMAssetDecimals({ address, chain: chain as EVMChain }),\n ]);\n\n return { decimals, ticker };\n } catch (error: any) {\n console.warn(`Failed to fetch token info for ${address} on ${chain}: ${error?.code} ${error?.message}`);\n return defaultResult;\n }\n })\n .with(Chain.Solana, async () => {\n if (!address) return defaultResult;\n\n try {\n const response = await fetch(`https://lite-api.jup.ag/tokens/v2/search?query=${address}`);\n if (response.ok) {\n const data = await response.json();\n const token = Array.isArray(data) ? data[0] : data;\n if (token) {\n return { decimals: token.decimals ?? baseDecimal, ticker: token.symbol || undefined };\n }\n }\n } catch (error: any) {\n console.warn(`Failed to fetch Solana token info for ${address}: ${error?.code} ${error?.message}`);\n }\n return defaultResult;\n })\n .with(Chain.Tron, async () => {\n if (!address) return defaultResult;\n\n try {\n const TW = await import(\"tronweb\");\n const TronWeb = TW.TronWeb ?? TW.default?.TronWeb;\n const rpcUrl = await getRPCUrl(Chain.Tron);\n const tronWeb = new TronWeb({\n fullHost: rpcUrl,\n // Set a default address for read-only calls (required by TronWeb)\n privateKey: \"0000000000000000000000000000000000000000000000000000000000000001\",\n });\n\n const contract = await tronWeb.contract().at(address);\n\n const [symbolResult, decimalsResult] = await Promise.all([\n contract\n .symbol()\n .call()\n .catch((error: Error) => {\n console.warn(`Could not fetch symbol for ${address} on Tron:`, error);\n return undefined;\n }),\n contract\n .decimals()\n .call()\n .catch((error: Error) => {\n console.warn(`Could not fetch decimals for ${address} on Tron:`, error);\n return baseDecimal;\n }),\n ]);\n\n return {\n decimals: typeof decimalsResult === \"number\" ? decimalsResult : Number(decimalsResult || baseDecimal),\n ticker: symbolResult || undefined,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to fetch Tron token info for ${address}: ${errorMessage}`);\n return defaultResult;\n }\n })\n .with(Chain.Near, async () => {\n if (!address) return defaultResult;\n\n try {\n const { JsonRpcProvider } = await import(\"@near-js/providers\");\n const rpcUrl = await getRPCUrl(Chain.Near);\n const provider = new JsonRpcProvider({ url: rpcUrl });\n\n const metadata = await provider.query({\n account_id: address,\n args_base64: Buffer.from(\"{}\").toString(\"base64\"),\n finality: \"final\",\n method_name: \"ft_metadata\",\n request_type: \"call_function\",\n });\n\n const result = JSON.parse(Buffer.from((metadata as any).result).toString());\n\n return { decimals: result?.decimals || baseDecimal, ticker: result?.symbol };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to fetch Near token info for ${address}: ${errorMessage}`);\n return defaultResult;\n }\n })\n .with(Chain.Radix, async () => {\n if (!address) return defaultResult;\n\n try {\n const [ticker, decimals] = await Promise.all([getRadixAssetTicker(address), getRadixAssetDecimals(address)]);\n\n return { decimals, ticker };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to fetch Radix token info for ${address}: ${errorMessage}`);\n return defaultResult;\n }\n })\n .otherwise(async () => defaultResult);\n}\n\nexport function isGasAsset({ chain, symbol }: { chain: Chain; symbol: string }) {\n return match(chain)\n .with(...ethGasChains, () => symbol === \"ETH\")\n .with(Chain.Avalanche, () => symbol === \"AVAX\")\n .with(Chain.Berachain, () => symbol === \"BERA\")\n .with(Chain.BinanceSmartChain, () => symbol === \"BNB\")\n .with(Chain.Gnosis, () => symbol === \"xDAI\" || symbol === \"XDAI\")\n .with(Chain.Monad, () => symbol === \"MON\")\n .with(Chain.XLayer, () => symbol === \"OKB\")\n .with(Chain.Maya, () => symbol === \"CACAO\")\n .with(Chain.Cosmos, () => symbol === \"ATOM\")\n .with(Chain.THORChain, () => symbol === \"RUNE\")\n .with(Chain.Tron, () => symbol === \"TRX\")\n .with(Chain.Radix, () => `${chain}.${symbol}` === getCommonAssetInfo(chain).identifier)\n .otherwise(() => symbol === chain);\n}\n\nexport const getCommonAssetInfo = (assetString: CommonAssetString) => {\n const { baseDecimal: decimal } = getChainConfig(assetString as Chain);\n\n const commonAssetInfo = match(assetString.toUpperCase())\n .with(...ethGasChains, (asset) => ({ decimal, identifier: `${asset}.ETH` }))\n .with(Chain.THORChain, (asset) => ({ decimal, identifier: `${asset}.RUNE` }))\n .with(Chain.Cosmos, (asset) => ({ decimal, identifier: `${asset}.ATOM` }))\n .with(Chain.Maya, (asset) => ({ decimal: 10, identifier: `${asset}.CACAO` }))\n .with(Chain.BinanceSmartChain, (asset) => ({ decimal, identifier: `${asset}.BNB` }))\n .with(Chain.Monad, (asset) => ({ decimal, identifier: `${asset}.MON` }))\n .with(Chain.Avalanche, (asset) => ({ decimal, identifier: `${asset}.AVAX` }))\n .with(Chain.Gnosis, (asset) => ({ decimal, identifier: `${asset}.xDAI` }))\n .with(Chain.XLayer, (asset) => ({ decimal, identifier: `${asset}.OKB` }))\n .with(Chain.Berachain, (asset) => ({ decimal, identifier: `${asset}.BERA` }))\n .with(Chain.Tron, (asset) => ({ decimal, identifier: `${asset}.TRX` }))\n .with(\n Chain.Solana,\n Chain.Chainflip,\n Chain.Kujira,\n Chain.Ripple,\n Chain.Polkadot,\n Chain.Near,\n ...UTXOChains,\n (asset) => ({ decimal, identifier: `${asset}.${asset}` }),\n )\n .with(Chain.Radix, \"XRD.XRD\", () => ({ decimal, identifier: \"XRD.XRD\" }))\n .with(Chain.Polygon, \"POL.POL\", () => ({ decimal, identifier: \"POL.POL\" }))\n .with(\"KUJI.USK\", (asset) => ({ decimal: 6, identifier: asset }))\n .with(\"ETH.FLIP\", () => ({\n decimal: getChainConfig(Chain.Ethereum).baseDecimal,\n identifier: \"ETH.FLIP-0x826180541412D574cf1336d22c0C0a287822678A\",\n }))\n .with(\"ETH.THOR\", () => ({\n decimal: getChainConfig(Chain.Ethereum).baseDecimal,\n identifier: \"ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044\",\n }))\n .with(\"ETH.vTHOR\", () => ({\n decimal: getChainConfig(Chain.Ethereum).baseDecimal,\n identifier: \"ETH.vTHOR-0x815c23eca83261b6ec689b60cc4a58b54bc24d8d\",\n }))\n .with(\"MAYA.CACAO\", (identifier) => ({ decimal: 10, identifier }))\n .with(\"MAYA.MAYA\", (identifier) => ({ decimal: 4, identifier }))\n // Just to be sure that we are not missing any chain\n .otherwise(() => ({ decimal, identifier: assetString }));\n\n return commonAssetInfo;\n};\n\nexport function getAssetType({ chain, symbol }: { chain: Chain; symbol: string }) {\n if (symbol.includes(\"/\")) return \"Synth\";\n if (symbol.includes(\"~\")) return \"Trade\";\n\n const isNative = match(chain)\n .with(Chain.Radix, () => symbol === Chain.Radix || `${chain}.${symbol}` === getCommonAssetInfo(chain).identifier)\n .with(Chain.Arbitrum, Chain.Optimism, Chain.Base, Chain.Aurora, () => symbol === Chain.Ethereum)\n .with(Chain.Cosmos, () => symbol === \"ATOM\")\n .with(Chain.BinanceSmartChain, () => symbol === \"BNB\")\n .with(Chain.Maya, () => symbol === \"CACAO\")\n .with(Chain.Monad, () => symbol === \"MON\")\n .with(Chain.THORChain, () => symbol === \"RUNE\")\n .with(Chain.Tron, () => symbol === \"TRX\")\n .with(Chain.XLayer, () => symbol === \"OKB\")\n .otherwise(() => symbol === chain);\n\n return isNative ? \"Native\" : chain;\n}\n\nexport const assetFromString = (assetString: string) => {\n const [chain, ...symbolArray] = assetString.split(\".\") as [Chain, ...(string | undefined)[]];\n const synth = assetString.includes(\"/\");\n const symbol = symbolArray.join(\".\");\n const splitSymbol = symbol?.split(\"-\");\n const ticker = splitSymbol?.length\n ? splitSymbol.length === 1\n ? splitSymbol[0]\n : splitSymbol.slice(0, -1).join(\"-\")\n : undefined;\n\n return { chain, symbol, synth, ticker };\n};\n\nexport async function findAssetBy(params: { chain: Chain; contract: string } | { identifier: `${Chain}.${string}` }) {\n const { loadTokenLists } = await import(\"../tokens\");\n const tokenLists = await loadTokenLists();\n\n for (const tokenList of Object.values(tokenLists)) {\n for (const { identifier, chain: tokenChain, ...rest } of tokenList.tokens) {\n if (\"identifier\" in params && identifier === params.identifier) {\n return identifier as TokenNames;\n }\n\n if (\n \"address\" in rest &&\n \"chain\" in params &&\n tokenChain === params.chain &&\n rest.address &&\n rest.address.toLowerCase() === params.contract.toLowerCase()\n )\n return identifier as TokenNames;\n }\n }\n\n return;\n}\n",
|
|
6
|
+
"/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport type { TokenListName, TokenNames, TokenTax } from \"@tcswap/tokens\";\nimport { AllChains, Chain, type ChainId, type EVMChain, EVMChains, getChainConfig } from \"@tcswap/types\";\nimport { getAddress } from \"ethers\";\nimport { match } from \"ts-pattern\";\nimport {\n assetFromString,\n type CommonAssetString,\n fetchTokenInfo,\n getAssetType,\n getCommonAssetInfo,\n isGasAsset,\n isSecuredAssetIdentifier,\n} from \"../utils/asset\";\nimport { warnOnce } from \"../utils/others\";\nimport { validateIdentifier } from \"../utils/validators\";\n\nimport type { NumberPrimitives } from \"./bigIntArithmetics\";\nimport { BigIntArithmetics, formatBigIntToSafeValue } from \"./bigIntArithmetics\";\nimport { USwapError } from \"./uSwapError\";\nimport type { SwapKitValueType } from \"./uSwapNumber\";\n\nconst CASE_SENSITIVE_CHAINS: Chain[] = [Chain.Solana, Chain.Tron, Chain.Near, Chain.Sui];\nconst TC_CHAINS: Chain[] = [Chain.THORChain, Chain.Maya];\n\nconst staticTokensMap = new Map<\n TokenNames | (string & {}),\n { tax?: TokenTax; decimal: number; identifier: string; logoURI?: string }\n>();\n\nconst chainAddressIdentifierMap = new Map<string, string>();\n\nconst asyncTokenCache = new Map<string, { identifier: string; decimals: number; timestamp: number }>();\nconst CACHE_TTL = 3600000;\n\nfunction getCachedTokenInfo(key: string) {\n const cached = asyncTokenCache.get(key);\n\n if (cached?.timestamp && Date.now() - cached.timestamp > CACHE_TTL) {\n asyncTokenCache.delete(key);\n return undefined;\n }\n\n return cached;\n}\n\nfunction setCachedTokenInfo(key: string, info: { identifier: string; decimals: number }) {\n if (asyncTokenCache.size > 1000) {\n const firstKey = asyncTokenCache.keys().next().value;\n if (firstKey) asyncTokenCache.delete(firstKey);\n }\n\n asyncTokenCache.set(key, { ...info, timestamp: Date.now() });\n}\n\ntype ConditionalAssetValueReturn<T extends { asyncTokenLookup?: boolean }> = T[\"asyncTokenLookup\"] extends true\n ? Promise<AssetValue>\n : AssetValue;\n\ntype AssetIdentifier =\n | { asset: CommonAssetString | TokenNames }\n | { asset: string }\n | { chain: Chain; address?: string };\n\ntype AssetValueFromParams = AssetIdentifier & {\n value?: NumberPrimitives | SwapKitValueType;\n fromBaseDecimal?: number;\n asyncTokenLookup?: boolean;\n};\n\nexport class AssetValue extends BigIntArithmetics {\n address?: string;\n chain: Chain;\n isGasAsset = false;\n isSecuredAsset = false;\n isSynthetic = false;\n isTradeAsset = false;\n symbol: string;\n tax?: TokenTax;\n ticker: string;\n type: ReturnType<typeof getAssetType>;\n chainId: ChainId;\n\n constructor({\n value,\n decimal,\n tax,\n chain,\n symbol,\n identifier,\n }: { decimal: number; value: SwapKitValueType; tax?: TokenTax } & (\n | { chain: Chain; symbol: string; identifier?: never }\n | { identifier: string; chain?: never; symbol?: never }\n )) {\n super(typeof value === \"object\" ? value : { decimal, value });\n\n const assetInfo = getAssetInfo(identifier || `${chain}.${symbol}`);\n\n this.type = getAssetType(assetInfo);\n this.tax = tax;\n this.chain = assetInfo.chain;\n this.ticker = assetInfo.ticker;\n this.symbol = assetInfo.symbol;\n this.address = assetInfo.address;\n this.isSynthetic = assetInfo.isSynthetic;\n this.isTradeAsset = assetInfo.isTradeAsset;\n this.isSecuredAsset = assetInfo.isSecuredAsset ?? false;\n this.isGasAsset = assetInfo.isGasAsset;\n this.chainId = getChainConfig(assetInfo.chain).chainId;\n }\n\n toString({ includeSynthProtocol }: { includeSynthProtocol?: boolean } = {}) {\n return (this.isSynthetic || this.isTradeAsset || this.isSecuredAsset) && !includeSynthProtocol\n ? this.symbol\n : `${this.chain}.${this.symbol}`;\n }\n\n toUrl() {\n if (this.isSynthetic) {\n return `${this.chain}.${this.symbol.replace(/\\//g, \".\")}`;\n }\n\n if (this.isTradeAsset) {\n return `${this.chain}.${this.symbol.replace(/~/g, \"..\")}`;\n }\n\n if (this.isSecuredAsset) {\n return `${this.chain}.${this.symbol}`;\n }\n\n const encodedSymbol = this.symbol.replace(/\\./g, \"__\");\n return `${this.chain}.${encodedSymbol}`;\n }\n\n getIconUrl() {\n const token = staticTokensMap.get(this.toString());\n return token?.logoURI;\n }\n\n eqAsset({ chain, symbol }: { chain: Chain; symbol: string }) {\n return this.chain === chain && this.symbol === symbol;\n }\n\n eq(assetValue: AssetValue) {\n return this.eqAsset(assetValue) && this.eqValue(assetValue);\n }\n\n static fromUrl(urlAsset: string, value: NumberPrimitives = 0) {\n const firstDotIndex = urlAsset.indexOf(\".\");\n\n if (firstDotIndex === -1) {\n throw new USwapError({ errorKey: \"helpers_invalid_asset_url\", info: { urlAsset } });\n }\n\n const chain = urlAsset.slice(0, firstDotIndex);\n const rest = urlAsset.slice(firstDotIndex + 1);\n\n const asset = match({ chain: chain as Chain, rest })\n .when(\n ({ rest }) => rest.includes(\"..\"),\n ({ chain, rest }) => `${chain}.${rest.replace(/\\.\\./g, \"~\")}`,\n )\n .when(\n ({ chain, rest }) => TC_CHAINS.includes(chain) && rest.includes(\".\"),\n ({ chain, rest }) => `${chain}.${rest.replace(/\\./g, \"/\")}`,\n )\n .otherwise(({ chain, rest }) => `${chain}.${rest.replace(/__/g, \".\")}`);\n\n return AssetValue.from({ asset, value });\n }\n\n static from<T extends {}>({\n value = 0,\n fromBaseDecimal,\n asyncTokenLookup,\n ...fromAssetOrChain\n }: T & AssetValueFromParams): ConditionalAssetValueReturn<T> {\n const parsedValue = value instanceof BigIntArithmetics ? value.getValue(\"string\") : value;\n const assetOrChain = getAssetString(fromAssetOrChain);\n\n const isChainAddressCombo = !assetOrChain.startsWith(Chain.Sui) && assetOrChain.includes(\":\");\n\n if (asyncTokenLookup && isChainAddressCombo) {\n const [chain, address] = assetOrChain.split(\":\") as [Chain, string];\n\n return createAsyncAssetValue({ address, chain, fromBaseDecimal, parsedValue }) as ConditionalAssetValueReturn<T>;\n }\n\n const fallbackIdentifier = isChainAddressCombo ? assetOrChain.split(\":\").join(\".UNKNOWN-\") : assetOrChain;\n\n const { identifier: unsafeIdentifier, decimal: commonAssetDecimal } = getCommonAssetInfo(\n fallbackIdentifier as CommonAssetString,\n );\n\n const { chain, isSynthetic, isTradeAsset, isSecuredAsset, address } = getAssetInfo(unsafeIdentifier);\n const { baseDecimal } = getChainConfig(chain);\n\n const token = staticTokensMap.get(\n CASE_SENSITIVE_CHAINS.includes(chain)\n ? (unsafeIdentifier as TokenNames)\n : (unsafeIdentifier.toUpperCase() as TokenNames),\n );\n\n if (!token && asyncTokenLookup && !isSynthetic && !isTradeAsset && !isSecuredAsset) {\n return (async () => {\n const { ticker } = assetFromString(unsafeIdentifier);\n const tokenData = await fetchTokenData({ address, chain, ticker });\n return createAssetValue({\n decimal: tokenData.decimals,\n identifier: tokenData.identifier,\n value: fromBaseDecimal ? safeValue(BigInt(parsedValue), fromBaseDecimal) : parsedValue,\n });\n })() as ConditionalAssetValueReturn<T>;\n }\n\n const tokenDecimal = token?.decimal || commonAssetDecimal;\n\n warnOnce({\n condition: !tokenDecimal && !asyncTokenLookup,\n id: `assetValue_static_decimal_not_found_${chain}`,\n warning: `Couldn't find static decimal for one or more tokens on ${chain} (Using default ${baseDecimal} decimal as fallback).\nThis can result in incorrect calculations and mess with amount sent on transactions.\nYou can load static assets by installing @tcswap/tokens package and calling AssetValue.loadStaticAssets()\nor by passing asyncTokenLookup: true to the from() function, which will make it async and return a promise.`,\n });\n\n const { decimal, identifier, tax } = token || {\n decimal: tokenDecimal || baseDecimal,\n identifier: unsafeIdentifier,\n };\n\n const adjustedValue = fromBaseDecimal\n ? safeValue(BigInt(parsedValue), fromBaseDecimal)\n : safeValue(parsedValue, decimal);\n\n const assetValue =\n isSynthetic || isTradeAsset\n ? createSyntheticAssetValue(identifier, adjustedValue)\n : isSecuredAsset\n ? createSecuredAssetValue(identifier, adjustedValue)\n : createAssetValue({ decimal, identifier, tax, value: adjustedValue });\n\n return assetValue as ConditionalAssetValueReturn<T>;\n }\n\n static async loadStaticAssets(listNames?: TokenListName[]) {\n const { loadTokenLists } = await import(\"@tcswap/tokens\");\n const lists = await loadTokenLists(listNames);\n\n for (const { tokens } of Object.values(lists)) {\n for (const { identifier, chain, ...rest } of tokens) {\n const chainConfig = getChainConfig(chain as Chain);\n\n const tokenKey = (\n CASE_SENSITIVE_CHAINS.includes(chainConfig.chain) ? identifier : identifier.toUpperCase()\n ) as TokenNames;\n const tokenDecimal = \"decimals\" in rest ? rest.decimals : chainConfig.baseDecimal;\n\n const tokenInfo = {\n decimal: tokenDecimal,\n identifier,\n logoURI: \"logoURI\" in rest ? (rest.logoURI as string) : undefined,\n tax: \"tax\" in rest ? (rest.tax as TokenTax) : undefined,\n };\n\n staticTokensMap.set(tokenKey, tokenInfo);\n\n // Also populate chain:address map for quick lookups\n if (\"address\" in rest && rest.address) {\n const lookupKey = CASE_SENSITIVE_CHAINS.includes(chainConfig.chain)\n ? `${chainConfig.chain}:${rest.address}`\n : `${chainConfig.chain}:${rest.address.toUpperCase()}`;\n chainAddressIdentifierMap.set(lookupKey, identifier);\n }\n }\n }\n\n return true;\n }\n\n static setStaticAssets(\n tokenMap: Map<\n string,\n { tax?: TokenTax; identifier: string; chain: Chain; address?: string } & (\n | { decimal: number }\n | { decimals: number }\n )\n >,\n ) {\n staticTokensMap.clear();\n chainAddressIdentifierMap.clear();\n\n for (const [key, value] of tokenMap.entries()) {\n const tokenKey = (\n CASE_SENSITIVE_CHAINS.includes(value.chain) ? value.identifier : value.identifier.toUpperCase()\n ) as TokenNames;\n const tokenDecimal = \"decimals\" in value ? value.decimals : value.decimal;\n const tokenInfo = { ...value, decimal: tokenDecimal, identifier: tokenKey };\n\n staticTokensMap.set(key, tokenInfo);\n\n if (value.address) {\n const lookupKey = CASE_SENSITIVE_CHAINS.includes(value.chain)\n ? `${value.chain}:${value.address}`\n : `${value.chain}:${value.address.toUpperCase()}`;\n chainAddressIdentifierMap.set(lookupKey, value.identifier);\n }\n }\n return true;\n }\n\n static get staticAssets() {\n return staticTokensMap;\n }\n}\n\nexport function getMinAmountByChain(chain: Chain) {\n const asset = AssetValue.from({ chain });\n\n return match(chain)\n .with(Chain.Bitcoin, Chain.Litecoin, Chain.BitcoinCash, Chain.Dash, () => asset.set(0.00010001))\n .with(Chain.Dogecoin, () => asset.set(1.00000001))\n .with(Chain.Avalanche, Chain.Ethereum, Chain.Arbitrum, Chain.BinanceSmartChain, () => asset.set(0.00000001))\n .with(Chain.THORChain, Chain.Maya, () => asset.set(0))\n .with(Chain.Cosmos, Chain.Kujira, () => asset.set(0.000001))\n .otherwise(() => asset.set(0.00000001));\n}\n\nasync function fetchTokenData({ chain, address, ticker }: { chain: Chain; address?: string; ticker?: string }) {\n const isCaseSensitiveChain = CASE_SENSITIVE_CHAINS.includes(chain);\n\n const cacheKey = isCaseSensitiveChain\n ? `${chain}:${address || ticker}`\n : `${chain}:${address || ticker}`.toUpperCase();\n\n const cached = getCachedTokenInfo(cacheKey);\n if (cached) {\n return cached;\n }\n\n if (!address) {\n const { baseDecimal } = getChainConfig(chain);\n return { decimals: baseDecimal, identifier: `${chain}.${ticker || \"UNKNOWN\"}` };\n }\n\n const tokenInfo = await fetchTokenInfo({ address, chain });\n\n const identifier = `${chain}.${tokenInfo.ticker || ticker || \"UNKNOWN\"}-${address}`;\n\n warnOnce({\n condition: !!(!tokenInfo.ticker && ticker),\n id: `async_token_lookup_failed_${chain}_${address}`,\n warning: `Could not fetch token metadata for ${chain}:${address} from chain. Using user-provided ticker (${ticker}) with baseDecimal (${tokenInfo.decimals}).`,\n });\n\n // only cache if we got a proper ticker back\n tokenInfo.ticker && setCachedTokenInfo(cacheKey, { decimals: tokenInfo.decimals, identifier });\n\n return { decimals: tokenInfo.decimals, identifier };\n}\n\nfunction createAssetValue({\n identifier,\n decimal,\n value,\n tax,\n}: {\n identifier: string;\n decimal: number;\n value: NumberPrimitives;\n tax?: TokenTax;\n}) {\n validateIdentifier(identifier);\n return new AssetValue({ decimal, identifier, tax, value: safeValue(value, decimal) });\n}\n\nfunction createSyntheticAssetValue(identifier: string, value: NumberPrimitives = 0) {\n const chain = identifier.includes(\".\") ? (identifier.split(\".\")?.[0]?.toUpperCase() as Chain) : undefined;\n const isMayaOrThor = chain ? TC_CHAINS.includes(chain) : false;\n\n const assetSeparator = identifier.slice(0, 14).includes(\"~\") ? \"~\" : \"/\";\n\n const [synthChain, symbol] = isMayaOrThor\n ? identifier.split(\".\").slice(1).join().split(assetSeparator)\n : identifier.split(assetSeparator);\n\n if (!(synthChain && symbol)) {\n throw new USwapError({ errorKey: \"helpers_invalid_asset_identifier\", info: { identifier } });\n }\n\n return new AssetValue({\n decimal: 8,\n identifier: `${chain || Chain.THORChain}.${synthChain}${assetSeparator}${symbol}`,\n value: safeValue(value, 8),\n });\n}\n\nfunction createSecuredAssetValue(identifier: string, value: NumberPrimitives = 0) {\n // Canonical Secured Asset identifier is the bare \"<CHAIN>-<SYMBOL>\" form. The caller has\n // already routed here via `isSecuredAssetIdentifier`, which rejects anything with a dot.\n const dashIndex = identifier.indexOf(\"-\");\n if (dashIndex === -1) {\n throw new USwapError({ errorKey: \"helpers_invalid_asset_identifier\", info: { identifier } });\n }\n\n const securedChain = identifier.slice(0, dashIndex).toUpperCase();\n const symbolRemainder = identifier.slice(dashIndex + 1).toUpperCase();\n\n if (!securedChain || !symbolRemainder) {\n throw new USwapError({ errorKey: \"helpers_invalid_asset_identifier\", info: { identifier } });\n }\n\n return new AssetValue({ decimal: 8, identifier: `${securedChain}-${symbolRemainder}`, value: safeValue(value, 8) });\n}\n\nasync function createAsyncAssetValue({\n address,\n chain,\n fromBaseDecimal,\n parsedValue,\n}: {\n address: string;\n chain: Chain;\n fromBaseDecimal?: number;\n parsedValue: NumberPrimitives;\n}): Promise<AssetValue> {\n const { decimals, identifier } = await fetchTokenData({ address, chain });\n const value = fromBaseDecimal ? safeValue(BigInt(parsedValue), fromBaseDecimal) : parsedValue;\n return createAssetValue({ decimal: decimals, identifier, value });\n}\n\nfunction safeValue(value: NumberPrimitives, decimal: number) {\n return typeof value === \"bigint\" ? formatBigIntToSafeValue({ bigIntDecimal: decimal, decimal, value }) : value;\n}\n\nfunction validateAssetChain(assetOrChain: AssetIdentifier) {\n const chain = match(assetOrChain)\n .when(\n (x): x is { chain: Chain } => \"chain\" in x && x.chain !== undefined,\n ({ chain }) => chain,\n )\n .otherwise((x) => {\n const assetStr = (x as { asset: string }).asset;\n if (isSecuredAssetIdentifier(assetStr)) return Chain.THORChain;\n if (assetStr.includes(\"/\") || assetStr.includes(\"~\")) return Chain.THORChain;\n const assetInfo = assetFromString(assetStr);\n return assetInfo.chain;\n });\n\n // TODO: move to USwapConfig chains once we support it throughout sdk\n if (!AllChains.includes(chain.toUpperCase() as Chain)) {\n throw new USwapError({\n errorKey: \"helpers_invalid_asset_identifier\",\n info: { message: \"Please use the AssetValue constructor for unsupported chains\" },\n });\n }\n}\n\nfunction getAssetString(assetOrChain: AssetIdentifier) {\n validateAssetChain(assetOrChain);\n\n if (\"chain\" in assetOrChain) {\n const { chain, address } = assetOrChain;\n\n if (address) {\n const lookupKey = CASE_SENSITIVE_CHAINS.includes(chain as Chain)\n ? `${chain}:${address}`\n : `${chain}:${address.toUpperCase()}`;\n const identifier = chainAddressIdentifierMap.get(lookupKey);\n if (identifier) return identifier;\n return lookupKey;\n }\n\n return chain;\n }\n\n if (isSecuredAssetIdentifier(assetOrChain.asset)) {\n return assetOrChain.asset.toUpperCase();\n }\n\n const { chain, symbol } = assetFromString(assetOrChain.asset);\n const isNativeChain = getAssetType({ chain, symbol }) === \"Native\";\n\n return isNativeChain ? chain : assetOrChain.asset;\n}\n\nfunction getSyntheticOrTradeAssetInfo(identifier: string, isSynthetic: boolean, isTradeAsset: boolean) {\n const splitIdentifier = identifier.split(\".\");\n const identifierChain = splitIdentifier[0]?.toUpperCase() as Chain;\n const isThorOrMaya = TC_CHAINS.includes(identifierChain);\n\n const assetSeparator = isTradeAsset ? \"~\" : \"/\";\n\n const [synthChain, synthSymbol = \"\"] = isThorOrMaya\n ? splitIdentifier.slice(1).join(\".\").split(assetSeparator)\n : identifier.split(assetSeparator);\n\n if (!(synthChain && synthSymbol)) {\n throw new USwapError({ errorKey: \"helpers_invalid_asset_identifier\", info: { identifier } });\n }\n\n // Get the ticker from the base symbol (e.g., \"AVAX\" from \"AVAX/AVAX\")\n const { ticker, address } = getAssetBaseInfo({ chain: synthChain as Chain, symbol: synthSymbol });\n const finalSymbol = `${synthChain}${assetSeparator}${synthSymbol}`;\n\n return {\n address,\n chain: identifierChain,\n isGasAsset: false,\n isSecuredAsset: false,\n isSynthetic,\n isTradeAsset,\n symbol: finalSymbol,\n ticker,\n };\n}\n\nfunction getSecuredAssetInfo(identifier: string) {\n // Canonical Secured Asset identifier is the bare \"<CHAIN>-<SYMBOL>\" form (no \"THOR.\" prefix).\n // `isSecuredAssetIdentifier` rejects anything containing a dot before this is reached.\n const dashIndex = identifier.indexOf(\"-\");\n const securedChain = identifier.slice(0, dashIndex).toUpperCase();\n const remainder = identifier.slice(dashIndex + 1);\n\n if (!securedChain || !remainder) {\n throw new USwapError({ errorKey: \"helpers_invalid_asset_identifier\", info: { identifier } });\n }\n\n // For token-bearing secured assets like ETH-USDC-0x…, ticker is the part between the chain\n // separator and the address; the address is the trailing 0x… segment if present.\n const lastDash = remainder.lastIndexOf(\"-\");\n const hasAddress = lastDash !== -1 && /^0[xX]/.test(remainder.slice(lastDash + 1));\n const ticker = (hasAddress ? remainder.slice(0, lastDash) : remainder).toUpperCase();\n const address = hasAddress ? remainder.slice(lastDash + 1) : undefined;\n const symbol = `${securedChain}-${remainder.toUpperCase()}`;\n\n return {\n address,\n chain: Chain.THORChain,\n isGasAsset: false,\n isSecuredAsset: true,\n isSynthetic: false,\n isTradeAsset: false,\n symbol,\n ticker,\n };\n}\n\nfunction getNormalAssetInfo(identifier: string) {\n const firstDotIndex = identifier.indexOf(\".\");\n const chain = (firstDotIndex === -1 ? identifier : identifier.slice(0, firstDotIndex)).toUpperCase() as Chain;\n const assetSymbol = firstDotIndex === -1 ? identifier : identifier.slice(firstDotIndex + 1);\n\n const { address, ticker } = getAssetBaseInfo({ chain, symbol: assetSymbol });\n\n let formattedAddress: string | undefined;\n try {\n formattedAddress =\n address && EVMChains.includes(chain as EVMChain) && getAddress(address) ? getAddress(address) : address;\n } catch {\n formattedAddress = address;\n }\n\n const finalSymbol = formattedAddress ? `${ticker}-${formattedAddress}` : assetSymbol;\n\n return {\n address: formattedAddress,\n chain,\n isGasAsset: isGasAsset({ chain, symbol: assetSymbol }),\n isSecuredAsset: false,\n isSynthetic: false,\n isTradeAsset: false,\n symbol: finalSymbol,\n ticker,\n };\n}\n\nfunction getAssetInfo(identifier: string) {\n const shortIdentifier = identifier.slice(0, 14);\n const isSynthetic = shortIdentifier.includes(\"/\");\n const isTradeAsset = shortIdentifier.includes(\"~\");\n\n if (isSynthetic || isTradeAsset) {\n return getSyntheticOrTradeAssetInfo(identifier, isSynthetic, isTradeAsset);\n }\n\n if (isSecuredAssetIdentifier(identifier)) {\n return getSecuredAssetInfo(identifier);\n }\n\n return getNormalAssetInfo(identifier);\n}\n\nfunction parseSymbolWithSeparator(symbol: string, useFirst = false) {\n const dashIndex = useFirst ? symbol.indexOf(\"-\") : symbol.lastIndexOf(\"-\");\n\n if (dashIndex === -1) {\n return { address: undefined, ticker: symbol };\n }\n\n const ticker = symbol.slice(0, dashIndex);\n const address = symbol.slice(dashIndex + 1);\n return { address, ticker };\n}\n\nfunction getAssetBaseInfo({ symbol, chain }: { symbol: string; chain: Chain }) {\n const { ticker, address } = parseSymbolWithSeparator(symbol, chain === Chain.Near);\n\n const finalAddress = address && !CASE_SENSITIVE_CHAINS.includes(chain) ? address.toLowerCase() : address;\n\n return { address: finalAddress, ticker };\n}\n",
|
|
7
|
+
"import type { TokenNames } from \"@tcswap/tokens\";\nimport { AllChains, Chain, type EVMChain, EVMChains, getChainConfig, UTXOChains } from \"@tcswap/types\";\nimport { match } from \"ts-pattern\";\nimport type { AssetValue } from \"../modules/assetValue\";\nimport { RequestClient } from \"../modules/requestClient\";\nimport { getRPCUrl } from \"./chains\";\n\nexport type CommonAssetString = (typeof CommonAssetStrings)[number] | Chain;\n\nexport type ConditionalAssetValueReturn<T extends boolean> = T extends true ? Promise<AssetValue[]> : AssetValue[];\n\nexport const CommonAssetStrings = [\n `${Chain.Maya}.MAYA`,\n `${Chain.Maya}.CACAO`,\n `${Chain.Ethereum}.THOR`,\n `${Chain.Ethereum}.vTHOR`,\n `${Chain.Kujira}.USK`,\n `${Chain.Ethereum}.FLIP`,\n `${Chain.Radix}.XRD`,\n] as const;\n\ntype RadixResourceResponse = {\n at_ledger_state?: any;\n manager: {\n resource_type: string;\n divisibility: { substate_type: string; is_locked: boolean; value: { divisibility: number } };\n };\n owner_role?: any;\n};\nconst ethGasChains = [Chain.Arbitrum, Chain.Aurora, Chain.Base, Chain.Ethereum, Chain.Optimism] as const;\n\nasync function getRadixAssetDecimals(address: string) {\n const { baseDecimal } = getChainConfig(Chain.Radix);\n\n try {\n const rpcUrl = await getRPCUrl(Chain.Radix);\n\n const { manager } = await RequestClient.post<RadixResourceResponse>(`${rpcUrl}/state/resource`, {\n body: JSON.stringify({ network: \"mainnet\", resource_address: address }),\n headers: { Accept: \"*/*\", \"Content-Type\": \"application/json\" },\n });\n\n return manager?.divisibility?.value?.divisibility;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to fetch Radix asset decimals for ${address}: ${errorMessage}`);\n return baseDecimal;\n }\n}\n\nasync function getRadixAssetTicker(address: string) {\n try {\n const rpcUrl = await getRPCUrl(Chain.Radix);\n\n const response = await RequestClient.post<{\n items: Array<{\n address: string;\n explicit_metadata?: { items: Array<{ key: string; value: { typed: { value: string; type: string } } }> };\n }>;\n }>(`${rpcUrl}/state/entity/details`, {\n body: JSON.stringify({ addresses: [address], opt_ins: { explicit_metadata: [\"symbol\"] } }),\n headers: { Accept: \"*/*\", \"Content-Type\": \"application/json\" },\n });\n\n const symbolMetadata = response.items[0]?.explicit_metadata?.items.find((item) => item.key === \"symbol\");\n return symbolMetadata?.value.typed.value || undefined;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to fetch Radix asset symbol for ${address}: ${errorMessage}`);\n return \"\";\n }\n}\n\nasync function callEVMContract({\n chain,\n address,\n methodHex,\n id,\n}: {\n chain: EVMChain;\n address: string;\n methodHex: string;\n id: number;\n}) {\n const rpcUrl = await getRPCUrl(chain);\n return RequestClient.post<{ result: string }>(rpcUrl, {\n body: JSON.stringify({\n id,\n jsonrpc: \"2.0\",\n method: \"eth_call\",\n params: [{ data: methodHex, to: address.toLowerCase() }, \"latest\"],\n }),\n headers: { accept: \"*/*\", \"cache-control\": \"no-cache\", \"content-type\": \"application/json\" },\n });\n}\n\nasync function decodeABIString(hexResult: string) {\n if (!hexResult || hexResult === \"0x\") return \"UNKNOWN\";\n\n try {\n const { AbiCoder } = await import(\"ethers\");\n const abiCoder = AbiCoder.defaultAbiCoder();\n const decoded = abiCoder.decode([\"string\"], hexResult);\n return decoded[0].trim();\n } catch (error) {\n console.warn(`Failed to decode ABI string from ${hexResult}: ${error}`);\n return \"UNKNOWN\";\n }\n}\n\nfunction decodeABIUint8(hexResult: string, fallback: number) {\n if (!hexResult || hexResult === \"0x\") return fallback;\n\n try {\n return Number(hexResult);\n } catch (error) {\n console.warn(`Failed to decode ABI uint8 from ${hexResult}: ${error}`);\n return fallback;\n }\n}\n\nasync function getEVMAssetDecimals({ chain, address }: { chain: EVMChain; address: string }) {\n const { baseDecimal } = getChainConfig(chain);\n\n const formattedAddress = address.toLowerCase();\n\n if (address === \"\" || !formattedAddress.startsWith(\"0x\")) return baseDecimal;\n\n const decimalResponse = await callEVMContract({ address, chain, id: 2, methodHex: \"0x313ce567\" }).catch(\n (error: Error) => {\n console.warn(`Could not fetch decimals for ${address} on ${chain}: ${error.message}`);\n return { result: \"\" };\n },\n );\n\n const decimals = decodeABIUint8(decimalResponse.result, baseDecimal);\n return decimals;\n}\n\nasync function getEVMAssetTicker({ chain, address }: { chain: EVMChain; address: string }) {\n const formattedAddress = address.toLowerCase();\n\n if (formattedAddress === \"\" || !formattedAddress.startsWith(\"0x\")) return undefined;\n\n const tickerResponse = await callEVMContract({ address, chain, id: 1, methodHex: \"0x95d89b41\" }).catch(\n (error: Error) => {\n console.warn(`Could not fetch symbol for ${address} on ${chain}: ${error.message}`);\n return { result: \"\" };\n },\n );\n\n const ticker = await decodeABIString(tickerResponse.result);\n\n return ticker;\n}\n\nexport function fetchTokenInfo({ chain, address }: { chain: Chain; address: string }) {\n const { baseDecimal } = getChainConfig(chain);\n const defaultResult = { decimals: baseDecimal, ticker: undefined };\n\n return match(chain)\n .with(...EVMChains, async () => {\n try {\n const { isAddress, getAddress } = await import(\"ethers\");\n\n if (!isAddress(getAddress(address.replace(/^0X/, \"0x\")))) return defaultResult;\n\n const [ticker, decimals] = await Promise.all([\n getEVMAssetTicker({ address, chain: chain as EVMChain }),\n getEVMAssetDecimals({ address, chain: chain as EVMChain }),\n ]);\n\n return { decimals, ticker };\n } catch (error: any) {\n console.warn(`Failed to fetch token info for ${address} on ${chain}: ${error?.code} ${error?.message}`);\n return defaultResult;\n }\n })\n .with(Chain.Solana, async () => {\n if (!address) return defaultResult;\n\n try {\n const response = await fetch(`https://lite-api.jup.ag/tokens/v2/search?query=${address}`);\n if (response.ok) {\n const data = await response.json();\n const token = Array.isArray(data) ? data[0] : data;\n if (token) {\n return { decimals: token.decimals ?? baseDecimal, ticker: token.symbol || undefined };\n }\n }\n } catch (error: any) {\n console.warn(`Failed to fetch Solana token info for ${address}: ${error?.code} ${error?.message}`);\n }\n return defaultResult;\n })\n .with(Chain.Tron, async () => {\n if (!address) return defaultResult;\n\n try {\n const TW = await import(\"tronweb\");\n const TronWeb = TW.TronWeb ?? TW.default?.TronWeb;\n const rpcUrl = await getRPCUrl(Chain.Tron);\n const tronWeb = new TronWeb({\n fullHost: rpcUrl,\n // Set a default address for read-only calls (required by TronWeb)\n privateKey: \"0000000000000000000000000000000000000000000000000000000000000001\",\n });\n\n const contract = await tronWeb.contract().at(address);\n\n const [symbolResult, decimalsResult] = await Promise.all([\n contract\n .symbol()\n .call()\n .catch((error: Error) => {\n console.warn(`Could not fetch symbol for ${address} on Tron:`, error);\n return undefined;\n }),\n contract\n .decimals()\n .call()\n .catch((error: Error) => {\n console.warn(`Could not fetch decimals for ${address} on Tron:`, error);\n return baseDecimal;\n }),\n ]);\n\n return {\n decimals: typeof decimalsResult === \"number\" ? decimalsResult : Number(decimalsResult || baseDecimal),\n ticker: symbolResult || undefined,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to fetch Tron token info for ${address}: ${errorMessage}`);\n return defaultResult;\n }\n })\n .with(Chain.Near, async () => {\n if (!address) return defaultResult;\n\n try {\n const { JsonRpcProvider } = await import(\"@near-js/providers\");\n const rpcUrl = await getRPCUrl(Chain.Near);\n const provider = new JsonRpcProvider({ url: rpcUrl });\n\n const metadata = await provider.query({\n account_id: address,\n args_base64: Buffer.from(\"{}\").toString(\"base64\"),\n finality: \"final\",\n method_name: \"ft_metadata\",\n request_type: \"call_function\",\n });\n\n const result = JSON.parse(Buffer.from((metadata as any).result).toString());\n\n return { decimals: result?.decimals || baseDecimal, ticker: result?.symbol };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to fetch Near token info for ${address}: ${errorMessage}`);\n return defaultResult;\n }\n })\n .with(Chain.Radix, async () => {\n if (!address) return defaultResult;\n\n try {\n const [ticker, decimals] = await Promise.all([getRadixAssetTicker(address), getRadixAssetDecimals(address)]);\n\n return { decimals, ticker };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to fetch Radix token info for ${address}: ${errorMessage}`);\n return defaultResult;\n }\n })\n .otherwise(async () => defaultResult);\n}\n\nexport function isGasAsset({ chain, symbol }: { chain: Chain; symbol: string }) {\n return match(chain)\n .with(...ethGasChains, () => symbol === \"ETH\")\n .with(Chain.Avalanche, () => symbol === \"AVAX\")\n .with(Chain.Berachain, () => symbol === \"BERA\")\n .with(Chain.BinanceSmartChain, () => symbol === \"BNB\")\n .with(Chain.Gnosis, () => symbol === \"xDAI\" || symbol === \"XDAI\")\n .with(Chain.Monad, () => symbol === \"MON\")\n .with(Chain.XLayer, () => symbol === \"OKB\")\n .with(Chain.Maya, () => symbol === \"CACAO\")\n .with(Chain.Cosmos, () => symbol === \"ATOM\")\n .with(Chain.THORChain, () => symbol === \"RUNE\")\n .with(Chain.Tron, () => symbol === \"TRX\")\n .with(Chain.Radix, () => `${chain}.${symbol}` === getCommonAssetInfo(chain).identifier)\n .otherwise(() => symbol === chain);\n}\n\nexport const getCommonAssetInfo = (assetString: CommonAssetString) => {\n const { baseDecimal: decimal } = getChainConfig(assetString as Chain);\n\n const commonAssetInfo = match(assetString.toUpperCase())\n .with(...ethGasChains, (asset) => ({ decimal, identifier: `${asset}.ETH` }))\n .with(Chain.THORChain, (asset) => ({ decimal, identifier: `${asset}.RUNE` }))\n .with(Chain.Cosmos, (asset) => ({ decimal, identifier: `${asset}.ATOM` }))\n .with(Chain.Maya, (asset) => ({ decimal: 10, identifier: `${asset}.CACAO` }))\n .with(Chain.BinanceSmartChain, (asset) => ({ decimal, identifier: `${asset}.BNB` }))\n .with(Chain.Monad, (asset) => ({ decimal, identifier: `${asset}.MON` }))\n .with(Chain.Avalanche, (asset) => ({ decimal, identifier: `${asset}.AVAX` }))\n .with(Chain.Gnosis, (asset) => ({ decimal, identifier: `${asset}.xDAI` }))\n .with(Chain.XLayer, (asset) => ({ decimal, identifier: `${asset}.OKB` }))\n .with(Chain.Berachain, (asset) => ({ decimal, identifier: `${asset}.BERA` }))\n .with(Chain.Tron, (asset) => ({ decimal, identifier: `${asset}.TRX` }))\n .with(\n Chain.Solana,\n Chain.Chainflip,\n Chain.Kujira,\n Chain.Ripple,\n Chain.Polkadot,\n Chain.Near,\n ...UTXOChains,\n (asset) => ({ decimal, identifier: `${asset}.${asset}` }),\n )\n .with(Chain.Radix, \"XRD.XRD\", () => ({ decimal, identifier: \"XRD.XRD\" }))\n .with(Chain.Polygon, \"POL.POL\", () => ({ decimal, identifier: \"POL.POL\" }))\n .with(\"KUJI.USK\", (asset) => ({ decimal: 6, identifier: asset }))\n .with(\"ETH.FLIP\", () => ({\n decimal: getChainConfig(Chain.Ethereum).baseDecimal,\n identifier: \"ETH.FLIP-0x826180541412D574cf1336d22c0C0a287822678A\",\n }))\n .with(\"ETH.THOR\", () => ({\n decimal: getChainConfig(Chain.Ethereum).baseDecimal,\n identifier: \"ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044\",\n }))\n .with(\"ETH.vTHOR\", () => ({\n decimal: getChainConfig(Chain.Ethereum).baseDecimal,\n identifier: \"ETH.vTHOR-0x815c23eca83261b6ec689b60cc4a58b54bc24d8d\",\n }))\n .with(\"MAYA.CACAO\", (identifier) => ({ decimal: 10, identifier }))\n .with(\"MAYA.MAYA\", (identifier) => ({ decimal: 4, identifier }))\n // Just to be sure that we are not missing any chain\n .otherwise(() => ({ decimal, identifier: assetString }));\n\n return commonAssetInfo;\n};\n\nexport function isSecuredAssetIdentifier(identifier = \"\") {\n if (!identifier) return false;\n\n // Synthetic and trade assets use distinct separators; never confuse those with secured.\n if (identifier.includes(\"/\") || identifier.includes(\"~\")) return false;\n\n const upper = identifier.toUpperCase();\n\n // Canonical Secured Asset identifiers from THORChain are bare \"<CHAIN>-<SYMBOL>\" — they\n // never carry a chain prefix. Any \".\" means a normal chain.symbol identifier (ETH.USDC-0x…).\n if (upper.includes(\".\")) return false;\n\n const dashIndex = upper.indexOf(\"-\");\n if (dashIndex <= 0) return false;\n\n const chainPart = upper.slice(0, dashIndex);\n const tickerPart = upper.slice(dashIndex + 1);\n\n if (!chainPart || !tickerPart) return false;\n // First segment must be the L1 chain code (e.g. BTC, ETH, AVAX). Exclude THOR/MAYA themselves —\n // secured assets always derive from non-protocol L1 chains.\n if (chainPart === Chain.THORChain || chainPart === Chain.Maya) return false;\n if (!AllChains.includes(chainPart as Chain)) return false;\n\n // Tickers like \"0x…\" without anything before the address aren't valid; address-bearing tokens\n // come through as TICKER-0x… which is fine because the part before the address is the ticker.\n if (tickerPart.startsWith(\"0X\")) return false;\n\n return true;\n}\n\nexport function getAssetType({ chain, symbol }: { chain: Chain; symbol: string }) {\n if (symbol.includes(\"/\")) return \"Synth\";\n if (symbol.includes(\"~\")) return \"Trade\";\n if (chain === Chain.THORChain && isSecuredAssetIdentifier(symbol)) return \"Secured\";\n\n const isNative = match(chain)\n .with(Chain.Radix, () => symbol === Chain.Radix || `${chain}.${symbol}` === getCommonAssetInfo(chain).identifier)\n .with(Chain.Arbitrum, Chain.Optimism, Chain.Base, Chain.Aurora, () => symbol === Chain.Ethereum)\n .with(Chain.Cosmos, () => symbol === \"ATOM\")\n .with(Chain.BinanceSmartChain, () => symbol === \"BNB\")\n .with(Chain.Maya, () => symbol === \"CACAO\")\n .with(Chain.Monad, () => symbol === \"MON\")\n .with(Chain.THORChain, () => symbol === \"RUNE\")\n .with(Chain.Tron, () => symbol === \"TRX\")\n .with(Chain.XLayer, () => symbol === \"OKB\")\n .otherwise(() => symbol === chain);\n\n return isNative ? \"Native\" : chain;\n}\n\nexport const assetFromString = (assetString: string) => {\n const [chain, ...symbolArray] = assetString.split(\".\") as [Chain, ...(string | undefined)[]];\n const synth = assetString.includes(\"/\");\n const symbol = symbolArray.join(\".\");\n const splitSymbol = symbol?.split(\"-\");\n const ticker = splitSymbol?.length\n ? splitSymbol.length === 1\n ? splitSymbol[0]\n : splitSymbol.slice(0, -1).join(\"-\")\n : undefined;\n\n return { chain, symbol, synth, ticker };\n};\n\nexport async function findAssetBy(params: { chain: Chain; contract: string } | { identifier: `${Chain}.${string}` }) {\n const { loadTokenLists } = await import(\"../tokens\");\n const tokenLists = await loadTokenLists();\n\n for (const tokenList of Object.values(tokenLists)) {\n for (const { identifier, chain: tokenChain, ...rest } of tokenList.tokens) {\n if (\"identifier\" in params && identifier === params.identifier) {\n return identifier as TokenNames;\n }\n\n if (\n \"address\" in rest &&\n \"chain\" in params &&\n tokenChain === params.chain &&\n rest.address &&\n rest.address.toLowerCase() === params.contract.toLowerCase()\n )\n return identifier as TokenNames;\n }\n }\n\n return;\n}\n",
|
|
8
8
|
"/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport {\n AllChains,\n type Chain,\n getChainConfig,\n StagenetChain,\n StagenetMAYAConfig,\n StagenetTHORConfig,\n} from \"@tcswap/types\";\nimport { create } from \"zustand\";\nimport { useShallow } from \"zustand/shallow\";\nimport type { BalanceResponse, QuoteRequest, QuoteResponse, QuoteResponseRoute } from \"../api\";\nimport { WalletOption } from \"../types\";\nimport type { FeeMultiplierConfig } from \"./feeMultiplier\";\n\nexport type USwapConfigIntegrations = {\n chainflip?: { useSDKBroker?: boolean; brokerUrl: string };\n coinbase?: {\n appName: string;\n appLogoUrl?: string | null;\n darkMode?: boolean;\n linkAPIUrl?: string;\n overrideIsMetaMask?: boolean;\n overrideIsCoinbaseWallet?: boolean;\n overrideIsCoinbaseBrowser?: boolean;\n headlessMode?: boolean;\n reloadOnDisconnect?: boolean;\n };\n nearWalletSelector?: { contractId?: string };\n trezor?: { email: string; appUrl: string };\n keepKey?: { name: string; imageUrl: string; basePath: string; url: string };\n radix: {\n dAppDefinitionAddress: string;\n applicationName: string;\n applicationVersion: string;\n network: { networkId: number; networkName: string; dashboardBase: string };\n };\n};\n\nexport type CustomApiEndpoints = {\n getBalance: ({ chain, address }: { chain: Chain; address: string }) => Promise<BalanceResponse>;\n getQuote: (json: QuoteRequest) => Promise<QuoteResponse>;\n getRouteWithTx: (json: { routeId: string }) => Promise<QuoteResponseRoute>;\n};\n\nconst rpcUrls = AllChains.reduce(\n (acc, chain) => {\n if (!acc.THOR_STAGENET) {\n acc[StagenetChain.Maya] = StagenetMAYAConfig.rpcUrls;\n acc[StagenetChain.THORChain] = StagenetTHORConfig.rpcUrls;\n }\n\n acc[chain] = getChainConfig(chain).rpcUrls;\n return acc;\n },\n {} as { [key in Chain | StagenetChain]: string[] },\n);\n\nconst initialState = {\n apiKeys: {\n blockchair: \"\",\n keepKey: \"\",\n memoless: \"\",\n passkeys: \"\",\n uSwap: \"\",\n walletConnectProjectId: \"\",\n xaman: \"\",\n },\n chains: AllChains,\n endpoints: {} as CustomApiEndpoints,\n envs: {\n apiUrl: \"https://swap-api.unstoppable.money\",\n blockchairApiUrl: null as string | null,\n devApiUrl: \"https://swap-api-dev.unstoppable.money\",\n experimental_apiKey: null as string | null,\n experimental_apiUrlQuote: null as string | null,\n experimental_apiUrlSwap: null as string | null,\n isDev: false,\n isStagenet: false,\n memolessApiUrl: \"https://swap.unstoppable.money/memoless/api/v1\",\n },\n feeMultipliers: undefined as FeeMultiplierConfig | undefined,\n integrations: {\n radix: {\n applicationName: \"USwap Playground\",\n applicationVersion: \"0.0.1\",\n dAppDefinitionAddress: \"account_rdx128r289p58222hcvev7frs6kue76pl7pdcnw8725aw658v0zggkh9ws\",\n network: { dashboardBase: \"https://dashboard.radixdlt.com\", networkId: 1, networkName: \"mainnet\" },\n },\n } as USwapConfigIntegrations,\n\n requestOptions: { retry: { backoffMultiplier: 2, baseDelay: 300, maxDelay: 5000, maxRetries: 3 }, timeoutMs: 30000 },\n rpcUrls,\n wallets: Object.values(WalletOption),\n};\ntype USwapState = typeof initialState;\n\nexport type USwapConfigState = {\n apiKeys?: Partial<USwapState[\"apiKeys\"]>;\n chains?: USwapState[\"chains\"];\n endpoints?: Partial<CustomApiEndpoints>;\n envs?: Partial<USwapState[\"envs\"]>;\n integrations?: Partial<USwapConfigIntegrations>;\n rpcUrls?: Partial<USwapState[\"rpcUrls\"]>;\n wallets?: USwapState[\"wallets\"];\n feeMultipliers?: FeeMultiplierConfig;\n};\n\ntype USwapConfigStore = USwapState & {\n setApiKey: (key: keyof USwapState[\"apiKeys\"], apiKey: string) => void;\n setConfig: (config: USwapConfigState) => void;\n setEnv: <T extends keyof USwapState[\"envs\"]>(key: T, value: USwapState[\"envs\"][T]) => void;\n setEndpoint: <T extends keyof CustomApiEndpoints>(key: T, endpoint: CustomApiEndpoints[T]) => void;\n setRpcUrl: (chain: keyof USwapState[\"rpcUrls\"], url: string[]) => void;\n setRequestOptions: (options: Partial<USwapState[\"requestOptions\"]>) => void;\n setIntegrationConfig: (\n integration: keyof USwapState[\"integrations\"],\n config: USwapConfigIntegrations[keyof USwapConfigIntegrations],\n ) => void;\n setFeeMultipliers: (multipliers: FeeMultiplierConfig) => void;\n};\n\nexport const useUSwapStore = create<USwapConfigStore>((set) => ({\n ...initialState,\n\n setApiKey: (key, apiKey) => set((s) => ({ apiKeys: { ...s.apiKeys, [key]: apiKey } })),\n setConfig: (config) =>\n set((s) => ({\n apiKeys: { ...s.apiKeys, ...config?.apiKeys },\n chains: s.chains.concat(config?.chains || []),\n endpoints: { ...s.endpoints, ...config?.endpoints },\n envs: { ...s.envs, ...config?.envs },\n feeMultipliers: config?.feeMultipliers || s.feeMultipliers,\n integrations: { ...s.integrations, ...config?.integrations },\n rpcUrls: { ...s.rpcUrls, ...config?.rpcUrls },\n wallets: s.wallets.concat(config?.wallets || []),\n })),\n setEndpoint: (key, endpoint) => set((s) => ({ endpoints: { ...s.endpoints, [key]: endpoint } })),\n setEnv: (key, value) => set((s) => ({ envs: { ...s.envs, [key]: value } })),\n setFeeMultipliers: (multipliers) => set(() => ({ feeMultipliers: multipliers })),\n setIntegrationConfig: (integration, config) =>\n set((s) => ({ integrations: { ...s.integrations, [integration]: config } })),\n setRequestOptions: (options) =>\n set((s) => ({\n requestOptions: {\n retry: { ...s.requestOptions.retry, ...options.retry },\n timeoutMs: options.timeoutMs || s.requestOptions.timeoutMs,\n },\n })),\n setRpcUrl: (chain, url) => set((s) => ({ rpcUrls: { ...s.rpcUrls, [chain]: url } })),\n}));\n\nexport const useUSwapConfig = () =>\n useUSwapStore(\n useShallow((state) => ({\n apiKeys: state?.apiKeys,\n chains: state?.chains,\n endpoints: state?.endpoints,\n envs: state?.envs,\n feeMultipliers: state?.feeMultipliers,\n integrations: state?.integrations,\n rpcUrls: state?.rpcUrls,\n wallets: state?.wallets,\n })),\n );\n\nexport const USwapConfig = {\n get: <T extends keyof USwapState>(key: T) => useUSwapStore.getState()[key],\n getState: useUSwapStore.getState,\n reinitialize: () => useUSwapStore.setState(initialState),\n set: <T extends USwapConfigState>(config: T) => useUSwapStore.getState().setConfig(config),\n\n setApiKey: <T extends keyof USwapState[\"apiKeys\"]>(key: T, apiKey: string) =>\n useUSwapStore.getState().setApiKey(key, apiKey),\n setEndpoint: <T extends keyof CustomApiEndpoints>(key: T, endpoint: CustomApiEndpoints[T]) =>\n useUSwapStore.getState().setEndpoint(key, endpoint),\n setEnv: <T extends keyof USwapState[\"envs\"]>(key: T, value: USwapState[\"envs\"][T]) =>\n useUSwapStore.getState().setEnv(key, value),\n setFeeMultipliers: (multipliers: FeeMultiplierConfig) => useUSwapStore.getState().setFeeMultipliers(multipliers),\n setIntegrationConfig: <T extends keyof USwapState[\"integrations\"]>(\n integration: T,\n config: USwapConfigIntegrations[T],\n ) => useUSwapStore.getState().setIntegrationConfig(integration, config),\n setRequestOptions: (options: USwapState[\"requestOptions\"]) => useUSwapStore.getState().setRequestOptions(options),\n setRpcUrl: <T extends keyof USwapState[\"rpcUrls\"]>(chain: T, urls: string[]) =>\n useUSwapStore.getState().setRpcUrl(chain, urls),\n};\n",
|
|
9
9
|
"import { AllChains, type Chain, getChainConfig } from \"@tcswap/types\";\n\nexport type DerivationPathArray = ReturnType<typeof getChainConfig>[\"networkDerivationPath\"];\n\nexport const NetworkDerivationPath = AllChains.reduce(\n (acc, chain) => {\n acc[chain] = getChainConfig(chain).networkDerivationPath;\n return acc;\n },\n {} as Record<Chain, DerivationPathArray>,\n);\n",
|
|
10
10
|
"export enum ErrorCode {\n unknownError = \"unknownError\",\n test_error = \"test_error\",\n providerDetailsError = \"providerDetailsError\",\n blockHeaderNotFound = \"blockHeaderNotFound\",\n blockHashNotFoundAtHeight = \"blockHashNotFoundAtHeight\",\n blockHashNotFoundAtHash = \"blockHashNotFoundAtHash\",\n txHashMissing = \"txHashMissing\",\n assetValueMissingInfo = \"assetValueMissingInfo\",\n invalidAsset = \"invalidAsset\",\n blockIsRequired = \"blockIsRequired\",\n currentBlockHeaderNotFound = \"currentBlockHeaderNotFound\",\n failedToRetrieveBalance = \"failedToRetrieveBalance\",\n failedToRetrieveBlock = \"failedToRetrieveBlock\",\n failedToRetrieveFees = \"failedToRetrieveFees\",\n notImplementedBCH = \"notImplementedBCH\",\n notImplementedDoge = \"notImplementedDoge\",\n noPoolsFound = \"noPoolsFound\",\n noVaultsFound = \"noVaultsFound\",\n noTxFound = \"noTxFound\",\n noInputCoinFound = \"noInputCoinFound\",\n noBlockDataFound = \"noBlockDataFound\",\n multipleCosmosMessages = \"multipleCosmosMessages\",\n heightOrHashNotProvided = \"heightOrHashNotProvided\",\n unknownDenom = \"unknownDenom\",\n invalidBlockHeight = \"invalidBlockHeight\",\n timestampExtrinsicNoArgumentsForBlock = \"timestampExtrinsicNoArgumentsForBlock\",\n timestampExtrinsicNoTimestampForBlock = \"timestampExtrinsicNoTimestampForBlock\",\n noTimestampExtrinsicForHash = \"noTimestampExtrinsicForHash\",\n timestampExtrinsicNoArgumentsForHash = \"timestampExtrinsicNoArgumentsForHash\",\n txMemoUndefined = \"txMemoUndefined\",\n txMemoIncorrect = \"txMemoIncorrect\",\n txTypeNotFound = \"txTypeNotFound\",\n txNoMessage = \"txNoMessage\",\n txNotFound = \"txNotFound\",\n txReceiptNotFound = \"txReceiptNotFound\",\n txParsingError = \"txParsingError\",\n txLogsParsingError = \"txLogsParsingError\",\n blockNotFound = \"blockNotFound\",\n balanceNotFound = \"balanceNotFound\",\n configError = \"configError\",\n synthSwapDisallowed = \"synthSwapDisallowed\",\n providerQuoteTimeout = \"providerQuoteTimeout\",\n noQuoteResponse = \"noQuoteResponse\",\n noPoolAssetsFound = \"noPoolAssetsFound\",\n noThorchainPools = \"noThorchainPools\",\n noMayachainPools = \"noMayachainPools\",\n noThorchainNetworkInfo = \"noThorchainNetworkInfo\",\n invalidAffiliateFee = \"invalidAffiliateFee\",\n invalidBuyAssetAddress = \"invalidBuyAssetAddress\",\n invalidSellAssetAddress = \"invalidSellAssetAddress\",\n invalidSourceAddress = \"invalidSourceAddress\",\n invalidDestinationAddress = \"invalidDestinationAddress\",\n sourceAddressIsSmartContract = \"sourceAddressIsSmartContract\",\n destinationAddressIsSmartContract = \"destinationAddressIsSmartContract\",\n invalidChainId = \"invalidChainId\",\n unsupportedChainId = \"unsupportedChainId\",\n unsupportedEVMChainId = \"unsupportedEVMChainId\",\n unsupportedMethod = \"unsupportedMethod\",\n unsupportedProvider = \"unsupportedProvider\",\n invalidParamsForMethod = \"invalidParamsForMethod\",\n unsupportedAdapter = \"unsupportedAdapter\",\n noWhitelistTokens = \"noWhitelistTokens\",\n failedFetchGasPrice = \"failedFetchGasPrice\",\n failedToCreateDepositChannel = \"failedToCreateDepositChannel\",\n noProviderDetailsFound = \"noProviderDetailsFound\",\n noTokenListsFound = \"noTokenListsFound\",\n tokenNotFound = \"tokenNotFound\",\n tokenPriceNotFound = \"tokenPriceNotFound\",\n tokenPriceFailedToUpdate = \"tokenPriceFailedToUpdate\",\n swapAmountTooSmall = \"swapAmountTooSmall\",\n legsArrayIsEmpty = \"legsArrayIsEmpty\",\n failedToFetchQuoteForLeg = \"failedToFetchQuoteForLeg\",\n noBlockHeaderFound = \"noBlockHeaderFound\",\n failedToSimulateSwap = \"failedToSimulateSwap\",\n addressScreeningFailed = \"addressScreeningFailed\",\n noLiquidtyProvidersFound = \"noLiquidtyProvidersFound\",\n insufficientLiquidity = \"insufficientLiquidity\",\n noInboundDataFound = \"noInbounDataFound\",\n noInboundAddressesFound = \"noInboundAddressesFound\",\n noInboundAddressFoundForChain = \"noInboundAddressFoundForChain\",\n noLastBlocksFound = \"noLastBlocksFound\",\n noVersionFound = \"noVersionFound\",\n noConstantsFound = \"noConstantsFound\",\n noMimirsFound = \"noMimirsFound\",\n noRoutesFound = \"noRoutesFound\",\n quoteNotFound = \"quoteNotFound\",\n ledgerSignFailed = \"ledgerSignFailed\",\n ledgerWrongPayload = \"ledgerWrongPayload\",\n ledgerFetchSwapFailed = \"ledgerFetchSwapFailed\",\n failedToFetchTx = \"failedToFetchTx\",\n failedBuildTransactionDetails = \"failedBuildTransactionDetails\",\n noLegsForRoute = \"noLegsForRoute\",\n noRouterAddressFound = \"noRouterAddressFound\",\n noAggregatorAddressFound = \"noAggregatorAddressFound\",\n noContractInstanceFound = \"noContractInstanceFound\",\n noContractAddressFound = \"noContractAddressFound\",\n invalidAffiliate = \"invalidAffiliate\",\n thornameAffiliate = \"thornameAffiliate\",\n providerNotfound = \"No provider found\",\n noRecordFound = \"No Record found\",\n slippageTooLow = \"Slippage too low\",\n tradingHalted = \"tradingHalted\",\n noWrappedGasAsset = \"noWrappedGasAsset\",\n aggregatorAddressNotFound = \"aggregatorAddressNotFound\",\n routerAddressNotFound = \"routerAddressNotFound\",\n dummyAddressNotFound = \"dummyAddressNotFound\",\n trackerError = \"trackerError\",\n thorchainPoolUnavailable = \"thorchainPoolUnavailable\",\n noOhlcvDataFound = \"noOhlcvDataFound\",\n noTradingPairs = \"noTradingPairs\",\n noLendingAvailability = \"noLendingAvailability\",\n lendingRepayTooSmall = \"lendingRepayTooSmall\",\n missingState = \"missingState\",\n ledgerSwapNotFound = \"ledgerSwapNotFound\",\n ledgerSwapNotReadyForTracking = \"ledgerSwapNotReadyForTracking\",\n errorEstimatingGas = \"errorEstimatingGas\",\n apiKeyInvalid = \"apiKeyInvalid\",\n apiKeyFailedToUpdate = \"apiKeyFailedToUpdate\",\n apiKeyExpired = \"apiKeyExpired\",\n unauthorized = \"unauthorized\",\n failedToCreateMemo = \"failedToCreateMemo\",\n radixIncorrectInstructions = \"radixIncorrectInstructions\",\n radixTxMissedParam = \"radixTxMissedParam\",\n radixTxMissedAccount = \"radixTxMissedAccount\",\n radixManifestParseError = \"radixManifestParseError\",\n radixManifestBuildError = \"radixManifestBuildError\",\n invalidAddressForChain = \"invalidAddressForChain\",\n riskyAddress = \"riskyAddress\",\n noRoutesToProcess = \"noRoutesToProcess\",\n sellAssetAmountTooSmall = \"sellAssetAmountTooSmall\",\n missingPrivateKey = \"missingPrivateKey\",\n noMemoPriceProtection = \"noMemoPriceProtection\",\n rateExpired = \"rateExpired\",\n amountTooSmall = \"amountTooSmall\",\n amountTooBig = \"amountTooBig\",\n amountOutOfRange = \"amountOutOfRange\",\n requestTimeOut = \"requestTimeOut\",\n networkError = \"networkError\",\n unknownApiError = \"unknownApiError\",\n invalidResponseFormat = \"invalidResponseFormat\",\n}\n\nexport enum WarningCodeEnum {\n highSlippage = \"highSlippage\",\n highPriceImpact = \"highPriceImpact\",\n}\n\nexport enum ProviderName {\n CAVIAR_V1 = \"CAVIAR_V1\",\n CAMELOT_V3 = \"CAMELOT_V3\",\n CHAINFLIP = \"CHAINFLIP\",\n CHAINFLIP_STREAMING = \"CHAINFLIP_STREAMING\",\n JUPITER = \"JUPITER\",\n MAYACHAIN = \"MAYACHAIN\",\n MAYACHAIN_STREAMING = \"MAYACHAIN_STREAMING\",\n OCISWAP_V1 = \"OCISWAP_V1\",\n ONEINCH = \"ONEINCH\",\n OPENOCEAN_V2 = \"OPENOCEAN_V2\",\n PANCAKESWAP = \"PANCAKESWAP\",\n PANGOLIN_V1 = \"PANGOLIN_V1\",\n SUSHISWAP_V2 = \"SUSHISWAP_V2\",\n THORCHAIN = \"THORCHAIN\",\n THORCHAIN_STREAMING = \"THORCHAIN_STREAMING\",\n TRADERJOE_V2 = \"TRADERJOE_V2\",\n UNISWAP_V2 = \"UNISWAP_V2\",\n UNISWAP_V3 = \"UNISWAP_V3\",\n NEAR = \"NEAR\",\n GARDEN = \"GARDEN\",\n OKX = \"OKX\",\n}\n\nexport enum FeeTypeEnum {\n LIQUIDITY = \"liquidity\",\n NETWORK = \"network\",\n INBOUND = \"inbound\",\n OUTBOUND = \"outbound\",\n AFFILIATE = \"affiliate\",\n TAX = \"tax\",\n PRIORITY = \"priority\",\n SERVICE = \"service\",\n}\n",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { USwapConfig } from \"./uSwapConfig\";\nimport { USwapError } from \"./uSwapError\";\n\nexport type RetryConfig = { maxRetries?: number; baseDelay?: number; maxDelay?: number; backoffMultiplier?: number };\n\nexport type RequestOptions = RequestInit & {\n /**\n * @deprecated @V4 Use onSuccess instead - will be removed in next major\n */\n responseHandler?: (response: any) => any;\n json?: unknown;\n onError?: (error: any) => any;\n onSuccess?: (response: any) => any;\n searchParams?: Record<string, string>;\n dynamicHeader?: () => Record<string, string> | {};\n retry?: RetryConfig;\n timeoutMs?: number;\n abortController?: AbortController;\n};\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\nconst calculateDelay = (attempt: number, { baseDelay, backoffMultiplier, maxDelay }: any) =>\n Math.min(baseDelay * backoffMultiplier ** attempt, maxDelay);\n\nconst makeRequest = async (url: string, config: RequestInit) => {\n const response = await fetch(url, config);\n\n if (!response.ok) {\n const errorBody = await response.json().catch(() => null);\n const errorData = { status: response.status, statusText: response.statusText };\n const errorInfo = { ...errorData, ...(errorBody && { errorData: errorBody }) };\n throw new USwapError({ errorKey: \"helpers_invalid_response\", info: errorData }, errorInfo);\n }\n return response.json();\n};\n\nfunction fetchWithConfig(method: \"GET\" | \"POST\", extendOptions: RequestOptions = {}) {\n return async function methodFetchWithConfig<T>(url: string, options: RequestOptions = {}): Promise<T> {\n const {\n searchParams,\n json,\n body,\n headers,\n dynamicHeader,\n retry,\n timeoutMs,\n abortController,\n onError,\n onSuccess,\n responseHandler,\n ...fetchOptions\n } = { ...extendOptions, ...options };\n const requestOptions = USwapConfig.get(\"requestOptions\");\n\n const retryConfig = { ...requestOptions.retry, ...retry };\n const isJson = !!json || url.endsWith(\".json\");\n const requestUrl = buildUrl(url, searchParams);\n const requestHeaders = buildHeaders(isJson, { ...headers, ...dynamicHeader?.() });\n const requestBody = isJson ? JSON.stringify(json) : body;\n\n let lastError: any;\n\n for (let attempt = 0; attempt <= retryConfig.maxRetries; attempt++) {\n const controller = abortController || new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs || requestOptions.timeoutMs);\n\n try {\n const result = await makeRequest(requestUrl, {\n ...fetchOptions,\n body: requestBody,\n headers: requestHeaders,\n method,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n return onSuccess?.(result) || responseHandler?.(result) || result;\n } catch (error) {\n clearTimeout(timeoutId);\n lastError = error;\n\n if (attempt >= retryConfig.maxRetries) {\n return onError ? onError(error) : Promise.reject(error);\n }\n\n await sleep(calculateDelay(attempt, retryConfig));\n }\n }\n\n return onError ? onError(lastError) : Promise.reject(lastError);\n };\n}\n\nfunction buildHeaders(isJson: boolean, headers?: HeadersInit) {\n return { ...headers, ...(isJson && { \"Content-Type\": \"application/json\" }) };\n}\n\nfunction buildUrl(url: string, searchParams?: Record<string, string>) {\n const urlInstance = new URL(url);\n if (searchParams) urlInstance.search = new URLSearchParams(searchParams).toString();\n return urlInstance.toString();\n}\n\nexport const RequestClient = {\n extend: (extendOptions: RequestOptions) => ({\n extend: (newOptions: RequestOptions) => RequestClient.extend({ ...extendOptions, ...newOptions }),\n get: fetchWithConfig(\"GET\", extendOptions),\n post: fetchWithConfig(\"POST\", extendOptions),\n }),\n get: fetchWithConfig(\"GET\"),\n post: fetchWithConfig(\"POST\"),\n};\n",
|
|
15
15
|
"/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { Chain, CosmosChains, EVMChains, type StagenetChain, StagenetChains, UTXOChains } from \"@tcswap/types\";\nimport { match } from \"ts-pattern\";\nimport { USwapConfig } from \"../modules/uSwapConfig\";\nimport { USwapError } from \"../modules/uSwapError\";\nimport { warnOnce } from \"./others\";\n\nfunction getRpcBody(chain: Chain | StagenetChain) {\n return match(chain)\n .with(...EVMChains, () => ({ id: 1, jsonrpc: \"2.0\", method: \"eth_blockNumber\", params: [] }))\n .with(...UTXOChains, () => ({ id: \"test\", jsonrpc: \"1.0\", method: \"getblockchaininfo\", params: [] }))\n .with(...CosmosChains, ...StagenetChains, () => ({ id: 1, jsonrpc: \"2.0\", method: \"status\", params: {} }))\n .with(Chain.Polkadot, Chain.Chainflip, () => ({ id: 1, jsonrpc: \"2.0\", method: \"system_health\", params: [] }))\n .with(Chain.Solana, () => ({ id: 1, jsonrpc: \"2.0\", method: \"getHealth\" }))\n .with(Chain.Sui, () => ({ id: 1, jsonrpc: \"2.0\", method: \"sui_getSystemState\", params: [] }))\n .with(Chain.Ton, () => ({ id: 1, jsonrpc: \"2.0\", method: \"getAddressInformation\", params: { address: \"\" } }))\n .with(Chain.Tron, Chain.Radix, () => \"\")\n .with(Chain.Near, () => ({ id: \"dontcare\", jsonrpc: \"2.0\", method: \"status\", params: [] }))\n .with(Chain.Ripple, () => ({ id: 1, jsonrpc: \"2.0\", method: \"ping\", params: [{}] }))\n .otherwise(() => {\n throw new USwapError(\"helpers_chain_not_supported\", { chain });\n });\n}\n\nfunction getChainStatusEndpoint(chain: Chain | StagenetChain) {\n return match(chain)\n .with(Chain.Radix, () => \"/status/network-configuration\")\n .with(Chain.Tron, () => \"/wallet/getnowblock\")\n .otherwise(() => \"\");\n}\n\nasync function testRPCConnection(chain: Chain | StagenetChain, url: string) {\n try {\n const endpoint = url.startsWith(\"wss\") ? url.replace(\"wss\", \"https\") : url;\n const response = await fetch(`${endpoint}${getChainStatusEndpoint(chain)}`, {\n body: JSON.stringify(getRpcBody(chain)),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n signal: AbortSignal.timeout(3000),\n });\n\n return response.ok;\n } catch {\n return false;\n }\n}\n\nconst rpcCache = new Map<Chain | StagenetChain, { timestamp: number; url: string }>();\nconst rpcCacheTTL = 1000 * 60 * 2; // 2 minutes\n\nexport async function getRPCUrl(chain: Chain | StagenetChain) {\n const { isStagenet } = USwapConfig.get(\"envs\");\n const [rpcUrl = \"\", ...fallbackUrls] = USwapConfig.get(\"rpcUrls\")[chain];\n\n if (!rpcUrl) {\n warnOnce({\n condition: true,\n id: \"helpers_chain_no_public_or_set_rpc_url\",\n warning: `No public or set RPC URL found for chain. Please ensure you configured rpcUrls for ${chain}.`,\n });\n throw new USwapError(\"helpers_chain_no_public_or_set_rpc_url\", { chain });\n }\n\n if (isStagenet) return rpcUrl;\n\n const cached = rpcCache.get(chain);\n if (cached && Date.now() - cached.timestamp < rpcCacheTTL) {\n return cached.url;\n }\n\n const primaryIsWorking = await testRPCConnection(chain, rpcUrl);\n\n if (!primaryIsWorking) {\n for (const fallbackUrl of fallbackUrls) {\n const fallbackIsWorking = await testRPCConnection(chain, fallbackUrl);\n\n if (fallbackIsWorking) {\n rpcCache.set(chain, { timestamp: Date.now(), url: fallbackUrl });\n return fallbackUrl;\n }\n }\n }\n\n rpcCache.set(chain, { timestamp: Date.now(), url: rpcUrl });\n return rpcUrl;\n}\n\n/**\n * @deprecated\n * RPC URLs are now managed dynamically via USwapConfig.\n * Please use static { rpcUrls, fallbackRpcUrls } USwap init config or dynamic USwapConfig.setRpcUrl/setFallbackRpcUrl to configure RPC endpoints.\n * This function is obsolete and will be removed in a future release.\n */\nexport function initializeRPCUrlsWithFallback(_chains: never) {\n warnOnce({\n condition: true,\n id: \"initializeRPCUrlsWithFallback\",\n warning:\n \"initializeRPCUrlsWithFallback is deprecated. Use static { rpcUrls, fallbackRpcUrls } USwap init config or dynamic USwapConfig.setRpcUrl/setFallbackRpcUrl to configure RPC endpoints.\",\n });\n}\n",
|
|
16
16
|
"/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { Chain } from \"@tcswap/types\";\nimport { type ErrorKeys, USwapError } from \"../modules/uSwapError\";\n\n// 10 rune for register, 1 rune per year\n// MINIMUM_REGISTRATION_FEE = 11\nexport function getTHORNameCost(numberOfYears: number) {\n if (numberOfYears < 0) throw new USwapError({ errorKey: \"helpers_invalid_number_of_years\", info: { numberOfYears } });\n return 10 + numberOfYears;\n}\n\n// 10 CACAO for register\n// 1.0512 CACAO per year\nexport function getMAYANameCost(numberOfYears: number) {\n if (numberOfYears < 0) throw new USwapError({ errorKey: \"helpers_invalid_number_of_years\", info: { numberOfYears } });\n // round to max 10 decimals\n return Math.round((10 + numberOfYears * 1.0512) * 1e10) / 1e10;\n}\n\nexport function wrapWithThrow<T>(fn: () => T, errorKey?: ErrorKeys) {\n try {\n return fn();\n } catch (error) {\n if (errorKey) {\n throw new USwapError(errorKey, error);\n }\n\n return;\n }\n}\n\nexport function getChainIdentifier<T extends Chain>(chain: T) {\n switch (chain) {\n case Chain.THORChain:\n return `${chain}.RUNE`;\n\n case Chain.Cosmos:\n return `${chain}.ATOM`;\n\n case Chain.BinanceSmartChain:\n return `${chain}`;\n\n default:\n return `${chain}.${chain}`;\n }\n}\n\nconst warnings = new Set();\nexport function warnOnce({ condition, id, warning }: { condition: boolean; id: string; warning: string }) {\n if (condition) {\n if (warnings.has(id)) {\n return;\n }\n\n if (process.env.NODE_ENV !== \"test\") {\n console.warn(warning);\n }\n\n warnings.add(id);\n }\n}\n",
|
|
17
|
-
"/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport type { Chain } from \"@tcswap/types\";\nimport { USwapConfig } from \"../modules/uSwapConfig\";\nimport { USwapError } from \"../modules/uSwapError\";\n\n// Backward compatibility\nconst supportedChains = [\"TERRA\", ...USwapConfig.get(\"chains\")];\n\nexport function validateIdentifier(identifier = \"\") {\n const uppercasedIdentifier = identifier.toUpperCase();\n\n const [chain] = uppercasedIdentifier.split(\".\") as [Chain, string];\n if (supportedChains.includes(chain)) return true;\n\n const [synthChain] = uppercasedIdentifier.split(\"/\") as [Chain, string];\n if (supportedChains.includes(synthChain)) return true;\n\n throw new USwapError({\n errorKey: \"helpers_invalid_identifier\",\n info: {\n identifier,\n message: `Invalid identifier: ${identifier}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`,\n },\n });\n}\n\nexport function validateTNS(name: string) {\n if (name.length > 30) return false;\n\n const regex = /^[a-zA-Z0-9+_-]+$/g;\n\n return !!name.match(regex);\n}\n",
|
|
17
|
+
"/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport type { Chain } from \"@tcswap/types\";\nimport { USwapConfig } from \"../modules/uSwapConfig\";\nimport { USwapError } from \"../modules/uSwapError\";\nimport { isSecuredAssetIdentifier } from \"./asset\";\n\n// Backward compatibility\nconst supportedChains = [\"TERRA\", ...USwapConfig.get(\"chains\")];\n\nexport function validateIdentifier(identifier = \"\") {\n const uppercasedIdentifier = identifier.toUpperCase();\n\n const [chain] = uppercasedIdentifier.split(\".\") as [Chain, string];\n if (supportedChains.includes(chain)) return true;\n\n const [synthChain] = uppercasedIdentifier.split(\"/\") as [Chain, string];\n if (supportedChains.includes(synthChain)) return true;\n\n if (isSecuredAssetIdentifier(identifier)) return true;\n\n throw new USwapError({\n errorKey: \"helpers_invalid_identifier\",\n info: {\n identifier,\n message: `Invalid identifier: ${identifier}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`,\n },\n });\n}\n\nexport function validateTNS(name: string) {\n if (name.length > 30) return false;\n\n const regex = /^[a-zA-Z0-9+_-]+$/g;\n\n return !!name.match(regex);\n}\n",
|
|
18
18
|
"/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { match } from \"ts-pattern\";\nimport type { USwapNumber } from \"./uSwapNumber\";\n\ntype NumberPrimitivesType = { bigint: bigint; number: number; string: string };\nexport type NumberPrimitives = bigint | number | string;\ntype InitialisationValueType = NumberPrimitives | BigIntArithmetics | USwapNumber;\n\ntype USwapBigIntParams = InitialisationValueType | { decimal?: number; value: number | string };\ntype AllowedNumberTypes = \"bigint\" | \"number\" | \"string\";\n\nconst DEFAULT_DECIMAL = 8;\nconst PRECISION_BUFFER = 10;\n\nexport function formatBigIntToSafeValue({\n value,\n bigIntDecimal = DEFAULT_DECIMAL,\n decimal = DEFAULT_DECIMAL,\n}: {\n value: bigint;\n bigIntDecimal?: number;\n decimal?: number;\n}) {\n if (decimal === 0) return value.toString();\n\n const isNegative = value < 0n;\n let valueString = value.toString().substring(isNegative ? 1 : 0);\n const padLength = decimal - (valueString.length - 1);\n\n if (padLength > 0) {\n valueString = \"0\".repeat(padLength) + valueString;\n }\n\n const decimalIndex = valueString.length - decimal;\n let decimalString = valueString.slice(-decimal);\n\n const roundDigit = Number.parseInt(decimalString[bigIntDecimal] || \"0\", 10);\n if (roundDigit >= 5) {\n const lastDigit = Number.parseInt(decimalString[bigIntDecimal - 1] || \"0\", 10);\n decimalString = `${decimalString.substring(0, bigIntDecimal - 1)}${lastDigit + 1}`;\n } else {\n decimalString = decimalString.substring(0, bigIntDecimal);\n }\n\n return `${isNegative ? \"-\" : \"\"}${valueString.slice(0, decimalIndex)}.${decimalString}`.replace(/\\.?0*$/, \"\");\n}\n\nexport class BigIntArithmetics {\n decimalMultiplier: bigint = 10n ** 8n;\n bigIntValue = 0n;\n decimal?: number;\n\n static fromBigInt(value: bigint, decimal?: number) {\n return new BigIntArithmetics({\n decimal,\n value: formatBigIntToSafeValue({ bigIntDecimal: decimal, decimal, value }),\n });\n }\n\n static shiftDecimals({ value, from, to }: { value: InstanceType<typeof USwapNumber>; from: number; to: number }) {\n return BigIntArithmetics.fromBigInt((value.getBaseValue(\"bigint\") * toMultiplier(to)) / toMultiplier(from), to);\n }\n\n constructor(params: USwapBigIntParams) {\n const value = getStringValue(params);\n const isComplex = typeof params === \"object\";\n this.decimal = isComplex ? params.decimal : undefined;\n\n this.decimalMultiplier =\n isComplex && \"decimalMultiplier\" in params\n ? params.decimalMultiplier\n : toMultiplier(Math.max(getFloatDecimals(toSafeValue(value)), this.decimal || 0));\n\n this.#setValue(value);\n }\n\n set(value: USwapBigIntParams): this {\n return new (this.constructor as any)({\n decimal: this.decimal,\n identifier: (this as any).toString?.({ includeSynthProtocol: true }),\n value,\n });\n }\n\n add(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"add\", ...args);\n }\n\n sub(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"sub\", ...args);\n }\n\n mul(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"mul\", ...args);\n }\n\n div(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"div\", ...args);\n }\n\n gt(value: InitialisationValueType) {\n return this.#comparison(\"gt\", value);\n }\n\n gte(value: InitialisationValueType) {\n return this.#comparison(\"gte\", value);\n }\n\n lt(value: InitialisationValueType) {\n return this.#comparison(\"lt\", value);\n }\n\n lte(value: InitialisationValueType) {\n return this.#comparison(\"lte\", value);\n }\n\n eqValue(value: InitialisationValueType) {\n return this.#comparison(\"eqValue\", value);\n }\n\n getValue<T extends AllowedNumberTypes>(type: T, decimal?: number): NumberPrimitivesType[T] {\n const currentDecimal = decimalFromMultiplier(this.decimalMultiplier);\n const requestedDecimal = decimal !== undefined ? decimal : this.decimal;\n\n let outputDecimal = requestedDecimal !== undefined ? requestedDecimal : currentDecimal;\n\n if (requestedDecimal !== undefined && requestedDecimal < currentDecimal) {\n const testValue = this.formatBigIntToSafeValue(this.bigIntValue, requestedDecimal);\n if (testValue === \"0\" && this.bigIntValue !== 0n) {\n outputDecimal = currentDecimal;\n }\n }\n\n const value = this.formatBigIntToSafeValue(this.bigIntValue, outputDecimal);\n\n return match(type as AllowedNumberTypes)\n .with(\"number\", () => Number(value) as NumberPrimitivesType[T])\n .with(\"string\", () => value as NumberPrimitivesType[T])\n .with(\"bigint\", () => {\n const scaledValue = (this.bigIntValue * 10n ** BigInt(this.decimal || 8n)) / this.decimalMultiplier;\n return scaledValue as NumberPrimitivesType[T];\n })\n .otherwise(() => value as NumberPrimitivesType[T]);\n }\n\n getBaseValue<T extends AllowedNumberTypes>(type: T, decimal?: number): NumberPrimitivesType[T] {\n const divisor = this.decimalMultiplier / toMultiplier(decimal || this.decimal || DEFAULT_DECIMAL);\n const baseValue = divideBigIntWithRounding(this.bigIntValue, divisor);\n\n return match(type as AllowedNumberTypes)\n .with(\"number\", () => Number(baseValue) as NumberPrimitivesType[T])\n .with(\"string\", () => baseValue.toString() as NumberPrimitivesType[T])\n .otherwise(() => baseValue as NumberPrimitivesType[T]);\n }\n\n getBigIntValue(value: InitialisationValueType, decimal?: number) {\n if (!decimal && typeof value === \"object\") return value.bigIntValue;\n\n const stringValue = getStringValue(value);\n const safeValue = toSafeValue(stringValue);\n\n if (safeValue === \"0\" || safeValue === \"undefined\") return 0n;\n return this.#toBigInt(safeValue, decimal);\n }\n\n toSignificant(significantDigits = 6) {\n const valueStr = this.getValue(\"string\");\n const [int = \"\", dec = \"\"] = valueStr.split(\".\");\n const hasInteger = Number.parseInt(int, 10) > 0;\n const totalLength = hasInteger ? int.length + dec.length : dec.length;\n\n if (totalLength <= significantDigits) return valueStr;\n if (int.length >= significantDigits) return int.slice(0, significantDigits).padEnd(int.length, \"0\");\n if (hasInteger) return `${int}.${dec.slice(0, significantDigits - int.length)}`;\n\n const trimmed = BigInt(dec).toString();\n const sliced = trimmed.slice(0, significantDigits);\n const leadingZeros = dec.length - trimmed.length;\n\n return `0.${sliced.padStart(leadingZeros + sliced.length, \"0\")}`;\n }\n\n toFixed(fixedDigits = 6) {\n const valueStr = this.getValue(\"string\");\n const isNegative = valueStr.startsWith(\"-\");\n const [int = \"0\", dec = \"\"] = (isNegative ? valueStr.slice(1) : valueStr).split(\".\");\n const valueRoundsToZero = int === \"0\" && Number.parseInt(dec.slice(0, fixedDigits), 10) === 0;\n const sign = isNegative && !valueRoundsToZero ? \"-\" : \"\";\n\n if (fixedDigits === 0) {\n if (int === \"0\" && !dec) return \"0\";\n const shouldRound = dec && Number.parseInt(dec[0] || \"0\", 10) >= 5;\n return shouldRound ? `${sign}${BigInt(int) + 1n}.0` : `${sign}${int}.0`;\n }\n\n if (!dec) return `${sign}${int}.${\"0\".repeat(fixedDigits)}`;\n\n const nextDigit = dec[fixedDigits];\n const shouldRound = nextDigit && Number.parseInt(nextDigit, 10) >= 5;\n\n if (!shouldRound) return `${sign}${int}.${dec.slice(0, fixedDigits).padEnd(fixedDigits, \"0\")}`;\n\n const decimalValue = BigInt(dec.slice(0, fixedDigits).padEnd(fixedDigits, \"0\")) + 1n;\n const multiplier = 10n ** BigInt(fixedDigits);\n\n if (decimalValue >= multiplier) return `${sign}${BigInt(int) + 1n}.${\"0\".repeat(fixedDigits)}`;\n\n return `${sign}${int}.${decimalValue.toString().padStart(fixedDigits, \"0\")}`;\n }\n\n toAbbreviation(digits = 2) {\n const valueStr = this.getValue(\"string\");\n const value = Number(valueStr);\n const abbreviations = [\"\", \"K\", \"M\", \"B\", \"T\", \"Q\", \"Qi\", \"S\"] as const;\n const tier = Math.floor(Math.log10(Math.abs(value)) / 3);\n\n if (tier === 0 || !abbreviations[tier]) return valueStr;\n\n return `${(value / 10 ** (tier * 3)).toFixed(digits)}${abbreviations[tier]}`;\n }\n\n toCurrency(\n currency = \"$\",\n {\n currencyPosition = \"start\",\n decimal = 2,\n decimalSeparator = \".\",\n thousandSeparator = \",\",\n trimTrailingZeros = true,\n } = {},\n ) {\n const fixedValue = this.toFixed(decimal);\n const isCurrencyAtEnd = currencyPosition === \"end\";\n const [int = \"0\", dec = \"\"] = fixedValue.split(\".\");\n\n const formattedInt = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator);\n const hasDecimals = dec && Number.parseInt(dec, 10) > 0;\n const formattedValue = hasDecimals ? `${formattedInt}${decimalSeparator}${dec}` : formattedInt;\n\n // Prevent regex from taking too long for large values\n const canTrimTrailingZeros = formattedValue.length < 100 && trimTrailingZeros && hasDecimals;\n const value = canTrimTrailingZeros ? formattedValue.replace(/\\.?0*$/, \"\") : formattedValue;\n\n return isCurrencyAtEnd ? `${value}${currency}` : `${currency}${value}`;\n }\n\n formatBigIntToSafeValue(value: bigint, decimal?: number) {\n const bigIntDecimal = decimal || this.decimal || DEFAULT_DECIMAL;\n const decimalToUseForConversion = Math.max(bigIntDecimal, decimalFromMultiplier(this.decimalMultiplier));\n\n return formatBigIntToSafeValue({ bigIntDecimal, decimal: decimalToUseForConversion, value });\n }\n\n #arithmetics(method: \"add\" | \"sub\" | \"mul\" | \"div\", ...args: InitialisationValueType[]): this {\n const precisionDecimal = this.#retrievePrecisionDecimal(this, ...args);\n const currentDecimal = decimalFromMultiplier(this.decimalMultiplier);\n const targetDecimal = Math.max(precisionDecimal, currentDecimal);\n const internalDecimal = targetDecimal + PRECISION_BUFFER;\n const internalMultiplier = toMultiplier(internalDecimal);\n\n const result = args.reduce(\n (acc: bigint, arg) => {\n const value = this.getBigIntValue(arg, internalDecimal);\n\n return match(method)\n .with(\"add\", () => acc + value)\n .with(\"sub\", () => acc - value)\n .with(\"mul\", () => (acc * value) / internalMultiplier)\n .with(\"div\", () => {\n if (value === 0n) throw new RangeError(\"Division by zero\");\n return (acc * internalMultiplier) / value;\n })\n .otherwise(() => acc);\n },\n (this.bigIntValue * internalMultiplier) / this.decimalMultiplier,\n );\n\n const value = formatBigIntToSafeValue({ bigIntDecimal: internalDecimal, decimal: internalDecimal, value: result });\n\n // @ts-expect-error False positive\n return new this.constructor({\n decimal: this.decimal,\n decimalMultiplier: toMultiplier(internalDecimal),\n identifier: this.toString(),\n value,\n });\n }\n\n #comparison(method: \"gt\" | \"gte\" | \"lt\" | \"lte\" | \"eqValue\", ...args: InitialisationValueType[]) {\n const decimal = this.#retrievePrecisionDecimal(this, ...args);\n const value = this.getBigIntValue(args[0] || \"0\", decimal);\n const compareToValue = this.getBigIntValue(this, decimal);\n\n return match(method)\n .with(\"gt\", () => compareToValue > value)\n .with(\"gte\", () => compareToValue >= value)\n .with(\"lt\", () => compareToValue < value)\n .with(\"lte\", () => compareToValue <= value)\n .with(\"eqValue\", () => compareToValue === value)\n .otherwise(() => false);\n }\n\n #setValue(value: InitialisationValueType) {\n const safeValue = toSafeValue(value) || \"0\";\n this.bigIntValue = this.#toBigInt(safeValue);\n }\n\n #retrievePrecisionDecimal(...args: InitialisationValueType[]) {\n const decimals = args\n .map((arg) => {\n const isObject = typeof arg === \"object\";\n const value = isObject\n ? arg.decimal || decimalFromMultiplier(arg.decimalMultiplier)\n : getFloatDecimals(toSafeValue(arg));\n\n return value;\n })\n .filter(Boolean) as number[];\n\n return Math.max(...decimals, DEFAULT_DECIMAL);\n }\n\n #toBigInt(value: string, decimal?: number) {\n const multiplier = decimal ? toMultiplier(decimal) : this.decimalMultiplier;\n const padDecimal = decimalFromMultiplier(multiplier);\n const [integerPart = \"\", decimalPart = \"\"] = value.split(\".\");\n\n return BigInt(`${integerPart}${decimalPart.padEnd(padDecimal, \"0\")}`);\n }\n}\n\nconst numberFormatter = Intl.NumberFormat(\"fullwide\", { maximumFractionDigits: 20, useGrouping: false });\n\nfunction toSafeValue(value: InitialisationValueType) {\n const parsedValue = typeof value === \"number\" ? numberFormatter.format(value) : getStringValue(value);\n const splitValue = `${parsedValue}`.replaceAll(\",\", \".\").split(\".\");\n\n return splitValue.length > 1 ? `${splitValue.slice(0, -1).join(\"\")}.${splitValue.at(-1)}` : splitValue[0] || \"0\";\n}\n\nfunction getFloatDecimals(value: string) {\n const decimals = value.split(\".\")[1]?.length || 0;\n return Math.max(decimals, DEFAULT_DECIMAL);\n}\n\nfunction getStringValue(param: USwapBigIntParams) {\n return typeof param === \"object\" ? (\"getValue\" in param ? param.getValue(\"string\") : param.value) : param;\n}\n\nfunction divideBigIntWithRounding(n: bigint, d: bigint) {\n if (d === 0n) throw new Error(\"Cannot divide by zero\");\n\n const half = d / 2n;\n return (n >= 0n && d >= 0n) || (n < 0n && d < 0n) ? (n + half) / d : (n - half) / d;\n}\n\nfunction toMultiplier(decimal: number) {\n return 10n ** BigInt(decimal);\n}\n\nfunction decimalFromMultiplier(multiplier: bigint) {\n return Math.log10(Number.parseFloat(multiplier.toString()));\n}\n",
|
|
19
19
|
"/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { FeeOption } from \"../types\";\nimport { USwapConfig } from \"./uSwapConfig\";\n\nexport interface FeeMultiplierConfig {\n [FeeOption.Average]: number;\n [FeeOption.Fast]: number;\n [FeeOption.Fastest]: number;\n}\n\nconst DEFAULT_FEE_MULTIPLIERS: FeeMultiplierConfig = {\n [FeeOption.Average]: 1.0,\n [FeeOption.Fast]: 1.5,\n [FeeOption.Fastest]: 2.0,\n};\n\n/**\n * Get fee multiplier for the given fee option.\n * Checks USwapConfig for custom multipliers first, then falls back to defaults.\n *\n * @param feeOption - The fee option (Average, Fast, Fastest)\n * @returns The fee multiplier as a number\n */\nexport function getFeeMultiplier(feeOption: FeeOption = FeeOption.Average): number {\n const customMultipliers = USwapConfig.get(\"feeMultipliers\");\n\n if (customMultipliers && customMultipliers[feeOption] !== undefined) {\n return customMultipliers[feeOption];\n }\n\n return DEFAULT_FEE_MULTIPLIERS[feeOption];\n}\n\n/**\n * Get fee multiplier as BigInt for EVM calculations.\n * Returns numerator and denominator for precise BigInt arithmetic.\n *\n * @param feeOption - The fee option (Average, Fast, Fastest)\n * @returns Object with numerator and denominator for BigInt calculations\n */\nexport function getFeeMultiplierAsBigInt(feeOption: FeeOption = FeeOption.Average): {\n numerator: bigint;\n denominator: bigint;\n} {\n const multiplier = getFeeMultiplier(feeOption);\n\n // Convert decimal multiplier to fraction for precise BigInt arithmetic\n // e.g., 1.5 -> 15/10, 2.0 -> 20/10\n const denominator = 10n;\n const numerator = BigInt(Math.round(multiplier * 10));\n\n return { denominator, numerator };\n}\n\n/**\n * Apply fee multiplier to a BigInt value (for EVM chains).\n *\n * @param value - The base fee value as BigInt\n * @param feeOption - The fee option (Average, Fast, Fastest)\n * @returns The multiplied fee value as BigInt\n */\nexport function applyFeeMultiplierToBigInt(value: bigint, feeOption: FeeOption = FeeOption.Average) {\n const { numerator, denominator } = getFeeMultiplierAsBigInt(feeOption);\n return (value * numerator) / denominator;\n}\n\n/**\n * Apply fee multiplier to a number value (for non-EVM chains).\n *\n * @param value - The base fee value as number\n * @param feeOption - The fee option (Average, Fast, Fastest)\n * @param floor - Whether to floor the result (default: false)\n * @returns The multiplied fee value as number\n */\nexport function applyFeeMultiplier(value: number, feeOption: FeeOption = FeeOption.Average, floor = false): number {\n const multiplier = getFeeMultiplier(feeOption);\n const result = value * multiplier;\n return floor ? Math.floor(result) : result;\n}\n\nexport { DEFAULT_FEE_MULTIPLIERS };\n",
|
|
20
20
|
"/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { BigIntArithmetics, formatBigIntToSafeValue } from \"./bigIntArithmetics\";\n\nexport type SwapKitValueType = BigIntArithmetics | string | number;\n\nexport class USwapNumber extends BigIntArithmetics {\n eq(value: SwapKitValueType) {\n return this.eqValue(value);\n }\n\n static fromBigInt(value: bigint, decimal?: number) {\n return new USwapNumber({ decimal, value: formatBigIntToSafeValue({ bigIntDecimal: decimal, decimal, value }) });\n }\n}\n",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"import { Chain } from \"@tcswap/types\";\nimport { match } from \"ts-pattern\";\nimport { MemoType } from \"../types/sdk\";\n\nexport function getMemoForLeaveAndBond({ type, address }: BondOrLeaveParams) {\n return `${type}:${address}`;\n}\n\nexport function getMemoForUnbond({ address, unbondAmount }: UnbondParams) {\n return `${MemoType.UNBOND}:${address}:${unbondAmount}`;\n}\n\n/**\n * Deposit\n */\nexport function getMemoForRunePoolDeposit(affiliate?: WithAffiliate<{}>) {\n return addAffiliate(MemoType.RUNEPOOL_DEPOSIT, affiliate);\n}\n\nexport function getMemoForDeposit({\n chain,\n symbol,\n address,\n ...affiliate\n}: WithAffiliate<{ chain: Chain; symbol: string; address?: string }>) {\n const poolIdentifier = getPoolIdentifier({ chain, symbol });\n const addressPart = address ? `:${address}:` : \":\";\n\n return addAffiliate(`${MemoType.DEPOSIT}:${poolIdentifier}${addressPart}`, affiliate);\n}\n\n/**\n * Withdraw\n */\nexport function getMemoForWithdraw({ chain, symbol, ticker, basisPoints, targetAsset }: WithdrawParams) {\n const shortenedSymbol = chain === \"ETH\" && ticker !== \"ETH\" ? `${ticker}-${symbol.slice(-3)}` : symbol;\n const targetPart = targetAsset ? `:${targetAsset}` : \"\";\n\n return `${MemoType.WITHDRAW}:${chain}.${shortenedSymbol}:${basisPoints}${targetPart}`;\n}\n\nexport function getMemoForRunePoolWithdraw({ basisPoints, ...affiliate }: WithAffiliate<{ basisPoints: number }>) {\n return addAffiliate(`${MemoType.RUNEPOOL_WITHDRAW}:${basisPoints}`, affiliate);\n}\n\n/**\n * TNS\n */\nexport function getMemoForNameRegister({ name, chain, address, owner }: NameRegisterParams) {\n const baseMemo = `${MemoType.NAME_REGISTER}:${name}:${chain}:${address}`;\n const ownerAssignmentOrChangePart = owner ? `:${owner}` : \"\";\n\n return `${baseMemo}${ownerAssignmentOrChangePart}`;\n}\n\nexport function getMemoForNamePreferredAssetRegister({\n name,\n chain,\n asset,\n payout,\n owner,\n}: PreferredAssetRegisterParams) {\n return `${MemoType.NAME_REGISTER}:${name}:${chain}:${payout}:${owner}:${asset}`;\n}\n\nexport function getMemoForTcyClaim(memoType: MemoType.CLAIM_TCY, { address }: WithAffiliate<{ address: string }>) {\n return `${memoType}:${address}`;\n}\n\nexport function getMemoForTcyStake(\n memoType: MemoType.STAKE_TCY | MemoType.UNSTAKE_TCY,\n { unstakeBps, ...affiliate }: WithAffiliate<{ unstakeBps?: number }>,\n) {\n const bps = unstakeBps ? `:${unstakeBps}` : \"\";\n const baseMemo = `${memoType}${bps}`;\n\n return addAffiliate(`${baseMemo}`, affiliate);\n}\n\n/**\n * Internal helpers\n */\nfunction addAffiliate(memo: string, { affiliateAddress, affiliateBasisPoints }: WithAffiliate<{}> = {}) {\n const affiliatedMemo = `${memo}${affiliateAddress ? `:${affiliateAddress}:${affiliateBasisPoints || 0}` : \"\"}`;\n\n return affiliatedMemo.endsWith(\":\") ? affiliatedMemo.slice(0, -1) : affiliatedMemo;\n}\n\nfunction getPoolIdentifier({ chain, symbol }: { chain: Chain; symbol: string }) {\n return match(chain)\n .with(Chain.Bitcoin, Chain.Dogecoin, Chain.Litecoin, () => chain.slice(0, 1).toLowerCase())\n .with(Chain.BitcoinCash, () => \"c\")\n .otherwise(() => `${chain}.${symbol}`);\n}\n\ntype WithAffiliate<T extends {}> = T & { affiliateAddress?: string; affiliateBasisPoints?: number };\n\ntype BondOrLeaveParams = { type: MemoType.BOND | MemoType.LEAVE; address: string };\ntype UnbondParams = { address: string; unbondAmount: number };\ntype NameRegisterParams = { name: string; chain: string; address: string; owner?: string };\ntype PreferredAssetRegisterParams = { name: string; chain: Chain; asset: string; payout: string; owner: string };\ntype WithdrawParams = { chain: Chain; symbol: string; ticker: string; basisPoints: number; targetAsset?: string };\n",
|
|
25
25
|
"/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { type Chain, getChainConfig } from \"@tcswap/types\";\nimport type { BrowserProvider, JsonRpcProvider } from \"ethers\";\nimport { USwapError } from \"../modules/uSwapError\";\nimport {\n type EIP6963AnnounceProviderEvent,\n type EIP6963Provider,\n type EthereumWindowProvider,\n type NetworkParams,\n WalletOption,\n} from \"../types\";\nimport { warnOnce } from \"./others\";\n\ndeclare const window: {\n ethereum: EthereumWindowProvider;\n trustwallet: EthereumWindowProvider;\n coinbaseWalletExtension: EthereumWindowProvider;\n braveSolana: any;\n bitkeep?: { ethereum: EthereumWindowProvider };\n ctrl?: { ethereum: EthereumWindowProvider };\n $onekey?: { ethereum: EthereumWindowProvider };\n vultisig?: { ethereum: EthereumWindowProvider };\n} & Window;\n\nexport function isWeb3Detected() {\n return typeof window.ethereum !== \"undefined\";\n}\n\nexport function isDetected(walletOption: WalletOption) {\n return listWeb3EVMWallets().includes(walletOption);\n}\n\nexport function listWeb3EVMWallets() {\n const metamaskEnabled = window?.ethereum && !window.ethereum?.isBraveWallet;\n const ctrlEnabled = window?.ctrl || window?.ethereum?.__XDEFI;\n const vultisigEnabled = window?.vultisig;\n const braveEnabled = window?.ethereum?.isBraveWallet;\n const trustEnabled = window?.ethereum?.isTrust || window?.trustwallet;\n const coinbaseEnabled =\n (window?.ethereum?.overrideIsMetaMask && window?.ethereum?.selectedProvider?.isCoinbaseWallet) ||\n window?.coinbaseWalletExtension;\n const bitgetEnabled = window?.bitkeep?.ethereum;\n const onekeyEnabled = window?.$onekey?.ethereum;\n\n const wallets = [];\n if (metamaskEnabled) wallets.push(WalletOption.METAMASK);\n if (ctrlEnabled) wallets.push(WalletOption.CTRL);\n if (vultisigEnabled) wallets.push(WalletOption.VULTISIG);\n if (braveEnabled) wallets.push(WalletOption.BRAVE);\n if (trustEnabled) wallets.push(WalletOption.TRUSTWALLET_WEB);\n if (coinbaseEnabled) wallets.push(WalletOption.COINBASE_WEB);\n if (okxMobileEnabled()) wallets.push(WalletOption.OKX_MOBILE);\n if (bitgetEnabled) wallets.push(WalletOption.BITGET);\n if (onekeyEnabled) wallets.push(WalletOption.ONEKEY);\n\n return wallets;\n}\n\nexport async function switchEVMWalletNetwork(provider: BrowserProvider, chain: Chain, networkParams?: NetworkParams) {\n const chainConfig = getChainConfig(chain);\n\n try {\n await providerRequest({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: chainConfig.chainIdHex }],\n provider,\n });\n } catch (error) {\n if (!networkParams) {\n throw new USwapError(\"helpers_failed_to_switch_network\", { error: error, reason: \"networkParams not provided\" });\n }\n await addEVMWalletNetwork(provider, networkParams);\n }\n}\n\nexport function filterSupportedChains<T extends string[]>({\n chains,\n supportedChains,\n walletType,\n}: {\n chains: Chain[];\n supportedChains: T;\n walletType?: WalletOption;\n}) {\n const supported = chains.filter((chain) => !chain || supportedChains.includes(chain));\n\n if (supported.length === 0) {\n throw new USwapError(\"wallet_chain_not_supported\", { chain: chains.join(\", \"), wallet: walletType });\n }\n\n const unsupported = chains.filter((chain) => !supportedChains.includes(chain));\n\n warnOnce({\n condition: unsupported.length > 0,\n id: `wallet_chain_not_supported_${walletType}`,\n warning: `${walletType} wallet does not support the following chains: ${unsupported.join(\n \", \",\n )}. These chains will be ignored.`,\n });\n\n return supported as T;\n}\n\nexport function wrapMethodWithNetworkSwitch<T extends (...args: any[]) => any>(\n func: T,\n provider: BrowserProvider,\n chain: Chain,\n) {\n return (async (...args: any[]) => {\n const { chainIdHex } = getChainConfig(chain);\n if ((await provider.getNetwork()).chainId.toString() === chainIdHex) {\n return func(...args);\n }\n try {\n await switchEVMWalletNetwork(provider, chain);\n } catch (error) {\n throw new USwapError({ errorKey: \"helpers_failed_to_switch_network\", info: { error } });\n }\n return func(...args);\n }) as unknown as T;\n}\n\nexport function prepareNetworkSwitch<T extends Record<string, unknown>, M extends keyof T>({\n toolbox,\n chain,\n provider = window.ethereum,\n methodNames = [],\n}: {\n toolbox: T;\n chain: Chain;\n provider?: BrowserProvider | JsonRpcProvider;\n methodNames?: M[];\n}) {\n const methodsToWrap = [\n ...methodNames,\n \"approve\",\n \"approvedAmount\",\n \"call\",\n \"sendTransaction\",\n \"transfer\",\n \"isApproved\",\n \"approvedAmount\",\n \"EIP1193SendTransaction\",\n \"getFeeData\",\n \"broadcastTransaction\",\n \"estimateCall\",\n \"estimateGasLimit\",\n \"estimateGasPrices\",\n \"createContractTxObject\",\n ] as M[];\n const wrappedMethods = methodsToWrap.reduce((object, methodName) => {\n if (!toolbox[methodName]) return object;\n\n const method = toolbox[methodName];\n\n if (typeof method !== \"function\") return object;\n\n // @ts-expect-error\n const wrappedMethod = wrapMethodWithNetworkSwitch(method, provider, chain);\n\n // biome-ignore lint/performance/noAccumulatingSpread: valid use case\n return { ...object, [methodName]: wrappedMethod };\n }, {});\n\n return { ...toolbox, ...wrappedMethods };\n}\n\nexport function addEVMWalletNetwork(provider: BrowserProvider, networkParams: NetworkParams) {\n return providerRequest({ method: \"wallet_addEthereumChain\", params: [networkParams], provider });\n}\n\nexport function addAccountsChangedCallback(callback: () => void) {\n window.ethereum?.on(\"accountsChanged\", () => callback());\n window.ctrl?.ethereum.on(\"accountsChanged\", () => callback());\n}\n\nexport function getETHDefaultWallet() {\n const { isTrust, isBraveWallet, __XDEFI, overrideIsMetaMask, selectedProvider } = window?.ethereum || {};\n if (isTrust) return WalletOption.TRUSTWALLET_WEB;\n if (isBraveWallet) return WalletOption.BRAVE;\n if (overrideIsMetaMask && selectedProvider?.isCoinbaseWallet) return WalletOption.COINBASE_WEB;\n if (__XDEFI) return WalletOption.CTRL;\n if (window?.$onekey?.ethereum) return WalletOption.ONEKEY;\n return WalletOption.METAMASK;\n}\n\nexport function getEIP6963Wallets() {\n const providers: EIP6963Provider[] = [];\n\n function onAnnouncement(event: EIP6963AnnounceProviderEvent) {\n if (providers.map((p) => p.info.uuid).includes(event.detail.info.uuid)) return;\n providers.push(event.detail);\n }\n\n window.addEventListener(\"eip6963:announceProvider\", onAnnouncement);\n window.dispatchEvent(new Event(\"eip6963:requestProvider\"));\n\n function removeEIP6963EventListener() {\n window.removeEventListener(\"eip6963:announceProvider\", onAnnouncement);\n }\n\n return { providers, removeEIP6963EventListener };\n}\n\nexport function okxMobileEnabled() {\n const ua = navigator.userAgent;\n const isIOS = /iphone|ipad|ipod|ios/i.test(ua);\n const isAndroid = /android|XiaoMi|MiuiBrowser/i.test(ua);\n const isMobile = isIOS || isAndroid;\n const isOKApp = /OKApp/i.test(ua);\n\n return isMobile && isOKApp;\n}\n\nexport function providerRequest({\n provider,\n params,\n method,\n}: {\n provider?: BrowserProvider;\n params?: any;\n method:\n | \"wallet_addEthereumChain\"\n | \"wallet_switchEthereumChain\"\n | \"eth_requestAccounts\"\n | \"eth_sendTransaction\"\n | \"eth_signTransaction\";\n}) {\n if (!provider?.send) {\n throw new USwapError(\"helpers_not_found_provider\");\n }\n\n const providerParams = params ? (Array.isArray(params) ? params : [params]) : [];\n return provider.send(method, providerParams);\n}\n"
|
|
26
26
|
],
|
|
27
|
-
"mappings": "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",
|
|
28
|
-
"debugId": "
|
|
27
|
+
"mappings": "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",
|
|
28
|
+
"debugId": "764D9916CF0C2AD464756E2164756E21",
|
|
29
29
|
"names": []
|
|
30
30
|
}
|
|
@@ -242,6 +242,8 @@ export declare const USwapApi: {
|
|
|
242
242
|
} | undefined;
|
|
243
243
|
priceImpact?: number | undefined;
|
|
244
244
|
referrer?: string | undefined;
|
|
245
|
+
slippageBps?: number | undefined;
|
|
246
|
+
totalBps?: number | undefined;
|
|
245
247
|
txType?: import(".").RouteQuoteTxType | undefined;
|
|
246
248
|
} | undefined;
|
|
247
249
|
refundAddress?: string | undefined;
|
|
@@ -395,6 +397,8 @@ export declare const USwapApi: {
|
|
|
395
397
|
} | undefined;
|
|
396
398
|
priceImpact?: number | undefined;
|
|
397
399
|
referrer?: string | undefined;
|
|
400
|
+
slippageBps?: number | undefined;
|
|
401
|
+
totalBps?: number | undefined;
|
|
398
402
|
txType?: import(".").RouteQuoteTxType | undefined;
|
|
399
403
|
} | undefined;
|
|
400
404
|
refundAddress?: string | undefined;
|