| import type { Request, Response } from 'express' |
|
|
| export type ApiOk<T> = { ok: true; data: T } |
| export type ApiErr = { ok: false; error: string } |
| export type ApiResponse<T> = ApiOk<T> | ApiErr |
|
|
| export function ok<T>(res: Response, data: T, status = 200) { |
| res.status(status).json({ ok: true, data } satisfies ApiOk<T>) |
| } |
|
|
| 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 |
| } |
|
|
|
|