import type { Request, Response } from 'express' export type ApiOk = { ok: true; data: T } export type ApiErr = { ok: false; error: string } export type ApiResponse = ApiOk | ApiErr export function ok(res: Response, data: T, status = 200) { res.status(status).json({ ok: true, data } satisfies ApiOk) } export function err(res: Response, message: string, status = 400) { res.status(status).json({ ok: false, error: message } satisfies ApiErr) } export function getClientIp(req: Request) { const xff = req.headers['x-forwarded-for'] if (typeof xff === 'string' && xff.length > 0) return xff.split(',')[0]?.trim() || null return req.socket.remoteAddress || null } export function getUserAgent(req: Request) { const ua = req.headers['user-agent'] return typeof ua === 'string' ? ua : null }