@@ -12,7 +12,8 @@ import { browserAssertionsSummary, browserStepRecord, executeBrowserInteractionS
1212import { browserCommandLivenessPolicy , isBrowserCommandLivenessError , withBrowserCommandLiveness } from "./browser-liveness.js"
1313import { serializeBrowserError } from "./browser-metrics.js"
1414import { executeBrowserObservationAssertion } from "./browser-observation-assertions.js"
15- import { browserPreviewNetworkPolicyIsActive , browserPreviewNetworkPolicySummary , browserPreviewNeedsContextRouting , browserPreviewTopology , resolveBrowserPreviewUrl , routeBrowserPreviewContextNetwork } from "./browser-preview-routing.js"
15+ import { browserPreviewNetworkPolicyIsActive , browserPreviewNetworkPolicySummary , browserPreviewNeedsContextRouting , browserPreviewTopology , closeBrowserAndDrainPreviewRoutes , createBrowserPreviewRouteTracker , resolveBrowserPreviewUrl , routeBrowserPreviewContextNetwork } from "./browser-preview-routing.js"
16+ import { browserCommandResult } from "./browser-result-sanitization.js"
1617import { BROWSER_PROBE_STATE_INIT_SCRIPT , browserProbeReplayability , browserProbeViewport } from "./browser-probe.js"
1718import { runBrowserProbeCommand , type BrowserProbeRunPlan } from "./browser-probe-runner.js"
1819import { browserActionTargetUrls , browserAuthRequest , browserProbeWaterfallArtifact , browserProbeWebSocketArtifact , browserProbeWebSocketSummary , browserRedirectDiagnosticsArtifact , browserRequestCoverageArtifact , browserStorageStateAuthSummary , browserStorageStateImportFromArgs , browserWordPressDiagnosticsArtifact , createBrowserProbeProgressTracker , fileSha256 , installBrowserWordPressDiagnostics , installWordPressAdminAuthCookies , livenessRemainingWallTimeMs , normalizeBrowserProbeScriptCheckpoint , type BrowserCommandProgressEvent , type BrowserStorageStateImport } from "./browser-probe-support.js"
@@ -127,6 +128,7 @@ export async function runBrowserActionsCommand({
127128 const browser = await launchChromiumBrowser ( )
128129 const topology = browserPreviewTopology ( args , runtimeSpec , server . serverUrl )
129130 const { preview, networkPolicy } = topology
131+ const routeTracker = createBrowserPreviewRouteTracker ( )
130132 let requestedUrl = initialUrl ? topology . resolveUrl ( initialUrl ) : preview . effectiveOrigin
131133 let finalUrl = requestedUrl
132134 let htmlSha256 : string | undefined
@@ -148,7 +150,7 @@ export async function runBrowserActionsCommand({
148150 ...( storageStateImport ? { storageState : storageStateImport . storageState } : { } ) ,
149151 } ) : null
150152 if ( context ) {
151- await routeBrowserPreviewContextNetwork ( context , networkPolicy , preview . effectiveOrigin )
153+ await routeBrowserPreviewContextNetwork ( context , networkPolicy , preview . effectiveOrigin , routeTracker )
152154 }
153155 const page = context ? await context . newPage ( ) : await browser . newPage ( )
154156 if ( onProgress ) {
@@ -410,8 +412,11 @@ export async function runBrowserActionsCommand({
410412 }
411413 }
412414 } finally {
413- await settleBrowserNetworkTasks ( networkTasks , livenessPolicy . networkSettleTimeoutMs )
414- await browser . close ( )
415+ await settleBrowserNetworkTasks ( networkTasks , livenessPolicy . networkSettleTimeoutMs ) . catch ( ( error ) => errors . push ( serializeBrowserError ( "probe-error" , error ) ) )
416+ for ( const routeError of await closeBrowserAndDrainPreviewRoutes ( browser , routeTracker ) ) {
417+ errors . push ( serializeBrowserError ( "probe-error" , routeError ) )
418+ pendingError ??= routeError
419+ }
415420 if ( capture . has ( "steps" ) ) {
416421 await artifactSession . writeJsonLines ( "steps" , "steps.jsonl" , stepRecords )
417422 }
@@ -547,9 +552,7 @@ export async function runBrowserActionsCommand({
547552 throw new Error ( "wordpress.browser-actions did not produce a browser artifact" )
548553 }
549554
550- return {
551- artifact,
552- output : `${ JSON . stringify ( {
555+ return browserCommandResult ( artifact , {
553556 command : "wordpress.browser-actions" ,
554557 requestedUrl,
555558 preview,
@@ -558,8 +561,7 @@ export async function runBrowserActionsCommand({
558561 files : artifact . files ,
559562 summary : artifact . summary ,
560563 steps : stepRecords ,
561- } , null , 2 ) } \n`,
562- }
564+ } )
563565}
564566
565567export function browserToolVerifierUnsupportedResult ( step : BrowserInteractionStep , index : number , startedAt : string ) : BrowserToolVerifierResult {
@@ -944,17 +946,14 @@ export async function runBrowserScenarioCommand({
944946 throw new BrowserCommandArtifactError ( `wordpress.browser-scenario failed: ${ pendingError . message } ` , artifact )
945947 }
946948
947- return {
948- artifact,
949- output : `${ JSON . stringify ( {
949+ return browserCommandResult ( artifact , {
950950 command : "wordpress.browser-scenario" ,
951951 requestedUrl : artifact . requestedUrl ,
952952 finalUrl,
953953 files : artifact . files ,
954954 summary : artifact . summary ,
955955 scenario : scenarioSummary ,
956- } , null , 2 ) } \n`,
957- }
956+ } )
958957}
959958
960959async function browserScenarioFromArgs ( args : string [ ] ) : Promise < BrowserScenarioInput > {
0 commit comments