Files
healer-man/src/app/onlineGroupTypes.ts
2026-09-27 21:48:00 -04:00

74 lines
2.2 KiB
TypeScript

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;
}