feat: add awaitingApprovalPeerOrigins and pendingApprovalCount to ready payload

This commit is contained in:
Jannis Braun
2026-04-20 15:03:29 +02:00
parent 5f50ffc5f2
commit 33c45e3184
2 changed files with 22 additions and 2 deletions
+21 -1
View File
@@ -936,6 +936,8 @@ function buildReadyPayload(userId: string): {
activeCalls: ActiveCallInfo[];
userActivities: Record<string, Activity[]>;
rejectedPeerOrigins: string[];
awaitingApprovalPeerOrigins: string[];
pendingApprovalCount: number;
} {
const db = getDb();
@@ -1472,7 +1474,25 @@ function buildReadyPayload(userId: string): {
.all();
const rejectedPeerOrigins = rejectedPeers.map(p => p.origin);
return { user, spaces, dmChannels, folders, spaceLayout, layoutUpdatedAt, voiceStates, voiceUserStates, spaceVoiceStates, readStates, activeCalls, userActivities, rejectedPeerOrigins };
// Awaiting-approval peer origins for softer unreachable indicators
const awaitingApprovalPeers = db
.select({ origin: schema.federationPeers.origin })
.from(schema.federationPeers)
.where(eq(schema.federationPeers.status, 'awaiting_approval'))
.all();
const awaitingApprovalPeerOrigins = awaitingApprovalPeers.map(p => p.origin);
// Pending approval count for admin notification
let pendingApprovalCount = 0;
if (userRow?.isAdmin === 1) {
const countResult = db
.select({ count: sql<number>`count(*)` })
.from(schema.peerApprovalRequests)
.get();
pendingApprovalCount = countResult?.count ?? 0;
}
return { user, spaces, dmChannels, folders, spaceLayout, layoutUpdatedAt, voiceStates, voiceUserStates, spaceVoiceStates, readStates, activeCalls, userActivities, rejectedPeerOrigins, awaitingApprovalPeerOrigins, pendingApprovalCount };
}
export async function registerWebSocket(app: FastifyInstance): Promise<void> {
+1 -1
View File
@@ -390,7 +390,7 @@ export type ClientEvent =
// Server → Client Events
export type ServerEvent =
| { type: 'ready'; user: User; spaces: SpaceWithChannelsAndMembers[]; dmChannels: DmChannel[]; folders?: SpaceFolder[]; spaceLayout?: SpaceLayoutItem[] | null; layoutUpdatedAt?: number; voiceStates?: Record<string, string[]>; voiceUserStates?: Record<string, { isMuted: boolean; isDeafened: boolean; isCameraOn: boolean; isScreenSharing: boolean }>; readStates?: ReadState[]; activeCalls?: ActiveCallInfo[]; spaceVoiceStates?: Record<string, { spaceMuted: boolean; spaceDeafened: boolean }>; userActivities?: Record<string, Activity[]>; rejectedPeerOrigins?: string[] }
| { type: 'ready'; user: User; spaces: SpaceWithChannelsAndMembers[]; dmChannels: DmChannel[]; folders?: SpaceFolder[]; spaceLayout?: SpaceLayoutItem[] | null; layoutUpdatedAt?: number; voiceStates?: Record<string, string[]>; voiceUserStates?: Record<string, { isMuted: boolean; isDeafened: boolean; isCameraOn: boolean; isScreenSharing: boolean }>; readStates?: ReadState[]; activeCalls?: ActiveCallInfo[]; spaceVoiceStates?: Record<string, { spaceMuted: boolean; spaceDeafened: boolean }>; userActivities?: Record<string, Activity[]>; rejectedPeerOrigins?: string[]; awaitingApprovalPeerOrigins?: string[]; pendingApprovalCount?: number }
| { type: 'message_created'; message: MessageWithUser }
| { type: 'message_updated'; message: MessageWithUser }
| { type: 'message_deleted'; messageId: string; channelId: string }