feat: Implement dynamic node title metadata and enhance swarm user and post hydration.

This commit is contained in:
Christomatt
2026-01-26 17:09:21 +01:00
parent 3ba60cadf5
commit cf0dfa4b66
12 changed files with 380 additions and 105 deletions
@@ -7,6 +7,7 @@
import { NextRequest, NextResponse } from 'next/server';
import { db, follows, users, remoteFollowers } from '@/db';
import { eq } from 'drizzle-orm';
import { hydrateSwarmUsers } from '@/lib/swarm/user-hydration';
export interface SwarmFollowerUser {
handle: string;
@@ -88,8 +89,33 @@ export async function GET(request: NextRequest, context: RouteContext) {
// Merge all followers
const allFollowers = [...localFollowers, ...remoteFollowersList].slice(0, limit);
// Hydrate remote users (from 3rd party nodes)
// We need to map to the HydratedUser interface temporarily for the helper
const toHydrate = allFollowers.map(f => ({
id: f.handle,
handle: f.handle,
displayName: f.displayName,
avatarUrl: f.avatarUrl,
bio: f.bio,
isRemote: f.isRemote || false,
isBot: f.isBot,
nodeDomain: undefined,
}));
const hydrated = await hydrateSwarmUsers(toHydrate);
// Map back to SwarmFollowerUser
const finalFollowers: SwarmFollowerUser[] = hydrated.map(u => ({
handle: u.handle,
displayName: u.displayName || u.handle.split('@')[0], // Ensure non-null
avatarUrl: u.avatarUrl || undefined, // Map null to undefined
bio: u.bio || undefined,
isBot: u.isBot,
isRemote: u.isRemote,
}));
return NextResponse.json({
followers: allFollowers,
followers: finalFollowers,
nodeDomain,
timestamp: new Date().toISOString(),
});