From a13584104347361284a84b2859c134cf8c05c4de Mon Sep 17 00:00:00 2001 From: Justin Date: Sat, 15 Jun 2019 18:23:25 -0400 Subject: [PATCH] fix: Handle body types properly if not JSON ie formData fixes: #355 --- src/infrastructure/KyRequester.ts | 7 ++++++- src/services/ProjectImportExport.ts | 4 ++-- src/services/Projects.ts | 4 ++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/infrastructure/KyRequester.ts b/src/infrastructure/KyRequester.ts index ec8083b6..986748de 100644 --- a/src/infrastructure/KyRequester.ts +++ b/src/infrastructure/KyRequester.ts @@ -1,4 +1,5 @@ import Ky from 'ky-universal'; +import FormData from 'form-data'; import { decamelizeKeys } from 'humps'; import { stringify } from 'query-string'; import { skipAllCaps } from './Utils'; @@ -22,6 +23,10 @@ function defaultRequest(service: any, { body, query, sudo, method }) { const headers = new Headers(service.headers); if (sudo) headers.append('sudo', `${sudo}`); + + if (typeof body === 'object' && !(body instanceof FormData)){ + body = JSON.stringify(decamelizeKeys(body, skipAllCaps)); + } return { timeout: service.requestTimeout, @@ -30,7 +35,7 @@ function defaultRequest(service: any, { body, query, sudo, method }) { onProgress: (method === 'stream') ? () => {} : undefined, searchParams: stringify(decamelizeKeys(query || {}) as any, { arrayFormat: 'bracket' }), prefixUrl: service.url, - json: typeof body === 'object' ? decamelizeKeys(body, skipAllCaps) : body, + body, rejectUnauthorized: service.rejectUnauthorized, } } diff --git a/src/services/ProjectImportExport.ts b/src/services/ProjectImportExport.ts index d9e8db76..e60e2d41 100644 --- a/src/services/ProjectImportExport.ts +++ b/src/services/ProjectImportExport.ts @@ -15,7 +15,7 @@ class ProjectImportExport extends BaseService { return RequestHelper.get(this, `projects/${pId}/export`, options); } - import(content: string, path: string, options?: Sudo) { + import(content: string, path: string) { const form = new FormData(); form.append('file', content, { @@ -23,7 +23,7 @@ class ProjectImportExport extends BaseService { contentType: 'application/octet-stream', }); - return RequestHelper.post(this, 'projects/import', { ...options, form }); + return RequestHelper.post(this, 'projects/import', form); } importStatus(projectId: ProjectId, options?: Sudo) { diff --git a/src/services/Projects.ts b/src/services/Projects.ts index ec7df3d0..e7912f61 100644 --- a/src/services/Projects.ts +++ b/src/services/Projects.ts @@ -131,7 +131,7 @@ class Projects extends BaseService { return RequestHelper.put(this, `projects/${pId}/push_rule`, options); } - upload(projectId, content, metadata: ProjectUploadMetadata = {}, options?: Sudo) { + upload(projectId, content, metadata: ProjectUploadMetadata = {}) { const pId = encodeURIComponent(projectId); const form = new FormData(); @@ -142,7 +142,7 @@ class Projects extends BaseService { form.append('file', content, Object.assign(defaultMetadata, metadata)); - return RequestHelper.post(this, `projects/${pId}/uploads`, { ...options, form }); + return RequestHelper.post(this, `projects/${pId}/uploads`, form); } }