From 33e2afab7b8f0b20a9adcc5000f898192026790e Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Mon, 16 Aug 2021 07:12:22 +0530 Subject: [PATCH] feat: send formdata over network --- helpers/network.ts | 1 + helpers/utils/EffectiveURL.ts | 40 ++++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/helpers/network.ts b/helpers/network.ts index 6fe523336..add0106f1 100644 --- a/helpers/network.ts +++ b/helpers/network.ts @@ -71,6 +71,7 @@ export function createRESTNetworkRequestStream( url: req.effectiveFinalURL, headers, params, + data: req.effectiveFinalBody, }) .then((res: any) => { const timeEnd = Date.now() diff --git a/helpers/utils/EffectiveURL.ts b/helpers/utils/EffectiveURL.ts index 7b21a4d2d..68463e3c3 100644 --- a/helpers/utils/EffectiveURL.ts +++ b/helpers/utils/EffectiveURL.ts @@ -1,6 +1,6 @@ import { combineLatest, Observable } from "rxjs" import { map } from "rxjs/operators" -import { HoppRESTRequest } from "../types/HoppRESTRequest" +import { FormDataKeyValue, HoppRESTRequest } from "../types/HoppRESTRequest" import parseTemplateString from "../templating" import { Environment } from "~/newstore/environments" @@ -13,6 +13,36 @@ export interface EffectiveHoppRESTRequest extends HoppRESTRequest { effectiveFinalURL: string effectiveFinalHeaders: { key: string; value: string }[] effectiveFinalParams: { key: string; value: string }[] + effectiveFinalBody: FormData | string +} + +function getFinalBodyFromRequest( + request: HoppRESTRequest, + env: Environment +): FormData | string { + if (request.body.contentType === "multipart/form-data") { + const formData = new FormData() + + request.body.body + .filter((x) => x.key !== "" && x.active) // Remove empty keys + .map( + (x) => + { + active: x.active, + isFile: x.isFile, + key: parseTemplateString(x.key, env.variables), + value: x.isFile + ? x.value + : parseTemplateString(x.value, env.variables), + } + ) + .forEach((entry) => { + if (!entry.isFile) formData.append(entry.key, entry.value) + else entry.value.forEach((blob) => formData.append(entry.key, blob)) + }) + + return formData + } else return request.body.body } /** @@ -60,6 +90,13 @@ export function getEffectiveRESTRequest( } } + const effectiveFinalBody = getFinalBodyFromRequest(request, environment) + effectiveFinalHeaders.push({ + active: true, + key: "content-type", + value: request.body.contentType, + }) + return { ...request, effectiveFinalURL: parseTemplateString( @@ -78,6 +115,7 @@ export function getEffectiveRESTRequest( key: parseTemplateString(x.key, environment.variables), value: parseTemplateString(x.value, environment.variables), })), + effectiveFinalBody, } }