refactor(channels): share slack matching and allowlist prompt flow

This commit is contained in:
Peter Steinberger
2026-02-18 16:31:21 +00:00
parent c0cd53e104
commit f3b75730de
4 changed files with 133 additions and 139 deletions

View File

@@ -12,7 +12,7 @@ import { formatDocsLink } from "../../../terminal/links.js";
import type { WizardPrompter } from "../../../wizard/prompts.js";
import type { ChannelOnboardingAdapter, ChannelOnboardingDmPolicy } from "../onboarding-types.js";
import { promptChannelAccessConfig } from "./channel-access.js";
import { addWildcardAllowFrom, mergeAllowFromEntries, promptAccountId } from "./helpers.js";
import { addWildcardAllowFrom, promptAccountId, promptResolvedAllowFrom } from "./helpers.js";
const channel = "slack" as const;
@@ -263,47 +263,23 @@ async function promptSlackAllowFrom(params: {
return null;
};
while (true) {
const entry = await params.prompter.text({
message: "Slack allowFrom (usernames or ids)",
placeholder: "@alice, U12345678",
initialValue: existing[0] ? String(existing[0]) : undefined,
validate: (value) => (String(value ?? "").trim() ? undefined : "Required"),
});
const parts = parseInputs(String(entry));
if (!token) {
const ids = parts.map(parseId).filter(Boolean) as string[];
if (ids.length !== parts.length) {
await params.prompter.note(
"Slack token missing; use user ids (or mention form) only.",
"Slack allowlist",
);
continue;
}
const unique = mergeAllowFromEntries(existing, ids);
return setSlackAllowFrom(params.cfg, unique);
}
const results = await resolveSlackUserAllowlist({
token,
entries: parts,
}).catch(() => null);
if (!results) {
await params.prompter.note("Failed to resolve usernames. Try again.", "Slack allowlist");
continue;
}
const unresolved = results.filter((res) => !res.resolved || !res.id);
if (unresolved.length > 0) {
await params.prompter.note(
`Could not resolve: ${unresolved.map((res) => res.input).join(", ")}`,
"Slack allowlist",
);
continue;
}
const ids = results.map((res) => res.id as string);
const unique = mergeAllowFromEntries(existing, ids);
return setSlackAllowFrom(params.cfg, unique);
}
const unique = await promptResolvedAllowFrom({
prompter: params.prompter,
existing,
token,
message: "Slack allowFrom (usernames or ids)",
placeholder: "@alice, U12345678",
label: "Slack allowlist",
parseInputs,
parseId,
invalidWithoutTokenNote: "Slack token missing; use user ids (or mention form) only.",
resolveEntries: ({ token, entries }) =>
resolveSlackUserAllowlist({
token,
entries,
}),
});
return setSlackAllowFrom(params.cfg, unique);
}
const dmPolicy: ChannelOnboardingDmPolicy = {