UNPKG

@ringmybelle/taxjar

Version:
66 lines (65 loc) 3.38 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const node_fetch_1 = require("node-fetch"); const types_1 = require("./types"); const os = require('os'); const proxyError = (result) => { const isTaxjarError = result.statusCode && result.error && result.error.error && result.error.detail; if (isTaxjarError) { throw new types_1.TaxjarError(result.error.error, result.error.detail, result.statusCode); } throw result; }; const getUserAgent = () => { const platform = os.version && os.version() || process.platform; const arch = os.arch(); const nodeVersion = `${process.release.name} ${process.versions.node}`; const openSslVersion = `OpenSSL/${process.versions.openssl}`; const pkgVersion = `taxjar-node/${require('../../package.json').version}`; return `TaxJar/Node (${[platform, arch, nodeVersion, openSslVersion].join('; ')}) ${pkgVersion}`; }; exports.default = (config) => { const defaultOptions = { headers: Object.assign({}, config.headers || {}, { Authorization: `Bearer ${config.apiKey}`, 'Content-Type': 'application/json', 'User-Agent': getUserAgent() }), }; const getRequestBodyOptions = (body) => (Object.assign(Object.assign({}, defaultOptions), { body: JSON.stringify(body) })); const makeRequest = (url, method, queryParams, options) => __awaiter(void 0, void 0, void 0, function* () { const requestUrl = new URL(url, config.apiUrl); if (queryParams) { requestUrl.search = new URLSearchParams(queryParams).toString(); } const response = yield (0, node_fetch_1.default)(requestUrl, Object.assign({ method }, options)); if (!response.ok) { const errorResponse = yield response.text(); const errorResult = { statusCode: response.status, error: errorResponse }; try { // if there's JSON, attempt to parse it errorResult.error = JSON.parse(errorResponse); } catch (err) { // otherwise just use the raw text } proxyError(errorResult); } return response.json(); }); return { get: ({ url, params }) => makeRequest(url, 'GET', params, defaultOptions).catch(proxyError), post: ({ url, params }) => makeRequest(url, 'POST', undefined, getRequestBodyOptions(params)).catch(proxyError), put: ({ url, params }) => makeRequest(url, 'PUT', undefined, getRequestBodyOptions(params)).catch(proxyError), delete: ({ url, params }) => makeRequest(url, 'DELETE', params, defaultOptions).catch(proxyError) }; };