Skip to content

Commit 58ab169

Browse files
committed
Include timestamps in websocket message HAR exports
1 parent d554fc2 commit 58ab169

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

src/model/events/stream-message.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ export class StreamMessage {
4949
else return 'text';
5050
}
5151

52+
get timestamp() {
53+
return this.inputMessage.eventTimestamp;
54+
}
55+
5256
cleanup() {
5357
// As with Exchange & WebSocketStream - in some cases, browsers can keep references to
5458
// these messages, which causes issues with releasing memory, so we aggressively drop

src/model/http/har.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -386,13 +386,16 @@ async function generateHarHttpEntry(
386386
...(exchange.isWebSocket() ? {
387387
_resourceType: 'websocket',
388388
_webSocketMessages: exchange.messages.map((message) =>
389-
generateHarWebSocketMessage(startTime, message)
389+
generateHarWebSocketMessage(message, timingEvents)
390390
)
391391
} : {})
392392
};
393393
}
394394

395-
function generateHarWebSocketMessage(startTime: number, message: StreamMessage) {
395+
function generateHarWebSocketMessage(
396+
message: StreamMessage,
397+
timingEvents: Partial<TimingEvents>
398+
): HarWebSocketMessage {
396399
return {
397400
// Note that msg.direction is from the perspective of Mockttp, not the client.
398401
type: message.direction === 'sent'
@@ -406,9 +409,9 @@ function generateHarWebSocketMessage(startTime: number, message: StreamMessage)
406409
? message.content.toString('base64')
407410
: message.content.toString('utf8'),
408411

409-
// We don't record the start time for now, so just simulate with this. We
410-
// have to set a value here or Chrome drops the messages.
411-
time: (startTime / 1000) + message.messageIndex // Float, in seconds
412+
// N.b. timestamp is precise but relative, startTime is epoch-based but imprecise,
413+
// eventual result here has to be in seconds as a float.
414+
time: (timingEvents.startTime! + (message.timestamp - timingEvents.startTimestamp!)) / 1000
412415
};
413416
}
414417

0 commit comments

Comments
 (0)