Tile windowing system

This commit is contained in:
Jack Mechem 2026-05-22 02:19:57 -07:00
parent c6e6c5ca48
commit 43318fb8cd
35 changed files with 4659 additions and 360 deletions

View file

@ -0,0 +1,8 @@
import { NextRequest, NextResponse } from "next/server";
export async function GET(req: NextRequest) {
const hours = req.nextUrl.searchParams.get("hours") ?? "24";
const res = await fetch(`http://localhost:3001/power/history?hours=${hours}`);
if (!res.ok) return NextResponse.json({ error: "Upstream error" }, { status: res.status });
return NextResponse.json(await res.json());
}

View file

@ -1,14 +1,7 @@
import { NextRequest, NextResponse } from "next/server";
import { NextResponse } from "next/server";
export async function GET(req: NextRequest) {
const token = req.cookies.get("token")?.value;
if (!token) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
const res = await fetch("http://localhost:3001/power", {
headers: { Authorization: `Bearer ${token}` },
});
export async function GET() {
const res = await fetch("http://localhost:3001/power");
if (!res.ok) {
return NextResponse.json({ error: "Upstream error" }, { status: res.status });

View file

@ -1,17 +1,10 @@
import { NextRequest, NextResponse } from "next/server";
import { NextResponse } from "next/server";
export async function GET(req: NextRequest) {
const token = req.cookies.get("token")?.value;
if (!token) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
const res = await fetch("http://localhost:3001/stats", {
headers: { Authorization: `Bearer ${token}` },
});
export async function GET() {
const res = await fetch("http://localhost:3001/stats");
if (!res.ok) {
return NextResponse.json({ error: "Unauthorized" }, { status: res.status });
return NextResponse.json({ error: "Upstream error" }, { status: res.status });
}
return NextResponse.json(await res.json());

View file

@ -0,0 +1,19 @@
import { NextRequest, NextResponse } from "next/server";
export async function DELETE(
req: NextRequest,
{ params }: { params: Promise<{ username: string; credId: string }> },
) {
const token = req.cookies.get("token")?.value;
if (!token) return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
const { username, credId } = await params;
const res = await fetch(
`http://localhost:3001/users/${encodeURIComponent(username)}/credentials/${encodeURIComponent(credId)}`,
{ method: "DELETE", headers: { Authorization: `Bearer ${token}` } },
);
if (!res.ok) return NextResponse.json({ error: "Upstream error" }, { status: res.status });
return NextResponse.json({ success: true });
}

View file

@ -0,0 +1,21 @@
import { NextRequest, NextResponse } from "next/server";
export async function POST(
req: NextRequest,
{ params }: { params: Promise<{ username: string }> },
) {
const token = req.cookies.get("token")?.value;
if (!token) return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
await params;
const body = await req.json();
const res = await fetch("http://localhost:3001/auth/register/finish", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});
if (!res.ok) return NextResponse.json({ error: "Registration failed" }, { status: 400 });
return NextResponse.json(await res.json());
}

View file

@ -0,0 +1,22 @@
import { NextRequest, NextResponse } from "next/server";
export async function POST(
req: NextRequest,
{ params }: { params: Promise<{ username: string }> },
) {
const token = req.cookies.get("token")?.value;
if (!token) return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
const { username } = await params;
const { password } = await req.json();
const res = await fetch("http://localhost:3001/auth/register/start", {
method: "POST",
headers: {
Authorization: "Basic " + Buffer.from(`${username}:${password}`).toString("base64"),
},
});
if (!res.ok) return NextResponse.json({ error: "Invalid credentials" }, { status: 401 });
return NextResponse.json(await res.json());
}

13
app/api/users/route.ts Normal file
View file

@ -0,0 +1,13 @@
import { NextRequest, NextResponse } from "next/server";
export async function GET(req: NextRequest) {
const token = req.cookies.get("token")?.value;
if (!token) return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
const res = await fetch("http://localhost:3001/users", {
headers: { Authorization: `Bearer ${token}` },
});
if (!res.ok) return NextResponse.json({ error: "Upstream error" }, { status: res.status });
return NextResponse.json(await res.json());
}