import { callQiaoqiaoAgentApi } from "../tools-common/qiaoqiao-api.js"; import type { ResolvedQiaoqiaoAccount } from "../types.js"; import type { QiaoqiaoMessageParams } from "./schemas.js"; export async function runMessageAction( account: ResolvedQiaoqiaoAccount, params: QiaoqiaoMessageParams, ): Promise { const accountConfig = account.config as { apiBase?: string }; const apiBase = accountConfig.apiBase; switch (params.action) { case "get": return getMessage(account, apiBase, params); case "list": return listMessages(account, apiBase, params); case "recent": return listRecentMessages(account, apiBase, params); } } async function getMessage( account: ResolvedQiaoqiaoAccount, apiBase: string | undefined, params: QiaoqiaoMessageParams, ) { if (!params.message_id) { throw new Error("message_id is required for action=get"); } const message = await callQiaoqiaoAgentApi({ method: "GET", path: `/messages/${encodeURIComponent(params.message_id)}`, appId: account.appId!, appSecret: account.appSecret!, apiBase, }); return { ok: true, action: "get", message_id: params.message_id, message, }; } type MessageListPayload = { messages?: unknown[]; total?: number; has_more?: boolean; chat_id?: string; peer_user_id?: string; }; async function listMessages( account: ResolvedQiaoqiaoAccount, apiBase: string | undefined, params: QiaoqiaoMessageParams, ) { if (!params.chat_id) { throw new Error("chat_id is required for action=list"); } const pageSize = Math.min(Math.max(params.page_size ?? 10, 1), 50); const sortType = params.sort_type ?? "ByCreateTimeDesc"; const query = new URLSearchParams({ page_size: String(pageSize), sort_type: sortType, }); if (params.start_time?.trim()) query.set("start_time", params.start_time.trim()); if (params.end_time?.trim()) query.set("end_time", params.end_time.trim()); const data = await callQiaoqiaoAgentApi({ method: "GET", path: `/chats/${encodeURIComponent(params.chat_id)}/messages?${query.toString()}`, appId: account.appId!, appSecret: account.appSecret!, apiBase, }); return { ok: true, action: "list", chat_id: params.chat_id, total: Number(data.total ?? (Array.isArray(data.messages) ? data.messages.length : 0)), has_more: Boolean(data.has_more), peer_user_id: data.peer_user_id ?? null, messages: data.messages ?? [], }; } async function listRecentMessages( account: ResolvedQiaoqiaoAccount, apiBase: string | undefined, params: QiaoqiaoMessageParams, ) { const limit = Math.min(Math.max(params.limit ?? params.page_size ?? 50, 1), 100); const data = await callQiaoqiaoAgentApi({ method: "GET", path: `/messages?limit=${limit}`, appId: account.appId!, appSecret: account.appSecret!, apiBase, }); return { ok: true, action: "recent", total: Number(data.total ?? (Array.isArray(data.messages) ? data.messages.length : 0)), has_more: Boolean(data.has_more), messages: data.messages ?? [], }; }