Updated express and express-session NPM packages to the latest version of v17, and updated the relevant @types NPM packages.
Added @types/connect-mongodb-session dev dependency to server.
Fixed tooltip typos in Create.vue and GameSettings.vue that incorrectly referred to "banking technology" instead of "specialist" technology for the Specialist Token Reward setting.
Updated tick() method in GameTickService to call buyScheduledInfrastructure() before the tick is incremented to ensure that the bulk purchase event is shown for the tick it was scheduled on, rather than the tick after.
Updated all controllers to ensure that next() is always called.
Added singleRoute() method and updated all controllers to use it. Prevents requests from falling through to other routes if the last route handler in the request calls next().
Concurrent request fix: - Added Mutex class. - Added GameMutexService class. - Added GamePlayerMutexService class. - Added PlayerMutexMiddleware class. - Added MutexLock, GameMutexLock and PlayerMutexLock classes. - Updated all request routes relating to player actions to use new mutex functionality in order to restrict simultaneous player operations within a game. - Updated handleError middleware to ensure that if a mutex was in use for that request, it will be released. - gameTick service now uses mutexes to ensure the same game will process the same tick twice.
Fixed keyHasNumberValue() method in helpers.js attempting to call .toString() on a potentially null or undefined value.
Updated some areas to use Typescript typings.
Fixed scheduled infrastructure purchases happening after the tick had been incremented (meaning that they would show in the event log as having happened on the tick after the one they were scheduled for).
Added check to _gameLoseCheck() in GameTickService to check for defeated players whose slots are open where they shouldn't be (eg where the player no longer owns any stars and carriers, or no longer owns their capital in capital elimination).
Updated ResetUsername.vue to update the username in local storage when a user changes their username. This fixes the issue where, when updating your username, the old one would display in the UI until you had logged out and back in.
@types
NPM packages.