@ledgerhq/coin-aptos
Version:
Ledger Aptos Coin integration
81 lines • 3.54 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatUnlockTime = exports.getDelegationOpMaxAmount = exports.getStakingPosition = exports.canRestake = exports.canWithdraw = exports.canUnstake = exports.canStake = exports.mapStakingPositions = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const formatCurrencyUnit_1 = require("@ledgerhq/coin-framework/currencies/formatCurrencyUnit");
const constants_1 = require("../constants");
const logic_1 = require("../bridge/logic");
const mapStakingPositions = (stakingPositions, validators, unit) => {
return stakingPositions.map(sp => {
const rank = validators.findIndex(v => v.address === sp.validatorId);
const validator = validators[rank] ?? sp;
const formatConfig = {
disableRounding: false,
alwaysShowSign: false,
showCode: true,
};
return {
...sp,
formattedAmount: (0, formatCurrencyUnit_1.formatCurrencyUnit)(unit, sp.active, formatConfig),
formattedPending: (0, formatCurrencyUnit_1.formatCurrencyUnit)(unit, sp.pendingInactive, formatConfig),
formattedAvailable: (0, formatCurrencyUnit_1.formatCurrencyUnit)(unit, sp.inactive, formatConfig),
rank,
validator,
};
});
};
exports.mapStakingPositions = mapStakingPositions;
const canStake = (account) => {
return (0, logic_1.getMaxSendBalance)(account) > constants_1.MIN_COINS_ON_SHARES_POOL_IN_OCTAS;
};
exports.canStake = canStake;
const canUnstake = (stakingPosition) => {
return stakingPosition.active.gt(0);
};
exports.canUnstake = canUnstake;
const canWithdraw = (stakingPosition) => {
return stakingPosition.inactive.gt(0);
};
exports.canWithdraw = canWithdraw;
const canRestake = (stakingPosition) => {
return stakingPosition.pendingInactive.gt(0);
};
exports.canRestake = canRestake;
const getStakingPosition = (account, validatorAddress) => (account.aptosResources?.stakingPositions ?? []).find(stakingPosition => stakingPosition.validatorId === validatorAddress);
exports.getStakingPosition = getStakingPosition;
const getDelegationOpMaxAmount = (account, validatorAddress, mode) => {
let maxAmount;
const stakingPosition = (0, exports.getStakingPosition)(account, validatorAddress);
switch (mode) {
case "unstake":
maxAmount = stakingPosition?.active;
break;
case "withdraw":
maxAmount = stakingPosition?.inactive;
break;
case "restake":
maxAmount = stakingPosition?.pendingInactive;
}
if (maxAmount === undefined || maxAmount.lt(0)) {
return new bignumber_js_1.default(0);
}
return maxAmount;
};
exports.getDelegationOpMaxAmount = getDelegationOpMaxAmount;
const formatUnlockTime = (epochSecs) => {
const unlockTime = parseInt(epochSecs, 10) * 1000; // Convert to ms
const now = Date.now();
const diffMs = unlockTime - now;
if (diffMs <= 0)
return "Unlocked";
const totalMinutes = Math.floor(diffMs / (1000 * 60));
const days = Math.floor(totalMinutes / (60 * 24));
const hours = Math.floor((totalMinutes % (60 * 24)) / 60);
const minutes = totalMinutes % 60;
return `${days}d ${hours}h ${minutes}m`;
};
exports.formatUnlockTime = formatUnlockTime;
//# sourceMappingURL=staking.js.map