mirror of
https://github.com/daydreamer-json/ak-endfield-api-archive.git
synced 2026-03-23 15:52:28 +01:00
feat: add china region game package archives
This commit is contained in:
@@ -14,10 +14,15 @@ export default {
|
||||
subChannel: number,
|
||||
launcherSubChannel: number,
|
||||
version: string | null,
|
||||
region: 'os' | 'cn',
|
||||
): Promise<TypesApiAkEndfield.LauncherLatestGame> => {
|
||||
if (version !== null && !semver.valid(version)) throw new Error(`Invalid version string (${version})`);
|
||||
const apiBase =
|
||||
region === 'cn'
|
||||
? appConfig.network.api.akEndfield.base.launcherCN
|
||||
: appConfig.network.api.akEndfield.base.launcher;
|
||||
const rsp = await ky
|
||||
.get(`https://${appConfig.network.api.akEndfield.base.launcher}/game/get_latest`, {
|
||||
.get(`https://${apiBase}/game/get_latest`, {
|
||||
...defaultSettings.ky,
|
||||
searchParams: {
|
||||
appcode: appCode,
|
||||
@@ -37,10 +42,15 @@ export default {
|
||||
version: string,
|
||||
randStr: string,
|
||||
platform: 'Windows' | 'Android' | 'iOS' | 'PlayStation',
|
||||
region: 'os' | 'cn',
|
||||
): Promise<TypesApiAkEndfield.LauncherLatestGameResources> => {
|
||||
if (!semver.valid(version)) throw new Error(`Invalid version string (${version})`);
|
||||
const apiBase =
|
||||
region === 'cn'
|
||||
? appConfig.network.api.akEndfield.base.launcherCN
|
||||
: appConfig.network.api.akEndfield.base.launcher;
|
||||
const rsp = await ky
|
||||
.get(`https://${appConfig.network.api.akEndfield.base.launcher}/game/get_latest_resources`, {
|
||||
.get(`https://${apiBase}/game/get_latest_resources`, {
|
||||
...defaultSettings.ky,
|
||||
searchParams: {
|
||||
appcode: appCode,
|
||||
@@ -62,12 +72,12 @@ export default {
|
||||
region: 'os' | 'cn',
|
||||
): Promise<TypesApiAkEndfield.LauncherLatestLauncher> => {
|
||||
if (version !== null && !semver.valid(version)) throw new Error(`Invalid version string (${version})`);
|
||||
const domain =
|
||||
const apiBase =
|
||||
region === 'cn'
|
||||
? appConfig.network.api.akEndfield.base.launcherCN
|
||||
: appConfig.network.api.akEndfield.base.launcher;
|
||||
const rsp = await ky
|
||||
.get(`https://${domain}/launcher/get_latest`, {
|
||||
.get(`https://${apiBase}/launcher/get_latest`, {
|
||||
...defaultSettings.ky,
|
||||
searchParams: {
|
||||
appcode: appCode,
|
||||
@@ -89,12 +99,12 @@ export default {
|
||||
region: 'os' | 'cn',
|
||||
): Promise<TypesApiAkEndfield.LauncherLatestLauncherExe> => {
|
||||
if (version !== null && !semver.valid(version)) throw new Error(`Invalid version string (${version})`);
|
||||
const domain =
|
||||
const apiBase =
|
||||
region === 'cn'
|
||||
? appConfig.network.api.akEndfield.base.launcherCN
|
||||
: appConfig.network.api.akEndfield.base.launcher;
|
||||
const rsp = await ky
|
||||
.get(`https://${domain}/launcher/get_latest_launcher`, {
|
||||
.get(`https://${apiBase}/launcher/get_latest_launcher`, {
|
||||
...defaultSettings.ky,
|
||||
searchParams: {
|
||||
appcode: appCode,
|
||||
|
||||
37
src/utils/github.ts
Normal file
37
src/utils/github.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { Octokit } from '@octokit/rest';
|
||||
import ky from 'ky';
|
||||
import appConfig from './config.js';
|
||||
import logger from './logger.js';
|
||||
|
||||
async function uploadAsset(
|
||||
client: Octokit | null,
|
||||
authCfg: { token: string; owner: string; repo: string; tag: string } | null,
|
||||
url: string,
|
||||
targetFileName: string | null,
|
||||
) {
|
||||
if (!client || !authCfg) return;
|
||||
const { data: release } = await client.rest.repos.getReleaseByTag({
|
||||
owner: authCfg.owner,
|
||||
repo: authCfg.repo,
|
||||
tag: authCfg.tag,
|
||||
});
|
||||
const releaseId = release.id;
|
||||
|
||||
logger.info(`Mirror archive: Downloading ${new URL(url).pathname.split('/').pop()} ...`);
|
||||
const name = targetFileName ?? new URL(url).pathname.split('/').pop() ?? '';
|
||||
const bin: Uint8Array = await ky.get(url, { headers: { 'User-Agent': appConfig.network.userAgent.minimum } }).bytes();
|
||||
const binSize: number = bin.byteLength;
|
||||
logger.info(`Mirror archive: Uploading ${new URL(url).pathname.split('/').pop()} ...`);
|
||||
await client.rest.repos.uploadReleaseAsset({
|
||||
owner: authCfg.owner,
|
||||
repo: authCfg.repo,
|
||||
release_id: releaseId,
|
||||
name,
|
||||
data: bin as any,
|
||||
headers: { 'content-length': binSize },
|
||||
});
|
||||
}
|
||||
|
||||
export default {
|
||||
uploadAsset,
|
||||
};
|
||||
@@ -66,6 +66,12 @@ function getBaseUrlWithoutLastSegment(url: string): string {
|
||||
return `${u.origin}${dirPath}`;
|
||||
}
|
||||
|
||||
function removeQueryStr(url: string): string {
|
||||
const urlObj = new URL(url);
|
||||
urlObj.search = '';
|
||||
return urlObj.toString();
|
||||
}
|
||||
|
||||
// ==============================
|
||||
|
||||
function replaceMultiPatterns(replacements: [RegExp, string][], originalString: string): string {
|
||||
@@ -144,6 +150,7 @@ export default {
|
||||
resolveUrl,
|
||||
isAbsoluteUrl,
|
||||
getBaseUrlWithoutLastSegment,
|
||||
removeQueryStr,
|
||||
replaceMultiPatterns,
|
||||
sanitizeFilename,
|
||||
filterByRegex,
|
||||
|
||||
Reference in New Issue
Block a user