const isFreePublicClaim = require('./isFreePublicClaim.js'); const lbryApi = require('../libraries/lbryApi.js'); function filterForFreePublicClaims (claimsListArray) { // console.log("claims list:", claimsListArray) if (!claimsListArray) { return null; } const freePublicClaims = claimsListArray.filter(claim => { if (!claim.value) { return false; } return isFreePublicClaim(claim); }); return freePublicClaims; } function orderTopClaims (claimsListArray) { console.log('>> orderTopClaims'); claimsListArray.sort(({ amountA, heightA }, { amountB, heightB }) => { if (amountA === amountB) { return heightA > heightB; } else { return amountA < amountB; } }); return claimsListArray; } 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 }) => { const claimsList = claims; console.log('>> Number of claims:', claimsList.length); // return early if no claims were found if (claimsList.length === 0) { reject('NO_CLAIMS'); console.log('exiting due to lack of claims'); return; } // filter the claims to return only free, public claims const freePublicClaims = filterForFreePublicClaims(claimsList); // return early if no free, public claims were found if (!freePublicClaims || freePublicClaims.length === 0) { reject('NO_FREE_PUBLIC_CLAIMS'); console.log('exiting due to lack of free or public claims'); return; } // order the claims const orderedPublicClaims = orderTopClaims(freePublicClaims); // resolve the promise resolve(orderedPublicClaims); }) .catch(error => { console.log(">> 'claim_list' error"); reject(error); }); }); return deferred; };