Skip to content

Commit

Permalink
fix: Some HTTP requests sent by apps don't have their data parsed int…
Browse files Browse the repository at this point in the history
…o JSON (#30560)
  • Loading branch information
d-gubert authored and debdutdeb committed Oct 26, 2023
1 parent 062d1dc commit 4d25f11
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 21 deletions.
5 changes: 5 additions & 0 deletions .changeset/stale-masks-learn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@rocket.chat/server-fetch': patch
---

Fixed an issue where the payload of an HTTP request made by an app wouldn't be correctly encoded in some cases
30 changes: 9 additions & 21 deletions packages/server-fetch/src/parsers.ts
Original file line number Diff line number Diff line change
@@ -1,32 +1,20 @@
import type { ExtendedFetchOptions, FetchOptions, OriginalFetchOptions } from './types';

function isPostOrPutOrDeleteWithBody(options?: ExtendedFetchOptions): boolean {
// No method === 'get'
if (!options?.method) {
return false;
}
const { method, body } = options;
const lowerMethod = method?.toLowerCase();
return ['post', 'put', 'delete'].includes(lowerMethod) && body != null;
}

const jsonParser = (options: ExtendedFetchOptions) => {
if (!options) {
return {};
}

if (isPostOrPutOrDeleteWithBody(options)) {
try {
if (options && typeof options.body === 'object' && !Buffer.isBuffer(options.body)) {
options.body = JSON.stringify(options.body);
options.headers = {
'Content-Type': 'application/json',
...options.headers,
};
}
} catch (e) {
// Body is not JSON, do nothing
try {
if (typeof options.body === 'object' && !Buffer.isBuffer(options.body)) {
options.body = JSON.stringify(options.body);
options.headers = {
...options.headers,
'Content-Type': 'application/json', // force content type to be json
};
}
} catch (e) {
// Body is not JSON, do nothing
}

return options as FetchOptions;
Expand Down

0 comments on commit 4d25f11

Please sign in to comment.