@bitmovin/api-sdk
Version:
Bitmovin JS/TS API SDK
102 lines (101 loc) • 4.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildBitmovinError = buildBitmovinError;
exports.buildBitmovinErrorFromError = buildBitmovinErrorFromError;
const BitmovinError_1 = require("./BitmovinError");
function appendLine(message, messageToAppend) {
return `${message}${messageToAppend}\n`;
}
function getShortMessage(additionalInfo, errorResponse) {
let shortMessage = `Request failed: ${additionalInfo}`;
if (errorResponse !== undefined && errorResponse.data !== undefined && errorResponse.data.message !== undefined) {
shortMessage = errorResponse.data.message;
}
return shortMessage;
}
function buildBitmovinDetailMessage(details) {
let message = appendLine('', ` - id: ${details.id}`);
message = appendLine(message, ` date: ${details.date}`);
message = appendLine(message, ` type: ${details.type}`);
message = appendLine(message, ` text: ${details.text}`);
return details.field == undefined ? message : appendLine(message, ` field: ${details.field}`);
}
function appendRequestMessage(request) {
let message = appendLine('', `request:`);
message = appendLine(message, ` method: ${request.method}`);
message = appendLine(message, ` url: ${request.url}`);
return request.body == undefined ? message : appendLine(message, ` body: ${request.body}`);
}
function appendResponseMessage(response, errorResponse) {
let message = appendLine('', `response:`);
message = appendLine(message, ` httpStatusCode: ${response.status}`);
if (errorResponse) {
let body = errorResponse;
if (!(typeof body === 'string' || body instanceof String)) {
body = JSON.stringify(body);
message = appendLine(message, ` body: ${body}`);
}
}
return message;
}
function buildDetails(details) {
let message = appendLine('', 'details:');
for (const detail of Object.keys(details)) {
message += buildBitmovinDetailMessage(details[detail]);
}
return message;
}
function buildLinks(links) {
let message = appendLine('', 'links:');
for (const link of Object.keys(links)) {
message = appendLine(message, ` ${links[link].title} ${links[link].href}`);
}
return message;
}
function buildBitmovinError(additionalInfo, request, response, errorResponse, error) {
let code;
let details;
let developerMessage;
let links;
let requestId;
const shortMessage = getShortMessage(additionalInfo, errorResponse);
let message = appendLine('', shortMessage);
if (errorResponse !== undefined && errorResponse.data !== undefined) {
const data = errorResponse.data;
developerMessage = data.developerMessage;
code = data.code;
requestId = errorResponse.requestId;
message = appendLine(message, `developerMessage: ${data.developerMessage}`);
message = appendLine(message, `errorCode: ${data.code}`);
if (Array.isArray(data.details)) {
details = data.details;
message += buildDetails(details);
}
if (Array.isArray(data.links)) {
links = data.links;
message += buildLinks(links);
}
}
message += appendRequestMessage(request);
message += appendResponseMessage(response, errorResponse);
const bitmovinError = new BitmovinError_1.default(message, response.status, shortMessage, developerMessage, requestId, code, details, links);
if (error && error.stack) {
bitmovinError.stack = error.stack;
}
return bitmovinError;
}
function buildBitmovinErrorFromError(request, error) {
// The native fetch surfaces low-level network failures as a generic
// 'fetch failed'/'terminated' message and carries the actual reason on
// 'error.cause'. Surface that cause so the message stays informative.
const cause = error.cause;
const reason = cause && cause.message ? `${error.message}: ${cause.message}` : error.message;
const shortMessage = `Request failed: ${reason}`;
let message = appendLine('', shortMessage);
message += appendRequestMessage(request);
const bitmovinError = new BitmovinError_1.default(message, 0, shortMessage, shortMessage);
if (error.stack) {
bitmovinError.stack = error.stack;
}
return bitmovinError;
}