diff --git a/.vscode/settings.json b/.vscode/settings.json index fe347821..3398560f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,5 @@ "typescript.tsdk": "node_modules/typescript/lib", "jest.jestCommandLine": "/home/jessew/.bun/bin/bun test", "jest.rootPath": ".", - "conventionalCommits.scopes": ["database"] + "conventionalCommits.scopes": ["database", "frontend"] } diff --git a/bun.lockb b/bun.lockb index 72a0961f..66275428 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/config/config.example.toml b/config/config.example.toml index 5c1651ad..f123bd8f 100644 --- a/config/config.example.toml +++ b/config/config.example.toml @@ -86,6 +86,10 @@ bait_ips = ["127.0.0.1", "::1"] # User agents to send bait data to (regex format) bait_user_agents = ["curl", "wget"] +[frontend] +# The URL to reach the frontend at (should be on a local network) +url = "http://localhost:3000" + [smtp] # SMTP server to use for sending emails server = "smtp.example.com" diff --git a/index.ts b/index.ts index 7690584f..4f99267c 100644 --- a/index.ts +++ b/index.ts @@ -9,7 +9,6 @@ import { createServer } from "~server"; const timeAtStart = performance.now(); -// If imported as a module, redirect logs to /dev/null to not pollute console (e.g. in tests) await dualLogger.log(LogLevel.INFO, "Lysand", "Starting Lysand..."); await setupDatabase(dualLogger); @@ -33,6 +32,7 @@ try { await dualLogger.logError(LogLevel.CRITICAL, "Database", error); process.exit(1); } + const server = createServer(config, dualLogger, true); await dualLogger.log( @@ -49,4 +49,22 @@ await dualLogger.log( `Database is online, now serving ${postCount} posts`, ); +// Check if frontend is reachable +const response = await fetch(new URL("/", config.frontend.url)) + .then((res) => res.ok) + .catch(() => false); + +if (!response) { + await dualLogger.log( + LogLevel.ERROR, + "Server", + `Frontend is unreachable at ${config.frontend.url}`, + ); + await dualLogger.log( + LogLevel.ERROR, + "Server", + "Please ensure the frontend is online and reachable", + ); +} + export { config, server }; diff --git a/packages/config-manager/config.type.ts b/packages/config-manager/config.type.ts index 85a486c9..9f6e7097 100644 --- a/packages/config-manager/config.type.ts +++ b/packages/config-manager/config.type.ts @@ -120,6 +120,11 @@ export interface Config { }; }; + frontend: { + /** @default "http://localhost:3000" */ + url: string; + }; + smtp: { /** @default "smtp.example.com" */ server: string; @@ -427,6 +432,9 @@ export const defaultConfig: Config = { bait_user_agents: ["curl", "wget"], }, }, + frontend: { + url: "http://localhost:3000", + }, smtp: { server: "smtp.example.com", port: 465, diff --git a/packages/frontend/.gitignore b/packages/frontend/.gitignore deleted file mode 100644 index 4a7f73a2..00000000 --- a/packages/frontend/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Nuxt dev/build outputs -.output -.data -.nuxt -.nitro -.cache -dist - -# Node dependencies -node_modules - -# Logs -logs -*.log - -# Misc -.DS_Store -.fleet -.idea - -# Local env files -.env -.env.* -!.env.example diff --git a/packages/frontend/README.md b/packages/frontend/README.md deleted file mode 100644 index d0b02976..00000000 --- a/packages/frontend/README.md +++ /dev/null @@ -1 +0,0 @@ -# FE \ No newline at end of file diff --git a/packages/frontend/app.vue b/packages/frontend/app.vue deleted file mode 100644 index 207756e3..00000000 --- a/packages/frontend/app.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - \ No newline at end of file diff --git a/packages/frontend/components/LoginInput.vue b/packages/frontend/components/LoginInput.vue deleted file mode 100644 index a5a3ae45..00000000 --- a/packages/frontend/components/LoginInput.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - \ No newline at end of file diff --git a/packages/frontend/composables/useConfig.ts b/packages/frontend/composables/useConfig.ts deleted file mode 100644 index 0a10859e..00000000 --- a/packages/frontend/composables/useConfig.ts +++ /dev/null @@ -1,27 +0,0 @@ -export const useConfig = async () => { - let host = useRequestHeader("X-Forwarded-Host"); - - if (!host && process.server) { - host = process.env.BUILD_HOST; - } - - if (!host?.includes("http")) { - // On server, this will be some kind of localhost - host = `http://${host}`; - } - - if (process.client) { - host = useRequestURL().origin.toString(); - } - - if (!host) { - throw createError({ - statusCode: 500, - statusMessage: "No X-Forwarded-Host header found", - }); - } - - return await fetch(new URL("/api/_fe/config", host)).then((res) => - res.json(), - ); -}; diff --git a/packages/frontend/constants.ts b/packages/frontend/constants.ts deleted file mode 100644 index 5ef419d9..00000000 --- a/packages/frontend/constants.ts +++ /dev/null @@ -1,12 +0,0 @@ -export const recommendedClients = [ - { - name: "Soapbox", - icon: "https://soapbox.pub/assets/logo.svg", - link: "https://fe.soapbox.pub/", - }, - { - name: "Megalodon", - icon: "https://sk22.github.io/megalodon/mastodon/src/main/res/mipmap-xhdpi/ic_launcher_round.png", - link: "https://sk22.github.io/megalodon/", - }, -]; diff --git a/packages/frontend/emails/welcome.vue b/packages/frontend/emails/welcome.vue deleted file mode 100644 index 4973afc6..00000000 --- a/packages/frontend/emails/welcome.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - \ No newline at end of file diff --git a/packages/frontend/nuxt.config.ts b/packages/frontend/nuxt.config.ts deleted file mode 100644 index 8bba90cc..00000000 --- a/packages/frontend/nuxt.config.ts +++ /dev/null @@ -1,62 +0,0 @@ -// import { loadConfig } from "c12"; -import pkg from "../../package.json"; -// import { defaultConfig } from "config-manager/config.type"; - -// https://nuxt.com/docs/api/configuration/nuxt-config -export default defineNuxtConfig({ - modules: [ - "@nuxtjs/seo", - "@nuxtjs/tailwindcss", - "@vueuse/nuxt", - "@vue-email/nuxt", - ], - app: { - head: { - link: [ - { - rel: "icon", - href: "/favicon.png", - type: "image/png", - }, - ], - htmlAttrs: { lang: "en-us" }, - }, - }, - nitro: { - preset: "bun", - minify: true, - prerender: { - failOnError: true, - }, - }, - devServer: { - port: 5173, - }, - schemaOrg: { - enabled: false, - }, - ogImage: { - enabled: false, - }, - vite: { - define: { - __VERSION__: JSON.stringify(pkg.version), - }, - server: { - hmr: { - clientPort: 5173, - }, - }, - }, - runtimeConfig: { - public: { - language: "en-US", - titleSeparator: "·", - siteName: "Lysand", - trailingSlash: true, - }, - }, - site: { - url: "https://social.lysand.org", - }, -}); diff --git a/packages/frontend/package.json b/packages/frontend/package.json deleted file mode 100644 index 815aeb67..00000000 --- a/packages/frontend/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "nuxt-app", - "private": true, - "type": "module", - "scripts": { - "build": "nuxt build", - "dev": "nuxt dev", - "generate": "nuxt generate", - "preview": "nuxt preview", - "postinstall": "nuxt prepare" - }, - "dependencies": { - "c12": "^1.10.0", - "nuxt": "^3.11.2", - "vue": "^3.4.21", - "vue-router": "^4.3.0", - "shiki": "^1.2.4" - }, - "devDependencies": { - "@tailwindcss/forms": "^0.5.7", - "@vue-email/nuxt": "^0.8.19", - "@nuxtjs/seo": "^2.0.0-rc.10", - "@nuxtjs/tailwindcss": "^6.11.4" - } -} diff --git a/packages/frontend/pages/[username]/[uuid].vue b/packages/frontend/pages/[username]/[uuid].vue deleted file mode 100644 index 93c1d8bc..00000000 --- a/packages/frontend/pages/[username]/[uuid].vue +++ /dev/null @@ -1,72 +0,0 @@ - - - - - \ No newline at end of file diff --git a/packages/frontend/pages/[username]/index.vue b/packages/frontend/pages/[username]/index.vue deleted file mode 100644 index 29998e77..00000000 --- a/packages/frontend/pages/[username]/index.vue +++ /dev/null @@ -1,83 +0,0 @@ - - - - - \ No newline at end of file diff --git a/packages/frontend/pages/index.vue b/packages/frontend/pages/index.vue deleted file mode 100644 index e847fe44..00000000 --- a/packages/frontend/pages/index.vue +++ /dev/null @@ -1,72 +0,0 @@ - - - \ No newline at end of file diff --git a/packages/frontend/pages/oauth/authorize.vue b/packages/frontend/pages/oauth/authorize.vue deleted file mode 100644 index c4fc7e6e..00000000 --- a/packages/frontend/pages/oauth/authorize.vue +++ /dev/null @@ -1,114 +0,0 @@ - - - \ No newline at end of file diff --git a/packages/frontend/pages/oauth/redirect.vue b/packages/frontend/pages/oauth/redirect.vue deleted file mode 100644 index 16478346..00000000 --- a/packages/frontend/pages/oauth/redirect.vue +++ /dev/null @@ -1,175 +0,0 @@ - - - \ No newline at end of file diff --git a/packages/frontend/pages/register/index.vue b/packages/frontend/pages/register/index.vue deleted file mode 100644 index 562fede8..00000000 --- a/packages/frontend/pages/register/index.vue +++ /dev/null @@ -1,176 +0,0 @@ -