Yogesh
initial deploy
cd8bd0a
Raw
History Blame Contribute Delete
4.72 kB
import { NextResponse } from "next/server";
import {
getAllAliases,
getCustomAliases,
getBuiltInAliases,
setCustomAliases,
addCustomAlias,
removeCustomAlias,
} from "@omniroute/open-sse/services/modelDeprecation.ts";
import { getSettings, updateSettings } from "@/lib/db/settings";
import {
addModelAliasSchema,
removeModelAliasSchema,
updateModelAliasesSchema,
} from "@/shared/validation/schemas";
import { isValidationFailure, validateBody } from "@/shared/validation/helpers";
import { requireManagementAuth } from "@/lib/api/requireManagementAuth";
/**
* GET /api/settings/model-aliases
* Returns the full alias map, separated into built-in and custom.
*/
export async function GET(request: Request) {
const authError = await requireManagementAuth(request);
if (authError) return authError;
try {
return NextResponse.json({
builtIn: getBuiltInAliases(),
custom: getCustomAliases(),
all: getAllAliases(),
});
} catch (error) {
console.error("[API ERROR] /api/settings/model-aliases GET:", error);
return NextResponse.json({ error: "Failed to get model aliases" }, { status: 500 });
}
}
/**
* PUT /api/settings/model-aliases
* Update the custom aliases map.
* Body: { aliases: { "old-model": "new-model", ... } }
*/
export async function PUT(request: Request) {
const authError = await requireManagementAuth(request);
if (authError) return authError;
let rawBody;
try {
rawBody = await request.json();
} catch {
return NextResponse.json(
{
error: {
message: "Invalid request",
details: [{ field: "body", message: "Invalid JSON body" }],
},
},
{ status: 400 }
);
}
try {
const validation = validateBody(updateModelAliasesSchema, rawBody);
if (isValidationFailure(validation)) {
return NextResponse.json({ error: validation.error }, { status: 400 });
}
const { aliases } = validation.data;
setCustomAliases(aliases);
await updateSettings({ modelAliases: aliases });
return NextResponse.json({ success: true, custom: getCustomAliases() });
} catch (error) {
console.error("[API ERROR] /api/settings/model-aliases PUT:", error);
return NextResponse.json({ error: "Failed to update model aliases" }, { status: 500 });
}
}
/**
* POST /api/settings/model-aliases
* Add a single custom alias.
* Body: { from: "old-model", to: "new-model" }
*/
export async function POST(request: Request) {
const authError = await requireManagementAuth(request);
if (authError) return authError;
let rawBody;
try {
rawBody = await request.json();
} catch {
return NextResponse.json(
{
error: {
message: "Invalid request",
details: [{ field: "body", message: "Invalid JSON body" }],
},
},
{ status: 400 }
);
}
try {
const validation = validateBody(addModelAliasSchema, rawBody);
if (isValidationFailure(validation)) {
return NextResponse.json({ error: validation.error }, { status: 400 });
}
const { from, to } = validation.data;
addCustomAlias(from, to);
await updateSettings({ modelAliases: getCustomAliases() });
return NextResponse.json({ success: true, custom: getCustomAliases() });
} catch (error) {
console.error("[API ERROR] /api/settings/model-aliases POST:", error);
return NextResponse.json({ error: "Failed to add alias" }, { status: 500 });
}
}
/**
* DELETE /api/settings/model-aliases
* Remove a custom alias.
* Body: { from: "old-model" }
*/
export async function DELETE(request: Request) {
const authError = await requireManagementAuth(request);
if (authError) return authError;
let rawBody;
try {
rawBody = await request.json();
} catch {
return NextResponse.json(
{
error: {
message: "Invalid request",
details: [{ field: "body", message: "Invalid JSON body" }],
},
},
{ status: 400 }
);
}
try {
const validation = validateBody(removeModelAliasSchema, rawBody);
if (isValidationFailure(validation)) {
return NextResponse.json({ error: validation.error }, { status: 400 });
}
const { from } = validation.data;
const removed = removeCustomAlias(from);
if (!removed) {
return NextResponse.json({ error: "Alias not found" }, { status: 404 });
}
await updateSettings({ modelAliases: getCustomAliases() });
return NextResponse.json({ success: true, custom: getCustomAliases() });
} catch (error) {
console.error("[API ERROR] /api/settings/model-aliases DELETE:", error);
return NextResponse.json({ error: "Failed to remove alias" }, { status: 500 });
}
}