@remix-gg/sdk 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -42,52 +42,19 @@ type GameInfo = {
42
42
  id: string;
43
43
  gameState: GameState;
44
44
  } | null;
45
- levelBased?: {
46
- levelCount: number;
47
- /**
48
- * Score-derived level progression for this player. Platform-owned and kept
49
- * fully separate from `gameState` — never read progression out of gameState.
50
- */
51
- progress: LevelProgressState;
52
- };
53
- };
54
- /** Score-derived, platform-owned progression for a level-based game. */
55
- type LevelProgressState = {
56
- currentLevelIndex: number;
57
- highestUnlockedLevel: number;
58
- levelStars: Record<string, LevelStars>;
59
45
  };
60
46
  type ReadyEvent = {
61
47
  type: 'ready';
62
- data: {
63
- instanceId: string;
64
- } | undefined;
48
+ data: undefined;
65
49
  };
66
50
  type PlayAgainEvent = {
67
51
  type: 'play_again';
68
- data?: {
69
- levelIndex?: number;
70
- };
71
- };
72
- type LevelStars = 1 | 2 | 3;
73
- type LevelOutcome = 'level_complete' | 'level_failed' | 'all_complete';
74
- /**
75
- * One level attempt reported with game_over. Games report only what happened
76
- * in the attempt; the host owns and derives all cumulative progression
77
- * (star maps, unlock state) — see `LevelProgressState` for the host→game snapshot.
78
- */
79
- type LevelAttempt = {
80
- /** 1-based index of the level that was just played. */
81
- levelIndex: number;
82
- /** Stars earned this attempt. Omit for star-less games; a completion counts as 1. */
83
- stars?: LevelStars;
84
- outcome: LevelOutcome;
52
+ data: undefined;
85
53
  };
86
54
  type SinglePlayerGameOverEvent = {
87
55
  type: 'game_over';
88
56
  data: {
89
57
  score: number;
90
- levelAttempt?: LevelAttempt;
91
58
  };
92
59
  };
93
60
  type MultiplayerGameOverEvent = {
@@ -120,7 +87,6 @@ type GameErrorEvent = {
120
87
  lineno?: number;
121
88
  colno?: number;
122
89
  error?: Error;
123
- stack?: string;
124
90
  };
125
91
  };
126
92
  type GameInfoEvent = {
@@ -173,56 +139,28 @@ type GameEventMessage<T extends GameEvent['type']> = {
173
139
  type: T;
174
140
  }>;
175
141
  };
176
- /**
177
- * Build a game_event envelope for sending over postMessage. Hosts and the SDK
178
- * share this so the wire format is defined in one place.
179
- */
180
- declare const createGameEventMessage: <T extends GameEvent["type"]>(type: T, data: Extract<GameEvent, {
181
- type: T;
182
- }>["data"]) => GameEventMessage<T>;
183
- /**
184
- * Parse an unknown postMessage payload into a GameEvent, or null when the
185
- * payload is not a well-formed game_event envelope.
186
- */
187
- declare const parseGameEventMessage: (value: unknown) => GameEvent | null;
188
142
  /**
189
143
  * Messages from the game host to the game client
190
144
  */
191
145
  type IncomingGameEvent = GameEventMessage<'play_again' | 'toggle_mute' | 'game_info' | 'game_state_updated' | 'purchase_complete'>;
192
146
  type OutgoingGameEvent = GameEventMessage<'game_over' | 'ready' | 'haptic_feedback' | 'error' | 'save_game_state' | 'refute_game_state' | 'multiplayer_game_over' | 'multiplayer_save_game_state' | 'purchase'>;
193
- type IncomingGameEventType = IncomingGameEvent['event']['type'];
194
- type IncomingGameEventData<T extends IncomingGameEventType> = Extract<GameEvent, {
195
- type: T;
196
- }>['data'];
147
+ type EventCallback = (data: unknown) => void;
197
148
  declare class RemixSDK {
198
149
  private isClient;
199
150
  private target;
200
151
  private eventListeners;
201
- private readyPromise;
202
152
  private readyPromiseResolve;
203
- private purchasePromiseResolvers;
204
- private readyResendTimer;
205
- private readonly instanceId;
153
+ private purchasePromiseResolve;
206
154
  private _gameInfo?;
207
155
  private _gameState?;
208
- private _levelStars;
209
156
  constructor();
210
- private scheduleReadyResend;
211
- private cancelReadyResend;
212
- on<T extends IncomingGameEventType>(eventType: T, callback: (data: IncomingGameEventData<T>) => void): () => void;
213
- off<T extends IncomingGameEventType>(eventType: T, callback: (data: IncomingGameEventData<T>) => void): void;
214
- /**
215
- * Listen for the host starting play: a replay after game over, or — for level
216
- * games — a host-directed level via `data.levelIndex` (Studio continue/jump or
217
- * the production next-level button). `data` may be omitted for a plain restart.
218
- */
219
- onPlay(callback: (data?: PlayAgainEvent['data']) => void): () => void;
220
- /** @deprecated Use {@link onPlay}. Retained for backward compatibility. */
221
- onPlayAgain(callback: (data?: PlayAgainEvent['data']) => void): () => void;
222
- onToggleMute(callback: (data: ToggleMuteEvent['data']) => void): () => void;
223
- onGameStateUpdated(callback: (data: GameStateUpdatedEvent['data']) => void): () => void;
224
- onGameInfo(callback: (data: GameInfoEvent['data']) => void): () => void;
225
- onPurchaseComplete(callback: (data: PurchaseCompleteEvent['data']) => void): () => void;
157
+ on(eventType: IncomingGameEvent['event']['type'], callback: EventCallback): void;
158
+ off(eventType: IncomingGameEvent['event']['type'], callback: EventCallback): void;
159
+ onPlayAgain(callback: () => void): void;
160
+ onToggleMute(callback: (data: ToggleMuteEvent['data']) => void): void;
161
+ onGameStateUpdated(callback: (data: GameStateUpdatedEvent['data']) => void): void;
162
+ onGameInfo(callback: (data: GameInfoEvent['data']) => void): void;
163
+ onPurchaseComplete(callback: (data: PurchaseCompleteEvent['data']) => void): void;
226
164
  setTarget(target: Window): void;
227
165
  get purchasedItems(): string[];
228
166
  get inventory(): InventoryItem[];
@@ -232,18 +170,6 @@ declare class RemixSDK {
232
170
  get players(): Player[] | undefined;
233
171
  get player(): Player | undefined;
234
172
  get isReady(): boolean;
235
- /** True when the host configured this game with a fixed level count. */
236
- get isLevelBased(): boolean;
237
- /** Total levels for level-based games (from host metadata). */
238
- get levelCount(): number | undefined;
239
- /** 1-based level index from score-derived progression, defaulting to 1. */
240
- get currentLevelIndex(): number;
241
- /** Best stars earned per level from score-derived progression. Keys are 1-based level indices. */
242
- get levelStars(): Record<string, LevelStars>;
243
- /** Highest unlocked level from score-derived progression, defaulting to 1. */
244
- get highestUnlockedLevel(): number;
245
- /** Sum of best stars across all completed levels. */
246
- get totalStars(): number;
247
173
  ready: () => Promise<GameInfo>;
248
174
  purchase: (data: PurchaseEvent["data"]) => Promise<PurchaseCompleteEvent["data"]>;
249
175
  reportError: (data: GameErrorEvent["data"]) => void;
@@ -281,4 +207,4 @@ declare class RemixSDK {
281
207
  }
282
208
  declare const sdk: RemixSDK;
283
209
 
284
- export { type GameErrorEvent, type GameEvent, type GameEventMessage, type GameInfo, type GameInfoEvent, type GameState, type GameStateUpdatedEvent, type HapticFeedbackEvent, type HapticFeedbackType, type IncomingGameEvent, type IncomingGameEventData, type IncomingGameEventType, type InventoryItem, type LevelAttempt, type LevelOutcome, type LevelProgressState, type LevelStars, type MultiplayerGameOverEvent, type MultiplayerSaveGameStateEvent, type OutgoingGameEvent, type PlayAgainEvent, type Player, type PurchaseCompleteEvent, type PurchaseEvent, type ReadyEvent, type RefuteGameStateEvent, RemixSDK, type SafeAreaInset, type SaveGameStateEvent, type ShopItem, type SinglePlayerGameOverEvent, type ToggleMuteEvent, type ViewContext, ZERO_SAFE_AREA_INSET, createGameEventMessage, parseGameEventMessage, sdk };
210
+ export { type GameErrorEvent, type GameEvent, type GameEventMessage, type GameInfo, type GameInfoEvent, type GameState, type GameStateUpdatedEvent, type HapticFeedbackEvent, type HapticFeedbackType, type IncomingGameEvent, type InventoryItem, type MultiplayerGameOverEvent, type MultiplayerSaveGameStateEvent, type OutgoingGameEvent, type PlayAgainEvent, type Player, type PurchaseCompleteEvent, type PurchaseEvent, type ReadyEvent, type RefuteGameStateEvent, RemixSDK, type SafeAreaInset, type SaveGameStateEvent, type ShopItem, type SinglePlayerGameOverEvent, type ToggleMuteEvent, type ViewContext, ZERO_SAFE_AREA_INSET, sdk };