This commit is contained in:
Frank
2026-02-10 13:07:06 -05:00
parent 659f15aa9b
commit 7d5be1556a
3 changed files with 12 additions and 12 deletions

View File

@@ -1,13 +1,13 @@
export class AuthError extends Error {} export class AuthError extends Error {}
export class CreditsError extends Error {} export class CreditsError extends Error {}
export class MonthlyLimitError extends Error {} export class MonthlyLimitError extends Error {}
export class SubscriptionError extends Error { export class UserLimitError extends Error {}
export class ModelError extends Error {}
export class FreeUsageLimitError extends Error {}
export class SubscriptionUsageLimitError extends Error {
retryAfter?: number retryAfter?: number
constructor(message: string, retryAfter?: number) { constructor(message: string, retryAfter?: number) {
super(message) super(message)
this.retryAfter = retryAfter this.retryAfter = retryAfter
} }
} }
export class UserLimitError extends Error {}
export class ModelError extends Error {}
export class RateLimitError extends Error {}

View File

@@ -18,10 +18,10 @@ import {
AuthError, AuthError,
CreditsError, CreditsError,
MonthlyLimitError, MonthlyLimitError,
SubscriptionError,
UserLimitError, UserLimitError,
ModelError, ModelError,
RateLimitError, FreeUsageLimitError,
SubscriptionUsageLimitError,
} from "./error" } from "./error"
import { createBodyConverter, createStreamPartConverter, createResponseConverter, UsageInfo } from "./provider/provider" import { createBodyConverter, createStreamPartConverter, createResponseConverter, UsageInfo } from "./provider/provider"
import { anthropicHelper } from "./provider/anthropic" import { anthropicHelper } from "./provider/anthropic"
@@ -304,9 +304,9 @@ export async function handler(
{ status: 401 }, { status: 401 },
) )
if (error instanceof RateLimitError || error instanceof SubscriptionError) { if (error instanceof FreeUsageLimitError || error instanceof SubscriptionUsageLimitError) {
const headers = new Headers() const headers = new Headers()
if (error instanceof SubscriptionError && error.retryAfter) { if (error instanceof SubscriptionUsageLimitError && error.retryAfter) {
headers.set("retry-after", String(error.retryAfter)) headers.set("retry-after", String(error.retryAfter))
} }
return new Response( return new Response(
@@ -520,7 +520,7 @@ export async function handler(
timeUpdated: sub.timeFixedUpdated, timeUpdated: sub.timeFixedUpdated,
}) })
if (result.status === "rate-limited") if (result.status === "rate-limited")
throw new SubscriptionError( throw new SubscriptionUsageLimitError(
`Subscription quota exceeded. Retry in ${formatRetryTime(result.resetInSec)}.`, `Subscription quota exceeded. Retry in ${formatRetryTime(result.resetInSec)}.`,
result.resetInSec, result.resetInSec,
) )
@@ -534,7 +534,7 @@ export async function handler(
timeUpdated: sub.timeRollingUpdated, timeUpdated: sub.timeRollingUpdated,
}) })
if (result.status === "rate-limited") if (result.status === "rate-limited")
throw new SubscriptionError( throw new SubscriptionUsageLimitError(
`Subscription quota exceeded. Retry in ${formatRetryTime(result.resetInSec)}.`, `Subscription quota exceeded. Retry in ${formatRetryTime(result.resetInSec)}.`,
result.resetInSec, result.resetInSec,
) )

View File

@@ -1,6 +1,6 @@
import { Database, eq, and, sql, inArray } from "@opencode-ai/console-core/drizzle/index.js" import { Database, eq, and, sql, inArray } from "@opencode-ai/console-core/drizzle/index.js"
import { IpRateLimitTable } from "@opencode-ai/console-core/schema/ip.sql.js" import { IpRateLimitTable } from "@opencode-ai/console-core/schema/ip.sql.js"
import { RateLimitError } from "./error" import { FreeUsageLimitError } from "./error"
import { logger } from "./logger" import { logger } from "./logger"
import { ZenData } from "@opencode-ai/console-core/model.js" import { ZenData } from "@opencode-ai/console-core/model.js"
@@ -34,7 +34,7 @@ export function createRateLimiter(limit: ZenData.RateLimit | undefined, rawIp: s
) )
const total = rows.reduce((sum, r) => sum + r.count, 0) const total = rows.reduce((sum, r) => sum + r.count, 0)
logger.debug(`rate limit total: ${total}`) logger.debug(`rate limit total: ${total}`)
if (total >= limitValue) throw new RateLimitError(`Rate limit exceeded. Please try again later.`) if (total >= limitValue) throw new FreeUsageLimitError(`Rate limit exceeded. Please try again later.`)
}, },
} }
} }