@atomiqlabs/sdk
Version:
atomiq labs SDK for cross-chain swaps between smart chains and bitcoin
86 lines (85 loc) • 3.27 kB
JavaScript
;
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;