diff --git a/packages/server/src/routes/federation.ts b/packages/server/src/routes/federation.ts index 97bfa5bd..78d14605 100644 --- a/packages/server/src/routes/federation.ts +++ b/packages/server/src/routes/federation.ts @@ -1965,7 +1965,7 @@ function processOwnershipTransferEvent( db.update(schema.dmChannels) .set({ - ownerId: newOwnerLocal?.id ?? channel.ownerId, + ownerId: newOwnerLocal?.id ?? null, ownerHomeUserId: event.ownership.newOwner.homeUserId, ownerHomeInstance: event.ownership.newOwner.homeInstance, }) @@ -1975,7 +1975,7 @@ function processOwnershipTransferEvent( connectionManager.sendToDmMembers(channel.id, { type: 'dm_owner_updated', dmChannelId: channel.id, - newOwnerId: newOwnerLocal?.id ?? channel.ownerId!, + newOwnerId: newOwnerLocal?.id ?? event.ownership.newOwner.homeUserId, }); const prevOwnerLocal = event.ownership.previousOwner @@ -1991,7 +1991,7 @@ function processOwnershipTransferEvent( userId: prevOwnerId, content: JSON.stringify({ event: 'owner_changed', - newOwnerId: newOwnerLocal?.id ?? channel.ownerId, + newOwnerId: newOwnerLocal?.id ?? event.ownership.newOwner.homeUserId, newOwnerDisplayName: newOwnerLocal?.displayName ?? newOwnerBaseName, }), type: 'system', @@ -2006,7 +2006,7 @@ function processOwnershipTransferEvent( userId: prevOwnerId, content: JSON.stringify({ event: 'owner_changed', - newOwnerId: newOwnerLocal?.id ?? channel.ownerId, + newOwnerId: newOwnerLocal?.id ?? event.ownership.newOwner.homeUserId, newOwnerDisplayName: newOwnerLocal?.displayName ?? newOwnerBaseName, }), type: 'system', diff --git a/packages/shared/src/types.ts b/packages/shared/src/types.ts index 9f5bba94..db8d9c9f 100644 --- a/packages/shared/src/types.ts +++ b/packages/shared/src/types.ts @@ -193,6 +193,7 @@ export interface Message { userId: string; replyToId: string | null; content: string | null; + type?: 'user' | 'system'; editedAt: number | null; createdAt: number; } diff --git a/packages/web/src/api/client.ts b/packages/web/src/api/client.ts index 3320a798..dd585dfe 100644 --- a/packages/web/src/api/client.ts +++ b/packages/web/src/api/client.ts @@ -145,7 +145,6 @@ export class BackspaceApiClient { deleteMessage: (id: string) => Promise<{ success: boolean }>; addMember: (dmChannelId: string, data: { userId: string }) => Promise; leave: (dmChannelId: string) => Promise<{ success: boolean }>; - leaveGroup: (dmChannelId: string) => Promise<{ success: boolean }>; }; readonly social: { @@ -506,8 +505,6 @@ export class BackspaceApiClient { request('POST', `/dm/${dmChannelId}/members`, data), leave: (dmChannelId: string) => request<{ success: boolean }>('DELETE', `/dm/${dmChannelId}/members`), - leaveGroup: (dmChannelId: string) => - request<{ success: boolean }>('DELETE', `/dm/${dmChannelId}/members`), }; this.social = { diff --git a/packages/web/src/components/chat/MessageList.tsx b/packages/web/src/components/chat/MessageList.tsx index d96c99fd..78cd43aa 100644 --- a/packages/web/src/components/chat/MessageList.tsx +++ b/packages/web/src/components/chat/MessageList.tsx @@ -21,7 +21,7 @@ interface MessageListProps { } function isSameGroup(prev: MessageWithUser, curr: MessageWithUser): boolean { - if ((prev as any).type === 'system' || (curr as any).type === 'system') return false; + if (prev.type === 'system' || curr.type === 'system') return false; if (prev.userId !== curr.userId) return false; const timeDiff = curr.createdAt - prev.createdAt; return timeDiff < 5 * 60 * 1000; // 5 minutes @@ -338,7 +338,7 @@ export function MessageList({ channelId, jumpToMessageId, onJumpComplete }: Mess
)} - {(msg as any).type === 'system' ? ( + {msg.type === 'system' ? ( ) : ( { try { - await api.dm.leaveGroup(channelId); + await api.dm.leave(channelId); navigate('/channels/@me'); } catch (err) { console.error('Failed to leave group:', err);