full diff

cards.sunshine.verify

sunshine.cards +4 −0
From
bafyreialcdmz6nmq6jj2phxvxznv7ufbxij6uqzwsw37jxds2luuwtj3im indexed 2026-10-12 20:15 UTC View this version
To
bafyreif6pzyihvrc37a4gvkbfzd6adx4k5wyyoetf3mevxd6drzbphmfsu indexed 2026-10-17 13:22 UTC View this version

Compatibility

backward compatible Backward compatible. 2 non-breaking changes.

Non-breaking changes (2)
  • AddedVertex AddedVertex { vertex_id: "cards.sunshine.verify:output.card" }
  • AddedEdge AddedEdge { src: "cards.sunshine.verify:output", tgt: "cards.sunshine.verify:output.card", kind: "prop", name: Some("card") }

Migration guidance

Added

  • AddedVertex { vertex_id: "cards.sunshine.verify:output.card" }

Notes

  • Non-breaking: AddedEdge { src: "cards.sunshine.verify:output", tgt: "cards.sunshine.verify:output.card", kind: "prop", name: Some("card") }

Changes

11{
22 "$type": "com.atproto.lexicon.schema",
33 "defs": {
44 "main": {
55 "description": "Checks a tap of a Sunshine Card. Called through the scanner's PDS (service auth), it also returns a signed scan record for the caller to write into the scanner's repo.",
66 "errors": [
77 {
88 "description": "The creator's deck can't be reached. Retry the same tap; if that returns replayed, tap again.",
99 "name": "CreatorUnavailable"
1010 }
1111 ],
1212 "input": {
1313 "encoding": "application/json",
1414 "schema": {
1515 "properties": {
1616 "ctr": {
1717 "description": "The read counter, in hex, from a plain-mirror tag.",
1818 "maxLength": 6,
1919 "minLength": 6,
2020 "type": "string"
2121 },
2222 "did": {
2323 "description": "The card's creator.",
2424 "format": "did",
2525 "type": "string"
2626 },
2727 "mac": {
2828 "description": "The tap's signature, in hex.",
2929 "maxLength": 16,
3030 "minLength": 16,
3131 "type": "string"
3232 },
3333 "picc": {
3434 "description": "The encrypted serial number and counter, in hex, from an encrypted-mirror tag. Supply exactly one of ctr and picc.",
3535 "maxLength": 32,
3636 "minLength": 32,
3737 "type": "string"
3838 },
3939 "uid": {
4040 "description": "The tag's serial number, in hex.",
4141 "maxLength": 14,
4242 "minLength": 14,
4343 "type": "string"
4444 }
4545 },
4646 "required": [
4747 "did",
4848 "uid",
4949 "mac"
5050 ],
5151 "type": "object"
5252 }
5353 },
5454 "output": {
5555 "encoding": "application/json",
5656 "schema": {
5757 "properties": {
58 "card": {
59 "description": "The card's public details: a complete cards.sunshine.card record. Present when valid is true, and when reason is alreadyCollected. The card's record is only published once someone collects it, so this is the only place to find a new card's details.",
60 "type": "unknown"
61 },
5862 "proof": {
5963 "description": "Write it whenever it's present, even when valid is false. When valid, it's the scan just made; when reason is alreadyCollected, it's the scanner's earlier scan of this card, signed again.",
6064 "ref": "#proof",
6165 "type": "ref"
6266 },
6367 "reason": {
6468 "knownValues": [
6569 "notGenuine",
6670 "replayed",
6771 "alreadyCollected",
6872 "unknownCard"
6973 ],
7074 "maxLength": 64,
7175 "type": "string"
7276 },
7377 "valid": {
7478 "type": "boolean"
7579 }
7680 },
7781 "required": [
7882 "valid"
7983 ],
8084 "type": "object"
8185 }
8286 },
8387 "type": "procedure"
8488 },
8589 "proof": {
8690 "description": "A signed scan record, with the arguments com.atproto.repo.createRecord needs to write it.",
8791 "properties": {
8892 "collection": {
8993 "format": "nsid",
9094 "type": "string"
9195 },
9296 "did": {
9397 "description": "The scanner: the repo to write to.",
9498 "format": "did",
9599 "type": "string"
96100 },
97101 "record": {
98102 "description": "The signed cards.sunshine.scan record.",
99103 "type": "unknown"
100104 },
101105 "rkey": {
102106 "format": "record-key",
103107 "type": "string"
104108 }
105109 },
106110 "required": [
107111 "did",
108112 "collection",
109113 "rkey",
110114 "record"
111115 ],
112116 "type": "object"
113117 }
114118 },
115119 "id": "cards.sunshine.verify",
116120 "lexicon": 1
117121}

Compare other versions