Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/schema-drift.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
version: 10.11.0
- uses: actions/setup-node@v4
with:
node-version: '22'
Expand Down
113 changes: 4 additions & 109 deletions packages/whisper/src/types/generated/lol.ts

Large diffs are not rendered by default.

52 changes: 9 additions & 43 deletions packages/whisper/src/types/generated/lor.ts
Original file line number Diff line number Diff line change
@@ -1,75 +1,41 @@
// Auto-generated by generate-schema. Do not edit.

/** Localized content string with a locale identifier */

export interface Content {
/** The content text */
content: string;
/** Locale code (e.g., 'en_US') */
locale: string;
}

/**
* Legends of Runeterra ranked leaderboard data.
*
* Contains the top players for a given region's ranked ladder.
*/
export interface LorLeaderboard {
/** Array of ranked players with their LP, name, and rank position */
players: ({ /** League points */ lp: number; /** Player name */ name: string; /** Leaderboard position */ rank: number })[];
players: ({ lp: number; name: string; rank: number })[];
}

/**
* Legends of Runeterra platform status data.
*
* Contains active incidents and scheduled maintenances for the LoR platform.
*/
export interface LorPlatformData {
/** Platform region identifier (e.g., 'Americas') */
id: string;
/** Active incidents affecting the platform */
incidents: ({ /** Time when the incident was archived */ archive_at: string; /** Time when the incident was created */ created_at: string; /** Unique incident identifier */ id: number; /** Severity level of the incident */ incident_severity: string; /** Current maintenance status */ maintenance_status: string; /** Affected platforms */ platforms: string[]; /** Localized title content */ titles: ({ /** Title text */ content: string; /** Locale code */ locale: string })[]; /** Time of last update */ updated_at: string; /** Chronological list of updates for this incident */ updates: ({ /** Author of the update */ author: string; /** Time the update was created */ created_at: string; /** Unique update identifier */ id: number; /** Whether the update is published */ publish: boolean; /** Where the update was published */ publish_locations: string[]; /** Localized translations of the update */ translations: ({ /** Translation text */ content: string; /** Locale code */ locale: string })[]; /** Time the update was last modified */ updated_at: string })[] })[];
/** Supported locale codes */ locales: string[];
/** Scheduled maintenances for the platform */
maintenances: ({ /** Time when the maintenance was archived */ archive_at: string; /** Time when the maintenance was created */ created_at: string; /** Unique maintenance identifier */ id: number; /** Severity level */ incident_severity: string; /** Current maintenance status */ maintenance_status: string; /** Affected platforms */ platforms: string[]; /** Localized title content */ titles: ({ /** Title text */ content: string; /** Locale code */ locale: string })[]; /** Time of last update */ updated_at: string; /** Chronological list of updates for this maintenance */ updates: ({ /** Author of the update */ author: string; /** Time the update was created */ created_at: string; /** Unique update identifier */ id: number; /** Whether the update is published */ publish: boolean; /** Where the update was published */ publish_locations: string[]; /** Localized translations of the update */ translations: ({ /** Translation text */ content: string; /** Locale code */ locale: string })[]; /** Time the update was last modified */ updated_at: string })[] })[];
/** Human-readable platform name */ name: string;
incidents: ({ archive_at: string; created_at: string; id: number; incident_severity: string; maintenance_status: string; platforms: string[]; titles: ({ content: string; locale: string })[]; updated_at: string; updates: ({ author: string; created_at: string; id: number; publish: boolean; publish_locations: string[]; translations: ({ content: string; locale: string })[]; updated_at: string })[] })[];
locales: string[];
maintenances: ({ archive_at: string; created_at: string; id: number; incident_severity: string; maintenance_status: string; platforms: string[]; titles: ({ content: string; locale: string })[]; updated_at: string; updates: ({ author: string; created_at: string; id: number; publish: boolean; publish_locations: string[]; translations: ({ content: string; locale: string })[]; updated_at: string })[] })[];
name: string;
}

/** A status entry representing an incident or maintenance event */
export interface Status {
/** Time when the status was archived */
archive_at: string;
/** Time when the status was created */
created_at: string;
/** Unique status identifier */
id: number;
/** Severity level of the incident */
incident_severity: string;
/** Current maintenance status */
maintenance_status: string;
/** Affected platforms */
platforms: string[];
/** Localized title content */
titles: ({ /** Title text */ content: string; /** Locale code */ locale: string })[];
/** Time of last update */
titles: ({ content: string; locale: string })[];
updated_at: string;
/** Chronological list of updates */
updates: ({ /** Author of the update */ author: string; /** Time the update was created */ created_at: string; /** Unique update identifier */ id: number; /** Whether the update is published */ publish: boolean; /** Where the update was published */ publish_locations: string[]; /** Localized translations */ translations: ({ /** Translation text */ content: string; /** Locale code */ locale: string })[]; /** Time the update was last modified */ updated_at: string })[];
updates: ({ author: string; created_at: string; id: number; publish: boolean; publish_locations: string[]; translations: ({ content: string; locale: string })[]; updated_at: string })[];
}

/** A status update entry within an incident or maintenance */
export interface Update {
/** Author of the update */
author: string;
/** Time the update was created */
created_at: string;
/** Unique update identifier */
id: number;
/** Whether the update is published */
publish: boolean;
/** Where the update was published */
publish_locations: string[];
/** Localized translations of the update */
translations: ({ /** Translation text */ content: string; /** Locale code */ locale: string })[];
/** Time the update was last modified */
translations: ({ content: string; locale: string })[];
updated_at: string;
}
49 changes: 5 additions & 44 deletions packages/whisper/src/types/generated/riftbound.ts
Original file line number Diff line number Diff line change
@@ -1,83 +1,44 @@
// Auto-generated by generate-schema. Do not edit.

/**
* A card in the Riftbound card game.
*
* Contains all metadata, art references, stats, and tags for a single card.
*/

export interface Card {
/** Card artwork references */
art: { /** Artist name */ artist: string; /** Full-resolution image URL */ fullURL: string; /** Thumbnail image URL */ thumbnailURL: string };
/** Card collector number within its set */
art: { artist: string; fullURL: string; thumbnailURL: string };
collectorNumber: number;
/** Card description text */
description: string;
/** Card faction (e.g., regional affiliation) */
faction: string;
/** Flavor text for lore/storytelling */
flavorText: string;
/** Unique card identifier */
id: string;
/** Keyword abilities on the card */
keywords: string[];
/** Card name */
name: string;
/** Card rarity tier */
rarity: string;
/** Set identifier this card belongs to */
set: string;
/** Card gameplay statistics */
stats: { /** Mana/resource cost */ cost: number; /** Energy stat */ energy: number; /** Might stat */ might: number; /** Power stat */ power: number };
/** Searchable tags for card categorization */
stats: { cost: number; energy: number; might: number; power: number };
tags: string[];
/** Card type (CHAMPION or ACCOUNT) */
type: 'CHAMPION' | 'ACCOUNT';
}

/** Artwork references for a Riftbound card */
export interface CardArt {
/** Artist name */
artist: string;
/** Full-resolution image URL */
fullURL: string;
/** Thumbnail image URL */
thumbnailURL: string;
}

/** Gameplay statistics for a Riftbound card */
export interface CardStats {
/** Mana/resource cost */
cost: number;
/** Energy stat */
energy: number;
/** Might stat */
might: number;
/** Power stat */
power: number;
}

/**
* Riftbound content data including all card sets and metadata.
*
* Contains the full game content catalog with versioning information.
*/
export interface RiftboundContent {
/** Game identifier */
game: string;
/** ISO timestamp of last content update */
lastUpdated: string;
/** Array of card sets, each containing its cards */
sets: ({ /** Cards in this set */ cards: ({ /** Card artwork references */ art: { /** Artist name */ artist: string; /** Full-resolution image URL */ fullURL: string; /** Thumbnail image URL */ thumbnailURL: string }; /** Card collector number within its set */ collectorNumber: number; /** Card description text */ description: string; /** Card faction */ faction: string; /** Flavor text */ flavorText: string; /** Unique card identifier */ id: string; /** Keyword abilities */ keywords: string[]; /** Card name */ name: string; /** Card rarity tier */ rarity: string; /** Set identifier */ set: string; /** Card gameplay statistics */ stats: { /** Mana/resource cost */ cost: number; /** Energy stat */ energy: number; /** Might stat */ might: number; /** Power stat */ power: number }; /** Searchable tags */ tags: string[]; /** Card type */ type: 'CHAMPION' | 'ACCOUNT' })[]; /** Set identifier */ id: string; /** Set name */ name: string })[];
/** Content version string */
sets: ({ cards: ({ art: { artist: string; fullURL: string; thumbnailURL: string }; collectorNumber: number; description: string; faction: string; flavorText: string; id: string; keywords: string[]; name: string; rarity: string; set: string; stats: { cost: number; energy: number; might: number; power: number }; tags: string[]; type: 'CHAMPION' | 'ACCOUNT' })[]; id: string; name: string })[];
version: string;
}

/** A set of cards in Riftbound */
export interface Set {
/** Cards in this set */
cards: ({ /** Card artwork references */ art: { /** Artist name */ artist: string; /** Full-resolution image URL */ fullURL: string; /** Thumbnail image URL */ thumbnailURL: string }; /** Card collector number */ collectorNumber: number; /** Card description text */ description: string; /** Card faction */ faction: string; /** Flavor text */ flavorText: string; /** Unique card identifier */ id: string; /** Keyword abilities */ keywords: string[]; /** Card name */ name: string; /** Card rarity tier */ rarity: string; /** Set identifier */ set: string; /** Card gameplay statistics */ stats: { /** Mana/resource cost */ cost: number; /** Energy stat */ energy: number; /** Might stat */ might: number; /** Power stat */ power: number }; /** Searchable tags */ tags: string[]; /** Card type */ type: 'CHAMPION' | 'ACCOUNT' })[];
/** Set identifier */
cards: ({ art: { artist: string; fullURL: string; thumbnailURL: string }; collectorNumber: number; description: string; faction: string; flavorText: string; id: string; keywords: string[]; name: string; rarity: string; set: string; stats: { cost: number; energy: number; might: number; power: number }; tags: string[]; type: 'CHAMPION' | 'ACCOUNT' })[];
id: string;
/** Set name */
name: string;
}
4 changes: 0 additions & 4 deletions packages/whisper/src/types/generated/riot.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
// Auto-generated by generate-schema. Do not edit.


/** Riot account information linked to a Riot ID. */
export interface Account {
/** In-game name component of the Riot ID. */
gameName: string;
/** Player Universally Unique Identifier (PUUID). */
puuid: string;
/** Tag component of the Riot ID (e.g., "NA1"). */
tagLine: string;
}
68 changes: 7 additions & 61 deletions packages/whisper/src/types/generated/tft.ts
Original file line number Diff line number Diff line change
@@ -1,131 +1,77 @@
// Auto-generated by generate-schema. Do not edit.

/** A banned champion entry in a TFT spectator game */

export interface BannedChampion {
/** Numeric champion ID */
championId: number;
/** Pick turn order in champion select */
pickTurn: number;
/** Team ID the ban belongs to (100 = blue, 200 = red) */
teamId: number;
}

/** A participant in a live TFT game */
export interface CurrentGameParticipant {
/** Whether this participant is a bot */
bot: boolean;
/** Numeric champion ID */
championId: number;
/** Custom game customization objects */
gameCustomizationObjects: { category: string; content: string }[];
/** Rune (perk) configuration for this participant */
gameCustomizationObjects: ({ category: string; content: string })[];
perks: { perkIds: number[]; perkStyle: number; perkSubStyle: number };
/** Summoner profile icon ID */
profileIconId: number;
/** Encrypted PUUID */
puuid: string;
/** First summoner spell ID */
spell1Id: number;
/** Second summoner spell ID */
spell2Id: number;
/** Team ID (100 = blue, 200 = red) */
teamId: number;
}

/** Game customization data for spectator mode */
export interface GameCustomizationObject {
/** Customization category */
category: string;
/** Customization content */
content: string;
}

/** Observer credentials for spectating a live game */
export interface Observer {
/** Encryption key required to spectate the game */
encryptionKey: string;
}

/** Rune (perk) configuration for a participant */
export interface Perks {
/** Array of selected perk (rune) IDs */
perkIds: number[];
/** Primary perk style ID */
perkStyle: number;
/** Secondary (sub) perk style ID */
perkSubStyle: number;
}

/** Live TFT game information from the spectator API */
export interface TftCurrentGameInfo {
/** List of banned champions in this game */
bannedChampions: { championId: number; pickTurn: number; teamId: number }[];
/** Unique game ID */
bannedChampions: ({ championId: number; pickTurn: number; teamId: number })[];
gameId: number;
/** Current game length in seconds */
gameLength: number;
/** Game mode identifier */
gameMode: 'CLASSIC' | 'ODIN' | 'ARAM' | 'TUTORIAL' | 'URF' | 'DOOMBOTSTEEMO' | 'ONEFORALL' | 'ASCENSION' | 'FIRSTBLOOD' | 'KINGPORO' | 'SIEGE' | 'ASSASSINATE' | 'ARSR' | 'DARKSTAR' | 'STARGUARDIAN' | 'PROJECT' | 'GAMEMODEX' | 'NEXUSBLITZ' | 'ULTBOOK' | 'CHERRY' | 'STRAWBERRY';
/** Queue configuration ID */
gameQueueConfigId: number;
/** Unix timestamp in milliseconds when the game started */
gameStartTime: number;
/** Game type (custom, matched, or tutorial) */
gameType: 'CUSTOM_GAME' | 'MATCHED_GAME' | 'TUTORIAL_GAME';
/** Map ID for this game */
mapId: number;
/** Observer credentials for spectating */
observers: { encryptionKey: string };
/** List of participants in this game */
participants: { bot: boolean; championId: number; gameCustomizationObjects: { category: string; content: string }[]; perks: { perkIds: number[]; perkStyle: number; perkSubStyle: number }; profileIconId: number; puuid: string; spell1Id: number; spell2Id: number; teamId: number }[];
/** Platform ID where this game is running (e.g., "NA1") */
participants: ({ bot: boolean; championId: number; gameCustomizationObjects: ({ category: string; content: string })[]; perks: { perkIds: number[]; perkStyle: number; perkSubStyle: number }; profileIconId: number; puuid: string; spell1Id: number; spell2Id: number; teamId: number })[];
platformId: string;
}

/** A TFT ranked league containing a list of entries */
export interface TftLeagueList {
/** List of ranked entries in this league */
entries: { freshBlood: boolean; hotStreak: boolean; inactive: boolean; leaguePoints: number; losses: number; puuid: string; rank: 'I' | 'II' | 'III' | 'IV'; veteran: boolean; wins: number }[];
/** Unique league identifier */
entries: ({ freshBlood: boolean; hotStreak: boolean; inactive: boolean; leaguePoints: number; losses: number; puuid: string; rank: 'I' | 'II' | 'III' | 'IV'; veteran: boolean; wins: number })[];
leagueId: string;
/** Display name of this league */
name: string;
/** Queue type (e.g., "RANKED_TFT") */
queue: string;
/** Tier of this league */
tier: 'IRON' | 'BRONZE' | 'SILVER' | 'GOLD' | 'PLATINUM' | 'EMERALD' | 'DIAMOND' | 'MASTER' | 'GRANDMASTER' | 'CHALLENGER';
}

/** Full TFT match data including game info and metadata */
export interface TftMatch {
/** Game information including participants, traits, and units */
info: { endOfGameResult: string; gameCreation: number; gameId: number; game_datetime: number; game_length: number; game_version: string; mapId: number; participants: { companion: { content_ID: string; item_ID: number; skin_ID: number; species: string }; gold_left: number; last_round: number; level: number; missions: { PlayerScore2: number }; placement: number; players_eliminated: number; puuid: string; riotIdGameName: string; riotIdTagline: string; time_eliminated: number; total_damage_to_players: number; traits: { name: string; num_units: number; style: number; tier_current: number; tier_total: number }[]; units: { character_id: string; itemNames: string[]; name: string; rarity: number; tier: number }[]; win: boolean }[]; queueId: number; queue_id: number; tft_game_type: string; tft_set_core_name: string; tft_set_number: number };
/** Match metadata including data version, match ID, and participant PUUIDs */
info: { endOfGameResult: string; gameCreation: number; gameId: number; game_datetime: number; game_length: number; game_version: string; mapId: number; participants: ({ companion: { content_ID: string; item_ID: number; skin_ID: number; species: string }; gold_left: number; last_round: number; level: number; missions: { PlayerScore2: number }; placement: number; players_eliminated: number; puuid: string; riotIdGameName: string; riotIdTagline: string; time_eliminated: number; total_damage_to_players: number; traits: ({ name: string; num_units: number; style: number; tier_current: number; tier_total: number })[]; units: ({ character_id: string; itemNames: string[]; name: string; rarity: number; tier: number })[]; win: boolean })[]; queueId: number; queue_id: number; tft_game_type: string; tft_set_core_name: string; tft_set_number: number };
metadata: { data_version: string; match_id: string; participants: string[] };
}

/** TFT platform status data with incidents and maintenances */
export interface TftPlatformData {
/** Platform identifier (e.g., "NA1") */
id: string;
/** List of active incidents */
incidents: unknown[];
/** Supported locale codes (e.g., ["en_US"]) */
locales: string[];
/** List of scheduled or active maintenances */
maintenances: { archive_at: string; created_at: string; id: number; incident_severity: unknown | null; maintenance_status: string; platforms: string[]; titles: { content: string; locale: string }[]; updated_at: unknown | null; updates: { author: string; created_at: string; id: number; publish: boolean; publish_locations: string[]; translations: { content: string; locale: string }[]; updated_at: string }[] }[];
/** Display name of the platform (e.g., "North America") */
maintenances: ({ archive_at: string; created_at: string; id: number; incident_severity: unknown | null; maintenance_status: string; platforms: string[]; titles: ({ content: string; locale: string })[]; updated_at: unknown | null; updates: ({ author: string; created_at: string; id: number; publish: boolean; publish_locations: string[]; translations: ({ content: string; locale: string })[]; updated_at: string })[] })[];
name: string;
}

/** TFT summoner profile data */
export interface TftSummoner {
/** Summoner profile icon ID */
profileIconId: number;
/** Encrypted PUUID */
puuid: string;
/** Date of last profile modification as Unix timestamp in milliseconds */
revisionDate: number;
/** Summoner level */
summonerLevel: number;
}
Loading