@thegeem/protocol 0.1.35 → 0.1.36

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.cts CHANGED
@@ -738,6 +738,25 @@ interface CategoryView {
738
738
  /** Category's brand color (hex, e.g. '#E8473F') for board coloring; absent if the category has none. */
739
739
  color?: string;
740
740
  }
741
+ /**
742
+ * A content pack — the grouping the category strip renders as a row (geem-server#76).
743
+ *
744
+ * **The ARRAY ORDER is the pack order.** That is the point of this type: pack order previously had no
745
+ * home on the wire, so all four clients derived it by first-seen from `categories[]` (Android's
746
+ * `onlineGroupedPacks`, iOS's `order: [String]`, and web/TV their own). Four derivations of one fact,
747
+ * and when the server's own category order turned out to be non-deterministic the strip reshuffled
748
+ * between visits (gs#74) with nothing on the wire to pin it. One ordered array replaces all four.
749
+ *
750
+ * Deliberately NO `sortOrder` field: an ordered array already carries the order, and a positional index
751
+ * beside it would be the same fact stored twice — which is exactly the drift argument that made
752
+ * `has_image` a boolean rather than a filename. Position cannot disagree with itself.
753
+ */
754
+ interface PackView {
755
+ id: string;
756
+ name: string;
757
+ /** Does this pack have cover art at `/assets/cat/pack-<id>.png`? Absent until the admin field ships. */
758
+ hasImage?: boolean;
759
+ }
741
760
  type GameStatus = 'setup' | 'categorySelection' | 'inProgress' | 'completed';
742
761
  type GameplayFlow = 'classic' | 'openJudged' | 'noHost' | 'buzzer';
743
762
  type BuzzerGameMode = 'off' | 'solo' | 'race' | 'controller';
@@ -968,6 +987,7 @@ type ServerMsg = {
968
987
  hostPinned?: boolean;
969
988
  players: LobbyPlayer[];
970
989
  categories: CategoryView[];
990
+ packs?: PackView[];
971
991
  selectedCategoryIds: string[];
972
992
  teams: TeamSlotView[];
973
993
  hostActivity: 'configuring' | 'idle';
@@ -1026,4 +1046,4 @@ type ServerMsg = {
1026
1046
  message: string;
1027
1047
  };
1028
1048
 
1029
- export { type AvatarView, type BuzzerGameMode, CHARACTER_IDS, type CategoryView, type CharacterId, ClientMsg, type DamaMoveView, type DamaPieceView, type DamaStateView, EMOTE_IDS, type Effect, type EmoteId, type ErsimhaStateView, GAMES, GAME_IDS, type GameId, type GameInfo, type GameStateView, type GameStatus, type GameplayFlow, type HelpName, LIMITS, type LobbyPlayer, MIN_SUPPORTED_PV, MODES, MODE_IDS, type ModeId, type ModeInfo, PROTOCOL_VERSION, type QuestionView, ROOM_ALPHABET, type RosterEntry, type ServerMsg, type SoundName, type StrokePointView, type TeamSlotView, type TeamView, type YouContext, gameIdForPv, gamesForPv, modesForGame };
1049
+ export { type AvatarView, type BuzzerGameMode, CHARACTER_IDS, type CategoryView, type CharacterId, ClientMsg, type DamaMoveView, type DamaPieceView, type DamaStateView, EMOTE_IDS, type Effect, type EmoteId, type ErsimhaStateView, GAMES, GAME_IDS, type GameId, type GameInfo, type GameStateView, type GameStatus, type GameplayFlow, type HelpName, LIMITS, type LobbyPlayer, MIN_SUPPORTED_PV, MODES, MODE_IDS, type ModeId, type ModeInfo, PROTOCOL_VERSION, type PackView, type QuestionView, ROOM_ALPHABET, type RosterEntry, type ServerMsg, type SoundName, type StrokePointView, type TeamSlotView, type TeamView, type YouContext, gameIdForPv, gamesForPv, modesForGame };
package/dist/index.d.ts CHANGED
@@ -738,6 +738,25 @@ interface CategoryView {
738
738
  /** Category's brand color (hex, e.g. '#E8473F') for board coloring; absent if the category has none. */
739
739
  color?: string;
740
740
  }
741
+ /**
742
+ * A content pack — the grouping the category strip renders as a row (geem-server#76).
743
+ *
744
+ * **The ARRAY ORDER is the pack order.** That is the point of this type: pack order previously had no
745
+ * home on the wire, so all four clients derived it by first-seen from `categories[]` (Android's
746
+ * `onlineGroupedPacks`, iOS's `order: [String]`, and web/TV their own). Four derivations of one fact,
747
+ * and when the server's own category order turned out to be non-deterministic the strip reshuffled
748
+ * between visits (gs#74) with nothing on the wire to pin it. One ordered array replaces all four.
749
+ *
750
+ * Deliberately NO `sortOrder` field: an ordered array already carries the order, and a positional index
751
+ * beside it would be the same fact stored twice — which is exactly the drift argument that made
752
+ * `has_image` a boolean rather than a filename. Position cannot disagree with itself.
753
+ */
754
+ interface PackView {
755
+ id: string;
756
+ name: string;
757
+ /** Does this pack have cover art at `/assets/cat/pack-<id>.png`? Absent until the admin field ships. */
758
+ hasImage?: boolean;
759
+ }
741
760
  type GameStatus = 'setup' | 'categorySelection' | 'inProgress' | 'completed';
742
761
  type GameplayFlow = 'classic' | 'openJudged' | 'noHost' | 'buzzer';
743
762
  type BuzzerGameMode = 'off' | 'solo' | 'race' | 'controller';
@@ -968,6 +987,7 @@ type ServerMsg = {
968
987
  hostPinned?: boolean;
969
988
  players: LobbyPlayer[];
970
989
  categories: CategoryView[];
990
+ packs?: PackView[];
971
991
  selectedCategoryIds: string[];
972
992
  teams: TeamSlotView[];
973
993
  hostActivity: 'configuring' | 'idle';
@@ -1026,4 +1046,4 @@ type ServerMsg = {
1026
1046
  message: string;
1027
1047
  };
1028
1048
 
1029
- export { type AvatarView, type BuzzerGameMode, CHARACTER_IDS, type CategoryView, type CharacterId, ClientMsg, type DamaMoveView, type DamaPieceView, type DamaStateView, EMOTE_IDS, type Effect, type EmoteId, type ErsimhaStateView, GAMES, GAME_IDS, type GameId, type GameInfo, type GameStateView, type GameStatus, type GameplayFlow, type HelpName, LIMITS, type LobbyPlayer, MIN_SUPPORTED_PV, MODES, MODE_IDS, type ModeId, type ModeInfo, PROTOCOL_VERSION, type QuestionView, ROOM_ALPHABET, type RosterEntry, type ServerMsg, type SoundName, type StrokePointView, type TeamSlotView, type TeamView, type YouContext, gameIdForPv, gamesForPv, modesForGame };
1049
+ export { type AvatarView, type BuzzerGameMode, CHARACTER_IDS, type CategoryView, type CharacterId, ClientMsg, type DamaMoveView, type DamaPieceView, type DamaStateView, EMOTE_IDS, type Effect, type EmoteId, type ErsimhaStateView, GAMES, GAME_IDS, type GameId, type GameInfo, type GameStateView, type GameStatus, type GameplayFlow, type HelpName, LIMITS, type LobbyPlayer, MIN_SUPPORTED_PV, MODES, MODE_IDS, type ModeId, type ModeInfo, PROTOCOL_VERSION, type PackView, type QuestionView, ROOM_ALPHABET, type RosterEntry, type ServerMsg, type SoundName, type StrokePointView, type TeamSlotView, type TeamView, type YouContext, gameIdForPv, gamesForPv, modesForGame };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thegeem/protocol",
3
- "version": "0.1.35",
3
+ "version": "0.1.36",
4
4
  "description": "Geem's wire protocol — shared zod schemas + TypeScript types for talking to the Geem game server over Socket.IO. The source of truth all clients implement against.",
5
5
  "license": "UNLICENSED",
6
6
  "homepage": "https://geem.tv",