Files
sori.studio/lib/analytics.js

41 lines
1.4 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,
normalizePageSlugForAnalytics,
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')
}