import type { ClientRequestArgs } from 'http'; import type { ClientRequestMaker } from '../client-mixins/request-maker.mixin'; import { ApiPartialResponseError, ApiRequestError, ApiResponseError, IGetHttpRequestArgs, TwitterApiPluginResponseOverride } from '../types'; import type { IComputedHttpRequestArgs } from '../types/request-maker.mixin.types'; /* Plugin helpers */ export function hasRequestErrorPlugins(client: ClientRequestMaker) { if (!client.clientSettings.plugins?.length) { return false; } for (const plugin of client.clientSettings.plugins) { if (plugin.onRequestError || plugin.onResponseError) { return true; } } return false; } export async function applyResponseHooks( this: ClientRequestMaker, requestParams: IGetHttpRequestArgs, computedParams: IComputedHttpRequestArgs, requestOptions: Partial<ClientRequestArgs>, error: any, ) { let override: TwitterApiPluginResponseOverride | undefined; if (error instanceof ApiRequestError || error instanceof ApiPartialResponseError) { override = await this.applyPluginMethod('onRequestError', { client: this, url: this.getUrlObjectFromUrlString(requestParams.url), params: requestParams, computedParams, requestOptions, error, }); } else if (error instanceof ApiResponseError) { override = await this.applyPluginMethod('onResponseError', { client: this, url: this.getUrlObjectFromUrlString(requestParams.url), params: requestParams, computedParams, requestOptions, error, }); } if (override && override instanceof TwitterApiPluginResponseOverride) { return override.value; } return Promise.reject(error); }