Files
clawdbot/src/commands/auth-choice-prompt.ts
2026-01-12 05:08:07 +00:00

64 lines
1.7 KiB
TypeScript

import type { AuthProfileStore } from "../agents/auth-profiles.js";
import type { WizardPrompter } from "../wizard/prompts.js";
import { buildAuthChoiceGroups } from "./auth-choice-options.js";
import type { AuthChoice } from "./onboard-types.js";
const BACK_VALUE = "__back";
export async function promptAuthChoiceGrouped(params: {
prompter: WizardPrompter;
store: AuthProfileStore;
includeSkip: boolean;
includeClaudeCliIfMissing?: boolean;
platform?: NodeJS.Platform;
}): Promise<AuthChoice> {
const { groups, skipOption } = buildAuthChoiceGroups(params);
const availableGroups = groups.filter((group) => group.options.length > 0);
while (true) {
const providerOptions = [
...availableGroups.map((group) => ({
value: group.value,
label: group.label,
hint: group.hint,
})),
...(skipOption ? [skipOption] : []),
];
const providerSelection = (await params.prompter.select({
message: "Model/auth provider",
options: providerOptions,
})) as string;
if (providerSelection === "skip") {
return "skip";
}
const group = availableGroups.find(
(candidate) => candidate.value === providerSelection,
);
if (!group || group.options.length === 0) {
await params.prompter.note(
"No auth methods available for that provider.",
"Model/auth choice",
);
continue;
}
const methodSelection = (await params.prompter.select({
message: `${group.label} auth method`,
options: [
...group.options,
{ value: BACK_VALUE, label: "Back" },
],
})) as string;
if (methodSelection === BACK_VALUE) {
continue;
}
return methodSelection as AuthChoice;
}
}