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}`; }