diff --git a/functions/endpoints/mainnet.js b/functions/endpoints/mainnet.js index 3b52993..3f808b9 100644 --- a/functions/endpoints/mainnet.js +++ b/functions/endpoints/mainnet.js @@ -1,6 +1,6 @@ const app = require( './express' )() const { getTotalSupply } = require( '../modules/contract' ) -const { safelyReturnRocketeer, web2domain } = require( '../nft-media/rocketeer' ) +const { safelyReturnRocketeer, web2domain, safelyReturnMultipleRocketeers } = require( '../nft-media/rocketeer' ) const { setAvatar, resetAvatar } = require( '../integrations/avatar' ) const { generateNewOutfit, setPrimaryOutfit } = require( '../integrations/changingroom' ) @@ -40,6 +40,24 @@ app.get( '/api/rocketeer/:id', async ( req, res ) => { } ) +app.get( '/api/rocketeers/', async ( req, res ) => { + + try { + + // Parse the request + let { ids } = req.query + ids = ids.split( ',' ) + if( ids.length > 100 ) throw new Error( 'Please do not ask for so much data at once :)' ) + const rocketeers = await safelyReturnMultipleRocketeers( ids, 'testnet' ) + return res.json( rocketeers ) + + } catch( e ) { + return res.json( { error: e.message || e.toString() } ) + } + + +} ) + /* /////////////////////////////// // VGR's dashboard integration // /////////////////////////////*/ diff --git a/functions/endpoints/testnet.js b/functions/endpoints/testnet.js index 41641dc..977c614 100644 --- a/functions/endpoints/testnet.js +++ b/functions/endpoints/testnet.js @@ -1,6 +1,6 @@ const app = require( './express' )() const { getTotalSupply } = require( '../modules/contract' ) -const { safelyReturnRocketeer, web2domain } = require( '../nft-media/rocketeer' ) +const { safelyReturnRocketeer, web2domain, safelyReturnMultipleRocketeers } = require( '../nft-media/rocketeer' ) const { generateNewOutfit, setPrimaryOutfit } = require( '../integrations/changingroom' ) //////////////////////////////// @@ -39,6 +39,24 @@ app.get( '/testnetapi/rocketeer/:id', async ( req, res ) => { } ) +app.get( '/testnetapi/rocketeers/', async ( req, res ) => { + + try { + + // Parse the request + let { ids } = req.query + ids = ids.split( ',' ) + if( ids.length > 100 ) throw new Error( 'Please do not ask for so much data at once :)' ) + const rocketeers = await safelyReturnMultipleRocketeers( ids, 'testnet' ) + return res.json( rocketeers ) + + } catch( e ) { + return res.json( { error: e.message || e.toString() } ) + } + + +} ) + /* /////////////////////////////// // Changing room endpoints // /////////////////////////////*/ diff --git a/functions/nft-media/rocketeer.js b/functions/nft-media/rocketeer.js index d69e4fa..35e3d42 100644 --- a/functions/nft-media/rocketeer.js +++ b/functions/nft-media/rocketeer.js @@ -149,7 +149,22 @@ async function safelyReturnRocketeer( id, network ) { } +async function safelyReturnMultipleRocketeers( ids=[], network='mainnet' ) { + + // Chech if this is an illegal ID + const invalidIds = await Promise.all( ids.map( id => isInvalidRocketeerId( id, network ) ) ) + if( invalidIds.includes( true ) ) throw invalidIds + + // Get old rocketeers + const rocketeers = await Promise.all( ids.map( id => getExistingRocketeer( id ) ) ) + + // Send back an array of rocketeers, but not any failed ones + return rocketeers.filter( rocketeer => rocketeer ) + +} + module.exports = { - web2domain: web2domain, - safelyReturnRocketeer: safelyReturnRocketeer + web2domain, + safelyReturnRocketeer, + safelyReturnMultipleRocketeers } \ No newline at end of file