From 02cb8bcd4f6880260cba3e5b80596284a9296e85 Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Tue, 27 Aug 2024 18:09:15 +0200 Subject: [PATCH] feat(api): :sparkles: Add Swagger UI and OpenAPI endpoint --- app.ts | 28 ++++++++++++++++++++++++++++ bun.lockb | Bin 282212 -> 282612 bytes package.json | 5 +++-- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/app.ts b/app.ts index 667fd9a1..3bef1c7a 100644 --- a/app.ts +++ b/app.ts @@ -5,6 +5,7 @@ import { secureHeaders } from "@hono/hono/secure-headers"; import { OpenAPIHono } from "@hono/zod-openapi"; /* import { prometheus } from "@hono/prometheus"; */ import { getLogger } from "@logtape/logtape"; +import pkg from "~/package.json" with { type: "application/json" }; import { config } from "~/packages/config-manager/index"; import { agentBans } from "./middlewares/agent-bans"; import { bait } from "./middlewares/bait"; @@ -12,6 +13,7 @@ import { boundaryCheck } from "./middlewares/boundary-check"; import { ipBans } from "./middlewares/ip-bans"; import { logger } from "./middlewares/logger"; import { routes } from "./routes"; +import { swaggerUI } from "@hono/swagger-ui"; import type { ApiRouteExports, HonoEnv } from "./types/api"; export const appFactory = async () => { @@ -96,6 +98,32 @@ export const appFactory = async () => { route.default(app); } + app.doc31("/openapi.json", { + openapi: "3.1.0", + info: { + title: "Versia Server API", + version: pkg.version, + license: { + name: "AGPL-3.0", + url: "https://www.gnu.org/licenses/agpl-3.0.html", + }, + contact: pkg.author, + }, + }); + app.doc("/openapi.3.0.0.json", { + openapi: "3.0.0", + info: { + title: "Versia Server API", + version: pkg.version, + license: { + name: "AGPL-3.0", + url: "https://www.gnu.org/licenses/agpl-3.0.html", + }, + contact: pkg.author, + }, + }); + app.get("/docs", swaggerUI({ url: "/openapi.json" })); + app.options("*", (context) => { return context.text("", 204); }); diff --git a/bun.lockb b/bun.lockb index c4db7f36f31d40f988be916208da03fcad2a3c24..ca3fbb26ee99eadf5be299fb67b1f6e930fbde8e 100755 GIT binary patch delta 45201 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 R4`dzNYAr3+gt_hde*hy08b1I4 delta 44965 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 V=4DDg8{sZaY_S&*W$U}|{vW9eO8o!; diff --git a/package.json b/package.json index bb92b55d..ad4a2080 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "description": "A project to build a federated social network", "author": { "email": "contact@cpluspatch.com", - "name": "CPlusPatch", + "name": "Jesse Wierzbinski", "url": "https://cpluspatch.com" }, "bugs": { @@ -19,7 +19,7 @@ "maintainers": [ { "email": "contact@cpluspatch.com", - "name": "CPlusPatch", + "name": "Jesse Wierzbinski", "url": "https://cpluspatch.com" } ], @@ -100,6 +100,7 @@ "@hackmd/markdown-it-task-lists": "^2.1.4", "@hono/hono": "npm:@jsr/hono__hono@4.5.9", "@hono/prometheus": "^1.0.1", + "@hono/swagger-ui": "^0.4.1", "@hono/zod-openapi": "^0.16.0", "@hono/zod-validator": "^0.2.2", "@inquirer/confirm": "^3.1.22",