import { log } from "@clack/prompts" import { defineCommand } from "../lib/command" import { globalOptions, globalOptionsSchema } from "../lib/global-options" import z from "zod" import { authClient } from "../lib/auth-client" import { output, requireSession } from "../utils" import { accent } from "../lib/io" import { clearSpinner, startSpinner } from "../lib/spinner" /** Arguments accepted by the invitation acceptance command. */ const acceptOptsSchema = globalOptionsSchema.extend({ positionals: z.tuple([z.string()]), }) export const acceptCommand = defineCommand({ name: "accept", description: "Accept an organization invitation", options: { ...globalOptions, }, positionals: [ { name: "invitationId", description: "Invitation ID from the invite email", required: true, }, ], schema: globalOptionsSchema.extend(acceptOptsSchema.shape), run: acceptInvitation, }) /** * Accepts an organization invitation by ID. * * @param opts - Validated command options containing the invitation ID. */ export async function acceptInvitation(opts: z.infer) { await requireSession() const [invitationId] = opts.positionals startSpinner("Accepting invitation") const { member } = await authClient.organization.acceptInvitation({ invitationId, }) clearSpinner() output .normal(() => log.success(`Joined organization as ${accent(member.role)}`)) .json(member) }