Files
web-antrean/nuxt.config.ts

148 lines
4.4 KiB
TypeScript

import vuetify, { transformAssetUrls } from "vite-plugin-vuetify";
export default defineNuxtConfig({
compatibilityDate: "2025-05-15",
devtools: {
enabled: true,
timeline: {
enabled: true,
},
},
app: {
head: {
meta: [
{ name: 'viewport', content: 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' },
{ name: 'mobile-web-app-capable', content: 'yes' },
{ name: 'apple-mobile-web-app-capable', content: 'yes' },
{ name: 'apple-mobile-web-app-status-bar-style', content: 'black-translucent' }
]
},
},
modules: [// "@nuxt/content",
"@nuxt/eslint", "@nuxt/fonts", "@nuxt/icon", "@nuxt/image", "@nuxt/scripts", "@nuxt/test-utils", "@nuxt/ui", "@pinia/nuxt", "@vesp/nuxt-fontawesome", "@nuxtjs/google-fonts", async (_options, nuxt) => {
nuxt.hooks.hook("vite:extendConfig", async (config) => {
// @ts-expect-error
config.plugins.push(vuetify({ autoImport: true }));
// Add HTTPS plugin
try {
// @ts-ignore
const { default: basicSsl } = await import('@vitejs/plugin-basic-ssl');
// @ts-expect-error
config.plugins.push(basicSsl());
// @ts-expect-error
config.server = config.server || {};
// @ts-expect-error
config.server.https = true;
// @ts-expect-error
config.server.host = '10.10.150.114';
// @ts-expect-error
config.server.port = 3000;
} catch (e) {
console.warn('Failed to load HTTPS plugin:', e);
}
});
}, "nuxt-charts"],
fontawesome: {
icons: {
solid: ["dna", "user", "home", "gear"],
regular: ["heart"],
brands: ["github"],
},
},
googleFonts: {
families: {
Inter: [400, 500, 600, 700],
},
display: "swap",
},
runtimeConfig: {
authSecret: process.env.NUXT_AUTH_SECRET,
keycloakClientId: process.env.KEYCLOAK_CLIENT_ID,
keycloakClientSecret: process.env.KEYCLOAK_CLIENT_SECRET,
keycloakIssuer: process.env.KEYCLOAK_ISSUER,
keycloakLogoutUri: process.env.KEYCLOAK_LOGOUT_URI, // Optional: custom logout URI
postLogoutRedirectUri: process.env.POST_LOGOUT_REDIRECT_URI, // Optional: custom post-logout redirect URI
// Session and Oauth durations
sessionDurationHours: parseInt(process.env.SESSION_DURATION_HOURS || '1', 10),
oauthStateDurationMinutes: parseInt(process.env.OAUTH_STATE_DURATION_MINUTES || '10', 10),
// External API
externalApiBaseUrl: process.env.EXTERNAL_API_BASE_URL || 'http://10.10.150.100:8084',
externalApiTimeout: parseInt(process.env.EXTERNAL_API_TIMEOUT || '10000', 10),
public: {
authUrl: process.env.AUTH_ORIGIN,
// authUrl: process.env.AUTH_ORIGIN || "http://10.10.150.175:3001",
// authUrl: process.env.AUTH_ORIGIN || "http://localhost:3001",
wsBaseUrl: process.env.WS_BASE_URL || 'ws://10.10.150.100:8084/api/v1/ws',
ekstrakExpertiseUrl: process.env.EKSTRAK_EXPERTISE_URL || 'http://10.10.123.218/ekstrakexpertise',
verificationApiBaseUrl: process.env.VERIFICATION_API_BASE_URL || 'http://10.10.150.131:8089/api/v1',
},
},
build: {
transpile: ["vuetify"],
},
css: [
"vuetify/lib/styles/main.sass",
"@mdi/font/css/materialdesignicons.min.css",
"~/assets/scss/main.scss",
],
devServer: (() => {
const hostEnv = process.env.HOST || 'localhost';
// Parse HOST if it's a full URL (e.g., "http://10.10.150.175:3000")
let host = hostEnv;
let port = 3000;
try {
const url = new URL(hostEnv);
host = url.hostname;
port = url.port ? parseInt(url.port, 10) : 3000;
} catch {
// If HOST is not a URL, use it as-is (e.g., "10.10.150.175" or "localhost")
host = hostEnv;
}
return {
port: port,
host: host,
https: false, // Enable HTTPS
allowedHosts: ["localhost", "localhost.dev", "10.10.150.175","antrean.dev.rssa.id"]
};
})(),
routeRules: {
'/stats-api/**': {
proxy: 'http://10.10.150.100:8084/api/v1/**'
},
'/visit-api/**': {
proxy: 'http://10.10.150.100:8084/api/v1/**'
},
},
vite: {
css: {
preprocessorOptions: {
scss: {
additionalData: `
@use "sass:math";
@use "sass:map";
@use "~/assets/scss/_variables.scss" as *;
@use "~/assets/scss/_colors.scss" as *;
`,
},
},
},
ssr: {
noExternal: ["vuetify"],
},
},
});