feat(admin): live redis kill-switch on tunnel actions, sortable columns + CSV export + bulk actions, Node 24 LTS
WS1: pin all Docker stages to node:24.16.0-alpine; add engines node>=20. WS2: lib/redis.ts gains TTL-backed redisSet, redisDel, setTunnelActive (writes tunnel:active:<sub>=1/0 EX 30, TUNNEL_ACTIVE_TTL override, no-op without REDIS_URL); wired into tunnel active/delete/reassign routes. WS3: sortable columns, CSV export routes (token excluded), and bulk actions (self-account guard) across users/tunnels/audit admin tables.
This commit is contained in:
@@ -16,6 +16,8 @@ export async function GET(req: NextRequest) {
|
||||
const perPage = parsePerPageParam(url.searchParams.get('perPage'), 25, 100);
|
||||
const search = url.searchParams.get('search') ?? '';
|
||||
const status = url.searchParams.get('status'); // active|inactive|over_quota
|
||||
const sort = url.searchParams.get('sort');
|
||||
const order = url.searchParams.get('order');
|
||||
|
||||
try {
|
||||
const { tunnels, total } = await getTunnelsList({
|
||||
@@ -23,6 +25,8 @@ export async function GET(req: NextRequest) {
|
||||
perPage,
|
||||
search,
|
||||
status,
|
||||
sort,
|
||||
order,
|
||||
});
|
||||
return jsonNoStore({ tunnels, total, page, perPage });
|
||||
} catch (e) {
|
||||
|
||||
Reference in New Issue
Block a user