Spaces:
Paused
Paused
| 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, | |
| }; | |
| } | |