UNPKG

rollbar

Version:

Effortlessly track and debug errors in your JavaScript applications with Rollbar. This package includes advanced error tracking features and an intuitive interface to help you identify and fix issues more quickly.

138 lines (123 loc) 3.39 kB
import { Buffer } from 'buffer/'; import logger from '../logger.js'; import * as _ from '../utility.js'; function Transport(truncation) { this.rateLimitExpires = 0; this.truncation = truncation; } Transport.prototype.get = function (accessToken, options, params, callback) { if (!callback || !_.isFunction(callback)) { callback = () => {}; } options = options || {}; _.addParamsAndAccessTokenToPath(accessToken, options, params); var headers = _headers(accessToken, options); fetch(_.formatUrl(options), { method: 'GET', headers: headers, }) .then(function (resp) { _handleResponse(resp, callback); }) .catch(function (err) { callback(err); }); }; Transport.prototype.post = function (accessToken, options, payload, callback) { if (!callback || !_.isFunction(callback)) { callback = () => {}; } options = options || {}; if (!payload) { return callback(new Error('Cannot send empty request')); } var stringifyResult; if (this.truncation) { stringifyResult = this.truncation.truncate(payload); } else { stringifyResult = _.stringify(payload); } if (stringifyResult.error) { logger.error('Problem stringifying payload. Giving up'); return callback(stringifyResult.error); } var writeData = stringifyResult.value; var headers = _headers(accessToken, options, writeData); _makeRequest(headers, options, writeData, callback); }; Transport.prototype.postJsonPayload = function ( accessToken, options, jsonPayload, callback, ) { if (!callback || !_.isFunction(callback)) { callback = () => {}; } options = options || {}; if (!jsonPayload) { return callback(new Error('Cannot send empty request')); } var headers = _headers(accessToken, options, jsonPayload); _makeRequest(headers, options, jsonPayload, callback); }; /** Helpers **/ function _makeRequest(headers, options, data, callback) { var url = _.formatUrl(options); fetch(url, { method: 'POST', headers: headers, body: data, }) .then(function (resp) { return resp.json(); }) .then(function (data) { _handleResponse(data, _wrapPostCallback(callback)); }) .catch(function (err) { callback(err); }); } function _headers(accessToken, options, data) { var headers = (options && options.headers) || {}; headers['Content-Type'] = 'application/json'; if (data) { try { headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); } catch (_e) { logger.error('Could not get the content length of the data'); } } headers['X-Rollbar-Access-Token'] = accessToken; return headers; } function _handleResponse(data, callback) { if (data.err) { logger.error('Received error: ' + data.message); return callback( new Error('Api error: ' + (data.message || 'Unknown error')), ); } callback(null, data); } function _wrapPostCallback(callback) { return function (err, data) { if (err) { return callback(err); } if (data.result && data.result.uuid) { logger.log( [ 'Successful api response.', ' Link: https://rollbar.com/occurrence/uuid/?uuid=' + data.result.uuid, ].join(''), ); } else { logger.log('Successful api response'); } callback(null, data.result); }; } export default Transport;