changedOutput schema / properties / posts / items / properties / embed / description
Previous value: -"Media or link embed attached to this post. type: \"images\" | \"external\" | \"record\" | \"video\" | \"unknown\". images: array of { url, alt } — also carries app.bsky.embed.gallery embeds. external: { uri, title, description }. record: { uri, cid, text?, authorHandle?, embeds?, media?, omittedEmbeds?, recordKind? } — embeds is the quoted post's own attachments, so a quote of an image post carries those images here; media is the image/video/link attached alongside the quote by the post doing the quoting, on a recordWithMedia embed. Both are embeds of these same shapes. Bluesky fills embeds for the post being quoted and no deeper, so a quote nested inside another quote ordinarily carries none; omittedEmbeds counts any it did carry that were past the nesting this server follows, so an unattached quote and one whose attachments are missing are never the same value. Fetch the quote uri as its own post to read them. recordKind is absent for an ordinary quoted post and otherwise names what stood in for one: \"notFound\" | \"blocked\" | \"detached\" (the quote exists but cannot be read) or \"generator\" | \"list\" | \"starterPack\" | \"labeler\" | \"unknown\" (the quoted record is not a post). A \"generator\" quote is a feed: pass its uri to bsky_get_feed to read it. When recordKind is set, text and authorHandle are absent because that variant does not carry them — do not read the quote as an empty post. video: { playlist?, thumbnail?, presentation? }. unknown: { raw } — raw is the upstream $type this server has no mapping for."New value: +"Media or link embed attached to this post. type: \"images\" | \"external\" | \"record\" | \"video\" | \"unknown\". images: array of { url, alt } — also carries app.bsky.embed.gallery embeds. external: { uri, title, description }. record: { uri, cid, text?, facets?, authorHandle?, embeds?, media?, omittedEmbeds?, recordKind? } — facets retain UTF-8 byte ranges and link URI, mention DID, or tag features on the original text; embeds is the quoted post's own attachments, so a quote of an image post carries those images here; media is the image/video/link attached alongside the quote by the post doing the quoting, on a recordWithMedia embed. Both are embeds of these same shapes. Bluesky fills embeds for the post being quoted and no deeper, so a quote nested inside another quote ordinarily carries none; omittedEmbeds counts any it did carry that were past the nesting this server follows, so an unattached quote and one whose attachments are missing are never the same value. Fetch the quote uri as its own post to read them. recordKind is absent for an ordinary quoted post and otherwise names what stood in for one: \"notFound\" | \"blocked\" | \"detached\" (the quote exists but cannot be read) or \"generator\" | \"list\" | \"starterPack\" | \"labeler\" | \"unknown\" (the quoted record is not a post). A \"generator\" quote is a feed: pass its uri to bsky_get_feed to read it. When recordKind is set, text and authorHandle are absent because that variant does not carry them — do not read the quote as an empty post. video: { playlist?, thumbnail?, presentation? }. unknown: { raw } — raw is the upstream $type this server has no mapping for."
addedOutput schema / properties / posts / items / properties / facets
Added value: +{
+ "description": "Rich-text facets on the unchanged text, with UTF-8 byte ranges and full link, mention, or tag values.",
+ "items": {
+ "additionalProperties": {},
+ "description": "One rich-text annotation on the original post text.",
+ "properties": {
+ "features": {
+ "description": "Features applied to this range, in upstream order.",
+ "items": {
+ "anyOf": [
+ {
+ "additionalProperties": {},
+ "description": "Link destination.",
+ "properties": {
+ "$type": {
+ "const": "app.bsky.richtext.facet#link",
+ "description": "Link feature.",
+ "type": "string"
+ },
+ "uri": {
+ "description": "Complete destination URI, independent of abbreviated display text.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "$type",
+ "uri"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": {},
+ "description": "Mention identity.",
+ "properties": {
+ "$type": {
+ "const": "app.bsky.richtext.facet#mention",
+ "description": "Mention feature.",
+ "type": "string"
+ },
+ "did": {
+ "description": "Mentioned account DID.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "$type",
+ "did"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": {},
+ "description": "Tag value.",
+ "properties": {
+ "$type": {
+ "const": "app.bsky.richtext.facet#tag",
+ "description": "Tag feature.",
+ "type": "string"
+ },
+ "tag": {
+ "description": "Tag text without the leading hash.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "$type",
+ "tag"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": {},
+ "description": "An open-union feature whose complete fields are retained as literal metadata.",
+ "properties": {
+ "$type": {
+ "description": "An upstream feature type other than the known link, mention, or tag types.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "$type"
+ ],
+ "type": "object"
+ }
+ ],
+ "description": "A known link, mention, or tag feature, or an upstream extension variant."
+ },
+ "type": "array"
+ },
+ "index": {
+ "additionalProperties": {},
+ "description": "UTF-8 byte range; these are not JavaScript string indices. Additional upstream fields are retained.",
+ "properties": {
+ "byteEnd": {
+ "description": "Exclusive UTF-8 byte offset in the original text.",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "byteStart": {
+ "description": "Inclusive UTF-8 byte offset in the original text.",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "byteStart",
+ "byteEnd"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "index",
+ "features"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+}