@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.
Files changed (530) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +355 -0
  3. package/dist/actionable.d.ts +61 -0
  4. package/dist/actionable.js +91 -0
  5. package/dist/client.d.ts +157 -0
  6. package/dist/client.js +92 -0
  7. package/dist/connection/handshake.d.ts +30 -0
  8. package/dist/connection/handshake.js +62 -0
  9. package/dist/connection/options.d.ts +36 -0
  10. package/dist/connection/options.js +1 -0
  11. package/dist/connection/url.d.ts +55 -0
  12. package/dist/connection/url.js +46 -0
  13. package/dist/connection/wait.d.ts +22 -0
  14. package/dist/connection/wait.js +10 -0
  15. package/dist/connection.d.ts +110 -0
  16. package/dist/connection.js +358 -0
  17. package/dist/generated/index.d.ts +121 -0
  18. package/dist/generated/index.js +1 -0
  19. package/dist/generated/public-types.d.ts +2 -0
  20. package/dist/generated/public-types.js +1 -0
  21. package/dist/generated/schemas.d.ts +27 -0
  22. package/dist/generated/schemas.js +21264 -0
  23. package/dist/generated/types/abandon-match-request.d.ts +1 -0
  24. package/dist/generated/types/abandon-match-request.js +2 -0
  25. package/dist/generated/types/abandon-match-response.d.ts +1 -0
  26. package/dist/generated/types/abandon-match-response.js +2 -0
  27. package/dist/generated/types/add-lobby-ai-player-request.d.ts +1 -0
  28. package/dist/generated/types/add-lobby-ai-player-request.js +2 -0
  29. package/dist/generated/types/ai-driver-error-report-list-response.d.ts +1 -0
  30. package/dist/generated/types/ai-driver-error-report-list-response.js +2 -0
  31. package/dist/generated/types/ai-driver-error-report-response.d.ts +1 -0
  32. package/dist/generated/types/ai-driver-error-report-response.js +2 -0
  33. package/dist/generated/types/api-error-response.d.ts +1 -0
  34. package/dist/generated/types/api-error-response.js +2 -0
  35. package/dist/generated/types/card-catalog-refresh-response.d.ts +1 -0
  36. package/dist/generated/types/card-catalog-refresh-response.js +2 -0
  37. package/dist/generated/types/cards-response.d.ts +1 -0
  38. package/dist/generated/types/cards-response.js +2 -0
  39. package/dist/generated/types/client-message.d.ts +1 -0
  40. package/dist/generated/types/client-message.js +2 -0
  41. package/dist/generated/types/close-tournament-room-request.d.ts +1 -0
  42. package/dist/generated/types/close-tournament-room-request.js +2 -0
  43. package/dist/generated/types/common.d.ts +5361 -0
  44. package/dist/generated/types/common.js +2 -0
  45. package/dist/generated/types/covered-cards-response.d.ts +47 -0
  46. package/dist/generated/types/covered-cards-response.js +2 -0
  47. package/dist/generated/types/create-limited-event-request.d.ts +1 -0
  48. package/dist/generated/types/create-limited-event-request.js +2 -0
  49. package/dist/generated/types/create-lobby-request.d.ts +1 -0
  50. package/dist/generated/types/create-lobby-request.js +2 -0
  51. package/dist/generated/types/create-match-request.d.ts +1 -0
  52. package/dist/generated/types/create-match-request.js +2 -0
  53. package/dist/generated/types/create-meta-window-request.d.ts +1 -0
  54. package/dist/generated/types/create-meta-window-request.js +2 -0
  55. package/dist/generated/types/create-tournament-room-request.d.ts +1 -0
  56. package/dist/generated/types/create-tournament-room-request.js +2 -0
  57. package/dist/generated/types/create-tournament-table-request.d.ts +1 -0
  58. package/dist/generated/types/create-tournament-table-request.js +2 -0
  59. package/dist/generated/types/error-payload.d.ts +1 -0
  60. package/dist/generated/types/error-payload.js +2 -0
  61. package/dist/generated/types/format-event-request.d.ts +1 -0
  62. package/dist/generated/types/format-event-request.js +2 -0
  63. package/dist/generated/types/format-event-response.d.ts +1 -0
  64. package/dist/generated/types/format-event-response.js +2 -0
  65. package/dist/generated/types/game-command.d.ts +1 -0
  66. package/dist/generated/types/game-command.js +2 -0
  67. package/dist/generated/types/game-event.d.ts +1 -0
  68. package/dist/generated/types/game-event.js +2 -0
  69. package/dist/generated/types/game-state.d.ts +1 -0
  70. package/dist/generated/types/game-state.js +2 -0
  71. package/dist/generated/types/get-match-response.d.ts +1 -0
  72. package/dist/generated/types/get-match-response.js +2 -0
  73. package/dist/generated/types/health-response.d.ts +1 -0
  74. package/dist/generated/types/health-response.js +2 -0
  75. package/dist/generated/types/join-limited-event-request.d.ts +1 -0
  76. package/dist/generated/types/join-limited-event-request.js +2 -0
  77. package/dist/generated/types/join-lobby-request.d.ts +1 -0
  78. package/dist/generated/types/join-lobby-request.js +2 -0
  79. package/dist/generated/types/join-match-request.d.ts +1 -0
  80. package/dist/generated/types/join-match-request.js +2 -0
  81. package/dist/generated/types/join-tournament-room-request.d.ts +1 -0
  82. package/dist/generated/types/join-tournament-room-request.js +2 -0
  83. package/dist/generated/types/join-tournament-table-request.d.ts +1 -0
  84. package/dist/generated/types/join-tournament-table-request.js +2 -0
  85. package/dist/generated/types/kick-lobby-player-request.d.ts +1 -0
  86. package/dist/generated/types/kick-lobby-player-request.js +2 -0
  87. package/dist/generated/types/kick-lobby-spectator-request.d.ts +1 -0
  88. package/dist/generated/types/kick-lobby-spectator-request.js +2 -0
  89. package/dist/generated/types/leave-lobby-request.d.ts +1 -0
  90. package/dist/generated/types/leave-lobby-request.js +2 -0
  91. package/dist/generated/types/leave-match-request.d.ts +1 -0
  92. package/dist/generated/types/leave-match-request.js +2 -0
  93. package/dist/generated/types/leave-match-response.d.ts +1 -0
  94. package/dist/generated/types/leave-match-response.js +2 -0
  95. package/dist/generated/types/leave-tournament-room-request.d.ts +1 -0
  96. package/dist/generated/types/leave-tournament-room-request.js +2 -0
  97. package/dist/generated/types/limited-event-access-response.d.ts +1 -0
  98. package/dist/generated/types/limited-event-access-response.js +2 -0
  99. package/dist/generated/types/limited-event-command-request.d.ts +1 -0
  100. package/dist/generated/types/limited-event-command-request.js +2 -0
  101. package/dist/generated/types/limited-event-preflight-response.d.ts +1 -0
  102. package/dist/generated/types/limited-event-preflight-response.js +2 -0
  103. package/dist/generated/types/limited-event-response.d.ts +1 -0
  104. package/dist/generated/types/limited-event-response.js +2 -0
  105. package/dist/generated/types/list-active-ai-matches-request.d.ts +1 -0
  106. package/dist/generated/types/list-active-ai-matches-request.js +2 -0
  107. package/dist/generated/types/list-active-ai-matches-response.d.ts +1 -0
  108. package/dist/generated/types/list-active-ai-matches-response.js +2 -0
  109. package/dist/generated/types/lobby-access-response.d.ts +1 -0
  110. package/dist/generated/types/lobby-access-response.js +2 -0
  111. package/dist/generated/types/lobby-chat-request.d.ts +1 -0
  112. package/dist/generated/types/lobby-chat-request.js +2 -0
  113. package/dist/generated/types/lobby-chat-response.d.ts +1 -0
  114. package/dist/generated/types/lobby-chat-response.js +2 -0
  115. package/dist/generated/types/lobby-list-response.d.ts +1 -0
  116. package/dist/generated/types/lobby-list-response.js +2 -0
  117. package/dist/generated/types/lobby-list-server-message.d.ts +1 -0
  118. package/dist/generated/types/lobby-list-server-message.js +2 -0
  119. package/dist/generated/types/lobby-matchmaking-decision-request.d.ts +1 -0
  120. package/dist/generated/types/lobby-matchmaking-decision-request.js +2 -0
  121. package/dist/generated/types/lobby-matchmaking-request.d.ts +1 -0
  122. package/dist/generated/types/lobby-matchmaking-request.js +2 -0
  123. package/dist/generated/types/lobby-response.d.ts +1 -0
  124. package/dist/generated/types/lobby-response.js +2 -0
  125. package/dist/generated/types/lobby-server-message.d.ts +1 -0
  126. package/dist/generated/types/lobby-server-message.js +2 -0
  127. package/dist/generated/types/lobby-sync-request.d.ts +1 -0
  128. package/dist/generated/types/lobby-sync-request.js +2 -0
  129. package/dist/generated/types/match-access-response.d.ts +1 -0
  130. package/dist/generated/types/match-access-response.js +2 -0
  131. package/dist/generated/types/match-chat-lookup-response.d.ts +1 -0
  132. package/dist/generated/types/match-chat-lookup-response.js +2 -0
  133. package/dist/generated/types/match-connection-role.d.ts +1 -0
  134. package/dist/generated/types/match-connection-role.js +2 -0
  135. package/dist/generated/types/match-history-deck-stats-request.d.ts +1 -0
  136. package/dist/generated/types/match-history-deck-stats-request.js +2 -0
  137. package/dist/generated/types/match-history-deck-stats-response.d.ts +1 -0
  138. package/dist/generated/types/match-history-deck-stats-response.js +2 -0
  139. package/dist/generated/types/match-history-entry.d.ts +1 -0
  140. package/dist/generated/types/match-history-entry.js +2 -0
  141. package/dist/generated/types/match-history-list-request.d.ts +1 -0
  142. package/dist/generated/types/match-history-list-request.js +2 -0
  143. package/dist/generated/types/match-history-list-response.d.ts +1 -0
  144. package/dist/generated/types/match-history-list-response.js +2 -0
  145. package/dist/generated/types/match-history-replay-request.d.ts +1 -0
  146. package/dist/generated/types/match-history-replay-request.js +2 -0
  147. package/dist/generated/types/match-history-replay-response.d.ts +1 -0
  148. package/dist/generated/types/match-history-replay-response.js +2 -0
  149. package/dist/generated/types/match-history-restore-request.d.ts +1 -0
  150. package/dist/generated/types/match-history-restore-request.js +2 -0
  151. package/dist/generated/types/match-save-payload.d.ts +1 -0
  152. package/dist/generated/types/match-save-payload.js +2 -0
  153. package/dist/generated/types/match-spectator-access-response.d.ts +1 -0
  154. package/dist/generated/types/match-spectator-access-response.js +2 -0
  155. package/dist/generated/types/meta-window.d.ts +1 -0
  156. package/dist/generated/types/meta-window.js +2 -0
  157. package/dist/generated/types/meta-windows-response.d.ts +1 -0
  158. package/dist/generated/types/meta-windows-response.js +2 -0
  159. package/dist/generated/types/prepare-lobby-limited-ai-decks-request.d.ts +1 -0
  160. package/dist/generated/types/prepare-lobby-limited-ai-decks-request.js +2 -0
  161. package/dist/generated/types/random-lobby-matchmaking-request.d.ts +173 -0
  162. package/dist/generated/types/random-lobby-matchmaking-request.js +2 -0
  163. package/dist/generated/types/ranked-admin-status.d.ts +1 -0
  164. package/dist/generated/types/ranked-admin-status.js +2 -0
  165. package/dist/generated/types/ranked-leaderboard-entry.d.ts +1 -0
  166. package/dist/generated/types/ranked-leaderboard-entry.js +2 -0
  167. package/dist/generated/types/ranked-leaderboard-query.d.ts +1 -0
  168. package/dist/generated/types/ranked-leaderboard-query.js +2 -0
  169. package/dist/generated/types/ranked-leaderboard-response.d.ts +1 -0
  170. package/dist/generated/types/ranked-leaderboard-response.js +2 -0
  171. package/dist/generated/types/ranked-matchmaking-request.d.ts +137 -0
  172. package/dist/generated/types/ranked-matchmaking-request.js +2 -0
  173. package/dist/generated/types/ranked-matchmaking-view.d.ts +1 -0
  174. package/dist/generated/types/ranked-matchmaking-view.js +2 -0
  175. package/dist/generated/types/ranked-profile-request.d.ts +1 -0
  176. package/dist/generated/types/ranked-profile-request.js +2 -0
  177. package/dist/generated/types/ranked-profile-response.d.ts +1 -0
  178. package/dist/generated/types/ranked-profile-response.js +2 -0
  179. package/dist/generated/types/ranked-queue.d.ts +1 -0
  180. package/dist/generated/types/ranked-queue.js +2 -0
  181. package/dist/generated/types/ready-tournament-table-request.d.ts +7 -0
  182. package/dist/generated/types/ready-tournament-table-request.js +2 -0
  183. package/dist/generated/types/rematch-match-request.d.ts +1 -0
  184. package/dist/generated/types/rematch-match-request.js +2 -0
  185. package/dist/generated/types/rematch-match-response.d.ts +1 -0
  186. package/dist/generated/types/rematch-match-response.js +2 -0
  187. package/dist/generated/types/resolve-card-ids-request.d.ts +1 -0
  188. package/dist/generated/types/resolve-card-ids-request.js +2 -0
  189. package/dist/generated/types/resolve-card-ids-response.d.ts +1 -0
  190. package/dist/generated/types/resolve-card-ids-response.js +2 -0
  191. package/dist/generated/types/restore-history-response.d.ts +1 -0
  192. package/dist/generated/types/restore-history-response.js +2 -0
  193. package/dist/generated/types/restore-match-save-request.d.ts +1 -0
  194. package/dist/generated/types/restore-match-save-request.js +2 -0
  195. package/dist/generated/types/restore-match-save-response.d.ts +1 -0
  196. package/dist/generated/types/restore-match-save-response.js +2 -0
  197. package/dist/generated/types/return-lobby-match-request.d.ts +1 -0
  198. package/dist/generated/types/return-lobby-match-request.js +2 -0
  199. package/dist/generated/types/return-tournament-match-request.d.ts +1 -0
  200. package/dist/generated/types/return-tournament-match-request.js +2 -0
  201. package/dist/generated/types/save-match-request.d.ts +1 -0
  202. package/dist/generated/types/save-match-request.js +2 -0
  203. package/dist/generated/types/server-message.d.ts +1 -0
  204. package/dist/generated/types/server-message.js +2 -0
  205. package/dist/generated/types/set-ai-paused-request.d.ts +1 -0
  206. package/dist/generated/types/set-ai-paused-request.js +2 -0
  207. package/dist/generated/types/set-ai-paused-response.d.ts +1 -0
  208. package/dist/generated/types/set-ai-paused-response.js +2 -0
  209. package/dist/generated/types/set-ranked-admission-request.d.ts +1 -0
  210. package/dist/generated/types/set-ranked-admission-request.js +2 -0
  211. package/dist/generated/types/set-simulator-maintenance-request.d.ts +1 -0
  212. package/dist/generated/types/set-simulator-maintenance-request.js +2 -0
  213. package/dist/generated/types/simulator-admin-status-response.d.ts +1 -0
  214. package/dist/generated/types/simulator-admin-status-response.js +2 -0
  215. package/dist/generated/types/simulator-availability-response.d.ts +1 -0
  216. package/dist/generated/types/simulator-availability-response.js +2 -0
  217. package/dist/generated/types/simulator-report-list-response.d.ts +1 -0
  218. package/dist/generated/types/simulator-report-list-response.js +2 -0
  219. package/dist/generated/types/simulator-report-response.d.ts +1 -0
  220. package/dist/generated/types/simulator-report-response.js +2 -0
  221. package/dist/generated/types/spectate-lobby-request.d.ts +1 -0
  222. package/dist/generated/types/spectate-lobby-request.js +2 -0
  223. package/dist/generated/types/spectate-match-request.d.ts +1 -0
  224. package/dist/generated/types/spectate-match-request.js +2 -0
  225. package/dist/generated/types/start-lobby-limited-match-request.d.ts +1 -0
  226. package/dist/generated/types/start-lobby-limited-match-request.js +2 -0
  227. package/dist/generated/types/start-lobby-request.d.ts +1 -0
  228. package/dist/generated/types/start-lobby-request.js +2 -0
  229. package/dist/generated/types/start-tournament-event-request.d.ts +1 -0
  230. package/dist/generated/types/start-tournament-event-request.js +2 -0
  231. package/dist/generated/types/stats-response.d.ts +5 -0
  232. package/dist/generated/types/stats-response.js +2 -0
  233. package/dist/generated/types/submit-lobby-limited-deck-request.d.ts +1 -0
  234. package/dist/generated/types/submit-lobby-limited-deck-request.js +2 -0
  235. package/dist/generated/types/submit-match-deck-request.d.ts +1 -0
  236. package/dist/generated/types/submit-match-deck-request.js +2 -0
  237. package/dist/generated/types/submit-match-deck-response.d.ts +1 -0
  238. package/dist/generated/types/submit-match-deck-response.js +2 -0
  239. package/dist/generated/types/submit-tournament-deck-request.d.ts +1 -0
  240. package/dist/generated/types/submit-tournament-deck-request.js +2 -0
  241. package/dist/generated/types/tournament-event-command-request.d.ts +1 -0
  242. package/dist/generated/types/tournament-event-command-request.js +2 -0
  243. package/dist/generated/types/tournament-room-access-response.d.ts +1 -0
  244. package/dist/generated/types/tournament-room-access-response.js +2 -0
  245. package/dist/generated/types/tournament-room-chat-request.d.ts +1 -0
  246. package/dist/generated/types/tournament-room-chat-request.js +2 -0
  247. package/dist/generated/types/tournament-room-chat-response.d.ts +1 -0
  248. package/dist/generated/types/tournament-room-chat-response.js +2 -0
  249. package/dist/generated/types/tournament-room-list-response.d.ts +1 -0
  250. package/dist/generated/types/tournament-room-list-response.js +2 -0
  251. package/dist/generated/types/tournament-room-response.d.ts +1 -0
  252. package/dist/generated/types/tournament-room-response.js +2 -0
  253. package/dist/generated/types/tournament-room-server-message.d.ts +1 -0
  254. package/dist/generated/types/tournament-room-server-message.js +2 -0
  255. package/dist/generated/types/tournament-room-sync-request.d.ts +1 -0
  256. package/dist/generated/types/tournament-room-sync-request.js +2 -0
  257. package/dist/generated/types/undo-match-request.d.ts +1 -0
  258. package/dist/generated/types/undo-match-request.js +2 -0
  259. package/dist/generated/types/undo-match-response.d.ts +1 -0
  260. package/dist/generated/types/undo-match-response.js +2 -0
  261. package/dist/generated/types/undo-respond-match-request.d.ts +1 -0
  262. package/dist/generated/types/undo-respond-match-request.js +2 -0
  263. package/dist/generated/types/update-lobby-ai-player-request.d.ts +1 -0
  264. package/dist/generated/types/update-lobby-ai-player-request.js +2 -0
  265. package/dist/generated/types/update-lobby-player-request.d.ts +1 -0
  266. package/dist/generated/types/update-lobby-player-request.js +2 -0
  267. package/dist/generated/types/update-lobby-settings-request.d.ts +1 -0
  268. package/dist/generated/types/update-lobby-settings-request.js +2 -0
  269. package/dist/generated/types/update-tournament-room-player-request.d.ts +1 -0
  270. package/dist/generated/types/update-tournament-room-player-request.js +2 -0
  271. package/dist/generated/types/update-tournament-room-settings-request.d.ts +1 -0
  272. package/dist/generated/types/update-tournament-room-settings-request.js +2 -0
  273. package/dist/generated/types/update-tournament-table-deck-request.d.ts +123 -0
  274. package/dist/generated/types/update-tournament-table-deck-request.js +2 -0
  275. package/dist/generated/types/welcome-payload.d.ts +1 -0
  276. package/dist/generated/types/welcome-payload.js +2 -0
  277. package/dist/generated/version.d.ts +16 -0
  278. package/dist/generated/version.js +16 -0
  279. package/dist/http/abort.d.ts +57 -0
  280. package/dist/http/abort.js +60 -0
  281. package/dist/http/json.d.ts +13 -0
  282. package/dist/http/json.js +24 -0
  283. package/dist/http/options.d.ts +40 -0
  284. package/dist/http/options.js +1 -0
  285. package/dist/http/request.d.ts +64 -0
  286. package/dist/http/request.js +182 -0
  287. package/dist/http/validated-json.d.ts +9 -0
  288. package/dist/http/validated-json.js +14 -0
  289. package/dist/index.d.ts +39 -0
  290. package/dist/index.js +10 -0
  291. package/dist/internal/abort-error.d.ts +91 -0
  292. package/dist/internal/abort-error.js +62 -0
  293. package/dist/internal/authenticated-socket-session.d.ts +63 -0
  294. package/dist/internal/authenticated-socket-session.js +170 -0
  295. package/dist/internal/emitter.d.ts +18 -0
  296. package/dist/internal/emitter.js +34 -0
  297. package/dist/internal/errors.d.ts +233 -0
  298. package/dist/internal/errors.js +238 -0
  299. package/dist/internal/limits.d.ts +13 -0
  300. package/dist/internal/limits.js +13 -0
  301. package/dist/internal/reconnect-backoff.d.ts +33 -0
  302. package/dist/internal/reconnect-backoff.js +25 -0
  303. package/dist/internal/socket-frame.d.ts +43 -0
  304. package/dist/internal/socket-frame.js +47 -0
  305. package/dist/internal/transport.d.ts +78 -0
  306. package/dist/internal/transport.js +18 -0
  307. package/dist/internal/websocket-event.d.ts +15 -0
  308. package/dist/internal/websocket-event.js +31 -0
  309. package/dist/local/assets.d.ts +96 -0
  310. package/dist/local/assets.js +235 -0
  311. package/dist/local/client.d.ts +32 -0
  312. package/dist/local/client.js +211 -0
  313. package/dist/local/engine.d.ts +79 -0
  314. package/dist/local/engine.js +6 -0
  315. package/dist/local/index.d.ts +20 -0
  316. package/dist/local/index.js +17 -0
  317. package/dist/local/offline-engine.d.ts +46 -0
  318. package/dist/local/offline-engine.js +74 -0
  319. package/dist/local/protocol.d.ts +95 -0
  320. package/dist/local/protocol.js +10 -0
  321. package/dist/local/routing.d.ts +52 -0
  322. package/dist/local/routing.js +193 -0
  323. package/dist/local/server/ai-scheduler.d.ts +31 -0
  324. package/dist/local/server/ai-scheduler.js +93 -0
  325. package/dist/local/server/http-router.d.ts +35 -0
  326. package/dist/local/server/http-router.js +185 -0
  327. package/dist/local/server/index.d.ts +16 -0
  328. package/dist/local/server/index.js +140 -0
  329. package/dist/local/server/sockets.d.ts +25 -0
  330. package/dist/local/server/sockets.js +141 -0
  331. package/dist/local/wasm-engine.d.ts +61 -0
  332. package/dist/local/wasm-engine.js +63 -0
  333. package/dist/local/worker-boot.d.ts +17 -0
  334. package/dist/local/worker-boot.js +76 -0
  335. package/dist/local/worker.d.ts +6 -0
  336. package/dist/local/worker.js +9 -0
  337. package/dist/match-session/access.d.ts +6 -0
  338. package/dist/match-session/access.js +8 -0
  339. package/dist/match-session/controller.d.ts +63 -0
  340. package/dist/match-session/controller.js +513 -0
  341. package/dist/match-session/errors.d.ts +3 -0
  342. package/dist/match-session/errors.js +34 -0
  343. package/dist/match-session/methods.d.ts +433 -0
  344. package/dist/match-session/methods.js +1 -0
  345. package/dist/match-session/session-state.d.ts +235 -0
  346. package/dist/match-session/session-state.js +1 -0
  347. package/dist/match-session/types.d.ts +56 -0
  348. package/dist/match-session/types.js +1 -0
  349. package/dist/match-session.d.ts +3 -0
  350. package/dist/match-session.js +1 -0
  351. package/dist/messages.d.ts +195 -0
  352. package/dist/messages.js +240 -0
  353. package/dist/resources/admin.d.ts +63 -0
  354. package/dist/resources/admin.js +75 -0
  355. package/dist/resources/card-deck-json.d.ts +11 -0
  356. package/dist/resources/card-deck-json.js +164 -0
  357. package/dist/resources/card-resolution.d.ts +9 -0
  358. package/dist/resources/card-resolution.js +21 -0
  359. package/dist/resources/card-resource.d.ts +157 -0
  360. package/dist/resources/card-resource.js +28 -0
  361. package/dist/resources/card-types.d.ts +203 -0
  362. package/dist/resources/card-types.js +1 -0
  363. package/dist/resources/cards.d.ts +3 -0
  364. package/dist/resources/cards.js +1 -0
  365. package/dist/resources/limited-event-types.d.ts +252 -0
  366. package/dist/resources/limited-event-types.js +1 -0
  367. package/dist/resources/limited-events.d.ts +7 -0
  368. package/dist/resources/limited-events.js +49 -0
  369. package/dist/resources/lobbies.d.ts +53 -0
  370. package/dist/resources/lobbies.js +50 -0
  371. package/dist/resources/lobby-list-session.d.ts +13 -0
  372. package/dist/resources/lobby-list-session.js +198 -0
  373. package/dist/resources/lobby-session.d.ts +9 -0
  374. package/dist/resources/lobby-session.js +59 -0
  375. package/dist/resources/lobby-types.d.ts +357 -0
  376. package/dist/resources/lobby-types.js +1 -0
  377. package/dist/resources/match-history.d.ts +49 -0
  378. package/dist/resources/match-history.js +34 -0
  379. package/dist/resources/match-types.d.ts +448 -0
  380. package/dist/resources/match-types.js +1 -0
  381. package/dist/resources/matches.d.ts +16 -0
  382. package/dist/resources/matches.js +109 -0
  383. package/dist/resources/ranked.d.ts +24 -0
  384. package/dist/resources/ranked.js +47 -0
  385. package/dist/resources/session.d.ts +62 -0
  386. package/dist/resources/session.js +26 -0
  387. package/dist/resources/system.d.ts +51 -0
  388. package/dist/resources/system.js +9 -0
  389. package/dist/resources/tournament-room-session.d.ts +9 -0
  390. package/dist/resources/tournament-room-session.js +53 -0
  391. package/dist/resources/tournament-room-types.d.ts +44 -0
  392. package/dist/resources/tournament-room-types.js +1 -0
  393. package/dist/resources/tournament-rooms.d.ts +33 -0
  394. package/dist/resources/tournament-rooms.js +33 -0
  395. package/dist/session.d.ts +56 -0
  396. package/dist/session.js +1 -0
  397. package/dist/types.d.ts +73 -0
  398. package/dist/types.js +27 -0
  399. package/dist/validators/ajv.d.ts +51 -0
  400. package/dist/validators/ajv.js +121 -0
  401. package/dist/validators/discriminants.d.ts +36 -0
  402. package/dist/validators/discriminants.js +89 -0
  403. package/dist/validators/validator.d.ts +73 -0
  404. package/dist/validators/validator.js +26 -0
  405. package/dist/validators/warm-up.d.ts +25 -0
  406. package/dist/validators/warm-up.js +59 -0
  407. package/dist/validators.d.ts +173 -0
  408. package/dist/validators.js +85 -0
  409. package/package.json +88 -0
  410. package/schema/abandon-match-request.schema.json +15 -0
  411. package/schema/abandon-match-response.schema.json +15 -0
  412. package/schema/add-lobby-ai-player-request.schema.json +53 -0
  413. package/schema/api-error-response.schema.json +13 -0
  414. package/schema/card-catalog-refresh-response.schema.json +31 -0
  415. package/schema/cards-response.schema.json +17 -0
  416. package/schema/client-message.schema.json +203 -0
  417. package/schema/close-tournament-room-request.schema.json +18 -0
  418. package/schema/common.schema.json +14129 -0
  419. package/schema/create-limited-event-request.schema.json +60 -0
  420. package/schema/create-lobby-request.schema.json +67 -0
  421. package/schema/create-match-request.schema.json +124 -0
  422. package/schema/create-meta-window-request.schema.json +27 -0
  423. package/schema/create-tournament-room-request.schema.json +104 -0
  424. package/schema/create-tournament-table-request.schema.json +14 -0
  425. package/schema/error-payload.schema.json +34 -0
  426. package/schema/format-event-request.schema.json +20 -0
  427. package/schema/format-event-response.schema.json +15 -0
  428. package/schema/game-command.schema.json +775 -0
  429. package/schema/game-event.schema.json +2012 -0
  430. package/schema/game-state.schema.json +273 -0
  431. package/schema/get-match-response.schema.json +13 -0
  432. package/schema/health-response.schema.json +13 -0
  433. package/schema/join-limited-event-request.schema.json +6 -0
  434. package/schema/join-lobby-request.schema.json +40 -0
  435. package/schema/join-match-request.schema.json +79 -0
  436. package/schema/join-tournament-room-request.schema.json +39 -0
  437. package/schema/join-tournament-table-request.schema.json +14 -0
  438. package/schema/kick-lobby-player-request.schema.json +13 -0
  439. package/schema/kick-lobby-spectator-request.schema.json +14 -0
  440. package/schema/leave-lobby-request.schema.json +13 -0
  441. package/schema/leave-match-request.schema.json +15 -0
  442. package/schema/leave-match-response.schema.json +15 -0
  443. package/schema/leave-tournament-room-request.schema.json +14 -0
  444. package/schema/limited-event-access-response.schema.json +34 -0
  445. package/schema/limited-event-command-request.schema.json +20 -0
  446. package/schema/limited-event-preflight-response.schema.json +25 -0
  447. package/schema/limited-event-response.schema.json +15 -0
  448. package/schema/list-active-ai-matches-request.schema.json +23 -0
  449. package/schema/list-active-ai-matches-response.schema.json +17 -0
  450. package/schema/lobby-access-response.schema.json +31 -0
  451. package/schema/lobby-chat-request.schema.json +17 -0
  452. package/schema/lobby-chat-response.schema.json +17 -0
  453. package/schema/lobby-list-response.schema.json +16 -0
  454. package/schema/lobby-list-server-message.schema.json +49 -0
  455. package/schema/lobby-matchmaking-decision-request.schema.json +13 -0
  456. package/schema/lobby-matchmaking-request.schema.json +80 -0
  457. package/schema/lobby-response.schema.json +13 -0
  458. package/schema/lobby-server-message.schema.json +155 -0
  459. package/schema/lobby-sync-request.schema.json +13 -0
  460. package/schema/manifest.json +124 -0
  461. package/schema/match-access-response.schema.json +32 -0
  462. package/schema/match-chat-lookup-response.schema.json +34 -0
  463. package/schema/match-connection-role.schema.json +9 -0
  464. package/schema/match-history-deck-stats-request.schema.json +26 -0
  465. package/schema/match-history-deck-stats-response.schema.json +17 -0
  466. package/schema/match-history-entry.schema.json +78 -0
  467. package/schema/match-history-list-request.schema.json +48 -0
  468. package/schema/match-history-list-response.schema.json +25 -0
  469. package/schema/match-history-replay-request.schema.json +17 -0
  470. package/schema/match-history-replay-response.schema.json +14 -0
  471. package/schema/match-history-restore-request.schema.json +23 -0
  472. package/schema/match-save-payload.schema.json +71 -0
  473. package/schema/match-spectator-access-response.schema.json +22 -0
  474. package/schema/meta-window.schema.json +37 -0
  475. package/schema/meta-windows-response.schema.json +24 -0
  476. package/schema/prepare-lobby-limited-ai-decks-request.schema.json +14 -0
  477. package/schema/ranked-admin-status.schema.json +43 -0
  478. package/schema/ranked-leaderboard-entry.schema.json +61 -0
  479. package/schema/ranked-leaderboard-query.schema.json +34 -0
  480. package/schema/ranked-leaderboard-response.schema.json +23 -0
  481. package/schema/ranked-matchmaking-view.schema.json +15 -0
  482. package/schema/ranked-profile-request.schema.json +21 -0
  483. package/schema/ranked-profile-response.schema.json +59 -0
  484. package/schema/ranked-queue.schema.json +12 -0
  485. package/schema/rematch-match-request.schema.json +20 -0
  486. package/schema/rematch-match-response.schema.json +61 -0
  487. package/schema/resolve-card-ids-request.schema.json +17 -0
  488. package/schema/resolve-card-ids-response.schema.json +16 -0
  489. package/schema/restore-history-response.schema.json +15 -0
  490. package/schema/restore-match-save-request.schema.json +20 -0
  491. package/schema/restore-match-save-response.schema.json +29 -0
  492. package/schema/return-lobby-match-request.schema.json +13 -0
  493. package/schema/return-tournament-match-request.schema.json +14 -0
  494. package/schema/route-manifest.json +1014 -0
  495. package/schema/save-match-request.schema.json +15 -0
  496. package/schema/server-message.schema.json +192 -0
  497. package/schema/set-ai-paused-request.schema.json +19 -0
  498. package/schema/set-ai-paused-response.schema.json +18 -0
  499. package/schema/set-ranked-admission-request.schema.json +15 -0
  500. package/schema/set-simulator-maintenance-request.schema.json +20 -0
  501. package/schema/simulator-admin-status-response.schema.json +37 -0
  502. package/schema/simulator-availability-response.schema.json +27 -0
  503. package/schema/simulator-report-list-response.schema.json +23 -0
  504. package/schema/simulator-report-response.schema.json +77 -0
  505. package/schema/spectate-lobby-request.schema.json +32 -0
  506. package/schema/spectate-match-request.schema.json +32 -0
  507. package/schema/start-lobby-limited-match-request.schema.json +13 -0
  508. package/schema/start-lobby-request.schema.json +13 -0
  509. package/schema/start-tournament-event-request.schema.json +14 -0
  510. package/schema/submit-lobby-limited-deck-request.schema.json +33 -0
  511. package/schema/submit-match-deck-request.schema.json +45 -0
  512. package/schema/submit-match-deck-response.schema.json +14 -0
  513. package/schema/submit-tournament-deck-request.schema.json +34 -0
  514. package/schema/tournament-event-command-request.schema.json +18 -0
  515. package/schema/tournament-room-access-response.schema.json +32 -0
  516. package/schema/tournament-room-chat-request.schema.json +18 -0
  517. package/schema/tournament-room-chat-response.schema.json +18 -0
  518. package/schema/tournament-room-list-response.schema.json +17 -0
  519. package/schema/tournament-room-response.schema.json +14 -0
  520. package/schema/tournament-room-server-message.schema.json +127 -0
  521. package/schema/tournament-room-sync-request.schema.json +14 -0
  522. package/schema/undo-match-request.schema.json +14 -0
  523. package/schema/undo-match-response.schema.json +14 -0
  524. package/schema/undo-respond-match-request.schema.json +19 -0
  525. package/schema/update-lobby-ai-player-request.schema.json +65 -0
  526. package/schema/update-lobby-player-request.schema.json +81 -0
  527. package/schema/update-lobby-settings-request.schema.json +70 -0
  528. package/schema/update-tournament-room-player-request.schema.json +45 -0
  529. package/schema/update-tournament-room-settings-request.schema.json +33 -0
  530. 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,3 @@
1
+ export type { CardIdResolution, CardMetadata, CardReferenceInput, CardReferenceType, DeckInput, DeckJson, DeckJsonCard, } from './card-types.js';
2
+ export type { CardsResource } from './card-resource.js';
3
+ export { createCardsResource } from './card-resource.js';
@@ -0,0 +1 @@
1
+ export { createCardsResource } from './card-resource.js';