@my-swu/simulator-client 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +355 -0
- package/dist/actionable.d.ts +61 -0
- package/dist/actionable.js +91 -0
- package/dist/client.d.ts +157 -0
- package/dist/client.js +92 -0
- package/dist/connection/handshake.d.ts +30 -0
- package/dist/connection/handshake.js +62 -0
- package/dist/connection/options.d.ts +36 -0
- package/dist/connection/options.js +1 -0
- package/dist/connection/url.d.ts +55 -0
- package/dist/connection/url.js +46 -0
- package/dist/connection/wait.d.ts +22 -0
- package/dist/connection/wait.js +10 -0
- package/dist/connection.d.ts +110 -0
- package/dist/connection.js +358 -0
- package/dist/generated/index.d.ts +121 -0
- package/dist/generated/index.js +1 -0
- package/dist/generated/public-types.d.ts +2 -0
- package/dist/generated/public-types.js +1 -0
- package/dist/generated/schemas.d.ts +27 -0
- package/dist/generated/schemas.js +21264 -0
- package/dist/generated/types/abandon-match-request.d.ts +1 -0
- package/dist/generated/types/abandon-match-request.js +2 -0
- package/dist/generated/types/abandon-match-response.d.ts +1 -0
- package/dist/generated/types/abandon-match-response.js +2 -0
- package/dist/generated/types/add-lobby-ai-player-request.d.ts +1 -0
- package/dist/generated/types/add-lobby-ai-player-request.js +2 -0
- package/dist/generated/types/ai-driver-error-report-list-response.d.ts +1 -0
- package/dist/generated/types/ai-driver-error-report-list-response.js +2 -0
- package/dist/generated/types/ai-driver-error-report-response.d.ts +1 -0
- package/dist/generated/types/ai-driver-error-report-response.js +2 -0
- package/dist/generated/types/api-error-response.d.ts +1 -0
- package/dist/generated/types/api-error-response.js +2 -0
- package/dist/generated/types/card-catalog-refresh-response.d.ts +1 -0
- package/dist/generated/types/card-catalog-refresh-response.js +2 -0
- package/dist/generated/types/cards-response.d.ts +1 -0
- package/dist/generated/types/cards-response.js +2 -0
- package/dist/generated/types/client-message.d.ts +1 -0
- package/dist/generated/types/client-message.js +2 -0
- package/dist/generated/types/close-tournament-room-request.d.ts +1 -0
- package/dist/generated/types/close-tournament-room-request.js +2 -0
- package/dist/generated/types/common.d.ts +5361 -0
- package/dist/generated/types/common.js +2 -0
- package/dist/generated/types/covered-cards-response.d.ts +47 -0
- package/dist/generated/types/covered-cards-response.js +2 -0
- package/dist/generated/types/create-limited-event-request.d.ts +1 -0
- package/dist/generated/types/create-limited-event-request.js +2 -0
- package/dist/generated/types/create-lobby-request.d.ts +1 -0
- package/dist/generated/types/create-lobby-request.js +2 -0
- package/dist/generated/types/create-match-request.d.ts +1 -0
- package/dist/generated/types/create-match-request.js +2 -0
- package/dist/generated/types/create-meta-window-request.d.ts +1 -0
- package/dist/generated/types/create-meta-window-request.js +2 -0
- package/dist/generated/types/create-tournament-room-request.d.ts +1 -0
- package/dist/generated/types/create-tournament-room-request.js +2 -0
- package/dist/generated/types/create-tournament-table-request.d.ts +1 -0
- package/dist/generated/types/create-tournament-table-request.js +2 -0
- package/dist/generated/types/error-payload.d.ts +1 -0
- package/dist/generated/types/error-payload.js +2 -0
- package/dist/generated/types/format-event-request.d.ts +1 -0
- package/dist/generated/types/format-event-request.js +2 -0
- package/dist/generated/types/format-event-response.d.ts +1 -0
- package/dist/generated/types/format-event-response.js +2 -0
- package/dist/generated/types/game-command.d.ts +1 -0
- package/dist/generated/types/game-command.js +2 -0
- package/dist/generated/types/game-event.d.ts +1 -0
- package/dist/generated/types/game-event.js +2 -0
- package/dist/generated/types/game-state.d.ts +1 -0
- package/dist/generated/types/game-state.js +2 -0
- package/dist/generated/types/get-match-response.d.ts +1 -0
- package/dist/generated/types/get-match-response.js +2 -0
- package/dist/generated/types/health-response.d.ts +1 -0
- package/dist/generated/types/health-response.js +2 -0
- package/dist/generated/types/join-limited-event-request.d.ts +1 -0
- package/dist/generated/types/join-limited-event-request.js +2 -0
- package/dist/generated/types/join-lobby-request.d.ts +1 -0
- package/dist/generated/types/join-lobby-request.js +2 -0
- package/dist/generated/types/join-match-request.d.ts +1 -0
- package/dist/generated/types/join-match-request.js +2 -0
- package/dist/generated/types/join-tournament-room-request.d.ts +1 -0
- package/dist/generated/types/join-tournament-room-request.js +2 -0
- package/dist/generated/types/join-tournament-table-request.d.ts +1 -0
- package/dist/generated/types/join-tournament-table-request.js +2 -0
- package/dist/generated/types/kick-lobby-player-request.d.ts +1 -0
- package/dist/generated/types/kick-lobby-player-request.js +2 -0
- package/dist/generated/types/kick-lobby-spectator-request.d.ts +1 -0
- package/dist/generated/types/kick-lobby-spectator-request.js +2 -0
- package/dist/generated/types/leave-lobby-request.d.ts +1 -0
- package/dist/generated/types/leave-lobby-request.js +2 -0
- package/dist/generated/types/leave-match-request.d.ts +1 -0
- package/dist/generated/types/leave-match-request.js +2 -0
- package/dist/generated/types/leave-match-response.d.ts +1 -0
- package/dist/generated/types/leave-match-response.js +2 -0
- package/dist/generated/types/leave-tournament-room-request.d.ts +1 -0
- package/dist/generated/types/leave-tournament-room-request.js +2 -0
- package/dist/generated/types/limited-event-access-response.d.ts +1 -0
- package/dist/generated/types/limited-event-access-response.js +2 -0
- package/dist/generated/types/limited-event-command-request.d.ts +1 -0
- package/dist/generated/types/limited-event-command-request.js +2 -0
- package/dist/generated/types/limited-event-preflight-response.d.ts +1 -0
- package/dist/generated/types/limited-event-preflight-response.js +2 -0
- package/dist/generated/types/limited-event-response.d.ts +1 -0
- package/dist/generated/types/limited-event-response.js +2 -0
- package/dist/generated/types/list-active-ai-matches-request.d.ts +1 -0
- package/dist/generated/types/list-active-ai-matches-request.js +2 -0
- package/dist/generated/types/list-active-ai-matches-response.d.ts +1 -0
- package/dist/generated/types/list-active-ai-matches-response.js +2 -0
- package/dist/generated/types/lobby-access-response.d.ts +1 -0
- package/dist/generated/types/lobby-access-response.js +2 -0
- package/dist/generated/types/lobby-chat-request.d.ts +1 -0
- package/dist/generated/types/lobby-chat-request.js +2 -0
- package/dist/generated/types/lobby-chat-response.d.ts +1 -0
- package/dist/generated/types/lobby-chat-response.js +2 -0
- package/dist/generated/types/lobby-list-response.d.ts +1 -0
- package/dist/generated/types/lobby-list-response.js +2 -0
- package/dist/generated/types/lobby-list-server-message.d.ts +1 -0
- package/dist/generated/types/lobby-list-server-message.js +2 -0
- package/dist/generated/types/lobby-matchmaking-decision-request.d.ts +1 -0
- package/dist/generated/types/lobby-matchmaking-decision-request.js +2 -0
- package/dist/generated/types/lobby-matchmaking-request.d.ts +1 -0
- package/dist/generated/types/lobby-matchmaking-request.js +2 -0
- package/dist/generated/types/lobby-response.d.ts +1 -0
- package/dist/generated/types/lobby-response.js +2 -0
- package/dist/generated/types/lobby-server-message.d.ts +1 -0
- package/dist/generated/types/lobby-server-message.js +2 -0
- package/dist/generated/types/lobby-sync-request.d.ts +1 -0
- package/dist/generated/types/lobby-sync-request.js +2 -0
- package/dist/generated/types/match-access-response.d.ts +1 -0
- package/dist/generated/types/match-access-response.js +2 -0
- package/dist/generated/types/match-chat-lookup-response.d.ts +1 -0
- package/dist/generated/types/match-chat-lookup-response.js +2 -0
- package/dist/generated/types/match-connection-role.d.ts +1 -0
- package/dist/generated/types/match-connection-role.js +2 -0
- package/dist/generated/types/match-history-deck-stats-request.d.ts +1 -0
- package/dist/generated/types/match-history-deck-stats-request.js +2 -0
- package/dist/generated/types/match-history-deck-stats-response.d.ts +1 -0
- package/dist/generated/types/match-history-deck-stats-response.js +2 -0
- package/dist/generated/types/match-history-entry.d.ts +1 -0
- package/dist/generated/types/match-history-entry.js +2 -0
- package/dist/generated/types/match-history-list-request.d.ts +1 -0
- package/dist/generated/types/match-history-list-request.js +2 -0
- package/dist/generated/types/match-history-list-response.d.ts +1 -0
- package/dist/generated/types/match-history-list-response.js +2 -0
- package/dist/generated/types/match-history-replay-request.d.ts +1 -0
- package/dist/generated/types/match-history-replay-request.js +2 -0
- package/dist/generated/types/match-history-replay-response.d.ts +1 -0
- package/dist/generated/types/match-history-replay-response.js +2 -0
- package/dist/generated/types/match-history-restore-request.d.ts +1 -0
- package/dist/generated/types/match-history-restore-request.js +2 -0
- package/dist/generated/types/match-save-payload.d.ts +1 -0
- package/dist/generated/types/match-save-payload.js +2 -0
- package/dist/generated/types/match-spectator-access-response.d.ts +1 -0
- package/dist/generated/types/match-spectator-access-response.js +2 -0
- package/dist/generated/types/meta-window.d.ts +1 -0
- package/dist/generated/types/meta-window.js +2 -0
- package/dist/generated/types/meta-windows-response.d.ts +1 -0
- package/dist/generated/types/meta-windows-response.js +2 -0
- package/dist/generated/types/prepare-lobby-limited-ai-decks-request.d.ts +1 -0
- package/dist/generated/types/prepare-lobby-limited-ai-decks-request.js +2 -0
- package/dist/generated/types/random-lobby-matchmaking-request.d.ts +173 -0
- package/dist/generated/types/random-lobby-matchmaking-request.js +2 -0
- package/dist/generated/types/ranked-admin-status.d.ts +1 -0
- package/dist/generated/types/ranked-admin-status.js +2 -0
- package/dist/generated/types/ranked-leaderboard-entry.d.ts +1 -0
- package/dist/generated/types/ranked-leaderboard-entry.js +2 -0
- package/dist/generated/types/ranked-leaderboard-query.d.ts +1 -0
- package/dist/generated/types/ranked-leaderboard-query.js +2 -0
- package/dist/generated/types/ranked-leaderboard-response.d.ts +1 -0
- package/dist/generated/types/ranked-leaderboard-response.js +2 -0
- package/dist/generated/types/ranked-matchmaking-request.d.ts +137 -0
- package/dist/generated/types/ranked-matchmaking-request.js +2 -0
- package/dist/generated/types/ranked-matchmaking-view.d.ts +1 -0
- package/dist/generated/types/ranked-matchmaking-view.js +2 -0
- package/dist/generated/types/ranked-profile-request.d.ts +1 -0
- package/dist/generated/types/ranked-profile-request.js +2 -0
- package/dist/generated/types/ranked-profile-response.d.ts +1 -0
- package/dist/generated/types/ranked-profile-response.js +2 -0
- package/dist/generated/types/ranked-queue.d.ts +1 -0
- package/dist/generated/types/ranked-queue.js +2 -0
- package/dist/generated/types/ready-tournament-table-request.d.ts +7 -0
- package/dist/generated/types/ready-tournament-table-request.js +2 -0
- package/dist/generated/types/rematch-match-request.d.ts +1 -0
- package/dist/generated/types/rematch-match-request.js +2 -0
- package/dist/generated/types/rematch-match-response.d.ts +1 -0
- package/dist/generated/types/rematch-match-response.js +2 -0
- package/dist/generated/types/resolve-card-ids-request.d.ts +1 -0
- package/dist/generated/types/resolve-card-ids-request.js +2 -0
- package/dist/generated/types/resolve-card-ids-response.d.ts +1 -0
- package/dist/generated/types/resolve-card-ids-response.js +2 -0
- package/dist/generated/types/restore-history-response.d.ts +1 -0
- package/dist/generated/types/restore-history-response.js +2 -0
- package/dist/generated/types/restore-match-save-request.d.ts +1 -0
- package/dist/generated/types/restore-match-save-request.js +2 -0
- package/dist/generated/types/restore-match-save-response.d.ts +1 -0
- package/dist/generated/types/restore-match-save-response.js +2 -0
- package/dist/generated/types/return-lobby-match-request.d.ts +1 -0
- package/dist/generated/types/return-lobby-match-request.js +2 -0
- package/dist/generated/types/return-tournament-match-request.d.ts +1 -0
- package/dist/generated/types/return-tournament-match-request.js +2 -0
- package/dist/generated/types/save-match-request.d.ts +1 -0
- package/dist/generated/types/save-match-request.js +2 -0
- package/dist/generated/types/server-message.d.ts +1 -0
- package/dist/generated/types/server-message.js +2 -0
- package/dist/generated/types/set-ai-paused-request.d.ts +1 -0
- package/dist/generated/types/set-ai-paused-request.js +2 -0
- package/dist/generated/types/set-ai-paused-response.d.ts +1 -0
- package/dist/generated/types/set-ai-paused-response.js +2 -0
- package/dist/generated/types/set-ranked-admission-request.d.ts +1 -0
- package/dist/generated/types/set-ranked-admission-request.js +2 -0
- package/dist/generated/types/set-simulator-maintenance-request.d.ts +1 -0
- package/dist/generated/types/set-simulator-maintenance-request.js +2 -0
- package/dist/generated/types/simulator-admin-status-response.d.ts +1 -0
- package/dist/generated/types/simulator-admin-status-response.js +2 -0
- package/dist/generated/types/simulator-availability-response.d.ts +1 -0
- package/dist/generated/types/simulator-availability-response.js +2 -0
- package/dist/generated/types/simulator-report-list-response.d.ts +1 -0
- package/dist/generated/types/simulator-report-list-response.js +2 -0
- package/dist/generated/types/simulator-report-response.d.ts +1 -0
- package/dist/generated/types/simulator-report-response.js +2 -0
- package/dist/generated/types/spectate-lobby-request.d.ts +1 -0
- package/dist/generated/types/spectate-lobby-request.js +2 -0
- package/dist/generated/types/spectate-match-request.d.ts +1 -0
- package/dist/generated/types/spectate-match-request.js +2 -0
- package/dist/generated/types/start-lobby-limited-match-request.d.ts +1 -0
- package/dist/generated/types/start-lobby-limited-match-request.js +2 -0
- package/dist/generated/types/start-lobby-request.d.ts +1 -0
- package/dist/generated/types/start-lobby-request.js +2 -0
- package/dist/generated/types/start-tournament-event-request.d.ts +1 -0
- package/dist/generated/types/start-tournament-event-request.js +2 -0
- package/dist/generated/types/stats-response.d.ts +5 -0
- package/dist/generated/types/stats-response.js +2 -0
- package/dist/generated/types/submit-lobby-limited-deck-request.d.ts +1 -0
- package/dist/generated/types/submit-lobby-limited-deck-request.js +2 -0
- package/dist/generated/types/submit-match-deck-request.d.ts +1 -0
- package/dist/generated/types/submit-match-deck-request.js +2 -0
- package/dist/generated/types/submit-match-deck-response.d.ts +1 -0
- package/dist/generated/types/submit-match-deck-response.js +2 -0
- package/dist/generated/types/submit-tournament-deck-request.d.ts +1 -0
- package/dist/generated/types/submit-tournament-deck-request.js +2 -0
- package/dist/generated/types/tournament-event-command-request.d.ts +1 -0
- package/dist/generated/types/tournament-event-command-request.js +2 -0
- package/dist/generated/types/tournament-room-access-response.d.ts +1 -0
- package/dist/generated/types/tournament-room-access-response.js +2 -0
- package/dist/generated/types/tournament-room-chat-request.d.ts +1 -0
- package/dist/generated/types/tournament-room-chat-request.js +2 -0
- package/dist/generated/types/tournament-room-chat-response.d.ts +1 -0
- package/dist/generated/types/tournament-room-chat-response.js +2 -0
- package/dist/generated/types/tournament-room-list-response.d.ts +1 -0
- package/dist/generated/types/tournament-room-list-response.js +2 -0
- package/dist/generated/types/tournament-room-response.d.ts +1 -0
- package/dist/generated/types/tournament-room-response.js +2 -0
- package/dist/generated/types/tournament-room-server-message.d.ts +1 -0
- package/dist/generated/types/tournament-room-server-message.js +2 -0
- package/dist/generated/types/tournament-room-sync-request.d.ts +1 -0
- package/dist/generated/types/tournament-room-sync-request.js +2 -0
- package/dist/generated/types/undo-match-request.d.ts +1 -0
- package/dist/generated/types/undo-match-request.js +2 -0
- package/dist/generated/types/undo-match-response.d.ts +1 -0
- package/dist/generated/types/undo-match-response.js +2 -0
- package/dist/generated/types/undo-respond-match-request.d.ts +1 -0
- package/dist/generated/types/undo-respond-match-request.js +2 -0
- package/dist/generated/types/update-lobby-ai-player-request.d.ts +1 -0
- package/dist/generated/types/update-lobby-ai-player-request.js +2 -0
- package/dist/generated/types/update-lobby-player-request.d.ts +1 -0
- package/dist/generated/types/update-lobby-player-request.js +2 -0
- package/dist/generated/types/update-lobby-settings-request.d.ts +1 -0
- package/dist/generated/types/update-lobby-settings-request.js +2 -0
- package/dist/generated/types/update-tournament-room-player-request.d.ts +1 -0
- package/dist/generated/types/update-tournament-room-player-request.js +2 -0
- package/dist/generated/types/update-tournament-room-settings-request.d.ts +1 -0
- package/dist/generated/types/update-tournament-room-settings-request.js +2 -0
- package/dist/generated/types/update-tournament-table-deck-request.d.ts +123 -0
- package/dist/generated/types/update-tournament-table-deck-request.js +2 -0
- package/dist/generated/types/welcome-payload.d.ts +1 -0
- package/dist/generated/types/welcome-payload.js +2 -0
- package/dist/generated/version.d.ts +16 -0
- package/dist/generated/version.js +16 -0
- package/dist/http/abort.d.ts +57 -0
- package/dist/http/abort.js +60 -0
- package/dist/http/json.d.ts +13 -0
- package/dist/http/json.js +24 -0
- package/dist/http/options.d.ts +40 -0
- package/dist/http/options.js +1 -0
- package/dist/http/request.d.ts +64 -0
- package/dist/http/request.js +182 -0
- package/dist/http/validated-json.d.ts +9 -0
- package/dist/http/validated-json.js +14 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.js +10 -0
- package/dist/internal/abort-error.d.ts +91 -0
- package/dist/internal/abort-error.js +62 -0
- package/dist/internal/authenticated-socket-session.d.ts +63 -0
- package/dist/internal/authenticated-socket-session.js +170 -0
- package/dist/internal/emitter.d.ts +18 -0
- package/dist/internal/emitter.js +34 -0
- package/dist/internal/errors.d.ts +233 -0
- package/dist/internal/errors.js +238 -0
- package/dist/internal/limits.d.ts +13 -0
- package/dist/internal/limits.js +13 -0
- package/dist/internal/reconnect-backoff.d.ts +33 -0
- package/dist/internal/reconnect-backoff.js +25 -0
- package/dist/internal/socket-frame.d.ts +43 -0
- package/dist/internal/socket-frame.js +47 -0
- package/dist/internal/transport.d.ts +78 -0
- package/dist/internal/transport.js +18 -0
- package/dist/internal/websocket-event.d.ts +15 -0
- package/dist/internal/websocket-event.js +31 -0
- package/dist/local/assets.d.ts +96 -0
- package/dist/local/assets.js +235 -0
- package/dist/local/client.d.ts +32 -0
- package/dist/local/client.js +211 -0
- package/dist/local/engine.d.ts +79 -0
- package/dist/local/engine.js +6 -0
- package/dist/local/index.d.ts +20 -0
- package/dist/local/index.js +17 -0
- package/dist/local/offline-engine.d.ts +46 -0
- package/dist/local/offline-engine.js +74 -0
- package/dist/local/protocol.d.ts +95 -0
- package/dist/local/protocol.js +10 -0
- package/dist/local/routing.d.ts +52 -0
- package/dist/local/routing.js +193 -0
- package/dist/local/server/ai-scheduler.d.ts +31 -0
- package/dist/local/server/ai-scheduler.js +93 -0
- package/dist/local/server/http-router.d.ts +35 -0
- package/dist/local/server/http-router.js +185 -0
- package/dist/local/server/index.d.ts +16 -0
- package/dist/local/server/index.js +140 -0
- package/dist/local/server/sockets.d.ts +25 -0
- package/dist/local/server/sockets.js +141 -0
- package/dist/local/wasm-engine.d.ts +61 -0
- package/dist/local/wasm-engine.js +63 -0
- package/dist/local/worker-boot.d.ts +17 -0
- package/dist/local/worker-boot.js +76 -0
- package/dist/local/worker.d.ts +6 -0
- package/dist/local/worker.js +9 -0
- package/dist/match-session/access.d.ts +6 -0
- package/dist/match-session/access.js +8 -0
- package/dist/match-session/controller.d.ts +63 -0
- package/dist/match-session/controller.js +513 -0
- package/dist/match-session/errors.d.ts +3 -0
- package/dist/match-session/errors.js +34 -0
- package/dist/match-session/methods.d.ts +433 -0
- package/dist/match-session/methods.js +1 -0
- package/dist/match-session/session-state.d.ts +235 -0
- package/dist/match-session/session-state.js +1 -0
- package/dist/match-session/types.d.ts +56 -0
- package/dist/match-session/types.js +1 -0
- package/dist/match-session.d.ts +3 -0
- package/dist/match-session.js +1 -0
- package/dist/messages.d.ts +195 -0
- package/dist/messages.js +240 -0
- package/dist/resources/admin.d.ts +63 -0
- package/dist/resources/admin.js +75 -0
- package/dist/resources/card-deck-json.d.ts +11 -0
- package/dist/resources/card-deck-json.js +164 -0
- package/dist/resources/card-resolution.d.ts +9 -0
- package/dist/resources/card-resolution.js +21 -0
- package/dist/resources/card-resource.d.ts +157 -0
- package/dist/resources/card-resource.js +28 -0
- package/dist/resources/card-types.d.ts +203 -0
- package/dist/resources/card-types.js +1 -0
- package/dist/resources/cards.d.ts +3 -0
- package/dist/resources/cards.js +1 -0
- package/dist/resources/limited-event-types.d.ts +252 -0
- package/dist/resources/limited-event-types.js +1 -0
- package/dist/resources/limited-events.d.ts +7 -0
- package/dist/resources/limited-events.js +49 -0
- package/dist/resources/lobbies.d.ts +53 -0
- package/dist/resources/lobbies.js +50 -0
- package/dist/resources/lobby-list-session.d.ts +13 -0
- package/dist/resources/lobby-list-session.js +198 -0
- package/dist/resources/lobby-session.d.ts +9 -0
- package/dist/resources/lobby-session.js +59 -0
- package/dist/resources/lobby-types.d.ts +357 -0
- package/dist/resources/lobby-types.js +1 -0
- package/dist/resources/match-history.d.ts +49 -0
- package/dist/resources/match-history.js +34 -0
- package/dist/resources/match-types.d.ts +448 -0
- package/dist/resources/match-types.js +1 -0
- package/dist/resources/matches.d.ts +16 -0
- package/dist/resources/matches.js +109 -0
- package/dist/resources/ranked.d.ts +24 -0
- package/dist/resources/ranked.js +47 -0
- package/dist/resources/session.d.ts +62 -0
- package/dist/resources/session.js +26 -0
- package/dist/resources/system.d.ts +51 -0
- package/dist/resources/system.js +9 -0
- package/dist/resources/tournament-room-session.d.ts +9 -0
- package/dist/resources/tournament-room-session.js +53 -0
- package/dist/resources/tournament-room-types.d.ts +44 -0
- package/dist/resources/tournament-room-types.js +1 -0
- package/dist/resources/tournament-rooms.d.ts +33 -0
- package/dist/resources/tournament-rooms.js +33 -0
- package/dist/session.d.ts +56 -0
- package/dist/session.js +1 -0
- package/dist/types.d.ts +73 -0
- package/dist/types.js +27 -0
- package/dist/validators/ajv.d.ts +51 -0
- package/dist/validators/ajv.js +121 -0
- package/dist/validators/discriminants.d.ts +36 -0
- package/dist/validators/discriminants.js +89 -0
- package/dist/validators/validator.d.ts +73 -0
- package/dist/validators/validator.js +26 -0
- package/dist/validators/warm-up.d.ts +25 -0
- package/dist/validators/warm-up.js +59 -0
- package/dist/validators.d.ts +173 -0
- package/dist/validators.js +85 -0
- package/package.json +88 -0
- package/schema/abandon-match-request.schema.json +15 -0
- package/schema/abandon-match-response.schema.json +15 -0
- package/schema/add-lobby-ai-player-request.schema.json +53 -0
- package/schema/api-error-response.schema.json +13 -0
- package/schema/card-catalog-refresh-response.schema.json +31 -0
- package/schema/cards-response.schema.json +17 -0
- package/schema/client-message.schema.json +203 -0
- package/schema/close-tournament-room-request.schema.json +18 -0
- package/schema/common.schema.json +14129 -0
- package/schema/create-limited-event-request.schema.json +60 -0
- package/schema/create-lobby-request.schema.json +67 -0
- package/schema/create-match-request.schema.json +124 -0
- package/schema/create-meta-window-request.schema.json +27 -0
- package/schema/create-tournament-room-request.schema.json +104 -0
- package/schema/create-tournament-table-request.schema.json +14 -0
- package/schema/error-payload.schema.json +34 -0
- package/schema/format-event-request.schema.json +20 -0
- package/schema/format-event-response.schema.json +15 -0
- package/schema/game-command.schema.json +775 -0
- package/schema/game-event.schema.json +2012 -0
- package/schema/game-state.schema.json +273 -0
- package/schema/get-match-response.schema.json +13 -0
- package/schema/health-response.schema.json +13 -0
- package/schema/join-limited-event-request.schema.json +6 -0
- package/schema/join-lobby-request.schema.json +40 -0
- package/schema/join-match-request.schema.json +79 -0
- package/schema/join-tournament-room-request.schema.json +39 -0
- package/schema/join-tournament-table-request.schema.json +14 -0
- package/schema/kick-lobby-player-request.schema.json +13 -0
- package/schema/kick-lobby-spectator-request.schema.json +14 -0
- package/schema/leave-lobby-request.schema.json +13 -0
- package/schema/leave-match-request.schema.json +15 -0
- package/schema/leave-match-response.schema.json +15 -0
- package/schema/leave-tournament-room-request.schema.json +14 -0
- package/schema/limited-event-access-response.schema.json +34 -0
- package/schema/limited-event-command-request.schema.json +20 -0
- package/schema/limited-event-preflight-response.schema.json +25 -0
- package/schema/limited-event-response.schema.json +15 -0
- package/schema/list-active-ai-matches-request.schema.json +23 -0
- package/schema/list-active-ai-matches-response.schema.json +17 -0
- package/schema/lobby-access-response.schema.json +31 -0
- package/schema/lobby-chat-request.schema.json +17 -0
- package/schema/lobby-chat-response.schema.json +17 -0
- package/schema/lobby-list-response.schema.json +16 -0
- package/schema/lobby-list-server-message.schema.json +49 -0
- package/schema/lobby-matchmaking-decision-request.schema.json +13 -0
- package/schema/lobby-matchmaking-request.schema.json +80 -0
- package/schema/lobby-response.schema.json +13 -0
- package/schema/lobby-server-message.schema.json +155 -0
- package/schema/lobby-sync-request.schema.json +13 -0
- package/schema/manifest.json +124 -0
- package/schema/match-access-response.schema.json +32 -0
- package/schema/match-chat-lookup-response.schema.json +34 -0
- package/schema/match-connection-role.schema.json +9 -0
- package/schema/match-history-deck-stats-request.schema.json +26 -0
- package/schema/match-history-deck-stats-response.schema.json +17 -0
- package/schema/match-history-entry.schema.json +78 -0
- package/schema/match-history-list-request.schema.json +48 -0
- package/schema/match-history-list-response.schema.json +25 -0
- package/schema/match-history-replay-request.schema.json +17 -0
- package/schema/match-history-replay-response.schema.json +14 -0
- package/schema/match-history-restore-request.schema.json +23 -0
- package/schema/match-save-payload.schema.json +71 -0
- package/schema/match-spectator-access-response.schema.json +22 -0
- package/schema/meta-window.schema.json +37 -0
- package/schema/meta-windows-response.schema.json +24 -0
- package/schema/prepare-lobby-limited-ai-decks-request.schema.json +14 -0
- package/schema/ranked-admin-status.schema.json +43 -0
- package/schema/ranked-leaderboard-entry.schema.json +61 -0
- package/schema/ranked-leaderboard-query.schema.json +34 -0
- package/schema/ranked-leaderboard-response.schema.json +23 -0
- package/schema/ranked-matchmaking-view.schema.json +15 -0
- package/schema/ranked-profile-request.schema.json +21 -0
- package/schema/ranked-profile-response.schema.json +59 -0
- package/schema/ranked-queue.schema.json +12 -0
- package/schema/rematch-match-request.schema.json +20 -0
- package/schema/rematch-match-response.schema.json +61 -0
- package/schema/resolve-card-ids-request.schema.json +17 -0
- package/schema/resolve-card-ids-response.schema.json +16 -0
- package/schema/restore-history-response.schema.json +15 -0
- package/schema/restore-match-save-request.schema.json +20 -0
- package/schema/restore-match-save-response.schema.json +29 -0
- package/schema/return-lobby-match-request.schema.json +13 -0
- package/schema/return-tournament-match-request.schema.json +14 -0
- package/schema/route-manifest.json +1014 -0
- package/schema/save-match-request.schema.json +15 -0
- package/schema/server-message.schema.json +192 -0
- package/schema/set-ai-paused-request.schema.json +19 -0
- package/schema/set-ai-paused-response.schema.json +18 -0
- package/schema/set-ranked-admission-request.schema.json +15 -0
- package/schema/set-simulator-maintenance-request.schema.json +20 -0
- package/schema/simulator-admin-status-response.schema.json +37 -0
- package/schema/simulator-availability-response.schema.json +27 -0
- package/schema/simulator-report-list-response.schema.json +23 -0
- package/schema/simulator-report-response.schema.json +77 -0
- package/schema/spectate-lobby-request.schema.json +32 -0
- package/schema/spectate-match-request.schema.json +32 -0
- package/schema/start-lobby-limited-match-request.schema.json +13 -0
- package/schema/start-lobby-request.schema.json +13 -0
- package/schema/start-tournament-event-request.schema.json +14 -0
- package/schema/submit-lobby-limited-deck-request.schema.json +33 -0
- package/schema/submit-match-deck-request.schema.json +45 -0
- package/schema/submit-match-deck-response.schema.json +14 -0
- package/schema/submit-tournament-deck-request.schema.json +34 -0
- package/schema/tournament-event-command-request.schema.json +18 -0
- package/schema/tournament-room-access-response.schema.json +32 -0
- package/schema/tournament-room-chat-request.schema.json +18 -0
- package/schema/tournament-room-chat-response.schema.json +18 -0
- package/schema/tournament-room-list-response.schema.json +17 -0
- package/schema/tournament-room-response.schema.json +14 -0
- package/schema/tournament-room-server-message.schema.json +127 -0
- package/schema/tournament-room-sync-request.schema.json +14 -0
- package/schema/undo-match-request.schema.json +14 -0
- package/schema/undo-match-response.schema.json +14 -0
- package/schema/undo-respond-match-request.schema.json +19 -0
- package/schema/update-lobby-ai-player-request.schema.json +65 -0
- package/schema/update-lobby-player-request.schema.json +81 -0
- package/schema/update-lobby-settings-request.schema.json +70 -0
- package/schema/update-tournament-room-player-request.schema.json +45 -0
- package/schema/update-tournament-room-settings-request.schema.json +33 -0
- package/schema/welcome-payload.schema.json +38 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { AuthenticatedSocketSessionController, authenticatedSocketUrl, } from '../internal/authenticated-socket-session.js';
|
|
2
|
+
import { simulatorSocketErrorPayload } from '../internal/errors.js';
|
|
3
|
+
export function createLobbySession(options) {
|
|
4
|
+
return new LobbySessionController({
|
|
5
|
+
access: normalizeLobbyAccess(options.access),
|
|
6
|
+
webSocketFactory: options.webSocketFactory,
|
|
7
|
+
wsUrl: options.wsUrl,
|
|
8
|
+
...(options.validate == null ? {} : { validate: options.validate }),
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
function normalizeLobbyAccess(access) {
|
|
12
|
+
return {
|
|
13
|
+
lobbyId: access.lobbyId,
|
|
14
|
+
playerToken: access.playerToken,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
class LobbySessionController extends AuthenticatedSocketSessionController {
|
|
18
|
+
constructor(options) {
|
|
19
|
+
super({
|
|
20
|
+
messageSchema: 'lobby-server-message',
|
|
21
|
+
playerToken: options.access.playerToken,
|
|
22
|
+
socketError: info => simulatorSocketErrorPayload(info),
|
|
23
|
+
socketUrl: authenticatedSocketUrl(options.wsUrl, `lobbies/${encodeURIComponent(options.access.lobbyId)}`),
|
|
24
|
+
webSocketFactory: options.webSocketFactory,
|
|
25
|
+
...(options.validate == null ? {} : { validate: options.validate }),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
handleServerMessage(message) {
|
|
29
|
+
switch (message.type) {
|
|
30
|
+
case 'welcome':
|
|
31
|
+
this.emit('welcome', message.payload);
|
|
32
|
+
break;
|
|
33
|
+
case 'snapshot':
|
|
34
|
+
this.setSnapshot(message.payload);
|
|
35
|
+
break;
|
|
36
|
+
case 'matchmakingRelocated':
|
|
37
|
+
this.emit('matchmakingRelocated', message.payload);
|
|
38
|
+
break;
|
|
39
|
+
case 'chatMessage':
|
|
40
|
+
this.emit('chatMessage', message.payload);
|
|
41
|
+
break;
|
|
42
|
+
case 'playerPresence':
|
|
43
|
+
this.emit('playerPresence', message.payload);
|
|
44
|
+
break;
|
|
45
|
+
case 'started':
|
|
46
|
+
this.emit('started', undefined);
|
|
47
|
+
break;
|
|
48
|
+
case 'kicked':
|
|
49
|
+
this.emit('kicked', message.payload);
|
|
50
|
+
break;
|
|
51
|
+
case 'error':
|
|
52
|
+
this.pushError(message.payload);
|
|
53
|
+
break;
|
|
54
|
+
case 'pong':
|
|
55
|
+
this.emit('pong', message.payload);
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
import type { AddLobbyAiPlayerRequest, ErrorPayload, JoinLobbyRequest, KickLobbyPlayerRequest, KickLobbySpectatorRequest, LeaveLobbyRequest, LobbyChatRequest, LobbyMatchmakingDecisionRequest, LobbySyncRequest, PrepareLobbyLimitedAiDecksRequest, ReturnLobbyMatchRequest, SpectateLobbyRequest, StartLobbyLimitedMatchRequest, StartLobbyRequest, SubmitLobbyLimitedDeckRequest, UpdateLobbyAiPlayerRequest, UpdateLobbyPlayerRequest } from '../generated/index.js';
|
|
2
|
+
import type { LobbyChatMessage, LobbyDeckPreview, LobbyDeckSetPreview, LobbyMatchmakingKind as GeneratedLobbyMatchmakingKind, LobbyParticipantRole, LobbyPlayerController, LobbyPlayerView, LobbyPrivateAiPlayerView, LobbyPrivateView, LobbySpectatorView, LobbyStartedAccess, LobbyStatus, LobbyVisibility, PlayerPresenceStatus, RoomPlayerPresenceEvent } from '../generated/types/lobby-access-response.js';
|
|
3
|
+
import type { LobbyKickedPayload, LobbyRemovalReason } from '../generated/types/lobby-server-message.js';
|
|
4
|
+
import type { HistoryIdentityInput } from '../generated/types/match-history-list-request.js';
|
|
5
|
+
import type { ConnectionState, PongPayload } from '../session.js';
|
|
6
|
+
import type { ConstructedFormat, FormatSetupInput, LimitedEventKind, MatchFormat } from '../types.js';
|
|
7
|
+
import type { DeckInput } from './card-types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Wire shapes the generator owns, re-exported under their public SDK names.
|
|
10
|
+
*
|
|
11
|
+
* Each name below used to be declared here by hand *next to* the generated
|
|
12
|
+
* declaration of the same shape — two sources of truth for one contract, which
|
|
13
|
+
* stays invisible for exactly as long as the two copies happen to agree, and
|
|
14
|
+
* silently diverges the first time a field is added on one side only. The
|
|
15
|
+
* lobby lifecycle enums (`LobbyStatus`, `LobbyVisibility`, `LobbyRemovalReason`,
|
|
16
|
+
* …) were additionally recovered through indexed access on a response type
|
|
17
|
+
* (`LobbyListResponse['lobbies'][number]['status']`), which is the
|
|
18
|
+
* reconstruction the generated contract now makes unnecessary: every one of
|
|
19
|
+
* them is a declaration in `generated/types/common.ts`.
|
|
20
|
+
*
|
|
21
|
+
* A re-export is not a second declaration, so this block is the healthy form;
|
|
22
|
+
* `test/handwritten-wire-shapes.test.ts` fails if a hand-written *declaration*
|
|
23
|
+
* shadows a generated one again.
|
|
24
|
+
*
|
|
25
|
+
* `AddLobbyAiPlayerRequest`, `SubmitLobbyLimitedDeckRequest`,
|
|
26
|
+
* `UpdateLobbyPlayerRequest`, `LobbyPrivateView` and
|
|
27
|
+
* `LobbyPrivateAiPlayerView` joined this block after their hand-written copies
|
|
28
|
+
* were found *looser* than the schema the server validates against: three of
|
|
29
|
+
* them borrowed `JoinMatchRequest['deck']`, which is optional-nullable because
|
|
30
|
+
* a match seat may join deckless and submit later, on endpoints whose Rust
|
|
31
|
+
* request struct takes a plain `DeckInput`; two dropped wire fields the server
|
|
32
|
+
* reads (`authenticated`, `deckId`); and the AI view made
|
|
33
|
+
* `trilogyFormatMode` optional where the server always sends it.
|
|
34
|
+
* `test/lobby-wire-parity.test.ts` now pins each of them against its schema.
|
|
35
|
+
*/
|
|
36
|
+
export type { AddLobbyAiPlayerRequest, JoinLobbyRequest, KickLobbyPlayerRequest, KickLobbySpectatorRequest, LeaveLobbyRequest, LobbyChatMessage, LobbyChatRequest, LobbyDeckPreview, LobbyDeckSetPreview, LobbyKickedPayload, LobbyMatchmakingDecisionRequest, LobbyParticipantRole, LobbyPlayerController, LobbyPlayerView, LobbyPrivateAiPlayerView, LobbyPrivateView, LobbyRemovalReason, LobbySpectatorView, LobbyStartedAccess, LobbyStatus, LobbySyncRequest, LobbyVisibility, PlayerPresenceStatus, PrepareLobbyLimitedAiDecksRequest, RoomPlayerPresenceEvent, SpectateLobbyRequest, StartLobbyLimitedMatchRequest, StartLobbyRequest, SubmitLobbyLimitedDeckRequest, UpdateLobbyAiPlayerRequest, UpdateLobbyPlayerRequest, };
|
|
37
|
+
export type LobbyConfig = {
|
|
38
|
+
type: 'match';
|
|
39
|
+
format: MatchFormat;
|
|
40
|
+
playerCount: number;
|
|
41
|
+
bestOfMatches: 1 | 3;
|
|
42
|
+
/** Enables the AFK game timer for started lobby matches. */
|
|
43
|
+
gameTimerEnabled: boolean;
|
|
44
|
+
/** Constructed legality profile used when `format` is `trilogy`. */
|
|
45
|
+
trilogyFormat?: ConstructedFormat | null;
|
|
46
|
+
} | {
|
|
47
|
+
type: 'limitedEvent';
|
|
48
|
+
eventKind: LimitedEventKind;
|
|
49
|
+
setCode: string;
|
|
50
|
+
playerCount: number;
|
|
51
|
+
bestOfMatches: 1 | 3;
|
|
52
|
+
/** Enables the AFK game timer for started lobby matches. */
|
|
53
|
+
gameTimerEnabled: boolean;
|
|
54
|
+
/** Per-round booster set configuration. Empty outside chaos draft. */
|
|
55
|
+
draftRounds: Array<{
|
|
56
|
+
setCode: string;
|
|
57
|
+
}>;
|
|
58
|
+
/** Enables the per-pick countdown for chaos draft. */
|
|
59
|
+
pickTimerEnabled: boolean;
|
|
60
|
+
sealedPackCount?: number | null | undefined;
|
|
61
|
+
};
|
|
62
|
+
export interface CreateLobbyRequest {
|
|
63
|
+
config: LobbyConfig;
|
|
64
|
+
/** Fixed limited pack/leader seed. */
|
|
65
|
+
packSeed?: number | null;
|
|
66
|
+
/** Fixed match seed reused for limited duel matches. */
|
|
67
|
+
matchSeed?: number | null;
|
|
68
|
+
/** Whether the lobby should appear in public browsing surfaces. */
|
|
69
|
+
visibility: LobbyVisibility;
|
|
70
|
+
hostName: string;
|
|
71
|
+
/** Whether the host joined from an authenticated app session. */
|
|
72
|
+
hostAuthenticated: boolean;
|
|
73
|
+
/** Public avatar image URL for the lobby host. */
|
|
74
|
+
hostAvatarUrl?: string | null;
|
|
75
|
+
/** Public profile URL for the lobby host. */
|
|
76
|
+
hostProfileUrl?: string | null;
|
|
77
|
+
/** Personal identities that should own the host player's history. */
|
|
78
|
+
historyIdentities: HistoryIdentityInput[];
|
|
79
|
+
}
|
|
80
|
+
export type LobbyMatchmakingConfig = {
|
|
81
|
+
mode: 'duel';
|
|
82
|
+
format: ConstructedFormat;
|
|
83
|
+
bestOfMatches: 1 | 3;
|
|
84
|
+
} | {
|
|
85
|
+
mode: 'trilogy';
|
|
86
|
+
format: ConstructedFormat;
|
|
87
|
+
} | {
|
|
88
|
+
mode: 'twinSuns';
|
|
89
|
+
};
|
|
90
|
+
export interface LobbyMatchmakingRequest {
|
|
91
|
+
config: LobbyMatchmakingConfig;
|
|
92
|
+
name: string;
|
|
93
|
+
/** Public avatar image URL for the queued player. */
|
|
94
|
+
avatarUrl?: string | null;
|
|
95
|
+
/** Public profile URL for the queued player. */
|
|
96
|
+
profileUrl?: string | null;
|
|
97
|
+
/** Whether the player queued from an authenticated app session. */
|
|
98
|
+
authenticated: boolean;
|
|
99
|
+
/** Personal identities that should own this queued player's history. */
|
|
100
|
+
historyIdentities: HistoryIdentityInput[];
|
|
101
|
+
/**
|
|
102
|
+
* Deck the queued player brings to the pairing. Required: matchmaking has
|
|
103
|
+
* no later deck-submission step, so the server rejects a request without
|
|
104
|
+
* one.
|
|
105
|
+
*/
|
|
106
|
+
deck: DeckInput;
|
|
107
|
+
/** Format-specific setup submitted with the matchmaking deck. */
|
|
108
|
+
formatSetup?: FormatSetupInput | null;
|
|
109
|
+
/** Display title for the submitted matchmaking deck. */
|
|
110
|
+
deckTitle?: string | null;
|
|
111
|
+
/** Freeform client deck id for the submitted deck. */
|
|
112
|
+
deckId?: string | null;
|
|
113
|
+
/**
|
|
114
|
+
* Optional verified account proof. When present and the selection is
|
|
115
|
+
* eligible, the server may silently place the player in a skill-based
|
|
116
|
+
* queue; a missing or invalid token always degrades to random pairing
|
|
117
|
+
* instead of failing.
|
|
118
|
+
*/
|
|
119
|
+
accountToken?: string | null;
|
|
120
|
+
}
|
|
121
|
+
export type { ReturnLobbyMatchRequest };
|
|
122
|
+
export interface UpdateLobbySettingsRequest {
|
|
123
|
+
playerToken: string;
|
|
124
|
+
visibility?: LobbyVisibility | null;
|
|
125
|
+
playerCount?: number | null;
|
|
126
|
+
gameTimerEnabled?: boolean | null;
|
|
127
|
+
matchFormat?: ConstructedFormat | null;
|
|
128
|
+
bestOfMatches?: 1 | 3 | null;
|
|
129
|
+
trilogyFormat?: ConstructedFormat | null;
|
|
130
|
+
}
|
|
131
|
+
export interface LobbyAccessResponse {
|
|
132
|
+
lobbyId: string;
|
|
133
|
+
playerId: string;
|
|
134
|
+
playerToken: string;
|
|
135
|
+
snapshot: LobbySnapshot;
|
|
136
|
+
private: LobbyPrivateView;
|
|
137
|
+
}
|
|
138
|
+
export interface LobbyResponse {
|
|
139
|
+
snapshot: LobbySnapshot;
|
|
140
|
+
}
|
|
141
|
+
export interface LobbyListResponse {
|
|
142
|
+
lobbies: PublicLobbySummary[];
|
|
143
|
+
}
|
|
144
|
+
export interface PublicLobbySummary {
|
|
145
|
+
lobbyId: string;
|
|
146
|
+
status: LobbyStatus;
|
|
147
|
+
visibility: LobbyVisibility;
|
|
148
|
+
config: LobbyConfig;
|
|
149
|
+
requiredPlayerCount: number;
|
|
150
|
+
playerCount: number;
|
|
151
|
+
spectatorCount: number;
|
|
152
|
+
canJoinAsPlayer: boolean;
|
|
153
|
+
canSpectate: boolean;
|
|
154
|
+
deckPreviews: LobbyDeckPreview[];
|
|
155
|
+
createdAtMs: number;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Queue kinds that can use the shared lobby matchmaking handshake.
|
|
159
|
+
*
|
|
160
|
+
* Wire-level only: the server picks the queue and clients must not surface
|
|
161
|
+
* the distinction to players.
|
|
162
|
+
*
|
|
163
|
+
* Aliased rather than re-exported so this warning stays attached to the name;
|
|
164
|
+
* the type is the generated declaration, unchanged.
|
|
165
|
+
*/
|
|
166
|
+
export type LobbyMatchmakingKind = GeneratedLobbyMatchmakingKind;
|
|
167
|
+
export type LobbyMatchmakingView = {
|
|
168
|
+
kind: LobbyMatchmakingKind;
|
|
169
|
+
phase: 'searching';
|
|
170
|
+
} | {
|
|
171
|
+
kind: LobbyMatchmakingKind;
|
|
172
|
+
phase: 'matchFound';
|
|
173
|
+
acceptDeadlineAtMs: number;
|
|
174
|
+
acceptedPlayerIds: string[];
|
|
175
|
+
};
|
|
176
|
+
export interface LobbyChatResponse {
|
|
177
|
+
message: LobbyChatMessage;
|
|
178
|
+
snapshot: LobbySnapshot;
|
|
179
|
+
}
|
|
180
|
+
export interface LobbySnapshot {
|
|
181
|
+
lobbyId: string;
|
|
182
|
+
status: LobbyStatus;
|
|
183
|
+
visibility: LobbyVisibility;
|
|
184
|
+
config: LobbyConfig;
|
|
185
|
+
/** Fixed limited pack/leader seed when configured. */
|
|
186
|
+
packSeed?: number | null;
|
|
187
|
+
/** Fixed match seed when configured. */
|
|
188
|
+
matchSeed?: number | null;
|
|
189
|
+
hostPlayerId: string;
|
|
190
|
+
requiredPlayerCount: number;
|
|
191
|
+
/** Absolute server deadline for the ready-lobby auto-start countdown. */
|
|
192
|
+
autoStartDeadlineAtMs?: number | null;
|
|
193
|
+
matchmaking?: LobbyMatchmakingView | null;
|
|
194
|
+
players: LobbyPlayerView[];
|
|
195
|
+
spectators: LobbySpectatorView[];
|
|
196
|
+
chat: LobbyChatMessage[];
|
|
197
|
+
/** Server-owned room activity. Empty when no player transition occurred. */
|
|
198
|
+
activity: RoomPlayerPresenceEvent[];
|
|
199
|
+
}
|
|
200
|
+
export interface LobbyAccessInput {
|
|
201
|
+
lobbyId: string;
|
|
202
|
+
playerToken: string;
|
|
203
|
+
}
|
|
204
|
+
export type LobbyServerMessage = {
|
|
205
|
+
type: 'welcome';
|
|
206
|
+
payload: {
|
|
207
|
+
lobbyId: string;
|
|
208
|
+
playerId: string;
|
|
209
|
+
};
|
|
210
|
+
} | {
|
|
211
|
+
type: 'snapshot';
|
|
212
|
+
payload: LobbySnapshot;
|
|
213
|
+
}
|
|
214
|
+
/** A ranked sweep moved this player into a paired lobby; reconnect with the supplied access. */
|
|
215
|
+
| {
|
|
216
|
+
type: 'matchmakingRelocated';
|
|
217
|
+
payload: LobbyAccessResponse;
|
|
218
|
+
} | {
|
|
219
|
+
type: 'chatMessage';
|
|
220
|
+
payload: LobbyChatMessage;
|
|
221
|
+
} | {
|
|
222
|
+
type: 'playerPresence';
|
|
223
|
+
payload: RoomPlayerPresenceEvent;
|
|
224
|
+
} | {
|
|
225
|
+
type: 'started';
|
|
226
|
+
} | {
|
|
227
|
+
type: 'kicked';
|
|
228
|
+
payload: LobbyKickedPayload;
|
|
229
|
+
} | {
|
|
230
|
+
type: 'error';
|
|
231
|
+
payload: ErrorPayload;
|
|
232
|
+
} | {
|
|
233
|
+
type: 'pong';
|
|
234
|
+
payload: {
|
|
235
|
+
nonce?: string | null;
|
|
236
|
+
};
|
|
237
|
+
};
|
|
238
|
+
export interface LobbySessionEvents {
|
|
239
|
+
change: LobbySessionState;
|
|
240
|
+
chatMessage: LobbyChatMessage;
|
|
241
|
+
connectionState: ConnectionState;
|
|
242
|
+
error: ErrorPayload;
|
|
243
|
+
kicked: LobbyKickedPayload;
|
|
244
|
+
matchmakingRelocated: LobbyAccessResponse;
|
|
245
|
+
playerPresence: RoomPlayerPresenceEvent;
|
|
246
|
+
message: LobbyServerMessage;
|
|
247
|
+
pong: PongPayload;
|
|
248
|
+
snapshot: LobbySnapshot;
|
|
249
|
+
started: undefined;
|
|
250
|
+
welcome: {
|
|
251
|
+
lobbyId: string;
|
|
252
|
+
playerId: string;
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
export interface LobbySessionState {
|
|
256
|
+
connectionState: ConnectionState;
|
|
257
|
+
errors: readonly ErrorPayload[];
|
|
258
|
+
snapshot: LobbySnapshot | undefined;
|
|
259
|
+
}
|
|
260
|
+
export interface LobbySession {
|
|
261
|
+
readonly __v_skip: true;
|
|
262
|
+
readonly connectionState: ConnectionState;
|
|
263
|
+
readonly errorMessages: readonly string[];
|
|
264
|
+
readonly errors: readonly ErrorPayload[];
|
|
265
|
+
readonly snapshot: LobbySnapshot | undefined;
|
|
266
|
+
close: () => void;
|
|
267
|
+
connect: () => Promise<LobbySession>;
|
|
268
|
+
on: <TKey extends keyof LobbySessionEvents>(event: TKey, listener: (value: LobbySessionEvents[TKey]) => void) => () => void;
|
|
269
|
+
ping: (nonce?: string) => void;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Wire messages pushed over the list-level lobby socket (`GET /ws/lobbies`).
|
|
273
|
+
*
|
|
274
|
+
* Unlike {@link LobbyServerMessage} (the per-lobby socket), this carries the
|
|
275
|
+
* public, viewer-agnostic lobby list. The server sends a `snapshot` immediately
|
|
276
|
+
* on connect and a fresh `snapshot` on every list-affecting change; `pong`
|
|
277
|
+
* replies to a client `ping` keepalive. Each `snapshot` is the complete,
|
|
278
|
+
* authoritative list — replace, never merge.
|
|
279
|
+
*/
|
|
280
|
+
export type LobbyListServerMessage = {
|
|
281
|
+
type: 'snapshot';
|
|
282
|
+
payload: LobbyListResponse;
|
|
283
|
+
} | {
|
|
284
|
+
type: 'pong';
|
|
285
|
+
payload: {
|
|
286
|
+
nonce?: string | null;
|
|
287
|
+
};
|
|
288
|
+
};
|
|
289
|
+
/**
|
|
290
|
+
* Auto-reconnect policy for the public lobby-list socket.
|
|
291
|
+
*
|
|
292
|
+
* The list socket reconnects on abnormal close/error with capped exponential
|
|
293
|
+
* backoff. Pass `false` to disable reconnect entirely, `true` for the defaults,
|
|
294
|
+
* or an object to tune the bounds. This is the one behavioral addition over the
|
|
295
|
+
* per-lobby {@link LobbySession}, which does not reconnect.
|
|
296
|
+
*/
|
|
297
|
+
export type LobbyListAutoReconnect = boolean | {
|
|
298
|
+
/** Initial backoff delay before the first reconnect attempt (ms). Default 500. */
|
|
299
|
+
initialDelayMs?: number;
|
|
300
|
+
/** Maximum backoff delay between reconnect attempts (ms). Default 5000. */
|
|
301
|
+
maxDelayMs?: number;
|
|
302
|
+
/** Exponential backoff multiplier applied each attempt. Default 2. */
|
|
303
|
+
backoffFactor?: number;
|
|
304
|
+
};
|
|
305
|
+
/** Options accepted by {@link LobbiesResource.subscribeList}. */
|
|
306
|
+
export interface LobbyListSessionOptions {
|
|
307
|
+
/**
|
|
308
|
+
* Auto-reconnect policy for abnormal socket closes. Defaults to enabled with
|
|
309
|
+
* 500ms → 5s capped exponential backoff.
|
|
310
|
+
*/
|
|
311
|
+
autoReconnect?: LobbyListAutoReconnect;
|
|
312
|
+
}
|
|
313
|
+
/** Events emitted by a {@link LobbyListSession}. */
|
|
314
|
+
export interface LobbyListSessionEvents {
|
|
315
|
+
/** Aggregated state snapshot emitted on every change. */
|
|
316
|
+
change: LobbyListSessionState;
|
|
317
|
+
/** Underlying socket connection state transitions. */
|
|
318
|
+
connectionState: ConnectionState;
|
|
319
|
+
/** SDK or server error payloads. */
|
|
320
|
+
error: ErrorPayload;
|
|
321
|
+
/** Every decoded server message, before per-type dispatch. */
|
|
322
|
+
message: LobbyListServerMessage;
|
|
323
|
+
/** Keepalive replies to {@link LobbyListSession.ping}. */
|
|
324
|
+
pong: PongPayload;
|
|
325
|
+
/** The latest complete, authoritative public lobby list. */
|
|
326
|
+
snapshot: LobbyListResponse;
|
|
327
|
+
}
|
|
328
|
+
/** Aggregated state of a {@link LobbyListSession}. */
|
|
329
|
+
export interface LobbyListSessionState {
|
|
330
|
+
connectionState: ConnectionState;
|
|
331
|
+
errors: readonly ErrorPayload[];
|
|
332
|
+
/** Latest public lobby list, or `undefined` before the first snapshot. */
|
|
333
|
+
lobbies: PublicLobbySummary[] | undefined;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Public, unauthenticated subscription to the live lobby list.
|
|
337
|
+
*
|
|
338
|
+
* Returned by {@link LobbiesResource.subscribeList}. Opens `${wsUrl}/lobbies`
|
|
339
|
+
* with no token and no `Sec-WebSocket-Protocol`, replaces its state from each
|
|
340
|
+
* pushed `snapshot`, and auto-reconnects on abnormal close (the one behavior
|
|
341
|
+
* added over the per-lobby {@link LobbySession}). On reconnect the server sends
|
|
342
|
+
* a fresh full snapshot, so no replay or cursor is needed.
|
|
343
|
+
*/
|
|
344
|
+
export interface LobbyListSession {
|
|
345
|
+
readonly __v_skip: true;
|
|
346
|
+
readonly connectionState: ConnectionState;
|
|
347
|
+
readonly errorMessages: readonly string[];
|
|
348
|
+
readonly errors: readonly ErrorPayload[];
|
|
349
|
+
/** Latest public lobby list, or `undefined` before the first snapshot. */
|
|
350
|
+
readonly lobbies: PublicLobbySummary[] | undefined;
|
|
351
|
+
close: () => void;
|
|
352
|
+
connect: () => Promise<LobbyListSession>;
|
|
353
|
+
on: <TKey extends keyof LobbyListSessionEvents>(event: TKey, listener: (value: LobbyListSessionEvents[TKey]) => void) => () => void;
|
|
354
|
+
/** Alias for `on('snapshot', listener)`, returning an unsubscribe function. */
|
|
355
|
+
onSnapshot: (listener: (lobbies: LobbyListResponse) => void) => () => void;
|
|
356
|
+
ping: (nonce?: string) => void;
|
|
357
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { MatchHistoryDeckStatsRequest, MatchHistoryDeckStatsResponse, MatchHistoryListRequest, MatchHistoryListResponse, MatchHistoryReplayRequest, MatchHistoryReplayResponse, MatchHistoryRestoreRequest, RestoreHistoryResponse } from '../generated/index.js';
|
|
2
|
+
import type { SimulatorRequestOptions } from '../http/options.js';
|
|
3
|
+
import type { EngineHttpRequester } from '../http/request.js';
|
|
4
|
+
/**
|
|
5
|
+
* Request used to restore a server-side history entry into a fresh match.
|
|
6
|
+
*/
|
|
7
|
+
export interface MatchHistoryRestoreInput extends MatchHistoryRestoreRequest {
|
|
8
|
+
/**
|
|
9
|
+
* Durable history row id returned by {@link MatchHistoryResource.list}.
|
|
10
|
+
*/
|
|
11
|
+
historyId: string;
|
|
12
|
+
}
|
|
13
|
+
/** Request used to load a completed server-side replay archive. */
|
|
14
|
+
export interface MatchHistoryReplayInput extends MatchHistoryReplayRequest {
|
|
15
|
+
/** Durable history row id returned by {@link MatchHistoryResource.list}. */
|
|
16
|
+
historyId: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Server-owned simulator history APIs.
|
|
20
|
+
*/
|
|
21
|
+
export interface MatchHistoryResource {
|
|
22
|
+
/**
|
|
23
|
+
* Returns private lifetime simulator results for My SWU deck ids.
|
|
24
|
+
*/
|
|
25
|
+
deckStats(request: MatchHistoryDeckStatsRequest, options?: SimulatorRequestOptions): Promise<MatchHistoryDeckStatsResponse>;
|
|
26
|
+
/**
|
|
27
|
+
* Lists saved and completed matches visible to the supplied identities.
|
|
28
|
+
*/
|
|
29
|
+
list(request: MatchHistoryListRequest, options?: SimulatorRequestOptions): Promise<MatchHistoryListResponse>;
|
|
30
|
+
/** Loads public and post-game reveal-all frames for an authorized result. */
|
|
31
|
+
replay(request: MatchHistoryReplayInput, options?: SimulatorRequestOptions): Promise<MatchHistoryReplayResponse>;
|
|
32
|
+
/**
|
|
33
|
+
* Restores one authorized row whose eligibility is `available`.
|
|
34
|
+
*/
|
|
35
|
+
restore(request: MatchHistoryRestoreInput, options?: SimulatorRequestOptions): Promise<RestoreHistoryResponse>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Dependencies needed by the match-history resource.
|
|
39
|
+
*/
|
|
40
|
+
export interface MatchHistoryResourceOptions {
|
|
41
|
+
/**
|
|
42
|
+
* HTTP requester shared with other resources.
|
|
43
|
+
*/
|
|
44
|
+
requester: EngineHttpRequester;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Creates the match-history resource client.
|
|
48
|
+
*/
|
|
49
|
+
export declare function createMatchHistoryResource(options: MatchHistoryResourceOptions): MatchHistoryResource;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsonBody, jsonHeaders } from '../http/json.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the match-history resource client.
|
|
4
|
+
*/
|
|
5
|
+
export function createMatchHistoryResource(options) {
|
|
6
|
+
const { requester } = options;
|
|
7
|
+
return {
|
|
8
|
+
deckStats: (request, options) => requester.request('match-history-deck-stats-response', '/api/match-history/deck-stats', {
|
|
9
|
+
body: jsonBody(requester.validate('match-history-deck-stats-request', request)),
|
|
10
|
+
headers: jsonHeaders(),
|
|
11
|
+
method: 'POST',
|
|
12
|
+
}, options),
|
|
13
|
+
list: (request, options) => requester.request('match-history-list-response', '/api/match-history', {
|
|
14
|
+
body: jsonBody(requester.validate('match-history-list-request', request)),
|
|
15
|
+
headers: jsonHeaders(),
|
|
16
|
+
method: 'POST',
|
|
17
|
+
}, options),
|
|
18
|
+
replay: (request, options) => requester.request('match-history-replay-response', `/api/match-history/${request.historyId}/replay`, {
|
|
19
|
+
body: jsonBody(requester.validate('match-history-replay-request', {
|
|
20
|
+
identities: request.identities,
|
|
21
|
+
})),
|
|
22
|
+
headers: jsonHeaders(),
|
|
23
|
+
method: 'POST',
|
|
24
|
+
}, options),
|
|
25
|
+
restore: (request, options) => requester.request('restore-history-response', `/api/match-history/${request.historyId}/restore`, {
|
|
26
|
+
body: jsonBody(requester.validate('match-history-restore-request', {
|
|
27
|
+
identities: request.identities,
|
|
28
|
+
restoreRequestId: request.restoreRequestId,
|
|
29
|
+
})),
|
|
30
|
+
headers: jsonHeaders(),
|
|
31
|
+
method: 'POST',
|
|
32
|
+
}, options),
|
|
33
|
+
};
|
|
34
|
+
}
|