'use strict'; const got = require('got'); const uniqueRandomArray = require('unique-random-array'); const randomCache = {}; function formatResult(getRandomImage) { const imageData = getRandomImage(); if (!imageData) { return; } return `http://imgur.com/${imageData.hash}${imageData.ext.replace(/\?.*/, '')}`; } function storeResults(images, subreddit) { const getRandomImage = uniqueRandomArray(images); randomCache[subreddit] = getRandomImage; return getRandomImage; } module.exports = function (subreddit) { subreddit = (typeof subreddit === 'string' && subreddit.length !== 0) ? subreddit : 'puppies'; if (randomCache[subreddit]) { return Promise.resolve(formatResult(randomCache[subreddit])); } return got(`https://imgur.com/r/${subreddit}/hot.json`, {json: true}) .then(response => storeResults(response.body.data, subreddit)) .then(getRandomImage => formatResult(getRandomImage)); };