starrail-manager
Version:
The StarRail Manager is a Node.js wrapper for the MiHoMo API and StarRail Data used in Honkai: StarRail.\ **This is not an official Honkai: StarRail project.**
84 lines • 3.26 kB
JavaScript
;
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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Client = void 0;
const scorer_1 = require("../utils/scorer");
const JsonParser_1 = require("../utils/JsonParser");
const renderImg_1 = require("../utils/renderImg");
const ApiError_1 = require("../errors/ApiError");
const languages = ["cht", "cn", "de", "en", "es", "fr", "id", "jp", "kr", "pt", "ru", "th", "vi"];
/**
* get data or create Build Card from MiHoMo API
*/
class Client {
constructor(options = {}) {
var _a;
this.lang = (_a = options.lang) !== null && _a !== void 0 ? _a : "en";
if (!languages.includes(this.lang)) {
throw new Error(`The Language is not supported: ${options.lang}`);
}
}
/**
* get user and character data from MiHoMo API
* @param uid - user id
* @returns user and character data in json
*/
getUserData(uid) {
return __awaiter(this, void 0, void 0, function* () {
const url = `https://api.mihomo.me/sr_info_parsed/${uid}?lang=${this.lang}`;
try {
const res = yield fetch(url);
if (!res.ok) {
throw new ApiError_1.ApiError(`Fetch failed: ${res.statusText}`, res.status);
}
return yield res.json();
}
catch (err) {
throw new ApiError_1.ApiError("Fetch error", err);
}
});
}
/**
* get character data with scores
* @param uid - user id
* @param index - character index(0 ~ 7)
* @returns character data with score in json
*/
getCharData(uid, index) {
return __awaiter(this, void 0, void 0, function* () {
const data = yield this.getUserData(uid);
const parsed = (0, JsonParser_1.parseChar)(data, index);
if (!parsed)
return null;
const scoreData = (0, scorer_1.calculateScore)(parsed);
return scoreData;
});
}
/**
* create character build card
* @param uid - user id
* @param index character index(0 ~ 7)
* @returns build card in canvas
*
* @remarks only japanese
*/
createBuildCard(uid, index) {
return __awaiter(this, void 0, void 0, function* () {
this.lang = "jp";
const data = yield this.getCharData(uid, index);
if (!data)
return null;
return yield (0, renderImg_1.renderImg)(data);
});
}
}
exports.Client = Client;
//# sourceMappingURL=client.js.map