From a1495964d7c5f8d11d448615eb89302b4e95a14d Mon Sep 17 00:00:00 2001 From: Konrad Dysput Date: Wed, 3 Jan 2024 15:06:05 +0100 Subject: [PATCH 1/2] set transfer encoding to chunked --- packages/react-native/src/ReactNativeRequestHandler.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/react-native/src/ReactNativeRequestHandler.ts b/packages/react-native/src/ReactNativeRequestHandler.ts index a12d2793..18ea6618 100644 --- a/packages/react-native/src/ReactNativeRequestHandler.ts +++ b/packages/react-native/src/ReactNativeRequestHandler.ts @@ -13,6 +13,9 @@ export class ReactNativeRequestHandler implements BacktraceRequestHandler { private readonly JSON_HEADERS = { 'Content-type': 'application/json', }; + private readonly MULTIPART_HEADERS = { + 'Transfer-Encoding': 'chunked', + }; constructor( private readonly _options: { @@ -45,7 +48,7 @@ export class ReactNativeRequestHandler implements BacktraceRequestHandler { const response = await fetch(submissionUrl, { method: 'POST', body: payload, - headers: typeof payload === 'string' ? this.JSON_HEADERS : {}, + headers: typeof payload === 'string' ? this.JSON_HEADERS : this.MULTIPART_HEADERS, signal: anySignal(abortSignal, controller.signal), }); From 89a05f347758637dad27a36295bee33232ddcb95 Mon Sep 17 00:00:00 2001 From: Konrad Dysput Date: Wed, 3 Jan 2024 15:20:16 +0100 Subject: [PATCH 2/2] Avoid creating form data when no attachments are available --- .../src/ReactNativeRequestHandler.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/react-native/src/ReactNativeRequestHandler.ts b/packages/react-native/src/ReactNativeRequestHandler.ts index 18ea6618..cfc27613 100644 --- a/packages/react-native/src/ReactNativeRequestHandler.ts +++ b/packages/react-native/src/ReactNativeRequestHandler.ts @@ -32,8 +32,8 @@ export class ReactNativeRequestHandler implements BacktraceRequestHandler { attachments: BacktraceAttachment[], abortSignal?: AbortSignal, ): Promise> { - const formData = this.createFormData(dataJson, attachments); - return this.post(submissionUrl, formData, abortSignal); + const payload = this.createSubmissionPayload(dataJson, attachments); + return this.post(submissionUrl, payload, abortSignal); } public async post( @@ -86,13 +86,15 @@ export class ReactNativeRequestHandler implements BacktraceRequestHandler { } } - private createFormData(json: string, attachments: BacktraceAttachment[]) { - const formData = new FormData(); - formData.append(this.UPLOAD_FILE_NAME, json); - + private createSubmissionPayload( + json: string, + attachments: BacktraceAttachment[], + ): FormData | string { if (!attachments || attachments.length === 0) { - return formData; + return json; } + const formData = new FormData(); + formData.append(this.UPLOAD_FILE_NAME, json); for (const attachment of attachments) { const data = attachment.get(); if (!data) {