@@ -19,14 +19,15 @@ import {
1919} from '../../types' ;
2020
2121import { stringToBuffer } from '../../util/buffer' ;
22- import { lastHeader } from '../../util/headers' ;
22+ import { getHeaderValues , lastHeader } from '../../util/headers' ;
2323import { ObservablePromise } from '../../util/observable' ;
2424import { unreachableCheck } from '../../util/error' ;
2525
2626import { UI_VERSION } from '../../services/service-versions' ;
2727import { getStatusMessage } from './http-docs' ;
2828import { StreamMessage } from '../events/stream-message' ;
2929import { QueuedEvent } from '../events/events-store' ;
30+ import { parseCookieHeader , parseSetCookieHeader } from './cookies' ;
3031
3132// We only include request/response bodies that are under 500KB
3233const HAR_BODY_SIZE_LIMIT = 500000 ;
@@ -143,6 +144,36 @@ function asHtkHeaders(headers: HarFormat.Header[]) {
143144 . value ( ) as Headers ;
144145}
145146
147+ function asHarRequestCookies ( headers : Headers ) {
148+ const combinedHeader = getHeaderValues ( headers , 'cookie' ) . join ( '; ' ) ;
149+ try {
150+ return parseCookieHeader ( combinedHeader ) ;
151+ } catch ( e ) {
152+ console . warn ( 'Could not parse request cookies for HAR' , combinedHeader ) ;
153+ return [ ] ;
154+ }
155+ }
156+
157+ function asHarResponseCookies ( headers : Headers ) {
158+ const setCookieHeaders = getHeaderValues ( headers , 'set-cookie' ) ;
159+ try {
160+ // HAR has specific opinions about which fields to include and their casing
161+ return parseSetCookieHeader ( setCookieHeaders ) . map ( ( cookie ) => ( {
162+ name : cookie . name ,
163+ value : cookie . value ,
164+ path : cookie . path ,
165+ domain : cookie . domain ,
166+ expires : cookie . expires ,
167+ httpOnly : cookie . httponly ,
168+ secure : cookie . secure ,
169+ sameSite : cookie . samesite
170+ } ) ) ;
171+ } catch ( e ) {
172+ console . warn ( 'Could not parse response cookies for HAR' , setCookieHeaders ) ;
173+ return [ ] ;
174+ }
175+ }
176+
146177export function generateHarRequest (
147178 request : HtkRequest ,
148179 waitForDecoding : false ,
@@ -171,7 +202,7 @@ export function generateHarRequest(
171202 method : request . method ,
172203 url : request . parsedUrl . toString ( ) ,
173204 httpVersion : `HTTP/${ request . httpVersion || '1.1' } ` ,
174- cookies : [ ] ,
205+ cookies : asHarRequestCookies ( request . headers ) ,
175206 headers : asHarHeaders ( request . headers ) ,
176207 ...( request . trailers ? {
177208 _trailers : asHarHeaders ( request . trailers )
@@ -327,7 +358,7 @@ async function generateHarResponse(
327358 status : response . statusCode ,
328359 statusText : response . statusMessage ,
329360 httpVersion : `HTTP/${ request . httpVersion || '1.1' } ` ,
330- cookies : [ ] ,
361+ cookies : asHarResponseCookies ( response . headers ) ,
331362 headers : asHarHeaders ( response . headers ) ,
332363 content : Object . assign (
333364 {
0 commit comments