UNPKG

warframe-worldstate-parser

Version:

An Open parser for Warframe's Worldstate in Javascript

104 lines (103 loc) 3.41 kB
import { n as __decorateMetadata, t as __decorate } from "../../decorate-BCC26nnB.mjs"; import { ExternalMission } from "../supporting/ExternalMission.mjs"; import "../supporting/index.mjs"; import { createHash } from "node:crypto"; import { Type } from "class-transformer"; import { IsArray, IsOptional, ValidateNested } from "class-validator"; import { node, nodeMissionType } from "warframe-worldstate-data/utilities"; //#region lib/models/Kuva.ts const HOURS_2 = 72e5; /** * Truncate time for a semlar-provided mission * @param mission parsed mission with re-aligned field names */ const truncateTime = (mission) => { mission.expiry.setHours(mission.activation.getHours() + 1); mission.expiry.setMinutes(4); mission.expiry.setSeconds(0); mission.expiry.setMilliseconds(0); mission.activation.setMinutes(mission.activation.getMinutes() + 5.1); }; /** * Scrub unnecessary details from the mission * @param mission parsed mission with re-aligned field names */ const scrub = (mission) => { delete mission.solnode; delete mission.name; delete mission.node_type; delete mission.tile; delete mission.planet; }; const hash = (str) => createHash("md5").update(str, "utf8").digest("hex"); /** * Parse kuva & arbitration data * @param data Data to split for kuva/arbitration * @param locale locale to translate * @returns Split parsed data */ const parse = (data, locale) => { const parsed = { kuva: [], arbitration: {} }; const now = /* @__PURE__ */ new Date(); if (!data) return void 0; data?.forEach?.((mission) => { const p = { id: "", activation: new Date(mission.start), expiry: new Date(mission.end), ...mission.solnodedata, node: node(mission.solnode, locale), nodeKey: node(mission.solnode, "en"), type: nodeMissionType(mission.solnode, locale), typeKey: nodeMissionType(mission.solnode, "en"), expired: false, archwing: mission.solnodedata?.archwing ?? false, sharkwing: mission.solnodedata?.sharkwing ?? false }; truncateTime(p); p.id = hash(JSON.stringify(p)); p.expired = Date.now() - p.expiry.getTime() < 0; if (p.activation < now && now < p.expiry && new Date(p.activation.getTime() + HOURS_2) > now && /* @__PURE__ */ new Date(p.expiry.getTime() - HOURS_2) < now) { if (mission.missiontype === "EliteAlertMission") parsed.arbitration = p; if (mission.missiontype?.startsWith("KuvaMission")) parsed.kuva.push(p); } scrub(p); }); parsed.kuva = Array.from(new Set(parsed.kuva)); return parsed; }; /** * Stores and parses kuva data from https://10o.io/kuvalog.json * @property {ExternalMission[]} kuva currently active kuva missions * @property {ExternalMission} arbitration current arbitration */ var Kuva = class { kuva; arbitration; constructor({ kuvaData, locale, logger }) { if (!kuvaData) logger?.debug("No defined kuva data, skipping data"); else { const parsed = parse(kuvaData, locale); this.kuva = parsed?.kuva; this.arbitration = parsed?.arbitration; } } }; __decorate([ IsOptional(), IsArray(), ValidateNested({ each: true }), Type(() => ExternalMission), __decorateMetadata("design:type", Array) ], Kuva.prototype, "kuva", void 0); __decorate([ IsOptional(), ValidateNested(), Type(() => ExternalMission), __decorateMetadata("design:type", typeof ExternalMission === "undefined" ? Object : ExternalMission) ], Kuva.prototype, "arbitration", void 0); //#endregion export { Kuva };