UNPKG

@bitmovin/api-sdk

Version:

Bitmovin JS/TS API SDK

102 lines (101 loc) 4.34 kB
"use strict"; 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; }