From 29ccb24f6526e5bf45682b1ee78924521c520db8 Mon Sep 17 00:00:00 2001 From: nkhangg Date: Wed, 16 Apr 2025 14:26:55 +0700 Subject: [PATCH] fix can't call api --- auto-bid-admin/index.html | 22 ++++++------- auto-bid-admin/public/favicon.ico | Bin 0 -> 15406 bytes auto-bid-admin/src/pages/bids.tsx | 8 +++++ .../langtons.com.au/langtons-api-bid.js | 29 +++++++++++++++--- .../langtons.com.au/langtons-product-bid.js | 16 +++++++--- auto-bid-tool/service/app-service.js | 3 +- auto-bid-tool/system/apis/bid.js | 4 +-- 7 files changed, 59 insertions(+), 23 deletions(-) create mode 100644 auto-bid-admin/public/favicon.ico 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 0000000000000000000000000000000000000000..06b3a141a1dbb10a1760e54a6a8654aa374d547f GIT binary patch literal 15406 zcmeI$3zU`P8o=>Am6=jBsUa#&=`xX;qDU7d>X8RB{awMad=3|IdD{-L|)xy_?cG%e&TZ?LB*c-}gSx^FHtQ?TSP) zBBdkQ*%4lIBfZN+BF!U_NN(=Wf9F+-M8@)2etz`(dXdPIoJb^(V>pE~e*T=7WFvzw z%40wHK6aGij{{LH&cXcc<^8@a&Ok3zN9;8Y;P26xhUqaL;(cFKgy)}wxhQ~hg=| z#1GeQIyPY|!o1sgZ|tsPcjUrY41j(7TQT!>!m$sZy4J;wJK;r=eVE4=xo8XTPkZ?& zLwxRGd#ncBYwqWw#=aa-7tM<)pX2Jod1BYxem@##zv=zB!#ZeLoagv^F&@TXcpr*g z-_rbT3{Bv@-Rl{Hb?~0w9>x$qd_L#l1pFDs-y416T*Tkj{7f{4^-h$Jd!P*lUkw1acbf-$%z{@oh!btubcHIN_uz6G!DO=B^(REIS+hGS6x z`^FgDKZ)v4mCwCzjKU+BfbOUdV@P)xgM07_JcSo98OG2G)*%zQ=nLmwhcy_39&qi; z!yZp{ggRJH_u^C-!(0qROBh2g!u;!bzXfk%3eG_;j3M3O{jmdvVGfL865J=oV80H6 z@x6=h@eSU!agZZ|8dw(!#Ws)a}CGiFoxMMhQFc^Gx0ulz!<*3N{mNG*eAx2 z?y%OUU<6!)7jYl%gt^Ccn4v=_*duu7GGmCmZ3k6LM0S;RO3MR z^VPTkx8ZKgfa@JUZ}{8Xx8h3}!&=+}`^9xA?r6Y)BQXa{uoMdrzusY9d(U;)fW`3M z;jwd3h%Tss;*2sJ)C}Wctv`Y5xe@W}9p-oM`JHq3$JrPH_o&a(L*etFIK%mm#I-PY zb8=11G0YcU{mi-DcW>iCbU<~qLK_?c`#1x|9q#?MxB}1ND;PtVH@y0p_da{V`@`*M z0r$N9=JP!Zsg6ueI2hLMCK$s8ggWfty}7$4)@U+3?r%5@yE?3uF}M$m!8$lksDtwx z%WD{hlh72YtTTrfIb!SZPmVT*PzTrD`(ba?MFo`fh_6Ed6Sx=M;I!3p>~>~+_~n9SW6clU6PgWxmaT=-kVe)pcSCq}5l z{!C^q+@r<4ukDHW{+OeP3gq#6H6hTQJRx{#_flS zX>t#F&n}O0NEVOZ<)9|&pdRYOXS~-)H3yIP`F;f2;gmF;%z4M-7&L z$OD$Ij1ugAyuGzA}W>~c(kzX7`;QT#q9kA?NW7BjI1%P;{2NTrut-xksHX7Ot6 z*CIB4|Gkn($ZsRxe}E;p7X#4=ha}h|;*TwPZjXUrx=3zR_VFc`@d=%A7?iKG} z*2^{UdiP-(tc}bo5x;u^&ie>%gZrp6nj=vUWbwH<RnQP#&$a6b;~0d&7?OnFS!<8=K4Q(h2RDFy;`7Ao#}7X%2iM_r^oKdj!#bG5 zcw7#1a2+bbS|_@mpI3l+)Iwvp$Bg9!m{%fxXCJhLbu#XQ;cvh)$Uw4DnlEzT9x(@N za1Rz>KAymMxRY9PG#Wa2=-LN_0X~n1l6>A6~B%GGPp^mwkFbRApY{`JMTCti579iLTAZ35Ro< ztLtSgI>Md|>+m-3mtrjJF>`Po_J{KrZ~X9j-ZPBH*o@J>G8cQy@66Hl@>s7SV^KQ8 z>l_IC+!)<=_hJziU>eN9XH-`t>m}o`mbK9g?O{#2p#z$r8a&24(v6o>cN$*DH86)f zoB`Ki9NY)y@Ejh1IhbQp#P^alwU67OCx&4(CSnwNz`Sb09IRVO4Ri2%=FtG1VXWie zI@n9*kf@i8+uGX~p4%OTco@sE4s&rG&W1Udr~U4EB{|IDARL9W;5~E#mS7>K!yL@b z?;FB_ph)WU*bbNjjP~!jbIL0aNd#}_EJ?egE{ydFbC`JIy??@@b^JyxTibd65N5O zuo_$OJ-)>jyov`g9NlpY%-#LqUMi_!J>1XcV13VoIZVQnFbCJczs;cw?2BQz2XpWi zzQzui!**=IE0}>obVEH$M}DU zGKX#W9P2R+gV7ds;j=CiC7A=4`zZ(aXmgmuP~4AYSPXk<0(?fygrBX#N3d^xj53e! z;5ux=3mA_GPyfA9tDm2Y6pjnP=Gd2IY)FZjLrnde)0 z2>oyjYQSf7DWp3**E-aJ*KC8f=ztz5z@2y!Z@_wnIFr4ai#eH}J>)s&@G<7$dYp}B zsE&P*?y&!A!Fc;%5U#*gD8y~BcW1-;S^H#hhtG}Q*ge*`eKwebYxfc+Vjw!A0qmi4 zhker+Jz<}?Umt<@4EL)&`xq8t9js@FGxpV(L(drd7Fh3h@IF3?GJbn#B)Y@7%OTxi z&mV^&n2JSs9?r8O`hFR&tMCzwEjI4(KDOr8c{S$3dbs~*;aNO@YjGjkp*Av+&T!vW zM0;F^rC5V^u_5XMUaj9o*bDY`h&lGv+PgN^-E*G7jp&I!7#{uma$e7cd(GJ0d&ZIK z$l!!B@cfhU4|tz8)=jW?y~h-Fp9y{Q9mkrVd0Knxei54BXxQuLqZ9lr2m8Vp(jBEZ zu>!mgT#T`Bjh%lpjNQ15F}Bv>y`THN$8CkNzYY8E4s^qzr~&)D6^z|`j$oe! z-phr(*bBG99Nc@}GmOpN2rey zxCd&X1$tu~d{&u*>tKzI)q2NrFWB$ymA7F3&A}uL#_=$AYizBJxg=`NWp*0gLl1!a z$-U4Y5x3xKT!Kz$fU?-#!~Htx zKCn0U^hnf8=3p8^uLVwUOI_ydSW=nU<&LVf6sWY%z=A11AEgjkBZ2JJz}r-!$|Z&8yLIm zwYSusP<9%jmum27KI|ud-<*j0D3850c0&6pHgoW|i}(0k{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..7d43251 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); @@ -35,6 +35,24 @@ export class LangtonsApiBid extends ApiBid { return !(await this.page_context.$('input[name="loginEmail"]')) && fs.existsSync(filePath); } + async waitCodeLogin() { + if (!this.page_context) return; + + try { + await this.page_context.waitForNavigation({ timeout: 15000, waitUntil: 'domcontentloaded' }); + } catch (error) { + console.warn(`⚠️ [${this.id}] waitLogin timeout, reloading page...`); + + await this.page_context.reload({ waitUntil: 'networkidle0' }); + + try { + await this.page_context.waitForNavigation({ timeout: 15000, waitUntil: 'domcontentloaded' }); + } catch (err) { + console.error(`❌ [${this.id}] Failed to navigate after reload:`, err.message); + } + } + } + async handleLogin() { const page = this.page_context; @@ -113,13 +131,16 @@ 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' }); + + // await this.waitCodeLogin(); // 📂 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 +241,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: [] }; } };