refactor(channels): share allowlist config patch helper

This commit is contained in:
Peter Steinberger
2026-02-15 13:43:53 +00:00
parent df7fff8fd7
commit 9d7113c74c
3 changed files with 35 additions and 38 deletions

View File

@@ -63,6 +63,31 @@ export function resolveAllowlistIdAdditions<T extends AllowlistUserResolutionLik
return additions;
}
export function patchAllowlistUsersInConfigEntries<
T extends AllowlistUserResolutionLike,
TEntries extends Record<string, unknown>,
>(params: { entries: TEntries; resolvedMap: Map<string, T> }): TEntries {
const nextEntries: Record<string, unknown> = { ...params.entries };
for (const [entryKey, entryConfig] of Object.entries(params.entries)) {
if (!entryConfig || typeof entryConfig !== "object") {
continue;
}
const users = (entryConfig as { users?: Array<string | number> }).users;
if (!Array.isArray(users) || users.length === 0) {
continue;
}
const additions = resolveAllowlistIdAdditions({
existing: users,
resolvedMap: params.resolvedMap,
});
nextEntries[entryKey] = {
...entryConfig,
users: mergeAllowlist({ existing: users, additions }),
};
}
return nextEntries as TEntries;
}
export function summarizeMapping(
label: string,
mapping: string[],

View File

@@ -11,6 +11,7 @@ import {
buildAllowlistResolutionSummary,
mergeAllowlist,
resolveAllowlistIdAdditions,
patchAllowlistUsersInConfigEntries,
summarizeMapping,
} from "../../channels/allowlists/resolve-utils.js";
import {
@@ -352,25 +353,10 @@ export async function monitorDiscordProvider(opts: MonitorDiscordOpts = {}) {
}
const channels = (guildConfig as { channels?: Record<string, unknown> }).channels ?? {};
if (channels && typeof channels === "object") {
const nextChannels: Record<string, unknown> = { ...channels };
for (const [channelKey, channelConfig] of Object.entries(channels)) {
if (!channelConfig || typeof channelConfig !== "object") {
continue;
}
const channelUsers = (channelConfig as { users?: Array<string | number> }).users;
if (!Array.isArray(channelUsers) || channelUsers.length === 0) {
continue;
}
const additions = resolveAllowlistIdAdditions({
existing: channelUsers,
resolvedMap,
});
nextChannels[channelKey] = {
...channelConfig,
users: mergeAllowlist({ existing: channelUsers, additions }),
};
}
nextGuild.channels = nextChannels;
nextGuild.channels = patchAllowlistUsersInConfigEntries({
entries: channels,
resolvedMap,
});
}
nextGuilds[guildKey] = nextGuild;
}

View File

@@ -7,7 +7,7 @@ import { DEFAULT_GROUP_HISTORY_LIMIT } from "../../auto-reply/reply/history.js";
import {
buildAllowlistResolutionSummary,
mergeAllowlist,
resolveAllowlistIdAdditions,
patchAllowlistUsersInConfigEntries,
summarizeMapping,
} from "../../channels/allowlists/resolve-utils.js";
import { loadConfig } from "../../config/config.js";
@@ -330,24 +330,10 @@ export async function monitorSlackProvider(opts: MonitorSlackOpts = {}) {
const { resolvedMap, mapping, unresolved } =
buildAllowlistResolutionSummary(resolvedUsers);
const nextChannels = { ...channelsConfig };
for (const [channelKey, channelConfig] of Object.entries(channelsConfig)) {
if (!channelConfig || typeof channelConfig !== "object") {
continue;
}
const channelUsers = (channelConfig as { users?: Array<string | number> }).users;
if (!Array.isArray(channelUsers) || channelUsers.length === 0) {
continue;
}
const additions = resolveAllowlistIdAdditions({
existing: channelUsers,
resolvedMap,
});
nextChannels[channelKey] = {
...channelConfig,
users: mergeAllowlist({ existing: channelUsers, additions }),
};
}
const nextChannels = patchAllowlistUsersInConfigEntries({
entries: channelsConfig,
resolvedMap,
});
channelsConfig = nextChannels;
ctx.channelsConfig = nextChannels;
summarizeMapping("slack channel users", mapping, unresolved, runtime);