mirror of
https://github.com/router-for-me/Cli-Proxy-API-Management-Center.git
synced 2026-02-19 03:00:49 +08:00
refactor(quota): modularize QuotaPage into separate section components
This commit is contained in:
112
src/utils/quota/resolvers.ts
Normal file
112
src/utils/quota/resolvers.ts
Normal file
@@ -0,0 +1,112 @@
|
||||
/**
|
||||
* Resolver functions for extracting data from auth files.
|
||||
*/
|
||||
|
||||
import type { AuthFileItem } from '@/types';
|
||||
import {
|
||||
normalizeStringValue,
|
||||
normalizePlanType,
|
||||
parseIdTokenPayload
|
||||
} from './parsers';
|
||||
|
||||
export function extractCodexChatgptAccountId(value: unknown): string | null {
|
||||
const payload = parseIdTokenPayload(value);
|
||||
if (!payload) return null;
|
||||
return normalizeStringValue(payload.chatgpt_account_id ?? payload.chatgptAccountId);
|
||||
}
|
||||
|
||||
export function resolveCodexChatgptAccountId(file: AuthFileItem): string | null {
|
||||
const metadata =
|
||||
file && typeof file.metadata === 'object' && file.metadata !== null
|
||||
? (file.metadata as Record<string, unknown>)
|
||||
: null;
|
||||
const attributes =
|
||||
file && typeof file.attributes === 'object' && file.attributes !== null
|
||||
? (file.attributes as Record<string, unknown>)
|
||||
: null;
|
||||
|
||||
const candidates = [file.id_token, metadata?.id_token, attributes?.id_token];
|
||||
|
||||
for (const candidate of candidates) {
|
||||
const id = extractCodexChatgptAccountId(candidate);
|
||||
if (id) return id;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
export function resolveCodexPlanType(file: AuthFileItem): string | null {
|
||||
const metadata =
|
||||
file && typeof file.metadata === 'object' && file.metadata !== null
|
||||
? (file.metadata as Record<string, unknown>)
|
||||
: null;
|
||||
const attributes =
|
||||
file && typeof file.attributes === 'object' && file.attributes !== null
|
||||
? (file.attributes as Record<string, unknown>)
|
||||
: null;
|
||||
const idToken =
|
||||
file && typeof file.id_token === 'object' && file.id_token !== null
|
||||
? (file.id_token as Record<string, unknown>)
|
||||
: null;
|
||||
const metadataIdToken =
|
||||
metadata && typeof metadata.id_token === 'object' && metadata.id_token !== null
|
||||
? (metadata.id_token as Record<string, unknown>)
|
||||
: null;
|
||||
const candidates = [
|
||||
file.plan_type,
|
||||
file.planType,
|
||||
file['plan_type'],
|
||||
file['planType'],
|
||||
file.id_token,
|
||||
idToken?.plan_type,
|
||||
idToken?.planType,
|
||||
metadata?.plan_type,
|
||||
metadata?.planType,
|
||||
metadata?.id_token,
|
||||
metadataIdToken?.plan_type,
|
||||
metadataIdToken?.planType,
|
||||
attributes?.plan_type,
|
||||
attributes?.planType,
|
||||
attributes?.id_token
|
||||
];
|
||||
|
||||
for (const candidate of candidates) {
|
||||
const planType = normalizePlanType(candidate);
|
||||
if (planType) return planType;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
export function extractGeminiCliProjectId(value: unknown): string | null {
|
||||
if (typeof value !== 'string') return null;
|
||||
const matches = Array.from(value.matchAll(/\(([^()]+)\)/g));
|
||||
if (matches.length === 0) return null;
|
||||
const candidate = matches[matches.length - 1]?.[1]?.trim();
|
||||
return candidate ? candidate : null;
|
||||
}
|
||||
|
||||
export function resolveGeminiCliProjectId(file: AuthFileItem): string | null {
|
||||
const metadata =
|
||||
file && typeof file.metadata === 'object' && file.metadata !== null
|
||||
? (file.metadata as Record<string, unknown>)
|
||||
: null;
|
||||
const attributes =
|
||||
file && typeof file.attributes === 'object' && file.attributes !== null
|
||||
? (file.attributes as Record<string, unknown>)
|
||||
: null;
|
||||
|
||||
const candidates = [
|
||||
file.account,
|
||||
file['account'],
|
||||
metadata?.account,
|
||||
attributes?.account
|
||||
];
|
||||
|
||||
for (const candidate of candidates) {
|
||||
const projectId = extractGeminiCliProjectId(candidate);
|
||||
if (projectId) return projectId;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
Reference in New Issue
Block a user