diff --git a/js/libs/keycloak-admin-client/src/utils/stringifyQueryParams.ts b/js/libs/keycloak-admin-client/src/utils/stringifyQueryParams.ts index 2c58d4ca99..be526d77da 100644 --- a/js/libs/keycloak-admin-client/src/utils/stringifyQueryParams.ts +++ b/js/libs/keycloak-admin-client/src/utils/stringifyQueryParams.ts @@ -1,21 +1,29 @@ export function stringifyQueryParams(params: Record) { - return new URLSearchParams( - Object.entries(params).filter((param): param is [string, string] => { - const [, value] = param; + const searchParams = new URLSearchParams(); - if (typeof value === "undefined" || value === null) { - return false; - } + for (const [key, value] of Object.entries(params)) { + // Ignore undefined and null values. + if (value === undefined || value === null) { + continue; + } - if (typeof value === "string" && value.length === 0) { - return false; - } + // Ignore empty strings. + if (typeof value === "string" && value.length === 0) { + continue; + } - if (Array.isArray(value) && value.length === 0) { - return false; - } + // Ignore empty arrays. + if (Array.isArray(value) && value.length === 0) { + continue; + } - return true; - }), - ).toString(); + // Append each entry of an array as a separate parameter, or the value itself otherwise. + if (Array.isArray(value)) { + value.forEach((item) => searchParams.append(key, item.toString())); + } else { + searchParams.append(key, value.toString()); + } + } + + return searchParams.toString(); } diff --git a/js/libs/keycloak-admin-client/test/auth.spec.ts b/js/libs/keycloak-admin-client/test/auth.spec.ts index 2e35141781..e39be8bd8d 100644 --- a/js/libs/keycloak-admin-client/test/auth.spec.ts +++ b/js/libs/keycloak-admin-client/test/auth.spec.ts @@ -42,6 +42,6 @@ describe("Authorization", () => { "idToken", ); - expect(data.scope).to.equal("openid profile email"); + expect(data.scope).to.equal("openid email profile"); }); }); diff --git a/js/libs/keycloak-admin-client/test/authenticationManagement.spec.ts b/js/libs/keycloak-admin-client/test/authenticationManagement.spec.ts index 8e472e05cb..470f2392af 100644 --- a/js/libs/keycloak-admin-client/test/authenticationManagement.spec.ts +++ b/js/libs/keycloak-admin-client/test/authenticationManagement.spec.ts @@ -176,7 +176,6 @@ describe("Authentication management", () => { "clients", "first broker login", "docker auth", - "http challenge", ]); }); diff --git a/js/libs/keycloak-admin-client/test/stringifyQueryParams.spec.ts b/js/libs/keycloak-admin-client/test/stringifyQueryParams.spec.ts index 582cf8d98c..3236982961 100644 --- a/js/libs/keycloak-admin-client/test/stringifyQueryParams.spec.ts +++ b/js/libs/keycloak-admin-client/test/stringifyQueryParams.spec.ts @@ -23,9 +23,10 @@ describe("stringifyQueryParams", () => { numZero: 0, numNegative: -1, str: "Hello World!", + arr: ["foo", "bar"], }), ).to.equal( - "boolTrue=true&boolFalse=false&numPositive=1&numZero=0&numNegative=-1&str=Hello+World%21", + "boolTrue=true&boolFalse=false&numPositive=1&numZero=0&numNegative=-1&str=Hello+World%21&arr=foo&arr=bar", ); }); });