Skip to content

Commit f6c85df

Browse files
fix(chutes-oauth): bound core helper JSON response reads at 16 MiB
Replace 3 unbounded (await response.json()) calls in the deprecated core chutes-oauth helper with readProviderJsonResponse (16 MiB cap). Sites: fetchChutesUserInfo (userinfo), exchangeChutesCodeForTokens (token exchange), refreshChutesTokens (token refresh). Reuses the existing SDK helper already used by 15+ other providers.
1 parent 19707cc commit f6c85df

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

src/agents/chutes-oauth.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { createHash, randomBytes } from "node:crypto";
66
import { normalizeOptionalString } from "@openclaw/normalization-core/string-coerce";
77
import { resolveExpiresAtMsFromDurationSeconds } from "../infra/parse-finite-number.js";
88
import type { OAuthCredentials } from "../llm/oauth.js";
9+
import { readProviderJsonResponse } from "./provider-http-errors.js";
910

1011
const CHUTES_OAUTH_ISSUER = "https://api.chutes.ai";
1112
export const CHUTES_AUTHORIZE_ENDPOINT = `${CHUTES_OAUTH_ISSUER}/idp/authorize`;
@@ -115,7 +116,7 @@ async function fetchChutesUserInfo(params: {
115116
await cancelUnreadResponseBody(response);
116117
return null;
117118
}
118-
const data = (await response.json()) as unknown;
119+
const data = await readProviderJsonResponse<unknown>(response, "Chutes userinfo");
119120
if (!data || typeof data !== "object") {
120121
return null;
121122
}
@@ -155,11 +156,11 @@ export async function exchangeChutesCodeForTokens(params: {
155156
throw new Error(`Chutes token exchange failed: ${text}`);
156157
}
157158

158-
const data = (await response.json()) as {
159+
const data = await readProviderJsonResponse<{
159160
access_token?: string;
160161
refresh_token?: string;
161162
expires_in?: number;
162-
};
163+
}>(response, "Chutes token exchange");
163164

164165
const access = data.access_token?.trim();
165166
const refresh = data.refresh_token?.trim();
@@ -226,11 +227,11 @@ export async function refreshChutesTokens(params: {
226227
throw new Error(`Chutes token refresh failed: ${text}`);
227228
}
228229

229-
const data = (await response.json()) as {
230+
const data = await readProviderJsonResponse<{
230231
access_token?: string;
231232
refresh_token?: string;
232233
expires_in?: number;
233-
};
234+
}>(response, "Chutes token refresh");
234235
const access = data.access_token?.trim();
235236
const newRefresh = data.refresh_token?.trim();
236237
const expires = resolveChutesExpiresAt(data.expires_in, now);

0 commit comments

Comments
 (0)