@case-contract-testing/case
Version:
Next-generation contract testing suite
44 lines (43 loc) • 2.15 kB
JavaScript
;
// This module knows how to turn axios responses into
// the relevant response objects or errors
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.unmarshallFailure = exports.unmarshallSuccess = void 0;
const axios_1 = __importDefault(require("axios"));
const apiErrors_1 = require("./apiErrors");
const unmarshallSuccess = (response) => response.data;
exports.unmarshallSuccess = unmarshallSuccess;
const unmarshallFailure = (error) => {
if (axios_1.default.isAxiosError(error)) {
if (error.response) {
if (error.response.status === 403) {
throw new apiErrors_1.BrokerError(`The access token you provided was rejected by the broker`, apiErrors_1.API_NOT_AUTHORISED);
}
if (error.response.data && error.response.data.errors) {
let errorMessage;
try {
errorMessage = [
`The broker returned an error code (${error.response.status})`,
]
.concat(Object.entries(error.response.data.errors)
.map(([k, v]) => v.map((message) => `Error in field '${k}': ${message}`))
.flat())
.join('\n');
}
catch {
errorMessage = `The broker returned an error code (${error.response.status}), and failed to parse the error response`;
}
throw new apiErrors_1.BrokerError(errorMessage);
}
throw new apiErrors_1.BrokerError(`The broker returned an error code (${error.response.status}): ${JSON.stringify(error.response.data)}`, apiErrors_1.API_ERROR);
}
if (error.request) {
throw new apiErrors_1.BrokerError(`The server didn't respond: ${error.message} `, apiErrors_1.API_NO_RESPONSE);
}
}
throw new Error(`[API Failed] ${error.message}`);
};
exports.unmarshallFailure = unmarshallFailure;