From 7d5be1556ad8d777b532e49baba5b569e01e39b3 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 10 Feb 2026 13:07:06 -0500 Subject: [PATCH] wip: zen --- packages/console/app/src/routes/zen/util/error.ts | 8 ++++---- packages/console/app/src/routes/zen/util/handler.ts | 12 ++++++------ .../console/app/src/routes/zen/util/rateLimiter.ts | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/console/app/src/routes/zen/util/error.ts b/packages/console/app/src/routes/zen/util/error.ts index b97b73430..a1393eb7f 100644 --- a/packages/console/app/src/routes/zen/util/error.ts +++ b/packages/console/app/src/routes/zen/util/error.ts @@ -1,13 +1,13 @@ export class AuthError extends Error {} export class CreditsError 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 constructor(message: string, retryAfter?: number) { super(message) this.retryAfter = retryAfter } } -export class UserLimitError extends Error {} -export class ModelError extends Error {} -export class RateLimitError extends Error {} diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index af2a8c3e6..8e8c450a6 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -18,10 +18,10 @@ import { AuthError, CreditsError, MonthlyLimitError, - SubscriptionError, UserLimitError, ModelError, - RateLimitError, + FreeUsageLimitError, + SubscriptionUsageLimitError, } from "./error" import { createBodyConverter, createStreamPartConverter, createResponseConverter, UsageInfo } from "./provider/provider" import { anthropicHelper } from "./provider/anthropic" @@ -304,9 +304,9 @@ export async function handler( { status: 401 }, ) - if (error instanceof RateLimitError || error instanceof SubscriptionError) { + if (error instanceof FreeUsageLimitError || error instanceof SubscriptionUsageLimitError) { const headers = new Headers() - if (error instanceof SubscriptionError && error.retryAfter) { + if (error instanceof SubscriptionUsageLimitError && error.retryAfter) { headers.set("retry-after", String(error.retryAfter)) } return new Response( @@ -520,7 +520,7 @@ export async function handler( timeUpdated: sub.timeFixedUpdated, }) if (result.status === "rate-limited") - throw new SubscriptionError( + throw new SubscriptionUsageLimitError( `Subscription quota exceeded. Retry in ${formatRetryTime(result.resetInSec)}.`, result.resetInSec, ) @@ -534,7 +534,7 @@ export async function handler( timeUpdated: sub.timeRollingUpdated, }) if (result.status === "rate-limited") - throw new SubscriptionError( + throw new SubscriptionUsageLimitError( `Subscription quota exceeded. Retry in ${formatRetryTime(result.resetInSec)}.`, result.resetInSec, ) diff --git a/packages/console/app/src/routes/zen/util/rateLimiter.ts b/packages/console/app/src/routes/zen/util/rateLimiter.ts index 90e10479c..fafbc06e9 100644 --- a/packages/console/app/src/routes/zen/util/rateLimiter.ts +++ b/packages/console/app/src/routes/zen/util/rateLimiter.ts @@ -1,6 +1,6 @@ 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 { RateLimitError } from "./error" +import { FreeUsageLimitError } from "./error" import { logger } from "./logger" 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) 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.`) }, } }