99 lines
2.1 KiB
TypeScript
99 lines
2.1 KiB
TypeScript
export type Provider = "openai-codex" | "zai" | "anthropic";
|
|
|
|
export type UsageUnit = "percent" | "tokens" | "requests" | "usd" | "minutes" | "bytes" | "unknown";
|
|
|
|
export type UsageStatus = "ok" | "warning" | "exhausted" | "unknown";
|
|
|
|
export interface UsageWindow {
|
|
id: string;
|
|
label: string;
|
|
durationMs?: number;
|
|
resetsAt?: number;
|
|
}
|
|
|
|
export interface UsageAmount {
|
|
used?: number;
|
|
limit?: number;
|
|
remaining?: number;
|
|
usedFraction?: number;
|
|
remainingFraction?: number;
|
|
unit: UsageUnit;
|
|
}
|
|
|
|
export interface UsageScope {
|
|
provider: Provider;
|
|
accountId?: string;
|
|
projectId?: string;
|
|
orgId?: string;
|
|
modelId?: string;
|
|
tier?: string;
|
|
windowId?: string;
|
|
shared?: boolean;
|
|
}
|
|
|
|
export interface UsageLimit {
|
|
id: string;
|
|
label: string;
|
|
scope: UsageScope;
|
|
window?: UsageWindow;
|
|
amount: UsageAmount;
|
|
status?: UsageStatus;
|
|
notes?: string[];
|
|
}
|
|
|
|
export interface UsageReport {
|
|
provider: Provider;
|
|
fetchedAt: number;
|
|
limits: UsageLimit[];
|
|
metadata?: Record<string, unknown>;
|
|
raw?: unknown;
|
|
}
|
|
|
|
export interface UsageLogger {
|
|
debug(message: string, meta?: Record<string, unknown>): void;
|
|
warn(message: string, meta?: Record<string, unknown>): void;
|
|
}
|
|
|
|
export interface UsageCredential {
|
|
type: "api_key" | "oauth";
|
|
apiKey?: string;
|
|
accessToken?: string;
|
|
refreshToken?: string;
|
|
expiresAt?: number;
|
|
accountId?: string;
|
|
projectId?: string;
|
|
email?: string;
|
|
enterpriseUrl?: string;
|
|
metadata?: Record<string, unknown>;
|
|
}
|
|
|
|
export interface UsageFetchParams {
|
|
provider: Provider;
|
|
credential: UsageCredential;
|
|
baseUrl?: string;
|
|
signal?: AbortSignal;
|
|
}
|
|
|
|
export interface UsageFetchContext {
|
|
fetch: typeof fetch;
|
|
logger?: UsageLogger;
|
|
}
|
|
|
|
export interface UsageProvider {
|
|
id: Provider;
|
|
fetchUsage(params: UsageFetchParams, ctx: UsageFetchContext): Promise<UsageReport | null>;
|
|
supports?(params: UsageFetchParams): boolean;
|
|
}
|
|
|
|
export interface CredentialRankingStrategy {
|
|
findWindowLimits(report: UsageReport): {
|
|
primary?: UsageLimit;
|
|
secondary?: UsageLimit;
|
|
};
|
|
windowDefaults: {
|
|
primaryMs: number;
|
|
secondaryMs: number;
|
|
};
|
|
hasPriorityBoost?(primary: UsageLimit | undefined): boolean;
|
|
}
|