mirror of
https://iceshrimp.dev/limepotato/jormungandr-bite.git
synced 2025-03-04 07:18:50 -07:00
63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
import Router from "@koa/router";
|
|
import Koa, { DefaultState, Context, Middleware } from "koa";
|
|
import { bootstrapControllers, Ctx } from "@iceshrimp/koa-openapi";
|
|
import { ILocalUser } from "@/models/entities/user.js";
|
|
import { AccessToken } from "@/models/entities/access-token.js";
|
|
import { UserController } from "@/server/api/web/controllers/user.js";
|
|
import { RatelimitMiddleware } from "@/server/api/web/middleware/rate-limit.js";
|
|
import { AuthenticationMiddleware } from "@/server/api/web/middleware/auth.js";
|
|
import { ErrorHandlingMiddleware } from "@/server/api/web/middleware/error-handling.js";
|
|
|
|
export type WebRouter = Router<WebState, WebContext>;
|
|
export type WebMiddleware = Middleware<WebState, WebContext>;
|
|
|
|
export interface WebState extends DefaultState {}
|
|
|
|
export interface WebContext extends Context {
|
|
user: ILocalUser | null;
|
|
token: AccessToken | null;
|
|
}
|
|
|
|
export class WebAPI {
|
|
private readonly router: WebRouter;
|
|
|
|
constructor(prefix: string) {
|
|
this.router = new Router<DefaultState, WebContext>({ prefix });
|
|
}
|
|
|
|
public async setup(app: Koa): Promise<void> {
|
|
await bootstrapControllers({
|
|
app: app,
|
|
router: this.router,
|
|
attachRoutes: true,
|
|
errorHandler: ErrorHandlingMiddleware,
|
|
controllers: [
|
|
UserController,
|
|
],
|
|
flow: [
|
|
AuthenticationMiddleware,
|
|
RatelimitMiddleware,
|
|
],
|
|
versions: {
|
|
1: true
|
|
},
|
|
bodyParser: {
|
|
multipart: true,
|
|
},
|
|
openAPI: {
|
|
enabled: true,
|
|
publicURL: '/api/iceshrimp',
|
|
options: {
|
|
title: "Iceshrimp Web API documentation"
|
|
},
|
|
spec: {
|
|
info: {
|
|
title: "Iceshrimp Web API",
|
|
description: "Documentation for using Iceshrimp's Web API",
|
|
version: "1.0.0"
|
|
}
|
|
}
|
|
},
|
|
});
|
|
}
|
|
}
|