From 45c2d429055c676b92b4bf8385067aeada0080ba Mon Sep 17 00:00:00 2001 From: liaoxin Date: Fri, 15 May 2026 20:46:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20anti-ban=20=E6=A8=A1=E5=9D=97=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=20.js=EF=BC=88Node.js=20=E5=8E=9F=E7=94=9F=E6=94=AF?= =?UTF-8?q?=E6=8C=81=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scripts/src/{anti-ban.ts => anti-ban.js} | 27 +++++++------------ 1 file changed, 9 insertions(+), 18 deletions(-) rename skills/gemini-web-generate/scripts/src/{anti-ban.ts => anti-ban.js} (74%) diff --git a/skills/gemini-web-generate/scripts/src/anti-ban.ts b/skills/gemini-web-generate/scripts/src/anti-ban.js similarity index 74% rename from skills/gemini-web-generate/scripts/src/anti-ban.ts rename to skills/gemini-web-generate/scripts/src/anti-ban.js index d3ef3bb..42bfc0c 100644 --- a/skills/gemini-web-generate/scripts/src/anti-ban.ts +++ b/skills/gemini-web-generate/scripts/src/anti-ban.js @@ -6,50 +6,41 @@ * - Each wait adds 0-jitterMax seconds of random jitter */ -export interface AntiBanConfig { - baseDelay: number; // seconds - maxDelay: number; // seconds - jitterMax: number; // seconds -} - -const DEFAULT_CONFIG: AntiBanConfig = { +const DEFAULT_CONFIG = { baseDelay: Number(process.env.GEMINI_BASE_DELAY) || 15, maxDelay: Number(process.env.GEMINI_MAX_DELAY) || 120, jitterMax: 5, }; export class AntiBanController { - private currentDelay: number; - private config: AntiBanConfig; - retryCount = 0; - rateLimitEvents = 0; - - constructor(config?: Partial) { + constructor(config) { this.config = { ...DEFAULT_CONFIG, ...config }; this.currentDelay = this.config.baseDelay; + this.retryCount = 0; + this.rateLimitEvents = 0; } /** Call after a successful generation */ - onSuccess(): void { + onSuccess() { this.currentDelay = Math.max(this.config.baseDelay * 0.5, this.currentDelay * 0.7); } /** Call after rate limit / timeout / error */ - onRateLimit(): void { + onRateLimit() { this.rateLimitEvents++; this.currentDelay = Math.min(this.config.maxDelay, this.currentDelay * 2); } /** Wait between requests with jitter */ - async wait(): Promise { + async wait() { const jitter = Math.random() * this.config.jitterMax; const totalMs = (this.currentDelay + jitter) * 1000; - const log = (await import('./browser.js')).log; + const { log } = await import('./browser.js'); log(`[anti-ban] waiting ${(totalMs / 1000).toFixed(1)}s (base=${this.currentDelay.toFixed(1)}s, jitter=${jitter.toFixed(1)}s)`); await new Promise((r) => setTimeout(r, totalMs)); } - get delay(): number { + get delay() { return this.currentDelay; }