Releases: maxentr/skyjo
Releases · maxentr/skyjo
v1.42.2
v1.42.1
What's Changed
Features
- Add Discord server link to the homepage and footer
Improvements
- Replace the feedback feature with a Discord link for better user engagement
Fixes
- Improve game state and key management in the Redis repository:
- Add TTL for game states (2 minutes)
- Enhance game deletion to ensure complete key removal
Full Changelog: v1.42.0...v1.42.1
v1.42.0
What's Changed
Features
- Implemented game state versioning and retrieval #96
- Enhanced the first player penalty display in game rules
- Integrated new game state versioning for better tracking of changes
Fixes
- Resolved issue where
firstPlayerFlatPenalty
could exceedscoreToEndGame
- Improved state change detection logic in state-operations
- Fixed SonarCloud errors
Improvements
- Simplified game round initiation logic with new helper methods
- Updated and refined round phase and status terminology
- Streamlined game status checks using dedicated methods
- Updated game deserialization to use the
SkyjoDbFormat
type
Chores
- Added launch configuration for debugging API in development mode
- Updated API debug launch configuration for better local testing
Refactors
- Moved state operations functions to the
@skyjo/state-operations
module - Typed
game
variable at its source in the cache layer - Renamed and improved methods for better clarity (e.g.,
haveAtLeastMinPlayersConnected
tohasMinPlayersConnected
) - Adjusted constants and logic to improve code readability and maintainability
CI
- Added versioning step for Vercel deployment
Style
- Fixed a French typo on the web interface
- Increased width of the input for the first player flat penalty for better usability
Translations
- Updated translation files with the latest changes #95
Full Changelog: v1.41.0...v1.42.0
v1.41.0
What's Changed
Features
- Allow updating max players after settings confirmation
Improvements
- Rename
game:settings
event togame:update-settings
for consistency
Fixes
- Always update admin on player disconnection
- Display kicked player's username in kick notifications on kick success
- Correctly apply penalty for tied scores
Tests
- Add
onWizz
functionality tests forChatService
Full Changelog: v1.40.0...v1.41.0
v1.40.0
What's Changed
Features
- Add penalty type and flat penalty game settings #94
- API: Implement rate limiting for feedback submissions
- Web: Enable admin control over maximum players in games
- Web: Prevent accidental game window closures with an alert.
Improvements
- Web: Default username to "Ano" when using the
/create
command without a username - Web: Open rules dialog instead of redirecting to
/rules
- Web: Enhance the rules page with a logo and call-to-action button
Fixes
- API: Remove ghost players after kicks by fixing the disconnection handling
- API: Prevent discrepancies when comparing basic fields, including dates, in
GameStateManager.ts
- API: Ensure admin privileges are required for game settings modifications, blocking changes post-confirmation
- Web: Establish a socket connection before creating a game
- Web: Update the confirmation message for game settings in the lobby
Refactoring
- API: Consolidate single settings update events into
game:settings
- API: Rename utility files for rate limiter consistency
- Core: Use native enums for
firstPlayerPenaltyType
in the update settings schema - Core: Rename and adjust fields for penalty configuration (
firstPlayerScorePenaltyMultiplier
,SKYJO_DEFAULT_SETTINGS
) - Web: Remove
InactivityCheck
component and related localization entries - Web: Improve
beforeunload
handling using a game status listener
Tests
- API: Add unit tests for
GameStateManager
and mock updates for Redis service
Style
- Web: Move public game creation to the search page header
Chores
- API: Exclude socket rate limiter from test coverage
Perf
- Web: Disable PostHog heatmaps
Full Changelog: v1.39.0...v1.40.0
v1.39.0
What's Changed
Features
- Implemented 'wizz' feature for player interaction
- Created dedicated game creation page
- Enhanced PWA manifest and added service worker
- Implemented Create and Search layouts with metadata generation, improving SEO
Improvements
- Updated sitemap to include new search and game creation routes, enhancing SEO and navigation
- Dynamically generated alternate languages to improve SEO
Fixes
- Corrected conditional rendering for
ReconnectGameButton.tsx
inGameLobbyButtons.tsx
component - Changed player connection status to "disconnected" in
handlePlayerDisconnection
function
Full Changelog: v1.38.0...v1.39.0
v1.38.0
What's Changed
Features
- Retry fetching public games on game join error
- Clear
gameCode
query param on join error from link - Add
onError
callback toJoinGameButton
component for improved error handling
Improvements
- Unify player disconnection logic from
leave
andkick player
functions
Chores
- Adjust PostHog configuration to exclude card events from tracking
Translations
Full Changelog: v1.37.0...v1.38.0
v1.37.0
What's Changed
Features
- Added
FindPublicGameButton
component for initiating public game search - Added
SearchPage
component for public game search functionality - Enhanced public game search functionality with tags filtering
- Added settings validation for public games
- Implemented rate limiter middleware for API requests
- Added rate limiting to public games endpoint
- Implemented socket rate limiting across chat, game, and lobby routers
- Added retry delay for fetching public games in
SearchPage
component
Improvements
- Simplified
GameLobbyButtons
by splitting each button into separate components - Consolidated game creation and game privacy settings logic:
- Removed
find game
routes - Updated private game creation to use a
private
boolean parameter - Disabled game privacy updates after creation
- Removed
- Separated
Socket.IO
API into a dedicated folder for better organization of HTTP REST andSocket.IO
endpoints - Improved
GameRepository
for safe retrieval of public games:- Excluded non-existent games from the public games sorted set
- Filtered out null games in the results
- Suppressed Seq logging for not found game in
getGameSafe
- Enhanced
create
,find
, andjoin
game button components to acceptclassName
- Enhanced dark mode support for
SearchPage
andTooltip
components
Fixes
- Disabled
FindPublicGameButton
when the socket is not connected - Disabled
FindPublicGameButton
if no username is provided and saved the username in local storage on click - Fixed display of setting validation warnings in the lobby, visible only to admins
- Prevented logging for first-time retrieval of a game with
stateVersion
as null
Performance
- Limited
socketContext
usage to root and game pages - Reduced the size of
.png
,.svg
, and.ico
assets - Reduced time-to-live of public games in the lobby to 4 minutes
Style
- Updated lobby title to "username's game"
- Enhanced dark mode support for
SearchPage
andTooltip
components
Chores
- Added
@tanstack/react-query
dependency - Added
rate-limiter-flexible
dependency - Fixed SonarQube issues
CI
- Fixed issues raised by SonarQube
Full Changelog: v1.36.0...v1.37.0
v1.36.0
What's Changed
Features
- web: Add tabs component to improve settings dialog organization (#85)
- web: Add game board size option in display settings (#88)
- web: Allow users to view game settings during a game (#89)
- web: Add tooltip with description for the multiplier-for-first-player setting
- web: Add toggle for card preview in opponents list for mobile view
Improvements
- web: Improve opponent selection UI visibility (#84)
- web: Add cards preview in opponents list (#84)
- web: Support light and dark color schemes in
themeColor
for viewport - web: Replace
next-pwa
with Next.js's built-in PWA support
Fixes
- web: Fix opponent selection index mismatch due to incorrect array reference (#84)
- web: Add default settings if not set in local storage during loading
- web: Fix translation string for waiting opponents to turn cards
- api: Handle null client state version in
GameService
by throwing an error with detailed context
Refactors
- web: Use tabs in settings dialog for better organization (#85)
- web: Add missing
key
prop in OpponentItem cards preview iterator - api: Rename
socketErrorHandlerWrapper
tosocketErrorWrapper
- api: Rename
isprotectedGame
toisPrivateGame
increateGame
method for clarity
Styles
- web: Adjust top positioning for GameInfo component to improve layout responsiveness
- web: Enhance opponents list display
- Highlight the currently selected opponent
- Indicate whose turn it is to play (#84)
Chores
- Update dependencies:
- web:
next-intl
, Next.js 15, React 19 - api: Remove unused
dayjs
dependency
- web:
- web: Update Node.js to 22.10.0 and
pnpm
to 9.14.4 in README and CI workflows - ci: Update pull request coverage workflow to exclude Weblate branch pattern
CI
- ci: Update Node.js and
pnpm
versions in workflows
Full Changelog: v1.35.0...v1.36.0
v1.35.0
What's Changed
Features
- Add link to the latest release on the home page
- Add stateVersion in Skyjo to manage users with outdated or corrupt game versions
- Add owl avatar
Fixes
- Bug on results page when a player quits at the end of the game
- Add second Redis update after
finishTurn
inonReplaceCard
andonTurnCard
functions ingame.service.ts
Improvements
- Increase socket server ping interval and decrease ping timeout
- Improve error handling in
SeqTransport
- Add randomization for tie-breaking the first player to start in the
Skyjo.ts
class - Enhanced Zod error handling
- Redirect user if timeout occurs in the lobby
Refactoring
- Update socket configuration
- Change
reconnectPlayer
error if game or player is not found - Allow external connection to Redis container in Docker Compose
Style
- Fix long chat message overflow for medium+ screen sizes
- Show the latest message if the mobile chat container is scrollable
- Correct French translation of chat notification size in settings
Translations
- Update translations from Hosted Weblate
Chores
- Refactor API and logging for better performance and reliability
Full Changelog: v1.34.0...v1.35.0