feat(federation): add shared types for relay events, sync, and peer management

This commit is contained in:
Jannis Braun
2026-03-25 21:01:26 +01:00
parent 4726eeb097
commit 6afddab54e
+78
View File
@@ -712,3 +712,81 @@ export interface AdminUserListResponse {
export interface AdminResetPasswordResponse {
temporaryPassword: string;
}
// ─── Federation Relay Types ──────────────────────────────────────────────────
export interface FederationRelayEvent {
eventType: 'create' | 'update' | 'delete' | 'reaction_add' | 'reaction_remove';
dmChannelId: string;
messageId: string;
encryptionVersion: 0;
timestamp: number;
message?: {
userId: string;
homeUserId: string;
homeInstance: string;
content: string | null;
replyToId: string | null;
editedAt: number | null;
createdAt: number;
attachments?: FederationRelayAttachment[];
};
reactions?: FederationRelayReaction[];
reaction?: FederationRelayReaction;
}
export interface FederationRelayReaction {
userId: string;
homeUserId: string;
emoji: string;
createdAt: number;
}
export interface FederationRelayAttachment {
id: string;
filename: string;
originalName: string;
mimetype: string;
size: number;
width?: number;
height?: number;
duration?: number;
thumbnailFilename?: string;
sourceUrl: string;
}
export interface FederationRelayRequest {
version: 1;
sourceInstance: string;
events: FederationRelayEvent[];
}
export interface FederationRelayResponse {
accepted: string[];
rejected: Array<{ messageId: string; reason: string }>;
maxUploadSize: number;
}
export interface FederationSyncRequest {
sinceTimestamp: number;
dmChannelId?: string;
limit: number;
}
export interface FederationSyncResponse {
events: FederationRelayEvent[];
hasMore: boolean;
checkpoint: number;
}
export interface FederationPeer {
id: string;
origin: string;
instanceName: string | null;
status: 'pending' | 'active' | 'unreachable' | 'revoked';
lastSeenAt: number | null;
lastFailureAt: number | null;
consecutiveFailures: number;
lastSyncedAt: number;
createdAt: number;
}