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-22 08:33:03 +02:00
function orderClaims ( claimsListArray ) {
logger . debug ( 'ordering the free public 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-30 23:37:47 +02:00
reject ( 'NO_CLAIMS' ) ; // note: should be a resolve not a reject! but I need routes to handle that properly. right now it is handled as an error.
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-30 23:37:47 +02:00
reject ( 'NO_FREE_PUBLIC_CLAIMS' ) ; // note: should be a resolve not a reject! but I need routes to handle that properly. right now it is handled as an error.
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-22 08:33:03 +02:00
const orderedPublicClaims = orderClaims ( 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 ;
} ;