firefish/packages/backend/src/server/api/endpoints/admin/relays/add.ts
ThatOneCalculator 7c2dabd047
no more eslint
2023-01-12 20:54:33 -08:00

67 lines
1.3 KiB
TypeScript

import { URL } from "node:url";
import define from "../../../define.js";
import { addRelay } from "@/services/relay.js";
import { ApiError } from "../../../error.js";
export const meta = {
tags: ["admin"],
requireCredential: true,
requireModerator: true,
errors: {
invalidUrl: {
message: "Invalid URL",
code: "INVALID_URL",
id: "fb8c92d3-d4e5-44e7-b3d4-800d5cef8b2c",
},
},
res: {
type: "object",
optional: false,
nullable: false,
properties: {
id: {
type: "string",
optional: false,
nullable: false,
format: "id",
},
inbox: {
description: "URL of the inbox, must be a https scheme URL",
type: "string",
optional: false,
nullable: false,
format: "url",
},
status: {
type: "string",
optional: false,
nullable: false,
default: "requesting",
enum: ["requesting", "accepted", "rejected"],
},
},
},
} as const;
export const paramDef = {
type: "object",
properties: {
inbox: { type: "string" },
},
required: ["inbox"],
} as const;
export default define(meta, paramDef, async (ps, user) => {
try {
if (new URL(ps.inbox).protocol !== "https:") throw new Error("https only");
} catch {
throw new ApiError(meta.errors.invalidUrl);
}
return await addRelay(ps.inbox);
});