export type Nip29GroupId = string | undefined; export type Nip29Relay = string | undefined; export interface Nip29GroupMetadata { name: string; picture: string; about: string; isPublic: boolean; isOpen: boolean; } export interface Nip29GroupRole { name: string; description?: string; } export interface Nip29GroupAdmin { pubkey: string; roles: string[]; } export interface Nip29GroupMember { pubkey: string; } export interface Nip29GroupJoinRequest { id: string; pubkey: string; reason?: string; code?: string; timestamp: number; } export interface Nip29GroupLeaveRequest { id: string; pubkey: string; reason?: string; timestamp: number; } export interface Nip29GroupChat { id: string; pubkey: string; content: string; timestamp: number; parentId?: string | undefined; } export interface Nip29GroupThread { id: string; pubkey: string; content: string; subject: string; timestamp: number; } export interface Nip29GroupThreadComment { id: string; pubkey: string; content: string; timestamp: number; rootId: string; } export interface Nip29GroupReaction { id: string; pubkey: string; content: string; timestamp: number; targetId: string; } export interface Nip29Group { relay?: Nip29Relay; groupId?: Nip29GroupId; metadata?: Nip29GroupMetadata | undefined; admins?: Nip29GroupAdmin[] | undefined; members?: Nip29GroupMember[] | undefined; roles?: Nip29GroupRole[] | undefined; joinRequests?: Nip29GroupJoinRequest[] | undefined; leaveRequests?: Nip29GroupLeaveRequest[] | undefined; chats?: Nip29GroupChat[] | undefined; threads?: Nip29GroupThread[] | undefined; threadComments?: Nip29GroupThreadComment[] | undefined; reactions?: Nip29GroupReaction[] | undefined; }