diff --git a/apps/cs/app/api/proxy/[...url]/route.ts b/apps/cs/app/api/proxy/[...url]/route.ts index 53f5a6e41..2f1a9140f 100644 --- a/apps/cs/app/api/proxy/[...url]/route.ts +++ b/apps/cs/app/api/proxy/[...url]/route.ts @@ -17,7 +17,7 @@ export async function POST( const headers: Record = { "Content-Type": "application/json", - "X-Site-Id": SITE_ID ?? "", + "X-Site-Id": SITE_ID, }; const cookieStore = await cookies(); diff --git a/apps/cs/src/app/index.tsx b/apps/cs/src/app/index.tsx index a78e1c124..4600d03c2 100644 --- a/apps/cs/src/app/index.tsx +++ b/apps/cs/src/app/index.tsx @@ -1,6 +1,6 @@ import "./styles/base.css"; import "./styles/components.css"; -import { CookieProvider, QueryProvider } from "@/shared/providers"; +import { CookieProvider, QueryProvider } from "@/shared/provider"; const App = ({ children }: Readonly<{ children: React.ReactNode }>) => { return ( diff --git a/apps/cs/src/pages/auth/login/api/login.ts b/apps/cs/src/entities/auth/login/api/login-service.ts similarity index 97% rename from apps/cs/src/pages/auth/login/api/login.ts rename to apps/cs/src/entities/auth/login/api/login-service.ts index 7e61dc2b5..e6db440cf 100644 --- a/apps/cs/src/pages/auth/login/api/login.ts +++ b/apps/cs/src/entities/auth/login/api/login-service.ts @@ -1,8 +1,8 @@ import { AxiosError } from "axios"; import { ENDPOINT, JWT_EXPIRATION_TIME } from "@/shared/config/api"; import { ACCESS_TOKEN, AUTH_USER_ID, CLAIM_NAME } from "@/shared/config/env"; +import type { LoginService, ILogin } from "../model/login-interface"; import { tokenManager } from "../lib/token-manager"; -import type { LoginService, ILogin } from "../model/login"; export class LoginApiService implements LoginService { private static instance: LoginApiService; diff --git a/apps/cs/src/entities/auth/login/index.ts b/apps/cs/src/entities/auth/login/index.ts new file mode 100644 index 000000000..8c7981ac9 --- /dev/null +++ b/apps/cs/src/entities/auth/login/index.ts @@ -0,0 +1 @@ +export { LoginApi } from "./api/login-service"; diff --git a/apps/cs/src/pages/auth/login/lib/token-manager.ts b/apps/cs/src/entities/auth/login/lib/token-manager.ts similarity index 77% rename from apps/cs/src/pages/auth/login/lib/token-manager.ts rename to apps/cs/src/entities/auth/login/lib/token-manager.ts index 4aeaf9d95..e72e00567 100644 --- a/apps/cs/src/pages/auth/login/lib/token-manager.ts +++ b/apps/cs/src/entities/auth/login/lib/token-manager.ts @@ -1,5 +1,5 @@ import { AUTH_USER_ID, CLAIM_NAME } from "@/shared/config/env"; -import { setToken, removeToken } from "@/shared/lib/cookie"; +import { getCookie, setCookie, removeCookie } from "@/shared/lib/cookie"; export class TokenManager { private static instance: TokenManager; @@ -14,13 +14,21 @@ export class TokenManager { return TokenManager.instance; } + public getToken(key: string): string | undefined { + return getCookie(key); + } + public setToken(key: string, value: string): void { - setToken(key, value, { + setCookie(key, value, { secure: window.location.protocol === "https:", sameSite: "lax", }); } + public removeToken(key: string): void { + removeCookie(key); + } + public setupRefreshTimer( callback: () => Promise, expirationTime: number, @@ -43,8 +51,8 @@ export class TokenManager { this.refreshTimer = null; } - removeToken(CLAIM_NAME); - removeToken(AUTH_USER_ID); + this.removeToken(CLAIM_NAME); + this.removeToken(AUTH_USER_ID); } } diff --git a/apps/cs/src/pages/auth/login/model/login.ts b/apps/cs/src/entities/auth/login/model/login-interface.ts similarity index 80% rename from apps/cs/src/pages/auth/login/model/login.ts rename to apps/cs/src/entities/auth/login/model/login-interface.ts index 2fe9acc49..5aaf53044 100644 --- a/apps/cs/src/pages/auth/login/model/login.ts +++ b/apps/cs/src/entities/auth/login/model/login-interface.ts @@ -5,4 +5,5 @@ export interface ILogin { export interface LoginService { login(payload: ILogin): Promise; + silentRefresh(): Promise; } diff --git a/apps/cs/src/entities/user/lib/use-user.ts b/apps/cs/src/entities/user/lib/use-user.ts index 98c37594a..97cd2f034 100644 --- a/apps/cs/src/entities/user/lib/use-user.ts +++ b/apps/cs/src/entities/user/lib/use-user.ts @@ -1,16 +1,16 @@ import { useQuery } from "@tanstack/react-query"; -import { UserApi } from "../api/user-service"; -import { useCookie } from "@/shared/providers"; import { ENDPOINT } from "@/shared/config/api"; import { AUTH_USER_ID } from "@/shared/config/env"; +import { useCookie } from "@/shared/provider"; +import { UserApi } from "../api/user-service"; const useUser = () => { - const { getToken } = useCookie(); + const { getCookie } = useCookie(); const { data } = useQuery({ queryKey: [ENDPOINT.USER_SERVICE.USERS], queryFn: () => UserApi.userInfo({ - userUniqId: getToken(AUTH_USER_ID) ?? "", + userUniqId: getCookie(AUTH_USER_ID) ?? "", }), }); diff --git a/apps/cs/src/pages/auth/login/ui/login-page.tsx b/apps/cs/src/pages/auth/login/ui/login-page.tsx index 41c8f57df..c8eb1e2f9 100644 --- a/apps/cs/src/pages/auth/login/ui/login-page.tsx +++ b/apps/cs/src/pages/auth/login/ui/login-page.tsx @@ -2,7 +2,7 @@ import Image from "next/image"; import { images } from "@common/assets"; -import { LoginApi } from "../api/login"; +import { LoginApi } from "@/entities/auth/login"; import "./login.css"; function LoginPage() { diff --git a/apps/cs/src/shared/lib/cookie.ts b/apps/cs/src/shared/lib/cookie.ts index 3e9c91d16..82db637bd 100644 --- a/apps/cs/src/shared/lib/cookie.ts +++ b/apps/cs/src/shared/lib/cookie.ts @@ -12,7 +12,7 @@ export function getCookie(name: string): string | undefined { export function setCookie( name: string, value: string, - options: Cookies.CookieAttributes, + options?: Cookies.CookieAttributes, ): void { if (typeof window === "undefined") { return; @@ -22,29 +22,10 @@ export function setCookie( export function removeCookie( name: string, - options: Cookies.CookieAttributes, + options?: Cookies.CookieAttributes, ): void { if (typeof window === "undefined") { return; } Cookies.remove(name, options); } - -export function getToken(key: string): string | undefined { - return getCookie(key); -} - -export function setToken( - key: string, - token: string, - options: Cookies.CookieAttributes, -): void { - setCookie(key, token, { - ...options, - path: "/", - }); -} - -export function removeToken(key: string): void { - removeCookie(key, { path: "/" }); -} diff --git a/apps/cs/src/shared/providers/cookie/cookie-provider.tsx b/apps/cs/src/shared/provider/cookie/cookie-provider.tsx similarity index 72% rename from apps/cs/src/shared/providers/cookie/cookie-provider.tsx rename to apps/cs/src/shared/provider/cookie/cookie-provider.tsx index f92ca8a6f..2e7bf4c2f 100644 --- a/apps/cs/src/shared/providers/cookie/cookie-provider.tsx +++ b/apps/cs/src/shared/provider/cookie/cookie-provider.tsx @@ -1,24 +1,9 @@ "use client"; -import { - getCookie, - setCookie, - removeCookie, - getToken, - setToken, - removeToken, -} from "../../lib/cookie"; - import { createContext, useContext } from "react"; +import { getCookie, setCookie, removeCookie } from "../../lib/cookie"; export interface CookieContextType { - getToken: (key: string) => string | undefined; - setToken: ( - key: string, - token: string, - options: Cookies.CookieAttributes, - ) => void; - removeToken: (key: string) => void; getCookie: (name: string) => string | undefined; setCookie: ( name: string, @@ -32,9 +17,6 @@ export const CookieContext = createContext(null); export function CookieProvider({ children }: { children: React.ReactNode }) { const cookieContextValue: CookieContextType = { - getToken, - setToken, - removeToken, getCookie, setCookie, removeCookie, diff --git a/apps/cs/src/shared/providers/index.ts b/apps/cs/src/shared/provider/index.ts similarity index 62% rename from apps/cs/src/shared/providers/index.ts rename to apps/cs/src/shared/provider/index.ts index d3e4a1ff3..7ef95c20c 100644 --- a/apps/cs/src/shared/providers/index.ts +++ b/apps/cs/src/shared/provider/index.ts @@ -3,4 +3,4 @@ export { CookieProvider, useCookie, } from "./cookie/cookie-provider"; -export { QueryProvider } from "./query/query-client"; +export { QueryProvider } from "./query/query-provider"; diff --git a/apps/cs/src/shared/providers/query/query-client.tsx b/apps/cs/src/shared/provider/query/query-provider.tsx similarity index 100% rename from apps/cs/src/shared/providers/query/query-client.tsx rename to apps/cs/src/shared/provider/query/query-provider.tsx