From 46346679abd7afbbacea3a70fc407539bb23432e Mon Sep 17 00:00:00 2001 From: Innei Date: Fri, 11 Jul 2025 15:52:37 +0800 Subject: [PATCH] chore: add nanoid package and update api-fetch to use no-store cache Signed-off-by: Innei --- apps/desktop/layer/renderer/src/lib/api-fetch.ts | 5 ++++- apps/mobile/src/lib/api-fetch.ts | 5 ++++- packages/internal/shared/package.json | 1 + packages/internal/shared/src/auth.ts | 11 ++++++++++- packages/internal/store/package.json | 1 + packages/internal/store/src/user/store.ts | 9 ++++++--- pnpm-lock.yaml | 6 ++++++ 7 files changed, 32 insertions(+), 6 deletions(-) diff --git a/apps/desktop/layer/renderer/src/lib/api-fetch.ts b/apps/desktop/layer/renderer/src/lib/api-fetch.ts index 0b4d8159f..b862302b4 100644 --- a/apps/desktop/layer/renderer/src/lib/api-fetch.ts +++ b/apps/desktop/layer/renderer/src/lib/api-fetch.ts @@ -85,7 +85,10 @@ export const apiFetch = ofetch.create({ export const apiClient = hc(env.VITE_API_URL, { fetch: async (input, options = {}) => - apiFetch(input.toString(), options).catch((err) => { + apiFetch(input.toString(), { + ...options, + cache: "no-store", + }).catch((err) => { if (err instanceof FetchError && !err.response) { setApiStatus(NetworkStatus.OFFLINE) } diff --git a/apps/mobile/src/lib/api-fetch.ts b/apps/mobile/src/lib/api-fetch.ts index 6d6f30e74..91dc48337 100644 --- a/apps/mobile/src/lib/api-fetch.ts +++ b/apps/mobile/src/lib/api-fetch.ts @@ -78,7 +78,10 @@ export const apiFetch = ofetch.create({ export const apiClient = hc(proxyEnv.API_URL, { fetch: async (input: any, options = {}) => - apiFetch(input.toString(), options).catch((err) => { + apiFetch(input.toString(), { + ...options, + cache: "no-store", + }).catch((err) => { throw err }), async headers() { diff --git a/packages/internal/shared/package.json b/packages/internal/shared/package.json index 58befecbc..2d100ece6 100644 --- a/packages/internal/shared/package.json +++ b/packages/internal/shared/package.json @@ -40,6 +40,7 @@ "better-auth": "1.2.9", "drizzle-orm": "0.44.2", "hono": "4.8.1", + "nanoid": "5.1.5", "sonner": "2.0.6", "stripe": "18.2.1", "zod": "3.25.75" diff --git a/packages/internal/shared/src/auth.ts b/packages/internal/shared/src/auth.ts index 0cdaae774..a94dd1df4 100644 --- a/packages/internal/shared/src/auth.ts +++ b/packages/internal/shared/src/auth.ts @@ -4,6 +4,7 @@ import type { authPlugins } from "@follow/shared/hono" import type { BetterAuthClientPlugin, BetterFetchOption } from "better-auth/client" import { inferAdditionalFields, twoFactorClient } from "better-auth/client/plugins" import { createAuthClient } from "better-auth/react" +import { nanoid } from "nanoid" type AuthPlugin = (typeof authPlugins)[number] export const baseAuthPlugins = [ @@ -40,7 +41,6 @@ export type AuthClient = Ret plugins: [...typeof baseAuthPlugins, ...ExtraPlugins] }> > - export type LoginRuntime = "browser" | "app" export class Auth { @@ -58,12 +58,21 @@ export class Auth { plugins: baseAuthPlugins, fetchOptions: { ...this.options.fetchOptions, + onRequest: (context) => { const referralCode = localStorage.getItem(getStorageNS("referral-code")) if (referralCode) { context.headers.set("folo-referral-code", referralCode) } + if (context.query) { + context.query.v = nanoid(8) + } else { + context.query = { + v: nanoid(8), + } + } + this.options.fetchOptions?.onRequest?.(context) return context diff --git a/packages/internal/store/package.json b/packages/internal/store/package.json index dbbf4a267..c7aa67227 100644 --- a/packages/internal/store/package.json +++ b/packages/internal/store/package.json @@ -124,6 +124,7 @@ "@tanstack/react-query": "5.81.5", "es-toolkit": "1.39.6", "immer": "10.1.1", + "nanoid": "5.1.5", "zustand": "5.0.6" } } diff --git a/packages/internal/store/src/user/store.ts b/packages/internal/store/src/user/store.ts index fe7374df2..89b8384b6 100644 --- a/packages/internal/store/src/user/store.ts +++ b/packages/internal/store/src/user/store.ts @@ -3,6 +3,7 @@ import type { UserSchema } from "@follow/database/schemas/types" import { UserService } from "@follow/database/services/user" import type { AuthSession } from "@follow/shared/hono" import { create, indexedResolver, windowScheduler } from "@yornaath/batshit" +import { nanoid } from "nanoid" import { apiClient, authClient } from "../context" import type { Hydratable, Resetable } from "../internal/base" @@ -66,9 +67,11 @@ class UserSyncService { }) async whoami() { - const res = (await (apiClient()["better-auth"] as any)[ - "get-session" - ].$get()) as AuthSession | null + const res = (await (apiClient()["better-auth"] as any)["get-session"].$get({ + query: { + v: nanoid(8), + }, + })) as AuthSession | null if (res) { const user = honoMorph.toUser(res.user, true) immerSet((state) => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 62be38d94..db7b63848 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1697,6 +1697,9 @@ importers: hono: specifier: 4.8.1 version: 4.8.1(patch_hash=5c74c2d2afaa5880c13d75458dd26c84da568851691b1fb6de6d877c29936d05) + nanoid: + specifier: 5.1.5 + version: 5.1.5 sonner: specifier: 2.0.6 version: 2.0.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -1739,6 +1742,9 @@ importers: immer: specifier: 10.1.1 version: 10.1.1(patch_hash=594c60b929bc0a3b56576f1a1787da1aec2a1fba51e3c21ec09c0ed38280af6c) + nanoid: + specifier: 5.1.5 + version: 5.1.5 react: specifier: 19.0.0 version: 19.0.0