feat: serve Swagger UI
This commit is contained in:
parent
d3452a4ac7
commit
8ade73fc23
|
@ -7,7 +7,8 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ajv": "^8.13.0",
|
"ajv": "^8.13.0",
|
||||||
"fastify": "^4.27.0",
|
"fastify": "^4.27.0",
|
||||||
"typescript-eslint": "^7.8.0"
|
"typescript-eslint": "^7.8.0",
|
||||||
|
"yaml": "^2.4.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/eslint": "^8.56.10",
|
"@types/eslint": "^8.56.10",
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
import { FastifyPluginAsync } from 'fastify';
|
import { FastifyPluginAsync } from 'fastify';
|
||||||
import deleter from './delete.js';
|
import deleter from './delete.js';
|
||||||
|
import openapi from './openapi.js';
|
||||||
import upload from './upload.js';
|
import upload from './upload.js';
|
||||||
import index from './indexpage.js';
|
import index from './indexpage.js';
|
||||||
import list from './list.js';
|
import list from './list.js';
|
||||||
import get from './get.js';
|
import get from './get.js';
|
||||||
|
|
||||||
export default (async function (fastify) {
|
export default (async function (fastify) {
|
||||||
|
await fastify.register(openapi);
|
||||||
await fastify.register(deleter);
|
await fastify.register(deleter);
|
||||||
await fastify.register(upload);
|
await fastify.register(upload);
|
||||||
await fastify.register(index);
|
await fastify.register(index);
|
||||||
|
|
|
@ -9,17 +9,18 @@ const page = `<!DOCTYPE html>
|
||||||
<body>
|
<body>
|
||||||
<h1>You have reached the backup server!</h1>
|
<h1>You have reached the backup server!</h1>
|
||||||
<p>This is the backup server! If you are a regular user, you wouldn't find this place very interesting and might as well close this page now.</p>
|
<p>This is the backup server! If you are a regular user, you wouldn't find this place very interesting and might as well close this page now.</p>
|
||||||
<p>If you are a sysadmin, please refer to <a href='https://git.blek.codes/blek/backups.git'>API docs</a> for more info</p>
|
<p>If you are a sysadmin, please refer to <a href='https://git.blek.codes/blek/backups.git'>API docs</a> or <a href='/openapi'>OpenAPI reference</a> for more info</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
`
|
`
|
||||||
.replaceAll('\n', '')
|
.replaceAll('\n', '')
|
||||||
.replaceAll(/ +/gm, ' ')
|
.replaceAll(/ +/gm, ' ')
|
||||||
.replaceAll(' <', '<');
|
.replaceAll(' <', '<')
|
||||||
|
.replaceAll('<a', ' <a');
|
||||||
|
|
||||||
export default (async function (fastify) {
|
export default (async function (fastify) {
|
||||||
fastify.get('/', async (_req, rep) => {
|
fastify.get('/', async (_req, rep) => {
|
||||||
rep.type('text/html; charset=utf8');
|
rep.type('text/html; charset=utf-8');
|
||||||
return page;
|
return page;
|
||||||
});
|
});
|
||||||
fastify.get('/favicon.ico', async (req, rep) => {
|
fastify.get('/favicon.ico', async (req, rep) => {
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
import { type FastifyPluginAsync } from 'fastify';
|
||||||
|
import fs from 'fs';
|
||||||
|
import yaml from 'yaml';
|
||||||
|
|
||||||
|
const page = `<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Backup server API reference</title>
|
||||||
|
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@5.11.0/swagger-ui.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="swagger-ui"></div>
|
||||||
|
<script src="https://unpkg.com/swagger-ui-dist@5.11.0/swagger-ui-bundle.js" crossorigin></script>
|
||||||
|
<script>window.onload=()=>window.ui=SwaggerUIBundle({url:'/openapi.json',dom_id:'#swagger-ui'})</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
`
|
||||||
|
.replaceAll('\n', '')
|
||||||
|
.replaceAll(/ +/gm, ' ')
|
||||||
|
.replaceAll(' <', '<');
|
||||||
|
|
||||||
|
const openapiYml = yaml.parse(fs.readFileSync('openapi.yml').toString('utf-8'));
|
||||||
|
|
||||||
|
export default (async function (fastify) {
|
||||||
|
fastify.get('/openapi', async (req, rep) => {
|
||||||
|
rep.type('text/html; charset=utf-8');
|
||||||
|
return page;
|
||||||
|
});
|
||||||
|
|
||||||
|
fastify.get('/openapi.json', async (req, rep) => {
|
||||||
|
rep.type('application/json; charset=utf-8');
|
||||||
|
return openapiYml;
|
||||||
|
});
|
||||||
|
} as FastifyPluginAsync);
|
|
@ -1361,6 +1361,11 @@ word-wrap@^1.2.5:
|
||||||
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
|
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
|
||||||
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
|
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
|
||||||
|
|
||||||
|
yaml@^2.4.2:
|
||||||
|
version "2.4.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.2.tgz#7a2b30f2243a5fc299e1f14ca58d475ed4bc5362"
|
||||||
|
integrity sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==
|
||||||
|
|
||||||
yocto-queue@^0.1.0:
|
yocto-queue@^0.1.0:
|
||||||
version "0.1.0"
|
version "0.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
||||||
|
|
Loading…
Reference in New Issue