From dc469a3db532a283b28e6ee2267f67955dbb7b11 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 11 Apr 2026 21:15:32 +0100 Subject: [PATCH] fix(gateway): preserve channel plugin identity in cache --- src/channels/plugins/registry-loaded.ts | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/channels/plugins/registry-loaded.ts b/src/channels/plugins/registry-loaded.ts index d3bb45597c7..7ad0b045235 100644 --- a/src/channels/plugins/registry-loaded.ts +++ b/src/channels/plugins/registry-loaded.ts @@ -27,6 +27,19 @@ const EMPTY_CHANNEL_PLUGIN_CACHE: CachedChannelPlugins = { let cachedChannelPlugins = EMPTY_CHANNEL_PLUGIN_CACHE; +function coerceLoadedChannelPlugin( + plugin: ActiveChannelPluginRuntimeShape | null | undefined, +): LoadedChannelPlugin | null { + const id = normalizeOptionalString(plugin?.id) ?? ""; + if (!plugin || !id) { + return null; + } + if (!plugin.meta || typeof plugin.meta !== "object") { + plugin.meta = {}; + } + return plugin as LoadedChannelPlugin; +} + function dedupeChannels(channels: LoadedChannelPlugin[]): LoadedChannelPlugin[] { const seen = new Set(); const resolved: LoadedChannelPlugin[] = []; @@ -52,14 +65,9 @@ function resolveCachedChannelPlugins(): CachedChannelPlugins { const channelPlugins: LoadedChannelPlugin[] = []; if (registry && Array.isArray(registry.channels)) { for (const entry of registry.channels) { - const plugin = entry?.plugin; - const id = normalizeOptionalString(plugin?.id) ?? ""; - if (plugin && id) { - channelPlugins.push({ - ...plugin, - id, - meta: plugin.meta ?? {}, - }); + const plugin = coerceLoadedChannelPlugin(entry?.plugin); + if (plugin) { + channelPlugins.push(plugin); } } }