From 52a8ae47fe3270696e821b1c433d51e7bcf4886d Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Sat, 24 Dec 2022 01:07:38 +0100 Subject: [PATCH] feat(api): list servers --- nuxt.config.ts | 3 +++ server/api/list-servers.ts | 10 ++++++++++ server/shared.ts | 13 +++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 server/api/list-servers.ts diff --git a/nuxt.config.ts b/nuxt.config.ts index d712da4f..059fed96 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -107,6 +107,9 @@ export default defineNuxtConfig({ crawlLinks: false, routes: ['/', '/200.html'], }, + routeRules: { + '/list-servers': { swr: true }, + }, }, app: { keepalive: true, diff --git a/server/api/list-servers.ts b/server/api/list-servers.ts new file mode 100644 index 00000000..5077a257 --- /dev/null +++ b/server/api/list-servers.ts @@ -0,0 +1,10 @@ +import { defineEventHandler } from 'h3' +import { listServers } from '~/server/shared' + +let servers: string[] + +export default defineEventHandler(async () => { + if (!servers) + servers = await listServers() + return servers +}) diff --git a/server/shared.ts b/server/shared.ts index 9daca515..98444e53 100644 --- a/server/shared.ts +++ b/server/shared.ts @@ -64,3 +64,16 @@ export async function getApp(server: string) { return null } } + +export async function listServers() { + const keys = await storage.getKeys() + const servers = new Set() + for await (const key of keys) { + if (!key.startsWith('servers:')) + continue + const id = key.split(':').pop()!.replace(/\.json$/, '') + if (id) + servers.add(id) + } + return Array.from(servers).sort() +}