import SwaggerClient = require('swagger-client');
export let FormsApiClient: any = {};
/**
* Starts the typed API client.
*/
export async function startFormsClient(swaggerDocUrl: string) {
FormsApiClient = await new SwaggerClient({
url: swaggerDocUrl,
usePromise: true,
requestInterceptor: { apply: (req: any) => requestHandler(req) }
});
}
function requestHandler(req: any) {
const initialError = req.on.error;
req.on.error = failHandler(initialError);
}
function failHandler(oldErrorFn: any) {
return (res: any) => {
if (res.status === 0) {
console.log('The server didn\'t respond to the last request. It might be offline.');
return;
}
if (res.status === 500) {
let details = getDetails(res);
console.log(res);
return;
}
oldErrorFn(res);
};
}
function getDetails(res: any) {
if (!res.obj.errors) {
return res.obj.exceptionMessage
}
if (res.obj.errors.every((x: any) => !!x.debugException)) {
return res.obj
.errors
.map(prettyPrint)
.join('
');
}
return res.obj.errors.map((e: any) => e.detail).join('
');
}
function prettyPrint(e: any) {
const message = e.debugException.Message;
const stackTrace = e.debugException.StackTraceString.replace(/(?:\r\n|\r|\n)/g, '
');
return `${message}
${stackTrace}`;
}