3dc0bba6f42943f0a46c3ab75903b1425e678efc
`POST /api/auth/login` answered 502 platform_unreachable — "Could not reach Loyaly. Check your connection and try again." — for a fault that is entirely ours and that no connection check can fix. `buildUrl()` is where LOYALY_API_BASE is read, and it was called INSIDE the try block whose catch turns a failed fetch into UpstreamError(0, 'network'). So the config guard threw, the catch swallowed it, and "nobody set LOYALY_API_BASE" arrived at the route indistinguishable from "the platform is down". Measured on the pre-fix code, all of these produced the identical UpstreamError(status=0, code=network): LOYALY_API_BASE unset LOYALY_API_BASE=https://platform.loyaly.ai (the known-wrong host) LOYALY_API_BASE=not-a-url nothing listening on the far end (the only real network failure) The message survived, so the truth was reachable, but only by reading the prose of an error the code had already classified as a network fault — and the login route had by then replaced it with advice about the user's wifi. ConfigError now exists for this, buildUrl is resolved before the try in both upstreamRequest and upstreamRaw, and callers branch on it: 500 misconfigured, not 502 unreachable. 500 is the honest status — a bad gateway says the thing upstream is unwell, and this server has not got as far as having an upstream. Verified after the change: the four config faults raise ConfigError, and a dead port still raises UpstreamError(0, 'network'). The detail is logged, never returned. It names an environment variable and the hosts this console accepts, which belongs in the Dokploy log pane rather than in an anonymous sign-in form's response body. `[loyaly] configuration error:` is now the line to grep for. Also fixes failJson labelling a 5xx as `unauthorized` in the envelope: the code is derived from the status now, so a misconfigured server can no longer tell a browser the password was wrong. That one costs somebody a password reset for a fault they cannot see. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This is a Next.js project bootstrapped with create-next-app.
Getting Started
First, run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
Open http://localhost:3000 with your browser to see the result.
You can start editing the page by modifying app/page.tsx. The page auto-updates as you edit the file.
This project uses next/font to automatically optimize and load Geist, a new font family for Vercel.
Learn More
To learn more about Next.js, take a look at the following resources:
- Next.js Documentation - learn about Next.js features and API.
- Learn Next.js - an interactive Next.js tutorial.
You can check out the Next.js GitHub repository - your feedback and contributions are welcome!
Deploy on Vercel
The easiest way to deploy your Next.js app is to use the Vercel Platform from the creators of Next.js.
Check out our Next.js deployment documentation for more details.
Description
Languages
TypeScript
95.4%
CSS
2.9%
JavaScript
0.9%
Dockerfile
0.6%
Shell
0.2%