2026-07-30 17:59:42 +08:00
|
|
|
export const ACCESS_TOKEN_KEY = 'cc-client-access-token'
|
|
|
|
|
export const REFRESH_TOKEN_KEY = 'cc-client-refresh-token'
|
2026-08-21 17:20:51 +08:00
|
|
|
export const OVERSEAS_ACCESS_TOKEN_KEY = 'cc-client-overseas-access-token'
|
|
|
|
|
export const OVERSEAS_EXPIRES_AT_KEY = 'cc-client-overseas-expires-at'
|
2026-07-30 17:59:42 +08:00
|
|
|
|
|
|
|
|
export interface TokenPair {
|
|
|
|
|
tokenType: string
|
|
|
|
|
accessToken: string
|
|
|
|
|
expiresIn: number
|
|
|
|
|
refreshToken: string
|
|
|
|
|
refreshExpiresIn: number
|
2026-08-21 17:20:51 +08:00
|
|
|
overseasAccessToken?: string | null
|
|
|
|
|
overseasExpiresIn?: number
|
2026-07-30 17:59:42 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function activeStorage() {
|
|
|
|
|
if (localStorage.getItem(ACCESS_TOKEN_KEY)) return localStorage
|
|
|
|
|
return sessionStorage
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function getAccessToken() {
|
|
|
|
|
return localStorage.getItem(ACCESS_TOKEN_KEY) || sessionStorage.getItem(ACCESS_TOKEN_KEY) || ''
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function getRefreshToken() {
|
|
|
|
|
return localStorage.getItem(REFRESH_TOKEN_KEY) || sessionStorage.getItem(REFRESH_TOKEN_KEY) || ''
|
|
|
|
|
}
|
|
|
|
|
|
2026-08-21 17:20:51 +08:00
|
|
|
export function getOverseasAccessToken() {
|
|
|
|
|
const storage = activeStorage()
|
|
|
|
|
const expiresAt = Number(storage.getItem(OVERSEAS_EXPIRES_AT_KEY) || 0)
|
|
|
|
|
if (expiresAt <= Date.now() + 30_000) return ''
|
|
|
|
|
return storage.getItem(OVERSEAS_ACCESS_TOKEN_KEY) || ''
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-30 17:59:42 +08:00
|
|
|
export function persistTokenPair(tokens: TokenPair, remember?: boolean) {
|
|
|
|
|
const storage = remember === undefined ? activeStorage() : remember ? localStorage : sessionStorage
|
|
|
|
|
clearSessionTokens()
|
|
|
|
|
storage.setItem(ACCESS_TOKEN_KEY, tokens.accessToken)
|
|
|
|
|
storage.setItem(REFRESH_TOKEN_KEY, tokens.refreshToken)
|
2026-08-21 17:20:51 +08:00
|
|
|
if (tokens.overseasAccessToken && Number(tokens.overseasExpiresIn) > 0) {
|
|
|
|
|
storage.setItem(OVERSEAS_ACCESS_TOKEN_KEY, tokens.overseasAccessToken)
|
|
|
|
|
storage.setItem(OVERSEAS_EXPIRES_AT_KEY, String(Date.now() + Number(tokens.overseasExpiresIn) * 1000))
|
|
|
|
|
}
|
2026-07-30 17:59:42 +08:00
|
|
|
}
|
|
|
|
|
|
2026-08-08 10:14:07 +08:00
|
|
|
export function persistTemporaryAccessToken(accessToken: string) {
|
|
|
|
|
clearSessionTokens()
|
|
|
|
|
sessionStorage.setItem(ACCESS_TOKEN_KEY, accessToken)
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-30 17:59:42 +08:00
|
|
|
export function clearSessionTokens() {
|
|
|
|
|
for (const storage of [localStorage, sessionStorage]) {
|
|
|
|
|
storage.removeItem(ACCESS_TOKEN_KEY)
|
|
|
|
|
storage.removeItem(REFRESH_TOKEN_KEY)
|
2026-08-21 17:20:51 +08:00
|
|
|
storage.removeItem(OVERSEAS_ACCESS_TOKEN_KEY)
|
|
|
|
|
storage.removeItem(OVERSEAS_EXPIRES_AT_KEY)
|
2026-07-30 17:59:42 +08:00
|
|
|
storage.removeItem('cc-client-token')
|
|
|
|
|
}
|
|
|
|
|
}
|