Files
sori.studio/lib/analytics.js
zenn ef9efd7af5 관리자 통계 대시보드 개선 및 v1.9.6 반영
통계 추이 차트 공통화, 유입 스택 막대, 집계 시작일 고정, traffic API 오류 수정, deploy 문서 정리를 포함한다.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 13:42:23 +09:00

43 lines
1.5 KiB
JavaScript

import { createHash } from 'node:crypto'
export {
ANALYTICS_ACTIVE_SESSION_TTL_SECONDS,
ANALYTICS_CHART_MAX_DAYS,
ANALYTICS_COLLECTED_SINCE_DEFAULT,
ANALYTICS_ENGAGED_MIN_SECONDS,
ANALYTICS_MAX_DURATION_SECONDS,
ANALYTICS_RETENTION_PURGE_INTERVAL_MS,
ANALYTICS_SCROLL_THRESHOLDS,
ANALYTICS_VISITOR_HASH_RETENTION_DAYS,
normalizeAnalyticsCollectedSinceDay,
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')
}