mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-07 08:26:51 +00:00
Co-authored-by: Roo Code <roomote@roocode.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
61 lines
1.1 KiB
TypeScript
61 lines
1.1 KiB
TypeScript
export interface DecodedToken {
|
|
iss: string
|
|
sub: string
|
|
exp: number
|
|
iat: number
|
|
nbf: number
|
|
v: number
|
|
r?: {
|
|
u?: string
|
|
o?: string
|
|
t: string
|
|
}
|
|
}
|
|
|
|
function decodeToken(token: string): DecodedToken | null {
|
|
try {
|
|
const parts = token.split(".")
|
|
|
|
if (parts.length !== 3) {
|
|
return null
|
|
}
|
|
|
|
const payload = parts[1]
|
|
|
|
if (!payload) {
|
|
return null
|
|
}
|
|
|
|
const padded = payload + "=".repeat((4 - (payload.length % 4)) % 4)
|
|
const decoded = Buffer.from(padded, "base64url").toString("utf-8")
|
|
return JSON.parse(decoded) as DecodedToken
|
|
} catch {
|
|
return null
|
|
}
|
|
}
|
|
|
|
export function isTokenExpired(token: string, bufferSeconds = 24 * 60 * 60): boolean {
|
|
const decoded = decodeToken(token)
|
|
|
|
if (!decoded?.exp) {
|
|
return true
|
|
}
|
|
|
|
const expiresAt = decoded.exp
|
|
const bufferTime = Math.floor(Date.now() / 1000) + bufferSeconds
|
|
return expiresAt < bufferTime
|
|
}
|
|
|
|
export function isTokenValid(token: string): boolean {
|
|
return !isTokenExpired(token, 0)
|
|
}
|
|
|
|
export function getTokenExpirationDate(token: string): Date | null {
|
|
const decoded = decodeToken(token)
|
|
|
|
if (!decoded?.exp) {
|
|
return null
|
|
}
|
|
|
|
return new Date(decoded.exp * 1000)
|
|
}
|