@@ -23,6 +23,7 @@ import {
2323 ServerConfig ,
2424 childMessagePm2Schema ,
2525 ManagerMessage ,
26+ ManagerMessagePayload ,
2627} from 'cli/lib/types/wordpress-server-ipc' ;
2728
2829/**
@@ -140,7 +141,8 @@ const messageActivityTrackers = new Map<
140141
141142async function sendMessage (
142143 pmId : number ,
143- message : Omit < ManagerMessage , 'messageId' >
144+ message : ManagerMessagePayload ,
145+ maxTotalElapsedTime = PLAYGROUND_CLI_INACTIVITY_TIMEOUT
144146) : Promise < unknown > {
145147 const bus = await getPm2Bus ( ) ;
146148
@@ -165,12 +167,12 @@ async function sendMessage(
165167
166168 if (
167169 timeSinceLastActivity > PLAYGROUND_CLI_INACTIVITY_TIMEOUT ||
168- totalElapsedTime > PLAYGROUND_CLI_MAX_TIMEOUT
170+ totalElapsedTime > maxTotalElapsedTime
169171 ) {
170172 cleanup ( ) ;
171173 const timeoutReason =
172- totalElapsedTime > PLAYGROUND_CLI_MAX_TIMEOUT
173- ? `Maximum timeout of ${ PLAYGROUND_CLI_MAX_TIMEOUT / 1000 } s exceeded`
174+ totalElapsedTime > maxTotalElapsedTime
175+ ? `Maximum timeout of ${ maxTotalElapsedTime / 1000 } s exceeded`
174176 : `No activity for ${ PLAYGROUND_CLI_INACTIVITY_TIMEOUT / 1000 } s` ;
175177 reject (
176178 new Error ( `Timeout waiting for response to message ${ messageId } : ${ timeoutReason } ` )
@@ -216,7 +218,7 @@ async function sendMessage(
216218
217219 bus . on ( 'process:msg' , responseHandler ) ;
218220
219- sendMessageToProcess ( pmId , { ...message , messageId } as ManagerMessage ) . catch ( reject ) ;
221+ sendMessageToProcess ( pmId , { ...message , messageId } ) . catch ( reject ) ;
220222 } ) ;
221223}
222224
@@ -228,7 +230,7 @@ export async function stopWordPressServer( siteId: string ): Promise< void > {
228230
229231 if ( runningProcess ) {
230232 try {
231- await sendStopMessage ( runningProcess . pmId ) ;
233+ await sendMessage ( runningProcess . pmId , { topic : 'stop-server' } , GRACEFUL_STOP_TIMEOUT ) ;
232234 } catch {
233235 // Graceful shutdown failed, PM2 delete will handle it
234236 }
@@ -237,63 +239,6 @@ export async function stopWordPressServer( siteId: string ): Promise< void > {
237239 return stopProcess ( processName ) ;
238240}
239241
240- /**
241- * Send stop message to the child process with a timeout
242- */
243- async function sendStopMessage ( pmId : number ) : Promise < void > {
244- const bus = await getPm2Bus ( ) ;
245-
246- return new Promise ( ( resolve , reject ) => {
247- const messageId = nextMessageId ++ ;
248-
249- const timeout = setTimeout ( ( ) => {
250- cleanup ( ) ;
251- reject ( new Error ( 'Graceful stop timeout' ) ) ;
252- } , GRACEFUL_STOP_TIMEOUT ) ;
253-
254- const cleanup = ( ) => {
255- clearTimeout ( timeout ) ;
256- bus . off ( 'process:msg' , responseHandler ) ;
257- } ;
258-
259- const responseHandler = ( packet : unknown ) => {
260- const validationResult = childMessagePm2Schema . safeParse ( packet ) ;
261- if ( ! validationResult . success ) {
262- return ;
263- }
264-
265- const validPacket = validationResult . data ;
266-
267- if ( validPacket . process . pm_id !== pmId ) {
268- return ;
269- }
270-
271- if ( validPacket . raw . topic === 'error' && validPacket . raw . originalMessageId === messageId ) {
272- cleanup ( ) ;
273- reject ( new Error ( validPacket . raw . errorMessage ) ) ;
274- } else if (
275- validPacket . raw . topic === 'result' &&
276- validPacket . raw . originalMessageId === messageId
277- ) {
278- cleanup ( ) ;
279- resolve ( ) ;
280- }
281- } ;
282-
283- bus . on ( 'process:msg' , responseHandler ) ;
284-
285- const stopMessage = {
286- topic : 'stop-server' as const ,
287- data : { } ,
288- messageId,
289- } ;
290- sendMessageToProcess ( pmId , stopMessage ) . catch ( ( error ) => {
291- cleanup ( ) ;
292- reject ( error ) ;
293- } ) ;
294- } ) ;
295- }
296-
297242/**
298243 * Run a blueprint on a site without starting a server
299244 * 1. Start the PM2 process
0 commit comments