@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,56 @@
|
|
|
1
|
+
import type { AiStatusPayload, ErrorPayload, GameEvent, GameState, WelcomePayload } from '../generated/index.js';
|
|
2
|
+
import type { MatchHistoryFeedEntry } from '../generated/types/server-message.js';
|
|
3
|
+
import type { ConnectionState } from '../session.js';
|
|
4
|
+
import type { MatchSessionMethods } from './methods.js';
|
|
5
|
+
import type { MatchSeat, MatchSessionReconnectState, MatchSessionState } from './session-state.js';
|
|
6
|
+
export type { MatchSeat, MatchSessionAccess, MatchSessionAutoReconnectOptions, MatchSessionAutoReconnectPolicy, MatchSessionConnectOptions, MatchSessionEvents, MatchSessionOptions, MatchSessionReconnectState, MatchSessionSnapshotPredicate, MatchSessionState, MatchSessionWaitOptions, } from './session-state.js';
|
|
7
|
+
/**
|
|
8
|
+
* Main ergonomic SDK API for interacting with one live match.
|
|
9
|
+
*
|
|
10
|
+
* A session wraps HTTP match creation/joining, WebSocket connection state,
|
|
11
|
+
* incoming snapshots/events, outgoing commands, and explicit reconnects for one
|
|
12
|
+
* private player seat.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { createSimulatorClient } from '@my-swu/simulator-client'
|
|
17
|
+
*
|
|
18
|
+
* const simulatorClient = createSimulatorClient({
|
|
19
|
+
* baseUrl: 'http://127.0.0.1:4000',
|
|
20
|
+
* })
|
|
21
|
+
* const hostAccess = { matchId: 'match_123', seatToken: 'seat_token_123' }
|
|
22
|
+
*
|
|
23
|
+
* const matchSession = simulatorClient.session.create(hostAccess)
|
|
24
|
+
* await matchSession.connect()
|
|
25
|
+
* matchSession.ready()
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @see https://simulator-sdk.my-swu.com/guide/match-session
|
|
29
|
+
* @see https://simulator-sdk.my-swu.com/guide/driving-gameplay
|
|
30
|
+
*/
|
|
31
|
+
export interface MatchSession extends MatchSessionMethods {
|
|
32
|
+
/** Latest AI attachment/pause status announced by the server. */
|
|
33
|
+
readonly aiStatus: AiStatusPayload | undefined;
|
|
34
|
+
/** Current transport state. */
|
|
35
|
+
readonly connectionState: ConnectionState;
|
|
36
|
+
/** Recent engine or SDK errors. */
|
|
37
|
+
readonly errors: readonly ErrorPayload[];
|
|
38
|
+
/** Recent game events. */
|
|
39
|
+
readonly events: readonly GameEvent[];
|
|
40
|
+
/** Recent match history entries supplied by the server. */
|
|
41
|
+
readonly history: readonly MatchHistoryFeedEntry[];
|
|
42
|
+
/** Human-readable error summaries. */
|
|
43
|
+
readonly errorMessages: readonly string[];
|
|
44
|
+
/** Public match id when one is known. */
|
|
45
|
+
readonly matchId: string | undefined;
|
|
46
|
+
/** Automatic reconnect progress after an abnormal socket close. */
|
|
47
|
+
readonly reconnectState: MatchSessionReconnectState;
|
|
48
|
+
/** Latest authoritative private snapshot for this seat. */
|
|
49
|
+
readonly snapshot: GameState | undefined;
|
|
50
|
+
/** Seat controlled by this session when known. */
|
|
51
|
+
readonly seat: MatchSeat | undefined;
|
|
52
|
+
/** Token-free state snapshot. */
|
|
53
|
+
readonly state: MatchSessionState;
|
|
54
|
+
/** Latest welcome payload when the socket handshake has completed. */
|
|
55
|
+
readonly welcome: WelcomePayload | undefined;
|
|
56
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { MatchSessionController } from './match-session/controller.js';
|
|
2
|
+
export type { MatchSessionControllerOptions } from './match-session/controller.js';
|
|
3
|
+
export type { MatchSeat, MatchSession, MatchSessionAccess, MatchSessionAutoReconnectOptions, MatchSessionAutoReconnectPolicy, MatchSessionConnectOptions, MatchSessionEvents, MatchSessionOptions, MatchSessionReconnectState, MatchSessionSnapshotPredicate, MatchSessionState, MatchSessionWaitOptions, } from './match-session/types.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { MatchSessionController } from './match-session/controller.js';
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import type { ClientMessage, GameCommand } from './generated/index.js';
|
|
2
|
+
import type { CardInteractionCueRequest } from './generated/types/client-message.js';
|
|
3
|
+
import type { FormatEventCommand } from './generated/types/format-event-request.js';
|
|
4
|
+
/**
|
|
5
|
+
* Builds one `ready` socket message.
|
|
6
|
+
*
|
|
7
|
+
* Most apps call `matchSession.ready()` instead of constructing envelopes
|
|
8
|
+
* manually. Use this helper when you are working directly with socket frames.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { readyMessage } from '@my-swu/simulator-client'
|
|
13
|
+
*
|
|
14
|
+
* const clientMessage = readyMessage()
|
|
15
|
+
* console.log(clientMessage.type)
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @see https://simulator-sdk.my-swu.com/guide/websocket
|
|
19
|
+
*/
|
|
20
|
+
export declare function readyMessage(): ClientMessage;
|
|
21
|
+
/**
|
|
22
|
+
* Builds one `undo` socket message.
|
|
23
|
+
*
|
|
24
|
+
* The server rolls back the latest accepted player action for the match. In AI
|
|
25
|
+
* matches, one human undo also consumes any AI responses that happened after
|
|
26
|
+
* that human action, pauses the AI, then automatically resumes it after the
|
|
27
|
+
* next successful human mutation.
|
|
28
|
+
*
|
|
29
|
+
* In matches with other human seats, a sensitive undo (hidden information was
|
|
30
|
+
* revealed, or another player acted since) does not apply immediately:
|
|
31
|
+
* the server records it on `GameState.pendingUndo`, emits `undoRequested`,
|
|
32
|
+
* and waits for every other human seat to answer with an `undoResponse`.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* import { undoMessage } from '@my-swu/simulator-client'
|
|
37
|
+
*
|
|
38
|
+
* const clientMessage = undoMessage()
|
|
39
|
+
* console.log(clientMessage.type)
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @see https://simulator-sdk.my-swu.com/guide/driving-gameplay
|
|
43
|
+
*/
|
|
44
|
+
export declare function undoMessage(): ClientMessage;
|
|
45
|
+
/**
|
|
46
|
+
* Builds one `undoResponse` socket message.
|
|
47
|
+
*
|
|
48
|
+
* Answers the pending undo approval request carried by
|
|
49
|
+
* `GameState.pendingUndo`. Approving as the last outstanding seat applies the
|
|
50
|
+
* undo; declining cancels it. A response sent by the original requester
|
|
51
|
+
* withdraws the request regardless of `approve`.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* import { undoResponseMessage } from '@my-swu/simulator-client'
|
|
56
|
+
*
|
|
57
|
+
* const clientMessage = undoResponseMessage(true)
|
|
58
|
+
* console.log(clientMessage.type)
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* @see https://simulator-sdk.my-swu.com/guide/driving-gameplay
|
|
62
|
+
*/
|
|
63
|
+
export declare function undoResponseMessage(approve: boolean): ClientMessage;
|
|
64
|
+
/**
|
|
65
|
+
* Builds one `setAiPaused` socket message.
|
|
66
|
+
*
|
|
67
|
+
* Use this for explicit manual control of an attached AI opponent without
|
|
68
|
+
* changing the underlying game state. Undo-created AI pauses resume
|
|
69
|
+
* automatically after the next successful human mutation.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* import { setAiPausedMessage } from '@my-swu/simulator-client'
|
|
74
|
+
*
|
|
75
|
+
* const clientMessage = setAiPausedMessage(true)
|
|
76
|
+
* console.log(clientMessage.type)
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* @see https://simulator-sdk.my-swu.com/guide/driving-gameplay
|
|
80
|
+
*/
|
|
81
|
+
export declare function setAiPausedMessage(paused: boolean): ClientMessage;
|
|
82
|
+
/**
|
|
83
|
+
* Builds one `syncRequest` socket message.
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```ts
|
|
87
|
+
* import { syncRequestMessage } from '@my-swu/simulator-client'
|
|
88
|
+
*
|
|
89
|
+
* const clientMessage = syncRequestMessage()
|
|
90
|
+
* console.log(clientMessage.type)
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* @see https://simulator-sdk.my-swu.com/guide/websocket
|
|
94
|
+
*/
|
|
95
|
+
export declare function syncRequestMessage(): ClientMessage;
|
|
96
|
+
/**
|
|
97
|
+
* Builds one in-match `chat` socket message.
|
|
98
|
+
*
|
|
99
|
+
* The server trims and caps the message before broadcasting it as a
|
|
100
|
+
* match-history entry.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```ts
|
|
104
|
+
* import { chatMessage } from '@my-swu/simulator-client'
|
|
105
|
+
*
|
|
106
|
+
* const clientMessage = chatMessage('ready?')
|
|
107
|
+
* console.log(clientMessage.type)
|
|
108
|
+
* ```
|
|
109
|
+
*
|
|
110
|
+
* @see https://simulator-sdk.my-swu.com/guide/websocket
|
|
111
|
+
*/
|
|
112
|
+
export declare function chatMessage(message: string): ClientMessage;
|
|
113
|
+
/**
|
|
114
|
+
* Builds one transient hand-card interaction cue socket message.
|
|
115
|
+
*
|
|
116
|
+
* Cues are live presentation hints only. They do not mutate gameplay state,
|
|
117
|
+
* history, replay, or saves; the server adds the sender seat before broadcast.
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```ts
|
|
121
|
+
* import { interactionCueMessage } from '@my-swu/simulator-client'
|
|
122
|
+
*
|
|
123
|
+
* const clientMessage = interactionCueMessage({
|
|
124
|
+
* kind: 'handCard',
|
|
125
|
+
* index: 0,
|
|
126
|
+
* state: 'hover',
|
|
127
|
+
* })
|
|
128
|
+
* console.log(clientMessage.type)
|
|
129
|
+
* ```
|
|
130
|
+
*
|
|
131
|
+
* @see https://simulator-sdk.my-swu.com/guide/websocket
|
|
132
|
+
*/
|
|
133
|
+
export declare function interactionCueMessage(cue: CardInteractionCueRequest): ClientMessage;
|
|
134
|
+
/**
|
|
135
|
+
* Builds one `ping` socket message.
|
|
136
|
+
*
|
|
137
|
+
* The optional nonce is echoed by the server `pong` frame, which lets clients
|
|
138
|
+
* measure round-trip latency.
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```ts
|
|
142
|
+
* import { pingMessage } from '@my-swu/simulator-client'
|
|
143
|
+
*
|
|
144
|
+
* const clientMessage = pingMessage('latency-check-1')
|
|
145
|
+
* console.log(clientMessage.type)
|
|
146
|
+
* ```
|
|
147
|
+
*
|
|
148
|
+
* @see https://simulator-sdk.my-swu.com/guide/websocket
|
|
149
|
+
*/
|
|
150
|
+
export declare function pingMessage(nonce?: string | null): ClientMessage;
|
|
151
|
+
/**
|
|
152
|
+
* Wraps one game command into a socket envelope.
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```ts
|
|
156
|
+
* import { commandMessage } from '@my-swu/simulator-client'
|
|
157
|
+
*
|
|
158
|
+
* const clientMessage = commandMessage('pass')
|
|
159
|
+
* console.log(clientMessage.type)
|
|
160
|
+
* ```
|
|
161
|
+
*
|
|
162
|
+
* @see https://simulator-sdk.my-swu.com/guide/driving-gameplay
|
|
163
|
+
*/
|
|
164
|
+
export declare function commandMessage(command: GameCommand): ClientMessage;
|
|
165
|
+
/**
|
|
166
|
+
* Wraps one format-event command into a socket envelope.
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```ts
|
|
170
|
+
* import { formatEventMessage } from '@my-swu/simulator-client'
|
|
171
|
+
*
|
|
172
|
+
* const clientMessage = formatEventMessage({ type: 'readyNextGame' })
|
|
173
|
+
* console.log(clientMessage.type)
|
|
174
|
+
* ```
|
|
175
|
+
*
|
|
176
|
+
* @see https://simulator-sdk.my-swu.com/guide/match-lifecycle
|
|
177
|
+
*/
|
|
178
|
+
export declare function formatEventMessage(command: FormatEventCommand): ClientMessage;
|
|
179
|
+
/**
|
|
180
|
+
* Wraps one host-authorized AI format-event command into a socket envelope.
|
|
181
|
+
*
|
|
182
|
+
* This is only accepted for manual Player vs AI Trilogy ban/pick flows. The
|
|
183
|
+
* command is applied to the AI seat after the server validates the sender.
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```ts
|
|
187
|
+
* import { aiFormatEventMessage } from '@my-swu/simulator-client'
|
|
188
|
+
*
|
|
189
|
+
* const clientMessage = aiFormatEventMessage({ type: 'banTrilogyDeck', deckIndex: 1 })
|
|
190
|
+
* console.log(clientMessage.type)
|
|
191
|
+
* ```
|
|
192
|
+
*
|
|
193
|
+
* @see https://simulator-sdk.my-swu.com/guide/match-lifecycle
|
|
194
|
+
*/
|
|
195
|
+
export declare function aiFormatEventMessage(command: FormatEventCommand): ClientMessage;
|
package/dist/messages.js
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds one `ready` socket message.
|
|
3
|
+
*
|
|
4
|
+
* Most apps call `matchSession.ready()` instead of constructing envelopes
|
|
5
|
+
* manually. Use this helper when you are working directly with socket frames.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { readyMessage } from '@my-swu/simulator-client'
|
|
10
|
+
*
|
|
11
|
+
* const clientMessage = readyMessage()
|
|
12
|
+
* console.log(clientMessage.type)
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @see https://simulator-sdk.my-swu.com/guide/websocket
|
|
16
|
+
*/
|
|
17
|
+
export function readyMessage() {
|
|
18
|
+
return { type: 'ready' };
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Builds one `undo` socket message.
|
|
22
|
+
*
|
|
23
|
+
* The server rolls back the latest accepted player action for the match. In AI
|
|
24
|
+
* matches, one human undo also consumes any AI responses that happened after
|
|
25
|
+
* that human action, pauses the AI, then automatically resumes it after the
|
|
26
|
+
* next successful human mutation.
|
|
27
|
+
*
|
|
28
|
+
* In matches with other human seats, a sensitive undo (hidden information was
|
|
29
|
+
* revealed, or another player acted since) does not apply immediately:
|
|
30
|
+
* the server records it on `GameState.pendingUndo`, emits `undoRequested`,
|
|
31
|
+
* and waits for every other human seat to answer with an `undoResponse`.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* import { undoMessage } from '@my-swu/simulator-client'
|
|
36
|
+
*
|
|
37
|
+
* const clientMessage = undoMessage()
|
|
38
|
+
* console.log(clientMessage.type)
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @see https://simulator-sdk.my-swu.com/guide/driving-gameplay
|
|
42
|
+
*/
|
|
43
|
+
export function undoMessage() {
|
|
44
|
+
return { type: 'undo' };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Builds one `undoResponse` socket message.
|
|
48
|
+
*
|
|
49
|
+
* Answers the pending undo approval request carried by
|
|
50
|
+
* `GameState.pendingUndo`. Approving as the last outstanding seat applies the
|
|
51
|
+
* undo; declining cancels it. A response sent by the original requester
|
|
52
|
+
* withdraws the request regardless of `approve`.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```ts
|
|
56
|
+
* import { undoResponseMessage } from '@my-swu/simulator-client'
|
|
57
|
+
*
|
|
58
|
+
* const clientMessage = undoResponseMessage(true)
|
|
59
|
+
* console.log(clientMessage.type)
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @see https://simulator-sdk.my-swu.com/guide/driving-gameplay
|
|
63
|
+
*/
|
|
64
|
+
export function undoResponseMessage(approve) {
|
|
65
|
+
return {
|
|
66
|
+
type: 'undoResponse',
|
|
67
|
+
payload: { approve },
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Builds one `setAiPaused` socket message.
|
|
72
|
+
*
|
|
73
|
+
* Use this for explicit manual control of an attached AI opponent without
|
|
74
|
+
* changing the underlying game state. Undo-created AI pauses resume
|
|
75
|
+
* automatically after the next successful human mutation.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```ts
|
|
79
|
+
* import { setAiPausedMessage } from '@my-swu/simulator-client'
|
|
80
|
+
*
|
|
81
|
+
* const clientMessage = setAiPausedMessage(true)
|
|
82
|
+
* console.log(clientMessage.type)
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* @see https://simulator-sdk.my-swu.com/guide/driving-gameplay
|
|
86
|
+
*/
|
|
87
|
+
export function setAiPausedMessage(paused) {
|
|
88
|
+
return {
|
|
89
|
+
type: 'setAiPaused',
|
|
90
|
+
payload: { paused },
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Builds one `syncRequest` socket message.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* import { syncRequestMessage } from '@my-swu/simulator-client'
|
|
99
|
+
*
|
|
100
|
+
* const clientMessage = syncRequestMessage()
|
|
101
|
+
* console.log(clientMessage.type)
|
|
102
|
+
* ```
|
|
103
|
+
*
|
|
104
|
+
* @see https://simulator-sdk.my-swu.com/guide/websocket
|
|
105
|
+
*/
|
|
106
|
+
export function syncRequestMessage() {
|
|
107
|
+
return { type: 'syncRequest' };
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Builds one in-match `chat` socket message.
|
|
111
|
+
*
|
|
112
|
+
* The server trims and caps the message before broadcasting it as a
|
|
113
|
+
* match-history entry.
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```ts
|
|
117
|
+
* import { chatMessage } from '@my-swu/simulator-client'
|
|
118
|
+
*
|
|
119
|
+
* const clientMessage = chatMessage('ready?')
|
|
120
|
+
* console.log(clientMessage.type)
|
|
121
|
+
* ```
|
|
122
|
+
*
|
|
123
|
+
* @see https://simulator-sdk.my-swu.com/guide/websocket
|
|
124
|
+
*/
|
|
125
|
+
export function chatMessage(message) {
|
|
126
|
+
return {
|
|
127
|
+
type: 'chat',
|
|
128
|
+
payload: { message },
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Builds one transient hand-card interaction cue socket message.
|
|
133
|
+
*
|
|
134
|
+
* Cues are live presentation hints only. They do not mutate gameplay state,
|
|
135
|
+
* history, replay, or saves; the server adds the sender seat before broadcast.
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```ts
|
|
139
|
+
* import { interactionCueMessage } from '@my-swu/simulator-client'
|
|
140
|
+
*
|
|
141
|
+
* const clientMessage = interactionCueMessage({
|
|
142
|
+
* kind: 'handCard',
|
|
143
|
+
* index: 0,
|
|
144
|
+
* state: 'hover',
|
|
145
|
+
* })
|
|
146
|
+
* console.log(clientMessage.type)
|
|
147
|
+
* ```
|
|
148
|
+
*
|
|
149
|
+
* @see https://simulator-sdk.my-swu.com/guide/websocket
|
|
150
|
+
*/
|
|
151
|
+
export function interactionCueMessage(cue) {
|
|
152
|
+
return {
|
|
153
|
+
type: 'interactionCue',
|
|
154
|
+
payload: cue,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Builds one `ping` socket message.
|
|
159
|
+
*
|
|
160
|
+
* The optional nonce is echoed by the server `pong` frame, which lets clients
|
|
161
|
+
* measure round-trip latency.
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```ts
|
|
165
|
+
* import { pingMessage } from '@my-swu/simulator-client'
|
|
166
|
+
*
|
|
167
|
+
* const clientMessage = pingMessage('latency-check-1')
|
|
168
|
+
* console.log(clientMessage.type)
|
|
169
|
+
* ```
|
|
170
|
+
*
|
|
171
|
+
* @see https://simulator-sdk.my-swu.com/guide/websocket
|
|
172
|
+
*/
|
|
173
|
+
export function pingMessage(nonce) {
|
|
174
|
+
return {
|
|
175
|
+
type: 'ping',
|
|
176
|
+
payload: {
|
|
177
|
+
nonce: nonce ?? null,
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Wraps one game command into a socket envelope.
|
|
183
|
+
*
|
|
184
|
+
* @example
|
|
185
|
+
* ```ts
|
|
186
|
+
* import { commandMessage } from '@my-swu/simulator-client'
|
|
187
|
+
*
|
|
188
|
+
* const clientMessage = commandMessage('pass')
|
|
189
|
+
* console.log(clientMessage.type)
|
|
190
|
+
* ```
|
|
191
|
+
*
|
|
192
|
+
* @see https://simulator-sdk.my-swu.com/guide/driving-gameplay
|
|
193
|
+
*/
|
|
194
|
+
export function commandMessage(command) {
|
|
195
|
+
return {
|
|
196
|
+
type: 'command',
|
|
197
|
+
payload: command,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Wraps one format-event command into a socket envelope.
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* ```ts
|
|
205
|
+
* import { formatEventMessage } from '@my-swu/simulator-client'
|
|
206
|
+
*
|
|
207
|
+
* const clientMessage = formatEventMessage({ type: 'readyNextGame' })
|
|
208
|
+
* console.log(clientMessage.type)
|
|
209
|
+
* ```
|
|
210
|
+
*
|
|
211
|
+
* @see https://simulator-sdk.my-swu.com/guide/match-lifecycle
|
|
212
|
+
*/
|
|
213
|
+
export function formatEventMessage(command) {
|
|
214
|
+
return {
|
|
215
|
+
type: 'formatEvent',
|
|
216
|
+
payload: command,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Wraps one host-authorized AI format-event command into a socket envelope.
|
|
221
|
+
*
|
|
222
|
+
* This is only accepted for manual Player vs AI Trilogy ban/pick flows. The
|
|
223
|
+
* command is applied to the AI seat after the server validates the sender.
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```ts
|
|
227
|
+
* import { aiFormatEventMessage } from '@my-swu/simulator-client'
|
|
228
|
+
*
|
|
229
|
+
* const clientMessage = aiFormatEventMessage({ type: 'banTrilogyDeck', deckIndex: 1 })
|
|
230
|
+
* console.log(clientMessage.type)
|
|
231
|
+
* ```
|
|
232
|
+
*
|
|
233
|
+
* @see https://simulator-sdk.my-swu.com/guide/match-lifecycle
|
|
234
|
+
*/
|
|
235
|
+
export function aiFormatEventMessage(command) {
|
|
236
|
+
return {
|
|
237
|
+
type: 'aiFormatEvent',
|
|
238
|
+
payload: command,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { SimulatorReportListResponse, SimulatorReportResponse, CardCatalogRefreshResponse, CreateMetaWindowRequest, MatchChatLookupResponse, MetaWindowsResponse, RankedLeaderboardQuery, RankedLeaderboardResponse, RankedProfileRequest, RankedProfileResponse, SetRankedAdmissionRequest, SetSimulatorMaintenanceRequest, SimulatorAdminStatusResponse } from '../generated/index.js';
|
|
2
|
+
import type { SimulatorRequestOptions } from '../http/options.js';
|
|
3
|
+
import type { EngineHttpRequester } from '../http/request.js';
|
|
4
|
+
/**
|
|
5
|
+
* Optional filters and pagination controls for a ranked leaderboard request.
|
|
6
|
+
*/
|
|
7
|
+
export type RankedLeaderboardOptions = RankedLeaderboardQuery;
|
|
8
|
+
/** Cursor pagination controls for simulator diagnostic reports. */
|
|
9
|
+
export interface SimulatorReportListOptions {
|
|
10
|
+
cursor?: string;
|
|
11
|
+
limit?: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Bearer-token credentials for simulator admin calls.
|
|
15
|
+
*/
|
|
16
|
+
export interface SimulatorAdminAuth {
|
|
17
|
+
/**
|
|
18
|
+
* Admin token configured on the simulator engine.
|
|
19
|
+
*/
|
|
20
|
+
token: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Simulator administration API methods.
|
|
24
|
+
*/
|
|
25
|
+
export interface AdminResource {
|
|
26
|
+
/** Lists safe metadata for retained simulator diagnostic reports. */
|
|
27
|
+
listSimulatorReports(auth: SimulatorAdminAuth, query?: SimulatorReportListOptions, options?: SimulatorRequestOptions): Promise<SimulatorReportListResponse>;
|
|
28
|
+
/** Returns one full sanitized simulator support bundle. */
|
|
29
|
+
getSimulatorReport(auth: SimulatorAdminAuth, reportId: string, options?: SimulatorRequestOptions): Promise<SimulatorReportResponse>;
|
|
30
|
+
/** Refreshes expansion legality metadata across simulator replicas. */
|
|
31
|
+
refreshCardCatalog(auth: SimulatorAdminAuth, options?: SimulatorRequestOptions): Promise<CardCatalogRefreshResponse>;
|
|
32
|
+
/**
|
|
33
|
+
* Returns live simulator operational status and counters.
|
|
34
|
+
*/
|
|
35
|
+
status(auth: SimulatorAdminAuth, options?: SimulatorRequestOptions): Promise<SimulatorAdminStatusResponse>;
|
|
36
|
+
/**
|
|
37
|
+
* Enables or disables simulator maintenance/drain mode.
|
|
38
|
+
*/
|
|
39
|
+
setMaintenance(auth: SimulatorAdminAuth, request: SetSimulatorMaintenanceRequest, options?: SimulatorRequestOptions): Promise<SimulatorAdminStatusResponse>;
|
|
40
|
+
/** Enables or pauses new ranked matchmaking admissions without hiding ranked reads. */
|
|
41
|
+
setRankedAdmission(auth: SimulatorAdminAuth, request: SetRankedAdmissionRequest, options?: SimulatorRequestOptions): Promise<SimulatorAdminStatusResponse>;
|
|
42
|
+
/** Creates a ranked meta window, closing any previously open window as needed. */
|
|
43
|
+
createRankedMetaWindow(auth: SimulatorAdminAuth, request: CreateMetaWindowRequest, options?: SimulatorRequestOptions): Promise<MetaWindowsResponse>;
|
|
44
|
+
/** Closes one ranked meta window and returns the updated window list. */
|
|
45
|
+
closeRankedMetaWindow(auth: SimulatorAdminAuth, windowId: string, options?: SimulatorRequestOptions): Promise<MetaWindowsResponse>;
|
|
46
|
+
/** Lists every ranked meta window and identifies the currently active window. */
|
|
47
|
+
listRankedMetaWindows(auth: SimulatorAdminAuth, options?: SimulatorRequestOptions): Promise<MetaWindowsResponse>;
|
|
48
|
+
/**
|
|
49
|
+
* Returns the server's own record of one match chat message.
|
|
50
|
+
*
|
|
51
|
+
* Moderation reports carry a reporter-supplied copy of the message; this is
|
|
52
|
+
* how a caller replaces that copy with what the match actually broadcast.
|
|
53
|
+
*/
|
|
54
|
+
matchChatMessage(auth: SimulatorAdminAuth, matchId: string, messageId: string, options?: SimulatorRequestOptions): Promise<MatchChatLookupResponse>;
|
|
55
|
+
/** Returns one account's placement-safe internal ranked profile. */
|
|
56
|
+
rankedProfile(auth: SimulatorAdminAuth, request: RankedProfileRequest, options?: SimulatorRequestOptions): Promise<RankedProfileResponse>;
|
|
57
|
+
/** Returns one paginated, placement-complete internal leaderboard page. */
|
|
58
|
+
rankedLeaderboard(auth: SimulatorAdminAuth, windowId: string, query?: RankedLeaderboardOptions, options?: SimulatorRequestOptions): Promise<RankedLeaderboardResponse>;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Creates the simulator admin resource client.
|
|
62
|
+
*/
|
|
63
|
+
export declare function createAdminResource(requester: EngineHttpRequester): AdminResource;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { jsonBody, jsonHeaders } from '../http/json.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the simulator admin resource client.
|
|
4
|
+
*/
|
|
5
|
+
export function createAdminResource(requester) {
|
|
6
|
+
return {
|
|
7
|
+
listSimulatorReports: (auth, query, options) => requester.request('simulator-report-list-response', simulatorReportsPath(query ?? {}), { headers: authHeaders(auth) }, options),
|
|
8
|
+
getSimulatorReport: (auth, reportId, options) => requester.request('simulator-report-response', `/api/admin/reports/${encodeURIComponent(reportId)}`, { headers: authHeaders(auth) }, options),
|
|
9
|
+
refreshCardCatalog: (auth, options) => requester.request('card-catalog-refresh-response', '/api/admin/card-catalog/refresh', { headers: authHeaders(auth), method: 'POST' }, options),
|
|
10
|
+
status: (auth, options) => requester.request('simulator-admin-status-response', '/api/admin/status', { headers: authHeaders(auth) }, options),
|
|
11
|
+
setMaintenance: (auth, request, options) => requester.request('simulator-admin-status-response', '/api/admin/maintenance', {
|
|
12
|
+
body: jsonBody(requester.validate('set-simulator-maintenance-request', request)),
|
|
13
|
+
headers: authHeaders(auth, jsonHeaders()),
|
|
14
|
+
method: 'POST',
|
|
15
|
+
}, options),
|
|
16
|
+
setRankedAdmission: (auth, request, options) => requester.request('simulator-admin-status-response', '/api/admin/ranked/admission', {
|
|
17
|
+
body: jsonBody(requester.validate('set-ranked-admission-request', request)),
|
|
18
|
+
headers: authHeaders(auth, jsonHeaders()),
|
|
19
|
+
method: 'POST',
|
|
20
|
+
}, options),
|
|
21
|
+
createRankedMetaWindow: (auth, request, options) => requester.request('meta-windows-response', '/api/admin/ranked/meta-windows', {
|
|
22
|
+
body: jsonBody(requester.validate('create-meta-window-request', request)),
|
|
23
|
+
headers: authHeaders(auth, jsonHeaders()),
|
|
24
|
+
method: 'POST',
|
|
25
|
+
}, options),
|
|
26
|
+
closeRankedMetaWindow: (auth, windowId, options) => requester.request('meta-windows-response', `/api/admin/ranked/meta-windows/${encodeURIComponent(windowId)}/close`, { headers: authHeaders(auth), method: 'POST' }, options),
|
|
27
|
+
listRankedMetaWindows: (auth, options) => requester.request('meta-windows-response', '/api/admin/ranked/meta-windows', { headers: authHeaders(auth) }, options),
|
|
28
|
+
matchChatMessage: (auth, matchId, messageId, options) => requester.request('match-chat-lookup-response', `/api/admin/matches/${encodeURIComponent(matchId)}/chat/${encodeURIComponent(messageId)}`, { headers: authHeaders(auth) }, options),
|
|
29
|
+
rankedProfile: (auth, request, options) => requester.request('ranked-profile-response', '/api/admin/ranked/profile', {
|
|
30
|
+
body: jsonBody(requester.validate('ranked-profile-request', request)),
|
|
31
|
+
headers: authHeaders(auth, jsonHeaders()),
|
|
32
|
+
method: 'POST',
|
|
33
|
+
}, options),
|
|
34
|
+
rankedLeaderboard: (auth, windowId, query, options) => requester.request('ranked-leaderboard-response', leaderboardPath(requester, windowId, query ?? {}), { headers: authHeaders(auth) }, options),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** Builds a report-list path without exposing pagination implementation. */
|
|
38
|
+
function simulatorReportsPath(options) {
|
|
39
|
+
const parameters = new URLSearchParams();
|
|
40
|
+
if (options.cursor) {
|
|
41
|
+
parameters.set('cursor', options.cursor);
|
|
42
|
+
}
|
|
43
|
+
if (options.limit != null) {
|
|
44
|
+
parameters.set('limit', String(options.limit));
|
|
45
|
+
}
|
|
46
|
+
const suffix = parameters.size === 0 ? '' : `?${parameters.toString()}`;
|
|
47
|
+
return `/api/admin/reports${suffix}`;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Builds a ranked leaderboard path from the optional query parameters.
|
|
51
|
+
*
|
|
52
|
+
* The requester carries the client's validation policy, so the parameters are
|
|
53
|
+
* checked against `ranked-leaderboard-query` only when the client validates.
|
|
54
|
+
*/
|
|
55
|
+
function leaderboardPath(requester, windowId, options) {
|
|
56
|
+
const query = requester.validate('ranked-leaderboard-query', options);
|
|
57
|
+
const parameters = new URLSearchParams();
|
|
58
|
+
if (query.queue != null) {
|
|
59
|
+
parameters.set('queue', query.queue);
|
|
60
|
+
}
|
|
61
|
+
if (query.offset != null) {
|
|
62
|
+
parameters.set('offset', String(query.offset));
|
|
63
|
+
}
|
|
64
|
+
if (query.limit != null) {
|
|
65
|
+
parameters.set('limit', String(query.limit));
|
|
66
|
+
}
|
|
67
|
+
const suffix = parameters.size === 0 ? '' : `?${parameters.toString()}`;
|
|
68
|
+
return `/api/admin/ranked/meta-windows/${encodeURIComponent(windowId)}/leaderboard${suffix}`;
|
|
69
|
+
}
|
|
70
|
+
function authHeaders(auth, headers = {}) {
|
|
71
|
+
return {
|
|
72
|
+
...headers,
|
|
73
|
+
authorization: `Bearer ${auth.token}`,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SimulatorRequestOptions } from '../http/options.js';
|
|
2
|
+
import type { EngineHttpRequester } from '../http/request.js';
|
|
3
|
+
import type { DeckInput, DeckJson } from './card-types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Converts one my-swu JSON deck export into simulator deck input.
|
|
6
|
+
*
|
|
7
|
+
* Token cards (the Credit or Force token, …) can ride along in deck
|
|
8
|
+
* exports but are not deck cards — deck and sideboard entries that only
|
|
9
|
+
* resolve to a token are skipped instead of failing the import.
|
|
10
|
+
*/
|
|
11
|
+
export declare function convertDeckJson(requester: EngineHttpRequester, input: DeckJson | string, options?: SimulatorRequestOptions): Promise<DeckInput>;
|