Deploy to production #28
			
				
			
		
		
		
	| 
						 | 
					@ -13,6 +13,7 @@ import browser from "./system/browser.js";
 | 
				
			||||||
import configs from "./system/config.js";
 | 
					import configs from "./system/config.js";
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  delay,
 | 
					  delay,
 | 
				
			||||||
 | 
					  isPageAvailable,
 | 
				
			||||||
  isTimeReached,
 | 
					  isTimeReached,
 | 
				
			||||||
  safeClosePage,
 | 
					  safeClosePage,
 | 
				
			||||||
  subtractSeconds,
 | 
					  subtractSeconds,
 | 
				
			||||||
| 
						 | 
					@ -273,8 +274,9 @@ const clearLazyTab = async () => {
 | 
				
			||||||
      if (!item.page_context) continue;
 | 
					      if (!item.page_context) continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        if (!(await item.page_context.title())) {
 | 
					        const avalableResult = await isPageAvailable(item.page_context);
 | 
				
			||||||
          // await vì title() là async
 | 
					
 | 
				
			||||||
 | 
					        if (!avalableResult) {
 | 
				
			||||||
          await safeClosePage(item);
 | 
					          await safeClosePage(item);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      } catch (e) {
 | 
					      } catch (e) {
 | 
				
			||||||
| 
						 | 
					@ -466,7 +468,7 @@ const trackingLoginStatus = async () => {
 | 
				
			||||||
  socket.on("webUpdated", async (data) => {
 | 
					  socket.on("webUpdated", async (data) => {
 | 
				
			||||||
    console.log("📢 Account was updated:", data);
 | 
					    console.log("📢 Account was updated:", data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const webBid = MANAGER_BIDS.find((item) => item.id === data.id);
 | 
					    const webBid = MANAGER_BIDS.find((item) => item?.id === data?.id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (
 | 
					    if (
 | 
				
			||||||
      webBid &&
 | 
					      webBid &&
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,7 +92,7 @@ export async function safeClosePage(item) {
 | 
				
			||||||
  try {
 | 
					  try {
 | 
				
			||||||
    const page = item.page_context;
 | 
					    const page = item.page_context;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!page?.isClosed() && page?.close) {
 | 
					    if (page && !page.isClosed() && page.close) {
 | 
				
			||||||
      await safeClosePageReal(page);
 | 
					      await safeClosePageReal(page);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -101,10 +101,17 @@ export async function safeClosePage(item) {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (item?.browser_context) {
 | 
					    if (item?.browser_context) {
 | 
				
			||||||
      item.browser_context?.close();
 | 
					      try {
 | 
				
			||||||
 | 
					        await item.browser_context.close();
 | 
				
			||||||
 | 
					      } catch (ctxErr) {
 | 
				
			||||||
 | 
					        console.warn(
 | 
				
			||||||
 | 
					          `⚠️ Failed to close browser context for item ${item.id}: ${ctxErr.message}`
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      item.browser_context = undefined;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  } catch (error) {
 | 
					  } catch (error) {
 | 
				
			||||||
    console.log("Can't close item: " + item.id);
 | 
					    console.warn(`⚠️ Can't close item ${item?.id}: ${error.message}`);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -279,3 +286,20 @@ export function subtractSeconds(time, seconds) {
 | 
				
			||||||
  date.setSeconds(date.getSeconds() - seconds);
 | 
					  date.setSeconds(date.getSeconds() - seconds);
 | 
				
			||||||
  return date.toUTCString();
 | 
					  return date.toUTCString();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export async function isPageAvailable(page) {
 | 
				
			||||||
 | 
					  if (!page || page.isClosed()) return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    await Promise.race([
 | 
				
			||||||
 | 
					      page.title(), // hoặc page.url(), evaluate, vv
 | 
				
			||||||
 | 
					      new Promise((_, reject) =>
 | 
				
			||||||
 | 
					        setTimeout(() => reject(new Error("Timeout")), 1000)
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					    ]);
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					  } catch (err) {
 | 
				
			||||||
 | 
					    console.warn(`⚠️ Page not available: ${err.message}`);
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue