UNPKG

@airbrake/browser

Version:
94 lines 2.94 kB
import Promise from 'promise-polyfill'; import { errors } from './api'; export function makeRequester(api) { return function (req) { return request(req, api); }; } var rateLimitReset = 0; function request(req, api) { var utime = Date.now() / 1000; if (utime < rateLimitReset) { return Promise.reject(errors.ipRateLimited); } return new Promise(function (resolve, reject) { api({ url: req.url, method: req.method, body: req.body, headers: { 'content-type': 'application/json', }, timeout: req.timeout, }, function (error, resp, body) { if (error) { reject(error); return; } if (!resp.statusCode) { error = new Error("airbrake: request: response statusCode is ".concat(resp.statusCode)); reject(error); return; } if (resp.statusCode === 401) { reject(errors.unauthorized); return; } if (resp.statusCode === 429) { reject(errors.ipRateLimited); var h = resp.headers['x-ratelimit-delay']; if (!h) { return; } var s = void 0; if (typeof h === 'string') { s = h; } else if (h instanceof Array) { s = h[0]; } else { return; } var n = parseInt(s, 10); if (n > 0) { rateLimitReset = Date.now() / 1000 + n; } return; } if (resp.statusCode === 204) { resolve({ json: null }); return; } if (resp.statusCode >= 200 && resp.statusCode < 300) { var json = void 0; try { json = JSON.parse(body); } catch (err) { reject(err); return; } resolve(json); return; } if (resp.statusCode >= 400 && resp.statusCode < 500) { var json = void 0; try { json = JSON.parse(body); } catch (err) { reject(err); return; } error = new Error(json.message); reject(error); return; } body = body.trim(); error = new Error("airbrake: node: unexpected response: code=".concat(resp.statusCode, " body='").concat(body, "'")); reject(error); }); }); } //# sourceMappingURL=node.js.map