diff --git a/.gitignore b/.gitignore index 7d679bbcc..05465bae8 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ /.env /static/data/* +yarn.lock diff --git a/config.json b/config.json index 5d15dcf46..7ce173847 100644 --- a/config.json +++ b/config.json @@ -5,5 +5,7 @@ "version": "33.0.14", "worldSeed": "GWvLyHiw7/Qr/60056xmAmDrn0Y9et2S3BYlLSkLDNBMtumSr3KxWV8He5Jz72yYq3tsY+cd53QeTf+bb54+llGTbYiQF+64BtiLWMVhWP1IUaP4SxWHXojlpQC13op/udHI1whc+8zrxEzzZmv/QlpvigAAbjBDtwu97Df0vgn+YrOKi4G3OhgIkTRocAAzD1P/BGbT8gaKE01H8rXl3+Gq6jCA1O1v800SL6DwKOgMsXVvWp7g2n/tPxJe/j9bmu4XFG0bSa5y5hikLKxvntA/5ut+iogv4MyMBe+TydVxjPqNbkKnby5l4KAL+3inpuPraeg4jcNMt0AwKG8NIQ==", "skipStoryModeChoice": true, - "skipTutorial": true + "skipTutorial": true, + "testMission": true, + "testQuestKey": true } diff --git a/src/controllers/api/getShipController.ts b/src/controllers/api/getShipController.ts index 82f598fec..2da6f8b20 100644 --- a/src/controllers/api/getShipController.ts +++ b/src/controllers/api/getShipController.ts @@ -1,8 +1,22 @@ +import { Account } from "@/src/models/loginModel"; +import { Ship } from "@/src/models/shipModel"; +import { createShip } from "@/src/services/shipService"; import { RequestHandler } from "express"; -import getShip from "@/static/fixed_responses/getShip.json"; -const getShipController: RequestHandler = (_req, res) => { - res.json(getShip); +// eslint-disable-next-line @typescript-eslint/no-misused-promises +const getShipController: RequestHandler = async (_req, res) => { + const accountId = _req.query.accountId; + const ship = await Ship.findOne({ ShipOwnerId: accountId }); + if (!ship) { + const account = await Account.findOne({ _id: accountId }); + if (account) { + await createShip(account._id); + const new_ship = await Ship.findOne({ ShipOwnerId: accountId }); + res.json(new_ship); + return; + } + } + res.json(ship); }; export { getShipController }; diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index c7ad069c0..badf79ad3 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -2,6 +2,9 @@ import { toInventoryResponse } from "@/src/helpers/inventoryHelpers"; import { Inventory } from "@/src/models/inventoryModel"; import { Request, RequestHandler, Response } from "express"; +import config from "@/config.json"; +import testMissions from "@/static/fixed_responses/testMissions.json"; +import testQuestKeys from "@/static/fixed_responses/testQuestKeys.json"; const inventoryController: RequestHandler = async (request: Request, response: Response) => { const accountId = request.query.accountId; @@ -23,6 +26,9 @@ const inventoryController: RequestHandler = async (request: Request, response: R const inventoreResponse = toInventoryResponse(inventoryJSON); + if (config.testMission) inventoreResponse.Missions = testMissions; + if (config.testQuestKey) inventoreResponse.QuestKeys = testQuestKeys; + response.json(inventoreResponse); }; diff --git a/src/controllers/api/loginController.ts b/src/controllers/api/loginController.ts index 7819df06d..e48e6df07 100644 --- a/src/controllers/api/loginController.ts +++ b/src/controllers/api/loginController.ts @@ -9,6 +9,7 @@ import { createAccount, isCorrectPassword } from "@/src/services/loginService"; import { ILoginResponse } from "@/src/types/loginTypes"; import { DTLS, groups, HUB, IRC, Nonce, NRS, platformCDNs } from "@/static/fixed_responses/login_static"; +// 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/models/inventoryModel.ts b/src/models/inventoryModel.ts index bdc2065de..bed6c50c0 100644 --- a/src/models/inventoryModel.ts +++ b/src/models/inventoryModel.ts @@ -1,5 +1,6 @@ -import { Document, Schema, model } from "mongoose"; -import { IInventoryDatabase, IInventoryResponse, ISuitDatabase, ISuitDocument, Oid } from "../types/inventoryTypes"; +import { Schema, model } from "mongoose"; +import { IInventoryDatabase, ISuitDatabase } from "../types/inventoryTypes"; +import { Oid } from "../types/commonTypes"; const polaritySchema = new Schema({ Slot: Number, @@ -65,7 +66,7 @@ const suitSchema = new Schema({ }); suitSchema.set("toJSON", { - transform(_document, returnedObject: ISuitDocument) { + transform(_document, returnedObject) { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call returnedObject.ItemId = { $oid: returnedObject._id.toString() } satisfies Oid; delete returnedObject._id; @@ -246,7 +247,7 @@ const inventorySchema = new Schema({ }); inventorySchema.set("toJSON", { - transform(_document, returnedObject: ISuitDocument) { + transform(_document, returnedObject) { delete returnedObject._id; delete returnedObject.__v; } diff --git a/src/models/shipModel.ts b/src/models/shipModel.ts new file mode 100644 index 000000000..d782d9175 --- /dev/null +++ b/src/models/shipModel.ts @@ -0,0 +1,46 @@ +import { Schema, model } from "mongoose"; +import { IShipDatabase } from "../types/shipTypes"; +import { Oid } from "../types/commonTypes"; + +const roomSchema = new Schema({ + Name: String, + MaxCapacity: Number +}); + +roomSchema.set("toJSON", { + transform(_document, returnedObject) { + delete returnedObject._id; + } +}); + +const shipSchema = new Schema({ + Rooms: [roomSchema], + Features: [Schema.Types.Mixed], + ContentUrlSignature: String +}); + +const apartmentSchema = new Schema({ + Rooms: [roomSchema], + FavouriteLoadouts: [Schema.Types.Mixed] +}); + +const shipDatabaseSchema = new Schema({ + ShipOwnerId: String, + Ship: shipSchema, + Apartment: apartmentSchema +}); + +shipDatabaseSchema.set("toJSON", { + transform(_document, returnedObject) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call + returnedObject.Ship.ShipId = { $oid: returnedObject._id.toString() } satisfies Oid; + delete returnedObject._id; + delete returnedObject.Ship._id; + delete returnedObject.Apartment._id; + delete returnedObject.__v; + } +}); + +const Ship = model("Ship", shipDatabaseSchema); + +export { Ship }; diff --git a/src/services/loginService.ts b/src/services/loginService.ts index c110d4911..9e7959f0d 100644 --- a/src/services/loginService.ts +++ b/src/services/loginService.ts @@ -1,6 +1,7 @@ import { Account } from "@/src/models/loginModel"; import { createInventory } from "@/src/services/inventoryService"; import { IDatabaseAccount } from "@/src/types/loginTypes"; +import { createShip } from "./shipService"; const isCorrectPassword = (requestPassword: string, databasePassword: string): boolean => { return requestPassword === databasePassword; @@ -11,6 +12,7 @@ const createAccount = async (accountData: IDatabaseAccount) => { try { await account.save(); await createInventory(account._id); + await createShip(account._id); return account.toJSON(); } catch (error) { if (error instanceof Error) { diff --git a/src/services/shipService.ts b/src/services/shipService.ts new file mode 100644 index 000000000..8d131f1a4 --- /dev/null +++ b/src/services/shipService.ts @@ -0,0 +1,17 @@ +import { Ship } from "@/src/models/shipModel"; +import new_ship from "@/static/fixed_responses/postShip.json"; +import { Types } from "mongoose"; + +const createShip = async (accountOwnerId: Types.ObjectId) => { + try { + const ship = new Ship({ ...new_ship, ShipOwnerId: accountOwnerId }); + await ship.save(); + } catch (error) { + if (error instanceof Error) { + throw new Error(`error creating inventory" ${error.message}`); + } + throw new Error("error creating inventory that is not of instance Error"); + } +}; + +export { createShip }; diff --git a/src/types/commonTypes.ts b/src/types/commonTypes.ts new file mode 100644 index 000000000..4c1a7bf71 --- /dev/null +++ b/src/types/commonTypes.ts @@ -0,0 +1,3 @@ +export interface Oid { + $oid: string; +} diff --git a/src/types/inventoryTypes.ts b/src/types/inventoryTypes.ts index 70bac7cec..6a428931e 100644 --- a/src/types/inventoryTypes.ts +++ b/src/types/inventoryTypes.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { Document, Types } from "mongoose"; +import { Oid } from "./commonTypes"; export interface IInventoryDatabase extends IInventoryResponse { accountOwnerId: Types.ObjectId; @@ -187,10 +188,6 @@ export interface AdultOperatorLoadOut { ItemId: Oid; } -export interface Oid { - $oid: string; -} - export interface Color { t0?: number; t1?: number; @@ -995,9 +992,9 @@ export interface PlayerSkills { } export interface QuestKey { - Progress: Progress[]; - unlock: boolean; - Completed: boolean; + Progress?: Progress[]; + unlock?: boolean; + Completed?: boolean; ItemType: string; CompletionDate?: Date; } diff --git a/src/types/shipTypes.ts b/src/types/shipTypes.ts new file mode 100644 index 000000000..7a1805215 --- /dev/null +++ b/src/types/shipTypes.ts @@ -0,0 +1,29 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import { Types } from "mongoose"; +import { Oid } from "./inventoryTypes"; + +export type IShipDatabase = IShipResponse; + +export interface IShipResponse { + ShipOwnerId: Types.ObjectId; + Ship: IShipClass; + Apartment: IApartmentClass; +} + +export interface IShipClass { + Rooms: IRoomsClass[]; + ShipId: Oid; + Features: string[]; + ContentUrlSignature: string; +} + +export interface IRoomsClass { + Name: string; + MaxCapacity: number; +} + +export interface IApartmentClass { + Rooms: IRoomsClass[]; + FavouriteLoadouts: string[]; +} diff --git a/static/fixed_responses/postShip.json b/static/fixed_responses/postShip.json new file mode 100644 index 000000000..aeb53b93f --- /dev/null +++ b/static/fixed_responses/postShip.json @@ -0,0 +1,33 @@ +{ + "ShipOwnerId": "removed", + "Ship": { + "Features": [ + "/Lotus/Types/Items/ShipFeatureItems/EarthNavigationFeatureItem", + "/Lotus/Types/Items/ShipFeatureItems/ArsenalFeatureItem", + "/Lotus/Types/Items/ShipFeatureItems/SocialMenuFeatureItem", + "/Lotus/Types/Items/ShipFeatureItems/ModsFeatureItem", + "/Lotus/Types/Items/ShipFeatureItems/FoundryFeatureItem", + "/Lotus/Types/Items/ShipFeatureItems/MercuryNavigationFeatureItem" + ], + "ShipId": { "$oid": "removed" }, + "Rooms": [ + { "Name": "AlchemyRoom", "MaxCapacity": 1600 }, + { "Name": "BridgeRoom", "MaxCapacity": 1600 }, + { "Name": "LisetRoom", "MaxCapacity": 1000 }, + { "Name": "OperatorChamberRoom", "MaxCapacity": 1600 }, + { "Name": "OutsideRoom", "MaxCapacity": 1600 }, + { "Name": "PersonalQuartersRoom", "MaxCapacity": 1600 } + ], + "ContentUrlSignature": "removed" + }, + "Apartment": { + "Rooms": [ + { "Name": "ElevatorLanding", "MaxCapacity": 1600 }, + { "Name": "ApartmentRoomA", "MaxCapacity": 1000 }, + { "Name": "ApartmentRoomB", "MaxCapacity": 1600 }, + { "Name": "ApartmentRoomC", "MaxCapacity": 1600 }, + { "Name": "DuviriHallway", "MaxCapacity": 1600 } + ], + "FavouriteLoadouts": [] + } +} diff --git a/static/fixed_responses/testMissions.json b/static/fixed_responses/testMissions.json new file mode 100644 index 000000000..eb0340aed --- /dev/null +++ b/static/fixed_responses/testMissions.json @@ -0,0 +1,1471 @@ +[ + { + "Completes": 58, + "Tier": 1, + "Tag": "SolNode27" + }, + { + "Completes": 137, + "Tier": 1, + "Tag": "SolNode89" + }, + { + "Completes": 86, + "Tier": 1, + "Tag": "SolNode63" + }, + { + "Completes": 15, + "Tier": 1, + "Tag": "SolNode85" + }, + { + "Completes": 25, + "Tier": 1, + "Tag": "SolNode15" + }, + { + "Completes": 16, + "Tier": 1, + "Tag": "SolNode79" + }, + { + "Completes": 30, + "Tier": 1, + "Tag": "SolNode26" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "EarthToVenusJunction" + }, + { + "Completes": 65, + "Tier": 1, + "Tag": "SolNode128" + }, + { + "Completes": 32, + "Tier": 1, + "Tag": "SolNode123" + }, + { + "Completes": 17, + "Tier": 1, + "Tag": "SolNode66" + }, + { + "Completes": 21, + "Tier": 1, + "Tag": "SolNode22" + }, + { + "Completes": 31, + "Tier": 1, + "Tag": "SolNode109" + }, + { + "Completes": 25, + "Tier": 1, + "Tag": "SolNode61" + }, + { + "Completes": 180, + "Tag": "CetusHub4" + }, + { + "Completes": 563, + "Tier": 1, + "Tag": "SolNode228" + }, + { + "Completes": 34, + "Tier": 1, + "Tag": "SolNode39" + }, + { + "Completes": 33, + "Tier": 1, + "Tag": "SolNode75" + }, + { + "Completes": 14, + "Tier": 1, + "Tag": "SolNode59" + }, + { + "Completes": 13, + "Tier": 1, + "Tag": "ClanNode2" + }, + { + "Completes": 32, + "Tier": 1, + "Tag": "SolNode101" + }, + { + "Completes": 12, + "Tier": 1, + "Tag": "SolNode2" + }, + { + "Completes": 17, + "Tier": 1, + "Tag": "SolNode104" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "VenusToMercuryJunction" + }, + { + "Completes": 15, + "Tier": 1, + "Tag": "SolNode226" + }, + { + "Completes": 9, + "Tier": 1, + "Tag": "SolNode119" + }, + { + "Completes": 13, + "Tier": 1, + "Tag": "SolNode12" + }, + { + "Completes": 4, + "Tier": 1, + "Tag": "SolNode225" + }, + { + "Completes": 4, + "Tier": 1, + "Tag": "SolNode103" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "SolNode28" + }, + { + "Completes": 8, + "Tier": 1, + "Tag": "SolNode130" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "EarthToMarsJunction" + }, + { + "Completes": 78, + "Tier": 1, + "Tag": "SolNode58" + }, + { + "Completes": 13, + "Tier": 1, + "Tag": "SolNode11" + }, + { + "Completes": 20, + "Tier": 1, + "Tag": "SolNode65" + }, + { + "Completes": 29, + "Tier": 1, + "Tag": "SolNode16" + }, + { + "Completes": 17, + "Tier": 1, + "Tag": "SolNode46" + }, + { + "Completes": 25, + "Tier": 1, + "Tag": "SolNode113" + }, + { + "Completes": 69, + "Tier": 1, + "Tag": "SolNode45" + }, + { + "Completes": 21, + "Tier": 1, + "Tag": "SolNode106" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "MarsToPhobosJunction" + }, + { + "Completes": 79, + "Tier": 1, + "Tag": "SettlementNode1" + }, + { + "Completes": 16, + "Tier": 1, + "Tag": "SettlementNode14" + }, + { + "Completes": 77, + "Tier": 1, + "Tag": "SettlementNode2" + }, + { + "Completes": 10, + "Tier": 1, + "Tag": "SettlementNode15" + }, + { + "Completes": 33, + "Tier": 1, + "Tag": "SettlementNode12" + }, + { + "Completes": 18, + "Tier": 1, + "Tag": "SettlementNode20" + }, + { + "Completes": 35, + "Tier": 1, + "Tag": "SettlementNode3" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "ClanNode1" + }, + { + "Completes": 11, + "Tier": 1, + "Tag": "SolNode23" + }, + { + "Completes": 3, + "Tier": 1, + "Tag": "ClanNode0" + }, + { + "Completes": 70, + "Tier": 1, + "Tag": "SolNode107" + }, + { + "Completes": 7, + "Tier": 1, + "Tag": "SolNode223" + }, + { + "Completes": 14, + "Tier": 1, + "Tag": "SolNode108" + }, + { + "Completes": 10, + "Tier": 1, + "Tag": "SolNode224" + }, + { + "Completes": 5, + "Tier": 1, + "Tag": "SolNode94" + }, + { + "Completes": 16, + "Tier": 1, + "Tag": "SolNode41" + }, + { + "Completes": 37, + "Tier": 1, + "Tag": "SolNode30" + }, + { + "Completes": 23, + "Tier": 1, + "Tag": "SolNode36" + }, + { + "Completes": 10, + "Tier": 1, + "Tag": "SolNode68" + }, + { + "Completes": 24, + "Tier": 1, + "Tag": "SolNode99" + }, + { + "Completes": 7, + "Tier": 1, + "Tag": "ClanNode8" + }, + { + "Completes": 65, + "Tier": 1, + "Tag": "SolNode706" + }, + { + "Completes": 4, + "Tier": 1, + "Tag": "SolNode708" + }, + { + "Completes": 151, + "Tier": 1, + "Tag": "SolNode229" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "MarsToCeresJunction" + }, + { + "Completes": 38, + "Tier": 1, + "Tag": "SolNode14" + }, + { + "Completes": 4, + "Tier": 1, + "Tag": "ClanNode9" + }, + { + "Completes": 13, + "Tier": 1, + "Tag": "SettlementNode11" + }, + { + "Completes": 107, + "Tier": 1, + "Tag": "SolNode131" + }, + { + "Completes": 22, + "Tier": 1, + "Tag": "SolNode132" + }, + { + "Completes": 15, + "Tier": 1, + "Tag": "SolNode149" + }, + { + "Completes": 54, + "Tier": 1, + "Tag": "SolNode139" + }, + { + "Completes": 16, + "Tier": 1, + "Tag": "SolNode138" + }, + { + "Completes": 19, + "Tier": 1, + "Tag": "SolNode141" + }, + { + "Completes": 17, + "Tier": 1, + "Tag": "SolNode144" + }, + { + "Completes": 20, + "Tier": 1, + "Tag": "SolNode146" + }, + { + "Completes": 4, + "Tier": 1, + "Tag": "SolNode710" + }, + { + "Completes": 6, + "Tier": 1, + "Tag": "SolNode709" + }, + { + "Completes": 6, + "Tier": 1, + "Tag": "SolNode707" + }, + { + "Completes": 21, + "Tier": 1, + "Tag": "SolNode712" + }, + { + "Completes": 14, + "Tier": 1, + "Tag": "SolNode711" + }, + { + "Completes": 24, + "Tier": 1, + "Tag": "SolNode137" + }, + { + "Completes": 9, + "Tier": 1, + "Tag": "SolNode140" + }, + { + "Completes": 3, + "Tier": 1, + "Tag": "SolNode902" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "CeresToJupiterJunction" + }, + { + "Completes": 53, + "Tier": 1, + "Tag": "SolNode126" + }, + { + "Completes": 23, + "Tier": 1, + "Tag": "SolNode100" + }, + { + "Completes": 10, + "Tier": 1, + "Tag": "SolNode74" + }, + { + "Completes": 71, + "Tier": 1, + "Tag": "SolNode121" + }, + { + "Completes": 48, + "Tier": 1, + "Tag": "SolNode400" + }, + { + "Completes": 27, + "Tier": 1, + "Tag": "SolNode73" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "SolNode903" + }, + { + "Completes": 4, + "Tier": 1, + "Tag": "SolNode904" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "SettlementNode10" + }, + { + "Completes": 43, + "Tier": 1, + "Tag": "SolNode135" + }, + { + "Completes": 18, + "Tier": 1, + "Tag": "ClanNode22" + }, + { + "Completes": 10, + "Tier": 1, + "Tag": "ClanNode23" + }, + { + "Completes": 15, + "Tier": 1, + "Tag": "SolNode147" + }, + { + "Completes": 12, + "Tier": 1, + "Tag": "ClanNode10" + }, + { + "Completes": 12, + "Tier": 1, + "Tag": "ClanNode11" + }, + { + "Completes": 23, + "Tier": 1, + "Tag": "SolNode88" + }, + { + "Completes": 20, + "Tier": 1, + "Tag": "SolNode97" + }, + { + "Completes": 4, + "Tier": 1, + "Tag": "ClanNode4" + }, + { + "Completes": 12, + "Tier": 1, + "Tag": "SolNode125" + }, + { + "Completes": 13, + "Tier": 1, + "Tag": "SolNode10" + }, + { + "Completes": 10, + "Tier": 1, + "Tag": "SolNode905" + }, + { + "Completes": 84, + "Tier": 1, + "Tag": "SolNode401" + }, + { + "Completes": 10, + "Tag": "SolNode402" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "JupiterToEuropaJunction" + }, + { + "Completes": 8, + "Tier": 1, + "Tag": "SolNode209" + }, + { + "Completes": 20, + "Tier": 1, + "Tag": "SolNode24" + }, + { + "Completes": 4, + "Tier": 1, + "Tag": "ClanNode3" + }, + { + "Completes": 34, + "Tier": 1, + "Tag": "SolNode217" + }, + { + "Completes": 15, + "Tier": 1, + "Tag": "SolNode215" + }, + { + "Completes": 8, + "Tier": 1, + "Tag": "SolNode220" + }, + { + "Completes": 26, + "Tier": 1, + "Tag": "SolNode203" + }, + { + "Completes": 3, + "Tier": 1, + "Tag": "ClanNode6" + }, + { + "Completes": 11, + "Tier": 1, + "Tag": "SolNode216" + }, + { + "Completes": 79, + "Tag": "DeimosHub" + }, + { + "Completes": 14, + "Tag": "SolNode211" + }, + { + "Completes": 17, + "Tag": "SolNode214" + }, + { + "Completes": 15, + "Tier": 1, + "Tag": "SolNode212" + }, + { + "Completes": 16, + "Tier": 1, + "Tag": "SolNode210" + }, + { + "Completes": 10, + "Tier": 1, + "Tag": "SolNode204" + }, + { + "Completes": 136, + "Tier": 1, + "Tag": "SolNode205" + }, + { + "Completes": 1, + "Tag": "ClanNode7" + }, + { + "Completes": 5, + "Tier": 1, + "Tag": "SolNode403" + }, + { + "Completes": 7, + "Tier": 1, + "Tag": "SolNode404" + }, + { + "Completes": 13, + "Tier": 1, + "Tag": "SolNode405" + }, + { + "Completes": 44, + "Tier": 1, + "Tag": "SolNode53" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "JupiterToSaturnJunction" + }, + { + "Completes": 142, + "Tier": 1, + "Tag": "SolNode70" + }, + { + "Completes": 19, + "Tier": 1, + "Tag": "SolNode50" + }, + { + "Completes": 6, + "Tier": 1, + "Tag": "SolNode906" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "ClanNode12" + }, + { + "Completes": 7, + "Tier": 1, + "Tag": "SolNode19" + }, + { + "Completes": 12, + "Tier": 1, + "Tag": "SolNode96" + }, + { + "Completes": 14, + "Tier": 1, + "Tag": "SolNode42" + }, + { + "Completes": 14, + "Tier": 1, + "Tag": "SolNode32" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "SaturnToUranusJunction" + }, + { + "Completes": 17, + "Tier": 1, + "Tag": "SolNode82" + }, + { + "Completes": 10, + "Tier": 1, + "Tag": "SolNode93" + }, + { + "Completes": 6, + "Tier": 1, + "Tag": "SolNode67" + }, + { + "Completes": 65, + "Tier": 1, + "Tag": "SolNode20" + }, + { + "Completes": 26, + "Tier": 1, + "Tag": "SolNode31" + }, + { + "Completes": 8, + "Tag": "SolNode18" + }, + { + "Completes": 2, + "Tag": "ClanNode13" + }, + { + "Completes": 4, + "Tier": 1, + "Tag": "SolNode34" + }, + { + "Completes": 236, + "Tag": "SolNode801" + }, + { + "Completes": 8, + "Tier": 1, + "Tag": "SolNode25" + }, + { + "Completes": 8, + "Tier": 1, + "Tag": "ClanNode5" + }, + { + "Completes": 3, + "Tier": 1, + "Tag": "SolNode33" + }, + { + "Completes": 2, + "Tag": "SolNode98" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "SolNode9" + }, + { + "Completes": 17, + "Tag": "SolNode105" + }, + { + "Completes": 3, + "Tier": 1, + "Tag": "SolNode114" + }, + { + "Completes": 3, + "Tier": 1, + "Tag": "ClanNode17" + }, + { + "Completes": 1, + "Tag": "SolNode60" + }, + { + "Completes": 4, + "Tier": 1, + "Tag": "SolNode83" + }, + { + "Completes": 17, + "Tier": 1, + "Tag": "SolNode69" + }, + { + "Completes": 6, + "Tag": "ClanNode16" + }, + { + "Completes": 1, + "Tag": "UranusToNeptuneJunction" + }, + { + "Completes": 32, + "Tier": 1, + "Tag": "SolNode1" + }, + { + "Completes": 15, + "Tier": 1, + "Tag": "SolNode64" + }, + { + "Completes": 16, + "Tier": 1, + "Tag": "SolNode62" + }, + { + "Completes": 13, + "Tier": 1, + "Tag": "SolNode300" + }, + { + "Completes": 10, + "Tier": 1, + "Tag": "SolNode301" + }, + { + "Completes": 36, + "Tier": 1, + "Tag": "SolNode122" + }, + { + "Completes": 5, + "Tag": "SolNode907" + }, + { + "Completes": 49, + "Tier": 1, + "Tag": "SolNode78" + }, + { + "Completes": 8, + "Tier": 1, + "Tag": "SolNode49" + }, + { + "Completes": 52, + "Tier": 1, + "Tag": "SolNode406" + }, + { + "Completes": 65, + "Tier": 1, + "Tag": "SolNode407" + }, + { + "Completes": 10, + "Tier": 1, + "Tag": "SolNode408" + }, + { + "Completes": 6, + "Tier": 1, + "Tag": "SolNode87" + }, + { + "Completes": 10, + "Tier": 1, + "Tag": "SolNode307" + }, + { + "Completes": 11, + "Tier": 1, + "Tag": "SolNode302" + }, + { + "Completes": 18, + "Tier": 1, + "Tag": "SolNode306" + }, + { + "Completes": 8, + "Tier": 1, + "Tag": "SolNode304" + }, + { + "Completes": 8, + "Tier": 1, + "Tag": "SolNode305" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "SolNode908" + }, + { + "Completes": 6, + "Tier": 1, + "Tag": "SolNode84" + }, + { + "Completes": 32, + "Tier": 1, + "Tag": "SolNode127" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "NeptuneToPlutoJunction" + }, + { + "Completes": 23, + "Tier": 1, + "Tag": "SolNode6" + }, + { + "Completes": 33, + "Tier": 1, + "Tag": "SolNode57" + }, + { + "Completes": 4, + "Tag": "SolNode17" + }, + { + "Completes": 1, + "Tag": "ClanNode21" + }, + { + "Completes": 109, + "Tier": 1, + "Tag": "SolNode76" + }, + { + "Completes": 16, + "Tier": 1, + "Tag": "SolNode38" + }, + { + "Completes": 24, + "Tier": 1, + "Tag": "SolNode102" + }, + { + "Completes": 55, + "Tier": 1, + "Tag": "SolNode4" + }, + { + "Completes": 26, + "Tier": 1, + "Tag": "SolNode48" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "PlutoToSednaJunction" + }, + { + "Completes": 31, + "Tier": 1, + "Tag": "SolNode189" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "PlutoToErisJunction" + }, + { + "Completes": 7, + "Tier": 1, + "Tag": "SolNode175" + }, + { + "Completes": 49, + "Tier": 1, + "Tag": "SolNode746" + }, + { + "Completes": 19, + "Tier": 1, + "Tag": "SolNode162" + }, + { + "Completes": 5, + "Tier": 1, + "Tag": "SolNode173" + }, + { + "Completes": 23, + "Tier": 1, + "Tag": "SolNode166" + }, + { + "Completes": 102, + "Tier": 1, + "Tag": "SolNode181" + }, + { + "Completes": 18, + "Tier": 1, + "Tag": "SolNode153" + }, + { + "Completes": 7, + "Tag": "SolNode164" + }, + { + "Completes": 7, + "Tier": 1, + "Tag": "SolNode172" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "ClanNode19" + }, + { + "Completes": 18, + "Tier": 1, + "Tag": "SolNode72" + }, + { + "Completes": 21, + "Tier": 1, + "Tag": "SolNode21" + }, + { + "Completes": 17, + "Tag": "SolNode187" + }, + { + "Completes": 8, + "Tier": 1, + "Tag": "SolNode196" + }, + { + "Completes": 18, + "Tier": 1, + "Tag": "SolNode184" + }, + { + "Completes": 12, + "Tier": 1, + "Tag": "SolNode118" + }, + { + "Completes": 10, + "Tier": 1, + "Tag": "SolNode188" + }, + { + "Completes": 5, + "Tag": "SolNode410" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "SolNode411" + }, + { + "Completes": 5, + "Tier": 1, + "Tag": "SolNode195" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "ClanNode14" + }, + { + "Completes": 467, + "Tier": 1, + "Tag": "SolNode129" + }, + { + "Completes": 299, + "Tag": "SolarisUnitedHub1" + }, + { + "Completes": 21, + "Tier": 1, + "Tag": "SolNode171" + }, + { + "Completes": 15, + "Tier": 1, + "Tag": "SolNode412" + }, + { + "Completes": 14, + "Tier": 1, + "Tag": "SolNode409" + }, + { + "Completes": 39, + "Tier": 1, + "Tag": "SolNode177" + }, + { + "Completes": 11, + "Tier": 1, + "Tag": "SolNode713" + }, + { + "Completes": 3, + "Tier": 1, + "Tag": "ClanNode18" + }, + { + "Completes": 9, + "Tier": 1, + "Tag": "SolNode167" + }, + { + "Completes": 4, + "Tag": "SolNode185" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "ClanNode15" + }, + { + "Completes": 33, + "Tier": 1, + "Tag": "SolNode308" + }, + { + "Completes": 5, + "Tag": "ClanNode20" + }, + { + "Completes": 4, + "Tier": 1, + "Tag": "ClanNode24" + }, + { + "Completes": 3, + "Tier": 1, + "Tag": "ClanNode25" + }, + { + "Completes": 11, + "Tier": 1, + "Tag": "SolNode56" + }, + { + "Completes": 11, + "Tier": 1, + "Tag": "SolNode43" + }, + { + "Completes": 16, + "Tier": 1, + "Tag": "SolNode81" + }, + { + "Completes": 23, + "Tier": 1, + "Tag": "SolNode51" + }, + { + "Completes": 8, + "Tier": 1, + "Tag": "SolNode191" + }, + { + "Completes": 2, + "Tag": "SolNode190" + }, + { + "Completes": 7, + "Tag": "SolNode199" + }, + { + "Completes": 1, + "Tag": "SolNode183" + }, + { + "Completes": 12, + "Tag": "SolNode193" + }, + { + "Completes": 22, + "Tag": "SolNode763" + }, + { + "Completes": 12, + "Tier": 1, + "Tag": "SolNode741" + }, + { + "Completes": 7, + "Tier": 1, + "Tag": "SolNode742" + }, + { + "Completes": 11, + "Tier": 1, + "Tag": "SolNode747" + }, + { + "Completes": 13, + "Tier": 1, + "Tag": "SolNode744" + }, + { + "Completes": 3, + "Tier": 1, + "Tag": "SolNode743" + }, + { + "Completes": 15, + "Tier": 1, + "Tag": "SolNode748" + }, + { + "Completes": 11, + "Tier": 1, + "Tag": "SolNode745" + }, + { + "Completes": 10, + "Tier": 1, + "Tag": "SolNode740" + }, + { + "Completes": 167, + "Tag": "SolNode802" + }, + { + "Completes": 22, + "Tag": "SolNode233" + }, + { + "Completes": 113, + "Tier": 1, + "Tag": "SolNode231" + }, + { + "Completes": 45, + "Tag": "SolNode230" + }, + { + "Completes": 21, + "Tag": "SolNode232" + }, + { + "Completes": 11, + "Tag": "SolNode235" + }, + { + "Completes": 2, + "Tier": 1, + "Tag": "SolNode309" + }, + { + "Completes": 27, + "Tier": 1, + "Tag": "SolNode310" + }, + { + "Completes": 6, + "Tag": "CrewBattleNode527" + }, + { + "Completes": 7, + "Tag": "CrewBattleNode553" + }, + { + "Completes": 1, + "Tag": "CrewBattleNode556" + }, + { + "Completes": 3, + "Tag": "CrewBattleNode502" + }, + { + "Completes": 4, + "Tag": "CrewBattleNode509" + }, + { + "Completes": 3, + "Tag": "CrewBattleNode518" + }, + { + "Completes": 47, + "Tag": "CrewBattleNode558" + }, + { + "Completes": 3, + "Tag": "CrewBattleNode519" + }, + { + "Completes": 41, + "Tag": "CrewBattleNode522" + }, + { + "Completes": 6, + "Tag": "CrewBattleNode503" + }, + { + "Completes": 1, + "Tag": "CrewBattleNode511" + }, + { + "Completes": 3, + "Tag": "CrewBattleNode512" + }, + { + "Completes": 23, + "Tag": "EventNode5" + }, + { + "Completes": 35, + "Tag": "CrewBattleNode557" + }, + { + "Completes": 5, + "Tag": "SolNode705" + }, + { + "Completes": 8, + "Tag": "EventNode2" + }, + { + "Completes": 4, + "Tag": "CrewBattleNode528" + }, + { + "Completes": 1, + "Tag": "CrewBattleNode531" + }, + { + "Completes": 1, + "Tag": "CrewBattleNode529" + }, + { + "Completes": 15, + "Tag": "CrewBattleNode536" + }, + { + "Completes": 13, + "Tag": "CrewBattleNode550" + }, + { + "Completes": 7, + "Tag": "CrewBattleNode516" + }, + { + "Completes": 8, + "Tag": "CrewBattleNode533" + }, + { + "Completes": 14, + "Tag": "CrewBattleNode554" + }, + { + "Completes": 24, + "Tag": "CrewBattleNode555" + }, + { + "Completes": 18, + "Tag": "CrewBattleNode538" + }, + { + "Completes": 1, + "Tag": "CrewBattleNode534" + }, + { + "Completes": 2, + "Tag": "CrewBattleNode501" + }, + { + "Completes": 1, + "Tag": "CrewBattleNode535" + }, + { + "Completes": 4, + "Tag": "CrewBattleNode530" + }, + { + "Completes": 5, + "Tag": "SolNode764" + }, + { + "Completes": 3, + "Tag": "SolNode701" + }, + { + "Completes": 8, + "Tag": "CrewBattleNode521" + }, + { + "Completes": 3, + "Tag": "CrewBattleNode514" + }, + { + "Completes": 2, + "Tag": "CrewBattleNode515" + }, + { + "Completes": 6, + "Tag": "CrewBattleNode539" + }, + { + "Completes": 6, + "Tag": "CrewBattleNode504" + }, + { + "Completes": 57, + "Tier": 1, + "Tag": "SolNode450" + }, + { + "Completes": 3, + "Tag": "SolNode761" + }, + { + "Completes": 2, + "Tag": "EventNode34" + }, + { + "Completes": 1, + "Tag": "EventNode30" + }, + { + "Completes": 1, + "Tag": "CrewBattleNode540" + }, + { + "Completes": 2, + "Tag": "EventNode25" + }, + { + "Completes": 3, + "Tag": "EventNode24" + }, + { + "Completes": 2, + "Tag": "EventNode26" + }, + { + "Completes": 1, + "Tag": "EventNode37" + }, + { + "Completes": 1, + "Tag": "/Lotus/Language/Locations/Jupiter" + }, + { + "Completes": 92, + "Tier": 1, + "Tag": "SolNode238" + }, + { + "Completes": 30, + "Tier": 1, + "Tag": "SolNode237" + }, + { + "Completes": 13, + "Tag": "SolNode236" + }, + { + "Completes": 1, + "Tag": "EventNode27" + } +] \ No newline at end of file diff --git a/static/fixed_responses/testQuestKeys.json b/static/fixed_responses/testQuestKeys.json new file mode 100644 index 000000000..5dcc460e5 --- /dev/null +++ b/static/fixed_responses/testQuestKeys.json @@ -0,0 +1,11 @@ +[ + { + "ItemType": "/Lotus/Types/Keys/InfestedIntroQuest/InfestedIntroQuestKeyChain" + }, + { + "ItemType": "/Lotus/Types/Keys/KubrowQuest/KubrowQuestKeyChain" + }, + { + "ItemType": "/Lotus/Types/Keys/DuviriQuest/DuviriQuestKeyChain" + } +] \ No newline at end of file