feat: Add pm
This commit is contained in:
@@ -14,6 +14,7 @@ require coordination.
|
||||
| `moderation.models.ts` | `BanEntry` |
|
||||
| `voice-state.models.ts` | `VoiceState`, `ScreenShareState` |
|
||||
| `chat-events.ts` | `ChatEventType`, `ChatEvent`, `ChatInventoryItem` |
|
||||
| `direct-message-contracts.ts` | `DirectMessage`, delivery status, P2P DM event payloads |
|
||||
| `media-preferences.ts` | `LatencyProfile`, `ScreenShareQuality`, quality presets |
|
||||
| `signaling-contracts.ts` | `SignalingMessage`, `SignalingMessageType` |
|
||||
| `attachment-contracts.ts` | `ChatAttachmentAnnouncement`, `ChatAttachmentMeta` |
|
||||
|
||||
@@ -9,6 +9,11 @@ import type {
|
||||
import type { VoiceState } from './voice-state.models';
|
||||
import type { BanEntry } from './moderation.models';
|
||||
import type { ChatAttachmentAnnouncement, ChatAttachmentMeta } from './attachment-contracts';
|
||||
import type {
|
||||
DirectMessageEventPayload,
|
||||
DirectMessageMutationEventPayload,
|
||||
DirectMessageStatusEventPayload
|
||||
} from './direct-message-contracts';
|
||||
|
||||
export interface ChatInventoryItem {
|
||||
id: string;
|
||||
@@ -77,6 +82,9 @@ export interface ChatEventBase {
|
||||
bans?: BanEntry[];
|
||||
banOderId?: string;
|
||||
expiresAt?: number;
|
||||
directMessage?: DirectMessageEventPayload;
|
||||
directMessageStatus?: DirectMessageStatusEventPayload;
|
||||
directMessageMutation?: DirectMessageMutationEventPayload;
|
||||
}
|
||||
|
||||
export interface ChatMessageEvent extends ChatEventBase {
|
||||
@@ -360,6 +368,21 @@ export interface ChannelsUpdateEvent extends ChatEventBase {
|
||||
channels: Channel[];
|
||||
}
|
||||
|
||||
export interface DirectMessagePeerEvent extends ChatEventBase {
|
||||
type: 'direct-message';
|
||||
directMessage: DirectMessageEventPayload;
|
||||
}
|
||||
|
||||
export interface DirectMessageStatusPeerEvent extends ChatEventBase {
|
||||
type: 'direct-message-status';
|
||||
directMessageStatus: DirectMessageStatusEventPayload;
|
||||
}
|
||||
|
||||
export interface DirectMessageMutationPeerEvent extends ChatEventBase {
|
||||
type: 'direct-message-mutation';
|
||||
directMessageMutation: DirectMessageMutationEventPayload;
|
||||
}
|
||||
|
||||
/** Discriminated union of all P2P chat events. Narrow via `event.type`. */
|
||||
export type ChatEvent =
|
||||
| ChatMessageEvent
|
||||
@@ -408,7 +431,10 @@ export type ChatEvent =
|
||||
| KickEvent
|
||||
| BanEvent
|
||||
| UnbanEvent
|
||||
| ChannelsUpdateEvent;
|
||||
| ChannelsUpdateEvent
|
||||
| DirectMessagePeerEvent
|
||||
| DirectMessageStatusPeerEvent
|
||||
| DirectMessageMutationPeerEvent;
|
||||
|
||||
/** All possible `type` values, derived from the union. */
|
||||
export type ChatEventType = ChatEvent['type'];
|
||||
|
||||
54
toju-app/src/app/shared-kernel/direct-message-contracts.ts
Normal file
54
toju-app/src/app/shared-kernel/direct-message-contracts.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
import type { Reaction } from './message.models';
|
||||
|
||||
export type DirectMessageStatus = 'QUEUED' | 'SENT' | 'DELIVERED' | 'ACKNOWLEDGED';
|
||||
export type DirectMessageMutationType = 'edit' | 'delete' | 'reaction-add' | 'reaction-remove';
|
||||
|
||||
export interface DirectMessageParticipant {
|
||||
userId: string;
|
||||
username: string;
|
||||
displayName: string;
|
||||
description?: string;
|
||||
avatarUrl?: string;
|
||||
avatarHash?: string;
|
||||
avatarMime?: string;
|
||||
avatarUpdatedAt?: number;
|
||||
profileUpdatedAt?: number;
|
||||
}
|
||||
|
||||
export interface DirectMessage {
|
||||
id: string;
|
||||
conversationId: string;
|
||||
senderId: string;
|
||||
recipientId: string;
|
||||
content: string;
|
||||
timestamp: number;
|
||||
status: DirectMessageStatus;
|
||||
editedAt?: number;
|
||||
isDeleted?: boolean;
|
||||
reactions?: Reaction[];
|
||||
replyToId?: string;
|
||||
}
|
||||
|
||||
export interface DirectMessageEventPayload {
|
||||
message: DirectMessage;
|
||||
sender: DirectMessageParticipant;
|
||||
}
|
||||
|
||||
export interface DirectMessageStatusEventPayload {
|
||||
conversationId: string;
|
||||
messageId: string;
|
||||
status: DirectMessageStatus;
|
||||
updatedAt: number;
|
||||
}
|
||||
|
||||
export interface DirectMessageMutationEventPayload {
|
||||
conversationId: string;
|
||||
messageId: string;
|
||||
type: DirectMessageMutationType;
|
||||
content?: string;
|
||||
editedAt?: number;
|
||||
reaction?: Reaction;
|
||||
oderId?: string;
|
||||
emoji?: string;
|
||||
updatedAt: number;
|
||||
}
|
||||
@@ -4,6 +4,7 @@ export * from './access-control.models';
|
||||
export * from './message.models';
|
||||
export * from './moderation.models';
|
||||
export * from './voice-state.models';
|
||||
export * from './direct-message-contracts';
|
||||
export * from './chat-events';
|
||||
export * from './media-preferences';
|
||||
export * from './signaling-contracts';
|
||||
|
||||
Reference in New Issue
Block a user