ink.resenha.defs
Views shared by the calls Resenha's server answers.
Details · defs
| Kind | defs |
|---|---|
| Authority | resenha.ink |
| Indexed |
Checks
Validunlimited-stringdefs.commentView.properties.sourceNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.event.properties.kindNo maxLength, maxGraphemes or format limits this string.large-stringdefs.event.properties.reviewmaxLength is over 20 KB. Use a blob for content that large.unlimited-stringdefs.event.properties.sourceNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.reportView.properties.noteNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.reportView.properties.reasonNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.reportView.properties.resolutionNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.reportView.properties.subjectTitleNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.reportView.properties.textNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.reviewView.properties.sourceNo maxLength, maxGraphemes or format limits this string.large-stringdefs.reviewView.properties.textmaxLength is over 20 KB. Use a blob for content that large.unlimited-stringdefs.starterPackView.properties.descriptionNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.starterPackView.properties.nameNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.suggestionView.properties.latestReview.properties.titleNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.suggestionView.properties.sourceNo maxLength, maxGraphemes or format limits this string.
{
"$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
}