@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,252 @@
1
+ import type { CreateLimitedEventRequest, JoinLimitedEventRequest, LimitedEventAccessResponse, LimitedEventPreflightResponse } from '../generated/index.js';
2
+ import type { LimitedEventSnapshot as GeneratedLimitedEventSnapshot } from '../generated/types/limited-event-access-response.js';
3
+ import type { LimitedEventCommand as GeneratedLimitedEventCommand } from '../generated/types/limited-event-command-request.js';
4
+ import type { SimulatorRequestOptions } from '../http/options.js';
5
+ /**
6
+ * Access token and private snapshot returned after creating or joining a Limited Event.
7
+ *
8
+ * Keep `seatToken` private. It authorizes one player seat inside the event pod.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { createSimulatorClient, type LimitedEventAccess } from '@my-swu/simulator-client'
13
+ *
14
+ * const simulatorClient = createSimulatorClient({
15
+ * baseUrl: 'http://127.0.0.1:4000',
16
+ * })
17
+ *
18
+ * const draftEventAccess: LimitedEventAccess =
19
+ * await simulatorClient.limitedEvents.create({
20
+ * kind: 'draft',
21
+ * draftRounds: [],
22
+ * pickTimerEnabled: false,
23
+ * setCode: 'SOR',
24
+ * playerCount: 4,
25
+ * })
26
+ * console.log(draftEventAccess.eventId)
27
+ * ```
28
+ *
29
+ * @see https://simulator-sdk.my-swu.com/guide/limited-events
30
+ */
31
+ export type LimitedEventAccess = LimitedEventAccessResponse;
32
+ /**
33
+ * Player command accepted by one Limited Event seat.
34
+ *
35
+ * Commands drive hidden draft picks, leader choices, and ready gates.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * import type { LimitedEventCommand } from '@my-swu/simulator-client'
40
+ *
41
+ * const readyForNextDraft: LimitedEventCommand = {
42
+ * type: 'readyForNextDraft',
43
+ * }
44
+ *
45
+ * console.log(readyForNextDraft.type)
46
+ * ```
47
+ *
48
+ * @see https://simulator-sdk.my-swu.com/guide/limited-events
49
+ */
50
+ export type LimitedEventCommand = GeneratedLimitedEventCommand;
51
+ /** Read-only booster-pool validation result for a limited event request. */
52
+ export type LimitedEventPreflight = LimitedEventPreflightResponse;
53
+ /**
54
+ * Snapshot visible to the current Limited Event requester.
55
+ *
56
+ * Public event state is always present; viewer-private pack, pool, and pick
57
+ * data are included only when the request carries a valid seat token.
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * import { createSimulatorClient, type LimitedEventSnapshot } from '@my-swu/simulator-client'
62
+ *
63
+ * const simulatorClient = createSimulatorClient({
64
+ * baseUrl: 'http://127.0.0.1:4000',
65
+ * })
66
+ *
67
+ * const limitedEventSnapshot: LimitedEventSnapshot =
68
+ * await simulatorClient.limitedEvents.get('event_123')
69
+ * console.log(limitedEventSnapshot.phase.kind)
70
+ * ```
71
+ *
72
+ * @see https://simulator-sdk.my-swu.com/guide/limited-events
73
+ */
74
+ export type LimitedEventSnapshot = GeneratedLimitedEventSnapshot;
75
+ /**
76
+ * Public reference to one Limited Event.
77
+ *
78
+ * This reference is safe to share for join flows because it does not include a
79
+ * private seat token.
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * import type { LimitedEventReference } from '@my-swu/simulator-client'
84
+ *
85
+ * const draftEventReference: LimitedEventReference = { eventId: 'event_123' }
86
+ * console.log(draftEventReference.eventId)
87
+ * ```
88
+ *
89
+ * @see https://simulator-sdk.my-swu.com/guide/limited-events
90
+ */
91
+ export interface LimitedEventReference {
92
+ /**
93
+ * Public Limited Event id.
94
+ */
95
+ eventId: string;
96
+ }
97
+ /**
98
+ * Minimal data needed to act as one Limited Event seat.
99
+ *
100
+ * Persist this shape when a browser needs to resume an event after a reload.
101
+ *
102
+ * @example
103
+ * ```ts
104
+ * import type { LimitedEventAccessInput } from '@my-swu/simulator-client'
105
+ *
106
+ * const draftSeatAccess: LimitedEventAccessInput = {
107
+ * eventId: 'event_123',
108
+ * seatToken: 'limited_token_123',
109
+ * }
110
+ *
111
+ * console.log(draftSeatAccess.eventId)
112
+ * ```
113
+ *
114
+ * @see https://simulator-sdk.my-swu.com/guide/limited-events
115
+ */
116
+ export interface LimitedEventAccessInput extends LimitedEventReference {
117
+ /**
118
+ * Private token authorizing one Limited Event seat.
119
+ */
120
+ seatToken: string;
121
+ }
122
+ /**
123
+ * Limited Event resource API methods.
124
+ *
125
+ * Use this resource for Draft and Sealed pods before creating a match from the
126
+ * completed pool.
127
+ *
128
+ * @example
129
+ * ```ts
130
+ * import { createSimulatorClient } from '@my-swu/simulator-client'
131
+ *
132
+ * const simulatorClient = createSimulatorClient({
133
+ * baseUrl: 'http://127.0.0.1:4000',
134
+ * })
135
+ *
136
+ * const draftEventAccess = await simulatorClient.limitedEvents.create({
137
+ * kind: 'draft',
138
+ * draftRounds: [],
139
+ * pickTimerEnabled: false,
140
+ * setCode: 'SOR',
141
+ * playerCount: 4,
142
+ * })
143
+ *
144
+ * console.log(draftEventAccess.snapshot.phase.kind)
145
+ * ```
146
+ *
147
+ * @see https://simulator-sdk.my-swu.com/guide/limited-events
148
+ */
149
+ export interface LimitedEventsResource {
150
+ /**
151
+ * Checks whether every required booster can be generated without creating an
152
+ * event. Use the returned seed when creating the event after a clean check.
153
+ */
154
+ preflight(request: CreateLimitedEventRequest, options?: SimulatorRequestOptions): Promise<LimitedEventPreflight>;
155
+ /**
156
+ * Creates one generated Draft or Sealed event.
157
+ *
158
+ * @example
159
+ * ```ts
160
+ * import { createSimulatorClient } from '@my-swu/simulator-client'
161
+ *
162
+ * const simulatorClient = createSimulatorClient({
163
+ * baseUrl: 'http://127.0.0.1:4000',
164
+ * })
165
+ *
166
+ * const draftEventAccess = await simulatorClient.limitedEvents.create({
167
+ * kind: 'draft',
168
+ * draftRounds: [],
169
+ * pickTimerEnabled: false,
170
+ * setCode: 'SOR',
171
+ * playerCount: 4,
172
+ * })
173
+ *
174
+ * console.log(draftEventAccess.eventId)
175
+ * ```
176
+ *
177
+ * @see https://simulator-sdk.my-swu.com/guide/limited-events#create
178
+ */
179
+ create(request: CreateLimitedEventRequest, options?: SimulatorRequestOptions): Promise<LimitedEventAccess>;
180
+ /**
181
+ * Fetches one limited event, optionally with viewer-private state.
182
+ *
183
+ * @example
184
+ * ```ts
185
+ * import { createSimulatorClient } from '@my-swu/simulator-client'
186
+ *
187
+ * const simulatorClient = createSimulatorClient({
188
+ * baseUrl: 'http://127.0.0.1:4000',
189
+ * })
190
+ * const draftSeatAccess = {
191
+ * eventId: 'event_123',
192
+ * seatToken: 'limited_token_123',
193
+ * }
194
+ *
195
+ * const limitedEventSnapshot =
196
+ * await simulatorClient.limitedEvents.get(draftSeatAccess)
197
+ *
198
+ * console.log(limitedEventSnapshot.viewer?.activePack.length)
199
+ * ```
200
+ *
201
+ * @see https://simulator-sdk.my-swu.com/guide/limited-events#fetch-state
202
+ */
203
+ get(event: string | LimitedEventReference | LimitedEventAccessInput, options?: SimulatorRequestOptions): Promise<LimitedEventSnapshot>;
204
+ /**
205
+ * Applies one seat command to a limited event.
206
+ *
207
+ * @example
208
+ * ```ts
209
+ * import { createSimulatorClient } from '@my-swu/simulator-client'
210
+ *
211
+ * const simulatorClient = createSimulatorClient({
212
+ * baseUrl: 'http://127.0.0.1:4000',
213
+ * })
214
+ * const draftSeatAccess = {
215
+ * eventId: 'event_123',
216
+ * seatToken: 'limited_token_123',
217
+ * }
218
+ *
219
+ * const limitedEventSnapshot =
220
+ * await simulatorClient.limitedEvents.applyCommand(
221
+ * draftSeatAccess,
222
+ * { type: 'readyForNextDraft' },
223
+ * )
224
+ *
225
+ * console.log(limitedEventSnapshot.phase.kind)
226
+ * ```
227
+ *
228
+ * @see https://simulator-sdk.my-swu.com/guide/limited-events#draft-commands
229
+ */
230
+ applyCommand(access: LimitedEventAccessInput, command: LimitedEventCommand, options?: SimulatorRequestOptions): Promise<LimitedEventSnapshot>;
231
+ /**
232
+ * Joins one limited event.
233
+ *
234
+ * @example
235
+ * ```ts
236
+ * import { createSimulatorClient } from '@my-swu/simulator-client'
237
+ *
238
+ * const simulatorClient = createSimulatorClient({
239
+ * baseUrl: 'http://127.0.0.1:4000',
240
+ * })
241
+ * const draftEventReference = { eventId: 'event_123' }
242
+ *
243
+ * const draftSeatAccess =
244
+ * await simulatorClient.limitedEvents.join(draftEventReference)
245
+ *
246
+ * console.log(draftSeatAccess.seatIndex)
247
+ * ```
248
+ *
249
+ * @see https://simulator-sdk.my-swu.com/guide/limited-events#join
250
+ */
251
+ join(event: LimitedEventReference, request?: JoinLimitedEventRequest, options?: SimulatorRequestOptions): Promise<LimitedEventAccess>;
252
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { EngineHttpRequester } from '../http/request.js';
2
+ import type { LimitedEventsResource } from './limited-event-types.js';
3
+ export type * from './limited-event-types.js';
4
+ /**
5
+ * Creates the Limited Event resource client.
6
+ */
7
+ export declare function createLimitedEventsResource(requester: EngineHttpRequester): LimitedEventsResource;
@@ -0,0 +1,49 @@
1
+ import { jsonBody, jsonHeaders } from '../http/json.js';
2
+ /**
3
+ * Creates the Limited Event resource client.
4
+ */
5
+ export function createLimitedEventsResource(requester) {
6
+ return {
7
+ applyCommand: (access, command, options) => requester.request('limited-event-response', `/api/limited-events/${eventIdFrom(access)}/commands`, {
8
+ body: jsonBody(requester.validate('limited-event-command-request', {
9
+ command,
10
+ seatToken: access.seatToken,
11
+ })),
12
+ headers: jsonHeaders(),
13
+ method: 'POST',
14
+ }, options).then(response => response.snapshot),
15
+ create: (request, options) => requester.request('limited-event-access-response', '/api/limited-events', {
16
+ body: jsonBody(requester.validate('create-limited-event-request', request)),
17
+ headers: jsonHeaders(),
18
+ method: 'POST',
19
+ }, options),
20
+ preflight: (request, options) => requester.request('limited-event-preflight-response', '/api/limited-events/preflight', {
21
+ body: jsonBody(requester.validate('create-limited-event-request', request)),
22
+ headers: jsonHeaders(),
23
+ method: 'POST',
24
+ }, options),
25
+ get: (event, options) => {
26
+ const seatToken = seatTokenFrom(event);
27
+ const query = seatToken == null ? '' : `?${new URLSearchParams({ seatToken }).toString()}`;
28
+ return requester.request('limited-event-response', `/api/limited-events/${eventIdFrom(event)}${query}`, {}, options)
29
+ .then(response => response.snapshot);
30
+ },
31
+ join: (event, request = {}, options) => requester.request('limited-event-access-response', `/api/limited-events/${eventIdFrom(event)}/join`, {
32
+ body: jsonBody(requester.validate('join-limited-event-request', request)),
33
+ headers: jsonHeaders(),
34
+ method: 'POST',
35
+ }, options),
36
+ };
37
+ }
38
+ /**
39
+ * Reads a Limited Event id from either a public id string or event reference object.
40
+ */
41
+ function eventIdFrom(event) {
42
+ return typeof event === 'string' ? event : event.eventId;
43
+ }
44
+ /**
45
+ * Reads a Limited Event seat token when the input carries private seat access.
46
+ */
47
+ function seatTokenFrom(event) {
48
+ return typeof event === 'string' || !('seatToken' in event) ? undefined : event.seatToken;
49
+ }
@@ -0,0 +1,53 @@
1
+ import type { SimulatorRequestOptions } from '../http/options.js';
2
+ import type { EngineHttpRequester } from '../http/request.js';
3
+ import type { WebSocketFactory } from '../internal/transport.js';
4
+ import type { SchemaValidator } from '../validators/validator.js';
5
+ import type { AddLobbyAiPlayerRequest, CreateLobbyRequest, JoinLobbyRequest, KickLobbyPlayerRequest, KickLobbySpectatorRequest, LeaveLobbyRequest, LobbyAccessInput, LobbyAccessResponse, LobbyChatRequest, LobbyChatResponse, LobbyListResponse, LobbyListSession, LobbyListSessionOptions, LobbyMatchmakingDecisionRequest, LobbyMatchmakingRequest, PrepareLobbyLimitedAiDecksRequest, LobbySession, LobbySnapshot, LobbySyncRequest, ReturnLobbyMatchRequest, StartLobbyLimitedMatchRequest, StartLobbyRequest, SpectateLobbyRequest, SubmitLobbyLimitedDeckRequest, UpdateLobbyAiPlayerRequest, UpdateLobbyPlayerRequest, UpdateLobbySettingsRequest } from './lobby-types.js';
6
+ export type * from './lobby-types.js';
7
+ export interface LobbiesResource {
8
+ create(request: CreateLobbyRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
9
+ /**
10
+ * Queues the player through the unified matchmaking entry point. The
11
+ * server chooses the pairing pool; the response never reveals more than
12
+ * the shared lobby matchmaking handshake.
13
+ */
14
+ matchmake(request: LobbyMatchmakingRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
15
+ acceptMatchmaking(lobbyId: string, request: LobbyMatchmakingDecisionRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
16
+ declineMatchmaking(lobbyId: string, request: LobbyMatchmakingDecisionRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
17
+ list(options?: SimulatorRequestOptions): Promise<LobbyListResponse>;
18
+ /**
19
+ * Subscribes to live public lobby-list updates over `GET /ws/lobbies`.
20
+ *
21
+ * Returns a session controller that opens an unauthenticated WebSocket, emits
22
+ * the current list on connect and a fresh full snapshot on every change, and
23
+ * auto-reconnects on abnormal close. Prefer this over polling {@link list};
24
+ * keep {@link list} as a one-shot fallback when the socket cannot open.
25
+ */
26
+ subscribeList(options?: LobbyListSessionOptions): LobbyListSession;
27
+ get(lobbyId: string, options?: SimulatorRequestOptions): Promise<LobbySnapshot>;
28
+ join(lobbyId: string, request: JoinLobbyRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
29
+ spectate(lobbyId: string, request: SpectateLobbyRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
30
+ sync(lobbyId: string, request: LobbySyncRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
31
+ updatePlayer(lobbyId: string, request: UpdateLobbyPlayerRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
32
+ addAiPlayer(lobbyId: string, request: AddLobbyAiPlayerRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
33
+ updateAiPlayer(lobbyId: string, playerId: string, request: UpdateLobbyAiPlayerRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
34
+ updateSettings(lobbyId: string, request: UpdateLobbySettingsRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
35
+ kickPlayer(lobbyId: string, playerId: string, request: KickLobbyPlayerRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
36
+ kickSpectator(lobbyId: string, spectatorId: string, request: KickLobbySpectatorRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
37
+ sendChat(lobbyId: string, request: LobbyChatRequest, options?: SimulatorRequestOptions): Promise<LobbyChatResponse>;
38
+ start(lobbyId: string, request: StartLobbyRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
39
+ returnMatch(lobbyId: string, request: ReturnLobbyMatchRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
40
+ submitLimitedDeck(lobbyId: string, request: SubmitLobbyLimitedDeckRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
41
+ prepareLimitedAiDecks(lobbyId: string, request: PrepareLobbyLimitedAiDecksRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
42
+ startLimitedMatch(lobbyId: string, request: StartLobbyLimitedMatchRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
43
+ leave(lobbyId: string, request: LeaveLobbyRequest, options?: SimulatorRequestOptions): Promise<LobbyAccessResponse>;
44
+ createSession(access: LobbyAccessInput | LobbyAccessResponse): LobbySession;
45
+ }
46
+ export interface LobbiesResourceOptions {
47
+ requester: EngineHttpRequester;
48
+ /** Boundary validator applied to the lobby and public lobby-list sockets. */
49
+ validate?: SchemaValidator | undefined;
50
+ webSocketFactory?: WebSocketFactory | undefined;
51
+ wsUrl: string;
52
+ }
53
+ export declare function createLobbiesResource(options: LobbiesResourceOptions): LobbiesResource;
@@ -0,0 +1,50 @@
1
+ import { createValidatedJsonPost } from '../http/validated-json.js';
2
+ import { getDefaultWebSocketFactory } from '../internal/transport.js';
3
+ import { createLobbyListSession } from './lobby-list-session.js';
4
+ import { createLobbySession } from './lobby-session.js';
5
+ export function createLobbiesResource(options) {
6
+ const { requester } = options;
7
+ const webSocketFactory = options.webSocketFactory ?? getDefaultWebSocketFactory();
8
+ const jsonPost = createValidatedJsonPost(requester);
9
+ return {
10
+ create: (request, options) => requestResource(requester, 'lobby-access-response', '/api/lobbies', jsonPost('create-lobby-request', request), options),
11
+ matchmake: (request, options) => requestResource(requester, 'lobby-access-response', '/api/lobbies/matchmaking', jsonPost('lobby-matchmaking-request', request), options),
12
+ acceptMatchmaking: (lobbyId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/matchmaking/accept`, jsonPost('lobby-matchmaking-decision-request', request), options),
13
+ declineMatchmaking: (lobbyId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/matchmaking/decline`, jsonPost('lobby-matchmaking-decision-request', request), options),
14
+ list: options => requestResource(requester, 'lobby-list-response', '/api/lobbies', undefined, options),
15
+ get: (lobbyId, options) => requestResource(requester, 'lobby-response', `/api/lobbies/${lobbyId}`, undefined, options)
16
+ .then(response => response.snapshot),
17
+ join: (lobbyId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/join`, jsonPost('join-lobby-request', request), options),
18
+ spectate: (lobbyId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/spectate`, jsonPost('spectate-lobby-request', request), options),
19
+ sync: (lobbyId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/sync`, jsonPost('lobby-sync-request', request), options),
20
+ updatePlayer: (lobbyId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/players/me`, jsonPost('update-lobby-player-request', request), options),
21
+ addAiPlayer: (lobbyId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/players/ai`, jsonPost('add-lobby-ai-player-request', request), options),
22
+ updateAiPlayer: (lobbyId, playerId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/players/${playerId}/ai`, jsonPost('update-lobby-ai-player-request', request), options),
23
+ updateSettings: (lobbyId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/settings`, jsonPost('update-lobby-settings-request', request), options),
24
+ kickPlayer: (lobbyId, playerId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/players/${playerId}/kick`, jsonPost('kick-lobby-player-request', request), options),
25
+ kickSpectator: (lobbyId, spectatorId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/spectators/${spectatorId}/kick`, jsonPost('kick-lobby-spectator-request', request), options),
26
+ sendChat: (lobbyId, request, options) => requestResource(requester, 'lobby-chat-response', `/api/lobbies/${lobbyId}/chat`, jsonPost('lobby-chat-request', request), options),
27
+ start: (lobbyId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/start`, jsonPost('start-lobby-request', request), options),
28
+ returnMatch: (lobbyId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/return-match`, jsonPost('return-lobby-match-request', request), options),
29
+ submitLimitedDeck: (lobbyId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/limited-deck`, jsonPost('submit-lobby-limited-deck-request', request), options),
30
+ prepareLimitedAiDecks: (lobbyId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/prepare-limited-ai-decks`, jsonPost('prepare-lobby-limited-ai-decks-request', request), options),
31
+ startLimitedMatch: (lobbyId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/start-limited-match`, jsonPost('start-lobby-limited-match-request', request), options),
32
+ leave: (lobbyId, request, options) => requestResource(requester, 'lobby-access-response', `/api/lobbies/${lobbyId}/leave`, jsonPost('leave-lobby-request', request), options),
33
+ createSession: access => createLobbySession({
34
+ access,
35
+ webSocketFactory,
36
+ wsUrl: options.wsUrl,
37
+ ...(options.validate == null ? {} : { validate: options.validate }),
38
+ }),
39
+ subscribeList: sessionOptions => createLobbyListSession({
40
+ webSocketFactory,
41
+ wsUrl: options.wsUrl,
42
+ sessionOptions,
43
+ ...(options.validate == null ? {} : { validate: options.validate }),
44
+ }),
45
+ };
46
+ }
47
+ /** Validates one response with a generated schema and returns the curated lobby DTO type. */
48
+ function requestResource(requester, schemaName, pathname, init, options) {
49
+ return requester.request(schemaName, pathname, init, options);
50
+ }
@@ -0,0 +1,13 @@
1
+ import type { WebSocketFactory } from '../internal/transport.js';
2
+ import type { SchemaValidator } from '../validators/validator.js';
3
+ import type { LobbyListSession, LobbyListSessionOptions } from './lobby-types.js';
4
+ /**
5
+ * Creates a controller for the public, unauthenticated lobby-list socket
6
+ * (`GET /ws/lobbies`).
7
+ */
8
+ export declare function createLobbyListSession(options: {
9
+ validate?: SchemaValidator | undefined;
10
+ webSocketFactory: WebSocketFactory;
11
+ wsUrl: string;
12
+ sessionOptions?: LobbyListSessionOptions | undefined;
13
+ }): LobbyListSession;
@@ -0,0 +1,198 @@
1
+ import { TypedEmitter } from '../internal/emitter.js';
2
+ import { SIMULATOR_REJECTION_CLOSE_CODE, simulatorSocketErrorPayload } from '../internal/errors.js';
3
+ import { websocketCloseInfo } from '../internal/websocket-event.js';
4
+ import { decodeSocketFrame } from '../internal/socket-frame.js';
5
+ import { passthroughValidator } from '../validators/validator.js';
6
+ import { DEFAULT_ERROR_HISTORY_LIMIT } from '../internal/limits.js';
7
+ import { normalizeReconnectBackoff, reconnectDelayMs, } from '../internal/reconnect-backoff.js';
8
+ /** Default initial reconnect backoff delay (ms). */
9
+ const DEFAULT_INITIAL_DELAY_MS = 500;
10
+ /** Default reconnect backoff ceiling (ms). */
11
+ const DEFAULT_MAX_DELAY_MS = 5_000;
12
+ /** Default exponential backoff multiplier between reconnect attempts. */
13
+ const DEFAULT_BACKOFF_FACTOR = 2;
14
+ /**
15
+ * Creates a controller for the public, unauthenticated lobby-list socket
16
+ * (`GET /ws/lobbies`).
17
+ */
18
+ export function createLobbyListSession(options) {
19
+ return new LobbyListSessionController({
20
+ validate: options.validate ?? passthroughValidator,
21
+ webSocketFactory: options.webSocketFactory,
22
+ wsUrl: options.wsUrl,
23
+ autoReconnect: normalizeAutoReconnect(options.sessionOptions?.autoReconnect),
24
+ });
25
+ }
26
+ /**
27
+ * Public, viewer-agnostic lobby-list subscription.
28
+ *
29
+ * Mirrors the per-lobby `LobbySessionController` but: opens a token-free URL
30
+ * (no `Sec-WebSocket-Protocol`), tracks a `PublicLobbySummary[]` instead of a
31
+ * single snapshot, and auto-reconnects on abnormal close with capped backoff.
32
+ */
33
+ class LobbyListSessionController {
34
+ __v_skip = true;
35
+ #emitter = new TypedEmitter();
36
+ #validator;
37
+ #webSocketFactory;
38
+ #wsUrl;
39
+ #autoReconnect;
40
+ #connectionState = 'idle';
41
+ #errors = [];
42
+ #socket;
43
+ #lobbies;
44
+ // Set when the consumer calls `close()`; suppresses auto-reconnect.
45
+ #manualClose = false;
46
+ // Monotonic generation guards stale reconnect timers across reconnects/closes.
47
+ #reconnectGeneration = 0;
48
+ #reconnectTimer;
49
+ constructor(options) {
50
+ this.#validator = options.validate;
51
+ this.#webSocketFactory = options.webSocketFactory;
52
+ this.#wsUrl = options.wsUrl;
53
+ this.#autoReconnect = options.autoReconnect;
54
+ }
55
+ get connectionState() {
56
+ return this.#connectionState;
57
+ }
58
+ get errorMessages() {
59
+ return this.#errors.map(error => `${error.code} - ${error.message}`);
60
+ }
61
+ get errors() {
62
+ return [...this.#errors];
63
+ }
64
+ get lobbies() {
65
+ return this.#lobbies;
66
+ }
67
+ async connect() {
68
+ this.#manualClose = false;
69
+ this.#openSocket();
70
+ return this;
71
+ }
72
+ close() {
73
+ this.#manualClose = true;
74
+ this.#clearReconnectTimer();
75
+ // Bump the generation so any in-flight reconnect timer becomes a no-op.
76
+ this.#reconnectGeneration += 1;
77
+ this.#socket?.close();
78
+ this.#socket = undefined;
79
+ this.#setConnectionState('closed');
80
+ }
81
+ on(event, listener) {
82
+ return this.#emitter.on(event, listener);
83
+ }
84
+ onSnapshot(listener) {
85
+ return this.#emitter.on('snapshot', listener);
86
+ }
87
+ ping(nonce) {
88
+ this.#socket?.send(JSON.stringify({ type: 'ping', payload: { nonce } }));
89
+ }
90
+ /** Opens a fresh socket, replacing any existing one. */
91
+ #openSocket() {
92
+ if (this.#socket) {
93
+ this.#socket.close();
94
+ this.#socket = undefined;
95
+ }
96
+ this.#setConnectionState('connecting');
97
+ // No token, no subprotocols: the list is public and unauthenticated.
98
+ const socket = this.#webSocketFactory(lobbyListSocketUrl(this.#wsUrl));
99
+ this.#socket = socket;
100
+ socket.addEventListener('open', () => this.#setConnectionState('open'));
101
+ socket.addEventListener('close', (event) => {
102
+ const info = websocketCloseInfo(event);
103
+ // Surface an explicit server refusal (code 4000 + engine error in the
104
+ // reason) instead of losing it in the reconnect loop.
105
+ if (info.closeCode === SIMULATOR_REJECTION_CLOSE_CODE) {
106
+ this.#pushError(simulatorSocketErrorPayload(info));
107
+ }
108
+ this.#handleClose();
109
+ });
110
+ socket.addEventListener('error', () => {
111
+ this.#pushError(simulatorSocketErrorPayload({}));
112
+ });
113
+ socket.addEventListener('message', event => this.#handleMessage(event));
114
+ }
115
+ #handleMessage(event) {
116
+ // Shared with every other SDK socket, so a malformed known frame is
117
+ // reported the same way here as on the match and lobby sockets: as an
118
+ // error payload, never as a throw. This listener runs inside the
119
+ // transport, so a throw would escape past the consumer entirely.
120
+ const decoded = decodeSocketFrame(event, this.#validator, 'lobby-list-server-message');
121
+ if (decoded.type === 'ignored')
122
+ return;
123
+ if (decoded.type === 'error') {
124
+ this.#pushError(decoded.error);
125
+ return;
126
+ }
127
+ const message = decoded.message;
128
+ this.#emitter.emit('message', message);
129
+ switch (message.type) {
130
+ case 'snapshot':
131
+ this.#lobbies = message.payload.lobbies;
132
+ this.#emitter.emit('snapshot', message.payload);
133
+ this.#emitChange();
134
+ break;
135
+ case 'pong':
136
+ this.#emitter.emit('pong', message.payload);
137
+ break;
138
+ }
139
+ }
140
+ #handleClose() {
141
+ this.#socket = undefined;
142
+ this.#setConnectionState('closed');
143
+ if (this.#manualClose || !this.#autoReconnect.enabled)
144
+ return;
145
+ this.#scheduleReconnect(1);
146
+ }
147
+ #scheduleReconnect(attempt) {
148
+ const generation = this.#reconnectGeneration;
149
+ const delayMs = reconnectDelayMs(this.#autoReconnect, attempt);
150
+ this.#reconnectTimer = setTimeout(() => {
151
+ this.#reconnectTimer = undefined;
152
+ // A close() (or another reconnect) bumped the generation: this is stale.
153
+ if (generation !== this.#reconnectGeneration || this.#manualClose)
154
+ return;
155
+ this.#openSocket();
156
+ }, delayMs);
157
+ }
158
+ #clearReconnectTimer() {
159
+ if (this.#reconnectTimer != null) {
160
+ clearTimeout(this.#reconnectTimer);
161
+ this.#reconnectTimer = undefined;
162
+ }
163
+ }
164
+ #pushError(error) {
165
+ // Bounded: a flapping list socket pushes one error per failed attempt.
166
+ this.#errors = [...this.#errors, error].slice(-DEFAULT_ERROR_HISTORY_LIMIT);
167
+ this.#emitter.emit('error', error);
168
+ this.#emitChange();
169
+ }
170
+ #setConnectionState(state) {
171
+ this.#connectionState = state;
172
+ this.#emitter.emit('connectionState', state);
173
+ this.#emitChange();
174
+ }
175
+ #emitChange() {
176
+ this.#emitter.emit('change', {
177
+ connectionState: this.#connectionState,
178
+ errors: this.errors,
179
+ lobbies: this.#lobbies,
180
+ });
181
+ }
182
+ }
183
+ /** Resolves the auto-reconnect option into concrete bounds. */
184
+ function normalizeAutoReconnect(option) {
185
+ return normalizeReconnectBackoff(option, {
186
+ enabled: true,
187
+ initialDelayMs: DEFAULT_INITIAL_DELAY_MS,
188
+ maxDelayMs: DEFAULT_MAX_DELAY_MS,
189
+ backoffFactor: DEFAULT_BACKOFF_FACTOR,
190
+ });
191
+ }
192
+ /** Builds the token-free list socket URL `${base}/lobbies`. */
193
+ function lobbyListSocketUrl(base) {
194
+ const root = base.endsWith('/') ? base : `${base}/`;
195
+ // No id segment and no token: the public list socket is unauthenticated.
196
+ const url = new URL('lobbies', root);
197
+ return url.toString();
198
+ }
@@ -0,0 +1,9 @@
1
+ import type { WebSocketFactory } from '../internal/transport.js';
2
+ import type { SchemaValidator } from '../validators/validator.js';
3
+ import type { LobbyAccessInput, LobbyAccessResponse, LobbySession } from './lobby-types.js';
4
+ export declare function createLobbySession(options: {
5
+ access: LobbyAccessInput | LobbyAccessResponse;
6
+ validate?: SchemaValidator | undefined;
7
+ webSocketFactory: WebSocketFactory;
8
+ wsUrl: string;
9
+ }): LobbySession;