warframe-worldstate-parser 5.2.16 → 5.2.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Calendar-CRM0XhAy.d.mts → Calendar-C-rbmV_t.d.mts} +1 -1
- package/dist/{CambionCycle-OI3v1knd.d.mts → CambionCycle-BzR_MfPH.d.mts} +2 -2
- package/dist/{CetusCycle-DQ4n05vO.d.mts → CetusCycle-DaqfF4J1.d.mts} +1 -1
- package/dist/{ConstructionProgress-DG2KzS0X.d.mts → ConstructionProgress-BRxmro3-.d.mts} +1 -1
- package/dist/{DarkSectorBattle-CiSe3kFm.d.mts → DarkSectorBattle-DHRl5tG1.d.mts} +1 -1
- package/dist/{Dependency-CNqXngHD.d.mts → Dependency-Cd-TxBJy.d.mts} +1 -1
- package/dist/{EarthCycle-CxtijnVV.d.mts → EarthCycle-C_oB5gDc.d.mts} +1 -1
- package/dist/{MidrathCycle-E0gMF3AR.d.mts → MidrathCycle-CxveqDtx.d.mts} +1 -1
- package/dist/{News-DxEm-q6V.d.mts → News-CJ3lD7_g.d.mts} +1 -1
- package/dist/{Nightwave-CPqMSqGK.d.mts → Nightwave-BLHH02ht.d.mts} +2 -2
- package/dist/{NightwaveChallenge-CG3uychc.d.mts → NightwaveChallenge-j_m4hVQU.d.mts} +1 -1
- package/dist/{PersistentEnemy-DnnnreSz.d.mts → PersistentEnemy-BJ4twtUY.d.mts} +1 -1
- package/dist/{VallisCycle-6DCaWFoR.d.mts → VallisCycle-as7DM4a-.d.mts} +1 -1
- package/dist/{ZarimanCycle-BrSLIWhD.d.mts → ZarimanCycle-DyYiVfyG.d.mts} +1 -1
- package/dist/{index-Bgx8kIDy.d.mts → index-C4EJ_Mpd.d.mts} +6 -6
- package/dist/lib/WorldState.d.mts +16 -19
- package/dist/lib/WorldState.mjs +32 -48
- package/dist/lib/models/Alert.d.mts +1 -17
- package/dist/lib/models/Alert.mjs +49 -7
- package/dist/lib/models/Archimedea.d.mts +1 -17
- package/dist/lib/models/Archimedea.mjs +88 -4
- package/dist/lib/models/Calendar.d.mts +1 -2
- package/dist/lib/models/Calendar.mjs +79 -4
- package/dist/lib/models/CambionCycle.d.mts +1 -3
- package/dist/lib/models/CambionCycle.mjs +28 -4
- package/dist/lib/models/CetusCycle.d.mts +1 -2
- package/dist/lib/models/CetusCycle.mjs +87 -4
- package/dist/lib/models/ChallengeInstance.d.mts +1 -17
- package/dist/lib/models/ChallengeInstance.mjs +46 -3
- package/dist/lib/models/ConclaveChallenge.d.mts +1 -17
- package/dist/lib/models/ConclaveChallenge.mjs +77 -4
- package/dist/lib/models/ConstructionProgress.d.mts +1 -2
- package/dist/lib/models/ConstructionProgress.mjs +23 -4
- package/dist/lib/models/DailyDeal.d.mts +1 -17
- package/dist/lib/models/DailyDeal.mjs +64 -4
- package/dist/lib/models/DarkSector.d.mts +1 -17
- package/dist/lib/models/DarkSector.mjs +136 -8
- package/dist/lib/models/DarkSectorBattle.d.mts +1 -2
- package/dist/lib/models/DarkSectorBattle.mjs +49 -3
- package/dist/lib/models/DuviriCycle.d.mts +1 -17
- package/dist/lib/models/DuviriCycle.mjs +55 -4
- package/dist/lib/models/EarthCycle.d.mts +1 -2
- package/dist/lib/models/EarthCycle.mjs +73 -4
- package/dist/lib/models/Fissure.d.mts +1 -17
- package/dist/lib/models/Fissure.mjs +83 -4
- package/dist/lib/models/FlashSale.d.mts +1 -17
- package/dist/lib/models/FlashSale.mjs +73 -4
- package/dist/lib/models/GlobalUpgrade.d.mts +1 -17
- package/dist/lib/models/GlobalUpgrade.mjs +56 -4
- package/dist/lib/models/Invasion.d.mts +1 -17
- package/dist/lib/models/Invasion.mjs +106 -6
- package/dist/lib/models/Kinepage.d.mts +1 -1
- package/dist/lib/models/Kinepage.mjs +23 -3
- package/dist/lib/models/Kuva.d.mts +1 -17
- package/dist/lib/models/Kuva.mjs +85 -3
- package/dist/lib/models/MidrathCycle.d.mts +1 -2
- package/dist/lib/models/MidrathCycle.mjs +66 -4
- package/dist/lib/models/Mission.d.mts +1 -17
- package/dist/lib/models/Mission.mjs +138 -5
- package/dist/lib/models/News.d.mts +1 -2
- package/dist/lib/models/News.mjs +116 -4
- package/dist/lib/models/Nightwave.d.mts +1 -3
- package/dist/lib/models/Nightwave.mjs +58 -5
- package/dist/lib/models/NightwaveChallenge.d.mts +1 -2
- package/dist/lib/models/NightwaveChallenge.mjs +51 -4
- package/dist/lib/models/PersistentEnemy.d.mts +1 -2
- package/dist/lib/models/PersistentEnemy.mjs +74 -4
- package/dist/lib/models/Reward.d.mts +1 -17
- package/dist/lib/models/Reward.mjs +71 -4
- package/dist/lib/models/SentientOutpost.d.mts +1 -17
- package/dist/lib/models/SentientOutpost.mjs +63 -3
- package/dist/lib/models/Simaris.d.mts +1 -17
- package/dist/lib/models/Simaris.mjs +33 -3
- package/dist/lib/models/Sortie.d.mts +1 -17
- package/dist/lib/models/Sortie.mjs +71 -8
- package/dist/lib/models/SortieVariant.d.mts +1 -17
- package/dist/lib/models/SortieVariant.mjs +49 -3
- package/dist/lib/models/SteelPathOffering.d.mts +1 -1
- package/dist/lib/models/SteelPathOffering.mjs +81 -3
- package/dist/lib/models/SyndicateJob.d.mts +1 -17
- package/dist/lib/models/SyndicateJob.mjs +161 -7
- package/dist/lib/models/SyndicateMission.d.mts +1 -17
- package/dist/lib/models/SyndicateMission.mjs +64 -8
- package/dist/lib/models/Tmp.d.mts +1 -17
- package/dist/lib/models/Tmp.mjs +28 -4
- package/dist/lib/models/VallisCycle.d.mts +1 -2
- package/dist/lib/models/VallisCycle.mjs +72 -4
- package/dist/lib/models/VoidTrader.d.mts +1 -17
- package/dist/lib/models/VoidTrader.mjs +76 -6
- package/dist/lib/models/VoidTraderItem.d.mts +1 -17
- package/dist/lib/models/VoidTraderItem.mjs +36 -3
- package/dist/lib/models/VoidTraderSchedule.d.mts +1 -17
- package/dist/lib/models/VoidTraderSchedule.mjs +12 -3
- package/dist/lib/models/WeeklyChallenge.d.mts +1 -17
- package/dist/lib/models/WeeklyChallenge.mjs +19 -5
- package/dist/lib/models/WorldEvent.d.mts +1 -17
- package/dist/lib/models/WorldEvent.mjs +211 -9
- package/dist/lib/models/WorldStateObject.d.mts +1 -1
- package/dist/lib/models/WorldStateObject.mjs +52 -3
- package/dist/lib/models/ZarimanCycle.d.mts +1 -2
- package/dist/lib/models/ZarimanCycle.mjs +77 -4
- package/dist/lib/models/index.d.mts +17 -18
- package/dist/lib/models/index.mjs +43 -47
- package/dist/lib/supporting/Dependency.d.mts +1 -1
- package/dist/lib/supporting/Dependency.mjs +1 -1
- package/dist/lib/supporting/DuviriChoice.d.mts +1 -17
- package/dist/lib/supporting/DuviriChoice.mjs +24 -3
- package/dist/lib/supporting/ExternalMission.d.mts +1 -1
- package/dist/lib/supporting/ExternalMission.mjs +1 -1
- package/dist/lib/supporting/FetchProxy.d.mts +1 -1
- package/dist/lib/supporting/FetchProxy.mjs +45 -3
- package/dist/lib/supporting/ImgCdn.d.mts +1 -1
- package/dist/lib/supporting/ImgCdn.mjs +6 -3
- package/dist/lib/supporting/KuvaLogEntry.d.mts +1 -1
- package/dist/lib/supporting/KuvaLogEntry.mjs +1 -1
- package/dist/lib/supporting/RewardData.d.mts +1 -1
- package/dist/lib/supporting/RewardData.mjs +75 -3
- package/dist/lib/supporting/RewardTypes.d.mts +1 -1
- package/dist/lib/supporting/RewardTypes.mjs +326 -3
- package/dist/lib/supporting/index.d.mts +8 -23
- package/dist/lib/supporting/index.mjs +6 -8
- package/dist/main.d.mts +24 -24
- package/dist/main.mjs +48 -51
- package/package.json +1 -1
- package/dist/Alert-CPT2sBmd.mjs +0 -51
- package/dist/Archimedea-Vo36QE99.mjs +0 -90
- package/dist/Calendar-_gEQ9BEd.mjs +0 -81
- package/dist/CambionCycle-B1pqIgks.mjs +0 -30
- package/dist/CetusCycle-Ct51M2pd.mjs +0 -89
- package/dist/ChallengeInstance-BOu_e7ML.mjs +0 -48
- package/dist/ConclaveChallenge-BTN6UyV6.mjs +0 -79
- package/dist/ConstructionProgress-BoF2P9fx.mjs +0 -25
- package/dist/DailyDeal-aoNeCFWT.mjs +0 -66
- package/dist/DarkSector-D0uJWCg7.mjs +0 -138
- package/dist/DarkSectorBattle-CqRYeNpe.mjs +0 -51
- package/dist/Dependency-BR-dAeHI.mjs +0 -1
- package/dist/DuviriChoice-BEBiWA-g.mjs +0 -25
- package/dist/DuviriCycle-Do7mMnoC.mjs +0 -57
- package/dist/EarthCycle-BOAlcAuQ.mjs +0 -75
- package/dist/ExternalMission-D3MSZgnN.mjs +0 -1
- package/dist/FetchProxy-Bkdk15SX.mjs +0 -46
- package/dist/Fissure-diM4hyi3.mjs +0 -85
- package/dist/FlashSale-CNfRaZhM.mjs +0 -75
- package/dist/GlobalUpgrade-CUtZw05z.mjs +0 -58
- package/dist/ImgCdn-BJOdWAbU.mjs +0 -7
- package/dist/Invasion-Corx1lxf.mjs +0 -108
- package/dist/Kinepage-CbSzge67.mjs +0 -24
- package/dist/Kuva-Ijy2ZGBL.mjs +0 -87
- package/dist/KuvaLogEntry-D_VzIT3W.mjs +0 -1
- package/dist/MidrathCycle-XD2T8Dx5.mjs +0 -68
- package/dist/Mission-b8KP-YDf.mjs +0 -140
- package/dist/News-zAK-sYRg.mjs +0 -118
- package/dist/Nightwave-cTRmlbwH.mjs +0 -60
- package/dist/NightwaveChallenge-C8ARG7LC.mjs +0 -53
- package/dist/PersistentEnemy-3Sw5E8AN.mjs +0 -76
- package/dist/Reward-3FBJF_hS.mjs +0 -73
- package/dist/RewardData-C_9b8Yhi.mjs +0 -76
- package/dist/RewardTypes-DUrR7H3G.mjs +0 -328
- package/dist/SentientOutpost-Cadk-pIW.mjs +0 -65
- package/dist/Simaris-D6etEQp_.mjs +0 -35
- package/dist/Sortie-rSBgJc6U.mjs +0 -73
- package/dist/SortieVariant-CnuLkkNZ.mjs +0 -51
- package/dist/SteelPathOffering--wm-7hwb.mjs +0 -83
- package/dist/SyndicateJob-R89tWqvT.mjs +0 -162
- package/dist/SyndicateMission-CKZDWNyf.mjs +0 -66
- package/dist/Tmp-BYL_mYIG.mjs +0 -30
- package/dist/VallisCycle-BW2g49wB.mjs +0 -74
- package/dist/VoidTrader-DtjtVUgR.mjs +0 -78
- package/dist/VoidTraderItem-Cz6x1KTF.mjs +0 -38
- package/dist/VoidTraderSchedule-BsJLu50V.mjs +0 -14
- package/dist/WeeklyChallenge-Dl2ekl6X.mjs +0 -21
- package/dist/WorldEvent-C-LaV2ug.mjs +0 -213
- package/dist/WorldStateObject-45dbRgp7.mjs +0 -54
- package/dist/ZarimanCycle-DoAPwgaM.mjs +0 -79
- package/dist/supporting-BLSXhlWM.mjs +0 -1
- /package/dist/{ExternalMission-C82w4uMq.d.mts → ExternalMission-CT__oi7Q.d.mts} +0 -0
- /package/dist/{FetchProxy-DfSTUgkf.d.mts → FetchProxy-DHSI4JPP.d.mts} +0 -0
- /package/dist/{ImgCdn-D0hSGSB1.d.mts → ImgCdn-DIhZrwap.d.mts} +0 -0
- /package/dist/{Kinepage-B-Ym_VW5.d.mts → Kinepage-CKBuvbv5.d.mts} +0 -0
- /package/dist/{KuvaLogEntry-cftxhjfU.d.mts → KuvaLogEntry-f4ZBn2Xf.d.mts} +0 -0
- /package/dist/{RewardData-DWCgJ3UT.d.mts → RewardData-BdtdUFnh.d.mts} +0 -0
- /package/dist/{RewardTypes-Y3tHrtIJ.d.mts → RewardTypes-BnGaD7VF.d.mts} +0 -0
- /package/dist/{SteelPathOffering-CQkoKi5T.d.mts → SteelPathOffering-DYjZ29sT.d.mts} +0 -0
- /package/dist/{WorldStateObject-C1HEDkH7.d.mts → WorldStateObject-C2KjQZjd.d.mts} +0 -0
package/dist/lib/models/Kuva.mjs
CHANGED
|
@@ -1,3 +1,85 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { node, nodeMissionType } from "warframe-worldstate-data/utilities";
|
|
3
|
+
//#region lib/models/Kuva.ts
|
|
4
|
+
const HOURS_2 = 72e5;
|
|
5
|
+
/**
|
|
6
|
+
* Truncate time for a semlar-provided mission
|
|
7
|
+
* @param mission parsed mission with re-aligned field names
|
|
8
|
+
*/
|
|
9
|
+
const truncateTime = (mission) => {
|
|
10
|
+
mission.expiry.setHours(mission.activation.getHours() + 1);
|
|
11
|
+
mission.expiry.setMinutes(4);
|
|
12
|
+
mission.expiry.setSeconds(0);
|
|
13
|
+
mission.expiry.setMilliseconds(0);
|
|
14
|
+
mission.activation.setMinutes(mission.activation.getMinutes() + 5.1);
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Scrub unnecessary details from the mission
|
|
18
|
+
* @param mission parsed mission with re-aligned field names
|
|
19
|
+
*/
|
|
20
|
+
const scrub = (mission) => {
|
|
21
|
+
delete mission.solnode;
|
|
22
|
+
delete mission.name;
|
|
23
|
+
delete mission.node_type;
|
|
24
|
+
delete mission.tile;
|
|
25
|
+
delete mission.planet;
|
|
26
|
+
};
|
|
27
|
+
const hash = (str) => createHash("md5").update(str, "utf8").digest("hex");
|
|
28
|
+
/**
|
|
29
|
+
* Parse kuva & arbitration data
|
|
30
|
+
* @param data Data to split for kuva/arbitration
|
|
31
|
+
* @param locale locale to translate
|
|
32
|
+
* @returns Split parsed data
|
|
33
|
+
*/
|
|
34
|
+
const parse = (data, locale) => {
|
|
35
|
+
const parsed = {
|
|
36
|
+
kuva: [],
|
|
37
|
+
arbitration: {}
|
|
38
|
+
};
|
|
39
|
+
const now = /* @__PURE__ */ new Date();
|
|
40
|
+
if (!data) return void 0;
|
|
41
|
+
data?.forEach?.((mission) => {
|
|
42
|
+
const p = {
|
|
43
|
+
id: "",
|
|
44
|
+
activation: new Date(mission.start),
|
|
45
|
+
expiry: new Date(mission.end),
|
|
46
|
+
...mission.solnodedata,
|
|
47
|
+
node: node(mission.solnode, locale),
|
|
48
|
+
nodeKey: node(mission.solnode, "en"),
|
|
49
|
+
type: nodeMissionType(mission.solnode, locale),
|
|
50
|
+
typeKey: nodeMissionType(mission.solnode, "en"),
|
|
51
|
+
expired: false,
|
|
52
|
+
archwing: mission.solnodedata?.archwing ?? false,
|
|
53
|
+
sharkwing: mission.solnodedata?.sharkwing ?? false
|
|
54
|
+
};
|
|
55
|
+
truncateTime(p);
|
|
56
|
+
p.id = hash(JSON.stringify(p));
|
|
57
|
+
p.expired = Date.now() - p.expiry.getTime() < 0;
|
|
58
|
+
if (p.activation < now && now < p.expiry && new Date(p.activation.getTime() + HOURS_2) > now && new Date(p.expiry.getTime() - HOURS_2) < now) {
|
|
59
|
+
if (mission.missiontype === "EliteAlertMission") parsed.arbitration = p;
|
|
60
|
+
if (mission.missiontype?.startsWith("KuvaMission")) parsed.kuva.push(p);
|
|
61
|
+
}
|
|
62
|
+
scrub(p);
|
|
63
|
+
});
|
|
64
|
+
parsed.kuva = Array.from(new Set(parsed.kuva));
|
|
65
|
+
return parsed;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Stores and parses kuva data from https://10o.io/kuvalog.json
|
|
69
|
+
* @property {ExternalMission[]} kuva currently active kuva missions
|
|
70
|
+
* @property {ExternalMission} arbitration current arbitration
|
|
71
|
+
*/
|
|
72
|
+
var Kuva = class {
|
|
73
|
+
kuva;
|
|
74
|
+
arbitration;
|
|
75
|
+
constructor({ kuvaData, locale, logger }) {
|
|
76
|
+
if (!kuvaData) logger?.debug("No defined kuva data, skipping data");
|
|
77
|
+
else {
|
|
78
|
+
const parsed = parse(kuvaData, locale);
|
|
79
|
+
this.kuva = parsed?.kuva;
|
|
80
|
+
this.arbitration = parsed?.arbitration;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
//#endregion
|
|
85
|
+
export { Kuva };
|
|
@@ -1,4 +1,66 @@
|
|
|
1
|
-
import "
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { WorldStateObject } from "./WorldStateObject.mjs";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { fromNow, timeDeltaToString } from "warframe-worldstate-data/utilities";
|
|
4
|
+
//#region lib/models/MidrathCycle.ts
|
|
5
|
+
/**
|
|
6
|
+
* Get the current Midrath cycle time
|
|
7
|
+
*/
|
|
8
|
+
function getCurrentMidrathCycle() {
|
|
9
|
+
const dayDuration = 1920 * 1e3;
|
|
10
|
+
const nightDuration = 960 * 1e3;
|
|
11
|
+
const totalDuration = dayDuration + nightDuration;
|
|
12
|
+
const refPoint = Date.parse("2025-08-07T16:05:29Z");
|
|
13
|
+
const now = Date.now();
|
|
14
|
+
const elapsedInCycle = (now - refPoint) % totalDuration;
|
|
15
|
+
const isDay = elapsedInCycle < dayDuration;
|
|
16
|
+
let phase = {
|
|
17
|
+
name: "night",
|
|
18
|
+
remaining: totalDuration - elapsedInCycle,
|
|
19
|
+
duration: nightDuration
|
|
20
|
+
};
|
|
21
|
+
if (isDay) phase = {
|
|
22
|
+
name: "day",
|
|
23
|
+
remaining: dayDuration - elapsedInCycle,
|
|
24
|
+
duration: dayDuration
|
|
25
|
+
};
|
|
26
|
+
const activation = new Date(now - (phase.duration - phase.remaining));
|
|
27
|
+
return {
|
|
28
|
+
activation,
|
|
29
|
+
expiry: new Date(activation.getTime() + phase.duration),
|
|
30
|
+
state: phase.name,
|
|
31
|
+
isDay
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
var MidrathCycle = class extends WorldStateObject {
|
|
35
|
+
#cycle = getCurrentMidrathCycle();
|
|
36
|
+
/**
|
|
37
|
+
* Whether it's day or not
|
|
38
|
+
*/
|
|
39
|
+
isDay;
|
|
40
|
+
/**
|
|
41
|
+
* The current state
|
|
42
|
+
*/
|
|
43
|
+
state;
|
|
44
|
+
constructor() {
|
|
45
|
+
super({ _id: { $oid: "midrathCycle0" } });
|
|
46
|
+
this.activation = this.#cycle.activation;
|
|
47
|
+
this.expiry = this.#cycle.expiry;
|
|
48
|
+
this.isDay = this.#cycle.isDay;
|
|
49
|
+
this.state = this.#cycle.state;
|
|
50
|
+
this.id = createHash("md5").update(JSON.stringify(this.expiry), "utf8").digest("hex");
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get whether or not the event has expired
|
|
54
|
+
*/
|
|
55
|
+
get expired() {
|
|
56
|
+
return fromNow(this.expiry) < 0;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* The amount of time left as a string
|
|
60
|
+
*/
|
|
61
|
+
get timeLeft() {
|
|
62
|
+
return timeDeltaToString(fromNow(this.expiry));
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
//#endregion
|
|
66
|
+
export { MidrathCycle };
|
|
@@ -1,18 +1,2 @@
|
|
|
1
|
-
import "../../
|
|
2
|
-
import { at as RawMission, it as Mission } from "../../index-Bgx8kIDy.mjs";
|
|
3
|
-
import "../../WorldStateObject-C1HEDkH7.mjs";
|
|
4
|
-
import "../../Calendar-CRM0XhAy.mjs";
|
|
5
|
-
import "../../CetusCycle-DQ4n05vO.mjs";
|
|
6
|
-
import "../../CambionCycle-OI3v1knd.mjs";
|
|
7
|
-
import "../../ConstructionProgress-DG2KzS0X.mjs";
|
|
8
|
-
import "../../DarkSectorBattle-CiSe3kFm.mjs";
|
|
9
|
-
import "../../EarthCycle-CxtijnVV.mjs";
|
|
10
|
-
import "../../MidrathCycle-E0gMF3AR.mjs";
|
|
11
|
-
import "../../News-DxEm-q6V.mjs";
|
|
12
|
-
import "../../NightwaveChallenge-CG3uychc.mjs";
|
|
13
|
-
import "../../Nightwave-CPqMSqGK.mjs";
|
|
14
|
-
import "../../PersistentEnemy-DnnnreSz.mjs";
|
|
15
|
-
import "../../SteelPathOffering-CQkoKi5T.mjs";
|
|
16
|
-
import "../../VallisCycle-6DCaWFoR.mjs";
|
|
17
|
-
import "../../ZarimanCycle-BrSLIWhD.mjs";
|
|
1
|
+
import { at as RawMission, it as Mission } from "../../index-C4EJ_Mpd.mjs";
|
|
18
2
|
export { Mission, RawMission };
|
|
@@ -1,5 +1,138 @@
|
|
|
1
|
-
import "
|
|
2
|
-
import "
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { Reward } from "./Reward.mjs";
|
|
2
|
+
import { faction, insist, languageString, missionType, node } from "warframe-worldstate-data/utilities";
|
|
3
|
+
//#region lib/models/Mission.ts
|
|
4
|
+
/**
|
|
5
|
+
* Represents an in-game mission
|
|
6
|
+
*/
|
|
7
|
+
var Mission = class {
|
|
8
|
+
/**
|
|
9
|
+
* The mission's description
|
|
10
|
+
*/
|
|
11
|
+
description;
|
|
12
|
+
/**
|
|
13
|
+
* The node where the mission takes place
|
|
14
|
+
*/
|
|
15
|
+
node;
|
|
16
|
+
/**
|
|
17
|
+
* Unlocalized node
|
|
18
|
+
*/
|
|
19
|
+
nodeKey;
|
|
20
|
+
/**
|
|
21
|
+
* The mission's type
|
|
22
|
+
*/
|
|
23
|
+
type;
|
|
24
|
+
/**
|
|
25
|
+
* The mission's type
|
|
26
|
+
*/
|
|
27
|
+
typeKey;
|
|
28
|
+
/**
|
|
29
|
+
* The factions that the players must fight in the mission
|
|
30
|
+
*/
|
|
31
|
+
faction;
|
|
32
|
+
/**
|
|
33
|
+
* The factions that the players must fight in the mission
|
|
34
|
+
*/
|
|
35
|
+
factionKey;
|
|
36
|
+
/**
|
|
37
|
+
* The mission's reward
|
|
38
|
+
*/
|
|
39
|
+
reward;
|
|
40
|
+
/**
|
|
41
|
+
* The minimum level of the enemies in the mission
|
|
42
|
+
*/
|
|
43
|
+
minEnemyLevel;
|
|
44
|
+
/**
|
|
45
|
+
* The maximum level of the enemies in the mission
|
|
46
|
+
*/
|
|
47
|
+
maxEnemyLevel;
|
|
48
|
+
/**
|
|
49
|
+
* The number of waves that the players need to complete (undefined if not applicable)
|
|
50
|
+
*/
|
|
51
|
+
maxWaveNum;
|
|
52
|
+
/**
|
|
53
|
+
* The Mission's nightmare boolean
|
|
54
|
+
*/
|
|
55
|
+
nightmare;
|
|
56
|
+
/**
|
|
57
|
+
* The Mission's archwing requirement
|
|
58
|
+
*/
|
|
59
|
+
archwingRequired;
|
|
60
|
+
/**
|
|
61
|
+
* The Mission's sharkwing requirement
|
|
62
|
+
*/
|
|
63
|
+
isSharkwing;
|
|
64
|
+
/**
|
|
65
|
+
* Override for the map on this mission
|
|
66
|
+
*/
|
|
67
|
+
levelOverride;
|
|
68
|
+
/**
|
|
69
|
+
* Enemy specification for the mission
|
|
70
|
+
*/
|
|
71
|
+
enemySpec;
|
|
72
|
+
/**
|
|
73
|
+
* Array of strings denoting extra spawners for a mission
|
|
74
|
+
*/
|
|
75
|
+
advancedSpawners;
|
|
76
|
+
/**
|
|
77
|
+
* Items required to enter the mission
|
|
78
|
+
*/
|
|
79
|
+
requiredItems;
|
|
80
|
+
/**
|
|
81
|
+
* Whether or not the required items are consumed
|
|
82
|
+
*/
|
|
83
|
+
consumeRequiredItems;
|
|
84
|
+
/**
|
|
85
|
+
* Target for the mission
|
|
86
|
+
*/
|
|
87
|
+
target;
|
|
88
|
+
/**
|
|
89
|
+
* Whether or not leaders are always allowed
|
|
90
|
+
*/
|
|
91
|
+
leadersAlwaysAllowed;
|
|
92
|
+
/**
|
|
93
|
+
* A tag for the event that this corresponds to
|
|
94
|
+
*/
|
|
95
|
+
goalTag;
|
|
96
|
+
/**
|
|
97
|
+
* Affectors for this mission
|
|
98
|
+
*/
|
|
99
|
+
levelAuras;
|
|
100
|
+
/**
|
|
101
|
+
* Only weapon allowed for the mission
|
|
102
|
+
*/
|
|
103
|
+
exclusiveWeapon;
|
|
104
|
+
/**
|
|
105
|
+
* @param data The mission data
|
|
106
|
+
* @param locale Locale to use for translations
|
|
107
|
+
*/
|
|
108
|
+
constructor(data, { locale = "en" } = { locale: "en" }) {
|
|
109
|
+
const deps = { locale };
|
|
110
|
+
insist({ ...data });
|
|
111
|
+
this.description = languageString(data.descText, locale);
|
|
112
|
+
this.node = node(data.node || data.location, locale);
|
|
113
|
+
this.nodeKey = node(data.node || data.location, "en");
|
|
114
|
+
this.type = missionType(data.missionType, locale);
|
|
115
|
+
this.typeKey = missionType(data.missionType, "en");
|
|
116
|
+
this.faction = faction(data.faction, locale);
|
|
117
|
+
this.factionKey = faction(data.faction, "en");
|
|
118
|
+
this.reward = data.missionReward ? new Reward(data.missionReward, deps) : void 0;
|
|
119
|
+
this.minEnemyLevel = data.minEnemyLevel;
|
|
120
|
+
this.maxEnemyLevel = data.maxEnemyLevel;
|
|
121
|
+
this.maxWaveNum = data.maxWaveNum;
|
|
122
|
+
this.nightmare = data.nightmare || false;
|
|
123
|
+
this.archwingRequired = data.archwingRequired || false;
|
|
124
|
+
this.isSharkwing = data.isSharkwingMission || false;
|
|
125
|
+
this.levelOverride = languageString(data.levelOverride, locale);
|
|
126
|
+
this.enemySpec = languageString(data.enemySpec, locale);
|
|
127
|
+
this.advancedSpawners = (data.advancedSpawners || []).map((spawner) => languageString(spawner, locale));
|
|
128
|
+
this.requiredItems = (data.requiredItems || []).map((reqItem) => languageString(reqItem, locale));
|
|
129
|
+
this.consumeRequiredItems = data.consumeRequiredItems;
|
|
130
|
+
this.target = data.vipAgent ? languageString(data.vipAgent, locale) : void 0;
|
|
131
|
+
this.leadersAlwaysAllowed = data.leadersAlwaysAllowed;
|
|
132
|
+
this.goalTag = data.goalTag;
|
|
133
|
+
this.levelAuras = (data.levelAuras || []).map((aura) => languageString(aura, locale));
|
|
134
|
+
this.exclusiveWeapon = languageString(data.exclusiveWeapon, locale);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
//#endregion
|
|
138
|
+
export { Mission };
|
package/dist/lib/models/News.mjs
CHANGED
|
@@ -1,4 +1,116 @@
|
|
|
1
|
-
import "
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { cdn, deProxy } from "../supporting/ImgCdn.mjs";
|
|
2
|
+
import { WorldStateObject } from "./WorldStateObject.mjs";
|
|
3
|
+
import { fromNow, languageString, parseDate, timeDeltaToString, toNow } from "warframe-worldstate-data/utilities";
|
|
4
|
+
//#region lib/models/News.ts
|
|
5
|
+
const updateReg = /(update|hotfix|patch-notes)/i;
|
|
6
|
+
const primeAccessReg = /(access)/i;
|
|
7
|
+
const streamReg = /(devstream|prime-time|warframeinternational|stream)/i;
|
|
8
|
+
const langString = /(\/Lotus\/Language\/)/i;
|
|
9
|
+
/**
|
|
10
|
+
* Represents a game news item
|
|
11
|
+
* @augments {WorldStateObject}
|
|
12
|
+
*/
|
|
13
|
+
var News = class extends WorldStateObject {
|
|
14
|
+
/**
|
|
15
|
+
* The news message
|
|
16
|
+
*/
|
|
17
|
+
message;
|
|
18
|
+
/**
|
|
19
|
+
* The link to the forum post
|
|
20
|
+
*/
|
|
21
|
+
link;
|
|
22
|
+
/**
|
|
23
|
+
* The news's image link
|
|
24
|
+
*/
|
|
25
|
+
imageLink;
|
|
26
|
+
/**
|
|
27
|
+
* Whether this has priority over other news or not
|
|
28
|
+
*/
|
|
29
|
+
priority;
|
|
30
|
+
/**
|
|
31
|
+
* The date at which the post was published
|
|
32
|
+
*/
|
|
33
|
+
date;
|
|
34
|
+
/**
|
|
35
|
+
* The message translated into different locales
|
|
36
|
+
*/
|
|
37
|
+
translations;
|
|
38
|
+
/**
|
|
39
|
+
* Whether this is an update news item
|
|
40
|
+
*/
|
|
41
|
+
update;
|
|
42
|
+
/**
|
|
43
|
+
* Whether this is a prime access news item
|
|
44
|
+
*/
|
|
45
|
+
primeAccess;
|
|
46
|
+
/**
|
|
47
|
+
* Whether or not this is a stream
|
|
48
|
+
*/
|
|
49
|
+
stream;
|
|
50
|
+
/**
|
|
51
|
+
* Whether or not this news is mobile only.
|
|
52
|
+
*/
|
|
53
|
+
mobileOnly;
|
|
54
|
+
/**
|
|
55
|
+
* @param data The news data
|
|
56
|
+
* @param locale Locale to use for determining language
|
|
57
|
+
*/
|
|
58
|
+
constructor(data, { locale } = { locale: "en" }) {
|
|
59
|
+
super({
|
|
60
|
+
...data,
|
|
61
|
+
Activation: data.EventStartDate,
|
|
62
|
+
Expiry: data.EventEndDate
|
|
63
|
+
});
|
|
64
|
+
this.message = (data.Messages.find((msg) => msg.LanguageCode === locale) || { Message: "" }).Message;
|
|
65
|
+
if (langString.test(this.message)) this.message = languageString(this.message, locale);
|
|
66
|
+
this.link = data.Prop;
|
|
67
|
+
if ((!this.link || !this.link.length) && data.Links && data.Links.length) this.link = (data.Links.find((l) => l.LanguageCode === locale) || { Link: "https://www.warframe.com/" }).Link;
|
|
68
|
+
this.imageLink = data.ImageUrl ? deProxy(data.ImageUrl) : cdn("img/news-placeholder.png");
|
|
69
|
+
this.priority = data.Priority;
|
|
70
|
+
this.date = parseDate(data.Date);
|
|
71
|
+
this.translations = {};
|
|
72
|
+
data.Messages.forEach((message) => {
|
|
73
|
+
this.translations[message.LanguageCode] = message.Message;
|
|
74
|
+
if (langString.test(message.Message)) this.translations[message.LanguageCode] = languageString(message.Message, message.LanguageCode);
|
|
75
|
+
});
|
|
76
|
+
this.update = this.isUpdate();
|
|
77
|
+
this.primeAccess = this.isPrimeAccess();
|
|
78
|
+
this.stream = this.isStream();
|
|
79
|
+
this.mobileOnly = data.MobileOnly;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Whether or not this is about a game update
|
|
83
|
+
*/
|
|
84
|
+
isUpdate() {
|
|
85
|
+
return updateReg.test(this.link);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Whether this is about a new Prime Access
|
|
89
|
+
*/
|
|
90
|
+
isPrimeAccess() {
|
|
91
|
+
return primeAccessReg.test(this.link);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Whether this is about a new stream
|
|
95
|
+
*/
|
|
96
|
+
isStream() {
|
|
97
|
+
return streamReg.test(this.message);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* ETA string (at time of object creation)
|
|
101
|
+
*/
|
|
102
|
+
get eta() {
|
|
103
|
+
if (this.expiry) return `in ${timeDeltaToString(fromNow(this.expiry))}`;
|
|
104
|
+
return `${timeDeltaToString(toNow(this.date))} ago`;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* The title of the news item in the specified language
|
|
108
|
+
* @param {string} langCode Ex. 'es', 'de', 'fr'
|
|
109
|
+
* @returns {string} The title of the news item in the specified language
|
|
110
|
+
*/
|
|
111
|
+
getTitle(langCode) {
|
|
112
|
+
return langCode in this.translations ? this.translations[langCode] : this.message;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
//#endregion
|
|
116
|
+
export { News };
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
import "../../
|
|
2
|
-
import "../../NightwaveChallenge-CG3uychc.mjs";
|
|
3
|
-
import { n as RawNightwave, t as Nightwave } from "../../Nightwave-CPqMSqGK.mjs";
|
|
1
|
+
import { n as RawNightwave, t as Nightwave } from "../../Nightwave-BLHH02ht.mjs";
|
|
4
2
|
export { Nightwave, RawNightwave };
|
|
@@ -1,5 +1,58 @@
|
|
|
1
|
-
import "
|
|
2
|
-
import "
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { WorldStateObject } from "./WorldStateObject.mjs";
|
|
2
|
+
import { NightwaveChallenge } from "./NightwaveChallenge.mjs";
|
|
3
|
+
import { fromNow, languageString, timeDeltaToString } from "warframe-worldstate-data/utilities";
|
|
4
|
+
//#region lib/models/Nightwave.ts
|
|
5
|
+
/**
|
|
6
|
+
* Represents a nightwave state
|
|
7
|
+
* @augments {WorldStateObject}
|
|
8
|
+
*/
|
|
9
|
+
var Nightwave = class extends WorldStateObject {
|
|
10
|
+
/**
|
|
11
|
+
* The current season. 0-indexed.
|
|
12
|
+
*/
|
|
13
|
+
season;
|
|
14
|
+
/**
|
|
15
|
+
* Descriptor for affiliation
|
|
16
|
+
*/
|
|
17
|
+
tag;
|
|
18
|
+
/**
|
|
19
|
+
* The current season's current phase. 0-indexed.
|
|
20
|
+
*/
|
|
21
|
+
phase;
|
|
22
|
+
/**
|
|
23
|
+
* Misc params provided.
|
|
24
|
+
*/
|
|
25
|
+
params;
|
|
26
|
+
/**
|
|
27
|
+
* Array of possible challenges
|
|
28
|
+
*/
|
|
29
|
+
possibleChallenges;
|
|
30
|
+
/**
|
|
31
|
+
* Array of active challenges
|
|
32
|
+
*/
|
|
33
|
+
activeChallenges;
|
|
34
|
+
/**
|
|
35
|
+
* @param data The alert data
|
|
36
|
+
* @param deps The dependencies object
|
|
37
|
+
* @param deps.locale Locale to use for translations
|
|
38
|
+
*/
|
|
39
|
+
constructor(data, { locale } = { locale: "en" }) {
|
|
40
|
+
super(data);
|
|
41
|
+
const deps = { locale };
|
|
42
|
+
this.id = `nightwave${new Date(this.expiry).getTime()}`;
|
|
43
|
+
this.season = data.Season;
|
|
44
|
+
this.tag = languageString(data.AffiliationTag, locale);
|
|
45
|
+
this.phase = data.Phase;
|
|
46
|
+
this.params = JSON.parse(data.Params || "{}");
|
|
47
|
+
this.possibleChallenges = (data.Challenges || []).map((challenge) => new NightwaveChallenge(challenge, deps)).filter((challenge) => challenge);
|
|
48
|
+
this.activeChallenges = (data.ActiveChallenges || []).map((challenge) => new NightwaveChallenge(challenge, deps)).filter((challenge) => challenge);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* How much time is left before the nightwave expires
|
|
52
|
+
*/
|
|
53
|
+
get eta() {
|
|
54
|
+
return timeDeltaToString(fromNow(this.expiry));
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
//#endregion
|
|
58
|
+
export { Nightwave };
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import "../../
|
|
2
|
-
import { n as RawNightwaveChallenge, t as NightwaveChallenge } from "../../NightwaveChallenge-CG3uychc.mjs";
|
|
1
|
+
import { n as RawNightwaveChallenge, t as NightwaveChallenge } from "../../NightwaveChallenge-j_m4hVQU.mjs";
|
|
3
2
|
export { NightwaveChallenge, RawNightwaveChallenge };
|
|
@@ -1,4 +1,51 @@
|
|
|
1
|
-
import "
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { WorldStateObject } from "./WorldStateObject.mjs";
|
|
2
|
+
import { languageDesc, languageString } from "warframe-worldstate-data/utilities";
|
|
3
|
+
//#region lib/models/NightwaveChallenge.ts
|
|
4
|
+
const repBase = 1e3;
|
|
5
|
+
/**
|
|
6
|
+
* Represents an alert
|
|
7
|
+
* @augments {WorldStateObject}
|
|
8
|
+
*/
|
|
9
|
+
var NightwaveChallenge = class extends WorldStateObject {
|
|
10
|
+
/**
|
|
11
|
+
* Whether or not this is a daily challenge
|
|
12
|
+
*/
|
|
13
|
+
isDaily;
|
|
14
|
+
/**
|
|
15
|
+
* Whether or not the challenge is an elite challenge
|
|
16
|
+
*/
|
|
17
|
+
isElite;
|
|
18
|
+
/**
|
|
19
|
+
* The descriptor for this challenge
|
|
20
|
+
*/
|
|
21
|
+
desc;
|
|
22
|
+
/**
|
|
23
|
+
* The title for this challenge
|
|
24
|
+
*/
|
|
25
|
+
title;
|
|
26
|
+
/**
|
|
27
|
+
* Reputation reward for ranking up in the Nightwave
|
|
28
|
+
*/
|
|
29
|
+
reputation;
|
|
30
|
+
/**
|
|
31
|
+
* Whether this challenge is permanent
|
|
32
|
+
*/
|
|
33
|
+
isPermanent;
|
|
34
|
+
/**
|
|
35
|
+
* @param data The alert data
|
|
36
|
+
* @param deps The dependencies object
|
|
37
|
+
* @param deps.locale Locale to use for translations
|
|
38
|
+
*/
|
|
39
|
+
constructor(data, { locale } = { locale: "en" }) {
|
|
40
|
+
super(data);
|
|
41
|
+
this.isDaily = data.Daily || false;
|
|
42
|
+
this.isElite = /hard/gi.test(data.Challenge);
|
|
43
|
+
this.desc = languageDesc(data.Challenge, locale);
|
|
44
|
+
this.title = languageString(data.Challenge, locale);
|
|
45
|
+
this.id = `${this.expiry.getTime()}${data.Challenge.split("/").slice(-1)[0].toLowerCase()}`;
|
|
46
|
+
this.reputation = repBase + (!this.isDaily ? 3500 : 0) + (this.isElite ? 2500 : 0);
|
|
47
|
+
this.isPermanent = Boolean(data?.Permanent);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
//#endregion
|
|
51
|
+
export { NightwaveChallenge };
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import "../../
|
|
2
|
-
import { n as RawPersistentEnemy, t as PersistentEnemy } from "../../PersistentEnemy-DnnnreSz.mjs";
|
|
1
|
+
import { n as RawPersistentEnemy, t as PersistentEnemy } from "../../PersistentEnemy-BJ4twtUY.mjs";
|
|
3
2
|
export { PersistentEnemy, RawPersistentEnemy };
|
|
@@ -1,4 +1,74 @@
|
|
|
1
|
-
import "
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { WorldStateObject } from "./WorldStateObject.mjs";
|
|
2
|
+
import { languageString, node, parseDate, region } from "warframe-worldstate-data/utilities";
|
|
3
|
+
//#region lib/models/PersistentEnemy.ts
|
|
4
|
+
/**
|
|
5
|
+
* Represents a persistent enemy
|
|
6
|
+
* @augments {WorldStateObject}
|
|
7
|
+
*/
|
|
8
|
+
var PersistentEnemy = class extends WorldStateObject {
|
|
9
|
+
/**
|
|
10
|
+
* The enemy's type
|
|
11
|
+
*/
|
|
12
|
+
agentType;
|
|
13
|
+
/**
|
|
14
|
+
* The location tag
|
|
15
|
+
*/
|
|
16
|
+
locationTag;
|
|
17
|
+
/**
|
|
18
|
+
* The enemy's rank
|
|
19
|
+
*/
|
|
20
|
+
rank;
|
|
21
|
+
/**
|
|
22
|
+
* The enemy's remaining health percentage
|
|
23
|
+
*/
|
|
24
|
+
healthPercent;
|
|
25
|
+
/**
|
|
26
|
+
* The percentual damage that the enemy takes when it's defeated
|
|
27
|
+
*/
|
|
28
|
+
fleeDamage;
|
|
29
|
+
/**
|
|
30
|
+
* The region where the enemy is located
|
|
31
|
+
*/
|
|
32
|
+
region;
|
|
33
|
+
/**
|
|
34
|
+
* The last time the enemy was discovered
|
|
35
|
+
*/
|
|
36
|
+
lastDiscoveredTime;
|
|
37
|
+
/**
|
|
38
|
+
* The node at which the enemy was last discovered
|
|
39
|
+
*/
|
|
40
|
+
lastDiscoveredAt;
|
|
41
|
+
/**
|
|
42
|
+
* Whether or not the enemy is currently available
|
|
43
|
+
*/
|
|
44
|
+
isDiscovered;
|
|
45
|
+
/**
|
|
46
|
+
* Whether or not the enemy is using ticketing
|
|
47
|
+
*/
|
|
48
|
+
isUsingTicketing;
|
|
49
|
+
/**
|
|
50
|
+
* Fake ID incorporating discovery
|
|
51
|
+
*/
|
|
52
|
+
pid;
|
|
53
|
+
/**
|
|
54
|
+
* @param data The persistent enemy data
|
|
55
|
+
* @param deps The dependencies object
|
|
56
|
+
* @param deps.locale Locale to use for translations
|
|
57
|
+
*/
|
|
58
|
+
constructor(data, { locale } = { locale: "en" }) {
|
|
59
|
+
super(data);
|
|
60
|
+
this.agentType = languageString(data.AgentType, locale);
|
|
61
|
+
this.locationTag = languageString(data.LocTag, locale);
|
|
62
|
+
this.rank = data.Rank;
|
|
63
|
+
this.healthPercent = Number.parseFloat(data.HealthPercent);
|
|
64
|
+
this.fleeDamage = data.FleeDamage;
|
|
65
|
+
this.region = region(data.Region, locale);
|
|
66
|
+
this.lastDiscoveredTime = parseDate(data.LastDiscoveredTime);
|
|
67
|
+
this.lastDiscoveredAt = node(data.LastDiscoveredLocation, locale);
|
|
68
|
+
this.isDiscovered = data.Discovered;
|
|
69
|
+
this.isUsingTicketing = data.UseTicketing;
|
|
70
|
+
this.pid = `${this.id}${this.isDiscovered}`;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
//#endregion
|
|
74
|
+
export { PersistentEnemy };
|