diff --git a/client/src/components/AdminIconButton.tsx b/client/src/components/AdminIconButton.tsx deleted file mode 100644 index 85252fc..0000000 --- a/client/src/components/AdminIconButton.tsx +++ /dev/null @@ -1,15 +0,0 @@ -export const AdminIconButton = ({ - setShowSettings, - showSettings, -}: { - setShowSettings: (value: boolean) => void; - showSettings: boolean; -}) => { - return ( - - ); -}; - -export default AdminIconButton; diff --git a/client/src/components/AdminView.tsx b/client/src/components/AdminView.tsx deleted file mode 100644 index 7b2176f..0000000 --- a/client/src/components/AdminView.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { useContext, useState } from "react"; - -// components -import { ConfirmationModal } from "@/components"; - -// context -import { GlobalDispatchContext, GlobalStateContext } from "@/context/GlobalContext"; - -// utils -import { backendAPI, setErrorMessage } from "@/utils"; - -export const AdminView = () => { - const dispatch = useContext(GlobalDispatchContext); - const { keyAssetId } = useContext(GlobalStateContext); - - const [showConfirmationModal, setShowConfirmationModal] = useState(false); - const [areButtonsDisabled, setAreButtonsDisabled] = useState(false); - - function handleToggleShowConfirmationModal() { - setShowConfirmationModal(!showConfirmationModal); - } - - const handleRemoveDroppedAssets = async () => { - setAreButtonsDisabled(true); - - backendAPI - .post("/remove-dropped-assets", { keyAssetId }) - .catch((error) => setErrorMessage(dispatch, error)) - .finally(() => { - setShowConfirmationModal(false); - setAreButtonsDisabled(false); - }); - }; - - return ( -
-

Settings

- {keyAssetId ? ( - - ) : ( -

Unable to find key asset with unique name "virtualPetKeyAsset".

- )} - - {showConfirmationModal && ( - - )} -
- ); -}; - -export default AdminView; diff --git a/client/src/components/PageContainer.tsx b/client/src/components/PageContainer.tsx index 8616cda..e64380d 100644 --- a/client/src/components/PageContainer.tsx +++ b/client/src/components/PageContainer.tsx @@ -1,7 +1,7 @@ -import { ReactNode, useContext, useState } from "react"; +import { ReactNode, useContext } from "react"; // components -import { AdminView, AdminIconButton, Loading } from "@/components"; +import { Loading } from "@/components"; // context import { GlobalStateContext } from "@context/GlobalContext"; @@ -15,29 +15,19 @@ export const PageContainer = ({ isLoading: boolean; headerText?: string; }) => { - const { error, isAdmin } = useContext(GlobalStateContext); - const [showSettings, setShowSettings] = useState(false); + const { error } = useContext(GlobalStateContext); if (isLoading) return ; return (
- {isAdmin && ( - setShowSettings(!showSettings)} showSettings={showSettings} /> - )} {headerText && (

{headerText}

)} - {showSettings ? ( - - ) : ( - <> - {children} - {error &&

{error}

} - - )} + {children} + {error &&

{error}

}
); }; diff --git a/client/src/components/index.ts b/client/src/components/index.ts index 3bf22b0..ec9d7f9 100644 --- a/client/src/components/index.ts +++ b/client/src/components/index.ts @@ -1,7 +1,5 @@ export * from "./ActionIcon.js"; export * from "./ActionIconsContainer.js"; -export * from "./AdminView.js"; -export * from "./AdminIconButton.js"; export * from "./ConfirmationModal.js"; export * from "./CreatePet.js"; export * from "./PetColors.js"; diff --git a/client/src/context/constants.ts b/client/src/context/constants.ts index db6c0e4..5c5326c 100644 --- a/client/src/context/constants.ts +++ b/client/src/context/constants.ts @@ -2,7 +2,6 @@ import { defaultPetStatus } from "@/constants"; export const initialState = { error: "", - isAdmin: false, isPetOwner: false, petStatus: defaultPetStatus, hasInteractiveParams: false, diff --git a/client/src/context/reducer.ts b/client/src/context/reducer.ts index b51a78b..e34d76b 100644 --- a/client/src/context/reducer.ts +++ b/client/src/context/reducer.ts @@ -6,7 +6,6 @@ import { SET_HAS_SETUP_BACKEND, SET_INTERACTIVE_PARAMS, SET_KEY_ASSET_ID, - SET_IS_ADMIN, SET_SELECTED_PET, } from "./types"; @@ -24,12 +23,6 @@ const globalReducer = (state: InitialStateType, action: ActionType) => { ...payload, hasSetupBackend: true, }; - case SET_IS_ADMIN: - return { - ...state, - isAdmin: action.payload.isAdmin, - error: "", - }; case SET_GAME_STATE: return { ...state, diff --git a/client/src/context/types.ts b/client/src/context/types.ts index 6e565e0..e7168bf 100644 --- a/client/src/context/types.ts +++ b/client/src/context/types.ts @@ -2,7 +2,6 @@ import { BadgesType, PetStatusType, VisitorInventoryType } from "../../../shared export const SET_HAS_SETUP_BACKEND = "SET_HAS_SETUP_BACKEND"; export const SET_INTERACTIVE_PARAMS = "SET_INTERACTIVE_PARAMS"; -export const SET_IS_ADMIN = "SET_IS_ADMIN"; export const SET_GAME_STATE = "SET_GAME_STATE"; export const SET_ERROR = "SET_ERROR"; export const SET_KEY_ASSET_ID = "SET_KEY_ASSET_ID"; @@ -24,7 +23,6 @@ export type InteractiveParams = { export interface InitialStateType { keyAssetId?: string; - isAdmin?: boolean; isPetOwner?: boolean; petStatus?: PetStatusType; error?: string; diff --git a/client/src/pages/Home.tsx b/client/src/pages/Home.tsx index 84e7c60..b374420 100644 --- a/client/src/pages/Home.tsx +++ b/client/src/pages/Home.tsx @@ -9,7 +9,6 @@ import { GlobalDispatchContext, GlobalStateContext } from "@/context/GlobalConte // utils import { backendAPI, setErrorMessage, setGameState } from "@/utils"; -import { SET_IS_ADMIN } from "@/context/types"; const Home = ({ isSpawnedDroppedAsset }: { isSpawnedDroppedAsset: boolean }) => { const dispatch = useContext(GlobalDispatchContext); @@ -31,12 +30,6 @@ const Home = ({ isSpawnedDroppedAsset }: { isSpawnedDroppedAsset: boolean }) => response = await backendAPI.get("/pet"); } setGameState(dispatch, response.data); - dispatch!({ - type: SET_IS_ADMIN, - payload: { - isAdmin: response.data.isAdmin, - }, - }); } catch (error) { if (error instanceof Error) { setErrorMessage(dispatch, error.message); diff --git a/client/src/utils/setGameState.ts b/client/src/utils/setGameState.ts index b871b58..fada3a6 100644 --- a/client/src/utils/setGameState.ts +++ b/client/src/utils/setGameState.ts @@ -4,7 +4,7 @@ import { PetStatusType } from "../../../shared/types.js"; export const setGameState = ( dispatch: Dispatch | null, - gameState: { isPetOwner: boolean; petStatus: PetStatusType; isAdmin: boolean }, + gameState: { isPetOwner: boolean; petStatus: PetStatusType }, ) => { if (!dispatch || !setGameState) return; diff --git a/client/tsconfig.json b/client/tsconfig.json index b48bb08..89c59f9 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -7,7 +7,7 @@ "skipLibCheck": true, /* Bundler mode */ - "moduleResolution": "node", + "moduleResolution": "bundler", "allowImportingTsExtensions": true, "allowSyntheticDefaultImports": true, "resolveJsonModule": true, @@ -21,14 +21,13 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, - "baseUrl": ".", // Required for path mapping "paths": { - "@/*": ["src/*"], - "@assets/*": ["src/assets/*"], - "@components/*": ["src/components/*"], - "@context/*": ["src/context/*"], - "@pages/*": ["src/pages/*"], - "@utils/*": ["src/utils/*"], + "@/*": ["./src/*"], + "@assets/*": ["./src/assets/*"], + "@components/*": ["./src/components/*"], + "@context/*": ["./src/context/*"], + "@pages/*": ["./src/pages/*"], + "@utils/*": ["./src/utils/*"], "@shared/*": ["../shared/*"] } }, diff --git a/server/controllers/handleGetGameState.ts b/server/controllers/handleGetGameState.ts index 5229988..1524e17 100644 --- a/server/controllers/handleGetGameState.ts +++ b/server/controllers/handleGetGameState.ts @@ -1,11 +1,5 @@ import { Request, Response } from "express"; -import { - errorHandler, - getCachedInventoryItems, - getCredentials, - getVisitorAndPetStatus, - removeDroppedAssets, -} from "../utils/index.js"; +import { errorHandler, getCachedInventoryItems, getCredentials, getVisitorAndPetStatus } from "../utils/index.js"; import { BadgesType } from "../../shared/types.js"; export const handleGetGameState = async (req: Request, res: Response) => { @@ -34,8 +28,6 @@ export const handleGetGameState = async (req: Request, res: Response) => { } } - await removeDroppedAssets(credentials); - return res.json({ isAdmin, pets, diff --git a/server/controllers/handleGetKeyAsset.ts b/server/controllers/handleGetKeyAsset.ts deleted file mode 100644 index 95280d5..0000000 --- a/server/controllers/handleGetKeyAsset.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Request, Response } from "express"; -import { errorHandler, getCredentials, World } from "../utils/index.js"; - -export const handleGetKeyAsset = async (req: Request, res: Response): Promise | void> => { - try { - const credentials = getCredentials(req.query); - const { urlSlug } = credentials; - - const world = World.create(urlSlug, { credentials }); - const droppedAssets = await world.fetchDroppedAssetsWithUniqueName({ uniqueName: "virtualPetKeyAsset" }); - - if (droppedAssets.length === 0) throw "No key asset found"; - - return res.json({ keyAssetId: droppedAssets[0].id }); - } catch (error) { - return errorHandler({ - error, - functionName: "handleGetKeyAsset", - message: "Error getting key asset", - req, - res, - }); - } -}; diff --git a/server/controllers/handleGetPet.ts b/server/controllers/handleGetPet.ts index 88f060f..7d9a532 100644 --- a/server/controllers/handleGetPet.ts +++ b/server/controllers/handleGetPet.ts @@ -5,7 +5,6 @@ import { errorHandler, getCredentials, getVisitorAndPetStatus, - removeDroppedAssets, spawnPetNpc, User, } from "../utils/index.js"; @@ -67,8 +66,6 @@ export const handleGetPet = async (req: Request, res: Response): Promise | void> => { - try { - const credentials = getCredentials(req.query); - const { urlSlug } = credentials; - const { keyAssetId } = req.body; - if (keyAssetId) credentials.assetId = keyAssetId; - - const world = World.create(urlSlug, { credentials }); - - await world - .updateDataObject({}, { analytics: [{ analyticName: `adminPickupAllPets`, urlSlug }] }) - .then() - .catch(() => console.error("Error sending analytics for adminPickupAllPets")); - - await removeDroppedAssets(credentials); - - return res.json({ isPetInWorld: false }); - } catch (error) { - return errorHandler({ - error, - functionName: "handleRemoveAllPets", - message: "Error removing dropped assets", - req, - res, - }); - } -}; diff --git a/server/controllers/handleTradePet.ts b/server/controllers/handleTradePet.ts index b1f8703..36b8d35 100644 --- a/server/controllers/handleTradePet.ts +++ b/server/controllers/handleTradePet.ts @@ -14,7 +14,9 @@ export const handleTradePet = async (req: Request, res: Response): Promise { }); }); -router.get("/key-asset", handleGetKeyAsset); router.get("/game-state", handleGetGameState); router.get("/pet", handleGetPet); router.post("/create-pet", handleCreatePet); @@ -43,6 +40,5 @@ router.post("/trade-pet", handleTradePet); router.post("/spawn-pet", handleSpawnPet); router.post("/pickup-pet", handlePickupPet); router.post("/execute-action", handleExecuteAction); -router.post("/remove-dropped-assets", handleRemoveAllPets); export default router; diff --git a/server/tsconfig.json b/server/tsconfig.json index 62215b6..f266e9a 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -27,7 +27,7 @@ /* Modules */ "module": "ESNext" /* Specify what module code is generated. */, // "rootDir": "./", /* Specify the root folder within your source files. */ - "moduleResolution": "Node" /* Specify how TypeScript looks up a file from a given module specifier. */, + "moduleResolution": "bundler" /* Specify how TypeScript looks up a file from a given module specifier. */, // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ @@ -56,6 +56,8 @@ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ "outDir": "./dist" /* Specify an output folder for all emitted files. */, + "rootDir": ".." /* Explicitly set the root directory to resolve common source directory error. */, + // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ diff --git a/server/utils/index.ts b/server/utils/index.ts index 2af9d32..0ad9c98 100644 --- a/server/utils/index.ts +++ b/server/utils/index.ts @@ -12,7 +12,6 @@ export * from "./getVisitorAndPetStatus.js"; export * from "./grantExpression.js"; export * from "./inventoryCache.js"; export * from "./performAction.js"; -export * from "./removeDroppedAssets.js"; export * from "./spawnPetNpc.js"; export * from "./standardizeError.js"; export * from "./topiaInit.js"; diff --git a/server/utils/removeDroppedAssets.ts b/server/utils/removeDroppedAssets.ts deleted file mode 100644 index b1a23d2..0000000 --- a/server/utils/removeDroppedAssets.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Credentials } from "../types/index.js"; -import { errorHandler } from "./errorHandler.js"; -import { World } from "./topiaInit.js"; - -export const removeDroppedAssets = async (credentials: Credentials, uniqueName: string = `petSystem-`) => { - try { - const { urlSlug } = credentials; - - const world = await World.create(urlSlug, { credentials }); - - const droppedAssets = await world.fetchDroppedAssetsWithUniqueName({ - uniqueName, - isPartial: true, - }); - - if (Object.keys(droppedAssets).length > 0) { - const droppedAssetIds: string[] = []; - for (const index in droppedAssets) { - if (droppedAssets[index].id) droppedAssetIds.push(droppedAssets[index].id); - } - await World.deleteDroppedAssets(urlSlug, droppedAssetIds, process.env.INTERACTIVE_SECRET!, credentials); - } - } catch (error) { - return errorHandler({ - error, - functionName: "removeDroppedAssets", - message: `Error retrieving assets with unique name petSystem-${credentials.username}`, - }); - } -}; diff --git a/shared/tsconfig.json b/shared/tsconfig.json index 1403392..e1b8b29 100644 --- a/shared/tsconfig.json +++ b/shared/tsconfig.json @@ -1,8 +1,8 @@ { "compilerOptions": { "target": "ESNext", - "module": "ESNext", - "moduleResolution": "node", + "module": "nodenext", + "moduleResolution": "nodenext", "declaration": true, "strict": true, "skipLibCheck": true,