UNPKG

genshin-manager

Version:

<div align="center"> <p> <a href="https://www.npmjs.com/package/genshin-manager"><img src="https://img.shields.io/npm/v/genshin-manager.svg?maxAge=3600" alt="npm version" /></a> <a href="https://www.npmjs.com/package/genshin-manager"><img src="https:

202 lines (201 loc) 6.98 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Client = exports.ClientEvents = void 0; const node_cron_1 = __importDefault(require("node-cron")); const path_1 = __importDefault(require("path")); const ts_deepmerge_1 = require("ts-deepmerge"); const AssetCacheManager_1 = require("../client/AssetCacheManager"); const AudioAssets_1 = require("../models/assets/AudioAssets"); const ImageAssets_1 = require("../models/assets/ImageAssets"); /** * Client events * @see {@link Client} */ var ClientEvents; (function (ClientEvents) { /** * When the cache update starts, fires * @event BEGIN_UPDATE_CACHE * @listener * | param | type | description | * | --- | --- | --- | * | version | string | Game version of assets to cache | */ ClientEvents["BEGIN_UPDATE_CACHE"] = "BEGIN_UPDATE_CACHE"; /** * When the cache update ends, fires * @event END_UPDATE_CACHE * @listener * | param | type | description | * | --- | --- | --- | * | version | string | Game version of assets to cache | */ ClientEvents["END_UPDATE_CACHE"] = "END_UPDATE_CACHE"; /** * When the assets update starts, fires * @event BEGIN_UPDATE_ASSETS * @listener * | param | type | description | * | --- | --- | --- | * | version | string | Game version of new assets | */ ClientEvents["BEGIN_UPDATE_ASSETS"] = "BEGIN_UPDATE_ASSETS"; /** * When the assets update ends, fires * @event END_UPDATE_ASSETS * @listener * | param | type | description | * | --- | --- | --- | * | version | string | Game version of new assets | */ ClientEvents["END_UPDATE_ASSETS"] = "END_UPDATE_ASSETS"; })(ClientEvents || (exports.ClientEvents = ClientEvents = {})); /** * Class of the client * @description This is the main body of `Genshin-Manager` where cache information is stored */ class Client extends AssetCacheManager_1.AssetCacheManager { /** * Create a Client * @param option Client option */ constructor(option) { const mergeOption = ts_deepmerge_1.merge.withOptions({ mergeArrays: false }, Client.defaultOption, option !== null && option !== void 0 ? option : {}); mergeOption.downloadLanguages = [ ...new Set([ mergeOption.defaultLanguage, ...mergeOption.downloadLanguages, ]), ]; if (!mergeOption.autoFetchLatestAssetsByCron) { mergeOption.autoFixTextMap = false; mergeOption.autoFixExcelBin = false; } Object.values(ClientEvents).forEach((event) => { Client._assetEventEmitter.on(event, (version) => { this.emit(event, version); }); }); super(mergeOption); this.option = mergeOption; } /** * Cached game version * @returns Cached game version * @example `5.1.0` */ get gameVersion() { return AssetCacheManager_1.AssetCacheManager.gameVersion; } /** * Change cached languages * @param language Country code * @example * ```ts * const client = new Client() * await client.deploy() * await client.changeLanguage('JP') * ``` */ changeLanguage(language) { return __awaiter(this, void 0, void 0, function* () { if (yield Client.setTextMapToCache(language)) { this.option.autoFixTextMap = false; yield Client.setTextMapToCache(language); this.option.autoFixTextMap = true; } }); } /** * Deploy assets to cache & Update assets * @example * ```ts * const client = new Client() * await client.deploy() * ``` */ deploy() { return __awaiter(this, void 0, void 0, function* () { yield Client.updateCache(); if (this.option.autoFetchLatestAssetsByCron) { node_cron_1.default.schedule(this.option.autoFetchLatestAssetsByCron, () => { void (() => __awaiter(this, void 0, void 0, function* () { yield Client.updateCache(); }))(); }); } yield Promise.all([ ImageAssets_1.ImageAssets.deploy(this.option), AudioAssets_1.AudioAssets.deploy(this.option), ]); }); } } exports.Client = Client; /** * Default option */ Client.defaultOption = { fetchOption: { headers: { 'user-agent': `genshin-manager@${process.env.npm_package_version}`, }, }, downloadLanguages: [ 'EN', 'RU', 'VI', 'TH', 'PT', 'KR', 'JP', 'ID', 'FR', 'ES', 'DE', 'CHT', 'CHS', ], defaultImageBaseURL: 'https://gi.yatta.top/assets/UI', defaultAudioBaseURL: 'https://gi.yatta.top/assets/Audio', imageBaseURLByRegex: { 'https://enka.network/ui': [ /^UI_(AvatarIcon_Side|Costume)_/, /^UI_AvatarIcon_(.+)_Card$/, /^UI_AvatarIcon_(.+)_Circle/, /^UI_NameCardPic_(.+)_Alpha/, /^UI_EquipIcon_(.+)_Awaken/, ], 'https://res.cloudinary.com/genshin/image/upload/sprites': [ /^Eff_UI_Talent_/, /^UI_(TowerPic|TowerBlessing|GcgIcon|Gcg_Cardtable|Gcg_CardBack)_/, ], 'https://gi.yatta.top/assets/UI/monster': [ /^UI_(MonsterIcon|AnimalIcon)_/, ], 'https://gi.yatta.top/assets/UI/gcg': [/^UI_Gcg_CardFace_/], 'https://gi.yatta.top/assets/UI/reliquary': [/^UI_RelicIcon_/], 'https://gi.yatta.top/assets/UI/namecard': [/^UI_NameCard/], }, audioBaseURLByRegex: {}, defaultLanguage: 'EN', showFetchCacheLog: true, autoFetchLatestAssetsByCron: '0 0 0 * * 3', //Every Wednesday 00:00:00 autoCacheImage: true, autoCacheAudio: true, autoFixTextMap: true, autoFixExcelBin: true, assetCacheFolderPath: path_1.default.resolve(__dirname, '..', '..', 'cache'), };