Files
sori.studio/lib/analytics.js
zenn c43873ce5f v1.3.5: 관리자 로그인·대시보드 차트·통계 보관 정리
운영 HTTP에서 관리자 세션이 유지되지 않던 문제를 쿠키 공통화로 수정하고, 통계 클라이언트 분리·조회 오류·기간별 차트를 보강했다. 방문자 해시는 32일 초과분만 정리하고 일별 집계는 누적 보관한다.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-20 13:54:38 +09:00

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')
}