mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-29 05:29:52 +01:00
feat: discover ids
This commit is contained in:
1 parent
93c7392d6e
commit
c943baf6f3
4 files changed
+71
-26
No files matched your search
@@ -0,0 +1,26 @@
|
|||||||
|
name: CD Discover IDs
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: main
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 8 * * *'
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: windows-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: oven-sh/setup-bun@v1
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: bun install
|
||||||
|
|
||||||
|
- name: Discover IDs
|
||||||
|
run: bun scripts/discoverIds.ts
|
||||||
+1
-1
@@ -31,7 +31,7 @@
|
|||||||
"update": "yarn upgrade --latest",
|
"update": "yarn upgrade --latest",
|
||||||
"setup:depotdownloader": "vite-node --script scripts/setupDepotDownloader",
|
"setup:depotdownloader": "vite-node --script scripts/setupDepotDownloader",
|
||||||
"tunnel": "cloudflared tunnel --url http://localhost:3000",
|
"tunnel": "cloudflared tunnel --url http://localhost:3000",
|
||||||
"discoverids": "bun run scripts/discoverIds"
|
"discoverids": "scripts/discoverIds.ts"
|
||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
+40
-25
@@ -1,19 +1,40 @@
|
|||||||
import { times } from 'lodash';
|
import { times } from 'lodash';
|
||||||
import { argv } from 'process';
|
import { argv } from 'process';
|
||||||
import { Region, REGIONS } from '../src/constants/regions';
|
import { Region, REGIONS } from '../src/constants/regions';
|
||||||
|
import { requestLimitExceededEvent } from '../src/core/blitz/fetchBlitz';
|
||||||
import { getAccountInfo } from '../src/core/blitz/getAccountInfo';
|
import { getAccountInfo } from '../src/core/blitz/getAccountInfo';
|
||||||
import { idToRegion, MIN_IDS } from '../src/core/blitz/idToRegion';
|
import { idToRegion, MIN_IDS } from '../src/core/blitz/idToRegion';
|
||||||
import { asset } from '../src/core/blitzkit/asset';
|
import { asset } from '../src/core/blitzkit/asset';
|
||||||
|
import { commitAssets } from '../src/core/blitzkit/commitAssets';
|
||||||
import { DidsReadStream, DidsWriteStream } from '../src/core/streams/dids';
|
import { DidsReadStream, DidsWriteStream } from '../src/core/streams/dids';
|
||||||
|
|
||||||
// const RUN_TIME = 1000 * 60 * 60 * 5;
|
const RUN_TIME = 1000 * 60 * 60 * 5.5;
|
||||||
const RUN_TIME = 1000 * 5;
|
|
||||||
const MAX_REQUESTS = 10;
|
const MAX_REQUESTS = 10;
|
||||||
const ACCOUNTS_PER_CALL = 100;
|
const ACCOUNTS_PER_CALL = 100;
|
||||||
const REMOVE_REGION_THRESHOLD = 10;
|
const REMOVE_REGION_THRESHOLD = 10;
|
||||||
|
|
||||||
const production = argv.includes('--production');
|
const production = argv.includes('--production');
|
||||||
const startTime = Date.now();
|
const startTime = Date.now();
|
||||||
|
const indexableRegions = [...REGIONS];
|
||||||
|
const preDiscoveredRaw = await fetch(
|
||||||
|
asset('averages/discovered.dids.lz4', !production),
|
||||||
|
).then(async (response) => {
|
||||||
|
if (response.status === 200) {
|
||||||
|
const buffer = await response.arrayBuffer();
|
||||||
|
return new DidsReadStream(buffer).dids();
|
||||||
|
}
|
||||||
|
|
||||||
|
return undefined;
|
||||||
|
});
|
||||||
|
const ids: number[] = [...(preDiscoveredRaw ?? [])]; // TODO: re-validate these ids
|
||||||
|
const regionalIdIndex: Record<Region, number> = {
|
||||||
|
asia: ids.find((id) => idToRegion(id) === 'asia') ?? MIN_IDS.asia,
|
||||||
|
com: ids.find((id) => idToRegion(id) === 'com') ?? MIN_IDS.com,
|
||||||
|
eu: ids.find((id) => idToRegion(id) === 'eu') ?? MIN_IDS.eu,
|
||||||
|
};
|
||||||
|
const zeroStreak: Record<Region, number> = { asia: 0, com: 0, eu: 0 };
|
||||||
|
let regionIndex = 0;
|
||||||
|
let outOfTimeFlagged = false;
|
||||||
|
|
||||||
async function verify(region: Region, ids: number[]) {
|
async function verify(region: Region, ids: number[]) {
|
||||||
const infos = await getAccountInfo(region, ids, undefined, {
|
const infos = await getAccountInfo(region, ids, undefined, {
|
||||||
@@ -28,31 +49,14 @@ async function verify(region: Region, ids: number[]) {
|
|||||||
return filtered;
|
return filtered;
|
||||||
}
|
}
|
||||||
|
|
||||||
const indexableRegions = [...REGIONS];
|
let discardAttempts = 0;
|
||||||
const ids: number[] = [];
|
requestLimitExceededEvent.on(() => {
|
||||||
|
discardAttempts++;
|
||||||
const preDiscoveredRaw = await fetch(
|
|
||||||
asset('averages/discovered.dids.lz4', !production),
|
|
||||||
).then(async (response) => {
|
|
||||||
if (response.status === 200) {
|
|
||||||
const buffer = await response.arrayBuffer();
|
|
||||||
return new DidsReadStream(buffer).dids();
|
|
||||||
}
|
|
||||||
|
|
||||||
return undefined;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const regionalIdIndex: Record<Region, number> = {
|
|
||||||
asia:
|
|
||||||
preDiscoveredRaw?.find((id) => idToRegion(id) === 'asia') ?? MIN_IDS.asia,
|
|
||||||
com: preDiscoveredRaw?.find((id) => idToRegion(id) === 'com') ?? MIN_IDS.com,
|
|
||||||
eu: preDiscoveredRaw?.find((id) => idToRegion(id) === 'eu') ?? MIN_IDS.eu,
|
|
||||||
};
|
|
||||||
const zeroStreak: Record<Region, number> = { asia: 0, com: 0, eu: 0 };
|
|
||||||
let regionIndex = 0;
|
|
||||||
let outOfTimeFlagged = false;
|
|
||||||
|
|
||||||
const interval = setInterval(async () => {
|
const interval = setInterval(async () => {
|
||||||
|
if (discardAttempts > 0) return discardAttempts--;
|
||||||
|
|
||||||
const region = indexableRegions[regionIndex];
|
const region = indexableRegions[regionIndex];
|
||||||
const idsToVerify = times(
|
const idsToVerify = times(
|
||||||
ACCOUNTS_PER_CALL,
|
ACCOUNTS_PER_CALL,
|
||||||
@@ -100,6 +104,17 @@ function post() {
|
|||||||
console.log(`Uploading ${ids.length} ids...`);
|
console.log(`Uploading ${ids.length} ids...`);
|
||||||
|
|
||||||
const didsWriteStream = new DidsWriteStream().dids(ids);
|
const didsWriteStream = new DidsWriteStream().dids(ids);
|
||||||
|
const content = Buffer.from(didsWriteStream.uint8Array).toString();
|
||||||
|
|
||||||
console.log(didsWriteStream.uint8Array.length);
|
commitAssets(
|
||||||
|
'discovered ids',
|
||||||
|
[
|
||||||
|
{
|
||||||
|
content,
|
||||||
|
encoding: 'base64',
|
||||||
|
path: 'definitions/ids.dids',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
production,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
import { Region } from '../../constants/regions';
|
import { Region } from '../../constants/regions';
|
||||||
import { WARGAMING_APPLICATION_ID } from '../../constants/wargamingApplicationID';
|
import { WARGAMING_APPLICATION_ID } from '../../constants/wargamingApplicationID';
|
||||||
|
import { EventManager } from '../blitzkit/eventManager';
|
||||||
import { patientFetch } from '../blitzkit/patientFetch';
|
import { patientFetch } from '../blitzkit/patientFetch';
|
||||||
|
|
||||||
|
export const requestLimitExceededEvent = new EventManager();
|
||||||
|
|
||||||
type BlitzResponse<Data extends object> =
|
type BlitzResponse<Data extends object> =
|
||||||
| {
|
| {
|
||||||
status: 'error';
|
status: 'error';
|
||||||
@@ -41,6 +44,7 @@ async function manageQueue() {
|
|||||||
`Rate limit exceeded, putting "${request.url}" back in queue...`,
|
`Rate limit exceeded, putting "${request.url}" back in queue...`,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
requestLimitExceededEvent.emit(undefined);
|
||||||
clearTimeout(timeout);
|
clearTimeout(timeout);
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
queue.push(request);
|
queue.push(request);
|
||||||
|
|||||||
Reference in new issue
Block a user