-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetPageCookiesAndNavigateToUrl.ts
More file actions
41 lines (33 loc) · 1.19 KB
/
setPageCookiesAndNavigateToUrl.ts
File metadata and controls
41 lines (33 loc) · 1.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import {setHeadersAndNavigateToUrl} from 'e2ed/actions';
import {LogEventType} from 'e2ed/constants';
import {getHeaderValue, log, replaceSetCookie} from 'e2ed/utils';
import type {Cookie, NavigationReturn, SetCookieHeaderString, StringHeaders, Url} from 'e2ed/types';
type Options = Readonly<{
pageCookies: readonly Cookie[];
timeout?: number;
}>;
/**
* Navigates to the url and set custom page cookies.
*/
export const setPageCookiesAndNavigateToUrl = (
url: Url,
{pageCookies, timeout}: Options,
): Promise<NavigationReturn> => {
const mapResponseHeaders = (headers: StringHeaders): StringHeaders => {
const setCookies = getHeaderValue(headers, 'set-cookie');
let cookiesArray = (setCookies ?? '')
.split('\n')
.map((line) => line.trim())
.filter(Boolean) as SetCookieHeaderString[];
for (const cookie of pageCookies) {
cookiesArray = replaceSetCookie(cookiesArray, cookie);
}
return {'set-cookie': cookiesArray.join('\n')};
};
log(`Navigate to ${url} and set page cookie`, {pageCookies, url}, LogEventType.Action);
return setHeadersAndNavigateToUrl(
url,
{mapResponseHeaders},
timeout !== undefined ? {timeout} : undefined,
);
};