@fairmint/canton-node-sdk
Version:
Canton Node SDK
38 lines • 1.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.selectLockedAmuletForAmount = selectLockedAmuletForAmount;
function isExpired(lockExpiresAt, nowMs) {
if (!lockExpiresAt) {
return false;
}
const parsed = Date.parse(lockExpiresAt);
if (Number.isNaN(parsed)) {
return false;
}
return parsed <= nowMs;
}
/**
* Select a locked amulet that can fund the required amount. By default the smallest qualifying amulet is returned to
* avoid overspending.
*/
function selectLockedAmuletForAmount(amulets, amountNeeded, options = {}) {
if (!Number.isFinite(amountNeeded) || amountNeeded <= 0) {
throw new Error('selectLockedAmuletForAmount requires a positive amountNeeded');
}
const { requireExclusiveHolder = true, rejectExpiredLocks = true, nowMs = Date.now() } = options;
const candidates = amulets
.filter((amulet) => amulet.effectiveAmount >= amountNeeded)
.filter((amulet) => {
if (requireExclusiveHolder && amulet.holders.length > 1) {
return false;
}
if (rejectExpiredLocks && isExpired(amulet.lockExpiresAt, nowMs)) {
return false;
}
return true;
})
.sort((a, b) => a.effectiveAmount - b.effectiveAmount);
const [selected] = candidates;
return selected ?? null;
}
//# sourceMappingURL=select-funding-amulets.js.map