2017-06-19 18:37:35 +02:00
|
|
|
const isFreePublicClaim = require('./isFreePublicClaim.js');
|
|
|
|
const lbryApi = require('../libraries/lbryApi.js');
|
2017-06-20 01:37:56 +02:00
|
|
|
const logger = require('winston');
|
2017-06-17 02:48:51 +02:00
|
|
|
|
2017-06-17 22:51:30 +02:00
|
|
|
function filterForFreePublicClaims (claimsListArray) {
|
2017-06-20 04:34:34 +02:00
|
|
|
logger.debug('filtering claims list for free, public claims');
|
2017-06-17 22:51:30 +02:00
|
|
|
if (!claimsListArray) {
|
2017-06-19 18:37:35 +02:00
|
|
|
return null;
|
2017-06-17 22:51:30 +02:00
|
|
|
}
|
|
|
|
const freePublicClaims = claimsListArray.filter(claim => {
|
|
|
|
if (!claim.value) {
|
2017-06-19 18:37:35 +02:00
|
|
|
return false;
|
2017-06-17 22:51:30 +02:00
|
|
|
}
|
2017-06-19 18:37:35 +02:00
|
|
|
return isFreePublicClaim(claim);
|
|
|
|
});
|
|
|
|
return freePublicClaims;
|
2017-06-17 02:48:51 +02:00
|
|
|
}
|
|
|
|
|
2017-06-17 22:51:30 +02:00
|
|
|
function orderTopClaims (claimsListArray) {
|
2017-06-20 04:34:34 +02:00
|
|
|
logger.debug('ordering the top claims');
|
2017-06-20 01:37:56 +02:00
|
|
|
claimsListArray.sort((a, b) => {
|
|
|
|
if (a.amount === b.amount) {
|
|
|
|
return a.height < b.height;
|
2017-06-17 22:51:30 +02:00
|
|
|
} else {
|
2017-06-20 01:37:56 +02:00
|
|
|
return a.amount < b.amount;
|
2017-06-17 22:51:30 +02:00
|
|
|
}
|
2017-06-19 18:37:35 +02:00
|
|
|
});
|
|
|
|
return claimsListArray;
|
2017-06-17 02:48:51 +02:00
|
|
|
}
|
|
|
|
|
2017-06-17 22:51:30 +02:00
|
|
|
module.exports = claimName => {
|
|
|
|
const deferred = new Promise((resolve, reject) => {
|
|
|
|
// make a call to the daemon to get the claims list
|
|
|
|
lbryApi
|
|
|
|
.getClaimsList(claimName)
|
|
|
|
.then(({ claims }) => {
|
2017-06-19 18:37:35 +02:00
|
|
|
const claimsList = claims;
|
2017-06-20 04:34:34 +02:00
|
|
|
logger.debug(`Number of claims: ${claimsList.length}`);
|
2017-06-17 22:51:30 +02:00
|
|
|
// return early if no claims were found
|
|
|
|
if (claimsList.length === 0) {
|
2017-06-19 18:37:35 +02:00
|
|
|
reject('NO_CLAIMS');
|
2017-06-20 04:34:34 +02:00
|
|
|
logger.debug('exiting due to lack of claims');
|
2017-06-19 18:37:35 +02:00
|
|
|
return;
|
2017-06-17 22:51:30 +02:00
|
|
|
}
|
|
|
|
// filter the claims to return only free, public claims
|
2017-06-19 18:37:35 +02:00
|
|
|
const freePublicClaims = filterForFreePublicClaims(claimsList);
|
2017-06-17 22:51:30 +02:00
|
|
|
// return early if no free, public claims were found
|
|
|
|
if (!freePublicClaims || freePublicClaims.length === 0) {
|
2017-06-19 18:37:35 +02:00
|
|
|
reject('NO_FREE_PUBLIC_CLAIMS');
|
2017-06-20 04:34:34 +02:00
|
|
|
logger.debug('exiting due to lack of free or public claims');
|
2017-06-19 18:37:35 +02:00
|
|
|
return;
|
2017-06-17 22:51:30 +02:00
|
|
|
}
|
|
|
|
// order the claims
|
2017-06-19 18:37:35 +02:00
|
|
|
const orderedPublicClaims = orderTopClaims(freePublicClaims);
|
2017-06-17 22:51:30 +02:00
|
|
|
// resolve the promise
|
2017-06-19 18:37:35 +02:00
|
|
|
resolve(orderedPublicClaims);
|
2017-06-17 22:51:30 +02:00
|
|
|
})
|
|
|
|
.catch(error => {
|
2017-06-20 04:34:34 +02:00
|
|
|
logger.error('error received from lbryApi.getClaimsList', error);
|
2017-06-19 18:37:35 +02:00
|
|
|
reject(error);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
return deferred;
|
|
|
|
};
|