refactor(channels): share allowlist resolution summary

This commit is contained in:
Peter Steinberger
2026-02-15 17:26:27 +00:00
parent 63ab5bfddc
commit 25be51967a
4 changed files with 50 additions and 28 deletions

View File

@@ -35,17 +35,25 @@ export function mergeAllowlist(params: {
export function buildAllowlistResolutionSummary<T extends AllowlistUserResolutionLike>(
resolvedUsers: T[],
opts?: { formatResolved?: (entry: T) => string },
): {
resolvedMap: Map<string, T>;
mapping: string[];
unresolved: string[];
additions: string[];
} {
const resolvedMap = new Map(resolvedUsers.map((entry) => [entry.input, entry]));
const mapping = resolvedUsers
.filter((entry) => entry.resolved && entry.id)
.map((entry) => `${entry.input}${entry.id}`);
const unresolved = resolvedUsers.filter((entry) => !entry.resolved).map((entry) => entry.input);
return { resolvedMap, mapping, unresolved };
const resolvedOk = (entry: T) => Boolean(entry.resolved && entry.id);
const formatResolved = opts?.formatResolved ?? ((entry: T) => `${entry.input}${entry.id}`);
const mapping = resolvedUsers.filter(resolvedOk).map(formatResolved);
const additions = resolvedUsers
.filter(resolvedOk)
.map((entry) => entry.id)
.filter((entry): entry is string => Boolean(entry));
const unresolved = resolvedUsers
.filter((entry) => !resolvedOk(entry))
.map((entry) => entry.input);
return { resolvedMap, mapping, unresolved, additions };
}
export function resolveAllowlistIdAdditions<T extends AllowlistUserResolutionLike>(params: {