152 lines
2.8 KiB
TypeScript
152 lines
2.8 KiB
TypeScript
// https://nuxt.com/docs/api/configuration/nuxt-config
|
|
import { IUser } from "@models/user";
|
|
// 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 ct =
|
|
<T>() =>
|
|
<U extends T>(u: U) =>
|
|
u;
|
|
export default defineNuxtConfig({
|
|
experimental: {
|
|
watcher: "chokidar-granular",
|
|
// noScripts: true,
|
|
treeshakeClientOnly: true,
|
|
},
|
|
devtools: { enabled: false },
|
|
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`,
|
|
},
|
|
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: "/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: "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,
|
|
sourcemap: {
|
|
server: true,
|
|
client: true,
|
|
},
|
|
runtimeConfig: {
|
|
captcha: {
|
|
secret: process.env.CAPTCHASECRET,
|
|
key: process.env.CAPTCHAKEY,
|
|
},
|
|
database: {
|
|
user: process.env.DBUSER,
|
|
password: process.env.DBPASS,
|
|
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) =>
|
|
// },
|
|
});
|