import type { loadConfig } from "../../../config/config.js"; import { resolveStorePath, updateLastRoute } from "../../../config/sessions.js"; import { formatError } from "../../session.js"; export function trackBackgroundTask( backgroundTasks: Set>, task: Promise, ) { backgroundTasks.add(task); void task.finally(() => { backgroundTasks.delete(task); }); } export function updateLastRouteInBackground(params: { cfg: ReturnType; backgroundTasks: Set>; storeAgentId: string; sessionKey: string; channel: "whatsapp"; to: string; accountId?: string; 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, }, }).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>) { if (backgroundTasks.size === 0) return Promise.resolve(); return Promise.allSettled(backgroundTasks).then(() => { backgroundTasks.clear(); }); }