'use strict'; const bhttp = require('bhttp'); const taskQueue = require('promise-task-queue'); const logger = require('../logger')(__filename); const queue = taskQueue(); queue.on('concurrencyReached:httpGet', () => { logger.silly('Queueing GET requests'); }); queue.on('concurrencyReached:httpPost', () => { logger.silly('Queueing POST requests'); }); queue.define('httpGet', async ({ url, timeout = 30000, options = {}, }) => { logger.silly(`GET ${url}`); const res = await bhttp.get(url, { responseTimeout: timeout, ...options, }); res.code = res.statusCode; return res; }, { concurrency: 20, }); queue.define('httpPost', async ({ url, body, timeout = 30000, options = {}, }) => { logger.silly(`POST ${url} with ${body}`); const res = await bhttp.post(url, body, { responseTimeout: timeout, ...options, }); res.code = res.statusCode; return res; }, { concurrency: 20, }); async function get(url, options) { return queue.push('httpGet', { method: 'get', url, options, }); } async function post(url, body, options) { return queue.push('httpPost', { url, body, options, }); } module.exports = { get, post, };