Deploy to production #28
			
				
			
		
		
		
	| 
						 | 
				
			
			@ -13,6 +13,7 @@ import browser from "./system/browser.js";
 | 
			
		|||
import configs from "./system/config.js";
 | 
			
		||||
import {
 | 
			
		||||
  delay,
 | 
			
		||||
  isPageAvailable,
 | 
			
		||||
  isTimeReached,
 | 
			
		||||
  safeClosePage,
 | 
			
		||||
  subtractSeconds,
 | 
			
		||||
| 
						 | 
				
			
			@ -273,8 +274,9 @@ const clearLazyTab = async () => {
 | 
			
		|||
      if (!item.page_context) continue;
 | 
			
		||||
 | 
			
		||||
      try {
 | 
			
		||||
        if (!(await item.page_context.title())) {
 | 
			
		||||
          // await vì title() là async
 | 
			
		||||
        const avalableResult = await isPageAvailable(item.page_context);
 | 
			
		||||
 | 
			
		||||
        if (!avalableResult) {
 | 
			
		||||
          await safeClosePage(item);
 | 
			
		||||
        }
 | 
			
		||||
      } catch (e) {
 | 
			
		||||
| 
						 | 
				
			
			@ -466,7 +468,7 @@ const trackingLoginStatus = async () => {
 | 
			
		|||
  socket.on("webUpdated", async (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 (
 | 
			
		||||
      webBid &&
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -92,7 +92,7 @@ export async function safeClosePage(item) {
 | 
			
		|||
  try {
 | 
			
		||||
    const page = item.page_context;
 | 
			
		||||
 | 
			
		||||
    if (!page?.isClosed() && page?.close) {
 | 
			
		||||
    if (page && !page.isClosed() && page.close) {
 | 
			
		||||
      await safeClosePageReal(page);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -101,10 +101,17 @@ export async function safeClosePage(item) {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    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) {
 | 
			
		||||
    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);
 | 
			
		||||
  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