1- import { JsonLogger , LogLevels } from "./json-logger.service" ;
1+ import { JsonLogger , LogLevels } from "./json-logger.service" ;
22import { config } from "../config" ;
33import { Injectable } from "@nestjs/common" ;
4- import { chromium , webkit , devices , Browser , Page , ConsoleMessage , Request , BrowserContextOptions } from 'playwright' ;
5- import { LeakedRequests } from "../models/LeakedRequests" ;
4+ import {
5+ // chromium, // Yandex metrics problems
6+ webkit ,
7+ devices ,
8+ Browser ,
9+ Page ,
10+ ConsoleMessage ,
11+ Request ,
12+ BrowserContextOptions ,
13+ } from "playwright" ;
14+ import { LeakedRequests } from "../models/LeakedRequests" ;
615
716@Injectable ( )
817export class PrerenderService {
918 public constructor ( private readonly logger : JsonLogger ) { }
1019
1120 public async render ( url : string , headers : Headers ) {
12-
1321 const browser : Browser = await webkit . launch ( {
1422 // headless: false, // for debug
1523 // devtools: true,
@@ -21,8 +29,8 @@ export class PrerenderService {
2129
2230 const authHeaders = this . setAuth ( url ) ;
2331 const context = await browser . newContext ( {
24- ...devices [ ' Galaxy S8' ] ,
25- ...authHeaders
32+ ...devices [ " Galaxy S8" ] ,
33+ ...authHeaders ,
2634 } ) ;
2735
2836 let requests : LeakedRequests [ ] = [ ] ;
@@ -35,17 +43,17 @@ export class PrerenderService {
3543 Reflect . set ( window , "prerender" , data ) ;
3644 } ,
3745 {
38- userAgent : headers [ "user-agent" ] ,
46+ userAgent : headers [ "user-agent" ] as string ,
3947 } ,
4048 ) ;
4149
4250 page . setDefaultNavigationTimeout ( config . navTimeout ) ;
4351 page . setDefaultTimeout ( config . defaultTimeout ) ;
4452 this . setLogOnConsole ( page ) ;
45- requests = await this . setRequestLeakDetector ( page ) ;
53+ requests = this . setRequestLeakDetector ( page ) ;
4654
4755 await page . goto ( url , {
48- waitUntil : config . waitUntil as any ,
56+ waitUntil : config . waitUntil as "networkidle" ,
4957 timeout : config . navTimeout ,
5058 } ) ;
5159 const pageContent = await page . content ( ) ; // serialized HTML of page DOM.
@@ -69,7 +77,9 @@ export class PrerenderService {
6977 }
7078 }
7179
72- private async setAuth ( url : string ) : Promise < Pick < BrowserContextOptions , "httpCredentials" > > {
80+ private setAuth (
81+ url : string ,
82+ ) : Pick < BrowserContextOptions , "httpCredentials" > {
7383 if ( config . basicAuth ) {
7484 // Url, login, password
7585 const basicAuths : [ string , string , string ] [ ] = config . basicAuth
@@ -86,7 +96,7 @@ export class PrerenderService {
8696 httpCredentials : {
8797 username : auth [ 1 ] ,
8898 password : auth [ 2 ] ,
89- }
99+ } ,
90100 } ;
91101 }
92102 }
@@ -121,7 +131,7 @@ export class PrerenderService {
121131 } ) ;
122132 }
123133
124- private async setRequestLeakDetector ( page : Page ) : Promise < LeakedRequests [ ] > {
134+ private setRequestLeakDetector ( page : Page ) : LeakedRequests [ ] {
125135 const requests : LeakedRequests [ ] = [ ] ;
126136
127137 page . on ( "request" , ( request : Request ) => {
@@ -150,10 +160,7 @@ export class PrerenderService {
150160 requests : LeakedRequests [ ] ,
151161 error : unknown ,
152162 ) {
153- if (
154- error instanceof Error &&
155- error . name . startsWith ( "TimeoutError" )
156- ) {
163+ if ( error instanceof Error && error . name . startsWith ( "TimeoutError" ) ) {
157164 requests . forEach ( ( lreq ) => {
158165 lreq . endTime = Date . now ( ) ;
159166 lreq . time = lreq . endTime - lreq . startTime ;
@@ -163,5 +170,4 @@ export class PrerenderService {
163170 } ) ;
164171 }
165172 }
166-
167173}
0 commit comments