import { existsSync, readFileSync } from 'node:fs' import { dirname, join } from 'node:path' import { fileURLToPath } from 'node:url' const _dirname = dirname(fileURLToPath(import.meta.url)) const pkgPath = join(_dirname, 'package.json') const pkg = existsSync(pkgPath) ? JSON.parse(readFileSync(pkgPath, 'utf8')) : {} const devKey = join(_dirname, '.dev-certs', 'key.pem') const devCert = join(_dirname, '.dev-certs', 'cert.pem') const useDevHttps = existsSync(devKey) && existsSync(devCert) export default defineNuxtConfig({ modules: ['@nuxtjs/tailwindcss', '@nuxt/test-utils/module', '@nuxt/icon', '@nuxt/eslint'], devtools: { enabled: true }, app: { head: { title: 'KestrelOS', link: [ { rel: 'preconnect', href: 'https://fonts.googleapis.com' }, { rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin: '' }, { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&display=swap' }, ], meta: [ { charset: 'utf-8' }, { name: 'viewport', content: 'width=device-width, initial-scale=1' }, { name: 'description', content: 'Tactical Operations Center for OSINT Feeds' }, ], }, }, runtimeConfig: { public: { version: pkg.version ?? '', }, }, devServer: { host: '0.0.0.0', port: 3000, ...(useDevHttps ? { https: { key: devKey, cert: devCert } } : {}), }, future: { compatibilityVersion: 4 }, compatibilityDate: '2024-11-01', nitro: { preset: 'node-server', serveStatic: true, routeRules: { '/**': { headers: { 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'DENY', 'Referrer-Policy': 'strict-origin-when-cross-origin', 'Permissions-Policy': 'geolocation=(self), microphone=(self), camera=(self)', }, }, }, }, eslint: { config: { tooling: true, stylistic: true, }, }, })