diff --git a/packages/core/src/http/HttpAgentImpl.ts b/packages/core/src/http/HttpAgentImpl.ts index 24e2107f83..af715f877b 100644 --- a/packages/core/src/http/HttpAgentImpl.ts +++ b/packages/core/src/http/HttpAgentImpl.ts @@ -498,9 +498,9 @@ export class HttpAgentImpl extends HttpAgent { */ _setCookiesFromResponse(agentResponse: HttpAgentResponse): void { if (agentResponse.headersRaw) { - const receivedCookies = agentResponse.headersRaw.get('set-cookie'); + const receivedCookies = agentResponse.headersRaw.getSetCookie(); - if (receivedCookies) { + if (receivedCookies.length > 0) { this._cookie.parseFromSetCookieHeader( receivedCookies, agentResponse.params.url diff --git a/packages/core/src/http/__tests__/HttpAgentImplSpec.ts b/packages/core/src/http/__tests__/HttpAgentImplSpec.ts index 0377a6115e..005a3c2455 100644 --- a/packages/core/src/http/__tests__/HttpAgentImplSpec.ts +++ b/packages/core/src/http/__tests__/HttpAgentImplSpec.ts @@ -71,11 +71,9 @@ describe('ima.core.http.HttpAgentImpl', () => { 'set-cookie': ['cookie1=cookie1', 'cookie2=cookie2'], }, // @ts-ignore - headersRaw: new Map( - Object.entries({ - 'set-cookie': ['cookie1=cookie1', 'cookie2=cookie2'], - }) - ), + headersRaw: new Headers({ + 'set-cookie': ['cookie1=cookie1', 'cookie2=cookie2'], + }), }; }); diff --git a/packages/core/src/storage/CookieStorage.ts b/packages/core/src/storage/CookieStorage.ts index 8236f53791..7889172a58 100644 --- a/packages/core/src/storage/CookieStorage.ts +++ b/packages/core/src/storage/CookieStorage.ts @@ -19,12 +19,6 @@ const MAX_EXPIRE_DATE = new Date('Fri, 31 Dec 9999 23:59:59 UTC'); */ const COOKIE_SEPARATOR = '; '; -/** - * Separator used to separate cookie declarations in the `Set-Cookie` HTTP - * header. - */ -const SERVER_COOKIE_SEPARATOR = ', '; - export type CookieOptions = { domain?: string; expires?: Date; @@ -356,13 +350,17 @@ export class CookieStorage extends Storage { * HTTP response (via the `Set-Cookie` HTTP header) if at the server * side, or the browser (via the `document.cookie` property). * - * @param setCookieHeader The value of the `Set-Cookie` HTTP - * header. + * @param cookiesString The value of the `Set-Cookie` HTTP + * header. When there are multiple cookies, the value can be + * provided as an array of strings. */ - parseFromSetCookieHeader(setCookieHeader: string, url?: string): void { - const cookiesArray = setCookieHeader - ? setCookieHeader.split(SERVER_COOKIE_SEPARATOR) - : []; + parseFromSetCookieHeader( + cookiesString: string | string[], + url?: string + ): void { + const cookiesArray = Array.isArray(cookiesString) + ? cookiesString + : [cookiesString]; for (const cookie of cookiesArray) { const cookieItem = this.#extractCookie(cookie);