···11+{
22+ "lexicon": 1,
33+ "id": "world.geocache.cache.get",
44+ "defs": {
55+ "main": {
66+ "type": "query",
77+ "description": "Gets hydrated data for a geocache.",
88+ "parameters": {
99+ "type": "params",
1010+ "required": ["did", "rkey"],
1111+ "properties": {
1212+ "did": {
1313+ "type": "string",
1414+ "format": "at-identifier",
1515+ "description": "The DID of the cache maintainer."
1616+ },
1717+ "rkey": {
1818+ "type": "string",
1919+ "description": "The record key."
2020+ }
2121+ }
2222+ },
2323+ "output": {
2424+ "encoding": "application/json",
2525+ "schema": {
2626+ "type": "object",
2727+ "required": ["cache"],
2828+ "properties": {
2929+ /* the geocache lexicon is a bit complex -- it points to at least one extra other record,
3030+ potentially many. it would be simpler for the client if we provided a "hydrated" cache,
3131+ with all the data belonging to the geocache record being displayed in a "flat" manner.
3232+3333+ this would also allow visits for a cache to be given with the cache, though we may need
3434+ in the future a cursor type system for very long running geocaches...
3535+ */
3636+ "cache": {
3737+ "type": "ref",
3838+ "refs": "world.geocache.hydratedCache"
3939+ },
4040+ }
4141+ }
4242+ }
4343+ }
4444+ }
4545+}
+68
lexicon/world.geocache.cache.visit.json
···11+{
22+ "lexicon": 1,
33+ "id": "world.geocache.visit",
44+ "defs": {
55+ "main": {
66+ "type": "record",
77+ "description": "A record of visiting a geocache",
88+ "record": {
99+ "type": "object",
1010+ "required": ["createdAt", "visitedCache"],
1111+ "properties": {
1212+ "createdAt": {
1313+ "type": "string",
1414+ "description": "The timestamp of visitation.",
1515+ "format": "datetime"
1616+ },
1717+ "image": {
1818+ "type": "ref",
1919+ "ref": "#image"
2020+ },
2121+ "visitedCache": {
2222+ "type": "ref",
2323+ "description": "The geocache this visit is in reference to.",
2424+ "ref": "com.atproto.repo.strongRef"
2525+ },
2626+ "publicComment": {
2727+ "type": "string",
2828+ "description": "A comment describing the visit, to be displayed on the geocache's page."
2929+ "maxGraphemes": 1000,
3030+ "maxLength": 10000,
3131+ },
3232+ "signature": {
3333+ "type": "ref",
3434+ "description": "The cryptographic signature for verifying the user actually visited the cache.",
3535+ "ref": "world.geocache.visit.signature"
3636+ }
3737+ }
3838+ }
3939+ },
4040+ "image": {
4141+ "type": "object",
4242+ "required": ["blob", "imageLink"],
4343+ "properties": {
4444+ "blob": {
4545+ "type": "blob",
4646+ "accept": ["image/png","image/jpeg","image/jxl","image/heif","image/webp"],
4747+ "maxSize": 1048576,
4848+ "description": "The actual atproto image blob."
4949+ },
5050+ "imageLink": {
5151+ "type": "ref",
5252+ "ref": "#imageLink"
5353+ }
5454+ }
5555+ },
5656+ "imageLink": {
5757+ "type": "object",
5858+ "description": "A link to the image, it can be either directly to the PDS or to a CDN.",
5959+ "required": [],
6060+ "properties": {
6161+ "alt": {
6262+ "type": "string",
6363+ "description": "Alt text description of the image, for accessibility."
6464+ }
6565+ }
6666+ }
6767+ }
6868+}