From b41ce3751c9d47c3faaa19ab8d13a5349b3563c5 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 19 Jan 2025 12:33:04 +0100 Subject: [PATCH 01/41] initial importService for Suits array --- src/controllers/custom/importController.ts | 19 +++++++ src/routes/custom.ts | 2 + src/services/importService.ts | 50 +++++++++++++++++++ .../inventoryTypes/commonInventoryTypes.ts | 9 ++-- src/types/inventoryTypes/inventoryTypes.ts | 7 ++- 5 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 src/controllers/custom/importController.ts create mode 100644 src/services/importService.ts diff --git a/src/controllers/custom/importController.ts b/src/controllers/custom/importController.ts new file mode 100644 index 00000000..3730472b --- /dev/null +++ b/src/controllers/custom/importController.ts @@ -0,0 +1,19 @@ +import { importInventory } from "@/src/services/importService"; +import { getInventory } from "@/src/services/inventoryService"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { IInventoryResponse } from "@/src/types/inventoryTypes/inventoryTypes"; +import { RequestHandler } from "express"; + +export const importController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const inventory = await getInventory(accountId); + const request = JSON.parse(String(req.body)) as IImportRequest; + importInventory(inventory, request.inventory, request.replace, request.update); + res.json(await inventory.save()); +}; + +interface IImportRequest { + inventory: IInventoryResponse; + replace: boolean; + update: boolean; +} diff --git a/src/routes/custom.ts b/src/routes/custom.ts index e4299412..3772362c 100644 --- a/src/routes/custom.ts +++ b/src/routes/custom.ts @@ -9,6 +9,7 @@ import { renameAccountController } from "@/src/controllers/custom/renameAccountC import { createAccountController } from "@/src/controllers/custom/createAccountController"; import { addItemsController } from "@/src/controllers/custom/addItemsController"; +import { importController } from "@/src/controllers/custom/importController"; import { getConfigDataController } from "@/src/controllers/custom/getConfigDataController"; import { updateConfigDataController } from "@/src/controllers/custom/updateConfigDataController"; @@ -24,6 +25,7 @@ customRouter.get("/renameAccount", renameAccountController); customRouter.post("/createAccount", createAccountController); customRouter.post("/addItems", addItemsController); +customRouter.post("/import", importController); customRouter.get("/config", getConfigDataController); customRouter.post("/config", updateConfigDataController); diff --git a/src/services/importService.ts b/src/services/importService.ts new file mode 100644 index 00000000..d2f5f1ac --- /dev/null +++ b/src/services/importService.ts @@ -0,0 +1,50 @@ +import { Types } from "mongoose"; +import { IEquipmentClient, IEquipmentDatabase } from "../types/inventoryTypes/commonInventoryTypes"; +import { IMongoDate } from "../types/commonTypes"; +import { IInventoryResponse } from "../types/inventoryTypes/inventoryTypes"; +import { TInventoryDatabaseDocument } from "../models/inventoryModels/inventoryModel"; + +const importDate = (value: IMongoDate): Date => { + return new Date(parseInt(value.$date.$numberLong)); +}; + +const importOptionalDate = (value: IMongoDate | undefined): Date | undefined => { + return value ? importDate(value) : undefined; +}; + +const importEquipment = (client: IEquipmentClient): IEquipmentDatabase => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { ItemId, ...rest } = client; + return { + ...rest, + _id: new Types.ObjectId(client.ItemId.$oid), + InfestationDate: importOptionalDate(client.InfestationDate), + Expiry: importOptionalDate(client.Expiry), + UpgradesExpiry: importOptionalDate(client.UpgradesExpiry) + }; +}; + +export const importInventory = ( + db: TInventoryDatabaseDocument, + client: IInventoryResponse, + replace: boolean = false, + update: boolean = true +): void => { + const clientSuitsInDbFormat = client.Suits.map(x => importEquipment(x)); + if (replace) { + db.Suits.splice(0, db.Suits.length); + } + clientSuitsInDbFormat.forEach(suitToImport => { + if (update) { + const index = db.Suits.findIndex(x => x._id == suitToImport._id); + if (index != -1) { + db.Suits.splice(index, 1); + } + } else { + if (db.Suits.id(suitToImport._id)) { + return; + } + } + db.Suits.push(suitToImport); + }); +}; diff --git a/src/types/inventoryTypes/commonInventoryTypes.ts b/src/types/inventoryTypes/commonInventoryTypes.ts index ccc5851e..e1603816 100644 --- a/src/types/inventoryTypes/commonInventoryTypes.ts +++ b/src/types/inventoryTypes/commonInventoryTypes.ts @@ -78,8 +78,11 @@ export interface IEquipmentSelection { hide?: boolean; } -export interface IEquipmentClient extends Omit { +export interface IEquipmentClient + extends Omit { ItemId: IOid; + InfestationDate?: IMongoDate; + Expiry?: IMongoDate; UpgradesExpiry?: IMongoDate; } @@ -106,12 +109,12 @@ export interface IEquipmentDatabase { CustomizationSlotPurchases?: number; UpgradeType?: string; UpgradeFingerprint?: string; - InfestationDate?: IMongoDate; + InfestationDate?: Date; InfestationDays?: number; InfestationType?: string; ModularParts?: string[]; UnlockLevel?: number; - Expiry?: IMongoDate; + Expiry?: Date; SkillTree?: string; OffensiveUpgrade?: string; DefensiveUpgrade?: string; diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 3710ca2b..8fcc8b27 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -7,7 +7,8 @@ import { IItemConfig, IOperatorConfigClient, IEquipmentSelection, - IEquipmentDatabase + IEquipmentDatabase, + IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; export interface IInventoryDatabase @@ -23,6 +24,7 @@ export interface IInventoryDatabase | "BlessingCooldown" | "Ships" | "WeaponSkins" + | "Suits" > { accountOwnerId: Types.ObjectId; Created: Date; @@ -35,6 +37,7 @@ export interface IInventoryDatabase BlessingCooldown: Date; Ships: Types.ObjectId[]; WeaponSkins: IWeaponSkinDatabase[]; + Suits: IEquipmentDatabase[]; } export interface IQuestKeyDatabase { @@ -163,7 +166,7 @@ export interface IInventoryResponse extends IDailyAffiliations { ChallengeProgress: IChallengeProgress[]; RawUpgrades: IRawUpgrade[]; ReceivedStartingGear: boolean; - Suits: IEquipmentDatabase[]; + Suits: IEquipmentClient[]; LongGuns: IEquipmentDatabase[]; Pistols: IEquipmentDatabase[]; Melee: IEquipmentDatabase[]; -- 2.47.2 From 03716daa6235011eb7d1079a01c008edca4147ca Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 19 Jan 2025 14:53:45 +0100 Subject: [PATCH 02/41] rename converter functions --- src/services/importService.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/services/importService.ts b/src/services/importService.ts index d2f5f1ac..cc020fe8 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -4,23 +4,23 @@ import { IMongoDate } from "../types/commonTypes"; import { IInventoryResponse } from "../types/inventoryTypes/inventoryTypes"; import { TInventoryDatabaseDocument } from "../models/inventoryModels/inventoryModel"; -const importDate = (value: IMongoDate): Date => { +const convertDate = (value: IMongoDate): Date => { return new Date(parseInt(value.$date.$numberLong)); }; -const importOptionalDate = (value: IMongoDate | undefined): Date | undefined => { - return value ? importDate(value) : undefined; +const convertOptionalDate = (value: IMongoDate | undefined): Date | undefined => { + return value ? convertDate(value) : undefined; }; -const importEquipment = (client: IEquipmentClient): IEquipmentDatabase => { +const convertEquipment = (client: IEquipmentClient): IEquipmentDatabase => { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { ItemId, ...rest } = client; return { ...rest, _id: new Types.ObjectId(client.ItemId.$oid), - InfestationDate: importOptionalDate(client.InfestationDate), - Expiry: importOptionalDate(client.Expiry), - UpgradesExpiry: importOptionalDate(client.UpgradesExpiry) + InfestationDate: convertOptionalDate(client.InfestationDate), + Expiry: convertOptionalDate(client.Expiry), + UpgradesExpiry: convertOptionalDate(client.UpgradesExpiry) }; }; @@ -30,7 +30,7 @@ export const importInventory = ( replace: boolean = false, update: boolean = true ): void => { - const clientSuitsInDbFormat = client.Suits.map(x => importEquipment(x)); + const clientSuitsInDbFormat = client.Suits.map(x => convertEquipment(x)); if (replace) { db.Suits.splice(0, db.Suits.length); } -- 2.47.2 From d11dfc54850f78ebda3fda0b692cc6dc5f891393 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 19 Jan 2025 16:56:01 +0100 Subject: [PATCH 03/41] no point trying for fine-grained import, it's gonna become a mess, either way --- src/controllers/custom/importController.ts | 4 +--- src/services/importService.ts | 21 ++------------------- 2 files changed, 3 insertions(+), 22 deletions(-) diff --git a/src/controllers/custom/importController.ts b/src/controllers/custom/importController.ts index 3730472b..c1511444 100644 --- a/src/controllers/custom/importController.ts +++ b/src/controllers/custom/importController.ts @@ -8,12 +8,10 @@ export const importController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const inventory = await getInventory(accountId); const request = JSON.parse(String(req.body)) as IImportRequest; - importInventory(inventory, request.inventory, request.replace, request.update); + importInventory(inventory, request.inventory); res.json(await inventory.save()); }; interface IImportRequest { inventory: IInventoryResponse; - replace: boolean; - update: boolean; } diff --git a/src/services/importService.ts b/src/services/importService.ts index cc020fe8..04158c50 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -24,27 +24,10 @@ const convertEquipment = (client: IEquipmentClient): IEquipmentDatabase => { }; }; -export const importInventory = ( - db: TInventoryDatabaseDocument, - client: IInventoryResponse, - replace: boolean = false, - update: boolean = true -): void => { +export const importInventory = (db: TInventoryDatabaseDocument, client: IInventoryResponse): void => { const clientSuitsInDbFormat = client.Suits.map(x => convertEquipment(x)); - if (replace) { - db.Suits.splice(0, db.Suits.length); - } + db.Suits.splice(0, db.Suits.length); clientSuitsInDbFormat.forEach(suitToImport => { - if (update) { - const index = db.Suits.findIndex(x => x._id == suitToImport._id); - if (index != -1) { - db.Suits.splice(index, 1); - } - } else { - if (db.Suits.id(suitToImport._id)) { - return; - } - } db.Suits.push(suitToImport); }); }; -- 2.47.2 From 79cf50b9ae33a5806f22d7312a7f46f7c80f7ecb Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 19 Jan 2025 17:04:38 +0100 Subject: [PATCH 04/41] import WeaponSkins --- src/services/importService.ts | 27 ++++++++++++++++------ src/types/inventoryTypes/inventoryTypes.ts | 3 ++- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/services/importService.ts b/src/services/importService.ts index 04158c50..d5f4fffc 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -1,7 +1,9 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ + import { Types } from "mongoose"; import { IEquipmentClient, IEquipmentDatabase } from "../types/inventoryTypes/commonInventoryTypes"; import { IMongoDate } from "../types/commonTypes"; -import { IInventoryResponse } from "../types/inventoryTypes/inventoryTypes"; +import { IInventoryResponse, IWeaponSkinClient, IWeaponSkinDatabase } from "../types/inventoryTypes/inventoryTypes"; import { TInventoryDatabaseDocument } from "../models/inventoryModels/inventoryModel"; const convertDate = (value: IMongoDate): Date => { @@ -13,7 +15,6 @@ const convertOptionalDate = (value: IMongoDate | undefined): Date | undefined => }; const convertEquipment = (client: IEquipmentClient): IEquipmentDatabase => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars const { ItemId, ...rest } = client; return { ...rest, @@ -24,10 +25,22 @@ const convertEquipment = (client: IEquipmentClient): IEquipmentDatabase => { }; }; -export const importInventory = (db: TInventoryDatabaseDocument, client: IInventoryResponse): void => { - const clientSuitsInDbFormat = client.Suits.map(x => convertEquipment(x)); - db.Suits.splice(0, db.Suits.length); - clientSuitsInDbFormat.forEach(suitToImport => { - db.Suits.push(suitToImport); +const convertWeaponSkin = (client: IWeaponSkinClient): IWeaponSkinDatabase => { + const { ItemId, ...rest } = client; + return { + ...rest, + _id: new Types.ObjectId(client.ItemId.$oid) + }; +}; + +const replaceArray = (arr: T[], replacement: T[]): void => { + arr.splice(0, arr.length); + replacement.forEach(x => { + arr.push(x); }); }; + +export const importInventory = (db: TInventoryDatabaseDocument, client: IInventoryResponse): void => { + replaceArray(db.Suits, client.Suits.map(convertEquipment)); + replaceArray(db.WeaponSkins, client.WeaponSkins.map(convertWeaponSkin)); +}; diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 8fcc8b27..c1685b2f 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -916,9 +916,10 @@ export interface ITaunt { export interface IWeaponSkinDatabase { ItemType: string; + _id: Types.ObjectId; } -export interface IWeaponSkinClient extends IWeaponSkinDatabase { +export interface IWeaponSkinClient extends Omit { ItemId: IOid; } -- 2.47.2 From 394dc4c3043115613109f9b38e86f08355e33d41 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 19 Jan 2025 17:05:58 +0100 Subject: [PATCH 05/41] rename IInventoryResponse to IInventoryClient --- src/controllers/api/inventoryController.ts | 4 ++-- src/controllers/custom/importController.ts | 4 ++-- src/models/inventoryModels/inventoryModel.ts | 4 ++-- src/services/importService.ts | 4 ++-- src/types/inventoryTypes/inventoryTypes.ts | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 5b143728..0b495ed6 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -4,7 +4,7 @@ import { Inventory } from "@/src/models/inventoryModels/inventoryModel"; import { config } from "@/src/services/configService"; import allDialogue from "@/static/fixed_responses/allDialogue.json"; import { ILoadoutDatabase } from "@/src/types/saveLoadoutTypes"; -import { IInventoryResponse, IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IInventoryClient, IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes"; import { IPolarity, ArtifactPolarity, EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { ExportCustoms, @@ -55,7 +55,7 @@ export const inventoryController: RequestHandler = async (request, response) => const inventoryWithLoadOutPresetsAndShips = await inventoryWithLoadOutPresets.populate<{ Ships: IShipInventory }>( "Ships" ); - const inventoryResponse = inventoryWithLoadOutPresetsAndShips.toJSON(); + const inventoryResponse = inventoryWithLoadOutPresetsAndShips.toJSON(); if (config.infiniteCredits) { inventoryResponse.RegularCredits = 999999999; diff --git a/src/controllers/custom/importController.ts b/src/controllers/custom/importController.ts index c1511444..d61eea04 100644 --- a/src/controllers/custom/importController.ts +++ b/src/controllers/custom/importController.ts @@ -1,7 +1,7 @@ import { importInventory } from "@/src/services/importService"; import { getInventory } from "@/src/services/inventoryService"; import { getAccountIdForRequest } from "@/src/services/loginService"; -import { IInventoryResponse } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IInventoryClient } from "@/src/types/inventoryTypes/inventoryTypes"; import { RequestHandler } from "express"; export const importController: RequestHandler = async (req, res) => { @@ -13,5 +13,5 @@ export const importController: RequestHandler = async (req, res) => { }; interface IImportRequest { - inventory: IInventoryResponse; + inventory: IInventoryClient; } diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index d3b6b33b..80486a9c 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -6,7 +6,7 @@ import { IMiscItem, IInventoryDatabase, IBooster, - IInventoryResponse, + IInventoryClient, ISlots, IMailbox, IDuviriInfo, @@ -1142,7 +1142,7 @@ inventorySchema.set("toJSON", { delete returnedObject.accountOwnerId; const inventoryDatabase = returnedObject as IInventoryDatabase; - const inventoryResponse = returnedObject as IInventoryResponse; + const inventoryResponse = returnedObject as IInventoryClient; inventoryResponse.TrainingDate = toMongoDate(inventoryDatabase.TrainingDate); inventoryResponse.Created = toMongoDate(inventoryDatabase.Created); diff --git a/src/services/importService.ts b/src/services/importService.ts index d5f4fffc..2afa5313 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -3,7 +3,7 @@ import { Types } from "mongoose"; import { IEquipmentClient, IEquipmentDatabase } from "../types/inventoryTypes/commonInventoryTypes"; import { IMongoDate } from "../types/commonTypes"; -import { IInventoryResponse, IWeaponSkinClient, IWeaponSkinDatabase } from "../types/inventoryTypes/inventoryTypes"; +import { IInventoryClient, IWeaponSkinClient, IWeaponSkinDatabase } from "../types/inventoryTypes/inventoryTypes"; import { TInventoryDatabaseDocument } from "../models/inventoryModels/inventoryModel"; const convertDate = (value: IMongoDate): Date => { @@ -40,7 +40,7 @@ const replaceArray = (arr: T[], replacement: T[]): void => { }); }; -export const importInventory = (db: TInventoryDatabaseDocument, client: IInventoryResponse): void => { +export const importInventory = (db: TInventoryDatabaseDocument, client: IInventoryClient): void => { replaceArray(db.Suits, client.Suits.map(convertEquipment)); replaceArray(db.WeaponSkins, client.WeaponSkins.map(convertWeaponSkin)); }; diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index c1685b2f..34185a27 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -13,7 +13,7 @@ import { export interface IInventoryDatabase extends Omit< - IInventoryResponse, + IInventoryClient, | "TrainingDate" | "LoadOutPresets" | "Mailbox" @@ -129,7 +129,7 @@ export interface IDailyAffiliations { DailyAffiliationHex: number; } -export interface IInventoryResponse extends IDailyAffiliations { +export interface IInventoryClient extends IDailyAffiliations { Horses: IEquipmentDatabase[]; DrifterMelee: IEquipmentDatabase[]; DrifterGuns: IEquipmentDatabase[]; -- 2.47.2 From 83015ec8f3f0ddafeb899fec2ffb91cc0faf1c60 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 19 Jan 2025 17:11:04 +0100 Subject: [PATCH 06/41] improve typings around Upgrades --- src/controllers/api/arcaneCommonController.ts | 2 +- src/controllers/api/artifactsController.ts | 8 +++---- src/models/inventoryModels/inventoryModel.ts | 14 ++++++------- src/types/inventoryTypes/inventoryTypes.ts | 21 +++++++++++++------ 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/controllers/api/arcaneCommonController.ts b/src/controllers/api/arcaneCommonController.ts index 2caccc29..1028fc3f 100644 --- a/src/controllers/api/arcaneCommonController.ts +++ b/src/controllers/api/arcaneCommonController.ts @@ -44,7 +44,7 @@ export const arcaneCommonController: RequestHandler = async (req, res) => { ItemType: json.arcane.ItemType, UpgradeFingerprint: JSON.stringify({ lvl: json.newRank }) }); - upgradeId = inventory.Upgrades[newLength - 1]._id!.toString(); + upgradeId = inventory.Upgrades[newLength - 1]._id.toString(); } // Remove RawUpgrades diff --git a/src/controllers/api/artifactsController.ts b/src/controllers/api/artifactsController.ts index a5ec66fa..564d222a 100644 --- a/src/controllers/api/artifactsController.ts +++ b/src/controllers/api/artifactsController.ts @@ -1,7 +1,7 @@ import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { RequestHandler } from "express"; -import { ICrewShipSalvagedWeaponSkin } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IInventoryClient, IUpgradeClient } from "@/src/types/inventoryTypes/inventoryTypes"; import { addMods, getInventory } from "@/src/services/inventoryService"; import { config } from "@/src/services/configService"; @@ -20,7 +20,7 @@ export const artifactsController: RequestHandler = async (req, res) => { parsedUpgradeFingerprint.lvl += LevelDiff; const stringifiedUpgradeFingerprint = JSON.stringify(parsedUpgradeFingerprint); - let itemIndex = Upgrades.findIndex(upgrade => upgrade._id?.equals(ItemId!.$oid)); + let itemIndex = Upgrades.findIndex(upgrade => upgrade._id.equals(ItemId.$oid)); if (itemIndex !== -1) { Upgrades[itemIndex].UpgradeFingerprint = stringifiedUpgradeFingerprint; @@ -58,7 +58,7 @@ export const artifactsController: RequestHandler = async (req, res) => { } const changedInventory = await inventory.save(); - const itemId = changedInventory.toJSON().Upgrades[itemIndex]?.ItemId?.$oid; + const itemId = changedInventory.toJSON().Upgrades[itemIndex].ItemId.$oid; if (!itemId) { throw new Error("Item Id not found in upgradeMod"); @@ -68,7 +68,7 @@ export const artifactsController: RequestHandler = async (req, res) => { }; interface IArtifactsRequest { - Upgrade: ICrewShipSalvagedWeaponSkin; + Upgrade: IUpgradeClient; LevelDiff: number; Cost: number; FusionPointCost: number; diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 80486a9c..0f370860 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -2,7 +2,6 @@ import { Document, Model, Schema, Types, model } from "mongoose"; import { IFlavourItem, IRawUpgrade, - ICrewShipSalvagedWeaponSkin, IMiscItem, IInventoryDatabase, IBooster, @@ -52,7 +51,8 @@ import { IDialogueDatabase, IDialogueGift, ICompletedDialogue, - IDialogueClient + IDialogueClient, + IUpgradeDatabase } from "../../types/inventoryTypes/inventoryTypes"; import { IOid } from "../../types/commonTypes"; import { @@ -288,7 +288,7 @@ RawUpgrades.set("toJSON", { } }); -const upgradesSchema = new Schema( +const upgradeSchema = new Schema( { UpgradeFingerprint: String, PendingRerollFingerprint: { type: String, required: false }, @@ -297,11 +297,11 @@ const upgradesSchema = new Schema( { id: false } ); -upgradesSchema.virtual("ItemId").get(function () { +upgradeSchema.virtual("ItemId").get(function () { return toOid(this._id); }); -upgradesSchema.set("toJSON", { +upgradeSchema.set("toJSON", { virtuals: true, transform(_document, returnedObject) { delete returnedObject._id; @@ -848,7 +848,7 @@ const inventorySchema = new Schema( //Non Upgrade Mods Example:I have 999 item WeaponElectricityDamageMod (only "ItemCount"+"ItemType") RawUpgrades: [RawUpgrades], //Upgrade Mods\Riven\Arcane Example:"UpgradeFingerprint"+"ItemType"+"" - Upgrades: [upgradesSchema], + Upgrades: [upgradeSchema], //Warframe Suits: [EquipmentSchema], @@ -1164,7 +1164,7 @@ type InventoryDocumentProps = { OperatorAmps: Types.DocumentArray; FlavourItems: Types.DocumentArray; RawUpgrades: Types.DocumentArray; - Upgrades: Types.DocumentArray; + Upgrades: Types.DocumentArray; MiscItems: Types.DocumentArray; Boosters: Types.DocumentArray; OperatorLoadOuts: Types.DocumentArray; diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 34185a27..edcdbe15 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -25,6 +25,9 @@ export interface IInventoryDatabase | "Ships" | "WeaponSkins" | "Suits" + | "Upgrades" + | "CrewShipSalvagedWeaponSkins" + | "CrewShipWeaponSkins" > { accountOwnerId: Types.ObjectId; Created: Date; @@ -38,6 +41,9 @@ export interface IInventoryDatabase Ships: Types.ObjectId[]; WeaponSkins: IWeaponSkinDatabase[]; Suits: IEquipmentDatabase[]; + Upgrades: IUpgradeDatabase[]; + CrewShipSalvagedWeaponSkins: IUpgradeDatabase[]; + CrewShipWeaponSkins: IUpgradeDatabase[]; } export interface IQuestKeyDatabase { @@ -194,7 +200,7 @@ export interface IInventoryClient extends IDailyAffiliations { Accolades?: { Heirloom?: boolean; }; - Upgrades: ICrewShipSalvagedWeaponSkin[]; + Upgrades: IUpgradeClient[]; EquippedGear: string[]; DeathMarks: string[]; FusionTreasures: IFusionTreasure[]; @@ -272,10 +278,10 @@ export interface IInventoryClient extends IDailyAffiliations { CrewShips: ICrewShip[]; PlayerSkills: IPlayerSkills; CrewShipAmmo: IConsumable[]; - CrewShipSalvagedWeaponSkins: ICrewShipSalvagedWeaponSkin[]; + CrewShipSalvagedWeaponSkins: IUpgradeClient[]; CrewShipWeapons: ICrewShipWeapon[]; CrewShipSalvagedWeapons: ICrewShipWeapon[]; - CrewShipWeaponSkins: ICrewShipSalvagedWeaponSkin[]; + CrewShipWeaponSkins: IUpgradeClient[]; TradeBannedUntil?: IMongoDate; PlayedParkourTutorial: boolean; SubscribedToEmailsPersonalized: number; @@ -418,12 +424,15 @@ export interface ISlots { Slots: number; } -export interface ICrewShipSalvagedWeaponSkin { +export interface IUpgradeClient { ItemType: string; UpgradeFingerprint?: string; PendingRerollFingerprint?: string; - ItemId?: IOid; - _id?: Types.ObjectId; + ItemId: IOid; +} + +export interface IUpgradeDatabase extends Omit { + _id: Types.ObjectId; } export interface ICrewShip { -- 2.47.2 From ce2459113b3b52e490f4f7113e90f7c65b550ee8 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 19 Jan 2025 17:21:02 +0100 Subject: [PATCH 07/41] import Upgrades --- src/services/importService.ts | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/services/importService.ts b/src/services/importService.ts index 2afa5313..87ba9231 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -1,11 +1,17 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ - import { Types } from "mongoose"; import { IEquipmentClient, IEquipmentDatabase } from "../types/inventoryTypes/commonInventoryTypes"; import { IMongoDate } from "../types/commonTypes"; -import { IInventoryClient, IWeaponSkinClient, IWeaponSkinDatabase } from "../types/inventoryTypes/inventoryTypes"; +import { + IInventoryClient, + IUpgradeClient, + IUpgradeDatabase, + IWeaponSkinClient, + IWeaponSkinDatabase +} from "../types/inventoryTypes/inventoryTypes"; import { TInventoryDatabaseDocument } from "../models/inventoryModels/inventoryModel"; +/* eslint-disable @typescript-eslint/no-unused-vars */ + const convertDate = (value: IMongoDate): Date => { return new Date(parseInt(value.$date.$numberLong)); }; @@ -33,6 +39,14 @@ const convertWeaponSkin = (client: IWeaponSkinClient): IWeaponSkinDatabase => { }; }; +const convertUpgrade = (client: IUpgradeClient): IUpgradeDatabase => { + const { ItemId, ...rest } = client; + return { + ...rest, + _id: new Types.ObjectId(client.ItemId.$oid) + }; +}; + const replaceArray = (arr: T[], replacement: T[]): void => { arr.splice(0, arr.length); replacement.forEach(x => { @@ -43,4 +57,5 @@ const replaceArray = (arr: T[], replacement: T[]): void => { export const importInventory = (db: TInventoryDatabaseDocument, client: IInventoryClient): void => { replaceArray(db.Suits, client.Suits.map(convertEquipment)); replaceArray(db.WeaponSkins, client.WeaponSkins.map(convertWeaponSkin)); + replaceArray(db.Upgrades, client.Upgrades.map(convertUpgrade)); }; -- 2.47.2 From ceba8252b03e30f89439e5eee291d610f6b9effc Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Mon, 20 Jan 2025 04:00:58 +0100 Subject: [PATCH 08/41] feat(webui): mod count (#830) --- static/webui/index.html | 1 + static/webui/script.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/static/webui/index.html b/static/webui/index.html index 6bbe59f4..3a6d8594 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -331,6 +331,7 @@
Mods
+
diff --git a/static/webui/script.js b/static/webui/script.js index dc6e4872..c4b86f07 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -839,7 +839,7 @@ function doAcquireMod() { RawUpgrades: [ { ItemType: uniqueName, - ItemCount: 1 + ItemCount: parseInt($("#mod-count").val()) } ] }) -- 2.47.2 From eb1627a50fcb5f0c17a04a5034cbd372a469b839 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 04:45:02 +0100 Subject: [PATCH 09/41] support partial import --- src/services/importService.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/services/importService.ts b/src/services/importService.ts index 87ba9231..3ec3c266 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -54,8 +54,14 @@ const replaceArray = (arr: T[], replacement: T[]): void => { }); }; -export const importInventory = (db: TInventoryDatabaseDocument, client: IInventoryClient): void => { - replaceArray(db.Suits, client.Suits.map(convertEquipment)); - replaceArray(db.WeaponSkins, client.WeaponSkins.map(convertWeaponSkin)); - replaceArray(db.Upgrades, client.Upgrades.map(convertUpgrade)); +export const importInventory = (db: TInventoryDatabaseDocument, client: Partial): void => { + if (client.Suits) { + replaceArray(db.Suits, client.Suits.map(convertEquipment)); + } + if (client.WeaponSkins) { + replaceArray(db.WeaponSkins, client.WeaponSkins.map(convertWeaponSkin)); + } + if (client.Upgrades) { + replaceArray(db.Upgrades, client.Upgrades.map(convertUpgrade)); + } }; -- 2.47.2 From 1bb00df7609cc558ed72146d5a15c04f206b07e0 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 04:48:48 +0100 Subject: [PATCH 10/41] give an empty response for import request --- src/controllers/custom/importController.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/controllers/custom/importController.ts b/src/controllers/custom/importController.ts index d61eea04..7f37979b 100644 --- a/src/controllers/custom/importController.ts +++ b/src/controllers/custom/importController.ts @@ -9,7 +9,8 @@ export const importController: RequestHandler = async (req, res) => { const inventory = await getInventory(accountId); const request = JSON.parse(String(req.body)) as IImportRequest; importInventory(inventory, request.inventory); - res.json(await inventory.save()); + await inventory.save(); + res.end(); }; interface IImportRequest { -- 2.47.2 From e7d655aa586fe471c84f00764edb3c12a6376343 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 04:57:24 +0100 Subject: [PATCH 11/41] Add import to webui --- src/routes/webui.ts | 3 +++ static/webui/index.html | 8 ++++++++ static/webui/script.js | 14 ++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/src/routes/webui.ts b/src/routes/webui.ts index 64b3d613..5ae72040 100644 --- a/src/routes/webui.ts +++ b/src/routes/webui.ts @@ -34,6 +34,9 @@ webuiRouter.get("/webui/settings", (_req, res) => { webuiRouter.get("/webui/cheats", (_req, res) => { res.sendFile(path.join(rootDir, "static/webui/index.html")); }); +webuiRouter.get("/webui/import", (_req, res) => { + res.sendFile(path.join(rootDir, "static/webui/index.html")); +}); // Serve static files webuiRouter.use("/webui", express.static(path.join(rootDir, "static/webui"))); diff --git a/static/webui/index.html b/static/webui/index.html index 6bbe59f4..6d19b3c9 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -64,6 +64,9 @@ +
@@ -492,6 +495,11 @@ +
+

You can provide a full or partial inventory response (client respresentation) here. All fields that are supported by the importer will be overwritten in your account.

+ + +
diff --git a/static/webui/script.js b/static/webui/script.js index dc6e4872..e3e08186 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -1083,3 +1083,17 @@ function doPopArchonCrystalUpgrade(type) { }); }); } + +function doImport() { + revalidateAuthz(() => { + $.post({ + url: "/custom/import?" + window.authz, + contentType: "text/plain", + data: JSON.stringify({ + inventory: JSON.parse($("#import-inventory").val()) + }) + }).then(function() { + updateInventory(); + }); + }); +} -- 2.47.2 From ee0bee5d7b5e62073bef805b0d0109acd24690f5 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 05:23:32 +0100 Subject: [PATCH 12/41] fix(webui): shrink count inputs --- static/webui/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/static/webui/index.html b/static/webui/index.html index 3a6d8594..10587a6b 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -90,7 +90,7 @@
Add Items
- +
@@ -332,7 +332,7 @@
- +
-- 2.47.2 From 6eb4ef81df57cd522cfc493287f97d30a278047f Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 05:04:10 +0100 Subject: [PATCH 13/41] import all equipmentKeys --- src/services/importService.ts | 7 +++- src/types/inventoryTypes/inventoryTypes.ts | 44 ++++++++++++++-------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/src/services/importService.ts b/src/services/importService.ts index 3ec3c266..8d0ae9bf 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -2,6 +2,7 @@ import { Types } from "mongoose"; import { IEquipmentClient, IEquipmentDatabase } from "../types/inventoryTypes/commonInventoryTypes"; import { IMongoDate } from "../types/commonTypes"; import { + equipmentKeys, IInventoryClient, IUpgradeClient, IUpgradeDatabase, @@ -55,8 +56,10 @@ const replaceArray = (arr: T[], replacement: T[]): void => { }; export const importInventory = (db: TInventoryDatabaseDocument, client: Partial): void => { - if (client.Suits) { - replaceArray(db.Suits, client.Suits.map(convertEquipment)); + for (const key of equipmentKeys) { + if (client[key]) { + replaceArray(db[key], client[key].map(convertEquipment)); + } } if (client.WeaponSkins) { replaceArray(db.WeaponSkins, client.WeaponSkins.map(convertWeaponSkin)); diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index edcdbe15..a68161e5 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -24,10 +24,10 @@ export interface IInventoryDatabase | "BlessingCooldown" | "Ships" | "WeaponSkins" - | "Suits" | "Upgrades" | "CrewShipSalvagedWeaponSkins" | "CrewShipWeaponSkins" + | TEquipmentKey > { accountOwnerId: Types.ObjectId; Created: Date; @@ -40,10 +40,23 @@ export interface IInventoryDatabase BlessingCooldown: Date; Ships: Types.ObjectId[]; WeaponSkins: IWeaponSkinDatabase[]; - Suits: IEquipmentDatabase[]; Upgrades: IUpgradeDatabase[]; CrewShipSalvagedWeaponSkins: IUpgradeDatabase[]; CrewShipWeaponSkins: IUpgradeDatabase[]; + + Suits: IEquipmentDatabase[]; + LongGuns: IEquipmentDatabase[]; + Pistols: IEquipmentDatabase[]; + Melee: IEquipmentDatabase[]; + SpecialItems: IEquipmentDatabase[]; + Sentinels: IEquipmentDatabase[]; + SentinelWeapons: IEquipmentDatabase[]; + SpaceSuits: IEquipmentDatabase[]; + SpaceGuns: IEquipmentDatabase[]; + SpaceMelee: IEquipmentDatabase[]; + Hoverboards: IEquipmentDatabase[]; + OperatorAmps: IEquipmentDatabase[]; + MoaPets: IEquipmentDatabase[]; } export interface IQuestKeyDatabase { @@ -136,6 +149,20 @@ export interface IDailyAffiliations { } export interface IInventoryClient extends IDailyAffiliations { + Suits: IEquipmentClient[]; + LongGuns: IEquipmentClient[]; + Pistols: IEquipmentClient[]; + Melee: IEquipmentClient[]; + SpecialItems: IEquipmentClient[]; + Sentinels: IEquipmentClient[]; + SentinelWeapons: IEquipmentClient[]; + SpaceSuits: IEquipmentClient[]; + SpaceGuns: IEquipmentClient[]; + SpaceMelee: IEquipmentClient[]; + Hoverboards: IEquipmentClient[]; + OperatorAmps: IEquipmentClient[]; + MoaPets: IEquipmentClient[]; + Horses: IEquipmentDatabase[]; DrifterMelee: IEquipmentDatabase[]; DrifterGuns: IEquipmentDatabase[]; @@ -172,10 +199,6 @@ export interface IInventoryClient extends IDailyAffiliations { ChallengeProgress: IChallengeProgress[]; RawUpgrades: IRawUpgrade[]; ReceivedStartingGear: boolean; - Suits: IEquipmentClient[]; - LongGuns: IEquipmentDatabase[]; - Pistols: IEquipmentDatabase[]; - Melee: IEquipmentDatabase[]; Ships: IShipInventory[]; QuestKeys: IQuestKeyResponse[]; FlavourItems: IFlavourItem[]; @@ -222,14 +245,9 @@ export interface IInventoryClient extends IDailyAffiliations { Affiliations: IAffiliation[]; QualifyingInvasions: any[]; FactionScores: number[]; - SpaceSuits: IEquipmentDatabase[]; - SpaceMelee: IEquipmentDatabase[]; - SpaceGuns: IEquipmentDatabase[]; ArchwingEnabled: boolean; PendingSpectreLoadouts?: ISpectreLoadout[]; SpectreLoadouts?: ISpectreLoadout[]; - SentinelWeapons: IEquipmentDatabase[]; - Sentinels: IEquipmentDatabase[]; EmailItems: ITypeCount[]; CompletedSyndicates: string[]; FocusXP: IFocusXP; @@ -246,13 +264,11 @@ export interface IInventoryClient extends IDailyAffiliations { CompletedJobs: ICompletedJob[]; FocusAbility: string; FocusUpgrades: IFocusUpgrade[]; - OperatorAmps: IEquipmentDatabase[]; HasContributedToDojo?: boolean; HWIDProtectEnabled?: boolean; KubrowPetPrints: IKubrowPetPrint[]; AlignmentReplay: IAlignment; PersonalGoalProgress: IPersonalGoalProgress[]; - SpecialItems: IEquipmentDatabase[]; ThemeStyle: string; ThemeBackground: string; ThemeSounds: string; @@ -261,12 +277,10 @@ export interface IInventoryClient extends IDailyAffiliations { LoginMilestoneRewards: string[]; OperatorLoadOuts: IOperatorConfigClient[]; RecentVendorPurchases: Array; - Hoverboards: IEquipmentDatabase[]; NodeIntrosCompleted: string[]; GuildId?: IOid; CompletedJobChains: ICompletedJobChain[]; SeasonChallengeHistory: ISeasonChallenge[]; - MoaPets: IEquipmentDatabase[]; EquippedInstrument?: string; InvasionChainProgress: IInvasionChainProgress[]; DataKnives: IEquipmentDatabase[]; -- 2.47.2 From 27a855cdb1bd3a214d32541f6ec09296e79523c2 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 05:16:40 +0100 Subject: [PATCH 14/41] import slots --- src/services/importService.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/services/importService.ts b/src/services/importService.ts index 8d0ae9bf..3333ed0b 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -4,6 +4,7 @@ import { IMongoDate } from "../types/commonTypes"; import { equipmentKeys, IInventoryClient, + ISlots, IUpgradeClient, IUpgradeDatabase, IWeaponSkinClient, @@ -55,6 +56,11 @@ const replaceArray = (arr: T[], replacement: T[]): void => { }); }; +const replaceSlots = (db: ISlots, client: ISlots): void => { + db.Extra = client.Extra; + db.Slots = client.Slots; +}; + export const importInventory = (db: TInventoryDatabaseDocument, client: Partial): void => { for (const key of equipmentKeys) { if (client[key]) { @@ -67,4 +73,22 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< if (client.Upgrades) { replaceArray(db.Upgrades, client.Upgrades.map(convertUpgrade)); } + for (const key of [ + "SuitBin", + "WeaponBin", + "SentinelBin", + "SpaceSuitBin", + "SpaceWeaponBin", + "PvpBonusLoadoutBin", + "PveBonusLoadoutBin", + "RandomModBin", + "MechBin", + "CrewMemberBin", + "OperatorAmpBin", + "CrewShipSalvageBin" + ] as const) { + if (client[key]) { + replaceSlots(db[key], client[key]); + } + } }; -- 2.47.2 From c8402ae497f21434e507375c11556e9bf99d6684 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 07:01:07 +0100 Subject: [PATCH 15/41] don't spoof owned weapon skins --- src/controllers/api/inventoryController.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 0b495ed6..b4e0035d 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -147,8 +147,9 @@ export const inventoryController: RequestHandler = async (request, response) => } if (config.unlockAllSkins) { - inventoryResponse.WeaponSkins = []; - for (const uniqueName in ExportCustoms) { + const missingWeaponSkins = new Set(Object.keys(ExportCustoms)); + inventoryResponse.WeaponSkins.forEach(x => missingWeaponSkins.delete(x.ItemType)); + for (const uniqueName of missingWeaponSkins) { inventoryResponse.WeaponSkins.push({ ItemId: { $oid: "ca70ca70ca70ca70" + catBreadHash(uniqueName).toString(16).padStart(8, "0") -- 2.47.2 From 2c77336e0c841607a3426d6c404632fb25efbf1f Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 07:09:59 +0100 Subject: [PATCH 16/41] import simple fields --- src/services/importService.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/services/importService.ts b/src/services/importService.ts index 3333ed0b..398d2835 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -91,4 +91,20 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< replaceSlots(db[key], client[key]); } } + for (const key of [ + "RegularCredits", + "PremiumCredits", + "PremiumCreditsFree", + "FusionPoints", + "PrimeTokens" + ] as const) { + if (client[key]) { + db[key] = client[key]; + } + } + for (const key of ["ThemeStyle", "ThemeBackground", "ThemeSounds", "EquippedInstrument"] as const) { + if (client[key]) { + db[key] = client[key]; + } + } }; -- 2.47.2 From 6d9c934619e27bf470a04b523142d42cfa8929b2 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 07:18:35 +0100 Subject: [PATCH 17/41] import operator/drifter loadouts --- src/models/inventoryModels/inventoryModel.ts | 5 ++--- src/services/importService.ts | 20 +++++++++++++++++++- src/types/inventoryTypes/inventoryTypes.ts | 7 ++++++- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 0f370860..b4b08d0b 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -62,7 +62,6 @@ import { IOperatorConfigDatabase, IPolarity, IEquipmentDatabase, - IOperatorConfigClient, IArchonCrystalUpgrade } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers"; @@ -1167,9 +1166,9 @@ type InventoryDocumentProps = { Upgrades: Types.DocumentArray; MiscItems: Types.DocumentArray; Boosters: Types.DocumentArray; - OperatorLoadOuts: Types.DocumentArray; + OperatorLoadOuts: Types.DocumentArray; SpecialItems: Types.DocumentArray; - AdultOperatorLoadOuts: Types.DocumentArray; //TODO: this should still contain _id + AdultOperatorLoadOuts: Types.DocumentArray; MechSuits: Types.DocumentArray; Scoops: Types.DocumentArray; DataKnives: Types.DocumentArray; diff --git a/src/services/importService.ts b/src/services/importService.ts index 398d2835..c4b67f77 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -1,5 +1,10 @@ import { Types } from "mongoose"; -import { IEquipmentClient, IEquipmentDatabase } from "../types/inventoryTypes/commonInventoryTypes"; +import { + IEquipmentClient, + IEquipmentDatabase, + IOperatorConfigClient, + IOperatorConfigDatabase +} from "../types/inventoryTypes/commonInventoryTypes"; import { IMongoDate } from "../types/commonTypes"; import { equipmentKeys, @@ -49,6 +54,14 @@ const convertUpgrade = (client: IUpgradeClient): IUpgradeDatabase => { }; }; +const convertOperatorConfig = (client: IOperatorConfigClient): IOperatorConfigDatabase => { + const { ItemId, ...rest } = client; + return { + ...rest, + _id: new Types.ObjectId(client.ItemId.$oid) + }; +}; + const replaceArray = (arr: T[], replacement: T[]): void => { arr.splice(0, arr.length); replacement.forEach(x => { @@ -73,6 +86,11 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< if (client.Upgrades) { replaceArray(db.Upgrades, client.Upgrades.map(convertUpgrade)); } + for (const key of ["OperatorLoadOuts", "AdultOperatorLoadOuts"] as const) { + if (client[key]) { + replaceArray(db[key], client[key].map(convertOperatorConfig)); + } + } for (const key of [ "SuitBin", "WeaponBin", diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index a68161e5..7b6a4271 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -8,7 +8,8 @@ import { IOperatorConfigClient, IEquipmentSelection, IEquipmentDatabase, - IEquipmentClient + IEquipmentClient, + IOperatorConfigDatabase } from "@/src/types/inventoryTypes/commonInventoryTypes"; export interface IInventoryDatabase @@ -27,6 +28,8 @@ export interface IInventoryDatabase | "Upgrades" | "CrewShipSalvagedWeaponSkins" | "CrewShipWeaponSkins" + | "OperatorLoadOuts" + | "AdultOperatorLoadOuts" | TEquipmentKey > { accountOwnerId: Types.ObjectId; @@ -43,6 +46,8 @@ export interface IInventoryDatabase Upgrades: IUpgradeDatabase[]; CrewShipSalvagedWeaponSkins: IUpgradeDatabase[]; CrewShipWeaponSkins: IUpgradeDatabase[]; + OperatorLoadOuts: IOperatorConfigDatabase[]; + AdultOperatorLoadOuts: IOperatorConfigDatabase[]; Suits: IEquipmentDatabase[]; LongGuns: IEquipmentDatabase[]; -- 2.47.2 From 8e7d4382f23f717ecb697c1683e4dd5d1af40332 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 07:30:34 +0100 Subject: [PATCH 18/41] improve handling of avionics in webui --- src/controllers/custom/getItemListsController.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/controllers/custom/getItemListsController.ts b/src/controllers/custom/getItemListsController.ts index 5033d492..04f2c746 100644 --- a/src/controllers/custom/getItemListsController.ts +++ b/src/controllers/custom/getItemListsController.ts @@ -2,6 +2,7 @@ import { RequestHandler } from "express"; import { getDict, getItemName, getString } from "@/src/services/itemDataService"; import { ExportArcanes, + ExportAvionics, ExportGear, ExportRecipes, ExportResources, @@ -137,6 +138,13 @@ const getItemListsController: RequestHandler = (req, response) => { badItems[uniqueName] = true; } } + for (const [uniqueName, upgrade] of Object.entries(ExportAvionics)) { + res.mods.push({ + uniqueName, + name: getString(upgrade.name, lang), + fusionLimit: upgrade.fusionLimit + }); + } for (const [uniqueName, arcane] of Object.entries(ExportArcanes)) { res.mods.push({ uniqueName, -- 2.47.2 From ae12d1e0370a78cb1c9dd5ecbe3c52d0d4bed7d4 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 07:36:43 +0100 Subject: [PATCH 19/41] improve appearance of kuva lich weapons in webui --- static/webui/script.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/static/webui/script.js b/static/webui/script.js index e3e08186..3c4ddce5 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -215,7 +215,12 @@ function updateInventory() { const td = document.createElement("td"); td.textContent = itemMap[item.ItemType]?.name ?? item.ItemType; if (item.ItemName) { - td.textContent = item.ItemName + " (" + td.textContent + ")"; + const pipeIndex = item.ItemName.indexOf("|"); + if (pipeIndex != -1) { + td.textContent = item.ItemName.substr(1 + pipeIndex) + " " + td.textContent; + } else { + td.textContent = item.ItemName + " (" + td.textContent + ")"; + } } if (item.ModularParts && item.ModularParts.length) { td.textContent += " ["; @@ -1092,7 +1097,7 @@ function doImport() { data: JSON.stringify({ inventory: JSON.parse($("#import-inventory").val()) }) - }).then(function() { + }).then(function () { updateInventory(); }); }); -- 2.47.2 From 8b058c01a537ced8e6b6f7cfa6b5c13ee475047f Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 07:50:51 +0100 Subject: [PATCH 20/41] import RawUpgrades & MiscItems --- src/services/importService.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/services/importService.ts b/src/services/importService.ts index c4b67f77..49b1bfef 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -86,6 +86,17 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< if (client.Upgrades) { replaceArray(db.Upgrades, client.Upgrades.map(convertUpgrade)); } + for (const key of ["RawUpgrades", "MiscItems"] as const) { + if (client[key]) { + db[key].splice(0, db[key].length); + client[key].forEach(x => { + db[key].push({ + ItemType: x.ItemType, + ItemCount: x.ItemCount + }); + }); + } + } for (const key of ["OperatorLoadOuts", "AdultOperatorLoadOuts"] as const) { if (client[key]) { replaceArray(db[key], client[key].map(convertOperatorConfig)); -- 2.47.2 From 9c5310e418e1dd626d5cb8aed752180eed7fec00 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 08:07:40 +0100 Subject: [PATCH 21/41] remove duplicate getLoadout --- src/controllers/api/getShipController.ts | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/controllers/api/getShipController.ts b/src/controllers/api/getShipController.ts index 3ce7a6c3..10f6e25f 100644 --- a/src/controllers/api/getShipController.ts +++ b/src/controllers/api/getShipController.ts @@ -4,10 +4,10 @@ import allShipFeatures from "@/static/fixed_responses/allShipFeatures.json"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { getPersonalRooms } from "@/src/services/personalRoomsService"; import { getShip } from "@/src/services/shipService"; -import { Loadout } from "@/src/models/inventoryModels/loadoutModel"; import { toOid } from "@/src/helpers/inventoryHelpers"; import { IGetShipResponse } from "@/src/types/shipTypes"; import { IPersonalRooms } from "@/src/types/personalRoomsTypes"; +import { getLoadout } from "@/src/services/loadoutService"; export const getShipController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); @@ -38,13 +38,3 @@ export const getShipController: RequestHandler = async (req, res) => { res.json(getShipResponse); }; - -export const getLoadout = async (accountId: string) => { - const loadout = await Loadout.findOne({ loadoutOwnerId: accountId }); - - if (!loadout) { - throw new Error(`loadout not found for account ${accountId}`); - } - - return loadout; -}; -- 2.47.2 From af065c592820f51bd169cead68c186a8bd92844b Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 08:09:34 +0100 Subject: [PATCH 22/41] import loadout presets --- src/controllers/custom/importController.ts | 13 +++++++++-- src/services/importService.ts | 25 ++++++++++++++++++++++ src/types/inventoryTypes/inventoryTypes.ts | 5 +++-- src/types/saveLoadoutTypes.ts | 23 ++++++++++---------- 4 files changed, 51 insertions(+), 15 deletions(-) diff --git a/src/controllers/custom/importController.ts b/src/controllers/custom/importController.ts index 7f37979b..8c5f8c04 100644 --- a/src/controllers/custom/importController.ts +++ b/src/controllers/custom/importController.ts @@ -1,15 +1,24 @@ -import { importInventory } from "@/src/services/importService"; +import { importInventory, importLoadOutPresets } from "@/src/services/importService"; import { getInventory } from "@/src/services/inventoryService"; +import { getLoadout } from "@/src/services/loadoutService"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { IInventoryClient } from "@/src/types/inventoryTypes/inventoryTypes"; import { RequestHandler } from "express"; export const importController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); - const inventory = await getInventory(accountId); const request = JSON.parse(String(req.body)) as IImportRequest; + + const inventory = await getInventory(accountId); importInventory(inventory, request.inventory); await inventory.save(); + + if (request.inventory.LoadOutPresets) { + const loadout = await getLoadout(accountId); + importLoadOutPresets(loadout, request.inventory.LoadOutPresets); + await loadout.save(); + } + res.end(); }; diff --git a/src/services/importService.ts b/src/services/importService.ts index 49b1bfef..4679372d 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -9,6 +9,8 @@ import { IMongoDate } from "../types/commonTypes"; import { equipmentKeys, IInventoryClient, + ILoadoutConfigClient, + ILoadOutPresets, ISlots, IUpgradeClient, IUpgradeDatabase, @@ -16,6 +18,7 @@ import { IWeaponSkinDatabase } from "../types/inventoryTypes/inventoryTypes"; import { TInventoryDatabaseDocument } from "../models/inventoryModels/inventoryModel"; +import { ILoadoutConfigDatabase, ILoadoutDatabase } from "../types/saveLoadoutTypes"; /* eslint-disable @typescript-eslint/no-unused-vars */ @@ -137,3 +140,25 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< } } }; + +const convertLoadOutConfig = (client: ILoadoutConfigClient): ILoadoutConfigDatabase => { + const { ItemId, ...rest } = client; + return { + ...rest, + _id: new Types.ObjectId(client.ItemId.$oid) + }; +}; + +export const importLoadOutPresets = (db: ILoadoutDatabase, client: ILoadOutPresets): void => { + db.NORMAL = client.NORMAL.map(convertLoadOutConfig); + db.SENTINEL = client.SENTINEL.map(convertLoadOutConfig); + db.ARCHWING = client.ARCHWING.map(convertLoadOutConfig); + db.NORMAL_PVP = client.NORMAL_PVP.map(convertLoadOutConfig); + db.LUNARO = client.LUNARO.map(convertLoadOutConfig); + db.OPERATOR = client.OPERATOR.map(convertLoadOutConfig); + db.KDRIVE = client.KDRIVE.map(convertLoadOutConfig); + db.DATAKNIFE = client.DATAKNIFE.map(convertLoadOutConfig); + db.MECH = client.MECH.map(convertLoadOutConfig); + db.OPERATOR_ADULT = client.OPERATOR_ADULT.map(convertLoadOutConfig); + db.DRIFTER = client.DRIFTER.map(convertLoadOutConfig); +}; diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 7b6a4271..f78addad 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -210,7 +210,7 @@ export interface IInventoryClient extends IDailyAffiliations { Scoops: IEquipmentDatabase[]; TrainingRetriesLeft: number; LoadOutPresets: ILoadOutPresets; - CurrentLoadOutIds: Array; + CurrentLoadOutIds: IOid[]; // we store it in the database using this representation as well :/ Missions: IMission[]; RandomUpgradesIdentified?: number; LastRegionPlayed: TSolarMapRegion; @@ -667,7 +667,7 @@ export interface ILibraryPersonalProgress { Completed: boolean; } -//this needs to be checked against ILoadoutDatabase +// keep in sync with ILoadoutDatabase export interface ILoadOutPresets { NORMAL: ILoadoutConfigClient[]; NORMAL_PVP: ILoadoutConfigClient[]; @@ -680,6 +680,7 @@ export interface ILoadOutPresets { DATAKNIFE: ILoadoutConfigClient[]; MECH: ILoadoutConfigClient[]; OPERATOR_ADULT: ILoadoutConfigClient[]; + DRIFTER: ILoadoutConfigClient[]; } export enum FocusSchool { diff --git a/src/types/saveLoadoutTypes.ts b/src/types/saveLoadoutTypes.ts index b7c5b1e1..cd32b5c1 100644 --- a/src/types/saveLoadoutTypes.ts +++ b/src/types/saveLoadoutTypes.ts @@ -54,18 +54,19 @@ export interface IConfigEntry { export interface ILoadoutClient extends Omit {} +// keep in sync with ILoadOutPresets export interface ILoadoutDatabase { - NORMAL: ILoadoutEntry; - SENTINEL: ILoadoutEntry; - ARCHWING: ILoadoutEntry; - NORMAL_PVP: ILoadoutEntry; - LUNARO: ILoadoutEntry; - OPERATOR: ILoadoutEntry; - KDRIVE: ILoadoutEntry; - DATAKNIFE: ILoadoutEntry; - MECH: ILoadoutEntry; - OPERATOR_ADULT: ILoadoutEntry; - DRIFTER: ILoadoutEntry; + NORMAL: ILoadoutConfigDatabase[]; + SENTINEL: ILoadoutConfigDatabase[]; + ARCHWING: ILoadoutConfigDatabase[]; + NORMAL_PVP: ILoadoutConfigDatabase[]; + LUNARO: ILoadoutConfigDatabase[]; + OPERATOR: ILoadoutConfigDatabase[]; + KDRIVE: ILoadoutConfigDatabase[]; + DATAKNIFE: ILoadoutConfigDatabase[]; + MECH: ILoadoutConfigDatabase[]; + OPERATOR_ADULT: ILoadoutConfigDatabase[]; + DRIFTER: ILoadoutConfigDatabase[]; _id: Types.ObjectId; loadoutOwnerId: Types.ObjectId; } -- 2.47.2 From 103104cdbcc178c9d88f3b92c9cb2cb0e28c4dd7 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 08:13:57 +0100 Subject: [PATCH 23/41] narrow eslint-disable --- src/services/importService.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/services/importService.ts b/src/services/importService.ts index 4679372d..70f35a1a 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -20,8 +20,6 @@ import { import { TInventoryDatabaseDocument } from "../models/inventoryModels/inventoryModel"; import { ILoadoutConfigDatabase, ILoadoutDatabase } from "../types/saveLoadoutTypes"; -/* eslint-disable @typescript-eslint/no-unused-vars */ - const convertDate = (value: IMongoDate): Date => { return new Date(parseInt(value.$date.$numberLong)); }; @@ -31,6 +29,7 @@ const convertOptionalDate = (value: IMongoDate | undefined): Date | undefined => }; const convertEquipment = (client: IEquipmentClient): IEquipmentDatabase => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars const { ItemId, ...rest } = client; return { ...rest, @@ -42,6 +41,7 @@ const convertEquipment = (client: IEquipmentClient): IEquipmentDatabase => { }; const convertWeaponSkin = (client: IWeaponSkinClient): IWeaponSkinDatabase => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars const { ItemId, ...rest } = client; return { ...rest, @@ -50,6 +50,7 @@ const convertWeaponSkin = (client: IWeaponSkinClient): IWeaponSkinDatabase => { }; const convertUpgrade = (client: IUpgradeClient): IUpgradeDatabase => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars const { ItemId, ...rest } = client; return { ...rest, @@ -58,6 +59,7 @@ const convertUpgrade = (client: IUpgradeClient): IUpgradeDatabase => { }; const convertOperatorConfig = (client: IOperatorConfigClient): IOperatorConfigDatabase => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars const { ItemId, ...rest } = client; return { ...rest, @@ -142,6 +144,7 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< }; const convertLoadOutConfig = (client: ILoadoutConfigClient): ILoadoutConfigDatabase => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars const { ItemId, ...rest } = client; return { ...rest, -- 2.47.2 From 04955c094e04239bb14d398b11b84be5d6023cb7 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 08:20:06 +0100 Subject: [PATCH 24/41] separate InfestedFoundry client & database structs --- src/controllers/api/infestedFoundryController.ts | 4 ++-- src/controllers/api/upgradesController.ts | 4 ++-- src/models/inventoryModels/inventoryModel.ts | 4 ++-- src/types/inventoryTypes/inventoryTypes.ts | 12 ++++++++++-- src/types/purchaseTypes.ts | 6 +++--- 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/controllers/api/infestedFoundryController.ts b/src/controllers/api/infestedFoundryController.ts index f7567b01..166cafc1 100644 --- a/src/controllers/api/infestedFoundryController.ts +++ b/src/controllers/api/infestedFoundryController.ts @@ -6,7 +6,7 @@ import { IOid } from "@/src/types/commonTypes"; import { IConsumedSuit, IHelminthFoodRecord, - IInfestedFoundry, + IInfestedFoundryDatabase, IMiscItem, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; @@ -356,7 +356,7 @@ interface IHelminthFeedRequest { }[]; } -export const addInfestedFoundryXP = (infestedFoundry: IInfestedFoundry, delta: number): ITypeCount[] => { +export const addInfestedFoundryXP = (infestedFoundry: IInfestedFoundryDatabase, delta: number): ITypeCount[] => { const recipeChanges: ITypeCount[] = []; infestedFoundry.XP ??= 0; const prevXP = infestedFoundry.XP; diff --git a/src/controllers/api/upgradesController.ts b/src/controllers/api/upgradesController.ts index bbfd2992..d295a462 100644 --- a/src/controllers/api/upgradesController.ts +++ b/src/controllers/api/upgradesController.ts @@ -6,7 +6,7 @@ import { EquipmentFeatures, IAbilityOverride } from "@/src/types/inventoryTypes/commonInventoryTypes"; -import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IInventoryClient, IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { addMiscItems, addRecipes, getInventory, updateCurrency } from "@/src/services/inventoryService"; import { getRecipeByResult } from "@/src/services/itemDataService"; @@ -62,7 +62,7 @@ export const upgradesController: RequestHandler = async (req, res) => { addRecipes(inventory, recipeChanges); inventoryChanges.Recipes = recipeChanges; - inventoryChanges.InfestedFoundry = inventory.toJSON().InfestedFoundry; + inventoryChanges.InfestedFoundry = inventory.toJSON().InfestedFoundry; } else switch (operation.UpgradeRequirement) { case "/Lotus/Types/Items/MiscItems/OrokinReactor": diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index b4b08d0b..4d21729f 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -23,7 +23,7 @@ import { ISeasonChallenge, IPlayerSkills, ISettings, - IInfestedFoundry, + IInfestedFoundryDatabase, IHelminthResource, IConsumedSuit, IQuestProgress, @@ -492,7 +492,7 @@ const helminthResourceSchema = new Schema( { _id: false } ); -const infestedFoundrySchema = new Schema( +const infestedFoundrySchema = new Schema( { Name: String, Resources: { type: [helminthResourceSchema], default: undefined }, diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index f78addad..44c41dab 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -30,6 +30,7 @@ export interface IInventoryDatabase | "CrewShipWeaponSkins" | "OperatorLoadOuts" | "AdultOperatorLoadOuts" + | "InfestedFoundry" | TEquipmentKey > { accountOwnerId: Types.ObjectId; @@ -48,6 +49,7 @@ export interface IInventoryDatabase CrewShipWeaponSkins: IUpgradeDatabase[]; OperatorLoadOuts: IOperatorConfigDatabase[]; AdultOperatorLoadOuts: IOperatorConfigDatabase[]; + InfestedFoundry?: IInfestedFoundryDatabase; Suits: IEquipmentDatabase[]; LongGuns: IEquipmentDatabase[]; @@ -305,7 +307,7 @@ export interface IInventoryClient extends IDailyAffiliations { PlayedParkourTutorial: boolean; SubscribedToEmailsPersonalized: number; MechSuits: IEquipmentDatabase[]; - InfestedFoundry?: IInfestedFoundry; + InfestedFoundry?: IInfestedFoundryClient; BlessingCooldown: IMongoDate; CrewShipHarnesses: IEquipmentDatabase[]; CrewShipRawSalvage: IConsumable[]; @@ -566,7 +568,7 @@ export interface IHelminthResource { RecentlyConvertedResources?: IHelminthFoodRecord[]; } -export interface IInfestedFoundry { +export interface IInfestedFoundryClient { Name?: string; Resources?: IHelminthResource[]; Slots?: number; @@ -575,6 +577,12 @@ export interface IInfestedFoundry { InvigorationIndex?: number; InvigorationSuitOfferings?: string[]; InvigorationsApplied?: number; + LastConsumedSuit?: IEquipmentClient; + AbilityOverrideUnlockCooldown?: IMongoDate; +} + +export interface IInfestedFoundryDatabase + extends Omit { LastConsumedSuit?: IEquipmentDatabase; AbilityOverrideUnlockCooldown?: Date; } diff --git a/src/types/purchaseTypes.ts b/src/types/purchaseTypes.ts index 2aca5212..e8f6d090 100644 --- a/src/types/purchaseTypes.ts +++ b/src/types/purchaseTypes.ts @@ -1,4 +1,4 @@ -import { IInfestedFoundry } from "./inventoryTypes/inventoryTypes"; +import { IInfestedFoundryClient } from "./inventoryTypes/inventoryTypes"; export interface IPurchaseRequest { PurchaseParams: IPurchaseParams; @@ -29,9 +29,9 @@ export interface ICurrencyChanges { export type IInventoryChanges = { [_ in SlotNames]?: IBinChanges; -} & ICurrencyChanges & { InfestedFoundry?: IInfestedFoundry } & Record< +} & ICurrencyChanges & { InfestedFoundry?: IInfestedFoundryClient } & Record< string, - IBinChanges | number | object[] | IInfestedFoundry + IBinChanges | number | object[] | IInfestedFoundryClient >; export interface IPurchaseResponse { -- 2.47.2 From 3fa6fa7ffec3b324c6328ff5e36100012390cd04 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 08:24:59 +0100 Subject: [PATCH 25/41] these don't have to be unused --- src/services/importService.ts | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/services/importService.ts b/src/services/importService.ts index 70f35a1a..7909e5c4 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -29,11 +29,10 @@ const convertOptionalDate = (value: IMongoDate | undefined): Date | undefined => }; const convertEquipment = (client: IEquipmentClient): IEquipmentDatabase => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars const { ItemId, ...rest } = client; return { ...rest, - _id: new Types.ObjectId(client.ItemId.$oid), + _id: new Types.ObjectId(ItemId.$oid), InfestationDate: convertOptionalDate(client.InfestationDate), Expiry: convertOptionalDate(client.Expiry), UpgradesExpiry: convertOptionalDate(client.UpgradesExpiry) @@ -41,29 +40,26 @@ const convertEquipment = (client: IEquipmentClient): IEquipmentDatabase => { }; const convertWeaponSkin = (client: IWeaponSkinClient): IWeaponSkinDatabase => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars const { ItemId, ...rest } = client; return { ...rest, - _id: new Types.ObjectId(client.ItemId.$oid) + _id: new Types.ObjectId(ItemId.$oid) }; }; const convertUpgrade = (client: IUpgradeClient): IUpgradeDatabase => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars const { ItemId, ...rest } = client; return { ...rest, - _id: new Types.ObjectId(client.ItemId.$oid) + _id: new Types.ObjectId(ItemId.$oid) }; }; const convertOperatorConfig = (client: IOperatorConfigClient): IOperatorConfigDatabase => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars const { ItemId, ...rest } = client; return { ...rest, - _id: new Types.ObjectId(client.ItemId.$oid) + _id: new Types.ObjectId(ItemId.$oid) }; }; @@ -144,11 +140,10 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< }; const convertLoadOutConfig = (client: ILoadoutConfigClient): ILoadoutConfigDatabase => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars const { ItemId, ...rest } = client; return { ...rest, - _id: new Types.ObjectId(client.ItemId.$oid) + _id: new Types.ObjectId(ItemId.$oid) }; }; -- 2.47.2 From eb039fe9694444604a4281e80be0a2542dd91ac2 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 08:26:33 +0100 Subject: [PATCH 26/41] import InfestedFoundry --- src/services/importService.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/services/importService.ts b/src/services/importService.ts index 7909e5c4..037a9eb6 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -8,6 +8,8 @@ import { import { IMongoDate } from "../types/commonTypes"; import { equipmentKeys, + IInfestedFoundryClient, + IInfestedFoundryDatabase, IInventoryClient, ILoadoutConfigClient, ILoadOutPresets, @@ -75,6 +77,14 @@ const replaceSlots = (db: ISlots, client: ISlots): void => { db.Slots = client.Slots; }; +const convertInfestedFoundry = (client: IInfestedFoundryClient): IInfestedFoundryDatabase => { + return { + ...client, + LastConsumedSuit: client.LastConsumedSuit ? convertEquipment(client.LastConsumedSuit) : undefined, + AbilityOverrideUnlockCooldown: convertOptionalDate(client.AbilityOverrideUnlockCooldown) + }; +}; + export const importInventory = (db: TInventoryDatabaseDocument, client: Partial): void => { for (const key of equipmentKeys) { if (client[key]) { @@ -137,6 +147,9 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< db[key] = client[key]; } } + if (client.InfestedFoundry) { + db.InfestedFoundry = convertInfestedFoundry(client.InfestedFoundry); + } }; const convertLoadOutConfig = (client: ILoadoutConfigClient): ILoadoutConfigDatabase => { -- 2.47.2 From 58156b04577ae7f9786ab215ded654ca554afd53 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 08:32:39 +0100 Subject: [PATCH 27/41] import DialogueHistory --- src/services/importService.ts | 24 ++++++++++++++++++++++ src/types/inventoryTypes/inventoryTypes.ts | 4 +++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/services/importService.ts b/src/services/importService.ts index 037a9eb6..803e0ab2 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -8,6 +8,10 @@ import { import { IMongoDate } from "../types/commonTypes"; import { equipmentKeys, + IDialogueClient, + IDialogueDatabase, + IDialogueHistoryClient, + IDialogueHistoryDatabase, IInfestedFoundryClient, IInfestedFoundryDatabase, IInventoryClient, @@ -85,6 +89,23 @@ const convertInfestedFoundry = (client: IInfestedFoundryClient): IInfestedFoundr }; }; +const convertDialogue = (client: IDialogueClient): IDialogueDatabase => { + return { + ...client, + AvailableDate: convertDate(client.AvailableDate), + AvailableGiftDate: convertDate(client.AvailableGiftDate), + RankUpExpiry: convertDate(client.RankUpExpiry), + BountyChemExpiry: convertDate(client.BountyChemExpiry) + }; +}; + +const convertDialogueHistory = (client: IDialogueHistoryClient): IDialogueHistoryDatabase => { + return { + YearIteration: client.YearIteration, + Dialogues: client.Dialogues ? client.Dialogues.map(convertDialogue) : undefined + }; +}; + export const importInventory = (db: TInventoryDatabaseDocument, client: Partial): void => { for (const key of equipmentKeys) { if (client[key]) { @@ -150,6 +171,9 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< if (client.InfestedFoundry) { db.InfestedFoundry = convertInfestedFoundry(client.InfestedFoundry); } + if (client.DialogueHistory) { + db.DialogueHistory = convertDialogueHistory(client.DialogueHistory); + } }; const convertLoadOutConfig = (client: ILoadoutConfigClient): ILoadoutConfigDatabase => { diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 44c41dab..9d5e10c8 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -31,6 +31,7 @@ export interface IInventoryDatabase | "OperatorLoadOuts" | "AdultOperatorLoadOuts" | "InfestedFoundry" + | "DialogueHistory" | TEquipmentKey > { accountOwnerId: Types.ObjectId; @@ -50,6 +51,7 @@ export interface IInventoryDatabase OperatorLoadOuts: IOperatorConfigDatabase[]; AdultOperatorLoadOuts: IOperatorConfigDatabase[]; InfestedFoundry?: IInfestedFoundryDatabase; + DialogueHistory?: IDialogueHistoryDatabase; Suits: IEquipmentDatabase[]; LongGuns: IEquipmentDatabase[]; @@ -334,7 +336,7 @@ export interface IInventoryClient extends IDailyAffiliations { Harvestable: boolean; DeathSquadable: boolean; EndlessXP?: IEndlessXpProgress[]; - DialogueHistory?: IDialogueHistoryDatabase; + DialogueHistory?: IDialogueHistoryClient; } export interface IAffiliation { -- 2.47.2 From e910f2752ffdd9a92bb76b8e8c1074f85b51d9b5 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 08:53:21 +0100 Subject: [PATCH 28/41] import CurrentLoadOutIds --- src/services/importService.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/services/importService.ts b/src/services/importService.ts index 803e0ab2..33cc2b7c 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -168,6 +168,9 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< db[key] = client[key]; } } + if (client.CurrentLoadOutIds) { + db.CurrentLoadOutIds = client.CurrentLoadOutIds; + } if (client.InfestedFoundry) { db.InfestedFoundry = convertInfestedFoundry(client.InfestedFoundry); } -- 2.47.2 From b34caf73beaabbfa35c61883c5a3f055e34fada3 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 08:54:37 +0100 Subject: [PATCH 29/41] notify after import --- static/webui/script.js | 1 + 1 file changed, 1 insertion(+) diff --git a/static/webui/script.js b/static/webui/script.js index 3c4ddce5..9e0d970e 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -1098,6 +1098,7 @@ function doImport() { inventory: JSON.parse($("#import-inventory").val()) }) }).then(function () { + alert("Successfully imported."); updateInventory(); }); }); -- 2.47.2 From 0d7cfedf3a6a4f235040a3168f655d19dbe1c990 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 08:59:45 +0100 Subject: [PATCH 30/41] import UseAdultOperatorLoadout --- src/services/importService.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/services/importService.ts b/src/services/importService.ts index 33cc2b7c..41b349fe 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -152,6 +152,9 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< replaceSlots(db[key], client[key]); } } + if (client.UseAdultOperatorLoadout) { + db.UseAdultOperatorLoadout = client.UseAdultOperatorLoadout; + } for (const key of [ "RegularCredits", "PremiumCredits", -- 2.47.2 From b0f6beee7d1ba7b21c4a5cdab843c093c74cb168 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 09:21:31 +0100 Subject: [PATCH 31/41] import PlayerLevel --- src/services/importService.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/services/importService.ts b/src/services/importService.ts index 41b349fe..56fee422 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -156,6 +156,7 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< db.UseAdultOperatorLoadout = client.UseAdultOperatorLoadout; } for (const key of [ + "PlayerLevel", "RegularCredits", "PremiumCredits", "PremiumCreditsFree", -- 2.47.2 From 2baeae4b06d6771a9dc5019c9667bcc24250384f Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 09:44:17 +0100 Subject: [PATCH 32/41] EquippedGear & EquippedEmotes --- src/services/importService.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/services/importService.ts b/src/services/importService.ts index 56fee422..fc987e23 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -172,6 +172,11 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< db[key] = client[key]; } } + for (const key of ["EquippedGear", "EquippedEmotes"] as const) { + if (client[key]) { + db[key] = client[key]; + } + } if (client.CurrentLoadOutIds) { db.CurrentLoadOutIds = client.CurrentLoadOutIds; } -- 2.47.2 From 4a78999aec21c98e711ab4799fb17fcb8f9dd868 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 09:44:58 +0100 Subject: [PATCH 33/41] Affiliations --- src/services/importService.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/services/importService.ts b/src/services/importService.ts index fc987e23..514868ad 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -180,6 +180,9 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< if (client.CurrentLoadOutIds) { db.CurrentLoadOutIds = client.CurrentLoadOutIds; } + if (client.Affiliations) { + db.Affiliations = client.Affiliations; + } if (client.InfestedFoundry) { db.InfestedFoundry = convertInfestedFoundry(client.InfestedFoundry); } -- 2.47.2 From fee4ff688a0e376b3ad256f6fe3d6728ca65b7b4 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 09:45:27 +0100 Subject: [PATCH 34/41] NodeIntrosCompleted --- src/services/importService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/importService.ts b/src/services/importService.ts index 514868ad..53c26d82 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -172,7 +172,7 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< db[key] = client[key]; } } - for (const key of ["EquippedGear", "EquippedEmotes"] as const) { + for (const key of ["EquippedGear", "EquippedEmotes", "NodeIntrosCompleted"] as const) { if (client[key]) { db[key] = client[key]; } -- 2.47.2 From 6c2e15aa6846aeb1989b35f5911f255fb4f5bc1e Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 09:45:46 +0100 Subject: [PATCH 35/41] FocusAbility --- src/services/importService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/importService.ts b/src/services/importService.ts index 53c26d82..b27275d7 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -167,7 +167,7 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< db[key] = client[key]; } } - for (const key of ["ThemeStyle", "ThemeBackground", "ThemeSounds", "EquippedInstrument"] as const) { + for (const key of ["ThemeStyle", "ThemeBackground", "ThemeSounds", "EquippedInstrument", "FocusAbility"] as const) { if (client[key]) { db[key] = client[key]; } -- 2.47.2 From f27ef27be5b69370b2b984b635224fe8b757ebd1 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 09:46:50 +0100 Subject: [PATCH 36/41] remove duplicate FocusUpgrade struct --- src/models/inventoryModels/inventoryModel.ts | 6 +++--- src/types/inventoryTypes/inventoryTypes.ts | 6 ------ 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 4d21729f..d6bdae51 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -13,7 +13,7 @@ import { IPendingRecipeResponse, ITypeCount, IFocusXP, - IFocusUpgrades, + IFocusUpgrade, ITypeXPItem, IChallengeProgress, IStepSequencer, @@ -80,7 +80,7 @@ const focusXPSchema = new Schema( { _id: false } ); -const focusUpgradesSchema = new Schema( +const focusUpgradeSchema = new Schema( { ItemType: String, Level: Number, @@ -836,7 +836,7 @@ const inventorySchema = new Schema( //Curent active like Active school focuses is = "Zenurik" FocusAbility: String, //The treeways of the Focus school.(Active and passive Ability) - FocusUpgrades: [focusUpgradesSchema], + FocusUpgrades: [focusUpgradeSchema], //Achievement ChallengeProgress: [challengeProgressSchema], diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 9d5e10c8..f2181474 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -77,12 +77,6 @@ export interface IQuestKeyDatabase { CompletionDate?: Date; } -export interface IFocusUpgrades { - ItemType: string; - Level: number; - IsUniversal: boolean; -} - export interface ITypeCount { ItemType: string; ItemCount: number; -- 2.47.2 From 9d25302ffe84af8e5669199a3ce9b91ee0e780e5 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 09:49:35 +0100 Subject: [PATCH 37/41] import FocusUpgrades --- src/services/importService.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/services/importService.ts b/src/services/importService.ts index b27275d7..8e3e1c80 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -183,6 +183,9 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< if (client.Affiliations) { db.Affiliations = client.Affiliations; } + if (client.FocusUpgrades) { + db.FocusUpgrades = client.FocusUpgrades; + } if (client.InfestedFoundry) { db.InfestedFoundry = convertInfestedFoundry(client.InfestedFoundry); } -- 2.47.2 From 48a8ea79dab77d917cc5bcb7ae7528c1ebc7379b Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 09:50:25 +0100 Subject: [PATCH 38/41] import FusionTreasures --- src/services/importService.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/services/importService.ts b/src/services/importService.ts index 8e3e1c80..6a576a01 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -183,6 +183,9 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< if (client.Affiliations) { db.Affiliations = client.Affiliations; } + if (client.FusionTreasures) { + db.FusionTreasures = client.FusionTreasures; + } if (client.FocusUpgrades) { db.FocusUpgrades = client.FocusUpgrades; } -- 2.47.2 From fe9509b7f47e6a98caf6657a1075aba2772fcc56 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 09:50:51 +0100 Subject: [PATCH 39/41] import XPInfo --- src/services/importService.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/services/importService.ts b/src/services/importService.ts index 6a576a01..c9d2f6ee 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -177,6 +177,9 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< db[key] = client[key]; } } + if (client.XPInfo) { + db.XPInfo = client.XPInfo; + } if (client.CurrentLoadOutIds) { db.CurrentLoadOutIds = client.CurrentLoadOutIds; } -- 2.47.2 From c31b283809323ceb2c623f725ab7644d3e1854c3 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 09:58:06 +0100 Subject: [PATCH 40/41] import CrewShips --- src/models/inventoryModels/inventoryModel.ts | 8 +++---- src/services/importService.ts | 24 ++++++++++++++++++++ src/types/inventoryTypes/inventoryTypes.ts | 10 ++++++-- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index d6bdae51..ef7401ed 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -42,7 +42,6 @@ import { ICrewShipCustomization, ICrewShipWeapon, ICrewShipMembersClient, - ICrewShip, ICrewShipPilotWeapon, IShipExterior, IHelminthFoodRecord, @@ -52,7 +51,8 @@ import { IDialogueGift, ICompletedDialogue, IDialogueClient, - IUpgradeDatabase + IUpgradeDatabase, + ICrewShipDatabase } from "../../types/inventoryTypes/inventoryTypes"; import { IOid } from "../../types/commonTypes"; import { @@ -694,7 +694,7 @@ crewShipMembersSchema.set("toJSON", { } }); -const crewShipSchema = new Schema({ +const crewShipSchema = new Schema({ ItemType: { type: String, required: true }, Configs: { type: [ItemConfigSchema], default: [] }, Weapon: { type: crewShipWeaponSchema, default: undefined }, @@ -1184,7 +1184,7 @@ type InventoryDocumentProps = { Hoverboards: Types.DocumentArray; MoaPets: Types.DocumentArray; WeaponSkins: Types.DocumentArray; - CrewShips: Types.DocumentArray; + CrewShips: Types.DocumentArray; CrewShipHarnesses: Types.DocumentArray; }; diff --git a/src/services/importService.ts b/src/services/importService.ts index c9d2f6ee..91857653 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -8,6 +8,10 @@ import { import { IMongoDate } from "../types/commonTypes"; import { equipmentKeys, + ICrewShipClient, + ICrewShipDatabase, + ICrewShipMembersClient, + ICrewShipMembersDatabase, IDialogueClient, IDialogueDatabase, IDialogueHistoryClient, @@ -81,6 +85,23 @@ const replaceSlots = (db: ISlots, client: ISlots): void => { db.Slots = client.Slots; }; +const convertCrewShipMembers = (client: ICrewShipMembersClient): ICrewShipMembersDatabase => { + return { + SLOT_A: client.SLOT_A ? new Types.ObjectId(client.SLOT_A.ItemId.$oid) : undefined, + SLOT_B: client.SLOT_B ? new Types.ObjectId(client.SLOT_B.ItemId.$oid) : undefined, + SLOT_C: client.SLOT_C ? new Types.ObjectId(client.SLOT_C.ItemId.$oid) : undefined + }; +}; + +const convertCrewShip = (client: ICrewShipClient): ICrewShipDatabase => { + const { ItemId, ...rest } = client; + return { + ...rest, + _id: new Types.ObjectId(ItemId.$oid), + CrewMembers: client.CrewMembers ? convertCrewShipMembers(client.CrewMembers) : undefined + }; +}; + const convertInfestedFoundry = (client: IInfestedFoundryClient): IInfestedFoundryDatabase => { return { ...client, @@ -192,6 +213,9 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< if (client.FocusUpgrades) { db.FocusUpgrades = client.FocusUpgrades; } + if (client.CrewShips) { + replaceArray(db.CrewShips, client.CrewShips.map(convertCrewShip)); + } if (client.InfestedFoundry) { db.InfestedFoundry = convertInfestedFoundry(client.InfestedFoundry); } diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index f2181474..d5af0066 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -30,6 +30,7 @@ export interface IInventoryDatabase | "CrewShipWeaponSkins" | "OperatorLoadOuts" | "AdultOperatorLoadOuts" + | "CrewShips" | "InfestedFoundry" | "DialogueHistory" | TEquipmentKey @@ -50,6 +51,7 @@ export interface IInventoryDatabase CrewShipWeaponSkins: IUpgradeDatabase[]; OperatorLoadOuts: IOperatorConfigDatabase[]; AdultOperatorLoadOuts: IOperatorConfigDatabase[]; + CrewShips: ICrewShipDatabase[]; InfestedFoundry?: IInfestedFoundryDatabase; DialogueHistory?: IDialogueHistoryDatabase; @@ -292,7 +294,7 @@ export interface IInventoryClient extends IDailyAffiliations { LastNemesisAllySpawnTime?: IMongoDate; Settings: ISettings; PersonalTechProjects: IPersonalTechProject[]; - CrewShips: ICrewShip[]; + CrewShips: ICrewShipClient[]; PlayerSkills: IPlayerSkills; CrewShipAmmo: IConsumable[]; CrewShipSalvagedWeaponSkins: IUpgradeClient[]; @@ -452,7 +454,7 @@ export interface IUpgradeDatabase extends Omit { _id: Types.ObjectId; } -export interface ICrewShip { +export interface ICrewShipClient { ItemType: string; Configs: IItemConfig[]; Weapon?: ICrewShipWeapon; @@ -461,6 +463,10 @@ export interface ICrewShip { RailjackImage?: IFlavourItem; CrewMembers?: ICrewShipMembersClient; ItemId: IOid; +} + +export interface ICrewShipDatabase extends Omit { + CrewMembers?: ICrewShipMembersDatabase; _id: Types.ObjectId; } -- 2.47.2 From f08f6c9a20aed38f3738c97b71043296b8ad21ca Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 20 Jan 2025 12:09:37 +0100 Subject: [PATCH 41/41] fix type --- src/controllers/custom/importController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/custom/importController.ts b/src/controllers/custom/importController.ts index 8c5f8c04..77d4d2cb 100644 --- a/src/controllers/custom/importController.ts +++ b/src/controllers/custom/importController.ts @@ -23,5 +23,5 @@ export const importController: RequestHandler = async (req, res) => { }; interface IImportRequest { - inventory: IInventoryClient; + inventory: Partial; } -- 2.47.2