42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
import type { ClawdbotConfig, WizardPrompter } from "clawdbot/plugin-sdk";
|
|
import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "clawdbot/plugin-sdk";
|
|
|
|
type PromptAccountIdParams = {
|
|
cfg: ClawdbotConfig;
|
|
prompter: WizardPrompter;
|
|
label: string;
|
|
currentId?: string;
|
|
listAccountIds: (cfg: ClawdbotConfig) => string[];
|
|
defaultAccountId: string;
|
|
};
|
|
|
|
export async function promptAccountId(params: PromptAccountIdParams): Promise<string> {
|
|
const existingIds = params.listAccountIds(params.cfg);
|
|
const initial = params.currentId?.trim() || params.defaultAccountId || DEFAULT_ACCOUNT_ID;
|
|
const choice = (await params.prompter.select({
|
|
message: `${params.label} account`,
|
|
options: [
|
|
...existingIds.map((id) => ({
|
|
value: id,
|
|
label: id === DEFAULT_ACCOUNT_ID ? "default (primary)" : id,
|
|
})),
|
|
{ value: "__new__", label: "Add a new account" },
|
|
],
|
|
initialValue: initial,
|
|
})) as string;
|
|
|
|
if (choice !== "__new__") return normalizeAccountId(choice);
|
|
|
|
const entered = await params.prompter.text({
|
|
message: `New ${params.label} account id`,
|
|
validate: (value) => (value?.trim() ? undefined : "Required"),
|
|
});
|
|
const normalized = normalizeAccountId(String(entered));
|
|
if (String(entered).trim() !== normalized) {
|
|
await params.prompter.note(
|
|
`Normalized account id to "${normalized}".`,
|
|
`${params.label} account`,
|
|
);
|
|
}
|
|
return normalized;
|
|
} |