hashinami-cli
Version:
Cli based sakamichi apps downloader.
275 lines (269 loc) • 12.9 kB
JavaScript
/**
* @module RequestEndpoint
* @description Generate url and path related.
*
* Available classes and namespace:
* - {@link AppsList} - Contains available apps and assets.
* - {@link RequestEndpoint} - Generate url server and path local.
*
* @author hashinami46
*/
import path from "path";
import { MainConfig, logging, i18next } from "../MainConfig.js";
/**
* @namespace AppsLists
* Object that store list of apps.
* @property {Array<string>} messagesList - Contains list of available message apps.
* @property {Array<string>} gamesList - Contains list of available game apps.
* @property {Array<string>} commonImageList - Contains list of available image assets that can be downloaded.
* @property {Array<string>} commonVideoList - Contains list of available video assets that can be downloaded.
* @property {Array<string>} commonUnityList - Contains list of available unity assets that can be downloaded.
* @property {Array<string>} commonUsmList - Contains list of available usm assets that can be downloaded.
* @property {Array<string>} commonCpkList - Contains list of available cpk assets that can be downloaded.
* @property {Array<string>} commonConfigList - Contains list of available config assets that can be downloaded.
* @property {Array<string>} commonCatalogList - Contains list of available catalog assets that can be downloaded.
* @constant
*/
const AppsLists = {
messagesList: [
"nogitalk",
"sakutalk",
"hinatalk",
"asukatalk",
"mizukitalk",
"maiyantalk",
"centforcetalk",
"yodeltalk",
],
gamesList: [
"nogifes",
"nogikoi",
"hinakoi",
"sakukoi",
//"itsunogi",
//"nogifra",
"unison"
],
commonImageList: [
"nogifes_photo_common",
"nogifes_movie_card_th",
"nogifes_bonus_campaign",
"nogikoi_card_png",
"nogikoi_card_png_bg",
"nogikoi_card_jpg",
"nogikoi_sprites"
],
commonVideoList: [
"sakukoi_movie",
"hinakoi_movie",
"unison_chara_movie",
"unison_card_movie",
"unison_event_reward_movie"
],
commonUnityList: [
"nogifes_card",
"itsunogi_sprites",
"itsunogi_card",
"itsunogi_photo",
//"itsunogi_sound",
"sakukoi_card",
"hinakoi_card",
"nogifra_images",
"unison_scene_card",
"unison_gacha_stamp",
],
commonUsmList: [
"nogifes_movie_card",
"nogifes_reward_movie",
"nogifra_movies"
],
commonCpkList: [
"nogifes_focus_data",
"nogifes_focus_data_high",
"unison_appeal_movie",
"unison_chara_profile",
"unison_exf_member_movie",
"unison_fav_rank_cheer",
"unison_fav_rank_movie",
"unison_gacha_effect_chara",
"unison_gacha_effect_pickup",
"unison_gacha_movie",
"unison_sign_movie",
"unison_live_movie",
"unison_making_movie",
"unison_smart_movie",
"unison_movie_photo",
"unison_drama_bgm",
"unison_event_bgm",
//"unison_voice",
"nogifra_sounds"
],
commonConfigList: [
...["nogitalk",
"sakutalk",
"hinatalk",
"asukatalk",
"mizukitalk",
"maiyantalk",
"centforcetalk",
"yodeltalk"]
.map(app => [
`${app}_update_token`,
/*`${app}_devices`,*/
`${app}_groups`,
`${app}_members`,
`${app}_tags`,
`${app}_announcements`])
.flat(),
...["nogitalk", "sakutalk", "hinatalk"].map(app => [`${app}_blogs`]).flat(),
],
commonCatalogList: [
"sakukoi_catalog",
"hinakoi_catalog",
"unison_catalog"
],
};
/**
* Class to generate url and path related.
* @class RequestEndpoint
*/
class RequestEndpoint {
/**
* @constructor
* @param {string} appname - Which appname you want to get the url and path.
* @param {string} assetname - Which app asset you want to get the url and path.
*/
constructor (appname, assetname = "") {
this.appname = appname;
this.assetname = `${appname}_${assetname}`;
};
/**
* Get base url server or local path storage of the specified app.
* @typedef BaseServerLocal
* @property {string} baseServer - Server Url.
* @property {string} baseLocal - Local path.
* @return {Promise<BaseServerLocal>}
*/
async basenameServerLocal() {
if (![...AppsLists.messagesList, ...AppsLists.gamesList].includes(this.appname)) {
logging.error(i18next.t("parameters.appname.notfound", { name: this.appname }));
console.error(i18next.t("parameters.appname.notfound", { name: this.appname }));
return
};
return this.appname === "nogifes"
? { baseServer: "https://v1static.nogifes.jp", baseLocal: path.join(MainConfig.saveDir, "/Nogifes") }
/*
: this.appname === "nogifes_1"
? { baseServer: "https://v1static.nogifes.jp", baseLocal: path.join(MainConfig.saveDir, "/Nogifes") }
: this.appname === "nogifes_2"
? { baseServer: "https://v2static.nogifes.jp", baseLocal: path.join(MainConfig.saveDir, "/Nogifes") }
*/
: this.appname === "nogikoi"
? { baseServer: "https://prd-content.static.game.nogikoi.jp", baseLocal: path.join(MainConfig.saveDir, "/Nogikoi") }
/*
: this.appname === "nogikoi_1"
? { baseServer: "https://prd-content.static.game.nogikoi.jp", baseLocal: path.join(MainConfig.saveDir, "/Nogikoi") }
: this.appname === "nogikoi_2"
? { baseServer: "https://prd-content-gree.static.game.nogikoi.jp", baseLocal: path.join(MainConfig.saveDir, "/Nogikoi") }
*/
: this.appname === "hinakoi"
? { baseServer: "https://prd-content.static.game.hinakoi.jp", baseLocal: path.join(MainConfig.saveDir, "/Hinakoi") }
: this.appname === "sakukoi"
? { baseServer: "https://prod-content.static.game.sakukoi.jp", baseLocal: path.join(MainConfig.saveDir, "/Sakukoi") }
: this.appname === "itsunogi"
? { baseServer: "https://res.nogizaka46-always.emtg.jp", baseLocal: path.join(MainConfig.saveDir, "/Itsunogi") }
: this.appname === "nogitalk"
? { baseServer: "https://api.n46.glastonr.net", baseLocal: path.join(MainConfig.saveDir, "/Mobame/nogizaka46") }
: this.appname === "sakutalk"
? { baseServer: "https://api.s46.glastonr.net", baseLocal: path.join(MainConfig.saveDir, "/Mobame/sakurazaka46") }
: this.appname === "hinatalk"
? { baseServer: "https://api.kh.glastonr.net", baseLocal: path.join(MainConfig.saveDir, "/Mobame/hinatazaka46") }
: this.appname === "asukatalk"
? { baseServer: "https://api.asukasaito.glastonr.net", baseLocal: path.join(MainConfig.saveDir, "/Mobame/saitoasuka") }
: this.appname === "mizukitalk"
? { baseServer: "https://api.mizukiyamashita.glastonr.net", baseLocal: path.join(MainConfig.saveDir, "/Mobame/yamashitamizuki") }
: this.appname === "maiyantalk"
? { baseServer: "https://api.maishiraishi.glastonr.net", baseLocal: path.join(MainConfig.saveDir, "/Mobame/shiraishimai") }
: this.appname === "centforcetalk"
? { baseServer: "https://api.cf.glastonr.net", baseLocal: path.join(MainConfig.saveDir, "/Mobame/centforcetalk") }
: this.appname === "yodeltalk"
? { baseServer: "https://api.ydl.glastonr.net", baseLocal: path.join(MainConfig.saveDir, "/Mobame/yodeltalk") }
: this.appname === "nogifra"
? { baseServer: path.join(MainConfig.tempDir, "/Nogifra"), baseLocal: path.join(MainConfig.saveDir, "/Nogifra") }
: this.appname === "unison"
? { baseServer: "https://cdn-assets.unis-on-air.com", baseLocal: path.join(MainConfig.saveDir, "/Unison") }
: { baseServer: undefined, baseLocal: undefined };
};
/**
* Get sub url server or local path storage of the specified app.
* @typedef PathServerLocal
* @property {string} pathServer - Server sub url.
* @property {string} pathLocal - Local sub path.
* @return {Promise<PathServerLocal>}
*/
async pathnameServerLocal() {
const typelist = [
...AppsLists.commonImageList,
...AppsLists.commonVideoList,
...AppsLists.commonUnityList,
...AppsLists.commonUsmList,
...AppsLists.commonCpkList,
...AppsLists.commonConfigList,
...AppsLists.commonCatalogList
];
if (!typelist.includes(this.assetname)) {
logging.error(i18next.t("parameters.assetname.notfound", { name: this.assetname }));
console.error(i18next.t("parameters.assetname.notfound", { name: this.assetname }));
return
};
const { baseServer, baseLocal } = await this.basenameServerLocal();
return this.assetname === "nogifes_photo_common"
? { pathServer: new URL("/resource/Background/Photo/", baseServer).href, pathLocal: path.join(baseLocal, "/photo_common") }
: this.assetname === "nogifes_bonus_campaign"
? { pathServer: new URL("/resource/Background/CampaignLoginBonusBackground/", baseServer).href, pathLocal: path.join(baseLocal, "/bonus_campaign") }
: this.assetname === "nogifes_reward_movie"
? { pathServer: new URL("/resource/Movie/Reward/", baseServer).href, pathLocal: path.join(baseLocal, "/reward_movie") }
: this.assetname === "nogifes_focus_data"
? { pathServer: new URL("/resource/Movie/Focus/", baseServer).href, pathLocal: path.join(baseLocal, "/focus_data") }
: this.assetname === "nogifes_focus_data_high"
? { pathServer: new URL("/resource/Movie/HighFocusMovie/", baseServer).href, pathLocal: path.join(baseLocal, "/focus_data_high") }
: this.assetname === "nogifes_movie_card"
? { pathServer: new URL("/resource/Movie/MovieCard/", baseServer).href, pathLocal: path.join(baseLocal, "/movie_card") }
: this.assetname === "nogifes_movie_card_th"
? { pathServer: new URL("/resource/Movie/MovieCard/Thumbnail/", baseServer).href, pathLocal: path.join(baseLocal, "/movie_card_thumbnail") }
: this.assetname === "nogifes_card"
? { pathServer: new URL("/resource/Android_2017_4_1f1/card/", baseServer).href, pathLocal: path.join(baseLocal, "/card") }
: this.assetname === "nogikoi_card_png"
? { pathServer: new URL("/assets/img/card/mypage/", baseServer).href, pathLocal: path.join(baseLocal, "/card_png") }
: this.assetname === "nogikoi_card_png_bg"
? { pathServer: new URL("/assets/img/card/bg/", baseServer).href, pathLocal: path.join(baseLocal, "/card_png_bg") }
: this.assetname === "nogikoi_card_jpg"
? { pathServer: new URL("/assets/img/card/l/", baseServer).href, pathLocal: path.join(baseLocal, "/card_jpg") }
: this.assetname === "nogikoi_sprites"
? { pathServer: new URL("/assets/img/member/story", baseServer).href, pathLocal: path.join(baseLocal, "/member") }
: this.assetname === "itsunogi_sprites"
? { pathServer: new URL("/asset/1.1.453/Android/conciergeimage", baseServer).href, pathLocal: path.join(baseLocal, "/sprite") }
: this.assetname === "itsunogi_card"
? { pathServer: new URL("/asset/1.1.453/Android/card/card", baseServer).href, pathLocal: path.join(baseLocal, "/card") }
: this.assetname === "itsunogi_photo"
? { pathServer: new URL("/asset/1.1.453/Android/card/photo", baseServer).href, pathLocal: path.join(baseLocal, "/photo") }
// : this.assetname === "itsunogi_sound"
// ? { pathServer: new URL("/asset/1.1.453/Android/sound/alarm_voice", baseServer).href, pathLocal: path.join(baseLocal, "/alarm_voice") }
: ["sakukoi_card", "hinakoi_card"].includes(this.assetname)
? { pathServer : new URL("/assets/production/<server_version>/Android", baseServer).href, pathLocal : path.join(baseLocal, "/card") }
: ["sakukoi_movie", "hinakoi_movie"].includes(this.assetname)
? { pathServer : new URL("/assets/production/<server_version>/Android", baseServer).href, pathLocal : path.join(baseLocal, "/movie") }
: ["nogifra_images", "nogifra_sounds", "nogifra_movies"].includes(this.assetname)
? { pathServer : path.join(MainConfig.temp_dir, baseServer, this.assetname.split("_")[1]), pathLocal : path.join(MainConfig.saveDir, baseLocal, this.assetname.split("_")[1]) }
: this.assetname !== "unison_catalog" && this.assetname.includes("unison")
? { pathServer : new URL("/client_assets/<server_version>/Android", baseServer).href, pathLocal : baseLocal }
: AppsLists.commonConfigList.includes(this.assetname)
? { pathServer : new URL(`/v2/${this.assetname.replace(`${this.appname}_`, "")}`, baseServer).href, pathLocal : this.assetname.includes("blogs") ? baseLocal.replace("Mobame", "Blog") : baseLocal }
: ["sakukoi_catalog", "hinakoi_catalog"].includes(this.assetname)
? { pathServer : new URL("/assets/production/<server_version>/Android/catalog.bytes", baseServer).href, pathLocal : MainConfig.ctlgDir }
: this.assetname === "unison_catalog"
? { pathServer : new URL("/production/<server_version>/Android/assets_masters", "https://cdn-masters.unis-on-air.com").href, pathLocal : MainConfig.ctlgDir }
: { pathServer: undefined, pathLocal: undefined }
};
};
export { AppsLists, RequestEndpoint };