games.cavu.tier-madness.clientFrame

chris.pardy.family

Documentation

Frames a client sends up the games.cavu.tier-madness.subscribeGame socket. Intents only: the server validates each, records it in the player's own PDS (secret move + public commitment), and only then applies it.

main object

Frames a client sends up the games.cavu.tier-madness.subscribeGame socket. Intents only: the server validates each, records it in the player's own PDS (secret move + public commitment), and only then applies it.

Properties

View raw schema
{
  "description": "Frames a client sends up the games.cavu.tier-madness.subscribeGame socket. Intents only: the server validates each, records it in the player's own PDS (secret move + public commitment), and only then applies it.",
  "properties": {
    "frame": {
      "refs": [
        "#auth",
        "#create",
        "#join",
        "#spectate",
        "#leave",
        "#start",
        "#vote",
        "#pickCriteria",
        "#place",
        "#swap",
        "#double",
        "#advance",
        "#kick",
        "#addBot",
        "#setRounds",
        "#skip",
        "#rematch"
      ],
      "type": "union"
    }
  },
  "required": [
    "frame"
  ],
  "type": "object"
}
addBot object

Host only, in the lobby: seat a bot (Jev, TypeSafe's System One model) that plays like anyone else. One per game; remove it with #kick.

This object has no properties defined.

View raw schema
{
  "description": "Host only, in the lobby: seat a bot (Jev, TypeSafe's System One model) that plays like anyone else. One per game; remove it with #kick.",
  "properties": {},
  "type": "object"
}
advance object

Host only: move the reveal along (next card, next screen).

This object has no properties defined.

View raw schema
{
  "description": "Host only: move the reveal along (next card, next screen).",
  "properties": {},
  "type": "object"
}
auth object

Sign in as a player: an atproto service-auth JWT from the player's PDS (com.atproto.server.getServiceAuth) with aud = the game server's DID and lxm = games.cavu.tier-madness.subscribeGame. Spectators don't sign in.

Properties

token string Required

No description available.

maxLength: 4096 bytes
View raw schema
{
  "description": "Sign in as a player: an atproto service-auth JWT from the player's PDS (com.atproto.server.getServiceAuth) with aud = the game server's DID and lxm = games.cavu.tier-madness.subscribeGame. Spectators don't sign in.",
  "properties": {
    "token": {
      "maxLength": 4096,
      "type": "string"
    }
  },
  "required": [
    "token"
  ],
  "type": "object"
}
create object

Signed in: host a new game. The server replies with #created (the join code, and the hash the host puts in its lobby record).

Properties

initials string Required

No description available.

maxLength: 3 bytesminLength: 3 bytes
totalRounds integer Optional

No description available.

minimum: 1maximum: 20
View raw schema
{
  "description": "Signed in: host a new game. The server replies with #created (the join code, and the hash the host puts in its lobby record).",
  "properties": {
    "initials": {
      "maxLength": 3,
      "minLength": 3,
      "type": "string"
    },
    "totalRounds": {
      "maximum": 20,
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "initials"
  ],
  "type": "object"
}
double object

Double down on one placed card, or none.

Properties

item string Optional

No description available.

maxLength: 300 bytes
View raw schema
{
  "description": "Double down on one placed card, or none.",
  "properties": {
    "item": {
      "maxLength": 300,
      "type": "string"
    }
  },
  "type": "object"
}
join object

Signed in: join a game's lobby by its 4-character code (Crockford base32; case and separators don't matter). Attempts are rate limited.

Properties

code string Required

No description available.

maxLength: 9 bytesminLength: 4 bytes
initials string Required

No description available.

maxLength: 3 bytesminLength: 3 bytes
View raw schema
{
  "description": "Signed in: join a game's lobby by its 4-character code (Crockford base32; case and separators don't matter). Attempts are rate limited.",
  "properties": {
    "code": {
      "maxLength": 9,
      "minLength": 4,
      "type": "string"
    },
    "initials": {
      "maxLength": 3,
      "minLength": 3,
      "type": "string"
    }
  },
  "required": [
    "code",
    "initials"
  ],
  "type": "object"
}
kick object

Host only, in the lobby: remove a player.

Properties

did string did Required

A decentralized identifier (DID).

View raw schema
{
  "description": "Host only, in the lobby: remove a player.",
  "properties": {
    "did": {
      "format": "did",
      "type": "string"
    }
  },
  "required": [
    "did"
  ],
  "type": "object"
}
leave object

Leave the lobby (before the game starts).

This object has no properties defined.

View raw schema
{
  "description": "Leave the lobby (before the game starts).",
  "properties": {},
  "type": "object"
}
pickCriteria object

The round's criteria picker chooses one of the offered criteria. Not secret.

Properties

criteria string Required

No description available.

maxLength: 300 bytes
View raw schema
{
  "description": "The round's criteria picker chooses one of the offered criteria. Not secret.",
  "properties": {
    "criteria": {
      "maxLength": 300,
      "type": "string"
    }
  },
  "required": [
    "criteria"
  ],
  "type": "object"
}
place object

Place the card dealt at `index` into a tier. Final once accepted; the next card is dealt.

Properties

index integer Required

No description available.

minimum: 0maximum: 19
View raw schema
{
  "description": "Place the card dealt at `index` into a tier. Final once accepted; the next card is dealt.",
  "properties": {
    "index": {
      "maximum": 19,
      "minimum": 0,
      "type": "integer"
    },
    "tier": {
      "ref": "games.cavu.tier-madness.defs#tier",
      "type": "ref"
    }
  },
  "required": [
    "index",
    "tier"
  ],
  "type": "object"
}
rematch object

Signed in, at game over: start a rematch with the same table, hosted by whoever asks first (with the same number of rounds, and the bot if there was one). If one's already started, join it. The old game's view points everyone at it (#rematch in gameView).

This object has no properties defined.

View raw schema
{
  "description": "Signed in, at game over: start a rematch with the same table, hosted by whoever asks first (with the same number of rounds, and the bot if there was one). If one's already started, join it. The old game's view points everyone at it (#rematch in gameView).",
  "properties": {},
  "type": "object"
}
setRounds object

Host only, in the lobby: how many rounds the game will have.

Properties

totalRounds integer Required

No description available.

minimum: 3maximum: 7
View raw schema
{
  "description": "Host only, in the lobby: how many rounds the game will have.",
  "properties": {
    "totalRounds": {
      "maximum": 7,
      "minimum": 3,
      "type": "integer"
    }
  },
  "required": [
    "totalRounds"
  ],
  "type": "object"
}
skip object

Host only: stop waiting on stalled players now (as if the deadline passed): unvoted players don't vote, an absent picker's criteria is picked for them, unfinished players sit the round out.

This object has no properties defined.

View raw schema
{
  "description": "Host only: stop waiting on stalled players now (as if the deadline passed): unvoted players don't vote, an absent picker's criteria is picked for them, unfinished players sit the round out.",
  "properties": {},
  "type": "object"
}
spectate object

Watch a game by its code, anonymously: no sign-in, and only what anyone may see. Attempts are rate limited.

Properties

code string Required

No description available.

maxLength: 9 bytesminLength: 4 bytes
View raw schema
{
  "description": "Watch a game by its code, anonymously: no sign-in, and only what anyone may see. Attempts are rate limited.",
  "properties": {
    "code": {
      "maxLength": 9,
      "minLength": 4,
      "type": "string"
    }
  },
  "required": [
    "code"
  ],
  "type": "object"
}
start object

Host only: start the game.

This object has no properties defined.

View raw schema
{
  "description": "Host only: start the game.",
  "properties": {},
  "type": "object"
}
swap object

The round's one swap: two placed cards in different tiers, or none.

Properties

items array of string Required

No description available.

maxLength: 2 itemsminLength: 0 items
View raw schema
{
  "description": "The round's one swap: two placed cards in different tiers, or none.",
  "properties": {
    "items": {
      "items": {
        "maxLength": 300,
        "type": "string"
      },
      "maxLength": 2,
      "minLength": 0,
      "type": "array"
    }
  },
  "required": [
    "items"
  ],
  "type": "object"
}
vote object

Secret pre-game vote: up to 3 categories from the ballot.

Properties

categories array of string Required

No description available.

maxLength: 3 itemsminLength: 1 items
View raw schema
{
  "description": "Secret pre-game vote: up to 3 categories from the ballot.",
  "properties": {
    "categories": {
      "items": {
        "maxLength": 300,
        "type": "string"
      },
      "maxLength": 3,
      "minLength": 1,
      "type": "array"
    }
  },
  "required": [
    "categories"
  ],
  "type": "object"
}

Lexicon Garden

@