@wise-old-man/utils
Version:
A JavaScript/TypeScript client that interfaces and consumes the Wise Old Man API, an API that tracks and measures players' progress in Old School Runescape.
3,992 lines • 108 kB
TypeScript
declare class BaseAPIClient {
private headers;
private baseUrl;
constructor(headers: object, baseUrl: string);
private buildParams;
private fetch;
private request;
private requestText;
postRequest<T>(path: string, body?: unknown): Promise<T>;
putRequest<T>(path: string, body?: unknown): Promise<T>;
deleteRequest<T>(path: string, body?: unknown): Promise<T>;
getRequest<T>(path: string, params?: unknown): Promise<T>;
getText(path: string, params?: unknown): Promise<string>;
}
declare const Skill: {
readonly OVERALL: "overall";
readonly ATTACK: "attack";
readonly DEFENCE: "defence";
readonly STRENGTH: "strength";
readonly HITPOINTS: "hitpoints";
readonly RANGED: "ranged";
readonly PRAYER: "prayer";
readonly MAGIC: "magic";
readonly COOKING: "cooking";
readonly WOODCUTTING: "woodcutting";
readonly FLETCHING: "fletching";
readonly FISHING: "fishing";
readonly FIREMAKING: "firemaking";
readonly CRAFTING: "crafting";
readonly SMITHING: "smithing";
readonly MINING: "mining";
readonly HERBLORE: "herblore";
readonly AGILITY: "agility";
readonly THIEVING: "thieving";
readonly SLAYER: "slayer";
readonly FARMING: "farming";
readonly RUNECRAFTING: "runecrafting";
readonly HUNTER: "hunter";
readonly CONSTRUCTION: "construction";
readonly SAILING: "sailing";
};
type Skill = (typeof Skill)[keyof typeof Skill];
declare const Activity: {
readonly BOUNTY_HUNTER_HUNTER: "bounty_hunter_hunter";
readonly BOUNTY_HUNTER_ROGUE: "bounty_hunter_rogue";
readonly CLUE_SCROLLS_ALL: "clue_scrolls_all";
readonly CLUE_SCROLLS_BEGINNER: "clue_scrolls_beginner";
readonly CLUE_SCROLLS_EASY: "clue_scrolls_easy";
readonly CLUE_SCROLLS_MEDIUM: "clue_scrolls_medium";
readonly CLUE_SCROLLS_HARD: "clue_scrolls_hard";
readonly CLUE_SCROLLS_ELITE: "clue_scrolls_elite";
readonly CLUE_SCROLLS_MASTER: "clue_scrolls_master";
readonly LAST_MAN_STANDING: "last_man_standing";
readonly PVP_ARENA: "pvp_arena";
readonly SOUL_WARS_ZEAL: "soul_wars_zeal";
readonly GUARDIANS_OF_THE_RIFT: "guardians_of_the_rift";
readonly COLOSSEUM_GLORY: "colosseum_glory";
readonly COLLECTIONS_LOGGED: "collections_logged";
};
type Activity = (typeof Activity)[keyof typeof Activity];
declare const Boss: {
readonly ABYSSAL_SIRE: "abyssal_sire";
readonly ALCHEMICAL_HYDRA: "alchemical_hydra";
readonly AMOXLIATL: "amoxliatl";
readonly ARAXXOR: "araxxor";
readonly ARTIO: "artio";
readonly BARROWS_CHESTS: "barrows_chests";
readonly BRUTUS: "brutus";
readonly BRYOPHYTA: "bryophyta";
readonly CALLISTO: "callisto";
readonly CALVARION: "calvarion";
readonly CERBERUS: "cerberus";
readonly CHAMBERS_OF_XERIC: "chambers_of_xeric";
readonly CHAMBERS_OF_XERIC_CM: "chambers_of_xeric_challenge_mode";
readonly CHAOS_ELEMENTAL: "chaos_elemental";
readonly CHAOS_FANATIC: "chaos_fanatic";
readonly COMMANDER_ZILYANA: "commander_zilyana";
readonly CORPOREAL_BEAST: "corporeal_beast";
readonly CRAZY_ARCHAEOLOGIST: "crazy_archaeologist";
readonly DAGANNOTH_PRIME: "dagannoth_prime";
readonly DAGANNOTH_REX: "dagannoth_rex";
readonly DAGANNOTH_SUPREME: "dagannoth_supreme";
readonly DERANGED_ARCHAEOLOGIST: "deranged_archaeologist";
readonly DOOM_OF_MOKHAIOTL: "doom_of_mokhaiotl";
readonly DUKE_SUCELLUS: "duke_sucellus";
readonly GENERAL_GRAARDOR: "general_graardor";
readonly GIANT_MOLE: "giant_mole";
readonly GROTESQUE_GUARDIANS: "grotesque_guardians";
readonly HESPORI: "hespori";
readonly KALPHITE_QUEEN: "kalphite_queen";
readonly KING_BLACK_DRAGON: "king_black_dragon";
readonly KRAKEN: "kraken";
readonly KREEARRA: "kreearra";
readonly KRIL_TSUTSAROTH: "kril_tsutsaroth";
readonly LUNAR_CHESTS: "lunar_chests";
readonly MAD_ANGEL: "mad_angel";
readonly MAGGOT_KING: "maggot_king";
readonly MIMIC: "mimic";
readonly NEX: "nex";
readonly NIGHTMARE: "nightmare";
readonly PHOSANIS_NIGHTMARE: "phosanis_nightmare";
readonly OBOR: "obor";
readonly PHANTOM_MUSPAH: "phantom_muspah";
readonly SARACHNIS: "sarachnis";
readonly SCORPIA: "scorpia";
readonly SCURRIUS: "scurrius";
readonly SHELLBANE_GRYPHON: "shellbane_gryphon";
readonly SKOTIZO: "skotizo";
readonly SOL_HEREDIT: "sol_heredit";
readonly SPINDEL: "spindel";
readonly TEMPOROSS: "tempoross";
readonly THE_GAUNTLET: "the_gauntlet";
readonly THE_CORRUPTED_GAUNTLET: "the_corrupted_gauntlet";
readonly THE_HUEYCOATL: "the_hueycoatl";
readonly THE_LEVIATHAN: "the_leviathan";
readonly THE_ROYAL_TITANS: "the_royal_titans";
readonly THE_WHISPERER: "the_whisperer";
readonly THEATRE_OF_BLOOD: "theatre_of_blood";
readonly THEATRE_OF_BLOOD_HARD_MODE: "theatre_of_blood_hard_mode";
readonly THERMONUCLEAR_SMOKE_DEVIL: "thermonuclear_smoke_devil";
readonly TOMBS_OF_AMASCUT: "tombs_of_amascut";
readonly TOMBS_OF_AMASCUT_EXPERT: "tombs_of_amascut_expert";
readonly TZKAL_ZUK: "tzkal_zuk";
readonly TZTOK_JAD: "tztok_jad";
readonly VARDORVIS: "vardorvis";
readonly VENENATIS: "venenatis";
readonly VETION: "vetion";
readonly VORKATH: "vorkath";
readonly WINTERTODT: "wintertodt";
readonly YAMA: "yama";
readonly ZALCANO: "zalcano";
readonly ZULRAH: "zulrah";
};
type Boss = (typeof Boss)[keyof typeof Boss];
declare const ComputedMetric: {
readonly EHP: "ehp";
readonly EHB: "ehb";
};
type ComputedMetric = (typeof ComputedMetric)[keyof typeof ComputedMetric];
declare const Metric: {
readonly EHP: "ehp";
readonly EHB: "ehb";
readonly ABYSSAL_SIRE: "abyssal_sire";
readonly ALCHEMICAL_HYDRA: "alchemical_hydra";
readonly AMOXLIATL: "amoxliatl";
readonly ARAXXOR: "araxxor";
readonly ARTIO: "artio";
readonly BARROWS_CHESTS: "barrows_chests";
readonly BRUTUS: "brutus";
readonly BRYOPHYTA: "bryophyta";
readonly CALLISTO: "callisto";
readonly CALVARION: "calvarion";
readonly CERBERUS: "cerberus";
readonly CHAMBERS_OF_XERIC: "chambers_of_xeric";
readonly CHAMBERS_OF_XERIC_CM: "chambers_of_xeric_challenge_mode";
readonly CHAOS_ELEMENTAL: "chaos_elemental";
readonly CHAOS_FANATIC: "chaos_fanatic";
readonly COMMANDER_ZILYANA: "commander_zilyana";
readonly CORPOREAL_BEAST: "corporeal_beast";
readonly CRAZY_ARCHAEOLOGIST: "crazy_archaeologist";
readonly DAGANNOTH_PRIME: "dagannoth_prime";
readonly DAGANNOTH_REX: "dagannoth_rex";
readonly DAGANNOTH_SUPREME: "dagannoth_supreme";
readonly DERANGED_ARCHAEOLOGIST: "deranged_archaeologist";
readonly DOOM_OF_MOKHAIOTL: "doom_of_mokhaiotl";
readonly DUKE_SUCELLUS: "duke_sucellus";
readonly GENERAL_GRAARDOR: "general_graardor";
readonly GIANT_MOLE: "giant_mole";
readonly GROTESQUE_GUARDIANS: "grotesque_guardians";
readonly HESPORI: "hespori";
readonly KALPHITE_QUEEN: "kalphite_queen";
readonly KING_BLACK_DRAGON: "king_black_dragon";
readonly KRAKEN: "kraken";
readonly KREEARRA: "kreearra";
readonly KRIL_TSUTSAROTH: "kril_tsutsaroth";
readonly LUNAR_CHESTS: "lunar_chests";
readonly MAD_ANGEL: "mad_angel";
readonly MAGGOT_KING: "maggot_king";
readonly MIMIC: "mimic";
readonly NEX: "nex";
readonly NIGHTMARE: "nightmare";
readonly PHOSANIS_NIGHTMARE: "phosanis_nightmare";
readonly OBOR: "obor";
readonly PHANTOM_MUSPAH: "phantom_muspah";
readonly SARACHNIS: "sarachnis";
readonly SCORPIA: "scorpia";
readonly SCURRIUS: "scurrius";
readonly SHELLBANE_GRYPHON: "shellbane_gryphon";
readonly SKOTIZO: "skotizo";
readonly SOL_HEREDIT: "sol_heredit";
readonly SPINDEL: "spindel";
readonly TEMPOROSS: "tempoross";
readonly THE_GAUNTLET: "the_gauntlet";
readonly THE_CORRUPTED_GAUNTLET: "the_corrupted_gauntlet";
readonly THE_HUEYCOATL: "the_hueycoatl";
readonly THE_LEVIATHAN: "the_leviathan";
readonly THE_ROYAL_TITANS: "the_royal_titans";
readonly THE_WHISPERER: "the_whisperer";
readonly THEATRE_OF_BLOOD: "theatre_of_blood";
readonly THEATRE_OF_BLOOD_HARD_MODE: "theatre_of_blood_hard_mode";
readonly THERMONUCLEAR_SMOKE_DEVIL: "thermonuclear_smoke_devil";
readonly TOMBS_OF_AMASCUT: "tombs_of_amascut";
readonly TOMBS_OF_AMASCUT_EXPERT: "tombs_of_amascut_expert";
readonly TZKAL_ZUK: "tzkal_zuk";
readonly TZTOK_JAD: "tztok_jad";
readonly VARDORVIS: "vardorvis";
readonly VENENATIS: "venenatis";
readonly VETION: "vetion";
readonly VORKATH: "vorkath";
readonly WINTERTODT: "wintertodt";
readonly YAMA: "yama";
readonly ZALCANO: "zalcano";
readonly ZULRAH: "zulrah";
readonly BOUNTY_HUNTER_HUNTER: "bounty_hunter_hunter";
readonly BOUNTY_HUNTER_ROGUE: "bounty_hunter_rogue";
readonly CLUE_SCROLLS_ALL: "clue_scrolls_all";
readonly CLUE_SCROLLS_BEGINNER: "clue_scrolls_beginner";
readonly CLUE_SCROLLS_EASY: "clue_scrolls_easy";
readonly CLUE_SCROLLS_MEDIUM: "clue_scrolls_medium";
readonly CLUE_SCROLLS_HARD: "clue_scrolls_hard";
readonly CLUE_SCROLLS_ELITE: "clue_scrolls_elite";
readonly CLUE_SCROLLS_MASTER: "clue_scrolls_master";
readonly LAST_MAN_STANDING: "last_man_standing";
readonly PVP_ARENA: "pvp_arena";
readonly SOUL_WARS_ZEAL: "soul_wars_zeal";
readonly GUARDIANS_OF_THE_RIFT: "guardians_of_the_rift";
readonly COLOSSEUM_GLORY: "colosseum_glory";
readonly COLLECTIONS_LOGGED: "collections_logged";
readonly OVERALL: "overall";
readonly ATTACK: "attack";
readonly DEFENCE: "defence";
readonly STRENGTH: "strength";
readonly HITPOINTS: "hitpoints";
readonly RANGED: "ranged";
readonly PRAYER: "prayer";
readonly MAGIC: "magic";
readonly COOKING: "cooking";
readonly WOODCUTTING: "woodcutting";
readonly FLETCHING: "fletching";
readonly FISHING: "fishing";
readonly FIREMAKING: "firemaking";
readonly CRAFTING: "crafting";
readonly SMITHING: "smithing";
readonly MINING: "mining";
readonly HERBLORE: "herblore";
readonly AGILITY: "agility";
readonly THIEVING: "thieving";
readonly SLAYER: "slayer";
readonly FARMING: "farming";
readonly RUNECRAFTING: "runecrafting";
readonly HUNTER: "hunter";
readonly CONSTRUCTION: "construction";
readonly SAILING: "sailing";
};
type Metric = (typeof Metric)[keyof typeof Metric];
declare const METRICS: Metric[];
declare const SKILLS: Skill[];
declare const BOSSES: Boss[];
declare const ACTIVITIES: Activity[];
declare const COMPUTED_METRICS: ComputedMetric[];
interface Snapshot {
playerId: number;
importedAt: Date | null;
createdAt: Date;
overallRank: number;
overallExperience: number;
overallLevel: number;
attackRank: number;
attackExperience: number;
defenceRank: number;
defenceExperience: number;
strengthRank: number;
strengthExperience: number;
hitpointsRank: number;
hitpointsExperience: number;
rangedRank: number;
rangedExperience: number;
prayerRank: number;
prayerExperience: number;
magicRank: number;
magicExperience: number;
cookingRank: number;
cookingExperience: number;
woodcuttingRank: number;
woodcuttingExperience: number;
fletchingRank: number;
fletchingExperience: number;
fishingRank: number;
fishingExperience: number;
firemakingRank: number;
firemakingExperience: number;
craftingRank: number;
craftingExperience: number;
smithingRank: number;
smithingExperience: number;
miningRank: number;
miningExperience: number;
herbloreRank: number;
herbloreExperience: number;
agilityRank: number;
agilityExperience: number;
thievingRank: number;
thievingExperience: number;
slayerRank: number;
slayerExperience: number;
farmingRank: number;
farmingExperience: number;
runecraftingRank: number;
runecraftingExperience: number;
hunterRank: number;
hunterExperience: number;
constructionRank: number;
constructionExperience: number;
sailingRank: number;
sailingExperience: number;
bounty_hunter_hunterRank: number;
bounty_hunter_hunterScore: number;
bounty_hunter_rogueRank: number;
bounty_hunter_rogueScore: number;
clue_scrolls_allRank: number;
clue_scrolls_allScore: number;
clue_scrolls_beginnerRank: number;
clue_scrolls_beginnerScore: number;
clue_scrolls_easyRank: number;
clue_scrolls_easyScore: number;
clue_scrolls_mediumRank: number;
clue_scrolls_mediumScore: number;
clue_scrolls_hardRank: number;
clue_scrolls_hardScore: number;
clue_scrolls_eliteRank: number;
clue_scrolls_eliteScore: number;
clue_scrolls_masterRank: number;
clue_scrolls_masterScore: number;
last_man_standingRank: number;
last_man_standingScore: number;
pvp_arenaRank: number;
pvp_arenaScore: number;
soul_wars_zealRank: number;
soul_wars_zealScore: number;
guardians_of_the_riftRank: number;
guardians_of_the_riftScore: number;
colosseum_gloryRank: number;
colosseum_gloryScore: number;
collections_loggedRank: number;
collections_loggedScore: number;
abyssal_sireRank: number;
abyssal_sireKills: number;
alchemical_hydraRank: number;
alchemical_hydraKills: number;
amoxliatlRank: number;
amoxliatlKills: number;
araxxorRank: number;
araxxorKills: number;
artioRank: number;
artioKills: number;
barrows_chestsRank: number;
barrows_chestsKills: number;
brutusRank: number;
brutusKills: number;
bryophytaRank: number;
bryophytaKills: number;
cerberusRank: number;
cerberusKills: number;
callistoRank: number;
callistoKills: number;
calvarionRank: number;
calvarionKills: number;
chambers_of_xericRank: number;
chambers_of_xericKills: number;
chambers_of_xeric_challenge_modeRank: number;
chambers_of_xeric_challenge_modeKills: number;
chaos_elementalRank: number;
chaos_elementalKills: number;
chaos_fanaticRank: number;
chaos_fanaticKills: number;
commander_zilyanaRank: number;
commander_zilyanaKills: number;
corporeal_beastRank: number;
corporeal_beastKills: number;
crazy_archaeologistRank: number;
crazy_archaeologistKills: number;
dagannoth_primeRank: number;
dagannoth_primeKills: number;
dagannoth_rexRank: number;
dagannoth_rexKills: number;
dagannoth_supremeRank: number;
dagannoth_supremeKills: number;
deranged_archaeologistRank: number;
deranged_archaeologistKills: number;
doom_of_mokhaiotlRank: number;
doom_of_mokhaiotlKills: number;
duke_sucellusRank: number;
duke_sucellusKills: number;
general_graardorRank: number;
general_graardorKills: number;
giant_moleRank: number;
giant_moleKills: number;
grotesque_guardiansRank: number;
grotesque_guardiansKills: number;
hesporiRank: number;
hesporiKills: number;
kalphite_queenRank: number;
kalphite_queenKills: number;
king_black_dragonRank: number;
king_black_dragonKills: number;
krakenRank: number;
krakenKills: number;
kreearraRank: number;
kreearraKills: number;
kril_tsutsarothRank: number;
kril_tsutsarothKills: number;
lunar_chestsRank: number;
lunar_chestsKills: number;
mad_angelRank: number;
mad_angelKills: number;
maggot_kingRank: number;
maggot_kingKills: number;
mimicRank: number;
mimicKills: number;
nexRank: number;
nexKills: number;
nightmareRank: number;
nightmareKills: number;
phosanis_nightmareRank: number;
phosanis_nightmareKills: number;
oborRank: number;
oborKills: number;
phantom_muspahRank: number;
phantom_muspahKills: number;
sarachnisRank: number;
sarachnisKills: number;
scorpiaRank: number;
scorpiaKills: number;
scurriusRank: number;
scurriusKills: number;
shellbane_gryphonRank: number;
shellbane_gryphonKills: number;
skotizoRank: number;
skotizoKills: number;
sol_hereditRank: number;
sol_hereditKills: number;
spindelRank: number;
spindelKills: number;
temporossRank: number;
temporossKills: number;
the_gauntletRank: number;
the_gauntletKills: number;
the_corrupted_gauntletRank: number;
the_corrupted_gauntletKills: number;
the_hueycoatlRank: number;
the_hueycoatlKills: number;
the_leviathanRank: number;
the_leviathanKills: number;
the_royal_titansRank: number;
the_royal_titansKills: number;
the_whispererRank: number;
the_whispererKills: number;
theatre_of_bloodRank: number;
theatre_of_bloodKills: number;
theatre_of_blood_hard_modeRank: number;
theatre_of_blood_hard_modeKills: number;
thermonuclear_smoke_devilRank: number;
thermonuclear_smoke_devilKills: number;
tombs_of_amascutRank: number;
tombs_of_amascutKills: number;
tombs_of_amascut_expertRank: number;
tombs_of_amascut_expertKills: number;
tzkal_zukRank: number;
tzkal_zukKills: number;
tztok_jadRank: number;
tztok_jadKills: number;
vardorvisRank: number;
vardorvisKills: number;
venenatisRank: number;
venenatisKills: number;
vetionRank: number;
vetionKills: number;
vorkathRank: number;
vorkathKills: number;
wintertodtRank: number;
wintertodtKills: number;
yamaRank: number;
yamaKills: number;
zalcanoRank: number;
zalcanoKills: number;
zulrahRank: number;
zulrahKills: number;
ehpRank: number;
ehpValue: number;
ehbRank: number;
ehbValue: number;
}
interface AchievementDefinition {
name: string;
metric: Metric;
measure: string;
threshold: number;
validate: (snapshot: Snapshot) => boolean;
getCurrentValue: (snapshot: Snapshot) => number;
}
declare enum MetricMeasure {
EXPERIENCE = "experience",
KILLS = "kills",
SCORE = "score",
VALUE = "value"
}
type AchievementMeasure = MetricMeasure | 'levels';
interface Achievement {
playerId: number;
name: string;
metric: Metric;
threshold: number;
accuracy: number | null;
createdAt: Date;
}
interface BossMetaConfig {
boss: Boss;
rate: number;
}
declare const Period: {
readonly FIVE_MIN: "five_min";
readonly DAY: "day";
readonly WEEK: "week";
readonly MONTH: "month";
readonly YEAR: "year";
};
type Period = (typeof Period)[keyof typeof Period];
declare const PERIODS: ("five_min" | "day" | "week" | "month" | "year")[];
interface CachedDelta {
playerId: number;
period: Period;
metric: Metric;
value: number;
startedAt: Date;
endedAt: Date;
updatedAt: Date;
}
declare enum CompetitionCSVTableType {
TEAM = "team",
TEAMS = "teams",
PARTICIPANTS = "participants"
}
interface CompetitionMetric {
competitionId: number;
metric: Metric;
createdAt: Date;
deletedAt: Date | null;
}
declare enum CompetitionStatus {
UPCOMING = "upcoming",
ONGOING = "ongoing",
FINISHED = "finished"
}
declare const COMPETITION_STATUSES: CompetitionStatus[];
interface CompetitionTeam {
name: string;
participants: string[];
}
declare const CompetitionTimeEventStatus: {
readonly WAITING: "waiting";
readonly EXECUTING: "executing";
readonly COMPLETED: "completed";
readonly FAILED: "failed";
readonly CANCELED: "canceled";
};
type CompetitionTimeEventStatus = (typeof CompetitionTimeEventStatus)[keyof typeof CompetitionTimeEventStatus];
declare const CompetitionTimeEventType: {
readonly AFTER_START: "after_start";
readonly BEFORE_START: "before_start";
readonly BEFORE_END: "before_end";
readonly DURING: "during";
};
type CompetitionTimeEventType = (typeof CompetitionTimeEventType)[keyof typeof CompetitionTimeEventType];
interface CompetitionTimeEvent {
id: number;
competitionId: number;
type: CompetitionTimeEventType;
offsetMinutes: number;
executeAt: Date;
status: CompetitionTimeEventStatus;
attempts: number;
executingAt: Date | null;
completedAt: Date | null;
failedAt: Date | null;
canceledAt: Date | null;
createdAt: Date;
}
declare const CompetitionType: {
readonly CLASSIC: "classic";
readonly TEAM: "team";
};
type CompetitionType = (typeof CompetitionType)[keyof typeof CompetitionType];
declare const COMPETITION_TYPES: CompetitionType[];
interface Competition {
id: number;
title: string;
type: CompetitionType;
startsAt: Date;
endsAt: Date;
groupId: number | null;
score: number;
visible: boolean;
verificationHash: string;
createdAt: Date | null;
updatedAt: Date | null;
creatorIpHash: string | null;
}
declare const Country: {
readonly AD: "AD";
readonly AE: "AE";
readonly AF: "AF";
readonly AG: "AG";
readonly AI: "AI";
readonly AL: "AL";
readonly AM: "AM";
readonly AO: "AO";
readonly AQ: "AQ";
readonly AR: "AR";
readonly AS: "AS";
readonly AT: "AT";
readonly AU: "AU";
readonly AW: "AW";
readonly AX: "AX";
readonly AZ: "AZ";
readonly BA: "BA";
readonly BB: "BB";
readonly BD: "BD";
readonly BE: "BE";
readonly BF: "BF";
readonly BG: "BG";
readonly BH: "BH";
readonly BI: "BI";
readonly BJ: "BJ";
readonly BL: "BL";
readonly BM: "BM";
readonly BN: "BN";
readonly BO: "BO";
readonly BQ: "BQ";
readonly BR: "BR";
readonly BS: "BS";
readonly BT: "BT";
readonly BV: "BV";
readonly BW: "BW";
readonly BY: "BY";
readonly BZ: "BZ";
readonly CA: "CA";
readonly CC: "CC";
readonly CD: "CD";
readonly CF: "CF";
readonly CG: "CG";
readonly CH: "CH";
readonly CI: "CI";
readonly CK: "CK";
readonly CL: "CL";
readonly CM: "CM";
readonly CN: "CN";
readonly CO: "CO";
readonly CR: "CR";
readonly CU: "CU";
readonly CV: "CV";
readonly CW: "CW";
readonly CX: "CX";
readonly CY: "CY";
readonly CZ: "CZ";
readonly DE: "DE";
readonly DJ: "DJ";
readonly DK: "DK";
readonly DM: "DM";
readonly DO: "DO";
readonly DZ: "DZ";
readonly EC: "EC";
readonly EE: "EE";
readonly EG: "EG";
readonly EH: "EH";
readonly ER: "ER";
readonly ES: "ES";
readonly ET: "ET";
readonly FI: "FI";
readonly FJ: "FJ";
readonly FK: "FK";
readonly FM: "FM";
readonly FO: "FO";
readonly FR: "FR";
readonly GA: "GA";
readonly GB: "GB";
readonly GB_ENG: "GB_ENG";
readonly GB_NIR: "GB_NIR";
readonly GB_SCT: "GB_SCT";
readonly GB_WLS: "GB_WLS";
readonly GD: "GD";
readonly GE: "GE";
readonly GF: "GF";
readonly GG: "GG";
readonly GH: "GH";
readonly GI: "GI";
readonly GL: "GL";
readonly GM: "GM";
readonly GN: "GN";
readonly GP: "GP";
readonly GQ: "GQ";
readonly GR: "GR";
readonly GS: "GS";
readonly GT: "GT";
readonly GU: "GU";
readonly GW: "GW";
readonly GY: "GY";
readonly HK: "HK";
readonly HM: "HM";
readonly HN: "HN";
readonly HR: "HR";
readonly HT: "HT";
readonly HU: "HU";
readonly ID: "ID";
readonly IE: "IE";
readonly IL: "IL";
readonly IM: "IM";
readonly IN: "IN";
readonly IO: "IO";
readonly IQ: "IQ";
readonly IR: "IR";
readonly IS: "IS";
readonly IT: "IT";
readonly JE: "JE";
readonly JM: "JM";
readonly JO: "JO";
readonly JP: "JP";
readonly KE: "KE";
readonly KG: "KG";
readonly KH: "KH";
readonly KI: "KI";
readonly KM: "KM";
readonly KN: "KN";
readonly KP: "KP";
readonly KR: "KR";
readonly KW: "KW";
readonly KY: "KY";
readonly KZ: "KZ";
readonly LA: "LA";
readonly LB: "LB";
readonly LC: "LC";
readonly LI: "LI";
readonly LK: "LK";
readonly LR: "LR";
readonly LS: "LS";
readonly LT: "LT";
readonly LU: "LU";
readonly LV: "LV";
readonly LY: "LY";
readonly MA: "MA";
readonly MC: "MC";
readonly MD: "MD";
readonly ME: "ME";
readonly MF: "MF";
readonly MG: "MG";
readonly MH: "MH";
readonly MK: "MK";
readonly ML: "ML";
readonly MM: "MM";
readonly MN: "MN";
readonly MO: "MO";
readonly MP: "MP";
readonly MQ: "MQ";
readonly MR: "MR";
readonly MS: "MS";
readonly MT: "MT";
readonly MU: "MU";
readonly MV: "MV";
readonly MW: "MW";
readonly MX: "MX";
readonly MY: "MY";
readonly MZ: "MZ";
readonly NA: "NA";
readonly NC: "NC";
readonly NE: "NE";
readonly NF: "NF";
readonly NG: "NG";
readonly NI: "NI";
readonly NL: "NL";
readonly NO: "NO";
readonly NP: "NP";
readonly NR: "NR";
readonly NU: "NU";
readonly NZ: "NZ";
readonly OM: "OM";
readonly PA: "PA";
readonly PE: "PE";
readonly PF: "PF";
readonly PG: "PG";
readonly PH: "PH";
readonly PK: "PK";
readonly PL: "PL";
readonly PM: "PM";
readonly PN: "PN";
readonly PR: "PR";
readonly PS: "PS";
readonly PT: "PT";
readonly PW: "PW";
readonly PY: "PY";
readonly QA: "QA";
readonly RE: "RE";
readonly RO: "RO";
readonly RS: "RS";
readonly RU: "RU";
readonly RW: "RW";
readonly SA: "SA";
readonly SB: "SB";
readonly SC: "SC";
readonly SD: "SD";
readonly SE: "SE";
readonly SG: "SG";
readonly SH: "SH";
readonly SI: "SI";
readonly SJ: "SJ";
readonly SK: "SK";
readonly SL: "SL";
readonly SM: "SM";
readonly SN: "SN";
readonly SO: "SO";
readonly SR: "SR";
readonly SS: "SS";
readonly ST: "ST";
readonly SV: "SV";
readonly SX: "SX";
readonly SY: "SY";
readonly SZ: "SZ";
readonly TC: "TC";
readonly TD: "TD";
readonly TF: "TF";
readonly TG: "TG";
readonly TH: "TH";
readonly TJ: "TJ";
readonly TK: "TK";
readonly TL: "TL";
readonly TM: "TM";
readonly TN: "TN";
readonly TO: "TO";
readonly TR: "TR";
readonly TT: "TT";
readonly TV: "TV";
readonly TW: "TW";
readonly TZ: "TZ";
readonly UA: "UA";
readonly UG: "UG";
readonly UM: "UM";
readonly US: "US";
readonly UY: "UY";
readonly UZ: "UZ";
readonly VA: "VA";
readonly VC: "VC";
readonly VE: "VE";
readonly VG: "VG";
readonly VI: "VI";
readonly VN: "VN";
readonly VU: "VU";
readonly WF: "WF";
readonly WS: "WS";
readonly YE: "YE";
readonly YT: "YT";
readonly ZA: "ZA";
readonly ZM: "ZM";
readonly ZW: "ZW";
};
type Country = (typeof Country)[keyof typeof Country];
declare const COUNTRY_CODES: Country[];
declare enum EfficiencyAlgorithmType {
MAIN = "main",
IRONMAN = "ironman",
ULTIMATE = "ultimate",
LVL3 = "lvl3",
F2P = "f2p",
F2P_LVL3 = "f2p_lvl3",
F2P_IRONMAN = "f2p_ironman",
F2P_LVL3_IRONMAN = "f2p_lvl3_ironman",
DEF1 = "def1"
}
declare const GroupRole: {
readonly ACHIEVER: "achiever";
readonly ADAMANT: "adamant";
readonly ADEPT: "adept";
readonly ADMINISTRATOR: "administrator";
readonly ADMIRAL: "admiral";
readonly ADVENTURER: "adventurer";
readonly AIR: "air";
readonly ANCHOR: "anchor";
readonly APOTHECARY: "apothecary";
readonly ARCHER: "archer";
readonly ARMADYLEAN: "armadylean";
readonly ARTILLERY: "artillery";
readonly ARTISAN: "artisan";
readonly ASGARNIAN: "asgarnian";
readonly ASSASSIN: "assassin";
readonly ASSISTANT: "assistant";
readonly ASTRAL: "astral";
readonly ATHLETE: "athlete";
readonly ATTACKER: "attacker";
readonly BANDIT: "bandit";
readonly BANDOSIAN: "bandosian";
readonly BARBARIAN: "barbarian";
readonly BATTLEMAGE: "battlemage";
readonly BEAST: "beast";
readonly BERSERKER: "berserker";
readonly BLISTERWOOD: "blisterwood";
readonly BLOOD: "blood";
readonly BLUE: "blue";
readonly BOB: "bob";
readonly BODY: "body";
readonly BRASSICAN: "brassican";
readonly BRAWLER: "brawler";
readonly BRIGADIER: "brigadier";
readonly BRIGAND: "brigand";
readonly BRONZE: "bronze";
readonly BRUISER: "bruiser";
readonly BULWARK: "bulwark";
readonly BURGLAR: "burglar";
readonly BURNT: "burnt";
readonly CADET: "cadet";
readonly CAPTAIN: "captain";
readonly CARRY: "carry";
readonly CHAMPION: "champion";
readonly CHAOS: "chaos";
readonly CLERIC: "cleric";
readonly COLLECTOR: "collector";
readonly COLONEL: "colonel";
readonly COMMANDER: "commander";
readonly COMPETITOR: "competitor";
readonly COMPLETIONIST: "completionist";
readonly CONSTRUCTOR: "constructor";
readonly COOK: "cook";
readonly COORDINATOR: "coordinator";
readonly CORPORAL: "corporal";
readonly COSMIC: "cosmic";
readonly COUNCILLOR: "councillor";
readonly CRAFTER: "crafter";
readonly CREW: "crew";
readonly CRUSADER: "crusader";
readonly CUTPURSE: "cutpurse";
readonly DEATH: "death";
readonly DEFENDER: "defender";
readonly DEFILER: "defiler";
readonly DEPUTY_OWNER: "deputy_owner";
readonly DESTROYER: "destroyer";
readonly DIAMOND: "diamond";
readonly DISEASED: "diseased";
readonly DOCTOR: "doctor";
readonly DOGSBODY: "dogsbody";
readonly DRAGON: "dragon";
readonly DRAGONSTONE: "dragonstone";
readonly DRUID: "druid";
readonly DUELLIST: "duellist";
readonly EARTH: "earth";
readonly ELITE: "elite";
readonly EMERALD: "emerald";
readonly ENFORCER: "enforcer";
readonly EPIC: "epic";
readonly EXECUTIVE: "executive";
readonly EXPERT: "expert";
readonly EXPLORER: "explorer";
readonly FARMER: "farmer";
readonly FEEDER: "feeder";
readonly FIGHTER: "fighter";
readonly FIRE: "fire";
readonly FIREMAKER: "firemaker";
readonly FIRESTARTER: "firestarter";
readonly FISHER: "fisher";
readonly FLETCHER: "fletcher";
readonly FORAGER: "forager";
readonly FREMENNIK: "fremennik";
readonly GAMER: "gamer";
readonly GATHERER: "gatherer";
readonly GENERAL: "general";
readonly GNOME_CHILD: "gnome_child";
readonly GNOME_ELDER: "gnome_elder";
readonly GOBLIN: "goblin";
readonly GOLD: "gold";
readonly GOON: "goon";
readonly GREEN: "green";
readonly GREY: "grey";
readonly GUARDIAN: "guardian";
readonly GUTHIXIAN: "guthixian";
readonly HARPOON: "harpoon";
readonly HEALER: "healer";
readonly HELLCAT: "hellcat";
readonly HELPER: "helper";
readonly HERBOLOGIST: "herbologist";
readonly HERO: "hero";
readonly HOLY: "holy";
readonly HOARDER: "hoarder";
readonly HUNTER: "hunter";
readonly IGNITOR: "ignitor";
readonly ILLUSIONIST: "illusionist";
readonly IMP: "imp";
readonly INFANTRY: "infantry";
readonly INQUISITOR: "inquisitor";
readonly IRON: "iron";
readonly JADE: "jade";
readonly JUSTICIAR: "justiciar";
readonly KANDARIN: "kandarin";
readonly KARAMJAN: "karamjan";
readonly KHARIDIAN: "kharidian";
readonly KITTEN: "kitten";
readonly KNIGHT: "knight";
readonly LABOURER: "labourer";
readonly LAW: "law";
readonly LEADER: "leader";
readonly LEARNER: "learner";
readonly LEGACY: "legacy";
readonly LEGEND: "legend";
readonly LEGIONNAIRE: "legionnaire";
readonly LIEUTENANT: "lieutenant";
readonly LOOTER: "looter";
readonly LUMBERJACK: "lumberjack";
readonly MAGIC: "magic";
readonly MAGICIAN: "magician";
readonly MAJOR: "major";
readonly MAPLE: "maple";
readonly MARSHAL: "marshal";
readonly MASTER: "master";
readonly MAXED: "maxed";
readonly MEDIATOR: "mediator";
readonly MEDIC: "medic";
readonly MENTOR: "mentor";
readonly MEMBER: "member";
readonly MERCHANT: "merchant";
readonly MIND: "mind";
readonly MINER: "miner";
readonly MINION: "minion";
readonly MISTHALINIAN: "misthalinian";
readonly MITHRIL: "mithril";
readonly MODERATOR: "moderator";
readonly MONARCH: "monarch";
readonly MORYTANIAN: "morytanian";
readonly MYSTIC: "mystic";
readonly MYTH: "myth";
readonly NATURAL: "natural";
readonly NATURE: "nature";
readonly NECROMANCER: "necromancer";
readonly NINJA: "ninja";
readonly NOBLE: "noble";
readonly NOVICE: "novice";
readonly NURSE: "nurse";
readonly OAK: "oak";
readonly OFFICER: "officer";
readonly ONYX: "onyx";
readonly OPAL: "opal";
readonly ORACLE: "oracle";
readonly ORANGE: "orange";
readonly OWNER: "owner";
readonly PAGE: "page";
readonly PALADIN: "paladin";
readonly PAWN: "pawn";
readonly PILGRIM: "pilgrim";
readonly PINE: "pine";
readonly PINK: "pink";
readonly PREFECT: "prefect";
readonly PRIEST: "priest";
readonly PRIVATE: "private";
readonly PRODIGY: "prodigy";
readonly PROSELYTE: "proselyte";
readonly PROSPECTOR: "prospector";
readonly PROTECTOR: "protector";
readonly PURE: "pure";
readonly PURPLE: "purple";
readonly PYROMANCER: "pyromancer";
readonly QUESTER: "quester";
readonly RACER: "racer";
readonly RAIDER: "raider";
readonly RANGER: "ranger";
readonly RECORD_CHASER: "record_chaser";
readonly RECRUIT: "recruit";
readonly RECRUITER: "recruiter";
readonly RED_TOPAZ: "red_topaz";
readonly RED: "red";
readonly ROGUE: "rogue";
readonly RUBY: "ruby";
readonly RUNE: "rune";
readonly RUNECRAFTER: "runecrafter";
readonly SAGE: "sage";
readonly SAPPHIRE: "sapphire";
readonly SARADOMINIST: "saradominist";
readonly SAVIOUR: "saviour";
readonly SCAVENGER: "scavenger";
readonly SCHOLAR: "scholar";
readonly SCOURGE: "scourge";
readonly SCOUT: "scout";
readonly SCRIBE: "scribe";
readonly SEER: "seer";
readonly SENATOR: "senator";
readonly SENTRY: "sentry";
readonly SERENIST: "serenist";
readonly SERGEANT: "sergeant";
readonly SHAMAN: "shaman";
readonly SHERIFF: "sheriff";
readonly SHORT_GREEN_GUY: "short_green_guy";
readonly SKILLER: "skiller";
readonly SKULLED: "skulled";
readonly SLAYER: "slayer";
readonly SMITER: "smiter";
readonly SMITH: "smith";
readonly SMUGGLER: "smuggler";
readonly SNIPER: "sniper";
readonly SOUL: "soul";
readonly SPECIALIST: "specialist";
readonly SPEED_RUNNER: "speed_runner";
readonly SPELLCASTER: "spellcaster";
readonly SQUIRE: "squire";
readonly STAFF: "staff";
readonly STEEL: "steel";
readonly STRIDER: "strider";
readonly STRIKER: "striker";
readonly SUMMONER: "summoner";
readonly SUPERIOR: "superior";
readonly SUPERVISOR: "supervisor";
readonly TEACHER: "teacher";
readonly TEMPLAR: "templar";
readonly THERAPIST: "therapist";
readonly THIEF: "thief";
readonly TIRANNIAN: "tirannian";
readonly TRIALIST: "trialist";
readonly TRICKSTER: "trickster";
readonly TZKAL: "tzkal";
readonly TZTOK: "tztok";
readonly UNHOLY: "unholy";
readonly VAGRANT: "vagrant";
readonly VANGUARD: "vanguard";
readonly WALKER: "walker";
readonly WANDERER: "wanderer";
readonly WARDEN: "warden";
readonly WARLOCK: "warlock";
readonly WARRIOR: "warrior";
readonly WATER: "water";
readonly WILD: "wild";
readonly WILLOW: "willow";
readonly WILY: "wily";
readonly WINTUMBER: "wintumber";
readonly WITCH: "witch";
readonly WIZARD: "wizard";
readonly WORKER: "worker";
readonly WRATH: "wrath";
readonly XERICIAN: "xerician";
readonly YELLOW: "yellow";
readonly YEW: "yew";
readonly ZAMORAKIAN: "zamorakian";
readonly ZAROSIAN: "zarosian";
readonly ZEALOT: "zealot";
readonly ZENYTE: "zenyte";
};
type GroupRole = (typeof GroupRole)[keyof typeof GroupRole];
declare const GROUP_ROLES: GroupRole[];
interface GroupRoleOrder {
groupId: number;
role: GroupRole;
index: number;
}
interface GroupSocialLinks {
groupId: number;
website: string | null;
discord: string | null;
twitter: string | null;
youtube: string | null;
twitch: string | null;
createdAt: Date;
updatedAt: Date;
}
interface Group {
id: number;
name: string;
clanChat: string | null;
description: string | null;
homeworld: number | null;
verified: boolean;
patron: boolean;
visible: boolean;
profileImage: string | null;
bannerImage: string | null;
score: number;
verificationHash: string;
createdAt: Date;
updatedAt: Date;
creatorIpHash: string | null;
}
declare const MemberActivityType: {
readonly JOINED: "joined";
readonly LEFT: "left";
readonly CHANGED_ROLE: "changed_role";
};
type MemberActivityType = (typeof MemberActivityType)[keyof typeof MemberActivityType];
interface MemberActivity {
groupId: number;
playerId: number;
type: MemberActivityType;
role: GroupRole | null;
previousRole: GroupRole | null;
createdAt: Date;
}
interface Membership {
playerId: number;
groupId: number;
role: GroupRole;
createdAt: Date;
updatedAt: Date;
clientSyncJoinedAt: Date | null;
}
interface MetricDelta {
start: number;
end: number;
gained: number;
}
declare enum MetricType {
SKILL = "skill",
BOSS = "boss",
ACTIVITY = "activity",
COMPUTED = "computed"
}
type NameChangeDenyContext = {
reason: 'manual_review';
} | {
reason: 'old_stats_cannot_be_found';
} | {
reason: 'new_name_not_on_the_hiscores';
} | {
reason: 'negative_gains';
negativeGains: Record<Metric, number>;
};
type NameChangeSkipContext = {
reason: 'transition_period_too_long';
maxHoursDiff: number;
hoursDiff: number;
} | {
reason: 'excessive_gains';
ehpDiff: number;
ehbDiff: number;
hoursDiff: number;
} | {
reason: 'total_level_too_low';
minTotalLevel: number;
totalLevel: number;
};
type NameChangeReviewContext = NameChangeSkipContext | NameChangeDenyContext;
declare const NameChangeStatus: {
readonly PENDING: "pending";
readonly DENIED: "denied";
readonly APPROVED: "approved";
};
type NameChangeStatus = (typeof NameChangeStatus)[keyof typeof NameChangeStatus];
interface NameChange {
id: number;
playerId: number;
oldName: string;
newName: string;
status: NameChangeStatus;
reviewContext: NameChangeReviewContext | null;
resolvedAt: Date | null;
createdAt: Date;
updatedAt: Date;
}
interface Participation {
playerId: number;
competitionId: number;
startSnapshotDate: Date | null;
endSnapshotDate: Date | null;
teamName: string | null;
createdAt: Date;
updatedAt: Date;
}
interface Patron {
id: string;
name: string;
email: string | null;
discordId: string | null;
groupId: number | null;
playerId: number | null;
tier: number;
createdAt: Date;
}
declare const PlayerAnnotationType: {
readonly OPT_OUT: "opt_out";
readonly OPT_OUT_GROUPS: "opt_out_groups";
readonly OPT_OUT_COMPETITIONS: "opt_out_competitions";
readonly BLOCKED: "blocked";
readonly FAKE_F2P: "fake_f2p";
};
type PlayerAnnotationType = (typeof PlayerAnnotationType)[keyof typeof PlayerAnnotationType];
interface PlayerAnnotation {
playerId: number;
type: PlayerAnnotationType;
createdAt: Date;
}
interface PlayerArchive {
playerId: number;
previousUsername: string;
archiveUsername: string;
restoredUsername: string | null;
createdAt: Date;
restoredAt: Date | null;
}
declare const PlayerBuild: {
readonly MAIN: "main";
readonly F2P: "f2p";
readonly F2P_LVL3: "f2p_lvl3";
readonly LVL3: "lvl3";
readonly ZERKER: "zerker";
readonly DEF1: "def1";
readonly HP10: "hp10";
};
type PlayerBuild = (typeof PlayerBuild)[keyof typeof PlayerBuild];
declare const PLAYER_BUILDS: PlayerBuild[];
declare const PlayerStatus: {
readonly ACTIVE: "active";
readonly UNRANKED: "unranked";
readonly FLAGGED: "flagged";
readonly ARCHIVED: "archived";
readonly BANNED: "banned";
};
type PlayerStatus = (typeof PlayerStatus)[keyof typeof PlayerStatus];
declare const PLAYER_STATUSES: PlayerStatus[];
declare const PlayerType: {
readonly UNKNOWN: "unknown";
readonly REGULAR: "regular";
readonly IRONMAN: "ironman";
readonly HARDCORE: "hardcore";
readonly ULTIMATE: "ultimate";
};
type PlayerType = (typeof PlayerType)[keyof typeof PlayerType];
declare const PLAYER_TYPES: PlayerType[];
interface Player {
id: number;
username: string;
displayName: string;
type: PlayerType;
build: PlayerBuild;
status: PlayerStatus;
country: Country | null;
patron: boolean;
exp: number;
ehp: number;
ehb: number;
ttm: number;
tt200m: number;
registeredAt: Date;
updatedAt: Date | null;
lastChangedAt: Date | null;
lastImportedAt: Date | null;
latestSnapshotDate: Date | null;
}
interface Record$1 {
playerId: number;
period: Period;
metric: Metric;
value: number;
updatedAt: Date;
}
interface SkillMetaBonus {
originSkill: Skill;
bonusSkill: Skill;
startExp: number;
endExp: number;
maxBonus?: number;
end: boolean;
ratio: number;
}
interface SkillMetaMethod {
rate: number;
realRate?: number;
startExp: number;
description: string;
}
interface SkillMetaConfig {
skill: Skill;
methods: Array<SkillMetaMethod>;
bonuses: SkillMetaBonus[];
}
interface TrendDatapoint {
date: Date;
metric: Metric;
sum: number;
maxValue: number;
minValue: number;
maxRank: number;
}
type GroupMemberInput = {
username: string;
role: GroupRole;
clientSyncJoinedAt?: Date;
};
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
interface AchievementResponse extends Achievement {
measure: AchievementMeasure;
legacy: boolean;
}
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
interface AchievementProgressResponse extends Omit<AchievementResponse, 'createdAt'> {
createdAt: Date | null;
currentValue: number;
absoluteProgress: number;
relativeProgress: number;
}
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
interface GroupResponse extends Omit<Group, 'verificationHash' | 'creatorIpHash'> {
memberCount: number;
}
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
interface CompetitionResponse extends Omit<Competition, 'verificationHash' | 'creatorIpHash'> {
metric: Metric;
metrics: Array<{
weight: number;
metric: Metric;
createdAt: Date;
}>;
participantCount: number;
group?: GroupResponse;
}
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
type ParticipationResponse = Omit<Participation, 'startSnapshotDate' | 'endSnapshotDate'>;
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
type PlayerResponse = Omit<Player, 'latestSnapshotDate'>;
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
interface CompetitionDetailsResponse extends CompetitionResponse {
participations: Array<ParticipationResponse & {
player: PlayerResponse;
deltas: Array<{
metric: Metric | 'total';
values: MetricDelta;
levels: MetricDelta;
}>;
progress: MetricDelta;
levels: MetricDelta;
}>;
}
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
interface SkillData {
metric: Skill;
rank: number;
level: number;
experience: number;
ehp: number;
}
interface BossData {
metric: Boss;
rank: number;
kills: number;
ehb: number;
}
interface ActivityData {
metric: Activity;
rank: number;
score: number;
}
interface ComputeMetricData {
metric: ComputedMetric;
rank: number;
value: number;
}
interface SnapshotResponse {
playerId: number;
createdAt: Date;
importedAt: Date | null;
data: {
skills: Record<Skill, SkillData>;
bosses: Record<Boss, BossData>;
activities: Record<Activity, ActivityData>;
computed: Record<ComputedMetric, ComputeMetricData>;
};
}
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
type GroupRoleOrderResponse = GroupRoleOrder;
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
type GroupSocialLinksResponse = Pick<GroupSocialLinks, 'website' | 'discord' | 'twitter' | 'youtube' | 'twitch'>;
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
type MembershipResponse = Membership;
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
interface GroupDetailsResponse extends GroupResponse {
socialLinks: GroupSocialLinksResponse;
roleOrders: Array<GroupRoleOrderResponse>;
memberships: Array<MembershipResponse & {
player: PlayerResponse;
}>;
}
interface GroupHiscoresEntryResponse {
player: PlayerResponse;
data: GroupHiscoresSkillData | GroupHiscoresBossData | GroupHiscoresActivityData | GroupHiscoresComputedMetricData;
}
interface GroupHiscoresSkillData {
type: 'skill';
rank: number;
level: number;
experience: number;
}
interface GroupHiscoresBossData {
type: 'boss';
rank: number;
kills: number;
}
interface GroupHiscoresActivityData {
type: 'activity';
rank: number;
score: number;
}
interface GroupHiscoresComputedMetricData {
type: 'computed';
rank: number;
value: number;
}
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
interface GroupMetricLeadersResponse {
skills: Record<Skill, {
player: PlayerResponse | null;
metric: Skill;
rank: number;
level: number;
experience: number;
}>;
bosses: Record<Boss, {
player: PlayerResponse | null;
metric: Boss;
rank: number;
kills: number;
}>;
activities: Record<Activity, {
player: PlayerResponse | null;
metric: Activity;
rank: number;
score: number;
}>;
computed: Record<ComputedMetric, {
player: PlayerResponse | null;
metric: ComputedMetric;
rank: number;
value: number;
}>;
}
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
interface GroupStatisticsResponse {
maxedCombatCount: number;
maxedTotalCount: number;
maxed200msCount: number;
averageStats: SnapshotResponse;
metricLeaders: GroupMetricLeadersResponse;
}
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
type MemberActivityResponse = MemberActivity;
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
type NameChangeResponse = NameChange;
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
interface NameChangeDetailsResponse {
nameChange: NameChangeResponse;
data?: {
isNewOnHiscores: boolean;
isOldOnHiscores: boolean;
isNewTracked: boolean;
hasNegativeGains: boolean;
negativeGains: Record<Metric, number> | null;
timeDiff: number;
hoursDiff: number;
ehpDiff: number;
ehbDiff: number;
oldStats: SnapshotResponse;
newStats: SnapshotResponse | null;
};
}
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
interface ParticipantHistoryResponse {
player: PlayerResponse;
history: Array<{
value: number;
date: Date;
}>;
}
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
type PlayerAnnotationResponse = PlayerAnnotation;
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
type PlayerArchiveResponse = PlayerArchive;
type PlayerCompetitionStandingResponse = ParticipationResponse & {
competition: CompetitionResponse;
progress: MetricDelta;
levels: MetricDelta;
rank: number;
};
interface PlayerDeltasMapResponse {
skills: Record<Skill, {
metric: Skill;
ehp: MetricDelta;
rank: MetricDelta;
level: MetricDelta;
experience: MetricDelta;
}>;
bosses: Record<Boss, {
metric: Boss;
ehb: MetricDelta;
rank: MetricDelta;
kills: MetricDelta;
}>;
activities: Record<Activity, {
metric: Activity;
rank: MetricDelta;
score: MetricDelta;
}>;
computed: Record<ComputedMetric, {
metric: ComputedMetric;
rank: MetricDelta;
value: MetricDelta;
}>;
}
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
interface PlayerDetailsResponse extends PlayerResponse {
combatLevel: number;
archive: PlayerArchiveResponse | null;
annotations: Array<PlayerAnnotationResponse> | null;
latestSnapshot: SnapshotResponse | null;
}
/**
* Response types are used to format the data returned by the API.
*
* Although sometimes very similar to our database models,
* they often include transformations, additional properties or sensitive field omissions.
*/
type RecordResponse = Record$1;
interface GenericCountMessageResponse {
count: number;
message: string;
}
interface GenericMessageResponse {
message: string;
}
type TimeRangeFilter = {
period: Period | string;
} | {
startDate: Date;
endDate: Date;
};
interface CreateGroupPayload {
name: string;
clanChat?: string;
homeworld?: number;
description?: string;
members: Array<{
username: string;
role?: GroupRole;
}>;
}
type EditGroupPayload = Partial<CreateGroupPayload> & {
bannerImage?: string;
profileImage?: string;
socialLinks?: Partial<{
website?: string | null;
discord?: string | null;
twitter?: string | null;
twitch?: string | null;
youtube?: string | null;
}>;
roleOrders?: Array<{
role: GroupRole;
index: number;
}>;
};
type CreateCompetitionPayload = {
title: string;
metric: Metric;
startsAt: Date;
endsAt: Date;
groupId?: number;
groupVerificationCode?: string;
} & ({
participants: string[];
} | {
teams: CompetitionTeam[];
});
type EditCompetitionPayload = {
title?: string;
metric?: Metric;
startsAt?: Date;
endsAt?: Date;
participants?: string[];
teams?: CompetitionTeam[];
};
interface PaginationOptions {
limit?: number;
offset?: number;
}
declare class CompetitionsClient extends BaseAPIClient {
/**
* Searches for competitions that match a title, type, metric and status filter.
* @returns A list of competitions.
*/
searchCompetitions(filter: {
title?: string;
metric?: Metric;
type?: CompetitionType;
status?: CompetitionStatus;
}, pagination?: PaginationOptions): Promise<CompetitionResponse[]>;
/**
* Fetches the competition's full details, including all the participants and their progress.
* @returns A competition with a list of participants.
*/
getCompetitionDetails(id: number, previewMetric?: Metric): Promise<CompetitionDetailsResponse>;
/**
* Fetches the competition's participant list in CSV format.
* @returns A string containing the CSV content.
*/
getCompetitionDetailsCSV(id: number, params?: {
previewMetric?: Metric;
teamName?: string;
table?: CompetitionCSVTableType;
}): Promise<string>;
/**
* Fetches all the values (exp, kc, etc) in chronological order within the bounds
* of the competition, for the top participants.
* @returns A list of competition progress objects, including the player and their value history over time.
*/
getCompetitionTopHistory(id: number, previewMetric?: Metric | undefined, limit?: number): Promise<ParticipantHistoryResponse[]>;
/**
* Creates a new competition.
* @returns The newly created competition, and the verification code that authorizes future changes to it.
*/
createCompetition(payload: CreateCompetitionPayload): Promise<{
competition: CompetitionDetailsResponse;
verificationCode: string;
}>;
/**
* Edits an existing competition.
* @returns The updated competition.
*/
editCompetition(id: number, payload: EditCompetitionPayload, verificationCode: string): Promise<CompetitionDetailsResponse>;
/**
* Deletes an existing competition.
* @returns A confirmation message.
*/
deleteCompetition(id: number, verificationCode: string): Promise<GenericMessageResponse>;
/**
* Adds all (valid) given participants to a competition, ignoring duplicates.
* @returns The number of participants added and a confirmation message.
*/
addParticipants(id: number, participants: string[], verificationCode: string): Promise<GenericCountMessageResponse>;
/**
* Remove all given usernames from a competition, ignoring usernames that aren't competing.
* @returns The number of participants removed and a confirmation message.
*/
removeParticipants(id: number, participants: string[], verificationCode: string): Promise<GenericCountMessageResponse>;
/**
* Adds all (valid) given teams to a team competition, ignoring duplicates.
* @returns The number of participants added and a confirmation message.
*/
addTeams(id: number, teams: CompetitionTeam[], verificationCode: string): Promise<GenericCountMessageResponse>;
/**
* Remove all given team names from a competition, ignoring names that don't exist.
* @returns The number of participants removed and a confirmation message.
*/
removeTeams(id: number, teamNames: string[], verificationCode: string): Promise<GenericCountMessageResponse>;
/**
* Adds an "update" request to the queue, for each outdated competition participant.
* @returns The number of players to be updated and a confirmation message.
*/
updateAll(id: number, verificationCode: string): Promise<GenericCountMessageResponse>;
}
declare class DeltasClient extends BaseAPIClient {
/**
* Fetches the current top leaderboard for a specific metric, period, playerType, playerBuild and country.
* @returns A list of deltas, with their respective players, values and dates included.
*/
getDeltaLeaderboard(filter: {
country?: Country;
playerType?: PlayerType;
playerBuild?: PlayerBuild;
metric: Metric;
period: Period | string;
}): Promise<{
player: PlayerResponse;
startDate: Date;
endDate: Date;
gained: number;
}[]>;
}
declare class EfficiencyClient extends BaseAPIClient {
/**
* Fetches the current efficiency leaderboard for a specific efficiency metric, playerType, playerBuild and country.
* @returns A list of players.
*/
getEfficiencyLeaderboards(filter: {
country?: Country;
playerType?: PlayerType;
playerBuild?: PlayerBuild;
metric: typeof Metric.EHP | typeof Metric.EHB | 'ehp+ehb';
}, pagination?: PaginationOptions): Promise<PlayerResponse[]>;
/**
* Fetches the top EHP (Efficient Hours Played) rates.
* @returns A list of skilling methods and their bonus exp ratios.
*/
getEHPRates(algorithmType: `${EfficiencyAlgorithmType}`): Promise<SkillMetaConfig[]>;
/**
* Fetches the top EHB (Efficient Hours Bossed) rates.
* @returns A list of bosses and their respective "per-hour" kill rates.
*/
getEHBRates(algorithmType: `${EfficiencyAlgorithmType}`): Promise<BossMetaConfig[]>;
}
declare class GroupsClient extends BaseAPIClient {
/**
* Searches for groups that match a partial name.
* @returns A list of groups.
*/
searchGroups(name: string, pagination?: PaginationOptions): Promise<GroupResponse[]>;
/**
* Fetches a group's details, including a list of membership objects.
* @returns A group details object.
*/
getGroupDetails(id: number): Promise<GroupDetailsResponse>;
/**
* Creates a new group.
* @returns The newly created group, and the verification code that authorizes future changes to it.
*/
createGroup(payload: CreateGroupPayload): Promise<{
group: GroupDetailsResponse;
verificationCode: string;
}>;
/**
* Edits an existing group.
* @returns The updated group.
*/
editGroup(id: number, payload: EditGroupPayload, verificationCode: string): Promise<GroupDetailsResponse>;
/**
* Deletes an existing group.
* @returns A confirmation message.
*/
deleteGroup(id: number, verificationCode: string): Promise<GenericMessageResponse>;
/**
* Adds all (valid) given usernames (and roles) to a group, ignoring duplicates.
* @returns The number of members added and a confirmation message.
*/
addMembers(id: number, members: Array<{
username: string;
role?: GroupRole;
}>, verificationCode: string): Promise<GenericCountMessageResponse>;
/**
* Remove all given usernames from a group, ignoring usernames that aren't members.
* @returns The number of members removed and a confirmation message.
*/
removeMembers(id: number, usernames: string[], verificationCode: string): Promise<GenericCountMessageResponse>;
/**
* Changes a player's role in a given group.
* @returns The updated membership, with player included.
*/
changeRole(id: number, payload: {
username: string;
role: GroupRole;
}, verificationCode: string): Promise<Membership & {
player: PlayerResponse;
}>;
/**
* Adds an "update" request to the queue, for each outdated group member.
* @returns The number of players to be updated and a confirmation message.
*/
updateAll(id: number, verificationCode: string): Promise<GenericCountMessageResponse>;
/**
* Fetches all of the groups's competitions
* @returns A list of competitions.
*/
getGroupCompetitions(id: number, pagination?: PaginationOptions): Promise<CompetitionResponse[]>;
/**
* Fetches a group's gains for a specific metric, over a given time period or date range.
*
* **Note:** If you need gains for more than one metric, use {@link getBulkGroupGains} instead
* of calling this once per metric - it fetches every metric's gains in a single request.
* @returns A list of players and their gains.
*/
getGroupGains(id: number, filter: TimeRangeFilter & {
metric: Metric;
}): Promise<{
player: PlayerResponse;
startDate: Date;
endDate: Date;
data: MetricDelta;
}[]>;
/**
* Fetches a group's gains for every metric, over a given time period or date range.
* @returns A list of players and their gains, broken down by metric.
*/
getBulkGroupGains(id: number, filter: TimeRangeFilter): Promise<{
player: PlayerResponse;
startDate: Date;
endDate: Date;
data: Array<MetricDelta & {
metric: Metric;
}>;
}[]>;
/**
* Fetches a group members' latest achievements.
* @returns A list of achievements.
*/
getGroupAchievements(id: number, pagination?: PaginationOptions): Promise<(AchievementResponse & {
player: PlayerResponse;
})[]>;
/**
* Fetches a group's record leaderboard for a specific metric and period.
* @returns A list of records, including their respective players.
*/
getGroupRecords(id: number, filter: {
metric: Metric;
period: Period;
}, pagination?: PaginationOptions): Promise<(Record$1 & {
player: PlayerResponse;
})[]>;
/**
* Fetches a group's hiscores for a specific metric.
* @returns A list of hiscores entries (value, rank), including their respective players.
*/
getGroupHiscores(id: number, metric: Metric): Promise<GroupHiscoresEntryResponse[]>;
/**
* Fetches every group member's stats in a single request.
* @returns A list of players and their latest snapshot data.
*/
getGroupBulkHiscores(id: number): Promise<{
player: PlayerResponse;
data: SnapshotResponse;
}[]>;
/**
* Fetches a group members' latest name changes.
* @returns A list of name change (approved) requests.
*/
getGroupNameChanges(id: number, pagination?: PaginationOptions): Promise<(NameChange & {
player: PlayerResponse;
})[]>;
/**
* Fetches a group's general statistics.
* @returns An object with a few statistic values and an average stats snapshot.
*/
getGroupStatistics(id: number): Promise<GroupStatisticsResponse>;
/**
* Fetches a group's activity.
* @returns A list of a group's (join, leave and role changed) activity.
*/
getGroupActivity(id: number, pagination?: PaginationOptions): Promise<(MemberActivity & {
player: PlayerResponse;
})[]>;
/**
* Fetches the groups's member list in CSV format.
* @returns A string containing the CSV content.
*/
getMembersCSV(id: number): Promise<string>;
}
declare class NameChangesClient extends BaseAPIClient {
/**
* Searches for name changes that match a name and/or status filter.
* @returns A list of name changes.
*/
searchNameChanges(filter: {
username?: string;
status?: NameChangeStatus;
}, pagination?: PaginationOptions): Promise<NameChange[]>;
/**
* Submits a name change request between two usernames (old and new).
* @returns A pending name change request, to be reviewed and resolved at a later date.
*/
submitNameChange(oldName: string, newName: string): Promise<NameChange>;
}
declare class PlayersClient extends BaseAPIClient {
/**
* Searches players by partial username.
* @returns A list of players.
*/
searchPlayers(partialUsername: string, pagination?: PaginationOptions): Promise<PlayerResponse[]>;
/**
* Updates/tracks a player.
* @returns The player's new details, including the latest snapshot.
*/
updatePlayer(username: string): Promise<PlayerDetailsResponse>;
/**
* Asserts (and attempts to fix, if necessary) a player's game-mode type.
* @returns The updated player, and an indication of whether the type was changed.
*/
assertPlayerType(username: string): Promise<{
player: PlayerResponse;
changed: boolean;
}>;
/**
* Fetches a player's details.
* @returns The player's details, including the latest snapshot.
*/
getPlayerDetails(username: string): Promise<PlayerDetailsResponse>;
/**
* Fetches a player's details by ID.
* @returns The player's details, including the latest snapshot.
*/
getPlayerDetailsById(id: number): Promise<PlayerDetailsResponse>;
/**
* Fetches a player's current achievements.
* @returns A list of achievements.
*/
getPlayerAchievements(username: string): Promise<AchievementResponse[]>;
/**
* Fetches a player's current achievement progress.
* @returns A list of achievements (completed or otherwise), with their respective relative/absolute progress percentage.
*/
getPlayerAchievementProgress(username: string): Promise<AchievementProgressResponse[]>;
/**
* Fetches all of the player's competition participations.
* @returns A list of participations, with the respective competition included.
*/
getPlayerCompetitions(username: string, filter?: {
status?: CompetitionStatus;
}, pagination?: PaginationOptions): Promise<(ParticipationResponse & {
competition: CompetitionResponse;
})[]>;
/**
* Fetches all of the player's competition participations' standings.
* @returns A list of participations, with the respective competition, rank and progress included.
*/
getPlayerCompetitionStandings(username: string, filter: {
status?: CompetitionStatus;
}): Promise<PlayerCompetitionStandingResponse[]>;
/**
* Fetches all of the player's group memberships.
* @returns A list of memberships, with the respective group included.
*/
getPlayerGroups(username: string, pagination?: PaginationOptions): Promise<(Membership & {
group: GroupResponse;
})[]>;
/**
* Fetches a player's gains, for a specific period or time range, as a [metric: data] map.
* @returns A map of each metric's gained data.
*/
getPlayerGains(username: string, options: TimeRangeFilter): Promise<{
startsAt: Date | null;
endsAt: Date | null;
data: PlayerDeltasMapResponse;
}>;
/**
* Fetches all of the player's records.
* @returns A list of records.
*/
getPlayerRecords(username: string, options?: {
period: Period | string;
metric: Metric;
}): Promise<Record$1[]>;
/**
* Fetches all of the player's past snapshots.
* @returns A list of snapshots.
*/
getPlayerSnapshots(username: string, filter: TimeRangeFilter, pagination?: PaginationOptions): Promise<SnapshotResponse[]>;
/**
* Fetches all of the player's past snapshots' timeline.
* @returns A list of timeseries data (value, rank, date)
*/
getPlayerSnapshotTimeline(username: string, metric: Metric, options?: TimeRangeFilter): Promise<{
value: number;
rank: number;
date: Date;
}[]>;
/**
* Fetches all of the player's approved name changes.
* @returns A list of name changes.
*/
getPlayerNames(username: string): Promise<NameChange[]>;
/**
* Fetches all of archived players that previously held this username.
* @returns A list of player archives.
*/
getPlayerArchives(username: string): Promise<(PlayerArchive & {
player: PlayerResponse;
})[]>;
}
declare class RecordsClient extends BaseAPIClient {
/**
* Fetches the current records leaderboard for a specific metric, period, playerType, playerBuild and country.
* @returns A list of records, with their respective players, dates and values included.
*/
getRecordLeaderboard(filter: {
country?: Country;
playerType?: PlayerType;
playerBuild?: PlayerBuild;
metric: Metric;
period: Period;
}): Promise<(Record$1 & {
player: PlayerResponse;
})[]>;
}
interface WOMClientOptions {
apiKey?: string;
userAgent?: string;
baseAPIUrl?: string;
}
declare class WOMClient extends BaseAPIClient {
deltas: DeltasClient;
groups: GroupsClient;
players: PlayersClient;
records: RecordsClient;
efficiency: EfficiencyClient;
nameChanges: NameChangesClient;
competitions: CompetitionsClient;
constructor(options?: WOMClientOptions);
}
declare const CompetitionStatusProps: Record<CompetitionStatus, {
name: string;
}>;
declare const CompetitionTypeProps: Record<CompetitionType, {
name: string;
}>;
declare const CountryProps: Record<Country, {
code: Country;
name: string;
}>;
declare function isCountry(countryCodeString: string): countryCodeString is Country;
declare function findCountry(countryIdentifier: string): {
code: Country;
name: string;
};
declare function findCountryByName(countryName: string): {
code: Country;
name: string;
};
declare function findCountryByCode(countryCode: string): {
code: Country;
name: string;
};
declare const MAX_LEVEL = 99;
declare const MAX_VIRTUAL_LEVEL = 126;
declare const MAX_SKILL_EXP = 200000000;
declare const SKILL_EXP_AT_99 = 13034431;
declare const CAPPED_MAX_TOTAL_XP: number;
declare function getExpForLevel(level: number): number;
declare function getLevel(exp: number, virtual?: boolean): number;
declare function getCombatLevel(attack: number, strength: number, defence: number, ranged: number, magic: number, hitpoints: number, prayer: number): number;
declare function formatNumber(num: number, withLetters?: boolean, decimalPrecision?: number): string | -1;
declare const GroupRoleProps: {
achiever: {
name: string;
};
adamant: {
name: string;
};
adept: {
name: string;
};
administrator: {
name: string;
};
admiral: {
name: string;
};
adventurer: {
name: string;
};
air: {
name: string;
};
anchor: {
name: string;
};
apothecary: {
name: string;
};
archer: {
name: string;
};
armadylean: {
name: string;
};
artillery: {
name: string;
};
artisan: {
name: string;
};
asgarnian: {
name: string;
};
assassin: {
name: string;
};
assistant: {
name: string;
};
astral: {
name: string;
};
athlete: {
name: string;
};
attacker: {
name: string;
};
bandit: {
name: string;
};
bandosian: {
name: string;
};
barbarian: {
name: string;
};
battlemage: {
name: string;
};
beast: {
name: string;
};
berserker: {
name: string;
};
blisterwood: {
name: string;
};
blood: {
name: string;
};
blue: {
name: string;
};
bob: {
name: string;
};
body: {
name: string;
};
brassican: {
name: string;
};
brawler: {
name: string;
};
brigadier: {
name: string;
};
brigand: {
name: string;
};
bronze: {
name: string;
};
bruiser: {
name: string;
};
bulwark: {
name: string;
};
burglar: {
name: string;
};
burnt: {
name: string;
};
cadet: {
name: string;
};
captain: {
name: string;
};
carry: {
name: string;
};
champion: {
name: string;
};
chaos: {
name: string;
};
cleric: {
name: string;
};
collector: {
name: string;
};
colonel: {
name: string;
};
commander: {
name: string;
};
competitor: {
name: string;
};
completionist: {
name: string;
};
constructor: {
name: string;
};
cook: {
name: string;
};
coordinator: {
name: string;
};
corporal: {
name: string;
};
cosmic: {
name: string;
};
councillor: {
name: string;
};
crafter: {
name: string;
};
crew: {
name: string;
};
crusader: {
name: string;
};
cutpurse: {
name: string;
};
death: {
name: string;
};
defender: {
name: string;
};
defiler: {
name: string;
};
deputy_owner: {
name: string;
};
destroyer: {
name: string;
};
diamond: {
name: string;
};
diseased: {
name: string;
};
doctor: {
name: string;
};
dogsbody: {
name: string;
};
dragon: {
name: string;
};
dragonstone: {
name: string;
};
druid: {
name: string;
};
duellist: {
name: string;
};
earth: {
name: string;
};
elite: {
name: string;
};
emerald: {
name: string;
};
enforcer: {
name: string;
};
epic: {
name: string;
};
executive: {
name: string;
};
expert: {
name: string;
};
explorer: {
name: string;
};
farmer: {
name: string;
};
feeder: {
name: string;
};
fighter: {
name: string;
};
fire: {
name: string;
};
firemaker: {
name: string;
};
firestarter: {
name: string;
};
fisher: {
name: string;
};
fletcher: {
name: string;
};
forager: {
name: string;
};
fremennik: {
name: string;
};
gamer: {
name: string;
};
gatherer: {
name: string;
};
general: {
name: string;
};
gnome_child: {
name: string;
};
gnome_elder: {
name: string;
};
goblin: {
name: string;
};
gold: {
name: string;
};
goon: {
name: string;
};
green: {
name: string;
};
grey: {
name: string;
};
guardian: {
name: string;
};
guthixian: {
name: string;
};
harpoon: {
name: string;
};
healer: {
name: string;
};
hellcat: {
name: string;
};
helper: {
name: string;
};
herbologist: {
name: string;
};
hero: {
name: string;
};
holy: {
name: string;
};
hoarder: {
name: string;
};
hunter: {
name: string;
};
ignitor: {
name: string;
};
illusionist: {
name: string;
};
imp: {
name: string;
};
infantry: {
name: string;
};
inquisitor: {
name: string;
};
iron: {
name: string;
};
jade: {
name: string;
};
justiciar: {
name: string;
};
kandarin: {
name: string;
};
karamjan: {
name: string;
};
kharidian: {
name: string;
};
kitten: {
name: string;
};
knight: {
name: string;
};
labourer: {
name: string;
};
law: {
name: string;
};
leader: {
name: string;
};
learner: {
name: string;
};
legacy: {
name: string;
};
legend: {
name: string;
};
legionnaire: {
name: string;
};
lieutenant: {
name: string;
};
looter: {
name: string;
};
lumberjack: {
name: string;
};
magic: {
name: string;
};
magician: {
name: string;
};
major: {
name: string;
};
maple: {
name: string;
};
marshal: {
name: string;
};
master: {
name: string;
};
maxed: {
name: string;
};
mediator: {
name: string;
};
medic: {
name: string;
};
mentor: {
name: string;
};
member: {
name: string;
};
merchant: {
name: string;
};
mind: {
name: string;
};
miner: {
name: string;
};
minion: {
name: string;
};
misthalinian: {
name: string;
};
mithril: {
name: string;
};
moderator: {
name: string;
};
monarch: {
name: string;
};
morytanian: {
name: string;
};
mystic: {
name: string;
};
myth: {
name: string;
};
natural: {
name: string;
};
nature: {
name: string;
};
necromancer: {
name: string;
};
ninja: {
name: string;
};
noble: {
name: string;
};
novice: {
name: string;
};
nurse: {
name: string;
};
oak: {
name: string;
};
officer: {
name: string;
};
onyx: {
name: string;
};
opal: {
name: string;
};
oracle: {
name: string;
};
orange: {
name: string;
};
owner: {
name: string;
};
page: {
name: string;
};
paladin: {
name: string;
};
pawn: {
name: string;
};
pilgrim: {
name: string;
};
pine: {
name: string;
};
pink: {
name: string;
};
prefect: {
name: string;
};
priest: {
name: string;
};
private: {
name: string;
};
prodigy: {
name: string;
};
proselyte: {
name: string;
};
prospector: {
name: string;
};
protector: {
name: string;
};
pure: {
name: string;
};
purple: {
name: string;
};
pyromancer: {
name: string;
};
quester: {
name: string;
};
racer: {
name: string;
};
raider: {
name: string;
};
ranger: {
name: string;
};
record_chaser: {
name: string;
};
recruit: {
name: string;
};
recruiter: {
name: string;
};
red_topaz: {
name: string;
};
red: {
name: string;
};
rogue: {
name: string;
};
ruby: {
name: string;
};
rune: {
name: string;
};
runecrafter: {
name: string;
};
sage: {
name: string;
};
sapphire: {
name: string;
};
saradominist: {
name: string;
};
saviour: {
name: string;
};
scavenger: {
name: string;
};
scholar: {
name: string;
};
scourge: {
name: string;
};
scout: {
name: string;
};
scribe: {
name: string;
};
seer: {
name: string;
};
senator: {
name: string;
};
sentry: {
name: string;
};
serenist: {
name: string;
};
sergeant: {
name: string;
};
shaman: {
name: string;
};
sheriff: {
name: string;
};
short_green_guy: {
name: string;
};
skiller: {
name: string;
};
skulled: {
name: string;
};
slayer: {
name: string;
};
smiter: {
name: string;
};
smith: {
name: string;
};
smuggler: {
name: string;
};
sniper: {
name: string;
};
soul: {
name: string;
};
specialist: {
name: string;
};
speed_runner: {
name: string;
};
spellcaster: {
name: string;
};
squire: {
name: string;
};
staff: {
name: string;
};
steel: {
name: string;
};
strider: {
name: string;
};
striker: {
name: string;
};
summoner: {
name: string;
};
superior: {
name: string;
};
supervisor: {
name: string;
};
teacher: {
name: string;
};
templar: {
name: string;
};
therapist: {
name: string;
};
thief: {
name: string;
};
tirannian: {
name: string;
};
trialist: {
name: string;
};
trickster: {
name: string;
};
tzkal: {
name: string;
};
tztok: {
name: string;
};
unholy: {
name: string;
};
vagrant: {
name: string;
};
vanguard: {
name: string;
};
walker: {
name: string;
};
wanderer: {
name: string;
};
warden: {
name: string;
};
warlock: {
name: string;
};
warrior: {
name: string;
};
water: {
name: string;
};
wild: {
name: string;
};
willow: {
name: string;
};
wily: {
name: string;
};
wintumber: {
name: string;
};
witch: {
name: string;
};
wizard: {
name: string;
};
worker: {
name: string;
};
wrath: {
name: string;
};
xerician: {
name: string;
};
yellow: {
name: string;
};
yew: {
name: string;
};
zamorakian: {
name: string;
};
zarosian: {
name: string;
};
zealot: {
name: string;
};
zenyte: {
name: string;
};
};
declare function isGroupRole(roleString: string): roleString is GroupRole;
declare const PRIVILEGED_GROUP_ROLES: readonly ["administrator", "owner", "leader", "deputy_owner", "moderator"];
declare const SkillProps: Record<Skill, {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
}>;
declare const BossProps: Record<Boss, {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
}>;
declare const ActivityProps: Record<Activity, {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
}>;
declare const ComputedMetricProps: Record<ComputedMetric, {
name: string;
type: MetricType;
measure: MetricMeasure;
}>;
declare const MetricProps: {
readonly ehp: {
name: string;
type: MetricType;
measure: MetricMeasure;
};
readonly ehb: {
name: string;
type: MetricType;
measure: MetricMeasure;
};
readonly bounty_hunter_hunter: {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
};
readonly bounty_hunter_rogue: {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
};
readonly clue_scrolls_all: {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
};
readonly clue_scrolls_beginner: {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
};
readonly clue_scrolls_easy: {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
};
readonly clue_scrolls_medium: {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
};
readonly clue_scrolls_hard: {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
};
readonly clue_scrolls_elite: {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
};
readonly clue_scrolls_master: {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
};
readonly last_man_standing: {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
};
readonly pvp_arena: {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
};
readonly soul_wars_zeal: {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
};
readonly guardians_of_the_rift: {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
};
readonly colosseum_glory: {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
};
readonly collections_logged: {
name: string;
minimumValue: number;
type: MetricType;
measure: MetricMeasure;
};
readonly abyssal_sire: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly alchemical_hydra: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly amoxliatl: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly araxxor: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly artio: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly barrows_chests: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly brutus: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly bryophyta: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly callisto: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly calvarion: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly cerberus: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly chambers_of_xeric: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly chambers_of_xeric_challenge_mode: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly chaos_elemental: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly chaos_fanatic: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly commander_zilyana: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly corporeal_beast: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly crazy_archaeologist: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly dagannoth_prime: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly dagannoth_rex: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly dagannoth_supreme: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly deranged_archaeologist: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly doom_of_mokhaiotl: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly duke_sucellus: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly general_graardor: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly giant_mole: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly grotesque_guardians: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly hespori: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly kalphite_queen: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly king_black_dragon: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly kraken: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly kreearra: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly kril_tsutsaroth: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly lunar_chests: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly mad_angel: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly maggot_king: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly mimic: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly nex: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly nightmare: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly phosanis_nightmare: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly obor: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly phantom_muspah: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly sarachnis: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly scorpia: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly scurrius: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly shellbane_gryphon: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly skotizo: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly sol_heredit: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly spindel: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly tempoross: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly the_gauntlet: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly the_corrupted_gauntlet: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly the_hueycoatl: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly the_leviathan: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly the_royal_titans: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly the_whisperer: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly theatre_of_blood: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly theatre_of_blood_hard_mode: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly thermonuclear_smoke_devil: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly tombs_of_amascut: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly tombs_of_amascut_expert: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly tzkal_zuk: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly tztok_jad: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly vardorvis: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly venenatis: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly vetion: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly vorkath: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly wintertodt: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly yama: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly zalcano: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly zulrah: {
name: string;
minimumValue: number;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly overall: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly attack: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly defence: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly strength: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly hitpoints: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly ranged: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly prayer: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly magic: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly cooking: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly woodcutting: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly fletching: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly fishing: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly firemaking: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly crafting: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly smithing: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly mining: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly herblore: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly agility: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly thieving: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly slayer: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly farming: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly runecrafting: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly hunter: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly construction: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
readonly sailing: {
name: string;
isCombat: boolean;
isMembers: boolean;
type: MetricType;
measure: MetricMeasure;
};
};
declare const REAL_SKILLS: Skill[];
declare const F2P_BOSSES: Boss[];
declare const MEMBER_SKILLS: Skill[];
declare const COMBAT_SKILLS: Skill[];
declare const REAL_METRICS: (Skill | Boss | Activity)[];
declare function isMetric(metric: Metric | string): metric is Metric;
declare function isSkill(metric: Metric | string): metric is Skill;
declare function isActivity(metric: Metric | string): metric is Activity;
declare function isBoss(metric: Metric | string): metric is Boss;
declare function isComputedMetric(metric: Metric | string): metric is ComputedMetric;
declare function getMinimumValue(metric: Metric): number;
declare function getParentEfficiencyMetric(metric: Metric): "ehp" | "ehb";
declare function padNumber(value: number): string;
declare function parsePeriodExpression(periodExpression: string): {
expression: string;
durationMs: number;
};
declare const PeriodProps: Record<Period, {
name: string;
milliseconds: number;
}>;
declare function isPeriod(periodString: string): periodString is Period;
declare const PlayerBuildProps: Record<PlayerBuild, {
name: string;
}>;
declare function isPlayerBuild(buildString: string): buildString is PlayerBuild;
declare const PlayerStatusProps: Record<PlayerStatus, {
name: string;
}>;
declare function isPlayerStatus(statusString: string): statusString is PlayerStatus;
declare const PlayerTypeProps: Record<PlayerType, {
name: string;
}>;
declare function isPlayerType(typeString: string): typeString is PlayerType;
declare function roundNumber(num: number, cases: number): number;
export { ACTIVITIES, Activity, ActivityProps, BOSSES, Boss, BossProps, CAPPED_MAX_TOTAL_XP, COMBAT_SKILLS, COMPETITION_STATUSES, COMPETITION_TYPES, COMPUTED_METRICS, COUNTRY_CODES, CompetitionCSVTableType, CompetitionStatus, CompetitionStatusProps, CompetitionTimeEventStatus, CompetitionTimeEventType, CompetitionType, CompetitionTypeProps, ComputedMetric, ComputedMetricProps, Country, CountryProps, EfficiencyAlgorithmType, F2P_BOSSES, GROUP_ROLES, GroupRole, GroupRoleProps, MAX_LEVEL, MAX_SKILL_EXP, MAX_VIRTUAL_LEVEL, MEMBER_SKILLS, METRICS, MemberActivityType, Metric, MetricMeasure, MetricProps, MetricType, NameChangeStatus, PERIODS, PLAYER_BUILDS, PLAYER_STATUSES, PLAYER_TYPES, PRIVILEGED_GROUP_ROLES, Period, PeriodProps, PlayerAnnotationType, PlayerBuild, PlayerBuildProps, PlayerStatus, PlayerStatusProps, PlayerType, PlayerTypeProps, REAL_METRICS, REAL_SKILLS, SKILLS, SKILL_EXP_AT_99, Skill, SkillProps, WOMClient, findCountry, findCountryByCode, findCountryByName, formatNumber, getCombatLevel, getExpForLevel, getLevel, getMinimumValue, getParentEfficiencyMetric, isActivity, isBoss, isComputedMetric, isCountry, isGroupRole, isMetric, isPeriod, isPlayerBuild, isPlayerStatus, isPlayerType, isSkill, padNumber, parsePeriodExpression, roundNumber };
export type { Achievement, AchievementDefinition, AchievementMeasure, AchievementProgressResponse, AchievementResponse, BossMetaConfig, CachedDelta, Competition, CompetitionDetailsResponse, CompetitionMetric, CompetitionResponse, CompetitionTeam, CompetitionTimeEvent, CreateCompetitionPayload, CreateGroupPayload, EditCompetitionPayload, EditGroupPayload, GenericCountMessageResponse, GenericMessageResponse, Group, GroupDetailsResponse, GroupHiscoresEntryResponse, GroupMemberInput, GroupResponse, GroupRoleOrder, GroupSocialLinks, GroupStatisticsResponse, MemberActivity, MemberActivityResponse, Membership, MembershipResponse, MetricDelta, NameChange, NameChangeDenyContext, NameChangeDetailsResponse, NameChangeResponse, NameChangeReviewContext, NameChangeSkipContext, ParticipantHistoryResponse, Participation, ParticipationResponse, Patron, Player, PlayerAnnotation, PlayerArchive, PlayerArchiveResponse, PlayerCompetitionStandingResponse, PlayerDeltasMapResponse, PlayerDetailsResponse, PlayerResponse, Record$1 as Record, RecordResponse, SkillMetaBonus, SkillMetaConfig, SkillMetaMethod, Snapshot, SnapshotResponse, TimeRangeFilter, TrendDatapoint };