ink.resenha.defs

Views shared by the calls Resenha's server answers.

Repository @resenha.ink did:plc:v7itjf4h3sb5zuegiiskctqb namespace authority
Details · defs
Kinddefs
Authorityresenha.ink
Indexed
cid bafyreicfbywmroxljvo4wfozq5v3ljohebicqwonttzvjg74lxybimsn7m

Checks

Valid
JSONDownload
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "bookIdentifiers": {
      "description": "A book's numbers in every catalogue that has it. Any one of them finds the book; together they tie the catalogues to each other.",
      "properties": {
        "asin": {
          "description": "Amazon's, as Popfeed keeps it.",
          "maxLength": 16,
          "type": "string"
        },
        "goodreadsId": {
          "maxLength": 32,
          "type": "string"
        },
        "hiveId": {
          "description": "BookHive's ID for the edition.",
          "maxLength": 64,
          "type": "string"
        },
        "isbn10": {
          "maxLength": 10,
          "type": "string"
        },
        "isbn13": {
          "maxLength": 13,
          "type": "string"
        },
        "openLibraryEdition": {
          "description": "Open Library's edition key, such as /books/OL62590811M.",
          "maxLength": 32,
          "type": "string"
        },
        "openLibraryWork": {
          "description": "Open Library's work key, such as /works/OL45908582W: the book across its editions.",
          "maxLength": 32,
          "type": "string"
        }
      },
      "type": "object"
    },
    "bookRef": {
      "description": "Which book a record is about, in every key anyone uses, so an app finds it with the one it has: by BookHive ID, ISBN, Open Library work, or the reader's own record in another app. Resenha's records carry it beside their own keys. Nothing is required but the title, so a book no catalogue knows can still be named.",
      "properties": {
        "authors": {
          "description": "Tab-separated, as BookHive stores them.",
          "maxLength": 1024,
          "type": "string"
        },
        "cover": {
          "description": "A cover the writer's app showed for the book, downloaded and found to be a real cover rather than a catalogue's stand-in picture. Resenha's server keeps it as a fallback for the book's cover, after the catalogue's and Open Library's.",
          "format": "uri",
          "maxLength": 1000,
          "type": "string"
        },
        "identifiers": {
          "ref": "#bookIdentifiers",
          "type": "ref"
        },
        "records": {
          "description": "The reader's own records for the book in any app: their buzz.bookhive.book, their social.popfeed.feed.listItem records, a record in an app to come.",
          "items": {
            "format": "at-uri",
            "type": "string"
          },
          "maxLength": 20,
          "type": "array"
        },
        "title": {
          "maxLength": 512,
          "type": "string"
        }
      },
      "required": [
        "title"
      ],
      "type": "object"
    },
    "bookView": {
      "description": "Enough of a book to show a row. Cover and details come from BookHive's catalogue when the server has them; otherwise the app asks BookHive itself.",
      "properties": {
        "authors": {
          "description": "Authors as BookHive stores them, tab-separated.",
          "maxLength": 1024,
          "type": "string"
        },
        "cover": {
          "description": "For a Popfeed book, Popfeed's own cover, its surest address.",
          "format": "uri",
          "type": "string"
        },
        "covers": {
          "description": "For a Popfeed book, every address of its cover, surest first, when there is more than one: the poster blob's address on Bluesky's CDN, isbndb's, then the item's posterUrl. A reader tries the next when one fails.",
          "items": {
            "format": "uri",
            "type": "string"
          },
          "maxLength": 8,
          "type": "array"
        },
        "genres": {
          "items": {
            "maxLength": 64,
            "type": "string"
          },
          "maxLength": 32,
          "type": "array"
        },
        "hiveId": {
          "description": "The book's BookHive ID, or, for a Popfeed book BookHive's catalogue doesn't know, a stand-in beginning with popfeed- that no BookHive call takes.",
          "maxLength": 64,
          "type": "string"
        },
        "isbn13": {
          "description": "The edition the reader's record names, when it names one. For a book BookHive's catalogue doesn't know, the key of the page its readers share (ink.resenha.book.getBook).",
          "maxLength": 13,
          "type": "string"
        },
        "pages": {
          "minimum": 1,
          "type": "integer"
        },
        "title": {
          "maxLength": 512,
          "type": "string"
        },
        "year": {
          "description": "Year of publication, from BookHive's catalogue.",
          "type": "integer"
        }
      },
      "required": [
        "hiveId"
      ],
      "type": "object"
    },
    "commentView": {
      "description": "A comment in the thread about a reader reading a book.",
      "properties": {
        "author": {
          "format": "did",
          "type": "string"
        },
        "cid": {
          "format": "cid",
          "type": "string"
        },
        "createdAt": {
          "format": "datetime",
          "type": "string"
        },
        "parent": {
          "description": "The comment this one answers; absent at the top.",
          "format": "at-uri",
          "type": "string"
        },
        "removed": {
          "description": "Removed by Resenha's maintainer but kept in place because replies hang from it: no words, no author.",
          "type": "boolean"
        },
        "root": {
          "format": "at-uri",
          "type": "string"
        },
        "source": {
          "description": "A Resenha comment, or a BookHive buzz, which is read here but answered on BookHive.",
          "knownValues": [
            "resenha",
            "bookhive"
          ],
          "type": "string"
        },
        "text": {
          "maxGraphemes": 1000,
          "maxLength": 10000,
          "type": "string"
        },
        "uri": {
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "author",
        "text",
        "createdAt",
        "source"
      ],
      "type": "object"
    },
    "event": {
      "description": "Something a reader did with a book.",
      "properties": {
        "actor": {
          "format": "did",
          "type": "string"
        },
        "book": {
          "ref": "#bookView",
          "type": "ref"
        },
        "cid": {
          "description": "The record's version as the server last saw it, for a like or comment to name.",
          "format": "cid",
          "type": "string"
        },
        "commentCount": {
          "description": "Comments in the event's home: the thread about the reader reading this book (Resenha comments and BookHive buzzes) for a reading or a review kept on BookHive, Popfeed's comments and replies on a Popfeed review, replies to the post of a review published from Resenha.",
          "minimum": 0,
          "type": "integer"
        },
        "date": {
          "format": "datetime",
          "type": "string"
        },
        "excerpt": {
          "description": "The start of the review, plain text.",
          "maxGraphemes": 300,
          "maxLength": 3000,
          "type": "string"
        },
        "kind": {
          "description": "What they did. wantsToRead and abandoned are dated by when the server saw the status change, else by when the book was added; progress by the record.",
          "knownValues": [
            "started",
            "finished",
            "reviewed",
            "wantsToRead",
            "abandoned",
            "progress"
          ],
          "type": "string"
        },
        "likeCount": {
          "description": "Likes in the event's home: Resenha likes on the reader's book record for a reading or a review kept on BookHive, Popfeed likes on a Popfeed review, Bluesky likes on the post that announced a review published from Resenha.",
          "minimum": 0,
          "type": "integer"
        },
        "popfeedReview": {
          "description": "For a reviewed event from Popfeed: the social.popfeed.feed.review record, whose comments and likes are Popfeed's.",
          "format": "at-uri",
          "type": "string"
        },
        "post": {
          "description": "For a reviewed event with source resenha: the Bluesky post that announced the review, whose likes and replies are the review's.",
          "ref": "com.atproto.repo.strongRef",
          "type": "ref"
        },
        "progress": {
          "ref": "#progressView",
          "type": "ref"
        },
        "review": {
          "description": "The whole review, plain markdown, on reviewed events and on finished ones that carry the review.",
          "maxGraphemes": 100000,
          "maxLength": 1000000,
          "type": "string"
        },
        "source": {
          "knownValues": [
            "bookhive",
            "popfeed",
            "resenha"
          ],
          "type": "string"
        },
        "stars": {
          "description": "In half stars, 1 to 10, as BookHive keeps them.",
          "maximum": 10,
          "minimum": 1,
          "type": "integer"
        },
        "uri": {
          "description": "The record it comes from: the reader's BookHive book record, or their Popfeed list item (or review, for a book reviewed but on no list).",
          "format": "at-uri",
          "type": "string"
        },
        "viewer": {
          "ref": "#viewerState",
          "type": "ref"
        }
      },
      "required": [
        "uri",
        "kind",
        "actor",
        "book",
        "date",
        "source"
      ],
      "type": "object"
    },
    "followerView": {
      "description": "Someone who follows the caller.",
      "properties": {
        "books": {
          "description": "How many books they keep in the index; 0 for someone who isn't a reader.",
          "minimum": 0,
          "type": "integer"
        },
        "did": {
          "format": "did",
          "type": "string"
        },
        "followedAt": {
          "description": "When they followed, when the server heard the follow itself; absent for follows older than its listening.",
          "format": "datetime",
          "type": "string"
        },
        "follows": {
          "description": "Whether the caller follows them back.",
          "type": "boolean"
        },
        "readingNow": {
          "items": {
            "ref": "#bookView",
            "type": "ref"
          },
          "maxLength": 3,
          "type": "array"
        }
      },
      "required": [
        "did"
      ],
      "type": "object"
    },
    "knownFollowers": {
      "description": "Among the caller's follows, who follows a reader: social proof within Resenha's community, from the follows and followers the server keeps.",
      "properties": {
        "count": {
          "minimum": 0,
          "type": "integer"
        },
        "followers": {
          "description": "Up to three of them, to name.",
          "items": {
            "format": "did",
            "type": "string"
          },
          "maxLength": 3,
          "type": "array"
        }
      },
      "required": [
        "count"
      ],
      "type": "object"
    },
    "profileView": {
      "description": "Someone's name and picture, as Bluesky's AppView last gave them to the server; absent for a reader it hasn't fetched yet, whose name the app then finds itself.",
      "properties": {
        "avatar": {
          "format": "uri",
          "type": "string"
        },
        "did": {
          "format": "did",
          "type": "string"
        },
        "displayName": {
          "maxGraphemes": 64,
          "maxLength": 640,
          "type": "string"
        },
        "handle": {
          "format": "handle",
          "type": "string"
        }
      },
      "required": [
        "did"
      ],
      "type": "object"
    },
    "progressView": {
      "description": "How far through the book the reader is, as the record says.",
      "properties": {
        "currentPage": {
          "minimum": 1,
          "type": "integer"
        },
        "percent": {
          "maximum": 100,
          "minimum": 0,
          "type": "integer"
        },
        "totalPages": {
          "minimum": 1,
          "type": "integer"
        },
        "updatedAt": {
          "format": "datetime",
          "type": "string"
        }
      },
      "required": [
        "percent",
        "updatedAt"
      ],
      "type": "object"
    },
    "readerView": {
      "properties": {
        "books": {
          "description": "How many books they keep on BookHive.",
          "minimum": 0,
          "type": "integer"
        },
        "booksInCommon": {
          "description": "With the caller, when sorted by similar.",
          "minimum": 0,
          "type": "integer"
        },
        "did": {
          "format": "did",
          "type": "string"
        },
        "followedAt": {
          "description": "When the caller followed them, for the caller's own list.",
          "format": "datetime",
          "type": "string"
        },
        "followsYou": {
          "description": "Whether they follow the caller, as the server knows it.",
          "type": "boolean"
        },
        "joinedAt": {
          "description": "When they started using Resenha.",
          "format": "datetime",
          "type": "string"
        },
        "lastActivity": {
          "description": "When they last started, finished, changed or progressed in a book.",
          "format": "datetime",
          "type": "string"
        },
        "readingNow": {
          "items": {
            "ref": "#bookView",
            "type": "ref"
          },
          "maxLength": 3,
          "type": "array"
        }
      },
      "required": [
        "did"
      ],
      "type": "object"
    },
    "reportView": {
      "description": "A reported, or removed, Resenha comment as the maintainers see it.",
      "properties": {
        "author": {
          "format": "did",
          "type": "string"
        },
        "note": {
          "type": "string"
        },
        "reason": {
          "type": "string"
        },
        "removed": {
          "type": "boolean"
        },
        "removedAt": {
          "format": "datetime",
          "type": "string"
        },
        "reportedAt": {
          "format": "datetime",
          "type": "string"
        },
        "reporter": {
          "format": "did",
          "type": "string"
        },
        "resolution": {
          "knownValues": [
            "remove",
            "keep",
            "removeAndHide",
            "restore"
          ],
          "type": "string"
        },
        "resolvedAt": {
          "format": "datetime",
          "type": "string"
        },
        "subject": {
          "description": "The book record the thread is on.",
          "format": "at-uri",
          "type": "string"
        },
        "subjectOwner": {
          "format": "did",
          "type": "string"
        },
        "subjectTitle": {
          "description": "That book's title, when the index has it.",
          "type": "string"
        },
        "text": {
          "description": "The comment's words, as the index keeps them.",
          "type": "string"
        },
        "uri": {
          "description": "The comment.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri"
      ],
      "type": "object"
    },
    "reviewView": {
      "properties": {
        "author": {
          "format": "did",
          "type": "string"
        },
        "book": {
          "ref": "#bookView",
          "type": "ref"
        },
        "createdAt": {
          "format": "datetime",
          "type": "string"
        },
        "excerpt": {
          "maxGraphemes": 300,
          "maxLength": 3000,
          "type": "string"
        },
        "hasSpoilers": {
          "type": "boolean"
        },
        "languages": {
          "items": {
            "format": "language",
            "type": "string"
          },
          "maxLength": 8,
          "type": "array"
        },
        "source": {
          "knownValues": [
            "bookhive",
            "popfeed",
            "resenha"
          ],
          "type": "string"
        },
        "stars": {
          "maximum": 10,
          "minimum": 1,
          "type": "integer"
        },
        "text": {
          "description": "The whole review, when asked for with full.",
          "maxGraphemes": 100000,
          "maxLength": 1000000,
          "type": "string"
        },
        "title": {
          "maxGraphemes": 300,
          "maxLength": 3000,
          "type": "string"
        },
        "uri": {
          "description": "The review: a Standard.site document, a Popfeed review, or a BookHive book record with a review.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "author",
        "book",
        "createdAt",
        "source"
      ],
      "type": "object"
    },
    "starterPackView": {
      "description": "A starter pack the server keeps in the official account.",
      "properties": {
        "description": {
          "type": "string"
        },
        "list": {
          "description": "The reference list the pack is built on.",
          "format": "at-uri",
          "type": "string"
        },
        "members": {
          "items": {
            "format": "did",
            "type": "string"
          },
          "maxLength": 150,
          "type": "array"
        },
        "name": {
          "type": "string"
        },
        "updatedAt": {
          "format": "datetime",
          "type": "string"
        },
        "uri": {
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "name",
        "members"
      ],
      "type": "object"
    },
    "suggestionView": {
      "description": "A reader worth following, for an empty Parlor.",
      "properties": {
        "activeDays": {
          "description": "Days over the last six months on which they started, finished, changed, progressed in or reviewed a book, on any source.",
          "minimum": 0,
          "type": "integer"
        },
        "books": {
          "minimum": 0,
          "type": "integer"
        },
        "did": {
          "format": "did",
          "type": "string"
        },
        "followsYou": {
          "description": "They follow the caller already.",
          "type": "boolean"
        },
        "knownFollowers": {
          "ref": "#knownFollowers",
          "type": "ref"
        },
        "languages": {
          "description": "The languages they said their reviews are in.",
          "items": {
            "format": "language",
            "type": "string"
          },
          "type": "array"
        },
        "latestReview": {
          "properties": {
            "date": {
              "format": "datetime",
              "type": "string"
            },
            "excerpt": {
              "maxGraphemes": 200,
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "type": "object"
        },
        "reviews": {
          "minimum": 0,
          "type": "integer"
        },
        "source": {
          "description": "Where they read: Resenha's readers come first, then BookHive's and Popfeed's.",
          "knownValues": [
            "resenha",
            "bookhive",
            "popfeed"
          ],
          "type": "string"
        },
        "tier": {
          "maximum": 2,
          "minimum": 0,
          "type": "integer"
        }
      },
      "required": [
        "did",
        "source"
      ],
      "type": "object"
    },
    "viewerState": {
      "description": "The caller's own reactions to a book record.",
      "properties": {
        "like": {
          "description": "The caller's like, to take it back.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "type": "object"
    }
  },
  "description": "Views shared by the calls Resenha's server answers.",
  "id": "ink.resenha.defs",
  "lexicon": 1
}