UNPKG

@atomiqlabs/sdk

Version:

atomiq labs SDK for cross-chain swaps between smart chains and bitcoin

86 lines (85 loc) 3.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toTokenAmount = exports.isTokenAmount = void 0; const Token_1 = require("./Token"); const Utils_1 = require("../utils/Utils"); /** * Type guard for {@link TokenAmount} * * @category Tokens */ function isTokenAmount(obj, token, known) { const hasExpectedKnownState = known == null ? ((typeof (obj?.rawAmount) === "bigint" && obj?.isUnknown === false) || (obj?.rawAmount === undefined && obj?.isUnknown === true)) : known ? typeof (obj?.rawAmount) === "bigint" && obj?.isUnknown === false : obj?.rawAmount === undefined && obj?.isUnknown === true; return obj != null && typeof (obj) === "object" && typeof (obj.amount) === "string" && typeof (obj._amount) === "number" && (token == null ? (0, Token_1.isToken)(obj.token) : token.equals(obj.token)) && typeof (obj.currentUsdValue) === "function" && typeof (obj.usdValue) === "function" && (obj.pastUsdValue == null || typeof (obj.pastUsdValue) === "number") && typeof (obj.toString) === "function" && hasExpectedKnownState; } exports.isTokenAmount = isTokenAmount; /** * Factory function to create a TokenAmount * * @category Tokens * @internal */ function toTokenAmount(amount, token, prices, pricingInfo) { if (amount == null) return { rawAmount: undefined, amount: "", _amount: NaN, token, currentUsdValue: () => Promise.resolve(NaN), pastUsdValue: NaN, usdValue: () => Promise.resolve(NaN), toString: () => "??? " + token.ticker, isUnknown: true }; const amountStr = (0, Utils_1.toDecimal)(amount, token.decimals, undefined, token.displayDecimals); const _amount = parseFloat(amountStr); let usdValue = undefined; if (pricingInfo != null) { if (token.chain === "BTC" && token.ticker === "BTC") { if (pricingInfo.realPriceUsdPerBitcoin != null) { usdValue = Number(amount) * pricingInfo.realPriceUsdPerBitcoin; } } else { if (pricingInfo.realPriceUsdPerBitcoin != null && pricingInfo.realPriceUSatPerToken != null) { usdValue = _amount * pricingInfo.realPriceUsdPerBitcoin * Number(pricingInfo.realPriceUSatPerToken) / 1000000; } } } const currentUsdValue = (abortSignal, preFetchedUsdPrice) => prices.getUsdValue(amount, token, abortSignal, preFetchedUsdPrice); return { rawAmount: amount, amount: amountStr, _amount, token, currentUsdValue, pastUsdValue: usdValue, usdValue: async (abortSignal, preFetchedUsdPrice) => { if (usdValue == null) { usdValue = await currentUsdValue(abortSignal, preFetchedUsdPrice); } return usdValue; }, toString: () => amountStr + " " + token.ticker, isUnknown: false }; } exports.toTokenAmount = toTokenAmount;