운영 HTTP에서 관리자 세션이 유지되지 않던 문제를 쿠키 공통화로 수정하고, 통계 클라이언트 분리·조회 오류·기간별 차트를 보강했다. 방문자 해시는 32일 초과분만 정리하고 일별 집계는 누적 보관한다. Co-authored-by: Cursor <cursoragent@cursor.com>
40 lines
1.3 KiB
JavaScript
40 lines
1.3 KiB
JavaScript
import { createHash } from 'node:crypto'
|
|
|
|
export {
|
|
ANALYTICS_ACTIVE_SESSION_TTL_SECONDS,
|
|
ANALYTICS_CHART_MAX_DAYS,
|
|
ANALYTICS_ENGAGED_MIN_SECONDS,
|
|
ANALYTICS_MAX_DURATION_SECONDS,
|
|
ANALYTICS_RETENTION_PURGE_INTERVAL_MS,
|
|
ANALYTICS_SCROLL_THRESHOLDS,
|
|
ANALYTICS_VISITOR_HASH_RETENTION_DAYS,
|
|
clampAnalyticsDurationSeconds,
|
|
clampAnalyticsScrollRatio,
|
|
getAnalyticsDayBefore,
|
|
getAnalyticsDayKey,
|
|
getNewScrollBucketColumns,
|
|
isBotUserAgent,
|
|
isTrackableAnalyticsPath,
|
|
normalizePostSlugForAnalytics
|
|
} from './analytics-shared.js'
|
|
|
|
/**
|
|
* 일 단위 익명 방문자 해시를 생성한다. 원문 IP·UA는 저장하지 않는다.
|
|
* @param {{ day: string, ip: string, userAgent: string, secret: string }} input - 해시 입력
|
|
* @returns {string} visitor hash
|
|
*/
|
|
export const createDailyVisitorHash = ({ day, ip, userAgent, secret }) => {
|
|
const payload = `${day}|${ip}|${userAgent}|${secret}`
|
|
return createHash('sha256').update(payload).digest('hex')
|
|
}
|
|
|
|
/**
|
|
* 실시간 세션 해시를 생성한다.
|
|
* @param {{ clientSessionId: string, visitorHash: string, secret: string }} input - 해시 입력
|
|
* @returns {string} session hash
|
|
*/
|
|
export const createRealtimeSessionHash = ({ clientSessionId, visitorHash, secret }) => {
|
|
const payload = `${clientSessionId}|${visitorHash}|${secret}`
|
|
return createHash('sha256').update(payload).digest('hex')
|
|
}
|