backtrace-node
Version:
Backtrace error reporting tool
127 lines • 4.38 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var axios_1 = tslib_1.__importDefault(require("axios"));
var crypto_1 = tslib_1.__importDefault(require("crypto"));
/**
* Generate a UUID
*/
function uuid() {
var uuidArray = new Uint8Array(16);
crypto_1.default.randomFillSync(uuidArray);
var hexStr = function (b) {
var s = b.toString(16);
return b < 0x10 ? '0' + s : s;
};
var result = '';
var i = 0;
for (; i < 4; i += 1) {
result += hexStr(uuidArray[i]);
}
result += '-';
for (; i < 6; i += 1) {
result += hexStr(uuidArray[i]);
}
result += '-';
for (; i < 8; i += 1) {
result += hexStr(uuidArray[i]);
}
result += '-';
for (; i < 10; i += 1) {
result += hexStr(uuidArray[i]);
}
result += '-';
for (; i < 16; i += 1) {
result += hexStr(uuidArray[i]);
}
return result;
}
exports.uuid = uuid;
/**
* Current unix time in seconds.
*/
function currentTimestamp(millis) {
if (millis === void 0) { millis = false; }
return Math.floor(new Date().getTime() / (millis ? 1 : 1000));
}
exports.currentTimestamp = currentTimestamp;
/**
* Get universe and token from the endpoint.
*/
function getEndpointParams(endpoint, token) {
if (!endpoint) {
return undefined;
}
if (endpoint.indexOf('submit.backtrace.io') !== -1) {
var positionFilter = 'backtrace.io/';
var startPosition = endpoint.indexOf('backtrace.io/') + positionFilter.length;
if (startPosition === -1) {
return undefined;
}
var indexOfTheEndOfTheUniverseName = endpoint.indexOf('/', startPosition);
if (indexOfTheEndOfTheUniverseName === -1) {
return undefined;
}
var universeName = endpoint.substring(startPosition, indexOfTheEndOfTheUniverseName);
if (!token) {
var lastSeparatorIndex = endpoint.lastIndexOf('/');
if (lastSeparatorIndex === indexOfTheEndOfTheUniverseName) {
return undefined;
}
token = endpoint.substring(indexOfTheEndOfTheUniverseName + 1, lastSeparatorIndex);
if (!token || token.length !== 64) {
return undefined;
}
}
return { universe: universeName, token: token };
}
var backtraceSubmissionUrl = new URL(endpoint).hostname;
var firstSeparatorIndex = backtraceSubmissionUrl.indexOf('.');
// unvalid submission URL
if (firstSeparatorIndex === -1) {
return undefined;
}
return {
token: token,
universe: backtraceSubmissionUrl.substring(0, firstSeparatorIndex),
};
}
exports.getEndpointParams = getEndpointParams;
/**
* Send POST request.
* @param url - string endpoint
* @param data - JSON Object.
*/
function post(url, data, options) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var DEFAULT_TIMEOUT, defaultOptions, res, err_1;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
DEFAULT_TIMEOUT = 15000;
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
defaultOptions = {
headers: {
'Content-Type': 'application/json',
},
timeout: DEFAULT_TIMEOUT,
};
return [4 /*yield*/, axios_1.default.post(url, data, tslib_1.__assign(tslib_1.__assign({}, defaultOptions), options))];
case 2:
res = _a.sent();
if (res.status !== 200) {
return [2 /*return*/, Promise.reject(new Error("Invalid attempt to submit error to Backtrace. Result: " + res))];
}
return [2 /*return*/];
case 3:
err_1 = _a.sent();
return [2 /*return*/, Promise.reject(err_1)];
case 4: return [2 /*return*/];
}
});
});
}
exports.post = post;
//# sourceMappingURL=index.js.map
;