o2o-negosium-original/frontend/src/apis/tokenStorage.ts
민헌 a867daa98f feat(frontend): TanStack Query 기반 apis 레이어 추가
- auth/negotiation 도메인별 api/keys/queries/mutations/type 5파일 구조
- axios 인스턴스: access token 주입, 434 만료 시 refresh 자동 재발급(단일 비행)
  후 원요청 재시도, 433/435/1203(TOKEN_REVOKED) 시 세션 종료 처리
- HTTP 200 + result.success=false 비즈니스 에러를 ApiError 로 변환,
  에러코드별 한국어 메시지 맵(getApiErrorMessage) 제공
- 토큰 localStorage 저장소(tokenStorage)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 13:12:07 +09:00

28 lines
918 B
TypeScript

// JWT access/refresh 토큰의 영속 저장소.
// axios 인터셉터(http.ts)와 인증 mutation 이 공유한다.
const ACCESS_KEY = 'negosium.accessToken'
const REFRESH_KEY = 'negosium.refreshToken'
export const tokenStorage = {
getAccessToken: (): string | null => localStorage.getItem(ACCESS_KEY),
getRefreshToken: (): string | null => localStorage.getItem(REFRESH_KEY),
setTokens: (accessToken: string, refreshToken: string): void => {
localStorage.setItem(ACCESS_KEY, accessToken)
localStorage.setItem(REFRESH_KEY, refreshToken)
},
/** refresh_token 으로 access_token 만 갱신할 때 사용 */
setAccessToken: (accessToken: string): void => {
localStorage.setItem(ACCESS_KEY, accessToken)
},
clear: (): void => {
localStorage.removeItem(ACCESS_KEY)
localStorage.removeItem(REFRESH_KEY)
},
hasToken: (): boolean => localStorage.getItem(ACCESS_KEY) !== null,
}