From 6dd9b42f4026d41065eb00b281e41be2eeab2f4f Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sun, 22 Jun 2025 06:36:47 -0700 Subject: [PATCH] feat(webui): update inventory when in-game changes are made (#2239) A bit of a rough initial implementation, but already works pretty well. Closes #2224 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2239 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/controllers/api/missionInventoryUpdateController.ts | 3 +++ src/controllers/api/nameWeaponController.ts | 2 ++ src/controllers/api/purchaseController.ts | 2 ++ src/controllers/api/renamePetController.ts | 2 ++ src/controllers/api/sellController.ts | 2 ++ src/services/webService.ts | 1 + static/webui/script.js | 3 +++ 7 files changed, 15 insertions(+) diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index 3b5009c2..93f8033c 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -7,6 +7,7 @@ import { generateRewardSeed, getInventory } from "@/src/services/inventoryServic import { getInventoryResponse } from "./inventoryController"; import { logger } from "@/src/utils/logger"; import { IMissionInventoryUpdateResponse } from "@/src/types/missionTypes"; +import { sendWsBroadcastTo } from "@/src/services/webService"; /* **** INPUT **** @@ -76,6 +77,7 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res) InventoryJson: JSON.stringify(inventoryResponse), MissionRewards: [] }); + sendWsBroadcastTo(account._id.toString(), { update_inventory: true }); return; } @@ -106,6 +108,7 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res) AffiliationMods, ConquestCompletedMissionsCount } satisfies IMissionInventoryUpdateResponse); + sendWsBroadcastTo(account._id.toString(), { update_inventory: true }); }; /* diff --git a/src/controllers/api/nameWeaponController.ts b/src/controllers/api/nameWeaponController.ts index 5d1011be..8d378feb 100644 --- a/src/controllers/api/nameWeaponController.ts +++ b/src/controllers/api/nameWeaponController.ts @@ -3,6 +3,7 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { getInventory, updateCurrency } from "@/src/services/inventoryService"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes"; +import { sendWsBroadcastTo } from "@/src/services/webService"; interface INameWeaponRequest { ItemName: string; @@ -27,4 +28,5 @@ export const nameWeaponController: RequestHandler = async (req, res) => { res.json({ InventoryChanges: currencyChanges }); + sendWsBroadcastTo(accountId, { update_inventory: true }); }; diff --git a/src/controllers/api/purchaseController.ts b/src/controllers/api/purchaseController.ts index 4b35e0c5..ba314845 100644 --- a/src/controllers/api/purchaseController.ts +++ b/src/controllers/api/purchaseController.ts @@ -3,6 +3,7 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { IPurchaseRequest } from "@/src/types/purchaseTypes"; import { handlePurchase } from "@/src/services/purchaseService"; import { getInventory } from "@/src/services/inventoryService"; +import { sendWsBroadcastTo } from "@/src/services/webService"; export const purchaseController: RequestHandler = async (req, res) => { const purchaseRequest = JSON.parse(String(req.body)) as IPurchaseRequest; @@ -11,4 +12,5 @@ export const purchaseController: RequestHandler = async (req, res) => { const response = await handlePurchase(purchaseRequest, inventory); await inventory.save(); res.json(response); + sendWsBroadcastTo(accountId, { update_inventory: true }); }; diff --git a/src/controllers/api/renamePetController.ts b/src/controllers/api/renamePetController.ts index 61212641..40b4ec37 100644 --- a/src/controllers/api/renamePetController.ts +++ b/src/controllers/api/renamePetController.ts @@ -1,6 +1,7 @@ import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { getInventory, updateCurrency } from "@/src/services/inventoryService"; import { getAccountIdForRequest } from "@/src/services/loginService"; +import { sendWsBroadcastTo } from "@/src/services/webService"; import { IInventoryChanges } from "@/src/types/purchaseTypes"; import { RequestHandler } from "express"; @@ -22,6 +23,7 @@ export const renamePetController: RequestHandler = async (req, res) => { ...data, inventoryChanges: inventoryChanges }); + sendWsBroadcastTo(accountId, { update_inventory: true }); }; interface IRenamePetRequest { diff --git a/src/controllers/api/sellController.ts b/src/controllers/api/sellController.ts index fdfb3a82..ff5c8f42 100644 --- a/src/controllers/api/sellController.ts +++ b/src/controllers/api/sellController.ts @@ -15,6 +15,7 @@ import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes"; import { ExportDojoRecipes } from "warframe-public-export-plus"; import { IInventoryChanges } from "@/src/types/purchaseTypes"; import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; +import { sendWsBroadcastTo } from "@/src/services/webService"; export const sellController: RequestHandler = async (req, res) => { const payload = JSON.parse(String(req.body)) as ISellRequest; @@ -279,6 +280,7 @@ export const sellController: RequestHandler = async (req, res) => { res.json({ inventoryChanges: inventoryChanges // "inventoryChanges" for this response instead of the usual "InventoryChanges" }); + sendWsBroadcastTo(accountId, { update_inventory: true }); }; interface ISellRequest { diff --git a/src/services/webService.ts b/src/services/webService.ts index 92578c61..25db1d69 100644 --- a/src/services/webService.ts +++ b/src/services/webService.ts @@ -125,6 +125,7 @@ interface IWsMsgToClient { isRegister: boolean; }; logged_out?: boolean; + update_inventory?: boolean; } const wsOnConnect = (ws: ws, _req: http.IncomingMessage): void => { diff --git a/static/webui/script.js b/static/webui/script.js index 44f7ade0..1f1e86dd 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -79,6 +79,9 @@ function openWebSocket() { if ("logged_out" in msg) { sendAuth(); } + if ("update_inventory" in msg) { + updateInventory(); + } }; window.ws.onclose = function () { ws_is_open = false;