rubic-sdk-next
Version:
Simplify dApp creation
94 lines • 3.65 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.RubicApiParser = void 0;
const core_1 = require("@cryptorubic/core");
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const errors_1 = require("../../../common/errors");
const max_decimals_error_1 = require("../../../common/errors/swap/max-decimals.error");
const tokens_1 = require("../../../common/tokens");
class RubicApiParser {
static parseRoutingDto(routingDto) {
const steps = [];
for (const route of routingDto) {
const [from, to] = route.path;
const fromToken = new core_1.PriceTokenAmount({
...from,
tokenAmount: from?.amount
});
const toToken = new core_1.PriceTokenAmount({
...to,
tokenAmount: to?.amount
});
steps.push({
provider: route.provider,
path: [fromToken, toToken],
type: route.type
});
}
return steps;
}
static parseFeeInfoDto(feeInfoDto) {
const nativeToken = new tokens_1.PriceToken({
...feeInfoDto.gasTokenFees.nativeToken,
price: new bignumber_js_1.default(feeInfoDto.gasTokenFees.nativeToken.price)
});
const percentToken = feeInfoDto.percentFees.token
? new tokens_1.PriceToken({
...feeInfoDto.percentFees.token,
price: new bignumber_js_1.default(feeInfoDto.percentFees.token.price)
})
: nativeToken;
const protocolFee = feeInfoDto.gasTokenFees.protocol;
const providerFee = feeInfoDto.gasTokenFees.provider;
return {
rubicProxy: {
fixedFee: {
amount: new bignumber_js_1.default(protocolFee.fixedAmount),
token: nativeToken
},
platformFee: {
percent: feeInfoDto.percentFees.percent,
token: percentToken
}
},
provider: {
cryptoFee: {
amount: new bignumber_js_1.default(providerFee.fixedAmount),
token: nativeToken
}
}
};
}
static parseRubicApiErrors(err) {
if (err.code === 2005 || err.code === 2004) {
const data = err.data;
if (data.minAmount) {
return new errors_1.MinAmountError(new bignumber_js_1.default(data.minAmount), data.tokenSymbol);
}
if (data.maxAmount) {
return new errors_1.MaxAmountError(new bignumber_js_1.default(data.maxAmount), data.tokenSymbol);
}
}
if (err.code === 2006) {
const decimals = err.reason.match(/\d+/)?.[0];
return new max_decimals_error_1.MaxDecimalsError(Number(decimals));
}
throw new errors_1.RubicSdkError(err.reason);
}
static parseRubicApiWarnings(warnings) {
const parsedWarnings = { needAuthWallet: false };
for (const warning of warnings) {
if (warning.code === 2007) {
parsedWarnings.needAuthWallet = true;
continue;
}
parsedWarnings.error = RubicApiParser.parseRubicApiErrors(warning);
}
return parsedWarnings;
}
}
exports.RubicApiParser = RubicApiParser;
//# sourceMappingURL=rubic-api-parser.js.map