mirror of
https://github.com/OpenSquawk/OpenSquawk
synced 2026-07-31 05:45:35 +08:00
Remove the transitional website auth, admin hooks, SEO and hosted analytics together, then align the app routes, runtime configuration, tests and dependencies. These changes form one atomic cleanup because the filtered app must switch its identity and runtime surfaces as a unit.
136 lines
5.1 KiB
TypeScript
136 lines
5.1 KiB
TypeScript
export default defineNuxtConfig({
|
|
compatibilityDate: '2025-07-15',
|
|
devtools: {enabled: false},
|
|
ssr: false,
|
|
typescript: {
|
|
strict: false,
|
|
typeCheck: true,
|
|
tsConfig: {
|
|
compilerOptions: {
|
|
noUncheckedIndexedAccess: false,
|
|
noImplicitOverride: false,
|
|
lib: ['ESNext', 'dom', 'dom.iterable', 'webworker'],
|
|
types: ['vite/client'],
|
|
},
|
|
vueCompilerOptions: {
|
|
strictTemplates: false,
|
|
},
|
|
},
|
|
},
|
|
modules: [
|
|
'vuetify-nuxt-module',
|
|
'@nuxtjs/tailwindcss',
|
|
'nuxt-aos',
|
|
'@pinia/nuxt',
|
|
'nuxt-mongoose',
|
|
'@nuxt/image',
|
|
],
|
|
aos: {once: true, duration: 600, easing: 'ease-out'},
|
|
app: {head: {link: [{rel: 'icon', type: 'image/jpeg', href: '/img/icon-sm.jpeg'}]}},
|
|
routeRules: {
|
|
'/**': { headers: { 'X-Robots-Tag': 'noindex, nofollow' } },
|
|
},
|
|
runtimeConfig: {
|
|
openaiKey: process.env.OPENAI_API_KEY,
|
|
openaiProject: process.env.OPENAI_PROJECT,
|
|
openaiBaseUrl: process.env.OPENAI_BASE_URL,
|
|
llmModel: process.env.LLM_MODEL || 'gpt-5-nano',
|
|
ttsModel: process.env.TTS_MODEL || 'tts-1',
|
|
defaultVoiceId: process.env.VOICE_ID || 'alloy',
|
|
openaipApiKey: process.env.OPENAIP_API_KEY,
|
|
usePiper: process.env.USE_PIPER,
|
|
piperPort: process.env.PIPER_PORT,
|
|
useSpeaches: process.env.USE_SPEACHES,
|
|
speachesBaseUrl: process.env.SPEACHES_BASE_URL,
|
|
speechModelId: process.env.SPEECH_MODEL_ID,
|
|
// No default: this forwards cockpit telemetry to a third-party webhook.
|
|
// Empty means the forwarding is off, which is what a foreign instance
|
|
// must get.
|
|
domeLightWebhookUrl: process.env.DOME_LIGHT_WEBHOOK_URL || '',
|
|
jwtSecret: process.env.JWT_SECRET,
|
|
mongoose: {
|
|
uri: process.env.MONGODB_URI || 'mongodb://127.0.0.1:27017/opensquawk',
|
|
options: {},
|
|
},
|
|
public: {
|
|
// 'open' = self-hosted, no login at all. 'sso' = identity handed
|
|
// over by authIssuer. Server-side source of truth is
|
|
// server/utils/authMode.ts; this mirror is what the client
|
|
// middleware and auth store branch on.
|
|
authMode: process.env.AUTH_MODE || 'open',
|
|
authIssuer: process.env.NUXT_PUBLIC_AUTH_ISSUER || '',
|
|
radioBackendUrl: process.env.NUXT_PUBLIC_RADIO_BACKEND_URL || 'http://127.0.0.1:8000',
|
|
// Minimum word count for a voice (PTT) transmission to be used. Below
|
|
// this the transcript is treated as STT noise/hallucination and
|
|
// ignored. See the "STT MINIMUM-WORD GATE" in pages/live-atc.vue.
|
|
pttMinWords: Number(process.env.NUXT_PUBLIC_PTT_MIN_WORDS || 2),
|
|
},
|
|
},
|
|
vuetify: {
|
|
vuetifyOptions: {
|
|
theme: {
|
|
defaultTheme: 'opensquawkDark',
|
|
themes: {
|
|
opensquawkDark: {
|
|
dark: true,
|
|
colors: {
|
|
background: '#0b1020',
|
|
surface: '#0a0f1c',
|
|
primary: '#22d3ee',
|
|
secondary: '#0ea5e9',
|
|
info: '#22d3ee',
|
|
success: '#22c55e',
|
|
warning: '#f59e0b',
|
|
error: '#ef4444',
|
|
// Text-Kontrast
|
|
'on-background': '#ffffff',
|
|
'on-surface': '#ffffff'
|
|
}
|
|
},
|
|
// Only used on /live-atc today (see app/composables/usePmTheme.ts) — not the app default.
|
|
opensquawkLight: {
|
|
dark: false,
|
|
colors: {
|
|
background: '#f4f6fb',
|
|
surface: '#ffffff',
|
|
primary: '#0891b2',
|
|
secondary: '#0369a1',
|
|
info: '#0891b2',
|
|
success: '#16a34a',
|
|
warning: '#d97706',
|
|
error: '#dc2626',
|
|
'on-background': '#0f1420',
|
|
'on-surface': '#0f1420'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
css: [
|
|
'~/assets/css/global.css',
|
|
'~/assets/css/opensquawk-glass.css',
|
|
'~/assets/css/learn-theme.css'
|
|
],
|
|
nitro: {
|
|
experimental: {
|
|
websocket: true,
|
|
},
|
|
typescript: {
|
|
strict: false,
|
|
tsConfig: {
|
|
compilerOptions: {
|
|
noUncheckedIndexedAccess: false,
|
|
noImplicitOverride: false,
|
|
lib: ['ESNext', 'dom', 'dom.iterable', 'webworker'],
|
|
types: ['node', 'vite/client'],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
image: {
|
|
provider: process.env.NUXT_IMAGE_PROVIDER || 'ipx',
|
|
},
|
|
|
|
})
|