@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
119 lines • 4.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fees = void 0;
const bignumber_js_1 = require("bignumber.js");
function isRecord(value) {
return typeof value === "object" && value !== null;
}
function isBigNumber(value) {
return bignumber_js_1.BigNumber.isBigNumber(value);
}
function getSuggestedFeePerByteRange(transaction) {
const networkInfo = transaction.networkInfo;
if (!isRecord(networkInfo))
return null;
const feeItems = networkInfo.feeItems;
if (!isRecord(feeItems) || !Array.isArray(feeItems.items))
return null;
const items = feeItems.items
.filter((item) => {
if (!isRecord(item))
return false;
return typeof item.speed === "string" && isBigNumber(item.feePerByte);
})
.map(item => item.feePerByte);
if (items.length === 0)
return null;
const min = bignumber_js_1.BigNumber.min(...items);
const max = bignumber_js_1.BigNumber.max(...items);
return {
min: min.toFixed(),
max: max.toFixed(),
};
}
exports.fees = {
hasPresets: true,
hasCustom: true,
hasCoinControl: true,
presets: {
legend: { type: "feeRate", unit: "sat/vbyte", valueFrom: "presetAmount" },
strategyLabelInAmount: "legend",
getOptions: transaction => {
if (!isRecord(transaction)) {
return [];
}
const networkInfo = transaction.networkInfo;
if (!isRecord(networkInfo)) {
return [];
}
const feeItems = networkInfo.feeItems;
if (!isRecord(feeItems) || !Array.isArray(feeItems.items)) {
return [];
}
const items = feeItems.items
.filter((item) => {
if (!isRecord(item))
return false;
return typeof item.speed === "string" && isBigNumber(item.feePerByte);
})
.map(item => ({ speed: item.speed, feePerByte: item.feePerByte }));
if (items.length === 0) {
return [];
}
return [...items].reverse().map(item => ({
id: item.speed,
amount: item.feePerByte,
}));
},
shouldEstimateWithBridge: () => true,
},
custom: {
inputs: [
{
key: "feePerByte",
type: "number",
unitLabel: "sat/vbyte",
suggestedRange: {
getRange: transaction => {
if (!isRecord(transaction))
return null;
return getSuggestedFeePerByteRange(transaction);
},
},
},
],
getInitialValues: (transaction) => {
const empty = {};
if (!isRecord(transaction))
return empty;
const feePerByte = transaction.feePerByte;
if (isBigNumber(feePerByte) && feePerByte.gt(0)) {
return {
feePerByte: feePerByte.toFixed(),
};
}
const networkInfo = transaction.networkInfo;
if (isRecord(networkInfo) && isRecord(networkInfo.feeItems)) {
const medium = networkInfo.feeItems.medium;
if (isBigNumber(medium) && medium.gt(0)) {
return {
feePerByte: medium.toFixed(),
};
}
}
return {
feePerByte: "",
};
},
buildTransactionPatch: values => {
const feePerByte = new bignumber_js_1.BigNumber(values.feePerByte);
return {
feesStrategy: "custom",
feePerByte: feePerByte.isNaN() || feePerByte.isNegative()
? new bignumber_js_1.BigNumber(0)
: feePerByte.integerValue(bignumber_js_1.BigNumber.ROUND_DOWN),
};
},
},
};
//# sourceMappingURL=fees.js.map