fix: port to core 1

This commit is contained in:
TrèsAbhi committed 2024-09-08 10:24:48 -05:00
1 parent fd2e2f9c7b
commit 5e989a16bc
24 files changed
+24 -14

No files matched your search

+5
View File
@@ -0,0 +1,5 @@
import { ShellDefinition, ShellType } from '@blitzkit/core';
export function canSplash(type: ShellDefinition['type']): type is ShellType.HE {
return type === ShellType.HE;
}
@@ -1,5 +1,5 @@
import { fetchBlitz, Region } from '@blitzkit/core';
import { normalizeIds } from '../../../website/src/core/blitz/normalizeIds';
import { normalizeIds } from './normalizeIds';
interface IndividualAccountAchievements {
achievements: {
+1 -1
View File
@@ -4,7 +4,7 @@ import {
Region,
fetchBlitz,
} from '@blitzkit/core';
import { normalizeIds } from '../../../website/src/core/blitz/normalizeIds';
import { normalizeIds } from './normalizeIds';
export interface SupplementaryStats {
WN8?: number;
@@ -1,5 +1,5 @@
import { fetchBlitz, Region } from '@blitzkit/core';
import { normalizeIds } from '../../../website/src/core/blitz/normalizeIds';
import { normalizeIds } from './normalizeIds';
type IndividualClanAccountInfo = {
account_id: number;
+1 -1
View File
@@ -1,5 +1,5 @@
import { fetchBlitz, Region } from '@blitzkit/core';
import { normalizeIds } from '../../../website/src/core/blitz/normalizeIds';
import { normalizeIds } from './normalizeIds';
interface IndividualClanInfo {
recruiting_options: {
+2 -2
View File
@@ -1,7 +1,7 @@
import { RatingInfo, Region } from '@blitzkit/core';
import { regionToRegionSubdomain } from '../../../website/src/core/blitz/regionToRegionSubdomain';
import { context } from '../../../website/src/core/blitzkit/context';
import { patientFetch } from '../../../website/src/core/blitzkit/patientFetch';
import { context } from '../blitzkit/context';
import { regionToRegionSubdomain } from './regionToRegionSubdomain';
const cache: Partial<Record<Region, RatingInfo>> = {};
+2 -2
View File
@@ -1,7 +1,7 @@
import { LeagueTop, RatingPlayer, Region } from '@blitzkit/core';
import { regionToRegionSubdomain } from '../../../website/src/core/blitz/regionToRegionSubdomain';
import { context } from '../../../website/src/core/blitzkit/context';
import { patientFetch } from '../../../website/src/core/blitzkit/patientFetch';
import { context } from '../blitzkit/context';
import { regionToRegionSubdomain } from './regionToRegionSubdomain';
export async function getRatingLeague(
region: Region,
@@ -1,7 +1,7 @@
import { RatingNeighbors, Region } from '@blitzkit/core';
import { regionToRegionSubdomain } from '../../../website/src/core/blitz/regionToRegionSubdomain';
import { patientFetch } from '../../../website/src/core/blitzkit/patientFetch';
import { withCORSProxy } from '../../../website/src/core/blitzkit/withCORSProxy';
import { regionToRegionSubdomain } from './regionToRegionSubdomain';
export async function getRatingNeighbors(
region: Region,
+9
View File
@@ -1,3 +1,4 @@
export * from './canSplash';
export * from './clans';
export * from './constants';
export * from './equipmentPrice';
@@ -13,11 +14,19 @@ export * from './getRatingLeague';
export * from './getRatingNeighbors';
export * from './getTankStats';
export * from './idToRegion';
export * from './isOnGoingRatingSeason';
export * from './isValidBlitzId';
export * from './nations';
export * from './normalizeExtra';
export * from './normalizeIds';
export * from './permanentSkills';
export * from './rating';
export * from './regions';
export * from './regionSubdomainToRegion';
export * from './regionToRegionSubdomain';
export * from './resolveNearPenetration';
export * from './searchClansAcrossRegions';
export * from './searchCurrentRatingPlayers';
export * from './searchPlayersAcrossRegions';
export * from './toUniqueId';
export * from './writeDVPL';
@@ -0,0 +1,6 @@
import { getRatingInfo } from '@blitzkit/core';
export async function isOnGoingRatingSeason() {
const ratingInfo = await getRatingInfo('com');
return ratingInfo.detail === undefined;
}
+30
View File
@@ -0,0 +1,30 @@
import { Region, assertSecret, idToRegion } from '@blitzkit/core';
export async function isValidBlitzId(id: number, token?: string) {
let region: Region;
try {
region = idToRegion(id);
} catch (error) {
return false;
}
const json = await fetch(
`https://api.wotblitz.${region}/wotb/account/info/?account_id=${id}&application_id=${assertSecret(
process.env.NEXT_PUBLIC_WARGAMING_APPLICATION_ID,
)}${
token === undefined ? '' : `&access_token=${token}`
}&fields=account_id%2C-account_id`,
).then(
(response) =>
response.json() as Promise<
| {
status: 'ok';
data: Record<number, {} | null>;
}
| { status: 'error' }
>,
);
return json.status === 'ok' && json.data[id] !== null;
}
@@ -0,0 +1,3 @@
export function normalizeExtra(extra?: string[]) {
return extra ? `&extra=${extra.join(',')}` : '';
}
+3
View File
@@ -0,0 +1,3 @@
export function normalizeIds(ids: number | number[]): string {
return typeof ids === 'number' ? ids.toString() : ids.join(',');
}
@@ -0,0 +1,5 @@
import { Region, RegionSubdomain } from '@blitzkit/core';
export function regionToRegionSubdomain(regionDomain: Region): RegionSubdomain {
return regionDomain === 'com' ? 'na' : regionDomain;
}
@@ -0,0 +1,40 @@
import { Region } from '@blitzkit/core';
import { context } from '../blitzkit/context';
import { regionToRegionSubdomain } from './regionToRegionSubdomain';
type CurrentRatingPlayerSearch = 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 searchCurrentRatingPlayers(region: Region, name: string) {
const encodedSearch = encodeURIComponent(name);
const response = await fetch(
context === 'website'
? `/api/${region}/rating/current/search/${encodedSearch}`
: `https://${regionToRegionSubdomain(
region,
)}.wotblitz.com/en/api/rating-leaderboards/search/?prefix=${encodedSearch}`,
{ cache: 'no-store' },
);
const accountList = (await response.json()) as CurrentRatingPlayerSearch;
return accountList;
}
+5
View File
@@ -0,0 +1,5 @@
import { NATION_IDS } from "@blitzkit/core";
export function toUniqueId(nation: string, id: number) {
return (id << 8) + (NATION_IDS[nation] << 4) + 1;
}
+64
View File
@@ -0,0 +1,64 @@
import { crc32 } from 'crc';
import { compressBlock } from 'lz4js';
/**
* Thanks Maddoxkkm! Modernized heavily.
*
* https://github.com/Maddoxkkm/dvpl_converter/
*/
export function writeDVPL(buffer: Buffer) {
const source = new Uint8Array(buffer);
const destination = new Uint8Array(buffer.length);
const compressedBlockSize = compressBlock(
source,
destination,
0,
source.length,
0,
);
let output = Buffer.from(destination);
if (compressedBlockSize === 0 || compressedBlockSize >= buffer.length) {
const footerBuffer = toDVPLFooter(
buffer.length,
buffer.length,
crc32(buffer),
0,
);
return Buffer.concat(
[new Uint8Array(buffer), new Uint8Array(footerBuffer)],
buffer.length + 20,
);
} else {
output = output.subarray(0, compressedBlockSize);
const footerBuffer = toDVPLFooter(
buffer.length,
compressedBlockSize,
crc32(output),
2,
);
return Buffer.concat(
[new Uint8Array(output), new Uint8Array(footerBuffer)],
compressedBlockSize + 20,
);
}
}
function toDVPLFooter(
inputSize: number,
compressedSize: number,
crc32: number,
type: number,
) {
const result = Buffer.alloc(20);
result.writeUInt32LE(inputSize, 0);
result.writeUInt32LE(compressedSize, 4);
result.writeUInt32LE(crc32, 8);
result.writeUInt32LE(type, 12);
result.write('DVPL', 16, 4, 'utf8');
return result;
}