From b2ba2f945944f9833bd0d58c2cc42e214e80e77c Mon Sep 17 00:00:00 2001 From: Yanlong Wang Date: Wed, 2 Apr 2025 20:10:33 +0800 Subject: [PATCH] fix: beware cf-browser-rendering capacity --- src/services/cf-browser-rendering.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/services/cf-browser-rendering.ts b/src/services/cf-browser-rendering.ts index 72fa469..5fa54a0 100644 --- a/src/services/cf-browser-rendering.ts +++ b/src/services/cf-browser-rendering.ts @@ -3,6 +3,8 @@ import { AsyncService } from 'civkit/async-service'; import { SecretExposer } from '../shared/services/secrets'; import { GlobalLogger } from './logger'; import { CloudFlareHTTP } from '../shared/3rd-party/cloud-flare'; +import { HTTPServiceError } from 'civkit/http'; +import { ServiceNodeResourceDrainError } from './errors'; @singleton() export class CFBrowserRendering extends AsyncService { @@ -27,9 +29,22 @@ export class CFBrowserRendering extends AsyncService { } async fetchContent(url: string) { - const r = await this.client.fetchBrowserRenderedHTML({ url }); + try { + const r = await this.client.fetchBrowserRenderedHTML({ url }); - return r.parsed.result; + return r.parsed.result; + } catch (err) { + if (err instanceof HTTPServiceError) { + if (err.status === 429) { + // Rate limit exceeded, return empty result + this.logger.warn('Cloudflare browser rendering rate limit exceeded', { url }); + + throw new ServiceNodeResourceDrainError(`Cloudflare browser rendering (our account) is at capacity, please try again later or switch to another engine.`,); + } + } + + throw err; + } } }