{
"id": "net.anisota.chronicle.level",
"defs": {
"main": {
"key": "any",
"type": "record",
"record": {
"type": "object",
"required": [
"level",
"snapshot",
"signature",
"createdAt"
],
"properties": {
"level": {
"type": "integer",
"maximum": 99,
"minimum": 1,
"description": "The level that was reached"
},
"journey": {
"ref": "#journeyData",
"type": "ref"
},
"snapshot": {
"ref": "#levelSnapshot",
"type": "ref"
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "When the level was reached"
},
"signature": {
"ref": "#chronicleSignature",
"type": "ref"
}
}
},
"description": "Immutable level milestone record. Created once on level-up with createRecord. rkey is zero-padded level (001-099)."
},
"journeyData": {
"type": "object",
"properties": {
"daysFromPreviousLevel": {
"type": "integer",
"minimum": 0,
"description": "Days taken to advance from previous level"
},
"xpGainedFromPreviousLevel": {
"type": "integer",
"minimum": 0,
"description": "XP gained since previous level"
}
},
"description": "Journey info from previous level"
},
"levelSnapshot": {
"type": "object",
"required": [
"totalXP"
],
"properties": {
"totalXP": {
"type": "integer",
"minimum": 0,
"description": "Total XP at time of level-up"
},
"daysPlayed": {
"type": "integer",
"minimum": 0,
"description": "Total days played at time of level-up"
},
"itemsTotal": {
"type": "integer",
"minimum": 0,
"description": "Total items at time of level-up"
},
"postsReadTotal": {
"type": "integer",
"minimum": 0,
"description": "Total posts read all-time at level-up"
},
"specimensDocumented": {
"type": "integer",
"minimum": 0,
"description": "Total specimens documented at time of level-up"
}
},
"description": "Player state at the moment of leveling up"
},
"chronicleSignature": {
"type": "object",
"required": [
"sig",
"alg",
"kid",
"signedAt",
"nonce",
"version"
],
"properties": {
"alg": {
"type": "string",
"description": "Signing algorithm (ES256)"
},
"kid": {
"type": "string",
"description": "Key identifier for the signing key"
},
"sig": {
"type": "string",
"description": "Base64-encoded ES256 signature"
},
"nonce": {
"type": "string",
"description": "Unique random nonce to prevent replay"
},
"version": {
"type": "integer",
"description": "Signature schema version"
},
"signedAt": {
"type": "string",
"format": "datetime",
"description": "When the record was signed"
}
},
"description": "ES256 cryptographic signature proving record authenticity"
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}