Path: blob/main/core/models/FrameNavigationsTable.ts
1028 views
import { Database as SqliteDatabase } from 'better-sqlite3';1import INavigation, { LoadStatus } from '@secret-agent/interfaces/INavigation';2import SqliteTable from '@secret-agent/commons/SqliteTable';34export default class FrameNavigationsTable extends SqliteTable<IFrameNavigationRecord> {5private idCounter = 0;67constructor(readonly db: SqliteDatabase) {8super(9db,10'FrameNavigations',11[12['id', 'INTEGER', 'NOT NULL PRIMARY KEY'],13['frameId', 'INTEGER'],14['startCommandId', 'INTEGER'],15['requestedUrl', 'TEXT'],16['finalUrl', 'TEXT'],17['navigationReason', 'TEXT'],18['loaderId', 'TEXT'],19['initiatedTime', 'INTEGER'],20['httpRequestedTime', 'INTEGER'],21['httpRespondedTime', 'INTEGER'],22['httpRedirectedTime', 'INTEGER'],23['domContentLoadedTime', 'INTEGER'],24['loadTime', 'INTEGER'],25['contentPaintedTime', 'INTEGER'],26],27true,28);29this.defaultSortOrder = 'initiatedTime ASC';30}3132public insert(navigation: INavigation) {33if (!navigation.id) {34this.idCounter += 1;35navigation.id = this.idCounter;36}37const record = [38navigation.id,39navigation.frameId,40navigation.startCommandId,41navigation.requestedUrl,42navigation.finalUrl,43navigation.navigationReason,44navigation.loaderId,45navigation.initiatedTime.getTime(),46navigation.stateChanges.get(LoadStatus.HttpRequested)?.getTime(),47navigation.stateChanges.get(LoadStatus.HttpResponded)?.getTime(),48navigation.stateChanges.get(LoadStatus.HttpRedirected)?.getTime(),49navigation.stateChanges.get(LoadStatus.DomContentLoaded)?.getTime(),50navigation.stateChanges.get(LoadStatus.Load)?.getTime(),51navigation.stateChanges.get(LoadStatus.ContentPaint)?.getTime(),52];53this.queuePendingInsert(record);54}5556public last() {57return this.db58.prepare(`select * from ${this.tableName} order by initiatedTime desc limit 1`)59.get() as IFrameNavigationRecord;60}61}6263export interface IFrameNavigationRecord {64id: number;65frameId: number;66requestedUrl: string;67finalUrl?: string;68loaderId: string;69startCommandId: number;70navigationReason: string;71initiatedTime: Date;72httpRequestedTime: number;73httpRespondedTime: number;74httpRedirectedTime?: number;75domContentLoadedTime?: number;76loadTime?: number;77contentPaintedTime?: number;78}798081