diff --git a/package-lock.json b/package-lock.json index 35f1d1e..9aa825d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,7 +47,7 @@ "tld-extract": "^2.1.0", "turndown": "^7.1.3", "turndown-plugin-gfm": "^1.0.2", - "undici": "^5.24.0" + "undici": "^7.8.0" }, "devDependencies": { "@types/archiver": "^5.3.4", @@ -12500,14 +12500,12 @@ } }, "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.8.0.tgz", + "integrity": "sha512-vFv1GA99b7eKO1HG/4RPu2Is3FBTWBrmzqzO0mz+rLxN3yXkE4mqRcb8g8fHxzX4blEysrNZLqg5RbJLqX5buA==", + "license": "MIT", "engines": { - "node": ">=14.0" + "node": ">=20.18.1" } }, "node_modules/undici-types": { diff --git a/package.json b/package.json index ae35f72..09bfa7c 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "tld-extract": "^2.1.0", "turndown": "^7.1.3", "turndown-plugin-gfm": "^1.0.2", - "undici": "^5.24.0" + "undici": "^7.8.0" }, "devDependencies": { "@types/archiver": "^5.3.4", diff --git a/src/api/searcher-serper.ts b/src/api/searcher-serper.ts index 462bde3..8314c8f 100644 --- a/src/api/searcher-serper.ts +++ b/src/api/searcher-serper.ts @@ -32,6 +32,7 @@ import { import { toAsyncGenerator } from '../utils/misc'; import type { JinaEmbeddingsTokenAccount } from '../shared/db/jina-embeddings-token-account'; import { LRUCache } from 'lru-cache'; +import { API_CALL_STATUS } from '../shared/db/api-roll'; const WORLD_COUNTRY_CODES = Object.keys(WORLD_COUNTRIES).map((x) => x.toLowerCase()); @@ -256,8 +257,20 @@ export class SearcherHost extends RPCHost { auth.reportUsage(chargeAmount, `reader-${rpcReflect.name}`).catch((err) => { this.logger.warn(`Unable to report usage for ${uid}`, { err: marshalErrorLike(err) }); }); - const apiRoll = await apiRollPromise; - apiRoll.chargeAmount = chargeAmount; + try { + const apiRoll = await apiRollPromise; + apiRoll.chargeAmount = chargeAmount; + + } catch (err) { + await this.rateLimitControl.record({ + uid, + tags: [rpcReflect.name.toUpperCase()], + status: API_CALL_STATUS.SUCCESS, + chargeAmount, + }).save().catch((err) => { + this.logger.warn(`Failed to save rate limit record`, { err: marshalErrorLike(err) }); + }); + } } }); diff --git a/src/api/serp.ts b/src/api/serp.ts index 74fca90..2e0f363 100644 --- a/src/api/serp.ts +++ b/src/api/serp.ts @@ -25,6 +25,7 @@ import { SERPResult } from '../db/searched'; import { SerperBingSearchService, SerperGoogleSearchService } from '../services/serp/serper'; import type { JinaEmbeddingsTokenAccount } from '../shared/db/jina-embeddings-token-account'; import { LRUCache } from 'lru-cache'; +import { API_CALL_STATUS } from '../shared/db/api-roll'; const WORLD_COUNTRY_CODES = Object.keys(WORLD_COUNTRIES).map((x) => x.toLowerCase()); @@ -261,8 +262,19 @@ export class SerpHost extends RPCHost { auth.reportUsage(chargeAmount, `reader-search`).catch((err) => { this.logger.warn(`Unable to report usage for ${uid}`, { err: marshalErrorLike(err) }); }); - const apiRoll = await apiRollPromise; - apiRoll.chargeAmount = chargeAmount; + try { + const apiRoll = await apiRollPromise; + apiRoll.chargeAmount = chargeAmount; + } catch (err) { + await this.rateLimitControl.record({ + uid, + tags: [rpcReflect.name.toUpperCase()], + status: API_CALL_STATUS.SUCCESS, + chargeAmount, + }).save().catch((err) => { + this.logger.warn(`Failed to save rate limit record`, { err: marshalErrorLike(err) }); + }); + } } }); diff --git a/thinapps-shared b/thinapps-shared index 9a32fc3..f89255c 160000 --- a/thinapps-shared +++ b/thinapps-shared @@ -1 +1 @@ -Subproject commit 9a32fc38abea6f42fe8f5bec452ccba0d1d0089d +Subproject commit f89255cd6546641f72eefba140a4aef96a0e03fc