mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-24 20:19:49 +02:00
feat: proxy APIs
This commit is contained in:
1 parent
7e4f195f94
commit
14bfc3018b
14 files changed
+130
-60
No files matched your search
@@ -0,0 +1,10 @@
|
|||||||
|
import { NextResponse } from 'next/server';
|
||||||
|
import { Region } from '../../../../../../constants/regions';
|
||||||
|
import getRatingsInfo from '../../../../../../core/blitz/getRatingsInfo';
|
||||||
|
|
||||||
|
export async function GET(
|
||||||
|
request: Request,
|
||||||
|
{ params }: { params: { region: Region } },
|
||||||
|
) {
|
||||||
|
return NextResponse.json(await getRatingsInfo(params.region));
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import { NextResponse } from 'next/server';
|
||||||
|
import { Region } from '../../../../../../../constants/regions';
|
||||||
|
import { getRatingsLeague } from '../../../../../../../core/blitz/getRatingsLeague';
|
||||||
|
|
||||||
|
export async function GET(
|
||||||
|
request: Request,
|
||||||
|
{ params }: { params: { region: Region; league: number } },
|
||||||
|
) {
|
||||||
|
return NextResponse.json(
|
||||||
|
await getRatingsLeague(params.region, params.league),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import { NextResponse } from 'next/server';
|
||||||
|
import { Region } from '../../../../../../../../constants/regions';
|
||||||
|
import { getRatingsNeighbors } from '../../../../../../../../core/blitz/getRatingsNeighbors';
|
||||||
|
|
||||||
|
export async function GET(
|
||||||
|
request: Request,
|
||||||
|
{ params }: { params: { region: Region; id: number; count: number } },
|
||||||
|
) {
|
||||||
|
return NextResponse.json(
|
||||||
|
await getRatingsNeighbors(params.region, params.id, params.count),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import { NextResponse } from 'next/server';
|
||||||
|
import { Region } from '../../../../../../../constants/regions';
|
||||||
|
import { searchCurrentRatingsPlayers } from '../../../../../../../core/blitz/searchCurrentRatingsPlayers';
|
||||||
|
|
||||||
|
export async function GET(
|
||||||
|
request: Request,
|
||||||
|
{ params }: { params: { region: Region; username: string } },
|
||||||
|
) {
|
||||||
|
return NextResponse.json(
|
||||||
|
await searchCurrentRatingsPlayers(params.region, params.username),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import { NextResponse } from 'next/server';
|
||||||
|
import { tankAverages } from '../../../core/blitzstars/tankAverages';
|
||||||
|
|
||||||
|
export async function GET() {
|
||||||
|
return NextResponse.json(await tankAverages);
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import { NextResponse } from 'next/server';
|
||||||
|
import { tankopedia } from '../../../core/blitzstars/tankopedia';
|
||||||
|
|
||||||
|
export async function GET() {
|
||||||
|
return NextResponse.json(await tankopedia);
|
||||||
|
}
|
||||||
@@ -28,7 +28,7 @@ import { getClanAccountInfo } from '../../../core/blitz/getClanAccountInfo';
|
|||||||
import getRatingsInfo from '../../../core/blitz/getRatingsInfo';
|
import getRatingsInfo from '../../../core/blitz/getRatingsInfo';
|
||||||
import { getRatingsLeague } from '../../../core/blitz/getRatingsLeague';
|
import { getRatingsLeague } from '../../../core/blitz/getRatingsLeague';
|
||||||
import { getRatingsNeighbors } from '../../../core/blitz/getRatingsNeighbors';
|
import { getRatingsNeighbors } from '../../../core/blitz/getRatingsNeighbors';
|
||||||
import regionToRegionSubdomain from '../../../core/blitz/regionToRegionSubdomain';
|
import { searchCurrentRatingsPlayers } from '../../../core/blitz/searchCurrentRatingsPlayers';
|
||||||
import {
|
import {
|
||||||
AccountList,
|
AccountList,
|
||||||
AccountListItem,
|
AccountListItem,
|
||||||
@@ -36,7 +36,6 @@ import {
|
|||||||
import { getArchivedLatestSeasonNumber } from '../../../core/blitzkrieg/getArchivedLatestSeasonNumber';
|
import { getArchivedLatestSeasonNumber } from '../../../core/blitzkrieg/getArchivedLatestSeasonNumber';
|
||||||
import getArchivedRatingsInfo from '../../../core/blitzkrieg/getArchivedRatingsInfo';
|
import getArchivedRatingsInfo from '../../../core/blitzkrieg/getArchivedRatingsInfo';
|
||||||
import { getArchivedRatingsLeaderboard } from '../../../core/blitzkrieg/getArchivedRatingsLeaderboard';
|
import { getArchivedRatingsLeaderboard } from '../../../core/blitzkrieg/getArchivedRatingsLeaderboard';
|
||||||
import { withCORSProxy } from '../../../core/blitzkrieg/withCORSProxy';
|
|
||||||
import { PageTurner } from './components/PageTurner';
|
import { PageTurner } from './components/PageTurner';
|
||||||
|
|
||||||
const ROWS_OPTIONS = [5, 10, 15, 25, 30];
|
const ROWS_OPTIONS = [5, 10, 15, 25, 30];
|
||||||
@@ -621,35 +620,11 @@ export default function Page() {
|
|||||||
if (season === 0) {
|
if (season === 0) {
|
||||||
setSearchLoading(true);
|
setSearchLoading(true);
|
||||||
|
|
||||||
const response = await fetch(
|
|
||||||
withCORSProxy(
|
|
||||||
`https://${regionToRegionSubdomain(
|
|
||||||
region,
|
|
||||||
)}.wotblitz.com/en/api/rating-leaderboards/search/?prefix=${encodedSearch}`,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
const accountList =
|
const accountList =
|
||||||
(await response.json()) as Record<
|
await searchCurrentRatingsPlayers(
|
||||||
number,
|
region,
|
||||||
{
|
trimmedSearch,
|
||||||
spa_id: number;
|
);
|
||||||
nickname: string;
|
|
||||||
clan_tag: string;
|
|
||||||
} & (
|
|
||||||
| {
|
|
||||||
skip: true;
|
|
||||||
}
|
|
||||||
| {
|
|
||||||
skip: false;
|
|
||||||
mmr: number;
|
|
||||||
season_number: number;
|
|
||||||
calibrationBattlesLeft: number;
|
|
||||||
number: number;
|
|
||||||
updated_at: string;
|
|
||||||
neighbors: [];
|
|
||||||
}
|
|
||||||
)
|
|
||||||
>;
|
|
||||||
const values = Object.values(accountList).filter(
|
const values = Object.values(accountList).filter(
|
||||||
(searchedPlayer) => !searchedPlayer.skip,
|
(searchedPlayer) => !searchedPlayer.skip,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
import { RatingsInfo } from '../../commands/ratings';
|
import { RatingsInfo } from '../../commands/ratings';
|
||||||
import { Region } from '../../constants/regions';
|
import { Region } from '../../constants/regions';
|
||||||
import { withCORSProxy } from '../blitzkrieg/withCORSProxy';
|
import { context } from '../blitzkrieg/context';
|
||||||
import regionToRegionSubdomain from './regionToRegionSubdomain';
|
import regionToRegionSubdomain from './regionToRegionSubdomain';
|
||||||
|
|
||||||
export default async function getRatingsInfo(region: Region) {
|
export default async function getRatingsInfo(region: Region) {
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
withCORSProxy(
|
context === 'website'
|
||||||
`https://${regionToRegionSubdomain(
|
? `/api/${region}/ratings/current/info`
|
||||||
region,
|
: `https://${regionToRegionSubdomain(
|
||||||
)}.wotblitz.com/en/api/rating-leaderboards/season/`,
|
region,
|
||||||
),
|
)}.wotblitz.com/en/api/rating-leaderboards/season/`,
|
||||||
);
|
);
|
||||||
|
|
||||||
return (await response.json()) as Promise<RatingsInfo>;
|
return (await response.json()) as Promise<RatingsInfo>;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { LeagueTop } from '../../commands/ratings';
|
import { LeagueTop } from '../../commands/ratings';
|
||||||
import { Region } from '../../constants/regions';
|
import { Region } from '../../constants/regions';
|
||||||
|
import { context } from '../blitzkrieg/context';
|
||||||
import { patientFetch } from '../blitzkrieg/patientFetch';
|
import { patientFetch } from '../blitzkrieg/patientFetch';
|
||||||
import { withCORSProxy } from '../blitzkrieg/withCORSProxy';
|
|
||||||
import regionToRegionSubdomain from './regionToRegionSubdomain';
|
import regionToRegionSubdomain from './regionToRegionSubdomain';
|
||||||
|
|
||||||
export async function getRatingsLeague(
|
export async function getRatingsLeague(
|
||||||
@@ -11,11 +11,11 @@ export async function getRatingsLeague(
|
|||||||
) {
|
) {
|
||||||
const fetcher = usePatientFetcher ? patientFetch : fetch;
|
const fetcher = usePatientFetcher ? patientFetch : fetch;
|
||||||
const response = await fetcher(
|
const response = await fetcher(
|
||||||
withCORSProxy(
|
context === 'website'
|
||||||
`https://${regionToRegionSubdomain(
|
? `/api/${region}/ratings/current/league/${league}`
|
||||||
region,
|
: `https://${regionToRegionSubdomain(
|
||||||
)}.wotblitz.com/en/api/rating-leaderboards/league/${league}/top/`,
|
region,
|
||||||
),
|
)}.wotblitz.com/en/api/rating-leaderboards/league/${league}/top/`,
|
||||||
);
|
);
|
||||||
const json = (await response.json()) as LeagueTop;
|
const json = (await response.json()) as LeagueTop;
|
||||||
|
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
import { RatingsNeighbors } from '../../commands/ratings';
|
import { RatingsNeighbors } from '../../commands/ratings';
|
||||||
import { Region } from '../../constants/regions';
|
import { Region } from '../../constants/regions';
|
||||||
|
import { context } from '../blitzkrieg/context';
|
||||||
import { patientFetch } from '../blitzkrieg/patientFetch';
|
import { patientFetch } from '../blitzkrieg/patientFetch';
|
||||||
import { withCORSProxy } from '../blitzkrieg/withCORSProxy';
|
|
||||||
import regionToRegionSubdomain from './regionToRegionSubdomain';
|
import regionToRegionSubdomain from './regionToRegionSubdomain';
|
||||||
|
|
||||||
export async function getRatingsNeighbors(
|
export async function getRatingsNeighbors(
|
||||||
region: Region,
|
region: Region,
|
||||||
id: number,
|
id: number,
|
||||||
count = 30,
|
count: number,
|
||||||
usePatientFetcher = false,
|
usePatientFetcher = false,
|
||||||
) {
|
) {
|
||||||
const fetcher = usePatientFetcher ? patientFetch : fetch;
|
const fetcher = usePatientFetcher ? patientFetch : fetch;
|
||||||
const response = await fetcher(
|
const response = await fetcher(
|
||||||
withCORSProxy(
|
context === 'website'
|
||||||
`https://${regionToRegionSubdomain(
|
? `/api/${region}/ratings/current/neighbors/${id}/${count}`
|
||||||
region,
|
: `https://${regionToRegionSubdomain(
|
||||||
)}.wotblitz.com/en/api/rating-leaderboards/user/${id}/?neighbors=${count}`,
|
region,
|
||||||
),
|
)}.wotblitz.com/en/api/rating-leaderboards/user/${id}/?neighbors=${count}`,
|
||||||
);
|
);
|
||||||
const json = (await response.json()) as RatingsNeighbors;
|
const json = (await response.json()) as RatingsNeighbors;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
import { Region } from '../../constants/regions';
|
||||||
|
import { context } from '../blitzkrieg/context';
|
||||||
|
import regionToRegionSubdomain from './regionToRegionSubdomain';
|
||||||
|
|
||||||
|
type CurrentRatingsPlayerSearch = Record<
|
||||||
|
number,
|
||||||
|
{
|
||||||
|
spa_id: number;
|
||||||
|
nickname: string;
|
||||||
|
clan_tag: string;
|
||||||
|
} & (
|
||||||
|
| {
|
||||||
|
skip: true;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
skip: false;
|
||||||
|
mmr: number;
|
||||||
|
season_number: number;
|
||||||
|
calibrationBattlesLeft: number;
|
||||||
|
number: number;
|
||||||
|
updated_at: string;
|
||||||
|
neighbors: [];
|
||||||
|
}
|
||||||
|
)
|
||||||
|
>;
|
||||||
|
|
||||||
|
export async function searchCurrentRatingsPlayers(
|
||||||
|
region: Region,
|
||||||
|
name: string,
|
||||||
|
) {
|
||||||
|
const encodedSearch = encodeURIComponent(name);
|
||||||
|
const response = await fetch(
|
||||||
|
context === 'website'
|
||||||
|
? `/api/${region}/ratings/current/search/${encodedSearch}`
|
||||||
|
: `https://${regionToRegionSubdomain(
|
||||||
|
region,
|
||||||
|
)}.wotblitz.com/en/api/rating-leaderboards/search/?prefix=${encodedSearch}`,
|
||||||
|
);
|
||||||
|
const accountList = (await response.json()) as CurrentRatingsPlayerSearch;
|
||||||
|
|
||||||
|
return accountList;
|
||||||
|
}
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
import { context } from './context';
|
|
||||||
|
|
||||||
export function withCORSProxy(url: string) {
|
|
||||||
return context === 'website'
|
|
||||||
? `https://corsproxy.io/?${encodeURIComponent(url)}`
|
|
||||||
: url;
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
import { AllStats } from '../blitz/getAccountInfo';
|
import { AllStats } from '../blitz/getAccountInfo';
|
||||||
import { context } from '../blitzkrieg/context';
|
import { context } from '../blitzkrieg/context';
|
||||||
import { withCORSProxy } from '../blitzkrieg/withCORSProxy';
|
|
||||||
import { tankopedia } from './tankopedia';
|
import { tankopedia } from './tankopedia';
|
||||||
|
|
||||||
export interface SpecialStats {
|
export interface SpecialStats {
|
||||||
@@ -86,7 +85,9 @@ tankopedia;
|
|||||||
export type TankAverages = Record<number, IndividualTankAverage>;
|
export type TankAverages = Record<number, IndividualTankAverage>;
|
||||||
|
|
||||||
export const tankAverages = fetch(
|
export const tankAverages = fetch(
|
||||||
withCORSProxy('https://www.blitzstars.com/api/tankaverages.json'),
|
context === 'website'
|
||||||
|
? '/api/tank-averages'
|
||||||
|
: 'https://www.blitzstars.com/api/tankaverages.json',
|
||||||
)
|
)
|
||||||
.then((response) => response.json())
|
.then((response) => response.json())
|
||||||
.then((json) => {
|
.then((json) => {
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { deburr } from 'lodash';
|
import { deburr } from 'lodash';
|
||||||
import { context } from '../blitzkrieg/context';
|
import { context } from '../blitzkrieg/context';
|
||||||
import { withCORSProxy } from '../blitzkrieg/withCORSProxy';
|
|
||||||
|
|
||||||
export interface TankopediaEntry {
|
export interface TankopediaEntry {
|
||||||
name: string;
|
name: string;
|
||||||
@@ -19,7 +18,9 @@ export interface Tankopedia {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const tankopedia = fetch(
|
export const tankopedia = fetch(
|
||||||
withCORSProxy('https://www.blitzstars.com/bs-tankopedia.json'),
|
context === 'website'
|
||||||
|
? '/api/tankopedia'
|
||||||
|
: 'https://www.blitzstars.com/bs-tankopedia.json',
|
||||||
)
|
)
|
||||||
.then(async (response) => response.json())
|
.then(async (response) => response.json())
|
||||||
.then((wrapperTankopedia) =>
|
.then((wrapperTankopedia) =>
|
||||||
|
|||||||
Reference in new issue
Block a user