fiemwl / src /app /(dashboard) /dashboard /api-manager /apiManagerPageUtils.ts
automindy's picture
Upload 1980 files
6111b2b verified
Raw
History Blame Contribute Delete
2.45 kB
export type KeyStatus = "active" | "disabled" | "banned" | "expired";
// "manage" scope = management key; "restricted" = has model/connection allowlists;
// "standard" = no manage scope and no allowlists.
// Note: a "manage" key with allowlists is still classified as "manage" (manage takes priority).
export type KeyType = "standard" | "manage" | "restricted";
export interface ApiKeyShape {
isActive?: boolean;
isBanned?: boolean;
expiresAt?: string | null;
scopes?: string[];
allowedModels?: string[] | null;
allowedConnections?: string[] | null;
}
export function isKeyActive(k: ApiKeyShape): boolean {
if (k.isBanned === true) return false;
if (k.isActive === false) return false;
if (k.expiresAt) {
return new Date(k.expiresAt).getTime() > Date.now();
}
return true;
}
export function isExpired(k: ApiKeyShape): boolean {
if (!k.expiresAt) return false;
const ts = new Date(k.expiresAt).getTime();
if (Number.isNaN(ts)) return false;
return ts < Date.now();
}
export function isRestricted(k: ApiKeyShape): boolean {
const hasModelRestrictions = Array.isArray(k.allowedModels) && k.allowedModels.length > 0;
const hasConnectionRestrictions =
Array.isArray(k.allowedConnections) && k.allowedConnections.length > 0;
return hasModelRestrictions || hasConnectionRestrictions;
}
export function classifyKeyStatus(k: ApiKeyShape): KeyStatus {
if (k.isBanned === true) return "banned";
if (isExpired(k)) return "expired";
if (k.isActive === false) return "disabled";
return "active";
}
export function classifyKeyType(k: ApiKeyShape): KeyType {
if (Array.isArray(k.scopes) && k.scopes.includes("manage")) return "manage";
if (isRestricted(k)) return "restricted";
return "standard";
}
export interface ApiKeyCounts {
total: number;
active: number;
disabled: number;
banned: number;
expired: number;
standard: number;
manage: number;
restricted: number;
}
export function computeApiKeyCounts(keys: ApiKeyShape[]): ApiKeyCounts {
const counts: ApiKeyCounts = {
total: keys.length,
active: 0,
disabled: 0,
banned: 0,
expired: 0,
standard: 0,
manage: 0,
restricted: 0,
};
for (const k of keys) {
const status = classifyKeyStatus(k);
counts[status] += 1;
const type = classifyKeyType(k);
counts[type] += 1;
}
return counts;
}