diff --git a/assets/index.css b/assets/index.css index 23db327..580a617 100644 --- a/assets/index.css +++ b/assets/index.css @@ -1,22 +1,28 @@ -@import url('https://fonts.googleapis.com/css2?family=Comfortaa:wght@300..700&family=Noto+Sans+JP:wght@100..900&family=Noto+Sans+SC:wght@100..900&family=Noto+Sans+TC:wght@100..900&family=Roboto+Mono:ital,wght@0,100..700;1,100..700&display=swap'); +@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@100..900&family=Noto+Sans+SC:wght@100..900&family=Noto+Sans+TC:wght@100..900&family=Nunito:ital,wght@0,200..1000;1,200..1000&family=Roboto+Mono:ital,wght@0,100..700;1,100..700&display=swap"); -html, body { - padding: 0; - margin: 0; +html, +body { + padding: 0; + margin: 0; } -html, body, #app, .v-application { - overflow: auto !important; +html, +body, +#app, +.v-application { + overflow: auto !important; - font-family: "Comfortaa", "Noto Sans SC", "Noto Sans TC", "Noto Sans JP", sans-serif !important; - font-optical-sizing: auto; - font-weight: 500; - font-style: normal; + font-family: "Nunito", "Noto Sans SC", "Noto Sans TC", "Noto Sans JP", sans-serif !important; + font-optical-sizing: auto; + font-weight: 500; + font-style: normal; } -.font-mono, code, pre { - font-family: "Roboto Mono", monospace !important; - font-optical-sizing: auto; - font-weight: 500; - font-style: normal; +.font-mono, +code, +pre { + font-family: "Roboto Mono", monospace !important; + font-optical-sizing: auto; + font-weight: 500; + font-style: normal; } diff --git a/generator/goat-language-translator.ts b/generator/goat-language-translator.ts deleted file mode 100644 index 0da80f6..0000000 --- a/generator/goat-language-translator.ts +++ /dev/null @@ -1,20 +0,0 @@ -import fs from "fs" - -const tones = ["↑", "→", "↓", "↗", "↘"] - -const raw = fs.readFileSync("../lang/zh-CN.json", "utf-8") - -const original: { [id: string]: string } = JSON.parse(raw) - -const result: { [id: string]: string } = {} - -for (const key in original) { - let str = "" - for (const char of original[key]) { - const tone = tones[Math.floor(Math.random() * tones.length)] - str += "咩" + tone - } - result[key] = str -} - -fs.writeFileSync("../lang/ml-SG.json", JSON.stringify(result)) diff --git a/lang/tb-SG.json b/lang/tb-SG.json deleted file mode 100644 index 46638e1..0000000 --- a/lang/tb-SG.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brandName": "咩→咩↗咩↘咩↑", - "brandNameFormal": "咩↓咩↓咩→咩↘咩↗咩↗咩↘咩↗咩↓咩↘", - "navProducts": "咩↑咩→", - "navActivity": "咩→咩↑", - "navActivityCaption": "咩→咩↑咩↑咩↑咩↗咩↑咩↗咩↘咩↗咩↑咩→咩↘", - "navGallery": "咩→咩↑", - "navGalleryCaption": "咩↓咩↘咩↓咩↘咩↘咩↓咩↑咩↘咩→咩↗咩↗咩↑咩↗咩↗咩↓咩↗咩→咩↑咩↘咩↑咩↓咩→咩↑咩↗", - "indexIntroduce": "咩↓咩↗咩↓咩↑咩↘咩↓咩↑咩↑咩↗咩↗咩↗咩↓咩↘咩↗咩→咩→咩↓咩↓咩↘咩→咩↓咩↓咩↑咩↑咩→", - "indexProductListHint": "咩↗咩↓咩↘咩↑咩↑咩↘咩↓咩↑咩↘咩↓咩↗咩↘", - "indexActivities": "咩↘咩↗", - "indexActivitiesCaption": "咩↑咩↘咩→咩↗咩↑咩↗咩↓咩→咩↗咩↑咩↓咩→咩↑咩↓咩↓咩↑咩→咩→咩↑咩↗咩→咩→咩↓咩→", - "indexActivitiesHint": "咩↑咩↓咩↘咩→咩→咩↓咩↘咩→咩↘咩↗咩→咩↓", - "userMenuDashboard": "咩↓咩↗咩↗", - "userMenuSignOut": "咩↑咩→", - "userMenuSignIn": "咩→咩→", - "userMenuSignUp": "咩↑咩↘咩→咩↗", - "next": "咩↑咩→咩↗", - "errorOccurred": "咩→咩↑咩↘咩→咩→咩↓咩↓咩↑咩↘咩↘", - "username": "咩→咩↓咩↑", - "nickname": "咩↘咩→咩↘", - "email": "咩↓咩↓咩↓咩↓", - "password": "咩↘咩↓", - "copyright": "咩↑咩↗咩↓咩↗", - "signUpTitle": "咩↘咩→咩↗咩↗", - "signUpCaption": "咩↑咩↓咩↘咩↓咩↑咩→咩↗咩↓咩↘咩↘咩↘咩↓咩↓咩↑咩↑咩↘咩↗咩↘咩↑咩↓咩↘咩↓咩↘咩→咩↗咩↗咩→咩↘咩↘咩↗咩↘咩→咩↑咩→咩↓", - "signUpCompleted": "咩↓咩→咩↓咩↓咩↗咩↗咩→咩↗咩↑咩↗咩→咩→咩↘咩→咩→咩↗咩↑咩↘咩↓咩↓咩↓咩↑咩↗咩↓咩↓咩↑咩↗咩↘咩→咩↓咩↘咩↓咩↗咩↘咩↓咩↗咩↗咩↓咩↑", - "signUpCompletedAction": "咩↘咩↗", - "signInTitle": "咩↑咩↘", - "signInCaption": "咩↗咩↘咩↑咩↑咩↘咩↑咩→咩↘咩→咩→咩↑咩↑咩↑咩↓咩↘咩↓咩↗咩→咩↘咩↓咩↓咩↓咩↑咩→咩↗咩↘咩↘咩→", - "multiFactorCaption": "咩→咩→咩↓咩↓咩↓咩↘咩→咩↗咩↓咩↓咩↑咩↘咩↑咩↓咩↓咩↗咩→咩↗咩↓咩↑", - "multiFactorHint": "咩↓咩→咩↓咩↑咩↑咩↑咩↑", - "multiFactorTypeEmail": "咩↘咩→咩↑咩↓咩↑咩↘咩↓咩↗咩↑", - "signInCompleted": "咩→咩↓", - "signInCompletedCaption": "咩↑咩↘咩↗咩↗咩↑咩→咩↗咩↑咩↓咩↑咩↘咩↑咩↓咩↘咩↓咩↓咩↘咩↘咩↗咩↑咩↗咩→咩↘咩↗咩↑咩→咩↓", - "transferredToSolianHint": "咩↑咩→咩↑咩↑咩→咩→咩↘咩→咩↓咩→咩↑咩↘咩↘咩↑咩↗咩↗咩↓咩→咩↑咩↓咩↓咩↗咩↗咩↑咩→咩↑咩↗咩↓咩→咩↑咩→咩↑咩↘咩↘咩↗咩↘咩↑咩↘咩↘咩↓咩↘咩↑咩↑咩↗咩↑咩↘咩→咩→咩↓咩↘咩↗咩↓咩↑咩↑咩↘", - "personalize": "咩↓咩↑咩↑", - "personalizeCaption": "咩↑咩↓咩↘咩↑咩↓咩↑咩→咩↑咩↘咩↓咩→咩↘咩↗咩→咩↑咩↗咩↑咩→咩↓咩→咩↗咩↓咩↘", - "security": "咩↗咩↓", - "securityCaption": "咩↓咩↗咩→咩→咩↘咩↑咩↘咩↗咩↓咩→咩↘咩→咩→咩↘咩→咩↓咩↗咩↗咩↑咩→咩↓咩↘", - "userActivity": "咩↗咩↗", - "userActivityCaption": "咩↑咩↑咩↗咩↓咩↑咩↗咩↗咩↗咩↓", - "productArchived": "咩↘咩↓咩→", - "callbackHint": "咩↑咩↘咩↓咩↓咩↓咩↓咩↗咩↑咩↘咩↗咩↗咩→咩↗咩↑咩↑咩↓咩↗咩↘咩↑咩↗咩↗咩↓咩↓咩↘咩↑咩↗咩↗咩→咩↓", - "authorizeTitle": "咩↑咩↑咩→咩↑咩↘咩↗", - "authorizeCaption": "咩↓咩↘咩↑咩↓咩↗咩↘咩↓咩↘咩↗咩↘咩↑咩↘咩↓咩→咩↓咩↑咩↗咩↘咩↘咩↗咩↗咩↘咩↓咩↑咩↘咩→咩↑咩↘", - "authorizeErrorHint": "咩↑咩↓咩↘咩→咩↓咩↗咩↗咩↑咩↘咩↘咩↓咩↑咩→咩↘咩↘咩↗咩↓咩↘咩↗咩↓咩↓咩↗咩↗咩↑咩→咩→咩↓咩↘咩↑咩→", - "authorizeRedirectHint": "咩↓咩↓咩→咩↑咩↓咩→咩→咩↑咩↓咩↗咩↘咩↗咩↑咩↗咩→咩↗咩↑", - "authorizeCompleted": "咩↗咩→咩↘", - "authorizeCompletedCaption": "咩↓咩↓咩↗咩↗咩↑咩↘咩↘咩↑咩↗咩↘咩↑咩→咩↓咩↑咩↘咩↗咩↗咩↑咩↘咩↗咩↘咩↘咩↑", - "authorizeCompletedRedirect": "咩→咩↘咩↑咩↓咩↗咩↓咩→咩→咩↗咩↘咩→咩↑咩↘咩→咩↘咩↘咩↓咩↘咩→咩→咩↗咩↘咩↑咩↗咩→咩↗", - "authorizeCompletedRedirectHint": "咩↑咩↑咩↑咩↘咩→咩↗", - "decline": "咩↗咩↘", - "approve": "咩→咩↓" -} diff --git a/nuxt.config.ts b/nuxt.config.ts index fe1b7b4..87f5ee6 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -19,9 +19,7 @@ export default defineNuxtConfig({ }, posts: { includeAppSources: false, - sources: [ - "/api/sitemap/posts", - ], + sources: ["/api/sitemap/posts"], }, }, }, @@ -37,7 +35,6 @@ export default defineNuxtConfig({ locales: [ { code: "en", name: "English", file: "en-US.json" }, { code: "zh-CN", name: "简体中文", file: "zh-CN.json" }, - { code: "tb-SG", name: "音调羊文", file: "tb-SG.json" }, ], lazy: true, langDir: "lang", @@ -67,9 +64,7 @@ export default defineNuxtConfig({ title: "Solsynth LLC", titleTemplate: "%s | Solsynth", meta: [], - link: [ - { rel: "icon", type: "image/png", href: "/icon.png" }, - ], + link: [{ rel: "icon", type: "image/png", href: "/icon.png" }], }, }, @@ -79,11 +74,62 @@ export default defineNuxtConfig({ }, highlight: { theme: { default: "github-light", dark: "github-dark" }, - langs: ["json", "yaml", "toml", "java", "javascript", "astro", "css", "scss", "dart", "go", "typescript", "c", "csharp", - "cpp", "bat", "bash", "sh", "dockerfile", "erlang", "fsharp", "markdown", "log", - "lua", "objc", "swift", "regex", "ruby", "rust", "postcss", "blade", "asciidoc", "cmake", "cobol", "pascal", - "nginx", "angular-html", "angular-ts", "gdscript", "gdshader", "gdresource", "groovy", "gql", "python", - "crystal", "sql", "plsql", "kotlin", "html", "vue", "gleam", "julia", "lisp", "xml", "csv"], + langs: [ + "json", + "yaml", + "toml", + "java", + "javascript", + "astro", + "css", + "scss", + "dart", + "go", + "typescript", + "c", + "csharp", + "cpp", + "bat", + "bash", + "sh", + "dockerfile", + "erlang", + "fsharp", + "markdown", + "log", + "lua", + "objc", + "swift", + "regex", + "ruby", + "rust", + "postcss", + "blade", + "asciidoc", + "cmake", + "cobol", + "pascal", + "nginx", + "angular-html", + "angular-ts", + "gdscript", + "gdshader", + "gdresource", + "groovy", + "gql", + "python", + "crystal", + "sql", + "plsql", + "kotlin", + "html", + "vue", + "gleam", + "julia", + "lisp", + "xml", + "csv", + ], }, locales: ["en", "zh-CN"], defaultLocale: "en", diff --git a/package.json b/package.json index 939e4be..8882515 100644 --- a/package.json +++ b/package.json @@ -11,29 +11,31 @@ }, "dependencies": { "@mdi/font": "^7.4.47", - "@nuxt/content": "^2.13.2", - "@nuxt/image": "^1.8.0", - "@nuxtjs/i18n": "^8.5.5", - "@nuxtjs/sitemap": "^6.1.1", - "@pinia/nuxt": "^0.5.4", + "@nuxt/content": "^2.13.4", + "@nuxt/image": "^1.9.0", + "@nuxt/kit": "^3.16.0", + "@nuxtjs/i18n": "^8.5.6", + "@nuxtjs/sitemap": "^6.1.5", + "@pinia/nuxt": "^0.5.5", "feed": "^4.2.2", - "nuxt": "^3.13.2", + "nuxt": "^3.16.0", "nuxt-gtag": "^2.1.0", - "nuxt-schema-org": "^3.4.0", - "pinia": "^2.2.2", + "nuxt-schema-org": "^3.5.0", + "pinia": "^2.3.1", "rehype-sanitize": "^6.0.0", "rehype-stringify": "^10.0.1", "remark": "^15.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.1", + "unhead": "1.9.0", "unified": "^11.0.5", - "vue": "latest" + "vue": "^3.5.13" }, "devDependencies": { "@unocss/nuxt": "^0.61.9", "@unocss/preset-typography": "^0.61.9", "@unocss/reset": "^0.61.9", - "vite-plugin-vuetify": "^2.0.4", - "vuetify": "^3.7.2" + "vite-plugin-vuetify": "^2.1.0", + "vuetify": "^3.7.16" } } diff --git a/stores/userinfo.ts b/stores/userinfo.ts index dc04c55..06b3ba1 100644 --- a/stores/userinfo.ts +++ b/stores/userinfo.ts @@ -3,11 +3,11 @@ import { ref } from "vue" import { solarFetch } from "~/utils/request" export function useAtk() { - return useCookie("__hydrogen_atk", { path: "/", maxAge: 31556952000 }) + return useCookie("solar_network_atk", { path: "/", maxAge: 31556952000 }) } export function useRtk() { - return useCookie("__hydrogen_rtk", { path: "/", maxAge: 31556952000 }) + return useCookie("solar_network_rtk", { path: "/", maxAge: 31556952000 }) } export function useLoggedInState() { @@ -22,18 +22,23 @@ export const useUserinfo = defineStore("userinfo", () => { let fetchCompleter: Completer | null = null let refreshCompleter: Completer | null = null - const lastRefreshedAt = ref(null) - function setTokenSet(atk: string, rtk: string) { - lastRefreshedAt.value = new Date() useAtk().value = atk useRtk().value = rtk } async function getAtk() { - if (!useLoggedInState().value) return useAtk().value - if (lastRefreshedAt.value != null && Math.floor(Math.abs(Date.now() - lastRefreshedAt.value.getTime()) / 60000) < 3) { - return useAtk().value + const atk = useAtk() + if (!useLoggedInState().value) return atk.value + + const parts = atk.value?.split(".") ?? [] + if (parts.length != 3) return atk.value + + const payload = JSON.parse(atob(parts[1])) + const exp: number = payload["exp"] + + if (exp > Date.now() / 1000) { + return atk.value } if (refreshCompleter != null) { @@ -57,7 +62,7 @@ export const useUserinfo = defineStore("userinfo", () => { throw new Error(err) } else { const out = await res.json() - console.log("[PASSPORT] Access token has been refreshed now.") + console.log("[Passport] Access token has been refreshed now.") setTokenSet(out["access_token"], out["refresh_token"]) refreshCompleter.complete(out["access_token"]) return out["access_token"] @@ -97,12 +102,12 @@ export const useUserinfo = defineStore("userinfo", () => { fetchCompleter = null } - return { userinfo, lastRefreshedAt, isLoggedIn, isReady, fetchCompleter, setTokenSet, getAtk, readProfiles } + return { userinfo, isLoggedIn, isReady, fetchCompleter, setTokenSet, getAtk, readProfiles } }) export class Completer { public readonly promise: Promise - public complete: (value: (PromiseLike | T)) => void + public complete: (value: PromiseLike | T) => void private reject: (reason?: any) => void public constructor() {