diff --git a/auto-bid-admin/index.html b/auto-bid-admin/index.html index e4b78ea..8ac7b8f 100644 --- a/auto-bid-admin/index.html +++ b/auto-bid-admin/index.html @@ -1,13 +1,13 @@ - + - - - - - Vite + React + TS - - -
- - + + + + + Vite + React + TS + + +
+ + diff --git a/auto-bid-admin/public/favicon.ico b/auto-bid-admin/public/favicon.ico new file mode 100644 index 0000000..06b3a14 Binary files /dev/null and b/auto-bid-admin/public/favicon.ico differ diff --git a/auto-bid-admin/src/pages/bids.tsx b/auto-bid-admin/src/pages/bids.tsx index b8de9b2..0f1d06f 100644 --- a/auto-bid-admin/src/pages/bids.tsx +++ b/auto-bid-admin/src/pages/bids.tsx @@ -34,6 +34,14 @@ export default function Bids() { title: 'Name', typeFilter: 'text', }, + { + key: 'web_bid', + title: 'Web', + typeFilter: 'text', + renderRow(row) { + return {row.web_bid.origin_url}; + }, + }, { key: 'lot_id', title: 'Lot ID', diff --git a/auto-bid-tool/models/langtons.com.au/langtons-api-bid.js b/auto-bid-tool/models/langtons.com.au/langtons-api-bid.js index b1b7d4a..713ff05 100644 --- a/auto-bid-tool/models/langtons.com.au/langtons-api-bid.js +++ b/auto-bid-tool/models/langtons.com.au/langtons-api-bid.js @@ -17,7 +17,7 @@ export class LangtonsApiBid extends ApiBid { const timeout = setTimeout(() => { global.socket.off(`verify-code.${this.origin_url}`); // Xóa listener tránh rò rỉ bộ nhớ rej(new Error(`[${this.id}] Timeout: No verification code received within 1 minute.`)); - }, 60 * 1000); // 60 giây + }, 120 * 1000); // 120 giây global.socket.on(`verify-code.${this.origin_url}`, async (data) => { console.log(`📢 [${this.id}] VERIFY CODE:`, data); @@ -113,13 +113,15 @@ export class LangtonsApiBid extends ApiBid { // ⏳ Wait for navigation after verification console.log(`⏳ [${this.id}] Waiting for navigation after verification...`); - await page.waitForNavigation({ timeout: 8000, waitUntil: 'domcontentloaded' }); + await page.waitForNavigation({ timeout: 15000, waitUntil: 'domcontentloaded' }); + + await page.goto(this.url, { waitUntil: 'networkidle2' }); // 📂 Save session context to avoid re-login await this.saveContext(); console.log(`✅ [${this.id}] Login successful!`); - await page.goto(this.url); + // await page.goto(this.url); console.log(`✅ [${this.id}] Navigation successful!`); } catch (error) { console.error(`❌ [${this.id}] Error during login process:`, error.message); @@ -220,6 +222,6 @@ export class LangtonsApiBid extends ApiBid { } catch (error) { console.error(`🚨 [${this.id}] Error reloading page:`, error.message); } - }, 60000); + }, 60000); // 1p reload }; } diff --git a/auto-bid-tool/models/langtons.com.au/langtons-product-bid.js b/auto-bid-tool/models/langtons.com.au/langtons-product-bid.js index 9367eeb..17d2789 100644 --- a/auto-bid-tool/models/langtons.com.au/langtons-product-bid.js +++ b/auto-bid-tool/models/langtons.com.au/langtons-product-bid.js @@ -33,7 +33,7 @@ export class LangtonsProductBid extends ProductBid { } } - async waitForApiResponse(timeout = 10000) { + async waitForApiResponse(timeout = 15000) { if (!this.page_context) { console.error(`❌ [${this.id}] Error: page_context is undefined.`); return null; @@ -57,9 +57,13 @@ export class LangtonsProductBid extends ProductBid { } }; - const timer = setTimeout(() => { - console.log(`⏳ [${this.id}] Timeout: No response received within 10s`); + const timer = setTimeout(async () => { + console.log(`⏳ [${this.id}] Timeout: No response received within ${timeout / 1000}s`); this.page_context.off('response', onResponse); // Gỡ bỏ listener khi timeout + + await this.page_context.reload({ waitUntil: 'networkidle0' }); // reload page + + console.log(`🔁 [${this.id}] Reload page in waitForApiResponse`); resolve(null); }, timeout); @@ -343,6 +347,8 @@ export class LangtonsProductBid extends ProductBid { if (!lotData || lotData.lotId !== this.lot_id) { console.log(`⚠️ [${this.id}] Ignored response for lotId: ${lotData?.lotId}`); + await this.page_context.reload({ waitUntil: 'networkidle0' }); + console.log(`🔁 [${this.id}] Reload page in gotoLink`); return; } @@ -364,7 +370,7 @@ export class LangtonsProductBid extends ProductBid { } if (lotData.myBid && this.max_price && this.max_price != lotData.myBid) { - this.handlePlaceBid(); + // this.handlePlaceBid(); } } catch (error) { console.error(`🚨 [${this.id}] Error parsing API response:`, error); @@ -393,7 +399,7 @@ export class LangtonsProductBid extends ProductBid { await this.gotoLink(); } - await this.handlePlaceBid(); + // await this.handlePlaceBid(); } catch (error) { console.error(`🚨 [${this.id}] Error navigating the page: ${error}`); } diff --git a/auto-bid-tool/service/app-service.js b/auto-bid-tool/service/app-service.js index 747f004..ba9b9f8 100644 --- a/auto-bid-tool/service/app-service.js +++ b/auto-bid-tool/service/app-service.js @@ -51,7 +51,8 @@ export const createApiBid = (web) => { }; export const deleteProfile = (data) => { - const filePath = path.join(CONSTANTS.PROFILE_PATH, sanitizeFileName(data.origin_url) + '.json'); + if (!data?.origin_url) return false; + const filePath = path.join(CONSTANTS.PROFILE_PATH, sanitizeFileName(data?.origin_url) + '.json'); if (fs.existsSync(filePath)) { fs.unlinkSync(filePath); diff --git a/auto-bid-tool/system/apis/bid.js b/auto-bid-tool/system/apis/bid.js index cf829ce..92aced5 100644 --- a/auto-bid-tool/system/apis/bid.js +++ b/auto-bid-tool/system/apis/bid.js @@ -34,7 +34,7 @@ export const updateBid = async (id, values) => { return data.data; } catch (error) { - console.log('❌ ERROR IN SERVER: (UPDATE BID) ', error); + console.log('❌ ERROR IN SERVER: (UPDATE BID) ', error.response); return null; } }; @@ -73,7 +73,7 @@ export const pushPrice = async (values) => { return { status: true, data: data.data }; } catch (error) { - console.log('❌ ERROR IN SERVER (PUSH PRICE): ', error.response.data); + console.log('❌ ERROR IN SERVER (PUSH PRICE): ', error?.response); return { status: false, data: [] }; } };