refactor(line): share source info parsing

This commit is contained in:
Peter Steinberger
2026-02-15 16:57:58 +00:00
parent c906121ad3
commit 1ab5fcc325
3 changed files with 18 additions and 26 deletions

View File

@@ -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(() => ({

View File

@@ -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<void>;
}
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<boolean> {
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(() => []);

View File

@@ -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,