From 25bcb849b14b8255ab31a7b60dccc898d7d82412 Mon Sep 17 00:00:00 2001 From: spalger Date: Thu, 15 Apr 2021 08:45:23 -0700 Subject: [PATCH] [kbnClient] fix basePath handling and export reponse type --- .../src/kbn_client/kbn_client_import_export.ts | 1 + .../src/kbn_client/kbn_client_requester.ts | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts b/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts index bb5b99fdc4439..7f4d0160923bf 100644 --- a/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts +++ b/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts @@ -115,6 +115,7 @@ export class KbnClientImportExport { excludeExportDetails: true, includeReferencesDeep: true, }, + responseType: 'text', }); if (typeof resp.data !== 'string') { diff --git a/packages/kbn-test/src/kbn_client/kbn_client_requester.ts b/packages/kbn-test/src/kbn_client/kbn_client_requester.ts index 2e1575aee1897..31cd3a6899568 100644 --- a/packages/kbn-test/src/kbn_client/kbn_client_requester.ts +++ b/packages/kbn-test/src/kbn_client/kbn_client_requester.ts @@ -10,7 +10,7 @@ import Url from 'url'; import Https from 'https'; import Qs from 'querystring'; -import Axios, { AxiosResponse } from 'axios'; +import Axios, { AxiosResponse, ResponseType } from 'axios'; import { ToolingLog, isAxiosRequestError, isAxiosResponseError } from '@kbn/dev-utils'; const isConcliftOnGetError = (error: any) => { @@ -53,6 +53,7 @@ export interface ReqOptions { body?: any; retries?: number; headers?: Record; + responseType?: ResponseType; } const delay = (ms: number) => @@ -84,11 +85,16 @@ export class KbnClientRequester { } public resolveUrl(relativeUrl: string = '/') { - return Url.resolve(this.pickUrl(), relativeUrl); + let baseUrl = this.pickUrl(); + if (!baseUrl.endsWith('/')) { + baseUrl += '/'; + } + const relative = relativeUrl.startsWith('/') ? relativeUrl.slice(1) : relativeUrl; + return Url.resolve(baseUrl, relative); } async request(options: ReqOptions): Promise> { - const url = Url.resolve(this.pickUrl(), options.path); + const url = this.resolveUrl(options.path); const description = options.description || `${options.method} ${url}`; let attempt = 0; const maxAttempts = options.retries ?? DEFAULT_MAX_ATTEMPTS; @@ -107,6 +113,9 @@ export class KbnClientRequester { 'kbn-xsrf': 'kbn-client', }, httpsAgent: this.httpsAgent, + responseType: options.responseType, + // work around https://github.com/axios/axios/issues/2791 + transformResponse: options.responseType === 'text' ? [(x) => x] : undefined, paramsSerializer: (params) => Qs.stringify(params), });