193 lines
3.9 KiB
TypeScript
193 lines
3.9 KiB
TypeScript
// 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 =
|
|
<T>() =>
|
|
<U extends T>(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: "refresh",
|
|
pages: {
|
|
login: "/auth/login",
|
|
},
|
|
token: {
|
|
signInResponseTokenPointer: "/token/access",
|
|
type: "Bearer",
|
|
headerName: "Authorization",
|
|
maxAgeInSeconds: 14 * 24 * 60 * 60,
|
|
},
|
|
refreshToken: {
|
|
signInResponseRefreshTokenPointer: "/token/refresh",
|
|
},
|
|
// @ts-ignore
|
|
sessionDataType: {} as IUser,
|
|
endpoints: {
|
|
signUp: { path: "/register", method: "post" },
|
|
signOut: { path: "/logout", method: "post" },
|
|
getSession: {
|
|
path: "/session",
|
|
method: "get",
|
|
},
|
|
refresh: {
|
|
path: "/refresh",
|
|
method: "post",
|
|
},
|
|
},
|
|
},
|
|
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,
|
|
},
|
|
},
|
|
});
|