com.imlunahey.leaderboard.score

A signed leaderboard score. Users play locally, call /api/sign-score on the site which validates the run and returns a server HMAC, then createRecord on their own PDS. Records without a valid server signature are ignored when rendering the leaderboard.

Repository @imlunahey.com did:plc:k6acu4chiwkixvdedcmdgmal namespace authority
Details · record, key tid
Kindrecord
Record keytid
Authorityleaderboard.imlunahey.com
Indexed
cid bafyreigtg33lyk7jgdkcl7onc5irf3egkybzekyiue2siabxevfrlaiuk4

Checks

Valid
  • missing-primary-description defs.mainThe record has no description.
JSONDownload
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "key": "tid",
      "record": {
        "properties": {
          "achievedAt": {
            "description": "Timestamp assigned by the signing server, part of the HMAC payload.",
            "format": "datetime",
            "type": "string"
          },
          "did": {
            "description": "The author's DID, copied into the record so the server HMAC binds the score to the player. Must match the record repo's DID when displayed.",
            "format": "did",
            "type": "string"
          },
          "game": {
            "description": "The game identifier. Includes the variant for games with multiple boards (e.g. typing-30).",
            "knownValues": [
              "snake",
              "wordle",
              "typing-15",
              "typing-30",
              "typing-60"
            ],
            "maxLength": 64,
            "type": "string"
          },
          "replay": {
            "description": "Optional compact replay data (input log, guess sequence, typed text hash). Not required; when present, the signing server may use it for additional validation before signing.",
            "maxLength": 4000,
            "type": "string"
          },
          "score": {
            "description": "The numeric score. Meaning depends on the game — for snake, food eaten; for typing, wpm; for wordle, guesses used (lower is better).",
            "minimum": 0,
            "type": "integer"
          },
          "sig": {
            "description": "Base64url-encoded HMAC-SHA256 of the canonical {game, score, did, achievedAt} payload, signed with a server secret. The leaderboard renderer verifies this and drops records that don't match.",
            "maxLength": 128,
            "type": "string"
          },
          "subject": {
            "description": "AT-URI of the leaderboard marker record this score is claiming against.",
            "format": "at-uri",
            "type": "string"
          }
        },
        "required": [
          "game",
          "score",
          "subject",
          "did",
          "achievedAt",
          "sig"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "description": "A signed leaderboard score. Users play locally, call /api/sign-score on the site which validates the run and returns a server HMAC, then createRecord on their own PDS. Records without a valid server signature are ignored when rendering the leaderboard.",
  "id": "com.imlunahey.leaderboard.score",
  "lexicon": 1
}