1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-08-07 23:02:56 +03:00

Filter out falsey opts in /relations API hits (#2059)

This commit is contained in:
Michael Telatynski
2021-12-13 15:38:03 +00:00
committed by GitHub
parent 6244d77d44
commit 169b6b5572
4 changed files with 20 additions and 8 deletions

View File

@@ -26,6 +26,15 @@ describe("utils", function() {
"foo=bar&baz=beer%40", "foo=bar&baz=beer%40",
); );
}); });
it("should handle boolean and numeric values", function() {
const params = {
string: "foobar",
number: 12345,
boolean: false,
};
expect(utils.encodeParams(params)).toEqual("string=foobar&number=12345&boolean=false");
});
}); });
describe("encodeUri", function() { describe("encodeUri", function() {

View File

@@ -143,7 +143,7 @@ export interface IBindThreePidBody {
export interface IRelationsRequestOpts { export interface IRelationsRequestOpts {
from?: string; from?: string;
to?: string; to?: string;
limit?: string; limit?: number;
} }
export interface IRelationsResponse { export interface IRelationsResponse {

View File

@@ -6763,11 +6763,7 @@ export class MatrixClient extends EventEmitter {
eventType?: EventType | string | null, eventType?: EventType | string | null,
opts: IRelationsRequestOpts = {}, opts: IRelationsRequestOpts = {},
): Promise<IRelationsResponse> { ): Promise<IRelationsResponse> {
const params = new URLSearchParams(); const queryString = utils.encodeParams(opts as Record<string, string | number>);
for (const [key, val] of Object.entries(opts)) {
params.set(key, val);
}
const queryString = params.toString();
let templatedUrl = "/rooms/$roomId/relations/$eventId"; let templatedUrl = "/rooms/$roomId/relations/$eventId";
if (relationType !== null) templatedUrl += "/$relationType"; if (relationType !== null) templatedUrl += "/$relationType";

View File

@@ -27,12 +27,19 @@ import type NodeCrypto from "crypto";
/** /**
* Encode a dictionary of query parameters. * Encode a dictionary of query parameters.
* Omits any undefined/null values.
* @param {Object} params A dict of key/values to encode e.g. * @param {Object} params A dict of key/values to encode e.g.
* {"foo": "bar", "baz": "taz"} * {"foo": "bar", "baz": "taz"}
* @return {string} The encoded string e.g. foo=bar&baz=taz * @return {string} The encoded string e.g. foo=bar&baz=taz
*/ */
export function encodeParams(params: Record<string, string>): string { export function encodeParams(params: Record<string, string | number | boolean>): string {
return new URLSearchParams(params).toString(); const searchParams = new URLSearchParams();
for (const [key, val] of Object.entries(params)) {
if (val !== undefined && val !== null) {
searchParams.set(key, String(val));
}
}
return searchParams.toString();
} }
export type QueryDict = Record<string, string | string[]>; export type QueryDict = Record<string, string | string[]>;