mirror of https://github.com/openclaw/openclaw.git
70 lines
2.0 KiB
TypeScript
70 lines
2.0 KiB
TypeScript
import type { loadConfig } from "../../config/config.js";
|
|
import {
|
|
evaluateSessionFreshness,
|
|
loadSessionStore,
|
|
resolveChannelResetConfig,
|
|
resolveThreadFlag,
|
|
resolveSessionResetPolicy,
|
|
resolveSessionResetType,
|
|
resolveSessionKey,
|
|
resolveStorePath,
|
|
} from "../../config/sessions.js";
|
|
import { normalizeMainKey } from "../../routing/session-key.js";
|
|
|
|
export function getSessionSnapshot(
|
|
cfg: ReturnType<typeof loadConfig>,
|
|
from: string,
|
|
_isHeartbeat = false,
|
|
ctx?: {
|
|
sessionKey?: string | null;
|
|
isGroup?: boolean;
|
|
messageThreadId?: string | number | null;
|
|
threadLabel?: string | null;
|
|
threadStarterBody?: string | null;
|
|
parentSessionKey?: string | null;
|
|
},
|
|
) {
|
|
const sessionCfg = cfg.session;
|
|
const scope = sessionCfg?.scope ?? "per-sender";
|
|
const key =
|
|
ctx?.sessionKey?.trim() ??
|
|
resolveSessionKey(
|
|
scope,
|
|
{ From: from, To: "", Body: "" },
|
|
normalizeMainKey(sessionCfg?.mainKey),
|
|
);
|
|
const store = loadSessionStore(resolveStorePath(sessionCfg?.store));
|
|
const entry = store[key];
|
|
|
|
const isThread = resolveThreadFlag({
|
|
sessionKey: key,
|
|
messageThreadId: ctx?.messageThreadId ?? null,
|
|
threadLabel: ctx?.threadLabel ?? null,
|
|
threadStarterBody: ctx?.threadStarterBody ?? null,
|
|
parentSessionKey: ctx?.parentSessionKey ?? null,
|
|
});
|
|
const resetType = resolveSessionResetType({ sessionKey: key, isGroup: ctx?.isGroup, isThread });
|
|
const channelReset = resolveChannelResetConfig({
|
|
sessionCfg,
|
|
channel: entry?.lastChannel ?? entry?.channel,
|
|
});
|
|
const resetPolicy = resolveSessionResetPolicy({
|
|
sessionCfg,
|
|
resetType,
|
|
resetOverride: channelReset,
|
|
});
|
|
const now = Date.now();
|
|
const freshness = entry
|
|
? evaluateSessionFreshness({ updatedAt: entry.updatedAt, now, policy: resetPolicy })
|
|
: { fresh: false };
|
|
return {
|
|
key,
|
|
entry,
|
|
fresh: freshness.fresh,
|
|
resetPolicy,
|
|
resetType,
|
|
dailyResetAt: freshness.dailyResetAt,
|
|
idleExpiresAt: freshness.idleExpiresAt,
|
|
};
|
|
}
|