openclaw/src/web/auto-reply/monitor/last-route.ts
2026-01-18 03:41:51 +00:00

59 lines
1.6 KiB
TypeScript

import type { MsgContext } from "../../../auto-reply/templating.js";
import type { loadConfig } from "../../../config/config.js";
import { resolveStorePath, updateLastRoute } from "../../../config/sessions.js";
import { formatError } from "../../session.js";
export function trackBackgroundTask(
backgroundTasks: Set<Promise<unknown>>,
task: Promise<unknown>,
) {
backgroundTasks.add(task);
void task.finally(() => {
backgroundTasks.delete(task);
});
}
export function updateLastRouteInBackground(params: {
cfg: ReturnType<typeof loadConfig>;
backgroundTasks: Set<Promise<unknown>>;
storeAgentId: string;
sessionKey: string;
channel: "whatsapp";
to: string;
accountId?: string;
ctx?: MsgContext;
warn: (obj: unknown, msg: string) => void;
}) {
const storePath = resolveStorePath(params.cfg.session?.store, {
agentId: params.storeAgentId,
});
const task = updateLastRoute({
storePath,
sessionKey: params.sessionKey,
deliveryContext: {
channel: params.channel,
to: params.to,
accountId: params.accountId,
},
ctx: params.ctx,
}).catch((err) => {
params.warn(
{
error: formatError(err),
storePath,
sessionKey: params.sessionKey,
to: params.to,
},
"failed updating last route",
);
});
trackBackgroundTask(params.backgroundTasks, task);
}
export function awaitBackgroundTasks(backgroundTasks: Set<Promise<unknown>>) {
if (backgroundTasks.size === 0) return Promise.resolve();
return Promise.allSettled(backgroundTasks).then(() => {
backgroundTasks.clear();
});
}