UNPKG

amocrm-client

Version:
44 lines (41 loc) 1.54 kB
import { EventEmitter } from "./EventEmitter"; import { IAPIResponse, IAPIResponseErrorValue, IResponseParser } from "../interfaces/common"; import APIResponseError from "./APIResponseError"; /** * Преобразует ответ портала в JSON-объект * */ export default class JSONResponseParser extends EventEmitter implements IResponseParser<string> { parse<T>(apiResponse: IAPIResponse<string>): IAPIResponse<T> { const { response } = apiResponse; if (!apiResponse.data) { const data = <T>{}; return { response, data }; } let data: T; try { data = <T>JSON.parse(apiResponse.data); } catch (e) { throw new APIResponseError<T>('JSON_PARSE_ERROR', null, apiResponse); } this.checkErrors(data, apiResponse); return { response, data }; } checkErrors<T>(data: T | IAPIResponseErrorValue, apiResponse: IAPIResponse<string>) { if (!data) { throw new Error('NO_JSON_RESPONSE'); } if (typeof data !== 'object') { throw new Error('INVALID_JSON_RESPONSE'); } if ('status' in data) { if ((data as IAPIResponseErrorValue).status === 401) throw new APIResponseError('API_OAUTH_ERROR', data, apiResponse); throw new APIResponseError('API_RESPONSE_ERROR', data, apiResponse); } } }