Files

39 lines
1.1 KiB
JavaScript
Executable File

/**
* 会话上下文:合并请求 cookies 与磁盘 session,供各 API 统一使用
*/
const {
loadSession,
sessionCookiesForPage,
mergeCookies,
touchSession,
} = require('./session-store');
const { SESSION_TTL_MS } = require('./constants');
/**
* @param {{ sessionKey?: string }} antiBot
* @param {string} pageUrl
* @param {object[]} [requestCookies]
*/
function resolveSessionContext(antiBot, pageUrl, requestCookies = []) {
const sessionKey = antiBot?.sessionKey || '';
const storedSession = sessionKey ? loadSession(sessionKey) : null;
const sessionCookies = storedSession ? sessionCookiesForPage(storedSession, pageUrl) : [];
const mergedCookies = mergeCookies(requestCookies, sessionCookies);
return { sessionKey, storedSession, mergedCookies };
}
/**
* 成功过盾后滑动续期 session TTL
* @param {string} sessionKey
*/
function touchSessionIfPresent(sessionKey) {
if (sessionKey) {
touchSession(sessionKey, SESSION_TTL_MS);
}
}
module.exports = {
resolveSessionContext,
touchSessionIfPresent,
};