UNPKG

barcodelookup

Version:

A lightweight importable Node.js package that can be used to resolve barcode data

241 lines (234 loc) 6.64 kB
'use strict'; const fetch = require('node-fetch'); let baseUrl = 'https://api.barcodelookup.com/v2/'; module.exports = { /** * Performs a rate-limit query to resolve rate limits of associated api-key. * @param key associated with limits * @returns {Promise<T | {data: any, statusCode: number}>|null} data * is response payload, statusCode is response status code. */ rateLimits: ({ key: key }) => { let url = baseUrl + 'rate-limits?key=' + key; return fetch(url) .then((response) => { switch (response.status) { case 200: return Promise.all([response.status, response.json()]); break; default: return Promise.all([ response.status, response.statusText ]); } }) .then((res) => { return { statusCode: res[0], data: res[1] }; }) .catch((error) => { return { statusCode: 400, data: error }; }); }, /** * Performs a barcode lookup request targeting the official barcodelookup * api. * @param barcode optional argument. * @param mpn optional argument. * @param asin optional argument. * @param productName optional argument. * @param category optional argument. * @param search optional argument. * @param page optional argument. * @param geo optional argument. * @param formatted optional argument. * @param key optional argument. * @returns {Promise<T | {data: any, statusCode: number}>|null} data * is response payload, statusCode is response status code. */ lookup: ({ barcode: barcode, mpn: mpn, asin: asin, productName: productName, category: category, search: search, page: page, geo: geo, formatted: formatted, key: key }) => { let url = baseUrl + 'products?'; if ( barcode && mpn && asin && productName && category && search && page && geo && formatted ) { url += 'key=' + key + '&barcode=' + barcode + '&mpn=' + mpn + '&asin=' + asin + '&productName=' + productName + '&category=' + category + '&search=' + search + '&page=' + page + '&geo=' + geo + '&formatted=' + formatted; } if ( barcode && mpn && asin && productName && category && search && page && geo ) { url += 'key=' + key + '&barcode=' + barcode + '&mpn=' + mpn + '&asin=' + asin + '&productName=' + productName + '&category=' + category + '&search=' + search + '&page=' + page + '&geo=' + geo; } if ( barcode && mpn && asin && productName && category && search && page ) { url += 'key=' + key + '&barcode=' + barcode + '&mpn=' + mpn + '&asin=' + asin + '&productName=' + productName + '&category=' + category + '&search=' + search + '&page=' + page; } if (barcode && mpn && asin && productName && category && search) { url += 'key=' + key + '&barcode=' + barcode + '&mpn=' + mpn + '&asin=' + asin + '&productName=' + productName + '&category=' + category + '&search=' + search; } if (barcode && mpn && asin && productName && category) { url += 'key=' + key + '&barcode=' + barcode + '&mpn=' + mpn + '&asin=' + asin + '&productName=' + productName + '&category=' + category; } if (barcode && mpn && asin && productName) { url += 'key=' + key + '&barcode=' + barcode + '&mpn=' + mpn + '&asin=' + asin + '&productName=' + productName; } if (barcode && mpn && asin) { url += 'key=' + key + '&barcode=' + barcode + '&mpn=' + mpn + '&asin=' + asin; } if (barcode && mpn) { url += 'key=' + key + '&barcode=' + barcode + '&mpn=' + mpn; } if (barcode) { url += 'key=' + key + '&barcode=' + barcode; } return fetch(url) .then((response) => { switch (response.status) { case 200: return Promise.all([response.status, response.json()]); break; default: return Promise.all([ response.status, response.statusText ]); } }) .then((res) => { return { statusCode: res[0], data: res[1] }; }) .catch((error) => { return { statusCode: 400, data: error }; }); } };