import type { PartyRole } from "../game/partyRoles"; import type { CharacterAppearance } from "./characterCatalog"; export interface OnlineGroupCharacter { readonly id: string; readonly name: string; readonly classId: string; readonly specializationId?: string | null; readonly categoryId: string; readonly raceId: string; readonly gender: "female" | "male"; readonly level: number; readonly appearance?: CharacterAppearance; } export interface OnlineGroupMember { readonly accountId: string; readonly username: string; readonly character: OnlineGroupCharacter | null; readonly role: PartyRole | null; readonly joinedAt: number; } export interface OnlineGroupActivity { readonly biteSizedSelection?: import("../../shared/bite-sized-layouts.mjs").BiteSizedRunSelection; readonly difficultyId?: string; readonly bossDifficulty?: number; readonly id: string; readonly type: "dungeon" | "manastorm"; readonly contentId: string; readonly fillWithAi: boolean; readonly includeBetaSpecs?: boolean; readonly companionReadinessRevision?: number; readonly companionSpecializationIds?: readonly string[]; readonly partySize: number; readonly startingLevel: number | null; readonly startedAt: number; } export interface OnlineGroup { readonly id: string; readonly leaderAccountId: string; readonly members: readonly OnlineGroupMember[]; readonly activity: OnlineGroupActivity | null; readonly activityRevision: number; readonly createdAt: number; readonly updatedAt: number; } export interface OnlineGroupInvitation { readonly id: string; readonly groupId: string; readonly inviterAccountId: string; readonly inviterUsername: string; readonly createdAt: number; readonly expiresAt: number; } export interface OnlineGroupSnapshot { readonly group: OnlineGroup | null; readonly invitations: readonly OnlineGroupInvitation[]; } export interface StartOnlineGroupActivityInput { readonly difficultyId?: string; readonly bossDifficulty?: number; readonly type: OnlineGroupActivity["type"]; readonly contentId: string; readonly fillWithAi: boolean; readonly includeBetaSpecs?: boolean; readonly partySize: number; readonly startingLevel?: number; }