From 1f5cd65d60e3c55fc3fdcc09f6455716d8581a88 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 18 Feb 2026 19:04:57 +0000 Subject: [PATCH] refactor(channels): share case-insensitive account lookup in dock --- src/channels/dock.ts | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/channels/dock.ts b/src/channels/dock.ts index 24a14aaee..38ec5aab8 100644 --- a/src/channels/dock.ts +++ b/src/channels/dock.ts @@ -128,6 +128,22 @@ function buildIMessageThreadToolContext(params: { hasRepliedRef: params.hasRepliedRef, }; } + +function resolveCaseInsensitiveAccount( + accounts: Record | undefined, + accountId?: string | null, +): T | undefined { + if (!accounts) { + return undefined; + } + const normalized = normalizeAccountId(accountId); + return ( + accounts[normalized] ?? + accounts[ + Object.keys(accounts).find((key) => key.toLowerCase() === normalized.toLowerCase()) ?? "" + ] + ); +} // Channel docks: lightweight channel metadata/behavior for shared code paths. // // Rules: @@ -282,14 +298,7 @@ const DOCKS: Record = { config: { resolveAllowFrom: ({ cfg, accountId }) => { const channel = cfg.channels?.irc; - const normalized = normalizeAccountId(accountId); - const account = - channel?.accounts?.[normalized] ?? - channel?.accounts?.[ - Object.keys(channel?.accounts ?? {}).find( - (key) => key.toLowerCase() === normalized.toLowerCase(), - ) ?? "" - ]; + const account = resolveCaseInsensitiveAccount(channel?.accounts, accountId); return (account?.allowFrom ?? channel?.allowFrom ?? []).map((entry) => String(entry)); }, formatAllowFrom: ({ allowFrom }) => @@ -353,14 +362,7 @@ const DOCKS: Record = { dm?: { allowFrom?: Array }; } | undefined; - const normalized = normalizeAccountId(accountId); - const account = - channel?.accounts?.[normalized] ?? - channel?.accounts?.[ - Object.keys(channel?.accounts ?? {}).find( - (key) => key.toLowerCase() === normalized.toLowerCase(), - ) ?? "" - ]; + const account = resolveCaseInsensitiveAccount(channel?.accounts, accountId); return (account?.dm?.allowFrom ?? channel?.dm?.allowFrom ?? []).map((entry) => String(entry), );