codex-proxy / src /auth /chatgpt-oauth.ts
icebear0828
feat: native OAuth PKCE login with fixed localhost:1455 redirect
5dd5107
raw
history blame
830 Bytes
import {
decodeJwtPayload,
extractChatGptAccountId,
isTokenExpired,
} from "./jwt-utils.js";
/**
* Validate a manually-pasted JWT token.
*/
export function validateManualToken(token: string): {
valid: boolean;
error?: string;
} {
if (!token || typeof token !== "string") {
return { valid: false, error: "Token is empty" };
}
const trimmed = token.trim();
const payload = decodeJwtPayload(trimmed);
if (!payload) {
return {
valid: false,
error: "Invalid JWT format — could not decode payload",
};
}
if (isTokenExpired(trimmed)) {
return { valid: false, error: "Token is expired" };
}
const accountId = extractChatGptAccountId(trimmed);
if (!accountId) {
return { valid: false, error: "Token missing chatgpt_account_id claim" };
}
return { valid: true };
}