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.
Files changed (184) hide show
  1. package/dist/{Calendar-CRM0XhAy.d.mts → Calendar-C-rbmV_t.d.mts} +1 -1
  2. package/dist/{CambionCycle-OI3v1knd.d.mts → CambionCycle-BzR_MfPH.d.mts} +2 -2
  3. package/dist/{CetusCycle-DQ4n05vO.d.mts → CetusCycle-DaqfF4J1.d.mts} +1 -1
  4. package/dist/{ConstructionProgress-DG2KzS0X.d.mts → ConstructionProgress-BRxmro3-.d.mts} +1 -1
  5. package/dist/{DarkSectorBattle-CiSe3kFm.d.mts → DarkSectorBattle-DHRl5tG1.d.mts} +1 -1
  6. package/dist/{Dependency-CNqXngHD.d.mts → Dependency-Cd-TxBJy.d.mts} +1 -1
  7. package/dist/{EarthCycle-CxtijnVV.d.mts → EarthCycle-C_oB5gDc.d.mts} +1 -1
  8. package/dist/{MidrathCycle-E0gMF3AR.d.mts → MidrathCycle-CxveqDtx.d.mts} +1 -1
  9. package/dist/{News-DxEm-q6V.d.mts → News-CJ3lD7_g.d.mts} +1 -1
  10. package/dist/{Nightwave-CPqMSqGK.d.mts → Nightwave-BLHH02ht.d.mts} +2 -2
  11. package/dist/{NightwaveChallenge-CG3uychc.d.mts → NightwaveChallenge-j_m4hVQU.d.mts} +1 -1
  12. package/dist/{PersistentEnemy-DnnnreSz.d.mts → PersistentEnemy-BJ4twtUY.d.mts} +1 -1
  13. package/dist/{VallisCycle-6DCaWFoR.d.mts → VallisCycle-as7DM4a-.d.mts} +1 -1
  14. package/dist/{ZarimanCycle-BrSLIWhD.d.mts → ZarimanCycle-DyYiVfyG.d.mts} +1 -1
  15. package/dist/{index-Bgx8kIDy.d.mts → index-C4EJ_Mpd.d.mts} +6 -6
  16. package/dist/lib/WorldState.d.mts +16 -19
  17. package/dist/lib/WorldState.mjs +32 -48
  18. package/dist/lib/models/Alert.d.mts +1 -17
  19. package/dist/lib/models/Alert.mjs +49 -7
  20. package/dist/lib/models/Archimedea.d.mts +1 -17
  21. package/dist/lib/models/Archimedea.mjs +88 -4
  22. package/dist/lib/models/Calendar.d.mts +1 -2
  23. package/dist/lib/models/Calendar.mjs +79 -4
  24. package/dist/lib/models/CambionCycle.d.mts +1 -3
  25. package/dist/lib/models/CambionCycle.mjs +28 -4
  26. package/dist/lib/models/CetusCycle.d.mts +1 -2
  27. package/dist/lib/models/CetusCycle.mjs +87 -4
  28. package/dist/lib/models/ChallengeInstance.d.mts +1 -17
  29. package/dist/lib/models/ChallengeInstance.mjs +46 -3
  30. package/dist/lib/models/ConclaveChallenge.d.mts +1 -17
  31. package/dist/lib/models/ConclaveChallenge.mjs +77 -4
  32. package/dist/lib/models/ConstructionProgress.d.mts +1 -2
  33. package/dist/lib/models/ConstructionProgress.mjs +23 -4
  34. package/dist/lib/models/DailyDeal.d.mts +1 -17
  35. package/dist/lib/models/DailyDeal.mjs +64 -4
  36. package/dist/lib/models/DarkSector.d.mts +1 -17
  37. package/dist/lib/models/DarkSector.mjs +136 -8
  38. package/dist/lib/models/DarkSectorBattle.d.mts +1 -2
  39. package/dist/lib/models/DarkSectorBattle.mjs +49 -3
  40. package/dist/lib/models/DuviriCycle.d.mts +1 -17
  41. package/dist/lib/models/DuviriCycle.mjs +55 -4
  42. package/dist/lib/models/EarthCycle.d.mts +1 -2
  43. package/dist/lib/models/EarthCycle.mjs +73 -4
  44. package/dist/lib/models/Fissure.d.mts +1 -17
  45. package/dist/lib/models/Fissure.mjs +83 -4
  46. package/dist/lib/models/FlashSale.d.mts +1 -17
  47. package/dist/lib/models/FlashSale.mjs +73 -4
  48. package/dist/lib/models/GlobalUpgrade.d.mts +1 -17
  49. package/dist/lib/models/GlobalUpgrade.mjs +56 -4
  50. package/dist/lib/models/Invasion.d.mts +1 -17
  51. package/dist/lib/models/Invasion.mjs +106 -6
  52. package/dist/lib/models/Kinepage.d.mts +1 -1
  53. package/dist/lib/models/Kinepage.mjs +23 -3
  54. package/dist/lib/models/Kuva.d.mts +1 -17
  55. package/dist/lib/models/Kuva.mjs +85 -3
  56. package/dist/lib/models/MidrathCycle.d.mts +1 -2
  57. package/dist/lib/models/MidrathCycle.mjs +66 -4
  58. package/dist/lib/models/Mission.d.mts +1 -17
  59. package/dist/lib/models/Mission.mjs +138 -5
  60. package/dist/lib/models/News.d.mts +1 -2
  61. package/dist/lib/models/News.mjs +116 -4
  62. package/dist/lib/models/Nightwave.d.mts +1 -3
  63. package/dist/lib/models/Nightwave.mjs +58 -5
  64. package/dist/lib/models/NightwaveChallenge.d.mts +1 -2
  65. package/dist/lib/models/NightwaveChallenge.mjs +51 -4
  66. package/dist/lib/models/PersistentEnemy.d.mts +1 -2
  67. package/dist/lib/models/PersistentEnemy.mjs +74 -4
  68. package/dist/lib/models/Reward.d.mts +1 -17
  69. package/dist/lib/models/Reward.mjs +71 -4
  70. package/dist/lib/models/SentientOutpost.d.mts +1 -17
  71. package/dist/lib/models/SentientOutpost.mjs +63 -3
  72. package/dist/lib/models/Simaris.d.mts +1 -17
  73. package/dist/lib/models/Simaris.mjs +33 -3
  74. package/dist/lib/models/Sortie.d.mts +1 -17
  75. package/dist/lib/models/Sortie.mjs +71 -8
  76. package/dist/lib/models/SortieVariant.d.mts +1 -17
  77. package/dist/lib/models/SortieVariant.mjs +49 -3
  78. package/dist/lib/models/SteelPathOffering.d.mts +1 -1
  79. package/dist/lib/models/SteelPathOffering.mjs +81 -3
  80. package/dist/lib/models/SyndicateJob.d.mts +1 -17
  81. package/dist/lib/models/SyndicateJob.mjs +161 -7
  82. package/dist/lib/models/SyndicateMission.d.mts +1 -17
  83. package/dist/lib/models/SyndicateMission.mjs +64 -8
  84. package/dist/lib/models/Tmp.d.mts +1 -17
  85. package/dist/lib/models/Tmp.mjs +28 -4
  86. package/dist/lib/models/VallisCycle.d.mts +1 -2
  87. package/dist/lib/models/VallisCycle.mjs +72 -4
  88. package/dist/lib/models/VoidTrader.d.mts +1 -17
  89. package/dist/lib/models/VoidTrader.mjs +76 -6
  90. package/dist/lib/models/VoidTraderItem.d.mts +1 -17
  91. package/dist/lib/models/VoidTraderItem.mjs +36 -3
  92. package/dist/lib/models/VoidTraderSchedule.d.mts +1 -17
  93. package/dist/lib/models/VoidTraderSchedule.mjs +12 -3
  94. package/dist/lib/models/WeeklyChallenge.d.mts +1 -17
  95. package/dist/lib/models/WeeklyChallenge.mjs +19 -5
  96. package/dist/lib/models/WorldEvent.d.mts +1 -17
  97. package/dist/lib/models/WorldEvent.mjs +211 -9
  98. package/dist/lib/models/WorldStateObject.d.mts +1 -1
  99. package/dist/lib/models/WorldStateObject.mjs +52 -3
  100. package/dist/lib/models/ZarimanCycle.d.mts +1 -2
  101. package/dist/lib/models/ZarimanCycle.mjs +77 -4
  102. package/dist/lib/models/index.d.mts +17 -18
  103. package/dist/lib/models/index.mjs +43 -47
  104. package/dist/lib/supporting/Dependency.d.mts +1 -1
  105. package/dist/lib/supporting/Dependency.mjs +1 -1
  106. package/dist/lib/supporting/DuviriChoice.d.mts +1 -17
  107. package/dist/lib/supporting/DuviriChoice.mjs +24 -3
  108. package/dist/lib/supporting/ExternalMission.d.mts +1 -1
  109. package/dist/lib/supporting/ExternalMission.mjs +1 -1
  110. package/dist/lib/supporting/FetchProxy.d.mts +1 -1
  111. package/dist/lib/supporting/FetchProxy.mjs +45 -3
  112. package/dist/lib/supporting/ImgCdn.d.mts +1 -1
  113. package/dist/lib/supporting/ImgCdn.mjs +6 -3
  114. package/dist/lib/supporting/KuvaLogEntry.d.mts +1 -1
  115. package/dist/lib/supporting/KuvaLogEntry.mjs +1 -1
  116. package/dist/lib/supporting/RewardData.d.mts +1 -1
  117. package/dist/lib/supporting/RewardData.mjs +75 -3
  118. package/dist/lib/supporting/RewardTypes.d.mts +1 -1
  119. package/dist/lib/supporting/RewardTypes.mjs +326 -3
  120. package/dist/lib/supporting/index.d.mts +8 -23
  121. package/dist/lib/supporting/index.mjs +6 -8
  122. package/dist/main.d.mts +24 -24
  123. package/dist/main.mjs +48 -51
  124. package/package.json +1 -1
  125. package/dist/Alert-CPT2sBmd.mjs +0 -51
  126. package/dist/Archimedea-Vo36QE99.mjs +0 -90
  127. package/dist/Calendar-_gEQ9BEd.mjs +0 -81
  128. package/dist/CambionCycle-B1pqIgks.mjs +0 -30
  129. package/dist/CetusCycle-Ct51M2pd.mjs +0 -89
  130. package/dist/ChallengeInstance-BOu_e7ML.mjs +0 -48
  131. package/dist/ConclaveChallenge-BTN6UyV6.mjs +0 -79
  132. package/dist/ConstructionProgress-BoF2P9fx.mjs +0 -25
  133. package/dist/DailyDeal-aoNeCFWT.mjs +0 -66
  134. package/dist/DarkSector-D0uJWCg7.mjs +0 -138
  135. package/dist/DarkSectorBattle-CqRYeNpe.mjs +0 -51
  136. package/dist/Dependency-BR-dAeHI.mjs +0 -1
  137. package/dist/DuviriChoice-BEBiWA-g.mjs +0 -25
  138. package/dist/DuviriCycle-Do7mMnoC.mjs +0 -57
  139. package/dist/EarthCycle-BOAlcAuQ.mjs +0 -75
  140. package/dist/ExternalMission-D3MSZgnN.mjs +0 -1
  141. package/dist/FetchProxy-Bkdk15SX.mjs +0 -46
  142. package/dist/Fissure-diM4hyi3.mjs +0 -85
  143. package/dist/FlashSale-CNfRaZhM.mjs +0 -75
  144. package/dist/GlobalUpgrade-CUtZw05z.mjs +0 -58
  145. package/dist/ImgCdn-BJOdWAbU.mjs +0 -7
  146. package/dist/Invasion-Corx1lxf.mjs +0 -108
  147. package/dist/Kinepage-CbSzge67.mjs +0 -24
  148. package/dist/Kuva-Ijy2ZGBL.mjs +0 -87
  149. package/dist/KuvaLogEntry-D_VzIT3W.mjs +0 -1
  150. package/dist/MidrathCycle-XD2T8Dx5.mjs +0 -68
  151. package/dist/Mission-b8KP-YDf.mjs +0 -140
  152. package/dist/News-zAK-sYRg.mjs +0 -118
  153. package/dist/Nightwave-cTRmlbwH.mjs +0 -60
  154. package/dist/NightwaveChallenge-C8ARG7LC.mjs +0 -53
  155. package/dist/PersistentEnemy-3Sw5E8AN.mjs +0 -76
  156. package/dist/Reward-3FBJF_hS.mjs +0 -73
  157. package/dist/RewardData-C_9b8Yhi.mjs +0 -76
  158. package/dist/RewardTypes-DUrR7H3G.mjs +0 -328
  159. package/dist/SentientOutpost-Cadk-pIW.mjs +0 -65
  160. package/dist/Simaris-D6etEQp_.mjs +0 -35
  161. package/dist/Sortie-rSBgJc6U.mjs +0 -73
  162. package/dist/SortieVariant-CnuLkkNZ.mjs +0 -51
  163. package/dist/SteelPathOffering--wm-7hwb.mjs +0 -83
  164. package/dist/SyndicateJob-R89tWqvT.mjs +0 -162
  165. package/dist/SyndicateMission-CKZDWNyf.mjs +0 -66
  166. package/dist/Tmp-BYL_mYIG.mjs +0 -30
  167. package/dist/VallisCycle-BW2g49wB.mjs +0 -74
  168. package/dist/VoidTrader-DtjtVUgR.mjs +0 -78
  169. package/dist/VoidTraderItem-Cz6x1KTF.mjs +0 -38
  170. package/dist/VoidTraderSchedule-BsJLu50V.mjs +0 -14
  171. package/dist/WeeklyChallenge-Dl2ekl6X.mjs +0 -21
  172. package/dist/WorldEvent-C-LaV2ug.mjs +0 -213
  173. package/dist/WorldStateObject-45dbRgp7.mjs +0 -54
  174. package/dist/ZarimanCycle-DoAPwgaM.mjs +0 -79
  175. package/dist/supporting-BLSXhlWM.mjs +0 -1
  176. /package/dist/{ExternalMission-C82w4uMq.d.mts → ExternalMission-CT__oi7Q.d.mts} +0 -0
  177. /package/dist/{FetchProxy-DfSTUgkf.d.mts → FetchProxy-DHSI4JPP.d.mts} +0 -0
  178. /package/dist/{ImgCdn-D0hSGSB1.d.mts → ImgCdn-DIhZrwap.d.mts} +0 -0
  179. /package/dist/{Kinepage-B-Ym_VW5.d.mts → Kinepage-CKBuvbv5.d.mts} +0 -0
  180. /package/dist/{KuvaLogEntry-cftxhjfU.d.mts → KuvaLogEntry-f4ZBn2Xf.d.mts} +0 -0
  181. /package/dist/{RewardData-DWCgJ3UT.d.mts → RewardData-BdtdUFnh.d.mts} +0 -0
  182. /package/dist/{RewardTypes-Y3tHrtIJ.d.mts → RewardTypes-BnGaD7VF.d.mts} +0 -0
  183. /package/dist/{SteelPathOffering-CQkoKi5T.d.mts → SteelPathOffering-DYjZ29sT.d.mts} +0 -0
  184. /package/dist/{WorldStateObject-C1HEDkH7.d.mts → WorldStateObject-C2KjQZjd.d.mts} +0 -0
@@ -1,3 +1,85 @@
1
- import { t as Kuva } from "../../Kuva-Ijy2ZGBL.mjs";
2
-
3
- export { Kuva };
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,3 +1,2 @@
1
- import "../../WorldStateObject-C1HEDkH7.mjs";
2
- import { t as MidrathCycle } from "../../MidrathCycle-E0gMF3AR.mjs";
1
+ import { t as MidrathCycle } from "../../MidrathCycle-CxveqDtx.mjs";
3
2
  export { MidrathCycle };
@@ -1,4 +1,66 @@
1
- import "../../WorldStateObject-45dbRgp7.mjs";
2
- import { t as MidrathCycle } from "../../MidrathCycle-XD2T8Dx5.mjs";
3
-
4
- export { MidrathCycle };
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 "../../Dependency-CNqXngHD.mjs";
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 "../../RewardTypes-DUrR7H3G.mjs";
2
- import "../../Reward-3FBJF_hS.mjs";
3
- import { t as Mission } from "../../Mission-b8KP-YDf.mjs";
4
-
5
- export { Mission };
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 };
@@ -1,3 +1,2 @@
1
- import "../../WorldStateObject-C1HEDkH7.mjs";
2
- import { n as RawNews, t as News } from "../../News-DxEm-q6V.mjs";
1
+ import { n as RawNews, t as News } from "../../News-CJ3lD7_g.mjs";
3
2
  export { News, RawNews };
@@ -1,4 +1,116 @@
1
- import "../../WorldStateObject-45dbRgp7.mjs";
2
- import { t as News } from "../../News-zAK-sYRg.mjs";
3
-
4
- export { News };
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 "../../WorldStateObject-C1HEDkH7.mjs";
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 "../../WorldStateObject-45dbRgp7.mjs";
2
- import "../../NightwaveChallenge-C8ARG7LC.mjs";
3
- import { t as Nightwave } from "../../Nightwave-cTRmlbwH.mjs";
4
-
5
- export { Nightwave };
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 "../../WorldStateObject-C1HEDkH7.mjs";
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 "../../WorldStateObject-45dbRgp7.mjs";
2
- import { t as NightwaveChallenge } from "../../NightwaveChallenge-C8ARG7LC.mjs";
3
-
4
- export { NightwaveChallenge };
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 "../../WorldStateObject-C1HEDkH7.mjs";
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 "../../WorldStateObject-45dbRgp7.mjs";
2
- import { t as PersistentEnemy } from "../../PersistentEnemy-3Sw5E8AN.mjs";
3
-
4
- export { PersistentEnemy };
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 };