import { accountDb } from "../scoped-db";
import { revokeAccessTokens } from "../access-token-store";
import { notFoundError } from "../errors";
import { lfsUsage } from "../lfs/quota";
import { limitAccountWrite } from "../limits";
import { parseTokenPermissions } from "../token-scope";
import { noContent, requireAccountScope } from "./http";
import type { ApiContext } from "./http";
export function getUser(ctx: ApiContext): Response {
return Response.json({ login: ctx.viewer.name, id: ctx.viewer.id, name: ctx.viewer.displayName ?? ctx.viewer.name });
}
export async function getLfsUsage(ctx: ApiContext): Promise<Response> {
requireAccountScope(ctx);
const usage = await lfsUsage(ctx.viewer.id);
return Response.json({ bytes: usage.storageBytes });
}
type TokenRow = {
id: string;
name: string;
token_prefix: string;
permissions: string | null;
all_repos: number;
last_used_at: number | null;
expires_at: number | null;
created_at: number;
};
export async function listTokens(ctx: ApiContext): Promise<Response> {
requireAccountScope(ctx);
const rows = await accountDb(ctx.viewer.id).all<TokenRow>(
`SELECT id, name, token_prefix, permissions, all_repos, last_used_at, expires_at, created_at
FROM access_tokens WHERE user_id = ? ORDER BY created_at DESC`,
ctx.viewer.id,
);
return Response.json(
rows.map((row) => ({
id: row.id,