// https://nuxt.com/docs/api/configuration/nuxt-config import { IUser } from "@models/user"; import { fileURLToPath } from "url"; // import speedkitHydrate from "nuxt-speedkit/dist/runtime/hydrate.mjs"; export type SessionData = IUser; const cac = { isr: true, headersOnly: true, cache: { headersOnly: true, // integrity: "", varies: ["Content-Length", "Cookie"], maxAge: 60, }, swr: false, }; const stor = { db: { driver: "mongodb", connectionString: process.env.NODE_ENV == "production" ? `mongodb://${process.env.DBUSER}:${process.env.DBPASS}@localhost:27017/${process.env.DBNAME}` : `mongodb://localhost:27017/${process.env.DBNAME}`, databaseName: process.env.DBNAME, collectionName: "cache", }, }; const ct = () => (u: U) => u; export default defineNuxtConfig({ experimental: { watcher: "chokidar-granular", // noScripts: true, treeshakeClientOnly: true, }, devtools: { enabled: true }, modules: [ "vue-recaptcha/nuxt", "@ant-design-vue/nuxt", "@sidebase/nuxt-auth", "@pinia/nuxt", "@vueuse/nuxt", "nuxt-speedkit", // "@nuxtjs/i18n", // "./modules/09.loaded", ], // i18n: { // vueI18n: `./i18n.config.ts`, // }, antd: { extractStyle: true, }, speedkit: { disableNuxtFontaine: true, lazyOffset: { component: "0%", asset: "0%", }, }, css: ["~/public/fonts.css", "~/public/css/all.css"], auth: { baseURL: "/api/auth", provider: { type: "local", pages: { login: "/auth/login", }, token: { signInResponseTokenPointer: "/token", type: "Bearer", headerName: "Authorization", maxAgeInSeconds: 14 * 24 * 60 * 60, // sameSiteAttribute: , }, // @ts-ignore sessionDataType: {} as IUser, endpoints: { signUp: { path: "/register", method: "post" }, signOut: { path: "/logout", method: "post" }, getSession: { path: "/session", method: "get", }, }, }, globalAppMiddleware: false, //@ts-ignore session: { enableRefreshPeriodically: 60 * 60 * 2 * 1000, enableRefreshOnWindowFocus: false, }, }, nitro: { esbuild: { options: { minify: true, // sourceMap: "inline", }, }, preset: process.env.NODE_ENV == "production" ? "bun" : "node-server", }, routeRules: { "/": cac, "/api/**": { cors: true }, "/band/**": cac, "/authors": cac, "/story/**": { swr: true, isr: true, cache: { maxAge: 1800, headersOnly: true, varies: ["Cookie", "Set-Cookie"], }, }, // "/authors": { swr: 0 }, // "/bands": { swr: 0 }, }, // routeRules: { // "/**": { // cache: { // maxAge: 60, // headersOnly: true, // }, // // swr: 60 * 60, // }, // }, // ssr: false, alias: { "@models": fileURLToPath(new URL("./models", import.meta.url)), "@client": fileURLToPath(new URL("./lib/client", import.meta.url)), "@server": fileURLToPath(new URL("./lib/server", import.meta.url)), "@functions": fileURLToPath(new URL("./lib/functions.ts", import.meta.url)), "@dbconfig": fileURLToPath(new URL("./lib/dbconfig.ts", import.meta.url)), }, sourcemap: { server: true, client: true, }, runtimeConfig: { captcha: { secret: process.env.CAPTCHASECRET, key: process.env.CAPTCHAKEY, }, database: { user: process.env.DBUSER, password: process.env.DBPASS, name: process.env.DBNAME, uri: `mongodb://${process.env.DB}`, }, jwt: process.env.JWT, public: { recaptcha: { v2SiteKey: process.env.CAPTCHAKEY, }, auth: { computed: { origin: "127.0.0.1", }, }, // apiBase: "/api" }, nodebb: { masterToken: process.env.nbb_bearer, }, }, // components: { // transform: (str) => // }, typescript: { tsConfig: { exclude: ["./.nuxt/types/auth.d.ts"], }, }, imports: { autoImport: true, dirsScanOptions: { types: true, }, }, });