From 1ab5fcc3253643cb9a4a862d82ed6804aa735c24 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 15 Feb 2026 16:57:58 +0000 Subject: [PATCH] refactor(line): share source info parsing --- src/line/bot-handlers.test.ts | 11 +++++++++++ src/line/bot-handlers.ts | 25 ++----------------------- src/line/bot-message-context.ts | 8 +++++--- 3 files changed, 18 insertions(+), 26 deletions(-) diff --git a/src/line/bot-handlers.test.ts b/src/line/bot-handlers.test.ts index dda3201d9fe..bf4c108a5d5 100644 --- a/src/line/bot-handlers.test.ts +++ b/src/line/bot-handlers.test.ts @@ -45,6 +45,17 @@ const { buildLineMessageContextMock, buildLinePostbackContextMock } = vi.hoisted vi.mock("./bot-message-context.js", () => ({ buildLineMessageContext: (...args: unknown[]) => buildLineMessageContextMock(...args), buildLinePostbackContext: (...args: unknown[]) => buildLinePostbackContextMock(...args), + getLineSourceInfo: (source: { + type?: string; + userId?: string; + groupId?: string; + roomId?: string; + }) => ({ + userId: source.userId, + groupId: source.type === "group" ? source.groupId : undefined, + roomId: source.type === "room" ? source.roomId : undefined, + isGroup: source.type === "group" || source.type === "room", + }), })); const { readAllowFromStoreMock, upsertPairingRequestMock } = vi.hoisted(() => ({ diff --git a/src/line/bot-handlers.ts b/src/line/bot-handlers.ts index 757c8c180e5..47d57d05939 100644 --- a/src/line/bot-handlers.ts +++ b/src/line/bot-handlers.ts @@ -20,6 +20,7 @@ import { } from "../pairing/pairing-store.js"; import { firstDefined, isSenderAllowed, normalizeAllowFromWithStore } from "./bot-access.js"; import { + getLineSourceInfo, buildLineMessageContext, buildLinePostbackContext, type LineInboundContext, @@ -40,28 +41,6 @@ export interface LineHandlerContext { processMessage: (ctx: LineInboundContext) => Promise; } -type LineSourceInfo = { - userId?: string; - groupId?: string; - roomId?: string; - isGroup: boolean; -}; - -function getSourceInfo(source: EventSource): LineSourceInfo { - const userId = - source.type === "user" - ? source.userId - : source.type === "group" - ? source.userId - : source.type === "room" - ? source.userId - : undefined; - const groupId = source.type === "group" ? source.groupId : undefined; - const roomId = source.type === "room" ? source.roomId : undefined; - const isGroup = source.type === "group" || source.type === "room"; - return { userId, groupId, roomId, isGroup }; -} - function resolveLineGroupConfig(params: { config: ResolvedLineAccount["config"]; groupId?: string; @@ -129,7 +108,7 @@ async function shouldProcessLineEvent( context: LineHandlerContext, ): Promise { const { cfg, account } = context; - const { userId, groupId, roomId, isGroup } = getSourceInfo(event.source); + const { userId, groupId, roomId, isGroup } = getLineSourceInfo(event.source); const senderId = userId ?? ""; const storeAllowFrom = await readChannelAllowFromStore("line").catch(() => []); diff --git a/src/line/bot-message-context.ts b/src/line/bot-message-context.ts index 51b1a5704d4..113e6e6f58c 100644 --- a/src/line/bot-message-context.ts +++ b/src/line/bot-message-context.ts @@ -26,12 +26,14 @@ interface BuildLineMessageContextParams { account: ResolvedLineAccount; } -function getSourceInfo(source: EventSource): { +export type LineSourceInfo = { userId?: string; groupId?: string; roomId?: string; isGroup: boolean; -} { +}; + +export function getLineSourceInfo(source: EventSource): LineSourceInfo { const userId = source.type === "user" ? source.userId @@ -78,7 +80,7 @@ function resolveLineInboundRoute(params: { direction: "inbound", }); - const { userId, groupId, roomId, isGroup } = getSourceInfo(params.source); + const { userId, groupId, roomId, isGroup } = getLineSourceInfo(params.source); const peerId = buildPeerId(params.source); const route = resolveAgentRoute({ cfg: params.cfg,