@my-swu/simulator-client 0.1.3 → 0.1.5

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 (41) hide show
  1. package/dist/generated/index.d.ts +3 -0
  2. package/dist/generated/schemas.d.ts +1 -1
  3. package/dist/generated/schemas.js +626 -0
  4. package/dist/generated/types/admin-match-debug-bundle.d.ts +1 -1
  5. package/dist/generated/types/admin-match-replay-response.d.ts +1 -1
  6. package/dist/generated/types/client-message.d.ts +1 -1
  7. package/dist/generated/types/common.d.ts +193 -0
  8. package/dist/generated/types/create-playground-share-response.d.ts +1 -0
  9. package/dist/generated/types/create-playground-share-response.js +2 -0
  10. package/dist/generated/types/game-command.d.ts +1 -1
  11. package/dist/generated/types/match-history-replay-response.d.ts +1 -1
  12. package/dist/generated/types/playground-export-payload.d.ts +1 -0
  13. package/dist/generated/types/playground-export-payload.js +2 -0
  14. package/dist/generated/types/server-message.d.ts +1 -1
  15. package/dist/generated/types/set-ai-paused-response.d.ts +1 -1
  16. package/dist/generated/types/set-playground-ai-seat-request.d.ts +1 -0
  17. package/dist/generated/types/set-playground-ai-seat-request.js +2 -0
  18. package/dist/generated/types/shared-match-history-replay-response.d.ts +1 -1
  19. package/dist/generated/types/welcome-payload.d.ts +1 -1
  20. package/dist/generated/version.d.ts +1 -1
  21. package/dist/generated/version.js +1 -1
  22. package/dist/index.d.ts +1 -0
  23. package/dist/match-session/controller.d.ts +1 -0
  24. package/dist/match-session/controller.js +3 -0
  25. package/dist/match-session/types.d.ts +2 -0
  26. package/dist/resources/admin.d.ts +3 -1
  27. package/dist/resources/admin.js +1 -0
  28. package/dist/resources/match-types.d.ts +11 -1
  29. package/dist/resources/matches.js +49 -0
  30. package/dist/validators.d.ts +4 -1
  31. package/package.json +1 -1
  32. package/schema/common.schema.json +491 -0
  33. package/schema/create-match-request.schema.json +5 -0
  34. package/schema/create-playground-share-response.schema.json +22 -0
  35. package/schema/game-command.schema.json +20 -0
  36. package/schema/game-state.schema.json +15 -0
  37. package/schema/manifest.json +4 -1
  38. package/schema/match-save-payload.schema.json +8 -0
  39. package/schema/playground-export-payload.schema.json +26 -0
  40. package/schema/route-manifest.json +58 -0
  41. package/schema/set-playground-ai-seat-request.schema.json +36 -0
@@ -1 +1 @@
1
- export type { AbilityTarget, AbilityWindow, ActionAbilitySource, ActionAbilityView, ActiveEffectDescriptionView, ActiveEffectView, AdminMatchDebugBundle, AdminMatchSummary, AiDifficulty, AiOpponentConfig, AiTrilogyFormatMode, AttachmentMode, AttackChoiceView, AttackTarget, AvailableAttackView, CaptureOptionsView, CaptureSelection, CapturedUnitView, CardArena, CardChoiceResourcePaymentOptionView, CardDrawSource, CardInstanceView, ConstructedFormat, CurrentAttackStateView, CurrentAttackView, DeckInput, DeckPlacement, DeckRegistrationView, DelayedEffectDescriptionView, DelayedEffectOrderChoiceView, DelayedEffectOrderOptionView, DelayedEffectTimingView, DelayedEffectView, DistributionAssignment, DistributionDamageKindView, DistributionItemView, DistributionTargetView, DistributionTokenKindView, DynamicPowerLimit, EffectCardScopeView, EffectDurationView, EffectResolutionDraftStepView, EffectResolutionDraftView, EffectRestrictionView, EffectSequenceOrder, EffectSequenceView, EffectSourceView, EffectTargetView, ExploitOptionsView, FormatSeatView, FormatSetupInput, GameEvent, GameState, GameTimerActiveClockView, GameTimerReserveView, GameTimerStateView, HiddenCardChoiceMode, HiddenZoneKind, HistorySection, HistoryStatus, InitiativeChoiceReason, InitiativeState, InstructedAttackView, LeaderActionView, LeaderDeployActionView, LeaderDeployCostView, LeaderDeployMode, LeaderDeployThresholdBonus, LeaderStateView, LimitedEventView, LimitedSideboardPoolView, MatchEndReason, MatchFormat, MatchHistoryDeckSummary, MatchHistoryPlayerSummary, MatchHistoryReplayArchive, MatchPhase, MatchResult, MatchSavePayload, MatchSaveSeat, MatchSeriesView, MatchStatus, MctsConfigOverride, ModeChoiceView, NamedCardEffectDescriptionView, NullableDistributionTokenKindView, NullableSeatView, PendingAbilityAspectChoiceView, PendingAbilityAttackChoiceView, PendingAbilityCardChoiceView, PendingAbilityFamily, PendingAbilityModeChoiceInputKind, PendingAbilityModeChoiceView, PendingAbilityNameChoiceView, PendingAbilityOrderAbilityView, PendingAbilityOrderChoiceView, PendingAbilityOrderGroupView, PendingAbilityView, PendingChoiceView, PendingDistributionView, PendingUndoRequest, PlayActionView, PlayCardSourceView, PlayCardZone, PlayerTargetPattern, PresenceFilter, PromptProvenanceView, PromptState, RejectedPlayView, RelationFilter, ResourceCardView, ResourcePaymentOptionView, Seat, SeatDirection, SeatOfferIntent, SeatState, SelectionScope, SeriesEndReason, SeriesGameRecord, SeriesResultView, SharedCounterState, SimulatorReportResponse, SmuggleActionView, SmuggleKind, TargetGroupPurpose, TargetSelectionGroup, TargetSelectionPlanView, TriggerWindowView, TurnPassSource, TwinSunsCounter, TwinSunsCountersView, UndoCancelReason, UndoRequestReason, UniquenessFilter, UnitAbilitySuppressionView, UnitCopiedCardEntry, UnitDefeatCause, UnitExtremum, UnitFilter, UnitStateView, UpgradeStateView, } from './common.js';
1
+ export type { AbilityTarget, AbilityWindow, ActionAbilitySource, ActionAbilityView, ActiveEffectDescriptionView, ActiveEffectView, AdminMatchDebugBundle, AdminMatchSummary, AiDecisionDiagnostic, AiDecisionSearchMode, AiDifficulty, AiOpponentConfig, AiTrilogyFormatMode, AttachmentMode, AttackChoiceView, AttackTarget, AvailableAttackView, CaptureOptionsView, CaptureSelection, CapturedUnitView, CardArena, CardChoiceResourcePaymentOptionView, CardDrawSource, CardInstanceView, ConstructedFormat, CurrentAttackStateView, CurrentAttackView, DeckInput, DeckPlacement, DeckRegistrationView, DelayedEffectDescriptionView, DelayedEffectOrderChoiceView, DelayedEffectOrderOptionView, DelayedEffectTimingView, DelayedEffectView, DistributionAssignment, DistributionDamageKindView, DistributionItemView, DistributionTargetView, DistributionTokenKindView, DynamicPowerLimit, EffectCardScopeView, EffectDurationView, EffectResolutionDraftStepView, EffectResolutionDraftView, EffectRestrictionView, EffectSequenceOrder, EffectSequenceView, EffectSourceView, EffectTargetView, ExploitOptionsView, FormatSeatView, FormatSetupInput, GameEvent, GameState, GameTimerActiveClockView, GameTimerReserveView, GameTimerStateView, HiddenCardChoiceMode, HiddenZoneKind, HistorySection, HistoryStatus, InitiativeChoiceReason, InitiativeState, InstructedAttackView, LeaderActionView, LeaderDeployActionView, LeaderDeployCostView, LeaderDeployMode, LeaderDeployThresholdBonus, LeaderStateView, LimitedEventView, LimitedSideboardPoolView, MatchEndReason, MatchFormat, MatchHistoryDeckSummary, MatchHistoryPlayerSummary, MatchHistoryReplayArchive, MatchPhase, MatchResult, MatchSavePayload, MatchSaveSeat, MatchSeriesView, MatchStatus, MctsConfigOverride, ModeChoiceView, NamedCardEffectDescriptionView, NullableDistributionTokenKindView, NullableSeatView, PendingAbilityAspectChoiceView, PendingAbilityAttackChoiceView, PendingAbilityCardChoiceView, PendingAbilityFamily, PendingAbilityModeChoiceInputKind, PendingAbilityModeChoiceView, PendingAbilityNameChoiceView, PendingAbilityOrderAbilityView, PendingAbilityOrderChoiceView, PendingAbilityOrderGroupView, PendingAbilityView, PendingChoiceView, PendingDistributionView, PendingUndoRequest, PlayActionView, PlayCardSourceView, PlayCardZone, PlayerTargetPattern, PresenceFilter, PromptProvenanceView, PromptState, RejectedPlayView, RelationFilter, ResourceCardView, ResourcePaymentOptionView, Seat, SeatDirection, SeatOfferIntent, SeatState, SelectionScope, SeriesEndReason, SeriesGameRecord, SeriesResultView, SharedCounterState, SimulatorReportResponse, SmuggleActionView, SmuggleKind, TargetGroupPurpose, TargetSelectionGroup, TargetSelectionPlanView, TriggerWindowView, TurnPassSource, TwinSunsCounter, TwinSunsCountersView, UndoCancelReason, UndoRequestReason, UniquenessFilter, UnitAbilitySuppressionView, UnitCopiedCardEntry, UnitDefeatCause, UnitExtremum, UnitFilter, UnitStateView, UpgradeStateView, } from './common.js';
@@ -1 +1 @@
1
- export type { AbilityTarget, AbilityWindow, ActionAbilitySource, ActionAbilityView, ActiveEffectDescriptionView, ActiveEffectView, AdminMatchReplayResponse, AttachmentMode, AttackChoiceView, AttackTarget, AvailableAttackView, CaptureOptionsView, CaptureSelection, CapturedUnitView, CardArena, CardChoiceResourcePaymentOptionView, CardDrawSource, CardInstanceView, ConstructedFormat, CurrentAttackStateView, CurrentAttackView, DeckInput, DeckPlacement, DeckRegistrationView, DelayedEffectDescriptionView, DelayedEffectOrderChoiceView, DelayedEffectOrderOptionView, DelayedEffectTimingView, DelayedEffectView, DistributionAssignment, DistributionDamageKindView, DistributionItemView, DistributionTargetView, DistributionTokenKindView, DynamicPowerLimit, EffectCardScopeView, EffectDurationView, EffectResolutionDraftStepView, EffectResolutionDraftView, EffectRestrictionView, EffectSequenceOrder, EffectSequenceView, EffectSourceView, EffectTargetView, ExploitOptionsView, FormatSeatView, GameEvent, GameState, GameTimerActiveClockView, GameTimerReserveView, GameTimerStateView, HiddenCardChoiceMode, HiddenZoneKind, InitiativeChoiceReason, InitiativeState, InstructedAttackView, LeaderActionView, LeaderDeployActionView, LeaderDeployCostView, LeaderDeployMode, LeaderDeployThresholdBonus, LeaderStateView, LimitedEventView, LimitedSideboardPoolView, MatchEndReason, MatchFormat, MatchHistoryReplayArchive, MatchPhase, MatchResult, MatchSeriesView, MatchStatus, ModeChoiceView, NamedCardEffectDescriptionView, NullableDistributionTokenKindView, NullableSeatView, PendingAbilityAspectChoiceView, PendingAbilityAttackChoiceView, PendingAbilityCardChoiceView, PendingAbilityFamily, PendingAbilityModeChoiceInputKind, PendingAbilityModeChoiceView, PendingAbilityNameChoiceView, PendingAbilityOrderAbilityView, PendingAbilityOrderChoiceView, PendingAbilityOrderGroupView, PendingAbilityView, PendingChoiceView, PendingDistributionView, PendingUndoRequest, PlayActionView, PlayCardSourceView, PlayCardZone, PlayerTargetPattern, PresenceFilter, PromptProvenanceView, PromptState, RejectedPlayView, RelationFilter, ResourceCardView, ResourcePaymentOptionView, Seat, SeatDirection, SeatOfferIntent, SeatState, SelectionScope, SeriesEndReason, SeriesGameRecord, SeriesResultView, SharedCounterState, SmuggleActionView, SmuggleKind, TargetGroupPurpose, TargetSelectionGroup, TargetSelectionPlanView, TriggerWindowView, TurnPassSource, TwinSunsCounter, TwinSunsCountersView, UndoCancelReason, UndoRequestReason, UniquenessFilter, UnitAbilitySuppressionView, UnitDefeatCause, UnitExtremum, UnitFilter, UnitStateView, UpgradeStateView, } from './common.js';
1
+ export type { AbilityTarget, AbilityWindow, ActionAbilitySource, ActionAbilityView, ActiveEffectDescriptionView, ActiveEffectView, AdminMatchReplayResponse, AiDecisionDiagnostic, AiDecisionSearchMode, AiDifficulty, AttachmentMode, AttackChoiceView, AttackTarget, AvailableAttackView, CaptureOptionsView, CaptureSelection, CapturedUnitView, CardArena, CardChoiceResourcePaymentOptionView, CardDrawSource, CardInstanceView, ConstructedFormat, CurrentAttackStateView, CurrentAttackView, DeckInput, DeckPlacement, DeckRegistrationView, DelayedEffectDescriptionView, DelayedEffectOrderChoiceView, DelayedEffectOrderOptionView, DelayedEffectTimingView, DelayedEffectView, DistributionAssignment, DistributionDamageKindView, DistributionItemView, DistributionTargetView, DistributionTokenKindView, DynamicPowerLimit, EffectCardScopeView, EffectDurationView, EffectResolutionDraftStepView, EffectResolutionDraftView, EffectRestrictionView, EffectSequenceOrder, EffectSequenceView, EffectSourceView, EffectTargetView, ExploitOptionsView, FormatSeatView, GameEvent, GameState, GameTimerActiveClockView, GameTimerReserveView, GameTimerStateView, HiddenCardChoiceMode, HiddenZoneKind, InitiativeChoiceReason, InitiativeState, InstructedAttackView, LeaderActionView, LeaderDeployActionView, LeaderDeployCostView, LeaderDeployMode, LeaderDeployThresholdBonus, LeaderStateView, LimitedEventView, LimitedSideboardPoolView, MatchEndReason, MatchFormat, MatchHistoryReplayArchive, MatchPhase, MatchResult, MatchSeriesView, MatchStatus, ModeChoiceView, NamedCardEffectDescriptionView, NullableDistributionTokenKindView, NullableSeatView, PendingAbilityAspectChoiceView, PendingAbilityAttackChoiceView, PendingAbilityCardChoiceView, PendingAbilityFamily, PendingAbilityModeChoiceInputKind, PendingAbilityModeChoiceView, PendingAbilityNameChoiceView, PendingAbilityOrderAbilityView, PendingAbilityOrderChoiceView, PendingAbilityOrderGroupView, PendingAbilityView, PendingChoiceView, PendingDistributionView, PendingUndoRequest, PlayActionView, PlayCardSourceView, PlayCardZone, PlayerTargetPattern, PresenceFilter, PromptProvenanceView, PromptState, RejectedPlayView, RelationFilter, ResourceCardView, ResourcePaymentOptionView, Seat, SeatDirection, SeatOfferIntent, SeatState, SelectionScope, SeriesEndReason, SeriesGameRecord, SeriesResultView, SharedCounterState, SmuggleActionView, SmuggleKind, TargetGroupPurpose, TargetSelectionGroup, TargetSelectionPlanView, TriggerWindowView, TurnPassSource, TwinSunsCounter, TwinSunsCountersView, UndoCancelReason, UndoRequestReason, UniquenessFilter, UnitAbilitySuppressionView, UnitDefeatCause, UnitExtremum, UnitFilter, UnitStateView, UpgradeStateView, } from './common.js';
@@ -1 +1 @@
1
- export type { AbilityTarget, ActionAbilitySource, AttackTarget, CaptureSelection, CardInteractionCueKind, CardInteractionCueRequest, CardInteractionCueState, CardInteractionDragOffset, ClientMessage, DeckInput, DistributionAssignment, FormatEventCommand, GameCommand, Seat, SmuggleKind, TwinSunsCounter, } from './common.js';
1
+ export type { AbilityTarget, ActionAbilitySource, AttackTarget, CaptureSelection, CardInteractionCueKind, CardInteractionCueRequest, CardInteractionCueState, CardInteractionDragOffset, ClientMessage, DeckInput, DistributionAssignment, FormatEventCommand, GameCommand, PlaygroundCommand, PlaygroundDamageTarget, PlaygroundDefeatTarget, Seat, SmuggleKind, TwinSunsCounter, } from './common.js';
@@ -278,6 +278,87 @@ export interface AdminMatchSummary {
278
278
  status: HistoryStatus;
279
279
  updatedAtMs: number;
280
280
  }
281
+ /**
282
+ * One AI decision's search-budget diagnostics, safe for durable storage.
283
+ */
284
+ export interface AiDecisionDiagnostic {
285
+ /**
286
+ * Pending ability the chosen command answered, when applicable.
287
+ */
288
+ abilityId?: (number | null);
289
+ /**
290
+ * Privacy-safe chosen-command shape: snake_case command kind only.
291
+ */
292
+ commandKind: string;
293
+ difficulty: AiDifficulty;
294
+ elapsedMs: number;
295
+ /**
296
+ * Engine event counter of the searched state; exact cross-check key.
297
+ */
298
+ eventsApplied: number;
299
+ /**
300
+ * Index of the replay frame this decision was made on (the state BEFORE
301
+ * the chosen command applied). `None` when no frame was recorded yet.
302
+ */
303
+ frameIndex?: (number | null);
304
+ /**
305
+ * Whether the minimum-iteration floor pushed past the wall-clock budget.
306
+ */
307
+ hardFloorOverrun: boolean;
308
+ /**
309
+ * Idle-stretch ceiling granted for this decision, when one was.
310
+ */
311
+ iterationCeiling?: (number | null);
312
+ iterationsBudget: number;
313
+ iterationsDone: number;
314
+ legalCount: number;
315
+ /**
316
+ * Minimum-iteration floor the search guarantees past the wall clock.
317
+ */
318
+ minIterations: number;
319
+ /**
320
+ * Time spent waiting for scheduler admission before the search started.
321
+ */
322
+ queueMs: number;
323
+ /**
324
+ * Whether the AI scheduler was idle when this decision was admitted.
325
+ */
326
+ schedulerIdle: boolean;
327
+ searchMode: AiDecisionSearchMode;
328
+ seat: Seat;
329
+ /**
330
+ * Gameplay snapshot marker the searched state carried. An undo between
331
+ * search and record makes this disagree with the frame at `frame_index`.
332
+ */
333
+ snapshotRevision: number;
334
+ /**
335
+ * Public source card of that pending ability, when applicable.
336
+ */
337
+ sourceCardId?: (number | null);
338
+ /**
339
+ * The starved-search guard discarded the search result entirely and
340
+ * answered from a one-ply heuristic ranking instead.
341
+ */
342
+ starvationFallback: boolean;
343
+ /**
344
+ * Starved search: the wall clock cut the decision at (or below) its
345
+ * minimum-iteration floor, so the move rests on noise-level visit
346
+ * counts. Any blunder on a starved decision is explained first by this
347
+ * flag, not by enumeration or evaluation defects.
348
+ */
349
+ starved: boolean;
350
+ timeBudgetMs?: (number | null);
351
+ /**
352
+ * Whether the wall clock cut the search before its iteration budget.
353
+ */
354
+ timeLimited: boolean;
355
+ workersCompleted: number;
356
+ workersRequested: number;
357
+ }
358
+ /**
359
+ * Decision algorithm that produced one recorded AI choice.
360
+ */
361
+ export type AiDecisionSearchMode = ("mcts" | "setupEvaluator" | "fastPath");
281
362
  /**
282
363
  * Public difficulty presets. Internal tuning (iteration counts, time
283
364
  * budgets) lives in `crate::r#match::registry::ai_factory` so it can be
@@ -320,6 +401,7 @@ export interface AiOpponentConfig {
320
401
  trilogyFormatMode: AiTrilogyFormatMode;
321
402
  }
322
403
  export interface AiSeatStatusPayload {
404
+ difficulty: AiDifficulty;
323
405
  paused: boolean;
324
406
  seat: Seat;
325
407
  trilogyFormatMode: AiTrilogyFormatMode;
@@ -699,6 +781,11 @@ export interface CreateMatchRequest {
699
781
  * currently support exactly 2 players.
700
782
  */
701
783
  playerCount: number;
784
+ /**
785
+ * Enables the server-owned scenario Playground runtime. Normal matches
786
+ * retain the default and never accept Playground mutations.
787
+ */
788
+ playground?: boolean;
702
789
  /**
703
790
  * Optional authored scenario selector for direct Learn match creation.
704
791
  */
@@ -719,6 +806,13 @@ export interface CreateMetaWindowRequest {
719
806
  startsAtMs?: (number | null);
720
807
  title: string;
721
808
  }
809
+ /**
810
+ * Opaque 30-day Playground share capability.
811
+ */
812
+ export interface CreatePlaygroundShareResponse {
813
+ expiresAtMs: number;
814
+ shareToken: string;
815
+ }
722
816
  /**
723
817
  * Request body for creating one sealed/draft tournament room.
724
818
  */
@@ -1410,6 +1504,10 @@ export type FormatSetupInput = ({
1410
1504
  type: "draft";
1411
1505
  });
1412
1506
  export type GameCommand = (("deployLeader" | "takeInitiative" | "pass" | "concede") | {
1507
+ playground: {
1508
+ command: PlaygroundCommand;
1509
+ };
1510
+ } | {
1413
1511
  chooseInitiativePlayer: {
1414
1512
  seat: Seat;
1415
1513
  };
@@ -2004,6 +2102,14 @@ export interface GameState {
2004
2102
  */
2005
2103
  playerCount: number;
2006
2104
  players: SeatState[];
2105
+ /**
2106
+ * Whether this snapshot belongs to a server-authorized Playground match.
2107
+ */
2108
+ playground?: boolean;
2109
+ /**
2110
+ * Printed cards supplied by every configured Playground deck.
2111
+ */
2112
+ playgroundDeckCardIds?: number[];
2007
2113
  prompt: PromptState;
2008
2114
  rejectedPlayReasons: RejectedPlayView[];
2009
2115
  result?: (MatchResult | null);
@@ -3258,6 +3364,11 @@ export interface MatchHistoryPlayerSummary {
3258
3364
  * `revealed_frames` is returned only after both completion and ownership checks.
3259
3365
  */
3260
3366
  export interface MatchHistoryReplayArchive {
3367
+ /**
3368
+ * Per-AI-decision search diagnostics (budget, workers, starvation), in
3369
+ * decision order. Additive: older archives decode with an empty list.
3370
+ */
3371
+ aiDecisions?: AiDecisionDiagnostic[];
3261
3372
  /**
3262
3373
  * Events folded into each matching replay frame. Older archives decode
3263
3374
  * without this additive field and remain playable without captions.
@@ -3368,6 +3479,11 @@ export interface MatchSavePayload {
3368
3479
  * Whether AI was manually paused when this snapshot was captured.
3369
3480
  */
3370
3481
  aiPaused: boolean;
3482
+ /**
3483
+ * Exact manually paused AI seats. Empty payloads from older clients use
3484
+ * `ai_paused` as the all-seat compatibility fallback.
3485
+ */
3486
+ aiPausedSeats?: Seat[];
3371
3487
  /**
3372
3488
  * Wire mirror of the [`UnitState::copied_card`] Arcs that the inner
3373
3489
  * state could not embed. Keyed by `unit.instance_id`. Empty when no
@@ -3944,6 +4060,65 @@ export type PlayerPresenceStatus = ("joined" | "disconnected" | "reconnected" |
3944
4060
  export type PlayerTargetPattern = (("SelfPlayer" | "EachPlayer" | "OpponentPlayer" | "ChosenOpponent" | "ChosenPlayer" | "DefendingPlayer" | "RememberedPlayer" | "RememberedUnitController" | "OtherThanRememberedPlayer") | "EachOpponent" | "EachOpponentWhoseBaseDamagedBySourceThisPhase" | "RememberedTargetController" | {
3945
4061
  RelativeToRememberedPlayer: SeatDirection;
3946
4062
  } | "ControllerOfLowerCostRememberedUnit");
4063
+ /**
4064
+ * Host-authorized raw scenario mutation for a Playground match.
4065
+ */
4066
+ export type PlaygroundCommand = ({
4067
+ card_ids: number[];
4068
+ seat: Seat;
4069
+ type: "setDrawQueue";
4070
+ } | {
4071
+ attachedToUnitId?: (number | null);
4072
+ cardId: number;
4073
+ seat: Seat;
4074
+ type: "putCardInPlay";
4075
+ } | {
4076
+ attachedToUnitId?: (number | null);
4077
+ cardId: number;
4078
+ seat: Seat;
4079
+ type: "playCardForFree";
4080
+ } | {
4081
+ amount: number;
4082
+ target: PlaygroundDamageTarget;
4083
+ type: "setDamage";
4084
+ } | {
4085
+ target: PlaygroundDefeatTarget;
4086
+ type: "defeatCard";
4087
+ } | {
4088
+ captorUnitId: number;
4089
+ cardId: number;
4090
+ ownerSeat: Seat;
4091
+ type: "captureCard";
4092
+ });
4093
+ /**
4094
+ * One board target whose damage counter Playground may set exactly.
4095
+ */
4096
+ export type PlaygroundDamageTarget = ({
4097
+ seat: Seat;
4098
+ type: "base";
4099
+ } | {
4100
+ type: "unit";
4101
+ unit_id: number;
4102
+ });
4103
+ /**
4104
+ * One in-play card Playground may defeat through normal leave-play handling.
4105
+ */
4106
+ export type PlaygroundDefeatTarget = ({
4107
+ type: "unit";
4108
+ unit_id: number;
4109
+ } | {
4110
+ type: "upgrade";
4111
+ upgrade_id: number;
4112
+ });
4113
+ /**
4114
+ * Portable Playground file. `restore_token` is a dedicated capability and
4115
+ * never contains a live match seat token.
4116
+ */
4117
+ export interface PlaygroundExportPayload {
4118
+ restoreToken: string;
4119
+ save: MatchSavePayload;
4120
+ version: number;
4121
+ }
3947
4122
  /**
3948
4123
  * Asks the limited-event host to prebuild every server-AI deck after the
3949
4124
  * shared pool is complete. Human players may continue constructing decks
@@ -4567,6 +4742,21 @@ export interface SetAiPausedRequest {
4567
4742
  */
4568
4743
  seatToken: string;
4569
4744
  }
4745
+ /**
4746
+ * Host-authored AI controller settings for one Playground seat.
4747
+ */
4748
+ export interface SetPlaygroundAiSeatRequest {
4749
+ /**
4750
+ * `None` removes the AI controller from this seat.
4751
+ */
4752
+ difficulty: (AiDifficulty | null);
4753
+ /**
4754
+ * Manual per-seat pause state. Ignored when `difficulty` is `None`.
4755
+ */
4756
+ paused: boolean;
4757
+ seat: Seat;
4758
+ seatToken: string;
4759
+ }
4570
4760
  /**
4571
4761
  * Request body for allowing or pausing new ranked queue admissions.
4572
4762
  */
@@ -4871,6 +5061,9 @@ export type TargetGroupPurpose = ({
4871
5061
  kind: "attachUpgrade";
4872
5062
  } | {
4873
5063
  kind: "exhaust";
5064
+ } | {
5065
+ amount: number;
5066
+ kind: "payToAvoidExhaust";
4874
5067
  } | {
4875
5068
  kind: "ready";
4876
5069
  } | {
@@ -0,0 +1 @@
1
+ export type { CreatePlaygroundShareResponse, } from './common.js';
@@ -0,0 +1,2 @@
1
+ /* eslint-disable */
2
+ export {};
@@ -1 +1 @@
1
- export type { AbilityTarget, ActionAbilitySource, AttackTarget, CaptureSelection, DistributionAssignment, GameCommand, Seat, SmuggleKind, TwinSunsCounter, } from './common.js';
1
+ export type { AbilityTarget, ActionAbilitySource, AttackTarget, CaptureSelection, DistributionAssignment, GameCommand, PlaygroundCommand, PlaygroundDamageTarget, PlaygroundDefeatTarget, Seat, SmuggleKind, TwinSunsCounter, } from './common.js';
@@ -1 +1 @@
1
- export type { AbilityTarget, AbilityWindow, ActionAbilitySource, ActionAbilityView, ActiveEffectDescriptionView, ActiveEffectView, AttachmentMode, AttackChoiceView, AttackTarget, AvailableAttackView, CaptureOptionsView, CaptureSelection, CapturedUnitView, CardArena, CardChoiceResourcePaymentOptionView, CardDrawSource, CardInstanceView, ConstructedFormat, CurrentAttackStateView, CurrentAttackView, DeckInput, DeckPlacement, DeckRegistrationView, DelayedEffectDescriptionView, DelayedEffectOrderChoiceView, DelayedEffectOrderOptionView, DelayedEffectTimingView, DelayedEffectView, DistributionAssignment, DistributionDamageKindView, DistributionItemView, DistributionTargetView, DistributionTokenKindView, DynamicPowerLimit, EffectCardScopeView, EffectDurationView, EffectResolutionDraftStepView, EffectResolutionDraftView, EffectRestrictionView, EffectSequenceOrder, EffectSequenceView, EffectSourceView, EffectTargetView, ExploitOptionsView, FormatSeatView, GameEvent, GameState, GameTimerActiveClockView, GameTimerReserveView, GameTimerStateView, HiddenCardChoiceMode, HiddenZoneKind, InitiativeChoiceReason, InitiativeState, InstructedAttackView, LeaderActionView, LeaderDeployActionView, LeaderDeployCostView, LeaderDeployMode, LeaderDeployThresholdBonus, LeaderStateView, LimitedEventView, LimitedSideboardPoolView, MatchEndReason, MatchFormat, MatchHistoryReplayArchive, MatchHistoryReplayResponse, MatchPhase, MatchResult, MatchSeriesView, MatchStatus, ModeChoiceView, NamedCardEffectDescriptionView, NullableDistributionTokenKindView, NullableSeatView, PendingAbilityAspectChoiceView, PendingAbilityAttackChoiceView, PendingAbilityCardChoiceView, PendingAbilityFamily, PendingAbilityModeChoiceInputKind, PendingAbilityModeChoiceView, PendingAbilityNameChoiceView, PendingAbilityOrderAbilityView, PendingAbilityOrderChoiceView, PendingAbilityOrderGroupView, PendingAbilityView, PendingChoiceView, PendingDistributionView, PendingUndoRequest, PlayActionView, PlayCardSourceView, PlayCardZone, PlayerTargetPattern, PresenceFilter, PromptProvenanceView, PromptState, RejectedPlayView, RelationFilter, ResourceCardView, ResourcePaymentOptionView, Seat, SeatDirection, SeatOfferIntent, SeatState, SelectionScope, SeriesEndReason, SeriesGameRecord, SeriesResultView, SharedCounterState, SmuggleActionView, SmuggleKind, TargetGroupPurpose, TargetSelectionGroup, TargetSelectionPlanView, TriggerWindowView, TurnPassSource, TwinSunsCounter, TwinSunsCountersView, UndoCancelReason, UndoRequestReason, UniquenessFilter, UnitAbilitySuppressionView, UnitDefeatCause, UnitExtremum, UnitFilter, UnitStateView, UpgradeStateView, } from './common.js';
1
+ export type { AbilityTarget, AbilityWindow, ActionAbilitySource, ActionAbilityView, ActiveEffectDescriptionView, ActiveEffectView, AiDecisionDiagnostic, AiDecisionSearchMode, AiDifficulty, AttachmentMode, AttackChoiceView, AttackTarget, AvailableAttackView, CaptureOptionsView, CaptureSelection, CapturedUnitView, CardArena, CardChoiceResourcePaymentOptionView, CardDrawSource, CardInstanceView, ConstructedFormat, CurrentAttackStateView, CurrentAttackView, DeckInput, DeckPlacement, DeckRegistrationView, DelayedEffectDescriptionView, DelayedEffectOrderChoiceView, DelayedEffectOrderOptionView, DelayedEffectTimingView, DelayedEffectView, DistributionAssignment, DistributionDamageKindView, DistributionItemView, DistributionTargetView, DistributionTokenKindView, DynamicPowerLimit, EffectCardScopeView, EffectDurationView, EffectResolutionDraftStepView, EffectResolutionDraftView, EffectRestrictionView, EffectSequenceOrder, EffectSequenceView, EffectSourceView, EffectTargetView, ExploitOptionsView, FormatSeatView, GameEvent, GameState, GameTimerActiveClockView, GameTimerReserveView, GameTimerStateView, HiddenCardChoiceMode, HiddenZoneKind, InitiativeChoiceReason, InitiativeState, InstructedAttackView, LeaderActionView, LeaderDeployActionView, LeaderDeployCostView, LeaderDeployMode, LeaderDeployThresholdBonus, LeaderStateView, LimitedEventView, LimitedSideboardPoolView, MatchEndReason, MatchFormat, MatchHistoryReplayArchive, MatchHistoryReplayResponse, MatchPhase, MatchResult, MatchSeriesView, MatchStatus, ModeChoiceView, NamedCardEffectDescriptionView, NullableDistributionTokenKindView, NullableSeatView, PendingAbilityAspectChoiceView, PendingAbilityAttackChoiceView, PendingAbilityCardChoiceView, PendingAbilityFamily, PendingAbilityModeChoiceInputKind, PendingAbilityModeChoiceView, PendingAbilityNameChoiceView, PendingAbilityOrderAbilityView, PendingAbilityOrderChoiceView, PendingAbilityOrderGroupView, PendingAbilityView, PendingChoiceView, PendingDistributionView, PendingUndoRequest, PlayActionView, PlayCardSourceView, PlayCardZone, PlayerTargetPattern, PresenceFilter, PromptProvenanceView, PromptState, RejectedPlayView, RelationFilter, ResourceCardView, ResourcePaymentOptionView, Seat, SeatDirection, SeatOfferIntent, SeatState, SelectionScope, SeriesEndReason, SeriesGameRecord, SeriesResultView, SharedCounterState, SmuggleActionView, SmuggleKind, TargetGroupPurpose, TargetSelectionGroup, TargetSelectionPlanView, TriggerWindowView, TurnPassSource, TwinSunsCounter, TwinSunsCountersView, UndoCancelReason, UndoRequestReason, UniquenessFilter, UnitAbilitySuppressionView, UnitDefeatCause, UnitExtremum, UnitFilter, UnitStateView, UpgradeStateView, } from './common.js';
@@ -0,0 +1 @@
1
+ export type { AiDifficulty, AiOpponentConfig, AiTrilogyFormatMode, ConstructedFormat, DeckInput, FormatSetupInput, MatchSavePayload, MatchSaveSeat, MctsConfigOverride, PlaygroundExportPayload, Seat, UnitCopiedCardEntry, } from './common.js';
@@ -0,0 +1,2 @@
1
+ /* eslint-disable */
2
+ export {};
@@ -1 +1 @@
1
- export type { AbilityTarget, AbilityWindow, ActionAbilitySource, ActionAbilityView, ActiveEffectDescriptionView, ActiveEffectView, AiSeatStatusPayload, AiStatusPayload, AiTrilogyFormatMode, AttachmentMode, AttackChoiceView, AttackTarget, AvailableAttackView, CaptureOptionsView, CaptureSelection, CapturedUnitView, CardArena, CardChoiceResourcePaymentOptionView, CardDrawSource, CardInstanceView, CardInteractionCue, CardInteractionCueKind, CardInteractionCueState, CardInteractionDragOffset, ConstructedFormat, CurrentAttackStateView, CurrentAttackView, DeckInput, DeckPlacement, DeckRegistrationView, DelayedEffectDescriptionView, DelayedEffectOrderChoiceView, DelayedEffectOrderOptionView, DelayedEffectTimingView, DelayedEffectView, DistributionAssignment, DistributionDamageKindView, DistributionItemView, DistributionTargetView, DistributionTokenKindView, DynamicPowerLimit, EffectCardScopeView, EffectDurationView, EffectResolutionDraftStepView, EffectResolutionDraftView, EffectRestrictionView, EffectSequenceOrder, EffectSequenceView, EffectSourceView, EffectTargetView, ErrorPayload, ExploitOptionsView, FormatSeatView, GameEvent, GameState, GameTimerActiveClockView, GameTimerReserveView, GameTimerStateView, HiddenCardChoiceMode, HiddenZoneKind, InitiativeChoiceReason, InitiativeState, InstructedAttackView, LeaderActionView, LeaderDeployActionView, LeaderDeployCostView, LeaderDeployMode, LeaderDeployThresholdBonus, LeaderStateView, LimitedEventView, LimitedSideboardPoolView, MatchChatMessage, MatchConnectionRole, MatchEndReason, MatchFormat, MatchHistoryFeedEntry, MatchHistoryFeedEntry1, MatchHistorySnapshot, MatchPhase, MatchQuickPhrase, MatchResult, MatchSeriesView, MatchStatus, ModeChoiceView, NamedCardEffectDescriptionView, NullableDistributionTokenKindView, NullableSeatView, PendingAbilityAspectChoiceView, PendingAbilityAttackChoiceView, PendingAbilityCardChoiceView, PendingAbilityFamily, PendingAbilityModeChoiceInputKind, PendingAbilityModeChoiceView, PendingAbilityNameChoiceView, PendingAbilityOrderAbilityView, PendingAbilityOrderChoiceView, PendingAbilityOrderGroupView, PendingAbilityView, PendingChoiceView, PendingDistributionView, PendingUndoRequest, PlayActionView, PlayCardSourceView, PlayCardZone, PlayerPresenceStatus, PlayerTargetPattern, PresenceFilter, PromptProvenanceView, PromptState, RejectedPlayView, RelationFilter, ResourceCardView, ResourcePaymentOptionView, Seat, SeatDirection, SeatOfferIntent, SeatState, SelectionScope, SeriesEndReason, SeriesGameRecord, SeriesResultView, ServerMessage, SharedCounterState, SmuggleActionView, SmuggleKind, TargetGroupPurpose, TargetSelectionGroup, TargetSelectionPlanView, TriggerWindowView, TurnPassSource, TwinSunsCounter, TwinSunsCountersView, UndoCancelReason, UndoRequestReason, UniquenessFilter, UnitAbilitySuppressionView, UnitDefeatCause, UnitExtremum, UnitFilter, UnitStateView, UpgradeStateView, WelcomePayload, } from './common.js';
1
+ export type { AbilityTarget, AbilityWindow, ActionAbilitySource, ActionAbilityView, ActiveEffectDescriptionView, ActiveEffectView, AiDifficulty, AiSeatStatusPayload, AiStatusPayload, AiTrilogyFormatMode, AttachmentMode, AttackChoiceView, AttackTarget, AvailableAttackView, CaptureOptionsView, CaptureSelection, CapturedUnitView, CardArena, CardChoiceResourcePaymentOptionView, CardDrawSource, CardInstanceView, CardInteractionCue, CardInteractionCueKind, CardInteractionCueState, CardInteractionDragOffset, ConstructedFormat, CurrentAttackStateView, CurrentAttackView, DeckInput, DeckPlacement, DeckRegistrationView, DelayedEffectDescriptionView, DelayedEffectOrderChoiceView, DelayedEffectOrderOptionView, DelayedEffectTimingView, DelayedEffectView, DistributionAssignment, DistributionDamageKindView, DistributionItemView, DistributionTargetView, DistributionTokenKindView, DynamicPowerLimit, EffectCardScopeView, EffectDurationView, EffectResolutionDraftStepView, EffectResolutionDraftView, EffectRestrictionView, EffectSequenceOrder, EffectSequenceView, EffectSourceView, EffectTargetView, ErrorPayload, ExploitOptionsView, FormatSeatView, GameEvent, GameState, GameTimerActiveClockView, GameTimerReserveView, GameTimerStateView, HiddenCardChoiceMode, HiddenZoneKind, InitiativeChoiceReason, InitiativeState, InstructedAttackView, LeaderActionView, LeaderDeployActionView, LeaderDeployCostView, LeaderDeployMode, LeaderDeployThresholdBonus, LeaderStateView, LimitedEventView, LimitedSideboardPoolView, MatchChatMessage, MatchConnectionRole, MatchEndReason, MatchFormat, MatchHistoryFeedEntry, MatchHistoryFeedEntry1, MatchHistorySnapshot, MatchPhase, MatchQuickPhrase, MatchResult, MatchSeriesView, MatchStatus, ModeChoiceView, NamedCardEffectDescriptionView, NullableDistributionTokenKindView, NullableSeatView, PendingAbilityAspectChoiceView, PendingAbilityAttackChoiceView, PendingAbilityCardChoiceView, PendingAbilityFamily, PendingAbilityModeChoiceInputKind, PendingAbilityModeChoiceView, PendingAbilityNameChoiceView, PendingAbilityOrderAbilityView, PendingAbilityOrderChoiceView, PendingAbilityOrderGroupView, PendingAbilityView, PendingChoiceView, PendingDistributionView, PendingUndoRequest, PlayActionView, PlayCardSourceView, PlayCardZone, PlayerPresenceStatus, PlayerTargetPattern, PresenceFilter, PromptProvenanceView, PromptState, RejectedPlayView, RelationFilter, ResourceCardView, ResourcePaymentOptionView, Seat, SeatDirection, SeatOfferIntent, SeatState, SelectionScope, SeriesEndReason, SeriesGameRecord, SeriesResultView, ServerMessage, SharedCounterState, SmuggleActionView, SmuggleKind, TargetGroupPurpose, TargetSelectionGroup, TargetSelectionPlanView, TriggerWindowView, TurnPassSource, TwinSunsCounter, TwinSunsCountersView, UndoCancelReason, UndoRequestReason, UniquenessFilter, UnitAbilitySuppressionView, UnitDefeatCause, UnitExtremum, UnitFilter, UnitStateView, UpgradeStateView, WelcomePayload, } from './common.js';
@@ -1 +1 @@
1
- export type { AiSeatStatusPayload, AiStatusPayload, AiTrilogyFormatMode, Seat, } from './common.js';
1
+ export type { AiDifficulty, AiSeatStatusPayload, AiStatusPayload, AiTrilogyFormatMode, Seat, } from './common.js';
@@ -0,0 +1 @@
1
+ export type { AiDifficulty, Seat, SetPlaygroundAiSeatRequest, } from './common.js';
@@ -0,0 +1,2 @@
1
+ /* eslint-disable */
2
+ export {};
@@ -1 +1 @@
1
- export type { AbilityTarget, AbilityWindow, ActionAbilitySource, ActionAbilityView, ActiveEffectDescriptionView, ActiveEffectView, AttachmentMode, AttackChoiceView, AttackTarget, AvailableAttackView, CaptureOptionsView, CaptureSelection, CapturedUnitView, CardArena, CardChoiceResourcePaymentOptionView, CardDrawSource, CardInstanceView, ConstructedFormat, CurrentAttackStateView, CurrentAttackView, DeckInput, DeckPlacement, DeckRegistrationView, DelayedEffectDescriptionView, DelayedEffectOrderChoiceView, DelayedEffectOrderOptionView, DelayedEffectTimingView, DelayedEffectView, DistributionAssignment, DistributionDamageKindView, DistributionItemView, DistributionTargetView, DistributionTokenKindView, DynamicPowerLimit, EffectCardScopeView, EffectDurationView, EffectResolutionDraftStepView, EffectResolutionDraftView, EffectRestrictionView, EffectSequenceOrder, EffectSequenceView, EffectSourceView, EffectTargetView, ExploitOptionsView, FormatSeatView, GameEvent, GameState, GameTimerActiveClockView, GameTimerReserveView, GameTimerStateView, HiddenCardChoiceMode, HiddenZoneKind, InitiativeChoiceReason, InitiativeState, InstructedAttackView, LeaderActionView, LeaderDeployActionView, LeaderDeployCostView, LeaderDeployMode, LeaderDeployThresholdBonus, LeaderStateView, LimitedEventView, LimitedSideboardPoolView, MatchEndReason, MatchFormat, MatchHistoryReplayArchive, MatchPhase, MatchResult, MatchSeriesView, MatchStatus, ModeChoiceView, NamedCardEffectDescriptionView, NullableDistributionTokenKindView, NullableSeatView, PendingAbilityAspectChoiceView, PendingAbilityAttackChoiceView, PendingAbilityCardChoiceView, PendingAbilityFamily, PendingAbilityModeChoiceInputKind, PendingAbilityModeChoiceView, PendingAbilityNameChoiceView, PendingAbilityOrderAbilityView, PendingAbilityOrderChoiceView, PendingAbilityOrderGroupView, PendingAbilityView, PendingChoiceView, PendingDistributionView, PendingUndoRequest, PlayActionView, PlayCardSourceView, PlayCardZone, PlayerTargetPattern, PresenceFilter, PromptProvenanceView, PromptState, RejectedPlayView, RelationFilter, ResourceCardView, ResourcePaymentOptionView, Seat, SeatDirection, SeatOfferIntent, SeatState, SelectionScope, SeriesEndReason, SeriesGameRecord, SeriesResultView, SharedCounterState, SharedMatchHistoryReplayResponse, SmuggleActionView, SmuggleKind, TargetGroupPurpose, TargetSelectionGroup, TargetSelectionPlanView, TriggerWindowView, TurnPassSource, TwinSunsCounter, TwinSunsCountersView, UndoCancelReason, UndoRequestReason, UniquenessFilter, UnitAbilitySuppressionView, UnitDefeatCause, UnitExtremum, UnitFilter, UnitStateView, UpgradeStateView, } from './common.js';
1
+ export type { AbilityTarget, AbilityWindow, ActionAbilitySource, ActionAbilityView, ActiveEffectDescriptionView, ActiveEffectView, AiDecisionDiagnostic, AiDecisionSearchMode, AiDifficulty, AttachmentMode, AttackChoiceView, AttackTarget, AvailableAttackView, CaptureOptionsView, CaptureSelection, CapturedUnitView, CardArena, CardChoiceResourcePaymentOptionView, CardDrawSource, CardInstanceView, ConstructedFormat, CurrentAttackStateView, CurrentAttackView, DeckInput, DeckPlacement, DeckRegistrationView, DelayedEffectDescriptionView, DelayedEffectOrderChoiceView, DelayedEffectOrderOptionView, DelayedEffectTimingView, DelayedEffectView, DistributionAssignment, DistributionDamageKindView, DistributionItemView, DistributionTargetView, DistributionTokenKindView, DynamicPowerLimit, EffectCardScopeView, EffectDurationView, EffectResolutionDraftStepView, EffectResolutionDraftView, EffectRestrictionView, EffectSequenceOrder, EffectSequenceView, EffectSourceView, EffectTargetView, ExploitOptionsView, FormatSeatView, GameEvent, GameState, GameTimerActiveClockView, GameTimerReserveView, GameTimerStateView, HiddenCardChoiceMode, HiddenZoneKind, InitiativeChoiceReason, InitiativeState, InstructedAttackView, LeaderActionView, LeaderDeployActionView, LeaderDeployCostView, LeaderDeployMode, LeaderDeployThresholdBonus, LeaderStateView, LimitedEventView, LimitedSideboardPoolView, MatchEndReason, MatchFormat, MatchHistoryReplayArchive, MatchPhase, MatchResult, MatchSeriesView, MatchStatus, ModeChoiceView, NamedCardEffectDescriptionView, NullableDistributionTokenKindView, NullableSeatView, PendingAbilityAspectChoiceView, PendingAbilityAttackChoiceView, PendingAbilityCardChoiceView, PendingAbilityFamily, PendingAbilityModeChoiceInputKind, PendingAbilityModeChoiceView, PendingAbilityNameChoiceView, PendingAbilityOrderAbilityView, PendingAbilityOrderChoiceView, PendingAbilityOrderGroupView, PendingAbilityView, PendingChoiceView, PendingDistributionView, PendingUndoRequest, PlayActionView, PlayCardSourceView, PlayCardZone, PlayerTargetPattern, PresenceFilter, PromptProvenanceView, PromptState, RejectedPlayView, RelationFilter, ResourceCardView, ResourcePaymentOptionView, Seat, SeatDirection, SeatOfferIntent, SeatState, SelectionScope, SeriesEndReason, SeriesGameRecord, SeriesResultView, SharedCounterState, SharedMatchHistoryReplayResponse, SmuggleActionView, SmuggleKind, TargetGroupPurpose, TargetSelectionGroup, TargetSelectionPlanView, TriggerWindowView, TurnPassSource, TwinSunsCounter, TwinSunsCountersView, UndoCancelReason, UndoRequestReason, UniquenessFilter, UnitAbilitySuppressionView, UnitDefeatCause, UnitExtremum, UnitFilter, UnitStateView, UpgradeStateView, } from './common.js';
@@ -1 +1 @@
1
- export type { AiSeatStatusPayload, AiStatusPayload, AiTrilogyFormatMode, MatchConnectionRole, Seat, WelcomePayload, } from './common.js';
1
+ export type { AiDifficulty, AiSeatStatusPayload, AiStatusPayload, AiTrilogyFormatMode, MatchConnectionRole, Seat, WelcomePayload, } from './common.js';
@@ -13,4 +13,4 @@
13
13
  *
14
14
  * @see https://simulator-sdk.my-swu.com/guide/versioning
15
15
  */
16
- export declare const schemaVersion: "e4a6c8c3043fdb5779d215ad8f673458da5a45bd6d196f0dbd5cc721aa189045";
16
+ export declare const schemaVersion: "0ae978dcaa4b3cbec5778eb3174a0126f642b3d441a76d97dc48044416d4ae06";
@@ -13,4 +13,4 @@
13
13
  *
14
14
  * @see https://simulator-sdk.my-swu.com/guide/versioning
15
15
  */
16
- export const schemaVersion = "e4a6c8c3043fdb5779d215ad8f673458da5a45bd6d196f0dbd5cc721aa189045";
16
+ export const schemaVersion = "0ae978dcaa4b3cbec5778eb3174a0126f642b3d441a76d97dc48044416d4ae06";
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ export { canDeployAnyLeader, flattenTargetGroups, getDeployableLeaderIndices, ge
7
7
  export type { TargetingActionView } from './actionable.js';
8
8
  export type { SimulatorClient, SimulatorClientOptions } from './client.js';
9
9
  export type { AbandonMatchRequest, AbandonMatchResponse, ApiErrorResponse, AiStatusPayload, CardsResponse, CardCatalogRefreshResponse, ClientMessage, CreateLimitedEventRequest, CreateMetaWindowRequest, CreateMatchRequest, ErrorPayload, FormatEventResponse, FormatEventRequest, GameCommand, GameEvent, GameState, GetMatchResponse, HealthResponse, JoinLimitedEventRequest, JoinMatchRequest, LeaveMatchRequest, LeaveMatchResponse, LimitedEventAccessResponse, LimitedEventCommandRequest, LimitedEventPreflightResponse, LimitedEventResponse, ListActiveAiMatchesRequest, ListActiveAiMatchesResponse, MatchAccessResponse, MatchChatLookupResponse, MatchConnectionRole, MatchHistoryDeckStatsRequest, MatchHistoryDeckStatsResponse, MatchHistoryListRequest, MatchHistoryListResponse, MatchHistoryReplayRequest, MatchHistoryReplayResponse, MatchHistoryRestoreRequest, MatchRecoveryRequest, MatchRecoveryResponse, RestoreHistoryResponse, MatchSavePayload, MatchSpectatorAccessResponse, MetaWindow, MetaWindowsResponse, ResolveCardIdsRequest, ResolveCardIdsResponse, RankedAdminStatus, RankedLeaderboardEntry, RankedLeaderboardQuery, RankedLeaderboardResponse, RankedMatchmakingView, RankedProfileRequest, RankedProfileResponse, RankedQueue, RematchMatchRequest, RematchMatchResponse, RestoreMatchSaveRequest, RestoreMatchSaveResponse, SaveMatchRequest, ServerMessage, SetAiPausedRequest, SetRankedAdmissionRequest, SetSimulatorMaintenanceRequest, SimulatorAdminStatusResponse, SimulatorAvailabilityResponse, SpectateMatchRequest, SubmitMatchDeckRequest, SubmitMatchDeckResponse, UndoMatchRequest, UndoMatchResponse, UndoRespondMatchRequest, WelcomePayload, } from './generated/index.js';
10
+ export type { PlaygroundCommand, PlaygroundDamageTarget, PlaygroundDefeatTarget, } from './generated/types/game-command.js';
10
11
  export type { UndoCancelReason } from './generated/types/game-event.js';
11
12
  export type { LimitedSideboardPoolView } from './generated/types/game-state.js';
12
13
  export type { HistoryIdentityInput, HistorySection, HistoryStatus, } from './generated/types/match-history-list-request.js';
@@ -37,6 +37,7 @@ export declare class MatchSessionController implements MatchSession {
37
37
  get errorMessages(): readonly string[];
38
38
  get matchId(): string | undefined;
39
39
  get reconnectState(): MatchSessionReconnectState;
40
+ get snapshotRevision(): number;
40
41
  get snapshot(): GameState | undefined;
41
42
  get seat(): MatchSeat | undefined;
42
43
  get state(): MatchSessionState;
@@ -92,6 +92,9 @@ export class MatchSessionController {
92
92
  get reconnectState() {
93
93
  return this.#reconnectState;
94
94
  }
95
+ get snapshotRevision() {
96
+ return this.#connection?.snapshotRevision ?? 0;
97
+ }
95
98
  get snapshot() {
96
99
  return this.#snapshot;
97
100
  }
@@ -45,6 +45,8 @@ export interface MatchSession extends MatchSessionMethods {
45
45
  readonly matchId: string | undefined;
46
46
  /** Automatic reconnect progress after an abnormal socket close. */
47
47
  readonly reconnectState: MatchSessionReconnectState;
48
+ /** Monotonic revision of the latest authoritative match snapshot. */
49
+ readonly snapshotRevision: number;
48
50
  /** Latest authoritative private snapshot for this seat. */
49
51
  readonly snapshot: GameState | undefined;
50
52
  /** Seat controlled by this session when known. */
@@ -1,4 +1,4 @@
1
- import type { AdminMatchDebugBundle, AdminMatchListResponse, AdminMatchReplayResponse, SimulatorReportListResponse, SimulatorReportResponse, CardCatalogRefreshResponse, CreateMetaWindowRequest, MatchChatLookupResponse, MetaWindowsResponse, RankedLeaderboardQuery, RankedLeaderboardResponse, RankedProfileRequest, RankedProfileResponse, SetRankedAdmissionRequest, SetSimulatorMaintenanceRequest, SimulatorAdminStatusResponse } from '../generated/index.js';
1
+ import type { AdminMatchDebugBundle, AdminMatchListResponse, AdminMatchReplayResponse, CreateMatchHistoryReplayShareResponse, SimulatorReportListResponse, SimulatorReportResponse, CardCatalogRefreshResponse, CreateMetaWindowRequest, MatchChatLookupResponse, MetaWindowsResponse, RankedLeaderboardQuery, RankedLeaderboardResponse, RankedProfileRequest, RankedProfileResponse, SetRankedAdmissionRequest, SetSimulatorMaintenanceRequest, SimulatorAdminStatusResponse } from '../generated/index.js';
2
2
  import type { SimulatorRequestOptions } from '../http/options.js';
3
3
  import type { EngineHttpRequester } from '../http/request.js';
4
4
  /**
@@ -36,6 +36,8 @@ export interface AdminResource {
36
36
  getGameDebugBundle(auth: SimulatorAdminAuth, historyId: string, options?: SimulatorRequestOptions): Promise<AdminMatchDebugBundle>;
37
37
  /** Returns a completed replay archive for one match. */
38
38
  getGameReplay(auth: SimulatorAdminAuth, historyId: string, options?: SimulatorRequestOptions): Promise<AdminMatchReplayResponse>;
39
+ /** Creates or returns the hidden-information replay capability for one completed game. */
40
+ createGameReplayShare(auth: SimulatorAdminAuth, historyId: string, options?: SimulatorRequestOptions): Promise<CreateMatchHistoryReplayShareResponse>;
39
41
  /** Lists safe metadata for retained simulator diagnostic reports. */
40
42
  listSimulatorReports(auth: SimulatorAdminAuth, query?: SimulatorReportListOptions, options?: SimulatorRequestOptions): Promise<SimulatorReportListResponse>;
41
43
  /** Returns one full sanitized simulator support bundle. */
@@ -7,6 +7,7 @@ export function createAdminResource(requester) {
7
7
  listGames: (auth, query, options) => requester.request('admin-match-list-response', adminGamesPath(query ?? {}), { headers: authHeaders(auth) }, options),
8
8
  getGameDebugBundle: (auth, historyId, options) => requester.request('admin-match-debug-bundle', `/api/admin/games/${encodeURIComponent(historyId)}/debug`, { headers: authHeaders(auth) }, options),
9
9
  getGameReplay: (auth, historyId, options) => requester.request('admin-match-replay-response', `/api/admin/games/${encodeURIComponent(historyId)}/replay`, { headers: authHeaders(auth) }, options),
10
+ createGameReplayShare: (auth, historyId, options) => requester.request('create-match-history-replay-share-response', `/api/admin/games/${encodeURIComponent(historyId)}/replay-shares`, { headers: authHeaders(auth), method: 'POST' }, options),
10
11
  listSimulatorReports: (auth, query, options) => requester.request('simulator-report-list-response', simulatorReportsPath(query ?? {}), { headers: authHeaders(auth) }, options),
11
12
  getSimulatorReport: (auth, reportId, options) => requester.request('simulator-report-response', `/api/admin/reports/${encodeURIComponent(reportId)}`, { headers: authHeaders(auth) }, options),
12
13
  refreshCardCatalog: (auth, options) => requester.request('card-catalog-refresh-response', '/api/admin/card-catalog/refresh', { headers: authHeaders(auth), method: 'POST' }, options),
@@ -1,4 +1,4 @@
1
- import type { AiStatusPayload, CreateMatchRequest, GameState, JoinMatchRequest, ListActiveAiMatchesRequest, ListActiveAiMatchesResponse, MatchAccessRecoveryRequest, MatchAccessRecoveryResponse, MatchAccessResponse, MatchSpectatorAccessResponse, MatchSavePayload, RematchMatchResponse, RestoreMatchSaveResponse, SpectateMatchRequest, SubmitMatchDeckRequest } from '../generated/index.js';
1
+ import type { AiStatusPayload, CreatePlaygroundShareResponse, CreateMatchRequest, GameState, JoinMatchRequest, ListActiveAiMatchesRequest, ListActiveAiMatchesResponse, MatchAccessRecoveryRequest, MatchAccessRecoveryResponse, MatchAccessResponse, MatchSpectatorAccessResponse, MatchSavePayload, PlaygroundExportPayload, RematchMatchResponse, RestoreMatchSaveResponse, SetPlaygroundAiSeatRequest, SpectateMatchRequest, SubmitMatchDeckRequest } from '../generated/index.js';
2
2
  import type { FormatEventCommand } from '../generated/types/format-event-request.js';
3
3
  import type { SimulatorRequestOptions } from '../http/options.js';
4
4
  /**
@@ -402,6 +402,16 @@ export interface MatchesResource {
402
402
  * @see https://simulator-sdk.my-swu.com/guide/driving-gameplay
403
403
  */
404
404
  setAiPaused(access: MatchAccessInput, paused: boolean, options?: SimulatorRequestOptions): Promise<AiStatusPayload>;
405
+ /** Attaches, updates, pauses, or removes one AI controller in a Playground. */
406
+ setPlaygroundAiSeat(access: MatchAccessInput, request: Omit<SetPlaygroundAiSeatRequest, 'seatToken'>, options?: SimulatorRequestOptions): Promise<AiStatusPayload>;
407
+ /** Creates a portable Playground file with a dedicated restore capability. */
408
+ exportPlayground(access: MatchAccessInput, options?: SimulatorRequestOptions): Promise<PlaygroundExportPayload>;
409
+ /** Restores a portable Playground file without source-match credentials. */
410
+ restorePlaygroundExport(payload: PlaygroundExportPayload, options?: SimulatorRequestOptions): Promise<RestoreMatchSaveResponse>;
411
+ /** Creates one 30-day URL share capability for a Playground. */
412
+ createPlaygroundShare(access: MatchAccessInput, options?: SimulatorRequestOptions): Promise<CreatePlaygroundShareResponse>;
413
+ /** Restores one unexpired Playground URL share into a fresh match. */
414
+ restorePlaygroundShare(shareToken: string, options?: SimulatorRequestOptions): Promise<RestoreMatchSaveResponse>;
405
415
  /**
406
416
  * Captures a full state snapshot of an authorized, finished match.
407
417
  *
@@ -96,6 +96,38 @@ export function createMatchesResource(options) {
96
96
  headers: jsonHeaders(),
97
97
  method: 'POST',
98
98
  }, options),
99
+ setPlaygroundAiSeat: (access, request, options) => requester.request('set-ai-paused-response', `/api/matches/${matchIdFrom(access)}/playground/ai`, {
100
+ body: jsonBody(requester.validate('set-playground-ai-seat-request', {
101
+ ...request,
102
+ seatToken: access.seatToken,
103
+ })),
104
+ headers: jsonHeaders(),
105
+ method: 'POST',
106
+ }, options),
107
+ exportPlayground: (access, options) => requester.request('playground-export-payload', `/api/matches/${matchIdFrom(access)}/playground/export`, {
108
+ body: jsonBody(requester.validate('save-match-request', { seatToken: access.seatToken })),
109
+ headers: jsonHeaders(),
110
+ method: 'POST',
111
+ }, options),
112
+ restorePlaygroundExport: (payload, options) => {
113
+ const validated = validatePlaygroundExport(requester.validate('playground-export-payload', payload));
114
+ return requester.request('restore-match-save-response', '/api/matches/restore', {
115
+ body: jsonBody(requester.validate('restore-match-save-request', {
116
+ save: validated.save,
117
+ seatToken: validated.restoreToken,
118
+ })),
119
+ headers: jsonHeaders(),
120
+ method: 'POST',
121
+ }, options);
122
+ },
123
+ createPlaygroundShare: (access, options) => requester.request('create-playground-share-response', `/api/matches/${matchIdFrom(access)}/playground-shares`, {
124
+ body: jsonBody(requester.validate('save-match-request', { seatToken: access.seatToken })),
125
+ headers: jsonHeaders(),
126
+ method: 'POST',
127
+ }, options),
128
+ restorePlaygroundShare: (shareToken, options) => requester.request('restore-match-save-response', `/api/playground-shares/${encodeURIComponent(shareToken)}/restore`, {
129
+ method: 'POST',
130
+ }, options),
99
131
  save: (access, options) => requester.request('match-save-payload', `/api/matches/${matchIdFrom(access)}/save`, {
100
132
  body: jsonBody(requester.validate('save-match-request', { seatToken: access.seatToken })),
101
133
  headers: jsonHeaders(),
@@ -111,6 +143,23 @@ export function createMatchesResource(options) {
111
143
  }, options),
112
144
  };
113
145
  }
146
+ /** Enforces portable Playground markers even when optional SDK validation is disabled. */
147
+ function validatePlaygroundExport(payload) {
148
+ if (!payload || typeof payload !== 'object')
149
+ throw new TypeError('Playground export must be an object');
150
+ const candidate = payload;
151
+ if (candidate.version !== 1)
152
+ throw new TypeError('Playground export version is not supported');
153
+ if (typeof candidate.restoreToken !== 'string' || !candidate.restoreToken)
154
+ throw new TypeError('Playground export restore capability is missing');
155
+ const save = candidate.save;
156
+ if (!save || typeof save !== 'object')
157
+ throw new TypeError('Playground export save is missing');
158
+ const state = save.state;
159
+ if (!state || typeof state !== 'object' || state.playground !== true)
160
+ throw new TypeError('Playground export does not contain a Playground match');
161
+ return payload;
162
+ }
114
163
  /**
115
164
  * Reads a match id from either a public id string or match reference object.
116
165
  */
@@ -1,4 +1,4 @@
1
- import type { AdminMatchDebugBundle, AdminMatchListResponse, AdminMatchReplayResponse, SimulatorReportListResponse, SimulatorReportResponse, CloseTournamentRoomRequest, AbandonMatchRequest, AbandonMatchResponse, AddLobbyAiPlayerRequest, ApiErrorResponse, CardCatalogRefreshResponse, CardsResponse, ClientMessage, CreateMatchHistoryReplayShareRequest, CreateMatchHistoryReplayShareResponse, CreateLimitedEventRequest, CreateLobbyRequest, CreateMetaWindowRequest, CreateMatchRequest, CreateTournamentRoomRequest, CreateTournamentTableRequest, ErrorPayload, FormatEventRequest, FormatEventResponse, GameCommand, GameEvent, GameState, GetMatchResponse, HealthResponse, JoinLimitedEventRequest, JoinLobbyRequest, JoinMatchRequest, JoinTournamentRoomRequest, JoinTournamentTableRequest, KickLobbyPlayerRequest, KickLobbySpectatorRequest, LeaveLobbyRequest, LeaveMatchRequest, LeaveMatchResponse, LeaveTournamentRoomRequest, LimitedEventAccessResponse, LimitedEventCommandRequest, LimitedEventPreflightResponse, LimitedEventResponse, LobbyAccessResponse, LobbyChatRequest, LobbyChatResponse, LobbyListResponse, LobbyListServerMessage, LobbyMatchmakingDecisionRequest, PrepareLobbyLimitedAiDecksRequest, LobbyResponse, LobbyServerMessage, LobbySyncRequest, ListActiveAiMatchesRequest, ListActiveAiMatchesResponse, MatchAccessRecoveryRequest, MatchAccessRecoveryResponse, MatchAccessResponse, MatchChatLookupResponse, MatchConnectionRole, MatchHistoryDeckStatsRequest, MatchHistoryDeckStatsResponse, MatchHistoryEntry, MatchHistoryListRequest, MatchHistoryListResponse, MatchHistoryReplayRequest, MatchHistoryReplayResponse, MatchHistoryRestoreRequest, MatchRecoveryRequest, MatchRecoveryResponse, RestoreHistoryResponse, MatchSavePayload, MatchSpectatorAccessResponse, MetaWindow, MetaWindowsResponse, LobbyMatchmakingRequest, ResolveCardIdsRequest, ResolveCardIdsResponse, RankedAdminStatus, RankedLeaderboardEntry, RankedLeaderboardQuery, RankedLeaderboardResponse, RankedMatchmakingView, RankedProfileRequest, RankedProfileResponse, RankedQueue, RematchMatchRequest, RematchMatchResponse, SaveMatchRequest, ReturnLobbyMatchRequest, ReturnTournamentMatchRequest, RestoreMatchSaveRequest, RestoreMatchSaveResponse, ServerMessage, AiStatusPayload, SetRankedAdmissionRequest, SetSimulatorMaintenanceRequest, SetAiPausedRequest, SharedMatchHistoryReplayResponse, SimulatorAdminStatusResponse, SimulatorAvailabilityResponse, SpectateLobbyRequest, SpectateMatchRequest, StartLobbyLimitedMatchRequest, StartLobbyRequest, StartTournamentEventRequest, SubmitLobbyLimitedDeckRequest, SubmitMatchDeckRequest, SubmitMatchDeckResponse, SubmitTournamentDeckRequest, TournamentEventCommandRequest, TournamentRoomAccessResponse, TournamentRoomChatRequest, TournamentRoomChatResponse, TournamentRoomListResponse, TournamentRoomResponse, TournamentRoomServerMessage, TournamentRoomSyncRequest, UndoMatchRequest, UndoMatchResponse, UndoRespondMatchRequest, UpdateLobbyAiPlayerRequest, UpdateLobbyPlayerRequest, UpdateLobbySettingsRequest, UpdateTournamentRoomPlayerRequest, UpdateTournamentRoomSettingsRequest, WelcomePayload } from './generated/index.js';
1
+ import type { AdminMatchDebugBundle, AdminMatchListResponse, AdminMatchReplayResponse, SimulatorReportListResponse, SimulatorReportResponse, CloseTournamentRoomRequest, AbandonMatchRequest, AbandonMatchResponse, AddLobbyAiPlayerRequest, ApiErrorResponse, CardCatalogRefreshResponse, CardsResponse, ClientMessage, CreateMatchHistoryReplayShareRequest, CreateMatchHistoryReplayShareResponse, CreateLimitedEventRequest, CreateLobbyRequest, CreateMetaWindowRequest, CreateMatchRequest, CreatePlaygroundShareResponse, CreateTournamentRoomRequest, CreateTournamentTableRequest, ErrorPayload, FormatEventRequest, FormatEventResponse, GameCommand, GameEvent, GameState, GetMatchResponse, HealthResponse, JoinLimitedEventRequest, JoinLobbyRequest, JoinMatchRequest, JoinTournamentRoomRequest, JoinTournamentTableRequest, KickLobbyPlayerRequest, KickLobbySpectatorRequest, LeaveLobbyRequest, LeaveMatchRequest, LeaveMatchResponse, LeaveTournamentRoomRequest, LimitedEventAccessResponse, LimitedEventCommandRequest, LimitedEventPreflightResponse, LimitedEventResponse, LobbyAccessResponse, LobbyChatRequest, LobbyChatResponse, LobbyListResponse, LobbyListServerMessage, LobbyMatchmakingDecisionRequest, PrepareLobbyLimitedAiDecksRequest, LobbyResponse, LobbyServerMessage, LobbySyncRequest, ListActiveAiMatchesRequest, ListActiveAiMatchesResponse, MatchAccessRecoveryRequest, MatchAccessRecoveryResponse, MatchAccessResponse, MatchChatLookupResponse, MatchConnectionRole, MatchHistoryDeckStatsRequest, MatchHistoryDeckStatsResponse, MatchHistoryEntry, MatchHistoryListRequest, MatchHistoryListResponse, MatchHistoryReplayRequest, MatchHistoryReplayResponse, MatchHistoryRestoreRequest, MatchRecoveryRequest, MatchRecoveryResponse, RestoreHistoryResponse, MatchSavePayload, PlaygroundExportPayload, MatchSpectatorAccessResponse, MetaWindow, MetaWindowsResponse, LobbyMatchmakingRequest, ResolveCardIdsRequest, ResolveCardIdsResponse, RankedAdminStatus, RankedLeaderboardEntry, RankedLeaderboardQuery, RankedLeaderboardResponse, RankedMatchmakingView, RankedProfileRequest, RankedProfileResponse, RankedQueue, RematchMatchRequest, RematchMatchResponse, SaveMatchRequest, ReturnLobbyMatchRequest, ReturnTournamentMatchRequest, RestoreMatchSaveRequest, RestoreMatchSaveResponse, ServerMessage, AiStatusPayload, SetRankedAdmissionRequest, SetSimulatorMaintenanceRequest, SetAiPausedRequest, SetPlaygroundAiSeatRequest, SharedMatchHistoryReplayResponse, SimulatorAdminStatusResponse, SimulatorAvailabilityResponse, SpectateLobbyRequest, SpectateMatchRequest, StartLobbyLimitedMatchRequest, StartLobbyRequest, StartTournamentEventRequest, SubmitLobbyLimitedDeckRequest, SubmitMatchDeckRequest, SubmitMatchDeckResponse, SubmitTournamentDeckRequest, TournamentEventCommandRequest, TournamentRoomAccessResponse, TournamentRoomChatRequest, TournamentRoomChatResponse, TournamentRoomListResponse, TournamentRoomResponse, TournamentRoomServerMessage, TournamentRoomSyncRequest, UndoMatchRequest, UndoMatchResponse, UndoRespondMatchRequest, UpdateLobbyAiPlayerRequest, UpdateLobbyPlayerRequest, UpdateLobbySettingsRequest, UpdateTournamentRoomPlayerRequest, UpdateTournamentRoomSettingsRequest, WelcomePayload } from './generated/index.js';
2
2
  import type { SchemaValidator } from './validators/validator.js';
3
3
  /**
4
4
  * Exact schema-to-type map generated from Rust public wire contracts.
@@ -106,6 +106,9 @@ export interface SchemaTypeMap {
106
106
  'server-message': ServerMessage;
107
107
  'set-ai-paused-request': SetAiPausedRequest;
108
108
  'set-ai-paused-response': AiStatusPayload;
109
+ 'set-playground-ai-seat-request': SetPlaygroundAiSeatRequest;
110
+ 'playground-export-payload': PlaygroundExportPayload;
111
+ 'create-playground-share-response': CreatePlaygroundShareResponse;
109
112
  'set-ranked-admission-request': SetRankedAdmissionRequest;
110
113
  'set-simulator-maintenance-request': SetSimulatorMaintenanceRequest;
111
114
  'simulator-admin-status-response': SimulatorAdminStatusResponse;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@my-swu/simulator-client",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Typed TypeScript client for the swu-simulator HTTP and WebSocket engine.",
5
5
  "keywords": [
6
6
  "swu",