From 9298f67c7f80c4df0d53d4dddb400def48df5f1c Mon Sep 17 00:00:00 2001 From: metatroncubeswdev Date: Sat, 17 Oct 2026 21:31:30 -0400 Subject: [PATCH] Stop Autumn-only code paths throwing in local-ledger billing mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two call sites still hard-required AUTUMN_SECRET_KEY regardless of billing mode: the /api/autumn/$ route (autumn-js's client-side hooks hit it after sign-up/on billing screens) and getBillingUsageEvents (Autumn's per-event usage history). Both now degrade gracefully — 404 and an empty list, respectively — when Autumn isn't configured, the same way subscription.ts's credit checks already do, instead of autumn-js throwing "secret key not found" once a request actually reaches it. Co-Authored-By: Claude Sonnet 5 --- src/routes/api/autumn/$.ts | 8 +++++++- src/serverFunctions/billing.ts | 8 ++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/routes/api/autumn/$.ts b/src/routes/api/autumn/$.ts index ebb58b5..60adbc6 100644 --- a/src/routes/api/autumn/$.ts +++ b/src/routes/api/autumn/$.ts @@ -53,7 +53,13 @@ function loadHandler() { } async function handleAutumnRequest(request: Request) { - if (!isHostedAuthMode(env.AUTH_MODE)) { + // 404 in non-hosted modes, and also in hosted mode when Autumn isn't + // configured — a direct-Stripe deployment runs the local-ledger billing + // fallback instead (see subscription.ts) and has no Autumn customer to + // read, so this route has nothing to serve. Checking here, before + // loadHandler(), avoids autumn-js throwing "secret key not found" deep + // inside the handler once a client request reaches it. + if (!isHostedAuthMode(env.AUTH_MODE) || !env.AUTUMN_SECRET_KEY?.trim()) { return new Response("Not found", { status: 404, }); diff --git a/src/serverFunctions/billing.ts b/src/serverFunctions/billing.ts index 1b5b212..2b43136 100644 --- a/src/serverFunctions/billing.ts +++ b/src/serverFunctions/billing.ts @@ -6,6 +6,7 @@ import { } from "@/shared/billing"; import { AppError } from "@/server/lib/errors"; import { + getOptionalEnvValue, getRequiredEnvValue, isHostedServerAuthMode, } from "@/server/lib/runtime-env"; @@ -61,6 +62,13 @@ export const getBillingUsageEvents = createServerFn({ method: "POST" }) return []; } + // No Autumn behind this deployment (local-ledger billing fallback, see + // subscription.ts) — there's no per-event usage history to page through, + // just the running total the ledger keeps. + if (!(await getOptionalEnvValue("AUTUMN_SECRET_KEY"))) { + return []; + } + const events: BillingUsageEvent[] = []; let offset = 0;