Skip to content

Commit e9096ea

Browse files
fix(common): url and param encoding (hoppscotch#5041)
1 parent b6e2e93 commit e9096ea

File tree

1 file changed

+29
-6
lines changed

1 file changed

+29
-6
lines changed

packages/hoppscotch-common/src/helpers/functional/process-request.ts

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,29 @@ const processParams = (params: [string, string][]): [string, string][] => {
3434
const isEncodingRequired =
3535
encodeMode === "enable" || (encodeMode === "auto" && needsEncoding(value))
3636

37-
const encodedKey = isEncodingRequired ? encodeParam(key) : key
3837
const encodedValue = isEncodingRequired ? encodeParam(value) : value
3938

40-
return [encodedKey, encodedValue]
39+
return [key, encodedValue]
4140
})
4241
}
4342

43+
const buildQueryString = (params: [string, string][]): string =>
44+
params.map(([k, v]) => `${encodeURIComponent(k)}=${v}`).join("&")
45+
46+
const combineWithExistingSearch = (urlObj: URL, queryString: string): URL => {
47+
const existingSearch =
48+
urlObj.search.length > 1 ? urlObj.search.substring(1) : ""
49+
50+
urlObj.search = pipe(
51+
existingSearch,
52+
O.fromPredicate((s) => s.length > 0),
53+
O.map((s) => `${s}&${queryString}`),
54+
O.getOrElse(() => queryString)
55+
)
56+
57+
return urlObj
58+
}
59+
4460
const updateUrl = (
4561
url: string,
4662
params: [string, string][]
@@ -50,10 +66,17 @@ const updateUrl = (
5066
() => new URL(url),
5167
(e) => new Error(`Invalid URL: ${e}`)
5268
),
53-
E.map((u) => {
54-
processParams(params).forEach(([k, v]) => u.searchParams.append(k, v))
55-
return decodeURIComponent(u.toString())
56-
})
69+
E.map((urlObj) => {
70+
const processedParams = processParams(params)
71+
72+
if (processedParams.length > 0) {
73+
const queryString = buildQueryString(processedParams)
74+
return combineWithExistingSearch(urlObj, queryString)
75+
}
76+
77+
return urlObj
78+
}),
79+
E.map((u) => u.toString())
5780
)
5881

5982
export const preProcessRelayRequest = (req: RelayRequest): RelayRequest =>

0 commit comments

Comments
 (0)