UNPKG

bkash

Version:

bKash API client for Browser & Node.js

70 lines (53 loc) 1.48 kB
const fetch = require('node-fetch') const debug = require('debug')('bKash') const BKashError = require('../bkash-error.js') // const BKashErrorCodes = require('../bkash-error-codes.json') const getResponseData = res => { const contentType = res.headers.get('content-type') return /application\/json/.test(contentType) ? res.json() : res.text() } const responseFormatter = res => { const Response = { headers: {}, meta: {} } for (let [field, value] of res.headers.entries()) { Response.headers[field] = value } Response.meta.status = res.status if (res.status === 204) { return Response } return getResponseData(res).then(responseData => { if (res.status >= 500) { throw new BKashError(responseData, Response.meta, Response.headers) } if (res.status >= 400) { Response.error = responseData } else { Response.data = responseData } return Response }) } const request = requestOptions => { debug('requestOptions:', requestOptions) let { method, url, headers, body, ...otherOptions } = requestOptions // https://fetch.spec.whatwg.org/#methods method = method.toUpperCase() const options = { method, headers, body, ...otherOptions } return fetch(url, options) .then(responseFormatter) .catch(error => { if (error instanceof BKashError) { throw error } throw new BKashError(error.message) }) } module.exports = request