BIG pi update with claude chat
This commit is contained in:
@@ -55,6 +55,8 @@ export interface UsageData {
|
||||
/** Unix ms timestamp of when the session window resets (from the raw API response). */
|
||||
sessionResetsAt?: number;
|
||||
weeklyResetsIn?: string;
|
||||
/** Unix ms timestamp of when the weekly window resets. */
|
||||
weeklyResetsAt?: number;
|
||||
extraSpend?: number;
|
||||
extraLimit?: number;
|
||||
error?: string;
|
||||
@@ -321,13 +323,34 @@ export function formatResetsAt(isoDate: string, nowMs = Date.now()): string {
|
||||
return formatDuration(diffSeconds);
|
||||
}
|
||||
|
||||
const CLAUDE_CREDENTIALS_FILE = path.join(os.homedir(), ".claude", ".credentials.json");
|
||||
|
||||
export function readAuth(authFile = DEFAULT_AUTH_FILE): AuthData | null {
|
||||
let result: AuthData | null = null;
|
||||
|
||||
// Read pi auth.json for non-Claude providers
|
||||
try {
|
||||
const parsed = JSON.parse(fs.readFileSync(authFile, "utf-8"));
|
||||
return asObject(parsed) as AuthData;
|
||||
result = asObject(parsed) as AuthData;
|
||||
} catch {
|
||||
return null;
|
||||
result = {} as AuthData;
|
||||
}
|
||||
|
||||
// Read Claude credentials from ~/.claude/.credentials.json
|
||||
try {
|
||||
const claudeRaw = fs.readFileSync(CLAUDE_CREDENTIALS_FILE, "utf-8");
|
||||
const claudeCreds = JSON.parse(claudeRaw);
|
||||
const oauth = claudeCreds?.claudeAiOauth;
|
||||
if (oauth?.accessToken) {
|
||||
result!.anthropic = {
|
||||
access: oauth.accessToken,
|
||||
refresh: oauth.refreshToken,
|
||||
expires: typeof oauth.expiresAt === "number" ? oauth.expiresAt : undefined,
|
||||
};
|
||||
}
|
||||
} catch {}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
export function writeAuth(auth: AuthData, authFile = DEFAULT_AUTH_FILE): boolean {
|
||||
@@ -647,6 +670,9 @@ export async function fetchClaudeUsage(token: string, config: RequestConfig = {}
|
||||
const sessionResetsAt = data?.five_hour?.resets_at
|
||||
? new Date(data.five_hour.resets_at).getTime()
|
||||
: undefined;
|
||||
const weeklyResetsAt = data?.seven_day?.resets_at
|
||||
? new Date(data.seven_day.resets_at).getTime()
|
||||
: undefined;
|
||||
|
||||
const usage: UsageData = {
|
||||
session: readPercentCandidate(data?.five_hour?.utilization) ?? 0,
|
||||
@@ -654,6 +680,7 @@ export async function fetchClaudeUsage(token: string, config: RequestConfig = {}
|
||||
sessionResetsIn: data?.five_hour?.resets_at ? formatResetsAt(data.five_hour.resets_at) : undefined,
|
||||
sessionResetsAt: Number.isFinite(sessionResetsAt) ? sessionResetsAt : undefined,
|
||||
weeklyResetsIn: data?.seven_day?.resets_at ? formatResetsAt(data.seven_day.resets_at) : undefined,
|
||||
weeklyResetsAt: Number.isFinite(weeklyResetsAt) ? weeklyResetsAt : undefined,
|
||||
};
|
||||
|
||||
if (data?.extra_usage?.is_enabled) {
|
||||
|
||||
Reference in New Issue
Block a user