@rotesblatt/hex-tractor-data-api 3.0.4 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -616,6 +616,351 @@ type JwkPublicKey = Partial<{
616
616
  y: string;
617
617
  ext: boolean;
618
618
  }>;
619
+ type PlayerStatsRegionMeta = {
620
+ region: Region;
621
+ };
622
+ type Region =
623
+ | "br1"
624
+ | "euw1"
625
+ | "na1"
626
+ | "eun1"
627
+ | "kr"
628
+ | "jp1"
629
+ | "la1"
630
+ | "la2"
631
+ | "oc1"
632
+ | "tr1"
633
+ | "ru"
634
+ | "ph2"
635
+ | "sg2"
636
+ | "th2"
637
+ | "tw2"
638
+ | "vn2";
639
+ type ChampionStatsListResponse = {
640
+ success: true;
641
+ data: ChampionStatsListResponseData;
642
+ meta: ChampionStatsMeta;
643
+ };
644
+ type ChampionStatsListResponseData = {
645
+ items: Array<ChampionStatsView>;
646
+ };
647
+ type ChampionStatsView = {
648
+ championId: number;
649
+ picks: number;
650
+ wins: number;
651
+ losses: number;
652
+ bans: number;
653
+ winrate: number;
654
+ pickrate: number;
655
+ banrate: number;
656
+ };
657
+ type ChampionStatsMeta = {
658
+ region: Region;
659
+ patch: string;
660
+ tier: string;
661
+ queue: string | number;
662
+ generatedAt: string;
663
+ dataFreshnessSeconds: number;
664
+ totalGames: number;
665
+ };
666
+ type ChampionStatsDetailResponse = {
667
+ success: true;
668
+ data: ChampionStatsView;
669
+ meta: ChampionStatsMeta;
670
+ };
671
+ type ChampionMatchupStatsListResponse = {
672
+ success: true;
673
+ data: ChampionMatchupStatsListResponseData;
674
+ meta: StatsMetaWithLane;
675
+ };
676
+ type ChampionMatchupStatsListResponseData = {
677
+ items: Array<ChampionMatchupStatsItem>;
678
+ };
679
+ type ChampionMatchupStatsItem = {
680
+ championId: number;
681
+ opponentChampionId: number;
682
+ lane: Lane;
683
+ games: number;
684
+ winsForChampion: number;
685
+ lossesForChampion: number;
686
+ winrateForChampion: number;
687
+ avgGoldDiffAt10: number;
688
+ avgCsDiffAt10: number;
689
+ sampleSize: number;
690
+ patch: string;
691
+ tier: string;
692
+ queueId: number;
693
+ region: Region;
694
+ };
695
+ type Lane = "top" | "jungle" | "mid" | "bottom" | "support" | "unknown";
696
+ type StatsMetaWithLane = StatsMetaCommon & {
697
+ lane: Lane;
698
+ };
699
+ type StatsMetaCommon = {
700
+ region: Region;
701
+ patch: string;
702
+ tier: string;
703
+ queueId: number;
704
+ generatedAt: string;
705
+ dataFreshnessSeconds: number;
706
+ totalGames: number;
707
+ };
708
+ type ChampionSynergyStatsListResponse = {
709
+ success: true;
710
+ data: ChampionSynergyStatsListResponseData;
711
+ meta: StatsMetaCommon;
712
+ };
713
+ type ChampionSynergyStatsListResponseData = {
714
+ items: Array<ChampionSynergyStatsItem>;
715
+ };
716
+ type ChampionSynergyStatsItem = {
717
+ championId: number;
718
+ allyChampionId: number;
719
+ gamesTogether: number;
720
+ winsTogether: number;
721
+ lossesTogether: number;
722
+ winrateTogether: number;
723
+ avgTeamGoldShare: number;
724
+ sampleSize: number;
725
+ patch: string;
726
+ tier: string;
727
+ queueId: number;
728
+ region: Region;
729
+ };
730
+ type ChampionPerformanceStatsListResponse = {
731
+ success: true;
732
+ data: ChampionPerformanceStatsListResponseData;
733
+ meta: StatsMetaCommon;
734
+ };
735
+ type ChampionPerformanceStatsListResponseData = {
736
+ items: Array<ChampionPerformanceStatsItem>;
737
+ };
738
+ type ChampionPerformanceStatsItem = {
739
+ championId: number;
740
+ kdaAvg: number;
741
+ csPerMinAvg: number;
742
+ goldPerMinAvg: number;
743
+ damagePerMinAvg: number;
744
+ visionPerMinAvg: number;
745
+ sampleSize: number;
746
+ patch: string;
747
+ tier: string;
748
+ queueId: number;
749
+ region: Region;
750
+ };
751
+ type ChampionPerformanceStatsDetailResponse = {
752
+ success: true;
753
+ data: ChampionPerformanceStatsItem;
754
+ meta: StatsMetaCommon;
755
+ };
756
+ type ChampionObjectiveStatsListResponse = {
757
+ success: true;
758
+ data: ChampionObjectiveStatsListResponseData;
759
+ meta: StatsMetaCommon;
760
+ };
761
+ type ChampionObjectiveStatsListResponseData = {
762
+ items: Array<ChampionObjectiveStatsItem>;
763
+ };
764
+ type ChampionObjectiveStatsItem = {
765
+ championId: number;
766
+ dragonParticipationRate: number;
767
+ baronParticipationRate: number;
768
+ heraldParticipationRate: number;
769
+ towerParticipationRate: number;
770
+ sampleSize: number;
771
+ metricDefinitionVersion: string;
772
+ patch: string;
773
+ tier: string;
774
+ queueId: number;
775
+ region: Region;
776
+ };
777
+ type ChampionGameLengthStatsResponse = {
778
+ success: true;
779
+ data: ChampionGameLengthStatsListResponseData;
780
+ meta: StatsMetaCommon;
781
+ };
782
+ type ChampionGameLengthStatsListResponseData = {
783
+ short: ChampionGameLengthStatsItem;
784
+ medium: ChampionGameLengthStatsItem;
785
+ long: ChampionGameLengthStatsItem;
786
+ };
787
+ type ChampionGameLengthStatsItem = {
788
+ championId: number;
789
+ games: number;
790
+ wins: number;
791
+ winrate: number;
792
+ sampleSize: number;
793
+ patch: string;
794
+ tier: string;
795
+ queueId: number;
796
+ region: Region;
797
+ };
798
+ type ChampionEarlyGameStatsResponse = {
799
+ success: true;
800
+ data: ChampionEarlyGameStatsItem;
801
+ meta: StatsMetaCommon;
802
+ };
803
+ type ChampionEarlyGameStatsItem = {
804
+ championId: number;
805
+ firstBloodInvolvementRate: number;
806
+ laneLeadAt10Rate: number;
807
+ laneLeadAt15Rate: number;
808
+ earlyDeathRate: number;
809
+ sampleSize: number;
810
+ metricDefinitionVersion: string;
811
+ patch: string;
812
+ tier: string;
813
+ queueId: number;
814
+ region: Region;
815
+ };
816
+ type PlayerStatsCacheEntryResponse = {
817
+ success: true;
818
+ data: PlayerStatsCacheEntry;
819
+ meta: PlayerStatsRegionMeta;
820
+ };
821
+ type PlayerStatsCacheEntry = {
822
+ jobId: string;
823
+ region: Region;
824
+ puuid: string;
825
+ type: PlayerStatsType;
826
+ paramsHash: string;
827
+ status: PlayerStatsJobStatus;
828
+ computedAt?: (string | null) | undefined;
829
+ expiresAt: string;
830
+ lastSourceMatchAt?: (string | null) | undefined;
831
+ result?: PlayerStatsResult | undefined;
832
+ error?:
833
+ | Partial<{
834
+ code: string;
835
+ message: string;
836
+ details: PlayerStatsErrorDetails;
837
+ }>
838
+ | undefined;
839
+ };
840
+ type PlayerStatsType = "champions" | "teammates" | "opponents" | "timeline";
841
+ type PlayerStatsJobStatus =
842
+ | "pending"
843
+ | "running"
844
+ | "ready"
845
+ | "failed"
846
+ | "expired";
847
+ type PlayerStatsResult =
848
+ | PlayerStatsChampionsResult
849
+ | PlayerStatsTeammatesResult
850
+ | PlayerStatsOpponentsResult
851
+ | PlayerStatsTimelineResult;
852
+ type PlayerStatsChampionsResult = {
853
+ champions: Array<PlayerStatsChampionSummary>;
854
+ };
855
+ type PlayerStatsChampionSummary = {
856
+ championId: number;
857
+ games: number;
858
+ wins: number;
859
+ };
860
+ type PlayerStatsTeammatesResult = {
861
+ topTeammates: Array<PlayerStatsTeammateSummary>;
862
+ };
863
+ type PlayerStatsTeammateSummary = {
864
+ puuid: string;
865
+ games: number;
866
+ wins: number;
867
+ };
868
+ type PlayerStatsOpponentsResult = {
869
+ topOpponents: Array<PlayerStatsOpponentSummary>;
870
+ };
871
+ type PlayerStatsOpponentSummary = {
872
+ puuid: string;
873
+ games: number;
874
+ winsAgainst: number;
875
+ };
876
+ type PlayerStatsTimelineResult = {
877
+ timeline: Array<PlayerStatsTimelineBucket>;
878
+ };
879
+ type PlayerStatsTimelineBucket = {
880
+ minute: number;
881
+ games: number;
882
+ wins: number;
883
+ };
884
+ type PlayerStatsErrorDetails = Partial<{
885
+ retryAfterSeconds: number;
886
+ traceId: string;
887
+ issues: Array<PlayerStatsErrorIssue>;
888
+ }>;
889
+ type PlayerStatsErrorIssue = {
890
+ field: string;
891
+ reason: string;
892
+ };
893
+ type PlayerStatsJobAcceptedResponse = {
894
+ success: true;
895
+ data: PlayerStatsJobAccepted;
896
+ meta: PlayerStatsRegionMeta;
897
+ };
898
+ type PlayerStatsJobAccepted = {
899
+ jobId: string;
900
+ status: PlayerStatsJobStatus;
901
+ region: Region;
902
+ puuid: string;
903
+ };
904
+ type AggregatedStats = {
905
+ region: Region;
906
+ championId: number;
907
+ patchVersion: string;
908
+ tier: string;
909
+ queueId: number;
910
+ picks: number;
911
+ wins: number;
912
+ losses: number;
913
+ bans: number;
914
+ sampleSize: number;
915
+ lastComputedAt: string;
916
+ };
917
+ type PlayerStatsJobParams =
918
+ | PlayerStatsChampionsParams
919
+ | PlayerStatsTeammatesParams
920
+ | PlayerStatsOpponentsParams
921
+ | PlayerStatsTimelineParams;
922
+ type PlayerStatsChampionsParams = Partial<{
923
+ patch: string;
924
+ tier: RankedTier;
925
+ queueId: QueueId;
926
+ limit: number;
927
+ }>;
928
+ type RankedTier =
929
+ | "IRON"
930
+ | "BRONZE"
931
+ | "SILVER"
932
+ | "GOLD"
933
+ | "PLATINUM"
934
+ | "EMERALD"
935
+ | "DIAMOND"
936
+ | "MASTER"
937
+ | "GRANDMASTER"
938
+ | "CHALLENGER";
939
+ type PlayerStatsTeammatesParams = Partial<{
940
+ patch: string;
941
+ tier: RankedTier;
942
+ queueId: QueueId;
943
+ limit: number;
944
+ minGames: number;
945
+ }>;
946
+ type PlayerStatsOpponentsParams = Partial<{
947
+ patch: string;
948
+ tier: RankedTier;
949
+ queueId: QueueId;
950
+ limit: number;
951
+ lane: Lane;
952
+ }>;
953
+ type PlayerStatsTimelineParams = Partial<{
954
+ patch: string;
955
+ tier: RankedTier;
956
+ queueId: QueueId;
957
+ bucketMinutes: number;
958
+ }>;
959
+ type PlayerStatsJobRequest = {
960
+ region: Region;
961
+ type: PlayerStatsType;
962
+ params?: PlayerStatsJobParams | undefined;
963
+ };
619
964
 
620
965
  const LeagueMiniseries: z.ZodType<LeagueMiniseries> = z
621
966
  .object({
@@ -1283,24 +1628,20 @@ const LeaderboardPlayer: z.ZodType<LeaderboardPlayer> = z
1283
1628
  .passthrough();
1284
1629
  const LeaderBoardPlayerList: z.ZodType<LeaderBoardPlayerList> =
1285
1630
  z.array(LeaderboardPlayer);
1286
- const JwkPublicKey: z.ZodType<JwkPublicKey> = z
1287
- .object({
1288
- kty: z.string(),
1289
- crv: z.string(),
1290
- x: z.string(),
1291
- y: z.string(),
1292
- ext: z.boolean(),
1293
- })
1294
- .partial()
1295
- .passthrough();
1296
- const Device: z.ZodType<Device> = z
1631
+ const ChampionStatsView: z.ZodType<ChampionStatsView> = z
1297
1632
  .object({
1298
- deviceId: z.string(),
1299
- deviceType: z.string(),
1300
- publicKeyJwk: JwkPublicKey,
1301
- attestationToken: z.string(),
1633
+ championId: z.number().int(),
1634
+ picks: z.number().int(),
1635
+ wins: z.number().int(),
1636
+ losses: z.number().int(),
1637
+ bans: z.number().int(),
1638
+ winrate: z.number(),
1639
+ pickrate: z.number(),
1640
+ banrate: z.number(),
1302
1641
  })
1303
1642
  .passthrough();
1643
+ const ChampionStatsListResponseData: z.ZodType<ChampionStatsListResponseData> =
1644
+ z.object({ items: z.array(ChampionStatsView) }).passthrough();
1304
1645
  const Region = z.enum([
1305
1646
  "br1",
1306
1647
  "euw1",
@@ -1319,11 +1660,215 @@ const Region = z.enum([
1319
1660
  "tw2",
1320
1661
  "vn2",
1321
1662
  ]);
1322
- const Platform = z.enum(["europe", "americas", "asia", "sea"]);
1323
- const RankedQueue = z.enum([
1324
- "RANKED_SOLO_5x5",
1325
- "RANKED_FLEX_SR",
1326
- "RANKED_FLEX_TT",
1663
+ const ChampionStatsMeta: z.ZodType<ChampionStatsMeta> = z
1664
+ .object({
1665
+ region: Region,
1666
+ patch: z.string(),
1667
+ tier: z.string(),
1668
+ queue: z.union([z.string(), z.number()]),
1669
+ generatedAt: z.string().datetime({ offset: true }),
1670
+ dataFreshnessSeconds: z.number().int(),
1671
+ totalGames: z.number().int(),
1672
+ })
1673
+ .passthrough();
1674
+ const ChampionStatsListResponse: z.ZodType<ChampionStatsListResponse> = z
1675
+ .object({
1676
+ success: z.literal(true),
1677
+ data: ChampionStatsListResponseData,
1678
+ meta: ChampionStatsMeta,
1679
+ })
1680
+ .passthrough();
1681
+ const ChampionStatsDetailResponse: z.ZodType<ChampionStatsDetailResponse> = z
1682
+ .object({
1683
+ success: z.literal(true),
1684
+ data: ChampionStatsView,
1685
+ meta: ChampionStatsMeta,
1686
+ })
1687
+ .passthrough();
1688
+ const Lane = z.enum(["top", "jungle", "mid", "bottom", "support", "unknown"]);
1689
+ const ChampionMatchupStatsItem: z.ZodType<ChampionMatchupStatsItem> = z
1690
+ .object({
1691
+ championId: z.number().int(),
1692
+ opponentChampionId: z.number().int(),
1693
+ lane: Lane,
1694
+ games: z.number().int(),
1695
+ winsForChampion: z.number().int(),
1696
+ lossesForChampion: z.number().int(),
1697
+ winrateForChampion: z.number(),
1698
+ avgGoldDiffAt10: z.number(),
1699
+ avgCsDiffAt10: z.number(),
1700
+ sampleSize: z.number().int(),
1701
+ patch: z.string(),
1702
+ tier: z.string(),
1703
+ queueId: z.number().int(),
1704
+ region: Region,
1705
+ })
1706
+ .passthrough();
1707
+ const ChampionMatchupStatsListResponseData: z.ZodType<ChampionMatchupStatsListResponseData> =
1708
+ z.object({ items: z.array(ChampionMatchupStatsItem) }).passthrough();
1709
+ const StatsMetaCommon: z.ZodType<StatsMetaCommon> = z
1710
+ .object({
1711
+ region: Region,
1712
+ patch: z.string(),
1713
+ tier: z.string(),
1714
+ queueId: z.number().int(),
1715
+ generatedAt: z.string().datetime({ offset: true }),
1716
+ dataFreshnessSeconds: z.number().int(),
1717
+ totalGames: z.number().int(),
1718
+ })
1719
+ .passthrough();
1720
+ const StatsMetaWithLane = StatsMetaCommon.and(
1721
+ z.object({ lane: Lane }).passthrough()
1722
+ );
1723
+ const ChampionMatchupStatsListResponse: z.ZodType<ChampionMatchupStatsListResponse> =
1724
+ z
1725
+ .object({
1726
+ success: z.literal(true),
1727
+ data: ChampionMatchupStatsListResponseData,
1728
+ meta: StatsMetaWithLane,
1729
+ })
1730
+ .passthrough();
1731
+ const ChampionSynergyStatsItem: z.ZodType<ChampionSynergyStatsItem> = z
1732
+ .object({
1733
+ championId: z.number().int(),
1734
+ allyChampionId: z.number().int(),
1735
+ gamesTogether: z.number().int(),
1736
+ winsTogether: z.number().int(),
1737
+ lossesTogether: z.number().int(),
1738
+ winrateTogether: z.number(),
1739
+ avgTeamGoldShare: z.number(),
1740
+ sampleSize: z.number().int(),
1741
+ patch: z.string(),
1742
+ tier: z.string(),
1743
+ queueId: z.number().int(),
1744
+ region: Region,
1745
+ })
1746
+ .passthrough();
1747
+ const ChampionSynergyStatsListResponseData: z.ZodType<ChampionSynergyStatsListResponseData> =
1748
+ z.object({ items: z.array(ChampionSynergyStatsItem) }).passthrough();
1749
+ const ChampionSynergyStatsListResponse: z.ZodType<ChampionSynergyStatsListResponse> =
1750
+ z
1751
+ .object({
1752
+ success: z.literal(true),
1753
+ data: ChampionSynergyStatsListResponseData,
1754
+ meta: StatsMetaCommon,
1755
+ })
1756
+ .passthrough();
1757
+ const ChampionPerformanceStatsItem: z.ZodType<ChampionPerformanceStatsItem> = z
1758
+ .object({
1759
+ championId: z.number().int(),
1760
+ kdaAvg: z.number(),
1761
+ csPerMinAvg: z.number(),
1762
+ goldPerMinAvg: z.number(),
1763
+ damagePerMinAvg: z.number(),
1764
+ visionPerMinAvg: z.number(),
1765
+ sampleSize: z.number().int(),
1766
+ patch: z.string(),
1767
+ tier: z.string(),
1768
+ queueId: z.number().int(),
1769
+ region: Region,
1770
+ })
1771
+ .passthrough();
1772
+ const ChampionPerformanceStatsListResponseData: z.ZodType<ChampionPerformanceStatsListResponseData> =
1773
+ z.object({ items: z.array(ChampionPerformanceStatsItem) }).passthrough();
1774
+ const ChampionPerformanceStatsListResponse: z.ZodType<ChampionPerformanceStatsListResponse> =
1775
+ z
1776
+ .object({
1777
+ success: z.literal(true),
1778
+ data: ChampionPerformanceStatsListResponseData,
1779
+ meta: StatsMetaCommon,
1780
+ })
1781
+ .passthrough();
1782
+ const ChampionPerformanceStatsDetailResponse: z.ZodType<ChampionPerformanceStatsDetailResponse> =
1783
+ z
1784
+ .object({
1785
+ success: z.literal(true),
1786
+ data: ChampionPerformanceStatsItem,
1787
+ meta: StatsMetaCommon,
1788
+ })
1789
+ .passthrough();
1790
+ const ChampionObjectiveStatsItem: z.ZodType<ChampionObjectiveStatsItem> = z
1791
+ .object({
1792
+ championId: z.number().int(),
1793
+ dragonParticipationRate: z.number(),
1794
+ baronParticipationRate: z.number(),
1795
+ heraldParticipationRate: z.number(),
1796
+ towerParticipationRate: z.number(),
1797
+ sampleSize: z.number().int(),
1798
+ metricDefinitionVersion: z.string(),
1799
+ patch: z.string(),
1800
+ tier: z.string(),
1801
+ queueId: z.number().int(),
1802
+ region: Region,
1803
+ })
1804
+ .passthrough();
1805
+ const ChampionObjectiveStatsListResponseData: z.ZodType<ChampionObjectiveStatsListResponseData> =
1806
+ z.object({ items: z.array(ChampionObjectiveStatsItem) }).passthrough();
1807
+ const ChampionObjectiveStatsListResponse: z.ZodType<ChampionObjectiveStatsListResponse> =
1808
+ z
1809
+ .object({
1810
+ success: z.literal(true),
1811
+ data: ChampionObjectiveStatsListResponseData,
1812
+ meta: StatsMetaCommon,
1813
+ })
1814
+ .passthrough();
1815
+ const ChampionGameLengthStatsItem: z.ZodType<ChampionGameLengthStatsItem> = z
1816
+ .object({
1817
+ championId: z.number().int(),
1818
+ games: z.number().int(),
1819
+ wins: z.number().int(),
1820
+ winrate: z.number(),
1821
+ sampleSize: z.number().int(),
1822
+ patch: z.string(),
1823
+ tier: z.string(),
1824
+ queueId: z.number().int(),
1825
+ region: Region,
1826
+ })
1827
+ .passthrough();
1828
+ const ChampionGameLengthStatsListResponseData: z.ZodType<ChampionGameLengthStatsListResponseData> =
1829
+ z
1830
+ .object({
1831
+ short: ChampionGameLengthStatsItem,
1832
+ medium: ChampionGameLengthStatsItem,
1833
+ long: ChampionGameLengthStatsItem,
1834
+ })
1835
+ .passthrough();
1836
+ const ChampionGameLengthStatsResponse: z.ZodType<ChampionGameLengthStatsResponse> =
1837
+ z
1838
+ .object({
1839
+ success: z.literal(true),
1840
+ data: ChampionGameLengthStatsListResponseData,
1841
+ meta: StatsMetaCommon,
1842
+ })
1843
+ .passthrough();
1844
+ const ChampionEarlyGameStatsItem: z.ZodType<ChampionEarlyGameStatsItem> = z
1845
+ .object({
1846
+ championId: z.number().int(),
1847
+ firstBloodInvolvementRate: z.number(),
1848
+ laneLeadAt10Rate: z.number(),
1849
+ laneLeadAt15Rate: z.number(),
1850
+ earlyDeathRate: z.number(),
1851
+ sampleSize: z.number().int(),
1852
+ metricDefinitionVersion: z.string(),
1853
+ patch: z.string(),
1854
+ tier: z.string(),
1855
+ queueId: z.number().int(),
1856
+ region: Region,
1857
+ })
1858
+ .passthrough();
1859
+ const ChampionEarlyGameStatsResponse: z.ZodType<ChampionEarlyGameStatsResponse> =
1860
+ z
1861
+ .object({
1862
+ success: z.literal(true),
1863
+ data: ChampionEarlyGameStatsItem,
1864
+ meta: StatsMetaCommon,
1865
+ })
1866
+ .passthrough();
1867
+ const PlayerStatsType = z.enum([
1868
+ "champions",
1869
+ "teammates",
1870
+ "opponents",
1871
+ "timeline",
1327
1872
  ]);
1328
1873
  const RankedTier = z.enum([
1329
1874
  "IRON",
@@ -1337,82 +1882,339 @@ const RankedTier = z.enum([
1337
1882
  "GRANDMASTER",
1338
1883
  "CHALLENGER",
1339
1884
  ]);
1340
- const RankedDivision = z.enum(["I", "II", "III", "IV"]);
1341
-
1342
- export const schemas = {
1343
- LeagueMiniseries,
1344
- LeagueEntry,
1345
- SpectatorBannedChampions,
1346
- SpectatorObserver,
1347
- SpectatorPerks,
1348
- SpectatorGameCustomizationObject,
1349
- SpectatorCurrentGameParticipant,
1350
- SpectatorCurrentGameInfo,
1351
- AccountInfo,
1352
- validationError,
1353
- simpleError,
1354
- simpleInternalError,
1355
- LeagueItem,
1356
- LeagueDetails,
1357
- MatchMetadata,
1358
- MatchChallenges,
1359
- MatchMissions,
1360
- MatchPerkStats,
1361
- MatchPerkStyleSelection,
1362
- MatchPerkStyle,
1363
- MatchPerks,
1364
- MatchParticipant,
1365
- QueueId,
1366
- MatchBan,
1367
- MatchObjective,
1368
- MatchObjectives,
1369
- MatchFeat,
1370
- MatchFeats,
1371
- MatchTeam,
1372
- MatchInfo,
1373
- Match,
1374
- LeaderboardPlayer,
1375
- LeaderBoardPlayerList,
1376
- JwkPublicKey,
1377
- Device,
1378
- Region,
1379
- Platform,
1380
- RankedQueue,
1381
- RankedTier,
1382
- RankedDivision,
1383
- };
1384
-
1385
- const endpoints = makeApi([
1386
- {
1387
- method: "get",
1388
- path: "/account/by-name/:region/:summonerName/:tagLine",
1389
- alias: "getAccountBySummonerName",
1390
- description: `Retrieve Riot account details using the summoner name and tag line for a specific region`,
1391
- requestFormat: "json",
1392
- parameters: [
1393
- {
1394
- name: "region",
1395
- type: "Path",
1396
- schema: z.enum([
1397
- "br1",
1398
- "euw1",
1399
- "na1",
1400
- "eun1",
1401
- "kr",
1402
- "jp1",
1403
- "la1",
1404
- "la2",
1405
- "oc1",
1406
- "tr1",
1407
- "ru",
1408
- "ph2",
1409
- "sg2",
1410
- "th2",
1411
- "tw2",
1412
- "vn2",
1413
- ]),
1414
- },
1415
- {
1885
+ const PlayerStatsChampionsParams: z.ZodType<PlayerStatsChampionsParams> = z
1886
+ .object({
1887
+ patch: z.string(),
1888
+ tier: RankedTier,
1889
+ queueId: QueueId,
1890
+ limit: z.number().int().gte(1).lte(100),
1891
+ })
1892
+ .partial()
1893
+ .passthrough();
1894
+ const PlayerStatsTeammatesParams: z.ZodType<PlayerStatsTeammatesParams> = z
1895
+ .object({
1896
+ patch: z.string(),
1897
+ tier: RankedTier,
1898
+ queueId: QueueId,
1899
+ limit: z.number().int().gte(1).lte(100),
1900
+ minGames: z.number().int().gte(1),
1901
+ })
1902
+ .partial()
1903
+ .passthrough();
1904
+ const PlayerStatsOpponentsParams: z.ZodType<PlayerStatsOpponentsParams> = z
1905
+ .object({
1906
+ patch: z.string(),
1907
+ tier: RankedTier,
1908
+ queueId: QueueId,
1909
+ limit: z.number().int().gte(1).lte(100),
1910
+ lane: Lane,
1911
+ })
1912
+ .partial()
1913
+ .passthrough();
1914
+ const PlayerStatsTimelineParams: z.ZodType<PlayerStatsTimelineParams> = z
1915
+ .object({
1916
+ patch: z.string(),
1917
+ tier: RankedTier,
1918
+ queueId: QueueId,
1919
+ bucketMinutes: z.number().int().gte(1).lte(10),
1920
+ })
1921
+ .partial()
1922
+ .passthrough();
1923
+ const PlayerStatsJobParams: z.ZodType<PlayerStatsJobParams> = z.union([
1924
+ PlayerStatsChampionsParams,
1925
+ PlayerStatsTeammatesParams,
1926
+ PlayerStatsOpponentsParams,
1927
+ PlayerStatsTimelineParams,
1928
+ ]);
1929
+ const PlayerStatsJobRequest: z.ZodType<PlayerStatsJobRequest> = z
1930
+ .object({
1931
+ region: Region,
1932
+ type: PlayerStatsType,
1933
+ params: PlayerStatsJobParams.optional(),
1934
+ })
1935
+ .passthrough();
1936
+ const PlayerStatsJobStatus = z.enum([
1937
+ "pending",
1938
+ "running",
1939
+ "ready",
1940
+ "failed",
1941
+ "expired",
1942
+ ]);
1943
+ const PlayerStatsChampionSummary: z.ZodType<PlayerStatsChampionSummary> = z
1944
+ .object({
1945
+ championId: z.number().int(),
1946
+ games: z.number().int(),
1947
+ wins: z.number().int(),
1948
+ })
1949
+ .passthrough();
1950
+ const PlayerStatsChampionsResult: z.ZodType<PlayerStatsChampionsResult> = z
1951
+ .object({ champions: z.array(PlayerStatsChampionSummary) })
1952
+ .passthrough();
1953
+ const PlayerStatsTeammateSummary: z.ZodType<PlayerStatsTeammateSummary> = z
1954
+ .object({
1955
+ puuid: z.string(),
1956
+ games: z.number().int(),
1957
+ wins: z.number().int(),
1958
+ })
1959
+ .passthrough();
1960
+ const PlayerStatsTeammatesResult: z.ZodType<PlayerStatsTeammatesResult> = z
1961
+ .object({ topTeammates: z.array(PlayerStatsTeammateSummary) })
1962
+ .passthrough();
1963
+ const PlayerStatsOpponentSummary: z.ZodType<PlayerStatsOpponentSummary> = z
1964
+ .object({
1965
+ puuid: z.string(),
1966
+ games: z.number().int(),
1967
+ winsAgainst: z.number().int(),
1968
+ })
1969
+ .passthrough();
1970
+ const PlayerStatsOpponentsResult: z.ZodType<PlayerStatsOpponentsResult> = z
1971
+ .object({ topOpponents: z.array(PlayerStatsOpponentSummary) })
1972
+ .passthrough();
1973
+ const PlayerStatsTimelineBucket: z.ZodType<PlayerStatsTimelineBucket> = z
1974
+ .object({
1975
+ minute: z.number().int(),
1976
+ games: z.number().int(),
1977
+ wins: z.number().int(),
1978
+ })
1979
+ .passthrough();
1980
+ const PlayerStatsTimelineResult: z.ZodType<PlayerStatsTimelineResult> = z
1981
+ .object({ timeline: z.array(PlayerStatsTimelineBucket) })
1982
+ .passthrough();
1983
+ const PlayerStatsResult = z.union([
1984
+ PlayerStatsChampionsResult,
1985
+ PlayerStatsTeammatesResult,
1986
+ PlayerStatsOpponentsResult,
1987
+ PlayerStatsTimelineResult,
1988
+ ]);
1989
+ const PlayerStatsErrorIssue: z.ZodType<PlayerStatsErrorIssue> = z
1990
+ .object({ field: z.string(), reason: z.string() })
1991
+ .passthrough();
1992
+ const PlayerStatsErrorDetails: z.ZodType<PlayerStatsErrorDetails> = z
1993
+ .object({
1994
+ retryAfterSeconds: z.number().int(),
1995
+ traceId: z.string(),
1996
+ issues: z.array(PlayerStatsErrorIssue),
1997
+ })
1998
+ .partial()
1999
+ .passthrough();
2000
+ const PlayerStatsCacheEntry: z.ZodType<PlayerStatsCacheEntry> = z
2001
+ .object({
2002
+ jobId: z.string(),
2003
+ region: Region,
2004
+ puuid: z.string(),
2005
+ type: PlayerStatsType,
2006
+ paramsHash: z.string(),
2007
+ status: PlayerStatsJobStatus,
2008
+ computedAt: z.string().datetime({ offset: true }).nullish(),
2009
+ expiresAt: z.string().datetime({ offset: true }),
2010
+ lastSourceMatchAt: z.string().datetime({ offset: true }).nullish(),
2011
+ result: PlayerStatsResult.optional(),
2012
+ error: z
2013
+ .object({
2014
+ code: z.string(),
2015
+ message: z.string(),
2016
+ details: PlayerStatsErrorDetails,
2017
+ })
2018
+ .partial()
2019
+ .passthrough()
2020
+ .optional(),
2021
+ })
2022
+ .passthrough();
2023
+ const PlayerStatsRegionMeta: z.ZodType<PlayerStatsRegionMeta> = z
2024
+ .object({ region: Region })
2025
+ .passthrough();
2026
+ const PlayerStatsCacheEntryResponse: z.ZodType<PlayerStatsCacheEntryResponse> =
2027
+ z
2028
+ .object({
2029
+ success: z.literal(true),
2030
+ data: PlayerStatsCacheEntry,
2031
+ meta: PlayerStatsRegionMeta,
2032
+ })
2033
+ .passthrough();
2034
+ const PlayerStatsJobAccepted: z.ZodType<PlayerStatsJobAccepted> = z
2035
+ .object({
2036
+ jobId: z.string(),
2037
+ status: PlayerStatsJobStatus,
2038
+ region: Region,
2039
+ puuid: z.string(),
2040
+ })
2041
+ .passthrough();
2042
+ const PlayerStatsJobAcceptedResponse: z.ZodType<PlayerStatsJobAcceptedResponse> =
2043
+ z
2044
+ .object({
2045
+ success: z.literal(true),
2046
+ data: PlayerStatsJobAccepted,
2047
+ meta: PlayerStatsRegionMeta,
2048
+ })
2049
+ .passthrough();
2050
+ const JwkPublicKey: z.ZodType<JwkPublicKey> = z
2051
+ .object({
2052
+ kty: z.string(),
2053
+ crv: z.string(),
2054
+ x: z.string(),
2055
+ y: z.string(),
2056
+ ext: z.boolean(),
2057
+ })
2058
+ .partial()
2059
+ .passthrough();
2060
+ const Device: z.ZodType<Device> = z
2061
+ .object({
2062
+ deviceId: z.string(),
2063
+ deviceType: z.string(),
2064
+ publicKeyJwk: JwkPublicKey,
2065
+ attestationToken: z.string(),
2066
+ })
2067
+ .passthrough();
2068
+ const Platform = z.enum(["europe", "americas", "asia", "sea"]);
2069
+ const RankedQueue = z.enum([
2070
+ "RANKED_SOLO_5x5",
2071
+ "RANKED_FLEX_SR",
2072
+ "RANKED_FLEX_TT",
2073
+ ]);
2074
+ const RankedDivision = z.enum(["I", "II", "III", "IV"]);
2075
+ const AggregatedStats: z.ZodType<AggregatedStats> = z
2076
+ .object({
2077
+ region: Region,
2078
+ championId: z.number().int(),
2079
+ patchVersion: z.string(),
2080
+ tier: z.string(),
2081
+ queueId: z.number().int(),
2082
+ picks: z.number().int(),
2083
+ wins: z.number().int(),
2084
+ losses: z.number().int(),
2085
+ bans: z.number().int(),
2086
+ sampleSize: z.number().int(),
2087
+ lastComputedAt: z.string().datetime({ offset: true }),
2088
+ })
2089
+ .passthrough();
2090
+ const GameLengthBucket = z.enum(["short", "medium", "long"]);
2091
+
2092
+ export const schemas = {
2093
+ LeagueMiniseries,
2094
+ LeagueEntry,
2095
+ SpectatorBannedChampions,
2096
+ SpectatorObserver,
2097
+ SpectatorPerks,
2098
+ SpectatorGameCustomizationObject,
2099
+ SpectatorCurrentGameParticipant,
2100
+ SpectatorCurrentGameInfo,
2101
+ AccountInfo,
2102
+ validationError,
2103
+ simpleError,
2104
+ simpleInternalError,
2105
+ LeagueItem,
2106
+ LeagueDetails,
2107
+ MatchMetadata,
2108
+ MatchChallenges,
2109
+ MatchMissions,
2110
+ MatchPerkStats,
2111
+ MatchPerkStyleSelection,
2112
+ MatchPerkStyle,
2113
+ MatchPerks,
2114
+ MatchParticipant,
2115
+ QueueId,
2116
+ MatchBan,
2117
+ MatchObjective,
2118
+ MatchObjectives,
2119
+ MatchFeat,
2120
+ MatchFeats,
2121
+ MatchTeam,
2122
+ MatchInfo,
2123
+ Match,
2124
+ LeaderboardPlayer,
2125
+ LeaderBoardPlayerList,
2126
+ ChampionStatsView,
2127
+ ChampionStatsListResponseData,
2128
+ Region,
2129
+ ChampionStatsMeta,
2130
+ ChampionStatsListResponse,
2131
+ ChampionStatsDetailResponse,
2132
+ Lane,
2133
+ ChampionMatchupStatsItem,
2134
+ ChampionMatchupStatsListResponseData,
2135
+ StatsMetaCommon,
2136
+ StatsMetaWithLane,
2137
+ ChampionMatchupStatsListResponse,
2138
+ ChampionSynergyStatsItem,
2139
+ ChampionSynergyStatsListResponseData,
2140
+ ChampionSynergyStatsListResponse,
2141
+ ChampionPerformanceStatsItem,
2142
+ ChampionPerformanceStatsListResponseData,
2143
+ ChampionPerformanceStatsListResponse,
2144
+ ChampionPerformanceStatsDetailResponse,
2145
+ ChampionObjectiveStatsItem,
2146
+ ChampionObjectiveStatsListResponseData,
2147
+ ChampionObjectiveStatsListResponse,
2148
+ ChampionGameLengthStatsItem,
2149
+ ChampionGameLengthStatsListResponseData,
2150
+ ChampionGameLengthStatsResponse,
2151
+ ChampionEarlyGameStatsItem,
2152
+ ChampionEarlyGameStatsResponse,
2153
+ PlayerStatsType,
2154
+ RankedTier,
2155
+ PlayerStatsChampionsParams,
2156
+ PlayerStatsTeammatesParams,
2157
+ PlayerStatsOpponentsParams,
2158
+ PlayerStatsTimelineParams,
2159
+ PlayerStatsJobParams,
2160
+ PlayerStatsJobRequest,
2161
+ PlayerStatsJobStatus,
2162
+ PlayerStatsChampionSummary,
2163
+ PlayerStatsChampionsResult,
2164
+ PlayerStatsTeammateSummary,
2165
+ PlayerStatsTeammatesResult,
2166
+ PlayerStatsOpponentSummary,
2167
+ PlayerStatsOpponentsResult,
2168
+ PlayerStatsTimelineBucket,
2169
+ PlayerStatsTimelineResult,
2170
+ PlayerStatsResult,
2171
+ PlayerStatsErrorIssue,
2172
+ PlayerStatsErrorDetails,
2173
+ PlayerStatsCacheEntry,
2174
+ PlayerStatsRegionMeta,
2175
+ PlayerStatsCacheEntryResponse,
2176
+ PlayerStatsJobAccepted,
2177
+ PlayerStatsJobAcceptedResponse,
2178
+ JwkPublicKey,
2179
+ Device,
2180
+ Platform,
2181
+ RankedQueue,
2182
+ RankedDivision,
2183
+ AggregatedStats,
2184
+ GameLengthBucket,
2185
+ };
2186
+
2187
+ const endpoints = makeApi([
2188
+ {
2189
+ method: "get",
2190
+ path: "/account/by-name/:region/:summonerName/:tagLine",
2191
+ alias: "getAccountBySummonerName",
2192
+ description: `Retrieve Riot account details using the summoner name and tag line for a specific region`,
2193
+ requestFormat: "json",
2194
+ parameters: [
2195
+ {
2196
+ name: "region",
2197
+ type: "Path",
2198
+ schema: z.enum([
2199
+ "br1",
2200
+ "euw1",
2201
+ "na1",
2202
+ "eun1",
2203
+ "kr",
2204
+ "jp1",
2205
+ "la1",
2206
+ "la2",
2207
+ "oc1",
2208
+ "tr1",
2209
+ "ru",
2210
+ "ph2",
2211
+ "sg2",
2212
+ "th2",
2213
+ "tw2",
2214
+ "vn2",
2215
+ ]),
2216
+ },
2217
+ {
1416
2218
  name: "summonerName",
1417
2219
  type: "Path",
1418
2220
  schema: z.string(),
@@ -1518,7 +2320,7 @@ const endpoints = makeApi([
1518
2320
  },
1519
2321
  {
1520
2322
  method: "get",
1521
- path: "/auth/challenge",
2323
+ path: "/auth/challenge/:deviceId",
1522
2324
  alias: "getAuthChallenge",
1523
2325
  description: `Retrieve a unique authentication challenge that can be signed with the device&#x27;s private key to authenticate requests`,
1524
2326
  requestFormat: "json",
@@ -2064,6 +2866,1732 @@ const endpoints = makeApi([
2064
2866
  },
2065
2867
  ],
2066
2868
  },
2869
+ {
2870
+ method: "get",
2871
+ path: "/players/:puuid/stats/:jobId",
2872
+ alias: "getPlayerStatsJobStatus",
2873
+ description: `Retrieve the status or result for a region-scoped player stats job.`,
2874
+ requestFormat: "json",
2875
+ parameters: [
2876
+ {
2877
+ name: "puuid",
2878
+ type: "Path",
2879
+ schema: z.string(),
2880
+ },
2881
+ {
2882
+ name: "jobId",
2883
+ type: "Path",
2884
+ schema: z.string(),
2885
+ },
2886
+ {
2887
+ name: "region",
2888
+ type: "Query",
2889
+ schema: z.enum([
2890
+ "br1",
2891
+ "euw1",
2892
+ "na1",
2893
+ "eun1",
2894
+ "kr",
2895
+ "jp1",
2896
+ "la1",
2897
+ "la2",
2898
+ "oc1",
2899
+ "tr1",
2900
+ "ru",
2901
+ "ph2",
2902
+ "sg2",
2903
+ "th2",
2904
+ "tw2",
2905
+ "vn2",
2906
+ ]),
2907
+ },
2908
+ ],
2909
+ response: PlayerStatsCacheEntryResponse,
2910
+ errors: [
2911
+ {
2912
+ status: 400,
2913
+ description: `Validation error.`,
2914
+ schema: validationError,
2915
+ },
2916
+ {
2917
+ status: 404,
2918
+ description: `Job not found.`,
2919
+ schema: z.object({ message: z.string() }).passthrough(),
2920
+ },
2921
+ {
2922
+ status: 500,
2923
+ description: `Internal server error.`,
2924
+ schema: z.object({ message: z.string() }).passthrough(),
2925
+ },
2926
+ ],
2927
+ },
2928
+ {
2929
+ method: "post",
2930
+ path: "/players/:puuid/stats/request",
2931
+ alias: "requestPlayerStatsJob",
2932
+ description: `Request player stats computation for a specific region and stats type.
2933
+ Behavior:
2934
+ - If valid cache exists for same (region, puuid, type, paramsHash), return 200 with cached result.
2935
+ - If equivalent in-flight job exists, return 202 with existing jobId (do not enqueue duplicate).
2936
+ - Else enqueue a new job and return 202 with new jobId.`,
2937
+ requestFormat: "json",
2938
+ parameters: [
2939
+ {
2940
+ name: "body",
2941
+ type: "Body",
2942
+ schema: PlayerStatsJobRequest,
2943
+ },
2944
+ {
2945
+ name: "puuid",
2946
+ type: "Path",
2947
+ schema: z.string(),
2948
+ },
2949
+ ],
2950
+ response: PlayerStatsCacheEntryResponse,
2951
+ errors: [
2952
+ {
2953
+ status: 400,
2954
+ description: `Validation error.`,
2955
+ schema: validationError,
2956
+ },
2957
+ {
2958
+ status: 500,
2959
+ description: `Internal server error.`,
2960
+ schema: z.object({ message: z.string() }).passthrough(),
2961
+ },
2962
+ ],
2963
+ },
2964
+ {
2965
+ method: "get",
2966
+ path: "/stats/champions",
2967
+ alias: "getChampionStatsByRegionPatchTier",
2968
+ description: `Retrieve champion aggregated statistics for a specific region, patch, and tier.`,
2969
+ requestFormat: "json",
2970
+ parameters: [
2971
+ {
2972
+ name: "region",
2973
+ type: "Query",
2974
+ schema: z.enum([
2975
+ "br1",
2976
+ "euw1",
2977
+ "na1",
2978
+ "eun1",
2979
+ "kr",
2980
+ "jp1",
2981
+ "la1",
2982
+ "la2",
2983
+ "oc1",
2984
+ "tr1",
2985
+ "ru",
2986
+ "ph2",
2987
+ "sg2",
2988
+ "th2",
2989
+ "tw2",
2990
+ "vn2",
2991
+ ]),
2992
+ },
2993
+ {
2994
+ name: "patch",
2995
+ type: "Query",
2996
+ schema: z.string().optional(),
2997
+ },
2998
+ {
2999
+ name: "tier",
3000
+ type: "Query",
3001
+ schema: z.enum([
3002
+ "IRON",
3003
+ "BRONZE",
3004
+ "SILVER",
3005
+ "GOLD",
3006
+ "PLATINUM",
3007
+ "EMERALD",
3008
+ "DIAMOND",
3009
+ "MASTER",
3010
+ "GRANDMASTER",
3011
+ "CHALLENGER",
3012
+ ]),
3013
+ },
3014
+ {
3015
+ name: "queue",
3016
+ type: "Query",
3017
+ schema: z
3018
+ .union([
3019
+ z.literal(0),
3020
+ z.literal(2),
3021
+ z.literal(4),
3022
+ z.literal(6),
3023
+ z.literal(7),
3024
+ z.literal(8),
3025
+ z.literal(9),
3026
+ z.literal(14),
3027
+ z.literal(16),
3028
+ z.literal(17),
3029
+ z.literal(25),
3030
+ z.literal(31),
3031
+ z.literal(32),
3032
+ z.literal(33),
3033
+ z.literal(41),
3034
+ z.literal(42),
3035
+ z.literal(52),
3036
+ z.literal(61),
3037
+ z.literal(65),
3038
+ z.literal(67),
3039
+ z.literal(70),
3040
+ z.literal(72),
3041
+ z.literal(73),
3042
+ z.literal(75),
3043
+ z.literal(76),
3044
+ z.literal(78),
3045
+ z.literal(83),
3046
+ z.literal(91),
3047
+ z.literal(92),
3048
+ z.literal(93),
3049
+ z.literal(96),
3050
+ z.literal(98),
3051
+ z.literal(100),
3052
+ z.literal(300),
3053
+ z.literal(310),
3054
+ z.literal(313),
3055
+ z.literal(315),
3056
+ z.literal(317),
3057
+ z.literal(318),
3058
+ z.literal(325),
3059
+ z.literal(400),
3060
+ z.literal(410),
3061
+ z.literal(420),
3062
+ z.literal(430),
3063
+ z.literal(440),
3064
+ z.literal(450),
3065
+ z.literal(460),
3066
+ z.literal(470),
3067
+ z.literal(480),
3068
+ z.literal(490),
3069
+ z.literal(600),
3070
+ z.literal(610),
3071
+ z.literal(700),
3072
+ z.literal(720),
3073
+ z.literal(800),
3074
+ z.literal(810),
3075
+ z.literal(820),
3076
+ z.literal(830),
3077
+ z.literal(840),
3078
+ z.literal(850),
3079
+ z.literal(870),
3080
+ z.literal(880),
3081
+ z.literal(890),
3082
+ z.literal(900),
3083
+ z.literal(910),
3084
+ z.literal(920),
3085
+ z.literal(940),
3086
+ z.literal(950),
3087
+ z.literal(960),
3088
+ z.literal(980),
3089
+ z.literal(990),
3090
+ z.literal(1000),
3091
+ z.literal(1010),
3092
+ z.literal(1020),
3093
+ z.literal(1030),
3094
+ z.literal(1040),
3095
+ z.literal(1050),
3096
+ z.literal(1060),
3097
+ z.literal(1070),
3098
+ z.literal(1090),
3099
+ z.literal(1100),
3100
+ z.literal(1110),
3101
+ z.literal(1111),
3102
+ z.literal(1200),
3103
+ z.literal(1210),
3104
+ z.literal(1300),
3105
+ z.literal(1400),
3106
+ z.literal(1700),
3107
+ z.literal(1710),
3108
+ z.literal(1810),
3109
+ z.literal(1820),
3110
+ z.literal(1830),
3111
+ z.literal(1840),
3112
+ z.literal(1900),
3113
+ z.literal(2000),
3114
+ z.literal(2010),
3115
+ z.literal(2020),
3116
+ z.literal(2300),
3117
+ z.literal(2400),
3118
+ ])
3119
+ .optional(),
3120
+ },
3121
+ ],
3122
+ response: ChampionStatsListResponse,
3123
+ errors: [
3124
+ {
3125
+ status: 400,
3126
+ description: `Validation error.`,
3127
+ schema: validationError,
3128
+ },
3129
+ {
3130
+ status: 500,
3131
+ description: `Internal server error.`,
3132
+ schema: z.object({ message: z.string() }).passthrough(),
3133
+ },
3134
+ ],
3135
+ },
3136
+ {
3137
+ method: "get",
3138
+ path: "/stats/champions/:championId",
3139
+ alias: "getChampionStatsDetailByRegion",
3140
+ description: `Retrieve aggregated stats for a single champion for a specific region.`,
3141
+ requestFormat: "json",
3142
+ parameters: [
3143
+ {
3144
+ name: "championId",
3145
+ type: "Path",
3146
+ schema: z.number().int(),
3147
+ },
3148
+ {
3149
+ name: "region",
3150
+ type: "Query",
3151
+ schema: z.enum([
3152
+ "br1",
3153
+ "euw1",
3154
+ "na1",
3155
+ "eun1",
3156
+ "kr",
3157
+ "jp1",
3158
+ "la1",
3159
+ "la2",
3160
+ "oc1",
3161
+ "tr1",
3162
+ "ru",
3163
+ "ph2",
3164
+ "sg2",
3165
+ "th2",
3166
+ "tw2",
3167
+ "vn2",
3168
+ ]),
3169
+ },
3170
+ {
3171
+ name: "patch",
3172
+ type: "Query",
3173
+ schema: z.string(),
3174
+ },
3175
+ {
3176
+ name: "tier",
3177
+ type: "Query",
3178
+ schema: z
3179
+ .enum([
3180
+ "IRON",
3181
+ "BRONZE",
3182
+ "SILVER",
3183
+ "GOLD",
3184
+ "PLATINUM",
3185
+ "EMERALD",
3186
+ "DIAMOND",
3187
+ "MASTER",
3188
+ "GRANDMASTER",
3189
+ "CHALLENGER",
3190
+ ])
3191
+ .optional(),
3192
+ },
3193
+ {
3194
+ name: "queue",
3195
+ type: "Query",
3196
+ schema: z
3197
+ .union([
3198
+ z.literal(0),
3199
+ z.literal(2),
3200
+ z.literal(4),
3201
+ z.literal(6),
3202
+ z.literal(7),
3203
+ z.literal(8),
3204
+ z.literal(9),
3205
+ z.literal(14),
3206
+ z.literal(16),
3207
+ z.literal(17),
3208
+ z.literal(25),
3209
+ z.literal(31),
3210
+ z.literal(32),
3211
+ z.literal(33),
3212
+ z.literal(41),
3213
+ z.literal(42),
3214
+ z.literal(52),
3215
+ z.literal(61),
3216
+ z.literal(65),
3217
+ z.literal(67),
3218
+ z.literal(70),
3219
+ z.literal(72),
3220
+ z.literal(73),
3221
+ z.literal(75),
3222
+ z.literal(76),
3223
+ z.literal(78),
3224
+ z.literal(83),
3225
+ z.literal(91),
3226
+ z.literal(92),
3227
+ z.literal(93),
3228
+ z.literal(96),
3229
+ z.literal(98),
3230
+ z.literal(100),
3231
+ z.literal(300),
3232
+ z.literal(310),
3233
+ z.literal(313),
3234
+ z.literal(315),
3235
+ z.literal(317),
3236
+ z.literal(318),
3237
+ z.literal(325),
3238
+ z.literal(400),
3239
+ z.literal(410),
3240
+ z.literal(420),
3241
+ z.literal(430),
3242
+ z.literal(440),
3243
+ z.literal(450),
3244
+ z.literal(460),
3245
+ z.literal(470),
3246
+ z.literal(480),
3247
+ z.literal(490),
3248
+ z.literal(600),
3249
+ z.literal(610),
3250
+ z.literal(700),
3251
+ z.literal(720),
3252
+ z.literal(800),
3253
+ z.literal(810),
3254
+ z.literal(820),
3255
+ z.literal(830),
3256
+ z.literal(840),
3257
+ z.literal(850),
3258
+ z.literal(870),
3259
+ z.literal(880),
3260
+ z.literal(890),
3261
+ z.literal(900),
3262
+ z.literal(910),
3263
+ z.literal(920),
3264
+ z.literal(940),
3265
+ z.literal(950),
3266
+ z.literal(960),
3267
+ z.literal(980),
3268
+ z.literal(990),
3269
+ z.literal(1000),
3270
+ z.literal(1010),
3271
+ z.literal(1020),
3272
+ z.literal(1030),
3273
+ z.literal(1040),
3274
+ z.literal(1050),
3275
+ z.literal(1060),
3276
+ z.literal(1070),
3277
+ z.literal(1090),
3278
+ z.literal(1100),
3279
+ z.literal(1110),
3280
+ z.literal(1111),
3281
+ z.literal(1200),
3282
+ z.literal(1210),
3283
+ z.literal(1300),
3284
+ z.literal(1400),
3285
+ z.literal(1700),
3286
+ z.literal(1710),
3287
+ z.literal(1810),
3288
+ z.literal(1820),
3289
+ z.literal(1830),
3290
+ z.literal(1840),
3291
+ z.literal(1900),
3292
+ z.literal(2000),
3293
+ z.literal(2010),
3294
+ z.literal(2020),
3295
+ z.literal(2300),
3296
+ z.literal(2400),
3297
+ ])
3298
+ .optional(),
3299
+ },
3300
+ ],
3301
+ response: ChampionStatsDetailResponse,
3302
+ errors: [
3303
+ {
3304
+ status: 400,
3305
+ description: `Validation error.`,
3306
+ schema: validationError,
3307
+ },
3308
+ {
3309
+ status: 404,
3310
+ description: `Champion stats not found.`,
3311
+ schema: z.object({ message: z.string() }).passthrough(),
3312
+ },
3313
+ {
3314
+ status: 500,
3315
+ description: `Internal server error.`,
3316
+ schema: z.object({ message: z.string() }).passthrough(),
3317
+ },
3318
+ ],
3319
+ },
3320
+ {
3321
+ method: "get",
3322
+ path: "/stats/champions/:championId/early-game",
3323
+ alias: "getChampionEarlyGameStatsByRegion",
3324
+ description: `Retrieve first blood, lane lead, and early death indicators for one champion.
3325
+ All metrics are computed within the requested region only.
3326
+ Early-game metrics include metricDefinitionVersion to track definition changes.
3327
+ All rates are returned as decimal values in range [0, 1].`,
3328
+ requestFormat: "json",
3329
+ parameters: [
3330
+ {
3331
+ name: "championId",
3332
+ type: "Path",
3333
+ schema: z.number().int(),
3334
+ },
3335
+ {
3336
+ name: "region",
3337
+ type: "Query",
3338
+ schema: z.enum([
3339
+ "br1",
3340
+ "euw1",
3341
+ "na1",
3342
+ "eun1",
3343
+ "kr",
3344
+ "jp1",
3345
+ "la1",
3346
+ "la2",
3347
+ "oc1",
3348
+ "tr1",
3349
+ "ru",
3350
+ "ph2",
3351
+ "sg2",
3352
+ "th2",
3353
+ "tw2",
3354
+ "vn2",
3355
+ ]),
3356
+ },
3357
+ {
3358
+ name: "patch",
3359
+ type: "Query",
3360
+ schema: z.string(),
3361
+ },
3362
+ {
3363
+ name: "tier",
3364
+ type: "Query",
3365
+ schema: z.enum([
3366
+ "IRON",
3367
+ "BRONZE",
3368
+ "SILVER",
3369
+ "GOLD",
3370
+ "PLATINUM",
3371
+ "EMERALD",
3372
+ "DIAMOND",
3373
+ "MASTER",
3374
+ "GRANDMASTER",
3375
+ "CHALLENGER",
3376
+ ]),
3377
+ },
3378
+ {
3379
+ name: "queue",
3380
+ type: "Query",
3381
+ schema: z.union([
3382
+ z.literal(0),
3383
+ z.literal(2),
3384
+ z.literal(4),
3385
+ z.literal(6),
3386
+ z.literal(7),
3387
+ z.literal(8),
3388
+ z.literal(9),
3389
+ z.literal(14),
3390
+ z.literal(16),
3391
+ z.literal(17),
3392
+ z.literal(25),
3393
+ z.literal(31),
3394
+ z.literal(32),
3395
+ z.literal(33),
3396
+ z.literal(41),
3397
+ z.literal(42),
3398
+ z.literal(52),
3399
+ z.literal(61),
3400
+ z.literal(65),
3401
+ z.literal(67),
3402
+ z.literal(70),
3403
+ z.literal(72),
3404
+ z.literal(73),
3405
+ z.literal(75),
3406
+ z.literal(76),
3407
+ z.literal(78),
3408
+ z.literal(83),
3409
+ z.literal(91),
3410
+ z.literal(92),
3411
+ z.literal(93),
3412
+ z.literal(96),
3413
+ z.literal(98),
3414
+ z.literal(100),
3415
+ z.literal(300),
3416
+ z.literal(310),
3417
+ z.literal(313),
3418
+ z.literal(315),
3419
+ z.literal(317),
3420
+ z.literal(318),
3421
+ z.literal(325),
3422
+ z.literal(400),
3423
+ z.literal(410),
3424
+ z.literal(420),
3425
+ z.literal(430),
3426
+ z.literal(440),
3427
+ z.literal(450),
3428
+ z.literal(460),
3429
+ z.literal(470),
3430
+ z.literal(480),
3431
+ z.literal(490),
3432
+ z.literal(600),
3433
+ z.literal(610),
3434
+ z.literal(700),
3435
+ z.literal(720),
3436
+ z.literal(800),
3437
+ z.literal(810),
3438
+ z.literal(820),
3439
+ z.literal(830),
3440
+ z.literal(840),
3441
+ z.literal(850),
3442
+ z.literal(870),
3443
+ z.literal(880),
3444
+ z.literal(890),
3445
+ z.literal(900),
3446
+ z.literal(910),
3447
+ z.literal(920),
3448
+ z.literal(940),
3449
+ z.literal(950),
3450
+ z.literal(960),
3451
+ z.literal(980),
3452
+ z.literal(990),
3453
+ z.literal(1000),
3454
+ z.literal(1010),
3455
+ z.literal(1020),
3456
+ z.literal(1030),
3457
+ z.literal(1040),
3458
+ z.literal(1050),
3459
+ z.literal(1060),
3460
+ z.literal(1070),
3461
+ z.literal(1090),
3462
+ z.literal(1100),
3463
+ z.literal(1110),
3464
+ z.literal(1111),
3465
+ z.literal(1200),
3466
+ z.literal(1210),
3467
+ z.literal(1300),
3468
+ z.literal(1400),
3469
+ z.literal(1700),
3470
+ z.literal(1710),
3471
+ z.literal(1810),
3472
+ z.literal(1820),
3473
+ z.literal(1830),
3474
+ z.literal(1840),
3475
+ z.literal(1900),
3476
+ z.literal(2000),
3477
+ z.literal(2010),
3478
+ z.literal(2020),
3479
+ z.literal(2300),
3480
+ z.literal(2400),
3481
+ ]),
3482
+ },
3483
+ ],
3484
+ response: ChampionEarlyGameStatsResponse,
3485
+ errors: [
3486
+ {
3487
+ status: 400,
3488
+ description: `Validation error.`,
3489
+ schema: z.object({ message: z.string() }).passthrough(),
3490
+ },
3491
+ {
3492
+ status: 404,
3493
+ description: `Champion not found in dataset.`,
3494
+ schema: z.object({ message: z.string() }).passthrough(),
3495
+ },
3496
+ {
3497
+ status: 500,
3498
+ description: `Internal server error.`,
3499
+ schema: z.object({ message: z.string() }).passthrough(),
3500
+ },
3501
+ ],
3502
+ },
3503
+ {
3504
+ method: "get",
3505
+ path: "/stats/champions/:championId/game-length",
3506
+ alias: "getChampionGameLengthStatsByRegion",
3507
+ description: `Retrieve short/medium/long game performance for one champion.
3508
+ All metrics are computed within the requested region only.
3509
+ All rates are returned as decimal values in range [0, 1].`,
3510
+ requestFormat: "json",
3511
+ parameters: [
3512
+ {
3513
+ name: "championId",
3514
+ type: "Path",
3515
+ schema: z.number().int(),
3516
+ },
3517
+ {
3518
+ name: "region",
3519
+ type: "Query",
3520
+ schema: z.enum([
3521
+ "br1",
3522
+ "euw1",
3523
+ "na1",
3524
+ "eun1",
3525
+ "kr",
3526
+ "jp1",
3527
+ "la1",
3528
+ "la2",
3529
+ "oc1",
3530
+ "tr1",
3531
+ "ru",
3532
+ "ph2",
3533
+ "sg2",
3534
+ "th2",
3535
+ "tw2",
3536
+ "vn2",
3537
+ ]),
3538
+ },
3539
+ {
3540
+ name: "patch",
3541
+ type: "Query",
3542
+ schema: z.string(),
3543
+ },
3544
+ {
3545
+ name: "tier",
3546
+ type: "Query",
3547
+ schema: z.enum([
3548
+ "IRON",
3549
+ "BRONZE",
3550
+ "SILVER",
3551
+ "GOLD",
3552
+ "PLATINUM",
3553
+ "EMERALD",
3554
+ "DIAMOND",
3555
+ "MASTER",
3556
+ "GRANDMASTER",
3557
+ "CHALLENGER",
3558
+ ]),
3559
+ },
3560
+ {
3561
+ name: "queue",
3562
+ type: "Query",
3563
+ schema: z.union([
3564
+ z.literal(0),
3565
+ z.literal(2),
3566
+ z.literal(4),
3567
+ z.literal(6),
3568
+ z.literal(7),
3569
+ z.literal(8),
3570
+ z.literal(9),
3571
+ z.literal(14),
3572
+ z.literal(16),
3573
+ z.literal(17),
3574
+ z.literal(25),
3575
+ z.literal(31),
3576
+ z.literal(32),
3577
+ z.literal(33),
3578
+ z.literal(41),
3579
+ z.literal(42),
3580
+ z.literal(52),
3581
+ z.literal(61),
3582
+ z.literal(65),
3583
+ z.literal(67),
3584
+ z.literal(70),
3585
+ z.literal(72),
3586
+ z.literal(73),
3587
+ z.literal(75),
3588
+ z.literal(76),
3589
+ z.literal(78),
3590
+ z.literal(83),
3591
+ z.literal(91),
3592
+ z.literal(92),
3593
+ z.literal(93),
3594
+ z.literal(96),
3595
+ z.literal(98),
3596
+ z.literal(100),
3597
+ z.literal(300),
3598
+ z.literal(310),
3599
+ z.literal(313),
3600
+ z.literal(315),
3601
+ z.literal(317),
3602
+ z.literal(318),
3603
+ z.literal(325),
3604
+ z.literal(400),
3605
+ z.literal(410),
3606
+ z.literal(420),
3607
+ z.literal(430),
3608
+ z.literal(440),
3609
+ z.literal(450),
3610
+ z.literal(460),
3611
+ z.literal(470),
3612
+ z.literal(480),
3613
+ z.literal(490),
3614
+ z.literal(600),
3615
+ z.literal(610),
3616
+ z.literal(700),
3617
+ z.literal(720),
3618
+ z.literal(800),
3619
+ z.literal(810),
3620
+ z.literal(820),
3621
+ z.literal(830),
3622
+ z.literal(840),
3623
+ z.literal(850),
3624
+ z.literal(870),
3625
+ z.literal(880),
3626
+ z.literal(890),
3627
+ z.literal(900),
3628
+ z.literal(910),
3629
+ z.literal(920),
3630
+ z.literal(940),
3631
+ z.literal(950),
3632
+ z.literal(960),
3633
+ z.literal(980),
3634
+ z.literal(990),
3635
+ z.literal(1000),
3636
+ z.literal(1010),
3637
+ z.literal(1020),
3638
+ z.literal(1030),
3639
+ z.literal(1040),
3640
+ z.literal(1050),
3641
+ z.literal(1060),
3642
+ z.literal(1070),
3643
+ z.literal(1090),
3644
+ z.literal(1100),
3645
+ z.literal(1110),
3646
+ z.literal(1111),
3647
+ z.literal(1200),
3648
+ z.literal(1210),
3649
+ z.literal(1300),
3650
+ z.literal(1400),
3651
+ z.literal(1700),
3652
+ z.literal(1710),
3653
+ z.literal(1810),
3654
+ z.literal(1820),
3655
+ z.literal(1830),
3656
+ z.literal(1840),
3657
+ z.literal(1900),
3658
+ z.literal(2000),
3659
+ z.literal(2010),
3660
+ z.literal(2020),
3661
+ z.literal(2300),
3662
+ z.literal(2400),
3663
+ ]),
3664
+ },
3665
+ ],
3666
+ response: ChampionGameLengthStatsResponse,
3667
+ errors: [
3668
+ {
3669
+ status: 400,
3670
+ description: `Validation error.`,
3671
+ schema: z.object({ message: z.string() }).passthrough(),
3672
+ },
3673
+ {
3674
+ status: 404,
3675
+ description: `Champion not found in dataset.`,
3676
+ schema: z.object({ message: z.string() }).passthrough(),
3677
+ },
3678
+ {
3679
+ status: 500,
3680
+ description: `Internal server error.`,
3681
+ schema: z.object({ message: z.string() }).passthrough(),
3682
+ },
3683
+ ],
3684
+ },
3685
+ {
3686
+ method: "get",
3687
+ path: "/stats/champions/:championId/matchups",
3688
+ alias: "getChampionMatchupsByRegion",
3689
+ description: `Retrieve directional champion-vs-champion matchup metrics.
3690
+ All metrics are computed within the requested region only.
3691
+ For matchup endpoints, results are directional: A vs B is distinct from B vs A.
3692
+ When lane cannot be reliably inferred, records use lane&#x3D;unknown.
3693
+ All rates are returned as decimal values in range [0, 1].`,
3694
+ requestFormat: "json",
3695
+ parameters: [
3696
+ {
3697
+ name: "championId",
3698
+ type: "Path",
3699
+ schema: z.number().int(),
3700
+ },
3701
+ {
3702
+ name: "region",
3703
+ type: "Query",
3704
+ schema: z.enum([
3705
+ "br1",
3706
+ "euw1",
3707
+ "na1",
3708
+ "eun1",
3709
+ "kr",
3710
+ "jp1",
3711
+ "la1",
3712
+ "la2",
3713
+ "oc1",
3714
+ "tr1",
3715
+ "ru",
3716
+ "ph2",
3717
+ "sg2",
3718
+ "th2",
3719
+ "tw2",
3720
+ "vn2",
3721
+ ]),
3722
+ },
3723
+ {
3724
+ name: "patch",
3725
+ type: "Query",
3726
+ schema: z.string(),
3727
+ },
3728
+ {
3729
+ name: "tier",
3730
+ type: "Query",
3731
+ schema: z.enum([
3732
+ "IRON",
3733
+ "BRONZE",
3734
+ "SILVER",
3735
+ "GOLD",
3736
+ "PLATINUM",
3737
+ "EMERALD",
3738
+ "DIAMOND",
3739
+ "MASTER",
3740
+ "GRANDMASTER",
3741
+ "CHALLENGER",
3742
+ ]),
3743
+ },
3744
+ {
3745
+ name: "queue",
3746
+ type: "Query",
3747
+ schema: z.union([
3748
+ z.literal(0),
3749
+ z.literal(2),
3750
+ z.literal(4),
3751
+ z.literal(6),
3752
+ z.literal(7),
3753
+ z.literal(8),
3754
+ z.literal(9),
3755
+ z.literal(14),
3756
+ z.literal(16),
3757
+ z.literal(17),
3758
+ z.literal(25),
3759
+ z.literal(31),
3760
+ z.literal(32),
3761
+ z.literal(33),
3762
+ z.literal(41),
3763
+ z.literal(42),
3764
+ z.literal(52),
3765
+ z.literal(61),
3766
+ z.literal(65),
3767
+ z.literal(67),
3768
+ z.literal(70),
3769
+ z.literal(72),
3770
+ z.literal(73),
3771
+ z.literal(75),
3772
+ z.literal(76),
3773
+ z.literal(78),
3774
+ z.literal(83),
3775
+ z.literal(91),
3776
+ z.literal(92),
3777
+ z.literal(93),
3778
+ z.literal(96),
3779
+ z.literal(98),
3780
+ z.literal(100),
3781
+ z.literal(300),
3782
+ z.literal(310),
3783
+ z.literal(313),
3784
+ z.literal(315),
3785
+ z.literal(317),
3786
+ z.literal(318),
3787
+ z.literal(325),
3788
+ z.literal(400),
3789
+ z.literal(410),
3790
+ z.literal(420),
3791
+ z.literal(430),
3792
+ z.literal(440),
3793
+ z.literal(450),
3794
+ z.literal(460),
3795
+ z.literal(470),
3796
+ z.literal(480),
3797
+ z.literal(490),
3798
+ z.literal(600),
3799
+ z.literal(610),
3800
+ z.literal(700),
3801
+ z.literal(720),
3802
+ z.literal(800),
3803
+ z.literal(810),
3804
+ z.literal(820),
3805
+ z.literal(830),
3806
+ z.literal(840),
3807
+ z.literal(850),
3808
+ z.literal(870),
3809
+ z.literal(880),
3810
+ z.literal(890),
3811
+ z.literal(900),
3812
+ z.literal(910),
3813
+ z.literal(920),
3814
+ z.literal(940),
3815
+ z.literal(950),
3816
+ z.literal(960),
3817
+ z.literal(980),
3818
+ z.literal(990),
3819
+ z.literal(1000),
3820
+ z.literal(1010),
3821
+ z.literal(1020),
3822
+ z.literal(1030),
3823
+ z.literal(1040),
3824
+ z.literal(1050),
3825
+ z.literal(1060),
3826
+ z.literal(1070),
3827
+ z.literal(1090),
3828
+ z.literal(1100),
3829
+ z.literal(1110),
3830
+ z.literal(1111),
3831
+ z.literal(1200),
3832
+ z.literal(1210),
3833
+ z.literal(1300),
3834
+ z.literal(1400),
3835
+ z.literal(1700),
3836
+ z.literal(1710),
3837
+ z.literal(1810),
3838
+ z.literal(1820),
3839
+ z.literal(1830),
3840
+ z.literal(1840),
3841
+ z.literal(1900),
3842
+ z.literal(2000),
3843
+ z.literal(2010),
3844
+ z.literal(2020),
3845
+ z.literal(2300),
3846
+ z.literal(2400),
3847
+ ]),
3848
+ },
3849
+ {
3850
+ name: "lane",
3851
+ type: "Query",
3852
+ schema: z
3853
+ .enum(["top", "jungle", "mid", "bottom", "support", "unknown"])
3854
+ .optional(),
3855
+ },
3856
+ {
3857
+ name: "limit",
3858
+ type: "Query",
3859
+ schema: z.number().int().lte(100).optional().default(20),
3860
+ },
3861
+ ],
3862
+ response: ChampionMatchupStatsListResponse,
3863
+ errors: [
3864
+ {
3865
+ status: 400,
3866
+ description: `Validation error.`,
3867
+ schema: z.object({ message: z.string() }).passthrough(),
3868
+ },
3869
+ {
3870
+ status: 404,
3871
+ description: `Champion not found in dataset.`,
3872
+ schema: z.object({ message: z.string() }).passthrough(),
3873
+ },
3874
+ {
3875
+ status: 500,
3876
+ description: `Internal server error.`,
3877
+ schema: z.object({ message: z.string() }).passthrough(),
3878
+ },
3879
+ ],
3880
+ },
3881
+ {
3882
+ method: "get",
3883
+ path: "/stats/champions/:championId/performance",
3884
+ alias: "getChampionPerformanceDetailByRegion",
3885
+ description: `Retrieve normalized per-minute performance metrics for one champion.
3886
+ All metrics are computed within the requested region only.
3887
+ All rates are returned as decimal values in range [0, 1] where applicable.`,
3888
+ requestFormat: "json",
3889
+ parameters: [
3890
+ {
3891
+ name: "championId",
3892
+ type: "Path",
3893
+ schema: z.number().int(),
3894
+ },
3895
+ {
3896
+ name: "region",
3897
+ type: "Query",
3898
+ schema: z.enum([
3899
+ "br1",
3900
+ "euw1",
3901
+ "na1",
3902
+ "eun1",
3903
+ "kr",
3904
+ "jp1",
3905
+ "la1",
3906
+ "la2",
3907
+ "oc1",
3908
+ "tr1",
3909
+ "ru",
3910
+ "ph2",
3911
+ "sg2",
3912
+ "th2",
3913
+ "tw2",
3914
+ "vn2",
3915
+ ]),
3916
+ },
3917
+ {
3918
+ name: "patch",
3919
+ type: "Query",
3920
+ schema: z.string(),
3921
+ },
3922
+ {
3923
+ name: "tier",
3924
+ type: "Query",
3925
+ schema: z.enum([
3926
+ "IRON",
3927
+ "BRONZE",
3928
+ "SILVER",
3929
+ "GOLD",
3930
+ "PLATINUM",
3931
+ "EMERALD",
3932
+ "DIAMOND",
3933
+ "MASTER",
3934
+ "GRANDMASTER",
3935
+ "CHALLENGER",
3936
+ ]),
3937
+ },
3938
+ {
3939
+ name: "queue",
3940
+ type: "Query",
3941
+ schema: z.union([
3942
+ z.literal(0),
3943
+ z.literal(2),
3944
+ z.literal(4),
3945
+ z.literal(6),
3946
+ z.literal(7),
3947
+ z.literal(8),
3948
+ z.literal(9),
3949
+ z.literal(14),
3950
+ z.literal(16),
3951
+ z.literal(17),
3952
+ z.literal(25),
3953
+ z.literal(31),
3954
+ z.literal(32),
3955
+ z.literal(33),
3956
+ z.literal(41),
3957
+ z.literal(42),
3958
+ z.literal(52),
3959
+ z.literal(61),
3960
+ z.literal(65),
3961
+ z.literal(67),
3962
+ z.literal(70),
3963
+ z.literal(72),
3964
+ z.literal(73),
3965
+ z.literal(75),
3966
+ z.literal(76),
3967
+ z.literal(78),
3968
+ z.literal(83),
3969
+ z.literal(91),
3970
+ z.literal(92),
3971
+ z.literal(93),
3972
+ z.literal(96),
3973
+ z.literal(98),
3974
+ z.literal(100),
3975
+ z.literal(300),
3976
+ z.literal(310),
3977
+ z.literal(313),
3978
+ z.literal(315),
3979
+ z.literal(317),
3980
+ z.literal(318),
3981
+ z.literal(325),
3982
+ z.literal(400),
3983
+ z.literal(410),
3984
+ z.literal(420),
3985
+ z.literal(430),
3986
+ z.literal(440),
3987
+ z.literal(450),
3988
+ z.literal(460),
3989
+ z.literal(470),
3990
+ z.literal(480),
3991
+ z.literal(490),
3992
+ z.literal(600),
3993
+ z.literal(610),
3994
+ z.literal(700),
3995
+ z.literal(720),
3996
+ z.literal(800),
3997
+ z.literal(810),
3998
+ z.literal(820),
3999
+ z.literal(830),
4000
+ z.literal(840),
4001
+ z.literal(850),
4002
+ z.literal(870),
4003
+ z.literal(880),
4004
+ z.literal(890),
4005
+ z.literal(900),
4006
+ z.literal(910),
4007
+ z.literal(920),
4008
+ z.literal(940),
4009
+ z.literal(950),
4010
+ z.literal(960),
4011
+ z.literal(980),
4012
+ z.literal(990),
4013
+ z.literal(1000),
4014
+ z.literal(1010),
4015
+ z.literal(1020),
4016
+ z.literal(1030),
4017
+ z.literal(1040),
4018
+ z.literal(1050),
4019
+ z.literal(1060),
4020
+ z.literal(1070),
4021
+ z.literal(1090),
4022
+ z.literal(1100),
4023
+ z.literal(1110),
4024
+ z.literal(1111),
4025
+ z.literal(1200),
4026
+ z.literal(1210),
4027
+ z.literal(1300),
4028
+ z.literal(1400),
4029
+ z.literal(1700),
4030
+ z.literal(1710),
4031
+ z.literal(1810),
4032
+ z.literal(1820),
4033
+ z.literal(1830),
4034
+ z.literal(1840),
4035
+ z.literal(1900),
4036
+ z.literal(2000),
4037
+ z.literal(2010),
4038
+ z.literal(2020),
4039
+ z.literal(2300),
4040
+ z.literal(2400),
4041
+ ]),
4042
+ },
4043
+ ],
4044
+ response: ChampionPerformanceStatsDetailResponse,
4045
+ errors: [
4046
+ {
4047
+ status: 400,
4048
+ description: `Validation error.`,
4049
+ schema: z.object({ message: z.string() }).passthrough(),
4050
+ },
4051
+ {
4052
+ status: 404,
4053
+ description: `Champion not found in dataset.`,
4054
+ schema: z.object({ message: z.string() }).passthrough(),
4055
+ },
4056
+ {
4057
+ status: 500,
4058
+ description: `Internal server error.`,
4059
+ schema: z.object({ message: z.string() }).passthrough(),
4060
+ },
4061
+ ],
4062
+ },
4063
+ {
4064
+ method: "get",
4065
+ path: "/stats/champions/:championId/synergy",
4066
+ alias: "getChampionSynergyByRegion",
4067
+ description: `Retrieve same-team champion duo performance metrics.
4068
+ All metrics are computed within the requested region only.
4069
+ All rates are returned as decimal values in range [0, 1].`,
4070
+ requestFormat: "json",
4071
+ parameters: [
4072
+ {
4073
+ name: "championId",
4074
+ type: "Path",
4075
+ schema: z.number().int(),
4076
+ },
4077
+ {
4078
+ name: "region",
4079
+ type: "Query",
4080
+ schema: z.enum([
4081
+ "br1",
4082
+ "euw1",
4083
+ "na1",
4084
+ "eun1",
4085
+ "kr",
4086
+ "jp1",
4087
+ "la1",
4088
+ "la2",
4089
+ "oc1",
4090
+ "tr1",
4091
+ "ru",
4092
+ "ph2",
4093
+ "sg2",
4094
+ "th2",
4095
+ "tw2",
4096
+ "vn2",
4097
+ ]),
4098
+ },
4099
+ {
4100
+ name: "patch",
4101
+ type: "Query",
4102
+ schema: z.string(),
4103
+ },
4104
+ {
4105
+ name: "tier",
4106
+ type: "Query",
4107
+ schema: z.enum([
4108
+ "IRON",
4109
+ "BRONZE",
4110
+ "SILVER",
4111
+ "GOLD",
4112
+ "PLATINUM",
4113
+ "EMERALD",
4114
+ "DIAMOND",
4115
+ "MASTER",
4116
+ "GRANDMASTER",
4117
+ "CHALLENGER",
4118
+ ]),
4119
+ },
4120
+ {
4121
+ name: "queue",
4122
+ type: "Query",
4123
+ schema: z.union([
4124
+ z.literal(0),
4125
+ z.literal(2),
4126
+ z.literal(4),
4127
+ z.literal(6),
4128
+ z.literal(7),
4129
+ z.literal(8),
4130
+ z.literal(9),
4131
+ z.literal(14),
4132
+ z.literal(16),
4133
+ z.literal(17),
4134
+ z.literal(25),
4135
+ z.literal(31),
4136
+ z.literal(32),
4137
+ z.literal(33),
4138
+ z.literal(41),
4139
+ z.literal(42),
4140
+ z.literal(52),
4141
+ z.literal(61),
4142
+ z.literal(65),
4143
+ z.literal(67),
4144
+ z.literal(70),
4145
+ z.literal(72),
4146
+ z.literal(73),
4147
+ z.literal(75),
4148
+ z.literal(76),
4149
+ z.literal(78),
4150
+ z.literal(83),
4151
+ z.literal(91),
4152
+ z.literal(92),
4153
+ z.literal(93),
4154
+ z.literal(96),
4155
+ z.literal(98),
4156
+ z.literal(100),
4157
+ z.literal(300),
4158
+ z.literal(310),
4159
+ z.literal(313),
4160
+ z.literal(315),
4161
+ z.literal(317),
4162
+ z.literal(318),
4163
+ z.literal(325),
4164
+ z.literal(400),
4165
+ z.literal(410),
4166
+ z.literal(420),
4167
+ z.literal(430),
4168
+ z.literal(440),
4169
+ z.literal(450),
4170
+ z.literal(460),
4171
+ z.literal(470),
4172
+ z.literal(480),
4173
+ z.literal(490),
4174
+ z.literal(600),
4175
+ z.literal(610),
4176
+ z.literal(700),
4177
+ z.literal(720),
4178
+ z.literal(800),
4179
+ z.literal(810),
4180
+ z.literal(820),
4181
+ z.literal(830),
4182
+ z.literal(840),
4183
+ z.literal(850),
4184
+ z.literal(870),
4185
+ z.literal(880),
4186
+ z.literal(890),
4187
+ z.literal(900),
4188
+ z.literal(910),
4189
+ z.literal(920),
4190
+ z.literal(940),
4191
+ z.literal(950),
4192
+ z.literal(960),
4193
+ z.literal(980),
4194
+ z.literal(990),
4195
+ z.literal(1000),
4196
+ z.literal(1010),
4197
+ z.literal(1020),
4198
+ z.literal(1030),
4199
+ z.literal(1040),
4200
+ z.literal(1050),
4201
+ z.literal(1060),
4202
+ z.literal(1070),
4203
+ z.literal(1090),
4204
+ z.literal(1100),
4205
+ z.literal(1110),
4206
+ z.literal(1111),
4207
+ z.literal(1200),
4208
+ z.literal(1210),
4209
+ z.literal(1300),
4210
+ z.literal(1400),
4211
+ z.literal(1700),
4212
+ z.literal(1710),
4213
+ z.literal(1810),
4214
+ z.literal(1820),
4215
+ z.literal(1830),
4216
+ z.literal(1840),
4217
+ z.literal(1900),
4218
+ z.literal(2000),
4219
+ z.literal(2010),
4220
+ z.literal(2020),
4221
+ z.literal(2300),
4222
+ z.literal(2400),
4223
+ ]),
4224
+ },
4225
+ {
4226
+ name: "limit",
4227
+ type: "Query",
4228
+ schema: z.number().int().lte(100).optional().default(20),
4229
+ },
4230
+ ],
4231
+ response: ChampionSynergyStatsListResponse,
4232
+ errors: [
4233
+ {
4234
+ status: 400,
4235
+ description: `Validation error.`,
4236
+ schema: z.object({ message: z.string() }).passthrough(),
4237
+ },
4238
+ {
4239
+ status: 404,
4240
+ description: `Champion not found in dataset.`,
4241
+ schema: z.object({ message: z.string() }).passthrough(),
4242
+ },
4243
+ {
4244
+ status: 500,
4245
+ description: `Internal server error.`,
4246
+ schema: z.object({ message: z.string() }).passthrough(),
4247
+ },
4248
+ ],
4249
+ },
4250
+ {
4251
+ method: "get",
4252
+ path: "/stats/champions/objectives",
4253
+ alias: "getChampionObjectiveStatsByRegion",
4254
+ description: `Retrieve objective contribution rates by champion.
4255
+ All metrics are computed within the requested region only.
4256
+ Objective metrics include metricDefinitionVersion to track definition changes.
4257
+ All rates are returned as decimal values in range [0, 1].`,
4258
+ requestFormat: "json",
4259
+ parameters: [
4260
+ {
4261
+ name: "region",
4262
+ type: "Query",
4263
+ schema: z.enum([
4264
+ "br1",
4265
+ "euw1",
4266
+ "na1",
4267
+ "eun1",
4268
+ "kr",
4269
+ "jp1",
4270
+ "la1",
4271
+ "la2",
4272
+ "oc1",
4273
+ "tr1",
4274
+ "ru",
4275
+ "ph2",
4276
+ "sg2",
4277
+ "th2",
4278
+ "tw2",
4279
+ "vn2",
4280
+ ]),
4281
+ },
4282
+ {
4283
+ name: "patch",
4284
+ type: "Query",
4285
+ schema: z.string(),
4286
+ },
4287
+ {
4288
+ name: "tier",
4289
+ type: "Query",
4290
+ schema: z.enum([
4291
+ "IRON",
4292
+ "BRONZE",
4293
+ "SILVER",
4294
+ "GOLD",
4295
+ "PLATINUM",
4296
+ "EMERALD",
4297
+ "DIAMOND",
4298
+ "MASTER",
4299
+ "GRANDMASTER",
4300
+ "CHALLENGER",
4301
+ ]),
4302
+ },
4303
+ {
4304
+ name: "queue",
4305
+ type: "Query",
4306
+ schema: z.union([
4307
+ z.literal(0),
4308
+ z.literal(2),
4309
+ z.literal(4),
4310
+ z.literal(6),
4311
+ z.literal(7),
4312
+ z.literal(8),
4313
+ z.literal(9),
4314
+ z.literal(14),
4315
+ z.literal(16),
4316
+ z.literal(17),
4317
+ z.literal(25),
4318
+ z.literal(31),
4319
+ z.literal(32),
4320
+ z.literal(33),
4321
+ z.literal(41),
4322
+ z.literal(42),
4323
+ z.literal(52),
4324
+ z.literal(61),
4325
+ z.literal(65),
4326
+ z.literal(67),
4327
+ z.literal(70),
4328
+ z.literal(72),
4329
+ z.literal(73),
4330
+ z.literal(75),
4331
+ z.literal(76),
4332
+ z.literal(78),
4333
+ z.literal(83),
4334
+ z.literal(91),
4335
+ z.literal(92),
4336
+ z.literal(93),
4337
+ z.literal(96),
4338
+ z.literal(98),
4339
+ z.literal(100),
4340
+ z.literal(300),
4341
+ z.literal(310),
4342
+ z.literal(313),
4343
+ z.literal(315),
4344
+ z.literal(317),
4345
+ z.literal(318),
4346
+ z.literal(325),
4347
+ z.literal(400),
4348
+ z.literal(410),
4349
+ z.literal(420),
4350
+ z.literal(430),
4351
+ z.literal(440),
4352
+ z.literal(450),
4353
+ z.literal(460),
4354
+ z.literal(470),
4355
+ z.literal(480),
4356
+ z.literal(490),
4357
+ z.literal(600),
4358
+ z.literal(610),
4359
+ z.literal(700),
4360
+ z.literal(720),
4361
+ z.literal(800),
4362
+ z.literal(810),
4363
+ z.literal(820),
4364
+ z.literal(830),
4365
+ z.literal(840),
4366
+ z.literal(850),
4367
+ z.literal(870),
4368
+ z.literal(880),
4369
+ z.literal(890),
4370
+ z.literal(900),
4371
+ z.literal(910),
4372
+ z.literal(920),
4373
+ z.literal(940),
4374
+ z.literal(950),
4375
+ z.literal(960),
4376
+ z.literal(980),
4377
+ z.literal(990),
4378
+ z.literal(1000),
4379
+ z.literal(1010),
4380
+ z.literal(1020),
4381
+ z.literal(1030),
4382
+ z.literal(1040),
4383
+ z.literal(1050),
4384
+ z.literal(1060),
4385
+ z.literal(1070),
4386
+ z.literal(1090),
4387
+ z.literal(1100),
4388
+ z.literal(1110),
4389
+ z.literal(1111),
4390
+ z.literal(1200),
4391
+ z.literal(1210),
4392
+ z.literal(1300),
4393
+ z.literal(1400),
4394
+ z.literal(1700),
4395
+ z.literal(1710),
4396
+ z.literal(1810),
4397
+ z.literal(1820),
4398
+ z.literal(1830),
4399
+ z.literal(1840),
4400
+ z.literal(1900),
4401
+ z.literal(2000),
4402
+ z.literal(2010),
4403
+ z.literal(2020),
4404
+ z.literal(2300),
4405
+ z.literal(2400),
4406
+ ]),
4407
+ },
4408
+ ],
4409
+ response: ChampionObjectiveStatsListResponse,
4410
+ errors: [
4411
+ {
4412
+ status: 400,
4413
+ description: `Validation error.`,
4414
+ schema: z.object({ message: z.string() }).passthrough(),
4415
+ },
4416
+ {
4417
+ status: 500,
4418
+ description: `Internal server error.`,
4419
+ schema: z.object({ message: z.string() }).passthrough(),
4420
+ },
4421
+ ],
4422
+ },
4423
+ {
4424
+ method: "get",
4425
+ path: "/stats/champions/performance",
4426
+ alias: "getChampionPerformanceTableByRegion",
4427
+ description: `Retrieve normalized per-minute performance metrics by champion.
4428
+ All metrics are computed within the requested region only.
4429
+ All rates are returned as decimal values in range [0, 1] where applicable.`,
4430
+ requestFormat: "json",
4431
+ parameters: [
4432
+ {
4433
+ name: "region",
4434
+ type: "Query",
4435
+ schema: z.enum([
4436
+ "br1",
4437
+ "euw1",
4438
+ "na1",
4439
+ "eun1",
4440
+ "kr",
4441
+ "jp1",
4442
+ "la1",
4443
+ "la2",
4444
+ "oc1",
4445
+ "tr1",
4446
+ "ru",
4447
+ "ph2",
4448
+ "sg2",
4449
+ "th2",
4450
+ "tw2",
4451
+ "vn2",
4452
+ ]),
4453
+ },
4454
+ {
4455
+ name: "patch",
4456
+ type: "Query",
4457
+ schema: z.string(),
4458
+ },
4459
+ {
4460
+ name: "tier",
4461
+ type: "Query",
4462
+ schema: z.enum([
4463
+ "IRON",
4464
+ "BRONZE",
4465
+ "SILVER",
4466
+ "GOLD",
4467
+ "PLATINUM",
4468
+ "EMERALD",
4469
+ "DIAMOND",
4470
+ "MASTER",
4471
+ "GRANDMASTER",
4472
+ "CHALLENGER",
4473
+ ]),
4474
+ },
4475
+ {
4476
+ name: "queue",
4477
+ type: "Query",
4478
+ schema: z.union([
4479
+ z.literal(0),
4480
+ z.literal(2),
4481
+ z.literal(4),
4482
+ z.literal(6),
4483
+ z.literal(7),
4484
+ z.literal(8),
4485
+ z.literal(9),
4486
+ z.literal(14),
4487
+ z.literal(16),
4488
+ z.literal(17),
4489
+ z.literal(25),
4490
+ z.literal(31),
4491
+ z.literal(32),
4492
+ z.literal(33),
4493
+ z.literal(41),
4494
+ z.literal(42),
4495
+ z.literal(52),
4496
+ z.literal(61),
4497
+ z.literal(65),
4498
+ z.literal(67),
4499
+ z.literal(70),
4500
+ z.literal(72),
4501
+ z.literal(73),
4502
+ z.literal(75),
4503
+ z.literal(76),
4504
+ z.literal(78),
4505
+ z.literal(83),
4506
+ z.literal(91),
4507
+ z.literal(92),
4508
+ z.literal(93),
4509
+ z.literal(96),
4510
+ z.literal(98),
4511
+ z.literal(100),
4512
+ z.literal(300),
4513
+ z.literal(310),
4514
+ z.literal(313),
4515
+ z.literal(315),
4516
+ z.literal(317),
4517
+ z.literal(318),
4518
+ z.literal(325),
4519
+ z.literal(400),
4520
+ z.literal(410),
4521
+ z.literal(420),
4522
+ z.literal(430),
4523
+ z.literal(440),
4524
+ z.literal(450),
4525
+ z.literal(460),
4526
+ z.literal(470),
4527
+ z.literal(480),
4528
+ z.literal(490),
4529
+ z.literal(600),
4530
+ z.literal(610),
4531
+ z.literal(700),
4532
+ z.literal(720),
4533
+ z.literal(800),
4534
+ z.literal(810),
4535
+ z.literal(820),
4536
+ z.literal(830),
4537
+ z.literal(840),
4538
+ z.literal(850),
4539
+ z.literal(870),
4540
+ z.literal(880),
4541
+ z.literal(890),
4542
+ z.literal(900),
4543
+ z.literal(910),
4544
+ z.literal(920),
4545
+ z.literal(940),
4546
+ z.literal(950),
4547
+ z.literal(960),
4548
+ z.literal(980),
4549
+ z.literal(990),
4550
+ z.literal(1000),
4551
+ z.literal(1010),
4552
+ z.literal(1020),
4553
+ z.literal(1030),
4554
+ z.literal(1040),
4555
+ z.literal(1050),
4556
+ z.literal(1060),
4557
+ z.literal(1070),
4558
+ z.literal(1090),
4559
+ z.literal(1100),
4560
+ z.literal(1110),
4561
+ z.literal(1111),
4562
+ z.literal(1200),
4563
+ z.literal(1210),
4564
+ z.literal(1300),
4565
+ z.literal(1400),
4566
+ z.literal(1700),
4567
+ z.literal(1710),
4568
+ z.literal(1810),
4569
+ z.literal(1820),
4570
+ z.literal(1830),
4571
+ z.literal(1840),
4572
+ z.literal(1900),
4573
+ z.literal(2000),
4574
+ z.literal(2010),
4575
+ z.literal(2020),
4576
+ z.literal(2300),
4577
+ z.literal(2400),
4578
+ ]),
4579
+ },
4580
+ ],
4581
+ response: ChampionPerformanceStatsListResponse,
4582
+ errors: [
4583
+ {
4584
+ status: 400,
4585
+ description: `Validation error.`,
4586
+ schema: z.object({ message: z.string() }).passthrough(),
4587
+ },
4588
+ {
4589
+ status: 500,
4590
+ description: `Internal server error.`,
4591
+ schema: z.object({ message: z.string() }).passthrough(),
4592
+ },
4593
+ ],
4594
+ },
2067
4595
  ]);
2068
4596
 
2069
4597
  export const api = new Zodios(endpoints);