From e53e906976fcf3b18f9a6df748b23f76ec9f8597 Mon Sep 17 00:00:00 2001 From: VampireKitten Date: Tue, 15 Oct 2024 20:54:00 +0200 Subject: [PATCH 001/181] Implements obtaining Focus XP via lens --- src/services/inventoryService.ts | 14 +++++++++++++- src/types/requestTypes.ts | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index b7a1059f..d81c989c 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -721,6 +721,17 @@ const addMissionComplete = (inventory: IInventoryDatabaseDocument, { Tag, Comple } }; +const addFocusXpIncreases = (inventory: IInventoryDatabaseDocument, focusXpPlus: number[] | undefined) => { + if (focusXpPlus) { + inventory.FocusXP ??= { AP_POWER: 0, AP_TACTIC: 0, AP_DEFENSE: 0, AP_ATTACK: 0, AP_WARD: 0 }; + inventory.FocusXP.AP_ATTACK += focusXpPlus[1]; + inventory.FocusXP.AP_DEFENSE += focusXpPlus[2]; + inventory.FocusXP.AP_TACTIC += focusXpPlus[3]; + inventory.FocusXP.AP_POWER += focusXpPlus[4]; + inventory.FocusXP.AP_WARD += focusXpPlus[7]; + } +}; + export const missionInventoryUpdate = async (data: IMissionInventoryUpdateRequest, accountId: string) => { const { RawUpgrades, @@ -731,7 +742,8 @@ export const missionInventoryUpdate = async (data: IMissionInventoryUpdateReques Consumables, Recipes, Missions, - FusionTreasures + FusionTreasures, + FocusXpIncreases } = data; const inventory = await getInventory(accountId); diff --git a/src/types/requestTypes.ts b/src/types/requestTypes.ts index 288bb99c..c109d87d 100644 --- a/src/types/requestTypes.ts +++ b/src/types/requestTypes.ts @@ -70,6 +70,7 @@ export interface IMissionInventoryUpdateRequest { Missions?: IMission; EvolutionProgress?: IEvolutionProgress[]; LastRegionPlayed?: TSolarMapRegion; + FocusXpIncreases?: number[]; FusionPoints?: number; // Not a part of the request, but we put it in this struct as an intermediate storage. } -- 2.47.2 From fbc76e7425037d3ac76445c290908175eab08f6f Mon Sep 17 00:00:00 2001 From: VampireKitten Date: Tue, 15 Oct 2024 21:04:25 +0200 Subject: [PATCH 002/181] Forgot one line --- src/services/inventoryService.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index d81c989c..4bc7d73d 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -805,6 +805,7 @@ export const missionInventoryUpdate = async (data: IMissionInventoryUpdateReques if (Missions) { addMissionComplete(inventory, Missions); } + addFocusXpIncreases(inventory, FocusXpIncreases); const changedInventory = await inventory.save(); return changedInventory.toJSON(); -- 2.47.2 From 6a69961c2da5d8b26ba0ce2170dfc77da927c9a0 Mon Sep 17 00:00:00 2001 From: VampireKitten Date: Tue, 15 Oct 2024 21:13:03 +0200 Subject: [PATCH 003/181] Added FocusType enum --- src/services/inventoryService.ts | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 4bc7d73d..85c3cbe1 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -722,13 +722,26 @@ const addMissionComplete = (inventory: IInventoryDatabaseDocument, { Tag, Comple }; const addFocusXpIncreases = (inventory: IInventoryDatabaseDocument, focusXpPlus: number[] | undefined) => { + enum FocusType { + AP_UNIVERSAL, + AP_ATTACK, + AP_DEFENSE, + AP_TACTIC, + AP_POWER, + AP_PRECEPT, + AP_FUSION, + AP_WARD, + AP_UMBRA, + AP_ANY + }; + if (focusXpPlus) { - inventory.FocusXP ??= { AP_POWER: 0, AP_TACTIC: 0, AP_DEFENSE: 0, AP_ATTACK: 0, AP_WARD: 0 }; - inventory.FocusXP.AP_ATTACK += focusXpPlus[1]; - inventory.FocusXP.AP_DEFENSE += focusXpPlus[2]; - inventory.FocusXP.AP_TACTIC += focusXpPlus[3]; - inventory.FocusXP.AP_POWER += focusXpPlus[4]; - inventory.FocusXP.AP_WARD += focusXpPlus[7]; + inventory.FocusXP ??= { AP_ATTACK: 0, AP_DEFENSE: 0, AP_TACTIC: 0, AP_POWER: 0, AP_WARD: 0 }; + inventory.FocusXP.AP_ATTACK += focusXpPlus[FocusType.AP_ATTACK]; + inventory.FocusXP.AP_DEFENSE += focusXpPlus[FocusType.AP_DEFENSE]; + inventory.FocusXP.AP_TACTIC += focusXpPlus[FocusType.AP_TACTIC]; + inventory.FocusXP.AP_POWER += focusXpPlus[FocusType.AP_POWER]; + inventory.FocusXP.AP_WARD += focusXpPlus[FocusType.AP_WARD]; } }; -- 2.47.2 From ce9b3393faa31e76cfc84ab41d760a3429c928e4 Mon Sep 17 00:00:00 2001 From: VampireKitten Date: Tue, 15 Oct 2024 21:15:03 +0200 Subject: [PATCH 004/181] Ran prettier --- src/services/inventoryService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 85c3cbe1..32c7973b 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -733,7 +733,7 @@ const addFocusXpIncreases = (inventory: IInventoryDatabaseDocument, focusXpPlus: AP_WARD, AP_UMBRA, AP_ANY - }; + } if (focusXpPlus) { inventory.FocusXP ??= { AP_ATTACK: 0, AP_DEFENSE: 0, AP_TACTIC: 0, AP_POWER: 0, AP_WARD: 0 }; -- 2.47.2 From abc3bd86246ce4dd9cb8927f280e87a72c77b0b8 Mon Sep 17 00:00:00 2001 From: Sainan Date: Fri, 18 Oct 2024 16:49:33 +0200 Subject: [PATCH 005/181] fix: being unable to visit Palladino in Iron Wake despite completeAllQuests (#564) --- src/controllers/api/inventoryController.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 8ff1411a..315af1cc 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -70,15 +70,22 @@ const inventoryController: RequestHandler = async (request, response) => { } if (config.completeAllQuests) { for (const quest of inventoryResponse.QuestKeys) { + quest.unlock = true; quest.Completed = true; - quest.Progress = [ - { + + let numStages = 1; + if (quest.ItemType in ExportKeys && "chainStages" in ExportKeys[quest.ItemType]) { + numStages = ExportKeys[quest.ItemType].chainStages!.length; + } + quest.Progress = []; + for (let i = 0; i != numStages; ++i) { + quest.Progress.push({ c: 0, i: false, m: false, b: [] - } - ]; + }); + } } inventoryResponse.ArchwingEnabled = true; -- 2.47.2 From ba349535fbb12a0796fe4d37ccdfccb16b66df86 Mon Sep 17 00:00:00 2001 From: Sainan Date: Fri, 18 Oct 2024 16:54:49 +0200 Subject: [PATCH 006/181] feat: implement setPlacedDecoInfo (#558) --- .../api/setPlacedDecoInfoController.ts | 12 +++++++++ src/models/personalRoomsModel.ts | 24 ++++++++++++++++-- src/routes/api.ts | 2 ++ src/services/shipCustomizationsService.ts | 23 ++++++++++++++++- src/types/shipTypes.ts | 25 +++++++++++++++++++ 5 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 src/controllers/api/setPlacedDecoInfoController.ts diff --git a/src/controllers/api/setPlacedDecoInfoController.ts b/src/controllers/api/setPlacedDecoInfoController.ts new file mode 100644 index 00000000..2e5b07ca --- /dev/null +++ b/src/controllers/api/setPlacedDecoInfoController.ts @@ -0,0 +1,12 @@ +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { ISetPlacedDecoInfoRequest } from "@/src/types/shipTypes"; +import { RequestHandler } from "express"; +import { handleSetPlacedDecoInfo } from "@/src/services/shipCustomizationsService"; + +// eslint-disable-next-line @typescript-eslint/no-misused-promises +export const setPlacedDecoInfoController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const payload = JSON.parse(req.body as string) as ISetPlacedDecoInfoRequest; + await handleSetPlacedDecoInfo(accountId, payload); + res.end(); +}; diff --git a/src/models/personalRoomsModel.ts b/src/models/personalRoomsModel.ts index 8a7caaf0..cab7ad41 100644 --- a/src/models/personalRoomsModel.ts +++ b/src/models/personalRoomsModel.ts @@ -1,14 +1,34 @@ import { toOid } from "@/src/helpers/inventoryHelpers"; import { IOrbiter, IPersonalRooms, PersonalRoomsModelType } from "@/src/types/personalRoomsTypes"; -import { IApartment, IGardening, IPlacedDecosDatabase } from "@/src/types/shipTypes"; +import { IApartment, IGardening, IPlacedDecosDatabase, IPictureFrameInfo } from "@/src/types/shipTypes"; import { Schema, model } from "mongoose"; +const pictureFrameInfoSchema = new Schema( + { + Image: String, + Filter: String, + XOffset: Number, + YOffset: Number, + Scale: Number, + InvertX: Boolean, + InvertY: Boolean, + ColorCorrection: Number, + Text: String, + TextScale: Number, + TextColorA: Number, + TextColorB: Number, + TextOrientation: Number + }, + { id: false, _id: false } +); + const placedDecosSchema = new Schema( { Type: String, Pos: [Number], Rot: [Number], - Scale: Number + Scale: Number, + PictureFrameInfo: { type: pictureFrameInfoSchema, default: undefined } }, { id: false } ); diff --git a/src/routes/api.ts b/src/routes/api.ts index 373ef119..8f8687b0 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -51,6 +51,7 @@ import { sellController } from "@/src/controllers/api/sellController"; import { setActiveQuestController } from "@/src/controllers/api/setActiveQuestController"; import { setActiveShipController } from "@/src/controllers/api/setActiveShipController"; import { setBootLocationController } from "@/src/controllers/api/setBootLocationController"; +import { setPlacedDecoInfoController } from "@/src/controllers/api/setPlacedDecoInfoController"; import { setShipCustomizationsController } from "@/src/controllers/api/setShipCustomizationsController"; import { setSupportedSyndicateController } from "@/src/controllers/api/setSupportedSyndicateController"; import { setWeaponSkillTreeController } from "../controllers/api/setWeaponSkillTreeController"; @@ -128,6 +129,7 @@ apiRouter.post("/purchase.php", purchaseController); apiRouter.post("/rerollRandomMod.php", rerollRandomModController); apiRouter.post("/saveLoadout.php", saveLoadoutController); apiRouter.post("/sell.php", sellController); +apiRouter.post("/setPlacedDecoInfo.php", setPlacedDecoInfoController); apiRouter.post("/setShipCustomizations.php", setShipCustomizationsController); apiRouter.post("/setWeaponSkillTree.php", setWeaponSkillTreeController); apiRouter.post("/shipDecorations.php", shipDecorationsController); diff --git a/src/services/shipCustomizationsService.ts b/src/services/shipCustomizationsService.ts index d21510e7..170a69f0 100644 --- a/src/services/shipCustomizationsService.ts +++ b/src/services/shipCustomizationsService.ts @@ -4,7 +4,8 @@ import { ISetShipCustomizationsRequest, IShipDatabase, IShipDecorationsRequest, - IShipDecorationsResponse + IShipDecorationsResponse, + ISetPlacedDecoInfoRequest } from "@/src/types/shipTypes"; import { logger } from "@/src/utils/logger"; import { Types } from "mongoose"; @@ -131,3 +132,23 @@ export const handleSetShipDecorations = async ( return { DecoId: decoId.toString(), Room: placedDecoration.Room, IsApartment: placedDecoration.IsApartment }; }; + +export const handleSetPlacedDecoInfo = async (accountId: string, req: ISetPlacedDecoInfoRequest): Promise => { + const personalRooms = await getPersonalRooms(accountId); + + const room = personalRooms.Ship.Rooms.find(room => room.Name === req.Room); + if (!room) { + logger.error("room not found"); + throw new Error("room not found"); + } + + const placedDeco = room.PlacedDecos?.find(x => x._id.toString() == req.DecoId); + if (!placedDeco) { + logger.error("deco not found"); + throw new Error("deco not found"); + } + + placedDeco.PictureFrameInfo = req.PictureFrameInfo; + + await personalRooms.save(); +}; diff --git a/src/types/shipTypes.ts b/src/types/shipTypes.ts index 6b0e019f..77b5cd8a 100644 --- a/src/types/shipTypes.ts +++ b/src/types/shipTypes.ts @@ -70,6 +70,7 @@ export interface IPlacedDecosDatabase { Pos: [number, number, number]; Rot: [number, number, number]; Scale: number; + PictureFrameInfo?: IPictureFrameInfo; _id: Types.ObjectId; } @@ -115,3 +116,27 @@ export interface IShipDecorationsResponse { OldRoom?: string; NewRoom?: string; } + +export interface ISetPlacedDecoInfoRequest { + DecoType: string; + DecoId: string; + Room: string; + PictureFrameInfo: IPictureFrameInfo; + BootLocation: string; +} + +export interface IPictureFrameInfo { + Image: string; + Filter: string; + XOffset: number; + YOffset: number; + Scale: number; + InvertX: boolean; + InvertY: boolean; + ColorCorrection: number; + Text: string; + TextScale: number; + TextColorA: number; + TextColorB: number; + TextOrientation: number; +} -- 2.47.2 From c20e3ea01d5c70c82a4dfb35ebe2f2039601a89f Mon Sep 17 00:00:00 2001 From: Sainan Date: Fri, 18 Oct 2024 17:03:24 +0200 Subject: [PATCH 007/181] chore: update warframe-riven-info (#553) --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index c7968a2c..28015e3a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "express": "^5.0.0-beta.3", "mongoose": "^8.4.5", "warframe-public-export-plus": "^0.5.2", - "warframe-riven-info": "^0.1.1", + "warframe-riven-info": "^0.1.2", "winston": "^3.13.0", "winston-daily-rotate-file": "^5.0.0" }, @@ -3783,9 +3783,9 @@ "integrity": "sha512-mv7abHis5ytlevnx9lSLwnqnv5/3t322/OKkR99Hrw+w7Qm+Ps6agZcTqNaIy6zrM1vsvWY1NnbxVe2+JIW6/Q==" }, "node_modules/warframe-riven-info": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/warframe-riven-info/-/warframe-riven-info-0.1.1.tgz", - "integrity": "sha512-Flh4aObS+b+YroemTyrFflM0N6AmjqPhVXi52M7JDr9BLSVPUQJMaccQpEdgrdbVfgkPzrdHvVgAjXEhA7CslQ==" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/warframe-riven-info/-/warframe-riven-info-0.1.2.tgz", + "integrity": "sha512-j09BbfWGyCEKv19jP8c0/Eb0gupJsyLNGaHgCIg3wYkTx5dlr8jSPfTpB1rkMOUiURpWKAOrfnPGrgFPbfNtWw==" }, "node_modules/webidl-conversions": { "version": "7.0.0", diff --git a/package.json b/package.json index 7dad1e88..486d0a29 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "express": "^5.0.0-beta.3", "mongoose": "^8.4.5", "warframe-public-export-plus": "^0.5.2", - "warframe-riven-info": "^0.1.1", + "warframe-riven-info": "^0.1.2", "winston": "^3.13.0", "winston-daily-rotate-file": "^5.0.0" }, -- 2.47.2 From 1a029ebb4bbe714f809d36f2888daa192db4f2b7 Mon Sep 17 00:00:00 2001 From: Vampire Kitten <95658710+VampireKitten@users.noreply.github.com> Date: Fri, 18 Oct 2024 18:13:53 +0200 Subject: [PATCH 008/181] fix: missing vendor infos (#565) --- .../api/getVendorInfoController.ts | 114 ++++++- ...EntratiFragmentVendorProductsManifest.json | 300 ++++++++++++++++ .../DeimosFishmongerVendorManifest.json | 106 ++++++ ...sHivemindCommisionsManifestFishmonger.json | 241 +++++++++++++ ...osHivemindCommisionsManifestPetVendor.json | 287 ++++++++++++++++ ...sHivemindCommisionsManifestProspector.json | 312 +++++++++++++++++ ...HivemindCommisionsManifestTokenVendor.json | 223 ++++++++++++ ...HivemindCommisionsManifestWeaponsmith.json | 254 ++++++++++++++ .../DeimosHivemindTokenVendorManifest.json | 286 ++++++++++++++++ .../DeimosPetVendorManifest.json | 136 ++++++++ .../DeimosProspectorVendorManifest.json | 61 ++++ .../DuviriAcrithisVendorManifest.json | 321 ++++++++++++++++++ .../EntratiLabsEntratiLabVendorManifest.json | 245 +++++++++++++ ...ratiLabsEntratiLabsCommisionsManifest.json | 97 ++++++ .../HubsIronwakeDondaVendorManifest.json | 125 +++++++ .../HubsRailjackCrewMemberVendorManifest.json | 244 +++++++++++++ .../OstronFishmongerVendorManifest.json | 106 ++++++ .../OstronPetVendorManifest.json | 94 +++++ .../OstronProspectorVendorManifest.json | 62 ++++ .../SolarisDebtTokenVendorManifest.json | 248 ++++++++++++++ ...sDebtTokenVendorRepossessionsManifest.json | 126 +++++++ .../SolarisFishmongerVendorManifest.json | 106 ++++++ .../SolarisProspectorVendorManifest.json | 61 ++++ 23 files changed, 4153 insertions(+), 2 deletions(-) create mode 100644 static/fixed_responses/getVendorInfo/DeimosEntratiFragmentVendorProductsManifest.json create mode 100644 static/fixed_responses/getVendorInfo/DeimosFishmongerVendorManifest.json create mode 100644 static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestFishmonger.json create mode 100644 static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestPetVendor.json create mode 100644 static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestProspector.json create mode 100644 static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestTokenVendor.json create mode 100644 static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestWeaponsmith.json create mode 100644 static/fixed_responses/getVendorInfo/DeimosHivemindTokenVendorManifest.json create mode 100644 static/fixed_responses/getVendorInfo/DeimosPetVendorManifest.json create mode 100644 static/fixed_responses/getVendorInfo/DeimosProspectorVendorManifest.json create mode 100644 static/fixed_responses/getVendorInfo/DuviriAcrithisVendorManifest.json create mode 100644 static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json create mode 100644 static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabsCommisionsManifest.json create mode 100644 static/fixed_responses/getVendorInfo/HubsIronwakeDondaVendorManifest.json create mode 100644 static/fixed_responses/getVendorInfo/HubsRailjackCrewMemberVendorManifest.json create mode 100644 static/fixed_responses/getVendorInfo/OstronFishmongerVendorManifest.json create mode 100644 static/fixed_responses/getVendorInfo/OstronPetVendorManifest.json create mode 100644 static/fixed_responses/getVendorInfo/OstronProspectorVendorManifest.json create mode 100644 static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorManifest.json create mode 100644 static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorRepossessionsManifest.json create mode 100644 static/fixed_responses/getVendorInfo/SolarisFishmongerVendorManifest.json create mode 100644 static/fixed_responses/getVendorInfo/SolarisProspectorVendorManifest.json diff --git a/src/controllers/api/getVendorInfoController.ts b/src/controllers/api/getVendorInfoController.ts index aa831028..438ee5b9 100644 --- a/src/controllers/api/getVendorInfoController.ts +++ b/src/controllers/api/getVendorInfoController.ts @@ -1,22 +1,132 @@ import { RequestHandler } from "express"; import ArchimedeanVendorManifest from "@/static/fixed_responses/getVendorInfo/ArchimedeanVendorManifest.json"; +import DeimosEntratiFragmentVendorProductsManifest from "@/static/fixed_responses/getVendorInfo/DeimosEntratiFragmentVendorProductsManifest.json"; +import DeimosFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosFishmongerVendorManifest.json"; +import DeimosHivemindCommisionsManifestFishmonger from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestFishmonger.json"; +import DeimosHivemindCommisionsManifestPetVendor from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestPetVendor.json"; +import DeimosHivemindCommisionsManifestProspector from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestProspector.json"; +import DeimosHivemindCommisionsManifestTokenVendor from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestTokenVendor.json"; +import DeimosHivemindCommisionsManifestWeaponsmith from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestWeaponsmith.json"; +import DeimosHivemindTokenVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosHivemindTokenVendorManifest.json"; +import DeimosPetVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosPetVendorManifest.json"; +import DeimosProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosProspectorVendorManifest.json"; +import DuviriAcrithisVendorManifest from "@/static/fixed_responses/getVendorInfo/DuviriAcrithisVendorManifest.json"; +import EntratiLabsEntratiLabsCommisionsManifest from "@/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabsCommisionsManifest.json"; +import EntratiLabsEntratiLabVendorManifest from "@/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json"; +import HubsIronwakeDondaVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsIronwakeDondaVendorManifest.json"; +import HubsRailjackCrewMemberVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsRailjackCrewMemberVendorManifest.json"; import MaskSalesmanManifest from "@/static/fixed_responses/getVendorInfo/MaskSalesmanManifest.json"; +import OstronFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronFishmongerVendorManifest.json"; +import OstronProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronProspectorVendorManifest.json"; +import OstronPetVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronPetVendorManifest.json"; +import SolarisFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisFishmongerVendorManifest.json"; +import SolarisProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisProspectorVendorManifest.json"; +import SolarisDebtTokenVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorManifest.json"; +import SolarisDebtTokenVendorRepossessionsManifest from "@/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorRepossessionsManifest.json"; import ZarimanCommisionsManifestArchimedean from "@/static/fixed_responses/getVendorInfo/ZarimanCommisionsManifestArchimedean.json"; export const getVendorInfoController: RequestHandler = (req, res) => { switch (req.query.vendor as string) { - case "/Lotus/Types/Game/VendorManifests/Zariman/ArchimedeanVendorManifest": - res.json(ArchimedeanVendorManifest); + case "/Lotus/Types/Game/VendorManifests/Ostron/FishmongerVendorManifest": + res.json(OstronFishmongerVendorManifest); + break; + + case "/Lotus/Types/Game/VendorManifests/Ostron/ProspectorVendorManifest": + res.json(OstronProspectorVendorManifest); + break; + + case "/Lotus/Types/Game/VendorManifests/Ostron/PetVendorManifest": + res.json(OstronPetVendorManifest); break; case "/Lotus/Types/Game/VendorManifests/Ostron/MaskSalesmanManifest": res.json(MaskSalesmanManifest); break; + case "/Lotus/Types/Game/VendorManifests/Solaris/FishmongerVendorManifest": + res.json(SolarisFishmongerVendorManifest); + break; + + case "/Lotus/Types/Game/VendorManifests/Solaris/ProspectorVendorManifest": + res.json(SolarisProspectorVendorManifest); + break; + + case "/Lotus/Types/Game/VendorManifests/Solaris/DebtTokenVendorManifest": + res.json(SolarisDebtTokenVendorManifest); + break; + + case "/Lotus/Types/Game/VendorManifests/Solaris/DebtTokenVendorRepossessionsManifest": + res.json(SolarisDebtTokenVendorRepossessionsManifest); + break; + + case "/Lotus/Types/Game/VendorManifests/Hubs/RailjackCrewMemberVendorManifest": + res.json(HubsRailjackCrewMemberVendorManifest); + break; + + case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestWeaponsmith": + res.json(DeimosHivemindCommisionsManifestWeaponsmith); + break; + + case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestFishmonger": + res.json(DeimosHivemindCommisionsManifestFishmonger); + break; + + case "/Lotus/Types/Game/VendorManifests/Deimos/FishmongerVendorManifest": + res.json(DeimosFishmongerVendorManifest); + break; + + case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestProspector": + res.json(DeimosHivemindCommisionsManifestProspector); + break; + + case "/Lotus/Types/Game/VendorManifests/Deimos/ProspectorVendorManifest": + res.json(DeimosProspectorVendorManifest); + break; + + case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestPetVendor": + res.json(DeimosHivemindCommisionsManifestPetVendor); + break; + + case "/Lotus/Types/Game/VendorManifests/Deimos/PetVendorManifest": + res.json(DeimosPetVendorManifest); + break; + + case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestTokenVendor": + res.json(DeimosHivemindCommisionsManifestTokenVendor); + break; + + case "/Lotus/Types/Game/VendorManifests/Deimos/EntratiFragmentVendorProductsManifest": + res.json(DeimosEntratiFragmentVendorProductsManifest); + break; + + case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindTokenVendorManifest": + res.json(DeimosHivemindTokenVendorManifest); + break; + + case "/Lotus/Types/Game/VendorManifests/Hubs/IronwakeDondaVendorManifest": + res.json(HubsIronwakeDondaVendorManifest); + break; + + case "/Lotus/Types/Game/VendorManifests/Zariman/ArchimedeanVendorManifest": + res.json(ArchimedeanVendorManifest); + break; + + case "/Lotus/Types/Game/VendorManifests/Duviri/AcrithisVendorManifest": + res.json(DuviriAcrithisVendorManifest); + break; + case "/Lotus/Types/Game/VendorManifests/Zariman/ZarimanCommisionsManifestArchimedean": res.json(ZarimanCommisionsManifestArchimedean); break; + case "/Lotus/Types/Game/VendorManifests/EntratiLabs/EntratiLabVendorManifest": + res.json(EntratiLabsEntratiLabVendorManifest); + break; + + case "/Lotus/Types/Game/VendorManifests/EntratiLabs/EntratiLabsCommisionsManifest": + res.json(EntratiLabsEntratiLabsCommisionsManifest); + break; + default: throw new Error(`Unknown vendor: ${req.query.vendor}`); } diff --git a/static/fixed_responses/getVendorInfo/DeimosEntratiFragmentVendorProductsManifest.json b/static/fixed_responses/getVendorInfo/DeimosEntratiFragmentVendorProductsManifest.json new file mode 100644 index 00000000..07f94813 --- /dev/null +++ b/static/fixed_responses/getVendorInfo/DeimosEntratiFragmentVendorProductsManifest.json @@ -0,0 +1,300 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5f456e01c96976e97d6b802e" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/EntratiFragmentVendorProductsManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/SeriglassShard", + "ItemPrices": [ + { + "ItemCount": 20, + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e8390" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/PhotoboothTileDeimosBouncy", + "ItemPrices": [ + { + "ItemCount": 50, + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e8391" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/PhotoboothTileDeimosBreakthrough", + "ItemPrices": [ + { + "ItemCount": 50, + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e8392" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/PhotoboothTileDeimosCatacombs", + "ItemPrices": [ + { + "ItemCount": 50, + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e8393" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/PhotoboothTileDeimosDownfall", + "ItemPrices": [ + { + "ItemCount": 50, + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e8394" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/PhotoboothTileDeimosObsession", + "ItemPrices": [ + { + "ItemCount": 50, + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e8395" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/PhotoboothTileDeimosTunnels", + "ItemPrices": [ + { + "ItemCount": 50, + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e8396" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Deimos/FatherTokenShipDeco", + "ItemPrices": [ + { + "ItemCount": 10, + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonA", + "ProductCategory": "MiscItems" + }, + { + "ItemCount": 5, + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e83f1" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Deimos/LisetPropEntratiLamp", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonB", + "ItemCount": 12, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e83f2" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Deimos/LisetPropInfestedCrate", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonA", + "ItemCount": 11, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e83f3" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Deimos/LisetPropInfestedCystC", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", + "ItemCount": 10, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e83f4" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/StoreItems/AvatarImages/RequiemRisGlyph", + "ItemPrices": [ + { + "ItemCount": 15, + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "Id": { + "$oid": "66fd60b10ba592c4c95e83f5" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Deimos/MotherTokenShipDeco", + "ItemPrices": [ + { + "ItemCount": 10, + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonB", + "ProductCategory": "MiscItems" + }, + { + "ItemCount": 5, + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e83f6" + } + } + ], + "PropertyTextHash": "DB953EE163A65B3BCC0552902321D791", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/DeimosFishmongerVendorManifest.json b/static/fixed_responses/getVendorInfo/DeimosFishmongerVendorManifest.json new file mode 100644 index 00000000..ac6c0951 --- /dev/null +++ b/static/fixed_responses/getVendorInfo/DeimosFishmongerVendorManifest.json @@ -0,0 +1,106 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5f456e01c96976e97d6b8016" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/FishmongerVendorManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Deimos/FishParts/DeimosOrokinFishAPartItem", + "PremiumPrice": [9, 9], + "Bin": "BIN_1", + "QuantityMultiplier": 10, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e91b9" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishDPartItem", + "PremiumPrice": [17, 17], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e91ba" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", + "PremiumPrice": [10, 10], + "Bin": "BIN_1", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e91bb" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishBPartItem", + "PremiumPrice": [6, 6], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e91bc" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishAPartItem", + "PremiumPrice": [5, 5], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e91bd" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Deimos/FishParts/DeimosGenericSharedFishPartItem", + "PremiumPrice": [7, 7], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e91be" + } + } + ], + "PropertyTextHash": "6DF13A7FB573C25B4B4F989CBEFFC615", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestFishmonger.json b/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestFishmonger.json new file mode 100644 index 00000000..fd6a561b --- /dev/null +++ b/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestFishmonger.json @@ -0,0 +1,241 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5f456e01c96976e97d6b8009" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestFishmonger", + "ItemManifest": [ + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskC", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishFPartItem", + "ItemCount": 6, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", + "ItemCount": 16, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 63978959, + "Id": { + "$oid": "66fd60b10ba592c4c95e82cc" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishBPartItem", + "ItemCount": 5, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishDPartItem", + "ItemCount": 4, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 3808064409, + "Id": { + "$oid": "66fd60b10ba592c4c95e82cd" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishEPartItem", + "ItemCount": 2, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", + "ItemCount": 2, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 3849710569, + "Id": { + "$oid": "66fd60b10ba592c4c95e82d0" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosGenericInfestedFishPartItem", + "ItemCount": 5, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", + "ItemCount": 4, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 1687111317, + "Id": { + "$oid": "66fd60b10ba592c4c95e82d1" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishAPartItem", + "ItemCount": 4, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishBPartItem", + "ItemCount": 4, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2267414276, + "Id": { + "$oid": "66fd60b10ba592c4c95e82d2" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosGenericInfestedFishPartItem", + "ItemCount": 6, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosGenericSharedFishPartItem", + "ItemCount": 6, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 1497494256, + "Id": { + "$oid": "66fd60b10ba592c4c95e82d3" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosGenericInfestedFishPartItem", + "ItemCount": 5, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", + "ItemCount": 2, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2883527039, + "Id": { + "$oid": "66fd60b10ba592c4c95e82d4" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskC", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishGPartItem", + "ItemCount": 10, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", + "ItemCount": 12, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 4116691539, + "Id": { + "$oid": "66fd60b10ba592c4c95e82d5" + } + } + ], + "PropertyTextHash": "54B6992C6314367F8EEA74B7F1A1C352", + "RandomSeedType": "VRST_FLAVOUR_TEXT", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestPetVendor.json b/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestPetVendor.json new file mode 100644 index 00000000..44966e70 --- /dev/null +++ b/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestPetVendor.json @@ -0,0 +1,287 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5f456e03c96976e97d6b80a3" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestPetVendor", + "ItemManifest": [ + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedMaggotRare", + "ItemCount": 2, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedMaggotCommon", + "ItemCount": 4, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2707699975, + "Id": { + "$oid": "66fd60b10ba592c4c95e8897" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedPredatorCommon", + "ItemCount": 2, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedMaggotCommon", + "ItemCount": 4, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 3610714639, + "Id": { + "$oid": "66fd60b10ba592c4c95e8898" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedPredatorCommon", + "ItemCount": 2, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedMaggotRare", + "ItemCount": 1, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 1782149988, + "Id": { + "$oid": "66fd60b10ba592c4c95e8899" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskC", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedMergooCommon", + "ItemCount": 3, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2149416825, + "Id": { + "$oid": "66fd60b10ba592c4c95e889a" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedCritterRare", + "ItemCount": 2, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedKdriveUncommon", + "ItemCount": 2, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 890863265, + "Id": { + "$oid": "66fd60b10ba592c4c95e889b" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedCritterCommon", + "ItemCount": 4, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedPredatorCommon", + "ItemCount": 4, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2507606934, + "Id": { + "$oid": "66fd60b10ba592c4c95e889c" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskC", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedPredatorRare", + "ItemCount": 5, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 1037784729, + "Id": { + "$oid": "66fd60b10ba592c4c95e889e" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedMaggotCommon", + "ItemCount": 4, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedCritterCommon", + "ItemCount": 4, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2048707501, + "Id": { + "$oid": "66fd60b10ba592c4c95e889f" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedKdriveRare", + "ItemCount": 2, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedPredatorCommon", + "ItemCount": 2, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 4038149313, + "Id": { + "$oid": "66fd60b10ba592c4c95e88a0" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskD", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedMergooCommon", + "ItemCount": 3, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedPredatorRare", + "ItemCount": 3, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_3", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2155290001, + "Id": { + "$oid": "66fd60b10ba592c4c95e88a1" + } + } + ], + "PropertyTextHash": "61E66B4E9E5A121DD06A476AE2A81B24", + "RandomSeedType": "VRST_FLAVOUR_TEXT", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestProspector.json b/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestProspector.json new file mode 100644 index 00000000..7b1d1fad --- /dev/null +++ b/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestProspector.json @@ -0,0 +1,312 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5f456e01c96976e97d6b7ff1" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestProspector", + "ItemManifest": [ + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreAItem", + "ItemCount": 10, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemBItem", + "ItemCount": 8, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 1370972414, + "Id": { + "$oid": "66fd60b20ba592c4c95e8ef8" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskC", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreBItem", + "ItemCount": 20, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosUncommonGemAItem", + "ItemCount": 8, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosUncommonOreAItem", + "ItemCount": 20, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2361790143, + "Id": { + "$oid": "66fd60b20ba592c4c95e8ef9" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemAItem", + "ItemCount": 6, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreAItem", + "ItemCount": 10, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 472210739, + "Id": { + "$oid": "66fd60b20ba592c4c95e8efb" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreBItem", + "ItemCount": 12, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreAItem", + "ItemCount": 15, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 3072462886, + "Id": { + "$oid": "66fd60b20ba592c4c95e8efd" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemAItem", + "ItemCount": 8, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreAItem", + "ItemCount": 10, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 767765909, + "Id": { + "$oid": "66fd60b20ba592c4c95e8efe" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskD", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosEidolonGemAItem", + "ItemCount": 5, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosEidolonGemBItem", + "ItemCount": 2, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosRareOreAItem", + "ItemCount": 22, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_3", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 512512880, + "Id": { + "$oid": "66fd60b20ba592c4c95e8eff" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreAItem", + "ItemCount": 10, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemAItem", + "ItemCount": 6, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2037734419, + "Id": { + "$oid": "66fd60b20ba592c4c95e8f00" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosUncommonOreAItem", + "ItemCount": 13, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreAItem", + "ItemCount": 8, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 1433662587, + "Id": { + "$oid": "66fd60b20ba592c4c95e8f01" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreAItem", + "ItemCount": 12, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemAItem", + "ItemCount": 8, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 1618492734, + "Id": { + "$oid": "66fd60b20ba592c4c95e8f02" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskD", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosUncommonGemAItem", + "ItemCount": 7, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemBItem", + "ItemCount": 10, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosRareOreAItem", + "ItemCount": 12, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_3", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 4032699594, + "Id": { + "$oid": "66fd60b20ba592c4c95e8f03" + } + } + ], + "PropertyTextHash": "0AC3C284471037011B36EC51238D13A9", + "RandomSeedType": "VRST_FLAVOUR_TEXT", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestTokenVendor.json b/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestTokenVendor.json new file mode 100644 index 00000000..dcc45dc9 --- /dev/null +++ b/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestTokenVendor.json @@ -0,0 +1,223 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5f456e03c96976e97d6b80d2" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestTokenVendor", + "ItemManifest": [ + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Grandmother/GrandmotherTaskD", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonC", + "ItemCount": 10, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonA", + "ItemCount": 10, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonB", + "ItemCount": 10, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonA", + "ItemCount": 10, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 1415858946, + "Id": { + "$oid": "670a47b1872b2325705e746c" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Grandmother/GrandmotherTaskD", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonB", + "ItemCount": 2, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonA", + "ItemCount": 10, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonA", + "ItemCount": 10, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonB", + "ItemCount": 10, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 3178511462, + "Id": { + "$oid": "670a47b1872b2325705e746e" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Grandmother/GrandmotherTaskB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonA", + "ItemCount": 10, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonC", + "ItemCount": 10, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 3313207881, + "Id": { + "$oid": "670a47b1872b2325705e7471" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Grandmother/GrandmotherTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonB", + "ItemCount": 2, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2241288767, + "Id": { + "$oid": "670a47b1872b2325705e7472" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Grandmother/GrandmotherTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonB", + "ItemCount": 10, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 3395082536, + "Id": { + "$oid": "670a47b1872b2325705e7473" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Grandmother/GrandmotherTaskB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonC", + "ItemCount": 10, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonB", + "ItemCount": 10, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 493457277, + "Id": { + "$oid": "670a47b1872b2325705e7474" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Grandmother/GrandmotherTaskB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonB", + "ItemCount": 10, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonB", + "ItemCount": 2, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 4225814786, + "Id": { + "$oid": "670a47b1872b2325705e7475" + } + } + ], + "PropertyTextHash": "58884EC7ECE7D22AD4BD9E9B436C37A8", + "RandomSeedType": "VRST_FLAVOUR_TEXT", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestWeaponsmith.json b/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestWeaponsmith.json new file mode 100644 index 00000000..9a3c5805 --- /dev/null +++ b/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestWeaponsmith.json @@ -0,0 +1,254 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5f456e02c96976e97d6b8049" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestWeaponsmith", + "ItemManifest": [ + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfGorgaricusSeedItem", + "ItemCount": 16, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2438288725, + "Id": { + "$oid": "66fd60b00ba592c4c95e7caf" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskC", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Game/FishBait/Infested/OrokinFishBaitA", + "ItemCount": 6, + "ProductCategory": "Consumables" + }, + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfMapricoFruitItem", + "ItemCount": 21, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Game/FishBait/Infested/InfestedFishBaitA", + "ItemCount": 6, + "ProductCategory": "Consumables" + } + ], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2431016296, + "Id": { + "$oid": "66fd60b00ba592c4c95e7cb2" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfMapricoFruitItem", + "ItemCount": 16, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 18484856, + "Id": { + "$oid": "66fd60b00ba592c4c95e7cb3" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfMapricoFruitItem", + "ItemCount": 14, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2278976516, + "Id": { + "$oid": "66fd60b00ba592c4c95e7cb4" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskC", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Game/FishBait/Infested/OrokinFishBaitA", + "ItemCount": 7, + "ProductCategory": "Consumables" + }, + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/OrbStoneItem", + "ItemCount": 25, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Game/FishBait/Infested/InfestedFishBaitA", + "ItemCount": 6, + "ProductCategory": "Consumables" + } + ], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 3150323898, + "Id": { + "$oid": "66fd60b00ba592c4c95e7cb5" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfMapricoFruitItem", + "ItemCount": 8, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 3971758486, + "Id": { + "$oid": "66fd60b00ba592c4c95e7cb6" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfGorgaricusSeedItem", + "ItemCount": 17, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/OrbStoneItem", + "ItemCount": 18, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2512835718, + "Id": { + "$oid": "66fd60b00ba592c4c95e7cb7" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/OrbStoneItem", + "ItemCount": 8, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 825411410, + "Id": { + "$oid": "66fd60b00ba592c4c95e7cb8" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfGorgaricusSeedItem", + "ItemCount": 22, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/OrbStoneItem", + "ItemCount": 12, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2383349671, + "Id": { + "$oid": "66fd60b00ba592c4c95e7cb9" + } + } + ], + "PropertyTextHash": "CE9413585756FA39B793A9814E74E49F", + "RandomSeedType": "VRST_FLAVOUR_TEXT", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/DeimosHivemindTokenVendorManifest.json b/static/fixed_responses/getVendorInfo/DeimosHivemindTokenVendorManifest.json new file mode 100644 index 00000000..1d165fc7 --- /dev/null +++ b/static/fixed_responses/getVendorInfo/DeimosHivemindTokenVendorManifest.json @@ -0,0 +1,286 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5fb70313c96976e97d6be6fe" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/HivemindTokenVendorManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedySonB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishBPartItem", + "ItemCount": 36, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", + "ItemCount": 20, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishEPartItem", + "ItemCount": 36, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 379215713, + "Id": { + "$oid": "66fd60b20ba592c4c95e9308" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedyMotherB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosGenericInfestedFishPartItem", + "ItemCount": 80, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfGorgaricusSeedItem", + "ItemCount": 32, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", + "ItemCount": 28, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2534781881, + "Id": { + "$oid": "66fd60b20ba592c4c95e9309" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedyDaughterB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosUncommonGemAItem", + "ItemCount": 28, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", + "ItemCount": 32, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishAPartItem", + "ItemCount": 32, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 1507786123, + "Id": { + "$oid": "66fd60b20ba592c4c95e930a" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedySonA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosRareGemAItem", + "ItemCount": 15, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemAItem", + "ItemCount": 30, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfGorgaricusSeedItem", + "ItemCount": 21, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 616241643, + "Id": { + "$oid": "66fd60b20ba592c4c95e930b" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedyOtakA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishBPartItem", + "ItemCount": 21, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", + "ItemCount": 27, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishEPartItem", + "ItemCount": 27, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2888479655, + "Id": { + "$oid": "66fd60b20ba592c4c95e930c" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedyGrandmotherA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemBItem", + "ItemCount": 20, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishBPartItem", + "ItemCount": 28, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfGorgaricusSeedItem", + "ItemCount": 24, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemAItem", + "ItemCount": 20, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2874726481, + "Id": { + "$oid": "66fd60b20ba592c4c95e930d" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedyFatherA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosGenericSharedFishPartItem", + "ItemCount": 75, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosUncommonGemAItem", + "ItemCount": 27, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/OrbStoneItem", + "ItemCount": 30, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 274676857, + "Id": { + "$oid": "66fd60b20ba592c4c95e930e" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedyDaughterA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfGorgaricusSeedItem", + "ItemCount": 24, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishBPartItem", + "ItemCount": 30, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosGenericSharedFishPartItem", + "ItemCount": 51, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 2487943761, + "Id": { + "$oid": "66fd60b20ba592c4c95e930f" + } + } + ], + "PropertyTextHash": "C34BF0BEDEAF7CBB0EEBFFECDFD6646D", + "RandomSeedType": "VRST_FLAVOUR_TEXT", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/DeimosPetVendorManifest.json b/static/fixed_responses/getVendorInfo/DeimosPetVendorManifest.json new file mode 100644 index 00000000..76d738ea --- /dev/null +++ b/static/fixed_responses/getVendorInfo/DeimosPetVendorManifest.json @@ -0,0 +1,136 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5f456e02c96976e97d6b8080" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/PetVendorManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedNexiferaRare", + "PremiumPrice": [35, 35], + "Bin": "BIN_0", + "QuantityMultiplier": 5, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e89f6" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedNexiferaUncommon", + "PremiumPrice": [22, 22], + "Bin": "BIN_0", + "QuantityMultiplier": 5, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e89f7" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedMergooUncommon", + "PremiumPrice": [28, 28], + "Bin": "BIN_0", + "QuantityMultiplier": 5, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e89f8" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedKdriveUncommon", + "PremiumPrice": [25, 25], + "Bin": "BIN_0", + "QuantityMultiplier": 5, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e89f9" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedZongroCommon", + "PremiumPrice": [14, 14], + "Bin": "BIN_0", + "QuantityMultiplier": 5, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e89fa" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedPredatorCommon", + "PremiumPrice": [12, 12], + "Bin": "BIN_0", + "QuantityMultiplier": 5, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e89fb" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedMergooCommon", + "PremiumPrice": [13, 13], + "Bin": "BIN_0", + "QuantityMultiplier": 5, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e89fc" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedKdriveCommon", + "PremiumPrice": [14, 14], + "Bin": "BIN_0", + "QuantityMultiplier": 5, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b10ba592c4c95e89fd" + } + } + ], + "PropertyTextHash": "F14C6B6A61D7585A10537995661F5220", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/DeimosProspectorVendorManifest.json b/static/fixed_responses/getVendorInfo/DeimosProspectorVendorManifest.json new file mode 100644 index 00000000..01158f13 --- /dev/null +++ b/static/fixed_responses/getVendorInfo/DeimosProspectorVendorManifest.json @@ -0,0 +1,61 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5f456e00c96976e97d6b7fd7" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/ProspectorVendorManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Gems/Deimos/DeimosUncommonGemACutItem", + "PremiumPrice": [13, 13], + "Bin": "BIN_1", + "QuantityMultiplier": 10, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e93a8" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Gems/Deimos/DeimosCommonGemBCutItem", + "PremiumPrice": [7, 7], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e93a9" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Gems/Deimos/DeimosCommonGemACutItem", + "PremiumPrice": [7, 7], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e93aa" + } + } + ], + "PropertyTextHash": "2BBC116116C757F6AF4FBC3B9BF754C8", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/DuviriAcrithisVendorManifest.json b/static/fixed_responses/getVendorInfo/DuviriAcrithisVendorManifest.json new file mode 100644 index 00000000..031db476 --- /dev/null +++ b/static/fixed_responses/getVendorInfo/DuviriAcrithisVendorManifest.json @@ -0,0 +1,321 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "64493ca759e9b164c86a2e14" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Duviri/AcrithisVendorManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/StoreItems/Types/Items/DangerRoom/DangerRoomTileDuviriDragonArena", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriDragonDropItem", + "ItemCount": 20, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_5", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b00ba592c4c95e7d88" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Recipes/Components/FormaBlueprint", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriDragonDropItem", + "ItemCount": 10, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "Id": { + "$oid": "66fd60b00ba592c4c95e7deb" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/UtilityUnlocker", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriDragonDropItem", + "ItemCount": 20, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "Id": { + "$oid": "66fd60b00ba592c4c95e7dec" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/Kuva", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriDragonDropItem", + "ItemCount": 10, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_2", + "QuantityMultiplier": 5000, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "Id": { + "$oid": "66fd60b00ba592c4c95e7ded" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/WeaponUtilityUnlocker", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriDragonDropItem", + "ItemCount": 20, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "Id": { + "$oid": "66fd60b00ba592c4c95e7dee" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/Kuva", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriDragonDropItem", + "ItemCount": 10, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_2", + "QuantityMultiplier": 5000, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "Id": { + "$oid": "670c5e12576f461f1e5e739c" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/Plastids", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriPlantItemD", + "ItemCount": 40, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": true, + "Id": { + "$oid": "6710c312fa0b2c5cd85e73c3" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Duviri/DUVxPlanterHangingPot", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriPlantItemE", + "ItemCount": 51, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "6710c312fa0b2c5cd85e73c6" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Duviri/DUVxPlanterPotB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriRockItem", + "ItemCount": 44, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "6710c312fa0b2c5cd85e73c7" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/NeuralSensor", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriPlantItemA", + "ItemCount": 52, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 3, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": true, + "Id": { + "$oid": "6710c312fa0b2c5cd85e73c8" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/ControlModule", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriPlantItemF", + "ItemCount": 42, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 3, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": true, + "Id": { + "$oid": "6710c312fa0b2c5cd85e73c9" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/PhotoboothTileDuviriArenaOpera", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriProcessedItem", + "ItemCount": 240, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "Id": { + "$oid": "66fd60b00ba592c4c95e7ddd" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Upgrades/CosmeticEnhancers/Utility/HealthWhileUsingChanneledAbilities", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriDragonDropItem", + "ItemCount": 10, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_3", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "Id": { + "$oid": "66fd60b00ba592c4c95e7e01" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Upgrades/Boons/DuviriVendorBoonItem", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriPlantItemG", + "ItemCount": 50, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_4", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": true, + "Id": { + "$oid": "6711a412ba1ba01e405e739c" + } + } + ], + "PropertyTextHash": "9EE40048EB685549ACA3D01AB1F65BF2", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json b/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json new file mode 100644 index 00000000..624e2d33 --- /dev/null +++ b/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json @@ -0,0 +1,245 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "6579d82b553a20c6fc0067ca" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/EntratiLabs/EntratiLabVendorManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/StoreItems/Types/Gameplay/NarmerSorties/ArchonCrystalAmar", + "Bin": "BIN_3", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "RotatedWeekly": true, + "Affiliation": "EntratiLabSyndicate", + "MinAffiliationRank": 5, + "ReductionPerPositiveRank": 0, + "IncreasePerNegativeRank": 0, + "StandingCost": 30000, + "AllowMultipurchase": false, + "Id": { + "$oid": "66fd60b20ba592c4c95e920d" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Gameplay/NarmerSorties/ArchonCrystalBoreal", + "Bin": "BIN_3", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "RotatedWeekly": true, + "Affiliation": "EntratiLabSyndicate", + "MinAffiliationRank": 5, + "ReductionPerPositiveRank": 0, + "IncreasePerNegativeRank": 0, + "StandingCost": 30000, + "AllowMultipurchase": false, + "Id": { + "$oid": "66fd60b20ba592c4c95e920e" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Gameplay/NarmerSorties/ArchonCrystalNira", + "Bin": "BIN_3", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "RotatedWeekly": true, + "Affiliation": "EntratiLabSyndicate", + "MinAffiliationRank": 5, + "ReductionPerPositiveRank": 0, + "IncreasePerNegativeRank": 0, + "StandingCost": 30000, + "AllowMultipurchase": false, + "Id": { + "$oid": "66fd60b20ba592c4c95e920f" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/EntratiLabs/ORKxLabStool", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabDogTagUncommon", + "ItemCount": 2, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemA", + "ItemCount": 22, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/MurmurItem", + "ItemCount": 18, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9270" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/EntratiLabs/ORKxLabChairA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/MurmurItem", + "ItemCount": 15, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemA", + "ItemCount": 19, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemB", + "ItemCount": 19, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9271" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/EntratiLabs/ORKxLabLightWallCandleA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/MurmurItem", + "ItemCount": 12, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabDogTagCommon", + "ItemCount": 3, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9272" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/EntratiLabs/ORKxLabLightChandelierD", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemB", + "ItemCount": 8, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabDogTagCommon", + "ItemCount": 3, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9273" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/EntratiLabs/ORKxLabLightChandelierB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemA", + "ItemCount": 12, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabDogTagCommon", + "ItemCount": 2, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9274" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/EntratiLabs/ORKxLabLightChandelierA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/MurmurItem", + "ItemCount": 15, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemA", + "ItemCount": 13, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9275" + } + } + ], + "PropertyTextHash": "44DA3839E6F7BDB32ACED53F2B0BE14E", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabsCommisionsManifest.json b/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabsCommisionsManifest.json new file mode 100644 index 00000000..41a9454e --- /dev/null +++ b/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabsCommisionsManifest.json @@ -0,0 +1,97 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "6579d82b553a20c6fc0067ae" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/EntratiLabs/EntratiLabsCommisionsManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/EntratiLabs/LoidTaskC", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemB", + "ItemCount": 17, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/MurmurItem", + "ItemCount": 30, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "Id": { + "$oid": "670a2b928ac7854ac55e73d3" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/EntratiLabs/LoidTaskB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/MurmurItem", + "ItemCount": 20, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemA", + "ItemCount": 228, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "Id": { + "$oid": "670a2b928ac7854ac55e73d4" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/EntratiLabs/LoidTaskA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/MurmurItem", + "ItemCount": 15, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Gameplay/Zariman/Resources/ZarimanMiscItemB", + "ItemCount": 1, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "Id": { + "$oid": "670a2b928ac7854ac55e73d5" + } + } + ], + "PropertyTextHash": "60C4D85A8DE5E6538AD23CDDFEEF0422", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/HubsIronwakeDondaVendorManifest.json b/static/fixed_responses/getVendorInfo/HubsIronwakeDondaVendorManifest.json new file mode 100644 index 00000000..0dabeb95 --- /dev/null +++ b/static/fixed_responses/getVendorInfo/HubsIronwakeDondaVendorManifest.json @@ -0,0 +1,125 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5dbb4c41e966f7886c3ce939" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Hubs/IronwakeDondaVendorManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/HarrowQuestKeyOrnament", + "ItemPrices": [ + { + "ItemCount": 25, + "ItemType": "/Lotus/Types/Items/MiscItems/PrimeBucks", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e945f" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/BoosterPacks/RivenModPack", + "ItemPrices": [ + { + "ItemCount": 10, + "ItemType": "/Lotus/Types/Items/MiscItems/RivenFragment", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "Id": { + "$oid": "66fd60b20ba592c4c95e9468" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/StoreItems/CreditBundles/150000Credits", + "ItemPrices": [ + { + "ItemCount": 5, + "ItemType": "/Lotus/Types/Items/MiscItems/RivenFragment", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "Id": { + "$oid": "66fd60b20ba592c4c95e9469" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/Kuva", + "ItemPrices": [ + { + "ItemCount": 10, + "ItemType": "/Lotus/Types/Items/MiscItems/RivenFragment", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 35000, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "Id": { + "$oid": "66fd60b20ba592c4c95e946a" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/BoosterPacks/RivenModPack", + "ItemPrices": [ + { + "ItemCount": 10, + "ItemType": "/Lotus/Types/Items/MiscItems/RivenFragment", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "Id": { + "$oid": "66fd60b20ba592c4c95e946b" + } + } + ], + "PropertyTextHash": "62B64A8065B7C0FA345895D4BC234621", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/HubsRailjackCrewMemberVendorManifest.json b/static/fixed_responses/getVendorInfo/HubsRailjackCrewMemberVendorManifest.json new file mode 100644 index 00000000..16506360 --- /dev/null +++ b/static/fixed_responses/getVendorInfo/HubsRailjackCrewMemberVendorManifest.json @@ -0,0 +1,244 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5fb70313c96976e97d6be787" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Hubs/RailjackCrewMemberVendorManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/StoreItems/Types/Game/CrewShip/CrewMember/SteelMeridianCrewMemberGeneratorStrong", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/RailjackMiscItems/IsosRailjackItem", + "ItemCount": 2220, + "ProductCategory": "MiscItems" + } + ], + "RegularPrice": [2180000, 2180000], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "Affiliation": "SteelMeridianSyndicate", + "MinAffiliationRank": 0, + "ReductionPerPositiveRank": 0.1, + "IncreasePerNegativeRank": 0.5, + "AllowMultipurchase": false, + "LocTagRandSeed": 4185144421, + "Id": { + "$oid": "670daf92d21f34757a5e73da" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Game/CrewShip/CrewMember/NewLokaCrewMemberGeneratorStrong", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/RailjackMiscItems/IsosRailjackItem", + "ItemCount": 2130, + "ProductCategory": "MiscItems" + } + ], + "RegularPrice": [1890000, 1890000], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "Affiliation": "NewLokaSyndicate", + "MinAffiliationRank": 0, + "ReductionPerPositiveRank": 0.1, + "IncreasePerNegativeRank": 0.5, + "AllowMultipurchase": false, + "LocTagRandSeed": 496053258, + "Id": { + "$oid": "670daf92d21f34757a5e73db" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Game/CrewShip/CrewMember/SteelMeridianCrewMemberGeneratorMediumVersionTwo", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/RailjackMiscItems/IsosRailjackItem", + "ItemCount": 440, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "Affiliation": "SteelMeridianSyndicate", + "MinAffiliationRank": 0, + "ReductionPerPositiveRank": 0.1, + "IncreasePerNegativeRank": 0.5, + "AllowMultipurchase": false, + "LocTagRandSeed": 2078883475, + "Id": { + "$oid": "670daf92d21f34757a5e73dc" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Game/CrewShip/CrewMember/NewLokaCrewMemberGeneratorMediumVersionTwo", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/RailjackMiscItems/AsteriteRailjackItem", + "ItemCount": 730, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "Affiliation": "NewLokaSyndicate", + "MinAffiliationRank": 0, + "ReductionPerPositiveRank": 0.1, + "IncreasePerNegativeRank": 0.5, + "AllowMultipurchase": false, + "LocTagRandSeed": 3890380934, + "Id": { + "$oid": "670daf92d21f34757a5e73dd" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Game/CrewShip/CrewMember/CephalonSudaCrewMemberGeneratorMediumVersionTwo", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/RailjackMiscItems/AsteriteRailjackItem", + "ItemCount": 720, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "Affiliation": "CephalonSudaSyndicate", + "MinAffiliationRank": 0, + "ReductionPerPositiveRank": 0.1, + "IncreasePerNegativeRank": 0.5, + "AllowMultipurchase": false, + "LocTagRandSeed": 3425148044, + "Id": { + "$oid": "670daf92d21f34757a5e73de" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Game/CrewShip/CrewMember/ArbitersCrewMemberGeneratorMediumVersionTwo", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/RailjackMiscItems/CubicsRailjackItem", + "ItemCount": 6500, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "Affiliation": "ArbitersSyndicate", + "MinAffiliationRank": 0, + "ReductionPerPositiveRank": 0.1, + "IncreasePerNegativeRank": 0.5, + "AllowMultipurchase": false, + "LocTagRandSeed": 2472754512, + "Id": { + "$oid": "670daf92d21f34757a5e73df" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Game/CrewShip/CrewMember/PerrinCrewMemberGeneratorVersionTwo", + "RegularPrice": [105000, 105000], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "Affiliation": "PerrinSyndicate", + "MinAffiliationRank": 0, + "ReductionPerPositiveRank": 0.1, + "IncreasePerNegativeRank": 0.5, + "AllowMultipurchase": false, + "LocTagRandSeed": 966238763, + "Id": { + "$oid": "670daf92d21f34757a5e73e0" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Game/CrewShip/CrewMember/NewLokaCrewMemberGeneratorVersionTwo", + "RegularPrice": [120000, 120000], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "Affiliation": "NewLokaSyndicate", + "MinAffiliationRank": 0, + "ReductionPerPositiveRank": 0.1, + "IncreasePerNegativeRank": 0.5, + "AllowMultipurchase": false, + "LocTagRandSeed": 356717213, + "Id": { + "$oid": "670daf92d21f34757a5e73e1" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Game/CrewShip/CrewMember/ArbitersCrewMemberGeneratorVersionTwo", + "RegularPrice": [120000, 120000], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "Affiliation": "ArbitersSyndicate", + "MinAffiliationRank": 0, + "ReductionPerPositiveRank": 0.1, + "IncreasePerNegativeRank": 0.5, + "AllowMultipurchase": false, + "LocTagRandSeed": 1969797050, + "Id": { + "$oid": "670daf92d21f34757a5e73e2" + } + } + ], + "PropertyTextHash": "BE543CCC0A4F50A1D80CD2B523796EAE", + "RandomSeedType": "VRST_FLAVOUR_TEXT", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/OstronFishmongerVendorManifest.json b/static/fixed_responses/getVendorInfo/OstronFishmongerVendorManifest.json new file mode 100644 index 00000000..c6a3670b --- /dev/null +++ b/static/fixed_responses/getVendorInfo/OstronFishmongerVendorManifest.json @@ -0,0 +1,106 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "59d6e27ebcc718474eb17115" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Ostron/FishmongerVendorManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Eidolon/FishParts/DayUncommonFishAPartItem", + "PremiumPrice": [14, 14], + "Bin": "BIN_1", + "QuantityMultiplier": 10, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9808" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Eidolon/FishParts/BothUncommonFishBPartItem", + "PremiumPrice": [12, 12], + "Bin": "BIN_1", + "QuantityMultiplier": 10, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9809" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Eidolon/FishParts/DayCommonFishCPartItem", + "PremiumPrice": [8, 8], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e980a" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Eidolon/FishParts/DayCommonFishBPartItem", + "PremiumPrice": [7, 7], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e980b" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Eidolon/FishParts/DayCommonFishAPartItem", + "PremiumPrice": [10, 10], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e980c" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Eidolon/FishParts/BothCommonFishBPartItem", + "PremiumPrice": [8, 8], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e980d" + } + } + ], + "PropertyTextHash": "CC3B9DAFB38F412998E90A41421A8986", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/OstronPetVendorManifest.json b/static/fixed_responses/getVendorInfo/OstronPetVendorManifest.json new file mode 100644 index 00000000..521260cf --- /dev/null +++ b/static/fixed_responses/getVendorInfo/OstronPetVendorManifest.json @@ -0,0 +1,94 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5991d5e6bcc718474ee90c15" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Ostron/PetVendorManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/LisetPropOstBirdCage", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Gems/Eidolon/UncommonOreAAlloyAItem", + "ItemCount": 10, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Eidolon/FishParts/DayUncommonFishBPartItem", + "ItemCount": 8, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9a8e" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/KubrowColorPackDrahk", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Eidolon/FishParts/DayCommonFishBPartItem", + "ItemCount": 14, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Eidolon/FishParts/BothCommonFishBPartItem", + "ItemCount": 13, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9a8f" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/KubrowColorPackFeral", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Eidolon/FishParts/BothCommonFishAPartItem", + "ItemCount": 19, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Eidolon/CommonOreBAlloyBItem", + "ItemCount": 34, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9a90" + } + } + ], + "PropertyTextHash": "3D85F1A0A2B62734AE90370DEC214C26", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/OstronProspectorVendorManifest.json b/static/fixed_responses/getVendorInfo/OstronProspectorVendorManifest.json new file mode 100644 index 00000000..7c357351 --- /dev/null +++ b/static/fixed_responses/getVendorInfo/OstronProspectorVendorManifest.json @@ -0,0 +1,62 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "59dfe591314805ffe1d47c0a" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Ostron/ProspectorVendorManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Gems/Eidolon/RareGemACutAItem", + "PremiumPrice": [19, 19], + "Bin": "BIN_1", + "QuantityMultiplier": 5, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e98f0" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Gems/Eidolon/CommonGemBCutAItem", + "PremiumPrice": [8, 8], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e98f1" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Gems/Eidolon/CommonGemACutAItem", + "PremiumPrice": [5, 5], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e98f2" + } + } + ], + "MaxDailyPurchases": 0, + "PropertyTextHash": "773C6968D9A65506CD28DF28C768F0DA", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorManifest.json b/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorManifest.json new file mode 100644 index 00000000..3a4fa0ac --- /dev/null +++ b/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorManifest.json @@ -0,0 +1,248 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5be4a159b144f3cdf1c22efa" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Solaris/DebtTokenVendorManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/DebtTokenBundles/DebtTokenBundleUncommonD", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Venus/Resources/VenusCoconutItem", + "ItemCount": 5, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/MiscItems/Circuits", + "ItemCount": 3664, + "ProductCategory": "MiscItems" + } + ], + "RegularPrice": [87300, 87300], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": true, + "LocTagRandSeed": 1881404827, + "Id": { + "$oid": "670daf92d21f34757a5e73b4" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/DebtTokenBundles/DebtTokenBundleRareC", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/MiscItems/NeuralSensor", + "ItemCount": 1, + "ProductCategory": "MiscItems" + } + ], + "RegularPrice": [53300, 53300], + "Bin": "BIN_2", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": true, + "LocTagRandSeed": 1943984533, + "Id": { + "$oid": "6710b5029e1a3080a65e73a7" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/DebtTokenBundles/DebtTokenBundleCommonG", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/MiscItems/Salvage", + "ItemCount": 11540, + "ProductCategory": "MiscItems" + } + ], + "RegularPrice": [27300, 27300], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": true, + "LocTagRandSeed": 744199559, + "Id": { + "$oid": "67112582cc115756985e73a4" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/DebtTokenBundles/DebtTokenBundleUncommonB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Solaris/FishParts/CorpusFishThermalLaserItem", + "ItemCount": 9, + "ProductCategory": "MiscItems" + } + ], + "RegularPrice": [75800, 75800], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": true, + "LocTagRandSeed": 3744711432, + "Id": { + "$oid": "670de7d28a6ec82cd25e73a2" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/DebtTokenBundles/DebtTokenBundleUncommonB", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/MiscItems/Rubedo", + "ItemCount": 3343, + "ProductCategory": "MiscItems" + } + ], + "RegularPrice": [52200, 52200], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": true, + "LocTagRandSeed": 1579000687, + "Id": { + "$oid": "670e58526171148e125e73ad" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/DebtTokenBundles/DebtTokenBundleCommonA", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Gameplay/Venus/Resources/CoolantItem", + "ItemCount": 9, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Fish/Solaris/FishParts/CorpusFishAnoscopicSensorItem", + "ItemCount": 5, + "ProductCategory": "MiscItems" + } + ], + "RegularPrice": [12400, 12400], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": true, + "LocTagRandSeed": 3589081466, + "Id": { + "$oid": "67112582cc115756985e73a5" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/DebtTokenBundles/DebtTokenBundleUncommonC", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Gems/Solaris/SolarisCommonOreBAlloyItem", + "ItemCount": 13, + "ProductCategory": "MiscItems" + } + ], + "RegularPrice": [77500, 77500], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": true, + "LocTagRandSeed": 1510234814, + "Id": { + "$oid": "670f0f21250ad046c35e73ee" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/DebtTokenBundles/DebtTokenBundleUncommonD", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Fish/Solaris/FishParts/CorpusFishParralelBiodeItem", + "ItemCount": 7, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Gems/Solaris/SolarisCommonGemBCutItem", + "ItemCount": 12, + "ProductCategory": "MiscItems" + } + ], + "RegularPrice": [94600, 94600], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": true, + "LocTagRandSeed": 4222095721, + "Id": { + "$oid": "670f63827be40254f95e739d" + } + }, + { + "StoreItem": "/Lotus/Types/StoreItems/Packages/DebtTokenBundles/DebtTokenBundleCommonJ", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/MiscItems/Nanospores", + "ItemCount": 14830, + "ProductCategory": "MiscItems" + } + ], + "RegularPrice": [25600, 25600], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": true, + "LocTagRandSeed": 2694388669, + "Id": { + "$oid": "67112582cc115756985e73a6" + } + } + ], + "PropertyTextHash": "A39621049CA3CA13761028CD21C239EF", + "RandomSeedType": "VRST_FLAVOUR_TEXT", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorRepossessionsManifest.json b/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorRepossessionsManifest.json new file mode 100644 index 00000000..67b234a2 --- /dev/null +++ b/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorRepossessionsManifest.json @@ -0,0 +1,126 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5be4a159b144f3cdf1c22edf" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Solaris/DebtTokenVendorRepossessionsManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Venus/SUToolBox", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Solaris/DebtTokenB", + "ItemCount": 6, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "6711a412ba1ba01e405e739d" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Venus/SUBookAOpen", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Solaris/DebtTokenC", + "ItemCount": 6, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "6711a412ba1ba01e405e739e" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Venus/SUFoodCans", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Solaris/DebtTokenC", + "ItemCount": 7, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "6711a412ba1ba01e405e739f" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Venus/SUTechToolD", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Solaris/DebtTokenD", + "ItemCount": 5, + "ProductCategory": "MiscItems" + }, + { + "ItemType": "/Lotus/Types/Items/Solaris/DebtTokenA", + "ItemCount": 15, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_1", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "6711a412ba1ba01e405e73a0" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Venus/SUContainerCrate", + "ItemPrices": [ + { + "ItemType": "/Lotus/Types/Items/Solaris/DebtTokenA", + "ItemCount": 9, + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "6711a412ba1ba01e405e73a1" + } + } + ], + "PropertyTextHash": "E0E83157D73468DC578403CB9EBA9DA6", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/SolarisFishmongerVendorManifest.json b/static/fixed_responses/getVendorInfo/SolarisFishmongerVendorManifest.json new file mode 100644 index 00000000..4a4dcb64 --- /dev/null +++ b/static/fixed_responses/getVendorInfo/SolarisFishmongerVendorManifest.json @@ -0,0 +1,106 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5b0de8556df82a56ea9bae82" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Solaris/FishmongerVendorManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Solaris/FishParts/CorpusFishThermalLaserItem", + "PremiumPrice": [15, 15], + "Bin": "BIN_1", + "QuantityMultiplier": 10, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9515" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Solaris/FishParts/CorpusFishVenedoCaseItem", + "PremiumPrice": [8, 8], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9516" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Solaris/FishParts/SolarisFishDissipatorCoilItem", + "PremiumPrice": [18, 18], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9517" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Solaris/FishParts/CorpusFishExaBrainItem", + "PremiumPrice": [5, 5], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9518" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Solaris/FishParts/CorpusFishAnoscopicSensorItem", + "PremiumPrice": [5, 5], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9519" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Fish/Solaris/FishParts/GenericFishScrapItem", + "PremiumPrice": [5, 5], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e951a" + } + } + ], + "PropertyTextHash": "946131D0CF5CDF7C2C03BB967DE0DF49", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} diff --git a/static/fixed_responses/getVendorInfo/SolarisProspectorVendorManifest.json b/static/fixed_responses/getVendorInfo/SolarisProspectorVendorManifest.json new file mode 100644 index 00000000..ce54b84e --- /dev/null +++ b/static/fixed_responses/getVendorInfo/SolarisProspectorVendorManifest.json @@ -0,0 +1,61 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "5be4a159b144f3cdf1c22ebb" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Solaris/ProspectorVendorManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Gems/Solaris/SolarisRareGemACutItem", + "PremiumPrice": [20, 20], + "Bin": "BIN_1", + "QuantityMultiplier": 5, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9777" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Gems/Solaris/SolarisCommonGemBCutItem", + "PremiumPrice": [10, 10], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9778" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Types/Items/Gems/Solaris/SolarisCommonGemACutItem", + "PremiumPrice": [8, 8], + "Bin": "BIN_0", + "QuantityMultiplier": 20, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "AllowMultipurchase": true, + "Id": { + "$oid": "66fd60b20ba592c4c95e9779" + } + } + ], + "PropertyTextHash": "A5756A21991FF49CFA7D096B4026515B", + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} -- 2.47.2 From 1b95186ab8478cf6ee15cc945467fcb628892467 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sat, 19 Oct 2024 13:45:06 +0200 Subject: [PATCH 009/181] chore: remove leftover console.log in inventoryController (#569) --- src/controllers/api/inventoryController.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 315af1cc..9272869a 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -31,7 +31,6 @@ const inventoryController: RequestHandler = async (request, response) => { //TODO: make a function that converts from database representation to client const inventoryJSON: IInventoryDatabase = inventory.toJSON(); - console.log(inventoryJSON.Ships); const inventoryResponse = toInventoryResponse(inventoryJSON); -- 2.47.2 From e98514a7bec517a30bc3785c62457452974743dd Mon Sep 17 00:00:00 2001 From: Vampire Kitten <95658710+VampireKitten@users.noreply.github.com> Date: Sat, 19 Oct 2024 13:47:28 +0200 Subject: [PATCH 010/181] improve: Add Ergo Blast's Tenet Weapon shop (#568) --- .../api/getVendorInfoController.ts | 5 + ...ubsPerrinSequenceWeaponVendorManifest.json | 133 ++++++++++++++++++ 2 files changed, 138 insertions(+) create mode 100644 static/fixed_responses/getVendorInfo/HubsPerrinSequenceWeaponVendorManifest.json diff --git a/src/controllers/api/getVendorInfoController.ts b/src/controllers/api/getVendorInfoController.ts index 438ee5b9..e7d80ba5 100644 --- a/src/controllers/api/getVendorInfoController.ts +++ b/src/controllers/api/getVendorInfoController.ts @@ -15,6 +15,7 @@ import EntratiLabsEntratiLabsCommisionsManifest from "@/static/fixed_responses/g import EntratiLabsEntratiLabVendorManifest from "@/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json"; import HubsIronwakeDondaVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsIronwakeDondaVendorManifest.json"; import HubsRailjackCrewMemberVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsRailjackCrewMemberVendorManifest.json"; +import HubsPerrinSequenceWeaponVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsPerrinSequenceWeaponVendorManifest.json"; import MaskSalesmanManifest from "@/static/fixed_responses/getVendorInfo/MaskSalesmanManifest.json"; import OstronFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronFishmongerVendorManifest.json"; import OstronProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronProspectorVendorManifest.json"; @@ -59,6 +60,10 @@ export const getVendorInfoController: RequestHandler = (req, res) => { res.json(SolarisDebtTokenVendorRepossessionsManifest); break; + case "/Lotus/Types/Game/VendorManifests/Hubs/PerrinSequenceWeaponVendorManifest": + res.json(HubsPerrinSequenceWeaponVendorManifest); + break; + case "/Lotus/Types/Game/VendorManifests/Hubs/RailjackCrewMemberVendorManifest": res.json(HubsRailjackCrewMemberVendorManifest); break; diff --git a/static/fixed_responses/getVendorInfo/HubsPerrinSequenceWeaponVendorManifest.json b/static/fixed_responses/getVendorInfo/HubsPerrinSequenceWeaponVendorManifest.json new file mode 100644 index 00000000..1cae38e4 --- /dev/null +++ b/static/fixed_responses/getVendorInfo/HubsPerrinSequenceWeaponVendorManifest.json @@ -0,0 +1,133 @@ +{ + "VendorInfo": { + "_id": { + "$oid": "60ad3b6ec96976e97d227e19" + }, + "TypeName": "/Lotus/Types/Game/VendorManifests/Hubs/PerrinSequenceWeaponVendorManifest", + "ItemManifest": [ + { + "StoreItem": "/Lotus/StoreItems/Weapons/Corpus/BoardExec/Primary/CrpBEFerrox/CrpBEFerrox", + "ItemPrices": [ + { + "ItemCount": 40, + "ItemType": "/Lotus/Types/Items/MiscItems/GranumBucks", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 4383829823946960400, + "Id": { + "$oid": "66fd60b20ba592c4c95e9488" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Weapons/Corpus/Melee/CrpBriefcaseScythe/CrpBriefcaseScythe", + "ItemPrices": [ + { + "ItemCount": 40, + "ItemType": "/Lotus/Types/Items/MiscItems/GranumBucks", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 7952272124248276000, + "Id": { + "$oid": "66fd60b20ba592c4c95e9489" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Weapons/Corpus/Melee/CrpBriefcase2HKatana/CrpBriefcase2HKatana", + "ItemPrices": [ + { + "ItemCount": 40, + "ItemType": "/Lotus/Types/Items/MiscItems/GranumBucks", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 465952672558014140, + "Id": { + "$oid": "66fd60b20ba592c4c95e948a" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Weapons/Tenno/Melee/Swords/CrpBigSlash/CrpBigSlash", + "ItemPrices": [ + { + "ItemCount": 40, + "ItemType": "/Lotus/Types/Items/MiscItems/GranumBucks", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 8342430883077507000, + "Id": { + "$oid": "66fd60b20ba592c4c95e948b" + } + }, + { + "StoreItem": "/Lotus/StoreItems/Weapons/Corpus/Melee/ShieldAndSword/CrpHammerShield/CrpHammerShield", + "ItemPrices": [ + { + "ItemCount": 40, + "ItemType": "/Lotus/Types/Items/MiscItems/GranumBucks", + "ProductCategory": "MiscItems" + } + ], + "Bin": "BIN_0", + "QuantityMultiplier": 1, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + }, + "PurchaseQuantityLimit": 1, + "AllowMultipurchase": false, + "LocTagRandSeed": 7441523153174502000, + "Id": { + "$oid": "66fd60b20ba592c4c95e948c" + } + } + ], + "PropertyTextHash": "34F8CF1DFF745F0D67433A5EF0A03E70", + "RandomSeedType": "VRST_WEAPON", + "WeaponUpgradeValueAttenuationExponent": 2.25, + "Expiry": { + "$date": { + "$numberLong": "9999999000000" + } + } + } +} -- 2.47.2 From 38e7d3d078bda4c0158e7451866d203a6f47cdeb Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 17 Nov 2024 04:18:13 +0100 Subject: [PATCH 011/181] chore: update PE+ to 0.5.5 (#573) --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 28015e3a..8ef7dee2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "copyfiles": "^2.4.1", "express": "^5.0.0-beta.3", "mongoose": "^8.4.5", - "warframe-public-export-plus": "^0.5.2", + "warframe-public-export-plus": "^0.5.5", "warframe-riven-info": "^0.1.2", "winston": "^3.13.0", "winston-daily-rotate-file": "^5.0.0" @@ -3778,9 +3778,9 @@ } }, "node_modules/warframe-public-export-plus": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.2.tgz", - "integrity": "sha512-mv7abHis5ytlevnx9lSLwnqnv5/3t322/OKkR99Hrw+w7Qm+Ps6agZcTqNaIy6zrM1vsvWY1NnbxVe2+JIW6/Q==" + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.5.tgz", + "integrity": "sha512-zySJ9cNO9hSectG4nBVPoykQ7mfME3U6GqU5kfuGiaowX7+9S+Y1exJLhxaV9yfIIEJwXQCZwJR7wpdqH2Pidg==" }, "node_modules/warframe-riven-info": { "version": "0.1.2", diff --git a/package.json b/package.json index 486d0a29..8661636a 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "copyfiles": "^2.4.1", "express": "^5.0.0-beta.3", "mongoose": "^8.4.5", - "warframe-public-export-plus": "^0.5.2", + "warframe-public-export-plus": "^0.5.5", "warframe-riven-info": "^0.1.2", "winston": "^3.13.0", "winston-daily-rotate-file": "^5.0.0" -- 2.47.2 From cd514d47afb2dfcc644d3f03014aebdbe3b8dba8 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 16 Dec 2024 04:50:51 +0100 Subject: [PATCH 012/181] chore: update for 1999 (#576) --- package-lock.json | 8 +-- package.json | 2 +- src/types/shipTypes.ts | 2 +- static/fixed_responses/worldState.json | 87 +++++++++++++++++++++++++- 4 files changed, 92 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8ef7dee2..2acf16b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "copyfiles": "^2.4.1", "express": "^5.0.0-beta.3", "mongoose": "^8.4.5", - "warframe-public-export-plus": "^0.5.5", + "warframe-public-export-plus": "^0.5.7", "warframe-riven-info": "^0.1.2", "winston": "^3.13.0", "winston-daily-rotate-file": "^5.0.0" @@ -3778,9 +3778,9 @@ } }, "node_modules/warframe-public-export-plus": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.5.tgz", - "integrity": "sha512-zySJ9cNO9hSectG4nBVPoykQ7mfME3U6GqU5kfuGiaowX7+9S+Y1exJLhxaV9yfIIEJwXQCZwJR7wpdqH2Pidg==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.7.tgz", + "integrity": "sha512-5cT48YPZCJ/KGCtAK4hGtaE6709CYIPzCJUI/8odJxntnUfe2R3Np+T8+iw431H2mVA+4CF9ByhvicODhdBPLw==" }, "node_modules/warframe-riven-info": { "version": "0.1.2", diff --git a/package.json b/package.json index 8661636a..f0d638fc 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "copyfiles": "^2.4.1", "express": "^5.0.0-beta.3", "mongoose": "^8.4.5", - "warframe-public-export-plus": "^0.5.5", + "warframe-public-export-plus": "^0.5.7", "warframe-riven-info": "^0.1.2", "winston": "^3.13.0", "winston-daily-rotate-file": "^5.0.0" diff --git a/src/types/shipTypes.ts b/src/types/shipTypes.ts index 77b5cd8a..a1954475 100644 --- a/src/types/shipTypes.ts +++ b/src/types/shipTypes.ts @@ -19,7 +19,7 @@ export interface IShipInterior { SkinFlavourItem?: string; } -export type TBootLocation = "LISET" | "DRIFTER_CAMP" | "APARTMENT"; +export type TBootLocation = "LISET" | "DRIFTER_CAMP" | "APARTMENT" | "SHOP"; export interface IShip { Features: string[]; diff --git a/static/fixed_responses/worldState.json b/static/fixed_responses/worldState.json index 4e167f81..4cb878da 100644 --- a/static/fixed_responses/worldState.json +++ b/static/fixed_responses/worldState.json @@ -1173,5 +1173,90 @@ } ] }, - "Tmp": "{\"prisbegin\":\"1687363200\",\"prisend\":\"1688572800\",\"cavabegin\":\"1690761600\",\"PurchasePlatformLockEnabled\":true,\"lqo4\":{\"mt\":[\"Survival\",\"Defense\",\"Assassination\"],\"mv\":[\"NecramechLockout\",\"LostInTranslation\",\"InfiniteTide\"],\"c\":[[\"RegeneratingEnemies\",\"VoidAberration\"],[\"ShieldedFoes\",\"Deflectors\"],[\"PointBlank\",\"Voidburst\"]],\"fv\":[\"Armorless\",\"TimeDilation\",\"OperatorLockout\",\"Starvation\"]},\"lqo5\":{\"mt\":[\"Extermination\",\"Disruption\",\"Alchemy\"],\"mv\":[\"GrowingIncursion\",\"FragileNodes\",\"VolatileGrenades\"],\"c\":[[\"AcceleratedEnemies\",\"EMPBlackHole\"],[\"ExplosiveCrawlers\",\"ShieldedFoes\"],[\"AntiMaterialWeapons\",\"RegeneratingEnemies\"]],\"fv\":[\"ContactDamage\",\"Knifestep\",\"AbilityLockout\",\"Exhaustion\"]},\"lqo6\":{\"mt\":[\"Disruption\",\"Survival\",\"Assassination\"],\"mv\":[\"DoubleTrouble\",\"UnpoweredCapsules\",\"Reinforcements\"],\"c\":[[\"VoidAberration\",\"AntiMaterialWeapons\"],[\"Deflectors\",\"Voidburst\"],[\"ExplosiveCrawlers\",\"AcceleratedEnemies\"]],\"fv\":[\"Starvation\",\"ShieldDelay\",\"Gearless\",\"Framecurse\"]},\"sfn\":554}" + "KnownCalendarSeasons": [ + { + "Activation": { "$date": { "$numberLong": "1733961600000" } }, + "Expiry": { "$date": { "$numberLong": "2000000000000" } }, + "Days": [ + { "day": 6, "events": [{ "type": "CET_CHALLENGE", "challenge": "/Lotus/Types/Challenges/Calendar1999/CalendarKillEximusEasy" }] }, + { + "day": 15, + "events": [ + { "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/MagazineCapacity" }, + { "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/Armor" }, + { "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/EnergyRestoration" } + ] + }, + { "day": 21, "events": [{ "type": "CET_CHALLENGE", "challenge": "/Lotus/Types/Challenges/Calendar1999/CalendarKillScaldraEnemiesEasy" }] }, + { + "day": 25, + "events": [ + { "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/BoosterPacks/CalendarMajorArtifactPack" }, + { "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/Gameplay/NarmerSorties/ArchonCrystalGreen" } + ] + }, + { + "day": 31, + "events": [ + { "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/Recipes/Components/WeaponUtilityUnlockerBlueprint" }, + { "type": "CET_REWARD", "reward": "/Lotus/Types/StoreItems/Packages/Calendar/CalendarKuvaBundleSmall" } + ] + }, + { "day": 43, "events": [{ "type": "CET_CHALLENGE", "challenge": "/Lotus/Types/Challenges/Calendar1999/CalendarKillEnemiesWithAbilitiesMedium" }] }, + { "day": 45, "events": [{ "type": "CET_PLOT", "dialogueName": "/Lotus/Types/Gameplay/1999Wf/Dialogue/LettieDialogue_rom.dialogue", "dialogueConvo": "LettieBirthdayConvo" }] }, + { + "day": 47, + "events": [ + { "type": "CET_REWARD", "reward": "/Lotus/Types/StoreItems/Boosters/AffinityBooster3DayStoreItem" }, + { "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/BoosterPacks/CalendarMajorArtifactPack" } + ] + }, + { "day": 48, "events": [{ "type": "CET_CHALLENGE", "challenge": "/Lotus/Types/Challenges/Calendar1999/CalendarKillScaldraEnemiesWithMeleeMedium" }] }, + { + "day": 54, + "events": [ + { "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/CompanionsBuffNearbyPlayer" }, + { "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/OrbsDuplicateOnPickup" }, + { "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/FinisherChancePerComboMultiplier" } + ] + }, + { + "day": 56, + "events": [ + { "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/BoosterPacks/CalendarArtifactPack" }, + { "type": "CET_REWARD", "reward": "/Lotus/Types/StoreItems/Packages/Calendar/CalendarKuvaBundleSmall" } + ] + }, + { "day": 71, "events": [{ "type": "CET_CHALLENGE", "challenge": "/Lotus/Types/Challenges/Calendar1999/CalendarKillTechrotEnemiesHard" }] }, + { + "day": 77, + "events": [ + { "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/Items/MiscItems/WeaponSecondaryArcaneUnlocker" }, + { "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Upgrades/Mods/FusionBundles/CircuitSilverSteelPathFusionBundle" } + ] + }, + { "day": 80, "events": [{ "type": "CET_CHALLENGE", "challenge": "/Lotus/Types/Challenges/Calendar1999/CalendarDestroyPropsMedium" }] }, + { + "day": 83, + "events": [ + { "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/Recipes/Components/OrokinReactorBlueprint" }, + { "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/Items/MiscItems/WeaponUtilityUnlocker" } + ] + }, + { + "day": 87, + "events": [ + { "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/EnergyOrbToAbilityRange" }, + { "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/MeleeAttackSpeed" }, + { "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/CompanionDamage" } + ] + } + ], + "Season": "CST_WINTER", + "YearIteration": 0, + "Version": 17, + "UpgradeAvaliabilityRequirements": ["/Lotus/Upgrades/Calendar/1999UpgradeApplicationRequirement"] + } + ], + "Tmp": "{\"cavabegin\":\"1690761600\",\"PurchasePlatformLockEnabled\":true,\"tcsn\":true,\"pgr\":{\"ts\":\"1732572900\",\"en\":\"CUSTOM DECALS @ ZEVILA\",\"fr\":\"DECALS CUSTOM @ ZEVILA\",\"it\":\"DECALCOMANIE PERSONALIZZATE @ ZEVILA\",\"de\":\"AUFKLEBER NACH WUNSCH @ ZEVILA\",\"es\":\"CALCOMANÍAS PERSONALIZADAS @ ZEVILA\",\"pt\":\"DECALQUES PERSONALIZADOS NA ZEVILA\",\"ru\":\"ПОЛЬЗОВАТЕЛЬСКИЕ НАКЛЕЙКИ @ ЗеВиЛа\",\"pl\":\"NOWE NAKLEJKI @ ZEVILA\",\"uk\":\"КОРИСТУВАЦЬКІ ДЕКОЛІ @ ЗІВІЛА\",\"tr\":\"ÖZEL ÇIKARTMALAR @ ZEVILA\",\"ja\":\"カスタムデカール @ ゼビラ\",\"zh\":\"定制贴花认准泽威拉\",\"ko\":\"커스텀 데칼 @ ZEVILA\",\"tc\":\"自訂貼花 @ ZEVILA\",\"th\":\"รูปลอกสั่งทำที่ ZEVILA\"},\"ennnd\":true,\"mbrt\":true,\"sfn\":550}" } -- 2.47.2 From 0dd98393a50cbdf5cfd61b723ee32f1627cc4f39 Mon Sep 17 00:00:00 2001 From: Master Date: Mon, 16 Dec 2024 12:25:28 +0800 Subject: [PATCH 013/181] feat(inventory&loadouts): motorcycles (#580) --- src/models/inventoryModels/inventoryModel.ts | 3 +++ src/services/saveLoadoutService.ts | 3 ++- src/types/inventoryTypes/inventoryTypes.ts | 1 + src/types/saveLoadoutTypes.ts | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 392952b7..c49e8eb6 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -867,6 +867,8 @@ const inventorySchema = new Schema( //https://warframe.fandom.com/wiki/Parazon DataKnives: [EquipmentSchema], + Motorcycles: [EquipmentSchema], + //CorpusLich or GrineerLich NemesisAbandonedRewards: [String], //CorpusLich\KuvaLich @@ -974,6 +976,7 @@ type InventoryDocumentProps = { MechSuits: Types.DocumentArray; Scoops: Types.DocumentArray; DataKnives: Types.DocumentArray; + Motorcycles: Types.DocumentArray; DrifterMelee: Types.DocumentArray; Sentinels: Types.DocumentArray; Horses: Types.DocumentArray; diff --git a/src/services/saveLoadoutService.ts b/src/services/saveLoadoutService.ts index 6cd6d7b2..3282b8dd 100644 --- a/src/services/saveLoadoutService.ts +++ b/src/services/saveLoadoutService.ts @@ -144,7 +144,8 @@ export const handleInventoryItemConfigChange = async ( case "Hoverboards": case "MechSuits": case "CrewShipHarnesses": - case "CrewShips": { + case "CrewShips": + case "Motorcycles": { logger.debug(`general Item config saved of type ${equipmentName}`, { config: equipment }); const itemEntries = equipment as IItemEntry; diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 1367868f..dd6acc18 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -245,6 +245,7 @@ export interface IInventoryResponse { EquippedInstrument: string; InvasionChainProgress: IInvasionChainProgress[]; DataKnives: IEquipmentDatabase[]; + Motorcycles: IEquipmentDatabase[]; NemesisHistory: INemesisHistory[]; LastNemesisAllySpawnTime?: IMongoDate; Settings: ISettings; diff --git a/src/types/saveLoadoutTypes.ts b/src/types/saveLoadoutTypes.ts index 731e4fb0..b7c5b1e1 100644 --- a/src/types/saveLoadoutTypes.ts +++ b/src/types/saveLoadoutTypes.ts @@ -21,6 +21,7 @@ export interface ISaveLoadoutRequest { MoaPets: IItemEntry; Hoverboards: IItemEntry; DataKnives: IItemEntry; + Motorcycles: IItemEntry; MechSuits: IItemEntry; CrewShipHarnesses: IItemEntry; Horses: IItemEntry; -- 2.47.2 From 259bfa136220e663fe5205dfb1db8b5a6630e71a Mon Sep 17 00:00:00 2001 From: Sainan Date: Thu, 19 Dec 2024 01:42:10 +0100 Subject: [PATCH 014/181] chore: npm audit fix (#579) --- package-lock.json | 54 +++++++++++----------- src/controllers/api/inventoryController.ts | 4 +- src/helpers/inventoryHelpers.ts | 4 +- src/services/inventoryService.ts | 6 +-- src/types/shipTypes.ts | 3 +- 5 files changed, 36 insertions(+), 35 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2acf16b8..7a220dd5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -235,9 +235,9 @@ } }, "node_modules/@mongodb-js/saslprep": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", - "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.9.tgz", + "integrity": "sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==", "dependencies": { "sparse-bitfield": "^3.0.3" } @@ -980,9 +980,9 @@ } }, "node_modules/bson": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", - "integrity": "sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.1.tgz", + "integrity": "sha512-P92xmHDQjSKPLHqFxefqMxASNq/aWJMEZugpCjf+AF/pgcUpMMQCg7t7+ewko0/u8AapvF3luf/FoehddEK+sA==", "engines": { "node": ">=16.20.1" } @@ -1174,9 +1174,9 @@ } }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "engines": { "node": ">= 0.6" } @@ -1219,9 +1219,9 @@ "dev": true }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "dependencies": { "path-key": "^3.1.0", @@ -1592,15 +1592,15 @@ } }, "node_modules/express": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.0.0.tgz", - "integrity": "sha512-V4UkHQc+B7ldh1YC84HCXHwf60M4BOMvp9rkvTUWCK5apqDC1Esnbid4wm6nFyVuDy8XMfETsJw5lsIGBWyo0A==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.0.1.tgz", + "integrity": "sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==", "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.0.1", "content-disposition": "^1.0.0", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "^1.2.1", "debug": "4.3.6", "depd": "2.0.0", @@ -2453,12 +2453,12 @@ } }, "node_modules/mongodb": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", - "integrity": "sha512-ZF9Ugo2JCG/GfR7DEb4ypfyJJyiKbg5qBYKRintebj8+DNS33CyGMkWbrS9lara+u+h+yEOGSRiLhFO/g1s1aw==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.12.0.tgz", + "integrity": "sha512-RM7AHlvYfS7jv7+BXund/kR64DryVI+cHbVAy9P61fnb1RcWZqOW1/Wj2YhqMCx+MuYhqTRGv7AwHBzmsCKBfA==", "dependencies": { - "@mongodb-js/saslprep": "^1.1.5", - "bson": "^6.7.0", + "@mongodb-js/saslprep": "^1.1.9", + "bson": "^6.10.1", "mongodb-connection-string-url": "^3.0.0" }, "engines": { @@ -2466,7 +2466,7 @@ }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", - "@mongodb-js/zstd": "^1.1.0", + "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", @@ -2507,13 +2507,13 @@ } }, "node_modules/mongoose": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.5.tgz", - "integrity": "sha512-E5KjBThxST2uFSKKXuiMa9H9Zx4DLTSLuxodAnIzJRixNwc1ARTlJUK1m0a80EB+ZKGP4QNTasyUYRG9DUSHOA==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.9.0.tgz", + "integrity": "sha512-b58zY3PLNBcoz6ZXFckr0leJcVVBMAOBvD+7Bj2ZjghAwntXmNnqwlDixTKQU3UYoQIGTv+AQx/0ThsvaeVrCA==", "dependencies": { - "bson": "^6.7.0", + "bson": "^6.10.1", "kareem": "2.6.3", - "mongodb": "6.6.2", + "mongodb": "~6.12.0", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 9272869a..5cb4acd6 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -6,7 +6,7 @@ import { config } from "@/src/services/configService"; import allDialogue from "@/static/fixed_responses/allDialogue.json"; import allMissions from "@/static/fixed_responses/allMissions.json"; import { ILoadoutDatabase } from "@/src/types/saveLoadoutTypes"; -import { IInventoryDatabase, IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes"; import { IPolarity, ArtifactPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { ExportCustoms, ExportFlavour, ExportKeys, ExportResources } from "warframe-public-export-plus"; @@ -30,7 +30,7 @@ const inventoryController: RequestHandler = async (request, response) => { } //TODO: make a function that converts from database representation to client - const inventoryJSON: IInventoryDatabase = inventory.toJSON(); + const inventoryJSON = inventory.toJSON(); const inventoryResponse = toInventoryResponse(inventoryJSON); diff --git a/src/helpers/inventoryHelpers.ts b/src/helpers/inventoryHelpers.ts index 0955ed39..9c254fbe 100644 --- a/src/helpers/inventoryHelpers.ts +++ b/src/helpers/inventoryHelpers.ts @@ -1,9 +1,9 @@ import { IOid } from "@/src/types/commonTypes"; -import { IInventoryDatabase, IInventoryResponse } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IInventoryResponse } from "@/src/types/inventoryTypes/inventoryTypes"; import { Types } from "mongoose"; //TODO: this needs to be addressed: a schema's toJSON is responsible for changing Oid and Date to their corresponding Response versions __id to "ItemId":{"$oid":"6450f720bc562ebf030222d4"}, and a Date to "date":{"$date":{"$numberLong":"unix timestamp"}) -export const toInventoryResponse = (inventoryDatabase: IInventoryDatabase): IInventoryResponse => { +export const toInventoryResponse = (inventoryDatabase: { accountOwnerId: Types.ObjectId }): IInventoryResponse => { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { accountOwnerId, ...inventoryResponse } = inventoryDatabase; return inventoryResponse as unknown as IInventoryResponse; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index b7a1059f..d221df7a 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -369,7 +369,7 @@ export const addPowerSuit = async (powersuitName: string, accountId: string): Pr const inventory = await getInventory(accountId); const suitIndex = inventory.Suits.push({ ItemType: powersuitName, Configs: [], UpgradeVer: 101, XP: 0 }); const changedInventory = await inventory.save(); - return changedInventory.Suits[suitIndex - 1].toJSON(); + return changedInventory.Suits[suitIndex - 1].toJSON() as object as IEquipmentClient; }; export const addMechSuit = async (mechsuitName: string, accountId: string) => { @@ -527,7 +527,7 @@ export const addEquipment = async ( }); const changedInventory = await inventory.save(); - return changedInventory[category][index - 1].toJSON(); + return changedInventory[category][index - 1].toJSON() as object as IEquipmentClient; }; export const addCustomization = async (customizatonName: string, accountId: string): Promise => { @@ -541,7 +541,7 @@ export const addSkin = async (typeName: string, accountId: string): Promise Date: Fri, 20 Dec 2024 03:11:09 +0100 Subject: [PATCH 015/181] feat: respect client-supplied version information (#585) --- src/controllers/api/loginController.ts | 9 +++++++-- src/controllers/dynamic/worldStateController.ts | 7 +++++-- src/routes/cache.ts | 8 ++++++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/controllers/api/loginController.ts b/src/controllers/api/loginController.ts index 9338b3c7..40d5d5d1 100644 --- a/src/controllers/api/loginController.ts +++ b/src/controllers/api/loginController.ts @@ -20,6 +20,11 @@ const loginController: RequestHandler = async (request, response) => { const account = await Account.findOne({ email: loginRequest.email }); //{ _id: 0, __v: 0 } const nonce = Math.round(Math.random() * Number.MAX_SAFE_INTEGER); + const buildLabel: string = + typeof request.query.buildLabel == "string" + ? request.query.buildLabel.split(" ").join("+") + : buildConfig.buildLabel; + if (!account && config.autoCreateAccount && loginRequest.ClientType != "webui") { try { const newAccount = await createAccount({ @@ -45,7 +50,7 @@ const loginController: RequestHandler = async (request, response) => { DTLS: DTLS, IRC: config.myIrcAddresses ?? [config.myAddress], HUB: HUB, - BuildLabel: buildConfig.buildLabel, + BuildLabel: buildLabel, MatchmakingBuildId: buildConfig.matchmakingBuildId }; @@ -81,7 +86,7 @@ const loginController: RequestHandler = async (request, response) => { DTLS: DTLS, IRC: config.myIrcAddresses ?? [config.myAddress], HUB: HUB, - BuildLabel: buildConfig.buildLabel, + BuildLabel: buildLabel, MatchmakingBuildId: buildConfig.matchmakingBuildId }; diff --git a/src/controllers/dynamic/worldStateController.ts b/src/controllers/dynamic/worldStateController.ts index 32cfdfa0..92351233 100644 --- a/src/controllers/dynamic/worldStateController.ts +++ b/src/controllers/dynamic/worldStateController.ts @@ -2,10 +2,13 @@ import { RequestHandler } from "express"; import worldState from "@/static/fixed_responses/worldState.json"; import buildConfig from "@/static/data/buildConfig.json"; -const worldStateController: RequestHandler = (_req, res) => { +const worldStateController: RequestHandler = (req, res) => { + const buildLabel: string = + typeof req.query.buildLabel == "string" ? req.query.buildLabel.split(" ").join("+") : buildConfig.buildLabel; + res.json({ ...worldState, - BuildLabel: buildConfig.buildLabel, + BuildLabel: buildLabel, Time: Math.round(Date.now() / 1000) }); }; diff --git a/src/routes/cache.ts b/src/routes/cache.ts index 34764f22..37275394 100644 --- a/src/routes/cache.ts +++ b/src/routes/cache.ts @@ -4,8 +4,12 @@ import fs from "fs/promises"; const cacheRouter = express.Router(); -cacheRouter.get(/^\/origin\/[a-zA-Z0-9]+\/[0-9]+\/H\.Cache\.bin.*$/, (_req, res) => { - res.sendFile(`static/data/H.Cache_${buildConfig.version}.bin`, { root: "./" }); +cacheRouter.get(/^\/origin\/[a-zA-Z0-9]+\/[0-9]+\/H\.Cache\.bin.*$/, (req, res) => { + if (typeof req.query.version == "string" && req.query.version.match(/^\d\d\d\d\.\d\d\.\d\d\.\d\d\.\d\d$/)) { + res.sendFile(`static/data/H.Cache_${req.query.version}.bin`, { root: "./" }); + } else { + res.sendFile(`static/data/H.Cache_${buildConfig.version}.bin`, { root: "./" }); + } }); // eslint-disable-next-line @typescript-eslint/no-misused-promises -- 2.47.2 From b0b2d9f6faa722d09b2a2d2ff5425b793789a83f Mon Sep 17 00:00:00 2001 From: Sainan Date: Fri, 20 Dec 2024 03:11:38 +0100 Subject: [PATCH 016/181] fix: automatically populate regions for unlockAllMissions (#587) --- src/controllers/api/inventoryController.ts | 12 +- static/fixed_responses/allMissions.json | 1542 -------------------- 2 files changed, 9 insertions(+), 1545 deletions(-) delete mode 100644 static/fixed_responses/allMissions.json diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 5cb4acd6..c207dd35 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -4,11 +4,10 @@ import { toInventoryResponse } from "@/src/helpers/inventoryHelpers"; import { Inventory } from "@/src/models/inventoryModels/inventoryModel"; import { config } from "@/src/services/configService"; import allDialogue from "@/static/fixed_responses/allDialogue.json"; -import allMissions from "@/static/fixed_responses/allMissions.json"; import { ILoadoutDatabase } from "@/src/types/saveLoadoutTypes"; import { IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes"; import { IPolarity, ArtifactPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes"; -import { ExportCustoms, ExportFlavour, ExportKeys, ExportResources } from "warframe-public-export-plus"; +import { ExportCustoms, ExportFlavour, ExportKeys, ExportRegions, ExportResources } from "warframe-public-export-plus"; // eslint-disable-next-line @typescript-eslint/no-misused-promises const inventoryController: RequestHandler = async (request, response) => { @@ -54,7 +53,14 @@ const inventoryController: RequestHandler = async (request, response) => { } if (config.unlockAllMissions) { - inventoryResponse.Missions = allMissions; + inventoryResponse.Missions = []; + for (const tag of Object.keys(ExportRegions)) { + inventoryResponse.Missions.push({ + Completes: 1, + Tier: 1, + Tag: tag + }); + } addString(inventoryResponse.NodeIntrosCompleted, "TeshinHardModeUnlocked"); } diff --git a/static/fixed_responses/allMissions.json b/static/fixed_responses/allMissions.json deleted file mode 100644 index 74b18f42..00000000 --- a/static/fixed_responses/allMissions.json +++ /dev/null @@ -1,1542 +0,0 @@ -[ - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode203" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode4" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode181" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode88" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode18" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode106" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode97" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode14" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode73" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode405" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode31" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode2" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode308" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode94" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode45" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode113" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode33" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode204" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode41" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode17" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode410" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode16" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode205" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode408" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode185" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode132" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode223" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode153" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode907" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode60" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode25" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode119" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode82" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode229" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode79" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode5" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode12" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode74" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode121" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode70" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode149" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode43" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode75" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode196" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode7" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode147" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode310" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode2" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode304" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode83" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode56" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode23" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode746" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode98" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode6" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode67" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode709" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode146" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode128" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode27" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode100" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode12" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode19" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode903" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode59" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode39" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode230" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode713" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode144" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode710" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode104" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode23" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode85" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode1" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode905" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode87" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode748" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode65" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode301" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SettlementNode11" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode51" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode231" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode42" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode58" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode401" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode25" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode706" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode76" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode195" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode707" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SettlementNode20" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode125" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode61" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode162" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode8" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode164" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode177" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode93" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode21" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode188" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SettlementNode10" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode141" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode101" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode140" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode220" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode741" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode118" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode130" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode49" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode6" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode139" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode109" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode26" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode138" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode103" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode712" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode1" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode63" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode411" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode89" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode191" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode36" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode10" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode193" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode126" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode38" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode412" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SettlementNode12" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode902" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode209" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode409" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode210" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode742" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode175" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode189" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode190" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode21" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode84" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode62" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode166" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode50" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode137" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode102" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode224" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode167" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode30" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode69" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode129" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode217" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode24" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode233" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode211" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode72" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode407" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode15" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode747" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode212" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode131" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode81" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode906" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode226" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode306" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode708" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode13" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode228" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode300" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode17" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode127" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode114" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode48" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode18" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SettlementNode1" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode0" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode9" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode743" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode184" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode908" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode15" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode57" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode171" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode24" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode22" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode187" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SettlementNode15" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SettlementNode14" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode4" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SettlementNode2" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode173" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode214" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode46" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode122" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SettlementNode3" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode305" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode404" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode225" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode34" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode904" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode745" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode402" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode744" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode20" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode28" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode711" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode400" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode22" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode32" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode11" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode238" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode236" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode235" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode237" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode740" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode10" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode53" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode135" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode3" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode96" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode105" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode403" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode108" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode78" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode232" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode450" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode302" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode406" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode14" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode64" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode66" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode16" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode123" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode215" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode216" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode68" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode107" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode183" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode9" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode99" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode172" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode199" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode20" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode309" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode19" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode307" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode720" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode715" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode719" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode718" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode716" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode717" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode721" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "SolNode723" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "ClanNode11" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode501" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode502" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode503" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode504" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode505" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode509" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode510" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode511" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode512" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode513" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode514" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode515" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode516" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode518" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode519" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode521" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode522" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode523" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode524" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode525" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode526" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode527" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode528" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode529" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode530" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode531" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode533" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode534" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode535" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode536" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode538" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode539" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode540" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode541" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode542" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode543" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode550" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode551" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode552" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode553" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode554" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode555" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "CrewBattleNode556" - }, - { - "Completes": 2, - "Tier": 1, - "Tag": "EarthToVenusJunction" - }, - { - "Completes": 2, - "Tier": 1, - "Tag": "VenusToMercuryJunction" - }, - { - "Completes": 2, - "Tier": 1, - "Tag": "EarthToMarsJunction" - }, - { - "Completes": 2, - "Tier": 1, - "Tag": "MarsToPhobosJunction" - }, - { - "Completes": 2, - "Tier": 1, - "Tag": "MarsToCeresJunction" - }, - { - "Completes": 2, - "Tier": 1, - "Tag": "CeresToJupiterJunction" - }, - { - "Completes": 2, - "Tier": 1, - "Tag": "JupiterToEuropaJunction" - }, - { - "Completes": 2, - "Tier": 1, - "Tag": "JupiterToSaturnJunction" - }, - { - "Completes": 2, - "Tier": 1, - "Tag": "SaturnToUranusJunction" - }, - { - "Completes": 1, - "Tier": 1, - "Tag": "UranusToNeptuneJunction" - }, - { - "Completes": 2, - "Tier": 1, - "Tag": "NeptuneToPlutoJunction" - }, - { - "Completes": 2, - "Tier": 1, - "Tag": "PlutoToSednaJunction" - }, - { - "Completes": 2, - "Tier": 1, - "Tag": "PlutoToErisJunction" - } -] -- 2.47.2 From 144ac5850c17d083328fc057b220eab15796fe2a Mon Sep 17 00:00:00 2001 From: Sainan Date: Fri, 20 Dec 2024 03:12:36 +0100 Subject: [PATCH 017/181] feat(inventory): add accolade fields to IInventoryResponse (#586) --- src/types/inventoryTypes/inventoryTypes.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index dd6acc18..de502f11 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -170,6 +170,14 @@ export interface IInventoryResponse { PendingRecipes: IPendingRecipeResponse[]; TrainingDate: IMongoDate; PlayerLevel: number; + Staff?: boolean; + Founder?: number; + Guide?: number; + Moderator?: boolean; + Partner?: boolean; + Accolades?: { + Heirloom?: boolean; + }; Upgrades: ICrewShipSalvagedWeaponSkin[]; EquippedGear: string[]; DeathMarks: string[]; -- 2.47.2 From 8a43eae23092910a20d003771cdc40e9efca4844 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 00:34:19 +0100 Subject: [PATCH 018/181] feat: replace infiniteResources with infiniteCredits & infinitePlatinum (#588) --- config.json.example | 3 ++- src/controllers/api/getCreditsController.ts | 25 +++++++++++---------- src/controllers/api/inventoryController.ts | 5 +++-- src/services/configService.ts | 3 ++- src/services/inventoryService.ts | 2 +- static/webui/index.html | 8 +++++-- static/webui/script.js | 3 ++- 7 files changed, 29 insertions(+), 20 deletions(-) diff --git a/config.json.example b/config.json.example index 6ae52747..6a581f92 100644 --- a/config.json.example +++ b/config.json.example @@ -16,7 +16,8 @@ "unlockAllMissions": true, "unlockAllQuests": true, "completeAllQuests": false, - "infiniteResources": true, + "infiniteCredits": true, + "infinitePlatinum": true, "unlockAllShipFeatures": true, "unlockAllShipDecorations": true, "unlockAllFlavourItems": true, diff --git a/src/controllers/api/getCreditsController.ts b/src/controllers/api/getCreditsController.ts index 805b0505..78523496 100644 --- a/src/controllers/api/getCreditsController.ts +++ b/src/controllers/api/getCreditsController.ts @@ -13,21 +13,22 @@ export const getCreditsController: RequestHandler = async (req, res) => { return; } - if (config.infiniteResources) { - res.json({ - RegularCredits: 999999999, - TradesRemaining: 999999999, - PremiumCreditsFree: 999999999, - PremiumCredits: 999999999 - }); - return; - } - const inventory = await getInventory(accountId); - res.json({ + + const response = { RegularCredits: inventory.RegularCredits, TradesRemaining: inventory.TradesRemaining, PremiumCreditsFree: inventory.PremiumCreditsFree, PremiumCredits: inventory.PremiumCredits - }); + }; + + if (config.infiniteCredits) { + response.RegularCredits = 999999999; + } + if (config.infinitePlatinum) { + response.PremiumCreditsFree = 999999999; + response.PremiumCredits = 999999999; + } + + res.json(response); }; diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index c207dd35..366ae82f 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -33,9 +33,10 @@ const inventoryController: RequestHandler = async (request, response) => { const inventoryResponse = toInventoryResponse(inventoryJSON); - if (config.infiniteResources) { + if (config.infiniteCredits) { inventoryResponse.RegularCredits = 999999999; - inventoryResponse.TradesRemaining = 999999999; + } + if (config.infinitePlatinum) { inventoryResponse.PremiumCreditsFree = 999999999; inventoryResponse.PremiumCredits = 999999999; } diff --git a/src/services/configService.ts b/src/services/configService.ts index ab16cb7e..a0aceb73 100644 --- a/src/services/configService.ts +++ b/src/services/configService.ts @@ -33,7 +33,8 @@ interface IConfig { unlockAllMissions?: boolean; unlockAllQuests?: boolean; completeAllQuests?: boolean; - infiniteResources?: boolean; + infiniteCredits?: boolean; + infinitePlatinum?: boolean; unlockAllShipFeatures?: boolean; unlockAllShipDecorations?: boolean; unlockAllFlavourItems?: boolean; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index d221df7a..9e7e6cea 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -419,7 +419,7 @@ export const updateSlots = async (accountId: string, slotName: SlotNames, slotAm }; export const updateCurrency = async (price: number, usePremium: boolean, accountId: string) => { - if (config.infiniteResources) { + if (usePremium ? config.infinitePlatinum : config.infiniteCredits) { return {}; } diff --git a/static/webui/index.html b/static/webui/index.html index 533b2f20..983880c2 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -209,8 +209,12 @@
- - + + +
+
+ +
diff --git a/static/webui/script.js b/static/webui/script.js index db5b831c..8db1ad38 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -736,7 +736,8 @@ const uiConfigs = [ "unlockAllMissions", "unlockAllQuests", "completeAllQuests", - "infiniteResources", + "infiniteCredits", + "infinitePlatinum", "unlockAllShipFeatures", "unlockAllShipDecorations", "unlockAllFlavourItems", -- 2.47.2 From d9c94664c3eb1e3d59e05b209355cc61caaba43c Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 00:44:49 +0100 Subject: [PATCH 019/181] feat: daily reset for syndicate standing (#582) --- src/controllers/api/inventoryController.ts | 31 +++++++++++++++++--- src/controllers/api/loginController.ts | 4 +-- src/models/inventoryModels/inventoryModel.ts | 1 + src/models/loginModel.ts | 3 +- src/services/loginService.ts | 8 +++-- src/types/inventoryTypes/inventoryTypes.ts | 1 + src/types/loginTypes.ts | 1 + 7 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 366ae82f..66f37b34 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -1,5 +1,5 @@ import { RequestHandler } from "express"; -import { getAccountIdForRequest } from "@/src/services/loginService"; +import { getAccountForRequest } from "@/src/services/loginService"; import { toInventoryResponse } from "@/src/helpers/inventoryHelpers"; import { Inventory } from "@/src/models/inventoryModels/inventoryModel"; import { config } from "@/src/services/configService"; @@ -11,15 +11,15 @@ import { ExportCustoms, ExportFlavour, ExportKeys, ExportRegions, ExportResource // eslint-disable-next-line @typescript-eslint/no-misused-promises const inventoryController: RequestHandler = async (request, response) => { - let accountId; + let account; try { - accountId = await getAccountIdForRequest(request); + account = await getAccountForRequest(request); } catch (e) { response.status(400).send("Log-in expired"); return; } - const inventory = await Inventory.findOne({ accountOwnerId: accountId }) + const inventory = await Inventory.findOne({ accountOwnerId: account._id.toString() }) .populate<{ LoadOutPresets: ILoadoutDatabase }>("LoadOutPresets") .populate<{ Ships: IShipInventory }>("Ships", "-ShipInteriorColors"); @@ -28,6 +28,29 @@ const inventoryController: RequestHandler = async (request, response) => { return; } + // Handle daily reset + const today: number = Math.trunc(new Date().getTime() / 86400000); + if (account.LastLoginDay != today) { + account.LastLoginDay = today; + await account.save(); + + inventory.DailyAffiliation = 16000; + inventory.DailyAffiliationPvp = 16000; + inventory.DailyAffiliationLibrary = 16000; + inventory.DailyAffiliationCetus = 16000; + inventory.DailyAffiliationQuills = 16000; + inventory.DailyAffiliationSolaris = 16000; + inventory.DailyAffiliationVentkids = 16000; + inventory.DailyAffiliationVox = 16000; + inventory.DailyAffiliationEntrati = 16000; + inventory.DailyAffiliationNecraloid = 16000; + inventory.DailyAffiliationZariman = 16000; + inventory.DailyAffiliationKahl = 16000; + inventory.DailyAffiliationCavia = 16000; + inventory.DailyAffiliationHex = 16000; + await inventory.save(); + } + //TODO: make a function that converts from database representation to client const inventoryJSON = inventory.toJSON(); diff --git a/src/controllers/api/loginController.ts b/src/controllers/api/loginController.ts index 40d5d5d1..22baf06f 100644 --- a/src/controllers/api/loginController.ts +++ b/src/controllers/api/loginController.ts @@ -41,7 +41,7 @@ const loginController: RequestHandler = async (request, response) => { }); logger.debug("created new account"); // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { email, password, ...databaseAccount } = newAccount; + const { email, password, LastLoginDay, ...databaseAccount } = newAccount; const newLoginResponse: ILoginResponse = { ...databaseAccount, Groups: groups, @@ -77,7 +77,7 @@ const loginController: RequestHandler = async (request, response) => { } await account.save(); - const { email, password, ...databaseAccount } = account.toJSON(); + const { email, password, LastLoginDay, ...databaseAccount } = account.toJSON(); const newLoginResponse: ILoginResponse = { ...databaseAccount, Groups: groups, diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index c49e8eb6..41df80c4 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -635,6 +635,7 @@ const inventorySchema = new Schema( DailyAffiliationZariman: Number, DailyAffiliationKahl: Number, DailyAffiliationCavia: Number, + DailyAffiliationHex: Number, //Daily Focus limit DailyFocus: Number, diff --git a/src/models/loginModel.ts b/src/models/loginModel.ts index 03e52265..3048335c 100644 --- a/src/models/loginModel.ts +++ b/src/models/loginModel.ts @@ -33,7 +33,8 @@ const databaseAccountSchema = new Schema( AmazonRefreshToken: { type: String }, ConsentNeeded: { type: Boolean, required: true }, TrackedSettings: { type: [String], default: [] }, - Nonce: { type: Number, default: 0 } + Nonce: { type: Number, default: 0 }, + LastLoginDay: { type: Number } }, opts ); diff --git a/src/services/loginService.ts b/src/services/loginService.ts index 3ddb7982..36d4d57e 100644 --- a/src/services/loginService.ts +++ b/src/services/loginService.ts @@ -44,7 +44,7 @@ export const createPersonalRooms = async (accountId: Types.ObjectId, shipId: Typ await personalRooms.save(); }; -export const getAccountIdForRequest = async (req: Request): Promise => { +export const getAccountForRequest = async (req: Request) => { if (!req.query.accountId) { throw new Error("Request is missing accountId parameter"); } @@ -61,5 +61,9 @@ export const getAccountIdForRequest = async (req: Request): Promise => { if (!account) { throw new Error("Invalid accountId-nonce pair"); } - return account._id.toString(); + return account; +}; + +export const getAccountIdForRequest = async (req: Request): Promise => { + return (await getAccountForRequest(req))._id.toString(); }; diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index de502f11..b3259209 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -283,6 +283,7 @@ export interface IInventoryResponse { NemesisAbandonedRewards: string[]; DailyAffiliationKahl: number; DailyAffiliationCavia: number; + DailyAffiliationHex?: number; LastInventorySync: IOid; NextRefill: IMongoDate; // Next time argon crystals will have a decay tick FoundToday?: IMiscItem[]; // for Argon Crystals diff --git a/src/types/loginTypes.ts b/src/types/loginTypes.ts index f5dcfaf6..cfec7ad9 100644 --- a/src/types/loginTypes.ts +++ b/src/types/loginTypes.ts @@ -32,6 +32,7 @@ export interface IDatabaseAccount { ConsentNeeded: boolean; TrackedSettings: string[]; Nonce: number; + LastLoginDay?: number; } export interface ILoginRequest { -- 2.47.2 From fe7051f855b8695188f3bccbfa4f4d6fdcfc4c33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E6=A5=BD=E5=9D=82=C2=B7=E5=96=B5?= Date: Sun, 22 Dec 2024 07:47:46 +0800 Subject: [PATCH 020/181] Fix environment to config.json parser (#589) --- docker-entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index f6523d8b..bd942c82 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -15,7 +15,7 @@ for config in $(env | grep "APP_") do var=$(echo "${config}" | tr '[:upper:]' '[:lower:]' | sed 's/app_//g' | sed -E 's/_([a-z])/\U\1/g' | sed 's/=.*//g') val=$(echo "${config}" | sed 's/.*=//g') - jq --arg variable "$var" --arg value "$val" '.[$variable] += $value' config.json > config.tmp + jq --arg variable "$var" --arg value "$val" '.[$variable] += try [$value|fromjson][] catch $value' config.json > config.tmp mv config.tmp config.json done -- 2.47.2 From 5ddc1aea855342d3ecfa8b13440e9cac9adfdf96 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 22 Dec 2024 00:48:45 +0100 Subject: [PATCH 021/181] build(deps): bump mongoose from 8.9.0 to 8.9.2 (#590) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7a220dd5..f4b35c3e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "copyfiles": "^2.4.1", "express": "^5.0.0-beta.3", - "mongoose": "^8.4.5", + "mongoose": "^8.9.2", "warframe-public-export-plus": "^0.5.7", "warframe-riven-info": "^0.1.2", "winston": "^3.13.0", @@ -2507,9 +2507,9 @@ } }, "node_modules/mongoose": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.9.0.tgz", - "integrity": "sha512-b58zY3PLNBcoz6ZXFckr0leJcVVBMAOBvD+7Bj2ZjghAwntXmNnqwlDixTKQU3UYoQIGTv+AQx/0ThsvaeVrCA==", + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.9.2.tgz", + "integrity": "sha512-mLWynmZS1v8HTeMxyLhskQncS1SkrjW1eLNuFDYGQMQ/5QrFrxTLNwWXeCRZeKT2lXyaxW8bnJC9AKPT9jYMkw==", "dependencies": { "bson": "^6.10.1", "kareem": "2.6.3", diff --git a/package.json b/package.json index f0d638fc..ba802c6e 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "dependencies": { "copyfiles": "^2.4.1", "express": "^5.0.0-beta.3", - "mongoose": "^8.4.5", + "mongoose": "^8.9.2", "warframe-public-export-plus": "^0.5.7", "warframe-riven-info": "^0.1.2", "winston": "^3.13.0", -- 2.47.2 From 46332bf3e0bdac4e5d9bca6da7fd64d5d1f205d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 22 Dec 2024 00:51:51 +0100 Subject: [PATCH 022/181] build(deps): bump winston from 3.13.0 to 3.17.0 (#591) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 28 ++++++++++++++-------------- package.json | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index f4b35c3e..2d0321d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "mongoose": "^8.9.2", "warframe-public-export-plus": "^0.5.7", "warframe-riven-info": "^0.1.2", - "winston": "^3.13.0", + "winston": "^3.17.0", "winston-daily-rotate-file": "^5.0.0" }, "devDependencies": { @@ -2314,9 +2314,9 @@ "dev": true }, "node_modules/logform": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", - "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", "dependencies": { "@colors/colors": "1.6.0", "@types/triple-beam": "^1.3.2", @@ -3823,21 +3823,21 @@ } }, "node_modules/winston": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.13.0.tgz", - "integrity": "sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", "dependencies": { "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", "async": "^3.2.3", "is-stream": "^2.0.0", - "logform": "^2.4.0", + "logform": "^2.7.0", "one-time": "^1.0.0", "readable-stream": "^3.4.0", "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.7.0" + "winston-transport": "^4.9.0" }, "engines": { "node": ">= 12.0.0" @@ -3861,12 +3861,12 @@ } }, "node_modules/winston-transport": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", - "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", + "logform": "^2.7.0", + "readable-stream": "^3.6.2", "triple-beam": "^1.3.0" }, "engines": { diff --git a/package.json b/package.json index ba802c6e..f3e6fcf0 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "mongoose": "^8.9.2", "warframe-public-export-plus": "^0.5.7", "warframe-riven-info": "^0.1.2", - "winston": "^3.13.0", + "winston": "^3.17.0", "winston-daily-rotate-file": "^5.0.0" }, "devDependencies": { -- 2.47.2 From b544d6159bfac67963f4b74d404d643efb848158 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 22 Dec 2024 00:55:25 +0100 Subject: [PATCH 023/181] build(deps-dev): bump @typescript-eslint/parser from 7.15.0 to 7.18.0 (#494) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 115 ++++++++++++++++++++++++++++++++++++++++++---- package.json | 2 +- 2 files changed, 108 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2d0321d2..e8584041 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "@types/express": "^4.17.20", "@types/morgan": "^1.9.9", "@typescript-eslint/eslint-plugin": "^7.14", - "@typescript-eslint/parser": "^7.14", + "@typescript-eslint/parser": "^7.18", "eslint": "^8.56.0", "eslint-plugin-prettier": "^5.1.3", "morgan": "^1.10.0", @@ -473,15 +473,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.15.0.tgz", - "integrity": "sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/typescript-estree": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "engines": { @@ -500,6 +500,90 @@ } } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@typescript-eslint/parser/node_modules/debug": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", @@ -517,6 +601,21 @@ } } }, + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/parser/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", diff --git a/package.json b/package.json index f3e6fcf0..ecd2dd7e 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "@types/express": "^4.17.20", "@types/morgan": "^1.9.9", "@typescript-eslint/eslint-plugin": "^7.14", - "@typescript-eslint/parser": "^7.14", + "@typescript-eslint/parser": "^7.18", "eslint": "^8.56.0", "eslint-plugin-prettier": "^5.1.3", "morgan": "^1.10.0", -- 2.47.2 From d1cf2953dff489b782e965ac5388bade3063b1df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 22 Dec 2024 00:59:20 +0100 Subject: [PATCH 024/181] build(deps-dev): bump prettier from 3.3.2 to 3.4.2 (#592) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index e8584041..331f4168 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "eslint": "^8.56.0", "eslint-plugin-prettier": "^5.1.3", "morgan": "^1.10.0", - "prettier": "^3.3.2", + "prettier": "^3.4.2", "ts-node-dev": "^2.0.0", "tsconfig-paths": "^4.2.0", "typescript": "^5.5" @@ -2934,9 +2934,9 @@ } }, "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" diff --git a/package.json b/package.json index ecd2dd7e..d8b2b2bf 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "eslint": "^8.56.0", "eslint-plugin-prettier": "^5.1.3", "morgan": "^1.10.0", - "prettier": "^3.3.2", + "prettier": "^3.4.2", "ts-node-dev": "^2.0.0", "tsconfig-paths": "^4.2.0", "typescript": "^5.5" -- 2.47.2 From 7b894823cc8dc53d761abcaccdc8b167058de249 Mon Sep 17 00:00:00 2001 From: Sainan Date: Thu, 17 Oct 2024 22:00:23 +0200 Subject: [PATCH 025/181] fix: duplicate warnings explicit-module-boundary-types is a subset of explicit-function-return-type --- .eslintrc | 1 - 1 file changed, 1 deletion(-) diff --git a/.eslintrc b/.eslintrc index 3f44db43..a4618ed1 100644 --- a/.eslintrc +++ b/.eslintrc @@ -12,7 +12,6 @@ }, "rules": { "@typescript-eslint/explicit-function-return-type": "warn", - "@typescript-eslint/explicit-module-boundary-types": "warn", "@typescript-eslint/restrict-template-expressions": "warn", "@typescript-eslint/restrict-plus-operands": "warn", "@typescript-eslint/no-unsafe-member-access": "warn", -- 2.47.2 From c6c3e1c00588b83c9a6b94dc5f38085afe5d88ac Mon Sep 17 00:00:00 2001 From: Sainan Date: Thu, 17 Oct 2024 22:12:28 +0200 Subject: [PATCH 026/181] chore: simplify getExalted --- src/services/inventoryService.ts | 4 ++-- src/services/itemDataService.ts | 11 +++-------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 9e7e6cea..487a2e85 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -361,7 +361,7 @@ export const addSentinel = async (sentinelName: string, accountId: string) => { export const addPowerSuit = async (powersuitName: string, accountId: string): Promise => { const specialItems = getExalted(powersuitName); - if (specialItems != false) { + if (specialItems) { for await (const specialItem of specialItems) { await addSpecialItem(specialItem, accountId); } @@ -374,7 +374,7 @@ export const addPowerSuit = async (powersuitName: string, accountId: string): Pr export const addMechSuit = async (mechsuitName: string, accountId: string) => { const specialItems = getExalted(mechsuitName); - if (specialItems != false) { + if (specialItems) { for await (const specialItem of specialItems) { await addSpecialItem(specialItem, accountId); } diff --git a/src/services/itemDataService.ts b/src/services/itemDataService.ts index 3bf039dd..33d7064b 100644 --- a/src/services/itemDataService.ts +++ b/src/services/itemDataService.ts @@ -45,16 +45,11 @@ export const getRecipe = (uniqueName: string): IRecipe | undefined => { return ExportRecipes[uniqueName]; }; -export const getExalted = (uniqueName: string) => { - const suit = getSuitByUniqueName(uniqueName); - if (suit?.exalted !== undefined) { - return suit.exalted; - } else { - return false; - } +export const getExalted = (uniqueName: string): string[] | undefined => { + return getSuitByUniqueName(uniqueName)?.exalted; }; -export const getItemCategoryByUniqueName = (uniqueName: string) => { +export const getItemCategoryByUniqueName = (uniqueName: string): string => { //Lotus/Types/Items/MiscItems/PolymerBundle let splitWord = "Items/"; -- 2.47.2 From 0398691e018d299b7465d2a10b41d30d82487e10 Mon Sep 17 00:00:00 2001 From: Sainan Date: Thu, 17 Oct 2024 22:24:24 +0200 Subject: [PATCH 027/181] chore: simplify updateGeneric --- src/controllers/api/genericUpdateController.ts | 3 ++- src/services/inventoryService.ts | 4 +--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/controllers/api/genericUpdateController.ts b/src/controllers/api/genericUpdateController.ts index ce47af91..a5d4fbc9 100644 --- a/src/controllers/api/genericUpdateController.ts +++ b/src/controllers/api/genericUpdateController.ts @@ -11,7 +11,8 @@ import { IGenericUpdate } from "@/src/types/genericUpdate"; const genericUpdateController: RequestHandler = async (request, response) => { const accountId = await getAccountIdForRequest(request); const update = getJSONfromString(String(request.body)) as IGenericUpdate; - response.json(await updateGeneric(update, accountId)); + await updateGeneric(update, accountId); + response.json(update); }; export { genericUpdateController }; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 487a2e85..1cb3253b 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -460,7 +460,7 @@ export const updateCurrency = async (price: number, usePremium: boolean, account }; // TODO: AffiliationMods support (Nightwave). -export const updateGeneric = async (data: IGenericUpdate, accountId: string) => { +export const updateGeneric = async (data: IGenericUpdate, accountId: string): Promise => { const inventory = await getInventory(accountId); // Make it an array for easier parsing. @@ -476,8 +476,6 @@ export const updateGeneric = async (data: IGenericUpdate, accountId: string) => inventory.NodeIntrosCompleted = nodes; await inventory.save(); - - return data; }; export const updateTheme = async (data: IThemeUpdateRequest, accountId: string) => { -- 2.47.2 From 37f6fe9323c64e22bd50da83e60ef8ed0126916d Mon Sep 17 00:00:00 2001 From: Sainan Date: Thu, 17 Oct 2024 22:34:38 +0200 Subject: [PATCH 028/181] fix: isDate --- src/helpers/general.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/helpers/general.ts b/src/helpers/general.ts index 23fb9df6..bd30dcc9 100644 --- a/src/helpers/general.ts +++ b/src/helpers/general.ts @@ -33,11 +33,8 @@ const parseNumber = (data: unknown): number => { return Number(data); }; -const isDate = (date: string) => { - if (!Date.parse(date)) { - throw new Error("invalid date"); - } - return date; +const isDate = (date: string): boolean => { + return Date.parse(date) != 0; }; const parseDateNumber = (date: unknown): string => { -- 2.47.2 From 7b2c32b7233ad89653e31429f8957aef4b678298 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 05:13:43 +0100 Subject: [PATCH 029/181] style(coderabbit): disable sequence diagrams --- .coderabbit.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.coderabbit.yaml b/.coderabbit.yaml index 705ed940..c7e2bb61 100644 --- a/.coderabbit.yaml +++ b/.coderabbit.yaml @@ -9,6 +9,7 @@ reviews: poem: false review_status: true collapse_walkthrough: false + sequence_diagrams: false auto_review: enabled: true drafts: false -- 2.47.2 From c6ed013e235dba950660e6e33896013124a4e676 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 05:32:30 +0100 Subject: [PATCH 030/181] fix: purchasing of augment mods (#595) --- src/services/inventoryService.ts | 35 ++++++++++++++++---------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 1cb3253b..32c08151 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -36,7 +36,8 @@ import { ExportCustoms, ExportFlavour, ExportRecipes, - ExportResources + ExportResources, + ExportUpgrades } from "warframe-public-export-plus"; export const createInventory = async ( @@ -169,6 +170,22 @@ export const addItem = async ( } return { InventoryChanges }; } + if (typeName in ExportUpgrades) { + const inventory = await getInventory(accountId); + const changes = [ + { + ItemType: typeName, + ItemCount: quantity + } + ]; + addMods(inventory, changes); + await inventory.save(); + return { + InventoryChanges: { + RawUpgrades: changes + } + }; + } // Path-based duck typing switch (typeName.substr(1).split("/")[1]) { @@ -228,22 +245,6 @@ export const addItem = async ( [weaponType]: [weapon] } }; - case "Upgrades": { - const inventory = await getInventory(accountId); - const changes = [ - { - ItemType: typeName, - ItemCount: quantity - } - ]; - addMods(inventory, changes); - await inventory.save(); - return { - InventoryChanges: { - RawUpgrades: changes - } - }; - } case "Objects": { // /Lotus/Objects/Tenno/Props/TnoLisetTextProjector (Note Beacon) const inventory = await getInventory(accountId); -- 2.47.2 From c2a9fc6609e10a4fe23a872028ace538bd73e237 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 05:38:46 +0100 Subject: [PATCH 031/181] fix: unable to buy fish bait (#598) --- src/services/inventoryService.ts | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 32c08151..be09e6bd 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -35,6 +35,7 @@ import { ExportBoosterPacks, ExportCustoms, ExportFlavour, + ExportGear, ExportRecipes, ExportResources, ExportUpgrades @@ -186,6 +187,22 @@ export const addItem = async ( } }; } + if (typeName in ExportGear) { + const inventory = await getInventory(accountId); + const consumablesChanges = [ + { + ItemType: typeName, + ItemCount: quantity + } satisfies IConsumable + ]; + addConsumables(inventory, consumablesChanges); + await inventory.save(); + return { + InventoryChanges: { + Consumables: consumablesChanges + } + }; + } // Path-based duck typing switch (typeName.substr(1).split("/")[1]) { @@ -329,21 +346,6 @@ export const addItem = async ( }; } break; - case "Restoratives": // Codex Scanner, Remote Observer, Starburst - const inventory = await getInventory(accountId); - const consumablesChanges = [ - { - ItemType: typeName, - ItemCount: quantity - } satisfies IConsumable - ]; - addConsumables(inventory, consumablesChanges); - await inventory.save(); - return { - InventoryChanges: { - Consumables: consumablesChanges - } - }; } break; } -- 2.47.2 From f2ae465dd91bf92fa43c035f5e466e095e1522f6 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 05:40:37 +0100 Subject: [PATCH 032/181] fix: inconsistent handling of purchase request (#594) --- src/controllers/api/purchaseController.ts | 4 +-- src/helpers/purchaseHelpers.ts | 40 +---------------------- 2 files changed, 3 insertions(+), 41 deletions(-) diff --git a/src/controllers/api/purchaseController.ts b/src/controllers/api/purchaseController.ts index 9e8bcb45..3e8608fa 100644 --- a/src/controllers/api/purchaseController.ts +++ b/src/controllers/api/purchaseController.ts @@ -1,11 +1,11 @@ import { RequestHandler } from "express"; import { getAccountIdForRequest } from "@/src/services/loginService"; -import { toPurchaseRequest } from "@/src/helpers/purchaseHelpers"; +import { IPurchaseRequest } from "@/src/types/purchaseTypes"; import { handlePurchase } from "@/src/services/purchaseService"; // eslint-disable-next-line @typescript-eslint/no-misused-promises export const purchaseController: RequestHandler = async (req, res) => { - const purchaseRequest = toPurchaseRequest(JSON.parse(String(req.body))); + const purchaseRequest = JSON.parse(String(req.body)) as IPurchaseRequest; const accountId = await getAccountIdForRequest(req); const response = await handlePurchase(purchaseRequest, accountId); res.json(response); diff --git a/src/helpers/purchaseHelpers.ts b/src/helpers/purchaseHelpers.ts index 2b208221..161bb2ec 100644 --- a/src/helpers/purchaseHelpers.ts +++ b/src/helpers/purchaseHelpers.ts @@ -1,43 +1,5 @@ -import { parseBoolean, parseNumber, parseString } from "@/src/helpers/general"; import { slotPurchaseNameToSlotName } from "@/src/services/purchaseService"; -import { IPurchaseRequest, SlotPurchaseName } from "@/src/types/purchaseTypes"; - -export const toPurchaseRequest = (purchaseRequest: unknown): IPurchaseRequest => { - if (!purchaseRequest || typeof purchaseRequest !== "object") { - throw new Error("incorrect or missing purchase request data"); - } - - if ( - "PurchaseParams" in purchaseRequest && - "buildLabel" in purchaseRequest && - purchaseRequest.PurchaseParams && - typeof purchaseRequest.PurchaseParams === "object" && - "Source" in purchaseRequest.PurchaseParams && - "StoreItem" in purchaseRequest.PurchaseParams && - "StorePage" in purchaseRequest.PurchaseParams && - "SearchTerm" in purchaseRequest.PurchaseParams && - "CurrentLocation" in purchaseRequest.PurchaseParams && - "Quantity" in purchaseRequest.PurchaseParams && - "UsePremium" in purchaseRequest.PurchaseParams && - "ExpectedPrice" in purchaseRequest.PurchaseParams - ) { - return { - PurchaseParams: { - Source: parseNumber(purchaseRequest.PurchaseParams.Source), - StoreItem: parseString(purchaseRequest.PurchaseParams.StoreItem), - StorePage: parseString(purchaseRequest.PurchaseParams.StorePage), - SearchTerm: parseString(purchaseRequest.PurchaseParams.SearchTerm), - CurrentLocation: parseString(purchaseRequest.PurchaseParams.CurrentLocation), - Quantity: parseNumber(purchaseRequest.PurchaseParams.Quantity), - UsePremium: parseBoolean(purchaseRequest.PurchaseParams.UsePremium), - ExpectedPrice: parseNumber(purchaseRequest.PurchaseParams.ExpectedPrice) - }, - buildLabel: parseString(purchaseRequest.buildLabel) - }; - } - - throw new Error("invalid purchaseRequest"); -}; +import { SlotPurchaseName } from "@/src/types/purchaseTypes"; export const isSlotPurchaseName = (slotPurchaseName: string): slotPurchaseName is SlotPurchaseName => { return slotPurchaseName in slotPurchaseNameToSlotName; -- 2.47.2 From febe7ec5e0651fe49c2185a47baf526ea18664a2 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 07:26:14 +0100 Subject: [PATCH 033/181] feat: implement feeding of helminth (#597) --- package-lock.json | 8 +-- package.json | 2 +- .../api/infestedFoundryController.ts | 60 +++++++++++++++++++ src/models/inventoryModels/inventoryModel.ts | 5 +- src/types/inventoryTypes/inventoryTypes.ts | 8 ++- 5 files changed, 76 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 331f4168..52d5f73e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "copyfiles": "^2.4.1", "express": "^5.0.0-beta.3", "mongoose": "^8.9.2", - "warframe-public-export-plus": "^0.5.7", + "warframe-public-export-plus": "^0.5.8", "warframe-riven-info": "^0.1.2", "winston": "^3.17.0", "winston-daily-rotate-file": "^5.0.0" @@ -3877,9 +3877,9 @@ } }, "node_modules/warframe-public-export-plus": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.7.tgz", - "integrity": "sha512-5cT48YPZCJ/KGCtAK4hGtaE6709CYIPzCJUI/8odJxntnUfe2R3Np+T8+iw431H2mVA+4CF9ByhvicODhdBPLw==" + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.8.tgz", + "integrity": "sha512-ZhHrKIkI6nhjKDlxhrNcfN8r2Yc9g+eeKLS6+9w7gzC4NscIt6TU8tH8bfjJTDeo6nRrzt88szX1/Oo3WnUY4Q==" }, "node_modules/warframe-riven-info": { "version": "0.1.2", diff --git a/package.json b/package.json index d8b2b2bf..3e4ac173 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "copyfiles": "^2.4.1", "express": "^5.0.0-beta.3", "mongoose": "^8.9.2", - "warframe-public-export-plus": "^0.5.7", + "warframe-public-export-plus": "^0.5.8", "warframe-riven-info": "^0.1.2", "winston": "^3.17.0", "winston-daily-rotate-file": "^5.0.0" diff --git a/src/controllers/api/infestedFoundryController.ts b/src/controllers/api/infestedFoundryController.ts index cbfa0fa8..cf363a72 100644 --- a/src/controllers/api/infestedFoundryController.ts +++ b/src/controllers/api/infestedFoundryController.ts @@ -3,6 +3,8 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { getInventory, addMiscItems } from "@/src/services/inventoryService"; import { IOid } from "@/src/types/commonTypes"; +import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; +import { ExportMisc } from "warframe-public-export-plus"; // eslint-disable-next-line @typescript-eslint/no-misused-promises export const infestedFoundryController: RequestHandler = async (req, res) => { @@ -53,6 +55,57 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { break; } + case "c": { + // consume items + const request = getJSONfromString(String(req.body)) as IHelminthFeedRequest; + const inventory = await getInventory(accountId); + inventory.InfestedFoundry ??= {}; + inventory.InfestedFoundry.Resources ??= []; + inventory.InfestedFoundry.XP ??= 0; + + const miscItemChanges: IMiscItem[] = []; + let totalPercentagePointsGained = 0; + + for (const contribution of request.ResourceContributions) { + const snack = ExportMisc.helminthSnacks[contribution.ItemType]; + + // Note: Currently ignoring loss of apetite + totalPercentagePointsGained += snack.gain / 0.01; + const resource = inventory.InfestedFoundry.Resources.find(x => x.ItemType == snack.type); + if (resource) { + resource.Count += Math.trunc(snack.gain * 1000); + } else { + inventory.InfestedFoundry.Resources.push({ + ItemType: snack.type, + Count: Math.trunc(snack.gain * 1000) + }); + } + + // tally items for removal + const change = miscItemChanges.find(x => x.ItemType == contribution.ItemType); + if (change) { + change.ItemCount -= snack.count; + } else { + miscItemChanges.push({ ItemType: contribution.ItemType, ItemCount: snack.count * -1 }); + } + } + + inventory.InfestedFoundry.XP += 666 * totalPercentagePointsGained; + addMiscItems(inventory, miscItemChanges); + await inventory.save(); + + res.json({ + InventoryChanges: { + InfestedFoundry: { + XP: inventory.InfestedFoundry.XP, + Resources: inventory.InfestedFoundry.Resources + } + }, + MiscItems: miscItemChanges + }); + break; + } + case "o": // offerings update // {"OfferingsIndex":540,"SuitTypes":["/Lotus/Powersuits/PaxDuviricus/PaxDuviricusBaseSuit","/Lotus/Powersuits/Nezha/NezhaBaseSuit","/Lotus/Powersuits/Devourer/DevourerBaseSuit"],"Extra":false} res.status(404).end(); @@ -74,6 +127,13 @@ interface IHelminthNameRequest { newName: string; } +interface IHelminthFeedRequest { + ResourceContributions: { + ItemType: string; + Date: number; // unix timestamp + }[]; +} + const colorToShard: Record = { ACC_RED: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmar", ACC_RED_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmarMythic", diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 41df80c4..6094e0ea 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -25,6 +25,7 @@ import { IPlayerSkills, ISettings, IInfestedFoundry, + IHelminthResource, IConsumedSuit, IQuestProgress, IQuestKeyDatabase, @@ -454,10 +455,12 @@ const consumedSchuitsSchema = new Schema({ c: colorSchema }); +const helminthResourceSchema = new Schema({ ItemType: String, Count: Number }, { _id: false }); + const infestedFoundrySchema = new Schema( { Name: String, - Resources: { type: [typeCountSchema], default: undefined }, + Resources: { type: [helminthResourceSchema], default: undefined }, Slots: Number, XP: Number, ConsumedSuits: { type: [consumedSchuitsSchema], default: undefined }, diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index b3259209..bf76b33c 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -524,9 +524,15 @@ export interface IFusionTreasure { Sockets: number; } +// Like ITypeCount except 'Count' instead of 'ItemCount' +export interface IHelminthResource { + ItemType: string; + Count: number; +} + export interface IInfestedFoundry { Name?: string; - Resources?: ITypeCount[]; + Resources?: IHelminthResource[]; Slots?: number; XP?: number; ConsumedSuits?: IConsumedSuit[]; -- 2.47.2 From 987b05a3346a7486ed75f8ae36826049eac093e1 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 15:42:24 +0100 Subject: [PATCH 034/181] chore: update express to v5 (#599) --- package-lock.json | 36 +++++++++---------- package.json | 4 +-- .../api/addFriendImageController.ts | 1 - src/controllers/api/arcaneCommonController.ts | 1 - src/controllers/api/artifactsController.ts | 1 - .../api/claimCompletedRecipeController.ts | 1 - src/controllers/api/createGuildController.ts | 1 - src/controllers/api/evolveWeaponController.ts | 1 - src/controllers/api/focusController.ts | 1 - .../api/fusionTreasuresController.ts | 1 - .../api/genericUpdateController.ts | 1 - src/controllers/api/getCreditsController.ts | 1 - src/controllers/api/getGuildController.ts | 1 - src/controllers/api/getGuildDojoController.ts | 1 - src/controllers/api/getShipController.ts | 1 - src/controllers/api/gildWeaponController.ts | 1 - src/controllers/api/hostSessionController.ts | 1 - .../api/infestedFoundryController.ts | 1 - src/controllers/api/inventoryController.ts | 1 - .../api/inventorySlotsController.ts | 1 - src/controllers/api/loginController.ts | 1 - src/controllers/api/logoutController.ts | 1 - .../api/missionInventoryUpdateController.ts | 1 - .../api/modularWeaponCraftingController.ts | 1 - src/controllers/api/nameWeaponController.ts | 1 - .../api/projectionManagerController.ts | 1 - src/controllers/api/purchaseController.ts | 1 - ...queueDojoComponentDestructionController.ts | 1 - src/controllers/api/saveLoadout.ts | 1 - src/controllers/api/sellController.ts | 1 - .../api/setActiveShipController.ts | 1 - .../api/setBootLocationController.ts | 1 - .../api/setPlacedDecoInfoController.ts | 1 - .../api/setShipCustomizationsController.ts | 1 - .../api/setSupportedSyndicateController.ts | 1 - .../api/setWeaponSkillTreeController.ts | 1 - .../api/shipDecorationsController.ts | 1 - .../api/startDojoRecipeController.ts | 1 - src/controllers/api/startRecipeController.ts | 1 - .../api/stepSequencersController.ts | 1 - .../api/syndicateSacrificeController.ts | 1 - src/controllers/api/tauntHistoryController.ts | 1 - .../api/trainingResultController.ts | 1 - .../api/updateChallengeProgressController.ts | 1 - src/controllers/api/updateThemeController.ts | 1 - src/controllers/api/upgradesController.ts | 1 - src/controllers/custom/addItemController.ts | 1 - .../custom/createAccountController.ts | 1 - .../popArchonCrystalUpgradeController.ts | 1 - .../pushArchonCrystalUpgradeController.ts | 1 - .../custom/updateConfigDataController.ts | 1 - src/controllers/stats/viewController.ts | 1 - src/routes/cache.ts | 1 - 53 files changed, 20 insertions(+), 71 deletions(-) diff --git a/package-lock.json b/package-lock.json index 52d5f73e..d51729a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "GNU", "dependencies": { "copyfiles": "^2.4.1", - "express": "^5.0.0-beta.3", + "express": "^5", "mongoose": "^8.9.2", "warframe-public-export-plus": "^0.5.8", "warframe-riven-info": "^0.1.2", @@ -18,7 +18,7 @@ "winston-daily-rotate-file": "^5.0.0" }, "devDependencies": { - "@types/express": "^4.17.20", + "@types/express": "^5", "@types/morgan": "^1.9.9", "@typescript-eslint/eslint-plugin": "^7.14", "@typescript-eslint/parser": "^7.18", @@ -333,21 +333,21 @@ } }, "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz", + "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", "dev": true, "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", + "@types/express-serve-static-core": "^5.0.0", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.34", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.34.tgz", - "integrity": "sha512-fvr49XlCGoUj2Pp730AItckfjat4WNb0lb3kfrLWffd+RLeoGAMsq7UOy04PAPtoL01uKwcp6u8nhzpgpDYr3w==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz", + "integrity": "sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==", "dev": true, "dependencies": { "@types/node": "*", @@ -378,21 +378,21 @@ "dev": true }, "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "version": "6.9.17", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", + "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", "dev": true }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true }, "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, "dependencies": { "@types/mime": "^1", diff --git a/package.json b/package.json index 3e4ac173..b968388b 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "license": "GNU", "dependencies": { "copyfiles": "^2.4.1", - "express": "^5.0.0-beta.3", + "express": "^5", "mongoose": "^8.9.2", "warframe-public-export-plus": "^0.5.8", "warframe-riven-info": "^0.1.2", @@ -22,7 +22,7 @@ "winston-daily-rotate-file": "^5.0.0" }, "devDependencies": { - "@types/express": "^4.17.20", + "@types/express": "^5", "@types/morgan": "^1.9.9", "@typescript-eslint/eslint-plugin": "^7.14", "@typescript-eslint/parser": "^7.18", diff --git a/src/controllers/api/addFriendImageController.ts b/src/controllers/api/addFriendImageController.ts index 3ca2e1bd..3242234c 100644 --- a/src/controllers/api/addFriendImageController.ts +++ b/src/controllers/api/addFriendImageController.ts @@ -4,7 +4,6 @@ import { IUpdateGlyphRequest } from "@/src/types/requestTypes"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { getInventory } from "@/src/services/inventoryService"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises const addFriendImageController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const json = getJSONfromString(String(req.body)) as IUpdateGlyphRequest; diff --git a/src/controllers/api/arcaneCommonController.ts b/src/controllers/api/arcaneCommonController.ts index 81069976..70dae1ac 100644 --- a/src/controllers/api/arcaneCommonController.ts +++ b/src/controllers/api/arcaneCommonController.ts @@ -4,7 +4,6 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { getInventory, addMods } from "@/src/services/inventoryService"; import { IOid } from "@/src/types/commonTypes"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const arcaneCommonController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const json = getJSONfromString(String(req.body)) as IArcaneCommonRequest; diff --git a/src/controllers/api/artifactsController.ts b/src/controllers/api/artifactsController.ts index 6b6f6248..fb3f062d 100644 --- a/src/controllers/api/artifactsController.ts +++ b/src/controllers/api/artifactsController.ts @@ -4,7 +4,6 @@ import { upgradeMod } from "@/src/services/inventoryService"; import { IArtifactsRequest } from "@/src/types/requestTypes"; import { RequestHandler } from "express"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises const artifactsController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); diff --git a/src/controllers/api/claimCompletedRecipeController.ts b/src/controllers/api/claimCompletedRecipeController.ts index 27267953..ce93ee14 100644 --- a/src/controllers/api/claimCompletedRecipeController.ts +++ b/src/controllers/api/claimCompletedRecipeController.ts @@ -13,7 +13,6 @@ export interface IClaimCompletedRecipeRequest { RecipeIds: IOid[]; } -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const claimCompletedRecipeController: RequestHandler = async (req, res) => { const claimCompletedRecipeRequest = getJSONfromString(String(req.body)) as IClaimCompletedRecipeRequest; const accountId = await getAccountIdForRequest(req); diff --git a/src/controllers/api/createGuildController.ts b/src/controllers/api/createGuildController.ts index 73597db2..2e73d7a2 100644 --- a/src/controllers/api/createGuildController.ts +++ b/src/controllers/api/createGuildController.ts @@ -5,7 +5,6 @@ import { Inventory } from "@/src/models/inventoryModels/inventoryModel"; import { Guild } from "@/src/models/guildModel"; import { ICreateGuildRequest } from "@/src/types/guildTypes"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises const createGuildController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const payload = getJSONfromString(String(req.body)) as ICreateGuildRequest; diff --git a/src/controllers/api/evolveWeaponController.ts b/src/controllers/api/evolveWeaponController.ts index 77e33239..ffeab90c 100644 --- a/src/controllers/api/evolveWeaponController.ts +++ b/src/controllers/api/evolveWeaponController.ts @@ -5,7 +5,6 @@ import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { WeaponTypeInternal } from "@/src/services/itemDataService"; import { EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const evolveWeaponController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const inventory = await getInventory(accountId); diff --git a/src/controllers/api/focusController.ts b/src/controllers/api/focusController.ts index 9b6129ac..66262828 100644 --- a/src/controllers/api/focusController.ts +++ b/src/controllers/api/focusController.ts @@ -5,7 +5,6 @@ import { IMiscItem, TFocusPolarity, TEquipmentKey } from "@/src/types/inventoryT import { logger } from "@/src/utils/logger"; import { ExportFocusUpgrades } from "warframe-public-export-plus"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const focusController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); switch (req.query.op) { diff --git a/src/controllers/api/fusionTreasuresController.ts b/src/controllers/api/fusionTreasuresController.ts index e03af407..94931a90 100644 --- a/src/controllers/api/fusionTreasuresController.ts +++ b/src/controllers/api/fusionTreasuresController.ts @@ -18,7 +18,6 @@ const parseFusionTreasure = (name: string, count: number): IFusionTreasure => { }; }; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const fusionTreasuresController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const inventory = await getInventory(accountId); diff --git a/src/controllers/api/genericUpdateController.ts b/src/controllers/api/genericUpdateController.ts index a5d4fbc9..a8060981 100644 --- a/src/controllers/api/genericUpdateController.ts +++ b/src/controllers/api/genericUpdateController.ts @@ -7,7 +7,6 @@ import { IGenericUpdate } from "@/src/types/genericUpdate"; // This endpoint used to be /api/genericUpdate.php, but sometime around the Jade Shadows update, it was changed to /api/updateNodeIntros.php. // SpaceNinjaServer supports both endpoints right now. -// eslint-disable-next-line @typescript-eslint/no-misused-promises const genericUpdateController: RequestHandler = async (request, response) => { const accountId = await getAccountIdForRequest(request); const update = getJSONfromString(String(request.body)) as IGenericUpdate; diff --git a/src/controllers/api/getCreditsController.ts b/src/controllers/api/getCreditsController.ts index 78523496..fdce3899 100644 --- a/src/controllers/api/getCreditsController.ts +++ b/src/controllers/api/getCreditsController.ts @@ -3,7 +3,6 @@ import { config } from "@/src/services/configService"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { getInventory } from "@/src/services/inventoryService"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const getCreditsController: RequestHandler = async (req, res) => { let accountId; try { diff --git a/src/controllers/api/getGuildController.ts b/src/controllers/api/getGuildController.ts index 076e5934..d112f996 100644 --- a/src/controllers/api/getGuildController.ts +++ b/src/controllers/api/getGuildController.ts @@ -4,7 +4,6 @@ import { Guild } from "@/src/models/guildModel"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { toOid } from "@/src/helpers/inventoryHelpers"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises const getGuildController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const inventory = await Inventory.findOne({ accountOwnerId: accountId }); diff --git a/src/controllers/api/getGuildDojoController.ts b/src/controllers/api/getGuildDojoController.ts index af60b492..a220bb7e 100644 --- a/src/controllers/api/getGuildDojoController.ts +++ b/src/controllers/api/getGuildDojoController.ts @@ -4,7 +4,6 @@ import { Guild } from "@/src/models/guildModel"; import { IDojoClient, IDojoComponentClient } from "@/src/types/guildTypes"; import { toOid, toMongoDate } from "@/src/helpers/inventoryHelpers"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const getGuildDojoController: RequestHandler = async (req, res) => { const guildId = req.query.guildId as string; diff --git a/src/controllers/api/getShipController.ts b/src/controllers/api/getShipController.ts index 65483101..e3365911 100644 --- a/src/controllers/api/getShipController.ts +++ b/src/controllers/api/getShipController.ts @@ -9,7 +9,6 @@ import { logger } from "@/src/utils/logger"; import { toOid } from "@/src/helpers/inventoryHelpers"; import { IGetShipResponse } from "@/src/types/shipTypes"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const getShipController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const personalRooms = await getPersonalRooms(accountId); diff --git a/src/controllers/api/gildWeaponController.ts b/src/controllers/api/gildWeaponController.ts index 0b77513f..5e3a6ac4 100644 --- a/src/controllers/api/gildWeaponController.ts +++ b/src/controllers/api/gildWeaponController.ts @@ -24,7 +24,6 @@ interface IGildWeaponRequest { // In export there no recipes for gild action, so reputation and ressources only consumed visually -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const gildWeaponController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const data: IGildWeaponRequest = getJSONfromString(String(req.body)); diff --git a/src/controllers/api/hostSessionController.ts b/src/controllers/api/hostSessionController.ts index 94ca633a..1745d994 100644 --- a/src/controllers/api/hostSessionController.ts +++ b/src/controllers/api/hostSessionController.ts @@ -4,7 +4,6 @@ import { createNewSession } from "@/src/managers/sessionManager"; import { logger } from "@/src/utils/logger"; import { ISession } from "@/src/types/session"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises const hostSessionController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const hostSessionRequest = JSON.parse(req.body as string) as ISession; diff --git a/src/controllers/api/infestedFoundryController.ts b/src/controllers/api/infestedFoundryController.ts index cf363a72..f58fafc0 100644 --- a/src/controllers/api/infestedFoundryController.ts +++ b/src/controllers/api/infestedFoundryController.ts @@ -6,7 +6,6 @@ import { IOid } from "@/src/types/commonTypes"; import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { ExportMisc } from "warframe-public-export-plus"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const infestedFoundryController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); switch (req.query.mode) { diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 66f37b34..c0272373 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -9,7 +9,6 @@ import { IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/invent import { IPolarity, ArtifactPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { ExportCustoms, ExportFlavour, ExportKeys, ExportRegions, ExportResources } from "warframe-public-export-plus"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises const inventoryController: RequestHandler = async (request, response) => { let account; try { diff --git a/src/controllers/api/inventorySlotsController.ts b/src/controllers/api/inventorySlotsController.ts index b026077b..8515577d 100644 --- a/src/controllers/api/inventorySlotsController.ts +++ b/src/controllers/api/inventorySlotsController.ts @@ -18,7 +18,6 @@ import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes"; number of frames = extra - slots + 2 */ -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const inventorySlotsController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); //const body = JSON.parse(req.body as string) as IInventorySlotsRequest; diff --git a/src/controllers/api/loginController.ts b/src/controllers/api/loginController.ts index 22baf06f..7ef22e57 100644 --- a/src/controllers/api/loginController.ts +++ b/src/controllers/api/loginController.ts @@ -11,7 +11,6 @@ import { ILoginResponse } from "@/src/types/loginTypes"; import { DTLS, groups, HUB, platformCDNs } from "@/static/fixed_responses/login_static"; import { logger } from "@/src/utils/logger"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises const loginController: RequestHandler = async (request, response) => { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument const body = JSON.parse(request.body); // parse octet stream of json data to json object diff --git a/src/controllers/api/logoutController.ts b/src/controllers/api/logoutController.ts index a6faa008..735014d4 100644 --- a/src/controllers/api/logoutController.ts +++ b/src/controllers/api/logoutController.ts @@ -2,7 +2,6 @@ import { RequestHandler } from "express"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { Account } from "@/src/models/loginModel"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises const logoutController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const account = await Account.findOne({ _id: accountId }); diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index e2723a51..8e801efe 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -45,7 +45,6 @@ import { logger } from "@/src/utils/logger"; - [ ] FpsSamples */ -// eslint-disable-next-line @typescript-eslint/no-misused-promises const missionInventoryUpdateController: RequestHandler = async (req, res): Promise => { const accountId = await getAccountIdForRequest(req); diff --git a/src/controllers/api/modularWeaponCraftingController.ts b/src/controllers/api/modularWeaponCraftingController.ts index b1a7dda6..217197c3 100644 --- a/src/controllers/api/modularWeaponCraftingController.ts +++ b/src/controllers/api/modularWeaponCraftingController.ts @@ -23,7 +23,6 @@ interface IModularCraftRequest { Parts: string[]; } -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const modularWeaponCraftingController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const data = getJSONfromString(String(req.body)) as IModularCraftRequest; diff --git a/src/controllers/api/nameWeaponController.ts b/src/controllers/api/nameWeaponController.ts index 26876766..94795d60 100644 --- a/src/controllers/api/nameWeaponController.ts +++ b/src/controllers/api/nameWeaponController.ts @@ -8,7 +8,6 @@ interface INameWeaponRequest { ItemName: string; } -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const nameWeaponController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const inventory = await getInventory(accountId); diff --git a/src/controllers/api/projectionManagerController.ts b/src/controllers/api/projectionManagerController.ts index 0872cde0..90c07f45 100644 --- a/src/controllers/api/projectionManagerController.ts +++ b/src/controllers/api/projectionManagerController.ts @@ -3,7 +3,6 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { addMiscItems, getInventory } from "@/src/services/inventoryService"; import { ExportRelics, IRelic } from "warframe-public-export-plus"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const projectionManagerController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const inventory = await getInventory(accountId); diff --git a/src/controllers/api/purchaseController.ts b/src/controllers/api/purchaseController.ts index 3e8608fa..6c12446f 100644 --- a/src/controllers/api/purchaseController.ts +++ b/src/controllers/api/purchaseController.ts @@ -3,7 +3,6 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { IPurchaseRequest } from "@/src/types/purchaseTypes"; import { handlePurchase } from "@/src/services/purchaseService"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const purchaseController: RequestHandler = async (req, res) => { const purchaseRequest = JSON.parse(String(req.body)) as IPurchaseRequest; const accountId = await getAccountIdForRequest(req); diff --git a/src/controllers/api/queueDojoComponentDestructionController.ts b/src/controllers/api/queueDojoComponentDestructionController.ts index 7f348b87..43671422 100644 --- a/src/controllers/api/queueDojoComponentDestructionController.ts +++ b/src/controllers/api/queueDojoComponentDestructionController.ts @@ -1,7 +1,6 @@ import { getGuildForRequest } from "@/src/services/guildService"; import { RequestHandler } from "express"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const queueDojoComponentDestructionController: RequestHandler = async (req, res) => { const guild = await getGuildForRequest(req); const componentId = req.query.componentId as string; diff --git a/src/controllers/api/saveLoadout.ts b/src/controllers/api/saveLoadout.ts index e5c180ed..38ea5559 100644 --- a/src/controllers/api/saveLoadout.ts +++ b/src/controllers/api/saveLoadout.ts @@ -4,7 +4,6 @@ import { handleInventoryItemConfigChange } from "@/src/services/saveLoadoutServi import { getAccountIdForRequest } from "@/src/services/loginService"; import { logger } from "@/src/utils/logger"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const saveLoadoutController: RequestHandler = async (req, res) => { //validate here const accountId = await getAccountIdForRequest(req); diff --git a/src/controllers/api/sellController.ts b/src/controllers/api/sellController.ts index ff2ce6e0..0abf41fc 100644 --- a/src/controllers/api/sellController.ts +++ b/src/controllers/api/sellController.ts @@ -3,7 +3,6 @@ import { ISellRequest } from "@/src/types/sellTypes"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { getInventory, addMods, addRecipes } from "@/src/services/inventoryService"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const sellController: RequestHandler = async (req, res) => { const payload = JSON.parse(String(req.body)) as ISellRequest; const accountId = await getAccountIdForRequest(req); diff --git a/src/controllers/api/setActiveShipController.ts b/src/controllers/api/setActiveShipController.ts index eec3e8f4..9592915a 100644 --- a/src/controllers/api/setActiveShipController.ts +++ b/src/controllers/api/setActiveShipController.ts @@ -4,7 +4,6 @@ import { parseString } from "@/src/helpers/general"; import { RequestHandler } from "express"; import { Types } from "mongoose"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const setActiveShipController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const shipId = parseString(req.query.shipId); diff --git a/src/controllers/api/setBootLocationController.ts b/src/controllers/api/setBootLocationController.ts index a91f63a1..599044a0 100644 --- a/src/controllers/api/setBootLocationController.ts +++ b/src/controllers/api/setBootLocationController.ts @@ -3,7 +3,6 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { getPersonalRooms } from "@/src/services/personalRoomsService"; import { TBootLocation } from "@/src/types/shipTypes"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const setBootLocationController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const personalRooms = await getPersonalRooms(accountId); diff --git a/src/controllers/api/setPlacedDecoInfoController.ts b/src/controllers/api/setPlacedDecoInfoController.ts index 2e5b07ca..56b9afe7 100644 --- a/src/controllers/api/setPlacedDecoInfoController.ts +++ b/src/controllers/api/setPlacedDecoInfoController.ts @@ -3,7 +3,6 @@ import { ISetPlacedDecoInfoRequest } from "@/src/types/shipTypes"; import { RequestHandler } from "express"; import { handleSetPlacedDecoInfo } from "@/src/services/shipCustomizationsService"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const setPlacedDecoInfoController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const payload = JSON.parse(req.body as string) as ISetPlacedDecoInfoRequest; diff --git a/src/controllers/api/setShipCustomizationsController.ts b/src/controllers/api/setShipCustomizationsController.ts index 8e78b1c3..54372562 100644 --- a/src/controllers/api/setShipCustomizationsController.ts +++ b/src/controllers/api/setShipCustomizationsController.ts @@ -3,7 +3,6 @@ import { ISetShipCustomizationsRequest } from "@/src/types/shipTypes"; import { logger } from "@/src/utils/logger"; import { RequestHandler } from "express"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const setShipCustomizationsController: RequestHandler = async (req, res) => { try { const setShipCustomizationsRequest = JSON.parse(req.body as string) as ISetShipCustomizationsRequest; diff --git a/src/controllers/api/setSupportedSyndicateController.ts b/src/controllers/api/setSupportedSyndicateController.ts index 619fb44c..e22b659f 100644 --- a/src/controllers/api/setSupportedSyndicateController.ts +++ b/src/controllers/api/setSupportedSyndicateController.ts @@ -2,7 +2,6 @@ import { RequestHandler } from "express"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { getInventory } from "@/src/services/inventoryService"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const setSupportedSyndicateController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const inventory = await getInventory(accountId); diff --git a/src/controllers/api/setWeaponSkillTreeController.ts b/src/controllers/api/setWeaponSkillTreeController.ts index dae03f03..d4557f45 100644 --- a/src/controllers/api/setWeaponSkillTreeController.ts +++ b/src/controllers/api/setWeaponSkillTreeController.ts @@ -4,7 +4,6 @@ import { getInventory } from "@/src/services/inventoryService"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { WeaponTypeInternal } from "@/src/services/itemDataService"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const setWeaponSkillTreeController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const inventory = await getInventory(accountId); diff --git a/src/controllers/api/shipDecorationsController.ts b/src/controllers/api/shipDecorationsController.ts index 414bd5a2..4966ab8b 100644 --- a/src/controllers/api/shipDecorationsController.ts +++ b/src/controllers/api/shipDecorationsController.ts @@ -4,7 +4,6 @@ import { logger } from "@/src/utils/logger"; import { RequestHandler } from "express"; import { handleSetShipDecorations } from "@/src/services/shipCustomizationsService"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const shipDecorationsController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const shipDecorationsRequest = JSON.parse(req.body as string) as IShipDecorationsRequest; diff --git a/src/controllers/api/startDojoRecipeController.ts b/src/controllers/api/startDojoRecipeController.ts index 4ae4dd7d..42fbbd07 100644 --- a/src/controllers/api/startDojoRecipeController.ts +++ b/src/controllers/api/startDojoRecipeController.ts @@ -8,7 +8,6 @@ interface IStartDojoRecipeRequest { Revision: number; } -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const startDojoRecipeController: RequestHandler = async (req, res) => { const guild = await getGuildForRequest(req); // At this point, we know that a member of the guild is making this request. Assuming they are allowed to start a build. diff --git a/src/controllers/api/startRecipeController.ts b/src/controllers/api/startRecipeController.ts index 0c516365..c9d9fd40 100644 --- a/src/controllers/api/startRecipeController.ts +++ b/src/controllers/api/startRecipeController.ts @@ -9,7 +9,6 @@ interface IStartRecipeRequest { Ids: string[]; } -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const startRecipeController: RequestHandler = async (req, res) => { const startRecipeRequest = getJSONfromString(String(req.body)) as IStartRecipeRequest; logger.debug("StartRecipe Request", { startRecipeRequest }); diff --git a/src/controllers/api/stepSequencersController.ts b/src/controllers/api/stepSequencersController.ts index 06d72d5f..3d86c1ac 100644 --- a/src/controllers/api/stepSequencersController.ts +++ b/src/controllers/api/stepSequencersController.ts @@ -3,7 +3,6 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { getInventory } from "@/src/services/inventoryService"; import { IStepSequencer } from "@/src/types/inventoryTypes/inventoryTypes"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const stepSequencersController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const inventory = await getInventory(accountId); diff --git a/src/controllers/api/syndicateSacrificeController.ts b/src/controllers/api/syndicateSacrificeController.ts index 9c7fff17..cf7cbfd0 100644 --- a/src/controllers/api/syndicateSacrificeController.ts +++ b/src/controllers/api/syndicateSacrificeController.ts @@ -4,7 +4,6 @@ import { ISyndicateSacrifice } from "@/src/types/syndicateTypes"; import { RequestHandler } from "express"; import { getAccountIdForRequest } from "@/src/services/loginService"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises const syndicateSacrificeController: RequestHandler = async (request, response) => { const accountId = await getAccountIdForRequest(request); const update = getJSONfromString(String(request.body)) as ISyndicateSacrifice; diff --git a/src/controllers/api/tauntHistoryController.ts b/src/controllers/api/tauntHistoryController.ts index 6da5cb2c..a2e489ea 100644 --- a/src/controllers/api/tauntHistoryController.ts +++ b/src/controllers/api/tauntHistoryController.ts @@ -4,7 +4,6 @@ import { getInventory } from "@/src/services/inventoryService"; import { ITaunt } from "@/src/types/inventoryTypes/inventoryTypes"; import { logger } from "@/src/utils/logger"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const tauntHistoryController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const inventory = await getInventory(accountId); diff --git a/src/controllers/api/trainingResultController.ts b/src/controllers/api/trainingResultController.ts index 59ab9c4d..d7101ac3 100644 --- a/src/controllers/api/trainingResultController.ts +++ b/src/controllers/api/trainingResultController.ts @@ -15,7 +15,6 @@ interface ITrainingResultsResponse { InventoryChanges: any[]; } -// eslint-disable-next-line @typescript-eslint/no-misused-promises const trainingResultController: RequestHandler = async (req, res): Promise => { const accountId = await getAccountIdForRequest(req); diff --git a/src/controllers/api/updateChallengeProgressController.ts b/src/controllers/api/updateChallengeProgressController.ts index f6e496e8..d665a6fb 100644 --- a/src/controllers/api/updateChallengeProgressController.ts +++ b/src/controllers/api/updateChallengeProgressController.ts @@ -4,7 +4,6 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { updateChallengeProgress } from "@/src/services/inventoryService"; import { IUpdateChallengeProgressRequest } from "@/src/types/requestTypes"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises const updateChallengeProgressController: RequestHandler = async (req, res) => { const payload = getJSONfromString(String(req.body)) as IUpdateChallengeProgressRequest; const accountId = await getAccountIdForRequest(req); diff --git a/src/controllers/api/updateThemeController.ts b/src/controllers/api/updateThemeController.ts index 3736aa60..17730064 100644 --- a/src/controllers/api/updateThemeController.ts +++ b/src/controllers/api/updateThemeController.ts @@ -4,7 +4,6 @@ import { updateTheme } from "@/src/services/inventoryService"; import { IThemeUpdateRequest } from "@/src/types/requestTypes"; import { RequestHandler } from "express"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises const updateThemeController: RequestHandler = async (request, response) => { const accountId = await getAccountIdForRequest(request); const body = String(request.body); diff --git a/src/controllers/api/upgradesController.ts b/src/controllers/api/upgradesController.ts index c0004783..0e7c2381 100644 --- a/src/controllers/api/upgradesController.ts +++ b/src/controllers/api/upgradesController.ts @@ -9,7 +9,6 @@ import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const upgradesController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const payload = JSON.parse(String(req.body)) as IUpgradesRequest; diff --git a/src/controllers/custom/addItemController.ts b/src/controllers/custom/addItemController.ts index 7488710f..ea5fd535 100644 --- a/src/controllers/custom/addItemController.ts +++ b/src/controllers/custom/addItemController.ts @@ -4,7 +4,6 @@ import { getWeaponType } from "@/src/services/itemDataService"; import { addPowerSuit, addEquipment } from "@/src/services/inventoryService"; import { RequestHandler } from "express"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises const addItemController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const request = toAddItemRequest(req.body); diff --git a/src/controllers/custom/createAccountController.ts b/src/controllers/custom/createAccountController.ts index bece119c..723b31c9 100644 --- a/src/controllers/custom/createAccountController.ts +++ b/src/controllers/custom/createAccountController.ts @@ -2,7 +2,6 @@ import { toCreateAccount, toDatabaseAccount } from "@/src/helpers/customHelpers/ import { createAccount } from "@/src/services/loginService"; import { RequestHandler } from "express"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises const createAccountController: RequestHandler = async (req, res) => { const createAccountData = toCreateAccount(req.body); const databaseAccount = toDatabaseAccount(createAccountData); diff --git a/src/controllers/custom/popArchonCrystalUpgradeController.ts b/src/controllers/custom/popArchonCrystalUpgradeController.ts index 041fec96..c9c84b85 100644 --- a/src/controllers/custom/popArchonCrystalUpgradeController.ts +++ b/src/controllers/custom/popArchonCrystalUpgradeController.ts @@ -2,7 +2,6 @@ import { RequestHandler } from "express"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { getInventory } from "@/src/services/inventoryService"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const popArchonCrystalUpgradeController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const inventory = await getInventory(accountId); diff --git a/src/controllers/custom/pushArchonCrystalUpgradeController.ts b/src/controllers/custom/pushArchonCrystalUpgradeController.ts index c12ea584..093b0678 100644 --- a/src/controllers/custom/pushArchonCrystalUpgradeController.ts +++ b/src/controllers/custom/pushArchonCrystalUpgradeController.ts @@ -2,7 +2,6 @@ import { RequestHandler } from "express"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { getInventory } from "@/src/services/inventoryService"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const pushArchonCrystalUpgradeController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const inventory = await getInventory(accountId); diff --git a/src/controllers/custom/updateConfigDataController.ts b/src/controllers/custom/updateConfigDataController.ts index 6037cdce..3fdcc8e8 100644 --- a/src/controllers/custom/updateConfigDataController.ts +++ b/src/controllers/custom/updateConfigDataController.ts @@ -1,7 +1,6 @@ import { RequestHandler } from "express"; import { updateConfig } from "@/src/services/configService"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises const updateConfigDataController: RequestHandler = async (req, res) => { await updateConfig(String(req.body)); res.end(); diff --git a/src/controllers/stats/viewController.ts b/src/controllers/stats/viewController.ts index cae180ce..58d9caa9 100644 --- a/src/controllers/stats/viewController.ts +++ b/src/controllers/stats/viewController.ts @@ -5,7 +5,6 @@ import { IStatsView } from "@/src/types/statTypes"; import { config } from "@/src/services/configService"; import allScans from "@/static/fixed_responses/allScans.json"; -// eslint-disable-next-line @typescript-eslint/no-misused-promises const viewController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const inventory = await Inventory.findOne({ accountOwnerId: accountId }); diff --git a/src/routes/cache.ts b/src/routes/cache.ts index 37275394..09b708bc 100644 --- a/src/routes/cache.ts +++ b/src/routes/cache.ts @@ -12,7 +12,6 @@ cacheRouter.get(/^\/origin\/[a-zA-Z0-9]+\/[0-9]+\/H\.Cache\.bin.*$/, (req, res) } }); -// eslint-disable-next-line @typescript-eslint/no-misused-promises cacheRouter.get(/\.bk2!/, async (req, res) => { try { const dir = req.path.substr(0, req.path.lastIndexOf("/")); -- 2.47.2 From cbdd1cd0a7b176d7c2313c2c9865ecf9cd7b2da2 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 16:15:05 +0100 Subject: [PATCH 035/181] fix: unable to purchase arcanes --- src/services/inventoryService.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index be09e6bd..cf43ca3d 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -32,6 +32,7 @@ import { getRandomWeightedReward } from "@/src/services/rngService"; import { ISyndicateSacrifice, ISyndicateSacrificeResponse } from "../types/syndicateTypes"; import { IEquipmentClient } from "../types/inventoryTypes/commonInventoryTypes"; import { + ExportArcanes, ExportBoosterPacks, ExportCustoms, ExportFlavour, @@ -171,7 +172,7 @@ export const addItem = async ( } return { InventoryChanges }; } - if (typeName in ExportUpgrades) { + if (typeName in ExportUpgrades || typeName in ExportArcanes) { const inventory = await getInventory(accountId); const changes = [ { -- 2.47.2 From 95bd07b50f9f55426947ae8243855c874e867d4d Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 20:32:19 +0100 Subject: [PATCH 036/181] feat: decorating the backroom (#604) --- src/controllers/api/getShipController.ts | 3 +- .../api/shipDecorationsController.ts | 2 +- src/models/personalRoomsModel.ts | 62 ++++++++++++++++++- src/services/shipCustomizationsService.ts | 7 ++- src/types/personalRoomsTypes.ts | 8 ++- src/types/shipTypes.ts | 34 ++++++++-- 6 files changed, 103 insertions(+), 13 deletions(-) diff --git a/src/controllers/api/getShipController.ts b/src/controllers/api/getShipController.ts index e3365911..8645e976 100644 --- a/src/controllers/api/getShipController.ts +++ b/src/controllers/api/getShipController.ts @@ -27,7 +27,8 @@ export const getShipController: RequestHandler = async (req, res) => { SkinFlavourItem: ship.SkinFlavourItem } }, - Apartment: personalRooms.Apartment + Apartment: personalRooms.Apartment, + TailorShop: personalRooms.TailorShop }; if (config.unlockAllShipFeatures) { diff --git a/src/controllers/api/shipDecorationsController.ts b/src/controllers/api/shipDecorationsController.ts index 4966ab8b..be09fe9f 100644 --- a/src/controllers/api/shipDecorationsController.ts +++ b/src/controllers/api/shipDecorationsController.ts @@ -13,7 +13,7 @@ export const shipDecorationsController: RequestHandler = async (req, res) => { res.send(placedDecoration); } catch (error: unknown) { if (error instanceof Error) { - logger.error(`error in saveLoadoutController: ${error.message}`); + logger.error(`error in shipDecorationsController: ${error.message}`); res.status(400).json({ error: error.message }); } } diff --git a/src/models/personalRoomsModel.ts b/src/models/personalRoomsModel.ts index cab7ad41..0db41ee2 100644 --- a/src/models/personalRoomsModel.ts +++ b/src/models/personalRoomsModel.ts @@ -1,6 +1,14 @@ import { toOid } from "@/src/helpers/inventoryHelpers"; import { IOrbiter, IPersonalRooms, PersonalRoomsModelType } from "@/src/types/personalRoomsTypes"; -import { IApartment, IGardening, IPlacedDecosDatabase, IPictureFrameInfo } from "@/src/types/shipTypes"; +import { + IApartment, + IFavouriteLoadoutDatabase, + IGardening, + IPlacedDecosDatabase, + IPictureFrameInfo, + IRoom, + ITailorShopDatabase +} from "@/src/types/shipTypes"; import { Schema, model } from "mongoose"; const pictureFrameInfoSchema = new Schema( @@ -44,7 +52,7 @@ placedDecosSchema.set("toJSON", { } }); -const roomSchema = new Schema( +const roomSchema = new Schema( { Name: String, MaxCapacity: Number, @@ -76,11 +84,59 @@ const orbiterSchema = new Schema( { _id: false } ); +const favouriteLoadoutSchema = new Schema( + { + Tag: String, + LoadoutId: Schema.Types.ObjectId + }, + { _id: false } +); +favouriteLoadoutSchema.set("toJSON", { + virtuals: true, + transform(_document, returnedObject) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + returnedObject.LoadoutId = toOid(returnedObject.LoadoutId); + } +}); + +const tailorShopSchema = new Schema( + { + FavouriteLoadouts: [favouriteLoadoutSchema], + CustomJson: String, + LevelDecosVisible: Boolean, + Rooms: [roomSchema] + }, + { _id: false } +); +const tailorShopDefault: ITailorShopDatabase = { + FavouriteLoadouts: [], + CustomJson: "{}", + LevelDecosVisible: true, + Rooms: [ + { + Name: "LabRoom", + MaxCapacity: 4000 + }, + { + Name: "LivingQuartersRoom", + MaxCapacity: 3000 + }, + { + Name: "HelminthRoom", + MaxCapacity: 2000 + } + ] +}; + export const personalRoomsSchema = new Schema({ personalRoomsOwnerId: Schema.Types.ObjectId, activeShipId: Schema.Types.ObjectId, Ship: orbiterSchema, - Apartment: apartmentSchema + Apartment: apartmentSchema, + TailorShop: { + type: tailorShopSchema, + default: tailorShopDefault as any as undefined // Yeah, this is bad, but mongoose types here are wrong. + } }); export const PersonalRooms = model("PersonalRooms", personalRoomsSchema); diff --git a/src/services/shipCustomizationsService.ts b/src/services/shipCustomizationsService.ts index 170a69f0..8d1f7a76 100644 --- a/src/services/shipCustomizationsService.ts +++ b/src/services/shipCustomizationsService.ts @@ -37,7 +37,12 @@ export const handleSetShipDecorations = async ( ): Promise => { const personalRooms = await getPersonalRooms(accountId); - const rooms = placedDecoration.IsApartment ? personalRooms.Apartment.Rooms : personalRooms.Ship.Rooms; + const rooms = + placedDecoration.BootLocation == "SHOP" + ? personalRooms.TailorShop.Rooms + : placedDecoration.IsApartment + ? personalRooms.Apartment.Rooms + : personalRooms.Ship.Rooms; const roomToPlaceIn = rooms.find(room => room.Name === placedDecoration.Room); diff --git a/src/types/personalRoomsTypes.ts b/src/types/personalRoomsTypes.ts index dda71362..379fdd3f 100644 --- a/src/types/personalRoomsTypes.ts +++ b/src/types/personalRoomsTypes.ts @@ -1,9 +1,9 @@ -import { IApartment, IRooms, IPlacedDecosDatabase, TBootLocation } from "@/src/types/shipTypes"; +import { IApartment, IRoom, IPlacedDecosDatabase, ITailorShop, TBootLocation } from "@/src/types/shipTypes"; import { Model, Types } from "mongoose"; export interface IOrbiter { Features: string[]; - Rooms: IRooms[]; + Rooms: IRoom[]; ContentUrlSignature: string; BootLocation?: TBootLocation; } @@ -13,6 +13,7 @@ export interface IPersonalRooms { activeShipId: Types.ObjectId; Ship: IOrbiter; Apartment: IApartment; + TailorShop: ITailorShop; } export type RoomsType = { Name: string; MaxCapacity: number; PlacedDecos: Types.DocumentArray }; @@ -24,6 +25,9 @@ export type PersonalRoomsDocumentProps = { Apartment: Omit & { Rooms: RoomsType[]; }; + TailorShop: Omit & { + Rooms: RoomsType[]; + }; }; // eslint-disable-next-line @typescript-eslint/ban-types diff --git a/src/types/shipTypes.ts b/src/types/shipTypes.ts index fe5e3608..eea2b51a 100644 --- a/src/types/shipTypes.ts +++ b/src/types/shipTypes.ts @@ -7,6 +7,7 @@ export interface IGetShipResponse { ShipOwnerId: string; Ship: IShip; Apartment: IApartment; + TailorShop: ITailorShop; LoadOutInventory: { LoadOutPresets: ILoadoutClient }; } @@ -26,7 +27,7 @@ export interface IShip { Features: string[]; ShipId: IOid; ShipInterior: IShipInterior; - Rooms: IRooms[]; + Rooms: IRoom[]; ContentUrlSignature: string; BootLocation?: TBootLocation; } @@ -41,7 +42,7 @@ export interface IShipDatabase { SkinFlavourItem?: string; } -export interface IRooms { +export interface IRoom { Name: string; MaxCapacity: number; PlacedDecos?: IPlacedDecosDatabase[]; @@ -62,7 +63,7 @@ export interface IGardening { } export interface IApartment { Gardening: IGardening; - Rooms: IRooms[]; + Rooms: IRoom[]; FavouriteLoadouts: string[]; } @@ -102,7 +103,8 @@ export interface IShipDecorationsRequest { Pos: [number, number, number]; Rot: [number, number, number]; Room: string; - IsApartment: boolean; + BootLocation?: TBootLocation; + IsApartment?: boolean; RemoveId?: string; MoveId?: string; OldRoom?: string; @@ -112,7 +114,7 @@ export interface IShipDecorationsRequest { export interface IShipDecorationsResponse { DecoId?: string; Room?: string; - IsApartment: boolean; + IsApartment?: boolean; MaxCapacityIncrease?: number; OldRoom?: string; NewRoom?: string; @@ -141,3 +143,25 @@ export interface IPictureFrameInfo { TextColorB: number; TextOrientation: number; } + +export interface IFavouriteLoadout { + Tag: string; + LoadoutId: IOid; +} + +export interface IFavouriteLoadoutDatabase { + Tag: string; + LoadoutId: Types.ObjectId; +} + +export interface ITailorShopDatabase { + FavouriteLoadouts: IFavouriteLoadoutDatabase[]; + CustomJson: "{}"; // ??? + LevelDecosVisible: boolean; + Rooms: IRoom[]; +} + +export interface ITailorShop extends Omit { + FavouriteLoadouts: IFavouriteLoadout[]; + Colors: []; // ??? +} -- 2.47.2 From ac09fcec5cc4d790ab836a4669a51f87a2274eaf Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 20:34:04 +0100 Subject: [PATCH 037/181] fix: don't default scale ship decorations to 1 (#603) --- src/services/shipCustomizationsService.ts | 4 ++-- src/types/shipTypes.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/services/shipCustomizationsService.ts b/src/services/shipCustomizationsService.ts index 8d1f7a76..35dbf9cb 100644 --- a/src/services/shipCustomizationsService.ts +++ b/src/services/shipCustomizationsService.ts @@ -93,7 +93,7 @@ export const handleSetShipDecorations = async ( Type: placedDecoration.Type, Pos: placedDecoration.Pos, Rot: placedDecoration.Rot, - Scale: placedDecoration.Scale || 1, + Scale: placedDecoration.Scale, _id: placedDecoration.MoveId }; @@ -129,7 +129,7 @@ export const handleSetShipDecorations = async ( Type: placedDecoration.Type, Pos: placedDecoration.Pos, Rot: placedDecoration.Rot, - Scale: placedDecoration.Scale || 1, + Scale: placedDecoration.Scale, _id: decoId }); diff --git a/src/types/shipTypes.ts b/src/types/shipTypes.ts index eea2b51a..0501666e 100644 --- a/src/types/shipTypes.ts +++ b/src/types/shipTypes.ts @@ -71,7 +71,7 @@ export interface IPlacedDecosDatabase { Type: string; Pos: [number, number, number]; Rot: [number, number, number]; - Scale: number; + Scale?: number; PictureFrameInfo?: IPictureFrameInfo; _id: Types.ObjectId; } -- 2.47.2 From 9fd6ed3b213637da5df3f03c280ed42c00a839d8 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 20:35:08 +0100 Subject: [PATCH 038/181] fix: purchasing an arcane pack does not consume vosfor (#601) --- package-lock.json | 8 +++--- package.json | 2 +- src/services/purchaseService.ts | 43 ++++++++++++++++++++++++++++++--- src/types/purchaseTypes.ts | 1 + 4 files changed, 46 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index d51729a6..5f7cbf66 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "copyfiles": "^2.4.1", "express": "^5", "mongoose": "^8.9.2", - "warframe-public-export-plus": "^0.5.8", + "warframe-public-export-plus": "^0.5.9", "warframe-riven-info": "^0.1.2", "winston": "^3.17.0", "winston-daily-rotate-file": "^5.0.0" @@ -3877,9 +3877,9 @@ } }, "node_modules/warframe-public-export-plus": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.8.tgz", - "integrity": "sha512-ZhHrKIkI6nhjKDlxhrNcfN8r2Yc9g+eeKLS6+9w7gzC4NscIt6TU8tH8bfjJTDeo6nRrzt88szX1/Oo3WnUY4Q==" + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.9.tgz", + "integrity": "sha512-qwQVtYI7wghatg7UrJ3CFstXba5Hsks398L6ngv16auqoTVAfw/cLBqFv9DzsEpqvcVWL22IZIH+cNWiq1JXOQ==" }, "node_modules/warframe-riven-info": { "version": "0.1.2", diff --git a/package.json b/package.json index b968388b..ce81953a 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "copyfiles": "^2.4.1", "express": "^5", "mongoose": "^8.9.2", - "warframe-public-export-plus": "^0.5.8", + "warframe-public-export-plus": "^0.5.9", "warframe-riven-info": "^0.1.2", "winston": "^3.17.0", "winston-daily-rotate-file": "^5.0.0" diff --git a/src/services/purchaseService.ts b/src/services/purchaseService.ts index 29bdc218..ea4673f0 100644 --- a/src/services/purchaseService.ts +++ b/src/services/purchaseService.ts @@ -1,15 +1,18 @@ import { parseSlotPurchaseName } from "@/src/helpers/purchaseHelpers"; import { getSubstringFromKeyword } from "@/src/helpers/stringHelpers"; import { - addItem, addBooster, + addItem, + addMiscItems, combineInventoryChanges, + getInventory, updateCurrency, updateSlots } from "@/src/services/inventoryService"; +import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { IPurchaseRequest, SlotPurchase, IInventoryChanges } from "@/src/types/purchaseTypes"; import { logger } from "@/src/utils/logger"; -import { ExportBundles, ExportGear, TRarity } from "warframe-public-export-plus"; +import { ExportBundles, ExportGear, ExportVendors, TRarity } from "warframe-public-export-plus"; export const getStoreItemCategory = (storeItem: string) => { const storeItemString = getSubstringFromKeyword(storeItem, "StoreItems/"); @@ -43,12 +46,46 @@ export const handlePurchase = async (purchaseRequest: IPurchaseRequest, accountI purchaseRequest.PurchaseParams.UsePremium, accountId ); - purchaseResponse.InventoryChanges = { ...currencyChanges, ...purchaseResponse.InventoryChanges }; + switch (purchaseRequest.PurchaseParams.Source) { + case 7: + if (!purchaseRequest.PurchaseParams.SourceId) { + throw new Error("invalid request source"); + } + if (ExportVendors[purchaseRequest.PurchaseParams.SourceId]) { + const vendor = ExportVendors[purchaseRequest.PurchaseParams.SourceId]; + const offer = vendor.items.find(x => x.storeItem == purchaseRequest.PurchaseParams.StoreItem); + if (offer) { + const inventory = await getInventory(accountId); + for (const item of offer.itemPrices) { + const invItem: IMiscItem = { + ItemType: item.ItemType, + ItemCount: item.ItemCount * -1 + }; + + addMiscItems(inventory, [invItem]); + + purchaseResponse.InventoryChanges.MiscItems ??= []; + const change = (purchaseResponse.InventoryChanges.MiscItems as IMiscItem[]).find( + x => x.ItemType == item.ItemType + ); + if (change) { + change.ItemCount -= item.ItemCount; + } else { + (purchaseResponse.InventoryChanges.MiscItems as IMiscItem[]).push(invItem); + } + } + + await inventory.save(); + } + } + break; + } + return purchaseResponse; }; diff --git a/src/types/purchaseTypes.ts b/src/types/purchaseTypes.ts index 0d04114e..9a7edd1e 100644 --- a/src/types/purchaseTypes.ts +++ b/src/types/purchaseTypes.ts @@ -5,6 +5,7 @@ export interface IPurchaseRequest { export interface IPurchaseParams { Source: number; + SourceId?: string; // for Source 7 StoreItem: string; StorePage: string; SearchTerm: string; -- 2.47.2 From b84258a893ba758cfbab3bb7237a0be34cf6c8ee Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 20:36:01 +0100 Subject: [PATCH 039/181] feat: basic implementation of endlessXp.php we can play The Circuit (#596) --- src/controllers/api/endlessXpController.ts | 60 ++++++++++++++++++++ src/models/inventoryModels/inventoryModel.ts | 15 ++++- src/routes/api.ts | 2 + src/types/inventoryTypes/inventoryTypes.ts | 8 +++ 4 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 src/controllers/api/endlessXpController.ts diff --git a/src/controllers/api/endlessXpController.ts b/src/controllers/api/endlessXpController.ts new file mode 100644 index 00000000..855c5f22 --- /dev/null +++ b/src/controllers/api/endlessXpController.ts @@ -0,0 +1,60 @@ +import { RequestHandler } from "express"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { getInventory } from "@/src/services/inventoryService"; +import { getJSONfromString } from "@/src/helpers/stringHelpers"; +import { TEndlessXpCategory } from "@/src/types/inventoryTypes/inventoryTypes"; + +export const endlessXpController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const inventory = await getInventory(accountId); + const payload = getJSONfromString(String(req.body)) as IEndlessXpRequest; + + inventory.EndlessXP ??= []; + const entry = inventory.EndlessXP.find(x => x.Category == payload.Category); + if (entry) { + entry.Choices = payload.Choices; + } else { + inventory.EndlessXP.push({ + Category: payload.Category, + Choices: payload.Choices + }); + } + await inventory.save(); + + res.json({ + NewProgress: { + Category: payload.Category, + Earn: 0, + Claim: 0, + BonusAvailable: { + $date: { + $numberLong: "9999999999999" + } + }, + Expiry: { + $date: { + $numberLong: "9999999999999" + } + }, + Choices: payload.Choices, + PendingRewards: [ + { + RequiredTotalXp: 190, + Rewards: [ + { + StoreItem: "/Lotus/StoreItems/Upgrades/Mods/Aura/PlayerHealthAuraMod", + ItemCount: 1 + } + ] + } + // ... + ] + } + }); +}; + +interface IEndlessXpRequest { + Mode: string; // "r" + Category: TEndlessXpCategory; + Choices: string[]; +} diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 6094e0ea..28292ba4 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -37,7 +37,8 @@ import { IPeriodicMissionCompletionDatabase, IPeriodicMissionCompletionResponse, ILoreFragmentScan, - IEvolutionProgress + IEvolutionProgress, + IEndlessXpProgress } from "../../types/inventoryTypes/inventoryTypes"; import { IOid } from "../../types/commonTypes"; import { @@ -581,6 +582,14 @@ const evolutionProgressSchema = new Schema( { _id: false } ); +const endlessXpProgressSchema = new Schema( + { + Category: String, + Choices: [String] + }, + { _id: false } +); + const inventorySchema = new Schema( { accountOwnerId: Schema.Types.ObjectId, @@ -938,7 +947,9 @@ const inventorySchema = new Schema( //Zanuka Harvestable: Boolean, //Grustag three - DeathSquadable: Boolean + DeathSquadable: Boolean, + + EndlessXP: { type: [endlessXpProgressSchema], default: undefined } }, { timestamps: { createdAt: "Created" } } ); diff --git a/src/routes/api.ts b/src/routes/api.ts index 8f8687b0..400dbc46 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -8,6 +8,7 @@ import { createGuildController } from "@/src/controllers/api/createGuildControll import { deleteSessionController } from "@/src/controllers/api/deleteSessionController"; import { dojoController } from "@/src/controllers/api/dojoController"; import { dronesController } from "@/src/controllers/api/dronesController"; +import { endlessXpController } from "@/src/controllers/api/endlessXpController"; import { evolveWeaponController } from "@/src/controllers/api/evolveWeaponController"; import { findSessionsController } from "@/src/controllers/api/findSessionsController"; import { focusController } from "@/src/controllers/api/focusController"; @@ -108,6 +109,7 @@ apiRouter.post("/arcaneCommon.php", arcaneCommonController); apiRouter.post("/artifacts.php", artifactsController); apiRouter.post("/claimCompletedRecipe.php", claimCompletedRecipeController); apiRouter.post("/createGuild.php", createGuildController); +apiRouter.post("/endlessXp.php", endlessXpController); apiRouter.post("/evolveWeapon.php", evolveWeaponController); apiRouter.post("/findSessions.php", findSessionsController); apiRouter.post("/focus.php", focusController); diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index bf76b33c..fd207bc9 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -301,6 +301,7 @@ export interface IInventoryResponse { PendingCoupon: IPendingCoupon; Harvestable: boolean; DeathSquadable: boolean; + EndlessXP?: IEndlessXpProgress[]; } export interface IAffiliation { @@ -932,3 +933,10 @@ export interface IEvolutionProgress { Rank: number; ItemType: string; } + +export type TEndlessXpCategory = "EXC_NORMAL" | "EXC_HARD"; + +export interface IEndlessXpProgress { + Category: TEndlessXpCategory; + Choices: string[]; +} -- 2.47.2 From 52c0a3123e93f76815300e8dc0d2bc278538d086 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 20:37:02 +0100 Subject: [PATCH 040/181] feat: implement syndicateStandingBonus endpoint (#583) --- .../api/syndicateStandingBonusController.ts | 61 +++++++++++++++++++ src/routes/api.ts | 2 + 2 files changed, 63 insertions(+) create mode 100644 src/controllers/api/syndicateStandingBonusController.ts diff --git a/src/controllers/api/syndicateStandingBonusController.ts b/src/controllers/api/syndicateStandingBonusController.ts new file mode 100644 index 00000000..50854951 --- /dev/null +++ b/src/controllers/api/syndicateStandingBonusController.ts @@ -0,0 +1,61 @@ +import { RequestHandler } from "express"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { addMiscItems, getInventory } from "@/src/services/inventoryService"; +import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IOid } from "@/src/types/commonTypes"; +import { ExportSyndicates } from "warframe-public-export-plus"; + +export const syndicateStandingBonusController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const request = JSON.parse(String(req.body)) as ISyndicateStandingBonusRequest; + + let gainedStanding = 0; + request.Operation.Items.forEach(item => { + const medallion = (ExportSyndicates[request.Operation.AffiliationTag].medallions ?? []).find( + medallion => medallion.itemType == item.ItemType + ); + if (medallion) { + gainedStanding += medallion.standing * item.ItemCount; + } + + item.ItemCount *= -1; + }); + + const inventory = await getInventory(accountId); + addMiscItems(inventory, request.Operation.Items); + + const syndicate = inventory.Affiliations.find(x => x.Tag == request.Operation.AffiliationTag); + if (syndicate !== undefined) { + syndicate.Standing += gainedStanding; + } else { + inventory.Affiliations.push({ + Tag: request.Operation.AffiliationTag, + Standing: gainedStanding + }); + } + + // TODO: Subtract from daily limit bin; maybe also a cheat to skip that. + + await inventory.save(); + + res.json({ + InventoryChanges: { + MiscItems: request.Operation.Items + }, + AffiliationMods: [ + { + Tag: request.Operation.AffiliationTag, + Standing: gainedStanding + } + ] + }); +}; + +interface ISyndicateStandingBonusRequest { + Operation: { + AffiliationTag: string; + AlternateBonusReward: ""; // ??? + Items: IMiscItem[]; + }; + ModularWeaponId: IOid; // Seems to just be "000000000000000000000000", also note there's a "Category" query field +} diff --git a/src/routes/api.ts b/src/routes/api.ts index 400dbc46..d30bd9b5 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -62,6 +62,7 @@ import { startRecipeController } from "@/src/controllers/api/startRecipeControll import { stepSequencersController } from "@/src/controllers/api/stepSequencersController"; import { surveysController } from "@/src/controllers/api/surveysController"; import { syndicateSacrificeController } from "../controllers/api/syndicateSacrificeController"; +import { syndicateStandingBonusController } from "../controllers/api/syndicateStandingBonusController"; import { tauntHistoryController } from "@/src/controllers/api/tauntHistoryController"; import { trainingResultController } from "@/src/controllers/api/trainingResultController"; import { updateChallengeProgressController } from "@/src/controllers/api/updateChallengeProgressController"; @@ -139,6 +140,7 @@ apiRouter.post("/startDojoRecipe.php", startDojoRecipeController); apiRouter.post("/startRecipe.php", startRecipeController); apiRouter.post("/stepSequencers.php", stepSequencersController); apiRouter.post("/syndicateSacrifice.php", syndicateSacrificeController); +apiRouter.post("/syndicateStandingBonus.php", syndicateStandingBonusController); apiRouter.post("/tauntHistory.php", tauntHistoryController); apiRouter.post("/trainingResult.php", trainingResultController); apiRouter.post("/updateChallengeProgress.php", updateChallengeProgressController); -- 2.47.2 From 0a31ff7b5cc3044cb2b819a29c66ebaf51851228 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 20:38:50 +0100 Subject: [PATCH 041/181] feat(webui): language selector (#593) --- .../custom/getItemListsController.ts | 19 ++-- src/services/itemDataService.ts | 52 ++++++++- static/webui/index.html | 36 +++++-- static/webui/script.js | 101 +++++++++++------- 4 files changed, 149 insertions(+), 59 deletions(-) diff --git a/src/controllers/custom/getItemListsController.ts b/src/controllers/custom/getItemListsController.ts index 8e360ca9..914bd5cc 100644 --- a/src/controllers/custom/getItemListsController.ts +++ b/src/controllers/custom/getItemListsController.ts @@ -1,5 +1,5 @@ import { RequestHandler } from "express"; -import { getEnglishString } from "@/src/services/itemDataService"; +import { getDict, getString } from "@/src/services/itemDataService"; import { ExportArcanes, ExportGear, @@ -16,7 +16,8 @@ interface ListedItem { fusionLimit?: number; } -const getItemListsController: RequestHandler = (_req, res) => { +const getItemListsController: RequestHandler = (req, res) => { + const lang = getDict(typeof req.query.lang == "string" ? req.query.lang : "en"); const weapons = []; const miscitems = []; for (const [uniqueName, item] of Object.entries(ExportWeapons)) { @@ -24,12 +25,12 @@ const getItemListsController: RequestHandler = (_req, res) => { if (item.totalDamage !== 0) { weapons.push({ uniqueName, - name: getEnglishString(item.name) + name: getString(item.name, lang) }); } else if (!item.excludeFromCodex) { miscitems.push({ uniqueName: "MiscItems:" + uniqueName, - name: getEnglishString(item.name) + name: getString(item.name, lang) }); } } @@ -37,13 +38,13 @@ const getItemListsController: RequestHandler = (_req, res) => { for (const [uniqueName, item] of Object.entries(ExportResources)) { miscitems.push({ uniqueName: item.productCategory + ":" + uniqueName, - name: getEnglishString(item.name) + name: getString(item.name, lang) }); } for (const [uniqueName, item] of Object.entries(ExportGear)) { miscitems.push({ uniqueName: "Consumables:" + uniqueName, - name: getEnglishString(item.name) + name: getString(item.name, lang) }); } @@ -52,7 +53,7 @@ const getItemListsController: RequestHandler = (_req, res) => { for (const [uniqueName, upgrade] of Object.entries(ExportUpgrades)) { mods.push({ uniqueName, - name: getEnglishString(upgrade.name), + name: getString(upgrade.name, lang), fusionLimit: upgrade.fusionLimit }); if (upgrade.isStarter || upgrade.isFrivolous || upgrade.upgradeEntries) { @@ -62,7 +63,7 @@ const getItemListsController: RequestHandler = (_req, res) => { for (const [uniqueName, arcane] of Object.entries(ExportArcanes)) { mods.push({ uniqueName, - name: getEnglishString(arcane.name) + name: getString(arcane.name, lang) }); if (arcane.isFrivolous) { badItems[uniqueName] = true; @@ -75,7 +76,7 @@ const getItemListsController: RequestHandler = (_req, res) => { .map(([uniqueName, warframe]) => { return { uniqueName, - name: getEnglishString(warframe.name) + name: getString(warframe.name, lang) }; }), weapons, diff --git a/src/services/itemDataService.ts b/src/services/itemDataService.ts index 33d7064b..ca9c0b0b 100644 --- a/src/services/itemDataService.ts +++ b/src/services/itemDataService.ts @@ -1,7 +1,21 @@ import { getIndexAfter } from "@/src/helpers/stringHelpers"; import { logger } from "@/src/utils/logger"; import { + dict_de, dict_en, + dict_es, + dict_fr, + dict_it, + dict_ja, + dict_ko, + dict_pl, + dict_pt, + dict_ru, + dict_tc, + dict_th, + dict_tr, + dict_uk, + dict_zh, ExportRecipes, ExportWarframes, ExportWeapons, @@ -70,6 +84,40 @@ export const getSuitByUniqueName = (uniqueName: string): IPowersuit | undefined return ExportWarframes[uniqueName]; }; -export const getEnglishString = (key: string): string => { - return dict_en[key] ?? key; +export const getDict = (lang: string): Record => { + switch (lang) { + case "de": + return dict_de; + case "es": + return dict_es; + case "fr": + return dict_fr; + case "it": + return dict_it; + case "ja": + return dict_ja; + case "ko": + return dict_ko; + case "pl": + return dict_pl; + case "pt": + return dict_pt; + case "ru": + return dict_ru; + case "tc": + return dict_tc; + case "th": + return dict_th; + case "tr": + return dict_tr; + case "uk": + return dict_uk; + case "zh": + return dict_zh; + } + return dict_en; +}; + +export const getString = (key: string, dict: Record): string => { + return dict[key] ?? key; }; diff --git a/static/webui/index.html b/static/webui/index.html index 983880c2..75a7ce0a 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -7,18 +7,40 @@ -