22 lines · 850 B
import { z } from "zod";
import { limitAccountWrite } from "../limits";
import { deleteOrganization } from "../org-delete";
import { readJson, requireAccountScope } from "./http";
import type { ApiContext } from "./http";

const deleteInput = z.object({ confirm: z.string(), delete_repos: z.boolean().default(false) });

/** DELETE /orgs/:org — owners only, with an account-level (all-repos admin:write) token. */
export async function deleteOrg(ctx: ApiContext, org: string): Promise<Response> {
  requireAccountScope(ctx);
  const data = await readJson(ctx.request, deleteInput);
  await limitAccountWrite(ctx.viewer);
  const result = await deleteOrganization({
    org,
    confirm: data.confirm,
    deleteRepos: data.delete_repos,
    viewer: ctx.viewer,
  });
  return Response.json({ deleted: true, deleted_repos: result.deletedRepos });
}