Add typed event logging and restructure server #11

Merged
probablycorey merged 3 commits from probablycorey/simple-logging into main 2026-03-10 16:28:41 +00:00
Showing only changes of commit 96b6a4311b - Show all commits

View File

@ -18,15 +18,15 @@ export type LogEvent =
| { type: "discord-ready" }
| { type: "error"; error: unknown; context?: string }
export type StoredLogEvent = LogEvent & { ts: string; sha: string }
export type StoredLogEvent = LogEvent & { ts: string }
type Listener = (event: StoredLogEvent) => void
const listeners: Listener[] = []
const sha = process.env.RENDER_GIT_COMMIT?.slice(0, 7) || "dev"
const releaseSha = process.env.RENDER_GIT_COMMIT?.slice(0, 7) || "dev"
export function log(event: LogEvent) {
const stored = { ...event, ts: new Date().toISOString(), sha } as StoredLogEvent
const stored = { ...event, ts: new Date().toISOString() } as StoredLogEvent
for (const listener of listeners) {
listener(stored)
}
@ -47,7 +47,7 @@ mkdirSync(logsDir, { recursive: true })
function createLogFile(): string {
const timestamp = new Date().toISOString().replace(/[:.]/g, "-")
return `${logsDir}/${sha}_${timestamp}.jsonl`
return `${logsDir}/${releaseSha}_${timestamp}.jsonl`
}
export function listLogFiles(): string[] {
@ -55,9 +55,11 @@ export function listLogFiles(): string[] {
.filter((f) => f.endsWith(".jsonl"))
.sort()
.reverse()
.slice(0, 20)
}
export function readLogFile(filename: string): StoredLogEvent[] {
// Reject path traversal attempts (e.g. "../../../etc/passwd")
if (filename !== basename(filename)) return []
const path = `${logsDir}/${filename}`
try {