refactor: improve code formatting and readability across multiple files
This commit is contained in:
@@ -3,10 +3,14 @@ from __future__ import annotations
|
||||
from fastapi import FastAPI, HTTPException
|
||||
from fastapi.testclient import TestClient
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from starlette.requests import Request
|
||||
|
||||
from app.core.error_handling import REQUEST_ID_HEADER, _error_payload, _get_request_id, install_error_handling
|
||||
from app.core.error_handling import (
|
||||
REQUEST_ID_HEADER,
|
||||
_error_payload,
|
||||
_get_request_id,
|
||||
install_error_handling,
|
||||
)
|
||||
|
||||
|
||||
def test_request_validation_error_includes_request_id():
|
||||
|
||||
@@ -46,7 +46,9 @@ async def test_request_id_middleware_ignores_blank_client_header_and_generates_o
|
||||
|
||||
assert isinstance(captured_request_id, str) and captured_request_id
|
||||
# Header should reflect the generated id, not the blank one.
|
||||
values = [v for k, v in response_headers if k.lower() == REQUEST_ID_HEADER.lower().encode("latin-1")]
|
||||
values = [
|
||||
v for k, v in response_headers if k.lower() == REQUEST_ID_HEADER.lower().encode("latin-1")
|
||||
]
|
||||
assert values == [captured_request_id.encode("latin-1")]
|
||||
|
||||
|
||||
@@ -81,5 +83,7 @@ async def test_request_id_middleware_does_not_duplicate_existing_header() -> Non
|
||||
assert start_headers is not None
|
||||
|
||||
# Ensure the middleware did not append a second copy.
|
||||
values = [v for k, v in start_headers if k.lower() == REQUEST_ID_HEADER.lower().encode("latin-1")]
|
||||
values = [
|
||||
v for k, v in start_headers if k.lower() == REQUEST_ID_HEADER.lower().encode("latin-1")
|
||||
]
|
||||
assert values == [b"already"]
|
||||
|
||||
@@ -4,7 +4,7 @@ This package is the **Next.js** web UI for OpenClaw Mission Control.
|
||||
|
||||
- Talks to the Mission Control **backend** over HTTP (typically `http://localhost:8000`).
|
||||
- Uses **React Query** for data fetching.
|
||||
- Can optionally enable **Clerk** authentication (disabled by default unless you provide a *real* Clerk publishable key).
|
||||
- Can optionally enable **Clerk** authentication (disabled by default unless you provide a _real_ Clerk publishable key).
|
||||
|
||||
## Prerequisites
|
||||
|
||||
@@ -73,7 +73,7 @@ Implementation detail: we gate on a conservative regex (`pk_test_...` / `pk_live
|
||||
- `NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL`
|
||||
|
||||
**Important:** `frontend/.env.example` contains placeholder values like `YOUR_PUBLISHABLE_KEY`.
|
||||
Those placeholders are *not* valid keys and are intentionally treated as “Clerk disabled”.
|
||||
Those placeholders are _not_ valid keys and are intentionally treated as “Clerk disabled”.
|
||||
|
||||
## How the frontend talks to the backend
|
||||
|
||||
|
||||
@@ -26,15 +26,23 @@ vi.mock("next/link", () => {
|
||||
// wrappers still render <SignedOut/> from @clerk/nextjs (which crashes in real builds).
|
||||
vi.mock("@clerk/nextjs", () => {
|
||||
return {
|
||||
ClerkProvider: ({ children }: { children: React.ReactNode }) => <>{children}</>,
|
||||
ClerkProvider: ({ children }: { children: React.ReactNode }) => (
|
||||
<>{children}</>
|
||||
),
|
||||
SignedIn: () => {
|
||||
throw new Error("@clerk/nextjs SignedIn rendered (unexpected in secretless mode)");
|
||||
throw new Error(
|
||||
"@clerk/nextjs SignedIn rendered (unexpected in secretless mode)",
|
||||
);
|
||||
},
|
||||
SignedOut: () => {
|
||||
throw new Error("@clerk/nextjs SignedOut rendered without ClerkProvider");
|
||||
},
|
||||
SignInButton: ({ children }: { children: React.ReactNode }) => <>{children}</>,
|
||||
SignOutButton: ({ children }: { children: React.ReactNode }) => <>{children}</>,
|
||||
SignInButton: ({ children }: { children: React.ReactNode }) => (
|
||||
<>{children}</>
|
||||
),
|
||||
SignOutButton: ({ children }: { children: React.ReactNode }) => (
|
||||
<>{children}</>
|
||||
),
|
||||
useAuth: () => ({ isLoaded: true, isSignedIn: false }),
|
||||
useUser: () => ({ isLoaded: true, isSignedIn: false, user: null }),
|
||||
};
|
||||
|
||||
@@ -135,7 +135,11 @@ const SSE_RECONNECT_BACKOFF = {
|
||||
|
||||
type HeartbeatUnit = "s" | "m" | "h" | "d";
|
||||
|
||||
const HEARTBEAT_PRESETS: Array<{ label: string; amount: number; unit: HeartbeatUnit }> = [
|
||||
const HEARTBEAT_PRESETS: Array<{
|
||||
label: string;
|
||||
amount: number;
|
||||
unit: HeartbeatUnit;
|
||||
}> = [
|
||||
{ label: "30s", amount: 30, unit: "s" },
|
||||
{ label: "1m", amount: 1, unit: "m" },
|
||||
{ label: "2m", amount: 2, unit: "m" },
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
// IMPORTANT: keep this file dependency-free (no `"use client"`, no React, no Clerk imports)
|
||||
// so it can be used from both client and server/edge entrypoints.
|
||||
|
||||
export function isLikelyValidClerkPublishableKey(key: string | undefined): key is string {
|
||||
export function isLikelyValidClerkPublishableKey(
|
||||
key: string | undefined,
|
||||
): key is string {
|
||||
if (!key) return false;
|
||||
|
||||
// Clerk publishable keys look like: pk_test_... or pk_live_...
|
||||
|
||||
@@ -4,7 +4,9 @@ import { clerkMiddleware } from "@clerk/nextjs/server";
|
||||
import { isLikelyValidClerkPublishableKey } from "@/auth/clerkKey";
|
||||
|
||||
const isClerkEnabled = () =>
|
||||
isLikelyValidClerkPublishableKey(process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY);
|
||||
isLikelyValidClerkPublishableKey(
|
||||
process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY,
|
||||
);
|
||||
|
||||
export default isClerkEnabled() ? clerkMiddleware() : () => NextResponse.next();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user