import { Contact } from "./Contact"; export type GroupParticipant = Contact & { isAdmin?: boolean; isSuperAdmin?: boolean; admin?: "admin" | "superadmin" | "member"; }; export type ParticipantAction = | "add" | "remove" | "promote" | "demote" | "modify"; export type RequestJoinAction = "created" | "revoked" | "rejected"; export type RequestJoinMethod = | "invite_link" | "linked_group_join" | "non_admin_add" | undefined; export interface GroupMetadata { id: string; addressingMode: string; owner: string | undefined; ownerCountry: string; subject: string; /** group subject owner */ subjectOwner?: string; /** group subject modification date */ subjectTime?: number; creation?: number; desc?: string; descOwner?: string; descId?: string; /** if this group is part of a community, it returns the jid of the community to which it belongs */ linkedParent?: string; /** is set when the group only allows admins to change group settings */ restrict?: boolean; /** is set when the group only allows admins to write messages */ announce?: boolean; /** is set when the group also allows members to add participants */ memberAddMode?: boolean; /** Request approval to join the group */ joinApprovalMode?: boolean; /** is this a community */ isCommunity?: boolean; /** is this the announce of a community */ isCommunityAnnounce?: boolean; /** number of group participants */ size?: number; participants: GroupParticipant[]; picture?: string; ephemeralDuration?: number; inviteCode?: string; /** the person who added you to group or changed some setting in group */ author?: string; } export interface WAGroupCreateResponse { status: number; gid?: string; participants?: [ { [key: string]: {}; }, ]; } export interface GroupModificationResponse { status: number; participants?: { [key: string]: {}; }; }