@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,164 @@
|
|
|
1
|
+
import { jsonBody, jsonHeaders } from '../http/json.js';
|
|
2
|
+
import { referenceLabel, requireResolvedCardId } from './card-resolution.js';
|
|
3
|
+
/**
|
|
4
|
+
* Converts one my-swu JSON deck export into simulator deck input.
|
|
5
|
+
*
|
|
6
|
+
* Token cards (the Credit or Force token, …) can ride along in deck
|
|
7
|
+
* exports but are not deck cards — deck and sideboard entries that only
|
|
8
|
+
* resolve to a token are skipped instead of failing the import.
|
|
9
|
+
*/
|
|
10
|
+
export async function convertDeckJson(requester, input, options) {
|
|
11
|
+
const deckJson = parseDeckJson(input);
|
|
12
|
+
const pending = collectPendingDeckJsonReferences(deckJson);
|
|
13
|
+
const resolutions = await requester.request('resolve-card-ids-response', '/api/cards/resolve', {
|
|
14
|
+
body: jsonBody(requester.validate('resolve-card-ids-request', {
|
|
15
|
+
references: pending.map(item => item.reference),
|
|
16
|
+
})),
|
|
17
|
+
headers: jsonHeaders(),
|
|
18
|
+
method: 'POST',
|
|
19
|
+
}, options).then(response => response.resolutions);
|
|
20
|
+
const leaders = [];
|
|
21
|
+
let base;
|
|
22
|
+
const cards = [];
|
|
23
|
+
const sideboard = [];
|
|
24
|
+
pending.forEach((item, index) => {
|
|
25
|
+
if (item.section === 'leader' || item.section === 'base') {
|
|
26
|
+
const cardId = requireResolvedCardId(resolutions[index], referenceLabel(item.reference));
|
|
27
|
+
if (item.section === 'leader') {
|
|
28
|
+
leaders.push(cardId);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
base = cardId;
|
|
32
|
+
}
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const cardId = pickDeckCardId(resolutions[index], referenceLabel(item.reference));
|
|
36
|
+
if (cardId == null) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (item.section === 'deck') {
|
|
40
|
+
cards.push(...Array.from({ length: item.count }, () => cardId));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
sideboard.push(...Array.from({ length: item.count }, () => cardId));
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return {
|
|
47
|
+
...(leaders.length === 1 ? { leader: leaders[0] } : {}),
|
|
48
|
+
leaders: leaders.length > 1 ? leaders : [],
|
|
49
|
+
...(base == null ? {} : { base }),
|
|
50
|
+
cards,
|
|
51
|
+
sideboard,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Resolves one deck/sideboard entry, skipping token-only references.
|
|
56
|
+
*
|
|
57
|
+
* Returns `undefined` when the entry only matches token cards so the
|
|
58
|
+
* caller can strip it from the converted deck. When a token shares a
|
|
59
|
+
* printed number with a regular card, the regular card wins.
|
|
60
|
+
*/
|
|
61
|
+
function pickDeckCardId(resolution, label) {
|
|
62
|
+
if (resolution == null || resolution.matches.length === 0) {
|
|
63
|
+
throw new Error(`card reference ${label} was not found`);
|
|
64
|
+
}
|
|
65
|
+
const deckMatches = resolution.matches.filter(match => match.cardType !== 'token');
|
|
66
|
+
const [deckMatch] = deckMatches;
|
|
67
|
+
if (deckMatches.length === 1 && deckMatch != null) {
|
|
68
|
+
return deckMatch.cardId;
|
|
69
|
+
}
|
|
70
|
+
if (deckMatch == null) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
const matches = deckMatches
|
|
74
|
+
.map(match => `${match.cardId} (${match.cardType}: ${match.title})`)
|
|
75
|
+
.join(', ');
|
|
76
|
+
throw new Error(`card reference ${label} is ambiguous: ${matches}`);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Collects card references from one my-swu JSON deck by deck section.
|
|
80
|
+
*/
|
|
81
|
+
function collectPendingDeckJsonReferences(deckJson) {
|
|
82
|
+
const pending = [];
|
|
83
|
+
if (deckJson.leader != null) {
|
|
84
|
+
pending.push({
|
|
85
|
+
count: 1,
|
|
86
|
+
reference: referenceFromDeckJsonId(deckJson.leader.id, ['leader']),
|
|
87
|
+
section: 'leader',
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (deckJson.secondleader != null) {
|
|
91
|
+
pending.push({
|
|
92
|
+
count: 1,
|
|
93
|
+
reference: referenceFromDeckJsonId(deckJson.secondleader.id, ['leader']),
|
|
94
|
+
section: 'leader',
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
if (deckJson.base != null) {
|
|
98
|
+
pending.push({
|
|
99
|
+
count: 1,
|
|
100
|
+
reference: referenceFromDeckJsonId(deckJson.base.id, ['base']),
|
|
101
|
+
section: 'base',
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
for (const entry of deckJson.deck ?? []) {
|
|
105
|
+
pending.push({
|
|
106
|
+
count: entryCount(entry),
|
|
107
|
+
reference: referenceFromDeckJsonId(entry.id, ['unit', 'event', 'upgrade', 'token']),
|
|
108
|
+
section: 'deck',
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
for (const entry of deckJson.sideboard ?? []) {
|
|
112
|
+
pending.push({
|
|
113
|
+
count: entryCount(entry),
|
|
114
|
+
reference: referenceFromDeckJsonId(entry.id, ['unit', 'event', 'upgrade', 'token']),
|
|
115
|
+
section: 'sideboard',
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return pending;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Parses one deck JSON object or JSON string.
|
|
122
|
+
*/
|
|
123
|
+
function parseDeckJson(input) {
|
|
124
|
+
if (typeof input !== 'string') {
|
|
125
|
+
return input;
|
|
126
|
+
}
|
|
127
|
+
const parsed = JSON.parse(input);
|
|
128
|
+
if (parsed == null || typeof parsed !== 'object') {
|
|
129
|
+
throw new Error('deck JSON must be an object');
|
|
130
|
+
}
|
|
131
|
+
return parsed;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Converts one `SET_001` deck JSON id into a card-reference lookup.
|
|
135
|
+
*/
|
|
136
|
+
function referenceFromDeckJsonId(id, cardTypes) {
|
|
137
|
+
const match = /^([A-Za-z0-9]+)_(\d+)$/.exec(id.trim());
|
|
138
|
+
if (match == null) {
|
|
139
|
+
throw new Error(`deck JSON card id must use SET_001 form: ${id}`);
|
|
140
|
+
}
|
|
141
|
+
const setCode = match[1];
|
|
142
|
+
const cardNumberText = match[2];
|
|
143
|
+
if (setCode == null || cardNumberText == null) {
|
|
144
|
+
throw new Error(`deck JSON card id must use SET_001 form: ${id}`);
|
|
145
|
+
}
|
|
146
|
+
const cardNumber = Number.parseInt(cardNumberText, 10);
|
|
147
|
+
if (!Number.isSafeInteger(cardNumber) || cardNumber <= 0) {
|
|
148
|
+
throw new Error(`deck JSON card id has invalid card number: ${id}`);
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
setCode: setCode.toUpperCase(),
|
|
152
|
+
cardNumber,
|
|
153
|
+
cardTypes,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Returns one positive card count from a deck JSON entry.
|
|
158
|
+
*/
|
|
159
|
+
function entryCount(entry) {
|
|
160
|
+
if (!Number.isInteger(entry.count) || entry.count <= 0) {
|
|
161
|
+
throw new Error(`deck JSON card count must be a positive integer for ${entry.id}`);
|
|
162
|
+
}
|
|
163
|
+
return entry.count;
|
|
164
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CardIdResolution, CardReferenceInput } from './card-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Returns the unique resolved card id or throws a useful import error.
|
|
4
|
+
*/
|
|
5
|
+
export declare function requireResolvedCardId(resolution: CardIdResolution | undefined, label: string): number;
|
|
6
|
+
/**
|
|
7
|
+
* Formats one card reference for importer error messages.
|
|
8
|
+
*/
|
|
9
|
+
export declare function referenceLabel(reference: CardReferenceInput): string;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns the unique resolved card id or throws a useful import error.
|
|
3
|
+
*/
|
|
4
|
+
export function requireResolvedCardId(resolution, label) {
|
|
5
|
+
if (resolution == null || resolution.matches.length === 0) {
|
|
6
|
+
throw new Error(`card reference ${label} was not found`);
|
|
7
|
+
}
|
|
8
|
+
if (resolution.cardId == null) {
|
|
9
|
+
const matches = resolution.matches
|
|
10
|
+
.map(match => `${match.cardId} (${match.cardType}: ${match.title})`)
|
|
11
|
+
.join(', ');
|
|
12
|
+
throw new Error(`card reference ${label} is ambiguous: ${matches}`);
|
|
13
|
+
}
|
|
14
|
+
return resolution.cardId;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Formats one card reference for importer error messages.
|
|
18
|
+
*/
|
|
19
|
+
export function referenceLabel(reference) {
|
|
20
|
+
return `${reference.setCode}_${String(reference.cardNumber).padStart(3, '0')}`;
|
|
21
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import type { SimulatorRequestOptions } from '../http/options.js';
|
|
2
|
+
import type { EngineHttpRequester } from '../http/request.js';
|
|
3
|
+
import type { CardIdResolution, CardMetadata, CardReferenceInput, DeckInput, DeckJson } from './card-types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Card metadata and deck import API methods.
|
|
6
|
+
*
|
|
7
|
+
* Use this resource to fetch canonical display metadata and convert my-swu
|
|
8
|
+
* JSON deck exports before creating a match.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { createSimulatorClient } from '@my-swu/simulator-client'
|
|
13
|
+
*
|
|
14
|
+
* const simulatorClient = createSimulatorClient({
|
|
15
|
+
* baseUrl: 'http://127.0.0.1:4000',
|
|
16
|
+
* })
|
|
17
|
+
*
|
|
18
|
+
* const requestedCardMetadata = await simulatorClient.cards.get([46102, 308])
|
|
19
|
+
* console.log(requestedCardMetadata.map(card => card.title))
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @see https://simulator-sdk.my-swu.com/guide/card-ids
|
|
23
|
+
* @see https://simulator-sdk.my-swu.com/guide/client-api
|
|
24
|
+
*/
|
|
25
|
+
export interface CardsResource {
|
|
26
|
+
/**
|
|
27
|
+
* Fetches canonical metadata for the requested card ids.
|
|
28
|
+
*
|
|
29
|
+
* Use this when snapshots or deck lists only contain card ids and your UI
|
|
30
|
+
* needs titles, aspects, traits, cost, rules text, or other display metadata.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* import { createSimulatorClient } from '@my-swu/simulator-client'
|
|
35
|
+
*
|
|
36
|
+
* const simulatorClient = createSimulatorClient({
|
|
37
|
+
* baseUrl: 'http://127.0.0.1:4000',
|
|
38
|
+
* })
|
|
39
|
+
*
|
|
40
|
+
* const requestedCardMetadata = await simulatorClient.cards.get([46102, 308])
|
|
41
|
+
* console.log(requestedCardMetadata.map(card => card.title))
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @see https://simulator-sdk.my-swu.com/guide/card-ids
|
|
45
|
+
*/
|
|
46
|
+
get(ids: number[], options?: SimulatorRequestOptions): Promise<CardMetadata[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Lists canonical production card metadata for every card identity.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts
|
|
52
|
+
* import { createSimulatorClient } from '@my-swu/simulator-client'
|
|
53
|
+
*
|
|
54
|
+
* const simulatorClient = createSimulatorClient({
|
|
55
|
+
* baseUrl: 'http://127.0.0.1:4000',
|
|
56
|
+
* })
|
|
57
|
+
*
|
|
58
|
+
* const catalog = await simulatorClient.cards.catalog()
|
|
59
|
+
* console.log(catalog.length)
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @see https://simulator-sdk.my-swu.com/guide/client-api
|
|
63
|
+
*/
|
|
64
|
+
catalog(options?: SimulatorRequestOptions): Promise<CardMetadata[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Converts a my-swu JSON deck export into simulator deck input.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* import { createSimulatorClient } from '@my-swu/simulator-client'
|
|
71
|
+
*
|
|
72
|
+
* const simulatorClient = createSimulatorClient({
|
|
73
|
+
* baseUrl: 'http://127.0.0.1:4000',
|
|
74
|
+
* })
|
|
75
|
+
*
|
|
76
|
+
* const importedDeck = await simulatorClient.cards.convertDeckJson({
|
|
77
|
+
* leader: { id: 'SOR_001', count: 1 },
|
|
78
|
+
* base: { id: 'SOR_025', count: 1 },
|
|
79
|
+
* deck: [{ id: 'SOR_010', count: 3 }],
|
|
80
|
+
* })
|
|
81
|
+
*
|
|
82
|
+
* console.log(importedDeck.cards.length)
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* @see https://simulator-sdk.my-swu.com/guide/card-ids#json-deck-imports
|
|
86
|
+
*/
|
|
87
|
+
convertDeckJson(deckJson: DeckJson | string, options?: SimulatorRequestOptions): Promise<DeckInput>;
|
|
88
|
+
/**
|
|
89
|
+
* Resolves one set-code/card-number reference into one card id.
|
|
90
|
+
*
|
|
91
|
+
* This helper throws when the reference is not found or stays ambiguous after
|
|
92
|
+
* applying `cardTypes`.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```ts
|
|
96
|
+
* import { createSimulatorClient } from '@my-swu/simulator-client'
|
|
97
|
+
*
|
|
98
|
+
* const simulatorClient = createSimulatorClient({
|
|
99
|
+
* baseUrl: 'http://127.0.0.1:4000',
|
|
100
|
+
* })
|
|
101
|
+
*
|
|
102
|
+
* const krennicCardId = await simulatorClient.cards.resolveId({
|
|
103
|
+
* setCode: 'SOR',
|
|
104
|
+
* cardNumber: 1,
|
|
105
|
+
* cardTypes: [
|
|
106
|
+
* 'leader',
|
|
107
|
+
* ],
|
|
108
|
+
* })
|
|
109
|
+
*
|
|
110
|
+
* console.log(krennicCardId)
|
|
111
|
+
* ```
|
|
112
|
+
*
|
|
113
|
+
* @see https://simulator-sdk.my-swu.com/guide/card-ids#resolving-card-ids
|
|
114
|
+
*/
|
|
115
|
+
resolveId(reference: CardReferenceInput, options?: SimulatorRequestOptions): Promise<number>;
|
|
116
|
+
/**
|
|
117
|
+
* Resolves set-code/card-number references through the simulator card cache.
|
|
118
|
+
*
|
|
119
|
+
* Use this for bulk deck imports so you can show all not-found and ambiguous
|
|
120
|
+
* references together instead of failing at the first issue.
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```ts
|
|
124
|
+
* import { createSimulatorClient } from '@my-swu/simulator-client'
|
|
125
|
+
*
|
|
126
|
+
* const simulatorClient = createSimulatorClient({
|
|
127
|
+
* baseUrl: 'http://127.0.0.1:4000',
|
|
128
|
+
* })
|
|
129
|
+
*
|
|
130
|
+
* const cardIdResolutions = await simulatorClient.cards.resolveIds([
|
|
131
|
+
* {
|
|
132
|
+
* setCode: 'SOR',
|
|
133
|
+
* cardNumber: 1,
|
|
134
|
+
* cardTypes: [
|
|
135
|
+
* 'leader',
|
|
136
|
+
* ],
|
|
137
|
+
* },
|
|
138
|
+
* {
|
|
139
|
+
* setCode: 'SOR',
|
|
140
|
+
* cardNumber: 25,
|
|
141
|
+
* cardTypes: [
|
|
142
|
+
* 'base',
|
|
143
|
+
* ],
|
|
144
|
+
* },
|
|
145
|
+
* ])
|
|
146
|
+
*
|
|
147
|
+
* console.log(cardIdResolutions.map(result => result.cardId))
|
|
148
|
+
* ```
|
|
149
|
+
*
|
|
150
|
+
* @see https://simulator-sdk.my-swu.com/guide/card-ids#resolving-card-ids
|
|
151
|
+
*/
|
|
152
|
+
resolveIds(references: CardReferenceInput[], options?: SimulatorRequestOptions): Promise<CardIdResolution[]>;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Creates the cards resource client from the shared HTTP requester.
|
|
156
|
+
*/
|
|
157
|
+
export declare function createCardsResource(requester: EngineHttpRequester): CardsResource;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsonBody, jsonHeaders } from '../http/json.js';
|
|
2
|
+
import { convertDeckJson } from './card-deck-json.js';
|
|
3
|
+
import { referenceLabel, requireResolvedCardId } from './card-resolution.js';
|
|
4
|
+
/**
|
|
5
|
+
* Creates the cards resource client from the shared HTTP requester.
|
|
6
|
+
*/
|
|
7
|
+
export function createCardsResource(requester) {
|
|
8
|
+
const resolveIds = (references, options) => requester.request('resolve-card-ids-response', '/api/cards/resolve', {
|
|
9
|
+
body: jsonBody(requester.validate('resolve-card-ids-request', { references })),
|
|
10
|
+
headers: jsonHeaders(),
|
|
11
|
+
method: 'POST',
|
|
12
|
+
}, options).then(response => response.resolutions);
|
|
13
|
+
return {
|
|
14
|
+
catalog: options => requester.request('cards-response', '/api/cards/catalog', {}, options)
|
|
15
|
+
.then(response => response.cards),
|
|
16
|
+
convertDeckJson: (deckJson, options) => convertDeckJson(requester, deckJson, options),
|
|
17
|
+
get: (ids, options) => {
|
|
18
|
+
const query = new URLSearchParams({ ids: ids.join(',') });
|
|
19
|
+
return requester.request('cards-response', `/api/cards?${query.toString()}`, {}, options)
|
|
20
|
+
.then(response => response.cards);
|
|
21
|
+
},
|
|
22
|
+
resolveId: async (reference, options) => {
|
|
23
|
+
const [resolution] = await resolveIds([reference], options);
|
|
24
|
+
return requireResolvedCardId(resolution, referenceLabel(reference));
|
|
25
|
+
},
|
|
26
|
+
resolveIds,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import type { CardMetadataView } from '../generated/types/cards-response.js';
|
|
2
|
+
import type { DeckInput as GeneratedDeckInput } from '../generated/types/create-match-request.js';
|
|
3
|
+
import type { CardReferenceInput as GeneratedCardReferenceInput, CardType } from '../generated/types/resolve-card-ids-request.js';
|
|
4
|
+
import type { CardIdResolutionView } from '../generated/types/resolve-card-ids-response.js';
|
|
5
|
+
/**
|
|
6
|
+
* Canonical card metadata returned by `cards.get()`.
|
|
7
|
+
*
|
|
8
|
+
* Use this type when rendering names, traits, aspects, rules text, or other
|
|
9
|
+
* stable card display data for card ids that appear in decks, snapshots, and
|
|
10
|
+
* commands.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { createSimulatorClient, type CardMetadata } from '@my-swu/simulator-client'
|
|
15
|
+
*
|
|
16
|
+
* const simulatorClient = createSimulatorClient({
|
|
17
|
+
* baseUrl: 'http://127.0.0.1:4000',
|
|
18
|
+
* })
|
|
19
|
+
*
|
|
20
|
+
* const requestedCardMetadata: CardMetadata[] =
|
|
21
|
+
* await simulatorClient.cards.get([46102, 308])
|
|
22
|
+
* console.log(requestedCardMetadata[0]?.title)
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @see https://simulator-sdk.my-swu.com/guide/card-ids
|
|
26
|
+
*/
|
|
27
|
+
export type CardMetadata = CardMetadataView;
|
|
28
|
+
/**
|
|
29
|
+
* Deck payload accepted by match creation and join calls.
|
|
30
|
+
*
|
|
31
|
+
* The same shape is used for Premier, Eternal, Trilogy, Draft, Sealed, Twin
|
|
32
|
+
* Suns, and AI opponent decks. The server validates format-specific legality
|
|
33
|
+
* when the deck is submitted.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* import type { DeckInput } from '@my-swu/simulator-client'
|
|
38
|
+
*
|
|
39
|
+
* const premierDeck: DeckInput = {
|
|
40
|
+
* leader: 46102,
|
|
41
|
+
* leaders: [],
|
|
42
|
+
* base: 308,
|
|
43
|
+
* cards: Array.from({ length: 50 }, () => 45),
|
|
44
|
+
* sideboard: [],
|
|
45
|
+
* }
|
|
46
|
+
*
|
|
47
|
+
* console.log(premierDeck.cards.length)
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @see https://simulator-sdk.my-swu.com/guide/deckbuilding-formats
|
|
51
|
+
*/
|
|
52
|
+
export type DeckInput = GeneratedDeckInput;
|
|
53
|
+
/**
|
|
54
|
+
* Set-code/card-number lookup input.
|
|
55
|
+
*
|
|
56
|
+
* Use this for imports from deck tools that identify cards as `SOR_001` or as
|
|
57
|
+
* separate set code plus printed card number values.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```ts
|
|
61
|
+
* import type { CardReferenceInput } from '@my-swu/simulator-client'
|
|
62
|
+
*
|
|
63
|
+
* const leaderReference: CardReferenceInput = {
|
|
64
|
+
* setCode: 'SOR',
|
|
65
|
+
* cardNumber: 1,
|
|
66
|
+
* cardTypes: [
|
|
67
|
+
* 'leader',
|
|
68
|
+
* ],
|
|
69
|
+
* }
|
|
70
|
+
*
|
|
71
|
+
* console.log(leaderReference.setCode)
|
|
72
|
+
* ```
|
|
73
|
+
*
|
|
74
|
+
* @see https://simulator-sdk.my-swu.com/guide/card-ids#resolving-card-ids
|
|
75
|
+
*/
|
|
76
|
+
export type CardReferenceInput = GeneratedCardReferenceInput;
|
|
77
|
+
/**
|
|
78
|
+
* Set-code/card-number lookup result.
|
|
79
|
+
*
|
|
80
|
+
* `cardId` is present only when the lookup produced exactly one match. When it
|
|
81
|
+
* is missing, inspect `matches` to show a not-found or ambiguous-reference UI.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```ts
|
|
85
|
+
* import { createSimulatorClient, type CardIdResolution } from '@my-swu/simulator-client'
|
|
86
|
+
*
|
|
87
|
+
* const simulatorClient = createSimulatorClient({
|
|
88
|
+
* baseUrl: 'http://127.0.0.1:4000',
|
|
89
|
+
* })
|
|
90
|
+
*
|
|
91
|
+
* const [leaderResolution]: CardIdResolution[] =
|
|
92
|
+
* await simulatorClient.cards.resolveIds([
|
|
93
|
+
* {
|
|
94
|
+
* setCode: 'SOR',
|
|
95
|
+
* cardNumber: 1,
|
|
96
|
+
* cardTypes: [
|
|
97
|
+
* 'leader',
|
|
98
|
+
* ],
|
|
99
|
+
* },
|
|
100
|
+
* ])
|
|
101
|
+
* console.log(leaderResolution?.cardId)
|
|
102
|
+
* ```
|
|
103
|
+
*
|
|
104
|
+
* @see https://simulator-sdk.my-swu.com/guide/card-ids#resolving-card-ids
|
|
105
|
+
*/
|
|
106
|
+
export type CardIdResolution = CardIdResolutionView;
|
|
107
|
+
/**
|
|
108
|
+
* Card type labels accepted by card reference lookup.
|
|
109
|
+
*
|
|
110
|
+
* Pass these when a set number can refer to more than one card type, such as
|
|
111
|
+
* leaders, bases, or tokens sharing printed numbers.
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```ts
|
|
115
|
+
* import type { CardReferenceType } from '@my-swu/simulator-client'
|
|
116
|
+
*
|
|
117
|
+
* const leaderOnly: CardReferenceType[] = [
|
|
118
|
+
* 'leader',
|
|
119
|
+
* ]
|
|
120
|
+
* console.log(leaderOnly.includes('leader'))
|
|
121
|
+
* ```
|
|
122
|
+
*
|
|
123
|
+
* @see https://simulator-sdk.my-swu.com/guide/card-ids#resolving-card-ids
|
|
124
|
+
*/
|
|
125
|
+
export type CardReferenceType = CardType;
|
|
126
|
+
/**
|
|
127
|
+
* One card entry in my-swu JSON deck exports.
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```ts
|
|
131
|
+
* import type { DeckJsonCard } from '@my-swu/simulator-client'
|
|
132
|
+
*
|
|
133
|
+
* const exportedCard: DeckJsonCard = {
|
|
134
|
+
* id: 'SOR_010',
|
|
135
|
+
* count: 3,
|
|
136
|
+
* }
|
|
137
|
+
*
|
|
138
|
+
* console.log(exportedCard.id)
|
|
139
|
+
* ```
|
|
140
|
+
*
|
|
141
|
+
* @see https://simulator-sdk.my-swu.com/guide/card-ids#json-deck-imports
|
|
142
|
+
*/
|
|
143
|
+
export interface DeckJsonCard {
|
|
144
|
+
/**
|
|
145
|
+
* Exported card id in `SET_001` form.
|
|
146
|
+
*/
|
|
147
|
+
id: string;
|
|
148
|
+
/**
|
|
149
|
+
* Number of copies in this section.
|
|
150
|
+
*/
|
|
151
|
+
count: number;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* my-swu JSON deck export shape accepted by `cards.convertDeckJson()`.
|
|
155
|
+
*
|
|
156
|
+
* Unknown `metadata` contents and `reserve` cards are ignored because they are
|
|
157
|
+
* deckbuilder annotations, not simulator deck input.
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* ```ts
|
|
161
|
+
* import type { DeckJson } from '@my-swu/simulator-client'
|
|
162
|
+
*
|
|
163
|
+
* const exportedDeck: DeckJson = {
|
|
164
|
+
* leader: { id: 'SOR_001', count: 1 },
|
|
165
|
+
* base: { id: 'SOR_025', count: 1 },
|
|
166
|
+
* deck: [{ id: 'SOR_010', count: 3 }],
|
|
167
|
+
* }
|
|
168
|
+
*
|
|
169
|
+
* console.log(exportedDeck.deck?.length)
|
|
170
|
+
* ```
|
|
171
|
+
*
|
|
172
|
+
* @see https://simulator-sdk.my-swu.com/guide/card-ids#json-deck-imports
|
|
173
|
+
*/
|
|
174
|
+
export interface DeckJson {
|
|
175
|
+
/**
|
|
176
|
+
* Optional deck metadata. Ignored by simulator deck conversion.
|
|
177
|
+
*/
|
|
178
|
+
metadata?: unknown;
|
|
179
|
+
/**
|
|
180
|
+
* Primary leader entry.
|
|
181
|
+
*/
|
|
182
|
+
leader?: DeckJsonCard | null;
|
|
183
|
+
/**
|
|
184
|
+
* Optional second leader entry used by Twin Suns exports.
|
|
185
|
+
*/
|
|
186
|
+
secondleader?: DeckJsonCard | null;
|
|
187
|
+
/**
|
|
188
|
+
* Base entry.
|
|
189
|
+
*/
|
|
190
|
+
base?: DeckJsonCard | null;
|
|
191
|
+
/**
|
|
192
|
+
* Main-deck card entries.
|
|
193
|
+
*/
|
|
194
|
+
deck?: DeckJsonCard[];
|
|
195
|
+
/**
|
|
196
|
+
* Sideboard entries.
|
|
197
|
+
*/
|
|
198
|
+
sideboard?: DeckJsonCard[];
|
|
199
|
+
/**
|
|
200
|
+
* Reserved cards from deckbuilding notes. Ignored by simulator deck conversion.
|
|
201
|
+
*/
|
|
202
|
+
reserve?: DeckJsonCard[];
|
|
203
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { createCardsResource } from './card-resource.js';
|