From 600260ebf88dd873453df6bec7b05c8cefbd0388 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 15 Feb 2026 06:46:28 +0000 Subject: [PATCH] refactor(gateway): dedupe web login provider checks --- src/gateway/server-methods/web.ts | 64 ++++++++++++++----------------- 1 file changed, 29 insertions(+), 35 deletions(-) diff --git a/src/gateway/server-methods/web.ts b/src/gateway/server-methods/web.ts index 18cf2e2fd..8e016442e 100644 --- a/src/gateway/server-methods/web.ts +++ b/src/gateway/server-methods/web.ts @@ -1,4 +1,4 @@ -import type { GatewayRequestHandlers } from "./types.js"; +import type { GatewayRequestHandlers, RespondFn } from "./types.js"; import { listChannelPlugins } from "../../channels/plugins/index.js"; import { ErrorCodes, @@ -16,6 +16,28 @@ const resolveWebLoginProvider = () => (plugin.gatewayMethods ?? []).some((method) => WEB_LOGIN_METHODS.has(method)), ) ?? null; +function resolveAccountId(params: unknown): string | undefined { + return typeof (params as { accountId?: unknown }).accountId === "string" + ? (params as { accountId?: string }).accountId + : undefined; +} + +function respondProviderUnavailable(respond: RespondFn) { + respond( + false, + undefined, + errorShape(ErrorCodes.INVALID_REQUEST, "web login provider is not available"), + ); +} + +function respondProviderUnsupported(respond: RespondFn, providerId: string) { + respond( + false, + undefined, + errorShape(ErrorCodes.INVALID_REQUEST, `web login is not supported by provider ${providerId}`), + ); +} + export const webHandlers: GatewayRequestHandlers = { "web.login.start": async ({ params, respond, context }) => { if (!validateWebLoginStartParams(params)) { @@ -30,29 +52,15 @@ export const webHandlers: GatewayRequestHandlers = { return; } try { - const accountId = - typeof (params as { accountId?: unknown }).accountId === "string" - ? (params as { accountId?: string }).accountId - : undefined; + const accountId = resolveAccountId(params); const provider = resolveWebLoginProvider(); if (!provider) { - respond( - false, - undefined, - errorShape(ErrorCodes.INVALID_REQUEST, "web login provider is not available"), - ); + respondProviderUnavailable(respond); return; } await context.stopChannel(provider.id, accountId); if (!provider.gateway?.loginWithQrStart) { - respond( - false, - undefined, - errorShape( - ErrorCodes.INVALID_REQUEST, - `web login is not supported by provider ${provider.id}`, - ), - ); + respondProviderUnsupported(respond, provider.id); return; } const result = await provider.gateway.loginWithQrStart({ @@ -82,28 +90,14 @@ export const webHandlers: GatewayRequestHandlers = { return; } try { - const accountId = - typeof (params as { accountId?: unknown }).accountId === "string" - ? (params as { accountId?: string }).accountId - : undefined; + const accountId = resolveAccountId(params); const provider = resolveWebLoginProvider(); if (!provider) { - respond( - false, - undefined, - errorShape(ErrorCodes.INVALID_REQUEST, "web login provider is not available"), - ); + respondProviderUnavailable(respond); return; } if (!provider.gateway?.loginWithQrWait) { - respond( - false, - undefined, - errorShape( - ErrorCodes.INVALID_REQUEST, - `web login is not supported by provider ${provider.id}`, - ), - ); + respondProviderUnsupported(respond, provider.id); return; } const result = await provider.gateway.loginWithQrWait({